From f4b0618c3fbedbff2e5bbcd8d3259e79ebf46c46 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Mon, 2 Feb 2026 22:04:33 +0000 Subject: [PATCH 1/3] Add JS bindings using napi-rs - Added `napi`, `napi-derive`, and `napi-build` dependencies. - Added `node` feature to `Cargo.toml`. - Created `src/js_api.rs` with `formatFlag`, `formatFlagFromContext`, and `getSeedOrNull`. - Added `build.rs` for napi setup. - Created `package.json`, `index.js` and `test.js`. Co-authored-by: ixe013 <1418338+ixe013@users.noreply.github.com> --- Cargo.toml | 6 ++++++ build.rs | 3 +++ index.js | 12 ++++++++++++ package.json | 16 ++++++++++++++++ src/js_api.rs | 17 +++++++++++++++++ src/lib.rs | 3 +++ test.js | 23 +++++++++++++++++++++++ 7 files changed, 80 insertions(+) create mode 100644 build.rs create mode 100644 index.js create mode 100644 package.json create mode 100644 src/js_api.rs create mode 100644 test.js diff --git a/Cargo.toml b/Cargo.toml index 9469606..a0650fb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,11 @@ once_cell = "*" md5 = "*" tracing = "*" pyo3 = { version = "*", features = ["extension-module", "abi3-py37"], optional = true } +napi = { version = "2", default-features = false, features = ["napi4"], optional = true } +napi-derive = { version = "2", optional = true } + +[build-dependencies] +napi-build = "2" [lib] crate-type = ["lib", "staticlib", "cdylib"] @@ -16,3 +21,4 @@ crate-type = ["lib", "staticlib", "cdylib"] [features] default = [] python = ["dep:pyo3"] +node = ["dep:napi", "dep:napi-derive"] diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..0f1b010 --- /dev/null +++ b/build.rs @@ -0,0 +1,3 @@ +fn main() { + napi_build::setup(); +} diff --git a/index.js b/index.js new file mode 100644 index 0000000..116ec72 --- /dev/null +++ b/index.js @@ -0,0 +1,12 @@ +const { existsSync } = require('fs') +const { join } = require('path') + +let nativeBinding = null + +if (existsSync(join(__dirname, 'index.node'))) { + nativeBinding = require('./index.node') +} else { + throw new Error('Failed to load native binding') +} + +module.exports = nativeBinding diff --git a/package.json b/package.json new file mode 100644 index 0000000..72b17e1 --- /dev/null +++ b/package.json @@ -0,0 +1,16 @@ +{ + "name": "ctflags", + "version": "0.4.0", + "main": "index.js", + "napi": { + "name": "ctflags" + }, + "scripts": { + "build": "napi build --platform --release", + "build:debug": "napi build --platform", + "test": "node test.js" + }, + "devDependencies": { + "@napi-rs/cli": "^2.18.0" + } +} diff --git a/src/js_api.rs b/src/js_api.rs new file mode 100644 index 0000000..7e0df72 --- /dev/null +++ b/src/js_api.rs @@ -0,0 +1,17 @@ +use napi_derive::napi; +use crate::{flags, seed}; + +#[napi(js_name = "formatFlag")] +pub fn format_flag(step: String, salt: Option) -> String { + flags::format_flag(&step, salt) +} + +#[napi(js_name = "formatFlagFromContext")] +pub fn format_flag_from_context(context: String, step: String, salt: Option) -> String { + flags::format_flag_from_context(&context, &step, salt) +} + +#[napi(js_name = "getSeedOrNull")] +pub fn get_seed_or_null() -> String { + seed::get_or_null() +} diff --git a/src/lib.rs b/src/lib.rs index 0e58c54..2c7099a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,9 @@ #[cfg(feature = "python")] pub mod python_api; +#[cfg(feature = "node")] +pub mod js_api; + pub mod seed; pub mod seed_adapter; pub mod flags; diff --git a/test.js b/test.js new file mode 100644 index 0000000..8bcfcdf --- /dev/null +++ b/test.js @@ -0,0 +1,23 @@ +const ctflags = require('./index.js'); +console.log('Testing ctflags bindings...'); + +try { + const seed = ctflags.getSeedOrNull(); + console.log('Seed:', seed); + + const flag = ctflags.formatFlag('step1', 'somesalt'); + console.log('Flag:', flag); + + const flagContext = ctflags.formatFlagFromContext('ctx', 'step1', null); + console.log('Flag Context:', flagContext); + + // Basic assertions + if (typeof seed !== 'string') throw new Error('getSeedOrNull failed'); + if (typeof flag !== 'string' || !flag.startsWith('flag(step1).')) throw new Error('formatFlag failed: ' + flag); + if (typeof flagContext !== 'string' || !flagContext.startsWith('flag(step1).')) throw new Error('formatFlagFromContext failed: ' + flagContext); + + console.log('SUCCESS'); +} catch (error) { + console.error('FAILURE:', error); + process.exit(1); +} From 1f060c98133597fdf58fb9258012fa1eec598ba8 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Mon, 2 Feb 2026 22:37:40 +0000 Subject: [PATCH 2/3] Fix JS bindings build and CI - Updated `package.json` to include `--features node` in build script and use local binary name. - Updated `index.js` to load `ctflags.node`. - Added `build-node` job to `.github/workflows/build-and-test.yml` to verify Node.js bindings in CI. - Updated `Cargo.toml` dependencies to `*` as requested. Co-authored-by: ixe013 <1418338+ixe013@users.noreply.github.com> --- .github/workflows/build-and-test.yml | 14 + Cargo.toml | 6 +- ctflags.node | Bin 0 -> 560632 bytes index.d.ts | 8 + index.js | 7 +- node_modules/.bin/napi | 1 + node_modules/.package-lock.json | 25 + node_modules/@napi-rs/cli/LICENSE | 21 + node_modules/@napi-rs/cli/README.md | 96 + node_modules/@napi-rs/cli/package.json | 65 + node_modules/@napi-rs/cli/scripts/index.js | 51371 +++++++++++++++++++ package-lock.json | 32 + package.json | 4 +- 13 files changed, 51642 insertions(+), 8 deletions(-) create mode 100755 ctflags.node create mode 100644 index.d.ts create mode 120000 node_modules/.bin/napi create mode 100644 node_modules/.package-lock.json create mode 100644 node_modules/@napi-rs/cli/LICENSE create mode 100644 node_modules/@napi-rs/cli/README.md create mode 100644 node_modules/@napi-rs/cli/package.json create mode 100755 node_modules/@napi-rs/cli/scripts/index.js create mode 100644 package-lock.json diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index fcded6b..8e366b6 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -41,6 +41,20 @@ jobs: - name: Test the library run: cargo test + build-node: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 20 + - name: Install dependencies + run: npm install + - name: Build + run: npm run build + - name: Test + run: npm test + build-python: runs-on: ubuntu-latest needs: build diff --git a/Cargo.toml b/Cargo.toml index a0650fb..2393fca 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,11 +9,11 @@ once_cell = "*" md5 = "*" tracing = "*" pyo3 = { version = "*", features = ["extension-module", "abi3-py37"], optional = true } -napi = { version = "2", default-features = false, features = ["napi4"], optional = true } -napi-derive = { version = "2", optional = true } +napi = { version = "*", default-features = false, features = ["napi4"], optional = true } +napi-derive = { version = "*", optional = true } [build-dependencies] -napi-build = "2" +napi-build = "*" [lib] crate-type = ["lib", "staticlib", "cdylib"] diff --git a/ctflags.node b/ctflags.node new file mode 100755 index 0000000000000000000000000000000000000000..90f579be5c9ff1bc047ebef7221160c5129405ed GIT binary patch literal 560632 zcmcG%31AdO+W-Gl&-6^sWG3m5kb?vmE{zHy;DvXP(>p5evhJ?QkPHwFNz4I3ch`WT z0aPNOL{SJT8bKt2XhhVAit)lI9;~9q0}YB2@8ALdZ*|oqoigoj-}l}BXfxfPe)_4Z zr>>`to?J8G+=&`v6#cm9bn3n$%9b~p78p?xurU;ae+SV(@_@Q=WXrqi_e@RPh<-=4 z@G$suPM_NukOx_hLY{QlefLTmKf{v3~MTPgn+-?crzCm&~F3Y{Uo z)#ozS3i*t;dVc4`2>IReJNld#n8(B^ypVW|O67OdF5Fx^gw_=zoYu#Bem9HcQuI6e z+(mmU3jQcOHGNVI<;dqsV+2vZPwgur82ygs*@bvc#7rjOKm6j)^P@qQ3-x=b)D!*Y zvi!rp6LGk3OgjG(IxTo{zm-js=d?UL?Z_)HPG9RiuyZSJIevKRLcQGO#i};SPL)1OKZ7FLdDZ95}C@y~XEV2mZJN ze;&LyyS?Hd|FHxA*?|X9&U%Yyh66v{fnNsRTRig}By zz++LNdP`Sd2i_mNH+yC|@N5S?lO6a44*XIFp69@4IPlpH{Ave&tpi`=z*jo(yB+vC z2mY`Ff5w5o=D^=^;O{%|j~)0v2mZ4I*U(`1R<67bJl26HI`A|HKH7nw1wOb(ODis> zImlN!@EQkxrvqQ>z#jtdEk2Jp$Uou0w>#*0#ewf~(6iTp>u|Pu%g1B~p6S3(b>L?^ z@JoKj{jb)8i!0s6G!l$||NcLZ#oS$Yyj^D+LUfZsKI=a}cno|& zjRF*;Slo%T?sJ*$xG=;s3>#)4`n+9cFWxqmPYqU(>Pbe%562e$5uPajdeJ?#Aub1C)8$xr@7I|G~ zT^rOauNPR?0eV?p*I3sv^tQZiw625nk-Xk)U3+N1yne*G_R&wc<{uFs-HH#t=Gl9( z{O*Tu-QA}z&tc9M(X|uW7M;PGPrCZ@?Yq93_WqCo7g28Rj9Decx#bn%vWnbX$~|k! zdAS9VvdE0W@`^~=l=H?Fl@v#&gr^ln#J%3{iYico&V^rG;L^4#eq zWwXK+x%{FxmOH(yWL9o|NpVG_s-jz5s;bS~vyQaq=yxFGkUNO|R~h>$KU&y7^&M@lOSk=)Wq zaRCp&(!;ffA)Q|o376#-h080tC51%A%(9X>-NI#&>9A07K7tGvRZ9H@k)lXN1d)>W zxA@r2k~~iN({c-org1wUvU-VTNu&&kt|*D-k7Yg?B5V{1 z7nFymN4gbG%b!&$0_uuSZe=mf1uXx4ta5WJipq1X94RP}RWxKtJk zu>$c7M>C2_riF{Bd~P`k@N@#IEG*z(rE_qSTSoasCFK#C1p}AlQ)x+gVO1{lqJqpQ zrs*i-gt%Du^2Jv!PhoLMF2uuD4$rDAo)s>o>8P3&Cmct!aDlIaqTE7MOkRviXTn0! zqCP27aaIl$p_W_$sX1j3;vp1>)7hx!Ri!g{zFBre{CLa}GNOimP$r7;Sa@1VSp`o- z{+t54<|(M47e$KB3?oIh0LOU4%20btX7RHM9Ghjs=}u2I4UX_0oztqji?%P!iW=& z<8c^`&f*p^yAhpV3Gsm~K8C_eZxjxQsqj20pQ7;4GeS>D;W?6LD7;$o$qFx(`g0V% zYoirSs#bWjl&?{E+k+xLwF>`ko6u9Q@Bt4C-m37>Mxkf7!fPKAyhGuwlAB9=+Br}1 zEQQx@5PEVHZc6!5g-7jErSL6JiTKwje5>Sj3fDFX`9=rc;=tP+c&7t5m-VzmG~5ga zo~>}k9a?;5D*UQv1g~=7H4494%GW7;wd4&7Z<4%8;ZIB6qVN{UcPso=$=ekk4YyO_ zc@K(or7Z7hH#*F$8(Aus6OCh3F6DDnF6F1HT*{ZKT*_CeT*}v~T*}v}T*^19T*@~o ze8?7IhgJvP?!f8Ro_4E|<=<5Jyyt}ekiu`3JWJuVQct$RAC>Ys3V%uRJcWNId8xwL z^CCXg3Xj^MPT`uAZ%}x;Tgl_R4Lz~@Q!jZe(Y3u=pTZo@Zk_X(S9VSOz@Dx z>*ordt?-c4KUv|`R|)x<3a`CV@KS~6T`hR6!W%0EuTyy2KLxK>_&w4NjS7$U3oQ!2 zTJ{%h4!l$0(f-Sn>mO0OMeBQ(!mFD^d6=y5Wt#=hbKq49H$N8gH42{~d7Z*@ByUjo zD!B^Ltnj8!g#I>#Zgv^nrjg=g#)b~A79X`izt4=KFAEDvK8p1o7rLE)w2bSr?V z3J<*?Tgtdp48u@aFY6)72YiM zw}z@N9)g^-NXxC$jyl zQFxxL@3ji2e@Oc{@FsI8y2i~gig^!DLwJUs_v_q%D>m)bs>}k)vlBXzq z#pgnQmcpNxJX_(7vVEJX@OPwqslv5(p}$(;!zHg(_%_+jH#qQSg;z*DtqQ+J@-~G( zD*d`n2X5Zg({7JQJt2ih^^9@gISSt?_2el$s;A0<*DAdJBT)_;6kaRKTcg5FzHo+5 ztHMLF-QKP6EGgfn@EiAueC$y8YRPF;PrI#^+*CM|cF0or%14F%$qqcvfmb>3S_j^s z@bxmDO$v|3r&Zyf%6QW1p6Ly}D(q}1ym_PGroy9oG8F!njL#T_eaD8j8)cr#z1$EQZ&jYWdjD*SPoFZBxlmn`Q^3STVS`4)vQmwdOv&HWb((P7wJuRpD(DWj-pr zS@M|*Z6~0-9TdVLXa@^FQ z@b@KecHp}eo-Ny}4uv<%^4Y2I`aPmPn)mdy51lOXH%sB!vK`1#c&)Tsslw}}A6}*K ze@Z{O)`2%Dy!qcEp3Mqx42gKRC_F0Prtn%R->&eeo(_da*-8|NByX32VUpE8y$Fy18-A!G(P5iJ@J!im&vf9`4!q8RH#+bZ2j1quI~};$(9;eJc7H3Qv&jK&QgH+Rybp?GWV|4t%P@ziSuaRw>-~iQsh#ze374Dg1;Fg?zKZ zqju;}xF+R06&}qO^TD3!it-Exp6$S=I`C2lUgN;)9e9%iZ*}194xBdhp57D(p5?$N zJMcUQUaRn#a)V)=!kc7%)hqm>Hj(cQ3XhhaSJ!w^F`N;hL1MSGXy8gTmkZN#s|P!rP@k)2i?S z*&en#aN5{2e>cl{k`xD?<-jK^JQ{AE!lU}D9C)n*Z*btv4t%%5eFufz+7%v+4>da2 z!GUKv@W~E5&w*Dt@LC7n;J}+5_-+T@;lPcDd$&W#fsb+EISzcL1Fv@Abq>7IfwwsD zHV5A6z|Bp)+abe&XFKqz4!qQX*EsNch0pm}l;;+O(;yM=c7=BwEqI5*<7GQ(Z0?!f zEz-{qDSUc#-CW^)ei8ARtnjkv{tAT;k@BSqZ24c?!>y`>#qBexa1FR(LerT7^f$tylP;rJhEGNA)x-yi?}OZU^4sz>O_E z?Htt;a^PbWK1;@Pvci{1K2_lz)|(^PKdJDiq$Zq=H7PvrTftitezIT0XSc#h+NWLNf0pu{3NM!2c&w-0qIyykp7)T5Plm$h zNIhc|9@Rft;nDQwDO{I!s8aZSQh$xYqw@6%|5nO3Dm)r{B@se;qip7C#!+)#L) zEQhAT+a`(UQxsl3QSgw$>!o~#!dqVwd#Sl z;!#5XRE4)aB<$Is@Zl@OdR(KzoBt&AG%37IhTE+04#`^-Ub|kzzg6KK{Dp3Ob}PKL zScKcA@Q=#{Z&!Hs1Hx_{3J;wx$JnM9Mt?+8u@0$vzY$2bb@VpBI z4=KFyLcuc>UMt_5$Wk~xEbKN$;q^m=o@|9z^B+vWXR^XWvi#&IyzxyTpQrGwJ%Z0v zc+Pu*mn!^|N)exGg=aI7FEtA9XcBsA6`ti1@(l{FK33>&RCw(y!JAYr{mEv9S4+FK zD4e8yS{0r(LBwab!duS~yiMU*7YW|3aQchj9V*Wiyi?(M5y5GjNME#kK0ZubXDGb7 zRLGA}c=j!VXDhsv{{RIqCkk&{D0q&-JBkILs_^C_!Alih`<=+&DuvVcf>$fNRPtJd zo5zUs)+xMJj&~Xqp7)lJZ&oQC7 zcPPAeooH`EPm1uP`5W3I&# zRSFMXEqJxUqy0sV!qb1XiW}7_oK6&a>J^^1LX@jUg|Dp;@=XfQk^O12!kd=}d$uUN zbh6OXs_?dPg6~#%D4OpIry?QWuJDfGf_Er9+V6BKJlgNjQ{uU3d8i#PuN5AWeu$}Z zxnDO$;XlfLGo7Y13O-fg zjWU1p6rLsDhnlJIyoDm%QiacucBoRg`G}COR(S1Ig4ZbAlzv*P!t3jWe4E0}&4PC* zyzw;Q_jW2gOZv(5w9J1|eW;^J)C)u5t^9{I@G%vhRVBhrQFv{mY=0EqDcg+W{Ay~<_#(4cUVyiwt`H_H4~cpm?ODSTQK zp1o1nGvgV>p4Uq|DEvej?qr2W{h}O&H!c%;@)Z6zS)OMqyivxdRN=MfihQh6c(oia zS1UY6?gOk*c%y6&YZabzqR?Nb@M`J*)GNHHP1vhJ;f?$UvhZnCc(!bBn^Z2_$!3Mu zO5URI9O-ZGR(Kx&;U;|A6`s^A;?tq<9O*xFDtwjXw7q9}sC`=KF%;e=?O>|>c=3FS z!dqp(8B%zgoIlA>c+P1;PnN>#PZxZQ!n2PTcF0zE+lhitR(Nxn(37L^?30B2RE5`G zA>{KE-YWS_g*RU*^pq+*?|Q+j6y7{T@M?u;{ax@Hh1Xv#c&)-)ZxOss<+A+LD?Ahy z>1t4Tt1MTI3QxU5)R!iOU$j#2W`(~md5gkH&Ofv&+`LA_XSc!!$bBzu3SV`-2)A9~ z6$=CpJuCD@{n%1jZZi~q&2>UPOX2;bo-qo4NA`Ew3QxRC=$WkWm+J)2QTS!I3qDoh zMvdTk3a^%YroxBuAKAjERN-rH7Q9N~kKZPEwZgxVdTJEDWQCBgRrw;p>l8j^vEcOz z|3Ze_pzu9XzER=YO+rtT!dFS&tnjC6g?x*`$KNV=tHKMH3cg$6Kky$I!>3K*Y0?hu z3cp114u!uZd8fjE{8;Fx=X#dU19HEaq41_%Lf%yPG`Y_wMd6oyD&#{7H%ml#87eOo zJWJtYWIV?xe1zP0l&$baxesl!!q1WNISP;NYnrNXW1onBp2G9;L_B9Iy!ukXOBG(9 zE_ju~Nw(Y73V$z6$k!-jK%K&CvxJ^{g_~yy-k|X4`fsDc+vK>QN#Uh( zeA=vVlJg-g3J=NjwkkYZ&KvAjc%$TP3J=M7&US^9?B6>S-Yj|acdDc9aP&Gy&XYxX z-dZs)H&x-GxuQHYDm?FykT>5JcJ0z5`Ai4ipz!KBVmwRl^sZ;J>^GwNqw$}raQc_< zm!kblRG#LE_}9vHBGYPJy8mgE^KvThbl_FZBA%)|Nxx3z^)g)kl(3ixyTQh#1*{v5 zHZD>m+jwjjC7LSd!+E;mY`n_G?Y6G7@pzkjy^Z&=aYN=W*PmeHri~}s zc#4hpwegURC)s$GjVIf9o{gv2_)Hs5wecDo?`PxnHlAkVhMZUA>FRIeri~A<@e~^$ zXyX|+9b0xc!rHP z*!WR4-e}`T+jx_WA7kUqHa^_OTWoxUjqkSc=x@^U+wC?!(k4Gy&cpEZX4!bPjgPYN z8XF&N?>umfq8*jGp(`~%f#-o4of#2S3UUG@u@a`wvD&i_&GM-X5;7Dc!wMh^7x-; zj*Xi(exZ%0*!V>@Za&X7^Is+we>=juz&|NAE+oXAkd3ED zh4Fp(FiRs;pkrgOpi##Hm}YyN_3hATC%cyS-?(oas~6LlBJ12gD6oamh;>$%k9$ef zj$XUnorGa(wH}MX(#`sxx%$H^Ph%%im?-S~$&JPSgkRnCrRMv@O^>*A%*}n{3WC?T zhk-B^ zyAONJYA+KhIlQtzOG-1}WbByuEsWK&7;K7I%XENfQhD6sPw2Blqk0y5y+#kQRx7y( z?|3%y>OhA<_p!L02EE5pHX8J;HV9;yE56pCdtIv$>a(60kV9Vc3!_Wv;gvq-W@(`) z_O4<@4DHwtbpiqmV}II(&Cr7>1S=o7B_8k`9Kc4`and+oX0O~=u&pGmp#fB zAe|j75jn;ErG8p)cG+_IYTd?gL-y2|}{#S;Wud$>_cw#QOK^^P&b5#UpoH z*f9JVh#D>CevR(ZbnvJ>D_IF`Mqrznug#!stR3g~x_mbn^t8(}-@uPUeG2k`?)$fw zHtFxYi;d#k^AbN%IzDwA7-8Yekb&L+8LL77l9?GO@Pr~;jXqP8&a0Gqm zc@A#uJ%NNn!)bXi;ltr{fAB%%+b)yKd}i|PC(rcpuNpy(2??7<(3Zr6dq&W6eSc%P z{c=jeW5>|8)P%ZY=T@Cnvt;KXj*dA^9Wj$f5Y!No=h}^h-*46Lk(Z1ng4dvJz5RU*SpOp-SmWeoOORN zy$AN5max}DZ@J8uke@n#UF!~y`HBbc<>gA9Nwf=cyEJp9n>t+Pd^c6Qv%Bu`KjiV6 zW@4Itzso%2qF-Indl{%_gd_H#j~ca4alTwXb*Z0P^?5Mi>pt@nAARJTV#Ot%P$_T( zFpa)c+W}+Y!^>XgwJdI%PD|OlFy?;ukk@ruqQh}qr<+gd^o(x2tg|8GdMyav7RjeFEj-*{7A^wS1oScjk9H2SUa(=$E~WM1(79YxIVZ}hW= z{BVHY^9R51v+w-=B{A$bKRn*9GJO;qaz*S<8ok6$!5=GGrwzHm1p|0+{*z|RbFmv- z#$B#xk+<5DBdZcHE54ZhfMiv>hP~;cwJ!L$+g<*hF7}Sgzt6=!a&;FoJTrlvK{sKT zbCWUb2Om9R_+IwWlg2=zJw_rD8`b z-@52I7dn>>GR;Rv(3kO^zTAOl=$Uv`Z%-~ z5qV*749FXUkxlf(FmqQXwGIn{d^{|8-*EbVSPstj9WmsYOuFSr&x+x6?~xvm$Bv9! zFq~dKGG)zhx;|sbs!Vz)BMt#?&q%p*I8`4t^xZM$`r))-c<`4@_T_M+b2z(hME}MS zY|V(^(oFW~2%~uf+cCnx-S(8+RWgVOtvc1cp{VCXPrNjX}p}t zc4Zp#MzZ%Z`{5~BTzNZiB`w5AabZGc^I*CmCI0TgRF|?9CV3;(kMljL=HVi_McyUnR zrXjR%P_SkQ{Wz!%RgKr(!)yrc$H;YmpTI+j^jn`mO(NZ#5a>ui9tFNmp!ErslVO!L zdKa1YuG`-cpikZRLP3q;Ul63F#*g4NLH`{=wlt`ePkIjbo^$&j4A4&ZB0RI(>whLd zAA3LMJm7yjz;*`IXJk0bg5BXX@NoE~`ud>%$spVE-wfwIo}TLvw|1}pi2!};eFbrQ zD&TJouoipV4zs`pHguClud@c&AGYgD7$lAIysFXL%zQ+n&)AK)A?#|#$34gBE;bB* z5@b7@XvwDxoX-}zX%h>eb$NvaaK4+piLwq|{`A07Mj4AO1-Oo-Q5q2W!QsgUD-5%IsYwTz{1 z;tw0oGxj8$zG!R8W&WVQU5U0fCGZrZp>W|#e0MUc!q{#D^EEN{3^QJ5>_xjWp4L+W z_`&f>a0-R3;;9-&sMZ2cxadahjjlBH-rsQB{05odkRL8usJ&p5mwGmFJurNi{%3Li zEYlBjcjg-#Z^3yB)3KfBRraHe^Zh*wT>)&nxYZ^1l3ID<#8E0}lNP}C=chDoN__0{ z*p6|li~n)5D2HD~8??X!@bi1f^L;suS^z%DwjNxD`ycD+t)J$0`=8oDxOcp`KF#Fb zAS+!jAuTVlz$zC?{+G6N33~?abkUnVxRbmS=lf+}W&wBv@AS~K6MQEN-0h-wdvGT` z{~d19hiDQ$bWg*w$us&mD{s?jG0MndSHcpVR=GYyysp!IIKN3BCi9;E#x~jvZ2elS z$$is@SH`n|+jk4)9a z>^=Y)QHJ_b32IyXW;ea5nHV#Ds_{A@?j;k(V>se5t-IBou);&Hx^Dv!W%6d6-K?3Y zJFB!ux}J$AD8Vu537y_^U)#mw=wC$t3cxX4#CVIub^KA-e{?VAHJ6EBZ2ZtQMCdUw zctW$|GS|B39+$A25#v9B`kpD{`aI(LycYP)MXzhGb;arb z`i2Ftx$HOgl}zg&jl26E5m?}+(KSfKR#(y+E^2jI!)~;fgIL<7<~@7}sYBCdh5_$- zO>fdzqh@PZVap`qdwXwjnb^vEkIRH-z1ejH%){;MJJ+md^tb8!(z1J2aJ7d{+k^)E zfS!cY1s-%P^4?_PX1wF3 zA>7%&*PVpZt}3yq?B=b;tsWEnevb*6$314N2SYIb_a64SXTl?1_Mo@R3W&oX!mt)c%v~71>qA$1 z@Q0i*eYDWSe<$*GkC-vF`l&eIB{ayNL&sp2FdSOQ*gSjJ!foVs8zKH3gGm9xF=i!V zkLy^vis-61yzsD)SyNMB=t)~(%N9MbbTqx@NqBh_-R%v$KZ+jm@=jv4FVH%Q*8BKk z@AlY)x3Xw+T*9MSv?J~%WLa$jm%k_BM(E$z*Z)Hntx8H*2$G!ea~5q%`HkWB<7o*u zkEC_!2?sLix&BEY@Akh9Y3&%ag*`NqZWx;IQYQT{)c?Rp`gB;r2P3KDh=kWh(l1Au z5Z!k47WP0U?HZnNT_$}t{0&3{AKn+o&Fp&(&1b%4j4ies0BJ&Xs8$xhAaKvNj z`YD(19-Z!U8$ZF3aR=YhX|HHG5Rd+FZBQgwLam2xKu_nPLz;Q3hi-O#0ORp=a2ei5 zzsO9?SRG)2hjjW(OTd!;LG62lA!Pp3@$Y{s7f%Nf=0RpwbKe2ZiVWw!-KNB27K?D` zUup1ctd^7K1=@x5OHrXP@$?RZyN0@5tNHKN*d0CEg_S{O4E7w&j@CzY^%2|$OY}^j ze#oxL##ENmRfV`M?d_CtqFzR)in+oh`UJN8MDw7PI;aKfTy#AjRr0t%UmtT44aN$_ z*~X>pBAY(mPsRC8qiiFGO}25~USWa($3WzHyE}M;PCvMXK3V44R zeWmwV;Gx6%KZFj*XK2NAG;|ApS2!3$Iv9P;kp9~=&#La?51G^0NyNSU1{PQArH5R` z*B)wj#q9UccdmIb==XXb@asKu;D>r*7J1n+uYawV-DPXnFh6j5NdP;9zF@&UZu+<8 z?Qm0@7RD5l%LIPih0K4TIR%-=MR#$~?&+OcXtZaG%mV*ShIB z%b}=s$K2y)D|^fdAWS$;+<6MVsiXQKh^MsJ13JB;@jw3hrF+PH)Ir|5zN4G_boQ-o z{Hn7B9^+OIyUEj?)7(yTS;Z8814eF|>!ASsrWxx3RPTzzSng}x^JRe6dSdnk=oxSD zwE*4j>vK<#p7-}z6Qpf@ zwtMZk*RHwhUFcbZjqr4$Wque7(Lag)nec>04`{)6HF{C=y{WPHHU9yPeQv9ShgYVu zzJ>9qrB~I!pz}3Pt;TA)1yGJn`Uc^AqXp5H9Ma-oGwx&mU+O)|sjcqzQWr2*o5#GE zr>tQpNc&jKuZ(?f?*fo-qu4RILCm`sVJUVI^Q~lT86SZDn|bis(T8k1QnSVt*W_Z2 z-JXCIcT;u~X_&XIXOW%^-Dy3W=E#DC1-FyZV5%vXMC;ri>a&Gmn7)%K^-N2*krar~ z-~#JBg}}}Xyv^u*#D6(U$55k@VG7VnBf;1Db05s{l@Gz+9e$7v+@qntPr!Kjd*%mu zN%Oz0VR(Ic_dpi;lR)VBjv4wLqewDF)&IBy))4u&0(rSY^Wmo?>oxgzKOyfwfwx7c z@cz@1GclTnJHXN((C7nJ%HuMYowD8ik^A99y2tmS2Svr~`*Q*{nW4uL=-=_4FB9p* z_#wc3JgtdzQ=iz)iS%`1@Y=rYmqc5ILs&t=JnNKX3p)c$udsvx=52JEH;c0T+1>pW z)@brZeB@=XGaYT^>zW_ucer#cJ*;+d$A6Q@*X*T3p4ivCbPbO_*WI7m5sP+~_Pz(Z z>ra0VBN%--!^KXISb2ub$#M>)e7gq?Y7jqSxY!kk^JiWD+dP=}_ThY?do}bl=mUS$ z>2o~@^1Xhg4C4kiywBUoSZGUlJ(+g8(%ws^4t>xq$<$KL+d9 zkH+NS^yz@UA&IsI&u>qrnpo}>-)atgD~TR4QQ#NG2XMN)Pa*_&_KDk^Op6nO)yed9 zLLZ#(=$i`ub>AS)f9u;Hl6NG*731km{#H+27E6mgFJck#&0yleAhieo7PW;Km*~wp z#?v3-fz59HTAiBQm~FArva;62YFyjcxS!_G!UR2;Mb^wr9uTeCyaH`l>3Lcg~&KqjTxyKc#@} z{BscJZGYzHUrbH-vVso&ZEO=l$PGf@nrXLcJLb~+1%qlU=}-ZmoOyJ5u=Z+dnI8Mj zRrEGiC=sWht{Akvg6=Bn^VD40Sj15GJv3`MlJmcUJUyCnAW zO4?Vl!wr$nir}J3)=?SUI-A`x+tVWj4EhPGH3xHoq#ctcu-S#dGi7s{)Iz zX4|d~-t-Ul;?-Er5rtUfU6B6~;X)rWunYre&Q_xTSgehF$@5S?z2JYx^J17*_x0S6 zM<4Z#UzJDA$-!sC^jp6twe5MdYe4YD%V_<;U|lYKGRS}1W%Nx}u=XJYfsgXotCs~nxQu;%S)lVWHZM1@G?%T-4YcI4HF<$Y@>okAm-#6#@M;084+owM zvj@Y0yYtyc;kbr;_W86R&bQ|WUMOJi<#UqdY&3XY2V)j#Ix=*LRxa``nf5}(UYCxUmo4r-%RTgh+xm-X zkTvNSMClhT2`$(yE^NvI3+&bO$Gr4~b{$$+%f}ylvCYSy#rqZGevPf}_8$KKkb}>D zra6WF9AC<2c3XwVC!KhQ_B=DM<*W7PK1Tal+;5Eif@!B{skP>&CYgVszr~cW8Mf!S zPs87HUE<2X>gi)H`R<@)3v`WeG5DWHyn~^k1oM}fSbm+)tZh8F4ifs`%XJL2O7cZL zK%0lzR>I-K>r)?N;OT;|wjTtxgMV{L@MDeUG5?Diy`|}UH1@7Gv@4cUhWOIRRu&IE zt<3ikWB*osAU>!40AwCu@#y8BX1-R&T7D;!yh79WyRc<|=k7{(V51w$SlvnI=`pdz z0P`~}^+7&d6Z!pnhVeoc-HAr;PH(l=7^iRa$N!9`){p*tdCaE_M((*3yf5mtF0OY2dvl+#x#T z_AmBe-PVt}n!9x0W)Iz`ABk+z`v82XCt}pEC*g-t7kc1+(x=|wcinpkxShlrvk!mb zW4AWfijy%WwumO4X`K(oToB<%o5z>_{f`>-xz}^IK?l6%B7+WlQAsR0laNRp9;_DC zSoMqhG<9x$sgLf^<9GSco1gi*kG?Qsao%ZQ)5<44z0=3qeaIZy0>d7@X{m4|uEx9@ z*9-r|M>B|K1b>Qd_prvlLC>*lkZ%+l>${Mht^c{pcR9>P(k{efmum@oDF#zoH{#-J z@6`8WXotbuq&s2~z&FJtfwaV683aW2jBE!hG_{*_Kqj` zhL=9|pm%Tfn(GYu%{%N~gKaPZ&lv1+dqal!C;v0;Hoh0=COo)Si^U}2W^EzPMR|~U z{WC*e=ku_6dB=<{4il@`+g*XTU2Lb_y@w3O`_lq&8H@R>%VSy)b3fhoN+$lBIvch4 zw|N|mv4ca{nk_FFuR=iJDv3yjHXeeUV&Li4?n%no4Bw)?eg;TPrN%I@<4Fp!gSgl z-fW1egCRo;*NB>HZAqObXt`byf>XTq?vc8)6;3eo6>1#TI%9-`aDf6 zlp!tsvB!z;b82QCKH6y{Hu-6XF9YlMU;DzmsK8EG&q59S&`T@y#237DvnO$jm-c$j z2Wj%A{oBiSc_(xgHOuxXZ!&Y6mo3!v#a{NZK5M&|wR`%5blW$61N-y0F8V<`rNf01 zk}JaEw#7&dN9x^te8t-rK1X!Q(2a2ThpuGs@_i35wu$+kW$X!i1BSE&tvzG$7%zV#tPvbd!#5m;@AJHqm3D3vSdjF9P zG1Trq@|GC1mw~%u*!q~j(=qI^n896!=Hu~%BrgU+M;cetBx4rVE0Z3J)@Gse$l<>C zbUOZi6uLbw6O&QpJ)N5_j~aCVz`-SrR=Jm+*04dfz+? z=bPjEZA+y4`sh0nX>GzO&m_{a#J;yC(Yi!)V_({uxEv4f>>JqAm%ZD!dys1Fr;(Gd zzUK{W`qFFIm+}Pguga-#wM?%7r1F1SGc*g)* znv{x%8k1662hz@@VBG*}v-oq#Rgk$cweJlBXiaL|`T^K!btax&)bAAVZ~GYw2V(z2 z+=_v;GClCi0NRw!gL*k#$K5Z|r-8iDKZq!N)SvV3`Ujz5(SX7q2Czc|ma{uTY-y;w zW4G)f=0$xsd$8BawakMJNPOfe+Sk1>$6hVfn%A-FWHVz;EHAifFs2HV5Qzu1EiqVL z2tKX-+Mnu8-amKr8Sr6$`Yj>waENLXeGqL=^c@;VH}~~_idLsD-!Jt+Qo@3P^i9$M zoVTUKUORxkPC?f1P7SU`vik++4WR4OCgQv!E#~Qg^h+9Fh&z;?+BT4G?;nKW8u|xc z9YBxuk6Sx{+WY%{?9UbsoVa@+du<@*XRrq?rfx8MVi4cM)Ho!jZYXXA?J=z;iL zla9sAd$7Aygvb4j3;kFj`YZS38#Lot?yP&>@A4?DxW0nbsf(XFjxfC1IhtCurL6i` z`o!ZuIGR=&3EPgNhYgeg+8@+!8b#j(H={qeH#vFvvGhdpw@|wwHQ~@`s_m!m9!0nI z!vbSVzfyqj)56alOK+tkLex3nq$i+xV9M>sQro~bJk&fW2j|-c$3HomZW^NBG@6zU zxf#5E==}z6EFPhMlSSW+@I8AR{gzpdhv#J_;e16F=ByvcGO^(IM3%X86up{d?ifWM zW|>coq61lXp~2;LMt>1cymtM-43slW3NMN#*(zr!07uTL=e;(1Qp*O$h58lrr!4C{ zUiS4me%A0tY_Z`Y(0K{FVB+8}U39e{UjK6D$3p8tW<2Ghc|6b8X$EGQH)&U4pPtK) zS=;wrzO`=lwad5O&8~O*R=e2}w*j)kJp^MSx9`QSZNbp}7j_Y?KtL;)|5-Pt&HNAW z?FC*`w@%G_qmCu#WNhDB;WqJR_`~j)jXHbF?f=5fK6Lv!-0Yw`=6ani(S6``y6*v< zt>NPU>DBPKV+=9d#D=M5Z0LNQcCgqNxc;Gg-6(Xi&qJpcz}?mEq1e#yrrY)vhEY$APVjFY}3QXLc zuMd3$gHheLU5CTv`%q`?x^IVveWU-iOQU7;Ai-^!9)ufEE&@V6^&<%V)%TW*3a&#T zYS(-)_BWa}{mJWC08SVF;>`W*e#8dXX#}6Q)cgeN2rTtFH+BkOL7m#fju_lGsTqRJ z%)C{@a1`~O>v$ATcWU&$hE5jO8EEA&Wu$oy>X@_K1Nm)k{bTGWaZf~7s_Sh!-Keh< z;h9*Y#*`w9$1v^=hM^*_pTTqDFQY3l7s_U%)st!A^{^uH7FL(oVW{8j4(xZcPwhik zJd6F@tFh0W@1+T1htl0zJd*pcD-HWvUvZ&?b?Zugf(6m_wJ;Q6m?h>HjeXZ+&Vr}) z0P4a4cMz|3|LVqsu$6vv9q={`tUNu&2L1u#f5&I5X6)B!yLP;k+lOcOF{4()-U|$* zEPbjRe80rgjB0dR=&7z{hO+RDXN*&f5*l|#^m*vq%4}^Ro=@9mXE%F^7UN)`gzM zj`xOmPNk!;t9YXECw9IqeCSWnCsTjC?4pJhmxWQ$0%pPkxs}^TbY>6;i^%M$E*VT%-BHVxCyr=tTj={g2s%h}+08ah8%ENXuKeByb0 zb70Oz*gww_FX$EZsY&1a(+kB#T;65R;CVNJwkPnmmB-~Su)7jGO$pf0gW_bdU-0ZNiJsf~(!9Q+ z|2Cnkr#_UkR62*~oOmovUhRK_VNFoq%h)FvZ$;ZxKK@48K06)F!t}0ny?D7VL;sr3 zeqxSN=CwcDkHwj@dD*q%;XhH|#pqP{r1JW7KdvWB{~GhHr~5y|wY-ly*f+)hHU|HG zxEC)n9n+pWd&I>*&W{H7yl(v`>kvPqTmM-8_&MGB$NE3Ub=Um>-t)o>R?D?V5hK`% zUt@A=xweU4W9@mwsXi>b7aKRZsFnqPzydo90=&)8dehrlD$cQ$;0704;6kp8>I6NP zzO5%2!PGB^2&Y%mkeOXs+<%t&6mj?fvQgwA3a2 zX?t35PddGxX1<$FpQHt!Pp5CwQlG^Z&GfIK&5Gxx|JD;~QEe>!d%Zb0-(p~IChdzk z{uRs|1>mf3{W$;8yaW1c(^B^Kr*&zm4gKl)wBYCI^k$m5H=RC93$~`y4{518)9L1P zYg?r#FB?(xH+q9Fduf|D-U`#Cr@@}~2H*42D}TtABO=RP{V;p@kPB-YR{0a}^Yq7@ zTZcAQGP~S)78^t@c(%orhIhg~alwiG!Ig|xM{aia2Uzb$BP7y4$oj3a2i?if==7`` za&Ni&FVQieNd>q`zwCE%FRF3?H|bq-Km%m?eUHtH$Iy8rEcR9G_x$1`^L!cR0F0se zIC`G;tBIE8bI80Jw}Ii}XEXJGAY;Vpr&0p%Z+M$O#B&*C>6J87FJZG#sbz}{oB3ir zmr&w$R+e)cc0Y%5y4dZRhxY~DD`2j}EC0#n)ao&hoP&2?Jhz`iOA-^GJ{zs+m)h2| z>GjlB?B!TirTphQ?>X%CbGk-cR^G*9wHC{l zTJTjjJ*)9%8Xs%^Z}5c}@?pa|h8isl^K)A?<9Ure`8!|i9VF%*SMX-+|8<>a=}g+l zVqo>H46V`vEr@*(OSOMWTbo#i;%iaC`!u>&>ubrI^8KD@%NszlEq{3iC+~qvXe3@c=KmuEZ`vxACT%J?rjj@hlz5>sbsoCOitq7j0s2 zw?P_0 z$#_ra0-&=(8vm5&eT5ntX{3=B4)arZA_w36v}Gx+^oxoExf zN~_Q+u5#D0g??J$JreH-KIP?8QqLIrvpy_^@VST;eqV#1)%Sd#Z5Rt#3sn3y+IhSi z!mGag!G)Ud4vj6f6=X60h-qECEEC_z_e%SoV|d}E+ncj&Yo3yV9<7=Uy^qno*a5=x zCVlJ(yoXc~kGU0$7SZ9SR2&fV)gb3Q6A?MnoTrY$1W4T^#45bD;_4o z&&19*%=5+cJ)BHG#9WX0*I(lOt5aw}pO-Q1(V855C51jr4!)E^`;(_x@%c~U%;$i_ z9#$QF)*<$rObhp8_yBSpGcdf|#Kib2Kp5d2WlW$^qHG5#mnhdj&7J{A2Oq>!mFZ1S zKkGRiYf=Tv5XetVM_=@-d_fvIV#WPm85QireM@g|%se&aDTX336l3ePG9U4-6Vk9o z)3M5SpLU1!IFDC6-hsfHp{8SZz=Il`ajDmd$3(}bhfr$qyzi{ONatl}3GuQAOg6vEo*Q9Z(s z$BYD)Kbe7L<-4(@E}r4}e+JPRo_jGw@3Noq*VNfm0kw!j%&p9WO1_fuP;ecv=3s)C z)69@{ZDQ{p->;wiGsCDLQ_8^a&PwuT5YQ!_f`2P767HRTd?t{l)-j&{1>s=Win$#Ouwv;#NQ#|`A^Pxlk z%G$fg>nR_d-NJl`)g4?C;hBU+7>5rt5OtFErY|0w8Q@b|`dS!9+cF&ZT_}woX}(us z5Y5h!C1~1w@8KsN7;Z{=lWqpTnZKon$-!(H2j0EC$b8>1dZUYp{?WII@2mW~V_bWS zzX@HIzEv9ZT_KE2OVSFt6ihVo2wJy5OCDPlQeS2dj z8al$^dqsm!1sB-TC#F?>828tA+3IuT!RML}1ELO1gwb34dS{qtK=tsU8^56k?m$4MKA_W9ClQR!S5*uyS(g#~?Ehwg7or91t` zL#fo}H*mf`Xsk=6&9UqFjU}n652jK>>M%nl%xO*1&sln$aKQl03S>xi%GjZ(( zUd=xrVj}NuLlCzy6E*cdhKCVv<2*B${w~fNgbmp=1i zGE3MaEjXJp@Q$IChT9Q?+gU8;x9?|s+DOQxP4wX{qYHjQq;|Msar(Y17Cq*dd{pp9 z&zS@Z;fQ^m|6TzaZyv@E?wD6~?3amwZ?q%Y7h!%QEr`Y;L$%zIOe3WXO0^`VImtcVaCGsuO2wGXKUT;DWlCn>o%VM`ksvRjw^3P)7j%w87VJ~%ql4lmqm&rGv*d$T4~L# zm|Get&n%cza&=+x>~K+GL8yFgaYeZ5pJn0V8Ie$=xFA$mTo9=Wd6kdI(e5BZ_D{GX z4O(-iXDf{9m|DO+E^E1xJ78I17Us5r4cDS%8 zJgq1aDl42Zvm!4v9oLb9lS4U3DhxlNDnC-n&8{n-?)(i;%P)vbfBNZYh+W^+IO{s1 z_KAK^tSrvwdM8wsM)E5n1y}rn&Cob@;Aq3K8poht@tPKnuW(+1@5k{y4c|-g{UDB0 zaJ~TFyKq$D@Z$Os91C$I;>g7D4;(Wh6&FV$1s9Z^Us+T{MTOJK!ew(umRA&vEHBF+ znVHG|pBB!)qM|IEAF){Z+*#8~iVClajGR$8tEg~fq-c6(Svid?t1Pb=Sr92L7kork z=CPwQv#dwTBH@CO;c3&#BD1-u8cO-x@{y(CqLG!wg;gU<$}Md(OJ+qzUS3%gDIb}c zA1<3wGO{c(qp-Y!M-CCQ3R-4tsFRL6DS!Hy{1c`fKkfMAPneR{$11!Kk>7Y?5gIq8Ix zjy*0CIS%!7WHh$nqN0*~OI3bJQ4ul*IaEG!T18nTGP1a&Akw8<7=fE3e?&oK7Ai+k z1lAapIr;?a@!45+BXp~sKC7Zj$NwUJ`6XpCgDT2k&WegiS+S+>|7yyT;`~T%ex#^q z1d=c+^H?hpu*!c$`S0@S^733XE@*;APM6idZmnp+oIbq}B_$W-f!`%wB&HXIXO!oL z3&N#Hd2i4BCxyAZB3wSxN|=>@|MODPl?&WpBf07Rw^1o7tNgD-gm)7t7$s#DsMfqW z8+m1AVg3~y{LiC?uF3vTci}Ay&&iz~$sZ{NM*ja&=n7|*BFlTkAX*^)gUs!+rl_D+ z>-D=<3f+0HImX+l!V>(SE9_ZVg4A|t{9jbpZqxPBoP=i=&Op=FrC-E2jDBe}k04?_ z`gqy4qS5S;k6i^2bz@{vNqPBPOUwT?KYmwFr=ba+5h>0st1PZ4L|cuFM{AucTIrq@ zuq#TX;bN3Lbe%j((RMYOgWSUKBnnDqp~)?-tm;jsVy4xVWVZBoL^E98ChCZ2yX}VhevFBN!hG$#Y8kYze~p-CKBy(ck?20byi_<;Z?aM zRfPpSU&mygWVNq_#c0neA|rV;db0#vul%m&g*SiY=*9o2^|Q)bZ<>0mIo&-za;dU- z4)VHZswb9}%onao?@xA7OJ+i+qs@z}7kGe}og-#1`cmL8z8Ajlk&n+p4RE`=w z294UO=fK+2N=k}mRaS)1QWuQG{j)E=;QWi>kB3e@ErePPm$tAtAH^gz;`Gq@CB>2Q znT4|^UvS=pP+_?>vMYqHP`Er)Ft<2#!4+qT!Q$Am85c~u9By-TRC6&#ZF~?V#yIDr zu6CVQ&YBh}i(Z|H*hIozgQ2lyW#PHedy_CgEi25Qh=EyUS!7%o?iO70f(hmM;Zj`k z^C@%S{!B){QWUv3zoayBULlHhMgB~Fmp5}g;Dwcu%E&~RW*mA>#O}<(8EEvQp^Zm_ z96h(9ai*2YQ8YeM5r$dNLs&OO35eeOb4g`U!FY^=c&?sbGNFpQ=iwrup?oaH7IPv6 zmlR)7j50lL3Lo)aoO|(v3FC7oo^|eo-1EntHz6~>!g6slc}st8_^P=WZNs5Ml0&Es zp;8R43QH=>i{^%=MKC*1T2fe!yeUBbZTJz>i$7sIGLHQ?p1_gVNi-bC_c$Mq@7M8t zD!v=>y#vQkoUg_Ar#SAw;l}lGIHuqT;7G@DE{-b?VbeZF(Svb}#=-x)6h|43lW{D< zk&I(Ljvp~D58(T99AD!6XneQf`)qt)h2st!7vY$OV<`?ahseNC-bIn}%A$&sPew&2o3{8{+l4v$YGZA&kns=BK zsR*H3hyE^S3NERbKE}FX&6ea=mgZKJSi{iVq6qKaXJj0e*&Xqy=hPkJJmF>Ja?!j$ z6vQY#*Kz<#%5sZQeE(S5rZ#svI`UlJcO&t(r$A<7PDz;1vM>w_>++5=#3zD6c^6o7 zAE!<^J+HhXQrg}BM<<6anKE(2m~zaJIoy(gI^3;}8vpL9i+K{s7dH;Kr!gl_i1a07s@2FMH%@b%8>!_(oLJu5VMhCE*e_hmI^MRoP!i>ya{ zudm@Lg%g*kon=<6?4c8b%(Kd66eK4j`5P53E3Ygk=f73@lBJ6fxnO$1 zEXLZ4CQhC*W9Gz*=1#~jDjJ_ZVd{yq$&_ByiEV9cu{lZbv(k?5`UmiD z(2Gze?tDmtE{39+D0kiFGKMp!-esE3RAm+q{1@;y9Fx;Y~GJ+W%JBS7EKgEc@ugO)<;psCRBp~KLRp z#^T<)lvmEnG}RmTUmcWdp@(oAyj%Wq3%k|9?cnAn7VSVy(A&^m>_L7DYJ)y>P_7Sn zuEo6%`XeOr;uhKk?SYLtfj)8EuH19D{{0FE4CeQU#Tpx4XKX&jz@NdqwYuCm5;a9N` z?@?&rPEFkeZe*Fx#SS&S8ohRTEgv=?U0pU*R~I@c*FtCF{$PNvZX2kp@8N#cLAe&%guC-dU0pFflqH9~iZch>y39CKd4gY5&SWrd0cY>!Q+W-mACD+e&|0mJ4En&AOiHn5Q zp6`Y~YZPlN#^~yl(Uc4HV6Ltf;jV?gzx_TK^XCLSHoXQ zSY44RfUZ79{QZWS_6-}gm7zv+*mWN;x{$APt8`lz_hv{49(C2*sPMlRhUb!>~ z_Z_%Lw&T~}781EFj{JOw7f;8P$@kb1yTZQ+o}h%`^%u8@|0&mknaBv=t0Vlm)Gv_{-DG5hCnR=--wU3ggyHoUw`;E}*COBE{R#X~T6}t- zv(2ALdR%g4%N)PSsl+!WR{t(|BKK{!|LDl<`Ihj#HtHl#vH3P(d37qVGp9>5{2q?~ zsqoJvjz7TtxT7ojk2!I5gV>*auAxpFM19DhZ*@?vh0ek~Y7A+HQpOtU2CyeM2fDD(P@AFj zDTcbnLAe%s6?gCgLv4cIxXe(GPP0+2g_3Z;h+lOP^?W+@4%!Fr++xN?=tJC}K!Y!0 zY?(v-c2KT`igC|HE_a5Z{tJ6o&9qUjgjY4tNW68+r#Flxv~;a2G?{p(VJ7BQNNZ!d(Jg16=@ruY+x|p!u5Hp;copW&|npM*Y#yx0FzYN)?K>*rHP!2R>=>o2)p3-2Z9IY_Sm0KE!*2JM6X z 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%0Dpqh>T*(Y+77++#9ZI`)b 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

(>&Sk*0Nv<8 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 literal 0 HcmV?d00001 diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..a830ceb --- /dev/null +++ b/index.d.ts @@ -0,0 +1,8 @@ +/* tslint:disable */ +/* eslint-disable */ + +/* auto-generated by NAPI-RS */ + +export declare function formatFlag(step: string, salt?: string | undefined | null): string +export declare function formatFlagFromContext(context: string, step: string, salt?: string | undefined | null): string +export declare function getSeedOrNull(): string diff --git a/index.js b/index.js index 116ec72..edc6a33 100644 --- a/index.js +++ b/index.js @@ -2,11 +2,12 @@ const { existsSync } = require('fs') const { join } = require('path') let nativeBinding = null +const binaryName = 'ctflags.node' -if (existsSync(join(__dirname, 'index.node'))) { - nativeBinding = require('./index.node') +if (existsSync(join(__dirname, binaryName))) { + nativeBinding = require(`./${binaryName}`) } else { - throw new Error('Failed to load native binding') + throw new Error(`Failed to load native binding: ${binaryName} not found`) } module.exports = nativeBinding diff --git a/node_modules/.bin/napi b/node_modules/.bin/napi new file mode 120000 index 0000000..2aecabf --- /dev/null +++ b/node_modules/.bin/napi @@ -0,0 +1 @@ +../@napi-rs/cli/scripts/index.js \ No newline at end of file diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json new file mode 100644 index 0000000..2947747 --- /dev/null +++ b/node_modules/.package-lock.json @@ -0,0 +1,25 @@ +{ + "name": "ctflags", + "version": "0.4.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "node_modules/@napi-rs/cli": { + "version": "2.18.4", + "resolved": "https://registry.npmjs.org/@napi-rs/cli/-/cli-2.18.4.tgz", + "integrity": "sha512-SgJeA4df9DE2iAEpr3M2H0OKl/yjtg1BnRI5/JyowS71tUWhrfSu2LT0V3vlHET+g1hBVlrO60PmEXwUEKp8Mg==", + "dev": true, + "license": "MIT", + "bin": { + "napi": "scripts/index.js" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + } + } +} diff --git a/node_modules/@napi-rs/cli/LICENSE b/node_modules/@napi-rs/cli/LICENSE new file mode 100644 index 0000000..1afaf83 --- /dev/null +++ b/node_modules/@napi-rs/cli/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 LongYinan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@napi-rs/cli/README.md b/node_modules/@napi-rs/cli/README.md new file mode 100644 index 0000000..3719032 --- /dev/null +++ b/node_modules/@napi-rs/cli/README.md @@ -0,0 +1,96 @@ +# `@napi-rs/cli` + +[![Download](https://img.shields.io/npm/dm/@napi-rs/cli)](https://www.npmjs.com/package/@napi-rs/cli) +[![Install size](https://packagephobia.com/badge?p=@napi-rs/cli)](https://packagephobia.com/result?p=@napi-rs/cli) + +chat + + +> Cli tools for napi-rs + +## Commands + +### Debug mode + +```bash +DEBUG="napi:*" napi [command] +``` + +### `napi build` + +> Build command. Build rust codes and copy the dynamic lib binary file to the dist dir. + +#### `--platform` + +> default `false` + +Append `platform-arch-[abi]` name to dist file. eg: `index.darwin-x64.node`. + +#### `--release` + +> default `false` + +Is release build. This flag will be passed to `Cargo` directly. + +#### `--features` + +> default `''` + +Cargo features, passthrough to `cargo build` command. + +#### `--config,-c` + +> default `package.json` + +`napi-rs` config file name. `napi-rs` config example : + +```js +{ + "name": "@native-binding/fib", + "version": "0.1.0", + "napi": { + "name": "fib", // binary name + "triples": { + "defaults": true, // default true, if this value is true, will build `x86_64-pc-windows-msvc`, `x86_64-apple-darwin` and `x86_64-unknown-linux-gnu` + "additional": [ + "x86_64-unknown-linux-musl", + "x86_64-unknown-freebsd", + "aarch64-unknown-linux-gnu" + ] + } + } +} +``` + +#### `--cargo-name` + +> default `undefined` + +If not set, cli will read the `package.name` field in `Cargo.toml` under `process.cwd()`. The `-` in the name will be replaced with `_`. + +#### `--target` + +> default `undefined` + +> Note you should have `rustup` installed if omit the `--target` flag. The `@napi-rs/cli` will try to find the default target on your system via `rustup` if no `--target` specified. + +You can also define this value using the `RUST_TARGET` environment variable. + +This value will be passed to `Cargo build` command directly. eg: `napi build --target x86_64-unknown-linux-musl` + +#### `--cargo-flags` + +> default `undefined` + +Other flags you want pass to `Cargo build`. + +#### `--cargo-cwd` + +> default `undefined` + +This flag can be used to build binaries that are not in the current directory. The path that is passed to this flag should be relative to the current directory. + +### `napi artifacts` + +> Copy artifact files in Github actions. diff --git a/node_modules/@napi-rs/cli/package.json b/node_modules/@napi-rs/cli/package.json new file mode 100644 index 0000000..b5ccfbc --- /dev/null +++ b/node_modules/@napi-rs/cli/package.json @@ -0,0 +1,65 @@ +{ + "name": "@napi-rs/cli", + "version": "2.18.4", + "description": "Cli tools for napi-rs", + "keywords": [ + "cli", + "rust", + "napi", + "n-api", + "neon" + ], + "author": "LongYinan ", + "homepage": "https://github.com/napi-rs/napi-rs", + "license": "MIT", + "bin": { + "napi": "./scripts/index.js" + }, + "files": [ + "scripts" + ], + "engines": { + "node": ">= 10" + }, + "maintainers": [ + { + "name": "LongYinan", + "email": "lynweklm@gmail.com", + "homepage": "https://github.com/Brooooooklyn" + } + ], + "repository": { + "type": "git", + "url": "git+https://github.com/napi-rs/napi-rs.git" + }, + "publishConfig": { + "registry": "https://registry.npmjs.org/", + "access": "public" + }, + "bugs": { + "url": "https://github.com/napi-rs/napi-rs/issues" + }, + "devDependencies": { + "@octokit/rest": "21.0.0", + "@types/inquirer": "^9.0.7", + "@types/js-yaml": "^4.0.9", + "@types/lodash-es": "^4.17.12", + "clipanion": "^3.2.1", + "colorette": "^2.0.20", + "core-js": "^3.37.1", + "debug": "^4.3.5", + "env-paths": "^3.0.0", + "fdir": "^6.1.1", + "inquirer": "9.3.2", + "js-yaml": "^4.1.0", + "lodash-es": "4.17.21", + "toml": "^3.0.0", + "tslib": "^2.6.3", + "typanion": "^3.14.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "gitHead": "b1239101d38c607a9ca427f8a8490a6ee168e91d" +} diff --git a/node_modules/@napi-rs/cli/scripts/index.js b/node_modules/@napi-rs/cli/scripts/index.js new file mode 100755 index 0000000..584dfac --- /dev/null +++ b/node_modules/@napi-rs/cli/scripts/index.js @@ -0,0 +1,51371 @@ +#!/usr/bin/env node +'use strict'; + +var path$1 = require('path'); +var tty$1 = require('tty'); +var require$$0$2 = require('fs'); +var require$$1$1 = require('child_process'); +var require$$0$3 = require('util'); +var os = require('os'); +var require$$2$1 = require('crypto'); +var process$4 = require('process'); +var assert$1 = require('assert'); +var require$$0$5 = require('readline'); +var require$$2$2 = require('events'); +var require$$1$2 = require('stream'); +var require$$0$4 = require('buffer'); +var require$$1$3 = require('string_decoder'); +var node_stream = require('node:stream'); + +function _interopNamespaceDefault(e) { + var n = Object.create(null); + if (e) { + Object.keys(e).forEach(function (k) { + if (k !== 'default') { + var d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: function () { return e[k]; } + }); + } + }); + } + n.default = e; + return Object.freeze(n); +} + +var tty__namespace = /*#__PURE__*/_interopNamespaceDefault(tty$1); + +var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + +function getDefaultExportFromCjs (x) { + return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; +} + +var check = function (it) { + return it && it.Math === Math && it; +}; + +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +var global$e = + // eslint-disable-next-line es/no-global-this -- safe + check(typeof globalThis == 'object' && globalThis) || + check(typeof window == 'object' && window) || + // eslint-disable-next-line no-restricted-globals -- safe + check(typeof self == 'object' && self) || + check(typeof commonjsGlobal == 'object' && commonjsGlobal) || + check(typeof commonjsGlobal == 'object' && commonjsGlobal) || + // eslint-disable-next-line no-new-func -- fallback + (function () { return this; })() || Function('return this')(); + +var objectGetOwnPropertyDescriptor = {}; + +var fails$d = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } +}; + +var fails$c = fails$d; + +// Detect IE8's incomplete defineProperty implementation +var descriptors = !fails$c(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7; +}); + +var fails$b = fails$d; + +var functionBindNative = !fails$b(function () { + // eslint-disable-next-line es/no-function-prototype-bind -- safe + var test = (function () { /* empty */ }).bind(); + // eslint-disable-next-line no-prototype-builtins -- safe + return typeof test != 'function' || test.hasOwnProperty('prototype'); +}); + +var NATIVE_BIND$2 = functionBindNative; + +var call$b = Function.prototype.call; + +var functionCall = NATIVE_BIND$2 ? call$b.bind(call$b) : function () { + return call$b.apply(call$b, arguments); +}; + +var objectPropertyIsEnumerable = {}; + +var $propertyIsEnumerable = {}.propertyIsEnumerable; +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var getOwnPropertyDescriptor$1 = Object.getOwnPropertyDescriptor; + +// Nashorn ~ JDK8 bug +var NASHORN_BUG = getOwnPropertyDescriptor$1 && !$propertyIsEnumerable.call({ 1: 2 }, 1); + +// `Object.prototype.propertyIsEnumerable` method implementation +// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable +objectPropertyIsEnumerable.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor$1(this, V); + return !!descriptor && descriptor.enumerable; +} : $propertyIsEnumerable; + +var createPropertyDescriptor$2 = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; +}; + +var NATIVE_BIND$1 = functionBindNative; + +var FunctionPrototype$2 = Function.prototype; +var call$a = FunctionPrototype$2.call; +var uncurryThisWithBind = NATIVE_BIND$1 && FunctionPrototype$2.bind.bind(call$a, call$a); + +var functionUncurryThis = NATIVE_BIND$1 ? uncurryThisWithBind : function (fn) { + return function () { + return call$a.apply(fn, arguments); + }; +}; + +var uncurryThis$e = functionUncurryThis; + +var toString$7 = uncurryThis$e({}.toString); +var stringSlice$6 = uncurryThis$e(''.slice); + +var classofRaw$1 = function (it) { + return stringSlice$6(toString$7(it), 8, -1); +}; + +var uncurryThis$d = functionUncurryThis; +var fails$a = fails$d; +var classof$4 = classofRaw$1; + +var $Object$3 = Object; +var split = uncurryThis$d(''.split); + +// fallback for non-array-like ES3 and non-enumerable old V8 strings +var indexedObject = fails$a(function () { + // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 + // eslint-disable-next-line no-prototype-builtins -- safe + return !$Object$3('z').propertyIsEnumerable(0); +}) ? function (it) { + return classof$4(it) === 'String' ? split(it, '') : $Object$3(it); +} : $Object$3; + +// we can't use just `it == null` since of `document.all` special case +// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec +var isNullOrUndefined$4 = function (it) { + return it === null || it === undefined; +}; + +var isNullOrUndefined$3 = isNullOrUndefined$4; + +var $TypeError$7 = TypeError; + +// `RequireObjectCoercible` abstract operation +// https://tc39.es/ecma262/#sec-requireobjectcoercible +var requireObjectCoercible$5 = function (it) { + if (isNullOrUndefined$3(it)) throw new $TypeError$7("Can't call method on " + it); + return it; +}; + +// toObject with fallback for non-array-like ES3 strings +var IndexedObject = indexedObject; +var requireObjectCoercible$4 = requireObjectCoercible$5; + +var toIndexedObject$4 = function (it) { + return IndexedObject(requireObjectCoercible$4(it)); +}; + +// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot +var documentAll = typeof document == 'object' && document.all; + +// `IsCallable` abstract operation +// https://tc39.es/ecma262/#sec-iscallable +// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing +var isCallable$e = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) { + return typeof argument == 'function' || argument === documentAll; +} : function (argument) { + return typeof argument == 'function'; +}; + +var isCallable$d = isCallable$e; + +var isObject$8 = function (it) { + return typeof it == 'object' ? it !== null : isCallable$d(it); +}; + +var global$d = global$e; +var isCallable$c = isCallable$e; + +var aFunction = function (argument) { + return isCallable$c(argument) ? argument : undefined; +}; + +var getBuiltIn$3 = function (namespace, method) { + return arguments.length < 2 ? aFunction(global$d[namespace]) : global$d[namespace] && global$d[namespace][method]; +}; + +var uncurryThis$c = functionUncurryThis; + +var objectIsPrototypeOf = uncurryThis$c({}.isPrototypeOf); + +var engineUserAgent = typeof navigator != 'undefined' && String(navigator.userAgent) || ''; + +var global$c = global$e; +var userAgent$1 = engineUserAgent; + +var process$3 = global$c.process; +var Deno = global$c.Deno; +var versions = process$3 && process$3.versions || Deno && Deno.version; +var v8 = versions && versions.v8; +var match$1, version$2; + +if (v8) { + match$1 = v8.split('.'); + // in old Chrome, versions of V8 isn't V8 = Chrome / 10 + // but their correct versions are not interesting for us + version$2 = match$1[0] > 0 && match$1[0] < 4 ? 1 : +(match$1[0] + match$1[1]); +} + +// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0` +// so check `userAgent` even if `.v8` exists, but 0 +if (!version$2 && userAgent$1) { + match$1 = userAgent$1.match(/Edge\/(\d+)/); + if (!match$1 || match$1[1] >= 74) { + match$1 = userAgent$1.match(/Chrome\/(\d+)/); + if (match$1) version$2 = +match$1[1]; + } +} + +var engineV8Version = version$2; + +/* eslint-disable es/no-symbol -- required for testing */ +var V8_VERSION = engineV8Version; +var fails$9 = fails$d; +var global$b = global$e; + +var $String$4 = global$b.String; + +// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing +var symbolConstructorDetection = !!Object.getOwnPropertySymbols && !fails$9(function () { + var symbol = Symbol('symbol detection'); + // Chrome 38 Symbol has incorrect toString conversion + // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances + // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will, + // of course, fail. + return !$String$4(symbol) || !(Object(symbol) instanceof Symbol) || + // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances + !Symbol.sham && V8_VERSION && V8_VERSION < 41; +}); + +/* eslint-disable es/no-symbol -- required for testing */ +var NATIVE_SYMBOL$1 = symbolConstructorDetection; + +var useSymbolAsUid = NATIVE_SYMBOL$1 + && !Symbol.sham + && typeof Symbol.iterator == 'symbol'; + +var getBuiltIn$2 = getBuiltIn$3; +var isCallable$b = isCallable$e; +var isPrototypeOf$1 = objectIsPrototypeOf; +var USE_SYMBOL_AS_UID$1 = useSymbolAsUid; + +var $Object$2 = Object; + +var isSymbol$3 = USE_SYMBOL_AS_UID$1 ? function (it) { + return typeof it == 'symbol'; +} : function (it) { + var $Symbol = getBuiltIn$2('Symbol'); + return isCallable$b($Symbol) && isPrototypeOf$1($Symbol.prototype, $Object$2(it)); +}; + +var $String$3 = String; + +var tryToString$1 = function (argument) { + try { + return $String$3(argument); + } catch (error) { + return 'Object'; + } +}; + +var isCallable$a = isCallable$e; +var tryToString = tryToString$1; + +var $TypeError$6 = TypeError; + +// `Assert: IsCallable(argument) is true` +var aCallable$1 = function (argument) { + if (isCallable$a(argument)) return argument; + throw new $TypeError$6(tryToString(argument) + ' is not a function'); +}; + +var aCallable = aCallable$1; +var isNullOrUndefined$2 = isNullOrUndefined$4; + +// `GetMethod` abstract operation +// https://tc39.es/ecma262/#sec-getmethod +var getMethod$3 = function (V, P) { + var func = V[P]; + return isNullOrUndefined$2(func) ? undefined : aCallable(func); +}; + +var call$9 = functionCall; +var isCallable$9 = isCallable$e; +var isObject$7 = isObject$8; + +var $TypeError$5 = TypeError; + +// `OrdinaryToPrimitive` abstract operation +// https://tc39.es/ecma262/#sec-ordinarytoprimitive +var ordinaryToPrimitive$1 = function (input, pref) { + var fn, val; + if (pref === 'string' && isCallable$9(fn = input.toString) && !isObject$7(val = call$9(fn, input))) return val; + if (isCallable$9(fn = input.valueOf) && !isObject$7(val = call$9(fn, input))) return val; + if (pref !== 'string' && isCallable$9(fn = input.toString) && !isObject$7(val = call$9(fn, input))) return val; + throw new $TypeError$5("Can't convert object to primitive value"); +}; + +var sharedStore = {exports: {}}; + +var global$a = global$e; + +// eslint-disable-next-line es/no-object-defineproperty -- safe +var defineProperty$2 = Object.defineProperty; + +var defineGlobalProperty$3 = function (key, value) { + try { + defineProperty$2(global$a, key, { value: value, configurable: true, writable: true }); + } catch (error) { + global$a[key] = value; + } return value; +}; + +var globalThis$1 = global$e; +var defineGlobalProperty$2 = defineGlobalProperty$3; + +var SHARED = '__core-js_shared__'; +var store$3 = sharedStore.exports = globalThis$1[SHARED] || defineGlobalProperty$2(SHARED, {}); + +(store$3.versions || (store$3.versions = [])).push({ + version: '3.37.1', + mode: 'global', + copyright: '© 2014-2024 Denis Pushkarev (zloirock.ru)', + license: 'https://github.com/zloirock/core-js/blob/v3.37.1/LICENSE', + source: 'https://github.com/zloirock/core-js' +}); + +var sharedStoreExports = sharedStore.exports; + +var store$2 = sharedStoreExports; + +var shared$4 = function (key, value) { + return store$2[key] || (store$2[key] = value || {}); +}; + +var requireObjectCoercible$3 = requireObjectCoercible$5; + +var $Object$1 = Object; + +// `ToObject` abstract operation +// https://tc39.es/ecma262/#sec-toobject +var toObject$2 = function (argument) { + return $Object$1(requireObjectCoercible$3(argument)); +}; + +var uncurryThis$b = functionUncurryThis; +var toObject$1 = toObject$2; + +var hasOwnProperty$a = uncurryThis$b({}.hasOwnProperty); + +// `HasOwnProperty` abstract operation +// https://tc39.es/ecma262/#sec-hasownproperty +// eslint-disable-next-line es/no-object-hasown -- safe +var hasOwnProperty_1 = Object.hasOwn || function hasOwn(it, key) { + return hasOwnProperty$a(toObject$1(it), key); +}; + +var uncurryThis$a = functionUncurryThis; + +var id = 0; +var postfix = Math.random(); +var toString$6 = uncurryThis$a(1.0.toString); + +var uid$2 = function (key) { + return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString$6(++id + postfix, 36); +}; + +var global$9 = global$e; +var shared$3 = shared$4; +var hasOwn$7 = hasOwnProperty_1; +var uid$1 = uid$2; +var NATIVE_SYMBOL = symbolConstructorDetection; +var USE_SYMBOL_AS_UID = useSymbolAsUid; + +var Symbol$2 = global$9.Symbol; +var WellKnownSymbolsStore = shared$3('wks'); +var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol$2['for'] || Symbol$2 : Symbol$2 && Symbol$2.withoutSetter || uid$1; + +var wellKnownSymbol$7 = function (name) { + if (!hasOwn$7(WellKnownSymbolsStore, name)) { + WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn$7(Symbol$2, name) + ? Symbol$2[name] + : createWellKnownSymbol('Symbol.' + name); + } return WellKnownSymbolsStore[name]; +}; + +var call$8 = functionCall; +var isObject$6 = isObject$8; +var isSymbol$2 = isSymbol$3; +var getMethod$2 = getMethod$3; +var ordinaryToPrimitive = ordinaryToPrimitive$1; +var wellKnownSymbol$6 = wellKnownSymbol$7; + +var $TypeError$4 = TypeError; +var TO_PRIMITIVE = wellKnownSymbol$6('toPrimitive'); + +// `ToPrimitive` abstract operation +// https://tc39.es/ecma262/#sec-toprimitive +var toPrimitive$1 = function (input, pref) { + if (!isObject$6(input) || isSymbol$2(input)) return input; + var exoticToPrim = getMethod$2(input, TO_PRIMITIVE); + var result; + if (exoticToPrim) { + if (pref === undefined) pref = 'default'; + result = call$8(exoticToPrim, input, pref); + if (!isObject$6(result) || isSymbol$2(result)) return result; + throw new $TypeError$4("Can't convert object to primitive value"); + } + if (pref === undefined) pref = 'number'; + return ordinaryToPrimitive(input, pref); +}; + +var toPrimitive = toPrimitive$1; +var isSymbol$1 = isSymbol$3; + +// `ToPropertyKey` abstract operation +// https://tc39.es/ecma262/#sec-topropertykey +var toPropertyKey$2 = function (argument) { + var key = toPrimitive(argument, 'string'); + return isSymbol$1(key) ? key : key + ''; +}; + +var global$8 = global$e; +var isObject$5 = isObject$8; + +var document$1 = global$8.document; +// typeof document.createElement is 'object' in old IE +var EXISTS$1 = isObject$5(document$1) && isObject$5(document$1.createElement); + +var documentCreateElement$1 = function (it) { + return EXISTS$1 ? document$1.createElement(it) : {}; +}; + +var DESCRIPTORS$7 = descriptors; +var fails$8 = fails$d; +var createElement = documentCreateElement$1; + +// Thanks to IE8 for its funny defineProperty +var ie8DomDefine = !DESCRIPTORS$7 && !fails$8(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty(createElement('div'), 'a', { + get: function () { return 7; } + }).a !== 7; +}); + +var DESCRIPTORS$6 = descriptors; +var call$7 = functionCall; +var propertyIsEnumerableModule = objectPropertyIsEnumerable; +var createPropertyDescriptor$1 = createPropertyDescriptor$2; +var toIndexedObject$3 = toIndexedObject$4; +var toPropertyKey$1 = toPropertyKey$2; +var hasOwn$6 = hasOwnProperty_1; +var IE8_DOM_DEFINE$1 = ie8DomDefine; + +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var $getOwnPropertyDescriptor$1 = Object.getOwnPropertyDescriptor; + +// `Object.getOwnPropertyDescriptor` method +// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor +objectGetOwnPropertyDescriptor.f = DESCRIPTORS$6 ? $getOwnPropertyDescriptor$1 : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject$3(O); + P = toPropertyKey$1(P); + if (IE8_DOM_DEFINE$1) try { + return $getOwnPropertyDescriptor$1(O, P); + } catch (error) { /* empty */ } + if (hasOwn$6(O, P)) return createPropertyDescriptor$1(!call$7(propertyIsEnumerableModule.f, O, P), O[P]); +}; + +var objectDefineProperty = {}; + +var DESCRIPTORS$5 = descriptors; +var fails$7 = fails$d; + +// V8 ~ Chrome 36- +// https://bugs.chromium.org/p/v8/issues/detail?id=3334 +var v8PrototypeDefineBug = DESCRIPTORS$5 && fails$7(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty(function () { /* empty */ }, 'prototype', { + value: 42, + writable: false + }).prototype !== 42; +}); + +var isObject$4 = isObject$8; + +var $String$2 = String; +var $TypeError$3 = TypeError; + +// `Assert: Type(argument) is Object` +var anObject$7 = function (argument) { + if (isObject$4(argument)) return argument; + throw new $TypeError$3($String$2(argument) + ' is not an object'); +}; + +var DESCRIPTORS$4 = descriptors; +var IE8_DOM_DEFINE = ie8DomDefine; +var V8_PROTOTYPE_DEFINE_BUG$1 = v8PrototypeDefineBug; +var anObject$6 = anObject$7; +var toPropertyKey = toPropertyKey$2; + +var $TypeError$2 = TypeError; +// eslint-disable-next-line es/no-object-defineproperty -- safe +var $defineProperty = Object.defineProperty; +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; +var ENUMERABLE = 'enumerable'; +var CONFIGURABLE$1 = 'configurable'; +var WRITABLE = 'writable'; + +// `Object.defineProperty` method +// https://tc39.es/ecma262/#sec-object.defineproperty +objectDefineProperty.f = DESCRIPTORS$4 ? V8_PROTOTYPE_DEFINE_BUG$1 ? function defineProperty(O, P, Attributes) { + anObject$6(O); + P = toPropertyKey(P); + anObject$6(Attributes); + if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) { + var current = $getOwnPropertyDescriptor(O, P); + if (current && current[WRITABLE]) { + O[P] = Attributes.value; + Attributes = { + configurable: CONFIGURABLE$1 in Attributes ? Attributes[CONFIGURABLE$1] : current[CONFIGURABLE$1], + enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE], + writable: false + }; + } + } return $defineProperty(O, P, Attributes); +} : $defineProperty : function defineProperty(O, P, Attributes) { + anObject$6(O); + P = toPropertyKey(P); + anObject$6(Attributes); + if (IE8_DOM_DEFINE) try { + return $defineProperty(O, P, Attributes); + } catch (error) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw new $TypeError$2('Accessors not supported'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; +}; + +var DESCRIPTORS$3 = descriptors; +var definePropertyModule$3 = objectDefineProperty; +var createPropertyDescriptor = createPropertyDescriptor$2; + +var createNonEnumerableProperty$3 = DESCRIPTORS$3 ? function (object, key, value) { + return definePropertyModule$3.f(object, key, createPropertyDescriptor(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + +var makeBuiltIn$2 = {exports: {}}; + +var DESCRIPTORS$2 = descriptors; +var hasOwn$5 = hasOwnProperty_1; + +var FunctionPrototype$1 = Function.prototype; +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var getDescriptor = DESCRIPTORS$2 && Object.getOwnPropertyDescriptor; + +var EXISTS = hasOwn$5(FunctionPrototype$1, 'name'); +// additional protection from minified / mangled / dropped function names +var PROPER = EXISTS && (function something() { /* empty */ }).name === 'something'; +var CONFIGURABLE = EXISTS && (!DESCRIPTORS$2 || (DESCRIPTORS$2 && getDescriptor(FunctionPrototype$1, 'name').configurable)); + +var functionName = { + EXISTS: EXISTS, + PROPER: PROPER, + CONFIGURABLE: CONFIGURABLE +}; + +var uncurryThis$9 = functionUncurryThis; +var isCallable$8 = isCallable$e; +var store$1 = sharedStoreExports; + +var functionToString = uncurryThis$9(Function.toString); + +// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper +if (!isCallable$8(store$1.inspectSource)) { + store$1.inspectSource = function (it) { + return functionToString(it); + }; +} + +var inspectSource$1 = store$1.inspectSource; + +var global$7 = global$e; +var isCallable$7 = isCallable$e; + +var WeakMap$4 = global$7.WeakMap; + +var weakMapBasicDetection = isCallable$7(WeakMap$4) && /native code/.test(String(WeakMap$4)); + +var shared$2 = shared$4; +var uid = uid$2; + +var keys$1 = shared$2('keys'); + +var sharedKey$2 = function (key) { + return keys$1[key] || (keys$1[key] = uid(key)); +}; + +var hiddenKeys$4 = {}; + +var NATIVE_WEAK_MAP = weakMapBasicDetection; +var global$6 = global$e; +var isObject$3 = isObject$8; +var createNonEnumerableProperty$2 = createNonEnumerableProperty$3; +var hasOwn$4 = hasOwnProperty_1; +var shared$1 = sharedStoreExports; +var sharedKey$1 = sharedKey$2; +var hiddenKeys$3 = hiddenKeys$4; + +var OBJECT_ALREADY_INITIALIZED = 'Object already initialized'; +var TypeError$1 = global$6.TypeError; +var WeakMap$3 = global$6.WeakMap; +var set$1, get$1, has; + +var enforce = function (it) { + return has(it) ? get$1(it) : set$1(it, {}); +}; + +var getterFor = function (TYPE) { + return function (it) { + var state; + if (!isObject$3(it) || (state = get$1(it)).type !== TYPE) { + throw new TypeError$1('Incompatible receiver, ' + TYPE + ' required'); + } return state; + }; +}; + +if (NATIVE_WEAK_MAP || shared$1.state) { + var store = shared$1.state || (shared$1.state = new WeakMap$3()); + /* eslint-disable no-self-assign -- prototype methods protection */ + store.get = store.get; + store.has = store.has; + store.set = store.set; + /* eslint-enable no-self-assign -- prototype methods protection */ + set$1 = function (it, metadata) { + if (store.has(it)) throw new TypeError$1(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + store.set(it, metadata); + return metadata; + }; + get$1 = function (it) { + return store.get(it) || {}; + }; + has = function (it) { + return store.has(it); + }; +} else { + var STATE = sharedKey$1('state'); + hiddenKeys$3[STATE] = true; + set$1 = function (it, metadata) { + if (hasOwn$4(it, STATE)) throw new TypeError$1(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + createNonEnumerableProperty$2(it, STATE, metadata); + return metadata; + }; + get$1 = function (it) { + return hasOwn$4(it, STATE) ? it[STATE] : {}; + }; + has = function (it) { + return hasOwn$4(it, STATE); + }; +} + +var internalState = { + set: set$1, + get: get$1, + has: has, + enforce: enforce, + getterFor: getterFor +}; + +var uncurryThis$8 = functionUncurryThis; +var fails$6 = fails$d; +var isCallable$6 = isCallable$e; +var hasOwn$3 = hasOwnProperty_1; +var DESCRIPTORS$1 = descriptors; +var CONFIGURABLE_FUNCTION_NAME = functionName.CONFIGURABLE; +var inspectSource = inspectSource$1; +var InternalStateModule = internalState; + +var enforceInternalState = InternalStateModule.enforce; +var getInternalState$1 = InternalStateModule.get; +var $String$1 = String; +// eslint-disable-next-line es/no-object-defineproperty -- safe +var defineProperty$1 = Object.defineProperty; +var stringSlice$5 = uncurryThis$8(''.slice); +var replace$2 = uncurryThis$8(''.replace); +var join = uncurryThis$8([].join); + +var CONFIGURABLE_LENGTH = DESCRIPTORS$1 && !fails$6(function () { + return defineProperty$1(function () { /* empty */ }, 'length', { value: 8 }).length !== 8; +}); + +var TEMPLATE = String(String).split('String'); + +var makeBuiltIn$1 = makeBuiltIn$2.exports = function (value, name, options) { + if (stringSlice$5($String$1(name), 0, 7) === 'Symbol(') { + name = '[' + replace$2($String$1(name), /^Symbol\(([^)]*)\).*$/, '$1') + ']'; + } + if (options && options.getter) name = 'get ' + name; + if (options && options.setter) name = 'set ' + name; + if (!hasOwn$3(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) { + if (DESCRIPTORS$1) defineProperty$1(value, 'name', { value: name, configurable: true }); + else value.name = name; + } + if (CONFIGURABLE_LENGTH && options && hasOwn$3(options, 'arity') && value.length !== options.arity) { + defineProperty$1(value, 'length', { value: options.arity }); + } + try { + if (options && hasOwn$3(options, 'constructor') && options.constructor) { + if (DESCRIPTORS$1) defineProperty$1(value, 'prototype', { writable: false }); + // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable + } else if (value.prototype) value.prototype = undefined; + } catch (error) { /* empty */ } + var state = enforceInternalState(value); + if (!hasOwn$3(state, 'source')) { + state.source = join(TEMPLATE, typeof name == 'string' ? name : ''); + } return value; +}; + +// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative +// eslint-disable-next-line no-extend-native -- required +Function.prototype.toString = makeBuiltIn$1(function toString() { + return isCallable$6(this) && getInternalState$1(this).source || inspectSource(this); +}, 'toString'); + +var makeBuiltInExports = makeBuiltIn$2.exports; + +var isCallable$5 = isCallable$e; +var definePropertyModule$2 = objectDefineProperty; +var makeBuiltIn = makeBuiltInExports; +var defineGlobalProperty$1 = defineGlobalProperty$3; + +var defineBuiltIn$2 = function (O, key, value, options) { + if (!options) options = {}; + var simple = options.enumerable; + var name = options.name !== undefined ? options.name : key; + if (isCallable$5(value)) makeBuiltIn(value, name, options); + if (options.global) { + if (simple) O[key] = value; + else defineGlobalProperty$1(key, value); + } else { + try { + if (!options.unsafe) delete O[key]; + else if (O[key]) simple = true; + } catch (error) { /* empty */ } + if (simple) O[key] = value; + else definePropertyModule$2.f(O, key, { + value: value, + enumerable: false, + configurable: !options.nonConfigurable, + writable: !options.nonWritable + }); + } return O; +}; + +var objectGetOwnPropertyNames = {}; + +var ceil = Math.ceil; +var floor$1 = Math.floor; + +// `Math.trunc` method +// https://tc39.es/ecma262/#sec-math.trunc +// eslint-disable-next-line es/no-math-trunc -- safe +var mathTrunc = Math.trunc || function trunc(x) { + var n = +x; + return (n > 0 ? floor$1 : ceil)(n); +}; + +var trunc = mathTrunc; + +// `ToIntegerOrInfinity` abstract operation +// https://tc39.es/ecma262/#sec-tointegerorinfinity +var toIntegerOrInfinity$4 = function (argument) { + var number = +argument; + // eslint-disable-next-line no-self-compare -- NaN check + return number !== number || number === 0 ? 0 : trunc(number); +}; + +var toIntegerOrInfinity$3 = toIntegerOrInfinity$4; + +var max$4 = Math.max; +var min$4 = Math.min; + +// Helper for a popular repeating case of the spec: +// Let integer be ? ToInteger(index). +// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). +var toAbsoluteIndex$1 = function (index, length) { + var integer = toIntegerOrInfinity$3(index); + return integer < 0 ? max$4(integer + length, 0) : min$4(integer, length); +}; + +var toIntegerOrInfinity$2 = toIntegerOrInfinity$4; + +var min$3 = Math.min; + +// `ToLength` abstract operation +// https://tc39.es/ecma262/#sec-tolength +var toLength$2 = function (argument) { + var len = toIntegerOrInfinity$2(argument); + return len > 0 ? min$3(len, 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 +}; + +var toLength$1 = toLength$2; + +// `LengthOfArrayLike` abstract operation +// https://tc39.es/ecma262/#sec-lengthofarraylike +var lengthOfArrayLike$1 = function (obj) { + return toLength$1(obj.length); +}; + +var toIndexedObject$2 = toIndexedObject$4; +var toAbsoluteIndex = toAbsoluteIndex$1; +var lengthOfArrayLike = lengthOfArrayLike$1; + +// `Array.prototype.{ indexOf, includes }` methods implementation +var createMethod$1 = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIndexedObject$2($this); + var length = lengthOfArrayLike(O); + if (length === 0) return !IS_INCLUDES && -1; + var index = toAbsoluteIndex(fromIndex, length); + var value; + // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare -- NaN check + if (IS_INCLUDES && el !== el) while (length > index) { + value = O[index++]; + // eslint-disable-next-line no-self-compare -- NaN check + if (value !== value) return true; + // Array#indexOf ignores holes, Array#includes - not + } else for (;length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; +}; + +var arrayIncludes = { + // `Array.prototype.includes` method + // https://tc39.es/ecma262/#sec-array.prototype.includes + includes: createMethod$1(true), + // `Array.prototype.indexOf` method + // https://tc39.es/ecma262/#sec-array.prototype.indexof + indexOf: createMethod$1(false) +}; + +var uncurryThis$7 = functionUncurryThis; +var hasOwn$2 = hasOwnProperty_1; +var toIndexedObject$1 = toIndexedObject$4; +var indexOf$2 = arrayIncludes.indexOf; +var hiddenKeys$2 = hiddenKeys$4; + +var push$1 = uncurryThis$7([].push); + +var objectKeysInternal = function (object, names) { + var O = toIndexedObject$1(object); + var i = 0; + var result = []; + var key; + for (key in O) !hasOwn$2(hiddenKeys$2, key) && hasOwn$2(O, key) && push$1(result, key); + // Don't enum bug & hidden keys + while (names.length > i) if (hasOwn$2(O, key = names[i++])) { + ~indexOf$2(result, key) || push$1(result, key); + } + return result; +}; + +// IE8- don't enum bug keys +var enumBugKeys$3 = [ + 'constructor', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toLocaleString', + 'toString', + 'valueOf' +]; + +var internalObjectKeys$1 = objectKeysInternal; +var enumBugKeys$2 = enumBugKeys$3; + +var hiddenKeys$1 = enumBugKeys$2.concat('length', 'prototype'); + +// `Object.getOwnPropertyNames` method +// https://tc39.es/ecma262/#sec-object.getownpropertynames +// eslint-disable-next-line es/no-object-getownpropertynames -- safe +objectGetOwnPropertyNames.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys$1(O, hiddenKeys$1); +}; + +var objectGetOwnPropertySymbols = {}; + +// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe +objectGetOwnPropertySymbols.f = Object.getOwnPropertySymbols; + +var getBuiltIn$1 = getBuiltIn$3; +var uncurryThis$6 = functionUncurryThis; +var getOwnPropertyNamesModule = objectGetOwnPropertyNames; +var getOwnPropertySymbolsModule = objectGetOwnPropertySymbols; +var anObject$5 = anObject$7; + +var concat$5 = uncurryThis$6([].concat); + +// all object keys, includes non-enumerable and symbols +var ownKeys$1 = getBuiltIn$1('Reflect', 'ownKeys') || function ownKeys(it) { + var keys = getOwnPropertyNamesModule.f(anObject$5(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return getOwnPropertySymbols ? concat$5(keys, getOwnPropertySymbols(it)) : keys; +}; + +var hasOwn$1 = hasOwnProperty_1; +var ownKeys = ownKeys$1; +var getOwnPropertyDescriptorModule = objectGetOwnPropertyDescriptor; +var definePropertyModule$1 = objectDefineProperty; + +var copyConstructorProperties$1 = function (target, source, exceptions) { + var keys = ownKeys(source); + var defineProperty = definePropertyModule$1.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!hasOwn$1(target, key) && !(exceptions && hasOwn$1(exceptions, key))) { + defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + } +}; + +var fails$5 = fails$d; +var isCallable$4 = isCallable$e; + +var replacement = /#|\.prototype\./; + +var isForced$2 = function (feature, detection) { + var value = data[normalize(feature)]; + return value === POLYFILL ? true + : value === NATIVE ? false + : isCallable$4(detection) ? fails$5(detection) + : !!detection; +}; + +var normalize = isForced$2.normalize = function (string) { + return String(string).replace(replacement, '.').toLowerCase(); +}; + +var data = isForced$2.data = {}; +var NATIVE = isForced$2.NATIVE = 'N'; +var POLYFILL = isForced$2.POLYFILL = 'P'; + +var isForced_1 = isForced$2; + +var global$5 = global$e; +var getOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f; +var createNonEnumerableProperty$1 = createNonEnumerableProperty$3; +var defineBuiltIn$1 = defineBuiltIn$2; +var defineGlobalProperty = defineGlobalProperty$3; +var copyConstructorProperties = copyConstructorProperties$1; +var isForced$1 = isForced_1; + +/* + options.target - name of the target object + options.global - target is the global object + options.stat - export as static methods of target + options.proto - export as prototype methods of target + options.real - real prototype method for the `pure` version + options.forced - export even if the native feature is available + options.bind - bind methods to the target, required for the `pure` version + options.wrap - wrap constructors to preventing global pollution, required for the `pure` version + options.unsafe - use the simple assignment of property instead of delete + defineProperty + options.sham - add a flag to not completely full polyfills + options.enumerable - export as enumerable property + options.dontCallGetSet - prevent calling a getter on target + options.name - the .name of the function if it does not match the key +*/ +var _export = function (options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = global$5; + } else if (STATIC) { + target = global$5[TARGET] || defineGlobalProperty(TARGET, {}); + } else { + target = global$5[TARGET] && global$5[TARGET].prototype; + } + if (target) for (key in source) { + sourceProperty = source[key]; + if (options.dontCallGetSet) { + descriptor = getOwnPropertyDescriptor(target, key); + targetProperty = descriptor && descriptor.value; + } else targetProperty = target[key]; + FORCED = isForced$1(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); + // contained in target + if (!FORCED && targetProperty !== undefined) { + if (typeof sourceProperty == typeof targetProperty) continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + // add a flag to not completely full polyfills + if (options.sham || (targetProperty && targetProperty.sham)) { + createNonEnumerableProperty$1(sourceProperty, 'sham', true); + } + defineBuiltIn$1(target, key, sourceProperty, options); + } +}; + +var wellKnownSymbol$5 = wellKnownSymbol$7; + +var TO_STRING_TAG$1 = wellKnownSymbol$5('toStringTag'); +var test = {}; + +test[TO_STRING_TAG$1] = 'z'; + +var toStringTagSupport = String(test) === '[object z]'; + +var TO_STRING_TAG_SUPPORT = toStringTagSupport; +var isCallable$3 = isCallable$e; +var classofRaw = classofRaw$1; +var wellKnownSymbol$4 = wellKnownSymbol$7; + +var TO_STRING_TAG = wellKnownSymbol$4('toStringTag'); +var $Object = Object; + +// ES3 wrong here +var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments'; + +// fallback for IE11 Script Access Denied error +var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { /* empty */ } +}; + +// getting tag from ES6+ `Object.prototype.toString` +var classof$3 = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { + var O, tag, result; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag + // builtinTag case + : CORRECT_ARGUMENTS ? classofRaw(O) + // ES3 arguments fallback + : (result = classofRaw(O)) === 'Object' && isCallable$3(O.callee) ? 'Arguments' : result; +}; + +var classof$2 = classof$3; + +var $String = String; + +var toString$5 = function (argument) { + if (classof$2(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string'); + return $String(argument); +}; + +var anObject$4 = anObject$7; + +// `RegExp.prototype.flags` getter implementation +// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags +var regexpFlags$1 = function () { + var that = anObject$4(this); + var result = ''; + if (that.hasIndices) result += 'd'; + if (that.global) result += 'g'; + if (that.ignoreCase) result += 'i'; + if (that.multiline) result += 'm'; + if (that.dotAll) result += 's'; + if (that.unicode) result += 'u'; + if (that.unicodeSets) result += 'v'; + if (that.sticky) result += 'y'; + return result; +}; + +var fails$4 = fails$d; +var global$4 = global$e; + +// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError +var $RegExp$2 = global$4.RegExp; + +var UNSUPPORTED_Y$1 = fails$4(function () { + var re = $RegExp$2('a', 'y'); + re.lastIndex = 2; + return re.exec('abcd') !== null; +}); + +// UC Browser bug +// https://github.com/zloirock/core-js/issues/1008 +var MISSED_STICKY = UNSUPPORTED_Y$1 || fails$4(function () { + return !$RegExp$2('a', 'y').sticky; +}); + +var BROKEN_CARET = UNSUPPORTED_Y$1 || fails$4(function () { + // https://bugzilla.mozilla.org/show_bug.cgi?id=773687 + var re = $RegExp$2('^r', 'gy'); + re.lastIndex = 2; + return re.exec('str') !== null; +}); + +var regexpStickyHelpers = { + BROKEN_CARET: BROKEN_CARET, + MISSED_STICKY: MISSED_STICKY, + UNSUPPORTED_Y: UNSUPPORTED_Y$1 +}; + +var objectDefineProperties = {}; + +var internalObjectKeys = objectKeysInternal; +var enumBugKeys$1 = enumBugKeys$3; + +// `Object.keys` method +// https://tc39.es/ecma262/#sec-object.keys +// eslint-disable-next-line es/no-object-keys -- safe +var objectKeys$1 = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys$1); +}; + +var DESCRIPTORS = descriptors; +var V8_PROTOTYPE_DEFINE_BUG = v8PrototypeDefineBug; +var definePropertyModule = objectDefineProperty; +var anObject$3 = anObject$7; +var toIndexedObject = toIndexedObject$4; +var objectKeys = objectKeys$1; + +// `Object.defineProperties` method +// https://tc39.es/ecma262/#sec-object.defineproperties +// eslint-disable-next-line es/no-object-defineproperties -- safe +objectDefineProperties.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) { + anObject$3(O); + var props = toIndexedObject(Properties); + var keys = objectKeys(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]); + return O; +}; + +var getBuiltIn = getBuiltIn$3; + +var html$1 = getBuiltIn('document', 'documentElement'); + +/* global ActiveXObject -- old IE, WSH */ +var anObject$2 = anObject$7; +var definePropertiesModule = objectDefineProperties; +var enumBugKeys = enumBugKeys$3; +var hiddenKeys = hiddenKeys$4; +var html = html$1; +var documentCreateElement = documentCreateElement$1; +var sharedKey = sharedKey$2; + +var GT = '>'; +var LT = '<'; +var PROTOTYPE = 'prototype'; +var SCRIPT = 'script'; +var IE_PROTO = sharedKey('IE_PROTO'); + +var EmptyConstructor = function () { /* empty */ }; + +var scriptTag = function (content) { + return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; +}; + +// Create object with fake `null` prototype: use ActiveX Object with cleared prototype +var NullProtoObjectViaActiveX = function (activeXDocument) { + activeXDocument.write(scriptTag('')); + activeXDocument.close(); + var temp = activeXDocument.parentWindow.Object; + activeXDocument = null; // avoid memory leak + return temp; +}; + +// Create object with fake `null` prototype: use iframe Object with cleared prototype +var NullProtoObjectViaIFrame = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = documentCreateElement('iframe'); + var JS = 'java' + SCRIPT + ':'; + var iframeDocument; + iframe.style.display = 'none'; + html.appendChild(iframe); + // https://github.com/zloirock/core-js/issues/475 + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag('document.F=Object')); + iframeDocument.close(); + return iframeDocument.F; +}; + +// Check for document.domain and active x support +// No need to use active x approach when document.domain is not set +// see https://github.com/es-shims/es5-shim/issues/150 +// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 +// avoid IE GC bug +var activeXDocument; +var NullProtoObject = function () { + try { + activeXDocument = new ActiveXObject('htmlfile'); + } catch (error) { /* ignore */ } + NullProtoObject = typeof document != 'undefined' + ? document.domain && activeXDocument + ? NullProtoObjectViaActiveX(activeXDocument) // old IE + : NullProtoObjectViaIFrame() + : NullProtoObjectViaActiveX(activeXDocument); // WSH + var length = enumBugKeys.length; + while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); +}; + +hiddenKeys[IE_PROTO] = true; + +// `Object.create` method +// https://tc39.es/ecma262/#sec-object.create +// eslint-disable-next-line es/no-object-create -- safe +var objectCreate = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject$2(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = NullProtoObject(); + return Properties === undefined ? result : definePropertiesModule.f(result, Properties); +}; + +var fails$3 = fails$d; +var global$3 = global$e; + +// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError +var $RegExp$1 = global$3.RegExp; + +var regexpUnsupportedDotAll = fails$3(function () { + var re = $RegExp$1('.', 's'); + return !(re.dotAll && re.test('\n') && re.flags === 's'); +}); + +var fails$2 = fails$d; +var global$2 = global$e; + +// babel-minify and Closure Compiler transpiles RegExp('(?b)', 'g') -> /(?b)/g and it causes SyntaxError +var $RegExp = global$2.RegExp; + +var regexpUnsupportedNcg = fails$2(function () { + var re = $RegExp('(?b)', 'g'); + return re.exec('b').groups.a !== 'b' || + 'b'.replace(re, '$c') !== 'bc'; +}); + +/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */ +/* eslint-disable regexp/no-useless-quantifier -- testing */ +var call$6 = functionCall; +var uncurryThis$5 = functionUncurryThis; +var toString$4 = toString$5; +var regexpFlags = regexpFlags$1; +var stickyHelpers = regexpStickyHelpers; +var shared = shared$4; +var create = objectCreate; +var getInternalState = internalState.get; +var UNSUPPORTED_DOT_ALL = regexpUnsupportedDotAll; +var UNSUPPORTED_NCG = regexpUnsupportedNcg; + +var nativeReplace = shared('native-string-replace', String.prototype.replace); +var nativeExec = RegExp.prototype.exec; +var patchedExec = nativeExec; +var charAt$3 = uncurryThis$5(''.charAt); +var indexOf$1 = uncurryThis$5(''.indexOf); +var replace$1 = uncurryThis$5(''.replace); +var stringSlice$4 = uncurryThis$5(''.slice); + +var UPDATES_LAST_INDEX_WRONG = (function () { + var re1 = /a/; + var re2 = /b*/g; + call$6(nativeExec, re1, 'a'); + call$6(nativeExec, re2, 'a'); + return re1.lastIndex !== 0 || re2.lastIndex !== 0; +})(); + +var UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET; + +// nonparticipating capturing group, copied from es5-shim's String#split patch. +var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; + +var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG; + +if (PATCH) { + patchedExec = function exec(string) { + var re = this; + var state = getInternalState(re); + var str = toString$4(string); + var raw = state.raw; + var result, reCopy, lastIndex, match, i, object, group; + + if (raw) { + raw.lastIndex = re.lastIndex; + result = call$6(patchedExec, raw, str); + re.lastIndex = raw.lastIndex; + return result; + } + + var groups = state.groups; + var sticky = UNSUPPORTED_Y && re.sticky; + var flags = call$6(regexpFlags, re); + var source = re.source; + var charsAdded = 0; + var strCopy = str; + + if (sticky) { + flags = replace$1(flags, 'y', ''); + if (indexOf$1(flags, 'g') === -1) { + flags += 'g'; + } + + strCopy = stringSlice$4(str, re.lastIndex); + // Support anchored sticky behavior. + if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt$3(str, re.lastIndex - 1) !== '\n')) { + source = '(?: ' + source + ')'; + strCopy = ' ' + strCopy; + charsAdded++; + } + // ^(? + rx + ) is needed, in combination with some str slicing, to + // simulate the 'y' flag. + reCopy = new RegExp('^(?:' + source + ')', flags); + } + + if (NPCG_INCLUDED) { + reCopy = new RegExp('^' + source + '$(?!\\s)', flags); + } + if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex; + + match = call$6(nativeExec, sticky ? reCopy : re, strCopy); + + if (sticky) { + if (match) { + match.input = stringSlice$4(match.input, charsAdded); + match[0] = stringSlice$4(match[0], charsAdded); + match.index = re.lastIndex; + re.lastIndex += match[0].length; + } else re.lastIndex = 0; + } else if (UPDATES_LAST_INDEX_WRONG && match) { + re.lastIndex = re.global ? match.index + match[0].length : lastIndex; + } + if (NPCG_INCLUDED && match && match.length > 1) { + // Fix browsers whose `exec` methods don't consistently return `undefined` + // for NPCG, like IE8. NOTE: This doesn't work for /(.?)?/ + call$6(nativeReplace, match[0], reCopy, function () { + for (i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === undefined) match[i] = undefined; + } + }); + } + + if (match && groups) { + match.groups = object = create(null); + for (i = 0; i < groups.length; i++) { + group = groups[i]; + object[group[0]] = match[group[1]]; + } + } + + return match; + }; +} + +var regexpExec$2 = patchedExec; + +var $$1 = _export; +var exec$1 = regexpExec$2; + +// `RegExp.prototype.exec` method +// https://tc39.es/ecma262/#sec-regexp.prototype.exec +$$1({ target: 'RegExp', proto: true, forced: /./.exec !== exec$1 }, { + exec: exec$1 +}); + +var NATIVE_BIND = functionBindNative; + +var FunctionPrototype = Function.prototype; +var apply$1 = FunctionPrototype.apply; +var call$5 = FunctionPrototype.call; + +// eslint-disable-next-line es/no-reflect -- safe +var functionApply = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call$5.bind(apply$1) : function () { + return call$5.apply(apply$1, arguments); +}); + +// TODO: Remove from `core-js@4` since it's moved to entry points + +var call$4 = functionCall; +var defineBuiltIn = defineBuiltIn$2; +var regexpExec$1 = regexpExec$2; +var fails$1 = fails$d; +var wellKnownSymbol$3 = wellKnownSymbol$7; +var createNonEnumerableProperty = createNonEnumerableProperty$3; + +var SPECIES = wellKnownSymbol$3('species'); +var RegExpPrototype$1 = RegExp.prototype; + +var fixRegexpWellKnownSymbolLogic = function (KEY, exec, FORCED, SHAM) { + var SYMBOL = wellKnownSymbol$3(KEY); + + var DELEGATES_TO_SYMBOL = !fails$1(function () { + // String methods call symbol-named RegExp methods + var O = {}; + O[SYMBOL] = function () { return 7; }; + return ''[KEY](O) !== 7; + }); + + var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails$1(function () { + // Symbol-named RegExp methods call .exec + var execCalled = false; + var re = /a/; + + if (KEY === 'split') { + // We can't use real regex here since it causes deoptimization + // and serious performance degradation in V8 + // https://github.com/zloirock/core-js/issues/306 + re = {}; + // RegExp[@@split] doesn't call the regex's exec method, but first creates + // a new one. We need to return the patched regex when creating the new one. + re.constructor = {}; + re.constructor[SPECIES] = function () { return re; }; + re.flags = ''; + re[SYMBOL] = /./[SYMBOL]; + } + + re.exec = function () { + execCalled = true; + return null; + }; + + re[SYMBOL](''); + return !execCalled; + }); + + if ( + !DELEGATES_TO_SYMBOL || + !DELEGATES_TO_EXEC || + FORCED + ) { + var nativeRegExpMethod = /./[SYMBOL]; + var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) { + var $exec = regexp.exec; + if ($exec === regexpExec$1 || $exec === RegExpPrototype$1.exec) { + if (DELEGATES_TO_SYMBOL && !forceStringMethod) { + // The native String method already delegates to @@method (this + // polyfilled function), leasing to infinite recursion. + // We avoid it by directly calling the native @@method method. + return { done: true, value: call$4(nativeRegExpMethod, regexp, str, arg2) }; + } + return { done: true, value: call$4(nativeMethod, str, regexp, arg2) }; + } + return { done: false }; + }); + + defineBuiltIn(String.prototype, KEY, methods[0]); + defineBuiltIn(RegExpPrototype$1, SYMBOL, methods[1]); + } + + if (SHAM) createNonEnumerableProperty(RegExpPrototype$1[SYMBOL], 'sham', true); +}; + +var uncurryThis$4 = functionUncurryThis; +var toIntegerOrInfinity$1 = toIntegerOrInfinity$4; +var toString$3 = toString$5; +var requireObjectCoercible$2 = requireObjectCoercible$5; + +var charAt$2 = uncurryThis$4(''.charAt); +var charCodeAt = uncurryThis$4(''.charCodeAt); +var stringSlice$3 = uncurryThis$4(''.slice); + +var createMethod = function (CONVERT_TO_STRING) { + return function ($this, pos) { + var S = toString$3(requireObjectCoercible$2($this)); + var position = toIntegerOrInfinity$1(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; + first = charCodeAt(S, position); + return first < 0xD800 || first > 0xDBFF || position + 1 === size + || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF + ? CONVERT_TO_STRING + ? charAt$2(S, position) + : first + : CONVERT_TO_STRING + ? stringSlice$3(S, position, position + 2) + : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; + }; +}; + +var stringMultibyte = { + // `String.prototype.codePointAt` method + // https://tc39.es/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod(true) +}; + +var charAt$1 = stringMultibyte.charAt; + +// `AdvanceStringIndex` abstract operation +// https://tc39.es/ecma262/#sec-advancestringindex +var advanceStringIndex$1 = function (S, index, unicode) { + return index + (unicode ? charAt$1(S, index).length : 1); +}; + +var uncurryThis$3 = functionUncurryThis; +var toObject = toObject$2; + +var floor = Math.floor; +var charAt = uncurryThis$3(''.charAt); +var replace = uncurryThis$3(''.replace); +var stringSlice$2 = uncurryThis$3(''.slice); +// eslint-disable-next-line redos/no-vulnerable -- safe +var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d{1,2}|<[^>]*>)/g; +var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d{1,2})/g; + +// `GetSubstitution` abstract operation +// https://tc39.es/ecma262/#sec-getsubstitution +var getSubstitution$2 = function (matched, str, position, captures, namedCaptures, replacement) { + var tailPos = position + matched.length; + var m = captures.length; + var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED; + if (namedCaptures !== undefined) { + namedCaptures = toObject(namedCaptures); + symbols = SUBSTITUTION_SYMBOLS; + } + return replace(replacement, symbols, function (match, ch) { + var capture; + switch (charAt(ch, 0)) { + case '$': return '$'; + case '&': return matched; + case '`': return stringSlice$2(str, 0, position); + case "'": return stringSlice$2(str, tailPos); + case '<': + capture = namedCaptures[stringSlice$2(ch, 1, -1)]; + break; + default: // \d\d? + var n = +ch; + if (n === 0) return match; + if (n > m) { + var f = floor(n / 10); + if (f === 0) return match; + if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1); + return match; + } + capture = captures[n - 1]; + } + return capture === undefined ? '' : capture; + }); +}; + +var call$3 = functionCall; +var anObject$1 = anObject$7; +var isCallable$2 = isCallable$e; +var classof$1 = classofRaw$1; +var regexpExec = regexpExec$2; + +var $TypeError$1 = TypeError; + +// `RegExpExec` abstract operation +// https://tc39.es/ecma262/#sec-regexpexec +var regexpExecAbstract = function (R, S) { + var exec = R.exec; + if (isCallable$2(exec)) { + var result = call$3(exec, R, S); + if (result !== null) anObject$1(result); + return result; + } + if (classof$1(R) === 'RegExp') return call$3(regexpExec, R, S); + throw new $TypeError$1('RegExp#exec called on incompatible receiver'); +}; + +var apply = functionApply; +var call$2 = functionCall; +var uncurryThis$2 = functionUncurryThis; +var fixRegExpWellKnownSymbolLogic = fixRegexpWellKnownSymbolLogic; +var fails = fails$d; +var anObject = anObject$7; +var isCallable$1 = isCallable$e; +var isNullOrUndefined$1 = isNullOrUndefined$4; +var toIntegerOrInfinity = toIntegerOrInfinity$4; +var toLength = toLength$2; +var toString$2 = toString$5; +var requireObjectCoercible$1 = requireObjectCoercible$5; +var advanceStringIndex = advanceStringIndex$1; +var getMethod$1 = getMethod$3; +var getSubstitution$1 = getSubstitution$2; +var regExpExec = regexpExecAbstract; +var wellKnownSymbol$2 = wellKnownSymbol$7; + +var REPLACE$1 = wellKnownSymbol$2('replace'); +var max$3 = Math.max; +var min$2 = Math.min; +var concat$4 = uncurryThis$2([].concat); +var push = uncurryThis$2([].push); +var stringIndexOf = uncurryThis$2(''.indexOf); +var stringSlice$1 = uncurryThis$2(''.slice); + +var maybeToString = function (it) { + return it === undefined ? it : String(it); +}; + +// IE <= 11 replaces $0 with the whole match, as if it was $& +// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0 +var REPLACE_KEEPS_$0 = (function () { + // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing + return 'a'.replace(/./, '$0') === '$0'; +})(); + +// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string +var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () { + if (/./[REPLACE$1]) { + return /./[REPLACE$1]('a', '$0') === ''; + } + return false; +})(); + +var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () { + var re = /./; + re.exec = function () { + var result = []; + result.groups = { a: '7' }; + return result; + }; + // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive + return ''.replace(re, '$') !== '7'; +}); + +// @@replace logic +fixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) { + var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0'; + + return [ + // `String.prototype.replace` method + // https://tc39.es/ecma262/#sec-string.prototype.replace + function replace(searchValue, replaceValue) { + var O = requireObjectCoercible$1(this); + var replacer = isNullOrUndefined$1(searchValue) ? undefined : getMethod$1(searchValue, REPLACE$1); + return replacer + ? call$2(replacer, searchValue, O, replaceValue) + : call$2(nativeReplace, toString$2(O), searchValue, replaceValue); + }, + // `RegExp.prototype[@@replace]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace + function (string, replaceValue) { + var rx = anObject(this); + var S = toString$2(string); + + if ( + typeof replaceValue == 'string' && + stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 && + stringIndexOf(replaceValue, '$<') === -1 + ) { + var res = maybeCallNative(nativeReplace, rx, S, replaceValue); + if (res.done) return res.value; + } + + var functionalReplace = isCallable$1(replaceValue); + if (!functionalReplace) replaceValue = toString$2(replaceValue); + + var global = rx.global; + var fullUnicode; + if (global) { + fullUnicode = rx.unicode; + rx.lastIndex = 0; + } + + var results = []; + var result; + while (true) { + result = regExpExec(rx, S); + if (result === null) break; + + push(results, result); + if (!global) break; + + var matchStr = toString$2(result[0]); + if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); + } + + var accumulatedResult = ''; + var nextSourcePosition = 0; + for (var i = 0; i < results.length; i++) { + result = results[i]; + + var matched = toString$2(result[0]); + var position = max$3(min$2(toIntegerOrInfinity(result.index), S.length), 0); + var captures = []; + var replacement; + // NOTE: This is equivalent to + // captures = result.slice(1).map(maybeToString) + // but for some reason `nativeSlice.call(result, 1, result.length)` (called in + // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and + // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it. + for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j])); + var namedCaptures = result.groups; + if (functionalReplace) { + var replacerArgs = concat$4([matched], captures, position, S); + if (namedCaptures !== undefined) push(replacerArgs, namedCaptures); + replacement = toString$2(apply(replaceValue, undefined, replacerArgs)); + } else { + replacement = getSubstitution$1(matched, S, position, captures, namedCaptures, replaceValue); + } + if (position >= nextSourcePosition) { + accumulatedResult += stringSlice$1(S, nextSourcePosition, position) + replacement; + nextSourcePosition = position + matched.length; + } + } + + return accumulatedResult + stringSlice$1(S, nextSourcePosition); + } + ]; +}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE); + +var isObject$2 = isObject$8; +var classof = classofRaw$1; +var wellKnownSymbol$1 = wellKnownSymbol$7; + +var MATCH = wellKnownSymbol$1('match'); + +// `IsRegExp` abstract operation +// https://tc39.es/ecma262/#sec-isregexp +var isRegexp = function (it) { + var isRegExp; + return isObject$2(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) === 'RegExp'); +}; + +var call$1 = functionCall; +var hasOwn = hasOwnProperty_1; +var isPrototypeOf = objectIsPrototypeOf; +var regExpFlags = regexpFlags$1; + +var RegExpPrototype = RegExp.prototype; + +var regexpGetFlags = function (R) { + var flags = R.flags; + return flags === undefined && !('flags' in RegExpPrototype) && !hasOwn(R, 'flags') && isPrototypeOf(RegExpPrototype, R) + ? call$1(regExpFlags, R) : flags; +}; + +var $ = _export; +var call = functionCall; +var uncurryThis$1 = functionUncurryThis; +var requireObjectCoercible = requireObjectCoercible$5; +var isCallable = isCallable$e; +var isNullOrUndefined = isNullOrUndefined$4; +var isRegExp = isRegexp; +var toString$1 = toString$5; +var getMethod = getMethod$3; +var getRegExpFlags = regexpGetFlags; +var getSubstitution = getSubstitution$2; +var wellKnownSymbol = wellKnownSymbol$7; + +var REPLACE = wellKnownSymbol('replace'); +var $TypeError = TypeError; +var indexOf = uncurryThis$1(''.indexOf); +uncurryThis$1(''.replace); +var stringSlice = uncurryThis$1(''.slice); +var max$2 = Math.max; + +// `String.prototype.replaceAll` method +// https://tc39.es/ecma262/#sec-string.prototype.replaceall +$({ target: 'String', proto: true }, { + replaceAll: function replaceAll(searchValue, replaceValue) { + var O = requireObjectCoercible(this); + var IS_REG_EXP, flags, replacer, string, searchString, functionalReplace, searchLength, advanceBy, replacement; + var position = 0; + var endOfLastMatch = 0; + var result = ''; + if (!isNullOrUndefined(searchValue)) { + IS_REG_EXP = isRegExp(searchValue); + if (IS_REG_EXP) { + flags = toString$1(requireObjectCoercible(getRegExpFlags(searchValue))); + if (!~indexOf(flags, 'g')) throw new $TypeError('`.replaceAll` does not allow non-global regexes'); + } + replacer = getMethod(searchValue, REPLACE); + if (replacer) { + return call(replacer, searchValue, O, replaceValue); + } + } + string = toString$1(O); + searchString = toString$1(searchValue); + functionalReplace = isCallable(replaceValue); + if (!functionalReplace) replaceValue = toString$1(replaceValue); + searchLength = searchString.length; + advanceBy = max$2(1, searchLength); + position = indexOf(string, searchString); + while (position !== -1) { + replacement = functionalReplace + ? toString$1(replaceValue(searchString, position, string)) + : getSubstitution(searchString, string, position, [], undefined, replaceValue); + result += stringSlice(string, endOfLastMatch, position) + replacement; + endOfLastMatch = position + searchLength; + position = position + advanceBy > string.length ? -1 : indexOf(string, searchString, position + advanceBy); + } + if (endOfLastMatch < string.length) { + result += stringSlice(string, endOfLastMatch); + } + return result; + } +}); + +var global$1 = global$e; +var uncurryThis = functionUncurryThis; + +var entryUnbind$1 = function (CONSTRUCTOR, METHOD) { + return uncurryThis(global$1[CONSTRUCTOR].prototype[METHOD]); +}; + +var entryUnbind = entryUnbind$1; + +entryUnbind('String', 'replaceAll'); + +const NODE_INITIAL = 0; +const NODE_SUCCESS = 1; +const NODE_ERRORED = 2; +const START_OF_INPUT = `\u0001`; +const END_OF_INPUT = `\u0000`; +const HELP_COMMAND_INDEX = -1; +const HELP_REGEX = /^(-h|--help)(?:=([0-9]+))?$/; +const OPTION_REGEX = /^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/; +const BATCH_REGEX = /^-[a-zA-Z]{2,}$/; +const BINDING_REGEX = /^([^=]+)=([\s\S]*)$/; +const DEBUG = process.env.DEBUG_CLI === `1`; + +/** + * A generic usage error with the name `UsageError`. + * + * It should be used over `Error` only when it's the user's fault. + */ +class UsageError extends Error { + constructor(message) { + super(message); + this.clipanion = { type: `usage` }; + this.name = `UsageError`; + } +} +class UnknownSyntaxError extends Error { + constructor(input, candidates) { + super(); + this.input = input; + this.candidates = candidates; + this.clipanion = { type: `none` }; + this.name = `UnknownSyntaxError`; + if (this.candidates.length === 0) { + this.message = `Command not found, but we're not sure what's the alternative.`; + } + else if (this.candidates.every(candidate => candidate.reason !== null && candidate.reason === candidates[0].reason)) { + const [{ reason }] = this.candidates; + this.message = `${reason}\n\n${this.candidates.map(({ usage }) => `$ ${usage}`).join(`\n`)}`; + } + else if (this.candidates.length === 1) { + const [{ usage }] = this.candidates; + this.message = `Command not found; did you mean:\n\n$ ${usage}\n${whileRunning(input)}`; + } + else { + this.message = `Command not found; did you mean one of:\n\n${this.candidates.map(({ usage }, index) => { + return `${`${index}.`.padStart(4)} ${usage}`; + }).join(`\n`)}\n\n${whileRunning(input)}`; + } + } +} +class AmbiguousSyntaxError extends Error { + constructor(input, usages) { + super(); + this.input = input; + this.usages = usages; + this.clipanion = { type: `none` }; + this.name = `AmbiguousSyntaxError`; + this.message = `Cannot find which to pick amongst the following alternatives:\n\n${this.usages.map((usage, index) => { + return `${`${index}.`.padStart(4)} ${usage}`; + }).join(`\n`)}\n\n${whileRunning(input)}`; + } +} +const whileRunning = (input) => `While running ${input.filter(token => { + return token !== END_OF_INPUT; +}).map(token => { + const json = JSON.stringify(token); + if (token.match(/\s/) || token.length === 0 || json !== `"${token}"`) { + return json; + } + else { + return token; + } +}).join(` `)}`; + +const MAX_LINE_LENGTH = 80; +const richLine = Array(MAX_LINE_LENGTH).fill(`━`); +for (let t = 0; t <= 24; ++t) + richLine[richLine.length - t] = `\x1b[38;5;${232 + t}m━`; +const richFormat = { + header: str => `\x1b[1m━━━ ${str}${str.length < MAX_LINE_LENGTH - 5 ? ` ${richLine.slice(str.length + 5).join(``)}` : `:`}\x1b[0m`, + bold: str => `\x1b[1m${str}\x1b[22m`, + error: str => `\x1b[31m\x1b[1m${str}\x1b[22m\x1b[39m`, + code: str => `\x1b[36m${str}\x1b[39m`, +}; +const textFormat = { + header: str => str, + bold: str => str, + error: str => str, + code: str => str, +}; +function dedent(text) { + const lines = text.split(`\n`); + const nonEmptyLines = lines.filter(line => line.match(/\S/)); + const indent = nonEmptyLines.length > 0 ? nonEmptyLines.reduce((minLength, line) => Math.min(minLength, line.length - line.trimStart().length), Number.MAX_VALUE) : 0; + return lines + .map(line => line.slice(indent).trimRight()) + .join(`\n`); +} +/** + * Formats markdown text to be displayed to the console. Not all markdown features are supported. + * + * @param text The markdown text to format. + * @param opts.format The format to use. + * @param opts.paragraphs Whether to cut the text into paragraphs of 80 characters at most. + */ +function formatMarkdownish(text, { format, paragraphs }) { + // Enforce \n as newline character + text = text.replace(/\r\n?/g, `\n`); + // Remove the indentation, since it got messed up with the JS indentation + text = dedent(text); + // Remove surrounding newlines, since they got added for JS formatting + text = text.replace(/^\n+|\n+$/g, ``); + // List items always end with at least two newlines (in order to not be collapsed) + text = text.replace(/^(\s*)-([^\n]*?)\n+/gm, `$1-$2\n\n`); + // Single newlines are removed; larger than that are collapsed into one + text = text.replace(/\n(\n)?\n*/g, ($0, $1) => $1 ? $1 : ` `); + if (paragraphs) { + text = text.split(/\n/).map(paragraph => { + // Does the paragraph starts with a list? + const bulletMatch = paragraph.match(/^\s*[*-][\t ]+(.*)/); + if (!bulletMatch) + // No, cut the paragraphs into segments of 80 characters + return paragraph.match(/(.{1,80})(?: |$)/g).join(`\n`); + const indent = paragraph.length - paragraph.trimStart().length; + // Yes, cut the paragraphs into segments of (78 - indent) characters (to account for the prefix) + return bulletMatch[1].match(new RegExp(`(.{1,${78 - indent}})(?: |$)`, `g`)).map((line, index) => { + return ` `.repeat(indent) + (index === 0 ? `- ` : ` `) + line; + }).join(`\n`); + }).join(`\n\n`); + } + // Highlight the code segments + text = text.replace(/(`+)((?:.|[\n])*?)\1/g, ($0, $1, $2) => { + return format.code($1 + $2 + $1); + }); + // Highlight the bold segments + text = text.replace(/(\*\*)((?:.|[\n])*?)\1/g, ($0, $1, $2) => { + return format.bold($1 + $2 + $1); + }); + return text ? `${text}\n` : ``; +} + +const isOptionSymbol = Symbol(`clipanion/isOption`); +function makeCommandOption(spec) { + // We lie! But it's for the good cause: the cli engine will turn the specs into proper values after instantiation. + return { ...spec, [isOptionSymbol]: true }; +} +function rerouteArguments(a, b) { + if (typeof a === `undefined`) + return [a, b]; + if (typeof a === `object` && a !== null && !Array.isArray(a)) { + return [undefined, a]; + } + else { + return [a, b]; + } +} +function cleanValidationError(message, { mergeName = false } = {}) { + const match = message.match(/^([^:]+): (.*)$/m); + if (!match) + return `validation failed`; + let [, path, line] = match; + if (mergeName) + line = line[0].toLowerCase() + line.slice(1); + line = path !== `.` || !mergeName + ? `${path.replace(/^\.(\[|$)/, `$1`)}: ${line}` + : `: ${line}`; + return line; +} +function formatError$1(message, errors) { + if (errors.length === 1) { + return new UsageError(`${message}${cleanValidationError(errors[0], { mergeName: true })}`); + } + else { + return new UsageError(`${message}:\n${errors.map(error => `\n- ${cleanValidationError(error)}`).join(``)}`); + } +} +function applyValidator(name, value, validator) { + if (typeof validator === `undefined`) + return value; + const errors = []; + const coercions = []; + const coercion = (v) => { + const orig = value; + value = v; + return coercion.bind(null, orig); + }; + const check = validator(value, { errors, coercions, coercion }); + if (!check) + throw formatError$1(`Invalid value for ${name}`, errors); + for (const [, op] of coercions) + op(); + return value; +} + +/** + * Base abstract class for CLI commands. The main thing to remember is to + * declare an async `execute` member function that will be called when the + * command is invoked from the CLI, and optionally a `paths` property to + * declare the set of paths under which the command should be exposed. + */ +class Command { + constructor() { + /** + * Predefined that will be set to true if `-h,--help` has been used, in + * which case `Command#execute` won't be called. + */ + this.help = false; + } + /** + * Defines the usage information for the given command. + */ + static Usage(usage) { + return usage; + } + /** + * Standard error handler which will simply rethrow the error. Can be used + * to add custom logic to handle errors from the command or simply return + * the parent class error handling. + */ + async catch(error) { + throw error; + } + async validateAndExecute() { + const commandClass = this.constructor; + const cascade = commandClass.schema; + if (Array.isArray(cascade)) { + const { isDict, isUnknown, applyCascade } = await Promise.resolve().then(function () { return index; }); + const schema = applyCascade(isDict(isUnknown()), cascade); + const errors = []; + const coercions = []; + const check = schema(this, { errors, coercions }); + if (!check) + throw formatError$1(`Invalid option schema`, errors); + for (const [, op] of coercions) { + op(); + } + } + else if (cascade != null) { + throw new Error(`Invalid command schema`); + } + const exitCode = await this.execute(); + if (typeof exitCode !== `undefined`) { + return exitCode; + } + else { + return 0; + } + } +} +/** + * Used to detect option definitions. + */ +Command.isOption = isOptionSymbol; +/** + * Just an helper to use along with the `paths` fields, to make it + * clearer that a command is the default one. + * + * @example + * class MyCommand extends Command { + * static paths = [Command.Default]; + * } + */ +Command.Default = []; + +// ------------------------------------------------------------------------ +function debug$b(str) { + if (DEBUG) { + console.log(str); + } +} +const basicHelpState = { + candidateUsage: null, + requiredOptions: [], + errorMessage: null, + ignoreOptions: false, + path: [], + positionals: [], + options: [], + remainder: null, + selectedIndex: HELP_COMMAND_INDEX, +}; +function makeStateMachine() { + return { + nodes: [makeNode(), makeNode(), makeNode()], + }; +} +function makeAnyOfMachine(inputs) { + const output = makeStateMachine(); + const heads = []; + let offset = output.nodes.length; + for (const input of inputs) { + heads.push(offset); + for (let t = 0; t < input.nodes.length; ++t) + if (!isTerminalNode(t)) + output.nodes.push(cloneNode(input.nodes[t], offset)); + offset += input.nodes.length - 2; + } + for (const head of heads) + registerShortcut(output, NODE_INITIAL, head); + return output; +} +function injectNode(machine, node) { + machine.nodes.push(node); + return machine.nodes.length - 1; +} +function simplifyMachine(input) { + const visited = new Set(); + const process = (node) => { + if (visited.has(node)) + return; + visited.add(node); + const nodeDef = input.nodes[node]; + for (const transitions of Object.values(nodeDef.statics)) + for (const { to } of transitions) + process(to); + for (const [, { to }] of nodeDef.dynamics) + process(to); + for (const { to } of nodeDef.shortcuts) + process(to); + const shortcuts = new Set(nodeDef.shortcuts.map(({ to }) => to)); + while (nodeDef.shortcuts.length > 0) { + const { to } = nodeDef.shortcuts.shift(); + const toDef = input.nodes[to]; + for (const [segment, transitions] of Object.entries(toDef.statics)) { + const store = !Object.prototype.hasOwnProperty.call(nodeDef.statics, segment) + ? nodeDef.statics[segment] = [] + : nodeDef.statics[segment]; + for (const transition of transitions) { + if (!store.some(({ to }) => transition.to === to)) { + store.push(transition); + } + } + } + for (const [test, transition] of toDef.dynamics) + if (!nodeDef.dynamics.some(([otherTest, { to }]) => test === otherTest && transition.to === to)) + nodeDef.dynamics.push([test, transition]); + for (const transition of toDef.shortcuts) { + if (!shortcuts.has(transition.to)) { + nodeDef.shortcuts.push(transition); + shortcuts.add(transition.to); + } + } + } + }; + process(NODE_INITIAL); +} +function debugMachine(machine, { prefix = `` } = {}) { + // Don't iterate unless it's needed + if (DEBUG) { + debug$b(`${prefix}Nodes are:`); + for (let t = 0; t < machine.nodes.length; ++t) { + debug$b(`${prefix} ${t}: ${JSON.stringify(machine.nodes[t])}`); + } + } +} +function runMachineInternal(machine, input, partial = false) { + debug$b(`Running a vm on ${JSON.stringify(input)}`); + let branches = [{ node: NODE_INITIAL, state: { + candidateUsage: null, + requiredOptions: [], + errorMessage: null, + ignoreOptions: false, + options: [], + path: [], + positionals: [], + remainder: null, + selectedIndex: null, + } }]; + debugMachine(machine, { prefix: ` ` }); + const tokens = [START_OF_INPUT, ...input]; + for (let t = 0; t < tokens.length; ++t) { + const segment = tokens[t]; + debug$b(` Processing ${JSON.stringify(segment)}`); + const nextBranches = []; + for (const { node, state } of branches) { + debug$b(` Current node is ${node}`); + const nodeDef = machine.nodes[node]; + if (node === NODE_ERRORED) { + nextBranches.push({ node, state }); + continue; + } + console.assert(nodeDef.shortcuts.length === 0, `Shortcuts should have been eliminated by now`); + const hasExactMatch = Object.prototype.hasOwnProperty.call(nodeDef.statics, segment); + if (!partial || t < tokens.length - 1 || hasExactMatch) { + if (hasExactMatch) { + const transitions = nodeDef.statics[segment]; + for (const { to, reducer } of transitions) { + nextBranches.push({ node: to, state: typeof reducer !== `undefined` ? execute(reducers, reducer, state, segment) : state }); + debug$b(` Static transition to ${to} found`); + } + } + else { + debug$b(` No static transition found`); + } + } + else { + let hasMatches = false; + for (const candidate of Object.keys(nodeDef.statics)) { + if (!candidate.startsWith(segment)) + continue; + if (segment === candidate) { + for (const { to, reducer } of nodeDef.statics[candidate]) { + nextBranches.push({ node: to, state: typeof reducer !== `undefined` ? execute(reducers, reducer, state, segment) : state }); + debug$b(` Static transition to ${to} found`); + } + } + else { + for (const { to } of nodeDef.statics[candidate]) { + nextBranches.push({ node: to, state: { ...state, remainder: candidate.slice(segment.length) } }); + debug$b(` Static transition to ${to} found (partial match)`); + } + } + hasMatches = true; + } + if (!hasMatches) { + debug$b(` No partial static transition found`); + } + } + if (segment !== END_OF_INPUT) { + for (const [test, { to, reducer }] of nodeDef.dynamics) { + if (execute(tests, test, state, segment)) { + nextBranches.push({ node: to, state: typeof reducer !== `undefined` ? execute(reducers, reducer, state, segment) : state }); + debug$b(` Dynamic transition to ${to} found (via ${test})`); + } + } + } + } + if (nextBranches.length === 0 && segment === END_OF_INPUT && input.length === 1) { + return [{ + node: NODE_INITIAL, + state: basicHelpState, + }]; + } + if (nextBranches.length === 0) { + throw new UnknownSyntaxError(input, branches.filter(({ node }) => { + return node !== NODE_ERRORED; + }).map(({ state }) => { + return { usage: state.candidateUsage, reason: null }; + })); + } + if (nextBranches.every(({ node }) => node === NODE_ERRORED)) { + throw new UnknownSyntaxError(input, nextBranches.map(({ state }) => { + return { usage: state.candidateUsage, reason: state.errorMessage }; + })); + } + branches = trimSmallerBranches(nextBranches); + } + if (branches.length > 0) { + debug$b(` Results:`); + for (const branch of branches) { + debug$b(` - ${branch.node} -> ${JSON.stringify(branch.state)}`); + } + } + else { + debug$b(` No results`); + } + return branches; +} +function checkIfNodeIsFinished(node, state) { + if (state.selectedIndex !== null) + return true; + if (Object.prototype.hasOwnProperty.call(node.statics, END_OF_INPUT)) + for (const { to } of node.statics[END_OF_INPUT]) + if (to === NODE_SUCCESS) + return true; + return false; +} +function suggestMachine(machine, input, partial) { + // If we're accepting partial matches, then exact matches need to be + // prefixed with an extra space. + const prefix = partial && input.length > 0 ? [``] : []; + const branches = runMachineInternal(machine, input, partial); + const suggestions = []; + const suggestionsJson = new Set(); + const traverseSuggestion = (suggestion, node, skipFirst = true) => { + let nextNodes = [node]; + while (nextNodes.length > 0) { + const currentNodes = nextNodes; + nextNodes = []; + for (const node of currentNodes) { + const nodeDef = machine.nodes[node]; + const keys = Object.keys(nodeDef.statics); + // The fact that `key` is unused is likely a bug, but no one has investigated it yet. + // TODO: Investigate it. + // eslint-disable-next-line @typescript-eslint/no-unused-vars + for (const key of Object.keys(nodeDef.statics)) { + const segment = keys[0]; + for (const { to, reducer } of nodeDef.statics[segment]) { + if (reducer !== `pushPath`) + continue; + if (!skipFirst) + suggestion.push(segment); + nextNodes.push(to); + } + } + } + skipFirst = false; + } + const json = JSON.stringify(suggestion); + if (suggestionsJson.has(json)) + return; + suggestions.push(suggestion); + suggestionsJson.add(json); + }; + for (const { node, state } of branches) { + if (state.remainder !== null) { + traverseSuggestion([state.remainder], node); + continue; + } + const nodeDef = machine.nodes[node]; + const isFinished = checkIfNodeIsFinished(nodeDef, state); + for (const [candidate, transitions] of Object.entries(nodeDef.statics)) + if ((isFinished && candidate !== END_OF_INPUT) || (!candidate.startsWith(`-`) && transitions.some(({ reducer }) => reducer === `pushPath`))) + traverseSuggestion([...prefix, candidate], node); + if (!isFinished) + continue; + for (const [test, { to }] of nodeDef.dynamics) { + if (to === NODE_ERRORED) + continue; + const tokens = suggest(test, state); + if (tokens === null) + continue; + for (const token of tokens) { + traverseSuggestion([...prefix, token], node); + } + } + } + return [...suggestions].sort(); +} +function runMachine(machine, input) { + const branches = runMachineInternal(machine, [...input, END_OF_INPUT]); + return selectBestState(input, branches.map(({ state }) => { + return state; + })); +} +function trimSmallerBranches(branches) { + let maxPathSize = 0; + for (const { state } of branches) + if (state.path.length > maxPathSize) + maxPathSize = state.path.length; + return branches.filter(({ state }) => { + return state.path.length === maxPathSize; + }); +} +function selectBestState(input, states) { + const terminalStates = states.filter(state => { + return state.selectedIndex !== null; + }); + if (terminalStates.length === 0) + throw new Error(); + const requiredOptionsSetStates = terminalStates.filter(state => state.selectedIndex === HELP_COMMAND_INDEX || state.requiredOptions.every(names => names.some(name => state.options.find(opt => opt.name === name)))); + if (requiredOptionsSetStates.length === 0) { + throw new UnknownSyntaxError(input, terminalStates.map(state => ({ + usage: state.candidateUsage, + reason: null, + }))); + } + let maxPathSize = 0; + for (const state of requiredOptionsSetStates) + if (state.path.length > maxPathSize) + maxPathSize = state.path.length; + const bestPathBranches = requiredOptionsSetStates.filter(state => { + return state.path.length === maxPathSize; + }); + const getPositionalCount = (state) => state.positionals.filter(({ extra }) => { + return !extra; + }).length + state.options.length; + const statesWithPositionalCount = bestPathBranches.map(state => { + return { state, positionalCount: getPositionalCount(state) }; + }); + let maxPositionalCount = 0; + for (const { positionalCount } of statesWithPositionalCount) + if (positionalCount > maxPositionalCount) + maxPositionalCount = positionalCount; + const bestPositionalStates = statesWithPositionalCount.filter(({ positionalCount }) => { + return positionalCount === maxPositionalCount; + }).map(({ state }) => { + return state; + }); + const fixedStates = aggregateHelpStates(bestPositionalStates); + if (fixedStates.length > 1) + throw new AmbiguousSyntaxError(input, fixedStates.map(state => state.candidateUsage)); + return fixedStates[0]; +} +function aggregateHelpStates(states) { + const notHelps = []; + const helps = []; + for (const state of states) { + if (state.selectedIndex === HELP_COMMAND_INDEX) { + helps.push(state); + } + else { + notHelps.push(state); + } + } + if (helps.length > 0) { + notHelps.push({ + ...basicHelpState, + path: findCommonPrefix(...helps.map(state => state.path)), + options: helps.reduce((options, state) => options.concat(state.options), []), + }); + } + return notHelps; +} +function findCommonPrefix(firstPath, secondPath, ...rest) { + if (secondPath === undefined) + return Array.from(firstPath); + return findCommonPrefix(firstPath.filter((segment, i) => segment === secondPath[i]), ...rest); +} +function makeNode() { + return { + dynamics: [], + shortcuts: [], + statics: {}, + }; +} +function isTerminalNode(node) { + return node === NODE_SUCCESS || node === NODE_ERRORED; +} +function cloneTransition(input, offset = 0) { + return { + to: !isTerminalNode(input.to) ? input.to > 2 ? input.to + offset - 2 : input.to + offset : input.to, + reducer: input.reducer, + }; +} +function cloneNode(input, offset = 0) { + const output = makeNode(); + for (const [test, transition] of input.dynamics) + output.dynamics.push([test, cloneTransition(transition, offset)]); + for (const transition of input.shortcuts) + output.shortcuts.push(cloneTransition(transition, offset)); + for (const [segment, transitions] of Object.entries(input.statics)) + output.statics[segment] = transitions.map(transition => cloneTransition(transition, offset)); + return output; +} +function registerDynamic(machine, from, test, to, reducer) { + machine.nodes[from].dynamics.push([ + test, + { to, reducer: reducer }, + ]); +} +function registerShortcut(machine, from, to, reducer) { + machine.nodes[from].shortcuts.push({ to, reducer: reducer }); +} +function registerStatic(machine, from, test, to, reducer) { + const store = !Object.prototype.hasOwnProperty.call(machine.nodes[from].statics, test) + ? machine.nodes[from].statics[test] = [] + : machine.nodes[from].statics[test]; + store.push({ to, reducer: reducer }); +} +function execute(store, callback, state, segment) { + // TypeScript's control flow can't properly narrow + // generic conditionals for some mysterious reason + if (Array.isArray(callback)) { + const [name, ...args] = callback; + return store[name](state, segment, ...args); + } + else { + return store[callback](state, segment); + } +} +function suggest(callback, state) { + const fn = Array.isArray(callback) + ? tests[callback[0]] + : tests[callback]; + // @ts-ignore + if (typeof fn.suggest === `undefined`) + return null; + const args = Array.isArray(callback) + ? callback.slice(1) + : []; + // @ts-ignore + return fn.suggest(state, ...args); +} +const tests = { + always: () => { + return true; + }, + isOptionLike: (state, segment) => { + return !state.ignoreOptions && (segment !== `-` && segment.startsWith(`-`)); + }, + isNotOptionLike: (state, segment) => { + return state.ignoreOptions || segment === `-` || !segment.startsWith(`-`); + }, + isOption: (state, segment, name, hidden) => { + return !state.ignoreOptions && segment === name; + }, + isBatchOption: (state, segment, names) => { + return !state.ignoreOptions && BATCH_REGEX.test(segment) && [...segment.slice(1)].every(name => names.includes(`-${name}`)); + }, + isBoundOption: (state, segment, names, options) => { + const optionParsing = segment.match(BINDING_REGEX); + return !state.ignoreOptions && !!optionParsing && OPTION_REGEX.test(optionParsing[1]) && names.includes(optionParsing[1]) + // Disallow bound options with no arguments (i.e. booleans) + && options.filter(opt => opt.names.includes(optionParsing[1])).every(opt => opt.allowBinding); + }, + isNegatedOption: (state, segment, name) => { + return !state.ignoreOptions && segment === `--no-${name.slice(2)}`; + }, + isHelp: (state, segment) => { + return !state.ignoreOptions && HELP_REGEX.test(segment); + }, + isUnsupportedOption: (state, segment, names) => { + return !state.ignoreOptions && segment.startsWith(`-`) && OPTION_REGEX.test(segment) && !names.includes(segment); + }, + isInvalidOption: (state, segment) => { + return !state.ignoreOptions && segment.startsWith(`-`) && !OPTION_REGEX.test(segment); + }, +}; +// @ts-ignore +tests.isOption.suggest = (state, name, hidden = true) => { + return !hidden ? [name] : null; +}; +const reducers = { + setCandidateState: (state, segment, candidateState) => { + return { ...state, ...candidateState }; + }, + setSelectedIndex: (state, segment, index) => { + return { ...state, selectedIndex: index }; + }, + pushBatch: (state, segment) => { + return { ...state, options: state.options.concat([...segment.slice(1)].map(name => ({ name: `-${name}`, value: true }))) }; + }, + pushBound: (state, segment) => { + const [, name, value] = segment.match(BINDING_REGEX); + return { ...state, options: state.options.concat({ name, value }) }; + }, + pushPath: (state, segment) => { + return { ...state, path: state.path.concat(segment) }; + }, + pushPositional: (state, segment) => { + return { ...state, positionals: state.positionals.concat({ value: segment, extra: false }) }; + }, + pushExtra: (state, segment) => { + return { ...state, positionals: state.positionals.concat({ value: segment, extra: true }) }; + }, + pushExtraNoLimits: (state, segment) => { + return { ...state, positionals: state.positionals.concat({ value: segment, extra: NoLimits }) }; + }, + pushTrue: (state, segment, name = segment) => { + return { ...state, options: state.options.concat({ name: segment, value: true }) }; + }, + pushFalse: (state, segment, name = segment) => { + return { ...state, options: state.options.concat({ name, value: false }) }; + }, + pushUndefined: (state, segment) => { + return { ...state, options: state.options.concat({ name: segment, value: undefined }) }; + }, + pushStringValue: (state, segment) => { + var _a; + const copy = { ...state, options: [...state.options] }; + const lastOption = state.options[state.options.length - 1]; + lastOption.value = ((_a = lastOption.value) !== null && _a !== void 0 ? _a : []).concat([segment]); + return copy; + }, + setStringValue: (state, segment) => { + const copy = { ...state, options: [...state.options] }; + const lastOption = state.options[state.options.length - 1]; + lastOption.value = segment; + return copy; + }, + inhibateOptions: (state) => { + return { ...state, ignoreOptions: true }; + }, + useHelp: (state, segment, command) => { + const [, /* name */ , index] = segment.match(HELP_REGEX); + if (typeof index !== `undefined`) { + return { ...state, options: [{ name: `-c`, value: String(command) }, { name: `-i`, value: index }] }; + } + else { + return { ...state, options: [{ name: `-c`, value: String(command) }] }; + } + }, + setError: (state, segment, errorMessage) => { + if (segment === END_OF_INPUT) { + return { ...state, errorMessage: `${errorMessage}.` }; + } + else { + return { ...state, errorMessage: `${errorMessage} ("${segment}").` }; + } + }, + setOptionArityError: (state, segment) => { + const lastOption = state.options[state.options.length - 1]; + return { ...state, errorMessage: `Not enough arguments to option ${lastOption.name}.` }; + }, +}; +// ------------------------------------------------------------------------ +const NoLimits = Symbol(); +class CommandBuilder { + constructor(cliIndex, cliOpts) { + this.allOptionNames = []; + this.arity = { leading: [], trailing: [], extra: [], proxy: false }; + this.options = []; + this.paths = []; + this.cliIndex = cliIndex; + this.cliOpts = cliOpts; + } + addPath(path) { + this.paths.push(path); + } + setArity({ leading = this.arity.leading, trailing = this.arity.trailing, extra = this.arity.extra, proxy = this.arity.proxy }) { + Object.assign(this.arity, { leading, trailing, extra, proxy }); + } + addPositional({ name = `arg`, required = true } = {}) { + if (!required && this.arity.extra === NoLimits) + throw new Error(`Optional parameters cannot be declared when using .rest() or .proxy()`); + if (!required && this.arity.trailing.length > 0) + throw new Error(`Optional parameters cannot be declared after the required trailing positional arguments`); + if (!required && this.arity.extra !== NoLimits) { + this.arity.extra.push(name); + } + else if (this.arity.extra !== NoLimits && this.arity.extra.length === 0) { + this.arity.leading.push(name); + } + else { + this.arity.trailing.push(name); + } + } + addRest({ name = `arg`, required = 0 } = {}) { + if (this.arity.extra === NoLimits) + throw new Error(`Infinite lists cannot be declared multiple times in the same command`); + if (this.arity.trailing.length > 0) + throw new Error(`Infinite lists cannot be declared after the required trailing positional arguments`); + for (let t = 0; t < required; ++t) + this.addPositional({ name }); + this.arity.extra = NoLimits; + } + addProxy({ required = 0 } = {}) { + this.addRest({ required }); + this.arity.proxy = true; + } + addOption({ names, description, arity = 0, hidden = false, required = false, allowBinding = true }) { + if (!allowBinding && arity > 1) + throw new Error(`The arity cannot be higher than 1 when the option only supports the --arg=value syntax`); + if (!Number.isInteger(arity)) + throw new Error(`The arity must be an integer, got ${arity}`); + if (arity < 0) + throw new Error(`The arity must be positive, got ${arity}`); + this.allOptionNames.push(...names); + this.options.push({ names, description, arity, hidden, required, allowBinding }); + } + setContext(context) { + this.context = context; + } + usage({ detailed = true, inlineOptions = true } = {}) { + const segments = [this.cliOpts.binaryName]; + const detailedOptionList = []; + if (this.paths.length > 0) + segments.push(...this.paths[0]); + if (detailed) { + for (const { names, arity, hidden, description, required } of this.options) { + if (hidden) + continue; + const args = []; + for (let t = 0; t < arity; ++t) + args.push(` #${t}`); + const definition = `${names.join(`,`)}${args.join(``)}`; + if (!inlineOptions && description) { + detailedOptionList.push({ definition, description, required }); + } + else { + segments.push(required ? `<${definition}>` : `[${definition}]`); + } + } + segments.push(...this.arity.leading.map(name => `<${name}>`)); + if (this.arity.extra === NoLimits) + segments.push(`...`); + else + segments.push(...this.arity.extra.map(name => `[${name}]`)); + segments.push(...this.arity.trailing.map(name => `<${name}>`)); + } + const usage = segments.join(` `); + return { usage, options: detailedOptionList }; + } + compile() { + if (typeof this.context === `undefined`) + throw new Error(`Assertion failed: No context attached`); + const machine = makeStateMachine(); + let firstNode = NODE_INITIAL; + const candidateUsage = this.usage().usage; + const requiredOptions = this.options + .filter(opt => opt.required) + .map(opt => opt.names); + firstNode = injectNode(machine, makeNode()); + registerStatic(machine, NODE_INITIAL, START_OF_INPUT, firstNode, [`setCandidateState`, { candidateUsage, requiredOptions }]); + const positionalArgument = this.arity.proxy + ? `always` + : `isNotOptionLike`; + const paths = this.paths.length > 0 + ? this.paths + : [[]]; + for (const path of paths) { + let lastPathNode = firstNode; + // We allow options to be specified before the path. Note that we + // only do this when there is a path, otherwise there would be + // some redundancy with the options attached later. + if (path.length > 0) { + const optionPathNode = injectNode(machine, makeNode()); + registerShortcut(machine, lastPathNode, optionPathNode); + this.registerOptions(machine, optionPathNode); + lastPathNode = optionPathNode; + } + for (let t = 0; t < path.length; ++t) { + const nextPathNode = injectNode(machine, makeNode()); + registerStatic(machine, lastPathNode, path[t], nextPathNode, `pushPath`); + lastPathNode = nextPathNode; + } + if (this.arity.leading.length > 0 || !this.arity.proxy) { + const helpNode = injectNode(machine, makeNode()); + registerDynamic(machine, lastPathNode, `isHelp`, helpNode, [`useHelp`, this.cliIndex]); + registerDynamic(machine, helpNode, `always`, helpNode, `pushExtra`); + registerStatic(machine, helpNode, END_OF_INPUT, NODE_SUCCESS, [`setSelectedIndex`, HELP_COMMAND_INDEX]); + this.registerOptions(machine, lastPathNode); + } + if (this.arity.leading.length > 0) + registerStatic(machine, lastPathNode, END_OF_INPUT, NODE_ERRORED, [`setError`, `Not enough positional arguments`]); + let lastLeadingNode = lastPathNode; + for (let t = 0; t < this.arity.leading.length; ++t) { + const nextLeadingNode = injectNode(machine, makeNode()); + if (!this.arity.proxy || t + 1 !== this.arity.leading.length) + this.registerOptions(machine, nextLeadingNode); + if (this.arity.trailing.length > 0 || t + 1 !== this.arity.leading.length) + registerStatic(machine, nextLeadingNode, END_OF_INPUT, NODE_ERRORED, [`setError`, `Not enough positional arguments`]); + registerDynamic(machine, lastLeadingNode, `isNotOptionLike`, nextLeadingNode, `pushPositional`); + lastLeadingNode = nextLeadingNode; + } + let lastExtraNode = lastLeadingNode; + if (this.arity.extra === NoLimits || this.arity.extra.length > 0) { + const extraShortcutNode = injectNode(machine, makeNode()); + registerShortcut(machine, lastLeadingNode, extraShortcutNode); + if (this.arity.extra === NoLimits) { + const extraNode = injectNode(machine, makeNode()); + if (!this.arity.proxy) + this.registerOptions(machine, extraNode); + registerDynamic(machine, lastLeadingNode, positionalArgument, extraNode, `pushExtraNoLimits`); + registerDynamic(machine, extraNode, positionalArgument, extraNode, `pushExtraNoLimits`); + registerShortcut(machine, extraNode, extraShortcutNode); + } + else { + for (let t = 0; t < this.arity.extra.length; ++t) { + const nextExtraNode = injectNode(machine, makeNode()); + if (!this.arity.proxy || t > 0) + this.registerOptions(machine, nextExtraNode); + registerDynamic(machine, lastExtraNode, positionalArgument, nextExtraNode, `pushExtra`); + registerShortcut(machine, nextExtraNode, extraShortcutNode); + lastExtraNode = nextExtraNode; + } + } + lastExtraNode = extraShortcutNode; + } + if (this.arity.trailing.length > 0) + registerStatic(machine, lastExtraNode, END_OF_INPUT, NODE_ERRORED, [`setError`, `Not enough positional arguments`]); + let lastTrailingNode = lastExtraNode; + for (let t = 0; t < this.arity.trailing.length; ++t) { + const nextTrailingNode = injectNode(machine, makeNode()); + if (!this.arity.proxy) + this.registerOptions(machine, nextTrailingNode); + if (t + 1 < this.arity.trailing.length) + registerStatic(machine, nextTrailingNode, END_OF_INPUT, NODE_ERRORED, [`setError`, `Not enough positional arguments`]); + registerDynamic(machine, lastTrailingNode, `isNotOptionLike`, nextTrailingNode, `pushPositional`); + lastTrailingNode = nextTrailingNode; + } + registerDynamic(machine, lastTrailingNode, positionalArgument, NODE_ERRORED, [`setError`, `Extraneous positional argument`]); + registerStatic(machine, lastTrailingNode, END_OF_INPUT, NODE_SUCCESS, [`setSelectedIndex`, this.cliIndex]); + } + return { + machine, + context: this.context, + }; + } + registerOptions(machine, node) { + registerDynamic(machine, node, [`isOption`, `--`], node, `inhibateOptions`); + registerDynamic(machine, node, [`isBatchOption`, this.allOptionNames], node, `pushBatch`); + registerDynamic(machine, node, [`isBoundOption`, this.allOptionNames, this.options], node, `pushBound`); + registerDynamic(machine, node, [`isUnsupportedOption`, this.allOptionNames], NODE_ERRORED, [`setError`, `Unsupported option name`]); + registerDynamic(machine, node, [`isInvalidOption`], NODE_ERRORED, [`setError`, `Invalid option name`]); + for (const option of this.options) { + const longestName = option.names.reduce((longestName, name) => { + return name.length > longestName.length ? name : longestName; + }, ``); + if (option.arity === 0) { + for (const name of option.names) { + registerDynamic(machine, node, [`isOption`, name, option.hidden || name !== longestName], node, `pushTrue`); + if (name.startsWith(`--`) && !name.startsWith(`--no-`)) { + registerDynamic(machine, node, [`isNegatedOption`, name], node, [`pushFalse`, name]); + } + } + } + else { + // We inject a new node at the end of the state machine + let lastNode = injectNode(machine, makeNode()); + // We register transitions from the starting node to this new node + for (const name of option.names) + registerDynamic(machine, node, [`isOption`, name, option.hidden || name !== longestName], lastNode, `pushUndefined`); + // For each argument, we inject a new node at the end and we + // register a transition from the current node to this new node + for (let t = 0; t < option.arity; ++t) { + const nextNode = injectNode(machine, makeNode()); + // We can provide better errors when another option or END_OF_INPUT is encountered + registerStatic(machine, lastNode, END_OF_INPUT, NODE_ERRORED, `setOptionArityError`); + registerDynamic(machine, lastNode, `isOptionLike`, NODE_ERRORED, `setOptionArityError`); + // If the option has a single argument, no need to store it in an array + const action = option.arity === 1 + ? `setStringValue` + : `pushStringValue`; + registerDynamic(machine, lastNode, `isNotOptionLike`, nextNode, action); + lastNode = nextNode; + } + // In the end, we register a shortcut from + // the last node back to the starting node + registerShortcut(machine, lastNode, node); + } + } + } +} +class CliBuilder { + constructor({ binaryName = `...` } = {}) { + this.builders = []; + this.opts = { binaryName }; + } + static build(cbs, opts = {}) { + return new CliBuilder(opts).commands(cbs).compile(); + } + getBuilderByIndex(n) { + if (!(n >= 0 && n < this.builders.length)) + throw new Error(`Assertion failed: Out-of-bound command index (${n})`); + return this.builders[n]; + } + commands(cbs) { + for (const cb of cbs) + cb(this.command()); + return this; + } + command() { + const builder = new CommandBuilder(this.builders.length, this.opts); + this.builders.push(builder); + return builder; + } + compile() { + const machines = []; + const contexts = []; + for (const builder of this.builders) { + const { machine, context } = builder.compile(); + machines.push(machine); + contexts.push(context); + } + const machine = makeAnyOfMachine(machines); + simplifyMachine(machine); + return { + machine, + contexts, + process: (input) => { + return runMachine(machine, input); + }, + suggest: (input, partial) => { + return suggestMachine(machine, input, partial); + }, + }; + } +} + +function getDefaultColorDepth() { + if (tty$1 && `getColorDepth` in tty$1.WriteStream.prototype) + return tty$1.WriteStream.prototype.getColorDepth(); + if (process.env.FORCE_COLOR === `0`) + return 1; + if (process.env.FORCE_COLOR === `1`) + return 8; + if (typeof process.stdout !== `undefined` && process.stdout.isTTY) + return 8; + return 1; +} +let gContextStorage; +function getCaptureActivator(context) { + let contextStorage = gContextStorage; + if (typeof contextStorage === `undefined`) { + if (context.stdout === process.stdout && context.stderr === process.stderr) + return null; + const { AsyncLocalStorage: LazyAsyncLocalStorage } = require(`async_hooks`); + contextStorage = gContextStorage = new LazyAsyncLocalStorage(); + const origStdoutWrite = process.stdout._write; + process.stdout._write = function (chunk, encoding, cb) { + const context = contextStorage.getStore(); + if (typeof context === `undefined`) + return origStdoutWrite.call(this, chunk, encoding, cb); + return context.stdout.write(chunk, encoding, cb); + }; + const origStderrWrite = process.stderr._write; + process.stderr._write = function (chunk, encoding, cb) { + const context = contextStorage.getStore(); + if (typeof context === `undefined`) + return origStderrWrite.call(this, chunk, encoding, cb); + return context.stderr.write(chunk, encoding, cb); + }; + } + return (fn) => { + return contextStorage.run(context, fn); + }; +} + +let HelpCommand$1 = class HelpCommand extends Command { + constructor(contexts) { + super(); + this.contexts = contexts; + this.commands = []; + } + static from(state, contexts) { + const command = new HelpCommand(contexts); + command.path = state.path; + for (const opt of state.options) { + switch (opt.name) { + case `-c`: + { + command.commands.push(Number(opt.value)); + } + break; + case `-i`: + { + command.index = Number(opt.value); + } + break; + } + } + return command; + } + async execute() { + let commands = this.commands; + if (typeof this.index !== `undefined` && this.index >= 0 && this.index < commands.length) + commands = [commands[this.index]]; + if (commands.length === 0) { + this.context.stdout.write(this.cli.usage()); + } + else if (commands.length === 1) { + this.context.stdout.write(this.cli.usage(this.contexts[commands[0]].commandClass, { detailed: true })); + } + else if (commands.length > 1) { + this.context.stdout.write(`Multiple commands match your selection:\n`); + this.context.stdout.write(`\n`); + let index = 0; + for (const command of this.commands) + this.context.stdout.write(this.cli.usage(this.contexts[command].commandClass, { prefix: `${index++}. `.padStart(5) })); + this.context.stdout.write(`\n`); + this.context.stdout.write(`Run again with -h= to see the longer details of any of those commands.\n`); + } + } +}; + +const errorCommandSymbol = Symbol(`clipanion/errorCommand`); +/** + * @template Context The context shared by all commands. Contexts are a set of values, defined when calling the `run`/`runExit` functions from the CLI instance, that will be made available to the commands via `this.context`. + */ +class Cli { + constructor({ binaryLabel, binaryName: binaryNameOpt = `...`, binaryVersion, enableCapture = false, enableColors } = {}) { + this.registrations = new Map(); + this.builder = new CliBuilder({ binaryName: binaryNameOpt }); + this.binaryLabel = binaryLabel; + this.binaryName = binaryNameOpt; + this.binaryVersion = binaryVersion; + this.enableCapture = enableCapture; + this.enableColors = enableColors; + } + /** + * Creates a new Cli and registers all commands passed as parameters. + * + * @param commandClasses The Commands to register + * @returns The created `Cli` instance + */ + static from(commandClasses, options = {}) { + const cli = new Cli(options); + const resolvedCommandClasses = Array.isArray(commandClasses) + ? commandClasses + : [commandClasses]; + for (const commandClass of resolvedCommandClasses) + cli.register(commandClass); + return cli; + } + /** + * Registers a command inside the CLI. + */ + register(commandClass) { + var _a; + const specs = new Map(); + const command = new commandClass(); + for (const key in command) { + const value = command[key]; + if (typeof value === `object` && value !== null && value[Command.isOption]) { + specs.set(key, value); + } + } + const builder = this.builder.command(); + const index = builder.cliIndex; + const paths = (_a = commandClass.paths) !== null && _a !== void 0 ? _a : command.paths; + if (typeof paths !== `undefined`) + for (const path of paths) + builder.addPath(path); + this.registrations.set(commandClass, { specs, builder, index }); + for (const [key, { definition }] of specs.entries()) + definition(builder, key); + builder.setContext({ + commandClass, + }); + } + process(input, userContext) { + const { contexts, process } = this.builder.compile(); + const state = process(input); + const context = { + ...Cli.defaultContext, + ...userContext, + }; + switch (state.selectedIndex) { + case HELP_COMMAND_INDEX: + { + const command = HelpCommand$1.from(state, contexts); + command.context = context; + return command; + } + default: + { + const { commandClass } = contexts[state.selectedIndex]; + const record = this.registrations.get(commandClass); + if (typeof record === `undefined`) + throw new Error(`Assertion failed: Expected the command class to have been registered.`); + const command = new commandClass(); + command.context = context; + command.path = state.path; + try { + for (const [key, { transformer }] of record.specs.entries()) + command[key] = transformer(record.builder, key, state, context); + return command; + } + catch (error) { + error[errorCommandSymbol] = command; + throw error; + } + } + break; + } + } + async run(input, userContext) { + var _a, _b; + let command; + const context = { + ...Cli.defaultContext, + ...userContext, + }; + const colored = (_a = this.enableColors) !== null && _a !== void 0 ? _a : context.colorDepth > 1; + if (!Array.isArray(input)) { + command = input; + } + else { + try { + command = this.process(input, context); + } + catch (error) { + context.stdout.write(this.error(error, { colored })); + return 1; + } + } + if (command.help) { + context.stdout.write(this.usage(command, { colored, detailed: true })); + return 0; + } + command.context = context; + command.cli = { + binaryLabel: this.binaryLabel, + binaryName: this.binaryName, + binaryVersion: this.binaryVersion, + enableCapture: this.enableCapture, + enableColors: this.enableColors, + definitions: () => this.definitions(), + error: (error, opts) => this.error(error, opts), + format: colored => this.format(colored), + process: (input, subContext) => this.process(input, { ...context, ...subContext }), + run: (input, subContext) => this.run(input, { ...context, ...subContext }), + usage: (command, opts) => this.usage(command, opts), + }; + const activate = this.enableCapture + ? (_b = getCaptureActivator(context)) !== null && _b !== void 0 ? _b : noopCaptureActivator + : noopCaptureActivator; + let exitCode; + try { + exitCode = await activate(() => command.validateAndExecute().catch(error => command.catch(error).then(() => 0))); + } + catch (error) { + context.stdout.write(this.error(error, { colored, command })); + return 1; + } + return exitCode; + } + async runExit(input, context) { + process.exitCode = await this.run(input, context); + } + suggest(input, partial) { + const { suggest } = this.builder.compile(); + return suggest(input, partial); + } + definitions({ colored = false } = {}) { + const data = []; + for (const [commandClass, { index }] of this.registrations) { + if (typeof commandClass.usage === `undefined`) + continue; + const { usage: path } = this.getUsageByIndex(index, { detailed: false }); + const { usage, options } = this.getUsageByIndex(index, { detailed: true, inlineOptions: false }); + const category = typeof commandClass.usage.category !== `undefined` + ? formatMarkdownish(commandClass.usage.category, { format: this.format(colored), paragraphs: false }) + : undefined; + const description = typeof commandClass.usage.description !== `undefined` + ? formatMarkdownish(commandClass.usage.description, { format: this.format(colored), paragraphs: false }) + : undefined; + const details = typeof commandClass.usage.details !== `undefined` + ? formatMarkdownish(commandClass.usage.details, { format: this.format(colored), paragraphs: true }) + : undefined; + const examples = typeof commandClass.usage.examples !== `undefined` + ? commandClass.usage.examples.map(([label, cli]) => [formatMarkdownish(label, { format: this.format(colored), paragraphs: false }), cli.replace(/\$0/g, this.binaryName)]) + : undefined; + data.push({ path, usage, category, description, details, examples, options }); + } + return data; + } + usage(command = null, { colored, detailed = false, prefix = `$ ` } = {}) { + var _a; + // In case the default command is the only one, we can just show the command help rather than the general one + if (command === null) { + for (const commandClass of this.registrations.keys()) { + const paths = commandClass.paths; + const isDocumented = typeof commandClass.usage !== `undefined`; + const isExclusivelyDefault = !paths || paths.length === 0 || (paths.length === 1 && paths[0].length === 0); + const isDefault = isExclusivelyDefault || ((_a = paths === null || paths === void 0 ? void 0 : paths.some(path => path.length === 0)) !== null && _a !== void 0 ? _a : false); + if (isDefault) { + if (command) { + command = null; + break; + } + else { + command = commandClass; + } + } + else { + if (isDocumented) { + command = null; + continue; + } + } + } + if (command) { + detailed = true; + } + } + // @ts-ignore + const commandClass = command !== null && command instanceof Command + ? command.constructor + : command; + let result = ``; + if (!commandClass) { + const commandsByCategories = new Map(); + for (const [commandClass, { index }] of this.registrations.entries()) { + if (typeof commandClass.usage === `undefined`) + continue; + const category = typeof commandClass.usage.category !== `undefined` + ? formatMarkdownish(commandClass.usage.category, { format: this.format(colored), paragraphs: false }) + : null; + let categoryCommands = commandsByCategories.get(category); + if (typeof categoryCommands === `undefined`) + commandsByCategories.set(category, categoryCommands = []); + const { usage } = this.getUsageByIndex(index); + categoryCommands.push({ commandClass, usage }); + } + const categoryNames = Array.from(commandsByCategories.keys()).sort((a, b) => { + if (a === null) + return -1; + if (b === null) + return +1; + return a.localeCompare(b, `en`, { usage: `sort`, caseFirst: `upper` }); + }); + const hasLabel = typeof this.binaryLabel !== `undefined`; + const hasVersion = typeof this.binaryVersion !== `undefined`; + if (hasLabel || hasVersion) { + if (hasLabel && hasVersion) + result += `${this.format(colored).header(`${this.binaryLabel} - ${this.binaryVersion}`)}\n\n`; + else if (hasLabel) + result += `${this.format(colored).header(`${this.binaryLabel}`)}\n`; + else + result += `${this.format(colored).header(`${this.binaryVersion}`)}\n`; + result += ` ${this.format(colored).bold(prefix)}${this.binaryName} \n`; + } + else { + result += `${this.format(colored).bold(prefix)}${this.binaryName} \n`; + } + for (const categoryName of categoryNames) { + const commands = commandsByCategories.get(categoryName).slice().sort((a, b) => { + return a.usage.localeCompare(b.usage, `en`, { usage: `sort`, caseFirst: `upper` }); + }); + const header = categoryName !== null + ? categoryName.trim() + : `General commands`; + result += `\n`; + result += `${this.format(colored).header(`${header}`)}\n`; + for (const { commandClass, usage } of commands) { + const doc = commandClass.usage.description || `undocumented`; + result += `\n`; + result += ` ${this.format(colored).bold(usage)}\n`; + result += ` ${formatMarkdownish(doc, { format: this.format(colored), paragraphs: false })}`; + } + } + result += `\n`; + result += formatMarkdownish(`You can also print more details about any of these commands by calling them with the \`-h,--help\` flag right after the command name.`, { format: this.format(colored), paragraphs: true }); + } + else { + if (!detailed) { + const { usage } = this.getUsageByRegistration(commandClass); + result += `${this.format(colored).bold(prefix)}${usage}\n`; + } + else { + const { description = ``, details = ``, examples = [], } = commandClass.usage || {}; + if (description !== ``) { + result += formatMarkdownish(description, { format: this.format(colored), paragraphs: false }).replace(/^./, $0 => $0.toUpperCase()); + result += `\n`; + } + if (details !== `` || examples.length > 0) { + result += `${this.format(colored).header(`Usage`)}\n`; + result += `\n`; + } + const { usage, options } = this.getUsageByRegistration(commandClass, { inlineOptions: false }); + result += `${this.format(colored).bold(prefix)}${usage}\n`; + if (options.length > 0) { + result += `\n`; + result += `${this.format(colored).header(`Options`)}\n`; + const maxDefinitionLength = options.reduce((length, option) => { + return Math.max(length, option.definition.length); + }, 0); + result += `\n`; + for (const { definition, description } of options) { + result += ` ${this.format(colored).bold(definition.padEnd(maxDefinitionLength))} ${formatMarkdownish(description, { format: this.format(colored), paragraphs: false })}`; + } + } + if (details !== ``) { + result += `\n`; + result += `${this.format(colored).header(`Details`)}\n`; + result += `\n`; + result += formatMarkdownish(details, { format: this.format(colored), paragraphs: true }); + } + if (examples.length > 0) { + result += `\n`; + result += `${this.format(colored).header(`Examples`)}\n`; + for (const [description, example] of examples) { + result += `\n`; + result += formatMarkdownish(description, { format: this.format(colored), paragraphs: false }); + result += `${example + .replace(/^/m, ` ${this.format(colored).bold(prefix)}`) + .replace(/\$0/g, this.binaryName)}\n`; + } + } + } + } + return result; + } + error(error, _a) { + var _b; + var { colored, command = (_b = error[errorCommandSymbol]) !== null && _b !== void 0 ? _b : null } = _a === void 0 ? {} : _a; + if (!error || typeof error !== `object` || !(`stack` in error)) + error = new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(error)})`); + let result = ``; + let name = error.name.replace(/([a-z])([A-Z])/g, `$1 $2`); + if (name === `Error`) + name = `Internal Error`; + result += `${this.format(colored).error(name)}: ${error.message}\n`; + const meta = error.clipanion; + if (typeof meta !== `undefined`) { + if (meta.type === `usage`) { + result += `\n`; + result += this.usage(command); + } + } + else { + if (error.stack) { + result += `${error.stack.replace(/^.*\n/, ``)}\n`; + } + } + return result; + } + format(colored) { + var _a; + return ((_a = colored !== null && colored !== void 0 ? colored : this.enableColors) !== null && _a !== void 0 ? _a : Cli.defaultContext.colorDepth > 1) ? richFormat : textFormat; + } + getUsageByRegistration(klass, opts) { + const record = this.registrations.get(klass); + if (typeof record === `undefined`) + throw new Error(`Assertion failed: Unregistered command`); + return this.getUsageByIndex(record.index, opts); + } + getUsageByIndex(n, opts) { + return this.builder.getBuilderByIndex(n).usage(opts); + } +} +/** + * The default context of the CLI. + * + * Contains the stdio of the current `process`. + */ +Cli.defaultContext = { + env: process.env, + stdin: process.stdin, + stdout: process.stdout, + stderr: process.stderr, + colorDepth: getDefaultColorDepth(), +}; +function noopCaptureActivator(fn) { + return fn(); +} + +function Array$1(descriptor, initialValueBase, optsBase) { + const [initialValue, opts] = rerouteArguments(initialValueBase, optsBase !== null && optsBase !== void 0 ? optsBase : {}); + const { arity = 1 } = opts; + const optNames = descriptor.split(`,`); + const nameSet = new Set(optNames); + return makeCommandOption({ + definition(builder) { + builder.addOption({ + names: optNames, + arity, + hidden: opts === null || opts === void 0 ? void 0 : opts.hidden, + description: opts === null || opts === void 0 ? void 0 : opts.description, + required: opts.required, + }); + }, + transformer(builder, key, state) { + let usedName; + let currentValue = typeof initialValue !== `undefined` + ? [...initialValue] + : undefined; + for (const { name, value } of state.options) { + if (!nameSet.has(name)) + continue; + usedName = name; + currentValue = currentValue !== null && currentValue !== void 0 ? currentValue : []; + currentValue.push(value); + } + if (typeof currentValue !== `undefined`) { + return applyValidator(usedName !== null && usedName !== void 0 ? usedName : key, currentValue, opts.validator); + } + else { + return currentValue; + } + }, + }); +} + +function Boolean$1(descriptor, initialValueBase, optsBase) { + const [initialValue, opts] = rerouteArguments(initialValueBase, optsBase !== null && optsBase !== void 0 ? optsBase : {}); + const optNames = descriptor.split(`,`); + const nameSet = new Set(optNames); + return makeCommandOption({ + definition(builder) { + builder.addOption({ + names: optNames, + allowBinding: false, + arity: 0, + hidden: opts.hidden, + description: opts.description, + required: opts.required, + }); + }, + transformer(builer, key, state) { + let currentValue = initialValue; + for (const { name, value } of state.options) { + if (!nameSet.has(name)) + continue; + currentValue = value; + } + return currentValue; + }, + }); +} + +function StringOption(descriptor, initialValueBase, optsBase) { + const [initialValue, opts] = rerouteArguments(initialValueBase, optsBase !== null && optsBase !== void 0 ? optsBase : {}); + const { arity = 1 } = opts; + const optNames = descriptor.split(`,`); + const nameSet = new Set(optNames); + return makeCommandOption({ + definition(builder) { + builder.addOption({ + names: optNames, + arity: opts.tolerateBoolean ? 0 : arity, + hidden: opts.hidden, + description: opts.description, + required: opts.required, + }); + }, + transformer(builder, key, state, context) { + let usedName; + let currentValue = initialValue; + if (typeof opts.env !== `undefined` && context.env[opts.env]) { + usedName = opts.env; + currentValue = context.env[opts.env]; + } + for (const { name, value } of state.options) { + if (!nameSet.has(name)) + continue; + usedName = name; + currentValue = value; + } + if (typeof currentValue === `string`) { + return applyValidator(usedName !== null && usedName !== void 0 ? usedName : key, currentValue, opts.validator); + } + else { + return currentValue; + } + }, + }); +} +function StringPositional(opts = {}) { + const { required = true } = opts; + return makeCommandOption({ + definition(builder, key) { + var _a; + builder.addPositional({ + name: (_a = opts.name) !== null && _a !== void 0 ? _a : key, + required: opts.required, + }); + }, + transformer(builder, key, state) { + var _a; + for (let i = 0; i < state.positionals.length; ++i) { + // We skip NoLimits extras. We only care about + // required and optional finite positionals. + if (state.positionals[i].extra === NoLimits) + continue; + // We skip optional positionals when we only + // care about required positionals. + if (required && state.positionals[i].extra === true) + continue; + // We skip required positionals when we only + // care about optional positionals. + if (!required && state.positionals[i].extra === false) + continue; + // We remove the positional from the list + const [positional] = state.positionals.splice(i, 1); + return applyValidator((_a = opts.name) !== null && _a !== void 0 ? _a : key, positional.value, opts.validator); + } + return undefined; + }, + }); +} +// This function is badly typed, but it doesn't matter because the overloads provide the true public typings +function String$1(descriptor, ...args) { + if (typeof descriptor === `string`) { + return StringOption(descriptor, ...args); + } + else { + return StringPositional(descriptor); + } +} + +var version$1 = "2.18.4"; + +/****************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise, SuppressedError, Symbol */ + + +function __awaiter$1(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { + var e = new Error(message); + return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; +}; + +const { + env: env$1 = {}, + argv = [], + platform = "", +} = typeof process === "undefined" ? {} : process; + +const isDisabled = "NO_COLOR" in env$1 || argv.includes("--no-color"); +const isForced = "FORCE_COLOR" in env$1 || argv.includes("--color"); +const isWindows$1 = platform === "win32"; +const isDumbTerminal = env$1.TERM === "dumb"; + +const isCompatibleTerminal = + tty__namespace && tty__namespace.isatty && tty__namespace.isatty(1) && env$1.TERM && !isDumbTerminal; + +const isCI = + "CI" in env$1 && + ("GITHUB_ACTIONS" in env$1 || "GITLAB_CI" in env$1 || "CIRCLECI" in env$1); + +const isColorSupported = + !isDisabled && + (isForced || (isWindows$1 && !isDumbTerminal) || isCompatibleTerminal || isCI); + +const replaceClose = ( + index, + string, + close, + replace, + head = string.substring(0, index) + replace, + tail = string.substring(index + close.length), + next = tail.indexOf(close) +) => head + (next < 0 ? tail : replaceClose(next, tail, close, replace)); + +const clearBleed = (index, string, open, close, replace) => + index < 0 + ? open + string + close + : open + replaceClose(index, string, close, replace) + close; + +const filterEmpty = + (open, close, replace = open, at = open.length + 1) => + (string) => + string || !(string === "" || string === undefined) + ? clearBleed( + ("" + string).indexOf(close, at), + string, + open, + close, + replace + ) + : ""; + +const init = (open, close, replace) => + filterEmpty(`\x1b[${open}m`, `\x1b[${close}m`, replace); + +const colors$2 = { + reset: init(0, 0), + bold: init(1, 22, "\x1b[22m\x1b[1m"), + dim: init(2, 22, "\x1b[22m\x1b[2m"), + italic: init(3, 23), + underline: init(4, 24), + inverse: init(7, 27), + hidden: init(8, 28), + strikethrough: init(9, 29), + black: init(30, 39), + red: init(31, 39), + green: init(32, 39), + yellow: init(33, 39), + blue: init(34, 39), + magenta: init(35, 39), + cyan: init(36, 39), + white: init(37, 39), + gray: init(90, 39), + bgBlack: init(40, 49), + bgRed: init(41, 49), + bgGreen: init(42, 49), + bgYellow: init(43, 49), + bgBlue: init(44, 49), + bgMagenta: init(45, 49), + bgCyan: init(46, 49), + bgWhite: init(47, 49), + blackBright: init(90, 39), + redBright: init(91, 39), + greenBright: init(92, 39), + yellowBright: init(93, 39), + blueBright: init(94, 39), + magentaBright: init(95, 39), + cyanBright: init(96, 39), + whiteBright: init(97, 39), + bgBlackBright: init(100, 49), + bgRedBright: init(101, 49), + bgGreenBright: init(102, 49), + bgYellowBright: init(103, 49), + bgBlueBright: init(104, 49), + bgMagentaBright: init(105, 49), + bgCyanBright: init(106, 49), + bgWhiteBright: init(107, 49), +}; + +const createColors = ({ useColor = isColorSupported } = {}) => + useColor + ? colors$2 + : Object.keys(colors$2).reduce( + (colors, key) => ({ ...colors, [key]: String }), + {} + ); + +const { + reset, + bold, + dim, + italic, + underline, + inverse, + hidden, + strikethrough, + black, + red, + green, + yellow, + blue, + magenta, + cyan, + white, + gray, + bgBlack, + bgRed, + bgGreen, + bgYellow, + bgBlue, + bgMagenta, + bgCyan, + bgWhite, + blackBright, + redBright, + greenBright, + yellowBright, + blueBright, + magentaBright, + cyanBright, + whiteBright, + bgBlackBright, + bgRedBright, + bgGreenBright, + bgYellowBright, + bgBlueBright, + bgMagentaBright, + bgCyanBright, + bgWhiteBright, +} = createColors(); + +var dist = {}; + +var builder = {}; + +var apiBuilder = {}; + +var async$1 = {}; + +var walker = {}; + +var utils$1 = {}; + +Object.defineProperty(utils$1, "__esModule", { value: true }); +utils$1.convertSlashes = utils$1.cleanPath = void 0; +const path_1$2 = path$1; +function cleanPath(path) { + let normalized = (0, path_1$2.normalize)(path); + // we have to remove the last path separator + // to account for / root path + if (normalized.length > 1 && normalized[normalized.length - 1] === path_1$2.sep) + normalized = normalized.substring(0, normalized.length - 1); + return normalized; +} +utils$1.cleanPath = cleanPath; +const SLASHES_REGEX = /[\\/]/g; +function convertSlashes(path, separator) { + return path.replace(SLASHES_REGEX, separator); +} +utils$1.convertSlashes = convertSlashes; + +var joinPath$2 = {}; + +Object.defineProperty(joinPath$2, "__esModule", { value: true }); +joinPath$2.build = joinPath$2.joinDirectoryPath = void 0; +function joinPathWithBasePath(filename, directoryPath) { + return directoryPath + filename; +} +function joinPathWithRelativePath(root) { + return function (filename, directoryPath) { + return directoryPath.substring(root.length) + filename; + }; +} +function joinPath$1(filename) { + return filename; +} +function joinDirectoryPath(filename, directoryPath, separator) { + return directoryPath + filename + separator; +} +joinPath$2.joinDirectoryPath = joinDirectoryPath; +function build$7(root, options) { + const { relativePaths, includeBasePath } = options; + return relativePaths && root + ? joinPathWithRelativePath(root) + : includeBasePath + ? joinPathWithBasePath + : joinPath$1; +} +joinPath$2.build = build$7; + +var pushDirectory$2 = {}; + +Object.defineProperty(pushDirectory$2, "__esModule", { value: true }); +pushDirectory$2.build = void 0; +const pushDirectory$1 = (directoryPath, paths) => { + paths.push(directoryPath || "."); +}; +const pushDirectoryFilter = (directoryPath, paths, filters) => { + if (filters.every((filter) => filter(directoryPath, true))) { + paths.push(directoryPath); + } +}; +const empty$3 = () => { }; +function build$6(options) { + const { includeDirs, filters } = options; + if (!includeDirs) + return empty$3; + return filters && filters.length ? pushDirectoryFilter : pushDirectory$1; +} +pushDirectory$2.build = build$6; + +var pushFile$2 = {}; + +Object.defineProperty(pushFile$2, "__esModule", { value: true }); +pushFile$2.build = void 0; +const pushFileFilterAndCount = (filename, _paths, counts, filters) => { + if (filters.every((filter) => filter(filename, false))) + counts.files++; +}; +const pushFileFilter = (filename, paths, _counts, filters) => { + if (filters.every((filter) => filter(filename, false))) + paths.push(filename); +}; +const pushFileCount = (_filename, _paths, counts, _filters) => { + counts.files++; +}; +const pushFile$1 = (filename, paths) => { + paths.push(filename); +}; +const empty$2 = () => { }; +function build$5(options) { + const { excludeFiles, filters, onlyCounts } = options; + if (excludeFiles) + return empty$2; + if (filters && filters.length) { + return onlyCounts ? pushFileFilterAndCount : pushFileFilter; + } + else if (onlyCounts) { + return pushFileCount; + } + else { + return pushFile$1; + } +} +pushFile$2.build = build$5; + +var getArray$2 = {}; + +Object.defineProperty(getArray$2, "__esModule", { value: true }); +getArray$2.build = void 0; +const getArray$1 = (paths) => { + return paths; +}; +const getArrayGroup = () => { + return [""].slice(0, 0); +}; +function build$4(options) { + return options.group ? getArrayGroup : getArray$1; +} +getArray$2.build = build$4; + +var groupFiles$2 = {}; + +Object.defineProperty(groupFiles$2, "__esModule", { value: true }); +groupFiles$2.build = void 0; +const groupFiles$1 = (groups, directory, files) => { + groups.push({ directory, files, dir: directory }); +}; +const empty$1 = () => { }; +function build$3(options) { + return options.group ? groupFiles$1 : empty$1; +} +groupFiles$2.build = build$3; + +var resolveSymlink$1 = {}; + +var __importDefault$1 = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(resolveSymlink$1, "__esModule", { value: true }); +resolveSymlink$1.build = void 0; +const fs_1$2 = __importDefault$1(require$$0$2); +const resolveSymlinksAsync = function (path, state, callback) { + const { queue, options: { suppressErrors }, } = state; + queue.enqueue(); + fs_1$2.default.realpath(path, (error, resolvedPath) => { + if (error) { + queue.dequeue(suppressErrors ? null : error, state); + return; + } + fs_1$2.default.lstat(resolvedPath, (_error, stat) => { + callback(stat, resolvedPath); + queue.dequeue(null, state); + }); + }); +}; +const resolveSymlinksSync = function (path, state, callback) { + try { + const resolvedPath = fs_1$2.default.realpathSync(path); + const stat = fs_1$2.default.lstatSync(resolvedPath); + callback(stat, resolvedPath); + } + catch (e) { + if (!state.options.suppressErrors) + throw e; + } +}; +function build$2(options, isSynchronous) { + if (!options.resolveSymlinks) + return null; + return isSynchronous ? resolveSymlinksSync : resolveSymlinksAsync; +} +resolveSymlink$1.build = build$2; + +var invokeCallback$1 = {}; + +Object.defineProperty(invokeCallback$1, "__esModule", { value: true }); +invokeCallback$1.build = void 0; +const onlyCountsSync = (state) => { + return state.counts; +}; +const groupsSync = (state) => { + return state.groups; +}; +const defaultSync = (state) => { + return state.paths; +}; +const limitFilesSync = (state) => { + return state.paths.slice(0, state.options.maxFiles); +}; +const onlyCountsAsync = (state, error, callback) => { + report(error, callback, state.counts, state.options.suppressErrors); + return null; +}; +const defaultAsync = (state, error, callback) => { + report(error, callback, state.paths, state.options.suppressErrors); + return null; +}; +const limitFilesAsync = (state, error, callback) => { + report(error, callback, state.paths.slice(0, state.options.maxFiles), state.options.suppressErrors); + return null; +}; +const groupsAsync = (state, error, callback) => { + report(error, callback, state.groups, state.options.suppressErrors); + return null; +}; +function report(error, callback, output, suppressErrors) { + if (error && !suppressErrors) + callback(error, output); + else + callback(null, output); +} +function build$1(options, isSynchronous) { + const { onlyCounts, group, maxFiles } = options; + if (onlyCounts) + return isSynchronous + ? onlyCountsSync + : onlyCountsAsync; + else if (group) + return isSynchronous + ? groupsSync + : groupsAsync; + else if (maxFiles) + return isSynchronous + ? limitFilesSync + : limitFilesAsync; + else + return isSynchronous + ? defaultSync + : defaultAsync; +} +invokeCallback$1.build = build$1; + +var walkDirectory$1 = {}; + +var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(walkDirectory$1, "__esModule", { value: true }); +walkDirectory$1.build = void 0; +const fs_1$1 = __importDefault(require$$0$2); +const readdirOpts = { withFileTypes: true }; +const walkAsync = (state, directoryPath, currentDepth, callback) => { + state.queue.enqueue(); + if (currentDepth < 0) { + state.queue.dequeue(null, state); + return; + } + state.counts.directories++; + // Perf: Node >= 10 introduced withFileTypes that helps us + // skip an extra fs.stat call. + fs_1$1.default.readdir(directoryPath || ".", readdirOpts, function process(error, entries = []) { + callback(entries, directoryPath, currentDepth); + state.queue.dequeue(state.options.suppressErrors ? null : error, state); + }); +}; +const walkSync = (state, directoryPath, currentDepth, callback) => { + if (currentDepth < 0) { + return; + } + state.counts.directories++; + let entries = []; + try { + entries = fs_1$1.default.readdirSync(directoryPath || ".", readdirOpts); + } + catch (e) { + if (!state.options.suppressErrors) + throw e; + } + callback(entries, directoryPath, currentDepth); +}; +function build(isSynchronous) { + return isSynchronous ? walkSync : walkAsync; +} +walkDirectory$1.build = build; + +var queue$1 = {}; + +Object.defineProperty(queue$1, "__esModule", { value: true }); +queue$1.Queue = void 0; +/** + * This is a custom stateless queue to track concurrent async fs calls. + * It increments a counter whenever a call is queued and decrements it + * as soon as it completes. When the counter hits 0, it calls onQueueEmpty. + */ +class Queue { + onQueueEmpty; + count = 0; + constructor(onQueueEmpty) { + this.onQueueEmpty = onQueueEmpty; + } + enqueue() { + this.count++; + } + dequeue(error, output) { + if (--this.count === 0 || error) + this.onQueueEmpty(error, output); + } +} +queue$1.Queue = Queue; + +var counter = {}; + +Object.defineProperty(counter, "__esModule", { value: true }); +counter.Counter = void 0; +class Counter { + _files = 0; + _directories = 0; + set files(num) { + this._files = num; + } + get files() { + return this._files; + } + set directories(num) { + this._directories = num; + } + get directories() { + return this._directories; + } + /** + * @deprecated use `directories` instead + */ + /* c8 ignore next 3 */ + get dirs() { + return this._directories; + } +} +counter.Counter = Counter; + +var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (commonjsGlobal && commonjsGlobal.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(walker, "__esModule", { value: true }); +walker.Walker = void 0; +const path_1$1 = path$1; +const utils_1 = utils$1; +const joinPath = __importStar(joinPath$2); +const pushDirectory = __importStar(pushDirectory$2); +const pushFile = __importStar(pushFile$2); +const getArray = __importStar(getArray$2); +const groupFiles = __importStar(groupFiles$2); +const resolveSymlink = __importStar(resolveSymlink$1); +const invokeCallback = __importStar(invokeCallback$1); +const walkDirectory = __importStar(walkDirectory$1); +const queue_1 = queue$1; +const counter_1 = counter; +class Walker { + root; + isSynchronous; + state; + joinPath; + pushDirectory; + pushFile; + getArray; + groupFiles; + resolveSymlink; + walkDirectory; + callbackInvoker; + constructor(root, options, callback) { + this.isSynchronous = !callback; + this.callbackInvoker = invokeCallback.build(options, this.isSynchronous); + this.state = { + // Perf: we explicitly tell the compiler to optimize for String arrays + paths: [""].slice(0, 0), + groups: [], + counts: new counter_1.Counter(), + options, + queue: new queue_1.Queue((error, state) => this.callbackInvoker(state, error, callback)), + }; + this.root = this.normalizePath(root); + /* + * Perf: We conditionally change functions according to options. This gives a slight + * performance boost. Since these functions are so small, they are automatically inlined + * by the javascript engine so there's no function call overhead (in most cases). + */ + this.joinPath = joinPath.build(this.root, options); + this.pushDirectory = pushDirectory.build(options); + this.pushFile = pushFile.build(options); + this.getArray = getArray.build(options); + this.groupFiles = groupFiles.build(options); + this.resolveSymlink = resolveSymlink.build(options, this.isSynchronous); + this.walkDirectory = walkDirectory.build(this.isSynchronous); + } + start() { + this.walkDirectory(this.state, this.root, this.state.options.maxDepth, this.walk); + return this.isSynchronous ? this.callbackInvoker(this.state, null) : null; + } + normalizePath(path) { + const { resolvePaths, normalizePath, pathSeparator } = this.state.options; + const pathNeedsCleaning = (process.platform === "win32" && path.includes("/")) || + path.startsWith("."); + if (resolvePaths) + path = (0, path_1$1.resolve)(path); + if (normalizePath || pathNeedsCleaning) + path = (0, utils_1.cleanPath)(path); + if (path === ".") + return ""; + const needsSeperator = path[path.length - 1] !== pathSeparator; + return (0, utils_1.convertSlashes)(needsSeperator ? path + pathSeparator : path, pathSeparator); + } + walk = (entries, directoryPath, depth) => { + const { paths, options: { filters, resolveSymlinks, exclude, maxFiles, signal }, } = this.state; + if ((signal && signal.aborted) || (maxFiles && paths.length > maxFiles)) + return; + this.pushDirectory(directoryPath, paths, filters); + const files = this.getArray(this.state.paths); + for (let i = 0; i < entries.length; ++i) { + const entry = entries[i]; + if (entry.isFile() || (entry.isSymbolicLink() && !resolveSymlinks)) { + const filename = this.joinPath(entry.name, directoryPath); + this.pushFile(filename, files, this.state.counts, filters); + } + else if (entry.isDirectory()) { + let path = joinPath.joinDirectoryPath(entry.name, directoryPath, this.state.options.pathSeparator); + if (exclude && exclude(entry.name, path)) + continue; + this.walkDirectory(this.state, path, depth - 1, this.walk); + } + else if (entry.isSymbolicLink() && resolveSymlinks) { + let path = joinPath.joinDirectoryPath(entry.name, directoryPath, this.state.options.pathSeparator); + this.resolveSymlink(path, this.state, (stat, resolvedPath) => { + if (stat.isDirectory()) { + resolvedPath = this.normalizePath(resolvedPath); + if (exclude && exclude(entry.name, resolvedPath)) + return; + this.walkDirectory(this.state, resolvedPath, depth - 1, this.walk); + } + else { + this.pushFile(resolvedPath, files, this.state.counts, filters); + } + }); + } + } + this.groupFiles(this.state.groups, directoryPath, files); + }; +} +walker.Walker = Walker; + +Object.defineProperty(async$1, "__esModule", { value: true }); +async$1.callback = async$1.promise = void 0; +const walker_1$1 = walker; +function promise(root, options) { + return new Promise((resolve, reject) => { + callback(root, options, (err, output) => { + if (err) + return reject(err); + resolve(output); + }); + }); +} +async$1.promise = promise; +function callback(root, options, callback) { + let walker = new walker_1$1.Walker(root, options, callback); + walker.start(); +} +async$1.callback = callback; + +var sync$1 = {}; + +Object.defineProperty(sync$1, "__esModule", { value: true }); +sync$1.sync = void 0; +const walker_1 = walker; +function sync(root, options) { + const walker = new walker_1.Walker(root, options); + return walker.start(); +} +sync$1.sync = sync; + +Object.defineProperty(apiBuilder, "__esModule", { value: true }); +apiBuilder.APIBuilder = void 0; +const async_1$b = async$1; +const sync_1 = sync$1; +class APIBuilder { + root; + options; + constructor(root, options) { + this.root = root; + this.options = options; + } + withPromise() { + return (0, async_1$b.promise)(this.root, this.options); + } + withCallback(cb) { + (0, async_1$b.callback)(this.root, this.options, cb); + } + sync() { + return (0, sync_1.sync)(this.root, this.options); + } +} +apiBuilder.APIBuilder = APIBuilder; + +var utils = {}; + +var constants; +var hasRequiredConstants; + +function requireConstants () { + if (hasRequiredConstants) return constants; + hasRequiredConstants = 1; + + const path = path$1; + const WIN_SLASH = '\\\\/'; + const WIN_NO_SLASH = `[^${WIN_SLASH}]`; + + /** + * Posix glob regex + */ + + const DOT_LITERAL = '\\.'; + const PLUS_LITERAL = '\\+'; + const QMARK_LITERAL = '\\?'; + const SLASH_LITERAL = '\\/'; + const ONE_CHAR = '(?=.)'; + const QMARK = '[^/]'; + const END_ANCHOR = `(?:${SLASH_LITERAL}|$)`; + const START_ANCHOR = `(?:^|${SLASH_LITERAL})`; + const DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`; + const NO_DOT = `(?!${DOT_LITERAL})`; + const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`; + const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`; + const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`; + const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`; + const STAR = `${QMARK}*?`; + + const POSIX_CHARS = { + DOT_LITERAL, + PLUS_LITERAL, + QMARK_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + QMARK, + END_ANCHOR, + DOTS_SLASH, + NO_DOT, + NO_DOTS, + NO_DOT_SLASH, + NO_DOTS_SLASH, + QMARK_NO_DOT, + STAR, + START_ANCHOR + }; + + /** + * Windows glob regex + */ + + const WINDOWS_CHARS = { + ...POSIX_CHARS, + + SLASH_LITERAL: `[${WIN_SLASH}]`, + QMARK: WIN_NO_SLASH, + STAR: `${WIN_NO_SLASH}*?`, + DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`, + NO_DOT: `(?!${DOT_LITERAL})`, + NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`, + NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`, + NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`, + QMARK_NO_DOT: `[^.${WIN_SLASH}]`, + START_ANCHOR: `(?:^|[${WIN_SLASH}])`, + END_ANCHOR: `(?:[${WIN_SLASH}]|$)` + }; + + /** + * POSIX Bracket Regex + */ + + const POSIX_REGEX_SOURCE = { + alnum: 'a-zA-Z0-9', + alpha: 'a-zA-Z', + ascii: '\\x00-\\x7F', + blank: ' \\t', + cntrl: '\\x00-\\x1F\\x7F', + digit: '0-9', + graph: '\\x21-\\x7E', + lower: 'a-z', + print: '\\x20-\\x7E ', + punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~', + space: ' \\t\\r\\n\\v\\f', + upper: 'A-Z', + word: 'A-Za-z0-9_', + xdigit: 'A-Fa-f0-9' + }; + + constants = { + MAX_LENGTH: 1024 * 64, + POSIX_REGEX_SOURCE, + + // regular expressions + REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g, + REGEX_NON_SPECIAL_CHARS: /^[^@![\].,$*+?^{}()|\\/]+/, + REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/, + REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g, + REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g, + REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g, + + // Replace globs with equivalent patterns to reduce parsing time. + REPLACEMENTS: { + '***': '*', + '**/**': '**', + '**/**/**': '**' + }, + + // Digits + CHAR_0: 48, /* 0 */ + CHAR_9: 57, /* 9 */ + + // Alphabet chars. + CHAR_UPPERCASE_A: 65, /* A */ + CHAR_LOWERCASE_A: 97, /* a */ + CHAR_UPPERCASE_Z: 90, /* Z */ + CHAR_LOWERCASE_Z: 122, /* z */ + + CHAR_LEFT_PARENTHESES: 40, /* ( */ + CHAR_RIGHT_PARENTHESES: 41, /* ) */ + + CHAR_ASTERISK: 42, /* * */ + + // Non-alphabetic chars. + CHAR_AMPERSAND: 38, /* & */ + CHAR_AT: 64, /* @ */ + CHAR_BACKWARD_SLASH: 92, /* \ */ + CHAR_CARRIAGE_RETURN: 13, /* \r */ + CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */ + CHAR_COLON: 58, /* : */ + CHAR_COMMA: 44, /* , */ + CHAR_DOT: 46, /* . */ + CHAR_DOUBLE_QUOTE: 34, /* " */ + CHAR_EQUAL: 61, /* = */ + CHAR_EXCLAMATION_MARK: 33, /* ! */ + CHAR_FORM_FEED: 12, /* \f */ + CHAR_FORWARD_SLASH: 47, /* / */ + CHAR_GRAVE_ACCENT: 96, /* ` */ + CHAR_HASH: 35, /* # */ + CHAR_HYPHEN_MINUS: 45, /* - */ + CHAR_LEFT_ANGLE_BRACKET: 60, /* < */ + CHAR_LEFT_CURLY_BRACE: 123, /* { */ + CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */ + CHAR_LINE_FEED: 10, /* \n */ + CHAR_NO_BREAK_SPACE: 160, /* \u00A0 */ + CHAR_PERCENT: 37, /* % */ + CHAR_PLUS: 43, /* + */ + CHAR_QUESTION_MARK: 63, /* ? */ + CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */ + CHAR_RIGHT_CURLY_BRACE: 125, /* } */ + CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */ + CHAR_SEMICOLON: 59, /* ; */ + CHAR_SINGLE_QUOTE: 39, /* ' */ + CHAR_SPACE: 32, /* */ + CHAR_TAB: 9, /* \t */ + CHAR_UNDERSCORE: 95, /* _ */ + CHAR_VERTICAL_LINE: 124, /* | */ + CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \uFEFF */ + + SEP: path.sep, + + /** + * Create EXTGLOB_CHARS + */ + + extglobChars(chars) { + return { + '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` }, + '?': { type: 'qmark', open: '(?:', close: ')?' }, + '+': { type: 'plus', open: '(?:', close: ')+' }, + '*': { type: 'star', open: '(?:', close: ')*' }, + '@': { type: 'at', open: '(?:', close: ')' } + }; + }, + + /** + * Create GLOB_CHARS + */ + + globChars(win32) { + return win32 === true ? WINDOWS_CHARS : POSIX_CHARS; + } + }; + return constants; +} + +var hasRequiredUtils; + +function requireUtils () { + if (hasRequiredUtils) return utils; + hasRequiredUtils = 1; + (function (exports) { + + const path = path$1; + const win32 = process.platform === 'win32'; + const { + REGEX_BACKSLASH, + REGEX_REMOVE_BACKSLASH, + REGEX_SPECIAL_CHARS, + REGEX_SPECIAL_CHARS_GLOBAL + } = requireConstants(); + + exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val); + exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str); + exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str); + exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1'); + exports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/'); + + exports.removeBackslashes = str => { + return str.replace(REGEX_REMOVE_BACKSLASH, match => { + return match === '\\' ? '' : match; + }); + }; + + exports.supportsLookbehinds = () => { + const segs = process.version.slice(1).split('.').map(Number); + if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) { + return true; + } + return false; + }; + + exports.isWindows = options => { + if (options && typeof options.windows === 'boolean') { + return options.windows; + } + return win32 === true || path.sep === '\\'; + }; + + exports.escapeLast = (input, char, lastIdx) => { + const idx = input.lastIndexOf(char, lastIdx); + if (idx === -1) return input; + if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1); + return `${input.slice(0, idx)}\\${input.slice(idx)}`; + }; + + exports.removePrefix = (input, state = {}) => { + let output = input; + if (output.startsWith('./')) { + output = output.slice(2); + state.prefix = './'; + } + return output; + }; + + exports.wrapOutput = (input, state = {}, options = {}) => { + const prepend = options.contains ? '' : '^'; + const append = options.contains ? '' : '$'; + + let output = `${prepend}(?:${input})${append}`; + if (state.negated === true) { + output = `(?:^(?!${output}).*$)`; + } + return output; + }; + } (utils)); + return utils; +} + +var scan_1; +var hasRequiredScan; + +function requireScan () { + if (hasRequiredScan) return scan_1; + hasRequiredScan = 1; + + const utils = requireUtils(); + const { + CHAR_ASTERISK, /* * */ + CHAR_AT, /* @ */ + CHAR_BACKWARD_SLASH, /* \ */ + CHAR_COMMA, /* , */ + CHAR_DOT, /* . */ + CHAR_EXCLAMATION_MARK, /* ! */ + CHAR_FORWARD_SLASH, /* / */ + CHAR_LEFT_CURLY_BRACE, /* { */ + CHAR_LEFT_PARENTHESES, /* ( */ + CHAR_LEFT_SQUARE_BRACKET, /* [ */ + CHAR_PLUS, /* + */ + CHAR_QUESTION_MARK, /* ? */ + CHAR_RIGHT_CURLY_BRACE, /* } */ + CHAR_RIGHT_PARENTHESES, /* ) */ + CHAR_RIGHT_SQUARE_BRACKET /* ] */ + } = requireConstants(); + + const isPathSeparator = code => { + return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH; + }; + + const depth = token => { + if (token.isPrefix !== true) { + token.depth = token.isGlobstar ? Infinity : 1; + } + }; + + /** + * Quickly scans a glob pattern and returns an object with a handful of + * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists), + * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not + * with `!(`) and `negatedExtglob` (true if the path starts with `!(`). + * + * ```js + * const pm = require('picomatch'); + * console.log(pm.scan('foo/bar/*.js')); + * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' } + * ``` + * @param {String} `str` + * @param {Object} `options` + * @return {Object} Returns an object with tokens and regex source string. + * @api public + */ + + const scan = (input, options) => { + const opts = options || {}; + + const length = input.length - 1; + const scanToEnd = opts.parts === true || opts.scanToEnd === true; + const slashes = []; + const tokens = []; + const parts = []; + + let str = input; + let index = -1; + let start = 0; + let lastIndex = 0; + let isBrace = false; + let isBracket = false; + let isGlob = false; + let isExtglob = false; + let isGlobstar = false; + let braceEscaped = false; + let backslashes = false; + let negated = false; + let negatedExtglob = false; + let finished = false; + let braces = 0; + let prev; + let code; + let token = { value: '', depth: 0, isGlob: false }; + + const eos = () => index >= length; + const peek = () => str.charCodeAt(index + 1); + const advance = () => { + prev = code; + return str.charCodeAt(++index); + }; + + while (index < length) { + code = advance(); + let next; + + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + code = advance(); + + if (code === CHAR_LEFT_CURLY_BRACE) { + braceEscaped = true; + } + continue; + } + + if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) { + braces++; + + while (eos() !== true && (code = advance())) { + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + advance(); + continue; + } + + if (code === CHAR_LEFT_CURLY_BRACE) { + braces++; + continue; + } + + if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) { + isBrace = token.isBrace = true; + isGlob = token.isGlob = true; + finished = true; + + if (scanToEnd === true) { + continue; + } + + break; + } + + if (braceEscaped !== true && code === CHAR_COMMA) { + isBrace = token.isBrace = true; + isGlob = token.isGlob = true; + finished = true; + + if (scanToEnd === true) { + continue; + } + + break; + } + + if (code === CHAR_RIGHT_CURLY_BRACE) { + braces--; + + if (braces === 0) { + braceEscaped = false; + isBrace = token.isBrace = true; + finished = true; + break; + } + } + } + + if (scanToEnd === true) { + continue; + } + + break; + } + + if (code === CHAR_FORWARD_SLASH) { + slashes.push(index); + tokens.push(token); + token = { value: '', depth: 0, isGlob: false }; + + if (finished === true) continue; + if (prev === CHAR_DOT && index === (start + 1)) { + start += 2; + continue; + } + + lastIndex = index + 1; + continue; + } + + if (opts.noext !== true) { + const isExtglobChar = code === CHAR_PLUS + || code === CHAR_AT + || code === CHAR_ASTERISK + || code === CHAR_QUESTION_MARK + || code === CHAR_EXCLAMATION_MARK; + + if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) { + isGlob = token.isGlob = true; + isExtglob = token.isExtglob = true; + finished = true; + if (code === CHAR_EXCLAMATION_MARK && index === start) { + negatedExtglob = true; + } + + if (scanToEnd === true) { + while (eos() !== true && (code = advance())) { + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + code = advance(); + continue; + } + + if (code === CHAR_RIGHT_PARENTHESES) { + isGlob = token.isGlob = true; + finished = true; + break; + } + } + continue; + } + break; + } + } + + if (code === CHAR_ASTERISK) { + if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true; + isGlob = token.isGlob = true; + finished = true; + + if (scanToEnd === true) { + continue; + } + break; + } + + if (code === CHAR_QUESTION_MARK) { + isGlob = token.isGlob = true; + finished = true; + + if (scanToEnd === true) { + continue; + } + break; + } + + if (code === CHAR_LEFT_SQUARE_BRACKET) { + while (eos() !== true && (next = advance())) { + if (next === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + advance(); + continue; + } + + if (next === CHAR_RIGHT_SQUARE_BRACKET) { + isBracket = token.isBracket = true; + isGlob = token.isGlob = true; + finished = true; + break; + } + } + + if (scanToEnd === true) { + continue; + } + + break; + } + + if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) { + negated = token.negated = true; + start++; + continue; + } + + if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) { + isGlob = token.isGlob = true; + + if (scanToEnd === true) { + while (eos() !== true && (code = advance())) { + if (code === CHAR_LEFT_PARENTHESES) { + backslashes = token.backslashes = true; + code = advance(); + continue; + } + + if (code === CHAR_RIGHT_PARENTHESES) { + finished = true; + break; + } + } + continue; + } + break; + } + + if (isGlob === true) { + finished = true; + + if (scanToEnd === true) { + continue; + } + + break; + } + } + + if (opts.noext === true) { + isExtglob = false; + isGlob = false; + } + + let base = str; + let prefix = ''; + let glob = ''; + + if (start > 0) { + prefix = str.slice(0, start); + str = str.slice(start); + lastIndex -= start; + } + + if (base && isGlob === true && lastIndex > 0) { + base = str.slice(0, lastIndex); + glob = str.slice(lastIndex); + } else if (isGlob === true) { + base = ''; + glob = str; + } else { + base = str; + } + + if (base && base !== '' && base !== '/' && base !== str) { + if (isPathSeparator(base.charCodeAt(base.length - 1))) { + base = base.slice(0, -1); + } + } + + if (opts.unescape === true) { + if (glob) glob = utils.removeBackslashes(glob); + + if (base && backslashes === true) { + base = utils.removeBackslashes(base); + } + } + + const state = { + prefix, + input, + start, + base, + glob, + isBrace, + isBracket, + isGlob, + isExtglob, + isGlobstar, + negated, + negatedExtglob + }; + + if (opts.tokens === true) { + state.maxDepth = 0; + if (!isPathSeparator(code)) { + tokens.push(token); + } + state.tokens = tokens; + } + + if (opts.parts === true || opts.tokens === true) { + let prevIndex; + + for (let idx = 0; idx < slashes.length; idx++) { + const n = prevIndex ? prevIndex + 1 : start; + const i = slashes[idx]; + const value = input.slice(n, i); + if (opts.tokens) { + if (idx === 0 && start !== 0) { + tokens[idx].isPrefix = true; + tokens[idx].value = prefix; + } else { + tokens[idx].value = value; + } + depth(tokens[idx]); + state.maxDepth += tokens[idx].depth; + } + if (idx !== 0 || value !== '') { + parts.push(value); + } + prevIndex = i; + } + + if (prevIndex && prevIndex + 1 < input.length) { + const value = input.slice(prevIndex + 1); + parts.push(value); + + if (opts.tokens) { + tokens[tokens.length - 1].value = value; + depth(tokens[tokens.length - 1]); + state.maxDepth += tokens[tokens.length - 1].depth; + } + } + + state.slashes = slashes; + state.parts = parts; + } + + return state; + }; + + scan_1 = scan; + return scan_1; +} + +var parse_1; +var hasRequiredParse; + +function requireParse () { + if (hasRequiredParse) return parse_1; + hasRequiredParse = 1; + + const constants = requireConstants(); + const utils = requireUtils(); + + /** + * Constants + */ + + const { + MAX_LENGTH, + POSIX_REGEX_SOURCE, + REGEX_NON_SPECIAL_CHARS, + REGEX_SPECIAL_CHARS_BACKREF, + REPLACEMENTS + } = constants; + + /** + * Helpers + */ + + const expandRange = (args, options) => { + if (typeof options.expandRange === 'function') { + return options.expandRange(...args, options); + } + + args.sort(); + const value = `[${args.join('-')}]`; + + try { + /* eslint-disable-next-line no-new */ + new RegExp(value); + } catch (ex) { + return args.map(v => utils.escapeRegex(v)).join('..'); + } + + return value; + }; + + /** + * Create the message for a syntax error + */ + + const syntaxError = (type, char) => { + return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`; + }; + + /** + * Parse the given input string. + * @param {String} input + * @param {Object} options + * @return {Object} + */ + + const parse = (input, options) => { + if (typeof input !== 'string') { + throw new TypeError('Expected a string'); + } + + input = REPLACEMENTS[input] || input; + + const opts = { ...options }; + const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; + + let len = input.length; + if (len > max) { + throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`); + } + + const bos = { type: 'bos', value: '', output: opts.prepend || '' }; + const tokens = [bos]; + + const capture = opts.capture ? '' : '?:'; + const win32 = utils.isWindows(options); + + // create constants based on platform, for windows or posix + const PLATFORM_CHARS = constants.globChars(win32); + const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS); + + const { + DOT_LITERAL, + PLUS_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + DOTS_SLASH, + NO_DOT, + NO_DOT_SLASH, + NO_DOTS_SLASH, + QMARK, + QMARK_NO_DOT, + STAR, + START_ANCHOR + } = PLATFORM_CHARS; + + const globstar = opts => { + return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`; + }; + + const nodot = opts.dot ? '' : NO_DOT; + const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT; + let star = opts.bash === true ? globstar(opts) : STAR; + + if (opts.capture) { + star = `(${star})`; + } + + // minimatch options support + if (typeof opts.noext === 'boolean') { + opts.noextglob = opts.noext; + } + + const state = { + input, + index: -1, + start: 0, + dot: opts.dot === true, + consumed: '', + output: '', + prefix: '', + backtrack: false, + negated: false, + brackets: 0, + braces: 0, + parens: 0, + quotes: 0, + globstar: false, + tokens + }; + + input = utils.removePrefix(input, state); + len = input.length; + + const extglobs = []; + const braces = []; + const stack = []; + let prev = bos; + let value; + + /** + * Tokenizing helpers + */ + + const eos = () => state.index === len - 1; + const peek = state.peek = (n = 1) => input[state.index + n]; + const advance = state.advance = () => input[++state.index] || ''; + const remaining = () => input.slice(state.index + 1); + const consume = (value = '', num = 0) => { + state.consumed += value; + state.index += num; + }; + + const append = token => { + state.output += token.output != null ? token.output : token.value; + consume(token.value); + }; + + const negate = () => { + let count = 1; + + while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) { + advance(); + state.start++; + count++; + } + + if (count % 2 === 0) { + return false; + } + + state.negated = true; + state.start++; + return true; + }; + + const increment = type => { + state[type]++; + stack.push(type); + }; + + const decrement = type => { + state[type]--; + stack.pop(); + }; + + /** + * Push tokens onto the tokens array. This helper speeds up + * tokenizing by 1) helping us avoid backtracking as much as possible, + * and 2) helping us avoid creating extra tokens when consecutive + * characters are plain text. This improves performance and simplifies + * lookbehinds. + */ + + const push = tok => { + if (prev.type === 'globstar') { + const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace'); + const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren')); + + if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) { + state.output = state.output.slice(0, -prev.output.length); + prev.type = 'star'; + prev.value = '*'; + prev.output = star; + state.output += prev.output; + } + } + + if (extglobs.length && tok.type !== 'paren') { + extglobs[extglobs.length - 1].inner += tok.value; + } + + if (tok.value || tok.output) append(tok); + if (prev && prev.type === 'text' && tok.type === 'text') { + prev.value += tok.value; + prev.output = (prev.output || '') + tok.value; + return; + } + + tok.prev = prev; + tokens.push(tok); + prev = tok; + }; + + const extglobOpen = (type, value) => { + const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' }; + + token.prev = prev; + token.parens = state.parens; + token.output = state.output; + const output = (opts.capture ? '(' : '') + token.open; + + increment('parens'); + push({ type, value, output: state.output ? '' : ONE_CHAR }); + push({ type: 'paren', extglob: true, value: advance(), output }); + extglobs.push(token); + }; + + const extglobClose = token => { + let output = token.close + (opts.capture ? ')' : ''); + let rest; + + if (token.type === 'negate') { + let extglobStar = star; + + if (token.inner && token.inner.length > 1 && token.inner.includes('/')) { + extglobStar = globstar(opts); + } + + if (extglobStar !== star || eos() || /^\)+$/.test(remaining())) { + output = token.close = `)$))${extglobStar}`; + } + + if (token.inner.includes('*') && (rest = remaining()) && /^\.[^\\/.]+$/.test(rest)) { + // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis. + // In this case, we need to parse the string and use it in the output of the original pattern. + // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`. + // + // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`. + const expression = parse(rest, { ...options, fastpaths: false }).output; + + output = token.close = `)${expression})${extglobStar})`; + } + + if (token.prev.type === 'bos') { + state.negatedExtglob = true; + } + } + + push({ type: 'paren', extglob: true, value, output }); + decrement('parens'); + }; + + /** + * Fast paths + */ + + if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) { + let backslashes = false; + + let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => { + if (first === '\\') { + backslashes = true; + return m; + } + + if (first === '?') { + if (esc) { + return esc + first + (rest ? QMARK.repeat(rest.length) : ''); + } + if (index === 0) { + return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : ''); + } + return QMARK.repeat(chars.length); + } + + if (first === '.') { + return DOT_LITERAL.repeat(chars.length); + } + + if (first === '*') { + if (esc) { + return esc + first + (rest ? star : ''); + } + return star; + } + return esc ? m : `\\${m}`; + }); + + if (backslashes === true) { + if (opts.unescape === true) { + output = output.replace(/\\/g, ''); + } else { + output = output.replace(/\\+/g, m => { + return m.length % 2 === 0 ? '\\\\' : (m ? '\\' : ''); + }); + } + } + + if (output === input && opts.contains === true) { + state.output = input; + return state; + } + + state.output = utils.wrapOutput(output, state, options); + return state; + } + + /** + * Tokenize input until we reach end-of-string + */ + + while (!eos()) { + value = advance(); + + if (value === '\u0000') { + continue; + } + + /** + * Escaped characters + */ + + if (value === '\\') { + const next = peek(); + + if (next === '/' && opts.bash !== true) { + continue; + } + + if (next === '.' || next === ';') { + continue; + } + + if (!next) { + value += '\\'; + push({ type: 'text', value }); + continue; + } + + // collapse slashes to reduce potential for exploits + const match = /^\\+/.exec(remaining()); + let slashes = 0; + + if (match && match[0].length > 2) { + slashes = match[0].length; + state.index += slashes; + if (slashes % 2 !== 0) { + value += '\\'; + } + } + + if (opts.unescape === true) { + value = advance(); + } else { + value += advance(); + } + + if (state.brackets === 0) { + push({ type: 'text', value }); + continue; + } + } + + /** + * If we're inside a regex character class, continue + * until we reach the closing bracket. + */ + + if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) { + if (opts.posix !== false && value === ':') { + const inner = prev.value.slice(1); + if (inner.includes('[')) { + prev.posix = true; + + if (inner.includes(':')) { + const idx = prev.value.lastIndexOf('['); + const pre = prev.value.slice(0, idx); + const rest = prev.value.slice(idx + 2); + const posix = POSIX_REGEX_SOURCE[rest]; + if (posix) { + prev.value = pre + posix; + state.backtrack = true; + advance(); + + if (!bos.output && tokens.indexOf(prev) === 1) { + bos.output = ONE_CHAR; + } + continue; + } + } + } + } + + if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) { + value = `\\${value}`; + } + + if (value === ']' && (prev.value === '[' || prev.value === '[^')) { + value = `\\${value}`; + } + + if (opts.posix === true && value === '!' && prev.value === '[') { + value = '^'; + } + + prev.value += value; + append({ value }); + continue; + } + + /** + * If we're inside a quoted string, continue + * until we reach the closing double quote. + */ + + if (state.quotes === 1 && value !== '"') { + value = utils.escapeRegex(value); + prev.value += value; + append({ value }); + continue; + } + + /** + * Double quotes + */ + + if (value === '"') { + state.quotes = state.quotes === 1 ? 0 : 1; + if (opts.keepQuotes === true) { + push({ type: 'text', value }); + } + continue; + } + + /** + * Parentheses + */ + + if (value === '(') { + increment('parens'); + push({ type: 'paren', value }); + continue; + } + + if (value === ')') { + if (state.parens === 0 && opts.strictBrackets === true) { + throw new SyntaxError(syntaxError('opening', '(')); + } + + const extglob = extglobs[extglobs.length - 1]; + if (extglob && state.parens === extglob.parens + 1) { + extglobClose(extglobs.pop()); + continue; + } + + push({ type: 'paren', value, output: state.parens ? ')' : '\\)' }); + decrement('parens'); + continue; + } + + /** + * Square brackets + */ + + if (value === '[') { + if (opts.nobracket === true || !remaining().includes(']')) { + if (opts.nobracket !== true && opts.strictBrackets === true) { + throw new SyntaxError(syntaxError('closing', ']')); + } + + value = `\\${value}`; + } else { + increment('brackets'); + } + + push({ type: 'bracket', value }); + continue; + } + + if (value === ']') { + if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) { + push({ type: 'text', value, output: `\\${value}` }); + continue; + } + + if (state.brackets === 0) { + if (opts.strictBrackets === true) { + throw new SyntaxError(syntaxError('opening', '[')); + } + + push({ type: 'text', value, output: `\\${value}` }); + continue; + } + + decrement('brackets'); + + const prevValue = prev.value.slice(1); + if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) { + value = `/${value}`; + } + + prev.value += value; + append({ value }); + + // when literal brackets are explicitly disabled + // assume we should match with a regex character class + if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) { + continue; + } + + const escaped = utils.escapeRegex(prev.value); + state.output = state.output.slice(0, -prev.value.length); + + // when literal brackets are explicitly enabled + // assume we should escape the brackets to match literal characters + if (opts.literalBrackets === true) { + state.output += escaped; + prev.value = escaped; + continue; + } + + // when the user specifies nothing, try to match both + prev.value = `(${capture}${escaped}|${prev.value})`; + state.output += prev.value; + continue; + } + + /** + * Braces + */ + + if (value === '{' && opts.nobrace !== true) { + increment('braces'); + + const open = { + type: 'brace', + value, + output: '(', + outputIndex: state.output.length, + tokensIndex: state.tokens.length + }; + + braces.push(open); + push(open); + continue; + } + + if (value === '}') { + const brace = braces[braces.length - 1]; + + if (opts.nobrace === true || !brace) { + push({ type: 'text', value, output: value }); + continue; + } + + let output = ')'; + + if (brace.dots === true) { + const arr = tokens.slice(); + const range = []; + + for (let i = arr.length - 1; i >= 0; i--) { + tokens.pop(); + if (arr[i].type === 'brace') { + break; + } + if (arr[i].type !== 'dots') { + range.unshift(arr[i].value); + } + } + + output = expandRange(range, opts); + state.backtrack = true; + } + + if (brace.comma !== true && brace.dots !== true) { + const out = state.output.slice(0, brace.outputIndex); + const toks = state.tokens.slice(brace.tokensIndex); + brace.value = brace.output = '\\{'; + value = output = '\\}'; + state.output = out; + for (const t of toks) { + state.output += (t.output || t.value); + } + } + + push({ type: 'brace', value, output }); + decrement('braces'); + braces.pop(); + continue; + } + + /** + * Pipes + */ + + if (value === '|') { + if (extglobs.length > 0) { + extglobs[extglobs.length - 1].conditions++; + } + push({ type: 'text', value }); + continue; + } + + /** + * Commas + */ + + if (value === ',') { + let output = value; + + const brace = braces[braces.length - 1]; + if (brace && stack[stack.length - 1] === 'braces') { + brace.comma = true; + output = '|'; + } + + push({ type: 'comma', value, output }); + continue; + } + + /** + * Slashes + */ + + if (value === '/') { + // if the beginning of the glob is "./", advance the start + // to the current index, and don't add the "./" characters + // to the state. This greatly simplifies lookbehinds when + // checking for BOS characters like "!" and "." (not "./") + if (prev.type === 'dot' && state.index === state.start + 1) { + state.start = state.index + 1; + state.consumed = ''; + state.output = ''; + tokens.pop(); + prev = bos; // reset "prev" to the first token + continue; + } + + push({ type: 'slash', value, output: SLASH_LITERAL }); + continue; + } + + /** + * Dots + */ + + if (value === '.') { + if (state.braces > 0 && prev.type === 'dot') { + if (prev.value === '.') prev.output = DOT_LITERAL; + const brace = braces[braces.length - 1]; + prev.type = 'dots'; + prev.output += value; + prev.value += value; + brace.dots = true; + continue; + } + + if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') { + push({ type: 'text', value, output: DOT_LITERAL }); + continue; + } + + push({ type: 'dot', value, output: DOT_LITERAL }); + continue; + } + + /** + * Question marks + */ + + if (value === '?') { + const isGroup = prev && prev.value === '('; + if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { + extglobOpen('qmark', value); + continue; + } + + if (prev && prev.type === 'paren') { + const next = peek(); + let output = value; + + if (next === '<' && !utils.supportsLookbehinds()) { + throw new Error('Node.js v10 or higher is required for regex lookbehinds'); + } + + if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\w+>)/.test(remaining()))) { + output = `\\${value}`; + } + + push({ type: 'text', value, output }); + continue; + } + + if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) { + push({ type: 'qmark', value, output: QMARK_NO_DOT }); + continue; + } + + push({ type: 'qmark', value, output: QMARK }); + continue; + } + + /** + * Exclamation + */ + + if (value === '!') { + if (opts.noextglob !== true && peek() === '(') { + if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) { + extglobOpen('negate', value); + continue; + } + } + + if (opts.nonegate !== true && state.index === 0) { + negate(); + continue; + } + } + + /** + * Plus + */ + + if (value === '+') { + if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { + extglobOpen('plus', value); + continue; + } + + if ((prev && prev.value === '(') || opts.regex === false) { + push({ type: 'plus', value, output: PLUS_LITERAL }); + continue; + } + + if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) { + push({ type: 'plus', value }); + continue; + } + + push({ type: 'plus', value: PLUS_LITERAL }); + continue; + } + + /** + * Plain text + */ + + if (value === '@') { + if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { + push({ type: 'at', extglob: true, value, output: '' }); + continue; + } + + push({ type: 'text', value }); + continue; + } + + /** + * Plain text + */ + + if (value !== '*') { + if (value === '$' || value === '^') { + value = `\\${value}`; + } + + const match = REGEX_NON_SPECIAL_CHARS.exec(remaining()); + if (match) { + value += match[0]; + state.index += match[0].length; + } + + push({ type: 'text', value }); + continue; + } + + /** + * Stars + */ + + if (prev && (prev.type === 'globstar' || prev.star === true)) { + prev.type = 'star'; + prev.star = true; + prev.value += value; + prev.output = star; + state.backtrack = true; + state.globstar = true; + consume(value); + continue; + } + + let rest = remaining(); + if (opts.noextglob !== true && /^\([^?]/.test(rest)) { + extglobOpen('star', value); + continue; + } + + if (prev.type === 'star') { + if (opts.noglobstar === true) { + consume(value); + continue; + } + + const prior = prev.prev; + const before = prior.prev; + const isStart = prior.type === 'slash' || prior.type === 'bos'; + const afterStar = before && (before.type === 'star' || before.type === 'globstar'); + + if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) { + push({ type: 'star', value, output: '' }); + continue; + } + + const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace'); + const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren'); + if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) { + push({ type: 'star', value, output: '' }); + continue; + } + + // strip consecutive `/**/` + while (rest.slice(0, 3) === '/**') { + const after = input[state.index + 4]; + if (after && after !== '/') { + break; + } + rest = rest.slice(3); + consume('/**', 3); + } + + if (prior.type === 'bos' && eos()) { + prev.type = 'globstar'; + prev.value += value; + prev.output = globstar(opts); + state.output = prev.output; + state.globstar = true; + consume(value); + continue; + } + + if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) { + state.output = state.output.slice(0, -(prior.output + prev.output).length); + prior.output = `(?:${prior.output}`; + + prev.type = 'globstar'; + prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)'); + prev.value += value; + state.globstar = true; + state.output += prior.output + prev.output; + consume(value); + continue; + } + + if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') { + const end = rest[1] !== void 0 ? '|$' : ''; + + state.output = state.output.slice(0, -(prior.output + prev.output).length); + prior.output = `(?:${prior.output}`; + + prev.type = 'globstar'; + prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`; + prev.value += value; + + state.output += prior.output + prev.output; + state.globstar = true; + + consume(value + advance()); + + push({ type: 'slash', value: '/', output: '' }); + continue; + } + + if (prior.type === 'bos' && rest[0] === '/') { + prev.type = 'globstar'; + prev.value += value; + prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`; + state.output = prev.output; + state.globstar = true; + consume(value + advance()); + push({ type: 'slash', value: '/', output: '' }); + continue; + } + + // remove single star from output + state.output = state.output.slice(0, -prev.output.length); + + // reset previous token to globstar + prev.type = 'globstar'; + prev.output = globstar(opts); + prev.value += value; + + // reset output with globstar + state.output += prev.output; + state.globstar = true; + consume(value); + continue; + } + + const token = { type: 'star', value, output: star }; + + if (opts.bash === true) { + token.output = '.*?'; + if (prev.type === 'bos' || prev.type === 'slash') { + token.output = nodot + token.output; + } + push(token); + continue; + } + + if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) { + token.output = value; + push(token); + continue; + } + + if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') { + if (prev.type === 'dot') { + state.output += NO_DOT_SLASH; + prev.output += NO_DOT_SLASH; + + } else if (opts.dot === true) { + state.output += NO_DOTS_SLASH; + prev.output += NO_DOTS_SLASH; + + } else { + state.output += nodot; + prev.output += nodot; + } + + if (peek() !== '*') { + state.output += ONE_CHAR; + prev.output += ONE_CHAR; + } + } + + push(token); + } + + while (state.brackets > 0) { + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']')); + state.output = utils.escapeLast(state.output, '['); + decrement('brackets'); + } + + while (state.parens > 0) { + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')')); + state.output = utils.escapeLast(state.output, '('); + decrement('parens'); + } + + while (state.braces > 0) { + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}')); + state.output = utils.escapeLast(state.output, '{'); + decrement('braces'); + } + + if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) { + push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` }); + } + + // rebuild the output if we had to backtrack at any point + if (state.backtrack === true) { + state.output = ''; + + for (const token of state.tokens) { + state.output += token.output != null ? token.output : token.value; + + if (token.suffix) { + state.output += token.suffix; + } + } + } + + return state; + }; + + /** + * Fast paths for creating regular expressions for common glob patterns. + * This can significantly speed up processing and has very little downside + * impact when none of the fast paths match. + */ + + parse.fastpaths = (input, options) => { + const opts = { ...options }; + const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; + const len = input.length; + if (len > max) { + throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`); + } + + input = REPLACEMENTS[input] || input; + const win32 = utils.isWindows(options); + + // create constants based on platform, for windows or posix + const { + DOT_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + DOTS_SLASH, + NO_DOT, + NO_DOTS, + NO_DOTS_SLASH, + STAR, + START_ANCHOR + } = constants.globChars(win32); + + const nodot = opts.dot ? NO_DOTS : NO_DOT; + const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT; + const capture = opts.capture ? '' : '?:'; + const state = { negated: false, prefix: '' }; + let star = opts.bash === true ? '.*?' : STAR; + + if (opts.capture) { + star = `(${star})`; + } + + const globstar = opts => { + if (opts.noglobstar === true) return star; + return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`; + }; + + const create = str => { + switch (str) { + case '*': + return `${nodot}${ONE_CHAR}${star}`; + + case '.*': + return `${DOT_LITERAL}${ONE_CHAR}${star}`; + + case '*.*': + return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`; + + case '*/*': + return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`; + + case '**': + return nodot + globstar(opts); + + case '**/*': + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`; + + case '**/*.*': + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`; + + case '**/.*': + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`; + + default: { + const match = /^(.*?)\.(\w+)$/.exec(str); + if (!match) return; + + const source = create(match[1]); + if (!source) return; + + return source + DOT_LITERAL + match[2]; + } + } + }; + + const output = utils.removePrefix(input, state); + let source = create(output); + + if (source && opts.strictSlashes !== true) { + source += `${SLASH_LITERAL}?`; + } + + return source; + }; + + parse_1 = parse; + return parse_1; +} + +var picomatch_1; +var hasRequiredPicomatch$1; + +function requirePicomatch$1 () { + if (hasRequiredPicomatch$1) return picomatch_1; + hasRequiredPicomatch$1 = 1; + + const path = path$1; + const scan = requireScan(); + const parse = requireParse(); + const utils = requireUtils(); + const constants = requireConstants(); + const isObject = val => val && typeof val === 'object' && !Array.isArray(val); + + /** + * Creates a matcher function from one or more glob patterns. The + * returned function takes a string to match as its first argument, + * and returns true if the string is a match. The returned matcher + * function also takes a boolean as the second argument that, when true, + * returns an object with additional information. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch(glob[, options]); + * + * const isMatch = picomatch('*.!(*a)'); + * console.log(isMatch('a.a')); //=> false + * console.log(isMatch('a.b')); //=> true + * ``` + * @name picomatch + * @param {String|Array} `globs` One or more glob patterns. + * @param {Object=} `options` + * @return {Function=} Returns a matcher function. + * @api public + */ + + const picomatch = (glob, options, returnState = false) => { + if (Array.isArray(glob)) { + const fns = glob.map(input => picomatch(input, options, returnState)); + const arrayMatcher = str => { + for (const isMatch of fns) { + const state = isMatch(str); + if (state) return state; + } + return false; + }; + return arrayMatcher; + } + + const isState = isObject(glob) && glob.tokens && glob.input; + + if (glob === '' || (typeof glob !== 'string' && !isState)) { + throw new TypeError('Expected pattern to be a non-empty string'); + } + + const opts = options || {}; + const posix = utils.isWindows(options); + const regex = isState + ? picomatch.compileRe(glob, options) + : picomatch.makeRe(glob, options, false, true); + + const state = regex.state; + delete regex.state; + + let isIgnored = () => false; + if (opts.ignore) { + const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null }; + isIgnored = picomatch(opts.ignore, ignoreOpts, returnState); + } + + const matcher = (input, returnObject = false) => { + const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix }); + const result = { glob, state, regex, posix, input, output, match, isMatch }; + + if (typeof opts.onResult === 'function') { + opts.onResult(result); + } + + if (isMatch === false) { + result.isMatch = false; + return returnObject ? result : false; + } + + if (isIgnored(input)) { + if (typeof opts.onIgnore === 'function') { + opts.onIgnore(result); + } + result.isMatch = false; + return returnObject ? result : false; + } + + if (typeof opts.onMatch === 'function') { + opts.onMatch(result); + } + return returnObject ? result : true; + }; + + if (returnState) { + matcher.state = state; + } + + return matcher; + }; + + /** + * Test `input` with the given `regex`. This is used by the main + * `picomatch()` function to test the input string. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.test(input, regex[, options]); + * + * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/)); + * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' } + * ``` + * @param {String} `input` String to test. + * @param {RegExp} `regex` + * @return {Object} Returns an object with matching info. + * @api public + */ + + picomatch.test = (input, regex, options, { glob, posix } = {}) => { + if (typeof input !== 'string') { + throw new TypeError('Expected input to be a string'); + } + + if (input === '') { + return { isMatch: false, output: '' }; + } + + const opts = options || {}; + const format = opts.format || (posix ? utils.toPosixSlashes : null); + let match = input === glob; + let output = (match && format) ? format(input) : input; + + if (match === false) { + output = format ? format(input) : input; + match = output === glob; + } + + if (match === false || opts.capture === true) { + if (opts.matchBase === true || opts.basename === true) { + match = picomatch.matchBase(input, regex, options, posix); + } else { + match = regex.exec(output); + } + } + + return { isMatch: Boolean(match), match, output }; + }; + + /** + * Match the basename of a filepath. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.matchBase(input, glob[, options]); + * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true + * ``` + * @param {String} `input` String to test. + * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe). + * @return {Boolean} + * @api public + */ + + picomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => { + const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options); + return regex.test(path.basename(input)); + }; + + /** + * Returns true if **any** of the given glob `patterns` match the specified `string`. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.isMatch(string, patterns[, options]); + * + * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true + * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false + * ``` + * @param {String|Array} str The string to test. + * @param {String|Array} patterns One or more glob patterns to use for matching. + * @param {Object} [options] See available [options](#options). + * @return {Boolean} Returns true if any patterns match `str` + * @api public + */ + + picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str); + + /** + * Parse a glob pattern to create the source string for a regular + * expression. + * + * ```js + * const picomatch = require('picomatch'); + * const result = picomatch.parse(pattern[, options]); + * ``` + * @param {String} `pattern` + * @param {Object} `options` + * @return {Object} Returns an object with useful properties and output to be used as a regex source string. + * @api public + */ + + picomatch.parse = (pattern, options) => { + if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options)); + return parse(pattern, { ...options, fastpaths: false }); + }; + + /** + * Scan a glob pattern to separate the pattern into segments. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.scan(input[, options]); + * + * const result = picomatch.scan('!./foo/*.js'); + * console.log(result); + * { prefix: '!./', + * input: '!./foo/*.js', + * start: 3, + * base: 'foo', + * glob: '*.js', + * isBrace: false, + * isBracket: false, + * isGlob: true, + * isExtglob: false, + * isGlobstar: false, + * negated: true } + * ``` + * @param {String} `input` Glob pattern to scan. + * @param {Object} `options` + * @return {Object} Returns an object with + * @api public + */ + + picomatch.scan = (input, options) => scan(input, options); + + /** + * Compile a regular expression from the `state` object returned by the + * [parse()](#parse) method. + * + * @param {Object} `state` + * @param {Object} `options` + * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser. + * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging. + * @return {RegExp} + * @api public + */ + + picomatch.compileRe = (state, options, returnOutput = false, returnState = false) => { + if (returnOutput === true) { + return state.output; + } + + const opts = options || {}; + const prepend = opts.contains ? '' : '^'; + const append = opts.contains ? '' : '$'; + + let source = `${prepend}(?:${state.output})${append}`; + if (state && state.negated === true) { + source = `^(?!${source}).*$`; + } + + const regex = picomatch.toRegex(source, options); + if (returnState === true) { + regex.state = state; + } + + return regex; + }; + + /** + * Create a regular expression from a parsed glob pattern. + * + * ```js + * const picomatch = require('picomatch'); + * const state = picomatch.parse('*.js'); + * // picomatch.compileRe(state[, options]); + * + * console.log(picomatch.compileRe(state)); + * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ + * ``` + * @param {String} `state` The object returned from the `.parse` method. + * @param {Object} `options` + * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result. + * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression. + * @return {RegExp} Returns a regex created from the given pattern. + * @api public + */ + + picomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => { + if (!input || typeof input !== 'string') { + throw new TypeError('Expected a non-empty string'); + } + + let parsed = { negated: false, fastpaths: true }; + + if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) { + parsed.output = parse.fastpaths(input, options); + } + + if (!parsed.output) { + parsed = parse(input, options); + } + + return picomatch.compileRe(parsed, options, returnOutput, returnState); + }; + + /** + * Create a regular expression from the given regex source string. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.toRegex(source[, options]); + * + * const { output } = picomatch.parse('*.js'); + * console.log(picomatch.toRegex(output)); + * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ + * ``` + * @param {String} `source` Regular expression source string. + * @param {Object} `options` + * @return {RegExp} + * @api public + */ + + picomatch.toRegex = (source, options) => { + try { + const opts = options || {}; + return new RegExp(source, opts.flags || (opts.nocase ? 'i' : '')); + } catch (err) { + if (options && options.debug === true) throw err; + return /$^/; + } + }; + + /** + * Picomatch constants. + * @return {Object} + */ + + picomatch.constants = constants; + + /** + * Expose "picomatch" + */ + + picomatch_1 = picomatch; + return picomatch_1; +} + +var picomatch; +var hasRequiredPicomatch; + +function requirePicomatch () { + if (hasRequiredPicomatch) return picomatch; + hasRequiredPicomatch = 1; + + picomatch = requirePicomatch$1(); + return picomatch; +} + +Object.defineProperty(builder, "__esModule", { value: true }); +builder.Builder = void 0; +const path_1 = path$1; +const api_builder_1 = apiBuilder; +var pm = null; +/* c8 ignore next 6 */ +try { + require.resolve("picomatch"); + pm = requirePicomatch(); +} +catch (_e) { + // do nothing +} +class Builder { + globCache = {}; + options = { + maxDepth: Infinity, + suppressErrors: true, + pathSeparator: path_1.sep, + filters: [], + }; + constructor(options) { + this.options = { ...this.options, ...options }; + } + group() { + this.options.group = true; + return this; + } + withPathSeparator(separator) { + this.options.pathSeparator = separator; + return this; + } + withBasePath() { + this.options.includeBasePath = true; + return this; + } + withRelativePaths() { + this.options.relativePaths = true; + return this; + } + withDirs() { + this.options.includeDirs = true; + return this; + } + withMaxDepth(depth) { + this.options.maxDepth = depth; + return this; + } + withMaxFiles(limit) { + this.options.maxFiles = limit; + return this; + } + withFullPaths() { + this.options.resolvePaths = true; + this.options.includeBasePath = true; + return this; + } + withErrors() { + this.options.suppressErrors = false; + return this; + } + withSymlinks() { + this.options.resolveSymlinks = true; + return this.withFullPaths(); + } + withAbortSignal(signal) { + this.options.signal = signal; + return this; + } + normalize() { + this.options.normalizePath = true; + return this; + } + filter(predicate) { + this.options.filters.push(predicate); + return this; + } + onlyDirs() { + this.options.excludeFiles = true; + this.options.includeDirs = true; + return this; + } + exclude(predicate) { + this.options.exclude = predicate; + return this; + } + onlyCounts() { + this.options.onlyCounts = true; + return this; + } + crawl(root) { + return new api_builder_1.APIBuilder(root || ".", this.options); + } + /** + * @deprecated Pass options using the constructor instead: + * ```ts + * new fdir(options).crawl("/path/to/root"); + * ``` + * This method will be removed in v7.0 + */ + /* c8 ignore next 4 */ + crawlWithOptions(root, options) { + this.options = { ...this.options, ...options }; + return new api_builder_1.APIBuilder(root || ".", this.options); + } + glob(...patterns) { + return this.globWithOptions(patterns, { dot: true }); + } + globWithOptions(patterns, options) { + /* c8 ignore next 5 */ + if (!pm) { + throw new Error(`Please install picomatch: "npm i picomatch" to use glob matching.`); + } + var isMatch = this.globCache[patterns.join("\0")]; + if (!isMatch) { + isMatch = pm(patterns, options); + this.globCache[patterns.join("\0")] = isMatch; + } + this.options.filters.push((path) => isMatch(path)); + return this; + } +} +builder.Builder = Builder; + +var src$1 = {}; + +var types$1 = {}; + +Object.defineProperty(types$1, "__esModule", { value: true }); + +(function (exports) { + var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); + }) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; + })); + var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); + }; + Object.defineProperty(exports, "__esModule", { value: true }); + __exportStar(types$1, exports); +} (src$1)); + +(function (exports) { + var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); + }) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; + })); + var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.fdir = void 0; + const builder_1 = builder; + Object.defineProperty(exports, "fdir", { enumerable: true, get: function () { return builder_1.Builder; } }); + __exportStar(src$1, exports); +} (dist)); + +const CpuToNodeArch = { + x86_64: 'x64', + aarch64: 'arm64', + i686: 'ia32', + armv7: 'arm', + riscv64gc: 'riscv64', +}; +const NodeArchToCpu = { + x64: 'x86_64', + arm64: 'aarch64', + ia32: 'i686', + arm: 'armv7', + riscv64: 'riscv64gc', +}; +const SysToNodePlatform = { + linux: 'linux', + freebsd: 'freebsd', + darwin: 'darwin', + windows: 'win32', +}; +const UniArchsByPlatform = { + darwin: ['x64', 'arm64'], +}; +const DefaultPlatforms = [ + { + platform: 'win32', + arch: 'x64', + abi: 'msvc', + platformArchABI: 'win32-x64-msvc', + raw: 'x86_64-pc-windows-msvc', + }, + { + platform: 'darwin', + arch: 'x64', + abi: null, + platformArchABI: 'darwin-x64', + raw: 'x86_64-apple-darwin', + }, + { + platform: 'linux', + arch: 'x64', + abi: 'gnu', + platformArchABI: 'linux-x64-gnu', + raw: 'x86_64-unknown-linux-gnu', + }, +]; +/** + * A triple is a specific format for specifying a target architecture. + * Triples may be referred to as a target triple which is the architecture for the artifact produced, and the host triple which is the architecture that the compiler is running on. + * The general format of the triple is `---` where: + * - `arch` = The base CPU architecture, for example `x86_64`, `i686`, `arm`, `thumb`, `mips`, etc. + * - `sub` = The CPU sub-architecture, for example `arm` has `v7`, `v7s`, `v5te`, etc. + * - `vendor` = The vendor, for example `unknown`, `apple`, `pc`, `nvidia`, etc. + * - `sys` = The system name, for example `linux`, `windows`, `darwin`, etc. none is typically used for bare-metal without an OS. + * - `abi` = The ABI, for example `gnu`, `android`, `eabi`, etc. + */ +function parseTriple(rawTriple) { + var _a, _b; + const triple = rawTriple.endsWith('eabi') + ? `${rawTriple.slice(0, -4)}-eabi` + : rawTriple; + const triples = triple.split('-'); + let cpu; + let sys; + let abi = null; + if (triples.length === 4) { + [cpu, , sys, abi = null] = triples; + } + else if (triples.length === 3) { + [cpu, , sys] = triples; + } + else { + [cpu, sys] = triples; + } + const platformName = (_a = SysToNodePlatform[sys]) !== null && _a !== void 0 ? _a : sys; + const arch = (_b = CpuToNodeArch[cpu]) !== null && _b !== void 0 ? _b : cpu; + return { + platform: platformName, + arch, + abi, + platformArchABI: abi + ? `${platformName}-${arch}-${abi}` + : `${platformName}-${arch}`, + raw: rawTriple, + }; +} +function getHostTargetTriple() { + const host = require$$1$1.execSync(`rustc -vV`, { + env: process.env, + }) + .toString('utf8') + .split('\n') + .find((line) => line.startsWith('host: ')); + const triple = host === null || host === void 0 ? void 0 : host.slice('host: '.length); + if (!triple) { + throw new TypeError(`Can not parse target triple from host`); + } + return parseTriple(triple); +} + +function getNapiConfig(packageJson = 'package.json', cwd = process.cwd()) { + var _a, _b, _c, _d, _e, _f, _g, _h; + const packageJsonPath = path$1.join(cwd, packageJson); + const pkgJson = require(packageJsonPath); + const { version: packageVersion, napi, name } = pkgJson; + const additionPlatforms = ((_b = (_a = napi === null || napi === void 0 ? void 0 : napi.triples) === null || _a === void 0 ? void 0 : _a.additional) !== null && _b !== void 0 ? _b : []).map(parseTriple); + const defaultPlatforms = ((_c = napi === null || napi === void 0 ? void 0 : napi.triples) === null || _c === void 0 ? void 0 : _c.defaults) === false ? [] : [...DefaultPlatforms]; + const tsConstEnum = (_d = napi === null || napi === void 0 ? void 0 : napi.ts) === null || _d === void 0 ? void 0 : _d.constEnum; + const platforms = [...defaultPlatforms, ...additionPlatforms]; + const releaseVersion = process.env.RELEASE_VERSION; + const releaseVersionWithoutPrefix = (releaseVersion === null || releaseVersion === void 0 ? void 0 : releaseVersion.startsWith('v')) + ? releaseVersion.substring(1) + : releaseVersion; + const version = releaseVersionWithoutPrefix !== null && releaseVersionWithoutPrefix !== void 0 ? releaseVersionWithoutPrefix : packageVersion; + const packageName = (_f = (_e = napi === null || napi === void 0 ? void 0 : napi.package) === null || _e === void 0 ? void 0 : _e.name) !== null && _f !== void 0 ? _f : name; + const npmClient = (_g = napi === null || napi === void 0 ? void 0 : napi.npmClient) !== null && _g !== void 0 ? _g : 'npm'; + const binaryName = (_h = napi === null || napi === void 0 ? void 0 : napi.name) !== null && _h !== void 0 ? _h : 'index'; + return { + platforms, + version, + packageName, + binaryName, + packageJsonPath, + content: pkgJson, + npmClient, + tsConstEnum, + }; +} + +var src = {exports: {}}; + +var node = {exports: {}}; + +var hasFlag; +var hasRequiredHasFlag; + +function requireHasFlag () { + if (hasRequiredHasFlag) return hasFlag; + hasRequiredHasFlag = 1; + + hasFlag = (flag, argv = process.argv) => { + const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); + const position = argv.indexOf(prefix + flag); + const terminatorPosition = argv.indexOf('--'); + return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition); + }; + return hasFlag; +} + +var supportsColor_1; +var hasRequiredSupportsColor; + +function requireSupportsColor () { + if (hasRequiredSupportsColor) return supportsColor_1; + hasRequiredSupportsColor = 1; + const os$1 = os; + const tty = tty$1; + const hasFlag = requireHasFlag(); + + const {env} = process; + + let forceColor; + if (hasFlag('no-color') || + hasFlag('no-colors') || + hasFlag('color=false') || + hasFlag('color=never')) { + forceColor = 0; + } else if (hasFlag('color') || + hasFlag('colors') || + hasFlag('color=true') || + hasFlag('color=always')) { + forceColor = 1; + } + + if ('FORCE_COLOR' in env) { + if (env.FORCE_COLOR === 'true') { + forceColor = 1; + } else if (env.FORCE_COLOR === 'false') { + forceColor = 0; + } else { + forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3); + } + } + + function translateLevel(level) { + if (level === 0) { + return false; + } + + return { + level, + hasBasic: true, + has256: level >= 2, + has16m: level >= 3 + }; + } + + function supportsColor(haveStream, streamIsTTY) { + if (forceColor === 0) { + return 0; + } + + if (hasFlag('color=16m') || + hasFlag('color=full') || + hasFlag('color=truecolor')) { + return 3; + } + + if (hasFlag('color=256')) { + return 2; + } + + if (haveStream && !streamIsTTY && forceColor === undefined) { + return 0; + } + + const min = forceColor || 0; + + if (env.TERM === 'dumb') { + return min; + } + + if (process.platform === 'win32') { + // Windows 10 build 10586 is the first Windows release that supports 256 colors. + // Windows 10 build 14931 is the first release that supports 16m/TrueColor. + const osRelease = os$1.release().split('.'); + if ( + Number(osRelease[0]) >= 10 && + Number(osRelease[2]) >= 10586 + ) { + return Number(osRelease[2]) >= 14931 ? 3 : 2; + } + + return 1; + } + + if ('CI' in env) { + if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') { + return 1; + } + + return min; + } + + if ('TEAMCITY_VERSION' in env) { + return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; + } + + if (env.COLORTERM === 'truecolor') { + return 3; + } + + if ('TERM_PROGRAM' in env) { + const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); + + switch (env.TERM_PROGRAM) { + case 'iTerm.app': + return version >= 3 ? 3 : 2; + case 'Apple_Terminal': + return 2; + // No default + } + } + + if (/-256(color)?$/i.test(env.TERM)) { + return 2; + } + + if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { + return 1; + } + + if ('COLORTERM' in env) { + return 1; + } + + return min; + } + + function getSupportLevel(stream) { + const level = supportsColor(stream, stream && stream.isTTY); + return translateLevel(level); + } + + supportsColor_1 = { + supportsColor: getSupportLevel, + stdout: translateLevel(supportsColor(true, tty.isatty(1))), + stderr: translateLevel(supportsColor(true, tty.isatty(2))) + }; + return supportsColor_1; +} + +/** + * Helpers. + */ + +var ms; +var hasRequiredMs; + +function requireMs () { + if (hasRequiredMs) return ms; + hasRequiredMs = 1; + var s = 1000; + var m = s * 60; + var h = m * 60; + var d = h * 24; + var w = d * 7; + var y = d * 365.25; + + /** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + + ms = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isFinite(val)) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); + }; + + /** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + + function parse(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + case 'weeks': + case 'week': + case 'w': + return n * w; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; + } + } + + /** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + + function fmtShort(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return Math.round(ms / d) + 'd'; + } + if (msAbs >= h) { + return Math.round(ms / h) + 'h'; + } + if (msAbs >= m) { + return Math.round(ms / m) + 'm'; + } + if (msAbs >= s) { + return Math.round(ms / s) + 's'; + } + return ms + 'ms'; + } + + /** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + + function fmtLong(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return plural(ms, msAbs, d, 'day'); + } + if (msAbs >= h) { + return plural(ms, msAbs, h, 'hour'); + } + if (msAbs >= m) { + return plural(ms, msAbs, m, 'minute'); + } + if (msAbs >= s) { + return plural(ms, msAbs, s, 'second'); + } + return ms + ' ms'; + } + + /** + * Pluralization helper. + */ + + function plural(ms, msAbs, n, name) { + var isPlural = msAbs >= n * 1.5; + return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); + } + return ms; +} + +var common$2; +var hasRequiredCommon; + +function requireCommon () { + if (hasRequiredCommon) return common$2; + hasRequiredCommon = 1; + /** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + */ + + function setup(env) { + createDebug.debug = createDebug; + createDebug.default = createDebug; + createDebug.coerce = coerce; + createDebug.disable = disable; + createDebug.enable = enable; + createDebug.enabled = enabled; + createDebug.humanize = requireMs(); + createDebug.destroy = destroy; + + Object.keys(env).forEach(key => { + createDebug[key] = env[key]; + }); + + /** + * The currently active debug mode names, and names to skip. + */ + + createDebug.names = []; + createDebug.skips = []; + + /** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + createDebug.formatters = {}; + + /** + * Selects a color for a debug namespace + * @param {String} namespace The namespace string for the debug instance to be colored + * @return {Number|String} An ANSI color code for the given namespace + * @api private + */ + function selectColor(namespace) { + let hash = 0; + + for (let i = 0; i < namespace.length; i++) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; + } + createDebug.selectColor = selectColor; + + /** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + function createDebug(namespace) { + let prevTime; + let enableOverride = null; + let namespacesCache; + let enabledCache; + + function debug(...args) { + // Disabled? + if (!debug.enabled) { + return; + } + + const self = debug; + + // Set `diff` timestamp + const curr = Number(new Date()); + const ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + args[0] = createDebug.coerce(args[0]); + + if (typeof args[0] !== 'string') { + // Anything else let's inspect with %O + args.unshift('%O'); + } + + // Apply any `formatters` transformations + let index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { + // If we encounter an escaped % then don't increase the array index + if (match === '%%') { + return '%'; + } + index++; + const formatter = createDebug.formatters[format]; + if (typeof formatter === 'function') { + const val = args[index]; + match = formatter.call(self, val); + + // Now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // Apply env-specific formatting (colors, etc.) + createDebug.formatArgs.call(self, args); + + const logFn = self.log || createDebug.log; + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.useColors = createDebug.useColors(); + debug.color = createDebug.selectColor(namespace); + debug.extend = extend; + debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release. + + Object.defineProperty(debug, 'enabled', { + enumerable: true, + configurable: false, + get: () => { + if (enableOverride !== null) { + return enableOverride; + } + if (namespacesCache !== createDebug.namespaces) { + namespacesCache = createDebug.namespaces; + enabledCache = createDebug.enabled(namespace); + } + + return enabledCache; + }, + set: v => { + enableOverride = v; + } + }); + + // Env-specific initialization logic for debug instances + if (typeof createDebug.init === 'function') { + createDebug.init(debug); + } + + return debug; + } + + function extend(namespace, delimiter) { + const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); + newDebug.log = this.log; + return newDebug; + } + + /** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + function enable(namespaces) { + createDebug.save(namespaces); + createDebug.namespaces = namespaces; + + createDebug.names = []; + createDebug.skips = []; + + let i; + const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + const len = split.length; + + for (i = 0; i < len; i++) { + if (!split[i]) { + // ignore empty strings + continue; + } + + namespaces = split[i].replace(/\*/g, '.*?'); + + if (namespaces[0] === '-') { + createDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$')); + } else { + createDebug.names.push(new RegExp('^' + namespaces + '$')); + } + } + } + + /** + * Disable debug output. + * + * @return {String} namespaces + * @api public + */ + function disable() { + const namespaces = [ + ...createDebug.names.map(toNamespace), + ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace) + ].join(','); + createDebug.enable(''); + return namespaces; + } + + /** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + function enabled(name) { + if (name[name.length - 1] === '*') { + return true; + } + + let i; + let len; + + for (i = 0, len = createDebug.skips.length; i < len; i++) { + if (createDebug.skips[i].test(name)) { + return false; + } + } + + for (i = 0, len = createDebug.names.length; i < len; i++) { + if (createDebug.names[i].test(name)) { + return true; + } + } + + return false; + } + + /** + * Convert regexp to namespace + * + * @param {RegExp} regxep + * @return {String} namespace + * @api private + */ + function toNamespace(regexp) { + return regexp.toString() + .substring(2, regexp.toString().length - 2) + .replace(/\.\*\?$/, '*'); + } + + /** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + function coerce(val) { + if (val instanceof Error) { + return val.stack || val.message; + } + return val; + } + + /** + * XXX DO NOT USE. This is a temporary stub function. + * XXX It WILL be removed in the next major release. + */ + function destroy() { + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + + createDebug.enable(createDebug.load()); + + return createDebug; + } + + common$2 = setup; + return common$2; +} + +/** + * Module dependencies. + */ + +var hasRequiredNode; + +function requireNode () { + if (hasRequiredNode) return node.exports; + hasRequiredNode = 1; + (function (module, exports) { + const tty = tty$1; + const util = require$$0$3; + + /** + * This is the Node.js implementation of `debug()`. + */ + + exports.init = init; + exports.log = log; + exports.formatArgs = formatArgs; + exports.save = save; + exports.load = load; + exports.useColors = useColors; + exports.destroy = util.deprecate( + () => {}, + 'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.' + ); + + /** + * Colors. + */ + + exports.colors = [6, 2, 3, 4, 5, 1]; + + try { + // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json) + // eslint-disable-next-line import/no-extraneous-dependencies + const supportsColor = requireSupportsColor(); + + if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) { + exports.colors = [ + 20, + 21, + 26, + 27, + 32, + 33, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 56, + 57, + 62, + 63, + 68, + 69, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 92, + 93, + 98, + 99, + 112, + 113, + 128, + 129, + 134, + 135, + 148, + 149, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 178, + 179, + 184, + 185, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 214, + 215, + 220, + 221 + ]; + } + } catch (error) { + // Swallow - we only care if `supports-color` is available; it doesn't have to be. + } + + /** + * Build up the default `inspectOpts` object from the environment variables. + * + * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js + */ + + exports.inspectOpts = Object.keys(process.env).filter(key => { + return /^debug_/i.test(key); + }).reduce((obj, key) => { + // Camel-case + const prop = key + .substring(6) + .toLowerCase() + .replace(/_([a-z])/g, (_, k) => { + return k.toUpperCase(); + }); + + // Coerce string value into JS value + let val = process.env[key]; + if (/^(yes|on|true|enabled)$/i.test(val)) { + val = true; + } else if (/^(no|off|false|disabled)$/i.test(val)) { + val = false; + } else if (val === 'null') { + val = null; + } else { + val = Number(val); + } + + obj[prop] = val; + return obj; + }, {}); + + /** + * Is stdout a TTY? Colored output is enabled when `true`. + */ + + function useColors() { + return 'colors' in exports.inspectOpts ? + Boolean(exports.inspectOpts.colors) : + tty.isatty(process.stderr.fd); + } + + /** + * Adds ANSI color escape codes if enabled. + * + * @api public + */ + + function formatArgs(args) { + const {namespace: name, useColors} = this; + + if (useColors) { + const c = this.color; + const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c); + const prefix = ` ${colorCode};1m${name} \u001B[0m`; + + args[0] = prefix + args[0].split('\n').join('\n' + prefix); + args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m'); + } else { + args[0] = getDate() + name + ' ' + args[0]; + } + } + + function getDate() { + if (exports.inspectOpts.hideDate) { + return ''; + } + return new Date().toISOString() + ' '; + } + + /** + * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr. + */ + + function log(...args) { + return process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\n'); + } + + /** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + function save(namespaces) { + if (namespaces) { + process.env.DEBUG = namespaces; + } else { + // If you set a process.env field to null or undefined, it gets cast to the + // string 'null' or 'undefined'. Just delete instead. + delete process.env.DEBUG; + } + } + + /** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + + function load() { + return process.env.DEBUG; + } + + /** + * Init logic for `debug` instances. + * + * Create a new `inspectOpts` object in case `useColors` is set + * differently for a particular `debug` instance. + */ + + function init(debug) { + debug.inspectOpts = {}; + + const keys = Object.keys(exports.inspectOpts); + for (let i = 0; i < keys.length; i++) { + debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; + } + } + + module.exports = requireCommon()(exports); + + const {formatters} = module.exports; + + /** + * Map %o to `util.inspect()`, all on a single line. + */ + + formatters.o = function (v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts) + .split('\n') + .map(str => str.trim()) + .join(' '); + }; + + /** + * Map %O to `util.inspect()`, allowing multiple lines if needed. + */ + + formatters.O = function (v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); + }; + } (node, node.exports)); + return node.exports; +} + +var browser = {exports: {}}; + +/* eslint-env browser */ + +var hasRequiredBrowser; + +function requireBrowser () { + if (hasRequiredBrowser) return browser.exports; + hasRequiredBrowser = 1; + (function (module, exports) { + /** + * This is the web browser implementation of `debug()`. + */ + + exports.formatArgs = formatArgs; + exports.save = save; + exports.load = load; + exports.useColors = useColors; + exports.storage = localstorage(); + exports.destroy = (() => { + let warned = false; + + return () => { + if (!warned) { + warned = true; + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + }; + })(); + + /** + * Colors. + */ + + exports.colors = [ + '#0000CC', + '#0000FF', + '#0033CC', + '#0033FF', + '#0066CC', + '#0066FF', + '#0099CC', + '#0099FF', + '#00CC00', + '#00CC33', + '#00CC66', + '#00CC99', + '#00CCCC', + '#00CCFF', + '#3300CC', + '#3300FF', + '#3333CC', + '#3333FF', + '#3366CC', + '#3366FF', + '#3399CC', + '#3399FF', + '#33CC00', + '#33CC33', + '#33CC66', + '#33CC99', + '#33CCCC', + '#33CCFF', + '#6600CC', + '#6600FF', + '#6633CC', + '#6633FF', + '#66CC00', + '#66CC33', + '#9900CC', + '#9900FF', + '#9933CC', + '#9933FF', + '#99CC00', + '#99CC33', + '#CC0000', + '#CC0033', + '#CC0066', + '#CC0099', + '#CC00CC', + '#CC00FF', + '#CC3300', + '#CC3333', + '#CC3366', + '#CC3399', + '#CC33CC', + '#CC33FF', + '#CC6600', + '#CC6633', + '#CC9900', + '#CC9933', + '#CCCC00', + '#CCCC33', + '#FF0000', + '#FF0033', + '#FF0066', + '#FF0099', + '#FF00CC', + '#FF00FF', + '#FF3300', + '#FF3333', + '#FF3366', + '#FF3399', + '#FF33CC', + '#FF33FF', + '#FF6600', + '#FF6633', + '#FF9900', + '#FF9933', + '#FFCC00', + '#FFCC33' + ]; + + /** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + + // eslint-disable-next-line complexity + function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { + return true; + } + + // Internet Explorer and Edge do not support colors. + if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { + return false; + } + + // Is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || + // Is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || + // Is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || + // Double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); + } + + /** + * Colorize log arguments if enabled. + * + * @api public + */ + + function formatArgs(args) { + args[0] = (this.useColors ? '%c' : '') + + this.namespace + + (this.useColors ? ' %c' : ' ') + + args[0] + + (this.useColors ? '%c ' : ' ') + + '+' + module.exports.humanize(this.diff); + + if (!this.useColors) { + return; + } + + const c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit'); + + // The final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + let index = 0; + let lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, match => { + if (match === '%%') { + return; + } + index++; + if (match === '%c') { + // We only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); + } + + /** + * Invokes `console.debug()` when available. + * No-op when `console.debug` is not a "function". + * If `console.debug` is not available, falls back + * to `console.log`. + * + * @api public + */ + exports.log = console.debug || console.log || (() => {}); + + /** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + function save(namespaces) { + try { + if (namespaces) { + exports.storage.setItem('debug', namespaces); + } else { + exports.storage.removeItem('debug'); + } + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } + } + + /** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + function load() { + let r; + try { + r = exports.storage.getItem('debug'); + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; + } + + /** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + + function localstorage() { + try { + // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context + // The Browser also has localStorage in the global context. + return localStorage; + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } + } + + module.exports = requireCommon()(exports); + + const {formatters} = module.exports; + + /** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + + formatters.j = function (v) { + try { + return JSON.stringify(v); + } catch (error) { + return '[UnexpectedJSONParseError]: ' + error.message; + } + }; + } (browser, browser.exports)); + return browser.exports; +} + +/** + * Detect Electron renderer / nwjs process, which is node, but we should + * treat as a browser. + */ + +if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { + src.exports = requireBrowser(); +} else { + src.exports = requireNode(); +} + +var srcExports = src.exports; +var debug$a = /*@__PURE__*/getDefaultExportFromCjs(srcExports); + +const debugFactory = (namespace) => debug$a(`napi:${namespace}`); + +const readFileAsync = require$$0$3.promisify(require$$0$2.readFile); +const writeFileAsync = require$$0$3.promisify(require$$0$2.writeFile); +const unlinkAsync = require$$0$3.promisify(require$$0$2.unlink); +const copyFileAsync = require$$0$3.promisify(require$$0$2.copyFile); +const mkdirAsync = require$$0$3.promisify(require$$0$2.mkdir); +const statAsync = require$$0$3.promisify(require$$0$2.stat); +function fileExists(path) { + return __awaiter$1(this, void 0, void 0, function* () { + const exists = yield statAsync(path) + .then(() => true) + .catch(() => false); + return exists; + }); +} +function pick(o, ...keys) { + return keys.reduce((acc, key) => { + acc[key] = o[key]; + return acc; + }, {}); +} + +const debug$9 = debugFactory('artifacts'); +class ArtifactsCommand extends Command { + constructor() { + super(...arguments); + this.sourceDir = String$1('-d,--dir', 'artifacts'); + this.distDir = String$1('--dist', 'npm'); + this.configFileName = String$1('-c,--config'); + } + execute() { + return __awaiter$1(this, void 0, void 0, function* () { + const { platforms, binaryName, packageJsonPath } = getNapiConfig(this.configFileName); + const packageJsonDir = path$1.parse(packageJsonPath).dir; + const sourceApi = new dist.fdir() + .withFullPaths() + .crawl(path$1.join(process.cwd(), this.sourceDir)); + const distDirs = platforms.map((platform) => path$1.join(process.cwd(), this.distDir, platform.platformArchABI)); + const universalSourceBins = new Set(platforms + .filter((platform) => platform.arch === 'universal') + .flatMap((p) => UniArchsByPlatform[p.platform].map((a) => `${p.platform}-${a}`))); + yield sourceApi.withPromise().then((output) => Promise.all(output.map((filePath) => __awaiter$1(this, void 0, void 0, function* () { + debug$9(`Read [${yellowBright(filePath)}]`); + const sourceContent = yield readFileAsync(filePath); + const parsedName = path$1.parse(filePath); + const terms = parsedName.name.split('.'); + const platformArchABI = terms.pop(); + const _binaryName = terms.join('.'); + if (_binaryName !== binaryName) { + debug$9(`[${yellowBright(_binaryName)}] is not matched with [${greenBright(binaryName)}], skip`); + return; + } + const dir = distDirs.find((dir) => dir.includes(platformArchABI)); + if (!dir && universalSourceBins.has(platformArchABI)) { + debug$9(`[${yellowBright(platformArchABI)}] has no dist dir but it is source bin for universal arch, skip`); + return; + } + if (!dir) { + throw new TypeError(`No dist dir found for ${filePath}`); + } + const distFilePath = path$1.join(dir, parsedName.base); + debug$9(`Write file content to [${yellowBright(distFilePath)}]`); + yield writeFileAsync(distFilePath, sourceContent); + const distFilePathLocal = path$1.join(packageJsonDir, parsedName.base); + debug$9(`Write file content to [${yellowBright(distFilePathLocal)}]`); + yield writeFileAsync(distFilePathLocal, sourceContent); + })))); + }); + } +} +ArtifactsCommand.usage = Command.Usage({ + description: 'Copy artifacts from Github Actions into specified dir', +}); +ArtifactsCommand.paths = [['artifacts']]; + +const homedir = os.homedir(); +const tmpdir = os.tmpdir(); +const {env} = process$4; + +const macos = name => { + const library = path$1.join(homedir, 'Library'); + + return { + data: path$1.join(library, 'Application Support', name), + config: path$1.join(library, 'Preferences', name), + cache: path$1.join(library, 'Caches', name), + log: path$1.join(library, 'Logs', name), + temp: path$1.join(tmpdir, name), + }; +}; + +const windows = name => { + const appData = env.APPDATA || path$1.join(homedir, 'AppData', 'Roaming'); + const localAppData = env.LOCALAPPDATA || path$1.join(homedir, 'AppData', 'Local'); + + return { + // Data/config/cache/log are invented by me as Windows isn't opinionated about this + data: path$1.join(localAppData, name, 'Data'), + config: path$1.join(appData, name, 'Config'), + cache: path$1.join(localAppData, name, 'Cache'), + log: path$1.join(localAppData, name, 'Log'), + temp: path$1.join(tmpdir, name), + }; +}; + +// https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html +const linux = name => { + const username = path$1.basename(homedir); + + return { + data: path$1.join(env.XDG_DATA_HOME || path$1.join(homedir, '.local', 'share'), name), + config: path$1.join(env.XDG_CONFIG_HOME || path$1.join(homedir, '.config'), name), + cache: path$1.join(env.XDG_CACHE_HOME || path$1.join(homedir, '.cache'), name), + // https://wiki.debian.org/XDGBaseDirectorySpecification#state + log: path$1.join(env.XDG_STATE_HOME || path$1.join(homedir, '.local', 'state'), name), + temp: path$1.join(tmpdir, username, name), + }; +}; + +function envPaths(name, {suffix = 'nodejs'} = {}) { + if (typeof name !== 'string') { + throw new TypeError(`Expected a string, got ${typeof name}`); + } + + if (suffix) { + // Add suffix to prevent possible conflict with native apps + name += `-${suffix}`; + } + + if (process$4.platform === 'darwin') { + return macos(name); + } + + if (process$4.platform === 'win32') { + return windows(name); + } + + return linux(name); +} + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** Built-in value references. */ +var Symbol$1 = root.Symbol; + +/** Used for built-in method references. */ +var objectProto$d = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$9 = objectProto$d.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString$1 = objectProto$d.toString; + +/** Built-in value references. */ +var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty$9.call(value, symToStringTag$1), + tag = value[symToStringTag$1]; + + try { + value[symToStringTag$1] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString$1.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag$1] = tag; + } else { + delete value[symToStringTag$1]; + } + } + return result; +} + +/** Used for built-in method references. */ +var objectProto$c = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto$c.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +/** `Object#toString` result references. */ +var symbolTag$1 = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag$1); +} + +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray$5 = Array.isArray; + +/** Used as references for various `Number` constants. */ +var INFINITY$1 = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto$1 = Symbol$1 ? Symbol$1.prototype : undefined, + symbolToString = symbolProto$1 ? symbolProto$1.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray$5(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject$1(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity$2(value) { + return value; +} + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag$1 = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction$2(value) { + if (!isObject$1(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +/** Used for built-in method references. */ +var funcProto$1 = Function.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString$1 = funcProto$1.toString; + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString$1.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto$b = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty$8 = objectProto$b.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty$8).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject$1(value) || isMasked(value)) { + return false; + } + var pattern = isFunction$2(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +/* Built-in method references that are verified to be native. */ +var WeakMap$1 = getNative(root, 'WeakMap'); + +var WeakMap$2 = WeakMap$1; + +var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER$1 = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER$1 : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike$1(value) { + return value != null && isLength(value.length) && !isFunction$2(value); +} + +/** Used for built-in method references. */ +var objectProto$a = Object.prototype; + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$a; + + return value === proto; +} + +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/** `Object#toString` result references. */ +var argsTag$2 = '[object Arguments]'; + +/** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ +function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag$2; +} + +/** Used for built-in method references. */ +var objectProto$9 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$7 = objectProto$9.hasOwnProperty; + +/** Built-in value references. */ +var propertyIsEnumerable$1 = objectProto$9.propertyIsEnumerable; + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty$7.call(value, 'callee') && + !propertyIsEnumerable$1.call(value, 'callee'); +}; + +/** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ +function stubFalse() { + return false; +} + +/** Detect free variable `exports`. */ +var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; + +/** Built-in value references. */ +var Buffer$3 = moduleExports$1 ? root.Buffer : undefined; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsBuffer = Buffer$3 ? Buffer$3.isBuffer : undefined; + +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = nativeIsBuffer || stubFalse; + +/** `Object#toString` result references. */ +var argsTag$1 = '[object Arguments]', + arrayTag$1 = '[object Array]', + boolTag$1 = '[object Boolean]', + dateTag$1 = '[object Date]', + errorTag$1 = '[object Error]', + funcTag = '[object Function]', + mapTag$2 = '[object Map]', + numberTag$1 = '[object Number]', + objectTag$2 = '[object Object]', + regexpTag$1 = '[object RegExp]', + setTag$2 = '[object Set]', + stringTag$1 = '[object String]', + weakMapTag$1 = '[object WeakMap]'; + +var arrayBufferTag$1 = '[object ArrayBuffer]', + dataViewTag$2 = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag$1] = typedArrayTags[arrayTag$1] = +typedArrayTags[arrayBufferTag$1] = typedArrayTags[boolTag$1] = +typedArrayTags[dataViewTag$2] = typedArrayTags[dateTag$1] = +typedArrayTags[errorTag$1] = typedArrayTags[funcTag] = +typedArrayTags[mapTag$2] = typedArrayTags[numberTag$1] = +typedArrayTags[objectTag$2] = typedArrayTags[regexpTag$1] = +typedArrayTags[setTag$2] = typedArrayTags[stringTag$1] = +typedArrayTags[weakMapTag$1] = false; + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +} + +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function(value) { + return func(value); + }; +} + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports && freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}()); + +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + +/** Used for built-in method references. */ +var objectProto$8 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$6 = objectProto$8.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = isArray$5(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty$6.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; +} + +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = overArg(Object.keys, Object); + +/** Used for built-in method references. */ +var objectProto$7 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$5 = objectProto$7.hasOwnProperty; + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty$5.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return isArrayLike$1(object) ? arrayLikeKeys(object) : baseKeys(object); +} + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray$5(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* Built-in method references that are verified to be native. */ +var nativeCreate = getNative(Object, 'create'); + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; +} + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; +} + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED$2 = '__lodash_hash_undefined__'; + +/** Used for built-in method references. */ +var objectProto$6 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$4 = objectProto$6.hasOwnProperty; + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED$2 ? undefined : result; + } + return hasOwnProperty$4.call(data, key) ? data[key] : undefined; +} + +/** Used for built-in method references. */ +var objectProto$5 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$3 = objectProto$5.hasOwnProperty; + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty$3.call(data, key); +} + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED$1 = '__lodash_hash_undefined__'; + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED$1 : value; + return this; +} + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; + this.size = 0; +} + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; +} + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +/* Built-in method references that are verified to be native. */ +var Map$1 = getNative(root, 'Map'); + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map$1 || ListCache), + 'string': new Hash + }; +} + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; +} + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; +} + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; +} + +// Expose `MapCache`. +memoize.Cache = MapCache; + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if (isArray$5(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); +} + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; +} + +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new ListCache; + this.size = 0; +} + +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; +} + +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} + +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map$1 || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; +} + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; +} + +// Add methods to `Stack`. +Stack.prototype.clear = stackClear; +Stack.prototype['delete'] = stackDelete; +Stack.prototype.get = stackGet; +Stack.prototype.has = stackHas; +Stack.prototype.set = stackSet; + +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/** Used for built-in method references. */ +var objectProto$4 = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto$4.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +var getSymbols$1 = getSymbols; + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray$5(object) ? result : arrayPush(result, symbolsFunc(object)); +} + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols$1); +} + +/* Built-in method references that are verified to be native. */ +var DataView = getNative(root, 'DataView'); + +var DataView$1 = DataView; + +/* Built-in method references that are verified to be native. */ +var Promise$1 = getNative(root, 'Promise'); + +var Promise$2 = Promise$1; + +/* Built-in method references that are verified to be native. */ +var Set$1 = getNative(root, 'Set'); + +var Set$2 = Set$1; + +/** `Object#toString` result references. */ +var mapTag$1 = '[object Map]', + objectTag$1 = '[object Object]', + promiseTag = '[object Promise]', + setTag$1 = '[object Set]', + weakMapTag = '[object WeakMap]'; + +var dataViewTag$1 = '[object DataView]'; + +/** Used to detect maps, sets, and weakmaps. */ +var dataViewCtorString = toSource(DataView$1), + mapCtorString = toSource(Map$1), + promiseCtorString = toSource(Promise$2), + setCtorString = toSource(Set$2), + weakMapCtorString = toSource(WeakMap$2); + +/** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +var getTag = baseGetTag; + +// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. +if ((DataView$1 && getTag(new DataView$1(new ArrayBuffer(1))) != dataViewTag$1) || + (Map$1 && getTag(new Map$1) != mapTag$1) || + (Promise$2 && getTag(Promise$2.resolve()) != promiseTag) || + (Set$2 && getTag(new Set$2) != setTag$1) || + (WeakMap$2 && getTag(new WeakMap$2) != weakMapTag)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag$1 ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag$1; + case mapCtorString: return mapTag$1; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag$1; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; +} + +var getTag$1 = getTag; + +/** Built-in value references. */ +var Uint8Array$1 = root.Uint8Array; + +var Uint8Array$2 = Uint8Array$1; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +SetCache.prototype.has = setCacheHas; + +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG$5 = 1, + COMPARE_UNORDERED_FLAG$3 = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG$5, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG$3) ? new SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG$4 = 1, + COMPARE_UNORDERED_FLAG$2 = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol$1 ? Symbol$1.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array$2(object), new Uint8Array$2(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG$4; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG$2; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG$3 = 1; + +/** Used for built-in method references. */ +var objectProto$3 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$2 = objectProto$3.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG$3, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty$2.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG$2 = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var objectProto$2 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$1 = objectProto$2.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray$5(object), + othIsArr = isArray$5(other), + objTag = objIsArr ? arrayTag : getTag$1(object), + othTag = othIsArr ? arrayTag : getTag$1(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG$2)) { + var objIsWrapped = objIsObj && hasOwnProperty$1.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty$1.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG$1 = 1, + COMPARE_UNORDERED_FLAG$1 = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG$1 | COMPARE_UNORDERED_FLAG$1, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !isObject$1(value); +} + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = keys(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; +} + +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; +} + +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = castPath(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray$5(object) || isArguments(object)); +} + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); +} + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; +} + +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; +} + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); +} + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity$2; + } + if (typeof value == 'object') { + return isArray$5(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); +} + +/** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ +function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); + } + return accumulator; +} + +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = createBaseFor(); + +var baseFor$1 = baseFor; + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && baseFor$1(object, iteratee, keys); +} + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike$1(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = createBaseEach(baseForOwn); + +/** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ +function baseAggregator(collection, setter, iteratee, accumulator) { + baseEach(collection, function(value, key, collection) { + setter(accumulator, value, iteratee(value), collection); + }); + return accumulator; +} + +/** + * Creates a function like `_.groupBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} [initializer] The accumulator object initializer. + * @returns {Function} Returns the new aggregator function. + */ +function createAggregator(setter, initializer) { + return function(collection, iteratee) { + var func = isArray$5(collection) ? arrayAggregator : baseAggregator, + accumulator = initializer ? initializer() : {}; + + return func(collection, setter, baseIteratee(iteratee), accumulator); + }; +} + +/** Used for built-in method references. */ +var objectProto$1 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto$1.hasOwnProperty; + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The order of grouped values + * is determined by the order they occur in `collection`. The corresponding + * value of each key is an array of elements responsible for generating the + * key. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ +var groupBy$2 = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + baseAssignValue(result, key, [value]); + } +}); + +var groupBy$3 = groupBy$2; + +const ARM_FEATURES_H = `/* Macros to test for CPU features on ARM. Generic ARM version. +Copyright (C) 2012-2022 Free Software Foundation, Inc. +This file is part of the GNU C Library. +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. +You should have received a copy of the GNU Lesser General Public +License along with the GNU C Library. If not, see +. */ + +#ifndef _ARM_ARM_FEATURES_H +#define _ARM_ARM_FEATURES_H 1 + +/* An OS-specific arm-features.h file should define ARM_HAVE_VFP to +an appropriate expression for testing at runtime whether the VFP +hardware is present. We'll then redefine it to a constant if we +know at compile time that we can assume VFP. */ + +#ifndef __SOFTFP__ +/* The compiler is generating VFP instructions, so we're already +assuming the hardware exists. */ +# undef ARM_HAVE_VFP +# define ARM_HAVE_VFP 1 +#endif + +/* An OS-specific arm-features.h file may define ARM_ASSUME_NO_IWMMXT +to indicate at compile time that iWMMXt hardware is never present +at runtime (or that we never care about its state) and so need not +be checked for. */ + +/* A more-specific arm-features.h file may define ARM_ALWAYS_BX to indicate +that instructions using pc as a destination register must never be used, +so a "bx" (or "blx") instruction is always required. */ + +/* The log2 of the minimum alignment required for an address that +is the target of a computed branch (i.e. a "bx" instruction). +A more-specific arm-features.h file may define this to set a more +stringent requirement. +Using this only makes sense for code in ARM mode (where instructions +always have a fixed size of four bytes), or for Thumb-mode code that is +specifically aligning all the related branch targets to match (since +Thumb instructions might be either two or four bytes). */ +#ifndef ARM_BX_ALIGN_LOG2 +# define ARM_BX_ALIGN_LOG2 2 +#endif + +/* An OS-specific arm-features.h file may define ARM_NO_INDEX_REGISTER to +indicate that the two-register addressing modes must never be used. */ + +#endif /* arm-features.h */ +`; + +const createJsBinding = (localName, pkgName) => `/* tslint:disable */ +/* eslint-disable */ +/* prettier-ignore */ + +/* auto-generated by NAPI-RS */ + +const { existsSync, readFileSync } = require('fs') +const { join } = require('path') + +const { platform, arch } = process + +let nativeBinding = null +let localFileExisted = false +let loadError = null + +function isMusl() { + // For Node 10 + if (!process.report || typeof process.report.getReport !== 'function') { + try { + const lddPath = require('child_process').execSync('which ldd').toString().trim() + return readFileSync(lddPath, 'utf8').includes('musl') + } catch (e) { + return true + } + } else { + const { glibcVersionRuntime } = process.report.getReport().header + return !glibcVersionRuntime + } +} + +switch (platform) { + case 'android': + switch (arch) { + case 'arm64': + localFileExisted = existsSync(join(__dirname, '${localName}.android-arm64.node')) + try { + if (localFileExisted) { + nativeBinding = require('./${localName}.android-arm64.node') + } else { + nativeBinding = require('${pkgName}-android-arm64') + } + } catch (e) { + loadError = e + } + break + case 'arm': + localFileExisted = existsSync(join(__dirname, '${localName}.android-arm-eabi.node')) + try { + if (localFileExisted) { + nativeBinding = require('./${localName}.android-arm-eabi.node') + } else { + nativeBinding = require('${pkgName}-android-arm-eabi') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(\`Unsupported architecture on Android \${arch}\`) + } + break + case 'win32': + switch (arch) { + case 'x64': + localFileExisted = existsSync( + join(__dirname, '${localName}.win32-x64-msvc.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./${localName}.win32-x64-msvc.node') + } else { + nativeBinding = require('${pkgName}-win32-x64-msvc') + } + } catch (e) { + loadError = e + } + break + case 'ia32': + localFileExisted = existsSync( + join(__dirname, '${localName}.win32-ia32-msvc.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./${localName}.win32-ia32-msvc.node') + } else { + nativeBinding = require('${pkgName}-win32-ia32-msvc') + } + } catch (e) { + loadError = e + } + break + case 'arm64': + localFileExisted = existsSync( + join(__dirname, '${localName}.win32-arm64-msvc.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./${localName}.win32-arm64-msvc.node') + } else { + nativeBinding = require('${pkgName}-win32-arm64-msvc') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(\`Unsupported architecture on Windows: \${arch}\`) + } + break + case 'darwin': + localFileExisted = existsSync(join(__dirname, '${localName}.darwin-universal.node')) + try { + if (localFileExisted) { + nativeBinding = require('./${localName}.darwin-universal.node') + } else { + nativeBinding = require('${pkgName}-darwin-universal') + } + break + } catch {} + switch (arch) { + case 'x64': + localFileExisted = existsSync(join(__dirname, '${localName}.darwin-x64.node')) + try { + if (localFileExisted) { + nativeBinding = require('./${localName}.darwin-x64.node') + } else { + nativeBinding = require('${pkgName}-darwin-x64') + } + } catch (e) { + loadError = e + } + break + case 'arm64': + localFileExisted = existsSync( + join(__dirname, '${localName}.darwin-arm64.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./${localName}.darwin-arm64.node') + } else { + nativeBinding = require('${pkgName}-darwin-arm64') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(\`Unsupported architecture on macOS: \${arch}\`) + } + break + case 'freebsd': + if (arch !== 'x64') { + throw new Error(\`Unsupported architecture on FreeBSD: \${arch}\`) + } + localFileExisted = existsSync(join(__dirname, '${localName}.freebsd-x64.node')) + try { + if (localFileExisted) { + nativeBinding = require('./${localName}.freebsd-x64.node') + } else { + nativeBinding = require('${pkgName}-freebsd-x64') + } + } catch (e) { + loadError = e + } + break + case 'linux': + switch (arch) { + case 'x64': + if (isMusl()) { + localFileExisted = existsSync( + join(__dirname, '${localName}.linux-x64-musl.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./${localName}.linux-x64-musl.node') + } else { + nativeBinding = require('${pkgName}-linux-x64-musl') + } + } catch (e) { + loadError = e + } + } else { + localFileExisted = existsSync( + join(__dirname, '${localName}.linux-x64-gnu.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./${localName}.linux-x64-gnu.node') + } else { + nativeBinding = require('${pkgName}-linux-x64-gnu') + } + } catch (e) { + loadError = e + } + } + break + case 'arm64': + if (isMusl()) { + localFileExisted = existsSync( + join(__dirname, '${localName}.linux-arm64-musl.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./${localName}.linux-arm64-musl.node') + } else { + nativeBinding = require('${pkgName}-linux-arm64-musl') + } + } catch (e) { + loadError = e + } + } else { + localFileExisted = existsSync( + join(__dirname, '${localName}.linux-arm64-gnu.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./${localName}.linux-arm64-gnu.node') + } else { + nativeBinding = require('${pkgName}-linux-arm64-gnu') + } + } catch (e) { + loadError = e + } + } + break + case 'arm': + if (isMusl()) { + localFileExisted = existsSync( + join(__dirname, '${localName}.linux-arm-musleabihf.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./${localName}.linux-arm-musleabihf.node') + } else { + nativeBinding = require('${pkgName}-linux-arm-musleabihf') + } + } catch (e) { + loadError = e + } + } else { + localFileExisted = existsSync( + join(__dirname, '${localName}.linux-arm-gnueabihf.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./${localName}.linux-arm-gnueabihf.node') + } else { + nativeBinding = require('${pkgName}-linux-arm-gnueabihf') + } + } catch (e) { + loadError = e + } + } + break + case 'riscv64': + if (isMusl()) { + localFileExisted = existsSync( + join(__dirname, '${localName}.linux-riscv64-musl.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./${localName}.linux-riscv64-musl.node') + } else { + nativeBinding = require('${pkgName}-linux-riscv64-musl') + } + } catch (e) { + loadError = e + } + } else { + localFileExisted = existsSync( + join(__dirname, '${localName}.linux-riscv64-gnu.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./${localName}.linux-riscv64-gnu.node') + } else { + nativeBinding = require('${pkgName}-linux-riscv64-gnu') + } + } catch (e) { + loadError = e + } + } + break + case 's390x': + localFileExisted = existsSync( + join(__dirname, '${localName}.linux-s390x-gnu.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./${localName}.linux-s390x-gnu.node') + } else { + nativeBinding = require('${pkgName}-linux-s390x-gnu') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(\`Unsupported architecture on Linux: \${arch}\`) + } + break + default: + throw new Error(\`Unsupported OS: \${platform}, architecture: \${arch}\`) +} + +if (!nativeBinding) { + if (loadError) { + throw loadError + } + throw new Error(\`Failed to load native binding\`) +} + +`; + +var _a$1; +const debug$8 = debugFactory('build'); +const ZIG_PLATFORM_TARGET_MAP = { + 'x86_64-unknown-linux-musl': 'x86_64-linux-musl', + 'x86_64-unknown-linux-gnu': 'x86_64-linux-gnu', + // Doesn't support Windows MSVC for now + // 'x86_64-pc-windows-gnu': 'x86_64-windows-gnu', + // https://github.com/ziglang/zig/issues/1759 + // 'x86_64-unknown-freebsd': 'x86_64-freebsd', + 'x86_64-apple-darwin': 'x86_64-macos', + 'aarch64-apple-darwin': 'aarch64-macos', + 'aarch64-unknown-linux-gnu': 'aarch64-linux-gnu', + 'aarch64-unknown-linux-musl': 'aarch64-linux-musl', + 'armv7-unknown-linux-gnueabihf': 'arm-linux-gnueabihf', + 'armv7-unknown-linux-musleabihf': 'arm-linux-musleabihf', +}; +const DEFAULT_GLIBC_TARGET = (_a$1 = process.env.GLIBC_ABI_TARGET) !== null && _a$1 !== void 0 ? _a$1 : '2.17'; +const SHEBANG_NODE = process.platform === 'win32' ? '' : '#!/usr/bin/env node\n'; +const SHEBANG_SH = process.platform === 'win32' ? '' : '#!/usr/bin/env sh\n'; +function processZigLinkerArgs(platform, args) { + if (platform.includes('apple')) { + const newArgs = args.filter((arg, index) => !arg.startsWith('-Wl,-exported_symbols_list') && + arg !== '-Wl,-dylib' && + arg !== '-liconv' && + arg !== '-Wl,-dead_strip' && + !(arg === '-framework' && args[index + 1] === 'CoreFoundation') && + !(arg === 'CoreFoundation' && args[index - 1] === '-framework')); + newArgs.push('-Wl,"-undefined=dynamic_lookup"', '-dead_strip', '-lunwind'); + return newArgs; + } + if (platform.includes('linux')) { + return args + .map((arg) => { + if (arg === '-lgcc_s') { + return '-lunwind'; + } + return arg; + }) + .filter((arg) => arg !== '-march=armv7-a' && arg !== '-Wl,--no-undefined-version'); + } + return args; +} +class BuildCommand extends Command { + constructor() { + var _a, _b; + super(...arguments); + this.appendPlatformToFilename = Boolean$1(`--platform`, false, { + description: `Add platform triple to the .node file. ${green('[name].linux-x64-gnu.node')} for example`, + }); + this.isRelease = Boolean$1(`--release`, false, { + description: `Bypass to ${green('cargo build --release')}`, + }); + this.configFileName = String$1('--config,-c', { + description: `napi config path, only JSON format accepted. Default to ${underline(green('package.json'))}`, + }); + this.cargoName = String$1('--cargo-name', { + description: `Override the ${green('name')} field in ${underline(yellowBright('Cargo.toml'))}`, + }); + this.targetTripleDir = String$1('--target', (_b = (_a = process.env.RUST_TARGET) !== null && _a !== void 0 ? _a : process.env.CARGO_BUILD_TARGET) !== null && _b !== void 0 ? _b : '', { + description: `Bypass to ${green('cargo build --target')}`, + }); + this.features = String$1('--features', { + description: `Bypass to ${green('cargo build --features')}`, + }); + this.bin = String$1('--bin', { + description: `Bypass to ${green('cargo build --bin')}`, + }); + this.dts = String$1('--dts', 'index.d.ts', { + description: `The filename and path of ${green('.d.ts')} file, relative to cwd`, + }); + this.constEnum = Boolean$1('--const-enum', { + description: `Generate ${green('const enum')} in .d.ts file or not, default is ${green('true')}`, + }); + this.noDtsHeader = Boolean$1('--no-dts-header', false, { + description: `Don't generate ${green('.d.ts')} header`, + }); + this.project = String$1('-p', { + description: `Bypass to ${green('cargo -p')}`, + }); + this.profile = String$1('--profile', { + description: `Bypass to ${green('cargo --profile')}`, + }); + this.cargoFlags = String$1('--cargo-flags', '', { + description: `All the others flag passed to ${yellow('cargo build')}`, + }); + this.jsBinding = String$1('--js', 'index.js', { + description: `Path to the JS binding file, pass ${underline(yellow('false'))} to disable it. Only affect if ${green('--target')} is specified.`, + }); + this.jsPackageName = String$1('--js-package-name', { + description: `Package name in generated js binding file, Only affect if ${green('--target')} specified and ${green('--js')} is not false.`, + required: false, + }); + this.cargoCwd = String$1('--cargo-cwd', { + description: `The cwd of ${underline(yellow('Cargo.toml'))} file`, + }); + this.pipe = String$1('--pipe', { + description: `Pipe [${green('.js/.ts')}] files to this command, eg ${green('prettier -w')}`, + }); + // https://github.com/napi-rs/napi-rs/issues/297 + this.disableWindowsX32Optimize = Boolean$1('--disable-windows-x32-optimize', false, { + description: `Disable windows x32 ${green('lto')} and increase ${green('codegen-units')}. Disabled by default. See ${underline(blue('https://github.com/napi-rs/napi-rs/issues/297'))}`, + }); + this.destDir = String$1({ + required: false, + }); + this.useZig = Boolean$1(`--zig`, false, { + description: `Use ${green('zig')} as linker ${yellowBright('(Experimental)')}`, + }); + this.zigABIVersion = String$1(`--zig-abi-suffix`, { + description: `The suffix of the ${green('zig --target')} ABI version. Eg. ${cyan('--target x86_64-unknown-linux-gnu')} ${green('--zig-abi-suffix=2.17')}`, + }); + this.zigLinkOnly = Boolean$1(`--zig-link-only`, false, { + description: `Only link the library with ${green('zig')}`, + }); + this.isStrip = Boolean$1(`--strip`, false, { + description: `${green('Strip')} the library for minimum file size`, + }); + } + execute() { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l; + return __awaiter$1(this, void 0, void 0, function* () { + const cwd = this.cargoCwd + ? path$1.join(process.cwd(), this.cargoCwd) + : process.cwd(); + const cargoTomlPath = path$1.join(cwd, 'Cargo.toml'); + let cargoMetadata; + try { + debug$8('Start parse toml'); + cargoMetadata = JSON.parse(require$$1$1.execSync(`cargo metadata --format-version 1 --manifest-path "${cargoTomlPath}"`, { + stdio: 'pipe', + maxBuffer: 1024 * 1024 * 10, + }).toString('utf8')); + } + catch (e) { + throw new TypeError('Could not parse the Cargo.toml: ' + e); + } + const packages = cargoMetadata.packages; + let cargoPackageName; + if (this.cargoName) { + cargoPackageName = this.cargoName; + } + else { + const root = cargoMetadata.resolve.root; + if (root) { + const rootPackage = packages.find((p) => p.id === root); + cargoPackageName = rootPackage.name; + } + else { + throw new TypeError('No package.name field in Cargo.toml'); + } + } + const cargoPackage = packages.find((p) => p.name === cargoPackageName); + if (!this.bin && + ((_a = cargoPackage === null || cargoPackage === void 0 ? void 0 : cargoPackage.targets) === null || _a === void 0 ? void 0 : _a.length) === 1 && + (cargoPackage === null || cargoPackage === void 0 ? void 0 : cargoPackage.targets[0].kind.length) === 1 && + (cargoPackage === null || cargoPackage === void 0 ? void 0 : cargoPackage.targets[0].kind[0]) === 'bin') { + this.bin = cargoPackageName; + } + const releaseFlag = this.isRelease ? `--release` : ''; + const targetFlag = this.targetTripleDir + ? `--target ${this.targetTripleDir}` + : ''; + const featuresFlag = this.features ? `--features ${this.features}` : ''; + const binFlag = this.bin ? `--bin ${this.bin}` : ''; + const triple = this.targetTripleDir + ? parseTriple(this.targetTripleDir) + : getHostTargetTriple(); + const envTarget = triple.raw.replaceAll('-', '_').toUpperCase(); + debug$8(`Current triple is: ${green(triple.raw)}`); + const pFlag = this.project ? `-p ${this.project}` : ''; + const profileFlag = this.profile ? `--profile ${this.profile}` : ''; + const externalFlags = [ + releaseFlag, + targetFlag, + featuresFlag, + binFlag, + pFlag, + profileFlag, + this.cargoFlags, + ] + .filter((flag) => Boolean(flag)) + .join(' '); + const additionalEnv = {}; + const isCrossForWin = triple.platform === 'win32' && process.platform !== 'win32'; + const isCrossForLinux = triple.platform === 'linux' && + (process.platform !== 'linux' || + triple.arch !== process.arch || + (function () { + var _a, _b, _c; + const glibcVersionRuntime = + // @ts-expect-error + (_c = (_b = (_a = process.report) === null || _a === void 0 ? void 0 : _a.getReport()) === null || _b === void 0 ? void 0 : _b.header) === null || _c === void 0 ? void 0 : _c.glibcVersionRuntime; + const libc = glibcVersionRuntime ? 'gnu' : 'musl'; + return triple.abi !== libc; + })()); + const isCrossForMacOS = triple.platform === 'darwin' && process.platform !== 'darwin'; + const cargo = (_b = process.env.CARGO) !== null && _b !== void 0 ? _b : (isCrossForWin ? 'cargo-xwin' : 'cargo'); + if (isCrossForWin && triple.arch === 'ia32') { + additionalEnv['XWIN_ARCH'] = 'x86'; + } + const cargoCommand = `${cargo} build ${externalFlags}`; + debug$8(`Run ${green(cargoCommand)}`); + const rustflags = process.env.RUSTFLAGS + ? process.env.RUSTFLAGS.split(' ') + : []; + if (triple.raw.includes('musl') && !this.bin) { + if (!rustflags.includes('target-feature=-crt-static')) { + rustflags.push('-C target-feature=-crt-static'); + } + } + if (this.isStrip && !rustflags.includes('-C link-arg=-s')) { + rustflags.push('-C link-arg=-s'); + } + let useZig = false; + if (!this.useZig && + isCrossForLinux && + triple.raw === 'riscv64gc-unknown-linux-gnu') { + // Linking with zig fails for riscv64. Don't default to zig for riscv64. + additionalEnv[`CARGO_TARGET_${envTarget}_LINKER`] = + 'riscv64-linux-gnu-gcc'; + } + else if (this.useZig || isCrossForLinux || isCrossForMacOS) { + try { + require$$1$1.execSync('zig version'); + useZig = true; + } + catch (e) { + if (this.useZig) { + throw new TypeError(`Could not find ${green('zig')} on the PATH`); + } + else { + debug$8(`Could not find ${green('zig')} on the PATH, fallback to normal linker`); + } + } + } + if (useZig) { + const zigABIVersion = (_c = this.zigABIVersion) !== null && _c !== void 0 ? _c : (isCrossForLinux && triple.abi === 'gnu' ? DEFAULT_GLIBC_TARGET : null); + const mappedZigTarget = ZIG_PLATFORM_TARGET_MAP[triple.raw]; + const zigTarget = `${mappedZigTarget}${zigABIVersion ? `.${zigABIVersion}` : ''}`; + debug$8(`Using Zig with target ${green(zigTarget)}`); + if (!mappedZigTarget) { + throw new Error(`${triple.raw} can not be cross compiled by zig`); + } + const paths = envPaths('napi-rs'); + const shellFileExt = process.platform === 'win32' ? 'cmd' : 'sh'; + const linkerWrapperShell = path$1.join(paths.cache, `zig-linker-${triple.raw}.${shellFileExt}`); + const CCWrapperShell = path$1.join(paths.cache, `zig-cc-${triple.raw}.${shellFileExt}`); + const CXXWrapperShell = path$1.join(paths.cache, `zig-cxx-${triple.raw}.${shellFileExt}`); + const linkerWrapper = path$1.join(paths.cache, `zig-cc-${triple.raw}.js`); + require$$0$2.mkdirSync(paths.cache, { recursive: true }); + const forwardArgs = process.platform === 'win32' ? '"%*"' : '$@'; + if (triple.arch === 'arm') { + yield patchArmFeaturesHForArmTargets(); + } + yield writeFileAsync(linkerWrapperShell, process.platform === 'win32' + ? `@IF EXIST "%~dp0\\node.exe" ( + "%~dp0\\node.exe" "${linkerWrapper}" %* +) ELSE ( + @SETLOCAL + @SET PATHEXT=%PATHEXT:;.JS;=;% + node "${linkerWrapper}" %* +)` + : `${SHEBANG_SH}node ${linkerWrapper} ${forwardArgs}`, { + mode: '777', + }); + yield writeFileAsync(CCWrapperShell, `${SHEBANG_SH}node ${linkerWrapper} cc ${forwardArgs}`, { + mode: '777', + }); + yield writeFileAsync(CXXWrapperShell, `${SHEBANG_SH}node ${linkerWrapper} c++ ${forwardArgs}`, { + mode: '777', + }); + yield writeFileAsync(linkerWrapper, `${SHEBANG_NODE}const{writeFileSync} = require('fs')\n${processZigLinkerArgs.toString()}\nconst {status} = require('child_process').spawnSync('zig', [process.argv[2] === "c++" || process.argv[2] === "cc" ? "" : "cc", ...processZigLinkerArgs('${triple.raw}', process.argv.slice(2)), '-target', '${zigTarget}'], { stdio: 'inherit', shell: true })\nwriteFileSync('${linkerWrapper.replaceAll('\\', '/')}.args.log', processZigLinkerArgs('${triple.raw}', process.argv.slice(2)).join(' '))\n\nprocess.exit(status || 0)\n`, { + mode: '777', + }); + if (!this.zigLinkOnly) { + Object.assign(additionalEnv, { + CC: CCWrapperShell, + CXX: CXXWrapperShell, + TARGET_CC: CCWrapperShell, + TARGET_CXX: CXXWrapperShell, + }); + } + additionalEnv[`CARGO_TARGET_${envTarget}_LINKER`] = linkerWrapperShell; + } + debug$8(`Platform: ${JSON.stringify(triple, null, 2)}`); + if (triple.platform === 'android') { + const { ANDROID_NDK_LATEST_HOME } = process.env; + if (!ANDROID_NDK_LATEST_HOME) { + console.info(`${yellow('ANDROID_NDK_LATEST_HOME')} environment variable is missing`); + } + const targetArch = triple.arch === 'arm' ? 'armv7a' : 'aarch64'; + const targetPlatform = triple.arch === 'arm' ? 'androideabi24' : 'android24'; + Object.assign(additionalEnv, { + CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER: `${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/${targetArch}-linux-android24-clang`, + CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER: `${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/${targetArch}-linux-androideabi24-clang`, + CC: `${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/${targetArch}-linux-${targetPlatform}-clang`, + CXX: `${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/${targetArch}-linux-${targetPlatform}-clang++`, + AR: `${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar`, + RANLIB: `${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib`, + ANDROID_NDK: ANDROID_NDK_LATEST_HOME, + PATH: `${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin:${process.env.PATH}`, + }); + } + const { binaryName, packageName, tsConstEnum: tsConstEnumFromConfig, } = getNapiConfig(this.configFileName); + const tsConstEnum = (_e = (_d = this.constEnum) !== null && _d !== void 0 ? _d : tsConstEnumFromConfig) !== null && _e !== void 0 ? _e : true; + if (triple.platform === 'wasi') { + try { + const emnapiDir = require.resolve('emnapi'); + const linkDir = path$1.join(emnapiDir, '..', 'lib', 'wasm32-wasi'); + additionalEnv['EMNAPI_LINK_DIR'] = linkDir; + rustflags.push('-Z wasi-exec-model=reactor'); + } + catch (e) { + const err = new Error(`Could not find emnapi, please install emnapi`); + err.cause = e; + throw err; + } + } + if (rustflags.length > 0) { + additionalEnv['RUSTFLAGS'] = rustflags.join(' '); + } + let cargoArtifactName = this.cargoName; + if (!cargoArtifactName) { + if (this.bin) { + cargoArtifactName = cargoPackageName; + } + else { + cargoArtifactName = cargoPackageName.replace(/-/g, '_'); + } + if (!this.bin && + !cargoPackage.targets.some((target) => target.crate_types.includes('cdylib'))) { + throw new TypeError(`Missing ${green('crate-type = ["cdylib"]')} in ${green('[lib]')}`); + } + } + if (this.bin) { + debug$8(`Binary name: ${greenBright(cargoArtifactName)}`); + } + else { + debug$8(`Dylib name: ${greenBright(cargoArtifactName)}`); + } + const cwdSha = require$$2$1.createHash('sha256') + .update(process.cwd()) + .update(version$1) + .digest('hex') + .substring(0, 8); + const intermediateTypeFile = path$1.join(os.tmpdir(), `${cargoArtifactName}-${cwdSha}.napi_type_def.tmp`); + const intermediateWasiRegisterFile = path$1.join(os.tmpdir(), `${cargoArtifactName}-${cwdSha}.napi_wasi_register.tmp`); + debug$8(`intermediate type def file: ${intermediateTypeFile}`); + const commandEnv = Object.assign(Object.assign(Object.assign({}, process.env), additionalEnv), { TYPE_DEF_TMP_PATH: intermediateTypeFile, WASI_REGISTER_TMP_PATH: intermediateWasiRegisterFile, CARGO_CFG_NAPI_RS_CLI_VERSION: version$1 }); + try { + require$$1$1.execSync(cargoCommand, { + env: commandEnv, + stdio: 'inherit', + cwd, + }); + } + catch (e) { + if (cargo === 'cargo-xwin') { + console.warn(`You are cross compiling ${underline(triple.raw)} target on ${green(process.platform)} host`); + } + else if (isCrossForLinux || isCrossForMacOS) { + console.warn(`You are cross compiling ${underline(triple.raw)} on ${green(process.platform)} host`); + } + throw e; + } + const platform = triple.platform; + let libExt = ''; + debug$8(`Platform: ${greenBright(platform)}`); + // Platform based massaging for build commands + if (!this.bin) { + switch (platform) { + case 'darwin': + libExt = '.dylib'; + cargoArtifactName = `lib${cargoArtifactName}`; + break; + case 'win32': + libExt = '.dll'; + break; + case 'linux': + case 'freebsd': + case 'openbsd': + case 'android': + case 'sunos': + cargoArtifactName = `lib${cargoArtifactName}`; + libExt = '.so'; + break; + default: + throw new TypeError('Operating system not currently supported or recognized by the build script'); + } + } + const targetRootDir = + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing + process.env.CARGO_TARGET_DIR || + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing + process.env.CARGO_BUILD_TARGET_DIR || + (yield findUp(cwd)); + if (!targetRootDir) { + throw new TypeError('No target dir found'); + } + const targetDir = path$1.join(this.targetTripleDir, (_f = this.profile) !== null && _f !== void 0 ? _f : (this.isRelease ? 'release' : 'debug')); + const platformName = this.appendPlatformToFilename + ? `.${triple.platformArchABI}` + : ''; + debug$8(`Platform name: ${platformName || green('[Empty]')}`); + const distFileName = this.bin + ? cargoArtifactName + : `${binaryName}${platformName}.node`; + const distModulePath = path$1.join((_g = this.destDir) !== null && _g !== void 0 ? _g : '.', distFileName); + const parsedDist = path$1.parse(distModulePath); + if (parsedDist.dir && !require$$0$2.existsSync(parsedDist.dir)) { + yield mkdirAsync(parsedDist.dir, { recursive: true }).catch((e) => { + console.warn(bgYellowBright(`Create dir [${parsedDist.dir}] failed, reason: ${e.message}`)); + }); + } + const sourcePath = path$1.join(targetRootDir, targetDir, `${cargoArtifactName}${libExt}`); + if (require$$0$2.existsSync(distModulePath)) { + debug$8(`remove old binary [${yellowBright(distModulePath)}]`); + yield unlinkAsync(distModulePath); + } + debug$8(`Write binary content to [${yellowBright(distModulePath)}]`); + yield copyFileAsync(sourcePath, distModulePath); + if (!this.bin) { + const dtsFilePath = path$1.join(process.cwd(), (_h = this.destDir) !== null && _h !== void 0 ? _h : '.', (_j = this.dts) !== null && _j !== void 0 ? _j : 'index.d.ts'); + const jsBindingFilePath = this.jsBinding && + this.jsBinding !== 'false' && + this.appendPlatformToFilename + ? path$1.join(process.cwd(), (_k = this.destDir) !== null && _k !== void 0 ? _k : '.', this.jsBinding) + : null; + const idents = yield processIntermediateTypeFile(intermediateTypeFile, dtsFilePath, this.noDtsHeader, tsConstEnum); + yield writeJsBinding(binaryName, (_l = this.jsPackageName) !== null && _l !== void 0 ? _l : packageName, jsBindingFilePath, idents); + if (this.pipe) { + if (jsBindingFilePath) { + const pipeCommand = `${this.pipe} ${jsBindingFilePath}`; + console.info(`Run ${green(pipeCommand)}`); + try { + require$$1$1.execSync(pipeCommand, { stdio: 'inherit', env: commandEnv }); + } + catch (e) { + console.warn(bgYellowBright('Pipe the js binding file to command failed'), e); + } + } + const pipeCommand = `${this.pipe} ${dtsFilePath}`; + console.info(`Run ${green(pipeCommand)}`); + try { + require$$1$1.execSync(pipeCommand, { stdio: 'inherit', env: commandEnv }); + } + catch (e) { + console.warn(bgYellowBright('Pipe the dts file to command failed'), e); + } + } + } + }); + } +} +BuildCommand.usage = Command.Usage({ + description: 'Build and copy native module into specified dir', +}); +BuildCommand.paths = [['build']]; +function findUp(dir = process.cwd()) { + return __awaiter$1(this, void 0, void 0, function* () { + const dist = path$1.join(dir, 'target'); + if (require$$0$2.existsSync(dist)) { + return dist; + } + const dirs = dir.split(path$1.sep); + if (dirs.length < 2) { + return null; + } + dirs.pop(); + return findUp(dirs.join(path$1.sep)); + }); +} +function processIntermediateTypeFile(source, target, noDtsHeader, tsConstEnum) { + return __awaiter$1(this, void 0, void 0, function* () { + const idents = []; + if (!require$$0$2.existsSync(source)) { + debug$8(`do not find tmp type file. skip type generation`); + return idents; + } + const tmpFile = yield readFileAsync(source, 'utf8'); + const lines = tmpFile + .split('\n') + .map((line) => line.trim()) + .filter(Boolean) + .map((line) => { + // compatible with old version + if (line.startsWith('{')) { + return line; + } + else { + const [_crateName, ...rest] = line.split(':'); + return rest.join(':'); + } + }); + if (!lines.length) { + return idents; + } + // Deduplicate lines, to account for macros being possibly evaluated more than once: + const uniqueLines = [...new Set(lines)]; + const allDefs = uniqueLines.map((line) => JSON.parse(line)); + function convertDefs(defs, nested = false) { + const classes = new Map(); + const impls = new Map(); + let dts = ''; + const nest = nested ? 2 : 0; + defs.forEach((def) => { + switch (def.kind) { + case 'struct': + if (!nested) { + idents.push(def.name); + } + classes.set(def.name, { + original_name: def.original_name, + def: def.def, + js_doc: def.js_doc, + }); + break; + case 'impl': + const existed = impls.get(def.name); + impls.set(def.name, `${existed ? existed + '\n' : ''}${def.js_doc}${def.def}`); + break; + case 'interface': + dts += + indentLines(`${def.js_doc}export interface ${def.name} {`, nest) + + '\n'; + dts += indentLines(def.def, nest + 2) + '\n'; + dts += indentLines(`}`, nest) + '\n'; + break; + case 'enum': + if (!nested) { + idents.push(def.name); + } + const enumPrefix = tsConstEnum ? ' const' : ''; + dts += + indentLines(`${def.js_doc}export${enumPrefix} enum ${def.name} {`, nest) + '\n'; + dts += indentLines(def.def, nest + 2) + '\n'; + dts += indentLines(`}`, nest) + '\n'; + break; + default: + if (!nested) { + idents.push(def.name); + } + dts += indentLines(`${def.js_doc}${def.def}`, nest) + '\n'; + } + }); + for (const [name, { js_doc, def, original_name }] of classes.entries()) { + const implDef = impls.get(name); + if (original_name && name !== original_name) { + dts += indentLines(`export type ${original_name} = ${name}\n`, nest); + } + const maybeDeclare = nested ? ' ' : ' declare '; + dts += indentLines(`${js_doc}export${maybeDeclare}class ${name} {`, nest); + if (def) { + dts += '\n' + indentLines(def, nest + 2); + } + if (implDef) { + dts += '\n' + indentLines(implDef, nest + 2); + } + if (def || implDef) { + dts += '\n'; + } + else { + dts += ` `; + } + dts += indentLines(`}`, nest) + '\n'; + } + return dts; + } + const topLevelDef = convertDefs(allDefs.filter((def) => !def.js_mod)); + const namespaceDefs = Object.entries(groupBy$3(allDefs.filter((def) => def.js_mod), 'js_mod')).reduce((acc, [mod, defs]) => { + idents.push(mod); + return (acc + `export declare namespace ${mod} {\n${convertDefs(defs, true)}}\n`); + }, ''); + const dtsHeader = noDtsHeader + ? '' + : `/* tslint:disable */ +/* eslint-disable */ + +/* auto-generated by NAPI-RS */\n +`; + const externalDef = topLevelDef.indexOf('ExternalObject<') > -1 || + namespaceDefs.indexOf('ExternalObject<') > -1 + ? `export declare class ExternalObject { + readonly '': { + readonly '': unique symbol + [K: symbol]: T + } +}\n` + : ''; + yield writeFileAsync(target, dtsHeader + externalDef + topLevelDef + namespaceDefs, 'utf8'); + return idents; + }); +} +function indentLines(input, spaces) { + return input + .split('\n') + .map((line) => ''.padEnd(spaces, ' ') + + (line.startsWith(' *') ? line.trimEnd() : line.trim())) + .join('\n'); +} +function writeJsBinding(localName, packageName, distFileName, idents) { + return __awaiter$1(this, void 0, void 0, function* () { + if (distFileName && idents.length) { + const template = createJsBinding(localName, packageName); + const declareCodes = `const { ${idents.join(', ')} } = nativeBinding\n`; + const exportsCode = idents.reduce((acc, cur) => `${acc}\nmodule.exports.${cur} = ${cur}`, ''); + yield writeFileAsync(distFileName, template + declareCodes + exportsCode + '\n', 'utf8'); + } + }); +} +function patchArmFeaturesHForArmTargets() { + return __awaiter$1(this, void 0, void 0, function* () { + let zigExePath; + let zigLibDir; + try { + const zigEnv = JSON.parse(require$$1$1.execSync(`zig env`, { encoding: 'utf8' }).trim()); + zigExePath = zigEnv['zig_exe']; + zigLibDir = zigEnv['lib_dir']; + } + catch (e) { + throw new Error('Cannot get zig env correctly, please ensure the zig is installed correctly on your system'); + } + try { + const p = zigLibDir + ? path$1.join(zigLibDir, 'libc/glibc/sysdeps/arm/arm-features.h') + : path$1.join(zigExePath, '../lib/libc/glibc/sysdeps/arm/arm-features.h'); + if (!require$$0$2.existsSync(p)) { + yield writeFileAsync(p, ARM_FEATURES_H, { + mode: 0o644, + }); + } + } + catch (e) { + console.error(Error(`Cannot patch arm-features.h, error: ${e.message || e}. See: https://github.com/ziglang/zig/issues/3287`)); + } + }); +} + +var _a; +const debug$7 = debugFactory('create-npm-dir'); +class CreateNpmDirCommand extends Command { + constructor() { + super(...arguments); + this.targetDir = String$1('-t,--target'); + this.config = String$1('-c,--config', 'package.json'); + } + execute() { + return __awaiter$1(this, void 0, void 0, function* () { + yield _a.create(this.config, path$1.join(process.cwd(), this.targetDir), process.cwd()); + }); + } +} +_a = CreateNpmDirCommand; +CreateNpmDirCommand.usage = Command.Usage({ + description: 'Create npm packages dir for platforms', +}); +CreateNpmDirCommand.paths = [['create-npm-dir']]; +CreateNpmDirCommand.create = (config, targetDirPath, cwd) => __awaiter$1(void 0, void 0, void 0, function* () { + const pkgJsonDir = config; + debug$7(`Read content from [${yellowBright(pkgJsonDir)}]`); + const { platforms, packageName, version, binaryName, content } = getNapiConfig(pkgJsonDir, cwd); + for (const platformDetail of platforms) { + const targetDir = path$1.join(targetDirPath, 'npm', `${platformDetail.platformArchABI}`); + require$$0$2.mkdirSync(targetDir, { + recursive: true, + }); + const binaryFileName = `${binaryName}.${platformDetail.platformArchABI}.node`; + const targetPackageJson = path$1.join(targetDir, 'package.json'); + debug$7(`Write file [${yellowBright(targetPackageJson)}]`); + const packageJson = Object.assign({ name: `${packageName}-${platformDetail.platformArchABI}`, version, os: [platformDetail.platform], cpu: platformDetail.arch !== 'universal' + ? [platformDetail.arch] + : undefined, main: binaryFileName, files: [binaryFileName] }, pick(content, 'description', 'keywords', 'author', 'authors', 'homepage', 'license', 'engines', 'publishConfig', 'repository', 'bugs')); + // Only works with yarn 3.1+ + // https://github.com/yarnpkg/berry/pull/3981 + if (platformDetail.abi === 'gnu') { + packageJson.libc = ['glibc']; + } + else if (platformDetail.abi === 'musl') { + packageJson.libc = ['musl']; + } + yield writeFileAsync(targetPackageJson, JSON.stringify(packageJson, null, 2)); + const targetReadme = path$1.join(targetDir, 'README.md'); + debug$7(`Write target README.md [${yellowBright(targetReadme)}]`); + yield writeFileAsync(targetReadme, readme(packageName, platformDetail)); + } +}); +function readme(packageName, platformDetail) { + return `# \`${packageName}-${platformDetail.platformArchABI}\` + +This is the **${platformDetail.raw}** binary for \`${packageName}\` +`; +} + +/** + * A command that prints the usage of all commands. + * + * Paths: `-h`, `--help` + */ +class HelpCommand extends Command { + execute() { + return __awaiter$1(this, void 0, void 0, function* () { + yield this.context.stdout.write(this.cli.usage()); + }); + } +} +HelpCommand.paths = [[`-h`], [`--help`]]; + +var ansiEscapes$1 = {exports: {}}; + +(function (module) { + const ansiEscapes = module.exports; + // TODO: remove this in the next major version + module.exports.default = ansiEscapes; + + const ESC = '\u001B['; + const OSC = '\u001B]'; + const BEL = '\u0007'; + const SEP = ';'; + const isTerminalApp = process.env.TERM_PROGRAM === 'Apple_Terminal'; + + ansiEscapes.cursorTo = (x, y) => { + if (typeof x !== 'number') { + throw new TypeError('The `x` argument is required'); + } + + if (typeof y !== 'number') { + return ESC + (x + 1) + 'G'; + } + + return ESC + (y + 1) + ';' + (x + 1) + 'H'; + }; + + ansiEscapes.cursorMove = (x, y) => { + if (typeof x !== 'number') { + throw new TypeError('The `x` argument is required'); + } + + let ret = ''; + + if (x < 0) { + ret += ESC + (-x) + 'D'; + } else if (x > 0) { + ret += ESC + x + 'C'; + } + + if (y < 0) { + ret += ESC + (-y) + 'A'; + } else if (y > 0) { + ret += ESC + y + 'B'; + } + + return ret; + }; + + ansiEscapes.cursorUp = (count = 1) => ESC + count + 'A'; + ansiEscapes.cursorDown = (count = 1) => ESC + count + 'B'; + ansiEscapes.cursorForward = (count = 1) => ESC + count + 'C'; + ansiEscapes.cursorBackward = (count = 1) => ESC + count + 'D'; + + ansiEscapes.cursorLeft = ESC + 'G'; + ansiEscapes.cursorSavePosition = isTerminalApp ? '\u001B7' : ESC + 's'; + ansiEscapes.cursorRestorePosition = isTerminalApp ? '\u001B8' : ESC + 'u'; + ansiEscapes.cursorGetPosition = ESC + '6n'; + ansiEscapes.cursorNextLine = ESC + 'E'; + ansiEscapes.cursorPrevLine = ESC + 'F'; + ansiEscapes.cursorHide = ESC + '?25l'; + ansiEscapes.cursorShow = ESC + '?25h'; + + ansiEscapes.eraseLines = count => { + let clear = ''; + + for (let i = 0; i < count; i++) { + clear += ansiEscapes.eraseLine + (i < count - 1 ? ansiEscapes.cursorUp() : ''); + } + + if (count) { + clear += ansiEscapes.cursorLeft; + } + + return clear; + }; + + ansiEscapes.eraseEndLine = ESC + 'K'; + ansiEscapes.eraseStartLine = ESC + '1K'; + ansiEscapes.eraseLine = ESC + '2K'; + ansiEscapes.eraseDown = ESC + 'J'; + ansiEscapes.eraseUp = ESC + '1J'; + ansiEscapes.eraseScreen = ESC + '2J'; + ansiEscapes.scrollUp = ESC + 'S'; + ansiEscapes.scrollDown = ESC + 'T'; + + ansiEscapes.clearScreen = '\u001Bc'; + + ansiEscapes.clearTerminal = process.platform === 'win32' ? + `${ansiEscapes.eraseScreen}${ESC}0f` : + // 1. Erases the screen (Only done in case `2` is not supported) + // 2. Erases the whole screen including scrollback buffer + // 3. Moves cursor to the top-left position + // More info: https://www.real-world-systems.com/docs/ANSIcode.html + `${ansiEscapes.eraseScreen}${ESC}3J${ESC}H`; + + ansiEscapes.beep = BEL; + + ansiEscapes.link = (text, url) => { + return [ + OSC, + '8', + SEP, + SEP, + url, + BEL, + text, + OSC, + '8', + SEP, + SEP, + BEL + ].join(''); + }; + + ansiEscapes.image = (buffer, options = {}) => { + let ret = `${OSC}1337;File=inline=1`; + + if (options.width) { + ret += `;width=${options.width}`; + } + + if (options.height) { + ret += `;height=${options.height}`; + } + + if (options.preserveAspectRatio === false) { + ret += ';preserveAspectRatio=0'; + } + + return ret + ':' + buffer.toString('base64') + BEL; + }; + + ansiEscapes.iTerm = { + setCwd: (cwd = process.cwd()) => `${OSC}50;CurrentDir=${cwd}${BEL}`, + + annotation: (message, options = {}) => { + let ret = `${OSC}1337;`; + + const hasX = typeof options.x !== 'undefined'; + const hasY = typeof options.y !== 'undefined'; + if ((hasX || hasY) && !(hasX && hasY && typeof options.length !== 'undefined')) { + throw new Error('`x`, `y` and `length` must be defined when `x` or `y` is defined'); + } + + message = message.replace(/\|/g, ''); + + ret += options.isHidden ? 'AddHiddenAnnotation=' : 'AddAnnotation='; + + if (options.length > 0) { + ret += + (hasX ? + [message, options.length, options.x, options.y] : + [options.length, message]).join('|'); + } else { + ret += message; + } + + return ret + BEL; + } + }; +} (ansiEscapes$1)); + +var ansiEscapesExports = ansiEscapes$1.exports; +var ansiEscapes = /*@__PURE__*/getDefaultExportFromCjs(ansiEscapesExports); + +const tty = tty$1; + +// eslint-disable-next-line no-warning-comments +// TODO: Use a better method when it's added to Node.js (https://github.com/nodejs/node/pull/40240) +const hasColors = tty.WriteStream.prototype.hasColors(); + +const format = (open, close) => { + if (!hasColors) { + return input => input; + } + + const openCode = `\u001B[${open}m`; + const closeCode = `\u001B[${close}m`; + + return input => { + const string = input + ''; // eslint-disable-line no-implicit-coercion -- This is faster. + let index = string.indexOf(closeCode); + + if (index === -1) { + // Note: Intentionally not using string interpolation for performance reasons. + return openCode + string + closeCode; + } + + // Handle nested colors. + + // We could have done this, but it's too slow (as of Node.js 22). + // return openCode + string.replaceAll(closeCode, openCode) + closeCode; + + let result = openCode; + let lastIndex = 0; + + while (index !== -1) { + result += string.slice(lastIndex, index) + openCode; + lastIndex = index + closeCode.length; + index = string.indexOf(closeCode, lastIndex); + } + + result += string.slice(lastIndex) + closeCode; + + return result; + }; +}; + +const colors = {}; + +colors.reset = format(0, 0); +colors.bold = format(1, 22); +colors.dim = format(2, 22); +colors.italic = format(3, 23); +colors.underline = format(4, 24); +colors.overline = format(53, 55); +colors.inverse = format(7, 27); +colors.hidden = format(8, 28); +colors.strikethrough = format(9, 29); + +colors.black = format(30, 39); +colors.red = format(31, 39); +colors.green = format(32, 39); +colors.yellow = format(33, 39); +colors.blue = format(34, 39); +colors.magenta = format(35, 39); +colors.cyan = format(36, 39); +colors.white = format(37, 39); +colors.gray = format(90, 39); + +colors.bgBlack = format(40, 49); +colors.bgRed = format(41, 49); +colors.bgGreen = format(42, 49); +colors.bgYellow = format(43, 49); +colors.bgBlue = format(44, 49); +colors.bgMagenta = format(45, 49); +colors.bgCyan = format(46, 49); +colors.bgWhite = format(47, 49); +colors.bgGray = format(100, 49); + +colors.redBright = format(91, 39); +colors.greenBright = format(92, 39); +colors.yellowBright = format(93, 39); +colors.blueBright = format(94, 39); +colors.magentaBright = format(95, 39); +colors.cyanBright = format(96, 39); +colors.whiteBright = format(97, 39); + +colors.bgRedBright = format(101, 49); +colors.bgGreenBright = format(102, 49); +colors.bgYellowBright = format(103, 49); +colors.bgBlueBright = format(104, 49); +colors.bgMagentaBright = format(105, 49); +colors.bgCyanBright = format(106, 49); +colors.bgWhiteBright = format(107, 49); + +var yoctocolorsCjs = colors; + +var colors$1 = /*@__PURE__*/getDefaultExportFromCjs(yoctocolorsCjs); + +// process.env dot-notation access prints: +// Property 'TERM' comes from an index signature, so it must be accessed with ['TERM'].ts(4111) +/* eslint dot-notation: ["off"] */ +// Ported from is-unicode-supported +function isUnicodeSupported$3() { + if (process$4.platform !== 'win32') { + return process$4.env['TERM'] !== 'linux'; // Linux console (kernel) + } + return (Boolean(process$4.env['WT_SESSION']) || // Windows Terminal + Boolean(process$4.env['TERMINUS_SUBLIME']) || // Terminus (<0.2.27) + process$4.env['ConEmuTask'] === '{cmd::Cmder}' || // ConEmu and cmder + process$4.env['TERM_PROGRAM'] === 'Terminus-Sublime' || + process$4.env['TERM_PROGRAM'] === 'vscode' || + process$4.env['TERM'] === 'xterm-256color' || + process$4.env['TERM'] === 'alacritty' || + process$4.env['TERMINAL_EMULATOR'] === 'JetBrains-JediTerm'); +} +// Ported from figures +const common$1 = { + circleQuestionMark: '(?)', + questionMarkPrefix: '(?)', + square: '█', + squareDarkShade: '▓', + squareMediumShade: '▒', + squareLightShade: '░', + squareTop: '▀', + squareBottom: '▄', + squareLeft: '▌', + squareRight: '▐', + squareCenter: '■', + bullet: '●', + dot: '․', + ellipsis: '…', + pointerSmall: '›', + triangleUp: '▲', + triangleUpSmall: '▴', + triangleDown: '▼', + triangleDownSmall: '▾', + triangleLeftSmall: '◂', + triangleRightSmall: '▸', + home: '⌂', + heart: '♥', + musicNote: '♪', + musicNoteBeamed: '♫', + arrowUp: '↑', + arrowDown: '↓', + arrowLeft: '←', + arrowRight: '→', + arrowLeftRight: '↔', + arrowUpDown: '↕', + almostEqual: '≈', + notEqual: '≠', + lessOrEqual: '≤', + greaterOrEqual: '≥', + identical: '≡', + infinity: '∞', + subscriptZero: '₀', + subscriptOne: '₁', + subscriptTwo: '₂', + subscriptThree: '₃', + subscriptFour: '₄', + subscriptFive: '₅', + subscriptSix: '₆', + subscriptSeven: '₇', + subscriptEight: '₈', + subscriptNine: '₉', + oneHalf: '½', + oneThird: '⅓', + oneQuarter: '¼', + oneFifth: '⅕', + oneSixth: '⅙', + oneEighth: '⅛', + twoThirds: '⅔', + twoFifths: '⅖', + threeQuarters: '¾', + threeFifths: '⅗', + threeEighths: '⅜', + fourFifths: '⅘', + fiveSixths: '⅚', + fiveEighths: '⅝', + sevenEighths: '⅞', + line: '─', + lineBold: '━', + lineDouble: '═', + lineDashed0: '┄', + lineDashed1: '┅', + lineDashed2: '┈', + lineDashed3: '┉', + lineDashed4: '╌', + lineDashed5: '╍', + lineDashed6: '╴', + lineDashed7: '╶', + lineDashed8: '╸', + lineDashed9: '╺', + lineDashed10: '╼', + lineDashed11: '╾', + lineDashed12: '−', + lineDashed13: '–', + lineDashed14: '‐', + lineDashed15: '⁃', + lineVertical: '│', + lineVerticalBold: '┃', + lineVerticalDouble: '║', + lineVerticalDashed0: '┆', + lineVerticalDashed1: '┇', + lineVerticalDashed2: '┊', + lineVerticalDashed3: '┋', + lineVerticalDashed4: '╎', + lineVerticalDashed5: '╏', + lineVerticalDashed6: '╵', + lineVerticalDashed7: '╷', + lineVerticalDashed8: '╹', + lineVerticalDashed9: '╻', + lineVerticalDashed10: '╽', + lineVerticalDashed11: '╿', + lineDownLeft: '┐', + lineDownLeftArc: '╮', + lineDownBoldLeftBold: '┓', + lineDownBoldLeft: '┒', + lineDownLeftBold: '┑', + lineDownDoubleLeftDouble: '╗', + lineDownDoubleLeft: '╖', + lineDownLeftDouble: '╕', + lineDownRight: '┌', + lineDownRightArc: '╭', + lineDownBoldRightBold: '┏', + lineDownBoldRight: '┎', + lineDownRightBold: '┍', + lineDownDoubleRightDouble: '╔', + lineDownDoubleRight: '╓', + lineDownRightDouble: '╒', + lineUpLeft: '┘', + lineUpLeftArc: '╯', + lineUpBoldLeftBold: '┛', + lineUpBoldLeft: '┚', + lineUpLeftBold: '┙', + lineUpDoubleLeftDouble: '╝', + lineUpDoubleLeft: '╜', + lineUpLeftDouble: '╛', + lineUpRight: '└', + lineUpRightArc: '╰', + lineUpBoldRightBold: '┗', + lineUpBoldRight: '┖', + lineUpRightBold: '┕', + lineUpDoubleRightDouble: '╚', + lineUpDoubleRight: '╙', + lineUpRightDouble: '╘', + lineUpDownLeft: '┤', + lineUpBoldDownBoldLeftBold: '┫', + lineUpBoldDownBoldLeft: '┨', + lineUpDownLeftBold: '┥', + lineUpBoldDownLeftBold: '┩', + lineUpDownBoldLeftBold: '┪', + lineUpDownBoldLeft: '┧', + lineUpBoldDownLeft: '┦', + lineUpDoubleDownDoubleLeftDouble: '╣', + lineUpDoubleDownDoubleLeft: '╢', + lineUpDownLeftDouble: '╡', + lineUpDownRight: '├', + lineUpBoldDownBoldRightBold: '┣', + lineUpBoldDownBoldRight: '┠', + lineUpDownRightBold: '┝', + lineUpBoldDownRightBold: '┡', + lineUpDownBoldRightBold: '┢', + lineUpDownBoldRight: '┟', + lineUpBoldDownRight: '┞', + lineUpDoubleDownDoubleRightDouble: '╠', + lineUpDoubleDownDoubleRight: '╟', + lineUpDownRightDouble: '╞', + lineDownLeftRight: '┬', + lineDownBoldLeftBoldRightBold: '┳', + lineDownLeftBoldRightBold: '┯', + lineDownBoldLeftRight: '┰', + lineDownBoldLeftBoldRight: '┱', + lineDownBoldLeftRightBold: '┲', + lineDownLeftRightBold: '┮', + lineDownLeftBoldRight: '┭', + lineDownDoubleLeftDoubleRightDouble: '╦', + lineDownDoubleLeftRight: '╥', + lineDownLeftDoubleRightDouble: '╤', + lineUpLeftRight: '┴', + lineUpBoldLeftBoldRightBold: '┻', + lineUpLeftBoldRightBold: '┷', + lineUpBoldLeftRight: '┸', + lineUpBoldLeftBoldRight: '┹', + lineUpBoldLeftRightBold: '┺', + lineUpLeftRightBold: '┶', + lineUpLeftBoldRight: '┵', + lineUpDoubleLeftDoubleRightDouble: '╩', + lineUpDoubleLeftRight: '╨', + lineUpLeftDoubleRightDouble: '╧', + lineUpDownLeftRight: '┼', + lineUpBoldDownBoldLeftBoldRightBold: '╋', + lineUpDownBoldLeftBoldRightBold: '╈', + lineUpBoldDownLeftBoldRightBold: '╇', + lineUpBoldDownBoldLeftRightBold: '╊', + lineUpBoldDownBoldLeftBoldRight: '╉', + lineUpBoldDownLeftRight: '╀', + lineUpDownBoldLeftRight: '╁', + lineUpDownLeftBoldRight: '┽', + lineUpDownLeftRightBold: '┾', + lineUpBoldDownBoldLeftRight: '╂', + lineUpDownLeftBoldRightBold: '┿', + lineUpBoldDownLeftBoldRight: '╃', + lineUpBoldDownLeftRightBold: '╄', + lineUpDownBoldLeftBoldRight: '╅', + lineUpDownBoldLeftRightBold: '╆', + lineUpDoubleDownDoubleLeftDoubleRightDouble: '╬', + lineUpDoubleDownDoubleLeftRight: '╫', + lineUpDownLeftDoubleRightDouble: '╪', + lineCross: '╳', + lineBackslash: '╲', + lineSlash: '╱', +}; +const specialMainSymbols = { + tick: '✔', + info: 'ℹ', + warning: '⚠', + cross: '✘', + squareSmall: '◻', + squareSmallFilled: '◼', + circle: '◯', + circleFilled: '◉', + circleDotted: '◌', + circleDouble: '◎', + circleCircle: 'ⓞ', + circleCross: 'ⓧ', + circlePipe: 'Ⓘ', + radioOn: '◉', + radioOff: '◯', + checkboxOn: '☒', + checkboxOff: '☐', + checkboxCircleOn: 'ⓧ', + checkboxCircleOff: 'Ⓘ', + pointer: '❯', + triangleUpOutline: '△', + triangleLeft: '◀', + triangleRight: '▶', + lozenge: '◆', + lozengeOutline: '◇', + hamburger: '☰', + smiley: '㋡', + mustache: '෴', + star: '★', + play: '▶', + nodejs: '⬢', + oneSeventh: '⅐', + oneNinth: '⅑', + oneTenth: '⅒', +}; +const specialFallbackSymbols = { + tick: '√', + info: 'i', + warning: '‼', + cross: '×', + squareSmall: '□', + squareSmallFilled: '■', + circle: '( )', + circleFilled: '(*)', + circleDotted: '( )', + circleDouble: '( )', + circleCircle: '(○)', + circleCross: '(×)', + circlePipe: '(│)', + radioOn: '(*)', + radioOff: '( )', + checkboxOn: '[×]', + checkboxOff: '[ ]', + checkboxCircleOn: '(×)', + checkboxCircleOff: '( )', + pointer: '>', + triangleUpOutline: '∆', + triangleLeft: '◄', + triangleRight: '►', + lozenge: '♦', + lozengeOutline: '◊', + hamburger: '≡', + smiley: '☺', + mustache: '┌─┐', + star: '✶', + play: '►', + nodejs: '♦', + oneSeventh: '1/7', + oneNinth: '1/9', + oneTenth: '1/10', +}; +const mainSymbols = { ...common$1, ...specialMainSymbols }; +const fallbackSymbols = { + ...common$1, + ...specialFallbackSymbols, +}; +const shouldUseMain = isUnicodeSupported$3(); +const figures = shouldUseMain ? mainSymbols : fallbackSymbols; + +var runAsync$2 = {exports: {}}; + +function isPromise$2(obj) { + return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function'; +} + +/** + * Return a function that will run a function asynchronously or synchronously + * + * example: + * runAsync(wrappedFunction, callback)(...args); + * + * @param {Function} func Function to run + * @param {Function} [cb] Callback function passed the `func` returned value + * @param {string} [proxyProperty] `this` property to be used for the callback factory + * @return {Function(arguments)} Arguments to pass to `func`. This function will in turn + * return a Promise (Node >= 0.12) or call the callbacks. + */ + +var runAsync = runAsync$2.exports = function (func, cb, proxyProperty = 'async') { + if (typeof cb === 'string') { + proxyProperty = cb; + cb = undefined; + } + cb = cb || function () {}; + + return function () { + + var args = arguments; + var originalThis = this; + + var promise = new Promise(function (resolve, reject) { + var resolved = false; + const wrappedResolve = function (value) { + if (resolved) { + console.warn('Run-async promise already resolved.'); + } + resolved = true; + resolve(value); + }; + + var rejected = false; + const wrappedReject = function (value) { + if (rejected) { + console.warn('Run-async promise already rejected.'); + } + rejected = true; + reject(value); + }; + + var usingCallback = false; + var callbackConflict = false; + var contextEnded = false; + + var doneFactory = function () { + if (contextEnded) { + console.warn('Run-async async() called outside a valid run-async context, callback will be ignored.'); + return function() {}; + } + if (callbackConflict) { + console.warn('Run-async wrapped function (async) returned a promise.\nCalls to async() callback can have unexpected results.'); + } + usingCallback = true; + return function (err, value) { + if (err) { + wrappedReject(err); + } else { + wrappedResolve(value); + } + }; + }; + + var _this; + if (originalThis && proxyProperty && Proxy) { + _this = new Proxy(originalThis, { + get(_target, prop) { + if (prop === proxyProperty) { + if (prop in _target) { + console.warn(`${proxyProperty} property is been shadowed by run-sync`); + } + return doneFactory; + } + + return Reflect.get(...arguments); + }, + }); + } else { + _this = { [proxyProperty]: doneFactory }; + } + + var answer = func.apply(_this, Array.prototype.slice.call(args)); + + if (usingCallback) { + if (isPromise$2(answer)) { + console.warn('Run-async wrapped function (sync) returned a promise but async() callback must be executed to resolve.'); + } + } else { + if (isPromise$2(answer)) { + callbackConflict = true; + answer.then(wrappedResolve, wrappedReject); + } else { + wrappedResolve(answer); + } + } + contextEnded = true; + }); + + promise.then(cb.bind(null, null), cb); + + return promise; + } +}; + +runAsync.cb = function (func, cb) { + return runAsync(function () { + var args = Array.prototype.slice.call(arguments); + if (args.length === func.length - 1) { + args.push(this.async()); + } + return func.apply(this, args); + }, cb); +}; + +var runAsyncExports = runAsync$2.exports; +var runAsync$1 = /*@__PURE__*/getDefaultExportFromCjs(runAsyncExports); + +var cjs = {}; + +var Observable$1 = {}; + +var Subscriber = {}; + +var isFunction$1 = {}; + +Object.defineProperty(isFunction$1, "__esModule", { value: true }); +isFunction$1.isFunction = void 0; +function isFunction(value) { + return typeof value === 'function'; +} +isFunction$1.isFunction = isFunction; + +var Subscription$1 = {}; + +var UnsubscriptionError = {}; + +var createErrorClass$1 = {}; + +Object.defineProperty(createErrorClass$1, "__esModule", { value: true }); +createErrorClass$1.createErrorClass = void 0; +function createErrorClass(createImpl) { + var _super = function (instance) { + Error.call(instance); + instance.stack = new Error().stack; + }; + var ctorFunc = createImpl(_super); + ctorFunc.prototype = Object.create(Error.prototype); + ctorFunc.prototype.constructor = ctorFunc; + return ctorFunc; +} +createErrorClass$1.createErrorClass = createErrorClass; + +Object.defineProperty(UnsubscriptionError, "__esModule", { value: true }); +UnsubscriptionError.UnsubscriptionError = void 0; +var createErrorClass_1$5 = createErrorClass$1; +UnsubscriptionError.UnsubscriptionError = createErrorClass_1$5.createErrorClass(function (_super) { + return function UnsubscriptionErrorImpl(errors) { + _super(this); + this.message = errors + ? errors.length + " errors occurred during unsubscription:\n" + errors.map(function (err, i) { return i + 1 + ") " + err.toString(); }).join('\n ') + : ''; + this.name = 'UnsubscriptionError'; + this.errors = errors; + }; +}); + +var arrRemove$1 = {}; + +Object.defineProperty(arrRemove$1, "__esModule", { value: true }); +arrRemove$1.arrRemove = void 0; +function arrRemove(arr, item) { + if (arr) { + var index = arr.indexOf(item); + 0 <= index && arr.splice(index, 1); + } +} +arrRemove$1.arrRemove = arrRemove; + +var __values$8 = (commonjsGlobal && commonjsGlobal.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +var __read$h = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray$g = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +Object.defineProperty(Subscription$1, "__esModule", { value: true }); +Subscription$1.isSubscription = Subscription$1.EMPTY_SUBSCRIPTION = Subscription$1.Subscription = void 0; +var isFunction_1$p = isFunction$1; +var UnsubscriptionError_1 = UnsubscriptionError; +var arrRemove_1$7 = arrRemove$1; +var Subscription = (function () { + function Subscription(initialTeardown) { + this.initialTeardown = initialTeardown; + this.closed = false; + this._parentage = null; + this._finalizers = null; + } + Subscription.prototype.unsubscribe = function () { + var e_1, _a, e_2, _b; + var errors; + if (!this.closed) { + this.closed = true; + var _parentage = this._parentage; + if (_parentage) { + this._parentage = null; + if (Array.isArray(_parentage)) { + try { + for (var _parentage_1 = __values$8(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) { + var parent_1 = _parentage_1_1.value; + parent_1.remove(this); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return)) _a.call(_parentage_1); + } + finally { if (e_1) throw e_1.error; } + } + } + else { + _parentage.remove(this); + } + } + var initialFinalizer = this.initialTeardown; + if (isFunction_1$p.isFunction(initialFinalizer)) { + try { + initialFinalizer(); + } + catch (e) { + errors = e instanceof UnsubscriptionError_1.UnsubscriptionError ? e.errors : [e]; + } + } + var _finalizers = this._finalizers; + if (_finalizers) { + this._finalizers = null; + try { + for (var _finalizers_1 = __values$8(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) { + var finalizer = _finalizers_1_1.value; + try { + execFinalizer(finalizer); + } + catch (err) { + errors = errors !== null && errors !== void 0 ? errors : []; + if (err instanceof UnsubscriptionError_1.UnsubscriptionError) { + errors = __spreadArray$g(__spreadArray$g([], __read$h(errors)), __read$h(err.errors)); + } + else { + errors.push(err); + } + } + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return)) _b.call(_finalizers_1); + } + finally { if (e_2) throw e_2.error; } + } + } + if (errors) { + throw new UnsubscriptionError_1.UnsubscriptionError(errors); + } + } + }; + Subscription.prototype.add = function (teardown) { + var _a; + if (teardown && teardown !== this) { + if (this.closed) { + execFinalizer(teardown); + } + else { + if (teardown instanceof Subscription) { + if (teardown.closed || teardown._hasParent(this)) { + return; + } + teardown._addParent(this); + } + (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown); + } + } + }; + Subscription.prototype._hasParent = function (parent) { + var _parentage = this._parentage; + return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent)); + }; + Subscription.prototype._addParent = function (parent) { + var _parentage = this._parentage; + this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent; + }; + Subscription.prototype._removeParent = function (parent) { + var _parentage = this._parentage; + if (_parentage === parent) { + this._parentage = null; + } + else if (Array.isArray(_parentage)) { + arrRemove_1$7.arrRemove(_parentage, parent); + } + }; + Subscription.prototype.remove = function (teardown) { + var _finalizers = this._finalizers; + _finalizers && arrRemove_1$7.arrRemove(_finalizers, teardown); + if (teardown instanceof Subscription) { + teardown._removeParent(this); + } + }; + Subscription.EMPTY = (function () { + var empty = new Subscription(); + empty.closed = true; + return empty; + })(); + return Subscription; +}()); +Subscription$1.Subscription = Subscription; +Subscription$1.EMPTY_SUBSCRIPTION = Subscription.EMPTY; +function isSubscription(value) { + return (value instanceof Subscription || + (value && 'closed' in value && isFunction_1$p.isFunction(value.remove) && isFunction_1$p.isFunction(value.add) && isFunction_1$p.isFunction(value.unsubscribe))); +} +Subscription$1.isSubscription = isSubscription; +function execFinalizer(finalizer) { + if (isFunction_1$p.isFunction(finalizer)) { + finalizer(); + } + else { + finalizer.unsubscribe(); + } +} + +var config = {}; + +Object.defineProperty(config, "__esModule", { value: true }); +config.config = void 0; +config.config = { + onUnhandledError: null, + onStoppedNotification: null, + Promise: undefined, + useDeprecatedSynchronousErrorHandling: false, + useDeprecatedNextContext: false, +}; + +var reportUnhandledError$1 = {}; + +var timeoutProvider = {}; + +(function (exports) { + var __read = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; + }; + var __spreadArray = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.timeoutProvider = void 0; + exports.timeoutProvider = { + setTimeout: function (handler, timeout) { + var args = []; + for (var _i = 2; _i < arguments.length; _i++) { + args[_i - 2] = arguments[_i]; + } + var delegate = exports.timeoutProvider.delegate; + if (delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) { + return delegate.setTimeout.apply(delegate, __spreadArray([handler, timeout], __read(args))); + } + return setTimeout.apply(void 0, __spreadArray([handler, timeout], __read(args))); + }, + clearTimeout: function (handle) { + var delegate = exports.timeoutProvider.delegate; + return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle); + }, + delegate: undefined, + }; + +} (timeoutProvider)); + +Object.defineProperty(reportUnhandledError$1, "__esModule", { value: true }); +reportUnhandledError$1.reportUnhandledError = void 0; +var config_1$2 = config; +var timeoutProvider_1 = timeoutProvider; +function reportUnhandledError(err) { + timeoutProvider_1.timeoutProvider.setTimeout(function () { + var onUnhandledError = config_1$2.config.onUnhandledError; + if (onUnhandledError) { + onUnhandledError(err); + } + else { + throw err; + } + }); +} +reportUnhandledError$1.reportUnhandledError = reportUnhandledError; + +var noop$2 = {}; + +Object.defineProperty(noop$2, "__esModule", { value: true }); +noop$2.noop = void 0; +function noop$1() { } +noop$2.noop = noop$1; + +var NotificationFactories = {}; + +Object.defineProperty(NotificationFactories, "__esModule", { value: true }); +NotificationFactories.createNotification = NotificationFactories.nextNotification = NotificationFactories.errorNotification = NotificationFactories.COMPLETE_NOTIFICATION = void 0; +NotificationFactories.COMPLETE_NOTIFICATION = (function () { return createNotification('C', undefined, undefined); })(); +function errorNotification(error) { + return createNotification('E', undefined, error); +} +NotificationFactories.errorNotification = errorNotification; +function nextNotification(value) { + return createNotification('N', value, undefined); +} +NotificationFactories.nextNotification = nextNotification; +function createNotification(kind, value, error) { + return { + kind: kind, + value: value, + error: error, + }; +} +NotificationFactories.createNotification = createNotification; + +var errorContext$1 = {}; + +Object.defineProperty(errorContext$1, "__esModule", { value: true }); +errorContext$1.captureError = errorContext$1.errorContext = void 0; +var config_1$1 = config; +var context = null; +function errorContext(cb) { + if (config_1$1.config.useDeprecatedSynchronousErrorHandling) { + var isRoot = !context; + if (isRoot) { + context = { errorThrown: false, error: null }; + } + cb(); + if (isRoot) { + var _a = context, errorThrown = _a.errorThrown, error = _a.error; + context = null; + if (errorThrown) { + throw error; + } + } + } + else { + cb(); + } +} +errorContext$1.errorContext = errorContext; +function captureError(err) { + if (config_1$1.config.useDeprecatedSynchronousErrorHandling && context) { + context.errorThrown = true; + context.error = err; + } +} +errorContext$1.captureError = captureError; + +(function (exports) { + var __extends = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(exports, "__esModule", { value: true }); + exports.EMPTY_OBSERVER = exports.SafeSubscriber = exports.Subscriber = void 0; + var isFunction_1 = isFunction$1; + var Subscription_1 = Subscription$1; + var config_1 = config; + var reportUnhandledError_1 = reportUnhandledError$1; + var noop_1 = noop$2; + var NotificationFactories_1 = NotificationFactories; + var timeoutProvider_1 = timeoutProvider; + var errorContext_1 = errorContext$1; + var Subscriber = (function (_super) { + __extends(Subscriber, _super); + function Subscriber(destination) { + var _this = _super.call(this) || this; + _this.isStopped = false; + if (destination) { + _this.destination = destination; + if (Subscription_1.isSubscription(destination)) { + destination.add(_this); + } + } + else { + _this.destination = exports.EMPTY_OBSERVER; + } + return _this; + } + Subscriber.create = function (next, error, complete) { + return new SafeSubscriber(next, error, complete); + }; + Subscriber.prototype.next = function (value) { + if (this.isStopped) { + handleStoppedNotification(NotificationFactories_1.nextNotification(value), this); + } + else { + this._next(value); + } + }; + Subscriber.prototype.error = function (err) { + if (this.isStopped) { + handleStoppedNotification(NotificationFactories_1.errorNotification(err), this); + } + else { + this.isStopped = true; + this._error(err); + } + }; + Subscriber.prototype.complete = function () { + if (this.isStopped) { + handleStoppedNotification(NotificationFactories_1.COMPLETE_NOTIFICATION, this); + } + else { + this.isStopped = true; + this._complete(); + } + }; + Subscriber.prototype.unsubscribe = function () { + if (!this.closed) { + this.isStopped = true; + _super.prototype.unsubscribe.call(this); + this.destination = null; + } + }; + Subscriber.prototype._next = function (value) { + this.destination.next(value); + }; + Subscriber.prototype._error = function (err) { + try { + this.destination.error(err); + } + finally { + this.unsubscribe(); + } + }; + Subscriber.prototype._complete = function () { + try { + this.destination.complete(); + } + finally { + this.unsubscribe(); + } + }; + return Subscriber; + }(Subscription_1.Subscription)); + exports.Subscriber = Subscriber; + var _bind = Function.prototype.bind; + function bind(fn, thisArg) { + return _bind.call(fn, thisArg); + } + var ConsumerObserver = (function () { + function ConsumerObserver(partialObserver) { + this.partialObserver = partialObserver; + } + ConsumerObserver.prototype.next = function (value) { + var partialObserver = this.partialObserver; + if (partialObserver.next) { + try { + partialObserver.next(value); + } + catch (error) { + handleUnhandledError(error); + } + } + }; + ConsumerObserver.prototype.error = function (err) { + var partialObserver = this.partialObserver; + if (partialObserver.error) { + try { + partialObserver.error(err); + } + catch (error) { + handleUnhandledError(error); + } + } + else { + handleUnhandledError(err); + } + }; + ConsumerObserver.prototype.complete = function () { + var partialObserver = this.partialObserver; + if (partialObserver.complete) { + try { + partialObserver.complete(); + } + catch (error) { + handleUnhandledError(error); + } + } + }; + return ConsumerObserver; + }()); + var SafeSubscriber = (function (_super) { + __extends(SafeSubscriber, _super); + function SafeSubscriber(observerOrNext, error, complete) { + var _this = _super.call(this) || this; + var partialObserver; + if (isFunction_1.isFunction(observerOrNext) || !observerOrNext) { + partialObserver = { + next: (observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : undefined), + error: error !== null && error !== void 0 ? error : undefined, + complete: complete !== null && complete !== void 0 ? complete : undefined, + }; + } + else { + var context_1; + if (_this && config_1.config.useDeprecatedNextContext) { + context_1 = Object.create(observerOrNext); + context_1.unsubscribe = function () { return _this.unsubscribe(); }; + partialObserver = { + next: observerOrNext.next && bind(observerOrNext.next, context_1), + error: observerOrNext.error && bind(observerOrNext.error, context_1), + complete: observerOrNext.complete && bind(observerOrNext.complete, context_1), + }; + } + else { + partialObserver = observerOrNext; + } + } + _this.destination = new ConsumerObserver(partialObserver); + return _this; + } + return SafeSubscriber; + }(Subscriber)); + exports.SafeSubscriber = SafeSubscriber; + function handleUnhandledError(error) { + if (config_1.config.useDeprecatedSynchronousErrorHandling) { + errorContext_1.captureError(error); + } + else { + reportUnhandledError_1.reportUnhandledError(error); + } + } + function defaultErrorHandler(err) { + throw err; + } + function handleStoppedNotification(notification, subscriber) { + var onStoppedNotification = config_1.config.onStoppedNotification; + onStoppedNotification && timeoutProvider_1.timeoutProvider.setTimeout(function () { return onStoppedNotification(notification, subscriber); }); + } + exports.EMPTY_OBSERVER = { + closed: true, + next: noop_1.noop, + error: defaultErrorHandler, + complete: noop_1.noop, + }; + +} (Subscriber)); + +var observable = {}; + +Object.defineProperty(observable, "__esModule", { value: true }); +observable.observable = void 0; +observable.observable = (function () { return (typeof Symbol === 'function' && Symbol.observable) || '@@observable'; })(); + +var pipe$2 = {}; + +var identity$1 = {}; + +Object.defineProperty(identity$1, "__esModule", { value: true }); +identity$1.identity = void 0; +function identity(x) { + return x; +} +identity$1.identity = identity; + +Object.defineProperty(pipe$2, "__esModule", { value: true }); +pipe$2.pipeFromArray = pipe$2.pipe = void 0; +var identity_1$e = identity$1; +function pipe$1() { + var fns = []; + for (var _i = 0; _i < arguments.length; _i++) { + fns[_i] = arguments[_i]; + } + return pipeFromArray(fns); +} +pipe$2.pipe = pipe$1; +function pipeFromArray(fns) { + if (fns.length === 0) { + return identity_1$e.identity; + } + if (fns.length === 1) { + return fns[0]; + } + return function piped(input) { + return fns.reduce(function (prev, fn) { return fn(prev); }, input); + }; +} +pipe$2.pipeFromArray = pipeFromArray; + +Object.defineProperty(Observable$1, "__esModule", { value: true }); +Observable$1.Observable = void 0; +var Subscriber_1$3 = Subscriber; +var Subscription_1$8 = Subscription$1; +var observable_1$2 = observable; +var pipe_1$2 = pipe$2; +var config_1 = config; +var isFunction_1$o = isFunction$1; +var errorContext_1$1 = errorContext$1; +var Observable = (function () { + function Observable(subscribe) { + if (subscribe) { + this._subscribe = subscribe; + } + } + Observable.prototype.lift = function (operator) { + var observable = new Observable(); + observable.source = this; + observable.operator = operator; + return observable; + }; + Observable.prototype.subscribe = function (observerOrNext, error, complete) { + var _this = this; + var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new Subscriber_1$3.SafeSubscriber(observerOrNext, error, complete); + errorContext_1$1.errorContext(function () { + var _a = _this, operator = _a.operator, source = _a.source; + subscriber.add(operator + ? + operator.call(subscriber, source) + : source + ? + _this._subscribe(subscriber) + : + _this._trySubscribe(subscriber)); + }); + return subscriber; + }; + Observable.prototype._trySubscribe = function (sink) { + try { + return this._subscribe(sink); + } + catch (err) { + sink.error(err); + } + }; + Observable.prototype.forEach = function (next, promiseCtor) { + var _this = this; + promiseCtor = getPromiseCtor(promiseCtor); + return new promiseCtor(function (resolve, reject) { + var subscriber = new Subscriber_1$3.SafeSubscriber({ + next: function (value) { + try { + next(value); + } + catch (err) { + reject(err); + subscriber.unsubscribe(); + } + }, + error: reject, + complete: resolve, + }); + _this.subscribe(subscriber); + }); + }; + Observable.prototype._subscribe = function (subscriber) { + var _a; + return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber); + }; + Observable.prototype[observable_1$2.observable] = function () { + return this; + }; + Observable.prototype.pipe = function () { + var operations = []; + for (var _i = 0; _i < arguments.length; _i++) { + operations[_i] = arguments[_i]; + } + return pipe_1$2.pipeFromArray(operations)(this); + }; + Observable.prototype.toPromise = function (promiseCtor) { + var _this = this; + promiseCtor = getPromiseCtor(promiseCtor); + return new promiseCtor(function (resolve, reject) { + var value; + _this.subscribe(function (x) { return (value = x); }, function (err) { return reject(err); }, function () { return resolve(value); }); + }); + }; + Observable.create = function (subscribe) { + return new Observable(subscribe); + }; + return Observable; +}()); +Observable$1.Observable = Observable; +function getPromiseCtor(promiseCtor) { + var _a; + return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config_1.config.Promise) !== null && _a !== void 0 ? _a : Promise; +} +function isObserver(value) { + return value && isFunction_1$o.isFunction(value.next) && isFunction_1$o.isFunction(value.error) && isFunction_1$o.isFunction(value.complete); +} +function isSubscriber(value) { + return (value && value instanceof Subscriber_1$3.Subscriber) || (isObserver(value) && Subscription_1$8.isSubscription(value)); +} + +var ConnectableObservable$1 = {}; + +var refCount$1 = {}; + +var lift = {}; + +Object.defineProperty(lift, "__esModule", { value: true }); +lift.operate = lift.hasLift = void 0; +var isFunction_1$n = isFunction$1; +function hasLift(source) { + return isFunction_1$n.isFunction(source === null || source === void 0 ? void 0 : source.lift); +} +lift.hasLift = hasLift; +function operate(init) { + return function (source) { + if (hasLift(source)) { + return source.lift(function (liftedSource) { + try { + return init(liftedSource, this); + } + catch (err) { + this.error(err); + } + }); + } + throw new TypeError('Unable to lift unknown Observable type'); + }; +} +lift.operate = operate; + +var OperatorSubscriber$1 = {}; + +var __extends$j = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(OperatorSubscriber$1, "__esModule", { value: true }); +OperatorSubscriber$1.OperatorSubscriber = OperatorSubscriber$1.createOperatorSubscriber = void 0; +var Subscriber_1$2 = Subscriber; +function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) { + return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize); +} +OperatorSubscriber$1.createOperatorSubscriber = createOperatorSubscriber; +var OperatorSubscriber = (function (_super) { + __extends$j(OperatorSubscriber, _super); + function OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) { + var _this = _super.call(this, destination) || this; + _this.onFinalize = onFinalize; + _this.shouldUnsubscribe = shouldUnsubscribe; + _this._next = onNext + ? function (value) { + try { + onNext(value); + } + catch (err) { + destination.error(err); + } + } + : _super.prototype._next; + _this._error = onError + ? function (err) { + try { + onError(err); + } + catch (err) { + destination.error(err); + } + finally { + this.unsubscribe(); + } + } + : _super.prototype._error; + _this._complete = onComplete + ? function () { + try { + onComplete(); + } + catch (err) { + destination.error(err); + } + finally { + this.unsubscribe(); + } + } + : _super.prototype._complete; + return _this; + } + OperatorSubscriber.prototype.unsubscribe = function () { + var _a; + if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) { + var closed_1 = this.closed; + _super.prototype.unsubscribe.call(this); + !closed_1 && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this)); + } + }; + return OperatorSubscriber; +}(Subscriber_1$2.Subscriber)); +OperatorSubscriber$1.OperatorSubscriber = OperatorSubscriber; + +Object.defineProperty(refCount$1, "__esModule", { value: true }); +refCount$1.refCount = void 0; +var lift_1$14 = lift; +var OperatorSubscriber_1$V = OperatorSubscriber$1; +function refCount() { + return lift_1$14.operate(function (source, subscriber) { + var connection = null; + source._refCount++; + var refCounter = OperatorSubscriber_1$V.createOperatorSubscriber(subscriber, undefined, undefined, undefined, function () { + if (!source || source._refCount <= 0 || 0 < --source._refCount) { + connection = null; + return; + } + var sharedConnection = source._connection; + var conn = connection; + connection = null; + if (sharedConnection && (!conn || sharedConnection === conn)) { + sharedConnection.unsubscribe(); + } + subscriber.unsubscribe(); + }); + source.subscribe(refCounter); + if (!refCounter.closed) { + connection = source.connect(); + } + }); +} +refCount$1.refCount = refCount; + +var __extends$i = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(ConnectableObservable$1, "__esModule", { value: true }); +ConnectableObservable$1.ConnectableObservable = void 0; +var Observable_1$n = Observable$1; +var Subscription_1$7 = Subscription$1; +var refCount_1 = refCount$1; +var OperatorSubscriber_1$U = OperatorSubscriber$1; +var lift_1$13 = lift; +var ConnectableObservable = (function (_super) { + __extends$i(ConnectableObservable, _super); + function ConnectableObservable(source, subjectFactory) { + var _this = _super.call(this) || this; + _this.source = source; + _this.subjectFactory = subjectFactory; + _this._subject = null; + _this._refCount = 0; + _this._connection = null; + if (lift_1$13.hasLift(source)) { + _this.lift = source.lift; + } + return _this; + } + ConnectableObservable.prototype._subscribe = function (subscriber) { + return this.getSubject().subscribe(subscriber); + }; + ConnectableObservable.prototype.getSubject = function () { + var subject = this._subject; + if (!subject || subject.isStopped) { + this._subject = this.subjectFactory(); + } + return this._subject; + }; + ConnectableObservable.prototype._teardown = function () { + this._refCount = 0; + var _connection = this._connection; + this._subject = this._connection = null; + _connection === null || _connection === void 0 ? void 0 : _connection.unsubscribe(); + }; + ConnectableObservable.prototype.connect = function () { + var _this = this; + var connection = this._connection; + if (!connection) { + connection = this._connection = new Subscription_1$7.Subscription(); + var subject_1 = this.getSubject(); + connection.add(this.source.subscribe(OperatorSubscriber_1$U.createOperatorSubscriber(subject_1, undefined, function () { + _this._teardown(); + subject_1.complete(); + }, function (err) { + _this._teardown(); + subject_1.error(err); + }, function () { return _this._teardown(); }))); + if (connection.closed) { + this._connection = null; + connection = Subscription_1$7.Subscription.EMPTY; + } + } + return connection; + }; + ConnectableObservable.prototype.refCount = function () { + return refCount_1.refCount()(this); + }; + return ConnectableObservable; +}(Observable_1$n.Observable)); +ConnectableObservable$1.ConnectableObservable = ConnectableObservable; + +var animationFrames$1 = {}; + +var performanceTimestampProvider = {}; + +(function (exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.performanceTimestampProvider = void 0; + exports.performanceTimestampProvider = { + now: function () { + return (exports.performanceTimestampProvider.delegate || performance).now(); + }, + delegate: undefined, + }; + +} (performanceTimestampProvider)); + +var animationFrameProvider = {}; + +(function (exports) { + var __read = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; + }; + var __spreadArray = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.animationFrameProvider = void 0; + var Subscription_1 = Subscription$1; + exports.animationFrameProvider = { + schedule: function (callback) { + var request = requestAnimationFrame; + var cancel = cancelAnimationFrame; + var delegate = exports.animationFrameProvider.delegate; + if (delegate) { + request = delegate.requestAnimationFrame; + cancel = delegate.cancelAnimationFrame; + } + var handle = request(function (timestamp) { + cancel = undefined; + callback(timestamp); + }); + return new Subscription_1.Subscription(function () { return cancel === null || cancel === void 0 ? void 0 : cancel(handle); }); + }, + requestAnimationFrame: function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var delegate = exports.animationFrameProvider.delegate; + return ((delegate === null || delegate === void 0 ? void 0 : delegate.requestAnimationFrame) || requestAnimationFrame).apply(void 0, __spreadArray([], __read(args))); + }, + cancelAnimationFrame: function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var delegate = exports.animationFrameProvider.delegate; + return ((delegate === null || delegate === void 0 ? void 0 : delegate.cancelAnimationFrame) || cancelAnimationFrame).apply(void 0, __spreadArray([], __read(args))); + }, + delegate: undefined, + }; + +} (animationFrameProvider)); + +Object.defineProperty(animationFrames$1, "__esModule", { value: true }); +animationFrames$1.animationFrames = void 0; +var Observable_1$m = Observable$1; +var performanceTimestampProvider_1 = performanceTimestampProvider; +var animationFrameProvider_1$1 = animationFrameProvider; +function animationFrames(timestampProvider) { + return timestampProvider ? animationFramesFactory(timestampProvider) : DEFAULT_ANIMATION_FRAMES; +} +animationFrames$1.animationFrames = animationFrames; +function animationFramesFactory(timestampProvider) { + return new Observable_1$m.Observable(function (subscriber) { + var provider = timestampProvider || performanceTimestampProvider_1.performanceTimestampProvider; + var start = provider.now(); + var id = 0; + var run = function () { + if (!subscriber.closed) { + id = animationFrameProvider_1$1.animationFrameProvider.requestAnimationFrame(function (timestamp) { + id = 0; + var now = provider.now(); + subscriber.next({ + timestamp: timestampProvider ? now : timestamp, + elapsed: now - start, + }); + run(); + }); + } + }; + run(); + return function () { + if (id) { + animationFrameProvider_1$1.animationFrameProvider.cancelAnimationFrame(id); + } + }; + }); +} +var DEFAULT_ANIMATION_FRAMES = animationFramesFactory(); + +var Subject$1 = {}; + +var ObjectUnsubscribedError = {}; + +Object.defineProperty(ObjectUnsubscribedError, "__esModule", { value: true }); +ObjectUnsubscribedError.ObjectUnsubscribedError = void 0; +var createErrorClass_1$4 = createErrorClass$1; +ObjectUnsubscribedError.ObjectUnsubscribedError = createErrorClass_1$4.createErrorClass(function (_super) { + return function ObjectUnsubscribedErrorImpl() { + _super(this); + this.name = 'ObjectUnsubscribedError'; + this.message = 'object unsubscribed'; + }; +}); + +var __extends$h = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __values$7 = (commonjsGlobal && commonjsGlobal.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(Subject$1, "__esModule", { value: true }); +Subject$1.AnonymousSubject = Subject$1.Subject = void 0; +var Observable_1$l = Observable$1; +var Subscription_1$6 = Subscription$1; +var ObjectUnsubscribedError_1 = ObjectUnsubscribedError; +var arrRemove_1$6 = arrRemove$1; +var errorContext_1 = errorContext$1; +var Subject = (function (_super) { + __extends$h(Subject, _super); + function Subject() { + var _this = _super.call(this) || this; + _this.closed = false; + _this.currentObservers = null; + _this.observers = []; + _this.isStopped = false; + _this.hasError = false; + _this.thrownError = null; + return _this; + } + Subject.prototype.lift = function (operator) { + var subject = new AnonymousSubject(this, this); + subject.operator = operator; + return subject; + }; + Subject.prototype._throwIfClosed = function () { + if (this.closed) { + throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError(); + } + }; + Subject.prototype.next = function (value) { + var _this = this; + errorContext_1.errorContext(function () { + var e_1, _a; + _this._throwIfClosed(); + if (!_this.isStopped) { + if (!_this.currentObservers) { + _this.currentObservers = Array.from(_this.observers); + } + try { + for (var _b = __values$7(_this.currentObservers), _c = _b.next(); !_c.done; _c = _b.next()) { + var observer = _c.value; + observer.next(value); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + } + }); + }; + Subject.prototype.error = function (err) { + var _this = this; + errorContext_1.errorContext(function () { + _this._throwIfClosed(); + if (!_this.isStopped) { + _this.hasError = _this.isStopped = true; + _this.thrownError = err; + var observers = _this.observers; + while (observers.length) { + observers.shift().error(err); + } + } + }); + }; + Subject.prototype.complete = function () { + var _this = this; + errorContext_1.errorContext(function () { + _this._throwIfClosed(); + if (!_this.isStopped) { + _this.isStopped = true; + var observers = _this.observers; + while (observers.length) { + observers.shift().complete(); + } + } + }); + }; + Subject.prototype.unsubscribe = function () { + this.isStopped = this.closed = true; + this.observers = this.currentObservers = null; + }; + Object.defineProperty(Subject.prototype, "observed", { + get: function () { + var _a; + return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0; + }, + enumerable: false, + configurable: true + }); + Subject.prototype._trySubscribe = function (subscriber) { + this._throwIfClosed(); + return _super.prototype._trySubscribe.call(this, subscriber); + }; + Subject.prototype._subscribe = function (subscriber) { + this._throwIfClosed(); + this._checkFinalizedStatuses(subscriber); + return this._innerSubscribe(subscriber); + }; + Subject.prototype._innerSubscribe = function (subscriber) { + var _this = this; + var _a = this, hasError = _a.hasError, isStopped = _a.isStopped, observers = _a.observers; + if (hasError || isStopped) { + return Subscription_1$6.EMPTY_SUBSCRIPTION; + } + this.currentObservers = null; + observers.push(subscriber); + return new Subscription_1$6.Subscription(function () { + _this.currentObservers = null; + arrRemove_1$6.arrRemove(observers, subscriber); + }); + }; + Subject.prototype._checkFinalizedStatuses = function (subscriber) { + var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, isStopped = _a.isStopped; + if (hasError) { + subscriber.error(thrownError); + } + else if (isStopped) { + subscriber.complete(); + } + }; + Subject.prototype.asObservable = function () { + var observable = new Observable_1$l.Observable(); + observable.source = this; + return observable; + }; + Subject.create = function (destination, source) { + return new AnonymousSubject(destination, source); + }; + return Subject; +}(Observable_1$l.Observable)); +Subject$1.Subject = Subject; +var AnonymousSubject = (function (_super) { + __extends$h(AnonymousSubject, _super); + function AnonymousSubject(destination, source) { + var _this = _super.call(this) || this; + _this.destination = destination; + _this.source = source; + return _this; + } + AnonymousSubject.prototype.next = function (value) { + var _a, _b; + (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value); + }; + AnonymousSubject.prototype.error = function (err) { + var _a, _b; + (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err); + }; + AnonymousSubject.prototype.complete = function () { + var _a, _b; + (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a); + }; + AnonymousSubject.prototype._subscribe = function (subscriber) { + var _a, _b; + return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : Subscription_1$6.EMPTY_SUBSCRIPTION; + }; + return AnonymousSubject; +}(Subject)); +Subject$1.AnonymousSubject = AnonymousSubject; + +var BehaviorSubject$1 = {}; + +var __extends$g = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(BehaviorSubject$1, "__esModule", { value: true }); +BehaviorSubject$1.BehaviorSubject = void 0; +var Subject_1$e = Subject$1; +var BehaviorSubject = (function (_super) { + __extends$g(BehaviorSubject, _super); + function BehaviorSubject(_value) { + var _this = _super.call(this) || this; + _this._value = _value; + return _this; + } + Object.defineProperty(BehaviorSubject.prototype, "value", { + get: function () { + return this.getValue(); + }, + enumerable: false, + configurable: true + }); + BehaviorSubject.prototype._subscribe = function (subscriber) { + var subscription = _super.prototype._subscribe.call(this, subscriber); + !subscription.closed && subscriber.next(this._value); + return subscription; + }; + BehaviorSubject.prototype.getValue = function () { + var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, _value = _a._value; + if (hasError) { + throw thrownError; + } + this._throwIfClosed(); + return _value; + }; + BehaviorSubject.prototype.next = function (value) { + _super.prototype.next.call(this, (this._value = value)); + }; + return BehaviorSubject; +}(Subject_1$e.Subject)); +BehaviorSubject$1.BehaviorSubject = BehaviorSubject; + +var ReplaySubject$1 = {}; + +var dateTimestampProvider = {}; + +(function (exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.dateTimestampProvider = void 0; + exports.dateTimestampProvider = { + now: function () { + return (exports.dateTimestampProvider.delegate || Date).now(); + }, + delegate: undefined, + }; + +} (dateTimestampProvider)); + +var __extends$f = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(ReplaySubject$1, "__esModule", { value: true }); +ReplaySubject$1.ReplaySubject = void 0; +var Subject_1$d = Subject$1; +var dateTimestampProvider_1$2 = dateTimestampProvider; +var ReplaySubject = (function (_super) { + __extends$f(ReplaySubject, _super); + function ReplaySubject(_bufferSize, _windowTime, _timestampProvider) { + if (_bufferSize === void 0) { _bufferSize = Infinity; } + if (_windowTime === void 0) { _windowTime = Infinity; } + if (_timestampProvider === void 0) { _timestampProvider = dateTimestampProvider_1$2.dateTimestampProvider; } + var _this = _super.call(this) || this; + _this._bufferSize = _bufferSize; + _this._windowTime = _windowTime; + _this._timestampProvider = _timestampProvider; + _this._buffer = []; + _this._infiniteTimeWindow = true; + _this._infiniteTimeWindow = _windowTime === Infinity; + _this._bufferSize = Math.max(1, _bufferSize); + _this._windowTime = Math.max(1, _windowTime); + return _this; + } + ReplaySubject.prototype.next = function (value) { + var _a = this, isStopped = _a.isStopped, _buffer = _a._buffer, _infiniteTimeWindow = _a._infiniteTimeWindow, _timestampProvider = _a._timestampProvider, _windowTime = _a._windowTime; + if (!isStopped) { + _buffer.push(value); + !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime); + } + this._trimBuffer(); + _super.prototype.next.call(this, value); + }; + ReplaySubject.prototype._subscribe = function (subscriber) { + this._throwIfClosed(); + this._trimBuffer(); + var subscription = this._innerSubscribe(subscriber); + var _a = this, _infiniteTimeWindow = _a._infiniteTimeWindow, _buffer = _a._buffer; + var copy = _buffer.slice(); + for (var i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) { + subscriber.next(copy[i]); + } + this._checkFinalizedStatuses(subscriber); + return subscription; + }; + ReplaySubject.prototype._trimBuffer = function () { + var _a = this, _bufferSize = _a._bufferSize, _timestampProvider = _a._timestampProvider, _buffer = _a._buffer, _infiniteTimeWindow = _a._infiniteTimeWindow; + var adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize; + _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize); + if (!_infiniteTimeWindow) { + var now = _timestampProvider.now(); + var last = 0; + for (var i = 1; i < _buffer.length && _buffer[i] <= now; i += 2) { + last = i; + } + last && _buffer.splice(0, last + 1); + } + }; + return ReplaySubject; +}(Subject_1$d.Subject)); +ReplaySubject$1.ReplaySubject = ReplaySubject; + +var AsyncSubject$1 = {}; + +var __extends$e = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(AsyncSubject$1, "__esModule", { value: true }); +AsyncSubject$1.AsyncSubject = void 0; +var Subject_1$c = Subject$1; +var AsyncSubject = (function (_super) { + __extends$e(AsyncSubject, _super); + function AsyncSubject() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._value = null; + _this._hasValue = false; + _this._isComplete = false; + return _this; + } + AsyncSubject.prototype._checkFinalizedStatuses = function (subscriber) { + var _a = this, hasError = _a.hasError, _hasValue = _a._hasValue, _value = _a._value, thrownError = _a.thrownError, isStopped = _a.isStopped, _isComplete = _a._isComplete; + if (hasError) { + subscriber.error(thrownError); + } + else if (isStopped || _isComplete) { + _hasValue && subscriber.next(_value); + subscriber.complete(); + } + }; + AsyncSubject.prototype.next = function (value) { + if (!this.isStopped) { + this._value = value; + this._hasValue = true; + } + }; + AsyncSubject.prototype.complete = function () { + var _a = this, _hasValue = _a._hasValue, _value = _a._value, _isComplete = _a._isComplete; + if (!_isComplete) { + this._isComplete = true; + _hasValue && _super.prototype.next.call(this, _value); + _super.prototype.complete.call(this); + } + }; + return AsyncSubject; +}(Subject_1$c.Subject)); +AsyncSubject$1.AsyncSubject = AsyncSubject; + +var asap = {}; + +var AsapAction$1 = {}; + +var AsyncAction$1 = {}; + +var Action$1 = {}; + +var __extends$d = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(Action$1, "__esModule", { value: true }); +Action$1.Action = void 0; +var Subscription_1$5 = Subscription$1; +var Action = (function (_super) { + __extends$d(Action, _super); + function Action(scheduler, work) { + return _super.call(this) || this; + } + Action.prototype.schedule = function (state, delay) { + return this; + }; + return Action; +}(Subscription_1$5.Subscription)); +Action$1.Action = Action; + +var intervalProvider = {}; + +(function (exports) { + var __read = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; + }; + var __spreadArray = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.intervalProvider = void 0; + exports.intervalProvider = { + setInterval: function (handler, timeout) { + var args = []; + for (var _i = 2; _i < arguments.length; _i++) { + args[_i - 2] = arguments[_i]; + } + var delegate = exports.intervalProvider.delegate; + if (delegate === null || delegate === void 0 ? void 0 : delegate.setInterval) { + return delegate.setInterval.apply(delegate, __spreadArray([handler, timeout], __read(args))); + } + return setInterval.apply(void 0, __spreadArray([handler, timeout], __read(args))); + }, + clearInterval: function (handle) { + var delegate = exports.intervalProvider.delegate; + return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearInterval) || clearInterval)(handle); + }, + delegate: undefined, + }; + +} (intervalProvider)); + +var __extends$c = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(AsyncAction$1, "__esModule", { value: true }); +AsyncAction$1.AsyncAction = void 0; +var Action_1 = Action$1; +var intervalProvider_1 = intervalProvider; +var arrRemove_1$5 = arrRemove$1; +var AsyncAction = (function (_super) { + __extends$c(AsyncAction, _super); + function AsyncAction(scheduler, work) { + var _this = _super.call(this, scheduler, work) || this; + _this.scheduler = scheduler; + _this.work = work; + _this.pending = false; + return _this; + } + AsyncAction.prototype.schedule = function (state, delay) { + var _a; + if (delay === void 0) { delay = 0; } + if (this.closed) { + return this; + } + this.state = state; + var id = this.id; + var scheduler = this.scheduler; + if (id != null) { + this.id = this.recycleAsyncId(scheduler, id, delay); + } + this.pending = true; + this.delay = delay; + this.id = (_a = this.id) !== null && _a !== void 0 ? _a : this.requestAsyncId(scheduler, this.id, delay); + return this; + }; + AsyncAction.prototype.requestAsyncId = function (scheduler, _id, delay) { + if (delay === void 0) { delay = 0; } + return intervalProvider_1.intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay); + }; + AsyncAction.prototype.recycleAsyncId = function (_scheduler, id, delay) { + if (delay === void 0) { delay = 0; } + if (delay != null && this.delay === delay && this.pending === false) { + return id; + } + if (id != null) { + intervalProvider_1.intervalProvider.clearInterval(id); + } + return undefined; + }; + AsyncAction.prototype.execute = function (state, delay) { + if (this.closed) { + return new Error('executing a cancelled action'); + } + this.pending = false; + var error = this._execute(state, delay); + if (error) { + return error; + } + else if (this.pending === false && this.id != null) { + this.id = this.recycleAsyncId(this.scheduler, this.id, null); + } + }; + AsyncAction.prototype._execute = function (state, _delay) { + var errored = false; + var errorValue; + try { + this.work(state); + } + catch (e) { + errored = true; + errorValue = e ? e : new Error('Scheduled action threw falsy error'); + } + if (errored) { + this.unsubscribe(); + return errorValue; + } + }; + AsyncAction.prototype.unsubscribe = function () { + if (!this.closed) { + var _a = this, id = _a.id, scheduler = _a.scheduler; + var actions = scheduler.actions; + this.work = this.state = this.scheduler = null; + this.pending = false; + arrRemove_1$5.arrRemove(actions, this); + if (id != null) { + this.id = this.recycleAsyncId(scheduler, id, null); + } + this.delay = null; + _super.prototype.unsubscribe.call(this); + } + }; + return AsyncAction; +}(Action_1.Action)); +AsyncAction$1.AsyncAction = AsyncAction; + +var immediateProvider = {}; + +var Immediate = {}; + +Object.defineProperty(Immediate, "__esModule", { value: true }); +Immediate.TestTools = Immediate.Immediate = void 0; +var nextHandle = 1; +var resolved; +var activeHandles = {}; +function findAndClearHandle(handle) { + if (handle in activeHandles) { + delete activeHandles[handle]; + return true; + } + return false; +} +Immediate.Immediate = { + setImmediate: function (cb) { + var handle = nextHandle++; + activeHandles[handle] = true; + if (!resolved) { + resolved = Promise.resolve(); + } + resolved.then(function () { return findAndClearHandle(handle) && cb(); }); + return handle; + }, + clearImmediate: function (handle) { + findAndClearHandle(handle); + }, +}; +Immediate.TestTools = { + pending: function () { + return Object.keys(activeHandles).length; + } +}; + +(function (exports) { + var __read = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; + }; + var __spreadArray = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.immediateProvider = void 0; + var Immediate_1 = Immediate; + var setImmediate = Immediate_1.Immediate.setImmediate, clearImmediate = Immediate_1.Immediate.clearImmediate; + exports.immediateProvider = { + setImmediate: function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var delegate = exports.immediateProvider.delegate; + return ((delegate === null || delegate === void 0 ? void 0 : delegate.setImmediate) || setImmediate).apply(void 0, __spreadArray([], __read(args))); + }, + clearImmediate: function (handle) { + var delegate = exports.immediateProvider.delegate; + return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearImmediate) || clearImmediate)(handle); + }, + delegate: undefined, + }; + +} (immediateProvider)); + +var __extends$b = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(AsapAction$1, "__esModule", { value: true }); +AsapAction$1.AsapAction = void 0; +var AsyncAction_1$3 = AsyncAction$1; +var immediateProvider_1 = immediateProvider; +var AsapAction = (function (_super) { + __extends$b(AsapAction, _super); + function AsapAction(scheduler, work) { + var _this = _super.call(this, scheduler, work) || this; + _this.scheduler = scheduler; + _this.work = work; + return _this; + } + AsapAction.prototype.requestAsyncId = function (scheduler, id, delay) { + if (delay === void 0) { delay = 0; } + if (delay !== null && delay > 0) { + return _super.prototype.requestAsyncId.call(this, scheduler, id, delay); + } + scheduler.actions.push(this); + return scheduler._scheduled || (scheduler._scheduled = immediateProvider_1.immediateProvider.setImmediate(scheduler.flush.bind(scheduler, undefined))); + }; + AsapAction.prototype.recycleAsyncId = function (scheduler, id, delay) { + var _a; + if (delay === void 0) { delay = 0; } + if (delay != null ? delay > 0 : this.delay > 0) { + return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay); + } + var actions = scheduler.actions; + if (id != null && ((_a = actions[actions.length - 1]) === null || _a === void 0 ? void 0 : _a.id) !== id) { + immediateProvider_1.immediateProvider.clearImmediate(id); + if (scheduler._scheduled === id) { + scheduler._scheduled = undefined; + } + } + return undefined; + }; + return AsapAction; +}(AsyncAction_1$3.AsyncAction)); +AsapAction$1.AsapAction = AsapAction; + +var AsapScheduler$1 = {}; + +var AsyncScheduler$1 = {}; + +var Scheduler$1 = {}; + +Object.defineProperty(Scheduler$1, "__esModule", { value: true }); +Scheduler$1.Scheduler = void 0; +var dateTimestampProvider_1$1 = dateTimestampProvider; +var Scheduler = (function () { + function Scheduler(schedulerActionCtor, now) { + if (now === void 0) { now = Scheduler.now; } + this.schedulerActionCtor = schedulerActionCtor; + this.now = now; + } + Scheduler.prototype.schedule = function (work, delay, state) { + if (delay === void 0) { delay = 0; } + return new this.schedulerActionCtor(this, work).schedule(state, delay); + }; + Scheduler.now = dateTimestampProvider_1$1.dateTimestampProvider.now; + return Scheduler; +}()); +Scheduler$1.Scheduler = Scheduler; + +var __extends$a = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(AsyncScheduler$1, "__esModule", { value: true }); +AsyncScheduler$1.AsyncScheduler = void 0; +var Scheduler_1 = Scheduler$1; +var AsyncScheduler = (function (_super) { + __extends$a(AsyncScheduler, _super); + function AsyncScheduler(SchedulerAction, now) { + if (now === void 0) { now = Scheduler_1.Scheduler.now; } + var _this = _super.call(this, SchedulerAction, now) || this; + _this.actions = []; + _this._active = false; + return _this; + } + AsyncScheduler.prototype.flush = function (action) { + var actions = this.actions; + if (this._active) { + actions.push(action); + return; + } + var error; + this._active = true; + do { + if ((error = action.execute(action.state, action.delay))) { + break; + } + } while ((action = actions.shift())); + this._active = false; + if (error) { + while ((action = actions.shift())) { + action.unsubscribe(); + } + throw error; + } + }; + return AsyncScheduler; +}(Scheduler_1.Scheduler)); +AsyncScheduler$1.AsyncScheduler = AsyncScheduler; + +var __extends$9 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(AsapScheduler$1, "__esModule", { value: true }); +AsapScheduler$1.AsapScheduler = void 0; +var AsyncScheduler_1$3 = AsyncScheduler$1; +var AsapScheduler = (function (_super) { + __extends$9(AsapScheduler, _super); + function AsapScheduler() { + return _super !== null && _super.apply(this, arguments) || this; + } + AsapScheduler.prototype.flush = function (action) { + this._active = true; + var flushId = this._scheduled; + this._scheduled = undefined; + var actions = this.actions; + var error; + action = action || actions.shift(); + do { + if ((error = action.execute(action.state, action.delay))) { + break; + } + } while ((action = actions[0]) && action.id === flushId && actions.shift()); + this._active = false; + if (error) { + while ((action = actions[0]) && action.id === flushId && actions.shift()) { + action.unsubscribe(); + } + throw error; + } + }; + return AsapScheduler; +}(AsyncScheduler_1$3.AsyncScheduler)); +AsapScheduler$1.AsapScheduler = AsapScheduler; + +(function (exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.asap = exports.asapScheduler = void 0; + var AsapAction_1 = AsapAction$1; + var AsapScheduler_1 = AsapScheduler$1; + exports.asapScheduler = new AsapScheduler_1.AsapScheduler(AsapAction_1.AsapAction); + exports.asap = exports.asapScheduler; + +} (asap)); + +var async = {}; + +(function (exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.async = exports.asyncScheduler = void 0; + var AsyncAction_1 = AsyncAction$1; + var AsyncScheduler_1 = AsyncScheduler$1; + exports.asyncScheduler = new AsyncScheduler_1.AsyncScheduler(AsyncAction_1.AsyncAction); + exports.async = exports.asyncScheduler; + +} (async)); + +var queue = {}; + +var QueueAction$1 = {}; + +var __extends$8 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(QueueAction$1, "__esModule", { value: true }); +QueueAction$1.QueueAction = void 0; +var AsyncAction_1$2 = AsyncAction$1; +var QueueAction = (function (_super) { + __extends$8(QueueAction, _super); + function QueueAction(scheduler, work) { + var _this = _super.call(this, scheduler, work) || this; + _this.scheduler = scheduler; + _this.work = work; + return _this; + } + QueueAction.prototype.schedule = function (state, delay) { + if (delay === void 0) { delay = 0; } + if (delay > 0) { + return _super.prototype.schedule.call(this, state, delay); + } + this.delay = delay; + this.state = state; + this.scheduler.flush(this); + return this; + }; + QueueAction.prototype.execute = function (state, delay) { + return delay > 0 || this.closed ? _super.prototype.execute.call(this, state, delay) : this._execute(state, delay); + }; + QueueAction.prototype.requestAsyncId = function (scheduler, id, delay) { + if (delay === void 0) { delay = 0; } + if ((delay != null && delay > 0) || (delay == null && this.delay > 0)) { + return _super.prototype.requestAsyncId.call(this, scheduler, id, delay); + } + scheduler.flush(this); + return 0; + }; + return QueueAction; +}(AsyncAction_1$2.AsyncAction)); +QueueAction$1.QueueAction = QueueAction; + +var QueueScheduler$1 = {}; + +var __extends$7 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(QueueScheduler$1, "__esModule", { value: true }); +QueueScheduler$1.QueueScheduler = void 0; +var AsyncScheduler_1$2 = AsyncScheduler$1; +var QueueScheduler = (function (_super) { + __extends$7(QueueScheduler, _super); + function QueueScheduler() { + return _super !== null && _super.apply(this, arguments) || this; + } + return QueueScheduler; +}(AsyncScheduler_1$2.AsyncScheduler)); +QueueScheduler$1.QueueScheduler = QueueScheduler; + +(function (exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.queue = exports.queueScheduler = void 0; + var QueueAction_1 = QueueAction$1; + var QueueScheduler_1 = QueueScheduler$1; + exports.queueScheduler = new QueueScheduler_1.QueueScheduler(QueueAction_1.QueueAction); + exports.queue = exports.queueScheduler; + +} (queue)); + +var animationFrame = {}; + +var AnimationFrameAction$1 = {}; + +var __extends$6 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(AnimationFrameAction$1, "__esModule", { value: true }); +AnimationFrameAction$1.AnimationFrameAction = void 0; +var AsyncAction_1$1 = AsyncAction$1; +var animationFrameProvider_1 = animationFrameProvider; +var AnimationFrameAction = (function (_super) { + __extends$6(AnimationFrameAction, _super); + function AnimationFrameAction(scheduler, work) { + var _this = _super.call(this, scheduler, work) || this; + _this.scheduler = scheduler; + _this.work = work; + return _this; + } + AnimationFrameAction.prototype.requestAsyncId = function (scheduler, id, delay) { + if (delay === void 0) { delay = 0; } + if (delay !== null && delay > 0) { + return _super.prototype.requestAsyncId.call(this, scheduler, id, delay); + } + scheduler.actions.push(this); + return scheduler._scheduled || (scheduler._scheduled = animationFrameProvider_1.animationFrameProvider.requestAnimationFrame(function () { return scheduler.flush(undefined); })); + }; + AnimationFrameAction.prototype.recycleAsyncId = function (scheduler, id, delay) { + var _a; + if (delay === void 0) { delay = 0; } + if (delay != null ? delay > 0 : this.delay > 0) { + return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay); + } + var actions = scheduler.actions; + if (id != null && ((_a = actions[actions.length - 1]) === null || _a === void 0 ? void 0 : _a.id) !== id) { + animationFrameProvider_1.animationFrameProvider.cancelAnimationFrame(id); + scheduler._scheduled = undefined; + } + return undefined; + }; + return AnimationFrameAction; +}(AsyncAction_1$1.AsyncAction)); +AnimationFrameAction$1.AnimationFrameAction = AnimationFrameAction; + +var AnimationFrameScheduler$1 = {}; + +var __extends$5 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(AnimationFrameScheduler$1, "__esModule", { value: true }); +AnimationFrameScheduler$1.AnimationFrameScheduler = void 0; +var AsyncScheduler_1$1 = AsyncScheduler$1; +var AnimationFrameScheduler = (function (_super) { + __extends$5(AnimationFrameScheduler, _super); + function AnimationFrameScheduler() { + return _super !== null && _super.apply(this, arguments) || this; + } + AnimationFrameScheduler.prototype.flush = function (action) { + this._active = true; + var flushId = this._scheduled; + this._scheduled = undefined; + var actions = this.actions; + var error; + action = action || actions.shift(); + do { + if ((error = action.execute(action.state, action.delay))) { + break; + } + } while ((action = actions[0]) && action.id === flushId && actions.shift()); + this._active = false; + if (error) { + while ((action = actions[0]) && action.id === flushId && actions.shift()) { + action.unsubscribe(); + } + throw error; + } + }; + return AnimationFrameScheduler; +}(AsyncScheduler_1$1.AsyncScheduler)); +AnimationFrameScheduler$1.AnimationFrameScheduler = AnimationFrameScheduler; + +(function (exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.animationFrame = exports.animationFrameScheduler = void 0; + var AnimationFrameAction_1 = AnimationFrameAction$1; + var AnimationFrameScheduler_1 = AnimationFrameScheduler$1; + exports.animationFrameScheduler = new AnimationFrameScheduler_1.AnimationFrameScheduler(AnimationFrameAction_1.AnimationFrameAction); + exports.animationFrame = exports.animationFrameScheduler; + +} (animationFrame)); + +var VirtualTimeScheduler$1 = {}; + +var __extends$4 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(VirtualTimeScheduler$1, "__esModule", { value: true }); +VirtualTimeScheduler$1.VirtualAction = VirtualTimeScheduler$1.VirtualTimeScheduler = void 0; +var AsyncAction_1 = AsyncAction$1; +var Subscription_1$4 = Subscription$1; +var AsyncScheduler_1 = AsyncScheduler$1; +var VirtualTimeScheduler = (function (_super) { + __extends$4(VirtualTimeScheduler, _super); + function VirtualTimeScheduler(schedulerActionCtor, maxFrames) { + if (schedulerActionCtor === void 0) { schedulerActionCtor = VirtualAction; } + if (maxFrames === void 0) { maxFrames = Infinity; } + var _this = _super.call(this, schedulerActionCtor, function () { return _this.frame; }) || this; + _this.maxFrames = maxFrames; + _this.frame = 0; + _this.index = -1; + return _this; + } + VirtualTimeScheduler.prototype.flush = function () { + var _a = this, actions = _a.actions, maxFrames = _a.maxFrames; + var error; + var action; + while ((action = actions[0]) && action.delay <= maxFrames) { + actions.shift(); + this.frame = action.delay; + if ((error = action.execute(action.state, action.delay))) { + break; + } + } + if (error) { + while ((action = actions.shift())) { + action.unsubscribe(); + } + throw error; + } + }; + VirtualTimeScheduler.frameTimeFactor = 10; + return VirtualTimeScheduler; +}(AsyncScheduler_1.AsyncScheduler)); +VirtualTimeScheduler$1.VirtualTimeScheduler = VirtualTimeScheduler; +var VirtualAction = (function (_super) { + __extends$4(VirtualAction, _super); + function VirtualAction(scheduler, work, index) { + if (index === void 0) { index = (scheduler.index += 1); } + var _this = _super.call(this, scheduler, work) || this; + _this.scheduler = scheduler; + _this.work = work; + _this.index = index; + _this.active = true; + _this.index = scheduler.index = index; + return _this; + } + VirtualAction.prototype.schedule = function (state, delay) { + if (delay === void 0) { delay = 0; } + if (Number.isFinite(delay)) { + if (!this.id) { + return _super.prototype.schedule.call(this, state, delay); + } + this.active = false; + var action = new VirtualAction(this.scheduler, this.work); + this.add(action); + return action.schedule(state, delay); + } + else { + return Subscription_1$4.Subscription.EMPTY; + } + }; + VirtualAction.prototype.requestAsyncId = function (scheduler, id, delay) { + if (delay === void 0) { delay = 0; } + this.delay = scheduler.frame + delay; + var actions = scheduler.actions; + actions.push(this); + actions.sort(VirtualAction.sortActions); + return 1; + }; + VirtualAction.prototype.recycleAsyncId = function (scheduler, id, delay) { + return undefined; + }; + VirtualAction.prototype._execute = function (state, delay) { + if (this.active === true) { + return _super.prototype._execute.call(this, state, delay); + } + }; + VirtualAction.sortActions = function (a, b) { + if (a.delay === b.delay) { + if (a.index === b.index) { + return 0; + } + else if (a.index > b.index) { + return 1; + } + else { + return -1; + } + } + else if (a.delay > b.delay) { + return 1; + } + else { + return -1; + } + }; + return VirtualAction; +}(AsyncAction_1.AsyncAction)); +VirtualTimeScheduler$1.VirtualAction = VirtualAction; + +var Notification = {}; + +var empty = {}; + +(function (exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.empty = exports.EMPTY = void 0; + var Observable_1 = Observable$1; + exports.EMPTY = new Observable_1.Observable(function (subscriber) { return subscriber.complete(); }); + function empty(scheduler) { + return scheduler ? emptyScheduled(scheduler) : exports.EMPTY; + } + exports.empty = empty; + function emptyScheduled(scheduler) { + return new Observable_1.Observable(function (subscriber) { return scheduler.schedule(function () { return subscriber.complete(); }); }); + } + +} (empty)); + +var of$1 = {}; + +var args = {}; + +var isScheduler$1 = {}; + +Object.defineProperty(isScheduler$1, "__esModule", { value: true }); +isScheduler$1.isScheduler = void 0; +var isFunction_1$m = isFunction$1; +function isScheduler(value) { + return value && isFunction_1$m.isFunction(value.schedule); +} +isScheduler$1.isScheduler = isScheduler; + +Object.defineProperty(args, "__esModule", { value: true }); +args.popNumber = args.popScheduler = args.popResultSelector = void 0; +var isFunction_1$l = isFunction$1; +var isScheduler_1$3 = isScheduler$1; +function last$2(arr) { + return arr[arr.length - 1]; +} +function popResultSelector(args) { + return isFunction_1$l.isFunction(last$2(args)) ? args.pop() : undefined; +} +args.popResultSelector = popResultSelector; +function popScheduler(args) { + return isScheduler_1$3.isScheduler(last$2(args)) ? args.pop() : undefined; +} +args.popScheduler = popScheduler; +function popNumber(args, defaultValue) { + return typeof last$2(args) === 'number' ? args.pop() : defaultValue; +} +args.popNumber = popNumber; + +var from$1 = {}; + +var scheduled$1 = {}; + +var scheduleObservable$1 = {}; + +var innerFrom$1 = {}; + +var isArrayLike = {}; + +Object.defineProperty(isArrayLike, "__esModule", { value: true }); +isArrayLike.isArrayLike = void 0; +isArrayLike.isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; }); + +var isPromise$1 = {}; + +Object.defineProperty(isPromise$1, "__esModule", { value: true }); +isPromise$1.isPromise = void 0; +var isFunction_1$k = isFunction$1; +function isPromise(value) { + return isFunction_1$k.isFunction(value === null || value === void 0 ? void 0 : value.then); +} +isPromise$1.isPromise = isPromise; + +var isInteropObservable$1 = {}; + +Object.defineProperty(isInteropObservable$1, "__esModule", { value: true }); +isInteropObservable$1.isInteropObservable = void 0; +var observable_1$1 = observable; +var isFunction_1$j = isFunction$1; +function isInteropObservable(input) { + return isFunction_1$j.isFunction(input[observable_1$1.observable]); +} +isInteropObservable$1.isInteropObservable = isInteropObservable; + +var isAsyncIterable$1 = {}; + +Object.defineProperty(isAsyncIterable$1, "__esModule", { value: true }); +isAsyncIterable$1.isAsyncIterable = void 0; +var isFunction_1$i = isFunction$1; +function isAsyncIterable(obj) { + return Symbol.asyncIterator && isFunction_1$i.isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]); +} +isAsyncIterable$1.isAsyncIterable = isAsyncIterable; + +var throwUnobservableError = {}; + +Object.defineProperty(throwUnobservableError, "__esModule", { value: true }); +throwUnobservableError.createInvalidObservableTypeError = void 0; +function createInvalidObservableTypeError(input) { + return new TypeError("You provided " + (input !== null && typeof input === 'object' ? 'an invalid object' : "'" + input + "'") + " where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable."); +} +throwUnobservableError.createInvalidObservableTypeError = createInvalidObservableTypeError; + +var isIterable$1 = {}; + +var iterator$1 = {}; + +Object.defineProperty(iterator$1, "__esModule", { value: true }); +iterator$1.iterator = iterator$1.getSymbolIterator = void 0; +function getSymbolIterator() { + if (typeof Symbol !== 'function' || !Symbol.iterator) { + return '@@iterator'; + } + return Symbol.iterator; +} +iterator$1.getSymbolIterator = getSymbolIterator; +iterator$1.iterator = getSymbolIterator(); + +Object.defineProperty(isIterable$1, "__esModule", { value: true }); +isIterable$1.isIterable = void 0; +var iterator_1$1 = iterator$1; +var isFunction_1$h = isFunction$1; +function isIterable(input) { + return isFunction_1$h.isFunction(input === null || input === void 0 ? void 0 : input[iterator_1$1.iterator]); +} +isIterable$1.isIterable = isIterable; + +var isReadableStreamLike$1 = {}; + +var __generator$2 = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __await = (commonjsGlobal && commonjsGlobal.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }; +var __asyncGenerator = (commonjsGlobal && commonjsGlobal.__asyncGenerator) || function (thisArg, _arguments, generator) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function fulfill(value) { resume("next", value); } + function reject(value) { resume("throw", value); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } +}; +Object.defineProperty(isReadableStreamLike$1, "__esModule", { value: true }); +isReadableStreamLike$1.isReadableStreamLike = isReadableStreamLike$1.readableStreamLikeToAsyncGenerator = void 0; +var isFunction_1$g = isFunction$1; +function readableStreamLikeToAsyncGenerator(readableStream) { + return __asyncGenerator(this, arguments, function readableStreamLikeToAsyncGenerator_1() { + var reader, _a, value, done; + return __generator$2(this, function (_b) { + switch (_b.label) { + case 0: + reader = readableStream.getReader(); + _b.label = 1; + case 1: + _b.trys.push([1, , 9, 10]); + _b.label = 2; + case 2: + return [4, __await(reader.read())]; + case 3: + _a = _b.sent(), value = _a.value, done = _a.done; + if (!done) return [3, 5]; + return [4, __await(void 0)]; + case 4: return [2, _b.sent()]; + case 5: return [4, __await(value)]; + case 6: return [4, _b.sent()]; + case 7: + _b.sent(); + return [3, 2]; + case 8: return [3, 10]; + case 9: + reader.releaseLock(); + return [7]; + case 10: return [2]; + } + }); + }); +} +isReadableStreamLike$1.readableStreamLikeToAsyncGenerator = readableStreamLikeToAsyncGenerator; +function isReadableStreamLike(obj) { + return isFunction_1$g.isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader); +} +isReadableStreamLike$1.isReadableStreamLike = isReadableStreamLike; + +var __awaiter = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator$1 = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __asyncValues = (commonjsGlobal && commonjsGlobal.__asyncValues) || function (o) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values$6 === "function" ? __values$6(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } +}; +var __values$6 = (commonjsGlobal && commonjsGlobal.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(innerFrom$1, "__esModule", { value: true }); +innerFrom$1.fromReadableStreamLike = innerFrom$1.fromAsyncIterable = innerFrom$1.fromIterable = innerFrom$1.fromPromise = innerFrom$1.fromArrayLike = innerFrom$1.fromInteropObservable = innerFrom$1.innerFrom = void 0; +var isArrayLike_1$2 = isArrayLike; +var isPromise_1$1 = isPromise$1; +var Observable_1$k = Observable$1; +var isInteropObservable_1$1 = isInteropObservable$1; +var isAsyncIterable_1$1 = isAsyncIterable$1; +var throwUnobservableError_1$1 = throwUnobservableError; +var isIterable_1$1 = isIterable$1; +var isReadableStreamLike_1$2 = isReadableStreamLike$1; +var isFunction_1$f = isFunction$1; +var reportUnhandledError_1 = reportUnhandledError$1; +var observable_1 = observable; +function innerFrom(input) { + if (input instanceof Observable_1$k.Observable) { + return input; + } + if (input != null) { + if (isInteropObservable_1$1.isInteropObservable(input)) { + return fromInteropObservable(input); + } + if (isArrayLike_1$2.isArrayLike(input)) { + return fromArrayLike(input); + } + if (isPromise_1$1.isPromise(input)) { + return fromPromise(input); + } + if (isAsyncIterable_1$1.isAsyncIterable(input)) { + return fromAsyncIterable(input); + } + if (isIterable_1$1.isIterable(input)) { + return fromIterable(input); + } + if (isReadableStreamLike_1$2.isReadableStreamLike(input)) { + return fromReadableStreamLike(input); + } + } + throw throwUnobservableError_1$1.createInvalidObservableTypeError(input); +} +innerFrom$1.innerFrom = innerFrom; +function fromInteropObservable(obj) { + return new Observable_1$k.Observable(function (subscriber) { + var obs = obj[observable_1.observable](); + if (isFunction_1$f.isFunction(obs.subscribe)) { + return obs.subscribe(subscriber); + } + throw new TypeError('Provided object does not correctly implement Symbol.observable'); + }); +} +innerFrom$1.fromInteropObservable = fromInteropObservable; +function fromArrayLike(array) { + return new Observable_1$k.Observable(function (subscriber) { + for (var i = 0; i < array.length && !subscriber.closed; i++) { + subscriber.next(array[i]); + } + subscriber.complete(); + }); +} +innerFrom$1.fromArrayLike = fromArrayLike; +function fromPromise(promise) { + return new Observable_1$k.Observable(function (subscriber) { + promise + .then(function (value) { + if (!subscriber.closed) { + subscriber.next(value); + subscriber.complete(); + } + }, function (err) { return subscriber.error(err); }) + .then(null, reportUnhandledError_1.reportUnhandledError); + }); +} +innerFrom$1.fromPromise = fromPromise; +function fromIterable(iterable) { + return new Observable_1$k.Observable(function (subscriber) { + var e_1, _a; + try { + for (var iterable_1 = __values$6(iterable), iterable_1_1 = iterable_1.next(); !iterable_1_1.done; iterable_1_1 = iterable_1.next()) { + var value = iterable_1_1.value; + subscriber.next(value); + if (subscriber.closed) { + return; + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (iterable_1_1 && !iterable_1_1.done && (_a = iterable_1.return)) _a.call(iterable_1); + } + finally { if (e_1) throw e_1.error; } + } + subscriber.complete(); + }); +} +innerFrom$1.fromIterable = fromIterable; +function fromAsyncIterable(asyncIterable) { + return new Observable_1$k.Observable(function (subscriber) { + process$2(asyncIterable, subscriber).catch(function (err) { return subscriber.error(err); }); + }); +} +innerFrom$1.fromAsyncIterable = fromAsyncIterable; +function fromReadableStreamLike(readableStream) { + return fromAsyncIterable(isReadableStreamLike_1$2.readableStreamLikeToAsyncGenerator(readableStream)); +} +innerFrom$1.fromReadableStreamLike = fromReadableStreamLike; +function process$2(asyncIterable, subscriber) { + var asyncIterable_1, asyncIterable_1_1; + var e_2, _a; + return __awaiter(this, void 0, void 0, function () { + var value, e_2_1; + return __generator$1(this, function (_b) { + switch (_b.label) { + case 0: + _b.trys.push([0, 5, 6, 11]); + asyncIterable_1 = __asyncValues(asyncIterable); + _b.label = 1; + case 1: return [4, asyncIterable_1.next()]; + case 2: + if (!(asyncIterable_1_1 = _b.sent(), !asyncIterable_1_1.done)) return [3, 4]; + value = asyncIterable_1_1.value; + subscriber.next(value); + if (subscriber.closed) { + return [2]; + } + _b.label = 3; + case 3: return [3, 1]; + case 4: return [3, 11]; + case 5: + e_2_1 = _b.sent(); + e_2 = { error: e_2_1 }; + return [3, 11]; + case 6: + _b.trys.push([6, , 9, 10]); + if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return))) return [3, 8]; + return [4, _a.call(asyncIterable_1)]; + case 7: + _b.sent(); + _b.label = 8; + case 8: return [3, 10]; + case 9: + if (e_2) throw e_2.error; + return [7]; + case 10: return [7]; + case 11: + subscriber.complete(); + return [2]; + } + }); + }); +} + +var observeOn$1 = {}; + +var executeSchedule$1 = {}; + +Object.defineProperty(executeSchedule$1, "__esModule", { value: true }); +executeSchedule$1.executeSchedule = void 0; +function executeSchedule(parentSubscription, scheduler, work, delay, repeat) { + if (delay === void 0) { delay = 0; } + if (repeat === void 0) { repeat = false; } + var scheduleSubscription = scheduler.schedule(function () { + work(); + if (repeat) { + parentSubscription.add(this.schedule(null, delay)); + } + else { + this.unsubscribe(); + } + }, delay); + parentSubscription.add(scheduleSubscription); + if (!repeat) { + return scheduleSubscription; + } +} +executeSchedule$1.executeSchedule = executeSchedule; + +Object.defineProperty(observeOn$1, "__esModule", { value: true }); +observeOn$1.observeOn = void 0; +var executeSchedule_1$6 = executeSchedule$1; +var lift_1$12 = lift; +var OperatorSubscriber_1$T = OperatorSubscriber$1; +function observeOn(scheduler, delay) { + if (delay === void 0) { delay = 0; } + return lift_1$12.operate(function (source, subscriber) { + source.subscribe(OperatorSubscriber_1$T.createOperatorSubscriber(subscriber, function (value) { return executeSchedule_1$6.executeSchedule(subscriber, scheduler, function () { return subscriber.next(value); }, delay); }, function () { return executeSchedule_1$6.executeSchedule(subscriber, scheduler, function () { return subscriber.complete(); }, delay); }, function (err) { return executeSchedule_1$6.executeSchedule(subscriber, scheduler, function () { return subscriber.error(err); }, delay); })); + }); +} +observeOn$1.observeOn = observeOn; + +var subscribeOn$1 = {}; + +Object.defineProperty(subscribeOn$1, "__esModule", { value: true }); +subscribeOn$1.subscribeOn = void 0; +var lift_1$11 = lift; +function subscribeOn(scheduler, delay) { + if (delay === void 0) { delay = 0; } + return lift_1$11.operate(function (source, subscriber) { + subscriber.add(scheduler.schedule(function () { return source.subscribe(subscriber); }, delay)); + }); +} +subscribeOn$1.subscribeOn = subscribeOn; + +Object.defineProperty(scheduleObservable$1, "__esModule", { value: true }); +scheduleObservable$1.scheduleObservable = void 0; +var innerFrom_1$D = innerFrom$1; +var observeOn_1$2 = observeOn$1; +var subscribeOn_1$2 = subscribeOn$1; +function scheduleObservable(input, scheduler) { + return innerFrom_1$D.innerFrom(input).pipe(subscribeOn_1$2.subscribeOn(scheduler), observeOn_1$2.observeOn(scheduler)); +} +scheduleObservable$1.scheduleObservable = scheduleObservable; + +var schedulePromise$1 = {}; + +Object.defineProperty(schedulePromise$1, "__esModule", { value: true }); +schedulePromise$1.schedulePromise = void 0; +var innerFrom_1$C = innerFrom$1; +var observeOn_1$1 = observeOn$1; +var subscribeOn_1$1 = subscribeOn$1; +function schedulePromise(input, scheduler) { + return innerFrom_1$C.innerFrom(input).pipe(subscribeOn_1$1.subscribeOn(scheduler), observeOn_1$1.observeOn(scheduler)); +} +schedulePromise$1.schedulePromise = schedulePromise; + +var scheduleArray$1 = {}; + +Object.defineProperty(scheduleArray$1, "__esModule", { value: true }); +scheduleArray$1.scheduleArray = void 0; +var Observable_1$j = Observable$1; +function scheduleArray(input, scheduler) { + return new Observable_1$j.Observable(function (subscriber) { + var i = 0; + return scheduler.schedule(function () { + if (i === input.length) { + subscriber.complete(); + } + else { + subscriber.next(input[i++]); + if (!subscriber.closed) { + this.schedule(); + } + } + }); + }); +} +scheduleArray$1.scheduleArray = scheduleArray; + +var scheduleIterable$1 = {}; + +Object.defineProperty(scheduleIterable$1, "__esModule", { value: true }); +scheduleIterable$1.scheduleIterable = void 0; +var Observable_1$i = Observable$1; +var iterator_1 = iterator$1; +var isFunction_1$e = isFunction$1; +var executeSchedule_1$5 = executeSchedule$1; +function scheduleIterable(input, scheduler) { + return new Observable_1$i.Observable(function (subscriber) { + var iterator; + executeSchedule_1$5.executeSchedule(subscriber, scheduler, function () { + iterator = input[iterator_1.iterator](); + executeSchedule_1$5.executeSchedule(subscriber, scheduler, function () { + var _a; + var value; + var done; + try { + (_a = iterator.next(), value = _a.value, done = _a.done); + } + catch (err) { + subscriber.error(err); + return; + } + if (done) { + subscriber.complete(); + } + else { + subscriber.next(value); + } + }, 0, true); + }); + return function () { return isFunction_1$e.isFunction(iterator === null || iterator === void 0 ? void 0 : iterator.return) && iterator.return(); }; + }); +} +scheduleIterable$1.scheduleIterable = scheduleIterable; + +var scheduleAsyncIterable$1 = {}; + +Object.defineProperty(scheduleAsyncIterable$1, "__esModule", { value: true }); +scheduleAsyncIterable$1.scheduleAsyncIterable = void 0; +var Observable_1$h = Observable$1; +var executeSchedule_1$4 = executeSchedule$1; +function scheduleAsyncIterable(input, scheduler) { + if (!input) { + throw new Error('Iterable cannot be null'); + } + return new Observable_1$h.Observable(function (subscriber) { + executeSchedule_1$4.executeSchedule(subscriber, scheduler, function () { + var iterator = input[Symbol.asyncIterator](); + executeSchedule_1$4.executeSchedule(subscriber, scheduler, function () { + iterator.next().then(function (result) { + if (result.done) { + subscriber.complete(); + } + else { + subscriber.next(result.value); + } + }); + }, 0, true); + }); + }); +} +scheduleAsyncIterable$1.scheduleAsyncIterable = scheduleAsyncIterable; + +var scheduleReadableStreamLike$1 = {}; + +Object.defineProperty(scheduleReadableStreamLike$1, "__esModule", { value: true }); +scheduleReadableStreamLike$1.scheduleReadableStreamLike = void 0; +var scheduleAsyncIterable_1$1 = scheduleAsyncIterable$1; +var isReadableStreamLike_1$1 = isReadableStreamLike$1; +function scheduleReadableStreamLike(input, scheduler) { + return scheduleAsyncIterable_1$1.scheduleAsyncIterable(isReadableStreamLike_1$1.readableStreamLikeToAsyncGenerator(input), scheduler); +} +scheduleReadableStreamLike$1.scheduleReadableStreamLike = scheduleReadableStreamLike; + +Object.defineProperty(scheduled$1, "__esModule", { value: true }); +scheduled$1.scheduled = void 0; +var scheduleObservable_1 = scheduleObservable$1; +var schedulePromise_1 = schedulePromise$1; +var scheduleArray_1 = scheduleArray$1; +var scheduleIterable_1$1 = scheduleIterable$1; +var scheduleAsyncIterable_1 = scheduleAsyncIterable$1; +var isInteropObservable_1 = isInteropObservable$1; +var isPromise_1 = isPromise$1; +var isArrayLike_1$1 = isArrayLike; +var isIterable_1 = isIterable$1; +var isAsyncIterable_1 = isAsyncIterable$1; +var throwUnobservableError_1 = throwUnobservableError; +var isReadableStreamLike_1 = isReadableStreamLike$1; +var scheduleReadableStreamLike_1 = scheduleReadableStreamLike$1; +function scheduled(input, scheduler) { + if (input != null) { + if (isInteropObservable_1.isInteropObservable(input)) { + return scheduleObservable_1.scheduleObservable(input, scheduler); + } + if (isArrayLike_1$1.isArrayLike(input)) { + return scheduleArray_1.scheduleArray(input, scheduler); + } + if (isPromise_1.isPromise(input)) { + return schedulePromise_1.schedulePromise(input, scheduler); + } + if (isAsyncIterable_1.isAsyncIterable(input)) { + return scheduleAsyncIterable_1.scheduleAsyncIterable(input, scheduler); + } + if (isIterable_1.isIterable(input)) { + return scheduleIterable_1$1.scheduleIterable(input, scheduler); + } + if (isReadableStreamLike_1.isReadableStreamLike(input)) { + return scheduleReadableStreamLike_1.scheduleReadableStreamLike(input, scheduler); + } + } + throw throwUnobservableError_1.createInvalidObservableTypeError(input); +} +scheduled$1.scheduled = scheduled; + +Object.defineProperty(from$1, "__esModule", { value: true }); +from$1.from = void 0; +var scheduled_1 = scheduled$1; +var innerFrom_1$B = innerFrom$1; +function from(input, scheduler) { + return scheduler ? scheduled_1.scheduled(input, scheduler) : innerFrom_1$B.innerFrom(input); +} +from$1.from = from; + +Object.defineProperty(of$1, "__esModule", { value: true }); +of$1.of = void 0; +var args_1$c = args; +var from_1$6 = from$1; +function of() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var scheduler = args_1$c.popScheduler(args); + return from_1$6.from(args, scheduler); +} +of$1.of = of; + +var throwError$2 = {}; + +Object.defineProperty(throwError$2, "__esModule", { value: true }); +throwError$2.throwError = void 0; +var Observable_1$g = Observable$1; +var isFunction_1$d = isFunction$1; +function throwError$1(errorOrErrorFactory, scheduler) { + var errorFactory = isFunction_1$d.isFunction(errorOrErrorFactory) ? errorOrErrorFactory : function () { return errorOrErrorFactory; }; + var init = function (subscriber) { return subscriber.error(errorFactory()); }; + return new Observable_1$g.Observable(scheduler ? function (subscriber) { return scheduler.schedule(init, 0, subscriber); } : init); +} +throwError$2.throwError = throwError$1; + +(function (exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.observeNotification = exports.Notification = exports.NotificationKind = void 0; + var empty_1 = empty; + var of_1 = of$1; + var throwError_1 = throwError$2; + var isFunction_1 = isFunction$1; + (function (NotificationKind) { + NotificationKind["NEXT"] = "N"; + NotificationKind["ERROR"] = "E"; + NotificationKind["COMPLETE"] = "C"; + })(exports.NotificationKind || (exports.NotificationKind = {})); + var Notification = (function () { + function Notification(kind, value, error) { + this.kind = kind; + this.value = value; + this.error = error; + this.hasValue = kind === 'N'; + } + Notification.prototype.observe = function (observer) { + return observeNotification(this, observer); + }; + Notification.prototype.do = function (nextHandler, errorHandler, completeHandler) { + var _a = this, kind = _a.kind, value = _a.value, error = _a.error; + return kind === 'N' ? nextHandler === null || nextHandler === void 0 ? void 0 : nextHandler(value) : kind === 'E' ? errorHandler === null || errorHandler === void 0 ? void 0 : errorHandler(error) : completeHandler === null || completeHandler === void 0 ? void 0 : completeHandler(); + }; + Notification.prototype.accept = function (nextOrObserver, error, complete) { + var _a; + return isFunction_1.isFunction((_a = nextOrObserver) === null || _a === void 0 ? void 0 : _a.next) + ? this.observe(nextOrObserver) + : this.do(nextOrObserver, error, complete); + }; + Notification.prototype.toObservable = function () { + var _a = this, kind = _a.kind, value = _a.value, error = _a.error; + var result = kind === 'N' + ? + of_1.of(value) + : + kind === 'E' + ? + throwError_1.throwError(function () { return error; }) + : + kind === 'C' + ? + empty_1.EMPTY + : + 0; + if (!result) { + throw new TypeError("Unexpected notification kind " + kind); + } + return result; + }; + Notification.createNext = function (value) { + return new Notification('N', value); + }; + Notification.createError = function (err) { + return new Notification('E', undefined, err); + }; + Notification.createComplete = function () { + return Notification.completeNotification; + }; + Notification.completeNotification = new Notification('C'); + return Notification; + }()); + exports.Notification = Notification; + function observeNotification(notification, observer) { + var _a, _b, _c; + var _d = notification, kind = _d.kind, value = _d.value, error = _d.error; + if (typeof kind !== 'string') { + throw new TypeError('Invalid notification, missing "kind"'); + } + kind === 'N' ? (_a = observer.next) === null || _a === void 0 ? void 0 : _a.call(observer, value) : kind === 'E' ? (_b = observer.error) === null || _b === void 0 ? void 0 : _b.call(observer, error) : (_c = observer.complete) === null || _c === void 0 ? void 0 : _c.call(observer); + } + exports.observeNotification = observeNotification; + +} (Notification)); + +var isObservable$1 = {}; + +Object.defineProperty(isObservable$1, "__esModule", { value: true }); +isObservable$1.isObservable = void 0; +var Observable_1$f = Observable$1; +var isFunction_1$c = isFunction$1; +function isObservable(obj) { + return !!obj && (obj instanceof Observable_1$f.Observable || (isFunction_1$c.isFunction(obj.lift) && isFunction_1$c.isFunction(obj.subscribe))); +} +isObservable$1.isObservable = isObservable; + +var lastValueFrom$1 = {}; + +var EmptyError = {}; + +Object.defineProperty(EmptyError, "__esModule", { value: true }); +EmptyError.EmptyError = void 0; +var createErrorClass_1$3 = createErrorClass$1; +EmptyError.EmptyError = createErrorClass_1$3.createErrorClass(function (_super) { return function EmptyErrorImpl() { + _super(this); + this.name = 'EmptyError'; + this.message = 'no elements in sequence'; +}; }); + +Object.defineProperty(lastValueFrom$1, "__esModule", { value: true }); +lastValueFrom$1.lastValueFrom = void 0; +var EmptyError_1$5 = EmptyError; +function lastValueFrom(source, config) { + var hasConfig = typeof config === 'object'; + return new Promise(function (resolve, reject) { + var _hasValue = false; + var _value; + source.subscribe({ + next: function (value) { + _value = value; + _hasValue = true; + }, + error: reject, + complete: function () { + if (_hasValue) { + resolve(_value); + } + else if (hasConfig) { + resolve(config.defaultValue); + } + else { + reject(new EmptyError_1$5.EmptyError()); + } + }, + }); + }); +} +lastValueFrom$1.lastValueFrom = lastValueFrom; + +var firstValueFrom$1 = {}; + +Object.defineProperty(firstValueFrom$1, "__esModule", { value: true }); +firstValueFrom$1.firstValueFrom = void 0; +var EmptyError_1$4 = EmptyError; +var Subscriber_1$1 = Subscriber; +function firstValueFrom(source, config) { + var hasConfig = typeof config === 'object'; + return new Promise(function (resolve, reject) { + var subscriber = new Subscriber_1$1.SafeSubscriber({ + next: function (value) { + resolve(value); + subscriber.unsubscribe(); + }, + error: reject, + complete: function () { + if (hasConfig) { + resolve(config.defaultValue); + } + else { + reject(new EmptyError_1$4.EmptyError()); + } + }, + }); + source.subscribe(subscriber); + }); +} +firstValueFrom$1.firstValueFrom = firstValueFrom; + +var ArgumentOutOfRangeError = {}; + +Object.defineProperty(ArgumentOutOfRangeError, "__esModule", { value: true }); +ArgumentOutOfRangeError.ArgumentOutOfRangeError = void 0; +var createErrorClass_1$2 = createErrorClass$1; +ArgumentOutOfRangeError.ArgumentOutOfRangeError = createErrorClass_1$2.createErrorClass(function (_super) { + return function ArgumentOutOfRangeErrorImpl() { + _super(this); + this.name = 'ArgumentOutOfRangeError'; + this.message = 'argument out of range'; + }; +}); + +var NotFoundError = {}; + +Object.defineProperty(NotFoundError, "__esModule", { value: true }); +NotFoundError.NotFoundError = void 0; +var createErrorClass_1$1 = createErrorClass$1; +NotFoundError.NotFoundError = createErrorClass_1$1.createErrorClass(function (_super) { + return function NotFoundErrorImpl(message) { + _super(this); + this.name = 'NotFoundError'; + this.message = message; + }; +}); + +var SequenceError = {}; + +Object.defineProperty(SequenceError, "__esModule", { value: true }); +SequenceError.SequenceError = void 0; +var createErrorClass_1 = createErrorClass$1; +SequenceError.SequenceError = createErrorClass_1.createErrorClass(function (_super) { + return function SequenceErrorImpl(message) { + _super(this); + this.name = 'SequenceError'; + this.message = message; + }; +}); + +var timeout = {}; + +var isDate = {}; + +Object.defineProperty(isDate, "__esModule", { value: true }); +isDate.isValidDate = void 0; +function isValidDate(value) { + return value instanceof Date && !isNaN(value); +} +isDate.isValidDate = isValidDate; + +(function (exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.timeout = exports.TimeoutError = void 0; + var async_1 = async; + var isDate_1 = isDate; + var lift_1 = lift; + var innerFrom_1 = innerFrom$1; + var createErrorClass_1 = createErrorClass$1; + var OperatorSubscriber_1 = OperatorSubscriber$1; + var executeSchedule_1 = executeSchedule$1; + exports.TimeoutError = createErrorClass_1.createErrorClass(function (_super) { + return function TimeoutErrorImpl(info) { + if (info === void 0) { info = null; } + _super(this); + this.message = 'Timeout has occurred'; + this.name = 'TimeoutError'; + this.info = info; + }; + }); + function timeout(config, schedulerArg) { + var _a = (isDate_1.isValidDate(config) ? { first: config } : typeof config === 'number' ? { each: config } : config), first = _a.first, each = _a.each, _b = _a.with, _with = _b === void 0 ? timeoutErrorFactory : _b, _c = _a.scheduler, scheduler = _c === void 0 ? schedulerArg !== null && schedulerArg !== void 0 ? schedulerArg : async_1.asyncScheduler : _c, _d = _a.meta, meta = _d === void 0 ? null : _d; + if (first == null && each == null) { + throw new TypeError('No timeout provided.'); + } + return lift_1.operate(function (source, subscriber) { + var originalSourceSubscription; + var timerSubscription; + var lastValue = null; + var seen = 0; + var startTimer = function (delay) { + timerSubscription = executeSchedule_1.executeSchedule(subscriber, scheduler, function () { + try { + originalSourceSubscription.unsubscribe(); + innerFrom_1.innerFrom(_with({ + meta: meta, + lastValue: lastValue, + seen: seen, + })).subscribe(subscriber); + } + catch (err) { + subscriber.error(err); + } + }, delay); + }; + originalSourceSubscription = source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) { + timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.unsubscribe(); + seen++; + subscriber.next((lastValue = value)); + each > 0 && startTimer(each); + }, undefined, undefined, function () { + if (!(timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.closed)) { + timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.unsubscribe(); + } + lastValue = null; + })); + !seen && startTimer(first != null ? (typeof first === 'number' ? first : +first - scheduler.now()) : each); + }); + } + exports.timeout = timeout; + function timeoutErrorFactory(info) { + throw new exports.TimeoutError(info); + } + +} (timeout)); + +var bindCallback$1 = {}; + +var bindCallbackInternals$1 = {}; + +var mapOneOrManyArgs$1 = {}; + +var map$2 = {}; + +Object.defineProperty(map$2, "__esModule", { value: true }); +map$2.map = void 0; +var lift_1$10 = lift; +var OperatorSubscriber_1$S = OperatorSubscriber$1; +function map$1(project, thisArg) { + return lift_1$10.operate(function (source, subscriber) { + var index = 0; + source.subscribe(OperatorSubscriber_1$S.createOperatorSubscriber(subscriber, function (value) { + subscriber.next(project.call(thisArg, value, index++)); + })); + }); +} +map$2.map = map$1; + +var __read$g = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray$f = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +Object.defineProperty(mapOneOrManyArgs$1, "__esModule", { value: true }); +mapOneOrManyArgs$1.mapOneOrManyArgs = void 0; +var map_1$5 = map$2; +var isArray$4 = Array.isArray; +function callOrApply(fn, args) { + return isArray$4(args) ? fn.apply(void 0, __spreadArray$f([], __read$g(args))) : fn(args); +} +function mapOneOrManyArgs(fn) { + return map_1$5.map(function (args) { return callOrApply(fn, args); }); +} +mapOneOrManyArgs$1.mapOneOrManyArgs = mapOneOrManyArgs; + +var __read$f = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray$e = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +Object.defineProperty(bindCallbackInternals$1, "__esModule", { value: true }); +bindCallbackInternals$1.bindCallbackInternals = void 0; +var isScheduler_1$2 = isScheduler$1; +var Observable_1$e = Observable$1; +var subscribeOn_1 = subscribeOn$1; +var mapOneOrManyArgs_1$6 = mapOneOrManyArgs$1; +var observeOn_1 = observeOn$1; +var AsyncSubject_1$1 = AsyncSubject$1; +function bindCallbackInternals(isNodeStyle, callbackFunc, resultSelector, scheduler) { + if (resultSelector) { + if (isScheduler_1$2.isScheduler(resultSelector)) { + scheduler = resultSelector; + } + else { + return function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return bindCallbackInternals(isNodeStyle, callbackFunc, scheduler) + .apply(this, args) + .pipe(mapOneOrManyArgs_1$6.mapOneOrManyArgs(resultSelector)); + }; + } + } + if (scheduler) { + return function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return bindCallbackInternals(isNodeStyle, callbackFunc) + .apply(this, args) + .pipe(subscribeOn_1.subscribeOn(scheduler), observeOn_1.observeOn(scheduler)); + }; + } + return function () { + var _this = this; + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var subject = new AsyncSubject_1$1.AsyncSubject(); + var uninitialized = true; + return new Observable_1$e.Observable(function (subscriber) { + var subs = subject.subscribe(subscriber); + if (uninitialized) { + uninitialized = false; + var isAsync_1 = false; + var isComplete_1 = false; + callbackFunc.apply(_this, __spreadArray$e(__spreadArray$e([], __read$f(args)), [ + function () { + var results = []; + for (var _i = 0; _i < arguments.length; _i++) { + results[_i] = arguments[_i]; + } + if (isNodeStyle) { + var err = results.shift(); + if (err != null) { + subject.error(err); + return; + } + } + subject.next(1 < results.length ? results : results[0]); + isComplete_1 = true; + if (isAsync_1) { + subject.complete(); + } + }, + ])); + if (isComplete_1) { + subject.complete(); + } + isAsync_1 = true; + } + return subs; + }); + }; +} +bindCallbackInternals$1.bindCallbackInternals = bindCallbackInternals; + +Object.defineProperty(bindCallback$1, "__esModule", { value: true }); +bindCallback$1.bindCallback = void 0; +var bindCallbackInternals_1$1 = bindCallbackInternals$1; +function bindCallback(callbackFunc, resultSelector, scheduler) { + return bindCallbackInternals_1$1.bindCallbackInternals(false, callbackFunc, resultSelector, scheduler); +} +bindCallback$1.bindCallback = bindCallback; + +var bindNodeCallback$1 = {}; + +Object.defineProperty(bindNodeCallback$1, "__esModule", { value: true }); +bindNodeCallback$1.bindNodeCallback = void 0; +var bindCallbackInternals_1 = bindCallbackInternals$1; +function bindNodeCallback(callbackFunc, resultSelector, scheduler) { + return bindCallbackInternals_1.bindCallbackInternals(true, callbackFunc, resultSelector, scheduler); +} +bindNodeCallback$1.bindNodeCallback = bindNodeCallback; + +var combineLatest$3 = {}; + +var argsArgArrayOrObject$1 = {}; + +Object.defineProperty(argsArgArrayOrObject$1, "__esModule", { value: true }); +argsArgArrayOrObject$1.argsArgArrayOrObject = void 0; +var isArray$3 = Array.isArray; +var getPrototypeOf = Object.getPrototypeOf, objectProto = Object.prototype, getKeys = Object.keys; +function argsArgArrayOrObject(args) { + if (args.length === 1) { + var first_1 = args[0]; + if (isArray$3(first_1)) { + return { args: first_1, keys: null }; + } + if (isPOJO(first_1)) { + var keys = getKeys(first_1); + return { + args: keys.map(function (key) { return first_1[key]; }), + keys: keys, + }; + } + } + return { args: args, keys: null }; +} +argsArgArrayOrObject$1.argsArgArrayOrObject = argsArgArrayOrObject; +function isPOJO(obj) { + return obj && typeof obj === 'object' && getPrototypeOf(obj) === objectProto; +} + +var createObject$1 = {}; + +Object.defineProperty(createObject$1, "__esModule", { value: true }); +createObject$1.createObject = void 0; +function createObject(keys, values) { + return keys.reduce(function (result, key, i) { return ((result[key] = values[i]), result); }, {}); +} +createObject$1.createObject = createObject; + +Object.defineProperty(combineLatest$3, "__esModule", { value: true }); +combineLatest$3.combineLatestInit = combineLatest$3.combineLatest = void 0; +var Observable_1$d = Observable$1; +var argsArgArrayOrObject_1$1 = argsArgArrayOrObject$1; +var from_1$5 = from$1; +var identity_1$d = identity$1; +var mapOneOrManyArgs_1$5 = mapOneOrManyArgs$1; +var args_1$b = args; +var createObject_1$1 = createObject$1; +var OperatorSubscriber_1$R = OperatorSubscriber$1; +var executeSchedule_1$3 = executeSchedule$1; +function combineLatest$2() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var scheduler = args_1$b.popScheduler(args); + var resultSelector = args_1$b.popResultSelector(args); + var _a = argsArgArrayOrObject_1$1.argsArgArrayOrObject(args), observables = _a.args, keys = _a.keys; + if (observables.length === 0) { + return from_1$5.from([], scheduler); + } + var result = new Observable_1$d.Observable(combineLatestInit(observables, scheduler, keys + ? + function (values) { return createObject_1$1.createObject(keys, values); } + : + identity_1$d.identity)); + return resultSelector ? result.pipe(mapOneOrManyArgs_1$5.mapOneOrManyArgs(resultSelector)) : result; +} +combineLatest$3.combineLatest = combineLatest$2; +function combineLatestInit(observables, scheduler, valueTransform) { + if (valueTransform === void 0) { valueTransform = identity_1$d.identity; } + return function (subscriber) { + maybeSchedule(scheduler, function () { + var length = observables.length; + var values = new Array(length); + var active = length; + var remainingFirstValues = length; + var _loop_1 = function (i) { + maybeSchedule(scheduler, function () { + var source = from_1$5.from(observables[i], scheduler); + var hasFirstValue = false; + source.subscribe(OperatorSubscriber_1$R.createOperatorSubscriber(subscriber, function (value) { + values[i] = value; + if (!hasFirstValue) { + hasFirstValue = true; + remainingFirstValues--; + } + if (!remainingFirstValues) { + subscriber.next(valueTransform(values.slice())); + } + }, function () { + if (!--active) { + subscriber.complete(); + } + })); + }, subscriber); + }; + for (var i = 0; i < length; i++) { + _loop_1(i); + } + }, subscriber); + }; +} +combineLatest$3.combineLatestInit = combineLatestInit; +function maybeSchedule(scheduler, execute, subscription) { + if (scheduler) { + executeSchedule_1$3.executeSchedule(subscription, scheduler, execute); + } + else { + execute(); + } +} + +var concat$3 = {}; + +var concatAll$1 = {}; + +var mergeAll$1 = {}; + +var mergeMap$1 = {}; + +var mergeInternals$1 = {}; + +Object.defineProperty(mergeInternals$1, "__esModule", { value: true }); +mergeInternals$1.mergeInternals = void 0; +var innerFrom_1$A = innerFrom$1; +var executeSchedule_1$2 = executeSchedule$1; +var OperatorSubscriber_1$Q = OperatorSubscriber$1; +function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) { + var buffer = []; + var active = 0; + var index = 0; + var isComplete = false; + var checkComplete = function () { + if (isComplete && !buffer.length && !active) { + subscriber.complete(); + } + }; + var outerNext = function (value) { return (active < concurrent ? doInnerSub(value) : buffer.push(value)); }; + var doInnerSub = function (value) { + expand && subscriber.next(value); + active++; + var innerComplete = false; + innerFrom_1$A.innerFrom(project(value, index++)).subscribe(OperatorSubscriber_1$Q.createOperatorSubscriber(subscriber, function (innerValue) { + onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue); + if (expand) { + outerNext(innerValue); + } + else { + subscriber.next(innerValue); + } + }, function () { + innerComplete = true; + }, undefined, function () { + if (innerComplete) { + try { + active--; + var _loop_1 = function () { + var bufferedValue = buffer.shift(); + if (innerSubScheduler) { + executeSchedule_1$2.executeSchedule(subscriber, innerSubScheduler, function () { return doInnerSub(bufferedValue); }); + } + else { + doInnerSub(bufferedValue); + } + }; + while (buffer.length && active < concurrent) { + _loop_1(); + } + checkComplete(); + } + catch (err) { + subscriber.error(err); + } + } + })); + }; + source.subscribe(OperatorSubscriber_1$Q.createOperatorSubscriber(subscriber, outerNext, function () { + isComplete = true; + checkComplete(); + })); + return function () { + additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer(); + }; +} +mergeInternals$1.mergeInternals = mergeInternals; + +Object.defineProperty(mergeMap$1, "__esModule", { value: true }); +mergeMap$1.mergeMap = void 0; +var map_1$4 = map$2; +var innerFrom_1$z = innerFrom$1; +var lift_1$$ = lift; +var mergeInternals_1$2 = mergeInternals$1; +var isFunction_1$b = isFunction$1; +function mergeMap(project, resultSelector, concurrent) { + if (concurrent === void 0) { concurrent = Infinity; } + if (isFunction_1$b.isFunction(resultSelector)) { + return mergeMap(function (a, i) { return map_1$4.map(function (b, ii) { return resultSelector(a, b, i, ii); })(innerFrom_1$z.innerFrom(project(a, i))); }, concurrent); + } + else if (typeof resultSelector === 'number') { + concurrent = resultSelector; + } + return lift_1$$.operate(function (source, subscriber) { return mergeInternals_1$2.mergeInternals(source, subscriber, project, concurrent); }); +} +mergeMap$1.mergeMap = mergeMap; + +Object.defineProperty(mergeAll$1, "__esModule", { value: true }); +mergeAll$1.mergeAll = void 0; +var mergeMap_1$6 = mergeMap$1; +var identity_1$c = identity$1; +function mergeAll(concurrent) { + if (concurrent === void 0) { concurrent = Infinity; } + return mergeMap_1$6.mergeMap(identity_1$c.identity, concurrent); +} +mergeAll$1.mergeAll = mergeAll; + +Object.defineProperty(concatAll$1, "__esModule", { value: true }); +concatAll$1.concatAll = void 0; +var mergeAll_1$2 = mergeAll$1; +function concatAll() { + return mergeAll_1$2.mergeAll(1); +} +concatAll$1.concatAll = concatAll; + +Object.defineProperty(concat$3, "__esModule", { value: true }); +concat$3.concat = void 0; +var concatAll_1$1 = concatAll$1; +var args_1$a = args; +var from_1$4 = from$1; +function concat$2() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return concatAll_1$1.concatAll()(from_1$4.from(args, args_1$a.popScheduler(args))); +} +concat$3.concat = concat$2; + +var connectable$1 = {}; + +var defer$1 = {}; + +Object.defineProperty(defer$1, "__esModule", { value: true }); +defer$1.defer = void 0; +var Observable_1$c = Observable$1; +var innerFrom_1$y = innerFrom$1; +function defer(observableFactory) { + return new Observable_1$c.Observable(function (subscriber) { + innerFrom_1$y.innerFrom(observableFactory()).subscribe(subscriber); + }); +} +defer$1.defer = defer; + +Object.defineProperty(connectable$1, "__esModule", { value: true }); +connectable$1.connectable = void 0; +var Subject_1$b = Subject$1; +var Observable_1$b = Observable$1; +var defer_1$2 = defer$1; +var DEFAULT_CONFIG$1 = { + connector: function () { return new Subject_1$b.Subject(); }, + resetOnDisconnect: true, +}; +function connectable(source, config) { + if (config === void 0) { config = DEFAULT_CONFIG$1; } + var connection = null; + var connector = config.connector, _a = config.resetOnDisconnect, resetOnDisconnect = _a === void 0 ? true : _a; + var subject = connector(); + var result = new Observable_1$b.Observable(function (subscriber) { + return subject.subscribe(subscriber); + }); + result.connect = function () { + if (!connection || connection.closed) { + connection = defer_1$2.defer(function () { return source; }).subscribe(subject); + if (resetOnDisconnect) { + connection.add(function () { return (subject = connector()); }); + } + } + return connection; + }; + return result; +} +connectable$1.connectable = connectable; + +var forkJoin$1 = {}; + +Object.defineProperty(forkJoin$1, "__esModule", { value: true }); +forkJoin$1.forkJoin = void 0; +var Observable_1$a = Observable$1; +var argsArgArrayOrObject_1 = argsArgArrayOrObject$1; +var innerFrom_1$x = innerFrom$1; +var args_1$9 = args; +var OperatorSubscriber_1$P = OperatorSubscriber$1; +var mapOneOrManyArgs_1$4 = mapOneOrManyArgs$1; +var createObject_1 = createObject$1; +function forkJoin() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var resultSelector = args_1$9.popResultSelector(args); + var _a = argsArgArrayOrObject_1.argsArgArrayOrObject(args), sources = _a.args, keys = _a.keys; + var result = new Observable_1$a.Observable(function (subscriber) { + var length = sources.length; + if (!length) { + subscriber.complete(); + return; + } + var values = new Array(length); + var remainingCompletions = length; + var remainingEmissions = length; + var _loop_1 = function (sourceIndex) { + var hasValue = false; + innerFrom_1$x.innerFrom(sources[sourceIndex]).subscribe(OperatorSubscriber_1$P.createOperatorSubscriber(subscriber, function (value) { + if (!hasValue) { + hasValue = true; + remainingEmissions--; + } + values[sourceIndex] = value; + }, function () { return remainingCompletions--; }, undefined, function () { + if (!remainingCompletions || !hasValue) { + if (!remainingEmissions) { + subscriber.next(keys ? createObject_1.createObject(keys, values) : values); + } + subscriber.complete(); + } + })); + }; + for (var sourceIndex = 0; sourceIndex < length; sourceIndex++) { + _loop_1(sourceIndex); + } + }); + return resultSelector ? result.pipe(mapOneOrManyArgs_1$4.mapOneOrManyArgs(resultSelector)) : result; +} +forkJoin$1.forkJoin = forkJoin; + +var fromEvent$1 = {}; + +var __read$e = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +Object.defineProperty(fromEvent$1, "__esModule", { value: true }); +fromEvent$1.fromEvent = void 0; +var innerFrom_1$w = innerFrom$1; +var Observable_1$9 = Observable$1; +var mergeMap_1$5 = mergeMap$1; +var isArrayLike_1 = isArrayLike; +var isFunction_1$a = isFunction$1; +var mapOneOrManyArgs_1$3 = mapOneOrManyArgs$1; +var nodeEventEmitterMethods = ['addListener', 'removeListener']; +var eventTargetMethods = ['addEventListener', 'removeEventListener']; +var jqueryMethods = ['on', 'off']; +function fromEvent(target, eventName, options, resultSelector) { + if (isFunction_1$a.isFunction(options)) { + resultSelector = options; + options = undefined; + } + if (resultSelector) { + return fromEvent(target, eventName, options).pipe(mapOneOrManyArgs_1$3.mapOneOrManyArgs(resultSelector)); + } + var _a = __read$e(isEventTarget(target) + ? eventTargetMethods.map(function (methodName) { return function (handler) { return target[methodName](eventName, handler, options); }; }) + : + isNodeStyleEventEmitter(target) + ? nodeEventEmitterMethods.map(toCommonHandlerRegistry(target, eventName)) + : isJQueryStyleEventEmitter(target) + ? jqueryMethods.map(toCommonHandlerRegistry(target, eventName)) + : [], 2), add = _a[0], remove = _a[1]; + if (!add) { + if (isArrayLike_1.isArrayLike(target)) { + return mergeMap_1$5.mergeMap(function (subTarget) { return fromEvent(subTarget, eventName, options); })(innerFrom_1$w.innerFrom(target)); + } + } + if (!add) { + throw new TypeError('Invalid event target'); + } + return new Observable_1$9.Observable(function (subscriber) { + var handler = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return subscriber.next(1 < args.length ? args : args[0]); + }; + add(handler); + return function () { return remove(handler); }; + }); +} +fromEvent$1.fromEvent = fromEvent; +function toCommonHandlerRegistry(target, eventName) { + return function (methodName) { return function (handler) { return target[methodName](eventName, handler); }; }; +} +function isNodeStyleEventEmitter(target) { + return isFunction_1$a.isFunction(target.addListener) && isFunction_1$a.isFunction(target.removeListener); +} +function isJQueryStyleEventEmitter(target) { + return isFunction_1$a.isFunction(target.on) && isFunction_1$a.isFunction(target.off); +} +function isEventTarget(target) { + return isFunction_1$a.isFunction(target.addEventListener) && isFunction_1$a.isFunction(target.removeEventListener); +} + +var fromEventPattern$1 = {}; + +Object.defineProperty(fromEventPattern$1, "__esModule", { value: true }); +fromEventPattern$1.fromEventPattern = void 0; +var Observable_1$8 = Observable$1; +var isFunction_1$9 = isFunction$1; +var mapOneOrManyArgs_1$2 = mapOneOrManyArgs$1; +function fromEventPattern(addHandler, removeHandler, resultSelector) { + if (resultSelector) { + return fromEventPattern(addHandler, removeHandler).pipe(mapOneOrManyArgs_1$2.mapOneOrManyArgs(resultSelector)); + } + return new Observable_1$8.Observable(function (subscriber) { + var handler = function () { + var e = []; + for (var _i = 0; _i < arguments.length; _i++) { + e[_i] = arguments[_i]; + } + return subscriber.next(e.length === 1 ? e[0] : e); + }; + var retValue = addHandler(handler); + return isFunction_1$9.isFunction(removeHandler) ? function () { return removeHandler(handler, retValue); } : undefined; + }); +} +fromEventPattern$1.fromEventPattern = fromEventPattern; + +var generate$1 = {}; + +var __generator = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(generate$1, "__esModule", { value: true }); +generate$1.generate = void 0; +var identity_1$b = identity$1; +var isScheduler_1$1 = isScheduler$1; +var defer_1$1 = defer$1; +var scheduleIterable_1 = scheduleIterable$1; +function generate(initialStateOrOptions, condition, iterate, resultSelectorOrScheduler, scheduler) { + var _a, _b; + var resultSelector; + var initialState; + if (arguments.length === 1) { + (_a = initialStateOrOptions, initialState = _a.initialState, condition = _a.condition, iterate = _a.iterate, _b = _a.resultSelector, resultSelector = _b === void 0 ? identity_1$b.identity : _b, scheduler = _a.scheduler); + } + else { + initialState = initialStateOrOptions; + if (!resultSelectorOrScheduler || isScheduler_1$1.isScheduler(resultSelectorOrScheduler)) { + resultSelector = identity_1$b.identity; + scheduler = resultSelectorOrScheduler; + } + else { + resultSelector = resultSelectorOrScheduler; + } + } + function gen() { + var state; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + state = initialState; + _a.label = 1; + case 1: + if (!(!condition || condition(state))) return [3, 4]; + return [4, resultSelector(state)]; + case 2: + _a.sent(); + _a.label = 3; + case 3: + state = iterate(state); + return [3, 1]; + case 4: return [2]; + } + }); + } + return defer_1$1.defer((scheduler + ? + function () { return scheduleIterable_1.scheduleIterable(gen(), scheduler); } + : + gen)); +} +generate$1.generate = generate; + +var iif$1 = {}; + +Object.defineProperty(iif$1, "__esModule", { value: true }); +iif$1.iif = void 0; +var defer_1 = defer$1; +function iif(condition, trueResult, falseResult) { + return defer_1.defer(function () { return (condition() ? trueResult : falseResult); }); +} +iif$1.iif = iif; + +var interval$1 = {}; + +var timer$1 = {}; + +Object.defineProperty(timer$1, "__esModule", { value: true }); +timer$1.timer = void 0; +var Observable_1$7 = Observable$1; +var async_1$a = async; +var isScheduler_1 = isScheduler$1; +var isDate_1$1 = isDate; +function timer(dueTime, intervalOrScheduler, scheduler) { + if (dueTime === void 0) { dueTime = 0; } + if (scheduler === void 0) { scheduler = async_1$a.async; } + var intervalDuration = -1; + if (intervalOrScheduler != null) { + if (isScheduler_1.isScheduler(intervalOrScheduler)) { + scheduler = intervalOrScheduler; + } + else { + intervalDuration = intervalOrScheduler; + } + } + return new Observable_1$7.Observable(function (subscriber) { + var due = isDate_1$1.isValidDate(dueTime) ? +dueTime - scheduler.now() : dueTime; + if (due < 0) { + due = 0; + } + var n = 0; + return scheduler.schedule(function () { + if (!subscriber.closed) { + subscriber.next(n++); + if (0 <= intervalDuration) { + this.schedule(undefined, intervalDuration); + } + else { + subscriber.complete(); + } + } + }, due); + }); +} +timer$1.timer = timer; + +Object.defineProperty(interval$1, "__esModule", { value: true }); +interval$1.interval = void 0; +var async_1$9 = async; +var timer_1$5 = timer$1; +function interval(period, scheduler) { + if (period === void 0) { period = 0; } + if (scheduler === void 0) { scheduler = async_1$9.asyncScheduler; } + if (period < 0) { + period = 0; + } + return timer_1$5.timer(period, period, scheduler); +} +interval$1.interval = interval; + +var merge$5 = {}; + +Object.defineProperty(merge$5, "__esModule", { value: true }); +merge$5.merge = void 0; +var mergeAll_1$1 = mergeAll$1; +var innerFrom_1$v = innerFrom$1; +var empty_1$6 = empty; +var args_1$8 = args; +var from_1$3 = from$1; +function merge$4() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var scheduler = args_1$8.popScheduler(args); + var concurrent = args_1$8.popNumber(args, Infinity); + var sources = args; + return !sources.length + ? + empty_1$6.EMPTY + : sources.length === 1 + ? + innerFrom_1$v.innerFrom(sources[0]) + : + mergeAll_1$1.mergeAll(concurrent)(from_1$3.from(sources, scheduler)); +} +merge$5.merge = merge$4; + +var never = {}; + +(function (exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.never = exports.NEVER = void 0; + var Observable_1 = Observable$1; + var noop_1 = noop$2; + exports.NEVER = new Observable_1.Observable(noop_1.noop); + function never() { + return exports.NEVER; + } + exports.never = never; + +} (never)); + +var onErrorResumeNext$1 = {}; + +var argsOrArgArray$1 = {}; + +Object.defineProperty(argsOrArgArray$1, "__esModule", { value: true }); +argsOrArgArray$1.argsOrArgArray = void 0; +var isArray$2 = Array.isArray; +function argsOrArgArray(args) { + return args.length === 1 && isArray$2(args[0]) ? args[0] : args; +} +argsOrArgArray$1.argsOrArgArray = argsOrArgArray; + +Object.defineProperty(onErrorResumeNext$1, "__esModule", { value: true }); +onErrorResumeNext$1.onErrorResumeNext = void 0; +var Observable_1$6 = Observable$1; +var argsOrArgArray_1$5 = argsOrArgArray$1; +var OperatorSubscriber_1$O = OperatorSubscriber$1; +var noop_1$c = noop$2; +var innerFrom_1$u = innerFrom$1; +function onErrorResumeNext() { + var sources = []; + for (var _i = 0; _i < arguments.length; _i++) { + sources[_i] = arguments[_i]; + } + var nextSources = argsOrArgArray_1$5.argsOrArgArray(sources); + return new Observable_1$6.Observable(function (subscriber) { + var sourceIndex = 0; + var subscribeNext = function () { + if (sourceIndex < nextSources.length) { + var nextSource = void 0; + try { + nextSource = innerFrom_1$u.innerFrom(nextSources[sourceIndex++]); + } + catch (err) { + subscribeNext(); + return; + } + var innerSubscriber = new OperatorSubscriber_1$O.OperatorSubscriber(subscriber, undefined, noop_1$c.noop, noop_1$c.noop); + nextSource.subscribe(innerSubscriber); + innerSubscriber.add(subscribeNext); + } + else { + subscriber.complete(); + } + }; + subscribeNext(); + }); +} +onErrorResumeNext$1.onErrorResumeNext = onErrorResumeNext; + +var pairs$2 = {}; + +Object.defineProperty(pairs$2, "__esModule", { value: true }); +pairs$2.pairs = void 0; +var from_1$2 = from$1; +function pairs$1(obj, scheduler) { + return from_1$2.from(Object.entries(obj), scheduler); +} +pairs$2.pairs = pairs$1; + +var partition$1 = {}; + +var not$1 = {}; + +Object.defineProperty(not$1, "__esModule", { value: true }); +not$1.not = void 0; +function not(pred, thisArg) { + return function (value, index) { return !pred.call(thisArg, value, index); }; +} +not$1.not = not; + +var filter$1 = {}; + +Object.defineProperty(filter$1, "__esModule", { value: true }); +filter$1.filter = void 0; +var lift_1$_ = lift; +var OperatorSubscriber_1$N = OperatorSubscriber$1; +function filter(predicate, thisArg) { + return lift_1$_.operate(function (source, subscriber) { + var index = 0; + source.subscribe(OperatorSubscriber_1$N.createOperatorSubscriber(subscriber, function (value) { return predicate.call(thisArg, value, index++) && subscriber.next(value); })); + }); +} +filter$1.filter = filter; + +Object.defineProperty(partition$1, "__esModule", { value: true }); +partition$1.partition = void 0; +var not_1 = not$1; +var filter_1$4 = filter$1; +var innerFrom_1$t = innerFrom$1; +function partition(source, predicate, thisArg) { + return [filter_1$4.filter(predicate, thisArg)(innerFrom_1$t.innerFrom(source)), filter_1$4.filter(not_1.not(predicate, thisArg))(innerFrom_1$t.innerFrom(source))]; +} +partition$1.partition = partition; + +var race$1 = {}; + +Object.defineProperty(race$1, "__esModule", { value: true }); +race$1.raceInit = race$1.race = void 0; +var Observable_1$5 = Observable$1; +var innerFrom_1$s = innerFrom$1; +var argsOrArgArray_1$4 = argsOrArgArray$1; +var OperatorSubscriber_1$M = OperatorSubscriber$1; +function race() { + var sources = []; + for (var _i = 0; _i < arguments.length; _i++) { + sources[_i] = arguments[_i]; + } + sources = argsOrArgArray_1$4.argsOrArgArray(sources); + return sources.length === 1 ? innerFrom_1$s.innerFrom(sources[0]) : new Observable_1$5.Observable(raceInit(sources)); +} +race$1.race = race; +function raceInit(sources) { + return function (subscriber) { + var subscriptions = []; + var _loop_1 = function (i) { + subscriptions.push(innerFrom_1$s.innerFrom(sources[i]).subscribe(OperatorSubscriber_1$M.createOperatorSubscriber(subscriber, function (value) { + if (subscriptions) { + for (var s = 0; s < subscriptions.length; s++) { + s !== i && subscriptions[s].unsubscribe(); + } + subscriptions = null; + } + subscriber.next(value); + }))); + }; + for (var i = 0; subscriptions && !subscriber.closed && i < sources.length; i++) { + _loop_1(i); + } + }; +} +race$1.raceInit = raceInit; + +var range$1 = {}; + +Object.defineProperty(range$1, "__esModule", { value: true }); +range$1.range = void 0; +var Observable_1$4 = Observable$1; +var empty_1$5 = empty; +function range(start, count, scheduler) { + if (count == null) { + count = start; + start = 0; + } + if (count <= 0) { + return empty_1$5.EMPTY; + } + var end = count + start; + return new Observable_1$4.Observable(scheduler + ? + function (subscriber) { + var n = start; + return scheduler.schedule(function () { + if (n < end) { + subscriber.next(n++); + this.schedule(); + } + else { + subscriber.complete(); + } + }); + } + : + function (subscriber) { + var n = start; + while (n < end && !subscriber.closed) { + subscriber.next(n++); + } + subscriber.complete(); + }); +} +range$1.range = range; + +var using$1 = {}; + +Object.defineProperty(using$1, "__esModule", { value: true }); +using$1.using = void 0; +var Observable_1$3 = Observable$1; +var innerFrom_1$r = innerFrom$1; +var empty_1$4 = empty; +function using(resourceFactory, observableFactory) { + return new Observable_1$3.Observable(function (subscriber) { + var resource = resourceFactory(); + var result = observableFactory(resource); + var source = result ? innerFrom_1$r.innerFrom(result) : empty_1$4.EMPTY; + source.subscribe(subscriber); + return function () { + if (resource) { + resource.unsubscribe(); + } + }; + }); +} +using$1.using = using; + +var zip$3 = {}; + +var __read$d = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray$d = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +Object.defineProperty(zip$3, "__esModule", { value: true }); +zip$3.zip = void 0; +var Observable_1$2 = Observable$1; +var innerFrom_1$q = innerFrom$1; +var argsOrArgArray_1$3 = argsOrArgArray$1; +var empty_1$3 = empty; +var OperatorSubscriber_1$L = OperatorSubscriber$1; +var args_1$7 = args; +function zip$2() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var resultSelector = args_1$7.popResultSelector(args); + var sources = argsOrArgArray_1$3.argsOrArgArray(args); + return sources.length + ? new Observable_1$2.Observable(function (subscriber) { + var buffers = sources.map(function () { return []; }); + var completed = sources.map(function () { return false; }); + subscriber.add(function () { + buffers = completed = null; + }); + var _loop_1 = function (sourceIndex) { + innerFrom_1$q.innerFrom(sources[sourceIndex]).subscribe(OperatorSubscriber_1$L.createOperatorSubscriber(subscriber, function (value) { + buffers[sourceIndex].push(value); + if (buffers.every(function (buffer) { return buffer.length; })) { + var result = buffers.map(function (buffer) { return buffer.shift(); }); + subscriber.next(resultSelector ? resultSelector.apply(void 0, __spreadArray$d([], __read$d(result))) : result); + if (buffers.some(function (buffer, i) { return !buffer.length && completed[i]; })) { + subscriber.complete(); + } + } + }, function () { + completed[sourceIndex] = true; + !buffers[sourceIndex].length && subscriber.complete(); + })); + }; + for (var sourceIndex = 0; !subscriber.closed && sourceIndex < sources.length; sourceIndex++) { + _loop_1(sourceIndex); + } + return function () { + buffers = completed = null; + }; + }) + : empty_1$3.EMPTY; +} +zip$3.zip = zip$2; + +var types = {}; + +Object.defineProperty(types, "__esModule", { value: true }); + +var audit$1 = {}; + +Object.defineProperty(audit$1, "__esModule", { value: true }); +audit$1.audit = void 0; +var lift_1$Z = lift; +var innerFrom_1$p = innerFrom$1; +var OperatorSubscriber_1$K = OperatorSubscriber$1; +function audit(durationSelector) { + return lift_1$Z.operate(function (source, subscriber) { + var hasValue = false; + var lastValue = null; + var durationSubscriber = null; + var isComplete = false; + var endDuration = function () { + durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe(); + durationSubscriber = null; + if (hasValue) { + hasValue = false; + var value = lastValue; + lastValue = null; + subscriber.next(value); + } + isComplete && subscriber.complete(); + }; + var cleanupDuration = function () { + durationSubscriber = null; + isComplete && subscriber.complete(); + }; + source.subscribe(OperatorSubscriber_1$K.createOperatorSubscriber(subscriber, function (value) { + hasValue = true; + lastValue = value; + if (!durationSubscriber) { + innerFrom_1$p.innerFrom(durationSelector(value)).subscribe((durationSubscriber = OperatorSubscriber_1$K.createOperatorSubscriber(subscriber, endDuration, cleanupDuration))); + } + }, function () { + isComplete = true; + (!hasValue || !durationSubscriber || durationSubscriber.closed) && subscriber.complete(); + })); + }); +} +audit$1.audit = audit; + +var auditTime$1 = {}; + +Object.defineProperty(auditTime$1, "__esModule", { value: true }); +auditTime$1.auditTime = void 0; +var async_1$8 = async; +var audit_1 = audit$1; +var timer_1$4 = timer$1; +function auditTime(duration, scheduler) { + if (scheduler === void 0) { scheduler = async_1$8.asyncScheduler; } + return audit_1.audit(function () { return timer_1$4.timer(duration, scheduler); }); +} +auditTime$1.auditTime = auditTime; + +var buffer$2 = {}; + +Object.defineProperty(buffer$2, "__esModule", { value: true }); +buffer$2.buffer = void 0; +var lift_1$Y = lift; +var noop_1$b = noop$2; +var OperatorSubscriber_1$J = OperatorSubscriber$1; +var innerFrom_1$o = innerFrom$1; +function buffer$1(closingNotifier) { + return lift_1$Y.operate(function (source, subscriber) { + var currentBuffer = []; + source.subscribe(OperatorSubscriber_1$J.createOperatorSubscriber(subscriber, function (value) { return currentBuffer.push(value); }, function () { + subscriber.next(currentBuffer); + subscriber.complete(); + })); + innerFrom_1$o.innerFrom(closingNotifier).subscribe(OperatorSubscriber_1$J.createOperatorSubscriber(subscriber, function () { + var b = currentBuffer; + currentBuffer = []; + subscriber.next(b); + }, noop_1$b.noop)); + return function () { + currentBuffer = null; + }; + }); +} +buffer$2.buffer = buffer$1; + +var bufferCount$1 = {}; + +var __values$5 = (commonjsGlobal && commonjsGlobal.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(bufferCount$1, "__esModule", { value: true }); +bufferCount$1.bufferCount = void 0; +var lift_1$X = lift; +var OperatorSubscriber_1$I = OperatorSubscriber$1; +var arrRemove_1$4 = arrRemove$1; +function bufferCount(bufferSize, startBufferEvery) { + if (startBufferEvery === void 0) { startBufferEvery = null; } + startBufferEvery = startBufferEvery !== null && startBufferEvery !== void 0 ? startBufferEvery : bufferSize; + return lift_1$X.operate(function (source, subscriber) { + var buffers = []; + var count = 0; + source.subscribe(OperatorSubscriber_1$I.createOperatorSubscriber(subscriber, function (value) { + var e_1, _a, e_2, _b; + var toEmit = null; + if (count++ % startBufferEvery === 0) { + buffers.push([]); + } + try { + for (var buffers_1 = __values$5(buffers), buffers_1_1 = buffers_1.next(); !buffers_1_1.done; buffers_1_1 = buffers_1.next()) { + var buffer = buffers_1_1.value; + buffer.push(value); + if (bufferSize <= buffer.length) { + toEmit = toEmit !== null && toEmit !== void 0 ? toEmit : []; + toEmit.push(buffer); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (buffers_1_1 && !buffers_1_1.done && (_a = buffers_1.return)) _a.call(buffers_1); + } + finally { if (e_1) throw e_1.error; } + } + if (toEmit) { + try { + for (var toEmit_1 = __values$5(toEmit), toEmit_1_1 = toEmit_1.next(); !toEmit_1_1.done; toEmit_1_1 = toEmit_1.next()) { + var buffer = toEmit_1_1.value; + arrRemove_1$4.arrRemove(buffers, buffer); + subscriber.next(buffer); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (toEmit_1_1 && !toEmit_1_1.done && (_b = toEmit_1.return)) _b.call(toEmit_1); + } + finally { if (e_2) throw e_2.error; } + } + } + }, function () { + var e_3, _a; + try { + for (var buffers_2 = __values$5(buffers), buffers_2_1 = buffers_2.next(); !buffers_2_1.done; buffers_2_1 = buffers_2.next()) { + var buffer = buffers_2_1.value; + subscriber.next(buffer); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (buffers_2_1 && !buffers_2_1.done && (_a = buffers_2.return)) _a.call(buffers_2); + } + finally { if (e_3) throw e_3.error; } + } + subscriber.complete(); + }, undefined, function () { + buffers = null; + })); + }); +} +bufferCount$1.bufferCount = bufferCount; + +var bufferTime$1 = {}; + +var __values$4 = (commonjsGlobal && commonjsGlobal.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(bufferTime$1, "__esModule", { value: true }); +bufferTime$1.bufferTime = void 0; +var Subscription_1$3 = Subscription$1; +var lift_1$W = lift; +var OperatorSubscriber_1$H = OperatorSubscriber$1; +var arrRemove_1$3 = arrRemove$1; +var async_1$7 = async; +var args_1$6 = args; +var executeSchedule_1$1 = executeSchedule$1; +function bufferTime(bufferTimeSpan) { + var _a, _b; + var otherArgs = []; + for (var _i = 1; _i < arguments.length; _i++) { + otherArgs[_i - 1] = arguments[_i]; + } + var scheduler = (_a = args_1$6.popScheduler(otherArgs)) !== null && _a !== void 0 ? _a : async_1$7.asyncScheduler; + var bufferCreationInterval = (_b = otherArgs[0]) !== null && _b !== void 0 ? _b : null; + var maxBufferSize = otherArgs[1] || Infinity; + return lift_1$W.operate(function (source, subscriber) { + var bufferRecords = []; + var restartOnEmit = false; + var emit = function (record) { + var buffer = record.buffer, subs = record.subs; + subs.unsubscribe(); + arrRemove_1$3.arrRemove(bufferRecords, record); + subscriber.next(buffer); + restartOnEmit && startBuffer(); + }; + var startBuffer = function () { + if (bufferRecords) { + var subs = new Subscription_1$3.Subscription(); + subscriber.add(subs); + var buffer = []; + var record_1 = { + buffer: buffer, + subs: subs, + }; + bufferRecords.push(record_1); + executeSchedule_1$1.executeSchedule(subs, scheduler, function () { return emit(record_1); }, bufferTimeSpan); + } + }; + if (bufferCreationInterval !== null && bufferCreationInterval >= 0) { + executeSchedule_1$1.executeSchedule(subscriber, scheduler, startBuffer, bufferCreationInterval, true); + } + else { + restartOnEmit = true; + } + startBuffer(); + var bufferTimeSubscriber = OperatorSubscriber_1$H.createOperatorSubscriber(subscriber, function (value) { + var e_1, _a; + var recordsCopy = bufferRecords.slice(); + try { + for (var recordsCopy_1 = __values$4(recordsCopy), recordsCopy_1_1 = recordsCopy_1.next(); !recordsCopy_1_1.done; recordsCopy_1_1 = recordsCopy_1.next()) { + var record = recordsCopy_1_1.value; + var buffer = record.buffer; + buffer.push(value); + maxBufferSize <= buffer.length && emit(record); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (recordsCopy_1_1 && !recordsCopy_1_1.done && (_a = recordsCopy_1.return)) _a.call(recordsCopy_1); + } + finally { if (e_1) throw e_1.error; } + } + }, function () { + while (bufferRecords === null || bufferRecords === void 0 ? void 0 : bufferRecords.length) { + subscriber.next(bufferRecords.shift().buffer); + } + bufferTimeSubscriber === null || bufferTimeSubscriber === void 0 ? void 0 : bufferTimeSubscriber.unsubscribe(); + subscriber.complete(); + subscriber.unsubscribe(); + }, undefined, function () { return (bufferRecords = null); }); + source.subscribe(bufferTimeSubscriber); + }); +} +bufferTime$1.bufferTime = bufferTime; + +var bufferToggle$1 = {}; + +var __values$3 = (commonjsGlobal && commonjsGlobal.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(bufferToggle$1, "__esModule", { value: true }); +bufferToggle$1.bufferToggle = void 0; +var Subscription_1$2 = Subscription$1; +var lift_1$V = lift; +var innerFrom_1$n = innerFrom$1; +var OperatorSubscriber_1$G = OperatorSubscriber$1; +var noop_1$a = noop$2; +var arrRemove_1$2 = arrRemove$1; +function bufferToggle(openings, closingSelector) { + return lift_1$V.operate(function (source, subscriber) { + var buffers = []; + innerFrom_1$n.innerFrom(openings).subscribe(OperatorSubscriber_1$G.createOperatorSubscriber(subscriber, function (openValue) { + var buffer = []; + buffers.push(buffer); + var closingSubscription = new Subscription_1$2.Subscription(); + var emitBuffer = function () { + arrRemove_1$2.arrRemove(buffers, buffer); + subscriber.next(buffer); + closingSubscription.unsubscribe(); + }; + closingSubscription.add(innerFrom_1$n.innerFrom(closingSelector(openValue)).subscribe(OperatorSubscriber_1$G.createOperatorSubscriber(subscriber, emitBuffer, noop_1$a.noop))); + }, noop_1$a.noop)); + source.subscribe(OperatorSubscriber_1$G.createOperatorSubscriber(subscriber, function (value) { + var e_1, _a; + try { + for (var buffers_1 = __values$3(buffers), buffers_1_1 = buffers_1.next(); !buffers_1_1.done; buffers_1_1 = buffers_1.next()) { + var buffer = buffers_1_1.value; + buffer.push(value); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (buffers_1_1 && !buffers_1_1.done && (_a = buffers_1.return)) _a.call(buffers_1); + } + finally { if (e_1) throw e_1.error; } + } + }, function () { + while (buffers.length > 0) { + subscriber.next(buffers.shift()); + } + subscriber.complete(); + })); + }); +} +bufferToggle$1.bufferToggle = bufferToggle; + +var bufferWhen$1 = {}; + +Object.defineProperty(bufferWhen$1, "__esModule", { value: true }); +bufferWhen$1.bufferWhen = void 0; +var lift_1$U = lift; +var noop_1$9 = noop$2; +var OperatorSubscriber_1$F = OperatorSubscriber$1; +var innerFrom_1$m = innerFrom$1; +function bufferWhen(closingSelector) { + return lift_1$U.operate(function (source, subscriber) { + var buffer = null; + var closingSubscriber = null; + var openBuffer = function () { + closingSubscriber === null || closingSubscriber === void 0 ? void 0 : closingSubscriber.unsubscribe(); + var b = buffer; + buffer = []; + b && subscriber.next(b); + innerFrom_1$m.innerFrom(closingSelector()).subscribe((closingSubscriber = OperatorSubscriber_1$F.createOperatorSubscriber(subscriber, openBuffer, noop_1$9.noop))); + }; + openBuffer(); + source.subscribe(OperatorSubscriber_1$F.createOperatorSubscriber(subscriber, function (value) { return buffer === null || buffer === void 0 ? void 0 : buffer.push(value); }, function () { + buffer && subscriber.next(buffer); + subscriber.complete(); + }, undefined, function () { return (buffer = closingSubscriber = null); })); + }); +} +bufferWhen$1.bufferWhen = bufferWhen; + +var catchError$1 = {}; + +Object.defineProperty(catchError$1, "__esModule", { value: true }); +catchError$1.catchError = void 0; +var innerFrom_1$l = innerFrom$1; +var OperatorSubscriber_1$E = OperatorSubscriber$1; +var lift_1$T = lift; +function catchError(selector) { + return lift_1$T.operate(function (source, subscriber) { + var innerSub = null; + var syncUnsub = false; + var handledResult; + innerSub = source.subscribe(OperatorSubscriber_1$E.createOperatorSubscriber(subscriber, undefined, undefined, function (err) { + handledResult = innerFrom_1$l.innerFrom(selector(err, catchError(selector)(source))); + if (innerSub) { + innerSub.unsubscribe(); + innerSub = null; + handledResult.subscribe(subscriber); + } + else { + syncUnsub = true; + } + })); + if (syncUnsub) { + innerSub.unsubscribe(); + innerSub = null; + handledResult.subscribe(subscriber); + } + }); +} +catchError$1.catchError = catchError; + +var combineAll = {}; + +var combineLatestAll$1 = {}; + +var joinAllInternals$1 = {}; + +var toArray$2 = {}; + +var reduce$1 = {}; + +var scanInternals$1 = {}; + +Object.defineProperty(scanInternals$1, "__esModule", { value: true }); +scanInternals$1.scanInternals = void 0; +var OperatorSubscriber_1$D = OperatorSubscriber$1; +function scanInternals(accumulator, seed, hasSeed, emitOnNext, emitBeforeComplete) { + return function (source, subscriber) { + var hasState = hasSeed; + var state = seed; + var index = 0; + source.subscribe(OperatorSubscriber_1$D.createOperatorSubscriber(subscriber, function (value) { + var i = index++; + state = hasState + ? + accumulator(state, value, i) + : + ((hasState = true), value); + emitOnNext && subscriber.next(state); + }, emitBeforeComplete && + (function () { + hasState && subscriber.next(state); + subscriber.complete(); + }))); + }; +} +scanInternals$1.scanInternals = scanInternals; + +Object.defineProperty(reduce$1, "__esModule", { value: true }); +reduce$1.reduce = void 0; +var scanInternals_1$1 = scanInternals$1; +var lift_1$S = lift; +function reduce(accumulator, seed) { + return lift_1$S.operate(scanInternals_1$1.scanInternals(accumulator, seed, arguments.length >= 2, false, true)); +} +reduce$1.reduce = reduce; + +Object.defineProperty(toArray$2, "__esModule", { value: true }); +toArray$2.toArray = void 0; +var reduce_1$3 = reduce$1; +var lift_1$R = lift; +var arrReducer = function (arr, value) { return (arr.push(value), arr); }; +function toArray$1() { + return lift_1$R.operate(function (source, subscriber) { + reduce_1$3.reduce(arrReducer, [])(source).subscribe(subscriber); + }); +} +toArray$2.toArray = toArray$1; + +Object.defineProperty(joinAllInternals$1, "__esModule", { value: true }); +joinAllInternals$1.joinAllInternals = void 0; +var identity_1$a = identity$1; +var mapOneOrManyArgs_1$1 = mapOneOrManyArgs$1; +var pipe_1$1 = pipe$2; +var mergeMap_1$4 = mergeMap$1; +var toArray_1$1 = toArray$2; +function joinAllInternals(joinFn, project) { + return pipe_1$1.pipe(toArray_1$1.toArray(), mergeMap_1$4.mergeMap(function (sources) { return joinFn(sources); }), project ? mapOneOrManyArgs_1$1.mapOneOrManyArgs(project) : identity_1$a.identity); +} +joinAllInternals$1.joinAllInternals = joinAllInternals; + +Object.defineProperty(combineLatestAll$1, "__esModule", { value: true }); +combineLatestAll$1.combineLatestAll = void 0; +var combineLatest_1$2 = combineLatest$3; +var joinAllInternals_1$1 = joinAllInternals$1; +function combineLatestAll(project) { + return joinAllInternals_1$1.joinAllInternals(combineLatest_1$2.combineLatest, project); +} +combineLatestAll$1.combineLatestAll = combineLatestAll; + +Object.defineProperty(combineAll, "__esModule", { value: true }); +combineAll.combineAll = void 0; +var combineLatestAll_1 = combineLatestAll$1; +combineAll.combineAll = combineLatestAll_1.combineLatestAll; + +var combineLatestWith$1 = {}; + +var combineLatest$1 = {}; + +var __read$c = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray$c = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +Object.defineProperty(combineLatest$1, "__esModule", { value: true }); +combineLatest$1.combineLatest = void 0; +var combineLatest_1$1 = combineLatest$3; +var lift_1$Q = lift; +var argsOrArgArray_1$2 = argsOrArgArray$1; +var mapOneOrManyArgs_1 = mapOneOrManyArgs$1; +var pipe_1 = pipe$2; +var args_1$5 = args; +function combineLatest() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var resultSelector = args_1$5.popResultSelector(args); + return resultSelector + ? pipe_1.pipe(combineLatest.apply(void 0, __spreadArray$c([], __read$c(args))), mapOneOrManyArgs_1.mapOneOrManyArgs(resultSelector)) + : lift_1$Q.operate(function (source, subscriber) { + combineLatest_1$1.combineLatestInit(__spreadArray$c([source], __read$c(argsOrArgArray_1$2.argsOrArgArray(args))))(subscriber); + }); +} +combineLatest$1.combineLatest = combineLatest; + +var __read$b = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray$b = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +Object.defineProperty(combineLatestWith$1, "__esModule", { value: true }); +combineLatestWith$1.combineLatestWith = void 0; +var combineLatest_1 = combineLatest$1; +function combineLatestWith() { + var otherSources = []; + for (var _i = 0; _i < arguments.length; _i++) { + otherSources[_i] = arguments[_i]; + } + return combineLatest_1.combineLatest.apply(void 0, __spreadArray$b([], __read$b(otherSources))); +} +combineLatestWith$1.combineLatestWith = combineLatestWith; + +var concatMap$1 = {}; + +Object.defineProperty(concatMap$1, "__esModule", { value: true }); +concatMap$1.concatMap = void 0; +var mergeMap_1$3 = mergeMap$1; +var isFunction_1$8 = isFunction$1; +function concatMap(project, resultSelector) { + return isFunction_1$8.isFunction(resultSelector) ? mergeMap_1$3.mergeMap(project, resultSelector, 1) : mergeMap_1$3.mergeMap(project, 1); +} +concatMap$1.concatMap = concatMap; + +var concatMapTo$1 = {}; + +Object.defineProperty(concatMapTo$1, "__esModule", { value: true }); +concatMapTo$1.concatMapTo = void 0; +var concatMap_1 = concatMap$1; +var isFunction_1$7 = isFunction$1; +function concatMapTo(innerObservable, resultSelector) { + return isFunction_1$7.isFunction(resultSelector) ? concatMap_1.concatMap(function () { return innerObservable; }, resultSelector) : concatMap_1.concatMap(function () { return innerObservable; }); +} +concatMapTo$1.concatMapTo = concatMapTo; + +var concatWith$1 = {}; + +var concat$1 = {}; + +var __read$a = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray$a = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +Object.defineProperty(concat$1, "__esModule", { value: true }); +concat$1.concat = void 0; +var lift_1$P = lift; +var concatAll_1 = concatAll$1; +var args_1$4 = args; +var from_1$1 = from$1; +function concat() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var scheduler = args_1$4.popScheduler(args); + return lift_1$P.operate(function (source, subscriber) { + concatAll_1.concatAll()(from_1$1.from(__spreadArray$a([source], __read$a(args)), scheduler)).subscribe(subscriber); + }); +} +concat$1.concat = concat; + +var __read$9 = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray$9 = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +Object.defineProperty(concatWith$1, "__esModule", { value: true }); +concatWith$1.concatWith = void 0; +var concat_1$3 = concat$1; +function concatWith() { + var otherSources = []; + for (var _i = 0; _i < arguments.length; _i++) { + otherSources[_i] = arguments[_i]; + } + return concat_1$3.concat.apply(void 0, __spreadArray$9([], __read$9(otherSources))); +} +concatWith$1.concatWith = concatWith; + +var connect$1 = {}; + +var fromSubscribable$1 = {}; + +Object.defineProperty(fromSubscribable$1, "__esModule", { value: true }); +fromSubscribable$1.fromSubscribable = void 0; +var Observable_1$1 = Observable$1; +function fromSubscribable(subscribable) { + return new Observable_1$1.Observable(function (subscriber) { return subscribable.subscribe(subscriber); }); +} +fromSubscribable$1.fromSubscribable = fromSubscribable; + +Object.defineProperty(connect$1, "__esModule", { value: true }); +connect$1.connect = void 0; +var Subject_1$a = Subject$1; +var innerFrom_1$k = innerFrom$1; +var lift_1$O = lift; +var fromSubscribable_1 = fromSubscribable$1; +var DEFAULT_CONFIG = { + connector: function () { return new Subject_1$a.Subject(); }, +}; +function connect(selector, config) { + if (config === void 0) { config = DEFAULT_CONFIG; } + var connector = config.connector; + return lift_1$O.operate(function (source, subscriber) { + var subject = connector(); + innerFrom_1$k.innerFrom(selector(fromSubscribable_1.fromSubscribable(subject))).subscribe(subscriber); + subscriber.add(source.subscribe(subject)); + }); +} +connect$1.connect = connect; + +var count$1 = {}; + +Object.defineProperty(count$1, "__esModule", { value: true }); +count$1.count = void 0; +var reduce_1$2 = reduce$1; +function count(predicate) { + return reduce_1$2.reduce(function (total, value, i) { return (!predicate || predicate(value, i) ? total + 1 : total); }, 0); +} +count$1.count = count; + +var debounce$1 = {}; + +Object.defineProperty(debounce$1, "__esModule", { value: true }); +debounce$1.debounce = void 0; +var lift_1$N = lift; +var noop_1$8 = noop$2; +var OperatorSubscriber_1$C = OperatorSubscriber$1; +var innerFrom_1$j = innerFrom$1; +function debounce(durationSelector) { + return lift_1$N.operate(function (source, subscriber) { + var hasValue = false; + var lastValue = null; + var durationSubscriber = null; + var emit = function () { + durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe(); + durationSubscriber = null; + if (hasValue) { + hasValue = false; + var value = lastValue; + lastValue = null; + subscriber.next(value); + } + }; + source.subscribe(OperatorSubscriber_1$C.createOperatorSubscriber(subscriber, function (value) { + durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe(); + hasValue = true; + lastValue = value; + durationSubscriber = OperatorSubscriber_1$C.createOperatorSubscriber(subscriber, emit, noop_1$8.noop); + innerFrom_1$j.innerFrom(durationSelector(value)).subscribe(durationSubscriber); + }, function () { + emit(); + subscriber.complete(); + }, undefined, function () { + lastValue = durationSubscriber = null; + })); + }); +} +debounce$1.debounce = debounce; + +var debounceTime$1 = {}; + +Object.defineProperty(debounceTime$1, "__esModule", { value: true }); +debounceTime$1.debounceTime = void 0; +var async_1$6 = async; +var lift_1$M = lift; +var OperatorSubscriber_1$B = OperatorSubscriber$1; +function debounceTime(dueTime, scheduler) { + if (scheduler === void 0) { scheduler = async_1$6.asyncScheduler; } + return lift_1$M.operate(function (source, subscriber) { + var activeTask = null; + var lastValue = null; + var lastTime = null; + var emit = function () { + if (activeTask) { + activeTask.unsubscribe(); + activeTask = null; + var value = lastValue; + lastValue = null; + subscriber.next(value); + } + }; + function emitWhenIdle() { + var targetTime = lastTime + dueTime; + var now = scheduler.now(); + if (now < targetTime) { + activeTask = this.schedule(undefined, targetTime - now); + subscriber.add(activeTask); + return; + } + emit(); + } + source.subscribe(OperatorSubscriber_1$B.createOperatorSubscriber(subscriber, function (value) { + lastValue = value; + lastTime = scheduler.now(); + if (!activeTask) { + activeTask = scheduler.schedule(emitWhenIdle, dueTime); + subscriber.add(activeTask); + } + }, function () { + emit(); + subscriber.complete(); + }, undefined, function () { + lastValue = activeTask = null; + })); + }); +} +debounceTime$1.debounceTime = debounceTime; + +var defaultIfEmpty$1 = {}; + +Object.defineProperty(defaultIfEmpty$1, "__esModule", { value: true }); +defaultIfEmpty$1.defaultIfEmpty = void 0; +var lift_1$L = lift; +var OperatorSubscriber_1$A = OperatorSubscriber$1; +function defaultIfEmpty(defaultValue) { + return lift_1$L.operate(function (source, subscriber) { + var hasValue = false; + source.subscribe(OperatorSubscriber_1$A.createOperatorSubscriber(subscriber, function (value) { + hasValue = true; + subscriber.next(value); + }, function () { + if (!hasValue) { + subscriber.next(defaultValue); + } + subscriber.complete(); + })); + }); +} +defaultIfEmpty$1.defaultIfEmpty = defaultIfEmpty; + +var delay$1 = {}; + +var delayWhen$1 = {}; + +var take$1 = {}; + +Object.defineProperty(take$1, "__esModule", { value: true }); +take$1.take = void 0; +var empty_1$2 = empty; +var lift_1$K = lift; +var OperatorSubscriber_1$z = OperatorSubscriber$1; +function take(count) { + return count <= 0 + ? + function () { return empty_1$2.EMPTY; } + : lift_1$K.operate(function (source, subscriber) { + var seen = 0; + source.subscribe(OperatorSubscriber_1$z.createOperatorSubscriber(subscriber, function (value) { + if (++seen <= count) { + subscriber.next(value); + if (count <= seen) { + subscriber.complete(); + } + } + })); + }); +} +take$1.take = take; + +var ignoreElements$1 = {}; + +Object.defineProperty(ignoreElements$1, "__esModule", { value: true }); +ignoreElements$1.ignoreElements = void 0; +var lift_1$J = lift; +var OperatorSubscriber_1$y = OperatorSubscriber$1; +var noop_1$7 = noop$2; +function ignoreElements() { + return lift_1$J.operate(function (source, subscriber) { + source.subscribe(OperatorSubscriber_1$y.createOperatorSubscriber(subscriber, noop_1$7.noop)); + }); +} +ignoreElements$1.ignoreElements = ignoreElements; + +var mapTo$1 = {}; + +Object.defineProperty(mapTo$1, "__esModule", { value: true }); +mapTo$1.mapTo = void 0; +var map_1$3 = map$2; +function mapTo(value) { + return map_1$3.map(function () { return value; }); +} +mapTo$1.mapTo = mapTo; + +Object.defineProperty(delayWhen$1, "__esModule", { value: true }); +delayWhen$1.delayWhen = void 0; +var concat_1$2 = concat$3; +var take_1$2 = take$1; +var ignoreElements_1 = ignoreElements$1; +var mapTo_1 = mapTo$1; +var mergeMap_1$2 = mergeMap$1; +var innerFrom_1$i = innerFrom$1; +function delayWhen(delayDurationSelector, subscriptionDelay) { + if (subscriptionDelay) { + return function (source) { + return concat_1$2.concat(subscriptionDelay.pipe(take_1$2.take(1), ignoreElements_1.ignoreElements()), source.pipe(delayWhen(delayDurationSelector))); + }; + } + return mergeMap_1$2.mergeMap(function (value, index) { return innerFrom_1$i.innerFrom(delayDurationSelector(value, index)).pipe(take_1$2.take(1), mapTo_1.mapTo(value)); }); +} +delayWhen$1.delayWhen = delayWhen; + +Object.defineProperty(delay$1, "__esModule", { value: true }); +delay$1.delay = void 0; +var async_1$5 = async; +var delayWhen_1 = delayWhen$1; +var timer_1$3 = timer$1; +function delay(due, scheduler) { + if (scheduler === void 0) { scheduler = async_1$5.asyncScheduler; } + var duration = timer_1$3.timer(due, scheduler); + return delayWhen_1.delayWhen(function () { return duration; }); +} +delay$1.delay = delay; + +var dematerialize$1 = {}; + +Object.defineProperty(dematerialize$1, "__esModule", { value: true }); +dematerialize$1.dematerialize = void 0; +var Notification_1$1 = Notification; +var lift_1$I = lift; +var OperatorSubscriber_1$x = OperatorSubscriber$1; +function dematerialize() { + return lift_1$I.operate(function (source, subscriber) { + source.subscribe(OperatorSubscriber_1$x.createOperatorSubscriber(subscriber, function (notification) { return Notification_1$1.observeNotification(notification, subscriber); })); + }); +} +dematerialize$1.dematerialize = dematerialize; + +var distinct$1 = {}; + +Object.defineProperty(distinct$1, "__esModule", { value: true }); +distinct$1.distinct = void 0; +var lift_1$H = lift; +var OperatorSubscriber_1$w = OperatorSubscriber$1; +var noop_1$6 = noop$2; +var innerFrom_1$h = innerFrom$1; +function distinct(keySelector, flushes) { + return lift_1$H.operate(function (source, subscriber) { + var distinctKeys = new Set(); + source.subscribe(OperatorSubscriber_1$w.createOperatorSubscriber(subscriber, function (value) { + var key = keySelector ? keySelector(value) : value; + if (!distinctKeys.has(key)) { + distinctKeys.add(key); + subscriber.next(value); + } + })); + flushes && innerFrom_1$h.innerFrom(flushes).subscribe(OperatorSubscriber_1$w.createOperatorSubscriber(subscriber, function () { return distinctKeys.clear(); }, noop_1$6.noop)); + }); +} +distinct$1.distinct = distinct; + +var distinctUntilChanged$1 = {}; + +Object.defineProperty(distinctUntilChanged$1, "__esModule", { value: true }); +distinctUntilChanged$1.distinctUntilChanged = void 0; +var identity_1$9 = identity$1; +var lift_1$G = lift; +var OperatorSubscriber_1$v = OperatorSubscriber$1; +function distinctUntilChanged(comparator, keySelector) { + if (keySelector === void 0) { keySelector = identity_1$9.identity; } + comparator = comparator !== null && comparator !== void 0 ? comparator : defaultCompare; + return lift_1$G.operate(function (source, subscriber) { + var previousKey; + var first = true; + source.subscribe(OperatorSubscriber_1$v.createOperatorSubscriber(subscriber, function (value) { + var currentKey = keySelector(value); + if (first || !comparator(previousKey, currentKey)) { + first = false; + previousKey = currentKey; + subscriber.next(value); + } + })); + }); +} +distinctUntilChanged$1.distinctUntilChanged = distinctUntilChanged; +function defaultCompare(a, b) { + return a === b; +} + +var distinctUntilKeyChanged$1 = {}; + +Object.defineProperty(distinctUntilKeyChanged$1, "__esModule", { value: true }); +distinctUntilKeyChanged$1.distinctUntilKeyChanged = void 0; +var distinctUntilChanged_1 = distinctUntilChanged$1; +function distinctUntilKeyChanged(key, compare) { + return distinctUntilChanged_1.distinctUntilChanged(function (x, y) { return compare ? compare(x[key], y[key]) : x[key] === y[key]; }); +} +distinctUntilKeyChanged$1.distinctUntilKeyChanged = distinctUntilKeyChanged; + +var elementAt$1 = {}; + +var throwIfEmpty$1 = {}; + +Object.defineProperty(throwIfEmpty$1, "__esModule", { value: true }); +throwIfEmpty$1.throwIfEmpty = void 0; +var EmptyError_1$3 = EmptyError; +var lift_1$F = lift; +var OperatorSubscriber_1$u = OperatorSubscriber$1; +function throwIfEmpty(errorFactory) { + if (errorFactory === void 0) { errorFactory = defaultErrorFactory; } + return lift_1$F.operate(function (source, subscriber) { + var hasValue = false; + source.subscribe(OperatorSubscriber_1$u.createOperatorSubscriber(subscriber, function (value) { + hasValue = true; + subscriber.next(value); + }, function () { return (hasValue ? subscriber.complete() : subscriber.error(errorFactory())); })); + }); +} +throwIfEmpty$1.throwIfEmpty = throwIfEmpty; +function defaultErrorFactory() { + return new EmptyError_1$3.EmptyError(); +} + +Object.defineProperty(elementAt$1, "__esModule", { value: true }); +elementAt$1.elementAt = void 0; +var ArgumentOutOfRangeError_1 = ArgumentOutOfRangeError; +var filter_1$3 = filter$1; +var throwIfEmpty_1$2 = throwIfEmpty$1; +var defaultIfEmpty_1$2 = defaultIfEmpty$1; +var take_1$1 = take$1; +function elementAt(index, defaultValue) { + if (index < 0) { + throw new ArgumentOutOfRangeError_1.ArgumentOutOfRangeError(); + } + var hasDefaultValue = arguments.length >= 2; + return function (source) { + return source.pipe(filter_1$3.filter(function (v, i) { return i === index; }), take_1$1.take(1), hasDefaultValue ? defaultIfEmpty_1$2.defaultIfEmpty(defaultValue) : throwIfEmpty_1$2.throwIfEmpty(function () { return new ArgumentOutOfRangeError_1.ArgumentOutOfRangeError(); })); + }; +} +elementAt$1.elementAt = elementAt; + +var endWith$1 = {}; + +var __read$8 = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray$8 = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +Object.defineProperty(endWith$1, "__esModule", { value: true }); +endWith$1.endWith = void 0; +var concat_1$1 = concat$3; +var of_1 = of$1; +function endWith() { + var values = []; + for (var _i = 0; _i < arguments.length; _i++) { + values[_i] = arguments[_i]; + } + return function (source) { return concat_1$1.concat(source, of_1.of.apply(void 0, __spreadArray$8([], __read$8(values)))); }; +} +endWith$1.endWith = endWith; + +var every$1 = {}; + +Object.defineProperty(every$1, "__esModule", { value: true }); +every$1.every = void 0; +var lift_1$E = lift; +var OperatorSubscriber_1$t = OperatorSubscriber$1; +function every(predicate, thisArg) { + return lift_1$E.operate(function (source, subscriber) { + var index = 0; + source.subscribe(OperatorSubscriber_1$t.createOperatorSubscriber(subscriber, function (value) { + if (!predicate.call(thisArg, value, index++, source)) { + subscriber.next(false); + subscriber.complete(); + } + }, function () { + subscriber.next(true); + subscriber.complete(); + })); + }); +} +every$1.every = every; + +var exhaust = {}; + +var exhaustAll$1 = {}; + +var exhaustMap$1 = {}; + +Object.defineProperty(exhaustMap$1, "__esModule", { value: true }); +exhaustMap$1.exhaustMap = void 0; +var map_1$2 = map$2; +var innerFrom_1$g = innerFrom$1; +var lift_1$D = lift; +var OperatorSubscriber_1$s = OperatorSubscriber$1; +function exhaustMap(project, resultSelector) { + if (resultSelector) { + return function (source) { + return source.pipe(exhaustMap(function (a, i) { return innerFrom_1$g.innerFrom(project(a, i)).pipe(map_1$2.map(function (b, ii) { return resultSelector(a, b, i, ii); })); })); + }; + } + return lift_1$D.operate(function (source, subscriber) { + var index = 0; + var innerSub = null; + var isComplete = false; + source.subscribe(OperatorSubscriber_1$s.createOperatorSubscriber(subscriber, function (outerValue) { + if (!innerSub) { + innerSub = OperatorSubscriber_1$s.createOperatorSubscriber(subscriber, undefined, function () { + innerSub = null; + isComplete && subscriber.complete(); + }); + innerFrom_1$g.innerFrom(project(outerValue, index++)).subscribe(innerSub); + } + }, function () { + isComplete = true; + !innerSub && subscriber.complete(); + })); + }); +} +exhaustMap$1.exhaustMap = exhaustMap; + +Object.defineProperty(exhaustAll$1, "__esModule", { value: true }); +exhaustAll$1.exhaustAll = void 0; +var exhaustMap_1 = exhaustMap$1; +var identity_1$8 = identity$1; +function exhaustAll() { + return exhaustMap_1.exhaustMap(identity_1$8.identity); +} +exhaustAll$1.exhaustAll = exhaustAll; + +Object.defineProperty(exhaust, "__esModule", { value: true }); +exhaust.exhaust = void 0; +var exhaustAll_1 = exhaustAll$1; +exhaust.exhaust = exhaustAll_1.exhaustAll; + +var expand$2 = {}; + +Object.defineProperty(expand$2, "__esModule", { value: true }); +expand$2.expand = void 0; +var lift_1$C = lift; +var mergeInternals_1$1 = mergeInternals$1; +function expand$1(project, concurrent, scheduler) { + if (concurrent === void 0) { concurrent = Infinity; } + concurrent = (concurrent || 0) < 1 ? Infinity : concurrent; + return lift_1$C.operate(function (source, subscriber) { + return mergeInternals_1$1.mergeInternals(source, subscriber, project, concurrent, undefined, true, scheduler); + }); +} +expand$2.expand = expand$1; + +var finalize$1 = {}; + +Object.defineProperty(finalize$1, "__esModule", { value: true }); +finalize$1.finalize = void 0; +var lift_1$B = lift; +function finalize(callback) { + return lift_1$B.operate(function (source, subscriber) { + try { + source.subscribe(subscriber); + } + finally { + subscriber.add(callback); + } + }); +} +finalize$1.finalize = finalize; + +var find$1 = {}; + +Object.defineProperty(find$1, "__esModule", { value: true }); +find$1.createFind = find$1.find = void 0; +var lift_1$A = lift; +var OperatorSubscriber_1$r = OperatorSubscriber$1; +function find(predicate, thisArg) { + return lift_1$A.operate(createFind(predicate, thisArg, 'value')); +} +find$1.find = find; +function createFind(predicate, thisArg, emit) { + var findIndex = emit === 'index'; + return function (source, subscriber) { + var index = 0; + source.subscribe(OperatorSubscriber_1$r.createOperatorSubscriber(subscriber, function (value) { + var i = index++; + if (predicate.call(thisArg, value, i, source)) { + subscriber.next(findIndex ? i : value); + subscriber.complete(); + } + }, function () { + subscriber.next(findIndex ? -1 : undefined); + subscriber.complete(); + })); + }; +} +find$1.createFind = createFind; + +var findIndex$1 = {}; + +Object.defineProperty(findIndex$1, "__esModule", { value: true }); +findIndex$1.findIndex = void 0; +var lift_1$z = lift; +var find_1 = find$1; +function findIndex(predicate, thisArg) { + return lift_1$z.operate(find_1.createFind(predicate, thisArg, 'index')); +} +findIndex$1.findIndex = findIndex; + +var first$1 = {}; + +Object.defineProperty(first$1, "__esModule", { value: true }); +first$1.first = void 0; +var EmptyError_1$2 = EmptyError; +var filter_1$2 = filter$1; +var take_1 = take$1; +var defaultIfEmpty_1$1 = defaultIfEmpty$1; +var throwIfEmpty_1$1 = throwIfEmpty$1; +var identity_1$7 = identity$1; +function first(predicate, defaultValue) { + var hasDefaultValue = arguments.length >= 2; + return function (source) { + return source.pipe(predicate ? filter_1$2.filter(function (v, i) { return predicate(v, i, source); }) : identity_1$7.identity, take_1.take(1), hasDefaultValue ? defaultIfEmpty_1$1.defaultIfEmpty(defaultValue) : throwIfEmpty_1$1.throwIfEmpty(function () { return new EmptyError_1$2.EmptyError(); })); + }; +} +first$1.first = first; + +var groupBy$1 = {}; + +Object.defineProperty(groupBy$1, "__esModule", { value: true }); +groupBy$1.groupBy = void 0; +var Observable_1 = Observable$1; +var innerFrom_1$f = innerFrom$1; +var Subject_1$9 = Subject$1; +var lift_1$y = lift; +var OperatorSubscriber_1$q = OperatorSubscriber$1; +function groupBy(keySelector, elementOrOptions, duration, connector) { + return lift_1$y.operate(function (source, subscriber) { + var element; + if (!elementOrOptions || typeof elementOrOptions === 'function') { + element = elementOrOptions; + } + else { + (duration = elementOrOptions.duration, element = elementOrOptions.element, connector = elementOrOptions.connector); + } + var groups = new Map(); + var notify = function (cb) { + groups.forEach(cb); + cb(subscriber); + }; + var handleError = function (err) { return notify(function (consumer) { return consumer.error(err); }); }; + var activeGroups = 0; + var teardownAttempted = false; + var groupBySourceSubscriber = new OperatorSubscriber_1$q.OperatorSubscriber(subscriber, function (value) { + try { + var key_1 = keySelector(value); + var group_1 = groups.get(key_1); + if (!group_1) { + groups.set(key_1, (group_1 = connector ? connector() : new Subject_1$9.Subject())); + var grouped = createGroupedObservable(key_1, group_1); + subscriber.next(grouped); + if (duration) { + var durationSubscriber_1 = OperatorSubscriber_1$q.createOperatorSubscriber(group_1, function () { + group_1.complete(); + durationSubscriber_1 === null || durationSubscriber_1 === void 0 ? void 0 : durationSubscriber_1.unsubscribe(); + }, undefined, undefined, function () { return groups.delete(key_1); }); + groupBySourceSubscriber.add(innerFrom_1$f.innerFrom(duration(grouped)).subscribe(durationSubscriber_1)); + } + } + group_1.next(element ? element(value) : value); + } + catch (err) { + handleError(err); + } + }, function () { return notify(function (consumer) { return consumer.complete(); }); }, handleError, function () { return groups.clear(); }, function () { + teardownAttempted = true; + return activeGroups === 0; + }); + source.subscribe(groupBySourceSubscriber); + function createGroupedObservable(key, groupSubject) { + var result = new Observable_1.Observable(function (groupSubscriber) { + activeGroups++; + var innerSub = groupSubject.subscribe(groupSubscriber); + return function () { + innerSub.unsubscribe(); + --activeGroups === 0 && teardownAttempted && groupBySourceSubscriber.unsubscribe(); + }; + }); + result.key = key; + return result; + } + }); +} +groupBy$1.groupBy = groupBy; + +var isEmpty$1 = {}; + +Object.defineProperty(isEmpty$1, "__esModule", { value: true }); +isEmpty$1.isEmpty = void 0; +var lift_1$x = lift; +var OperatorSubscriber_1$p = OperatorSubscriber$1; +function isEmpty() { + return lift_1$x.operate(function (source, subscriber) { + source.subscribe(OperatorSubscriber_1$p.createOperatorSubscriber(subscriber, function () { + subscriber.next(false); + subscriber.complete(); + }, function () { + subscriber.next(true); + subscriber.complete(); + })); + }); +} +isEmpty$1.isEmpty = isEmpty; + +var last$1 = {}; + +var takeLast$1 = {}; + +var __values$2 = (commonjsGlobal && commonjsGlobal.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(takeLast$1, "__esModule", { value: true }); +takeLast$1.takeLast = void 0; +var empty_1$1 = empty; +var lift_1$w = lift; +var OperatorSubscriber_1$o = OperatorSubscriber$1; +function takeLast(count) { + return count <= 0 + ? function () { return empty_1$1.EMPTY; } + : lift_1$w.operate(function (source, subscriber) { + var buffer = []; + source.subscribe(OperatorSubscriber_1$o.createOperatorSubscriber(subscriber, function (value) { + buffer.push(value); + count < buffer.length && buffer.shift(); + }, function () { + var e_1, _a; + try { + for (var buffer_1 = __values$2(buffer), buffer_1_1 = buffer_1.next(); !buffer_1_1.done; buffer_1_1 = buffer_1.next()) { + var value = buffer_1_1.value; + subscriber.next(value); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (buffer_1_1 && !buffer_1_1.done && (_a = buffer_1.return)) _a.call(buffer_1); + } + finally { if (e_1) throw e_1.error; } + } + subscriber.complete(); + }, undefined, function () { + buffer = null; + })); + }); +} +takeLast$1.takeLast = takeLast; + +Object.defineProperty(last$1, "__esModule", { value: true }); +last$1.last = void 0; +var EmptyError_1$1 = EmptyError; +var filter_1$1 = filter$1; +var takeLast_1 = takeLast$1; +var throwIfEmpty_1 = throwIfEmpty$1; +var defaultIfEmpty_1 = defaultIfEmpty$1; +var identity_1$6 = identity$1; +function last(predicate, defaultValue) { + var hasDefaultValue = arguments.length >= 2; + return function (source) { + return source.pipe(predicate ? filter_1$1.filter(function (v, i) { return predicate(v, i, source); }) : identity_1$6.identity, takeLast_1.takeLast(1), hasDefaultValue ? defaultIfEmpty_1.defaultIfEmpty(defaultValue) : throwIfEmpty_1.throwIfEmpty(function () { return new EmptyError_1$1.EmptyError(); })); + }; +} +last$1.last = last; + +var materialize$1 = {}; + +Object.defineProperty(materialize$1, "__esModule", { value: true }); +materialize$1.materialize = void 0; +var Notification_1 = Notification; +var lift_1$v = lift; +var OperatorSubscriber_1$n = OperatorSubscriber$1; +function materialize() { + return lift_1$v.operate(function (source, subscriber) { + source.subscribe(OperatorSubscriber_1$n.createOperatorSubscriber(subscriber, function (value) { + subscriber.next(Notification_1.Notification.createNext(value)); + }, function () { + subscriber.next(Notification_1.Notification.createComplete()); + subscriber.complete(); + }, function (err) { + subscriber.next(Notification_1.Notification.createError(err)); + subscriber.complete(); + })); + }); +} +materialize$1.materialize = materialize; + +var max$1 = {}; + +Object.defineProperty(max$1, "__esModule", { value: true }); +max$1.max = void 0; +var reduce_1$1 = reduce$1; +var isFunction_1$6 = isFunction$1; +function max(comparer) { + return reduce_1$1.reduce(isFunction_1$6.isFunction(comparer) ? function (x, y) { return (comparer(x, y) > 0 ? x : y); } : function (x, y) { return (x > y ? x : y); }); +} +max$1.max = max; + +var flatMap = {}; + +Object.defineProperty(flatMap, "__esModule", { value: true }); +flatMap.flatMap = void 0; +var mergeMap_1$1 = mergeMap$1; +flatMap.flatMap = mergeMap_1$1.mergeMap; + +var mergeMapTo$1 = {}; + +Object.defineProperty(mergeMapTo$1, "__esModule", { value: true }); +mergeMapTo$1.mergeMapTo = void 0; +var mergeMap_1 = mergeMap$1; +var isFunction_1$5 = isFunction$1; +function mergeMapTo(innerObservable, resultSelector, concurrent) { + if (concurrent === void 0) { concurrent = Infinity; } + if (isFunction_1$5.isFunction(resultSelector)) { + return mergeMap_1.mergeMap(function () { return innerObservable; }, resultSelector, concurrent); + } + if (typeof resultSelector === 'number') { + concurrent = resultSelector; + } + return mergeMap_1.mergeMap(function () { return innerObservable; }, concurrent); +} +mergeMapTo$1.mergeMapTo = mergeMapTo; + +var mergeScan$1 = {}; + +Object.defineProperty(mergeScan$1, "__esModule", { value: true }); +mergeScan$1.mergeScan = void 0; +var lift_1$u = lift; +var mergeInternals_1 = mergeInternals$1; +function mergeScan(accumulator, seed, concurrent) { + if (concurrent === void 0) { concurrent = Infinity; } + return lift_1$u.operate(function (source, subscriber) { + var state = seed; + return mergeInternals_1.mergeInternals(source, subscriber, function (value, index) { return accumulator(state, value, index); }, concurrent, function (value) { + state = value; + }, false, undefined, function () { return (state = null); }); + }); +} +mergeScan$1.mergeScan = mergeScan; + +var mergeWith$1 = {}; + +var merge$3 = {}; + +var __read$7 = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray$7 = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +Object.defineProperty(merge$3, "__esModule", { value: true }); +merge$3.merge = void 0; +var lift_1$t = lift; +var argsOrArgArray_1$1 = argsOrArgArray$1; +var mergeAll_1 = mergeAll$1; +var args_1$3 = args; +var from_1 = from$1; +function merge$2() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var scheduler = args_1$3.popScheduler(args); + var concurrent = args_1$3.popNumber(args, Infinity); + args = argsOrArgArray_1$1.argsOrArgArray(args); + return lift_1$t.operate(function (source, subscriber) { + mergeAll_1.mergeAll(concurrent)(from_1.from(__spreadArray$7([source], __read$7(args)), scheduler)).subscribe(subscriber); + }); +} +merge$3.merge = merge$2; + +var __read$6 = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray$6 = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +Object.defineProperty(mergeWith$1, "__esModule", { value: true }); +mergeWith$1.mergeWith = void 0; +var merge_1 = merge$3; +function mergeWith() { + var otherSources = []; + for (var _i = 0; _i < arguments.length; _i++) { + otherSources[_i] = arguments[_i]; + } + return merge_1.merge.apply(void 0, __spreadArray$6([], __read$6(otherSources))); +} +mergeWith$1.mergeWith = mergeWith; + +var min$1 = {}; + +Object.defineProperty(min$1, "__esModule", { value: true }); +min$1.min = void 0; +var reduce_1 = reduce$1; +var isFunction_1$4 = isFunction$1; +function min(comparer) { + return reduce_1.reduce(isFunction_1$4.isFunction(comparer) ? function (x, y) { return (comparer(x, y) < 0 ? x : y); } : function (x, y) { return (x < y ? x : y); }); +} +min$1.min = min; + +var multicast$1 = {}; + +Object.defineProperty(multicast$1, "__esModule", { value: true }); +multicast$1.multicast = void 0; +var ConnectableObservable_1$2 = ConnectableObservable$1; +var isFunction_1$3 = isFunction$1; +var connect_1$1 = connect$1; +function multicast(subjectOrSubjectFactory, selector) { + var subjectFactory = isFunction_1$3.isFunction(subjectOrSubjectFactory) ? subjectOrSubjectFactory : function () { return subjectOrSubjectFactory; }; + if (isFunction_1$3.isFunction(selector)) { + return connect_1$1.connect(selector, { + connector: subjectFactory, + }); + } + return function (source) { return new ConnectableObservable_1$2.ConnectableObservable(source, subjectFactory); }; +} +multicast$1.multicast = multicast; + +var onErrorResumeNextWith$1 = {}; + +var __read$5 = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray$5 = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +Object.defineProperty(onErrorResumeNextWith$1, "__esModule", { value: true }); +onErrorResumeNextWith$1.onErrorResumeNext = onErrorResumeNextWith$1.onErrorResumeNextWith = void 0; +var argsOrArgArray_1 = argsOrArgArray$1; +var onErrorResumeNext_1 = onErrorResumeNext$1; +function onErrorResumeNextWith() { + var sources = []; + for (var _i = 0; _i < arguments.length; _i++) { + sources[_i] = arguments[_i]; + } + var nextSources = argsOrArgArray_1.argsOrArgArray(sources); + return function (source) { return onErrorResumeNext_1.onErrorResumeNext.apply(void 0, __spreadArray$5([source], __read$5(nextSources))); }; +} +onErrorResumeNextWith$1.onErrorResumeNextWith = onErrorResumeNextWith; +onErrorResumeNextWith$1.onErrorResumeNext = onErrorResumeNextWith; + +var pairwise$1 = {}; + +Object.defineProperty(pairwise$1, "__esModule", { value: true }); +pairwise$1.pairwise = void 0; +var lift_1$s = lift; +var OperatorSubscriber_1$m = OperatorSubscriber$1; +function pairwise() { + return lift_1$s.operate(function (source, subscriber) { + var prev; + var hasPrev = false; + source.subscribe(OperatorSubscriber_1$m.createOperatorSubscriber(subscriber, function (value) { + var p = prev; + prev = value; + hasPrev && subscriber.next([p, value]); + hasPrev = true; + })); + }); +} +pairwise$1.pairwise = pairwise; + +var pluck$1 = {}; + +Object.defineProperty(pluck$1, "__esModule", { value: true }); +pluck$1.pluck = void 0; +var map_1$1 = map$2; +function pluck() { + var properties = []; + for (var _i = 0; _i < arguments.length; _i++) { + properties[_i] = arguments[_i]; + } + var length = properties.length; + if (length === 0) { + throw new Error('list of properties cannot be empty.'); + } + return map_1$1.map(function (x) { + var currentProp = x; + for (var i = 0; i < length; i++) { + var p = currentProp === null || currentProp === void 0 ? void 0 : currentProp[properties[i]]; + if (typeof p !== 'undefined') { + currentProp = p; + } + else { + return undefined; + } + } + return currentProp; + }); +} +pluck$1.pluck = pluck; + +var publish$1 = {}; + +Object.defineProperty(publish$1, "__esModule", { value: true }); +publish$1.publish = void 0; +var Subject_1$8 = Subject$1; +var multicast_1$1 = multicast$1; +var connect_1 = connect$1; +function publish(selector) { + return selector ? function (source) { return connect_1.connect(selector)(source); } : function (source) { return multicast_1$1.multicast(new Subject_1$8.Subject())(source); }; +} +publish$1.publish = publish; + +var publishBehavior$1 = {}; + +Object.defineProperty(publishBehavior$1, "__esModule", { value: true }); +publishBehavior$1.publishBehavior = void 0; +var BehaviorSubject_1 = BehaviorSubject$1; +var ConnectableObservable_1$1 = ConnectableObservable$1; +function publishBehavior(initialValue) { + return function (source) { + var subject = new BehaviorSubject_1.BehaviorSubject(initialValue); + return new ConnectableObservable_1$1.ConnectableObservable(source, function () { return subject; }); + }; +} +publishBehavior$1.publishBehavior = publishBehavior; + +var publishLast$1 = {}; + +Object.defineProperty(publishLast$1, "__esModule", { value: true }); +publishLast$1.publishLast = void 0; +var AsyncSubject_1 = AsyncSubject$1; +var ConnectableObservable_1 = ConnectableObservable$1; +function publishLast() { + return function (source) { + var subject = new AsyncSubject_1.AsyncSubject(); + return new ConnectableObservable_1.ConnectableObservable(source, function () { return subject; }); + }; +} +publishLast$1.publishLast = publishLast; + +var publishReplay$1 = {}; + +Object.defineProperty(publishReplay$1, "__esModule", { value: true }); +publishReplay$1.publishReplay = void 0; +var ReplaySubject_1$1 = ReplaySubject$1; +var multicast_1 = multicast$1; +var isFunction_1$2 = isFunction$1; +function publishReplay(bufferSize, windowTime, selectorOrScheduler, timestampProvider) { + if (selectorOrScheduler && !isFunction_1$2.isFunction(selectorOrScheduler)) { + timestampProvider = selectorOrScheduler; + } + var selector = isFunction_1$2.isFunction(selectorOrScheduler) ? selectorOrScheduler : undefined; + return function (source) { return multicast_1.multicast(new ReplaySubject_1$1.ReplaySubject(bufferSize, windowTime, timestampProvider), selector)(source); }; +} +publishReplay$1.publishReplay = publishReplay; + +var raceWith$1 = {}; + +var __read$4 = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray$4 = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +Object.defineProperty(raceWith$1, "__esModule", { value: true }); +raceWith$1.raceWith = void 0; +var race_1 = race$1; +var lift_1$r = lift; +var identity_1$5 = identity$1; +function raceWith() { + var otherSources = []; + for (var _i = 0; _i < arguments.length; _i++) { + otherSources[_i] = arguments[_i]; + } + return !otherSources.length + ? identity_1$5.identity + : lift_1$r.operate(function (source, subscriber) { + race_1.raceInit(__spreadArray$4([source], __read$4(otherSources)))(subscriber); + }); +} +raceWith$1.raceWith = raceWith; + +var repeat$2 = {}; + +Object.defineProperty(repeat$2, "__esModule", { value: true }); +repeat$2.repeat = void 0; +var empty_1 = empty; +var lift_1$q = lift; +var OperatorSubscriber_1$l = OperatorSubscriber$1; +var innerFrom_1$e = innerFrom$1; +var timer_1$2 = timer$1; +function repeat$1(countOrConfig) { + var _a; + var count = Infinity; + var delay; + if (countOrConfig != null) { + if (typeof countOrConfig === 'object') { + (_a = countOrConfig.count, count = _a === void 0 ? Infinity : _a, delay = countOrConfig.delay); + } + else { + count = countOrConfig; + } + } + return count <= 0 + ? function () { return empty_1.EMPTY; } + : lift_1$q.operate(function (source, subscriber) { + var soFar = 0; + var sourceSub; + var resubscribe = function () { + sourceSub === null || sourceSub === void 0 ? void 0 : sourceSub.unsubscribe(); + sourceSub = null; + if (delay != null) { + var notifier = typeof delay === 'number' ? timer_1$2.timer(delay) : innerFrom_1$e.innerFrom(delay(soFar)); + var notifierSubscriber_1 = OperatorSubscriber_1$l.createOperatorSubscriber(subscriber, function () { + notifierSubscriber_1.unsubscribe(); + subscribeToSource(); + }); + notifier.subscribe(notifierSubscriber_1); + } + else { + subscribeToSource(); + } + }; + var subscribeToSource = function () { + var syncUnsub = false; + sourceSub = source.subscribe(OperatorSubscriber_1$l.createOperatorSubscriber(subscriber, undefined, function () { + if (++soFar < count) { + if (sourceSub) { + resubscribe(); + } + else { + syncUnsub = true; + } + } + else { + subscriber.complete(); + } + })); + if (syncUnsub) { + resubscribe(); + } + }; + subscribeToSource(); + }); +} +repeat$2.repeat = repeat$1; + +var repeatWhen$1 = {}; + +Object.defineProperty(repeatWhen$1, "__esModule", { value: true }); +repeatWhen$1.repeatWhen = void 0; +var innerFrom_1$d = innerFrom$1; +var Subject_1$7 = Subject$1; +var lift_1$p = lift; +var OperatorSubscriber_1$k = OperatorSubscriber$1; +function repeatWhen(notifier) { + return lift_1$p.operate(function (source, subscriber) { + var innerSub; + var syncResub = false; + var completions$; + var isNotifierComplete = false; + var isMainComplete = false; + var checkComplete = function () { return isMainComplete && isNotifierComplete && (subscriber.complete(), true); }; + var getCompletionSubject = function () { + if (!completions$) { + completions$ = new Subject_1$7.Subject(); + innerFrom_1$d.innerFrom(notifier(completions$)).subscribe(OperatorSubscriber_1$k.createOperatorSubscriber(subscriber, function () { + if (innerSub) { + subscribeForRepeatWhen(); + } + else { + syncResub = true; + } + }, function () { + isNotifierComplete = true; + checkComplete(); + })); + } + return completions$; + }; + var subscribeForRepeatWhen = function () { + isMainComplete = false; + innerSub = source.subscribe(OperatorSubscriber_1$k.createOperatorSubscriber(subscriber, undefined, function () { + isMainComplete = true; + !checkComplete() && getCompletionSubject().next(); + })); + if (syncResub) { + innerSub.unsubscribe(); + innerSub = null; + syncResub = false; + subscribeForRepeatWhen(); + } + }; + subscribeForRepeatWhen(); + }); +} +repeatWhen$1.repeatWhen = repeatWhen; + +var retry$1 = {}; + +Object.defineProperty(retry$1, "__esModule", { value: true }); +retry$1.retry = void 0; +var lift_1$o = lift; +var OperatorSubscriber_1$j = OperatorSubscriber$1; +var identity_1$4 = identity$1; +var timer_1$1 = timer$1; +var innerFrom_1$c = innerFrom$1; +function retry(configOrCount) { + if (configOrCount === void 0) { configOrCount = Infinity; } + var config; + if (configOrCount && typeof configOrCount === 'object') { + config = configOrCount; + } + else { + config = { + count: configOrCount, + }; + } + var _a = config.count, count = _a === void 0 ? Infinity : _a, delay = config.delay, _b = config.resetOnSuccess, resetOnSuccess = _b === void 0 ? false : _b; + return count <= 0 + ? identity_1$4.identity + : lift_1$o.operate(function (source, subscriber) { + var soFar = 0; + var innerSub; + var subscribeForRetry = function () { + var syncUnsub = false; + innerSub = source.subscribe(OperatorSubscriber_1$j.createOperatorSubscriber(subscriber, function (value) { + if (resetOnSuccess) { + soFar = 0; + } + subscriber.next(value); + }, undefined, function (err) { + if (soFar++ < count) { + var resub_1 = function () { + if (innerSub) { + innerSub.unsubscribe(); + innerSub = null; + subscribeForRetry(); + } + else { + syncUnsub = true; + } + }; + if (delay != null) { + var notifier = typeof delay === 'number' ? timer_1$1.timer(delay) : innerFrom_1$c.innerFrom(delay(err, soFar)); + var notifierSubscriber_1 = OperatorSubscriber_1$j.createOperatorSubscriber(subscriber, function () { + notifierSubscriber_1.unsubscribe(); + resub_1(); + }, function () { + subscriber.complete(); + }); + notifier.subscribe(notifierSubscriber_1); + } + else { + resub_1(); + } + } + else { + subscriber.error(err); + } + })); + if (syncUnsub) { + innerSub.unsubscribe(); + innerSub = null; + subscribeForRetry(); + } + }; + subscribeForRetry(); + }); +} +retry$1.retry = retry; + +var retryWhen$1 = {}; + +Object.defineProperty(retryWhen$1, "__esModule", { value: true }); +retryWhen$1.retryWhen = void 0; +var innerFrom_1$b = innerFrom$1; +var Subject_1$6 = Subject$1; +var lift_1$n = lift; +var OperatorSubscriber_1$i = OperatorSubscriber$1; +function retryWhen(notifier) { + return lift_1$n.operate(function (source, subscriber) { + var innerSub; + var syncResub = false; + var errors$; + var subscribeForRetryWhen = function () { + innerSub = source.subscribe(OperatorSubscriber_1$i.createOperatorSubscriber(subscriber, undefined, undefined, function (err) { + if (!errors$) { + errors$ = new Subject_1$6.Subject(); + innerFrom_1$b.innerFrom(notifier(errors$)).subscribe(OperatorSubscriber_1$i.createOperatorSubscriber(subscriber, function () { + return innerSub ? subscribeForRetryWhen() : (syncResub = true); + })); + } + if (errors$) { + errors$.next(err); + } + })); + if (syncResub) { + innerSub.unsubscribe(); + innerSub = null; + syncResub = false; + subscribeForRetryWhen(); + } + }; + subscribeForRetryWhen(); + }); +} +retryWhen$1.retryWhen = retryWhen; + +var sample$2 = {}; + +Object.defineProperty(sample$2, "__esModule", { value: true }); +sample$2.sample = void 0; +var innerFrom_1$a = innerFrom$1; +var lift_1$m = lift; +var noop_1$5 = noop$2; +var OperatorSubscriber_1$h = OperatorSubscriber$1; +function sample$1(notifier) { + return lift_1$m.operate(function (source, subscriber) { + var hasValue = false; + var lastValue = null; + source.subscribe(OperatorSubscriber_1$h.createOperatorSubscriber(subscriber, function (value) { + hasValue = true; + lastValue = value; + })); + innerFrom_1$a.innerFrom(notifier).subscribe(OperatorSubscriber_1$h.createOperatorSubscriber(subscriber, function () { + if (hasValue) { + hasValue = false; + var value = lastValue; + lastValue = null; + subscriber.next(value); + } + }, noop_1$5.noop)); + }); +} +sample$2.sample = sample$1; + +var sampleTime$1 = {}; + +Object.defineProperty(sampleTime$1, "__esModule", { value: true }); +sampleTime$1.sampleTime = void 0; +var async_1$4 = async; +var sample_1 = sample$2; +var interval_1 = interval$1; +function sampleTime(period, scheduler) { + if (scheduler === void 0) { scheduler = async_1$4.asyncScheduler; } + return sample_1.sample(interval_1.interval(period, scheduler)); +} +sampleTime$1.sampleTime = sampleTime; + +var scan$1 = {}; + +Object.defineProperty(scan$1, "__esModule", { value: true }); +scan$1.scan = void 0; +var lift_1$l = lift; +var scanInternals_1 = scanInternals$1; +function scan(accumulator, seed) { + return lift_1$l.operate(scanInternals_1.scanInternals(accumulator, seed, arguments.length >= 2, true)); +} +scan$1.scan = scan; + +var sequenceEqual$1 = {}; + +Object.defineProperty(sequenceEqual$1, "__esModule", { value: true }); +sequenceEqual$1.sequenceEqual = void 0; +var lift_1$k = lift; +var OperatorSubscriber_1$g = OperatorSubscriber$1; +var innerFrom_1$9 = innerFrom$1; +function sequenceEqual(compareTo, comparator) { + if (comparator === void 0) { comparator = function (a, b) { return a === b; }; } + return lift_1$k.operate(function (source, subscriber) { + var aState = createState(); + var bState = createState(); + var emit = function (isEqual) { + subscriber.next(isEqual); + subscriber.complete(); + }; + var createSubscriber = function (selfState, otherState) { + var sequenceEqualSubscriber = OperatorSubscriber_1$g.createOperatorSubscriber(subscriber, function (a) { + var buffer = otherState.buffer, complete = otherState.complete; + if (buffer.length === 0) { + complete ? emit(false) : selfState.buffer.push(a); + } + else { + !comparator(a, buffer.shift()) && emit(false); + } + }, function () { + selfState.complete = true; + var complete = otherState.complete, buffer = otherState.buffer; + complete && emit(buffer.length === 0); + sequenceEqualSubscriber === null || sequenceEqualSubscriber === void 0 ? void 0 : sequenceEqualSubscriber.unsubscribe(); + }); + return sequenceEqualSubscriber; + }; + source.subscribe(createSubscriber(aState, bState)); + innerFrom_1$9.innerFrom(compareTo).subscribe(createSubscriber(bState, aState)); + }); +} +sequenceEqual$1.sequenceEqual = sequenceEqual; +function createState() { + return { + buffer: [], + complete: false, + }; +} + +var share$1 = {}; + +var __read$3 = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray$3 = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +Object.defineProperty(share$1, "__esModule", { value: true }); +share$1.share = void 0; +var innerFrom_1$8 = innerFrom$1; +var Subject_1$5 = Subject$1; +var Subscriber_1 = Subscriber; +var lift_1$j = lift; +function share(options) { + if (options === void 0) { options = {}; } + var _a = options.connector, connector = _a === void 0 ? function () { return new Subject_1$5.Subject(); } : _a, _b = options.resetOnError, resetOnError = _b === void 0 ? true : _b, _c = options.resetOnComplete, resetOnComplete = _c === void 0 ? true : _c, _d = options.resetOnRefCountZero, resetOnRefCountZero = _d === void 0 ? true : _d; + return function (wrapperSource) { + var connection; + var resetConnection; + var subject; + var refCount = 0; + var hasCompleted = false; + var hasErrored = false; + var cancelReset = function () { + resetConnection === null || resetConnection === void 0 ? void 0 : resetConnection.unsubscribe(); + resetConnection = undefined; + }; + var reset = function () { + cancelReset(); + connection = subject = undefined; + hasCompleted = hasErrored = false; + }; + var resetAndUnsubscribe = function () { + var conn = connection; + reset(); + conn === null || conn === void 0 ? void 0 : conn.unsubscribe(); + }; + return lift_1$j.operate(function (source, subscriber) { + refCount++; + if (!hasErrored && !hasCompleted) { + cancelReset(); + } + var dest = (subject = subject !== null && subject !== void 0 ? subject : connector()); + subscriber.add(function () { + refCount--; + if (refCount === 0 && !hasErrored && !hasCompleted) { + resetConnection = handleReset(resetAndUnsubscribe, resetOnRefCountZero); + } + }); + dest.subscribe(subscriber); + if (!connection && + refCount > 0) { + connection = new Subscriber_1.SafeSubscriber({ + next: function (value) { return dest.next(value); }, + error: function (err) { + hasErrored = true; + cancelReset(); + resetConnection = handleReset(reset, resetOnError, err); + dest.error(err); + }, + complete: function () { + hasCompleted = true; + cancelReset(); + resetConnection = handleReset(reset, resetOnComplete); + dest.complete(); + }, + }); + innerFrom_1$8.innerFrom(source).subscribe(connection); + } + })(wrapperSource); + }; +} +share$1.share = share; +function handleReset(reset, on) { + var args = []; + for (var _i = 2; _i < arguments.length; _i++) { + args[_i - 2] = arguments[_i]; + } + if (on === true) { + reset(); + return; + } + if (on === false) { + return; + } + var onSubscriber = new Subscriber_1.SafeSubscriber({ + next: function () { + onSubscriber.unsubscribe(); + reset(); + }, + }); + return innerFrom_1$8.innerFrom(on.apply(void 0, __spreadArray$3([], __read$3(args)))).subscribe(onSubscriber); +} + +var shareReplay$1 = {}; + +Object.defineProperty(shareReplay$1, "__esModule", { value: true }); +shareReplay$1.shareReplay = void 0; +var ReplaySubject_1 = ReplaySubject$1; +var share_1 = share$1; +function shareReplay(configOrBufferSize, windowTime, scheduler) { + var _a, _b, _c; + var bufferSize; + var refCount = false; + if (configOrBufferSize && typeof configOrBufferSize === 'object') { + (_a = configOrBufferSize.bufferSize, bufferSize = _a === void 0 ? Infinity : _a, _b = configOrBufferSize.windowTime, windowTime = _b === void 0 ? Infinity : _b, _c = configOrBufferSize.refCount, refCount = _c === void 0 ? false : _c, scheduler = configOrBufferSize.scheduler); + } + else { + bufferSize = (configOrBufferSize !== null && configOrBufferSize !== void 0 ? configOrBufferSize : Infinity); + } + return share_1.share({ + connector: function () { return new ReplaySubject_1.ReplaySubject(bufferSize, windowTime, scheduler); }, + resetOnError: true, + resetOnComplete: false, + resetOnRefCountZero: refCount, + }); +} +shareReplay$1.shareReplay = shareReplay; + +var single$1 = {}; + +Object.defineProperty(single$1, "__esModule", { value: true }); +single$1.single = void 0; +var EmptyError_1 = EmptyError; +var SequenceError_1 = SequenceError; +var NotFoundError_1 = NotFoundError; +var lift_1$i = lift; +var OperatorSubscriber_1$f = OperatorSubscriber$1; +function single(predicate) { + return lift_1$i.operate(function (source, subscriber) { + var hasValue = false; + var singleValue; + var seenValue = false; + var index = 0; + source.subscribe(OperatorSubscriber_1$f.createOperatorSubscriber(subscriber, function (value) { + seenValue = true; + if (!predicate || predicate(value, index++, source)) { + hasValue && subscriber.error(new SequenceError_1.SequenceError('Too many matching values')); + hasValue = true; + singleValue = value; + } + }, function () { + if (hasValue) { + subscriber.next(singleValue); + subscriber.complete(); + } + else { + subscriber.error(seenValue ? new NotFoundError_1.NotFoundError('No matching values') : new EmptyError_1.EmptyError()); + } + })); + }); +} +single$1.single = single; + +var skip$1 = {}; + +Object.defineProperty(skip$1, "__esModule", { value: true }); +skip$1.skip = void 0; +var filter_1 = filter$1; +function skip(count) { + return filter_1.filter(function (_, index) { return count <= index; }); +} +skip$1.skip = skip; + +var skipLast$1 = {}; + +Object.defineProperty(skipLast$1, "__esModule", { value: true }); +skipLast$1.skipLast = void 0; +var identity_1$3 = identity$1; +var lift_1$h = lift; +var OperatorSubscriber_1$e = OperatorSubscriber$1; +function skipLast(skipCount) { + return skipCount <= 0 + ? + identity_1$3.identity + : lift_1$h.operate(function (source, subscriber) { + var ring = new Array(skipCount); + var seen = 0; + source.subscribe(OperatorSubscriber_1$e.createOperatorSubscriber(subscriber, function (value) { + var valueIndex = seen++; + if (valueIndex < skipCount) { + ring[valueIndex] = value; + } + else { + var index = valueIndex % skipCount; + var oldValue = ring[index]; + ring[index] = value; + subscriber.next(oldValue); + } + })); + return function () { + ring = null; + }; + }); +} +skipLast$1.skipLast = skipLast; + +var skipUntil$1 = {}; + +Object.defineProperty(skipUntil$1, "__esModule", { value: true }); +skipUntil$1.skipUntil = void 0; +var lift_1$g = lift; +var OperatorSubscriber_1$d = OperatorSubscriber$1; +var innerFrom_1$7 = innerFrom$1; +var noop_1$4 = noop$2; +function skipUntil(notifier) { + return lift_1$g.operate(function (source, subscriber) { + var taking = false; + var skipSubscriber = OperatorSubscriber_1$d.createOperatorSubscriber(subscriber, function () { + skipSubscriber === null || skipSubscriber === void 0 ? void 0 : skipSubscriber.unsubscribe(); + taking = true; + }, noop_1$4.noop); + innerFrom_1$7.innerFrom(notifier).subscribe(skipSubscriber); + source.subscribe(OperatorSubscriber_1$d.createOperatorSubscriber(subscriber, function (value) { return taking && subscriber.next(value); })); + }); +} +skipUntil$1.skipUntil = skipUntil; + +var skipWhile$1 = {}; + +Object.defineProperty(skipWhile$1, "__esModule", { value: true }); +skipWhile$1.skipWhile = void 0; +var lift_1$f = lift; +var OperatorSubscriber_1$c = OperatorSubscriber$1; +function skipWhile(predicate) { + return lift_1$f.operate(function (source, subscriber) { + var taking = false; + var index = 0; + source.subscribe(OperatorSubscriber_1$c.createOperatorSubscriber(subscriber, function (value) { return (taking || (taking = !predicate(value, index++))) && subscriber.next(value); })); + }); +} +skipWhile$1.skipWhile = skipWhile; + +var startWith$1 = {}; + +Object.defineProperty(startWith$1, "__esModule", { value: true }); +startWith$1.startWith = void 0; +var concat_1 = concat$3; +var args_1$2 = args; +var lift_1$e = lift; +function startWith() { + var values = []; + for (var _i = 0; _i < arguments.length; _i++) { + values[_i] = arguments[_i]; + } + var scheduler = args_1$2.popScheduler(values); + return lift_1$e.operate(function (source, subscriber) { + (scheduler ? concat_1.concat(values, source, scheduler) : concat_1.concat(values, source)).subscribe(subscriber); + }); +} +startWith$1.startWith = startWith; + +var switchAll$1 = {}; + +var switchMap$1 = {}; + +Object.defineProperty(switchMap$1, "__esModule", { value: true }); +switchMap$1.switchMap = void 0; +var innerFrom_1$6 = innerFrom$1; +var lift_1$d = lift; +var OperatorSubscriber_1$b = OperatorSubscriber$1; +function switchMap(project, resultSelector) { + return lift_1$d.operate(function (source, subscriber) { + var innerSubscriber = null; + var index = 0; + var isComplete = false; + var checkComplete = function () { return isComplete && !innerSubscriber && subscriber.complete(); }; + source.subscribe(OperatorSubscriber_1$b.createOperatorSubscriber(subscriber, function (value) { + innerSubscriber === null || innerSubscriber === void 0 ? void 0 : innerSubscriber.unsubscribe(); + var innerIndex = 0; + var outerIndex = index++; + innerFrom_1$6.innerFrom(project(value, outerIndex)).subscribe((innerSubscriber = OperatorSubscriber_1$b.createOperatorSubscriber(subscriber, function (innerValue) { return subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue); }, function () { + innerSubscriber = null; + checkComplete(); + }))); + }, function () { + isComplete = true; + checkComplete(); + })); + }); +} +switchMap$1.switchMap = switchMap; + +Object.defineProperty(switchAll$1, "__esModule", { value: true }); +switchAll$1.switchAll = void 0; +var switchMap_1$2 = switchMap$1; +var identity_1$2 = identity$1; +function switchAll() { + return switchMap_1$2.switchMap(identity_1$2.identity); +} +switchAll$1.switchAll = switchAll; + +var switchMapTo$1 = {}; + +Object.defineProperty(switchMapTo$1, "__esModule", { value: true }); +switchMapTo$1.switchMapTo = void 0; +var switchMap_1$1 = switchMap$1; +var isFunction_1$1 = isFunction$1; +function switchMapTo(innerObservable, resultSelector) { + return isFunction_1$1.isFunction(resultSelector) ? switchMap_1$1.switchMap(function () { return innerObservable; }, resultSelector) : switchMap_1$1.switchMap(function () { return innerObservable; }); +} +switchMapTo$1.switchMapTo = switchMapTo; + +var switchScan$1 = {}; + +Object.defineProperty(switchScan$1, "__esModule", { value: true }); +switchScan$1.switchScan = void 0; +var switchMap_1 = switchMap$1; +var lift_1$c = lift; +function switchScan(accumulator, seed) { + return lift_1$c.operate(function (source, subscriber) { + var state = seed; + switchMap_1.switchMap(function (value, index) { return accumulator(state, value, index); }, function (_, innerValue) { return ((state = innerValue), innerValue); })(source).subscribe(subscriber); + return function () { + state = null; + }; + }); +} +switchScan$1.switchScan = switchScan; + +var takeUntil$1 = {}; + +Object.defineProperty(takeUntil$1, "__esModule", { value: true }); +takeUntil$1.takeUntil = void 0; +var lift_1$b = lift; +var OperatorSubscriber_1$a = OperatorSubscriber$1; +var innerFrom_1$5 = innerFrom$1; +var noop_1$3 = noop$2; +function takeUntil(notifier) { + return lift_1$b.operate(function (source, subscriber) { + innerFrom_1$5.innerFrom(notifier).subscribe(OperatorSubscriber_1$a.createOperatorSubscriber(subscriber, function () { return subscriber.complete(); }, noop_1$3.noop)); + !subscriber.closed && source.subscribe(subscriber); + }); +} +takeUntil$1.takeUntil = takeUntil; + +var takeWhile$1 = {}; + +Object.defineProperty(takeWhile$1, "__esModule", { value: true }); +takeWhile$1.takeWhile = void 0; +var lift_1$a = lift; +var OperatorSubscriber_1$9 = OperatorSubscriber$1; +function takeWhile(predicate, inclusive) { + if (inclusive === void 0) { inclusive = false; } + return lift_1$a.operate(function (source, subscriber) { + var index = 0; + source.subscribe(OperatorSubscriber_1$9.createOperatorSubscriber(subscriber, function (value) { + var result = predicate(value, index++); + (result || inclusive) && subscriber.next(value); + !result && subscriber.complete(); + })); + }); +} +takeWhile$1.takeWhile = takeWhile; + +var tap$1 = {}; + +Object.defineProperty(tap$1, "__esModule", { value: true }); +tap$1.tap = void 0; +var isFunction_1 = isFunction$1; +var lift_1$9 = lift; +var OperatorSubscriber_1$8 = OperatorSubscriber$1; +var identity_1$1 = identity$1; +function tap(observerOrNext, error, complete) { + var tapObserver = isFunction_1.isFunction(observerOrNext) || error || complete + ? + { next: observerOrNext, error: error, complete: complete } + : observerOrNext; + return tapObserver + ? lift_1$9.operate(function (source, subscriber) { + var _a; + (_a = tapObserver.subscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver); + var isUnsub = true; + source.subscribe(OperatorSubscriber_1$8.createOperatorSubscriber(subscriber, function (value) { + var _a; + (_a = tapObserver.next) === null || _a === void 0 ? void 0 : _a.call(tapObserver, value); + subscriber.next(value); + }, function () { + var _a; + isUnsub = false; + (_a = tapObserver.complete) === null || _a === void 0 ? void 0 : _a.call(tapObserver); + subscriber.complete(); + }, function (err) { + var _a; + isUnsub = false; + (_a = tapObserver.error) === null || _a === void 0 ? void 0 : _a.call(tapObserver, err); + subscriber.error(err); + }, function () { + var _a, _b; + if (isUnsub) { + (_a = tapObserver.unsubscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver); + } + (_b = tapObserver.finalize) === null || _b === void 0 ? void 0 : _b.call(tapObserver); + })); + }) + : + identity_1$1.identity; +} +tap$1.tap = tap; + +var throttle$1 = {}; + +Object.defineProperty(throttle$1, "__esModule", { value: true }); +throttle$1.throttle = void 0; +var lift_1$8 = lift; +var OperatorSubscriber_1$7 = OperatorSubscriber$1; +var innerFrom_1$4 = innerFrom$1; +function throttle(durationSelector, config) { + return lift_1$8.operate(function (source, subscriber) { + var _a = config !== null && config !== void 0 ? config : {}, _b = _a.leading, leading = _b === void 0 ? true : _b, _c = _a.trailing, trailing = _c === void 0 ? false : _c; + var hasValue = false; + var sendValue = null; + var throttled = null; + var isComplete = false; + var endThrottling = function () { + throttled === null || throttled === void 0 ? void 0 : throttled.unsubscribe(); + throttled = null; + if (trailing) { + send(); + isComplete && subscriber.complete(); + } + }; + var cleanupThrottling = function () { + throttled = null; + isComplete && subscriber.complete(); + }; + var startThrottle = function (value) { + return (throttled = innerFrom_1$4.innerFrom(durationSelector(value)).subscribe(OperatorSubscriber_1$7.createOperatorSubscriber(subscriber, endThrottling, cleanupThrottling))); + }; + var send = function () { + if (hasValue) { + hasValue = false; + var value = sendValue; + sendValue = null; + subscriber.next(value); + !isComplete && startThrottle(value); + } + }; + source.subscribe(OperatorSubscriber_1$7.createOperatorSubscriber(subscriber, function (value) { + hasValue = true; + sendValue = value; + !(throttled && !throttled.closed) && (leading ? send() : startThrottle(value)); + }, function () { + isComplete = true; + !(trailing && hasValue && throttled && !throttled.closed) && subscriber.complete(); + })); + }); +} +throttle$1.throttle = throttle; + +var throttleTime$1 = {}; + +Object.defineProperty(throttleTime$1, "__esModule", { value: true }); +throttleTime$1.throttleTime = void 0; +var async_1$3 = async; +var throttle_1 = throttle$1; +var timer_1 = timer$1; +function throttleTime(duration, scheduler, config) { + if (scheduler === void 0) { scheduler = async_1$3.asyncScheduler; } + var duration$ = timer_1.timer(duration, scheduler); + return throttle_1.throttle(function () { return duration$; }, config); +} +throttleTime$1.throttleTime = throttleTime; + +var timeInterval$1 = {}; + +Object.defineProperty(timeInterval$1, "__esModule", { value: true }); +timeInterval$1.TimeInterval = timeInterval$1.timeInterval = void 0; +var async_1$2 = async; +var lift_1$7 = lift; +var OperatorSubscriber_1$6 = OperatorSubscriber$1; +function timeInterval(scheduler) { + if (scheduler === void 0) { scheduler = async_1$2.asyncScheduler; } + return lift_1$7.operate(function (source, subscriber) { + var last = scheduler.now(); + source.subscribe(OperatorSubscriber_1$6.createOperatorSubscriber(subscriber, function (value) { + var now = scheduler.now(); + var interval = now - last; + last = now; + subscriber.next(new TimeInterval(value, interval)); + })); + }); +} +timeInterval$1.timeInterval = timeInterval; +var TimeInterval = (function () { + function TimeInterval(value, interval) { + this.value = value; + this.interval = interval; + } + return TimeInterval; +}()); +timeInterval$1.TimeInterval = TimeInterval; + +var timeoutWith$1 = {}; + +Object.defineProperty(timeoutWith$1, "__esModule", { value: true }); +timeoutWith$1.timeoutWith = void 0; +var async_1$1 = async; +var isDate_1 = isDate; +var timeout_1 = timeout; +function timeoutWith(due, withObservable, scheduler) { + var first; + var each; + var _with; + scheduler = scheduler !== null && scheduler !== void 0 ? scheduler : async_1$1.async; + if (isDate_1.isValidDate(due)) { + first = due; + } + else if (typeof due === 'number') { + each = due; + } + if (withObservable) { + _with = function () { return withObservable; }; + } + else { + throw new TypeError('No observable provided to switch to'); + } + if (first == null && each == null) { + throw new TypeError('No timeout provided.'); + } + return timeout_1.timeout({ + first: first, + each: each, + scheduler: scheduler, + with: _with, + }); +} +timeoutWith$1.timeoutWith = timeoutWith; + +var timestamp$2 = {}; + +Object.defineProperty(timestamp$2, "__esModule", { value: true }); +timestamp$2.timestamp = void 0; +var dateTimestampProvider_1 = dateTimestampProvider; +var map_1 = map$2; +function timestamp$1(timestampProvider) { + if (timestampProvider === void 0) { timestampProvider = dateTimestampProvider_1.dateTimestampProvider; } + return map_1.map(function (value) { return ({ value: value, timestamp: timestampProvider.now() }); }); +} +timestamp$2.timestamp = timestamp$1; + +var window$2 = {}; + +Object.defineProperty(window$2, "__esModule", { value: true }); +window$2.window = void 0; +var Subject_1$4 = Subject$1; +var lift_1$6 = lift; +var OperatorSubscriber_1$5 = OperatorSubscriber$1; +var noop_1$2 = noop$2; +var innerFrom_1$3 = innerFrom$1; +function window$1(windowBoundaries) { + return lift_1$6.operate(function (source, subscriber) { + var windowSubject = new Subject_1$4.Subject(); + subscriber.next(windowSubject.asObservable()); + var errorHandler = function (err) { + windowSubject.error(err); + subscriber.error(err); + }; + source.subscribe(OperatorSubscriber_1$5.createOperatorSubscriber(subscriber, function (value) { return windowSubject === null || windowSubject === void 0 ? void 0 : windowSubject.next(value); }, function () { + windowSubject.complete(); + subscriber.complete(); + }, errorHandler)); + innerFrom_1$3.innerFrom(windowBoundaries).subscribe(OperatorSubscriber_1$5.createOperatorSubscriber(subscriber, function () { + windowSubject.complete(); + subscriber.next((windowSubject = new Subject_1$4.Subject())); + }, noop_1$2.noop, errorHandler)); + return function () { + windowSubject === null || windowSubject === void 0 ? void 0 : windowSubject.unsubscribe(); + windowSubject = null; + }; + }); +} +window$2.window = window$1; + +var windowCount$1 = {}; + +var __values$1 = (commonjsGlobal && commonjsGlobal.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(windowCount$1, "__esModule", { value: true }); +windowCount$1.windowCount = void 0; +var Subject_1$3 = Subject$1; +var lift_1$5 = lift; +var OperatorSubscriber_1$4 = OperatorSubscriber$1; +function windowCount(windowSize, startWindowEvery) { + if (startWindowEvery === void 0) { startWindowEvery = 0; } + var startEvery = startWindowEvery > 0 ? startWindowEvery : windowSize; + return lift_1$5.operate(function (source, subscriber) { + var windows = [new Subject_1$3.Subject()]; + var count = 0; + subscriber.next(windows[0].asObservable()); + source.subscribe(OperatorSubscriber_1$4.createOperatorSubscriber(subscriber, function (value) { + var e_1, _a; + try { + for (var windows_1 = __values$1(windows), windows_1_1 = windows_1.next(); !windows_1_1.done; windows_1_1 = windows_1.next()) { + var window_1 = windows_1_1.value; + window_1.next(value); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (windows_1_1 && !windows_1_1.done && (_a = windows_1.return)) _a.call(windows_1); + } + finally { if (e_1) throw e_1.error; } + } + var c = count - windowSize + 1; + if (c >= 0 && c % startEvery === 0) { + windows.shift().complete(); + } + if (++count % startEvery === 0) { + var window_2 = new Subject_1$3.Subject(); + windows.push(window_2); + subscriber.next(window_2.asObservable()); + } + }, function () { + while (windows.length > 0) { + windows.shift().complete(); + } + subscriber.complete(); + }, function (err) { + while (windows.length > 0) { + windows.shift().error(err); + } + subscriber.error(err); + }, function () { + windows = null; + })); + }); +} +windowCount$1.windowCount = windowCount; + +var windowTime$1 = {}; + +Object.defineProperty(windowTime$1, "__esModule", { value: true }); +windowTime$1.windowTime = void 0; +var Subject_1$2 = Subject$1; +var async_1 = async; +var Subscription_1$1 = Subscription$1; +var lift_1$4 = lift; +var OperatorSubscriber_1$3 = OperatorSubscriber$1; +var arrRemove_1$1 = arrRemove$1; +var args_1$1 = args; +var executeSchedule_1 = executeSchedule$1; +function windowTime(windowTimeSpan) { + var _a, _b; + var otherArgs = []; + for (var _i = 1; _i < arguments.length; _i++) { + otherArgs[_i - 1] = arguments[_i]; + } + var scheduler = (_a = args_1$1.popScheduler(otherArgs)) !== null && _a !== void 0 ? _a : async_1.asyncScheduler; + var windowCreationInterval = (_b = otherArgs[0]) !== null && _b !== void 0 ? _b : null; + var maxWindowSize = otherArgs[1] || Infinity; + return lift_1$4.operate(function (source, subscriber) { + var windowRecords = []; + var restartOnClose = false; + var closeWindow = function (record) { + var window = record.window, subs = record.subs; + window.complete(); + subs.unsubscribe(); + arrRemove_1$1.arrRemove(windowRecords, record); + restartOnClose && startWindow(); + }; + var startWindow = function () { + if (windowRecords) { + var subs = new Subscription_1$1.Subscription(); + subscriber.add(subs); + var window_1 = new Subject_1$2.Subject(); + var record_1 = { + window: window_1, + subs: subs, + seen: 0, + }; + windowRecords.push(record_1); + subscriber.next(window_1.asObservable()); + executeSchedule_1.executeSchedule(subs, scheduler, function () { return closeWindow(record_1); }, windowTimeSpan); + } + }; + if (windowCreationInterval !== null && windowCreationInterval >= 0) { + executeSchedule_1.executeSchedule(subscriber, scheduler, startWindow, windowCreationInterval, true); + } + else { + restartOnClose = true; + } + startWindow(); + var loop = function (cb) { return windowRecords.slice().forEach(cb); }; + var terminate = function (cb) { + loop(function (_a) { + var window = _a.window; + return cb(window); + }); + cb(subscriber); + subscriber.unsubscribe(); + }; + source.subscribe(OperatorSubscriber_1$3.createOperatorSubscriber(subscriber, function (value) { + loop(function (record) { + record.window.next(value); + maxWindowSize <= ++record.seen && closeWindow(record); + }); + }, function () { return terminate(function (consumer) { return consumer.complete(); }); }, function (err) { return terminate(function (consumer) { return consumer.error(err); }); })); + return function () { + windowRecords = null; + }; + }); +} +windowTime$1.windowTime = windowTime; + +var windowToggle$1 = {}; + +var __values = (commonjsGlobal && commonjsGlobal.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(windowToggle$1, "__esModule", { value: true }); +windowToggle$1.windowToggle = void 0; +var Subject_1$1 = Subject$1; +var Subscription_1 = Subscription$1; +var lift_1$3 = lift; +var innerFrom_1$2 = innerFrom$1; +var OperatorSubscriber_1$2 = OperatorSubscriber$1; +var noop_1$1 = noop$2; +var arrRemove_1 = arrRemove$1; +function windowToggle(openings, closingSelector) { + return lift_1$3.operate(function (source, subscriber) { + var windows = []; + var handleError = function (err) { + while (0 < windows.length) { + windows.shift().error(err); + } + subscriber.error(err); + }; + innerFrom_1$2.innerFrom(openings).subscribe(OperatorSubscriber_1$2.createOperatorSubscriber(subscriber, function (openValue) { + var window = new Subject_1$1.Subject(); + windows.push(window); + var closingSubscription = new Subscription_1.Subscription(); + var closeWindow = function () { + arrRemove_1.arrRemove(windows, window); + window.complete(); + closingSubscription.unsubscribe(); + }; + var closingNotifier; + try { + closingNotifier = innerFrom_1$2.innerFrom(closingSelector(openValue)); + } + catch (err) { + handleError(err); + return; + } + subscriber.next(window.asObservable()); + closingSubscription.add(closingNotifier.subscribe(OperatorSubscriber_1$2.createOperatorSubscriber(subscriber, closeWindow, noop_1$1.noop, handleError))); + }, noop_1$1.noop)); + source.subscribe(OperatorSubscriber_1$2.createOperatorSubscriber(subscriber, function (value) { + var e_1, _a; + var windowsCopy = windows.slice(); + try { + for (var windowsCopy_1 = __values(windowsCopy), windowsCopy_1_1 = windowsCopy_1.next(); !windowsCopy_1_1.done; windowsCopy_1_1 = windowsCopy_1.next()) { + var window_1 = windowsCopy_1_1.value; + window_1.next(value); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (windowsCopy_1_1 && !windowsCopy_1_1.done && (_a = windowsCopy_1.return)) _a.call(windowsCopy_1); + } + finally { if (e_1) throw e_1.error; } + } + }, function () { + while (0 < windows.length) { + windows.shift().complete(); + } + subscriber.complete(); + }, handleError, function () { + while (0 < windows.length) { + windows.shift().unsubscribe(); + } + })); + }); +} +windowToggle$1.windowToggle = windowToggle; + +var windowWhen$1 = {}; + +Object.defineProperty(windowWhen$1, "__esModule", { value: true }); +windowWhen$1.windowWhen = void 0; +var Subject_1 = Subject$1; +var lift_1$2 = lift; +var OperatorSubscriber_1$1 = OperatorSubscriber$1; +var innerFrom_1$1 = innerFrom$1; +function windowWhen(closingSelector) { + return lift_1$2.operate(function (source, subscriber) { + var window; + var closingSubscriber; + var handleError = function (err) { + window.error(err); + subscriber.error(err); + }; + var openWindow = function () { + closingSubscriber === null || closingSubscriber === void 0 ? void 0 : closingSubscriber.unsubscribe(); + window === null || window === void 0 ? void 0 : window.complete(); + window = new Subject_1.Subject(); + subscriber.next(window.asObservable()); + var closingNotifier; + try { + closingNotifier = innerFrom_1$1.innerFrom(closingSelector()); + } + catch (err) { + handleError(err); + return; + } + closingNotifier.subscribe((closingSubscriber = OperatorSubscriber_1$1.createOperatorSubscriber(subscriber, openWindow, openWindow, handleError))); + }; + openWindow(); + source.subscribe(OperatorSubscriber_1$1.createOperatorSubscriber(subscriber, function (value) { return window.next(value); }, function () { + window.complete(); + subscriber.complete(); + }, handleError, function () { + closingSubscriber === null || closingSubscriber === void 0 ? void 0 : closingSubscriber.unsubscribe(); + window = null; + })); + }); +} +windowWhen$1.windowWhen = windowWhen; + +var withLatestFrom$1 = {}; + +var __read$2 = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray$2 = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +Object.defineProperty(withLatestFrom$1, "__esModule", { value: true }); +withLatestFrom$1.withLatestFrom = void 0; +var lift_1$1 = lift; +var OperatorSubscriber_1 = OperatorSubscriber$1; +var innerFrom_1 = innerFrom$1; +var identity_1 = identity$1; +var noop_1 = noop$2; +var args_1 = args; +function withLatestFrom() { + var inputs = []; + for (var _i = 0; _i < arguments.length; _i++) { + inputs[_i] = arguments[_i]; + } + var project = args_1.popResultSelector(inputs); + return lift_1$1.operate(function (source, subscriber) { + var len = inputs.length; + var otherValues = new Array(len); + var hasValue = inputs.map(function () { return false; }); + var ready = false; + var _loop_1 = function (i) { + innerFrom_1.innerFrom(inputs[i]).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) { + otherValues[i] = value; + if (!ready && !hasValue[i]) { + hasValue[i] = true; + (ready = hasValue.every(identity_1.identity)) && (hasValue = null); + } + }, noop_1.noop)); + }; + for (var i = 0; i < len; i++) { + _loop_1(i); + } + source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) { + if (ready) { + var values = __spreadArray$2([value], __read$2(otherValues)); + subscriber.next(project ? project.apply(void 0, __spreadArray$2([], __read$2(values))) : values); + } + })); + }); +} +withLatestFrom$1.withLatestFrom = withLatestFrom; + +var zipAll$1 = {}; + +Object.defineProperty(zipAll$1, "__esModule", { value: true }); +zipAll$1.zipAll = void 0; +var zip_1$2 = zip$3; +var joinAllInternals_1 = joinAllInternals$1; +function zipAll(project) { + return joinAllInternals_1.joinAllInternals(zip_1$2.zip, project); +} +zipAll$1.zipAll = zipAll; + +var zipWith$1 = {}; + +var zip$1 = {}; + +var __read$1 = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray$1 = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +Object.defineProperty(zip$1, "__esModule", { value: true }); +zip$1.zip = void 0; +var zip_1$1 = zip$3; +var lift_1 = lift; +function zip() { + var sources = []; + for (var _i = 0; _i < arguments.length; _i++) { + sources[_i] = arguments[_i]; + } + return lift_1.operate(function (source, subscriber) { + zip_1$1.zip.apply(void 0, __spreadArray$1([source], __read$1(sources))).subscribe(subscriber); + }); +} +zip$1.zip = zip; + +var __read = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spreadArray = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +Object.defineProperty(zipWith$1, "__esModule", { value: true }); +zipWith$1.zipWith = void 0; +var zip_1 = zip$1; +function zipWith() { + var otherInputs = []; + for (var _i = 0; _i < arguments.length; _i++) { + otherInputs[_i] = arguments[_i]; + } + return zip_1.zip.apply(void 0, __spreadArray([], __read(otherInputs))); +} +zipWith$1.zipWith = zipWith; + +(function (exports) { + var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); + }) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; + })); + var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.interval = exports.iif = exports.generate = exports.fromEventPattern = exports.fromEvent = exports.from = exports.forkJoin = exports.empty = exports.defer = exports.connectable = exports.concat = exports.combineLatest = exports.bindNodeCallback = exports.bindCallback = exports.UnsubscriptionError = exports.TimeoutError = exports.SequenceError = exports.ObjectUnsubscribedError = exports.NotFoundError = exports.EmptyError = exports.ArgumentOutOfRangeError = exports.firstValueFrom = exports.lastValueFrom = exports.isObservable = exports.identity = exports.noop = exports.pipe = exports.NotificationKind = exports.Notification = exports.Subscriber = exports.Subscription = exports.Scheduler = exports.VirtualAction = exports.VirtualTimeScheduler = exports.animationFrameScheduler = exports.animationFrame = exports.queueScheduler = exports.queue = exports.asyncScheduler = exports.async = exports.asapScheduler = exports.asap = exports.AsyncSubject = exports.ReplaySubject = exports.BehaviorSubject = exports.Subject = exports.animationFrames = exports.observable = exports.ConnectableObservable = exports.Observable = void 0; + exports.filter = exports.expand = exports.exhaustMap = exports.exhaustAll = exports.exhaust = exports.every = exports.endWith = exports.elementAt = exports.distinctUntilKeyChanged = exports.distinctUntilChanged = exports.distinct = exports.dematerialize = exports.delayWhen = exports.delay = exports.defaultIfEmpty = exports.debounceTime = exports.debounce = exports.count = exports.connect = exports.concatWith = exports.concatMapTo = exports.concatMap = exports.concatAll = exports.combineLatestWith = exports.combineLatestAll = exports.combineAll = exports.catchError = exports.bufferWhen = exports.bufferToggle = exports.bufferTime = exports.bufferCount = exports.buffer = exports.auditTime = exports.audit = exports.config = exports.NEVER = exports.EMPTY = exports.scheduled = exports.zip = exports.using = exports.timer = exports.throwError = exports.range = exports.race = exports.partition = exports.pairs = exports.onErrorResumeNext = exports.of = exports.never = exports.merge = void 0; + exports.switchMap = exports.switchAll = exports.subscribeOn = exports.startWith = exports.skipWhile = exports.skipUntil = exports.skipLast = exports.skip = exports.single = exports.shareReplay = exports.share = exports.sequenceEqual = exports.scan = exports.sampleTime = exports.sample = exports.refCount = exports.retryWhen = exports.retry = exports.repeatWhen = exports.repeat = exports.reduce = exports.raceWith = exports.publishReplay = exports.publishLast = exports.publishBehavior = exports.publish = exports.pluck = exports.pairwise = exports.onErrorResumeNextWith = exports.observeOn = exports.multicast = exports.min = exports.mergeWith = exports.mergeScan = exports.mergeMapTo = exports.mergeMap = exports.flatMap = exports.mergeAll = exports.max = exports.materialize = exports.mapTo = exports.map = exports.last = exports.isEmpty = exports.ignoreElements = exports.groupBy = exports.first = exports.findIndex = exports.find = exports.finalize = void 0; + exports.zipWith = exports.zipAll = exports.withLatestFrom = exports.windowWhen = exports.windowToggle = exports.windowTime = exports.windowCount = exports.window = exports.toArray = exports.timestamp = exports.timeoutWith = exports.timeout = exports.timeInterval = exports.throwIfEmpty = exports.throttleTime = exports.throttle = exports.tap = exports.takeWhile = exports.takeUntil = exports.takeLast = exports.take = exports.switchScan = exports.switchMapTo = void 0; + var Observable_1 = Observable$1; + Object.defineProperty(exports, "Observable", { enumerable: true, get: function () { return Observable_1.Observable; } }); + var ConnectableObservable_1 = ConnectableObservable$1; + Object.defineProperty(exports, "ConnectableObservable", { enumerable: true, get: function () { return ConnectableObservable_1.ConnectableObservable; } }); + var observable_1 = observable; + Object.defineProperty(exports, "observable", { enumerable: true, get: function () { return observable_1.observable; } }); + var animationFrames_1 = animationFrames$1; + Object.defineProperty(exports, "animationFrames", { enumerable: true, get: function () { return animationFrames_1.animationFrames; } }); + var Subject_1 = Subject$1; + Object.defineProperty(exports, "Subject", { enumerable: true, get: function () { return Subject_1.Subject; } }); + var BehaviorSubject_1 = BehaviorSubject$1; + Object.defineProperty(exports, "BehaviorSubject", { enumerable: true, get: function () { return BehaviorSubject_1.BehaviorSubject; } }); + var ReplaySubject_1 = ReplaySubject$1; + Object.defineProperty(exports, "ReplaySubject", { enumerable: true, get: function () { return ReplaySubject_1.ReplaySubject; } }); + var AsyncSubject_1 = AsyncSubject$1; + Object.defineProperty(exports, "AsyncSubject", { enumerable: true, get: function () { return AsyncSubject_1.AsyncSubject; } }); + var asap_1 = asap; + Object.defineProperty(exports, "asap", { enumerable: true, get: function () { return asap_1.asap; } }); + Object.defineProperty(exports, "asapScheduler", { enumerable: true, get: function () { return asap_1.asapScheduler; } }); + var async_1 = async; + Object.defineProperty(exports, "async", { enumerable: true, get: function () { return async_1.async; } }); + Object.defineProperty(exports, "asyncScheduler", { enumerable: true, get: function () { return async_1.asyncScheduler; } }); + var queue_1 = queue; + Object.defineProperty(exports, "queue", { enumerable: true, get: function () { return queue_1.queue; } }); + Object.defineProperty(exports, "queueScheduler", { enumerable: true, get: function () { return queue_1.queueScheduler; } }); + var animationFrame_1 = animationFrame; + Object.defineProperty(exports, "animationFrame", { enumerable: true, get: function () { return animationFrame_1.animationFrame; } }); + Object.defineProperty(exports, "animationFrameScheduler", { enumerable: true, get: function () { return animationFrame_1.animationFrameScheduler; } }); + var VirtualTimeScheduler_1 = VirtualTimeScheduler$1; + Object.defineProperty(exports, "VirtualTimeScheduler", { enumerable: true, get: function () { return VirtualTimeScheduler_1.VirtualTimeScheduler; } }); + Object.defineProperty(exports, "VirtualAction", { enumerable: true, get: function () { return VirtualTimeScheduler_1.VirtualAction; } }); + var Scheduler_1 = Scheduler$1; + Object.defineProperty(exports, "Scheduler", { enumerable: true, get: function () { return Scheduler_1.Scheduler; } }); + var Subscription_1 = Subscription$1; + Object.defineProperty(exports, "Subscription", { enumerable: true, get: function () { return Subscription_1.Subscription; } }); + var Subscriber_1 = Subscriber; + Object.defineProperty(exports, "Subscriber", { enumerable: true, get: function () { return Subscriber_1.Subscriber; } }); + var Notification_1 = Notification; + Object.defineProperty(exports, "Notification", { enumerable: true, get: function () { return Notification_1.Notification; } }); + Object.defineProperty(exports, "NotificationKind", { enumerable: true, get: function () { return Notification_1.NotificationKind; } }); + var pipe_1 = pipe$2; + Object.defineProperty(exports, "pipe", { enumerable: true, get: function () { return pipe_1.pipe; } }); + var noop_1 = noop$2; + Object.defineProperty(exports, "noop", { enumerable: true, get: function () { return noop_1.noop; } }); + var identity_1 = identity$1; + Object.defineProperty(exports, "identity", { enumerable: true, get: function () { return identity_1.identity; } }); + var isObservable_1 = isObservable$1; + Object.defineProperty(exports, "isObservable", { enumerable: true, get: function () { return isObservable_1.isObservable; } }); + var lastValueFrom_1 = lastValueFrom$1; + Object.defineProperty(exports, "lastValueFrom", { enumerable: true, get: function () { return lastValueFrom_1.lastValueFrom; } }); + var firstValueFrom_1 = firstValueFrom$1; + Object.defineProperty(exports, "firstValueFrom", { enumerable: true, get: function () { return firstValueFrom_1.firstValueFrom; } }); + var ArgumentOutOfRangeError_1 = ArgumentOutOfRangeError; + Object.defineProperty(exports, "ArgumentOutOfRangeError", { enumerable: true, get: function () { return ArgumentOutOfRangeError_1.ArgumentOutOfRangeError; } }); + var EmptyError_1 = EmptyError; + Object.defineProperty(exports, "EmptyError", { enumerable: true, get: function () { return EmptyError_1.EmptyError; } }); + var NotFoundError_1 = NotFoundError; + Object.defineProperty(exports, "NotFoundError", { enumerable: true, get: function () { return NotFoundError_1.NotFoundError; } }); + var ObjectUnsubscribedError_1 = ObjectUnsubscribedError; + Object.defineProperty(exports, "ObjectUnsubscribedError", { enumerable: true, get: function () { return ObjectUnsubscribedError_1.ObjectUnsubscribedError; } }); + var SequenceError_1 = SequenceError; + Object.defineProperty(exports, "SequenceError", { enumerable: true, get: function () { return SequenceError_1.SequenceError; } }); + var timeout_1 = timeout; + Object.defineProperty(exports, "TimeoutError", { enumerable: true, get: function () { return timeout_1.TimeoutError; } }); + var UnsubscriptionError_1 = UnsubscriptionError; + Object.defineProperty(exports, "UnsubscriptionError", { enumerable: true, get: function () { return UnsubscriptionError_1.UnsubscriptionError; } }); + var bindCallback_1 = bindCallback$1; + Object.defineProperty(exports, "bindCallback", { enumerable: true, get: function () { return bindCallback_1.bindCallback; } }); + var bindNodeCallback_1 = bindNodeCallback$1; + Object.defineProperty(exports, "bindNodeCallback", { enumerable: true, get: function () { return bindNodeCallback_1.bindNodeCallback; } }); + var combineLatest_1 = combineLatest$3; + Object.defineProperty(exports, "combineLatest", { enumerable: true, get: function () { return combineLatest_1.combineLatest; } }); + var concat_1 = concat$3; + Object.defineProperty(exports, "concat", { enumerable: true, get: function () { return concat_1.concat; } }); + var connectable_1 = connectable$1; + Object.defineProperty(exports, "connectable", { enumerable: true, get: function () { return connectable_1.connectable; } }); + var defer_1 = defer$1; + Object.defineProperty(exports, "defer", { enumerable: true, get: function () { return defer_1.defer; } }); + var empty_1 = empty; + Object.defineProperty(exports, "empty", { enumerable: true, get: function () { return empty_1.empty; } }); + var forkJoin_1 = forkJoin$1; + Object.defineProperty(exports, "forkJoin", { enumerable: true, get: function () { return forkJoin_1.forkJoin; } }); + var from_1 = from$1; + Object.defineProperty(exports, "from", { enumerable: true, get: function () { return from_1.from; } }); + var fromEvent_1 = fromEvent$1; + Object.defineProperty(exports, "fromEvent", { enumerable: true, get: function () { return fromEvent_1.fromEvent; } }); + var fromEventPattern_1 = fromEventPattern$1; + Object.defineProperty(exports, "fromEventPattern", { enumerable: true, get: function () { return fromEventPattern_1.fromEventPattern; } }); + var generate_1 = generate$1; + Object.defineProperty(exports, "generate", { enumerable: true, get: function () { return generate_1.generate; } }); + var iif_1 = iif$1; + Object.defineProperty(exports, "iif", { enumerable: true, get: function () { return iif_1.iif; } }); + var interval_1 = interval$1; + Object.defineProperty(exports, "interval", { enumerable: true, get: function () { return interval_1.interval; } }); + var merge_1 = merge$5; + Object.defineProperty(exports, "merge", { enumerable: true, get: function () { return merge_1.merge; } }); + var never_1 = never; + Object.defineProperty(exports, "never", { enumerable: true, get: function () { return never_1.never; } }); + var of_1 = of$1; + Object.defineProperty(exports, "of", { enumerable: true, get: function () { return of_1.of; } }); + var onErrorResumeNext_1 = onErrorResumeNext$1; + Object.defineProperty(exports, "onErrorResumeNext", { enumerable: true, get: function () { return onErrorResumeNext_1.onErrorResumeNext; } }); + var pairs_1 = pairs$2; + Object.defineProperty(exports, "pairs", { enumerable: true, get: function () { return pairs_1.pairs; } }); + var partition_1 = partition$1; + Object.defineProperty(exports, "partition", { enumerable: true, get: function () { return partition_1.partition; } }); + var race_1 = race$1; + Object.defineProperty(exports, "race", { enumerable: true, get: function () { return race_1.race; } }); + var range_1 = range$1; + Object.defineProperty(exports, "range", { enumerable: true, get: function () { return range_1.range; } }); + var throwError_1 = throwError$2; + Object.defineProperty(exports, "throwError", { enumerable: true, get: function () { return throwError_1.throwError; } }); + var timer_1 = timer$1; + Object.defineProperty(exports, "timer", { enumerable: true, get: function () { return timer_1.timer; } }); + var using_1 = using$1; + Object.defineProperty(exports, "using", { enumerable: true, get: function () { return using_1.using; } }); + var zip_1 = zip$3; + Object.defineProperty(exports, "zip", { enumerable: true, get: function () { return zip_1.zip; } }); + var scheduled_1 = scheduled$1; + Object.defineProperty(exports, "scheduled", { enumerable: true, get: function () { return scheduled_1.scheduled; } }); + var empty_2 = empty; + Object.defineProperty(exports, "EMPTY", { enumerable: true, get: function () { return empty_2.EMPTY; } }); + var never_2 = never; + Object.defineProperty(exports, "NEVER", { enumerable: true, get: function () { return never_2.NEVER; } }); + __exportStar(types, exports); + var config_1 = config; + Object.defineProperty(exports, "config", { enumerable: true, get: function () { return config_1.config; } }); + var audit_1 = audit$1; + Object.defineProperty(exports, "audit", { enumerable: true, get: function () { return audit_1.audit; } }); + var auditTime_1 = auditTime$1; + Object.defineProperty(exports, "auditTime", { enumerable: true, get: function () { return auditTime_1.auditTime; } }); + var buffer_1 = buffer$2; + Object.defineProperty(exports, "buffer", { enumerable: true, get: function () { return buffer_1.buffer; } }); + var bufferCount_1 = bufferCount$1; + Object.defineProperty(exports, "bufferCount", { enumerable: true, get: function () { return bufferCount_1.bufferCount; } }); + var bufferTime_1 = bufferTime$1; + Object.defineProperty(exports, "bufferTime", { enumerable: true, get: function () { return bufferTime_1.bufferTime; } }); + var bufferToggle_1 = bufferToggle$1; + Object.defineProperty(exports, "bufferToggle", { enumerable: true, get: function () { return bufferToggle_1.bufferToggle; } }); + var bufferWhen_1 = bufferWhen$1; + Object.defineProperty(exports, "bufferWhen", { enumerable: true, get: function () { return bufferWhen_1.bufferWhen; } }); + var catchError_1 = catchError$1; + Object.defineProperty(exports, "catchError", { enumerable: true, get: function () { return catchError_1.catchError; } }); + var combineAll_1 = combineAll; + Object.defineProperty(exports, "combineAll", { enumerable: true, get: function () { return combineAll_1.combineAll; } }); + var combineLatestAll_1 = combineLatestAll$1; + Object.defineProperty(exports, "combineLatestAll", { enumerable: true, get: function () { return combineLatestAll_1.combineLatestAll; } }); + var combineLatestWith_1 = combineLatestWith$1; + Object.defineProperty(exports, "combineLatestWith", { enumerable: true, get: function () { return combineLatestWith_1.combineLatestWith; } }); + var concatAll_1 = concatAll$1; + Object.defineProperty(exports, "concatAll", { enumerable: true, get: function () { return concatAll_1.concatAll; } }); + var concatMap_1 = concatMap$1; + Object.defineProperty(exports, "concatMap", { enumerable: true, get: function () { return concatMap_1.concatMap; } }); + var concatMapTo_1 = concatMapTo$1; + Object.defineProperty(exports, "concatMapTo", { enumerable: true, get: function () { return concatMapTo_1.concatMapTo; } }); + var concatWith_1 = concatWith$1; + Object.defineProperty(exports, "concatWith", { enumerable: true, get: function () { return concatWith_1.concatWith; } }); + var connect_1 = connect$1; + Object.defineProperty(exports, "connect", { enumerable: true, get: function () { return connect_1.connect; } }); + var count_1 = count$1; + Object.defineProperty(exports, "count", { enumerable: true, get: function () { return count_1.count; } }); + var debounce_1 = debounce$1; + Object.defineProperty(exports, "debounce", { enumerable: true, get: function () { return debounce_1.debounce; } }); + var debounceTime_1 = debounceTime$1; + Object.defineProperty(exports, "debounceTime", { enumerable: true, get: function () { return debounceTime_1.debounceTime; } }); + var defaultIfEmpty_1 = defaultIfEmpty$1; + Object.defineProperty(exports, "defaultIfEmpty", { enumerable: true, get: function () { return defaultIfEmpty_1.defaultIfEmpty; } }); + var delay_1 = delay$1; + Object.defineProperty(exports, "delay", { enumerable: true, get: function () { return delay_1.delay; } }); + var delayWhen_1 = delayWhen$1; + Object.defineProperty(exports, "delayWhen", { enumerable: true, get: function () { return delayWhen_1.delayWhen; } }); + var dematerialize_1 = dematerialize$1; + Object.defineProperty(exports, "dematerialize", { enumerable: true, get: function () { return dematerialize_1.dematerialize; } }); + var distinct_1 = distinct$1; + Object.defineProperty(exports, "distinct", { enumerable: true, get: function () { return distinct_1.distinct; } }); + var distinctUntilChanged_1 = distinctUntilChanged$1; + Object.defineProperty(exports, "distinctUntilChanged", { enumerable: true, get: function () { return distinctUntilChanged_1.distinctUntilChanged; } }); + var distinctUntilKeyChanged_1 = distinctUntilKeyChanged$1; + Object.defineProperty(exports, "distinctUntilKeyChanged", { enumerable: true, get: function () { return distinctUntilKeyChanged_1.distinctUntilKeyChanged; } }); + var elementAt_1 = elementAt$1; + Object.defineProperty(exports, "elementAt", { enumerable: true, get: function () { return elementAt_1.elementAt; } }); + var endWith_1 = endWith$1; + Object.defineProperty(exports, "endWith", { enumerable: true, get: function () { return endWith_1.endWith; } }); + var every_1 = every$1; + Object.defineProperty(exports, "every", { enumerable: true, get: function () { return every_1.every; } }); + var exhaust_1 = exhaust; + Object.defineProperty(exports, "exhaust", { enumerable: true, get: function () { return exhaust_1.exhaust; } }); + var exhaustAll_1 = exhaustAll$1; + Object.defineProperty(exports, "exhaustAll", { enumerable: true, get: function () { return exhaustAll_1.exhaustAll; } }); + var exhaustMap_1 = exhaustMap$1; + Object.defineProperty(exports, "exhaustMap", { enumerable: true, get: function () { return exhaustMap_1.exhaustMap; } }); + var expand_1 = expand$2; + Object.defineProperty(exports, "expand", { enumerable: true, get: function () { return expand_1.expand; } }); + var filter_1 = filter$1; + Object.defineProperty(exports, "filter", { enumerable: true, get: function () { return filter_1.filter; } }); + var finalize_1 = finalize$1; + Object.defineProperty(exports, "finalize", { enumerable: true, get: function () { return finalize_1.finalize; } }); + var find_1 = find$1; + Object.defineProperty(exports, "find", { enumerable: true, get: function () { return find_1.find; } }); + var findIndex_1 = findIndex$1; + Object.defineProperty(exports, "findIndex", { enumerable: true, get: function () { return findIndex_1.findIndex; } }); + var first_1 = first$1; + Object.defineProperty(exports, "first", { enumerable: true, get: function () { return first_1.first; } }); + var groupBy_1 = groupBy$1; + Object.defineProperty(exports, "groupBy", { enumerable: true, get: function () { return groupBy_1.groupBy; } }); + var ignoreElements_1 = ignoreElements$1; + Object.defineProperty(exports, "ignoreElements", { enumerable: true, get: function () { return ignoreElements_1.ignoreElements; } }); + var isEmpty_1 = isEmpty$1; + Object.defineProperty(exports, "isEmpty", { enumerable: true, get: function () { return isEmpty_1.isEmpty; } }); + var last_1 = last$1; + Object.defineProperty(exports, "last", { enumerable: true, get: function () { return last_1.last; } }); + var map_1 = map$2; + Object.defineProperty(exports, "map", { enumerable: true, get: function () { return map_1.map; } }); + var mapTo_1 = mapTo$1; + Object.defineProperty(exports, "mapTo", { enumerable: true, get: function () { return mapTo_1.mapTo; } }); + var materialize_1 = materialize$1; + Object.defineProperty(exports, "materialize", { enumerable: true, get: function () { return materialize_1.materialize; } }); + var max_1 = max$1; + Object.defineProperty(exports, "max", { enumerable: true, get: function () { return max_1.max; } }); + var mergeAll_1 = mergeAll$1; + Object.defineProperty(exports, "mergeAll", { enumerable: true, get: function () { return mergeAll_1.mergeAll; } }); + var flatMap_1 = flatMap; + Object.defineProperty(exports, "flatMap", { enumerable: true, get: function () { return flatMap_1.flatMap; } }); + var mergeMap_1 = mergeMap$1; + Object.defineProperty(exports, "mergeMap", { enumerable: true, get: function () { return mergeMap_1.mergeMap; } }); + var mergeMapTo_1 = mergeMapTo$1; + Object.defineProperty(exports, "mergeMapTo", { enumerable: true, get: function () { return mergeMapTo_1.mergeMapTo; } }); + var mergeScan_1 = mergeScan$1; + Object.defineProperty(exports, "mergeScan", { enumerable: true, get: function () { return mergeScan_1.mergeScan; } }); + var mergeWith_1 = mergeWith$1; + Object.defineProperty(exports, "mergeWith", { enumerable: true, get: function () { return mergeWith_1.mergeWith; } }); + var min_1 = min$1; + Object.defineProperty(exports, "min", { enumerable: true, get: function () { return min_1.min; } }); + var multicast_1 = multicast$1; + Object.defineProperty(exports, "multicast", { enumerable: true, get: function () { return multicast_1.multicast; } }); + var observeOn_1 = observeOn$1; + Object.defineProperty(exports, "observeOn", { enumerable: true, get: function () { return observeOn_1.observeOn; } }); + var onErrorResumeNextWith_1 = onErrorResumeNextWith$1; + Object.defineProperty(exports, "onErrorResumeNextWith", { enumerable: true, get: function () { return onErrorResumeNextWith_1.onErrorResumeNextWith; } }); + var pairwise_1 = pairwise$1; + Object.defineProperty(exports, "pairwise", { enumerable: true, get: function () { return pairwise_1.pairwise; } }); + var pluck_1 = pluck$1; + Object.defineProperty(exports, "pluck", { enumerable: true, get: function () { return pluck_1.pluck; } }); + var publish_1 = publish$1; + Object.defineProperty(exports, "publish", { enumerable: true, get: function () { return publish_1.publish; } }); + var publishBehavior_1 = publishBehavior$1; + Object.defineProperty(exports, "publishBehavior", { enumerable: true, get: function () { return publishBehavior_1.publishBehavior; } }); + var publishLast_1 = publishLast$1; + Object.defineProperty(exports, "publishLast", { enumerable: true, get: function () { return publishLast_1.publishLast; } }); + var publishReplay_1 = publishReplay$1; + Object.defineProperty(exports, "publishReplay", { enumerable: true, get: function () { return publishReplay_1.publishReplay; } }); + var raceWith_1 = raceWith$1; + Object.defineProperty(exports, "raceWith", { enumerable: true, get: function () { return raceWith_1.raceWith; } }); + var reduce_1 = reduce$1; + Object.defineProperty(exports, "reduce", { enumerable: true, get: function () { return reduce_1.reduce; } }); + var repeat_1 = repeat$2; + Object.defineProperty(exports, "repeat", { enumerable: true, get: function () { return repeat_1.repeat; } }); + var repeatWhen_1 = repeatWhen$1; + Object.defineProperty(exports, "repeatWhen", { enumerable: true, get: function () { return repeatWhen_1.repeatWhen; } }); + var retry_1 = retry$1; + Object.defineProperty(exports, "retry", { enumerable: true, get: function () { return retry_1.retry; } }); + var retryWhen_1 = retryWhen$1; + Object.defineProperty(exports, "retryWhen", { enumerable: true, get: function () { return retryWhen_1.retryWhen; } }); + var refCount_1 = refCount$1; + Object.defineProperty(exports, "refCount", { enumerable: true, get: function () { return refCount_1.refCount; } }); + var sample_1 = sample$2; + Object.defineProperty(exports, "sample", { enumerable: true, get: function () { return sample_1.sample; } }); + var sampleTime_1 = sampleTime$1; + Object.defineProperty(exports, "sampleTime", { enumerable: true, get: function () { return sampleTime_1.sampleTime; } }); + var scan_1 = scan$1; + Object.defineProperty(exports, "scan", { enumerable: true, get: function () { return scan_1.scan; } }); + var sequenceEqual_1 = sequenceEqual$1; + Object.defineProperty(exports, "sequenceEqual", { enumerable: true, get: function () { return sequenceEqual_1.sequenceEqual; } }); + var share_1 = share$1; + Object.defineProperty(exports, "share", { enumerable: true, get: function () { return share_1.share; } }); + var shareReplay_1 = shareReplay$1; + Object.defineProperty(exports, "shareReplay", { enumerable: true, get: function () { return shareReplay_1.shareReplay; } }); + var single_1 = single$1; + Object.defineProperty(exports, "single", { enumerable: true, get: function () { return single_1.single; } }); + var skip_1 = skip$1; + Object.defineProperty(exports, "skip", { enumerable: true, get: function () { return skip_1.skip; } }); + var skipLast_1 = skipLast$1; + Object.defineProperty(exports, "skipLast", { enumerable: true, get: function () { return skipLast_1.skipLast; } }); + var skipUntil_1 = skipUntil$1; + Object.defineProperty(exports, "skipUntil", { enumerable: true, get: function () { return skipUntil_1.skipUntil; } }); + var skipWhile_1 = skipWhile$1; + Object.defineProperty(exports, "skipWhile", { enumerable: true, get: function () { return skipWhile_1.skipWhile; } }); + var startWith_1 = startWith$1; + Object.defineProperty(exports, "startWith", { enumerable: true, get: function () { return startWith_1.startWith; } }); + var subscribeOn_1 = subscribeOn$1; + Object.defineProperty(exports, "subscribeOn", { enumerable: true, get: function () { return subscribeOn_1.subscribeOn; } }); + var switchAll_1 = switchAll$1; + Object.defineProperty(exports, "switchAll", { enumerable: true, get: function () { return switchAll_1.switchAll; } }); + var switchMap_1 = switchMap$1; + Object.defineProperty(exports, "switchMap", { enumerable: true, get: function () { return switchMap_1.switchMap; } }); + var switchMapTo_1 = switchMapTo$1; + Object.defineProperty(exports, "switchMapTo", { enumerable: true, get: function () { return switchMapTo_1.switchMapTo; } }); + var switchScan_1 = switchScan$1; + Object.defineProperty(exports, "switchScan", { enumerable: true, get: function () { return switchScan_1.switchScan; } }); + var take_1 = take$1; + Object.defineProperty(exports, "take", { enumerable: true, get: function () { return take_1.take; } }); + var takeLast_1 = takeLast$1; + Object.defineProperty(exports, "takeLast", { enumerable: true, get: function () { return takeLast_1.takeLast; } }); + var takeUntil_1 = takeUntil$1; + Object.defineProperty(exports, "takeUntil", { enumerable: true, get: function () { return takeUntil_1.takeUntil; } }); + var takeWhile_1 = takeWhile$1; + Object.defineProperty(exports, "takeWhile", { enumerable: true, get: function () { return takeWhile_1.takeWhile; } }); + var tap_1 = tap$1; + Object.defineProperty(exports, "tap", { enumerable: true, get: function () { return tap_1.tap; } }); + var throttle_1 = throttle$1; + Object.defineProperty(exports, "throttle", { enumerable: true, get: function () { return throttle_1.throttle; } }); + var throttleTime_1 = throttleTime$1; + Object.defineProperty(exports, "throttleTime", { enumerable: true, get: function () { return throttleTime_1.throttleTime; } }); + var throwIfEmpty_1 = throwIfEmpty$1; + Object.defineProperty(exports, "throwIfEmpty", { enumerable: true, get: function () { return throwIfEmpty_1.throwIfEmpty; } }); + var timeInterval_1 = timeInterval$1; + Object.defineProperty(exports, "timeInterval", { enumerable: true, get: function () { return timeInterval_1.timeInterval; } }); + var timeout_2 = timeout; + Object.defineProperty(exports, "timeout", { enumerable: true, get: function () { return timeout_2.timeout; } }); + var timeoutWith_1 = timeoutWith$1; + Object.defineProperty(exports, "timeoutWith", { enumerable: true, get: function () { return timeoutWith_1.timeoutWith; } }); + var timestamp_1 = timestamp$2; + Object.defineProperty(exports, "timestamp", { enumerable: true, get: function () { return timestamp_1.timestamp; } }); + var toArray_1 = toArray$2; + Object.defineProperty(exports, "toArray", { enumerable: true, get: function () { return toArray_1.toArray; } }); + var window_1 = window$2; + Object.defineProperty(exports, "window", { enumerable: true, get: function () { return window_1.window; } }); + var windowCount_1 = windowCount$1; + Object.defineProperty(exports, "windowCount", { enumerable: true, get: function () { return windowCount_1.windowCount; } }); + var windowTime_1 = windowTime$1; + Object.defineProperty(exports, "windowTime", { enumerable: true, get: function () { return windowTime_1.windowTime; } }); + var windowToggle_1 = windowToggle$1; + Object.defineProperty(exports, "windowToggle", { enumerable: true, get: function () { return windowToggle_1.windowToggle; } }); + var windowWhen_1 = windowWhen$1; + Object.defineProperty(exports, "windowWhen", { enumerable: true, get: function () { return windowWhen_1.windowWhen; } }); + var withLatestFrom_1 = withLatestFrom$1; + Object.defineProperty(exports, "withLatestFrom", { enumerable: true, get: function () { return withLatestFrom_1.withLatestFrom; } }); + var zipAll_1 = zipAll$1; + Object.defineProperty(exports, "zipAll", { enumerable: true, get: function () { return zipAll_1.zipAll; } }); + var zipWith_1 = zipWith$1; + Object.defineProperty(exports, "zipWith", { enumerable: true, get: function () { return zipWith_1.zipWith; } }); + +} (cjs)); + +function normalizeKeypressEvents(value, key) { + return { value, key: key || {} }; +} + +function observe(rl) { + const keypress = cjs.fromEvent(rl.input, 'keypress', normalizeKeypressEvents) + .pipe(cjs.takeUntil(cjs.fromEvent(rl, 'close'))) + // Ignore `enter` key. On the readline, we only care about the `line` event. + .pipe(cjs.filter(({ key }) => key.name !== 'enter' && key.name !== 'return')); + + return { + line: cjs.fromEvent(rl, 'line'), + keypress, + + normalizedUpKey: keypress.pipe( + cjs.filter( + ({ key }) => + key.name === 'up' || key.name === 'k' || (key.name === 'p' && key.ctrl), + ), + cjs.share(), + ), + + normalizedDownKey: keypress.pipe( + cjs.filter( + ({ key }) => + key.name === 'down' || key.name === 'j' || (key.name === 'n' && key.ctrl), + ), + cjs.share(), + ), + + numberKey: keypress.pipe( + cjs.filter((e) => e.value && '123456789'.includes(e.value)), + cjs.map((e) => Number(e.value)), + cjs.share(), + ), + + spaceKey: keypress.pipe( + cjs.filter(({ key }) => key && key.name === 'space'), + cjs.share(), + ), + aKey: keypress.pipe( + cjs.filter(({ key }) => key && key.name === 'a'), + cjs.share(), + ), + iKey: keypress.pipe( + cjs.filter(({ key }) => key && key.name === 'i'), + cjs.share(), + ), + }; +} + +/** + * The paginator returns a subset of the choices if the list is too long. + */ + +class Paginator { + /** + * @param {import("./screen-manager")} [screen] + * @param {{isInfinite?: boolean}} [options] + */ + constructor(screen, options = {}) { + const { isInfinite = true } = options; + this.lastIndex = 0; + this.screen = screen; + this.isInfinite = isInfinite; + } + + paginate(output, active, pageSize) { + pageSize ||= 7; + let lines = output.split('\n'); + + if (this.screen) { + lines = this.screen.breakLines(lines); + active = lines + .map((lineParts) => lineParts.length) + .splice(0, active) + .reduce((a, b) => a + b, 0); + lines = lines.flat(); + } + + // Make sure there's enough lines to paginate + if (lines.length <= pageSize) { + return output; + } + const visibleLines = this.isInfinite + ? this.getInfiniteLines(lines, active, pageSize) + : this.getFiniteLines(lines, active, pageSize); + this.lastIndex = active; + return ( + visibleLines.join('\n') + + '\n' + + colors$1.dim('(Move up and down to reveal more choices)') + ); + } + + getInfiniteLines(lines, active, pageSize) { + if (this.pointer === undefined) { + this.pointer = 0; + } + const middleOfList = Math.floor(pageSize / 2); + // Move the pointer only when the user go down and limit it to the middle of the list + if ( + this.pointer < middleOfList && + this.lastIndex < active && + active - this.lastIndex < pageSize + ) { + this.pointer = Math.min(middleOfList, this.pointer + active - this.lastIndex); + } + + // Duplicate the lines so it give an infinite list look + const infinite = [lines, lines, lines].flat(); + const topIndex = Math.max(0, active + lines.length - this.pointer); + + return infinite.splice(topIndex, pageSize); + } + + getFiniteLines(lines, active, pageSize) { + let topIndex = active - pageSize / 2; + if (topIndex < 0) { + topIndex = 0; + } else if (topIndex + pageSize > lines.length) { + topIndex = lines.length - pageSize; + } + return lines.splice(topIndex, pageSize); + } +} + +function incrementListIndex(current, dir, opt) { + const len = opt.choices.realLength; + const shouldLoop = 'loop' in opt ? Boolean(opt.loop) : true; + if (dir === 'up') { + if (current > 0) { + return current - 1; + } + return shouldLoop ? len - 1 : current; + } + if (dir === 'down') { + if (current < len - 1) { + return current + 1; + } + return shouldLoop ? 0 : current; + } + throw new Error('dir must be up or down'); +} + +/** + * Separator object + * Used to space/separate choices group + * @constructor + * @param {String} line Separation line content (facultative) + */ + +class Separator { + constructor(line) { + this.type = 'separator'; + this.line = colors$1.dim(line || Array.from({ length: 15 }).join(figures.line)); + } + + /** + * Helper function returning false if object is a separator + * @param {Object} obj object to test against + * @return {Boolean} `false` if object is a separator + */ + static exclude(obj) { + return obj.type !== 'separator'; + } + + /** + * Stringify separator + * @return {String} the separator display string + */ + toString() { + return this.line; + } +} + +/** + * Choice object + * Normalize input as choice object + * @constructor + * @param {Number|String|Object} val Choice value. If an object is passed, it should contains + * at least one of `value` or `name` property + */ + +class Choice { + constructor(val, answers) { + // Don't process Choice and Separator object + if (val instanceof Choice || val.type === 'separator') { + return val; + } + + if (typeof val === 'string' || typeof val === 'number') { + this.name = String(val); + this.value = val; + this.short = String(val); + } else { + Object.assign(this, val, { + name: val.name || val.value, + value: 'value' in val ? val.value : val.name, + short: val.short || val.name || val.value, + }); + } + + this.disabled = + typeof val.disabled === 'function' ? val.disabled(answers) : val.disabled; + } +} + +/** + * Choices collection + * Collection of multiple `choice` object + */ +class Choices { + /** @param {Array} choices All `choice` to keep in the collection */ + constructor(choices, answers) { + this.choices = choices.map((val) => { + if (val.type === 'separator') { + if (!(val instanceof Separator)) { + val = new Separator(val.line); + } + + return val; + } + + return new Choice(val, answers); + }); + + this.realChoices = this.choices + .filter(Separator.exclude) + .filter((item) => !item.disabled); + + Object.defineProperty(this, 'length', { + get() { + return this.choices.length; + }, + set(val) { + this.choices.length = val; + }, + }); + + Object.defineProperty(this, 'realLength', { + get() { + return this.realChoices.length; + }, + set() { + throw new Error('Cannot set `realLength` of a Choices collection'); + }, + }); + } + + [Symbol.iterator]() { + const data = this.choices; + let index = -1; + + return { + next: () => ({ value: data[++index], done: !(index in data) }), + }; + } + + /** + * Get a valid choice from the collection + * @param {Number} selector The selected choice index + * @return {Choice|Undefined} Return the matched choice or undefined + */ + getChoice(selector) { + assert$1(typeof selector === 'number'); + return this.realChoices[selector]; + } + + /** + * Get a raw element from the collection + * @param {Number} selector The selected index value + * @return {Choice|Undefined} Return the matched choice or undefined + */ + get(selector) { + assert$1(typeof selector === 'number'); + return this.choices[selector]; + } + + /** + * Match the valid choices against a where clause + * @param {Function|Object} whereClause filter function or key-value object to match against + * @return {Array} Matching choices or empty array + */ + where(whereClause) { + let filterFn; + if (typeof whereClause === 'function') { + filterFn = whereClause; + } else { + const [key, value] = Object.entries(whereClause)[0]; + filterFn = (choice) => choice[key] === value; + } + + return this.realChoices.filter(filterFn); + } + + /** + * Pluck a particular key from the choices + * @param {String} propertyName Property name to select + * @return {Array} Selected properties + */ + pluck(propertyName) { + return this.realChoices.map((choice) => choice[propertyName]); + } + + // Expose usual Array methods + indexOf(...args) { + return this.choices.indexOf(...args); + } + + forEach(...args) { + return this.choices.forEach(...args); + } + + filter(...args) { + return this.choices.filter(...args); + } + + reduce(...args) { + return this.choices.reduce(...args); + } + + find(func) { + return this.choices.find(func); + } + + some(func) { + return this.choices.some(func); + } + + push(...args) { + const objs = args.map((val) => new Choice(val)); + this.choices.push(...objs); + this.realChoices = this.choices + .filter(Separator.exclude) + .filter((item) => !item.disabled); + return this.choices; + } +} + +var cliWidth_1 = cliWidth; + +function normalizeOpts(options) { + const defaultOpts = { + defaultWidth: 0, + output: process.stdout, + tty: tty$1, + }; + + if (!options) { + return defaultOpts; + } + + Object.keys(defaultOpts).forEach(function (key) { + if (!options[key]) { + options[key] = defaultOpts[key]; + } + }); + + return options; +} + +function cliWidth(options) { + const opts = normalizeOpts(options); + + if (opts.output.getWindowSize) { + return opts.output.getWindowSize()[0] || opts.defaultWidth; + } + + if (opts.tty.getWindowSize) { + return opts.tty.getWindowSize()[1] || opts.defaultWidth; + } + + if (opts.output.columns) { + return opts.output.columns; + } + + if (process.env.CLI_WIDTH) { + const width = parseInt(process.env.CLI_WIDTH, 10); + + if (!isNaN(width) && width !== 0) { + return width; + } + } + + return opts.defaultWidth; +} + +var cliWidth$1 = /*@__PURE__*/getDefaultExportFromCjs(cliWidth_1); + +var stringWidth$3 = {exports: {}}; + +var ansiRegex$1 = ({onlyFirst = false} = {}) => { + const pattern = [ + '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', + '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' + ].join('|'); + + return new RegExp(pattern, onlyFirst ? undefined : 'g'); +}; + +const ansiRegex = ansiRegex$1; + +var stripAnsi$3 = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; + +var stripAnsi$4 = /*@__PURE__*/getDefaultExportFromCjs(stripAnsi$3); + +var isFullwidthCodePoint$2 = {exports: {}}; + +/* eslint-disable yoda */ + +const isFullwidthCodePoint$1 = codePoint => { + if (Number.isNaN(codePoint)) { + return false; + } + + // Code points are derived from: + // http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt + if ( + codePoint >= 0x1100 && ( + codePoint <= 0x115F || // Hangul Jamo + codePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET + codePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET + // CJK Radicals Supplement .. Enclosed CJK Letters and Months + (0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F) || + // Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A + (0x3250 <= codePoint && codePoint <= 0x4DBF) || + // CJK Unified Ideographs .. Yi Radicals + (0x4E00 <= codePoint && codePoint <= 0xA4C6) || + // Hangul Jamo Extended-A + (0xA960 <= codePoint && codePoint <= 0xA97C) || + // Hangul Syllables + (0xAC00 <= codePoint && codePoint <= 0xD7A3) || + // CJK Compatibility Ideographs + (0xF900 <= codePoint && codePoint <= 0xFAFF) || + // Vertical Forms + (0xFE10 <= codePoint && codePoint <= 0xFE19) || + // CJK Compatibility Forms .. Small Form Variants + (0xFE30 <= codePoint && codePoint <= 0xFE6B) || + // Halfwidth and Fullwidth Forms + (0xFF01 <= codePoint && codePoint <= 0xFF60) || + (0xFFE0 <= codePoint && codePoint <= 0xFFE6) || + // Kana Supplement + (0x1B000 <= codePoint && codePoint <= 0x1B001) || + // Enclosed Ideographic Supplement + (0x1F200 <= codePoint && codePoint <= 0x1F251) || + // CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane + (0x20000 <= codePoint && codePoint <= 0x3FFFD) + ) + ) { + return true; + } + + return false; +}; + +isFullwidthCodePoint$2.exports = isFullwidthCodePoint$1; +isFullwidthCodePoint$2.exports.default = isFullwidthCodePoint$1; + +var isFullwidthCodePointExports = isFullwidthCodePoint$2.exports; + +var emojiRegex$1 = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; +}; + +const stripAnsi$2 = stripAnsi$3; +const isFullwidthCodePoint = isFullwidthCodePointExports; +const emojiRegex = emojiRegex$1; + +const stringWidth$1 = string => { + if (typeof string !== 'string' || string.length === 0) { + return 0; + } + + string = stripAnsi$2(string); + + if (string.length === 0) { + return 0; + } + + string = string.replace(emojiRegex(), ' '); + + let width = 0; + + for (let i = 0; i < string.length; i++) { + const code = string.codePointAt(i); + + // Ignore control characters + if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) { + continue; + } + + // Ignore combining characters + if (code >= 0x300 && code <= 0x36F) { + continue; + } + + // Surrogates + if (code > 0xFFFF) { + i++; + } + + width += isFullwidthCodePoint(code) ? 2 : 1; + } + + return width; +}; + +stringWidth$3.exports = stringWidth$1; +// TODO: remove this in the next major version +stringWidth$3.exports.default = stringWidth$1; + +var stringWidthExports = stringWidth$3.exports; +var stringWidth$2 = /*@__PURE__*/getDefaultExportFromCjs(stringWidthExports); + +var ansiStyles$2 = {exports: {}}; + +var colorName; +var hasRequiredColorName; + +function requireColorName () { + if (hasRequiredColorName) return colorName; + hasRequiredColorName = 1; + + colorName = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] + }; + return colorName; +} + +/* MIT license */ + +var conversions; +var hasRequiredConversions; + +function requireConversions () { + if (hasRequiredConversions) return conversions; + hasRequiredConversions = 1; + /* eslint-disable no-mixed-operators */ + const cssKeywords = requireColorName(); + + // NOTE: conversions should only return primitive values (i.e. arrays, or + // values that give correct `typeof` results). + // do not use box values types (i.e. Number(), String(), etc.) + + const reverseKeywords = {}; + for (const key of Object.keys(cssKeywords)) { + reverseKeywords[cssKeywords[key]] = key; + } + + const convert = { + rgb: {channels: 3, labels: 'rgb'}, + hsl: {channels: 3, labels: 'hsl'}, + hsv: {channels: 3, labels: 'hsv'}, + hwb: {channels: 3, labels: 'hwb'}, + cmyk: {channels: 4, labels: 'cmyk'}, + xyz: {channels: 3, labels: 'xyz'}, + lab: {channels: 3, labels: 'lab'}, + lch: {channels: 3, labels: 'lch'}, + hex: {channels: 1, labels: ['hex']}, + keyword: {channels: 1, labels: ['keyword']}, + ansi16: {channels: 1, labels: ['ansi16']}, + ansi256: {channels: 1, labels: ['ansi256']}, + hcg: {channels: 3, labels: ['h', 'c', 'g']}, + apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, + gray: {channels: 1, labels: ['gray']} + }; + + conversions = convert; + + // Hide .channels and .labels properties + for (const model of Object.keys(convert)) { + if (!('channels' in convert[model])) { + throw new Error('missing channels property: ' + model); + } + + if (!('labels' in convert[model])) { + throw new Error('missing channel labels property: ' + model); + } + + if (convert[model].labels.length !== convert[model].channels) { + throw new Error('channel and label counts mismatch: ' + model); + } + + const {channels, labels} = convert[model]; + delete convert[model].channels; + delete convert[model].labels; + Object.defineProperty(convert[model], 'channels', {value: channels}); + Object.defineProperty(convert[model], 'labels', {value: labels}); + } + + convert.rgb.hsl = function (rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const min = Math.min(r, g, b); + const max = Math.max(r, g, b); + const delta = max - min; + let h; + let s; + + if (max === min) { + h = 0; + } else if (r === max) { + h = (g - b) / delta; + } else if (g === max) { + h = 2 + (b - r) / delta; + } else if (b === max) { + h = 4 + (r - g) / delta; + } + + h = Math.min(h * 60, 360); + + if (h < 0) { + h += 360; + } + + const l = (min + max) / 2; + + if (max === min) { + s = 0; + } else if (l <= 0.5) { + s = delta / (max + min); + } else { + s = delta / (2 - max - min); + } + + return [h, s * 100, l * 100]; + }; + + convert.rgb.hsv = function (rgb) { + let rdif; + let gdif; + let bdif; + let h; + let s; + + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const v = Math.max(r, g, b); + const diff = v - Math.min(r, g, b); + const diffc = function (c) { + return (v - c) / 6 / diff + 1 / 2; + }; + + if (diff === 0) { + h = 0; + s = 0; + } else { + s = diff / v; + rdif = diffc(r); + gdif = diffc(g); + bdif = diffc(b); + + if (r === v) { + h = bdif - gdif; + } else if (g === v) { + h = (1 / 3) + rdif - bdif; + } else if (b === v) { + h = (2 / 3) + gdif - rdif; + } + + if (h < 0) { + h += 1; + } else if (h > 1) { + h -= 1; + } + } + + return [ + h * 360, + s * 100, + v * 100 + ]; + }; + + convert.rgb.hwb = function (rgb) { + const r = rgb[0]; + const g = rgb[1]; + let b = rgb[2]; + const h = convert.rgb.hsl(rgb)[0]; + const w = 1 / 255 * Math.min(r, Math.min(g, b)); + + b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); + + return [h, w * 100, b * 100]; + }; + + convert.rgb.cmyk = function (rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + + const k = Math.min(1 - r, 1 - g, 1 - b); + const c = (1 - r - k) / (1 - k) || 0; + const m = (1 - g - k) / (1 - k) || 0; + const y = (1 - b - k) / (1 - k) || 0; + + return [c * 100, m * 100, y * 100, k * 100]; + }; + + function comparativeDistance(x, y) { + /* + See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance + */ + return ( + ((x[0] - y[0]) ** 2) + + ((x[1] - y[1]) ** 2) + + ((x[2] - y[2]) ** 2) + ); + } + + convert.rgb.keyword = function (rgb) { + const reversed = reverseKeywords[rgb]; + if (reversed) { + return reversed; + } + + let currentClosestDistance = Infinity; + let currentClosestKeyword; + + for (const keyword of Object.keys(cssKeywords)) { + const value = cssKeywords[keyword]; + + // Compute comparative distance + const distance = comparativeDistance(rgb, value); + + // Check if its less, if so set as closest + if (distance < currentClosestDistance) { + currentClosestDistance = distance; + currentClosestKeyword = keyword; + } + } + + return currentClosestKeyword; + }; + + convert.keyword.rgb = function (keyword) { + return cssKeywords[keyword]; + }; + + convert.rgb.xyz = function (rgb) { + let r = rgb[0] / 255; + let g = rgb[1] / 255; + let b = rgb[2] / 255; + + // Assume sRGB + r = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92); + g = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92); + b = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92); + + const x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); + const y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); + const z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); + + return [x * 100, y * 100, z * 100]; + }; + + convert.rgb.lab = function (rgb) { + const xyz = convert.rgb.xyz(rgb); + let x = xyz[0]; + let y = xyz[1]; + let z = xyz[2]; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); + + const l = (116 * y) - 16; + const a = 500 * (x - y); + const b = 200 * (y - z); + + return [l, a, b]; + }; + + convert.hsl.rgb = function (hsl) { + const h = hsl[0] / 360; + const s = hsl[1] / 100; + const l = hsl[2] / 100; + let t2; + let t3; + let val; + + if (s === 0) { + val = l * 255; + return [val, val, val]; + } + + if (l < 0.5) { + t2 = l * (1 + s); + } else { + t2 = l + s - l * s; + } + + const t1 = 2 * l - t2; + + const rgb = [0, 0, 0]; + for (let i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + if (t3 < 0) { + t3++; + } + + if (t3 > 1) { + t3--; + } + + if (6 * t3 < 1) { + val = t1 + (t2 - t1) * 6 * t3; + } else if (2 * t3 < 1) { + val = t2; + } else if (3 * t3 < 2) { + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + } else { + val = t1; + } + + rgb[i] = val * 255; + } + + return rgb; + }; + + convert.hsl.hsv = function (hsl) { + const h = hsl[0]; + let s = hsl[1] / 100; + let l = hsl[2] / 100; + let smin = s; + const lmin = Math.max(l, 0.01); + + l *= 2; + s *= (l <= 1) ? l : 2 - l; + smin *= lmin <= 1 ? lmin : 2 - lmin; + const v = (l + s) / 2; + const sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); + + return [h, sv * 100, v * 100]; + }; + + convert.hsv.rgb = function (hsv) { + const h = hsv[0] / 60; + const s = hsv[1] / 100; + let v = hsv[2] / 100; + const hi = Math.floor(h) % 6; + + const f = h - Math.floor(h); + const p = 255 * v * (1 - s); + const q = 255 * v * (1 - (s * f)); + const t = 255 * v * (1 - (s * (1 - f))); + v *= 255; + + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } + }; + + convert.hsv.hsl = function (hsv) { + const h = hsv[0]; + const s = hsv[1] / 100; + const v = hsv[2] / 100; + const vmin = Math.max(v, 0.01); + let sl; + let l; + + l = (2 - s) * v; + const lmin = (2 - s) * vmin; + sl = s * vmin; + sl /= (lmin <= 1) ? lmin : 2 - lmin; + sl = sl || 0; + l /= 2; + + return [h, sl * 100, l * 100]; + }; + + // http://dev.w3.org/csswg/css-color/#hwb-to-rgb + convert.hwb.rgb = function (hwb) { + const h = hwb[0] / 360; + let wh = hwb[1] / 100; + let bl = hwb[2] / 100; + const ratio = wh + bl; + let f; + + // Wh + bl cant be > 1 + if (ratio > 1) { + wh /= ratio; + bl /= ratio; + } + + const i = Math.floor(6 * h); + const v = 1 - bl; + f = 6 * h - i; + + if ((i & 0x01) !== 0) { + f = 1 - f; + } + + const n = wh + f * (v - wh); // Linear interpolation + + let r; + let g; + let b; + /* eslint-disable max-statements-per-line,no-multi-spaces */ + switch (i) { + default: + case 6: + case 0: r = v; g = n; b = wh; break; + case 1: r = n; g = v; b = wh; break; + case 2: r = wh; g = v; b = n; break; + case 3: r = wh; g = n; b = v; break; + case 4: r = n; g = wh; b = v; break; + case 5: r = v; g = wh; b = n; break; + } + /* eslint-enable max-statements-per-line,no-multi-spaces */ + + return [r * 255, g * 255, b * 255]; + }; + + convert.cmyk.rgb = function (cmyk) { + const c = cmyk[0] / 100; + const m = cmyk[1] / 100; + const y = cmyk[2] / 100; + const k = cmyk[3] / 100; + + const r = 1 - Math.min(1, c * (1 - k) + k); + const g = 1 - Math.min(1, m * (1 - k) + k); + const b = 1 - Math.min(1, y * (1 - k) + k); + + return [r * 255, g * 255, b * 255]; + }; + + convert.xyz.rgb = function (xyz) { + const x = xyz[0] / 100; + const y = xyz[1] / 100; + const z = xyz[2] / 100; + let r; + let g; + let b; + + r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); + g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); + b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); + + // Assume sRGB + r = r > 0.0031308 + ? ((1.055 * (r ** (1.0 / 2.4))) - 0.055) + : r * 12.92; + + g = g > 0.0031308 + ? ((1.055 * (g ** (1.0 / 2.4))) - 0.055) + : g * 12.92; + + b = b > 0.0031308 + ? ((1.055 * (b ** (1.0 / 2.4))) - 0.055) + : b * 12.92; + + r = Math.min(Math.max(0, r), 1); + g = Math.min(Math.max(0, g), 1); + b = Math.min(Math.max(0, b), 1); + + return [r * 255, g * 255, b * 255]; + }; + + convert.xyz.lab = function (xyz) { + let x = xyz[0]; + let y = xyz[1]; + let z = xyz[2]; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); + + const l = (116 * y) - 16; + const a = 500 * (x - y); + const b = 200 * (y - z); + + return [l, a, b]; + }; + + convert.lab.xyz = function (lab) { + const l = lab[0]; + const a = lab[1]; + const b = lab[2]; + let x; + let y; + let z; + + y = (l + 16) / 116; + x = a / 500 + y; + z = y - b / 200; + + const y2 = y ** 3; + const x2 = x ** 3; + const z2 = z ** 3; + y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; + x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; + z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; + + x *= 95.047; + y *= 100; + z *= 108.883; + + return [x, y, z]; + }; + + convert.lab.lch = function (lab) { + const l = lab[0]; + const a = lab[1]; + const b = lab[2]; + let h; + + const hr = Math.atan2(b, a); + h = hr * 360 / 2 / Math.PI; + + if (h < 0) { + h += 360; + } + + const c = Math.sqrt(a * a + b * b); + + return [l, c, h]; + }; + + convert.lch.lab = function (lch) { + const l = lch[0]; + const c = lch[1]; + const h = lch[2]; + + const hr = h / 360 * 2 * Math.PI; + const a = c * Math.cos(hr); + const b = c * Math.sin(hr); + + return [l, a, b]; + }; + + convert.rgb.ansi16 = function (args, saturation = null) { + const [r, g, b] = args; + let value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization + + value = Math.round(value / 50); + + if (value === 0) { + return 30; + } + + let ansi = 30 + + ((Math.round(b / 255) << 2) + | (Math.round(g / 255) << 1) + | Math.round(r / 255)); + + if (value === 2) { + ansi += 60; + } + + return ansi; + }; + + convert.hsv.ansi16 = function (args) { + // Optimization here; we already know the value and don't need to get + // it converted for us. + return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); + }; + + convert.rgb.ansi256 = function (args) { + const r = args[0]; + const g = args[1]; + const b = args[2]; + + // We use the extended greyscale palette here, with the exception of + // black and white. normal palette only has 4 greyscale shades. + if (r === g && g === b) { + if (r < 8) { + return 16; + } + + if (r > 248) { + return 231; + } + + return Math.round(((r - 8) / 247) * 24) + 232; + } + + const ansi = 16 + + (36 * Math.round(r / 255 * 5)) + + (6 * Math.round(g / 255 * 5)) + + Math.round(b / 255 * 5); + + return ansi; + }; + + convert.ansi16.rgb = function (args) { + let color = args % 10; + + // Handle greyscale + if (color === 0 || color === 7) { + if (args > 50) { + color += 3.5; + } + + color = color / 10.5 * 255; + + return [color, color, color]; + } + + const mult = (~~(args > 50) + 1) * 0.5; + const r = ((color & 1) * mult) * 255; + const g = (((color >> 1) & 1) * mult) * 255; + const b = (((color >> 2) & 1) * mult) * 255; + + return [r, g, b]; + }; + + convert.ansi256.rgb = function (args) { + // Handle greyscale + if (args >= 232) { + const c = (args - 232) * 10 + 8; + return [c, c, c]; + } + + args -= 16; + + let rem; + const r = Math.floor(args / 36) / 5 * 255; + const g = Math.floor((rem = args % 36) / 6) / 5 * 255; + const b = (rem % 6) / 5 * 255; + + return [r, g, b]; + }; + + convert.rgb.hex = function (args) { + const integer = ((Math.round(args[0]) & 0xFF) << 16) + + ((Math.round(args[1]) & 0xFF) << 8) + + (Math.round(args[2]) & 0xFF); + + const string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; + }; + + convert.hex.rgb = function (args) { + const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); + if (!match) { + return [0, 0, 0]; + } + + let colorString = match[0]; + + if (match[0].length === 3) { + colorString = colorString.split('').map(char => { + return char + char; + }).join(''); + } + + const integer = parseInt(colorString, 16); + const r = (integer >> 16) & 0xFF; + const g = (integer >> 8) & 0xFF; + const b = integer & 0xFF; + + return [r, g, b]; + }; + + convert.rgb.hcg = function (rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const max = Math.max(Math.max(r, g), b); + const min = Math.min(Math.min(r, g), b); + const chroma = (max - min); + let grayscale; + let hue; + + if (chroma < 1) { + grayscale = min / (1 - chroma); + } else { + grayscale = 0; + } + + if (chroma <= 0) { + hue = 0; + } else + if (max === r) { + hue = ((g - b) / chroma) % 6; + } else + if (max === g) { + hue = 2 + (b - r) / chroma; + } else { + hue = 4 + (r - g) / chroma; + } + + hue /= 6; + hue %= 1; + + return [hue * 360, chroma * 100, grayscale * 100]; + }; + + convert.hsl.hcg = function (hsl) { + const s = hsl[1] / 100; + const l = hsl[2] / 100; + + const c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l)); + + let f = 0; + if (c < 1.0) { + f = (l - 0.5 * c) / (1.0 - c); + } + + return [hsl[0], c * 100, f * 100]; + }; + + convert.hsv.hcg = function (hsv) { + const s = hsv[1] / 100; + const v = hsv[2] / 100; + + const c = s * v; + let f = 0; + + if (c < 1.0) { + f = (v - c) / (1 - c); + } + + return [hsv[0], c * 100, f * 100]; + }; + + convert.hcg.rgb = function (hcg) { + const h = hcg[0] / 360; + const c = hcg[1] / 100; + const g = hcg[2] / 100; + + if (c === 0.0) { + return [g * 255, g * 255, g * 255]; + } + + const pure = [0, 0, 0]; + const hi = (h % 1) * 6; + const v = hi % 1; + const w = 1 - v; + let mg = 0; + + /* eslint-disable max-statements-per-line */ + switch (Math.floor(hi)) { + case 0: + pure[0] = 1; pure[1] = v; pure[2] = 0; break; + case 1: + pure[0] = w; pure[1] = 1; pure[2] = 0; break; + case 2: + pure[0] = 0; pure[1] = 1; pure[2] = v; break; + case 3: + pure[0] = 0; pure[1] = w; pure[2] = 1; break; + case 4: + pure[0] = v; pure[1] = 0; pure[2] = 1; break; + default: + pure[0] = 1; pure[1] = 0; pure[2] = w; + } + /* eslint-enable max-statements-per-line */ + + mg = (1.0 - c) * g; + + return [ + (c * pure[0] + mg) * 255, + (c * pure[1] + mg) * 255, + (c * pure[2] + mg) * 255 + ]; + }; + + convert.hcg.hsv = function (hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + + const v = c + g * (1.0 - c); + let f = 0; + + if (v > 0.0) { + f = c / v; + } + + return [hcg[0], f * 100, v * 100]; + }; + + convert.hcg.hsl = function (hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + + const l = g * (1.0 - c) + 0.5 * c; + let s = 0; + + if (l > 0.0 && l < 0.5) { + s = c / (2 * l); + } else + if (l >= 0.5 && l < 1.0) { + s = c / (2 * (1 - l)); + } + + return [hcg[0], s * 100, l * 100]; + }; + + convert.hcg.hwb = function (hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + const v = c + g * (1.0 - c); + return [hcg[0], (v - c) * 100, (1 - v) * 100]; + }; + + convert.hwb.hcg = function (hwb) { + const w = hwb[1] / 100; + const b = hwb[2] / 100; + const v = 1 - b; + const c = v - w; + let g = 0; + + if (c < 1) { + g = (v - c) / (1 - c); + } + + return [hwb[0], c * 100, g * 100]; + }; + + convert.apple.rgb = function (apple) { + return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; + }; + + convert.rgb.apple = function (rgb) { + return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; + }; + + convert.gray.rgb = function (args) { + return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; + }; + + convert.gray.hsl = function (args) { + return [0, 0, args[0]]; + }; + + convert.gray.hsv = convert.gray.hsl; + + convert.gray.hwb = function (gray) { + return [0, 100, gray[0]]; + }; + + convert.gray.cmyk = function (gray) { + return [0, 0, 0, gray[0]]; + }; + + convert.gray.lab = function (gray) { + return [gray[0], 0, 0]; + }; + + convert.gray.hex = function (gray) { + const val = Math.round(gray[0] / 100 * 255) & 0xFF; + const integer = (val << 16) + (val << 8) + val; + + const string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; + }; + + convert.rgb.gray = function (rgb) { + const val = (rgb[0] + rgb[1] + rgb[2]) / 3; + return [val / 255 * 100]; + }; + return conversions; +} + +var route; +var hasRequiredRoute; + +function requireRoute () { + if (hasRequiredRoute) return route; + hasRequiredRoute = 1; + const conversions = requireConversions(); + + /* + This function routes a model to all other models. + + all functions that are routed have a property `.conversion` attached + to the returned synthetic function. This property is an array + of strings, each with the steps in between the 'from' and 'to' + color models (inclusive). + + conversions that are not possible simply are not included. + */ + + function buildGraph() { + const graph = {}; + // https://jsperf.com/object-keys-vs-for-in-with-closure/3 + const models = Object.keys(conversions); + + for (let len = models.length, i = 0; i < len; i++) { + graph[models[i]] = { + // http://jsperf.com/1-vs-infinity + // micro-opt, but this is simple. + distance: -1, + parent: null + }; + } + + return graph; + } + + // https://en.wikipedia.org/wiki/Breadth-first_search + function deriveBFS(fromModel) { + const graph = buildGraph(); + const queue = [fromModel]; // Unshift -> queue -> pop + + graph[fromModel].distance = 0; + + while (queue.length) { + const current = queue.pop(); + const adjacents = Object.keys(conversions[current]); + + for (let len = adjacents.length, i = 0; i < len; i++) { + const adjacent = adjacents[i]; + const node = graph[adjacent]; + + if (node.distance === -1) { + node.distance = graph[current].distance + 1; + node.parent = current; + queue.unshift(adjacent); + } + } + } + + return graph; + } + + function link(from, to) { + return function (args) { + return to(from(args)); + }; + } + + function wrapConversion(toModel, graph) { + const path = [graph[toModel].parent, toModel]; + let fn = conversions[graph[toModel].parent][toModel]; + + let cur = graph[toModel].parent; + while (graph[cur].parent) { + path.unshift(graph[cur].parent); + fn = link(conversions[graph[cur].parent][cur], fn); + cur = graph[cur].parent; + } + + fn.conversion = path; + return fn; + } + + route = function (fromModel) { + const graph = deriveBFS(fromModel); + const conversion = {}; + + const models = Object.keys(graph); + for (let len = models.length, i = 0; i < len; i++) { + const toModel = models[i]; + const node = graph[toModel]; + + if (node.parent === null) { + // No possible conversion, or this node is the source model. + continue; + } + + conversion[toModel] = wrapConversion(toModel, graph); + } + + return conversion; + }; + return route; +} + +var colorConvert; +var hasRequiredColorConvert; + +function requireColorConvert () { + if (hasRequiredColorConvert) return colorConvert; + hasRequiredColorConvert = 1; + const conversions = requireConversions(); + const route = requireRoute(); + + const convert = {}; + + const models = Object.keys(conversions); + + function wrapRaw(fn) { + const wrappedFn = function (...args) { + const arg0 = args[0]; + if (arg0 === undefined || arg0 === null) { + return arg0; + } + + if (arg0.length > 1) { + args = arg0; + } + + return fn(args); + }; + + // Preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; + } + + function wrapRounded(fn) { + const wrappedFn = function (...args) { + const arg0 = args[0]; + + if (arg0 === undefined || arg0 === null) { + return arg0; + } + + if (arg0.length > 1) { + args = arg0; + } + + const result = fn(args); + + // We're assuming the result is an array here. + // see notice in conversions.js; don't use box types + // in conversion functions. + if (typeof result === 'object') { + for (let len = result.length, i = 0; i < len; i++) { + result[i] = Math.round(result[i]); + } + } + + return result; + }; + + // Preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; + } + + models.forEach(fromModel => { + convert[fromModel] = {}; + + Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels}); + Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels}); + + const routes = route(fromModel); + const routeModels = Object.keys(routes); + + routeModels.forEach(toModel => { + const fn = routes[toModel]; + + convert[fromModel][toModel] = wrapRounded(fn); + convert[fromModel][toModel].raw = wrapRaw(fn); + }); + }); + + colorConvert = convert; + return colorConvert; +} + +ansiStyles$2.exports; + +(function (module) { + + const wrapAnsi16 = (fn, offset) => (...args) => { + const code = fn(...args); + return `\u001B[${code + offset}m`; + }; + + const wrapAnsi256 = (fn, offset) => (...args) => { + const code = fn(...args); + return `\u001B[${38 + offset};5;${code}m`; + }; + + const wrapAnsi16m = (fn, offset) => (...args) => { + const rgb = fn(...args); + return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`; + }; + + const ansi2ansi = n => n; + const rgb2rgb = (r, g, b) => [r, g, b]; + + const setLazyProperty = (object, property, get) => { + Object.defineProperty(object, property, { + get: () => { + const value = get(); + + Object.defineProperty(object, property, { + value, + enumerable: true, + configurable: true + }); + + return value; + }, + enumerable: true, + configurable: true + }); + }; + + /** @type {typeof import('color-convert')} */ + let colorConvert; + const makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => { + if (colorConvert === undefined) { + colorConvert = requireColorConvert(); + } + + const offset = isBackground ? 10 : 0; + const styles = {}; + + for (const [sourceSpace, suite] of Object.entries(colorConvert)) { + const name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace; + if (sourceSpace === targetSpace) { + styles[name] = wrap(identity, offset); + } else if (typeof suite === 'object') { + styles[name] = wrap(suite[targetSpace], offset); + } + } + + return styles; + }; + + function assembleStyles() { + const codes = new Map(); + const styles = { + modifier: { + reset: [0, 0], + // 21 isn't widely supported and 22 does the same thing + bold: [1, 22], + dim: [2, 22], + italic: [3, 23], + underline: [4, 24], + inverse: [7, 27], + hidden: [8, 28], + strikethrough: [9, 29] + }, + color: { + black: [30, 39], + red: [31, 39], + green: [32, 39], + yellow: [33, 39], + blue: [34, 39], + magenta: [35, 39], + cyan: [36, 39], + white: [37, 39], + + // Bright color + blackBright: [90, 39], + redBright: [91, 39], + greenBright: [92, 39], + yellowBright: [93, 39], + blueBright: [94, 39], + magentaBright: [95, 39], + cyanBright: [96, 39], + whiteBright: [97, 39] + }, + bgColor: { + bgBlack: [40, 49], + bgRed: [41, 49], + bgGreen: [42, 49], + bgYellow: [43, 49], + bgBlue: [44, 49], + bgMagenta: [45, 49], + bgCyan: [46, 49], + bgWhite: [47, 49], + + // Bright color + bgBlackBright: [100, 49], + bgRedBright: [101, 49], + bgGreenBright: [102, 49], + bgYellowBright: [103, 49], + bgBlueBright: [104, 49], + bgMagentaBright: [105, 49], + bgCyanBright: [106, 49], + bgWhiteBright: [107, 49] + } + }; + + // Alias bright black as gray (and grey) + styles.color.gray = styles.color.blackBright; + styles.bgColor.bgGray = styles.bgColor.bgBlackBright; + styles.color.grey = styles.color.blackBright; + styles.bgColor.bgGrey = styles.bgColor.bgBlackBright; + + for (const [groupName, group] of Object.entries(styles)) { + for (const [styleName, style] of Object.entries(group)) { + styles[styleName] = { + open: `\u001B[${style[0]}m`, + close: `\u001B[${style[1]}m` + }; + + group[styleName] = styles[styleName]; + + codes.set(style[0], style[1]); + } + + Object.defineProperty(styles, groupName, { + value: group, + enumerable: false + }); + } + + Object.defineProperty(styles, 'codes', { + value: codes, + enumerable: false + }); + + styles.color.close = '\u001B[39m'; + styles.bgColor.close = '\u001B[49m'; + + setLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false)); + setLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false)); + setLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false)); + setLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true)); + setLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true)); + setLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true)); + + return styles; + } + + // Make the export immutable + Object.defineProperty(module, 'exports', { + enumerable: true, + get: assembleStyles + }); +} (ansiStyles$2)); + +var ansiStylesExports = ansiStyles$2.exports; + +const stringWidth = stringWidthExports; +const stripAnsi$1 = stripAnsi$3; +const ansiStyles$1 = ansiStylesExports; + +const ESCAPES = new Set([ + '\u001B', + '\u009B' +]); + +const END_CODE = 39; + +const wrapAnsi = code => `${ESCAPES.values().next().value}[${code}m`; + +// Calculate the length of words split on ' ', ignoring +// the extra characters added by ansi escape codes +const wordLengths = string => string.split(' ').map(character => stringWidth(character)); + +// Wrap a long word across multiple rows +// Ansi escape codes do not count towards length +const wrapWord = (rows, word, columns) => { + const characters = [...word]; + + let isInsideEscape = false; + let visible = stringWidth(stripAnsi$1(rows[rows.length - 1])); + + for (const [index, character] of characters.entries()) { + const characterLength = stringWidth(character); + + if (visible + characterLength <= columns) { + rows[rows.length - 1] += character; + } else { + rows.push(character); + visible = 0; + } + + if (ESCAPES.has(character)) { + isInsideEscape = true; + } else if (isInsideEscape && character === 'm') { + isInsideEscape = false; + continue; + } + + if (isInsideEscape) { + continue; + } + + visible += characterLength; + + if (visible === columns && index < characters.length - 1) { + rows.push(''); + visible = 0; + } + } + + // It's possible that the last row we copy over is only + // ansi escape characters, handle this edge-case + if (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) { + rows[rows.length - 2] += rows.pop(); + } +}; + +// Trims spaces from a string ignoring invisible sequences +const stringVisibleTrimSpacesRight = str => { + const words = str.split(' '); + let last = words.length; + + while (last > 0) { + if (stringWidth(words[last - 1]) > 0) { + break; + } + + last--; + } + + if (last === words.length) { + return str; + } + + return words.slice(0, last).join(' ') + words.slice(last).join(''); +}; + +// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode +// +// 'hard' will never allow a string to take up more than columns characters +// +// 'soft' allows long words to expand past the column length +const exec = (string, columns, options = {}) => { + if (options.trim !== false && string.trim() === '') { + return ''; + } + + let pre = ''; + let ret = ''; + let escapeCode; + + const lengths = wordLengths(string); + let rows = ['']; + + for (const [index, word] of string.split(' ').entries()) { + if (options.trim !== false) { + rows[rows.length - 1] = rows[rows.length - 1].trimLeft(); + } + + let rowLength = stringWidth(rows[rows.length - 1]); + + if (index !== 0) { + if (rowLength >= columns && (options.wordWrap === false || options.trim === false)) { + // If we start with a new word but the current row length equals the length of the columns, add a new row + rows.push(''); + rowLength = 0; + } + + if (rowLength > 0 || options.trim === false) { + rows[rows.length - 1] += ' '; + rowLength++; + } + } + + // In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns' + if (options.hard && lengths[index] > columns) { + const remainingColumns = (columns - rowLength); + const breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns); + const breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns); + if (breaksStartingNextLine < breaksStartingThisLine) { + rows.push(''); + } + + wrapWord(rows, word, columns); + continue; + } + + if (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) { + if (options.wordWrap === false && rowLength < columns) { + wrapWord(rows, word, columns); + continue; + } + + rows.push(''); + } + + if (rowLength + lengths[index] > columns && options.wordWrap === false) { + wrapWord(rows, word, columns); + continue; + } + + rows[rows.length - 1] += word; + } + + if (options.trim !== false) { + rows = rows.map(stringVisibleTrimSpacesRight); + } + + pre = rows.join('\n'); + + for (const [index, character] of [...pre].entries()) { + ret += character; + + if (ESCAPES.has(character)) { + const code = parseFloat(/\d[^m]*/.exec(pre.slice(index, index + 4))); + escapeCode = code === END_CODE ? null : code; + } + + const code = ansiStyles$1.codes.get(Number(escapeCode)); + + if (escapeCode && code) { + if (pre[index + 1] === '\n') { + ret += wrapAnsi(code); + } else if (character === '\n') { + ret += wrapAnsi(escapeCode); + } + } + } + + return ret; +}; + +// For each newline, invoke the method separately +var wrapAnsi_1 = (string, columns, options) => { + return String(string) + .normalize() + .replace(/\r\n/g, '\n') + .split('\n') + .map(line => exec(line, columns, options)) + .join('\n'); +}; + +var wrapAnsi$1 = /*@__PURE__*/getDefaultExportFromCjs(wrapAnsi_1); + +var ora$1 = {exports: {}}; + +const stringReplaceAll$1 = (string, substring, replacer) => { + let index = string.indexOf(substring); + if (index === -1) { + return string; + } + + const substringLength = substring.length; + let endIndex = 0; + let returnValue = ''; + do { + returnValue += string.substr(endIndex, index - endIndex) + substring + replacer; + endIndex = index + substringLength; + index = string.indexOf(substring, endIndex); + } while (index !== -1); + + returnValue += string.substr(endIndex); + return returnValue; +}; + +const stringEncaseCRLFWithFirstIndex$1 = (string, prefix, postfix, index) => { + let endIndex = 0; + let returnValue = ''; + do { + const gotCR = string[index - 1] === '\r'; + returnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? '\r\n' : '\n') + postfix; + endIndex = index + 1; + index = string.indexOf('\n', endIndex); + } while (index !== -1); + + returnValue += string.substr(endIndex); + return returnValue; +}; + +var util$1 = { + stringReplaceAll: stringReplaceAll$1, + stringEncaseCRLFWithFirstIndex: stringEncaseCRLFWithFirstIndex$1 +}; + +var templates; +var hasRequiredTemplates; + +function requireTemplates () { + if (hasRequiredTemplates) return templates; + hasRequiredTemplates = 1; + const TEMPLATE_REGEX = /(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi; + const STYLE_REGEX = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g; + const STRING_REGEX = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/; + const ESCAPE_REGEX = /\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi; + + const ESCAPES = new Map([ + ['n', '\n'], + ['r', '\r'], + ['t', '\t'], + ['b', '\b'], + ['f', '\f'], + ['v', '\v'], + ['0', '\0'], + ['\\', '\\'], + ['e', '\u001B'], + ['a', '\u0007'] + ]); + + function unescape(c) { + const u = c[0] === 'u'; + const bracket = c[1] === '{'; + + if ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) { + return String.fromCharCode(parseInt(c.slice(1), 16)); + } + + if (u && bracket) { + return String.fromCodePoint(parseInt(c.slice(2, -1), 16)); + } + + return ESCAPES.get(c) || c; + } + + function parseArguments(name, arguments_) { + const results = []; + const chunks = arguments_.trim().split(/\s*,\s*/g); + let matches; + + for (const chunk of chunks) { + const number = Number(chunk); + if (!Number.isNaN(number)) { + results.push(number); + } else if ((matches = chunk.match(STRING_REGEX))) { + results.push(matches[2].replace(ESCAPE_REGEX, (m, escape, character) => escape ? unescape(escape) : character)); + } else { + throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`); + } + } + + return results; + } + + function parseStyle(style) { + STYLE_REGEX.lastIndex = 0; + + const results = []; + let matches; + + while ((matches = STYLE_REGEX.exec(style)) !== null) { + const name = matches[1]; + + if (matches[2]) { + const args = parseArguments(name, matches[2]); + results.push([name].concat(args)); + } else { + results.push([name]); + } + } + + return results; + } + + function buildStyle(chalk, styles) { + const enabled = {}; + + for (const layer of styles) { + for (const style of layer.styles) { + enabled[style[0]] = layer.inverse ? null : style.slice(1); + } + } + + let current = chalk; + for (const [styleName, styles] of Object.entries(enabled)) { + if (!Array.isArray(styles)) { + continue; + } + + if (!(styleName in current)) { + throw new Error(`Unknown Chalk style: ${styleName}`); + } + + current = styles.length > 0 ? current[styleName](...styles) : current[styleName]; + } + + return current; + } + + templates = (chalk, temporary) => { + const styles = []; + const chunks = []; + let chunk = []; + + // eslint-disable-next-line max-params + temporary.replace(TEMPLATE_REGEX, (m, escapeCharacter, inverse, style, close, character) => { + if (escapeCharacter) { + chunk.push(unescape(escapeCharacter)); + } else if (style) { + const string = chunk.join(''); + chunk = []; + chunks.push(styles.length === 0 ? string : buildStyle(chalk, styles)(string)); + styles.push({inverse, styles: parseStyle(style)}); + } else if (close) { + if (styles.length === 0) { + throw new Error('Found extraneous } in Chalk template literal'); + } + + chunks.push(buildStyle(chalk, styles)(chunk.join(''))); + chunk = []; + styles.pop(); + } else { + chunk.push(character); + } + }); + + chunks.push(chunk.join('')); + + if (styles.length > 0) { + const errMessage = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\`}\`)`; + throw new Error(errMessage); + } + + return chunks.join(''); + }; + return templates; +} + +const ansiStyles = ansiStylesExports; +const {stdout: stdoutColor, stderr: stderrColor} = requireSupportsColor(); +const { + stringReplaceAll, + stringEncaseCRLFWithFirstIndex +} = util$1; + +const {isArray: isArray$1} = Array; + +// `supportsColor.level` → `ansiStyles.color[name]` mapping +const levelMapping = [ + 'ansi', + 'ansi', + 'ansi256', + 'ansi16m' +]; + +const styles = Object.create(null); + +const applyOptions = (object, options = {}) => { + if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) { + throw new Error('The `level` option should be an integer from 0 to 3'); + } + + // Detect level if not set manually + const colorLevel = stdoutColor ? stdoutColor.level : 0; + object.level = options.level === undefined ? colorLevel : options.level; +}; + +class ChalkClass { + constructor(options) { + // eslint-disable-next-line no-constructor-return + return chalkFactory(options); + } +} + +const chalkFactory = options => { + const chalk = {}; + applyOptions(chalk, options); + + chalk.template = (...arguments_) => chalkTag(chalk.template, ...arguments_); + + Object.setPrototypeOf(chalk, Chalk.prototype); + Object.setPrototypeOf(chalk.template, chalk); + + chalk.template.constructor = () => { + throw new Error('`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.'); + }; + + chalk.template.Instance = ChalkClass; + + return chalk.template; +}; + +function Chalk(options) { + return chalkFactory(options); +} + +for (const [styleName, style] of Object.entries(ansiStyles)) { + styles[styleName] = { + get() { + const builder = createBuilder(this, createStyler(style.open, style.close, this._styler), this._isEmpty); + Object.defineProperty(this, styleName, {value: builder}); + return builder; + } + }; +} + +styles.visible = { + get() { + const builder = createBuilder(this, this._styler, true); + Object.defineProperty(this, 'visible', {value: builder}); + return builder; + } +}; + +const usedModels = ['rgb', 'hex', 'keyword', 'hsl', 'hsv', 'hwb', 'ansi', 'ansi256']; + +for (const model of usedModels) { + styles[model] = { + get() { + const {level} = this; + return function (...arguments_) { + const styler = createStyler(ansiStyles.color[levelMapping[level]][model](...arguments_), ansiStyles.color.close, this._styler); + return createBuilder(this, styler, this._isEmpty); + }; + } + }; +} + +for (const model of usedModels) { + const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1); + styles[bgModel] = { + get() { + const {level} = this; + return function (...arguments_) { + const styler = createStyler(ansiStyles.bgColor[levelMapping[level]][model](...arguments_), ansiStyles.bgColor.close, this._styler); + return createBuilder(this, styler, this._isEmpty); + }; + } + }; +} + +const proto = Object.defineProperties(() => {}, { + ...styles, + level: { + enumerable: true, + get() { + return this._generator.level; + }, + set(level) { + this._generator.level = level; + } + } +}); + +const createStyler = (open, close, parent) => { + let openAll; + let closeAll; + if (parent === undefined) { + openAll = open; + closeAll = close; + } else { + openAll = parent.openAll + open; + closeAll = close + parent.closeAll; + } + + return { + open, + close, + openAll, + closeAll, + parent + }; +}; + +const createBuilder = (self, _styler, _isEmpty) => { + const builder = (...arguments_) => { + if (isArray$1(arguments_[0]) && isArray$1(arguments_[0].raw)) { + // Called as a template literal, for example: chalk.red`2 + 3 = {bold ${2+3}}` + return applyStyle(builder, chalkTag(builder, ...arguments_)); + } + + // Single argument is hot path, implicit coercion is faster than anything + // eslint-disable-next-line no-implicit-coercion + return applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' ')); + }; + + // We alter the prototype because we must return a function, but there is + // no way to create a function with a different prototype + Object.setPrototypeOf(builder, proto); + + builder._generator = self; + builder._styler = _styler; + builder._isEmpty = _isEmpty; + + return builder; +}; + +const applyStyle = (self, string) => { + if (self.level <= 0 || !string) { + return self._isEmpty ? '' : string; + } + + let styler = self._styler; + + if (styler === undefined) { + return string; + } + + const {openAll, closeAll} = styler; + if (string.indexOf('\u001B') !== -1) { + while (styler !== undefined) { + // Replace any instances already present with a re-opening code + // otherwise only the part of the string until said closing code + // will be colored, and the rest will simply be 'plain'. + string = stringReplaceAll(string, styler.close, styler.open); + + styler = styler.parent; + } + } + + // We can move both next actions out of loop, because remaining actions in loop won't have + // any/visible effect on parts we add here. Close the styling before a linebreak and reopen + // after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92 + const lfIndex = string.indexOf('\n'); + if (lfIndex !== -1) { + string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex); + } + + return openAll + string + closeAll; +}; + +let template; +const chalkTag = (chalk, ...strings) => { + const [firstString] = strings; + + if (!isArray$1(firstString) || !isArray$1(firstString.raw)) { + // If chalk() was called by itself or with a string, + // return the string itself as a string. + return strings.join(' '); + } + + const arguments_ = strings.slice(1); + const parts = [firstString.raw[0]]; + + for (let i = 1; i < firstString.length; i++) { + parts.push( + String(arguments_[i - 1]).replace(/[{}\\]/g, '\\$&'), + String(firstString.raw[i]) + ); + } + + if (template === undefined) { + template = requireTemplates(); + } + + return template(chalk, parts.join('')); +}; + +Object.defineProperties(Chalk.prototype, styles); + +const chalk$2 = Chalk(); // eslint-disable-line new-cap +chalk$2.supportsColor = stdoutColor; +chalk$2.stderr = Chalk({level: stderrColor ? stderrColor.level : 0}); // eslint-disable-line new-cap +chalk$2.stderr.supportsColor = stderrColor; + +var source = chalk$2; + +var cliCursor$1 = {}; + +var onetime$2 = {exports: {}}; + +var mimicFn$2 = {exports: {}}; + +const mimicFn$1 = (to, from) => { + for (const prop of Reflect.ownKeys(from)) { + Object.defineProperty(to, prop, Object.getOwnPropertyDescriptor(from, prop)); + } + + return to; +}; + +mimicFn$2.exports = mimicFn$1; +// TODO: Remove this for the next major release +mimicFn$2.exports.default = mimicFn$1; + +var mimicFnExports = mimicFn$2.exports; + +const mimicFn = mimicFnExports; + +const calledFunctions = new WeakMap(); + +const onetime$1 = (function_, options = {}) => { + if (typeof function_ !== 'function') { + throw new TypeError('Expected a function'); + } + + let returnValue; + let callCount = 0; + const functionName = function_.displayName || function_.name || ''; + + const onetime = function (...arguments_) { + calledFunctions.set(onetime, ++callCount); + + if (callCount === 1) { + returnValue = function_.apply(this, arguments_); + function_ = null; + } else if (options.throw === true) { + throw new Error(`Function \`${functionName}\` can only be called once`); + } + + return returnValue; + }; + + mimicFn(onetime, function_); + calledFunctions.set(onetime, callCount); + + return onetime; +}; + +onetime$2.exports = onetime$1; +// TODO: Remove this for the next major release +onetime$2.exports.default = onetime$1; + +onetime$2.exports.callCount = function_ => { + if (!calledFunctions.has(function_)) { + throw new Error(`The given function \`${function_.name}\` is not wrapped by the \`onetime\` package`); + } + + return calledFunctions.get(function_); +}; + +var onetimeExports = onetime$2.exports; + +var signalExit$1 = {exports: {}}; + +var signals$1 = {exports: {}}; + +var hasRequiredSignals; + +function requireSignals () { + if (hasRequiredSignals) return signals$1.exports; + hasRequiredSignals = 1; + (function (module) { + // This is not the set of all possible signals. + // + // It IS, however, the set of all signals that trigger + // an exit on either Linux or BSD systems. Linux is a + // superset of the signal names supported on BSD, and + // the unknown signals just fail to register, so we can + // catch that easily enough. + // + // Don't bother with SIGKILL. It's uncatchable, which + // means that we can't fire any callbacks anyway. + // + // If a user does happen to register a handler on a non- + // fatal signal like SIGWINCH or something, and then + // exit, it'll end up firing `process.emit('exit')`, so + // the handler will be fired anyway. + // + // SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised + // artificially, inherently leave the process in a + // state from which it is not safe to try and enter JS + // listeners. + module.exports = [ + 'SIGABRT', + 'SIGALRM', + 'SIGHUP', + 'SIGINT', + 'SIGTERM' + ]; + + if (process.platform !== 'win32') { + module.exports.push( + 'SIGVTALRM', + 'SIGXCPU', + 'SIGXFSZ', + 'SIGUSR2', + 'SIGTRAP', + 'SIGSYS', + 'SIGQUIT', + 'SIGIOT' + // should detect profiler and enable/disable accordingly. + // see #21 + // 'SIGPROF' + ); + } + + if (process.platform === 'linux') { + module.exports.push( + 'SIGIO', + 'SIGPOLL', + 'SIGPWR', + 'SIGSTKFLT', + 'SIGUNUSED' + ); + } + } (signals$1)); + return signals$1.exports; +} + +// Note: since nyc uses this module to output coverage, any lines +// that are in the direct sync flow of nyc's outputCoverage are +// ignored, since we can never get coverage for them. +// grab a reference to node's real process object right away +var process$1 = commonjsGlobal.process; + +const processOk = function (process) { + return process && + typeof process === 'object' && + typeof process.removeListener === 'function' && + typeof process.emit === 'function' && + typeof process.reallyExit === 'function' && + typeof process.listeners === 'function' && + typeof process.kill === 'function' && + typeof process.pid === 'number' && + typeof process.on === 'function' +}; + +// some kind of non-node environment, just no-op +/* istanbul ignore if */ +if (!processOk(process$1)) { + signalExit$1.exports = function () { + return function () {} + }; +} else { + var assert = assert$1; + var signals = requireSignals(); + var isWin = /^win/i.test(process$1.platform); + + var EE = require$$2$2; + /* istanbul ignore if */ + if (typeof EE !== 'function') { + EE = EE.EventEmitter; + } + + var emitter; + if (process$1.__signal_exit_emitter__) { + emitter = process$1.__signal_exit_emitter__; + } else { + emitter = process$1.__signal_exit_emitter__ = new EE(); + emitter.count = 0; + emitter.emitted = {}; + } + + // Because this emitter is a global, we have to check to see if a + // previous version of this library failed to enable infinite listeners. + // I know what you're about to say. But literally everything about + // signal-exit is a compromise with evil. Get used to it. + if (!emitter.infinite) { + emitter.setMaxListeners(Infinity); + emitter.infinite = true; + } + + signalExit$1.exports = function (cb, opts) { + /* istanbul ignore if */ + if (!processOk(commonjsGlobal.process)) { + return function () {} + } + assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler'); + + if (loaded === false) { + load$2(); + } + + var ev = 'exit'; + if (opts && opts.alwaysLast) { + ev = 'afterexit'; + } + + var remove = function () { + emitter.removeListener(ev, cb); + if (emitter.listeners('exit').length === 0 && + emitter.listeners('afterexit').length === 0) { + unload(); + } + }; + emitter.on(ev, cb); + + return remove + }; + + var unload = function unload () { + if (!loaded || !processOk(commonjsGlobal.process)) { + return + } + loaded = false; + + signals.forEach(function (sig) { + try { + process$1.removeListener(sig, sigListeners[sig]); + } catch (er) {} + }); + process$1.emit = originalProcessEmit; + process$1.reallyExit = originalProcessReallyExit; + emitter.count -= 1; + }; + signalExit$1.exports.unload = unload; + + var emit = function emit (event, code, signal) { + /* istanbul ignore if */ + if (emitter.emitted[event]) { + return + } + emitter.emitted[event] = true; + emitter.emit(event, code, signal); + }; + + // { : , ... } + var sigListeners = {}; + signals.forEach(function (sig) { + sigListeners[sig] = function listener () { + /* istanbul ignore if */ + if (!processOk(commonjsGlobal.process)) { + return + } + // If there are no other listeners, an exit is coming! + // Simplest way: remove us and then re-send the signal. + // We know that this will kill the process, so we can + // safely emit now. + var listeners = process$1.listeners(sig); + if (listeners.length === emitter.count) { + unload(); + emit('exit', null, sig); + /* istanbul ignore next */ + emit('afterexit', null, sig); + /* istanbul ignore next */ + if (isWin && sig === 'SIGHUP') { + // "SIGHUP" throws an `ENOSYS` error on Windows, + // so use a supported signal instead + sig = 'SIGINT'; + } + /* istanbul ignore next */ + process$1.kill(process$1.pid, sig); + } + }; + }); + + signalExit$1.exports.signals = function () { + return signals + }; + + var loaded = false; + + var load$2 = function load () { + if (loaded || !processOk(commonjsGlobal.process)) { + return + } + loaded = true; + + // This is the number of onSignalExit's that are in play. + // It's important so that we can count the correct number of + // listeners on signals, and don't wait for the other one to + // handle it instead of us. + emitter.count += 1; + + signals = signals.filter(function (sig) { + try { + process$1.on(sig, sigListeners[sig]); + return true + } catch (er) { + return false + } + }); + + process$1.emit = processEmit; + process$1.reallyExit = processReallyExit; + }; + signalExit$1.exports.load = load$2; + + var originalProcessReallyExit = process$1.reallyExit; + var processReallyExit = function processReallyExit (code) { + /* istanbul ignore if */ + if (!processOk(commonjsGlobal.process)) { + return + } + process$1.exitCode = code || /* istanbul ignore next */ 0; + emit('exit', process$1.exitCode, null); + /* istanbul ignore next */ + emit('afterexit', process$1.exitCode, null); + /* istanbul ignore next */ + originalProcessReallyExit.call(process$1, process$1.exitCode); + }; + + var originalProcessEmit = process$1.emit; + var processEmit = function processEmit (ev, arg) { + if (ev === 'exit' && processOk(commonjsGlobal.process)) { + /* istanbul ignore else */ + if (arg !== undefined) { + process$1.exitCode = arg; + } + var ret = originalProcessEmit.apply(this, arguments); + /* istanbul ignore next */ + emit('exit', process$1.exitCode, null); + /* istanbul ignore next */ + emit('afterexit', process$1.exitCode, null); + /* istanbul ignore next */ + return ret + } else { + return originalProcessEmit.apply(this, arguments) + } + }; +} + +var signalExitExports = signalExit$1.exports; + +const onetime = onetimeExports; +const signalExit = signalExitExports; + +var restoreCursor = onetime(() => { + signalExit(() => { + process.stderr.write('\u001B[?25h'); + }, {alwaysLast: true}); +}); + +(function (exports) { + const restoreCursor$1 = restoreCursor; + + let isHidden = false; + + exports.show = (writableStream = process.stderr) => { + if (!writableStream.isTTY) { + return; + } + + isHidden = false; + writableStream.write('\u001B[?25h'); + }; + + exports.hide = (writableStream = process.stderr) => { + if (!writableStream.isTTY) { + return; + } + + restoreCursor$1(); + isHidden = true; + writableStream.write('\u001B[?25l'); + }; + + exports.toggle = (force, writableStream) => { + if (force !== undefined) { + isHidden = force; + } + + if (isHidden) { + exports.show(writableStream); + } else { + exports.hide(writableStream); + } + }; +} (cliCursor$1)); + +var dots = { + interval: 80, + frames: [ + "⠋", + "⠙", + "⠹", + "⠸", + "⠼", + "⠴", + "⠦", + "⠧", + "⠇", + "⠏" + ] +}; +var dots2 = { + interval: 80, + frames: [ + "⣾", + "⣽", + "⣻", + "⢿", + "⡿", + "⣟", + "⣯", + "⣷" + ] +}; +var dots3 = { + interval: 80, + frames: [ + "⠋", + "⠙", + "⠚", + "⠞", + "⠖", + "⠦", + "⠴", + "⠲", + "⠳", + "⠓" + ] +}; +var dots4 = { + interval: 80, + frames: [ + "⠄", + "⠆", + "⠇", + "⠋", + "⠙", + "⠸", + "⠰", + "⠠", + "⠰", + "⠸", + "⠙", + "⠋", + "⠇", + "⠆" + ] +}; +var dots5 = { + interval: 80, + frames: [ + "⠋", + "⠙", + "⠚", + "⠒", + "⠂", + "⠂", + "⠒", + "⠲", + "⠴", + "⠦", + "⠖", + "⠒", + "⠐", + "⠐", + "⠒", + "⠓", + "⠋" + ] +}; +var dots6 = { + interval: 80, + frames: [ + "⠁", + "⠉", + "⠙", + "⠚", + "⠒", + "⠂", + "⠂", + "⠒", + "⠲", + "⠴", + "⠤", + "⠄", + "⠄", + "⠤", + "⠴", + "⠲", + "⠒", + "⠂", + "⠂", + "⠒", + "⠚", + "⠙", + "⠉", + "⠁" + ] +}; +var dots7 = { + interval: 80, + frames: [ + "⠈", + "⠉", + "⠋", + "⠓", + "⠒", + "⠐", + "⠐", + "⠒", + "⠖", + "⠦", + "⠤", + "⠠", + "⠠", + "⠤", + "⠦", + "⠖", + "⠒", + "⠐", + "⠐", + "⠒", + "⠓", + "⠋", + "⠉", + "⠈" + ] +}; +var dots8 = { + interval: 80, + frames: [ + "⠁", + "⠁", + "⠉", + "⠙", + "⠚", + "⠒", + "⠂", + "⠂", + "⠒", + "⠲", + "⠴", + "⠤", + "⠄", + "⠄", + "⠤", + "⠠", + "⠠", + "⠤", + "⠦", + "⠖", + "⠒", + "⠐", + "⠐", + "⠒", + "⠓", + "⠋", + "⠉", + "⠈", + "⠈" + ] +}; +var dots9 = { + interval: 80, + frames: [ + "⢹", + "⢺", + "⢼", + "⣸", + "⣇", + "⡧", + "⡗", + "⡏" + ] +}; +var dots10 = { + interval: 80, + frames: [ + "⢄", + "⢂", + "⢁", + "⡁", + "⡈", + "⡐", + "⡠" + ] +}; +var dots11 = { + interval: 100, + frames: [ + "⠁", + "⠂", + "⠄", + "⡀", + "⢀", + "⠠", + "⠐", + "⠈" + ] +}; +var dots12 = { + interval: 80, + frames: [ + "⢀⠀", + "⡀⠀", + "⠄⠀", + "⢂⠀", + "⡂⠀", + "⠅⠀", + "⢃⠀", + "⡃⠀", + "⠍⠀", + "⢋⠀", + "⡋⠀", + "⠍⠁", + "⢋⠁", + "⡋⠁", + "⠍⠉", + "⠋⠉", + "⠋⠉", + "⠉⠙", + "⠉⠙", + "⠉⠩", + "⠈⢙", + "⠈⡙", + "⢈⠩", + "⡀⢙", + "⠄⡙", + "⢂⠩", + "⡂⢘", + "⠅⡘", + "⢃⠨", + "⡃⢐", + "⠍⡐", + "⢋⠠", + "⡋⢀", + "⠍⡁", + "⢋⠁", + "⡋⠁", + "⠍⠉", + "⠋⠉", + "⠋⠉", + "⠉⠙", + "⠉⠙", + "⠉⠩", + "⠈⢙", + "⠈⡙", + "⠈⠩", + "⠀⢙", + "⠀⡙", + "⠀⠩", + "⠀⢘", + "⠀⡘", + "⠀⠨", + "⠀⢐", + "⠀⡐", + "⠀⠠", + "⠀⢀", + "⠀⡀" + ] +}; +var dots13 = { + interval: 80, + frames: [ + "⣼", + "⣹", + "⢻", + "⠿", + "⡟", + "⣏", + "⣧", + "⣶" + ] +}; +var dots8Bit = { + interval: 80, + frames: [ + "⠀", + "⠁", + "⠂", + "⠃", + "⠄", + "⠅", + "⠆", + "⠇", + "⡀", + "⡁", + "⡂", + "⡃", + "⡄", + "⡅", + "⡆", + "⡇", + "⠈", + "⠉", + "⠊", + "⠋", + "⠌", + "⠍", + "⠎", + "⠏", + "⡈", + "⡉", + "⡊", + "⡋", + "⡌", + "⡍", + "⡎", + "⡏", + "⠐", + "⠑", + "⠒", + "⠓", + "⠔", + "⠕", + "⠖", + "⠗", + "⡐", + "⡑", + "⡒", + "⡓", + "⡔", + "⡕", + "⡖", + "⡗", + "⠘", + "⠙", + "⠚", + "⠛", + "⠜", + "⠝", + "⠞", + "⠟", + "⡘", + "⡙", + "⡚", + "⡛", + "⡜", + "⡝", + "⡞", + "⡟", + "⠠", + "⠡", + "⠢", + "⠣", + "⠤", + "⠥", + "⠦", + "⠧", + "⡠", + "⡡", + "⡢", + "⡣", + "⡤", + "⡥", + "⡦", + "⡧", + "⠨", + "⠩", + "⠪", + "⠫", + "⠬", + "⠭", + "⠮", + "⠯", + "⡨", + "⡩", + "⡪", + "⡫", + "⡬", + "⡭", + "⡮", + "⡯", + "⠰", + "⠱", + "⠲", + "⠳", + "⠴", + "⠵", + "⠶", + "⠷", + "⡰", + "⡱", + "⡲", + "⡳", + "⡴", + "⡵", + "⡶", + "⡷", + "⠸", + "⠹", + "⠺", + "⠻", + "⠼", + "⠽", + "⠾", + "⠿", + "⡸", + "⡹", + "⡺", + "⡻", + "⡼", + "⡽", + "⡾", + "⡿", + "⢀", + "⢁", + "⢂", + "⢃", + "⢄", + "⢅", + "⢆", + "⢇", + "⣀", + "⣁", + "⣂", + "⣃", + "⣄", + "⣅", + "⣆", + "⣇", + "⢈", + "⢉", + "⢊", + "⢋", + "⢌", + "⢍", + "⢎", + "⢏", + "⣈", + "⣉", + "⣊", + "⣋", + "⣌", + "⣍", + "⣎", + "⣏", + "⢐", + "⢑", + "⢒", + "⢓", + "⢔", + "⢕", + "⢖", + "⢗", + "⣐", + "⣑", + "⣒", + "⣓", + "⣔", + "⣕", + "⣖", + "⣗", + "⢘", + "⢙", + "⢚", + "⢛", + "⢜", + "⢝", + "⢞", + "⢟", + "⣘", + "⣙", + "⣚", + "⣛", + "⣜", + "⣝", + "⣞", + "⣟", + "⢠", + "⢡", + "⢢", + "⢣", + "⢤", + "⢥", + "⢦", + "⢧", + "⣠", + "⣡", + "⣢", + "⣣", + "⣤", + "⣥", + "⣦", + "⣧", + "⢨", + "⢩", + "⢪", + "⢫", + "⢬", + "⢭", + "⢮", + "⢯", + "⣨", + "⣩", + "⣪", + "⣫", + "⣬", + "⣭", + "⣮", + "⣯", + "⢰", + "⢱", + "⢲", + "⢳", + "⢴", + "⢵", + "⢶", + "⢷", + "⣰", + "⣱", + "⣲", + "⣳", + "⣴", + "⣵", + "⣶", + "⣷", + "⢸", + "⢹", + "⢺", + "⢻", + "⢼", + "⢽", + "⢾", + "⢿", + "⣸", + "⣹", + "⣺", + "⣻", + "⣼", + "⣽", + "⣾", + "⣿" + ] +}; +var sand = { + interval: 80, + frames: [ + "⠁", + "⠂", + "⠄", + "⡀", + "⡈", + "⡐", + "⡠", + "⣀", + "⣁", + "⣂", + "⣄", + "⣌", + "⣔", + "⣤", + "⣥", + "⣦", + "⣮", + "⣶", + "⣷", + "⣿", + "⡿", + "⠿", + "⢟", + "⠟", + "⡛", + "⠛", + "⠫", + "⢋", + "⠋", + "⠍", + "⡉", + "⠉", + "⠑", + "⠡", + "⢁" + ] +}; +var line = { + interval: 130, + frames: [ + "-", + "\\", + "|", + "/" + ] +}; +var line2 = { + interval: 100, + frames: [ + "⠂", + "-", + "–", + "—", + "–", + "-" + ] +}; +var pipe = { + interval: 100, + frames: [ + "┤", + "┘", + "┴", + "└", + "├", + "┌", + "┬", + "┐" + ] +}; +var simpleDots = { + interval: 400, + frames: [ + ". ", + ".. ", + "...", + " " + ] +}; +var simpleDotsScrolling = { + interval: 200, + frames: [ + ". ", + ".. ", + "...", + " ..", + " .", + " " + ] +}; +var star = { + interval: 70, + frames: [ + "✶", + "✸", + "✹", + "✺", + "✹", + "✷" + ] +}; +var star2 = { + interval: 80, + frames: [ + "+", + "x", + "*" + ] +}; +var flip = { + interval: 70, + frames: [ + "_", + "_", + "_", + "-", + "`", + "`", + "'", + "´", + "-", + "_", + "_", + "_" + ] +}; +var hamburger = { + interval: 100, + frames: [ + "☱", + "☲", + "☴" + ] +}; +var growVertical = { + interval: 120, + frames: [ + "▁", + "▃", + "▄", + "▅", + "▆", + "▇", + "▆", + "▅", + "▄", + "▃" + ] +}; +var growHorizontal = { + interval: 120, + frames: [ + "▏", + "▎", + "▍", + "▌", + "▋", + "▊", + "▉", + "▊", + "▋", + "▌", + "▍", + "▎" + ] +}; +var balloon = { + interval: 140, + frames: [ + " ", + ".", + "o", + "O", + "@", + "*", + " " + ] +}; +var balloon2 = { + interval: 120, + frames: [ + ".", + "o", + "O", + "°", + "O", + "o", + "." + ] +}; +var noise = { + interval: 100, + frames: [ + "▓", + "▒", + "░" + ] +}; +var bounce = { + interval: 120, + frames: [ + "⠁", + "⠂", + "⠄", + "⠂" + ] +}; +var boxBounce = { + interval: 120, + frames: [ + "▖", + "▘", + "▝", + "▗" + ] +}; +var boxBounce2 = { + interval: 100, + frames: [ + "▌", + "▀", + "▐", + "▄" + ] +}; +var triangle = { + interval: 50, + frames: [ + "◢", + "◣", + "◤", + "◥" + ] +}; +var binary$1 = { + interval: 80, + frames: [ + "010010", + "001100", + "100101", + "111010", + "111101", + "010111", + "101011", + "111000", + "110011", + "110101" + ] +}; +var arc = { + interval: 100, + frames: [ + "◜", + "◠", + "◝", + "◞", + "◡", + "◟" + ] +}; +var circle = { + interval: 120, + frames: [ + "◡", + "⊙", + "◠" + ] +}; +var squareCorners = { + interval: 180, + frames: [ + "◰", + "◳", + "◲", + "◱" + ] +}; +var circleQuarters = { + interval: 120, + frames: [ + "◴", + "◷", + "◶", + "◵" + ] +}; +var circleHalves = { + interval: 50, + frames: [ + "◐", + "◓", + "◑", + "◒" + ] +}; +var squish = { + interval: 100, + frames: [ + "╫", + "╪" + ] +}; +var toggle = { + interval: 250, + frames: [ + "⊶", + "⊷" + ] +}; +var toggle2 = { + interval: 80, + frames: [ + "▫", + "▪" + ] +}; +var toggle3 = { + interval: 120, + frames: [ + "□", + "■" + ] +}; +var toggle4 = { + interval: 100, + frames: [ + "■", + "□", + "▪", + "▫" + ] +}; +var toggle5 = { + interval: 100, + frames: [ + "▮", + "▯" + ] +}; +var toggle6 = { + interval: 300, + frames: [ + "ဝ", + "၀" + ] +}; +var toggle7 = { + interval: 80, + frames: [ + "⦾", + "⦿" + ] +}; +var toggle8 = { + interval: 100, + frames: [ + "◍", + "◌" + ] +}; +var toggle9 = { + interval: 100, + frames: [ + "◉", + "◎" + ] +}; +var toggle10 = { + interval: 100, + frames: [ + "㊂", + "㊀", + "㊁" + ] +}; +var toggle11 = { + interval: 50, + frames: [ + "⧇", + "⧆" + ] +}; +var toggle12 = { + interval: 120, + frames: [ + "☗", + "☖" + ] +}; +var toggle13 = { + interval: 80, + frames: [ + "=", + "*", + "-" + ] +}; +var arrow = { + interval: 100, + frames: [ + "←", + "↖", + "↑", + "↗", + "→", + "↘", + "↓", + "↙" + ] +}; +var arrow2 = { + interval: 80, + frames: [ + "⬆️ ", + "↗️ ", + "➡️ ", + "↘️ ", + "⬇️ ", + "↙️ ", + "⬅️ ", + "↖️ " + ] +}; +var arrow3 = { + interval: 120, + frames: [ + "▹▹▹▹▹", + "▸▹▹▹▹", + "▹▸▹▹▹", + "▹▹▸▹▹", + "▹▹▹▸▹", + "▹▹▹▹▸" + ] +}; +var bouncingBar = { + interval: 80, + frames: [ + "[ ]", + "[= ]", + "[== ]", + "[=== ]", + "[====]", + "[ ===]", + "[ ==]", + "[ =]", + "[ ]", + "[ =]", + "[ ==]", + "[ ===]", + "[====]", + "[=== ]", + "[== ]", + "[= ]" + ] +}; +var bouncingBall = { + interval: 80, + frames: [ + "( ● )", + "( ● )", + "( ● )", + "( ● )", + "( ●)", + "( ● )", + "( ● )", + "( ● )", + "( ● )", + "(● )" + ] +}; +var smiley = { + interval: 200, + frames: [ + "😄 ", + "😝 " + ] +}; +var monkey = { + interval: 300, + frames: [ + "🙈 ", + "🙈 ", + "🙉 ", + "🙊 " + ] +}; +var hearts = { + interval: 100, + frames: [ + "💛 ", + "💙 ", + "💜 ", + "💚 ", + "❤️ " + ] +}; +var clock = { + interval: 100, + frames: [ + "🕛 ", + "🕐 ", + "🕑 ", + "🕒 ", + "🕓 ", + "🕔 ", + "🕕 ", + "🕖 ", + "🕗 ", + "🕘 ", + "🕙 ", + "🕚 " + ] +}; +var earth = { + interval: 180, + frames: [ + "🌍 ", + "🌎 ", + "🌏 " + ] +}; +var material = { + interval: 17, + frames: [ + "█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", + "██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", + "███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", + "████▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", + "██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁", + "██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁", + "███████▁▁▁▁▁▁▁▁▁▁▁▁▁", + "████████▁▁▁▁▁▁▁▁▁▁▁▁", + "█████████▁▁▁▁▁▁▁▁▁▁▁", + "█████████▁▁▁▁▁▁▁▁▁▁▁", + "██████████▁▁▁▁▁▁▁▁▁▁", + "███████████▁▁▁▁▁▁▁▁▁", + "█████████████▁▁▁▁▁▁▁", + "██████████████▁▁▁▁▁▁", + "██████████████▁▁▁▁▁▁", + "▁██████████████▁▁▁▁▁", + "▁██████████████▁▁▁▁▁", + "▁██████████████▁▁▁▁▁", + "▁▁██████████████▁▁▁▁", + "▁▁▁██████████████▁▁▁", + "▁▁▁▁█████████████▁▁▁", + "▁▁▁▁██████████████▁▁", + "▁▁▁▁██████████████▁▁", + "▁▁▁▁▁██████████████▁", + "▁▁▁▁▁██████████████▁", + "▁▁▁▁▁██████████████▁", + "▁▁▁▁▁▁██████████████", + "▁▁▁▁▁▁██████████████", + "▁▁▁▁▁▁▁█████████████", + "▁▁▁▁▁▁▁█████████████", + "▁▁▁▁▁▁▁▁████████████", + "▁▁▁▁▁▁▁▁████████████", + "▁▁▁▁▁▁▁▁▁███████████", + "▁▁▁▁▁▁▁▁▁███████████", + "▁▁▁▁▁▁▁▁▁▁██████████", + "▁▁▁▁▁▁▁▁▁▁██████████", + "▁▁▁▁▁▁▁▁▁▁▁▁████████", + "▁▁▁▁▁▁▁▁▁▁▁▁▁███████", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁██████", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████", + "█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", + "██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", + "██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", + "███▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", + "████▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", + "█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", + "█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", + "██████▁▁▁▁▁▁▁▁▁▁▁▁▁█", + "████████▁▁▁▁▁▁▁▁▁▁▁▁", + "█████████▁▁▁▁▁▁▁▁▁▁▁", + "█████████▁▁▁▁▁▁▁▁▁▁▁", + "█████████▁▁▁▁▁▁▁▁▁▁▁", + "█████████▁▁▁▁▁▁▁▁▁▁▁", + "███████████▁▁▁▁▁▁▁▁▁", + "████████████▁▁▁▁▁▁▁▁", + "████████████▁▁▁▁▁▁▁▁", + "██████████████▁▁▁▁▁▁", + "██████████████▁▁▁▁▁▁", + "▁██████████████▁▁▁▁▁", + "▁██████████████▁▁▁▁▁", + "▁▁▁█████████████▁▁▁▁", + "▁▁▁▁▁████████████▁▁▁", + "▁▁▁▁▁████████████▁▁▁", + "▁▁▁▁▁▁███████████▁▁▁", + "▁▁▁▁▁▁▁▁█████████▁▁▁", + "▁▁▁▁▁▁▁▁█████████▁▁▁", + "▁▁▁▁▁▁▁▁▁█████████▁▁", + "▁▁▁▁▁▁▁▁▁█████████▁▁", + "▁▁▁▁▁▁▁▁▁▁█████████▁", + "▁▁▁▁▁▁▁▁▁▁▁████████▁", + "▁▁▁▁▁▁▁▁▁▁▁████████▁", + "▁▁▁▁▁▁▁▁▁▁▁▁███████▁", + "▁▁▁▁▁▁▁▁▁▁▁▁███████▁", + "▁▁▁▁▁▁▁▁▁▁▁▁▁███████", + "▁▁▁▁▁▁▁▁▁▁▁▁▁███████", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁" + ] +}; +var moon = { + interval: 80, + frames: [ + "🌑 ", + "🌒 ", + "🌓 ", + "🌔 ", + "🌕 ", + "🌖 ", + "🌗 ", + "🌘 " + ] +}; +var runner = { + interval: 140, + frames: [ + "🚶 ", + "🏃 " + ] +}; +var pong = { + interval: 80, + frames: [ + "▐⠂ ▌", + "▐⠈ ▌", + "▐ ⠂ ▌", + "▐ ⠠ ▌", + "▐ ⡀ ▌", + "▐ ⠠ ▌", + "▐ ⠂ ▌", + "▐ ⠈ ▌", + "▐ ⠂ ▌", + "▐ ⠠ ▌", + "▐ ⡀ ▌", + "▐ ⠠ ▌", + "▐ ⠂ ▌", + "▐ ⠈ ▌", + "▐ ⠂▌", + "▐ ⠠▌", + "▐ ⡀▌", + "▐ ⠠ ▌", + "▐ ⠂ ▌", + "▐ ⠈ ▌", + "▐ ⠂ ▌", + "▐ ⠠ ▌", + "▐ ⡀ ▌", + "▐ ⠠ ▌", + "▐ ⠂ ▌", + "▐ ⠈ ▌", + "▐ ⠂ ▌", + "▐ ⠠ ▌", + "▐ ⡀ ▌", + "▐⠠ ▌" + ] +}; +var shark = { + interval: 120, + frames: [ + "▐|\\____________▌", + "▐_|\\___________▌", + "▐__|\\__________▌", + "▐___|\\_________▌", + "▐____|\\________▌", + "▐_____|\\_______▌", + "▐______|\\______▌", + "▐_______|\\_____▌", + "▐________|\\____▌", + "▐_________|\\___▌", + "▐__________|\\__▌", + "▐___________|\\_▌", + "▐____________|\\▌", + "▐____________/|▌", + "▐___________/|_▌", + "▐__________/|__▌", + "▐_________/|___▌", + "▐________/|____▌", + "▐_______/|_____▌", + "▐______/|______▌", + "▐_____/|_______▌", + "▐____/|________▌", + "▐___/|_________▌", + "▐__/|__________▌", + "▐_/|___________▌", + "▐/|____________▌" + ] +}; +var dqpb = { + interval: 100, + frames: [ + "d", + "q", + "p", + "b" + ] +}; +var weather = { + interval: 100, + frames: [ + "☀️ ", + "☀️ ", + "☀️ ", + "🌤 ", + "⛅️ ", + "🌥 ", + "☁️ ", + "🌧 ", + "🌨 ", + "🌧 ", + "🌨 ", + "🌧 ", + "🌨 ", + "⛈ ", + "🌨 ", + "🌧 ", + "🌨 ", + "☁️ ", + "🌥 ", + "⛅️ ", + "🌤 ", + "☀️ ", + "☀️ " + ] +}; +var christmas = { + interval: 400, + frames: [ + "🌲", + "🎄" + ] +}; +var grenade = { + interval: 80, + frames: [ + "، ", + "′ ", + " ´ ", + " ‾ ", + " ⸌", + " ⸊", + " |", + " ⁎", + " ⁕", + " ෴ ", + " ⁓", + " ", + " ", + " " + ] +}; +var point = { + interval: 125, + frames: [ + "∙∙∙", + "●∙∙", + "∙●∙", + "∙∙●", + "∙∙∙" + ] +}; +var layer = { + interval: 150, + frames: [ + "-", + "=", + "≡" + ] +}; +var betaWave = { + interval: 80, + frames: [ + "ρββββββ", + "βρβββββ", + "ββρββββ", + "βββρβββ", + "ββββρββ", + "βββββρβ", + "ββββββρ" + ] +}; +var fingerDance = { + interval: 160, + frames: [ + "🤘 ", + "🤟 ", + "🖖 ", + "✋ ", + "🤚 ", + "👆 " + ] +}; +var fistBump = { + interval: 80, + frames: [ + "🤜    🤛 ", + "🤜    🤛 ", + "🤜    🤛 ", + " 🤜  🤛  ", + "  🤜🤛   ", + " 🤜✨🤛   ", + "🤜 ✨ 🤛  " + ] +}; +var soccerHeader = { + interval: 80, + frames: [ + " 🧑⚽️ 🧑 ", + "🧑 ⚽️ 🧑 ", + "🧑 ⚽️ 🧑 ", + "🧑 ⚽️ 🧑 ", + "🧑 ⚽️ 🧑 ", + "🧑 ⚽️ 🧑 ", + "🧑 ⚽️🧑 ", + "🧑 ⚽️ 🧑 ", + "🧑 ⚽️ 🧑 ", + "🧑 ⚽️ 🧑 ", + "🧑 ⚽️ 🧑 ", + "🧑 ⚽️ 🧑 " + ] +}; +var mindblown = { + interval: 160, + frames: [ + "😐 ", + "😐 ", + "😮 ", + "😮 ", + "😦 ", + "😦 ", + "😧 ", + "😧 ", + "🤯 ", + "💥 ", + "✨ ", + "  ", + "  ", + "  " + ] +}; +var speaker = { + interval: 160, + frames: [ + "🔈 ", + "🔉 ", + "🔊 ", + "🔉 " + ] +}; +var orangePulse = { + interval: 100, + frames: [ + "🔸 ", + "🔶 ", + "🟠 ", + "🟠 ", + "🔶 " + ] +}; +var bluePulse = { + interval: 100, + frames: [ + "🔹 ", + "🔷 ", + "🔵 ", + "🔵 ", + "🔷 " + ] +}; +var orangeBluePulse = { + interval: 100, + frames: [ + "🔸 ", + "🔶 ", + "🟠 ", + "🟠 ", + "🔶 ", + "🔹 ", + "🔷 ", + "🔵 ", + "🔵 ", + "🔷 " + ] +}; +var timeTravel = { + interval: 100, + frames: [ + "🕛 ", + "🕚 ", + "🕙 ", + "🕘 ", + "🕗 ", + "🕖 ", + "🕕 ", + "🕔 ", + "🕓 ", + "🕒 ", + "🕑 ", + "🕐 " + ] +}; +var aesthetic = { + interval: 80, + frames: [ + "▰▱▱▱▱▱▱", + "▰▰▱▱▱▱▱", + "▰▰▰▱▱▱▱", + "▰▰▰▰▱▱▱", + "▰▰▰▰▰▱▱", + "▰▰▰▰▰▰▱", + "▰▰▰▰▰▰▰", + "▰▱▱▱▱▱▱" + ] +}; +var dwarfFortress = { + interval: 80, + frames: [ + " ██████£££ ", + "☺██████£££ ", + "☺██████£££ ", + "☺▓█████£££ ", + "☺▓█████£££ ", + "☺▒█████£££ ", + "☺▒█████£££ ", + "☺░█████£££ ", + "☺░█████£££ ", + "☺ █████£££ ", + " ☺█████£££ ", + " ☺█████£££ ", + " ☺▓████£££ ", + " ☺▓████£££ ", + " ☺▒████£££ ", + " ☺▒████£££ ", + " ☺░████£££ ", + " ☺░████£££ ", + " ☺ ████£££ ", + " ☺████£££ ", + " ☺████£££ ", + " ☺▓███£££ ", + " ☺▓███£££ ", + " ☺▒███£££ ", + " ☺▒███£££ ", + " ☺░███£££ ", + " ☺░███£££ ", + " ☺ ███£££ ", + " ☺███£££ ", + " ☺███£££ ", + " ☺▓██£££ ", + " ☺▓██£££ ", + " ☺▒██£££ ", + " ☺▒██£££ ", + " ☺░██£££ ", + " ☺░██£££ ", + " ☺ ██£££ ", + " ☺██£££ ", + " ☺██£££ ", + " ☺▓█£££ ", + " ☺▓█£££ ", + " ☺▒█£££ ", + " ☺▒█£££ ", + " ☺░█£££ ", + " ☺░█£££ ", + " ☺ █£££ ", + " ☺█£££ ", + " ☺█£££ ", + " ☺▓£££ ", + " ☺▓£££ ", + " ☺▒£££ ", + " ☺▒£££ ", + " ☺░£££ ", + " ☺░£££ ", + " ☺ £££ ", + " ☺£££ ", + " ☺£££ ", + " ☺▓££ ", + " ☺▓££ ", + " ☺▒££ ", + " ☺▒££ ", + " ☺░££ ", + " ☺░££ ", + " ☺ ££ ", + " ☺££ ", + " ☺££ ", + " ☺▓£ ", + " ☺▓£ ", + " ☺▒£ ", + " ☺▒£ ", + " ☺░£ ", + " ☺░£ ", + " ☺ £ ", + " ☺£ ", + " ☺£ ", + " ☺▓ ", + " ☺▓ ", + " ☺▒ ", + " ☺▒ ", + " ☺░ ", + " ☺░ ", + " ☺ ", + " ☺ &", + " ☺ ☼&", + " ☺ ☼ &", + " ☺☼ &", + " ☺☼ & ", + " ‼ & ", + " ☺ & ", + " ‼ & ", + " ☺ & ", + " ‼ & ", + " ☺ & ", + "‼ & ", + " & ", + " & ", + " & ░ ", + " & ▒ ", + " & ▓ ", + " & £ ", + " & ░£ ", + " & ▒£ ", + " & ▓£ ", + " & ££ ", + " & ░££ ", + " & ▒££ ", + "& ▓££ ", + "& £££ ", + " ░£££ ", + " ▒£££ ", + " ▓£££ ", + " █£££ ", + " ░█£££ ", + " ▒█£££ ", + " ▓█£££ ", + " ██£££ ", + " ░██£££ ", + " ▒██£££ ", + " ▓██£££ ", + " ███£££ ", + " ░███£££ ", + " ▒███£££ ", + " ▓███£££ ", + " ████£££ ", + " ░████£££ ", + " ▒████£££ ", + " ▓████£££ ", + " █████£££ ", + " ░█████£££ ", + " ▒█████£££ ", + " ▓█████£££ ", + " ██████£££ ", + " ██████£££ " + ] +}; +var require$$0$1 = { + dots: dots, + dots2: dots2, + dots3: dots3, + dots4: dots4, + dots5: dots5, + dots6: dots6, + dots7: dots7, + dots8: dots8, + dots9: dots9, + dots10: dots10, + dots11: dots11, + dots12: dots12, + dots13: dots13, + dots8Bit: dots8Bit, + sand: sand, + line: line, + line2: line2, + pipe: pipe, + simpleDots: simpleDots, + simpleDotsScrolling: simpleDotsScrolling, + star: star, + star2: star2, + flip: flip, + hamburger: hamburger, + growVertical: growVertical, + growHorizontal: growHorizontal, + balloon: balloon, + balloon2: balloon2, + noise: noise, + bounce: bounce, + boxBounce: boxBounce, + boxBounce2: boxBounce2, + triangle: triangle, + binary: binary$1, + arc: arc, + circle: circle, + squareCorners: squareCorners, + circleQuarters: circleQuarters, + circleHalves: circleHalves, + squish: squish, + toggle: toggle, + toggle2: toggle2, + toggle3: toggle3, + toggle4: toggle4, + toggle5: toggle5, + toggle6: toggle6, + toggle7: toggle7, + toggle8: toggle8, + toggle9: toggle9, + toggle10: toggle10, + toggle11: toggle11, + toggle12: toggle12, + toggle13: toggle13, + arrow: arrow, + arrow2: arrow2, + arrow3: arrow3, + bouncingBar: bouncingBar, + bouncingBall: bouncingBall, + smiley: smiley, + monkey: monkey, + hearts: hearts, + clock: clock, + earth: earth, + material: material, + moon: moon, + runner: runner, + pong: pong, + shark: shark, + dqpb: dqpb, + weather: weather, + christmas: christmas, + grenade: grenade, + point: point, + layer: layer, + betaWave: betaWave, + fingerDance: fingerDance, + fistBump: fistBump, + soccerHeader: soccerHeader, + mindblown: mindblown, + speaker: speaker, + orangePulse: orangePulse, + bluePulse: bluePulse, + orangeBluePulse: orangeBluePulse, + timeTravel: timeTravel, + aesthetic: aesthetic, + dwarfFortress: dwarfFortress +}; + +const spinners = Object.assign({}, require$$0$1); // eslint-disable-line import/extensions + +const spinnersList = Object.keys(spinners); + +Object.defineProperty(spinners, 'random', { + get() { + const randomIndex = Math.floor(Math.random() * spinnersList.length); + const spinnerName = spinnersList[randomIndex]; + return spinners[spinnerName]; + } +}); + +var cliSpinners$1 = spinners; + +var isUnicodeSupported$2 = () => { + if (process.platform !== 'win32') { + return true; + } + + return Boolean(process.env.CI) || + Boolean(process.env.WT_SESSION) || // Windows Terminal + process.env.TERM_PROGRAM === 'vscode' || + process.env.TERM === 'xterm-256color' || + process.env.TERM === 'alacritty'; +}; + +const chalk$1 = source; +const isUnicodeSupported$1 = isUnicodeSupported$2; + +const main$1 = { + info: chalk$1.blue('ℹ'), + success: chalk$1.green('✔'), + warning: chalk$1.yellow('⚠'), + error: chalk$1.red('✖') +}; + +const fallback = { + info: chalk$1.blue('i'), + success: chalk$1.green('√'), + warning: chalk$1.yellow('‼'), + error: chalk$1.red('×') +}; + +var logSymbols$1 = isUnicodeSupported$1() ? main$1 : fallback; + +var wcwidth$2 = {exports: {}}; + +var clone$1 = {exports: {}}; + +(function (module) { + var clone = (function() { + + /** + * Clones (copies) an Object using deep copying. + * + * This function supports circular references by default, but if you are certain + * there are no circular references in your object, you can save some CPU time + * by calling clone(obj, false). + * + * Caution: if `circular` is false and `parent` contains circular references, + * your program may enter an infinite loop and crash. + * + * @param `parent` - the object to be cloned + * @param `circular` - set to true if the object to be cloned may contain + * circular references. (optional - true by default) + * @param `depth` - set to a number if the object is only to be cloned to + * a particular depth. (optional - defaults to Infinity) + * @param `prototype` - sets the prototype to be used when cloning an object. + * (optional - defaults to parent prototype). + */ + function clone(parent, circular, depth, prototype) { + if (typeof circular === 'object') { + depth = circular.depth; + prototype = circular.prototype; + circular.filter; + circular = circular.circular; + } + // maintain two arrays for circular references, where corresponding parents + // and children have the same index + var allParents = []; + var allChildren = []; + + var useBuffer = typeof Buffer != 'undefined'; + + if (typeof circular == 'undefined') + circular = true; + + if (typeof depth == 'undefined') + depth = Infinity; + + // recurse this function so we don't reset allParents and allChildren + function _clone(parent, depth) { + // cloning null always returns null + if (parent === null) + return null; + + if (depth == 0) + return parent; + + var child; + var proto; + if (typeof parent != 'object') { + return parent; + } + + if (clone.__isArray(parent)) { + child = []; + } else if (clone.__isRegExp(parent)) { + child = new RegExp(parent.source, __getRegExpFlags(parent)); + if (parent.lastIndex) child.lastIndex = parent.lastIndex; + } else if (clone.__isDate(parent)) { + child = new Date(parent.getTime()); + } else if (useBuffer && Buffer.isBuffer(parent)) { + if (Buffer.allocUnsafe) { + // Node.js >= 4.5.0 + child = Buffer.allocUnsafe(parent.length); + } else { + // Older Node.js versions + child = new Buffer(parent.length); + } + parent.copy(child); + return child; + } else { + if (typeof prototype == 'undefined') { + proto = Object.getPrototypeOf(parent); + child = Object.create(proto); + } + else { + child = Object.create(prototype); + proto = prototype; + } + } + + if (circular) { + var index = allParents.indexOf(parent); + + if (index != -1) { + return allChildren[index]; + } + allParents.push(parent); + allChildren.push(child); + } + + for (var i in parent) { + var attrs; + if (proto) { + attrs = Object.getOwnPropertyDescriptor(proto, i); + } + + if (attrs && attrs.set == null) { + continue; + } + child[i] = _clone(parent[i], depth - 1); + } + + return child; + } + + return _clone(parent, depth); + } + + /** + * Simple flat clone using prototype, accepts only objects, usefull for property + * override on FLAT configuration object (no nested props). + * + * USE WITH CAUTION! This may not behave as you wish if you do not know how this + * works. + */ + clone.clonePrototype = function clonePrototype(parent) { + if (parent === null) + return null; + + var c = function () {}; + c.prototype = parent; + return new c(); + }; + + // private utility functions + + function __objToStr(o) { + return Object.prototype.toString.call(o); + } clone.__objToStr = __objToStr; + + function __isDate(o) { + return typeof o === 'object' && __objToStr(o) === '[object Date]'; + } clone.__isDate = __isDate; + + function __isArray(o) { + return typeof o === 'object' && __objToStr(o) === '[object Array]'; + } clone.__isArray = __isArray; + + function __isRegExp(o) { + return typeof o === 'object' && __objToStr(o) === '[object RegExp]'; + } clone.__isRegExp = __isRegExp; + + function __getRegExpFlags(re) { + var flags = ''; + if (re.global) flags += 'g'; + if (re.ignoreCase) flags += 'i'; + if (re.multiline) flags += 'm'; + return flags; + } clone.__getRegExpFlags = __getRegExpFlags; + + return clone; + })(); + + if (module.exports) { + module.exports = clone; + } +} (clone$1)); + +var cloneExports = clone$1.exports; + +var clone = cloneExports; + +var defaults$1 = function(options, defaults) { + options = options || {}; + + Object.keys(defaults).forEach(function(key) { + if (typeof options[key] === 'undefined') { + options[key] = clone(defaults[key]); + } + }); + + return options; +}; + +var combining$1 = [ + [ 0x0300, 0x036F ], [ 0x0483, 0x0486 ], [ 0x0488, 0x0489 ], + [ 0x0591, 0x05BD ], [ 0x05BF, 0x05BF ], [ 0x05C1, 0x05C2 ], + [ 0x05C4, 0x05C5 ], [ 0x05C7, 0x05C7 ], [ 0x0600, 0x0603 ], + [ 0x0610, 0x0615 ], [ 0x064B, 0x065E ], [ 0x0670, 0x0670 ], + [ 0x06D6, 0x06E4 ], [ 0x06E7, 0x06E8 ], [ 0x06EA, 0x06ED ], + [ 0x070F, 0x070F ], [ 0x0711, 0x0711 ], [ 0x0730, 0x074A ], + [ 0x07A6, 0x07B0 ], [ 0x07EB, 0x07F3 ], [ 0x0901, 0x0902 ], + [ 0x093C, 0x093C ], [ 0x0941, 0x0948 ], [ 0x094D, 0x094D ], + [ 0x0951, 0x0954 ], [ 0x0962, 0x0963 ], [ 0x0981, 0x0981 ], + [ 0x09BC, 0x09BC ], [ 0x09C1, 0x09C4 ], [ 0x09CD, 0x09CD ], + [ 0x09E2, 0x09E3 ], [ 0x0A01, 0x0A02 ], [ 0x0A3C, 0x0A3C ], + [ 0x0A41, 0x0A42 ], [ 0x0A47, 0x0A48 ], [ 0x0A4B, 0x0A4D ], + [ 0x0A70, 0x0A71 ], [ 0x0A81, 0x0A82 ], [ 0x0ABC, 0x0ABC ], + [ 0x0AC1, 0x0AC5 ], [ 0x0AC7, 0x0AC8 ], [ 0x0ACD, 0x0ACD ], + [ 0x0AE2, 0x0AE3 ], [ 0x0B01, 0x0B01 ], [ 0x0B3C, 0x0B3C ], + [ 0x0B3F, 0x0B3F ], [ 0x0B41, 0x0B43 ], [ 0x0B4D, 0x0B4D ], + [ 0x0B56, 0x0B56 ], [ 0x0B82, 0x0B82 ], [ 0x0BC0, 0x0BC0 ], + [ 0x0BCD, 0x0BCD ], [ 0x0C3E, 0x0C40 ], [ 0x0C46, 0x0C48 ], + [ 0x0C4A, 0x0C4D ], [ 0x0C55, 0x0C56 ], [ 0x0CBC, 0x0CBC ], + [ 0x0CBF, 0x0CBF ], [ 0x0CC6, 0x0CC6 ], [ 0x0CCC, 0x0CCD ], + [ 0x0CE2, 0x0CE3 ], [ 0x0D41, 0x0D43 ], [ 0x0D4D, 0x0D4D ], + [ 0x0DCA, 0x0DCA ], [ 0x0DD2, 0x0DD4 ], [ 0x0DD6, 0x0DD6 ], + [ 0x0E31, 0x0E31 ], [ 0x0E34, 0x0E3A ], [ 0x0E47, 0x0E4E ], + [ 0x0EB1, 0x0EB1 ], [ 0x0EB4, 0x0EB9 ], [ 0x0EBB, 0x0EBC ], + [ 0x0EC8, 0x0ECD ], [ 0x0F18, 0x0F19 ], [ 0x0F35, 0x0F35 ], + [ 0x0F37, 0x0F37 ], [ 0x0F39, 0x0F39 ], [ 0x0F71, 0x0F7E ], + [ 0x0F80, 0x0F84 ], [ 0x0F86, 0x0F87 ], [ 0x0F90, 0x0F97 ], + [ 0x0F99, 0x0FBC ], [ 0x0FC6, 0x0FC6 ], [ 0x102D, 0x1030 ], + [ 0x1032, 0x1032 ], [ 0x1036, 0x1037 ], [ 0x1039, 0x1039 ], + [ 0x1058, 0x1059 ], [ 0x1160, 0x11FF ], [ 0x135F, 0x135F ], + [ 0x1712, 0x1714 ], [ 0x1732, 0x1734 ], [ 0x1752, 0x1753 ], + [ 0x1772, 0x1773 ], [ 0x17B4, 0x17B5 ], [ 0x17B7, 0x17BD ], + [ 0x17C6, 0x17C6 ], [ 0x17C9, 0x17D3 ], [ 0x17DD, 0x17DD ], + [ 0x180B, 0x180D ], [ 0x18A9, 0x18A9 ], [ 0x1920, 0x1922 ], + [ 0x1927, 0x1928 ], [ 0x1932, 0x1932 ], [ 0x1939, 0x193B ], + [ 0x1A17, 0x1A18 ], [ 0x1B00, 0x1B03 ], [ 0x1B34, 0x1B34 ], + [ 0x1B36, 0x1B3A ], [ 0x1B3C, 0x1B3C ], [ 0x1B42, 0x1B42 ], + [ 0x1B6B, 0x1B73 ], [ 0x1DC0, 0x1DCA ], [ 0x1DFE, 0x1DFF ], + [ 0x200B, 0x200F ], [ 0x202A, 0x202E ], [ 0x2060, 0x2063 ], + [ 0x206A, 0x206F ], [ 0x20D0, 0x20EF ], [ 0x302A, 0x302F ], + [ 0x3099, 0x309A ], [ 0xA806, 0xA806 ], [ 0xA80B, 0xA80B ], + [ 0xA825, 0xA826 ], [ 0xFB1E, 0xFB1E ], [ 0xFE00, 0xFE0F ], + [ 0xFE20, 0xFE23 ], [ 0xFEFF, 0xFEFF ], [ 0xFFF9, 0xFFFB ], + [ 0x10A01, 0x10A03 ], [ 0x10A05, 0x10A06 ], [ 0x10A0C, 0x10A0F ], + [ 0x10A38, 0x10A3A ], [ 0x10A3F, 0x10A3F ], [ 0x1D167, 0x1D169 ], + [ 0x1D173, 0x1D182 ], [ 0x1D185, 0x1D18B ], [ 0x1D1AA, 0x1D1AD ], + [ 0x1D242, 0x1D244 ], [ 0xE0001, 0xE0001 ], [ 0xE0020, 0xE007F ], + [ 0xE0100, 0xE01EF ] +]; + +var defaults = defaults$1; +var combining = combining$1; + +var DEFAULTS$1 = { + nul: 0, + control: 0 +}; + +wcwidth$2.exports = function wcwidth(str) { + return wcswidth(str, DEFAULTS$1) +}; + +wcwidth$2.exports.config = function(opts) { + opts = defaults(opts || {}, DEFAULTS$1); + return function wcwidth(str) { + return wcswidth(str, opts) + } +}; + +/* + * The following functions define the column width of an ISO 10646 + * character as follows: + * - The null character (U+0000) has a column width of 0. + * - Other C0/C1 control characters and DEL will lead to a return value + * of -1. + * - Non-spacing and enclosing combining characters (general category + * code Mn or Me in the + * Unicode database) have a column width of 0. + * - SOFT HYPHEN (U+00AD) has a column width of 1. + * - Other format characters (general category code Cf in the Unicode + * database) and ZERO WIDTH + * SPACE (U+200B) have a column width of 0. + * - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF) + * have a column width of 0. + * - Spacing characters in the East Asian Wide (W) or East Asian + * Full-width (F) category as + * defined in Unicode Technical Report #11 have a column width of 2. + * - All remaining characters (including all printable ISO 8859-1 and + * WGL4 characters, Unicode control characters, etc.) have a column + * width of 1. + * This implementation assumes that characters are encoded in ISO 10646. +*/ + +function wcswidth(str, opts) { + if (typeof str !== 'string') return wcwidth$1(str, opts) + + var s = 0; + for (var i = 0; i < str.length; i++) { + var n = wcwidth$1(str.charCodeAt(i), opts); + if (n < 0) return -1 + s += n; + } + + return s +} + +function wcwidth$1(ucs, opts) { + // test for 8-bit control characters + if (ucs === 0) return opts.nul + if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0)) return opts.control + + // binary search in table of non-spacing characters + if (bisearch(ucs)) return 0 + + // if we arrive here, ucs is not a combining or C0/C1 control character + return 1 + + (ucs >= 0x1100 && + (ucs <= 0x115f || // Hangul Jamo init. consonants + ucs == 0x2329 || ucs == 0x232a || + (ucs >= 0x2e80 && ucs <= 0xa4cf && + ucs != 0x303f) || // CJK ... Yi + (ucs >= 0xac00 && ucs <= 0xd7a3) || // Hangul Syllables + (ucs >= 0xf900 && ucs <= 0xfaff) || // CJK Compatibility Ideographs + (ucs >= 0xfe10 && ucs <= 0xfe19) || // Vertical forms + (ucs >= 0xfe30 && ucs <= 0xfe6f) || // CJK Compatibility Forms + (ucs >= 0xff00 && ucs <= 0xff60) || // Fullwidth Forms + (ucs >= 0xffe0 && ucs <= 0xffe6) || + (ucs >= 0x20000 && ucs <= 0x2fffd) || + (ucs >= 0x30000 && ucs <= 0x3fffd))); +} + +function bisearch(ucs) { + var min = 0; + var max = combining.length - 1; + var mid; + + if (ucs < combining[0][0] || ucs > combining[max][1]) return false + + while (max >= min) { + mid = Math.floor((min + max) / 2); + if (ucs > combining[mid][1]) min = mid + 1; + else if (ucs < combining[mid][0]) max = mid - 1; + else return true + } + + return false +} + +var wcwidthExports = wcwidth$2.exports; + +var isInteractive$1 = ({stream = process.stdout} = {}) => { + return Boolean( + stream && stream.isTTY && + process.env.TERM !== 'dumb' && + !('CI' in process.env) + ); +}; + +var bl = {exports: {}}; + +var inherits$1 = {exports: {}}; + +var inherits_browser = {exports: {}}; + +var hasRequiredInherits_browser; + +function requireInherits_browser () { + if (hasRequiredInherits_browser) return inherits_browser.exports; + hasRequiredInherits_browser = 1; + if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + inherits_browser.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor; + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + } + }; + } else { + // old school shim for old browsers + inherits_browser.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } + }; + } + return inherits_browser.exports; +} + +try { + var util = require('util'); + /* istanbul ignore next */ + if (typeof util.inherits !== 'function') throw ''; + inherits$1.exports = util.inherits; +} catch (e) { + /* istanbul ignore next */ + inherits$1.exports = requireInherits_browser(); +} + +var inheritsExports = inherits$1.exports; + +const { Buffer: Buffer$2 } = require$$0$4; +const symbol = Symbol.for('BufferList'); + +function BufferList$1 (buf) { + if (!(this instanceof BufferList$1)) { + return new BufferList$1(buf) + } + + BufferList$1._init.call(this, buf); +} + +BufferList$1._init = function _init (buf) { + Object.defineProperty(this, symbol, { value: true }); + + this._bufs = []; + this.length = 0; + + if (buf) { + this.append(buf); + } +}; + +BufferList$1.prototype._new = function _new (buf) { + return new BufferList$1(buf) +}; + +BufferList$1.prototype._offset = function _offset (offset) { + if (offset === 0) { + return [0, 0] + } + + let tot = 0; + + for (let i = 0; i < this._bufs.length; i++) { + const _t = tot + this._bufs[i].length; + if (offset < _t || i === this._bufs.length - 1) { + return [i, offset - tot] + } + tot = _t; + } +}; + +BufferList$1.prototype._reverseOffset = function (blOffset) { + const bufferId = blOffset[0]; + let offset = blOffset[1]; + + for (let i = 0; i < bufferId; i++) { + offset += this._bufs[i].length; + } + + return offset +}; + +BufferList$1.prototype.get = function get (index) { + if (index > this.length || index < 0) { + return undefined + } + + const offset = this._offset(index); + + return this._bufs[offset[0]][offset[1]] +}; + +BufferList$1.prototype.slice = function slice (start, end) { + if (typeof start === 'number' && start < 0) { + start += this.length; + } + + if (typeof end === 'number' && end < 0) { + end += this.length; + } + + return this.copy(null, 0, start, end) +}; + +BufferList$1.prototype.copy = function copy (dst, dstStart, srcStart, srcEnd) { + if (typeof srcStart !== 'number' || srcStart < 0) { + srcStart = 0; + } + + if (typeof srcEnd !== 'number' || srcEnd > this.length) { + srcEnd = this.length; + } + + if (srcStart >= this.length) { + return dst || Buffer$2.alloc(0) + } + + if (srcEnd <= 0) { + return dst || Buffer$2.alloc(0) + } + + const copy = !!dst; + const off = this._offset(srcStart); + const len = srcEnd - srcStart; + let bytes = len; + let bufoff = (copy && dstStart) || 0; + let start = off[1]; + + // copy/slice everything + if (srcStart === 0 && srcEnd === this.length) { + if (!copy) { + // slice, but full concat if multiple buffers + return this._bufs.length === 1 + ? this._bufs[0] + : Buffer$2.concat(this._bufs, this.length) + } + + // copy, need to copy individual buffers + for (let i = 0; i < this._bufs.length; i++) { + this._bufs[i].copy(dst, bufoff); + bufoff += this._bufs[i].length; + } + + return dst + } + + // easy, cheap case where it's a subset of one of the buffers + if (bytes <= this._bufs[off[0]].length - start) { + return copy + ? this._bufs[off[0]].copy(dst, dstStart, start, start + bytes) + : this._bufs[off[0]].slice(start, start + bytes) + } + + if (!copy) { + // a slice, we need something to copy in to + dst = Buffer$2.allocUnsafe(len); + } + + for (let i = off[0]; i < this._bufs.length; i++) { + const l = this._bufs[i].length - start; + + if (bytes > l) { + this._bufs[i].copy(dst, bufoff, start); + bufoff += l; + } else { + this._bufs[i].copy(dst, bufoff, start, start + bytes); + bufoff += l; + break + } + + bytes -= l; + + if (start) { + start = 0; + } + } + + // safeguard so that we don't return uninitialized memory + if (dst.length > bufoff) return dst.slice(0, bufoff) + + return dst +}; + +BufferList$1.prototype.shallowSlice = function shallowSlice (start, end) { + start = start || 0; + end = typeof end !== 'number' ? this.length : end; + + if (start < 0) { + start += this.length; + } + + if (end < 0) { + end += this.length; + } + + if (start === end) { + return this._new() + } + + const startOffset = this._offset(start); + const endOffset = this._offset(end); + const buffers = this._bufs.slice(startOffset[0], endOffset[0] + 1); + + if (endOffset[1] === 0) { + buffers.pop(); + } else { + buffers[buffers.length - 1] = buffers[buffers.length - 1].slice(0, endOffset[1]); + } + + if (startOffset[1] !== 0) { + buffers[0] = buffers[0].slice(startOffset[1]); + } + + return this._new(buffers) +}; + +BufferList$1.prototype.toString = function toString (encoding, start, end) { + return this.slice(start, end).toString(encoding) +}; + +BufferList$1.prototype.consume = function consume (bytes) { + // first, normalize the argument, in accordance with how Buffer does it + bytes = Math.trunc(bytes); + // do nothing if not a positive number + if (Number.isNaN(bytes) || bytes <= 0) return this + + while (this._bufs.length) { + if (bytes >= this._bufs[0].length) { + bytes -= this._bufs[0].length; + this.length -= this._bufs[0].length; + this._bufs.shift(); + } else { + this._bufs[0] = this._bufs[0].slice(bytes); + this.length -= bytes; + break + } + } + + return this +}; + +BufferList$1.prototype.duplicate = function duplicate () { + const copy = this._new(); + + for (let i = 0; i < this._bufs.length; i++) { + copy.append(this._bufs[i]); + } + + return copy +}; + +BufferList$1.prototype.append = function append (buf) { + if (buf == null) { + return this + } + + if (buf.buffer) { + // append a view of the underlying ArrayBuffer + this._appendBuffer(Buffer$2.from(buf.buffer, buf.byteOffset, buf.byteLength)); + } else if (Array.isArray(buf)) { + for (let i = 0; i < buf.length; i++) { + this.append(buf[i]); + } + } else if (this._isBufferList(buf)) { + // unwrap argument into individual BufferLists + for (let i = 0; i < buf._bufs.length; i++) { + this.append(buf._bufs[i]); + } + } else { + // coerce number arguments to strings, since Buffer(number) does + // uninitialized memory allocation + if (typeof buf === 'number') { + buf = buf.toString(); + } + + this._appendBuffer(Buffer$2.from(buf)); + } + + return this +}; + +BufferList$1.prototype._appendBuffer = function appendBuffer (buf) { + this._bufs.push(buf); + this.length += buf.length; +}; + +BufferList$1.prototype.indexOf = function (search, offset, encoding) { + if (encoding === undefined && typeof offset === 'string') { + encoding = offset; + offset = undefined; + } + + if (typeof search === 'function' || Array.isArray(search)) { + throw new TypeError('The "value" argument must be one of type string, Buffer, BufferList, or Uint8Array.') + } else if (typeof search === 'number') { + search = Buffer$2.from([search]); + } else if (typeof search === 'string') { + search = Buffer$2.from(search, encoding); + } else if (this._isBufferList(search)) { + search = search.slice(); + } else if (Array.isArray(search.buffer)) { + search = Buffer$2.from(search.buffer, search.byteOffset, search.byteLength); + } else if (!Buffer$2.isBuffer(search)) { + search = Buffer$2.from(search); + } + + offset = Number(offset || 0); + + if (isNaN(offset)) { + offset = 0; + } + + if (offset < 0) { + offset = this.length + offset; + } + + if (offset < 0) { + offset = 0; + } + + if (search.length === 0) { + return offset > this.length ? this.length : offset + } + + const blOffset = this._offset(offset); + let blIndex = blOffset[0]; // index of which internal buffer we're working on + let buffOffset = blOffset[1]; // offset of the internal buffer we're working on + + // scan over each buffer + for (; blIndex < this._bufs.length; blIndex++) { + const buff = this._bufs[blIndex]; + + while (buffOffset < buff.length) { + const availableWindow = buff.length - buffOffset; + + if (availableWindow >= search.length) { + const nativeSearchResult = buff.indexOf(search, buffOffset); + + if (nativeSearchResult !== -1) { + return this._reverseOffset([blIndex, nativeSearchResult]) + } + + buffOffset = buff.length - search.length + 1; // end of native search window + } else { + const revOffset = this._reverseOffset([blIndex, buffOffset]); + + if (this._match(revOffset, search)) { + return revOffset + } + + buffOffset++; + } + } + + buffOffset = 0; + } + + return -1 +}; + +BufferList$1.prototype._match = function (offset, search) { + if (this.length - offset < search.length) { + return false + } + + for (let searchOffset = 0; searchOffset < search.length; searchOffset++) { + if (this.get(offset + searchOffset) !== search[searchOffset]) { + return false + } + } + return true +} + +;(function () { + const methods = { + readDoubleBE: 8, + readDoubleLE: 8, + readFloatBE: 4, + readFloatLE: 4, + readInt32BE: 4, + readInt32LE: 4, + readUInt32BE: 4, + readUInt32LE: 4, + readInt16BE: 2, + readInt16LE: 2, + readUInt16BE: 2, + readUInt16LE: 2, + readInt8: 1, + readUInt8: 1, + readIntBE: null, + readIntLE: null, + readUIntBE: null, + readUIntLE: null + }; + + for (const m in methods) { + (function (m) { + if (methods[m] === null) { + BufferList$1.prototype[m] = function (offset, byteLength) { + return this.slice(offset, offset + byteLength)[m](0, byteLength) + }; + } else { + BufferList$1.prototype[m] = function (offset = 0) { + return this.slice(offset, offset + methods[m])[m](0) + }; + } + }(m)); + } +}()); + +// Used internally by the class and also as an indicator of this object being +// a `BufferList`. It's not possible to use `instanceof BufferList` in a browser +// environment because there could be multiple different copies of the +// BufferList class and some `BufferList`s might be `BufferList`s. +BufferList$1.prototype._isBufferList = function _isBufferList (b) { + return b instanceof BufferList$1 || BufferList$1.isBufferList(b) +}; + +BufferList$1.isBufferList = function isBufferList (b) { + return b != null && b[symbol] +}; + +var BufferList_1 = BufferList$1; + +const DuplexStream = require$$1$2.Duplex; +const inherits = inheritsExports; +const BufferList = BufferList_1; + +function BufferListStream$1 (callback) { + if (!(this instanceof BufferListStream$1)) { + return new BufferListStream$1(callback) + } + + if (typeof callback === 'function') { + this._callback = callback; + + const piper = function piper (err) { + if (this._callback) { + this._callback(err); + this._callback = null; + } + }.bind(this); + + this.on('pipe', function onPipe (src) { + src.on('error', piper); + }); + this.on('unpipe', function onUnpipe (src) { + src.removeListener('error', piper); + }); + + callback = null; + } + + BufferList._init.call(this, callback); + DuplexStream.call(this); +} + +inherits(BufferListStream$1, DuplexStream); +Object.assign(BufferListStream$1.prototype, BufferList.prototype); + +BufferListStream$1.prototype._new = function _new (callback) { + return new BufferListStream$1(callback) +}; + +BufferListStream$1.prototype._write = function _write (buf, encoding, callback) { + this._appendBuffer(buf); + + if (typeof callback === 'function') { + callback(); + } +}; + +BufferListStream$1.prototype._read = function _read (size) { + if (!this.length) { + return this.push(null) + } + + size = Math.min(size, this.length); + this.push(this.slice(0, size)); + this.consume(size); +}; + +BufferListStream$1.prototype.end = function end (chunk) { + DuplexStream.prototype.end.call(this, chunk); + + if (this._callback) { + this._callback(null, this.slice()); + this._callback = null; + } +}; + +BufferListStream$1.prototype._destroy = function _destroy (err, cb) { + this._bufs.length = 0; + this.length = 0; + cb(err); +}; + +BufferListStream$1.prototype._isBufferList = function _isBufferList (b) { + return b instanceof BufferListStream$1 || b instanceof BufferList || BufferListStream$1.isBufferList(b) +}; + +BufferListStream$1.isBufferList = BufferList.isBufferList; + +bl.exports = BufferListStream$1; +bl.exports.BufferListStream = BufferListStream$1; +bl.exports.BufferList = BufferList; + +var blExports = bl.exports; + +const readline = require$$0$5; +const chalk = source; +const cliCursor = cliCursor$1; +const cliSpinners = cliSpinners$1; +const logSymbols = logSymbols$1; +const stripAnsi = stripAnsi$3; +const wcwidth = wcwidthExports; +const isInteractive = isInteractive$1; +const isUnicodeSupported = isUnicodeSupported$2; +const {BufferListStream} = blExports; + +const TEXT = Symbol('text'); +const PREFIX_TEXT = Symbol('prefixText'); +const ASCII_ETX_CODE = 0x03; // Ctrl+C emits this code + +class StdinDiscarder { + constructor() { + this.requests = 0; + + this.mutedStream = new BufferListStream(); + this.mutedStream.pipe(process.stdout); + + const self = this; // eslint-disable-line unicorn/no-this-assignment + this.ourEmit = function (event, data, ...args) { + const {stdin} = process; + if (self.requests > 0 || stdin.emit === self.ourEmit) { + if (event === 'keypress') { // Fixes readline behavior + return; + } + + if (event === 'data' && data.includes(ASCII_ETX_CODE)) { + process.emit('SIGINT'); + } + + Reflect.apply(self.oldEmit, this, [event, data, ...args]); + } else { + Reflect.apply(process.stdin.emit, this, [event, data, ...args]); + } + }; + } + + start() { + this.requests++; + + if (this.requests === 1) { + this.realStart(); + } + } + + stop() { + if (this.requests <= 0) { + throw new Error('`stop` called more times than `start`'); + } + + this.requests--; + + if (this.requests === 0) { + this.realStop(); + } + } + + realStart() { + // No known way to make it work reliably on Windows + if (process.platform === 'win32') { + return; + } + + this.rl = readline.createInterface({ + input: process.stdin, + output: this.mutedStream + }); + + this.rl.on('SIGINT', () => { + if (process.listenerCount('SIGINT') === 0) { + process.emit('SIGINT'); + } else { + this.rl.close(); + process.kill(process.pid, 'SIGINT'); + } + }); + } + + realStop() { + if (process.platform === 'win32') { + return; + } + + this.rl.close(); + this.rl = undefined; + } +} + +let stdinDiscarder; + +class Ora { + constructor(options) { + if (!stdinDiscarder) { + stdinDiscarder = new StdinDiscarder(); + } + + if (typeof options === 'string') { + options = { + text: options + }; + } + + this.options = { + text: '', + color: 'cyan', + stream: process.stderr, + discardStdin: true, + ...options + }; + + this.spinner = this.options.spinner; + + this.color = this.options.color; + this.hideCursor = this.options.hideCursor !== false; + this.interval = this.options.interval || this.spinner.interval || 100; + this.stream = this.options.stream; + this.id = undefined; + this.isEnabled = typeof this.options.isEnabled === 'boolean' ? this.options.isEnabled : isInteractive({stream: this.stream}); + this.isSilent = typeof this.options.isSilent === 'boolean' ? this.options.isSilent : false; + + // Set *after* `this.stream` + this.text = this.options.text; + this.prefixText = this.options.prefixText; + this.linesToClear = 0; + this.indent = this.options.indent; + this.discardStdin = this.options.discardStdin; + this.isDiscardingStdin = false; + } + + get indent() { + return this._indent; + } + + set indent(indent = 0) { + if (!(indent >= 0 && Number.isInteger(indent))) { + throw new Error('The `indent` option must be an integer from 0 and up'); + } + + this._indent = indent; + } + + _updateInterval(interval) { + if (interval !== undefined) { + this.interval = interval; + } + } + + get spinner() { + return this._spinner; + } + + set spinner(spinner) { + this.frameIndex = 0; + + if (typeof spinner === 'object') { + if (spinner.frames === undefined) { + throw new Error('The given spinner must have a `frames` property'); + } + + this._spinner = spinner; + } else if (!isUnicodeSupported()) { + this._spinner = cliSpinners.line; + } else if (spinner === undefined) { + // Set default spinner + this._spinner = cliSpinners.dots; + } else if (spinner !== 'default' && cliSpinners[spinner]) { + this._spinner = cliSpinners[spinner]; + } else { + throw new Error(`There is no built-in spinner named '${spinner}'. See https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json for a full list.`); + } + + this._updateInterval(this._spinner.interval); + } + + get text() { + return this[TEXT]; + } + + set text(value) { + this[TEXT] = value; + this.updateLineCount(); + } + + get prefixText() { + return this[PREFIX_TEXT]; + } + + set prefixText(value) { + this[PREFIX_TEXT] = value; + this.updateLineCount(); + } + + get isSpinning() { + return this.id !== undefined; + } + + getFullPrefixText(prefixText = this[PREFIX_TEXT], postfix = ' ') { + if (typeof prefixText === 'string') { + return prefixText + postfix; + } + + if (typeof prefixText === 'function') { + return prefixText() + postfix; + } + + return ''; + } + + updateLineCount() { + const columns = this.stream.columns || 80; + const fullPrefixText = this.getFullPrefixText(this.prefixText, '-'); + this.lineCount = 0; + for (const line of stripAnsi(fullPrefixText + '--' + this[TEXT]).split('\n')) { + this.lineCount += Math.max(1, Math.ceil(wcwidth(line) / columns)); + } + } + + get isEnabled() { + return this._isEnabled && !this.isSilent; + } + + set isEnabled(value) { + if (typeof value !== 'boolean') { + throw new TypeError('The `isEnabled` option must be a boolean'); + } + + this._isEnabled = value; + } + + get isSilent() { + return this._isSilent; + } + + set isSilent(value) { + if (typeof value !== 'boolean') { + throw new TypeError('The `isSilent` option must be a boolean'); + } + + this._isSilent = value; + } + + frame() { + const {frames} = this.spinner; + let frame = frames[this.frameIndex]; + + if (this.color) { + frame = chalk[this.color](frame); + } + + this.frameIndex = ++this.frameIndex % frames.length; + const fullPrefixText = (typeof this.prefixText === 'string' && this.prefixText !== '') ? this.prefixText + ' ' : ''; + const fullText = typeof this.text === 'string' ? ' ' + this.text : ''; + + return fullPrefixText + frame + fullText; + } + + clear() { + if (!this.isEnabled || !this.stream.isTTY) { + return this; + } + + for (let i = 0; i < this.linesToClear; i++) { + if (i > 0) { + this.stream.moveCursor(0, -1); + } + + this.stream.clearLine(); + this.stream.cursorTo(this.indent); + } + + this.linesToClear = 0; + + return this; + } + + render() { + if (this.isSilent) { + return this; + } + + this.clear(); + this.stream.write(this.frame()); + this.linesToClear = this.lineCount; + + return this; + } + + start(text) { + if (text) { + this.text = text; + } + + if (this.isSilent) { + return this; + } + + if (!this.isEnabled) { + if (this.text) { + this.stream.write(`- ${this.text}\n`); + } + + return this; + } + + if (this.isSpinning) { + return this; + } + + if (this.hideCursor) { + cliCursor.hide(this.stream); + } + + if (this.discardStdin && process.stdin.isTTY) { + this.isDiscardingStdin = true; + stdinDiscarder.start(); + } + + this.render(); + this.id = setInterval(this.render.bind(this), this.interval); + + return this; + } + + stop() { + if (!this.isEnabled) { + return this; + } + + clearInterval(this.id); + this.id = undefined; + this.frameIndex = 0; + this.clear(); + if (this.hideCursor) { + cliCursor.show(this.stream); + } + + if (this.discardStdin && process.stdin.isTTY && this.isDiscardingStdin) { + stdinDiscarder.stop(); + this.isDiscardingStdin = false; + } + + return this; + } + + succeed(text) { + return this.stopAndPersist({symbol: logSymbols.success, text}); + } + + fail(text) { + return this.stopAndPersist({symbol: logSymbols.error, text}); + } + + warn(text) { + return this.stopAndPersist({symbol: logSymbols.warning, text}); + } + + info(text) { + return this.stopAndPersist({symbol: logSymbols.info, text}); + } + + stopAndPersist(options = {}) { + if (this.isSilent) { + return this; + } + + const prefixText = options.prefixText || this.prefixText; + const text = options.text || this.text; + const fullText = (typeof text === 'string') ? ' ' + text : ''; + + this.stop(); + this.stream.write(`${this.getFullPrefixText(prefixText, ' ')}${options.symbol || ' '}${fullText}\n`); + + return this; + } +} + +const oraFactory = function (options) { + return new Ora(options); +}; + +ora$1.exports = oraFactory; + +ora$1.exports.promise = (action, options) => { + // eslint-disable-next-line promise/prefer-await-to-then + if (typeof action.then !== 'function') { + throw new TypeError('Parameter `action` must be a Promise'); + } + + const spinner = new Ora(options); + spinner.start(); + + (async () => { + try { + await action; + spinner.succeed(); + } catch { + spinner.fail(); + } + })(); + + return spinner; +}; + +var oraExports = ora$1.exports; +var ora = /*@__PURE__*/getDefaultExportFromCjs(oraExports); + +/** + * Move cursor left by `x` + * @param {Readline} rl - Readline instance + * @param {Number} x - How far to go left (default to 1) + */ + +const left = function (rl, x) { + rl.output.write(ansiEscapes.cursorBackward(x)); +}; + +/** + * Move cursor right by `x` + * @param {Readline} rl - Readline instance + * @param {Number} x - How far to go left (default to 1) + */ + +const right = function (rl, x) { + rl.output.write(ansiEscapes.cursorForward(x)); +}; + +/** + * Move cursor up by `x` + * @param {Readline} rl - Readline instance + * @param {Number} x - How far to go up (default to 1) + */ + +const up = function (rl, x) { + rl.output.write(ansiEscapes.cursorUp(x)); +}; + +/** + * Move cursor down by `x` + * @param {Readline} rl - Readline instance + * @param {Number} x - How far to go down (default to 1) + */ + +const down = function (rl, x) { + rl.output.write(ansiEscapes.cursorDown(x)); +}; + +/** + * Clear current line + * @param {Readline} rl - Readline instance + * @param {Number} len - number of line to delete + */ +const clearLine = function (rl, len) { + rl.output.write(ansiEscapes.eraseLines(len)); +}; + +function height(content) { + return content.split('\n').length; +} + +/** @param {string} content */ +function lastLine(content) { + return content.split('\n').pop(); +} + +class ScreenManager { + constructor(rl) { + // These variables are keeping information to allow correct prompt re-rendering + this.height = 0; + this.extraLinesUnderPrompt = 0; + + this.rl = rl; + } + + renderWithSpinner(content, bottomContent) { + if (this.spinnerId) { + clearInterval(this.spinnerId); + } + + let spinner; + let contentFunc; + let bottomContentFunc; + + if (bottomContent) { + spinner = ora(bottomContent); + contentFunc = () => content; + bottomContentFunc = () => spinner.frame(); + } else { + spinner = ora(content); + contentFunc = () => spinner.frame(); + bottomContentFunc = () => ''; + } + + this.spinnerId = setInterval( + () => this.render(contentFunc(), bottomContentFunc(), true), + spinner.interval, + ); + } + + render(content, bottomContent, spinning = false) { + if (this.spinnerId && !spinning) { + clearInterval(this.spinnerId); + } + + this.rl.output.unmute(); + this.clean(this.extraLinesUnderPrompt); + + /** + * Write message to screen and setPrompt to control backspace + */ + + const promptLine = lastLine(content); + const rawPromptLine = stripAnsi$4(promptLine); + + // Remove the rl.line from our prompt. We can't rely on the content of + // rl.line (mainly because of the password prompt), so just rely on it's + // length. + let prompt = rawPromptLine; + if (this.rl.line.length > 0) { + prompt = prompt.slice(0, -this.rl.line.length); + } + + this.rl.setPrompt(prompt); + + // SetPrompt will change cursor position, now we can get correct value + const cursorPos = this.rl._getCursorPos(); + const width = this.normalizedCliWidth(); + + content = this.forceLineReturn(content, width); + bottomContent &&= this.forceLineReturn(bottomContent, width); + + // Manually insert an extra line if we're at the end of the line. + // This prevent the cursor from appearing at the beginning of the + // current line. + if (rawPromptLine.length % width === 0) { + content += '\n'; + } + + const fullContent = content + (bottomContent ? '\n' + bottomContent : ''); + this.rl.output.write(fullContent); + + /** + * Re-adjust the cursor at the correct position. + */ + + // We need to consider parts of the prompt under the cursor as part of the bottom + // content in order to correctly cleanup and re-render. + const promptLineUpDiff = Math.floor(rawPromptLine.length / width) - cursorPos.rows; + const bottomContentHeight = + promptLineUpDiff + (bottomContent ? height(bottomContent) : 0); + if (bottomContentHeight > 0) { + up(this.rl, bottomContentHeight); + } + + // Reset cursor at the beginning of the line + left(this.rl, stringWidth$2(lastLine(fullContent))); + + // Adjust cursor on the right + if (cursorPos.cols > 0) { + right(this.rl, cursorPos.cols); + } + + /** + * Set up state for next re-rendering + */ + this.extraLinesUnderPrompt = bottomContentHeight; + this.height = height(fullContent); + + this.rl.output.mute(); + } + + clean(extraLines) { + if (extraLines > 0) { + down(this.rl, extraLines); + } + + clearLine(this.rl, this.height); + } + + done() { + this.rl.setPrompt(''); + this.rl.output.unmute(); + this.rl.output.write(`\n${ansiEscapes.cursorShow}`); + } + + releaseCursor() { + if (this.extraLinesUnderPrompt > 0) { + down(this.rl, this.extraLinesUnderPrompt); + } + } + + normalizedCliWidth() { + const width = cliWidth$1({ + defaultWidth: 80, + output: this.rl.output, + }); + return width; + } + + /** + * @param {string[]} lines + */ + breakLines(lines, width = this.normalizedCliWidth()) { + // Break lines who're longer than the cli width so we can normalize the natural line + // returns behavior across terminals. + // re: trim: false; by default, `wrap-ansi` trims whitespace, which + // is not what we want. + // re: hard: true; by default', `wrap-ansi` does soft wrapping + return lines.map((line) => + wrapAnsi$1(line, width, { trim: false, hard: true }).split('\n'), + ); + } + + /** + * @param {string} content + */ + forceLineReturn(content, width = this.normalizedCliWidth()) { + return this.breakLines(content.split('\n'), width).flat().join('\n'); + } +} + +/** + * Base prompt implementation + * Should be extended by prompt types. + */ + +class Prompt { + constructor(question, rl, answers) { + // Setup instance defaults property + Object.assign(this, { + answers, + status: 'pending', + }); + + // Set defaults prompt options + this.opt = { + validate: () => true, + validatingText: '', + filter: (val) => val, + filteringText: '', + when: () => true, + suffix: '', + prefix: colors$1.green('?'), + transformer: (val) => val, + ...question, + }; + + // Make sure name is present + if (!this.opt.name) { + this.throwParamError('name'); + } + + // Set default message if no message defined + this.opt.message ||= this.opt.name + ':'; + + // Normalize choices + if (Array.isArray(this.opt.choices)) { + this.opt.choices = new Choices(this.opt.choices, answers); + } + + this.rl = rl; + this.screen = new ScreenManager(this.rl); + } + + /** + * Start the Inquiry session and manage output value filtering + * @return {Promise} + */ + + run() { + return new Promise((resolve, reject) => { + this._run( + (value) => resolve(value), + (error) => reject(error), + ); + }); + } + + // Default noop (this one should be overwritten in prompts) + _run(cb) { + cb(); + } + + /** + * Throw an error telling a required parameter is missing + * @param {String} name Name of the missing param + * @return {Throw Error} + */ + + throwParamError(name) { + throw new Error('You must provide a `' + name + '` parameter'); + } + + /** + * Called when the UI closes. Override to do any specific cleanup necessary + */ + close() { + this.screen.releaseCursor(); + } + + /** + * Run the provided validation method each time a submit event occur. + * @param {Rx.Observable} submit - submit event flow + * @return {Object} Object containing two observables: `success` and `error` + */ + handleSubmitEvents(submit) { + const validate = runAsync$1(this.opt.validate); + const asyncFilter = runAsync$1(this.opt.filter); + const validation = submit.pipe( + cjs.mergeMap((value) => { + this.startSpinner(value, this.opt.filteringText); + return asyncFilter(value, this.answers).then( + (filteredValue) => { + this.startSpinner(filteredValue, this.opt.validatingText); + return validate(filteredValue, this.answers).then( + (isValid) => ({ isValid, value: filteredValue }), + (error_) => ({ isValid: error_, value: filteredValue }), + ); + }, + (error_) => ({ isValid: error_ }), + ); + }), + cjs.share(), + ); + + const success = validation.pipe( + cjs.filter((state) => state.isValid === true), + cjs.take(1), + ); + const error = validation.pipe( + cjs.filter((state) => state.isValid !== true), + cjs.takeUntil(success), + ); + + return { + success, + error, + }; + } + + startSpinner(value, bottomContent) { + value = this.getSpinningValue(value); + // If the question will spin, cut off the prefix (for layout purposes) + const content = bottomContent + ? this.getQuestion() + value + : this.getQuestion().slice(this.opt.prefix.length + 1) + value; + + this.screen.renderWithSpinner(content, bottomContent); + } + + /** + * Allow override, e.g. for password prompts + * See: https://github.com/SBoudrias/Inquirer.js/issues/1022 + * + * @return {String} value to display while spinning + */ + getSpinningValue(value) { + return value; + } + + /** + * Generate the prompt question string + * @return {String} prompt question string + */ + getQuestion() { + let message = + (this.opt.prefix ? this.opt.prefix + ' ' : '') + + colors$1.bold(this.opt.message) + + this.opt.suffix + + colors$1.reset(' '); + + // Append the default if available, and if question isn't touched/answered + if ( + this.opt.default != null && + this.status !== 'touched' && + this.status !== 'answered' + ) { + // If default password is supplied, hide it + message += + this.opt.type === 'password' + ? colors$1.italic(colors$1.dim('[hidden] ')) + : colors$1.dim('(' + this.opt.default + ') '); + } + + return message; + } +} + +/** + * `list` type prompt + */ + + +class ListPrompt extends Prompt { + constructor(questions, rl, answers) { + super(questions, rl, answers); + + if (!this.opt.choices) { + this.throwParamError('choices'); + } + + this.firstRender = true; + this.selected = 0; + + const def = this.opt.default; + + // If def is a Number, then use as index. Otherwise, check for value. + if (typeof def === 'number' && def >= 0 && def < this.opt.choices.realLength) { + this.selected = def; + } else if (typeof def !== 'number' && def != null) { + const index = this.opt.choices.realChoices.findIndex(({ value }) => value === def); + this.selected = Math.max(index, 0); + } + + // Make sure no default is set (so it won't be printed) + this.opt.default = null; + + const shouldLoop = this.opt.loop === undefined ? true : this.opt.loop; + this.paginator = new Paginator(this.screen, { isInfinite: shouldLoop }); + } + + /** + * Start the Inquiry session + * @param {Function} cb Callback when prompt is done + * @return {this} + */ + + _run(cb) { + this.done = cb; + + const events = observe(this.rl); + events.normalizedUpKey.pipe(cjs.takeUntil(events.line)).forEach(this.onUpKey.bind(this)); + events.normalizedDownKey + .pipe(cjs.takeUntil(events.line)) + .forEach(this.onDownKey.bind(this)); + events.numberKey.pipe(cjs.takeUntil(events.line)).forEach(this.onNumberKey.bind(this)); + events.line + .pipe( + cjs.take(1), + cjs.map(this.getCurrentValue.bind(this)), + cjs.flatMap((value) => + runAsync$1(this.opt.filter)(value, this.answers).catch((error) => error), + ), + ) + .forEach(this.onSubmit.bind(this)); + + // Init the prompt + this.render(); + + return this; + } + + /** + * Render the prompt to screen + * @return {ListPrompt} self + */ + + render() { + // Render question + let message = this.getQuestion(); + + if (this.firstRender) { + message += colors$1.dim('(Use arrow keys)'); + } + + // Render choices or answer depending on the state + if (this.status === 'answered') { + message += colors$1.cyan(this.opt.choices.getChoice(this.selected).short); + } else { + const choicesStr = listRender(this.opt.choices, this.selected); + const indexPosition = this.opt.choices.indexOf( + this.opt.choices.getChoice(this.selected), + ); + const realIndexPosition = + this.opt.choices.reduce((acc, value, i) => { + // Dont count lines past the choice we are looking at + if (i > indexPosition) { + return acc; + } + // Add line if it's a separator + if (value.type === 'separator') { + return acc + 1; + } + + let l = value.name; + // Non-strings take up one line + if (typeof l !== 'string') { + return acc + 1; + } + + // Calculate lines taken up by string + l = l.split('\n'); + return acc + l.length; + }, 0) - 1; + message += + '\n' + this.paginator.paginate(choicesStr, realIndexPosition, this.opt.pageSize); + } + + message += ansiEscapes.cursorHide; + this.firstRender = false; + + this.screen.render(message); + } + + /** + * When user press `enter` key + */ + + onSubmit(value) { + this.status = 'answered'; + + // Rerender prompt + this.render(); + + this.screen.done(); + this.done(value); + } + + getCurrentValue() { + return this.opt.choices.getChoice(this.selected).value; + } + + /** + * When user press a key + */ + onUpKey() { + this.selected = incrementListIndex(this.selected, 'up', this.opt); + this.render(); + } + + onDownKey() { + this.selected = incrementListIndex(this.selected, 'down', this.opt); + this.render(); + } + + onNumberKey(input) { + if (input <= this.opt.choices.realLength) { + this.selected = input - 1; + } + + this.render(); + } +} + +/** + * Function for rendering list choices + * @param {Number} pointer Position of the pointer + * @return {String} Rendered content + */ +function listRender(choices, pointer) { + let output = ''; + let separatorOffset = 0; + + choices.forEach((choice, i) => { + if (choice.type === 'separator') { + separatorOffset++; + output += ' ' + choice + '\n'; + return; + } + + if (choice.disabled) { + separatorOffset++; + output += ' - ' + choice.name; + output += ` (${ + typeof choice.disabled === 'string' ? choice.disabled : 'Disabled' + })`; + output += '\n'; + return; + } + + const isSelected = i - separatorOffset === pointer; + let line = (isSelected ? figures.pointer + ' ' : ' ') + choice.name; + if (isSelected) { + line = colors$1.cyan(line); + } + + output += line + ' \n'; + }); + + return output.replaceAll(/\n$/g, ''); +} + +/** + * `input` type prompt + */ + + +class InputPrompt extends Prompt { + /** + * Start the Inquiry session + * @param {Function} cb Callback when prompt is done + * @return {this} + */ + + _run(cb) { + this.done = cb; + + // Once user confirm (enter key) + const events = observe(this.rl); + const submit = events.line.pipe(cjs.map(this.filterInput.bind(this))); + + const validation = this.handleSubmitEvents(submit); + validation.success.forEach(this.onEnd.bind(this)); + validation.error.forEach(this.onError.bind(this)); + + events.keypress + .pipe(cjs.takeUntil(validation.success)) + .forEach(this.onKeypress.bind(this)); + + // Init + this.render(); + + return this; + } + + /** + * Render the prompt to screen + * @return {InputPrompt} self + */ + + render(error) { + let bottomContent = ''; + let appendContent = ''; + let message = this.getQuestion(); + const { transformer } = this.opt; + const isFinal = this.status === 'answered'; + + appendContent = isFinal ? this.answer : this.rl.line; + + if (transformer) { + message += transformer(appendContent, this.answers, { isFinal }); + } else { + message += isFinal ? colors$1.cyan(appendContent) : appendContent; + } + + if (error) { + bottomContent = colors$1.red('>> ') + error; + } + + this.screen.render(message, bottomContent); + } + + /** + * When user press `enter` key + */ + + filterInput(input) { + if (!input) { + return this.opt.default == null ? '' : this.opt.default; + } + + return input; + } + + onEnd(state) { + this.answer = state.value; + this.status = 'answered'; + + // Re-render prompt + this.render(); + + this.screen.done(); + this.done(state.value); + } + + onError({ value = '', isValid }) { + this.rl.line += value; + this.rl.cursor += value.length; + this.render(isValid); + } + + /** + * When user press a key + */ + + onKeypress() { + this.status = 'touched'; + + this.render(); + } +} + +/** + * `input` type prompt + */ + + +/** + * Extention of the Input prompt specifically for use with number inputs. + */ + +class NumberPrompt extends InputPrompt { + filterInput(input) { + if (input && typeof input === 'string') { + input = input.trim(); + // Match a number in the input + const numberMatch = input.match(/(^-?\d+|^-?\d+\.\d*|^\d*\.\d+)(e\d+)?$/); + // If a number is found, return that input. + if (numberMatch) { + return Number(numberMatch[0]); + } + } + + // If the input was invalid return the default value. + return this.opt.default == null ? Number.NaN : this.opt.default; + } +} + +/** + * `confirm` type prompt + */ + + +class ConfirmPrompt extends Prompt { + constructor(questions, rl, answers) { + super(questions, rl, answers); + + let rawDefault = true; + + Object.assign(this.opt, { + filter(input) { + if (input != null && input !== '') { + if (/^y(es)?/i.test(input)) return true; + if (/^n(o)?/i.test(input)) return false; + } + return rawDefault; + }, + }); + + if (this.opt.default != null) { + rawDefault = Boolean(this.opt.default); + } + + this.opt.default = rawDefault ? 'Y/n' : 'y/N'; + } + + /** + * Start the Inquiry session + * @param {Function} cb Callback when prompt is done + * @return {this} + */ + + _run(cb) { + this.done = cb; + + // Once user confirm (enter key) + const events = observe(this.rl); + events.keypress.pipe(cjs.takeUntil(events.line)).forEach(this.onKeypress.bind(this)); + + events.line.pipe(cjs.take(1)).forEach(this.onEnd.bind(this)); + + // Init + this.render(); + + return this; + } + + /** + * Render the prompt to screen + * @return {ConfirmPrompt} self + */ + + render(answer) { + let message = this.getQuestion(); + + if (typeof answer === 'boolean') { + message += colors$1.cyan(answer ? 'Yes' : 'No'); + } else if (answer) { + message += answer; + } else { + message += this.rl.line; + } + + this.screen.render(message); + + return this; + } + + /** + * When user press `enter` key + */ + + onEnd(input) { + this.status = 'answered'; + + let output = this.opt.filter(input); + if (this.opt.transformer) { + output = this.opt.transformer(output); + } + this.render(output); + + this.screen.done(); + this.done(output); + } + + /** + * When user press a key + */ + + onKeypress() { + this.render(); + } +} + +/** + * `rawlist` type prompt + */ + + +class RawListPrompt extends Prompt { + constructor(questions, rl, answers) { + super(questions, rl, answers); + + this.hiddenLine = ''; + this.lastKey = ''; + + if (!this.opt.choices) { + this.throwParamError('choices'); + } + + this.opt.validChoices = this.opt.choices.filter(Separator.exclude); + + this.selected = 0; + this.rawDefault = 0; + + Object.assign(this.opt, { + validate(val) { + return val != null; + }, + }); + + const def = this.opt.default; + if (typeof def === 'number' && def >= 0 && def < this.opt.choices.realLength) { + this.selected = def; + this.rawDefault = def; + } else if (typeof def !== 'number' && def != null) { + const index = this.opt.choices.realChoices.findIndex(({ value }) => value === def); + const safeIndex = Math.max(index, 0); + this.selected = safeIndex; + this.rawDefault = safeIndex; + } + + // Make sure no default is set (so it won't be printed) + this.opt.default = null; + + const shouldLoop = this.opt.loop === undefined ? true : this.opt.loop; + this.paginator = new Paginator(undefined, { isInfinite: shouldLoop }); + } + + /** + * Start the Inquiry session + * @param {Function} cb Callback when prompt is done + * @return {this} + */ + + _run(cb) { + this.done = cb; + + // Once user confirm (enter key) + const events = observe(this.rl); + const submit = events.line.pipe(cjs.map(this.getCurrentValue.bind(this))); + + const validation = this.handleSubmitEvents(submit); + validation.success.forEach(this.onEnd.bind(this)); + validation.error.forEach(this.onError.bind(this)); + + events.normalizedUpKey + .pipe(cjs.takeUntil(validation.success)) + .forEach(this.onUpKey.bind(this)); + events.normalizedDownKey + .pipe(cjs.takeUntil(validation.success)) + .forEach(this.onDownKey.bind(this)); + events.keypress + .pipe(cjs.takeUntil(validation.success)) + .forEach(this.onKeypress.bind(this)); + // Init the prompt + this.render(); + + return this; + } + + /** + * Render the prompt to screen + * @return {RawListPrompt} self + */ + + render(error) { + // Render question + let message = this.getQuestion(); + let bottomContent = ''; + + if (this.status === 'answered') { + message += colors$1.cyan(this.opt.choices.getChoice(this.selected).short); + } else { + const choicesStr = renderChoices$2(this.opt.choices, this.selected); + message += + '\n' + this.paginator.paginate(choicesStr, this.selected, this.opt.pageSize); + message += '\n Answer: '; + } + message += this.rl.line; + + if (error) { + bottomContent = '\n' + colors$1.red('>> ') + error; + } + + this.screen.render(message, bottomContent); + } + + /** + * When user press `enter` key + */ + + getCurrentValue(index) { + if (index == null) { + index = this.rawDefault; + } else if (index === '') { + this.selected = this.selected === undefined ? -1 : this.selected; + index = this.selected; + } else { + index -= 1; + } + + const choice = this.opt.choices.getChoice(index); + return choice ? choice.value : null; + } + + onEnd(state) { + this.status = 'answered'; + this.answer = state.value; + + // Re-render prompt + this.render(); + + this.screen.done(); + this.done(state.value); + } + + onError() { + this.render('Please enter a valid index'); + } + + /** + * When user press a key + */ + + onKeypress() { + let index; + + if (this.lastKey === 'arrow') { + index = this.hiddenLine.length > 0 ? Number(this.hiddenLine) - 1 : 0; + } else { + index = this.rl.line.length > 0 ? Number(this.rl.line) - 1 : 0; + } + this.lastKey = ''; + + this.selected = this.opt.choices.getChoice(index) ? index : undefined; + this.render(); + } + + /** + * When user press up key + */ + + onUpKey() { + this.onArrowKey('up'); + } + + /** + * When user press down key + */ + + onDownKey() { + this.onArrowKey('down'); + } + + /** + * When user press up or down key + * @param {String} type Arrow type: up or down + */ + + onArrowKey(type) { + this.selected = incrementListIndex(this.selected, type, this.opt) || 0; + this.hiddenLine = String(this.selected + 1); + this.rl.line = ''; + this.lastKey = 'arrow'; + } +} + +/** + * Function for rendering list choices + * @param {Number} pointer Position of the pointer + * @return {String} Rendered content + */ + +function renderChoices$2(choices, pointer) { + let output = ''; + let separatorOffset = 0; + + choices.forEach((choice, i) => { + output += output ? '\n ' : ' '; + + if (choice.type === 'separator') { + separatorOffset++; + output += ' ' + choice; + return; + } + + const index = i - separatorOffset; + let display = index + 1 + ') ' + choice.name; + if (index === pointer) { + display = colors$1.cyan(display); + } + + output += display; + }); + + return output; +} + +/** + * `rawlist` type prompt + */ + + +class ExpandPrompt extends Prompt { + constructor(questions, rl, answers) { + super(questions, rl, answers); + + if (!this.opt.choices) { + this.throwParamError('choices'); + } + + this.validateChoices(this.opt.choices); + + // Add the default `help` (/expand) option + this.opt.choices.push({ + key: 'h', + name: 'Help, list all options', + value: 'help', + }); + + this.opt.validate = (choice) => { + if (choice == null) { + return 'Please enter a valid command'; + } + + return choice !== 'help'; + }; + + // Setup the default string (capitalize the default key) + this.opt.default = this.generateChoicesString(this.opt.choices, this.opt.default); + + this.paginator = new Paginator(this.screen); + } + + /** + * Start the Inquiry session + * @param {Function} cb Callback when prompt is done + * @return {this} + */ + + _run(cb) { + this.done = cb; + + // Save user answer and update prompt to show selected option. + const events = observe(this.rl); + const validation = this.handleSubmitEvents( + events.line.pipe(cjs.map(this.getCurrentValue.bind(this))), + ); + validation.success.forEach(this.onSubmit.bind(this)); + validation.error.forEach(this.onError.bind(this)); + this.keypressObs = events.keypress + .pipe(cjs.takeUntil(validation.success)) + .forEach(this.onKeypress.bind(this)); + + // Init the prompt + this.render(); + + return this; + } + + /** + * Render the prompt to screen + * @return {ExpandPrompt} self + */ + + render(error, hint) { + let message = this.getQuestion(); + let bottomContent = ''; + + if (this.status === 'answered') { + message += colors$1.cyan(this.answer); + } else if (this.status === 'expanded') { + const choicesStr = renderChoices$1(this.opt.choices, this.selectedKey); + message += this.paginator.paginate(choicesStr, this.selectedKey, this.opt.pageSize); + message += '\n Answer: '; + } + + message += this.rl.line; + + if (error) { + bottomContent = colors$1.red('>> ') + error; + } + + if (hint) { + bottomContent = colors$1.cyan('>> ') + hint; + } + + this.screen.render(message, bottomContent); + } + + getCurrentValue(input) { + input ||= this.rawDefault; + + const selected = this.opt.choices.where({ key: input.toLowerCase().trim() })[0]; + if (!selected) { + return null; + } + + return selected.value; + } + + /** + * Generate the prompt choices string + * @return {String} Choices string + */ + + getChoices() { + let output = ''; + + this.opt.choices.forEach((choice) => { + output += '\n '; + + if (choice.type === 'separator') { + output += ' ' + choice; + return; + } + + let choiceStr = choice.key + ') ' + choice.name; + if (this.selectedKey === choice.key) { + choiceStr = colors$1.cyan(choiceStr); + } + + output += choiceStr; + }); + + return output; + } + + onError(state) { + if (state.value === 'help') { + this.selectedKey = ''; + this.status = 'expanded'; + this.render(); + return; + } + + this.render(state.isValid); + } + + /** + * When user press `enter` key + */ + + onSubmit(state) { + this.status = 'answered'; + const choice = this.opt.choices.where({ value: state.value })[0]; + this.answer = choice.short || choice.name; + + // Re-render prompt + this.render(); + this.screen.done(); + this.done(state.value); + } + + /** + * When user press a key + */ + + onKeypress() { + this.selectedKey = this.rl.line.toLowerCase(); + const selected = this.opt.choices.where({ key: this.selectedKey })[0]; + if (this.status === 'expanded') { + this.render(); + } else { + this.render(null, selected ? selected.name : null); + } + } + + /** + * Validate the choices + * @param {Array} choices + */ + + validateChoices(choices) { + let formatError; + const errors = []; + const keymap = {}; + choices.filter(Separator.exclude).forEach((choice) => { + if (!choice.key || choice.key.length !== 1) { + formatError = true; + } + + choice.key = String(choice.key).toLowerCase(); + + if (keymap[choice.key]) { + errors.push(choice.key); + } + + keymap[choice.key] = true; + }); + + if (formatError) { + throw new Error( + 'Format error: `key` param must be a single letter and is required.', + ); + } + + if (keymap.h) { + throw new Error( + 'Reserved key error: `key` param cannot be `h` - this value is reserved.', + ); + } + + if (errors.length > 0) { + throw new Error( + 'Duplicate key error: `key` param must be unique. Duplicates: ' + + [...new Set(errors)].join(','), + ); + } + } + + /** + * Generate a string out of the choices keys + * @param {Array} choices + * @param {Number|String} default - the choice index or name to capitalize + * @return {String} The rendered choices key string + */ + generateChoicesString(choices, defaultChoice) { + let defIndex = choices.realLength - 1; + if (typeof defaultChoice === 'number' && this.opt.choices.getChoice(defaultChoice)) { + defIndex = defaultChoice; + } else if (typeof defaultChoice === 'string') { + const index = choices.realChoices.findIndex(({ value }) => value === defaultChoice); + defIndex = index === -1 ? defIndex : index; + } + + const defStr = this.opt.choices.pluck('key'); + this.rawDefault = defStr[defIndex]; + defStr[defIndex] = String(defStr[defIndex]).toUpperCase(); + return defStr.join(''); + } +} + +/** + * Function for rendering checkbox choices + * @param {String} pointer Selected key + * @return {String} Rendered content + */ + +function renderChoices$1(choices, pointer) { + let output = ''; + + choices.forEach((choice) => { + output += '\n '; + + if (choice.type === 'separator') { + output += ' ' + choice; + return; + } + + let choiceStr = choice.key + ') ' + choice.name; + if (pointer === choice.key) { + choiceStr = colors$1.cyan(choiceStr); + } + + output += choiceStr; + }); + + return output; +} + +/** + * `list` type prompt + */ + + +class CheckboxPrompt extends Prompt { + constructor(questions, rl, answers) { + super(questions, rl, answers); + + if (!this.opt.choices) { + this.throwParamError('choices'); + } + + if (Array.isArray(this.opt.default)) { + for (const choice of this.opt.choices) { + if (this.opt.default.includes(choice.value)) { + choice.checked = true; + } + } + } + + this.pointer = 0; + + // Make sure no default is set (so it won't be printed) + this.opt.default = null; + + const shouldLoop = this.opt.loop === undefined ? true : this.opt.loop; + this.paginator = new Paginator(this.screen, { isInfinite: shouldLoop }); + } + + /** + * Start the Inquiry session + * @param {Function} cb Callback when prompt is done + * @return {this} + */ + + _run(cb) { + this.done = cb; + + const events = observe(this.rl); + + const validation = this.handleSubmitEvents( + events.line.pipe(cjs.map(this.getCurrentValue.bind(this))), + ); + validation.success.forEach(this.onEnd.bind(this)); + validation.error.forEach(this.onError.bind(this)); + + events.normalizedUpKey + .pipe(cjs.takeUntil(validation.success)) + .forEach(this.onUpKey.bind(this)); + events.normalizedDownKey + .pipe(cjs.takeUntil(validation.success)) + .forEach(this.onDownKey.bind(this)); + events.numberKey + .pipe(cjs.takeUntil(validation.success)) + .forEach(this.onNumberKey.bind(this)); + events.spaceKey + .pipe(cjs.takeUntil(validation.success)) + .forEach(this.onSpaceKey.bind(this)); + events.aKey.pipe(cjs.takeUntil(validation.success)).forEach(this.onAllKey.bind(this)); + events.iKey.pipe(cjs.takeUntil(validation.success)).forEach(this.onInverseKey.bind(this)); + + // Init the prompt + this.render(); + this.firstRender = false; + + return this; + } + + /** + * Render the prompt to screen + * @return {CheckboxPrompt} self + */ + + render(error) { + // Render question + let message = this.getQuestion(); + let bottomContent = ''; + + if (!this.dontShowHints) { + message += + '(Press ' + + colors$1.cyan(colors$1.bold('')) + + ' to select, ' + + colors$1.cyan(colors$1.bold('')) + + ' to toggle all, ' + + colors$1.cyan(colors$1.bold('')) + + ' to invert selection, and ' + + colors$1.cyan(colors$1.bold('')) + + ' to proceed)'; + } + + // Render choices or answer depending on the state + if (this.status === 'answered') { + message += colors$1.cyan(this.selection.join(', ')); + } else { + const choicesStr = renderChoices(this.opt.choices, this.pointer); + const indexPosition = this.opt.choices.indexOf( + this.opt.choices.getChoice(this.pointer), + ); + const realIndexPosition = + this.opt.choices.reduce((acc, value, i) => { + // Dont count lines past the choice we are looking at + if (i > indexPosition) { + return acc; + } + // Add line if it's a separator + if (value.type === 'separator') { + return acc + 1; + } + + let l = value.name; + // Non-strings take up one line + if (typeof l !== 'string') { + return acc + 1; + } + + // Calculate lines taken up by string + l = l.split('\n'); + return acc + l.length; + }, 0) - 1; + message += + '\n' + this.paginator.paginate(choicesStr, realIndexPosition, this.opt.pageSize); + } + + if (error) { + bottomContent = colors$1.red('>> ') + error; + } + + message += ansiEscapes.cursorHide; + + this.screen.render(message, bottomContent); + } + + /** + * When user press `enter` key + */ + + onEnd(state) { + this.status = 'answered'; + this.dontShowHints = true; + // Rerender prompt (and clean subline error) + this.render(); + + this.screen.done(); + this.done(state.value); + } + + onError(state) { + this.render(state.isValid); + } + + getCurrentValue() { + const choices = this.opt.choices.filter( + (choice) => Boolean(choice.checked) && !choice.disabled, + ); + + this.selection = choices.map((choice) => choice.short); + return choices.map((choice) => choice.value); + } + + onUpKey() { + this.pointer = incrementListIndex(this.pointer, 'up', this.opt); + this.render(); + } + + onDownKey() { + this.pointer = incrementListIndex(this.pointer, 'down', this.opt); + this.render(); + } + + onNumberKey(input) { + if (input <= this.opt.choices.realLength) { + this.pointer = input - 1; + this.toggleChoice(this.pointer); + } + + this.render(); + } + + onSpaceKey() { + this.toggleChoice(this.pointer); + this.render(); + } + + onAllKey() { + const shouldBeChecked = this.opt.choices.some( + (choice) => choice.type !== 'separator' && !choice.checked, + ); + + this.opt.choices.forEach((choice) => { + if (choice.type !== 'separator') { + choice.checked = shouldBeChecked; + } + }); + + this.render(); + } + + onInverseKey() { + this.opt.choices.forEach((choice) => { + if (choice.type !== 'separator') { + choice.checked = !choice.checked; + } + }); + + this.render(); + } + + toggleChoice(index) { + const item = this.opt.choices.getChoice(index); + if (item !== undefined) { + this.opt.choices.getChoice(index).checked = !item.checked; + } + } +} + +/** + * Function for rendering checkbox choices + * @param {Number} pointer Position of the pointer + * @return {String} Rendered content + */ + +function renderChoices(choices, pointer) { + let output = ''; + let separatorOffset = 0; + + choices.forEach((choice, i) => { + if (choice.type === 'separator') { + separatorOffset++; + output += ' ' + choice + '\n'; + return; + } + + if (choice.disabled) { + separatorOffset++; + output += ' - ' + choice.name; + output += ` (${ + typeof choice.disabled === 'string' ? choice.disabled : 'Disabled' + })`; + } else { + const line = getCheckbox(choice.checked) + ' ' + choice.name; + output += + i - separatorOffset === pointer + ? colors$1.cyan(figures.pointer + line) + : ' ' + line; + } + + output += '\n'; + }); + + return output.replaceAll(/\n$/g, ''); +} + +/** + * Get the checkbox + * @param {Boolean} checked - add a X or not to the checkbox + * @return {String} Composited checkbox string + */ + +function getCheckbox(checked) { + return checked ? colors$1.green(figures.radioOn) : figures.radioOff; +} + +/** + * `password` type prompt + */ + + +function mask(input, maskChar) { + input = String(input); + maskChar = typeof maskChar === 'string' ? maskChar : '*'; + if (input.length === 0) { + return ''; + } + + return Array.from({ length: input.length + 1 }).join(maskChar); +} + +class PasswordPrompt extends Prompt { + /** + * Start the Inquiry session + * @param {Function} cb Callback when prompt is done + * @return {this} + */ + + _run(cb) { + this.done = cb; + + const events = observe(this.rl); + + // Once user confirm (enter key) + const submit = events.line.pipe(cjs.map(this.filterInput.bind(this))); + + const validation = this.handleSubmitEvents(submit); + validation.success.forEach(this.onEnd.bind(this)); + validation.error.forEach(this.onError.bind(this)); + + events.keypress + .pipe(cjs.takeUntil(validation.success)) + .forEach(this.onKeypress.bind(this)); + + // Init + this.render(); + + return this; + } + + /** + * Render the prompt to screen + * @return {PasswordPrompt} self + */ + + render(error) { + let message = this.getQuestion(); + let bottomContent = ''; + + message += + this.status === 'answered' + ? this.getMaskedValue(this.answer) + : this.getMaskedValue(this.rl.line || ''); + + if (error) { + bottomContent = '\n' + colors$1.red('>> ') + error; + } + + this.screen.render(message, bottomContent); + } + + getMaskedValue(value) { + if (this.status === 'answered') { + return this.opt.mask + ? colors$1.cyan(mask(value, this.opt.mask)) + : colors$1.italic(colors$1.dim('[hidden]')); + } + return this.opt.mask + ? mask(value, this.opt.mask) + : colors$1.italic(colors$1.dim('[input is hidden] ')); + } + + /** + * Mask value during async filter/validation. + */ + getSpinningValue(value) { + return this.getMaskedValue(value); + } + + /** + * When user press `enter` key + */ + + filterInput(input) { + if (!input) { + return this.opt.default == null ? '' : this.opt.default; + } + + return input; + } + + onEnd(state) { + this.status = 'answered'; + this.answer = state.value; + + // Re-render prompt + this.render(); + + this.screen.done(); + this.done(state.value); + } + + onError(state) { + this.render(state.isValid); + } + + onKeypress() { + // If user press a key, just clear the default value + this.opt.default &&= undefined; + + this.render(); + } +} + +var main = {}; + +var chardet = {}; + +var match = function(det, rec, confidence, name, lang) { + this.confidence = confidence; + this.name = name || rec.name(det); + this.lang = lang; +}; + +var Match = match; + +/** + * Charset recognizer for UTF-8 + */ +var utf8$1 = function() { + this.name = function() { + return 'UTF-8'; + }; + this.match = function(det) { + + var hasBOM = false, + numValid = 0, + numInvalid = 0, + input = det.fRawInput, + trailBytes = 0, + confidence; + + if (det.fRawLength >= 3 && + (input[0] & 0xff) == 0xef && (input[1] & 0xff) == 0xbb && (input[2] & 0xff) == 0xbf) { + hasBOM = true; + } + + // Scan for multi-byte sequences + for (var i = 0; i < det.fRawLength; i++) { + var b = input[i]; + if ((b & 0x80) == 0) + continue; // ASCII + + // Hi bit on char found. Figure out how long the sequence should be + if ((b & 0x0e0) == 0x0c0) { + trailBytes = 1; + } else if ((b & 0x0f0) == 0x0e0) { + trailBytes = 2; + } else if ((b & 0x0f8) == 0xf0) { + trailBytes = 3; + } else { + numInvalid++; + if (numInvalid > 5) + break; + trailBytes = 0; + } + + // Verify that we've got the right number of trail bytes in the sequence + for (;;) { + i++; + if (i >= det.fRawLength) + break; + + if ((input[i] & 0xc0) != 0x080) { + numInvalid++; + break; + } + if (--trailBytes == 0) { + numValid++; + break; + } + } + } + + // Cook up some sort of confidence score, based on presense of a BOM + // and the existence of valid and/or invalid multi-byte sequences. + confidence = 0; + if (hasBOM && numInvalid == 0) + confidence = 100; + else if (hasBOM && numValid > numInvalid * 10) + confidence = 80; + else if (numValid > 3 && numInvalid == 0) + confidence = 100; + else if (numValid > 0 && numInvalid == 0) + confidence = 80; + else if (numValid == 0 && numInvalid == 0) + // Plain ASCII. + confidence = 10; + else if (numValid > numInvalid * 10) + // Probably corruput utf-8 data. Valid sequences aren't likely by chance. + confidence = 25; + else + return null + + return new Match(det, this, confidence); + }; +}; + +var unicode$1 = {exports: {}}; + +(function (module) { + var util = require$$0$3, + Match = match; + + /** + * This class matches UTF-16 and UTF-32, both big- and little-endian. The + * BOM will be used if it is present. + */ + module.exports.UTF_16BE = function() { + this.name = function() { + return 'UTF-16BE'; + }; + this.match = function(det) { + var input = det.fRawInput; + + if (input.length >= 2 && ((input[0] & 0xff) == 0xfe && (input[1] & 0xff) == 0xff)) { + return new Match(det, this, 100); // confidence = 100 + } + + // TODO: Do some statistics to check for unsigned UTF-16BE + return null; + }; + }; + + module.exports.UTF_16LE = function() { + this.name = function() { + return 'UTF-16LE'; + }; + this.match = function(det) { + var input = det.fRawInput; + + if (input.length >= 2 && ((input[0] & 0xff) == 0xff && (input[1] & 0xff) == 0xfe)) { + // LE BOM is present. + if (input.length >= 4 && input[2] == 0x00 && input[3] == 0x00) { + // It is probably UTF-32 LE, not UTF-16 + return null; + } + return new Match(det, this, 100); // confidence = 100 + } + + // TODO: Do some statistics to check for unsigned UTF-16LE + return null; + }; + }; + + function UTF_32() {} UTF_32.prototype.match = function(det) { + var input = det.fRawInput, + limit = (det.fRawLength / 4) * 4, + numValid = 0, + numInvalid = 0, + hasBOM = false, + confidence = 0; + + if (limit == 0) { + return null; + } + + if (this.getChar(input, 0) == 0x0000FEFF) { + hasBOM = true; + } + + for (var i = 0; i < limit; i += 4) { + var ch = this.getChar(input, i); + + if (ch < 0 || ch >= 0x10FFFF || (ch >= 0xD800 && ch <= 0xDFFF)) { + numInvalid += 1; + } else { + numValid += 1; + } + } + + // Cook up some sort of confidence score, based on presence of a BOM + // and the existence of valid and/or invalid multi-byte sequences. + if (hasBOM && numInvalid == 0) { + confidence = 100; + } else if (hasBOM && numValid > numInvalid * 10) { + confidence = 80; + } else if (numValid > 3 && numInvalid == 0) { + confidence = 100; + } else if (numValid > 0 && numInvalid == 0) { + confidence = 80; + } else if (numValid > numInvalid * 10) { + // Probably corrupt UTF-32BE data. Valid sequences aren't likely by chance. + confidence = 25; + } + + // return confidence == 0 ? null : new CharsetMatch(det, this, confidence); + return confidence == 0 ? null : new Match(det, this, confidence); + }; + + module.exports.UTF_32BE = function() { + this.name = function() { + return 'UTF-32BE'; + }; + this.getChar = function(input, index) { + return (input[index + 0] & 0xff) << 24 | (input[index + 1] & 0xff) << 16 | + (input[index + 2] & 0xff) << 8 | (input[index + 3] & 0xff); + }; + }; + util.inherits(module.exports.UTF_32BE, UTF_32); + + module.exports.UTF_32LE = function() { + this.name = function() { + return 'UTF-32LE'; + }; + this.getChar = function(input, index) { + return (input[index + 3] & 0xff) << 24 | (input[index + 2] & 0xff) << 16 | + (input[index + 1] & 0xff) << 8 | (input[index + 0] & 0xff); + }; + }; + util.inherits(module.exports.UTF_32LE, UTF_32); +} (unicode$1)); + +var unicodeExports = unicode$1.exports; + +var mbcs$1 = {exports: {}}; + +(function (module) { + var util = require$$0$3, + Match = match; + + /** + * Binary search implementation (recursive) + */ + function binarySearch(arr, searchValue) { + function find(arr, searchValue, left, right) { + if (right < left) + return -1; + + /* + int mid = mid = (left + right) / 2; + There is a bug in the above line; + Joshua Bloch suggests the following replacement: + */ + var mid = Math.floor((left + right) >>> 1); + if (searchValue > arr[mid]) + return find(arr, searchValue, mid + 1, right); + + if (searchValue < arr[mid]) + return find(arr, searchValue, left, mid - 1); + + return mid; + } + return find(arr, searchValue, 0, arr.length - 1); + } + // 'Character' iterated character class. + // Recognizers for specific mbcs encodings make their 'characters' available + // by providing a nextChar() function that fills in an instance of iteratedChar + // with the next char from the input. + // The returned characters are not converted to Unicode, but remain as the raw + // bytes (concatenated into an int) from the codepage data. + // + // For Asian charsets, use the raw input rather than the input that has been + // stripped of markup. Detection only considers multi-byte chars, effectively + // stripping markup anyway, and double byte chars do occur in markup too. + // + function IteratedChar() { + + this.charValue = 0; // 1-4 bytes from the raw input data + this.index = 0; + this.nextIndex = 0; + this.error = false; + this.done = false; + + this.reset = function() { + this.charValue = 0; + this.index = -1; + this.nextIndex = 0; + this.error = false; + this.done = false; + }; + + this.nextByte = function(det) { + if (this.nextIndex >= det.fRawLength) { + this.done = true; + return -1; + } + var byteValue = det.fRawInput[this.nextIndex++] & 0x00ff; + return byteValue; + }; + } + + + /** + * Asian double or multi-byte - charsets. + * Match is determined mostly by the input data adhering to the + * encoding scheme for the charset, and, optionally, + * frequency-of-occurence of characters. + */ + + function mbcs() {} + /** + * Test the match of this charset with the input text data + * which is obtained via the CharsetDetector object. + * + * @param det The CharsetDetector, which contains the input text + * to be checked for being in this charset. + * @return Two values packed into one int (Damn java, anyhow) + * bits 0-7: the match confidence, ranging from 0-100 + * bits 8-15: The match reason, an enum-like value. + */ + mbcs.prototype.match = function(det) { + + var doubleByteCharCount = 0, + commonCharCount = 0, + badCharCount = 0, + totalCharCount = 0, + confidence = 0; + + var iter = new IteratedChar(); + + detectBlock: { + for (iter.reset(); this.nextChar(iter, det);) { + totalCharCount++; + if (iter.error) { + badCharCount++; + } else { + var cv = iter.charValue & 0xFFFFFFFF; + + if (cv <= 0xff) ; else { + doubleByteCharCount++; + if (this.commonChars != null) { + // NOTE: This assumes that there are no 4-byte common chars. + if (binarySearch(this.commonChars, cv) >= 0) { + commonCharCount++; + } + } + } + } + if (badCharCount >= 2 && badCharCount * 5 >= doubleByteCharCount) { + // console.log('its here!') + // Bail out early if the byte data is not matching the encoding scheme. + break detectBlock; + } + } + + if (doubleByteCharCount <= 10 && badCharCount== 0) { + // Not many multi-byte chars. + if (doubleByteCharCount == 0 && totalCharCount < 10) { + // There weren't any multibyte sequences, and there was a low density of non-ASCII single bytes. + // We don't have enough data to have any confidence. + // Statistical analysis of single byte non-ASCII charcters would probably help here. + confidence = 0; + } + else { + // ASCII or ISO file? It's probably not our encoding, + // but is not incompatible with our encoding, so don't give it a zero. + confidence = 10; + } + break detectBlock; + } + + // + // No match if there are too many characters that don't fit the encoding scheme. + // (should we have zero tolerance for these?) + // + if (doubleByteCharCount < 20 * badCharCount) { + confidence = 0; + break detectBlock; + } + + if (this.commonChars == null) { + // We have no statistics on frequently occuring characters. + // Assess confidence purely on having a reasonable number of + // multi-byte characters (the more the better + confidence = 30 + doubleByteCharCount - 20 * badCharCount; + if (confidence > 100) { + confidence = 100; + } + } else { + // + // Frequency of occurence statistics exist. + // + var maxVal = Math.log(parseFloat(doubleByteCharCount) / 4); + var scaleFactor = 90.0 / maxVal; + confidence = Math.floor(Math.log(commonCharCount + 1) * scaleFactor + 10); + confidence = Math.min(confidence, 100); + } + } // end of detectBlock: + + return confidence == 0 ? null : new Match(det, this, confidence); + }; + + /** + * Get the next character (however many bytes it is) from the input data + * Subclasses for specific charset encodings must implement this function + * to get characters according to the rules of their encoding scheme. + * + * This function is not a method of class iteratedChar only because + * that would require a lot of extra derived classes, which is awkward. + * @param it The iteratedChar 'struct' into which the returned char is placed. + * @param det The charset detector, which is needed to get at the input byte data + * being iterated over. + * @return True if a character was returned, false at end of input. + */ + + mbcs.prototype.nextChar = function(iter, det) {}; + + + + /** + * Shift-JIS charset recognizer. + */ + module.exports.sjis = function() { + this.name = function() { + return 'Shift-JIS'; + }; + this.language = function() { + return 'ja'; + }; + + // TODO: This set of data comes from the character frequency- + // of-occurence analysis tool. The data needs to be moved + // into a resource and loaded from there. + this.commonChars = [ + 0x8140, 0x8141, 0x8142, 0x8145, 0x815b, 0x8169, 0x816a, 0x8175, 0x8176, 0x82a0, + 0x82a2, 0x82a4, 0x82a9, 0x82aa, 0x82ab, 0x82ad, 0x82af, 0x82b1, 0x82b3, 0x82b5, + 0x82b7, 0x82bd, 0x82be, 0x82c1, 0x82c4, 0x82c5, 0x82c6, 0x82c8, 0x82c9, 0x82cc, + 0x82cd, 0x82dc, 0x82e0, 0x82e7, 0x82e8, 0x82e9, 0x82ea, 0x82f0, 0x82f1, 0x8341, + 0x8343, 0x834e, 0x834f, 0x8358, 0x835e, 0x8362, 0x8367, 0x8375, 0x8376, 0x8389, + 0x838a, 0x838b, 0x838d, 0x8393, 0x8e96, 0x93fa, 0x95aa + ]; + + this.nextChar = function(iter, det) { + iter.index = iter.nextIndex; + iter.error = false; + + var firstByte; + firstByte = iter.charValue = iter.nextByte(det); + if (firstByte < 0) + return false; + + if (firstByte <= 0x7f || (firstByte > 0xa0 && firstByte <= 0xdf)) + return true; + + var secondByte = iter.nextByte(det); + if (secondByte < 0) + return false; + + iter.charValue = (firstByte << 8) | secondByte; + if (! ((secondByte >= 0x40 && secondByte <= 0x7f) || (secondByte >= 0x80 && secondByte <= 0xff))) { + // Illegal second byte value. + iter.error = true; + } + return true; + }; + }; + util.inherits(module.exports.sjis, mbcs); + + + + /** + * Big5 charset recognizer. + */ + module.exports.big5 = function() { + this.name = function() { + return 'Big5'; + }; + this.language = function() { + return 'zh'; + }; + // TODO: This set of data comes from the character frequency- + // of-occurence analysis tool. The data needs to be moved + // into a resource and loaded from there. + this.commonChars = [ + 0xa140, 0xa141, 0xa142, 0xa143, 0xa147, 0xa149, 0xa175, 0xa176, 0xa440, 0xa446, + 0xa447, 0xa448, 0xa451, 0xa454, 0xa457, 0xa464, 0xa46a, 0xa46c, 0xa477, 0xa4a3, + 0xa4a4, 0xa4a7, 0xa4c1, 0xa4ce, 0xa4d1, 0xa4df, 0xa4e8, 0xa4fd, 0xa540, 0xa548, + 0xa558, 0xa569, 0xa5cd, 0xa5e7, 0xa657, 0xa661, 0xa662, 0xa668, 0xa670, 0xa6a8, + 0xa6b3, 0xa6b9, 0xa6d3, 0xa6db, 0xa6e6, 0xa6f2, 0xa740, 0xa751, 0xa759, 0xa7da, + 0xa8a3, 0xa8a5, 0xa8ad, 0xa8d1, 0xa8d3, 0xa8e4, 0xa8fc, 0xa9c0, 0xa9d2, 0xa9f3, + 0xaa6b, 0xaaba, 0xaabe, 0xaacc, 0xaafc, 0xac47, 0xac4f, 0xacb0, 0xacd2, 0xad59, + 0xaec9, 0xafe0, 0xb0ea, 0xb16f, 0xb2b3, 0xb2c4, 0xb36f, 0xb44c, 0xb44e, 0xb54c, + 0xb5a5, 0xb5bd, 0xb5d0, 0xb5d8, 0xb671, 0xb7ed, 0xb867, 0xb944, 0xbad8, 0xbb44, + 0xbba1, 0xbdd1, 0xc2c4, 0xc3b9, 0xc440, 0xc45f + ]; + this.nextChar = function(iter, det) { + iter.index = iter.nextIndex; + iter.error = false; + + var firstByte = iter.charValue = iter.nextByte(det); + + if (firstByte < 0) + return false; + + // single byte character. + if (firstByte <= 0x7f || firstByte == 0xff) + return true; + + var secondByte = iter.nextByte(det); + + if (secondByte < 0) + return false; + + iter.charValue = (iter.charValue << 8) | secondByte; + + if (secondByte < 0x40 || secondByte == 0x7f || secondByte == 0xff) + iter.error = true; + + return true; + }; + }; + util.inherits(module.exports.big5, mbcs); + + + + /** + * EUC charset recognizers. One abstract class that provides the common function + * for getting the next character according to the EUC encoding scheme, + * and nested derived classes for EUC_KR, EUC_JP, EUC_CN. + * + * Get the next character value for EUC based encodings. + * Character 'value' is simply the raw bytes that make up the character + * packed into an int. + */ + function eucNextChar(iter, det) { + iter.index = iter.nextIndex; + iter.error = false; + var firstByte = 0; + var secondByte = 0; + var thirdByte = 0; + //int fourthByte = 0; + buildChar: { + firstByte = iter.charValue = iter.nextByte(det); + if (firstByte < 0) { + // Ran off the end of the input data + iter.done = true; + break buildChar; + } + if (firstByte <= 0x8d) { + // single byte char + break buildChar; + } + secondByte = iter.nextByte(det); + iter.charValue = (iter.charValue << 8) | secondByte; + if (firstByte >= 0xA1 && firstByte <= 0xfe) { + // Two byte Char + if (secondByte < 0xa1) { + iter.error = true; + } + break buildChar; + } + if (firstByte == 0x8e) { + // Code Set 2. + // In EUC-JP, total char size is 2 bytes, only one byte of actual char value. + // In EUC-TW, total char size is 4 bytes, three bytes contribute to char value. + // We don't know which we've got. + // Treat it like EUC-JP. If the data really was EUC-TW, the following two + // bytes will look like a well formed 2 byte char. + if (secondByte < 0xa1) { + iter.error = true; + } + break buildChar; + } + if (firstByte == 0x8f) { + // Code set 3. + // Three byte total char size, two bytes of actual char value. + thirdByte = iter.nextByte(det); + iter.charValue = (iter.charValue << 8) | thirdByte; + if (thirdByte < 0xa1) { + iter.error = true; + } + } + } + return iter.done == false; + } + + + /** + * The charset recognize for EUC-JP. A singleton instance of this class + * is created and kept by the public CharsetDetector class + */ + module.exports.euc_jp = function() { + this.name = function() { + return 'EUC-JP'; + }; + this.language = function() { + return 'ja'; + }; + + // TODO: This set of data comes from the character frequency- + // of-occurence analysis tool. The data needs to be moved + // into a resource and loaded from there. + this.commonChars = [ + 0xa1a1, 0xa1a2, 0xa1a3, 0xa1a6, 0xa1bc, 0xa1ca, 0xa1cb, 0xa1d6, 0xa1d7, 0xa4a2, + 0xa4a4, 0xa4a6, 0xa4a8, 0xa4aa, 0xa4ab, 0xa4ac, 0xa4ad, 0xa4af, 0xa4b1, 0xa4b3, + 0xa4b5, 0xa4b7, 0xa4b9, 0xa4bb, 0xa4bd, 0xa4bf, 0xa4c0, 0xa4c1, 0xa4c3, 0xa4c4, + 0xa4c6, 0xa4c7, 0xa4c8, 0xa4c9, 0xa4ca, 0xa4cb, 0xa4ce, 0xa4cf, 0xa4d0, 0xa4de, + 0xa4df, 0xa4e1, 0xa4e2, 0xa4e4, 0xa4e8, 0xa4e9, 0xa4ea, 0xa4eb, 0xa4ec, 0xa4ef, + 0xa4f2, 0xa4f3, 0xa5a2, 0xa5a3, 0xa5a4, 0xa5a6, 0xa5a7, 0xa5aa, 0xa5ad, 0xa5af, + 0xa5b0, 0xa5b3, 0xa5b5, 0xa5b7, 0xa5b8, 0xa5b9, 0xa5bf, 0xa5c3, 0xa5c6, 0xa5c7, + 0xa5c8, 0xa5c9, 0xa5cb, 0xa5d0, 0xa5d5, 0xa5d6, 0xa5d7, 0xa5de, 0xa5e0, 0xa5e1, + 0xa5e5, 0xa5e9, 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ed, 0xa5f3, 0xb8a9, 0xb9d4, 0xbaee, + 0xbbc8, 0xbef0, 0xbfb7, 0xc4ea, 0xc6fc, 0xc7bd, 0xcab8, 0xcaf3, 0xcbdc, 0xcdd1 + ]; + + this.nextChar = eucNextChar; + }; + util.inherits(module.exports.euc_jp, mbcs); + + + + /** + * The charset recognize for EUC-KR. A singleton instance of this class + * is created and kept by the public CharsetDetector class + */ + module.exports.euc_kr = function() { + this.name = function() { + return 'EUC-KR'; + }; + this.language = function() { + return 'ko'; + }; + + // TODO: This set of data comes from the character frequency- + // of-occurence analysis tool. The data needs to be moved + // into a resource and loaded from there. + this.commonChars = [ + 0xb0a1, 0xb0b3, 0xb0c5, 0xb0cd, 0xb0d4, 0xb0e6, 0xb0ed, 0xb0f8, 0xb0fa, 0xb0fc, + 0xb1b8, 0xb1b9, 0xb1c7, 0xb1d7, 0xb1e2, 0xb3aa, 0xb3bb, 0xb4c2, 0xb4cf, 0xb4d9, + 0xb4eb, 0xb5a5, 0xb5b5, 0xb5bf, 0xb5c7, 0xb5e9, 0xb6f3, 0xb7af, 0xb7c2, 0xb7ce, + 0xb8a6, 0xb8ae, 0xb8b6, 0xb8b8, 0xb8bb, 0xb8e9, 0xb9ab, 0xb9ae, 0xb9cc, 0xb9ce, + 0xb9fd, 0xbab8, 0xbace, 0xbad0, 0xbaf1, 0xbbe7, 0xbbf3, 0xbbfd, 0xbcad, 0xbcba, + 0xbcd2, 0xbcf6, 0xbdba, 0xbdc0, 0xbdc3, 0xbdc5, 0xbec6, 0xbec8, 0xbedf, 0xbeee, + 0xbef8, 0xbefa, 0xbfa1, 0xbfa9, 0xbfc0, 0xbfe4, 0xbfeb, 0xbfec, 0xbff8, 0xc0a7, + 0xc0af, 0xc0b8, 0xc0ba, 0xc0bb, 0xc0bd, 0xc0c7, 0xc0cc, 0xc0ce, 0xc0cf, 0xc0d6, + 0xc0da, 0xc0e5, 0xc0fb, 0xc0fc, 0xc1a4, 0xc1a6, 0xc1b6, 0xc1d6, 0xc1df, 0xc1f6, + 0xc1f8, 0xc4a1, 0xc5cd, 0xc6ae, 0xc7cf, 0xc7d1, 0xc7d2, 0xc7d8, 0xc7e5, 0xc8ad + ]; + + this.nextChar = eucNextChar; + }; + util.inherits(module.exports.euc_kr, mbcs); + + + + /** + * GB-18030 recognizer. Uses simplified Chinese statistics. + */ + module.exports.gb_18030 = function() { + this.name = function() { + return 'GB18030'; + }; + this.language = function() { + return 'zh'; + }; + + /* + * Get the next character value for EUC based encodings. + * Character 'value' is simply the raw bytes that make up the character + * packed into an int. + */ + this.nextChar = function(iter, det) { + iter.index = iter.nextIndex; + iter.error = false; + var firstByte = 0; + var secondByte = 0; + var thirdByte = 0; + var fourthByte = 0; + buildChar: { + firstByte = iter.charValue = iter.nextByte(det); + if (firstByte < 0) { + // Ran off the end of the input data + iter.done = true; + break buildChar; + } + if (firstByte <= 0x80) { + // single byte char + break buildChar; + } + secondByte = iter.nextByte(det); + iter.charValue = (iter.charValue << 8) | secondByte; + if (firstByte >= 0x81 && firstByte <= 0xFE) { + // Two byte Char + if ((secondByte >= 0x40 && secondByte <= 0x7E) || (secondByte >=80 && secondByte <= 0xFE)) { + break buildChar; + } + // Four byte char + if (secondByte >= 0x30 && secondByte <= 0x39) { + thirdByte = iter.nextByte(det); + if (thirdByte >= 0x81 && thirdByte <= 0xFE) { + fourthByte = iter.nextByte(det); + if (fourthByte >= 0x30 && fourthByte <= 0x39) { + iter.charValue = (iter.charValue << 16) | (thirdByte << 8) | fourthByte; + break buildChar; + } + } + } + iter.error = true; + break buildChar; + } + } + return iter.done == false; + }; + + // TODO: This set of data comes from the character frequency- + // of-occurence analysis tool. The data needs to be moved + // into a resource and loaded from there. + this.commonChars = [ + 0xa1a1, 0xa1a2, 0xa1a3, 0xa1a4, 0xa1b0, 0xa1b1, 0xa1f1, 0xa1f3, 0xa3a1, 0xa3ac, + 0xa3ba, 0xb1a8, 0xb1b8, 0xb1be, 0xb2bb, 0xb3c9, 0xb3f6, 0xb4f3, 0xb5bd, 0xb5c4, + 0xb5e3, 0xb6af, 0xb6d4, 0xb6e0, 0xb7a2, 0xb7a8, 0xb7bd, 0xb7d6, 0xb7dd, 0xb8b4, + 0xb8df, 0xb8f6, 0xb9ab, 0xb9c9, 0xb9d8, 0xb9fa, 0xb9fd, 0xbacd, 0xbba7, 0xbbd6, + 0xbbe1, 0xbbfa, 0xbcbc, 0xbcdb, 0xbcfe, 0xbdcc, 0xbecd, 0xbedd, 0xbfb4, 0xbfc6, + 0xbfc9, 0xc0b4, 0xc0ed, 0xc1cb, 0xc2db, 0xc3c7, 0xc4dc, 0xc4ea, 0xc5cc, 0xc6f7, + 0xc7f8, 0xc8ab, 0xc8cb, 0xc8d5, 0xc8e7, 0xc9cf, 0xc9fa, 0xcab1, 0xcab5, 0xcac7, + 0xcad0, 0xcad6, 0xcaf5, 0xcafd, 0xccec, 0xcdf8, 0xceaa, 0xcec4, 0xced2, 0xcee5, + 0xcfb5, 0xcfc2, 0xcfd6, 0xd0c2, 0xd0c5, 0xd0d0, 0xd0d4, 0xd1a7, 0xd2aa, 0xd2b2, + 0xd2b5, 0xd2bb, 0xd2d4, 0xd3c3, 0xd3d0, 0xd3fd, 0xd4c2, 0xd4da, 0xd5e2, 0xd6d0 + ]; + }; + util.inherits(module.exports.gb_18030, mbcs); +} (mbcs$1)); + +var mbcsExports = mbcs$1.exports; + +var sbcs$1 = {exports: {}}; + +(function (module) { + var util = require$$0$3, + Match = match; + + /** + * This class recognizes single-byte encodings. Because the encoding scheme is so + * simple, language statistics are used to do the matching. + */ + + function NGramParser(theNgramList, theByteMap) { + var N_GRAM_MASK = 0xFFFFFF; + + this.byteIndex = 0; + this.ngram = 0; + + this.ngramList = theNgramList; + this.byteMap = theByteMap; + + this.ngramCount = 0; + this.hitCount = 0; + + this.spaceChar; + + /* + * Binary search for value in table, which must have exactly 64 entries. + */ + this.search = function(table, value) { + var index = 0; + + if (table[index + 32] <= value) index += 32; + if (table[index + 16] <= value) index += 16; + if (table[index + 8] <= value) index += 8; + if (table[index + 4] <= value) index += 4; + if (table[index + 2] <= value) index += 2; + if (table[index + 1] <= value) index += 1; + if (table[index] > value) index -= 1; + + if (index < 0 || table[index] != value) + return -1; + + return index; + }; + + this.lookup = function(thisNgram) { + this.ngramCount += 1; + if (this.search(this.ngramList, thisNgram) >= 0) { + this.hitCount += 1; + } + }; + + this.addByte = function(b) { + this.ngram = ((this.ngram << 8) + (b & 0xFF)) & N_GRAM_MASK; + this.lookup(this.ngram); + }; + + this.nextByte = function(det) { + if (this.byteIndex >= det.fInputLen) + return -1; + + return det.fInputBytes[this.byteIndex++] & 0xFF; + }; + + this.parse = function(det, spaceCh) { + var b, ignoreSpace = false; + this.spaceChar = spaceCh; + + while ((b = this.nextByte(det)) >= 0) { + var mb = this.byteMap[b]; + + // TODO: 0x20 might not be a space in all character sets... + if (mb != 0) { + if (!(mb == this.spaceChar && ignoreSpace)) { + this.addByte(mb); + } + + ignoreSpace = (mb == this.spaceChar); + } + } + + // TODO: Is this OK? The buffer could have ended in the middle of a word... + this.addByte(this.spaceChar); + + var rawPercent = this.hitCount / this.ngramCount; + + // TODO - This is a bit of a hack to take care of a case + // were we were getting a confidence of 135... + if (rawPercent > 0.33) + return 98; + + return Math.floor(rawPercent * 300.0); + }; + } + function NGramsPlusLang(la, ng) { + this.fLang = la; + this.fNGrams = ng; + } + function sbcs() {} sbcs.prototype.spaceChar = 0x20; + sbcs.prototype.ngrams = function() {}; + sbcs.prototype.byteMap = function() {}; + sbcs.prototype.match = function(det) { + + var ngrams = this.ngrams(); + var multiple = (Array.isArray(ngrams) && ngrams[0] instanceof NGramsPlusLang); + + if (!multiple) { + var parser = new NGramParser(ngrams, this.byteMap()); + var confidence = parser.parse(det, this.spaceChar); + return confidence <= 0 ? null : new Match(det, this, confidence); + } + + var bestConfidenceSoFar = -1; + var lang = null; + + for (var i = ngrams.length - 1; i >= 0; i--) { + var ngl = ngrams[i]; + + var parser = new NGramParser(ngl.fNGrams, this.byteMap()); + var confidence = parser.parse(det, this.spaceChar); + if (confidence > bestConfidenceSoFar) { + bestConfidenceSoFar = confidence; + lang = ngl.fLang; + } + } + + var name = this.name(det); + return bestConfidenceSoFar <= 0 ? null : new Match(det, this, bestConfidenceSoFar, name, lang); + }; + + + module.exports.ISO_8859_1 = function() { + this.byteMap = function() { + return [ + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, + 0x20, 0x20, 0xBA, 0x20, 0x20, 0x20, 0x20, 0x20, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF + ]; + }; + + this.ngrams = function() { + return [ + new NGramsPlusLang('da', [ + 0x206166, 0x206174, 0x206465, 0x20656E, 0x206572, 0x20666F, 0x206861, 0x206920, + 0x206D65, 0x206F67, 0x2070E5, 0x207369, 0x207374, 0x207469, 0x207669, 0x616620, + 0x616E20, 0x616E64, 0x617220, 0x617420, 0x646520, 0x64656E, 0x646572, 0x646574, + 0x652073, 0x656420, 0x656465, 0x656E20, 0x656E64, 0x657220, 0x657265, 0x657320, + 0x657420, 0x666F72, 0x676520, 0x67656E, 0x676572, 0x696765, 0x696C20, 0x696E67, + 0x6B6520, 0x6B6B65, 0x6C6572, 0x6C6967, 0x6C6C65, 0x6D6564, 0x6E6465, 0x6E6520, + 0x6E6720, 0x6E6765, 0x6F6720, 0x6F6D20, 0x6F7220, 0x70E520, 0x722064, 0x722065, + 0x722073, 0x726520, 0x737465, 0x742073, 0x746520, 0x746572, 0x74696C, 0x766572 + ]), + new NGramsPlusLang('de', [ + 0x20616E, 0x206175, 0x206265, 0x206461, 0x206465, 0x206469, 0x206569, 0x206765, + 0x206861, 0x20696E, 0x206D69, 0x207363, 0x207365, 0x20756E, 0x207665, 0x20766F, + 0x207765, 0x207A75, 0x626572, 0x636820, 0x636865, 0x636874, 0x646173, 0x64656E, + 0x646572, 0x646965, 0x652064, 0x652073, 0x65696E, 0x656974, 0x656E20, 0x657220, + 0x657320, 0x67656E, 0x68656E, 0x687420, 0x696368, 0x696520, 0x696E20, 0x696E65, + 0x697420, 0x6C6963, 0x6C6C65, 0x6E2061, 0x6E2064, 0x6E2073, 0x6E6420, 0x6E6465, + 0x6E6520, 0x6E6720, 0x6E6765, 0x6E7465, 0x722064, 0x726465, 0x726569, 0x736368, + 0x737465, 0x742064, 0x746520, 0x74656E, 0x746572, 0x756E64, 0x756E67, 0x766572 + ]), + new NGramsPlusLang('en', [ + 0x206120, 0x20616E, 0x206265, 0x20636F, 0x20666F, 0x206861, 0x206865, 0x20696E, + 0x206D61, 0x206F66, 0x207072, 0x207265, 0x207361, 0x207374, 0x207468, 0x20746F, + 0x207768, 0x616964, 0x616C20, 0x616E20, 0x616E64, 0x617320, 0x617420, 0x617465, + 0x617469, 0x642061, 0x642074, 0x652061, 0x652073, 0x652074, 0x656420, 0x656E74, + 0x657220, 0x657320, 0x666F72, 0x686174, 0x686520, 0x686572, 0x696420, 0x696E20, + 0x696E67, 0x696F6E, 0x697320, 0x6E2061, 0x6E2074, 0x6E6420, 0x6E6720, 0x6E7420, + 0x6F6620, 0x6F6E20, 0x6F7220, 0x726520, 0x727320, 0x732061, 0x732074, 0x736169, + 0x737420, 0x742074, 0x746572, 0x746861, 0x746865, 0x74696F, 0x746F20, 0x747320 + ]), + new NGramsPlusLang('es', [ + 0x206120, 0x206361, 0x20636F, 0x206465, 0x20656C, 0x20656E, 0x206573, 0x20696E, + 0x206C61, 0x206C6F, 0x207061, 0x20706F, 0x207072, 0x207175, 0x207265, 0x207365, + 0x20756E, 0x207920, 0x612063, 0x612064, 0x612065, 0x61206C, 0x612070, 0x616369, + 0x61646F, 0x616C20, 0x617220, 0x617320, 0x6369F3, 0x636F6E, 0x646520, 0x64656C, + 0x646F20, 0x652064, 0x652065, 0x65206C, 0x656C20, 0x656E20, 0x656E74, 0x657320, + 0x657374, 0x69656E, 0x69F36E, 0x6C6120, 0x6C6F73, 0x6E2065, 0x6E7465, 0x6F2064, + 0x6F2065, 0x6F6E20, 0x6F7220, 0x6F7320, 0x706172, 0x717565, 0x726120, 0x726573, + 0x732064, 0x732065, 0x732070, 0x736520, 0x746520, 0x746F20, 0x756520, 0xF36E20 + ]), + new NGramsPlusLang('fr', [ + 0x206175, 0x20636F, 0x206461, 0x206465, 0x206475, 0x20656E, 0x206574, 0x206C61, + 0x206C65, 0x207061, 0x20706F, 0x207072, 0x207175, 0x207365, 0x20736F, 0x20756E, + 0x20E020, 0x616E74, 0x617469, 0x636520, 0x636F6E, 0x646520, 0x646573, 0x647520, + 0x652061, 0x652063, 0x652064, 0x652065, 0x65206C, 0x652070, 0x652073, 0x656E20, + 0x656E74, 0x657220, 0x657320, 0x657420, 0x657572, 0x696F6E, 0x697320, 0x697420, + 0x6C6120, 0x6C6520, 0x6C6573, 0x6D656E, 0x6E2064, 0x6E6520, 0x6E7320, 0x6E7420, + 0x6F6E20, 0x6F6E74, 0x6F7572, 0x717565, 0x72206C, 0x726520, 0x732061, 0x732064, + 0x732065, 0x73206C, 0x732070, 0x742064, 0x746520, 0x74696F, 0x756520, 0x757220 + ]), + new NGramsPlusLang('it', [ + 0x20616C, 0x206368, 0x20636F, 0x206465, 0x206469, 0x206520, 0x20696C, 0x20696E, + 0x206C61, 0x207065, 0x207072, 0x20756E, 0x612063, 0x612064, 0x612070, 0x612073, + 0x61746F, 0x636865, 0x636F6E, 0x64656C, 0x646920, 0x652061, 0x652063, 0x652064, + 0x652069, 0x65206C, 0x652070, 0x652073, 0x656C20, 0x656C6C, 0x656E74, 0x657220, + 0x686520, 0x692061, 0x692063, 0x692064, 0x692073, 0x696120, 0x696C20, 0x696E20, + 0x696F6E, 0x6C6120, 0x6C6520, 0x6C6920, 0x6C6C61, 0x6E6520, 0x6E6920, 0x6E6F20, + 0x6E7465, 0x6F2061, 0x6F2064, 0x6F2069, 0x6F2073, 0x6F6E20, 0x6F6E65, 0x706572, + 0x726120, 0x726520, 0x736920, 0x746120, 0x746520, 0x746920, 0x746F20, 0x7A696F + ]), + new NGramsPlusLang('nl', [ + 0x20616C, 0x206265, 0x206461, 0x206465, 0x206469, 0x206565, 0x20656E, 0x206765, + 0x206865, 0x20696E, 0x206D61, 0x206D65, 0x206F70, 0x207465, 0x207661, 0x207665, + 0x20766F, 0x207765, 0x207A69, 0x61616E, 0x616172, 0x616E20, 0x616E64, 0x617220, + 0x617420, 0x636874, 0x646520, 0x64656E, 0x646572, 0x652062, 0x652076, 0x65656E, + 0x656572, 0x656E20, 0x657220, 0x657273, 0x657420, 0x67656E, 0x686574, 0x696520, + 0x696E20, 0x696E67, 0x697320, 0x6E2062, 0x6E2064, 0x6E2065, 0x6E2068, 0x6E206F, + 0x6E2076, 0x6E6465, 0x6E6720, 0x6F6E64, 0x6F6F72, 0x6F7020, 0x6F7220, 0x736368, + 0x737465, 0x742064, 0x746520, 0x74656E, 0x746572, 0x76616E, 0x766572, 0x766F6F + ]), + new NGramsPlusLang('no', [ + 0x206174, 0x206176, 0x206465, 0x20656E, 0x206572, 0x20666F, 0x206861, 0x206920, + 0x206D65, 0x206F67, 0x2070E5, 0x207365, 0x20736B, 0x20736F, 0x207374, 0x207469, + 0x207669, 0x20E520, 0x616E64, 0x617220, 0x617420, 0x646520, 0x64656E, 0x646574, + 0x652073, 0x656420, 0x656E20, 0x656E65, 0x657220, 0x657265, 0x657420, 0x657474, + 0x666F72, 0x67656E, 0x696B6B, 0x696C20, 0x696E67, 0x6B6520, 0x6B6B65, 0x6C6520, + 0x6C6C65, 0x6D6564, 0x6D656E, 0x6E2073, 0x6E6520, 0x6E6720, 0x6E6765, 0x6E6E65, + 0x6F6720, 0x6F6D20, 0x6F7220, 0x70E520, 0x722073, 0x726520, 0x736F6D, 0x737465, + 0x742073, 0x746520, 0x74656E, 0x746572, 0x74696C, 0x747420, 0x747465, 0x766572 + ]), + new NGramsPlusLang('pt', [ + 0x206120, 0x20636F, 0x206461, 0x206465, 0x20646F, 0x206520, 0x206573, 0x206D61, + 0x206E6F, 0x206F20, 0x207061, 0x20706F, 0x207072, 0x207175, 0x207265, 0x207365, + 0x20756D, 0x612061, 0x612063, 0x612064, 0x612070, 0x616465, 0x61646F, 0x616C20, + 0x617220, 0x617261, 0x617320, 0x636F6D, 0x636F6E, 0x646120, 0x646520, 0x646F20, + 0x646F73, 0x652061, 0x652064, 0x656D20, 0x656E74, 0x657320, 0x657374, 0x696120, + 0x696361, 0x6D656E, 0x6E7465, 0x6E746F, 0x6F2061, 0x6F2063, 0x6F2064, 0x6F2065, + 0x6F2070, 0x6F7320, 0x706172, 0x717565, 0x726120, 0x726573, 0x732061, 0x732064, + 0x732065, 0x732070, 0x737461, 0x746520, 0x746F20, 0x756520, 0xE36F20, 0xE7E36F + ]), + new NGramsPlusLang('sv', [ + 0x206174, 0x206176, 0x206465, 0x20656E, 0x2066F6, 0x206861, 0x206920, 0x20696E, + 0x206B6F, 0x206D65, 0x206F63, 0x2070E5, 0x20736B, 0x20736F, 0x207374, 0x207469, + 0x207661, 0x207669, 0x20E472, 0x616465, 0x616E20, 0x616E64, 0x617220, 0x617474, + 0x636820, 0x646520, 0x64656E, 0x646572, 0x646574, 0x656420, 0x656E20, 0x657220, + 0x657420, 0x66F672, 0x67656E, 0x696C6C, 0x696E67, 0x6B6120, 0x6C6C20, 0x6D6564, + 0x6E2073, 0x6E6120, 0x6E6465, 0x6E6720, 0x6E6765, 0x6E696E, 0x6F6368, 0x6F6D20, + 0x6F6E20, 0x70E520, 0x722061, 0x722073, 0x726120, 0x736B61, 0x736F6D, 0x742073, + 0x746120, 0x746520, 0x746572, 0x74696C, 0x747420, 0x766172, 0xE47220, 0xF67220, + ]) + ]; + }; + + this.name = function(det) { + return (det && det.fC1Bytes) ? 'windows-1252' : 'ISO-8859-1'; + }; + }; + util.inherits(module.exports.ISO_8859_1, sbcs); + + + module.exports.ISO_8859_2 = function() { + this.byteMap = function() { + return [ + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0xB1, 0x20, 0xB3, 0x20, 0xB5, 0xB6, 0x20, + 0x20, 0xB9, 0xBA, 0xBB, 0xBC, 0x20, 0xBE, 0xBF, + 0x20, 0xB1, 0x20, 0xB3, 0x20, 0xB5, 0xB6, 0xB7, + 0x20, 0xB9, 0xBA, 0xBB, 0xBC, 0x20, 0xBE, 0xBF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0x20 + ]; + }; + + this.ngrams = function() { + return [ + new NGramsPlusLang('cs', [ + 0x206120, 0x206279, 0x20646F, 0x206A65, 0x206E61, 0x206E65, 0x206F20, 0x206F64, + 0x20706F, 0x207072, 0x2070F8, 0x20726F, 0x207365, 0x20736F, 0x207374, 0x20746F, + 0x207620, 0x207679, 0x207A61, 0x612070, 0x636520, 0x636820, 0x652070, 0x652073, + 0x652076, 0x656D20, 0x656EED, 0x686F20, 0x686F64, 0x697374, 0x6A6520, 0x6B7465, + 0x6C6520, 0x6C6920, 0x6E6120, 0x6EE920, 0x6EEC20, 0x6EED20, 0x6F2070, 0x6F646E, + 0x6F6A69, 0x6F7374, 0x6F7520, 0x6F7661, 0x706F64, 0x706F6A, 0x70726F, 0x70F865, + 0x736520, 0x736F75, 0x737461, 0x737469, 0x73746E, 0x746572, 0x746EED, 0x746F20, + 0x752070, 0xBE6520, 0xE16EED, 0xE9686F, 0xED2070, 0xED2073, 0xED6D20, 0xF86564, + ]), + new NGramsPlusLang('hu', [ + 0x206120, 0x20617A, 0x206265, 0x206567, 0x20656C, 0x206665, 0x206861, 0x20686F, + 0x206973, 0x206B65, 0x206B69, 0x206BF6, 0x206C65, 0x206D61, 0x206D65, 0x206D69, + 0x206E65, 0x20737A, 0x207465, 0x20E973, 0x612061, 0x61206B, 0x61206D, 0x612073, + 0x616B20, 0x616E20, 0x617A20, 0x62616E, 0x62656E, 0x656779, 0x656B20, 0x656C20, + 0x656C65, 0x656D20, 0x656E20, 0x657265, 0x657420, 0x657465, 0x657474, 0x677920, + 0x686F67, 0x696E74, 0x697320, 0x6B2061, 0x6BF67A, 0x6D6567, 0x6D696E, 0x6E2061, + 0x6E616B, 0x6E656B, 0x6E656D, 0x6E7420, 0x6F6779, 0x732061, 0x737A65, 0x737A74, + 0x737AE1, 0x73E967, 0x742061, 0x747420, 0x74E173, 0x7A6572, 0xE16E20, 0xE97320, + ]), + new NGramsPlusLang('pl', [ + 0x20637A, 0x20646F, 0x206920, 0x206A65, 0x206B6F, 0x206D61, 0x206D69, 0x206E61, + 0x206E69, 0x206F64, 0x20706F, 0x207072, 0x207369, 0x207720, 0x207769, 0x207779, + 0x207A20, 0x207A61, 0x612070, 0x612077, 0x616E69, 0x636820, 0x637A65, 0x637A79, + 0x646F20, 0x647A69, 0x652070, 0x652073, 0x652077, 0x65207A, 0x65676F, 0x656A20, + 0x656D20, 0x656E69, 0x676F20, 0x696120, 0x696520, 0x69656A, 0x6B6120, 0x6B6920, + 0x6B6965, 0x6D6965, 0x6E6120, 0x6E6961, 0x6E6965, 0x6F2070, 0x6F7761, 0x6F7769, + 0x706F6C, 0x707261, 0x70726F, 0x70727A, 0x727A65, 0x727A79, 0x7369EA, 0x736B69, + 0x737461, 0x776965, 0x796368, 0x796D20, 0x7A6520, 0x7A6965, 0x7A7920, 0xF37720, + ]), + new NGramsPlusLang('ro', [ + 0x206120, 0x206163, 0x206361, 0x206365, 0x20636F, 0x206375, 0x206465, 0x206469, + 0x206C61, 0x206D61, 0x207065, 0x207072, 0x207365, 0x2073E3, 0x20756E, 0x20BA69, + 0x20EE6E, 0x612063, 0x612064, 0x617265, 0x617420, 0x617465, 0x617520, 0x636172, + 0x636F6E, 0x637520, 0x63E320, 0x646520, 0x652061, 0x652063, 0x652064, 0x652070, + 0x652073, 0x656120, 0x656920, 0x656C65, 0x656E74, 0x657374, 0x692061, 0x692063, + 0x692064, 0x692070, 0x696520, 0x696920, 0x696E20, 0x6C6120, 0x6C6520, 0x6C6F72, + 0x6C7569, 0x6E6520, 0x6E7472, 0x6F7220, 0x70656E, 0x726520, 0x726561, 0x727520, + 0x73E320, 0x746520, 0x747275, 0x74E320, 0x756920, 0x756C20, 0xBA6920, 0xEE6E20, + ]) + ]; + }; + + this.name = function(det) { + return (det && det.fC1Bytes) ? 'windows-1250' : 'ISO-8859-2'; + }; + }; + util.inherits(module.exports.ISO_8859_2, sbcs); + + + module.exports.ISO_8859_5 = function() { + this.byteMap = function() { + return [ + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0x20, 0xFE, 0xFF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0x20, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0x20, 0xFE, 0xFF + ]; + }; + + this.ngrams = function() { + return [ + 0x20D220, 0x20D2DE, 0x20D4DE, 0x20D7D0, 0x20D820, 0x20DAD0, 0x20DADE, 0x20DDD0, + 0x20DDD5, 0x20DED1, 0x20DFDE, 0x20DFE0, 0x20E0D0, 0x20E1DE, 0x20E1E2, 0x20E2DE, + 0x20E7E2, 0x20EDE2, 0xD0DDD8, 0xD0E2EC, 0xD3DE20, 0xD5DBEC, 0xD5DDD8, 0xD5E1E2, + 0xD5E220, 0xD820DF, 0xD8D520, 0xD8D820, 0xD8EF20, 0xDBD5DD, 0xDBD820, 0xDBECDD, + 0xDDD020, 0xDDD520, 0xDDD8D5, 0xDDD8EF, 0xDDDE20, 0xDDDED2, 0xDE20D2, 0xDE20DF, + 0xDE20E1, 0xDED220, 0xDED2D0, 0xDED3DE, 0xDED920, 0xDEDBEC, 0xDEDC20, 0xDEE1E2, + 0xDFDEDB, 0xDFE0D5, 0xDFE0D8, 0xDFE0DE, 0xE0D0D2, 0xE0D5D4, 0xE1E2D0, 0xE1E2D2, + 0xE1E2D8, 0xE1EF20, 0xE2D5DB, 0xE2DE20, 0xE2DEE0, 0xE2EC20, 0xE7E2DE, 0xEBE520 + ]; + }; + + this.name = function(det) { + return 'ISO-8859-5'; + }; + + this.language = function() { + return 'ru'; + }; + }; + util.inherits(module.exports.ISO_8859_5, sbcs); + + + module.exports.ISO_8859_6 = function() { + this.byteMap = function() { + return [ + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, + 0xD8, 0xD9, 0xDA, 0x20, 0x20, 0x20, 0x20, 0x20, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 + ]; + }; + + this.ngrams = function() { + return [ + 0x20C7E4, 0x20C7E6, 0x20C8C7, 0x20D9E4, 0x20E1EA, 0x20E4E4, 0x20E5E6, 0x20E8C7, + 0xC720C7, 0xC7C120, 0xC7CA20, 0xC7D120, 0xC7E420, 0xC7E4C3, 0xC7E4C7, 0xC7E4C8, + 0xC7E4CA, 0xC7E4CC, 0xC7E4CD, 0xC7E4CF, 0xC7E4D3, 0xC7E4D9, 0xC7E4E2, 0xC7E4E5, + 0xC7E4E8, 0xC7E4EA, 0xC7E520, 0xC7E620, 0xC7E6CA, 0xC820C7, 0xC920C7, 0xC920E1, + 0xC920E4, 0xC920E5, 0xC920E8, 0xCA20C7, 0xCF20C7, 0xCFC920, 0xD120C7, 0xD1C920, + 0xD320C7, 0xD920C7, 0xD9E4E9, 0xE1EA20, 0xE420C7, 0xE4C920, 0xE4E920, 0xE4EA20, + 0xE520C7, 0xE5C720, 0xE5C920, 0xE5E620, 0xE620C7, 0xE720C7, 0xE7C720, 0xE8C7E4, + 0xE8E620, 0xE920C7, 0xEA20C7, 0xEA20E5, 0xEA20E8, 0xEAC920, 0xEAD120, 0xEAE620 + ]; + }; + + this.name = function(det) { + return 'ISO-8859-6'; + }; + + this.language = function() { + return 'ar'; + }; + }; + util.inherits(module.exports.ISO_8859_6, sbcs); + + + module.exports.ISO_8859_7 = function() { + this.byteMap = function() { + return [ + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0xA1, 0xA2, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xDC, 0x20, + 0xDD, 0xDE, 0xDF, 0x20, 0xFC, 0x20, 0xFD, 0xFE, + 0xC0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0x20, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + 0xF8, 0xF9, 0xFA, 0xFB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0x20 + ]; + }; + + this.ngrams = function() { + return [ + 0x20E1ED, 0x20E1F0, 0x20E3E9, 0x20E4E9, 0x20E5F0, 0x20E720, 0x20EAE1, 0x20ECE5, + 0x20EDE1, 0x20EF20, 0x20F0E1, 0x20F0EF, 0x20F0F1, 0x20F3F4, 0x20F3F5, 0x20F4E7, + 0x20F4EF, 0xDFE120, 0xE120E1, 0xE120F4, 0xE1E920, 0xE1ED20, 0xE1F0FC, 0xE1F220, + 0xE3E9E1, 0xE5E920, 0xE5F220, 0xE720F4, 0xE7ED20, 0xE7F220, 0xE920F4, 0xE9E120, + 0xE9EADE, 0xE9F220, 0xEAE1E9, 0xEAE1F4, 0xECE520, 0xED20E1, 0xED20E5, 0xED20F0, + 0xEDE120, 0xEFF220, 0xEFF520, 0xF0EFF5, 0xF0F1EF, 0xF0FC20, 0xF220E1, 0xF220E5, + 0xF220EA, 0xF220F0, 0xF220F4, 0xF3E520, 0xF3E720, 0xF3F4EF, 0xF4E120, 0xF4E1E9, + 0xF4E7ED, 0xF4E7F2, 0xF4E9EA, 0xF4EF20, 0xF4EFF5, 0xF4F9ED, 0xF9ED20, 0xFEED20 + ]; + }; + + this.name = function(det) { + return (det && det.fC1Bytes) ? 'windows-1253' : 'ISO-8859-7'; + }; + + this.language = function() { + return 'el'; + }; + }; + util.inherits(module.exports.ISO_8859_7, sbcs); + + module.exports.ISO_8859_8 = function() { + + this.byteMap = function() { + return [ + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + 0xF8, 0xF9, 0xFA, 0x20, 0x20, 0x20, 0x20, 0x20 + ]; + }; + + this.ngrams = function() { + return [ + new NGramsPlusLang('he', [ + 0x20E0E5, 0x20E0E7, 0x20E0E9, 0x20E0FA, 0x20E1E9, 0x20E1EE, 0x20E4E0, 0x20E4E5, + 0x20E4E9, 0x20E4EE, 0x20E4F2, 0x20E4F9, 0x20E4FA, 0x20ECE0, 0x20ECE4, 0x20EEE0, + 0x20F2EC, 0x20F9EC, 0xE0FA20, 0xE420E0, 0xE420E1, 0xE420E4, 0xE420EC, 0xE420EE, + 0xE420F9, 0xE4E5E0, 0xE5E020, 0xE5ED20, 0xE5EF20, 0xE5F820, 0xE5FA20, 0xE920E4, + 0xE9E420, 0xE9E5FA, 0xE9E9ED, 0xE9ED20, 0xE9EF20, 0xE9F820, 0xE9FA20, 0xEC20E0, + 0xEC20E4, 0xECE020, 0xECE420, 0xED20E0, 0xED20E1, 0xED20E4, 0xED20EC, 0xED20EE, + 0xED20F9, 0xEEE420, 0xEF20E4, 0xF0E420, 0xF0E920, 0xF0E9ED, 0xF2EC20, 0xF820E4, + 0xF8E9ED, 0xF9EC20, 0xFA20E0, 0xFA20E1, 0xFA20E4, 0xFA20EC, 0xFA20EE, 0xFA20F9, + ]), + new NGramsPlusLang('he', [ + 0x20E0E5, 0x20E0EC, 0x20E4E9, 0x20E4EC, 0x20E4EE, 0x20E4F0, 0x20E9F0, 0x20ECF2, + 0x20ECF9, 0x20EDE5, 0x20EDE9, 0x20EFE5, 0x20EFE9, 0x20F8E5, 0x20F8E9, 0x20FAE0, + 0x20FAE5, 0x20FAE9, 0xE020E4, 0xE020EC, 0xE020ED, 0xE020FA, 0xE0E420, 0xE0E5E4, + 0xE0EC20, 0xE0EE20, 0xE120E4, 0xE120ED, 0xE120FA, 0xE420E4, 0xE420E9, 0xE420EC, + 0xE420ED, 0xE420EF, 0xE420F8, 0xE420FA, 0xE4EC20, 0xE5E020, 0xE5E420, 0xE7E020, + 0xE9E020, 0xE9E120, 0xE9E420, 0xEC20E4, 0xEC20ED, 0xEC20FA, 0xECF220, 0xECF920, + 0xEDE9E9, 0xEDE9F0, 0xEDE9F8, 0xEE20E4, 0xEE20ED, 0xEE20FA, 0xEEE120, 0xEEE420, + 0xF2E420, 0xF920E4, 0xF920ED, 0xF920FA, 0xF9E420, 0xFAE020, 0xFAE420, 0xFAE5E9, + ]) + ]; + }; + + this.name = function(det) { + return (det && det.fC1Bytes) ? 'windows-1255' : 'ISO-8859-8'; + }; + + this.language = function() { + return 'he'; + }; + + }; + util.inherits(module.exports.ISO_8859_8, sbcs); + + + module.exports.ISO_8859_9 = function() { + this.byteMap = function() { + return [ + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, + 0x20, 0x20, 0xBA, 0x20, 0x20, 0x20, 0x20, 0x20, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0x69, 0xFE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF + ]; + }; + + this.ngrams = function() { + return [ + 0x206261, 0x206269, 0x206275, 0x206461, 0x206465, 0x206765, 0x206861, 0x20696C, + 0x206B61, 0x206B6F, 0x206D61, 0x206F6C, 0x207361, 0x207461, 0x207665, 0x207961, + 0x612062, 0x616B20, 0x616C61, 0x616D61, 0x616E20, 0x616EFD, 0x617220, 0x617261, + 0x6172FD, 0x6173FD, 0x617961, 0x626972, 0x646120, 0x646520, 0x646920, 0x652062, + 0x65206B, 0x656469, 0x656E20, 0x657220, 0x657269, 0x657369, 0x696C65, 0x696E20, + 0x696E69, 0x697220, 0x6C616E, 0x6C6172, 0x6C6520, 0x6C6572, 0x6E2061, 0x6E2062, + 0x6E206B, 0x6E6461, 0x6E6465, 0x6E6520, 0x6E6920, 0x6E696E, 0x6EFD20, 0x72696E, + 0x72FD6E, 0x766520, 0x796120, 0x796F72, 0xFD6E20, 0xFD6E64, 0xFD6EFD, 0xFDF0FD + ]; + }; + + this.name = function(det) { + return (det && det.fC1Bytes) ? 'windows-1254' : 'ISO-8859-9'; + }; + + this.language = function() { + return 'tr'; + }; + }; + util.inherits(module.exports.ISO_8859_9, sbcs); + + + module.exports.windows_1251 = function() { + this.byteMap = function() { + return [ + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x90, 0x83, 0x20, 0x83, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x9A, 0x20, 0x9C, 0x9D, 0x9E, 0x9F, + 0x90, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x9A, 0x20, 0x9C, 0x9D, 0x9E, 0x9F, + 0x20, 0xA2, 0xA2, 0xBC, 0x20, 0xB4, 0x20, 0x20, + 0xB8, 0x20, 0xBA, 0x20, 0x20, 0x20, 0x20, 0xBF, + 0x20, 0x20, 0xB3, 0xB3, 0xB4, 0xB5, 0x20, 0x20, + 0xB8, 0x20, 0xBA, 0x20, 0xBC, 0xBE, 0xBE, 0xBF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF + ]; + }; + + this.ngrams = function() { + return [ + 0x20E220, 0x20E2EE, 0x20E4EE, 0x20E7E0, 0x20E820, 0x20EAE0, 0x20EAEE, 0x20EDE0, + 0x20EDE5, 0x20EEE1, 0x20EFEE, 0x20EFF0, 0x20F0E0, 0x20F1EE, 0x20F1F2, 0x20F2EE, + 0x20F7F2, 0x20FDF2, 0xE0EDE8, 0xE0F2FC, 0xE3EE20, 0xE5EBFC, 0xE5EDE8, 0xE5F1F2, + 0xE5F220, 0xE820EF, 0xE8E520, 0xE8E820, 0xE8FF20, 0xEBE5ED, 0xEBE820, 0xEBFCED, + 0xEDE020, 0xEDE520, 0xEDE8E5, 0xEDE8FF, 0xEDEE20, 0xEDEEE2, 0xEE20E2, 0xEE20EF, + 0xEE20F1, 0xEEE220, 0xEEE2E0, 0xEEE3EE, 0xEEE920, 0xEEEBFC, 0xEEEC20, 0xEEF1F2, + 0xEFEEEB, 0xEFF0E5, 0xEFF0E8, 0xEFF0EE, 0xF0E0E2, 0xF0E5E4, 0xF1F2E0, 0xF1F2E2, + 0xF1F2E8, 0xF1FF20, 0xF2E5EB, 0xF2EE20, 0xF2EEF0, 0xF2FC20, 0xF7F2EE, 0xFBF520 + ]; + }; + + this.name = function(det) { + return 'windows-1251'; + }; + + this.language = function() { + return 'ru'; + }; + }; + util.inherits(module.exports.windows_1251, sbcs); + + + module.exports.windows_1256 = function() { + this.byteMap = function() { + return [ + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x81, 0x20, 0x83, 0x20, 0x20, 0x20, 0x20, + 0x88, 0x20, 0x8A, 0x20, 0x9C, 0x8D, 0x8E, 0x8F, + 0x90, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x98, 0x20, 0x9A, 0x20, 0x9C, 0x20, 0x20, 0x9F, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0x20, + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0x20, 0x20, 0x20, 0x20, 0xF4, 0x20, 0x20, 0x20, + 0x20, 0xF9, 0x20, 0xFB, 0xFC, 0x20, 0x20, 0xFF + ]; + }; + + this.ngrams = function() { + return [ + 0x20C7E1, 0x20C7E4, 0x20C8C7, 0x20DAE1, 0x20DDED, 0x20E1E1, 0x20E3E4, 0x20E6C7, + 0xC720C7, 0xC7C120, 0xC7CA20, 0xC7D120, 0xC7E120, 0xC7E1C3, 0xC7E1C7, 0xC7E1C8, + 0xC7E1CA, 0xC7E1CC, 0xC7E1CD, 0xC7E1CF, 0xC7E1D3, 0xC7E1DA, 0xC7E1DE, 0xC7E1E3, + 0xC7E1E6, 0xC7E1ED, 0xC7E320, 0xC7E420, 0xC7E4CA, 0xC820C7, 0xC920C7, 0xC920DD, + 0xC920E1, 0xC920E3, 0xC920E6, 0xCA20C7, 0xCF20C7, 0xCFC920, 0xD120C7, 0xD1C920, + 0xD320C7, 0xDA20C7, 0xDAE1EC, 0xDDED20, 0xE120C7, 0xE1C920, 0xE1EC20, 0xE1ED20, + 0xE320C7, 0xE3C720, 0xE3C920, 0xE3E420, 0xE420C7, 0xE520C7, 0xE5C720, 0xE6C7E1, + 0xE6E420, 0xEC20C7, 0xED20C7, 0xED20E3, 0xED20E6, 0xEDC920, 0xEDD120, 0xEDE420 + ]; + }; + + this.name = function(det) { + return 'windows-1256'; + }; + + this.language = function() { + return 'ar'; + }; + }; + util.inherits(module.exports.windows_1256, sbcs); + + + module.exports.KOI8_R = function() { + this.byteMap = function() { + return [ + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xA3, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xA3, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF + ]; + }; + + this.ngrams = function() { + return [ + 0x20C4CF, 0x20C920, 0x20CBC1, 0x20CBCF, 0x20CEC1, 0x20CEC5, 0x20CFC2, 0x20D0CF, + 0x20D0D2, 0x20D2C1, 0x20D3CF, 0x20D3D4, 0x20D4CF, 0x20D720, 0x20D7CF, 0x20DAC1, + 0x20DCD4, 0x20DED4, 0xC1CEC9, 0xC1D4D8, 0xC5CCD8, 0xC5CEC9, 0xC5D3D4, 0xC5D420, + 0xC7CF20, 0xC920D0, 0xC9C520, 0xC9C920, 0xC9D120, 0xCCC5CE, 0xCCC920, 0xCCD8CE, + 0xCEC120, 0xCEC520, 0xCEC9C5, 0xCEC9D1, 0xCECF20, 0xCECFD7, 0xCF20D0, 0xCF20D3, + 0xCF20D7, 0xCFC7CF, 0xCFCA20, 0xCFCCD8, 0xCFCD20, 0xCFD3D4, 0xCFD720, 0xCFD7C1, + 0xD0CFCC, 0xD0D2C5, 0xD0D2C9, 0xD0D2CF, 0xD2C1D7, 0xD2C5C4, 0xD3D120, 0xD3D4C1, + 0xD3D4C9, 0xD3D4D7, 0xD4C5CC, 0xD4CF20, 0xD4CFD2, 0xD4D820, 0xD9C820, 0xDED4CF + ]; + }; + + this.name = function(det) { + return 'KOI8-R'; + }; + + this.language = function() { + return 'ru'; + }; + }; + util.inherits(module.exports.KOI8_R, sbcs); + + + /* + module.exports.ISO_8859_7 = function() { + this.byteMap = function() { + return [ + + ]; + }; + + this.ngrams = function() { + return [ + + ]; + }; + + this.name = function(det) { + if (typeof det == 'undefined') + return 'ISO-8859-7'; + return det.fC1Bytes ? 'windows-1253' : 'ISO-8859-7'; + }; + + this.language = function() { + return 'el'; + }; + }; + util.inherits(module.exports.ISO_8859_7, sbcs); + */ +} (sbcs$1)); + +var sbcsExports = sbcs$1.exports; + +var iso2022$1 = {exports: {}}; + +(function (module) { + var util = require$$0$3, + Match = match; + + + /** + * This is a superclass for the individual detectors for + * each of the detectable members of the ISO 2022 family + * of encodings. + */ + + function ISO_2022() {} + + ISO_2022.prototype.match = function(det) { + + /** + * Matching function shared among the 2022 detectors JP, CN and KR + * Counts up the number of legal an unrecognized escape sequences in + * the sample of text, and computes a score based on the total number & + * the proportion that fit the encoding. + * + * + * @param text the byte buffer containing text to analyse + * @param textLen the size of the text in the byte. + * @param escapeSequences the byte escape sequences to test for. + * @return match quality, in the range of 0-100. + */ + + var i, j; + var escN; + var hits = 0; + var misses = 0; + var shifts = 0; + var quality; + + // TODO: refactor me + var text = det.fInputBytes; + var textLen = det.fInputLen; + + scanInput: + for (i = 0; i < textLen; i++) { + if (text[i] == 0x1b) { + checkEscapes: + for (escN = 0; escN < this.escapeSequences.length; escN++) { + var seq = this.escapeSequences[escN]; + + if ((textLen - i) < seq.length) + continue checkEscapes; + + for (j = 1; j < seq.length; j++) + if (seq[j] != text[i + j]) + continue checkEscapes; + + + hits++; + i += seq.length - 1; + continue scanInput; + } + + misses++; + } + + // Shift in/out + if (text[i] == 0x0e || text[i] == 0x0f) + shifts++; + + } + + if (hits == 0) + return null; + + // + // Initial quality is based on relative proportion of recongized vs. + // unrecognized escape sequences. + // All good: quality = 100; + // half or less good: quality = 0; + // linear inbetween. + quality = (100 * hits - 100 * misses) / (hits + misses); + + // Back off quality if there were too few escape sequences seen. + // Include shifts in this computation, so that KR does not get penalized + // for having only a single Escape sequence, but many shifts. + if (hits + shifts < 5) + quality -= (5 - (hits + shifts)) * 10; + + return quality <= 0 ? null : new Match(det, this, quality); + }; + + module.exports.ISO_2022_JP = function() { + this.name = function() { + return 'ISO-2022-JP'; + }; + this.escapeSequences = [ + [ 0x1b, 0x24, 0x28, 0x43 ], // KS X 1001:1992 + [ 0x1b, 0x24, 0x28, 0x44 ], // JIS X 212-1990 + [ 0x1b, 0x24, 0x40 ], // JIS C 6226-1978 + [ 0x1b, 0x24, 0x41 ], // GB 2312-80 + [ 0x1b, 0x24, 0x42 ], // JIS X 208-1983 + [ 0x1b, 0x26, 0x40 ], // JIS X 208 1990, 1997 + [ 0x1b, 0x28, 0x42 ], // ASCII + [ 0x1b, 0x28, 0x48 ], // JIS-Roman + [ 0x1b, 0x28, 0x49 ], // Half-width katakana + [ 0x1b, 0x28, 0x4a ], // JIS-Roman + [ 0x1b, 0x2e, 0x41 ], // ISO 8859-1 + [ 0x1b, 0x2e, 0x46 ] // ISO 8859-7 + ]; + }; + util.inherits(module.exports.ISO_2022_JP, ISO_2022); + + + + module.exports.ISO_2022_KR = function() { + this.name = function() { + return 'ISO-2022-KR'; + }; + this.escapeSequences = [ + [ 0x1b, 0x24, 0x29, 0x43 ] + ]; + }; + util.inherits(module.exports.ISO_2022_KR, ISO_2022); + + + + module.exports.ISO_2022_CN = function() { + this.name = function() { + return 'ISO-2022-CN'; + }; + this.escapeSequences = [ + [ 0x1b, 0x24, 0x29, 0x41 ], // GB 2312-80 + [ 0x1b, 0x24, 0x29, 0x47 ], // CNS 11643-1992 Plane 1 + [ 0x1b, 0x24, 0x2A, 0x48 ], // CNS 11643-1992 Plane 2 + [ 0x1b, 0x24, 0x29, 0x45 ], // ISO-IR-165 + [ 0x1b, 0x24, 0x2B, 0x49 ], // CNS 11643-1992 Plane 3 + [ 0x1b, 0x24, 0x2B, 0x4A ], // CNS 11643-1992 Plane 4 + [ 0x1b, 0x24, 0x2B, 0x4B ], // CNS 11643-1992 Plane 5 + [ 0x1b, 0x24, 0x2B, 0x4C ], // CNS 11643-1992 Plane 6 + [ 0x1b, 0x24, 0x2B, 0x4D ], // CNS 11643-1992 Plane 7 + [ 0x1b, 0x4e ], // SS2 + [ 0x1b, 0x4f ] // SS3 + ]; + }; + util.inherits(module.exports.ISO_2022_CN, ISO_2022); +} (iso2022$1)); + +var iso2022Exports = iso2022$1.exports; + +var fs$1 = require$$0$2; + +var utf8 = utf8$1, + unicode = unicodeExports, + mbcs = mbcsExports, + sbcs = sbcsExports, + iso2022 = iso2022Exports; + +var self$1 = commonjsGlobal; + +var recognisers = [ + new utf8, + new unicode.UTF_16BE, + new unicode.UTF_16LE, + new unicode.UTF_32BE, + new unicode.UTF_32LE, + new mbcs.sjis, + new mbcs.big5, + new mbcs.euc_jp, + new mbcs.euc_kr, + new mbcs.gb_18030, + new iso2022.ISO_2022_JP, + new iso2022.ISO_2022_KR, + new iso2022.ISO_2022_CN, + new sbcs.ISO_8859_1, + new sbcs.ISO_8859_2, + new sbcs.ISO_8859_5, + new sbcs.ISO_8859_6, + new sbcs.ISO_8859_7, + new sbcs.ISO_8859_8, + new sbcs.ISO_8859_9, + new sbcs.windows_1251, + new sbcs.windows_1256, + new sbcs.KOI8_R +]; + +chardet.detect = function(buffer, opts) { + + // Tally up the byte occurence statistics. + var fByteStats = []; + for (var i = 0; i < 256; i++) + fByteStats[i] = 0; + + for (var i = buffer.length - 1; i >= 0; i--) + fByteStats[buffer[i] & 0x00ff]++; + + var fC1Bytes = false; + for (var i = 0x80; i <= 0x9F; i += 1) { + if (fByteStats[i] != 0) { + fC1Bytes = true; + break; + } + } + + var context = { + fByteStats: fByteStats, + fC1Bytes: fC1Bytes, + fRawInput: buffer, + fRawLength: buffer.length, + fInputBytes: buffer, + fInputLen: buffer.length + }; + + var matches = recognisers.map(function(rec) { + return rec.match(context); + }).filter(function(match) { + return !!match; + }).sort(function(a, b) { + return b.confidence - a.confidence; + }); + + if (opts && opts.returnAllMatches === true) { + return matches; + } + else { + return matches.length > 0 ? matches[0].name : null; + } +}; + +chardet.detectFile = function(filepath, opts, cb) { + if (typeof opts === 'function') { + cb = opts; + opts = undefined; + } + + var fd; + + var handler = function(err, buffer) { + if (fd) { + fs$1.closeSync(fd); + } + + if (err) return cb(err, null); + cb(null, self$1.detect(buffer, opts)); + }; + + if (opts && opts.sampleSize) { + fd = fs$1.openSync(filepath, 'r'), + sample = Buffer.allocUnsafe(opts.sampleSize); + + fs$1.read(fd, sample, 0, opts.sampleSize, null, function(err) { + handler(err, sample); + }); + return; + } + + fs$1.readFile(filepath, handler); +}; + +chardet.detectFileSync = function(filepath, opts) { + if (opts && opts.sampleSize) { + var fd = fs$1.openSync(filepath, 'r'), + sample = Buffer.allocUnsafe(opts.sampleSize); + + fs$1.readSync(fd, sample, 0, opts.sampleSize); + fs$1.closeSync(fd); + return self$1.detect(sample, opts); + } + + return self$1.detect(fs$1.readFileSync(filepath), opts); +}; + +// Wrappers for the previous functions to return all encodings +chardet.detectAll = function(buffer, opts) { + if (typeof opts !== 'object') { + opts = {}; + } + opts.returnAllMatches = true; + return self$1.detect(buffer, opts); +}; + +chardet.detectFileAll = function(filepath, opts, cb) { + if (typeof opts === 'function') { + cb = opts; + opts = undefined; + } + if (typeof opts !== 'object') { + opts = {}; + } + opts.returnAllMatches = true; + self$1.detectFile(filepath, opts, cb); +}; + +chardet.detectFileAllSync = function(filepath, opts) { + if (typeof opts !== 'object') { + opts = {}; + } + opts.returnAllMatches = true; + return self$1.detectFileSync(filepath, opts); +}; + +var lib = {exports: {}}; + +/* eslint-disable node/no-deprecated-api */ + +var buffer = require$$0$4; +var Buffer$1 = buffer.Buffer; + +var safer = {}; + +var key; + +for (key in buffer) { + if (!buffer.hasOwnProperty(key)) continue + if (key === 'SlowBuffer' || key === 'Buffer') continue + safer[key] = buffer[key]; +} + +var Safer = safer.Buffer = {}; +for (key in Buffer$1) { + if (!Buffer$1.hasOwnProperty(key)) continue + if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue + Safer[key] = Buffer$1[key]; +} + +safer.Buffer.prototype = Buffer$1.prototype; + +if (!Safer.from || Safer.from === Uint8Array.from) { + Safer.from = function (value, encodingOrOffset, length) { + if (typeof value === 'number') { + throw new TypeError('The "value" argument must not be of type number. Received type ' + typeof value) + } + if (value && typeof value.length === 'undefined') { + throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value) + } + return Buffer$1(value, encodingOrOffset, length) + }; +} + +if (!Safer.alloc) { + Safer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size) + } + if (size < 0 || size >= 2 * (1 << 30)) { + throw new RangeError('The value "' + size + '" is invalid for option "size"') + } + var buf = Buffer$1(size); + if (!fill || fill.length === 0) { + buf.fill(0); + } else if (typeof encoding === 'string') { + buf.fill(fill, encoding); + } else { + buf.fill(fill); + } + return buf + }; +} + +if (!safer.kStringMaxLength) { + try { + safer.kStringMaxLength = process.binding('buffer').kStringMaxLength; + } catch (e) { + // we can't determine kStringMaxLength in environments where process.binding + // is unsupported, so let's not set it + } +} + +if (!safer.constants) { + safer.constants = { + MAX_LENGTH: safer.kMaxLength + }; + if (safer.kStringMaxLength) { + safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength; + } +} + +var safer_1 = safer; + +var bomHandling = {}; + +var BOMChar = '\uFEFF'; + +bomHandling.PrependBOM = PrependBOMWrapper; +function PrependBOMWrapper(encoder, options) { + this.encoder = encoder; + this.addBOM = true; +} + +PrependBOMWrapper.prototype.write = function(str) { + if (this.addBOM) { + str = BOMChar + str; + this.addBOM = false; + } + + return this.encoder.write(str); +}; + +PrependBOMWrapper.prototype.end = function() { + return this.encoder.end(); +}; + + +//------------------------------------------------------------------------------ + +bomHandling.StripBOM = StripBOMWrapper; +function StripBOMWrapper(decoder, options) { + this.decoder = decoder; + this.pass = false; + this.options = options || {}; +} + +StripBOMWrapper.prototype.write = function(buf) { + var res = this.decoder.write(buf); + if (this.pass || !res) + return res; + + if (res[0] === BOMChar) { + res = res.slice(1); + if (typeof this.options.stripBOM === 'function') + this.options.stripBOM(); + } + + this.pass = true; + return res; +}; + +StripBOMWrapper.prototype.end = function() { + return this.decoder.end(); +}; + +var encodings = {}; + +var internal; +var hasRequiredInternal; + +function requireInternal () { + if (hasRequiredInternal) return internal; + hasRequiredInternal = 1; + var Buffer = safer_1.Buffer; + + // Export Node.js internal encodings. + + internal = { + // Encodings + utf8: { type: "_internal", bomAware: true}, + cesu8: { type: "_internal", bomAware: true}, + unicode11utf8: "utf8", + + ucs2: { type: "_internal", bomAware: true}, + utf16le: "ucs2", + + binary: { type: "_internal" }, + base64: { type: "_internal" }, + hex: { type: "_internal" }, + + // Codec. + _internal: InternalCodec, + }; + + //------------------------------------------------------------------------------ + + function InternalCodec(codecOptions, iconv) { + this.enc = codecOptions.encodingName; + this.bomAware = codecOptions.bomAware; + + if (this.enc === "base64") + this.encoder = InternalEncoderBase64; + else if (this.enc === "cesu8") { + this.enc = "utf8"; // Use utf8 for decoding. + this.encoder = InternalEncoderCesu8; + + // Add decoder for versions of Node not supporting CESU-8 + if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '💩') { + this.decoder = InternalDecoderCesu8; + this.defaultCharUnicode = iconv.defaultCharUnicode; + } + } + } + + InternalCodec.prototype.encoder = InternalEncoder; + InternalCodec.prototype.decoder = InternalDecoder; + + //------------------------------------------------------------------------------ + + // We use node.js internal decoder. Its signature is the same as ours. + var StringDecoder = require$$1$3.StringDecoder; + + if (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method. + StringDecoder.prototype.end = function() {}; + + + function InternalDecoder(options, codec) { + StringDecoder.call(this, codec.enc); + } + + InternalDecoder.prototype = StringDecoder.prototype; + + + //------------------------------------------------------------------------------ + // Encoder is mostly trivial + + function InternalEncoder(options, codec) { + this.enc = codec.enc; + } + + InternalEncoder.prototype.write = function(str) { + return Buffer.from(str, this.enc); + }; + + InternalEncoder.prototype.end = function() { + }; + + + //------------------------------------------------------------------------------ + // Except base64 encoder, which must keep its state. + + function InternalEncoderBase64(options, codec) { + this.prevStr = ''; + } + + InternalEncoderBase64.prototype.write = function(str) { + str = this.prevStr + str; + var completeQuads = str.length - (str.length % 4); + this.prevStr = str.slice(completeQuads); + str = str.slice(0, completeQuads); + + return Buffer.from(str, "base64"); + }; + + InternalEncoderBase64.prototype.end = function() { + return Buffer.from(this.prevStr, "base64"); + }; + + + //------------------------------------------------------------------------------ + // CESU-8 encoder is also special. + + function InternalEncoderCesu8(options, codec) { + } + + InternalEncoderCesu8.prototype.write = function(str) { + var buf = Buffer.alloc(str.length * 3), bufIdx = 0; + for (var i = 0; i < str.length; i++) { + var charCode = str.charCodeAt(i); + // Naive implementation, but it works because CESU-8 is especially easy + // to convert from UTF-16 (which all JS strings are encoded in). + if (charCode < 0x80) + buf[bufIdx++] = charCode; + else if (charCode < 0x800) { + buf[bufIdx++] = 0xC0 + (charCode >>> 6); + buf[bufIdx++] = 0x80 + (charCode & 0x3f); + } + else { // charCode will always be < 0x10000 in javascript. + buf[bufIdx++] = 0xE0 + (charCode >>> 12); + buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f); + buf[bufIdx++] = 0x80 + (charCode & 0x3f); + } + } + return buf.slice(0, bufIdx); + }; + + InternalEncoderCesu8.prototype.end = function() { + }; + + //------------------------------------------------------------------------------ + // CESU-8 decoder is not implemented in Node v4.0+ + + function InternalDecoderCesu8(options, codec) { + this.acc = 0; + this.contBytes = 0; + this.accBytes = 0; + this.defaultCharUnicode = codec.defaultCharUnicode; + } + + InternalDecoderCesu8.prototype.write = function(buf) { + var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, + res = ''; + for (var i = 0; i < buf.length; i++) { + var curByte = buf[i]; + if ((curByte & 0xC0) !== 0x80) { // Leading byte + if (contBytes > 0) { // Previous code is invalid + res += this.defaultCharUnicode; + contBytes = 0; + } + + if (curByte < 0x80) { // Single-byte code + res += String.fromCharCode(curByte); + } else if (curByte < 0xE0) { // Two-byte code + acc = curByte & 0x1F; + contBytes = 1; accBytes = 1; + } else if (curByte < 0xF0) { // Three-byte code + acc = curByte & 0x0F; + contBytes = 2; accBytes = 1; + } else { // Four or more are not supported for CESU-8. + res += this.defaultCharUnicode; + } + } else { // Continuation byte + if (contBytes > 0) { // We're waiting for it. + acc = (acc << 6) | (curByte & 0x3f); + contBytes--; accBytes++; + if (contBytes === 0) { + // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80) + if (accBytes === 2 && acc < 0x80 && acc > 0) + res += this.defaultCharUnicode; + else if (accBytes === 3 && acc < 0x800) + res += this.defaultCharUnicode; + else + // Actually add character. + res += String.fromCharCode(acc); + } + } else { // Unexpected continuation byte + res += this.defaultCharUnicode; + } + } + } + this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes; + return res; + }; + + InternalDecoderCesu8.prototype.end = function() { + var res = 0; + if (this.contBytes > 0) + res += this.defaultCharUnicode; + return res; + }; + return internal; +} + +var utf16 = {}; + +var hasRequiredUtf16; + +function requireUtf16 () { + if (hasRequiredUtf16) return utf16; + hasRequiredUtf16 = 1; + var Buffer = safer_1.Buffer; + + // Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js + + // == UTF16-BE codec. ========================================================== + + utf16.utf16be = Utf16BECodec; + function Utf16BECodec() { + } + + Utf16BECodec.prototype.encoder = Utf16BEEncoder; + Utf16BECodec.prototype.decoder = Utf16BEDecoder; + Utf16BECodec.prototype.bomAware = true; + + + // -- Encoding + + function Utf16BEEncoder() { + } + + Utf16BEEncoder.prototype.write = function(str) { + var buf = Buffer.from(str, 'ucs2'); + for (var i = 0; i < buf.length; i += 2) { + var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp; + } + return buf; + }; + + Utf16BEEncoder.prototype.end = function() { + }; + + + // -- Decoding + + function Utf16BEDecoder() { + this.overflowByte = -1; + } + + Utf16BEDecoder.prototype.write = function(buf) { + if (buf.length == 0) + return ''; + + var buf2 = Buffer.alloc(buf.length + 1), + i = 0, j = 0; + + if (this.overflowByte !== -1) { + buf2[0] = buf[0]; + buf2[1] = this.overflowByte; + i = 1; j = 2; + } + + for (; i < buf.length-1; i += 2, j+= 2) { + buf2[j] = buf[i+1]; + buf2[j+1] = buf[i]; + } + + this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1; + + return buf2.slice(0, j).toString('ucs2'); + }; + + Utf16BEDecoder.prototype.end = function() { + }; + + + // == UTF-16 codec ============================================================= + // Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic. + // Defaults to UTF-16LE, as it's prevalent and default in Node. + // http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le + // Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'}); + + // Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false). + + utf16.utf16 = Utf16Codec; + function Utf16Codec(codecOptions, iconv) { + this.iconv = iconv; + } + + Utf16Codec.prototype.encoder = Utf16Encoder; + Utf16Codec.prototype.decoder = Utf16Decoder; + + + // -- Encoding (pass-through) + + function Utf16Encoder(options, codec) { + options = options || {}; + if (options.addBOM === undefined) + options.addBOM = true; + this.encoder = codec.iconv.getEncoder('utf-16le', options); + } + + Utf16Encoder.prototype.write = function(str) { + return this.encoder.write(str); + }; + + Utf16Encoder.prototype.end = function() { + return this.encoder.end(); + }; + + + // -- Decoding + + function Utf16Decoder(options, codec) { + this.decoder = null; + this.initialBytes = []; + this.initialBytesLen = 0; + + this.options = options || {}; + this.iconv = codec.iconv; + } + + Utf16Decoder.prototype.write = function(buf) { + if (!this.decoder) { + // Codec is not chosen yet. Accumulate initial bytes. + this.initialBytes.push(buf); + this.initialBytesLen += buf.length; + + if (this.initialBytesLen < 16) // We need more bytes to use space heuristic (see below) + return ''; + + // We have enough bytes -> detect endianness. + var buf = Buffer.concat(this.initialBytes), + encoding = detectEncoding(buf, this.options.defaultEncoding); + this.decoder = this.iconv.getDecoder(encoding, this.options); + this.initialBytes.length = this.initialBytesLen = 0; + } + + return this.decoder.write(buf); + }; + + Utf16Decoder.prototype.end = function() { + if (!this.decoder) { + var buf = Buffer.concat(this.initialBytes), + encoding = detectEncoding(buf, this.options.defaultEncoding); + this.decoder = this.iconv.getDecoder(encoding, this.options); + + var res = this.decoder.write(buf), + trail = this.decoder.end(); + + return trail ? (res + trail) : res; + } + return this.decoder.end(); + }; + + function detectEncoding(buf, defaultEncoding) { + var enc = defaultEncoding || 'utf-16le'; + + if (buf.length >= 2) { + // Check BOM. + if (buf[0] == 0xFE && buf[1] == 0xFF) // UTF-16BE BOM + enc = 'utf-16be'; + else if (buf[0] == 0xFF && buf[1] == 0xFE) // UTF-16LE BOM + enc = 'utf-16le'; + else { + // No BOM found. Try to deduce encoding from initial content. + // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon. + // So, we count ASCII as if it was LE or BE, and decide from that. + var asciiCharsLE = 0, asciiCharsBE = 0, // Counts of chars in both positions + _len = Math.min(buf.length - (buf.length % 2), 64); // Len is always even. + + for (var i = 0; i < _len; i += 2) { + if (buf[i] === 0 && buf[i+1] !== 0) asciiCharsBE++; + if (buf[i] !== 0 && buf[i+1] === 0) asciiCharsLE++; + } + + if (asciiCharsBE > asciiCharsLE) + enc = 'utf-16be'; + else if (asciiCharsBE < asciiCharsLE) + enc = 'utf-16le'; + } + } + + return enc; + } + return utf16; +} + +var utf7 = {}; + +var hasRequiredUtf7; + +function requireUtf7 () { + if (hasRequiredUtf7) return utf7; + hasRequiredUtf7 = 1; + var Buffer = safer_1.Buffer; + + // UTF-7 codec, according to https://tools.ietf.org/html/rfc2152 + // See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3 + + utf7.utf7 = Utf7Codec; + utf7.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7 + function Utf7Codec(codecOptions, iconv) { + this.iconv = iconv; + } + Utf7Codec.prototype.encoder = Utf7Encoder; + Utf7Codec.prototype.decoder = Utf7Decoder; + Utf7Codec.prototype.bomAware = true; + + + // -- Encoding + + var nonDirectChars = /[^A-Za-z0-9'\(\),-\.\/:\? \n\r\t]+/g; + + function Utf7Encoder(options, codec) { + this.iconv = codec.iconv; + } + + Utf7Encoder.prototype.write = function(str) { + // Naive implementation. + // Non-direct chars are encoded as "+-"; single "+" char is encoded as "+-". + return Buffer.from(str.replace(nonDirectChars, function(chunk) { + return "+" + (chunk === '+' ? '' : + this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) + + "-"; + }.bind(this))); + }; + + Utf7Encoder.prototype.end = function() { + }; + + + // -- Decoding + + function Utf7Decoder(options, codec) { + this.iconv = codec.iconv; + this.inBase64 = false; + this.base64Accum = ''; + } + + var base64Regex = /[A-Za-z0-9\/+]/; + var base64Chars = []; + for (var i = 0; i < 256; i++) + base64Chars[i] = base64Regex.test(String.fromCharCode(i)); + + var plusChar = '+'.charCodeAt(0), + minusChar = '-'.charCodeAt(0), + andChar = '&'.charCodeAt(0); + + Utf7Decoder.prototype.write = function(buf) { + var res = "", lastI = 0, + inBase64 = this.inBase64, + base64Accum = this.base64Accum; + + // The decoder is more involved as we must handle chunks in stream. + + for (var i = 0; i < buf.length; i++) { + if (!inBase64) { // We're in direct mode. + // Write direct chars until '+' + if (buf[i] == plusChar) { + res += this.iconv.decode(buf.slice(lastI, i), "ascii"); // Write direct chars. + lastI = i+1; + inBase64 = true; + } + } else { // We decode base64. + if (!base64Chars[buf[i]]) { // Base64 ended. + if (i == lastI && buf[i] == minusChar) {// "+-" -> "+" + res += "+"; + } else { + var b64str = base64Accum + buf.slice(lastI, i).toString(); + res += this.iconv.decode(Buffer.from(b64str, 'base64'), "utf16-be"); + } + + if (buf[i] != minusChar) // Minus is absorbed after base64. + i--; + + lastI = i+1; + inBase64 = false; + base64Accum = ''; + } + } + } + + if (!inBase64) { + res += this.iconv.decode(buf.slice(lastI), "ascii"); // Write direct chars. + } else { + var b64str = base64Accum + buf.slice(lastI).toString(); + + var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars. + base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future. + b64str = b64str.slice(0, canBeDecoded); + + res += this.iconv.decode(Buffer.from(b64str, 'base64'), "utf16-be"); + } + + this.inBase64 = inBase64; + this.base64Accum = base64Accum; + + return res; + }; + + Utf7Decoder.prototype.end = function() { + var res = ""; + if (this.inBase64 && this.base64Accum.length > 0) + res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), "utf16-be"); + + this.inBase64 = false; + this.base64Accum = ''; + return res; + }; + + + // UTF-7-IMAP codec. + // RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3) + // Differences: + // * Base64 part is started by "&" instead of "+" + // * Direct characters are 0x20-0x7E, except "&" (0x26) + // * In Base64, "," is used instead of "/" + // * Base64 must not be used to represent direct characters. + // * No implicit shift back from Base64 (should always end with '-') + // * String must end in non-shifted position. + // * "-&" while in base64 is not allowed. + + + utf7.utf7imap = Utf7IMAPCodec; + function Utf7IMAPCodec(codecOptions, iconv) { + this.iconv = iconv; + } + Utf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder; + Utf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder; + Utf7IMAPCodec.prototype.bomAware = true; + + + // -- Encoding + + function Utf7IMAPEncoder(options, codec) { + this.iconv = codec.iconv; + this.inBase64 = false; + this.base64Accum = Buffer.alloc(6); + this.base64AccumIdx = 0; + } + + Utf7IMAPEncoder.prototype.write = function(str) { + var inBase64 = this.inBase64, + base64Accum = this.base64Accum, + base64AccumIdx = this.base64AccumIdx, + buf = Buffer.alloc(str.length*5 + 10), bufIdx = 0; + + for (var i = 0; i < str.length; i++) { + var uChar = str.charCodeAt(i); + if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'. + if (inBase64) { + if (base64AccumIdx > 0) { + bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\//g, ',').replace(/=+$/, ''), bufIdx); + base64AccumIdx = 0; + } + + buf[bufIdx++] = minusChar; // Write '-', then go to direct mode. + inBase64 = false; + } + + if (!inBase64) { + buf[bufIdx++] = uChar; // Write direct character + + if (uChar === andChar) // Ampersand -> '&-' + buf[bufIdx++] = minusChar; + } + + } else { // Non-direct character + if (!inBase64) { + buf[bufIdx++] = andChar; // Write '&', then go to base64 mode. + inBase64 = true; + } + if (inBase64) { + base64Accum[base64AccumIdx++] = uChar >> 8; + base64Accum[base64AccumIdx++] = uChar & 0xFF; + + if (base64AccumIdx == base64Accum.length) { + bufIdx += buf.write(base64Accum.toString('base64').replace(/\//g, ','), bufIdx); + base64AccumIdx = 0; + } + } + } + } + + this.inBase64 = inBase64; + this.base64AccumIdx = base64AccumIdx; + + return buf.slice(0, bufIdx); + }; + + Utf7IMAPEncoder.prototype.end = function() { + var buf = Buffer.alloc(10), bufIdx = 0; + if (this.inBase64) { + if (this.base64AccumIdx > 0) { + bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\//g, ',').replace(/=+$/, ''), bufIdx); + this.base64AccumIdx = 0; + } + + buf[bufIdx++] = minusChar; // Write '-', then go to direct mode. + this.inBase64 = false; + } + + return buf.slice(0, bufIdx); + }; + + + // -- Decoding + + function Utf7IMAPDecoder(options, codec) { + this.iconv = codec.iconv; + this.inBase64 = false; + this.base64Accum = ''; + } + + var base64IMAPChars = base64Chars.slice(); + base64IMAPChars[','.charCodeAt(0)] = true; + + Utf7IMAPDecoder.prototype.write = function(buf) { + var res = "", lastI = 0, + inBase64 = this.inBase64, + base64Accum = this.base64Accum; + + // The decoder is more involved as we must handle chunks in stream. + // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end). + + for (var i = 0; i < buf.length; i++) { + if (!inBase64) { // We're in direct mode. + // Write direct chars until '&' + if (buf[i] == andChar) { + res += this.iconv.decode(buf.slice(lastI, i), "ascii"); // Write direct chars. + lastI = i+1; + inBase64 = true; + } + } else { // We decode base64. + if (!base64IMAPChars[buf[i]]) { // Base64 ended. + if (i == lastI && buf[i] == minusChar) { // "&-" -> "&" + res += "&"; + } else { + var b64str = base64Accum + buf.slice(lastI, i).toString().replace(/,/g, '/'); + res += this.iconv.decode(Buffer.from(b64str, 'base64'), "utf16-be"); + } + + if (buf[i] != minusChar) // Minus may be absorbed after base64. + i--; + + lastI = i+1; + inBase64 = false; + base64Accum = ''; + } + } + } + + if (!inBase64) { + res += this.iconv.decode(buf.slice(lastI), "ascii"); // Write direct chars. + } else { + var b64str = base64Accum + buf.slice(lastI).toString().replace(/,/g, '/'); + + var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars. + base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future. + b64str = b64str.slice(0, canBeDecoded); + + res += this.iconv.decode(Buffer.from(b64str, 'base64'), "utf16-be"); + } + + this.inBase64 = inBase64; + this.base64Accum = base64Accum; + + return res; + }; + + Utf7IMAPDecoder.prototype.end = function() { + var res = ""; + if (this.inBase64 && this.base64Accum.length > 0) + res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), "utf16-be"); + + this.inBase64 = false; + this.base64Accum = ''; + return res; + }; + return utf7; +} + +var sbcsCodec = {}; + +var hasRequiredSbcsCodec; + +function requireSbcsCodec () { + if (hasRequiredSbcsCodec) return sbcsCodec; + hasRequiredSbcsCodec = 1; + var Buffer = safer_1.Buffer; + + // Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that + // correspond to encoded bytes (if 128 - then lower half is ASCII). + + sbcsCodec._sbcs = SBCSCodec; + function SBCSCodec(codecOptions, iconv) { + if (!codecOptions) + throw new Error("SBCS codec is called without the data.") + + // Prepare char buffer for decoding. + if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256)) + throw new Error("Encoding '"+codecOptions.type+"' has incorrect 'chars' (must be of len 128 or 256)"); + + if (codecOptions.chars.length === 128) { + var asciiString = ""; + for (var i = 0; i < 128; i++) + asciiString += String.fromCharCode(i); + codecOptions.chars = asciiString + codecOptions.chars; + } + + this.decodeBuf = Buffer.from(codecOptions.chars, 'ucs2'); + + // Encoding buffer. + var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0)); + + for (var i = 0; i < codecOptions.chars.length; i++) + encodeBuf[codecOptions.chars.charCodeAt(i)] = i; + + this.encodeBuf = encodeBuf; + } + + SBCSCodec.prototype.encoder = SBCSEncoder; + SBCSCodec.prototype.decoder = SBCSDecoder; + + + function SBCSEncoder(options, codec) { + this.encodeBuf = codec.encodeBuf; + } + + SBCSEncoder.prototype.write = function(str) { + var buf = Buffer.alloc(str.length); + for (var i = 0; i < str.length; i++) + buf[i] = this.encodeBuf[str.charCodeAt(i)]; + + return buf; + }; + + SBCSEncoder.prototype.end = function() { + }; + + + function SBCSDecoder(options, codec) { + this.decodeBuf = codec.decodeBuf; + } + + SBCSDecoder.prototype.write = function(buf) { + // Strings are immutable in JS -> we use ucs2 buffer to speed up computations. + var decodeBuf = this.decodeBuf; + var newBuf = Buffer.alloc(buf.length*2); + var idx1 = 0, idx2 = 0; + for (var i = 0; i < buf.length; i++) { + idx1 = buf[i]*2; idx2 = i*2; + newBuf[idx2] = decodeBuf[idx1]; + newBuf[idx2+1] = decodeBuf[idx1+1]; + } + return newBuf.toString('ucs2'); + }; + + SBCSDecoder.prototype.end = function() { + }; + return sbcsCodec; +} + +var sbcsData; +var hasRequiredSbcsData; + +function requireSbcsData () { + if (hasRequiredSbcsData) return sbcsData; + hasRequiredSbcsData = 1; + + // Manually added data to be used by sbcs codec in addition to generated one. + + sbcsData = { + // Not supported by iconv, not sure why. + "10029": "maccenteuro", + "maccenteuro": { + "type": "_sbcs", + "chars": "ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ" + }, + + "808": "cp808", + "ibm808": "cp808", + "cp808": { + "type": "_sbcs", + "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№€■ " + }, + + "mik": { + "type": "_sbcs", + "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя└┴┬├─┼╣║╚╔╩╦╠═╬┐░▒▓│┤№§╗╝┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " + }, + + // Aliases of generated encodings. + "ascii8bit": "ascii", + "usascii": "ascii", + "ansix34": "ascii", + "ansix341968": "ascii", + "ansix341986": "ascii", + "csascii": "ascii", + "cp367": "ascii", + "ibm367": "ascii", + "isoir6": "ascii", + "iso646us": "ascii", + "iso646irv": "ascii", + "us": "ascii", + + "latin1": "iso88591", + "latin2": "iso88592", + "latin3": "iso88593", + "latin4": "iso88594", + "latin5": "iso88599", + "latin6": "iso885910", + "latin7": "iso885913", + "latin8": "iso885914", + "latin9": "iso885915", + "latin10": "iso885916", + + "csisolatin1": "iso88591", + "csisolatin2": "iso88592", + "csisolatin3": "iso88593", + "csisolatin4": "iso88594", + "csisolatincyrillic": "iso88595", + "csisolatinarabic": "iso88596", + "csisolatingreek" : "iso88597", + "csisolatinhebrew": "iso88598", + "csisolatin5": "iso88599", + "csisolatin6": "iso885910", + + "l1": "iso88591", + "l2": "iso88592", + "l3": "iso88593", + "l4": "iso88594", + "l5": "iso88599", + "l6": "iso885910", + "l7": "iso885913", + "l8": "iso885914", + "l9": "iso885915", + "l10": "iso885916", + + "isoir14": "iso646jp", + "isoir57": "iso646cn", + "isoir100": "iso88591", + "isoir101": "iso88592", + "isoir109": "iso88593", + "isoir110": "iso88594", + "isoir144": "iso88595", + "isoir127": "iso88596", + "isoir126": "iso88597", + "isoir138": "iso88598", + "isoir148": "iso88599", + "isoir157": "iso885910", + "isoir166": "tis620", + "isoir179": "iso885913", + "isoir199": "iso885914", + "isoir203": "iso885915", + "isoir226": "iso885916", + + "cp819": "iso88591", + "ibm819": "iso88591", + + "cyrillic": "iso88595", + + "arabic": "iso88596", + "arabic8": "iso88596", + "ecma114": "iso88596", + "asmo708": "iso88596", + + "greek" : "iso88597", + "greek8" : "iso88597", + "ecma118" : "iso88597", + "elot928" : "iso88597", + + "hebrew": "iso88598", + "hebrew8": "iso88598", + + "turkish": "iso88599", + "turkish8": "iso88599", + + "thai": "iso885911", + "thai8": "iso885911", + + "celtic": "iso885914", + "celtic8": "iso885914", + "isoceltic": "iso885914", + + "tis6200": "tis620", + "tis62025291": "tis620", + "tis62025330": "tis620", + + "10000": "macroman", + "10006": "macgreek", + "10007": "maccyrillic", + "10079": "maciceland", + "10081": "macturkish", + + "cspc8codepage437": "cp437", + "cspc775baltic": "cp775", + "cspc850multilingual": "cp850", + "cspcp852": "cp852", + "cspc862latinhebrew": "cp862", + "cpgr": "cp869", + + "msee": "cp1250", + "mscyrl": "cp1251", + "msansi": "cp1252", + "msgreek": "cp1253", + "msturk": "cp1254", + "mshebr": "cp1255", + "msarab": "cp1256", + "winbaltrim": "cp1257", + + "cp20866": "koi8r", + "20866": "koi8r", + "ibm878": "koi8r", + "cskoi8r": "koi8r", + + "cp21866": "koi8u", + "21866": "koi8u", + "ibm1168": "koi8u", + + "strk10482002": "rk1048", + + "tcvn5712": "tcvn", + "tcvn57121": "tcvn", + + "gb198880": "iso646cn", + "cn": "iso646cn", + + "csiso14jisc6220ro": "iso646jp", + "jisc62201969ro": "iso646jp", + "jp": "iso646jp", + + "cshproman8": "hproman8", + "r8": "hproman8", + "roman8": "hproman8", + "xroman8": "hproman8", + "ibm1051": "hproman8", + + "mac": "macintosh", + "csmacintosh": "macintosh", + }; + return sbcsData; +} + +var sbcsDataGenerated; +var hasRequiredSbcsDataGenerated; + +function requireSbcsDataGenerated () { + if (hasRequiredSbcsDataGenerated) return sbcsDataGenerated; + hasRequiredSbcsDataGenerated = 1; + + // Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script. + sbcsDataGenerated = { + "437": "cp437", + "737": "cp737", + "775": "cp775", + "850": "cp850", + "852": "cp852", + "855": "cp855", + "856": "cp856", + "857": "cp857", + "858": "cp858", + "860": "cp860", + "861": "cp861", + "862": "cp862", + "863": "cp863", + "864": "cp864", + "865": "cp865", + "866": "cp866", + "869": "cp869", + "874": "windows874", + "922": "cp922", + "1046": "cp1046", + "1124": "cp1124", + "1125": "cp1125", + "1129": "cp1129", + "1133": "cp1133", + "1161": "cp1161", + "1162": "cp1162", + "1163": "cp1163", + "1250": "windows1250", + "1251": "windows1251", + "1252": "windows1252", + "1253": "windows1253", + "1254": "windows1254", + "1255": "windows1255", + "1256": "windows1256", + "1257": "windows1257", + "1258": "windows1258", + "28591": "iso88591", + "28592": "iso88592", + "28593": "iso88593", + "28594": "iso88594", + "28595": "iso88595", + "28596": "iso88596", + "28597": "iso88597", + "28598": "iso88598", + "28599": "iso88599", + "28600": "iso885910", + "28601": "iso885911", + "28603": "iso885913", + "28604": "iso885914", + "28605": "iso885915", + "28606": "iso885916", + "windows874": { + "type": "_sbcs", + "chars": "€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" + }, + "win874": "windows874", + "cp874": "windows874", + "windows1250": { + "type": "_sbcs", + "chars": "€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙" + }, + "win1250": "windows1250", + "cp1250": "windows1250", + "windows1251": { + "type": "_sbcs", + "chars": "ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя" + }, + "win1251": "windows1251", + "cp1251": "windows1251", + "windows1252": { + "type": "_sbcs", + "chars": "€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" + }, + "win1252": "windows1252", + "cp1252": "windows1252", + "windows1253": { + "type": "_sbcs", + "chars": "€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�" + }, + "win1253": "windows1253", + "cp1253": "windows1253", + "windows1254": { + "type": "_sbcs", + "chars": "€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ" + }, + "win1254": "windows1254", + "cp1254": "windows1254", + "windows1255": { + "type": "_sbcs", + "chars": "€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�" + }, + "win1255": "windows1255", + "cp1255": "windows1255", + "windows1256": { + "type": "_sbcs", + "chars": "€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں ،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے" + }, + "win1256": "windows1256", + "cp1256": "windows1256", + "windows1257": { + "type": "_sbcs", + "chars": "€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙" + }, + "win1257": "windows1257", + "cp1257": "windows1257", + "windows1258": { + "type": "_sbcs", + "chars": "€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ" + }, + "win1258": "windows1258", + "cp1258": "windows1258", + "iso88591": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" + }, + "cp28591": "iso88591", + "iso88592": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ą˘Ł¤ĽŚ§¨ŠŞŤŹ­ŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙" + }, + "cp28592": "iso88592", + "iso88593": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ħ˘£¤�Ĥ§¨İŞĞĴ­�ݰħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙" + }, + "cp28593": "iso88593", + "iso88594": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙" + }, + "cp28594": "iso88594", + "iso88595": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ" + }, + "cp28595": "iso88595", + "iso88596": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ���¤�������،­�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������" + }, + "cp28596": "iso88596", + "iso88597": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ‘’£€₯¦§¨©ͺ«¬­�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�" + }, + "cp28597": "iso88597", + "iso88598": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ �¢£¤¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�" + }, + "cp28598": "iso88598", + "iso88599": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ" + }, + "cp28599": "iso88599", + "iso885910": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĒĢĪĨͧĻĐŠŦŽ­ŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ" + }, + "cp28600": "iso885910", + "iso885911": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" + }, + "cp28601": "iso885911", + "iso885913": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’" + }, + "cp28603": "iso885913", + "iso885914": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ­®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ" + }, + "cp28604": "iso885914", + "iso885915": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" + }, + "cp28605": "iso885915", + "iso885916": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄąŁ€„Чš©Ș«Ź­źŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ" + }, + "cp28606": "iso885916", + "cp437": { + "type": "_sbcs", + "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " + }, + "ibm437": "cp437", + "csibm437": "cp437", + "cp737": { + "type": "_sbcs", + "chars": "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ " + }, + "ibm737": "cp737", + "csibm737": "cp737", + "cp775": { + "type": "_sbcs", + "chars": "ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£Ø×¤ĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’­±“¾¶§÷„°∙·¹³²■ " + }, + "ibm775": "cp775", + "csibm775": "cp775", + "cp850": { + "type": "_sbcs", + "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ " + }, + "ibm850": "cp850", + "csibm850": "cp850", + "cp852": { + "type": "_sbcs", + "chars": "ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■ " + }, + "ibm852": "cp852", + "csibm852": "cp852", + "cp855": { + "type": "_sbcs", + "chars": "ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№­ыЫзЗшШэЭщЩчЧ§■ " + }, + "ibm855": "cp855", + "csibm855": "cp855", + "cp856": { + "type": "_sbcs", + "chars": "אבגדהוזחטיךכלםמןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗╝¢¥┐└┴┬├─┼��╚╔╩╦╠═╬¤���������┘┌█▄¦�▀������µ�������¯´­±‗¾¶§÷¸°¨·¹³²■ " + }, + "ibm856": "cp856", + "csibm856": "cp856", + "cp857": { + "type": "_sbcs", + "chars": "ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■ " + }, + "ibm857": "cp857", + "csibm857": "cp857", + "cp858": { + "type": "_sbcs", + "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ " + }, + "ibm858": "cp858", + "csibm858": "cp858", + "cp860": { + "type": "_sbcs", + "chars": "ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñѪº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " + }, + "ibm860": "cp860", + "csibm860": "cp860", + "cp861": { + "type": "_sbcs", + "chars": "ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " + }, + "ibm861": "cp861", + "csibm861": "cp861", + "cp862": { + "type": "_sbcs", + "chars": "אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " + }, + "ibm862": "cp862", + "csibm862": "cp862", + "cp863": { + "type": "_sbcs", + "chars": "ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " + }, + "ibm863": "cp863", + "csibm863": "cp863", + "cp864": { + "type": "_sbcs", + "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$٪&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ� ­ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�" + }, + "ibm864": "cp864", + "csibm864": "cp864", + "cp865": { + "type": "_sbcs", + "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " + }, + "ibm865": "cp865", + "csibm865": "cp865", + "cp866": { + "type": "_sbcs", + "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ " + }, + "ibm866": "cp866", + "csibm866": "cp866", + "cp869": { + "type": "_sbcs", + "chars": "������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄­±υφχ§ψ΅°¨ωϋΰώ■ " + }, + "ibm869": "cp869", + "csibm869": "cp869", + "cp922": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŠÑÒÓÔÕÖרÙÚÛÜÝŽßàáâãäåæçèéêëìíîïšñòóôõö÷øùúûüýžÿ" + }, + "ibm922": "cp922", + "csibm922": "cp922", + "cp1046": { + "type": "_sbcs", + "chars": "ﺈ×÷ﹱˆ■│─┐┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎﻏﻐﻶﻸﻺﻼ ¤ﺋﺑﺗﺛﺟﺣ،­ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـفقكلمنهوىيًٌٍَُِّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�" + }, + "ibm1046": "cp1046", + "csibm1046": "cp1046", + "cp1124": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂҐЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђґєѕіїјљњћќ§ўџ" + }, + "ibm1124": "cp1124", + "csibm1124": "cp1124", + "cp1125": { + "type": "_sbcs", + "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёҐґЄєІіЇї·√№¤■ " + }, + "ibm1125": "cp1125", + "csibm1125": "cp1125", + "cp1129": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ" + }, + "ibm1129": "cp1129", + "csibm1129": "cp1129", + "cp1133": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮ���ຯະາຳິີຶືຸູຼັົຽ���ເແໂໃໄ່້໊໋໌ໍໆ�ໜໝ₭����������������໐໑໒໓໔໕໖໗໘໙��¢¬¦�" + }, + "ibm1133": "cp1133", + "csibm1133": "cp1133", + "cp1161": { + "type": "_sbcs", + "chars": "��������������������������������่กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู้๊๋€฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛¢¬¦ " + }, + "ibm1161": "cp1161", + "csibm1161": "cp1161", + "cp1162": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" + }, + "ibm1162": "cp1162", + "csibm1162": "cp1162", + "cp1163": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ" + }, + "ibm1163": "cp1163", + "csibm1163": "cp1163", + "maccroatian": { + "type": "_sbcs", + "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ" + }, + "maccyrillic": { + "type": "_sbcs", + "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤" + }, + "macgreek": { + "type": "_sbcs", + "chars": "Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�" + }, + "maciceland": { + "type": "_sbcs", + "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" + }, + "macroman": { + "type": "_sbcs", + "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" + }, + "macromania": { + "type": "_sbcs", + "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" + }, + "macthai": { + "type": "_sbcs", + "chars": "«»…“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู​–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����" + }, + "macturkish": { + "type": "_sbcs", + "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ" + }, + "macukraine": { + "type": "_sbcs", + "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤" + }, + "koi8r": { + "type": "_sbcs", + "chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" + }, + "koi8u": { + "type": "_sbcs", + "chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" + }, + "koi8ru": { + "type": "_sbcs", + "chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" + }, + "koi8t": { + "type": "_sbcs", + "chars": "қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“”•–—�™�›�����ӯӮё¤ӣ¦§���«¬­®�°±²Ё�Ӣ¶·�№�»���©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" + }, + "armscii8": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ �և։)(»«—.՝,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆ՚�" + }, + "rk1048": { + "type": "_sbcs", + "chars": "ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ ҰұӘ¤Ө¦§Ё©Ғ«¬­®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя" + }, + "tcvn": { + "type": "_sbcs", + "chars": "\u0000ÚỤ\u0003ỪỬỮ\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010ỨỰỲỶỸÝỴ\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÀẢÃÁẠẶẬÈẺẼÉẸỆÌỈĨÍỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ ĂÂÊÔƠƯĐăâêôơưđẶ̀̀̉̃́àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹềểễếệìỉỄẾỒĩíịòỔỏõóọồổỗốộờởỡớợùỖủũúụừửữứựỳỷỹýỵỐ" + }, + "georgianacademy": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶçèéêëìíîïðñòóôõö÷øùúûüýþÿ" + }, + "georgianps": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზჱთიკლმნჲოპჟრსტჳუფქღყშჩცძწჭხჴჯჰჵæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" + }, + "pt154": { + "type": "_sbcs", + "chars": "ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“”•–—ҳҷҡӣңқһҹ ЎўЈӨҘҰ§Ё©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫҝАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя" + }, + "viscii": { + "type": "_sbcs", + "chars": "\u0000\u0001Ẳ\u0003\u0004ẴẪ\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013Ỷ\u0015\u0016\u0017\u0018Ỹ\u001a\u001b\u001c\u001dỴ\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆỐỒỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếềểễệốồổỗỠƠộờởịỰỨỪỬơớƯÀÁÂÃẢĂẳẵÈÉÊẺÌÍĨỳĐứÒÓÔạỷừửÙÚỹỵÝỡưàáâãảăữẫèéêẻìíĩỉđựòóôõỏọụùúũủýợỮ" + }, + "iso646cn": { + "type": "_sbcs", + "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������" + }, + "iso646jp": { + "type": "_sbcs", + "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������" + }, + "hproman8": { + "type": "_sbcs", + "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ÀÂÈÊËÎÏ´ˋˆ¨˜ÙÛ₤¯Ýý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉïßÔÁÃãÐðÍÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�" + }, + "macintosh": { + "type": "_sbcs", + "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" + }, + "ascii": { + "type": "_sbcs", + "chars": "��������������������������������������������������������������������������������������������������������������������������������" + }, + "tis620": { + "type": "_sbcs", + "chars": "���������������������������������กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" + } + }; + return sbcsDataGenerated; +} + +var dbcsCodec = {}; + +var hasRequiredDbcsCodec; + +function requireDbcsCodec () { + if (hasRequiredDbcsCodec) return dbcsCodec; + hasRequiredDbcsCodec = 1; + var Buffer = safer_1.Buffer; + + // Multibyte codec. In this scheme, a character is represented by 1 or more bytes. + // Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences. + // To save memory and loading time, we read table files only when requested. + + dbcsCodec._dbcs = DBCSCodec; + + var UNASSIGNED = -1, + GB18030_CODE = -2, + SEQ_START = -10, + NODE_START = -1000, + UNASSIGNED_NODE = new Array(0x100), + DEF_CHAR = -1; + + for (var i = 0; i < 0x100; i++) + UNASSIGNED_NODE[i] = UNASSIGNED; + + + // Class DBCSCodec reads and initializes mapping tables. + function DBCSCodec(codecOptions, iconv) { + this.encodingName = codecOptions.encodingName; + if (!codecOptions) + throw new Error("DBCS codec is called without the data.") + if (!codecOptions.table) + throw new Error("Encoding '" + this.encodingName + "' has no data."); + + // Load tables. + var mappingTable = codecOptions.table(); + + + // Decode tables: MBCS -> Unicode. + + // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256. + // Trie root is decodeTables[0]. + // Values: >= 0 -> unicode character code. can be > 0xFFFF + // == UNASSIGNED -> unknown/unassigned sequence. + // == GB18030_CODE -> this is the end of a GB18030 4-byte sequence. + // <= NODE_START -> index of the next node in our trie to process next byte. + // <= SEQ_START -> index of the start of a character code sequence, in decodeTableSeq. + this.decodeTables = []; + this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node. + + // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. + this.decodeTableSeq = []; + + // Actual mapping tables consist of chunks. Use them to fill up decode tables. + for (var i = 0; i < mappingTable.length; i++) + this._addDecodeChunk(mappingTable[i]); + + this.defaultCharUnicode = iconv.defaultCharUnicode; + + + // Encode tables: Unicode -> DBCS. + + // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance. + // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null. + // Values: >= 0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.). + // == UNASSIGNED -> no conversion found. Output a default char. + // <= SEQ_START -> it's an index in encodeTableSeq, see below. The character starts a sequence. + this.encodeTable = []; + + // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of + // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key + // means end of sequence (needed when one sequence is a strict subsequence of another). + // Objects are kept separately from encodeTable to increase performance. + this.encodeTableSeq = []; + + // Some chars can be decoded, but need not be encoded. + var skipEncodeChars = {}; + if (codecOptions.encodeSkipVals) + for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) { + var val = codecOptions.encodeSkipVals[i]; + if (typeof val === 'number') + skipEncodeChars[val] = true; + else + for (var j = val.from; j <= val.to; j++) + skipEncodeChars[j] = true; + } + + // Use decode trie to recursively fill out encode tables. + this._fillEncodeTable(0, 0, skipEncodeChars); + + // Add more encoding pairs when needed. + if (codecOptions.encodeAdd) { + for (var uChar in codecOptions.encodeAdd) + if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar)) + this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]); + } + + this.defCharSB = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)]; + if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?']; + if (this.defCharSB === UNASSIGNED) this.defCharSB = "?".charCodeAt(0); + + + // Load & create GB18030 tables when needed. + if (typeof codecOptions.gb18030 === 'function') { + this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges. + + // Add GB18030 decode tables. + var thirdByteNodeIdx = this.decodeTables.length; + var thirdByteNode = this.decodeTables[thirdByteNodeIdx] = UNASSIGNED_NODE.slice(0); + + var fourthByteNodeIdx = this.decodeTables.length; + var fourthByteNode = this.decodeTables[fourthByteNodeIdx] = UNASSIGNED_NODE.slice(0); + + for (var i = 0x81; i <= 0xFE; i++) { + var secondByteNodeIdx = NODE_START - this.decodeTables[0][i]; + var secondByteNode = this.decodeTables[secondByteNodeIdx]; + for (var j = 0x30; j <= 0x39; j++) + secondByteNode[j] = NODE_START - thirdByteNodeIdx; + } + for (var i = 0x81; i <= 0xFE; i++) + thirdByteNode[i] = NODE_START - fourthByteNodeIdx; + for (var i = 0x30; i <= 0x39; i++) + fourthByteNode[i] = GB18030_CODE; + } + } + + DBCSCodec.prototype.encoder = DBCSEncoder; + DBCSCodec.prototype.decoder = DBCSDecoder; + + // Decoder helpers + DBCSCodec.prototype._getDecodeTrieNode = function(addr) { + var bytes = []; + for (; addr > 0; addr >>= 8) + bytes.push(addr & 0xFF); + if (bytes.length == 0) + bytes.push(0); + + var node = this.decodeTables[0]; + for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie. + var val = node[bytes[i]]; + + if (val == UNASSIGNED) { // Create new node. + node[bytes[i]] = NODE_START - this.decodeTables.length; + this.decodeTables.push(node = UNASSIGNED_NODE.slice(0)); + } + else if (val <= NODE_START) { // Existing node. + node = this.decodeTables[NODE_START - val]; + } + else + throw new Error("Overwrite byte in " + this.encodingName + ", addr: " + addr.toString(16)); + } + return node; + }; + + + DBCSCodec.prototype._addDecodeChunk = function(chunk) { + // First element of chunk is the hex mbcs code where we start. + var curAddr = parseInt(chunk[0], 16); + + // Choose the decoding node where we'll write our chars. + var writeTable = this._getDecodeTrieNode(curAddr); + curAddr = curAddr & 0xFF; + + // Write all other elements of the chunk to the table. + for (var k = 1; k < chunk.length; k++) { + var part = chunk[k]; + if (typeof part === "string") { // String, write as-is. + for (var l = 0; l < part.length;) { + var code = part.charCodeAt(l++); + if (0xD800 <= code && code < 0xDC00) { // Decode surrogate + var codeTrail = part.charCodeAt(l++); + if (0xDC00 <= codeTrail && codeTrail < 0xE000) + writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00); + else + throw new Error("Incorrect surrogate pair in " + this.encodingName + " at chunk " + chunk[0]); + } + else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used) + var len = 0xFFF - code + 2; + var seq = []; + for (var m = 0; m < len; m++) + seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq. + + writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length; + this.decodeTableSeq.push(seq); + } + else + writeTable[curAddr++] = code; // Basic char + } + } + else if (typeof part === "number") { // Integer, meaning increasing sequence starting with prev character. + var charCode = writeTable[curAddr - 1] + 1; + for (var l = 0; l < part; l++) + writeTable[curAddr++] = charCode++; + } + else + throw new Error("Incorrect type '" + typeof part + "' given in " + this.encodingName + " at chunk " + chunk[0]); + } + if (curAddr > 0xFF) + throw new Error("Incorrect chunk in " + this.encodingName + " at addr " + chunk[0] + ": too long" + curAddr); + }; + + // Encoder helpers + DBCSCodec.prototype._getEncodeBucket = function(uCode) { + var high = uCode >> 8; // This could be > 0xFF because of astral characters. + if (this.encodeTable[high] === undefined) + this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand. + return this.encodeTable[high]; + }; + + DBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) { + var bucket = this._getEncodeBucket(uCode); + var low = uCode & 0xFF; + if (bucket[low] <= SEQ_START) + this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it. + else if (bucket[low] == UNASSIGNED) + bucket[low] = dbcsCode; + }; + + DBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) { + + // Get the root of character tree according to first character of the sequence. + var uCode = seq[0]; + var bucket = this._getEncodeBucket(uCode); + var low = uCode & 0xFF; + + var node; + if (bucket[low] <= SEQ_START) { + // There's already a sequence with - use it. + node = this.encodeTableSeq[SEQ_START-bucket[low]]; + } + else { + // There was no sequence object - allocate a new one. + node = {}; + if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence. + bucket[low] = SEQ_START - this.encodeTableSeq.length; + this.encodeTableSeq.push(node); + } + + // Traverse the character tree, allocating new nodes as needed. + for (var j = 1; j < seq.length-1; j++) { + var oldVal = node[uCode]; + if (typeof oldVal === 'object') + node = oldVal; + else { + node = node[uCode] = {}; + if (oldVal !== undefined) + node[DEF_CHAR] = oldVal; + } + } + + // Set the leaf to given dbcsCode. + uCode = seq[seq.length-1]; + node[uCode] = dbcsCode; + }; + + DBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) { + var node = this.decodeTables[nodeIdx]; + for (var i = 0; i < 0x100; i++) { + var uCode = node[i]; + var mbCode = prefix + i; + if (skipEncodeChars[mbCode]) + continue; + + if (uCode >= 0) + this._setEncodeChar(uCode, mbCode); + else if (uCode <= NODE_START) + this._fillEncodeTable(NODE_START - uCode, mbCode << 8, skipEncodeChars); + else if (uCode <= SEQ_START) + this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode); + } + }; + + + + // == Encoder ================================================================== + + function DBCSEncoder(options, codec) { + // Encoder state + this.leadSurrogate = -1; + this.seqObj = undefined; + + // Static data + this.encodeTable = codec.encodeTable; + this.encodeTableSeq = codec.encodeTableSeq; + this.defaultCharSingleByte = codec.defCharSB; + this.gb18030 = codec.gb18030; + } + + DBCSEncoder.prototype.write = function(str) { + var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)), + leadSurrogate = this.leadSurrogate, + seqObj = this.seqObj, nextChar = -1, + i = 0, j = 0; + + while (true) { + // 0. Get next character. + if (nextChar === -1) { + if (i == str.length) break; + var uCode = str.charCodeAt(i++); + } + else { + var uCode = nextChar; + nextChar = -1; + } + + // 1. Handle surrogates. + if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates. + if (uCode < 0xDC00) { // We've got lead surrogate. + if (leadSurrogate === -1) { + leadSurrogate = uCode; + continue; + } else { + leadSurrogate = uCode; + // Double lead surrogate found. + uCode = UNASSIGNED; + } + } else { // We've got trail surrogate. + if (leadSurrogate !== -1) { + uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00); + leadSurrogate = -1; + } else { + // Incomplete surrogate pair - only trail surrogate found. + uCode = UNASSIGNED; + } + + } + } + else if (leadSurrogate !== -1) { + // Incomplete surrogate pair - only lead surrogate found. + nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char. + leadSurrogate = -1; + } + + // 2. Convert uCode character. + var dbcsCode = UNASSIGNED; + if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence + var resCode = seqObj[uCode]; + if (typeof resCode === 'object') { // Sequence continues. + seqObj = resCode; + continue; + + } else if (typeof resCode == 'number') { // Sequence finished. Write it. + dbcsCode = resCode; + + } else if (resCode == undefined) { // Current character is not part of the sequence. + + // Try default character for this sequence + resCode = seqObj[DEF_CHAR]; + if (resCode !== undefined) { + dbcsCode = resCode; // Found. Write it. + nextChar = uCode; // Current character will be written too in the next iteration. + + } + } + seqObj = undefined; + } + else if (uCode >= 0) { // Regular character + var subtable = this.encodeTable[uCode >> 8]; + if (subtable !== undefined) + dbcsCode = subtable[uCode & 0xFF]; + + if (dbcsCode <= SEQ_START) { // Sequence start + seqObj = this.encodeTableSeq[SEQ_START-dbcsCode]; + continue; + } + + if (dbcsCode == UNASSIGNED && this.gb18030) { + // Use GB18030 algorithm to find character(s) to write. + var idx = findIdx(this.gb18030.uChars, uCode); + if (idx != -1) { + var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]); + newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600; + newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260; + newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10; + newBuf[j++] = 0x30 + dbcsCode; + continue; + } + } + } + + // 3. Write dbcsCode character. + if (dbcsCode === UNASSIGNED) + dbcsCode = this.defaultCharSingleByte; + + if (dbcsCode < 0x100) { + newBuf[j++] = dbcsCode; + } + else if (dbcsCode < 0x10000) { + newBuf[j++] = dbcsCode >> 8; // high byte + newBuf[j++] = dbcsCode & 0xFF; // low byte + } + else { + newBuf[j++] = dbcsCode >> 16; + newBuf[j++] = (dbcsCode >> 8) & 0xFF; + newBuf[j++] = dbcsCode & 0xFF; + } + } + + this.seqObj = seqObj; + this.leadSurrogate = leadSurrogate; + return newBuf.slice(0, j); + }; + + DBCSEncoder.prototype.end = function() { + if (this.leadSurrogate === -1 && this.seqObj === undefined) + return; // All clean. Most often case. + + var newBuf = Buffer.alloc(10), j = 0; + + if (this.seqObj) { // We're in the sequence. + var dbcsCode = this.seqObj[DEF_CHAR]; + if (dbcsCode !== undefined) { // Write beginning of the sequence. + if (dbcsCode < 0x100) { + newBuf[j++] = dbcsCode; + } + else { + newBuf[j++] = dbcsCode >> 8; // high byte + newBuf[j++] = dbcsCode & 0xFF; // low byte + } + } + this.seqObj = undefined; + } + + if (this.leadSurrogate !== -1) { + // Incomplete surrogate pair - only lead surrogate found. + newBuf[j++] = this.defaultCharSingleByte; + this.leadSurrogate = -1; + } + + return newBuf.slice(0, j); + }; + + // Export for testing + DBCSEncoder.prototype.findIdx = findIdx; + + + // == Decoder ================================================================== + + function DBCSDecoder(options, codec) { + // Decoder state + this.nodeIdx = 0; + this.prevBuf = Buffer.alloc(0); + + // Static data + this.decodeTables = codec.decodeTables; + this.decodeTableSeq = codec.decodeTableSeq; + this.defaultCharUnicode = codec.defaultCharUnicode; + this.gb18030 = codec.gb18030; + } + + DBCSDecoder.prototype.write = function(buf) { + var newBuf = Buffer.alloc(buf.length*2), + nodeIdx = this.nodeIdx, + prevBuf = this.prevBuf, prevBufOffset = this.prevBuf.length, + seqStart = -this.prevBuf.length, // idx of the start of current parsed sequence. + uCode; + + if (prevBufOffset > 0) // Make prev buf overlap a little to make it easier to slice later. + prevBuf = Buffer.concat([prevBuf, buf.slice(0, 10)]); + + for (var i = 0, j = 0; i < buf.length; i++) { + var curByte = (i >= 0) ? buf[i] : prevBuf[i + prevBufOffset]; + + // Lookup in current trie node. + var uCode = this.decodeTables[nodeIdx][curByte]; + + if (uCode >= 0) ; + else if (uCode === UNASSIGNED) { // Unknown char. + // TODO: Callback with seq. + //var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset); + i = seqStart; // Try to parse again, after skipping first byte of the sequence ('i' will be incremented by 'for' cycle). + uCode = this.defaultCharUnicode.charCodeAt(0); + } + else if (uCode === GB18030_CODE) { + var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset); + var ptr = (curSeq[0]-0x81)*12600 + (curSeq[1]-0x30)*1260 + (curSeq[2]-0x81)*10 + (curSeq[3]-0x30); + var idx = findIdx(this.gb18030.gbChars, ptr); + uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx]; + } + else if (uCode <= NODE_START) { // Go to next trie node. + nodeIdx = NODE_START - uCode; + continue; + } + else if (uCode <= SEQ_START) { // Output a sequence of chars. + var seq = this.decodeTableSeq[SEQ_START - uCode]; + for (var k = 0; k < seq.length - 1; k++) { + uCode = seq[k]; + newBuf[j++] = uCode & 0xFF; + newBuf[j++] = uCode >> 8; + } + uCode = seq[seq.length-1]; + } + else + throw new Error("iconv-lite internal error: invalid decoding table value " + uCode + " at " + nodeIdx + "/" + curByte); + + // Write the character to buffer, handling higher planes using surrogate pair. + if (uCode > 0xFFFF) { + uCode -= 0x10000; + var uCodeLead = 0xD800 + Math.floor(uCode / 0x400); + newBuf[j++] = uCodeLead & 0xFF; + newBuf[j++] = uCodeLead >> 8; + + uCode = 0xDC00 + uCode % 0x400; + } + newBuf[j++] = uCode & 0xFF; + newBuf[j++] = uCode >> 8; + + // Reset trie node. + nodeIdx = 0; seqStart = i+1; + } + + this.nodeIdx = nodeIdx; + this.prevBuf = (seqStart >= 0) ? buf.slice(seqStart) : prevBuf.slice(seqStart + prevBufOffset); + return newBuf.slice(0, j).toString('ucs2'); + }; + + DBCSDecoder.prototype.end = function() { + var ret = ''; + + // Try to parse all remaining chars. + while (this.prevBuf.length > 0) { + // Skip 1 character in the buffer. + ret += this.defaultCharUnicode; + var buf = this.prevBuf.slice(1); + + // Parse remaining as usual. + this.prevBuf = Buffer.alloc(0); + this.nodeIdx = 0; + if (buf.length > 0) + ret += this.write(buf); + } + + this.nodeIdx = 0; + return ret; + }; + + // Binary search for GB18030. Returns largest i such that table[i] <= val. + function findIdx(table, val) { + if (table[0] > val) + return -1; + + var l = 0, r = table.length; + while (l < r-1) { // always table[l] <= val < table[r] + var mid = l + Math.floor((r-l+1)/2); + if (table[mid] <= val) + l = mid; + else + r = mid; + } + return l; + } + return dbcsCodec; +} + +var require$$0 = [ + [ + "0", + "\u0000", + 128 + ], + [ + "a1", + "。", + 62 + ], + [ + "8140", + " 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈", + 9, + "+-±×" + ], + [ + "8180", + "÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓" + ], + [ + "81b8", + "∈∋⊆⊇⊂⊃∪∩" + ], + [ + "81c8", + "∧∨¬⇒⇔∀∃" + ], + [ + "81da", + "∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬" + ], + [ + "81f0", + "ʼn♯♭♪†‡¶" + ], + [ + "81fc", + "◯" + ], + [ + "824f", + "0", + 9 + ], + [ + "8260", + "A", + 25 + ], + [ + "8281", + "a", + 25 + ], + [ + "829f", + "ぁ", + 82 + ], + [ + "8340", + "ァ", + 62 + ], + [ + "8380", + "ム", + 22 + ], + [ + "839f", + "Α", + 16, + "Σ", + 6 + ], + [ + "83bf", + "α", + 16, + "σ", + 6 + ], + [ + "8440", + "А", + 5, + "ЁЖ", + 25 + ], + [ + "8470", + "а", + 5, + "ёж", + 7 + ], + [ + "8480", + "о", + 17 + ], + [ + "849f", + "─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂" + ], + [ + "8740", + "①", + 19, + "Ⅰ", + 9 + ], + [ + "875f", + "㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡" + ], + [ + "877e", + "㍻" + ], + [ + "8780", + "〝〟№㏍℡㊤", + 4, + "㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪" + ], + [ + "889f", + "亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭" + ], + [ + "8940", + "院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円" + ], + [ + "8980", + "園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改" + ], + [ + "8a40", + "魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫" + ], + [ + "8a80", + "橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄" + ], + [ + "8b40", + "機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救" + ], + [ + "8b80", + "朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈" + ], + [ + "8c40", + "掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨" + ], + [ + "8c80", + "劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向" + ], + [ + "8d40", + "后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降" + ], + [ + "8d80", + "項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷" + ], + [ + "8e40", + "察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止" + ], + [ + "8e80", + "死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周" + ], + [ + "8f40", + "宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳" + ], + [ + "8f80", + "準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾" + ], + [ + "9040", + "拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨" + ], + [ + "9080", + "逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線" + ], + [ + "9140", + "繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻" + ], + [ + "9180", + "操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只" + ], + [ + "9240", + "叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄" + ], + [ + "9280", + "逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓" + ], + [ + "9340", + "邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬" + ], + [ + "9380", + "凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入" + ], + [ + "9440", + "如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅" + ], + [ + "9480", + "楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美" + ], + [ + "9540", + "鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷" + ], + [ + "9580", + "斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋" + ], + [ + "9640", + "法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆" + ], + [ + "9680", + "摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒" + ], + [ + "9740", + "諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲" + ], + [ + "9780", + "沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯" + ], + [ + "9840", + "蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕" + ], + [ + "989f", + "弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲" + ], + [ + "9940", + "僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭" + ], + [ + "9980", + "凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨" + ], + [ + "9a40", + "咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸" + ], + [ + "9a80", + "噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩" + ], + [ + "9b40", + "奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀" + ], + [ + "9b80", + "它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏" + ], + [ + "9c40", + "廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠" + ], + [ + "9c80", + "怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛" + ], + [ + "9d40", + "戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫" + ], + [ + "9d80", + "捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼" + ], + [ + "9e40", + "曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎" + ], + [ + "9e80", + "梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣" + ], + [ + "9f40", + "檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯" + ], + [ + "9f80", + "麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌" + ], + [ + "e040", + "漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝" + ], + [ + "e080", + "烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱" + ], + [ + "e140", + "瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿" + ], + [ + "e180", + "痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬" + ], + [ + "e240", + "磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰" + ], + [ + "e280", + "窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆" + ], + [ + "e340", + "紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷" + ], + [ + "e380", + "縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋" + ], + [ + "e440", + "隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤" + ], + [ + "e480", + "艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈" + ], + [ + "e540", + "蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬" + ], + [ + "e580", + "蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞" + ], + [ + "e640", + "襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧" + ], + [ + "e680", + "諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊" + ], + [ + "e740", + "蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜" + ], + [ + "e780", + "轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮" + ], + [ + "e840", + "錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙" + ], + [ + "e880", + "閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰" + ], + [ + "e940", + "顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃" + ], + [ + "e980", + "騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈" + ], + [ + "ea40", + "鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯" + ], + [ + "ea80", + "黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙" + ], + [ + "ed40", + "纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏" + ], + [ + "ed80", + "塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱" + ], + [ + "ee40", + "犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙" + ], + [ + "ee80", + "蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑" + ], + [ + "eeef", + "ⅰ", + 9, + "¬¦'"" + ], + [ + "f040", + "", + 62 + ], + [ + "f080", + "", + 124 + ], + [ + "f140", + "", + 62 + ], + [ + "f180", + "", + 124 + ], + [ + "f240", + "", + 62 + ], + [ + "f280", + "", + 124 + ], + [ + "f340", + "", + 62 + ], + [ + "f380", + "", + 124 + ], + [ + "f440", + "", + 62 + ], + [ + "f480", + "", + 124 + ], + [ + "f540", + "", + 62 + ], + [ + "f580", + "", + 124 + ], + [ + "f640", + "", + 62 + ], + [ + "f680", + "", + 124 + ], + [ + "f740", + "", + 62 + ], + [ + "f780", + "", + 124 + ], + [ + "f840", + "", + 62 + ], + [ + "f880", + "", + 124 + ], + [ + "f940", + "" + ], + [ + "fa40", + "ⅰ", + 9, + "Ⅰ", + 9, + "¬¦'"㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊" + ], + [ + "fa80", + "兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯" + ], + [ + "fb40", + "涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神" + ], + [ + "fb80", + "祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙" + ], + [ + "fc40", + "髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑" + ] +]; + +var require$$1 = [ + [ + "0", + "\u0000", + 127 + ], + [ + "8ea1", + "。", + 62 + ], + [ + "a1a1", + " 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈", + 9, + "+-±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇" + ], + [ + "a2a1", + "◆□■△▲▽▼※〒→←↑↓〓" + ], + [ + "a2ba", + "∈∋⊆⊇⊂⊃∪∩" + ], + [ + "a2ca", + "∧∨¬⇒⇔∀∃" + ], + [ + "a2dc", + "∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬" + ], + [ + "a2f2", + "ʼn♯♭♪†‡¶" + ], + [ + "a2fe", + "◯" + ], + [ + "a3b0", + "0", + 9 + ], + [ + "a3c1", + "A", + 25 + ], + [ + "a3e1", + "a", + 25 + ], + [ + "a4a1", + "ぁ", + 82 + ], + [ + "a5a1", + "ァ", + 85 + ], + [ + "a6a1", + "Α", + 16, + "Σ", + 6 + ], + [ + "a6c1", + "α", + 16, + "σ", + 6 + ], + [ + "a7a1", + "А", + 5, + "ЁЖ", + 25 + ], + [ + "a7d1", + "а", + 5, + "ёж", + 25 + ], + [ + "a8a1", + "─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂" + ], + [ + "ada1", + "①", + 19, + "Ⅰ", + 9 + ], + [ + "adc0", + "㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡" + ], + [ + "addf", + "㍻〝〟№㏍℡㊤", + 4, + "㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪" + ], + [ + "b0a1", + "亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭" + ], + [ + "b1a1", + "院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応" + ], + [ + "b2a1", + "押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改" + ], + [ + "b3a1", + "魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱" + ], + [ + "b4a1", + "粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄" + ], + [ + "b5a1", + "機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京" + ], + [ + "b6a1", + "供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈" + ], + [ + "b7a1", + "掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲" + ], + [ + "b8a1", + "検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向" + ], + [ + "b9a1", + "后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込" + ], + [ + "baa1", + "此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷" + ], + [ + "bba1", + "察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時" + ], + [ + "bca1", + "次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周" + ], + [ + "bda1", + "宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償" + ], + [ + "bea1", + "勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾" + ], + [ + "bfa1", + "拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾" + ], + [ + "c0a1", + "澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線" + ], + [ + "c1a1", + "繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎" + ], + [ + "c2a1", + "臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只" + ], + [ + "c3a1", + "叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵" + ], + [ + "c4a1", + "帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓" + ], + [ + "c5a1", + "邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到" + ], + [ + "c6a1", + "董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入" + ], + [ + "c7a1", + "如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦" + ], + [ + "c8a1", + "函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美" + ], + [ + "c9a1", + "鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服" + ], + [ + "caa1", + "福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋" + ], + [ + "cba1", + "法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満" + ], + [ + "cca1", + "漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒" + ], + [ + "cda1", + "諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃" + ], + [ + "cea1", + "痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯" + ], + [ + "cfa1", + "蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕" + ], + [ + "d0a1", + "弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲" + ], + [ + "d1a1", + "僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨" + ], + [ + "d2a1", + "辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨" + ], + [ + "d3a1", + "咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉" + ], + [ + "d4a1", + "圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩" + ], + [ + "d5a1", + "奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓" + ], + [ + "d6a1", + "屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏" + ], + [ + "d7a1", + "廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚" + ], + [ + "d8a1", + "悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛" + ], + [ + "d9a1", + "戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼" + ], + [ + "daa1", + "據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼" + ], + [ + "dba1", + "曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍" + ], + [ + "dca1", + "棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣" + ], + [ + "dda1", + "檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾" + ], + [ + "dea1", + "沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌" + ], + [ + "dfa1", + "漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼" + ], + [ + "e0a1", + "燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱" + ], + [ + "e1a1", + "瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰" + ], + [ + "e2a1", + "癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬" + ], + [ + "e3a1", + "磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐" + ], + [ + "e4a1", + "筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆" + ], + [ + "e5a1", + "紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺" + ], + [ + "e6a1", + "罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋" + ], + [ + "e7a1", + "隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙" + ], + [ + "e8a1", + "茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈" + ], + [ + "e9a1", + "蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙" + ], + [ + "eaa1", + "蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞" + ], + [ + "eba1", + "襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫" + ], + [ + "eca1", + "譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊" + ], + [ + "eda1", + "蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸" + ], + [ + "eea1", + "遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮" + ], + [ + "efa1", + "錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞" + ], + [ + "f0a1", + "陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰" + ], + [ + "f1a1", + "顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷" + ], + [ + "f2a1", + "髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈" + ], + [ + "f3a1", + "鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠" + ], + [ + "f4a1", + "堯槇遙瑤凜熙" + ], + [ + "f9a1", + "纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德" + ], + [ + "faa1", + "忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱" + ], + [ + "fba1", + "犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚" + ], + [ + "fca1", + "釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑" + ], + [ + "fcf1", + "ⅰ", + 9, + "¬¦'"" + ], + [ + "8fa2af", + "˘ˇ¸˙˝¯˛˚~΄΅" + ], + [ + "8fa2c2", + "¡¦¿" + ], + [ + "8fa2eb", + "ºª©®™¤№" + ], + [ + "8fa6e1", + "ΆΈΉΊΪ" + ], + [ + "8fa6e7", + "Ό" + ], + [ + "8fa6e9", + "ΎΫ" + ], + [ + "8fa6ec", + "Ώ" + ], + [ + "8fa6f1", + "άέήίϊΐόςύϋΰώ" + ], + [ + "8fa7c2", + "Ђ", + 10, + "ЎЏ" + ], + [ + "8fa7f2", + "ђ", + 10, + "ўџ" + ], + [ + "8fa9a1", + "ÆĐ" + ], + [ + "8fa9a4", + "Ħ" + ], + [ + "8fa9a6", + "IJ" + ], + [ + "8fa9a8", + "ŁĿ" + ], + [ + "8fa9ab", + "ŊØŒ" + ], + [ + "8fa9af", + "ŦÞ" + ], + [ + "8fa9c1", + "æđðħıijĸłŀʼnŋøœßŧþ" + ], + [ + "8faaa1", + "ÁÀÄÂĂǍĀĄÅÃĆĈČÇĊĎÉÈËÊĚĖĒĘ" + ], + [ + "8faaba", + "ĜĞĢĠĤÍÌÏÎǏİĪĮĨĴĶĹĽĻŃŇŅÑÓÒÖÔǑŐŌÕŔŘŖŚŜŠŞŤŢÚÙÜÛŬǓŰŪŲŮŨǗǛǙǕŴÝŸŶŹŽŻ" + ], + [ + "8faba1", + "áàäâăǎāąåãćĉčçċďéèëêěėēęǵĝğ" + ], + [ + "8fabbd", + "ġĥíìïîǐ" + ], + [ + "8fabc5", + "īįĩĵķĺľļńňņñóòöôǒőōõŕřŗśŝšşťţúùüûŭǔűūųůũǘǜǚǖŵýÿŷźžż" + ], + [ + "8fb0a1", + "丂丄丅丌丒丟丣两丨丫丮丯丰丵乀乁乄乇乑乚乜乣乨乩乴乵乹乿亍亖亗亝亯亹仃仐仚仛仠仡仢仨仯仱仳仵份仾仿伀伂伃伈伋伌伒伕伖众伙伮伱你伳伵伷伹伻伾佀佂佈佉佋佌佒佔佖佘佟佣佪佬佮佱佷佸佹佺佽佾侁侂侄" + ], + [ + "8fb1a1", + "侅侉侊侌侎侐侒侓侔侗侙侚侞侟侲侷侹侻侼侽侾俀俁俅俆俈俉俋俌俍俏俒俜俠俢俰俲俼俽俿倀倁倄倇倊倌倎倐倓倗倘倛倜倝倞倢倧倮倰倲倳倵偀偁偂偅偆偊偌偎偑偒偓偗偙偟偠偢偣偦偧偪偭偰偱倻傁傃傄傆傊傎傏傐" + ], + [ + "8fb2a1", + "傒傓傔傖傛傜傞", + 4, + "傪傯傰傹傺傽僀僃僄僇僌僎僐僓僔僘僜僝僟僢僤僦僨僩僯僱僶僺僾儃儆儇儈儋儌儍儎僲儐儗儙儛儜儝儞儣儧儨儬儭儯儱儳儴儵儸儹兂兊兏兓兕兗兘兟兤兦兾冃冄冋冎冘冝冡冣冭冸冺冼冾冿凂" + ], + [ + "8fb3a1", + "凈减凑凒凓凕凘凞凢凥凮凲凳凴凷刁刂刅划刓刕刖刘刢刨刱刲刵刼剅剉剕剗剘剚剜剟剠剡剦剮剷剸剹劀劂劅劊劌劓劕劖劗劘劚劜劤劥劦劧劯劰劶劷劸劺劻劽勀勄勆勈勌勏勑勔勖勛勜勡勥勨勩勪勬勰勱勴勶勷匀匃匊匋" + ], + [ + "8fb4a1", + "匌匑匓匘匛匜匞匟匥匧匨匩匫匬匭匰匲匵匼匽匾卂卌卋卙卛卡卣卥卬卭卲卹卾厃厇厈厎厓厔厙厝厡厤厪厫厯厲厴厵厷厸厺厽叀叅叏叒叓叕叚叝叞叠另叧叵吂吓吚吡吧吨吪启吱吴吵呃呄呇呍呏呞呢呤呦呧呩呫呭呮呴呿" + ], + [ + "8fb5a1", + "咁咃咅咈咉咍咑咕咖咜咟咡咦咧咩咪咭咮咱咷咹咺咻咿哆哊响哎哠哪哬哯哶哼哾哿唀唁唅唈唉唌唍唎唕唪唫唲唵唶唻唼唽啁啇啉啊啍啐啑啘啚啛啞啠啡啤啦啿喁喂喆喈喎喏喑喒喓喔喗喣喤喭喲喿嗁嗃嗆嗉嗋嗌嗎嗑嗒" + ], + [ + "8fb6a1", + "嗓嗗嗘嗛嗞嗢嗩嗶嗿嘅嘈嘊嘍", + 5, + "嘙嘬嘰嘳嘵嘷嘹嘻嘼嘽嘿噀噁噃噄噆噉噋噍噏噔噞噠噡噢噣噦噩噭噯噱噲噵嚄嚅嚈嚋嚌嚕嚙嚚嚝嚞嚟嚦嚧嚨嚩嚫嚬嚭嚱嚳嚷嚾囅囉囊囋囏囐囌囍囙囜囝囟囡囤", + 4, + "囱囫园" + ], + [ + "8fb7a1", + "囶囷圁圂圇圊圌圑圕圚圛圝圠圢圣圤圥圩圪圬圮圯圳圴圽圾圿坅坆坌坍坒坢坥坧坨坫坭", + 4, + "坳坴坵坷坹坺坻坼坾垁垃垌垔垗垙垚垜垝垞垟垡垕垧垨垩垬垸垽埇埈埌埏埕埝埞埤埦埧埩埭埰埵埶埸埽埾埿堃堄堈堉埡" + ], + [ + "8fb8a1", + "堌堍堛堞堟堠堦堧堭堲堹堿塉塌塍塏塐塕塟塡塤塧塨塸塼塿墀墁墇墈墉墊墌墍墏墐墔墖墝墠墡墢墦墩墱墲壄墼壂壈壍壎壐壒壔壖壚壝壡壢壩壳夅夆夋夌夒夓夔虁夝夡夣夤夨夯夰夳夵夶夿奃奆奒奓奙奛奝奞奟奡奣奫奭" + ], + [ + "8fb9a1", + "奯奲奵奶她奻奼妋妌妎妒妕妗妟妤妧妭妮妯妰妳妷妺妼姁姃姄姈姊姍姒姝姞姟姣姤姧姮姯姱姲姴姷娀娄娌娍娎娒娓娞娣娤娧娨娪娭娰婄婅婇婈婌婐婕婞婣婥婧婭婷婺婻婾媋媐媓媖媙媜媞媟媠媢媧媬媱媲媳媵媸媺媻媿" + ], + [ + "8fbaa1", + "嫄嫆嫈嫏嫚嫜嫠嫥嫪嫮嫵嫶嫽嬀嬁嬈嬗嬴嬙嬛嬝嬡嬥嬭嬸孁孋孌孒孖孞孨孮孯孼孽孾孿宁宄宆宊宎宐宑宓宔宖宨宩宬宭宯宱宲宷宺宼寀寁寍寏寖", + 4, + "寠寯寱寴寽尌尗尞尟尣尦尩尫尬尮尰尲尵尶屙屚屜屢屣屧屨屩" + ], + [ + "8fbba1", + "屭屰屴屵屺屻屼屽岇岈岊岏岒岝岟岠岢岣岦岪岲岴岵岺峉峋峒峝峗峮峱峲峴崁崆崍崒崫崣崤崦崧崱崴崹崽崿嵂嵃嵆嵈嵕嵑嵙嵊嵟嵠嵡嵢嵤嵪嵭嵰嵹嵺嵾嵿嶁嶃嶈嶊嶒嶓嶔嶕嶙嶛嶟嶠嶧嶫嶰嶴嶸嶹巃巇巋巐巎巘巙巠巤" + ], + [ + "8fbca1", + "巩巸巹帀帇帍帒帔帕帘帟帠帮帨帲帵帾幋幐幉幑幖幘幛幜幞幨幪", + 4, + "幰庀庋庎庢庤庥庨庪庬庱庳庽庾庿廆廌廋廎廑廒廔廕廜廞廥廫异弆弇弈弎弙弜弝弡弢弣弤弨弫弬弮弰弴弶弻弽弿彀彄彅彇彍彐彔彘彛彠彣彤彧" + ], + [ + "8fbda1", + "彯彲彴彵彸彺彽彾徉徍徏徖徜徝徢徧徫徤徬徯徰徱徸忄忇忈忉忋忐", + 4, + "忞忡忢忨忩忪忬忭忮忯忲忳忶忺忼怇怊怍怓怔怗怘怚怟怤怭怳怵恀恇恈恉恌恑恔恖恗恝恡恧恱恾恿悂悆悈悊悎悑悓悕悘悝悞悢悤悥您悰悱悷" + ], + [ + "8fbea1", + "悻悾惂惄惈惉惊惋惎惏惔惕惙惛惝惞惢惥惲惵惸惼惽愂愇愊愌愐", + 4, + "愖愗愙愜愞愢愪愫愰愱愵愶愷愹慁慅慆慉慞慠慬慲慸慻慼慿憀憁憃憄憋憍憒憓憗憘憜憝憟憠憥憨憪憭憸憹憼懀懁懂懎懏懕懜懝懞懟懡懢懧懩懥" + ], + [ + "8fbfa1", + "懬懭懯戁戃戄戇戓戕戜戠戢戣戧戩戫戹戽扂扃扄扆扌扐扑扒扔扖扚扜扤扭扯扳扺扽抍抎抏抐抦抨抳抶抷抺抾抿拄拎拕拖拚拪拲拴拼拽挃挄挊挋挍挐挓挖挘挩挪挭挵挶挹挼捁捂捃捄捆捊捋捎捒捓捔捘捛捥捦捬捭捱捴捵" + ], + [ + "8fc0a1", + "捸捼捽捿掂掄掇掊掐掔掕掙掚掞掤掦掭掮掯掽揁揅揈揎揑揓揔揕揜揠揥揪揬揲揳揵揸揹搉搊搐搒搔搘搞搠搢搤搥搩搪搯搰搵搽搿摋摏摑摒摓摔摚摛摜摝摟摠摡摣摭摳摴摻摽撅撇撏撐撑撘撙撛撝撟撡撣撦撨撬撳撽撾撿" + ], + [ + "8fc1a1", + "擄擉擊擋擌擎擐擑擕擗擤擥擩擪擭擰擵擷擻擿攁攄攈攉攊攏攓攔攖攙攛攞攟攢攦攩攮攱攺攼攽敃敇敉敐敒敔敟敠敧敫敺敽斁斅斊斒斕斘斝斠斣斦斮斲斳斴斿旂旈旉旎旐旔旖旘旟旰旲旴旵旹旾旿昀昄昈昉昍昑昒昕昖昝" + ], + [ + "8fc2a1", + "昞昡昢昣昤昦昩昪昫昬昮昰昱昳昹昷晀晅晆晊晌晑晎晗晘晙晛晜晠晡曻晪晫晬晾晳晵晿晷晸晹晻暀晼暋暌暍暐暒暙暚暛暜暟暠暤暭暱暲暵暻暿曀曂曃曈曌曎曏曔曛曟曨曫曬曮曺朅朇朎朓朙朜朠朢朳朾杅杇杈杌杔杕杝" + ], + [ + "8fc3a1", + "杦杬杮杴杶杻极构枎枏枑枓枖枘枙枛枰枱枲枵枻枼枽柹柀柂柃柅柈柉柒柗柙柜柡柦柰柲柶柷桒栔栙栝栟栨栧栬栭栯栰栱栳栻栿桄桅桊桌桕桗桘桛桫桮", + 4, + "桵桹桺桻桼梂梄梆梈梖梘梚梜梡梣梥梩梪梮梲梻棅棈棌棏" + ], + [ + "8fc4a1", + "棐棑棓棖棙棜棝棥棨棪棫棬棭棰棱棵棶棻棼棽椆椉椊椐椑椓椖椗椱椳椵椸椻楂楅楉楎楗楛楣楤楥楦楨楩楬楰楱楲楺楻楿榀榍榒榖榘榡榥榦榨榫榭榯榷榸榺榼槅槈槑槖槗槢槥槮槯槱槳槵槾樀樁樃樏樑樕樚樝樠樤樨樰樲" + ], + [ + "8fc5a1", + "樴樷樻樾樿橅橆橉橊橎橐橑橒橕橖橛橤橧橪橱橳橾檁檃檆檇檉檋檑檛檝檞檟檥檫檯檰檱檴檽檾檿櫆櫉櫈櫌櫐櫔櫕櫖櫜櫝櫤櫧櫬櫰櫱櫲櫼櫽欂欃欆欇欉欏欐欑欗欛欞欤欨欫欬欯欵欶欻欿歆歊歍歒歖歘歝歠歧歫歮歰歵歽" + ], + [ + "8fc6a1", + "歾殂殅殗殛殟殠殢殣殨殩殬殭殮殰殸殹殽殾毃毄毉毌毖毚毡毣毦毧毮毱毷毹毿氂氄氅氉氍氎氐氒氙氟氦氧氨氬氮氳氵氶氺氻氿汊汋汍汏汒汔汙汛汜汫汭汯汴汶汸汹汻沅沆沇沉沔沕沗沘沜沟沰沲沴泂泆泍泏泐泑泒泔泖" + ], + [ + "8fc7a1", + "泚泜泠泧泩泫泬泮泲泴洄洇洊洎洏洑洓洚洦洧洨汧洮洯洱洹洼洿浗浞浟浡浥浧浯浰浼涂涇涑涒涔涖涗涘涪涬涴涷涹涽涿淄淈淊淎淏淖淛淝淟淠淢淥淩淯淰淴淶淼渀渄渞渢渧渲渶渹渻渼湄湅湈湉湋湏湑湒湓湔湗湜湝湞" + ], + [ + "8fc8a1", + "湢湣湨湳湻湽溍溓溙溠溧溭溮溱溳溻溿滀滁滃滇滈滊滍滎滏滫滭滮滹滻滽漄漈漊漌漍漖漘漚漛漦漩漪漯漰漳漶漻漼漭潏潑潒潓潗潙潚潝潞潡潢潨潬潽潾澃澇澈澋澌澍澐澒澓澔澖澚澟澠澥澦澧澨澮澯澰澵澶澼濅濇濈濊" + ], + [ + "8fc9a1", + "濚濞濨濩濰濵濹濼濽瀀瀅瀆瀇瀍瀗瀠瀣瀯瀴瀷瀹瀼灃灄灈灉灊灋灔灕灝灞灎灤灥灬灮灵灶灾炁炅炆炔", + 4, + "炛炤炫炰炱炴炷烊烑烓烔烕烖烘烜烤烺焃", + 4, + "焋焌焏焞焠焫焭焯焰焱焸煁煅煆煇煊煋煐煒煗煚煜煞煠" + ], + [ + "8fcaa1", + "煨煹熀熅熇熌熒熚熛熠熢熯熰熲熳熺熿燀燁燄燋燌燓燖燙燚燜燸燾爀爇爈爉爓爗爚爝爟爤爫爯爴爸爹牁牂牃牅牎牏牐牓牕牖牚牜牞牠牣牨牫牮牯牱牷牸牻牼牿犄犉犍犎犓犛犨犭犮犱犴犾狁狇狉狌狕狖狘狟狥狳狴狺狻" + ], + [ + "8fcba1", + "狾猂猄猅猇猋猍猒猓猘猙猞猢猤猧猨猬猱猲猵猺猻猽獃獍獐獒獖獘獝獞獟獠獦獧獩獫獬獮獯獱獷獹獼玀玁玃玅玆玎玐玓玕玗玘玜玞玟玠玢玥玦玪玫玭玵玷玹玼玽玿珅珆珉珋珌珏珒珓珖珙珝珡珣珦珧珩珴珵珷珹珺珻珽" + ], + [ + "8fcca1", + "珿琀琁琄琇琊琑琚琛琤琦琨", + 9, + "琹瑀瑃瑄瑆瑇瑋瑍瑑瑒瑗瑝瑢瑦瑧瑨瑫瑭瑮瑱瑲璀璁璅璆璇璉璏璐璑璒璘璙璚璜璟璠璡璣璦璨璩璪璫璮璯璱璲璵璹璻璿瓈瓉瓌瓐瓓瓘瓚瓛瓞瓟瓤瓨瓪瓫瓯瓴瓺瓻瓼瓿甆" + ], + [ + "8fcda1", + "甒甖甗甠甡甤甧甩甪甯甶甹甽甾甿畀畃畇畈畎畐畒畗畞畟畡畯畱畹", + 5, + "疁疅疐疒疓疕疙疜疢疤疴疺疿痀痁痄痆痌痎痏痗痜痟痠痡痤痧痬痮痯痱痹瘀瘂瘃瘄瘇瘈瘊瘌瘏瘒瘓瘕瘖瘙瘛瘜瘝瘞瘣瘥瘦瘩瘭瘲瘳瘵瘸瘹" + ], + [ + "8fcea1", + "瘺瘼癊癀癁癃癄癅癉癋癕癙癟癤癥癭癮癯癱癴皁皅皌皍皕皛皜皝皟皠皢", + 6, + "皪皭皽盁盅盉盋盌盎盔盙盠盦盨盬盰盱盶盹盼眀眆眊眎眒眔眕眗眙眚眜眢眨眭眮眯眴眵眶眹眽眾睂睅睆睊睍睎睏睒睖睗睜睞睟睠睢" + ], + [ + "8fcfa1", + "睤睧睪睬睰睲睳睴睺睽瞀瞄瞌瞍瞔瞕瞖瞚瞟瞢瞧瞪瞮瞯瞱瞵瞾矃矉矑矒矕矙矞矟矠矤矦矪矬矰矱矴矸矻砅砆砉砍砎砑砝砡砢砣砭砮砰砵砷硃硄硇硈硌硎硒硜硞硠硡硣硤硨硪确硺硾碊碏碔碘碡碝碞碟碤碨碬碭碰碱碲碳" + ], + [ + "8fd0a1", + "碻碽碿磇磈磉磌磎磒磓磕磖磤磛磟磠磡磦磪磲磳礀磶磷磺磻磿礆礌礐礚礜礞礟礠礥礧礩礭礱礴礵礻礽礿祄祅祆祊祋祏祑祔祘祛祜祧祩祫祲祹祻祼祾禋禌禑禓禔禕禖禘禛禜禡禨禩禫禯禱禴禸离秂秄秇秈秊秏秔秖秚秝秞" + ], + [ + "8fd1a1", + "秠秢秥秪秫秭秱秸秼稂稃稇稉稊稌稑稕稛稞稡稧稫稭稯稰稴稵稸稹稺穄穅穇穈穌穕穖穙穜穝穟穠穥穧穪穭穵穸穾窀窂窅窆窊窋窐窑窔窞窠窣窬窳窵窹窻窼竆竉竌竎竑竛竨竩竫竬竱竴竻竽竾笇笔笟笣笧笩笪笫笭笮笯笰" + ], + [ + "8fd2a1", + "笱笴笽笿筀筁筇筎筕筠筤筦筩筪筭筯筲筳筷箄箉箎箐箑箖箛箞箠箥箬箯箰箲箵箶箺箻箼箽篂篅篈篊篔篖篗篙篚篛篨篪篲篴篵篸篹篺篼篾簁簂簃簄簆簉簋簌簎簏簙簛簠簥簦簨簬簱簳簴簶簹簺籆籊籕籑籒籓籙", + 5 + ], + [ + "8fd3a1", + "籡籣籧籩籭籮籰籲籹籼籽粆粇粏粔粞粠粦粰粶粷粺粻粼粿糄糇糈糉糍糏糓糔糕糗糙糚糝糦糩糫糵紃紇紈紉紏紑紒紓紖紝紞紣紦紪紭紱紼紽紾絀絁絇絈絍絑絓絗絙絚絜絝絥絧絪絰絸絺絻絿綁綂綃綅綆綈綋綌綍綑綖綗綝" + ], + [ + "8fd4a1", + "綞綦綧綪綳綶綷綹緂", + 4, + "緌緍緎緗緙縀緢緥緦緪緫緭緱緵緶緹緺縈縐縑縕縗縜縝縠縧縨縬縭縯縳縶縿繄繅繇繎繐繒繘繟繡繢繥繫繮繯繳繸繾纁纆纇纊纍纑纕纘纚纝纞缼缻缽缾缿罃罄罇罏罒罓罛罜罝罡罣罤罥罦罭" + ], + [ + "8fd5a1", + "罱罽罾罿羀羋羍羏羐羑羖羗羜羡羢羦羪羭羴羼羿翀翃翈翎翏翛翟翣翥翨翬翮翯翲翺翽翾翿耇耈耊耍耎耏耑耓耔耖耝耞耟耠耤耦耬耮耰耴耵耷耹耺耼耾聀聄聠聤聦聭聱聵肁肈肎肜肞肦肧肫肸肹胈胍胏胒胔胕胗胘胠胭胮" + ], + [ + "8fd6a1", + "胰胲胳胶胹胺胾脃脋脖脗脘脜脞脠脤脧脬脰脵脺脼腅腇腊腌腒腗腠腡腧腨腩腭腯腷膁膐膄膅膆膋膎膖膘膛膞膢膮膲膴膻臋臃臅臊臎臏臕臗臛臝臞臡臤臫臬臰臱臲臵臶臸臹臽臿舀舃舏舓舔舙舚舝舡舢舨舲舴舺艃艄艅艆" + ], + [ + "8fd7a1", + "艋艎艏艑艖艜艠艣艧艭艴艻艽艿芀芁芃芄芇芉芊芎芑芔芖芘芚芛芠芡芣芤芧芨芩芪芮芰芲芴芷芺芼芾芿苆苐苕苚苠苢苤苨苪苭苯苶苷苽苾茀茁茇茈茊茋荔茛茝茞茟茡茢茬茭茮茰茳茷茺茼茽荂荃荄荇荍荎荑荕荖荗荰荸" + ], + [ + "8fd8a1", + "荽荿莀莂莄莆莍莒莔莕莘莙莛莜莝莦莧莩莬莾莿菀菇菉菏菐菑菔菝荓菨菪菶菸菹菼萁萆萊萏萑萕萙莭萯萹葅葇葈葊葍葏葑葒葖葘葙葚葜葠葤葥葧葪葰葳葴葶葸葼葽蒁蒅蒒蒓蒕蒞蒦蒨蒩蒪蒯蒱蒴蒺蒽蒾蓀蓂蓇蓈蓌蓏蓓" + ], + [ + "8fd9a1", + "蓜蓧蓪蓯蓰蓱蓲蓷蔲蓺蓻蓽蔂蔃蔇蔌蔎蔐蔜蔞蔢蔣蔤蔥蔧蔪蔫蔯蔳蔴蔶蔿蕆蕏", + 4, + "蕖蕙蕜", + 6, + "蕤蕫蕯蕹蕺蕻蕽蕿薁薅薆薉薋薌薏薓薘薝薟薠薢薥薧薴薶薷薸薼薽薾薿藂藇藊藋藎薭藘藚藟藠藦藨藭藳藶藼" + ], + [ + "8fdaa1", + "藿蘀蘄蘅蘍蘎蘐蘑蘒蘘蘙蘛蘞蘡蘧蘩蘶蘸蘺蘼蘽虀虂虆虒虓虖虗虘虙虝虠", + 4, + "虩虬虯虵虶虷虺蚍蚑蚖蚘蚚蚜蚡蚦蚧蚨蚭蚱蚳蚴蚵蚷蚸蚹蚿蛀蛁蛃蛅蛑蛒蛕蛗蛚蛜蛠蛣蛥蛧蚈蛺蛼蛽蜄蜅蜇蜋蜎蜏蜐蜓蜔蜙蜞蜟蜡蜣" + ], + [ + "8fdba1", + "蜨蜮蜯蜱蜲蜹蜺蜼蜽蜾蝀蝃蝅蝍蝘蝝蝡蝤蝥蝯蝱蝲蝻螃", + 6, + "螋螌螐螓螕螗螘螙螞螠螣螧螬螭螮螱螵螾螿蟁蟈蟉蟊蟎蟕蟖蟙蟚蟜蟟蟢蟣蟤蟪蟫蟭蟱蟳蟸蟺蟿蠁蠃蠆蠉蠊蠋蠐蠙蠒蠓蠔蠘蠚蠛蠜蠞蠟蠨蠭蠮蠰蠲蠵" + ], + [ + "8fdca1", + "蠺蠼衁衃衅衈衉衊衋衎衑衕衖衘衚衜衟衠衤衩衱衹衻袀袘袚袛袜袟袠袨袪袺袽袾裀裊", + 4, + "裑裒裓裛裞裧裯裰裱裵裷褁褆褍褎褏褕褖褘褙褚褜褠褦褧褨褰褱褲褵褹褺褾襀襂襅襆襉襏襒襗襚襛襜襡襢襣襫襮襰襳襵襺" + ], + [ + "8fdda1", + "襻襼襽覉覍覐覔覕覛覜覟覠覥覰覴覵覶覷覼觔", + 4, + "觥觩觫觭觱觳觶觹觽觿訄訅訇訏訑訒訔訕訞訠訢訤訦訫訬訯訵訷訽訾詀詃詅詇詉詍詎詓詖詗詘詜詝詡詥詧詵詶詷詹詺詻詾詿誀誃誆誋誏誐誒誖誗誙誟誧誩誮誯誳" + ], + [ + "8fdea1", + "誶誷誻誾諃諆諈諉諊諑諓諔諕諗諝諟諬諰諴諵諶諼諿謅謆謋謑謜謞謟謊謭謰謷謼譂", + 4, + "譈譒譓譔譙譍譞譣譭譶譸譹譼譾讁讄讅讋讍讏讔讕讜讞讟谸谹谽谾豅豇豉豋豏豑豓豔豗豘豛豝豙豣豤豦豨豩豭豳豵豶豻豾貆" + ], + [ + "8fdfa1", + "貇貋貐貒貓貙貛貜貤貹貺賅賆賉賋賏賖賕賙賝賡賨賬賯賰賲賵賷賸賾賿贁贃贉贒贗贛赥赩赬赮赿趂趄趈趍趐趑趕趞趟趠趦趫趬趯趲趵趷趹趻跀跅跆跇跈跊跎跑跔跕跗跙跤跥跧跬跰趼跱跲跴跽踁踄踅踆踋踑踔踖踠踡踢" + ], + [ + "8fe0a1", + "踣踦踧踱踳踶踷踸踹踽蹀蹁蹋蹍蹎蹏蹔蹛蹜蹝蹞蹡蹢蹩蹬蹭蹯蹰蹱蹹蹺蹻躂躃躉躐躒躕躚躛躝躞躢躧躩躭躮躳躵躺躻軀軁軃軄軇軏軑軔軜軨軮軰軱軷軹軺軭輀輂輇輈輏輐輖輗輘輞輠輡輣輥輧輨輬輭輮輴輵輶輷輺轀轁" + ], + [ + "8fe1a1", + "轃轇轏轑", + 4, + "轘轝轞轥辝辠辡辤辥辦辵辶辸达迀迁迆迊迋迍运迒迓迕迠迣迤迨迮迱迵迶迻迾适逄逈逌逘逛逨逩逯逪逬逭逳逴逷逿遃遄遌遛遝遢遦遧遬遰遴遹邅邈邋邌邎邐邕邗邘邙邛邠邡邢邥邰邲邳邴邶邽郌邾郃" + ], + [ + "8fe2a1", + "郄郅郇郈郕郗郘郙郜郝郟郥郒郶郫郯郰郴郾郿鄀鄄鄅鄆鄈鄍鄐鄔鄖鄗鄘鄚鄜鄞鄠鄥鄢鄣鄧鄩鄮鄯鄱鄴鄶鄷鄹鄺鄼鄽酃酇酈酏酓酗酙酚酛酡酤酧酭酴酹酺酻醁醃醅醆醊醎醑醓醔醕醘醞醡醦醨醬醭醮醰醱醲醳醶醻醼醽醿" + ], + [ + "8fe3a1", + "釂釃釅釓釔釗釙釚釞釤釥釩釪釬", + 5, + "釷釹釻釽鈀鈁鈄鈅鈆鈇鈉鈊鈌鈐鈒鈓鈖鈘鈜鈝鈣鈤鈥鈦鈨鈮鈯鈰鈳鈵鈶鈸鈹鈺鈼鈾鉀鉂鉃鉆鉇鉊鉍鉎鉏鉑鉘鉙鉜鉝鉠鉡鉥鉧鉨鉩鉮鉯鉰鉵", + 4, + "鉻鉼鉽鉿銈銉銊銍銎銒銗" + ], + [ + "8fe4a1", + "銙銟銠銤銥銧銨銫銯銲銶銸銺銻銼銽銿", + 4, + "鋅鋆鋇鋈鋋鋌鋍鋎鋐鋓鋕鋗鋘鋙鋜鋝鋟鋠鋡鋣鋥鋧鋨鋬鋮鋰鋹鋻鋿錀錂錈錍錑錔錕錜錝錞錟錡錤錥錧錩錪錳錴錶錷鍇鍈鍉鍐鍑鍒鍕鍗鍘鍚鍞鍤鍥鍧鍩鍪鍭鍯鍰鍱鍳鍴鍶" + ], + [ + "8fe5a1", + "鍺鍽鍿鎀鎁鎂鎈鎊鎋鎍鎏鎒鎕鎘鎛鎞鎡鎣鎤鎦鎨鎫鎴鎵鎶鎺鎩鏁鏄鏅鏆鏇鏉", + 4, + "鏓鏙鏜鏞鏟鏢鏦鏧鏹鏷鏸鏺鏻鏽鐁鐂鐄鐈鐉鐍鐎鐏鐕鐖鐗鐟鐮鐯鐱鐲鐳鐴鐻鐿鐽鑃鑅鑈鑊鑌鑕鑙鑜鑟鑡鑣鑨鑫鑭鑮鑯鑱鑲钄钃镸镹" + ], + [ + "8fe6a1", + "镾閄閈閌閍閎閝閞閟閡閦閩閫閬閴閶閺閽閿闆闈闉闋闐闑闒闓闙闚闝闞闟闠闤闦阝阞阢阤阥阦阬阱阳阷阸阹阺阼阽陁陒陔陖陗陘陡陮陴陻陼陾陿隁隂隃隄隉隑隖隚隝隟隤隥隦隩隮隯隳隺雊雒嶲雘雚雝雞雟雩雯雱雺霂" + ], + [ + "8fe7a1", + "霃霅霉霚霛霝霡霢霣霨霱霳靁靃靊靎靏靕靗靘靚靛靣靧靪靮靳靶靷靸靻靽靿鞀鞉鞕鞖鞗鞙鞚鞞鞟鞢鞬鞮鞱鞲鞵鞶鞸鞹鞺鞼鞾鞿韁韄韅韇韉韊韌韍韎韐韑韔韗韘韙韝韞韠韛韡韤韯韱韴韷韸韺頇頊頙頍頎頔頖頜頞頠頣頦" + ], + [ + "8fe8a1", + "頫頮頯頰頲頳頵頥頾顄顇顊顑顒顓顖顗顙顚顢顣顥顦顪顬颫颭颮颰颴颷颸颺颻颿飂飅飈飌飡飣飥飦飧飪飳飶餂餇餈餑餕餖餗餚餛餜餟餢餦餧餫餱", + 4, + "餹餺餻餼饀饁饆饇饈饍饎饔饘饙饛饜饞饟饠馛馝馟馦馰馱馲馵" + ], + [ + "8fe9a1", + "馹馺馽馿駃駉駓駔駙駚駜駞駧駪駫駬駰駴駵駹駽駾騂騃騄騋騌騐騑騖騞騠騢騣騤騧騭騮騳騵騶騸驇驁驄驊驋驌驎驑驔驖驝骪骬骮骯骲骴骵骶骹骻骾骿髁髃髆髈髎髐髒髕髖髗髛髜髠髤髥髧髩髬髲髳髵髹髺髽髿", + 4 + ], + [ + "8feaa1", + "鬄鬅鬈鬉鬋鬌鬍鬎鬐鬒鬖鬙鬛鬜鬠鬦鬫鬭鬳鬴鬵鬷鬹鬺鬽魈魋魌魕魖魗魛魞魡魣魥魦魨魪", + 4, + "魳魵魷魸魹魿鮀鮄鮅鮆鮇鮉鮊鮋鮍鮏鮐鮔鮚鮝鮞鮦鮧鮩鮬鮰鮱鮲鮷鮸鮻鮼鮾鮿鯁鯇鯈鯎鯐鯗鯘鯝鯟鯥鯧鯪鯫鯯鯳鯷鯸" + ], + [ + "8feba1", + "鯹鯺鯽鯿鰀鰂鰋鰏鰑鰖鰘鰙鰚鰜鰞鰢鰣鰦", + 4, + "鰱鰵鰶鰷鰽鱁鱃鱄鱅鱉鱊鱎鱏鱐鱓鱔鱖鱘鱛鱝鱞鱟鱣鱩鱪鱜鱫鱨鱮鱰鱲鱵鱷鱻鳦鳲鳷鳹鴋鴂鴑鴗鴘鴜鴝鴞鴯鴰鴲鴳鴴鴺鴼鵅鴽鵂鵃鵇鵊鵓鵔鵟鵣鵢鵥鵩鵪鵫鵰鵶鵷鵻" + ], + [ + "8feca1", + "鵼鵾鶃鶄鶆鶊鶍鶎鶒鶓鶕鶖鶗鶘鶡鶪鶬鶮鶱鶵鶹鶼鶿鷃鷇鷉鷊鷔鷕鷖鷗鷚鷞鷟鷠鷥鷧鷩鷫鷮鷰鷳鷴鷾鸊鸂鸇鸎鸐鸑鸒鸕鸖鸙鸜鸝鹺鹻鹼麀麂麃麄麅麇麎麏麖麘麛麞麤麨麬麮麯麰麳麴麵黆黈黋黕黟黤黧黬黭黮黰黱黲黵" + ], + [ + "8feda1", + "黸黿鼂鼃鼉鼏鼐鼑鼒鼔鼖鼗鼙鼚鼛鼟鼢鼦鼪鼫鼯鼱鼲鼴鼷鼹鼺鼼鼽鼿齁齃", + 4, + "齓齕齖齗齘齚齝齞齨齩齭", + 4, + "齳齵齺齽龏龐龑龒龔龖龗龞龡龢龣龥" + ] +]; + +var require$$2 = [ + [ + "0", + "\u0000", + 127, + "€" + ], + [ + "8140", + "丂丄丅丆丏丒丗丟丠両丣並丩丮丯丱丳丵丷丼乀乁乂乄乆乊乑乕乗乚乛乢乣乤乥乧乨乪", + 5, + "乲乴", + 9, + "乿", + 6, + "亇亊" + ], + [ + "8180", + "亐亖亗亙亜亝亞亣亪亯亰亱亴亶亷亸亹亼亽亾仈仌仏仐仒仚仛仜仠仢仦仧仩仭仮仯仱仴仸仹仺仼仾伀伂", + 6, + "伋伌伒", + 4, + "伜伝伡伣伨伩伬伭伮伱伳伵伷伹伻伾", + 4, + "佄佅佇", + 5, + "佒佔佖佡佢佦佨佪佫佭佮佱佲併佷佸佹佺佽侀侁侂侅來侇侊侌侎侐侒侓侕侖侘侙侚侜侞侟価侢" + ], + [ + "8240", + "侤侫侭侰", + 4, + "侶", + 8, + "俀俁係俆俇俈俉俋俌俍俒", + 4, + "俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿", + 11 + ], + [ + "8280", + "個倎倐們倓倕倖倗倛倝倞倠倢倣値倧倫倯", + 10, + "倻倽倿偀偁偂偄偅偆偉偊偋偍偐", + 4, + "偖偗偘偙偛偝", + 7, + "偦", + 5, + "偭", + 8, + "偸偹偺偼偽傁傂傃傄傆傇傉傊傋傌傎", + 20, + "傤傦傪傫傭", + 4, + "傳", + 6, + "傼" + ], + [ + "8340", + "傽", + 17, + "僐", + 5, + "僗僘僙僛", + 10, + "僨僩僪僫僯僰僱僲僴僶", + 4, + "僼", + 9, + "儈" + ], + [ + "8380", + "儉儊儌", + 5, + "儓", + 13, + "儢", + 28, + "兂兇兊兌兎兏児兒兓兗兘兙兛兝", + 4, + "兣兤兦內兩兪兯兲兺兾兿冃冄円冇冊冋冎冏冐冑冓冔冘冚冝冞冟冡冣冦", + 4, + "冭冮冴冸冹冺冾冿凁凂凃凅凈凊凍凎凐凒", + 5 + ], + [ + "8440", + "凘凙凚凜凞凟凢凣凥", + 5, + "凬凮凱凲凴凷凾刄刅刉刋刌刏刐刓刔刕刜刞刟刡刢刣別刦刧刪刬刯刱刲刴刵刼刾剄", + 5, + "剋剎剏剒剓剕剗剘" + ], + [ + "8480", + "剙剚剛剝剟剠剢剣剤剦剨剫剬剭剮剰剱剳", + 9, + "剾劀劃", + 4, + "劉", + 6, + "劑劒劔", + 6, + "劜劤劥劦劧劮劯劰労", + 9, + "勀勁勂勄勅勆勈勊勌勍勎勏勑勓勔動勗務", + 5, + "勠勡勢勣勥", + 10, + "勱", + 7, + "勻勼勽匁匂匃匄匇匉匊匋匌匎" + ], + [ + "8540", + "匑匒匓匔匘匛匜匞匟匢匤匥匧匨匩匫匬匭匯", + 9, + "匼匽區卂卄卆卋卌卍卐協単卙卛卝卥卨卪卬卭卲卶卹卻卼卽卾厀厁厃厇厈厊厎厏" + ], + [ + "8580", + "厐", + 4, + "厖厗厙厛厜厞厠厡厤厧厪厫厬厭厯", + 6, + "厷厸厹厺厼厽厾叀參", + 4, + "収叏叐叒叓叕叚叜叝叞叡叢叧叴叺叾叿吀吂吅吇吋吔吘吙吚吜吢吤吥吪吰吳吶吷吺吽吿呁呂呄呅呇呉呌呍呎呏呑呚呝", + 4, + "呣呥呧呩", + 7, + "呴呹呺呾呿咁咃咅咇咈咉咊咍咑咓咗咘咜咞咟咠咡" + ], + [ + "8640", + "咢咥咮咰咲咵咶咷咹咺咼咾哃哅哊哋哖哘哛哠", + 4, + "哫哬哯哰哱哴", + 5, + "哻哾唀唂唃唄唅唈唊", + 4, + "唒唓唕", + 5, + "唜唝唞唟唡唥唦" + ], + [ + "8680", + "唨唩唫唭唲唴唵唶唸唹唺唻唽啀啂啅啇啈啋", + 4, + "啑啒啓啔啗", + 4, + "啝啞啟啠啢啣啨啩啫啯", + 5, + "啹啺啽啿喅喆喌喍喎喐喒喓喕喖喗喚喛喞喠", + 6, + "喨", + 8, + "喲喴営喸喺喼喿", + 4, + "嗆嗇嗈嗊嗋嗎嗏嗐嗕嗗", + 4, + "嗞嗠嗢嗧嗩嗭嗮嗰嗱嗴嗶嗸", + 4, + "嗿嘂嘃嘄嘅" + ], + [ + "8740", + "嘆嘇嘊嘋嘍嘐", + 7, + "嘙嘚嘜嘝嘠嘡嘢嘥嘦嘨嘩嘪嘫嘮嘯嘰嘳嘵嘷嘸嘺嘼嘽嘾噀", + 11, + "噏", + 4, + "噕噖噚噛噝", + 4 + ], + [ + "8780", + "噣噥噦噧噭噮噯噰噲噳噴噵噷噸噹噺噽", + 7, + "嚇", + 6, + "嚐嚑嚒嚔", + 14, + "嚤", + 10, + "嚰", + 6, + "嚸嚹嚺嚻嚽", + 12, + "囋", + 8, + "囕囖囘囙囜団囥", + 5, + "囬囮囯囲図囶囷囸囻囼圀圁圂圅圇國", + 6 + ], + [ + "8840", + "園", + 9, + "圝圞圠圡圢圤圥圦圧圫圱圲圴", + 4, + "圼圽圿坁坃坄坅坆坈坉坋坒", + 4, + "坘坙坢坣坥坧坬坮坰坱坲坴坵坸坹坺坽坾坿垀" + ], + [ + "8880", + "垁垇垈垉垊垍", + 4, + "垔", + 6, + "垜垝垞垟垥垨垪垬垯垰垱垳垵垶垷垹", + 8, + "埄", + 6, + "埌埍埐埑埓埖埗埛埜埞埡埢埣埥", + 7, + "埮埰埱埲埳埵埶執埻埼埾埿堁堃堄堅堈堉堊堌堎堏堐堒堓堔堖堗堘堚堛堜堝堟堢堣堥", + 4, + "堫", + 4, + "報堲堳場堶", + 7 + ], + [ + "8940", + "堾", + 5, + "塅", + 6, + "塎塏塐塒塓塕塖塗塙", + 4, + "塟", + 5, + "塦", + 4, + "塭", + 16, + "塿墂墄墆墇墈墊墋墌" + ], + [ + "8980", + "墍", + 4, + "墔", + 4, + "墛墜墝墠", + 7, + "墪", + 17, + "墽墾墿壀壂壃壄壆", + 10, + "壒壓壔壖", + 13, + "壥", + 5, + "壭壯壱売壴壵壷壸壺", + 7, + "夃夅夆夈", + 4, + "夎夐夑夒夓夗夘夛夝夞夠夡夢夣夦夨夬夰夲夳夵夶夻" + ], + [ + "8a40", + "夽夾夿奀奃奅奆奊奌奍奐奒奓奙奛", + 4, + "奡奣奤奦", + 12, + "奵奷奺奻奼奾奿妀妅妉妋妌妎妏妐妑妔妕妘妚妛妜妝妟妠妡妢妦" + ], + [ + "8a80", + "妧妬妭妰妱妳", + 5, + "妺妼妽妿", + 6, + "姇姈姉姌姍姎姏姕姖姙姛姞", + 4, + "姤姦姧姩姪姫姭", + 11, + "姺姼姽姾娀娂娊娋娍娎娏娐娒娔娕娖娗娙娚娛娝娞娡娢娤娦娧娨娪", + 6, + "娳娵娷", + 4, + "娽娾娿婁", + 4, + "婇婈婋", + 9, + "婖婗婘婙婛", + 5 + ], + [ + "8b40", + "婡婣婤婥婦婨婩婫", + 8, + "婸婹婻婼婽婾媀", + 17, + "媓", + 6, + "媜", + 13, + "媫媬" + ], + [ + "8b80", + "媭", + 4, + "媴媶媷媹", + 4, + "媿嫀嫃", + 5, + "嫊嫋嫍", + 4, + "嫓嫕嫗嫙嫚嫛嫝嫞嫟嫢嫤嫥嫧嫨嫪嫬", + 4, + "嫲", + 22, + "嬊", + 11, + "嬘", + 25, + "嬳嬵嬶嬸", + 7, + "孁", + 6 + ], + [ + "8c40", + "孈", + 7, + "孒孖孞孠孡孧孨孫孭孮孯孲孴孶孷學孹孻孼孾孿宂宆宊宍宎宐宑宒宔宖実宧宨宩宬宭宮宯宱宲宷宺宻宼寀寁寃寈寉寊寋寍寎寏" + ], + [ + "8c80", + "寑寔", + 8, + "寠寢寣實寧審", + 4, + "寯寱", + 6, + "寽対尀専尃尅將專尋尌對導尐尒尓尗尙尛尞尟尠尡尣尦尨尩尪尫尭尮尯尰尲尳尵尶尷屃屄屆屇屌屍屒屓屔屖屗屘屚屛屜屝屟屢層屧", + 6, + "屰屲", + 6, + "屻屼屽屾岀岃", + 4, + "岉岊岋岎岏岒岓岕岝", + 4, + "岤", + 4 + ], + [ + "8d40", + "岪岮岯岰岲岴岶岹岺岻岼岾峀峂峃峅", + 5, + "峌", + 5, + "峓", + 5, + "峚", + 6, + "峢峣峧峩峫峬峮峯峱", + 9, + "峼", + 4 + ], + [ + "8d80", + "崁崄崅崈", + 5, + "崏", + 4, + "崕崗崘崙崚崜崝崟", + 4, + "崥崨崪崫崬崯", + 4, + "崵", + 7, + "崿", + 7, + "嵈嵉嵍", + 10, + "嵙嵚嵜嵞", + 10, + "嵪嵭嵮嵰嵱嵲嵳嵵", + 12, + "嶃", + 21, + "嶚嶛嶜嶞嶟嶠" + ], + [ + "8e40", + "嶡", + 21, + "嶸", + 12, + "巆", + 6, + "巎", + 12, + "巜巟巠巣巤巪巬巭" + ], + [ + "8e80", + "巰巵巶巸", + 4, + "巿帀帄帇帉帊帋帍帎帒帓帗帞", + 7, + "帨", + 4, + "帯帰帲", + 4, + "帹帺帾帿幀幁幃幆", + 5, + "幍", + 6, + "幖", + 4, + "幜幝幟幠幣", + 14, + "幵幷幹幾庁庂広庅庈庉庌庍庎庒庘庛庝庡庢庣庤庨", + 4, + "庮", + 4, + "庴庺庻庼庽庿", + 6 + ], + [ + "8f40", + "廆廇廈廋", + 5, + "廔廕廗廘廙廚廜", + 11, + "廩廫", + 8, + "廵廸廹廻廼廽弅弆弇弉弌弍弎弐弒弔弖弙弚弜弝弞弡弢弣弤" + ], + [ + "8f80", + "弨弫弬弮弰弲", + 6, + "弻弽弾弿彁", + 14, + "彑彔彙彚彛彜彞彟彠彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿徃徆徍徎徏徑従徔徖徚徛徝從徟徠徢", + 5, + "復徫徬徯", + 5, + "徶徸徹徺徻徾", + 4, + "忇忈忊忋忎忓忔忕忚忛応忞忟忢忣忥忦忨忩忬忯忰忲忳忴忶忷忹忺忼怇" + ], + [ + "9040", + "怈怉怋怌怐怑怓怗怘怚怞怟怢怣怤怬怭怮怰", + 4, + "怶", + 4, + "怽怾恀恄", + 6, + "恌恎恏恑恓恔恖恗恘恛恜恞恟恠恡恥恦恮恱恲恴恵恷恾悀" + ], + [ + "9080", + "悁悂悅悆悇悈悊悋悎悏悐悑悓悕悗悘悙悜悞悡悢悤悥悧悩悪悮悰悳悵悶悷悹悺悽", + 7, + "惇惈惉惌", + 4, + "惒惓惔惖惗惙惛惞惡", + 4, + "惪惱惲惵惷惸惻", + 4, + "愂愃愄愅愇愊愋愌愐", + 4, + "愖愗愘愙愛愜愝愞愡愢愥愨愩愪愬", + 18, + "慀", + 6 + ], + [ + "9140", + "慇慉態慍慏慐慒慓慔慖", + 6, + "慞慟慠慡慣慤慥慦慩", + 6, + "慱慲慳慴慶慸", + 18, + "憌憍憏", + 4, + "憕" + ], + [ + "9180", + "憖", + 6, + "憞", + 8, + "憪憫憭", + 9, + "憸", + 5, + "憿懀懁懃", + 4, + "應懌", + 4, + "懓懕", + 16, + "懧", + 13, + "懶", + 8, + "戀", + 5, + "戇戉戓戔戙戜戝戞戠戣戦戧戨戩戫戭戯戰戱戲戵戶戸", + 4, + "扂扄扅扆扊" + ], + [ + "9240", + "扏扐払扖扗扙扚扜", + 6, + "扤扥扨扱扲扴扵扷扸扺扻扽抁抂抃抅抆抇抈抋", + 5, + "抔抙抜抝択抣抦抧抩抪抭抮抯抰抲抳抴抶抷抸抺抾拀拁" + ], + [ + "9280", + "拃拋拏拑拕拝拞拠拡拤拪拫拰拲拵拸拹拺拻挀挃挄挅挆挊挋挌挍挏挐挒挓挔挕挗挘挙挜挦挧挩挬挭挮挰挱挳", + 5, + "挻挼挾挿捀捁捄捇捈捊捑捒捓捔捖", + 7, + "捠捤捥捦捨捪捫捬捯捰捲捳捴捵捸捹捼捽捾捿掁掃掄掅掆掋掍掑掓掔掕掗掙", + 6, + "採掤掦掫掯掱掲掵掶掹掻掽掿揀" + ], + [ + "9340", + "揁揂揃揅揇揈揊揋揌揑揓揔揕揗", + 6, + "揟揢揤", + 4, + "揫揬揮揯揰揱揳揵揷揹揺揻揼揾搃搄搆", + 4, + "損搎搑搒搕", + 5, + "搝搟搢搣搤" + ], + [ + "9380", + "搥搧搨搩搫搮", + 5, + "搵", + 4, + "搻搼搾摀摂摃摉摋", + 6, + "摓摕摖摗摙", + 4, + "摟", + 7, + "摨摪摫摬摮", + 9, + "摻", + 6, + "撃撆撈", + 8, + "撓撔撗撘撚撛撜撝撟", + 4, + "撥撦撧撨撪撫撯撱撲撳撴撶撹撻撽撾撿擁擃擄擆", + 6, + "擏擑擓擔擕擖擙據" + ], + [ + "9440", + "擛擜擝擟擠擡擣擥擧", + 24, + "攁", + 7, + "攊", + 7, + "攓", + 4, + "攙", + 8 + ], + [ + "9480", + "攢攣攤攦", + 4, + "攬攭攰攱攲攳攷攺攼攽敀", + 4, + "敆敇敊敋敍敎敐敒敓敔敗敘敚敜敟敠敡敤敥敧敨敩敪敭敮敯敱敳敵敶數", + 14, + "斈斉斊斍斎斏斒斔斕斖斘斚斝斞斠斢斣斦斨斪斬斮斱", + 7, + "斺斻斾斿旀旂旇旈旉旊旍旐旑旓旔旕旘", + 7, + "旡旣旤旪旫" + ], + [ + "9540", + "旲旳旴旵旸旹旻", + 4, + "昁昄昅昇昈昉昋昍昐昑昒昖昗昘昚昛昜昞昡昢昣昤昦昩昪昫昬昮昰昲昳昷", + 4, + "昽昿晀時晄", + 6, + "晍晎晐晑晘" + ], + [ + "9580", + "晙晛晜晝晞晠晢晣晥晧晩", + 4, + "晱晲晳晵晸晹晻晼晽晿暀暁暃暅暆暈暉暊暋暍暎暏暐暒暓暔暕暘", + 4, + "暞", + 8, + "暩", + 4, + "暯", + 4, + "暵暶暷暸暺暻暼暽暿", + 25, + "曚曞", + 7, + "曧曨曪", + 5, + "曱曵曶書曺曻曽朁朂會" + ], + [ + "9640", + "朄朅朆朇朌朎朏朑朒朓朖朘朙朚朜朞朠", + 5, + "朧朩朮朰朲朳朶朷朸朹朻朼朾朿杁杄杅杇杊杋杍杒杔杕杗", + 4, + "杝杢杣杤杦杧杫杬杮東杴杶" + ], + [ + "9680", + "杸杹杺杻杽枀枂枃枅枆枈枊枌枍枎枏枑枒枓枔枖枙枛枟枠枡枤枦枩枬枮枱枲枴枹", + 7, + "柂柅", + 9, + "柕柖柗柛柟柡柣柤柦柧柨柪柫柭柮柲柵", + 7, + "柾栁栂栃栄栆栍栐栒栔栕栘", + 4, + "栞栟栠栢", + 6, + "栫", + 6, + "栴栵栶栺栻栿桇桋桍桏桒桖", + 5 + ], + [ + "9740", + "桜桝桞桟桪桬", + 7, + "桵桸", + 8, + "梂梄梇", + 7, + "梐梑梒梔梕梖梘", + 9, + "梣梤梥梩梪梫梬梮梱梲梴梶梷梸" + ], + [ + "9780", + "梹", + 6, + "棁棃", + 5, + "棊棌棎棏棐棑棓棔棖棗棙棛", + 4, + "棡棢棤", + 9, + "棯棲棳棴棶棷棸棻棽棾棿椀椂椃椄椆", + 4, + "椌椏椑椓", + 11, + "椡椢椣椥", + 7, + "椮椯椱椲椳椵椶椷椸椺椻椼椾楀楁楃", + 16, + "楕楖楘楙楛楜楟" + ], + [ + "9840", + "楡楢楤楥楧楨楩楪楬業楯楰楲", + 4, + "楺楻楽楾楿榁榃榅榊榋榌榎", + 5, + "榖榗榙榚榝", + 9, + "榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽" + ], + [ + "9880", + "榾榿槀槂", + 7, + "構槍槏槑槒槓槕", + 5, + "槜槝槞槡", + 11, + "槮槯槰槱槳", + 9, + "槾樀", + 9, + "樋", + 11, + "標", + 5, + "樠樢", + 5, + "権樫樬樭樮樰樲樳樴樶", + 6, + "樿", + 4, + "橅橆橈", + 7, + "橑", + 6, + "橚" + ], + [ + "9940", + "橜", + 4, + "橢橣橤橦", + 10, + "橲", + 6, + "橺橻橽橾橿檁檂檃檅", + 8, + "檏檒", + 4, + "檘", + 7, + "檡", + 5 + ], + [ + "9980", + "檧檨檪檭", + 114, + "欥欦欨", + 6 + ], + [ + "9a40", + "欯欰欱欳欴欵欶欸欻欼欽欿歀歁歂歄歅歈歊歋歍", + 11, + "歚", + 7, + "歨歩歫", + 13, + "歺歽歾歿殀殅殈" + ], + [ + "9a80", + "殌殎殏殐殑殔殕殗殘殙殜", + 4, + "殢", + 7, + "殫", + 7, + "殶殸", + 6, + "毀毃毄毆", + 4, + "毌毎毐毑毘毚毜", + 4, + "毢", + 7, + "毬毭毮毰毱毲毴毶毷毸毺毻毼毾", + 6, + "氈", + 4, + "氎氒気氜氝氞氠氣氥氫氬氭氱氳氶氷氹氺氻氼氾氿汃汄汅汈汋", + 4, + "汑汒汓汖汘" + ], + [ + "9b40", + "汙汚汢汣汥汦汧汫", + 4, + "汱汳汵汷汸決汻汼汿沀沄沇沊沋沍沎沑沒沕沖沗沘沚沜沝沞沠沢沨沬沯沰沴沵沶沷沺泀況泂泃泆泇泈泋泍泎泏泑泒泘" + ], + [ + "9b80", + "泙泚泜泝泟泤泦泧泩泬泭泲泴泹泿洀洂洃洅洆洈洉洊洍洏洐洑洓洔洕洖洘洜洝洟", + 5, + "洦洨洩洬洭洯洰洴洶洷洸洺洿浀浂浄浉浌浐浕浖浗浘浛浝浟浡浢浤浥浧浨浫浬浭浰浱浲浳浵浶浹浺浻浽", + 4, + "涃涄涆涇涊涋涍涏涐涒涖", + 4, + "涜涢涥涬涭涰涱涳涴涶涷涹", + 5, + "淁淂淃淈淉淊" + ], + [ + "9c40", + "淍淎淏淐淒淓淔淕淗淚淛淜淟淢淣淥淧淨淩淪淭淯淰淲淴淵淶淸淺淽", + 7, + "渆渇済渉渋渏渒渓渕渘渙減渜渞渟渢渦渧渨渪測渮渰渱渳渵" + ], + [ + "9c80", + "渶渷渹渻", + 7, + "湅", + 7, + "湏湐湑湒湕湗湙湚湜湝湞湠", + 10, + "湬湭湯", + 14, + "満溁溂溄溇溈溊", + 4, + "溑", + 6, + "溙溚溛溝溞溠溡溣溤溦溨溩溫溬溭溮溰溳溵溸溹溼溾溿滀滃滄滅滆滈滉滊滌滍滎滐滒滖滘滙滛滜滝滣滧滪", + 5 + ], + [ + "9d40", + "滰滱滲滳滵滶滷滸滺", + 7, + "漃漄漅漇漈漊", + 4, + "漐漑漒漖", + 9, + "漡漢漣漥漦漧漨漬漮漰漲漴漵漷", + 6, + "漿潀潁潂" + ], + [ + "9d80", + "潃潄潅潈潉潊潌潎", + 9, + "潙潚潛潝潟潠潡潣潤潥潧", + 5, + "潯潰潱潳潵潶潷潹潻潽", + 6, + "澅澆澇澊澋澏", + 12, + "澝澞澟澠澢", + 4, + "澨", + 10, + "澴澵澷澸澺", + 5, + "濁濃", + 5, + "濊", + 6, + "濓", + 10, + "濟濢濣濤濥" + ], + [ + "9e40", + "濦", + 7, + "濰", + 32, + "瀒", + 7, + "瀜", + 6, + "瀤", + 6 + ], + [ + "9e80", + "瀫", + 9, + "瀶瀷瀸瀺", + 17, + "灍灎灐", + 13, + "灟", + 11, + "灮灱灲灳灴灷灹灺灻災炁炂炃炄炆炇炈炋炌炍炏炐炑炓炗炘炚炛炞", + 12, + "炰炲炴炵炶為炾炿烄烅烆烇烉烋", + 12, + "烚" + ], + [ + "9f40", + "烜烝烞烠烡烢烣烥烪烮烰", + 6, + "烸烺烻烼烾", + 10, + "焋", + 4, + "焑焒焔焗焛", + 10, + "焧", + 7, + "焲焳焴" + ], + [ + "9f80", + "焵焷", + 13, + "煆煇煈煉煋煍煏", + 12, + "煝煟", + 4, + "煥煩", + 4, + "煯煰煱煴煵煶煷煹煻煼煾", + 5, + "熅", + 4, + "熋熌熍熎熐熑熒熓熕熖熗熚", + 4, + "熡", + 6, + "熩熪熫熭", + 5, + "熴熶熷熸熺", + 8, + "燄", + 9, + "燏", + 4 + ], + [ + "a040", + "燖", + 9, + "燡燢燣燤燦燨", + 5, + "燯", + 9, + "燺", + 11, + "爇", + 19 + ], + [ + "a080", + "爛爜爞", + 9, + "爩爫爭爮爯爲爳爴爺爼爾牀", + 6, + "牉牊牋牎牏牐牑牓牔牕牗牘牚牜牞牠牣牤牥牨牪牫牬牭牰牱牳牴牶牷牸牻牼牽犂犃犅", + 4, + "犌犎犐犑犓", + 11, + "犠", + 11, + "犮犱犲犳犵犺", + 6, + "狅狆狇狉狊狋狌狏狑狓狔狕狖狘狚狛" + ], + [ + "a1a1", + " 、。·ˉˇ¨〃々—~‖…‘’“”〔〕〈", + 7, + "〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃$¤¢£‰§№☆★○●◎◇◆□■△▲※→←↑↓〓" + ], + [ + "a2a1", + "ⅰ", + 9 + ], + [ + "a2b1", + "⒈", + 19, + "⑴", + 19, + "①", + 9 + ], + [ + "a2e5", + "㈠", + 9 + ], + [ + "a2f1", + "Ⅰ", + 11 + ], + [ + "a3a1", + "!"#¥%", + 88, + " ̄" + ], + [ + "a4a1", + "ぁ", + 82 + ], + [ + "a5a1", + "ァ", + 85 + ], + [ + "a6a1", + "Α", + 16, + "Σ", + 6 + ], + [ + "a6c1", + "α", + 16, + "σ", + 6 + ], + [ + "a6e0", + "︵︶︹︺︿﹀︽︾﹁﹂﹃﹄" + ], + [ + "a6ee", + "︻︼︷︸︱" + ], + [ + "a6f4", + "︳︴" + ], + [ + "a7a1", + "А", + 5, + "ЁЖ", + 25 + ], + [ + "a7d1", + "а", + 5, + "ёж", + 25 + ], + [ + "a840", + "ˊˋ˙–―‥‵℅℉↖↗↘↙∕∟∣≒≦≧⊿═", + 35, + "▁", + 6 + ], + [ + "a880", + "█", + 7, + "▓▔▕▼▽◢◣◤◥☉⊕〒〝〞" + ], + [ + "a8a1", + "āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑ" + ], + [ + "a8bd", + "ńň" + ], + [ + "a8c0", + "ɡ" + ], + [ + "a8c5", + "ㄅ", + 36 + ], + [ + "a940", + "〡", + 8, + "㊣㎎㎏㎜㎝㎞㎡㏄㏎㏑㏒㏕︰¬¦" + ], + [ + "a959", + "℡㈱" + ], + [ + "a95c", + "‐" + ], + [ + "a960", + "ー゛゜ヽヾ〆ゝゞ﹉", + 9, + "﹔﹕﹖﹗﹙", + 8 + ], + [ + "a980", + "﹢", + 4, + "﹨﹩﹪﹫" + ], + [ + "a996", + "〇" + ], + [ + "a9a4", + "─", + 75 + ], + [ + "aa40", + "狜狝狟狢", + 5, + "狪狫狵狶狹狽狾狿猀猂猄", + 5, + "猋猌猍猏猐猑猒猔猘猙猚猟猠猣猤猦猧猨猭猯猰猲猳猵猶猺猻猼猽獀", + 8 + ], + [ + "aa80", + "獉獊獋獌獎獏獑獓獔獕獖獘", + 7, + "獡", + 10, + "獮獰獱" + ], + [ + "ab40", + "獲", + 11, + "獿", + 4, + "玅玆玈玊玌玍玏玐玒玓玔玕玗玘玙玚玜玝玞玠玡玣", + 5, + "玪玬玭玱玴玵玶玸玹玼玽玾玿珁珃", + 4 + ], + [ + "ab80", + "珋珌珎珒", + 6, + "珚珛珜珝珟珡珢珣珤珦珨珪珫珬珮珯珰珱珳", + 4 + ], + [ + "ac40", + "珸", + 10, + "琄琇琈琋琌琍琎琑", + 8, + "琜", + 5, + "琣琤琧琩琫琭琯琱琲琷", + 4, + "琽琾琿瑀瑂", + 11 + ], + [ + "ac80", + "瑎", + 6, + "瑖瑘瑝瑠", + 12, + "瑮瑯瑱", + 4, + "瑸瑹瑺" + ], + [ + "ad40", + "瑻瑼瑽瑿璂璄璅璆璈璉璊璌璍璏璑", + 10, + "璝璟", + 7, + "璪", + 15, + "璻", + 12 + ], + [ + "ad80", + "瓈", + 9, + "瓓", + 8, + "瓝瓟瓡瓥瓧", + 6, + "瓰瓱瓲" + ], + [ + "ae40", + "瓳瓵瓸", + 6, + "甀甁甂甃甅", + 7, + "甎甐甒甔甕甖甗甛甝甞甠", + 4, + "甦甧甪甮甴甶甹甼甽甿畁畂畃畄畆畇畉畊畍畐畑畒畓畕畖畗畘" + ], + [ + "ae80", + "畝", + 7, + "畧畨畩畫", + 6, + "畳畵當畷畺", + 4, + "疀疁疂疄疅疇" + ], + [ + "af40", + "疈疉疊疌疍疎疐疓疕疘疛疜疞疢疦", + 4, + "疭疶疷疺疻疿痀痁痆痋痌痎痏痐痑痓痗痙痚痜痝痟痠痡痥痩痬痭痮痯痲痳痵痶痷痸痺痻痽痾瘂瘄瘆瘇" + ], + [ + "af80", + "瘈瘉瘋瘍瘎瘏瘑瘒瘓瘔瘖瘚瘜瘝瘞瘡瘣瘧瘨瘬瘮瘯瘱瘲瘶瘷瘹瘺瘻瘽癁療癄" + ], + [ + "b040", + "癅", + 6, + "癎", + 5, + "癕癗", + 4, + "癝癟癠癡癢癤", + 6, + "癬癭癮癰", + 7, + "癹発發癿皀皁皃皅皉皊皌皍皏皐皒皔皕皗皘皚皛" + ], + [ + "b080", + "皜", + 7, + "皥", + 8, + "皯皰皳皵", + 9, + "盀盁盃啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥" + ], + [ + "b140", + "盄盇盉盋盌盓盕盙盚盜盝盞盠", + 4, + "盦", + 7, + "盰盳盵盶盷盺盻盽盿眀眂眃眅眆眊県眎", + 10, + "眛眜眝眞眡眣眤眥眧眪眫" + ], + [ + "b180", + "眬眮眰", + 4, + "眹眻眽眾眿睂睄睅睆睈", + 7, + "睒", + 7, + "睜薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳" + ], + [ + "b240", + "睝睞睟睠睤睧睩睪睭", + 11, + "睺睻睼瞁瞂瞃瞆", + 5, + "瞏瞐瞓", + 11, + "瞡瞣瞤瞦瞨瞫瞭瞮瞯瞱瞲瞴瞶", + 4 + ], + [ + "b280", + "瞼瞾矀", + 12, + "矎", + 8, + "矘矙矚矝", + 4, + "矤病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖" + ], + [ + "b340", + "矦矨矪矯矰矱矲矴矵矷矹矺矻矼砃", + 5, + "砊砋砎砏砐砓砕砙砛砞砠砡砢砤砨砪砫砮砯砱砲砳砵砶砽砿硁硂硃硄硆硈硉硊硋硍硏硑硓硔硘硙硚" + ], + [ + "b380", + "硛硜硞", + 11, + "硯", + 7, + "硸硹硺硻硽", + 6, + "场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚" + ], + [ + "b440", + "碄碅碆碈碊碋碏碐碒碔碕碖碙碝碞碠碢碤碦碨", + 7, + "碵碶碷碸確碻碼碽碿磀磂磃磄磆磇磈磌磍磎磏磑磒磓磖磗磘磚", + 9 + ], + [ + "b480", + "磤磥磦磧磩磪磫磭", + 4, + "磳磵磶磸磹磻", + 5, + "礂礃礄礆", + 6, + "础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮" + ], + [ + "b540", + "礍", + 5, + "礔", + 9, + "礟", + 4, + "礥", + 14, + "礵", + 4, + "礽礿祂祃祄祅祇祊", + 8, + "祔祕祘祙祡祣" + ], + [ + "b580", + "祤祦祩祪祫祬祮祰", + 6, + "祹祻", + 4, + "禂禃禆禇禈禉禋禌禍禎禐禑禒怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠" + ], + [ + "b640", + "禓", + 6, + "禛", + 11, + "禨", + 10, + "禴", + 4, + "禼禿秂秄秅秇秈秊秌秎秏秐秓秔秖秗秙", + 5, + "秠秡秢秥秨秪" + ], + [ + "b680", + "秬秮秱", + 6, + "秹秺秼秾秿稁稄稅稇稈稉稊稌稏", + 4, + "稕稖稘稙稛稜丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二" + ], + [ + "b740", + "稝稟稡稢稤", + 14, + "稴稵稶稸稺稾穀", + 5, + "穇", + 9, + "穒", + 4, + "穘", + 16 + ], + [ + "b780", + "穩", + 6, + "穱穲穳穵穻穼穽穾窂窅窇窉窊窋窌窎窏窐窓窔窙窚窛窞窡窢贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服" + ], + [ + "b840", + "窣窤窧窩窪窫窮", + 4, + "窴", + 10, + "竀", + 10, + "竌", + 9, + "竗竘竚竛竜竝竡竢竤竧", + 5, + "竮竰竱竲竳" + ], + [ + "b880", + "竴", + 4, + "竻竼竾笀笁笂笅笇笉笌笍笎笐笒笓笖笗笘笚笜笝笟笡笢笣笧笩笭浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹" + ], + [ + "b940", + "笯笰笲笴笵笶笷笹笻笽笿", + 5, + "筆筈筊筍筎筓筕筗筙筜筞筟筡筣", + 10, + "筯筰筳筴筶筸筺筼筽筿箁箂箃箄箆", + 6, + "箎箏" + ], + [ + "b980", + "箑箒箓箖箘箙箚箛箞箟箠箣箤箥箮箯箰箲箳箵箶箷箹", + 7, + "篂篃範埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈" + ], + [ + "ba40", + "篅篈築篊篋篍篎篏篐篒篔", + 4, + "篛篜篞篟篠篢篣篤篧篨篩篫篬篭篯篰篲", + 4, + "篸篹篺篻篽篿", + 7, + "簈簉簊簍簎簐", + 5, + "簗簘簙" + ], + [ + "ba80", + "簚", + 4, + "簠", + 5, + "簨簩簫", + 12, + "簹", + 5, + "籂骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖" + ], + [ + "bb40", + "籃", + 9, + "籎", + 36, + "籵", + 5, + "籾", + 9 + ], + [ + "bb80", + "粈粊", + 6, + "粓粔粖粙粚粛粠粡粣粦粧粨粩粫粬粭粯粰粴", + 4, + "粺粻弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕" + ], + [ + "bc40", + "粿糀糂糃糄糆糉糋糎", + 6, + "糘糚糛糝糞糡", + 6, + "糩", + 5, + "糰", + 7, + "糹糺糼", + 13, + "紋", + 5 + ], + [ + "bc80", + "紑", + 14, + "紡紣紤紥紦紨紩紪紬紭紮細", + 6, + "肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件" + ], + [ + "bd40", + "紷", + 54, + "絯", + 7 + ], + [ + "bd80", + "絸", + 32, + "健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸" + ], + [ + "be40", + "継", + 12, + "綧", + 6, + "綯", + 42 + ], + [ + "be80", + "線", + 32, + "尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻" + ], + [ + "bf40", + "緻", + 62 + ], + [ + "bf80", + "縺縼", + 4, + "繂", + 4, + "繈", + 21, + "俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀" + ], + [ + "c040", + "繞", + 35, + "纃", + 23, + "纜纝纞" + ], + [ + "c080", + "纮纴纻纼绖绤绬绹缊缐缞缷缹缻", + 6, + "罃罆", + 9, + "罒罓馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐" + ], + [ + "c140", + "罖罙罛罜罝罞罠罣", + 4, + "罫罬罭罯罰罳罵罶罷罸罺罻罼罽罿羀羂", + 7, + "羋羍羏", + 4, + "羕", + 4, + "羛羜羠羢羣羥羦羨", + 6, + "羱" + ], + [ + "c180", + "羳", + 4, + "羺羻羾翀翂翃翄翆翇翈翉翋翍翏", + 4, + "翖翗翙", + 5, + "翢翣痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿" + ], + [ + "c240", + "翤翧翨翪翫翬翭翯翲翴", + 6, + "翽翾翿耂耇耈耉耊耎耏耑耓耚耛耝耞耟耡耣耤耫", + 5, + "耲耴耹耺耼耾聀聁聄聅聇聈聉聎聏聐聑聓聕聖聗" + ], + [ + "c280", + "聙聛", + 13, + "聫", + 5, + "聲", + 11, + "隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫" + ], + [ + "c340", + "聾肁肂肅肈肊肍", + 5, + "肔肕肗肙肞肣肦肧肨肬肰肳肵肶肸肹肻胅胇", + 4, + "胏", + 6, + "胘胟胠胢胣胦胮胵胷胹胻胾胿脀脁脃脄脅脇脈脋" + ], + [ + "c380", + "脌脕脗脙脛脜脝脟", + 12, + "脭脮脰脳脴脵脷脹", + 4, + "脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸" + ], + [ + "c440", + "腀", + 5, + "腇腉腍腎腏腒腖腗腘腛", + 4, + "腡腢腣腤腦腨腪腫腬腯腲腳腵腶腷腸膁膃", + 4, + "膉膋膌膍膎膐膒", + 5, + "膙膚膞", + 4, + "膤膥" + ], + [ + "c480", + "膧膩膫", + 7, + "膴", + 5, + "膼膽膾膿臄臅臇臈臉臋臍", + 6, + "摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁" + ], + [ + "c540", + "臔", + 14, + "臤臥臦臨臩臫臮", + 4, + "臵", + 5, + "臽臿舃與", + 4, + "舎舏舑舓舕", + 5, + "舝舠舤舥舦舧舩舮舲舺舼舽舿" + ], + [ + "c580", + "艀艁艂艃艅艆艈艊艌艍艎艐", + 7, + "艙艛艜艝艞艠", + 7, + "艩拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗" + ], + [ + "c640", + "艪艫艬艭艱艵艶艷艸艻艼芀芁芃芅芆芇芉芌芐芓芔芕芖芚芛芞芠芢芣芧芲芵芶芺芻芼芿苀苂苃苅苆苉苐苖苙苚苝苢苧苨苩苪苬苭苮苰苲苳苵苶苸" + ], + [ + "c680", + "苺苼", + 4, + "茊茋茍茐茒茓茖茘茙茝", + 9, + "茩茪茮茰茲茷茻茽啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐" + ], + [ + "c740", + "茾茿荁荂荄荅荈荊", + 4, + "荓荕", + 4, + "荝荢荰", + 6, + "荹荺荾", + 6, + "莇莈莊莋莌莍莏莐莑莔莕莖莗莙莚莝莟莡", + 6, + "莬莭莮" + ], + [ + "c780", + "莯莵莻莾莿菂菃菄菆菈菉菋菍菎菐菑菒菓菕菗菙菚菛菞菢菣菤菦菧菨菫菬菭恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠" + ], + [ + "c840", + "菮華菳", + 4, + "菺菻菼菾菿萀萂萅萇萈萉萊萐萒", + 5, + "萙萚萛萞", + 5, + "萩", + 7, + "萲", + 5, + "萹萺萻萾", + 7, + "葇葈葉" + ], + [ + "c880", + "葊", + 6, + "葒", + 4, + "葘葝葞葟葠葢葤", + 4, + "葪葮葯葰葲葴葷葹葻葼取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁" + ], + [ + "c940", + "葽", + 4, + "蒃蒄蒅蒆蒊蒍蒏", + 7, + "蒘蒚蒛蒝蒞蒟蒠蒢", + 12, + "蒰蒱蒳蒵蒶蒷蒻蒼蒾蓀蓂蓃蓅蓆蓇蓈蓋蓌蓎蓏蓒蓔蓕蓗" + ], + [ + "c980", + "蓘", + 4, + "蓞蓡蓢蓤蓧", + 4, + "蓭蓮蓯蓱", + 10, + "蓽蓾蔀蔁蔂伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳" + ], + [ + "ca40", + "蔃", + 8, + "蔍蔎蔏蔐蔒蔔蔕蔖蔘蔙蔛蔜蔝蔞蔠蔢", + 8, + "蔭", + 9, + "蔾", + 4, + "蕄蕅蕆蕇蕋", + 10 + ], + [ + "ca80", + "蕗蕘蕚蕛蕜蕝蕟", + 4, + "蕥蕦蕧蕩", + 8, + "蕳蕵蕶蕷蕸蕼蕽蕿薀薁省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱" + ], + [ + "cb40", + "薂薃薆薈", + 6, + "薐", + 10, + "薝", + 6, + "薥薦薧薩薫薬薭薱", + 5, + "薸薺", + 6, + "藂", + 6, + "藊", + 4, + "藑藒" + ], + [ + "cb80", + "藔藖", + 5, + "藝", + 6, + "藥藦藧藨藪", + 14, + "恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔" + ], + [ + "cc40", + "藹藺藼藽藾蘀", + 4, + "蘆", + 10, + "蘒蘓蘔蘕蘗", + 15, + "蘨蘪", + 13, + "蘹蘺蘻蘽蘾蘿虀" + ], + [ + "cc80", + "虁", + 11, + "虒虓處", + 4, + "虛虜虝號虠虡虣", + 7, + "獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃" + ], + [ + "cd40", + "虭虯虰虲", + 6, + "蚃", + 6, + "蚎", + 4, + "蚔蚖", + 5, + "蚞", + 4, + "蚥蚦蚫蚭蚮蚲蚳蚷蚸蚹蚻", + 4, + "蛁蛂蛃蛅蛈蛌蛍蛒蛓蛕蛖蛗蛚蛜" + ], + [ + "cd80", + "蛝蛠蛡蛢蛣蛥蛦蛧蛨蛪蛫蛬蛯蛵蛶蛷蛺蛻蛼蛽蛿蜁蜄蜅蜆蜋蜌蜎蜏蜐蜑蜔蜖汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威" + ], + [ + "ce40", + "蜙蜛蜝蜟蜠蜤蜦蜧蜨蜪蜫蜬蜭蜯蜰蜲蜳蜵蜶蜸蜹蜺蜼蜽蝀", + 6, + "蝊蝋蝍蝏蝐蝑蝒蝔蝕蝖蝘蝚", + 5, + "蝡蝢蝦", + 7, + "蝯蝱蝲蝳蝵" + ], + [ + "ce80", + "蝷蝸蝹蝺蝿螀螁螄螆螇螉螊螌螎", + 4, + "螔螕螖螘", + 6, + "螠", + 4, + "巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺" + ], + [ + "cf40", + "螥螦螧螩螪螮螰螱螲螴螶螷螸螹螻螼螾螿蟁", + 4, + "蟇蟈蟉蟌", + 4, + "蟔", + 6, + "蟜蟝蟞蟟蟡蟢蟣蟤蟦蟧蟨蟩蟫蟬蟭蟯", + 9 + ], + [ + "cf80", + "蟺蟻蟼蟽蟿蠀蠁蠂蠄", + 5, + "蠋", + 7, + "蠔蠗蠘蠙蠚蠜", + 4, + "蠣稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓" + ], + [ + "d040", + "蠤", + 13, + "蠳", + 5, + "蠺蠻蠽蠾蠿衁衂衃衆", + 5, + "衎", + 5, + "衕衖衘衚", + 6, + "衦衧衪衭衯衱衳衴衵衶衸衹衺" + ], + [ + "d080", + "衻衼袀袃袆袇袉袊袌袎袏袐袑袓袔袕袗", + 4, + "袝", + 4, + "袣袥", + 5, + "小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄" + ], + [ + "d140", + "袬袮袯袰袲", + 4, + "袸袹袺袻袽袾袿裀裃裄裇裈裊裋裌裍裏裐裑裓裖裗裚", + 4, + "裠裡裦裧裩", + 6, + "裲裵裶裷裺裻製裿褀褁褃", + 5 + ], + [ + "d180", + "褉褋", + 4, + "褑褔", + 4, + "褜", + 4, + "褢褣褤褦褧褨褩褬褭褮褯褱褲褳褵褷选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶" + ], + [ + "d240", + "褸", + 8, + "襂襃襅", + 24, + "襠", + 5, + "襧", + 19, + "襼" + ], + [ + "d280", + "襽襾覀覂覄覅覇", + 26, + "摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐" + ], + [ + "d340", + "覢", + 30, + "觃觍觓觔觕觗觘觙觛觝觟觠觡觢觤觧觨觩觪觬觭觮觰觱觲觴", + 6 + ], + [ + "d380", + "觻", + 4, + "訁", + 5, + "計", + 21, + "印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉" + ], + [ + "d440", + "訞", + 31, + "訿", + 8, + "詉", + 21 + ], + [ + "d480", + "詟", + 25, + "詺", + 6, + "浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧" + ], + [ + "d540", + "誁", + 7, + "誋", + 7, + "誔", + 46 + ], + [ + "d580", + "諃", + 32, + "铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政" + ], + [ + "d640", + "諤", + 34, + "謈", + 27 + ], + [ + "d680", + "謤謥謧", + 30, + "帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑" + ], + [ + "d740", + "譆", + 31, + "譧", + 4, + "譭", + 25 + ], + [ + "d780", + "讇", + 24, + "讬讱讻诇诐诪谉谞住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座" + ], + [ + "d840", + "谸", + 8, + "豂豃豄豅豈豊豋豍", + 7, + "豖豗豘豙豛", + 5, + "豣", + 6, + "豬", + 6, + "豴豵豶豷豻", + 6, + "貃貄貆貇" + ], + [ + "d880", + "貈貋貍", + 6, + "貕貖貗貙", + 20, + "亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝" + ], + [ + "d940", + "貮", + 62 + ], + [ + "d980", + "賭", + 32, + "佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼" + ], + [ + "da40", + "贎", + 14, + "贠赑赒赗赟赥赨赩赪赬赮赯赱赲赸", + 8, + "趂趃趆趇趈趉趌", + 4, + "趒趓趕", + 9, + "趠趡" + ], + [ + "da80", + "趢趤", + 12, + "趲趶趷趹趻趽跀跁跂跅跇跈跉跊跍跐跒跓跔凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺" + ], + [ + "db40", + "跕跘跙跜跠跡跢跥跦跧跩跭跮跰跱跲跴跶跼跾", + 6, + "踆踇踈踋踍踎踐踑踒踓踕", + 7, + "踠踡踤", + 4, + "踫踭踰踲踳踴踶踷踸踻踼踾" + ], + [ + "db80", + "踿蹃蹅蹆蹌", + 4, + "蹓", + 5, + "蹚", + 11, + "蹧蹨蹪蹫蹮蹱邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝" + ], + [ + "dc40", + "蹳蹵蹷", + 4, + "蹽蹾躀躂躃躄躆躈", + 6, + "躑躒躓躕", + 6, + "躝躟", + 11, + "躭躮躰躱躳", + 6, + "躻", + 7 + ], + [ + "dc80", + "軃", + 10, + "軏", + 21, + "堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥" + ], + [ + "dd40", + "軥", + 62 + ], + [ + "dd80", + "輤", + 32, + "荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺" + ], + [ + "de40", + "轅", + 32, + "轪辀辌辒辝辠辡辢辤辥辦辧辪辬辭辮辯農辳辴辵辷辸辺辻込辿迀迃迆" + ], + [ + "de80", + "迉", + 4, + "迏迒迖迗迚迠迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿逇逈逌逎逓逕逘蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖" + ], + [ + "df40", + "這逜連逤逥逧", + 5, + "逰", + 4, + "逷逹逺逽逿遀遃遅遆遈", + 4, + "過達違遖遙遚遜", + 5, + "遤遦遧適遪遫遬遯", + 4, + "遶", + 6, + "遾邁" + ], + [ + "df80", + "還邅邆邇邉邊邌", + 4, + "邒邔邖邘邚邜邞邟邠邤邥邧邨邩邫邭邲邷邼邽邿郀摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼" + ], + [ + "e040", + "郂郃郆郈郉郋郌郍郒郔郕郖郘郙郚郞郟郠郣郤郥郩郪郬郮郰郱郲郳郵郶郷郹郺郻郼郿鄀鄁鄃鄅", + 19, + "鄚鄛鄜" + ], + [ + "e080", + "鄝鄟鄠鄡鄤", + 10, + "鄰鄲", + 6, + "鄺", + 8, + "酄唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼" + ], + [ + "e140", + "酅酇酈酑酓酔酕酖酘酙酛酜酟酠酦酧酨酫酭酳酺酻酼醀", + 4, + "醆醈醊醎醏醓", + 6, + "醜", + 5, + "醤", + 5, + "醫醬醰醱醲醳醶醷醸醹醻" + ], + [ + "e180", + "醼", + 10, + "釈釋釐釒", + 9, + "針", + 8, + "帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺" + ], + [ + "e240", + "釦", + 62 + ], + [ + "e280", + "鈥", + 32, + "狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧", + 5, + "饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂" + ], + [ + "e340", + "鉆", + 45, + "鉵", + 16 + ], + [ + "e380", + "銆", + 7, + "銏", + 24, + "恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾" + ], + [ + "e440", + "銨", + 5, + "銯", + 24, + "鋉", + 31 + ], + [ + "e480", + "鋩", + 32, + "洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑" + ], + [ + "e540", + "錊", + 51, + "錿", + 10 + ], + [ + "e580", + "鍊", + 31, + "鍫濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣" + ], + [ + "e640", + "鍬", + 34, + "鎐", + 27 + ], + [ + "e680", + "鎬", + 29, + "鏋鏌鏍妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩" + ], + [ + "e740", + "鏎", + 7, + "鏗", + 54 + ], + [ + "e780", + "鐎", + 32, + "纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡", + 6, + "缪缫缬缭缯", + 4, + "缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬" + ], + [ + "e840", + "鐯", + 14, + "鐿", + 43, + "鑬鑭鑮鑯" + ], + [ + "e880", + "鑰", + 20, + "钑钖钘铇铏铓铔铚铦铻锜锠琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹" + ], + [ + "e940", + "锧锳锽镃镈镋镕镚镠镮镴镵長", + 7, + "門", + 42 + ], + [ + "e980", + "閫", + 32, + "椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋" + ], + [ + "ea40", + "闌", + 27, + "闬闿阇阓阘阛阞阠阣", + 6, + "阫阬阭阯阰阷阸阹阺阾陁陃陊陎陏陑陒陓陖陗" + ], + [ + "ea80", + "陘陙陚陜陝陞陠陣陥陦陫陭", + 4, + "陳陸", + 12, + "隇隉隊辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰" + ], + [ + "eb40", + "隌階隑隒隓隕隖隚際隝", + 9, + "隨", + 7, + "隱隲隴隵隷隸隺隻隿雂雃雈雊雋雐雑雓雔雖", + 9, + "雡", + 6, + "雫" + ], + [ + "eb80", + "雬雭雮雰雱雲雴雵雸雺電雼雽雿霂霃霅霊霋霌霐霑霒霔霕霗", + 4, + "霝霟霠搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻" + ], + [ + "ec40", + "霡", + 8, + "霫霬霮霯霱霳", + 4, + "霺霻霼霽霿", + 18, + "靔靕靗靘靚靜靝靟靣靤靦靧靨靪", + 7 + ], + [ + "ec80", + "靲靵靷", + 4, + "靽", + 7, + "鞆", + 4, + "鞌鞎鞏鞐鞓鞕鞖鞗鞙", + 4, + "臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐" + ], + [ + "ed40", + "鞞鞟鞡鞢鞤", + 6, + "鞬鞮鞰鞱鞳鞵", + 46 + ], + [ + "ed80", + "韤韥韨韮", + 4, + "韴韷", + 23, + "怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨" + ], + [ + "ee40", + "頏", + 62 + ], + [ + "ee80", + "顎", + 32, + "睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶", + 4, + "钼钽钿铄铈", + 6, + "铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪" + ], + [ + "ef40", + "顯", + 5, + "颋颎颒颕颙颣風", + 37, + "飏飐飔飖飗飛飜飝飠", + 4 + ], + [ + "ef80", + "飥飦飩", + 30, + "铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒", + 4, + "锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤", + 8, + "镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔" + ], + [ + "f040", + "餈", + 4, + "餎餏餑", + 28, + "餯", + 26 + ], + [ + "f080", + "饊", + 9, + "饖", + 12, + "饤饦饳饸饹饻饾馂馃馉稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨", + 4, + "鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦", + 6, + "鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙" + ], + [ + "f140", + "馌馎馚", + 10, + "馦馧馩", + 47 + ], + [ + "f180", + "駙", + 32, + "瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃" + ], + [ + "f240", + "駺", + 62 + ], + [ + "f280", + "騹", + 32, + "颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒" + ], + [ + "f340", + "驚", + 17, + "驲骃骉骍骎骔骕骙骦骩", + 6, + "骲骳骴骵骹骻骽骾骿髃髄髆", + 4, + "髍髎髏髐髒體髕髖髗髙髚髛髜" + ], + [ + "f380", + "髝髞髠髢髣髤髥髧髨髩髪髬髮髰", + 8, + "髺髼", + 6, + "鬄鬅鬆蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋" + ], + [ + "f440", + "鬇鬉", + 5, + "鬐鬑鬒鬔", + 10, + "鬠鬡鬢鬤", + 10, + "鬰鬱鬳", + 7, + "鬽鬾鬿魀魆魊魋魌魎魐魒魓魕", + 5 + ], + [ + "f480", + "魛", + 32, + "簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤" + ], + [ + "f540", + "魼", + 62 + ], + [ + "f580", + "鮻", + 32, + "酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜" + ], + [ + "f640", + "鯜", + 62 + ], + [ + "f680", + "鰛", + 32, + "觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅", + 5, + "龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞", + 5, + "鲥", + 4, + "鲫鲭鲮鲰", + 7, + "鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋" + ], + [ + "f740", + "鰼", + 62 + ], + [ + "f780", + "鱻鱽鱾鲀鲃鲄鲉鲊鲌鲏鲓鲖鲗鲘鲙鲝鲪鲬鲯鲹鲾", + 4, + "鳈鳉鳑鳒鳚鳛鳠鳡鳌", + 4, + "鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄" + ], + [ + "f840", + "鳣", + 62 + ], + [ + "f880", + "鴢", + 32 + ], + [ + "f940", + "鵃", + 62 + ], + [ + "f980", + "鶂", + 32 + ], + [ + "fa40", + "鶣", + 62 + ], + [ + "fa80", + "鷢", + 32 + ], + [ + "fb40", + "鸃", + 27, + "鸤鸧鸮鸰鸴鸻鸼鹀鹍鹐鹒鹓鹔鹖鹙鹝鹟鹠鹡鹢鹥鹮鹯鹲鹴", + 9, + "麀" + ], + [ + "fb80", + "麁麃麄麅麆麉麊麌", + 5, + "麔", + 8, + "麞麠", + 5, + "麧麨麩麪" + ], + [ + "fc40", + "麫", + 8, + "麵麶麷麹麺麼麿", + 4, + "黅黆黇黈黊黋黌黐黒黓黕黖黗黙黚點黡黣黤黦黨黫黬黭黮黰", + 8, + "黺黽黿", + 6 + ], + [ + "fc80", + "鼆", + 4, + "鼌鼏鼑鼒鼔鼕鼖鼘鼚", + 5, + "鼡鼣", + 8, + "鼭鼮鼰鼱" + ], + [ + "fd40", + "鼲", + 4, + "鼸鼺鼼鼿", + 4, + "齅", + 10, + "齒", + 38 + ], + [ + "fd80", + "齹", + 5, + "龁龂龍", + 11, + "龜龝龞龡", + 4, + "郎凉秊裏隣" + ], + [ + "fe40", + "兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩" + ] +]; + +var require$$3 = [ + [ + "a140", + "", + 62 + ], + [ + "a180", + "", + 32 + ], + [ + "a240", + "", + 62 + ], + [ + "a280", + "", + 32 + ], + [ + "a2ab", + "", + 5 + ], + [ + "a2e3", + "€" + ], + [ + "a2ef", + "" + ], + [ + "a2fd", + "" + ], + [ + "a340", + "", + 62 + ], + [ + "a380", + "", + 31, + " " + ], + [ + "a440", + "", + 62 + ], + [ + "a480", + "", + 32 + ], + [ + "a4f4", + "", + 10 + ], + [ + "a540", + "", + 62 + ], + [ + "a580", + "", + 32 + ], + [ + "a5f7", + "", + 7 + ], + [ + "a640", + "", + 62 + ], + [ + "a680", + "", + 32 + ], + [ + "a6b9", + "", + 7 + ], + [ + "a6d9", + "", + 6 + ], + [ + "a6ec", + "" + ], + [ + "a6f3", + "" + ], + [ + "a6f6", + "", + 8 + ], + [ + "a740", + "", + 62 + ], + [ + "a780", + "", + 32 + ], + [ + "a7c2", + "", + 14 + ], + [ + "a7f2", + "", + 12 + ], + [ + "a896", + "", + 10 + ], + [ + "a8bc", + "" + ], + [ + "a8bf", + "ǹ" + ], + [ + "a8c1", + "" + ], + [ + "a8ea", + "", + 20 + ], + [ + "a958", + "" + ], + [ + "a95b", + "" + ], + [ + "a95d", + "" + ], + [ + "a989", + "〾⿰", + 11 + ], + [ + "a997", + "", + 12 + ], + [ + "a9f0", + "", + 14 + ], + [ + "aaa1", + "", + 93 + ], + [ + "aba1", + "", + 93 + ], + [ + "aca1", + "", + 93 + ], + [ + "ada1", + "", + 93 + ], + [ + "aea1", + "", + 93 + ], + [ + "afa1", + "", + 93 + ], + [ + "d7fa", + "", + 4 + ], + [ + "f8a1", + "", + 93 + ], + [ + "f9a1", + "", + 93 + ], + [ + "faa1", + "", + 93 + ], + [ + "fba1", + "", + 93 + ], + [ + "fca1", + "", + 93 + ], + [ + "fda1", + "", + 93 + ], + [ + "fe50", + "⺁⺄㑳㑇⺈⺋㖞㘚㘎⺌⺗㥮㤘㧏㧟㩳㧐㭎㱮㳠⺧⺪䁖䅟⺮䌷⺳⺶⺷䎱䎬⺻䏝䓖䙡䙌" + ], + [ + "fe80", + "䜣䜩䝼䞍⻊䥇䥺䥽䦂䦃䦅䦆䦟䦛䦷䦶䲣䲟䲠䲡䱷䲢䴓", + 6, + "䶮", + 93 + ] +]; + +var uChars = [ + 128, + 165, + 169, + 178, + 184, + 216, + 226, + 235, + 238, + 244, + 248, + 251, + 253, + 258, + 276, + 284, + 300, + 325, + 329, + 334, + 364, + 463, + 465, + 467, + 469, + 471, + 473, + 475, + 477, + 506, + 594, + 610, + 712, + 716, + 730, + 930, + 938, + 962, + 970, + 1026, + 1104, + 1106, + 8209, + 8215, + 8218, + 8222, + 8231, + 8241, + 8244, + 8246, + 8252, + 8365, + 8452, + 8454, + 8458, + 8471, + 8482, + 8556, + 8570, + 8596, + 8602, + 8713, + 8720, + 8722, + 8726, + 8731, + 8737, + 8740, + 8742, + 8748, + 8751, + 8760, + 8766, + 8777, + 8781, + 8787, + 8802, + 8808, + 8816, + 8854, + 8858, + 8870, + 8896, + 8979, + 9322, + 9372, + 9548, + 9588, + 9616, + 9622, + 9634, + 9652, + 9662, + 9672, + 9676, + 9680, + 9702, + 9735, + 9738, + 9793, + 9795, + 11906, + 11909, + 11913, + 11917, + 11928, + 11944, + 11947, + 11951, + 11956, + 11960, + 11964, + 11979, + 12284, + 12292, + 12312, + 12319, + 12330, + 12351, + 12436, + 12447, + 12535, + 12543, + 12586, + 12842, + 12850, + 12964, + 13200, + 13215, + 13218, + 13253, + 13263, + 13267, + 13270, + 13384, + 13428, + 13727, + 13839, + 13851, + 14617, + 14703, + 14801, + 14816, + 14964, + 15183, + 15471, + 15585, + 16471, + 16736, + 17208, + 17325, + 17330, + 17374, + 17623, + 17997, + 18018, + 18212, + 18218, + 18301, + 18318, + 18760, + 18811, + 18814, + 18820, + 18823, + 18844, + 18848, + 18872, + 19576, + 19620, + 19738, + 19887, + 40870, + 59244, + 59336, + 59367, + 59413, + 59417, + 59423, + 59431, + 59437, + 59443, + 59452, + 59460, + 59478, + 59493, + 63789, + 63866, + 63894, + 63976, + 63986, + 64016, + 64018, + 64021, + 64025, + 64034, + 64037, + 64042, + 65074, + 65093, + 65107, + 65112, + 65127, + 65132, + 65375, + 65510, + 65536 +]; +var gbChars = [ + 0, + 36, + 38, + 45, + 50, + 81, + 89, + 95, + 96, + 100, + 103, + 104, + 105, + 109, + 126, + 133, + 148, + 172, + 175, + 179, + 208, + 306, + 307, + 308, + 309, + 310, + 311, + 312, + 313, + 341, + 428, + 443, + 544, + 545, + 558, + 741, + 742, + 749, + 750, + 805, + 819, + 820, + 7922, + 7924, + 7925, + 7927, + 7934, + 7943, + 7944, + 7945, + 7950, + 8062, + 8148, + 8149, + 8152, + 8164, + 8174, + 8236, + 8240, + 8262, + 8264, + 8374, + 8380, + 8381, + 8384, + 8388, + 8390, + 8392, + 8393, + 8394, + 8396, + 8401, + 8406, + 8416, + 8419, + 8424, + 8437, + 8439, + 8445, + 8482, + 8485, + 8496, + 8521, + 8603, + 8936, + 8946, + 9046, + 9050, + 9063, + 9066, + 9076, + 9092, + 9100, + 9108, + 9111, + 9113, + 9131, + 9162, + 9164, + 9218, + 9219, + 11329, + 11331, + 11334, + 11336, + 11346, + 11361, + 11363, + 11366, + 11370, + 11372, + 11375, + 11389, + 11682, + 11686, + 11687, + 11692, + 11694, + 11714, + 11716, + 11723, + 11725, + 11730, + 11736, + 11982, + 11989, + 12102, + 12336, + 12348, + 12350, + 12384, + 12393, + 12395, + 12397, + 12510, + 12553, + 12851, + 12962, + 12973, + 13738, + 13823, + 13919, + 13933, + 14080, + 14298, + 14585, + 14698, + 15583, + 15847, + 16318, + 16434, + 16438, + 16481, + 16729, + 17102, + 17122, + 17315, + 17320, + 17402, + 17418, + 17859, + 17909, + 17911, + 17915, + 17916, + 17936, + 17939, + 17961, + 18664, + 18703, + 18814, + 18962, + 19043, + 33469, + 33470, + 33471, + 33484, + 33485, + 33490, + 33497, + 33501, + 33505, + 33513, + 33520, + 33536, + 33550, + 37845, + 37921, + 37948, + 38029, + 38038, + 38064, + 38065, + 38066, + 38069, + 38075, + 38076, + 38078, + 39108, + 39109, + 39113, + 39114, + 39115, + 39116, + 39265, + 39394, + 189000 +]; +var require$$4 = { + uChars: uChars, + gbChars: gbChars +}; + +var require$$5 = [ + [ + "0", + "\u0000", + 127 + ], + [ + "8141", + "갂갃갅갆갋", + 4, + "갘갞갟갡갢갣갥", + 6, + "갮갲갳갴" + ], + [ + "8161", + "갵갶갷갺갻갽갾갿걁", + 9, + "걌걎", + 5, + "걕" + ], + [ + "8181", + "걖걗걙걚걛걝", + 18, + "걲걳걵걶걹걻", + 4, + "겂겇겈겍겎겏겑겒겓겕", + 6, + "겞겢", + 5, + "겫겭겮겱", + 6, + "겺겾겿곀곂곃곅곆곇곉곊곋곍", + 7, + "곖곘", + 7, + "곢곣곥곦곩곫곭곮곲곴곷", + 4, + "곾곿괁괂괃괅괇", + 4, + "괎괐괒괓" + ], + [ + "8241", + "괔괕괖괗괙괚괛괝괞괟괡", + 7, + "괪괫괮", + 5 + ], + [ + "8261", + "괶괷괹괺괻괽", + 6, + "굆굈굊", + 5, + "굑굒굓굕굖굗" + ], + [ + "8281", + "굙", + 7, + "굢굤", + 7, + "굮굯굱굲굷굸굹굺굾궀궃", + 4, + "궊궋궍궎궏궑", + 10, + "궞", + 5, + "궥", + 17, + "궸", + 7, + "귂귃귅귆귇귉", + 6, + "귒귔", + 7, + "귝귞귟귡귢귣귥", + 18 + ], + [ + "8341", + "귺귻귽귾긂", + 5, + "긊긌긎", + 5, + "긕", + 7 + ], + [ + "8361", + "긝", + 18, + "긲긳긵긶긹긻긼" + ], + [ + "8381", + "긽긾긿깂깄깇깈깉깋깏깑깒깓깕깗", + 4, + "깞깢깣깤깦깧깪깫깭깮깯깱", + 6, + "깺깾", + 5, + "꺆", + 5, + "꺍", + 46, + "꺿껁껂껃껅", + 6, + "껎껒", + 5, + "껚껛껝", + 8 + ], + [ + "8441", + "껦껧껩껪껬껮", + 5, + "껵껶껷껹껺껻껽", + 8 + ], + [ + "8461", + "꼆꼉꼊꼋꼌꼎꼏꼑", + 18 + ], + [ + "8481", + "꼤", + 7, + "꼮꼯꼱꼳꼵", + 6, + "꼾꽀꽄꽅꽆꽇꽊", + 5, + "꽑", + 10, + "꽞", + 5, + "꽦", + 18, + "꽺", + 5, + "꾁꾂꾃꾅꾆꾇꾉", + 6, + "꾒꾓꾔꾖", + 5, + "꾝", + 26, + "꾺꾻꾽꾾" + ], + [ + "8541", + "꾿꿁", + 5, + "꿊꿌꿏", + 4, + "꿕", + 6, + "꿝", + 4 + ], + [ + "8561", + "꿢", + 5, + "꿪", + 5, + "꿲꿳꿵꿶꿷꿹", + 6, + "뀂뀃" + ], + [ + "8581", + "뀅", + 6, + "뀍뀎뀏뀑뀒뀓뀕", + 6, + "뀞", + 9, + "뀩", + 26, + "끆끇끉끋끍끏끐끑끒끖끘끚끛끜끞", + 29, + "끾끿낁낂낃낅", + 6, + "낎낐낒", + 5, + "낛낝낞낣낤" + ], + [ + "8641", + "낥낦낧낪낰낲낶낷낹낺낻낽", + 6, + "냆냊", + 5, + "냒" + ], + [ + "8661", + "냓냕냖냗냙", + 6, + "냡냢냣냤냦", + 10 + ], + [ + "8681", + "냱", + 22, + "넊넍넎넏넑넔넕넖넗넚넞", + 4, + "넦넧넩넪넫넭", + 6, + "넶넺", + 5, + "녂녃녅녆녇녉", + 6, + "녒녓녖녗녙녚녛녝녞녟녡", + 22, + "녺녻녽녾녿놁놃", + 4, + "놊놌놎놏놐놑놕놖놗놙놚놛놝" + ], + [ + "8741", + "놞", + 9, + "놩", + 15 + ], + [ + "8761", + "놹", + 18, + "뇍뇎뇏뇑뇒뇓뇕" + ], + [ + "8781", + "뇖", + 5, + "뇞뇠", + 7, + "뇪뇫뇭뇮뇯뇱", + 7, + "뇺뇼뇾", + 5, + "눆눇눉눊눍", + 6, + "눖눘눚", + 5, + "눡", + 18, + "눵", + 6, + "눽", + 26, + "뉙뉚뉛뉝뉞뉟뉡", + 6, + "뉪", + 4 + ], + [ + "8841", + "뉯", + 4, + "뉶", + 5, + "뉽", + 6, + "늆늇늈늊", + 4 + ], + [ + "8861", + "늏늒늓늕늖늗늛", + 4, + "늢늤늧늨늩늫늭늮늯늱늲늳늵늶늷" + ], + [ + "8881", + "늸", + 15, + "닊닋닍닎닏닑닓", + 4, + "닚닜닞닟닠닡닣닧닩닪닰닱닲닶닼닽닾댂댃댅댆댇댉", + 6, + "댒댖", + 5, + "댝", + 54, + "덗덙덚덝덠덡덢덣" + ], + [ + "8941", + "덦덨덪덬덭덯덲덳덵덶덷덹", + 6, + "뎂뎆", + 5, + "뎍" + ], + [ + "8961", + "뎎뎏뎑뎒뎓뎕", + 10, + "뎢", + 5, + "뎩뎪뎫뎭" + ], + [ + "8981", + "뎮", + 21, + "돆돇돉돊돍돏돑돒돓돖돘돚돜돞돟돡돢돣돥돦돧돩", + 18, + "돽", + 18, + "됑", + 6, + "됙됚됛됝됞됟됡", + 6, + "됪됬", + 7, + "됵", + 15 + ], + [ + "8a41", + "둅", + 10, + "둒둓둕둖둗둙", + 6, + "둢둤둦" + ], + [ + "8a61", + "둧", + 4, + "둭", + 18, + "뒁뒂" + ], + [ + "8a81", + "뒃", + 4, + "뒉", + 19, + "뒞", + 5, + "뒥뒦뒧뒩뒪뒫뒭", + 7, + "뒶뒸뒺", + 5, + "듁듂듃듅듆듇듉", + 6, + "듑듒듓듔듖", + 5, + "듞듟듡듢듥듧", + 4, + "듮듰듲", + 5, + "듹", + 26, + "딖딗딙딚딝" + ], + [ + "8b41", + "딞", + 5, + "딦딫", + 4, + "딲딳딵딶딷딹", + 6, + "땂땆" + ], + [ + "8b61", + "땇땈땉땊땎땏땑땒땓땕", + 6, + "땞땢", + 8 + ], + [ + "8b81", + "땫", + 52, + "떢떣떥떦떧떩떬떭떮떯떲떶", + 4, + "떾떿뗁뗂뗃뗅", + 6, + "뗎뗒", + 5, + "뗙", + 18, + "뗭", + 18 + ], + [ + "8c41", + "똀", + 15, + "똒똓똕똖똗똙", + 4 + ], + [ + "8c61", + "똞", + 6, + "똦", + 5, + "똭", + 6, + "똵", + 5 + ], + [ + "8c81", + "똻", + 12, + "뙉", + 26, + "뙥뙦뙧뙩", + 50, + "뚞뚟뚡뚢뚣뚥", + 5, + "뚭뚮뚯뚰뚲", + 16 + ], + [ + "8d41", + "뛃", + 16, + "뛕", + 8 + ], + [ + "8d61", + "뛞", + 17, + "뛱뛲뛳뛵뛶뛷뛹뛺" + ], + [ + "8d81", + "뛻", + 4, + "뜂뜃뜄뜆", + 33, + "뜪뜫뜭뜮뜱", + 6, + "뜺뜼", + 7, + "띅띆띇띉띊띋띍", + 6, + "띖", + 9, + "띡띢띣띥띦띧띩", + 6, + "띲띴띶", + 5, + "띾띿랁랂랃랅", + 6, + "랎랓랔랕랚랛랝랞" + ], + [ + "8e41", + "랟랡", + 6, + "랪랮", + 5, + "랶랷랹", + 8 + ], + [ + "8e61", + "럂", + 4, + "럈럊", + 19 + ], + [ + "8e81", + "럞", + 13, + "럮럯럱럲럳럵", + 6, + "럾렂", + 4, + "렊렋렍렎렏렑", + 6, + "렚렜렞", + 5, + "렦렧렩렪렫렭", + 6, + "렶렺", + 5, + "롁롂롃롅", + 11, + "롒롔", + 7, + "롞롟롡롢롣롥", + 6, + "롮롰롲", + 5, + "롹롺롻롽", + 7 + ], + [ + "8f41", + "뢅", + 7, + "뢎", + 17 + ], + [ + "8f61", + "뢠", + 7, + "뢩", + 6, + "뢱뢲뢳뢵뢶뢷뢹", + 4 + ], + [ + "8f81", + "뢾뢿룂룄룆", + 5, + "룍룎룏룑룒룓룕", + 7, + "룞룠룢", + 5, + "룪룫룭룮룯룱", + 6, + "룺룼룾", + 5, + "뤅", + 18, + "뤙", + 6, + "뤡", + 26, + "뤾뤿륁륂륃륅", + 6, + "륍륎륐륒", + 5 + ], + [ + "9041", + "륚륛륝륞륟륡", + 6, + "륪륬륮", + 5, + "륶륷륹륺륻륽" + ], + [ + "9061", + "륾", + 5, + "릆릈릋릌릏", + 15 + ], + [ + "9081", + "릟", + 12, + "릮릯릱릲릳릵", + 6, + "릾맀맂", + 5, + "맊맋맍맓", + 4, + "맚맜맟맠맢맦맧맩맪맫맭", + 6, + "맶맻", + 4, + "먂", + 5, + "먉", + 11, + "먖", + 33, + "먺먻먽먾먿멁멃멄멅멆" + ], + [ + "9141", + "멇멊멌멏멐멑멒멖멗멙멚멛멝", + 6, + "멦멪", + 5 + ], + [ + "9161", + "멲멳멵멶멷멹", + 9, + "몆몈몉몊몋몍", + 5 + ], + [ + "9181", + "몓", + 20, + "몪몭몮몯몱몳", + 4, + "몺몼몾", + 5, + "뫅뫆뫇뫉", + 14, + "뫚", + 33, + "뫽뫾뫿묁묂묃묅", + 7, + "묎묐묒", + 5, + "묙묚묛묝묞묟묡", + 6 + ], + [ + "9241", + "묨묪묬", + 7, + "묷묹묺묿", + 4, + "뭆뭈뭊뭋뭌뭎뭑뭒" + ], + [ + "9261", + "뭓뭕뭖뭗뭙", + 7, + "뭢뭤", + 7, + "뭭", + 4 + ], + [ + "9281", + "뭲", + 21, + "뮉뮊뮋뮍뮎뮏뮑", + 18, + "뮥뮦뮧뮩뮪뮫뮭", + 6, + "뮵뮶뮸", + 7, + "믁믂믃믅믆믇믉", + 6, + "믑믒믔", + 35, + "믺믻믽믾밁" + ], + [ + "9341", + "밃", + 4, + "밊밎밐밒밓밙밚밠밡밢밣밦밨밪밫밬밮밯밲밳밵" + ], + [ + "9361", + "밶밷밹", + 6, + "뱂뱆뱇뱈뱊뱋뱎뱏뱑", + 8 + ], + [ + "9381", + "뱚뱛뱜뱞", + 37, + "벆벇벉벊벍벏", + 4, + "벖벘벛", + 4, + "벢벣벥벦벩", + 6, + "벲벶", + 5, + "벾벿볁볂볃볅", + 7, + "볎볒볓볔볖볗볙볚볛볝", + 22, + "볷볹볺볻볽" + ], + [ + "9441", + "볾", + 5, + "봆봈봊", + 5, + "봑봒봓봕", + 8 + ], + [ + "9461", + "봞", + 5, + "봥", + 6, + "봭", + 12 + ], + [ + "9481", + "봺", + 5, + "뵁", + 6, + "뵊뵋뵍뵎뵏뵑", + 6, + "뵚", + 9, + "뵥뵦뵧뵩", + 22, + "붂붃붅붆붋", + 4, + "붒붔붖붗붘붛붝", + 6, + "붥", + 10, + "붱", + 6, + "붹", + 24 + ], + [ + "9541", + "뷒뷓뷖뷗뷙뷚뷛뷝", + 11, + "뷪", + 5, + "뷱" + ], + [ + "9561", + "뷲뷳뷵뷶뷷뷹", + 6, + "븁븂븄븆", + 5, + "븎븏븑븒븓" + ], + [ + "9581", + "븕", + 6, + "븞븠", + 35, + "빆빇빉빊빋빍빏", + 4, + "빖빘빜빝빞빟빢빣빥빦빧빩빫", + 4, + "빲빶", + 4, + "빾빿뺁뺂뺃뺅", + 6, + "뺎뺒", + 5, + "뺚", + 13, + "뺩", + 14 + ], + [ + "9641", + "뺸", + 23, + "뻒뻓" + ], + [ + "9661", + "뻕뻖뻙", + 6, + "뻡뻢뻦", + 5, + "뻭", + 8 + ], + [ + "9681", + "뻶", + 10, + "뼂", + 5, + "뼊", + 13, + "뼚뼞", + 33, + "뽂뽃뽅뽆뽇뽉", + 6, + "뽒뽓뽔뽖", + 44 + ], + [ + "9741", + "뾃", + 16, + "뾕", + 8 + ], + [ + "9761", + "뾞", + 17, + "뾱", + 7 + ], + [ + "9781", + "뾹", + 11, + "뿆", + 5, + "뿎뿏뿑뿒뿓뿕", + 6, + "뿝뿞뿠뿢", + 89, + "쀽쀾쀿" + ], + [ + "9841", + "쁀", + 16, + "쁒", + 5, + "쁙쁚쁛" + ], + [ + "9861", + "쁝쁞쁟쁡", + 6, + "쁪", + 15 + ], + [ + "9881", + "쁺", + 21, + "삒삓삕삖삗삙", + 6, + "삢삤삦", + 5, + "삮삱삲삷", + 4, + "삾샂샃샄샆샇샊샋샍샎샏샑", + 6, + "샚샞", + 5, + "샦샧샩샪샫샭", + 6, + "샶샸샺", + 5, + "섁섂섃섅섆섇섉", + 6, + "섑섒섓섔섖", + 5, + "섡섢섥섨섩섪섫섮" + ], + [ + "9941", + "섲섳섴섵섷섺섻섽섾섿셁", + 6, + "셊셎", + 5, + "셖셗" + ], + [ + "9961", + "셙셚셛셝", + 6, + "셦셪", + 5, + "셱셲셳셵셶셷셹셺셻" + ], + [ + "9981", + "셼", + 8, + "솆", + 5, + "솏솑솒솓솕솗", + 4, + "솞솠솢솣솤솦솧솪솫솭솮솯솱", + 11, + "솾", + 5, + "쇅쇆쇇쇉쇊쇋쇍", + 6, + "쇕쇖쇙", + 6, + "쇡쇢쇣쇥쇦쇧쇩", + 6, + "쇲쇴", + 7, + "쇾쇿숁숂숃숅", + 6, + "숎숐숒", + 5, + "숚숛숝숞숡숢숣" + ], + [ + "9a41", + "숤숥숦숧숪숬숮숰숳숵", + 16 + ], + [ + "9a61", + "쉆쉇쉉", + 6, + "쉒쉓쉕쉖쉗쉙", + 6, + "쉡쉢쉣쉤쉦" + ], + [ + "9a81", + "쉧", + 4, + "쉮쉯쉱쉲쉳쉵", + 6, + "쉾슀슂", + 5, + "슊", + 5, + "슑", + 6, + "슙슚슜슞", + 5, + "슦슧슩슪슫슮", + 5, + "슶슸슺", + 33, + "싞싟싡싢싥", + 5, + "싮싰싲싳싴싵싷싺싽싾싿쌁", + 6, + "쌊쌋쌎쌏" + ], + [ + "9b41", + "쌐쌑쌒쌖쌗쌙쌚쌛쌝", + 6, + "쌦쌧쌪", + 8 + ], + [ + "9b61", + "쌳", + 17, + "썆", + 7 + ], + [ + "9b81", + "썎", + 25, + "썪썫썭썮썯썱썳", + 4, + "썺썻썾", + 5, + "쎅쎆쎇쎉쎊쎋쎍", + 50, + "쏁", + 22, + "쏚" + ], + [ + "9c41", + "쏛쏝쏞쏡쏣", + 4, + "쏪쏫쏬쏮", + 5, + "쏶쏷쏹", + 5 + ], + [ + "9c61", + "쏿", + 8, + "쐉", + 6, + "쐑", + 9 + ], + [ + "9c81", + "쐛", + 8, + "쐥", + 6, + "쐭쐮쐯쐱쐲쐳쐵", + 6, + "쐾", + 9, + "쑉", + 26, + "쑦쑧쑩쑪쑫쑭", + 6, + "쑶쑷쑸쑺", + 5, + "쒁", + 18, + "쒕", + 6, + "쒝", + 12 + ], + [ + "9d41", + "쒪", + 13, + "쒹쒺쒻쒽", + 8 + ], + [ + "9d61", + "쓆", + 25 + ], + [ + "9d81", + "쓠", + 8, + "쓪", + 5, + "쓲쓳쓵쓶쓷쓹쓻쓼쓽쓾씂", + 9, + "씍씎씏씑씒씓씕", + 6, + "씝", + 10, + "씪씫씭씮씯씱", + 6, + "씺씼씾", + 5, + "앆앇앋앏앐앑앒앖앚앛앜앟앢앣앥앦앧앩", + 6, + "앲앶", + 5, + "앾앿얁얂얃얅얆얈얉얊얋얎얐얒얓얔" + ], + [ + "9e41", + "얖얙얚얛얝얞얟얡", + 7, + "얪", + 9, + "얶" + ], + [ + "9e61", + "얷얺얿", + 4, + "엋엍엏엒엓엕엖엗엙", + 6, + "엢엤엦엧" + ], + [ + "9e81", + "엨엩엪엫엯엱엲엳엵엸엹엺엻옂옃옄옉옊옋옍옎옏옑", + 6, + "옚옝", + 6, + "옦옧옩옪옫옯옱옲옶옸옺옼옽옾옿왂왃왅왆왇왉", + 6, + "왒왖", + 5, + "왞왟왡", + 10, + "왭왮왰왲", + 5, + "왺왻왽왾왿욁", + 6, + "욊욌욎", + 5, + "욖욗욙욚욛욝", + 6, + "욦" + ], + [ + "9f41", + "욨욪", + 5, + "욲욳욵욶욷욻", + 4, + "웂웄웆", + 5, + "웎" + ], + [ + "9f61", + "웏웑웒웓웕", + 6, + "웞웟웢", + 5, + "웪웫웭웮웯웱웲" + ], + [ + "9f81", + "웳", + 4, + "웺웻웼웾", + 5, + "윆윇윉윊윋윍", + 6, + "윖윘윚", + 5, + "윢윣윥윦윧윩", + 6, + "윲윴윶윸윹윺윻윾윿읁읂읃읅", + 4, + "읋읎읐읙읚읛읝읞읟읡", + 6, + "읩읪읬", + 7, + "읶읷읹읺읻읿잀잁잂잆잋잌잍잏잒잓잕잙잛", + 4, + "잢잧", + 4, + "잮잯잱잲잳잵잶잷" + ], + [ + "a041", + "잸잹잺잻잾쟂", + 5, + "쟊쟋쟍쟏쟑", + 6, + "쟙쟚쟛쟜" + ], + [ + "a061", + "쟞", + 5, + "쟥쟦쟧쟩쟪쟫쟭", + 13 + ], + [ + "a081", + "쟻", + 4, + "젂젃젅젆젇젉젋", + 4, + "젒젔젗", + 4, + "젞젟젡젢젣젥", + 6, + "젮젰젲", + 5, + "젹젺젻젽젾젿졁", + 6, + "졊졋졎", + 5, + "졕", + 26, + "졲졳졵졶졷졹졻", + 4, + "좂좄좈좉좊좎", + 5, + "좕", + 7, + "좞좠좢좣좤" + ], + [ + "a141", + "좥좦좧좩", + 18, + "좾좿죀죁" + ], + [ + "a161", + "죂죃죅죆죇죉죊죋죍", + 6, + "죖죘죚", + 5, + "죢죣죥" + ], + [ + "a181", + "죦", + 14, + "죶", + 5, + "죾죿줁줂줃줇", + 4, + "줎 、。·‥…¨〃­―∥\∼‘’“”〔〕〈", + 9, + "±×÷≠≤≥∞∴°′″℃Å¢£¥♂♀∠⊥⌒∂∇≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨¬" + ], + [ + "a241", + "줐줒", + 5, + "줙", + 18 + ], + [ + "a261", + "줭", + 6, + "줵", + 18 + ], + [ + "a281", + "쥈", + 7, + "쥒쥓쥕쥖쥗쥙", + 6, + "쥢쥤", + 7, + "쥭쥮쥯⇒⇔∀∃´~ˇ˘˝˚˙¸˛¡¿ː∮∑∏¤℉‰◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕↗↙↖↘♭♩♪♬㉿㈜№㏇™㏂㏘℡€®" + ], + [ + "a341", + "쥱쥲쥳쥵", + 6, + "쥽", + 10, + "즊즋즍즎즏" + ], + [ + "a361", + "즑", + 6, + "즚즜즞", + 16 + ], + [ + "a381", + "즯", + 16, + "짂짃짅짆짉짋", + 4, + "짒짔짗짘짛!", + 58, + "₩]", + 32, + " ̄" + ], + [ + "a441", + "짞짟짡짣짥짦짨짩짪짫짮짲", + 5, + "짺짻짽짾짿쨁쨂쨃쨄" + ], + [ + "a461", + "쨅쨆쨇쨊쨎", + 5, + "쨕쨖쨗쨙", + 12 + ], + [ + "a481", + "쨦쨧쨨쨪", + 28, + "ㄱ", + 93 + ], + [ + "a541", + "쩇", + 4, + "쩎쩏쩑쩒쩓쩕", + 6, + "쩞쩢", + 5, + "쩩쩪" + ], + [ + "a561", + "쩫", + 17, + "쩾", + 5, + "쪅쪆" + ], + [ + "a581", + "쪇", + 16, + "쪙", + 14, + "ⅰ", + 9 + ], + [ + "a5b0", + "Ⅰ", + 9 + ], + [ + "a5c1", + "Α", + 16, + "Σ", + 6 + ], + [ + "a5e1", + "α", + 16, + "σ", + 6 + ], + [ + "a641", + "쪨", + 19, + "쪾쪿쫁쫂쫃쫅" + ], + [ + "a661", + "쫆", + 5, + "쫎쫐쫒쫔쫕쫖쫗쫚", + 5, + "쫡", + 6 + ], + [ + "a681", + "쫨쫩쫪쫫쫭", + 6, + "쫵", + 18, + "쬉쬊─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃", + 7 + ], + [ + "a741", + "쬋", + 4, + "쬑쬒쬓쬕쬖쬗쬙", + 6, + "쬢", + 7 + ], + [ + "a761", + "쬪", + 22, + "쭂쭃쭄" + ], + [ + "a781", + "쭅쭆쭇쭊쭋쭍쭎쭏쭑", + 6, + "쭚쭛쭜쭞", + 5, + "쭥", + 7, + "㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙", + 9, + "㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰", + 9, + "㎀", + 4, + "㎺", + 5, + "㎐", + 4, + "Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆" + ], + [ + "a841", + "쭭", + 10, + "쭺", + 14 + ], + [ + "a861", + "쮉", + 18, + "쮝", + 6 + ], + [ + "a881", + "쮤", + 19, + "쮹", + 11, + "ÆÐªĦ" + ], + [ + "a8a6", + "IJ" + ], + [ + "a8a8", + "ĿŁØŒºÞŦŊ" + ], + [ + "a8b1", + "㉠", + 27, + "ⓐ", + 25, + "①", + 14, + "½⅓⅔¼¾⅛⅜⅝⅞" + ], + [ + "a941", + "쯅", + 14, + "쯕", + 10 + ], + [ + "a961", + "쯠쯡쯢쯣쯥쯦쯨쯪", + 18 + ], + [ + "a981", + "쯽", + 14, + "찎찏찑찒찓찕", + 6, + "찞찟찠찣찤æđðħıijĸŀłøœßþŧŋʼn㈀", + 27, + "⒜", + 25, + "⑴", + 14, + "¹²³⁴ⁿ₁₂₃₄" + ], + [ + "aa41", + "찥찦찪찫찭찯찱", + 6, + "찺찿", + 4, + "챆챇챉챊챋챍챎" + ], + [ + "aa61", + "챏", + 4, + "챖챚", + 5, + "챡챢챣챥챧챩", + 6, + "챱챲" + ], + [ + "aa81", + "챳챴챶", + 29, + "ぁ", + 82 + ], + [ + "ab41", + "첔첕첖첗첚첛첝첞첟첡", + 6, + "첪첮", + 5, + "첶첷첹" + ], + [ + "ab61", + "첺첻첽", + 6, + "쳆쳈쳊", + 5, + "쳑쳒쳓쳕", + 5 + ], + [ + "ab81", + "쳛", + 8, + "쳥", + 6, + "쳭쳮쳯쳱", + 12, + "ァ", + 85 + ], + [ + "ac41", + "쳾쳿촀촂", + 5, + "촊촋촍촎촏촑", + 6, + "촚촜촞촟촠" + ], + [ + "ac61", + "촡촢촣촥촦촧촩촪촫촭", + 11, + "촺", + 4 + ], + [ + "ac81", + "촿", + 28, + "쵝쵞쵟А", + 5, + "ЁЖ", + 25 + ], + [ + "acd1", + "а", + 5, + "ёж", + 25 + ], + [ + "ad41", + "쵡쵢쵣쵥", + 6, + "쵮쵰쵲", + 5, + "쵹", + 7 + ], + [ + "ad61", + "춁", + 6, + "춉", + 10, + "춖춗춙춚춛춝춞춟" + ], + [ + "ad81", + "춠춡춢춣춦춨춪", + 5, + "춱", + 18, + "췅" + ], + [ + "ae41", + "췆", + 5, + "췍췎췏췑", + 16 + ], + [ + "ae61", + "췢", + 5, + "췩췪췫췭췮췯췱", + 6, + "췺췼췾", + 4 + ], + [ + "ae81", + "츃츅츆츇츉츊츋츍", + 6, + "츕츖츗츘츚", + 5, + "츢츣츥츦츧츩츪츫" + ], + [ + "af41", + "츬츭츮츯츲츴츶", + 19 + ], + [ + "af61", + "칊", + 13, + "칚칛칝칞칢", + 5, + "칪칬" + ], + [ + "af81", + "칮", + 5, + "칶칷칹칺칻칽", + 6, + "캆캈캊", + 5, + "캒캓캕캖캗캙" + ], + [ + "b041", + "캚", + 5, + "캢캦", + 5, + "캮", + 12 + ], + [ + "b061", + "캻", + 5, + "컂", + 19 + ], + [ + "b081", + "컖", + 13, + "컦컧컩컪컭", + 6, + "컶컺", + 5, + "가각간갇갈갉갊감", + 7, + "같", + 4, + "갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆" + ], + [ + "b141", + "켂켃켅켆켇켉", + 6, + "켒켔켖", + 5, + "켝켞켟켡켢켣" + ], + [ + "b161", + "켥", + 6, + "켮켲", + 5, + "켹", + 11 + ], + [ + "b181", + "콅", + 14, + "콖콗콙콚콛콝", + 6, + "콦콨콪콫콬괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸" + ], + [ + "b241", + "콭콮콯콲콳콵콶콷콹", + 6, + "쾁쾂쾃쾄쾆", + 5, + "쾍" + ], + [ + "b261", + "쾎", + 18, + "쾢", + 5, + "쾩" + ], + [ + "b281", + "쾪", + 5, + "쾱", + 18, + "쿅", + 6, + "깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙" + ], + [ + "b341", + "쿌", + 19, + "쿢쿣쿥쿦쿧쿩" + ], + [ + "b361", + "쿪", + 5, + "쿲쿴쿶", + 5, + "쿽쿾쿿퀁퀂퀃퀅", + 5 + ], + [ + "b381", + "퀋", + 5, + "퀒", + 5, + "퀙", + 19, + "끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫", + 4, + "낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝" + ], + [ + "b441", + "퀮", + 5, + "퀶퀷퀹퀺퀻퀽", + 6, + "큆큈큊", + 5 + ], + [ + "b461", + "큑큒큓큕큖큗큙", + 6, + "큡", + 10, + "큮큯" + ], + [ + "b481", + "큱큲큳큵", + 6, + "큾큿킀킂", + 18, + "뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫", + 4, + "닳담답닷", + 4, + "닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥" + ], + [ + "b541", + "킕", + 14, + "킦킧킩킪킫킭", + 5 + ], + [ + "b561", + "킳킶킸킺", + 5, + "탂탃탅탆탇탊", + 5, + "탒탖", + 4 + ], + [ + "b581", + "탛탞탟탡탢탣탥", + 6, + "탮탲", + 5, + "탹", + 11, + "덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸" + ], + [ + "b641", + "턅", + 7, + "턎", + 17 + ], + [ + "b661", + "턠", + 15, + "턲턳턵턶턷턹턻턼턽턾" + ], + [ + "b681", + "턿텂텆", + 5, + "텎텏텑텒텓텕", + 6, + "텞텠텢", + 5, + "텩텪텫텭땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗" + ], + [ + "b741", + "텮", + 13, + "텽", + 6, + "톅톆톇톉톊" + ], + [ + "b761", + "톋", + 20, + "톢톣톥톦톧" + ], + [ + "b781", + "톩", + 6, + "톲톴톶톷톸톹톻톽톾톿퇁", + 14, + "래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩" + ], + [ + "b841", + "퇐", + 7, + "퇙", + 17 + ], + [ + "b861", + "퇫", + 8, + "퇵퇶퇷퇹", + 13 + ], + [ + "b881", + "툈툊", + 5, + "툑", + 24, + "륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많", + 4, + "맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼" + ], + [ + "b941", + "툪툫툮툯툱툲툳툵", + 6, + "툾퉀퉂", + 5, + "퉉퉊퉋퉌" + ], + [ + "b961", + "퉍", + 14, + "퉝", + 6, + "퉥퉦퉧퉨" + ], + [ + "b981", + "퉩", + 22, + "튂튃튅튆튇튉튊튋튌묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바", + 4, + "받", + 4, + "밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗" + ], + [ + "ba41", + "튍튎튏튒튓튔튖", + 5, + "튝튞튟튡튢튣튥", + 6, + "튭" + ], + [ + "ba61", + "튮튯튰튲", + 5, + "튺튻튽튾틁틃", + 4, + "틊틌", + 5 + ], + [ + "ba81", + "틒틓틕틖틗틙틚틛틝", + 6, + "틦", + 9, + "틲틳틵틶틷틹틺벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤" + ], + [ + "bb41", + "틻", + 4, + "팂팄팆", + 5, + "팏팑팒팓팕팗", + 4, + "팞팢팣" + ], + [ + "bb61", + "팤팦팧팪팫팭팮팯팱", + 6, + "팺팾", + 5, + "퍆퍇퍈퍉" + ], + [ + "bb81", + "퍊", + 31, + "빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤" + ], + [ + "bc41", + "퍪", + 17, + "퍾퍿펁펂펃펅펆펇" + ], + [ + "bc61", + "펈펉펊펋펎펒", + 5, + "펚펛펝펞펟펡", + 6, + "펪펬펮" + ], + [ + "bc81", + "펯", + 4, + "펵펶펷펹펺펻펽", + 6, + "폆폇폊", + 5, + "폑", + 5, + "샥샨샬샴샵샷샹섀섄섈섐섕서", + 4, + "섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭" + ], + [ + "bd41", + "폗폙", + 7, + "폢폤", + 7, + "폮폯폱폲폳폵폶폷" + ], + [ + "bd61", + "폸폹폺폻폾퐀퐂", + 5, + "퐉", + 13 + ], + [ + "bd81", + "퐗", + 5, + "퐞", + 25, + "숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰" + ], + [ + "be41", + "퐸", + 7, + "푁푂푃푅", + 14 + ], + [ + "be61", + "푔", + 7, + "푝푞푟푡푢푣푥", + 7, + "푮푰푱푲" + ], + [ + "be81", + "푳", + 4, + "푺푻푽푾풁풃", + 4, + "풊풌풎", + 5, + "풕", + 8, + "쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄", + 6, + "엌엎" + ], + [ + "bf41", + "풞", + 10, + "풪", + 14 + ], + [ + "bf61", + "풹", + 18, + "퓍퓎퓏퓑퓒퓓퓕" + ], + [ + "bf81", + "퓖", + 5, + "퓝퓞퓠", + 7, + "퓩퓪퓫퓭퓮퓯퓱", + 6, + "퓹퓺퓼에엑엔엘엠엡엣엥여역엮연열엶엷염", + 5, + "옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨" + ], + [ + "c041", + "퓾", + 5, + "픅픆픇픉픊픋픍", + 6, + "픖픘", + 5 + ], + [ + "c061", + "픞", + 25 + ], + [ + "c081", + "픸픹픺픻픾픿핁핂핃핅", + 6, + "핎핐핒", + 5, + "핚핛핝핞핟핡핢핣웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응", + 7, + "읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊" + ], + [ + "c141", + "핤핦핧핪핬핮", + 5, + "핶핷핹핺핻핽", + 6, + "햆햊햋" + ], + [ + "c161", + "햌햍햎햏햑", + 19, + "햦햧" + ], + [ + "c181", + "햨", + 31, + "점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓" + ], + [ + "c241", + "헊헋헍헎헏헑헓", + 4, + "헚헜헞", + 5, + "헦헧헩헪헫헭헮" + ], + [ + "c261", + "헯", + 4, + "헶헸헺", + 5, + "혂혃혅혆혇혉", + 6, + "혒" + ], + [ + "c281", + "혖", + 5, + "혝혞혟혡혢혣혥", + 7, + "혮", + 9, + "혺혻징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻" + ], + [ + "c341", + "혽혾혿홁홂홃홄홆홇홊홌홎홏홐홒홓홖홗홙홚홛홝", + 4 + ], + [ + "c361", + "홢", + 4, + "홨홪", + 5, + "홲홳홵", + 11 + ], + [ + "c381", + "횁횂횄횆", + 5, + "횎횏횑횒횓횕", + 7, + "횞횠횢", + 5, + "횩횪찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층" + ], + [ + "c441", + "횫횭횮횯횱", + 7, + "횺횼", + 7, + "훆훇훉훊훋" + ], + [ + "c461", + "훍훎훏훐훒훓훕훖훘훚", + 5, + "훡훢훣훥훦훧훩", + 4 + ], + [ + "c481", + "훮훯훱훲훳훴훶", + 5, + "훾훿휁휂휃휅", + 11, + "휒휓휔치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼" + ], + [ + "c541", + "휕휖휗휚휛휝휞휟휡", + 6, + "휪휬휮", + 5, + "휶휷휹" + ], + [ + "c561", + "휺휻휽", + 6, + "흅흆흈흊", + 5, + "흒흓흕흚", + 4 + ], + [ + "c581", + "흟흢흤흦흧흨흪흫흭흮흯흱흲흳흵", + 6, + "흾흿힀힂", + 5, + "힊힋큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜" + ], + [ + "c641", + "힍힎힏힑", + 6, + "힚힜힞", + 5 + ], + [ + "c6a1", + "퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁" + ], + [ + "c7a1", + "퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠" + ], + [ + "c8a1", + "혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝" + ], + [ + "caa1", + "伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕刻却各恪慤殼珏脚覺角閣侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間乫喝曷渴碣竭葛褐蝎鞨勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕" + ], + [ + "cba1", + "匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開喀客坑更粳羹醵倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸乾件健巾建愆楗腱虔蹇鍵騫乞傑杰桀儉劍劒檢" + ], + [ + "cca1", + "瞼鈐黔劫怯迲偈憩揭擊格檄激膈覡隔堅牽犬甄絹繭肩見譴遣鵑抉決潔結缺訣兼慊箝謙鉗鎌京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨係啓堺契季屆悸戒桂械" + ], + [ + "cda1", + "棨溪界癸磎稽系繫繼計誡谿階鷄古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓哭斛曲梏穀谷鵠困坤崑昆梱棍滾琨袞鯤汨滑骨供公共功孔工恐恭拱控攻珙空蚣貢鞏串寡戈果瓜" + ], + [ + "cea1", + "科菓誇課跨過鍋顆廓槨藿郭串冠官寬慣棺款灌琯瓘管罐菅觀貫關館刮恝括适侊光匡壙廣曠洸炚狂珖筐胱鑛卦掛罫乖傀塊壞怪愧拐槐魁宏紘肱轟交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久九仇俱具勾" + ], + [ + "cfa1", + "區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局菊鞠鞫麴君窘群裙軍郡堀屈掘窟宮弓穹窮芎躬倦券勸卷圈拳捲權淃眷厥獗蕨蹶闕机櫃潰詭軌饋句晷歸貴" + ], + [ + "d0a1", + "鬼龜叫圭奎揆槻珪硅窺竅糾葵規赳逵閨勻均畇筠菌鈞龜橘克剋劇戟棘極隙僅劤勤懃斤根槿瑾筋芹菫覲謹近饉契今妗擒昑檎琴禁禽芩衾衿襟金錦伋及急扱汲級給亘兢矜肯企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣" + ], + [ + "d1a1", + "朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒緊佶吉拮桔金喫儺喇奈娜懦懶拏拿癩", + 5, + "那樂", + 4, + "諾酪駱亂卵暖欄煖爛蘭難鸞捏捺南嵐枏楠湳濫男藍襤拉" + ], + [ + "d2a1", + "納臘蠟衲囊娘廊", + 4, + "乃來內奈柰耐冷女年撚秊念恬拈捻寧寗努勞奴弩怒擄櫓爐瑙盧", + 5, + "駑魯", + 10, + "濃籠聾膿農惱牢磊腦賂雷尿壘", + 7, + "嫩訥杻紐勒", + 5, + "能菱陵尼泥匿溺多茶" + ], + [ + "d3a1", + "丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛撻澾獺疸達啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟沓畓答踏遝唐堂塘幢戇撞棠當糖螳黨代垈坮大對岱帶待戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃" + ], + [ + "d4a1", + "棹櫂淘渡滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜毒瀆牘犢獨督禿篤纛讀墩惇敦旽暾沌焞燉豚頓乭突仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅兜斗杜枓痘竇荳讀豆逗頭屯臀芚遁遯鈍得嶝橙燈登等藤謄鄧騰喇懶拏癩羅" + ], + [ + "d5a1", + "蘿螺裸邏樂洛烙珞絡落諾酪駱丹亂卵欄欒瀾爛蘭鸞剌辣嵐擥攬欖濫籃纜藍襤覽拉臘蠟廊朗浪狼琅瑯螂郞來崍徠萊冷掠略亮倆兩凉梁樑粮粱糧良諒輛量侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷瀝礫轢靂憐戀攣漣" + ], + [ + "d6a1", + "煉璉練聯蓮輦連鍊冽列劣洌烈裂廉斂殮濂簾獵令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡例澧禮醴隷勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵碌祿綠菉錄鹿麓論壟弄朧瀧瓏籠聾儡瀨牢磊賂賚賴雷了僚寮廖料燎療瞭聊蓼" + ], + [ + "d7a1", + "遼鬧龍壘婁屢樓淚漏瘻累縷蔞褸鏤陋劉旒柳榴流溜瀏琉瑠留瘤硫謬類六戮陸侖倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾菱陵俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉吝潾燐璘藺躪隣鱗麟林淋琳臨霖砬" + ], + [ + "d8a1", + "立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻唜抹末沫茉襪靺亡妄忘忙望網罔芒茫莽輞邙埋妹媒寐昧枚梅每煤罵買賣邁魅脈貊陌驀麥孟氓猛盲盟萌冪覓免冕勉棉沔眄眠綿緬面麵滅" + ], + [ + "d9a1", + "蔑冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌木沐牧目睦穆鶩歿沒夢朦蒙卯墓妙廟描昴杳渺猫竗苗錨務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡墨默們刎吻問文" + ], + [ + "daa1", + "汶紊紋聞蚊門雯勿沕物味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴岷悶愍憫敏旻旼民泯玟珉緡閔密蜜謐剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯勃拔撥渤潑" + ], + [ + "dba1", + "發跋醱鉢髮魃倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪伯佰帛柏栢白百魄幡樊煩燔番磻繁蕃藩飜伐筏罰閥凡帆梵氾汎泛犯範范法琺僻劈壁擘檗璧癖" + ], + [ + "dca1", + "碧蘗闢霹便卞弁變辨辯邊別瞥鱉鼈丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈保堡報寶普步洑湺潽珤甫菩補褓譜輔伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒本乶俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳不付俯傅剖副否咐埠夫婦" + ], + [ + "dda1", + "孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰不佛弗彿拂崩朋棚硼繃鵬丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥" + ], + [ + "dea1", + "脾臂菲蜚裨誹譬費鄙非飛鼻嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻憑氷聘騁乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝削數朔索" + ], + [ + "dfa1", + "傘刪山散汕珊産疝算蒜酸霰乷撒殺煞薩三參杉森渗芟蔘衫揷澁鈒颯上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署" + ], + [ + "e0a1", + "胥舒薯西誓逝鋤黍鼠夕奭席惜昔晳析汐淅潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮卨屑楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾贍閃陝攝涉燮葉城姓宬性惺成星晟猩珹盛省筬" + ], + [ + "e1a1", + "聖聲腥誠醒世勢歲洗稅笹細說貰召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷俗屬束涑粟續謖贖速孫巽損蓀遜飡率宋悚松淞訟誦送頌刷殺灑碎鎖衰釗修受嗽囚垂壽嫂守岫峀帥愁" + ], + [ + "e2a1", + "戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚叔塾夙孰宿淑潚熟琡璹肅菽巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴戌術述鉥崇崧" + ], + [ + "e3a1", + "嵩瑟膝蝨濕拾習褶襲丞乘僧勝升承昇繩蠅陞侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺埴寔式息拭植殖湜熄篒蝕識軾食飾伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅失室實悉審尋心沁" + ], + [ + "e4a1", + "沈深瀋甚芯諶什十拾雙氏亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷安岸按晏案眼雁鞍顔鮟斡謁軋閼唵岩巖庵暗癌菴闇壓押狎鴨仰央怏昻殃秧鴦厓哀埃崖愛曖涯碍艾隘靄厄扼掖液縊腋額" + ], + [ + "e5a1", + "櫻罌鶯鸚也倻冶夜惹揶椰爺耶若野弱掠略約若葯蒻藥躍亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養圄御於漁瘀禦語馭魚齬億憶抑檍臆偃堰彦焉言諺孼蘖俺儼嚴奄掩淹嶪業円予余勵呂女如廬" + ], + [ + "e6a1", + "旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎亦力域役易曆歷疫繹譯轢逆驛嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶列劣咽悅涅烈熱裂說閱厭廉念捻染殮炎焰琰艶苒" + ], + [ + "e7a1", + "簾閻髥鹽曄獵燁葉令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳" + ], + [ + "e8a1", + "烏熬獒筽蜈誤鰲鼇屋沃獄玉鈺溫瑥瘟穩縕蘊兀壅擁瓮甕癰翁邕雍饔渦瓦窩窪臥蛙蝸訛婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬巍猥畏了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療" + ], + [ + "e9a1", + "窈窯繇繞耀腰蓼蟯要謠遙遼邀饒慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩勖彧旭昱栯煜稶郁頊云暈橒殞澐熉耘芸蕓" + ], + [ + "eaa1", + "運隕雲韻蔚鬱亐熊雄元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛月越鉞位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜" + ], + [ + "eba1", + "濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類六堉戮毓肉育陸倫允奫尹崙淪潤玧胤贇輪鈗閏律慄栗率聿戎瀜絨融隆垠恩慇殷誾銀隱乙吟淫蔭陰音飮揖泣邑凝應膺鷹依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼" + ], + [ + "eca1", + "議醫二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟一佚佾壹日溢逸鎰馹任壬妊姙恁林淋稔臨荏賃入卄" + ], + [ + "eda1", + "立笠粒仍剩孕芿仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌作勺嚼斫昨灼炸爵綽芍酌雀鵲孱棧殘潺盞岑暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長" + ], + [ + "eea1", + "障再哉在宰才材栽梓渽滓災縡裁財載齋齎爭箏諍錚佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱" + ], + [ + "efa1", + "煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞切截折浙癤竊節絶占岾店漸点粘霑鮎點接摺蝶丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖" + ], + [ + "f0a1", + "靜頂鼎制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥族簇足鏃存尊卒拙猝倧宗從悰慫棕淙琮種終綜縱腫" + ], + [ + "f1a1", + "踪踵鍾鐘佐坐左座挫罪主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐竹粥俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿茁中仲衆重卽櫛楫汁葺增憎曾拯烝甑症繒蒸證贈之只" + ], + [ + "f2a1", + "咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲直稙稷織職唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭斟朕什執潗緝輯" + ], + [ + "f3a1", + "鏶集徵懲澄且侘借叉嗟嵯差次此磋箚茶蹉車遮捉搾着窄錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌刹察擦札紮僭參塹慘慙懺斬站讒讖倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼債埰寀寨彩採砦綵菜蔡采釵冊柵策" + ], + [ + "f4a1", + "責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆凸哲喆徹撤澈綴輟轍鐵僉尖沾添甛瞻簽籤詹諂堞妾帖捷牒疊睫諜貼輒廳晴淸聽菁請靑鯖切剃替涕滯締諦逮遞體初剿哨憔抄招梢" + ], + [ + "f5a1", + "椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮促囑燭矗蜀觸寸忖村邨叢塚寵悤憁摠總聰蔥銃撮催崔最墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍丑畜祝竺筑築縮蓄蹙蹴軸逐春椿瑃出朮黜充忠沖蟲衝衷悴膵萃" + ], + [ + "f6a1", + "贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲側仄厠惻測層侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸琛砧針鍼蟄秤稱快他咤唾墮妥惰打拖朶楕舵陀馱駝倬卓啄坼度托拓擢晫柝濁濯琢琸託" + ], + [ + "f7a1", + "鐸呑嘆坦彈憚歎灘炭綻誕奪脫探眈耽貪塔搭榻宕帑湯糖蕩兌台太怠態殆汰泰笞胎苔跆邰颱宅擇澤撑攄兎吐土討慟桶洞痛筒統通堆槌腿褪退頹偸套妬投透鬪慝特闖坡婆巴把播擺杷波派爬琶破罷芭跛頗判坂板版瓣販辦鈑" + ], + [ + "f8a1", + "阪八叭捌佩唄悖敗沛浿牌狽稗覇貝彭澎烹膨愎便偏扁片篇編翩遍鞭騙貶坪平枰萍評吠嬖幣廢弊斃肺蔽閉陛佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑幅暴曝瀑爆輻俵剽彪慓杓標漂瓢票表豹飇飄驃" + ], + [ + "f9a1", + "品稟楓諷豊風馮彼披疲皮被避陂匹弼必泌珌畢疋筆苾馝乏逼下何厦夏廈昰河瑕荷蝦賀遐霞鰕壑學虐謔鶴寒恨悍旱汗漢澣瀚罕翰閑閒限韓割轄函含咸啣喊檻涵緘艦銜陷鹹合哈盒蛤閤闔陜亢伉姮嫦巷恒抗杭桁沆港缸肛航" + ], + [ + "faa1", + "行降項亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸杏荇行享向嚮珦鄕響餉饗香噓墟虛許憲櫶獻軒歇險驗奕爀赫革俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯孑穴血頁嫌俠協夾峽挾浹狹脅脇莢鋏頰亨兄刑型" + ], + [ + "fba1", + "形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨兮彗惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥惑或酷婚昏混渾琿魂忽惚笏哄弘汞泓洪烘紅虹訌鴻化和嬅樺火畵" + ], + [ + "fca1", + "禍禾花華話譁貨靴廓擴攫確碻穫丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥活滑猾豁闊凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄劃獲宖橫鐄哮嚆孝效斅曉梟涍淆" + ], + [ + "fda1", + "爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰" + ] +]; + +var require$$6 = [ + [ + "0", + "\u0000", + 127 + ], + [ + "a140", + " ,、。.‧;:?!︰…‥﹐﹑﹒·﹔﹕﹖﹗|–︱—︳╴︴﹏()︵︶{}︷︸〔〕︹︺【】︻︼《》︽︾〈〉︿﹀「」﹁﹂『』﹃﹄﹙﹚" + ], + [ + "a1a1", + "﹛﹜﹝﹞‘’“”〝〞‵′#&*※§〃○●△▲◎☆★◇◆□■▽▼㊣℅¯ ̄_ˍ﹉﹊﹍﹎﹋﹌﹟﹠﹡+-×÷±√<>=≦≧≠∞≒≡﹢", + 4, + "~∩∪⊥∠∟⊿㏒㏑∫∮∵∴♀♂⊕⊙↑↓←→↖↗↙↘∥∣/" + ], + [ + "a240", + "\∕﹨$¥〒¢£%@℃℉﹩﹪﹫㏕㎜㎝㎞㏎㎡㎎㎏㏄°兙兛兞兝兡兣嗧瓩糎▁", + 7, + "▏▎▍▌▋▊▉┼┴┬┤├▔─│▕┌┐└┘╭" + ], + [ + "a2a1", + "╮╰╯═╞╪╡◢◣◥◤╱╲╳0", + 9, + "Ⅰ", + 9, + "〡", + 8, + "十卄卅A", + 25, + "a", + 21 + ], + [ + "a340", + "wxyzΑ", + 16, + "Σ", + 6, + "α", + 16, + "σ", + 6, + "ㄅ", + 10 + ], + [ + "a3a1", + "ㄐ", + 25, + "˙ˉˊˇˋ" + ], + [ + "a3e1", + "€" + ], + [ + "a440", + "一乙丁七乃九了二人儿入八几刀刁力匕十卜又三下丈上丫丸凡久么也乞于亡兀刃勺千叉口土士夕大女子孑孓寸小尢尸山川工己已巳巾干廾弋弓才" + ], + [ + "a4a1", + "丑丐不中丰丹之尹予云井互五亢仁什仃仆仇仍今介仄元允內六兮公冗凶分切刈勻勾勿化匹午升卅卞厄友及反壬天夫太夭孔少尤尺屯巴幻廿弔引心戈戶手扎支文斗斤方日曰月木欠止歹毋比毛氏水火爪父爻片牙牛犬王丙" + ], + [ + "a540", + "世丕且丘主乍乏乎以付仔仕他仗代令仙仞充兄冉冊冬凹出凸刊加功包匆北匝仟半卉卡占卯卮去可古右召叮叩叨叼司叵叫另只史叱台句叭叻四囚外" + ], + [ + "a5a1", + "央失奴奶孕它尼巨巧左市布平幼弁弘弗必戊打扔扒扑斥旦朮本未末札正母民氐永汁汀氾犯玄玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丟乒乓乩亙交亦亥仿伉伙伊伕伍伐休伏仲件任仰仳份企伋光兇兆先全" + ], + [ + "a640", + "共再冰列刑划刎刖劣匈匡匠印危吉吏同吊吐吁吋各向名合吃后吆吒因回囝圳地在圭圬圯圩夙多夷夸妄奸妃好她如妁字存宇守宅安寺尖屹州帆并年" + ], + [ + "a6a1", + "式弛忙忖戎戌戍成扣扛托收早旨旬旭曲曳有朽朴朱朵次此死氖汝汗汙江池汐汕污汛汍汎灰牟牝百竹米糸缶羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色艾虫血行衣西阡串亨位住佇佗佞伴佛何估佐佑伽伺伸佃佔似但佣" + ], + [ + "a740", + "作你伯低伶余佝佈佚兌克免兵冶冷別判利刪刨劫助努劬匣即卵吝吭吞吾否呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶吠吼呀吱含吟听囪困囤囫坊坑址坍" + ], + [ + "a7a1", + "均坎圾坐坏圻壯夾妝妒妨妞妣妙妖妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿尾岐岑岔岌巫希序庇床廷弄弟彤形彷役忘忌志忍忱快忸忪戒我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑抆改攻攸旱更束李杏材村杜杖杞杉杆杠" + ], + [ + "a840", + "杓杗步每求汞沙沁沈沉沅沛汪決沐汰沌汨沖沒汽沃汲汾汴沆汶沍沔沘沂灶灼災灸牢牡牠狄狂玖甬甫男甸皂盯矣私秀禿究系罕肖肓肝肘肛肚育良芒" + ], + [ + "a8a1", + "芋芍見角言谷豆豕貝赤走足身車辛辰迂迆迅迄巡邑邢邪邦那酉釆里防阮阱阪阬並乖乳事些亞享京佯依侍佳使佬供例來侃佰併侈佩佻侖佾侏侑佺兔兒兕兩具其典冽函刻券刷刺到刮制剁劾劻卒協卓卑卦卷卸卹取叔受味呵" + ], + [ + "a940", + "咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎固垃坷坪坩坡坦坤坼夜奉奇奈奄奔妾妻委妹妮姑姆姐姍始姓姊妯妳姒姅孟孤季宗定官宜宙宛尚屈居" + ], + [ + "a9a1", + "屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往征彿彼忝忠忽念忿怏怔怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎放斧於旺昔易昌昆昂明昀昏昕昊" + ], + [ + "aa40", + "昇服朋杭枋枕東果杳杷枇枝林杯杰板枉松析杵枚枓杼杪杲欣武歧歿氓氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油況沮泗泅泱沿治泡泛泊沬泯泜泖泠" + ], + [ + "aaa1", + "炕炎炒炊炙爬爭爸版牧物狀狎狙狗狐玩玨玟玫玥甽疝疙疚的盂盲直知矽社祀祁秉秈空穹竺糾罔羌羋者肺肥肢肱股肫肩肴肪肯臥臾舍芳芝芙芭芽芟芹花芬芥芯芸芣芰芾芷虎虱初表軋迎返近邵邸邱邶采金長門阜陀阿阻附" + ], + [ + "ab40", + "陂隹雨青非亟亭亮信侵侯便俠俑俏保促侶俘俟俊俗侮俐俄係俚俎俞侷兗冒冑冠剎剃削前剌剋則勇勉勃勁匍南卻厚叛咬哀咨哎哉咸咦咳哇哂咽咪品" + ], + [ + "aba1", + "哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契奏奎奐姜姘姿姣姨娃姥姪姚姦威姻孩宣宦室客宥封屎屏屍屋峙峒巷帝帥帟幽庠度建弈弭彥很待徊律徇後徉怒思怠急怎怨恍恰恨恢恆恃恬恫恪恤扁拜挖按拼拭持拮拽指拱拷" + ], + [ + "ac40", + "拯括拾拴挑挂政故斫施既春昭映昧是星昨昱昤曷柿染柱柔某柬架枯柵柩柯柄柑枴柚查枸柏柞柳枰柙柢柝柒歪殃殆段毒毗氟泉洋洲洪流津洌洱洞洗" + ], + [ + "aca1", + "活洽派洶洛泵洹洧洸洩洮洵洎洫炫為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷珊玻玲珍珀玳甚甭畏界畎畋疫疤疥疢疣癸皆皇皈盈盆盃盅省盹相眉看盾盼眇矜砂研砌砍祆祉祈祇禹禺科秒秋穿突竿竽籽紂紅紀紉紇約紆缸美羿耄" + ], + [ + "ad40", + "耐耍耑耶胖胥胚胃胄背胡胛胎胞胤胝致舢苧范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟苯茆虐虹虻虺衍衫要觔計訂訃貞負赴赳趴軍軌述迦迢迪迥" + ], + [ + "ada1", + "迭迫迤迨郊郎郁郃酋酊重閂限陋陌降面革韋韭音頁風飛食首香乘亳倌倍倣俯倦倥俸倩倖倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉兼冤冥冢凍凌准凋剖剜剔剛剝匪卿原厝叟哨唐唁唷哼哥哲唆哺唔哩哭員唉哮哪" + ], + [ + "ae40", + "哦唧唇哽唏圃圄埂埔埋埃堉夏套奘奚娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰害家宴宮宵容宸射屑展屐峭峽峻峪峨峰島崁峴差席師庫庭座弱徒徑徐恙" + ], + [ + "aea1", + "恣恥恐恕恭恩息悄悟悚悍悔悌悅悖扇拳挈拿捎挾振捕捂捆捏捉挺捐挽挪挫挨捍捌效敉料旁旅時晉晏晃晒晌晅晁書朔朕朗校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓栘桁殊殉殷氣氧氨氦氤泰浪涕消涇浦浸海浙涓" + ], + [ + "af40", + "浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙烈烏爹特狼狹狽狸狷玆班琉珮珠珪珞畔畝畜畚留疾病症疲疳疽疼疹痂疸皋皰益盍盎眩真眠眨矩砰砧砸砝破砷" + ], + [ + "afa1", + "砥砭砠砟砲祕祐祠祟祖神祝祗祚秤秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊素索純紐紕級紜納紙紛缺罟羔翅翁耆耘耕耙耗耽耿胱脂胰脅胭胴脆胸胳脈能脊胼胯臭臬舀舐航舫舨般芻茫荒荔荊茸荐草茵茴荏茲茹茶茗荀茱茨荃" + ], + [ + "b040", + "虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽衹記訐討訌訕訊託訓訖訏訑豈豺豹財貢起躬軒軔軏辱送逆迷退迺迴逃追逅迸邕郡郝郢酒配酌釘針釗釜釙閃院陣陡" + ], + [ + "b0a1", + "陛陝除陘陞隻飢馬骨高鬥鬲鬼乾偺偽停假偃偌做偉健偶偎偕偵側偷偏倏偯偭兜冕凰剪副勒務勘動匐匏匙匿區匾參曼商啪啦啄啞啡啃啊唱啖問啕唯啤唸售啜唬啣唳啁啗圈國圉域堅堊堆埠埤基堂堵執培夠奢娶婁婉婦婪婀" + ], + [ + "b140", + "娼婢婚婆婊孰寇寅寄寂宿密尉專將屠屜屝崇崆崎崛崖崢崑崩崔崙崤崧崗巢常帶帳帷康庸庶庵庾張強彗彬彩彫得徙從徘御徠徜恿患悉悠您惋悴惦悽" + ], + [ + "b1a1", + "情悻悵惜悼惘惕惆惟悸惚惇戚戛扈掠控捲掖探接捷捧掘措捱掩掉掃掛捫推掄授掙採掬排掏掀捻捩捨捺敝敖救教敗啟敏敘敕敔斜斛斬族旋旌旎晝晚晤晨晦晞曹勗望梁梯梢梓梵桿桶梱梧梗械梃棄梭梆梅梔條梨梟梡梂欲殺" + ], + [ + "b240", + "毫毬氫涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽犁猜猛猖猓猙率琅琊球理現琍瓠瓶" + ], + [ + "b2a1", + "瓷甜產略畦畢異疏痔痕疵痊痍皎盔盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕絆絃統紮紹紼絀細紳組累終紲紱缽羞羚翌翎習耜聊聆脯脖脣脫脩脰脤舂舵舷舶船莎莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼" + ], + [ + "b340", + "莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞袈被袒袖袍袋覓規訪訝訣訥許設訟訛訢豉豚販責貫貨貪貧赧赦趾趺軛軟這逍通逗連速逝逐逕逞造透逢逖逛途" + ], + [ + "b3a1", + "部郭都酗野釵釦釣釧釭釩閉陪陵陳陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵鹿麥麻傢傍傅備傑傀傖傘傚最凱割剴創剩勞勝勛博厥啻喀喧啼喊喝喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉喫喙圍堯堪場堤堰報堡堝堠壹壺奠" + ], + [ + "b440", + "婷媚婿媒媛媧孳孱寒富寓寐尊尋就嵌嵐崴嵇巽幅帽幀幃幾廊廁廂廄弼彭復循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愒戟扉掣掌描揀揩揉揆揍" + ], + [ + "b4a1", + "插揣提握揖揭揮捶援揪換摒揚揹敞敦敢散斑斐斯普晰晴晶景暑智晾晷曾替期朝棺棕棠棘棗椅棟棵森棧棹棒棲棣棋棍植椒椎棉棚楮棻款欺欽殘殖殼毯氮氯氬港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴湍渺測湃渝渾滋" + ], + [ + "b540", + "溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜牌犄犀猶猥猴猩琺琪琳琢琥琵琶琴琯琛琦琨甥甦畫番痢痛痣痙痘痞痠登發皖皓皴盜睏短硝硬硯稍稈程稅稀窘" + ], + [ + "b5a1", + "窗窖童竣等策筆筐筒答筍筋筏筑粟粥絞結絨絕紫絮絲絡給絢絰絳善翔翕耋聒肅腕腔腋腑腎脹腆脾腌腓腴舒舜菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌菽菲菊萸萎萄菜萇菔菟虛蛟蛙蛭蛔蛛蛤蛐蛞街裁裂袱覃視註詠評詞証詁" + ], + [ + "b640", + "詔詛詐詆訴診訶詖象貂貯貼貳貽賁費賀貴買貶貿貸越超趁跎距跋跚跑跌跛跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣酥量鈔鈕鈣鈉鈞鈍鈐鈇鈑閔閏開閑" + ], + [ + "b6a1", + "間閒閎隊階隋陽隅隆隍陲隄雁雅雄集雇雯雲韌項順須飧飪飯飩飲飭馮馭黃黍黑亂傭債傲傳僅傾催傷傻傯僇剿剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚塔填塌塭塊塢塒塋奧嫁嫉嫌媾媽媼" + ], + [ + "b740", + "媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚意慈感想愛惹愁愈慎慌慄慍愾愴愧愍愆愷戡戢搓搾搞搪搭搽搬搏搜搔損搶搖搗搆敬斟新暗暉暇暈暖暄暘暍會榔業" + ], + [ + "b7a1", + "楚楷楠楔極椰概楊楨楫楞楓楹榆楝楣楛歇歲毀殿毓毽溢溯滓溶滂源溝滇滅溥溘溼溺溫滑準溜滄滔溪溧溴煎煙煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷獅猿猾瑯瑚瑕瑟瑞瑁琿瑙瑛瑜當畸瘀痰瘁痲痱痺痿痴痳盞盟睛睫睦睞督" + ], + [ + "b840", + "睹睪睬睜睥睨睢矮碎碰碗碘碌碉硼碑碓硿祺祿禁萬禽稜稚稠稔稟稞窟窠筷節筠筮筧粱粳粵經絹綑綁綏絛置罩罪署義羨群聖聘肆肄腱腰腸腥腮腳腫" + ], + [ + "b8a1", + "腹腺腦舅艇蒂葷落萱葵葦葫葉葬葛萼萵葡董葩葭葆虞虜號蛹蜓蜈蜇蜀蛾蛻蜂蜃蜆蜊衙裟裔裙補裘裝裡裊裕裒覜解詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂賅跡跟跨路跳跺跪跤跦躲較載軾輊" + ], + [ + "b940", + "辟農運遊道遂達逼違遐遇遏過遍遑逾遁鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉉鉍鉅鈹鈿鉚閘隘隔隕雍雋雉雊雷電雹零靖靴靶預頑頓頊頒頌飼飴" + ], + [ + "b9a1", + "飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖僭僚僕像僑僱僎僩兢凳劃劂匱厭嗾嘀嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘐嗶團圖塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察對屢嶄嶇幛幣幕幗幔廓廖弊彆彰徹慇" + ], + [ + "ba40", + "愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟摺摑摧搴摭摻敲斡旗旖暢暨暝榜榨榕槁榮槓構榛榷榻榫榴槐槍榭槌榦槃榣歉歌氳漳演滾漓滴漩漾漠漬漏漂漢" + ], + [ + "baa1", + "滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲滌滷熔熙煽熊熄熒爾犒犖獄獐瑤瑣瑪瑰瑭甄疑瘧瘍瘋瘉瘓盡監瞄睽睿睡磁碟碧碳碩碣禎福禍種稱窪窩竭端管箕箋筵算箝箔箏箸箇箄粹粽精綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇綬" + ], + [ + "bb40", + "罰翠翡翟聞聚肇腐膀膏膈膊腿膂臧臺與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓蒐蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘蝕蜷蜩裳褂裴裹裸製裨褚裯誦誌語誣認誡誓誤" + ], + [ + "bba1", + "說誥誨誘誑誚誧豪貍貌賓賑賒赫趙趕跼輔輒輕輓辣遠遘遜遣遙遞遢遝遛鄙鄘鄞酵酸酷酴鉸銀銅銘銖鉻銓銜銨鉼銑閡閨閩閣閥閤隙障際雌雒需靼鞅韶頗領颯颱餃餅餌餉駁骯骰髦魁魂鳴鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜" + ], + [ + "bc40", + "劇劈劉劍劊勰厲嘮嘻嘹嘲嘿嘴嘩噓噎噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻嬋嫵嬌嬈寮寬審寫層履嶝嶔幢幟幡廢廚廟廝廣廠彈影德徵慶慧慮慝慕憂" + ], + [ + "bca1", + "慼慰慫慾憧憐憫憎憬憚憤憔憮戮摩摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚撬撙撢撳敵敷數暮暫暴暱樣樟槨樁樞標槽模樓樊槳樂樅槭樑歐歎殤毅毆漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘滕潯潠潟熟熬熱熨牖犛獎獗瑩璋璃" + ], + [ + "bd40", + "瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌瞑瞋磋磅確磊碾磕碼磐稿稼穀稽稷稻窯窮箭箱範箴篆篇篁箠篌糊締練緯緻緘緬緝編緣線緞緩綞緙緲緹罵罷羯" + ], + [ + "bda1", + "翩耦膛膜膝膠膚膘蔗蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蔆螂蝴蝶蝠蝦蝸蝨蝙蝗蝌蝓衛衝褐複褒褓褕褊誼諒談諄誕請諸課諉諂調誰論諍誶誹諛豌豎豬賠賞賦賤賬賭賢賣賜質賡赭趟趣踫踐踝踢踏踩踟踡踞躺輝輛輟輩輦輪輜輞" + ], + [ + "be40", + "輥適遮遨遭遷鄰鄭鄧鄱醇醉醋醃鋅銻銷鋪銬鋤鋁銳銼鋒鋇鋰銲閭閱霄霆震霉靠鞍鞋鞏頡頫頜颳養餓餒餘駝駐駟駛駑駕駒駙骷髮髯鬧魅魄魷魯鴆鴉" + ], + [ + "bea1", + "鴃麩麾黎墨齒儒儘儔儐儕冀冪凝劑劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶壁墾壇壅奮嬝嬴學寰導彊憲憑憩憊懍憶憾懊懈戰擅擁擋撻撼據擄擇擂操撿擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘樹橄橢橡橋橇樵機橈歙歷氅濂澱澡" + ], + [ + "bf40", + "濃澤濁澧澳激澹澶澦澠澴熾燉燐燒燈燕熹燎燙燜燃燄獨璜璣璘璟璞瓢甌甍瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦積穎穆穌穋窺篙簑築篤篛篡篩篦糕糖縊" + ], + [ + "bfa1", + "縑縈縛縣縞縝縉縐罹羲翰翱翮耨膳膩膨臻興艘艙蕊蕙蕈蕨蕩蕃蕉蕭蕪蕞螃螟螞螢融衡褪褲褥褫褡親覦諦諺諫諱謀諜諧諮諾謁謂諷諭諳諶諼豫豭貓賴蹄踱踴蹂踹踵輻輯輸輳辨辦遵遴選遲遼遺鄴醒錠錶鋸錳錯錢鋼錫錄錚" + ], + [ + "c040", + "錐錦錡錕錮錙閻隧隨險雕霎霑霖霍霓霏靛靜靦鞘頰頸頻頷頭頹頤餐館餞餛餡餚駭駢駱骸骼髻髭鬨鮑鴕鴣鴦鴨鴒鴛默黔龍龜優償儡儲勵嚎嚀嚐嚅嚇" + ], + [ + "c0a1", + "嚏壕壓壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾檗檐檠歜殮毚氈濘濱濟濠濛濤濫濯澀濬濡濩濕濮濰燧營燮燦燥燭燬燴燠爵牆獰獲璩環璦璨癆療癌盪瞳瞪瞰瞬" + ], + [ + "c140", + "瞧瞭矯磷磺磴磯礁禧禪穗窿簇簍篾篷簌篠糠糜糞糢糟糙糝縮績繆縷縲繃縫總縱繅繁縴縹繈縵縿縯罄翳翼聱聲聰聯聳臆臃膺臂臀膿膽臉膾臨舉艱薪" + ], + [ + "c1a1", + "薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講謊謠謝謄謐豁谿豳賺賽購賸賻趨蹉蹋蹈蹊轄輾轂轅輿避遽還邁邂邀鄹醣醞醜鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鍚鍔闊闋闌闈闆隱隸雖霜霞鞠韓顆颶餵騁" + ], + [ + "c240", + "駿鮮鮫鮪鮭鴻鴿麋黏點黜黝黛鼾齋叢嚕嚮壙壘嬸彝懣戳擴擲擾攆擺擻擷斷曜朦檳檬櫃檻檸櫂檮檯歟歸殯瀉瀋濾瀆濺瀑瀏燻燼燾燸獷獵璧璿甕癖癘" + ], + [ + "c2a1", + "癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶臍臏舊藏薩藍藐藉薰薺薹薦蟯蟬蟲蟠覆覲觴謨謹謬謫豐贅蹙蹣蹦蹤蹟蹕軀轉轍邇邃邈醫醬釐鎔鎊鎖鎢鎳鎮鎬鎰鎘鎚鎗闔闖闐闕離雜雙雛雞霤鞣鞦" + ], + [ + "c340", + "鞭韹額顏題顎顓颺餾餿餽餮馥騎髁鬃鬆魏魎魍鯊鯉鯽鯈鯀鵑鵝鵠黠鼕鼬儳嚥壞壟壢寵龐廬懲懷懶懵攀攏曠曝櫥櫝櫚櫓瀛瀟瀨瀚瀝瀕瀘爆爍牘犢獸" + ], + [ + "c3a1", + "獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩藝藪藕藤藥藷蟻蠅蠍蟹蟾襠襟襖襞譁譜識證譚譎譏譆譙贈贊蹼蹲躇蹶蹬蹺蹴轔轎辭邊邋醱醮鏡鏑鏟鏃鏈鏜鏝鏖鏢鏍鏘鏤鏗鏨關隴難霪霧靡韜韻類" + ], + [ + "c440", + "願顛颼饅饉騖騙鬍鯨鯧鯖鯛鶉鵡鵲鵪鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶巉懸懺攘攔攙曦朧櫬瀾瀰瀲爐獻瓏癢癥礦礪礬礫竇競籌籃籍糯糰辮繽繼" + ], + [ + "c4a1", + "纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕襤覺觸議譬警譯譟譫贏贍躉躁躅躂醴釋鐘鐃鏽闡霰飄饒饑馨騫騰騷騵鰓鰍鹹麵黨鼯齟齣齡儷儸囁囀囂夔屬巍懼懾攝攜斕曩櫻欄櫺殲灌爛犧瓖瓔癩矓籐纏續羼蘗蘭蘚蠣蠢蠡蠟襪襬覽譴" + ], + [ + "c540", + "護譽贓躊躍躋轟辯醺鐮鐳鐵鐺鐸鐲鐫闢霸霹露響顧顥饗驅驃驀騾髏魔魑鰭鰥鶯鶴鷂鶸麝黯鼙齜齦齧儼儻囈囊囉孿巔巒彎懿攤權歡灑灘玀瓤疊癮癬" + ], + [ + "c5a1", + "禳籠籟聾聽臟襲襯觼讀贖贗躑躓轡酈鑄鑑鑒霽霾韃韁顫饕驕驍髒鬚鱉鰱鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬欐瓚竊籤籣籥纓纖纔臢蘸蘿蠱變邐邏鑣鑠鑤靨顯饜驚驛驗髓體髑鱔鱗鱖鷥麟黴囑壩攬灞癱癲矗罐羈蠶蠹衢讓讒" + ], + [ + "c640", + "讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲" + ], + [ + "c940", + "乂乜凵匚厂万丌乇亍囗兀屮彳丏冇与丮亓仂仉仈冘勼卬厹圠夃夬尐巿旡殳毌气爿丱丼仨仜仩仡仝仚刌匜卌圢圣夗夯宁宄尒尻屴屳帄庀庂忉戉扐氕" + ], + [ + "c9a1", + "氶汃氿氻犮犰玊禸肊阞伎优伬仵伔仱伀价伈伝伂伅伢伓伄仴伒冱刓刉刐劦匢匟卍厊吇囡囟圮圪圴夼妀奼妅奻奾奷奿孖尕尥屼屺屻屾巟幵庄异弚彴忕忔忏扜扞扤扡扦扢扙扠扚扥旯旮朾朹朸朻机朿朼朳氘汆汒汜汏汊汔汋" + ], + [ + "ca40", + "汌灱牞犴犵玎甪癿穵网艸艼芀艽艿虍襾邙邗邘邛邔阢阤阠阣佖伻佢佉体佤伾佧佒佟佁佘伭伳伿佡冏冹刜刞刡劭劮匉卣卲厎厏吰吷吪呔呅吙吜吥吘" + ], + [ + "caa1", + "吽呏呁吨吤呇囮囧囥坁坅坌坉坋坒夆奀妦妘妠妗妎妢妐妏妧妡宎宒尨尪岍岏岈岋岉岒岊岆岓岕巠帊帎庋庉庌庈庍弅弝彸彶忒忑忐忭忨忮忳忡忤忣忺忯忷忻怀忴戺抃抌抎抏抔抇扱扻扺扰抁抈扷扽扲扴攷旰旴旳旲旵杅杇" + ], + [ + "cb40", + "杙杕杌杈杝杍杚杋毐氙氚汸汧汫沄沋沏汱汯汩沚汭沇沕沜汦汳汥汻沎灴灺牣犿犽狃狆狁犺狅玕玗玓玔玒町甹疔疕皁礽耴肕肙肐肒肜芐芏芅芎芑芓" + ], + [ + "cba1", + "芊芃芄豸迉辿邟邡邥邞邧邠阰阨阯阭丳侘佼侅佽侀侇佶佴侉侄佷佌侗佪侚佹侁佸侐侜侔侞侒侂侕佫佮冞冼冾刵刲刳剆刱劼匊匋匼厒厔咇呿咁咑咂咈呫呺呾呥呬呴呦咍呯呡呠咘呣呧呤囷囹坯坲坭坫坱坰坶垀坵坻坳坴坢" + ], + [ + "cc40", + "坨坽夌奅妵妺姏姎妲姌姁妶妼姃姖妱妽姀姈妴姇孢孥宓宕屄屇岮岤岠岵岯岨岬岟岣岭岢岪岧岝岥岶岰岦帗帔帙弨弢弣弤彔徂彾彽忞忥怭怦怙怲怋" + ], + [ + "cca1", + "怴怊怗怳怚怞怬怢怍怐怮怓怑怌怉怜戔戽抭抴拑抾抪抶拊抮抳抯抻抩抰抸攽斨斻昉旼昄昒昈旻昃昋昍昅旽昑昐曶朊枅杬枎枒杶杻枘枆构杴枍枌杺枟枑枙枃杽极杸杹枔欥殀歾毞氝沓泬泫泮泙沶泔沭泧沷泐泂沺泃泆泭泲" + ], + [ + "cd40", + "泒泝沴沊沝沀泞泀洰泍泇沰泹泏泩泑炔炘炅炓炆炄炑炖炂炚炃牪狖狋狘狉狜狒狔狚狌狑玤玡玭玦玢玠玬玝瓝瓨甿畀甾疌疘皯盳盱盰盵矸矼矹矻矺" + ], + [ + "cda1", + "矷祂礿秅穸穻竻籵糽耵肏肮肣肸肵肭舠芠苀芫芚芘芛芵芧芮芼芞芺芴芨芡芩苂芤苃芶芢虰虯虭虮豖迒迋迓迍迖迕迗邲邴邯邳邰阹阽阼阺陃俍俅俓侲俉俋俁俔俜俙侻侳俛俇俖侺俀侹俬剄剉勀勂匽卼厗厖厙厘咺咡咭咥哏" + ], + [ + "ce40", + "哃茍咷咮哖咶哅哆咠呰咼咢咾呲哞咰垵垞垟垤垌垗垝垛垔垘垏垙垥垚垕壴复奓姡姞姮娀姱姝姺姽姼姶姤姲姷姛姩姳姵姠姾姴姭宨屌峐峘峌峗峋峛" + ], + [ + "cea1", + "峞峚峉峇峊峖峓峔峏峈峆峎峟峸巹帡帢帣帠帤庰庤庢庛庣庥弇弮彖徆怷怹恔恲恞恅恓恇恉恛恌恀恂恟怤恄恘恦恮扂扃拏挍挋拵挎挃拫拹挏挌拸拶挀挓挔拺挕拻拰敁敃斪斿昶昡昲昵昜昦昢昳昫昺昝昴昹昮朏朐柁柲柈枺" + ], + [ + "cf40", + "柜枻柸柘柀枷柅柫柤柟枵柍枳柷柶柮柣柂枹柎柧柰枲柼柆柭柌枮柦柛柺柉柊柃柪柋欨殂殄殶毖毘毠氠氡洨洴洭洟洼洿洒洊泚洳洄洙洺洚洑洀洝浂" + ], + [ + "cfa1", + "洁洘洷洃洏浀洇洠洬洈洢洉洐炷炟炾炱炰炡炴炵炩牁牉牊牬牰牳牮狊狤狨狫狟狪狦狣玅珌珂珈珅玹玶玵玴珫玿珇玾珃珆玸珋瓬瓮甮畇畈疧疪癹盄眈眃眄眅眊盷盻盺矧矨砆砑砒砅砐砏砎砉砃砓祊祌祋祅祄秕种秏秖秎窀" + ], + [ + "d040", + "穾竑笀笁籺籸籹籿粀粁紃紈紁罘羑羍羾耇耎耏耔耷胘胇胠胑胈胂胐胅胣胙胜胊胕胉胏胗胦胍臿舡芔苙苾苹茇苨茀苕茺苫苖苴苬苡苲苵茌苻苶苰苪" + ], + [ + "d0a1", + "苤苠苺苳苭虷虴虼虳衁衎衧衪衩觓訄訇赲迣迡迮迠郱邽邿郕郅邾郇郋郈釔釓陔陏陑陓陊陎倞倅倇倓倢倰倛俵俴倳倷倬俶俷倗倜倠倧倵倯倱倎党冔冓凊凄凅凈凎剡剚剒剞剟剕剢勍匎厞唦哢唗唒哧哳哤唚哿唄唈哫唑唅哱" + ], + [ + "d140", + "唊哻哷哸哠唎唃唋圁圂埌堲埕埒垺埆垽垼垸垶垿埇埐垹埁夎奊娙娖娭娮娕娏娗娊娞娳孬宧宭宬尃屖屔峬峿峮峱峷崀峹帩帨庨庮庪庬弳弰彧恝恚恧" + ], + [ + "d1a1", + "恁悢悈悀悒悁悝悃悕悛悗悇悜悎戙扆拲挐捖挬捄捅挶捃揤挹捋捊挼挩捁挴捘捔捙挭捇挳捚捑挸捗捀捈敊敆旆旃旄旂晊晟晇晑朒朓栟栚桉栲栳栻桋桏栖栱栜栵栫栭栯桎桄栴栝栒栔栦栨栮桍栺栥栠欬欯欭欱欴歭肂殈毦毤" + ], + [ + "d240", + "毨毣毢毧氥浺浣浤浶洍浡涒浘浢浭浯涑涍淯浿涆浞浧浠涗浰浼浟涂涘洯浨涋浾涀涄洖涃浻浽浵涐烜烓烑烝烋缹烢烗烒烞烠烔烍烅烆烇烚烎烡牂牸" + ], + [ + "d2a1", + "牷牶猀狺狴狾狶狳狻猁珓珙珥珖玼珧珣珩珜珒珛珔珝珚珗珘珨瓞瓟瓴瓵甡畛畟疰痁疻痄痀疿疶疺皊盉眝眛眐眓眒眣眑眕眙眚眢眧砣砬砢砵砯砨砮砫砡砩砳砪砱祔祛祏祜祓祒祑秫秬秠秮秭秪秜秞秝窆窉窅窋窌窊窇竘笐" + ], + [ + "d340", + "笄笓笅笏笈笊笎笉笒粄粑粊粌粈粍粅紞紝紑紎紘紖紓紟紒紏紌罜罡罞罠罝罛羖羒翃翂翀耖耾耹胺胲胹胵脁胻脀舁舯舥茳茭荄茙荑茥荖茿荁茦茜茢" + ], + [ + "d3a1", + "荂荎茛茪茈茼荍茖茤茠茷茯茩荇荅荌荓茞茬荋茧荈虓虒蚢蚨蚖蚍蚑蚞蚇蚗蚆蚋蚚蚅蚥蚙蚡蚧蚕蚘蚎蚝蚐蚔衃衄衭衵衶衲袀衱衿衯袃衾衴衼訒豇豗豻貤貣赶赸趵趷趶軑軓迾迵适迿迻逄迼迶郖郠郙郚郣郟郥郘郛郗郜郤酐" + ], + [ + "d440", + "酎酏釕釢釚陜陟隼飣髟鬯乿偰偪偡偞偠偓偋偝偲偈偍偁偛偊偢倕偅偟偩偫偣偤偆偀偮偳偗偑凐剫剭剬剮勖勓匭厜啵啶唼啍啐唴唪啑啢唶唵唰啒啅" + ], + [ + "d4a1", + "唌唲啥啎唹啈唭唻啀啋圊圇埻堔埢埶埜埴堀埭埽堈埸堋埳埏堇埮埣埲埥埬埡堎埼堐埧堁堌埱埩埰堍堄奜婠婘婕婧婞娸娵婭婐婟婥婬婓婤婗婃婝婒婄婛婈媎娾婍娹婌婰婩婇婑婖婂婜孲孮寁寀屙崞崋崝崚崠崌崨崍崦崥崏" + ], + [ + "d540", + "崰崒崣崟崮帾帴庱庴庹庲庳弶弸徛徖徟悊悐悆悾悰悺惓惔惏惤惙惝惈悱惛悷惊悿惃惍惀挲捥掊掂捽掽掞掭掝掗掫掎捯掇掐据掯捵掜捭掮捼掤挻掟" + ], + [ + "d5a1", + "捸掅掁掑掍捰敓旍晥晡晛晙晜晢朘桹梇梐梜桭桮梮梫楖桯梣梬梩桵桴梲梏桷梒桼桫桲梪梀桱桾梛梖梋梠梉梤桸桻梑梌梊桽欶欳欷欸殑殏殍殎殌氪淀涫涴涳湴涬淩淢涷淶淔渀淈淠淟淖涾淥淜淝淛淴淊涽淭淰涺淕淂淏淉" + ], + [ + "d640", + "淐淲淓淽淗淍淣涻烺焍烷焗烴焌烰焄烳焐烼烿焆焓焀烸烶焋焂焎牾牻牼牿猝猗猇猑猘猊猈狿猏猞玈珶珸珵琄琁珽琇琀珺珼珿琌琋珴琈畤畣痎痒痏" + ], + [ + "d6a1", + "痋痌痑痐皏皉盓眹眯眭眱眲眴眳眽眥眻眵硈硒硉硍硊硌砦硅硐祤祧祩祪祣祫祡离秺秸秶秷窏窔窐笵筇笴笥笰笢笤笳笘笪笝笱笫笭笯笲笸笚笣粔粘粖粣紵紽紸紶紺絅紬紩絁絇紾紿絊紻紨罣羕羜羝羛翊翋翍翐翑翇翏翉耟" + ], + [ + "d740", + "耞耛聇聃聈脘脥脙脛脭脟脬脞脡脕脧脝脢舑舸舳舺舴舲艴莐莣莨莍荺荳莤荴莏莁莕莙荵莔莩荽莃莌莝莛莪莋荾莥莯莈莗莰荿莦莇莮荶莚虙虖蚿蚷" + ], + [ + "d7a1", + "蛂蛁蛅蚺蚰蛈蚹蚳蚸蛌蚴蚻蚼蛃蚽蚾衒袉袕袨袢袪袚袑袡袟袘袧袙袛袗袤袬袌袓袎覂觖觙觕訰訧訬訞谹谻豜豝豽貥赽赻赹趼跂趹趿跁軘軞軝軜軗軠軡逤逋逑逜逌逡郯郪郰郴郲郳郔郫郬郩酖酘酚酓酕釬釴釱釳釸釤釹釪" + ], + [ + "d840", + "釫釷釨釮镺閆閈陼陭陫陱陯隿靪頄飥馗傛傕傔傞傋傣傃傌傎傝偨傜傒傂傇兟凔匒匑厤厧喑喨喥喭啷噅喢喓喈喏喵喁喣喒喤啽喌喦啿喕喡喎圌堩堷" + ], + [ + "d8a1", + "堙堞堧堣堨埵塈堥堜堛堳堿堶堮堹堸堭堬堻奡媯媔媟婺媢媞婸媦婼媥媬媕媮娷媄媊媗媃媋媩婻婽媌媜媏媓媝寪寍寋寔寑寊寎尌尰崷嵃嵫嵁嵋崿崵嵑嵎嵕崳崺嵒崽崱嵙嵂崹嵉崸崼崲崶嵀嵅幄幁彘徦徥徫惉悹惌惢惎惄愔" + ], + [ + "d940", + "惲愊愖愅惵愓惸惼惾惁愃愘愝愐惿愄愋扊掔掱掰揎揥揨揯揃撝揳揊揠揶揕揲揵摡揟掾揝揜揄揘揓揂揇揌揋揈揰揗揙攲敧敪敤敜敨敥斌斝斞斮旐旒" + ], + [ + "d9a1", + "晼晬晻暀晱晹晪晲朁椌棓椄棜椪棬棪棱椏棖棷棫棤棶椓椐棳棡椇棌椈楰梴椑棯棆椔棸棐棽棼棨椋椊椗棎棈棝棞棦棴棑椆棔棩椕椥棇欹欻欿欼殔殗殙殕殽毰毲毳氰淼湆湇渟湉溈渼渽湅湢渫渿湁湝湳渜渳湋湀湑渻渃渮湞" + ], + [ + "da40", + "湨湜湡渱渨湠湱湫渹渢渰湓湥渧湸湤湷湕湹湒湦渵渶湚焠焞焯烻焮焱焣焥焢焲焟焨焺焛牋牚犈犉犆犅犋猒猋猰猢猱猳猧猲猭猦猣猵猌琮琬琰琫琖" + ], + [ + "daa1", + "琚琡琭琱琤琣琝琩琠琲瓻甯畯畬痧痚痡痦痝痟痤痗皕皒盚睆睇睄睍睅睊睎睋睌矞矬硠硤硥硜硭硱硪确硰硩硨硞硢祴祳祲祰稂稊稃稌稄窙竦竤筊笻筄筈筌筎筀筘筅粢粞粨粡絘絯絣絓絖絧絪絏絭絜絫絒絔絩絑絟絎缾缿罥" + ], + [ + "db40", + "罦羢羠羡翗聑聏聐胾胔腃腊腒腏腇脽腍脺臦臮臷臸臹舄舼舽舿艵茻菏菹萣菀菨萒菧菤菼菶萐菆菈菫菣莿萁菝菥菘菿菡菋菎菖菵菉萉萏菞萑萆菂菳" + ], + [ + "dba1", + "菕菺菇菑菪萓菃菬菮菄菻菗菢萛菛菾蛘蛢蛦蛓蛣蛚蛪蛝蛫蛜蛬蛩蛗蛨蛑衈衖衕袺裗袹袸裀袾袶袼袷袽袲褁裉覕覘覗觝觚觛詎詍訹詙詀詗詘詄詅詒詈詑詊詌詏豟貁貀貺貾貰貹貵趄趀趉跘跓跍跇跖跜跏跕跙跈跗跅軯軷軺" + ], + [ + "dc40", + "軹軦軮軥軵軧軨軶軫軱軬軴軩逭逴逯鄆鄬鄄郿郼鄈郹郻鄁鄀鄇鄅鄃酡酤酟酢酠鈁鈊鈥鈃鈚鈦鈏鈌鈀鈒釿釽鈆鈄鈧鈂鈜鈤鈙鈗鈅鈖镻閍閌閐隇陾隈" + ], + [ + "dca1", + "隉隃隀雂雈雃雱雰靬靰靮頇颩飫鳦黹亃亄亶傽傿僆傮僄僊傴僈僂傰僁傺傱僋僉傶傸凗剺剸剻剼嗃嗛嗌嗐嗋嗊嗝嗀嗔嗄嗩喿嗒喍嗏嗕嗢嗖嗈嗲嗍嗙嗂圔塓塨塤塏塍塉塯塕塎塝塙塥塛堽塣塱壼嫇嫄嫋媺媸媱媵媰媿嫈媻嫆" + ], + [ + "dd40", + "媷嫀嫊媴媶嫍媹媐寖寘寙尟尳嵱嵣嵊嵥嵲嵬嵞嵨嵧嵢巰幏幎幊幍幋廅廌廆廋廇彀徯徭惷慉慊愫慅愶愲愮慆愯慏愩慀戠酨戣戥戤揅揱揫搐搒搉搠搤" + ], + [ + "dda1", + "搳摃搟搕搘搹搷搢搣搌搦搰搨摁搵搯搊搚摀搥搧搋揧搛搮搡搎敯斒旓暆暌暕暐暋暊暙暔晸朠楦楟椸楎楢楱椿楅楪椹楂楗楙楺楈楉椵楬椳椽楥棰楸椴楩楀楯楄楶楘楁楴楌椻楋椷楜楏楑椲楒椯楻椼歆歅歃歂歈歁殛嗀毻毼" + ], + [ + "de40", + "毹毷毸溛滖滈溏滀溟溓溔溠溱溹滆滒溽滁溞滉溷溰滍溦滏溲溾滃滜滘溙溒溎溍溤溡溿溳滐滊溗溮溣煇煔煒煣煠煁煝煢煲煸煪煡煂煘煃煋煰煟煐煓" + ], + [ + "dea1", + "煄煍煚牏犍犌犑犐犎猼獂猻猺獀獊獉瑄瑊瑋瑒瑑瑗瑀瑏瑐瑎瑂瑆瑍瑔瓡瓿瓾瓽甝畹畷榃痯瘏瘃痷痾痼痹痸瘐痻痶痭痵痽皙皵盝睕睟睠睒睖睚睩睧睔睙睭矠碇碚碔碏碄碕碅碆碡碃硹碙碀碖硻祼禂祽祹稑稘稙稒稗稕稢稓" + ], + [ + "df40", + "稛稐窣窢窞竫筦筤筭筴筩筲筥筳筱筰筡筸筶筣粲粴粯綈綆綀綍絿綅絺綎絻綃絼綌綔綄絽綒罭罫罧罨罬羦羥羧翛翜耡腤腠腷腜腩腛腢腲朡腞腶腧腯" + ], + [ + "dfa1", + "腄腡舝艉艄艀艂艅蓱萿葖葶葹蒏蒍葥葑葀蒆葧萰葍葽葚葙葴葳葝蔇葞萷萺萴葺葃葸萲葅萩菙葋萯葂萭葟葰萹葎葌葒葯蓅蒎萻葇萶萳葨葾葄萫葠葔葮葐蜋蜄蛷蜌蛺蛖蛵蝍蛸蜎蜉蜁蛶蜍蜅裖裋裍裎裞裛裚裌裐覅覛觟觥觤" + ], + [ + "e040", + "觡觠觢觜触詶誆詿詡訿詷誂誄詵誃誁詴詺谼豋豊豥豤豦貆貄貅賌赨赩趑趌趎趏趍趓趔趐趒跰跠跬跱跮跐跩跣跢跧跲跫跴輆軿輁輀輅輇輈輂輋遒逿" + ], + [ + "e0a1", + "遄遉逽鄐鄍鄏鄑鄖鄔鄋鄎酮酯鉈鉒鈰鈺鉦鈳鉥鉞銃鈮鉊鉆鉭鉬鉏鉠鉧鉯鈶鉡鉰鈱鉔鉣鉐鉲鉎鉓鉌鉖鈲閟閜閞閛隒隓隑隗雎雺雽雸雵靳靷靸靲頏頍頎颬飶飹馯馲馰馵骭骫魛鳪鳭鳧麀黽僦僔僗僨僳僛僪僝僤僓僬僰僯僣僠" + ], + [ + "e140", + "凘劀劁勩勫匰厬嘧嘕嘌嘒嗼嘏嘜嘁嘓嘂嗺嘝嘄嗿嗹墉塼墐墘墆墁塿塴墋塺墇墑墎塶墂墈塻墔墏壾奫嫜嫮嫥嫕嫪嫚嫭嫫嫳嫢嫠嫛嫬嫞嫝嫙嫨嫟孷寠" + ], + [ + "e1a1", + "寣屣嶂嶀嵽嶆嵺嶁嵷嶊嶉嶈嵾嵼嶍嵹嵿幘幙幓廘廑廗廎廜廕廙廒廔彄彃彯徶愬愨慁慞慱慳慒慓慲慬憀慴慔慺慛慥愻慪慡慖戩戧戫搫摍摛摝摴摶摲摳摽摵摦撦摎撂摞摜摋摓摠摐摿搿摬摫摙摥摷敳斠暡暠暟朅朄朢榱榶槉" + ], + [ + "e240", + "榠槎榖榰榬榼榑榙榎榧榍榩榾榯榿槄榽榤槔榹槊榚槏榳榓榪榡榞槙榗榐槂榵榥槆歊歍歋殞殟殠毃毄毾滎滵滱漃漥滸漷滻漮漉潎漙漚漧漘漻漒滭漊" + ], + [ + "e2a1", + "漶潳滹滮漭潀漰漼漵滫漇漎潃漅滽滶漹漜滼漺漟漍漞漈漡熇熐熉熀熅熂熏煻熆熁熗牄牓犗犕犓獃獍獑獌瑢瑳瑱瑵瑲瑧瑮甀甂甃畽疐瘖瘈瘌瘕瘑瘊瘔皸瞁睼瞅瞂睮瞀睯睾瞃碲碪碴碭碨硾碫碞碥碠碬碢碤禘禊禋禖禕禔禓" + ], + [ + "e340", + "禗禈禒禐稫穊稰稯稨稦窨窫窬竮箈箜箊箑箐箖箍箌箛箎箅箘劄箙箤箂粻粿粼粺綧綷緂綣綪緁緀緅綝緎緄緆緋緌綯綹綖綼綟綦綮綩綡緉罳翢翣翥翞" + ], + [ + "e3a1", + "耤聝聜膉膆膃膇膍膌膋舕蒗蒤蒡蒟蒺蓎蓂蒬蒮蒫蒹蒴蓁蓍蒪蒚蒱蓐蒝蒧蒻蒢蒔蓇蓌蒛蒩蒯蒨蓖蒘蒶蓏蒠蓗蓔蓒蓛蒰蒑虡蜳蜣蜨蝫蝀蜮蜞蜡蜙蜛蝃蜬蝁蜾蝆蜠蜲蜪蜭蜼蜒蜺蜱蜵蝂蜦蜧蜸蜤蜚蜰蜑裷裧裱裲裺裾裮裼裶裻" + ], + [ + "e440", + "裰裬裫覝覡覟覞觩觫觨誫誙誋誒誏誖谽豨豩賕賏賗趖踉踂跿踍跽踊踃踇踆踅跾踀踄輐輑輎輍鄣鄜鄠鄢鄟鄝鄚鄤鄡鄛酺酲酹酳銥銤鉶銛鉺銠銔銪銍" + ], + [ + "e4a1", + "銦銚銫鉹銗鉿銣鋮銎銂銕銢鉽銈銡銊銆銌銙銧鉾銇銩銝銋鈭隞隡雿靘靽靺靾鞃鞀鞂靻鞄鞁靿韎韍頖颭颮餂餀餇馝馜駃馹馻馺駂馽駇骱髣髧鬾鬿魠魡魟鳱鳲鳵麧僿儃儰僸儆儇僶僾儋儌僽儊劋劌勱勯噈噂噌嘵噁噊噉噆噘" + ], + [ + "e540", + "噚噀嘳嘽嘬嘾嘸嘪嘺圚墫墝墱墠墣墯墬墥墡壿嫿嫴嫽嫷嫶嬃嫸嬂嫹嬁嬇嬅嬏屧嶙嶗嶟嶒嶢嶓嶕嶠嶜嶡嶚嶞幩幝幠幜緳廛廞廡彉徲憋憃慹憱憰憢憉" + ], + [ + "e5a1", + "憛憓憯憭憟憒憪憡憍慦憳戭摮摰撖撠撅撗撜撏撋撊撌撣撟摨撱撘敶敺敹敻斲斳暵暰暩暲暷暪暯樀樆樗槥槸樕槱槤樠槿槬槢樛樝槾樧槲槮樔槷槧橀樈槦槻樍槼槫樉樄樘樥樏槶樦樇槴樖歑殥殣殢殦氁氀毿氂潁漦潾澇濆澒" + ], + [ + "e640", + "澍澉澌潢潏澅潚澖潶潬澂潕潲潒潐潗澔澓潝漀潡潫潽潧澐潓澋潩潿澕潣潷潪潻熲熯熛熰熠熚熩熵熝熥熞熤熡熪熜熧熳犘犚獘獒獞獟獠獝獛獡獚獙" + ], + [ + "e6a1", + "獢璇璉璊璆璁瑽璅璈瑼瑹甈甇畾瘥瘞瘙瘝瘜瘣瘚瘨瘛皜皝皞皛瞍瞏瞉瞈磍碻磏磌磑磎磔磈磃磄磉禚禡禠禜禢禛歶稹窲窴窳箷篋箾箬篎箯箹篊箵糅糈糌糋緷緛緪緧緗緡縃緺緦緶緱緰緮緟罶羬羰羭翭翫翪翬翦翨聤聧膣膟" + ], + [ + "e740", + "膞膕膢膙膗舖艏艓艒艐艎艑蔤蔻蔏蔀蔩蔎蔉蔍蔟蔊蔧蔜蓻蔫蓺蔈蔌蓴蔪蓲蔕蓷蓫蓳蓼蔒蓪蓩蔖蓾蔨蔝蔮蔂蓽蔞蓶蔱蔦蓧蓨蓰蓯蓹蔘蔠蔰蔋蔙蔯虢" + ], + [ + "e7a1", + "蝖蝣蝤蝷蟡蝳蝘蝔蝛蝒蝡蝚蝑蝞蝭蝪蝐蝎蝟蝝蝯蝬蝺蝮蝜蝥蝏蝻蝵蝢蝧蝩衚褅褌褔褋褗褘褙褆褖褑褎褉覢覤覣觭觰觬諏諆誸諓諑諔諕誻諗誾諀諅諘諃誺誽諙谾豍貏賥賟賙賨賚賝賧趠趜趡趛踠踣踥踤踮踕踛踖踑踙踦踧" + ], + [ + "e840", + "踔踒踘踓踜踗踚輬輤輘輚輠輣輖輗遳遰遯遧遫鄯鄫鄩鄪鄲鄦鄮醅醆醊醁醂醄醀鋐鋃鋄鋀鋙銶鋏鋱鋟鋘鋩鋗鋝鋌鋯鋂鋨鋊鋈鋎鋦鋍鋕鋉鋠鋞鋧鋑鋓" + ], + [ + "e8a1", + "銵鋡鋆銴镼閬閫閮閰隤隢雓霅霈霂靚鞊鞎鞈韐韏頞頝頦頩頨頠頛頧颲餈飺餑餔餖餗餕駜駍駏駓駔駎駉駖駘駋駗駌骳髬髫髳髲髱魆魃魧魴魱魦魶魵魰魨魤魬鳼鳺鳽鳿鳷鴇鴀鳹鳻鴈鴅鴄麃黓鼏鼐儜儓儗儚儑凞匴叡噰噠噮" + ], + [ + "e940", + "噳噦噣噭噲噞噷圜圛壈墽壉墿墺壂墼壆嬗嬙嬛嬡嬔嬓嬐嬖嬨嬚嬠嬞寯嶬嶱嶩嶧嶵嶰嶮嶪嶨嶲嶭嶯嶴幧幨幦幯廩廧廦廨廥彋徼憝憨憖懅憴懆懁懌憺" + ], + [ + "e9a1", + "憿憸憌擗擖擐擏擉撽撉擃擛擳擙攳敿敼斢曈暾曀曊曋曏暽暻暺曌朣樴橦橉橧樲橨樾橝橭橶橛橑樨橚樻樿橁橪橤橐橏橔橯橩橠樼橞橖橕橍橎橆歕歔歖殧殪殫毈毇氄氃氆澭濋澣濇澼濎濈潞濄澽澞濊澨瀄澥澮澺澬澪濏澿澸" + ], + [ + "ea40", + "澢濉澫濍澯澲澰燅燂熿熸燖燀燁燋燔燊燇燏熽燘熼燆燚燛犝犞獩獦獧獬獥獫獪瑿璚璠璔璒璕璡甋疀瘯瘭瘱瘽瘳瘼瘵瘲瘰皻盦瞚瞝瞡瞜瞛瞢瞣瞕瞙" + ], + [ + "eaa1", + "瞗磝磩磥磪磞磣磛磡磢磭磟磠禤穄穈穇窶窸窵窱窷篞篣篧篝篕篥篚篨篹篔篪篢篜篫篘篟糒糔糗糐糑縒縡縗縌縟縠縓縎縜縕縚縢縋縏縖縍縔縥縤罃罻罼罺羱翯耪耩聬膱膦膮膹膵膫膰膬膴膲膷膧臲艕艖艗蕖蕅蕫蕍蕓蕡蕘" + ], + [ + "eb40", + "蕀蕆蕤蕁蕢蕄蕑蕇蕣蔾蕛蕱蕎蕮蕵蕕蕧蕠薌蕦蕝蕔蕥蕬虣虥虤螛螏螗螓螒螈螁螖螘蝹螇螣螅螐螑螝螄螔螜螚螉褞褦褰褭褮褧褱褢褩褣褯褬褟觱諠" + ], + [ + "eba1", + "諢諲諴諵諝謔諤諟諰諈諞諡諨諿諯諻貑貒貐賵賮賱賰賳赬赮趥趧踳踾踸蹀蹅踶踼踽蹁踰踿躽輶輮輵輲輹輷輴遶遹遻邆郺鄳鄵鄶醓醐醑醍醏錧錞錈錟錆錏鍺錸錼錛錣錒錁鍆錭錎錍鋋錝鋺錥錓鋹鋷錴錂錤鋿錩錹錵錪錔錌" + ], + [ + "ec40", + "錋鋾錉錀鋻錖閼闍閾閹閺閶閿閵閽隩雔霋霒霐鞙鞗鞔韰韸頵頯頲餤餟餧餩馞駮駬駥駤駰駣駪駩駧骹骿骴骻髶髺髹髷鬳鮀鮅鮇魼魾魻鮂鮓鮒鮐魺鮕" + ], + [ + "eca1", + "魽鮈鴥鴗鴠鴞鴔鴩鴝鴘鴢鴐鴙鴟麈麆麇麮麭黕黖黺鼒鼽儦儥儢儤儠儩勴嚓嚌嚍嚆嚄嚃噾嚂噿嚁壖壔壏壒嬭嬥嬲嬣嬬嬧嬦嬯嬮孻寱寲嶷幬幪徾徻懃憵憼懧懠懥懤懨懞擯擩擣擫擤擨斁斀斶旚曒檍檖檁檥檉檟檛檡檞檇檓檎" + ], + [ + "ed40", + "檕檃檨檤檑橿檦檚檅檌檒歛殭氉濌澩濴濔濣濜濭濧濦濞濲濝濢濨燡燱燨燲燤燰燢獳獮獯璗璲璫璐璪璭璱璥璯甐甑甒甏疄癃癈癉癇皤盩瞵瞫瞲瞷瞶" + ], + [ + "eda1", + "瞴瞱瞨矰磳磽礂磻磼磲礅磹磾礄禫禨穜穛穖穘穔穚窾竀竁簅簏篲簀篿篻簎篴簋篳簂簉簃簁篸篽簆篰篱簐簊糨縭縼繂縳顈縸縪繉繀繇縩繌縰縻縶繄縺罅罿罾罽翴翲耬膻臄臌臊臅臇膼臩艛艚艜薃薀薏薧薕薠薋薣蕻薤薚薞" + ], + [ + "ee40", + "蕷蕼薉薡蕺蕸蕗薎薖薆薍薙薝薁薢薂薈薅蕹蕶薘薐薟虨螾螪螭蟅螰螬螹螵螼螮蟉蟃蟂蟌螷螯蟄蟊螴螶螿螸螽蟞螲褵褳褼褾襁襒褷襂覭覯覮觲觳謞" + ], + [ + "eea1", + "謘謖謑謅謋謢謏謒謕謇謍謈謆謜謓謚豏豰豲豱豯貕貔賹赯蹎蹍蹓蹐蹌蹇轃轀邅遾鄸醚醢醛醙醟醡醝醠鎡鎃鎯鍤鍖鍇鍼鍘鍜鍶鍉鍐鍑鍠鍭鎏鍌鍪鍹鍗鍕鍒鍏鍱鍷鍻鍡鍞鍣鍧鎀鍎鍙闇闀闉闃闅閷隮隰隬霠霟霘霝霙鞚鞡鞜" + ], + [ + "ef40", + "鞞鞝韕韔韱顁顄顊顉顅顃餥餫餬餪餳餲餯餭餱餰馘馣馡騂駺駴駷駹駸駶駻駽駾駼騃骾髾髽鬁髼魈鮚鮨鮞鮛鮦鮡鮥鮤鮆鮢鮠鮯鴳鵁鵧鴶鴮鴯鴱鴸鴰" + ], + [ + "efa1", + "鵅鵂鵃鴾鴷鵀鴽翵鴭麊麉麍麰黈黚黻黿鼤鼣鼢齔龠儱儭儮嚘嚜嚗嚚嚝嚙奰嬼屩屪巀幭幮懘懟懭懮懱懪懰懫懖懩擿攄擽擸攁攃擼斔旛曚曛曘櫅檹檽櫡櫆檺檶檷櫇檴檭歞毉氋瀇瀌瀍瀁瀅瀔瀎濿瀀濻瀦濼濷瀊爁燿燹爃燽獶" + ], + [ + "f040", + "璸瓀璵瓁璾璶璻瓂甔甓癜癤癙癐癓癗癚皦皽盬矂瞺磿礌礓礔礉礐礒礑禭禬穟簜簩簙簠簟簭簝簦簨簢簥簰繜繐繖繣繘繢繟繑繠繗繓羵羳翷翸聵臑臒" + ], + [ + "f0a1", + "臐艟艞薴藆藀藃藂薳薵薽藇藄薿藋藎藈藅薱薶藒蘤薸薷薾虩蟧蟦蟢蟛蟫蟪蟥蟟蟳蟤蟔蟜蟓蟭蟘蟣螤蟗蟙蠁蟴蟨蟝襓襋襏襌襆襐襑襉謪謧謣謳謰謵譇謯謼謾謱謥謷謦謶謮謤謻謽謺豂豵貙貘貗賾贄贂贀蹜蹢蹠蹗蹖蹞蹥蹧" + ], + [ + "f140", + "蹛蹚蹡蹝蹩蹔轆轇轈轋鄨鄺鄻鄾醨醥醧醯醪鎵鎌鎒鎷鎛鎝鎉鎧鎎鎪鎞鎦鎕鎈鎙鎟鎍鎱鎑鎲鎤鎨鎴鎣鎥闒闓闑隳雗雚巂雟雘雝霣霢霥鞬鞮鞨鞫鞤鞪" + ], + [ + "f1a1", + "鞢鞥韗韙韖韘韺顐顑顒颸饁餼餺騏騋騉騍騄騑騊騅騇騆髀髜鬈鬄鬅鬩鬵魊魌魋鯇鯆鯃鮿鯁鮵鮸鯓鮶鯄鮹鮽鵜鵓鵏鵊鵛鵋鵙鵖鵌鵗鵒鵔鵟鵘鵚麎麌黟鼁鼀鼖鼥鼫鼪鼩鼨齌齕儴儵劖勷厴嚫嚭嚦嚧嚪嚬壚壝壛夒嬽嬾嬿巃幰" + ], + [ + "f240", + "徿懻攇攐攍攉攌攎斄旞旝曞櫧櫠櫌櫑櫙櫋櫟櫜櫐櫫櫏櫍櫞歠殰氌瀙瀧瀠瀖瀫瀡瀢瀣瀩瀗瀤瀜瀪爌爊爇爂爅犥犦犤犣犡瓋瓅璷瓃甖癠矉矊矄矱礝礛" + ], + [ + "f2a1", + "礡礜礗礞禰穧穨簳簼簹簬簻糬糪繶繵繸繰繷繯繺繲繴繨罋罊羃羆羷翽翾聸臗臕艤艡艣藫藱藭藙藡藨藚藗藬藲藸藘藟藣藜藑藰藦藯藞藢蠀蟺蠃蟶蟷蠉蠌蠋蠆蟼蠈蟿蠊蠂襢襚襛襗襡襜襘襝襙覈覷覶觶譐譈譊譀譓譖譔譋譕" + ], + [ + "f340", + "譑譂譒譗豃豷豶貚贆贇贉趬趪趭趫蹭蹸蹳蹪蹯蹻軂轒轑轏轐轓辴酀鄿醰醭鏞鏇鏏鏂鏚鏐鏹鏬鏌鏙鎩鏦鏊鏔鏮鏣鏕鏄鏎鏀鏒鏧镽闚闛雡霩霫霬霨霦" + ], + [ + "f3a1", + "鞳鞷鞶韝韞韟顜顙顝顗颿颽颻颾饈饇饃馦馧騚騕騥騝騤騛騢騠騧騣騞騜騔髂鬋鬊鬎鬌鬷鯪鯫鯠鯞鯤鯦鯢鯰鯔鯗鯬鯜鯙鯥鯕鯡鯚鵷鶁鶊鶄鶈鵱鶀鵸鶆鶋鶌鵽鵫鵴鵵鵰鵩鶅鵳鵻鶂鵯鵹鵿鶇鵨麔麑黀黼鼭齀齁齍齖齗齘匷嚲" + ], + [ + "f440", + "嚵嚳壣孅巆巇廮廯忀忁懹攗攖攕攓旟曨曣曤櫳櫰櫪櫨櫹櫱櫮櫯瀼瀵瀯瀷瀴瀱灂瀸瀿瀺瀹灀瀻瀳灁爓爔犨獽獼璺皫皪皾盭矌矎矏矍矲礥礣礧礨礤礩" + ], + [ + "f4a1", + "禲穮穬穭竷籉籈籊籇籅糮繻繾纁纀羺翿聹臛臙舋艨艩蘢藿蘁藾蘛蘀藶蘄蘉蘅蘌藽蠙蠐蠑蠗蠓蠖襣襦覹觷譠譪譝譨譣譥譧譭趮躆躈躄轙轖轗轕轘轚邍酃酁醷醵醲醳鐋鐓鏻鐠鐏鐔鏾鐕鐐鐨鐙鐍鏵鐀鏷鐇鐎鐖鐒鏺鐉鏸鐊鏿" + ], + [ + "f540", + "鏼鐌鏶鐑鐆闞闠闟霮霯鞹鞻韽韾顠顢顣顟飁飂饐饎饙饌饋饓騲騴騱騬騪騶騩騮騸騭髇髊髆鬐鬒鬑鰋鰈鯷鰅鰒鯸鱀鰇鰎鰆鰗鰔鰉鶟鶙鶤鶝鶒鶘鶐鶛" + ], + [ + "f5a1", + "鶠鶔鶜鶪鶗鶡鶚鶢鶨鶞鶣鶿鶩鶖鶦鶧麙麛麚黥黤黧黦鼰鼮齛齠齞齝齙龑儺儹劘劗囃嚽嚾孈孇巋巏廱懽攛欂櫼欃櫸欀灃灄灊灈灉灅灆爝爚爙獾甗癪矐礭礱礯籔籓糲纊纇纈纋纆纍罍羻耰臝蘘蘪蘦蘟蘣蘜蘙蘧蘮蘡蘠蘩蘞蘥" + ], + [ + "f640", + "蠩蠝蠛蠠蠤蠜蠫衊襭襩襮襫觺譹譸譅譺譻贐贔趯躎躌轞轛轝酆酄酅醹鐿鐻鐶鐩鐽鐼鐰鐹鐪鐷鐬鑀鐱闥闤闣霵霺鞿韡顤飉飆飀饘饖騹騽驆驄驂驁騺" + ], + [ + "f6a1", + "騿髍鬕鬗鬘鬖鬺魒鰫鰝鰜鰬鰣鰨鰩鰤鰡鶷鶶鶼鷁鷇鷊鷏鶾鷅鷃鶻鶵鷎鶹鶺鶬鷈鶱鶭鷌鶳鷍鶲鹺麜黫黮黭鼛鼘鼚鼱齎齥齤龒亹囆囅囋奱孋孌巕巑廲攡攠攦攢欋欈欉氍灕灖灗灒爞爟犩獿瓘瓕瓙瓗癭皭礵禴穰穱籗籜籙籛籚" + ], + [ + "f740", + "糴糱纑罏羇臞艫蘴蘵蘳蘬蘲蘶蠬蠨蠦蠪蠥襱覿覾觻譾讄讂讆讅譿贕躕躔躚躒躐躖躗轠轢酇鑌鑐鑊鑋鑏鑇鑅鑈鑉鑆霿韣顪顩飋饔饛驎驓驔驌驏驈驊" + ], + [ + "f7a1", + "驉驒驐髐鬙鬫鬻魖魕鱆鱈鰿鱄鰹鰳鱁鰼鰷鰴鰲鰽鰶鷛鷒鷞鷚鷋鷐鷜鷑鷟鷩鷙鷘鷖鷵鷕鷝麶黰鼵鼳鼲齂齫龕龢儽劙壨壧奲孍巘蠯彏戁戃戄攩攥斖曫欑欒欏毊灛灚爢玂玁玃癰矔籧籦纕艬蘺虀蘹蘼蘱蘻蘾蠰蠲蠮蠳襶襴襳觾" + ], + [ + "f840", + "讌讎讋讈豅贙躘轤轣醼鑢鑕鑝鑗鑞韄韅頀驖驙鬞鬟鬠鱒鱘鱐鱊鱍鱋鱕鱙鱌鱎鷻鷷鷯鷣鷫鷸鷤鷶鷡鷮鷦鷲鷰鷢鷬鷴鷳鷨鷭黂黐黲黳鼆鼜鼸鼷鼶齃齏" + ], + [ + "f8a1", + "齱齰齮齯囓囍孎屭攭曭曮欓灟灡灝灠爣瓛瓥矕礸禷禶籪纗羉艭虃蠸蠷蠵衋讔讕躞躟躠躝醾醽釂鑫鑨鑩雥靆靃靇韇韥驞髕魙鱣鱧鱦鱢鱞鱠鸂鷾鸇鸃鸆鸅鸀鸁鸉鷿鷽鸄麠鼞齆齴齵齶囔攮斸欘欙欗欚灢爦犪矘矙礹籩籫糶纚" + ], + [ + "f940", + "纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊" + ], + [ + "f9a1", + "龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯▓" + ] +]; + +var require$$7 = [ + [ + "8740", + "䏰䰲䘃䖦䕸𧉧䵷䖳𧲱䳢𧳅㮕䜶䝄䱇䱀𤊿𣘗𧍒𦺋𧃒䱗𪍑䝏䗚䲅𧱬䴇䪤䚡𦬣爥𥩔𡩣𣸆𣽡晍囻" + ], + [ + "8767", + "綕夝𨮹㷴霴𧯯寛𡵞媤㘥𩺰嫑宷峼杮薓𩥅瑡璝㡵𡵓𣚞𦀡㻬" + ], + [ + "87a1", + "𥣞㫵竼龗𤅡𨤍𣇪𠪊𣉞䌊蒄龖鐯䤰蘓墖靊鈘秐稲晠権袝瑌篅枂稬剏遆㓦珄𥶹瓆鿇垳䤯呌䄱𣚎堘穲𧭥讏䚮𦺈䆁𥶙箮𢒼鿈𢓁𢓉𢓌鿉蔄𣖻䂴鿊䓡𪷿拁灮鿋" + ], + [ + "8840", + "㇀", + 4, + "𠄌㇅𠃑𠃍㇆㇇𠃋𡿨㇈𠃊㇉㇊㇋㇌𠄎㇍㇎ĀÁǍÀĒÉĚÈŌÓǑÒ࿿Ê̄Ế࿿Ê̌ỀÊāáǎàɑēéěèīíǐìōóǒòūúǔùǖǘǚ" + ], + [ + "88a1", + "ǜü࿿ê̄ế࿿ê̌ềêɡ⏚⏛" + ], + [ + "8940", + "𪎩𡅅" + ], + [ + "8943", + "攊" + ], + [ + "8946", + "丽滝鵎釟" + ], + [ + "894c", + "𧜵撑会伨侨兖兴农凤务动医华发变团声处备夲头学实実岚庆总斉柾栄桥济炼电纤纬纺织经统缆缷艺苏药视设询车轧轮" + ], + [ + "89a1", + "琑糼緍楆竉刧" + ], + [ + "89ab", + "醌碸酞肼" + ], + [ + "89b0", + "贋胶𠧧" + ], + [ + "89b5", + "肟黇䳍鷉鸌䰾𩷶𧀎鸊𪄳㗁" + ], + [ + "89c1", + "溚舾甙" + ], + [ + "89c5", + "䤑马骏龙禇𨑬𡷊𠗐𢫦两亁亀亇亿仫伷㑌侽㹈倃傈㑽㒓㒥円夅凛凼刅争剹劐匧㗇厩㕑厰㕓参吣㕭㕲㚁咓咣咴咹哐哯唘唣唨㖘唿㖥㖿嗗㗅" + ], + [ + "8a40", + "𧶄唥" + ], + [ + "8a43", + "𠱂𠴕𥄫喐𢳆㧬𠍁蹆𤶸𩓥䁓𨂾睺𢰸㨴䟕𨅝𦧲𤷪擝𠵼𠾴𠳕𡃴撍蹾𠺖𠰋𠽤𢲩𨉖𤓓" + ], + [ + "8a64", + "𠵆𩩍𨃩䟴𤺧𢳂骲㩧𩗴㿭㔆𥋇𩟔𧣈𢵄鵮頕" + ], + [ + "8a76", + "䏙𦂥撴哣𢵌𢯊𡁷㧻𡁯" + ], + [ + "8aa1", + "𦛚𦜖𧦠擪𥁒𠱃蹨𢆡𨭌𠜱" + ], + [ + "8aac", + "䠋𠆩㿺塳𢶍" + ], + [ + "8ab2", + "𤗈𠓼𦂗𠽌𠶖啹䂻䎺" + ], + [ + "8abb", + "䪴𢩦𡂝膪飵𠶜捹㧾𢝵跀嚡摼㹃" + ], + [ + "8ac9", + "𪘁𠸉𢫏𢳉" + ], + [ + "8ace", + "𡃈𣧂㦒㨆𨊛㕸𥹉𢃇噒𠼱𢲲𩜠㒼氽𤸻" + ], + [ + "8adf", + "𧕴𢺋𢈈𪙛𨳍𠹺𠰴𦠜羓𡃏𢠃𢤹㗻𥇣𠺌𠾍𠺪㾓𠼰𠵇𡅏𠹌" + ], + [ + "8af6", + "𠺫𠮩𠵈𡃀𡄽㿹𢚖搲𠾭" + ], + [ + "8b40", + "𣏴𧘹𢯎𠵾𠵿𢱑𢱕㨘𠺘𡃇𠼮𪘲𦭐𨳒𨶙𨳊閪哌苄喹" + ], + [ + "8b55", + "𩻃鰦骶𧝞𢷮煀腭胬尜𦕲脴㞗卟𨂽醶𠻺𠸏𠹷𠻻㗝𤷫㘉𠳖嚯𢞵𡃉𠸐𠹸𡁸𡅈𨈇𡑕𠹹𤹐𢶤婔𡀝𡀞𡃵𡃶垜𠸑" + ], + [ + "8ba1", + "𧚔𨋍𠾵𠹻𥅾㜃𠾶𡆀𥋘𪊽𤧚𡠺𤅷𨉼墙剨㘚𥜽箲孨䠀䬬鼧䧧鰟鮍𥭴𣄽嗻㗲嚉丨夂𡯁屮靑𠂆乛亻㔾尣彑忄㣺扌攵歺氵氺灬爫丬犭𤣩罒礻糹罓𦉪㓁" + ], + [ + "8bde", + "𦍋耂肀𦘒𦥑卝衤见𧢲讠贝钅镸长门𨸏韦页风飞饣𩠐鱼鸟黄歯龜丷𠂇阝户钢" + ], + [ + "8c40", + "倻淾𩱳龦㷉袏𤅎灷峵䬠𥇍㕙𥴰愢𨨲辧釶熑朙玺𣊁𪄇㲋𡦀䬐磤琂冮𨜏䀉橣𪊺䈣蘏𠩯稪𩥇𨫪靕灍匤𢁾鏴盙𨧣龧矝亣俰傼丯众龨吴綋墒壐𡶶庒庙忂𢜒斋" + ], + [ + "8ca1", + "𣏹椙橃𣱣泿" + ], + [ + "8ca7", + "爀𤔅玌㻛𤨓嬕璹讃𥲤𥚕窓篬糃繬苸薗龩袐龪躹龫迏蕟駠鈡龬𨶹𡐿䁱䊢娚" + ], + [ + "8cc9", + "顨杫䉶圽" + ], + [ + "8cce", + "藖𤥻芿𧄍䲁𦵴嵻𦬕𦾾龭龮宖龯曧繛湗秊㶈䓃𣉖𢞖䎚䔶" + ], + [ + "8ce6", + "峕𣬚諹屸㴒𣕑嵸龲煗䕘𤃬𡸣䱷㥸㑊𠆤𦱁諌侴𠈹妿腬顖𩣺弻" + ], + [ + "8d40", + "𠮟" + ], + [ + "8d42", + "𢇁𨥭䄂䚻𩁹㼇龳𪆵䃸㟖䛷𦱆䅼𨚲𧏿䕭㣔𥒚䕡䔛䶉䱻䵶䗪㿈𤬏㙡䓞䒽䇭崾嵈嵖㷼㠏嶤嶹㠠㠸幂庽弥徃㤈㤔㤿㥍惗愽峥㦉憷憹懏㦸戬抐拥挘㧸嚱" + ], + [ + "8da1", + "㨃揢揻搇摚㩋擀崕嘡龟㪗斆㪽旿晓㫲暒㬢朖㭂枤栀㭘桊梄㭲㭱㭻椉楃牜楤榟榅㮼槖㯝橥橴橱檂㯬檙㯲檫檵櫔櫶殁毁毪汵沪㳋洂洆洦涁㳯涤涱渕渘温溆𨧀溻滢滚齿滨滩漤漴㵆𣽁澁澾㵪㵵熷岙㶊瀬㶑灐灔灯灿炉𠌥䏁㗱𠻘" + ], + [ + "8e40", + "𣻗垾𦻓焾𥟠㙎榢𨯩孴穉𥣡𩓙穥穽𥦬窻窰竂竃燑𦒍䇊竚竝竪䇯咲𥰁笋筕笩𥌎𥳾箢筯莜𥮴𦱿篐萡箒箸𥴠㶭𥱥蒒篺簆簵𥳁籄粃𤢂粦晽𤕸糉糇糦籴糳糵糎" + ], + [ + "8ea1", + "繧䔝𦹄絝𦻖璍綉綫焵綳緒𤁗𦀩緤㴓緵𡟹緥𨍭縝𦄡𦅚繮纒䌫鑬縧罀罁罇礶𦋐駡羗𦍑羣𡙡𠁨䕜𣝦䔃𨌺翺𦒉者耈耝耨耯𪂇𦳃耻耼聡𢜔䦉𦘦𣷣𦛨朥肧𨩈脇脚墰𢛶汿𦒘𤾸擧𡒊舘𡡞橓𤩥𤪕䑺舩𠬍𦩒𣵾俹𡓽蓢荢𦬊𤦧𣔰𡝳𣷸芪椛芳䇛" + ], + [ + "8f40", + "蕋苐茚𠸖𡞴㛁𣅽𣕚艻苢茘𣺋𦶣𦬅𦮗𣗎㶿茝嗬莅䔋𦶥莬菁菓㑾𦻔橗蕚㒖𦹂𢻯葘𥯤葱㷓䓤檧葊𣲵祘蒨𦮖𦹷𦹃蓞萏莑䒠蒓蓤𥲑䉀𥳀䕃蔴嫲𦺙䔧蕳䔖枿蘖" + ], + [ + "8fa1", + "𨘥𨘻藁𧂈蘂𡖂𧃍䕫䕪蘨㙈𡢢号𧎚虾蝱𪃸蟮𢰧螱蟚蠏噡虬桖䘏衅衆𧗠𣶹𧗤衞袜䙛袴袵揁装睷𧜏覇覊覦覩覧覼𨨥觧𧤤𧪽誜瞓釾誐𧩙竩𧬺𣾏䜓𧬸煼謌謟𥐰𥕥謿譌譍誩𤩺讐讛誯𡛟䘕衏貛𧵔𧶏貫㜥𧵓賖𧶘𧶽贒贃𡤐賛灜贑𤳉㻐起" + ], + [ + "9040", + "趩𨀂𡀔𤦊㭼𨆼𧄌竧躭躶軃鋔輙輭𨍥𨐒辥錃𪊟𠩐辳䤪𨧞𨔽𣶻廸𣉢迹𪀔𨚼𨔁𢌥㦀𦻗逷𨔼𧪾遡𨕬𨘋邨𨜓郄𨛦邮都酧㫰醩釄粬𨤳𡺉鈎沟鉁鉢𥖹銹𨫆𣲛𨬌𥗛" + ], + [ + "90a1", + "𠴱錬鍫𨫡𨯫炏嫃𨫢𨫥䥥鉄𨯬𨰹𨯿鍳鑛躼閅閦鐦閠濶䊹𢙺𨛘𡉼𣸮䧟氜陻隖䅬隣𦻕懚隶磵𨫠隽双䦡𦲸𠉴𦐐𩂯𩃥𤫑𡤕𣌊霱虂霶䨏䔽䖅𤫩灵孁霛靜𩇕靗孊𩇫靟鐥僐𣂷𣂼鞉鞟鞱鞾韀韒韠𥑬韮琜𩐳響韵𩐝𧥺䫑頴頳顋顦㬎𧅵㵑𠘰𤅜" + ], + [ + "9140", + "𥜆飊颷飈飇䫿𦴧𡛓喰飡飦飬鍸餹𤨩䭲𩡗𩤅駵騌騻騐驘𥜥㛄𩂱𩯕髠髢𩬅髴䰎鬔鬭𨘀倴鬴𦦨㣃𣁽魐魀𩴾婅𡡣鮎𤉋鰂鯿鰌𩹨鷔𩾷𪆒𪆫𪃡𪄣𪇟鵾鶃𪄴鸎梈" + ], + [ + "91a1", + "鷄𢅛𪆓𪈠𡤻𪈳鴹𪂹𪊴麐麕麞麢䴴麪麯𤍤黁㭠㧥㴝伲㞾𨰫鼂鼈䮖鐤𦶢鼗鼖鼹嚟嚊齅馸𩂋韲葿齢齩竜龎爖䮾𤥵𤦻煷𤧸𤍈𤩑玞𨯚𡣺禟𨥾𨸶鍩鏳𨩄鋬鎁鏋𨥬𤒹爗㻫睲穃烐𤑳𤏸煾𡟯炣𡢾𣖙㻇𡢅𥐯𡟸㜢𡛻𡠹㛡𡝴𡣑𥽋㜣𡛀坛𤨥𡏾𡊨" + ], + [ + "9240", + "𡏆𡒶蔃𣚦蔃葕𤦔𧅥𣸱𥕜𣻻𧁒䓴𣛮𩦝𦼦柹㜳㰕㷧塬𡤢栐䁗𣜿𤃡𤂋𤄏𦰡哋嚞𦚱嚒𠿟𠮨𠸍鏆𨬓鎜仸儫㠙𤐶亼𠑥𠍿佋侊𥙑婨𠆫𠏋㦙𠌊𠐔㐵伩𠋀𨺳𠉵諚𠈌亘" + ], + [ + "92a1", + "働儍侢伃𤨎𣺊佂倮偬傁俌俥偘僼兙兛兝兞湶𣖕𣸹𣺿浲𡢄𣺉冨凃𠗠䓝𠒣𠒒𠒑赺𨪜𠜎剙劤𠡳勡鍮䙺熌𤎌𠰠𤦬𡃤槑𠸝瑹㻞璙琔瑖玘䮎𤪼𤂍叐㖄爏𤃉喴𠍅响𠯆圝鉝雴鍦埝垍坿㘾壋媙𨩆𡛺𡝯𡜐娬妸銏婾嫏娒𥥆𡧳𡡡𤊕㛵洅瑃娡𥺃" + ], + [ + "9340", + "媁𨯗𠐓鏠璌𡌃焅䥲鐈𨧻鎽㞠尞岞幞幈𡦖𡥼𣫮廍孏𡤃𡤄㜁𡢠㛝𡛾㛓脪𨩇𡶺𣑲𨦨弌弎𡤧𡞫婫𡜻孄蘔𧗽衠恾𢡠𢘫忛㺸𢖯𢖾𩂈𦽳懀𠀾𠁆𢘛憙憘恵𢲛𢴇𤛔𩅍" + ], + [ + "93a1", + "摱𤙥𢭪㨩𢬢𣑐𩣪𢹸挷𪑛撶挱揑𤧣𢵧护𢲡搻敫楲㯴𣂎𣊭𤦉𣊫唍𣋠𡣙𩐿曎𣊉𣆳㫠䆐𥖄𨬢𥖏𡛼𥕛𥐥磮𣄃𡠪𣈴㑤𣈏𣆂𤋉暎𦴤晫䮓昰𧡰𡷫晣𣋒𣋡昞𥡲㣑𣠺𣞼㮙𣞢𣏾瓐㮖枏𤘪梶栞㯄檾㡣𣟕𤒇樳橒櫉欅𡤒攑梘橌㯗橺歗𣿀𣲚鎠鋲𨯪𨫋" + ], + [ + "9440", + "銉𨀞𨧜鑧涥漋𤧬浧𣽿㶏渄𤀼娽渊塇洤硂焻𤌚𤉶烱牐犇犔𤞏𤜥兹𤪤𠗫瑺𣻸𣙟𤩊𤤗𥿡㼆㺱𤫟𨰣𣼵悧㻳瓌琼鎇琷䒟𦷪䕑疃㽣𤳙𤴆㽘畕癳𪗆㬙瑨𨫌𤦫𤦎㫻" + ], + [ + "94a1", + "㷍𤩎㻿𤧅𤣳釺圲鍂𨫣𡡤僟𥈡𥇧睸𣈲眎眏睻𤚗𣞁㩞𤣰琸璛㺿𤪺𤫇䃈𤪖𦆮錇𥖁砞碍碈磒珐祙𧝁𥛣䄎禛蒖禥樭𣻺稺秴䅮𡛦䄲鈵秱𠵌𤦌𠊙𣶺𡝮㖗啫㕰㚪𠇔𠰍竢婙𢛵𥪯𥪜娍𠉛磰娪𥯆竾䇹籝籭䈑𥮳𥺼𥺦糍𤧹𡞰粎籼粮檲緜縇緓罎𦉡" + ], + [ + "9540", + "𦅜𧭈綗𥺂䉪𦭵𠤖柖𠁎𣗏埄𦐒𦏸𤥢翝笧𠠬𥫩𥵃笌𥸎駦虅驣樜𣐿㧢𤧷𦖭騟𦖠蒀𧄧𦳑䓪脷䐂胆脉腂𦞴飃𦩂艢艥𦩑葓𦶧蘐𧈛媆䅿𡡀嬫𡢡嫤𡣘蚠蜨𣶏蠭𧐢娂" + ], + [ + "95a1", + "衮佅袇袿裦襥襍𥚃襔𧞅𧞄𨯵𨯙𨮜𨧹㺭蒣䛵䛏㟲訽訜𩑈彍鈫𤊄旔焩烄𡡅鵭貟賩𧷜妚矃姰䍮㛔踪躧𤰉輰轊䋴汘澻𢌡䢛潹溋𡟚鯩㚵𤤯邻邗啱䤆醻鐄𨩋䁢𨫼鐧𨰝𨰻蓥訫閙閧閗閖𨴴瑅㻂𤣿𤩂𤏪㻧𣈥随𨻧𨹦𨹥㻌𤧭𤩸𣿮琒瑫㻼靁𩂰" + ], + [ + "9640", + "桇䨝𩂓𥟟靝鍨𨦉𨰦𨬯𦎾銺嬑譩䤼珹𤈛鞛靱餸𠼦巁𨯅𤪲頟𩓚鋶𩗗釥䓀𨭐𤩧𨭤飜𨩅㼀鈪䤥萔餻饍𧬆㷽馛䭯馪驜𨭥𥣈檏騡嫾騯𩣱䮐𩥈馼䮽䮗鍽塲𡌂堢𤦸" + ], + [ + "96a1", + "𡓨硄𢜟𣶸棅㵽鑘㤧慐𢞁𢥫愇鱏鱓鱻鰵鰐魿鯏𩸭鮟𪇵𪃾鴡䲮𤄄鸘䲰鴌𪆴𪃭𪃳𩤯鶥蒽𦸒𦿟𦮂藼䔳𦶤𦺄𦷰萠藮𦸀𣟗𦁤秢𣖜𣙀䤭𤧞㵢鏛銾鍈𠊿碹鉷鑍俤㑀遤𥕝砽硔碶硋𡝗𣇉𤥁㚚佲濚濙瀞瀞吔𤆵垻壳垊鴖埗焴㒯𤆬燫𦱀𤾗嬨𡞵𨩉" + ], + [ + "9740", + "愌嫎娋䊼𤒈㜬䭻𨧼鎻鎸𡣖𠼝葲𦳀𡐓𤋺𢰦𤏁妔𣶷𦝁綨𦅛𦂤𤦹𤦋𨧺鋥珢㻩璴𨭣𡢟㻡𤪳櫘珳珻㻖𤨾𤪔𡟙𤩦𠎧𡐤𤧥瑈𤤖炥𤥶銄珦鍟𠓾錱𨫎𨨖鎆𨯧𥗕䤵𨪂煫" + ], + [ + "97a1", + "𤥃𠳿嚤𠘚𠯫𠲸唂秄𡟺緾𡛂𤩐𡡒䔮鐁㜊𨫀𤦭妰𡢿𡢃𧒄媡㛢𣵛㚰鉟婹𨪁𡡢鍴㳍𠪴䪖㦊僴㵩㵌𡎜煵䋻𨈘渏𩃤䓫浗𧹏灧沯㳖𣿭𣸭渂漌㵯𠏵畑㚼㓈䚀㻚䡱姄鉮䤾轁𨰜𦯀堒埈㛖𡑒烾𤍢𤩱𢿣𡊰𢎽梹楧𡎘𣓥𧯴𣛟𨪃𣟖𣏺𤲟樚𣚭𦲷萾䓟䓎" + ], + [ + "9840", + "𦴦𦵑𦲂𦿞漗𧄉茽𡜺菭𦲀𧁓𡟛妉媂𡞳婡婱𡤅𤇼㜭姯𡜼㛇熎鎐暚𤊥婮娫𤊓樫𣻹𧜶𤑛𤋊焝𤉙𨧡侰𦴨峂𤓎𧹍𤎽樌𤉖𡌄炦焳𤏩㶥泟勇𤩏繥姫崯㷳彜𤩝𡟟綤萦" + ], + [ + "98a1", + "咅𣫺𣌀𠈔坾𠣕𠘙㿥𡾞𪊶瀃𩅛嵰玏糓𨩙𩐠俈翧狍猐𧫴猸猹𥛶獁獈㺩𧬘遬燵𤣲珡臶㻊県㻑沢国琙琞琟㻢㻰㻴㻺瓓㼎㽓畂畭畲疍㽼痈痜㿀癍㿗癴㿜発𤽜熈嘣覀塩䀝睃䀹条䁅㗛瞘䁪䁯属瞾矋売砘点砜䂨砹硇硑硦葈𥔵礳栃礲䄃" + ], + [ + "9940", + "䄉禑禙辻稆込䅧窑䆲窼艹䇄竏竛䇏両筢筬筻簒簛䉠䉺类粜䊌粸䊔糭输烀𠳏総緔緐緽羮羴犟䎗耠耥笹耮耱联㷌垴炠肷胩䏭脌猪脎脒畠脔䐁㬹腖腙腚" + ], + [ + "99a1", + "䐓堺腼膄䐥膓䐭膥埯臁臤艔䒏芦艶苊苘苿䒰荗险榊萅烵葤惣蒈䔄蒾蓡蓸蔐蔸蕒䔻蕯蕰藠䕷虲蚒蚲蛯际螋䘆䘗袮裿褤襇覑𧥧訩訸誔誴豑賔賲贜䞘塟跃䟭仮踺嗘坔蹱嗵躰䠷軎転軤軭軲辷迁迊迌逳駄䢭飠鈓䤞鈨鉘鉫銱銮銿" + ], + [ + "9a40", + "鋣鋫鋳鋴鋽鍃鎄鎭䥅䥑麿鐗匁鐝鐭鐾䥪鑔鑹锭関䦧间阳䧥枠䨤靀䨵鞲韂噔䫤惨颹䬙飱塄餎餙冴餜餷饂饝饢䭰駅䮝騼鬏窃魩鮁鯝鯱鯴䱭鰠㝯𡯂鵉鰺" + ], + [ + "9aa1", + "黾噐鶓鶽鷀鷼银辶鹻麬麱麽黆铜黢黱黸竈齄𠂔𠊷𠎠椚铃妬𠓗塀铁㞹𠗕𠘕𠙶𡚺块煳𠫂𠫍𠮿呪吆𠯋咞𠯻𠰻𠱓𠱥𠱼惧𠲍噺𠲵𠳝𠳭𠵯𠶲𠷈楕鰯螥𠸄𠸎𠻗𠾐𠼭𠹳尠𠾼帋𡁜𡁏𡁶朞𡁻𡂈𡂖㙇𡂿𡃓𡄯𡄻卤蒭𡋣𡍵𡌶讁𡕷𡘙𡟃𡟇乸炻𡠭𡥪" + ], + [ + "9b40", + "𡨭𡩅𡰪𡱰𡲬𡻈拃𡻕𡼕熘桕𢁅槩㛈𢉼𢏗𢏺𢜪𢡱𢥏苽𢥧𢦓𢫕覥𢫨辠𢬎鞸𢬿顇骽𢱌" + ], + [ + "9b62", + "𢲈𢲷𥯨𢴈𢴒𢶷𢶕𢹂𢽴𢿌𣀳𣁦𣌟𣏞徱晈暿𧩹𣕧𣗳爁𤦺矗𣘚𣜖纇𠍆墵朎" + ], + [ + "9ba1", + "椘𣪧𧙗𥿢𣸑𣺹𧗾𢂚䣐䪸𤄙𨪚𤋮𤌍𤀻𤌴𤎖𤩅𠗊凒𠘑妟𡺨㮾𣳿𤐄𤓖垈𤙴㦛𤜯𨗨𩧉㝢𢇃譞𨭎駖𤠒𤣻𤨕爉𤫀𠱸奥𤺥𤾆𠝹軚𥀬劏圿煱𥊙𥐙𣽊𤪧喼𥑆𥑮𦭒釔㑳𥔿𧘲𥕞䜘𥕢𥕦𥟇𤤿𥡝偦㓻𣏌惞𥤃䝼𨥈𥪮𥮉𥰆𡶐垡煑澶𦄂𧰒遖𦆲𤾚譢𦐂𦑊" + ], + [ + "9c40", + "嵛𦯷輶𦒄𡤜諪𤧶𦒈𣿯𦔒䯀𦖿𦚵𢜛鑥𥟡憕娧晉侻嚹𤔡𦛼乪𤤴陖涏𦲽㘘襷𦞙𦡮𦐑𦡞營𦣇筂𩃀𠨑𦤦鄄𦤹穅鷰𦧺騦𦨭㙟𦑩𠀡禃𦨴𦭛崬𣔙菏𦮝䛐𦲤画补𦶮墶" + ], + [ + "9ca1", + "㜜𢖍𧁋𧇍㱔𧊀𧊅銁𢅺𧊋錰𧋦𤧐氹钟𧑐𠻸蠧裵𢤦𨑳𡞱溸𤨪𡠠㦤㚹尐秣䔿暶𩲭𩢤襃𧟌𧡘囖䃟𡘊㦡𣜯𨃨𡏅熭荦𧧝𩆨婧䲷𧂯𨦫𧧽𧨊𧬋𧵦𤅺筃祾𨀉澵𪋟樃𨌘厢𦸇鎿栶靝𨅯𨀣𦦵𡏭𣈯𨁈嶅𨰰𨂃圕頣𨥉嶫𤦈斾槕叒𤪥𣾁㰑朶𨂐𨃴𨄮𡾡𨅏" + ], + [ + "9d40", + "𨆉𨆯𨈚𨌆𨌯𨎊㗊𨑨𨚪䣺揦𨥖砈鉕𨦸䏲𨧧䏟𨧨𨭆𨯔姸𨰉輋𨿅𩃬筑𩄐𩄼㷷𩅞𤫊运犏嚋𩓧𩗩𩖰𩖸𩜲𩣑𩥉𩥪𩧃𩨨𩬎𩵚𩶛纟𩻸𩼣䲤镇𪊓熢𪋿䶑递𪗋䶜𠲜达嗁" + ], + [ + "9da1", + "辺𢒰边𤪓䔉繿潖檱仪㓤𨬬𧢝㜺躀𡟵𨀤𨭬𨮙𧨾𦚯㷫𧙕𣲷𥘵𥥖亚𥺁𦉘嚿𠹭踎孭𣺈𤲞揞拐𡟶𡡻攰嘭𥱊吚𥌑㷆𩶘䱽嘢嘞罉𥻘奵𣵀蝰东𠿪𠵉𣚺脗鵞贘瘻鱅癎瞹鍅吲腈苷嘥脲萘肽嗪祢噃吖𠺝㗎嘅嗱曱𨋢㘭甴嗰喺咗啲𠱁𠲖廐𥅈𠹶𢱢" + ], + [ + "9e40", + "𠺢麫絚嗞𡁵抝靭咔賍燶酶揼掹揾啩𢭃鱲𢺳冚㓟𠶧冧呍唞唓癦踭𦢊疱肶蠄螆裇膶萜𡃁䓬猄𤜆宐茋𦢓噻𢛴𧴯𤆣𧵳𦻐𧊶酰𡇙鈈𣳼𪚩𠺬𠻹牦𡲢䝎𤿂𧿹𠿫䃺" + ], + [ + "9ea1", + "鱝攟𢶠䣳𤟠𩵼𠿬𠸊恢𧖣𠿭" + ], + [ + "9ead", + "𦁈𡆇熣纎鵐业丄㕷嬍沲卧㚬㧜卽㚥𤘘墚𤭮舭呋垪𥪕𠥹" + ], + [ + "9ec5", + "㩒𢑥獴𩺬䴉鯭𣳾𩼰䱛𤾩𩖞𩿞葜𣶶𧊲𦞳𣜠挮紥𣻷𣸬㨪逈勌㹴㙺䗩𠒎癀嫰𠺶硺𧼮墧䂿噼鮋嵴癔𪐴麅䳡痹㟻愙𣃚𤏲" + ], + [ + "9ef5", + "噝𡊩垧𤥣𩸆刴𧂮㖭汊鵼" + ], + [ + "9f40", + "籖鬹埞𡝬屓擓𩓐𦌵𧅤蚭𠴨𦴢𤫢𠵱" + ], + [ + "9f4f", + "凾𡼏嶎霃𡷑麁遌笟鬂峑箣扨挵髿篏鬪籾鬮籂粆鰕篼鬉鼗鰛𤤾齚啳寃俽麘俲剠㸆勑坧偖妷帒韈鶫轜呩鞴饀鞺匬愰" + ], + [ + "9fa1", + "椬叚鰊鴂䰻陁榀傦畆𡝭駚剳" + ], + [ + "9fae", + "酙隁酜" + ], + [ + "9fb2", + "酑𨺗捿𦴣櫊嘑醎畺抅𠏼獏籰𥰡𣳽" + ], + [ + "9fc1", + "𤤙盖鮝个𠳔莾衂" + ], + [ + "9fc9", + "届槀僭坺刟巵从氱𠇲伹咜哚劚趂㗾弌㗳" + ], + [ + "9fdb", + "歒酼龥鮗頮颴骺麨麄煺笔" + ], + [ + "9fe7", + "毺蠘罸" + ], + [ + "9feb", + "嘠𪙊蹷齓" + ], + [ + "9ff0", + "跔蹏鸜踁抂𨍽踨蹵竓𤩷稾磘泪詧瘇" + ], + [ + "a040", + "𨩚鼦泎蟖痃𪊲硓咢贌狢獱謭猂瓱賫𤪻蘯徺袠䒷" + ], + [ + "a055", + "𡠻𦸅" + ], + [ + "a058", + "詾𢔛" + ], + [ + "a05b", + "惽癧髗鵄鍮鮏蟵" + ], + [ + "a063", + "蠏賷猬霡鮰㗖犲䰇籑饊𦅙慙䰄麖慽" + ], + [ + "a073", + "坟慯抦戹拎㩜懢厪𣏵捤栂㗒" + ], + [ + "a0a1", + "嵗𨯂迚𨸹" + ], + [ + "a0a6", + "僙𡵆礆匲阸𠼻䁥" + ], + [ + "a0ae", + "矾" + ], + [ + "a0b0", + "糂𥼚糚稭聦聣絍甅瓲覔舚朌聢𧒆聛瓰脃眤覉𦟌畓𦻑螩蟎臈螌詉貭譃眫瓸蓚㘵榲趦" + ], + [ + "a0d4", + "覩瑨涹蟁𤀑瓧㷛煶悤憜㳑煢恷" + ], + [ + "a0e2", + "罱𨬭牐惩䭾删㰘𣳇𥻗𧙖𥔱𡥄𡋾𩤃𦷜𧂭峁𦆭𨨏𣙷𠃮𦡆𤼎䕢嬟𦍌齐麦𦉫" + ], + [ + "a3c0", + "␀", + 31, + "␡" + ], + [ + "c6a1", + "①", + 9, + "⑴", + 9, + "ⅰ", + 9, + "丶丿亅亠冂冖冫勹匸卩厶夊宀巛⼳广廴彐彡攴无疒癶辵隶¨ˆヽヾゝゞ〃仝々〆〇ー[]✽ぁ", + 23 + ], + [ + "c740", + "す", + 58, + "ァアィイ" + ], + [ + "c7a1", + "ゥ", + 81, + "А", + 5, + "ЁЖ", + 4 + ], + [ + "c840", + "Л", + 26, + "ёж", + 25, + "⇧↸↹㇏𠃌乚𠂊刂䒑" + ], + [ + "c8a1", + "龰冈龱𧘇" + ], + [ + "c8cd", + "¬¦'"㈱№℡゛゜⺀⺄⺆⺇⺈⺊⺌⺍⺕⺜⺝⺥⺧⺪⺬⺮⺶⺼⺾⻆⻊⻌⻍⻏⻖⻗⻞⻣" + ], + [ + "c8f5", + "ʃɐɛɔɵœøŋʊɪ" + ], + [ + "f9fe", + "■" + ], + [ + "fa40", + "𠕇鋛𠗟𣿅蕌䊵珯况㙉𤥂𨧤鍄𡧛苮𣳈砼杄拟𤤳𨦪𠊠𦮳𡌅侫𢓭倈𦴩𧪄𣘀𤪱𢔓倩𠍾徤𠎀𠍇滛𠐟偽儁㑺儎顬㝃萖𤦤𠒇兠𣎴兪𠯿𢃼𠋥𢔰𠖎𣈳𡦃宂蝽𠖳𣲙冲冸" + ], + [ + "faa1", + "鴴凉减凑㳜凓𤪦决凢卂凭菍椾𣜭彻刋刦刼劵剗劔効勅簕蕂勠蘍𦬓包𨫞啉滙𣾀𠥔𣿬匳卄𠯢泋𡜦栛珕恊㺪㣌𡛨燝䒢卭却𨚫卾卿𡖖𡘓矦厓𨪛厠厫厮玧𥝲㽙玜叁叅汉义埾叙㪫𠮏叠𣿫𢶣叶𠱷吓灹唫晗浛呭𦭓𠵴啝咏咤䞦𡜍𠻝㶴𠵍" + ], + [ + "fb40", + "𨦼𢚘啇䳭启琗喆喩嘅𡣗𤀺䕒𤐵暳𡂴嘷曍𣊊暤暭噍噏磱囱鞇叾圀囯园𨭦㘣𡉏坆𤆥汮炋坂㚱𦱾埦𡐖堃𡑔𤍣堦𤯵塜墪㕡壠壜𡈼壻寿坃𪅐𤉸鏓㖡够梦㛃湙" + ], + [ + "fba1", + "𡘾娤啓𡚒蔅姉𠵎𦲁𦴪𡟜姙𡟻𡞲𦶦浱𡠨𡛕姹𦹅媫婣㛦𤦩婷㜈媖瑥嫓𦾡𢕔㶅𡤑㜲𡚸広勐孶斈孼𧨎䀄䡝𠈄寕慠𡨴𥧌𠖥寳宝䴐尅𡭄尓珎尔𡲥𦬨屉䣝岅峩峯嶋𡷹𡸷崐崘嵆𡺤岺巗苼㠭𤤁𢁉𢅳芇㠶㯂帮檊幵幺𤒼𠳓厦亷廐厨𡝱帉廴𨒂" + ], + [ + "fc40", + "廹廻㢠廼栾鐛弍𠇁弢㫞䢮𡌺强𦢈𢏐彘𢑱彣鞽𦹮彲鍀𨨶徧嶶㵟𥉐𡽪𧃸𢙨釖𠊞𨨩怱暅𡡷㥣㷇㘹垐𢞴祱㹀悞悤悳𤦂𤦏𧩓璤僡媠慤萤慂慈𦻒憁凴𠙖憇宪𣾷" + ], + [ + "fca1", + "𢡟懓𨮝𩥝懐㤲𢦀𢣁怣慜攞掋𠄘担𡝰拕𢸍捬𤧟㨗搸揸𡎎𡟼撐澊𢸶頔𤂌𥜝擡擥鑻㩦携㩗敍漖𤨨𤨣斅敭敟𣁾斵𤥀䬷旑䃘𡠩无旣忟𣐀昘𣇷𣇸晄𣆤𣆥晋𠹵晧𥇦晳晴𡸽𣈱𨗴𣇈𥌓矅𢣷馤朂𤎜𤨡㬫槺𣟂杞杧杢𤇍𩃭柗䓩栢湐鈼栁𣏦𦶠桝" + ], + [ + "fd40", + "𣑯槡樋𨫟楳棃𣗍椁椀㴲㨁𣘼㮀枬楡𨩊䋼椶榘㮡𠏉荣傐槹𣙙𢄪橅𣜃檝㯳枱櫈𩆜㰍欝𠤣惞欵歴𢟍溵𣫛𠎵𡥘㝀吡𣭚毡𣻼毜氷𢒋𤣱𦭑汚舦汹𣶼䓅𣶽𤆤𤤌𤤀" + ], + [ + "fda1", + "𣳉㛥㳫𠴲鮃𣇹𢒑羏样𦴥𦶡𦷫涖浜湼漄𤥿𤂅𦹲蔳𦽴凇沜渝萮𨬡港𣸯瑓𣾂秌湏媑𣁋濸㜍澝𣸰滺𡒗𤀽䕕鏰潄潜㵎潴𩅰㴻澟𤅄濓𤂑𤅕𤀹𣿰𣾴𤄿凟𤅖𤅗𤅀𦇝灋灾炧炁烌烕烖烟䄄㷨熴熖𤉷焫煅媈煊煮岜𤍥煏鍢𤋁焬𤑚𤨧𤨢熺𨯨炽爎" + ], + [ + "fe40", + "鑂爕夑鑃爤鍁𥘅爮牀𤥴梽牕牗㹕𣁄栍漽犂猪猫𤠣𨠫䣭𨠄猨献珏玪𠰺𦨮珉瑉𤇢𡛧𤨤昣㛅𤦷𤦍𤧻珷琕椃𤨦琹𠗃㻗瑜𢢭瑠𨺲瑇珤瑶莹瑬㜰瑴鏱樬璂䥓𤪌" + ], + [ + "fea1", + "𤅟𤩹𨮏孆𨰃𡢞瓈𡦈甎瓩甞𨻙𡩋寗𨺬鎅畍畊畧畮𤾂㼄𤴓疎瑝疞疴瘂瘬癑癏癯癶𦏵皐臯㟸𦤑𦤎皡皥皷盌𦾟葢𥂝𥅽𡸜眞眦着撯𥈠睘𣊬瞯𨥤𨥨𡛁矴砉𡍶𤨒棊碯磇磓隥礮𥗠磗礴碱𧘌辸袄𨬫𦂃𢘜禆褀椂禀𥡗禝𧬹礼禩渪𧄦㺨秆𩄍秔" + ] +]; + +var dbcsData; +var hasRequiredDbcsData; + +function requireDbcsData () { + if (hasRequiredDbcsData) return dbcsData; + hasRequiredDbcsData = 1; + + // Description of supported double byte encodings and aliases. + // Tables are not require()-d until they are needed to speed up library load. + // require()-s are direct to support Browserify. + + dbcsData = { + + // == Japanese/ShiftJIS ==================================================== + // All japanese encodings are based on JIS X set of standards: + // JIS X 0201 - Single-byte encoding of ASCII + ¥ + Kana chars at 0xA1-0xDF. + // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. + // Has several variations in 1978, 1983, 1990 and 1997. + // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead. + // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233. + // 2 planes, first is superset of 0208, second - revised 0212. + // Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx) + + // Byte encodings are: + // * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte + // encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC. + // Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI. + // * EUC-JP: Up to 3 bytes per character. Used mostly on *nixes. + // 0x00-0x7F - lower part of 0201 + // 0x8E, 0xA1-0xDF - upper part of 0201 + // (0xA1-0xFE)x2 - 0208 plane (94x94). + // 0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94). + // * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon. + // Used as-is in ISO2022 family. + // * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, + // 0201-1976 Roman, 0208-1978, 0208-1983. + // * ISO2022-JP-1: Adds esc seq for 0212-1990. + // * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7. + // * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2. + // * ISO2022-JP-2004: Adds 0213-2004 Plane 1. + // + // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes. + // + // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html + + 'shiftjis': { + type: '_dbcs', + table: function() { return require$$0 }, + encodeAdd: {'\u00a5': 0x5C, '\u203E': 0x7E}, + encodeSkipVals: [{from: 0xED40, to: 0xF940}], + }, + 'csshiftjis': 'shiftjis', + 'mskanji': 'shiftjis', + 'sjis': 'shiftjis', + 'windows31j': 'shiftjis', + 'ms31j': 'shiftjis', + 'xsjis': 'shiftjis', + 'windows932': 'shiftjis', + 'ms932': 'shiftjis', + '932': 'shiftjis', + 'cp932': 'shiftjis', + + 'eucjp': { + type: '_dbcs', + table: function() { return require$$1 }, + encodeAdd: {'\u00a5': 0x5C, '\u203E': 0x7E}, + }, + + // TODO: KDDI extension to Shift_JIS + // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes. + // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars. + + + // == Chinese/GBK ========================================================== + // http://en.wikipedia.org/wiki/GBK + // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder + + // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936 + 'gb2312': 'cp936', + 'gb231280': 'cp936', + 'gb23121980': 'cp936', + 'csgb2312': 'cp936', + 'csiso58gb231280': 'cp936', + 'euccn': 'cp936', + + // Microsoft's CP936 is a subset and approximation of GBK. + 'windows936': 'cp936', + 'ms936': 'cp936', + '936': 'cp936', + 'cp936': { + type: '_dbcs', + table: function() { return require$$2 }, + }, + + // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other. + 'gbk': { + type: '_dbcs', + table: function() { return require$$2.concat(require$$3) }, + }, + 'xgbk': 'gbk', + 'isoir58': 'gbk', + + // GB18030 is an algorithmic extension of GBK. + // Main source: https://www.w3.org/TR/encoding/#gbk-encoder + // http://icu-project.org/docs/papers/gb18030.html + // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml + // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0 + 'gb18030': { + type: '_dbcs', + table: function() { return require$$2.concat(require$$3) }, + gb18030: function() { return require$$4 }, + encodeSkipVals: [0x80], + encodeAdd: {'€': 0xA2E3}, + }, + + 'chinese': 'gb18030', + + + // == Korean =============================================================== + // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same. + 'windows949': 'cp949', + 'ms949': 'cp949', + '949': 'cp949', + 'cp949': { + type: '_dbcs', + table: function() { return require$$5 }, + }, + + 'cseuckr': 'cp949', + 'csksc56011987': 'cp949', + 'euckr': 'cp949', + 'isoir149': 'cp949', + 'korean': 'cp949', + 'ksc56011987': 'cp949', + 'ksc56011989': 'cp949', + 'ksc5601': 'cp949', + + + // == Big5/Taiwan/Hong Kong ================================================ + // There are lots of tables for Big5 and cp950. Please see the following links for history: + // http://moztw.org/docs/big5/ http://www.haible.de/bruno/charsets/conversion-tables/Big5.html + // Variations, in roughly number of defined chars: + // * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT + // * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/ + // * Big5-2003 (Taiwan standard) almost superset of cp950. + // * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers. + // * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. + // many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years. + // Plus, it has 4 combining sequences. + // Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299 + // because big5-hkscs is the only encoding to include astral characters in non-algorithmic way. + // Implementations are not consistent within browsers; sometimes labeled as just big5. + // MS Internet Explorer switches from big5 to big5-hkscs when a patch applied. + // Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31 + // In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s. + // Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt + // http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt + // + // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder + // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong. + + 'windows950': 'cp950', + 'ms950': 'cp950', + '950': 'cp950', + 'cp950': { + type: '_dbcs', + table: function() { return require$$6 }, + }, + + // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus. + 'big5': 'big5hkscs', + 'big5hkscs': { + type: '_dbcs', + table: function() { return require$$6.concat(require$$7) }, + encodeSkipVals: [0xa2cc], + }, + + 'cnbig5': 'big5hkscs', + 'csbig5': 'big5hkscs', + 'xxbig5': 'big5hkscs', + }; + return dbcsData; +} + +var hasRequiredEncodings; + +function requireEncodings () { + if (hasRequiredEncodings) return encodings; + hasRequiredEncodings = 1; + (function (exports) { + + // Update this array if you add/rename/remove files in this directory. + // We support Browserify by skipping automatic module discovery and requiring modules directly. + var modules = [ + requireInternal(), + requireUtf16(), + requireUtf7(), + requireSbcsCodec(), + requireSbcsData(), + requireSbcsDataGenerated(), + requireDbcsCodec(), + requireDbcsData(), + ]; + + // Put all encoding/alias/codec definitions to single object and export it. + for (var i = 0; i < modules.length; i++) { + var module = modules[i]; + for (var enc in module) + if (Object.prototype.hasOwnProperty.call(module, enc)) + exports[enc] = module[enc]; + } + } (encodings)); + return encodings; +} + +var streams; +var hasRequiredStreams; + +function requireStreams () { + if (hasRequiredStreams) return streams; + hasRequiredStreams = 1; + + var Buffer = require$$0$4.Buffer, + Transform = require$$1$2.Transform; + + + // == Exports ================================================================== + streams = function(iconv) { + + // Additional Public API. + iconv.encodeStream = function encodeStream(encoding, options) { + return new IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options); + }; + + iconv.decodeStream = function decodeStream(encoding, options) { + return new IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options); + }; + + iconv.supportsStreams = true; + + + // Not published yet. + iconv.IconvLiteEncoderStream = IconvLiteEncoderStream; + iconv.IconvLiteDecoderStream = IconvLiteDecoderStream; + iconv._collect = IconvLiteDecoderStream.prototype.collect; + }; + + + // == Encoder stream ======================================================= + function IconvLiteEncoderStream(conv, options) { + this.conv = conv; + options = options || {}; + options.decodeStrings = false; // We accept only strings, so we don't need to decode them. + Transform.call(this, options); + } + + IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, { + constructor: { value: IconvLiteEncoderStream } + }); + + IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) { + if (typeof chunk != 'string') + return done(new Error("Iconv encoding stream needs strings as its input.")); + try { + var res = this.conv.write(chunk); + if (res && res.length) this.push(res); + done(); + } + catch (e) { + done(e); + } + }; + + IconvLiteEncoderStream.prototype._flush = function(done) { + try { + var res = this.conv.end(); + if (res && res.length) this.push(res); + done(); + } + catch (e) { + done(e); + } + }; + + IconvLiteEncoderStream.prototype.collect = function(cb) { + var chunks = []; + this.on('error', cb); + this.on('data', function(chunk) { chunks.push(chunk); }); + this.on('end', function() { + cb(null, Buffer.concat(chunks)); + }); + return this; + }; + + + // == Decoder stream ======================================================= + function IconvLiteDecoderStream(conv, options) { + this.conv = conv; + options = options || {}; + options.encoding = this.encoding = 'utf8'; // We output strings. + Transform.call(this, options); + } + + IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, { + constructor: { value: IconvLiteDecoderStream } + }); + + IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) { + if (!Buffer.isBuffer(chunk)) + return done(new Error("Iconv decoding stream needs buffers as its input.")); + try { + var res = this.conv.write(chunk); + if (res && res.length) this.push(res, this.encoding); + done(); + } + catch (e) { + done(e); + } + }; + + IconvLiteDecoderStream.prototype._flush = function(done) { + try { + var res = this.conv.end(); + if (res && res.length) this.push(res, this.encoding); + done(); + } + catch (e) { + done(e); + } + }; + + IconvLiteDecoderStream.prototype.collect = function(cb) { + var res = ''; + this.on('error', cb); + this.on('data', function(chunk) { res += chunk; }); + this.on('end', function() { + cb(null, res); + }); + return this; + }; + return streams; +} + +var extendNode; +var hasRequiredExtendNode; + +function requireExtendNode () { + if (hasRequiredExtendNode) return extendNode; + hasRequiredExtendNode = 1; + var Buffer = require$$0$4.Buffer; + // Note: not polyfilled with safer-buffer on a purpose, as overrides Buffer + + // == Extend Node primitives to use iconv-lite ================================= + + extendNode = function (iconv) { + var original = undefined; // Place to keep original methods. + + // Node authors rewrote Buffer internals to make it compatible with + // Uint8Array and we cannot patch key functions since then. + // Note: this does use older Buffer API on a purpose + iconv.supportsNodeEncodingsExtension = !(Buffer.from || new Buffer(0) instanceof Uint8Array); + + iconv.extendNodeEncodings = function extendNodeEncodings() { + if (original) return; + original = {}; + + if (!iconv.supportsNodeEncodingsExtension) { + console.error("ACTION NEEDED: require('iconv-lite').extendNodeEncodings() is not supported in your version of Node"); + console.error("See more info at https://github.com/ashtuchkin/iconv-lite/wiki/Node-v4-compatibility"); + return; + } + + var nodeNativeEncodings = { + 'hex': true, 'utf8': true, 'utf-8': true, 'ascii': true, 'binary': true, + 'base64': true, 'ucs2': true, 'ucs-2': true, 'utf16le': true, 'utf-16le': true, + }; + + Buffer.isNativeEncoding = function(enc) { + return enc && nodeNativeEncodings[enc.toLowerCase()]; + }; + + // -- SlowBuffer ----------------------------------------------------------- + var SlowBuffer = require$$0$4.SlowBuffer; + + original.SlowBufferToString = SlowBuffer.prototype.toString; + SlowBuffer.prototype.toString = function(encoding, start, end) { + encoding = String(encoding || 'utf8').toLowerCase(); + + // Use native conversion when possible + if (Buffer.isNativeEncoding(encoding)) + return original.SlowBufferToString.call(this, encoding, start, end); + + // Otherwise, use our decoding method. + if (typeof start == 'undefined') start = 0; + if (typeof end == 'undefined') end = this.length; + return iconv.decode(this.slice(start, end), encoding); + }; + + original.SlowBufferWrite = SlowBuffer.prototype.write; + SlowBuffer.prototype.write = function(string, offset, length, encoding) { + // Support both (string, offset, length, encoding) + // and the legacy (string, encoding, offset, length) + if (isFinite(offset)) { + if (!isFinite(length)) { + encoding = length; + length = undefined; + } + } else { // legacy + var swap = encoding; + encoding = offset; + offset = length; + length = swap; + } + + offset = +offset || 0; + var remaining = this.length - offset; + if (!length) { + length = remaining; + } else { + length = +length; + if (length > remaining) { + length = remaining; + } + } + encoding = String(encoding || 'utf8').toLowerCase(); + + // Use native conversion when possible + if (Buffer.isNativeEncoding(encoding)) + return original.SlowBufferWrite.call(this, string, offset, length, encoding); + + if (string.length > 0 && (length < 0 || offset < 0)) + throw new RangeError('attempt to write beyond buffer bounds'); + + // Otherwise, use our encoding method. + var buf = iconv.encode(string, encoding); + if (buf.length < length) length = buf.length; + buf.copy(this, offset, 0, length); + return length; + }; + + // -- Buffer --------------------------------------------------------------- + + original.BufferIsEncoding = Buffer.isEncoding; + Buffer.isEncoding = function(encoding) { + return Buffer.isNativeEncoding(encoding) || iconv.encodingExists(encoding); + }; + + original.BufferByteLength = Buffer.byteLength; + Buffer.byteLength = SlowBuffer.byteLength = function(str, encoding) { + encoding = String(encoding || 'utf8').toLowerCase(); + + // Use native conversion when possible + if (Buffer.isNativeEncoding(encoding)) + return original.BufferByteLength.call(this, str, encoding); + + // Slow, I know, but we don't have a better way yet. + return iconv.encode(str, encoding).length; + }; + + original.BufferToString = Buffer.prototype.toString; + Buffer.prototype.toString = function(encoding, start, end) { + encoding = String(encoding || 'utf8').toLowerCase(); + + // Use native conversion when possible + if (Buffer.isNativeEncoding(encoding)) + return original.BufferToString.call(this, encoding, start, end); + + // Otherwise, use our decoding method. + if (typeof start == 'undefined') start = 0; + if (typeof end == 'undefined') end = this.length; + return iconv.decode(this.slice(start, end), encoding); + }; + + original.BufferWrite = Buffer.prototype.write; + Buffer.prototype.write = function(string, offset, length, encoding) { + var _offset = offset, _length = length, _encoding = encoding; + // Support both (string, offset, length, encoding) + // and the legacy (string, encoding, offset, length) + if (isFinite(offset)) { + if (!isFinite(length)) { + encoding = length; + length = undefined; + } + } else { // legacy + var swap = encoding; + encoding = offset; + offset = length; + length = swap; + } + + encoding = String(encoding || 'utf8').toLowerCase(); + + // Use native conversion when possible + if (Buffer.isNativeEncoding(encoding)) + return original.BufferWrite.call(this, string, _offset, _length, _encoding); + + offset = +offset || 0; + var remaining = this.length - offset; + if (!length) { + length = remaining; + } else { + length = +length; + if (length > remaining) { + length = remaining; + } + } + + if (string.length > 0 && (length < 0 || offset < 0)) + throw new RangeError('attempt to write beyond buffer bounds'); + + // Otherwise, use our encoding method. + var buf = iconv.encode(string, encoding); + if (buf.length < length) length = buf.length; + buf.copy(this, offset, 0, length); + return length; + + // TODO: Set _charsWritten. + }; + + + // -- Readable ------------------------------------------------------------- + if (iconv.supportsStreams) { + var Readable = require$$1$2.Readable; + + original.ReadableSetEncoding = Readable.prototype.setEncoding; + Readable.prototype.setEncoding = function setEncoding(enc, options) { + // Use our own decoder, it has the same interface. + // We cannot use original function as it doesn't handle BOM-s. + this._readableState.decoder = iconv.getDecoder(enc, options); + this._readableState.encoding = enc; + }; + + Readable.prototype.collect = iconv._collect; + } + }; + + // Remove iconv-lite Node primitive extensions. + iconv.undoExtendNodeEncodings = function undoExtendNodeEncodings() { + if (!iconv.supportsNodeEncodingsExtension) + return; + if (!original) + throw new Error("require('iconv-lite').undoExtendNodeEncodings(): Nothing to undo; extendNodeEncodings() is not called.") + + delete Buffer.isNativeEncoding; + + var SlowBuffer = require$$0$4.SlowBuffer; + + SlowBuffer.prototype.toString = original.SlowBufferToString; + SlowBuffer.prototype.write = original.SlowBufferWrite; + + Buffer.isEncoding = original.BufferIsEncoding; + Buffer.byteLength = original.BufferByteLength; + Buffer.prototype.toString = original.BufferToString; + Buffer.prototype.write = original.BufferWrite; + + if (iconv.supportsStreams) { + var Readable = require$$1$2.Readable; + + Readable.prototype.setEncoding = original.ReadableSetEncoding; + delete Readable.prototype.collect; + } + + original = undefined; + }; + }; + return extendNode; +} + +(function (module) { + + // Some environments don't have global Buffer (e.g. React Native). + // Solution would be installing npm modules "buffer" and "stream" explicitly. + var Buffer = safer_1.Buffer; + + var bomHandling$1 = bomHandling, + iconv = module.exports; + + // All codecs and aliases are kept here, keyed by encoding name/alias. + // They are lazy loaded in `iconv.getCodec` from `encodings/index.js`. + iconv.encodings = null; + + // Characters emitted in case of error. + iconv.defaultCharUnicode = '�'; + iconv.defaultCharSingleByte = '?'; + + // Public API. + iconv.encode = function encode(str, encoding, options) { + str = "" + (str || ""); // Ensure string. + + var encoder = iconv.getEncoder(encoding, options); + + var res = encoder.write(str); + var trail = encoder.end(); + + return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res; + }; + + iconv.decode = function decode(buf, encoding, options) { + if (typeof buf === 'string') { + if (!iconv.skipDecodeWarning) { + console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding'); + iconv.skipDecodeWarning = true; + } + + buf = Buffer.from("" + (buf || ""), "binary"); // Ensure buffer. + } + + var decoder = iconv.getDecoder(encoding, options); + + var res = decoder.write(buf); + var trail = decoder.end(); + + return trail ? (res + trail) : res; + }; + + iconv.encodingExists = function encodingExists(enc) { + try { + iconv.getCodec(enc); + return true; + } catch (e) { + return false; + } + }; + + // Legacy aliases to convert functions + iconv.toEncoding = iconv.encode; + iconv.fromEncoding = iconv.decode; + + // Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache. + iconv._codecDataCache = {}; + iconv.getCodec = function getCodec(encoding) { + if (!iconv.encodings) + iconv.encodings = requireEncodings(); // Lazy load all encoding definitions. + + // Canonicalize encoding name: strip all non-alphanumeric chars and appended year. + var enc = iconv._canonicalizeEncoding(encoding); + + // Traverse iconv.encodings to find actual codec. + var codecOptions = {}; + while (true) { + var codec = iconv._codecDataCache[enc]; + if (codec) + return codec; + + var codecDef = iconv.encodings[enc]; + + switch (typeof codecDef) { + case "string": // Direct alias to other encoding. + enc = codecDef; + break; + + case "object": // Alias with options. Can be layered. + for (var key in codecDef) + codecOptions[key] = codecDef[key]; + + if (!codecOptions.encodingName) + codecOptions.encodingName = enc; + + enc = codecDef.type; + break; + + case "function": // Codec itself. + if (!codecOptions.encodingName) + codecOptions.encodingName = enc; + + // The codec function must load all tables and return object with .encoder and .decoder methods. + // It'll be called only once (for each different options object). + codec = new codecDef(codecOptions, iconv); + + iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later. + return codec; + + default: + throw new Error("Encoding not recognized: '" + encoding + "' (searched as: '"+enc+"')"); + } + } + }; + + iconv._canonicalizeEncoding = function(encoding) { + // Canonicalize encoding name: strip all non-alphanumeric chars and appended year. + return (''+encoding).toLowerCase().replace(/:\d{4}$|[^0-9a-z]/g, ""); + }; + + iconv.getEncoder = function getEncoder(encoding, options) { + var codec = iconv.getCodec(encoding), + encoder = new codec.encoder(options, codec); + + if (codec.bomAware && options && options.addBOM) + encoder = new bomHandling$1.PrependBOM(encoder, options); + + return encoder; + }; + + iconv.getDecoder = function getDecoder(encoding, options) { + var codec = iconv.getCodec(encoding), + decoder = new codec.decoder(options, codec); + + if (codec.bomAware && !(options && options.stripBOM === false)) + decoder = new bomHandling$1.StripBOM(decoder, options); + + return decoder; + }; + + + // Load extensions in Node. All of them are omitted in Browserify build via 'browser' field in package.json. + var nodeVer = typeof process !== 'undefined' && process.versions && process.versions.node; + if (nodeVer) { + + // Load streaming support in Node v0.10+ + var nodeVerArr = nodeVer.split(".").map(Number); + if (nodeVerArr[0] > 0 || nodeVerArr[1] >= 10) { + requireStreams()(iconv); + } + + // Load Node primitive extensions. + requireExtendNode()(iconv); + } +} (lib)); + +var libExports = lib.exports; + +var tmp = {}; + +var isWindows = process.platform === 'win32'; +var trailingSlashRe = isWindows ? /[^:]\\$/ : /.\/$/; + +// https://github.com/nodejs/node/blob/3e7a14381497a3b73dda68d05b5130563cdab420/lib/os.js#L25-L43 +var osTmpdir = function () { + var path; + + if (isWindows) { + path = process.env.TEMP || + process.env.TMP || + (process.env.SystemRoot || process.env.windir) + '\\temp'; + } else { + path = process.env.TMPDIR || + process.env.TMP || + process.env.TEMP || + '/tmp'; + } + + if (trailingSlashRe.test(path)) { + path = path.slice(0, -1); + } + + return path; +}; + +/*! + * Tmp + * + * Copyright (c) 2011-2017 KARASZI Istvan + * + * MIT Licensed + */ + +/* + * Module dependencies. + */ +const fs = require$$0$2; +const path = path$1; +const crypto = require$$2$1; +const osTmpDir = osTmpdir; +const _c = process.binding('constants'); + +/* + * The working inner variables. + */ +const + /** + * The temporary directory. + * @type {string} + */ + tmpDir = osTmpDir(), + + // the random characters to choose from + RANDOM_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', + + TEMPLATE_PATTERN = /XXXXXX/, + + DEFAULT_TRIES = 3, + + CREATE_FLAGS = (_c.O_CREAT || _c.fs.O_CREAT) | (_c.O_EXCL || _c.fs.O_EXCL) | (_c.O_RDWR || _c.fs.O_RDWR), + + EBADF = _c.EBADF || _c.os.errno.EBADF, + ENOENT = _c.ENOENT || _c.os.errno.ENOENT, + + DIR_MODE = 448 /* 0o700 */, + FILE_MODE = 384 /* 0o600 */, + + // this will hold the objects need to be removed on exit + _removeObjects = []; + +var + _gracefulCleanup = false, + _uncaughtException = false; + +/** + * Random name generator based on crypto. + * Adapted from http://blog.tompawlak.org/how-to-generate-random-values-nodejs-javascript + * + * @param {number} howMany + * @returns {string} the generated random name + * @private + */ +function _randomChars(howMany) { + var + value = [], + rnd = null; + + // make sure that we do not fail because we ran out of entropy + try { + rnd = crypto.randomBytes(howMany); + } catch (e) { + rnd = crypto.pseudoRandomBytes(howMany); + } + + for (var i = 0; i < howMany; i++) { + value.push(RANDOM_CHARS[rnd[i] % RANDOM_CHARS.length]); + } + + return value.join(''); +} + +/** + * Checks whether the `obj` parameter is defined or not. + * + * @param {Object} obj + * @returns {boolean} true if the object is undefined + * @private + */ +function _isUndefined(obj) { + return typeof obj === 'undefined'; +} + +/** + * Parses the function arguments. + * + * This function helps to have optional arguments. + * + * @param {(Options|Function)} options + * @param {Function} callback + * @returns {Array} parsed arguments + * @private + */ +function _parseArguments(options, callback) { + if (typeof options == 'function') { + return [callback || {}, options]; + } + + if (_isUndefined(options)) { + return [{}, callback]; + } + + return [options, callback]; +} + +/** + * Generates a new temporary name. + * + * @param {Object} opts + * @returns {string} the new random name according to opts + * @private + */ +function _generateTmpName(opts) { + if (opts.name) { + return path.join(opts.dir || tmpDir, opts.name); + } + + // mkstemps like template + if (opts.template) { + return opts.template.replace(TEMPLATE_PATTERN, _randomChars(6)); + } + + // prefix and postfix + const name = [ + opts.prefix || 'tmp-', + process.pid, + _randomChars(12), + opts.postfix || '' + ].join(''); + + return path.join(opts.dir || tmpDir, name); +} + +/** + * Gets a temporary file name. + * + * @param {(Options|tmpNameCallback)} options options or callback + * @param {?tmpNameCallback} callback the callback function + */ +function tmpName(options, callback) { + var + args = _parseArguments(options, callback), + opts = args[0], + cb = args[1], + tries = opts.name ? 1 : opts.tries || DEFAULT_TRIES; + + if (isNaN(tries) || tries < 0) + return cb(new Error('Invalid tries')); + + if (opts.template && !opts.template.match(TEMPLATE_PATTERN)) + return cb(new Error('Invalid template provided')); + + (function _getUniqueName() { + const name = _generateTmpName(opts); + + // check whether the path exists then retry if needed + fs.stat(name, function (err) { + if (!err) { + if (tries-- > 0) return _getUniqueName(); + + return cb(new Error('Could not get a unique tmp filename, max tries reached ' + name)); + } + + cb(null, name); + }); + }()); +} + +/** + * Synchronous version of tmpName. + * + * @param {Object} options + * @returns {string} the generated random name + * @throws {Error} if the options are invalid or could not generate a filename + */ +function tmpNameSync(options) { + var + args = _parseArguments(options), + opts = args[0], + tries = opts.name ? 1 : opts.tries || DEFAULT_TRIES; + + if (isNaN(tries) || tries < 0) + throw new Error('Invalid tries'); + + if (opts.template && !opts.template.match(TEMPLATE_PATTERN)) + throw new Error('Invalid template provided'); + + do { + const name = _generateTmpName(opts); + try { + fs.statSync(name); + } catch (e) { + return name; + } + } while (tries-- > 0); + + throw new Error('Could not get a unique tmp filename, max tries reached'); +} + +/** + * Creates and opens a temporary file. + * + * @param {(Options|fileCallback)} options the config options or the callback function + * @param {?fileCallback} callback + */ +function file(options, callback) { + var + args = _parseArguments(options, callback), + opts = args[0], + cb = args[1]; + + opts.postfix = (_isUndefined(opts.postfix)) ? '.tmp' : opts.postfix; + + // gets a temporary filename + tmpName(opts, function _tmpNameCreated(err, name) { + if (err) return cb(err); + + // create and open the file + fs.open(name, CREATE_FLAGS, opts.mode || FILE_MODE, function _fileCreated(err, fd) { + if (err) return cb(err); + + if (opts.discardDescriptor) { + return fs.close(fd, function _discardCallback(err) { + if (err) { + // Low probability, and the file exists, so this could be + // ignored. If it isn't we certainly need to unlink the + // file, and if that fails too its error is more + // important. + try { + fs.unlinkSync(name); + } catch (e) { + if (!isENOENT(e)) { + err = e; + } + } + return cb(err); + } + cb(null, name, undefined, _prepareTmpFileRemoveCallback(name, -1, opts)); + }); + } + if (opts.detachDescriptor) { + return cb(null, name, fd, _prepareTmpFileRemoveCallback(name, -1, opts)); + } + cb(null, name, fd, _prepareTmpFileRemoveCallback(name, fd, opts)); + }); + }); +} + +/** + * Synchronous version of file. + * + * @param {Options} options + * @returns {FileSyncObject} object consists of name, fd and removeCallback + * @throws {Error} if cannot create a file + */ +function fileSync(options) { + var + args = _parseArguments(options), + opts = args[0]; + + opts.postfix = opts.postfix || '.tmp'; + + const discardOrDetachDescriptor = opts.discardDescriptor || opts.detachDescriptor; + const name = tmpNameSync(opts); + var fd = fs.openSync(name, CREATE_FLAGS, opts.mode || FILE_MODE); + if (opts.discardDescriptor) { + fs.closeSync(fd); + fd = undefined; + } + + return { + name: name, + fd: fd, + removeCallback: _prepareTmpFileRemoveCallback(name, discardOrDetachDescriptor ? -1 : fd, opts) + }; +} + +/** + * Removes files and folders in a directory recursively. + * + * @param {string} root + * @private + */ +function _rmdirRecursiveSync(root) { + const dirs = [root]; + + do { + var + dir = dirs.pop(), + deferred = false, + files = fs.readdirSync(dir); + + for (var i = 0, length = files.length; i < length; i++) { + var + file = path.join(dir, files[i]), + stat = fs.lstatSync(file); // lstat so we don't recurse into symlinked directories + + if (stat.isDirectory()) { + if (!deferred) { + deferred = true; + dirs.push(dir); + } + dirs.push(file); + } else { + fs.unlinkSync(file); + } + } + + if (!deferred) { + fs.rmdirSync(dir); + } + } while (dirs.length !== 0); +} + +/** + * Creates a temporary directory. + * + * @param {(Options|dirCallback)} options the options or the callback function + * @param {?dirCallback} callback + */ +function dir(options, callback) { + var + args = _parseArguments(options, callback), + opts = args[0], + cb = args[1]; + + // gets a temporary filename + tmpName(opts, function _tmpNameCreated(err, name) { + if (err) return cb(err); + + // create the directory + fs.mkdir(name, opts.mode || DIR_MODE, function _dirCreated(err) { + if (err) return cb(err); + + cb(null, name, _prepareTmpDirRemoveCallback(name, opts)); + }); + }); +} + +/** + * Synchronous version of dir. + * + * @param {Options} options + * @returns {DirSyncObject} object consists of name and removeCallback + * @throws {Error} if it cannot create a directory + */ +function dirSync(options) { + var + args = _parseArguments(options), + opts = args[0]; + + const name = tmpNameSync(opts); + fs.mkdirSync(name, opts.mode || DIR_MODE); + + return { + name: name, + removeCallback: _prepareTmpDirRemoveCallback(name, opts) + }; +} + +/** + * Prepares the callback for removal of the temporary file. + * + * @param {string} name the path of the file + * @param {number} fd file descriptor + * @param {Object} opts + * @returns {fileCallback} + * @private + */ +function _prepareTmpFileRemoveCallback(name, fd, opts) { + const removeCallback = _prepareRemoveCallback(function _removeCallback(fdPath) { + try { + if (0 <= fdPath[0]) { + fs.closeSync(fdPath[0]); + } + } + catch (e) { + // under some node/windows related circumstances, a temporary file + // may have not be created as expected or the file was already closed + // by the user, in which case we will simply ignore the error + if (!isEBADF(e) && !isENOENT(e)) { + // reraise any unanticipated error + throw e; + } + } + try { + fs.unlinkSync(fdPath[1]); + } + catch (e) { + if (!isENOENT(e)) { + // reraise any unanticipated error + throw e; + } + } + }, [fd, name]); + + if (!opts.keep) { + _removeObjects.unshift(removeCallback); + } + + return removeCallback; +} + +/** + * Prepares the callback for removal of the temporary directory. + * + * @param {string} name + * @param {Object} opts + * @returns {Function} the callback + * @private + */ +function _prepareTmpDirRemoveCallback(name, opts) { + const removeFunction = opts.unsafeCleanup ? _rmdirRecursiveSync : fs.rmdirSync.bind(fs); + const removeCallback = _prepareRemoveCallback(removeFunction, name); + + if (!opts.keep) { + _removeObjects.unshift(removeCallback); + } + + return removeCallback; +} + +/** + * Creates a guarded function wrapping the removeFunction call. + * + * @param {Function} removeFunction + * @param {Object} arg + * @returns {Function} + * @private + */ +function _prepareRemoveCallback(removeFunction, arg) { + var called = false; + + return function _cleanupCallback(next) { + if (!called) { + const index = _removeObjects.indexOf(_cleanupCallback); + if (index >= 0) { + _removeObjects.splice(index, 1); + } + + called = true; + removeFunction(arg); + } + + if (next) next(null); + }; +} + +/** + * The garbage collector. + * + * @private + */ +function _garbageCollector() { + if (_uncaughtException && !_gracefulCleanup) { + return; + } + + // the function being called removes itself from _removeObjects, + // loop until _removeObjects is empty + while (_removeObjects.length) { + try { + _removeObjects[0].call(null); + } catch (e) { + // already removed? + } + } +} + +/** + * Helper for testing against EBADF to compensate changes made to Node 7.x under Windows. + */ +function isEBADF(error) { + return isExpectedError(error, -EBADF, 'EBADF'); +} + +/** + * Helper for testing against ENOENT to compensate changes made to Node 7.x under Windows. + */ +function isENOENT(error) { + return isExpectedError(error, -ENOENT, 'ENOENT'); +} + +/** + * Helper to determine whether the expected error code matches the actual code and errno, + * which will differ between the supported node versions. + * + * - Node >= 7.0: + * error.code {String} + * error.errno {String|Number} any numerical value will be negated + * + * - Node >= 6.0 < 7.0: + * error.code {String} + * error.errno {Number} negated + * + * - Node >= 4.0 < 6.0: introduces SystemError + * error.code {String} + * error.errno {Number} negated + * + * - Node >= 0.10 < 4.0: + * error.code {Number} negated + * error.errno n/a + */ +function isExpectedError(error, code, errno) { + return error.code == code || error.code == errno; +} + +/** + * Sets the graceful cleanup. + * + * Also removes the created files and directories when an uncaught exception occurs. + */ +function setGracefulCleanup() { + _gracefulCleanup = true; +} + +const version = process.versions.node.split('.').map(function (value) { + return parseInt(value, 10); +}); + +if (version[0] === 0 && (version[1] < 9 || version[1] === 9 && version[2] < 5)) { + process.addListener('uncaughtException', function _uncaughtExceptionThrown(err) { + _uncaughtException = true; + _garbageCollector(); + + throw err; + }); +} + +process.addListener('exit', function _exit(code) { + if (code) _uncaughtException = true; + _garbageCollector(); +}); + +/** + * Configuration options. + * + * @typedef {Object} Options + * @property {?number} tries the number of tries before give up the name generation + * @property {?string} template the "mkstemp" like filename template + * @property {?string} name fix name + * @property {?string} dir the tmp directory to use + * @property {?string} prefix prefix for the generated name + * @property {?string} postfix postfix for the generated name + */ + +/** + * @typedef {Object} FileSyncObject + * @property {string} name the name of the file + * @property {string} fd the file descriptor + * @property {fileCallback} removeCallback the callback function to remove the file + */ + +/** + * @typedef {Object} DirSyncObject + * @property {string} name the name of the directory + * @property {fileCallback} removeCallback the callback function to remove the directory + */ + +/** + * @callback tmpNameCallback + * @param {?Error} err the error object if anything goes wrong + * @param {string} name the temporary file name + */ + +/** + * @callback fileCallback + * @param {?Error} err the error object if anything goes wrong + * @param {string} name the temporary file name + * @param {number} fd the file descriptor + * @param {cleanupCallback} fn the cleanup callback function + */ + +/** + * @callback dirCallback + * @param {?Error} err the error object if anything goes wrong + * @param {string} name the temporary file name + * @param {cleanupCallback} fn the cleanup callback function + */ + +/** + * Removes the temporary created file or directory. + * + * @callback cleanupCallback + * @param {simpleCallback} [next] function to call after entry was removed + */ + +/** + * Callback function for function composition. + * @see {@link https://github.com/raszi/node-tmp/issues/57|raszi/node-tmp#57} + * + * @callback simpleCallback + */ + +// exporting all the needed methods +tmp.tmpdir = tmpDir; + +tmp.dir = dir; +tmp.dirSync = dirSync; + +tmp.file = file; +tmp.fileSync = fileSync; + +tmp.tmpName = tmpName; +tmp.tmpNameSync = tmpNameSync; + +tmp.setGracefulCleanup = setGracefulCleanup; + +var CreateFileError$1 = {}; + +/*** + * Node External Editor + * + * Kevin Gravier + * MIT 2018 + */ +var __extends$3 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(CreateFileError$1, "__esModule", { value: true }); +var CreateFileError = /** @class */ (function (_super) { + __extends$3(CreateFileError, _super); + function CreateFileError(originalError) { + var _newTarget = this.constructor; + var _this = _super.call(this, "Failed to create temporary file for editor") || this; + _this.originalError = originalError; + var proto = _newTarget.prototype; + if (Object.setPrototypeOf) { + Object.setPrototypeOf(_this, proto); + } + else { + _this.__proto__ = _newTarget.prototype; + } + return _this; + } + return CreateFileError; +}(Error)); +CreateFileError$1.CreateFileError = CreateFileError; + +var LaunchEditorError$1 = {}; + +/*** + * Node External Editor + * + * Kevin Gravier + * MIT 2018 + */ +var __extends$2 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(LaunchEditorError$1, "__esModule", { value: true }); +var LaunchEditorError = /** @class */ (function (_super) { + __extends$2(LaunchEditorError, _super); + function LaunchEditorError(originalError) { + var _newTarget = this.constructor; + var _this = _super.call(this, "Failed launch editor") || this; + _this.originalError = originalError; + var proto = _newTarget.prototype; + if (Object.setPrototypeOf) { + Object.setPrototypeOf(_this, proto); + } + else { + _this.__proto__ = _newTarget.prototype; + } + return _this; + } + return LaunchEditorError; +}(Error)); +LaunchEditorError$1.LaunchEditorError = LaunchEditorError; + +var ReadFileError$1 = {}; + +/*** + * Node External Editor + * + * Kevin Gravier + * MIT 2018 + */ +var __extends$1 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(ReadFileError$1, "__esModule", { value: true }); +var ReadFileError = /** @class */ (function (_super) { + __extends$1(ReadFileError, _super); + function ReadFileError(originalError) { + var _newTarget = this.constructor; + var _this = _super.call(this, "Failed to read temporary file") || this; + _this.originalError = originalError; + var proto = _newTarget.prototype; + if (Object.setPrototypeOf) { + Object.setPrototypeOf(_this, proto); + } + else { + _this.__proto__ = _newTarget.prototype; + } + return _this; + } + return ReadFileError; +}(Error)); +ReadFileError$1.ReadFileError = ReadFileError; + +var RemoveFileError$1 = {}; + +/*** + * Node External Editor + * + * Kevin Gravier + * MIT 2018 + */ +var __extends = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(RemoveFileError$1, "__esModule", { value: true }); +var RemoveFileError = /** @class */ (function (_super) { + __extends(RemoveFileError, _super); + function RemoveFileError(originalError) { + var _newTarget = this.constructor; + var _this = _super.call(this, "Failed to cleanup temporary file") || this; + _this.originalError = originalError; + var proto = _newTarget.prototype; + if (Object.setPrototypeOf) { + Object.setPrototypeOf(_this, proto); + } + else { + _this.__proto__ = _newTarget.prototype; + } + return _this; + } + return RemoveFileError; +}(Error)); +RemoveFileError$1.RemoveFileError = RemoveFileError; + +/*** + * Node External Editor + * + * Kevin Gravier + * MIT 2019 + */ +Object.defineProperty(main, "__esModule", { value: true }); +var chardet_1 = chardet; +var child_process_1 = require$$1$1; +var fs_1 = require$$0$2; +var iconv_lite_1 = libExports; +var tmp_1 = tmp; +var CreateFileError_1 = CreateFileError$1; +main.CreateFileError = CreateFileError_1.CreateFileError; +var LaunchEditorError_1 = LaunchEditorError$1; +main.LaunchEditorError = LaunchEditorError_1.LaunchEditorError; +var ReadFileError_1 = ReadFileError$1; +main.ReadFileError = ReadFileError_1.ReadFileError; +var RemoveFileError_1 = RemoveFileError$1; +main.RemoveFileError = RemoveFileError_1.RemoveFileError; +function edit(text, fileOptions) { + if (text === void 0) { text = ""; } + var editor = new ExternalEditor(text, fileOptions); + editor.run(); + editor.cleanup(); + return editor.text; +} +main.edit = edit; +function editAsync(text, callback, fileOptions) { + if (text === void 0) { text = ""; } + var editor = new ExternalEditor(text, fileOptions); + editor.runAsync(function (err, result) { + if (err) { + setImmediate(callback, err, null); + } + else { + try { + editor.cleanup(); + setImmediate(callback, null, result); + } + catch (cleanupError) { + setImmediate(callback, cleanupError, null); + } + } + }); +} +var editAsync_1 = main.editAsync = editAsync; +var ExternalEditor = /** @class */ (function () { + function ExternalEditor(text, fileOptions) { + if (text === void 0) { text = ""; } + this.text = ""; + this.fileOptions = {}; + this.text = text; + if (fileOptions) { + this.fileOptions = fileOptions; + } + this.determineEditor(); + this.createTemporaryFile(); + } + ExternalEditor.splitStringBySpace = function (str) { + var pieces = []; + var currentString = ""; + for (var strIndex = 0; strIndex < str.length; strIndex++) { + var currentLetter = str[strIndex]; + if (strIndex > 0 && currentLetter === " " && str[strIndex - 1] !== "\\" && currentString.length > 0) { + pieces.push(currentString); + currentString = ""; + } + else { + currentString += currentLetter; + } + } + if (currentString.length > 0) { + pieces.push(currentString); + } + return pieces; + }; + Object.defineProperty(ExternalEditor.prototype, "temp_file", { + get: function () { + console.log("DEPRECATED: temp_file. Use tempFile moving forward."); + return this.tempFile; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ExternalEditor.prototype, "last_exit_status", { + get: function () { + console.log("DEPRECATED: last_exit_status. Use lastExitStatus moving forward."); + return this.lastExitStatus; + }, + enumerable: true, + configurable: true + }); + ExternalEditor.prototype.run = function () { + this.launchEditor(); + this.readTemporaryFile(); + return this.text; + }; + ExternalEditor.prototype.runAsync = function (callback) { + var _this = this; + try { + this.launchEditorAsync(function () { + try { + _this.readTemporaryFile(); + setImmediate(callback, null, _this.text); + } + catch (readError) { + setImmediate(callback, readError, null); + } + }); + } + catch (launchError) { + setImmediate(callback, launchError, null); + } + }; + ExternalEditor.prototype.cleanup = function () { + this.removeTemporaryFile(); + }; + ExternalEditor.prototype.determineEditor = function () { + var editor = process.env.VISUAL ? process.env.VISUAL : + process.env.EDITOR ? process.env.EDITOR : + /^win/.test(process.platform) ? "notepad" : + "vim"; + var editorOpts = ExternalEditor.splitStringBySpace(editor).map(function (piece) { return piece.replace("\\ ", " "); }); + var bin = editorOpts.shift(); + this.editor = { args: editorOpts, bin: bin }; + }; + ExternalEditor.prototype.createTemporaryFile = function () { + try { + this.tempFile = tmp_1.tmpNameSync(this.fileOptions); + var opt = { encoding: "utf8" }; + if (this.fileOptions.hasOwnProperty("mode")) { + opt.mode = this.fileOptions.mode; + } + fs_1.writeFileSync(this.tempFile, this.text, opt); + } + catch (createFileError) { + throw new CreateFileError_1.CreateFileError(createFileError); + } + }; + ExternalEditor.prototype.readTemporaryFile = function () { + try { + var tempFileBuffer = fs_1.readFileSync(this.tempFile); + if (tempFileBuffer.length === 0) { + this.text = ""; + } + else { + var encoding = chardet_1.detect(tempFileBuffer).toString(); + if (!iconv_lite_1.encodingExists(encoding)) { + // Probably a bad idea, but will at least prevent crashing + encoding = "utf8"; + } + this.text = iconv_lite_1.decode(tempFileBuffer, encoding); + } + } + catch (readFileError) { + throw new ReadFileError_1.ReadFileError(readFileError); + } + }; + ExternalEditor.prototype.removeTemporaryFile = function () { + try { + fs_1.unlinkSync(this.tempFile); + } + catch (removeFileError) { + throw new RemoveFileError_1.RemoveFileError(removeFileError); + } + }; + ExternalEditor.prototype.launchEditor = function () { + try { + var editorProcess = child_process_1.spawnSync(this.editor.bin, this.editor.args.concat([this.tempFile]), { stdio: "inherit" }); + this.lastExitStatus = editorProcess.status; + } + catch (launchError) { + throw new LaunchEditorError_1.LaunchEditorError(launchError); + } + }; + ExternalEditor.prototype.launchEditorAsync = function (callback) { + var _this = this; + try { + var editorProcess = child_process_1.spawn(this.editor.bin, this.editor.args.concat([this.tempFile]), { stdio: "inherit" }); + editorProcess.on("exit", function (code) { + _this.lastExitStatus = code; + setImmediate(callback); + }); + } + catch (launchError) { + throw new LaunchEditorError_1.LaunchEditorError(launchError); + } + }; + return ExternalEditor; +}()); +main.ExternalEditor = ExternalEditor; + +/** + * `editor` type prompt + */ + + +class EditorPrompt extends Prompt { + /** + * Start the Inquiry session + * @param {Function} cb Callback when prompt is done + * @return {this} + */ + + _run(cb) { + this.done = cb; + + this.editorResult = new cjs.Subject(); + + // Open Editor on "line" (Enter Key) + const events = observe(this.rl); + this.lineSubscription = events.line.subscribe(this.startExternalEditor.bind(this)); + const waitUserInput = + this.opt.waitUserInput === undefined ? true : this.opt.waitUserInput; + + // Trigger Validation when editor closes + const validation = this.handleSubmitEvents(this.editorResult); + validation.success.forEach(this.onEnd.bind(this)); + validation.error.forEach(this.onError.bind(this)); + + // Prevents default from being printed on screen (can look weird with multiple lines) + this.currentText = this.opt.default; + this.opt.default = null; + + // Init + if (waitUserInput) { + this.render(); + } else { + this.startExternalEditor(); + } + + return this; + } + + /** + * Render the prompt to screen + * @return {EditorPrompt} self + */ + + render(error) { + let bottomContent = ''; + let message = this.getQuestion(); + + message += + this.status === 'answered' + ? colors$1.dim('Received') + : colors$1.dim('Press to launch your preferred editor.'); + + if (error) { + bottomContent = colors$1.red('>> ') + error; + } + + this.screen.render(message, bottomContent); + } + + /** + * Launch $EDITOR on user press enter + */ + + startExternalEditor() { + // Pause Readline to prevent stdin and stdout from being modified while the editor is showing + this.rl.pause(); + editAsync_1(this.currentText, this.endExternalEditor.bind(this), { + postfix: this.opt.postfix ?? '.txt', + }); + } + + endExternalEditor(error, result) { + this.rl.resume(); + if (error) { + this.editorResult.error(error); + } else { + this.editorResult.next(result); + } + } + + onEnd(state) { + this.editorResult.unsubscribe(); + this.lineSubscription.unsubscribe(); + this.answer = state.value; + this.status = 'answered'; + // Re-render prompt + this.render(); + this.screen.done(); + this.done(this.answer); + } + + onError(state) { + this.render(state.isValid); + } +} + +var Stream = require$$1$2; + +var mute = MuteStream; + +// var out = new MuteStream(process.stdout) +// argument auto-pipes +function MuteStream (opts) { + Stream.apply(this); + opts = opts || {}; + this.writable = this.readable = true; + this.muted = false; + this.on('pipe', this._onpipe); + this.replace = opts.replace; + + // For readline-type situations + // This much at the start of a line being redrawn after a ctrl char + // is seen (such as backspace) won't be redrawn as the replacement + this._prompt = opts.prompt || null; + this._hadControl = false; +} + +MuteStream.prototype = Object.create(Stream.prototype); + +Object.defineProperty(MuteStream.prototype, 'constructor', { + value: MuteStream, + enumerable: false +}); + +MuteStream.prototype.mute = function () { + this.muted = true; +}; + +MuteStream.prototype.unmute = function () { + this.muted = false; +}; + +Object.defineProperty(MuteStream.prototype, '_onpipe', { + value: onPipe, + enumerable: false, + writable: true, + configurable: true +}); + +function onPipe (src) { + this._src = src; +} + +Object.defineProperty(MuteStream.prototype, 'isTTY', { + get: getIsTTY, + set: setIsTTY, + enumerable: true, + configurable: true +}); + +function getIsTTY () { + return( (this._dest) ? this._dest.isTTY + : (this._src) ? this._src.isTTY + : false + ) +} + +// basically just get replace the getter/setter with a regular value +function setIsTTY (isTTY) { + Object.defineProperty(this, 'isTTY', { + value: isTTY, + enumerable: true, + writable: true, + configurable: true + }); +} + +Object.defineProperty(MuteStream.prototype, 'rows', { + get: function () { + return( this._dest ? this._dest.rows + : this._src ? this._src.rows + : undefined ) + }, enumerable: true, configurable: true }); + +Object.defineProperty(MuteStream.prototype, 'columns', { + get: function () { + return( this._dest ? this._dest.columns + : this._src ? this._src.columns + : undefined ) + }, enumerable: true, configurable: true }); + + +MuteStream.prototype.pipe = function (dest, options) { + this._dest = dest; + return Stream.prototype.pipe.call(this, dest, options) +}; + +MuteStream.prototype.pause = function () { + if (this._src) return this._src.pause() +}; + +MuteStream.prototype.resume = function () { + if (this._src) return this._src.resume() +}; + +MuteStream.prototype.write = function (c) { + if (this.muted) { + if (!this.replace) return true + if (c.match(/^\u001b/)) { + if(c.indexOf(this._prompt) === 0) { + c = c.substr(this._prompt.length); + c = c.replace(/./g, this.replace); + c = this._prompt + c; + } + this._hadControl = true; + return this.emit('data', c) + } else { + if (this._prompt && this._hadControl && + c.indexOf(this._prompt) === 0) { + this._hadControl = false; + this.emit('data', this._prompt); + c = c.substr(this._prompt.length); + } + c = c.toString().replace(/./g, this.replace); + } + } + this.emit('data', c); +}; + +MuteStream.prototype.end = function (c) { + if (this.muted) { + if (c && this.replace) { + c = c.toString().replace(/./g, this.replace); + } else { + c = null; + } + } + if (c) this.emit('data', c); + this.emit('end'); +}; + +function proxy (fn) { return function () { + var d = this._dest; + var s = this._src; + if (d && d[fn]) d[fn].apply(d, arguments); + if (s && s[fn]) s[fn].apply(s, arguments); +}} + +MuteStream.prototype.destroy = proxy('destroy'); +MuteStream.prototype.destroySoon = proxy('destroySoon'); +MuteStream.prototype.close = proxy('close'); + +var MuteStream$1 = /*@__PURE__*/getDefaultExportFromCjs(mute); + +/** + * Base interface class other can inherits from + */ + +class UI { + constructor(opt) { + // Instantiate the Readline interface + // @Note: Don't reassign if already present (allow test to override the Stream) + this.rl ||= require$$0$5.createInterface(setupReadlineOptions(opt)); + + this.rl.resume(); + + this.onForceClose = this.onForceClose.bind(this); + + // Make sure new prompt start on a newline when closing + process.on('exit', this.onForceClose); + + // Terminate process on SIGINT (which will call process.on('exit') in return) + this.rl.on('SIGINT', this.onForceClose); + } + + /** + * Handle the ^C exit + * @return {null} + */ + + onForceClose() { + this.close(); + process.kill(process.pid, 'SIGINT'); + console.log(''); + } + + /** + * Close the interface and cleanup listeners + */ + + close() { + // Remove events listeners + this.rl.removeListener('SIGINT', this.onForceClose); + process.removeListener('exit', this.onForceClose); + + this.rl.output.unmute(); + + if (this.activePrompt && typeof this.activePrompt.close === 'function') { + this.activePrompt.close(); + } + + // Close the readline + this.rl.output.end(); + this.rl.pause(); + this.rl.close(); + } +} + +function setupReadlineOptions(opt = {}) { + // Inquirer 8.x: + // opt.skipTTYChecks = opt.skipTTYChecks === undefined ? opt.input !== undefined : opt.skipTTYChecks; + opt.skipTTYChecks = opt.skipTTYChecks === undefined ? true : opt.skipTTYChecks; + + // Default `input` to stdin + const input = opt.input || process.stdin; + + // Check if prompt is being called in TTY environment + // If it isn't return a failed promise + if (!opt.skipTTYChecks && !input.isTTY) { + const nonTtyError = new Error( + 'Prompts can not be meaningfully rendered in non-TTY environments', + ); + nonTtyError.isTtyError = true; + throw nonTtyError; + } + + // Add mute capabilities to the output + const ms = new MuteStream$1(); + ms.pipe(opt.output || process.stdout); + const output = ms; + + return { + terminal: true, + ...opt, + input, + output, + }; +} + +/** + * Sticky bottom bar user interface + */ + + +class BottomBar extends UI { + constructor(opt = {}) { + super(opt); + + this.log = new node_stream.Writable({ + write: (chunk, encoding, cb) => { + this.writeLog(chunk); + cb(); + }, + }); + + this.bottomBar = opt.bottomBar || ''; + this.render(); + } + + /** + * Render the prompt to screen + * @return {BottomBar} self + */ + + render() { + this.write(this.bottomBar); + return this; + } + + clean() { + clearLine(this.rl, this.bottomBar.split('\n').length); + return this; + } + + /** + * Update the bottom bar content and rerender + * @param {String} bottomBar Bottom bar content + * @return {BottomBar} self + */ + + updateBottomBar(bottomBar) { + clearLine(this.rl, 1); + this.rl.output.unmute(); + this.clean(); + this.bottomBar = bottomBar; + this.render(); + this.rl.output.mute(); + return this; + } + + /** + * Write out log data + * @param {String} data - The log data to be output + * @return {BottomBar} self + */ + + writeLog(data) { + this.rl.output.unmute(); + this.clean(); + this.rl.output.write(this.enforceLF(data.toString())); + this.render(); + this.rl.output.mute(); + return this; + } + + /** + * Make sure line end on a line feed + * @param {String} str Input string + * @return {String} The input string with a final line feed + */ + + enforceLF(str) { + return /[\n\r]$/.test(str) ? str : str + '\n'; + } + + /** + * Helper for writing message in Prompt + * @param {String} message - The message to be output + */ + write(message) { + const msgLines = message.split(/\n/); + this.height = msgLines.length; + + // Write message to screen and setPrompt to control backspace + this.rl.setPrompt(msgLines.at(-1)); + + if (this.rl.output.rows === 0 && this.rl.output.columns === 0) { + /* When it's a tty through serial port there's no terminal info and the render will malfunction, + so we need enforce the cursor to locate to the leftmost position for rendering. */ + left(this.rl, message.length + this.rl.line.length); + } + + this.rl.output.write(message); + } +} + +/** + * Resolve a question property value if it is passed as a function. + * This method will overwrite the property on the question object with the received value. + * @param {Object} question - Question object + * @param {String} prop - Property to fetch name + * @param {Object} answers - Answers object + * @return {Rx.Observable} - Observable emitting once value is known + */ + +const fetchAsyncQuestionProperty = function (question, prop, answers) { + if (typeof question[prop] !== 'function') { + return cjs.of(question); + } + + return cjs.from( + runAsync$1(question[prop])(answers).then((value) => { + question[prop] = value; + return question; + }), + ); +}; + +const _ = { + set: (obj, path = '', value) => { + let pointer = obj; + path.split('.').forEach((key, index, arr) => { + if (key === '__proto__' || key === 'constructor') return; + + if (index === arr.length - 1) { + pointer[key] = value; + } else if (!(key in pointer)) { + pointer[key] = {}; + } + + pointer = pointer[key]; + }); + }, + get: (obj, path = '', defaultValue) => { + const travel = (regexp) => + String.prototype.split + .call(path, regexp) + .filter(Boolean) + .reduce((res, key) => (res !== null && res !== undefined ? res[key] : res), obj); + const result = travel(/[,[\]]+?/) || travel(/[,.[\]]+?/); + return result === undefined || result === obj ? defaultValue : result; + }, +}; + +/** + * Base interface class other can inherits from + */ +class PromptUI extends UI { + constructor(prompts, opt) { + super(opt); + this.prompts = prompts; + } + + run(questions, answers) { + // Keep global reference to the answers + this.answers = typeof answers === 'object' ? { ...answers } : {}; + + let obs; + if (Array.isArray(questions)) { + obs = cjs.from(questions); + } else if (cjs.isObservable(questions)) { + obs = questions; + } else if ( + Object.values(questions).every( + (maybeQuestion) => + typeof maybeQuestion === 'object' && + !Array.isArray(maybeQuestion) && + maybeQuestion != null, + ) + ) { + // Case: Called with a set of { name: question } + obs = cjs.from( + Object.entries(questions).map(([name, question]) => ({ + name, + ...question, + })), + ); + } else { + // Case: Called with a single question config + obs = cjs.from([questions]); + } + + this.process = obs.pipe( + cjs.concatMap(this.processQuestion.bind(this)), + cjs.publish(), // Creates a hot Observable. It prevents duplicating prompts. + ); + + this.process.connect(); + + return this.process + .pipe( + cjs.reduce((answersObj, answer) => { + _.set(answersObj, answer.name, answer.answer); + return answersObj; + }, this.answers), + ) + .toPromise(Promise) + .then(this.onCompletion.bind(this), this.onError.bind(this)); + } + + /** + * Once all prompt are over + */ + onCompletion() { + this.close(); + + return this.answers; + } + + onError(error) { + this.close(); + return Promise.reject(error); + } + + processQuestion(question) { + question = { ...question }; + return cjs.defer(() => { + const obs = cjs.of(question); + + return obs.pipe( + cjs.concatMap(this.setDefaultType.bind(this)), + cjs.concatMap(this.filterIfRunnable.bind(this)), + cjs.concatMap(() => + fetchAsyncQuestionProperty(question, 'message', this.answers), + ), + cjs.concatMap(() => + fetchAsyncQuestionProperty(question, 'default', this.answers), + ), + cjs.concatMap(() => + fetchAsyncQuestionProperty(question, 'choices', this.answers), + ), + cjs.concatMap(this.fetchAnswer.bind(this)), + ); + }); + } + + fetchAnswer(question) { + const Prompt = this.prompts[question.type]; + this.activePrompt = new Prompt(question, this.rl, this.answers); + return cjs.defer(() => + cjs.from(this.activePrompt.run().then((answer) => ({ name: question.name, answer }))), + ); + } + + setDefaultType(question) { + // Default type to input + if (!this.prompts[question.type]) { + question.type = 'input'; + } + + return cjs.defer(() => cjs.of(question)); + } + + filterIfRunnable(question) { + if ( + question.askAnswered !== true && + _.get(this.answers, question.name) !== undefined + ) { + return cjs.EMPTY; + } + + if (question.when === false) { + return cjs.EMPTY; + } + + if (typeof question.when !== 'function') { + return cjs.of(question); + } + + const { answers } = this; + return cjs.defer(() => + cjs.from( + runAsync$1(question.when)(answers).then((shouldRun) => { + if (shouldRun) { + return question; + } + }), + ).pipe(cjs.filter((val) => val != null)), + ); + } +} + +/** + * Inquirer.js + * A collection of common interactive command line user interfaces. + */ + + +/** + * Create a new self-contained prompt module. + */ +function createPromptModule(opt) { + const promptModule = function (questions, answers) { + let uiInstance; + try { + uiInstance = new PromptUI(promptModule.prompts, opt); + } catch (error) { + return Promise.reject(error); + } + const promise = uiInstance.run(questions, answers); + + // Monkey patch the UI on the promise object so + // that it remains publicly accessible. + promise.ui = uiInstance; + + return promise; + }; + + promptModule.prompts = {}; + + /** + * Register a prompt type + * @param {String} name Prompt type name + * @param {Function} prompt Prompt constructor + * @return {inquirer} + */ + + promptModule.registerPrompt = function (name, prompt) { + promptModule.prompts[name] = prompt; + return this; + }; + + /** + * Register the defaults provider prompts + */ + + promptModule.restoreDefaultPrompts = function () { + this.registerPrompt('list', ListPrompt); + this.registerPrompt('input', InputPrompt); + this.registerPrompt('number', NumberPrompt); + this.registerPrompt('confirm', ConfirmPrompt); + this.registerPrompt('rawlist', RawListPrompt); + this.registerPrompt('expand', ExpandPrompt); + this.registerPrompt('checkbox', CheckboxPrompt); + this.registerPrompt('password', PasswordPrompt); + this.registerPrompt('editor', EditorPrompt); + }; + + promptModule.restoreDefaultPrompts(); + + return promptModule; +} + +/** + * Public CLI helper interface + * @param {Array|Object|Rx.Observable} questions - Questions settings array + * @param {Function} cb - Callback being passed the user answers + * @return {ui.Prompt} + */ + +const prompt = createPromptModule(); + +// Expose helper functions on the top level for easiest usage by common users +function registerPrompt(name, newPrompt) { + prompt.registerPrompt(name, newPrompt); +} + +function restoreDefaultPrompts() { + prompt.restoreDefaultPrompts(); +} + +const inquirer = { + prompt, + ui: { + BottomBar, + Prompt: PromptUI, + }, + createPromptModule, + registerPrompt, + restoreDefaultPrompts, + Separator, +}; + +const debug$6 = debugFactory('spawn'); +function spawn(command, options = {}) { + const [cmd, ...args] = command.split(' ').map((s) => s.trim()); + debug$6(`execute ${cmd} ${args.join(' ')}`); + return new Promise((resolve, reject) => { + var _a; + const spawnStream = require$$1$1.spawn(cmd, args, Object.assign(Object.assign({}, options), { shell: true })); + const chunks = []; + process.stdin.pipe(spawnStream.stdin); + (_a = spawnStream.stdout) === null || _a === void 0 ? void 0 : _a.on('data', (chunk) => { + chunks.push(chunk); + }); + spawnStream.stdout.pipe(process.stdout); + spawnStream.stderr.pipe(process.stderr); + spawnStream.on('close', (code) => { + if (code !== 0) { + reject(); + } + else { + resolve(Buffer.concat(chunks)); + } + }); + }); +} + +const createCargoContent = (name) => `[package] +edition = "2021" +name = "${name.replace('@', '').replace('/', '_').toLowerCase()}" +version = "0.0.0" + +[lib] +crate-type = ["cdylib"] + +[dependencies] +# Default enable napi4 feature, see https://nodejs.org/api/n-api.html#node-api-version-matrix +napi = { version = "2.12.2", default-features = false, features = ["napi4"] } +napi-derive = "2.12.2" + +[build-dependencies] +napi-build = "2.0.1" + +[profile.release] +lto = true +strip = "symbols" +`; + +const createCargoConfig = (enableLinuxArm8Musl, enableWindowsX64) => { + const result = []; + if (enableLinuxArm8Musl) { + result.push(`[target.aarch64-unknown-linux-musl] +linker = "aarch64-linux-musl-gcc" +rustflags = ["-C", "target-feature=-crt-static"]`); + } + if (enableWindowsX64) { + result.push(`[target.x86_64-pc-windows-msvc] +rustflags = ["-C", "target-feature=+crt-static"]`); + } + return result.join('\n'); +}; + +/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */ +function isNothing(subject) { + return (typeof subject === 'undefined') || (subject === null); +} + + +function isObject(subject) { + return (typeof subject === 'object') && (subject !== null); +} + + +function toArray(sequence) { + if (Array.isArray(sequence)) return sequence; + else if (isNothing(sequence)) return []; + + return [ sequence ]; +} + + +function extend(target, source) { + var index, length, key, sourceKeys; + + if (source) { + sourceKeys = Object.keys(source); + + for (index = 0, length = sourceKeys.length; index < length; index += 1) { + key = sourceKeys[index]; + target[key] = source[key]; + } + } + + return target; +} + + +function repeat(string, count) { + var result = '', cycle; + + for (cycle = 0; cycle < count; cycle += 1) { + result += string; + } + + return result; +} + + +function isNegativeZero(number) { + return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number); +} + + +var isNothing_1 = isNothing; +var isObject_1 = isObject; +var toArray_1 = toArray; +var repeat_1 = repeat; +var isNegativeZero_1 = isNegativeZero; +var extend_1 = extend; + +var common = { + isNothing: isNothing_1, + isObject: isObject_1, + toArray: toArray_1, + repeat: repeat_1, + isNegativeZero: isNegativeZero_1, + extend: extend_1 +}; + +// YAML error class. http://stackoverflow.com/questions/8458984 + + +function formatError(exception, compact) { + var where = '', message = exception.reason || '(unknown reason)'; + + if (!exception.mark) return message; + + if (exception.mark.name) { + where += 'in "' + exception.mark.name + '" '; + } + + where += '(' + (exception.mark.line + 1) + ':' + (exception.mark.column + 1) + ')'; + + if (!compact && exception.mark.snippet) { + where += '\n\n' + exception.mark.snippet; + } + + return message + ' ' + where; +} + + +function YAMLException$1(reason, mark) { + // Super constructor + Error.call(this); + + this.name = 'YAMLException'; + this.reason = reason; + this.mark = mark; + this.message = formatError(this, false); + + // Include stack trace in error object + if (Error.captureStackTrace) { + // Chrome and NodeJS + Error.captureStackTrace(this, this.constructor); + } else { + // FF, IE 10+ and Safari 6+. Fallback for others + this.stack = (new Error()).stack || ''; + } +} + + +// Inherit from Error +YAMLException$1.prototype = Object.create(Error.prototype); +YAMLException$1.prototype.constructor = YAMLException$1; + + +YAMLException$1.prototype.toString = function toString(compact) { + return this.name + ': ' + formatError(this, compact); +}; + + +var exception = YAMLException$1; + +// get snippet for a single line, respecting maxLength +function getLine(buffer, lineStart, lineEnd, position, maxLineLength) { + var head = ''; + var tail = ''; + var maxHalfLength = Math.floor(maxLineLength / 2) - 1; + + if (position - lineStart > maxHalfLength) { + head = ' ... '; + lineStart = position - maxHalfLength + head.length; + } + + if (lineEnd - position > maxHalfLength) { + tail = ' ...'; + lineEnd = position + maxHalfLength - tail.length; + } + + return { + str: head + buffer.slice(lineStart, lineEnd).replace(/\t/g, '→') + tail, + pos: position - lineStart + head.length // relative position + }; +} + + +function padStart(string, max) { + return common.repeat(' ', max - string.length) + string; +} + + +function makeSnippet(mark, options) { + options = Object.create(options || null); + + if (!mark.buffer) return null; + + if (!options.maxLength) options.maxLength = 79; + if (typeof options.indent !== 'number') options.indent = 1; + if (typeof options.linesBefore !== 'number') options.linesBefore = 3; + if (typeof options.linesAfter !== 'number') options.linesAfter = 2; + + var re = /\r?\n|\r|\0/g; + var lineStarts = [ 0 ]; + var lineEnds = []; + var match; + var foundLineNo = -1; + + while ((match = re.exec(mark.buffer))) { + lineEnds.push(match.index); + lineStarts.push(match.index + match[0].length); + + if (mark.position <= match.index && foundLineNo < 0) { + foundLineNo = lineStarts.length - 2; + } + } + + if (foundLineNo < 0) foundLineNo = lineStarts.length - 1; + + var result = '', i, line; + var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length; + var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3); + + for (i = 1; i <= options.linesBefore; i++) { + if (foundLineNo - i < 0) break; + line = getLine( + mark.buffer, + lineStarts[foundLineNo - i], + lineEnds[foundLineNo - i], + mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]), + maxLineLength + ); + result = common.repeat(' ', options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n' + result; + } + + line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength); + result += common.repeat(' ', options.indent) + padStart((mark.line + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n'; + result += common.repeat('-', options.indent + lineNoLength + 3 + line.pos) + '^' + '\n'; + + for (i = 1; i <= options.linesAfter; i++) { + if (foundLineNo + i >= lineEnds.length) break; + line = getLine( + mark.buffer, + lineStarts[foundLineNo + i], + lineEnds[foundLineNo + i], + mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]), + maxLineLength + ); + result += common.repeat(' ', options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n'; + } + + return result.replace(/\n$/, ''); +} + + +var snippet = makeSnippet; + +var TYPE_CONSTRUCTOR_OPTIONS = [ + 'kind', + 'multi', + 'resolve', + 'construct', + 'instanceOf', + 'predicate', + 'represent', + 'representName', + 'defaultStyle', + 'styleAliases' +]; + +var YAML_NODE_KINDS = [ + 'scalar', + 'sequence', + 'mapping' +]; + +function compileStyleAliases(map) { + var result = {}; + + if (map !== null) { + Object.keys(map).forEach(function (style) { + map[style].forEach(function (alias) { + result[String(alias)] = style; + }); + }); + } + + return result; +} + +function Type$1(tag, options) { + options = options || {}; + + Object.keys(options).forEach(function (name) { + if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { + throw new exception('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); + } + }); + + // TODO: Add tag format check. + this.options = options; // keep original options in case user wants to extend this type later + this.tag = tag; + this.kind = options['kind'] || null; + this.resolve = options['resolve'] || function () { return true; }; + this.construct = options['construct'] || function (data) { return data; }; + this.instanceOf = options['instanceOf'] || null; + this.predicate = options['predicate'] || null; + this.represent = options['represent'] || null; + this.representName = options['representName'] || null; + this.defaultStyle = options['defaultStyle'] || null; + this.multi = options['multi'] || false; + this.styleAliases = compileStyleAliases(options['styleAliases'] || null); + + if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { + throw new exception('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); + } +} + +var type = Type$1; + +/*eslint-disable max-len*/ + + + + + +function compileList(schema, name) { + var result = []; + + schema[name].forEach(function (currentType) { + var newIndex = result.length; + + result.forEach(function (previousType, previousIndex) { + if (previousType.tag === currentType.tag && + previousType.kind === currentType.kind && + previousType.multi === currentType.multi) { + + newIndex = previousIndex; + } + }); + + result[newIndex] = currentType; + }); + + return result; +} + + +function compileMap(/* lists... */) { + var result = { + scalar: {}, + sequence: {}, + mapping: {}, + fallback: {}, + multi: { + scalar: [], + sequence: [], + mapping: [], + fallback: [] + } + }, index, length; + + function collectType(type) { + if (type.multi) { + result.multi[type.kind].push(type); + result.multi['fallback'].push(type); + } else { + result[type.kind][type.tag] = result['fallback'][type.tag] = type; + } + } + + for (index = 0, length = arguments.length; index < length; index += 1) { + arguments[index].forEach(collectType); + } + return result; +} + + +function Schema$1(definition) { + return this.extend(definition); +} + + +Schema$1.prototype.extend = function extend(definition) { + var implicit = []; + var explicit = []; + + if (definition instanceof type) { + // Schema.extend(type) + explicit.push(definition); + + } else if (Array.isArray(definition)) { + // Schema.extend([ type1, type2, ... ]) + explicit = explicit.concat(definition); + + } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) { + // Schema.extend({ explicit: [ type1, type2, ... ], implicit: [ type1, type2, ... ] }) + if (definition.implicit) implicit = implicit.concat(definition.implicit); + if (definition.explicit) explicit = explicit.concat(definition.explicit); + + } else { + throw new exception('Schema.extend argument should be a Type, [ Type ], ' + + 'or a schema definition ({ implicit: [...], explicit: [...] })'); + } + + implicit.forEach(function (type$1) { + if (!(type$1 instanceof type)) { + throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + } + + if (type$1.loadKind && type$1.loadKind !== 'scalar') { + throw new exception('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); + } + + if (type$1.multi) { + throw new exception('There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.'); + } + }); + + explicit.forEach(function (type$1) { + if (!(type$1 instanceof type)) { + throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + } + }); + + var result = Object.create(Schema$1.prototype); + + result.implicit = (this.implicit || []).concat(implicit); + result.explicit = (this.explicit || []).concat(explicit); + + result.compiledImplicit = compileList(result, 'implicit'); + result.compiledExplicit = compileList(result, 'explicit'); + result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit); + + return result; +}; + + +var schema = Schema$1; + +var str = new type('tag:yaml.org,2002:str', { + kind: 'scalar', + construct: function (data) { return data !== null ? data : ''; } +}); + +var seq = new type('tag:yaml.org,2002:seq', { + kind: 'sequence', + construct: function (data) { return data !== null ? data : []; } +}); + +var map = new type('tag:yaml.org,2002:map', { + kind: 'mapping', + construct: function (data) { return data !== null ? data : {}; } +}); + +var failsafe = new schema({ + explicit: [ + str, + seq, + map + ] +}); + +function resolveYamlNull(data) { + if (data === null) return true; + + var max = data.length; + + return (max === 1 && data === '~') || + (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL')); +} + +function constructYamlNull() { + return null; +} + +function isNull(object) { + return object === null; +} + +var _null = new type('tag:yaml.org,2002:null', { + kind: 'scalar', + resolve: resolveYamlNull, + construct: constructYamlNull, + predicate: isNull, + represent: { + canonical: function () { return '~'; }, + lowercase: function () { return 'null'; }, + uppercase: function () { return 'NULL'; }, + camelcase: function () { return 'Null'; }, + empty: function () { return ''; } + }, + defaultStyle: 'lowercase' +}); + +function resolveYamlBoolean(data) { + if (data === null) return false; + + var max = data.length; + + return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) || + (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE')); +} + +function constructYamlBoolean(data) { + return data === 'true' || + data === 'True' || + data === 'TRUE'; +} + +function isBoolean(object) { + return Object.prototype.toString.call(object) === '[object Boolean]'; +} + +var bool = new type('tag:yaml.org,2002:bool', { + kind: 'scalar', + resolve: resolveYamlBoolean, + construct: constructYamlBoolean, + predicate: isBoolean, + represent: { + lowercase: function (object) { return object ? 'true' : 'false'; }, + uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; }, + camelcase: function (object) { return object ? 'True' : 'False'; } + }, + defaultStyle: 'lowercase' +}); + +function isHexCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) || + ((0x41/* A */ <= c) && (c <= 0x46/* F */)) || + ((0x61/* a */ <= c) && (c <= 0x66/* f */)); +} + +function isOctCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */)); +} + +function isDecCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)); +} + +function resolveYamlInteger(data) { + if (data === null) return false; + + var max = data.length, + index = 0, + hasDigits = false, + ch; + + if (!max) return false; + + ch = data[index]; + + // sign + if (ch === '-' || ch === '+') { + ch = data[++index]; + } + + if (ch === '0') { + // 0 + if (index + 1 === max) return true; + ch = data[++index]; + + // base 2, base 8, base 16 + + if (ch === 'b') { + // base 2 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (ch !== '0' && ch !== '1') return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + + + if (ch === 'x') { + // base 16 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isHexCode(data.charCodeAt(index))) return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + + + if (ch === 'o') { + // base 8 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isOctCode(data.charCodeAt(index))) return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + } + + // base 10 (except 0) + + // value should not start with `_`; + if (ch === '_') return false; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isDecCode(data.charCodeAt(index))) { + return false; + } + hasDigits = true; + } + + // Should have digits and should not end with `_` + if (!hasDigits || ch === '_') return false; + + return true; +} + +function constructYamlInteger(data) { + var value = data, sign = 1, ch; + + if (value.indexOf('_') !== -1) { + value = value.replace(/_/g, ''); + } + + ch = value[0]; + + if (ch === '-' || ch === '+') { + if (ch === '-') sign = -1; + value = value.slice(1); + ch = value[0]; + } + + if (value === '0') return 0; + + if (ch === '0') { + if (value[1] === 'b') return sign * parseInt(value.slice(2), 2); + if (value[1] === 'x') return sign * parseInt(value.slice(2), 16); + if (value[1] === 'o') return sign * parseInt(value.slice(2), 8); + } + + return sign * parseInt(value, 10); +} + +function isInteger(object) { + return (Object.prototype.toString.call(object)) === '[object Number]' && + (object % 1 === 0 && !common.isNegativeZero(object)); +} + +var int = new type('tag:yaml.org,2002:int', { + kind: 'scalar', + resolve: resolveYamlInteger, + construct: constructYamlInteger, + predicate: isInteger, + represent: { + binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); }, + octal: function (obj) { return obj >= 0 ? '0o' + obj.toString(8) : '-0o' + obj.toString(8).slice(1); }, + decimal: function (obj) { return obj.toString(10); }, + /* eslint-disable max-len */ + hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); } + }, + defaultStyle: 'decimal', + styleAliases: { + binary: [ 2, 'bin' ], + octal: [ 8, 'oct' ], + decimal: [ 10, 'dec' ], + hexadecimal: [ 16, 'hex' ] + } +}); + +var YAML_FLOAT_PATTERN = new RegExp( + // 2.5e4, 2.5 and integers + '^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' + + // .2e4, .2 + // special case, seems not from spec + '|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' + + // .inf + '|[-+]?\\.(?:inf|Inf|INF)' + + // .nan + '|\\.(?:nan|NaN|NAN))$'); + +function resolveYamlFloat(data) { + if (data === null) return false; + + if (!YAML_FLOAT_PATTERN.test(data) || + // Quick hack to not allow integers end with `_` + // Probably should update regexp & check speed + data[data.length - 1] === '_') { + return false; + } + + return true; +} + +function constructYamlFloat(data) { + var value, sign; + + value = data.replace(/_/g, '').toLowerCase(); + sign = value[0] === '-' ? -1 : 1; + + if ('+-'.indexOf(value[0]) >= 0) { + value = value.slice(1); + } + + if (value === '.inf') { + return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; + + } else if (value === '.nan') { + return NaN; + } + return sign * parseFloat(value, 10); +} + + +var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/; + +function representYamlFloat(object, style) { + var res; + + if (isNaN(object)) { + switch (style) { + case 'lowercase': return '.nan'; + case 'uppercase': return '.NAN'; + case 'camelcase': return '.NaN'; + } + } else if (Number.POSITIVE_INFINITY === object) { + switch (style) { + case 'lowercase': return '.inf'; + case 'uppercase': return '.INF'; + case 'camelcase': return '.Inf'; + } + } else if (Number.NEGATIVE_INFINITY === object) { + switch (style) { + case 'lowercase': return '-.inf'; + case 'uppercase': return '-.INF'; + case 'camelcase': return '-.Inf'; + } + } else if (common.isNegativeZero(object)) { + return '-0.0'; + } + + res = object.toString(10); + + // JS stringifier can build scientific format without dots: 5e-100, + // while YAML requres dot: 5.e-100. Fix it with simple hack + + return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res; +} + +function isFloat(object) { + return (Object.prototype.toString.call(object) === '[object Number]') && + (object % 1 !== 0 || common.isNegativeZero(object)); +} + +var float = new type('tag:yaml.org,2002:float', { + kind: 'scalar', + resolve: resolveYamlFloat, + construct: constructYamlFloat, + predicate: isFloat, + represent: representYamlFloat, + defaultStyle: 'lowercase' +}); + +var json = failsafe.extend({ + implicit: [ + _null, + bool, + int, + float + ] +}); + +var core = json; + +var YAML_DATE_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9])' + // [2] month + '-([0-9][0-9])$'); // [3] day + +var YAML_TIMESTAMP_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9]?)' + // [2] month + '-([0-9][0-9]?)' + // [3] day + '(?:[Tt]|[ \\t]+)' + // ... + '([0-9][0-9]?)' + // [4] hour + ':([0-9][0-9])' + // [5] minute + ':([0-9][0-9])' + // [6] second + '(?:\\.([0-9]*))?' + // [7] fraction + '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour + '(?::([0-9][0-9]))?))?$'); // [11] tz_minute + +function resolveYamlTimestamp(data) { + if (data === null) return false; + if (YAML_DATE_REGEXP.exec(data) !== null) return true; + if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true; + return false; +} + +function constructYamlTimestamp(data) { + var match, year, month, day, hour, minute, second, fraction = 0, + delta = null, tz_hour, tz_minute, date; + + match = YAML_DATE_REGEXP.exec(data); + if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data); + + if (match === null) throw new Error('Date resolve error'); + + // match: [1] year [2] month [3] day + + year = +(match[1]); + month = +(match[2]) - 1; // JS month starts with 0 + day = +(match[3]); + + if (!match[4]) { // no hour + return new Date(Date.UTC(year, month, day)); + } + + // match: [4] hour [5] minute [6] second [7] fraction + + hour = +(match[4]); + minute = +(match[5]); + second = +(match[6]); + + if (match[7]) { + fraction = match[7].slice(0, 3); + while (fraction.length < 3) { // milli-seconds + fraction += '0'; + } + fraction = +fraction; + } + + // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute + + if (match[9]) { + tz_hour = +(match[10]); + tz_minute = +(match[11] || 0); + delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds + if (match[9] === '-') delta = -delta; + } + + date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); + + if (delta) date.setTime(date.getTime() - delta); + + return date; +} + +function representYamlTimestamp(object /*, style*/) { + return object.toISOString(); +} + +var timestamp = new type('tag:yaml.org,2002:timestamp', { + kind: 'scalar', + resolve: resolveYamlTimestamp, + construct: constructYamlTimestamp, + instanceOf: Date, + represent: representYamlTimestamp +}); + +function resolveYamlMerge(data) { + return data === '<<' || data === null; +} + +var merge$1 = new type('tag:yaml.org,2002:merge', { + kind: 'scalar', + resolve: resolveYamlMerge +}); + +/*eslint-disable no-bitwise*/ + + + + + +// [ 64, 65, 66 ] -> [ padding, CR, LF ] +var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r'; + + +function resolveYamlBinary(data) { + if (data === null) return false; + + var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP; + + // Convert one by one. + for (idx = 0; idx < max; idx++) { + code = map.indexOf(data.charAt(idx)); + + // Skip CR/LF + if (code > 64) continue; + + // Fail on illegal characters + if (code < 0) return false; + + bitlen += 6; + } + + // If there are any bits left, source was corrupted + return (bitlen % 8) === 0; +} + +function constructYamlBinary(data) { + var idx, tailbits, + input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan + max = input.length, + map = BASE64_MAP, + bits = 0, + result = []; + + // Collect by 6*4 bits (3 bytes) + + for (idx = 0; idx < max; idx++) { + if ((idx % 4 === 0) && idx) { + result.push((bits >> 16) & 0xFF); + result.push((bits >> 8) & 0xFF); + result.push(bits & 0xFF); + } + + bits = (bits << 6) | map.indexOf(input.charAt(idx)); + } + + // Dump tail + + tailbits = (max % 4) * 6; + + if (tailbits === 0) { + result.push((bits >> 16) & 0xFF); + result.push((bits >> 8) & 0xFF); + result.push(bits & 0xFF); + } else if (tailbits === 18) { + result.push((bits >> 10) & 0xFF); + result.push((bits >> 2) & 0xFF); + } else if (tailbits === 12) { + result.push((bits >> 4) & 0xFF); + } + + return new Uint8Array(result); +} + +function representYamlBinary(object /*, style*/) { + var result = '', bits = 0, idx, tail, + max = object.length, + map = BASE64_MAP; + + // Convert every three bytes to 4 ASCII characters. + + for (idx = 0; idx < max; idx++) { + if ((idx % 3 === 0) && idx) { + result += map[(bits >> 18) & 0x3F]; + result += map[(bits >> 12) & 0x3F]; + result += map[(bits >> 6) & 0x3F]; + result += map[bits & 0x3F]; + } + + bits = (bits << 8) + object[idx]; + } + + // Dump tail + + tail = max % 3; + + if (tail === 0) { + result += map[(bits >> 18) & 0x3F]; + result += map[(bits >> 12) & 0x3F]; + result += map[(bits >> 6) & 0x3F]; + result += map[bits & 0x3F]; + } else if (tail === 2) { + result += map[(bits >> 10) & 0x3F]; + result += map[(bits >> 4) & 0x3F]; + result += map[(bits << 2) & 0x3F]; + result += map[64]; + } else if (tail === 1) { + result += map[(bits >> 2) & 0x3F]; + result += map[(bits << 4) & 0x3F]; + result += map[64]; + result += map[64]; + } + + return result; +} + +function isBinary(obj) { + return Object.prototype.toString.call(obj) === '[object Uint8Array]'; +} + +var binary = new type('tag:yaml.org,2002:binary', { + kind: 'scalar', + resolve: resolveYamlBinary, + construct: constructYamlBinary, + predicate: isBinary, + represent: representYamlBinary +}); + +var _hasOwnProperty$3 = Object.prototype.hasOwnProperty; +var _toString$2 = Object.prototype.toString; + +function resolveYamlOmap(data) { + if (data === null) return true; + + var objectKeys = [], index, length, pair, pairKey, pairHasKey, + object = data; + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + pairHasKey = false; + + if (_toString$2.call(pair) !== '[object Object]') return false; + + for (pairKey in pair) { + if (_hasOwnProperty$3.call(pair, pairKey)) { + if (!pairHasKey) pairHasKey = true; + else return false; + } + } + + if (!pairHasKey) return false; + + if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey); + else return false; + } + + return true; +} + +function constructYamlOmap(data) { + return data !== null ? data : []; +} + +var omap = new type('tag:yaml.org,2002:omap', { + kind: 'sequence', + resolve: resolveYamlOmap, + construct: constructYamlOmap +}); + +var _toString$1 = Object.prototype.toString; + +function resolveYamlPairs(data) { + if (data === null) return true; + + var index, length, pair, keys, result, + object = data; + + result = new Array(object.length); + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + + if (_toString$1.call(pair) !== '[object Object]') return false; + + keys = Object.keys(pair); + + if (keys.length !== 1) return false; + + result[index] = [ keys[0], pair[keys[0]] ]; + } + + return true; +} + +function constructYamlPairs(data) { + if (data === null) return []; + + var index, length, pair, keys, result, + object = data; + + result = new Array(object.length); + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + + keys = Object.keys(pair); + + result[index] = [ keys[0], pair[keys[0]] ]; + } + + return result; +} + +var pairs = new type('tag:yaml.org,2002:pairs', { + kind: 'sequence', + resolve: resolveYamlPairs, + construct: constructYamlPairs +}); + +var _hasOwnProperty$2 = Object.prototype.hasOwnProperty; + +function resolveYamlSet(data) { + if (data === null) return true; + + var key, object = data; + + for (key in object) { + if (_hasOwnProperty$2.call(object, key)) { + if (object[key] !== null) return false; + } + } + + return true; +} + +function constructYamlSet(data) { + return data !== null ? data : {}; +} + +var set = new type('tag:yaml.org,2002:set', { + kind: 'mapping', + resolve: resolveYamlSet, + construct: constructYamlSet +}); + +var _default = core.extend({ + implicit: [ + timestamp, + merge$1 + ], + explicit: [ + binary, + omap, + pairs, + set + ] +}); + +/*eslint-disable max-len,no-use-before-define*/ + + + + + + + +var _hasOwnProperty$1 = Object.prototype.hasOwnProperty; + + +var CONTEXT_FLOW_IN = 1; +var CONTEXT_FLOW_OUT = 2; +var CONTEXT_BLOCK_IN = 3; +var CONTEXT_BLOCK_OUT = 4; + + +var CHOMPING_CLIP = 1; +var CHOMPING_STRIP = 2; +var CHOMPING_KEEP = 3; + + +var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; +var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; +var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/; +var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i; +var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; + + +function _class(obj) { return Object.prototype.toString.call(obj); } + +function is_EOL(c) { + return (c === 0x0A/* LF */) || (c === 0x0D/* CR */); +} + +function is_WHITE_SPACE(c) { + return (c === 0x09/* Tab */) || (c === 0x20/* Space */); +} + +function is_WS_OR_EOL(c) { + return (c === 0x09/* Tab */) || + (c === 0x20/* Space */) || + (c === 0x0A/* LF */) || + (c === 0x0D/* CR */); +} + +function is_FLOW_INDICATOR(c) { + return c === 0x2C/* , */ || + c === 0x5B/* [ */ || + c === 0x5D/* ] */ || + c === 0x7B/* { */ || + c === 0x7D/* } */; +} + +function fromHexCode(c) { + var lc; + + if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { + return c - 0x30; + } + + /*eslint-disable no-bitwise*/ + lc = c | 0x20; + + if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) { + return lc - 0x61 + 10; + } + + return -1; +} + +function escapedHexLen(c) { + if (c === 0x78/* x */) { return 2; } + if (c === 0x75/* u */) { return 4; } + if (c === 0x55/* U */) { return 8; } + return 0; +} + +function fromDecimalCode(c) { + if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { + return c - 0x30; + } + + return -1; +} + +function simpleEscapeSequence(c) { + /* eslint-disable indent */ + return (c === 0x30/* 0 */) ? '\x00' : + (c === 0x61/* a */) ? '\x07' : + (c === 0x62/* b */) ? '\x08' : + (c === 0x74/* t */) ? '\x09' : + (c === 0x09/* Tab */) ? '\x09' : + (c === 0x6E/* n */) ? '\x0A' : + (c === 0x76/* v */) ? '\x0B' : + (c === 0x66/* f */) ? '\x0C' : + (c === 0x72/* r */) ? '\x0D' : + (c === 0x65/* e */) ? '\x1B' : + (c === 0x20/* Space */) ? ' ' : + (c === 0x22/* " */) ? '\x22' : + (c === 0x2F/* / */) ? '/' : + (c === 0x5C/* \ */) ? '\x5C' : + (c === 0x4E/* N */) ? '\x85' : + (c === 0x5F/* _ */) ? '\xA0' : + (c === 0x4C/* L */) ? '\u2028' : + (c === 0x50/* P */) ? '\u2029' : ''; +} + +function charFromCodepoint(c) { + if (c <= 0xFFFF) { + return String.fromCharCode(c); + } + // Encode UTF-16 surrogate pair + // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF + return String.fromCharCode( + ((c - 0x010000) >> 10) + 0xD800, + ((c - 0x010000) & 0x03FF) + 0xDC00 + ); +} + +var simpleEscapeCheck = new Array(256); // integer, for fast access +var simpleEscapeMap = new Array(256); +for (var i = 0; i < 256; i++) { + simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; + simpleEscapeMap[i] = simpleEscapeSequence(i); +} + + +function State$1(input, options) { + this.input = input; + + this.filename = options['filename'] || null; + this.schema = options['schema'] || _default; + this.onWarning = options['onWarning'] || null; + // (Hidden) Remove? makes the loader to expect YAML 1.1 documents + // if such documents have no explicit %YAML directive + this.legacy = options['legacy'] || false; + + this.json = options['json'] || false; + this.listener = options['listener'] || null; + + this.implicitTypes = this.schema.compiledImplicit; + this.typeMap = this.schema.compiledTypeMap; + + this.length = input.length; + this.position = 0; + this.line = 0; + this.lineStart = 0; + this.lineIndent = 0; + + // position of first leading tab in the current line, + // used to make sure there are no tabs in the indentation + this.firstTabInLine = -1; + + this.documents = []; + + /* + this.version; + this.checkLineBreaks; + this.tagMap; + this.anchorMap; + this.tag; + this.anchor; + this.kind; + this.result;*/ + +} + + +function generateError(state, message) { + var mark = { + name: state.filename, + buffer: state.input.slice(0, -1), // omit trailing \0 + position: state.position, + line: state.line, + column: state.position - state.lineStart + }; + + mark.snippet = snippet(mark); + + return new exception(message, mark); +} + +function throwError(state, message) { + throw generateError(state, message); +} + +function throwWarning(state, message) { + if (state.onWarning) { + state.onWarning.call(null, generateError(state, message)); + } +} + + +var directiveHandlers = { + + YAML: function handleYamlDirective(state, name, args) { + + var match, major, minor; + + if (state.version !== null) { + throwError(state, 'duplication of %YAML directive'); + } + + if (args.length !== 1) { + throwError(state, 'YAML directive accepts exactly one argument'); + } + + match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); + + if (match === null) { + throwError(state, 'ill-formed argument of the YAML directive'); + } + + major = parseInt(match[1], 10); + minor = parseInt(match[2], 10); + + if (major !== 1) { + throwError(state, 'unacceptable YAML version of the document'); + } + + state.version = args[0]; + state.checkLineBreaks = (minor < 2); + + if (minor !== 1 && minor !== 2) { + throwWarning(state, 'unsupported YAML version of the document'); + } + }, + + TAG: function handleTagDirective(state, name, args) { + + var handle, prefix; + + if (args.length !== 2) { + throwError(state, 'TAG directive accepts exactly two arguments'); + } + + handle = args[0]; + prefix = args[1]; + + if (!PATTERN_TAG_HANDLE.test(handle)) { + throwError(state, 'ill-formed tag handle (first argument) of the TAG directive'); + } + + if (_hasOwnProperty$1.call(state.tagMap, handle)) { + throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle'); + } + + if (!PATTERN_TAG_URI.test(prefix)) { + throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive'); + } + + try { + prefix = decodeURIComponent(prefix); + } catch (err) { + throwError(state, 'tag prefix is malformed: ' + prefix); + } + + state.tagMap[handle] = prefix; + } +}; + + +function captureSegment(state, start, end, checkJson) { + var _position, _length, _character, _result; + + if (start < end) { + _result = state.input.slice(start, end); + + if (checkJson) { + for (_position = 0, _length = _result.length; _position < _length; _position += 1) { + _character = _result.charCodeAt(_position); + if (!(_character === 0x09 || + (0x20 <= _character && _character <= 0x10FFFF))) { + throwError(state, 'expected valid JSON character'); + } + } + } else if (PATTERN_NON_PRINTABLE.test(_result)) { + throwError(state, 'the stream contains non-printable characters'); + } + + state.result += _result; + } +} + +function mergeMappings(state, destination, source, overridableKeys) { + var sourceKeys, key, index, quantity; + + if (!common.isObject(source)) { + throwError(state, 'cannot merge mappings; the provided source object is unacceptable'); + } + + sourceKeys = Object.keys(source); + + for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) { + key = sourceKeys[index]; + + if (!_hasOwnProperty$1.call(destination, key)) { + destination[key] = source[key]; + overridableKeys[key] = true; + } + } +} + +function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, + startLine, startLineStart, startPos) { + + var index, quantity; + + // The output is a plain object here, so keys can only be strings. + // We need to convert keyNode to a string, but doing so can hang the process + // (deeply nested arrays that explode exponentially using aliases). + if (Array.isArray(keyNode)) { + keyNode = Array.prototype.slice.call(keyNode); + + for (index = 0, quantity = keyNode.length; index < quantity; index += 1) { + if (Array.isArray(keyNode[index])) { + throwError(state, 'nested arrays are not supported inside keys'); + } + + if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') { + keyNode[index] = '[object Object]'; + } + } + } + + // Avoid code execution in load() via toString property + // (still use its own toString for arrays, timestamps, + // and whatever user schema extensions happen to have @@toStringTag) + if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') { + keyNode = '[object Object]'; + } + + + keyNode = String(keyNode); + + if (_result === null) { + _result = {}; + } + + if (keyTag === 'tag:yaml.org,2002:merge') { + if (Array.isArray(valueNode)) { + for (index = 0, quantity = valueNode.length; index < quantity; index += 1) { + mergeMappings(state, _result, valueNode[index], overridableKeys); + } + } else { + mergeMappings(state, _result, valueNode, overridableKeys); + } + } else { + if (!state.json && + !_hasOwnProperty$1.call(overridableKeys, keyNode) && + _hasOwnProperty$1.call(_result, keyNode)) { + state.line = startLine || state.line; + state.lineStart = startLineStart || state.lineStart; + state.position = startPos || state.position; + throwError(state, 'duplicated mapping key'); + } + + // used for this specific key only because Object.defineProperty is slow + if (keyNode === '__proto__') { + Object.defineProperty(_result, keyNode, { + configurable: true, + enumerable: true, + writable: true, + value: valueNode + }); + } else { + _result[keyNode] = valueNode; + } + delete overridableKeys[keyNode]; + } + + return _result; +} + +function readLineBreak(state) { + var ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x0A/* LF */) { + state.position++; + } else if (ch === 0x0D/* CR */) { + state.position++; + if (state.input.charCodeAt(state.position) === 0x0A/* LF */) { + state.position++; + } + } else { + throwError(state, 'a line break is expected'); + } + + state.line += 1; + state.lineStart = state.position; + state.firstTabInLine = -1; +} + +function skipSeparationSpace(state, allowComments, checkIndent) { + var lineBreaks = 0, + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + while (is_WHITE_SPACE(ch)) { + if (ch === 0x09/* Tab */ && state.firstTabInLine === -1) { + state.firstTabInLine = state.position; + } + ch = state.input.charCodeAt(++state.position); + } + + if (allowComments && ch === 0x23/* # */) { + do { + ch = state.input.charCodeAt(++state.position); + } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0); + } + + if (is_EOL(ch)) { + readLineBreak(state); + + ch = state.input.charCodeAt(state.position); + lineBreaks++; + state.lineIndent = 0; + + while (ch === 0x20/* Space */) { + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } + } else { + break; + } + } + + if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) { + throwWarning(state, 'deficient indentation'); + } + + return lineBreaks; +} + +function testDocumentSeparator(state) { + var _position = state.position, + ch; + + ch = state.input.charCodeAt(_position); + + // Condition state.position === state.lineStart is tested + // in parent on each call, for efficiency. No needs to test here again. + if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) && + ch === state.input.charCodeAt(_position + 1) && + ch === state.input.charCodeAt(_position + 2)) { + + _position += 3; + + ch = state.input.charCodeAt(_position); + + if (ch === 0 || is_WS_OR_EOL(ch)) { + return true; + } + } + + return false; +} + +function writeFoldedLines(state, count) { + if (count === 1) { + state.result += ' '; + } else if (count > 1) { + state.result += common.repeat('\n', count - 1); + } +} + + +function readPlainScalar(state, nodeIndent, withinFlowCollection) { + var preceding, + following, + captureStart, + captureEnd, + hasPendingContent, + _line, + _lineStart, + _lineIndent, + _kind = state.kind, + _result = state.result, + ch; + + ch = state.input.charCodeAt(state.position); + + if (is_WS_OR_EOL(ch) || + is_FLOW_INDICATOR(ch) || + ch === 0x23/* # */ || + ch === 0x26/* & */ || + ch === 0x2A/* * */ || + ch === 0x21/* ! */ || + ch === 0x7C/* | */ || + ch === 0x3E/* > */ || + ch === 0x27/* ' */ || + ch === 0x22/* " */ || + ch === 0x25/* % */ || + ch === 0x40/* @ */ || + ch === 0x60/* ` */) { + return false; + } + + if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following) || + withinFlowCollection && is_FLOW_INDICATOR(following)) { + return false; + } + } + + state.kind = 'scalar'; + state.result = ''; + captureStart = captureEnd = state.position; + hasPendingContent = false; + + while (ch !== 0) { + if (ch === 0x3A/* : */) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following) || + withinFlowCollection && is_FLOW_INDICATOR(following)) { + break; + } + + } else if (ch === 0x23/* # */) { + preceding = state.input.charCodeAt(state.position - 1); + + if (is_WS_OR_EOL(preceding)) { + break; + } + + } else if ((state.position === state.lineStart && testDocumentSeparator(state)) || + withinFlowCollection && is_FLOW_INDICATOR(ch)) { + break; + + } else if (is_EOL(ch)) { + _line = state.line; + _lineStart = state.lineStart; + _lineIndent = state.lineIndent; + skipSeparationSpace(state, false, -1); + + if (state.lineIndent >= nodeIndent) { + hasPendingContent = true; + ch = state.input.charCodeAt(state.position); + continue; + } else { + state.position = captureEnd; + state.line = _line; + state.lineStart = _lineStart; + state.lineIndent = _lineIndent; + break; + } + } + + if (hasPendingContent) { + captureSegment(state, captureStart, captureEnd, false); + writeFoldedLines(state, state.line - _line); + captureStart = captureEnd = state.position; + hasPendingContent = false; + } + + if (!is_WHITE_SPACE(ch)) { + captureEnd = state.position + 1; + } + + ch = state.input.charCodeAt(++state.position); + } + + captureSegment(state, captureStart, captureEnd, false); + + if (state.result) { + return true; + } + + state.kind = _kind; + state.result = _result; + return false; +} + +function readSingleQuotedScalar(state, nodeIndent) { + var ch, + captureStart, captureEnd; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x27/* ' */) { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + state.position++; + captureStart = captureEnd = state.position; + + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + if (ch === 0x27/* ' */) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + + if (ch === 0x27/* ' */) { + captureStart = state.position; + state.position++; + captureEnd = state.position; + } else { + return true; + } + + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; + + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError(state, 'unexpected end of the document within a single quoted scalar'); + + } else { + state.position++; + captureEnd = state.position; + } + } + + throwError(state, 'unexpected end of the stream within a single quoted scalar'); +} + +function readDoubleQuotedScalar(state, nodeIndent) { + var captureStart, + captureEnd, + hexLength, + hexResult, + tmp, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x22/* " */) { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + state.position++; + captureStart = captureEnd = state.position; + + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + if (ch === 0x22/* " */) { + captureSegment(state, captureStart, state.position, true); + state.position++; + return true; + + } else if (ch === 0x5C/* \ */) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + + if (is_EOL(ch)) { + skipSeparationSpace(state, false, nodeIndent); + + // TODO: rework to inline fn with no type cast? + } else if (ch < 256 && simpleEscapeCheck[ch]) { + state.result += simpleEscapeMap[ch]; + state.position++; + + } else if ((tmp = escapedHexLen(ch)) > 0) { + hexLength = tmp; + hexResult = 0; + + for (; hexLength > 0; hexLength--) { + ch = state.input.charCodeAt(++state.position); + + if ((tmp = fromHexCode(ch)) >= 0) { + hexResult = (hexResult << 4) + tmp; + + } else { + throwError(state, 'expected hexadecimal character'); + } + } + + state.result += charFromCodepoint(hexResult); + + state.position++; + + } else { + throwError(state, 'unknown escape sequence'); + } + + captureStart = captureEnd = state.position; + + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; + + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError(state, 'unexpected end of the document within a double quoted scalar'); + + } else { + state.position++; + captureEnd = state.position; + } + } + + throwError(state, 'unexpected end of the stream within a double quoted scalar'); +} + +function readFlowCollection(state, nodeIndent) { + var readNext = true, + _line, + _lineStart, + _pos, + _tag = state.tag, + _result, + _anchor = state.anchor, + following, + terminator, + isPair, + isExplicitPair, + isMapping, + overridableKeys = Object.create(null), + keyNode, + keyTag, + valueNode, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x5B/* [ */) { + terminator = 0x5D;/* ] */ + isMapping = false; + _result = []; + } else if (ch === 0x7B/* { */) { + terminator = 0x7D;/* } */ + isMapping = true; + _result = {}; + } else { + return false; + } + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(++state.position); + + while (ch !== 0) { + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if (ch === terminator) { + state.position++; + state.tag = _tag; + state.anchor = _anchor; + state.kind = isMapping ? 'mapping' : 'sequence'; + state.result = _result; + return true; + } else if (!readNext) { + throwError(state, 'missed comma between flow collection entries'); + } else if (ch === 0x2C/* , */) { + // "flow collection entries can never be completely empty", as per YAML 1.2, section 7.4 + throwError(state, "expected the node content, but found ','"); + } + + keyTag = keyNode = valueNode = null; + isPair = isExplicitPair = false; + + if (ch === 0x3F/* ? */) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following)) { + isPair = isExplicitPair = true; + state.position++; + skipSeparationSpace(state, true, nodeIndent); + } + } + + _line = state.line; // Save the current line. + _lineStart = state.lineStart; + _pos = state.position; + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + keyTag = state.tag; + keyNode = state.result; + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) { + isPair = true; + ch = state.input.charCodeAt(++state.position); + skipSeparationSpace(state, true, nodeIndent); + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + valueNode = state.result; + } + + if (isMapping) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos); + } else if (isPair) { + _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos)); + } else { + _result.push(keyNode); + } + + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x2C/* , */) { + readNext = true; + ch = state.input.charCodeAt(++state.position); + } else { + readNext = false; + } + } + + throwError(state, 'unexpected end of the stream within a flow collection'); +} + +function readBlockScalar(state, nodeIndent) { + var captureStart, + folding, + chomping = CHOMPING_CLIP, + didReadContent = false, + detectedIndent = false, + textIndent = nodeIndent, + emptyLines = 0, + atMoreIndented = false, + tmp, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x7C/* | */) { + folding = false; + } else if (ch === 0x3E/* > */) { + folding = true; + } else { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + + while (ch !== 0) { + ch = state.input.charCodeAt(++state.position); + + if (ch === 0x2B/* + */ || ch === 0x2D/* - */) { + if (CHOMPING_CLIP === chomping) { + chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP; + } else { + throwError(state, 'repeat of a chomping mode identifier'); + } + + } else if ((tmp = fromDecimalCode(ch)) >= 0) { + if (tmp === 0) { + throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one'); + } else if (!detectedIndent) { + textIndent = nodeIndent + tmp - 1; + detectedIndent = true; + } else { + throwError(state, 'repeat of an indentation width identifier'); + } + + } else { + break; + } + } + + if (is_WHITE_SPACE(ch)) { + do { ch = state.input.charCodeAt(++state.position); } + while (is_WHITE_SPACE(ch)); + + if (ch === 0x23/* # */) { + do { ch = state.input.charCodeAt(++state.position); } + while (!is_EOL(ch) && (ch !== 0)); + } + } + + while (ch !== 0) { + readLineBreak(state); + state.lineIndent = 0; + + ch = state.input.charCodeAt(state.position); + + while ((!detectedIndent || state.lineIndent < textIndent) && + (ch === 0x20/* Space */)) { + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } + + if (!detectedIndent && state.lineIndent > textIndent) { + textIndent = state.lineIndent; + } + + if (is_EOL(ch)) { + emptyLines++; + continue; + } + + // End of the scalar. + if (state.lineIndent < textIndent) { + + // Perform the chomping. + if (chomping === CHOMPING_KEEP) { + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + } else if (chomping === CHOMPING_CLIP) { + if (didReadContent) { // i.e. only if the scalar is not empty. + state.result += '\n'; + } + } + + // Break this `while` cycle and go to the funciton's epilogue. + break; + } + + // Folded style: use fancy rules to handle line breaks. + if (folding) { + + // Lines starting with white space characters (more-indented lines) are not folded. + if (is_WHITE_SPACE(ch)) { + atMoreIndented = true; + // except for the first content line (cf. Example 8.1) + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + + // End of more-indented block. + } else if (atMoreIndented) { + atMoreIndented = false; + state.result += common.repeat('\n', emptyLines + 1); + + // Just one line break - perceive as the same line. + } else if (emptyLines === 0) { + if (didReadContent) { // i.e. only if we have already read some scalar content. + state.result += ' '; + } + + // Several line breaks - perceive as different lines. + } else { + state.result += common.repeat('\n', emptyLines); + } + + // Literal style: just add exact number of line breaks between content lines. + } else { + // Keep all line breaks except the header line break. + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + } + + didReadContent = true; + detectedIndent = true; + emptyLines = 0; + captureStart = state.position; + + while (!is_EOL(ch) && (ch !== 0)) { + ch = state.input.charCodeAt(++state.position); + } + + captureSegment(state, captureStart, state.position, false); + } + + return true; +} + +function readBlockSequence(state, nodeIndent) { + var _line, + _tag = state.tag, + _anchor = state.anchor, + _result = [], + following, + detected = false, + ch; + + // there is a leading tab before this token, so it can't be a block sequence/mapping; + // it can still be flow sequence/mapping or a scalar + if (state.firstTabInLine !== -1) return false; + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + if (state.firstTabInLine !== -1) { + state.position = state.firstTabInLine; + throwError(state, 'tab characters must not be used in indentation'); + } + + if (ch !== 0x2D/* - */) { + break; + } + + following = state.input.charCodeAt(state.position + 1); + + if (!is_WS_OR_EOL(following)) { + break; + } + + detected = true; + state.position++; + + if (skipSeparationSpace(state, true, -1)) { + if (state.lineIndent <= nodeIndent) { + _result.push(null); + ch = state.input.charCodeAt(state.position); + continue; + } + } + + _line = state.line; + composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true); + _result.push(state.result); + skipSeparationSpace(state, true, -1); + + ch = state.input.charCodeAt(state.position); + + if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { + throwError(state, 'bad indentation of a sequence entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = 'sequence'; + state.result = _result; + return true; + } + return false; +} + +function readBlockMapping(state, nodeIndent, flowIndent) { + var following, + allowCompact, + _line, + _keyLine, + _keyLineStart, + _keyPos, + _tag = state.tag, + _anchor = state.anchor, + _result = {}, + overridableKeys = Object.create(null), + keyTag = null, + keyNode = null, + valueNode = null, + atExplicitKey = false, + detected = false, + ch; + + // there is a leading tab before this token, so it can't be a block sequence/mapping; + // it can still be flow sequence/mapping or a scalar + if (state.firstTabInLine !== -1) return false; + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + if (!atExplicitKey && state.firstTabInLine !== -1) { + state.position = state.firstTabInLine; + throwError(state, 'tab characters must not be used in indentation'); + } + + following = state.input.charCodeAt(state.position + 1); + _line = state.line; // Save the current line. + + // + // Explicit notation case. There are two separate blocks: + // first for the key (denoted by "?") and second for the value (denoted by ":") + // + if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) { + + if (ch === 0x3F/* ? */) { + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = true; + allowCompact = true; + + } else if (atExplicitKey) { + // i.e. 0x3A/* : */ === character after the explicit key. + atExplicitKey = false; + allowCompact = true; + + } else { + throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line'); + } + + state.position += 1; + ch = following; + + // + // Implicit notation case. Flow-style node as the key first, then ":", and the value. + // + } else { + _keyLine = state.line; + _keyLineStart = state.lineStart; + _keyPos = state.position; + + if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { + // Neither implicit nor explicit notation. + // Reading is done. Go to the epilogue. + break; + } + + if (state.line === _line) { + ch = state.input.charCodeAt(state.position); + + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (ch === 0x3A/* : */) { + ch = state.input.charCodeAt(++state.position); + + if (!is_WS_OR_EOL(ch)) { + throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping'); + } + + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = false; + allowCompact = false; + keyTag = state.tag; + keyNode = state.result; + + } else if (detected) { + throwError(state, 'can not read an implicit mapping pair; a colon is missed'); + + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; // Keep the result of `composeNode`. + } + + } else if (detected) { + throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key'); + + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; // Keep the result of `composeNode`. + } + } + + // + // Common reading code for both explicit and implicit notations. + // + if (state.line === _line || state.lineIndent > nodeIndent) { + if (atExplicitKey) { + _keyLine = state.line; + _keyLineStart = state.lineStart; + _keyPos = state.position; + } + + if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) { + if (atExplicitKey) { + keyNode = state.result; + } else { + valueNode = state.result; + } + } + + if (!atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + + skipSeparationSpace(state, true, -1); + ch = state.input.charCodeAt(state.position); + } + + if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { + throwError(state, 'bad indentation of a mapping entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + + // + // Epilogue. + // + + // Special case: last mapping's node contains only the key in explicit notation. + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + } + + // Expose the resulting mapping. + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = 'mapping'; + state.result = _result; + } + + return detected; +} + +function readTagProperty(state) { + var _position, + isVerbatim = false, + isNamed = false, + tagHandle, + tagName, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x21/* ! */) return false; + + if (state.tag !== null) { + throwError(state, 'duplication of a tag property'); + } + + ch = state.input.charCodeAt(++state.position); + + if (ch === 0x3C/* < */) { + isVerbatim = true; + ch = state.input.charCodeAt(++state.position); + + } else if (ch === 0x21/* ! */) { + isNamed = true; + tagHandle = '!!'; + ch = state.input.charCodeAt(++state.position); + + } else { + tagHandle = '!'; + } + + _position = state.position; + + if (isVerbatim) { + do { ch = state.input.charCodeAt(++state.position); } + while (ch !== 0 && ch !== 0x3E/* > */); + + if (state.position < state.length) { + tagName = state.input.slice(_position, state.position); + ch = state.input.charCodeAt(++state.position); + } else { + throwError(state, 'unexpected end of the stream within a verbatim tag'); + } + } else { + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + + if (ch === 0x21/* ! */) { + if (!isNamed) { + tagHandle = state.input.slice(_position - 1, state.position + 1); + + if (!PATTERN_TAG_HANDLE.test(tagHandle)) { + throwError(state, 'named tag handle cannot contain such characters'); + } + + isNamed = true; + _position = state.position + 1; + } else { + throwError(state, 'tag suffix cannot contain exclamation marks'); + } + } + + ch = state.input.charCodeAt(++state.position); + } + + tagName = state.input.slice(_position, state.position); + + if (PATTERN_FLOW_INDICATORS.test(tagName)) { + throwError(state, 'tag suffix cannot contain flow indicator characters'); + } + } + + if (tagName && !PATTERN_TAG_URI.test(tagName)) { + throwError(state, 'tag name cannot contain such characters: ' + tagName); + } + + try { + tagName = decodeURIComponent(tagName); + } catch (err) { + throwError(state, 'tag name is malformed: ' + tagName); + } + + if (isVerbatim) { + state.tag = tagName; + + } else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) { + state.tag = state.tagMap[tagHandle] + tagName; + + } else if (tagHandle === '!') { + state.tag = '!' + tagName; + + } else if (tagHandle === '!!') { + state.tag = 'tag:yaml.org,2002:' + tagName; + + } else { + throwError(state, 'undeclared tag handle "' + tagHandle + '"'); + } + + return true; +} + +function readAnchorProperty(state) { + var _position, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x26/* & */) return false; + + if (state.anchor !== null) { + throwError(state, 'duplication of an anchor property'); + } + + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (state.position === _position) { + throwError(state, 'name of an anchor node must contain at least one character'); + } + + state.anchor = state.input.slice(_position, state.position); + return true; +} + +function readAlias(state) { + var _position, alias, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x2A/* * */) return false; + + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (state.position === _position) { + throwError(state, 'name of an alias node must contain at least one character'); + } + + alias = state.input.slice(_position, state.position); + + if (!_hasOwnProperty$1.call(state.anchorMap, alias)) { + throwError(state, 'unidentified alias "' + alias + '"'); + } + + state.result = state.anchorMap[alias]; + skipSeparationSpace(state, true, -1); + return true; +} + +function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) { + var allowBlockStyles, + allowBlockScalars, + allowBlockCollections, + indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } + } + + if (indentStatus === 1) { + while (readTagProperty(state) || readAnchorProperty(state)) { + if (skipSeparationSpace(state, true, -1)) { + atNewLine = true; + allowBlockCollections = allowBlockStyles; + + if (state.lineIndent > parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } else { + allowBlockCollections = false; + } + } + } + + if (allowBlockCollections) { + allowBlockCollections = atNewLine || allowCompact; + } + + if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) { + if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) { + flowIndent = parentIndent; + } else { + flowIndent = parentIndent + 1; + } + + blockIndent = state.position - state.lineStart; + + if (indentStatus === 1) { + if (allowBlockCollections && + (readBlockSequence(state, blockIndent) || + readBlockMapping(state, blockIndent, flowIndent)) || + readFlowCollection(state, flowIndent)) { + hasContent = true; + } else { + if ((allowBlockScalars && readBlockScalar(state, flowIndent)) || + readSingleQuotedScalar(state, flowIndent) || + readDoubleQuotedScalar(state, flowIndent)) { + hasContent = true; + + } else if (readAlias(state)) { + hasContent = true; + + if (state.tag !== null || state.anchor !== null) { + throwError(state, 'alias node should not have any properties'); + } + + } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) { + hasContent = true; + + if (state.tag === null) { + state.tag = '?'; + } + } + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + } + } else if (indentStatus === 0) { + // Special case: block sequences are allowed to have same indentation level as the parent. + // http://www.yaml.org/spec/1.2/spec.html#id2799784 + hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); + } + } + + if (state.tag === null) { + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + + } else if (state.tag === '?') { + // Implicit resolving is not allowed for non-scalar types, and '?' + // non-specific tag is only automatically assigned to plain scalars. + // + // We only need to check kind conformity in case user explicitly assigns '?' + // tag, for example like this: "! [0]" + // + if (state.result !== null && state.kind !== 'scalar') { + throwError(state, 'unacceptable node kind for ! tag; it should be "scalar", not "' + state.kind + '"'); + } + + for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { + type = state.implicitTypes[typeIndex]; + + if (type.resolve(state.result)) { // `state.result` updated in resolver if matched + state.result = type.construct(state.result); + state.tag = type.tag; + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + break; + } + } + } else if (state.tag !== '!') { + if (_hasOwnProperty$1.call(state.typeMap[state.kind || 'fallback'], state.tag)) { + type = state.typeMap[state.kind || 'fallback'][state.tag]; + } else { + // looking for multi type + type = null; + typeList = state.typeMap.multi[state.kind || 'fallback']; + + for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) { + if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) { + type = typeList[typeIndex]; + break; + } + } + } + + if (!type) { + throwError(state, 'unknown tag !<' + state.tag + '>'); + } + + if (state.result !== null && type.kind !== state.kind) { + throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"'); + } + + if (!type.resolve(state.result, state.tag)) { // `state.result` updated in resolver if matched + throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); + } else { + state.result = type.construct(state.result, state.tag); + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + } + } + + if (state.listener !== null) { + state.listener('close', state); + } + return state.tag !== null || state.anchor !== null || hasContent; +} + +function readDocument(state) { + var documentStart = state.position, + _position, + directiveName, + directiveArgs, + hasDirectives = false, + ch; + + state.version = null; + state.checkLineBreaks = state.legacy; + state.tagMap = Object.create(null); + state.anchorMap = Object.create(null); + + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + skipSeparationSpace(state, true, -1); + + ch = state.input.charCodeAt(state.position); + + if (state.lineIndent > 0 || ch !== 0x25/* % */) { + break; + } + + hasDirectives = true; + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + directiveName = state.input.slice(_position, state.position); + directiveArgs = []; + + if (directiveName.length < 1) { + throwError(state, 'directive name must not be less than one character in length'); + } + + while (ch !== 0) { + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (ch === 0x23/* # */) { + do { ch = state.input.charCodeAt(++state.position); } + while (ch !== 0 && !is_EOL(ch)); + break; + } + + if (is_EOL(ch)) break; + + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + directiveArgs.push(state.input.slice(_position, state.position)); + } + + if (ch !== 0) readLineBreak(state); + + if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) { + directiveHandlers[directiveName](state, directiveName, directiveArgs); + } else { + throwWarning(state, 'unknown document directive "' + directiveName + '"'); + } + } + + skipSeparationSpace(state, true, -1); + + if (state.lineIndent === 0 && + state.input.charCodeAt(state.position) === 0x2D/* - */ && + state.input.charCodeAt(state.position + 1) === 0x2D/* - */ && + state.input.charCodeAt(state.position + 2) === 0x2D/* - */) { + state.position += 3; + skipSeparationSpace(state, true, -1); + + } else if (hasDirectives) { + throwError(state, 'directives end mark is expected'); + } + + composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); + skipSeparationSpace(state, true, -1); + + if (state.checkLineBreaks && + PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) { + throwWarning(state, 'non-ASCII line breaks are interpreted as content'); + } + + state.documents.push(state.result); + + if (state.position === state.lineStart && testDocumentSeparator(state)) { + + if (state.input.charCodeAt(state.position) === 0x2E/* . */) { + state.position += 3; + skipSeparationSpace(state, true, -1); + } + return; + } + + if (state.position < (state.length - 1)) { + throwError(state, 'end of the stream or a document separator is expected'); + } else { + return; + } +} + + +function loadDocuments(input, options) { + input = String(input); + options = options || {}; + + if (input.length !== 0) { + + // Add tailing `\n` if not exists + if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ && + input.charCodeAt(input.length - 1) !== 0x0D/* CR */) { + input += '\n'; + } + + // Strip BOM + if (input.charCodeAt(0) === 0xFEFF) { + input = input.slice(1); + } + } + + var state = new State$1(input, options); + + var nullpos = input.indexOf('\0'); + + if (nullpos !== -1) { + state.position = nullpos; + throwError(state, 'null byte is not allowed in input'); + } + + // Use 0 as string terminator. That significantly simplifies bounds check. + state.input += '\0'; + + while (state.input.charCodeAt(state.position) === 0x20/* Space */) { + state.lineIndent += 1; + state.position += 1; + } + + while (state.position < (state.length - 1)) { + readDocument(state); + } + + return state.documents; +} + + +function loadAll$1(input, iterator, options) { + if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') { + options = iterator; + iterator = null; + } + + var documents = loadDocuments(input, options); + + if (typeof iterator !== 'function') { + return documents; + } + + for (var index = 0, length = documents.length; index < length; index += 1) { + iterator(documents[index]); + } +} + + +function load$1(input, options) { + var documents = loadDocuments(input, options); + + if (documents.length === 0) { + /*eslint-disable no-undefined*/ + return undefined; + } else if (documents.length === 1) { + return documents[0]; + } + throw new exception('expected a single document in the stream, but found more'); +} + + +var loadAll_1 = loadAll$1; +var load_1 = load$1; + +var loader = { + loadAll: loadAll_1, + load: load_1 +}; + +/*eslint-disable no-use-before-define*/ + + + + + +var _toString = Object.prototype.toString; +var _hasOwnProperty = Object.prototype.hasOwnProperty; + +var CHAR_BOM = 0xFEFF; +var CHAR_TAB = 0x09; /* Tab */ +var CHAR_LINE_FEED = 0x0A; /* LF */ +var CHAR_CARRIAGE_RETURN = 0x0D; /* CR */ +var CHAR_SPACE = 0x20; /* Space */ +var CHAR_EXCLAMATION = 0x21; /* ! */ +var CHAR_DOUBLE_QUOTE = 0x22; /* " */ +var CHAR_SHARP = 0x23; /* # */ +var CHAR_PERCENT = 0x25; /* % */ +var CHAR_AMPERSAND = 0x26; /* & */ +var CHAR_SINGLE_QUOTE = 0x27; /* ' */ +var CHAR_ASTERISK = 0x2A; /* * */ +var CHAR_COMMA = 0x2C; /* , */ +var CHAR_MINUS = 0x2D; /* - */ +var CHAR_COLON = 0x3A; /* : */ +var CHAR_EQUALS = 0x3D; /* = */ +var CHAR_GREATER_THAN = 0x3E; /* > */ +var CHAR_QUESTION = 0x3F; /* ? */ +var CHAR_COMMERCIAL_AT = 0x40; /* @ */ +var CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */ +var CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */ +var CHAR_GRAVE_ACCENT = 0x60; /* ` */ +var CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */ +var CHAR_VERTICAL_LINE = 0x7C; /* | */ +var CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */ + +var ESCAPE_SEQUENCES = {}; + +ESCAPE_SEQUENCES[0x00] = '\\0'; +ESCAPE_SEQUENCES[0x07] = '\\a'; +ESCAPE_SEQUENCES[0x08] = '\\b'; +ESCAPE_SEQUENCES[0x09] = '\\t'; +ESCAPE_SEQUENCES[0x0A] = '\\n'; +ESCAPE_SEQUENCES[0x0B] = '\\v'; +ESCAPE_SEQUENCES[0x0C] = '\\f'; +ESCAPE_SEQUENCES[0x0D] = '\\r'; +ESCAPE_SEQUENCES[0x1B] = '\\e'; +ESCAPE_SEQUENCES[0x22] = '\\"'; +ESCAPE_SEQUENCES[0x5C] = '\\\\'; +ESCAPE_SEQUENCES[0x85] = '\\N'; +ESCAPE_SEQUENCES[0xA0] = '\\_'; +ESCAPE_SEQUENCES[0x2028] = '\\L'; +ESCAPE_SEQUENCES[0x2029] = '\\P'; + +var DEPRECATED_BOOLEANS_SYNTAX = [ + 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', + 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF' +]; + +var DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/; + +function compileStyleMap(schema, map) { + var result, keys, index, length, tag, style, type; + + if (map === null) return {}; + + result = {}; + keys = Object.keys(map); + + for (index = 0, length = keys.length; index < length; index += 1) { + tag = keys[index]; + style = String(map[tag]); + + if (tag.slice(0, 2) === '!!') { + tag = 'tag:yaml.org,2002:' + tag.slice(2); + } + type = schema.compiledTypeMap['fallback'][tag]; + + if (type && _hasOwnProperty.call(type.styleAliases, style)) { + style = type.styleAliases[style]; + } + + result[tag] = style; + } + + return result; +} + +function encodeHex(character) { + var string, handle, length; + + string = character.toString(16).toUpperCase(); + + if (character <= 0xFF) { + handle = 'x'; + length = 2; + } else if (character <= 0xFFFF) { + handle = 'u'; + length = 4; + } else if (character <= 0xFFFFFFFF) { + handle = 'U'; + length = 8; + } else { + throw new exception('code point within a string may not be greater than 0xFFFFFFFF'); + } + + return '\\' + handle + common.repeat('0', length - string.length) + string; +} + + +var QUOTING_TYPE_SINGLE = 1, + QUOTING_TYPE_DOUBLE = 2; + +function State(options) { + this.schema = options['schema'] || _default; + this.indent = Math.max(1, (options['indent'] || 2)); + this.noArrayIndent = options['noArrayIndent'] || false; + this.skipInvalid = options['skipInvalid'] || false; + this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']); + this.styleMap = compileStyleMap(this.schema, options['styles'] || null); + this.sortKeys = options['sortKeys'] || false; + this.lineWidth = options['lineWidth'] || 80; + this.noRefs = options['noRefs'] || false; + this.noCompatMode = options['noCompatMode'] || false; + this.condenseFlow = options['condenseFlow'] || false; + this.quotingType = options['quotingType'] === '"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE; + this.forceQuotes = options['forceQuotes'] || false; + this.replacer = typeof options['replacer'] === 'function' ? options['replacer'] : null; + + this.implicitTypes = this.schema.compiledImplicit; + this.explicitTypes = this.schema.compiledExplicit; + + this.tag = null; + this.result = ''; + + this.duplicates = []; + this.usedDuplicates = null; +} + +// Indents every line in a string. Empty lines (\n only) are not indented. +function indentString(string, spaces) { + var ind = common.repeat(' ', spaces), + position = 0, + next = -1, + result = '', + line, + length = string.length; + + while (position < length) { + next = string.indexOf('\n', position); + if (next === -1) { + line = string.slice(position); + position = length; + } else { + line = string.slice(position, next + 1); + position = next + 1; + } + + if (line.length && line !== '\n') result += ind; + + result += line; + } + + return result; +} + +function generateNextLine(state, level) { + return '\n' + common.repeat(' ', state.indent * level); +} + +function testImplicitResolving(state, str) { + var index, length, type; + + for (index = 0, length = state.implicitTypes.length; index < length; index += 1) { + type = state.implicitTypes[index]; + + if (type.resolve(str)) { + return true; + } + } + + return false; +} + +// [33] s-white ::= s-space | s-tab +function isWhitespace(c) { + return c === CHAR_SPACE || c === CHAR_TAB; +} + +// Returns true if the character can be printed without escaping. +// From YAML 1.2: "any allowed characters known to be non-printable +// should also be escaped. [However,] This isn’t mandatory" +// Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029. +function isPrintable(c) { + return (0x00020 <= c && c <= 0x00007E) + || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029) + || ((0x0E000 <= c && c <= 0x00FFFD) && c !== CHAR_BOM) + || (0x10000 <= c && c <= 0x10FFFF); +} + +// [34] ns-char ::= nb-char - s-white +// [27] nb-char ::= c-printable - b-char - c-byte-order-mark +// [26] b-char ::= b-line-feed | b-carriage-return +// Including s-white (for some reason, examples doesn't match specs in this aspect) +// ns-char ::= c-printable - b-line-feed - b-carriage-return - c-byte-order-mark +function isNsCharOrWhitespace(c) { + return isPrintable(c) + && c !== CHAR_BOM + // - b-char + && c !== CHAR_CARRIAGE_RETURN + && c !== CHAR_LINE_FEED; +} + +// [127] ns-plain-safe(c) ::= c = flow-out ⇒ ns-plain-safe-out +// c = flow-in ⇒ ns-plain-safe-in +// c = block-key ⇒ ns-plain-safe-out +// c = flow-key ⇒ ns-plain-safe-in +// [128] ns-plain-safe-out ::= ns-char +// [129] ns-plain-safe-in ::= ns-char - c-flow-indicator +// [130] ns-plain-char(c) ::= ( ns-plain-safe(c) - “:” - “#” ) +// | ( /* An ns-char preceding */ “#” ) +// | ( “:” /* Followed by an ns-plain-safe(c) */ ) +function isPlainSafe(c, prev, inblock) { + var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c); + var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c); + return ( + // ns-plain-safe + inblock ? // c = flow-in + cIsNsCharOrWhitespace + : cIsNsCharOrWhitespace + // - c-flow-indicator + && c !== CHAR_COMMA + && c !== CHAR_LEFT_SQUARE_BRACKET + && c !== CHAR_RIGHT_SQUARE_BRACKET + && c !== CHAR_LEFT_CURLY_BRACKET + && c !== CHAR_RIGHT_CURLY_BRACKET + ) + // ns-plain-char + && c !== CHAR_SHARP // false on '#' + && !(prev === CHAR_COLON && !cIsNsChar) // false on ': ' + || (isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP) // change to true on '[^ ]#' + || (prev === CHAR_COLON && cIsNsChar); // change to true on ':[^ ]' +} + +// Simplified test for values allowed as the first character in plain style. +function isPlainSafeFirst(c) { + // Uses a subset of ns-char - c-indicator + // where ns-char = nb-char - s-white. + // No support of ( ( “?” | “:” | “-” ) /* Followed by an ns-plain-safe(c)) */ ) part + return isPrintable(c) && c !== CHAR_BOM + && !isWhitespace(c) // - s-white + // - (c-indicator ::= + // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}” + && c !== CHAR_MINUS + && c !== CHAR_QUESTION + && c !== CHAR_COLON + && c !== CHAR_COMMA + && c !== CHAR_LEFT_SQUARE_BRACKET + && c !== CHAR_RIGHT_SQUARE_BRACKET + && c !== CHAR_LEFT_CURLY_BRACKET + && c !== CHAR_RIGHT_CURLY_BRACKET + // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"” + && c !== CHAR_SHARP + && c !== CHAR_AMPERSAND + && c !== CHAR_ASTERISK + && c !== CHAR_EXCLAMATION + && c !== CHAR_VERTICAL_LINE + && c !== CHAR_EQUALS + && c !== CHAR_GREATER_THAN + && c !== CHAR_SINGLE_QUOTE + && c !== CHAR_DOUBLE_QUOTE + // | “%” | “@” | “`”) + && c !== CHAR_PERCENT + && c !== CHAR_COMMERCIAL_AT + && c !== CHAR_GRAVE_ACCENT; +} + +// Simplified test for values allowed as the last character in plain style. +function isPlainSafeLast(c) { + // just not whitespace or colon, it will be checked to be plain character later + return !isWhitespace(c) && c !== CHAR_COLON; +} + +// Same as 'string'.codePointAt(pos), but works in older browsers. +function codePointAt(string, pos) { + var first = string.charCodeAt(pos), second; + if (first >= 0xD800 && first <= 0xDBFF && pos + 1 < string.length) { + second = string.charCodeAt(pos + 1); + if (second >= 0xDC00 && second <= 0xDFFF) { + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; + } + } + return first; +} + +// Determines whether block indentation indicator is required. +function needIndentIndicator(string) { + var leadingSpaceRe = /^\n* /; + return leadingSpaceRe.test(string); +} + +var STYLE_PLAIN = 1, + STYLE_SINGLE = 2, + STYLE_LITERAL = 3, + STYLE_FOLDED = 4, + STYLE_DOUBLE = 5; + +// Determines which scalar styles are possible and returns the preferred style. +// lineWidth = -1 => no limit. +// Pre-conditions: str.length > 0. +// Post-conditions: +// STYLE_PLAIN or STYLE_SINGLE => no \n are in the string. +// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1). +// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1). +function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, + testAmbiguousType, quotingType, forceQuotes, inblock) { + + var i; + var char = 0; + var prevChar = null; + var hasLineBreak = false; + var hasFoldableLine = false; // only checked if shouldTrackWidth + var shouldTrackWidth = lineWidth !== -1; + var previousLineBreak = -1; // count the first line correctly + var plain = isPlainSafeFirst(codePointAt(string, 0)) + && isPlainSafeLast(codePointAt(string, string.length - 1)); + + if (singleLineOnly || forceQuotes) { + // Case: no block styles. + // Check for disallowed characters to rule out plain and single. + for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + plain = plain && isPlainSafe(char, prevChar, inblock); + prevChar = char; + } + } else { + // Case: block styles permitted. + for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + if (char === CHAR_LINE_FEED) { + hasLineBreak = true; + // Check if any line can be folded. + if (shouldTrackWidth) { + hasFoldableLine = hasFoldableLine || + // Foldable line = too long, and not more-indented. + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' '); + previousLineBreak = i; + } + } else if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + plain = plain && isPlainSafe(char, prevChar, inblock); + prevChar = char; + } + // in case the end is missing a \n + hasFoldableLine = hasFoldableLine || (shouldTrackWidth && + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' ')); + } + // Although every style can represent \n without escaping, prefer block styles + // for multiline, since they're more readable and they don't add empty lines. + // Also prefer folding a super-long line. + if (!hasLineBreak && !hasFoldableLine) { + // Strings interpretable as another type have to be quoted; + // e.g. the string 'true' vs. the boolean true. + if (plain && !forceQuotes && !testAmbiguousType(string)) { + return STYLE_PLAIN; + } + return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; + } + // Edge case: block indentation indicator can only have one digit. + if (indentPerLevel > 9 && needIndentIndicator(string)) { + return STYLE_DOUBLE; + } + // At this point we know block styles are valid. + // Prefer literal style unless we want to fold. + if (!forceQuotes) { + return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL; + } + return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; +} + +// Note: line breaking/folding is implemented for only the folded style. +// NB. We drop the last trailing newline (if any) of a returned block scalar +// since the dumper adds its own newline. This always works: +// • No ending newline => unaffected; already using strip "-" chomping. +// • Ending newline => removed then restored. +// Importantly, this keeps the "+" chomp indicator from gaining an extra line. +function writeScalar(state, string, level, iskey, inblock) { + state.dump = (function () { + if (string.length === 0) { + return state.quotingType === QUOTING_TYPE_DOUBLE ? '""' : "''"; + } + if (!state.noCompatMode) { + if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) { + return state.quotingType === QUOTING_TYPE_DOUBLE ? ('"' + string + '"') : ("'" + string + "'"); + } + } + + var indent = state.indent * Math.max(1, level); // no 0-indent scalars + // As indentation gets deeper, let the width decrease monotonically + // to the lower bound min(state.lineWidth, 40). + // Note that this implies + // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound. + // state.lineWidth > 40 + state.indent: width decreases until the lower bound. + // This behaves better than a constant minimum width which disallows narrower options, + // or an indent threshold which causes the width to suddenly increase. + var lineWidth = state.lineWidth === -1 + ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); + + // Without knowing if keys are implicit/explicit, assume implicit for safety. + var singleLineOnly = iskey + // No block styles in flow mode. + || (state.flowLevel > -1 && level >= state.flowLevel); + function testAmbiguity(string) { + return testImplicitResolving(state, string); + } + + switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, + testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) { + + case STYLE_PLAIN: + return string; + case STYLE_SINGLE: + return "'" + string.replace(/'/g, "''") + "'"; + case STYLE_LITERAL: + return '|' + blockHeader(string, state.indent) + + dropEndingNewline(indentString(string, indent)); + case STYLE_FOLDED: + return '>' + blockHeader(string, state.indent) + + dropEndingNewline(indentString(foldString(string, lineWidth), indent)); + case STYLE_DOUBLE: + return '"' + escapeString(string) + '"'; + default: + throw new exception('impossible error: invalid scalar style'); + } + }()); +} + +// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9. +function blockHeader(string, indentPerLevel) { + var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ''; + + // note the special case: the string '\n' counts as a "trailing" empty line. + var clip = string[string.length - 1] === '\n'; + var keep = clip && (string[string.length - 2] === '\n' || string === '\n'); + var chomp = keep ? '+' : (clip ? '' : '-'); + + return indentIndicator + chomp + '\n'; +} + +// (See the note for writeScalar.) +function dropEndingNewline(string) { + return string[string.length - 1] === '\n' ? string.slice(0, -1) : string; +} + +// Note: a long line without a suitable break point will exceed the width limit. +// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0. +function foldString(string, width) { + // In folded style, $k$ consecutive newlines output as $k+1$ newlines— + // unless they're before or after a more-indented line, or at the very + // beginning or end, in which case $k$ maps to $k$. + // Therefore, parse each chunk as newline(s) followed by a content line. + var lineRe = /(\n+)([^\n]*)/g; + + // first line (possibly an empty line) + var result = (function () { + var nextLF = string.indexOf('\n'); + nextLF = nextLF !== -1 ? nextLF : string.length; + lineRe.lastIndex = nextLF; + return foldLine(string.slice(0, nextLF), width); + }()); + // If we haven't reached the first content line yet, don't add an extra \n. + var prevMoreIndented = string[0] === '\n' || string[0] === ' '; + var moreIndented; + + // rest of the lines + var match; + while ((match = lineRe.exec(string))) { + var prefix = match[1], line = match[2]; + moreIndented = (line[0] === ' '); + result += prefix + + (!prevMoreIndented && !moreIndented && line !== '' + ? '\n' : '') + + foldLine(line, width); + prevMoreIndented = moreIndented; + } + + return result; +} + +// Greedy line breaking. +// Picks the longest line under the limit each time, +// otherwise settles for the shortest line over the limit. +// NB. More-indented lines *cannot* be folded, as that would add an extra \n. +function foldLine(line, width) { + if (line === '' || line[0] === ' ') return line; + + // Since a more-indented line adds a \n, breaks can't be followed by a space. + var breakRe = / [^ ]/g; // note: the match index will always be <= length-2. + var match; + // start is an inclusive index. end, curr, and next are exclusive. + var start = 0, end, curr = 0, next = 0; + var result = ''; + + // Invariants: 0 <= start <= length-1. + // 0 <= curr <= next <= max(0, length-2). curr - start <= width. + // Inside the loop: + // A match implies length >= 2, so curr and next are <= length-2. + while ((match = breakRe.exec(line))) { + next = match.index; + // maintain invariant: curr - start <= width + if (next - start > width) { + end = (curr > start) ? curr : next; // derive end <= length-2 + result += '\n' + line.slice(start, end); + // skip the space that was output as \n + start = end + 1; // derive start <= length-1 + } + curr = next; + } + + // By the invariants, start <= length-1, so there is something left over. + // It is either the whole string or a part starting from non-whitespace. + result += '\n'; + // Insert a break if the remainder is too long and there is a break available. + if (line.length - start > width && curr > start) { + result += line.slice(start, curr) + '\n' + line.slice(curr + 1); + } else { + result += line.slice(start); + } + + return result.slice(1); // drop extra \n joiner +} + +// Escapes a double-quoted string. +function escapeString(string) { + var result = ''; + var char = 0; + var escapeSeq; + + for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + escapeSeq = ESCAPE_SEQUENCES[char]; + + if (!escapeSeq && isPrintable(char)) { + result += string[i]; + if (char >= 0x10000) result += string[i + 1]; + } else { + result += escapeSeq || encodeHex(char); + } + } + + return result; +} + +function writeFlowSequence(state, level, object) { + var _result = '', + _tag = state.tag, + index, + length, + value; + + for (index = 0, length = object.length; index < length; index += 1) { + value = object[index]; + + if (state.replacer) { + value = state.replacer.call(object, String(index), value); + } + + // Write only valid elements, put null instead of invalid elements. + if (writeNode(state, level, value, false, false) || + (typeof value === 'undefined' && + writeNode(state, level, null, false, false))) { + + if (_result !== '') _result += ',' + (!state.condenseFlow ? ' ' : ''); + _result += state.dump; + } + } + + state.tag = _tag; + state.dump = '[' + _result + ']'; +} + +function writeBlockSequence(state, level, object, compact) { + var _result = '', + _tag = state.tag, + index, + length, + value; + + for (index = 0, length = object.length; index < length; index += 1) { + value = object[index]; + + if (state.replacer) { + value = state.replacer.call(object, String(index), value); + } + + // Write only valid elements, put null instead of invalid elements. + if (writeNode(state, level + 1, value, true, true, false, true) || + (typeof value === 'undefined' && + writeNode(state, level + 1, null, true, true, false, true))) { + + if (!compact || _result !== '') { + _result += generateNextLine(state, level); + } + + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + _result += '-'; + } else { + _result += '- '; + } + + _result += state.dump; + } + } + + state.tag = _tag; + state.dump = _result || '[]'; // Empty sequence if no valid values. +} + +function writeFlowMapping(state, level, object) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + pairBuffer; + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + + pairBuffer = ''; + if (_result !== '') pairBuffer += ', '; + + if (state.condenseFlow) pairBuffer += '"'; + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (state.replacer) { + objectValue = state.replacer.call(object, objectKey, objectValue); + } + + if (!writeNode(state, level, objectKey, false, false)) { + continue; // Skip this pair because of invalid key; + } + + if (state.dump.length > 1024) pairBuffer += '? '; + + pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' '); + + if (!writeNode(state, level, objectValue, false, false)) { + continue; // Skip this pair because of invalid value. + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _result += pairBuffer; + } + + state.tag = _tag; + state.dump = '{' + _result + '}'; +} + +function writeBlockMapping(state, level, object, compact) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + explicitPair, + pairBuffer; + + // Allow sorting keys so that the output file is deterministic + if (state.sortKeys === true) { + // Default sorting + objectKeyList.sort(); + } else if (typeof state.sortKeys === 'function') { + // Custom sort function + objectKeyList.sort(state.sortKeys); + } else if (state.sortKeys) { + // Something is wrong + throw new exception('sortKeys must be a boolean or a function'); + } + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + pairBuffer = ''; + + if (!compact || _result !== '') { + pairBuffer += generateNextLine(state, level); + } + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (state.replacer) { + objectValue = state.replacer.call(object, objectKey, objectValue); + } + + if (!writeNode(state, level + 1, objectKey, true, true, true)) { + continue; // Skip this pair because of invalid key. + } + + explicitPair = (state.tag !== null && state.tag !== '?') || + (state.dump && state.dump.length > 1024); + + if (explicitPair) { + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += '?'; + } else { + pairBuffer += '? '; + } + } + + pairBuffer += state.dump; + + if (explicitPair) { + pairBuffer += generateNextLine(state, level); + } + + if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { + continue; // Skip this pair because of invalid value. + } + + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += ':'; + } else { + pairBuffer += ': '; + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _result += pairBuffer; + } + + state.tag = _tag; + state.dump = _result || '{}'; // Empty mapping if no valid pairs. +} + +function detectType(state, object, explicit) { + var _result, typeList, index, length, type, style; + + typeList = explicit ? state.explicitTypes : state.implicitTypes; + + for (index = 0, length = typeList.length; index < length; index += 1) { + type = typeList[index]; + + if ((type.instanceOf || type.predicate) && + (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) && + (!type.predicate || type.predicate(object))) { + + if (explicit) { + if (type.multi && type.representName) { + state.tag = type.representName(object); + } else { + state.tag = type.tag; + } + } else { + state.tag = '?'; + } + + if (type.represent) { + style = state.styleMap[type.tag] || type.defaultStyle; + + if (_toString.call(type.represent) === '[object Function]') { + _result = type.represent(object, style); + } else if (_hasOwnProperty.call(type.represent, style)) { + _result = type.represent[style](object, style); + } else { + throw new exception('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); + } + + state.dump = _result; + } + + return true; + } + } + + return false; +} + +// Serializes `object` and writes it to global `result`. +// Returns true on success, or false on invalid object. +// +function writeNode(state, level, object, block, compact, iskey, isblockseq) { + state.tag = null; + state.dump = object; + + if (!detectType(state, object, false)) { + detectType(state, object, true); + } + + var type = _toString.call(state.dump); + var inblock = block; + var tagStr; + + if (block) { + block = (state.flowLevel < 0 || state.flowLevel > level); + } + + var objectOrArray = type === '[object Object]' || type === '[object Array]', + duplicateIndex, + duplicate; + + if (objectOrArray) { + duplicateIndex = state.duplicates.indexOf(object); + duplicate = duplicateIndex !== -1; + } + + if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) { + compact = false; + } + + if (duplicate && state.usedDuplicates[duplicateIndex]) { + state.dump = '*ref_' + duplicateIndex; + } else { + if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { + state.usedDuplicates[duplicateIndex] = true; + } + if (type === '[object Object]') { + if (block && (Object.keys(state.dump).length !== 0)) { + writeBlockMapping(state, level, state.dump, compact); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + state.dump; + } + } else { + writeFlowMapping(state, level, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if (type === '[object Array]') { + if (block && (state.dump.length !== 0)) { + if (state.noArrayIndent && !isblockseq && level > 0) { + writeBlockSequence(state, level - 1, state.dump, compact); + } else { + writeBlockSequence(state, level, state.dump, compact); + } + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + state.dump; + } + } else { + writeFlowSequence(state, level, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if (type === '[object String]') { + if (state.tag !== '?') { + writeScalar(state, state.dump, level, iskey, inblock); + } + } else if (type === '[object Undefined]') { + return false; + } else { + if (state.skipInvalid) return false; + throw new exception('unacceptable kind of an object to dump ' + type); + } + + if (state.tag !== null && state.tag !== '?') { + // Need to encode all characters except those allowed by the spec: + // + // [35] ns-dec-digit ::= [#x30-#x39] /* 0-9 */ + // [36] ns-hex-digit ::= ns-dec-digit + // | [#x41-#x46] /* A-F */ | [#x61-#x66] /* a-f */ + // [37] ns-ascii-letter ::= [#x41-#x5A] /* A-Z */ | [#x61-#x7A] /* a-z */ + // [38] ns-word-char ::= ns-dec-digit | ns-ascii-letter | “-” + // [39] ns-uri-char ::= “%” ns-hex-digit ns-hex-digit | ns-word-char | “#” + // | “;” | “/” | “?” | “:” | “@” | “&” | “=” | “+” | “$” | “,” + // | “_” | “.” | “!” | “~” | “*” | “'” | “(” | “)” | “[” | “]” + // + // Also need to encode '!' because it has special meaning (end of tag prefix). + // + tagStr = encodeURI( + state.tag[0] === '!' ? state.tag.slice(1) : state.tag + ).replace(/!/g, '%21'); + + if (state.tag[0] === '!') { + tagStr = '!' + tagStr; + } else if (tagStr.slice(0, 18) === 'tag:yaml.org,2002:') { + tagStr = '!!' + tagStr.slice(18); + } else { + tagStr = '!<' + tagStr + '>'; + } + + state.dump = tagStr + ' ' + state.dump; + } + } + + return true; +} + +function getDuplicateReferences(object, state) { + var objects = [], + duplicatesIndexes = [], + index, + length; + + inspectNode(object, objects, duplicatesIndexes); + + for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) { + state.duplicates.push(objects[duplicatesIndexes[index]]); + } + state.usedDuplicates = new Array(length); +} + +function inspectNode(object, objects, duplicatesIndexes) { + var objectKeyList, + index, + length; + + if (object !== null && typeof object === 'object') { + index = objects.indexOf(object); + if (index !== -1) { + if (duplicatesIndexes.indexOf(index) === -1) { + duplicatesIndexes.push(index); + } + } else { + objects.push(object); + + if (Array.isArray(object)) { + for (index = 0, length = object.length; index < length; index += 1) { + inspectNode(object[index], objects, duplicatesIndexes); + } + } else { + objectKeyList = Object.keys(object); + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes); + } + } + } + } +} + +function dump$1(input, options) { + options = options || {}; + + var state = new State(options); + + if (!state.noRefs) getDuplicateReferences(input, state); + + var value = input; + + if (state.replacer) { + value = state.replacer.call({ '': value }, '', value); + } + + if (writeNode(state, 0, value, true, true)) return state.dump + '\n'; + + return ''; +} + +var dump_1 = dump$1; + +var dumper = { + dump: dump_1 +}; +var load = loader.load; +var dump = dumper.dump; + +const YAML = (app) => ` +name: CI + +env: + DEBUG: 'napi:*' + APP_NAME: '${app}' + MACOSX_DEPLOYMENT_TARGET: '10.13' + +permissions: + contents: write + id-token: write + +on: + push: + branches: + - main + tags-ignore: + - '**' + paths-ignore: + - '**/*.md' + - 'LICENSE' + - '**/*.gitignore' + - '.editorconfig' + - 'docs/**' + pull_request: + +jobs: + build: + + strategy: + fail-fast: false + matrix: + settings: + - host: macos-latest + target: 'x86_64-apple-darwin' + build: yarn build --target x86_64-apple-darwin + - host: windows-latest + build: yarn build --target x86_64-pc-windows-msvc + target: 'x86_64-pc-windows-msvc' + - host: windows-latest + build: | + yarn build --target i686-pc-windows-msvc + yarn test + target: 'i686-pc-windows-msvc' + - host: ubuntu-latest + target: 'x86_64-unknown-linux-gnu' + docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian + build: yarn build --target x86_64-unknown-linux-gnu + - host: ubuntu-latest + target: 'x86_64-unknown-linux-musl' + docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine + build: yarn build --target x86_64-unknown-linux-musl + - host: macos-latest + target: 'aarch64-apple-darwin' + build: yarn build --target aarch64-apple-darwin + - host: ubuntu-latest + target: 'aarch64-unknown-linux-gnu' + docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-aarch64 + build: yarn build --target aarch64-unknown-linux-gnu + - host: ubuntu-latest + target: 'armv7-unknown-linux-gnueabihf' + setup: | + sudo apt-get update + sudo apt-get install gcc-arm-linux-gnueabihf -y + build: yarn build --target armv7-unknown-linux-gnueabihf + - host: ubuntu-latest + target: 'armv7-unknown-linux-musleabihf' + build: yarn build --target armv7-unknown-linux-musleabihf + - host: ubuntu-latest + target: 'aarch64-linux-android' + build: yarn build --target aarch64-linux-android + - host: ubuntu-latest + target: 'armv7-linux-androideabi' + build: yarn build --target armv7-linux-androideabi + - host: ubuntu-latest + target: 'aarch64-unknown-linux-musl' + docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine + build: >- + set -e &&\n + rustup target add aarch64-unknown-linux-musl &&\n + yarn build --target aarch64-unknown-linux-musl + - host: windows-latest + target: 'aarch64-pc-windows-msvc' + build: yarn build --target aarch64-pc-windows-msvc + - host: ubuntu-latest + target: 'riscv64gc-unknown-linux-gnu' + setup: | + sudo apt-get update + sudo apt-get install gcc-riscv64-linux-gnu -y + build: yarn build --target riscv64gc-unknown-linux-gnu + + name: stable - \${{ matrix.settings.target }} - node@20 + runs-on: \${{ matrix.settings.host }} + + steps: + - uses: actions/checkout@v4 + + - name: Setup node + uses: actions/setup-node@v4 + if: \${{ !matrix.settings.docker }} + with: + node-version: 20 + cache: yarn + + - name: Install + uses: dtolnay/rust-toolchain@stable + if: \${{ !matrix.settings.docker }} + with: + toolchain: stable + targets: \${{ matrix.settings.target }} + + - name: Cache cargo + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + .cargo-cache + target/ + key: \${{ matrix.settings.target }}-cargo-\${{ matrix.settings.host }} + + - uses: goto-bus-stop/setup-zig@v2 + if: \${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' || matrix.settings.target == 'armv7-unknown-linux-musleabihf' }} + with: + version: 0.13.0 + + - name: Setup toolchain + run: \${{ matrix.settings.setup }} + if: \${{ matrix.settings.setup }} + shell: bash + + - name: Setup node x86 + if: matrix.settings.target == 'i686-pc-windows-msvc' + run: yarn config set supportedArchitectures.cpu "ia32" + shell: bash + + - name: 'Install dependencies' + run: yarn install + + - name: Setup node x86 + uses: actions/setup-node@v4 + if: matrix.settings.target == 'i686-pc-windows-msvc' + with: + node-version: 20 + cache: yarn + architecture: x86 + + - name: Build in docker + uses: addnab/docker-run-action@v3 + if: \${{ matrix.settings.docker }} + with: + image: \${{ matrix.settings.docker }} + options: --user 0:0 -v \${{ github.workspace }}/.cargo-cache/git/db:/usr/local/cargo/git/db -v \${{ github.workspace }}/.cargo/registry/cache:/usr/local/cargo/registry/cache -v \${{ github.workspace }}/.cargo/registry/index:/usr/local/cargo/registry/index -v \${{ github.workspace }}:/build -w /build + run: \${{ matrix.settings.build }} + + - name: 'Build' + run: \${{ matrix.settings.build }} + if: \${{ !matrix.settings.docker }} + shell: bash + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: bindings-\${{ matrix.settings.target }} + path: \${{ env.APP_NAME }}.*.node + if-no-files-found: error + + build-freebsd: + runs-on: macos-13 + name: Build FreeBSD + steps: + - uses: actions/checkout@v4 + - name: Build + id: build + uses: cross-platform-actions/action@v0.24.0 + env: + DEBUG: 'napi:*' + RUSTUP_IO_THREADS: 1 + with: + operating_system: freebsd + version: '13.2' + memory: 8G + cpu_count: 3 + environment_variables: 'DEBUG RUSTUP_IO_THREADS' + shell: bash + run: | + sudo pkg install -y -f curl node libnghttp2 npm + sudo npm install -g yarn --ignore-scripts + curl https://sh.rustup.rs -sSf --output rustup.sh + sh rustup.sh -y --profile minimal --default-toolchain stable + source "$HOME/.cargo/env" + echo "~~~~ rustc --version ~~~~" + rustc --version + echo "~~~~ node -v ~~~~" + node -v + echo "~~~~ yarn --version ~~~~" + yarn --version + pwd + ls -lah + whoami + env + freebsd-version + yarn install + yarn build + yarn test + rm -rf node_modules + rm -rf target + rm -rf .yarn/cache + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: bindings-freebsd + path: \${{ env.APP_NAME }}.*.node + if-no-files-found: error + + test-macOS-windows-binding: + name: Test bindings on \${{ matrix.settings.target }} - node@\${{ matrix.node }} + needs: + - build + strategy: + fail-fast: false + matrix: + settings: + - host: macos-latest + target: 'x86_64-apple-darwin' + - host: windows-latest + target: 'x86_64-pc-windows-msvc' + node: ['18', '20'] + runs-on: \${{ matrix.settings.host }} + + steps: + - uses: actions/checkout@v4 + + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version: \${{ matrix.node }} + cache: 'yarn' + architecture: x64 + + - name: 'Install dependencies' + run: yarn install + + - name: Download artifacts + uses: actions/download-artifact@v4 + with: + name: bindings-\${{ matrix.settings.target }} + path: . + + - name: List packages + run: ls -R . + shell: bash + + - name: Test bindings + run: yarn test + + test-linux-x64-gnu-binding: + name: Test bindings on Linux-x64-gnu - node@\${{ matrix.node }} + needs: + - build + strategy: + fail-fast: false + matrix: + node: ['18', '20'] + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version: \${{ matrix.node }} + cache: 'yarn' + + - name: 'Install dependencies' + run: yarn install + + - name: Download artifacts + uses: actions/download-artifact@v4 + with: + name: bindings-x86_64-unknown-linux-gnu + path: . + + - name: List packages + run: ls -R . + shell: bash + + - name: Test bindings + run: docker run --rm -v $(pwd):/build -w /build node:\${{ matrix.node }}-slim yarn test + + test-linux-x64-musl-binding: + name: Test bindings on x86_64-unknown-linux-musl - node@\${{ matrix.node }} + needs: + - build + strategy: + fail-fast: false + matrix: + node: ['18', '20'] + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version: \${{ matrix.node }} + cache: 'yarn' + + - name: 'Install dependencies' + run: | + yarn config set supportedArchitectures.libc "musl" + yarn install + + - name: Download artifacts + uses: actions/download-artifact@v4 + with: + name: bindings-x86_64-unknown-linux-musl + path: . + + - name: List packages + run: ls -R . + shell: bash + + - name: Test bindings + run: docker run --rm -v $(pwd):/build -w /build node:\${{ matrix.node }}-alpine yarn test + + test-linux-aarch64-gnu-binding: + name: Test bindings on aarch64-unknown-linux-gnu - node@\${{ matrix.node }} + needs: + - build + strategy: + fail-fast: false + matrix: + node: ['18', '20'] + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Download artifacts + uses: actions/download-artifact@v4 + with: + name: bindings-aarch64-unknown-linux-gnu + path: . + + - name: List packages + run: ls -R . + shell: bash + + - name: Install dependencies + run: | + yarn config set supportedArchitectures.cpu "arm64" + yarn config set supportedArchitectures.libc "glibc" + yarn install + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + with: + platforms: arm64 + - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + + - name: Setup and run tests + uses: addnab/docker-run-action@v3 + with: + image: node:\${{ matrix.node }}-slim + options: --platform linux/arm64 -v \${{ github.workspace }}:/build -w /build + run: | + set -e + yarn test + ls -la + + test-linux-aarch64-musl-binding: + name: Test bindings on aarch64-unknown-linux-musl - node@\${{ matrix.node }} + needs: + - build + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Download artifacts + uses: actions/download-artifact@v4 + with: + name: bindings-aarch64-unknown-linux-musl + path: . + + - name: List packages + run: ls -R . + shell: bash + + - name: Install dependencies + run: | + yarn config set supportedArchitectures.cpu "arm64" + yarn config set supportedArchitectures.libc "musl" + yarn install + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + with: + platforms: arm64 + - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + + - name: Setup and run tests + uses: addnab/docker-run-action@v3 + with: + image: node:lts-alpine + options: --platform linux/arm64 -v \${{ github.workspace }}:/build -w /build + run: | + set -e + yarn test + + test-linux-arm-gnueabihf-binding: + name: Test bindings on armv7-unknown-linux-gnueabihf - node@\${{ matrix.node }} + needs: + - build + strategy: + fail-fast: false + matrix: + node: ['18', '20'] + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Download artifacts + uses: actions/download-artifact@v4 + with: + name: bindings-armv7-unknown-linux-gnueabihf + path: . + + - name: List packages + run: ls -R . + shell: bash + + - name: Install dependencies + run: | + yarn config set supportedArchitectures.cpu "arm" + yarn install + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + with: + platforms: arm + - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + + - name: Setup and run tests + uses: addnab/docker-run-action@v3 + with: + image: node:\${{ matrix.node }}-bullseye-slim + options: --platform linux/arm/v7 -v \${{ github.workspace }}:/build -w /build + run: | + set -e + yarn test + ls -la + + universal-macOS: + name: Build universal macOS binary + needs: + - build + runs-on: macos-latest + + steps: + - uses: actions/checkout@v4 + + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: yarn + + - name: 'Install dependencies' + run: yarn install + + - name: Download macOS x64 artifact + uses: actions/download-artifact@v4 + with: + name: bindings-x86_64-apple-darwin + path: artifacts + - name: Download macOS arm64 artifact + uses: actions/download-artifact@v4 + with: + name: bindings-aarch64-apple-darwin + path: artifacts + + - name: Combine binaries + run: yarn universal + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: bindings-universal-apple-darwin + path: \${{ env.APP_NAME }}.*.node + if-no-files-found: error + + publish: + name: Publish + runs-on: ubuntu-latest + needs: + - test-linux-x64-gnu-binding + - test-linux-x64-musl-binding + - test-linux-aarch64-gnu-binding + - test-linux-arm-gnueabihf-binding + - test-macOS-windows-binding + - test-linux-aarch64-musl-binding + - build-freebsd + + steps: + - uses: actions/checkout@v4 + + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'yarn' + + - name: 'Install dependencies' + run: yarn install + + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: artifacts + + - name: Move artifacts + run: yarn artifacts + + - name: List packages + run: ls -R ./npm + shell: bash + + - name: Publish + run: | + npm config set provenance true + if git log -1 --pretty=%B | grep "^[0-9]\\+\\.[0-9]\\+\\.[0-9]\\+$"; + then + echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc + npm publish --access public + elif git log -1 --pretty=%B | grep "^[0-9]\\+\\.[0-9]\\+\\.[0-9]\\+"; + then + echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc + npm publish --tag next --access public + else + echo "Not a release, skipping publish" + fi + env: + GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: \${{ secrets.NPM_TOKEN }} +`; + +const BUILD_FREEBSD = 'build-freebsd'; +const TEST_MACOS_WINDOWS = 'test-macOS-windows-binding'; +const TEST_LINUX_X64_GNU = 'test-linux-x64-gnu-binding'; +const TEST_LINUX_X64_MUSL = 'test-linux-x64-musl-binding'; +const TEST_LINUX_AARCH64_GNU = 'test-linux-aarch64-gnu-binding'; +const TEST_LINUX_AARCH64_MUSL = 'test-linux-aarch64-musl-binding'; +const TEST_LINUX_ARM_GNUEABIHF = 'test-linux-arm-gnueabihf-binding'; +const UNIVERSAL_MACOS = 'universal-macOS'; +const createGithubActionsCIYml = (binaryName, targets) => { + const allTargets = new Set(targets.flatMap((t) => { + var _a; + const platform = parseTriple(t); + if (platform.arch === 'universal') { + const srcTriples = (_a = UniArchsByPlatform[platform.platform]) === null || _a === void 0 ? void 0 : _a.map((arch) => t.replace('universal', NodeArchToCpu[arch])); + return [t, ...(srcTriples !== null && srcTriples !== void 0 ? srcTriples : [])]; + } + return [t]; + })); + const fullTemplate = load(YAML(binaryName)); + const requiredSteps = []; + const enableWindowsX86 = allTargets.has('x86_64-pc-windows-msvc'); + const enableMacOSX86 = allTargets.has('x86_64-apple-darwin'); + const enableLinuxX86Gnu = allTargets.has('x86_64-unknown-linux-gnu'); + const enableLinuxX86Musl = allTargets.has('x86_64-unknown-linux-musl'); + const enableLinuxArm8Gnu = allTargets.has('aarch64-unknown-linux-gnu'); + const enableLinuxArm8Musl = allTargets.has('aarch64-unknown-linux-musl'); + const enableLinuxArm7 = allTargets.has('armv7-unknown-linux-gnueabihf'); + const enableFreeBSD = allTargets.has('x86_64-unknown-freebsd'); + const enableMacOSUni = allTargets.has('universal-apple-darwin'); + fullTemplate.env.APP_NAME = binaryName; + fullTemplate.jobs.build.strategy.matrix.settings = + fullTemplate.jobs.build.strategy.matrix.settings.filter(({ target }) => allTargets.has(target)); + if (!fullTemplate.jobs.build.strategy.matrix.settings.length) { + delete fullTemplate.jobs.build.strategy.matrix; + } + if (!enableFreeBSD) { + delete fullTemplate.jobs[BUILD_FREEBSD]; + } + else { + requiredSteps.push(BUILD_FREEBSD); + } + if (!enableWindowsX86 && !enableMacOSX86) { + delete fullTemplate.jobs[TEST_MACOS_WINDOWS]; + } + else { + const filterTargets = new Set(); + if (enableWindowsX86) { + filterTargets.add('windows-latest'); + } + if (enableMacOSX86 || enableMacOSUni) { + filterTargets.add('macos-latest'); + } + fullTemplate.jobs[TEST_MACOS_WINDOWS].strategy.matrix.settings = + fullTemplate.jobs[TEST_MACOS_WINDOWS].strategy.matrix.settings.filter(({ host }) => filterTargets.has(host)); + requiredSteps.push(TEST_MACOS_WINDOWS); + } + if (!enableLinuxX86Gnu) { + delete fullTemplate.jobs[TEST_LINUX_X64_GNU]; + } + else { + requiredSteps.push(TEST_LINUX_X64_GNU); + } + if (!enableLinuxX86Musl) { + delete fullTemplate.jobs[TEST_LINUX_X64_MUSL]; + } + else { + requiredSteps.push(TEST_LINUX_X64_MUSL); + } + if (!enableLinuxArm8Gnu) { + delete fullTemplate.jobs[TEST_LINUX_AARCH64_GNU]; + } + else { + requiredSteps.push(TEST_LINUX_AARCH64_GNU); + } + if (!enableLinuxArm8Musl) { + delete fullTemplate.jobs[TEST_LINUX_AARCH64_MUSL]; + } + else { + requiredSteps.push(TEST_LINUX_AARCH64_MUSL); + } + if (!enableLinuxArm7) { + delete fullTemplate.jobs[TEST_LINUX_ARM_GNUEABIHF]; + } + else { + requiredSteps.push(TEST_LINUX_ARM_GNUEABIHF); + } + if (!enableMacOSUni) { + delete fullTemplate.jobs[UNIVERSAL_MACOS]; + } + else { + requiredSteps.push(UNIVERSAL_MACOS); + } + fullTemplate.jobs.publish.needs = requiredSteps; + return dump(fullTemplate, { + lineWidth: 1000, + }); +}; + +const GitIgnore = `# Created by https://www.toptal.com/developers/gitignore/api/node +# Edit at https://www.toptal.com/developers/gitignore?templates=node + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# End of https://www.toptal.com/developers/gitignore/api/node + +# Created by https://www.toptal.com/developers/gitignore/api/macos +# Edit at https://www.toptal.com/developers/gitignore?templates=macos + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +# End of https://www.toptal.com/developers/gitignore/api/macos + +# Created by https://www.toptal.com/developers/gitignore/api/windows +# Edit at https://www.toptal.com/developers/gitignore?templates=windows + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# End of https://www.toptal.com/developers/gitignore/api/windows + +#Added by cargo + +/target +Cargo.lock + +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions + +*.node +`; + +const LibRs = `#![deny(clippy::all)] + +#[macro_use] +extern crate napi_derive; + +#[napi] +pub fn sum(a: i32, b: i32) -> i32 { + a + b +} +`; + +const NPMIgnoreFiles = `target +Cargo.lock +.cargo +.github +npm +.eslintrc +.prettierignore +rustfmt.toml +yarn.lock +*.node +.yarn +__test__ +renovate.json +`; + +const createPackageJson = (name, binaryName, targets) => { + const pkgContent = { + name, + version: '0.0.0', + main: 'index.js', + types: 'index.d.ts', + napi: { + name: binaryName, + }, + license: 'MIT', + devDependencies: { + '@napi-rs/cli': `^${version$1}`, + ava: '^6.0.1', + }, + ava: { + timeout: '3m', + }, + engines: { + node: '>= 10', + }, + scripts: { + artifacts: 'napi artifacts', + build: 'napi build --platform --release', + 'build:debug': 'napi build --platform', + prepublishOnly: 'napi prepublish -t npm', + test: 'ava', + universal: 'napi universal', + version: 'napi version', + }, + }; + const triples = {}; + const defaultTargetsSupported = DefaultPlatforms.every((p) => targets.includes(p.raw)); + const isOnlyDefaultTargets = targets.length === 3 && + DefaultPlatforms.every((p) => targets.includes(p.raw)); + if (!isOnlyDefaultTargets) { + if (!defaultTargetsSupported) { + triples.defaults = false; + triples.additional = targets; + } + else { + triples.additional = targets.filter((t) => !DefaultPlatforms.map((p) => p.raw).includes(t)); + } + } + // @ts-expect-error + pkgContent.napi.triples = triples; + return pkgContent; +}; + +const NAME_PROMOTE_NAME = 'Package name'; +const DIR_PROMOTE_NAME = 'Dir name'; +const ENABLE_GITHUB_ACTIONS_PROMOTE_NAME = 'Enable github actions'; +const debug$5 = debugFactory('create'); +const BUILD_RS = `extern crate napi_build; + +fn main() { + napi_build::setup(); +} +`; +const SupportedPlatforms = [ + 'aarch64-apple-darwin', + 'aarch64-linux-android', + 'aarch64-unknown-linux-gnu', + 'aarch64-unknown-linux-musl', + 'aarch64-pc-windows-msvc', + 'armv7-unknown-linux-gnueabihf', + 'armv7-unknown-linux-musleabihf', + 'x86_64-apple-darwin', + 'x86_64-pc-windows-msvc', + 'x86_64-unknown-linux-gnu', + 'x86_64-unknown-linux-musl', + 'x86_64-unknown-freebsd', + 'i686-pc-windows-msvc', + 'armv7-linux-androideabi', + 'universal-apple-darwin', + 'riscv64gc-unknown-linux-gnu', +]; +class NewProjectCommand extends Command { + constructor() { + super(...arguments); + this.name = String$1({ + name: '-n,--name', + required: false, + }); + this.dirname = String$1({ + name: '-d,--dirname', + required: false, + }); + this.targets = Array$1('--targets,-t'); + this.dryRun = Boolean$1(`--dry-run`, false); + this.enableGithubActions = Boolean$1(`--enable-github-actions`); + } + execute() { + var _a, _b; + return __awaiter$1(this, void 0, void 0, function* () { + yield this.getName(); + if (!this.dirname) { + const [scope, name] = (_b = (_a = this.name) === null || _a === void 0 ? void 0 : _a.split('/')) !== null && _b !== void 0 ? _b : []; + const defaultProjectDir = name !== null && name !== void 0 ? name : scope; + const dirAnswer = yield inquirer.prompt({ + type: 'input', + name: DIR_PROMOTE_NAME, + default: defaultProjectDir, + }); + this.dirname = dirAnswer[DIR_PROMOTE_NAME]; + } + if (!this.targets) { + const { targets } = yield inquirer.prompt([ + { + type: 'checkbox', + name: 'targets', + message: 'Choose targets you want to support', + default: DefaultPlatforms.map((p) => p.raw), + choices: SupportedPlatforms, + }, + ]); + if (!targets.length) { + throw new TypeError('At least choose one target'); + } + this.targets = targets; + } + if (this.enableGithubActions === undefined) { + const answer = yield inquirer.prompt([ + { + type: 'confirm', + name: ENABLE_GITHUB_ACTIONS_PROMOTE_NAME, + message: 'Enable github actions?', + default: true, + choices: SupportedPlatforms, + }, + ]); + this.enableGithubActions = answer[ENABLE_GITHUB_ACTIONS_PROMOTE_NAME]; + } + debug$5(`Running command: ${green('[${command}]')}`); + if (!this.dryRun) { + require$$0$2.mkdirSync(path$1.join(process.cwd(), this.dirname), { + recursive: true, + }); + require$$0$2.mkdirSync(path$1.join(process.cwd(), this.dirname, 'src'), { + recursive: true, + }); + } + const [s, pkgName] = this.name.split('/'); + const binaryName = pkgName !== null && pkgName !== void 0 ? pkgName : s; + this.writeFile('Cargo.toml', createCargoContent(this.name)); + this.writeFile('.npmignore', NPMIgnoreFiles); + this.writeFile('build.rs', BUILD_RS); + this.writeFile('package.json', JSON.stringify(createPackageJson(this.name, binaryName, this.targets), null, 2)); + this.writeFile('src/lib.rs', LibRs); + require$$0$2.mkdirSync(path$1.join(process.cwd(), this.dirname, '__test__'), { + recursive: true, + }); + this.writeFile('__test__/index.spec.mjs', `import test from 'ava' + +import { sum } from '../index.js' + +test('sum from native', (t) => { + t.is(sum(1, 2), 3) +}) +`); + if (this.enableGithubActions) { + const githubDir = path$1.join(process.cwd(), this.dirname, '.github'); + const workflowsDir = path$1.join(githubDir, 'workflows'); + if (!this.dryRun) { + require$$0$2.mkdirSync(githubDir, { recursive: true }); + require$$0$2.mkdirSync(workflowsDir, { recursive: true }); + } + this.writeFile(path$1.join('.github', 'workflows', 'CI.yml'), createGithubActionsCIYml(binaryName, this.targets)); + } + yield CreateNpmDirCommand.create('package.json', path$1.join(process.cwd(), this.dirname), path$1.join(process.cwd(), this.dirname)); + const enableLinuxArm8Musl = this.targets.includes('aarch64-unknown-linux-musl'); + const enableWindowsX64 = this.targets.includes('x86_64-pc-windows-msvc'); + const cargoConfig = createCargoConfig(enableLinuxArm8Musl, enableWindowsX64); + if (cargoConfig.length) { + const configDir = path$1.join(process.cwd(), this.dirname, '.cargo'); + if (!this.dryRun) { + require$$0$2.mkdirSync(configDir, { recursive: true }); + this.writeFile(path$1.join('.cargo', 'config.toml'), cargoConfig); + } + } + this.writeFile('rustfmt.toml', `tab_spaces = 2 +edition = "2021" +`); + this.writeFile('.gitignore', GitIgnore); + this.writeFile('.yarnrc.yml', 'nodeLinker: node-modules'); + yield spawn(`yarn set version stable --yarn-path`, { + cwd: path$1.join(process.cwd(), this.dirname), + }); + yield spawn(`yarn install`, { + cwd: path$1.join(process.cwd(), this.dirname), + }); + }); + } + writeFile(path, content) { + const distDir = path$1.join(process.cwd(), this.dirname); + this.context.stdout.write(green(`Writing ${blue(path)}\n`)); + if (!this.dryRun) { + require$$0$2.writeFileSync(path$1.join(distDir, path), content); + } + } + getName() { + return __awaiter$1(this, void 0, void 0, function* () { + if (!this.name) { + const nameAnswer = yield inquirer.prompt({ + type: 'input', + name: NAME_PROMOTE_NAME, + suffix: ' (The name filed in your package.json)', + }); + const name = nameAnswer[NAME_PROMOTE_NAME]; + if (!name) { + yield this.getName(); + } + else { + this.name = name; + } + } + }); + } +} +NewProjectCommand.usage = Command.Usage({ + description: 'Create a new project from scratch', +}); +NewProjectCommand.paths = [['new']]; + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && process.version !== undefined) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${ + process.arch + })`; + } + + return ""; +} + +// @ts-check + +function register(state, name, method, options) { + if (typeof method !== "function") { + throw new Error("method for before hook must be a function"); + } + + if (!options) { + options = {}; + } + + if (Array.isArray(name)) { + return name.reverse().reduce((callback, name) => { + return register.bind(null, state, name, callback, options); + }, method)(); + } + + return Promise.resolve().then(() => { + if (!state.registry[name]) { + return method(options); + } + + return state.registry[name].reduce((method, registered) => { + return registered.hook.bind(null, method, options); + }, method)(); + }); +} + +// @ts-check + +function addHook(state, kind, name, hook) { + const orig = hook; + if (!state.registry[name]) { + state.registry[name] = []; + } + + if (kind === "before") { + hook = (method, options) => { + return Promise.resolve() + .then(orig.bind(null, options)) + .then(method.bind(null, options)); + }; + } + + if (kind === "after") { + hook = (method, options) => { + let result; + return Promise.resolve() + .then(method.bind(null, options)) + .then((result_) => { + result = result_; + return orig(result, options); + }) + .then(() => { + return result; + }); + }; + } + + if (kind === "error") { + hook = (method, options) => { + return Promise.resolve() + .then(method.bind(null, options)) + .catch((error) => { + return orig(error, options); + }); + }; + } + + state.registry[name].push({ + hook: hook, + orig: orig, + }); +} + +// @ts-check + +function removeHook(state, name, method) { + if (!state.registry[name]) { + return; + } + + const index = state.registry[name] + .map((registered) => { + return registered.orig; + }) + .indexOf(method); + + if (index === -1) { + return; + } + + state.registry[name].splice(index, 1); +} + +// @ts-check + + +// bind with array of arguments: https://stackoverflow.com/a/21792913 +const bind = Function.bind; +const bindable = bind.bind(bind); + +function bindApi(hook, state, name) { + const removeHookRef = bindable(removeHook, null).apply( + null, + name ? [state, name] : [state] + ); + hook.api = { remove: removeHookRef }; + hook.remove = removeHookRef; + ["before", "error", "after", "wrap"].forEach((kind) => { + const args = name ? [state, kind, name] : [state, kind]; + hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args); + }); +} + +function Singular() { + const singularHookName = Symbol("Singular"); + const singularHookState = { + registry: {}, + }; + const singularHook = register.bind(null, singularHookState, singularHookName); + bindApi(singularHook, singularHookState, singularHookName); + return singularHook; +} + +function Collection() { + const state = { + registry: {}, + }; + + const hook = register.bind(null, state); + bindApi(hook, state); + + return hook; +} + +var Hook = { Singular, Collection }; + +// pkg/dist-src/defaults.js + +// pkg/dist-src/version.js +var VERSION$7 = "0.0.0-development"; + +// pkg/dist-src/defaults.js +var userAgent = `octokit-endpoint.js/${VERSION$7} ${getUserAgent()}`; +var DEFAULTS = { + method: "GET", + baseUrl: "https://api.github.com", + headers: { + accept: "application/vnd.github.v3+json", + "user-agent": userAgent + }, + mediaType: { + format: "" + } +}; + +// pkg/dist-src/util/lowercase-keys.js +function lowercaseKeys(object) { + if (!object) { + return {}; + } + return Object.keys(object).reduce((newObj, key) => { + newObj[key.toLowerCase()] = object[key]; + return newObj; + }, {}); +} + +// pkg/dist-src/util/is-plain-object.js +function isPlainObject$1(value) { + if (typeof value !== "object" || value === null) + return false; + if (Object.prototype.toString.call(value) !== "[object Object]") + return false; + const proto = Object.getPrototypeOf(value); + if (proto === null) + return true; + const Ctor = Object.prototype.hasOwnProperty.call(proto, "constructor") && proto.constructor; + return typeof Ctor === "function" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value); +} + +// pkg/dist-src/util/merge-deep.js +function mergeDeep(defaults, options) { + const result = Object.assign({}, defaults); + Object.keys(options).forEach((key) => { + if (isPlainObject$1(options[key])) { + if (!(key in defaults)) + Object.assign(result, { [key]: options[key] }); + else + result[key] = mergeDeep(defaults[key], options[key]); + } else { + Object.assign(result, { [key]: options[key] }); + } + }); + return result; +} + +// pkg/dist-src/util/remove-undefined-properties.js +function removeUndefinedProperties(obj) { + for (const key in obj) { + if (obj[key] === void 0) { + delete obj[key]; + } + } + return obj; +} + +// pkg/dist-src/merge.js +function merge(defaults, route, options) { + if (typeof route === "string") { + let [method, url] = route.split(" "); + options = Object.assign(url ? { method, url } : { url: method }, options); + } else { + options = Object.assign({}, route); + } + options.headers = lowercaseKeys(options.headers); + removeUndefinedProperties(options); + removeUndefinedProperties(options.headers); + const mergedOptions = mergeDeep(defaults || {}, options); + if (options.url === "/graphql") { + if (defaults && defaults.mediaType.previews?.length) { + mergedOptions.mediaType.previews = defaults.mediaType.previews.filter( + (preview) => !mergedOptions.mediaType.previews.includes(preview) + ).concat(mergedOptions.mediaType.previews); + } + mergedOptions.mediaType.previews = (mergedOptions.mediaType.previews || []).map((preview) => preview.replace(/-preview/, "")); + } + return mergedOptions; +} + +// pkg/dist-src/util/add-query-parameters.js +function addQueryParameters(url, parameters) { + const separator = /\?/.test(url) ? "&" : "?"; + const names = Object.keys(parameters); + if (names.length === 0) { + return url; + } + return url + separator + names.map((name) => { + if (name === "q") { + return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+"); + } + return `${name}=${encodeURIComponent(parameters[name])}`; + }).join("&"); +} + +// pkg/dist-src/util/extract-url-variable-names.js +var urlVariableRegex = /\{[^}]+\}/g; +function removeNonChars(variableName) { + return variableName.replace(/^\W+|\W+$/g, "").split(/,/); +} +function extractUrlVariableNames(url) { + const matches = url.match(urlVariableRegex); + if (!matches) { + return []; + } + return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []); +} + +// pkg/dist-src/util/omit.js +function omit(object, keysToOmit) { + const result = { __proto__: null }; + for (const key of Object.keys(object)) { + if (keysToOmit.indexOf(key) === -1) { + result[key] = object[key]; + } + } + return result; +} + +// pkg/dist-src/util/url-template.js +function encodeReserved(str) { + return str.split(/(%[0-9A-Fa-f]{2})/g).map(function(part) { + if (!/%[0-9A-Fa-f]/.test(part)) { + part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]"); + } + return part; + }).join(""); +} +function encodeUnreserved(str) { + return encodeURIComponent(str).replace(/[!'()*]/g, function(c) { + return "%" + c.charCodeAt(0).toString(16).toUpperCase(); + }); +} +function encodeValue(operator, value, key) { + value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value); + if (key) { + return encodeUnreserved(key) + "=" + value; + } else { + return value; + } +} +function isDefined(value) { + return value !== void 0 && value !== null; +} +function isKeyOperator(operator) { + return operator === ";" || operator === "&" || operator === "?"; +} +function getValues(context, operator, key, modifier) { + var value = context[key], result = []; + if (isDefined(value) && value !== "") { + if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") { + value = value.toString(); + if (modifier && modifier !== "*") { + value = value.substring(0, parseInt(modifier, 10)); + } + result.push( + encodeValue(operator, value, isKeyOperator(operator) ? key : "") + ); + } else { + if (modifier === "*") { + if (Array.isArray(value)) { + value.filter(isDefined).forEach(function(value2) { + result.push( + encodeValue(operator, value2, isKeyOperator(operator) ? key : "") + ); + }); + } else { + Object.keys(value).forEach(function(k) { + if (isDefined(value[k])) { + result.push(encodeValue(operator, value[k], k)); + } + }); + } + } else { + const tmp = []; + if (Array.isArray(value)) { + value.filter(isDefined).forEach(function(value2) { + tmp.push(encodeValue(operator, value2)); + }); + } else { + Object.keys(value).forEach(function(k) { + if (isDefined(value[k])) { + tmp.push(encodeUnreserved(k)); + tmp.push(encodeValue(operator, value[k].toString())); + } + }); + } + if (isKeyOperator(operator)) { + result.push(encodeUnreserved(key) + "=" + tmp.join(",")); + } else if (tmp.length !== 0) { + result.push(tmp.join(",")); + } + } + } + } else { + if (operator === ";") { + if (isDefined(value)) { + result.push(encodeUnreserved(key)); + } + } else if (value === "" && (operator === "&" || operator === "?")) { + result.push(encodeUnreserved(key) + "="); + } else if (value === "") { + result.push(""); + } + } + return result; +} +function parseUrl(template) { + return { + expand: expand.bind(null, template) + }; +} +function expand(template, context) { + var operators = ["+", "#", ".", "/", ";", "?", "&"]; + template = template.replace( + /\{([^\{\}]+)\}|([^\{\}]+)/g, + function(_, expression, literal) { + if (expression) { + let operator = ""; + const values = []; + if (operators.indexOf(expression.charAt(0)) !== -1) { + operator = expression.charAt(0); + expression = expression.substr(1); + } + expression.split(/,/g).forEach(function(variable) { + var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable); + values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3])); + }); + if (operator && operator !== "+") { + var separator = ","; + if (operator === "?") { + separator = "&"; + } else if (operator !== "#") { + separator = operator; + } + return (values.length !== 0 ? operator : "") + values.join(separator); + } else { + return values.join(","); + } + } else { + return encodeReserved(literal); + } + } + ); + if (template === "/") { + return template; + } else { + return template.replace(/\/$/, ""); + } +} + +// pkg/dist-src/parse.js +function parse(options) { + let method = options.method.toUpperCase(); + let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{$1}"); + let headers = Object.assign({}, options.headers); + let body; + let parameters = omit(options, [ + "method", + "baseUrl", + "url", + "headers", + "request", + "mediaType" + ]); + const urlVariableNames = extractUrlVariableNames(url); + url = parseUrl(url).expand(parameters); + if (!/^http/.test(url)) { + url = options.baseUrl + url; + } + const omittedParameters = Object.keys(options).filter((option) => urlVariableNames.includes(option)).concat("baseUrl"); + const remainingParameters = omit(parameters, omittedParameters); + const isBinaryRequest = /application\/octet-stream/i.test(headers.accept); + if (!isBinaryRequest) { + if (options.mediaType.format) { + headers.accept = headers.accept.split(/,/).map( + (format) => format.replace( + /application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, + `application/vnd$1$2.${options.mediaType.format}` + ) + ).join(","); + } + if (url.endsWith("/graphql")) { + if (options.mediaType.previews?.length) { + const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || []; + headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map((preview) => { + const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json"; + return `application/vnd.github.${preview}-preview${format}`; + }).join(","); + } + } + } + if (["GET", "HEAD"].includes(method)) { + url = addQueryParameters(url, remainingParameters); + } else { + if ("data" in remainingParameters) { + body = remainingParameters.data; + } else { + if (Object.keys(remainingParameters).length) { + body = remainingParameters; + } + } + } + if (!headers["content-type"] && typeof body !== "undefined") { + headers["content-type"] = "application/json; charset=utf-8"; + } + if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") { + body = ""; + } + return Object.assign( + { method, url, headers }, + typeof body !== "undefined" ? { body } : null, + options.request ? { request: options.request } : null + ); +} + +// pkg/dist-src/endpoint-with-defaults.js +function endpointWithDefaults(defaults, route, options) { + return parse(merge(defaults, route, options)); +} + +// pkg/dist-src/with-defaults.js +function withDefaults$2(oldDefaults, newDefaults) { + const DEFAULTS2 = merge(oldDefaults, newDefaults); + const endpoint2 = endpointWithDefaults.bind(null, DEFAULTS2); + return Object.assign(endpoint2, { + DEFAULTS: DEFAULTS2, + defaults: withDefaults$2.bind(null, DEFAULTS2), + merge: merge.bind(null, DEFAULTS2), + parse + }); +} + +// pkg/dist-src/index.js +var endpoint = withDefaults$2(null, DEFAULTS); + +class RequestError extends Error { + name; + /** + * http status code + */ + status; + /** + * Request options that lead to the error. + */ + request; + /** + * Response object if a response was received + */ + response; + constructor(message, statusCode, options) { + super(message); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + this.name = "HttpError"; + this.status = statusCode; + if ("response" in options) { + this.response = options.response; + } + const requestCopy = Object.assign({}, options.request); + if (options.request.headers.authorization) { + requestCopy.headers = Object.assign({}, options.request.headers, { + authorization: options.request.headers.authorization.replace( + / .*$/, + " [REDACTED]" + ) + }); + } + requestCopy.url = requestCopy.url.replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]").replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); + this.request = requestCopy; + } +} + +// pkg/dist-src/index.js + +// pkg/dist-src/version.js +var VERSION$6 = "0.0.0-development"; + +// pkg/dist-src/is-plain-object.js +function isPlainObject(value) { + if (typeof value !== "object" || value === null) + return false; + if (Object.prototype.toString.call(value) !== "[object Object]") + return false; + const proto = Object.getPrototypeOf(value); + if (proto === null) + return true; + const Ctor = Object.prototype.hasOwnProperty.call(proto, "constructor") && proto.constructor; + return typeof Ctor === "function" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value); +} + +// pkg/dist-src/get-buffer-response.js +function getBufferResponse(response) { + return response.arrayBuffer(); +} + +// pkg/dist-src/fetch-wrapper.js +function fetchWrapper(requestOptions) { + const log = requestOptions.request && requestOptions.request.log ? requestOptions.request.log : console; + const parseSuccessResponseBody = requestOptions.request?.parseSuccessResponseBody !== false; + if (isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) { + requestOptions.body = JSON.stringify(requestOptions.body); + } + let headers = {}; + let status; + let url; + let { fetch } = globalThis; + if (requestOptions.request?.fetch) { + fetch = requestOptions.request.fetch; + } + if (!fetch) { + throw new Error( + "fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing" + ); + } + return fetch(requestOptions.url, { + method: requestOptions.method, + body: requestOptions.body, + redirect: requestOptions.request?.redirect, + // Header values must be `string` + headers: Object.fromEntries( + Object.entries(requestOptions.headers).map(([name, value]) => [ + name, + String(value) + ]) + ), + signal: requestOptions.request?.signal, + // duplex must be set if request.body is ReadableStream or Async Iterables. + // See https://fetch.spec.whatwg.org/#dom-requestinit-duplex. + ...requestOptions.body && { duplex: "half" } + }).then(async (response) => { + url = response.url; + status = response.status; + for (const keyAndValue of response.headers) { + headers[keyAndValue[0]] = keyAndValue[1]; + } + if ("deprecation" in headers) { + const matches = headers.link && headers.link.match(/<([^>]+)>; rel="deprecation"/); + const deprecationLink = matches && matches.pop(); + log.warn( + `[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}` + ); + } + if (status === 204 || status === 205) { + return; + } + if (requestOptions.method === "HEAD") { + if (status < 400) { + return; + } + throw new RequestError(response.statusText, status, { + response: { + url, + status, + headers, + data: void 0 + }, + request: requestOptions + }); + } + if (status === 304) { + throw new RequestError("Not modified", status, { + response: { + url, + status, + headers, + data: await getResponseData(response) + }, + request: requestOptions + }); + } + if (status >= 400) { + const data = await getResponseData(response); + const error = new RequestError(toErrorMessage(data), status, { + response: { + url, + status, + headers, + data + }, + request: requestOptions + }); + throw error; + } + return parseSuccessResponseBody ? await getResponseData(response) : response.body; + }).then((data) => { + return { + status, + url, + headers, + data + }; + }).catch((error) => { + if (error instanceof RequestError) + throw error; + else if (error.name === "AbortError") + throw error; + let message = error.message; + if (error.name === "TypeError" && "cause" in error) { + if (error.cause instanceof Error) { + message = error.cause.message; + } else if (typeof error.cause === "string") { + message = error.cause; + } + } + throw new RequestError(message, 500, { + request: requestOptions + }); + }); +} +async function getResponseData(response) { + const contentType = response.headers.get("content-type"); + if (/application\/json/.test(contentType)) { + return response.json().catch(() => response.text()).catch(() => ""); + } + if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { + return response.text(); + } + return getBufferResponse(response); +} +function toErrorMessage(data) { + if (typeof data === "string") + return data; + let suffix; + if ("documentation_url" in data) { + suffix = ` - ${data.documentation_url}`; + } else { + suffix = ""; + } + if ("message" in data) { + if (Array.isArray(data.errors)) { + return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}${suffix}`; + } + return `${data.message}${suffix}`; + } + return `Unknown error: ${JSON.stringify(data)}`; +} + +// pkg/dist-src/with-defaults.js +function withDefaults$1(oldEndpoint, newDefaults) { + const endpoint2 = oldEndpoint.defaults(newDefaults); + const newApi = function(route, parameters) { + const endpointOptions = endpoint2.merge(route, parameters); + if (!endpointOptions.request || !endpointOptions.request.hook) { + return fetchWrapper(endpoint2.parse(endpointOptions)); + } + const request2 = (route2, parameters2) => { + return fetchWrapper( + endpoint2.parse(endpoint2.merge(route2, parameters2)) + ); + }; + Object.assign(request2, { + endpoint: endpoint2, + defaults: withDefaults$1.bind(null, endpoint2) + }); + return endpointOptions.request.hook(request2, endpointOptions); + }; + return Object.assign(newApi, { + endpoint: endpoint2, + defaults: withDefaults$1.bind(null, endpoint2) + }); +} + +// pkg/dist-src/index.js +var request = withDefaults$1(endpoint, { + headers: { + "user-agent": `octokit-request.js/${VERSION$6} ${getUserAgent()}` + } +}); + +// pkg/dist-src/index.js + +// pkg/dist-src/version.js +var VERSION$5 = "0.0.0-development"; + +// pkg/dist-src/error.js +function _buildMessageForResponseErrors(data) { + return `Request failed due to following response errors: +` + data.errors.map((e) => ` - ${e.message}`).join("\n"); +} +var GraphqlResponseError = class extends Error { + constructor(request2, headers, response) { + super(_buildMessageForResponseErrors(response)); + this.request = request2; + this.headers = headers; + this.response = response; + this.errors = response.errors; + this.data = response.data; + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + } + name = "GraphqlResponseError"; + errors; + data; +}; + +// pkg/dist-src/graphql.js +var NON_VARIABLE_OPTIONS = [ + "method", + "baseUrl", + "url", + "headers", + "request", + "query", + "mediaType" +]; +var FORBIDDEN_VARIABLE_OPTIONS = ["query", "method", "url"]; +var GHES_V3_SUFFIX_REGEX = /\/api\/v3\/?$/; +function graphql(request2, query, options) { + if (options) { + if (typeof query === "string" && "query" in options) { + return Promise.reject( + new Error(`[@octokit/graphql] "query" cannot be used as variable name`) + ); + } + for (const key in options) { + if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) + continue; + return Promise.reject( + new Error( + `[@octokit/graphql] "${key}" cannot be used as variable name` + ) + ); + } + } + const parsedOptions = typeof query === "string" ? Object.assign({ query }, options) : query; + const requestOptions = Object.keys( + parsedOptions + ).reduce((result, key) => { + if (NON_VARIABLE_OPTIONS.includes(key)) { + result[key] = parsedOptions[key]; + return result; + } + if (!result.variables) { + result.variables = {}; + } + result.variables[key] = parsedOptions[key]; + return result; + }, {}); + const baseUrl = parsedOptions.baseUrl || request2.endpoint.DEFAULTS.baseUrl; + if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) { + requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, "/api/graphql"); + } + return request2(requestOptions).then((response) => { + if (response.data.errors) { + const headers = {}; + for (const key of Object.keys(response.headers)) { + headers[key] = response.headers[key]; + } + throw new GraphqlResponseError( + requestOptions, + headers, + response.data + ); + } + return response.data.data; + }); +} + +// pkg/dist-src/with-defaults.js +function withDefaults(request2, newDefaults) { + const newRequest = request2.defaults(newDefaults); + const newApi = (query, options) => { + return graphql(newRequest, query, options); + }; + return Object.assign(newApi, { + defaults: withDefaults.bind(null, newRequest), + endpoint: newRequest.endpoint + }); +} + +// pkg/dist-src/index.js +withDefaults(request, { + headers: { + "user-agent": `octokit-graphql.js/${VERSION$5} ${getUserAgent()}` + }, + method: "POST", + url: "/graphql" +}); +function withCustomRequest(customRequest) { + return withDefaults(customRequest, { + method: "POST", + url: "/graphql" + }); +} + +// pkg/dist-src/auth.js +var REGEX_IS_INSTALLATION_LEGACY = /^v1\./; +var REGEX_IS_INSTALLATION = /^ghs_/; +var REGEX_IS_USER_TO_SERVER = /^ghu_/; +async function auth(token) { + const isApp = token.split(/\./).length === 3; + const isInstallation = REGEX_IS_INSTALLATION_LEGACY.test(token) || REGEX_IS_INSTALLATION.test(token); + const isUserToServer = REGEX_IS_USER_TO_SERVER.test(token); + const tokenType = isApp ? "app" : isInstallation ? "installation" : isUserToServer ? "user-to-server" : "oauth"; + return { + type: "token", + token, + tokenType + }; +} + +// pkg/dist-src/with-authorization-prefix.js +function withAuthorizationPrefix(token) { + if (token.split(/\./).length === 3) { + return `bearer ${token}`; + } + return `token ${token}`; +} + +// pkg/dist-src/hook.js +async function hook(token, request, route, parameters) { + const endpoint = request.endpoint.merge( + route, + parameters + ); + endpoint.headers.authorization = withAuthorizationPrefix(token); + return request(endpoint); +} + +// pkg/dist-src/index.js +var createTokenAuth = function createTokenAuth2(token) { + if (!token) { + throw new Error("[@octokit/auth-token] No token passed to createTokenAuth"); + } + if (typeof token !== "string") { + throw new Error( + "[@octokit/auth-token] Token passed to createTokenAuth is not a string" + ); + } + token = token.replace(/^(token|bearer) +/i, ""); + return Object.assign(auth.bind(null, token), { + hook: hook.bind(null, token) + }); +}; + +const VERSION$4 = "6.1.2"; + +const noop = () => { +}; +const consoleWarn = console.warn.bind(console); +const consoleError = console.error.bind(console); +const userAgentTrail = `octokit-core.js/${VERSION$4} ${getUserAgent()}`; +let Octokit$1 = class Octokit { + static VERSION = VERSION$4; + static defaults(defaults) { + const OctokitWithDefaults = class extends this { + constructor(...args) { + const options = args[0] || {}; + if (typeof defaults === "function") { + super(defaults(options)); + return; + } + super( + Object.assign( + {}, + defaults, + options, + options.userAgent && defaults.userAgent ? { + userAgent: `${options.userAgent} ${defaults.userAgent}` + } : null + ) + ); + } + }; + return OctokitWithDefaults; + } + static plugins = []; + /** + * Attach a plugin (or many) to your Octokit instance. + * + * @example + * const API = Octokit.plugin(plugin1, plugin2, plugin3, ...) + */ + static plugin(...newPlugins) { + const currentPlugins = this.plugins; + const NewOctokit = class extends this { + static plugins = currentPlugins.concat( + newPlugins.filter((plugin) => !currentPlugins.includes(plugin)) + ); + }; + return NewOctokit; + } + constructor(options = {}) { + const hook = new Hook.Collection(); + const requestDefaults = { + baseUrl: request.endpoint.DEFAULTS.baseUrl, + headers: {}, + request: Object.assign({}, options.request, { + // @ts-ignore internal usage only, no need to type + hook: hook.bind(null, "request") + }), + mediaType: { + previews: [], + format: "" + } + }; + requestDefaults.headers["user-agent"] = options.userAgent ? `${options.userAgent} ${userAgentTrail}` : userAgentTrail; + if (options.baseUrl) { + requestDefaults.baseUrl = options.baseUrl; + } + if (options.previews) { + requestDefaults.mediaType.previews = options.previews; + } + if (options.timeZone) { + requestDefaults.headers["time-zone"] = options.timeZone; + } + this.request = request.defaults(requestDefaults); + this.graphql = withCustomRequest(this.request).defaults(requestDefaults); + this.log = Object.assign( + { + debug: noop, + info: noop, + warn: consoleWarn, + error: consoleError + }, + options.log + ); + this.hook = hook; + if (!options.authStrategy) { + if (!options.auth) { + this.auth = async () => ({ + type: "unauthenticated" + }); + } else { + const auth = createTokenAuth(options.auth); + hook.wrap("request", auth.hook); + this.auth = auth; + } + } else { + const { authStrategy, ...otherOptions } = options; + const auth = authStrategy( + Object.assign( + { + request: this.request, + log: this.log, + // we pass the current octokit instance as well as its constructor options + // to allow for authentication strategies that return a new octokit instance + // that shares the same internal state as the current one. The original + // requirement for this was the "event-octokit" authentication strategy + // of https://github.com/probot/octokit-auth-probot. + octokit: this, + octokitOptions: otherOptions + }, + options.auth + ) + ); + hook.wrap("request", auth.hook); + this.auth = auth; + } + const classConstructor = this.constructor; + for (let i = 0; i < classConstructor.plugins.length; ++i) { + Object.assign(this, classConstructor.plugins[i](this, options)); + } + } + // assigned during constructor + request; + graphql; + log; + hook; + // TODO: type `octokit.auth` based on passed options.authStrategy + auth; +}; + +const VERSION$3 = "5.3.0"; + +function requestLog(octokit) { + octokit.hook.wrap("request", (request, options) => { + octokit.log.debug("request", options); + const start = Date.now(); + const requestOptions = octokit.request.endpoint.parse(options); + const path = requestOptions.url.replace(options.baseUrl, ""); + return request(options).then((response) => { + const requestId = response.headers["x-github-request-id"]; + octokit.log.info( + `${requestOptions.method} ${path} - ${response.status} with id ${requestId} in ${Date.now() - start}ms` + ); + return response; + }).catch((error) => { + const requestId = error.response.headers["x-github-request-id"] || "UNKNOWN"; + octokit.log.error( + `${requestOptions.method} ${path} - ${error.status} with id ${requestId} in ${Date.now() - start}ms` + ); + throw error; + }); + }); +} +requestLog.VERSION = VERSION$3; + +// pkg/dist-src/version.js +var VERSION$2 = "11.3.1"; + +// pkg/dist-src/normalize-paginated-list-response.js +function normalizePaginatedListResponse(response) { + if (!response.data) { + return { + ...response, + data: [] + }; + } + const responseNeedsNormalization = "total_count" in response.data && !("url" in response.data); + if (!responseNeedsNormalization) + return response; + const incompleteResults = response.data.incomplete_results; + const repositorySelection = response.data.repository_selection; + const totalCount = response.data.total_count; + delete response.data.incomplete_results; + delete response.data.repository_selection; + delete response.data.total_count; + const namespaceKey = Object.keys(response.data)[0]; + const data = response.data[namespaceKey]; + response.data = data; + if (typeof incompleteResults !== "undefined") { + response.data.incomplete_results = incompleteResults; + } + if (typeof repositorySelection !== "undefined") { + response.data.repository_selection = repositorySelection; + } + response.data.total_count = totalCount; + return response; +} + +// pkg/dist-src/iterator.js +function iterator(octokit, route, parameters) { + const options = typeof route === "function" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters); + const requestMethod = typeof route === "function" ? route : octokit.request; + const method = options.method; + const headers = options.headers; + let url = options.url; + return { + [Symbol.asyncIterator]: () => ({ + async next() { + if (!url) + return { done: true }; + try { + const response = await requestMethod({ method, url, headers }); + const normalizedResponse = normalizePaginatedListResponse(response); + url = ((normalizedResponse.headers.link || "").match( + /<([^>]+)>;\s*rel="next"/ + ) || [])[1]; + return { value: normalizedResponse }; + } catch (error) { + if (error.status !== 409) + throw error; + url = ""; + return { + value: { + status: 200, + headers: {}, + data: [] + } + }; + } + } + }) + }; +} + +// pkg/dist-src/paginate.js +function paginate(octokit, route, parameters, mapFn) { + if (typeof parameters === "function") { + mapFn = parameters; + parameters = void 0; + } + return gather( + octokit, + [], + iterator(octokit, route, parameters)[Symbol.asyncIterator](), + mapFn + ); +} +function gather(octokit, results, iterator2, mapFn) { + return iterator2.next().then((result) => { + if (result.done) { + return results; + } + let earlyExit = false; + function done() { + earlyExit = true; + } + results = results.concat( + mapFn ? mapFn(result.value, done) : result.value.data + ); + if (earlyExit) { + return results; + } + return gather(octokit, results, iterator2, mapFn); + }); +} + +// pkg/dist-src/compose-paginate.js +Object.assign(paginate, { + iterator +}); + +// pkg/dist-src/index.js +function paginateRest(octokit) { + return { + paginate: Object.assign(paginate.bind(null, octokit), { + iterator: iterator.bind(null, octokit) + }) + }; +} +paginateRest.VERSION = VERSION$2; + +const VERSION$1 = "13.2.2"; + +const Endpoints = { + actions: { + addCustomLabelsToSelfHostedRunnerForOrg: [ + "POST /orgs/{org}/actions/runners/{runner_id}/labels" + ], + addCustomLabelsToSelfHostedRunnerForRepo: [ + "POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" + ], + addSelectedRepoToOrgSecret: [ + "PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}" + ], + addSelectedRepoToOrgVariable: [ + "PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}" + ], + approveWorkflowRun: [ + "POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve" + ], + cancelWorkflowRun: [ + "POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel" + ], + createEnvironmentVariable: [ + "POST /repos/{owner}/{repo}/environments/{environment_name}/variables" + ], + createOrUpdateEnvironmentSecret: [ + "PUT /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}" + ], + createOrUpdateOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}"], + createOrUpdateRepoSecret: [ + "PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}" + ], + createOrgVariable: ["POST /orgs/{org}/actions/variables"], + createRegistrationTokenForOrg: [ + "POST /orgs/{org}/actions/runners/registration-token" + ], + createRegistrationTokenForRepo: [ + "POST /repos/{owner}/{repo}/actions/runners/registration-token" + ], + createRemoveTokenForOrg: ["POST /orgs/{org}/actions/runners/remove-token"], + createRemoveTokenForRepo: [ + "POST /repos/{owner}/{repo}/actions/runners/remove-token" + ], + createRepoVariable: ["POST /repos/{owner}/{repo}/actions/variables"], + createWorkflowDispatch: [ + "POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches" + ], + deleteActionsCacheById: [ + "DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}" + ], + deleteActionsCacheByKey: [ + "DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}" + ], + deleteArtifact: [ + "DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}" + ], + deleteEnvironmentSecret: [ + "DELETE /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}" + ], + deleteEnvironmentVariable: [ + "DELETE /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}" + ], + deleteOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}"], + deleteOrgVariable: ["DELETE /orgs/{org}/actions/variables/{name}"], + deleteRepoSecret: [ + "DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}" + ], + deleteRepoVariable: [ + "DELETE /repos/{owner}/{repo}/actions/variables/{name}" + ], + deleteSelfHostedRunnerFromOrg: [ + "DELETE /orgs/{org}/actions/runners/{runner_id}" + ], + deleteSelfHostedRunnerFromRepo: [ + "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}" + ], + deleteWorkflowRun: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"], + deleteWorkflowRunLogs: [ + "DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs" + ], + disableSelectedRepositoryGithubActionsOrganization: [ + "DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}" + ], + disableWorkflow: [ + "PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable" + ], + downloadArtifact: [ + "GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}" + ], + downloadJobLogsForWorkflowRun: [ + "GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs" + ], + downloadWorkflowRunAttemptLogs: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs" + ], + downloadWorkflowRunLogs: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs" + ], + enableSelectedRepositoryGithubActionsOrganization: [ + "PUT /orgs/{org}/actions/permissions/repositories/{repository_id}" + ], + enableWorkflow: [ + "PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable" + ], + forceCancelWorkflowRun: [ + "POST /repos/{owner}/{repo}/actions/runs/{run_id}/force-cancel" + ], + generateRunnerJitconfigForOrg: [ + "POST /orgs/{org}/actions/runners/generate-jitconfig" + ], + generateRunnerJitconfigForRepo: [ + "POST /repos/{owner}/{repo}/actions/runners/generate-jitconfig" + ], + getActionsCacheList: ["GET /repos/{owner}/{repo}/actions/caches"], + getActionsCacheUsage: ["GET /repos/{owner}/{repo}/actions/cache/usage"], + getActionsCacheUsageByRepoForOrg: [ + "GET /orgs/{org}/actions/cache/usage-by-repository" + ], + getActionsCacheUsageForOrg: ["GET /orgs/{org}/actions/cache/usage"], + getAllowedActionsOrganization: [ + "GET /orgs/{org}/actions/permissions/selected-actions" + ], + getAllowedActionsRepository: [ + "GET /repos/{owner}/{repo}/actions/permissions/selected-actions" + ], + getArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"], + getCustomOidcSubClaimForRepo: [ + "GET /repos/{owner}/{repo}/actions/oidc/customization/sub" + ], + getEnvironmentPublicKey: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/public-key" + ], + getEnvironmentSecret: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}" + ], + getEnvironmentVariable: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}" + ], + getGithubActionsDefaultWorkflowPermissionsOrganization: [ + "GET /orgs/{org}/actions/permissions/workflow" + ], + getGithubActionsDefaultWorkflowPermissionsRepository: [ + "GET /repos/{owner}/{repo}/actions/permissions/workflow" + ], + getGithubActionsPermissionsOrganization: [ + "GET /orgs/{org}/actions/permissions" + ], + getGithubActionsPermissionsRepository: [ + "GET /repos/{owner}/{repo}/actions/permissions" + ], + getJobForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"], + getOrgPublicKey: ["GET /orgs/{org}/actions/secrets/public-key"], + getOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}"], + getOrgVariable: ["GET /orgs/{org}/actions/variables/{name}"], + getPendingDeploymentsForRun: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments" + ], + getRepoPermissions: [ + "GET /repos/{owner}/{repo}/actions/permissions", + {}, + { renamed: ["actions", "getGithubActionsPermissionsRepository"] } + ], + getRepoPublicKey: ["GET /repos/{owner}/{repo}/actions/secrets/public-key"], + getRepoSecret: ["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"], + getRepoVariable: ["GET /repos/{owner}/{repo}/actions/variables/{name}"], + getReviewsForRun: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals" + ], + getSelfHostedRunnerForOrg: ["GET /orgs/{org}/actions/runners/{runner_id}"], + getSelfHostedRunnerForRepo: [ + "GET /repos/{owner}/{repo}/actions/runners/{runner_id}" + ], + getWorkflow: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"], + getWorkflowAccessToRepository: [ + "GET /repos/{owner}/{repo}/actions/permissions/access" + ], + getWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}"], + getWorkflowRunAttempt: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}" + ], + getWorkflowRunUsage: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing" + ], + getWorkflowUsage: [ + "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing" + ], + listArtifactsForRepo: ["GET /repos/{owner}/{repo}/actions/artifacts"], + listEnvironmentSecrets: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/secrets" + ], + listEnvironmentVariables: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/variables" + ], + listJobsForWorkflowRun: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs" + ], + listJobsForWorkflowRunAttempt: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs" + ], + listLabelsForSelfHostedRunnerForOrg: [ + "GET /orgs/{org}/actions/runners/{runner_id}/labels" + ], + listLabelsForSelfHostedRunnerForRepo: [ + "GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" + ], + listOrgSecrets: ["GET /orgs/{org}/actions/secrets"], + listOrgVariables: ["GET /orgs/{org}/actions/variables"], + listRepoOrganizationSecrets: [ + "GET /repos/{owner}/{repo}/actions/organization-secrets" + ], + listRepoOrganizationVariables: [ + "GET /repos/{owner}/{repo}/actions/organization-variables" + ], + listRepoSecrets: ["GET /repos/{owner}/{repo}/actions/secrets"], + listRepoVariables: ["GET /repos/{owner}/{repo}/actions/variables"], + listRepoWorkflows: ["GET /repos/{owner}/{repo}/actions/workflows"], + listRunnerApplicationsForOrg: ["GET /orgs/{org}/actions/runners/downloads"], + listRunnerApplicationsForRepo: [ + "GET /repos/{owner}/{repo}/actions/runners/downloads" + ], + listSelectedReposForOrgSecret: [ + "GET /orgs/{org}/actions/secrets/{secret_name}/repositories" + ], + listSelectedReposForOrgVariable: [ + "GET /orgs/{org}/actions/variables/{name}/repositories" + ], + listSelectedRepositoriesEnabledGithubActionsOrganization: [ + "GET /orgs/{org}/actions/permissions/repositories" + ], + listSelfHostedRunnersForOrg: ["GET /orgs/{org}/actions/runners"], + listSelfHostedRunnersForRepo: ["GET /repos/{owner}/{repo}/actions/runners"], + listWorkflowRunArtifacts: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts" + ], + listWorkflowRuns: [ + "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs" + ], + listWorkflowRunsForRepo: ["GET /repos/{owner}/{repo}/actions/runs"], + reRunJobForWorkflowRun: [ + "POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun" + ], + reRunWorkflow: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"], + reRunWorkflowFailedJobs: [ + "POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs" + ], + removeAllCustomLabelsFromSelfHostedRunnerForOrg: [ + "DELETE /orgs/{org}/actions/runners/{runner_id}/labels" + ], + removeAllCustomLabelsFromSelfHostedRunnerForRepo: [ + "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" + ], + removeCustomLabelFromSelfHostedRunnerForOrg: [ + "DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}" + ], + removeCustomLabelFromSelfHostedRunnerForRepo: [ + "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}" + ], + removeSelectedRepoFromOrgSecret: [ + "DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}" + ], + removeSelectedRepoFromOrgVariable: [ + "DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}" + ], + reviewCustomGatesForRun: [ + "POST /repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule" + ], + reviewPendingDeploymentsForRun: [ + "POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments" + ], + setAllowedActionsOrganization: [ + "PUT /orgs/{org}/actions/permissions/selected-actions" + ], + setAllowedActionsRepository: [ + "PUT /repos/{owner}/{repo}/actions/permissions/selected-actions" + ], + setCustomLabelsForSelfHostedRunnerForOrg: [ + "PUT /orgs/{org}/actions/runners/{runner_id}/labels" + ], + setCustomLabelsForSelfHostedRunnerForRepo: [ + "PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" + ], + setCustomOidcSubClaimForRepo: [ + "PUT /repos/{owner}/{repo}/actions/oidc/customization/sub" + ], + setGithubActionsDefaultWorkflowPermissionsOrganization: [ + "PUT /orgs/{org}/actions/permissions/workflow" + ], + setGithubActionsDefaultWorkflowPermissionsRepository: [ + "PUT /repos/{owner}/{repo}/actions/permissions/workflow" + ], + setGithubActionsPermissionsOrganization: [ + "PUT /orgs/{org}/actions/permissions" + ], + setGithubActionsPermissionsRepository: [ + "PUT /repos/{owner}/{repo}/actions/permissions" + ], + setSelectedReposForOrgSecret: [ + "PUT /orgs/{org}/actions/secrets/{secret_name}/repositories" + ], + setSelectedReposForOrgVariable: [ + "PUT /orgs/{org}/actions/variables/{name}/repositories" + ], + setSelectedRepositoriesEnabledGithubActionsOrganization: [ + "PUT /orgs/{org}/actions/permissions/repositories" + ], + setWorkflowAccessToRepository: [ + "PUT /repos/{owner}/{repo}/actions/permissions/access" + ], + updateEnvironmentVariable: [ + "PATCH /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}" + ], + updateOrgVariable: ["PATCH /orgs/{org}/actions/variables/{name}"], + updateRepoVariable: [ + "PATCH /repos/{owner}/{repo}/actions/variables/{name}" + ] + }, + activity: { + checkRepoIsStarredByAuthenticatedUser: ["GET /user/starred/{owner}/{repo}"], + deleteRepoSubscription: ["DELETE /repos/{owner}/{repo}/subscription"], + deleteThreadSubscription: [ + "DELETE /notifications/threads/{thread_id}/subscription" + ], + getFeeds: ["GET /feeds"], + getRepoSubscription: ["GET /repos/{owner}/{repo}/subscription"], + getThread: ["GET /notifications/threads/{thread_id}"], + getThreadSubscriptionForAuthenticatedUser: [ + "GET /notifications/threads/{thread_id}/subscription" + ], + listEventsForAuthenticatedUser: ["GET /users/{username}/events"], + listNotificationsForAuthenticatedUser: ["GET /notifications"], + listOrgEventsForAuthenticatedUser: [ + "GET /users/{username}/events/orgs/{org}" + ], + listPublicEvents: ["GET /events"], + listPublicEventsForRepoNetwork: ["GET /networks/{owner}/{repo}/events"], + listPublicEventsForUser: ["GET /users/{username}/events/public"], + listPublicOrgEvents: ["GET /orgs/{org}/events"], + listReceivedEventsForUser: ["GET /users/{username}/received_events"], + listReceivedPublicEventsForUser: [ + "GET /users/{username}/received_events/public" + ], + listRepoEvents: ["GET /repos/{owner}/{repo}/events"], + listRepoNotificationsForAuthenticatedUser: [ + "GET /repos/{owner}/{repo}/notifications" + ], + listReposStarredByAuthenticatedUser: ["GET /user/starred"], + listReposStarredByUser: ["GET /users/{username}/starred"], + listReposWatchedByUser: ["GET /users/{username}/subscriptions"], + listStargazersForRepo: ["GET /repos/{owner}/{repo}/stargazers"], + listWatchedReposForAuthenticatedUser: ["GET /user/subscriptions"], + listWatchersForRepo: ["GET /repos/{owner}/{repo}/subscribers"], + markNotificationsAsRead: ["PUT /notifications"], + markRepoNotificationsAsRead: ["PUT /repos/{owner}/{repo}/notifications"], + markThreadAsDone: ["DELETE /notifications/threads/{thread_id}"], + markThreadAsRead: ["PATCH /notifications/threads/{thread_id}"], + setRepoSubscription: ["PUT /repos/{owner}/{repo}/subscription"], + setThreadSubscription: [ + "PUT /notifications/threads/{thread_id}/subscription" + ], + starRepoForAuthenticatedUser: ["PUT /user/starred/{owner}/{repo}"], + unstarRepoForAuthenticatedUser: ["DELETE /user/starred/{owner}/{repo}"] + }, + apps: { + addRepoToInstallation: [ + "PUT /user/installations/{installation_id}/repositories/{repository_id}", + {}, + { renamed: ["apps", "addRepoToInstallationForAuthenticatedUser"] } + ], + addRepoToInstallationForAuthenticatedUser: [ + "PUT /user/installations/{installation_id}/repositories/{repository_id}" + ], + checkToken: ["POST /applications/{client_id}/token"], + createFromManifest: ["POST /app-manifests/{code}/conversions"], + createInstallationAccessToken: [ + "POST /app/installations/{installation_id}/access_tokens" + ], + deleteAuthorization: ["DELETE /applications/{client_id}/grant"], + deleteInstallation: ["DELETE /app/installations/{installation_id}"], + deleteToken: ["DELETE /applications/{client_id}/token"], + getAuthenticated: ["GET /app"], + getBySlug: ["GET /apps/{app_slug}"], + getInstallation: ["GET /app/installations/{installation_id}"], + getOrgInstallation: ["GET /orgs/{org}/installation"], + getRepoInstallation: ["GET /repos/{owner}/{repo}/installation"], + getSubscriptionPlanForAccount: [ + "GET /marketplace_listing/accounts/{account_id}" + ], + getSubscriptionPlanForAccountStubbed: [ + "GET /marketplace_listing/stubbed/accounts/{account_id}" + ], + getUserInstallation: ["GET /users/{username}/installation"], + getWebhookConfigForApp: ["GET /app/hook/config"], + getWebhookDelivery: ["GET /app/hook/deliveries/{delivery_id}"], + listAccountsForPlan: ["GET /marketplace_listing/plans/{plan_id}/accounts"], + listAccountsForPlanStubbed: [ + "GET /marketplace_listing/stubbed/plans/{plan_id}/accounts" + ], + listInstallationReposForAuthenticatedUser: [ + "GET /user/installations/{installation_id}/repositories" + ], + listInstallationRequestsForAuthenticatedApp: [ + "GET /app/installation-requests" + ], + listInstallations: ["GET /app/installations"], + listInstallationsForAuthenticatedUser: ["GET /user/installations"], + listPlans: ["GET /marketplace_listing/plans"], + listPlansStubbed: ["GET /marketplace_listing/stubbed/plans"], + listReposAccessibleToInstallation: ["GET /installation/repositories"], + listSubscriptionsForAuthenticatedUser: ["GET /user/marketplace_purchases"], + listSubscriptionsForAuthenticatedUserStubbed: [ + "GET /user/marketplace_purchases/stubbed" + ], + listWebhookDeliveries: ["GET /app/hook/deliveries"], + redeliverWebhookDelivery: [ + "POST /app/hook/deliveries/{delivery_id}/attempts" + ], + removeRepoFromInstallation: [ + "DELETE /user/installations/{installation_id}/repositories/{repository_id}", + {}, + { renamed: ["apps", "removeRepoFromInstallationForAuthenticatedUser"] } + ], + removeRepoFromInstallationForAuthenticatedUser: [ + "DELETE /user/installations/{installation_id}/repositories/{repository_id}" + ], + resetToken: ["PATCH /applications/{client_id}/token"], + revokeInstallationAccessToken: ["DELETE /installation/token"], + scopeToken: ["POST /applications/{client_id}/token/scoped"], + suspendInstallation: ["PUT /app/installations/{installation_id}/suspended"], + unsuspendInstallation: [ + "DELETE /app/installations/{installation_id}/suspended" + ], + updateWebhookConfigForApp: ["PATCH /app/hook/config"] + }, + billing: { + getGithubActionsBillingOrg: ["GET /orgs/{org}/settings/billing/actions"], + getGithubActionsBillingUser: [ + "GET /users/{username}/settings/billing/actions" + ], + getGithubPackagesBillingOrg: ["GET /orgs/{org}/settings/billing/packages"], + getGithubPackagesBillingUser: [ + "GET /users/{username}/settings/billing/packages" + ], + getSharedStorageBillingOrg: [ + "GET /orgs/{org}/settings/billing/shared-storage" + ], + getSharedStorageBillingUser: [ + "GET /users/{username}/settings/billing/shared-storage" + ] + }, + checks: { + create: ["POST /repos/{owner}/{repo}/check-runs"], + createSuite: ["POST /repos/{owner}/{repo}/check-suites"], + get: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"], + getSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"], + listAnnotations: [ + "GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations" + ], + listForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"], + listForSuite: [ + "GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs" + ], + listSuitesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"], + rerequestRun: [ + "POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest" + ], + rerequestSuite: [ + "POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest" + ], + setSuitesPreferences: [ + "PATCH /repos/{owner}/{repo}/check-suites/preferences" + ], + update: ["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"] + }, + codeScanning: { + deleteAnalysis: [ + "DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}" + ], + getAlert: [ + "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}", + {}, + { renamedParameters: { alert_id: "alert_number" } } + ], + getAnalysis: [ + "GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}" + ], + getCodeqlDatabase: [ + "GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}" + ], + getDefaultSetup: ["GET /repos/{owner}/{repo}/code-scanning/default-setup"], + getSarif: ["GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}"], + listAlertInstances: [ + "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances" + ], + listAlertsForOrg: ["GET /orgs/{org}/code-scanning/alerts"], + listAlertsForRepo: ["GET /repos/{owner}/{repo}/code-scanning/alerts"], + listAlertsInstances: [ + "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances", + {}, + { renamed: ["codeScanning", "listAlertInstances"] } + ], + listCodeqlDatabases: [ + "GET /repos/{owner}/{repo}/code-scanning/codeql/databases" + ], + listRecentAnalyses: ["GET /repos/{owner}/{repo}/code-scanning/analyses"], + updateAlert: [ + "PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}" + ], + updateDefaultSetup: [ + "PATCH /repos/{owner}/{repo}/code-scanning/default-setup" + ], + uploadSarif: ["POST /repos/{owner}/{repo}/code-scanning/sarifs"] + }, + codesOfConduct: { + getAllCodesOfConduct: ["GET /codes_of_conduct"], + getConductCode: ["GET /codes_of_conduct/{key}"] + }, + codespaces: { + addRepositoryForSecretForAuthenticatedUser: [ + "PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}" + ], + addSelectedRepoToOrgSecret: [ + "PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}" + ], + checkPermissionsForDevcontainer: [ + "GET /repos/{owner}/{repo}/codespaces/permissions_check" + ], + codespaceMachinesForAuthenticatedUser: [ + "GET /user/codespaces/{codespace_name}/machines" + ], + createForAuthenticatedUser: ["POST /user/codespaces"], + createOrUpdateOrgSecret: [ + "PUT /orgs/{org}/codespaces/secrets/{secret_name}" + ], + createOrUpdateRepoSecret: [ + "PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}" + ], + createOrUpdateSecretForAuthenticatedUser: [ + "PUT /user/codespaces/secrets/{secret_name}" + ], + createWithPrForAuthenticatedUser: [ + "POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces" + ], + createWithRepoForAuthenticatedUser: [ + "POST /repos/{owner}/{repo}/codespaces" + ], + deleteForAuthenticatedUser: ["DELETE /user/codespaces/{codespace_name}"], + deleteFromOrganization: [ + "DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}" + ], + deleteOrgSecret: ["DELETE /orgs/{org}/codespaces/secrets/{secret_name}"], + deleteRepoSecret: [ + "DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}" + ], + deleteSecretForAuthenticatedUser: [ + "DELETE /user/codespaces/secrets/{secret_name}" + ], + exportForAuthenticatedUser: [ + "POST /user/codespaces/{codespace_name}/exports" + ], + getCodespacesForUserInOrg: [ + "GET /orgs/{org}/members/{username}/codespaces" + ], + getExportDetailsForAuthenticatedUser: [ + "GET /user/codespaces/{codespace_name}/exports/{export_id}" + ], + getForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}"], + getOrgPublicKey: ["GET /orgs/{org}/codespaces/secrets/public-key"], + getOrgSecret: ["GET /orgs/{org}/codespaces/secrets/{secret_name}"], + getPublicKeyForAuthenticatedUser: [ + "GET /user/codespaces/secrets/public-key" + ], + getRepoPublicKey: [ + "GET /repos/{owner}/{repo}/codespaces/secrets/public-key" + ], + getRepoSecret: [ + "GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}" + ], + getSecretForAuthenticatedUser: [ + "GET /user/codespaces/secrets/{secret_name}" + ], + listDevcontainersInRepositoryForAuthenticatedUser: [ + "GET /repos/{owner}/{repo}/codespaces/devcontainers" + ], + listForAuthenticatedUser: ["GET /user/codespaces"], + listInOrganization: [ + "GET /orgs/{org}/codespaces", + {}, + { renamedParameters: { org_id: "org" } } + ], + listInRepositoryForAuthenticatedUser: [ + "GET /repos/{owner}/{repo}/codespaces" + ], + listOrgSecrets: ["GET /orgs/{org}/codespaces/secrets"], + listRepoSecrets: ["GET /repos/{owner}/{repo}/codespaces/secrets"], + listRepositoriesForSecretForAuthenticatedUser: [ + "GET /user/codespaces/secrets/{secret_name}/repositories" + ], + listSecretsForAuthenticatedUser: ["GET /user/codespaces/secrets"], + listSelectedReposForOrgSecret: [ + "GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories" + ], + preFlightWithRepoForAuthenticatedUser: [ + "GET /repos/{owner}/{repo}/codespaces/new" + ], + publishForAuthenticatedUser: [ + "POST /user/codespaces/{codespace_name}/publish" + ], + removeRepositoryForSecretForAuthenticatedUser: [ + "DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}" + ], + removeSelectedRepoFromOrgSecret: [ + "DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}" + ], + repoMachinesForAuthenticatedUser: [ + "GET /repos/{owner}/{repo}/codespaces/machines" + ], + setRepositoriesForSecretForAuthenticatedUser: [ + "PUT /user/codespaces/secrets/{secret_name}/repositories" + ], + setSelectedReposForOrgSecret: [ + "PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories" + ], + startForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/start"], + stopForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/stop"], + stopInOrganization: [ + "POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop" + ], + updateForAuthenticatedUser: ["PATCH /user/codespaces/{codespace_name}"] + }, + copilot: { + addCopilotSeatsForTeams: [ + "POST /orgs/{org}/copilot/billing/selected_teams" + ], + addCopilotSeatsForUsers: [ + "POST /orgs/{org}/copilot/billing/selected_users" + ], + cancelCopilotSeatAssignmentForTeams: [ + "DELETE /orgs/{org}/copilot/billing/selected_teams" + ], + cancelCopilotSeatAssignmentForUsers: [ + "DELETE /orgs/{org}/copilot/billing/selected_users" + ], + getCopilotOrganizationDetails: ["GET /orgs/{org}/copilot/billing"], + getCopilotSeatDetailsForUser: [ + "GET /orgs/{org}/members/{username}/copilot" + ], + listCopilotSeats: ["GET /orgs/{org}/copilot/billing/seats"], + usageMetricsForEnterprise: ["GET /enterprises/{enterprise}/copilot/usage"], + usageMetricsForOrg: ["GET /orgs/{org}/copilot/usage"], + usageMetricsForTeam: ["GET /orgs/{org}/team/{team_slug}/copilot/usage"] + }, + dependabot: { + addSelectedRepoToOrgSecret: [ + "PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}" + ], + createOrUpdateOrgSecret: [ + "PUT /orgs/{org}/dependabot/secrets/{secret_name}" + ], + createOrUpdateRepoSecret: [ + "PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}" + ], + deleteOrgSecret: ["DELETE /orgs/{org}/dependabot/secrets/{secret_name}"], + deleteRepoSecret: [ + "DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}" + ], + getAlert: ["GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}"], + getOrgPublicKey: ["GET /orgs/{org}/dependabot/secrets/public-key"], + getOrgSecret: ["GET /orgs/{org}/dependabot/secrets/{secret_name}"], + getRepoPublicKey: [ + "GET /repos/{owner}/{repo}/dependabot/secrets/public-key" + ], + getRepoSecret: [ + "GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}" + ], + listAlertsForEnterprise: [ + "GET /enterprises/{enterprise}/dependabot/alerts" + ], + listAlertsForOrg: ["GET /orgs/{org}/dependabot/alerts"], + listAlertsForRepo: ["GET /repos/{owner}/{repo}/dependabot/alerts"], + listOrgSecrets: ["GET /orgs/{org}/dependabot/secrets"], + listRepoSecrets: ["GET /repos/{owner}/{repo}/dependabot/secrets"], + listSelectedReposForOrgSecret: [ + "GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories" + ], + removeSelectedRepoFromOrgSecret: [ + "DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}" + ], + setSelectedReposForOrgSecret: [ + "PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories" + ], + updateAlert: [ + "PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}" + ] + }, + dependencyGraph: { + createRepositorySnapshot: [ + "POST /repos/{owner}/{repo}/dependency-graph/snapshots" + ], + diffRange: [ + "GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}" + ], + exportSbom: ["GET /repos/{owner}/{repo}/dependency-graph/sbom"] + }, + emojis: { get: ["GET /emojis"] }, + gists: { + checkIsStarred: ["GET /gists/{gist_id}/star"], + create: ["POST /gists"], + createComment: ["POST /gists/{gist_id}/comments"], + delete: ["DELETE /gists/{gist_id}"], + deleteComment: ["DELETE /gists/{gist_id}/comments/{comment_id}"], + fork: ["POST /gists/{gist_id}/forks"], + get: ["GET /gists/{gist_id}"], + getComment: ["GET /gists/{gist_id}/comments/{comment_id}"], + getRevision: ["GET /gists/{gist_id}/{sha}"], + list: ["GET /gists"], + listComments: ["GET /gists/{gist_id}/comments"], + listCommits: ["GET /gists/{gist_id}/commits"], + listForUser: ["GET /users/{username}/gists"], + listForks: ["GET /gists/{gist_id}/forks"], + listPublic: ["GET /gists/public"], + listStarred: ["GET /gists/starred"], + star: ["PUT /gists/{gist_id}/star"], + unstar: ["DELETE /gists/{gist_id}/star"], + update: ["PATCH /gists/{gist_id}"], + updateComment: ["PATCH /gists/{gist_id}/comments/{comment_id}"] + }, + git: { + createBlob: ["POST /repos/{owner}/{repo}/git/blobs"], + createCommit: ["POST /repos/{owner}/{repo}/git/commits"], + createRef: ["POST /repos/{owner}/{repo}/git/refs"], + createTag: ["POST /repos/{owner}/{repo}/git/tags"], + createTree: ["POST /repos/{owner}/{repo}/git/trees"], + deleteRef: ["DELETE /repos/{owner}/{repo}/git/refs/{ref}"], + getBlob: ["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"], + getCommit: ["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"], + getRef: ["GET /repos/{owner}/{repo}/git/ref/{ref}"], + getTag: ["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"], + getTree: ["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"], + listMatchingRefs: ["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"], + updateRef: ["PATCH /repos/{owner}/{repo}/git/refs/{ref}"] + }, + gitignore: { + getAllTemplates: ["GET /gitignore/templates"], + getTemplate: ["GET /gitignore/templates/{name}"] + }, + interactions: { + getRestrictionsForAuthenticatedUser: ["GET /user/interaction-limits"], + getRestrictionsForOrg: ["GET /orgs/{org}/interaction-limits"], + getRestrictionsForRepo: ["GET /repos/{owner}/{repo}/interaction-limits"], + getRestrictionsForYourPublicRepos: [ + "GET /user/interaction-limits", + {}, + { renamed: ["interactions", "getRestrictionsForAuthenticatedUser"] } + ], + removeRestrictionsForAuthenticatedUser: ["DELETE /user/interaction-limits"], + removeRestrictionsForOrg: ["DELETE /orgs/{org}/interaction-limits"], + removeRestrictionsForRepo: [ + "DELETE /repos/{owner}/{repo}/interaction-limits" + ], + removeRestrictionsForYourPublicRepos: [ + "DELETE /user/interaction-limits", + {}, + { renamed: ["interactions", "removeRestrictionsForAuthenticatedUser"] } + ], + setRestrictionsForAuthenticatedUser: ["PUT /user/interaction-limits"], + setRestrictionsForOrg: ["PUT /orgs/{org}/interaction-limits"], + setRestrictionsForRepo: ["PUT /repos/{owner}/{repo}/interaction-limits"], + setRestrictionsForYourPublicRepos: [ + "PUT /user/interaction-limits", + {}, + { renamed: ["interactions", "setRestrictionsForAuthenticatedUser"] } + ] + }, + issues: { + addAssignees: [ + "POST /repos/{owner}/{repo}/issues/{issue_number}/assignees" + ], + addLabels: ["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"], + checkUserCanBeAssigned: ["GET /repos/{owner}/{repo}/assignees/{assignee}"], + checkUserCanBeAssignedToIssue: [ + "GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}" + ], + create: ["POST /repos/{owner}/{repo}/issues"], + createComment: [ + "POST /repos/{owner}/{repo}/issues/{issue_number}/comments" + ], + createLabel: ["POST /repos/{owner}/{repo}/labels"], + createMilestone: ["POST /repos/{owner}/{repo}/milestones"], + deleteComment: [ + "DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}" + ], + deleteLabel: ["DELETE /repos/{owner}/{repo}/labels/{name}"], + deleteMilestone: [ + "DELETE /repos/{owner}/{repo}/milestones/{milestone_number}" + ], + get: ["GET /repos/{owner}/{repo}/issues/{issue_number}"], + getComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"], + getEvent: ["GET /repos/{owner}/{repo}/issues/events/{event_id}"], + getLabel: ["GET /repos/{owner}/{repo}/labels/{name}"], + getMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}"], + list: ["GET /issues"], + listAssignees: ["GET /repos/{owner}/{repo}/assignees"], + listComments: ["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"], + listCommentsForRepo: ["GET /repos/{owner}/{repo}/issues/comments"], + listEvents: ["GET /repos/{owner}/{repo}/issues/{issue_number}/events"], + listEventsForRepo: ["GET /repos/{owner}/{repo}/issues/events"], + listEventsForTimeline: [ + "GET /repos/{owner}/{repo}/issues/{issue_number}/timeline" + ], + listForAuthenticatedUser: ["GET /user/issues"], + listForOrg: ["GET /orgs/{org}/issues"], + listForRepo: ["GET /repos/{owner}/{repo}/issues"], + listLabelsForMilestone: [ + "GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels" + ], + listLabelsForRepo: ["GET /repos/{owner}/{repo}/labels"], + listLabelsOnIssue: [ + "GET /repos/{owner}/{repo}/issues/{issue_number}/labels" + ], + listMilestones: ["GET /repos/{owner}/{repo}/milestones"], + lock: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"], + removeAllLabels: [ + "DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels" + ], + removeAssignees: [ + "DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees" + ], + removeLabel: [ + "DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}" + ], + setLabels: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"], + unlock: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"], + update: ["PATCH /repos/{owner}/{repo}/issues/{issue_number}"], + updateComment: ["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"], + updateLabel: ["PATCH /repos/{owner}/{repo}/labels/{name}"], + updateMilestone: [ + "PATCH /repos/{owner}/{repo}/milestones/{milestone_number}" + ] + }, + licenses: { + get: ["GET /licenses/{license}"], + getAllCommonlyUsed: ["GET /licenses"], + getForRepo: ["GET /repos/{owner}/{repo}/license"] + }, + markdown: { + render: ["POST /markdown"], + renderRaw: [ + "POST /markdown/raw", + { headers: { "content-type": "text/plain; charset=utf-8" } } + ] + }, + meta: { + get: ["GET /meta"], + getAllVersions: ["GET /versions"], + getOctocat: ["GET /octocat"], + getZen: ["GET /zen"], + root: ["GET /"] + }, + migrations: { + deleteArchiveForAuthenticatedUser: [ + "DELETE /user/migrations/{migration_id}/archive" + ], + deleteArchiveForOrg: [ + "DELETE /orgs/{org}/migrations/{migration_id}/archive" + ], + downloadArchiveForOrg: [ + "GET /orgs/{org}/migrations/{migration_id}/archive" + ], + getArchiveForAuthenticatedUser: [ + "GET /user/migrations/{migration_id}/archive" + ], + getStatusForAuthenticatedUser: ["GET /user/migrations/{migration_id}"], + getStatusForOrg: ["GET /orgs/{org}/migrations/{migration_id}"], + listForAuthenticatedUser: ["GET /user/migrations"], + listForOrg: ["GET /orgs/{org}/migrations"], + listReposForAuthenticatedUser: [ + "GET /user/migrations/{migration_id}/repositories" + ], + listReposForOrg: ["GET /orgs/{org}/migrations/{migration_id}/repositories"], + listReposForUser: [ + "GET /user/migrations/{migration_id}/repositories", + {}, + { renamed: ["migrations", "listReposForAuthenticatedUser"] } + ], + startForAuthenticatedUser: ["POST /user/migrations"], + startForOrg: ["POST /orgs/{org}/migrations"], + unlockRepoForAuthenticatedUser: [ + "DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock" + ], + unlockRepoForOrg: [ + "DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock" + ] + }, + oidc: { + getOidcCustomSubTemplateForOrg: [ + "GET /orgs/{org}/actions/oidc/customization/sub" + ], + updateOidcCustomSubTemplateForOrg: [ + "PUT /orgs/{org}/actions/oidc/customization/sub" + ] + }, + orgs: { + addSecurityManagerTeam: [ + "PUT /orgs/{org}/security-managers/teams/{team_slug}" + ], + assignTeamToOrgRole: [ + "PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}" + ], + assignUserToOrgRole: [ + "PUT /orgs/{org}/organization-roles/users/{username}/{role_id}" + ], + blockUser: ["PUT /orgs/{org}/blocks/{username}"], + cancelInvitation: ["DELETE /orgs/{org}/invitations/{invitation_id}"], + checkBlockedUser: ["GET /orgs/{org}/blocks/{username}"], + checkMembershipForUser: ["GET /orgs/{org}/members/{username}"], + checkPublicMembershipForUser: ["GET /orgs/{org}/public_members/{username}"], + convertMemberToOutsideCollaborator: [ + "PUT /orgs/{org}/outside_collaborators/{username}" + ], + createCustomOrganizationRole: ["POST /orgs/{org}/organization-roles"], + createInvitation: ["POST /orgs/{org}/invitations"], + createOrUpdateCustomProperties: ["PATCH /orgs/{org}/properties/schema"], + createOrUpdateCustomPropertiesValuesForRepos: [ + "PATCH /orgs/{org}/properties/values" + ], + createOrUpdateCustomProperty: [ + "PUT /orgs/{org}/properties/schema/{custom_property_name}" + ], + createWebhook: ["POST /orgs/{org}/hooks"], + delete: ["DELETE /orgs/{org}"], + deleteCustomOrganizationRole: [ + "DELETE /orgs/{org}/organization-roles/{role_id}" + ], + deleteWebhook: ["DELETE /orgs/{org}/hooks/{hook_id}"], + enableOrDisableSecurityProductOnAllOrgRepos: [ + "POST /orgs/{org}/{security_product}/{enablement}" + ], + get: ["GET /orgs/{org}"], + getAllCustomProperties: ["GET /orgs/{org}/properties/schema"], + getCustomProperty: [ + "GET /orgs/{org}/properties/schema/{custom_property_name}" + ], + getMembershipForAuthenticatedUser: ["GET /user/memberships/orgs/{org}"], + getMembershipForUser: ["GET /orgs/{org}/memberships/{username}"], + getOrgRole: ["GET /orgs/{org}/organization-roles/{role_id}"], + getWebhook: ["GET /orgs/{org}/hooks/{hook_id}"], + getWebhookConfigForOrg: ["GET /orgs/{org}/hooks/{hook_id}/config"], + getWebhookDelivery: [ + "GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}" + ], + list: ["GET /organizations"], + listAppInstallations: ["GET /orgs/{org}/installations"], + listBlockedUsers: ["GET /orgs/{org}/blocks"], + listCustomPropertiesValuesForRepos: ["GET /orgs/{org}/properties/values"], + listFailedInvitations: ["GET /orgs/{org}/failed_invitations"], + listForAuthenticatedUser: ["GET /user/orgs"], + listForUser: ["GET /users/{username}/orgs"], + listInvitationTeams: ["GET /orgs/{org}/invitations/{invitation_id}/teams"], + listMembers: ["GET /orgs/{org}/members"], + listMembershipsForAuthenticatedUser: ["GET /user/memberships/orgs"], + listOrgRoleTeams: ["GET /orgs/{org}/organization-roles/{role_id}/teams"], + listOrgRoleUsers: ["GET /orgs/{org}/organization-roles/{role_id}/users"], + listOrgRoles: ["GET /orgs/{org}/organization-roles"], + listOrganizationFineGrainedPermissions: [ + "GET /orgs/{org}/organization-fine-grained-permissions" + ], + listOutsideCollaborators: ["GET /orgs/{org}/outside_collaborators"], + listPatGrantRepositories: [ + "GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories" + ], + listPatGrantRequestRepositories: [ + "GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories" + ], + listPatGrantRequests: ["GET /orgs/{org}/personal-access-token-requests"], + listPatGrants: ["GET /orgs/{org}/personal-access-tokens"], + listPendingInvitations: ["GET /orgs/{org}/invitations"], + listPublicMembers: ["GET /orgs/{org}/public_members"], + listSecurityManagerTeams: ["GET /orgs/{org}/security-managers"], + listWebhookDeliveries: ["GET /orgs/{org}/hooks/{hook_id}/deliveries"], + listWebhooks: ["GET /orgs/{org}/hooks"], + patchCustomOrganizationRole: [ + "PATCH /orgs/{org}/organization-roles/{role_id}" + ], + pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"], + redeliverWebhookDelivery: [ + "POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts" + ], + removeCustomProperty: [ + "DELETE /orgs/{org}/properties/schema/{custom_property_name}" + ], + removeMember: ["DELETE /orgs/{org}/members/{username}"], + removeMembershipForUser: ["DELETE /orgs/{org}/memberships/{username}"], + removeOutsideCollaborator: [ + "DELETE /orgs/{org}/outside_collaborators/{username}" + ], + removePublicMembershipForAuthenticatedUser: [ + "DELETE /orgs/{org}/public_members/{username}" + ], + removeSecurityManagerTeam: [ + "DELETE /orgs/{org}/security-managers/teams/{team_slug}" + ], + reviewPatGrantRequest: [ + "POST /orgs/{org}/personal-access-token-requests/{pat_request_id}" + ], + reviewPatGrantRequestsInBulk: [ + "POST /orgs/{org}/personal-access-token-requests" + ], + revokeAllOrgRolesTeam: [ + "DELETE /orgs/{org}/organization-roles/teams/{team_slug}" + ], + revokeAllOrgRolesUser: [ + "DELETE /orgs/{org}/organization-roles/users/{username}" + ], + revokeOrgRoleTeam: [ + "DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}" + ], + revokeOrgRoleUser: [ + "DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}" + ], + setMembershipForUser: ["PUT /orgs/{org}/memberships/{username}"], + setPublicMembershipForAuthenticatedUser: [ + "PUT /orgs/{org}/public_members/{username}" + ], + unblockUser: ["DELETE /orgs/{org}/blocks/{username}"], + update: ["PATCH /orgs/{org}"], + updateMembershipForAuthenticatedUser: [ + "PATCH /user/memberships/orgs/{org}" + ], + updatePatAccess: ["POST /orgs/{org}/personal-access-tokens/{pat_id}"], + updatePatAccesses: ["POST /orgs/{org}/personal-access-tokens"], + updateWebhook: ["PATCH /orgs/{org}/hooks/{hook_id}"], + updateWebhookConfigForOrg: ["PATCH /orgs/{org}/hooks/{hook_id}/config"] + }, + packages: { + deletePackageForAuthenticatedUser: [ + "DELETE /user/packages/{package_type}/{package_name}" + ], + deletePackageForOrg: [ + "DELETE /orgs/{org}/packages/{package_type}/{package_name}" + ], + deletePackageForUser: [ + "DELETE /users/{username}/packages/{package_type}/{package_name}" + ], + deletePackageVersionForAuthenticatedUser: [ + "DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}" + ], + deletePackageVersionForOrg: [ + "DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}" + ], + deletePackageVersionForUser: [ + "DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}" + ], + getAllPackageVersionsForAPackageOwnedByAnOrg: [ + "GET /orgs/{org}/packages/{package_type}/{package_name}/versions", + {}, + { renamed: ["packages", "getAllPackageVersionsForPackageOwnedByOrg"] } + ], + getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser: [ + "GET /user/packages/{package_type}/{package_name}/versions", + {}, + { + renamed: [ + "packages", + "getAllPackageVersionsForPackageOwnedByAuthenticatedUser" + ] + } + ], + getAllPackageVersionsForPackageOwnedByAuthenticatedUser: [ + "GET /user/packages/{package_type}/{package_name}/versions" + ], + getAllPackageVersionsForPackageOwnedByOrg: [ + "GET /orgs/{org}/packages/{package_type}/{package_name}/versions" + ], + getAllPackageVersionsForPackageOwnedByUser: [ + "GET /users/{username}/packages/{package_type}/{package_name}/versions" + ], + getPackageForAuthenticatedUser: [ + "GET /user/packages/{package_type}/{package_name}" + ], + getPackageForOrganization: [ + "GET /orgs/{org}/packages/{package_type}/{package_name}" + ], + getPackageForUser: [ + "GET /users/{username}/packages/{package_type}/{package_name}" + ], + getPackageVersionForAuthenticatedUser: [ + "GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}" + ], + getPackageVersionForOrganization: [ + "GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}" + ], + getPackageVersionForUser: [ + "GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}" + ], + listDockerMigrationConflictingPackagesForAuthenticatedUser: [ + "GET /user/docker/conflicts" + ], + listDockerMigrationConflictingPackagesForOrganization: [ + "GET /orgs/{org}/docker/conflicts" + ], + listDockerMigrationConflictingPackagesForUser: [ + "GET /users/{username}/docker/conflicts" + ], + listPackagesForAuthenticatedUser: ["GET /user/packages"], + listPackagesForOrganization: ["GET /orgs/{org}/packages"], + listPackagesForUser: ["GET /users/{username}/packages"], + restorePackageForAuthenticatedUser: [ + "POST /user/packages/{package_type}/{package_name}/restore{?token}" + ], + restorePackageForOrg: [ + "POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}" + ], + restorePackageForUser: [ + "POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}" + ], + restorePackageVersionForAuthenticatedUser: [ + "POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore" + ], + restorePackageVersionForOrg: [ + "POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore" + ], + restorePackageVersionForUser: [ + "POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore" + ] + }, + projects: { + addCollaborator: ["PUT /projects/{project_id}/collaborators/{username}"], + createCard: ["POST /projects/columns/{column_id}/cards"], + createColumn: ["POST /projects/{project_id}/columns"], + createForAuthenticatedUser: ["POST /user/projects"], + createForOrg: ["POST /orgs/{org}/projects"], + createForRepo: ["POST /repos/{owner}/{repo}/projects"], + delete: ["DELETE /projects/{project_id}"], + deleteCard: ["DELETE /projects/columns/cards/{card_id}"], + deleteColumn: ["DELETE /projects/columns/{column_id}"], + get: ["GET /projects/{project_id}"], + getCard: ["GET /projects/columns/cards/{card_id}"], + getColumn: ["GET /projects/columns/{column_id}"], + getPermissionForUser: [ + "GET /projects/{project_id}/collaborators/{username}/permission" + ], + listCards: ["GET /projects/columns/{column_id}/cards"], + listCollaborators: ["GET /projects/{project_id}/collaborators"], + listColumns: ["GET /projects/{project_id}/columns"], + listForOrg: ["GET /orgs/{org}/projects"], + listForRepo: ["GET /repos/{owner}/{repo}/projects"], + listForUser: ["GET /users/{username}/projects"], + moveCard: ["POST /projects/columns/cards/{card_id}/moves"], + moveColumn: ["POST /projects/columns/{column_id}/moves"], + removeCollaborator: [ + "DELETE /projects/{project_id}/collaborators/{username}" + ], + update: ["PATCH /projects/{project_id}"], + updateCard: ["PATCH /projects/columns/cards/{card_id}"], + updateColumn: ["PATCH /projects/columns/{column_id}"] + }, + pulls: { + checkIfMerged: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/merge"], + create: ["POST /repos/{owner}/{repo}/pulls"], + createReplyForReviewComment: [ + "POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies" + ], + createReview: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews"], + createReviewComment: [ + "POST /repos/{owner}/{repo}/pulls/{pull_number}/comments" + ], + deletePendingReview: [ + "DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}" + ], + deleteReviewComment: [ + "DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}" + ], + dismissReview: [ + "PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals" + ], + get: ["GET /repos/{owner}/{repo}/pulls/{pull_number}"], + getReview: [ + "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}" + ], + getReviewComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"], + list: ["GET /repos/{owner}/{repo}/pulls"], + listCommentsForReview: [ + "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments" + ], + listCommits: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/commits"], + listFiles: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/files"], + listRequestedReviewers: [ + "GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers" + ], + listReviewComments: [ + "GET /repos/{owner}/{repo}/pulls/{pull_number}/comments" + ], + listReviewCommentsForRepo: ["GET /repos/{owner}/{repo}/pulls/comments"], + listReviews: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews"], + merge: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"], + removeRequestedReviewers: [ + "DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers" + ], + requestReviewers: [ + "POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers" + ], + submitReview: [ + "POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events" + ], + update: ["PATCH /repos/{owner}/{repo}/pulls/{pull_number}"], + updateBranch: [ + "PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch" + ], + updateReview: [ + "PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}" + ], + updateReviewComment: [ + "PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}" + ] + }, + rateLimit: { get: ["GET /rate_limit"] }, + reactions: { + createForCommitComment: [ + "POST /repos/{owner}/{repo}/comments/{comment_id}/reactions" + ], + createForIssue: [ + "POST /repos/{owner}/{repo}/issues/{issue_number}/reactions" + ], + createForIssueComment: [ + "POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions" + ], + createForPullRequestReviewComment: [ + "POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions" + ], + createForRelease: [ + "POST /repos/{owner}/{repo}/releases/{release_id}/reactions" + ], + createForTeamDiscussionCommentInOrg: [ + "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions" + ], + createForTeamDiscussionInOrg: [ + "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions" + ], + deleteForCommitComment: [ + "DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}" + ], + deleteForIssue: [ + "DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}" + ], + deleteForIssueComment: [ + "DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}" + ], + deleteForPullRequestComment: [ + "DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}" + ], + deleteForRelease: [ + "DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}" + ], + deleteForTeamDiscussion: [ + "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}" + ], + deleteForTeamDiscussionComment: [ + "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}" + ], + listForCommitComment: [ + "GET /repos/{owner}/{repo}/comments/{comment_id}/reactions" + ], + listForIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/reactions"], + listForIssueComment: [ + "GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions" + ], + listForPullRequestReviewComment: [ + "GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions" + ], + listForRelease: [ + "GET /repos/{owner}/{repo}/releases/{release_id}/reactions" + ], + listForTeamDiscussionCommentInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions" + ], + listForTeamDiscussionInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions" + ] + }, + repos: { + acceptInvitation: [ + "PATCH /user/repository_invitations/{invitation_id}", + {}, + { renamed: ["repos", "acceptInvitationForAuthenticatedUser"] } + ], + acceptInvitationForAuthenticatedUser: [ + "PATCH /user/repository_invitations/{invitation_id}" + ], + addAppAccessRestrictions: [ + "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", + {}, + { mapToData: "apps" } + ], + addCollaborator: ["PUT /repos/{owner}/{repo}/collaborators/{username}"], + addStatusCheckContexts: [ + "POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", + {}, + { mapToData: "contexts" } + ], + addTeamAccessRestrictions: [ + "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", + {}, + { mapToData: "teams" } + ], + addUserAccessRestrictions: [ + "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", + {}, + { mapToData: "users" } + ], + cancelPagesDeployment: [ + "POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel" + ], + checkAutomatedSecurityFixes: [ + "GET /repos/{owner}/{repo}/automated-security-fixes" + ], + checkCollaborator: ["GET /repos/{owner}/{repo}/collaborators/{username}"], + checkPrivateVulnerabilityReporting: [ + "GET /repos/{owner}/{repo}/private-vulnerability-reporting" + ], + checkVulnerabilityAlerts: [ + "GET /repos/{owner}/{repo}/vulnerability-alerts" + ], + codeownersErrors: ["GET /repos/{owner}/{repo}/codeowners/errors"], + compareCommits: ["GET /repos/{owner}/{repo}/compare/{base}...{head}"], + compareCommitsWithBasehead: [ + "GET /repos/{owner}/{repo}/compare/{basehead}" + ], + createAutolink: ["POST /repos/{owner}/{repo}/autolinks"], + createCommitComment: [ + "POST /repos/{owner}/{repo}/commits/{commit_sha}/comments" + ], + createCommitSignatureProtection: [ + "POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures" + ], + createCommitStatus: ["POST /repos/{owner}/{repo}/statuses/{sha}"], + createDeployKey: ["POST /repos/{owner}/{repo}/keys"], + createDeployment: ["POST /repos/{owner}/{repo}/deployments"], + createDeploymentBranchPolicy: [ + "POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies" + ], + createDeploymentProtectionRule: [ + "POST /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules" + ], + createDeploymentStatus: [ + "POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses" + ], + createDispatchEvent: ["POST /repos/{owner}/{repo}/dispatches"], + createForAuthenticatedUser: ["POST /user/repos"], + createFork: ["POST /repos/{owner}/{repo}/forks"], + createInOrg: ["POST /orgs/{org}/repos"], + createOrUpdateCustomPropertiesValues: [ + "PATCH /repos/{owner}/{repo}/properties/values" + ], + createOrUpdateEnvironment: [ + "PUT /repos/{owner}/{repo}/environments/{environment_name}" + ], + createOrUpdateFileContents: ["PUT /repos/{owner}/{repo}/contents/{path}"], + createOrgRuleset: ["POST /orgs/{org}/rulesets"], + createPagesDeployment: ["POST /repos/{owner}/{repo}/pages/deployments"], + createPagesSite: ["POST /repos/{owner}/{repo}/pages"], + createRelease: ["POST /repos/{owner}/{repo}/releases"], + createRepoRuleset: ["POST /repos/{owner}/{repo}/rulesets"], + createTagProtection: ["POST /repos/{owner}/{repo}/tags/protection"], + createUsingTemplate: [ + "POST /repos/{template_owner}/{template_repo}/generate" + ], + createWebhook: ["POST /repos/{owner}/{repo}/hooks"], + declineInvitation: [ + "DELETE /user/repository_invitations/{invitation_id}", + {}, + { renamed: ["repos", "declineInvitationForAuthenticatedUser"] } + ], + declineInvitationForAuthenticatedUser: [ + "DELETE /user/repository_invitations/{invitation_id}" + ], + delete: ["DELETE /repos/{owner}/{repo}"], + deleteAccessRestrictions: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions" + ], + deleteAdminBranchProtection: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins" + ], + deleteAnEnvironment: [ + "DELETE /repos/{owner}/{repo}/environments/{environment_name}" + ], + deleteAutolink: ["DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}"], + deleteBranchProtection: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection" + ], + deleteCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}"], + deleteCommitSignatureProtection: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures" + ], + deleteDeployKey: ["DELETE /repos/{owner}/{repo}/keys/{key_id}"], + deleteDeployment: [ + "DELETE /repos/{owner}/{repo}/deployments/{deployment_id}" + ], + deleteDeploymentBranchPolicy: [ + "DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}" + ], + deleteFile: ["DELETE /repos/{owner}/{repo}/contents/{path}"], + deleteInvitation: [ + "DELETE /repos/{owner}/{repo}/invitations/{invitation_id}" + ], + deleteOrgRuleset: ["DELETE /orgs/{org}/rulesets/{ruleset_id}"], + deletePagesSite: ["DELETE /repos/{owner}/{repo}/pages"], + deletePullRequestReviewProtection: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews" + ], + deleteRelease: ["DELETE /repos/{owner}/{repo}/releases/{release_id}"], + deleteReleaseAsset: [ + "DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}" + ], + deleteRepoRuleset: ["DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id}"], + deleteTagProtection: [ + "DELETE /repos/{owner}/{repo}/tags/protection/{tag_protection_id}" + ], + deleteWebhook: ["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"], + disableAutomatedSecurityFixes: [ + "DELETE /repos/{owner}/{repo}/automated-security-fixes" + ], + disableDeploymentProtectionRule: [ + "DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}" + ], + disablePrivateVulnerabilityReporting: [ + "DELETE /repos/{owner}/{repo}/private-vulnerability-reporting" + ], + disableVulnerabilityAlerts: [ + "DELETE /repos/{owner}/{repo}/vulnerability-alerts" + ], + downloadArchive: [ + "GET /repos/{owner}/{repo}/zipball/{ref}", + {}, + { renamed: ["repos", "downloadZipballArchive"] } + ], + downloadTarballArchive: ["GET /repos/{owner}/{repo}/tarball/{ref}"], + downloadZipballArchive: ["GET /repos/{owner}/{repo}/zipball/{ref}"], + enableAutomatedSecurityFixes: [ + "PUT /repos/{owner}/{repo}/automated-security-fixes" + ], + enablePrivateVulnerabilityReporting: [ + "PUT /repos/{owner}/{repo}/private-vulnerability-reporting" + ], + enableVulnerabilityAlerts: [ + "PUT /repos/{owner}/{repo}/vulnerability-alerts" + ], + generateReleaseNotes: [ + "POST /repos/{owner}/{repo}/releases/generate-notes" + ], + get: ["GET /repos/{owner}/{repo}"], + getAccessRestrictions: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions" + ], + getAdminBranchProtection: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins" + ], + getAllDeploymentProtectionRules: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules" + ], + getAllEnvironments: ["GET /repos/{owner}/{repo}/environments"], + getAllStatusCheckContexts: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts" + ], + getAllTopics: ["GET /repos/{owner}/{repo}/topics"], + getAppsWithAccessToProtectedBranch: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps" + ], + getAutolink: ["GET /repos/{owner}/{repo}/autolinks/{autolink_id}"], + getBranch: ["GET /repos/{owner}/{repo}/branches/{branch}"], + getBranchProtection: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection" + ], + getBranchRules: ["GET /repos/{owner}/{repo}/rules/branches/{branch}"], + getClones: ["GET /repos/{owner}/{repo}/traffic/clones"], + getCodeFrequencyStats: ["GET /repos/{owner}/{repo}/stats/code_frequency"], + getCollaboratorPermissionLevel: [ + "GET /repos/{owner}/{repo}/collaborators/{username}/permission" + ], + getCombinedStatusForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/status"], + getCommit: ["GET /repos/{owner}/{repo}/commits/{ref}"], + getCommitActivityStats: ["GET /repos/{owner}/{repo}/stats/commit_activity"], + getCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}"], + getCommitSignatureProtection: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures" + ], + getCommunityProfileMetrics: ["GET /repos/{owner}/{repo}/community/profile"], + getContent: ["GET /repos/{owner}/{repo}/contents/{path}"], + getContributorsStats: ["GET /repos/{owner}/{repo}/stats/contributors"], + getCustomDeploymentProtectionRule: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}" + ], + getCustomPropertiesValues: ["GET /repos/{owner}/{repo}/properties/values"], + getDeployKey: ["GET /repos/{owner}/{repo}/keys/{key_id}"], + getDeployment: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}"], + getDeploymentBranchPolicy: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}" + ], + getDeploymentStatus: [ + "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}" + ], + getEnvironment: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}" + ], + getLatestPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/latest"], + getLatestRelease: ["GET /repos/{owner}/{repo}/releases/latest"], + getOrgRuleSuite: ["GET /orgs/{org}/rulesets/rule-suites/{rule_suite_id}"], + getOrgRuleSuites: ["GET /orgs/{org}/rulesets/rule-suites"], + getOrgRuleset: ["GET /orgs/{org}/rulesets/{ruleset_id}"], + getOrgRulesets: ["GET /orgs/{org}/rulesets"], + getPages: ["GET /repos/{owner}/{repo}/pages"], + getPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/{build_id}"], + getPagesDeployment: [ + "GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}" + ], + getPagesHealthCheck: ["GET /repos/{owner}/{repo}/pages/health"], + getParticipationStats: ["GET /repos/{owner}/{repo}/stats/participation"], + getPullRequestReviewProtection: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews" + ], + getPunchCardStats: ["GET /repos/{owner}/{repo}/stats/punch_card"], + getReadme: ["GET /repos/{owner}/{repo}/readme"], + getReadmeInDirectory: ["GET /repos/{owner}/{repo}/readme/{dir}"], + getRelease: ["GET /repos/{owner}/{repo}/releases/{release_id}"], + getReleaseAsset: ["GET /repos/{owner}/{repo}/releases/assets/{asset_id}"], + getReleaseByTag: ["GET /repos/{owner}/{repo}/releases/tags/{tag}"], + getRepoRuleSuite: [ + "GET /repos/{owner}/{repo}/rulesets/rule-suites/{rule_suite_id}" + ], + getRepoRuleSuites: ["GET /repos/{owner}/{repo}/rulesets/rule-suites"], + getRepoRuleset: ["GET /repos/{owner}/{repo}/rulesets/{ruleset_id}"], + getRepoRulesets: ["GET /repos/{owner}/{repo}/rulesets"], + getStatusChecksProtection: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks" + ], + getTeamsWithAccessToProtectedBranch: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams" + ], + getTopPaths: ["GET /repos/{owner}/{repo}/traffic/popular/paths"], + getTopReferrers: ["GET /repos/{owner}/{repo}/traffic/popular/referrers"], + getUsersWithAccessToProtectedBranch: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users" + ], + getViews: ["GET /repos/{owner}/{repo}/traffic/views"], + getWebhook: ["GET /repos/{owner}/{repo}/hooks/{hook_id}"], + getWebhookConfigForRepo: [ + "GET /repos/{owner}/{repo}/hooks/{hook_id}/config" + ], + getWebhookDelivery: [ + "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}" + ], + listActivities: ["GET /repos/{owner}/{repo}/activity"], + listAutolinks: ["GET /repos/{owner}/{repo}/autolinks"], + listBranches: ["GET /repos/{owner}/{repo}/branches"], + listBranchesForHeadCommit: [ + "GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head" + ], + listCollaborators: ["GET /repos/{owner}/{repo}/collaborators"], + listCommentsForCommit: [ + "GET /repos/{owner}/{repo}/commits/{commit_sha}/comments" + ], + listCommitCommentsForRepo: ["GET /repos/{owner}/{repo}/comments"], + listCommitStatusesForRef: [ + "GET /repos/{owner}/{repo}/commits/{ref}/statuses" + ], + listCommits: ["GET /repos/{owner}/{repo}/commits"], + listContributors: ["GET /repos/{owner}/{repo}/contributors"], + listCustomDeploymentRuleIntegrations: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps" + ], + listDeployKeys: ["GET /repos/{owner}/{repo}/keys"], + listDeploymentBranchPolicies: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies" + ], + listDeploymentStatuses: [ + "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses" + ], + listDeployments: ["GET /repos/{owner}/{repo}/deployments"], + listForAuthenticatedUser: ["GET /user/repos"], + listForOrg: ["GET /orgs/{org}/repos"], + listForUser: ["GET /users/{username}/repos"], + listForks: ["GET /repos/{owner}/{repo}/forks"], + listInvitations: ["GET /repos/{owner}/{repo}/invitations"], + listInvitationsForAuthenticatedUser: ["GET /user/repository_invitations"], + listLanguages: ["GET /repos/{owner}/{repo}/languages"], + listPagesBuilds: ["GET /repos/{owner}/{repo}/pages/builds"], + listPublic: ["GET /repositories"], + listPullRequestsAssociatedWithCommit: [ + "GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls" + ], + listReleaseAssets: [ + "GET /repos/{owner}/{repo}/releases/{release_id}/assets" + ], + listReleases: ["GET /repos/{owner}/{repo}/releases"], + listTagProtection: ["GET /repos/{owner}/{repo}/tags/protection"], + listTags: ["GET /repos/{owner}/{repo}/tags"], + listTeams: ["GET /repos/{owner}/{repo}/teams"], + listWebhookDeliveries: [ + "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries" + ], + listWebhooks: ["GET /repos/{owner}/{repo}/hooks"], + merge: ["POST /repos/{owner}/{repo}/merges"], + mergeUpstream: ["POST /repos/{owner}/{repo}/merge-upstream"], + pingWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"], + redeliverWebhookDelivery: [ + "POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts" + ], + removeAppAccessRestrictions: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", + {}, + { mapToData: "apps" } + ], + removeCollaborator: [ + "DELETE /repos/{owner}/{repo}/collaborators/{username}" + ], + removeStatusCheckContexts: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", + {}, + { mapToData: "contexts" } + ], + removeStatusCheckProtection: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks" + ], + removeTeamAccessRestrictions: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", + {}, + { mapToData: "teams" } + ], + removeUserAccessRestrictions: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", + {}, + { mapToData: "users" } + ], + renameBranch: ["POST /repos/{owner}/{repo}/branches/{branch}/rename"], + replaceAllTopics: ["PUT /repos/{owner}/{repo}/topics"], + requestPagesBuild: ["POST /repos/{owner}/{repo}/pages/builds"], + setAdminBranchProtection: [ + "POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins" + ], + setAppAccessRestrictions: [ + "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", + {}, + { mapToData: "apps" } + ], + setStatusCheckContexts: [ + "PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", + {}, + { mapToData: "contexts" } + ], + setTeamAccessRestrictions: [ + "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", + {}, + { mapToData: "teams" } + ], + setUserAccessRestrictions: [ + "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", + {}, + { mapToData: "users" } + ], + testPushWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"], + transfer: ["POST /repos/{owner}/{repo}/transfer"], + update: ["PATCH /repos/{owner}/{repo}"], + updateBranchProtection: [ + "PUT /repos/{owner}/{repo}/branches/{branch}/protection" + ], + updateCommitComment: ["PATCH /repos/{owner}/{repo}/comments/{comment_id}"], + updateDeploymentBranchPolicy: [ + "PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}" + ], + updateInformationAboutPagesSite: ["PUT /repos/{owner}/{repo}/pages"], + updateInvitation: [ + "PATCH /repos/{owner}/{repo}/invitations/{invitation_id}" + ], + updateOrgRuleset: ["PUT /orgs/{org}/rulesets/{ruleset_id}"], + updatePullRequestReviewProtection: [ + "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews" + ], + updateRelease: ["PATCH /repos/{owner}/{repo}/releases/{release_id}"], + updateReleaseAsset: [ + "PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}" + ], + updateRepoRuleset: ["PUT /repos/{owner}/{repo}/rulesets/{ruleset_id}"], + updateStatusCheckPotection: [ + "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks", + {}, + { renamed: ["repos", "updateStatusCheckProtection"] } + ], + updateStatusCheckProtection: [ + "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks" + ], + updateWebhook: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"], + updateWebhookConfigForRepo: [ + "PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config" + ], + uploadReleaseAsset: [ + "POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}", + { baseUrl: "https://uploads.github.com" } + ] + }, + search: { + code: ["GET /search/code"], + commits: ["GET /search/commits"], + issuesAndPullRequests: ["GET /search/issues"], + labels: ["GET /search/labels"], + repos: ["GET /search/repositories"], + topics: ["GET /search/topics"], + users: ["GET /search/users"] + }, + secretScanning: { + getAlert: [ + "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}" + ], + listAlertsForEnterprise: [ + "GET /enterprises/{enterprise}/secret-scanning/alerts" + ], + listAlertsForOrg: ["GET /orgs/{org}/secret-scanning/alerts"], + listAlertsForRepo: ["GET /repos/{owner}/{repo}/secret-scanning/alerts"], + listLocationsForAlert: [ + "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations" + ], + updateAlert: [ + "PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}" + ] + }, + securityAdvisories: { + createFork: [ + "POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks" + ], + createPrivateVulnerabilityReport: [ + "POST /repos/{owner}/{repo}/security-advisories/reports" + ], + createRepositoryAdvisory: [ + "POST /repos/{owner}/{repo}/security-advisories" + ], + createRepositoryAdvisoryCveRequest: [ + "POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/cve" + ], + getGlobalAdvisory: ["GET /advisories/{ghsa_id}"], + getRepositoryAdvisory: [ + "GET /repos/{owner}/{repo}/security-advisories/{ghsa_id}" + ], + listGlobalAdvisories: ["GET /advisories"], + listOrgRepositoryAdvisories: ["GET /orgs/{org}/security-advisories"], + listRepositoryAdvisories: ["GET /repos/{owner}/{repo}/security-advisories"], + updateRepositoryAdvisory: [ + "PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id}" + ] + }, + teams: { + addOrUpdateMembershipForUserInOrg: [ + "PUT /orgs/{org}/teams/{team_slug}/memberships/{username}" + ], + addOrUpdateProjectPermissionsInOrg: [ + "PUT /orgs/{org}/teams/{team_slug}/projects/{project_id}" + ], + addOrUpdateRepoPermissionsInOrg: [ + "PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}" + ], + checkPermissionsForProjectInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/projects/{project_id}" + ], + checkPermissionsForRepoInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}" + ], + create: ["POST /orgs/{org}/teams"], + createDiscussionCommentInOrg: [ + "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments" + ], + createDiscussionInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions"], + deleteDiscussionCommentInOrg: [ + "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}" + ], + deleteDiscussionInOrg: [ + "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}" + ], + deleteInOrg: ["DELETE /orgs/{org}/teams/{team_slug}"], + getByName: ["GET /orgs/{org}/teams/{team_slug}"], + getDiscussionCommentInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}" + ], + getDiscussionInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}" + ], + getMembershipForUserInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/memberships/{username}" + ], + list: ["GET /orgs/{org}/teams"], + listChildInOrg: ["GET /orgs/{org}/teams/{team_slug}/teams"], + listDiscussionCommentsInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments" + ], + listDiscussionsInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions"], + listForAuthenticatedUser: ["GET /user/teams"], + listMembersInOrg: ["GET /orgs/{org}/teams/{team_slug}/members"], + listPendingInvitationsInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/invitations" + ], + listProjectsInOrg: ["GET /orgs/{org}/teams/{team_slug}/projects"], + listReposInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos"], + removeMembershipForUserInOrg: [ + "DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}" + ], + removeProjectInOrg: [ + "DELETE /orgs/{org}/teams/{team_slug}/projects/{project_id}" + ], + removeRepoInOrg: [ + "DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}" + ], + updateDiscussionCommentInOrg: [ + "PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}" + ], + updateDiscussionInOrg: [ + "PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}" + ], + updateInOrg: ["PATCH /orgs/{org}/teams/{team_slug}"] + }, + users: { + addEmailForAuthenticated: [ + "POST /user/emails", + {}, + { renamed: ["users", "addEmailForAuthenticatedUser"] } + ], + addEmailForAuthenticatedUser: ["POST /user/emails"], + addSocialAccountForAuthenticatedUser: ["POST /user/social_accounts"], + block: ["PUT /user/blocks/{username}"], + checkBlocked: ["GET /user/blocks/{username}"], + checkFollowingForUser: ["GET /users/{username}/following/{target_user}"], + checkPersonIsFollowedByAuthenticated: ["GET /user/following/{username}"], + createGpgKeyForAuthenticated: [ + "POST /user/gpg_keys", + {}, + { renamed: ["users", "createGpgKeyForAuthenticatedUser"] } + ], + createGpgKeyForAuthenticatedUser: ["POST /user/gpg_keys"], + createPublicSshKeyForAuthenticated: [ + "POST /user/keys", + {}, + { renamed: ["users", "createPublicSshKeyForAuthenticatedUser"] } + ], + createPublicSshKeyForAuthenticatedUser: ["POST /user/keys"], + createSshSigningKeyForAuthenticatedUser: ["POST /user/ssh_signing_keys"], + deleteEmailForAuthenticated: [ + "DELETE /user/emails", + {}, + { renamed: ["users", "deleteEmailForAuthenticatedUser"] } + ], + deleteEmailForAuthenticatedUser: ["DELETE /user/emails"], + deleteGpgKeyForAuthenticated: [ + "DELETE /user/gpg_keys/{gpg_key_id}", + {}, + { renamed: ["users", "deleteGpgKeyForAuthenticatedUser"] } + ], + deleteGpgKeyForAuthenticatedUser: ["DELETE /user/gpg_keys/{gpg_key_id}"], + deletePublicSshKeyForAuthenticated: [ + "DELETE /user/keys/{key_id}", + {}, + { renamed: ["users", "deletePublicSshKeyForAuthenticatedUser"] } + ], + deletePublicSshKeyForAuthenticatedUser: ["DELETE /user/keys/{key_id}"], + deleteSocialAccountForAuthenticatedUser: ["DELETE /user/social_accounts"], + deleteSshSigningKeyForAuthenticatedUser: [ + "DELETE /user/ssh_signing_keys/{ssh_signing_key_id}" + ], + follow: ["PUT /user/following/{username}"], + getAuthenticated: ["GET /user"], + getByUsername: ["GET /users/{username}"], + getContextForUser: ["GET /users/{username}/hovercard"], + getGpgKeyForAuthenticated: [ + "GET /user/gpg_keys/{gpg_key_id}", + {}, + { renamed: ["users", "getGpgKeyForAuthenticatedUser"] } + ], + getGpgKeyForAuthenticatedUser: ["GET /user/gpg_keys/{gpg_key_id}"], + getPublicSshKeyForAuthenticated: [ + "GET /user/keys/{key_id}", + {}, + { renamed: ["users", "getPublicSshKeyForAuthenticatedUser"] } + ], + getPublicSshKeyForAuthenticatedUser: ["GET /user/keys/{key_id}"], + getSshSigningKeyForAuthenticatedUser: [ + "GET /user/ssh_signing_keys/{ssh_signing_key_id}" + ], + list: ["GET /users"], + listBlockedByAuthenticated: [ + "GET /user/blocks", + {}, + { renamed: ["users", "listBlockedByAuthenticatedUser"] } + ], + listBlockedByAuthenticatedUser: ["GET /user/blocks"], + listEmailsForAuthenticated: [ + "GET /user/emails", + {}, + { renamed: ["users", "listEmailsForAuthenticatedUser"] } + ], + listEmailsForAuthenticatedUser: ["GET /user/emails"], + listFollowedByAuthenticated: [ + "GET /user/following", + {}, + { renamed: ["users", "listFollowedByAuthenticatedUser"] } + ], + listFollowedByAuthenticatedUser: ["GET /user/following"], + listFollowersForAuthenticatedUser: ["GET /user/followers"], + listFollowersForUser: ["GET /users/{username}/followers"], + listFollowingForUser: ["GET /users/{username}/following"], + listGpgKeysForAuthenticated: [ + "GET /user/gpg_keys", + {}, + { renamed: ["users", "listGpgKeysForAuthenticatedUser"] } + ], + listGpgKeysForAuthenticatedUser: ["GET /user/gpg_keys"], + listGpgKeysForUser: ["GET /users/{username}/gpg_keys"], + listPublicEmailsForAuthenticated: [ + "GET /user/public_emails", + {}, + { renamed: ["users", "listPublicEmailsForAuthenticatedUser"] } + ], + listPublicEmailsForAuthenticatedUser: ["GET /user/public_emails"], + listPublicKeysForUser: ["GET /users/{username}/keys"], + listPublicSshKeysForAuthenticated: [ + "GET /user/keys", + {}, + { renamed: ["users", "listPublicSshKeysForAuthenticatedUser"] } + ], + listPublicSshKeysForAuthenticatedUser: ["GET /user/keys"], + listSocialAccountsForAuthenticatedUser: ["GET /user/social_accounts"], + listSocialAccountsForUser: ["GET /users/{username}/social_accounts"], + listSshSigningKeysForAuthenticatedUser: ["GET /user/ssh_signing_keys"], + listSshSigningKeysForUser: ["GET /users/{username}/ssh_signing_keys"], + setPrimaryEmailVisibilityForAuthenticated: [ + "PATCH /user/email/visibility", + {}, + { renamed: ["users", "setPrimaryEmailVisibilityForAuthenticatedUser"] } + ], + setPrimaryEmailVisibilityForAuthenticatedUser: [ + "PATCH /user/email/visibility" + ], + unblock: ["DELETE /user/blocks/{username}"], + unfollow: ["DELETE /user/following/{username}"], + updateAuthenticated: ["PATCH /user"] + } +}; +var endpoints_default = Endpoints; + +const endpointMethodsMap = /* @__PURE__ */ new Map(); +for (const [scope, endpoints] of Object.entries(endpoints_default)) { + for (const [methodName, endpoint] of Object.entries(endpoints)) { + const [route, defaults, decorations] = endpoint; + const [method, url] = route.split(/ /); + const endpointDefaults = Object.assign( + { + method, + url + }, + defaults + ); + if (!endpointMethodsMap.has(scope)) { + endpointMethodsMap.set(scope, /* @__PURE__ */ new Map()); + } + endpointMethodsMap.get(scope).set(methodName, { + scope, + methodName, + endpointDefaults, + decorations + }); + } +} +const handler = { + has({ scope }, methodName) { + return endpointMethodsMap.get(scope).has(methodName); + }, + getOwnPropertyDescriptor(target, methodName) { + return { + value: this.get(target, methodName), + // ensures method is in the cache + configurable: true, + writable: true, + enumerable: true + }; + }, + defineProperty(target, methodName, descriptor) { + Object.defineProperty(target.cache, methodName, descriptor); + return true; + }, + deleteProperty(target, methodName) { + delete target.cache[methodName]; + return true; + }, + ownKeys({ scope }) { + return [...endpointMethodsMap.get(scope).keys()]; + }, + set(target, methodName, value) { + return target.cache[methodName] = value; + }, + get({ octokit, scope, cache }, methodName) { + if (cache[methodName]) { + return cache[methodName]; + } + const method = endpointMethodsMap.get(scope).get(methodName); + if (!method) { + return void 0; + } + const { endpointDefaults, decorations } = method; + if (decorations) { + cache[methodName] = decorate( + octokit, + scope, + methodName, + endpointDefaults, + decorations + ); + } else { + cache[methodName] = octokit.request.defaults(endpointDefaults); + } + return cache[methodName]; + } +}; +function endpointsToMethods(octokit) { + const newMethods = {}; + for (const scope of endpointMethodsMap.keys()) { + newMethods[scope] = new Proxy({ octokit, scope, cache: {} }, handler); + } + return newMethods; +} +function decorate(octokit, scope, methodName, defaults, decorations) { + const requestWithDefaults = octokit.request.defaults(defaults); + function withDecorations(...args) { + let options = requestWithDefaults.endpoint.merge(...args); + if (decorations.mapToData) { + options = Object.assign({}, options, { + data: options[decorations.mapToData], + [decorations.mapToData]: void 0 + }); + return requestWithDefaults(options); + } + if (decorations.renamed) { + const [newScope, newMethodName] = decorations.renamed; + octokit.log.warn( + `octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()` + ); + } + if (decorations.deprecated) { + octokit.log.warn(decorations.deprecated); + } + if (decorations.renamedParameters) { + const options2 = requestWithDefaults.endpoint.merge(...args); + for (const [name, alias] of Object.entries( + decorations.renamedParameters + )) { + if (name in options2) { + octokit.log.warn( + `"${name}" parameter is deprecated for "octokit.${scope}.${methodName}()". Use "${alias}" instead` + ); + if (!(alias in options2)) { + options2[alias] = options2[name]; + } + delete options2[name]; + } + } + return requestWithDefaults(options2); + } + return requestWithDefaults(...args); + } + return Object.assign(withDecorations, requestWithDefaults); +} + +function legacyRestEndpointMethods(octokit) { + const api = endpointsToMethods(octokit); + return { + ...api, + rest: api + }; +} +legacyRestEndpointMethods.VERSION = VERSION$1; + +const VERSION = "21.0.0"; + +const Octokit = Octokit$1.plugin(requestLog, legacyRestEndpointMethods, paginateRest).defaults( + { + userAgent: `octokit-rest.js/${VERSION}` + } +); + +const debug$4 = debugFactory('update-package'); +function updatePackageJson(path, partial) { + return __awaiter$1(this, void 0, void 0, function* () { + const exists = yield fileExists(path); + if (!exists) { + debug$4(`File not exists ${path}`); + return; + } + const old = require(path); + yield writeFileAsync(path, JSON.stringify(Object.assign(Object.assign({}, old), partial), null, 2)); + }); +} + +const debug$3 = debugFactory('version'); +class VersionCommand extends Command { + constructor() { + super(...arguments); + this.prefix = String$1(`-p,--prefix`, 'npm'); + this.configFileName = String$1('-c,--config'); + } + static updatePackageJson(prefix, configFileName) { + return __awaiter$1(this, void 0, void 0, function* () { + const { version, platforms } = getNapiConfig(configFileName); + for (const platformDetail of platforms) { + const pkgDir = path$1.join(process.cwd(), prefix, platformDetail.platformArchABI); + debug$3(`Update version to ${greenBright(version)} in [${yellowBright(pkgDir)}]`); + yield updatePackageJson(path$1.join(pkgDir, 'package.json'), { + version, + }); + } + }); + } + execute() { + return __awaiter$1(this, void 0, void 0, function* () { + yield VersionCommand.updatePackageJson(this.prefix, this.configFileName); + yield spawn('git add .'); + }); + } +} +VersionCommand.usage = Command.Usage({ + description: 'Update versions in created npm dir', +}); +VersionCommand.paths = [['version']]; + +const debug$2 = debugFactory('prepublish'); +class PrePublishCommand extends Command { + constructor() { + super(...arguments); + this.prefix = String$1(`-p,--prefix`, 'npm'); + this.tagStyle = String$1('--tagstyle,-t', 'lerna'); + this.configFileName = String$1('-c,--config'); + this.isDryRun = Boolean$1('--dry-run', false); + this.skipGHRelease = Boolean$1('--skip-gh-release', false); + this.ghReleaseName = String$1('--gh-release-name'); + this.existingReleaseId = String$1('--gh-release-id'); + } + execute() { + return __awaiter$1(this, void 0, void 0, function* () { + const { packageJsonPath, platforms, version, packageName, binaryName, npmClient, } = getNapiConfig(this.configFileName); + debug$2(`Update optionalDependencies in [${packageJsonPath}]`); + if (!this.isDryRun) { + yield VersionCommand.updatePackageJson(this.prefix, this.configFileName); + yield updatePackageJson(packageJsonPath, { + optionalDependencies: platforms.reduce((acc, cur) => { + acc[`${packageName}-${cur.platformArchABI}`] = `${version}`; + return acc; + }, {}), + }); + } + const { owner, repo, pkgInfo, octokit } = this.existingReleaseId + ? yield this.getRepoInfo(packageName, version) + : yield this.createGhRelease(packageName, version); + for (const platformDetail of platforms) { + const pkgDir = path$1.join(process.cwd(), this.prefix, `${platformDetail.platformArchABI}`); + const filename = `${binaryName}.${platformDetail.platformArchABI}.node`; + const dstPath = path$1.join(pkgDir, filename); + if (!this.isDryRun) { + if (!require$$0$2.existsSync(dstPath)) { + console.warn(`[${yellowBright(dstPath)}] doesn't exist`); + continue; + } + yield spawn(`${npmClient} publish`, { + cwd: pkgDir, + env: process.env, + }); + if (!this.skipGHRelease && repo && owner) { + debug$2(`Start upload [${greenBright(dstPath)}] to Github release, [${greenBright(pkgInfo.tag)}]`); + try { + const releaseId = this.existingReleaseId + ? Number(this.existingReleaseId) + : (yield octokit.repos.getReleaseByTag({ + repo: repo, + owner: owner, + tag: pkgInfo.tag, + })).data.id; + const dstFileStats = require$$0$2.statSync(dstPath); + const assetInfo = yield octokit.repos.uploadReleaseAsset({ + owner: owner, + repo: repo, + name: filename, + release_id: releaseId, + mediaType: { format: 'raw' }, + headers: { + 'content-length': dstFileStats.size, + 'content-type': 'application/octet-stream', + }, + // @ts-expect-error + data: yield readFileAsync(dstPath), + }); + console.info(`${green(dstPath)} upload success`); + console.info(`Download url: ${blueBright(assetInfo.data.browser_download_url)}`); + } + catch (e) { + debug$2(`Param: ${JSON.stringify({ owner, repo, tag: pkgInfo.tag, filename: dstPath }, null, 2)}`); + console.error(e); + } + } + } + } + }); + } + createGhRelease(packageName, version) { + return __awaiter$1(this, void 0, void 0, function* () { + if (this.skipGHRelease) { + return { + owner: null, + repo: null, + pkgInfo: { name: null, version: null, tag: null }, + }; + } + const { repo, owner, pkgInfo, octokit } = yield this.getRepoInfo(packageName, version); + if (!repo || !owner) { + return { + owner: null, + repo: null, + pkgInfo: { name: null, version: null, tag: null }, + }; + } + if (!this.isDryRun) { + try { + yield octokit.repos.createRelease({ + owner, + repo, + tag_name: pkgInfo.tag, + name: this.ghReleaseName, + prerelease: version.includes('alpha') || + version.includes('beta') || + version.includes('rc'), + }); + } + catch (e) { + debug$2(`Params: ${JSON.stringify({ owner, repo, tag_name: pkgInfo.tag }, null, 2)}`); + console.error(e); + } + } + return { owner, repo, pkgInfo, octokit }; + }); + } + getRepoInfo(packageName, version) { + return __awaiter$1(this, void 0, void 0, function* () { + const headCommit = (yield spawn('git log -1 --pretty=%B')) + .toString('utf8') + .trim(); + const { GITHUB_REPOSITORY } = process.env; + if (!GITHUB_REPOSITORY) { + return { + owner: null, + repo: null, + pkgInfo: { name: null, version: null, tag: null }, + }; + } + debug$2(`Github repository: ${GITHUB_REPOSITORY}`); + const [owner, repo] = GITHUB_REPOSITORY.split('/'); + const octokit = new Octokit({ + auth: process.env.GITHUB_TOKEN, + }); + let pkgInfo; + if (this.tagStyle === 'lerna') { + const packagesToPublish = headCommit + .split('\n') + .map((line) => line.trim()) + .filter((line, index) => line.length && index) + .map((line) => line.substring(2)) + .map(this.parseTag); + pkgInfo = packagesToPublish.find((pkgInfo) => pkgInfo.name === packageName); + if (!pkgInfo) { + throw new TypeError(`No release commit found with ${packageName}, original commit info: ${headCommit}`); + } + } + else { + pkgInfo = { + tag: `v${version}`, + version, + name: packageName, + }; + } + return { owner, repo, pkgInfo, octokit }; + }); + } + parseTag(tag) { + const segments = tag.split('@'); + const version = segments.pop(); + const name = segments.join('@'); + return { + name, + version, + tag, + }; + } +} +PrePublishCommand.usage = Command.Usage({ + description: 'Update package.json and copy addons into per platform packages', +}); +PrePublishCommand.paths = [['prepublish']]; + +const debug$1 = debugFactory('rename'); +class RenameCommand extends Command { + constructor() { + super(...arguments); + this.name = String$1('-n', { + required: false, + description: 'The new name of the project', + }); + this.napiName = String$1('--napi-name', { + required: false, + description: 'The new napi addon name', + }); + this.repository = String$1('--repository', { + required: false, + description: 'The repository of the package', + }); + this.description = String$1('-d,--description', { + required: false, + description: 'The description of the package', + }); + this.cwd = String$1({ + required: false, + }); + } + execute() { + var _a, _b, _c, _d, _e; + return __awaiter$1(this, void 0, void 0, function* () { + const cwd = (_a = this.cwd) !== null && _a !== void 0 ? _a : process.cwd(); + const packageJson = yield readFileAsync(path$1.join(cwd, 'package.json'), 'utf8'); + const packageJsonData = JSON.parse(packageJson); + const name = (_b = this.name) !== null && _b !== void 0 ? _b : (yield inquirer.prompt({ + name: 'name', + type: 'input', + suffix: dim(' name field in package.json'), + })).name; + const napiName = (_c = this.napiName) !== null && _c !== void 0 ? _c : (yield inquirer.prompt({ + name: 'napi name', + type: 'input', + default: name.split('/')[1], + }))['napi name']; + debug$1('name: %s, napi name: %s', name, napiName); + packageJsonData.name = name; + packageJsonData.napi.name = napiName; + const repository = (_d = this.repository) !== null && _d !== void 0 ? _d : (yield inquirer.prompt({ + name: 'repository', + type: 'input', + suffix: dim(' Leave empty to skip'), + })).repository; + if (repository) { + packageJsonData.repository = repository; + } + const description = (_e = this.description) !== null && _e !== void 0 ? _e : (yield inquirer.prompt({ + name: 'description', + type: 'input', + suffix: dim(' Leave empty to skip'), + })).description; + if (description) { + packageJsonData.description = description; + } + yield writeFileAsync(path$1.join(cwd, 'package.json'), JSON.stringify(packageJsonData, null, 2)); + const CI = yield readFileAsync(path$1.join(cwd, '.github', 'workflows', 'CI.yml'), 'utf8'); + const CIObject = load(CI); + CIObject.env.APP_NAME = napiName; + yield writeFileAsync(path$1.join(cwd, '.github', 'workflows', 'CI.yml'), dump(CIObject, { + lineWidth: 1000, + })); + let tomlContent = yield readFileAsync(path$1.join(cwd, 'Cargo.toml'), 'utf8'); + tomlContent = tomlContent.replace('name = "napi-package-template"', `name = "${napiName}"`); + yield writeFileAsync(path$1.join(cwd, 'Cargo.toml'), tomlContent); + yield spawn('napi create-npm-dir -t .'); + }); + } +} +RenameCommand.paths = [['rename']]; + +const debug = debugFactory('universal'); +class UniversalCommand extends Command { + constructor() { + super(...arguments); + this.sourceDir = String$1('-d,--dir', 'artifacts'); + this.distDir = String$1('--dist', '.'); + this.configFileName = String$1('-c,--config'); + this.buildUniversal = { + darwin: (binName, srcFiles) => { + const outPath = path$1.join(this.distDir, `${binName}.${process.platform}-universal.node`); + const srcPaths = srcFiles.map((f) => path$1.join(this.sourceDir, f)); + require$$1$1.spawnSync('lipo', ['-create', '-output', outPath, ...srcPaths]); + return outPath; + }, + }; + } + execute() { + var _a; + return __awaiter$1(this, void 0, void 0, function* () { + const { platforms, binaryName } = getNapiConfig(this.configFileName); + const targetPlatform = platforms.find((p) => p.platform === process.platform && p.arch === 'universal'); + if (!targetPlatform) { + throw new TypeError(`'universal' arch for platform '${process.platform}' not found in config!`); + } + const srcFiles = (_a = UniArchsByPlatform[process.platform]) === null || _a === void 0 ? void 0 : _a.map((a) => `${binaryName}.${process.platform}-${a}.node`); + if (!srcFiles) { + throw new TypeError(`'universal' arch for platform '${process.platform}' not supported.`); + } + debug(`Looking up source binaries to combine: ${yellowBright(srcFiles.join(', '))}`); + const srcFileLookup = yield Promise.all(srcFiles.map((f) => fileExists(path$1.join(this.sourceDir, f)))); + const notFoundFiles = srcFiles.filter((_f, i) => !srcFileLookup[i]); + if (notFoundFiles.length > 0) { + throw new TypeError(`Some binary files were not found: ${JSON.stringify(notFoundFiles)}`); + } + const outPath = this.buildUniversal[process.platform](binaryName, srcFiles); + debug(`Produced universal binary: ${outPath}`); + }); + } +} +UniversalCommand.usage = Command.Usage({ + description: 'Combine built binaries to universal binaries', +}); +UniversalCommand.paths = [['universal']]; + +const cli = new Cli({ + binaryName: 'napi', + binaryVersion: version$1, +}); +cli.register(ArtifactsCommand); +cli.register(BuildCommand); +cli.register(CreateNpmDirCommand); +cli.register(PrePublishCommand); +cli.register(VersionCommand); +cli.register(UniversalCommand); +cli.register(NewProjectCommand); +cli.register(RenameCommand); +cli.register(HelpCommand); +cli + .run(process.argv.slice(2), Object.assign({}, Cli.defaultContext)) + .then((status) => { + process.exit(status); +}) + .catch((e) => { + console.error(e); + process.exit(1); +}); + +const simpleKeyRegExp = /^[a-zA-Z_][a-zA-Z0-9_]*$/; +function getPrintable(value) { + if (value === null) + return `null`; + if (value === undefined) + return `undefined`; + if (value === ``) + return `an empty string`; + if (typeof value === 'symbol') + return `<${value.toString()}>`; + if (Array.isArray(value)) + return `an array`; + return JSON.stringify(value); +} +function computeKey(state, key) { + var _a, _b, _c; + if (typeof key === `number`) { + return `${(_a = state === null || state === void 0 ? void 0 : state.p) !== null && _a !== void 0 ? _a : `.`}[${key}]`; + } + else if (simpleKeyRegExp.test(key)) { + return `${(_b = state === null || state === void 0 ? void 0 : state.p) !== null && _b !== void 0 ? _b : ``}.${key}`; + } + else { + return `${(_c = state === null || state === void 0 ? void 0 : state.p) !== null && _c !== void 0 ? _c : `.`}[${JSON.stringify(key)}]`; + } +} + +function pushError({ errors, p } = {}, message) { + errors === null || errors === void 0 ? void 0 : errors.push(`${p !== null && p !== void 0 ? p : `.`}: ${message}`); + return false; +} +function makeCoercionFn(target, key) { + return (v) => { + const previous = target[key]; + target[key] = v; + return makeCoercionFn(target, key).bind(null, previous); + }; +} + +/** + * Create a validator that always returns true and never refines the type. + */ +function isUnknown() { + return makeValidator({ + test: (value, state) => { + return true; + }, + }); +} +/** + * Create a validator that only returns true when the tested value is a string. + * Refines the type to `string`. + */ +function isString() { + return makeValidator({ + test: (value, state) => { + if (typeof value !== `string`) + return pushError(state, `Expected a string (got ${getPrintable(value)})`); + return true; + }, + }); +} +/** + * Create a validator that only returns true when the tested value is an + * array whose all values match the provided subspec. Refines the type to + * `Array`, with `T` being the subspec inferred type. + * + * Supports coercion if the `delimiter` option is set, in which case strings + * will be split accordingly. + */ +function isArray(spec, { delimiter } = {}) { + return makeValidator({ + test: (value, state) => { + var _a; + const originalValue = value; + if (typeof value === `string` && typeof delimiter !== `undefined`) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) + return pushError(state, `Unbound coercion result`); + value = value.split(delimiter); + } + } + if (!Array.isArray(value)) + return pushError(state, `Expected an array (got ${getPrintable(value)})`); + let valid = true; + for (let t = 0, T = value.length; t < T; ++t) { + valid = spec(value[t], Object.assign(Object.assign({}, state), { p: computeKey(state, t), coercion: makeCoercionFn(value, t) })) && valid; + if (!valid && (state === null || state === void 0 ? void 0 : state.errors) == null) { + break; + } + } + if (value !== originalValue) + state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, value)]); + return valid; + }, + }); +} +/** + * Create a validator that only returns true when the tested value is a + * tuple whose each value matches the corresponding subspec. Refines the type + * into a tuple whose each item has the type inferred by the corresponding + * tuple. + * + * Supports coercion if the `delimiter` option is set, in which case strings + * will be split accordingly. + */ +function isTuple(spec, { delimiter } = {}) { + const lengthValidator = hasExactLength(spec.length); + return makeValidator({ + test: (value, state) => { + var _a; + if (typeof value === `string` && typeof delimiter !== `undefined`) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) + return pushError(state, `Unbound coercion result`); + value = value.split(delimiter); + state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, value)]); + } + } + if (!Array.isArray(value)) + return pushError(state, `Expected a tuple (got ${getPrintable(value)})`); + let valid = lengthValidator(value, Object.assign({}, state)); + for (let t = 0, T = value.length; t < T && t < spec.length; ++t) { + valid = spec[t](value[t], Object.assign(Object.assign({}, state), { p: computeKey(state, t), coercion: makeCoercionFn(value, t) })) && valid; + if (!valid && (state === null || state === void 0 ? void 0 : state.errors) == null) { + break; + } + } + return valid; + }, + }); +} +/** + * Create a validator that only returns true when the tested value is an + * object with any amount of properties that must all match the provided + * subspec. Refines the type to `Record`, with `T` being the + * subspec inferred type. + * + * Keys can be optionally validated as well by using the `keys` optional + * subspec parameter. + */ +function isRecord(spec, { keys: keySpec = null, } = {}) { + const isArrayValidator = isArray(isTuple([keySpec !== null && keySpec !== void 0 ? keySpec : isString(), spec])); + return makeValidator({ + test: (value, state) => { + var _a; + if (Array.isArray(value)) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) + return pushError(state, `Unbound coercion result`); + if (!isArrayValidator(value, Object.assign(Object.assign({}, state), { coercion: undefined }))) + return false; + value = Object.fromEntries(value); + state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, value)]); + return true; + } + } + if (typeof value !== `object` || value === null) + return pushError(state, `Expected an object (got ${getPrintable(value)})`); + const keys = Object.keys(value); + let valid = true; + for (let t = 0, T = keys.length; t < T && (valid || (state === null || state === void 0 ? void 0 : state.errors) != null); ++t) { + const key = keys[t]; + const sub = value[key]; + if (key === `__proto__` || key === `constructor`) { + valid = pushError(Object.assign(Object.assign({}, state), { p: computeKey(state, key) }), `Unsafe property name`); + continue; + } + if (keySpec !== null && !keySpec(key, state)) { + valid = false; + continue; + } + if (!spec(sub, Object.assign(Object.assign({}, state), { p: computeKey(state, key), coercion: makeCoercionFn(value, key) }))) { + valid = false; + continue; + } + } + return valid; + }, + }); +} +/** + * @deprecated Replace `isDict` by `isRecord` + */ +function isDict(spec, opts = {}) { + return isRecord(spec, opts); +} + +function makeTrait(value) { + return () => { + return value; + }; +} +function makeValidator({ test }) { + return makeTrait(test)(); +} +/** + * Create a validator that checks that the tested array or string has exactly + * the specified length. + */ +function hasExactLength(length) { + return makeValidator({ + test: (value, state) => { + if (!(value.length === length)) + return pushError(state, `Expected to have a length of exactly ${length} elements (got ${value.length})`); + return true; + }, + }); +} + +function cascade(spec, ...followups) { + const resolvedFollowups = Array.isArray(followups[0]) + ? followups[0] + : followups; + return makeValidator({ + test: (value, state) => { + var _a, _b; + const context = { value: value }; + const subCoercion = typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined` + ? makeCoercionFn(context, `value`) : undefined; + const subCoercions = typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined` + ? [] : undefined; + if (!spec(value, Object.assign(Object.assign({}, state), { coercion: subCoercion, coercions: subCoercions }))) + return false; + const reverts = []; + if (typeof subCoercions !== `undefined`) + for (const [, coercion] of subCoercions) + reverts.push(coercion()); + try { + if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { + if (context.value !== value) { + if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) + return pushError(state, `Unbound coercion result`); + state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, context.value)]); + } + (_b = state === null || state === void 0 ? void 0 : state.coercions) === null || _b === void 0 ? void 0 : _b.push(...subCoercions); + } + return resolvedFollowups.every(spec => { + return spec(context.value, state); + }); + } + finally { + for (const revert of reverts) { + revert(); + } + } + }, + }); +} +function applyCascade(spec, ...followups) { + const resolvedFollowups = Array.isArray(followups[0]) + ? followups[0] + : followups; + return cascade(spec, resolvedFollowups); +} +var KeyRelationship; +(function (KeyRelationship) { + KeyRelationship["Forbids"] = "Forbids"; + KeyRelationship["Requires"] = "Requires"; +})(KeyRelationship || (KeyRelationship = {})); +({ + [KeyRelationship.Forbids]: { + expect: false, + message: `forbids using`, + }, + [KeyRelationship.Requires]: { + expect: true, + message: `requires using`, + }, +}); + +var index = /*#__PURE__*/Object.freeze({ + __proto__: null, + get KeyRelationship () { return KeyRelationship; }, + applyCascade: applyCascade, + cascade: cascade, + hasExactLength: hasExactLength, + isArray: isArray, + isDict: isDict, + isRecord: isRecord, + isString: isString, + isTuple: isTuple, + isUnknown: isUnknown, + makeTrait: makeTrait, + makeValidator: makeValidator +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90cnktdG8tc3RyaW5nLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtY2FsbGFibGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWF0aC10cnVuYy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb3duLWtleXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWZvcmNlZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1mbGFncy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtc3RpY2t5LWhlbHBlcnMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2h0bWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1hcHBseS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LXN1YnN0aXR1dGlvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcmVnZXhwLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1nZXQtZmxhZ3MuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLWFsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnRyeS11bmJpbmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9lcy9zdHJpbmcvcmVwbGFjZS1hbGwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2xpcGFuaW9uL2xpYi9jb25zdGFudHMubWpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NsaXBhbmlvbi9saWIvZXJyb3JzLm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jbGlwYW5pb24vbGliL2Zvcm1hdC5tanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2xpcGFuaW9uL2xpYi9hZHZhbmNlZC9vcHRpb25zL3V0aWxzLm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jbGlwYW5pb24vbGliL2FkdmFuY2VkL0NvbW1hbmQubWpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NsaXBhbmlvbi9saWIvY29yZS5tanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2xpcGFuaW9uL2xpYi9wbGF0Zm9ybS9ub2RlLm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jbGlwYW5pb24vbGliL2FkdmFuY2VkL0hlbHBDb21tYW5kLm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jbGlwYW5pb24vbGliL2FkdmFuY2VkL0NsaS5tanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2xpcGFuaW9uL2xpYi9hZHZhbmNlZC9vcHRpb25zL0FycmF5Lm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jbGlwYW5pb24vbGliL2FkdmFuY2VkL29wdGlvbnMvQm9vbGVhbi5tanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2xpcGFuaW9uL2xpYi9hZHZhbmNlZC9vcHRpb25zL1N0cmluZy5tanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb2xvcmV0dGUvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZmRpci9kaXN0L3NyYy91dGlscy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9mZGlyL2Rpc3Qvc3JjL2FwaS9mdW5jdGlvbnMvam9pbi1wYXRoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2ZkaXIvZGlzdC9zcmMvYXBpL2Z1bmN0aW9ucy9wdXNoLWRpcmVjdG9yeS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9mZGlyL2Rpc3Qvc3JjL2FwaS9mdW5jdGlvbnMvcHVzaC1maWxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2ZkaXIvZGlzdC9zcmMvYXBpL2Z1bmN0aW9ucy9nZXQtYXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZmRpci9kaXN0L3NyYy9hcGkvZnVuY3Rpb25zL2dyb3VwLWZpbGVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2ZkaXIvZGlzdC9zcmMvYXBpL2Z1bmN0aW9ucy9yZXNvbHZlLXN5bWxpbmsuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZmRpci9kaXN0L3NyYy9hcGkvZnVuY3Rpb25zL2ludm9rZS1jYWxsYmFjay5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9mZGlyL2Rpc3Qvc3JjL2FwaS9mdW5jdGlvbnMvd2Fsay1kaXJlY3RvcnkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZmRpci9kaXN0L3NyYy9hcGkvcXVldWUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZmRpci9kaXN0L3NyYy9hcGkvY291bnRlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9mZGlyL2Rpc3Qvc3JjL2FwaS93YWxrZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZmRpci9kaXN0L3NyYy9hcGkvYXN5bmMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZmRpci9kaXN0L3NyYy9hcGkvc3luYy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9mZGlyL2Rpc3Qvc3JjL2J1aWxkZXIvYXBpLWJ1aWxkZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcGljb21hdGNoL2xpYi9jb25zdGFudHMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcGljb21hdGNoL2xpYi91dGlscy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9waWNvbWF0Y2gvbGliL3NjYW4uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcGljb21hdGNoL2xpYi9wYXJzZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9waWNvbWF0Y2gvbGliL3BpY29tYXRjaC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9waWNvbWF0Y2gvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZmRpci9kaXN0L3NyYy9idWlsZGVyL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2ZkaXIvZGlzdC9zcmMvdHlwZXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZmRpci9kaXN0L3NyYy9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9mZGlyL2Rpc3QvaW5kZXguanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvcGFyc2UtdHJpcGxlLmpzIiwiLi4vLi4vc2NyaXB0cy9jbGkvc3JjL2NvbnN0cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9oYXMtZmxhZy9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zdXBwb3J0cy1jb2xvci9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9ub2RlX21vZHVsZXMvbXMvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2NvbW1vbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvbm9kZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvYnJvd3Nlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvaW5kZXguanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvZGVidWcuanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvdXRpbHMuanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvYXJ0aWZhY3RzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2Vudi1wYXRocy9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2ZyZWVHbG9iYWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yb290LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fU3ltYm9sLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UmF3VGFnLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0VGFnLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdExpa2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzU3ltYm9sLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlNYXAuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVG9TdHJpbmcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pZGVudGl0eS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNGdW5jdGlvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcmVKc0RhdGEuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc01hc2tlZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3RvU291cmNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzTmF0aXZlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0VmFsdWUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXROYXRpdmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19XZWFrTWFwLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZGVmaW5lUHJvcGVydHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc0luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUFzc2lnblZhbHVlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9lcS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNMZW5ndGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXlMaWtlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNQcm90b3R5cGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVGltZXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNBcmd1bWVudHMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJndW1lbnRzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zdHViRmFsc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQnVmZmVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VVbmFyeS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25vZGVVdGlsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1R5cGVkQXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUxpa2VLZXlzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlckFyZy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUtleXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlS2V5cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzS2V5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlQ3JlYXRlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaENsZWFyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaERlbGV0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2hhc2hHZXQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19oYXNoSGFzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaFNldC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX0hhc2guanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19saXN0Q2FjaGVDbGVhci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Fzc29jSW5kZXhPZi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2xpc3RDYWNoZURlbGV0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2xpc3RDYWNoZUdldC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2xpc3RDYWNoZUhhcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2xpc3RDYWNoZVNldC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX0xpc3RDYWNoZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX01hcC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hcENhY2hlQ2xlYXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc0tleWFibGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRNYXBEYXRhLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwQ2FjaGVEZWxldGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tYXBDYWNoZUdldC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hcENhY2hlSGFzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwQ2FjaGVTZXQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19NYXBDYWNoZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvbWVtb2l6ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21lbW9pemVDYXBwZWQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdHJpbmdUb1BhdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RvU3RyaW5nLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2FzdFBhdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL190b0tleS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VHZXQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2dldC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5UHVzaC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3N0YWNrQ2xlYXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdGFja0RlbGV0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3N0YWNrR2V0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RhY2tIYXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdGFja1NldC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N0YWNrLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlGaWx0ZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3N0dWJBcnJheS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFN5bWJvbHMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0QWxsS2V5cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldEFsbEtleXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19EYXRhVmlldy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1Byb21pc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TZXQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRUYWcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19VaW50OEFycmF5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2V0Q2FjaGVBZGQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zZXRDYWNoZUhhcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1NldENhY2hlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlTb21lLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2FjaGVIYXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19lcXVhbEFycmF5cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hcFRvQXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zZXRUb0FycmF5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXF1YWxCeVRhZy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2VxdWFsT2JqZWN0cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc0VxdWFsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzTWF0Y2guanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc1N0cmljdENvbXBhcmFibGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRNYXRjaERhdGEuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VNYXRjaGVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUhhc0luLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzUGF0aC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaGFzSW4uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlTWF0Y2hlc1Byb3BlcnR5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVByb3BlcnR5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVByb3BlcnR5RGVlcC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvcHJvcGVydHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXRlcmF0ZWUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUFnZ3JlZ2F0b3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jcmVhdGVCYXNlRm9yLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUZvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VGb3JPd24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jcmVhdGVCYXNlRWFjaC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VFYWNoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUFnZ3JlZ2F0b3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jcmVhdGVBZ2dyZWdhdG9yLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9ncm91cEJ5LmpzIiwiLi4vLi4vc2NyaXB0cy9jbGkvc3JjL2FybS1mZWF0dXJlcy5oLmpzIiwiLi4vLi4vc2NyaXB0cy9jbGkvc3JjL2pzLWJpbmRpbmctdGVtcGxhdGUuanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvYnVpbGQuanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvY3JlYXRlLW5wbS1kaXIuanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvaGVscC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9hbnNpLWVzY2FwZXMvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMveW9jdG9jb2xvcnMtY2pzL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0BpbnF1aXJlci9maWd1cmVzL2Rpc3QvZXNtL2luZGV4Lm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9ub2RlX21vZHVsZXMvcnVuLWFzeW5jL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9pc0Z1bmN0aW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9jcmVhdGVFcnJvckNsYXNzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9VbnN1YnNjcmlwdGlvbkVycm9yLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9hcnJSZW1vdmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9TdWJzY3JpcHRpb24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9jb25maWcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZXIvdGltZW91dFByb3ZpZGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9yZXBvcnRVbmhhbmRsZWRFcnJvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvbm9vcC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL05vdGlmaWNhdGlvbkZhY3Rvcmllcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvZXJyb3JDb250ZXh0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvU3Vic2NyaWJlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3N5bWJvbC9vYnNlcnZhYmxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9pZGVudGl0eS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvcGlwZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL09ic2VydmFibGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL2xpZnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvT3BlcmF0b3JTdWJzY3JpYmVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3JlZkNvdW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZXIvcGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3NjaGVkdWxlci9hbmltYXRpb25GcmFtZVByb3ZpZGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9kb20vYW5pbWF0aW9uRnJhbWVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9PYmplY3RVbnN1YnNjcmliZWRFcnJvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL1N1YmplY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9CZWhhdmlvclN1YmplY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZXIvZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvUmVwbGF5U3ViamVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL0FzeW5jU3ViamVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3NjaGVkdWxlci9BY3Rpb24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZXIvaW50ZXJ2YWxQcm92aWRlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3NjaGVkdWxlci9Bc3luY0FjdGlvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvSW1tZWRpYXRlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL2ltbWVkaWF0ZVByb3ZpZGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL0FzYXBBY3Rpb24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9TY2hlZHVsZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZXIvQXN5bmNTY2hlZHVsZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZXIvQXNhcFNjaGVkdWxlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3NjaGVkdWxlci9hc2FwLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL2FzeW5jLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL1F1ZXVlQWN0aW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL1F1ZXVlU2NoZWR1bGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL3F1ZXVlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL0FuaW1hdGlvbkZyYW1lQWN0aW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL0FuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL2FuaW1hdGlvbkZyYW1lLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL1ZpcnR1YWxUaW1lU2NoZWR1bGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9lbXB0eS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvaXNTY2hlZHVsZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL2FyZ3MuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL2lzQXJyYXlMaWtlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9pc1Byb21pc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL2lzSW50ZXJvcE9ic2VydmFibGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL2lzQXN5bmNJdGVyYWJsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvdGhyb3dVbm9ic2VydmFibGVFcnJvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3N5bWJvbC9pdGVyYXRvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvaXNJdGVyYWJsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvaXNSZWFkYWJsZVN0cmVhbUxpa2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2lubmVyRnJvbS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvZXhlY3V0ZVNjaGVkdWxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL29ic2VydmVPbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9zdWJzY3JpYmVPbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZU9ic2VydmFibGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVQcm9taXNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlQXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVJdGVyYWJsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZUFzeW5jSXRlcmFibGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVkLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9mcm9tLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9vZi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29ic2VydmFibGUvdGhyb3dFcnJvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL05vdGlmaWNhdGlvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvaXNPYnNlcnZhYmxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9FbXB0eUVycm9yLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvbGFzdFZhbHVlRnJvbS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL2ZpcnN0VmFsdWVGcm9tLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9Bcmd1bWVudE91dE9mUmFuZ2VFcnJvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvTm90Rm91bmRFcnJvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvU2VxdWVuY2VFcnJvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvaXNEYXRlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVvdXQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvbWFwLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9tYXBPbmVPck1hbnlBcmdzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9iaW5kQ2FsbGJhY2tJbnRlcm5hbHMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2JpbmRDYWxsYmFjay5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29ic2VydmFibGUvYmluZE5vZGVDYWxsYmFjay5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvYXJnc0FyZ0FycmF5T3JPYmplY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL2NyZWF0ZU9iamVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29ic2VydmFibGUvY29tYmluZUxhdGVzdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9tZXJnZUludGVybmFscy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9tZXJnZU1hcC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9tZXJnZUFsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRBbGwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2NvbmNhdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29ic2VydmFibGUvZGVmZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2Nvbm5lY3RhYmxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9mb3JrSm9pbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29ic2VydmFibGUvZnJvbUV2ZW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9mcm9tRXZlbnRQYXR0ZXJuLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9nZW5lcmF0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29ic2VydmFibGUvaWlmLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS90aW1lci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29ic2VydmFibGUvaW50ZXJ2YWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL21lcmdlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9uZXZlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvYXJnc09yQXJnQXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL29uRXJyb3JSZXN1bWVOZXh0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9wYWlycy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvbm90LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbHRlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29ic2VydmFibGUvcGFydGl0aW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9yYWNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9yYW5nZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29ic2VydmFibGUvdXNpbmcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL3ppcC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3R5cGVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2F1ZGl0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2F1ZGl0VGltZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9idWZmZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyQ291bnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyVGltZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUb2dnbGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyV2hlbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9jYXRjaEVycm9yLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3NjYW5JbnRlcm5hbHMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvcmVkdWNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3RvQXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvam9pbkFsbEludGVybmFscy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0QWxsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbWJpbmVBbGwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvY29tYmluZUxhdGVzdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0V2l0aC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRNYXAuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0TWFwVG8uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdFdpdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb21TdWJzY3JpYmFibGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvY29ubmVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9jb3VudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9kZWJvdW5jZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9kZWJvdW5jZVRpbWUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvZGVmYXVsdElmRW1wdHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9pZ25vcmVFbGVtZW50cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9tYXBUby5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9kZWxheVdoZW4uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvZGVsYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvZGVtYXRlcmlhbGl6ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsQ2hhbmdlZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy90aHJvd0lmRW1wdHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvZWxlbWVudEF0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2VuZFdpdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvZXZlcnkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvZXhoYXVzdE1hcC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0QWxsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2V4aGF1c3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvZXhwYW5kLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmFsaXplLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvZmluZEluZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpcnN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2dyb3VwQnkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvaXNFbXB0eS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy90YWtlTGFzdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9sYXN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL21hdGVyaWFsaXplLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL21heC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9mbGF0TWFwLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlTWFwVG8uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2VTY2FuLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlV2l0aC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9taW4uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvbXVsdGljYXN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL29uRXJyb3JSZXN1bWVOZXh0V2l0aC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9wYWlyd2lzZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9wbHVjay5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2hCZWhhdmlvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoTGFzdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoUmVwbGF5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3JhY2VXaXRoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3JlcGVhdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9yZXBlYXRXaGVuLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3JldHJ5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3JldHJ5V2hlbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9zYW1wbGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvc2FtcGxlVGltZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9zY2FuLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3NlcXVlbmNlRXF1YWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvc2hhcmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvc2hhcmVSZXBsYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvc2luZ2xlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXAuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvc2tpcExhc3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvc2tpcFVudGlsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBXaGlsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9zdGFydFdpdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoTWFwLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaEFsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hNYXBUby5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hTY2FuLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3Rha2VVbnRpbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy90YWtlV2hpbGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvdGFwLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3Rocm90dGxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3Rocm90dGxlVGltZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy90aW1lSW50ZXJ2YWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dFdpdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZXN0YW1wLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvdy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dDb3VudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dUaW1lLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1RvZ2dsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dXaGVuLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3dpdGhMYXRlc3RGcm9tLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3ppcEFsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy96aXAuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvemlwV2l0aC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2lucXVpcmVyL3NyYy91dGlscy9ldmVudHMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvaW5xdWlyZXIvc3JjL3V0aWxzL3BhZ2luYXRvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9zcmMvdXRpbHMvaW5jcmVtZW50TGlzdEluZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2lucXVpcmVyL3NyYy9vYmplY3RzL3NlcGFyYXRvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9zcmMvb2JqZWN0cy9jaG9pY2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvaW5xdWlyZXIvc3JjL29iamVjdHMvY2hvaWNlcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9ub2RlX21vZHVsZXMvY2xpLXdpZHRoL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2Fuc2ktcmVnZXgvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyaXAtYW5zaS9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pcy1mdWxsd2lkdGgtY29kZS1wb2ludC9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9lbW9qaS1yZWdleC9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJpbmctd2lkdGgvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29sb3ItbmFtZS9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb2xvci1jb252ZXJ0L2NvbnZlcnNpb25zLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvcm91dGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29sb3ItY29udmVydC9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcy9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy93cmFwLWFuc2kvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2hhbGsvc291cmNlL3V0aWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2hhbGsvc291cmNlL3RlbXBsYXRlcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbWltaWMtZm4vaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvb25ldGltZS9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zaWduYWwtZXhpdC9zaWduYWxzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3NpZ25hbC1leGl0L2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3Jlc3RvcmUtY3Vyc29yL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NsaS1jdXJzb3IvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2xpLXNwaW5uZXJzL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2lzLXVuaWNvZGUtc3VwcG9ydGVkL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZy1zeW1ib2xzL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nsb25lL2Nsb25lLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2RlZmF1bHRzL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3djd2lkdGgvY29tYmluaW5nLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3djd2lkdGgvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvaXMtaW50ZXJhY3RpdmUvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ibC9CdWZmZXJMaXN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2JsL2JsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL29yYS9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9zcmMvdXRpbHMvcmVhZGxpbmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvaW5xdWlyZXIvc3JjL3V0aWxzL3NjcmVlbi1tYW5hZ2VyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2lucXVpcmVyL3NyYy9wcm9tcHRzL2Jhc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvaW5xdWlyZXIvc3JjL3Byb21wdHMvbGlzdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9zcmMvcHJvbXB0cy9pbnB1dC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9zcmMvcHJvbXB0cy9udW1iZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvaW5xdWlyZXIvc3JjL3Byb21wdHMvY29uZmlybS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9zcmMvcHJvbXB0cy9yYXdsaXN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2lucXVpcmVyL3NyYy9wcm9tcHRzL2V4cGFuZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9zcmMvcHJvbXB0cy9jaGVja2JveC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9zcmMvcHJvbXB0cy9wYXNzd29yZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jaGFyZGV0L21hdGNoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NoYXJkZXQvZW5jb2RpbmcvdXRmOC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jaGFyZGV0L2VuY29kaW5nL3VuaWNvZGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2hhcmRldC9lbmNvZGluZy9tYmNzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NoYXJkZXQvZW5jb2Rpbmcvc2Jjcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jaGFyZGV0L2VuY29kaW5nL2lzbzIwMjIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2hhcmRldC9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zYWZlci1idWZmZXIvc2FmZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZXh0ZXJuYWwtZWRpdG9yL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2xpYi9ib20taGFuZGxpbmcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZXh0ZXJuYWwtZWRpdG9yL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy9pbnRlcm5hbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9leHRlcm5hbC1lZGl0b3Ivbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3V0ZjE2LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2V4dGVybmFsLWVkaXRvci9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvdXRmNy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9leHRlcm5hbC1lZGl0b3Ivbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3NiY3MtY29kZWMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZXh0ZXJuYWwtZWRpdG9yL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy9zYmNzLWRhdGEuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZXh0ZXJuYWwtZWRpdG9yL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy9zYmNzLWRhdGEtZ2VuZXJhdGVkLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2V4dGVybmFsLWVkaXRvci9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvZGJjcy1jb2RlYy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9leHRlcm5hbC1lZGl0b3Ivbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL2RiY3MtZGF0YS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9leHRlcm5hbC1lZGl0b3Ivbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2V4dGVybmFsLWVkaXRvci9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9saWIvc3RyZWFtcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9leHRlcm5hbC1lZGl0b3Ivbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvbGliL2V4dGVuZC1ub2RlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2V4dGVybmFsLWVkaXRvci9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9saWIvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvb3MtdG1wZGlyL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2V4dGVybmFsLWVkaXRvci9ub2RlX21vZHVsZXMvdG1wL2xpYi90bXAuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZXh0ZXJuYWwtZWRpdG9yL21haW4vZXJyb3JzL0NyZWF0ZUZpbGVFcnJvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9leHRlcm5hbC1lZGl0b3IvbWFpbi9lcnJvcnMvTGF1bmNoRWRpdG9yRXJyb3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZXh0ZXJuYWwtZWRpdG9yL21haW4vZXJyb3JzL1JlYWRGaWxlRXJyb3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZXh0ZXJuYWwtZWRpdG9yL21haW4vZXJyb3JzL1JlbW92ZUZpbGVFcnJvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9leHRlcm5hbC1lZGl0b3IvbWFpbi9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9zcmMvcHJvbXB0cy9lZGl0b3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbXV0ZS1zdHJlYW0vbXV0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9zcmMvdWkvYmFzZVVJLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2lucXVpcmVyL3NyYy91aS9ib3R0b20tYmFyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2lucXVpcmVyL3NyYy91dGlscy91dGlscy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9zcmMvdWkvcHJvbXB0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2lucXVpcmVyL3NyYy9pbmRleC5qcyIsIi4uLy4uL3NjcmlwdHMvY2xpL3NyYy9zcGF3bi5qcyIsIi4uLy4uL3NjcmlwdHMvY2xpL3NyYy9uZXcvY2FyZ28uanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvbmV3L2NhcmdvLWNvbmZpZy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9qcy15YW1sL2Rpc3QvanMteWFtbC5tanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvbmV3L2NpLXRlbXBsYXRlLmpzIiwiLi4vLi4vc2NyaXB0cy9jbGkvc3JjL25ldy9jaS15bWwuanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvbmV3L2dpdGlnbm9yZS10ZW1wbGF0ZS5qcyIsIi4uLy4uL3NjcmlwdHMvY2xpL3NyYy9uZXcvbGliLXJzLmpzIiwiLi4vLi4vc2NyaXB0cy9jbGkvc3JjL25ldy9ucG1pZ25vcmUuanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvbmV3L3BhY2thZ2UuanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvbmV3L2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3Jlc3Qvbm9kZV9tb2R1bGVzL3VuaXZlcnNhbC11c2VyLWFnZW50L2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3Jlc3Qvbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9yZWdpc3Rlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXN0L25vZGVfbW9kdWxlcy9iZWZvcmUtYWZ0ZXItaG9vay9saWIvYWRkLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3Jlc3Qvbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9yZW1vdmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVzdC9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVzdC9ub2RlX21vZHVsZXMvQG9jdG9raXQvZW5kcG9pbnQvZGlzdC1idW5kbGUvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVzdC9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC1lcnJvci9kaXN0LXNyYy9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXN0L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXF1ZXN0L2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3Jlc3Qvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2dyYXBocWwvZGlzdC1idW5kbGUvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVzdC9ub2RlX21vZHVsZXMvQG9jdG9raXQvYXV0aC10b2tlbi9kaXN0LWJ1bmRsZS9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXN0L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9jb3JlL2Rpc3Qtc3JjL3ZlcnNpb24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVzdC9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9kaXN0LXNyYy9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXN0L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVxdWVzdC1sb2cvZGlzdC1zcmMvdmVyc2lvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXN0L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVxdWVzdC1sb2cvZGlzdC1zcmMvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVzdC9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXBhZ2luYXRlLXJlc3QvZGlzdC13ZWIvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVzdC9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kcy9kaXN0LXNyYy92ZXJzaW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3Jlc3Qvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHMvZGlzdC1zcmMvZ2VuZXJhdGVkL2VuZHBvaW50cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXN0L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzL2Rpc3Qtc3JjL2VuZHBvaW50cy10by1tZXRob2RzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3Jlc3Qvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHMvZGlzdC1zcmMvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVzdC9kaXN0LXNyYy92ZXJzaW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3Jlc3QvZGlzdC1zcmMvaW5kZXguanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvdXBkYXRlLXBhY2thZ2UuanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvdmVyc2lvbi5qcyIsIi4uLy4uL3NjcmlwdHMvY2xpL3NyYy9wcmUtcHVibGlzaC5qcyIsIi4uLy4uL3NjcmlwdHMvY2xpL3NyYy9yZW5hbWUuanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvdW5pdmVyc2FsLmpzIiwiLi4vLi4vc2NyaXB0cy9jbGkvc3JjL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3R5cGFuaW9uL2xpYi9pbmRleC5tanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgY2hlY2sodHlwZW9mIHRoaXMgPT0gJ29iamVjdCcgJiYgdGhpcykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSkgOiBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIG5hdmlnYXRvciAhPSAndW5kZWZpbmVkJyAmJiBTdHJpbmcobmF2aWdhdG9yLnVzZXJBZ2VudCkgfHwgJyc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWwuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWwuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnc3ltYm9sIGRldGVjdGlvbicpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFtrZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbihzdG9yZS52ZXJzaW9ucyB8fCAoc3RvcmUudmVyc2lvbnMgPSBbXSkpLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zNy4xJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjQgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zNy4xL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgfHwge30pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgc3RvcmUuc2V0KGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuZ2V0KGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmhhcyhpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbGVuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCk7XG4gIHJldHVybiBsZW4gPiAwID8gbWluKGxlbiwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbDtcbiAgfSBlbHNlIGlmIChTVEFUSUMpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxbVEFSR0VUXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxbVEFSR0VUXSAmJiBnbG9iYWxbVEFSR0VUXS5wcm90b3R5cGU7XG4gIH1cbiAgaWYgKHRhcmdldCkgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgc291cmNlUHJvcGVydHkgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgICB0YXJnZXRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5lZCBpbiB0YXJnZXRcbiAgICBpZiAoIUZPUkNFRCAmJiB0YXJnZXRQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVByb3BlcnR5ID09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzb3VyY2VQcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSAkT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT09ICdPYmplY3QnICYmIGlzQ2FsbGFibGUoTy5jYWxsZWUpID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGNsYXNzb2YoYXJndW1lbnQpID09PSAnU3ltYm9sJykgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcbiAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NgIGdldHRlciBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLnByb3RvdHlwZS5mbGFnc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoYXQuaGFzSW5kaWNlcykgcmVzdWx0ICs9ICdkJztcbiAgaWYgKHRoYXQuZ2xvYmFsKSByZXN1bHQgKz0gJ2cnO1xuICBpZiAodGhhdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gJ2knO1xuICBpZiAodGhhdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmICh0aGF0LmRvdEFsbCkgcmVzdWx0ICs9ICdzJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQudW5pY29kZVNldHMpIHJlc3VsdCArPSAndic7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnYScsICd5JykgLT4gL2EveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG5cbnZhciBVTlNVUFBPUlRFRF9ZID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAkUmVnRXhwKCdhJywgJ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ2FiY2QnKSAhPT0gbnVsbDtcbn0pO1xuXG4vLyBVQyBCcm93c2VyIGJ1Z1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzEwMDhcbnZhciBNSVNTRURfU1RJQ0tZID0gVU5TVVBQT1JURURfWSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhJFJlZ0V4cCgnYScsICd5Jykuc3RpY2t5O1xufSk7XG5cbnZhciBCUk9LRU5fQ0FSRVQgPSBVTlNVUFBPUlRFRF9ZIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczNjg3XG4gIHZhciByZSA9ICRSZWdFeHAoJ15yJywgJ2d5Jyk7XG4gIHJlLmxhc3RJbmRleCA9IDI7XG4gIHJldHVybiByZS5leGVjKCdzdHInKSAhPT0gbnVsbDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQlJPS0VOX0NBUkVUOiBCUk9LRU5fQ0FSRVQsXG4gIE1JU1NFRF9TVElDS1k6IE1JU1NFRF9TVElDS1ksXG4gIFVOU1VQUE9SVEVEX1k6IFVOU1VQUE9SVEVEX1lcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1rZXlzIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyAmJiAhVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIHByb3BzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdkb2N1bWVudCcsICdkb2N1bWVudEVsZW1lbnQnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBBY3RpdmVYT2JqZWN0IC0tIG9sZCBJRSwgV1NIICovXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG5cbnZhciBHVCA9ICc+JztcbnZhciBMVCA9ICc8JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBTQ1JJUFQgPSAnc2NyaXB0JztcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbnZhciBzY3JpcHRUYWcgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gTFQgKyBTQ1JJUFQgKyBHVCArIGNvbnRlbnQgKyBMVCArICcvJyArIFNDUklQVCArIEdUO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIEFjdGl2ZVggT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYID0gZnVuY3Rpb24gKGFjdGl2ZVhEb2N1bWVudCkge1xuICBhY3RpdmVYRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCcnKSk7XG4gIGFjdGl2ZVhEb2N1bWVudC5jbG9zZSgpO1xuICB2YXIgdGVtcCA9IGFjdGl2ZVhEb2N1bWVudC5wYXJlbnRXaW5kb3cuT2JqZWN0O1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsOyAvLyBhdm9pZCBtZW1vcnkgbGVha1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgYWN0aXZlWERvY3VtZW50ID0gbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJ1xuICAgID8gZG9jdW1lbnQuZG9tYWluICYmIGFjdGl2ZVhEb2N1bWVudFxuICAgICAgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgLy8gb2xkIElFXG4gICAgICA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpXG4gICAgOiBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCk7IC8vIFdTSFxuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZihyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCcuJywgJ3MnKSAtPiAvLi9zIGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciAkUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJy4nLCAncycpO1xuICByZXR1cm4gIShyZS5kb3RBbGwgJiYgcmUudGVzdCgnXFxuJykgJiYgcmUuZmxhZ3MgPT09ICdzJyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCcoPzxhPmIpJywgJ2cnKSAtPiAvKD88YT5iKS9nIGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciAkUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJyg/PGE+YiknLCAnZycpO1xuICByZXR1cm4gcmUuZXhlYygnYicpLmdyb3Vwcy5hICE9PSAnYicgfHxcbiAgICAnYicucmVwbGFjZShyZSwgJyQ8YT5jJykgIT09ICdiYyc7XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIHJlZ2V4cC9uby1lbXB0eS1jYXB0dXJpbmctZ3JvdXAsIHJlZ2V4cC9uby1lbXB0eS1ncm91cCwgcmVnZXhwL25vLWxhenktZW5kcyAtLSB0ZXN0aW5nICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tdXNlbGVzcy1xdWFudGlmaWVyIC0tIHRlc3RpbmcgKi9cbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldEludGVybmFsU3RhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKS5nZXQ7XG52YXIgVU5TVVBQT1JURURfRE9UX0FMTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbCcpO1xudmFyIFVOU1VQUE9SVEVEX05DRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnJyk7XG5cbnZhciBuYXRpdmVSZXBsYWNlID0gc2hhcmVkKCduYXRpdmUtc3RyaW5nLXJlcGxhY2UnLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgaW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS87XG4gIHZhciByZTIgPSAvYiovZztcbiAgY2FsbChuYXRpdmVFeGVjLCByZTEsICdhJyk7XG4gIGNhbGwobmF0aXZlRXhlYywgcmUyLCAnYScpO1xuICByZXR1cm4gcmUxLmxhc3RJbmRleCAhPT0gMCB8fCByZTIubGFzdEluZGV4ICE9PSAwO1xufSkoKTtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBzdGlja3lIZWxwZXJzLkJST0tFTl9DQVJFVDtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQgfHwgVU5TVVBQT1JURURfWSB8fCBVTlNVUFBPUlRFRF9ET1RfQUxMIHx8IFVOU1VQUE9SVEVEX05DRztcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHJpbmcpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUocmUpO1xuICAgIHZhciBzdHIgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgIHZhciByYXcgPSBzdGF0ZS5yYXc7XG4gICAgdmFyIHJlc3VsdCwgcmVDb3B5LCBsYXN0SW5kZXgsIG1hdGNoLCBpLCBvYmplY3QsIGdyb3VwO1xuXG4gICAgaWYgKHJhdykge1xuICAgICAgcmF3Lmxhc3RJbmRleCA9IHJlLmxhc3RJbmRleDtcbiAgICAgIHJlc3VsdCA9IGNhbGwocGF0Y2hlZEV4ZWMsIHJhdywgc3RyKTtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJhdy5sYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHZhciBncm91cHMgPSBzdGF0ZS5ncm91cHM7XG4gICAgdmFyIHN0aWNreSA9IFVOU1VQUE9SVEVEX1kgJiYgcmUuc3RpY2t5O1xuICAgIHZhciBmbGFncyA9IGNhbGwocmVnZXhwRmxhZ3MsIHJlKTtcbiAgICB2YXIgc291cmNlID0gcmUuc291cmNlO1xuICAgIHZhciBjaGFyc0FkZGVkID0gMDtcbiAgICB2YXIgc3RyQ29weSA9IHN0cjtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGZsYWdzID0gcmVwbGFjZShmbGFncywgJ3knLCAnJyk7XG4gICAgICBpZiAoaW5kZXhPZihmbGFncywgJ2cnKSA9PT0gLTEpIHtcbiAgICAgICAgZmxhZ3MgKz0gJ2cnO1xuICAgICAgfVxuXG4gICAgICBzdHJDb3B5ID0gc3RyaW5nU2xpY2Uoc3RyLCByZS5sYXN0SW5kZXgpO1xuICAgICAgLy8gU3VwcG9ydCBhbmNob3JlZCBzdGlja3kgYmVoYXZpb3IuXG4gICAgICBpZiAocmUubGFzdEluZGV4ID4gMCAmJiAoIXJlLm11bHRpbGluZSB8fCByZS5tdWx0aWxpbmUgJiYgY2hhckF0KHN0ciwgcmUubGFzdEluZGV4IC0gMSkgIT09ICdcXG4nKSkge1xuICAgICAgICBzb3VyY2UgPSAnKD86ICcgKyBzb3VyY2UgKyAnKSc7XG4gICAgICAgIHN0ckNvcHkgPSAnICcgKyBzdHJDb3B5O1xuICAgICAgICBjaGFyc0FkZGVkKys7XG4gICAgICB9XG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgc3RyIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeKD86JyArIHNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgIH1cblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHNvdXJjZSArICckKD8hXFxcXHMpJywgZmxhZ3MpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG5cbiAgICBtYXRjaCA9IGNhbGwobmF0aXZlRXhlYywgc3RpY2t5ID8gcmVDb3B5IDogcmUsIHN0ckNvcHkpO1xuXG4gICAgaWYgKHN0aWNreSkge1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIG1hdGNoLmlucHV0ID0gc3RyaW5nU2xpY2UobWF0Y2guaW5wdXQsIGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaFswXSA9IHN0cmluZ1NsaWNlKG1hdGNoWzBdLCBjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2guaW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICAgIHJlLmxhc3RJbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICB9IGVsc2UgcmUubGFzdEluZGV4ID0gMDtcbiAgICB9IGVsc2UgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmUubGFzdEluZGV4ID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24ndCB3b3JrIGZvciAvKC4/KT8vXG4gICAgICBjYWxsKG5hdGl2ZVJlcGxhY2UsIG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2ggJiYgZ3JvdXBzKSB7XG4gICAgICBtYXRjaC5ncm91cHMgPSBvYmplY3QgPSBjcmVhdGUobnVsbCk7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2ldO1xuICAgICAgICBvYmplY3RbZ3JvdXBbMF1dID0gbWF0Y2hbZ3JvdXBbMV1dO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZXhlY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUuZXhlY1xuJCh7IHRhcmdldDogJ1JlZ0V4cCcsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IC8uLy5leGVjICE9PSBleGVjIH0sIHtcbiAgZXhlYzogZXhlY1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGFwcGx5ID0gRnVuY3Rpb25Qcm90b3R5cGUuYXBwbHk7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1yZWZsZWN0IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFJlZmxlY3QgPT0gJ29iamVjdCcgJiYgUmVmbGVjdC5hcHBseSB8fCAoTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoYXBwbHkpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShhcHBseSwgYXJndW1lbnRzKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBtb3ZlZCB0byBlbnRyeSBwb2ludHNcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMsIEZPUkNFRCwgU0hBTSkge1xuICB2YXIgU1lNQk9MID0gd2VsbEtub3duU3ltYm9sKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9PSA3O1xuICB9KTtcblxuICB2YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBERUxFR0FURVNfVE9fU1lNQk9MICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcblxuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFdlIGNhbid0IHVzZSByZWFsIHJlZ2V4IGhlcmUgc2luY2UgaXQgY2F1c2VzIGRlb3B0aW1pemF0aW9uXG4gICAgICAvLyBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpbiBWOFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMwNlxuICAgICAgcmUgPSB7fTtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICAgIHJlLmZsYWdzID0gJyc7XG4gICAgICByZVtTWU1CT0xdID0gLy4vW1NZTUJPTF07XG4gICAgfVxuXG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGV4ZWNDYWxsZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHJlW1NZTUJPTF0oJycpO1xuICAgIHJldHVybiAhZXhlY0NhbGxlZDtcbiAgfSk7XG5cbiAgaWYgKFxuICAgICFERUxFR0FURVNfVE9fU1lNQk9MIHx8XG4gICAgIURFTEVHQVRFU19UT19FWEVDIHx8XG4gICAgRk9SQ0VEXG4gICkge1xuICAgIHZhciBuYXRpdmVSZWdFeHBNZXRob2QgPSAvLi9bU1lNQk9MXTtcbiAgICB2YXIgbWV0aG9kcyA9IGV4ZWMoU1lNQk9MLCAnJ1tLRVldLCBmdW5jdGlvbiAobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgIHZhciAkZXhlYyA9IHJlZ2V4cC5leGVjO1xuICAgICAgaWYgKCRleGVjID09PSByZWdleHBFeGVjIHx8ICRleGVjID09PSBSZWdFeHBQcm90b3R5cGUuZXhlYykge1xuICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAvLyBwb2x5ZmlsbGVkIGZ1bmN0aW9uKSwgbGVhc2luZyB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogY2FsbChuYXRpdmVSZWdFeHBNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBjYWxsKG5hdGl2ZU1ldGhvZCwgc3RyLCByZWdleHAsIGFyZzIpIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbihTdHJpbmcucHJvdG90eXBlLCBLRVksIG1ldGhvZHNbMF0pO1xuICAgIGRlZmluZUJ1aWx0SW4oUmVnRXhwUHJvdG90eXBlLCBTWU1CT0wsIG1ldGhvZHNbMV0pO1xuICB9XG5cbiAgaWYgKFNIQU0pIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShSZWdFeHBQcm90b3R5cGVbU1lNQk9MXSwgJ3NoYW0nLCB0cnVlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKENPTlZFUlRfVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIHBvcykge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlck9ySW5maW5pdHkocG9zKTtcbiAgICB2YXIgc2l6ZSA9IFMubGVuZ3RoO1xuICAgIHZhciBmaXJzdCwgc2Vjb25kO1xuICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gc2l6ZSkgcmV0dXJuIENPTlZFUlRfVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgZmlyc3QgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbiArIDEpKSA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkZcbiAgICAgICAgPyBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gY2hhckF0KFMsIHBvc2l0aW9uKVxuICAgICAgICAgIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gc3RyaW5nU2xpY2UoUywgcG9zaXRpb24sIHBvc2l0aW9uICsgMilcbiAgICAgICAgICA6IChmaXJzdCAtIDB4RDgwMCA8PCAxMCkgKyAoc2Vjb25kIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2hhckF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jaGFyQXQ7XG5cbi8vIGBBZHZhbmNlU3RyaW5nSW5kZXhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gY2hhckF0KFMsIGluZGV4KS5sZW5ndGggOiAxKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFMgPSAvXFwkKFskJidgXXxcXGR7MSwyfXw8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCYnYF18XFxkezEsMn0pL2c7XG5cbi8vIGBHZXRTdWJzdGl0dXRpb25gIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gIHZhciBtID0gY2FwdHVyZXMubGVuZ3RoO1xuICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbmFtZWRDYXB0dXJlcyA9IHRvT2JqZWN0KG5hbWVkQ2FwdHVyZXMpO1xuICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgfVxuICByZXR1cm4gcmVwbGFjZShyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgIHZhciBjYXB0dXJlO1xuICAgIHN3aXRjaCAoY2hhckF0KGNoLCAwKSkge1xuICAgICAgY2FzZSAnJCc6IHJldHVybiAnJCc7XG4gICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICBjYXNlICdgJzogcmV0dXJuIHN0cmluZ1NsaWNlKHN0ciwgMCwgcG9zaXRpb24pO1xuICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0cmluZ1NsaWNlKHN0ciwgdGFpbFBvcyk7XG4gICAgICBjYXNlICc8JzpcbiAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbc3RyaW5nU2xpY2UoY2gsIDEsIC0xKV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgaWYgKG4gPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgIGlmIChmID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2hhckF0KGNoLCAxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoYXJBdChjaCwgMSk7XG4gICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICB9XG4gICAgICAgIGNhcHR1cmUgPSBjYXB0dXJlc1tuIC0gMV07XG4gICAgfVxuICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKGlzQ2FsbGFibGUoZXhlYykpIHtcbiAgICB2YXIgcmVzdWx0ID0gY2FsbChleGVjLCBSLCBTKTtcbiAgICBpZiAocmVzdWx0ICE9PSBudWxsKSBhbk9iamVjdChyZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGNsYXNzb2YoUikgPT09ICdSZWdFeHAnKSByZXR1cm4gY2FsbChyZWdleHBFeGVjLCBSLCBTKTtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgZ2V0U3Vic3RpdHV0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zdWJzdGl0dXRpb24nKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBSRVBMQUNFID0gd2VsbEtub3duU3ltYm9sKCdyZXBsYWNlJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG52YXIgc3RyaW5nSW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgbWF5YmVUb1N0cmluZyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG5cbi8vIElFIDw9IDExIHJlcGxhY2VzICQwIHdpdGggdGhlIHdob2xlIG1hdGNoLCBhcyBpZiBpdCB3YXMgJCZcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzYwMjQ2NjYvZ2V0dGluZy1pZS10by1yZXBsYWNlLWEtcmVnZXgtd2l0aC10aGUtbGl0ZXJhbC1zdHJpbmctMFxudmFyIFJFUExBQ0VfS0VFUFNfJDAgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3ByZWZlci1lc2NhcGUtcmVwbGFjZW1lbnQtZG9sbGFyLWNoYXIgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuICdhJy5yZXBsYWNlKC8uLywgJyQwJykgPT09ICckMCc7XG59KSgpO1xuXG4vLyBTYWZhcmkgPD0gMTMuMC4zKD8pIHN1YnN0aXR1dGVzIG50aCBjYXB0dXJlIHdoZXJlIG4+bSB3aXRoIGFuIGVtcHR5IHN0cmluZ1xudmFyIFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFID0gKGZ1bmN0aW9uICgpIHtcbiAgaWYgKC8uL1tSRVBMQUNFXSkge1xuICAgIHJldHVybiAvLi9bUkVQTEFDRV0oJ2EnLCAnJDAnKSA9PT0gJyc7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSkoKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLXVzZWxlc3MtZG9sbGFyLXJlcGxhY2VtZW50cyAtLSBmYWxzZSBwb3NpdGl2ZVxuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbi8vIEBAcmVwbGFjZSBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ3JlcGxhY2UnLCBmdW5jdGlvbiAoXywgbmF0aXZlUmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBVTlNBRkVfU1VCU1RJVFVURSA9IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFID8gJyQnIDogJyQwJztcblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgcmVwbGFjZXIgPSBpc051bGxPclVuZGVmaW5lZChzZWFyY2hWYWx1ZSkgPyB1bmRlZmluZWQgOiBnZXRNZXRob2Qoc2VhcmNoVmFsdWUsIFJFUExBQ0UpO1xuICAgICAgcmV0dXJuIHJlcGxhY2VyXG4gICAgICAgID8gY2FsbChyZXBsYWNlciwgc2VhcmNoVmFsdWUsIE8sIHJlcGxhY2VWYWx1ZSlcbiAgICAgICAgOiBjYWxsKG5hdGl2ZVJlcGxhY2UsIHRvU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHJlcGxhY2VcbiAgICBmdW5jdGlvbiAoc3RyaW5nLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgICAgdmFyIFMgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiByZXBsYWNlVmFsdWUgPT0gJ3N0cmluZycgJiZcbiAgICAgICAgc3RyaW5nSW5kZXhPZihyZXBsYWNlVmFsdWUsIFVOU0FGRV9TVUJTVElUVVRFKSA9PT0gLTEgJiZcbiAgICAgICAgc3RyaW5nSW5kZXhPZihyZXBsYWNlVmFsdWUsICckPCcpID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUobmF0aXZlUmVwbGFjZSwgcngsIFMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZ1bmN0aW9uYWxSZXBsYWNlID0gaXNDYWxsYWJsZShyZXBsYWNlVmFsdWUpO1xuICAgICAgaWYgKCFmdW5jdGlvbmFsUmVwbGFjZSkgcmVwbGFjZVZhbHVlID0gdG9TdHJpbmcocmVwbGFjZVZhbHVlKTtcblxuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIHZhciBmdWxsVW5pY29kZTtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcblxuICAgICAgICBwdXNoKHJlc3VsdHMsIHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcblxuICAgICAgICB2YXIgbWF0Y2hTdHIgPSB0b1N0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG5cbiAgICAgICAgdmFyIG1hdGNoZWQgPSB0b1N0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBtYXgobWluKHRvSW50ZWdlck9ySW5maW5pdHkocmVzdWx0LmluZGV4KSwgUy5sZW5ndGgpLCAwKTtcbiAgICAgICAgdmFyIGNhcHR1cmVzID0gW107XG4gICAgICAgIHZhciByZXBsYWNlbWVudDtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBwdXNoKGNhcHR1cmVzLCBtYXliZVRvU3RyaW5nKHJlc3VsdFtqXSkpO1xuICAgICAgICB2YXIgbmFtZWRDYXB0dXJlcyA9IHJlc3VsdC5ncm91cHM7XG4gICAgICAgIGlmIChmdW5jdGlvbmFsUmVwbGFjZSkge1xuICAgICAgICAgIHZhciByZXBsYWNlckFyZ3MgPSBjb25jYXQoW21hdGNoZWRdLCBjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHB1c2gocmVwbGFjZXJBcmdzLCBuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IHRvU3RyaW5nKGFwcGx5KHJlcGxhY2VWYWx1ZSwgdW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IHN0cmluZ1NsaWNlKFMsIG5leHRTb3VyY2VQb3NpdGlvbiwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbmV4dFNvdXJjZVBvc2l0aW9uID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBzdHJpbmdTbGljZShTLCBuZXh0U291cmNlUG9zaXRpb24pO1xuICAgIH1cbiAgXTtcbn0sICFSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyB8fCAhUkVQTEFDRV9LRUVQU18kMCB8fCBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgTUFUQ0ggPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG5cbi8vIGBJc1JlZ0V4cGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzcmVnZXhwXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjbGFzc29mKGl0KSA9PT0gJ1JlZ0V4cCcpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIHJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xuXG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUikge1xuICB2YXIgZmxhZ3MgPSBSLmZsYWdzO1xuICByZXR1cm4gZmxhZ3MgPT09IHVuZGVmaW5lZCAmJiAhKCdmbGFncycgaW4gUmVnRXhwUHJvdG90eXBlKSAmJiAhaGFzT3duKFIsICdmbGFncycpICYmIGlzUHJvdG90eXBlT2YoUmVnRXhwUHJvdG90eXBlLCBSKVxuICAgID8gY2FsbChyZWdFeHBGbGFncywgUikgOiBmbGFncztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXJlZ2V4cCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgZ2V0UmVnRXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWdldC1mbGFncycpO1xudmFyIGdldFN1YnN0aXR1dGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc3Vic3RpdHV0aW9uJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBSRVBMQUNFID0gd2VsbEtub3duU3ltYm9sKCdyZXBsYWNlJyk7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBpbmRleE9mID0gdW5jdXJyeVRoaXMoJycuaW5kZXhPZik7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlQWxsYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlYWxsXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUgfSwge1xuICByZXBsYWNlQWxsOiBmdW5jdGlvbiByZXBsYWNlQWxsKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpIHtcbiAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgdmFyIElTX1JFR19FWFAsIGZsYWdzLCByZXBsYWNlciwgc3RyaW5nLCBzZWFyY2hTdHJpbmcsIGZ1bmN0aW9uYWxSZXBsYWNlLCBzZWFyY2hMZW5ndGgsIGFkdmFuY2VCeSwgcmVwbGFjZW1lbnQ7XG4gICAgdmFyIHBvc2l0aW9uID0gMDtcbiAgICB2YXIgZW5kT2ZMYXN0TWF0Y2ggPSAwO1xuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHNlYXJjaFZhbHVlKSkge1xuICAgICAgSVNfUkVHX0VYUCA9IGlzUmVnRXhwKHNlYXJjaFZhbHVlKTtcbiAgICAgIGlmIChJU19SRUdfRVhQKSB7XG4gICAgICAgIGZsYWdzID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZShnZXRSZWdFeHBGbGFncyhzZWFyY2hWYWx1ZSkpKTtcbiAgICAgICAgaWYgKCF+aW5kZXhPZihmbGFncywgJ2cnKSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2AucmVwbGFjZUFsbGAgZG9lcyBub3QgYWxsb3cgbm9uLWdsb2JhbCByZWdleGVzJyk7XG4gICAgICB9XG4gICAgICByZXBsYWNlciA9IGdldE1ldGhvZChzZWFyY2hWYWx1ZSwgUkVQTEFDRSk7XG4gICAgICBpZiAocmVwbGFjZXIpIHtcbiAgICAgICAgcmV0dXJuIGNhbGwocmVwbGFjZXIsIHNlYXJjaFZhbHVlLCBPLCByZXBsYWNlVmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChJU19QVVJFICYmIElTX1JFR19FWFApIHtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2UodG9TdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdHJpbmcgPSB0b1N0cmluZyhPKTtcbiAgICBzZWFyY2hTdHJpbmcgPSB0b1N0cmluZyhzZWFyY2hWYWx1ZSk7XG4gICAgZnVuY3Rpb25hbFJlcGxhY2UgPSBpc0NhbGxhYmxlKHJlcGxhY2VWYWx1ZSk7XG4gICAgaWYgKCFmdW5jdGlvbmFsUmVwbGFjZSkgcmVwbGFjZVZhbHVlID0gdG9TdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICBzZWFyY2hMZW5ndGggPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICAgIGFkdmFuY2VCeSA9IG1heCgxLCBzZWFyY2hMZW5ndGgpO1xuICAgIHBvc2l0aW9uID0gaW5kZXhPZihzdHJpbmcsIHNlYXJjaFN0cmluZyk7XG4gICAgd2hpbGUgKHBvc2l0aW9uICE9PSAtMSkge1xuICAgICAgcmVwbGFjZW1lbnQgPSBmdW5jdGlvbmFsUmVwbGFjZVxuICAgICAgICA/IHRvU3RyaW5nKHJlcGxhY2VWYWx1ZShzZWFyY2hTdHJpbmcsIHBvc2l0aW9uLCBzdHJpbmcpKVxuICAgICAgICA6IGdldFN1YnN0aXR1dGlvbihzZWFyY2hTdHJpbmcsIHN0cmluZywgcG9zaXRpb24sIFtdLCB1bmRlZmluZWQsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICByZXN1bHQgKz0gc3RyaW5nU2xpY2Uoc3RyaW5nLCBlbmRPZkxhc3RNYXRjaCwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICBlbmRPZkxhc3RNYXRjaCA9IHBvc2l0aW9uICsgc2VhcmNoTGVuZ3RoO1xuICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiArIGFkdmFuY2VCeSA+IHN0cmluZy5sZW5ndGggPyAtMSA6IGluZGV4T2Yoc3RyaW5nLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uICsgYWR2YW5jZUJ5KTtcbiAgICB9XG4gICAgaWYgKGVuZE9mTGFzdE1hdGNoIDwgc3RyaW5nLmxlbmd0aCkge1xuICAgICAgcmVzdWx0ICs9IHN0cmluZ1NsaWNlKHN0cmluZywgZW5kT2ZMYXN0TWF0Y2gpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SLCBNRVRIT0QpIHtcbiAgcmV0dXJuIHVuY3VycnlUaGlzKGdsb2JhbFtDT05TVFJVQ1RPUl0ucHJvdG90eXBlW01FVEhPRF0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UtYWxsJyk7XG52YXIgZW50cnlVbmJpbmQgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvZW50cnktdW5iaW5kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlVbmJpbmQoJ1N0cmluZycsICdyZXBsYWNlQWxsJyk7XG4iLCJjb25zdCBOT0RFX0lOSVRJQUwgPSAwO1xuY29uc3QgTk9ERV9TVUNDRVNTID0gMTtcbmNvbnN0IE5PREVfRVJST1JFRCA9IDI7XG5jb25zdCBTVEFSVF9PRl9JTlBVVCA9IGBcXHUwMDAxYDtcbmNvbnN0IEVORF9PRl9JTlBVVCA9IGBcXHUwMDAwYDtcbmNvbnN0IEhFTFBfQ09NTUFORF9JTkRFWCA9IC0xO1xuY29uc3QgSEVMUF9SRUdFWCA9IC9eKC1ofC0taGVscCkoPzo9KFswLTldKykpPyQvO1xuY29uc3QgT1BUSU9OX1JFR0VYID0gL14oLS1bYS16XSsoPzotW2Etel0rKSp8LVthLXpBLVpdKykkLztcbmNvbnN0IEJBVENIX1JFR0VYID0gL14tW2EtekEtWl17Mix9JC87XG5jb25zdCBCSU5ESU5HX1JFR0VYID0gL14oW149XSspPShbXFxzXFxTXSopJC87XG5jb25zdCBERUJVRyA9IHByb2Nlc3MuZW52LkRFQlVHX0NMSSA9PT0gYDFgO1xuXG5leHBvcnQgeyBCQVRDSF9SRUdFWCwgQklORElOR19SRUdFWCwgREVCVUcsIEVORF9PRl9JTlBVVCwgSEVMUF9DT01NQU5EX0lOREVYLCBIRUxQX1JFR0VYLCBOT0RFX0VSUk9SRUQsIE5PREVfSU5JVElBTCwgTk9ERV9TVUNDRVNTLCBPUFRJT05fUkVHRVgsIFNUQVJUX09GX0lOUFVUIH07XG4iLCJpbXBvcnQgeyBFTkRfT0ZfSU5QVVQgfSBmcm9tICcuL2NvbnN0YW50cy5tanMnO1xuXG4vKipcbiAqIEEgZ2VuZXJpYyB1c2FnZSBlcnJvciB3aXRoIHRoZSBuYW1lIGBVc2FnZUVycm9yYC5cbiAqXG4gKiBJdCBzaG91bGQgYmUgdXNlZCBvdmVyIGBFcnJvcmAgb25seSB3aGVuIGl0J3MgdGhlIHVzZXIncyBmYXVsdC5cbiAqL1xuY2xhc3MgVXNhZ2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmNsaXBhbmlvbiA9IHsgdHlwZTogYHVzYWdlYCB9O1xuICAgICAgICB0aGlzLm5hbWUgPSBgVXNhZ2VFcnJvcmA7XG4gICAgfVxufVxuY2xhc3MgVW5rbm93blN5bnRheEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGlucHV0LCBjYW5kaWRhdGVzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5jYW5kaWRhdGVzID0gY2FuZGlkYXRlcztcbiAgICAgICAgdGhpcy5jbGlwYW5pb24gPSB7IHR5cGU6IGBub25lYCB9O1xuICAgICAgICB0aGlzLm5hbWUgPSBgVW5rbm93blN5bnRheEVycm9yYDtcbiAgICAgICAgaWYgKHRoaXMuY2FuZGlkYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IGBDb21tYW5kIG5vdCBmb3VuZCwgYnV0IHdlJ3JlIG5vdCBzdXJlIHdoYXQncyB0aGUgYWx0ZXJuYXRpdmUuYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNhbmRpZGF0ZXMuZXZlcnkoY2FuZGlkYXRlID0+IGNhbmRpZGF0ZS5yZWFzb24gIT09IG51bGwgJiYgY2FuZGlkYXRlLnJlYXNvbiA9PT0gY2FuZGlkYXRlc1swXS5yZWFzb24pKSB7XG4gICAgICAgICAgICBjb25zdCBbeyByZWFzb24gfV0gPSB0aGlzLmNhbmRpZGF0ZXM7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBgJHtyZWFzb259XFxuXFxuJHt0aGlzLmNhbmRpZGF0ZXMubWFwKCh7IHVzYWdlIH0pID0+IGAkICR7dXNhZ2V9YCkuam9pbihgXFxuYCl9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNhbmRpZGF0ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBbeyB1c2FnZSB9XSA9IHRoaXMuY2FuZGlkYXRlcztcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IGBDb21tYW5kIG5vdCBmb3VuZDsgZGlkIHlvdSBtZWFuOlxcblxcbiQgJHt1c2FnZX1cXG4ke3doaWxlUnVubmluZyhpbnB1dCl9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IGBDb21tYW5kIG5vdCBmb3VuZDsgZGlkIHlvdSBtZWFuIG9uZSBvZjpcXG5cXG4ke3RoaXMuY2FuZGlkYXRlcy5tYXAoKHsgdXNhZ2UgfSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7YCR7aW5kZXh9LmAucGFkU3RhcnQoNCl9ICR7dXNhZ2V9YDtcbiAgICAgICAgICAgIH0pLmpvaW4oYFxcbmApfVxcblxcbiR7d2hpbGVSdW5uaW5nKGlucHV0KX1gO1xuICAgICAgICB9XG4gICAgfVxufVxuY2xhc3MgQW1iaWd1b3VzU3ludGF4RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoaW5wdXQsIHVzYWdlcykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gdXNhZ2VzO1xuICAgICAgICB0aGlzLmNsaXBhbmlvbiA9IHsgdHlwZTogYG5vbmVgIH07XG4gICAgICAgIHRoaXMubmFtZSA9IGBBbWJpZ3VvdXNTeW50YXhFcnJvcmA7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IGBDYW5ub3QgZmluZCB3aGljaCB0byBwaWNrIGFtb25nc3QgdGhlIGZvbGxvd2luZyBhbHRlcm5hdGl2ZXM6XFxuXFxuJHt0aGlzLnVzYWdlcy5tYXAoKHVzYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAke2Ake2luZGV4fS5gLnBhZFN0YXJ0KDQpfSAke3VzYWdlfWA7XG4gICAgICAgIH0pLmpvaW4oYFxcbmApfVxcblxcbiR7d2hpbGVSdW5uaW5nKGlucHV0KX1gO1xuICAgIH1cbn1cbmNvbnN0IHdoaWxlUnVubmluZyA9IChpbnB1dCkgPT4gYFdoaWxlIHJ1bm5pbmcgJHtpbnB1dC5maWx0ZXIodG9rZW4gPT4ge1xuICAgIHJldHVybiB0b2tlbiAhPT0gRU5EX09GX0lOUFVUO1xufSkubWFwKHRva2VuID0+IHtcbiAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkodG9rZW4pO1xuICAgIGlmICh0b2tlbi5tYXRjaCgvXFxzLykgfHwgdG9rZW4ubGVuZ3RoID09PSAwIHx8IGpzb24gIT09IGBcIiR7dG9rZW59XCJgKSB7XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH1cbn0pLmpvaW4oYCBgKX1gO1xuXG5leHBvcnQgeyBBbWJpZ3VvdXNTeW50YXhFcnJvciwgVW5rbm93blN5bnRheEVycm9yLCBVc2FnZUVycm9yIH07XG4iLCJjb25zdCBNQVhfTElORV9MRU5HVEggPSA4MDtcbmNvbnN0IHJpY2hMaW5lID0gQXJyYXkoTUFYX0xJTkVfTEVOR1RIKS5maWxsKGDilIFgKTtcbmZvciAobGV0IHQgPSAwOyB0IDw9IDI0OyArK3QpXG4gICAgcmljaExpbmVbcmljaExpbmUubGVuZ3RoIC0gdF0gPSBgXFx4MWJbMzg7NTskezIzMiArIHR9beKUgWA7XG5jb25zdCByaWNoRm9ybWF0ID0ge1xuICAgIGhlYWRlcjogc3RyID0+IGBcXHgxYlsxbeKUgeKUgeKUgSAke3N0cn0ke3N0ci5sZW5ndGggPCBNQVhfTElORV9MRU5HVEggLSA1ID8gYCAke3JpY2hMaW5lLnNsaWNlKHN0ci5sZW5ndGggKyA1KS5qb2luKGBgKX1gIDogYDpgfVxceDFiWzBtYCxcbiAgICBib2xkOiBzdHIgPT4gYFxceDFiWzFtJHtzdHJ9XFx4MWJbMjJtYCxcbiAgICBlcnJvcjogc3RyID0+IGBcXHgxYlszMW1cXHgxYlsxbSR7c3RyfVxceDFiWzIybVxceDFiWzM5bWAsXG4gICAgY29kZTogc3RyID0+IGBcXHgxYlszNm0ke3N0cn1cXHgxYlszOW1gLFxufTtcbmNvbnN0IHRleHRGb3JtYXQgPSB7XG4gICAgaGVhZGVyOiBzdHIgPT4gc3RyLFxuICAgIGJvbGQ6IHN0ciA9PiBzdHIsXG4gICAgZXJyb3I6IHN0ciA9PiBzdHIsXG4gICAgY29kZTogc3RyID0+IHN0cixcbn07XG5mdW5jdGlvbiBkZWRlbnQodGV4dCkge1xuICAgIGNvbnN0IGxpbmVzID0gdGV4dC5zcGxpdChgXFxuYCk7XG4gICAgY29uc3Qgbm9uRW1wdHlMaW5lcyA9IGxpbmVzLmZpbHRlcihsaW5lID0+IGxpbmUubWF0Y2goL1xcUy8pKTtcbiAgICBjb25zdCBpbmRlbnQgPSBub25FbXB0eUxpbmVzLmxlbmd0aCA+IDAgPyBub25FbXB0eUxpbmVzLnJlZHVjZSgobWluTGVuZ3RoLCBsaW5lKSA9PiBNYXRoLm1pbihtaW5MZW5ndGgsIGxpbmUubGVuZ3RoIC0gbGluZS50cmltU3RhcnQoKS5sZW5ndGgpLCBOdW1iZXIuTUFYX1ZBTFVFKSA6IDA7XG4gICAgcmV0dXJuIGxpbmVzXG4gICAgICAgIC5tYXAobGluZSA9PiBsaW5lLnNsaWNlKGluZGVudCkudHJpbVJpZ2h0KCkpXG4gICAgICAgIC5qb2luKGBcXG5gKTtcbn1cbi8qKlxuICogRm9ybWF0cyBtYXJrZG93biB0ZXh0IHRvIGJlIGRpc3BsYXllZCB0byB0aGUgY29uc29sZS4gTm90IGFsbCBtYXJrZG93biBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkLlxuICpcbiAqIEBwYXJhbSB0ZXh0IFRoZSBtYXJrZG93biB0ZXh0IHRvIGZvcm1hdC5cbiAqIEBwYXJhbSBvcHRzLmZvcm1hdCBUaGUgZm9ybWF0IHRvIHVzZS5cbiAqIEBwYXJhbSBvcHRzLnBhcmFncmFwaHMgV2hldGhlciB0byBjdXQgdGhlIHRleHQgaW50byBwYXJhZ3JhcGhzIG9mIDgwIGNoYXJhY3RlcnMgYXQgbW9zdC5cbiAqL1xuZnVuY3Rpb24gZm9ybWF0TWFya2Rvd25pc2godGV4dCwgeyBmb3JtYXQsIHBhcmFncmFwaHMgfSkge1xuICAgIC8vIEVuZm9yY2UgXFxuIGFzIG5ld2xpbmUgY2hhcmFjdGVyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxyXFxuPy9nLCBgXFxuYCk7XG4gICAgLy8gUmVtb3ZlIHRoZSBpbmRlbnRhdGlvbiwgc2luY2UgaXQgZ290IG1lc3NlZCB1cCB3aXRoIHRoZSBKUyBpbmRlbnRhdGlvblxuICAgIHRleHQgPSBkZWRlbnQodGV4dCk7XG4gICAgLy8gUmVtb3ZlIHN1cnJvdW5kaW5nIG5ld2xpbmVzLCBzaW5jZSB0aGV5IGdvdCBhZGRlZCBmb3IgSlMgZm9ybWF0dGluZ1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL15cXG4rfFxcbiskL2csIGBgKTtcbiAgICAvLyBMaXN0IGl0ZW1zIGFsd2F5cyBlbmQgd2l0aCBhdCBsZWFzdCB0d28gbmV3bGluZXMgKGluIG9yZGVyIHRvIG5vdCBiZSBjb2xsYXBzZWQpXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXihcXHMqKS0oW15cXG5dKj8pXFxuKy9nbSwgYCQxLSQyXFxuXFxuYCk7XG4gICAgLy8gU2luZ2xlIG5ld2xpbmVzIGFyZSByZW1vdmVkOyBsYXJnZXIgdGhhbiB0aGF0IGFyZSBjb2xsYXBzZWQgaW50byBvbmVcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXG4oXFxuKT9cXG4qL2csICgkMCwgJDEpID0+ICQxID8gJDEgOiBgIGApO1xuICAgIGlmIChwYXJhZ3JhcGhzKSB7XG4gICAgICAgIHRleHQgPSB0ZXh0LnNwbGl0KC9cXG4vKS5tYXAocGFyYWdyYXBoID0+IHtcbiAgICAgICAgICAgIC8vIERvZXMgdGhlIHBhcmFncmFwaCBzdGFydHMgd2l0aCBhIGxpc3Q/XG4gICAgICAgICAgICBjb25zdCBidWxsZXRNYXRjaCA9IHBhcmFncmFwaC5tYXRjaCgvXlxccypbKi1dW1xcdCBdKyguKikvKTtcbiAgICAgICAgICAgIGlmICghYnVsbGV0TWF0Y2gpXG4gICAgICAgICAgICAgICAgLy8gTm8sIGN1dCB0aGUgcGFyYWdyYXBocyBpbnRvIHNlZ21lbnRzIG9mIDgwIGNoYXJhY3RlcnNcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyYWdyYXBoLm1hdGNoKC8oLnsxLDgwfSkoPzogfCQpL2cpLmpvaW4oYFxcbmApO1xuICAgICAgICAgICAgY29uc3QgaW5kZW50ID0gcGFyYWdyYXBoLmxlbmd0aCAtIHBhcmFncmFwaC50cmltU3RhcnQoKS5sZW5ndGg7XG4gICAgICAgICAgICAvLyBZZXMsIGN1dCB0aGUgcGFyYWdyYXBocyBpbnRvIHNlZ21lbnRzIG9mICg3OCAtIGluZGVudCkgY2hhcmFjdGVycyAodG8gYWNjb3VudCBmb3IgdGhlIHByZWZpeClcbiAgICAgICAgICAgIHJldHVybiBidWxsZXRNYXRjaFsxXS5tYXRjaChuZXcgUmVnRXhwKGAoLnsxLCR7NzggLSBpbmRlbnR9fSkoPzogfCQpYCwgYGdgKSkubWFwKChsaW5lLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBgIGAucmVwZWF0KGluZGVudCkgKyAoaW5kZXggPT09IDAgPyBgLSBgIDogYCAgYCkgKyBsaW5lO1xuICAgICAgICAgICAgfSkuam9pbihgXFxuYCk7XG4gICAgICAgIH0pLmpvaW4oYFxcblxcbmApO1xuICAgIH1cbiAgICAvLyBIaWdobGlnaHQgdGhlIGNvZGUgc2VnbWVudHNcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8oYCspKCg/Oi58W1xcbl0pKj8pXFwxL2csICgkMCwgJDEsICQyKSA9PiB7XG4gICAgICAgIHJldHVybiBmb3JtYXQuY29kZSgkMSArICQyICsgJDEpO1xuICAgIH0pO1xuICAgIC8vIEhpZ2hsaWdodCB0aGUgYm9sZCBzZWdtZW50c1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoLyhcXCpcXCopKCg/Oi58W1xcbl0pKj8pXFwxL2csICgkMCwgJDEsICQyKSA9PiB7XG4gICAgICAgIHJldHVybiBmb3JtYXQuYm9sZCgkMSArICQyICsgJDEpO1xuICAgIH0pO1xuICAgIHJldHVybiB0ZXh0ID8gYCR7dGV4dH1cXG5gIDogYGA7XG59XG5cbmV4cG9ydCB7IGZvcm1hdE1hcmtkb3duaXNoLCByaWNoRm9ybWF0LCB0ZXh0Rm9ybWF0IH07XG4iLCJpbXBvcnQgeyBVc2FnZUVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3JzLm1qcyc7XG5cbmNvbnN0IGlzT3B0aW9uU3ltYm9sID0gU3ltYm9sKGBjbGlwYW5pb24vaXNPcHRpb25gKTtcbmZ1bmN0aW9uIG1ha2VDb21tYW5kT3B0aW9uKHNwZWMpIHtcbiAgICAvLyBXZSBsaWUhIEJ1dCBpdCdzIGZvciB0aGUgZ29vZCBjYXVzZTogdGhlIGNsaSBlbmdpbmUgd2lsbCB0dXJuIHRoZSBzcGVjcyBpbnRvIHByb3BlciB2YWx1ZXMgYWZ0ZXIgaW5zdGFudGlhdGlvbi5cbiAgICByZXR1cm4geyAuLi5zcGVjLCBbaXNPcHRpb25TeW1ib2xdOiB0cnVlIH07XG59XG5mdW5jdGlvbiByZXJvdXRlQXJndW1lbnRzKGEsIGIpIHtcbiAgICBpZiAodHlwZW9mIGEgPT09IGB1bmRlZmluZWRgKVxuICAgICAgICByZXR1cm4gW2EsIGJdO1xuICAgIGlmICh0eXBlb2YgYSA9PT0gYG9iamVjdGAgJiYgYSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZCwgYV07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gW2EsIGJdO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNsZWFuVmFsaWRhdGlvbkVycm9yKG1lc3NhZ2UsIHsgbWVyZ2VOYW1lID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgY29uc3QgbWF0Y2ggPSBtZXNzYWdlLm1hdGNoKC9eKFteOl0rKTogKC4qKSQvbSk7XG4gICAgaWYgKCFtYXRjaClcbiAgICAgICAgcmV0dXJuIGB2YWxpZGF0aW9uIGZhaWxlZGA7XG4gICAgbGV0IFssIHBhdGgsIGxpbmVdID0gbWF0Y2g7XG4gICAgaWYgKG1lcmdlTmFtZSlcbiAgICAgICAgbGluZSA9IGxpbmVbMF0udG9Mb3dlckNhc2UoKSArIGxpbmUuc2xpY2UoMSk7XG4gICAgbGluZSA9IHBhdGggIT09IGAuYCB8fCAhbWVyZ2VOYW1lXG4gICAgICAgID8gYCR7cGF0aC5yZXBsYWNlKC9eXFwuKFxcW3wkKS8sIGAkMWApfTogJHtsaW5lfWBcbiAgICAgICAgOiBgOiAke2xpbmV9YDtcbiAgICByZXR1cm4gbGluZTtcbn1cbmZ1bmN0aW9uIGZvcm1hdEVycm9yKG1lc3NhZ2UsIGVycm9ycykge1xuICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBuZXcgVXNhZ2VFcnJvcihgJHttZXNzYWdlfSR7Y2xlYW5WYWxpZGF0aW9uRXJyb3IoZXJyb3JzWzBdLCB7IG1lcmdlTmFtZTogdHJ1ZSB9KX1gKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgVXNhZ2VFcnJvcihgJHttZXNzYWdlfTpcXG4ke2Vycm9ycy5tYXAoZXJyb3IgPT4gYFxcbi0gJHtjbGVhblZhbGlkYXRpb25FcnJvcihlcnJvcil9YCkuam9pbihgYCl9YCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYXBwbHlWYWxpZGF0b3IobmFtZSwgdmFsdWUsIHZhbGlkYXRvcikge1xuICAgIGlmICh0eXBlb2YgdmFsaWRhdG9yID09PSBgdW5kZWZpbmVkYClcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgIGNvbnN0IGNvZXJjaW9ucyA9IFtdO1xuICAgIGNvbnN0IGNvZXJjaW9uID0gKHYpID0+IHtcbiAgICAgICAgY29uc3Qgb3JpZyA9IHZhbHVlO1xuICAgICAgICB2YWx1ZSA9IHY7XG4gICAgICAgIHJldHVybiBjb2VyY2lvbi5iaW5kKG51bGwsIG9yaWcpO1xuICAgIH07XG4gICAgY29uc3QgY2hlY2sgPSB2YWxpZGF0b3IodmFsdWUsIHsgZXJyb3JzLCBjb2VyY2lvbnMsIGNvZXJjaW9uIH0pO1xuICAgIGlmICghY2hlY2spXG4gICAgICAgIHRocm93IGZvcm1hdEVycm9yKGBJbnZhbGlkIHZhbHVlIGZvciAke25hbWV9YCwgZXJyb3JzKTtcbiAgICBmb3IgKGNvbnN0IFssIG9wXSBvZiBjb2VyY2lvbnMpXG4gICAgICAgIG9wKCk7XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgeyBhcHBseVZhbGlkYXRvciwgY2xlYW5WYWxpZGF0aW9uRXJyb3IsIGZvcm1hdEVycm9yLCBpc09wdGlvblN5bWJvbCwgbWFrZUNvbW1hbmRPcHRpb24sIHJlcm91dGVBcmd1bWVudHMgfTtcbiIsImltcG9ydCB7IGZvcm1hdEVycm9yLCBpc09wdGlvblN5bWJvbCB9IGZyb20gJy4vb3B0aW9ucy91dGlscy5tanMnO1xuXG4vKipcbiAqIEJhc2UgYWJzdHJhY3QgY2xhc3MgZm9yIENMSSBjb21tYW5kcy4gVGhlIG1haW4gdGhpbmcgdG8gcmVtZW1iZXIgaXMgdG9cbiAqIGRlY2xhcmUgYW4gYXN5bmMgYGV4ZWN1dGVgIG1lbWJlciBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlXG4gKiBjb21tYW5kIGlzIGludm9rZWQgZnJvbSB0aGUgQ0xJLCBhbmQgb3B0aW9uYWxseSBhIGBwYXRoc2AgcHJvcGVydHkgdG9cbiAqIGRlY2xhcmUgdGhlIHNldCBvZiBwYXRocyB1bmRlciB3aGljaCB0aGUgY29tbWFuZCBzaG91bGQgYmUgZXhwb3NlZC5cbiAqL1xuY2xhc3MgQ29tbWFuZCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQcmVkZWZpbmVkIHRoYXQgd2lsbCBiZSBzZXQgdG8gdHJ1ZSBpZiBgLWgsLS1oZWxwYCBoYXMgYmVlbiB1c2VkLCBpblxuICAgICAgICAgKiB3aGljaCBjYXNlIGBDb21tYW5kI2V4ZWN1dGVgIHdvbid0IGJlIGNhbGxlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaGVscCA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSB1c2FnZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGdpdmVuIGNvbW1hbmQuXG4gICAgICovXG4gICAgc3RhdGljIFVzYWdlKHVzYWdlKSB7XG4gICAgICAgIHJldHVybiB1c2FnZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQgZXJyb3IgaGFuZGxlciB3aGljaCB3aWxsIHNpbXBseSByZXRocm93IHRoZSBlcnJvci4gQ2FuIGJlIHVzZWRcbiAgICAgKiB0byBhZGQgY3VzdG9tIGxvZ2ljIHRvIGhhbmRsZSBlcnJvcnMgZnJvbSB0aGUgY29tbWFuZCBvciBzaW1wbHkgcmV0dXJuXG4gICAgICogdGhlIHBhcmVudCBjbGFzcyBlcnJvciBoYW5kbGluZy5cbiAgICAgKi9cbiAgICBhc3luYyBjYXRjaChlcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgYXN5bmMgdmFsaWRhdGVBbmRFeGVjdXRlKCkge1xuICAgICAgICBjb25zdCBjb21tYW5kQ2xhc3MgPSB0aGlzLmNvbnN0cnVjdG9yO1xuICAgICAgICBjb25zdCBjYXNjYWRlID0gY29tbWFuZENsYXNzLnNjaGVtYTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2FzY2FkZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgaXNEaWN0LCBpc1Vua25vd24sIGFwcGx5Q2FzY2FkZSB9ID0gYXdhaXQgaW1wb3J0KCd0eXBhbmlvbicpO1xuICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gYXBwbHlDYXNjYWRlKGlzRGljdChpc1Vua25vd24oKSksIGNhc2NhZGUpO1xuICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgICAgICAgICBjb25zdCBjb2VyY2lvbnMgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrID0gc2NoZW1hKHRoaXMsIHsgZXJyb3JzLCBjb2VyY2lvbnMgfSk7XG4gICAgICAgICAgICBpZiAoIWNoZWNrKVxuICAgICAgICAgICAgICAgIHRocm93IGZvcm1hdEVycm9yKGBJbnZhbGlkIG9wdGlvbiBzY2hlbWFgLCBlcnJvcnMpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbLCBvcF0gb2YgY29lcmNpb25zKSB7XG4gICAgICAgICAgICAgICAgb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjYXNjYWRlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjb21tYW5kIHNjaGVtYWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV4aXRDb2RlID0gYXdhaXQgdGhpcy5leGVjdXRlKCk7XG4gICAgICAgIGlmICh0eXBlb2YgZXhpdENvZGUgIT09IGB1bmRlZmluZWRgKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhpdENvZGU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogVXNlZCB0byBkZXRlY3Qgb3B0aW9uIGRlZmluaXRpb25zLlxuICovXG5Db21tYW5kLmlzT3B0aW9uID0gaXNPcHRpb25TeW1ib2w7XG4vKipcbiAqIEp1c3QgYW4gaGVscGVyIHRvIHVzZSBhbG9uZyB3aXRoIHRoZSBgcGF0aHNgIGZpZWxkcywgdG8gbWFrZSBpdFxuICogY2xlYXJlciB0aGF0IGEgY29tbWFuZCBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNsYXNzIE15Q29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICogICBzdGF0aWMgcGF0aHMgPSBbQ29tbWFuZC5EZWZhdWx0XTtcbiAqIH1cbiAqL1xuQ29tbWFuZC5EZWZhdWx0ID0gW107XG5cbmV4cG9ydCB7IENvbW1hbmQgfTtcbiIsImltcG9ydCB7IERFQlVHLCBOT0RFX1NVQ0NFU1MsIE5PREVfRVJST1JFRCwgRU5EX09GX0lOUFVULCBOT0RFX0lOSVRJQUwsIEhFTFBfQ09NTUFORF9JTkRFWCwgQkFUQ0hfUkVHRVgsIEJJTkRJTkdfUkVHRVgsIE9QVElPTl9SRUdFWCwgSEVMUF9SRUdFWCwgU1RBUlRfT0ZfSU5QVVQgfSBmcm9tICcuL2NvbnN0YW50cy5tanMnO1xuaW1wb3J0IHsgVW5rbm93blN5bnRheEVycm9yLCBBbWJpZ3VvdXNTeW50YXhFcnJvciB9IGZyb20gJy4vZXJyb3JzLm1qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gZGVidWcoc3RyKSB7XG4gICAgaWYgKERFQlVHKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKHN0cik7XG4gICAgfVxufVxuY29uc3QgYmFzaWNIZWxwU3RhdGUgPSB7XG4gICAgY2FuZGlkYXRlVXNhZ2U6IG51bGwsXG4gICAgcmVxdWlyZWRPcHRpb25zOiBbXSxcbiAgICBlcnJvck1lc3NhZ2U6IG51bGwsXG4gICAgaWdub3JlT3B0aW9uczogZmFsc2UsXG4gICAgcGF0aDogW10sXG4gICAgcG9zaXRpb25hbHM6IFtdLFxuICAgIG9wdGlvbnM6IFtdLFxuICAgIHJlbWFpbmRlcjogbnVsbCxcbiAgICBzZWxlY3RlZEluZGV4OiBIRUxQX0NPTU1BTkRfSU5ERVgsXG59O1xuZnVuY3Rpb24gbWFrZVN0YXRlTWFjaGluZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBub2RlczogW21ha2VOb2RlKCksIG1ha2VOb2RlKCksIG1ha2VOb2RlKCldLFxuICAgIH07XG59XG5mdW5jdGlvbiBtYWtlQW55T2ZNYWNoaW5lKGlucHV0cykge1xuICAgIGNvbnN0IG91dHB1dCA9IG1ha2VTdGF0ZU1hY2hpbmUoKTtcbiAgICBjb25zdCBoZWFkcyA9IFtdO1xuICAgIGxldCBvZmZzZXQgPSBvdXRwdXQubm9kZXMubGVuZ3RoO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgaW5wdXRzKSB7XG4gICAgICAgIGhlYWRzLnB1c2gob2Zmc2V0KTtcbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCBpbnB1dC5ub2Rlcy5sZW5ndGg7ICsrdClcbiAgICAgICAgICAgIGlmICghaXNUZXJtaW5hbE5vZGUodCkpXG4gICAgICAgICAgICAgICAgb3V0cHV0Lm5vZGVzLnB1c2goY2xvbmVOb2RlKGlucHV0Lm5vZGVzW3RdLCBvZmZzZXQpKTtcbiAgICAgICAgb2Zmc2V0ICs9IGlucHV0Lm5vZGVzLmxlbmd0aCAtIDI7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaGVhZCBvZiBoZWFkcylcbiAgICAgICAgcmVnaXN0ZXJTaG9ydGN1dChvdXRwdXQsIE5PREVfSU5JVElBTCwgaGVhZCk7XG4gICAgcmV0dXJuIG91dHB1dDtcbn1cbmZ1bmN0aW9uIGluamVjdE5vZGUobWFjaGluZSwgbm9kZSkge1xuICAgIG1hY2hpbmUubm9kZXMucHVzaChub2RlKTtcbiAgICByZXR1cm4gbWFjaGluZS5ub2Rlcy5sZW5ndGggLSAxO1xufVxuZnVuY3Rpb24gc2ltcGxpZnlNYWNoaW5lKGlucHV0KSB7XG4gICAgY29uc3QgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgICBjb25zdCBwcm9jZXNzID0gKG5vZGUpID0+IHtcbiAgICAgICAgaWYgKHZpc2l0ZWQuaGFzKG5vZGUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2aXNpdGVkLmFkZChub2RlKTtcbiAgICAgICAgY29uc3Qgbm9kZURlZiA9IGlucHV0Lm5vZGVzW25vZGVdO1xuICAgICAgICBmb3IgKGNvbnN0IHRyYW5zaXRpb25zIG9mIE9iamVjdC52YWx1ZXMobm9kZURlZi5zdGF0aWNzKSlcbiAgICAgICAgICAgIGZvciAoY29uc3QgeyB0byB9IG9mIHRyYW5zaXRpb25zKVxuICAgICAgICAgICAgICAgIHByb2Nlc3ModG8pO1xuICAgICAgICBmb3IgKGNvbnN0IFssIHsgdG8gfV0gb2Ygbm9kZURlZi5keW5hbWljcylcbiAgICAgICAgICAgIHByb2Nlc3ModG8pO1xuICAgICAgICBmb3IgKGNvbnN0IHsgdG8gfSBvZiBub2RlRGVmLnNob3J0Y3V0cylcbiAgICAgICAgICAgIHByb2Nlc3ModG8pO1xuICAgICAgICBjb25zdCBzaG9ydGN1dHMgPSBuZXcgU2V0KG5vZGVEZWYuc2hvcnRjdXRzLm1hcCgoeyB0byB9KSA9PiB0bykpO1xuICAgICAgICB3aGlsZSAobm9kZURlZi5zaG9ydGN1dHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgeyB0byB9ID0gbm9kZURlZi5zaG9ydGN1dHMuc2hpZnQoKTtcbiAgICAgICAgICAgIGNvbnN0IHRvRGVmID0gaW5wdXQubm9kZXNbdG9dO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbc2VnbWVudCwgdHJhbnNpdGlvbnNdIG9mIE9iamVjdC5lbnRyaWVzKHRvRGVmLnN0YXRpY3MpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RvcmUgPSAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGVEZWYuc3RhdGljcywgc2VnbWVudClcbiAgICAgICAgICAgICAgICAgICAgPyBub2RlRGVmLnN0YXRpY3Nbc2VnbWVudF0gPSBbXVxuICAgICAgICAgICAgICAgICAgICA6IG5vZGVEZWYuc3RhdGljc1tzZWdtZW50XTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHRyYW5zaXRpb24gb2YgdHJhbnNpdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdG9yZS5zb21lKCh7IHRvIH0pID0+IHRyYW5zaXRpb24udG8gPT09IHRvKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUucHVzaCh0cmFuc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgW3Rlc3QsIHRyYW5zaXRpb25dIG9mIHRvRGVmLmR5bmFtaWNzKVxuICAgICAgICAgICAgICAgIGlmICghbm9kZURlZi5keW5hbWljcy5zb21lKChbb3RoZXJUZXN0LCB7IHRvIH1dKSA9PiB0ZXN0ID09PSBvdGhlclRlc3QgJiYgdHJhbnNpdGlvbi50byA9PT0gdG8pKVxuICAgICAgICAgICAgICAgICAgICBub2RlRGVmLmR5bmFtaWNzLnB1c2goW3Rlc3QsIHRyYW5zaXRpb25dKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdHJhbnNpdGlvbiBvZiB0b0RlZi5zaG9ydGN1dHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNob3J0Y3V0cy5oYXModHJhbnNpdGlvbi50bykpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZURlZi5zaG9ydGN1dHMucHVzaCh0cmFuc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgc2hvcnRjdXRzLmFkZCh0cmFuc2l0aW9uLnRvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHByb2Nlc3MoTk9ERV9JTklUSUFMKTtcbn1cbmZ1bmN0aW9uIGRlYnVnTWFjaGluZShtYWNoaW5lLCB7IHByZWZpeCA9IGBgIH0gPSB7fSkge1xuICAgIC8vIERvbid0IGl0ZXJhdGUgdW5sZXNzIGl0J3MgbmVlZGVkXG4gICAgaWYgKERFQlVHKSB7XG4gICAgICAgIGRlYnVnKGAke3ByZWZpeH1Ob2RlcyBhcmU6YCk7XG4gICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgbWFjaGluZS5ub2Rlcy5sZW5ndGg7ICsrdCkge1xuICAgICAgICAgICAgZGVidWcoYCR7cHJlZml4fSAgJHt0fTogJHtKU09OLnN0cmluZ2lmeShtYWNoaW5lLm5vZGVzW3RdKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHJ1bk1hY2hpbmVJbnRlcm5hbChtYWNoaW5lLCBpbnB1dCwgcGFydGlhbCA9IGZhbHNlKSB7XG4gICAgZGVidWcoYFJ1bm5pbmcgYSB2bSBvbiAke0pTT04uc3RyaW5naWZ5KGlucHV0KX1gKTtcbiAgICBsZXQgYnJhbmNoZXMgPSBbeyBub2RlOiBOT0RFX0lOSVRJQUwsIHN0YXRlOiB7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlVXNhZ2U6IG51bGwsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWRPcHRpb25zOiBbXSxcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgICAgaWdub3JlT3B0aW9uczogZmFsc2UsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgICAgICAgcGF0aDogW10sXG4gICAgICAgICAgICAgICAgcG9zaXRpb25hbHM6IFtdLFxuICAgICAgICAgICAgICAgIHJlbWFpbmRlcjogbnVsbCxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEluZGV4OiBudWxsLFxuICAgICAgICAgICAgfSB9XTtcbiAgICBkZWJ1Z01hY2hpbmUobWFjaGluZSwgeyBwcmVmaXg6IGAgIGAgfSk7XG4gICAgY29uc3QgdG9rZW5zID0gW1NUQVJUX09GX0lOUFVULCAuLi5pbnB1dF07XG4gICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0b2tlbnMubGVuZ3RoOyArK3QpIHtcbiAgICAgICAgY29uc3Qgc2VnbWVudCA9IHRva2Vuc1t0XTtcbiAgICAgICAgZGVidWcoYCAgUHJvY2Vzc2luZyAke0pTT04uc3RyaW5naWZ5KHNlZ21lbnQpfWApO1xuICAgICAgICBjb25zdCBuZXh0QnJhbmNoZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB7IG5vZGUsIHN0YXRlIH0gb2YgYnJhbmNoZXMpIHtcbiAgICAgICAgICAgIGRlYnVnKGAgICAgQ3VycmVudCBub2RlIGlzICR7bm9kZX1gKTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVEZWYgPSBtYWNoaW5lLm5vZGVzW25vZGVdO1xuICAgICAgICAgICAgaWYgKG5vZGUgPT09IE5PREVfRVJST1JFRCkge1xuICAgICAgICAgICAgICAgIG5leHRCcmFuY2hlcy5wdXNoKHsgbm9kZSwgc3RhdGUgfSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmFzc2VydChub2RlRGVmLnNob3J0Y3V0cy5sZW5ndGggPT09IDAsIGBTaG9ydGN1dHMgc2hvdWxkIGhhdmUgYmVlbiBlbGltaW5hdGVkIGJ5IG5vd2ApO1xuICAgICAgICAgICAgY29uc3QgaGFzRXhhY3RNYXRjaCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlRGVmLnN0YXRpY3MsIHNlZ21lbnQpO1xuICAgICAgICAgICAgaWYgKCFwYXJ0aWFsIHx8IHQgPCB0b2tlbnMubGVuZ3RoIC0gMSB8fCBoYXNFeGFjdE1hdGNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0V4YWN0TWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNpdGlvbnMgPSBub2RlRGVmLnN0YXRpY3Nbc2VnbWVudF07XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgeyB0bywgcmVkdWNlciB9IG9mIHRyYW5zaXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0QnJhbmNoZXMucHVzaCh7IG5vZGU6IHRvLCBzdGF0ZTogdHlwZW9mIHJlZHVjZXIgIT09IGB1bmRlZmluZWRgID8gZXhlY3V0ZShyZWR1Y2VycywgcmVkdWNlciwgc3RhdGUsIHNlZ21lbnQpIDogc3RhdGUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhgICAgICAgU3RhdGljIHRyYW5zaXRpb24gdG8gJHt0b30gZm91bmRgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoYCAgICAgIE5vIHN0YXRpYyB0cmFuc2l0aW9uIGZvdW5kYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGhhc01hdGNoZXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBPYmplY3Qua2V5cyhub2RlRGVmLnN0YXRpY3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlLnN0YXJ0c1dpdGgoc2VnbWVudCkpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQgPT09IGNhbmRpZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB7IHRvLCByZWR1Y2VyIH0gb2Ygbm9kZURlZi5zdGF0aWNzW2NhbmRpZGF0ZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0QnJhbmNoZXMucHVzaCh7IG5vZGU6IHRvLCBzdGF0ZTogdHlwZW9mIHJlZHVjZXIgIT09IGB1bmRlZmluZWRgID8gZXhlY3V0ZShyZWR1Y2VycywgcmVkdWNlciwgc3RhdGUsIHNlZ21lbnQpIDogc3RhdGUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoYCAgICAgIFN0YXRpYyB0cmFuc2l0aW9uIHRvICR7dG99IGZvdW5kYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHsgdG8gfSBvZiBub2RlRGVmLnN0YXRpY3NbY2FuZGlkYXRlXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRCcmFuY2hlcy5wdXNoKHsgbm9kZTogdG8sIHN0YXRlOiB7IC4uLnN0YXRlLCByZW1haW5kZXI6IGNhbmRpZGF0ZS5zbGljZShzZWdtZW50Lmxlbmd0aCkgfSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhgICAgICAgU3RhdGljIHRyYW5zaXRpb24gdG8gJHt0b30gZm91bmQgKHBhcnRpYWwgbWF0Y2gpYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaGFzTWF0Y2hlcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghaGFzTWF0Y2hlcykge1xuICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhgICAgICAgTm8gcGFydGlhbCBzdGF0aWMgdHJhbnNpdGlvbiBmb3VuZGApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWdtZW50ICE9PSBFTkRfT0ZfSU5QVVQpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFt0ZXN0LCB7IHRvLCByZWR1Y2VyIH1dIG9mIG5vZGVEZWYuZHluYW1pY3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4ZWN1dGUodGVzdHMsIHRlc3QsIHN0YXRlLCBzZWdtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEJyYW5jaGVzLnB1c2goeyBub2RlOiB0bywgc3RhdGU6IHR5cGVvZiByZWR1Y2VyICE9PSBgdW5kZWZpbmVkYCA/IGV4ZWN1dGUocmVkdWNlcnMsIHJlZHVjZXIsIHN0YXRlLCBzZWdtZW50KSA6IHN0YXRlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoYCAgICAgIER5bmFtaWMgdHJhbnNpdGlvbiB0byAke3RvfSBmb3VuZCAodmlhICR7dGVzdH0pYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5leHRCcmFuY2hlcy5sZW5ndGggPT09IDAgJiYgc2VnbWVudCA9PT0gRU5EX09GX0lOUFVUICYmIGlucHV0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IE5PREVfSU5JVElBTCxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6IGJhc2ljSGVscFN0YXRlLFxuICAgICAgICAgICAgICAgIH1dO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXh0QnJhbmNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVW5rbm93blN5bnRheEVycm9yKGlucHV0LCBicmFuY2hlcy5maWx0ZXIoKHsgbm9kZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUgIT09IE5PREVfRVJST1JFRDtcbiAgICAgICAgICAgIH0pLm1hcCgoeyBzdGF0ZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdXNhZ2U6IHN0YXRlLmNhbmRpZGF0ZVVzYWdlLCByZWFzb246IG51bGwgfTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV4dEJyYW5jaGVzLmV2ZXJ5KCh7IG5vZGUgfSkgPT4gbm9kZSA9PT0gTk9ERV9FUlJPUkVEKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFVua25vd25TeW50YXhFcnJvcihpbnB1dCwgbmV4dEJyYW5jaGVzLm1hcCgoeyBzdGF0ZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdXNhZ2U6IHN0YXRlLmNhbmRpZGF0ZVVzYWdlLCByZWFzb246IHN0YXRlLmVycm9yTWVzc2FnZSB9O1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIGJyYW5jaGVzID0gdHJpbVNtYWxsZXJCcmFuY2hlcyhuZXh0QnJhbmNoZXMpO1xuICAgIH1cbiAgICBpZiAoYnJhbmNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBkZWJ1ZyhgICBSZXN1bHRzOmApO1xuICAgICAgICBmb3IgKGNvbnN0IGJyYW5jaCBvZiBicmFuY2hlcykge1xuICAgICAgICAgICAgZGVidWcoYCAgICAtICR7YnJhbmNoLm5vZGV9IC0+ICR7SlNPTi5zdHJpbmdpZnkoYnJhbmNoLnN0YXRlKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZGVidWcoYCAgTm8gcmVzdWx0c2ApO1xuICAgIH1cbiAgICByZXR1cm4gYnJhbmNoZXM7XG59XG5mdW5jdGlvbiBjaGVja0lmTm9kZUlzRmluaXNoZWQobm9kZSwgc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUuc2VsZWN0ZWRJbmRleCAhPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLnN0YXRpY3MsIEVORF9PRl9JTlBVVCkpXG4gICAgICAgIGZvciAoY29uc3QgeyB0byB9IG9mIG5vZGUuc3RhdGljc1tFTkRfT0ZfSU5QVVRdKVxuICAgICAgICAgICAgaWYgKHRvID09PSBOT0RFX1NVQ0NFU1MpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gc3VnZ2VzdE1hY2hpbmUobWFjaGluZSwgaW5wdXQsIHBhcnRpYWwpIHtcbiAgICAvLyBJZiB3ZSdyZSBhY2NlcHRpbmcgcGFydGlhbCBtYXRjaGVzLCB0aGVuIGV4YWN0IG1hdGNoZXMgbmVlZCB0byBiZVxuICAgIC8vIHByZWZpeGVkIHdpdGggYW4gZXh0cmEgc3BhY2UuXG4gICAgY29uc3QgcHJlZml4ID0gcGFydGlhbCAmJiBpbnB1dC5sZW5ndGggPiAwID8gW2BgXSA6IFtdO1xuICAgIGNvbnN0IGJyYW5jaGVzID0gcnVuTWFjaGluZUludGVybmFsKG1hY2hpbmUsIGlucHV0LCBwYXJ0aWFsKTtcbiAgICBjb25zdCBzdWdnZXN0aW9ucyA9IFtdO1xuICAgIGNvbnN0IHN1Z2dlc3Rpb25zSnNvbiA9IG5ldyBTZXQoKTtcbiAgICBjb25zdCB0cmF2ZXJzZVN1Z2dlc3Rpb24gPSAoc3VnZ2VzdGlvbiwgbm9kZSwgc2tpcEZpcnN0ID0gdHJ1ZSkgPT4ge1xuICAgICAgICBsZXQgbmV4dE5vZGVzID0gW25vZGVdO1xuICAgICAgICB3aGlsZSAobmV4dE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnROb2RlcyA9IG5leHROb2RlcztcbiAgICAgICAgICAgIG5leHROb2RlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIGN1cnJlbnROb2Rlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVEZWYgPSBtYWNoaW5lLm5vZGVzW25vZGVdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlRGVmLnN0YXRpY3MpO1xuICAgICAgICAgICAgICAgIC8vIFRoZSBmYWN0IHRoYXQgYGtleWAgaXMgdW51c2VkIGlzIGxpa2VseSBhIGJ1ZywgYnV0IG5vIG9uZSBoYXMgaW52ZXN0aWdhdGVkIGl0IHlldC5cbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBJbnZlc3RpZ2F0ZSBpdC5cbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobm9kZURlZi5zdGF0aWNzKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWdtZW50ID0ga2V5c1swXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB7IHRvLCByZWR1Y2VyIH0gb2Ygbm9kZURlZi5zdGF0aWNzW3NlZ21lbnRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVkdWNlciAhPT0gYHB1c2hQYXRoYClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2tpcEZpcnN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHVzaChzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2Rlcy5wdXNoKHRvKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNraXBGaXJzdCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShzdWdnZXN0aW9uKTtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb25zSnNvbi5oYXMoanNvbikpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHN1Z2dlc3Rpb25zLnB1c2goc3VnZ2VzdGlvbik7XG4gICAgICAgIHN1Z2dlc3Rpb25zSnNvbi5hZGQoanNvbik7XG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IHsgbm9kZSwgc3RhdGUgfSBvZiBicmFuY2hlcykge1xuICAgICAgICBpZiAoc3RhdGUucmVtYWluZGVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0cmF2ZXJzZVN1Z2dlc3Rpb24oW3N0YXRlLnJlbWFpbmRlcl0sIG5vZGUpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm9kZURlZiA9IG1hY2hpbmUubm9kZXNbbm9kZV07XG4gICAgICAgIGNvbnN0IGlzRmluaXNoZWQgPSBjaGVja0lmTm9kZUlzRmluaXNoZWQobm9kZURlZiwgc3RhdGUpO1xuICAgICAgICBmb3IgKGNvbnN0IFtjYW5kaWRhdGUsIHRyYW5zaXRpb25zXSBvZiBPYmplY3QuZW50cmllcyhub2RlRGVmLnN0YXRpY3MpKVxuICAgICAgICAgICAgaWYgKChpc0ZpbmlzaGVkICYmIGNhbmRpZGF0ZSAhPT0gRU5EX09GX0lOUFVUKSB8fCAoIWNhbmRpZGF0ZS5zdGFydHNXaXRoKGAtYCkgJiYgdHJhbnNpdGlvbnMuc29tZSgoeyByZWR1Y2VyIH0pID0+IHJlZHVjZXIgPT09IGBwdXNoUGF0aGApKSlcbiAgICAgICAgICAgICAgICB0cmF2ZXJzZVN1Z2dlc3Rpb24oWy4uLnByZWZpeCwgY2FuZGlkYXRlXSwgbm9kZSk7XG4gICAgICAgIGlmICghaXNGaW5pc2hlZClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBmb3IgKGNvbnN0IFt0ZXN0LCB7IHRvIH1dIG9mIG5vZGVEZWYuZHluYW1pY3MpIHtcbiAgICAgICAgICAgIGlmICh0byA9PT0gTk9ERV9FUlJPUkVEKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgdG9rZW5zID0gc3VnZ2VzdCh0ZXN0LCBzdGF0ZSk7XG4gICAgICAgICAgICBpZiAodG9rZW5zID09PSBudWxsKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICAgICAgICAgICAgICB0cmF2ZXJzZVN1Z2dlc3Rpb24oWy4uLnByZWZpeCwgdG9rZW5dLCBub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gWy4uLnN1Z2dlc3Rpb25zXS5zb3J0KCk7XG59XG5mdW5jdGlvbiBydW5NYWNoaW5lKG1hY2hpbmUsIGlucHV0KSB7XG4gICAgY29uc3QgYnJhbmNoZXMgPSBydW5NYWNoaW5lSW50ZXJuYWwobWFjaGluZSwgWy4uLmlucHV0LCBFTkRfT0ZfSU5QVVRdKTtcbiAgICByZXR1cm4gc2VsZWN0QmVzdFN0YXRlKGlucHV0LCBicmFuY2hlcy5tYXAoKHsgc3RhdGUgfSkgPT4ge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfSkpO1xufVxuZnVuY3Rpb24gdHJpbVNtYWxsZXJCcmFuY2hlcyhicmFuY2hlcykge1xuICAgIGxldCBtYXhQYXRoU2l6ZSA9IDA7XG4gICAgZm9yIChjb25zdCB7IHN0YXRlIH0gb2YgYnJhbmNoZXMpXG4gICAgICAgIGlmIChzdGF0ZS5wYXRoLmxlbmd0aCA+IG1heFBhdGhTaXplKVxuICAgICAgICAgICAgbWF4UGF0aFNpemUgPSBzdGF0ZS5wYXRoLmxlbmd0aDtcbiAgICByZXR1cm4gYnJhbmNoZXMuZmlsdGVyKCh7IHN0YXRlIH0pID0+IHtcbiAgICAgICAgcmV0dXJuIHN0YXRlLnBhdGgubGVuZ3RoID09PSBtYXhQYXRoU2l6ZTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHNlbGVjdEJlc3RTdGF0ZShpbnB1dCwgc3RhdGVzKSB7XG4gICAgY29uc3QgdGVybWluYWxTdGF0ZXMgPSBzdGF0ZXMuZmlsdGVyKHN0YXRlID0+IHtcbiAgICAgICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkSW5kZXggIT09IG51bGw7XG4gICAgfSk7XG4gICAgaWYgKHRlcm1pbmFsU3RhdGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgY29uc3QgcmVxdWlyZWRPcHRpb25zU2V0U3RhdGVzID0gdGVybWluYWxTdGF0ZXMuZmlsdGVyKHN0YXRlID0+IHN0YXRlLnNlbGVjdGVkSW5kZXggPT09IEhFTFBfQ09NTUFORF9JTkRFWCB8fCBzdGF0ZS5yZXF1aXJlZE9wdGlvbnMuZXZlcnkobmFtZXMgPT4gbmFtZXMuc29tZShuYW1lID0+IHN0YXRlLm9wdGlvbnMuZmluZChvcHQgPT4gb3B0Lm5hbWUgPT09IG5hbWUpKSkpO1xuICAgIGlmIChyZXF1aXJlZE9wdGlvbnNTZXRTdGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBVbmtub3duU3ludGF4RXJyb3IoaW5wdXQsIHRlcm1pbmFsU3RhdGVzLm1hcChzdGF0ZSA9PiAoe1xuICAgICAgICAgICAgdXNhZ2U6IHN0YXRlLmNhbmRpZGF0ZVVzYWdlLFxuICAgICAgICAgICAgcmVhc29uOiBudWxsLFxuICAgICAgICB9KSkpO1xuICAgIH1cbiAgICBsZXQgbWF4UGF0aFNpemUgPSAwO1xuICAgIGZvciAoY29uc3Qgc3RhdGUgb2YgcmVxdWlyZWRPcHRpb25zU2V0U3RhdGVzKVxuICAgICAgICBpZiAoc3RhdGUucGF0aC5sZW5ndGggPiBtYXhQYXRoU2l6ZSlcbiAgICAgICAgICAgIG1heFBhdGhTaXplID0gc3RhdGUucGF0aC5sZW5ndGg7XG4gICAgY29uc3QgYmVzdFBhdGhCcmFuY2hlcyA9IHJlcXVpcmVkT3B0aW9uc1NldFN0YXRlcy5maWx0ZXIoc3RhdGUgPT4ge1xuICAgICAgICByZXR1cm4gc3RhdGUucGF0aC5sZW5ndGggPT09IG1heFBhdGhTaXplO1xuICAgIH0pO1xuICAgIGNvbnN0IGdldFBvc2l0aW9uYWxDb3VudCA9IChzdGF0ZSkgPT4gc3RhdGUucG9zaXRpb25hbHMuZmlsdGVyKCh7IGV4dHJhIH0pID0+IHtcbiAgICAgICAgcmV0dXJuICFleHRyYTtcbiAgICB9KS5sZW5ndGggKyBzdGF0ZS5vcHRpb25zLmxlbmd0aDtcbiAgICBjb25zdCBzdGF0ZXNXaXRoUG9zaXRpb25hbENvdW50ID0gYmVzdFBhdGhCcmFuY2hlcy5tYXAoc3RhdGUgPT4ge1xuICAgICAgICByZXR1cm4geyBzdGF0ZSwgcG9zaXRpb25hbENvdW50OiBnZXRQb3NpdGlvbmFsQ291bnQoc3RhdGUpIH07XG4gICAgfSk7XG4gICAgbGV0IG1heFBvc2l0aW9uYWxDb3VudCA9IDA7XG4gICAgZm9yIChjb25zdCB7IHBvc2l0aW9uYWxDb3VudCB9IG9mIHN0YXRlc1dpdGhQb3NpdGlvbmFsQ291bnQpXG4gICAgICAgIGlmIChwb3NpdGlvbmFsQ291bnQgPiBtYXhQb3NpdGlvbmFsQ291bnQpXG4gICAgICAgICAgICBtYXhQb3NpdGlvbmFsQ291bnQgPSBwb3NpdGlvbmFsQ291bnQ7XG4gICAgY29uc3QgYmVzdFBvc2l0aW9uYWxTdGF0ZXMgPSBzdGF0ZXNXaXRoUG9zaXRpb25hbENvdW50LmZpbHRlcigoeyBwb3NpdGlvbmFsQ291bnQgfSkgPT4ge1xuICAgICAgICByZXR1cm4gcG9zaXRpb25hbENvdW50ID09PSBtYXhQb3NpdGlvbmFsQ291bnQ7XG4gICAgfSkubWFwKCh7IHN0YXRlIH0pID0+IHtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH0pO1xuICAgIGNvbnN0IGZpeGVkU3RhdGVzID0gYWdncmVnYXRlSGVscFN0YXRlcyhiZXN0UG9zaXRpb25hbFN0YXRlcyk7XG4gICAgaWYgKGZpeGVkU3RhdGVzLmxlbmd0aCA+IDEpXG4gICAgICAgIHRocm93IG5ldyBBbWJpZ3VvdXNTeW50YXhFcnJvcihpbnB1dCwgZml4ZWRTdGF0ZXMubWFwKHN0YXRlID0+IHN0YXRlLmNhbmRpZGF0ZVVzYWdlKSk7XG4gICAgcmV0dXJuIGZpeGVkU3RhdGVzWzBdO1xufVxuZnVuY3Rpb24gYWdncmVnYXRlSGVscFN0YXRlcyhzdGF0ZXMpIHtcbiAgICBjb25zdCBub3RIZWxwcyA9IFtdO1xuICAgIGNvbnN0IGhlbHBzID0gW107XG4gICAgZm9yIChjb25zdCBzdGF0ZSBvZiBzdGF0ZXMpIHtcbiAgICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkSW5kZXggPT09IEhFTFBfQ09NTUFORF9JTkRFWCkge1xuICAgICAgICAgICAgaGVscHMucHVzaChzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBub3RIZWxwcy5wdXNoKHN0YXRlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGVscHMubGVuZ3RoID4gMCkge1xuICAgICAgICBub3RIZWxwcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLmJhc2ljSGVscFN0YXRlLFxuICAgICAgICAgICAgcGF0aDogZmluZENvbW1vblByZWZpeCguLi5oZWxwcy5tYXAoc3RhdGUgPT4gc3RhdGUucGF0aCkpLFxuICAgICAgICAgICAgb3B0aW9uczogaGVscHMucmVkdWNlKChvcHRpb25zLCBzdGF0ZSkgPT4gb3B0aW9ucy5jb25jYXQoc3RhdGUub3B0aW9ucyksIFtdKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBub3RIZWxwcztcbn1cbmZ1bmN0aW9uIGZpbmRDb21tb25QcmVmaXgoZmlyc3RQYXRoLCBzZWNvbmRQYXRoLCAuLi5yZXN0KSB7XG4gICAgaWYgKHNlY29uZFBhdGggPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZmlyc3RQYXRoKTtcbiAgICByZXR1cm4gZmluZENvbW1vblByZWZpeChmaXJzdFBhdGguZmlsdGVyKChzZWdtZW50LCBpKSA9PiBzZWdtZW50ID09PSBzZWNvbmRQYXRoW2ldKSwgLi4ucmVzdCk7XG59XG5mdW5jdGlvbiBtYWtlTm9kZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBkeW5hbWljczogW10sXG4gICAgICAgIHNob3J0Y3V0czogW10sXG4gICAgICAgIHN0YXRpY3M6IHt9LFxuICAgIH07XG59XG5mdW5jdGlvbiBpc1Rlcm1pbmFsTm9kZShub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUgPT09IE5PREVfU1VDQ0VTUyB8fCBub2RlID09PSBOT0RFX0VSUk9SRUQ7XG59XG5mdW5jdGlvbiBjbG9uZVRyYW5zaXRpb24oaW5wdXQsIG9mZnNldCA9IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0bzogIWlzVGVybWluYWxOb2RlKGlucHV0LnRvKSA/IGlucHV0LnRvID4gMiA/IGlucHV0LnRvICsgb2Zmc2V0IC0gMiA6IGlucHV0LnRvICsgb2Zmc2V0IDogaW5wdXQudG8sXG4gICAgICAgIHJlZHVjZXI6IGlucHV0LnJlZHVjZXIsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNsb25lTm9kZShpbnB1dCwgb2Zmc2V0ID0gMCkge1xuICAgIGNvbnN0IG91dHB1dCA9IG1ha2VOb2RlKCk7XG4gICAgZm9yIChjb25zdCBbdGVzdCwgdHJhbnNpdGlvbl0gb2YgaW5wdXQuZHluYW1pY3MpXG4gICAgICAgIG91dHB1dC5keW5hbWljcy5wdXNoKFt0ZXN0LCBjbG9uZVRyYW5zaXRpb24odHJhbnNpdGlvbiwgb2Zmc2V0KV0pO1xuICAgIGZvciAoY29uc3QgdHJhbnNpdGlvbiBvZiBpbnB1dC5zaG9ydGN1dHMpXG4gICAgICAgIG91dHB1dC5zaG9ydGN1dHMucHVzaChjbG9uZVRyYW5zaXRpb24odHJhbnNpdGlvbiwgb2Zmc2V0KSk7XG4gICAgZm9yIChjb25zdCBbc2VnbWVudCwgdHJhbnNpdGlvbnNdIG9mIE9iamVjdC5lbnRyaWVzKGlucHV0LnN0YXRpY3MpKVxuICAgICAgICBvdXRwdXQuc3RhdGljc1tzZWdtZW50XSA9IHRyYW5zaXRpb25zLm1hcCh0cmFuc2l0aW9uID0+IGNsb25lVHJhbnNpdGlvbih0cmFuc2l0aW9uLCBvZmZzZXQpKTtcbiAgICByZXR1cm4gb3V0cHV0O1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJEeW5hbWljKG1hY2hpbmUsIGZyb20sIHRlc3QsIHRvLCByZWR1Y2VyKSB7XG4gICAgbWFjaGluZS5ub2Rlc1tmcm9tXS5keW5hbWljcy5wdXNoKFtcbiAgICAgICAgdGVzdCxcbiAgICAgICAgeyB0bywgcmVkdWNlcjogcmVkdWNlciB9LFxuICAgIF0pO1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJTaG9ydGN1dChtYWNoaW5lLCBmcm9tLCB0bywgcmVkdWNlcikge1xuICAgIG1hY2hpbmUubm9kZXNbZnJvbV0uc2hvcnRjdXRzLnB1c2goeyB0bywgcmVkdWNlcjogcmVkdWNlciB9KTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyU3RhdGljKG1hY2hpbmUsIGZyb20sIHRlc3QsIHRvLCByZWR1Y2VyKSB7XG4gICAgY29uc3Qgc3RvcmUgPSAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hY2hpbmUubm9kZXNbZnJvbV0uc3RhdGljcywgdGVzdClcbiAgICAgICAgPyBtYWNoaW5lLm5vZGVzW2Zyb21dLnN0YXRpY3NbdGVzdF0gPSBbXVxuICAgICAgICA6IG1hY2hpbmUubm9kZXNbZnJvbV0uc3RhdGljc1t0ZXN0XTtcbiAgICBzdG9yZS5wdXNoKHsgdG8sIHJlZHVjZXI6IHJlZHVjZXIgfSk7XG59XG5mdW5jdGlvbiBleGVjdXRlKHN0b3JlLCBjYWxsYmFjaywgc3RhdGUsIHNlZ21lbnQpIHtcbiAgICAvLyBUeXBlU2NyaXB0J3MgY29udHJvbCBmbG93IGNhbid0IHByb3Blcmx5IG5hcnJvd1xuICAgIC8vIGdlbmVyaWMgY29uZGl0aW9uYWxzIGZvciBzb21lIG15c3RlcmlvdXMgcmVhc29uXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2FsbGJhY2spKSB7XG4gICAgICAgIGNvbnN0IFtuYW1lLCAuLi5hcmdzXSA9IGNhbGxiYWNrO1xuICAgICAgICByZXR1cm4gc3RvcmVbbmFtZV0oc3RhdGUsIHNlZ21lbnQsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHN0b3JlW2NhbGxiYWNrXShzdGF0ZSwgc2VnbWVudCk7XG4gICAgfVxufVxuZnVuY3Rpb24gc3VnZ2VzdChjYWxsYmFjaywgc3RhdGUpIHtcbiAgICBjb25zdCBmbiA9IEFycmF5LmlzQXJyYXkoY2FsbGJhY2spXG4gICAgICAgID8gdGVzdHNbY2FsbGJhY2tbMF1dXG4gICAgICAgIDogdGVzdHNbY2FsbGJhY2tdO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAodHlwZW9mIGZuLnN1Z2dlc3QgPT09IGB1bmRlZmluZWRgKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBhcmdzID0gQXJyYXkuaXNBcnJheShjYWxsYmFjaylcbiAgICAgICAgPyBjYWxsYmFjay5zbGljZSgxKVxuICAgICAgICA6IFtdO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gZm4uc3VnZ2VzdChzdGF0ZSwgLi4uYXJncyk7XG59XG5jb25zdCB0ZXN0cyA9IHtcbiAgICBhbHdheXM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBpc09wdGlvbkxpa2U6IChzdGF0ZSwgc2VnbWVudCkgPT4ge1xuICAgICAgICByZXR1cm4gIXN0YXRlLmlnbm9yZU9wdGlvbnMgJiYgKHNlZ21lbnQgIT09IGAtYCAmJiBzZWdtZW50LnN0YXJ0c1dpdGgoYC1gKSk7XG4gICAgfSxcbiAgICBpc05vdE9wdGlvbkxpa2U6IChzdGF0ZSwgc2VnbWVudCkgPT4ge1xuICAgICAgICByZXR1cm4gc3RhdGUuaWdub3JlT3B0aW9ucyB8fCBzZWdtZW50ID09PSBgLWAgfHwgIXNlZ21lbnQuc3RhcnRzV2l0aChgLWApO1xuICAgIH0sXG4gICAgaXNPcHRpb246IChzdGF0ZSwgc2VnbWVudCwgbmFtZSwgaGlkZGVuKSA9PiB7XG4gICAgICAgIHJldHVybiAhc3RhdGUuaWdub3JlT3B0aW9ucyAmJiBzZWdtZW50ID09PSBuYW1lO1xuICAgIH0sXG4gICAgaXNCYXRjaE9wdGlvbjogKHN0YXRlLCBzZWdtZW50LCBuYW1lcykgPT4ge1xuICAgICAgICByZXR1cm4gIXN0YXRlLmlnbm9yZU9wdGlvbnMgJiYgQkFUQ0hfUkVHRVgudGVzdChzZWdtZW50KSAmJiBbLi4uc2VnbWVudC5zbGljZSgxKV0uZXZlcnkobmFtZSA9PiBuYW1lcy5pbmNsdWRlcyhgLSR7bmFtZX1gKSk7XG4gICAgfSxcbiAgICBpc0JvdW5kT3B0aW9uOiAoc3RhdGUsIHNlZ21lbnQsIG5hbWVzLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdGlvblBhcnNpbmcgPSBzZWdtZW50Lm1hdGNoKEJJTkRJTkdfUkVHRVgpO1xuICAgICAgICByZXR1cm4gIXN0YXRlLmlnbm9yZU9wdGlvbnMgJiYgISFvcHRpb25QYXJzaW5nICYmIE9QVElPTl9SRUdFWC50ZXN0KG9wdGlvblBhcnNpbmdbMV0pICYmIG5hbWVzLmluY2x1ZGVzKG9wdGlvblBhcnNpbmdbMV0pXG4gICAgICAgICAgICAvLyBEaXNhbGxvdyBib3VuZCBvcHRpb25zIHdpdGggbm8gYXJndW1lbnRzIChpLmUuIGJvb2xlYW5zKVxuICAgICAgICAgICAgJiYgb3B0aW9ucy5maWx0ZXIob3B0ID0+IG9wdC5uYW1lcy5pbmNsdWRlcyhvcHRpb25QYXJzaW5nWzFdKSkuZXZlcnkob3B0ID0+IG9wdC5hbGxvd0JpbmRpbmcpO1xuICAgIH0sXG4gICAgaXNOZWdhdGVkT3B0aW9uOiAoc3RhdGUsIHNlZ21lbnQsIG5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuICFzdGF0ZS5pZ25vcmVPcHRpb25zICYmIHNlZ21lbnQgPT09IGAtLW5vLSR7bmFtZS5zbGljZSgyKX1gO1xuICAgIH0sXG4gICAgaXNIZWxwOiAoc3RhdGUsIHNlZ21lbnQpID0+IHtcbiAgICAgICAgcmV0dXJuICFzdGF0ZS5pZ25vcmVPcHRpb25zICYmIEhFTFBfUkVHRVgudGVzdChzZWdtZW50KTtcbiAgICB9LFxuICAgIGlzVW5zdXBwb3J0ZWRPcHRpb246IChzdGF0ZSwgc2VnbWVudCwgbmFtZXMpID0+IHtcbiAgICAgICAgcmV0dXJuICFzdGF0ZS5pZ25vcmVPcHRpb25zICYmIHNlZ21lbnQuc3RhcnRzV2l0aChgLWApICYmIE9QVElPTl9SRUdFWC50ZXN0KHNlZ21lbnQpICYmICFuYW1lcy5pbmNsdWRlcyhzZWdtZW50KTtcbiAgICB9LFxuICAgIGlzSW52YWxpZE9wdGlvbjogKHN0YXRlLCBzZWdtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiAhc3RhdGUuaWdub3JlT3B0aW9ucyAmJiBzZWdtZW50LnN0YXJ0c1dpdGgoYC1gKSAmJiAhT1BUSU9OX1JFR0VYLnRlc3Qoc2VnbWVudCk7XG4gICAgfSxcbn07XG4vLyBAdHMtaWdub3JlXG50ZXN0cy5pc09wdGlvbi5zdWdnZXN0ID0gKHN0YXRlLCBuYW1lLCBoaWRkZW4gPSB0cnVlKSA9PiB7XG4gICAgcmV0dXJuICFoaWRkZW4gPyBbbmFtZV0gOiBudWxsO1xufTtcbmNvbnN0IHJlZHVjZXJzID0ge1xuICAgIHNldENhbmRpZGF0ZVN0YXRlOiAoc3RhdGUsIHNlZ21lbnQsIGNhbmRpZGF0ZVN0YXRlKSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLnN0YXRlLCAuLi5jYW5kaWRhdGVTdGF0ZSB9O1xuICAgIH0sXG4gICAgc2V0U2VsZWN0ZWRJbmRleDogKHN0YXRlLCBzZWdtZW50LCBpbmRleCkgPT4ge1xuICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSwgc2VsZWN0ZWRJbmRleDogaW5kZXggfTtcbiAgICB9LFxuICAgIHB1c2hCYXRjaDogKHN0YXRlLCBzZWdtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBvcHRpb25zOiBzdGF0ZS5vcHRpb25zLmNvbmNhdChbLi4uc2VnbWVudC5zbGljZSgxKV0ubWFwKG5hbWUgPT4gKHsgbmFtZTogYC0ke25hbWV9YCwgdmFsdWU6IHRydWUgfSkpKSB9O1xuICAgIH0sXG4gICAgcHVzaEJvdW5kOiAoc3RhdGUsIHNlZ21lbnQpID0+IHtcbiAgICAgICAgY29uc3QgWywgbmFtZSwgdmFsdWVdID0gc2VnbWVudC5tYXRjaChCSU5ESU5HX1JFR0VYKTtcbiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIG9wdGlvbnM6IHN0YXRlLm9wdGlvbnMuY29uY2F0KHsgbmFtZSwgdmFsdWUgfSkgfTtcbiAgICB9LFxuICAgIHB1c2hQYXRoOiAoc3RhdGUsIHNlZ21lbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHBhdGg6IHN0YXRlLnBhdGguY29uY2F0KHNlZ21lbnQpIH07XG4gICAgfSxcbiAgICBwdXNoUG9zaXRpb25hbDogKHN0YXRlLCBzZWdtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBwb3NpdGlvbmFsczogc3RhdGUucG9zaXRpb25hbHMuY29uY2F0KHsgdmFsdWU6IHNlZ21lbnQsIGV4dHJhOiBmYWxzZSB9KSB9O1xuICAgIH0sXG4gICAgcHVzaEV4dHJhOiAoc3RhdGUsIHNlZ21lbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHBvc2l0aW9uYWxzOiBzdGF0ZS5wb3NpdGlvbmFscy5jb25jYXQoeyB2YWx1ZTogc2VnbWVudCwgZXh0cmE6IHRydWUgfSkgfTtcbiAgICB9LFxuICAgIHB1c2hFeHRyYU5vTGltaXRzOiAoc3RhdGUsIHNlZ21lbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHBvc2l0aW9uYWxzOiBzdGF0ZS5wb3NpdGlvbmFscy5jb25jYXQoeyB2YWx1ZTogc2VnbWVudCwgZXh0cmE6IE5vTGltaXRzIH0pIH07XG4gICAgfSxcbiAgICBwdXNoVHJ1ZTogKHN0YXRlLCBzZWdtZW50LCBuYW1lID0gc2VnbWVudCkgPT4ge1xuICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSwgb3B0aW9uczogc3RhdGUub3B0aW9ucy5jb25jYXQoeyBuYW1lOiBzZWdtZW50LCB2YWx1ZTogdHJ1ZSB9KSB9O1xuICAgIH0sXG4gICAgcHVzaEZhbHNlOiAoc3RhdGUsIHNlZ21lbnQsIG5hbWUgPSBzZWdtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBvcHRpb25zOiBzdGF0ZS5vcHRpb25zLmNvbmNhdCh7IG5hbWUsIHZhbHVlOiBmYWxzZSB9KSB9O1xuICAgIH0sXG4gICAgcHVzaFVuZGVmaW5lZDogKHN0YXRlLCBzZWdtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBvcHRpb25zOiBzdGF0ZS5vcHRpb25zLmNvbmNhdCh7IG5hbWU6IHNlZ21lbnQsIHZhbHVlOiB1bmRlZmluZWQgfSkgfTtcbiAgICB9LFxuICAgIHB1c2hTdHJpbmdWYWx1ZTogKHN0YXRlLCBzZWdtZW50KSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgY29weSA9IHsgLi4uc3RhdGUsIG9wdGlvbnM6IFsuLi5zdGF0ZS5vcHRpb25zXSB9O1xuICAgICAgICBjb25zdCBsYXN0T3B0aW9uID0gc3RhdGUub3B0aW9uc1tzdGF0ZS5vcHRpb25zLmxlbmd0aCAtIDFdO1xuICAgICAgICBsYXN0T3B0aW9uLnZhbHVlID0gKChfYSA9IGxhc3RPcHRpb24udmFsdWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdKS5jb25jYXQoW3NlZ21lbnRdKTtcbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfSxcbiAgICBzZXRTdHJpbmdWYWx1ZTogKHN0YXRlLCBzZWdtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvcHkgPSB7IC4uLnN0YXRlLCBvcHRpb25zOiBbLi4uc3RhdGUub3B0aW9uc10gfTtcbiAgICAgICAgY29uc3QgbGFzdE9wdGlvbiA9IHN0YXRlLm9wdGlvbnNbc3RhdGUub3B0aW9ucy5sZW5ndGggLSAxXTtcbiAgICAgICAgbGFzdE9wdGlvbi52YWx1ZSA9IHNlZ21lbnQ7XG4gICAgICAgIHJldHVybiBjb3B5O1xuICAgIH0sXG4gICAgaW5oaWJhdGVPcHRpb25zOiAoc3RhdGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGlnbm9yZU9wdGlvbnM6IHRydWUgfTtcbiAgICB9LFxuICAgIHVzZUhlbHA6IChzdGF0ZSwgc2VnbWVudCwgY29tbWFuZCkgPT4ge1xuICAgICAgICBjb25zdCBbLCAvKiBuYW1lICovICwgaW5kZXhdID0gc2VnbWVudC5tYXRjaChIRUxQX1JFR0VYKTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbmRleCAhPT0gYHVuZGVmaW5lZGApIHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBvcHRpb25zOiBbeyBuYW1lOiBgLWNgLCB2YWx1ZTogU3RyaW5nKGNvbW1hbmQpIH0sIHsgbmFtZTogYC1pYCwgdmFsdWU6IGluZGV4IH1dIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSwgb3B0aW9uczogW3sgbmFtZTogYC1jYCwgdmFsdWU6IFN0cmluZyhjb21tYW5kKSB9XSB9O1xuICAgICAgICB9XG4gICAgfSxcbiAgICBzZXRFcnJvcjogKHN0YXRlLCBzZWdtZW50LCBlcnJvck1lc3NhZ2UpID0+IHtcbiAgICAgICAgaWYgKHNlZ21lbnQgPT09IEVORF9PRl9JTlBVVCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGVycm9yTWVzc2FnZTogYCR7ZXJyb3JNZXNzYWdlfS5gIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSwgZXJyb3JNZXNzYWdlOiBgJHtlcnJvck1lc3NhZ2V9IChcIiR7c2VnbWVudH1cIikuYCB9O1xuICAgICAgICB9XG4gICAgfSxcbiAgICBzZXRPcHRpb25Bcml0eUVycm9yOiAoc3RhdGUsIHNlZ21lbnQpID0+IHtcbiAgICAgICAgY29uc3QgbGFzdE9wdGlvbiA9IHN0YXRlLm9wdGlvbnNbc3RhdGUub3B0aW9ucy5sZW5ndGggLSAxXTtcbiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGVycm9yTWVzc2FnZTogYE5vdCBlbm91Z2ggYXJndW1lbnRzIHRvIG9wdGlvbiAke2xhc3RPcHRpb24ubmFtZX0uYCB9O1xuICAgIH0sXG59O1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5jb25zdCBOb0xpbWl0cyA9IFN5bWJvbCgpO1xuY2xhc3MgQ29tbWFuZEJ1aWxkZXIge1xuICAgIGNvbnN0cnVjdG9yKGNsaUluZGV4LCBjbGlPcHRzKSB7XG4gICAgICAgIHRoaXMuYWxsT3B0aW9uTmFtZXMgPSBbXTtcbiAgICAgICAgdGhpcy5hcml0eSA9IHsgbGVhZGluZzogW10sIHRyYWlsaW5nOiBbXSwgZXh0cmE6IFtdLCBwcm94eTogZmFsc2UgfTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gW107XG4gICAgICAgIHRoaXMucGF0aHMgPSBbXTtcbiAgICAgICAgdGhpcy5jbGlJbmRleCA9IGNsaUluZGV4O1xuICAgICAgICB0aGlzLmNsaU9wdHMgPSBjbGlPcHRzO1xuICAgIH1cbiAgICBhZGRQYXRoKHBhdGgpIHtcbiAgICAgICAgdGhpcy5wYXRocy5wdXNoKHBhdGgpO1xuICAgIH1cbiAgICBzZXRBcml0eSh7IGxlYWRpbmcgPSB0aGlzLmFyaXR5LmxlYWRpbmcsIHRyYWlsaW5nID0gdGhpcy5hcml0eS50cmFpbGluZywgZXh0cmEgPSB0aGlzLmFyaXR5LmV4dHJhLCBwcm94eSA9IHRoaXMuYXJpdHkucHJveHkgfSkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuYXJpdHksIHsgbGVhZGluZywgdHJhaWxpbmcsIGV4dHJhLCBwcm94eSB9KTtcbiAgICB9XG4gICAgYWRkUG9zaXRpb25hbCh7IG5hbWUgPSBgYXJnYCwgcmVxdWlyZWQgPSB0cnVlIH0gPSB7fSkge1xuICAgICAgICBpZiAoIXJlcXVpcmVkICYmIHRoaXMuYXJpdHkuZXh0cmEgPT09IE5vTGltaXRzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcHRpb25hbCBwYXJhbWV0ZXJzIGNhbm5vdCBiZSBkZWNsYXJlZCB3aGVuIHVzaW5nIC5yZXN0KCkgb3IgLnByb3h5KClgKTtcbiAgICAgICAgaWYgKCFyZXF1aXJlZCAmJiB0aGlzLmFyaXR5LnRyYWlsaW5nLmxlbmd0aCA+IDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wdGlvbmFsIHBhcmFtZXRlcnMgY2Fubm90IGJlIGRlY2xhcmVkIGFmdGVyIHRoZSByZXF1aXJlZCB0cmFpbGluZyBwb3NpdGlvbmFsIGFyZ3VtZW50c2ApO1xuICAgICAgICBpZiAoIXJlcXVpcmVkICYmIHRoaXMuYXJpdHkuZXh0cmEgIT09IE5vTGltaXRzKSB7XG4gICAgICAgICAgICB0aGlzLmFyaXR5LmV4dHJhLnB1c2gobmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5hcml0eS5leHRyYSAhPT0gTm9MaW1pdHMgJiYgdGhpcy5hcml0eS5leHRyYS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuYXJpdHkubGVhZGluZy5wdXNoKG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hcml0eS50cmFpbGluZy5wdXNoKG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZFJlc3QoeyBuYW1lID0gYGFyZ2AsIHJlcXVpcmVkID0gMCB9ID0ge30pIHtcbiAgICAgICAgaWYgKHRoaXMuYXJpdHkuZXh0cmEgPT09IE5vTGltaXRzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbmZpbml0ZSBsaXN0cyBjYW5ub3QgYmUgZGVjbGFyZWQgbXVsdGlwbGUgdGltZXMgaW4gdGhlIHNhbWUgY29tbWFuZGApO1xuICAgICAgICBpZiAodGhpcy5hcml0eS50cmFpbGluZy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbmZpbml0ZSBsaXN0cyBjYW5ub3QgYmUgZGVjbGFyZWQgYWZ0ZXIgdGhlIHJlcXVpcmVkIHRyYWlsaW5nIHBvc2l0aW9uYWwgYXJndW1lbnRzYCk7XG4gICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgcmVxdWlyZWQ7ICsrdClcbiAgICAgICAgICAgIHRoaXMuYWRkUG9zaXRpb25hbCh7IG5hbWUgfSk7XG4gICAgICAgIHRoaXMuYXJpdHkuZXh0cmEgPSBOb0xpbWl0cztcbiAgICB9XG4gICAgYWRkUHJveHkoeyByZXF1aXJlZCA9IDAgfSA9IHt9KSB7XG4gICAgICAgIHRoaXMuYWRkUmVzdCh7IHJlcXVpcmVkIH0pO1xuICAgICAgICB0aGlzLmFyaXR5LnByb3h5ID0gdHJ1ZTtcbiAgICB9XG4gICAgYWRkT3B0aW9uKHsgbmFtZXMsIGRlc2NyaXB0aW9uLCBhcml0eSA9IDAsIGhpZGRlbiA9IGZhbHNlLCByZXF1aXJlZCA9IGZhbHNlLCBhbGxvd0JpbmRpbmcgPSB0cnVlIH0pIHtcbiAgICAgICAgaWYgKCFhbGxvd0JpbmRpbmcgJiYgYXJpdHkgPiAxKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgYXJpdHkgY2Fubm90IGJlIGhpZ2hlciB0aGFuIDEgd2hlbiB0aGUgb3B0aW9uIG9ubHkgc3VwcG9ydHMgdGhlIC0tYXJnPXZhbHVlIHN5bnRheGApO1xuICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYXJpdHkpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgYXJpdHkgbXVzdCBiZSBhbiBpbnRlZ2VyLCBnb3QgJHthcml0eX1gKTtcbiAgICAgICAgaWYgKGFyaXR5IDwgMClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGFyaXR5IG11c3QgYmUgcG9zaXRpdmUsIGdvdCAke2FyaXR5fWApO1xuICAgICAgICB0aGlzLmFsbE9wdGlvbk5hbWVzLnB1c2goLi4ubmFtZXMpO1xuICAgICAgICB0aGlzLm9wdGlvbnMucHVzaCh7IG5hbWVzLCBkZXNjcmlwdGlvbiwgYXJpdHksIGhpZGRlbiwgcmVxdWlyZWQsIGFsbG93QmluZGluZyB9KTtcbiAgICB9XG4gICAgc2V0Q29udGV4dChjb250ZXh0KSB7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgfVxuICAgIHVzYWdlKHsgZGV0YWlsZWQgPSB0cnVlLCBpbmxpbmVPcHRpb25zID0gdHJ1ZSB9ID0ge30pIHtcbiAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBbdGhpcy5jbGlPcHRzLmJpbmFyeU5hbWVdO1xuICAgICAgICBjb25zdCBkZXRhaWxlZE9wdGlvbkxpc3QgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMucGF0aHMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHNlZ21lbnRzLnB1c2goLi4udGhpcy5wYXRoc1swXSk7XG4gICAgICAgIGlmIChkZXRhaWxlZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB7IG5hbWVzLCBhcml0eSwgaGlkZGVuLCBkZXNjcmlwdGlvbiwgcmVxdWlyZWQgfSBvZiB0aGlzLm9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGlkZGVuKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBhcmdzID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCBhcml0eTsgKyt0KVxuICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goYCAjJHt0fWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBgJHtuYW1lcy5qb2luKGAsYCl9JHthcmdzLmpvaW4oYGApfWA7XG4gICAgICAgICAgICAgICAgaWYgKCFpbmxpbmVPcHRpb25zICYmIGRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGRldGFpbGVkT3B0aW9uTGlzdC5wdXNoKHsgZGVmaW5pdGlvbiwgZGVzY3JpcHRpb24sIHJlcXVpcmVkIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VnbWVudHMucHVzaChyZXF1aXJlZCA/IGA8JHtkZWZpbml0aW9ufT5gIDogYFske2RlZmluaXRpb259XWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlZ21lbnRzLnB1c2goLi4udGhpcy5hcml0eS5sZWFkaW5nLm1hcChuYW1lID0+IGA8JHtuYW1lfT5gKSk7XG4gICAgICAgICAgICBpZiAodGhpcy5hcml0eS5leHRyYSA9PT0gTm9MaW1pdHMpXG4gICAgICAgICAgICAgICAgc2VnbWVudHMucHVzaChgLi4uYCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgc2VnbWVudHMucHVzaCguLi50aGlzLmFyaXR5LmV4dHJhLm1hcChuYW1lID0+IGBbJHtuYW1lfV1gKSk7XG4gICAgICAgICAgICBzZWdtZW50cy5wdXNoKC4uLnRoaXMuYXJpdHkudHJhaWxpbmcubWFwKG5hbWUgPT4gYDwke25hbWV9PmApKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1c2FnZSA9IHNlZ21lbnRzLmpvaW4oYCBgKTtcbiAgICAgICAgcmV0dXJuIHsgdXNhZ2UsIG9wdGlvbnM6IGRldGFpbGVkT3B0aW9uTGlzdCB9O1xuICAgIH1cbiAgICBjb21waWxlKCkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udGV4dCA9PT0gYHVuZGVmaW5lZGApXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFzc2VydGlvbiBmYWlsZWQ6IE5vIGNvbnRleHQgYXR0YWNoZWRgKTtcbiAgICAgICAgY29uc3QgbWFjaGluZSA9IG1ha2VTdGF0ZU1hY2hpbmUoKTtcbiAgICAgICAgbGV0IGZpcnN0Tm9kZSA9IE5PREVfSU5JVElBTDtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlVXNhZ2UgPSB0aGlzLnVzYWdlKCkudXNhZ2U7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9uc1xuICAgICAgICAgICAgLmZpbHRlcihvcHQgPT4gb3B0LnJlcXVpcmVkKVxuICAgICAgICAgICAgLm1hcChvcHQgPT4gb3B0Lm5hbWVzKTtcbiAgICAgICAgZmlyc3ROb2RlID0gaW5qZWN0Tm9kZShtYWNoaW5lLCBtYWtlTm9kZSgpKTtcbiAgICAgICAgcmVnaXN0ZXJTdGF0aWMobWFjaGluZSwgTk9ERV9JTklUSUFMLCBTVEFSVF9PRl9JTlBVVCwgZmlyc3ROb2RlLCBbYHNldENhbmRpZGF0ZVN0YXRlYCwgeyBjYW5kaWRhdGVVc2FnZSwgcmVxdWlyZWRPcHRpb25zIH1dKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25hbEFyZ3VtZW50ID0gdGhpcy5hcml0eS5wcm94eVxuICAgICAgICAgICAgPyBgYWx3YXlzYFxuICAgICAgICAgICAgOiBgaXNOb3RPcHRpb25MaWtlYDtcbiAgICAgICAgY29uc3QgcGF0aHMgPSB0aGlzLnBhdGhzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdGhpcy5wYXRoc1xuICAgICAgICAgICAgOiBbW11dO1xuICAgICAgICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICAgICAgICAgIGxldCBsYXN0UGF0aE5vZGUgPSBmaXJzdE5vZGU7XG4gICAgICAgICAgICAvLyBXZSBhbGxvdyBvcHRpb25zIHRvIGJlIHNwZWNpZmllZCBiZWZvcmUgdGhlIHBhdGguIE5vdGUgdGhhdCB3ZVxuICAgICAgICAgICAgLy8gb25seSBkbyB0aGlzIHdoZW4gdGhlcmUgaXMgYSBwYXRoLCBvdGhlcndpc2UgdGhlcmUgd291bGQgYmVcbiAgICAgICAgICAgIC8vIHNvbWUgcmVkdW5kYW5jeSB3aXRoIHRoZSBvcHRpb25zIGF0dGFjaGVkIGxhdGVyLlxuICAgICAgICAgICAgaWYgKHBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvblBhdGhOb2RlID0gaW5qZWN0Tm9kZShtYWNoaW5lLCBtYWtlTm9kZSgpKTtcbiAgICAgICAgICAgICAgICByZWdpc3RlclNob3J0Y3V0KG1hY2hpbmUsIGxhc3RQYXRoTm9kZSwgb3B0aW9uUGF0aE5vZGUpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJPcHRpb25zKG1hY2hpbmUsIG9wdGlvblBhdGhOb2RlKTtcbiAgICAgICAgICAgICAgICBsYXN0UGF0aE5vZGUgPSBvcHRpb25QYXRoTm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgcGF0aC5sZW5ndGg7ICsrdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRQYXRoTm9kZSA9IGluamVjdE5vZGUobWFjaGluZSwgbWFrZU5vZGUoKSk7XG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJTdGF0aWMobWFjaGluZSwgbGFzdFBhdGhOb2RlLCBwYXRoW3RdLCBuZXh0UGF0aE5vZGUsIGBwdXNoUGF0aGApO1xuICAgICAgICAgICAgICAgIGxhc3RQYXRoTm9kZSA9IG5leHRQYXRoTm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmFyaXR5LmxlYWRpbmcubGVuZ3RoID4gMCB8fCAhdGhpcy5hcml0eS5wcm94eSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlbHBOb2RlID0gaW5qZWN0Tm9kZShtYWNoaW5lLCBtYWtlTm9kZSgpKTtcbiAgICAgICAgICAgICAgICByZWdpc3RlckR5bmFtaWMobWFjaGluZSwgbGFzdFBhdGhOb2RlLCBgaXNIZWxwYCwgaGVscE5vZGUsIFtgdXNlSGVscGAsIHRoaXMuY2xpSW5kZXhdKTtcbiAgICAgICAgICAgICAgICByZWdpc3RlckR5bmFtaWMobWFjaGluZSwgaGVscE5vZGUsIGBhbHdheXNgLCBoZWxwTm9kZSwgYHB1c2hFeHRyYWApO1xuICAgICAgICAgICAgICAgIHJlZ2lzdGVyU3RhdGljKG1hY2hpbmUsIGhlbHBOb2RlLCBFTkRfT0ZfSU5QVVQsIE5PREVfU1VDQ0VTUywgW2BzZXRTZWxlY3RlZEluZGV4YCwgSEVMUF9DT01NQU5EX0lOREVYXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWdpc3Rlck9wdGlvbnMobWFjaGluZSwgbGFzdFBhdGhOb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmFyaXR5LmxlYWRpbmcubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICByZWdpc3RlclN0YXRpYyhtYWNoaW5lLCBsYXN0UGF0aE5vZGUsIEVORF9PRl9JTlBVVCwgTk9ERV9FUlJPUkVELCBbYHNldEVycm9yYCwgYE5vdCBlbm91Z2ggcG9zaXRpb25hbCBhcmd1bWVudHNgXSk7XG4gICAgICAgICAgICBsZXQgbGFzdExlYWRpbmdOb2RlID0gbGFzdFBhdGhOb2RlO1xuICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0aGlzLmFyaXR5LmxlYWRpbmcubGVuZ3RoOyArK3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0TGVhZGluZ05vZGUgPSBpbmplY3ROb2RlKG1hY2hpbmUsIG1ha2VOb2RlKCkpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hcml0eS5wcm94eSB8fCB0ICsgMSAhPT0gdGhpcy5hcml0eS5sZWFkaW5nLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWdpc3Rlck9wdGlvbnMobWFjaGluZSwgbmV4dExlYWRpbmdOb2RlKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hcml0eS50cmFpbGluZy5sZW5ndGggPiAwIHx8IHQgKyAxICE9PSB0aGlzLmFyaXR5LmxlYWRpbmcubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICByZWdpc3RlclN0YXRpYyhtYWNoaW5lLCBuZXh0TGVhZGluZ05vZGUsIEVORF9PRl9JTlBVVCwgTk9ERV9FUlJPUkVELCBbYHNldEVycm9yYCwgYE5vdCBlbm91Z2ggcG9zaXRpb25hbCBhcmd1bWVudHNgXSk7XG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJEeW5hbWljKG1hY2hpbmUsIGxhc3RMZWFkaW5nTm9kZSwgYGlzTm90T3B0aW9uTGlrZWAsIG5leHRMZWFkaW5nTm9kZSwgYHB1c2hQb3NpdGlvbmFsYCk7XG4gICAgICAgICAgICAgICAgbGFzdExlYWRpbmdOb2RlID0gbmV4dExlYWRpbmdOb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGxhc3RFeHRyYU5vZGUgPSBsYXN0TGVhZGluZ05vZGU7XG4gICAgICAgICAgICBpZiAodGhpcy5hcml0eS5leHRyYSA9PT0gTm9MaW1pdHMgfHwgdGhpcy5hcml0eS5leHRyYS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXh0cmFTaG9ydGN1dE5vZGUgPSBpbmplY3ROb2RlKG1hY2hpbmUsIG1ha2VOb2RlKCkpO1xuICAgICAgICAgICAgICAgIHJlZ2lzdGVyU2hvcnRjdXQobWFjaGluZSwgbGFzdExlYWRpbmdOb2RlLCBleHRyYVNob3J0Y3V0Tm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXJpdHkuZXh0cmEgPT09IE5vTGltaXRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dHJhTm9kZSA9IGluamVjdE5vZGUobWFjaGluZSwgbWFrZU5vZGUoKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hcml0eS5wcm94eSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJPcHRpb25zKG1hY2hpbmUsIGV4dHJhTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyRHluYW1pYyhtYWNoaW5lLCBsYXN0TGVhZGluZ05vZGUsIHBvc2l0aW9uYWxBcmd1bWVudCwgZXh0cmFOb2RlLCBgcHVzaEV4dHJhTm9MaW1pdHNgKTtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJEeW5hbWljKG1hY2hpbmUsIGV4dHJhTm9kZSwgcG9zaXRpb25hbEFyZ3VtZW50LCBleHRyYU5vZGUsIGBwdXNoRXh0cmFOb0xpbWl0c2ApO1xuICAgICAgICAgICAgICAgICAgICByZWdpc3RlclNob3J0Y3V0KG1hY2hpbmUsIGV4dHJhTm9kZSwgZXh0cmFTaG9ydGN1dE5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0aGlzLmFyaXR5LmV4dHJhLmxlbmd0aDsgKyt0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0RXh0cmFOb2RlID0gaW5qZWN0Tm9kZShtYWNoaW5lLCBtYWtlTm9kZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hcml0eS5wcm94eSB8fCB0ID4gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyT3B0aW9ucyhtYWNoaW5lLCBuZXh0RXh0cmFOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyRHluYW1pYyhtYWNoaW5lLCBsYXN0RXh0cmFOb2RlLCBwb3NpdGlvbmFsQXJndW1lbnQsIG5leHRFeHRyYU5vZGUsIGBwdXNoRXh0cmFgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU2hvcnRjdXQobWFjaGluZSwgbmV4dEV4dHJhTm9kZSwgZXh0cmFTaG9ydGN1dE5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEV4dHJhTm9kZSA9IG5leHRFeHRyYU5vZGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGFzdEV4dHJhTm9kZSA9IGV4dHJhU2hvcnRjdXROb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuYXJpdHkudHJhaWxpbmcubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICByZWdpc3RlclN0YXRpYyhtYWNoaW5lLCBsYXN0RXh0cmFOb2RlLCBFTkRfT0ZfSU5QVVQsIE5PREVfRVJST1JFRCwgW2BzZXRFcnJvcmAsIGBOb3QgZW5vdWdoIHBvc2l0aW9uYWwgYXJndW1lbnRzYF0pO1xuICAgICAgICAgICAgbGV0IGxhc3RUcmFpbGluZ05vZGUgPSBsYXN0RXh0cmFOb2RlO1xuICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0aGlzLmFyaXR5LnRyYWlsaW5nLmxlbmd0aDsgKyt0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFRyYWlsaW5nTm9kZSA9IGluamVjdE5vZGUobWFjaGluZSwgbWFrZU5vZGUoKSk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFyaXR5LnByb3h5KVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyT3B0aW9ucyhtYWNoaW5lLCBuZXh0VHJhaWxpbmdOb2RlKTtcbiAgICAgICAgICAgICAgICBpZiAodCArIDEgPCB0aGlzLmFyaXR5LnRyYWlsaW5nLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJTdGF0aWMobWFjaGluZSwgbmV4dFRyYWlsaW5nTm9kZSwgRU5EX09GX0lOUFVULCBOT0RFX0VSUk9SRUQsIFtgc2V0RXJyb3JgLCBgTm90IGVub3VnaCBwb3NpdGlvbmFsIGFyZ3VtZW50c2BdKTtcbiAgICAgICAgICAgICAgICByZWdpc3RlckR5bmFtaWMobWFjaGluZSwgbGFzdFRyYWlsaW5nTm9kZSwgYGlzTm90T3B0aW9uTGlrZWAsIG5leHRUcmFpbGluZ05vZGUsIGBwdXNoUG9zaXRpb25hbGApO1xuICAgICAgICAgICAgICAgIGxhc3RUcmFpbGluZ05vZGUgPSBuZXh0VHJhaWxpbmdOb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVnaXN0ZXJEeW5hbWljKG1hY2hpbmUsIGxhc3RUcmFpbGluZ05vZGUsIHBvc2l0aW9uYWxBcmd1bWVudCwgTk9ERV9FUlJPUkVELCBbYHNldEVycm9yYCwgYEV4dHJhbmVvdXMgcG9zaXRpb25hbCBhcmd1bWVudGBdKTtcbiAgICAgICAgICAgIHJlZ2lzdGVyU3RhdGljKG1hY2hpbmUsIGxhc3RUcmFpbGluZ05vZGUsIEVORF9PRl9JTlBVVCwgTk9ERV9TVUNDRVNTLCBbYHNldFNlbGVjdGVkSW5kZXhgLCB0aGlzLmNsaUluZGV4XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1hY2hpbmUsXG4gICAgICAgICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJlZ2lzdGVyT3B0aW9ucyhtYWNoaW5lLCBub2RlKSB7XG4gICAgICAgIHJlZ2lzdGVyRHluYW1pYyhtYWNoaW5lLCBub2RlLCBbYGlzT3B0aW9uYCwgYC0tYF0sIG5vZGUsIGBpbmhpYmF0ZU9wdGlvbnNgKTtcbiAgICAgICAgcmVnaXN0ZXJEeW5hbWljKG1hY2hpbmUsIG5vZGUsIFtgaXNCYXRjaE9wdGlvbmAsIHRoaXMuYWxsT3B0aW9uTmFtZXNdLCBub2RlLCBgcHVzaEJhdGNoYCk7XG4gICAgICAgIHJlZ2lzdGVyRHluYW1pYyhtYWNoaW5lLCBub2RlLCBbYGlzQm91bmRPcHRpb25gLCB0aGlzLmFsbE9wdGlvbk5hbWVzLCB0aGlzLm9wdGlvbnNdLCBub2RlLCBgcHVzaEJvdW5kYCk7XG4gICAgICAgIHJlZ2lzdGVyRHluYW1pYyhtYWNoaW5lLCBub2RlLCBbYGlzVW5zdXBwb3J0ZWRPcHRpb25gLCB0aGlzLmFsbE9wdGlvbk5hbWVzXSwgTk9ERV9FUlJPUkVELCBbYHNldEVycm9yYCwgYFVuc3VwcG9ydGVkIG9wdGlvbiBuYW1lYF0pO1xuICAgICAgICByZWdpc3RlckR5bmFtaWMobWFjaGluZSwgbm9kZSwgW2Bpc0ludmFsaWRPcHRpb25gXSwgTk9ERV9FUlJPUkVELCBbYHNldEVycm9yYCwgYEludmFsaWQgb3B0aW9uIG5hbWVgXSk7XG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHRoaXMub3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgbG9uZ2VzdE5hbWUgPSBvcHRpb24ubmFtZXMucmVkdWNlKChsb25nZXN0TmFtZSwgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lLmxlbmd0aCA+IGxvbmdlc3ROYW1lLmxlbmd0aCA/IG5hbWUgOiBsb25nZXN0TmFtZTtcbiAgICAgICAgICAgIH0sIGBgKTtcbiAgICAgICAgICAgIGlmIChvcHRpb24uYXJpdHkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2Ygb3B0aW9uLm5hbWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyRHluYW1pYyhtYWNoaW5lLCBub2RlLCBbYGlzT3B0aW9uYCwgbmFtZSwgb3B0aW9uLmhpZGRlbiB8fCBuYW1lICE9PSBsb25nZXN0TmFtZV0sIG5vZGUsIGBwdXNoVHJ1ZWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRoKGAtLWApICYmICFuYW1lLnN0YXJ0c1dpdGgoYC0tbm8tYCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyRHluYW1pYyhtYWNoaW5lLCBub2RlLCBbYGlzTmVnYXRlZE9wdGlvbmAsIG5hbWVdLCBub2RlLCBbYHB1c2hGYWxzZWAsIG5hbWVdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFdlIGluamVjdCBhIG5ldyBub2RlIGF0IHRoZSBlbmQgb2YgdGhlIHN0YXRlIG1hY2hpbmVcbiAgICAgICAgICAgICAgICBsZXQgbGFzdE5vZGUgPSBpbmplY3ROb2RlKG1hY2hpbmUsIG1ha2VOb2RlKCkpO1xuICAgICAgICAgICAgICAgIC8vIFdlIHJlZ2lzdGVyIHRyYW5zaXRpb25zIGZyb20gdGhlIHN0YXJ0aW5nIG5vZGUgdG8gdGhpcyBuZXcgbm9kZVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBvcHRpb24ubmFtZXMpXG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyRHluYW1pYyhtYWNoaW5lLCBub2RlLCBbYGlzT3B0aW9uYCwgbmFtZSwgb3B0aW9uLmhpZGRlbiB8fCBuYW1lICE9PSBsb25nZXN0TmFtZV0sIGxhc3ROb2RlLCBgcHVzaFVuZGVmaW5lZGApO1xuICAgICAgICAgICAgICAgIC8vIEZvciBlYWNoIGFyZ3VtZW50LCB3ZSBpbmplY3QgYSBuZXcgbm9kZSBhdCB0aGUgZW5kIGFuZCB3ZVxuICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIGEgdHJhbnNpdGlvbiBmcm9tIHRoZSBjdXJyZW50IG5vZGUgdG8gdGhpcyBuZXcgbm9kZVxuICAgICAgICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgb3B0aW9uLmFyaXR5OyArK3QpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dE5vZGUgPSBpbmplY3ROb2RlKG1hY2hpbmUsIG1ha2VOb2RlKCkpO1xuICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4gcHJvdmlkZSBiZXR0ZXIgZXJyb3JzIHdoZW4gYW5vdGhlciBvcHRpb24gb3IgRU5EX09GX0lOUFVUIGlzIGVuY291bnRlcmVkXG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU3RhdGljKG1hY2hpbmUsIGxhc3ROb2RlLCBFTkRfT0ZfSU5QVVQsIE5PREVfRVJST1JFRCwgYHNldE9wdGlvbkFyaXR5RXJyb3JgKTtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJEeW5hbWljKG1hY2hpbmUsIGxhc3ROb2RlLCBgaXNPcHRpb25MaWtlYCwgTk9ERV9FUlJPUkVELCBgc2V0T3B0aW9uQXJpdHlFcnJvcmApO1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgb3B0aW9uIGhhcyBhIHNpbmdsZSBhcmd1bWVudCwgbm8gbmVlZCB0byBzdG9yZSBpdCBpbiBhbiBhcnJheVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBvcHRpb24uYXJpdHkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYHNldFN0cmluZ1ZhbHVlYFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBgcHVzaFN0cmluZ1ZhbHVlYDtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJEeW5hbWljKG1hY2hpbmUsIGxhc3ROb2RlLCBgaXNOb3RPcHRpb25MaWtlYCwgbmV4dE5vZGUsIGFjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGxhc3ROb2RlID0gbmV4dE5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEluIHRoZSBlbmQsIHdlIHJlZ2lzdGVyIGEgc2hvcnRjdXQgZnJvbVxuICAgICAgICAgICAgICAgIC8vIHRoZSBsYXN0IG5vZGUgYmFjayB0byB0aGUgc3RhcnRpbmcgbm9kZVxuICAgICAgICAgICAgICAgIHJlZ2lzdGVyU2hvcnRjdXQobWFjaGluZSwgbGFzdE5vZGUsIG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuY2xhc3MgQ2xpQnVpbGRlciB7XG4gICAgY29uc3RydWN0b3IoeyBiaW5hcnlOYW1lID0gYC4uLmAgfSA9IHt9KSB7XG4gICAgICAgIHRoaXMuYnVpbGRlcnMgPSBbXTtcbiAgICAgICAgdGhpcy5vcHRzID0geyBiaW5hcnlOYW1lIH07XG4gICAgfVxuICAgIHN0YXRpYyBidWlsZChjYnMsIG9wdHMgPSB7fSkge1xuICAgICAgICByZXR1cm4gbmV3IENsaUJ1aWxkZXIob3B0cykuY29tbWFuZHMoY2JzKS5jb21waWxlKCk7XG4gICAgfVxuICAgIGdldEJ1aWxkZXJCeUluZGV4KG4pIHtcbiAgICAgICAgaWYgKCEobiA+PSAwICYmIG4gPCB0aGlzLmJ1aWxkZXJzLmxlbmd0aCkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFzc2VydGlvbiBmYWlsZWQ6IE91dC1vZi1ib3VuZCBjb21tYW5kIGluZGV4ICgke259KWApO1xuICAgICAgICByZXR1cm4gdGhpcy5idWlsZGVyc1tuXTtcbiAgICB9XG4gICAgY29tbWFuZHMoY2JzKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2Igb2YgY2JzKVxuICAgICAgICAgICAgY2IodGhpcy5jb21tYW5kKCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY29tbWFuZCgpIHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBDb21tYW5kQnVpbGRlcih0aGlzLmJ1aWxkZXJzLmxlbmd0aCwgdGhpcy5vcHRzKTtcbiAgICAgICAgdGhpcy5idWlsZGVycy5wdXNoKGJ1aWxkZXIpO1xuICAgICAgICByZXR1cm4gYnVpbGRlcjtcbiAgICB9XG4gICAgY29tcGlsZSgpIHtcbiAgICAgICAgY29uc3QgbWFjaGluZXMgPSBbXTtcbiAgICAgICAgY29uc3QgY29udGV4dHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBidWlsZGVyIG9mIHRoaXMuYnVpbGRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbWFjaGluZSwgY29udGV4dCB9ID0gYnVpbGRlci5jb21waWxlKCk7XG4gICAgICAgICAgICBtYWNoaW5lcy5wdXNoKG1hY2hpbmUpO1xuICAgICAgICAgICAgY29udGV4dHMucHVzaChjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYWNoaW5lID0gbWFrZUFueU9mTWFjaGluZShtYWNoaW5lcyk7XG4gICAgICAgIHNpbXBsaWZ5TWFjaGluZShtYWNoaW5lKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1hY2hpbmUsXG4gICAgICAgICAgICBjb250ZXh0cyxcbiAgICAgICAgICAgIHByb2Nlc3M6IChpbnB1dCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5NYWNoaW5lKG1hY2hpbmUsIGlucHV0KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdWdnZXN0OiAoaW5wdXQsIHBhcnRpYWwpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VnZ2VzdE1hY2hpbmUobWFjaGluZSwgaW5wdXQsIHBhcnRpYWwpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IENsaUJ1aWxkZXIsIENvbW1hbmRCdWlsZGVyLCBOb0xpbWl0cywgYWdncmVnYXRlSGVscFN0YXRlcywgY2xvbmVOb2RlLCBjbG9uZVRyYW5zaXRpb24sIGRlYnVnLCBkZWJ1Z01hY2hpbmUsIGV4ZWN1dGUsIGluamVjdE5vZGUsIGlzVGVybWluYWxOb2RlLCBtYWtlQW55T2ZNYWNoaW5lLCBtYWtlTm9kZSwgbWFrZVN0YXRlTWFjaGluZSwgcmVkdWNlcnMsIHJlZ2lzdGVyRHluYW1pYywgcmVnaXN0ZXJTaG9ydGN1dCwgcmVnaXN0ZXJTdGF0aWMsIHJ1bk1hY2hpbmVJbnRlcm5hbCwgc2VsZWN0QmVzdFN0YXRlLCBzaW1wbGlmeU1hY2hpbmUsIHN1Z2dlc3QsIHRlc3RzLCB0cmltU21hbGxlckJyYW5jaGVzIH07XG4iLCJpbXBvcnQgdHR5IGZyb20gJ3R0eSc7XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRDb2xvckRlcHRoKCkge1xuICAgIGlmICh0dHkgJiYgYGdldENvbG9yRGVwdGhgIGluIHR0eS5Xcml0ZVN0cmVhbS5wcm90b3R5cGUpXG4gICAgICAgIHJldHVybiB0dHkuV3JpdGVTdHJlYW0ucHJvdG90eXBlLmdldENvbG9yRGVwdGgoKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuRk9SQ0VfQ09MT1IgPT09IGAwYClcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgaWYgKHByb2Nlc3MuZW52LkZPUkNFX0NPTE9SID09PSBgMWApXG4gICAgICAgIHJldHVybiA4O1xuICAgIGlmICh0eXBlb2YgcHJvY2Vzcy5zdGRvdXQgIT09IGB1bmRlZmluZWRgICYmIHByb2Nlc3Muc3Rkb3V0LmlzVFRZKVxuICAgICAgICByZXR1cm4gODtcbiAgICByZXR1cm4gMTtcbn1cbmxldCBnQ29udGV4dFN0b3JhZ2U7XG5mdW5jdGlvbiBnZXRDYXB0dXJlQWN0aXZhdG9yKGNvbnRleHQpIHtcbiAgICBsZXQgY29udGV4dFN0b3JhZ2UgPSBnQ29udGV4dFN0b3JhZ2U7XG4gICAgaWYgKHR5cGVvZiBjb250ZXh0U3RvcmFnZSA9PT0gYHVuZGVmaW5lZGApIHtcbiAgICAgICAgaWYgKGNvbnRleHQuc3Rkb3V0ID09PSBwcm9jZXNzLnN0ZG91dCAmJiBjb250ZXh0LnN0ZGVyciA9PT0gcHJvY2Vzcy5zdGRlcnIpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgeyBBc3luY0xvY2FsU3RvcmFnZTogTGF6eUFzeW5jTG9jYWxTdG9yYWdlIH0gPSByZXF1aXJlKGBhc3luY19ob29rc2ApO1xuICAgICAgICBjb250ZXh0U3RvcmFnZSA9IGdDb250ZXh0U3RvcmFnZSA9IG5ldyBMYXp5QXN5bmNMb2NhbFN0b3JhZ2UoKTtcbiAgICAgICAgY29uc3Qgb3JpZ1N0ZG91dFdyaXRlID0gcHJvY2Vzcy5zdGRvdXQuX3dyaXRlO1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IGNvbnRleHRTdG9yYWdlLmdldFN0b3JlKCk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRleHQgPT09IGB1bmRlZmluZWRgKVxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnU3Rkb3V0V3JpdGUuY2FsbCh0aGlzLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnN0ZG91dC53cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb3JpZ1N0ZGVycldyaXRlID0gcHJvY2Vzcy5zdGRlcnIuX3dyaXRlO1xuICAgICAgICBwcm9jZXNzLnN0ZGVyci5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IGNvbnRleHRTdG9yYWdlLmdldFN0b3JlKCk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRleHQgPT09IGB1bmRlZmluZWRgKVxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnU3RkZXJyV3JpdGUuY2FsbCh0aGlzLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnN0ZGVyci53cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIChmbikgPT4ge1xuICAgICAgICByZXR1cm4gY29udGV4dFN0b3JhZ2UucnVuKGNvbnRleHQsIGZuKTtcbiAgICB9O1xufVxuXG5leHBvcnQgeyBnZXRDYXB0dXJlQWN0aXZhdG9yLCBnZXREZWZhdWx0Q29sb3JEZXB0aCB9O1xuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJy4vQ29tbWFuZC5tanMnO1xuXG5jbGFzcyBIZWxwQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIGNvbnN0cnVjdG9yKGNvbnRleHRzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY29udGV4dHMgPSBjb250ZXh0cztcbiAgICAgICAgdGhpcy5jb21tYW5kcyA9IFtdO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbShzdGF0ZSwgY29udGV4dHMpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZCA9IG5ldyBIZWxwQ29tbWFuZChjb250ZXh0cyk7XG4gICAgICAgIGNvbW1hbmQucGF0aCA9IHN0YXRlLnBhdGg7XG4gICAgICAgIGZvciAoY29uc3Qgb3B0IG9mIHN0YXRlLm9wdGlvbnMpIHtcbiAgICAgICAgICAgIHN3aXRjaCAob3B0Lm5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIGAtY2A6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQuY29tbWFuZHMucHVzaChOdW1iZXIob3B0LnZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBgLWlgOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLmluZGV4ID0gTnVtYmVyKG9wdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbW1hbmQ7XG4gICAgfVxuICAgIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgICAgIGxldCBjb21tYW5kcyA9IHRoaXMuY29tbWFuZHM7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbmRleCAhPT0gYHVuZGVmaW5lZGAgJiYgdGhpcy5pbmRleCA+PSAwICYmIHRoaXMuaW5kZXggPCBjb21tYW5kcy5sZW5ndGgpXG4gICAgICAgICAgICBjb21tYW5kcyA9IFtjb21tYW5kc1t0aGlzLmluZGV4XV07XG4gICAgICAgIGlmIChjb21tYW5kcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdGRvdXQud3JpdGUodGhpcy5jbGkudXNhZ2UoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29tbWFuZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc3Rkb3V0LndyaXRlKHRoaXMuY2xpLnVzYWdlKHRoaXMuY29udGV4dHNbY29tbWFuZHNbMF1dLmNvbW1hbmRDbGFzcywgeyBkZXRhaWxlZDogdHJ1ZSB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29tbWFuZHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN0ZG91dC53cml0ZShgTXVsdGlwbGUgY29tbWFuZHMgbWF0Y2ggeW91ciBzZWxlY3Rpb246XFxuYCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc3Rkb3V0LndyaXRlKGBcXG5gKTtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbW1hbmQgb2YgdGhpcy5jb21tYW5kcylcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuc3Rkb3V0LndyaXRlKHRoaXMuY2xpLnVzYWdlKHRoaXMuY29udGV4dHNbY29tbWFuZF0uY29tbWFuZENsYXNzLCB7IHByZWZpeDogYCR7aW5kZXgrK30uIGAucGFkU3RhcnQoNSkgfSkpO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN0ZG91dC53cml0ZShgXFxuYCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc3Rkb3V0LndyaXRlKGBSdW4gYWdhaW4gd2l0aCAtaD08aW5kZXg+IHRvIHNlZSB0aGUgbG9uZ2VyIGRldGFpbHMgb2YgYW55IG9mIHRob3NlIGNvbW1hbmRzLlxcbmApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgeyBIZWxwQ29tbWFuZCB9O1xuIiwiaW1wb3J0IHsgSEVMUF9DT01NQU5EX0lOREVYIH0gZnJvbSAnLi4vY29uc3RhbnRzLm1qcyc7XG5pbXBvcnQgeyBDbGlCdWlsZGVyIH0gZnJvbSAnLi4vY29yZS5tanMnO1xuaW1wb3J0IHsgZm9ybWF0TWFya2Rvd25pc2gsIHJpY2hGb3JtYXQsIHRleHRGb3JtYXQgfSBmcm9tICcuLi9mb3JtYXQubWpzJztcbmltcG9ydCB7IGdldENhcHR1cmVBY3RpdmF0b3IsIGdldERlZmF1bHRDb2xvckRlcHRoIH0gZnJvbSAnLi4vcGxhdGZvcm0nO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJy4vQ29tbWFuZC5tanMnO1xuaW1wb3J0IHsgSGVscENvbW1hbmQgfSBmcm9tICcuL0hlbHBDb21tYW5kLm1qcyc7XG5cbmNvbnN0IGVycm9yQ29tbWFuZFN5bWJvbCA9IFN5bWJvbChgY2xpcGFuaW9uL2Vycm9yQ29tbWFuZGApO1xuYXN5bmMgZnVuY3Rpb24gcnVuRXhpdCguLi5hcmdzKSB7XG4gICAgY29uc3QgeyByZXNvbHZlZE9wdGlvbnMsIHJlc29sdmVkQ29tbWFuZENsYXNzZXMsIHJlc29sdmVkQXJndiwgcmVzb2x2ZWRDb250ZXh0LCB9ID0gcmVzb2x2ZVJ1blBhcmFtZXRlcnMoYXJncyk7XG4gICAgY29uc3QgY2xpID0gQ2xpLmZyb20ocmVzb2x2ZWRDb21tYW5kQ2xhc3NlcywgcmVzb2x2ZWRPcHRpb25zKTtcbiAgICByZXR1cm4gY2xpLnJ1bkV4aXQocmVzb2x2ZWRBcmd2LCByZXNvbHZlZENvbnRleHQpO1xufVxuYXN5bmMgZnVuY3Rpb24gcnVuKC4uLmFyZ3MpIHtcbiAgICBjb25zdCB7IHJlc29sdmVkT3B0aW9ucywgcmVzb2x2ZWRDb21tYW5kQ2xhc3NlcywgcmVzb2x2ZWRBcmd2LCByZXNvbHZlZENvbnRleHQsIH0gPSByZXNvbHZlUnVuUGFyYW1ldGVycyhhcmdzKTtcbiAgICBjb25zdCBjbGkgPSBDbGkuZnJvbShyZXNvbHZlZENvbW1hbmRDbGFzc2VzLCByZXNvbHZlZE9wdGlvbnMpO1xuICAgIHJldHVybiBjbGkucnVuKHJlc29sdmVkQXJndiwgcmVzb2x2ZWRDb250ZXh0KTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVSdW5QYXJhbWV0ZXJzKGFyZ3MpIHtcbiAgICBsZXQgcmVzb2x2ZWRPcHRpb25zO1xuICAgIGxldCByZXNvbHZlZENvbW1hbmRDbGFzc2VzO1xuICAgIGxldCByZXNvbHZlZEFyZ3Y7XG4gICAgbGV0IHJlc29sdmVkQ29udGV4dDtcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09IGB1bmRlZmluZWRgICYmIHR5cGVvZiBwcm9jZXNzLmFyZ3YgIT09IGB1bmRlZmluZWRgKVxuICAgICAgICByZXNvbHZlZEFyZ3YgPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRDb21tYW5kQ2xhc3NlcyA9IGFyZ3NbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzWzBdICYmIChhcmdzWzBdLnByb3RvdHlwZSBpbnN0YW5jZW9mIENvbW1hbmQpIHx8IEFycmF5LmlzQXJyYXkoYXJnc1swXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRDb21tYW5kQ2xhc3NlcyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3NbMV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZEFyZ3YgPSBhcmdzWzFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRDb250ZXh0ID0gYXJnc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRPcHRpb25zID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRDb21tYW5kQ2xhc3NlcyA9IGFyZ3NbMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmdzWzJdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZE9wdGlvbnMgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZENvbW1hbmRDbGFzc2VzID0gYXJnc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRBcmd2ID0gYXJnc1syXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJnc1swXSAmJiAoYXJnc1swXS5wcm90b3R5cGUgaW5zdGFuY2VvZiBDb21tYW5kKSB8fCBBcnJheS5pc0FycmF5KGFyZ3NbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVkQ29tbWFuZENsYXNzZXMgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZEFyZ3YgPSBhcmdzWzFdO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZENvbnRleHQgPSBhcmdzWzJdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRPcHRpb25zID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRDb21tYW5kQ2xhc3NlcyA9IGFyZ3NbMV07XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVkQ29udGV4dCA9IGFyZ3NbMl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRPcHRpb25zID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICByZXNvbHZlZENvbW1hbmRDbGFzc2VzID0gYXJnc1sxXTtcbiAgICAgICAgICAgICAgICByZXNvbHZlZEFyZ3YgPSBhcmdzWzJdO1xuICAgICAgICAgICAgICAgIHJlc29sdmVkQ29udGV4dCA9IGFyZ3NbM107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXNvbHZlZEFyZ3YgPT09IGB1bmRlZmluZWRgKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBhcmd2IHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gcnVubmluZyBDbGlwYW5pb24gb3V0c2lkZSBvZiBhIE5vZGUgY29udGV4dGApO1xuICAgIHJldHVybiB7XG4gICAgICAgIHJlc29sdmVkT3B0aW9ucyxcbiAgICAgICAgcmVzb2x2ZWRDb21tYW5kQ2xhc3NlcyxcbiAgICAgICAgcmVzb2x2ZWRBcmd2LFxuICAgICAgICByZXNvbHZlZENvbnRleHQsXG4gICAgfTtcbn1cbi8qKlxuICogQHRlbXBsYXRlIENvbnRleHQgVGhlIGNvbnRleHQgc2hhcmVkIGJ5IGFsbCBjb21tYW5kcy4gQ29udGV4dHMgYXJlIGEgc2V0IG9mIHZhbHVlcywgZGVmaW5lZCB3aGVuIGNhbGxpbmcgdGhlIGBydW5gL2BydW5FeGl0YCBmdW5jdGlvbnMgZnJvbSB0aGUgQ0xJIGluc3RhbmNlLCB0aGF0IHdpbGwgYmUgbWFkZSBhdmFpbGFibGUgdG8gdGhlIGNvbW1hbmRzIHZpYSBgdGhpcy5jb250ZXh0YC5cbiAqL1xuY2xhc3MgQ2xpIHtcbiAgICBjb25zdHJ1Y3Rvcih7IGJpbmFyeUxhYmVsLCBiaW5hcnlOYW1lOiBiaW5hcnlOYW1lT3B0ID0gYC4uLmAsIGJpbmFyeVZlcnNpb24sIGVuYWJsZUNhcHR1cmUgPSBmYWxzZSwgZW5hYmxlQ29sb3JzIH0gPSB7fSkge1xuICAgICAgICB0aGlzLnJlZ2lzdHJhdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuYnVpbGRlciA9IG5ldyBDbGlCdWlsZGVyKHsgYmluYXJ5TmFtZTogYmluYXJ5TmFtZU9wdCB9KTtcbiAgICAgICAgdGhpcy5iaW5hcnlMYWJlbCA9IGJpbmFyeUxhYmVsO1xuICAgICAgICB0aGlzLmJpbmFyeU5hbWUgPSBiaW5hcnlOYW1lT3B0O1xuICAgICAgICB0aGlzLmJpbmFyeVZlcnNpb24gPSBiaW5hcnlWZXJzaW9uO1xuICAgICAgICB0aGlzLmVuYWJsZUNhcHR1cmUgPSBlbmFibGVDYXB0dXJlO1xuICAgICAgICB0aGlzLmVuYWJsZUNvbG9ycyA9IGVuYWJsZUNvbG9ycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBDbGkgYW5kIHJlZ2lzdGVycyBhbGwgY29tbWFuZHMgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29tbWFuZENsYXNzZXMgVGhlIENvbW1hbmRzIHRvIHJlZ2lzdGVyXG4gICAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgYENsaWAgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbShjb21tYW5kQ2xhc3Nlcywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGNsaSA9IG5ldyBDbGkob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkQ29tbWFuZENsYXNzZXMgPSBBcnJheS5pc0FycmF5KGNvbW1hbmRDbGFzc2VzKVxuICAgICAgICAgICAgPyBjb21tYW5kQ2xhc3Nlc1xuICAgICAgICAgICAgOiBbY29tbWFuZENsYXNzZXNdO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbW1hbmRDbGFzcyBvZiByZXNvbHZlZENvbW1hbmRDbGFzc2VzKVxuICAgICAgICAgICAgY2xpLnJlZ2lzdGVyKGNvbW1hbmRDbGFzcyk7XG4gICAgICAgIHJldHVybiBjbGk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVycyBhIGNvbW1hbmQgaW5zaWRlIHRoZSBDTEkuXG4gICAgICovXG4gICAgcmVnaXN0ZXIoY29tbWFuZENsYXNzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3Qgc3BlY3MgPSBuZXcgTWFwKCk7XG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgY29tbWFuZENsYXNzKCk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbW1hbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29tbWFuZFtrZXldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gYG9iamVjdGAgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWVbQ29tbWFuZC5pc09wdGlvbl0pIHtcbiAgICAgICAgICAgICAgICBzcGVjcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVpbGRlciA9IHRoaXMuYnVpbGRlci5jb21tYW5kKCk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gYnVpbGRlci5jbGlJbmRleDtcbiAgICAgICAgY29uc3QgcGF0aHMgPSAoX2EgPSBjb21tYW5kQ2xhc3MucGF0aHMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGNvbW1hbmQucGF0aHM7XG4gICAgICAgIGlmICh0eXBlb2YgcGF0aHMgIT09IGB1bmRlZmluZWRgKVxuICAgICAgICAgICAgZm9yIChjb25zdCBwYXRoIG9mIHBhdGhzKVxuICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkUGF0aChwYXRoKTtcbiAgICAgICAgdGhpcy5yZWdpc3RyYXRpb25zLnNldChjb21tYW5kQ2xhc3MsIHsgc3BlY3MsIGJ1aWxkZXIsIGluZGV4IH0pO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHsgZGVmaW5pdGlvbiB9XSBvZiBzcGVjcy5lbnRyaWVzKCkpXG4gICAgICAgICAgICBkZWZpbml0aW9uKGJ1aWxkZXIsIGtleSk7XG4gICAgICAgIGJ1aWxkZXIuc2V0Q29udGV4dCh7XG4gICAgICAgICAgICBjb21tYW5kQ2xhc3MsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcm9jZXNzKGlucHV0LCB1c2VyQ29udGV4dCkge1xuICAgICAgICBjb25zdCB7IGNvbnRleHRzLCBwcm9jZXNzIH0gPSB0aGlzLmJ1aWxkZXIuY29tcGlsZSgpO1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHByb2Nlc3MoaW5wdXQpO1xuICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgLi4uQ2xpLmRlZmF1bHRDb250ZXh0LFxuICAgICAgICAgICAgLi4udXNlckNvbnRleHQsXG4gICAgICAgIH07XG4gICAgICAgIHN3aXRjaCAoc3RhdGUuc2VsZWN0ZWRJbmRleCkge1xuICAgICAgICAgICAgY2FzZSBIRUxQX0NPTU1BTkRfSU5ERVg6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kID0gSGVscENvbW1hbmQuZnJvbShzdGF0ZSwgY29udGV4dHMpO1xuICAgICAgICAgICAgICAgICAgICBjb21tYW5kLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBjb21tYW5kQ2xhc3MgfSA9IGNvbnRleHRzW3N0YXRlLnNlbGVjdGVkSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNvcmQgPSB0aGlzLnJlZ2lzdHJhdGlvbnMuZ2V0KGNvbW1hbmRDbGFzcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVjb3JkID09PSBgdW5kZWZpbmVkYClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQXNzZXJ0aW9uIGZhaWxlZDogRXhwZWN0ZWQgdGhlIGNvbW1hbmQgY2xhc3MgdG8gaGF2ZSBiZWVuIHJlZ2lzdGVyZWQuYCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgY29tbWFuZENsYXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQucGF0aCA9IHN0YXRlLnBhdGg7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHsgdHJhbnNmb3JtZXIgfV0gb2YgcmVjb3JkLnNwZWNzLmVudHJpZXMoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kW2tleV0gPSB0cmFuc2Zvcm1lcihyZWNvcmQuYnVpbGRlciwga2V5LCBzdGF0ZSwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yW2Vycm9yQ29tbWFuZFN5bWJvbF0gPSBjb21tYW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgcnVuKGlucHV0LCB1c2VyQ29udGV4dCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBsZXQgY29tbWFuZDtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgIC4uLkNsaS5kZWZhdWx0Q29udGV4dCxcbiAgICAgICAgICAgIC4uLnVzZXJDb250ZXh0LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjb2xvcmVkID0gKF9hID0gdGhpcy5lbmFibGVDb2xvcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGNvbnRleHQuY29sb3JEZXB0aCA+IDE7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBpbnB1dDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29tbWFuZCA9IHRoaXMucHJvY2VzcyhpbnB1dCwgY29udGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0ZG91dC53cml0ZSh0aGlzLmVycm9yKGVycm9yLCB7IGNvbG9yZWQgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb21tYW5kLmhlbHApIHtcbiAgICAgICAgICAgIGNvbnRleHQuc3Rkb3V0LndyaXRlKHRoaXMudXNhZ2UoY29tbWFuZCwgeyBjb2xvcmVkLCBkZXRhaWxlZDogdHJ1ZSB9KSk7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBjb21tYW5kLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICBjb21tYW5kLmNsaSA9IHtcbiAgICAgICAgICAgIGJpbmFyeUxhYmVsOiB0aGlzLmJpbmFyeUxhYmVsLFxuICAgICAgICAgICAgYmluYXJ5TmFtZTogdGhpcy5iaW5hcnlOYW1lLFxuICAgICAgICAgICAgYmluYXJ5VmVyc2lvbjogdGhpcy5iaW5hcnlWZXJzaW9uLFxuICAgICAgICAgICAgZW5hYmxlQ2FwdHVyZTogdGhpcy5lbmFibGVDYXB0dXJlLFxuICAgICAgICAgICAgZW5hYmxlQ29sb3JzOiB0aGlzLmVuYWJsZUNvbG9ycyxcbiAgICAgICAgICAgIGRlZmluaXRpb25zOiAoKSA9PiB0aGlzLmRlZmluaXRpb25zKCksXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yLCBvcHRzKSA9PiB0aGlzLmVycm9yKGVycm9yLCBvcHRzKSxcbiAgICAgICAgICAgIGZvcm1hdDogY29sb3JlZCA9PiB0aGlzLmZvcm1hdChjb2xvcmVkKSxcbiAgICAgICAgICAgIHByb2Nlc3M6IChpbnB1dCwgc3ViQ29udGV4dCkgPT4gdGhpcy5wcm9jZXNzKGlucHV0LCB7IC4uLmNvbnRleHQsIC4uLnN1YkNvbnRleHQgfSksXG4gICAgICAgICAgICBydW46IChpbnB1dCwgc3ViQ29udGV4dCkgPT4gdGhpcy5ydW4oaW5wdXQsIHsgLi4uY29udGV4dCwgLi4uc3ViQ29udGV4dCB9KSxcbiAgICAgICAgICAgIHVzYWdlOiAoY29tbWFuZCwgb3B0cykgPT4gdGhpcy51c2FnZShjb21tYW5kLCBvcHRzKSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWN0aXZhdGUgPSB0aGlzLmVuYWJsZUNhcHR1cmVcbiAgICAgICAgICAgID8gKF9iID0gZ2V0Q2FwdHVyZUFjdGl2YXRvcihjb250ZXh0KSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogbm9vcENhcHR1cmVBY3RpdmF0b3JcbiAgICAgICAgICAgIDogbm9vcENhcHR1cmVBY3RpdmF0b3I7XG4gICAgICAgIGxldCBleGl0Q29kZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGV4aXRDb2RlID0gYXdhaXQgYWN0aXZhdGUoKCkgPT4gY29tbWFuZC52YWxpZGF0ZUFuZEV4ZWN1dGUoKS5jYXRjaChlcnJvciA9PiBjb21tYW5kLmNhdGNoKGVycm9yKS50aGVuKCgpID0+IDApKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb250ZXh0LnN0ZG91dC53cml0ZSh0aGlzLmVycm9yKGVycm9yLCB7IGNvbG9yZWQsIGNvbW1hbmQgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV4aXRDb2RlO1xuICAgIH1cbiAgICBhc3luYyBydW5FeGl0KGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSBhd2FpdCB0aGlzLnJ1bihpbnB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIHN1Z2dlc3QoaW5wdXQsIHBhcnRpYWwpIHtcbiAgICAgICAgY29uc3QgeyBzdWdnZXN0IH0gPSB0aGlzLmJ1aWxkZXIuY29tcGlsZSgpO1xuICAgICAgICByZXR1cm4gc3VnZ2VzdChpbnB1dCwgcGFydGlhbCk7XG4gICAgfVxuICAgIGRlZmluaXRpb25zKHsgY29sb3JlZCA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgICBjb25zdCBkYXRhID0gW107XG4gICAgICAgIGZvciAoY29uc3QgW2NvbW1hbmRDbGFzcywgeyBpbmRleCB9XSBvZiB0aGlzLnJlZ2lzdHJhdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29tbWFuZENsYXNzLnVzYWdlID09PSBgdW5kZWZpbmVkYClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IHsgdXNhZ2U6IHBhdGggfSA9IHRoaXMuZ2V0VXNhZ2VCeUluZGV4KGluZGV4LCB7IGRldGFpbGVkOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIGNvbnN0IHsgdXNhZ2UsIG9wdGlvbnMgfSA9IHRoaXMuZ2V0VXNhZ2VCeUluZGV4KGluZGV4LCB7IGRldGFpbGVkOiB0cnVlLCBpbmxpbmVPcHRpb25zOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gdHlwZW9mIGNvbW1hbmRDbGFzcy51c2FnZS5jYXRlZ29yeSAhPT0gYHVuZGVmaW5lZGBcbiAgICAgICAgICAgICAgICA/IGZvcm1hdE1hcmtkb3duaXNoKGNvbW1hbmRDbGFzcy51c2FnZS5jYXRlZ29yeSwgeyBmb3JtYXQ6IHRoaXMuZm9ybWF0KGNvbG9yZWQpLCBwYXJhZ3JhcGhzOiBmYWxzZSB9KVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0eXBlb2YgY29tbWFuZENsYXNzLnVzYWdlLmRlc2NyaXB0aW9uICE9PSBgdW5kZWZpbmVkYFxuICAgICAgICAgICAgICAgID8gZm9ybWF0TWFya2Rvd25pc2goY29tbWFuZENsYXNzLnVzYWdlLmRlc2NyaXB0aW9uLCB7IGZvcm1hdDogdGhpcy5mb3JtYXQoY29sb3JlZCksIHBhcmFncmFwaHM6IGZhbHNlIH0pXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBkZXRhaWxzID0gdHlwZW9mIGNvbW1hbmRDbGFzcy51c2FnZS5kZXRhaWxzICE9PSBgdW5kZWZpbmVkYFxuICAgICAgICAgICAgICAgID8gZm9ybWF0TWFya2Rvd25pc2goY29tbWFuZENsYXNzLnVzYWdlLmRldGFpbHMsIHsgZm9ybWF0OiB0aGlzLmZvcm1hdChjb2xvcmVkKSwgcGFyYWdyYXBoczogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgZXhhbXBsZXMgPSB0eXBlb2YgY29tbWFuZENsYXNzLnVzYWdlLmV4YW1wbGVzICE9PSBgdW5kZWZpbmVkYFxuICAgICAgICAgICAgICAgID8gY29tbWFuZENsYXNzLnVzYWdlLmV4YW1wbGVzLm1hcCgoW2xhYmVsLCBjbGldKSA9PiBbZm9ybWF0TWFya2Rvd25pc2gobGFiZWwsIHsgZm9ybWF0OiB0aGlzLmZvcm1hdChjb2xvcmVkKSwgcGFyYWdyYXBoczogZmFsc2UgfSksIGNsaS5yZXBsYWNlKC9cXCQwL2csIHRoaXMuYmluYXJ5TmFtZSldKVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgZGF0YS5wdXNoKHsgcGF0aCwgdXNhZ2UsIGNhdGVnb3J5LCBkZXNjcmlwdGlvbiwgZGV0YWlscywgZXhhbXBsZXMsIG9wdGlvbnMgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHVzYWdlKGNvbW1hbmQgPSBudWxsLCB7IGNvbG9yZWQsIGRldGFpbGVkID0gZmFsc2UsIHByZWZpeCA9IGAkIGAgfSA9IHt9KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgLy8gSW4gY2FzZSB0aGUgZGVmYXVsdCBjb21tYW5kIGlzIHRoZSBvbmx5IG9uZSwgd2UgY2FuIGp1c3Qgc2hvdyB0aGUgY29tbWFuZCBoZWxwIHJhdGhlciB0aGFuIHRoZSBnZW5lcmFsIG9uZVxuICAgICAgICBpZiAoY29tbWFuZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb21tYW5kQ2xhc3Mgb2YgdGhpcy5yZWdpc3RyYXRpb25zLmtleXMoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhzID0gY29tbWFuZENsYXNzLnBhdGhzO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRG9jdW1lbnRlZCA9IHR5cGVvZiBjb21tYW5kQ2xhc3MudXNhZ2UgIT09IGB1bmRlZmluZWRgO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRXhjbHVzaXZlbHlEZWZhdWx0ID0gIXBhdGhzIHx8IHBhdGhzLmxlbmd0aCA9PT0gMCB8fCAocGF0aHMubGVuZ3RoID09PSAxICYmIHBhdGhzWzBdLmxlbmd0aCA9PT0gMCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNEZWZhdWx0ID0gaXNFeGNsdXNpdmVseURlZmF1bHQgfHwgKChfYSA9IHBhdGhzID09PSBudWxsIHx8IHBhdGhzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXRocy5zb21lKHBhdGggPT4gcGF0aC5sZW5ndGggPT09IDApKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmYXVsdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBjb21tYW5kQ2xhc3M7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0RvY3VtZW50ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgICAgIGRldGFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGNvbnN0IGNvbW1hbmRDbGFzcyA9IGNvbW1hbmQgIT09IG51bGwgJiYgY29tbWFuZCBpbnN0YW5jZW9mIENvbW1hbmRcbiAgICAgICAgICAgID8gY29tbWFuZC5jb25zdHJ1Y3RvclxuICAgICAgICAgICAgOiBjb21tYW5kO1xuICAgICAgICBsZXQgcmVzdWx0ID0gYGA7XG4gICAgICAgIGlmICghY29tbWFuZENsYXNzKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kc0J5Q2F0ZWdvcmllcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2NvbW1hbmRDbGFzcywgeyBpbmRleCB9XSBvZiB0aGlzLnJlZ2lzdHJhdGlvbnMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb21tYW5kQ2xhc3MudXNhZ2UgPT09IGB1bmRlZmluZWRgKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBjYXRlZ29yeSA9IHR5cGVvZiBjb21tYW5kQ2xhc3MudXNhZ2UuY2F0ZWdvcnkgIT09IGB1bmRlZmluZWRgXG4gICAgICAgICAgICAgICAgICAgID8gZm9ybWF0TWFya2Rvd25pc2goY29tbWFuZENsYXNzLnVzYWdlLmNhdGVnb3J5LCB7IGZvcm1hdDogdGhpcy5mb3JtYXQoY29sb3JlZCksIHBhcmFncmFwaHM6IGZhbHNlIH0pXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgY2F0ZWdvcnlDb21tYW5kcyA9IGNvbW1hbmRzQnlDYXRlZ29yaWVzLmdldChjYXRlZ29yeSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYXRlZ29yeUNvbW1hbmRzID09PSBgdW5kZWZpbmVkYClcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZHNCeUNhdGVnb3JpZXMuc2V0KGNhdGVnb3J5LCBjYXRlZ29yeUNvbW1hbmRzID0gW10pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgdXNhZ2UgfSA9IHRoaXMuZ2V0VXNhZ2VCeUluZGV4KGluZGV4KTtcbiAgICAgICAgICAgICAgICBjYXRlZ29yeUNvbW1hbmRzLnB1c2goeyBjb21tYW5kQ2xhc3MsIHVzYWdlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnlOYW1lcyA9IEFycmF5LmZyb20oY29tbWFuZHNCeUNhdGVnb3JpZXMua2V5cygpKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGEgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICBpZiAoYiA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICsxO1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmxvY2FsZUNvbXBhcmUoYiwgYGVuYCwgeyB1c2FnZTogYHNvcnRgLCBjYXNlRmlyc3Q6IGB1cHBlcmAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGhhc0xhYmVsID0gdHlwZW9mIHRoaXMuYmluYXJ5TGFiZWwgIT09IGB1bmRlZmluZWRgO1xuICAgICAgICAgICAgY29uc3QgaGFzVmVyc2lvbiA9IHR5cGVvZiB0aGlzLmJpbmFyeVZlcnNpb24gIT09IGB1bmRlZmluZWRgO1xuICAgICAgICAgICAgaWYgKGhhc0xhYmVsIHx8IGhhc1ZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzTGFiZWwgJiYgaGFzVmVyc2lvbilcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGAke3RoaXMuZm9ybWF0KGNvbG9yZWQpLmhlYWRlcihgJHt0aGlzLmJpbmFyeUxhYmVsfSAtICR7dGhpcy5iaW5hcnlWZXJzaW9ufWApfVxcblxcbmA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaGFzTGFiZWwpXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgJHt0aGlzLmZvcm1hdChjb2xvcmVkKS5oZWFkZXIoYCR7dGhpcy5iaW5hcnlMYWJlbH1gKX1cXG5gO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGAke3RoaXMuZm9ybWF0KGNvbG9yZWQpLmhlYWRlcihgJHt0aGlzLmJpbmFyeVZlcnNpb259YCl9XFxuYDtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gYCAgJHt0aGlzLmZvcm1hdChjb2xvcmVkKS5ib2xkKHByZWZpeCl9JHt0aGlzLmJpbmFyeU5hbWV9IDxjb21tYW5kPlxcbmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gYCR7dGhpcy5mb3JtYXQoY29sb3JlZCkuYm9sZChwcmVmaXgpfSR7dGhpcy5iaW5hcnlOYW1lfSA8Y29tbWFuZD5cXG5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yeU5hbWUgb2YgY2F0ZWdvcnlOYW1lcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRzID0gY29tbWFuZHNCeUNhdGVnb3JpZXMuZ2V0KGNhdGVnb3J5TmFtZSkuc2xpY2UoKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLnVzYWdlLmxvY2FsZUNvbXBhcmUoYi51c2FnZSwgYGVuYCwgeyB1c2FnZTogYHNvcnRgLCBjYXNlRmlyc3Q6IGB1cHBlcmAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyID0gY2F0ZWdvcnlOYW1lICE9PSBudWxsXG4gICAgICAgICAgICAgICAgICAgID8gY2F0ZWdvcnlOYW1lLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgICA6IGBHZW5lcmFsIGNvbW1hbmRzYDtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gYFxcbmA7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGAke3RoaXMuZm9ybWF0KGNvbG9yZWQpLmhlYWRlcihgJHtoZWFkZXJ9YCl9XFxuYDtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHsgY29tbWFuZENsYXNzLCB1c2FnZSB9IG9mIGNvbW1hbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvYyA9IGNvbW1hbmRDbGFzcy51c2FnZS5kZXNjcmlwdGlvbiB8fCBgdW5kb2N1bWVudGVkYDtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGBcXG5gO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gYCAgJHt0aGlzLmZvcm1hdChjb2xvcmVkKS5ib2xkKHVzYWdlKX1cXG5gO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gYCAgICAke2Zvcm1hdE1hcmtkb3duaXNoKGRvYywgeyBmb3JtYXQ6IHRoaXMuZm9ybWF0KGNvbG9yZWQpLCBwYXJhZ3JhcGhzOiBmYWxzZSB9KX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCArPSBgXFxuYDtcbiAgICAgICAgICAgIHJlc3VsdCArPSBmb3JtYXRNYXJrZG93bmlzaChgWW91IGNhbiBhbHNvIHByaW50IG1vcmUgZGV0YWlscyBhYm91dCBhbnkgb2YgdGhlc2UgY29tbWFuZHMgYnkgY2FsbGluZyB0aGVtIHdpdGggdGhlIFxcYC1oLC0taGVscFxcYCBmbGFnIHJpZ2h0IGFmdGVyIHRoZSBjb21tYW5kIG5hbWUuYCwgeyBmb3JtYXQ6IHRoaXMuZm9ybWF0KGNvbG9yZWQpLCBwYXJhZ3JhcGhzOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFkZXRhaWxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgdXNhZ2UgfSA9IHRoaXMuZ2V0VXNhZ2VCeVJlZ2lzdHJhdGlvbihjb21tYW5kQ2xhc3MpO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgJHt0aGlzLmZvcm1hdChjb2xvcmVkKS5ib2xkKHByZWZpeCl9JHt1c2FnZX1cXG5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBkZXNjcmlwdGlvbiA9IGBgLCBkZXRhaWxzID0gYGAsIGV4YW1wbGVzID0gW10sIH0gPSBjb21tYW5kQ2xhc3MudXNhZ2UgfHwge307XG4gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uICE9PSBgYCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gZm9ybWF0TWFya2Rvd25pc2goZGVzY3JpcHRpb24sIHsgZm9ybWF0OiB0aGlzLmZvcm1hdChjb2xvcmVkKSwgcGFyYWdyYXBoczogZmFsc2UgfSkucmVwbGFjZSgvXi4vLCAkMCA9PiAkMC50b1VwcGVyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGBcXG5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGV0YWlscyAhPT0gYGAgfHwgZXhhbXBsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gYCR7dGhpcy5mb3JtYXQoY29sb3JlZCkuaGVhZGVyKGBVc2FnZWApfVxcbmA7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgXFxuYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeyB1c2FnZSwgb3B0aW9ucyB9ID0gdGhpcy5nZXRVc2FnZUJ5UmVnaXN0cmF0aW9uKGNvbW1hbmRDbGFzcywgeyBpbmxpbmVPcHRpb25zOiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gYCR7dGhpcy5mb3JtYXQoY29sb3JlZCkuYm9sZChwcmVmaXgpfSR7dXNhZ2V9XFxuYDtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgXFxuYDtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGAke3RoaXMuZm9ybWF0KGNvbG9yZWQpLmhlYWRlcihgT3B0aW9uc2ApfVxcbmA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heERlZmluaXRpb25MZW5ndGggPSBvcHRpb25zLnJlZHVjZSgobGVuZ3RoLCBvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heChsZW5ndGgsIG9wdGlvbi5kZWZpbml0aW9uLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gYFxcbmA7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgeyBkZWZpbml0aW9uLCBkZXNjcmlwdGlvbiB9IG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgICAke3RoaXMuZm9ybWF0KGNvbG9yZWQpLmJvbGQoZGVmaW5pdGlvbi5wYWRFbmQobWF4RGVmaW5pdGlvbkxlbmd0aCkpfSAgICAke2Zvcm1hdE1hcmtkb3duaXNoKGRlc2NyaXB0aW9uLCB7IGZvcm1hdDogdGhpcy5mb3JtYXQoY29sb3JlZCksIHBhcmFncmFwaHM6IGZhbHNlIH0pfWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRldGFpbHMgIT09IGBgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgXFxuYDtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGAke3RoaXMuZm9ybWF0KGNvbG9yZWQpLmhlYWRlcihgRGV0YWlsc2ApfVxcbmA7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgXFxuYDtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZvcm1hdE1hcmtkb3duaXNoKGRldGFpbHMsIHsgZm9ybWF0OiB0aGlzLmZvcm1hdChjb2xvcmVkKSwgcGFyYWdyYXBoczogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGV4YW1wbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGBcXG5gO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gYCR7dGhpcy5mb3JtYXQoY29sb3JlZCkuaGVhZGVyKGBFeGFtcGxlc2ApfVxcbmA7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2Rlc2NyaXB0aW9uLCBleGFtcGxlXSBvZiBleGFtcGxlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGBcXG5gO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZvcm1hdE1hcmtkb3duaXNoKGRlc2NyaXB0aW9uLCB7IGZvcm1hdDogdGhpcy5mb3JtYXQoY29sb3JlZCksIHBhcmFncmFwaHM6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGAke2V4YW1wbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXi9tLCBgICAke3RoaXMuZm9ybWF0KGNvbG9yZWQpLmJvbGQocHJlZml4KX1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXCQwL2csIHRoaXMuYmluYXJ5TmFtZSl9XFxuYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBlcnJvcihlcnJvciwgX2EpIHtcbiAgICAgICAgdmFyIF9iO1xuICAgICAgICB2YXIgeyBjb2xvcmVkLCBjb21tYW5kID0gKF9iID0gZXJyb3JbZXJyb3JDb21tYW5kU3ltYm9sXSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogbnVsbCB9ID0gX2EgPT09IHZvaWQgMCA/IHt9IDogX2E7XG4gICAgICAgIGlmICghZXJyb3IgfHwgdHlwZW9mIGVycm9yICE9PSBgb2JqZWN0YCB8fCAhKGBzdGFja2AgaW4gZXJyb3IpKVxuICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoYEV4ZWN1dGlvbiBmYWlsZWQgd2l0aCBhIG5vbi1lcnJvciByZWplY3Rpb24gKHJlamVjdGVkIHZhbHVlOiAke0pTT04uc3RyaW5naWZ5KGVycm9yKX0pYCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBgYDtcbiAgICAgICAgbGV0IG5hbWUgPSBlcnJvci5uYW1lLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIGAkMSAkMmApO1xuICAgICAgICBpZiAobmFtZSA9PT0gYEVycm9yYClcbiAgICAgICAgICAgIG5hbWUgPSBgSW50ZXJuYWwgRXJyb3JgO1xuICAgICAgICByZXN1bHQgKz0gYCR7dGhpcy5mb3JtYXQoY29sb3JlZCkuZXJyb3IobmFtZSl9OiAke2Vycm9yLm1lc3NhZ2V9XFxuYDtcbiAgICAgICAgY29uc3QgbWV0YSA9IGVycm9yLmNsaXBhbmlvbjtcbiAgICAgICAgaWYgKHR5cGVvZiBtZXRhICE9PSBgdW5kZWZpbmVkYCkge1xuICAgICAgICAgICAgaWYgKG1ldGEudHlwZSA9PT0gYHVzYWdlYCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgXFxuYDtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gdGhpcy51c2FnZShjb21tYW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChlcnJvci5zdGFjaykge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgJHtlcnJvci5zdGFjay5yZXBsYWNlKC9eLipcXG4vLCBgYCl9XFxuYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBmb3JtYXQoY29sb3JlZCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoKF9hID0gY29sb3JlZCAhPT0gbnVsbCAmJiBjb2xvcmVkICE9PSB2b2lkIDAgPyBjb2xvcmVkIDogdGhpcy5lbmFibGVDb2xvcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IENsaS5kZWZhdWx0Q29udGV4dC5jb2xvckRlcHRoID4gMSkgPyByaWNoRm9ybWF0IDogdGV4dEZvcm1hdDtcbiAgICB9XG4gICAgZ2V0VXNhZ2VCeVJlZ2lzdHJhdGlvbihrbGFzcywgb3B0cykge1xuICAgICAgICBjb25zdCByZWNvcmQgPSB0aGlzLnJlZ2lzdHJhdGlvbnMuZ2V0KGtsYXNzKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZWNvcmQgPT09IGB1bmRlZmluZWRgKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBc3NlcnRpb24gZmFpbGVkOiBVbnJlZ2lzdGVyZWQgY29tbWFuZGApO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRVc2FnZUJ5SW5kZXgocmVjb3JkLmluZGV4LCBvcHRzKTtcbiAgICB9XG4gICAgZ2V0VXNhZ2VCeUluZGV4KG4sIG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRlci5nZXRCdWlsZGVyQnlJbmRleChuKS51c2FnZShvcHRzKTtcbiAgICB9XG59XG4vKipcbiAqIFRoZSBkZWZhdWx0IGNvbnRleHQgb2YgdGhlIENMSS5cbiAqXG4gKiBDb250YWlucyB0aGUgc3RkaW8gb2YgdGhlIGN1cnJlbnQgYHByb2Nlc3NgLlxuICovXG5DbGkuZGVmYXVsdENvbnRleHQgPSB7XG4gICAgZW52OiBwcm9jZXNzLmVudixcbiAgICBzdGRpbjogcHJvY2Vzcy5zdGRpbixcbiAgICBzdGRvdXQ6IHByb2Nlc3Muc3Rkb3V0LFxuICAgIHN0ZGVycjogcHJvY2Vzcy5zdGRlcnIsXG4gICAgY29sb3JEZXB0aDogZ2V0RGVmYXVsdENvbG9yRGVwdGgoKSxcbn07XG5mdW5jdGlvbiBub29wQ2FwdHVyZUFjdGl2YXRvcihmbikge1xuICAgIHJldHVybiBmbigpO1xufVxuXG5leHBvcnQgeyBDbGksIHJ1biwgcnVuRXhpdCB9O1xuIiwiaW1wb3J0IHsgbWFrZUNvbW1hbmRPcHRpb24sIGFwcGx5VmFsaWRhdG9yLCByZXJvdXRlQXJndW1lbnRzIH0gZnJvbSAnLi91dGlscy5tanMnO1xuXG5mdW5jdGlvbiBBcnJheShkZXNjcmlwdG9yLCBpbml0aWFsVmFsdWVCYXNlLCBvcHRzQmFzZSkge1xuICAgIGNvbnN0IFtpbml0aWFsVmFsdWUsIG9wdHNdID0gcmVyb3V0ZUFyZ3VtZW50cyhpbml0aWFsVmFsdWVCYXNlLCBvcHRzQmFzZSAhPT0gbnVsbCAmJiBvcHRzQmFzZSAhPT0gdm9pZCAwID8gb3B0c0Jhc2UgOiB7fSk7XG4gICAgY29uc3QgeyBhcml0eSA9IDEgfSA9IG9wdHM7XG4gICAgY29uc3Qgb3B0TmFtZXMgPSBkZXNjcmlwdG9yLnNwbGl0KGAsYCk7XG4gICAgY29uc3QgbmFtZVNldCA9IG5ldyBTZXQob3B0TmFtZXMpO1xuICAgIHJldHVybiBtYWtlQ29tbWFuZE9wdGlvbih7XG4gICAgICAgIGRlZmluaXRpb24oYnVpbGRlcikge1xuICAgICAgICAgICAgYnVpbGRlci5hZGRPcHRpb24oe1xuICAgICAgICAgICAgICAgIG5hbWVzOiBvcHROYW1lcyxcbiAgICAgICAgICAgICAgICBhcml0eSxcbiAgICAgICAgICAgICAgICBoaWRkZW46IG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0cy5oaWRkZW4sXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0cy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogb3B0cy5yZXF1aXJlZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2Zvcm1lcihidWlsZGVyLCBrZXksIHN0YXRlKSB7XG4gICAgICAgICAgICBsZXQgdXNlZE5hbWU7XG4gICAgICAgICAgICBsZXQgY3VycmVudFZhbHVlID0gdHlwZW9mIGluaXRpYWxWYWx1ZSAhPT0gYHVuZGVmaW5lZGBcbiAgICAgICAgICAgICAgICA/IFsuLi5pbml0aWFsVmFsdWVdXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiBzdGF0ZS5vcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFuYW1lU2V0LmhhcyhuYW1lKSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgdXNlZE5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZSAhPT0gbnVsbCAmJiBjdXJyZW50VmFsdWUgIT09IHZvaWQgMCA/IGN1cnJlbnRWYWx1ZSA6IFtdO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudFZhbHVlICE9PSBgdW5kZWZpbmVkYCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcHBseVZhbGlkYXRvcih1c2VkTmFtZSAhPT0gbnVsbCAmJiB1c2VkTmFtZSAhPT0gdm9pZCAwID8gdXNlZE5hbWUgOiBrZXksIGN1cnJlbnRWYWx1ZSwgb3B0cy52YWxpZGF0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9KTtcbn1cblxuZXhwb3J0IHsgQXJyYXkgfTtcbiIsImltcG9ydCB7IG1ha2VDb21tYW5kT3B0aW9uLCByZXJvdXRlQXJndW1lbnRzIH0gZnJvbSAnLi91dGlscy5tanMnO1xuXG5mdW5jdGlvbiBCb29sZWFuKGRlc2NyaXB0b3IsIGluaXRpYWxWYWx1ZUJhc2UsIG9wdHNCYXNlKSB7XG4gICAgY29uc3QgW2luaXRpYWxWYWx1ZSwgb3B0c10gPSByZXJvdXRlQXJndW1lbnRzKGluaXRpYWxWYWx1ZUJhc2UsIG9wdHNCYXNlICE9PSBudWxsICYmIG9wdHNCYXNlICE9PSB2b2lkIDAgPyBvcHRzQmFzZSA6IHt9KTtcbiAgICBjb25zdCBvcHROYW1lcyA9IGRlc2NyaXB0b3Iuc3BsaXQoYCxgKTtcbiAgICBjb25zdCBuYW1lU2V0ID0gbmV3IFNldChvcHROYW1lcyk7XG4gICAgcmV0dXJuIG1ha2VDb21tYW5kT3B0aW9uKHtcbiAgICAgICAgZGVmaW5pdGlvbihidWlsZGVyKSB7XG4gICAgICAgICAgICBidWlsZGVyLmFkZE9wdGlvbih7XG4gICAgICAgICAgICAgICAgbmFtZXM6IG9wdE5hbWVzLFxuICAgICAgICAgICAgICAgIGFsbG93QmluZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgYXJpdHk6IDAsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiBvcHRzLmhpZGRlbixcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogb3B0cy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogb3B0cy5yZXF1aXJlZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2Zvcm1lcihidWlsZXIsIGtleSwgc3RhdGUpIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50VmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiBzdGF0ZS5vcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFuYW1lU2V0LmhhcyhuYW1lKSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuXG5leHBvcnQgeyBCb29sZWFuIH07XG4iLCJpbXBvcnQgeyBOb0xpbWl0cyB9IGZyb20gJy4uLy4uL2NvcmUubWpzJztcbmltcG9ydCB7IG1ha2VDb21tYW5kT3B0aW9uLCBhcHBseVZhbGlkYXRvciwgcmVyb3V0ZUFyZ3VtZW50cyB9IGZyb20gJy4vdXRpbHMubWpzJztcblxuZnVuY3Rpb24gU3RyaW5nT3B0aW9uKGRlc2NyaXB0b3IsIGluaXRpYWxWYWx1ZUJhc2UsIG9wdHNCYXNlKSB7XG4gICAgY29uc3QgW2luaXRpYWxWYWx1ZSwgb3B0c10gPSByZXJvdXRlQXJndW1lbnRzKGluaXRpYWxWYWx1ZUJhc2UsIG9wdHNCYXNlICE9PSBudWxsICYmIG9wdHNCYXNlICE9PSB2b2lkIDAgPyBvcHRzQmFzZSA6IHt9KTtcbiAgICBjb25zdCB7IGFyaXR5ID0gMSB9ID0gb3B0cztcbiAgICBjb25zdCBvcHROYW1lcyA9IGRlc2NyaXB0b3Iuc3BsaXQoYCxgKTtcbiAgICBjb25zdCBuYW1lU2V0ID0gbmV3IFNldChvcHROYW1lcyk7XG4gICAgcmV0dXJuIG1ha2VDb21tYW5kT3B0aW9uKHtcbiAgICAgICAgZGVmaW5pdGlvbihidWlsZGVyKSB7XG4gICAgICAgICAgICBidWlsZGVyLmFkZE9wdGlvbih7XG4gICAgICAgICAgICAgICAgbmFtZXM6IG9wdE5hbWVzLFxuICAgICAgICAgICAgICAgIGFyaXR5OiBvcHRzLnRvbGVyYXRlQm9vbGVhbiA/IDAgOiBhcml0eSxcbiAgICAgICAgICAgICAgICBoaWRkZW46IG9wdHMuaGlkZGVuLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBvcHRzLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBvcHRzLnJlcXVpcmVkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zZm9ybWVyKGJ1aWxkZXIsIGtleSwgc3RhdGUsIGNvbnRleHQpIHtcbiAgICAgICAgICAgIGxldCB1c2VkTmFtZTtcbiAgICAgICAgICAgIGxldCBjdXJyZW50VmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMuZW52ICE9PSBgdW5kZWZpbmVkYCAmJiBjb250ZXh0LmVudltvcHRzLmVudl0pIHtcbiAgICAgICAgICAgICAgICB1c2VkTmFtZSA9IG9wdHMuZW52O1xuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGNvbnRleHQuZW52W29wdHMuZW52XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIHN0YXRlLm9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW5hbWVTZXQuaGFzKG5hbWUpKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB1c2VkTmFtZSA9IG5hbWU7XG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRWYWx1ZSA9PT0gYHN0cmluZ2ApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBwbHlWYWxpZGF0b3IodXNlZE5hbWUgIT09IG51bGwgJiYgdXNlZE5hbWUgIT09IHZvaWQgMCA/IHVzZWROYW1lIDoga2V5LCBjdXJyZW50VmFsdWUsIG9wdHMudmFsaWRhdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG5mdW5jdGlvbiBTdHJpbmdQb3NpdGlvbmFsKG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHsgcmVxdWlyZWQgPSB0cnVlIH0gPSBvcHRzO1xuICAgIHJldHVybiBtYWtlQ29tbWFuZE9wdGlvbih7XG4gICAgICAgIGRlZmluaXRpb24oYnVpbGRlciwga2V5KSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBidWlsZGVyLmFkZFBvc2l0aW9uYWwoe1xuICAgICAgICAgICAgICAgIG5hbWU6IChfYSA9IG9wdHMubmFtZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoga2V5LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBvcHRzLnJlcXVpcmVkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zZm9ybWVyKGJ1aWxkZXIsIGtleSwgc3RhdGUpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhdGUucG9zaXRpb25hbHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSBza2lwIE5vTGltaXRzIGV4dHJhcy4gV2Ugb25seSBjYXJlIGFib3V0XG4gICAgICAgICAgICAgICAgLy8gcmVxdWlyZWQgYW5kIG9wdGlvbmFsIGZpbml0ZSBwb3NpdGlvbmFscy5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUucG9zaXRpb25hbHNbaV0uZXh0cmEgPT09IE5vTGltaXRzKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAvLyBXZSBza2lwIG9wdGlvbmFsIHBvc2l0aW9uYWxzIHdoZW4gd2Ugb25seVxuICAgICAgICAgICAgICAgIC8vIGNhcmUgYWJvdXQgcmVxdWlyZWQgcG9zaXRpb25hbHMuXG4gICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVkICYmIHN0YXRlLnBvc2l0aW9uYWxzW2ldLmV4dHJhID09PSB0cnVlKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAvLyBXZSBza2lwIHJlcXVpcmVkIHBvc2l0aW9uYWxzIHdoZW4gd2Ugb25seVxuICAgICAgICAgICAgICAgIC8vIGNhcmUgYWJvdXQgb3B0aW9uYWwgcG9zaXRpb25hbHMuXG4gICAgICAgICAgICAgICAgaWYgKCFyZXF1aXJlZCAmJiBzdGF0ZS5wb3NpdGlvbmFsc1tpXS5leHRyYSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIC8vIFdlIHJlbW92ZSB0aGUgcG9zaXRpb25hbCBmcm9tIHRoZSBsaXN0XG4gICAgICAgICAgICAgICAgY29uc3QgW3Bvc2l0aW9uYWxdID0gc3RhdGUucG9zaXRpb25hbHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhcHBseVZhbGlkYXRvcigoX2EgPSBvcHRzLm5hbWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGtleSwgcG9zaXRpb25hbC52YWx1ZSwgb3B0cy52YWxpZGF0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbi8vIFRoaXMgZnVuY3Rpb24gaXMgYmFkbHkgdHlwZWQsIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciBiZWNhdXNlIHRoZSBvdmVybG9hZHMgcHJvdmlkZSB0aGUgdHJ1ZSBwdWJsaWMgdHlwaW5nc1xuZnVuY3Rpb24gU3RyaW5nKGRlc2NyaXB0b3IsIC4uLmFyZ3MpIHtcbiAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IgPT09IGBzdHJpbmdgKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmdPcHRpb24oZGVzY3JpcHRvciwgLi4uYXJncyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gU3RyaW5nUG9zaXRpb25hbChkZXNjcmlwdG9yKTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IFN0cmluZyB9O1xuIiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XG4gIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XG4gICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdDtcbiAgfVxuICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgdFtwXSA9IHNbcF07XG4gIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgfVxuICByZXR1cm4gdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19lc0RlY29yYXRlKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XG4gIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxuICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xuICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcbiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XG4gIHZhciBfLCBkb25lID0gZmFsc2U7XG4gIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHt9O1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcbiAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XG4gICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcbiAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xuICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcbiAgICAgIH1cbiAgfVxuICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XG4gIGRvbmUgPSB0cnVlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcbiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XG4gIH1cbiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19wcm9wS2V5KHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xuICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcbiAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XG4gIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcbiAgdmFyIGksIHA7XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XG4gIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XG4gIHJldHVybiBjb29rZWQ7XG59O1xuXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xuICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcbiAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xuICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcbiAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlKGVudiwgdmFsdWUsIGFzeW5jKSB7XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZC5cIik7XG4gICAgdmFyIGRpc3Bvc2UsIGlubmVyO1xuICAgIGlmIChhc3luYykge1xuICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jRGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XG4gICAgfVxuICAgIGlmIChkaXNwb3NlID09PSB2b2lkIDApIHtcbiAgICAgIGlmICghU3ltYm9sLmRpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuZGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmRpc3Bvc2VdO1xuICAgICAgaWYgKGFzeW5jKSBpbm5lciA9IGRpc3Bvc2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGlzcG9zZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IG5vdCBkaXNwb3NhYmxlLlwiKTtcbiAgICBpZiAoaW5uZXIpIGRpc3Bvc2UgPSBmdW5jdGlvbigpIHsgdHJ5IHsgaW5uZXIuY2FsbCh0aGlzKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7IH0gfTtcbiAgICBlbnYuc3RhY2sucHVzaCh7IHZhbHVlOiB2YWx1ZSwgZGlzcG9zZTogZGlzcG9zZSwgYXN5bmM6IGFzeW5jIH0pO1xuICB9XG4gIGVsc2UgaWYgKGFzeW5jKSB7XG4gICAgZW52LnN0YWNrLnB1c2goeyBhc3luYzogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbnZhciBfU3VwcHJlc3NlZEVycm9yID0gdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGlzcG9zZVJlc291cmNlcyhlbnYpIHtcbiAgZnVuY3Rpb24gZmFpbChlKSB7XG4gICAgZW52LmVycm9yID0gZW52Lmhhc0Vycm9yID8gbmV3IF9TdXBwcmVzc2VkRXJyb3IoZSwgZW52LmVycm9yLCBcIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC5cIikgOiBlO1xuICAgIGVudi5oYXNFcnJvciA9IHRydWU7XG4gIH1cbiAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICB3aGlsZSAoZW52LnN0YWNrLmxlbmd0aCkge1xuICAgICAgdmFyIHJlYyA9IGVudi5zdGFjay5wb3AoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWMuZGlzcG9zZSAmJiByZWMuZGlzcG9zZS5jYWxsKHJlYy52YWx1ZSk7XG4gICAgICAgIGlmIChyZWMuYXN5bmMpIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzdWx0KS50aGVuKG5leHQsIGZ1bmN0aW9uKGUpIHsgZmFpbChlKTsgcmV0dXJuIG5leHQoKTsgfSk7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgIGZhaWwoZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbnYuaGFzRXJyb3IpIHRocm93IGVudi5lcnJvcjtcbiAgfVxuICByZXR1cm4gbmV4dCgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZXh0ZW5kcyxcbiAgX19hc3NpZ24sXG4gIF9fcmVzdCxcbiAgX19kZWNvcmF0ZSxcbiAgX19wYXJhbSxcbiAgX19tZXRhZGF0YSxcbiAgX19hd2FpdGVyLFxuICBfX2dlbmVyYXRvcixcbiAgX19jcmVhdGVCaW5kaW5nLFxuICBfX2V4cG9ydFN0YXIsXG4gIF9fdmFsdWVzLFxuICBfX3JlYWQsXG4gIF9fc3ByZWFkLFxuICBfX3NwcmVhZEFycmF5cyxcbiAgX19zcHJlYWRBcnJheSxcbiAgX19hd2FpdCxcbiAgX19hc3luY0dlbmVyYXRvcixcbiAgX19hc3luY0RlbGVnYXRvcixcbiAgX19hc3luY1ZhbHVlcyxcbiAgX19tYWtlVGVtcGxhdGVPYmplY3QsXG4gIF9faW1wb3J0U3RhcixcbiAgX19pbXBvcnREZWZhdWx0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4sXG4gIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlLFxuICBfX2Rpc3Bvc2VSZXNvdXJjZXMsXG59O1xuIiwiaW1wb3J0ICogYXMgdHR5IGZyb20gXCJ0dHlcIlxuXG5jb25zdCB7XG4gIGVudiA9IHt9LFxuICBhcmd2ID0gW10sXG4gIHBsYXRmb3JtID0gXCJcIixcbn0gPSB0eXBlb2YgcHJvY2VzcyA9PT0gXCJ1bmRlZmluZWRcIiA/IHt9IDogcHJvY2Vzc1xuXG5jb25zdCBpc0Rpc2FibGVkID0gXCJOT19DT0xPUlwiIGluIGVudiB8fCBhcmd2LmluY2x1ZGVzKFwiLS1uby1jb2xvclwiKVxuY29uc3QgaXNGb3JjZWQgPSBcIkZPUkNFX0NPTE9SXCIgaW4gZW52IHx8IGFyZ3YuaW5jbHVkZXMoXCItLWNvbG9yXCIpXG5jb25zdCBpc1dpbmRvd3MgPSBwbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiXG5jb25zdCBpc0R1bWJUZXJtaW5hbCA9IGVudi5URVJNID09PSBcImR1bWJcIlxuXG5jb25zdCBpc0NvbXBhdGlibGVUZXJtaW5hbCA9XG4gIHR0eSAmJiB0dHkuaXNhdHR5ICYmIHR0eS5pc2F0dHkoMSkgJiYgZW52LlRFUk0gJiYgIWlzRHVtYlRlcm1pbmFsXG5cbmNvbnN0IGlzQ0kgPVxuICBcIkNJXCIgaW4gZW52ICYmXG4gIChcIkdJVEhVQl9BQ1RJT05TXCIgaW4gZW52IHx8IFwiR0lUTEFCX0NJXCIgaW4gZW52IHx8IFwiQ0lSQ0xFQ0lcIiBpbiBlbnYpXG5cbmV4cG9ydCBjb25zdCBpc0NvbG9yU3VwcG9ydGVkID1cbiAgIWlzRGlzYWJsZWQgJiZcbiAgKGlzRm9yY2VkIHx8IChpc1dpbmRvd3MgJiYgIWlzRHVtYlRlcm1pbmFsKSB8fCBpc0NvbXBhdGlibGVUZXJtaW5hbCB8fCBpc0NJKVxuXG5jb25zdCByZXBsYWNlQ2xvc2UgPSAoXG4gIGluZGV4LFxuICBzdHJpbmcsXG4gIGNsb3NlLFxuICByZXBsYWNlLFxuICBoZWFkID0gc3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyByZXBsYWNlLFxuICB0YWlsID0gc3RyaW5nLnN1YnN0cmluZyhpbmRleCArIGNsb3NlLmxlbmd0aCksXG4gIG5leHQgPSB0YWlsLmluZGV4T2YoY2xvc2UpXG4pID0+IGhlYWQgKyAobmV4dCA8IDAgPyB0YWlsIDogcmVwbGFjZUNsb3NlKG5leHQsIHRhaWwsIGNsb3NlLCByZXBsYWNlKSlcblxuY29uc3QgY2xlYXJCbGVlZCA9IChpbmRleCwgc3RyaW5nLCBvcGVuLCBjbG9zZSwgcmVwbGFjZSkgPT5cbiAgaW5kZXggPCAwXG4gICAgPyBvcGVuICsgc3RyaW5nICsgY2xvc2VcbiAgICA6IG9wZW4gKyByZXBsYWNlQ2xvc2UoaW5kZXgsIHN0cmluZywgY2xvc2UsIHJlcGxhY2UpICsgY2xvc2VcblxuY29uc3QgZmlsdGVyRW1wdHkgPVxuICAob3BlbiwgY2xvc2UsIHJlcGxhY2UgPSBvcGVuLCBhdCA9IG9wZW4ubGVuZ3RoICsgMSkgPT5cbiAgKHN0cmluZykgPT5cbiAgICBzdHJpbmcgfHwgIShzdHJpbmcgPT09IFwiXCIgfHwgc3RyaW5nID09PSB1bmRlZmluZWQpXG4gICAgICA/IGNsZWFyQmxlZWQoXG4gICAgICAgICAgKFwiXCIgKyBzdHJpbmcpLmluZGV4T2YoY2xvc2UsIGF0KSxcbiAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgb3BlbixcbiAgICAgICAgICBjbG9zZSxcbiAgICAgICAgICByZXBsYWNlXG4gICAgICAgIClcbiAgICAgIDogXCJcIlxuXG5jb25zdCBpbml0ID0gKG9wZW4sIGNsb3NlLCByZXBsYWNlKSA9PlxuICBmaWx0ZXJFbXB0eShgXFx4MWJbJHtvcGVufW1gLCBgXFx4MWJbJHtjbG9zZX1tYCwgcmVwbGFjZSlcblxuY29uc3QgY29sb3JzID0ge1xuICByZXNldDogaW5pdCgwLCAwKSxcbiAgYm9sZDogaW5pdCgxLCAyMiwgXCJcXHgxYlsyMm1cXHgxYlsxbVwiKSxcbiAgZGltOiBpbml0KDIsIDIyLCBcIlxceDFiWzIybVxceDFiWzJtXCIpLFxuICBpdGFsaWM6IGluaXQoMywgMjMpLFxuICB1bmRlcmxpbmU6IGluaXQoNCwgMjQpLFxuICBpbnZlcnNlOiBpbml0KDcsIDI3KSxcbiAgaGlkZGVuOiBpbml0KDgsIDI4KSxcbiAgc3RyaWtldGhyb3VnaDogaW5pdCg5LCAyOSksXG4gIGJsYWNrOiBpbml0KDMwLCAzOSksXG4gIHJlZDogaW5pdCgzMSwgMzkpLFxuICBncmVlbjogaW5pdCgzMiwgMzkpLFxuICB5ZWxsb3c6IGluaXQoMzMsIDM5KSxcbiAgYmx1ZTogaW5pdCgzNCwgMzkpLFxuICBtYWdlbnRhOiBpbml0KDM1LCAzOSksXG4gIGN5YW46IGluaXQoMzYsIDM5KSxcbiAgd2hpdGU6IGluaXQoMzcsIDM5KSxcbiAgZ3JheTogaW5pdCg5MCwgMzkpLFxuICBiZ0JsYWNrOiBpbml0KDQwLCA0OSksXG4gIGJnUmVkOiBpbml0KDQxLCA0OSksXG4gIGJnR3JlZW46IGluaXQoNDIsIDQ5KSxcbiAgYmdZZWxsb3c6IGluaXQoNDMsIDQ5KSxcbiAgYmdCbHVlOiBpbml0KDQ0LCA0OSksXG4gIGJnTWFnZW50YTogaW5pdCg0NSwgNDkpLFxuICBiZ0N5YW46IGluaXQoNDYsIDQ5KSxcbiAgYmdXaGl0ZTogaW5pdCg0NywgNDkpLFxuICBibGFja0JyaWdodDogaW5pdCg5MCwgMzkpLFxuICByZWRCcmlnaHQ6IGluaXQoOTEsIDM5KSxcbiAgZ3JlZW5CcmlnaHQ6IGluaXQoOTIsIDM5KSxcbiAgeWVsbG93QnJpZ2h0OiBpbml0KDkzLCAzOSksXG4gIGJsdWVCcmlnaHQ6IGluaXQoOTQsIDM5KSxcbiAgbWFnZW50YUJyaWdodDogaW5pdCg5NSwgMzkpLFxuICBjeWFuQnJpZ2h0OiBpbml0KDk2LCAzOSksXG4gIHdoaXRlQnJpZ2h0OiBpbml0KDk3LCAzOSksXG4gIGJnQmxhY2tCcmlnaHQ6IGluaXQoMTAwLCA0OSksXG4gIGJnUmVkQnJpZ2h0OiBpbml0KDEwMSwgNDkpLFxuICBiZ0dyZWVuQnJpZ2h0OiBpbml0KDEwMiwgNDkpLFxuICBiZ1llbGxvd0JyaWdodDogaW5pdCgxMDMsIDQ5KSxcbiAgYmdCbHVlQnJpZ2h0OiBpbml0KDEwNCwgNDkpLFxuICBiZ01hZ2VudGFCcmlnaHQ6IGluaXQoMTA1LCA0OSksXG4gIGJnQ3lhbkJyaWdodDogaW5pdCgxMDYsIDQ5KSxcbiAgYmdXaGl0ZUJyaWdodDogaW5pdCgxMDcsIDQ5KSxcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbG9ycyA9ICh7IHVzZUNvbG9yID0gaXNDb2xvclN1cHBvcnRlZCB9ID0ge30pID0+XG4gIHVzZUNvbG9yXG4gICAgPyBjb2xvcnNcbiAgICA6IE9iamVjdC5rZXlzKGNvbG9ycykucmVkdWNlKFxuICAgICAgICAoY29sb3JzLCBrZXkpID0+ICh7IC4uLmNvbG9ycywgW2tleV06IFN0cmluZyB9KSxcbiAgICAgICAge31cbiAgICAgIClcblxuZXhwb3J0IGNvbnN0IHtcbiAgcmVzZXQsXG4gIGJvbGQsXG4gIGRpbSxcbiAgaXRhbGljLFxuICB1bmRlcmxpbmUsXG4gIGludmVyc2UsXG4gIGhpZGRlbixcbiAgc3RyaWtldGhyb3VnaCxcbiAgYmxhY2ssXG4gIHJlZCxcbiAgZ3JlZW4sXG4gIHllbGxvdyxcbiAgYmx1ZSxcbiAgbWFnZW50YSxcbiAgY3lhbixcbiAgd2hpdGUsXG4gIGdyYXksXG4gIGJnQmxhY2ssXG4gIGJnUmVkLFxuICBiZ0dyZWVuLFxuICBiZ1llbGxvdyxcbiAgYmdCbHVlLFxuICBiZ01hZ2VudGEsXG4gIGJnQ3lhbixcbiAgYmdXaGl0ZSxcbiAgYmxhY2tCcmlnaHQsXG4gIHJlZEJyaWdodCxcbiAgZ3JlZW5CcmlnaHQsXG4gIHllbGxvd0JyaWdodCxcbiAgYmx1ZUJyaWdodCxcbiAgbWFnZW50YUJyaWdodCxcbiAgY3lhbkJyaWdodCxcbiAgd2hpdGVCcmlnaHQsXG4gIGJnQmxhY2tCcmlnaHQsXG4gIGJnUmVkQnJpZ2h0LFxuICBiZ0dyZWVuQnJpZ2h0LFxuICBiZ1llbGxvd0JyaWdodCxcbiAgYmdCbHVlQnJpZ2h0LFxuICBiZ01hZ2VudGFCcmlnaHQsXG4gIGJnQ3lhbkJyaWdodCxcbiAgYmdXaGl0ZUJyaWdodCxcbn0gPSBjcmVhdGVDb2xvcnMoKVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5jb252ZXJ0U2xhc2hlcyA9IGV4cG9ydHMuY2xlYW5QYXRoID0gdm9pZCAwO1xyXG5jb25zdCBwYXRoXzEgPSByZXF1aXJlKFwicGF0aFwiKTtcclxuZnVuY3Rpb24gY2xlYW5QYXRoKHBhdGgpIHtcclxuICAgIGxldCBub3JtYWxpemVkID0gKDAsIHBhdGhfMS5ub3JtYWxpemUpKHBhdGgpO1xyXG4gICAgLy8gd2UgaGF2ZSB0byByZW1vdmUgdGhlIGxhc3QgcGF0aCBzZXBhcmF0b3JcclxuICAgIC8vIHRvIGFjY291bnQgZm9yIC8gcm9vdCBwYXRoXHJcbiAgICBpZiAobm9ybWFsaXplZC5sZW5ndGggPiAxICYmIG5vcm1hbGl6ZWRbbm9ybWFsaXplZC5sZW5ndGggLSAxXSA9PT0gcGF0aF8xLnNlcClcclxuICAgICAgICBub3JtYWxpemVkID0gbm9ybWFsaXplZC5zdWJzdHJpbmcoMCwgbm9ybWFsaXplZC5sZW5ndGggLSAxKTtcclxuICAgIHJldHVybiBub3JtYWxpemVkO1xyXG59XHJcbmV4cG9ydHMuY2xlYW5QYXRoID0gY2xlYW5QYXRoO1xyXG5jb25zdCBTTEFTSEVTX1JFR0VYID0gL1tcXFxcL10vZztcclxuZnVuY3Rpb24gY29udmVydFNsYXNoZXMocGF0aCwgc2VwYXJhdG9yKSB7XHJcbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKFNMQVNIRVNfUkVHRVgsIHNlcGFyYXRvcik7XHJcbn1cclxuZXhwb3J0cy5jb252ZXJ0U2xhc2hlcyA9IGNvbnZlcnRTbGFzaGVzO1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5leHBvcnRzLmJ1aWxkID0gZXhwb3J0cy5qb2luRGlyZWN0b3J5UGF0aCA9IHZvaWQgMDtcclxuZnVuY3Rpb24gam9pblBhdGhXaXRoQmFzZVBhdGgoZmlsZW5hbWUsIGRpcmVjdG9yeVBhdGgpIHtcclxuICAgIHJldHVybiBkaXJlY3RvcnlQYXRoICsgZmlsZW5hbWU7XHJcbn1cclxuZnVuY3Rpb24gam9pblBhdGhXaXRoUmVsYXRpdmVQYXRoKHJvb3QpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZmlsZW5hbWUsIGRpcmVjdG9yeVBhdGgpIHtcclxuICAgICAgICByZXR1cm4gZGlyZWN0b3J5UGF0aC5zdWJzdHJpbmcocm9vdC5sZW5ndGgpICsgZmlsZW5hbWU7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGpvaW5QYXRoKGZpbGVuYW1lKSB7XHJcbiAgICByZXR1cm4gZmlsZW5hbWU7XHJcbn1cclxuZnVuY3Rpb24gam9pbkRpcmVjdG9yeVBhdGgoZmlsZW5hbWUsIGRpcmVjdG9yeVBhdGgsIHNlcGFyYXRvcikge1xyXG4gICAgcmV0dXJuIGRpcmVjdG9yeVBhdGggKyBmaWxlbmFtZSArIHNlcGFyYXRvcjtcclxufVxyXG5leHBvcnRzLmpvaW5EaXJlY3RvcnlQYXRoID0gam9pbkRpcmVjdG9yeVBhdGg7XHJcbmZ1bmN0aW9uIGJ1aWxkKHJvb3QsIG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHsgcmVsYXRpdmVQYXRocywgaW5jbHVkZUJhc2VQYXRoIH0gPSBvcHRpb25zO1xyXG4gICAgcmV0dXJuIHJlbGF0aXZlUGF0aHMgJiYgcm9vdFxyXG4gICAgICAgID8gam9pblBhdGhXaXRoUmVsYXRpdmVQYXRoKHJvb3QpXHJcbiAgICAgICAgOiBpbmNsdWRlQmFzZVBhdGhcclxuICAgICAgICAgICAgPyBqb2luUGF0aFdpdGhCYXNlUGF0aFxyXG4gICAgICAgICAgICA6IGpvaW5QYXRoO1xyXG59XHJcbmV4cG9ydHMuYnVpbGQgPSBidWlsZDtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5idWlsZCA9IHZvaWQgMDtcclxuY29uc3QgcHVzaERpcmVjdG9yeSA9IChkaXJlY3RvcnlQYXRoLCBwYXRocykgPT4ge1xyXG4gICAgcGF0aHMucHVzaChkaXJlY3RvcnlQYXRoIHx8IFwiLlwiKTtcclxufTtcclxuY29uc3QgcHVzaERpcmVjdG9yeUZpbHRlciA9IChkaXJlY3RvcnlQYXRoLCBwYXRocywgZmlsdGVycykgPT4ge1xyXG4gICAgaWYgKGZpbHRlcnMuZXZlcnkoKGZpbHRlcikgPT4gZmlsdGVyKGRpcmVjdG9yeVBhdGgsIHRydWUpKSkge1xyXG4gICAgICAgIHBhdGhzLnB1c2goZGlyZWN0b3J5UGF0aCk7XHJcbiAgICB9XHJcbn07XHJcbmNvbnN0IGVtcHR5ID0gKCkgPT4geyB9O1xyXG5mdW5jdGlvbiBidWlsZChvcHRpb25zKSB7XHJcbiAgICBjb25zdCB7IGluY2x1ZGVEaXJzLCBmaWx0ZXJzIH0gPSBvcHRpb25zO1xyXG4gICAgaWYgKCFpbmNsdWRlRGlycylcclxuICAgICAgICByZXR1cm4gZW1wdHk7XHJcbiAgICByZXR1cm4gZmlsdGVycyAmJiBmaWx0ZXJzLmxlbmd0aCA/IHB1c2hEaXJlY3RvcnlGaWx0ZXIgOiBwdXNoRGlyZWN0b3J5O1xyXG59XHJcbmV4cG9ydHMuYnVpbGQgPSBidWlsZDtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5idWlsZCA9IHZvaWQgMDtcclxuY29uc3QgcHVzaEZpbGVGaWx0ZXJBbmRDb3VudCA9IChmaWxlbmFtZSwgX3BhdGhzLCBjb3VudHMsIGZpbHRlcnMpID0+IHtcclxuICAgIGlmIChmaWx0ZXJzLmV2ZXJ5KChmaWx0ZXIpID0+IGZpbHRlcihmaWxlbmFtZSwgZmFsc2UpKSlcclxuICAgICAgICBjb3VudHMuZmlsZXMrKztcclxufTtcclxuY29uc3QgcHVzaEZpbGVGaWx0ZXIgPSAoZmlsZW5hbWUsIHBhdGhzLCBfY291bnRzLCBmaWx0ZXJzKSA9PiB7XHJcbiAgICBpZiAoZmlsdGVycy5ldmVyeSgoZmlsdGVyKSA9PiBmaWx0ZXIoZmlsZW5hbWUsIGZhbHNlKSkpXHJcbiAgICAgICAgcGF0aHMucHVzaChmaWxlbmFtZSk7XHJcbn07XHJcbmNvbnN0IHB1c2hGaWxlQ291bnQgPSAoX2ZpbGVuYW1lLCBfcGF0aHMsIGNvdW50cywgX2ZpbHRlcnMpID0+IHtcclxuICAgIGNvdW50cy5maWxlcysrO1xyXG59O1xyXG5jb25zdCBwdXNoRmlsZSA9IChmaWxlbmFtZSwgcGF0aHMpID0+IHtcclxuICAgIHBhdGhzLnB1c2goZmlsZW5hbWUpO1xyXG59O1xyXG5jb25zdCBlbXB0eSA9ICgpID0+IHsgfTtcclxuZnVuY3Rpb24gYnVpbGQob3B0aW9ucykge1xyXG4gICAgY29uc3QgeyBleGNsdWRlRmlsZXMsIGZpbHRlcnMsIG9ubHlDb3VudHMgfSA9IG9wdGlvbnM7XHJcbiAgICBpZiAoZXhjbHVkZUZpbGVzKVxyXG4gICAgICAgIHJldHVybiBlbXB0eTtcclxuICAgIGlmIChmaWx0ZXJzICYmIGZpbHRlcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIG9ubHlDb3VudHMgPyBwdXNoRmlsZUZpbHRlckFuZENvdW50IDogcHVzaEZpbGVGaWx0ZXI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChvbmx5Q291bnRzKSB7XHJcbiAgICAgICAgcmV0dXJuIHB1c2hGaWxlQ291bnQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gcHVzaEZpbGU7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5idWlsZCA9IGJ1aWxkO1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5leHBvcnRzLmJ1aWxkID0gdm9pZCAwO1xyXG5jb25zdCBnZXRBcnJheSA9IChwYXRocykgPT4ge1xyXG4gICAgcmV0dXJuIHBhdGhzO1xyXG59O1xyXG5jb25zdCBnZXRBcnJheUdyb3VwID0gKCkgPT4ge1xyXG4gICAgcmV0dXJuIFtcIlwiXS5zbGljZSgwLCAwKTtcclxufTtcclxuZnVuY3Rpb24gYnVpbGQob3B0aW9ucykge1xyXG4gICAgcmV0dXJuIG9wdGlvbnMuZ3JvdXAgPyBnZXRBcnJheUdyb3VwIDogZ2V0QXJyYXk7XHJcbn1cclxuZXhwb3J0cy5idWlsZCA9IGJ1aWxkO1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5leHBvcnRzLmJ1aWxkID0gdm9pZCAwO1xyXG5jb25zdCBncm91cEZpbGVzID0gKGdyb3VwcywgZGlyZWN0b3J5LCBmaWxlcykgPT4ge1xyXG4gICAgZ3JvdXBzLnB1c2goeyBkaXJlY3RvcnksIGZpbGVzLCBkaXI6IGRpcmVjdG9yeSB9KTtcclxufTtcclxuY29uc3QgZW1wdHkgPSAoKSA9PiB7IH07XHJcbmZ1bmN0aW9uIGJ1aWxkKG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBvcHRpb25zLmdyb3VwID8gZ3JvdXBGaWxlcyA6IGVtcHR5O1xyXG59XHJcbmV4cG9ydHMuYnVpbGQgPSBidWlsZDtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5idWlsZCA9IHZvaWQgMDtcclxuY29uc3QgZnNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiZnNcIikpO1xyXG5jb25zdCByZXNvbHZlU3ltbGlua3NBc3luYyA9IGZ1bmN0aW9uIChwYXRoLCBzdGF0ZSwgY2FsbGJhY2spIHtcclxuICAgIGNvbnN0IHsgcXVldWUsIG9wdGlvbnM6IHsgc3VwcHJlc3NFcnJvcnMgfSwgfSA9IHN0YXRlO1xyXG4gICAgcXVldWUuZW5xdWV1ZSgpO1xyXG4gICAgZnNfMS5kZWZhdWx0LnJlYWxwYXRoKHBhdGgsIChlcnJvciwgcmVzb2x2ZWRQYXRoKSA9PiB7XHJcbiAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHF1ZXVlLmRlcXVldWUoc3VwcHJlc3NFcnJvcnMgPyBudWxsIDogZXJyb3IsIHN0YXRlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmc18xLmRlZmF1bHQubHN0YXQocmVzb2x2ZWRQYXRoLCAoX2Vycm9yLCBzdGF0KSA9PiB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKHN0YXQsIHJlc29sdmVkUGF0aCk7XHJcbiAgICAgICAgICAgIHF1ZXVlLmRlcXVldWUobnVsbCwgc3RhdGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn07XHJcbmNvbnN0IHJlc29sdmVTeW1saW5rc1N5bmMgPSBmdW5jdGlvbiAocGF0aCwgc3RhdGUsIGNhbGxiYWNrKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IGZzXzEuZGVmYXVsdC5yZWFscGF0aFN5bmMocGF0aCk7XHJcbiAgICAgICAgY29uc3Qgc3RhdCA9IGZzXzEuZGVmYXVsdC5sc3RhdFN5bmMocmVzb2x2ZWRQYXRoKTtcclxuICAgICAgICBjYWxsYmFjayhzdGF0LCByZXNvbHZlZFBhdGgpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICBpZiAoIXN0YXRlLm9wdGlvbnMuc3VwcHJlc3NFcnJvcnMpXHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICB9XHJcbn07XHJcbmZ1bmN0aW9uIGJ1aWxkKG9wdGlvbnMsIGlzU3luY2hyb25vdXMpIHtcclxuICAgIGlmICghb3B0aW9ucy5yZXNvbHZlU3ltbGlua3MpXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gaXNTeW5jaHJvbm91cyA/IHJlc29sdmVTeW1saW5rc1N5bmMgOiByZXNvbHZlU3ltbGlua3NBc3luYztcclxufVxyXG5leHBvcnRzLmJ1aWxkID0gYnVpbGQ7XHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmV4cG9ydHMuYnVpbGQgPSB2b2lkIDA7XHJcbmNvbnN0IG9ubHlDb3VudHNTeW5jID0gKHN0YXRlKSA9PiB7XHJcbiAgICByZXR1cm4gc3RhdGUuY291bnRzO1xyXG59O1xyXG5jb25zdCBncm91cHNTeW5jID0gKHN0YXRlKSA9PiB7XHJcbiAgICByZXR1cm4gc3RhdGUuZ3JvdXBzO1xyXG59O1xyXG5jb25zdCBkZWZhdWx0U3luYyA9IChzdGF0ZSkgPT4ge1xyXG4gICAgcmV0dXJuIHN0YXRlLnBhdGhzO1xyXG59O1xyXG5jb25zdCBsaW1pdEZpbGVzU3luYyA9IChzdGF0ZSkgPT4ge1xyXG4gICAgcmV0dXJuIHN0YXRlLnBhdGhzLnNsaWNlKDAsIHN0YXRlLm9wdGlvbnMubWF4RmlsZXMpO1xyXG59O1xyXG5jb25zdCBvbmx5Q291bnRzQXN5bmMgPSAoc3RhdGUsIGVycm9yLCBjYWxsYmFjaykgPT4ge1xyXG4gICAgcmVwb3J0KGVycm9yLCBjYWxsYmFjaywgc3RhdGUuY291bnRzLCBzdGF0ZS5vcHRpb25zLnN1cHByZXNzRXJyb3JzKTtcclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5jb25zdCBkZWZhdWx0QXN5bmMgPSAoc3RhdGUsIGVycm9yLCBjYWxsYmFjaykgPT4ge1xyXG4gICAgcmVwb3J0KGVycm9yLCBjYWxsYmFjaywgc3RhdGUucGF0aHMsIHN0YXRlLm9wdGlvbnMuc3VwcHJlc3NFcnJvcnMpO1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcbmNvbnN0IGxpbWl0RmlsZXNBc3luYyA9IChzdGF0ZSwgZXJyb3IsIGNhbGxiYWNrKSA9PiB7XHJcbiAgICByZXBvcnQoZXJyb3IsIGNhbGxiYWNrLCBzdGF0ZS5wYXRocy5zbGljZSgwLCBzdGF0ZS5vcHRpb25zLm1heEZpbGVzKSwgc3RhdGUub3B0aW9ucy5zdXBwcmVzc0Vycm9ycyk7XHJcbiAgICByZXR1cm4gbnVsbDtcclxufTtcclxuY29uc3QgZ3JvdXBzQXN5bmMgPSAoc3RhdGUsIGVycm9yLCBjYWxsYmFjaykgPT4ge1xyXG4gICAgcmVwb3J0KGVycm9yLCBjYWxsYmFjaywgc3RhdGUuZ3JvdXBzLCBzdGF0ZS5vcHRpb25zLnN1cHByZXNzRXJyb3JzKTtcclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5mdW5jdGlvbiByZXBvcnQoZXJyb3IsIGNhbGxiYWNrLCBvdXRwdXQsIHN1cHByZXNzRXJyb3JzKSB7XHJcbiAgICBpZiAoZXJyb3IgJiYgIXN1cHByZXNzRXJyb3JzKVxyXG4gICAgICAgIGNhbGxiYWNrKGVycm9yLCBvdXRwdXQpO1xyXG4gICAgZWxzZVxyXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIG91dHB1dCk7XHJcbn1cclxuZnVuY3Rpb24gYnVpbGQob3B0aW9ucywgaXNTeW5jaHJvbm91cykge1xyXG4gICAgY29uc3QgeyBvbmx5Q291bnRzLCBncm91cCwgbWF4RmlsZXMgfSA9IG9wdGlvbnM7XHJcbiAgICBpZiAob25seUNvdW50cylcclxuICAgICAgICByZXR1cm4gaXNTeW5jaHJvbm91c1xyXG4gICAgICAgICAgICA/IG9ubHlDb3VudHNTeW5jXHJcbiAgICAgICAgICAgIDogb25seUNvdW50c0FzeW5jO1xyXG4gICAgZWxzZSBpZiAoZ3JvdXApXHJcbiAgICAgICAgcmV0dXJuIGlzU3luY2hyb25vdXNcclxuICAgICAgICAgICAgPyBncm91cHNTeW5jXHJcbiAgICAgICAgICAgIDogZ3JvdXBzQXN5bmM7XHJcbiAgICBlbHNlIGlmIChtYXhGaWxlcylcclxuICAgICAgICByZXR1cm4gaXNTeW5jaHJvbm91c1xyXG4gICAgICAgICAgICA/IGxpbWl0RmlsZXNTeW5jXHJcbiAgICAgICAgICAgIDogbGltaXRGaWxlc0FzeW5jO1xyXG4gICAgZWxzZVxyXG4gICAgICAgIHJldHVybiBpc1N5bmNocm9ub3VzXHJcbiAgICAgICAgICAgID8gZGVmYXVsdFN5bmNcclxuICAgICAgICAgICAgOiBkZWZhdWx0QXN5bmM7XHJcbn1cclxuZXhwb3J0cy5idWlsZCA9IGJ1aWxkO1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5leHBvcnRzLmJ1aWxkID0gdm9pZCAwO1xyXG5jb25zdCBmc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJmc1wiKSk7XHJcbmNvbnN0IHJlYWRkaXJPcHRzID0geyB3aXRoRmlsZVR5cGVzOiB0cnVlIH07XHJcbmNvbnN0IHdhbGtBc3luYyA9IChzdGF0ZSwgZGlyZWN0b3J5UGF0aCwgY3VycmVudERlcHRoLCBjYWxsYmFjaykgPT4ge1xyXG4gICAgc3RhdGUucXVldWUuZW5xdWV1ZSgpO1xyXG4gICAgaWYgKGN1cnJlbnREZXB0aCA8IDApIHtcclxuICAgICAgICBzdGF0ZS5xdWV1ZS5kZXF1ZXVlKG51bGwsIHN0YXRlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBzdGF0ZS5jb3VudHMuZGlyZWN0b3JpZXMrKztcclxuICAgIC8vIFBlcmY6IE5vZGUgPj0gMTAgaW50cm9kdWNlZCB3aXRoRmlsZVR5cGVzIHRoYXQgaGVscHMgdXNcclxuICAgIC8vIHNraXAgYW4gZXh0cmEgZnMuc3RhdCBjYWxsLlxyXG4gICAgZnNfMS5kZWZhdWx0LnJlYWRkaXIoZGlyZWN0b3J5UGF0aCB8fCBcIi5cIiwgcmVhZGRpck9wdHMsIGZ1bmN0aW9uIHByb2Nlc3MoZXJyb3IsIGVudHJpZXMgPSBbXSkge1xyXG4gICAgICAgIGNhbGxiYWNrKGVudHJpZXMsIGRpcmVjdG9yeVBhdGgsIGN1cnJlbnREZXB0aCk7XHJcbiAgICAgICAgc3RhdGUucXVldWUuZGVxdWV1ZShzdGF0ZS5vcHRpb25zLnN1cHByZXNzRXJyb3JzID8gbnVsbCA6IGVycm9yLCBzdGF0ZSk7XHJcbiAgICB9KTtcclxufTtcclxuY29uc3Qgd2Fsa1N5bmMgPSAoc3RhdGUsIGRpcmVjdG9yeVBhdGgsIGN1cnJlbnREZXB0aCwgY2FsbGJhY2spID0+IHtcclxuICAgIGlmIChjdXJyZW50RGVwdGggPCAwKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgc3RhdGUuY291bnRzLmRpcmVjdG9yaWVzKys7XHJcbiAgICBsZXQgZW50cmllcyA9IFtdO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBlbnRyaWVzID0gZnNfMS5kZWZhdWx0LnJlYWRkaXJTeW5jKGRpcmVjdG9yeVBhdGggfHwgXCIuXCIsIHJlYWRkaXJPcHRzKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgaWYgKCFzdGF0ZS5vcHRpb25zLnN1cHByZXNzRXJyb3JzKVxyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgfVxyXG4gICAgY2FsbGJhY2soZW50cmllcywgZGlyZWN0b3J5UGF0aCwgY3VycmVudERlcHRoKTtcclxufTtcclxuZnVuY3Rpb24gYnVpbGQoaXNTeW5jaHJvbm91cykge1xyXG4gICAgcmV0dXJuIGlzU3luY2hyb25vdXMgPyB3YWxrU3luYyA6IHdhbGtBc3luYztcclxufVxyXG5leHBvcnRzLmJ1aWxkID0gYnVpbGQ7XHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmV4cG9ydHMuUXVldWUgPSB2b2lkIDA7XHJcbi8qKlxyXG4gKiBUaGlzIGlzIGEgY3VzdG9tIHN0YXRlbGVzcyBxdWV1ZSB0byB0cmFjayBjb25jdXJyZW50IGFzeW5jIGZzIGNhbGxzLlxyXG4gKiBJdCBpbmNyZW1lbnRzIGEgY291bnRlciB3aGVuZXZlciBhIGNhbGwgaXMgcXVldWVkIGFuZCBkZWNyZW1lbnRzIGl0XHJcbiAqIGFzIHNvb24gYXMgaXQgY29tcGxldGVzLiBXaGVuIHRoZSBjb3VudGVyIGhpdHMgMCwgaXQgY2FsbHMgb25RdWV1ZUVtcHR5LlxyXG4gKi9cclxuY2xhc3MgUXVldWUge1xyXG4gICAgb25RdWV1ZUVtcHR5O1xyXG4gICAgY291bnQgPSAwO1xyXG4gICAgY29uc3RydWN0b3Iob25RdWV1ZUVtcHR5KSB7XHJcbiAgICAgICAgdGhpcy5vblF1ZXVlRW1wdHkgPSBvblF1ZXVlRW1wdHk7XHJcbiAgICB9XHJcbiAgICBlbnF1ZXVlKCkge1xyXG4gICAgICAgIHRoaXMuY291bnQrKztcclxuICAgIH1cclxuICAgIGRlcXVldWUoZXJyb3IsIG91dHB1dCkge1xyXG4gICAgICAgIGlmICgtLXRoaXMuY291bnQgPT09IDAgfHwgZXJyb3IpXHJcbiAgICAgICAgICAgIHRoaXMub25RdWV1ZUVtcHR5KGVycm9yLCBvdXRwdXQpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuUXVldWUgPSBRdWV1ZTtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5Db3VudGVyID0gdm9pZCAwO1xyXG5jbGFzcyBDb3VudGVyIHtcclxuICAgIF9maWxlcyA9IDA7XHJcbiAgICBfZGlyZWN0b3JpZXMgPSAwO1xyXG4gICAgc2V0IGZpbGVzKG51bSkge1xyXG4gICAgICAgIHRoaXMuX2ZpbGVzID0gbnVtO1xyXG4gICAgfVxyXG4gICAgZ2V0IGZpbGVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9maWxlcztcclxuICAgIH1cclxuICAgIHNldCBkaXJlY3RvcmllcyhudW0pIHtcclxuICAgICAgICB0aGlzLl9kaXJlY3RvcmllcyA9IG51bTtcclxuICAgIH1cclxuICAgIGdldCBkaXJlY3RvcmllcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGlyZWN0b3JpZXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBgZGlyZWN0b3JpZXNgIGluc3RlYWRcclxuICAgICAqL1xyXG4gICAgLyogYzggaWdub3JlIG5leHQgMyAqL1xyXG4gICAgZ2V0IGRpcnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RpcmVjdG9yaWVzO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuQ291bnRlciA9IENvdW50ZXI7XHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xyXG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcclxuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KSk7XHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufSk7XHJcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmV4cG9ydHMuV2Fsa2VyID0gdm9pZCAwO1xyXG5jb25zdCBwYXRoXzEgPSByZXF1aXJlKFwicGF0aFwiKTtcclxuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcclxuY29uc3Qgam9pblBhdGggPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vZnVuY3Rpb25zL2pvaW4tcGF0aFwiKSk7XHJcbmNvbnN0IHB1c2hEaXJlY3RvcnkgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vZnVuY3Rpb25zL3B1c2gtZGlyZWN0b3J5XCIpKTtcclxuY29uc3QgcHVzaEZpbGUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vZnVuY3Rpb25zL3B1c2gtZmlsZVwiKSk7XHJcbmNvbnN0IGdldEFycmF5ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2Z1bmN0aW9ucy9nZXQtYXJyYXlcIikpO1xyXG5jb25zdCBncm91cEZpbGVzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2Z1bmN0aW9ucy9ncm91cC1maWxlc1wiKSk7XHJcbmNvbnN0IHJlc29sdmVTeW1saW5rID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2Z1bmN0aW9ucy9yZXNvbHZlLXN5bWxpbmtcIikpO1xyXG5jb25zdCBpbnZva2VDYWxsYmFjayA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9mdW5jdGlvbnMvaW52b2tlLWNhbGxiYWNrXCIpKTtcclxuY29uc3Qgd2Fsa0RpcmVjdG9yeSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9mdW5jdGlvbnMvd2Fsay1kaXJlY3RvcnlcIikpO1xyXG5jb25zdCBxdWV1ZV8xID0gcmVxdWlyZShcIi4vcXVldWVcIik7XHJcbmNvbnN0IGNvdW50ZXJfMSA9IHJlcXVpcmUoXCIuL2NvdW50ZXJcIik7XHJcbmNsYXNzIFdhbGtlciB7XHJcbiAgICByb290O1xyXG4gICAgaXNTeW5jaHJvbm91cztcclxuICAgIHN0YXRlO1xyXG4gICAgam9pblBhdGg7XHJcbiAgICBwdXNoRGlyZWN0b3J5O1xyXG4gICAgcHVzaEZpbGU7XHJcbiAgICBnZXRBcnJheTtcclxuICAgIGdyb3VwRmlsZXM7XHJcbiAgICByZXNvbHZlU3ltbGluaztcclxuICAgIHdhbGtEaXJlY3Rvcnk7XHJcbiAgICBjYWxsYmFja0ludm9rZXI7XHJcbiAgICBjb25zdHJ1Y3Rvcihyb290LCBvcHRpb25zLCBjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuaXNTeW5jaHJvbm91cyA9ICFjYWxsYmFjaztcclxuICAgICAgICB0aGlzLmNhbGxiYWNrSW52b2tlciA9IGludm9rZUNhbGxiYWNrLmJ1aWxkKG9wdGlvbnMsIHRoaXMuaXNTeW5jaHJvbm91cyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgLy8gUGVyZjogd2UgZXhwbGljaXRseSB0ZWxsIHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSBmb3IgU3RyaW5nIGFycmF5c1xyXG4gICAgICAgICAgICBwYXRoczogW1wiXCJdLnNsaWNlKDAsIDApLFxyXG4gICAgICAgICAgICBncm91cHM6IFtdLFxyXG4gICAgICAgICAgICBjb3VudHM6IG5ldyBjb3VudGVyXzEuQ291bnRlcigpLFxyXG4gICAgICAgICAgICBvcHRpb25zLFxyXG4gICAgICAgICAgICBxdWV1ZTogbmV3IHF1ZXVlXzEuUXVldWUoKGVycm9yLCBzdGF0ZSkgPT4gdGhpcy5jYWxsYmFja0ludm9rZXIoc3RhdGUsIGVycm9yLCBjYWxsYmFjaykpLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5yb290ID0gdGhpcy5ub3JtYWxpemVQYXRoKHJvb3QpO1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICogUGVyZjogV2UgY29uZGl0aW9uYWxseSBjaGFuZ2UgZnVuY3Rpb25zIGFjY29yZGluZyB0byBvcHRpb25zLiBUaGlzIGdpdmVzIGEgc2xpZ2h0XHJcbiAgICAgICAgICogcGVyZm9ybWFuY2UgYm9vc3QuIFNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc28gc21hbGwsIHRoZXkgYXJlIGF1dG9tYXRpY2FsbHkgaW5saW5lZFxyXG4gICAgICAgICAqIGJ5IHRoZSBqYXZhc2NyaXB0IGVuZ2luZSBzbyB0aGVyZSdzIG5vIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQgKGluIG1vc3QgY2FzZXMpLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuam9pblBhdGggPSBqb2luUGF0aC5idWlsZCh0aGlzLnJvb3QsIG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMucHVzaERpcmVjdG9yeSA9IHB1c2hEaXJlY3RvcnkuYnVpbGQob3B0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5wdXNoRmlsZSA9IHB1c2hGaWxlLmJ1aWxkKG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuZ2V0QXJyYXkgPSBnZXRBcnJheS5idWlsZChvcHRpb25zKTtcclxuICAgICAgICB0aGlzLmdyb3VwRmlsZXMgPSBncm91cEZpbGVzLmJ1aWxkKG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMucmVzb2x2ZVN5bWxpbmsgPSByZXNvbHZlU3ltbGluay5idWlsZChvcHRpb25zLCB0aGlzLmlzU3luY2hyb25vdXMpO1xyXG4gICAgICAgIHRoaXMud2Fsa0RpcmVjdG9yeSA9IHdhbGtEaXJlY3RvcnkuYnVpbGQodGhpcy5pc1N5bmNocm9ub3VzKTtcclxuICAgIH1cclxuICAgIHN0YXJ0KCkge1xyXG4gICAgICAgIHRoaXMud2Fsa0RpcmVjdG9yeSh0aGlzLnN0YXRlLCB0aGlzLnJvb3QsIHRoaXMuc3RhdGUub3B0aW9ucy5tYXhEZXB0aCwgdGhpcy53YWxrKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1N5bmNocm9ub3VzID8gdGhpcy5jYWxsYmFja0ludm9rZXIodGhpcy5zdGF0ZSwgbnVsbCkgOiBudWxsO1xyXG4gICAgfVxyXG4gICAgbm9ybWFsaXplUGF0aChwYXRoKSB7XHJcbiAgICAgICAgY29uc3QgeyByZXNvbHZlUGF0aHMsIG5vcm1hbGl6ZVBhdGgsIHBhdGhTZXBhcmF0b3IgfSA9IHRoaXMuc3RhdGUub3B0aW9ucztcclxuICAgICAgICBjb25zdCBwYXRoTmVlZHNDbGVhbmluZyA9IChwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCIgJiYgcGF0aC5pbmNsdWRlcyhcIi9cIikpIHx8XHJcbiAgICAgICAgICAgIHBhdGguc3RhcnRzV2l0aChcIi5cIik7XHJcbiAgICAgICAgaWYgKHJlc29sdmVQYXRocylcclxuICAgICAgICAgICAgcGF0aCA9ICgwLCBwYXRoXzEucmVzb2x2ZSkocGF0aCk7XHJcbiAgICAgICAgaWYgKG5vcm1hbGl6ZVBhdGggfHwgcGF0aE5lZWRzQ2xlYW5pbmcpXHJcbiAgICAgICAgICAgIHBhdGggPSAoMCwgdXRpbHNfMS5jbGVhblBhdGgpKHBhdGgpO1xyXG4gICAgICAgIGlmIChwYXRoID09PSBcIi5cIilcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgY29uc3QgbmVlZHNTZXBlcmF0b3IgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV0gIT09IHBhdGhTZXBhcmF0b3I7XHJcbiAgICAgICAgcmV0dXJuICgwLCB1dGlsc18xLmNvbnZlcnRTbGFzaGVzKShuZWVkc1NlcGVyYXRvciA/IHBhdGggKyBwYXRoU2VwYXJhdG9yIDogcGF0aCwgcGF0aFNlcGFyYXRvcik7XHJcbiAgICB9XHJcbiAgICB3YWxrID0gKGVudHJpZXMsIGRpcmVjdG9yeVBhdGgsIGRlcHRoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBwYXRocywgb3B0aW9uczogeyBmaWx0ZXJzLCByZXNvbHZlU3ltbGlua3MsIGV4Y2x1ZGUsIG1heEZpbGVzLCBzaWduYWwgfSwgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgaWYgKChzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpIHx8IChtYXhGaWxlcyAmJiBwYXRocy5sZW5ndGggPiBtYXhGaWxlcykpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB0aGlzLnB1c2hEaXJlY3RvcnkoZGlyZWN0b3J5UGF0aCwgcGF0aHMsIGZpbHRlcnMpO1xyXG4gICAgICAgIGNvbnN0IGZpbGVzID0gdGhpcy5nZXRBcnJheSh0aGlzLnN0YXRlLnBhdGhzKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzW2ldO1xyXG4gICAgICAgICAgICBpZiAoZW50cnkuaXNGaWxlKCkgfHwgKGVudHJ5LmlzU3ltYm9saWNMaW5rKCkgJiYgIXJlc29sdmVTeW1saW5rcykpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVuYW1lID0gdGhpcy5qb2luUGF0aChlbnRyeS5uYW1lLCBkaXJlY3RvcnlQYXRoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucHVzaEZpbGUoZmlsZW5hbWUsIGZpbGVzLCB0aGlzLnN0YXRlLmNvdW50cywgZmlsdGVycyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBhdGggPSBqb2luUGF0aC5qb2luRGlyZWN0b3J5UGF0aChlbnRyeS5uYW1lLCBkaXJlY3RvcnlQYXRoLCB0aGlzLnN0YXRlLm9wdGlvbnMucGF0aFNlcGFyYXRvcik7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhjbHVkZSAmJiBleGNsdWRlKGVudHJ5Lm5hbWUsIHBhdGgpKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy53YWxrRGlyZWN0b3J5KHRoaXMuc3RhdGUsIHBhdGgsIGRlcHRoIC0gMSwgdGhpcy53YWxrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChlbnRyeS5pc1N5bWJvbGljTGluaygpICYmIHJlc29sdmVTeW1saW5rcykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBhdGggPSBqb2luUGF0aC5qb2luRGlyZWN0b3J5UGF0aChlbnRyeS5uYW1lLCBkaXJlY3RvcnlQYXRoLCB0aGlzLnN0YXRlLm9wdGlvbnMucGF0aFNlcGFyYXRvcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVTeW1saW5rKHBhdGgsIHRoaXMuc3RhdGUsIChzdGF0LCByZXNvbHZlZFBhdGgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkUGF0aCA9IHRoaXMubm9ybWFsaXplUGF0aChyZXNvbHZlZFBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhjbHVkZSAmJiBleGNsdWRlKGVudHJ5Lm5hbWUsIHJlc29sdmVkUGF0aCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2Fsa0RpcmVjdG9yeSh0aGlzLnN0YXRlLCByZXNvbHZlZFBhdGgsIGRlcHRoIC0gMSwgdGhpcy53YWxrKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaEZpbGUocmVzb2x2ZWRQYXRoLCBmaWxlcywgdGhpcy5zdGF0ZS5jb3VudHMsIGZpbHRlcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ3JvdXBGaWxlcyh0aGlzLnN0YXRlLmdyb3VwcywgZGlyZWN0b3J5UGF0aCwgZmlsZXMpO1xyXG4gICAgfTtcclxufVxyXG5leHBvcnRzLldhbGtlciA9IFdhbGtlcjtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5jYWxsYmFjayA9IGV4cG9ydHMucHJvbWlzZSA9IHZvaWQgMDtcclxuY29uc3Qgd2Fsa2VyXzEgPSByZXF1aXJlKFwiLi93YWxrZXJcIik7XHJcbmZ1bmN0aW9uIHByb21pc2Uocm9vdCwgb3B0aW9ucykge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBjYWxsYmFjayhyb290LCBvcHRpb25zLCAoZXJyLCBvdXRwdXQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycilcclxuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgcmVzb2x2ZShvdXRwdXQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuZXhwb3J0cy5wcm9taXNlID0gcHJvbWlzZTtcclxuZnVuY3Rpb24gY2FsbGJhY2socm9vdCwgb3B0aW9ucywgY2FsbGJhY2spIHtcclxuICAgIGxldCB3YWxrZXIgPSBuZXcgd2Fsa2VyXzEuV2Fsa2VyKHJvb3QsIG9wdGlvbnMsIGNhbGxiYWNrKTtcclxuICAgIHdhbGtlci5zdGFydCgpO1xyXG59XHJcbmV4cG9ydHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5zeW5jID0gdm9pZCAwO1xyXG5jb25zdCB3YWxrZXJfMSA9IHJlcXVpcmUoXCIuL3dhbGtlclwiKTtcclxuZnVuY3Rpb24gc3luYyhyb290LCBvcHRpb25zKSB7XHJcbiAgICBjb25zdCB3YWxrZXIgPSBuZXcgd2Fsa2VyXzEuV2Fsa2VyKHJvb3QsIG9wdGlvbnMpO1xyXG4gICAgcmV0dXJuIHdhbGtlci5zdGFydCgpO1xyXG59XHJcbmV4cG9ydHMuc3luYyA9IHN5bmM7XHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmV4cG9ydHMuQVBJQnVpbGRlciA9IHZvaWQgMDtcclxuY29uc3QgYXN5bmNfMSA9IHJlcXVpcmUoXCIuLi9hcGkvYXN5bmNcIik7XHJcbmNvbnN0IHN5bmNfMSA9IHJlcXVpcmUoXCIuLi9hcGkvc3luY1wiKTtcclxuY2xhc3MgQVBJQnVpbGRlciB7XHJcbiAgICByb290O1xyXG4gICAgb3B0aW9ucztcclxuICAgIGNvbnN0cnVjdG9yKHJvb3QsIG9wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLnJvb3QgPSByb290O1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICB9XHJcbiAgICB3aXRoUHJvbWlzZSgpIHtcclxuICAgICAgICByZXR1cm4gKDAsIGFzeW5jXzEucHJvbWlzZSkodGhpcy5yb290LCB0aGlzLm9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgd2l0aENhbGxiYWNrKGNiKSB7XHJcbiAgICAgICAgKDAsIGFzeW5jXzEuY2FsbGJhY2spKHRoaXMucm9vdCwgdGhpcy5vcHRpb25zLCBjYik7XHJcbiAgICB9XHJcbiAgICBzeW5jKCkge1xyXG4gICAgICAgIHJldHVybiAoMCwgc3luY18xLnN5bmMpKHRoaXMucm9vdCwgdGhpcy5vcHRpb25zKTtcclxuICAgIH1cclxufVxyXG5leHBvcnRzLkFQSUJ1aWxkZXIgPSBBUElCdWlsZGVyO1xyXG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5jb25zdCBXSU5fU0xBU0ggPSAnXFxcXFxcXFwvJztcbmNvbnN0IFdJTl9OT19TTEFTSCA9IGBbXiR7V0lOX1NMQVNIfV1gO1xuXG4vKipcbiAqIFBvc2l4IGdsb2IgcmVnZXhcbiAqL1xuXG5jb25zdCBET1RfTElURVJBTCA9ICdcXFxcLic7XG5jb25zdCBQTFVTX0xJVEVSQUwgPSAnXFxcXCsnO1xuY29uc3QgUU1BUktfTElURVJBTCA9ICdcXFxcPyc7XG5jb25zdCBTTEFTSF9MSVRFUkFMID0gJ1xcXFwvJztcbmNvbnN0IE9ORV9DSEFSID0gJyg/PS4pJztcbmNvbnN0IFFNQVJLID0gJ1teL10nO1xuY29uc3QgRU5EX0FOQ0hPUiA9IGAoPzoke1NMQVNIX0xJVEVSQUx9fCQpYDtcbmNvbnN0IFNUQVJUX0FOQ0hPUiA9IGAoPzpefCR7U0xBU0hfTElURVJBTH0pYDtcbmNvbnN0IERPVFNfU0xBU0ggPSBgJHtET1RfTElURVJBTH17MSwyfSR7RU5EX0FOQ0hPUn1gO1xuY29uc3QgTk9fRE9UID0gYCg/ISR7RE9UX0xJVEVSQUx9KWA7XG5jb25zdCBOT19ET1RTID0gYCg/ISR7U1RBUlRfQU5DSE9SfSR7RE9UU19TTEFTSH0pYDtcbmNvbnN0IE5PX0RPVF9TTEFTSCA9IGAoPyEke0RPVF9MSVRFUkFMfXswLDF9JHtFTkRfQU5DSE9SfSlgO1xuY29uc3QgTk9fRE9UU19TTEFTSCA9IGAoPyEke0RPVFNfU0xBU0h9KWA7XG5jb25zdCBRTUFSS19OT19ET1QgPSBgW14uJHtTTEFTSF9MSVRFUkFMfV1gO1xuY29uc3QgU1RBUiA9IGAke1FNQVJLfSo/YDtcblxuY29uc3QgUE9TSVhfQ0hBUlMgPSB7XG4gIERPVF9MSVRFUkFMLFxuICBQTFVTX0xJVEVSQUwsXG4gIFFNQVJLX0xJVEVSQUwsXG4gIFNMQVNIX0xJVEVSQUwsXG4gIE9ORV9DSEFSLFxuICBRTUFSSyxcbiAgRU5EX0FOQ0hPUixcbiAgRE9UU19TTEFTSCxcbiAgTk9fRE9ULFxuICBOT19ET1RTLFxuICBOT19ET1RfU0xBU0gsXG4gIE5PX0RPVFNfU0xBU0gsXG4gIFFNQVJLX05PX0RPVCxcbiAgU1RBUixcbiAgU1RBUlRfQU5DSE9SXG59O1xuXG4vKipcbiAqIFdpbmRvd3MgZ2xvYiByZWdleFxuICovXG5cbmNvbnN0IFdJTkRPV1NfQ0hBUlMgPSB7XG4gIC4uLlBPU0lYX0NIQVJTLFxuXG4gIFNMQVNIX0xJVEVSQUw6IGBbJHtXSU5fU0xBU0h9XWAsXG4gIFFNQVJLOiBXSU5fTk9fU0xBU0gsXG4gIFNUQVI6IGAke1dJTl9OT19TTEFTSH0qP2AsXG4gIERPVFNfU0xBU0g6IGAke0RPVF9MSVRFUkFMfXsxLDJ9KD86WyR7V0lOX1NMQVNIfV18JClgLFxuICBOT19ET1Q6IGAoPyEke0RPVF9MSVRFUkFMfSlgLFxuICBOT19ET1RTOiBgKD8hKD86XnxbJHtXSU5fU0xBU0h9XSkke0RPVF9MSVRFUkFMfXsxLDJ9KD86WyR7V0lOX1NMQVNIfV18JCkpYCxcbiAgTk9fRE9UX1NMQVNIOiBgKD8hJHtET1RfTElURVJBTH17MCwxfSg/Olske1dJTl9TTEFTSH1dfCQpKWAsXG4gIE5PX0RPVFNfU0xBU0g6IGAoPyEke0RPVF9MSVRFUkFMfXsxLDJ9KD86WyR7V0lOX1NMQVNIfV18JCkpYCxcbiAgUU1BUktfTk9fRE9UOiBgW14uJHtXSU5fU0xBU0h9XWAsXG4gIFNUQVJUX0FOQ0hPUjogYCg/Ol58WyR7V0lOX1NMQVNIfV0pYCxcbiAgRU5EX0FOQ0hPUjogYCg/Olske1dJTl9TTEFTSH1dfCQpYFxufTtcblxuLyoqXG4gKiBQT1NJWCBCcmFja2V0IFJlZ2V4XG4gKi9cblxuY29uc3QgUE9TSVhfUkVHRVhfU09VUkNFID0ge1xuICBhbG51bTogJ2EtekEtWjAtOScsXG4gIGFscGhhOiAnYS16QS1aJyxcbiAgYXNjaWk6ICdcXFxceDAwLVxcXFx4N0YnLFxuICBibGFuazogJyBcXFxcdCcsXG4gIGNudHJsOiAnXFxcXHgwMC1cXFxceDFGXFxcXHg3RicsXG4gIGRpZ2l0OiAnMC05JyxcbiAgZ3JhcGg6ICdcXFxceDIxLVxcXFx4N0UnLFxuICBsb3dlcjogJ2EteicsXG4gIHByaW50OiAnXFxcXHgyMC1cXFxceDdFICcsXG4gIHB1bmN0OiAnXFxcXC0hXCIjJCUmXFwnKClcXFxcKissLi86Ozw9Pj9AW1xcXFxdXl9ge3x9ficsXG4gIHNwYWNlOiAnIFxcXFx0XFxcXHJcXFxcblxcXFx2XFxcXGYnLFxuICB1cHBlcjogJ0EtWicsXG4gIHdvcmQ6ICdBLVphLXowLTlfJyxcbiAgeGRpZ2l0OiAnQS1GYS1mMC05J1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIE1BWF9MRU5HVEg6IDEwMjQgKiA2NCxcbiAgUE9TSVhfUkVHRVhfU09VUkNFLFxuXG4gIC8vIHJlZ3VsYXIgZXhwcmVzc2lvbnNcbiAgUkVHRVhfQkFDS1NMQVNIOiAvXFxcXCg/IVsqKz9eJHt9KHwpW1xcXV0pL2csXG4gIFJFR0VYX05PTl9TUEVDSUFMX0NIQVJTOiAvXlteQCFbXFxdLiwkKis/Xnt9KCl8XFxcXC9dKy8sXG4gIFJFR0VYX1NQRUNJQUxfQ0hBUlM6IC9bLSorPy5eJHt9KHwpW1xcXV0vLFxuICBSRUdFWF9TUEVDSUFMX0NIQVJTX0JBQ0tSRUY6IC8oXFxcXD8pKChcXFcpKFxcMyopKS9nLFxuICBSRUdFWF9TUEVDSUFMX0NIQVJTX0dMT0JBTDogLyhbLSorPy5eJHt9KHwpW1xcXV0pL2csXG4gIFJFR0VYX1JFTU9WRV9CQUNLU0xBU0g6IC8oPzpcXFsuKj9bXlxcXFxdXFxdfFxcXFwoPz0uKSkvZyxcblxuICAvLyBSZXBsYWNlIGdsb2JzIHdpdGggZXF1aXZhbGVudCBwYXR0ZXJucyB0byByZWR1Y2UgcGFyc2luZyB0aW1lLlxuICBSRVBMQUNFTUVOVFM6IHtcbiAgICAnKioqJzogJyonLFxuICAgICcqKi8qKic6ICcqKicsXG4gICAgJyoqLyoqLyoqJzogJyoqJ1xuICB9LFxuXG4gIC8vIERpZ2l0c1xuICBDSEFSXzA6IDQ4LCAvKiAwICovXG4gIENIQVJfOTogNTcsIC8qIDkgKi9cblxuICAvLyBBbHBoYWJldCBjaGFycy5cbiAgQ0hBUl9VUFBFUkNBU0VfQTogNjUsIC8qIEEgKi9cbiAgQ0hBUl9MT1dFUkNBU0VfQTogOTcsIC8qIGEgKi9cbiAgQ0hBUl9VUFBFUkNBU0VfWjogOTAsIC8qIFogKi9cbiAgQ0hBUl9MT1dFUkNBU0VfWjogMTIyLCAvKiB6ICovXG5cbiAgQ0hBUl9MRUZUX1BBUkVOVEhFU0VTOiA0MCwgLyogKCAqL1xuICBDSEFSX1JJR0hUX1BBUkVOVEhFU0VTOiA0MSwgLyogKSAqL1xuXG4gIENIQVJfQVNURVJJU0s6IDQyLCAvKiAqICovXG5cbiAgLy8gTm9uLWFscGhhYmV0aWMgY2hhcnMuXG4gIENIQVJfQU1QRVJTQU5EOiAzOCwgLyogJiAqL1xuICBDSEFSX0FUOiA2NCwgLyogQCAqL1xuICBDSEFSX0JBQ0tXQVJEX1NMQVNIOiA5MiwgLyogXFwgKi9cbiAgQ0hBUl9DQVJSSUFHRV9SRVRVUk46IDEzLCAvKiBcXHIgKi9cbiAgQ0hBUl9DSVJDVU1GTEVYX0FDQ0VOVDogOTQsIC8qIF4gKi9cbiAgQ0hBUl9DT0xPTjogNTgsIC8qIDogKi9cbiAgQ0hBUl9DT01NQTogNDQsIC8qICwgKi9cbiAgQ0hBUl9ET1Q6IDQ2LCAvKiAuICovXG4gIENIQVJfRE9VQkxFX1FVT1RFOiAzNCwgLyogXCIgKi9cbiAgQ0hBUl9FUVVBTDogNjEsIC8qID0gKi9cbiAgQ0hBUl9FWENMQU1BVElPTl9NQVJLOiAzMywgLyogISAqL1xuICBDSEFSX0ZPUk1fRkVFRDogMTIsIC8qIFxcZiAqL1xuICBDSEFSX0ZPUldBUkRfU0xBU0g6IDQ3LCAvKiAvICovXG4gIENIQVJfR1JBVkVfQUNDRU5UOiA5NiwgLyogYCAqL1xuICBDSEFSX0hBU0g6IDM1LCAvKiAjICovXG4gIENIQVJfSFlQSEVOX01JTlVTOiA0NSwgLyogLSAqL1xuICBDSEFSX0xFRlRfQU5HTEVfQlJBQ0tFVDogNjAsIC8qIDwgKi9cbiAgQ0hBUl9MRUZUX0NVUkxZX0JSQUNFOiAxMjMsIC8qIHsgKi9cbiAgQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUOiA5MSwgLyogWyAqL1xuICBDSEFSX0xJTkVfRkVFRDogMTAsIC8qIFxcbiAqL1xuICBDSEFSX05PX0JSRUFLX1NQQUNFOiAxNjAsIC8qIFxcdTAwQTAgKi9cbiAgQ0hBUl9QRVJDRU5UOiAzNywgLyogJSAqL1xuICBDSEFSX1BMVVM6IDQzLCAvKiArICovXG4gIENIQVJfUVVFU1RJT05fTUFSSzogNjMsIC8qID8gKi9cbiAgQ0hBUl9SSUdIVF9BTkdMRV9CUkFDS0VUOiA2MiwgLyogPiAqL1xuICBDSEFSX1JJR0hUX0NVUkxZX0JSQUNFOiAxMjUsIC8qIH0gKi9cbiAgQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVDogOTMsIC8qIF0gKi9cbiAgQ0hBUl9TRU1JQ09MT046IDU5LCAvKiA7ICovXG4gIENIQVJfU0lOR0xFX1FVT1RFOiAzOSwgLyogJyAqL1xuICBDSEFSX1NQQUNFOiAzMiwgLyogICAqL1xuICBDSEFSX1RBQjogOSwgLyogXFx0ICovXG4gIENIQVJfVU5ERVJTQ09SRTogOTUsIC8qIF8gKi9cbiAgQ0hBUl9WRVJUSUNBTF9MSU5FOiAxMjQsIC8qIHwgKi9cbiAgQ0hBUl9aRVJPX1dJRFRIX05PQlJFQUtfU1BBQ0U6IDY1Mjc5LCAvKiBcXHVGRUZGICovXG5cbiAgU0VQOiBwYXRoLnNlcCxcblxuICAvKipcbiAgICogQ3JlYXRlIEVYVEdMT0JfQ0hBUlNcbiAgICovXG5cbiAgZXh0Z2xvYkNoYXJzKGNoYXJzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICchJzogeyB0eXBlOiAnbmVnYXRlJywgb3BlbjogJyg/Oig/ISg/OicsIGNsb3NlOiBgKSkke2NoYXJzLlNUQVJ9KWAgfSxcbiAgICAgICc/JzogeyB0eXBlOiAncW1hcmsnLCBvcGVuOiAnKD86JywgY2xvc2U6ICcpPycgfSxcbiAgICAgICcrJzogeyB0eXBlOiAncGx1cycsIG9wZW46ICcoPzonLCBjbG9zZTogJykrJyB9LFxuICAgICAgJyonOiB7IHR5cGU6ICdzdGFyJywgb3BlbjogJyg/OicsIGNsb3NlOiAnKSonIH0sXG4gICAgICAnQCc6IHsgdHlwZTogJ2F0Jywgb3BlbjogJyg/OicsIGNsb3NlOiAnKScgfVxuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBHTE9CX0NIQVJTXG4gICAqL1xuXG4gIGdsb2JDaGFycyh3aW4zMikge1xuICAgIHJldHVybiB3aW4zMiA9PT0gdHJ1ZSA/IFdJTkRPV1NfQ0hBUlMgOiBQT1NJWF9DSEFSUztcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IHdpbjMyID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcbmNvbnN0IHtcbiAgUkVHRVhfQkFDS1NMQVNILFxuICBSRUdFWF9SRU1PVkVfQkFDS1NMQVNILFxuICBSRUdFWF9TUEVDSUFMX0NIQVJTLFxuICBSRUdFWF9TUEVDSUFMX0NIQVJTX0dMT0JBTFxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG5cbmV4cG9ydHMuaXNPYmplY3QgPSB2YWwgPT4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCk7XG5leHBvcnRzLmhhc1JlZ2V4Q2hhcnMgPSBzdHIgPT4gUkVHRVhfU1BFQ0lBTF9DSEFSUy50ZXN0KHN0cik7XG5leHBvcnRzLmlzUmVnZXhDaGFyID0gc3RyID0+IHN0ci5sZW5ndGggPT09IDEgJiYgZXhwb3J0cy5oYXNSZWdleENoYXJzKHN0cik7XG5leHBvcnRzLmVzY2FwZVJlZ2V4ID0gc3RyID0+IHN0ci5yZXBsYWNlKFJFR0VYX1NQRUNJQUxfQ0hBUlNfR0xPQkFMLCAnXFxcXCQxJyk7XG5leHBvcnRzLnRvUG9zaXhTbGFzaGVzID0gc3RyID0+IHN0ci5yZXBsYWNlKFJFR0VYX0JBQ0tTTEFTSCwgJy8nKTtcblxuZXhwb3J0cy5yZW1vdmVCYWNrc2xhc2hlcyA9IHN0ciA9PiB7XG4gIHJldHVybiBzdHIucmVwbGFjZShSRUdFWF9SRU1PVkVfQkFDS1NMQVNILCBtYXRjaCA9PiB7XG4gICAgcmV0dXJuIG1hdGNoID09PSAnXFxcXCcgPyAnJyA6IG1hdGNoO1xuICB9KTtcbn07XG5cbmV4cG9ydHMuc3VwcG9ydHNMb29rYmVoaW5kcyA9ICgpID0+IHtcbiAgY29uc3Qgc2VncyA9IHByb2Nlc3MudmVyc2lvbi5zbGljZSgxKS5zcGxpdCgnLicpLm1hcChOdW1iZXIpO1xuICBpZiAoc2Vncy5sZW5ndGggPT09IDMgJiYgc2Vnc1swXSA+PSA5IHx8IChzZWdzWzBdID09PSA4ICYmIHNlZ3NbMV0gPj0gMTApKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0cy5pc1dpbmRvd3MgPSBvcHRpb25zID0+IHtcbiAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMud2luZG93cyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMud2luZG93cztcbiAgfVxuICByZXR1cm4gd2luMzIgPT09IHRydWUgfHwgcGF0aC5zZXAgPT09ICdcXFxcJztcbn07XG5cbmV4cG9ydHMuZXNjYXBlTGFzdCA9IChpbnB1dCwgY2hhciwgbGFzdElkeCkgPT4ge1xuICBjb25zdCBpZHggPSBpbnB1dC5sYXN0SW5kZXhPZihjaGFyLCBsYXN0SWR4KTtcbiAgaWYgKGlkeCA9PT0gLTEpIHJldHVybiBpbnB1dDtcbiAgaWYgKGlucHV0W2lkeCAtIDFdID09PSAnXFxcXCcpIHJldHVybiBleHBvcnRzLmVzY2FwZUxhc3QoaW5wdXQsIGNoYXIsIGlkeCAtIDEpO1xuICByZXR1cm4gYCR7aW5wdXQuc2xpY2UoMCwgaWR4KX1cXFxcJHtpbnB1dC5zbGljZShpZHgpfWA7XG59O1xuXG5leHBvcnRzLnJlbW92ZVByZWZpeCA9IChpbnB1dCwgc3RhdGUgPSB7fSkgPT4ge1xuICBsZXQgb3V0cHV0ID0gaW5wdXQ7XG4gIGlmIChvdXRwdXQuc3RhcnRzV2l0aCgnLi8nKSkge1xuICAgIG91dHB1dCA9IG91dHB1dC5zbGljZSgyKTtcbiAgICBzdGF0ZS5wcmVmaXggPSAnLi8nO1xuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG5leHBvcnRzLndyYXBPdXRwdXQgPSAoaW5wdXQsIHN0YXRlID0ge30sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBwcmVwZW5kID0gb3B0aW9ucy5jb250YWlucyA/ICcnIDogJ14nO1xuICBjb25zdCBhcHBlbmQgPSBvcHRpb25zLmNvbnRhaW5zID8gJycgOiAnJCc7XG5cbiAgbGV0IG91dHB1dCA9IGAke3ByZXBlbmR9KD86JHtpbnB1dH0pJHthcHBlbmR9YDtcbiAgaWYgKHN0YXRlLm5lZ2F0ZWQgPT09IHRydWUpIHtcbiAgICBvdXRwdXQgPSBgKD86Xig/ISR7b3V0cHV0fSkuKiQpYDtcbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5jb25zdCB7XG4gIENIQVJfQVNURVJJU0ssICAgICAgICAgICAgIC8qICogKi9cbiAgQ0hBUl9BVCwgICAgICAgICAgICAgICAgICAgLyogQCAqL1xuICBDSEFSX0JBQ0tXQVJEX1NMQVNILCAgICAgICAvKiBcXCAqL1xuICBDSEFSX0NPTU1BLCAgICAgICAgICAgICAgICAvKiAsICovXG4gIENIQVJfRE9ULCAgICAgICAgICAgICAgICAgIC8qIC4gKi9cbiAgQ0hBUl9FWENMQU1BVElPTl9NQVJLLCAgICAgLyogISAqL1xuICBDSEFSX0ZPUldBUkRfU0xBU0gsICAgICAgICAvKiAvICovXG4gIENIQVJfTEVGVF9DVVJMWV9CUkFDRSwgICAgIC8qIHsgKi9cbiAgQ0hBUl9MRUZUX1BBUkVOVEhFU0VTLCAgICAgLyogKCAqL1xuICBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQsICAvKiBbICovXG4gIENIQVJfUExVUywgICAgICAgICAgICAgICAgIC8qICsgKi9cbiAgQ0hBUl9RVUVTVElPTl9NQVJLLCAgICAgICAgLyogPyAqL1xuICBDSEFSX1JJR0hUX0NVUkxZX0JSQUNFLCAgICAvKiB9ICovXG4gIENIQVJfUklHSFRfUEFSRU5USEVTRVMsICAgIC8qICkgKi9cbiAgQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCAgLyogXSAqL1xufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG5cbmNvbnN0IGlzUGF0aFNlcGFyYXRvciA9IGNvZGUgPT4ge1xuICByZXR1cm4gY29kZSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIIHx8IGNvZGUgPT09IENIQVJfQkFDS1dBUkRfU0xBU0g7XG59O1xuXG5jb25zdCBkZXB0aCA9IHRva2VuID0+IHtcbiAgaWYgKHRva2VuLmlzUHJlZml4ICE9PSB0cnVlKSB7XG4gICAgdG9rZW4uZGVwdGggPSB0b2tlbi5pc0dsb2JzdGFyID8gSW5maW5pdHkgOiAxO1xuICB9XG59O1xuXG4vKipcbiAqIFF1aWNrbHkgc2NhbnMgYSBnbG9iIHBhdHRlcm4gYW5kIHJldHVybnMgYW4gb2JqZWN0IHdpdGggYSBoYW5kZnVsIG9mXG4gKiB1c2VmdWwgcHJvcGVydGllcywgbGlrZSBgaXNHbG9iYCwgYHBhdGhgICh0aGUgbGVhZGluZyBub24tZ2xvYiwgaWYgaXQgZXhpc3RzKSxcbiAqIGBnbG9iYCAodGhlIGFjdHVhbCBwYXR0ZXJuKSwgYG5lZ2F0ZWRgICh0cnVlIGlmIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIGAhYCBidXQgbm90XG4gKiB3aXRoIGAhKGApIGFuZCBgbmVnYXRlZEV4dGdsb2JgICh0cnVlIGlmIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIGAhKGApLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwbSA9IHJlcXVpcmUoJ3BpY29tYXRjaCcpO1xuICogY29uc29sZS5sb2cocG0uc2NhbignZm9vL2Jhci8qLmpzJykpO1xuICogeyBpc0dsb2I6IHRydWUsIGlucHV0OiAnZm9vL2Jhci8qLmpzJywgYmFzZTogJ2Zvby9iYXInLCBnbG9iOiAnKi5qcycgfVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHN0cmBcbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0b2tlbnMgYW5kIHJlZ2V4IHNvdXJjZSBzdHJpbmcuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmNvbnN0IHNjYW4gPSAoaW5wdXQsIG9wdGlvbnMpID0+IHtcbiAgY29uc3Qgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgY29uc3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoIC0gMTtcbiAgY29uc3Qgc2NhblRvRW5kID0gb3B0cy5wYXJ0cyA9PT0gdHJ1ZSB8fCBvcHRzLnNjYW5Ub0VuZCA9PT0gdHJ1ZTtcbiAgY29uc3Qgc2xhc2hlcyA9IFtdO1xuICBjb25zdCB0b2tlbnMgPSBbXTtcbiAgY29uc3QgcGFydHMgPSBbXTtcblxuICBsZXQgc3RyID0gaW5wdXQ7XG4gIGxldCBpbmRleCA9IC0xO1xuICBsZXQgc3RhcnQgPSAwO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgbGV0IGlzQnJhY2UgPSBmYWxzZTtcbiAgbGV0IGlzQnJhY2tldCA9IGZhbHNlO1xuICBsZXQgaXNHbG9iID0gZmFsc2U7XG4gIGxldCBpc0V4dGdsb2IgPSBmYWxzZTtcbiAgbGV0IGlzR2xvYnN0YXIgPSBmYWxzZTtcbiAgbGV0IGJyYWNlRXNjYXBlZCA9IGZhbHNlO1xuICBsZXQgYmFja3NsYXNoZXMgPSBmYWxzZTtcbiAgbGV0IG5lZ2F0ZWQgPSBmYWxzZTtcbiAgbGV0IG5lZ2F0ZWRFeHRnbG9iID0gZmFsc2U7XG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlO1xuICBsZXQgYnJhY2VzID0gMDtcbiAgbGV0IHByZXY7XG4gIGxldCBjb2RlO1xuICBsZXQgdG9rZW4gPSB7IHZhbHVlOiAnJywgZGVwdGg6IDAsIGlzR2xvYjogZmFsc2UgfTtcblxuICBjb25zdCBlb3MgPSAoKSA9PiBpbmRleCA+PSBsZW5ndGg7XG4gIGNvbnN0IHBlZWsgPSAoKSA9PiBzdHIuY2hhckNvZGVBdChpbmRleCArIDEpO1xuICBjb25zdCBhZHZhbmNlID0gKCkgPT4ge1xuICAgIHByZXYgPSBjb2RlO1xuICAgIHJldHVybiBzdHIuY2hhckNvZGVBdCgrK2luZGV4KTtcbiAgfTtcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBjb2RlID0gYWR2YW5jZSgpO1xuICAgIGxldCBuZXh0O1xuXG4gICAgaWYgKGNvZGUgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHtcbiAgICAgIGJhY2tzbGFzaGVzID0gdG9rZW4uYmFja3NsYXNoZXMgPSB0cnVlO1xuICAgICAgY29kZSA9IGFkdmFuY2UoKTtcblxuICAgICAgaWYgKGNvZGUgPT09IENIQVJfTEVGVF9DVVJMWV9CUkFDRSkge1xuICAgICAgICBicmFjZUVzY2FwZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGJyYWNlRXNjYXBlZCA9PT0gdHJ1ZSB8fCBjb2RlID09PSBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0UpIHtcbiAgICAgIGJyYWNlcysrO1xuXG4gICAgICB3aGlsZSAoZW9zKCkgIT09IHRydWUgJiYgKGNvZGUgPSBhZHZhbmNlKCkpKSB7XG4gICAgICAgIGlmIChjb2RlID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSB7XG4gICAgICAgICAgYmFja3NsYXNoZXMgPSB0b2tlbi5iYWNrc2xhc2hlcyA9IHRydWU7XG4gICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvZGUgPT09IENIQVJfTEVGVF9DVVJMWV9CUkFDRSkge1xuICAgICAgICAgIGJyYWNlcysrO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJyYWNlRXNjYXBlZCAhPT0gdHJ1ZSAmJiBjb2RlID09PSBDSEFSX0RPVCAmJiAoY29kZSA9IGFkdmFuY2UoKSkgPT09IENIQVJfRE9UKSB7XG4gICAgICAgICAgaXNCcmFjZSA9IHRva2VuLmlzQnJhY2UgPSB0cnVlO1xuICAgICAgICAgIGlzR2xvYiA9IHRva2VuLmlzR2xvYiA9IHRydWU7XG4gICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKHNjYW5Ub0VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYnJhY2VFc2NhcGVkICE9PSB0cnVlICYmIGNvZGUgPT09IENIQVJfQ09NTUEpIHtcbiAgICAgICAgICBpc0JyYWNlID0gdG9rZW4uaXNCcmFjZSA9IHRydWU7XG4gICAgICAgICAgaXNHbG9iID0gdG9rZW4uaXNHbG9iID0gdHJ1ZTtcbiAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2RlID09PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNFKSB7XG4gICAgICAgICAgYnJhY2VzLS07XG5cbiAgICAgICAgICBpZiAoYnJhY2VzID09PSAwKSB7XG4gICAgICAgICAgICBicmFjZUVzY2FwZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlzQnJhY2UgPSB0b2tlbi5pc0JyYWNlID0gdHJ1ZTtcbiAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIKSB7XG4gICAgICBzbGFzaGVzLnB1c2goaW5kZXgpO1xuICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgdG9rZW4gPSB7IHZhbHVlOiAnJywgZGVwdGg6IDAsIGlzR2xvYjogZmFsc2UgfTtcblxuICAgICAgaWYgKGZpbmlzaGVkID09PSB0cnVlKSBjb250aW51ZTtcbiAgICAgIGlmIChwcmV2ID09PSBDSEFSX0RPVCAmJiBpbmRleCA9PT0gKHN0YXJ0ICsgMSkpIHtcbiAgICAgICAgc3RhcnQgKz0gMjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGxhc3RJbmRleCA9IGluZGV4ICsgMTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChvcHRzLm5vZXh0ICE9PSB0cnVlKSB7XG4gICAgICBjb25zdCBpc0V4dGdsb2JDaGFyID0gY29kZSA9PT0gQ0hBUl9QTFVTXG4gICAgICAgIHx8IGNvZGUgPT09IENIQVJfQVRcbiAgICAgICAgfHwgY29kZSA9PT0gQ0hBUl9BU1RFUklTS1xuICAgICAgICB8fCBjb2RlID09PSBDSEFSX1FVRVNUSU9OX01BUktcbiAgICAgICAgfHwgY29kZSA9PT0gQ0hBUl9FWENMQU1BVElPTl9NQVJLO1xuXG4gICAgICBpZiAoaXNFeHRnbG9iQ2hhciA9PT0gdHJ1ZSAmJiBwZWVrKCkgPT09IENIQVJfTEVGVF9QQVJFTlRIRVNFUykge1xuICAgICAgICBpc0dsb2IgPSB0b2tlbi5pc0dsb2IgPSB0cnVlO1xuICAgICAgICBpc0V4dGdsb2IgPSB0b2tlbi5pc0V4dGdsb2IgPSB0cnVlO1xuICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgICAgIGlmIChjb2RlID09PSBDSEFSX0VYQ0xBTUFUSU9OX01BUksgJiYgaW5kZXggPT09IHN0YXJ0KSB7XG4gICAgICAgICAgbmVnYXRlZEV4dGdsb2IgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjYW5Ub0VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHdoaWxlIChlb3MoKSAhPT0gdHJ1ZSAmJiAoY29kZSA9IGFkdmFuY2UoKSkpIHtcbiAgICAgICAgICAgIGlmIChjb2RlID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSB7XG4gICAgICAgICAgICAgIGJhY2tzbGFzaGVzID0gdG9rZW4uYmFja3NsYXNoZXMgPSB0cnVlO1xuICAgICAgICAgICAgICBjb2RlID0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvZGUgPT09IENIQVJfUklHSFRfUEFSRU5USEVTRVMpIHtcbiAgICAgICAgICAgICAgaXNHbG9iID0gdG9rZW4uaXNHbG9iID0gdHJ1ZTtcbiAgICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPT09IENIQVJfQVNURVJJU0spIHtcbiAgICAgIGlmIChwcmV2ID09PSBDSEFSX0FTVEVSSVNLKSBpc0dsb2JzdGFyID0gdG9rZW4uaXNHbG9ic3RhciA9IHRydWU7XG4gICAgICBpc0dsb2IgPSB0b2tlbi5pc0dsb2IgPSB0cnVlO1xuICAgICAgZmluaXNoZWQgPSB0cnVlO1xuXG4gICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPT09IENIQVJfUVVFU1RJT05fTUFSSykge1xuICAgICAgaXNHbG9iID0gdG9rZW4uaXNHbG9iID0gdHJ1ZTtcbiAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKHNjYW5Ub0VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChjb2RlID09PSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQpIHtcbiAgICAgIHdoaWxlIChlb3MoKSAhPT0gdHJ1ZSAmJiAobmV4dCA9IGFkdmFuY2UoKSkpIHtcbiAgICAgICAgaWYgKG5leHQgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHtcbiAgICAgICAgICBiYWNrc2xhc2hlcyA9IHRva2VuLmJhY2tzbGFzaGVzID0gdHJ1ZTtcbiAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dCA9PT0gQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCkge1xuICAgICAgICAgIGlzQnJhY2tldCA9IHRva2VuLmlzQnJhY2tldCA9IHRydWU7XG4gICAgICAgICAgaXNHbG9iID0gdG9rZW4uaXNHbG9iID0gdHJ1ZTtcbiAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHNjYW5Ub0VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMubm9uZWdhdGUgIT09IHRydWUgJiYgY29kZSA9PT0gQ0hBUl9FWENMQU1BVElPTl9NQVJLICYmIGluZGV4ID09PSBzdGFydCkge1xuICAgICAgbmVnYXRlZCA9IHRva2VuLm5lZ2F0ZWQgPSB0cnVlO1xuICAgICAgc3RhcnQrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChvcHRzLm5vcGFyZW4gIT09IHRydWUgJiYgY29kZSA9PT0gQ0hBUl9MRUZUX1BBUkVOVEhFU0VTKSB7XG4gICAgICBpc0dsb2IgPSB0b2tlbi5pc0dsb2IgPSB0cnVlO1xuXG4gICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgIHdoaWxlIChlb3MoKSAhPT0gdHJ1ZSAmJiAoY29kZSA9IGFkdmFuY2UoKSkpIHtcbiAgICAgICAgICBpZiAoY29kZSA9PT0gQ0hBUl9MRUZUX1BBUkVOVEhFU0VTKSB7XG4gICAgICAgICAgICBiYWNrc2xhc2hlcyA9IHRva2VuLmJhY2tzbGFzaGVzID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvZGUgPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29kZSA9PT0gQ0hBUl9SSUdIVF9QQVJFTlRIRVNFUykge1xuICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGlzR2xvYiA9PT0gdHJ1ZSkge1xuICAgICAgZmluaXNoZWQgPSB0cnVlO1xuXG4gICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAob3B0cy5ub2V4dCA9PT0gdHJ1ZSkge1xuICAgIGlzRXh0Z2xvYiA9IGZhbHNlO1xuICAgIGlzR2xvYiA9IGZhbHNlO1xuICB9XG5cbiAgbGV0IGJhc2UgPSBzdHI7XG4gIGxldCBwcmVmaXggPSAnJztcbiAgbGV0IGdsb2IgPSAnJztcblxuICBpZiAoc3RhcnQgPiAwKSB7XG4gICAgcHJlZml4ID0gc3RyLnNsaWNlKDAsIHN0YXJ0KTtcbiAgICBzdHIgPSBzdHIuc2xpY2Uoc3RhcnQpO1xuICAgIGxhc3RJbmRleCAtPSBzdGFydDtcbiAgfVxuXG4gIGlmIChiYXNlICYmIGlzR2xvYiA9PT0gdHJ1ZSAmJiBsYXN0SW5kZXggPiAwKSB7XG4gICAgYmFzZSA9IHN0ci5zbGljZSgwLCBsYXN0SW5kZXgpO1xuICAgIGdsb2IgPSBzdHIuc2xpY2UobGFzdEluZGV4KTtcbiAgfSBlbHNlIGlmIChpc0dsb2IgPT09IHRydWUpIHtcbiAgICBiYXNlID0gJyc7XG4gICAgZ2xvYiA9IHN0cjtcbiAgfSBlbHNlIHtcbiAgICBiYXNlID0gc3RyO1xuICB9XG5cbiAgaWYgKGJhc2UgJiYgYmFzZSAhPT0gJycgJiYgYmFzZSAhPT0gJy8nICYmIGJhc2UgIT09IHN0cikge1xuICAgIGlmIChpc1BhdGhTZXBhcmF0b3IoYmFzZS5jaGFyQ29kZUF0KGJhc2UubGVuZ3RoIC0gMSkpKSB7XG4gICAgICBiYXNlID0gYmFzZS5zbGljZSgwLCAtMSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdHMudW5lc2NhcGUgPT09IHRydWUpIHtcbiAgICBpZiAoZ2xvYikgZ2xvYiA9IHV0aWxzLnJlbW92ZUJhY2tzbGFzaGVzKGdsb2IpO1xuXG4gICAgaWYgKGJhc2UgJiYgYmFja3NsYXNoZXMgPT09IHRydWUpIHtcbiAgICAgIGJhc2UgPSB1dGlscy5yZW1vdmVCYWNrc2xhc2hlcyhiYXNlKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdGF0ZSA9IHtcbiAgICBwcmVmaXgsXG4gICAgaW5wdXQsXG4gICAgc3RhcnQsXG4gICAgYmFzZSxcbiAgICBnbG9iLFxuICAgIGlzQnJhY2UsXG4gICAgaXNCcmFja2V0LFxuICAgIGlzR2xvYixcbiAgICBpc0V4dGdsb2IsXG4gICAgaXNHbG9ic3RhcixcbiAgICBuZWdhdGVkLFxuICAgIG5lZ2F0ZWRFeHRnbG9iXG4gIH07XG5cbiAgaWYgKG9wdHMudG9rZW5zID09PSB0cnVlKSB7XG4gICAgc3RhdGUubWF4RGVwdGggPSAwO1xuICAgIGlmICghaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgfVxuICAgIHN0YXRlLnRva2VucyA9IHRva2VucztcbiAgfVxuXG4gIGlmIChvcHRzLnBhcnRzID09PSB0cnVlIHx8IG9wdHMudG9rZW5zID09PSB0cnVlKSB7XG4gICAgbGV0IHByZXZJbmRleDtcblxuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHNsYXNoZXMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgY29uc3QgbiA9IHByZXZJbmRleCA/IHByZXZJbmRleCArIDEgOiBzdGFydDtcbiAgICAgIGNvbnN0IGkgPSBzbGFzaGVzW2lkeF07XG4gICAgICBjb25zdCB2YWx1ZSA9IGlucHV0LnNsaWNlKG4sIGkpO1xuICAgICAgaWYgKG9wdHMudG9rZW5zKSB7XG4gICAgICAgIGlmIChpZHggPT09IDAgJiYgc3RhcnQgIT09IDApIHtcbiAgICAgICAgICB0b2tlbnNbaWR4XS5pc1ByZWZpeCA9IHRydWU7XG4gICAgICAgICAgdG9rZW5zW2lkeF0udmFsdWUgPSBwcmVmaXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9rZW5zW2lkeF0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBkZXB0aCh0b2tlbnNbaWR4XSk7XG4gICAgICAgIHN0YXRlLm1heERlcHRoICs9IHRva2Vuc1tpZHhdLmRlcHRoO1xuICAgICAgfVxuICAgICAgaWYgKGlkeCAhPT0gMCB8fCB2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgcGFydHMucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBwcmV2SW5kZXggPSBpO1xuICAgIH1cblxuICAgIGlmIChwcmV2SW5kZXggJiYgcHJldkluZGV4ICsgMSA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dC5zbGljZShwcmV2SW5kZXggKyAxKTtcbiAgICAgIHBhcnRzLnB1c2godmFsdWUpO1xuXG4gICAgICBpZiAob3B0cy50b2tlbnMpIHtcbiAgICAgICAgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICBkZXB0aCh0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgc3RhdGUubWF4RGVwdGggKz0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS5kZXB0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0ZS5zbGFzaGVzID0gc2xhc2hlcztcbiAgICBzdGF0ZS5wYXJ0cyA9IHBhcnRzO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzY2FuO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2NvbnN0YW50cycpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3Qge1xuICBNQVhfTEVOR1RILFxuICBQT1NJWF9SRUdFWF9TT1VSQ0UsXG4gIFJFR0VYX05PTl9TUEVDSUFMX0NIQVJTLFxuICBSRUdFWF9TUEVDSUFMX0NIQVJTX0JBQ0tSRUYsXG4gIFJFUExBQ0VNRU5UU1xufSA9IGNvbnN0YW50cztcblxuLyoqXG4gKiBIZWxwZXJzXG4gKi9cblxuY29uc3QgZXhwYW5kUmFuZ2UgPSAoYXJncywgb3B0aW9ucykgPT4ge1xuICBpZiAodHlwZW9mIG9wdGlvbnMuZXhwYW5kUmFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5leHBhbmRSYW5nZSguLi5hcmdzLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFyZ3Muc29ydCgpO1xuICBjb25zdCB2YWx1ZSA9IGBbJHthcmdzLmpvaW4oJy0nKX1dYDtcblxuICB0cnkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXcgKi9cbiAgICBuZXcgUmVnRXhwKHZhbHVlKTtcbiAgfSBjYXRjaCAoZXgpIHtcbiAgICByZXR1cm4gYXJncy5tYXAodiA9PiB1dGlscy5lc2NhcGVSZWdleCh2KSkuam9pbignLi4nKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBtZXNzYWdlIGZvciBhIHN5bnRheCBlcnJvclxuICovXG5cbmNvbnN0IHN5bnRheEVycm9yID0gKHR5cGUsIGNoYXIpID0+IHtcbiAgcmV0dXJuIGBNaXNzaW5nICR7dHlwZX06IFwiJHtjaGFyfVwiIC0gdXNlIFwiXFxcXFxcXFwke2NoYXJ9XCIgdG8gbWF0Y2ggbGl0ZXJhbCBjaGFyYWN0ZXJzYDtcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGlucHV0IHN0cmluZy5cbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuXG5jb25zdCBwYXJzZSA9IChpbnB1dCwgb3B0aW9ucykgPT4ge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgc3RyaW5nJyk7XG4gIH1cblxuICBpbnB1dCA9IFJFUExBQ0VNRU5UU1tpbnB1dF0gfHwgaW5wdXQ7XG5cbiAgY29uc3Qgb3B0cyA9IHsgLi4ub3B0aW9ucyB9O1xuICBjb25zdCBtYXggPSB0eXBlb2Ygb3B0cy5tYXhMZW5ndGggPT09ICdudW1iZXInID8gTWF0aC5taW4oTUFYX0xFTkdUSCwgb3B0cy5tYXhMZW5ndGgpIDogTUFYX0xFTkdUSDtcblxuICBsZXQgbGVuID0gaW5wdXQubGVuZ3RoO1xuICBpZiAobGVuID4gbWF4KSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBJbnB1dCBsZW5ndGg6ICR7bGVufSwgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgbGVuZ3RoOiAke21heH1gKTtcbiAgfVxuXG4gIGNvbnN0IGJvcyA9IHsgdHlwZTogJ2JvcycsIHZhbHVlOiAnJywgb3V0cHV0OiBvcHRzLnByZXBlbmQgfHwgJycgfTtcbiAgY29uc3QgdG9rZW5zID0gW2Jvc107XG5cbiAgY29uc3QgY2FwdHVyZSA9IG9wdHMuY2FwdHVyZSA/ICcnIDogJz86JztcbiAgY29uc3Qgd2luMzIgPSB1dGlscy5pc1dpbmRvd3Mob3B0aW9ucyk7XG5cbiAgLy8gY3JlYXRlIGNvbnN0YW50cyBiYXNlZCBvbiBwbGF0Zm9ybSwgZm9yIHdpbmRvd3Mgb3IgcG9zaXhcbiAgY29uc3QgUExBVEZPUk1fQ0hBUlMgPSBjb25zdGFudHMuZ2xvYkNoYXJzKHdpbjMyKTtcbiAgY29uc3QgRVhUR0xPQl9DSEFSUyA9IGNvbnN0YW50cy5leHRnbG9iQ2hhcnMoUExBVEZPUk1fQ0hBUlMpO1xuXG4gIGNvbnN0IHtcbiAgICBET1RfTElURVJBTCxcbiAgICBQTFVTX0xJVEVSQUwsXG4gICAgU0xBU0hfTElURVJBTCxcbiAgICBPTkVfQ0hBUixcbiAgICBET1RTX1NMQVNILFxuICAgIE5PX0RPVCxcbiAgICBOT19ET1RfU0xBU0gsXG4gICAgTk9fRE9UU19TTEFTSCxcbiAgICBRTUFSSyxcbiAgICBRTUFSS19OT19ET1QsXG4gICAgU1RBUixcbiAgICBTVEFSVF9BTkNIT1JcbiAgfSA9IFBMQVRGT1JNX0NIQVJTO1xuXG4gIGNvbnN0IGdsb2JzdGFyID0gb3B0cyA9PiB7XG4gICAgcmV0dXJuIGAoJHtjYXB0dXJlfSg/Oig/ISR7U1RBUlRfQU5DSE9SfSR7b3B0cy5kb3QgPyBET1RTX1NMQVNIIDogRE9UX0xJVEVSQUx9KS4pKj8pYDtcbiAgfTtcblxuICBjb25zdCBub2RvdCA9IG9wdHMuZG90ID8gJycgOiBOT19ET1Q7XG4gIGNvbnN0IHFtYXJrTm9Eb3QgPSBvcHRzLmRvdCA/IFFNQVJLIDogUU1BUktfTk9fRE9UO1xuICBsZXQgc3RhciA9IG9wdHMuYmFzaCA9PT0gdHJ1ZSA/IGdsb2JzdGFyKG9wdHMpIDogU1RBUjtcblxuICBpZiAob3B0cy5jYXB0dXJlKSB7XG4gICAgc3RhciA9IGAoJHtzdGFyfSlgO1xuICB9XG5cbiAgLy8gbWluaW1hdGNoIG9wdGlvbnMgc3VwcG9ydFxuICBpZiAodHlwZW9mIG9wdHMubm9leHQgPT09ICdib29sZWFuJykge1xuICAgIG9wdHMubm9leHRnbG9iID0gb3B0cy5ub2V4dDtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIGlucHV0LFxuICAgIGluZGV4OiAtMSxcbiAgICBzdGFydDogMCxcbiAgICBkb3Q6IG9wdHMuZG90ID09PSB0cnVlLFxuICAgIGNvbnN1bWVkOiAnJyxcbiAgICBvdXRwdXQ6ICcnLFxuICAgIHByZWZpeDogJycsXG4gICAgYmFja3RyYWNrOiBmYWxzZSxcbiAgICBuZWdhdGVkOiBmYWxzZSxcbiAgICBicmFja2V0czogMCxcbiAgICBicmFjZXM6IDAsXG4gICAgcGFyZW5zOiAwLFxuICAgIHF1b3RlczogMCxcbiAgICBnbG9ic3RhcjogZmFsc2UsXG4gICAgdG9rZW5zXG4gIH07XG5cbiAgaW5wdXQgPSB1dGlscy5yZW1vdmVQcmVmaXgoaW5wdXQsIHN0YXRlKTtcbiAgbGVuID0gaW5wdXQubGVuZ3RoO1xuXG4gIGNvbnN0IGV4dGdsb2JzID0gW107XG4gIGNvbnN0IGJyYWNlcyA9IFtdO1xuICBjb25zdCBzdGFjayA9IFtdO1xuICBsZXQgcHJldiA9IGJvcztcbiAgbGV0IHZhbHVlO1xuXG4gIC8qKlxuICAgKiBUb2tlbml6aW5nIGhlbHBlcnNcbiAgICovXG5cbiAgY29uc3QgZW9zID0gKCkgPT4gc3RhdGUuaW5kZXggPT09IGxlbiAtIDE7XG4gIGNvbnN0IHBlZWsgPSBzdGF0ZS5wZWVrID0gKG4gPSAxKSA9PiBpbnB1dFtzdGF0ZS5pbmRleCArIG5dO1xuICBjb25zdCBhZHZhbmNlID0gc3RhdGUuYWR2YW5jZSA9ICgpID0+IGlucHV0Wysrc3RhdGUuaW5kZXhdIHx8ICcnO1xuICBjb25zdCByZW1haW5pbmcgPSAoKSA9PiBpbnB1dC5zbGljZShzdGF0ZS5pbmRleCArIDEpO1xuICBjb25zdCBjb25zdW1lID0gKHZhbHVlID0gJycsIG51bSA9IDApID0+IHtcbiAgICBzdGF0ZS5jb25zdW1lZCArPSB2YWx1ZTtcbiAgICBzdGF0ZS5pbmRleCArPSBudW07XG4gIH07XG5cbiAgY29uc3QgYXBwZW5kID0gdG9rZW4gPT4ge1xuICAgIHN0YXRlLm91dHB1dCArPSB0b2tlbi5vdXRwdXQgIT0gbnVsbCA/IHRva2VuLm91dHB1dCA6IHRva2VuLnZhbHVlO1xuICAgIGNvbnN1bWUodG9rZW4udmFsdWUpO1xuICB9O1xuXG4gIGNvbnN0IG5lZ2F0ZSA9ICgpID0+IHtcbiAgICBsZXQgY291bnQgPSAxO1xuXG4gICAgd2hpbGUgKHBlZWsoKSA9PT0gJyEnICYmIChwZWVrKDIpICE9PSAnKCcgfHwgcGVlaygzKSA9PT0gJz8nKSkge1xuICAgICAgYWR2YW5jZSgpO1xuICAgICAgc3RhdGUuc3RhcnQrKztcbiAgICAgIGNvdW50Kys7XG4gICAgfVxuXG4gICAgaWYgKGNvdW50ICUgMiA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHN0YXRlLm5lZ2F0ZWQgPSB0cnVlO1xuICAgIHN0YXRlLnN0YXJ0Kys7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgY29uc3QgaW5jcmVtZW50ID0gdHlwZSA9PiB7XG4gICAgc3RhdGVbdHlwZV0rKztcbiAgICBzdGFjay5wdXNoKHR5cGUpO1xuICB9O1xuXG4gIGNvbnN0IGRlY3JlbWVudCA9IHR5cGUgPT4ge1xuICAgIHN0YXRlW3R5cGVdLS07XG4gICAgc3RhY2sucG9wKCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFB1c2ggdG9rZW5zIG9udG8gdGhlIHRva2VucyBhcnJheS4gVGhpcyBoZWxwZXIgc3BlZWRzIHVwXG4gICAqIHRva2VuaXppbmcgYnkgMSkgaGVscGluZyB1cyBhdm9pZCBiYWNrdHJhY2tpbmcgYXMgbXVjaCBhcyBwb3NzaWJsZSxcbiAgICogYW5kIDIpIGhlbHBpbmcgdXMgYXZvaWQgY3JlYXRpbmcgZXh0cmEgdG9rZW5zIHdoZW4gY29uc2VjdXRpdmVcbiAgICogY2hhcmFjdGVycyBhcmUgcGxhaW4gdGV4dC4gVGhpcyBpbXByb3ZlcyBwZXJmb3JtYW5jZSBhbmQgc2ltcGxpZmllc1xuICAgKiBsb29rYmVoaW5kcy5cbiAgICovXG5cbiAgY29uc3QgcHVzaCA9IHRvayA9PiB7XG4gICAgaWYgKHByZXYudHlwZSA9PT0gJ2dsb2JzdGFyJykge1xuICAgICAgY29uc3QgaXNCcmFjZSA9IHN0YXRlLmJyYWNlcyA+IDAgJiYgKHRvay50eXBlID09PSAnY29tbWEnIHx8IHRvay50eXBlID09PSAnYnJhY2UnKTtcbiAgICAgIGNvbnN0IGlzRXh0Z2xvYiA9IHRvay5leHRnbG9iID09PSB0cnVlIHx8IChleHRnbG9icy5sZW5ndGggJiYgKHRvay50eXBlID09PSAncGlwZScgfHwgdG9rLnR5cGUgPT09ICdwYXJlbicpKTtcblxuICAgICAgaWYgKHRvay50eXBlICE9PSAnc2xhc2gnICYmIHRvay50eXBlICE9PSAncGFyZW4nICYmICFpc0JyYWNlICYmICFpc0V4dGdsb2IpIHtcbiAgICAgICAgc3RhdGUub3V0cHV0ID0gc3RhdGUub3V0cHV0LnNsaWNlKDAsIC1wcmV2Lm91dHB1dC5sZW5ndGgpO1xuICAgICAgICBwcmV2LnR5cGUgPSAnc3Rhcic7XG4gICAgICAgIHByZXYudmFsdWUgPSAnKic7XG4gICAgICAgIHByZXYub3V0cHV0ID0gc3RhcjtcbiAgICAgICAgc3RhdGUub3V0cHV0ICs9IHByZXYub3V0cHV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChleHRnbG9icy5sZW5ndGggJiYgdG9rLnR5cGUgIT09ICdwYXJlbicpIHtcbiAgICAgIGV4dGdsb2JzW2V4dGdsb2JzLmxlbmd0aCAtIDFdLmlubmVyICs9IHRvay52YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodG9rLnZhbHVlIHx8IHRvay5vdXRwdXQpIGFwcGVuZCh0b2spO1xuICAgIGlmIChwcmV2ICYmIHByZXYudHlwZSA9PT0gJ3RleHQnICYmIHRvay50eXBlID09PSAndGV4dCcpIHtcbiAgICAgIHByZXYudmFsdWUgKz0gdG9rLnZhbHVlO1xuICAgICAgcHJldi5vdXRwdXQgPSAocHJldi5vdXRwdXQgfHwgJycpICsgdG9rLnZhbHVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRvay5wcmV2ID0gcHJldjtcbiAgICB0b2tlbnMucHVzaCh0b2spO1xuICAgIHByZXYgPSB0b2s7XG4gIH07XG5cbiAgY29uc3QgZXh0Z2xvYk9wZW4gPSAodHlwZSwgdmFsdWUpID0+IHtcbiAgICBjb25zdCB0b2tlbiA9IHsgLi4uRVhUR0xPQl9DSEFSU1t2YWx1ZV0sIGNvbmRpdGlvbnM6IDEsIGlubmVyOiAnJyB9O1xuXG4gICAgdG9rZW4ucHJldiA9IHByZXY7XG4gICAgdG9rZW4ucGFyZW5zID0gc3RhdGUucGFyZW5zO1xuICAgIHRva2VuLm91dHB1dCA9IHN0YXRlLm91dHB1dDtcbiAgICBjb25zdCBvdXRwdXQgPSAob3B0cy5jYXB0dXJlID8gJygnIDogJycpICsgdG9rZW4ub3BlbjtcblxuICAgIGluY3JlbWVudCgncGFyZW5zJyk7XG4gICAgcHVzaCh7IHR5cGUsIHZhbHVlLCBvdXRwdXQ6IHN0YXRlLm91dHB1dCA/ICcnIDogT05FX0NIQVIgfSk7XG4gICAgcHVzaCh7IHR5cGU6ICdwYXJlbicsIGV4dGdsb2I6IHRydWUsIHZhbHVlOiBhZHZhbmNlKCksIG91dHB1dCB9KTtcbiAgICBleHRnbG9icy5wdXNoKHRva2VuKTtcbiAgfTtcblxuICBjb25zdCBleHRnbG9iQ2xvc2UgPSB0b2tlbiA9PiB7XG4gICAgbGV0IG91dHB1dCA9IHRva2VuLmNsb3NlICsgKG9wdHMuY2FwdHVyZSA/ICcpJyA6ICcnKTtcbiAgICBsZXQgcmVzdDtcblxuICAgIGlmICh0b2tlbi50eXBlID09PSAnbmVnYXRlJykge1xuICAgICAgbGV0IGV4dGdsb2JTdGFyID0gc3RhcjtcblxuICAgICAgaWYgKHRva2VuLmlubmVyICYmIHRva2VuLmlubmVyLmxlbmd0aCA+IDEgJiYgdG9rZW4uaW5uZXIuaW5jbHVkZXMoJy8nKSkge1xuICAgICAgICBleHRnbG9iU3RhciA9IGdsb2JzdGFyKG9wdHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXh0Z2xvYlN0YXIgIT09IHN0YXIgfHwgZW9zKCkgfHwgL15cXCkrJC8udGVzdChyZW1haW5pbmcoKSkpIHtcbiAgICAgICAgb3V0cHV0ID0gdG9rZW4uY2xvc2UgPSBgKSQpKSR7ZXh0Z2xvYlN0YXJ9YDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRva2VuLmlubmVyLmluY2x1ZGVzKCcqJykgJiYgKHJlc3QgPSByZW1haW5pbmcoKSkgJiYgL15cXC5bXlxcXFwvLl0rJC8udGVzdChyZXN0KSkge1xuICAgICAgICAvLyBBbnkgbm9uLW1hZ2ljYWwgc3RyaW5nIChgLnRzYCkgb3IgZXZlbiBuZXN0ZWQgZXhwcmVzc2lvbiAoYC57dHMsdHN4fWApIGNhbiBmb2xsb3cgYWZ0ZXIgdGhlIGNsb3NpbmcgcGFyZW50aGVzaXMuXG4gICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byBwYXJzZSB0aGUgc3RyaW5nIGFuZCB1c2UgaXQgaW4gdGhlIG91dHB1dCBvZiB0aGUgb3JpZ2luYWwgcGF0dGVybi5cbiAgICAgICAgLy8gU3VpdGFibGUgcGF0dGVybnM6IGAvISgqLmQpLnRzYCwgYC8hKCouZCkue3RzLHRzeH1gLCBgKiovISgqLWRiZykuQChqcylgLlxuICAgICAgICAvL1xuICAgICAgICAvLyBEaXNhYmxpbmcgdGhlIGBmYXN0cGF0aHNgIG9wdGlvbiBkdWUgdG8gYSBwcm9ibGVtIHdpdGggcGFyc2luZyBzdHJpbmdzIGFzIGAudHNgIGluIHRoZSBwYXR0ZXJuIGxpa2UgYCoqLyEoKi5kKS50c2AuXG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBwYXJzZShyZXN0LCB7IC4uLm9wdGlvbnMsIGZhc3RwYXRoczogZmFsc2UgfSkub3V0cHV0O1xuXG4gICAgICAgIG91dHB1dCA9IHRva2VuLmNsb3NlID0gYCkke2V4cHJlc3Npb259KSR7ZXh0Z2xvYlN0YXJ9KWA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0b2tlbi5wcmV2LnR5cGUgPT09ICdib3MnKSB7XG4gICAgICAgIHN0YXRlLm5lZ2F0ZWRFeHRnbG9iID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdXNoKHsgdHlwZTogJ3BhcmVuJywgZXh0Z2xvYjogdHJ1ZSwgdmFsdWUsIG91dHB1dCB9KTtcbiAgICBkZWNyZW1lbnQoJ3BhcmVucycpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBGYXN0IHBhdGhzXG4gICAqL1xuXG4gIGlmIChvcHRzLmZhc3RwYXRocyAhPT0gZmFsc2UgJiYgIS8oXlsqIV18Wy8oKVtcXF17fVwiXSkvLnRlc3QoaW5wdXQpKSB7XG4gICAgbGV0IGJhY2tzbGFzaGVzID0gZmFsc2U7XG5cbiAgICBsZXQgb3V0cHV0ID0gaW5wdXQucmVwbGFjZShSRUdFWF9TUEVDSUFMX0NIQVJTX0JBQ0tSRUYsIChtLCBlc2MsIGNoYXJzLCBmaXJzdCwgcmVzdCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChmaXJzdCA9PT0gJ1xcXFwnKSB7XG4gICAgICAgIGJhY2tzbGFzaGVzID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgICB9XG5cbiAgICAgIGlmIChmaXJzdCA9PT0gJz8nKSB7XG4gICAgICAgIGlmIChlc2MpIHtcbiAgICAgICAgICByZXR1cm4gZXNjICsgZmlyc3QgKyAocmVzdCA/IFFNQVJLLnJlcGVhdChyZXN0Lmxlbmd0aCkgOiAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHFtYXJrTm9Eb3QgKyAocmVzdCA/IFFNQVJLLnJlcGVhdChyZXN0Lmxlbmd0aCkgOiAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFFNQVJLLnJlcGVhdChjaGFycy5sZW5ndGgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlyc3QgPT09ICcuJykge1xuICAgICAgICByZXR1cm4gRE9UX0xJVEVSQUwucmVwZWF0KGNoYXJzLmxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaXJzdCA9PT0gJyonKSB7XG4gICAgICAgIGlmIChlc2MpIHtcbiAgICAgICAgICByZXR1cm4gZXNjICsgZmlyc3QgKyAocmVzdCA/IHN0YXIgOiAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXNjID8gbSA6IGBcXFxcJHttfWA7XG4gICAgfSk7XG5cbiAgICBpZiAoYmFja3NsYXNoZXMgPT09IHRydWUpIHtcbiAgICAgIGlmIChvcHRzLnVuZXNjYXBlID09PSB0cnVlKSB7XG4gICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKC9cXFxcL2csICcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKC9cXFxcKy9nLCBtID0+IHtcbiAgICAgICAgICByZXR1cm4gbS5sZW5ndGggJSAyID09PSAwID8gJ1xcXFxcXFxcJyA6IChtID8gJ1xcXFwnIDogJycpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3V0cHV0ID09PSBpbnB1dCAmJiBvcHRzLmNvbnRhaW5zID09PSB0cnVlKSB7XG4gICAgICBzdGF0ZS5vdXRwdXQgPSBpbnB1dDtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBzdGF0ZS5vdXRwdXQgPSB1dGlscy53cmFwT3V0cHV0KG91dHB1dCwgc3RhdGUsIG9wdGlvbnMpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2tlbml6ZSBpbnB1dCB1bnRpbCB3ZSByZWFjaCBlbmQtb2Ytc3RyaW5nXG4gICAqL1xuXG4gIHdoaWxlICghZW9zKCkpIHtcbiAgICB2YWx1ZSA9IGFkdmFuY2UoKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gJ1xcdTAwMDAnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFc2NhcGVkIGNoYXJhY3RlcnNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJ1xcXFwnKSB7XG4gICAgICBjb25zdCBuZXh0ID0gcGVlaygpO1xuXG4gICAgICBpZiAobmV4dCA9PT0gJy8nICYmIG9wdHMuYmFzaCAhPT0gdHJ1ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5leHQgPT09ICcuJyB8fCBuZXh0ID09PSAnOycpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghbmV4dCkge1xuICAgICAgICB2YWx1ZSArPSAnXFxcXCc7XG4gICAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gY29sbGFwc2Ugc2xhc2hlcyB0byByZWR1Y2UgcG90ZW50aWFsIGZvciBleHBsb2l0c1xuICAgICAgY29uc3QgbWF0Y2ggPSAvXlxcXFwrLy5leGVjKHJlbWFpbmluZygpKTtcbiAgICAgIGxldCBzbGFzaGVzID0gMDtcblxuICAgICAgaWYgKG1hdGNoICYmIG1hdGNoWzBdLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgc2xhc2hlcyA9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgc3RhdGUuaW5kZXggKz0gc2xhc2hlcztcbiAgICAgICAgaWYgKHNsYXNoZXMgJSAyICE9PSAwKSB7XG4gICAgICAgICAgdmFsdWUgKz0gJ1xcXFwnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRzLnVuZXNjYXBlID09PSB0cnVlKSB7XG4gICAgICAgIHZhbHVlID0gYWR2YW5jZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgKz0gYWR2YW5jZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUuYnJhY2tldHMgPT09IDApIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElmIHdlJ3JlIGluc2lkZSBhIHJlZ2V4IGNoYXJhY3RlciBjbGFzcywgY29udGludWVcbiAgICAgKiB1bnRpbCB3ZSByZWFjaCB0aGUgY2xvc2luZyBicmFja2V0LlxuICAgICAqL1xuXG4gICAgaWYgKHN0YXRlLmJyYWNrZXRzID4gMCAmJiAodmFsdWUgIT09ICddJyB8fCBwcmV2LnZhbHVlID09PSAnWycgfHwgcHJldi52YWx1ZSA9PT0gJ1teJykpIHtcbiAgICAgIGlmIChvcHRzLnBvc2l4ICE9PSBmYWxzZSAmJiB2YWx1ZSA9PT0gJzonKSB7XG4gICAgICAgIGNvbnN0IGlubmVyID0gcHJldi52YWx1ZS5zbGljZSgxKTtcbiAgICAgICAgaWYgKGlubmVyLmluY2x1ZGVzKCdbJykpIHtcbiAgICAgICAgICBwcmV2LnBvc2l4ID0gdHJ1ZTtcblxuICAgICAgICAgIGlmIChpbm5lci5pbmNsdWRlcygnOicpKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBwcmV2LnZhbHVlLmxhc3RJbmRleE9mKCdbJyk7XG4gICAgICAgICAgICBjb25zdCBwcmUgPSBwcmV2LnZhbHVlLnNsaWNlKDAsIGlkeCk7XG4gICAgICAgICAgICBjb25zdCByZXN0ID0gcHJldi52YWx1ZS5zbGljZShpZHggKyAyKTtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l4ID0gUE9TSVhfUkVHRVhfU09VUkNFW3Jlc3RdO1xuICAgICAgICAgICAgaWYgKHBvc2l4KSB7XG4gICAgICAgICAgICAgIHByZXYudmFsdWUgPSBwcmUgKyBwb3NpeDtcbiAgICAgICAgICAgICAgc3RhdGUuYmFja3RyYWNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYWR2YW5jZSgpO1xuXG4gICAgICAgICAgICAgIGlmICghYm9zLm91dHB1dCAmJiB0b2tlbnMuaW5kZXhPZihwcmV2KSA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGJvcy5vdXRwdXQgPSBPTkVfQ0hBUjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCh2YWx1ZSA9PT0gJ1snICYmIHBlZWsoKSAhPT0gJzonKSB8fCAodmFsdWUgPT09ICctJyAmJiBwZWVrKCkgPT09ICddJykpIHtcbiAgICAgICAgdmFsdWUgPSBgXFxcXCR7dmFsdWV9YDtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlID09PSAnXScgJiYgKHByZXYudmFsdWUgPT09ICdbJyB8fCBwcmV2LnZhbHVlID09PSAnW14nKSkge1xuICAgICAgICB2YWx1ZSA9IGBcXFxcJHt2YWx1ZX1gO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0cy5wb3NpeCA9PT0gdHJ1ZSAmJiB2YWx1ZSA9PT0gJyEnICYmIHByZXYudmFsdWUgPT09ICdbJykge1xuICAgICAgICB2YWx1ZSA9ICdeJztcbiAgICAgIH1cblxuICAgICAgcHJldi52YWx1ZSArPSB2YWx1ZTtcbiAgICAgIGFwcGVuZCh7IHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgd2UncmUgaW5zaWRlIGEgcXVvdGVkIHN0cmluZywgY29udGludWVcbiAgICAgKiB1bnRpbCB3ZSByZWFjaCB0aGUgY2xvc2luZyBkb3VibGUgcXVvdGUuXG4gICAgICovXG5cbiAgICBpZiAoc3RhdGUucXVvdGVzID09PSAxICYmIHZhbHVlICE9PSAnXCInKSB7XG4gICAgICB2YWx1ZSA9IHV0aWxzLmVzY2FwZVJlZ2V4KHZhbHVlKTtcbiAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG4gICAgICBhcHBlbmQoeyB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERvdWJsZSBxdW90ZXNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJ1wiJykge1xuICAgICAgc3RhdGUucXVvdGVzID0gc3RhdGUucXVvdGVzID09PSAxID8gMCA6IDE7XG4gICAgICBpZiAob3B0cy5rZWVwUXVvdGVzID09PSB0cnVlKSB7XG4gICAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyZW50aGVzZXNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJygnKSB7XG4gICAgICBpbmNyZW1lbnQoJ3BhcmVucycpO1xuICAgICAgcHVzaCh7IHR5cGU6ICdwYXJlbicsIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSAnKScpIHtcbiAgICAgIGlmIChzdGF0ZS5wYXJlbnMgPT09IDAgJiYgb3B0cy5zdHJpY3RCcmFja2V0cyA9PT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ludGF4RXJyb3IoJ29wZW5pbmcnLCAnKCcpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXh0Z2xvYiA9IGV4dGdsb2JzW2V4dGdsb2JzLmxlbmd0aCAtIDFdO1xuICAgICAgaWYgKGV4dGdsb2IgJiYgc3RhdGUucGFyZW5zID09PSBleHRnbG9iLnBhcmVucyArIDEpIHtcbiAgICAgICAgZXh0Z2xvYkNsb3NlKGV4dGdsb2JzLnBvcCgpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAncGFyZW4nLCB2YWx1ZSwgb3V0cHV0OiBzdGF0ZS5wYXJlbnMgPyAnKScgOiAnXFxcXCknIH0pO1xuICAgICAgZGVjcmVtZW50KCdwYXJlbnMnKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNxdWFyZSBicmFja2V0c1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSAnWycpIHtcbiAgICAgIGlmIChvcHRzLm5vYnJhY2tldCA9PT0gdHJ1ZSB8fCAhcmVtYWluaW5nKCkuaW5jbHVkZXMoJ10nKSkge1xuICAgICAgICBpZiAob3B0cy5ub2JyYWNrZXQgIT09IHRydWUgJiYgb3B0cy5zdHJpY3RCcmFja2V0cyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzeW50YXhFcnJvcignY2xvc2luZycsICddJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWUgPSBgXFxcXCR7dmFsdWV9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluY3JlbWVudCgnYnJhY2tldHMnKTtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICdicmFja2V0JywgdmFsdWUgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPT09ICddJykge1xuICAgICAgaWYgKG9wdHMubm9icmFja2V0ID09PSB0cnVlIHx8IChwcmV2ICYmIHByZXYudHlwZSA9PT0gJ2JyYWNrZXQnICYmIHByZXYudmFsdWUubGVuZ3RoID09PSAxKSkge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSwgb3V0cHV0OiBgXFxcXCR7dmFsdWV9YCB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZS5icmFja2V0cyA9PT0gMCkge1xuICAgICAgICBpZiAob3B0cy5zdHJpY3RCcmFja2V0cyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzeW50YXhFcnJvcignb3BlbmluZycsICdbJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUsIG91dHB1dDogYFxcXFwke3ZhbHVlfWAgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBkZWNyZW1lbnQoJ2JyYWNrZXRzJyk7XG5cbiAgICAgIGNvbnN0IHByZXZWYWx1ZSA9IHByZXYudmFsdWUuc2xpY2UoMSk7XG4gICAgICBpZiAocHJldi5wb3NpeCAhPT0gdHJ1ZSAmJiBwcmV2VmFsdWVbMF0gPT09ICdeJyAmJiAhcHJldlZhbHVlLmluY2x1ZGVzKCcvJykpIHtcbiAgICAgICAgdmFsdWUgPSBgLyR7dmFsdWV9YDtcbiAgICAgIH1cblxuICAgICAgcHJldi52YWx1ZSArPSB2YWx1ZTtcbiAgICAgIGFwcGVuZCh7IHZhbHVlIH0pO1xuXG4gICAgICAvLyB3aGVuIGxpdGVyYWwgYnJhY2tldHMgYXJlIGV4cGxpY2l0bHkgZGlzYWJsZWRcbiAgICAgIC8vIGFzc3VtZSB3ZSBzaG91bGQgbWF0Y2ggd2l0aCBhIHJlZ2V4IGNoYXJhY3RlciBjbGFzc1xuICAgICAgaWYgKG9wdHMubGl0ZXJhbEJyYWNrZXRzID09PSBmYWxzZSB8fCB1dGlscy5oYXNSZWdleENoYXJzKHByZXZWYWx1ZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVzY2FwZWQgPSB1dGlscy5lc2NhcGVSZWdleChwcmV2LnZhbHVlKTtcbiAgICAgIHN0YXRlLm91dHB1dCA9IHN0YXRlLm91dHB1dC5zbGljZSgwLCAtcHJldi52YWx1ZS5sZW5ndGgpO1xuXG4gICAgICAvLyB3aGVuIGxpdGVyYWwgYnJhY2tldHMgYXJlIGV4cGxpY2l0bHkgZW5hYmxlZFxuICAgICAgLy8gYXNzdW1lIHdlIHNob3VsZCBlc2NhcGUgdGhlIGJyYWNrZXRzIHRvIG1hdGNoIGxpdGVyYWwgY2hhcmFjdGVyc1xuICAgICAgaWYgKG9wdHMubGl0ZXJhbEJyYWNrZXRzID09PSB0cnVlKSB7XG4gICAgICAgIHN0YXRlLm91dHB1dCArPSBlc2NhcGVkO1xuICAgICAgICBwcmV2LnZhbHVlID0gZXNjYXBlZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIHdoZW4gdGhlIHVzZXIgc3BlY2lmaWVzIG5vdGhpbmcsIHRyeSB0byBtYXRjaCBib3RoXG4gICAgICBwcmV2LnZhbHVlID0gYCgke2NhcHR1cmV9JHtlc2NhcGVkfXwke3ByZXYudmFsdWV9KWA7XG4gICAgICBzdGF0ZS5vdXRwdXQgKz0gcHJldi52YWx1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJyYWNlc1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSAneycgJiYgb3B0cy5ub2JyYWNlICE9PSB0cnVlKSB7XG4gICAgICBpbmNyZW1lbnQoJ2JyYWNlcycpO1xuXG4gICAgICBjb25zdCBvcGVuID0ge1xuICAgICAgICB0eXBlOiAnYnJhY2UnLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgb3V0cHV0OiAnKCcsXG4gICAgICAgIG91dHB1dEluZGV4OiBzdGF0ZS5vdXRwdXQubGVuZ3RoLFxuICAgICAgICB0b2tlbnNJbmRleDogc3RhdGUudG9rZW5zLmxlbmd0aFxuICAgICAgfTtcblxuICAgICAgYnJhY2VzLnB1c2gob3Blbik7XG4gICAgICBwdXNoKG9wZW4pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSAnfScpIHtcbiAgICAgIGNvbnN0IGJyYWNlID0gYnJhY2VzW2JyYWNlcy5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKG9wdHMubm9icmFjZSA9PT0gdHJ1ZSB8fCAhYnJhY2UpIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUsIG91dHB1dDogdmFsdWUgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgb3V0cHV0ID0gJyknO1xuXG4gICAgICBpZiAoYnJhY2UuZG90cyA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBhcnIgPSB0b2tlbnMuc2xpY2UoKTtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gYXJyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdG9rZW5zLnBvcCgpO1xuICAgICAgICAgIGlmIChhcnJbaV0udHlwZSA9PT0gJ2JyYWNlJykge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhcnJbaV0udHlwZSAhPT0gJ2RvdHMnKSB7XG4gICAgICAgICAgICByYW5nZS51bnNoaWZ0KGFycltpXS52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgb3V0cHV0ID0gZXhwYW5kUmFuZ2UocmFuZ2UsIG9wdHMpO1xuICAgICAgICBzdGF0ZS5iYWNrdHJhY2sgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoYnJhY2UuY29tbWEgIT09IHRydWUgJiYgYnJhY2UuZG90cyAhPT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBvdXQgPSBzdGF0ZS5vdXRwdXQuc2xpY2UoMCwgYnJhY2Uub3V0cHV0SW5kZXgpO1xuICAgICAgICBjb25zdCB0b2tzID0gc3RhdGUudG9rZW5zLnNsaWNlKGJyYWNlLnRva2Vuc0luZGV4KTtcbiAgICAgICAgYnJhY2UudmFsdWUgPSBicmFjZS5vdXRwdXQgPSAnXFxcXHsnO1xuICAgICAgICB2YWx1ZSA9IG91dHB1dCA9ICdcXFxcfSc7XG4gICAgICAgIHN0YXRlLm91dHB1dCA9IG91dDtcbiAgICAgICAgZm9yIChjb25zdCB0IG9mIHRva3MpIHtcbiAgICAgICAgICBzdGF0ZS5vdXRwdXQgKz0gKHQub3V0cHV0IHx8IHQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAnYnJhY2UnLCB2YWx1ZSwgb3V0cHV0IH0pO1xuICAgICAgZGVjcmVtZW50KCdicmFjZXMnKTtcbiAgICAgIGJyYWNlcy5wb3AoKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBpcGVzXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICd8Jykge1xuICAgICAgaWYgKGV4dGdsb2JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXh0Z2xvYnNbZXh0Z2xvYnMubGVuZ3RoIC0gMV0uY29uZGl0aW9ucysrO1xuICAgICAgfVxuICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21tYXNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJywnKSB7XG4gICAgICBsZXQgb3V0cHV0ID0gdmFsdWU7XG5cbiAgICAgIGNvbnN0IGJyYWNlID0gYnJhY2VzW2JyYWNlcy5sZW5ndGggLSAxXTtcbiAgICAgIGlmIChicmFjZSAmJiBzdGFja1tzdGFjay5sZW5ndGggLSAxXSA9PT0gJ2JyYWNlcycpIHtcbiAgICAgICAgYnJhY2UuY29tbWEgPSB0cnVlO1xuICAgICAgICBvdXRwdXQgPSAnfCc7XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAnY29tbWEnLCB2YWx1ZSwgb3V0cHV0IH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2xhc2hlc1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSAnLycpIHtcbiAgICAgIC8vIGlmIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGdsb2IgaXMgXCIuL1wiLCBhZHZhbmNlIHRoZSBzdGFydFxuICAgICAgLy8gdG8gdGhlIGN1cnJlbnQgaW5kZXgsIGFuZCBkb24ndCBhZGQgdGhlIFwiLi9cIiBjaGFyYWN0ZXJzXG4gICAgICAvLyB0byB0aGUgc3RhdGUuIFRoaXMgZ3JlYXRseSBzaW1wbGlmaWVzIGxvb2tiZWhpbmRzIHdoZW5cbiAgICAgIC8vIGNoZWNraW5nIGZvciBCT1MgY2hhcmFjdGVycyBsaWtlIFwiIVwiIGFuZCBcIi5cIiAobm90IFwiLi9cIilcbiAgICAgIGlmIChwcmV2LnR5cGUgPT09ICdkb3QnICYmIHN0YXRlLmluZGV4ID09PSBzdGF0ZS5zdGFydCArIDEpIHtcbiAgICAgICAgc3RhdGUuc3RhcnQgPSBzdGF0ZS5pbmRleCArIDE7XG4gICAgICAgIHN0YXRlLmNvbnN1bWVkID0gJyc7XG4gICAgICAgIHN0YXRlLm91dHB1dCA9ICcnO1xuICAgICAgICB0b2tlbnMucG9wKCk7XG4gICAgICAgIHByZXYgPSBib3M7IC8vIHJlc2V0IFwicHJldlwiIHRvIHRoZSBmaXJzdCB0b2tlblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICdzbGFzaCcsIHZhbHVlLCBvdXRwdXQ6IFNMQVNIX0xJVEVSQUwgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEb3RzXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICcuJykge1xuICAgICAgaWYgKHN0YXRlLmJyYWNlcyA+IDAgJiYgcHJldi50eXBlID09PSAnZG90Jykge1xuICAgICAgICBpZiAocHJldi52YWx1ZSA9PT0gJy4nKSBwcmV2Lm91dHB1dCA9IERPVF9MSVRFUkFMO1xuICAgICAgICBjb25zdCBicmFjZSA9IGJyYWNlc1ticmFjZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIHByZXYudHlwZSA9ICdkb3RzJztcbiAgICAgICAgcHJldi5vdXRwdXQgKz0gdmFsdWU7XG4gICAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG4gICAgICAgIGJyYWNlLmRvdHMgPSB0cnVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKChzdGF0ZS5icmFjZXMgKyBzdGF0ZS5wYXJlbnMpID09PSAwICYmIHByZXYudHlwZSAhPT0gJ2JvcycgJiYgcHJldi50eXBlICE9PSAnc2xhc2gnKSB7XG4gICAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlLCBvdXRwdXQ6IERPVF9MSVRFUkFMIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICdkb3QnLCB2YWx1ZSwgb3V0cHV0OiBET1RfTElURVJBTCB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFF1ZXN0aW9uIG1hcmtzXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICc/Jykge1xuICAgICAgY29uc3QgaXNHcm91cCA9IHByZXYgJiYgcHJldi52YWx1ZSA9PT0gJygnO1xuICAgICAgaWYgKCFpc0dyb3VwICYmIG9wdHMubm9leHRnbG9iICE9PSB0cnVlICYmIHBlZWsoKSA9PT0gJygnICYmIHBlZWsoMikgIT09ICc/Jykge1xuICAgICAgICBleHRnbG9iT3BlbigncW1hcmsnLCB2YWx1ZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJldiAmJiBwcmV2LnR5cGUgPT09ICdwYXJlbicpIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHBlZWsoKTtcbiAgICAgICAgbGV0IG91dHB1dCA9IHZhbHVlO1xuXG4gICAgICAgIGlmIChuZXh0ID09PSAnPCcgJiYgIXV0aWxzLnN1cHBvcnRzTG9va2JlaGluZHMoKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm9kZS5qcyB2MTAgb3IgaGlnaGVyIGlzIHJlcXVpcmVkIGZvciByZWdleCBsb29rYmVoaW5kcycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChwcmV2LnZhbHVlID09PSAnKCcgJiYgIS9bIT08Ol0vLnRlc3QobmV4dCkpIHx8IChuZXh0ID09PSAnPCcgJiYgIS88KFshPV18XFx3Kz4pLy50ZXN0KHJlbWFpbmluZygpKSkpIHtcbiAgICAgICAgICBvdXRwdXQgPSBgXFxcXCR7dmFsdWV9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlLCBvdXRwdXQgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0cy5kb3QgIT09IHRydWUgJiYgKHByZXYudHlwZSA9PT0gJ3NsYXNoJyB8fCBwcmV2LnR5cGUgPT09ICdib3MnKSkge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3FtYXJrJywgdmFsdWUsIG91dHB1dDogUU1BUktfTk9fRE9UIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICdxbWFyaycsIHZhbHVlLCBvdXRwdXQ6IFFNQVJLIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhjbGFtYXRpb25cbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJyEnKSB7XG4gICAgICBpZiAob3B0cy5ub2V4dGdsb2IgIT09IHRydWUgJiYgcGVlaygpID09PSAnKCcpIHtcbiAgICAgICAgaWYgKHBlZWsoMikgIT09ICc/JyB8fCAhL1shPTw6XS8udGVzdChwZWVrKDMpKSkge1xuICAgICAgICAgIGV4dGdsb2JPcGVuKCduZWdhdGUnLCB2YWx1ZSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG9wdHMubm9uZWdhdGUgIT09IHRydWUgJiYgc3RhdGUuaW5kZXggPT09IDApIHtcbiAgICAgICAgbmVnYXRlKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBsdXNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJysnKSB7XG4gICAgICBpZiAob3B0cy5ub2V4dGdsb2IgIT09IHRydWUgJiYgcGVlaygpID09PSAnKCcgJiYgcGVlaygyKSAhPT0gJz8nKSB7XG4gICAgICAgIGV4dGdsb2JPcGVuKCdwbHVzJywgdmFsdWUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKChwcmV2ICYmIHByZXYudmFsdWUgPT09ICcoJykgfHwgb3B0cy5yZWdleCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICdwbHVzJywgdmFsdWUsIG91dHB1dDogUExVU19MSVRFUkFMIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKChwcmV2ICYmIChwcmV2LnR5cGUgPT09ICdicmFja2V0JyB8fCBwcmV2LnR5cGUgPT09ICdwYXJlbicgfHwgcHJldi50eXBlID09PSAnYnJhY2UnKSkgfHwgc3RhdGUucGFyZW5zID4gMCkge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3BsdXMnLCB2YWx1ZSB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAncGx1cycsIHZhbHVlOiBQTFVTX0xJVEVSQUwgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQbGFpbiB0ZXh0XG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICdAJykge1xuICAgICAgaWYgKG9wdHMubm9leHRnbG9iICE9PSB0cnVlICYmIHBlZWsoKSA9PT0gJygnICYmIHBlZWsoMikgIT09ICc/Jykge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ2F0JywgZXh0Z2xvYjogdHJ1ZSwgdmFsdWUsIG91dHB1dDogJycgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBsYWluIHRleHRcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSAhPT0gJyonKSB7XG4gICAgICBpZiAodmFsdWUgPT09ICckJyB8fCB2YWx1ZSA9PT0gJ14nKSB7XG4gICAgICAgIHZhbHVlID0gYFxcXFwke3ZhbHVlfWA7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hdGNoID0gUkVHRVhfTk9OX1NQRUNJQUxfQ0hBUlMuZXhlYyhyZW1haW5pbmcoKSk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgdmFsdWUgKz0gbWF0Y2hbMF07XG4gICAgICAgIHN0YXRlLmluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdGFyc1xuICAgICAqL1xuXG4gICAgaWYgKHByZXYgJiYgKHByZXYudHlwZSA9PT0gJ2dsb2JzdGFyJyB8fCBwcmV2LnN0YXIgPT09IHRydWUpKSB7XG4gICAgICBwcmV2LnR5cGUgPSAnc3Rhcic7XG4gICAgICBwcmV2LnN0YXIgPSB0cnVlO1xuICAgICAgcHJldi52YWx1ZSArPSB2YWx1ZTtcbiAgICAgIHByZXYub3V0cHV0ID0gc3RhcjtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayA9IHRydWU7XG4gICAgICBzdGF0ZS5nbG9ic3RhciA9IHRydWU7XG4gICAgICBjb25zdW1lKHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGxldCByZXN0ID0gcmVtYWluaW5nKCk7XG4gICAgaWYgKG9wdHMubm9leHRnbG9iICE9PSB0cnVlICYmIC9eXFwoW14/XS8udGVzdChyZXN0KSkge1xuICAgICAgZXh0Z2xvYk9wZW4oJ3N0YXInLCB2YWx1ZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocHJldi50eXBlID09PSAnc3RhcicpIHtcbiAgICAgIGlmIChvcHRzLm5vZ2xvYnN0YXIgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3VtZSh2YWx1ZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcmlvciA9IHByZXYucHJldjtcbiAgICAgIGNvbnN0IGJlZm9yZSA9IHByaW9yLnByZXY7XG4gICAgICBjb25zdCBpc1N0YXJ0ID0gcHJpb3IudHlwZSA9PT0gJ3NsYXNoJyB8fCBwcmlvci50eXBlID09PSAnYm9zJztcbiAgICAgIGNvbnN0IGFmdGVyU3RhciA9IGJlZm9yZSAmJiAoYmVmb3JlLnR5cGUgPT09ICdzdGFyJyB8fCBiZWZvcmUudHlwZSA9PT0gJ2dsb2JzdGFyJyk7XG5cbiAgICAgIGlmIChvcHRzLmJhc2ggPT09IHRydWUgJiYgKCFpc1N0YXJ0IHx8IChyZXN0WzBdICYmIHJlc3RbMF0gIT09ICcvJykpKSB7XG4gICAgICAgIHB1c2goeyB0eXBlOiAnc3RhcicsIHZhbHVlLCBvdXRwdXQ6ICcnIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNCcmFjZSA9IHN0YXRlLmJyYWNlcyA+IDAgJiYgKHByaW9yLnR5cGUgPT09ICdjb21tYScgfHwgcHJpb3IudHlwZSA9PT0gJ2JyYWNlJyk7XG4gICAgICBjb25zdCBpc0V4dGdsb2IgPSBleHRnbG9icy5sZW5ndGggJiYgKHByaW9yLnR5cGUgPT09ICdwaXBlJyB8fCBwcmlvci50eXBlID09PSAncGFyZW4nKTtcbiAgICAgIGlmICghaXNTdGFydCAmJiBwcmlvci50eXBlICE9PSAncGFyZW4nICYmICFpc0JyYWNlICYmICFpc0V4dGdsb2IpIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICdzdGFyJywgdmFsdWUsIG91dHB1dDogJycgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBzdHJpcCBjb25zZWN1dGl2ZSBgLyoqL2BcbiAgICAgIHdoaWxlIChyZXN0LnNsaWNlKDAsIDMpID09PSAnLyoqJykge1xuICAgICAgICBjb25zdCBhZnRlciA9IGlucHV0W3N0YXRlLmluZGV4ICsgNF07XG4gICAgICAgIGlmIChhZnRlciAmJiBhZnRlciAhPT0gJy8nKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoMyk7XG4gICAgICAgIGNvbnN1bWUoJy8qKicsIDMpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJpb3IudHlwZSA9PT0gJ2JvcycgJiYgZW9zKCkpIHtcbiAgICAgICAgcHJldi50eXBlID0gJ2dsb2JzdGFyJztcbiAgICAgICAgcHJldi52YWx1ZSArPSB2YWx1ZTtcbiAgICAgICAgcHJldi5vdXRwdXQgPSBnbG9ic3RhcihvcHRzKTtcbiAgICAgICAgc3RhdGUub3V0cHV0ID0gcHJldi5vdXRwdXQ7XG4gICAgICAgIHN0YXRlLmdsb2JzdGFyID0gdHJ1ZTtcbiAgICAgICAgY29uc3VtZSh2YWx1ZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJpb3IudHlwZSA9PT0gJ3NsYXNoJyAmJiBwcmlvci5wcmV2LnR5cGUgIT09ICdib3MnICYmICFhZnRlclN0YXIgJiYgZW9zKCkpIHtcbiAgICAgICAgc3RhdGUub3V0cHV0ID0gc3RhdGUub3V0cHV0LnNsaWNlKDAsIC0ocHJpb3Iub3V0cHV0ICsgcHJldi5vdXRwdXQpLmxlbmd0aCk7XG4gICAgICAgIHByaW9yLm91dHB1dCA9IGAoPzoke3ByaW9yLm91dHB1dH1gO1xuXG4gICAgICAgIHByZXYudHlwZSA9ICdnbG9ic3Rhcic7XG4gICAgICAgIHByZXYub3V0cHV0ID0gZ2xvYnN0YXIob3B0cykgKyAob3B0cy5zdHJpY3RTbGFzaGVzID8gJyknIDogJ3wkKScpO1xuICAgICAgICBwcmV2LnZhbHVlICs9IHZhbHVlO1xuICAgICAgICBzdGF0ZS5nbG9ic3RhciA9IHRydWU7XG4gICAgICAgIHN0YXRlLm91dHB1dCArPSBwcmlvci5vdXRwdXQgKyBwcmV2Lm91dHB1dDtcbiAgICAgICAgY29uc3VtZSh2YWx1ZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJpb3IudHlwZSA9PT0gJ3NsYXNoJyAmJiBwcmlvci5wcmV2LnR5cGUgIT09ICdib3MnICYmIHJlc3RbMF0gPT09ICcvJykge1xuICAgICAgICBjb25zdCBlbmQgPSByZXN0WzFdICE9PSB2b2lkIDAgPyAnfCQnIDogJyc7XG5cbiAgICAgICAgc3RhdGUub3V0cHV0ID0gc3RhdGUub3V0cHV0LnNsaWNlKDAsIC0ocHJpb3Iub3V0cHV0ICsgcHJldi5vdXRwdXQpLmxlbmd0aCk7XG4gICAgICAgIHByaW9yLm91dHB1dCA9IGAoPzoke3ByaW9yLm91dHB1dH1gO1xuXG4gICAgICAgIHByZXYudHlwZSA9ICdnbG9ic3Rhcic7XG4gICAgICAgIHByZXYub3V0cHV0ID0gYCR7Z2xvYnN0YXIob3B0cyl9JHtTTEFTSF9MSVRFUkFMfXwke1NMQVNIX0xJVEVSQUx9JHtlbmR9KWA7XG4gICAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG5cbiAgICAgICAgc3RhdGUub3V0cHV0ICs9IHByaW9yLm91dHB1dCArIHByZXYub3V0cHV0O1xuICAgICAgICBzdGF0ZS5nbG9ic3RhciA9IHRydWU7XG5cbiAgICAgICAgY29uc3VtZSh2YWx1ZSArIGFkdmFuY2UoKSk7XG5cbiAgICAgICAgcHVzaCh7IHR5cGU6ICdzbGFzaCcsIHZhbHVlOiAnLycsIG91dHB1dDogJycgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJpb3IudHlwZSA9PT0gJ2JvcycgJiYgcmVzdFswXSA9PT0gJy8nKSB7XG4gICAgICAgIHByZXYudHlwZSA9ICdnbG9ic3Rhcic7XG4gICAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG4gICAgICAgIHByZXYub3V0cHV0ID0gYCg/Ol58JHtTTEFTSF9MSVRFUkFMfXwke2dsb2JzdGFyKG9wdHMpfSR7U0xBU0hfTElURVJBTH0pYDtcbiAgICAgICAgc3RhdGUub3V0cHV0ID0gcHJldi5vdXRwdXQ7XG4gICAgICAgIHN0YXRlLmdsb2JzdGFyID0gdHJ1ZTtcbiAgICAgICAgY29uc3VtZSh2YWx1ZSArIGFkdmFuY2UoKSk7XG4gICAgICAgIHB1c2goeyB0eXBlOiAnc2xhc2gnLCB2YWx1ZTogJy8nLCBvdXRwdXQ6ICcnIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gcmVtb3ZlIHNpbmdsZSBzdGFyIGZyb20gb3V0cHV0XG4gICAgICBzdGF0ZS5vdXRwdXQgPSBzdGF0ZS5vdXRwdXQuc2xpY2UoMCwgLXByZXYub3V0cHV0Lmxlbmd0aCk7XG5cbiAgICAgIC8vIHJlc2V0IHByZXZpb3VzIHRva2VuIHRvIGdsb2JzdGFyXG4gICAgICBwcmV2LnR5cGUgPSAnZ2xvYnN0YXInO1xuICAgICAgcHJldi5vdXRwdXQgPSBnbG9ic3RhcihvcHRzKTtcbiAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG5cbiAgICAgIC8vIHJlc2V0IG91dHB1dCB3aXRoIGdsb2JzdGFyXG4gICAgICBzdGF0ZS5vdXRwdXQgKz0gcHJldi5vdXRwdXQ7XG4gICAgICBzdGF0ZS5nbG9ic3RhciA9IHRydWU7XG4gICAgICBjb25zdW1lKHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHRva2VuID0geyB0eXBlOiAnc3RhcicsIHZhbHVlLCBvdXRwdXQ6IHN0YXIgfTtcblxuICAgIGlmIChvcHRzLmJhc2ggPT09IHRydWUpIHtcbiAgICAgIHRva2VuLm91dHB1dCA9ICcuKj8nO1xuICAgICAgaWYgKHByZXYudHlwZSA9PT0gJ2JvcycgfHwgcHJldi50eXBlID09PSAnc2xhc2gnKSB7XG4gICAgICAgIHRva2VuLm91dHB1dCA9IG5vZG90ICsgdG9rZW4ub3V0cHV0O1xuICAgICAgfVxuICAgICAgcHVzaCh0b2tlbik7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocHJldiAmJiAocHJldi50eXBlID09PSAnYnJhY2tldCcgfHwgcHJldi50eXBlID09PSAncGFyZW4nKSAmJiBvcHRzLnJlZ2V4ID09PSB0cnVlKSB7XG4gICAgICB0b2tlbi5vdXRwdXQgPSB2YWx1ZTtcbiAgICAgIHB1c2godG9rZW4pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmluZGV4ID09PSBzdGF0ZS5zdGFydCB8fCBwcmV2LnR5cGUgPT09ICdzbGFzaCcgfHwgcHJldi50eXBlID09PSAnZG90Jykge1xuICAgICAgaWYgKHByZXYudHlwZSA9PT0gJ2RvdCcpIHtcbiAgICAgICAgc3RhdGUub3V0cHV0ICs9IE5PX0RPVF9TTEFTSDtcbiAgICAgICAgcHJldi5vdXRwdXQgKz0gTk9fRE9UX1NMQVNIO1xuXG4gICAgICB9IGVsc2UgaWYgKG9wdHMuZG90ID09PSB0cnVlKSB7XG4gICAgICAgIHN0YXRlLm91dHB1dCArPSBOT19ET1RTX1NMQVNIO1xuICAgICAgICBwcmV2Lm91dHB1dCArPSBOT19ET1RTX1NMQVNIO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5vdXRwdXQgKz0gbm9kb3Q7XG4gICAgICAgIHByZXYub3V0cHV0ICs9IG5vZG90O1xuICAgICAgfVxuXG4gICAgICBpZiAocGVlaygpICE9PSAnKicpIHtcbiAgICAgICAgc3RhdGUub3V0cHV0ICs9IE9ORV9DSEFSO1xuICAgICAgICBwcmV2Lm91dHB1dCArPSBPTkVfQ0hBUjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdXNoKHRva2VuKTtcbiAgfVxuXG4gIHdoaWxlIChzdGF0ZS5icmFja2V0cyA+IDApIHtcbiAgICBpZiAob3B0cy5zdHJpY3RCcmFja2V0cyA9PT0gdHJ1ZSkgdGhyb3cgbmV3IFN5bnRheEVycm9yKHN5bnRheEVycm9yKCdjbG9zaW5nJywgJ10nKSk7XG4gICAgc3RhdGUub3V0cHV0ID0gdXRpbHMuZXNjYXBlTGFzdChzdGF0ZS5vdXRwdXQsICdbJyk7XG4gICAgZGVjcmVtZW50KCdicmFja2V0cycpO1xuICB9XG5cbiAgd2hpbGUgKHN0YXRlLnBhcmVucyA+IDApIHtcbiAgICBpZiAob3B0cy5zdHJpY3RCcmFja2V0cyA9PT0gdHJ1ZSkgdGhyb3cgbmV3IFN5bnRheEVycm9yKHN5bnRheEVycm9yKCdjbG9zaW5nJywgJyknKSk7XG4gICAgc3RhdGUub3V0cHV0ID0gdXRpbHMuZXNjYXBlTGFzdChzdGF0ZS5vdXRwdXQsICcoJyk7XG4gICAgZGVjcmVtZW50KCdwYXJlbnMnKTtcbiAgfVxuXG4gIHdoaWxlIChzdGF0ZS5icmFjZXMgPiAwKSB7XG4gICAgaWYgKG9wdHMuc3RyaWN0QnJhY2tldHMgPT09IHRydWUpIHRocm93IG5ldyBTeW50YXhFcnJvcihzeW50YXhFcnJvcignY2xvc2luZycsICd9JykpO1xuICAgIHN0YXRlLm91dHB1dCA9IHV0aWxzLmVzY2FwZUxhc3Qoc3RhdGUub3V0cHV0LCAneycpO1xuICAgIGRlY3JlbWVudCgnYnJhY2VzJyk7XG4gIH1cblxuICBpZiAob3B0cy5zdHJpY3RTbGFzaGVzICE9PSB0cnVlICYmIChwcmV2LnR5cGUgPT09ICdzdGFyJyB8fCBwcmV2LnR5cGUgPT09ICdicmFja2V0JykpIHtcbiAgICBwdXNoKHsgdHlwZTogJ21heWJlX3NsYXNoJywgdmFsdWU6ICcnLCBvdXRwdXQ6IGAke1NMQVNIX0xJVEVSQUx9P2AgfSk7XG4gIH1cblxuICAvLyByZWJ1aWxkIHRoZSBvdXRwdXQgaWYgd2UgaGFkIHRvIGJhY2t0cmFjayBhdCBhbnkgcG9pbnRcbiAgaWYgKHN0YXRlLmJhY2t0cmFjayA9PT0gdHJ1ZSkge1xuICAgIHN0YXRlLm91dHB1dCA9ICcnO1xuXG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiBzdGF0ZS50b2tlbnMpIHtcbiAgICAgIHN0YXRlLm91dHB1dCArPSB0b2tlbi5vdXRwdXQgIT0gbnVsbCA/IHRva2VuLm91dHB1dCA6IHRva2VuLnZhbHVlO1xuXG4gICAgICBpZiAodG9rZW4uc3VmZml4KSB7XG4gICAgICAgIHN0YXRlLm91dHB1dCArPSB0b2tlbi5zdWZmaXg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcblxuLyoqXG4gKiBGYXN0IHBhdGhzIGZvciBjcmVhdGluZyByZWd1bGFyIGV4cHJlc3Npb25zIGZvciBjb21tb24gZ2xvYiBwYXR0ZXJucy5cbiAqIFRoaXMgY2FuIHNpZ25pZmljYW50bHkgc3BlZWQgdXAgcHJvY2Vzc2luZyBhbmQgaGFzIHZlcnkgbGl0dGxlIGRvd25zaWRlXG4gKiBpbXBhY3Qgd2hlbiBub25lIG9mIHRoZSBmYXN0IHBhdGhzIG1hdGNoLlxuICovXG5cbnBhcnNlLmZhc3RwYXRocyA9IChpbnB1dCwgb3B0aW9ucykgPT4ge1xuICBjb25zdCBvcHRzID0geyAuLi5vcHRpb25zIH07XG4gIGNvbnN0IG1heCA9IHR5cGVvZiBvcHRzLm1heExlbmd0aCA9PT0gJ251bWJlcicgPyBNYXRoLm1pbihNQVhfTEVOR1RILCBvcHRzLm1heExlbmd0aCkgOiBNQVhfTEVOR1RIO1xuICBjb25zdCBsZW4gPSBpbnB1dC5sZW5ndGg7XG4gIGlmIChsZW4gPiBtYXgpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYElucHV0IGxlbmd0aDogJHtsZW59LCBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBsZW5ndGg6ICR7bWF4fWApO1xuICB9XG5cbiAgaW5wdXQgPSBSRVBMQUNFTUVOVFNbaW5wdXRdIHx8IGlucHV0O1xuICBjb25zdCB3aW4zMiA9IHV0aWxzLmlzV2luZG93cyhvcHRpb25zKTtcblxuICAvLyBjcmVhdGUgY29uc3RhbnRzIGJhc2VkIG9uIHBsYXRmb3JtLCBmb3Igd2luZG93cyBvciBwb3NpeFxuICBjb25zdCB7XG4gICAgRE9UX0xJVEVSQUwsXG4gICAgU0xBU0hfTElURVJBTCxcbiAgICBPTkVfQ0hBUixcbiAgICBET1RTX1NMQVNILFxuICAgIE5PX0RPVCxcbiAgICBOT19ET1RTLFxuICAgIE5PX0RPVFNfU0xBU0gsXG4gICAgU1RBUixcbiAgICBTVEFSVF9BTkNIT1JcbiAgfSA9IGNvbnN0YW50cy5nbG9iQ2hhcnMod2luMzIpO1xuXG4gIGNvbnN0IG5vZG90ID0gb3B0cy5kb3QgPyBOT19ET1RTIDogTk9fRE9UO1xuICBjb25zdCBzbGFzaERvdCA9IG9wdHMuZG90ID8gTk9fRE9UU19TTEFTSCA6IE5PX0RPVDtcbiAgY29uc3QgY2FwdHVyZSA9IG9wdHMuY2FwdHVyZSA/ICcnIDogJz86JztcbiAgY29uc3Qgc3RhdGUgPSB7IG5lZ2F0ZWQ6IGZhbHNlLCBwcmVmaXg6ICcnIH07XG4gIGxldCBzdGFyID0gb3B0cy5iYXNoID09PSB0cnVlID8gJy4qPycgOiBTVEFSO1xuXG4gIGlmIChvcHRzLmNhcHR1cmUpIHtcbiAgICBzdGFyID0gYCgke3N0YXJ9KWA7XG4gIH1cblxuICBjb25zdCBnbG9ic3RhciA9IG9wdHMgPT4ge1xuICAgIGlmIChvcHRzLm5vZ2xvYnN0YXIgPT09IHRydWUpIHJldHVybiBzdGFyO1xuICAgIHJldHVybiBgKCR7Y2FwdHVyZX0oPzooPyEke1NUQVJUX0FOQ0hPUn0ke29wdHMuZG90ID8gRE9UU19TTEFTSCA6IERPVF9MSVRFUkFMfSkuKSo/KWA7XG4gIH07XG5cbiAgY29uc3QgY3JlYXRlID0gc3RyID0+IHtcbiAgICBzd2l0Y2ggKHN0cikge1xuICAgICAgY2FzZSAnKic6XG4gICAgICAgIHJldHVybiBgJHtub2RvdH0ke09ORV9DSEFSfSR7c3Rhcn1gO1xuXG4gICAgICBjYXNlICcuKic6XG4gICAgICAgIHJldHVybiBgJHtET1RfTElURVJBTH0ke09ORV9DSEFSfSR7c3Rhcn1gO1xuXG4gICAgICBjYXNlICcqLionOlxuICAgICAgICByZXR1cm4gYCR7bm9kb3R9JHtzdGFyfSR7RE9UX0xJVEVSQUx9JHtPTkVfQ0hBUn0ke3N0YXJ9YDtcblxuICAgICAgY2FzZSAnKi8qJzpcbiAgICAgICAgcmV0dXJuIGAke25vZG90fSR7c3Rhcn0ke1NMQVNIX0xJVEVSQUx9JHtPTkVfQ0hBUn0ke3NsYXNoRG90fSR7c3Rhcn1gO1xuXG4gICAgICBjYXNlICcqKic6XG4gICAgICAgIHJldHVybiBub2RvdCArIGdsb2JzdGFyKG9wdHMpO1xuXG4gICAgICBjYXNlICcqKi8qJzpcbiAgICAgICAgcmV0dXJuIGAoPzoke25vZG90fSR7Z2xvYnN0YXIob3B0cyl9JHtTTEFTSF9MSVRFUkFMfSk/JHtzbGFzaERvdH0ke09ORV9DSEFSfSR7c3Rhcn1gO1xuXG4gICAgICBjYXNlICcqKi8qLionOlxuICAgICAgICByZXR1cm4gYCg/OiR7bm9kb3R9JHtnbG9ic3RhcihvcHRzKX0ke1NMQVNIX0xJVEVSQUx9KT8ke3NsYXNoRG90fSR7c3Rhcn0ke0RPVF9MSVRFUkFMfSR7T05FX0NIQVJ9JHtzdGFyfWA7XG5cbiAgICAgIGNhc2UgJyoqLy4qJzpcbiAgICAgICAgcmV0dXJuIGAoPzoke25vZG90fSR7Z2xvYnN0YXIob3B0cyl9JHtTTEFTSF9MSVRFUkFMfSk/JHtET1RfTElURVJBTH0ke09ORV9DSEFSfSR7c3Rhcn1gO1xuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gL14oLio/KVxcLihcXHcrKSQvLmV4ZWMoc3RyKTtcbiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGNyZWF0ZShtYXRjaFsxXSk7XG4gICAgICAgIGlmICghc291cmNlKSByZXR1cm47XG5cbiAgICAgICAgcmV0dXJuIHNvdXJjZSArIERPVF9MSVRFUkFMICsgbWF0Y2hbMl07XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG91dHB1dCA9IHV0aWxzLnJlbW92ZVByZWZpeChpbnB1dCwgc3RhdGUpO1xuICBsZXQgc291cmNlID0gY3JlYXRlKG91dHB1dCk7XG5cbiAgaWYgKHNvdXJjZSAmJiBvcHRzLnN0cmljdFNsYXNoZXMgIT09IHRydWUpIHtcbiAgICBzb3VyY2UgKz0gYCR7U0xBU0hfTElURVJBTH0/YDtcbiAgfVxuXG4gIHJldHVybiBzb3VyY2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3Qgc2NhbiA9IHJlcXVpcmUoJy4vc2NhbicpO1xuY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJyk7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG5jb25zdCBpc09iamVjdCA9IHZhbCA9PiB2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWF0Y2hlciBmdW5jdGlvbiBmcm9tIG9uZSBvciBtb3JlIGdsb2IgcGF0dGVybnMuIFRoZVxuICogcmV0dXJuZWQgZnVuY3Rpb24gdGFrZXMgYSBzdHJpbmcgdG8gbWF0Y2ggYXMgaXRzIGZpcnN0IGFyZ3VtZW50LFxuICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgbWF0Y2guIFRoZSByZXR1cm5lZCBtYXRjaGVyXG4gKiBmdW5jdGlvbiBhbHNvIHRha2VzIGEgYm9vbGVhbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRoYXQsIHdoZW4gdHJ1ZSxcbiAqIHJldHVybnMgYW4gb2JqZWN0IHdpdGggYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcGljb21hdGNoID0gcmVxdWlyZSgncGljb21hdGNoJyk7XG4gKiAvLyBwaWNvbWF0Y2goZ2xvYlssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zdCBpc01hdGNoID0gcGljb21hdGNoKCcqLiEoKmEpJyk7XG4gKiBjb25zb2xlLmxvZyhpc01hdGNoKCdhLmEnKSk7IC8vPT4gZmFsc2VcbiAqIGNvbnNvbGUubG9nKGlzTWF0Y2goJ2EuYicpKTsgLy89PiB0cnVlXG4gKiBgYGBcbiAqIEBuYW1lIHBpY29tYXRjaFxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IGBnbG9ic2AgT25lIG9yIG1vcmUgZ2xvYiBwYXR0ZXJucy5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gYG9wdGlvbnNgXG4gKiBAcmV0dXJuIHtGdW5jdGlvbj19IFJldHVybnMgYSBtYXRjaGVyIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5jb25zdCBwaWNvbWF0Y2ggPSAoZ2xvYiwgb3B0aW9ucywgcmV0dXJuU3RhdGUgPSBmYWxzZSkgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShnbG9iKSkge1xuICAgIGNvbnN0IGZucyA9IGdsb2IubWFwKGlucHV0ID0+IHBpY29tYXRjaChpbnB1dCwgb3B0aW9ucywgcmV0dXJuU3RhdGUpKTtcbiAgICBjb25zdCBhcnJheU1hdGNoZXIgPSBzdHIgPT4ge1xuICAgICAgZm9yIChjb25zdCBpc01hdGNoIG9mIGZucykge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IGlzTWF0Y2goc3RyKTtcbiAgICAgICAgaWYgKHN0YXRlKSByZXR1cm4gc3RhdGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlNYXRjaGVyO1xuICB9XG5cbiAgY29uc3QgaXNTdGF0ZSA9IGlzT2JqZWN0KGdsb2IpICYmIGdsb2IudG9rZW5zICYmIGdsb2IuaW5wdXQ7XG5cbiAgaWYgKGdsb2IgPT09ICcnIHx8ICh0eXBlb2YgZ2xvYiAhPT0gJ3N0cmluZycgJiYgIWlzU3RhdGUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgcGF0dGVybiB0byBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgfVxuXG4gIGNvbnN0IG9wdHMgPSBvcHRpb25zIHx8IHt9O1xuICBjb25zdCBwb3NpeCA9IHV0aWxzLmlzV2luZG93cyhvcHRpb25zKTtcbiAgY29uc3QgcmVnZXggPSBpc1N0YXRlXG4gICAgPyBwaWNvbWF0Y2guY29tcGlsZVJlKGdsb2IsIG9wdGlvbnMpXG4gICAgOiBwaWNvbWF0Y2gubWFrZVJlKGdsb2IsIG9wdGlvbnMsIGZhbHNlLCB0cnVlKTtcblxuICBjb25zdCBzdGF0ZSA9IHJlZ2V4LnN0YXRlO1xuICBkZWxldGUgcmVnZXguc3RhdGU7XG5cbiAgbGV0IGlzSWdub3JlZCA9ICgpID0+IGZhbHNlO1xuICBpZiAob3B0cy5pZ25vcmUpIHtcbiAgICBjb25zdCBpZ25vcmVPcHRzID0geyAuLi5vcHRpb25zLCBpZ25vcmU6IG51bGwsIG9uTWF0Y2g6IG51bGwsIG9uUmVzdWx0OiBudWxsIH07XG4gICAgaXNJZ25vcmVkID0gcGljb21hdGNoKG9wdHMuaWdub3JlLCBpZ25vcmVPcHRzLCByZXR1cm5TdGF0ZSk7XG4gIH1cblxuICBjb25zdCBtYXRjaGVyID0gKGlucHV0LCByZXR1cm5PYmplY3QgPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IHsgaXNNYXRjaCwgbWF0Y2gsIG91dHB1dCB9ID0gcGljb21hdGNoLnRlc3QoaW5wdXQsIHJlZ2V4LCBvcHRpb25zLCB7IGdsb2IsIHBvc2l4IH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IHsgZ2xvYiwgc3RhdGUsIHJlZ2V4LCBwb3NpeCwgaW5wdXQsIG91dHB1dCwgbWF0Y2gsIGlzTWF0Y2ggfTtcblxuICAgIGlmICh0eXBlb2Ygb3B0cy5vblJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3B0cy5vblJlc3VsdChyZXN1bHQpO1xuICAgIH1cblxuICAgIGlmIChpc01hdGNoID09PSBmYWxzZSkge1xuICAgICAgcmVzdWx0LmlzTWF0Y2ggPSBmYWxzZTtcbiAgICAgIHJldHVybiByZXR1cm5PYmplY3QgPyByZXN1bHQgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoaXNJZ25vcmVkKGlucHV0KSkge1xuICAgICAgaWYgKHR5cGVvZiBvcHRzLm9uSWdub3JlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9wdHMub25JZ25vcmUocmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5pc01hdGNoID0gZmFsc2U7XG4gICAgICByZXR1cm4gcmV0dXJuT2JqZWN0ID8gcmVzdWx0IDogZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRzLm9uTWF0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9wdHMub25NYXRjaChyZXN1bHQpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuT2JqZWN0ID8gcmVzdWx0IDogdHJ1ZTtcbiAgfTtcblxuICBpZiAocmV0dXJuU3RhdGUpIHtcbiAgICBtYXRjaGVyLnN0YXRlID0gc3RhdGU7XG4gIH1cblxuICByZXR1cm4gbWF0Y2hlcjtcbn07XG5cbi8qKlxuICogVGVzdCBgaW5wdXRgIHdpdGggdGhlIGdpdmVuIGByZWdleGAuIFRoaXMgaXMgdXNlZCBieSB0aGUgbWFpblxuICogYHBpY29tYXRjaCgpYCBmdW5jdGlvbiB0byB0ZXN0IHRoZSBpbnB1dCBzdHJpbmcuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHBpY29tYXRjaCA9IHJlcXVpcmUoJ3BpY29tYXRjaCcpO1xuICogLy8gcGljb21hdGNoLnRlc3QoaW5wdXQsIHJlZ2V4Wywgb3B0aW9uc10pO1xuICpcbiAqIGNvbnNvbGUubG9nKHBpY29tYXRjaC50ZXN0KCdmb28vYmFyJywgL14oPzooW14vXSo/KVxcLyhbXi9dKj8pKSQvKSk7XG4gKiAvLyB7IGlzTWF0Y2g6IHRydWUsIG1hdGNoOiBbICdmb28vJywgJ2ZvbycsICdiYXInIF0sIG91dHB1dDogJ2Zvby9iYXInIH1cbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBpbnB1dGAgU3RyaW5nIHRvIHRlc3QuXG4gKiBAcGFyYW0ge1JlZ0V4cH0gYHJlZ2V4YFxuICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIG1hdGNoaW5nIGluZm8uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnBpY29tYXRjaC50ZXN0ID0gKGlucHV0LCByZWdleCwgb3B0aW9ucywgeyBnbG9iLCBwb3NpeCB9ID0ge30pID0+IHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBpbnB1dCB0byBiZSBhIHN0cmluZycpO1xuICB9XG5cbiAgaWYgKGlucHV0ID09PSAnJykge1xuICAgIHJldHVybiB7IGlzTWF0Y2g6IGZhbHNlLCBvdXRwdXQ6ICcnIH07XG4gIH1cblxuICBjb25zdCBvcHRzID0gb3B0aW9ucyB8fCB7fTtcbiAgY29uc3QgZm9ybWF0ID0gb3B0cy5mb3JtYXQgfHwgKHBvc2l4ID8gdXRpbHMudG9Qb3NpeFNsYXNoZXMgOiBudWxsKTtcbiAgbGV0IG1hdGNoID0gaW5wdXQgPT09IGdsb2I7XG4gIGxldCBvdXRwdXQgPSAobWF0Y2ggJiYgZm9ybWF0KSA/IGZvcm1hdChpbnB1dCkgOiBpbnB1dDtcblxuICBpZiAobWF0Y2ggPT09IGZhbHNlKSB7XG4gICAgb3V0cHV0ID0gZm9ybWF0ID8gZm9ybWF0KGlucHV0KSA6IGlucHV0O1xuICAgIG1hdGNoID0gb3V0cHV0ID09PSBnbG9iO1xuICB9XG5cbiAgaWYgKG1hdGNoID09PSBmYWxzZSB8fCBvcHRzLmNhcHR1cmUgPT09IHRydWUpIHtcbiAgICBpZiAob3B0cy5tYXRjaEJhc2UgPT09IHRydWUgfHwgb3B0cy5iYXNlbmFtZSA9PT0gdHJ1ZSkge1xuICAgICAgbWF0Y2ggPSBwaWNvbWF0Y2gubWF0Y2hCYXNlKGlucHV0LCByZWdleCwgb3B0aW9ucywgcG9zaXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXRjaCA9IHJlZ2V4LmV4ZWMob3V0cHV0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBpc01hdGNoOiBCb29sZWFuKG1hdGNoKSwgbWF0Y2gsIG91dHB1dCB9O1xufTtcblxuLyoqXG4gKiBNYXRjaCB0aGUgYmFzZW5hbWUgb2YgYSBmaWxlcGF0aC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcGljb21hdGNoID0gcmVxdWlyZSgncGljb21hdGNoJyk7XG4gKiAvLyBwaWNvbWF0Y2gubWF0Y2hCYXNlKGlucHV0LCBnbG9iWywgb3B0aW9uc10pO1xuICogY29uc29sZS5sb2cocGljb21hdGNoLm1hdGNoQmFzZSgnZm9vL2Jhci5qcycsICcqLmpzJyk7IC8vIHRydWVcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBpbnB1dGAgU3RyaW5nIHRvIHRlc3QuXG4gKiBAcGFyYW0ge1JlZ0V4cHxTdHJpbmd9IGBnbG9iYCBHbG9iIHBhdHRlcm4gb3IgcmVnZXggY3JlYXRlZCBieSBbLm1ha2VSZV0oI21ha2VSZSkuXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5waWNvbWF0Y2gubWF0Y2hCYXNlID0gKGlucHV0LCBnbG9iLCBvcHRpb25zLCBwb3NpeCA9IHV0aWxzLmlzV2luZG93cyhvcHRpb25zKSkgPT4ge1xuICBjb25zdCByZWdleCA9IGdsb2IgaW5zdGFuY2VvZiBSZWdFeHAgPyBnbG9iIDogcGljb21hdGNoLm1ha2VSZShnbG9iLCBvcHRpb25zKTtcbiAgcmV0dXJuIHJlZ2V4LnRlc3QocGF0aC5iYXNlbmFtZShpbnB1dCkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgKiphbnkqKiBvZiB0aGUgZ2l2ZW4gZ2xvYiBgcGF0dGVybnNgIG1hdGNoIHRoZSBzcGVjaWZpZWQgYHN0cmluZ2AuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHBpY29tYXRjaCA9IHJlcXVpcmUoJ3BpY29tYXRjaCcpO1xuICogLy8gcGljb21hdGNoLmlzTWF0Y2goc3RyaW5nLCBwYXR0ZXJuc1ssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhwaWNvbWF0Y2guaXNNYXRjaCgnYS5hJywgWydiLionLCAnKi5hJ10pKTsgLy89PiB0cnVlXG4gKiBjb25zb2xlLmxvZyhwaWNvbWF0Y2guaXNNYXRjaCgnYS5hJywgJ2IuKicpKTsgLy89PiBmYWxzZVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gc3RyIFRoZSBzdHJpbmcgdG8gdGVzdC5cbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBwYXR0ZXJucyBPbmUgb3IgbW9yZSBnbG9iIHBhdHRlcm5zIHRvIHVzZSBmb3IgbWF0Y2hpbmcuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFNlZSBhdmFpbGFibGUgW29wdGlvbnNdKCNvcHRpb25zKS5cbiAqIEByZXR1cm4ge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBhbnkgcGF0dGVybnMgbWF0Y2ggYHN0cmBcbiAqIEBhcGkgcHVibGljXG4gKi9cblxucGljb21hdGNoLmlzTWF0Y2ggPSAoc3RyLCBwYXR0ZXJucywgb3B0aW9ucykgPT4gcGljb21hdGNoKHBhdHRlcm5zLCBvcHRpb25zKShzdHIpO1xuXG4vKipcbiAqIFBhcnNlIGEgZ2xvYiBwYXR0ZXJuIHRvIGNyZWF0ZSB0aGUgc291cmNlIHN0cmluZyBmb3IgYSByZWd1bGFyXG4gKiBleHByZXNzaW9uLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwaWNvbWF0Y2ggPSByZXF1aXJlKCdwaWNvbWF0Y2gnKTtcbiAqIGNvbnN0IHJlc3VsdCA9IHBpY29tYXRjaC5wYXJzZShwYXR0ZXJuWywgb3B0aW9uc10pO1xuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHBhdHRlcm5gXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgXG4gKiBAcmV0dXJuIHtPYmplY3R9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggdXNlZnVsIHByb3BlcnRpZXMgYW5kIG91dHB1dCB0byBiZSB1c2VkIGFzIGEgcmVnZXggc291cmNlIHN0cmluZy5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxucGljb21hdGNoLnBhcnNlID0gKHBhdHRlcm4sIG9wdGlvbnMpID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocGF0dGVybikpIHJldHVybiBwYXR0ZXJuLm1hcChwID0+IHBpY29tYXRjaC5wYXJzZShwLCBvcHRpb25zKSk7XG4gIHJldHVybiBwYXJzZShwYXR0ZXJuLCB7IC4uLm9wdGlvbnMsIGZhc3RwYXRoczogZmFsc2UgfSk7XG59O1xuXG4vKipcbiAqIFNjYW4gYSBnbG9iIHBhdHRlcm4gdG8gc2VwYXJhdGUgdGhlIHBhdHRlcm4gaW50byBzZWdtZW50cy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcGljb21hdGNoID0gcmVxdWlyZSgncGljb21hdGNoJyk7XG4gKiAvLyBwaWNvbWF0Y2guc2NhbihpbnB1dFssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBwaWNvbWF0Y2guc2NhbignIS4vZm9vLyouanMnKTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gKiB7IHByZWZpeDogJyEuLycsXG4gKiAgIGlucHV0OiAnIS4vZm9vLyouanMnLFxuICogICBzdGFydDogMyxcbiAqICAgYmFzZTogJ2ZvbycsXG4gKiAgIGdsb2I6ICcqLmpzJyxcbiAqICAgaXNCcmFjZTogZmFsc2UsXG4gKiAgIGlzQnJhY2tldDogZmFsc2UsXG4gKiAgIGlzR2xvYjogdHJ1ZSxcbiAqICAgaXNFeHRnbG9iOiBmYWxzZSxcbiAqICAgaXNHbG9ic3RhcjogZmFsc2UsXG4gKiAgIG5lZ2F0ZWQ6IHRydWUgfVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYGlucHV0YCBHbG9iIHBhdHRlcm4gdG8gc2Nhbi5cbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5waWNvbWF0Y2guc2NhbiA9IChpbnB1dCwgb3B0aW9ucykgPT4gc2NhbihpbnB1dCwgb3B0aW9ucyk7XG5cbi8qKlxuICogQ29tcGlsZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBmcm9tIHRoZSBgc3RhdGVgIG9iamVjdCByZXR1cm5lZCBieSB0aGVcbiAqIFtwYXJzZSgpXSgjcGFyc2UpIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYHN0YXRlYFxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYFxuICogQHBhcmFtIHtCb29sZWFufSBgcmV0dXJuT3V0cHV0YCBJbnRlbmRlZCBmb3IgaW1wbGVtZW50b3JzLCB0aGlzIGFyZ3VtZW50IGFsbG93cyB5b3UgdG8gcmV0dXJuIHRoZSByYXcgb3V0cHV0IGZyb20gdGhlIHBhcnNlci5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gYHJldHVyblN0YXRlYCBBZGRzIHRoZSBzdGF0ZSB0byBhIGBzdGF0ZWAgcHJvcGVydHkgb24gdGhlIHJldHVybmVkIHJlZ2V4LiBVc2VmdWwgZm9yIGltcGxlbWVudG9ycyBhbmQgZGVidWdnaW5nLlxuICogQHJldHVybiB7UmVnRXhwfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5waWNvbWF0Y2guY29tcGlsZVJlID0gKHN0YXRlLCBvcHRpb25zLCByZXR1cm5PdXRwdXQgPSBmYWxzZSwgcmV0dXJuU3RhdGUgPSBmYWxzZSkgPT4ge1xuICBpZiAocmV0dXJuT3V0cHV0ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHN0YXRlLm91dHB1dDtcbiAgfVxuXG4gIGNvbnN0IG9wdHMgPSBvcHRpb25zIHx8IHt9O1xuICBjb25zdCBwcmVwZW5kID0gb3B0cy5jb250YWlucyA/ICcnIDogJ14nO1xuICBjb25zdCBhcHBlbmQgPSBvcHRzLmNvbnRhaW5zID8gJycgOiAnJCc7XG5cbiAgbGV0IHNvdXJjZSA9IGAke3ByZXBlbmR9KD86JHtzdGF0ZS5vdXRwdXR9KSR7YXBwZW5kfWA7XG4gIGlmIChzdGF0ZSAmJiBzdGF0ZS5uZWdhdGVkID09PSB0cnVlKSB7XG4gICAgc291cmNlID0gYF4oPyEke3NvdXJjZX0pLiokYDtcbiAgfVxuXG4gIGNvbnN0IHJlZ2V4ID0gcGljb21hdGNoLnRvUmVnZXgoc291cmNlLCBvcHRpb25zKTtcbiAgaWYgKHJldHVyblN0YXRlID09PSB0cnVlKSB7XG4gICAgcmVnZXguc3RhdGUgPSBzdGF0ZTtcbiAgfVxuXG4gIHJldHVybiByZWdleDtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgcmVndWxhciBleHByZXNzaW9uIGZyb20gYSBwYXJzZWQgZ2xvYiBwYXR0ZXJuLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwaWNvbWF0Y2ggPSByZXF1aXJlKCdwaWNvbWF0Y2gnKTtcbiAqIGNvbnN0IHN0YXRlID0gcGljb21hdGNoLnBhcnNlKCcqLmpzJyk7XG4gKiAvLyBwaWNvbWF0Y2guY29tcGlsZVJlKHN0YXRlWywgb3B0aW9uc10pO1xuICpcbiAqIGNvbnNvbGUubG9nKHBpY29tYXRjaC5jb21waWxlUmUoc3RhdGUpKTtcbiAqIC8vPT4gL14oPzooPyFcXC4pKD89LilbXi9dKj9cXC5qcykkL1xuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHN0YXRlYCBUaGUgb2JqZWN0IHJldHVybmVkIGZyb20gdGhlIGAucGFyc2VgIG1ldGhvZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gYHJldHVybk91dHB1dGAgSW1wbGVtZW50b3JzIG1heSB1c2UgdGhpcyBhcmd1bWVudCB0byByZXR1cm4gdGhlIGNvbXBpbGVkIG91dHB1dCwgaW5zdGVhZCBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4gVGhpcyBpcyBub3QgZXhwb3NlZCBvbiB0aGUgb3B0aW9ucyB0byBwcmV2ZW50IGVuZC11c2VycyBmcm9tIG11dGF0aW5nIHRoZSByZXN1bHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGByZXR1cm5TdGF0ZWAgSW1wbGVtZW50b3JzIG1heSB1c2UgdGhpcyBhcmd1bWVudCB0byByZXR1cm4gdGhlIHN0YXRlIGZyb20gdGhlIHBhcnNlZCBnbG9iIHdpdGggdGhlIHJldHVybmVkIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm4ge1JlZ0V4cH0gUmV0dXJucyBhIHJlZ2V4IGNyZWF0ZWQgZnJvbSB0aGUgZ2l2ZW4gcGF0dGVybi5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxucGljb21hdGNoLm1ha2VSZSA9IChpbnB1dCwgb3B0aW9ucyA9IHt9LCByZXR1cm5PdXRwdXQgPSBmYWxzZSwgcmV0dXJuU3RhdGUgPSBmYWxzZSkgPT4ge1xuICBpZiAoIWlucHV0IHx8IHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgfVxuXG4gIGxldCBwYXJzZWQgPSB7IG5lZ2F0ZWQ6IGZhbHNlLCBmYXN0cGF0aHM6IHRydWUgfTtcblxuICBpZiAob3B0aW9ucy5mYXN0cGF0aHMgIT09IGZhbHNlICYmIChpbnB1dFswXSA9PT0gJy4nIHx8IGlucHV0WzBdID09PSAnKicpKSB7XG4gICAgcGFyc2VkLm91dHB1dCA9IHBhcnNlLmZhc3RwYXRocyhpbnB1dCwgb3B0aW9ucyk7XG4gIH1cblxuICBpZiAoIXBhcnNlZC5vdXRwdXQpIHtcbiAgICBwYXJzZWQgPSBwYXJzZShpbnB1dCwgb3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4gcGljb21hdGNoLmNvbXBpbGVSZShwYXJzZWQsIG9wdGlvbnMsIHJldHVybk91dHB1dCwgcmV0dXJuU3RhdGUpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSByZWd1bGFyIGV4cHJlc3Npb24gZnJvbSB0aGUgZ2l2ZW4gcmVnZXggc291cmNlIHN0cmluZy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcGljb21hdGNoID0gcmVxdWlyZSgncGljb21hdGNoJyk7XG4gKiAvLyBwaWNvbWF0Y2gudG9SZWdleChzb3VyY2VbLCBvcHRpb25zXSk7XG4gKlxuICogY29uc3QgeyBvdXRwdXQgfSA9IHBpY29tYXRjaC5wYXJzZSgnKi5qcycpO1xuICogY29uc29sZS5sb2cocGljb21hdGNoLnRvUmVnZXgob3V0cHV0KSk7XG4gKiAvLz0+IC9eKD86KD8hXFwuKSg/PS4pW14vXSo/XFwuanMpJC9cbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBzb3VyY2VgIFJlZ3VsYXIgZXhwcmVzc2lvbiBzb3VyY2Ugc3RyaW5nLlxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYFxuICogQHJldHVybiB7UmVnRXhwfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5waWNvbWF0Y2gudG9SZWdleCA9IChzb3VyY2UsIG9wdGlvbnMpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBvcHRzID0gb3B0aW9ucyB8fCB7fTtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChzb3VyY2UsIG9wdHMuZmxhZ3MgfHwgKG9wdHMubm9jYXNlID8gJ2knIDogJycpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kZWJ1ZyA9PT0gdHJ1ZSkgdGhyb3cgZXJyO1xuICAgIHJldHVybiAvJF4vO1xuICB9XG59O1xuXG4vKipcbiAqIFBpY29tYXRjaCBjb25zdGFudHMuXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cblxucGljb21hdGNoLmNvbnN0YW50cyA9IGNvbnN0YW50cztcblxuLyoqXG4gKiBFeHBvc2UgXCJwaWNvbWF0Y2hcIlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gcGljb21hdGNoO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL3BpY29tYXRjaCcpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5CdWlsZGVyID0gdm9pZCAwO1xyXG5jb25zdCBwYXRoXzEgPSByZXF1aXJlKFwicGF0aFwiKTtcclxuY29uc3QgYXBpX2J1aWxkZXJfMSA9IHJlcXVpcmUoXCIuL2FwaS1idWlsZGVyXCIpO1xyXG52YXIgcG0gPSBudWxsO1xyXG4vKiBjOCBpZ25vcmUgbmV4dCA2ICovXHJcbnRyeSB7XHJcbiAgICByZXF1aXJlLnJlc29sdmUoXCJwaWNvbWF0Y2hcIik7XHJcbiAgICBwbSA9IHJlcXVpcmUoXCJwaWNvbWF0Y2hcIik7XHJcbn1cclxuY2F0Y2ggKF9lKSB7XHJcbiAgICAvLyBkbyBub3RoaW5nXHJcbn1cclxuY2xhc3MgQnVpbGRlciB7XHJcbiAgICBnbG9iQ2FjaGUgPSB7fTtcclxuICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgbWF4RGVwdGg6IEluZmluaXR5LFxyXG4gICAgICAgIHN1cHByZXNzRXJyb3JzOiB0cnVlLFxyXG4gICAgICAgIHBhdGhTZXBhcmF0b3I6IHBhdGhfMS5zZXAsXHJcbiAgICAgICAgZmlsdGVyczogW10sXHJcbiAgICB9O1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHsgLi4udGhpcy5vcHRpb25zLCAuLi5vcHRpb25zIH07XHJcbiAgICB9XHJcbiAgICBncm91cCgpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuZ3JvdXAgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgd2l0aFBhdGhTZXBhcmF0b3Ioc2VwYXJhdG9yKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnBhdGhTZXBhcmF0b3IgPSBzZXBhcmF0b3I7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICB3aXRoQmFzZVBhdGgoKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmluY2x1ZGVCYXNlUGF0aCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICB3aXRoUmVsYXRpdmVQYXRocygpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMucmVsYXRpdmVQYXRocyA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICB3aXRoRGlycygpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuaW5jbHVkZURpcnMgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgd2l0aE1heERlcHRoKGRlcHRoKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLm1heERlcHRoID0gZGVwdGg7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICB3aXRoTWF4RmlsZXMobGltaXQpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMubWF4RmlsZXMgPSBsaW1pdDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHdpdGhGdWxsUGF0aHMoKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnJlc29sdmVQYXRocyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmluY2x1ZGVCYXNlUGF0aCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICB3aXRoRXJyb3JzKCkge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5zdXBwcmVzc0Vycm9ycyA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgd2l0aFN5bWxpbmtzKCkge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5yZXNvbHZlU3ltbGlua3MgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLndpdGhGdWxsUGF0aHMoKTtcclxuICAgIH1cclxuICAgIHdpdGhBYm9ydFNpZ25hbChzaWduYWwpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuc2lnbmFsID0gc2lnbmFsO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgbm9ybWFsaXplKCkge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5ub3JtYWxpemVQYXRoID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGZpbHRlcihwcmVkaWNhdGUpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuZmlsdGVycy5wdXNoKHByZWRpY2F0ZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBvbmx5RGlycygpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuZXhjbHVkZUZpbGVzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuaW5jbHVkZURpcnMgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgZXhjbHVkZShwcmVkaWNhdGUpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuZXhjbHVkZSA9IHByZWRpY2F0ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIG9ubHlDb3VudHMoKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLm9ubHlDb3VudHMgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgY3Jhd2wocm9vdCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgYXBpX2J1aWxkZXJfMS5BUElCdWlsZGVyKHJvb3QgfHwgXCIuXCIsIHRoaXMub3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBkZXByZWNhdGVkIFBhc3Mgb3B0aW9ucyB1c2luZyB0aGUgY29uc3RydWN0b3IgaW5zdGVhZDpcclxuICAgICAqIGBgYHRzXHJcbiAgICAgKiBuZXcgZmRpcihvcHRpb25zKS5jcmF3bChcIi9wYXRoL3RvL3Jvb3RcIik7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiB2Ny4wXHJcbiAgICAgKi9cclxuICAgIC8qIGM4IGlnbm9yZSBuZXh0IDQgKi9cclxuICAgIGNyYXdsV2l0aE9wdGlvbnMocm9vdCwgb3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHsgLi4udGhpcy5vcHRpb25zLCAuLi5vcHRpb25zIH07XHJcbiAgICAgICAgcmV0dXJuIG5ldyBhcGlfYnVpbGRlcl8xLkFQSUJ1aWxkZXIocm9vdCB8fCBcIi5cIiwgdGhpcy5vcHRpb25zKTtcclxuICAgIH1cclxuICAgIGdsb2IoLi4ucGF0dGVybnMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nbG9iV2l0aE9wdGlvbnMocGF0dGVybnMsIHsgZG90OiB0cnVlIH0pO1xyXG4gICAgfVxyXG4gICAgZ2xvYldpdGhPcHRpb25zKHBhdHRlcm5zLCBvcHRpb25zKSB7XHJcbiAgICAgICAgLyogYzggaWdub3JlIG5leHQgNSAqL1xyXG4gICAgICAgIGlmICghcG0pIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQbGVhc2UgaW5zdGFsbCBwaWNvbWF0Y2g6IFwibnBtIGkgcGljb21hdGNoXCIgdG8gdXNlIGdsb2IgbWF0Y2hpbmcuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpc01hdGNoID0gdGhpcy5nbG9iQ2FjaGVbcGF0dGVybnMuam9pbihcIlxcMFwiKV07XHJcbiAgICAgICAgaWYgKCFpc01hdGNoKSB7XHJcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBwbShwYXR0ZXJucywgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2xvYkNhY2hlW3BhdHRlcm5zLmpvaW4oXCJcXDBcIildID0gaXNNYXRjaDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlcnMucHVzaCgocGF0aCkgPT4gaXNNYXRjaChwYXRoKSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5CdWlsZGVyID0gQnVpbGRlcjtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pKTtcclxudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3R5cGVzXCIpLCBleHBvcnRzKTtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pKTtcclxudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5mZGlyID0gdm9pZCAwO1xyXG5jb25zdCBidWlsZGVyXzEgPSByZXF1aXJlKFwiLi9zcmMvYnVpbGRlclwiKTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZmRpclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYnVpbGRlcl8xLkJ1aWxkZXI7IH0gfSk7XHJcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zcmNcIiksIGV4cG9ydHMpO1xyXG4iLCJpbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuY29uc3QgQ3B1VG9Ob2RlQXJjaCA9IHtcbiAgICB4ODZfNjQ6ICd4NjQnLFxuICAgIGFhcmNoNjQ6ICdhcm02NCcsXG4gICAgaTY4NjogJ2lhMzInLFxuICAgIGFybXY3OiAnYXJtJyxcbiAgICByaXNjdjY0Z2M6ICdyaXNjdjY0Jyxcbn07XG5leHBvcnQgY29uc3QgTm9kZUFyY2hUb0NwdSA9IHtcbiAgICB4NjQ6ICd4ODZfNjQnLFxuICAgIGFybTY0OiAnYWFyY2g2NCcsXG4gICAgaWEzMjogJ2k2ODYnLFxuICAgIGFybTogJ2FybXY3JyxcbiAgICByaXNjdjY0OiAncmlzY3Y2NGdjJyxcbn07XG5jb25zdCBTeXNUb05vZGVQbGF0Zm9ybSA9IHtcbiAgICBsaW51eDogJ2xpbnV4JyxcbiAgICBmcmVlYnNkOiAnZnJlZWJzZCcsXG4gICAgZGFyd2luOiAnZGFyd2luJyxcbiAgICB3aW5kb3dzOiAnd2luMzInLFxufTtcbmV4cG9ydCBjb25zdCBVbmlBcmNoc0J5UGxhdGZvcm0gPSB7XG4gICAgZGFyd2luOiBbJ3g2NCcsICdhcm02NCddLFxufTtcbmV4cG9ydCBjb25zdCBEZWZhdWx0UGxhdGZvcm1zID0gW1xuICAgIHtcbiAgICAgICAgcGxhdGZvcm06ICd3aW4zMicsXG4gICAgICAgIGFyY2g6ICd4NjQnLFxuICAgICAgICBhYmk6ICdtc3ZjJyxcbiAgICAgICAgcGxhdGZvcm1BcmNoQUJJOiAnd2luMzIteDY0LW1zdmMnLFxuICAgICAgICByYXc6ICd4ODZfNjQtcGMtd2luZG93cy1tc3ZjJyxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcGxhdGZvcm06ICdkYXJ3aW4nLFxuICAgICAgICBhcmNoOiAneDY0JyxcbiAgICAgICAgYWJpOiBudWxsLFxuICAgICAgICBwbGF0Zm9ybUFyY2hBQkk6ICdkYXJ3aW4teDY0JyxcbiAgICAgICAgcmF3OiAneDg2XzY0LWFwcGxlLWRhcndpbicsXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHBsYXRmb3JtOiAnbGludXgnLFxuICAgICAgICBhcmNoOiAneDY0JyxcbiAgICAgICAgYWJpOiAnZ251JyxcbiAgICAgICAgcGxhdGZvcm1BcmNoQUJJOiAnbGludXgteDY0LWdudScsXG4gICAgICAgIHJhdzogJ3g4Nl82NC11bmtub3duLWxpbnV4LWdudScsXG4gICAgfSxcbl07XG4vKipcbiAqIEEgdHJpcGxlIGlzIGEgc3BlY2lmaWMgZm9ybWF0IGZvciBzcGVjaWZ5aW5nIGEgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cbiAqIFRyaXBsZXMgbWF5IGJlIHJlZmVycmVkIHRvIGFzIGEgdGFyZ2V0IHRyaXBsZSB3aGljaCBpcyB0aGUgYXJjaGl0ZWN0dXJlIGZvciB0aGUgYXJ0aWZhY3QgcHJvZHVjZWQsIGFuZCB0aGUgaG9zdCB0cmlwbGUgd2hpY2ggaXMgdGhlIGFyY2hpdGVjdHVyZSB0aGF0IHRoZSBjb21waWxlciBpcyBydW5uaW5nIG9uLlxuICogVGhlIGdlbmVyYWwgZm9ybWF0IG9mIHRoZSB0cmlwbGUgaXMgYDxhcmNoPjxzdWI+LTx2ZW5kb3I+LTxzeXM+LTxhYmk+YCB3aGVyZTpcbiAqICAgLSBgYXJjaGAgPSBUaGUgYmFzZSBDUFUgYXJjaGl0ZWN0dXJlLCBmb3IgZXhhbXBsZSBgeDg2XzY0YCwgYGk2ODZgLCBgYXJtYCwgYHRodW1iYCwgYG1pcHNgLCBldGMuXG4gKiAgIC0gYHN1YmAgPSBUaGUgQ1BVIHN1Yi1hcmNoaXRlY3R1cmUsIGZvciBleGFtcGxlIGBhcm1gIGhhcyBgdjdgLCBgdjdzYCwgYHY1dGVgLCBldGMuXG4gKiAgIC0gYHZlbmRvcmAgPSBUaGUgdmVuZG9yLCBmb3IgZXhhbXBsZSBgdW5rbm93bmAsIGBhcHBsZWAsIGBwY2AsIGBudmlkaWFgLCBldGMuXG4gKiAgIC0gYHN5c2AgPSBUaGUgc3lzdGVtIG5hbWUsIGZvciBleGFtcGxlIGBsaW51eGAsIGB3aW5kb3dzYCwgYGRhcndpbmAsIGV0Yy4gbm9uZSBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgYmFyZS1tZXRhbCB3aXRob3V0IGFuIE9TLlxuICogICAtIGBhYmlgID0gVGhlIEFCSSwgZm9yIGV4YW1wbGUgYGdudWAsIGBhbmRyb2lkYCwgYGVhYmlgLCBldGMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRyaXBsZShyYXdUcmlwbGUpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHRyaXBsZSA9IHJhd1RyaXBsZS5lbmRzV2l0aCgnZWFiaScpXG4gICAgICAgID8gYCR7cmF3VHJpcGxlLnNsaWNlKDAsIC00KX0tZWFiaWBcbiAgICAgICAgOiByYXdUcmlwbGU7XG4gICAgY29uc3QgdHJpcGxlcyA9IHRyaXBsZS5zcGxpdCgnLScpO1xuICAgIGxldCBjcHU7XG4gICAgbGV0IHN5cztcbiAgICBsZXQgYWJpID0gbnVsbDtcbiAgICBpZiAodHJpcGxlcy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgO1xuICAgICAgICBbY3B1LCAsIHN5cywgYWJpID0gbnVsbF0gPSB0cmlwbGVzO1xuICAgIH1cbiAgICBlbHNlIGlmICh0cmlwbGVzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICA7XG4gICAgICAgIFtjcHUsICwgc3lzXSA9IHRyaXBsZXM7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICA7XG4gICAgICAgIFtjcHUsIHN5c10gPSB0cmlwbGVzO1xuICAgIH1cbiAgICBjb25zdCBwbGF0Zm9ybU5hbWUgPSAoX2EgPSBTeXNUb05vZGVQbGF0Zm9ybVtzeXNdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBzeXM7XG4gICAgY29uc3QgYXJjaCA9IChfYiA9IENwdVRvTm9kZUFyY2hbY3B1XSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogY3B1O1xuICAgIHJldHVybiB7XG4gICAgICAgIHBsYXRmb3JtOiBwbGF0Zm9ybU5hbWUsXG4gICAgICAgIGFyY2gsXG4gICAgICAgIGFiaSxcbiAgICAgICAgcGxhdGZvcm1BcmNoQUJJOiBhYmlcbiAgICAgICAgICAgID8gYCR7cGxhdGZvcm1OYW1lfS0ke2FyY2h9LSR7YWJpfWBcbiAgICAgICAgICAgIDogYCR7cGxhdGZvcm1OYW1lfS0ke2FyY2h9YCxcbiAgICAgICAgcmF3OiByYXdUcmlwbGUsXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRIb3N0VGFyZ2V0VHJpcGxlKCkge1xuICAgIGNvbnN0IGhvc3QgPSBleGVjU3luYyhgcnVzdGMgLXZWYCwge1xuICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgIH0pXG4gICAgICAgIC50b1N0cmluZygndXRmOCcpXG4gICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgLmZpbmQoKGxpbmUpID0+IGxpbmUuc3RhcnRzV2l0aCgnaG9zdDogJykpO1xuICAgIGNvbnN0IHRyaXBsZSA9IGhvc3QgPT09IG51bGwgfHwgaG9zdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaG9zdC5zbGljZSgnaG9zdDogJy5sZW5ndGgpO1xuICAgIGlmICghdHJpcGxlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYENhbiBub3QgcGFyc2UgdGFyZ2V0IHRyaXBsZSBmcm9tIGhvc3RgKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlVHJpcGxlKHRyaXBsZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXJzZS10cmlwbGUuanMubWFwIiwiaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgRGVmYXVsdFBsYXRmb3JtcywgcGFyc2VUcmlwbGUgfSBmcm9tICcuL3BhcnNlLXRyaXBsZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFwaUNvbmZpZyhwYWNrYWdlSnNvbiA9ICdwYWNrYWdlLmpzb24nLCBjd2QgPSBwcm9jZXNzLmN3ZCgpKSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nLCBfaDtcbiAgICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBqb2luKGN3ZCwgcGFja2FnZUpzb24pO1xuICAgIGNvbnN0IHBrZ0pzb24gPSByZXF1aXJlKHBhY2thZ2VKc29uUGF0aCk7XG4gICAgY29uc3QgeyB2ZXJzaW9uOiBwYWNrYWdlVmVyc2lvbiwgbmFwaSwgbmFtZSB9ID0gcGtnSnNvbjtcbiAgICBjb25zdCBhZGRpdGlvblBsYXRmb3JtcyA9ICgoX2IgPSAoX2EgPSBuYXBpID09PSBudWxsIHx8IG5hcGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG5hcGkudHJpcGxlcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFkZGl0aW9uYWwpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFtdKS5tYXAocGFyc2VUcmlwbGUpO1xuICAgIGNvbnN0IGRlZmF1bHRQbGF0Zm9ybXMgPSAoKF9jID0gbmFwaSA9PT0gbnVsbCB8fCBuYXBpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuYXBpLnRyaXBsZXMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5kZWZhdWx0cykgPT09IGZhbHNlID8gW10gOiBbLi4uRGVmYXVsdFBsYXRmb3Jtc107XG4gICAgY29uc3QgdHNDb25zdEVudW0gPSAoX2QgPSBuYXBpID09PSBudWxsIHx8IG5hcGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG5hcGkudHMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5jb25zdEVudW07XG4gICAgY29uc3QgcGxhdGZvcm1zID0gWy4uLmRlZmF1bHRQbGF0Zm9ybXMsIC4uLmFkZGl0aW9uUGxhdGZvcm1zXTtcbiAgICBjb25zdCByZWxlYXNlVmVyc2lvbiA9IHByb2Nlc3MuZW52LlJFTEVBU0VfVkVSU0lPTjtcbiAgICBjb25zdCByZWxlYXNlVmVyc2lvbldpdGhvdXRQcmVmaXggPSAocmVsZWFzZVZlcnNpb24gPT09IG51bGwgfHwgcmVsZWFzZVZlcnNpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlbGVhc2VWZXJzaW9uLnN0YXJ0c1dpdGgoJ3YnKSlcbiAgICAgICAgPyByZWxlYXNlVmVyc2lvbi5zdWJzdHJpbmcoMSlcbiAgICAgICAgOiByZWxlYXNlVmVyc2lvbjtcbiAgICBjb25zdCB2ZXJzaW9uID0gcmVsZWFzZVZlcnNpb25XaXRob3V0UHJlZml4ICE9PSBudWxsICYmIHJlbGVhc2VWZXJzaW9uV2l0aG91dFByZWZpeCAhPT0gdm9pZCAwID8gcmVsZWFzZVZlcnNpb25XaXRob3V0UHJlZml4IDogcGFja2FnZVZlcnNpb247XG4gICAgY29uc3QgcGFja2FnZU5hbWUgPSAoX2YgPSAoX2UgPSBuYXBpID09PSBudWxsIHx8IG5hcGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG5hcGkucGFja2FnZSkgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLm5hbWUpICE9PSBudWxsICYmIF9mICE9PSB2b2lkIDAgPyBfZiA6IG5hbWU7XG4gICAgY29uc3QgbnBtQ2xpZW50ID0gKF9nID0gbmFwaSA9PT0gbnVsbCB8fCBuYXBpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuYXBpLm5wbUNsaWVudCkgIT09IG51bGwgJiYgX2cgIT09IHZvaWQgMCA/IF9nIDogJ25wbSc7XG4gICAgY29uc3QgYmluYXJ5TmFtZSA9IChfaCA9IG5hcGkgPT09IG51bGwgfHwgbmFwaSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbmFwaS5uYW1lKSAhPT0gbnVsbCAmJiBfaCAhPT0gdm9pZCAwID8gX2ggOiAnaW5kZXgnO1xuICAgIHJldHVybiB7XG4gICAgICAgIHBsYXRmb3JtcyxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcGFja2FnZU5hbWUsXG4gICAgICAgIGJpbmFyeU5hbWUsXG4gICAgICAgIHBhY2thZ2VKc29uUGF0aCxcbiAgICAgICAgY29udGVudDogcGtnSnNvbixcbiAgICAgICAgbnBtQ2xpZW50LFxuICAgICAgICB0c0NvbnN0RW51bSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RzLmpzLm1hcCIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSAoZmxhZywgYXJndiA9IHByb2Nlc3MuYXJndikgPT4ge1xuXHRjb25zdCBwcmVmaXggPSBmbGFnLnN0YXJ0c1dpdGgoJy0nKSA/ICcnIDogKGZsYWcubGVuZ3RoID09PSAxID8gJy0nIDogJy0tJyk7XG5cdGNvbnN0IHBvc2l0aW9uID0gYXJndi5pbmRleE9mKHByZWZpeCArIGZsYWcpO1xuXHRjb25zdCB0ZXJtaW5hdG9yUG9zaXRpb24gPSBhcmd2LmluZGV4T2YoJy0tJyk7XG5cdHJldHVybiBwb3NpdGlvbiAhPT0gLTEgJiYgKHRlcm1pbmF0b3JQb3NpdGlvbiA9PT0gLTEgfHwgcG9zaXRpb24gPCB0ZXJtaW5hdG9yUG9zaXRpb24pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbmNvbnN0IHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xuY29uc3QgaGFzRmxhZyA9IHJlcXVpcmUoJ2hhcy1mbGFnJyk7XG5cbmNvbnN0IHtlbnZ9ID0gcHJvY2VzcztcblxubGV0IGZvcmNlQ29sb3I7XG5pZiAoaGFzRmxhZygnbm8tY29sb3InKSB8fFxuXHRoYXNGbGFnKCduby1jb2xvcnMnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1mYWxzZScpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPW5ldmVyJykpIHtcblx0Zm9yY2VDb2xvciA9IDA7XG59IGVsc2UgaWYgKGhhc0ZsYWcoJ2NvbG9yJykgfHxcblx0aGFzRmxhZygnY29sb3JzJykgfHxcblx0aGFzRmxhZygnY29sb3I9dHJ1ZScpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPWFsd2F5cycpKSB7XG5cdGZvcmNlQ29sb3IgPSAxO1xufVxuXG5pZiAoJ0ZPUkNFX0NPTE9SJyBpbiBlbnYpIHtcblx0aWYgKGVudi5GT1JDRV9DT0xPUiA9PT0gJ3RydWUnKSB7XG5cdFx0Zm9yY2VDb2xvciA9IDE7XG5cdH0gZWxzZSBpZiAoZW52LkZPUkNFX0NPTE9SID09PSAnZmFsc2UnKSB7XG5cdFx0Zm9yY2VDb2xvciA9IDA7XG5cdH0gZWxzZSB7XG5cdFx0Zm9yY2VDb2xvciA9IGVudi5GT1JDRV9DT0xPUi5sZW5ndGggPT09IDAgPyAxIDogTWF0aC5taW4ocGFyc2VJbnQoZW52LkZPUkNFX0NPTE9SLCAxMCksIDMpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUxldmVsKGxldmVsKSB7XG5cdGlmIChsZXZlbCA9PT0gMCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bGV2ZWwsXG5cdFx0aGFzQmFzaWM6IHRydWUsXG5cdFx0aGFzMjU2OiBsZXZlbCA+PSAyLFxuXHRcdGhhczE2bTogbGV2ZWwgPj0gM1xuXHR9O1xufVxuXG5mdW5jdGlvbiBzdXBwb3J0c0NvbG9yKGhhdmVTdHJlYW0sIHN0cmVhbUlzVFRZKSB7XG5cdGlmIChmb3JjZUNvbG9yID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRpZiAoaGFzRmxhZygnY29sb3I9MTZtJykgfHxcblx0XHRoYXNGbGFnKCdjb2xvcj1mdWxsJykgfHxcblx0XHRoYXNGbGFnKCdjb2xvcj10cnVlY29sb3InKSkge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTI1NicpKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoaGF2ZVN0cmVhbSAmJiAhc3RyZWFtSXNUVFkgJiYgZm9yY2VDb2xvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRjb25zdCBtaW4gPSBmb3JjZUNvbG9yIHx8IDA7XG5cblx0aWYgKGVudi5URVJNID09PSAnZHVtYicpIHtcblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcblx0XHQvLyBXaW5kb3dzIDEwIGJ1aWxkIDEwNTg2IGlzIHRoZSBmaXJzdCBXaW5kb3dzIHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAyNTYgY29sb3JzLlxuXHRcdC8vIFdpbmRvd3MgMTAgYnVpbGQgMTQ5MzEgaXMgdGhlIGZpcnN0IHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAxNm0vVHJ1ZUNvbG9yLlxuXHRcdGNvbnN0IG9zUmVsZWFzZSA9IG9zLnJlbGVhc2UoKS5zcGxpdCgnLicpO1xuXHRcdGlmIChcblx0XHRcdE51bWJlcihvc1JlbGVhc2VbMF0pID49IDEwICYmXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxMDU4NlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIE51bWJlcihvc1JlbGVhc2VbMl0pID49IDE0OTMxID8gMyA6IDI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NJJyBpbiBlbnYpIHtcblx0XHRpZiAoWydUUkFWSVMnLCAnQ0lSQ0xFQ0knLCAnQVBQVkVZT1InLCAnR0lUTEFCX0NJJywgJ0dJVEhVQl9BQ1RJT05TJywgJ0JVSUxES0lURSddLnNvbWUoc2lnbiA9PiBzaWduIGluIGVudikgfHwgZW52LkNJX05BTUUgPT09ICdjb2Rlc2hpcCcpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblxuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRpZiAoJ1RFQU1DSVRZX1ZFUlNJT04nIGluIGVudikge1xuXHRcdHJldHVybiAvXig5XFwuKDAqWzEtOV1cXGQqKVxcLnxcXGR7Mix9XFwuKS8udGVzdChlbnYuVEVBTUNJVFlfVkVSU0lPTikgPyAxIDogMDtcblx0fVxuXG5cdGlmIChlbnYuQ09MT1JURVJNID09PSAndHJ1ZWNvbG9yJykge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKCdURVJNX1BST0dSQU0nIGluIGVudikge1xuXHRcdGNvbnN0IHZlcnNpb24gPSBwYXJzZUludCgoZW52LlRFUk1fUFJPR1JBTV9WRVJTSU9OIHx8ICcnKS5zcGxpdCgnLicpWzBdLCAxMCk7XG5cblx0XHRzd2l0Y2ggKGVudi5URVJNX1BST0dSQU0pIHtcblx0XHRcdGNhc2UgJ2lUZXJtLmFwcCc6XG5cdFx0XHRcdHJldHVybiB2ZXJzaW9uID49IDMgPyAzIDogMjtcblx0XHRcdGNhc2UgJ0FwcGxlX1Rlcm1pbmFsJzpcblx0XHRcdFx0cmV0dXJuIDI7XG5cdFx0XHQvLyBObyBkZWZhdWx0XG5cdFx0fVxuXHR9XG5cblx0aWYgKC8tMjU2KGNvbG9yKT8kL2kudGVzdChlbnYuVEVSTSkpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdGlmICgvXnNjcmVlbnxeeHRlcm18XnZ0MTAwfF52dDIyMHxecnh2dHxjb2xvcnxhbnNpfGN5Z3dpbnxsaW51eC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NPTE9SVEVSTScgaW4gZW52KSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRyZXR1cm4gbWluO1xufVxuXG5mdW5jdGlvbiBnZXRTdXBwb3J0TGV2ZWwoc3RyZWFtKSB7XG5cdGNvbnN0IGxldmVsID0gc3VwcG9ydHNDb2xvcihzdHJlYW0sIHN0cmVhbSAmJiBzdHJlYW0uaXNUVFkpO1xuXHRyZXR1cm4gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0c3VwcG9ydHNDb2xvcjogZ2V0U3VwcG9ydExldmVsLFxuXHRzdGRvdXQ6IHRyYW5zbGF0ZUxldmVsKHN1cHBvcnRzQ29sb3IodHJ1ZSwgdHR5LmlzYXR0eSgxKSkpLFxuXHRzdGRlcnI6IHRyYW5zbGF0ZUxldmVsKHN1cHBvcnRzQ29sb3IodHJ1ZSwgdHR5LmlzYXR0eSgyKSkpXG59O1xuIiwiLyoqXG4gKiBIZWxwZXJzLlxuICovXG5cbnZhciBzID0gMTAwMDtcbnZhciBtID0gcyAqIDYwO1xudmFyIGggPSBtICogNjA7XG52YXIgZCA9IGggKiAyNDtcbnZhciB3ID0gZCAqIDc7XG52YXIgeSA9IGQgKiAzNjUuMjU7XG5cbi8qKlxuICogUGFyc2Ugb3IgZm9ybWF0IHRoZSBnaXZlbiBgdmFsYC5cbiAqXG4gKiBPcHRpb25zOlxuICpcbiAqICAtIGBsb25nYCB2ZXJib3NlIGZvcm1hdHRpbmcgW2ZhbHNlXVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gdmFsXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhyb3cgYW4gZXJyb3IgaWYgdmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSBudW1iZXJcbiAqIEByZXR1cm4ge1N0cmluZ3xOdW1iZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odmFsLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiB2YWwubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBwYXJzZSh2YWwpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHZhbCkpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5sb25nID8gZm10TG9uZyh2YWwpIDogZm10U2hvcnQodmFsKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ3ZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgdmFsaWQgbnVtYmVyLiB2YWw9JyArXG4gICAgICBKU09OLnN0cmluZ2lmeSh2YWwpXG4gICk7XG59O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBgc3RyYCBhbmQgcmV0dXJuIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZShzdHIpIHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChzdHIubGVuZ3RoID4gMTAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBtYXRjaCA9IC9eKC0/KD86XFxkKyk/XFwuP1xcZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyhcbiAgICBzdHJcbiAgKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbiA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICB2YXIgdHlwZSA9IChtYXRjaFsyXSB8fCAnbXMnKS50b0xvd2VyQ2FzZSgpO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICd5ZWFycyc6XG4gICAgY2FzZSAneWVhcic6XG4gICAgY2FzZSAneXJzJzpcbiAgICBjYXNlICd5cic6XG4gICAgY2FzZSAneSc6XG4gICAgICByZXR1cm4gbiAqIHk7XG4gICAgY2FzZSAnd2Vla3MnOlxuICAgIGNhc2UgJ3dlZWsnOlxuICAgIGNhc2UgJ3cnOlxuICAgICAgcmV0dXJuIG4gKiB3O1xuICAgIGNhc2UgJ2RheXMnOlxuICAgIGNhc2UgJ2RheSc6XG4gICAgY2FzZSAnZCc6XG4gICAgICByZXR1cm4gbiAqIGQ7XG4gICAgY2FzZSAnaG91cnMnOlxuICAgIGNhc2UgJ2hvdXInOlxuICAgIGNhc2UgJ2hycyc6XG4gICAgY2FzZSAnaHInOlxuICAgIGNhc2UgJ2gnOlxuICAgICAgcmV0dXJuIG4gKiBoO1xuICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgY2FzZSAnbWlucyc6XG4gICAgY2FzZSAnbWluJzpcbiAgICBjYXNlICdtJzpcbiAgICAgIHJldHVybiBuICogbTtcbiAgICBjYXNlICdzZWNvbmRzJzpcbiAgICBjYXNlICdzZWNvbmQnOlxuICAgIGNhc2UgJ3NlY3MnOlxuICAgIGNhc2UgJ3NlYyc6XG4gICAgY2FzZSAncyc6XG4gICAgICByZXR1cm4gbiAqIHM7XG4gICAgY2FzZSAnbWlsbGlzZWNvbmRzJzpcbiAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgY2FzZSAnbXNlY3MnOlxuICAgIGNhc2UgJ21zZWMnOlxuICAgIGNhc2UgJ21zJzpcbiAgICAgIHJldHVybiBuO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogU2hvcnQgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZm10U2hvcnQobXMpIHtcbiAgdmFyIG1zQWJzID0gTWF0aC5hYnMobXMpO1xuICBpZiAobXNBYnMgPj0gZCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gZCkgKyAnZCc7XG4gIH1cbiAgaWYgKG1zQWJzID49IGgpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGgpICsgJ2gnO1xuICB9XG4gIGlmIChtc0FicyA+PSBtKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBtKSArICdtJztcbiAgfVxuICBpZiAobXNBYnMgPj0gcykge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gcykgKyAncyc7XG4gIH1cbiAgcmV0dXJuIG1zICsgJ21zJztcbn1cblxuLyoqXG4gKiBMb25nIGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdExvbmcobXMpIHtcbiAgdmFyIG1zQWJzID0gTWF0aC5hYnMobXMpO1xuICBpZiAobXNBYnMgPj0gZCkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBkLCAnZGF5Jyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IGgpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgaCwgJ2hvdXInKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gbSkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBtLCAnbWludXRlJyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IHMpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgcywgJ3NlY29uZCcpO1xuICB9XG4gIHJldHVybiBtcyArICcgbXMnO1xufVxuXG4vKipcbiAqIFBsdXJhbGl6YXRpb24gaGVscGVyLlxuICovXG5cbmZ1bmN0aW9uIHBsdXJhbChtcywgbXNBYnMsIG4sIG5hbWUpIHtcbiAgdmFyIGlzUGx1cmFsID0gbXNBYnMgPj0gbiAqIDEuNTtcbiAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBuKSArICcgJyArIG5hbWUgKyAoaXNQbHVyYWwgPyAncycgOiAnJyk7XG59XG4iLCJcbi8qKlxuICogVGhpcyBpcyB0aGUgY29tbW9uIGxvZ2ljIGZvciBib3RoIHRoZSBOb2RlLmpzIGFuZCB3ZWIgYnJvd3NlclxuICogaW1wbGVtZW50YXRpb25zIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5mdW5jdGlvbiBzZXR1cChlbnYpIHtcblx0Y3JlYXRlRGVidWcuZGVidWcgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuZGVmYXVsdCA9IGNyZWF0ZURlYnVnO1xuXHRjcmVhdGVEZWJ1Zy5jb2VyY2UgPSBjb2VyY2U7XG5cdGNyZWF0ZURlYnVnLmRpc2FibGUgPSBkaXNhYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGUgPSBlbmFibGU7XG5cdGNyZWF0ZURlYnVnLmVuYWJsZWQgPSBlbmFibGVkO1xuXHRjcmVhdGVEZWJ1Zy5odW1hbml6ZSA9IHJlcXVpcmUoJ21zJyk7XG5cdGNyZWF0ZURlYnVnLmRlc3Ryb3kgPSBkZXN0cm95O1xuXG5cdE9iamVjdC5rZXlzKGVudikuZm9yRWFjaChrZXkgPT4ge1xuXHRcdGNyZWF0ZURlYnVnW2tleV0gPSBlbnZba2V5XTtcblx0fSk7XG5cblx0LyoqXG5cdCogVGhlIGN1cnJlbnRseSBhY3RpdmUgZGVidWcgbW9kZSBuYW1lcywgYW5kIG5hbWVzIHRvIHNraXAuXG5cdCovXG5cblx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0Y3JlYXRlRGVidWcuc2tpcHMgPSBbXTtcblxuXHQvKipcblx0KiBNYXAgb2Ygc3BlY2lhbCBcIiVuXCIgaGFuZGxpbmcgZnVuY3Rpb25zLCBmb3IgdGhlIGRlYnVnIFwiZm9ybWF0XCIgYXJndW1lbnQuXG5cdCpcblx0KiBWYWxpZCBrZXkgbmFtZXMgYXJlIGEgc2luZ2xlLCBsb3dlciBvciB1cHBlci1jYXNlIGxldHRlciwgaS5lLiBcIm5cIiBhbmQgXCJOXCIuXG5cdCovXG5cdGNyZWF0ZURlYnVnLmZvcm1hdHRlcnMgPSB7fTtcblxuXHQvKipcblx0KiBTZWxlY3RzIGEgY29sb3IgZm9yIGEgZGVidWcgbmFtZXNwYWNlXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHN0cmluZyBmb3IgdGhlIGRlYnVnIGluc3RhbmNlIHRvIGJlIGNvbG9yZWRcblx0KiBAcmV0dXJuIHtOdW1iZXJ8U3RyaW5nfSBBbiBBTlNJIGNvbG9yIGNvZGUgZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gc2VsZWN0Q29sb3IobmFtZXNwYWNlKSB7XG5cdFx0bGV0IGhhc2ggPSAwO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lc3BhY2UubGVuZ3RoOyBpKyspIHtcblx0XHRcdGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIG5hbWVzcGFjZS5jaGFyQ29kZUF0KGkpO1xuXHRcdFx0aGFzaCB8PSAwOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcblx0XHR9XG5cblx0XHRyZXR1cm4gY3JlYXRlRGVidWcuY29sb3JzW01hdGguYWJzKGhhc2gpICUgY3JlYXRlRGVidWcuY29sb3JzLmxlbmd0aF07XG5cdH1cblx0Y3JlYXRlRGVidWcuc2VsZWN0Q29sb3IgPSBzZWxlY3RDb2xvcjtcblxuXHQvKipcblx0KiBDcmVhdGUgYSBkZWJ1Z2dlciB3aXRoIHRoZSBnaXZlbiBgbmFtZXNwYWNlYC5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAcmV0dXJuIHtGdW5jdGlvbn1cblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBjcmVhdGVEZWJ1ZyhuYW1lc3BhY2UpIHtcblx0XHRsZXQgcHJldlRpbWU7XG5cdFx0bGV0IGVuYWJsZU92ZXJyaWRlID0gbnVsbDtcblx0XHRsZXQgbmFtZXNwYWNlc0NhY2hlO1xuXHRcdGxldCBlbmFibGVkQ2FjaGU7XG5cblx0XHRmdW5jdGlvbiBkZWJ1ZyguLi5hcmdzKSB7XG5cdFx0XHQvLyBEaXNhYmxlZD9cblx0XHRcdGlmICghZGVidWcuZW5hYmxlZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNlbGYgPSBkZWJ1ZztcblxuXHRcdFx0Ly8gU2V0IGBkaWZmYCB0aW1lc3RhbXBcblx0XHRcdGNvbnN0IGN1cnIgPSBOdW1iZXIobmV3IERhdGUoKSk7XG5cdFx0XHRjb25zdCBtcyA9IGN1cnIgLSAocHJldlRpbWUgfHwgY3Vycik7XG5cdFx0XHRzZWxmLmRpZmYgPSBtcztcblx0XHRcdHNlbGYucHJldiA9IHByZXZUaW1lO1xuXHRcdFx0c2VsZi5jdXJyID0gY3Vycjtcblx0XHRcdHByZXZUaW1lID0gY3VycjtcblxuXHRcdFx0YXJnc1swXSA9IGNyZWF0ZURlYnVnLmNvZXJjZShhcmdzWzBdKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBhcmdzWzBdICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHQvLyBBbnl0aGluZyBlbHNlIGxldCdzIGluc3BlY3Qgd2l0aCAlT1xuXHRcdFx0XHRhcmdzLnVuc2hpZnQoJyVPJyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFwcGx5IGFueSBgZm9ybWF0dGVyc2AgdHJhbnNmb3JtYXRpb25zXG5cdFx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdFx0YXJnc1swXSA9IGFyZ3NbMF0ucmVwbGFjZSgvJShbYS16QS1aJV0pL2csIChtYXRjaCwgZm9ybWF0KSA9PiB7XG5cdFx0XHRcdC8vIElmIHdlIGVuY291bnRlciBhbiBlc2NhcGVkICUgdGhlbiBkb24ndCBpbmNyZWFzZSB0aGUgYXJyYXkgaW5kZXhcblx0XHRcdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRcdFx0cmV0dXJuICclJztcblx0XHRcdFx0fVxuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZXIgPSBjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzW2Zvcm1hdF07XG5cdFx0XHRcdGlmICh0eXBlb2YgZm9ybWF0dGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsID0gYXJnc1tpbmRleF07XG5cdFx0XHRcdFx0bWF0Y2ggPSBmb3JtYXR0ZXIuY2FsbChzZWxmLCB2YWwpO1xuXG5cdFx0XHRcdFx0Ly8gTm93IHdlIG5lZWQgdG8gcmVtb3ZlIGBhcmdzW2luZGV4XWAgc2luY2UgaXQncyBpbmxpbmVkIGluIHRoZSBgZm9ybWF0YFxuXHRcdFx0XHRcdGFyZ3Muc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdFx0XHRpbmRleC0tO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBtYXRjaDtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBBcHBseSBlbnYtc3BlY2lmaWMgZm9ybWF0dGluZyAoY29sb3JzLCBldGMuKVxuXHRcdFx0Y3JlYXRlRGVidWcuZm9ybWF0QXJncy5jYWxsKHNlbGYsIGFyZ3MpO1xuXG5cdFx0XHRjb25zdCBsb2dGbiA9IHNlbGYubG9nIHx8IGNyZWF0ZURlYnVnLmxvZztcblx0XHRcdGxvZ0ZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXHRcdH1cblxuXHRcdGRlYnVnLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcblx0XHRkZWJ1Zy51c2VDb2xvcnMgPSBjcmVhdGVEZWJ1Zy51c2VDb2xvcnMoKTtcblx0XHRkZWJ1Zy5jb2xvciA9IGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yKG5hbWVzcGFjZSk7XG5cdFx0ZGVidWcuZXh0ZW5kID0gZXh0ZW5kO1xuXHRcdGRlYnVnLmRlc3Ryb3kgPSBjcmVhdGVEZWJ1Zy5kZXN0cm95OyAvLyBYWFggVGVtcG9yYXJ5LiBXaWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkZWJ1ZywgJ2VuYWJsZWQnLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcblx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRpZiAoZW5hYmxlT3ZlcnJpZGUgIT09IG51bGwpIHtcblx0XHRcdFx0XHRyZXR1cm4gZW5hYmxlT3ZlcnJpZGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG5hbWVzcGFjZXNDYWNoZSAhPT0gY3JlYXRlRGVidWcubmFtZXNwYWNlcykge1xuXHRcdFx0XHRcdG5hbWVzcGFjZXNDYWNoZSA9IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXM7XG5cdFx0XHRcdFx0ZW5hYmxlZENhY2hlID0gY3JlYXRlRGVidWcuZW5hYmxlZChuYW1lc3BhY2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVuYWJsZWRDYWNoZTtcblx0XHRcdH0sXG5cdFx0XHRzZXQ6IHYgPT4ge1xuXHRcdFx0XHRlbmFibGVPdmVycmlkZSA9IHY7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBFbnYtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbG9naWMgZm9yIGRlYnVnIGluc3RhbmNlc1xuXHRcdGlmICh0eXBlb2YgY3JlYXRlRGVidWcuaW5pdCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Y3JlYXRlRGVidWcuaW5pdChkZWJ1Zyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlYnVnO1xuXHR9XG5cblx0ZnVuY3Rpb24gZXh0ZW5kKG5hbWVzcGFjZSwgZGVsaW1pdGVyKSB7XG5cdFx0Y29uc3QgbmV3RGVidWcgPSBjcmVhdGVEZWJ1Zyh0aGlzLm5hbWVzcGFjZSArICh0eXBlb2YgZGVsaW1pdGVyID09PSAndW5kZWZpbmVkJyA/ICc6JyA6IGRlbGltaXRlcikgKyBuYW1lc3BhY2UpO1xuXHRcdG5ld0RlYnVnLmxvZyA9IHRoaXMubG9nO1xuXHRcdHJldHVybiBuZXdEZWJ1Zztcblx0fVxuXG5cdC8qKlxuXHQqIEVuYWJsZXMgYSBkZWJ1ZyBtb2RlIGJ5IG5hbWVzcGFjZXMuIFRoaXMgY2FuIGluY2x1ZGUgbW9kZXNcblx0KiBzZXBhcmF0ZWQgYnkgYSBjb2xvbiBhbmQgd2lsZGNhcmRzLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBlbmFibGUobmFtZXNwYWNlcykge1xuXHRcdGNyZWF0ZURlYnVnLnNhdmUobmFtZXNwYWNlcyk7XG5cdFx0Y3JlYXRlRGVidWcubmFtZXNwYWNlcyA9IG5hbWVzcGFjZXM7XG5cblx0XHRjcmVhdGVEZWJ1Zy5uYW1lcyA9IFtdO1xuXHRcdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0XHRsZXQgaTtcblx0XHRjb25zdCBzcGxpdCA9ICh0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycgPyBuYW1lc3BhY2VzIDogJycpLnNwbGl0KC9bXFxzLF0rLyk7XG5cdFx0Y29uc3QgbGVuID0gc3BsaXQubGVuZ3RoO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoIXNwbGl0W2ldKSB7XG5cdFx0XHRcdC8vIGlnbm9yZSBlbXB0eSBzdHJpbmdzXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRuYW1lc3BhY2VzID0gc3BsaXRbaV0ucmVwbGFjZSgvXFwqL2csICcuKj8nKTtcblxuXHRcdFx0aWYgKG5hbWVzcGFjZXNbMF0gPT09ICctJykge1xuXHRcdFx0XHRjcmVhdGVEZWJ1Zy5za2lwcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcy5zbGljZSgxKSArICckJykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcubmFtZXMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMgKyAnJCcpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0KiBEaXNhYmxlIGRlYnVnIG91dHB1dC5cblx0KlxuXHQqIEByZXR1cm4ge1N0cmluZ30gbmFtZXNwYWNlc1xuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGRpc2FibGUoKSB7XG5cdFx0Y29uc3QgbmFtZXNwYWNlcyA9IFtcblx0XHRcdC4uLmNyZWF0ZURlYnVnLm5hbWVzLm1hcCh0b05hbWVzcGFjZSksXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5za2lwcy5tYXAodG9OYW1lc3BhY2UpLm1hcChuYW1lc3BhY2UgPT4gJy0nICsgbmFtZXNwYWNlKVxuXHRcdF0uam9pbignLCcpO1xuXHRcdGNyZWF0ZURlYnVnLmVuYWJsZSgnJyk7XG5cdFx0cmV0dXJuIG5hbWVzcGFjZXM7XG5cdH1cblxuXHQvKipcblx0KiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG1vZGUgbmFtZSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuXHQqIEByZXR1cm4ge0Jvb2xlYW59XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlZChuYW1lKSB7XG5cdFx0aWYgKG5hbWVbbmFtZS5sZW5ndGggLSAxXSA9PT0gJyonKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgaTtcblx0XHRsZXQgbGVuO1xuXG5cdFx0Zm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcuc2tpcHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChjcmVhdGVEZWJ1Zy5za2lwc1tpXS50ZXN0KG5hbWUpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjcmVhdGVEZWJ1Zy5uYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKGNyZWF0ZURlYnVnLm5hbWVzW2ldLnRlc3QobmFtZSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCogQ29udmVydCByZWdleHAgdG8gbmFtZXNwYWNlXG5cdCpcblx0KiBAcGFyYW0ge1JlZ0V4cH0gcmVneGVwXG5cdCogQHJldHVybiB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gdG9OYW1lc3BhY2UocmVnZXhwKSB7XG5cdFx0cmV0dXJuIHJlZ2V4cC50b1N0cmluZygpXG5cdFx0XHQuc3Vic3RyaW5nKDIsIHJlZ2V4cC50b1N0cmluZygpLmxlbmd0aCAtIDIpXG5cdFx0XHQucmVwbGFjZSgvXFwuXFwqXFw/JC8sICcqJyk7XG5cdH1cblxuXHQvKipcblx0KiBDb2VyY2UgYHZhbGAuXG5cdCpcblx0KiBAcGFyYW0ge01peGVkfSB2YWxcblx0KiBAcmV0dXJuIHtNaXhlZH1cblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gY29lcmNlKHZhbCkge1xuXHRcdGlmICh2YWwgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdFx0cmV0dXJuIHZhbC5zdGFjayB8fCB2YWwubWVzc2FnZTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbDtcblx0fVxuXG5cdC8qKlxuXHQqIFhYWCBETyBOT1QgVVNFLiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHN0dWIgZnVuY3Rpb24uXG5cdCogWFhYIEl0IFdJTEwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuXHQqL1xuXHRmdW5jdGlvbiBkZXN0cm95KCkge1xuXHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHR9XG5cblx0Y3JlYXRlRGVidWcuZW5hYmxlKGNyZWF0ZURlYnVnLmxvYWQoKSk7XG5cblx0cmV0dXJuIGNyZWF0ZURlYnVnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldHVwO1xuIiwiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbmNvbnN0IHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBOb2RlLmpzIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5leHBvcnRzLmluaXQgPSBpbml0O1xuZXhwb3J0cy5sb2cgPSBsb2c7XG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuZGVzdHJveSA9IHV0aWwuZGVwcmVjYXRlKFxuXHQoKSA9PiB7fSxcblx0J0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nXG4pO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFs2LCAyLCAzLCA0LCA1LCAxXTtcblxudHJ5IHtcblx0Ly8gT3B0aW9uYWwgZGVwZW5kZW5jeSAoYXMgaW4sIGRvZXNuJ3QgbmVlZCB0byBiZSBpbnN0YWxsZWQsIE5PVCBsaWtlIG9wdGlvbmFsRGVwZW5kZW5jaWVzIGluIHBhY2thZ2UuanNvbilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuXHRjb25zdCBzdXBwb3J0c0NvbG9yID0gcmVxdWlyZSgnc3VwcG9ydHMtY29sb3InKTtcblxuXHRpZiAoc3VwcG9ydHNDb2xvciAmJiAoc3VwcG9ydHNDb2xvci5zdGRlcnIgfHwgc3VwcG9ydHNDb2xvcikubGV2ZWwgPj0gMikge1xuXHRcdGV4cG9ydHMuY29sb3JzID0gW1xuXHRcdFx0MjAsXG5cdFx0XHQyMSxcblx0XHRcdDI2LFxuXHRcdFx0MjcsXG5cdFx0XHQzMixcblx0XHRcdDMzLFxuXHRcdFx0MzgsXG5cdFx0XHQzOSxcblx0XHRcdDQwLFxuXHRcdFx0NDEsXG5cdFx0XHQ0Mixcblx0XHRcdDQzLFxuXHRcdFx0NDQsXG5cdFx0XHQ0NSxcblx0XHRcdDU2LFxuXHRcdFx0NTcsXG5cdFx0XHQ2Mixcblx0XHRcdDYzLFxuXHRcdFx0NjgsXG5cdFx0XHQ2OSxcblx0XHRcdDc0LFxuXHRcdFx0NzUsXG5cdFx0XHQ3Nixcblx0XHRcdDc3LFxuXHRcdFx0NzgsXG5cdFx0XHQ3OSxcblx0XHRcdDgwLFxuXHRcdFx0ODEsXG5cdFx0XHQ5Mixcblx0XHRcdDkzLFxuXHRcdFx0OTgsXG5cdFx0XHQ5OSxcblx0XHRcdDExMixcblx0XHRcdDExMyxcblx0XHRcdDEyOCxcblx0XHRcdDEyOSxcblx0XHRcdDEzNCxcblx0XHRcdDEzNSxcblx0XHRcdDE0OCxcblx0XHRcdDE0OSxcblx0XHRcdDE2MCxcblx0XHRcdDE2MSxcblx0XHRcdDE2Mixcblx0XHRcdDE2Myxcblx0XHRcdDE2NCxcblx0XHRcdDE2NSxcblx0XHRcdDE2Nixcblx0XHRcdDE2Nyxcblx0XHRcdDE2OCxcblx0XHRcdDE2OSxcblx0XHRcdDE3MCxcblx0XHRcdDE3MSxcblx0XHRcdDE3Mixcblx0XHRcdDE3Myxcblx0XHRcdDE3OCxcblx0XHRcdDE3OSxcblx0XHRcdDE4NCxcblx0XHRcdDE4NSxcblx0XHRcdDE5Nixcblx0XHRcdDE5Nyxcblx0XHRcdDE5OCxcblx0XHRcdDE5OSxcblx0XHRcdDIwMCxcblx0XHRcdDIwMSxcblx0XHRcdDIwMixcblx0XHRcdDIwMyxcblx0XHRcdDIwNCxcblx0XHRcdDIwNSxcblx0XHRcdDIwNixcblx0XHRcdDIwNyxcblx0XHRcdDIwOCxcblx0XHRcdDIwOSxcblx0XHRcdDIxNCxcblx0XHRcdDIxNSxcblx0XHRcdDIyMCxcblx0XHRcdDIyMVxuXHRcdF07XG5cdH1cbn0gY2F0Y2ggKGVycm9yKSB7XG5cdC8vIFN3YWxsb3cgLSB3ZSBvbmx5IGNhcmUgaWYgYHN1cHBvcnRzLWNvbG9yYCBpcyBhdmFpbGFibGU7IGl0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbn1cblxuLyoqXG4gKiBCdWlsZCB1cCB0aGUgZGVmYXVsdCBgaW5zcGVjdE9wdHNgIG9iamVjdCBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogICAkIERFQlVHX0NPTE9SUz1ubyBERUJVR19ERVBUSD0xMCBERUJVR19TSE9XX0hJRERFTj1lbmFibGVkIG5vZGUgc2NyaXB0LmpzXG4gKi9cblxuZXhwb3J0cy5pbnNwZWN0T3B0cyA9IE9iamVjdC5rZXlzKHByb2Nlc3MuZW52KS5maWx0ZXIoa2V5ID0+IHtcblx0cmV0dXJuIC9eZGVidWdfL2kudGVzdChrZXkpO1xufSkucmVkdWNlKChvYmosIGtleSkgPT4ge1xuXHQvLyBDYW1lbC1jYXNlXG5cdGNvbnN0IHByb3AgPSBrZXlcblx0XHQuc3Vic3RyaW5nKDYpXG5cdFx0LnRvTG93ZXJDYXNlKClcblx0XHQucmVwbGFjZSgvXyhbYS16XSkvZywgKF8sIGspID0+IHtcblx0XHRcdHJldHVybiBrLnRvVXBwZXJDYXNlKCk7XG5cdFx0fSk7XG5cblx0Ly8gQ29lcmNlIHN0cmluZyB2YWx1ZSBpbnRvIEpTIHZhbHVlXG5cdGxldCB2YWwgPSBwcm9jZXNzLmVudltrZXldO1xuXHRpZiAoL14oeWVzfG9ufHRydWV8ZW5hYmxlZCkkL2kudGVzdCh2YWwpKSB7XG5cdFx0dmFsID0gdHJ1ZTtcblx0fSBlbHNlIGlmICgvXihub3xvZmZ8ZmFsc2V8ZGlzYWJsZWQpJC9pLnRlc3QodmFsKSkge1xuXHRcdHZhbCA9IGZhbHNlO1xuXHR9IGVsc2UgaWYgKHZhbCA9PT0gJ251bGwnKSB7XG5cdFx0dmFsID0gbnVsbDtcblx0fSBlbHNlIHtcblx0XHR2YWwgPSBOdW1iZXIodmFsKTtcblx0fVxuXG5cdG9ialtwcm9wXSA9IHZhbDtcblx0cmV0dXJuIG9iajtcbn0sIHt9KTtcblxuLyoqXG4gKiBJcyBzdGRvdXQgYSBUVFk/IENvbG9yZWQgb3V0cHV0IGlzIGVuYWJsZWQgd2hlbiBgdHJ1ZWAuXG4gKi9cblxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuXHRyZXR1cm4gJ2NvbG9ycycgaW4gZXhwb3J0cy5pbnNwZWN0T3B0cyA/XG5cdFx0Qm9vbGVhbihleHBvcnRzLmluc3BlY3RPcHRzLmNvbG9ycykgOlxuXHRcdHR0eS5pc2F0dHkocHJvY2Vzcy5zdGRlcnIuZmQpO1xufVxuXG4vKipcbiAqIEFkZHMgQU5TSSBjb2xvciBlc2NhcGUgY29kZXMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuXHRjb25zdCB7bmFtZXNwYWNlOiBuYW1lLCB1c2VDb2xvcnN9ID0gdGhpcztcblxuXHRpZiAodXNlQ29sb3JzKSB7XG5cdFx0Y29uc3QgYyA9IHRoaXMuY29sb3I7XG5cdFx0Y29uc3QgY29sb3JDb2RlID0gJ1xcdTAwMUJbMycgKyAoYyA8IDggPyBjIDogJzg7NTsnICsgYyk7XG5cdFx0Y29uc3QgcHJlZml4ID0gYCAgJHtjb2xvckNvZGV9OzFtJHtuYW1lfSBcXHUwMDFCWzBtYDtcblxuXHRcdGFyZ3NbMF0gPSBwcmVmaXggKyBhcmdzWzBdLnNwbGl0KCdcXG4nKS5qb2luKCdcXG4nICsgcHJlZml4KTtcblx0XHRhcmdzLnB1c2goY29sb3JDb2RlICsgJ20rJyArIG1vZHVsZS5leHBvcnRzLmh1bWFuaXplKHRoaXMuZGlmZikgKyAnXFx1MDAxQlswbScpO1xuXHR9IGVsc2Uge1xuXHRcdGFyZ3NbMF0gPSBnZXREYXRlKCkgKyBuYW1lICsgJyAnICsgYXJnc1swXTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXREYXRlKCkge1xuXHRpZiAoZXhwb3J0cy5pbnNwZWN0T3B0cy5oaWRlRGF0ZSkge1xuXHRcdHJldHVybiAnJztcblx0fVxuXHRyZXR1cm4gbmV3IERhdGUoKS50b0lTT1N0cmluZygpICsgJyAnO1xufVxuXG4vKipcbiAqIEludm9rZXMgYHV0aWwuZm9ybWF0V2l0aE9wdGlvbnMoKWAgd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cyBhbmQgd3JpdGVzIHRvIHN0ZGVyci5cbiAqL1xuXG5mdW5jdGlvbiBsb2coLi4uYXJncykge1xuXHRyZXR1cm4gcHJvY2Vzcy5zdGRlcnIud3JpdGUodXRpbC5mb3JtYXRXaXRoT3B0aW9ucyhleHBvcnRzLmluc3BlY3RPcHRzLCAuLi5hcmdzKSArICdcXG4nKTtcbn1cblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHRpZiAobmFtZXNwYWNlcykge1xuXHRcdHByb2Nlc3MuZW52LkRFQlVHID0gbmFtZXNwYWNlcztcblx0fSBlbHNlIHtcblx0XHQvLyBJZiB5b3Ugc2V0IGEgcHJvY2Vzcy5lbnYgZmllbGQgdG8gbnVsbCBvciB1bmRlZmluZWQsIGl0IGdldHMgY2FzdCB0byB0aGVcblx0XHQvLyBzdHJpbmcgJ251bGwnIG9yICd1bmRlZmluZWQnLiBKdXN0IGRlbGV0ZSBpbnN0ZWFkLlxuXHRcdGRlbGV0ZSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdHJldHVybiBwcm9jZXNzLmVudi5ERUJVRztcbn1cblxuLyoqXG4gKiBJbml0IGxvZ2ljIGZvciBgZGVidWdgIGluc3RhbmNlcy5cbiAqXG4gKiBDcmVhdGUgYSBuZXcgYGluc3BlY3RPcHRzYCBvYmplY3QgaW4gY2FzZSBgdXNlQ29sb3JzYCBpcyBzZXRcbiAqIGRpZmZlcmVudGx5IGZvciBhIHBhcnRpY3VsYXIgYGRlYnVnYCBpbnN0YW5jZS5cbiAqL1xuXG5mdW5jdGlvbiBpbml0KGRlYnVnKSB7XG5cdGRlYnVnLmluc3BlY3RPcHRzID0ge307XG5cblx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGV4cG9ydHMuaW5zcGVjdE9wdHMpO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRkZWJ1Zy5pbnNwZWN0T3B0c1trZXlzW2ldXSA9IGV4cG9ydHMuaW5zcGVjdE9wdHNba2V5c1tpXV07XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJW8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsIG9uIGEgc2luZ2xlIGxpbmUuXG4gKi9cblxuZm9ybWF0dGVycy5vID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKVxuXHRcdC5zcGxpdCgnXFxuJylcblx0XHQubWFwKHN0ciA9PiBzdHIudHJpbSgpKVxuXHRcdC5qb2luKCcgJyk7XG59O1xuXG4vKipcbiAqIE1hcCAlTyB0byBgdXRpbC5pbnNwZWN0KClgLCBhbGxvd2luZyBtdWx0aXBsZSBsaW5lcyBpZiBuZWVkZWQuXG4gKi9cblxuZm9ybWF0dGVycy5PID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKTtcbn07XG4iLCIvKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSB3ZWIgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLnN0b3JhZ2UgPSBsb2NhbHN0b3JhZ2UoKTtcbmV4cG9ydHMuZGVzdHJveSA9ICgoKSA9PiB7XG5cdGxldCB3YXJuZWQgPSBmYWxzZTtcblxuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGlmICghd2FybmVkKSB7XG5cdFx0XHR3YXJuZWQgPSB0cnVlO1xuXHRcdFx0Y29uc29sZS53YXJuKCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJyk7XG5cdFx0fVxuXHR9O1xufSkoKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbXG5cdCcjMDAwMENDJyxcblx0JyMwMDAwRkYnLFxuXHQnIzAwMzNDQycsXG5cdCcjMDAzM0ZGJyxcblx0JyMwMDY2Q0MnLFxuXHQnIzAwNjZGRicsXG5cdCcjMDA5OUNDJyxcblx0JyMwMDk5RkYnLFxuXHQnIzAwQ0MwMCcsXG5cdCcjMDBDQzMzJyxcblx0JyMwMENDNjYnLFxuXHQnIzAwQ0M5OScsXG5cdCcjMDBDQ0NDJyxcblx0JyMwMENDRkYnLFxuXHQnIzMzMDBDQycsXG5cdCcjMzMwMEZGJyxcblx0JyMzMzMzQ0MnLFxuXHQnIzMzMzNGRicsXG5cdCcjMzM2NkNDJyxcblx0JyMzMzY2RkYnLFxuXHQnIzMzOTlDQycsXG5cdCcjMzM5OUZGJyxcblx0JyMzM0NDMDAnLFxuXHQnIzMzQ0MzMycsXG5cdCcjMzNDQzY2Jyxcblx0JyMzM0NDOTknLFxuXHQnIzMzQ0NDQycsXG5cdCcjMzNDQ0ZGJyxcblx0JyM2NjAwQ0MnLFxuXHQnIzY2MDBGRicsXG5cdCcjNjYzM0NDJyxcblx0JyM2NjMzRkYnLFxuXHQnIzY2Q0MwMCcsXG5cdCcjNjZDQzMzJyxcblx0JyM5OTAwQ0MnLFxuXHQnIzk5MDBGRicsXG5cdCcjOTkzM0NDJyxcblx0JyM5OTMzRkYnLFxuXHQnIzk5Q0MwMCcsXG5cdCcjOTlDQzMzJyxcblx0JyNDQzAwMDAnLFxuXHQnI0NDMDAzMycsXG5cdCcjQ0MwMDY2Jyxcblx0JyNDQzAwOTknLFxuXHQnI0NDMDBDQycsXG5cdCcjQ0MwMEZGJyxcblx0JyNDQzMzMDAnLFxuXHQnI0NDMzMzMycsXG5cdCcjQ0MzMzY2Jyxcblx0JyNDQzMzOTknLFxuXHQnI0NDMzNDQycsXG5cdCcjQ0MzM0ZGJyxcblx0JyNDQzY2MDAnLFxuXHQnI0NDNjYzMycsXG5cdCcjQ0M5OTAwJyxcblx0JyNDQzk5MzMnLFxuXHQnI0NDQ0MwMCcsXG5cdCcjQ0NDQzMzJyxcblx0JyNGRjAwMDAnLFxuXHQnI0ZGMDAzMycsXG5cdCcjRkYwMDY2Jyxcblx0JyNGRjAwOTknLFxuXHQnI0ZGMDBDQycsXG5cdCcjRkYwMEZGJyxcblx0JyNGRjMzMDAnLFxuXHQnI0ZGMzMzMycsXG5cdCcjRkYzMzY2Jyxcblx0JyNGRjMzOTknLFxuXHQnI0ZGMzNDQycsXG5cdCcjRkYzM0ZGJyxcblx0JyNGRjY2MDAnLFxuXHQnI0ZGNjYzMycsXG5cdCcjRkY5OTAwJyxcblx0JyNGRjk5MzMnLFxuXHQnI0ZGQ0MwMCcsXG5cdCcjRkZDQzMzJ1xuXTtcblxuLyoqXG4gKiBDdXJyZW50bHkgb25seSBXZWJLaXQtYmFzZWQgV2ViIEluc3BlY3RvcnMsIEZpcmVmb3ggPj0gdjMxLFxuICogYW5kIHRoZSBGaXJlYnVnIGV4dGVuc2lvbiAoYW55IEZpcmVmb3ggdmVyc2lvbikgYXJlIGtub3duXG4gKiB0byBzdXBwb3J0IFwiJWNcIiBDU1MgY3VzdG9taXphdGlvbnMuXG4gKlxuICogVE9ETzogYWRkIGEgYGxvY2FsU3RvcmFnZWAgdmFyaWFibGUgdG8gZXhwbGljaXRseSBlbmFibGUvZGlzYWJsZSBjb2xvcnNcbiAqL1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuXHQvLyBOQjogSW4gYW4gRWxlY3Ryb24gcHJlbG9hZCBzY3JpcHQsIGRvY3VtZW50IHdpbGwgYmUgZGVmaW5lZCBidXQgbm90IGZ1bGx5XG5cdC8vIGluaXRpYWxpemVkLiBTaW5jZSB3ZSBrbm93IHdlJ3JlIGluIENocm9tZSwgd2UnbGwganVzdCBkZXRlY3QgdGhpcyBjYXNlXG5cdC8vIGV4cGxpY2l0bHlcblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wcm9jZXNzICYmICh3aW5kb3cucHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHdpbmRvdy5wcm9jZXNzLl9fbndqcykpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIEludGVybmV0IEV4cGxvcmVyIGFuZCBFZGdlIGRvIG5vdCBzdXBwb3J0IGNvbG9ycy5cblx0aWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oZWRnZXx0cmlkZW50KVxcLyhcXGQrKS8pKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gSXMgd2Via2l0PyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNjQ1OTYwNi8zNzY3NzNcblx0Ly8gZG9jdW1lbnQgaXMgdW5kZWZpbmVkIGluIHJlYWN0LW5hdGl2ZTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LW5hdGl2ZS9wdWxsLzE2MzJcblx0cmV0dXJuICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2UpIHx8XG5cdFx0Ly8gSXMgZmlyZWJ1Zz8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzk4MTIwLzM3Njc3M1xuXHRcdCh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUuZmlyZWJ1ZyB8fCAod2luZG93LmNvbnNvbGUuZXhjZXB0aW9uICYmIHdpbmRvdy5jb25zb2xlLnRhYmxlKSkpIHx8XG5cdFx0Ly8gSXMgZmlyZWZveCA+PSB2MzE/XG5cdFx0Ly8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Ub29scy9XZWJfQ29uc29sZSNTdHlsaW5nX21lc3NhZ2VzXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLykgJiYgcGFyc2VJbnQoUmVnRXhwLiQxLCAxMCkgPj0gMzEpIHx8XG5cdFx0Ly8gRG91YmxlIGNoZWNrIHdlYmtpdCBpbiB1c2VyQWdlbnQganVzdCBpbiBjYXNlIHdlIGFyZSBpbiBhIHdvcmtlclxuXHRcdCh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXBwbGV3ZWJraXRcXC8oXFxkKykvKSk7XG59XG5cbi8qKlxuICogQ29sb3JpemUgbG9nIGFyZ3VtZW50cyBpZiBlbmFibGVkLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0QXJncyhhcmdzKSB7XG5cdGFyZ3NbMF0gPSAodGhpcy51c2VDb2xvcnMgPyAnJWMnIDogJycpICtcblx0XHR0aGlzLm5hbWVzcGFjZSArXG5cdFx0KHRoaXMudXNlQ29sb3JzID8gJyAlYycgOiAnICcpICtcblx0XHRhcmdzWzBdICtcblx0XHQodGhpcy51c2VDb2xvcnMgPyAnJWMgJyA6ICcgJykgK1xuXHRcdCcrJyArIG1vZHVsZS5leHBvcnRzLmh1bWFuaXplKHRoaXMuZGlmZik7XG5cblx0aWYgKCF0aGlzLnVzZUNvbG9ycykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IGMgPSAnY29sb3I6ICcgKyB0aGlzLmNvbG9yO1xuXHRhcmdzLnNwbGljZSgxLCAwLCBjLCAnY29sb3I6IGluaGVyaXQnKTtcblxuXHQvLyBUaGUgZmluYWwgXCIlY1wiIGlzIHNvbWV3aGF0IHRyaWNreSwgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBvdGhlclxuXHQvLyBhcmd1bWVudHMgcGFzc2VkIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlICVjLCBzbyB3ZSBuZWVkIHRvXG5cdC8vIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QgaW5kZXggdG8gaW5zZXJ0IHRoZSBDU1MgaW50b1xuXHRsZXQgaW5kZXggPSAwO1xuXHRsZXQgbGFzdEMgPSAwO1xuXHRhcmdzWzBdLnJlcGxhY2UoLyVbYS16QS1aJV0vZywgbWF0Y2ggPT4ge1xuXHRcdGlmIChtYXRjaCA9PT0gJyUlJykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpbmRleCsrO1xuXHRcdGlmIChtYXRjaCA9PT0gJyVjJykge1xuXHRcdFx0Ly8gV2Ugb25seSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgKmxhc3QqICVjXG5cdFx0XHQvLyAodGhlIHVzZXIgbWF5IGhhdmUgcHJvdmlkZWQgdGhlaXIgb3duKVxuXHRcdFx0bGFzdEMgPSBpbmRleDtcblx0XHR9XG5cdH0pO1xuXG5cdGFyZ3Muc3BsaWNlKGxhc3RDLCAwLCBjKTtcbn1cblxuLyoqXG4gKiBJbnZva2VzIGBjb25zb2xlLmRlYnVnKClgIHdoZW4gYXZhaWxhYmxlLlxuICogTm8tb3Agd2hlbiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGEgXCJmdW5jdGlvblwiLlxuICogSWYgYGNvbnNvbGUuZGVidWdgIGlzIG5vdCBhdmFpbGFibGUsIGZhbGxzIGJhY2tcbiAqIHRvIGBjb25zb2xlLmxvZ2AuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuZXhwb3J0cy5sb2cgPSBjb25zb2xlLmRlYnVnIHx8IGNvbnNvbGUubG9nIHx8ICgoKSA9PiB7fSk7XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzYXZlKG5hbWVzcGFjZXMpIHtcblx0dHJ5IHtcblx0XHRpZiAobmFtZXNwYWNlcykge1xuXHRcdFx0ZXhwb3J0cy5zdG9yYWdlLnNldEl0ZW0oJ2RlYnVnJywgbmFtZXNwYWNlcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGV4cG9ydHMuc3RvcmFnZS5yZW1vdmVJdGVtKCdkZWJ1ZycpO1xuXHRcdH1cblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbG9hZCgpIHtcblx0bGV0IHI7XG5cdHRyeSB7XG5cdFx0ciA9IGV4cG9ydHMuc3RvcmFnZS5nZXRJdGVtKCdkZWJ1ZycpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxuXG5cdC8vIElmIGRlYnVnIGlzbid0IHNldCBpbiBMUywgYW5kIHdlJ3JlIGluIEVsZWN0cm9uLCB0cnkgdG8gbG9hZCAkREVCVUdcblx0aWYgKCFyICYmIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiAnZW52JyBpbiBwcm9jZXNzKSB7XG5cdFx0ciA9IHByb2Nlc3MuZW52LkRFQlVHO1xuXHR9XG5cblx0cmV0dXJuIHI7XG59XG5cbi8qKlxuICogTG9jYWxzdG9yYWdlIGF0dGVtcHRzIHRvIHJldHVybiB0aGUgbG9jYWxzdG9yYWdlLlxuICpcbiAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugc2FmYXJpIHRocm93c1xuICogd2hlbiBhIHVzZXIgZGlzYWJsZXMgY29va2llcy9sb2NhbHN0b3JhZ2VcbiAqIGFuZCB5b3UgYXR0ZW1wdCB0byBhY2Nlc3MgaXQuXG4gKlxuICogQHJldHVybiB7TG9jYWxTdG9yYWdlfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbG9jYWxzdG9yYWdlKCkge1xuXHR0cnkge1xuXHRcdC8vIFRWTUxLaXQgKEFwcGxlIFRWIEpTIFJ1bnRpbWUpIGRvZXMgbm90IGhhdmUgYSB3aW5kb3cgb2JqZWN0LCBqdXN0IGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHRcblx0XHQvLyBUaGUgQnJvd3NlciBhbHNvIGhhcyBsb2NhbFN0b3JhZ2UgaW4gdGhlIGdsb2JhbCBjb250ZXh0LlxuXHRcdHJldHVybiBsb2NhbFN0b3JhZ2U7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb21tb24nKShleHBvcnRzKTtcblxuY29uc3Qge2Zvcm1hdHRlcnN9ID0gbW9kdWxlLmV4cG9ydHM7XG5cbi8qKlxuICogTWFwICVqIHRvIGBKU09OLnN0cmluZ2lmeSgpYCwgc2luY2Ugbm8gV2ViIEluc3BlY3RvcnMgZG8gdGhhdCBieSBkZWZhdWx0LlxuICovXG5cbmZvcm1hdHRlcnMuaiA9IGZ1bmN0aW9uICh2KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHYpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdHJldHVybiAnW1VuZXhwZWN0ZWRKU09OUGFyc2VFcnJvcl06ICcgKyBlcnJvci5tZXNzYWdlO1xuXHR9XG59O1xuIiwiLyoqXG4gKiBEZXRlY3QgRWxlY3Ryb24gcmVuZGVyZXIgLyBud2pzIHByb2Nlc3MsIHdoaWNoIGlzIG5vZGUsIGJ1dCB3ZSBzaG91bGRcbiAqIHRyZWF0IGFzIGEgYnJvd3Nlci5cbiAqL1xuXG5pZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8IHByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJyB8fCBwcm9jZXNzLmJyb3dzZXIgPT09IHRydWUgfHwgcHJvY2Vzcy5fX253anMpIHtcblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Jyb3dzZXIuanMnKTtcbn0gZWxzZSB7XG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9ub2RlLmpzJyk7XG59XG4iLCJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuZXhwb3J0IGNvbnN0IGRlYnVnRmFjdG9yeSA9IChuYW1lc3BhY2UpID0+IGRlYnVnKGBuYXBpOiR7bmFtZXNwYWNlfWApO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVidWcuanMubWFwIiwiaW1wb3J0IHsgX19hd2FpdGVyIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyByZWFkRmlsZSwgd3JpdGVGaWxlLCBjb3B5RmlsZSwgbWtkaXIsIHVubGluaywgc3RhdCB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnO1xuZXhwb3J0IGNvbnN0IHJlYWRGaWxlQXN5bmMgPSBwcm9taXNpZnkocmVhZEZpbGUpO1xuZXhwb3J0IGNvbnN0IHdyaXRlRmlsZUFzeW5jID0gcHJvbWlzaWZ5KHdyaXRlRmlsZSk7XG5leHBvcnQgY29uc3QgdW5saW5rQXN5bmMgPSBwcm9taXNpZnkodW5saW5rKTtcbmV4cG9ydCBjb25zdCBjb3B5RmlsZUFzeW5jID0gcHJvbWlzaWZ5KGNvcHlGaWxlKTtcbmV4cG9ydCBjb25zdCBta2RpckFzeW5jID0gcHJvbWlzaWZ5KG1rZGlyKTtcbmV4cG9ydCBjb25zdCBzdGF0QXN5bmMgPSBwcm9taXNpZnkoc3RhdCk7XG5leHBvcnQgZnVuY3Rpb24gZmlsZUV4aXN0cyhwYXRoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhpc3RzID0geWllbGQgc3RhdEFzeW5jKHBhdGgpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIGV4aXN0cztcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwaWNrKG8sIC4uLmtleXMpIHtcbiAgICByZXR1cm4ga2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgIGFjY1trZXldID0gb1trZXldO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsImltcG9ydCB7IF9fYXdhaXRlciB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgam9pbiwgcGFyc2UgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gJ2NsaXBhbmlvbic7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjb2xvcmV0dGUnO1xuaW1wb3J0IHsgZmRpciB9IGZyb20gJ2ZkaXInO1xuaW1wb3J0IHsgZ2V0TmFwaUNvbmZpZyB9IGZyb20gJy4vY29uc3RzJztcbmltcG9ydCB7IGRlYnVnRmFjdG9yeSB9IGZyb20gJy4vZGVidWcnO1xuaW1wb3J0IHsgVW5pQXJjaHNCeVBsYXRmb3JtIH0gZnJvbSAnLi9wYXJzZS10cmlwbGUnO1xuaW1wb3J0IHsgcmVhZEZpbGVBc3luYywgd3JpdGVGaWxlQXN5bmMgfSBmcm9tICcuL3V0aWxzJztcbmNvbnN0IGRlYnVnID0gZGVidWdGYWN0b3J5KCdhcnRpZmFjdHMnKTtcbmV4cG9ydCBjbGFzcyBBcnRpZmFjdHNDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuc291cmNlRGlyID0gT3B0aW9uLlN0cmluZygnLWQsLS1kaXInLCAnYXJ0aWZhY3RzJyk7XG4gICAgICAgIHRoaXMuZGlzdERpciA9IE9wdGlvbi5TdHJpbmcoJy0tZGlzdCcsICducG0nKTtcbiAgICAgICAgdGhpcy5jb25maWdGaWxlTmFtZSA9IE9wdGlvbi5TdHJpbmcoJy1jLC0tY29uZmlnJyk7XG4gICAgfVxuICAgIGV4ZWN1dGUoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCB7IHBsYXRmb3JtcywgYmluYXJ5TmFtZSwgcGFja2FnZUpzb25QYXRoIH0gPSBnZXROYXBpQ29uZmlnKHRoaXMuY29uZmlnRmlsZU5hbWUpO1xuICAgICAgICAgICAgY29uc3QgcGFja2FnZUpzb25EaXIgPSBwYXJzZShwYWNrYWdlSnNvblBhdGgpLmRpcjtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUFwaSA9IG5ldyBmZGlyKClcbiAgICAgICAgICAgICAgICAud2l0aEZ1bGxQYXRocygpXG4gICAgICAgICAgICAgICAgLmNyYXdsKGpvaW4ocHJvY2Vzcy5jd2QoKSwgdGhpcy5zb3VyY2VEaXIpKTtcbiAgICAgICAgICAgIGNvbnN0IGRpc3REaXJzID0gcGxhdGZvcm1zLm1hcCgocGxhdGZvcm0pID0+IGpvaW4ocHJvY2Vzcy5jd2QoKSwgdGhpcy5kaXN0RGlyLCBwbGF0Zm9ybS5wbGF0Zm9ybUFyY2hBQkkpKTtcbiAgICAgICAgICAgIGNvbnN0IHVuaXZlcnNhbFNvdXJjZUJpbnMgPSBuZXcgU2V0KHBsYXRmb3Jtc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHBsYXRmb3JtKSA9PiBwbGF0Zm9ybS5hcmNoID09PSAndW5pdmVyc2FsJylcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgocCkgPT4gVW5pQXJjaHNCeVBsYXRmb3JtW3AucGxhdGZvcm1dLm1hcCgoYSkgPT4gYCR7cC5wbGF0Zm9ybX0tJHthfWApKSk7XG4gICAgICAgICAgICB5aWVsZCBzb3VyY2VBcGkud2l0aFByb21pc2UoKS50aGVuKChvdXRwdXQpID0+IFByb21pc2UuYWxsKG91dHB1dC5tYXAoKGZpbGVQYXRoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgZGVidWcoYFJlYWQgWyR7Y2hhbGsueWVsbG93QnJpZ2h0KGZpbGVQYXRoKX1dYCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc291cmNlQ29udGVudCA9IHlpZWxkIHJlYWRGaWxlQXN5bmMoZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZE5hbWUgPSBwYXJzZShmaWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVybXMgPSBwYXJzZWROYW1lLm5hbWUuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwbGF0Zm9ybUFyY2hBQkkgPSB0ZXJtcy5wb3AoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBfYmluYXJ5TmFtZSA9IHRlcm1zLmpvaW4oJy4nKTtcbiAgICAgICAgICAgICAgICBpZiAoX2JpbmFyeU5hbWUgIT09IGJpbmFyeU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoYFske2NoYWxrLnllbGxvd0JyaWdodChfYmluYXJ5TmFtZSl9XSBpcyBub3QgbWF0Y2hlZCB3aXRoIFske2NoYWxrLmdyZWVuQnJpZ2h0KGJpbmFyeU5hbWUpfV0sIHNraXBgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkaXIgPSBkaXN0RGlycy5maW5kKChkaXIpID0+IGRpci5pbmNsdWRlcyhwbGF0Zm9ybUFyY2hBQkkpKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRpciAmJiB1bml2ZXJzYWxTb3VyY2VCaW5zLmhhcyhwbGF0Zm9ybUFyY2hBQkkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnKGBbJHtjaGFsay55ZWxsb3dCcmlnaHQocGxhdGZvcm1BcmNoQUJJKX1dIGhhcyBubyBkaXN0IGRpciBidXQgaXQgaXMgc291cmNlIGJpbiBmb3IgdW5pdmVyc2FsIGFyY2gsIHNraXBgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWRpcikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBkaXN0IGRpciBmb3VuZCBmb3IgJHtmaWxlUGF0aH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdEZpbGVQYXRoID0gam9pbihkaXIsIHBhcnNlZE5hbWUuYmFzZSk7XG4gICAgICAgICAgICAgICAgZGVidWcoYFdyaXRlIGZpbGUgY29udGVudCB0byBbJHtjaGFsay55ZWxsb3dCcmlnaHQoZGlzdEZpbGVQYXRoKX1dYCk7XG4gICAgICAgICAgICAgICAgeWllbGQgd3JpdGVGaWxlQXN5bmMoZGlzdEZpbGVQYXRoLCBzb3VyY2VDb250ZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0RmlsZVBhdGhMb2NhbCA9IGpvaW4ocGFja2FnZUpzb25EaXIsIHBhcnNlZE5hbWUuYmFzZSk7XG4gICAgICAgICAgICAgICAgZGVidWcoYFdyaXRlIGZpbGUgY29udGVudCB0byBbJHtjaGFsay55ZWxsb3dCcmlnaHQoZGlzdEZpbGVQYXRoTG9jYWwpfV1gKTtcbiAgICAgICAgICAgICAgICB5aWVsZCB3cml0ZUZpbGVBc3luYyhkaXN0RmlsZVBhdGhMb2NhbCwgc291cmNlQ29udGVudCk7XG4gICAgICAgICAgICB9KSkpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuQXJ0aWZhY3RzQ29tbWFuZC51c2FnZSA9IENvbW1hbmQuVXNhZ2Uoe1xuICAgIGRlc2NyaXB0aW9uOiAnQ29weSBhcnRpZmFjdHMgZnJvbSBHaXRodWIgQWN0aW9ucyBpbnRvIHNwZWNpZmllZCBkaXInLFxufSk7XG5BcnRpZmFjdHNDb21tYW5kLnBhdGhzID0gW1snYXJ0aWZhY3RzJ11dO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJ0aWZhY3RzLmpzLm1hcCIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgb3MgZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5jb25zdCBob21lZGlyID0gb3MuaG9tZWRpcigpO1xuY29uc3QgdG1wZGlyID0gb3MudG1wZGlyKCk7XG5jb25zdCB7ZW52fSA9IHByb2Nlc3M7XG5cbmNvbnN0IG1hY29zID0gbmFtZSA9PiB7XG5cdGNvbnN0IGxpYnJhcnkgPSBwYXRoLmpvaW4oaG9tZWRpciwgJ0xpYnJhcnknKTtcblxuXHRyZXR1cm4ge1xuXHRcdGRhdGE6IHBhdGguam9pbihsaWJyYXJ5LCAnQXBwbGljYXRpb24gU3VwcG9ydCcsIG5hbWUpLFxuXHRcdGNvbmZpZzogcGF0aC5qb2luKGxpYnJhcnksICdQcmVmZXJlbmNlcycsIG5hbWUpLFxuXHRcdGNhY2hlOiBwYXRoLmpvaW4obGlicmFyeSwgJ0NhY2hlcycsIG5hbWUpLFxuXHRcdGxvZzogcGF0aC5qb2luKGxpYnJhcnksICdMb2dzJywgbmFtZSksXG5cdFx0dGVtcDogcGF0aC5qb2luKHRtcGRpciwgbmFtZSksXG5cdH07XG59O1xuXG5jb25zdCB3aW5kb3dzID0gbmFtZSA9PiB7XG5cdGNvbnN0IGFwcERhdGEgPSBlbnYuQVBQREFUQSB8fCBwYXRoLmpvaW4oaG9tZWRpciwgJ0FwcERhdGEnLCAnUm9hbWluZycpO1xuXHRjb25zdCBsb2NhbEFwcERhdGEgPSBlbnYuTE9DQUxBUFBEQVRBIHx8IHBhdGguam9pbihob21lZGlyLCAnQXBwRGF0YScsICdMb2NhbCcpO1xuXG5cdHJldHVybiB7XG5cdFx0Ly8gRGF0YS9jb25maWcvY2FjaGUvbG9nIGFyZSBpbnZlbnRlZCBieSBtZSBhcyBXaW5kb3dzIGlzbid0IG9waW5pb25hdGVkIGFib3V0IHRoaXNcblx0XHRkYXRhOiBwYXRoLmpvaW4obG9jYWxBcHBEYXRhLCBuYW1lLCAnRGF0YScpLFxuXHRcdGNvbmZpZzogcGF0aC5qb2luKGFwcERhdGEsIG5hbWUsICdDb25maWcnKSxcblx0XHRjYWNoZTogcGF0aC5qb2luKGxvY2FsQXBwRGF0YSwgbmFtZSwgJ0NhY2hlJyksXG5cdFx0bG9nOiBwYXRoLmpvaW4obG9jYWxBcHBEYXRhLCBuYW1lLCAnTG9nJyksXG5cdFx0dGVtcDogcGF0aC5qb2luKHRtcGRpciwgbmFtZSksXG5cdH07XG59O1xuXG4vLyBodHRwczovL3NwZWNpZmljYXRpb25zLmZyZWVkZXNrdG9wLm9yZy9iYXNlZGlyLXNwZWMvYmFzZWRpci1zcGVjLWxhdGVzdC5odG1sXG5jb25zdCBsaW51eCA9IG5hbWUgPT4ge1xuXHRjb25zdCB1c2VybmFtZSA9IHBhdGguYmFzZW5hbWUoaG9tZWRpcik7XG5cblx0cmV0dXJuIHtcblx0XHRkYXRhOiBwYXRoLmpvaW4oZW52LlhER19EQVRBX0hPTUUgfHwgcGF0aC5qb2luKGhvbWVkaXIsICcubG9jYWwnLCAnc2hhcmUnKSwgbmFtZSksXG5cdFx0Y29uZmlnOiBwYXRoLmpvaW4oZW52LlhER19DT05GSUdfSE9NRSB8fCBwYXRoLmpvaW4oaG9tZWRpciwgJy5jb25maWcnKSwgbmFtZSksXG5cdFx0Y2FjaGU6IHBhdGguam9pbihlbnYuWERHX0NBQ0hFX0hPTUUgfHwgcGF0aC5qb2luKGhvbWVkaXIsICcuY2FjaGUnKSwgbmFtZSksXG5cdFx0Ly8gaHR0cHM6Ly93aWtpLmRlYmlhbi5vcmcvWERHQmFzZURpcmVjdG9yeVNwZWNpZmljYXRpb24jc3RhdGVcblx0XHRsb2c6IHBhdGguam9pbihlbnYuWERHX1NUQVRFX0hPTUUgfHwgcGF0aC5qb2luKGhvbWVkaXIsICcubG9jYWwnLCAnc3RhdGUnKSwgbmFtZSksXG5cdFx0dGVtcDogcGF0aC5qb2luKHRtcGRpciwgdXNlcm5hbWUsIG5hbWUpLFxuXHR9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZW52UGF0aHMobmFtZSwge3N1ZmZpeCA9ICdub2RlanMnfSA9IHt9KSB7XG5cdGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBhIHN0cmluZywgZ290ICR7dHlwZW9mIG5hbWV9YCk7XG5cdH1cblxuXHRpZiAoc3VmZml4KSB7XG5cdFx0Ly8gQWRkIHN1ZmZpeCB0byBwcmV2ZW50IHBvc3NpYmxlIGNvbmZsaWN0IHdpdGggbmF0aXZlIGFwcHNcblx0XHRuYW1lICs9IGAtJHtzdWZmaXh9YDtcblx0fVxuXG5cdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuXHRcdHJldHVybiBtYWNvcyhuYW1lKTtcblx0fVxuXG5cdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG5cdFx0cmV0dXJuIHdpbmRvd3MobmFtZSk7XG5cdH1cblxuXHRyZXR1cm4gbGludXgobmFtZSk7XG59XG4iLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5leHBvcnQgZGVmYXVsdCBmcmVlR2xvYmFsO1xuIiwiaW1wb3J0IGZyZWVHbG9iYWwgZnJvbSAnLi9fZnJlZUdsb2JhbC5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuZXhwb3J0IGRlZmF1bHQgcm9vdDtcbiIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxuZXhwb3J0IGRlZmF1bHQgU3ltYm9sO1xuIiwiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldFJhd1RhZztcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBvYmplY3RUb1N0cmluZztcbiIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcbmltcG9ydCBnZXRSYXdUYWcgZnJvbSAnLi9fZ2V0UmF3VGFnLmpzJztcbmltcG9ydCBvYmplY3RUb1N0cmluZyBmcm9tICcuL19vYmplY3RUb1N0cmluZy5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlR2V0VGFnO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzT2JqZWN0TGlrZTtcbiIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNTeW1ib2w7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheU1hcDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5leHBvcnQgZGVmYXVsdCBpc0FycmF5O1xuIiwiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VUb1N0cmluZztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdDtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlkZW50aXR5O1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRnVuY3Rpb247XG4iLCJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxuZXhwb3J0IGRlZmF1bHQgY29yZUpzRGF0YTtcbiIsImltcG9ydCBjb3JlSnNEYXRhIGZyb20gJy4vX2NvcmVKc0RhdGEuanMnO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc01hc2tlZDtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Tb3VyY2U7XG4iLCJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzTWFza2VkIGZyb20gJy4vX2lzTWFza2VkLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCB0b1NvdXJjZSBmcm9tICcuL190b1NvdXJjZS5qcyc7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc05hdGl2ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRWYWx1ZTtcbiIsImltcG9ydCBiYXNlSXNOYXRpdmUgZnJvbSAnLi9fYmFzZUlzTmF0aXZlLmpzJztcbmltcG9ydCBnZXRWYWx1ZSBmcm9tICcuL19nZXRWYWx1ZS5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldE5hdGl2ZTtcbiIsImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcbmltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpO1xuXG5leHBvcnQgZGVmYXVsdCBXZWFrTWFwO1xuIiwiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lUHJvcGVydHk7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzSW5kZXg7XG4iLCJpbXBvcnQgZGVmaW5lUHJvcGVydHkgZnJvbSAnLi9fZGVmaW5lUHJvcGVydHkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlQXNzaWduVmFsdWU7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXE7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTGVuZ3RoO1xuIiwiaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc0xlbmd0aCBmcm9tICcuL2lzTGVuZ3RoLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJyYXlMaWtlO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1Byb3RvdHlwZTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VUaW1lcztcbiIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc0FyZ3VtZW50cztcbiIsImltcG9ydCBiYXNlSXNBcmd1bWVudHMgZnJvbSAnLi9fYmFzZUlzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPyBiYXNlSXNBcmd1bWVudHMgOiBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgJiZcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaXNBcmd1bWVudHM7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0dWJGYWxzZTtcbiIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuaW1wb3J0IHN0dWJGYWxzZSBmcm9tICcuL3N0dWJGYWxzZS5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQgaXNCdWZmZXI7XG4iLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc0xlbmd0aCBmcm9tICcuL2lzTGVuZ3RoLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG52YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xudHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc1R5cGVkQXJyYXk7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VVbmFyeTtcbiIsImltcG9ydCBmcmVlR2xvYmFsIGZyb20gJy4vX2ZyZWVHbG9iYWwuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5leHBvcnQgZGVmYXVsdCBub2RlVXRpbDtcbiIsImltcG9ydCBiYXNlSXNUeXBlZEFycmF5IGZyb20gJy4vX2Jhc2VJc1R5cGVkQXJyYXkuanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IG5vZGVVdGlsIGZyb20gJy4vX25vZGVVdGlsLmpzJztcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IGlzVHlwZWRBcnJheTtcbiIsImltcG9ydCBiYXNlVGltZXMgZnJvbSAnLi9fYmFzZVRpbWVzLmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNJbmRleCBmcm9tICcuL19pc0luZGV4LmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgb3ZlckFyZztcbiIsImltcG9ydCBvdmVyQXJnIGZyb20gJy4vX292ZXJBcmcuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCk7XG5cbmV4cG9ydCBkZWZhdWx0IG5hdGl2ZUtleXM7XG4iLCJpbXBvcnQgaXNQcm90b3R5cGUgZnJvbSAnLi9faXNQcm90b3R5cGUuanMnO1xuaW1wb3J0IG5hdGl2ZUtleXMgZnJvbSAnLi9fbmF0aXZlS2V5cy5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUtleXM7XG4iLCJpbXBvcnQgYXJyYXlMaWtlS2V5cyBmcm9tICcuL19hcnJheUxpa2VLZXlzLmpzJztcbmltcG9ydCBiYXNlS2V5cyBmcm9tICcuL19iYXNlS2V5cy5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBrZXlzO1xuIiwiaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0tleTtcbiIsImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlQ3JlYXRlO1xuIiwiaW1wb3J0IG5hdGl2ZUNyZWF0ZSBmcm9tICcuL19uYXRpdmVDcmVhdGUuanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzaENsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzaERlbGV0ZTtcbiIsImltcG9ydCBuYXRpdmVDcmVhdGUgZnJvbSAnLi9fbmF0aXZlQ3JlYXRlLmpzJztcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXNoR2V0O1xuIiwiaW1wb3J0IG5hdGl2ZUNyZWF0ZSBmcm9tICcuL19uYXRpdmVDcmVhdGUuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhc2hIYXM7XG4iLCJpbXBvcnQgbmF0aXZlQ3JlYXRlIGZyb20gJy4vX25hdGl2ZUNyZWF0ZS5qcyc7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXNoU2V0O1xuIiwiaW1wb3J0IGhhc2hDbGVhciBmcm9tICcuL19oYXNoQ2xlYXIuanMnO1xuaW1wb3J0IGhhc2hEZWxldGUgZnJvbSAnLi9faGFzaERlbGV0ZS5qcyc7XG5pbXBvcnQgaGFzaEdldCBmcm9tICcuL19oYXNoR2V0LmpzJztcbmltcG9ydCBoYXNoSGFzIGZyb20gJy4vX2hhc2hIYXMuanMnO1xuaW1wb3J0IGhhc2hTZXQgZnJvbSAnLi9faGFzaFNldC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5leHBvcnQgZGVmYXVsdCBIYXNoO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBsaXN0Q2FjaGVDbGVhcjtcbiIsImltcG9ydCBlcSBmcm9tICcuL2VxLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzb2NJbmRleE9mO1xuIiwiaW1wb3J0IGFzc29jSW5kZXhPZiBmcm9tICcuL19hc3NvY0luZGV4T2YuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RDYWNoZURlbGV0ZTtcbiIsImltcG9ydCBhc3NvY0luZGV4T2YgZnJvbSAnLi9fYXNzb2NJbmRleE9mLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbGlzdENhY2hlR2V0O1xuIiwiaW1wb3J0IGFzc29jSW5kZXhPZiBmcm9tICcuL19hc3NvY0luZGV4T2YuanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbGlzdENhY2hlSGFzO1xuIiwiaW1wb3J0IGFzc29jSW5kZXhPZiBmcm9tICcuL19hc3NvY0luZGV4T2YuanMnO1xuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RDYWNoZVNldDtcbiIsImltcG9ydCBsaXN0Q2FjaGVDbGVhciBmcm9tICcuL19saXN0Q2FjaGVDbGVhci5qcyc7XG5pbXBvcnQgbGlzdENhY2hlRGVsZXRlIGZyb20gJy4vX2xpc3RDYWNoZURlbGV0ZS5qcyc7XG5pbXBvcnQgbGlzdENhY2hlR2V0IGZyb20gJy4vX2xpc3RDYWNoZUdldC5qcyc7XG5pbXBvcnQgbGlzdENhY2hlSGFzIGZyb20gJy4vX2xpc3RDYWNoZUhhcy5qcyc7XG5pbXBvcnQgbGlzdENhY2hlU2V0IGZyb20gJy4vX2xpc3RDYWNoZVNldC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxuZXhwb3J0IGRlZmF1bHQgTGlzdENhY2hlO1xuIiwiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5leHBvcnQgZGVmYXVsdCBNYXA7XG4iLCJpbXBvcnQgSGFzaCBmcm9tICcuL19IYXNoLmpzJztcbmltcG9ydCBMaXN0Q2FjaGUgZnJvbSAnLi9fTGlzdENhY2hlLmpzJztcbmltcG9ydCBNYXAgZnJvbSAnLi9fTWFwLmpzJztcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBDYWNoZUNsZWFyO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHVuaXF1ZSBvYmplY3Qga2V5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5YWJsZSh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJylcbiAgICA/ICh2YWx1ZSAhPT0gJ19fcHJvdG9fXycpXG4gICAgOiAodmFsdWUgPT09IG51bGwpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0tleWFibGU7XG4iLCJpbXBvcnQgaXNLZXlhYmxlIGZyb20gJy4vX2lzS2V5YWJsZS5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0TWFwRGF0YTtcbiIsImltcG9ydCBnZXRNYXBEYXRhIGZyb20gJy4vX2dldE1hcERhdGEuanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwQ2FjaGVEZWxldGU7XG4iLCJpbXBvcnQgZ2V0TWFwRGF0YSBmcm9tICcuL19nZXRNYXBEYXRhLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBDYWNoZUdldDtcbiIsImltcG9ydCBnZXRNYXBEYXRhIGZyb20gJy4vX2dldE1hcERhdGEuanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBDYWNoZUhhcztcbiIsImltcG9ydCBnZXRNYXBEYXRhIGZyb20gJy4vX2dldE1hcERhdGEuanMnO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcENhY2hlU2V0O1xuIiwiaW1wb3J0IG1hcENhY2hlQ2xlYXIgZnJvbSAnLi9fbWFwQ2FjaGVDbGVhci5qcyc7XG5pbXBvcnQgbWFwQ2FjaGVEZWxldGUgZnJvbSAnLi9fbWFwQ2FjaGVEZWxldGUuanMnO1xuaW1wb3J0IG1hcENhY2hlR2V0IGZyb20gJy4vX21hcENhY2hlR2V0LmpzJztcbmltcG9ydCBtYXBDYWNoZUhhcyBmcm9tICcuL19tYXBDYWNoZUhhcy5qcyc7XG5pbXBvcnQgbWFwQ2FjaGVTZXQgZnJvbSAnLi9fbWFwQ2FjaGVTZXQuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTWFwQ2FjaGVgLlxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBtYXBDYWNoZURlbGV0ZTtcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBtYXBDYWNoZUdldDtcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBtYXBDYWNoZVNldDtcblxuZXhwb3J0IGRlZmF1bHQgTWFwQ2FjaGU7XG4iLCJpbXBvcnQgTWFwQ2FjaGUgZnJvbSAnLi9fTWFwQ2FjaGUuanMnO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXG4gKiBwcm92aWRlZCwgaXQgZGV0ZXJtaW5lcyB0aGUgY2FjaGUga2V5IGZvciBzdG9yaW5nIHRoZSByZXN1bHQgYmFzZWQgb24gdGhlXG4gKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXG4gKiBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBtZW1vaXplZCBmdW5jdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXG4gKiBmdW5jdGlvbi4gSXRzIGNyZWF0aW9uIG1heSBiZSBjdXN0b21pemVkIGJ5IHJlcGxhY2luZyB0aGUgYF8ubWVtb2l6ZS5DYWNoZWBcbiAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICogbWV0aG9kIGludGVyZmFjZSBvZiBgY2xlYXJgLCBgZGVsZXRlYCwgYGdldGAsIGBoYXNgLCBhbmQgYHNldGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2MnOiAzLCAnZCc6IDQgfTtcbiAqXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogdmFsdWVzKG90aGVyKTtcbiAqIC8vID0+IFszLCA0XVxuICpcbiAqIG9iamVjdC5hID0gMjtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsnYScsICdiJ11cbiAqXG4gKiAvLyBSZXBsYWNlIGBfLm1lbW9pemUuQ2FjaGVgLlxuICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZShmdW5jLCByZXNvbHZlcikge1xuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgIT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGtleSA9IHJlc29sdmVyID8gcmVzb2x2ZXIuYXBwbHkodGhpcywgYXJncykgOiBhcmdzWzBdLFxuICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KSB8fCBjYWNoZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBtZW1vaXplZC5jYWNoZSA9IG5ldyAobWVtb2l6ZS5DYWNoZSB8fCBNYXBDYWNoZSk7XG4gIHJldHVybiBtZW1vaXplZDtcbn1cblxuLy8gRXhwb3NlIGBNYXBDYWNoZWAuXG5tZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemU7XG4iLCJpbXBvcnQgbWVtb2l6ZSBmcm9tICcuL21lbW9pemUuanMnO1xuXG4vKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gIHZhciByZXN1bHQgPSBtZW1vaXplKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICBjYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9KTtcblxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemVDYXBwZWQ7XG4iLCJpbXBvcnQgbWVtb2l6ZUNhcHBlZCBmcm9tICcuL19tZW1vaXplQ2FwcGVkLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdUb1BhdGg7XG4iLCJpbXBvcnQgYmFzZVRvU3RyaW5nIGZyb20gJy4vX2Jhc2VUb1N0cmluZy5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b1N0cmluZyhudWxsKTtcbiAqIC8vID0+ICcnXG4gKlxuICogXy50b1N0cmluZygtMCk7XG4gKiAvLyA9PiAnLTAnXG4gKlxuICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xuICogLy8gPT4gJzEsMiwzJ1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogYmFzZVRvU3RyaW5nKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9TdHJpbmc7XG4iLCJpbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzS2V5IGZyb20gJy4vX2lzS2V5LmpzJztcbmltcG9ydCBzdHJpbmdUb1BhdGggZnJvbSAnLi9fc3RyaW5nVG9QYXRoLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2FzdFBhdGg7XG4iLCJpbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cbiAqL1xuZnVuY3Rpb24gdG9LZXkodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b0tleTtcbiIsImltcG9ydCBjYXN0UGF0aCBmcm9tICcuL19jYXN0UGF0aC5qcyc7XG5pbXBvcnQgdG9LZXkgZnJvbSAnLi9fdG9LZXkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gMCxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlR2V0O1xuIiwiaW1wb3J0IGJhc2VHZXQgZnJvbSAnLi9fYmFzZUdldC5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKi9cbmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0O1xuIiwiLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheVB1c2g7XG4iLCJpbXBvcnQgTGlzdENhY2hlIGZyb20gJy4vX0xpc3RDYWNoZS5qcyc7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0YWNrQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0YWNrRGVsZXRlO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBzdGFjayB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmdldChrZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdGFja0dldDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0YWNrSGFzO1xuIiwiaW1wb3J0IExpc3RDYWNoZSBmcm9tICcuL19MaXN0Q2FjaGUuanMnO1xuaW1wb3J0IE1hcCBmcm9tICcuL19NYXAuanMnO1xuaW1wb3J0IE1hcENhY2hlIGZyb20gJy4vX01hcENhY2hlLmpzJztcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7XG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gIH1cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0YWNrU2V0O1xuIiwiaW1wb3J0IExpc3RDYWNoZSBmcm9tICcuL19MaXN0Q2FjaGUuanMnO1xuaW1wb3J0IHN0YWNrQ2xlYXIgZnJvbSAnLi9fc3RhY2tDbGVhci5qcyc7XG5pbXBvcnQgc3RhY2tEZWxldGUgZnJvbSAnLi9fc3RhY2tEZWxldGUuanMnO1xuaW1wb3J0IHN0YWNrR2V0IGZyb20gJy4vX3N0YWNrR2V0LmpzJztcbmltcG9ydCBzdGFja0hhcyBmcm9tICcuL19zdGFja0hhcy5qcyc7XG5pbXBvcnQgc3RhY2tTZXQgZnJvbSAnLi9fc3RhY2tTZXQuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoZW50cmllcyk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7XG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG5TdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7XG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbmV4cG9ydCBkZWZhdWx0IFN0YWNrO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheUZpbHRlcjtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBlbXB0eSBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXlzID0gXy50aW1lcygyLCBfLnN0dWJBcnJheSk7XG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzKTtcbiAqIC8vID0+IFtbXSwgW11dXG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0dWJBcnJheTtcbiIsImltcG9ydCBhcnJheUZpbHRlciBmcm9tICcuL19hcnJheUZpbHRlci5qcyc7XG5pbXBvcnQgc3R1YkFycmF5IGZyb20gJy4vc3R1YkFycmF5LmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHJldHVybiBhcnJheUZpbHRlcihuYXRpdmVHZXRTeW1ib2xzKG9iamVjdCksIGZ1bmN0aW9uKHN5bWJvbCkge1xuICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBnZXRTeW1ib2xzO1xuIiwiaW1wb3J0IGFycmF5UHVzaCBmcm9tICcuL19hcnJheVB1c2guanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0QWxsS2V5c2AgYW5kIGBnZXRBbGxLZXlzSW5gIHdoaWNoIHVzZXNcbiAqIGBrZXlzRnVuY2AgYW5kIGBzeW1ib2xzRnVuY2AgdG8gZ2V0IHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN5bWJvbHNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNGdW5jLCBzeW1ib2xzRnVuYykge1xuICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcbiAgcmV0dXJuIGlzQXJyYXkob2JqZWN0KSA/IHJlc3VsdCA6IGFycmF5UHVzaChyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlR2V0QWxsS2V5cztcbiIsImltcG9ydCBiYXNlR2V0QWxsS2V5cyBmcm9tICcuL19iYXNlR2V0QWxsS2V5cy5qcyc7XG5pbXBvcnQgZ2V0U3ltYm9scyBmcm9tICcuL19nZXRTeW1ib2xzLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldEFsbEtleXM7XG4iLCJpbXBvcnQgZ2V0TmF0aXZlIGZyb20gJy4vX2dldE5hdGl2ZS5qcyc7XG5pbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpO1xuXG5leHBvcnQgZGVmYXVsdCBEYXRhVmlldztcbiIsImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcbmltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgUHJvbWlzZSA9IGdldE5hdGl2ZShyb290LCAnUHJvbWlzZScpO1xuXG5leHBvcnQgZGVmYXVsdCBQcm9taXNlO1xuIiwiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBTZXQgPSBnZXROYXRpdmUocm9vdCwgJ1NldCcpO1xuXG5leHBvcnQgZGVmYXVsdCBTZXQ7XG4iLCJpbXBvcnQgRGF0YVZpZXcgZnJvbSAnLi9fRGF0YVZpZXcuanMnO1xuaW1wb3J0IE1hcCBmcm9tICcuL19NYXAuanMnO1xuaW1wb3J0IFByb21pc2UgZnJvbSAnLi9fUHJvbWlzZS5qcyc7XG5pbXBvcnQgU2V0IGZyb20gJy4vX1NldC5qcyc7XG5pbXBvcnQgV2Vha01hcCBmcm9tICcuL19XZWFrTWFwLmpzJztcbmltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IHRvU291cmNlIGZyb20gJy4vX3RvU291cmNlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cbnZhciBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldyksXG4gICAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSB0b1NvdXJjZShQcm9taXNlKSxcbiAgICBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0KSxcbiAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xuXG4vKipcbiAqIEdldHMgdGhlIGB0b1N0cmluZ1RhZ2Agb2YgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG52YXIgZ2V0VGFnID0gYmFzZUdldFRhZztcblxuLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxuaWYgKChEYXRhVmlldyAmJiBnZXRUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSkpICE9IGRhdGFWaWV3VGFnKSB8fFxuICAgIChNYXAgJiYgZ2V0VGFnKG5ldyBNYXApICE9IG1hcFRhZykgfHxcbiAgICAoUHJvbWlzZSAmJiBnZXRUYWcoUHJvbWlzZS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XG4gICAgKFNldCAmJiBnZXRUYWcobmV3IFNldCkgIT0gc2V0VGFnKSB8fFxuICAgIChXZWFrTWFwICYmIGdldFRhZyhuZXcgV2Vha01hcCkgIT0gd2Vha01hcFRhZykpIHtcbiAgZ2V0VGFnID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUdldFRhZyh2YWx1ZSksXG4gICAgICAgIEN0b3IgPSByZXN1bHQgPT0gb2JqZWN0VGFnID8gdmFsdWUuY29uc3RydWN0b3IgOiB1bmRlZmluZWQsXG4gICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gdG9Tb3VyY2UoQ3RvcikgOiAnJztcblxuICAgIGlmIChjdG9yU3RyaW5nKSB7XG4gICAgICBzd2l0Y2ggKGN0b3JTdHJpbmcpIHtcbiAgICAgICAgY2FzZSBkYXRhVmlld0N0b3JTdHJpbmc6IHJldHVybiBkYXRhVmlld1RhZztcbiAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xuICAgICAgICBjYXNlIHByb21pc2VDdG9yU3RyaW5nOiByZXR1cm4gcHJvbWlzZVRhZztcbiAgICAgICAgY2FzZSBzZXRDdG9yU3RyaW5nOiByZXR1cm4gc2V0VGFnO1xuICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0VGFnO1xuIiwiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IFVpbnQ4QXJyYXk7XG4iLCIvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgYWRkXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBhbGlhcyBwdXNoXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICB0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSwgSEFTSF9VTkRFRklORUQpO1xuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2V0Q2FjaGVBZGQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldENhY2hlSGFzO1xuIiwiaW1wb3J0IE1hcENhY2hlIGZyb20gJy4vX01hcENhY2hlLmpzJztcbmltcG9ydCBzZXRDYWNoZUFkZCBmcm9tICcuL19zZXRDYWNoZUFkZC5qcyc7XG5pbXBvcnQgc2V0Q2FjaGVIYXMgZnJvbSAnLi9fc2V0Q2FjaGVIYXMuanMnO1xuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XG5cbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU2V0Q2FjaGVgLlxuU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gc2V0Q2FjaGVBZGQ7XG5TZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbmV4cG9ydCBkZWZhdWx0IFNldENhY2hlO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc29tZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlTb21lO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNhY2hlSGFzO1xuIiwiaW1wb3J0IFNldENhY2hlIGZyb20gJy4vX1NldENhY2hlLmpzJztcbmltcG9ydCBhcnJheVNvbWUgZnJvbSAnLi9fYXJyYXlTb21lLmpzJztcbmltcG9ydCBjYWNoZUhhcyBmcm9tICcuL19jYWNoZUhhcy5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtBcnJheX0gb3RoZXIgVGhlIG90aGVyIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoO1xuXG4gIGlmIChhcnJMZW5ndGggIT0gb3RoTGVuZ3RoICYmICEoaXNQYXJ0aWFsICYmIG90aExlbmd0aCA+IGFyckxlbmd0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIGFyclN0YWNrZWQgPSBzdGFjay5nZXQoYXJyYXkpO1xuICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gIGlmIChhcnJTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICByZXR1cm4gYXJyU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IGFycmF5O1xuICB9XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gdHJ1ZSxcbiAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IFNldENhY2hlIDogdW5kZWZpbmVkO1xuXG4gIHN0YWNrLnNldChhcnJheSwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIGFycmF5KTtcblxuICAvLyBJZ25vcmUgbm9uLWluZGV4IHByb3BlcnRpZXMuXG4gIHdoaWxlICgrK2luZGV4IDwgYXJyTGVuZ3RoKSB7XG4gICAgdmFyIGFyclZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2luZGV4XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBhcnJWYWx1ZSwgaW5kZXgsIG90aGVyLCBhcnJheSwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4LCBhcnJheSwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgaWYgKGNvbXBhcmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjb21wYXJlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKHNlZW4pIHtcbiAgICAgIGlmICghYXJyYXlTb21lKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcbiAgICAgICAgICAgIGlmICghY2FjaGVIYXMoc2Vlbiwgb3RoSW5kZXgpICYmXG4gICAgICAgICAgICAgICAgKGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBzZWVuLnB1c2gob3RoSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKSB7XG4gICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCEoXG4gICAgICAgICAgYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8XG4gICAgICAgICAgICBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKGFycmF5KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXF1YWxBcnJheXM7XG4iLCIvKipcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gKi9cbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobWFwLnNpemUpO1xuXG4gIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBba2V5LCB2YWx1ZV07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBUb0FycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2V0VG9BcnJheTtcbiIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcbmltcG9ydCBVaW50OEFycmF5IGZyb20gJy4vX1VpbnQ4QXJyYXkuanMnO1xuaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuaW1wb3J0IGVxdWFsQXJyYXlzIGZyb20gJy4vX2VxdWFsQXJyYXlzLmpzJztcbmltcG9ydCBtYXBUb0FycmF5IGZyb20gJy4vX21hcFRvQXJyYXkuanMnO1xuaW1wb3J0IHNldFRvQXJyYXkgZnJvbSAnLi9fc2V0VG9BcnJheS5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGNvbXBhcmluZyBvYmplY3RzIG9mXG4gKiB0aGUgc2FtZSBgdG9TdHJpbmdUYWdgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY29tcGFyaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIG9yIGBTdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3RzIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCB0YWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgIChvYmplY3QuYnl0ZU9mZnNldCAhPSBvdGhlci5ieXRlT2Zmc2V0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBvYmplY3QgPSBvYmplY3QuYnVmZmVyO1xuICAgICAgb3RoZXIgPSBvdGhlci5idWZmZXI7XG5cbiAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgICFlcXVhbEZ1bmMobmV3IFVpbnQ4QXJyYXkob2JqZWN0KSwgbmV3IFVpbnQ4QXJyYXkob3RoZXIpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGNhc2UgYm9vbFRhZzpcbiAgICBjYXNlIGRhdGVUYWc6XG4gICAgY2FzZSBudW1iZXJUYWc6XG4gICAgICAvLyBDb2VyY2UgYm9vbGVhbnMgdG8gYDFgIG9yIGAwYCBhbmQgZGF0ZXMgdG8gbWlsbGlzZWNvbmRzLlxuICAgICAgLy8gSW52YWxpZCBkYXRlcyBhcmUgY29lcmNlZCB0byBgTmFOYC5cbiAgICAgIHJldHVybiBlcSgrb2JqZWN0LCArb3RoZXIpO1xuXG4gICAgY2FzZSBlcnJvclRhZzpcbiAgICAgIHJldHVybiBvYmplY3QubmFtZSA9PSBvdGhlci5uYW1lICYmIG9iamVjdC5tZXNzYWdlID09IG90aGVyLm1lc3NhZ2U7XG5cbiAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgIC8vIENvZXJjZSByZWdleGVzIHRvIHN0cmluZ3MgYW5kIHRyZWF0IHN0cmluZ3MsIHByaW1pdGl2ZXMgYW5kIG9iamVjdHMsXG4gICAgICAvLyBhcyBlcXVhbC4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXG4gICAgICAvLyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuIG9iamVjdCA9PSAob3RoZXIgKyAnJyk7XG5cbiAgICBjYXNlIG1hcFRhZzpcbiAgICAgIHZhciBjb252ZXJ0ID0gbWFwVG9BcnJheTtcblxuICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRztcbiAgICAgIGNvbnZlcnQgfHwgKGNvbnZlcnQgPSBzZXRUb0FycmF5KTtcblxuICAgICAgaWYgKG9iamVjdC5zaXplICE9IG90aGVyLnNpemUgJiYgIWlzUGFydGlhbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gICAgICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICAgICAgaWYgKHN0YWNrZWQpIHtcbiAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gICAgICB9XG4gICAgICBiaXRtYXNrIHw9IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUc7XG5cbiAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICAgICAgdmFyIHJlc3VsdCA9IGVxdWFsQXJyYXlzKGNvbnZlcnQob2JqZWN0KSwgY29udmVydChvdGhlciksIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICAgICAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuXG4gICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICBpZiAoc3ltYm9sVmFsdWVPZikge1xuICAgICAgICByZXR1cm4gc3ltYm9sVmFsdWVPZi5jYWxsKG9iamVjdCkgPT0gc3ltYm9sVmFsdWVPZi5jYWxsKG90aGVyKTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVxdWFsQnlUYWc7XG4iLCJpbXBvcnQgZ2V0QWxsS2V5cyBmcm9tICcuL19nZXRBbGxLZXlzLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3Igb2JqZWN0cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgb2JqUHJvcHMgPSBnZXRBbGxLZXlzKG9iamVjdCksXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXG4gICAgICBvdGhQcm9wcyA9IGdldEFsbEtleXMob3RoZXIpLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xuXG4gIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc1BhcnRpYWwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIHZhciBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgaWYgKCEoaXNQYXJ0aWFsID8ga2V5IGluIG90aGVyIDogaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwga2V5KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIG9ialN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICBpZiAob2JqU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgcmV0dXJuIG9ialN0YWNrZWQgPT0gb3RoZXIgJiYgb3RoU3RhY2tlZCA9PSBvYmplY3Q7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHRydWU7XG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBvYmplY3QpO1xuXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcbiAgd2hpbGUgKCsraW5kZXggPCBvYmpMZW5ndGgpIHtcbiAgICBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJba2V5XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBvYmpWYWx1ZSwga2V5LCBvdGhlciwgb2JqZWN0LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IChvYmpWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKG9ialZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKVxuICAgICAgICAgIDogY29tcGFyZWRcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2tpcEN0b3IgfHwgKHNraXBDdG9yID0ga2V5ID09ICdjb25zdHJ1Y3RvcicpO1xuICB9XG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XG4gICAgdmFyIG9iakN0b3IgPSBvYmplY3QuY29uc3RydWN0b3IsXG4gICAgICAgIG90aEN0b3IgPSBvdGhlci5jb25zdHJ1Y3RvcjtcblxuICAgIC8vIE5vbiBgT2JqZWN0YCBvYmplY3QgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWFsLlxuICAgIGlmIChvYmpDdG9yICE9IG90aEN0b3IgJiZcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXG4gICAgICAgICEodHlwZW9mIG9iakN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvYmpDdG9yIGluc3RhbmNlb2Ygb2JqQ3RvciAmJlxuICAgICAgICAgIHR5cGVvZiBvdGhDdG9yID09ICdmdW5jdGlvbicgJiYgb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVxdWFsT2JqZWN0cztcbiIsImltcG9ydCBTdGFjayBmcm9tICcuL19TdGFjay5qcyc7XG5pbXBvcnQgZXF1YWxBcnJheXMgZnJvbSAnLi9fZXF1YWxBcnJheXMuanMnO1xuaW1wb3J0IGVxdWFsQnlUYWcgZnJvbSAnLi9fZXF1YWxCeVRhZy5qcyc7XG5pbXBvcnQgZXF1YWxPYmplY3RzIGZyb20gJy4vX2VxdWFsT2JqZWN0cy5qcyc7XG5pbXBvcnQgZ2V0VGFnIGZyb20gJy4vX2dldFRhZy5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzQnVmZmVyIGZyb20gJy4vaXNCdWZmZXIuanMnO1xuaW1wb3J0IGlzVHlwZWRBcnJheSBmcm9tICcuL2lzVHlwZWRBcnJheS5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbGAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICogZGVlcCBjb21wYXJpc29ucyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBjb21wYXJlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWxEZWVwKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIG9iaklzQXJyID0gaXNBcnJheShvYmplY3QpLFxuICAgICAgb3RoSXNBcnIgPSBpc0FycmF5KG90aGVyKSxcbiAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob2JqZWN0KSxcbiAgICAgIG90aFRhZyA9IG90aElzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob3RoZXIpO1xuXG4gIG9ialRhZyA9IG9ialRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb2JqVGFnO1xuICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcblxuICB2YXIgb2JqSXNPYmogPSBvYmpUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgaXNTYW1lVGFnID0gb2JqVGFnID09IG90aFRhZztcblxuICBpZiAoaXNTYW1lVGFnICYmIGlzQnVmZmVyKG9iamVjdCkpIHtcbiAgICBpZiAoIWlzQnVmZmVyKG90aGVyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBvYmpJc0FyciA9IHRydWU7XG4gICAgb2JqSXNPYmogPSBmYWxzZTtcbiAgfVxuICBpZiAoaXNTYW1lVGFnICYmICFvYmpJc09iaikge1xuICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgcmV0dXJuIChvYmpJc0FyciB8fCBpc1R5cGVkQXJyYXkob2JqZWN0KSlcbiAgICAgID8gZXF1YWxBcnJheXMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaylcbiAgICAgIDogZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICB9XG4gIGlmICghKGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRykpIHtcbiAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxuICAgICAgICBvdGhJc1dyYXBwZWQgPSBvdGhJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCAnX193cmFwcGVkX18nKTtcblxuICAgIGlmIChvYmpJc1dyYXBwZWQgfHwgb3RoSXNXcmFwcGVkKSB7XG4gICAgICB2YXIgb2JqVW53cmFwcGVkID0gb2JqSXNXcmFwcGVkID8gb2JqZWN0LnZhbHVlKCkgOiBvYmplY3QsXG4gICAgICAgICAgb3RoVW53cmFwcGVkID0gb3RoSXNXcmFwcGVkID8gb3RoZXIudmFsdWUoKSA6IG90aGVyO1xuXG4gICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgICAgcmV0dXJuIGVxdWFsRnVuYyhvYmpVbndyYXBwZWQsIG90aFVud3JhcHBlZCwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzU2FtZVRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICByZXR1cm4gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNFcXVhbERlZXA7XG4iLCJpbXBvcnQgYmFzZUlzRXF1YWxEZWVwIGZyb20gJy4vX2Jhc2VJc0VxdWFsRGVlcC5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc0VxdWFsO1xuIiwiaW1wb3J0IFN0YWNrIGZyb20gJy4vX1N0YWNrLmpzJztcbmltcG9ydCBiYXNlSXNFcXVhbCBmcm9tICcuL19iYXNlSXNFcXVhbC5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hdGNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7QXJyYXl9IG1hdGNoRGF0YSBUaGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3MgdG8gbWF0Y2guXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNoLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGluZGV4ID0gbWF0Y2hEYXRhLmxlbmd0aCxcbiAgICAgIGxlbmd0aCA9IGluZGV4LFxuICAgICAgbm9DdXN0b21pemVyID0gIWN1c3RvbWl6ZXI7XG5cbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuICFsZW5ndGg7XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pXG4gICAgICAgICAgPyBkYXRhWzFdICE9PSBvYmplY3RbZGF0YVswXV1cbiAgICAgICAgICA6ICEoZGF0YVswXSBpbiBvYmplY3QpXG4gICAgICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgIHZhciBrZXkgPSBkYXRhWzBdLFxuICAgICAgICBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBzcmNWYWx1ZSA9IGRhdGFbMV07XG5cbiAgICBpZiAobm9DdXN0b21pemVyICYmIGRhdGFbMl0pIHtcbiAgICAgIGlmIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RhY2sgPSBuZXcgU3RhY2s7XG4gICAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgICB2YXIgcmVzdWx0ID0gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKTtcbiAgICAgIH1cbiAgICAgIGlmICghKHJlc3VsdCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgICAgIDogcmVzdWx0XG4gICAgICAgICAgKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNNYXRjaDtcbiIsImltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcbiAqICBlcXVhbGl0eSBjb21wYXJpc29ucywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSAmJiAhaXNPYmplY3QodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1N0cmljdENvbXBhcmFibGU7XG4iLCJpbXBvcnQgaXNTdHJpY3RDb21wYXJhYmxlIGZyb20gJy4vX2lzU3RyaWN0Q29tcGFyYWJsZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGdldE1hdGNoRGF0YShvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXMob2JqZWN0KSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgdmFyIGtleSA9IHJlc3VsdFtsZW5ndGhdLFxuICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgcmVzdWx0W2xlbmd0aF0gPSBba2V5LCB2YWx1ZSwgaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0TWF0Y2hEYXRhO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYG1hdGNoZXNQcm9wZXJ0eWAgZm9yIHNvdXJjZSB2YWx1ZXMgc3VpdGFibGVcbiAqIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShrZXksIHNyY1ZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFtrZXldID09PSBzcmNWYWx1ZSAmJlxuICAgICAgKHNyY1ZhbHVlICE9PSB1bmRlZmluZWQgfHwgKGtleSBpbiBPYmplY3Qob2JqZWN0KSkpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZTtcbiIsImltcG9ydCBiYXNlSXNNYXRjaCBmcm9tICcuL19iYXNlSXNNYXRjaC5qcyc7XG5pbXBvcnQgZ2V0TWF0Y2hEYXRhIGZyb20gJy4vX2dldE1hdGNoRGF0YS5qcyc7XG5pbXBvcnQgbWF0Y2hlc1N0cmljdENvbXBhcmFibGUgZnJvbSAnLi9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNvdXJjZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2UpIHtcbiAgdmFyIG1hdGNoRGF0YSA9IGdldE1hdGNoRGF0YShzb3VyY2UpO1xuICBpZiAobWF0Y2hEYXRhLmxlbmd0aCA9PSAxICYmIG1hdGNoRGF0YVswXVsyXSkge1xuICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShtYXRjaERhdGFbMF1bMF0sIG1hdGNoRGF0YVswXVsxXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgPT09IHNvdXJjZSB8fCBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZU1hdGNoZXM7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc0luYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSGFzSW4ob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUhhc0luO1xuIiwiaW1wb3J0IGNhc3RQYXRoIGZyb20gJy4vX2Nhc3RQYXRoLmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNJbmRleCBmcm9tICcuL19pc0luZGV4LmpzJztcbmltcG9ydCBpc0xlbmd0aCBmcm9tICcuL2lzTGVuZ3RoLmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBleGlzdHMgb24gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFzRnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2sgcHJvcGVydGllcy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBoYXNGdW5jKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBmYWxzZTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSk7XG4gICAgaWYgKCEocmVzdWx0ID0gb2JqZWN0ICE9IG51bGwgJiYgaGFzRnVuYyhvYmplY3QsIGtleSkpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgb2JqZWN0ID0gb2JqZWN0W2tleV07XG4gIH1cbiAgaWYgKHJlc3VsdCB8fCArK2luZGV4ICE9IGxlbmd0aCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgbGVuZ3RoID0gb2JqZWN0ID09IG51bGwgPyAwIDogb2JqZWN0Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGlzTGVuZ3RoKGxlbmd0aCkgJiYgaXNJbmRleChrZXksIGxlbmd0aCkgJiZcbiAgICAoaXNBcnJheShvYmplY3QpIHx8IGlzQXJndW1lbnRzKG9iamVjdCkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXNQYXRoO1xuIiwiaW1wb3J0IGJhc2VIYXNJbiBmcm9tICcuL19iYXNlSGFzSW4uanMnO1xuaW1wb3J0IGhhc1BhdGggZnJvbSAnLi9faGFzUGF0aC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0gXy5jcmVhdGUoeyAnYSc6IF8uY3JlYXRlKHsgJ2InOiAyIH0pIH0pO1xuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYS5iJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXNJbihvYmplY3QsIFsnYScsICdiJ10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYicpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaGFzSW4ob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgYmFzZUhhc0luKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzSW47XG4iLCJpbXBvcnQgYmFzZUlzRXF1YWwgZnJvbSAnLi9fYmFzZUlzRXF1YWwuanMnO1xuaW1wb3J0IGdldCBmcm9tICcuL2dldC5qcyc7XG5pbXBvcnQgaGFzSW4gZnJvbSAnLi9oYXNJbi5qcyc7XG5pbXBvcnQgaXNLZXkgZnJvbSAnLi9faXNLZXkuanMnO1xuaW1wb3J0IGlzU3RyaWN0Q29tcGFyYWJsZSBmcm9tICcuL19pc1N0cmljdENvbXBhcmFibGUuanMnO1xuaW1wb3J0IG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlIGZyb20gJy4vX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlLmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzUHJvcGVydHlgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNyY1ZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBzcmNWYWx1ZSkge1xuICBpZiAoaXNLZXkocGF0aCkgJiYgaXNTdHJpY3RDb21wYXJhYmxlKHNyY1ZhbHVlKSkge1xuICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSh0b0tleShwYXRoKSwgc3JjVmFsdWUpO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIgb2JqVmFsdWUgPSBnZXQob2JqZWN0LCBwYXRoKTtcbiAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxuICAgICAgPyBoYXNJbihvYmplY3QsIHBhdGgpXG4gICAgICA6IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZU1hdGNoZXNQcm9wZXJ0eTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHJvcGVydHlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5KGtleSkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VQcm9wZXJ0eTtcbiIsImltcG9ydCBiYXNlR2V0IGZyb20gJy4vX2Jhc2VHZXQuanMnO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVByb3BlcnR5YCB3aGljaCBzdXBwb3J0cyBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eURlZXAocGF0aCkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVByb3BlcnR5RGVlcDtcbiIsImltcG9ydCBiYXNlUHJvcGVydHkgZnJvbSAnLi9fYmFzZVByb3BlcnR5LmpzJztcbmltcG9ydCBiYXNlUHJvcGVydHlEZWVwIGZyb20gJy4vX2Jhc2VQcm9wZXJ0eURlZXAuanMnO1xuaW1wb3J0IGlzS2V5IGZyb20gJy4vX2lzS2V5LmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGEgZ2l2ZW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW1xuICogICB7ICdhJzogeyAnYic6IDIgfSB9LFxuICogICB7ICdhJzogeyAnYic6IDEgfSB9XG4gKiBdO1xuICpcbiAqIF8ubWFwKG9iamVjdHMsIF8ucHJvcGVydHkoJ2EuYicpKTtcbiAqIC8vID0+IFsyLCAxXVxuICpcbiAqIF8ubWFwKF8uc29ydEJ5KG9iamVjdHMsIF8ucHJvcGVydHkoWydhJywgJ2InXSkpLCAnYS5iJyk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqL1xuZnVuY3Rpb24gcHJvcGVydHkocGF0aCkge1xuICByZXR1cm4gaXNLZXkocGF0aCkgPyBiYXNlUHJvcGVydHkodG9LZXkocGF0aCkpIDogYmFzZVByb3BlcnR5RGVlcChwYXRoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcHJvcGVydHk7XG4iLCJpbXBvcnQgYmFzZU1hdGNoZXMgZnJvbSAnLi9fYmFzZU1hdGNoZXMuanMnO1xuaW1wb3J0IGJhc2VNYXRjaGVzUHJvcGVydHkgZnJvbSAnLi9fYmFzZU1hdGNoZXNQcm9wZXJ0eS5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IHByb3BlcnR5IGZyb20gJy4vcHJvcGVydHkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLml0ZXJhdGVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSBbdmFsdWU9Xy5pZGVudGl0eV0gVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYW4gaXRlcmF0ZWUuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGl0ZXJhdGVlLlxuICovXG5mdW5jdGlvbiBiYXNlSXRlcmF0ZWUodmFsdWUpIHtcbiAgLy8gRG9uJ3Qgc3RvcmUgdGhlIGB0eXBlb2ZgIHJlc3VsdCBpbiBhIHZhcmlhYmxlIHRvIGF2b2lkIGEgSklUIGJ1ZyBpbiBTYWZhcmkgOS5cbiAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTYwMzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGlkZW50aXR5O1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gaXNBcnJheSh2YWx1ZSlcbiAgICAgID8gYmFzZU1hdGNoZXNQcm9wZXJ0eSh2YWx1ZVswXSwgdmFsdWVbMV0pXG4gICAgICA6IGJhc2VNYXRjaGVzKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gcHJvcGVydHkodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXRlcmF0ZWU7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUFnZ3JlZ2F0b3JgIGZvciBhcnJheXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGBhY2N1bXVsYXRvcmAgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICogQHBhcmFtIHtPYmplY3R9IGFjY3VtdWxhdG9yIFRoZSBpbml0aWFsIGFnZ3JlZ2F0ZWQgb2JqZWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBhY2N1bXVsYXRvcmAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5QWdncmVnYXRvcihhcnJheSwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBzZXR0ZXIoYWNjdW11bGF0b3IsIHZhbHVlLCBpdGVyYXRlZSh2YWx1ZSksIGFycmF5KTtcbiAgfVxuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5QWdncmVnYXRvcjtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIGtleXNGdW5jKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXG4gICAgICAgIHByb3BzID0ga2V5c0Z1bmMob2JqZWN0KSxcbiAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcHNbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF07XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVCYXNlRm9yO1xuIiwiaW1wb3J0IGNyZWF0ZUJhc2VGb3IgZnJvbSAnLi9fY3JlYXRlQmFzZUZvci5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9iamVjdGBcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG52YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxuZXhwb3J0IGRlZmF1bHQgYmFzZUZvcjtcbiIsImltcG9ydCBiYXNlRm9yIGZyb20gJy4vX2Jhc2VGb3IuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlRm9yT3duKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBiYXNlRm9yKG9iamVjdCwgaXRlcmF0ZWUsIGtleXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRm9yT3duO1xuIiwiaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgYmFzZUVhY2hgIG9yIGBiYXNlRWFjaFJpZ2h0YCBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBhIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VFYWNoKGVhY2hGdW5jLCBmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgfVxuICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgIHJldHVybiBlYWNoRnVuYyhjb2xsZWN0aW9uLCBpdGVyYXRlZSk7XG4gICAgfVxuICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMSxcbiAgICAgICAgaXRlcmFibGUgPSBPYmplY3QoY29sbGVjdGlvbik7XG5cbiAgICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2luZGV4XSwgaW5kZXgsIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVCYXNlRWFjaDtcbiIsImltcG9ydCBiYXNlRm9yT3duIGZyb20gJy4vX2Jhc2VGb3JPd24uanMnO1xuaW1wb3J0IGNyZWF0ZUJhc2VFYWNoIGZyb20gJy4vX2NyZWF0ZUJhc2VFYWNoLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JFYWNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAqL1xudmFyIGJhc2VFYWNoID0gY3JlYXRlQmFzZUVhY2goYmFzZUZvck93bik7XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VFYWNoO1xuIiwiaW1wb3J0IGJhc2VFYWNoIGZyb20gJy4vX2Jhc2VFYWNoLmpzJztcblxuLyoqXG4gKiBBZ2dyZWdhdGVzIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCBvbiBgYWNjdW11bGF0b3JgIHdpdGgga2V5cyB0cmFuc2Zvcm1lZFxuICogYnkgYGl0ZXJhdGVlYCBhbmQgdmFsdWVzIHNldCBieSBgc2V0dGVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYGFjY3VtdWxhdG9yYCB2YWx1ZXMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gKiBAcGFyYW0ge09iamVjdH0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgYWdncmVnYXRlZCBvYmplY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGFjY3VtdWxhdG9yYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFnZ3JlZ2F0b3IoY29sbGVjdGlvbiwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgIHNldHRlcihhY2N1bXVsYXRvciwgdmFsdWUsIGl0ZXJhdGVlKHZhbHVlKSwgY29sbGVjdGlvbik7XG4gIH0pO1xuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VBZ2dyZWdhdG9yO1xuIiwiaW1wb3J0IGFycmF5QWdncmVnYXRvciBmcm9tICcuL19hcnJheUFnZ3JlZ2F0b3IuanMnO1xuaW1wb3J0IGJhc2VBZ2dyZWdhdG9yIGZyb20gJy4vX2Jhc2VBZ2dyZWdhdG9yLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uZ3JvdXBCeWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGFjY3VtdWxhdG9yIHZhbHVlcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpbml0aWFsaXplcl0gVGhlIGFjY3VtdWxhdG9yIG9iamVjdCBpbml0aWFsaXplci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFnZ3JlZ2F0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFnZ3JlZ2F0b3Ioc2V0dGVyLCBpbml0aWFsaXplcikge1xuICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUFnZ3JlZ2F0b3IgOiBiYXNlQWdncmVnYXRvcixcbiAgICAgICAgYWNjdW11bGF0b3IgPSBpbml0aWFsaXplciA/IGluaXRpYWxpemVyKCkgOiB7fTtcblxuICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIHNldHRlciwgYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgYWNjdW11bGF0b3IpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVBZ2dyZWdhdG9yO1xuIiwiaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGNyZWF0ZUFnZ3JlZ2F0b3IgZnJvbSAnLi9fY3JlYXRlQWdncmVnYXRvci5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2Yga2V5cyBnZW5lcmF0ZWQgZnJvbSB0aGUgcmVzdWx0cyBvZiBydW5uaW5nXG4gKiBlYWNoIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gIHRocnUgYGl0ZXJhdGVlYC4gVGhlIG9yZGVyIG9mIGdyb3VwZWQgdmFsdWVzXG4gKiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvcmRlciB0aGV5IG9jY3VyIGluIGBjb2xsZWN0aW9uYC4gVGhlIGNvcnJlc3BvbmRpbmdcbiAqIHZhbHVlIG9mIGVhY2gga2V5IGlzIGFuIGFycmF5IG9mIGVsZW1lbnRzIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZVxuICoga2V5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbXBvc2VkIGFnZ3JlZ2F0ZSBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZ3JvdXBCeShbNi4xLCA0LjIsIDYuM10sIE1hdGguZmxvb3IpO1xuICogLy8gPT4geyAnNCc6IFs0LjJdLCAnNic6IFs2LjEsIDYuM10gfVxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5ncm91cEJ5KFsnb25lJywgJ3R3bycsICd0aHJlZSddLCAnbGVuZ3RoJyk7XG4gKiAvLyA9PiB7ICczJzogWydvbmUnLCAndHdvJ10sICc1JzogWyd0aHJlZSddIH1cbiAqL1xudmFyIGdyb3VwQnkgPSBjcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHQsIGtleSkpIHtcbiAgICByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBiYXNlQXNzaWduVmFsdWUocmVzdWx0LCBrZXksIFt2YWx1ZV0pO1xuICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZ3JvdXBCeTtcbiIsImV4cG9ydCBjb25zdCBBUk1fRkVBVFVSRVNfSCA9IGAvKiBNYWNyb3MgdG8gdGVzdCBmb3IgQ1BVIGZlYXR1cmVzIG9uIEFSTS4gIEdlbmVyaWMgQVJNIHZlcnNpb24uXG5Db3B5cmlnaHQgKEMpIDIwMTItMjAyMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cblRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LlxuVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG5tb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG5MaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXJcbnZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG5NRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbkxpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeS4gIElmIG5vdCwgc2VlXG48aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi9cblxuI2lmbmRlZiBfQVJNX0FSTV9GRUFUVVJFU19IXG4jZGVmaW5lIF9BUk1fQVJNX0ZFQVRVUkVTX0ggMVxuXG4vKiBBbiBPUy1zcGVjaWZpYyBhcm0tZmVhdHVyZXMuaCBmaWxlIHNob3VsZCBkZWZpbmUgQVJNX0hBVkVfVkZQIHRvXG5hbiBhcHByb3ByaWF0ZSBleHByZXNzaW9uIGZvciB0ZXN0aW5nIGF0IHJ1bnRpbWUgd2hldGhlciB0aGUgVkZQXG5oYXJkd2FyZSBpcyBwcmVzZW50LiAgV2UnbGwgdGhlbiByZWRlZmluZSBpdCB0byBhIGNvbnN0YW50IGlmIHdlXG5rbm93IGF0IGNvbXBpbGUgdGltZSB0aGF0IHdlIGNhbiBhc3N1bWUgVkZQLiAgKi9cblxuI2lmbmRlZiBfX1NPRlRGUF9fXG4vKiBUaGUgY29tcGlsZXIgaXMgZ2VuZXJhdGluZyBWRlAgaW5zdHJ1Y3Rpb25zLCBzbyB3ZSdyZSBhbHJlYWR5XG5hc3N1bWluZyB0aGUgaGFyZHdhcmUgZXhpc3RzLiAgKi9cbiMgdW5kZWYgQVJNX0hBVkVfVkZQXG4jIGRlZmluZSBBUk1fSEFWRV9WRlBcdDFcbiNlbmRpZlxuXG4vKiBBbiBPUy1zcGVjaWZpYyBhcm0tZmVhdHVyZXMuaCBmaWxlIG1heSBkZWZpbmUgQVJNX0FTU1VNRV9OT19JV01NWFRcbnRvIGluZGljYXRlIGF0IGNvbXBpbGUgdGltZSB0aGF0IGlXTU1YdCBoYXJkd2FyZSBpcyBuZXZlciBwcmVzZW50XG5hdCBydW50aW1lIChvciB0aGF0IHdlIG5ldmVyIGNhcmUgYWJvdXQgaXRzIHN0YXRlKSBhbmQgc28gbmVlZCBub3RcbmJlIGNoZWNrZWQgZm9yLiAgKi9cblxuLyogQSBtb3JlLXNwZWNpZmljIGFybS1mZWF0dXJlcy5oIGZpbGUgbWF5IGRlZmluZSBBUk1fQUxXQVlTX0JYIHRvIGluZGljYXRlXG50aGF0IGluc3RydWN0aW9ucyB1c2luZyBwYyBhcyBhIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIG11c3QgbmV2ZXIgYmUgdXNlZCxcbnNvIGEgXCJieFwiIChvciBcImJseFwiKSBpbnN0cnVjdGlvbiBpcyBhbHdheXMgcmVxdWlyZWQuICAqL1xuXG4vKiBUaGUgbG9nMiBvZiB0aGUgbWluaW11bSBhbGlnbm1lbnQgcmVxdWlyZWQgZm9yIGFuIGFkZHJlc3MgdGhhdFxuaXMgdGhlIHRhcmdldCBvZiBhIGNvbXB1dGVkIGJyYW5jaCAoaS5lLiBhIFwiYnhcIiBpbnN0cnVjdGlvbikuXG5BIG1vcmUtc3BlY2lmaWMgYXJtLWZlYXR1cmVzLmggZmlsZSBtYXkgZGVmaW5lIHRoaXMgdG8gc2V0IGEgbW9yZVxuc3RyaW5nZW50IHJlcXVpcmVtZW50LlxuVXNpbmcgdGhpcyBvbmx5IG1ha2VzIHNlbnNlIGZvciBjb2RlIGluIEFSTSBtb2RlICh3aGVyZSBpbnN0cnVjdGlvbnNcbmFsd2F5cyBoYXZlIGEgZml4ZWQgc2l6ZSBvZiBmb3VyIGJ5dGVzKSwgb3IgZm9yIFRodW1iLW1vZGUgY29kZSB0aGF0IGlzXG5zcGVjaWZpY2FsbHkgYWxpZ25pbmcgYWxsIHRoZSByZWxhdGVkIGJyYW5jaCB0YXJnZXRzIHRvIG1hdGNoIChzaW5jZVxuVGh1bWIgaW5zdHJ1Y3Rpb25zIG1pZ2h0IGJlIGVpdGhlciB0d28gb3IgZm91ciBieXRlcykuICAqL1xuI2lmbmRlZiBBUk1fQlhfQUxJR05fTE9HMlxuIyBkZWZpbmUgQVJNX0JYX0FMSUdOX0xPRzJcdDJcbiNlbmRpZlxuXG4vKiBBbiBPUy1zcGVjaWZpYyBhcm0tZmVhdHVyZXMuaCBmaWxlIG1heSBkZWZpbmUgQVJNX05PX0lOREVYX1JFR0lTVEVSIHRvXG5pbmRpY2F0ZSB0aGF0IHRoZSB0d28tcmVnaXN0ZXIgYWRkcmVzc2luZyBtb2RlcyBtdXN0IG5ldmVyIGJlIHVzZWQuICAqL1xuXG4jZW5kaWYgIC8qIGFybS1mZWF0dXJlcy5oICovXG5gO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJtLWZlYXR1cmVzLmguanMubWFwIiwiZXhwb3J0IGNvbnN0IGNyZWF0ZUpzQmluZGluZyA9IChsb2NhbE5hbWUsIHBrZ05hbWUpID0+IGAvKiB0c2xpbnQ6ZGlzYWJsZSAqL1xuLyogZXNsaW50LWRpc2FibGUgKi9cbi8qIHByZXR0aWVyLWlnbm9yZSAqL1xuXG4vKiBhdXRvLWdlbmVyYXRlZCBieSBOQVBJLVJTICovXG5cbmNvbnN0IHsgZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jIH0gPSByZXF1aXJlKCdmcycpXG5jb25zdCB7IGpvaW4gfSA9IHJlcXVpcmUoJ3BhdGgnKVxuXG5jb25zdCB7IHBsYXRmb3JtLCBhcmNoIH0gPSBwcm9jZXNzXG5cbmxldCBuYXRpdmVCaW5kaW5nID0gbnVsbFxubGV0IGxvY2FsRmlsZUV4aXN0ZWQgPSBmYWxzZVxubGV0IGxvYWRFcnJvciA9IG51bGxcblxuZnVuY3Rpb24gaXNNdXNsKCkge1xuICAvLyBGb3IgTm9kZSAxMFxuICBpZiAoIXByb2Nlc3MucmVwb3J0IHx8IHR5cGVvZiBwcm9jZXNzLnJlcG9ydC5nZXRSZXBvcnQgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbGRkUGF0aCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjU3luYygnd2hpY2ggbGRkJykudG9TdHJpbmcoKS50cmltKClcbiAgICAgIHJldHVybiByZWFkRmlsZVN5bmMobGRkUGF0aCwgJ3V0ZjgnKS5pbmNsdWRlcygnbXVzbCcpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgeyBnbGliY1ZlcnNpb25SdW50aW1lIH0gPSBwcm9jZXNzLnJlcG9ydC5nZXRSZXBvcnQoKS5oZWFkZXJcbiAgICByZXR1cm4gIWdsaWJjVmVyc2lvblJ1bnRpbWVcbiAgfVxufVxuXG5zd2l0Y2ggKHBsYXRmb3JtKSB7XG4gIGNhc2UgJ2FuZHJvaWQnOlxuICAgIHN3aXRjaCAoYXJjaCkge1xuICAgICAgY2FzZSAnYXJtNjQnOlxuICAgICAgICBsb2NhbEZpbGVFeGlzdGVkID0gZXhpc3RzU3luYyhqb2luKF9fZGlybmFtZSwgJyR7bG9jYWxOYW1lfS5hbmRyb2lkLWFybTY0Lm5vZGUnKSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAobG9jYWxGaWxlRXhpc3RlZCkge1xuICAgICAgICAgICAgbmF0aXZlQmluZGluZyA9IHJlcXVpcmUoJy4vJHtsb2NhbE5hbWV9LmFuZHJvaWQtYXJtNjQubm9kZScpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcke3BrZ05hbWV9LWFuZHJvaWQtYXJtNjQnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvYWRFcnJvciA9IGVcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnYXJtJzpcbiAgICAgICAgbG9jYWxGaWxlRXhpc3RlZCA9IGV4aXN0c1N5bmMoam9pbihfX2Rpcm5hbWUsICcke2xvY2FsTmFtZX0uYW5kcm9pZC1hcm0tZWFiaS5ub2RlJykpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKGxvY2FsRmlsZUV4aXN0ZWQpIHtcbiAgICAgICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcuLyR7bG9jYWxOYW1lfS5hbmRyb2lkLWFybS1lYWJpLm5vZGUnKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnJHtwa2dOYW1lfS1hbmRyb2lkLWFybS1lYWJpJylcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2FkRXJyb3IgPSBlXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcXGBVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUgb24gQW5kcm9pZCBcXCR7YXJjaH1cXGApXG4gICAgfVxuICAgIGJyZWFrXG4gIGNhc2UgJ3dpbjMyJzpcbiAgICBzd2l0Y2ggKGFyY2gpIHtcbiAgICAgIGNhc2UgJ3g2NCc6XG4gICAgICAgIGxvY2FsRmlsZUV4aXN0ZWQgPSBleGlzdHNTeW5jKFxuICAgICAgICAgIGpvaW4oX19kaXJuYW1lLCAnJHtsb2NhbE5hbWV9LndpbjMyLXg2NC1tc3ZjLm5vZGUnKVxuICAgICAgICApXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKGxvY2FsRmlsZUV4aXN0ZWQpIHtcbiAgICAgICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcuLyR7bG9jYWxOYW1lfS53aW4zMi14NjQtbXN2Yy5ub2RlJylcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmF0aXZlQmluZGluZyA9IHJlcXVpcmUoJyR7cGtnTmFtZX0td2luMzIteDY0LW1zdmMnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvYWRFcnJvciA9IGVcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnaWEzMic6XG4gICAgICAgIGxvY2FsRmlsZUV4aXN0ZWQgPSBleGlzdHNTeW5jKFxuICAgICAgICAgIGpvaW4oX19kaXJuYW1lLCAnJHtsb2NhbE5hbWV9LndpbjMyLWlhMzItbXN2Yy5ub2RlJylcbiAgICAgICAgKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChsb2NhbEZpbGVFeGlzdGVkKSB7XG4gICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnLi8ke2xvY2FsTmFtZX0ud2luMzItaWEzMi1tc3ZjLm5vZGUnKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnJHtwa2dOYW1lfS13aW4zMi1pYTMyLW1zdmMnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvYWRFcnJvciA9IGVcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnYXJtNjQnOlxuICAgICAgICBsb2NhbEZpbGVFeGlzdGVkID0gZXhpc3RzU3luYyhcbiAgICAgICAgICBqb2luKF9fZGlybmFtZSwgJyR7bG9jYWxOYW1lfS53aW4zMi1hcm02NC1tc3ZjLm5vZGUnKVxuICAgICAgICApXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKGxvY2FsRmlsZUV4aXN0ZWQpIHtcbiAgICAgICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcuLyR7bG9jYWxOYW1lfS53aW4zMi1hcm02NC1tc3ZjLm5vZGUnKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnJHtwa2dOYW1lfS13aW4zMi1hcm02NC1tc3ZjJylcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2FkRXJyb3IgPSBlXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcXGBVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUgb24gV2luZG93czogXFwke2FyY2h9XFxgKVxuICAgIH1cbiAgICBicmVha1xuICBjYXNlICdkYXJ3aW4nOlxuICAgIGxvY2FsRmlsZUV4aXN0ZWQgPSBleGlzdHNTeW5jKGpvaW4oX19kaXJuYW1lLCAnJHtsb2NhbE5hbWV9LmRhcndpbi11bml2ZXJzYWwubm9kZScpKVxuICAgIHRyeSB7XG4gICAgICBpZiAobG9jYWxGaWxlRXhpc3RlZCkge1xuICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnLi8ke2xvY2FsTmFtZX0uZGFyd2luLXVuaXZlcnNhbC5ub2RlJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcke3BrZ05hbWV9LWRhcndpbi11bml2ZXJzYWwnKVxuICAgICAgfVxuICAgICAgYnJlYWtcbiAgICB9IGNhdGNoIHt9XG4gICAgc3dpdGNoIChhcmNoKSB7XG4gICAgICBjYXNlICd4NjQnOlxuICAgICAgICBsb2NhbEZpbGVFeGlzdGVkID0gZXhpc3RzU3luYyhqb2luKF9fZGlybmFtZSwgJyR7bG9jYWxOYW1lfS5kYXJ3aW4teDY0Lm5vZGUnKSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAobG9jYWxGaWxlRXhpc3RlZCkge1xuICAgICAgICAgICAgbmF0aXZlQmluZGluZyA9IHJlcXVpcmUoJy4vJHtsb2NhbE5hbWV9LmRhcndpbi14NjQubm9kZScpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcke3BrZ05hbWV9LWRhcndpbi14NjQnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvYWRFcnJvciA9IGVcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnYXJtNjQnOlxuICAgICAgICBsb2NhbEZpbGVFeGlzdGVkID0gZXhpc3RzU3luYyhcbiAgICAgICAgICBqb2luKF9fZGlybmFtZSwgJyR7bG9jYWxOYW1lfS5kYXJ3aW4tYXJtNjQubm9kZScpXG4gICAgICAgIClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAobG9jYWxGaWxlRXhpc3RlZCkge1xuICAgICAgICAgICAgbmF0aXZlQmluZGluZyA9IHJlcXVpcmUoJy4vJHtsb2NhbE5hbWV9LmRhcndpbi1hcm02NC5ub2RlJylcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmF0aXZlQmluZGluZyA9IHJlcXVpcmUoJyR7cGtnTmFtZX0tZGFyd2luLWFybTY0JylcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2FkRXJyb3IgPSBlXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcXGBVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUgb24gbWFjT1M6IFxcJHthcmNofVxcYClcbiAgICB9XG4gICAgYnJlYWtcbiAgY2FzZSAnZnJlZWJzZCc6XG4gICAgaWYgKGFyY2ggIT09ICd4NjQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXFxgVW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlIG9uIEZyZWVCU0Q6IFxcJHthcmNofVxcYClcbiAgICB9XG4gICAgbG9jYWxGaWxlRXhpc3RlZCA9IGV4aXN0c1N5bmMoam9pbihfX2Rpcm5hbWUsICcke2xvY2FsTmFtZX0uZnJlZWJzZC14NjQubm9kZScpKVxuICAgIHRyeSB7XG4gICAgICBpZiAobG9jYWxGaWxlRXhpc3RlZCkge1xuICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnLi8ke2xvY2FsTmFtZX0uZnJlZWJzZC14NjQubm9kZScpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnJHtwa2dOYW1lfS1mcmVlYnNkLXg2NCcpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9hZEVycm9yID0gZVxuICAgIH1cbiAgICBicmVha1xuICBjYXNlICdsaW51eCc6XG4gICAgc3dpdGNoIChhcmNoKSB7XG4gICAgICBjYXNlICd4NjQnOlxuICAgICAgICBpZiAoaXNNdXNsKCkpIHtcbiAgICAgICAgICBsb2NhbEZpbGVFeGlzdGVkID0gZXhpc3RzU3luYyhcbiAgICAgICAgICAgIGpvaW4oX19kaXJuYW1lLCAnJHtsb2NhbE5hbWV9LmxpbnV4LXg2NC1tdXNsLm5vZGUnKVxuICAgICAgICAgIClcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGxvY2FsRmlsZUV4aXN0ZWQpIHtcbiAgICAgICAgICAgICAgbmF0aXZlQmluZGluZyA9IHJlcXVpcmUoJy4vJHtsb2NhbE5hbWV9LmxpbnV4LXg2NC1tdXNsLm5vZGUnKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmF0aXZlQmluZGluZyA9IHJlcXVpcmUoJyR7cGtnTmFtZX0tbGludXgteDY0LW11c2wnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvYWRFcnJvciA9IGVcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9jYWxGaWxlRXhpc3RlZCA9IGV4aXN0c1N5bmMoXG4gICAgICAgICAgICBqb2luKF9fZGlybmFtZSwgJyR7bG9jYWxOYW1lfS5saW51eC14NjQtZ251Lm5vZGUnKVxuICAgICAgICAgIClcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGxvY2FsRmlsZUV4aXN0ZWQpIHtcbiAgICAgICAgICAgICAgbmF0aXZlQmluZGluZyA9IHJlcXVpcmUoJy4vJHtsb2NhbE5hbWV9LmxpbnV4LXg2NC1nbnUubm9kZScpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnJHtwa2dOYW1lfS1saW51eC14NjQtZ251JylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBsb2FkRXJyb3IgPSBlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdhcm02NCc6XG4gICAgICAgIGlmIChpc011c2woKSkge1xuICAgICAgICAgIGxvY2FsRmlsZUV4aXN0ZWQgPSBleGlzdHNTeW5jKFxuICAgICAgICAgICAgam9pbihfX2Rpcm5hbWUsICcke2xvY2FsTmFtZX0ubGludXgtYXJtNjQtbXVzbC5ub2RlJylcbiAgICAgICAgICApXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChsb2NhbEZpbGVFeGlzdGVkKSB7XG4gICAgICAgICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcuLyR7bG9jYWxOYW1lfS5saW51eC1hcm02NC1tdXNsLm5vZGUnKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmF0aXZlQmluZGluZyA9IHJlcXVpcmUoJyR7cGtnTmFtZX0tbGludXgtYXJtNjQtbXVzbCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9hZEVycm9yID0gZVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2NhbEZpbGVFeGlzdGVkID0gZXhpc3RzU3luYyhcbiAgICAgICAgICAgIGpvaW4oX19kaXJuYW1lLCAnJHtsb2NhbE5hbWV9LmxpbnV4LWFybTY0LWdudS5ub2RlJylcbiAgICAgICAgICApXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChsb2NhbEZpbGVFeGlzdGVkKSB7XG4gICAgICAgICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcuLyR7bG9jYWxOYW1lfS5saW51eC1hcm02NC1nbnUubm9kZScpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnJHtwa2dOYW1lfS1saW51eC1hcm02NC1nbnUnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvYWRFcnJvciA9IGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2FybSc6XG4gICAgICAgIGlmIChpc011c2woKSkge1xuICAgICAgICAgIGxvY2FsRmlsZUV4aXN0ZWQgPSBleGlzdHNTeW5jKFxuICAgICAgICAgICAgam9pbihfX2Rpcm5hbWUsICcke2xvY2FsTmFtZX0ubGludXgtYXJtLW11c2xlYWJpaGYubm9kZScpXG4gICAgICAgICAgKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAobG9jYWxGaWxlRXhpc3RlZCkge1xuICAgICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnLi8ke2xvY2FsTmFtZX0ubGludXgtYXJtLW11c2xlYWJpaGYubm9kZScpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnJHtwa2dOYW1lfS1saW51eC1hcm0tbXVzbGVhYmloZicpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9hZEVycm9yID0gZVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2NhbEZpbGVFeGlzdGVkID0gZXhpc3RzU3luYyhcbiAgICAgICAgICAgIGpvaW4oX19kaXJuYW1lLCAnJHtsb2NhbE5hbWV9LmxpbnV4LWFybS1nbnVlYWJpaGYubm9kZScpXG4gICAgICAgICAgKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAobG9jYWxGaWxlRXhpc3RlZCkge1xuICAgICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnLi8ke2xvY2FsTmFtZX0ubGludXgtYXJtLWdudWVhYmloZi5ub2RlJylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcke3BrZ05hbWV9LWxpbnV4LWFybS1nbnVlYWJpaGYnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvYWRFcnJvciA9IGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3Jpc2N2NjQnOlxuICAgICAgICBpZiAoaXNNdXNsKCkpIHtcbiAgICAgICAgICBsb2NhbEZpbGVFeGlzdGVkID0gZXhpc3RzU3luYyhcbiAgICAgICAgICAgIGpvaW4oX19kaXJuYW1lLCAnJHtsb2NhbE5hbWV9LmxpbnV4LXJpc2N2NjQtbXVzbC5ub2RlJylcbiAgICAgICAgICApXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChsb2NhbEZpbGVFeGlzdGVkKSB7XG4gICAgICAgICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcuLyR7bG9jYWxOYW1lfS5saW51eC1yaXNjdjY0LW11c2wubm9kZScpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnJHtwa2dOYW1lfS1saW51eC1yaXNjdjY0LW11c2wnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvYWRFcnJvciA9IGVcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9jYWxGaWxlRXhpc3RlZCA9IGV4aXN0c1N5bmMoXG4gICAgICAgICAgICBqb2luKF9fZGlybmFtZSwgJyR7bG9jYWxOYW1lfS5saW51eC1yaXNjdjY0LWdudS5ub2RlJylcbiAgICAgICAgICApXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChsb2NhbEZpbGVFeGlzdGVkKSB7XG4gICAgICAgICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcuLyR7bG9jYWxOYW1lfS5saW51eC1yaXNjdjY0LWdudS5ub2RlJylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcke3BrZ05hbWV9LWxpbnV4LXJpc2N2NjQtZ251JylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBsb2FkRXJyb3IgPSBlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzMzkweCc6XG4gICAgICAgIGxvY2FsRmlsZUV4aXN0ZWQgPSBleGlzdHNTeW5jKFxuICAgICAgICAgIGpvaW4oX19kaXJuYW1lLCAnJHtsb2NhbE5hbWV9LmxpbnV4LXMzOTB4LWdudS5ub2RlJylcbiAgICAgICAgKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChsb2NhbEZpbGVFeGlzdGVkKSB7XG4gICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnLi8ke2xvY2FsTmFtZX0ubGludXgtczM5MHgtZ251Lm5vZGUnKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnJHtwa2dOYW1lfS1saW51eC1zMzkweC1nbnUnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvYWRFcnJvciA9IGVcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcYFVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZSBvbiBMaW51eDogXFwke2FyY2h9XFxgKVxuICAgIH1cbiAgICBicmVha1xuICBkZWZhdWx0OlxuICAgIHRocm93IG5ldyBFcnJvcihcXGBVbnN1cHBvcnRlZCBPUzogXFwke3BsYXRmb3JtfSwgYXJjaGl0ZWN0dXJlOiBcXCR7YXJjaH1cXGApXG59XG5cbmlmICghbmF0aXZlQmluZGluZykge1xuICBpZiAobG9hZEVycm9yKSB7XG4gICAgdGhyb3cgbG9hZEVycm9yXG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxcYEZhaWxlZCB0byBsb2FkIG5hdGl2ZSBiaW5kaW5nXFxgKVxufVxuXG5gO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9anMtYmluZGluZy10ZW1wbGF0ZS5qcy5tYXAiLCJ2YXIgX2E7XG5pbXBvcnQgeyBfX2F3YWl0ZXIgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ29zJztcbmltcG9ydCB7IGpvaW4sIHBhcnNlLCBzZXAgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gJ2NsaXBhbmlvbic7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjb2xvcmV0dGUnO1xuaW1wb3J0IGVudlBhdGhzIGZyb20gJ2Vudi1wYXRocyc7XG5pbXBvcnQgeyBncm91cEJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi9wYWNrYWdlLmpzb24nO1xuaW1wb3J0IHsgQVJNX0ZFQVRVUkVTX0ggfSBmcm9tICcuL2FybS1mZWF0dXJlcy5oJztcbmltcG9ydCB7IGdldE5hcGlDb25maWcgfSBmcm9tICcuL2NvbnN0cyc7XG5pbXBvcnQgeyBkZWJ1Z0ZhY3RvcnkgfSBmcm9tICcuL2RlYnVnJztcbmltcG9ydCB7IGNyZWF0ZUpzQmluZGluZyB9IGZyb20gJy4vanMtYmluZGluZy10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBnZXRIb3N0VGFyZ2V0VHJpcGxlLCBwYXJzZVRyaXBsZSB9IGZyb20gJy4vcGFyc2UtdHJpcGxlJztcbmltcG9ydCB7IGNvcHlGaWxlQXN5bmMsIG1rZGlyQXN5bmMsIHJlYWRGaWxlQXN5bmMsIHVubGlua0FzeW5jLCB3cml0ZUZpbGVBc3luYywgfSBmcm9tICcuL3V0aWxzJztcbmNvbnN0IGRlYnVnID0gZGVidWdGYWN0b3J5KCdidWlsZCcpO1xuY29uc3QgWklHX1BMQVRGT1JNX1RBUkdFVF9NQVAgPSB7XG4gICAgJ3g4Nl82NC11bmtub3duLWxpbnV4LW11c2wnOiAneDg2XzY0LWxpbnV4LW11c2wnLFxuICAgICd4ODZfNjQtdW5rbm93bi1saW51eC1nbnUnOiAneDg2XzY0LWxpbnV4LWdudScsXG4gICAgLy8gRG9lc24ndCBzdXBwb3J0IFdpbmRvd3MgTVNWQyBmb3Igbm93XG4gICAgLy8gJ3g4Nl82NC1wYy13aW5kb3dzLWdudSc6ICd4ODZfNjQtd2luZG93cy1nbnUnLFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96aWdsYW5nL3ppZy9pc3N1ZXMvMTc1OVxuICAgIC8vICd4ODZfNjQtdW5rbm93bi1mcmVlYnNkJzogJ3g4Nl82NC1mcmVlYnNkJyxcbiAgICAneDg2XzY0LWFwcGxlLWRhcndpbic6ICd4ODZfNjQtbWFjb3MnLFxuICAgICdhYXJjaDY0LWFwcGxlLWRhcndpbic6ICdhYXJjaDY0LW1hY29zJyxcbiAgICAnYWFyY2g2NC11bmtub3duLWxpbnV4LWdudSc6ICdhYXJjaDY0LWxpbnV4LWdudScsXG4gICAgJ2FhcmNoNjQtdW5rbm93bi1saW51eC1tdXNsJzogJ2FhcmNoNjQtbGludXgtbXVzbCcsXG4gICAgJ2FybXY3LXVua25vd24tbGludXgtZ251ZWFiaWhmJzogJ2FybS1saW51eC1nbnVlYWJpaGYnLFxuICAgICdhcm12Ny11bmtub3duLWxpbnV4LW11c2xlYWJpaGYnOiAnYXJtLWxpbnV4LW11c2xlYWJpaGYnLFxufTtcbmNvbnN0IERFRkFVTFRfR0xJQkNfVEFSR0VUID0gKF9hID0gcHJvY2Vzcy5lbnYuR0xJQkNfQUJJX1RBUkdFVCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJzIuMTcnO1xuY29uc3QgU0hFQkFOR19OT0RFID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICcnIDogJyMhL3Vzci9iaW4vZW52IG5vZGVcXG4nO1xuY29uc3QgU0hFQkFOR19TSCA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyAnJyA6ICcjIS91c3IvYmluL2VudiBzaFxcbic7XG5mdW5jdGlvbiBwcm9jZXNzWmlnTGlua2VyQXJncyhwbGF0Zm9ybSwgYXJncykge1xuICAgIGlmIChwbGF0Zm9ybS5pbmNsdWRlcygnYXBwbGUnKSkge1xuICAgICAgICBjb25zdCBuZXdBcmdzID0gYXJncy5maWx0ZXIoKGFyZywgaW5kZXgpID0+ICFhcmcuc3RhcnRzV2l0aCgnLVdsLC1leHBvcnRlZF9zeW1ib2xzX2xpc3QnKSAmJlxuICAgICAgICAgICAgYXJnICE9PSAnLVdsLC1keWxpYicgJiZcbiAgICAgICAgICAgIGFyZyAhPT0gJy1saWNvbnYnICYmXG4gICAgICAgICAgICBhcmcgIT09ICctV2wsLWRlYWRfc3RyaXAnICYmXG4gICAgICAgICAgICAhKGFyZyA9PT0gJy1mcmFtZXdvcmsnICYmIGFyZ3NbaW5kZXggKyAxXSA9PT0gJ0NvcmVGb3VuZGF0aW9uJykgJiZcbiAgICAgICAgICAgICEoYXJnID09PSAnQ29yZUZvdW5kYXRpb24nICYmIGFyZ3NbaW5kZXggLSAxXSA9PT0gJy1mcmFtZXdvcmsnKSk7XG4gICAgICAgIG5ld0FyZ3MucHVzaCgnLVdsLFwiLXVuZGVmaW5lZD1keW5hbWljX2xvb2t1cFwiJywgJy1kZWFkX3N0cmlwJywgJy1sdW53aW5kJyk7XG4gICAgICAgIHJldHVybiBuZXdBcmdzO1xuICAgIH1cbiAgICBpZiAocGxhdGZvcm0uaW5jbHVkZXMoJ2xpbnV4JykpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3NcbiAgICAgICAgICAgIC5tYXAoKGFyZykgPT4ge1xuICAgICAgICAgICAgaWYgKGFyZyA9PT0gJy1sZ2NjX3MnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICctbHVud2luZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigoYXJnKSA9PiBhcmcgIT09ICctbWFyY2g9YXJtdjctYScgJiYgYXJnICE9PSAnLVdsLC0tbm8tdW5kZWZpbmVkLXZlcnNpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnQgY2xhc3MgQnVpbGRDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuYXBwZW5kUGxhdGZvcm1Ub0ZpbGVuYW1lID0gT3B0aW9uLkJvb2xlYW4oYC0tcGxhdGZvcm1gLCBmYWxzZSwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBBZGQgcGxhdGZvcm0gdHJpcGxlIHRvIHRoZSAubm9kZSBmaWxlLiAke2NoYWxrLmdyZWVuKCdbbmFtZV0ubGludXgteDY0LWdudS5ub2RlJyl9IGZvciBleGFtcGxlYCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaXNSZWxlYXNlID0gT3B0aW9uLkJvb2xlYW4oYC0tcmVsZWFzZWAsIGZhbHNlLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYEJ5cGFzcyB0byAke2NoYWxrLmdyZWVuKCdjYXJnbyBidWlsZCAtLXJlbGVhc2UnKX1gLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb25maWdGaWxlTmFtZSA9IE9wdGlvbi5TdHJpbmcoJy0tY29uZmlnLC1jJywge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBuYXBpIGNvbmZpZyBwYXRoLCBvbmx5IEpTT04gZm9ybWF0IGFjY2VwdGVkLiBEZWZhdWx0IHRvICR7Y2hhbGsudW5kZXJsaW5lKGNoYWxrLmdyZWVuKCdwYWNrYWdlLmpzb24nKSl9YCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2FyZ29OYW1lID0gT3B0aW9uLlN0cmluZygnLS1jYXJnby1uYW1lJywge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBPdmVycmlkZSB0aGUgJHtjaGFsay5ncmVlbignbmFtZScpfSBmaWVsZCBpbiAke2NoYWxrLnVuZGVybGluZShjaGFsay55ZWxsb3dCcmlnaHQoJ0NhcmdvLnRvbWwnKSl9YCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGFyZ2V0VHJpcGxlRGlyID0gT3B0aW9uLlN0cmluZygnLS10YXJnZXQnLCAoX2IgPSAoX2EgPSBwcm9jZXNzLmVudi5SVVNUX1RBUkdFVCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcHJvY2Vzcy5lbnYuQ0FSR09fQlVJTERfVEFSR0VUKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJywge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBCeXBhc3MgdG8gJHtjaGFsay5ncmVlbignY2FyZ28gYnVpbGQgLS10YXJnZXQnKX1gLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mZWF0dXJlcyA9IE9wdGlvbi5TdHJpbmcoJy0tZmVhdHVyZXMnLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYEJ5cGFzcyB0byAke2NoYWxrLmdyZWVuKCdjYXJnbyBidWlsZCAtLWZlYXR1cmVzJyl9YCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYmluID0gT3B0aW9uLlN0cmluZygnLS1iaW4nLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYEJ5cGFzcyB0byAke2NoYWxrLmdyZWVuKCdjYXJnbyBidWlsZCAtLWJpbicpfWAsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmR0cyA9IE9wdGlvbi5TdHJpbmcoJy0tZHRzJywgJ2luZGV4LmQudHMnLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYFRoZSBmaWxlbmFtZSBhbmQgcGF0aCBvZiAke2NoYWxrLmdyZWVuKCcuZC50cycpfSBmaWxlLCByZWxhdGl2ZSB0byBjd2RgLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb25zdEVudW0gPSBPcHRpb24uQm9vbGVhbignLS1jb25zdC1lbnVtJywge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBHZW5lcmF0ZSAke2NoYWxrLmdyZWVuKCdjb25zdCBlbnVtJyl9IGluIC5kLnRzIGZpbGUgb3Igbm90LCBkZWZhdWx0IGlzICR7Y2hhbGsuZ3JlZW4oJ3RydWUnKX1gLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ub0R0c0hlYWRlciA9IE9wdGlvbi5Cb29sZWFuKCctLW5vLWR0cy1oZWFkZXInLCBmYWxzZSwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBEb24ndCBnZW5lcmF0ZSAke2NoYWxrLmdyZWVuKCcuZC50cycpfSBoZWFkZXJgLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wcm9qZWN0ID0gT3B0aW9uLlN0cmluZygnLXAnLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYEJ5cGFzcyB0byAke2NoYWxrLmdyZWVuKCdjYXJnbyAtcCcpfWAsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByb2ZpbGUgPSBPcHRpb24uU3RyaW5nKCctLXByb2ZpbGUnLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYEJ5cGFzcyB0byAke2NoYWxrLmdyZWVuKCdjYXJnbyAtLXByb2ZpbGUnKX1gLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jYXJnb0ZsYWdzID0gT3B0aW9uLlN0cmluZygnLS1jYXJnby1mbGFncycsICcnLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYEFsbCB0aGUgb3RoZXJzIGZsYWcgcGFzc2VkIHRvICR7Y2hhbGsueWVsbG93KCdjYXJnbyBidWlsZCcpfWAsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmpzQmluZGluZyA9IE9wdGlvbi5TdHJpbmcoJy0tanMnLCAnaW5kZXguanMnLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYFBhdGggdG8gdGhlIEpTIGJpbmRpbmcgZmlsZSwgcGFzcyAke2NoYWxrLnVuZGVybGluZShjaGFsay55ZWxsb3coJ2ZhbHNlJykpfSB0byBkaXNhYmxlIGl0LiBPbmx5IGFmZmVjdCBpZiAke2NoYWxrLmdyZWVuKCctLXRhcmdldCcpfSBpcyBzcGVjaWZpZWQuYCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuanNQYWNrYWdlTmFtZSA9IE9wdGlvbi5TdHJpbmcoJy0tanMtcGFja2FnZS1uYW1lJywge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBQYWNrYWdlIG5hbWUgaW4gZ2VuZXJhdGVkIGpzIGJpbmRpbmcgZmlsZSwgT25seSBhZmZlY3QgaWYgJHtjaGFsay5ncmVlbignLS10YXJnZXQnKX0gc3BlY2lmaWVkIGFuZCAke2NoYWxrLmdyZWVuKCctLWpzJyl9IGlzIG5vdCBmYWxzZS5gLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jYXJnb0N3ZCA9IE9wdGlvbi5TdHJpbmcoJy0tY2FyZ28tY3dkJywge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBUaGUgY3dkIG9mICR7Y2hhbGsudW5kZXJsaW5lKGNoYWxrLnllbGxvdygnQ2FyZ28udG9tbCcpKX0gZmlsZWAsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBpcGUgPSBPcHRpb24uU3RyaW5nKCctLXBpcGUnLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYFBpcGUgWyR7Y2hhbGsuZ3JlZW4oJy5qcy8udHMnKX1dIGZpbGVzIHRvIHRoaXMgY29tbWFuZCwgZWcgJHtjaGFsay5ncmVlbigncHJldHRpZXIgLXcnKX1gLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25hcGktcnMvbmFwaS1ycy9pc3N1ZXMvMjk3XG4gICAgICAgIHRoaXMuZGlzYWJsZVdpbmRvd3NYMzJPcHRpbWl6ZSA9IE9wdGlvbi5Cb29sZWFuKCctLWRpc2FibGUtd2luZG93cy14MzItb3B0aW1pemUnLCBmYWxzZSwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBEaXNhYmxlIHdpbmRvd3MgeDMyICR7Y2hhbGsuZ3JlZW4oJ2x0bycpfSBhbmQgaW5jcmVhc2UgJHtjaGFsay5ncmVlbignY29kZWdlbi11bml0cycpfS4gRGlzYWJsZWQgYnkgZGVmYXVsdC4gU2VlICR7Y2hhbGsudW5kZXJsaW5lKGNoYWxrLmJsdWUoJ2h0dHBzOi8vZ2l0aHViLmNvbS9uYXBpLXJzL25hcGktcnMvaXNzdWVzLzI5NycpKX1gLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kZXN0RGlyID0gT3B0aW9uLlN0cmluZyh7XG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVzZVppZyA9IE9wdGlvbi5Cb29sZWFuKGAtLXppZ2AsIGZhbHNlLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYFVzZSAke2NoYWxrLmdyZWVuKCd6aWcnKX0gYXMgbGlua2VyICR7Y2hhbGsueWVsbG93QnJpZ2h0KCcoRXhwZXJpbWVudGFsKScpfWAsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnppZ0FCSVZlcnNpb24gPSBPcHRpb24uU3RyaW5nKGAtLXppZy1hYmktc3VmZml4YCwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBUaGUgc3VmZml4IG9mIHRoZSAke2NoYWxrLmdyZWVuKCd6aWcgLS10YXJnZXQnKX0gQUJJIHZlcnNpb24uIEVnLiAke2NoYWxrLmN5YW4oJy0tdGFyZ2V0IHg4Nl82NC11bmtub3duLWxpbnV4LWdudScpfSAke2NoYWxrLmdyZWVuKCctLXppZy1hYmktc3VmZml4PTIuMTcnKX1gLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy56aWdMaW5rT25seSA9IE9wdGlvbi5Cb29sZWFuKGAtLXppZy1saW5rLW9ubHlgLCBmYWxzZSwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBPbmx5IGxpbmsgdGhlIGxpYnJhcnkgd2l0aCAke2NoYWxrLmdyZWVuKCd6aWcnKX1gLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pc1N0cmlwID0gT3B0aW9uLkJvb2xlYW4oYC0tc3RyaXBgLCBmYWxzZSwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke2NoYWxrLmdyZWVuKCdTdHJpcCcpfSB0aGUgbGlicmFyeSBmb3IgbWluaW11bSBmaWxlIHNpemVgLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZXhlY3V0ZSgpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nLCBfaCwgX2osIF9rLCBfbDtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGN3ZCA9IHRoaXMuY2FyZ29Dd2RcbiAgICAgICAgICAgICAgICA/IGpvaW4ocHJvY2Vzcy5jd2QoKSwgdGhpcy5jYXJnb0N3ZClcbiAgICAgICAgICAgICAgICA6IHByb2Nlc3MuY3dkKCk7XG4gICAgICAgICAgICBjb25zdCBjYXJnb1RvbWxQYXRoID0gam9pbihjd2QsICdDYXJnby50b21sJyk7XG4gICAgICAgICAgICBsZXQgY2FyZ29NZXRhZGF0YTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZGVidWcoJ1N0YXJ0IHBhcnNlIHRvbWwnKTtcbiAgICAgICAgICAgICAgICBjYXJnb01ldGFkYXRhID0gSlNPTi5wYXJzZShleGVjU3luYyhgY2FyZ28gbWV0YWRhdGEgLS1mb3JtYXQtdmVyc2lvbiAxIC0tbWFuaWZlc3QtcGF0aCBcIiR7Y2FyZ29Ub21sUGF0aH1cImAsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RkaW86ICdwaXBlJyxcbiAgICAgICAgICAgICAgICAgICAgbWF4QnVmZmVyOiAxMDI0ICogMTAyNCAqIDEwLFxuICAgICAgICAgICAgICAgIH0pLnRvU3RyaW5nKCd1dGY4JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDb3VsZCBub3QgcGFyc2UgdGhlIENhcmdvLnRvbWw6ICcgKyBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhY2thZ2VzID0gY2FyZ29NZXRhZGF0YS5wYWNrYWdlcztcbiAgICAgICAgICAgIGxldCBjYXJnb1BhY2thZ2VOYW1lO1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FyZ29OYW1lKSB7XG4gICAgICAgICAgICAgICAgY2FyZ29QYWNrYWdlTmFtZSA9IHRoaXMuY2FyZ29OYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdCA9IGNhcmdvTWV0YWRhdGEucmVzb2x2ZS5yb290O1xuICAgICAgICAgICAgICAgIGlmIChyb290KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvb3RQYWNrYWdlID0gcGFja2FnZXMuZmluZCgocCkgPT4gcC5pZCA9PT0gcm9vdCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvUGFja2FnZU5hbWUgPSByb290UGFja2FnZS5uYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gcGFja2FnZS5uYW1lIGZpZWxkIGluIENhcmdvLnRvbWwnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjYXJnb1BhY2thZ2UgPSBwYWNrYWdlcy5maW5kKChwKSA9PiBwLm5hbWUgPT09IGNhcmdvUGFja2FnZU5hbWUpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmJpbiAmJlxuICAgICAgICAgICAgICAgICgoX2EgPSBjYXJnb1BhY2thZ2UgPT09IG51bGwgfHwgY2FyZ29QYWNrYWdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjYXJnb1BhY2thZ2UudGFyZ2V0cykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPT09IDEgJiZcbiAgICAgICAgICAgICAgICAoY2FyZ29QYWNrYWdlID09PSBudWxsIHx8IGNhcmdvUGFja2FnZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2FyZ29QYWNrYWdlLnRhcmdldHNbMF0ua2luZC5sZW5ndGgpID09PSAxICYmXG4gICAgICAgICAgICAgICAgKGNhcmdvUGFja2FnZSA9PT0gbnVsbCB8fCBjYXJnb1BhY2thZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNhcmdvUGFja2FnZS50YXJnZXRzWzBdLmtpbmRbMF0pID09PSAnYmluJykge1xuICAgICAgICAgICAgICAgIHRoaXMuYmluID0gY2FyZ29QYWNrYWdlTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlbGVhc2VGbGFnID0gdGhpcy5pc1JlbGVhc2UgPyBgLS1yZWxlYXNlYCA6ICcnO1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0RmxhZyA9IHRoaXMudGFyZ2V0VHJpcGxlRGlyXG4gICAgICAgICAgICAgICAgPyBgLS10YXJnZXQgJHt0aGlzLnRhcmdldFRyaXBsZURpcn1gXG4gICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVzRmxhZyA9IHRoaXMuZmVhdHVyZXMgPyBgLS1mZWF0dXJlcyAke3RoaXMuZmVhdHVyZXN9YCA6ICcnO1xuICAgICAgICAgICAgY29uc3QgYmluRmxhZyA9IHRoaXMuYmluID8gYC0tYmluICR7dGhpcy5iaW59YCA6ICcnO1xuICAgICAgICAgICAgY29uc3QgdHJpcGxlID0gdGhpcy50YXJnZXRUcmlwbGVEaXJcbiAgICAgICAgICAgICAgICA/IHBhcnNlVHJpcGxlKHRoaXMudGFyZ2V0VHJpcGxlRGlyKVxuICAgICAgICAgICAgICAgIDogZ2V0SG9zdFRhcmdldFRyaXBsZSgpO1xuICAgICAgICAgICAgY29uc3QgZW52VGFyZ2V0ID0gdHJpcGxlLnJhdy5yZXBsYWNlQWxsKCctJywgJ18nKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgZGVidWcoYEN1cnJlbnQgdHJpcGxlIGlzOiAke2NoYWxrLmdyZWVuKHRyaXBsZS5yYXcpfWApO1xuICAgICAgICAgICAgY29uc3QgcEZsYWcgPSB0aGlzLnByb2plY3QgPyBgLXAgJHt0aGlzLnByb2plY3R9YCA6ICcnO1xuICAgICAgICAgICAgY29uc3QgcHJvZmlsZUZsYWcgPSB0aGlzLnByb2ZpbGUgPyBgLS1wcm9maWxlICR7dGhpcy5wcm9maWxlfWAgOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGV4dGVybmFsRmxhZ3MgPSBbXG4gICAgICAgICAgICAgICAgcmVsZWFzZUZsYWcsXG4gICAgICAgICAgICAgICAgdGFyZ2V0RmxhZyxcbiAgICAgICAgICAgICAgICBmZWF0dXJlc0ZsYWcsXG4gICAgICAgICAgICAgICAgYmluRmxhZyxcbiAgICAgICAgICAgICAgICBwRmxhZyxcbiAgICAgICAgICAgICAgICBwcm9maWxlRmxhZyxcbiAgICAgICAgICAgICAgICB0aGlzLmNhcmdvRmxhZ3MsXG4gICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZmxhZykgPT4gQm9vbGVhbihmbGFnKSlcbiAgICAgICAgICAgICAgICAuam9pbignICcpO1xuICAgICAgICAgICAgY29uc3QgYWRkaXRpb25hbEVudiA9IHt9O1xuICAgICAgICAgICAgY29uc3QgaXNDcm9zc0ZvcldpbiA9IHRyaXBsZS5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJiBwcm9jZXNzLnBsYXRmb3JtICE9PSAnd2luMzInO1xuICAgICAgICAgICAgY29uc3QgaXNDcm9zc0ZvckxpbnV4ID0gdHJpcGxlLnBsYXRmb3JtID09PSAnbGludXgnICYmXG4gICAgICAgICAgICAgICAgKHByb2Nlc3MucGxhdGZvcm0gIT09ICdsaW51eCcgfHxcbiAgICAgICAgICAgICAgICAgICAgdHJpcGxlLmFyY2ggIT09IHByb2Nlc3MuYXJjaCB8fFxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbGliY1ZlcnNpb25SdW50aW1lID0gXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAoX2MgPSAoX2IgPSAoX2EgPSBwcm9jZXNzLnJlcG9ydCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldFJlcG9ydCgpKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaGVhZGVyKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuZ2xpYmNWZXJzaW9uUnVudGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpYmMgPSBnbGliY1ZlcnNpb25SdW50aW1lID8gJ2dudScgOiAnbXVzbCc7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJpcGxlLmFiaSAhPT0gbGliYztcbiAgICAgICAgICAgICAgICAgICAgfSkoKSk7XG4gICAgICAgICAgICBjb25zdCBpc0Nyb3NzRm9yTWFjT1MgPSB0cmlwbGUucGxhdGZvcm0gPT09ICdkYXJ3aW4nICYmIHByb2Nlc3MucGxhdGZvcm0gIT09ICdkYXJ3aW4nO1xuICAgICAgICAgICAgY29uc3QgY2FyZ28gPSAoX2IgPSBwcm9jZXNzLmVudi5DQVJHTykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogKGlzQ3Jvc3NGb3JXaW4gPyAnY2FyZ28teHdpbicgOiAnY2FyZ28nKTtcbiAgICAgICAgICAgIGlmIChpc0Nyb3NzRm9yV2luICYmIHRyaXBsZS5hcmNoID09PSAnaWEzMicpIHtcbiAgICAgICAgICAgICAgICBhZGRpdGlvbmFsRW52WydYV0lOX0FSQ0gnXSA9ICd4ODYnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2FyZ29Db21tYW5kID0gYCR7Y2FyZ299IGJ1aWxkICR7ZXh0ZXJuYWxGbGFnc31gO1xuICAgICAgICAgICAgZGVidWcoYFJ1biAke2NoYWxrLmdyZWVuKGNhcmdvQ29tbWFuZCl9YCk7XG4gICAgICAgICAgICBjb25zdCBydXN0ZmxhZ3MgPSBwcm9jZXNzLmVudi5SVVNURkxBR1NcbiAgICAgICAgICAgICAgICA/IHByb2Nlc3MuZW52LlJVU1RGTEFHUy5zcGxpdCgnICcpXG4gICAgICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICAgIGlmICh0cmlwbGUucmF3LmluY2x1ZGVzKCdtdXNsJykgJiYgIXRoaXMuYmluKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFydXN0ZmxhZ3MuaW5jbHVkZXMoJ3RhcmdldC1mZWF0dXJlPS1jcnQtc3RhdGljJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVzdGZsYWdzLnB1c2goJy1DIHRhcmdldC1mZWF0dXJlPS1jcnQtc3RhdGljJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdHJpcCAmJiAhcnVzdGZsYWdzLmluY2x1ZGVzKCctQyBsaW5rLWFyZz0tcycpKSB7XG4gICAgICAgICAgICAgICAgcnVzdGZsYWdzLnB1c2goJy1DIGxpbmstYXJnPS1zJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdXNlWmlnID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIXRoaXMudXNlWmlnICYmXG4gICAgICAgICAgICAgICAgaXNDcm9zc0ZvckxpbnV4ICYmXG4gICAgICAgICAgICAgICAgdHJpcGxlLnJhdyA9PT0gJ3Jpc2N2NjRnYy11bmtub3duLWxpbnV4LWdudScpIHtcbiAgICAgICAgICAgICAgICAvLyBMaW5raW5nIHdpdGggemlnIGZhaWxzIGZvciByaXNjdjY0LiBEb24ndCBkZWZhdWx0IHRvIHppZyBmb3IgcmlzY3Y2NC5cbiAgICAgICAgICAgICAgICBhZGRpdGlvbmFsRW52W2BDQVJHT19UQVJHRVRfJHtlbnZUYXJnZXR9X0xJTktFUmBdID1cbiAgICAgICAgICAgICAgICAgICAgJ3Jpc2N2NjQtbGludXgtZ251LWdjYyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnVzZVppZyB8fCBpc0Nyb3NzRm9yTGludXggfHwgaXNDcm9zc0Zvck1hY09TKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhlY1N5bmMoJ3ppZyB2ZXJzaW9uJyk7XG4gICAgICAgICAgICAgICAgICAgIHVzZVppZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnVzZVppZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ291bGQgbm90IGZpbmQgJHtjaGFsay5ncmVlbignemlnJyl9IG9uIHRoZSBQQVRIYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhgQ291bGQgbm90IGZpbmQgJHtjaGFsay5ncmVlbignemlnJyl9IG9uIHRoZSBQQVRILCBmYWxsYmFjayB0byBub3JtYWwgbGlua2VyYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXNlWmlnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgemlnQUJJVmVyc2lvbiA9IChfYyA9IHRoaXMuemlnQUJJVmVyc2lvbikgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogKGlzQ3Jvc3NGb3JMaW51eCAmJiB0cmlwbGUuYWJpID09PSAnZ251JyA/IERFRkFVTFRfR0xJQkNfVEFSR0VUIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkWmlnVGFyZ2V0ID0gWklHX1BMQVRGT1JNX1RBUkdFVF9NQVBbdHJpcGxlLnJhd107XG4gICAgICAgICAgICAgICAgY29uc3QgemlnVGFyZ2V0ID0gYCR7bWFwcGVkWmlnVGFyZ2V0fSR7emlnQUJJVmVyc2lvbiA/IGAuJHt6aWdBQklWZXJzaW9ufWAgOiAnJ31gO1xuICAgICAgICAgICAgICAgIGRlYnVnKGBVc2luZyBaaWcgd2l0aCB0YXJnZXQgJHtjaGFsay5ncmVlbih6aWdUYXJnZXQpfWApO1xuICAgICAgICAgICAgICAgIGlmICghbWFwcGVkWmlnVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0cmlwbGUucmF3fSBjYW4gbm90IGJlIGNyb3NzIGNvbXBpbGVkIGJ5IHppZ2ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwYXRocyA9IGVudlBhdGhzKCduYXBpLXJzJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2hlbGxGaWxlRXh0ID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICdjbWQnIDogJ3NoJztcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5rZXJXcmFwcGVyU2hlbGwgPSBqb2luKHBhdGhzLmNhY2hlLCBgemlnLWxpbmtlci0ke3RyaXBsZS5yYXd9LiR7c2hlbGxGaWxlRXh0fWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IENDV3JhcHBlclNoZWxsID0gam9pbihwYXRocy5jYWNoZSwgYHppZy1jYy0ke3RyaXBsZS5yYXd9LiR7c2hlbGxGaWxlRXh0fWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IENYWFdyYXBwZXJTaGVsbCA9IGpvaW4ocGF0aHMuY2FjaGUsIGB6aWctY3h4LSR7dHJpcGxlLnJhd30uJHtzaGVsbEZpbGVFeHR9YCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlua2VyV3JhcHBlciA9IGpvaW4ocGF0aHMuY2FjaGUsIGB6aWctY2MtJHt0cmlwbGUucmF3fS5qc2ApO1xuICAgICAgICAgICAgICAgIG1rZGlyU3luYyhwYXRocy5jYWNoZSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9yd2FyZEFyZ3MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ1wiJSpcIicgOiAnJEAnO1xuICAgICAgICAgICAgICAgIGlmICh0cmlwbGUuYXJjaCA9PT0gJ2FybScpIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgcGF0Y2hBcm1GZWF0dXJlc0hGb3JBcm1UYXJnZXRzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHlpZWxkIHdyaXRlRmlsZUFzeW5jKGxpbmtlcldyYXBwZXJTaGVsbCwgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJ1xuICAgICAgICAgICAgICAgICAgICA/IGBASUYgRVhJU1QgXCIlfmRwMFxcXFxub2RlLmV4ZVwiIChcbiAgXCIlfmRwMFxcXFxub2RlLmV4ZVwiIFwiJHtsaW5rZXJXcmFwcGVyfVwiICUqXG4pIEVMU0UgKFxuICBAU0VUTE9DQUxcbiAgQFNFVCBQQVRIRVhUPSVQQVRIRVhUOjsuSlM7PTslXG4gIG5vZGUgXCIke2xpbmtlcldyYXBwZXJ9XCIgJSpcbilgXG4gICAgICAgICAgICAgICAgICAgIDogYCR7U0hFQkFOR19TSH1ub2RlICR7bGlua2VyV3JhcHBlcn0gJHtmb3J3YXJkQXJnc31gLCB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGU6ICc3NzcnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHlpZWxkIHdyaXRlRmlsZUFzeW5jKENDV3JhcHBlclNoZWxsLCBgJHtTSEVCQU5HX1NIfW5vZGUgJHtsaW5rZXJXcmFwcGVyfSBjYyAke2ZvcndhcmRBcmdzfWAsIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogJzc3NycsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgeWllbGQgd3JpdGVGaWxlQXN5bmMoQ1hYV3JhcHBlclNoZWxsLCBgJHtTSEVCQU5HX1NIfW5vZGUgJHtsaW5rZXJXcmFwcGVyfSBjKysgJHtmb3J3YXJkQXJnc31gLCB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGU6ICc3NzcnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHlpZWxkIHdyaXRlRmlsZUFzeW5jKGxpbmtlcldyYXBwZXIsIGAke1NIRUJBTkdfTk9ERX1jb25zdHt3cml0ZUZpbGVTeW5jfSA9IHJlcXVpcmUoJ2ZzJylcXG4ke3Byb2Nlc3NaaWdMaW5rZXJBcmdzLnRvU3RyaW5nKCl9XFxuY29uc3Qge3N0YXR1c30gPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuc3Bhd25TeW5jKCd6aWcnLCBbcHJvY2Vzcy5hcmd2WzJdID09PSBcImMrK1wiIHx8IHByb2Nlc3MuYXJndlsyXSA9PT0gXCJjY1wiID8gXCJcIiA6IFwiY2NcIiwgLi4ucHJvY2Vzc1ppZ0xpbmtlckFyZ3MoJyR7dHJpcGxlLnJhd30nLCBwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpLCAnLXRhcmdldCcsICcke3ppZ1RhcmdldH0nXSwgeyBzdGRpbzogJ2luaGVyaXQnLCBzaGVsbDogdHJ1ZSB9KVxcbndyaXRlRmlsZVN5bmMoJyR7bGlua2VyV3JhcHBlci5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKX0uYXJncy5sb2cnLCBwcm9jZXNzWmlnTGlua2VyQXJncygnJHt0cmlwbGUucmF3fScsIHByb2Nlc3MuYXJndi5zbGljZSgyKSkuam9pbignICcpKVxcblxcbnByb2Nlc3MuZXhpdChzdGF0dXMgfHwgMClcXG5gLCB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGU6ICc3NzcnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy56aWdMaW5rT25seSkge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGFkZGl0aW9uYWxFbnYsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIENDOiBDQ1dyYXBwZXJTaGVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIENYWDogQ1hYV3JhcHBlclNoZWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgVEFSR0VUX0NDOiBDQ1dyYXBwZXJTaGVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFRBUkdFVF9DWFg6IENYWFdyYXBwZXJTaGVsbCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxFbnZbYENBUkdPX1RBUkdFVF8ke2VudlRhcmdldH1fTElOS0VSYF0gPSBsaW5rZXJXcmFwcGVyU2hlbGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWJ1ZyhgUGxhdGZvcm06ICR7SlNPTi5zdHJpbmdpZnkodHJpcGxlLCBudWxsLCAyKX1gKTtcbiAgICAgICAgICAgIGlmICh0cmlwbGUucGxhdGZvcm0gPT09ICdhbmRyb2lkJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgQU5EUk9JRF9OREtfTEFURVNUX0hPTUUgfSA9IHByb2Nlc3MuZW52O1xuICAgICAgICAgICAgICAgIGlmICghQU5EUk9JRF9OREtfTEFURVNUX0hPTUUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKGAke2NoYWxrLnllbGxvdygnQU5EUk9JRF9OREtfTEFURVNUX0hPTUUnKX0gZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbWlzc2luZ2ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRBcmNoID0gdHJpcGxlLmFyY2ggPT09ICdhcm0nID8gJ2FybXY3YScgOiAnYWFyY2g2NCc7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0UGxhdGZvcm0gPSB0cmlwbGUuYXJjaCA9PT0gJ2FybScgPyAnYW5kcm9pZGVhYmkyNCcgOiAnYW5kcm9pZDI0JztcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGFkZGl0aW9uYWxFbnYsIHtcbiAgICAgICAgICAgICAgICAgICAgQ0FSR09fVEFSR0VUX0FBUkNINjRfTElOVVhfQU5EUk9JRF9MSU5LRVI6IGAke0FORFJPSURfTkRLX0xBVEVTVF9IT01FfS90b29sY2hhaW5zL2xsdm0vcHJlYnVpbHQvbGludXgteDg2XzY0L2Jpbi8ke3RhcmdldEFyY2h9LWxpbnV4LWFuZHJvaWQyNC1jbGFuZ2AsXG4gICAgICAgICAgICAgICAgICAgIENBUkdPX1RBUkdFVF9BUk1WN19MSU5VWF9BTkRST0lERUFCSV9MSU5LRVI6IGAke0FORFJPSURfTkRLX0xBVEVTVF9IT01FfS90b29sY2hhaW5zL2xsdm0vcHJlYnVpbHQvbGludXgteDg2XzY0L2Jpbi8ke3RhcmdldEFyY2h9LWxpbnV4LWFuZHJvaWRlYWJpMjQtY2xhbmdgLFxuICAgICAgICAgICAgICAgICAgICBDQzogYCR7QU5EUk9JRF9OREtfTEFURVNUX0hPTUV9L3Rvb2xjaGFpbnMvbGx2bS9wcmVidWlsdC9saW51eC14ODZfNjQvYmluLyR7dGFyZ2V0QXJjaH0tbGludXgtJHt0YXJnZXRQbGF0Zm9ybX0tY2xhbmdgLFxuICAgICAgICAgICAgICAgICAgICBDWFg6IGAke0FORFJPSURfTkRLX0xBVEVTVF9IT01FfS90b29sY2hhaW5zL2xsdm0vcHJlYnVpbHQvbGludXgteDg2XzY0L2Jpbi8ke3RhcmdldEFyY2h9LWxpbnV4LSR7dGFyZ2V0UGxhdGZvcm19LWNsYW5nKytgLFxuICAgICAgICAgICAgICAgICAgICBBUjogYCR7QU5EUk9JRF9OREtfTEFURVNUX0hPTUV9L3Rvb2xjaGFpbnMvbGx2bS9wcmVidWlsdC9saW51eC14ODZfNjQvYmluL2xsdm0tYXJgLFxuICAgICAgICAgICAgICAgICAgICBSQU5MSUI6IGAke0FORFJPSURfTkRLX0xBVEVTVF9IT01FfS90b29sY2hhaW5zL2xsdm0vcHJlYnVpbHQvbGludXgteDg2XzY0L2Jpbi9sbHZtLXJhbmxpYmAsXG4gICAgICAgICAgICAgICAgICAgIEFORFJPSURfTkRLOiBBTkRST0lEX05ES19MQVRFU1RfSE9NRSxcbiAgICAgICAgICAgICAgICAgICAgUEFUSDogYCR7QU5EUk9JRF9OREtfTEFURVNUX0hPTUV9L3Rvb2xjaGFpbnMvbGx2bS9wcmVidWlsdC9saW51eC14ODZfNjQvYmluOiR7cHJvY2Vzcy5lbnYuUEFUSH1gLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeyBiaW5hcnlOYW1lLCBwYWNrYWdlTmFtZSwgdHNDb25zdEVudW06IHRzQ29uc3RFbnVtRnJvbUNvbmZpZywgfSA9IGdldE5hcGlDb25maWcodGhpcy5jb25maWdGaWxlTmFtZSk7XG4gICAgICAgICAgICBjb25zdCB0c0NvbnN0RW51bSA9IChfZSA9IChfZCA9IHRoaXMuY29uc3RFbnVtKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiB0c0NvbnN0RW51bUZyb21Db25maWcpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IHRydWU7XG4gICAgICAgICAgICBpZiAodHJpcGxlLnBsYXRmb3JtID09PSAnd2FzaScpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbW5hcGlEaXIgPSByZXF1aXJlLnJlc29sdmUoJ2VtbmFwaScpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW5rRGlyID0gam9pbihlbW5hcGlEaXIsICcuLicsICdsaWInLCAnd2FzbTMyLXdhc2knKTtcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEVudlsnRU1OQVBJX0xJTktfRElSJ10gPSBsaW5rRGlyO1xuICAgICAgICAgICAgICAgICAgICBydXN0ZmxhZ3MucHVzaCgnLVogd2FzaS1leGVjLW1vZGVsPXJlYWN0b3InKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBlbW5hcGksIHBsZWFzZSBpbnN0YWxsIGVtbmFwaWApO1xuICAgICAgICAgICAgICAgICAgICBlcnIuY2F1c2UgPSBlO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJ1c3RmbGFncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYWRkaXRpb25hbEVudlsnUlVTVEZMQUdTJ10gPSBydXN0ZmxhZ3Muam9pbignICcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGNhcmdvQXJ0aWZhY3ROYW1lID0gdGhpcy5jYXJnb05hbWU7XG4gICAgICAgICAgICBpZiAoIWNhcmdvQXJ0aWZhY3ROYW1lKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYmluKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvQXJ0aWZhY3ROYW1lID0gY2FyZ29QYWNrYWdlTmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvQXJ0aWZhY3ROYW1lID0gY2FyZ29QYWNrYWdlTmFtZS5yZXBsYWNlKC8tL2csICdfJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5iaW4gJiZcbiAgICAgICAgICAgICAgICAgICAgIWNhcmdvUGFja2FnZS50YXJnZXRzLnNvbWUoKHRhcmdldCkgPT4gdGFyZ2V0LmNyYXRlX3R5cGVzLmluY2x1ZGVzKCdjZHlsaWInKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTWlzc2luZyAke2NoYWxrLmdyZWVuKCdjcmF0ZS10eXBlID0gW1wiY2R5bGliXCJdJyl9IGluICR7Y2hhbGsuZ3JlZW4oJ1tsaWJdJyl9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuYmluKSB7XG4gICAgICAgICAgICAgICAgZGVidWcoYEJpbmFyeSBuYW1lOiAke2NoYWxrLmdyZWVuQnJpZ2h0KGNhcmdvQXJ0aWZhY3ROYW1lKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlYnVnKGBEeWxpYiBuYW1lOiAke2NoYWxrLmdyZWVuQnJpZ2h0KGNhcmdvQXJ0aWZhY3ROYW1lKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGN3ZFNoYSA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpXG4gICAgICAgICAgICAgICAgLnVwZGF0ZShwcm9jZXNzLmN3ZCgpKVxuICAgICAgICAgICAgICAgIC51cGRhdGUodmVyc2lvbilcbiAgICAgICAgICAgICAgICAuZGlnZXN0KCdoZXgnKVxuICAgICAgICAgICAgICAgIC5zdWJzdHJpbmcoMCwgOCk7XG4gICAgICAgICAgICBjb25zdCBpbnRlcm1lZGlhdGVUeXBlRmlsZSA9IGpvaW4odG1wZGlyKCksIGAke2NhcmdvQXJ0aWZhY3ROYW1lfS0ke2N3ZFNoYX0ubmFwaV90eXBlX2RlZi50bXBgKTtcbiAgICAgICAgICAgIGNvbnN0IGludGVybWVkaWF0ZVdhc2lSZWdpc3RlckZpbGUgPSBqb2luKHRtcGRpcigpLCBgJHtjYXJnb0FydGlmYWN0TmFtZX0tJHtjd2RTaGF9Lm5hcGlfd2FzaV9yZWdpc3Rlci50bXBgKTtcbiAgICAgICAgICAgIGRlYnVnKGBpbnRlcm1lZGlhdGUgdHlwZSBkZWYgZmlsZTogJHtpbnRlcm1lZGlhdGVUeXBlRmlsZX1gKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRFbnYgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJvY2Vzcy5lbnYpLCBhZGRpdGlvbmFsRW52KSwgeyBUWVBFX0RFRl9UTVBfUEFUSDogaW50ZXJtZWRpYXRlVHlwZUZpbGUsIFdBU0lfUkVHSVNURVJfVE1QX1BBVEg6IGludGVybWVkaWF0ZVdhc2lSZWdpc3RlckZpbGUsIENBUkdPX0NGR19OQVBJX1JTX0NMSV9WRVJTSU9OOiB2ZXJzaW9uIH0pO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBleGVjU3luYyhjYXJnb0NvbW1hbmQsIHtcbiAgICAgICAgICAgICAgICAgICAgZW52OiBjb21tYW5kRW52LFxuICAgICAgICAgICAgICAgICAgICBzdGRpbzogJ2luaGVyaXQnLFxuICAgICAgICAgICAgICAgICAgICBjd2QsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmIChjYXJnbyA9PT0gJ2NhcmdvLXh3aW4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgWW91IGFyZSBjcm9zcyBjb21waWxpbmcgJHtjaGFsay51bmRlcmxpbmUodHJpcGxlLnJhdyl9IHRhcmdldCBvbiAke2NoYWxrLmdyZWVuKHByb2Nlc3MucGxhdGZvcm0pfSBob3N0YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzQ3Jvc3NGb3JMaW51eCB8fCBpc0Nyb3NzRm9yTWFjT1MpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBZb3UgYXJlIGNyb3NzIGNvbXBpbGluZyAke2NoYWxrLnVuZGVybGluZSh0cmlwbGUucmF3KX0gb24gJHtjaGFsay5ncmVlbihwcm9jZXNzLnBsYXRmb3JtKX0gaG9zdGApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGxhdGZvcm0gPSB0cmlwbGUucGxhdGZvcm07XG4gICAgICAgICAgICBsZXQgbGliRXh0ID0gJyc7XG4gICAgICAgICAgICBkZWJ1ZyhgUGxhdGZvcm06ICR7Y2hhbGsuZ3JlZW5CcmlnaHQocGxhdGZvcm0pfWApO1xuICAgICAgICAgICAgLy8gUGxhdGZvcm0gYmFzZWQgbWFzc2FnaW5nIGZvciBidWlsZCBjb21tYW5kc1xuICAgICAgICAgICAgaWYgKCF0aGlzLmJpbikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGFyd2luJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpYkV4dCA9ICcuZHlsaWInO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ29BcnRpZmFjdE5hbWUgPSBgbGliJHtjYXJnb0FydGlmYWN0TmFtZX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3dpbjMyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpYkV4dCA9ICcuZGxsJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdsaW51eCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ZyZWVic2QnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdvcGVuYnNkJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYW5kcm9pZCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N1bm9zJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcmdvQXJ0aWZhY3ROYW1lID0gYGxpYiR7Y2FyZ29BcnRpZmFjdE5hbWV9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpYkV4dCA9ICcuc28nO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPcGVyYXRpbmcgc3lzdGVtIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIG9yIHJlY29nbml6ZWQgYnkgdGhlIGJ1aWxkIHNjcmlwdCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRhcmdldFJvb3REaXIgPSBcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLW51bGxpc2gtY29hbGVzY2luZ1xuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuQ0FSR09fVEFSR0VUX0RJUiB8fFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLW51bGxpc2gtY29hbGVzY2luZ1xuICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52LkNBUkdPX0JVSUxEX1RBUkdFVF9ESVIgfHxcbiAgICAgICAgICAgICAgICAoeWllbGQgZmluZFVwKGN3ZCkpO1xuICAgICAgICAgICAgaWYgKCF0YXJnZXRSb290RGlyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdGFyZ2V0IGRpciBmb3VuZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0RGlyID0gam9pbih0aGlzLnRhcmdldFRyaXBsZURpciwgKF9mID0gdGhpcy5wcm9maWxlKSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiAodGhpcy5pc1JlbGVhc2UgPyAncmVsZWFzZScgOiAnZGVidWcnKSk7XG4gICAgICAgICAgICBjb25zdCBwbGF0Zm9ybU5hbWUgPSB0aGlzLmFwcGVuZFBsYXRmb3JtVG9GaWxlbmFtZVxuICAgICAgICAgICAgICAgID8gYC4ke3RyaXBsZS5wbGF0Zm9ybUFyY2hBQkl9YFxuICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICBkZWJ1ZyhgUGxhdGZvcm0gbmFtZTogJHtwbGF0Zm9ybU5hbWUgfHwgY2hhbGsuZ3JlZW4oJ1tFbXB0eV0nKX1gKTtcbiAgICAgICAgICAgIGNvbnN0IGRpc3RGaWxlTmFtZSA9IHRoaXMuYmluXG4gICAgICAgICAgICAgICAgPyBjYXJnb0FydGlmYWN0TmFtZVxuICAgICAgICAgICAgICAgIDogYCR7YmluYXJ5TmFtZX0ke3BsYXRmb3JtTmFtZX0ubm9kZWA7XG4gICAgICAgICAgICBjb25zdCBkaXN0TW9kdWxlUGF0aCA9IGpvaW4oKF9nID0gdGhpcy5kZXN0RGlyKSAhPT0gbnVsbCAmJiBfZyAhPT0gdm9pZCAwID8gX2cgOiAnLicsIGRpc3RGaWxlTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWREaXN0ID0gcGFyc2UoZGlzdE1vZHVsZVBhdGgpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZERpc3QuZGlyICYmICFleGlzdHNTeW5jKHBhcnNlZERpc3QuZGlyKSkge1xuICAgICAgICAgICAgICAgIHlpZWxkIG1rZGlyQXN5bmMocGFyc2VkRGlzdC5kaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihjaGFsay5iZ1llbGxvd0JyaWdodChgQ3JlYXRlIGRpciBbJHtwYXJzZWREaXN0LmRpcn1dIGZhaWxlZCwgcmVhc29uOiAke2UubWVzc2FnZX1gKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VQYXRoID0gam9pbih0YXJnZXRSb290RGlyLCB0YXJnZXREaXIsIGAke2NhcmdvQXJ0aWZhY3ROYW1lfSR7bGliRXh0fWApO1xuICAgICAgICAgICAgaWYgKGV4aXN0c1N5bmMoZGlzdE1vZHVsZVBhdGgpKSB7XG4gICAgICAgICAgICAgICAgZGVidWcoYHJlbW92ZSBvbGQgYmluYXJ5IFske2NoYWxrLnllbGxvd0JyaWdodChkaXN0TW9kdWxlUGF0aCl9XWApO1xuICAgICAgICAgICAgICAgIHlpZWxkIHVubGlua0FzeW5jKGRpc3RNb2R1bGVQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlYnVnKGBXcml0ZSBiaW5hcnkgY29udGVudCB0byBbJHtjaGFsay55ZWxsb3dCcmlnaHQoZGlzdE1vZHVsZVBhdGgpfV1gKTtcbiAgICAgICAgICAgIHlpZWxkIGNvcHlGaWxlQXN5bmMoc291cmNlUGF0aCwgZGlzdE1vZHVsZVBhdGgpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmJpbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGR0c0ZpbGVQYXRoID0gam9pbihwcm9jZXNzLmN3ZCgpLCAoX2ggPSB0aGlzLmRlc3REaXIpICE9PSBudWxsICYmIF9oICE9PSB2b2lkIDAgPyBfaCA6ICcuJywgKF9qID0gdGhpcy5kdHMpICE9PSBudWxsICYmIF9qICE9PSB2b2lkIDAgPyBfaiA6ICdpbmRleC5kLnRzJyk7XG4gICAgICAgICAgICAgICAgY29uc3QganNCaW5kaW5nRmlsZVBhdGggPSB0aGlzLmpzQmluZGluZyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmpzQmluZGluZyAhPT0gJ2ZhbHNlJyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZFBsYXRmb3JtVG9GaWxlbmFtZVxuICAgICAgICAgICAgICAgICAgICA/IGpvaW4ocHJvY2Vzcy5jd2QoKSwgKF9rID0gdGhpcy5kZXN0RGlyKSAhPT0gbnVsbCAmJiBfayAhPT0gdm9pZCAwID8gX2sgOiAnLicsIHRoaXMuanNCaW5kaW5nKVxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3QgaWRlbnRzID0geWllbGQgcHJvY2Vzc0ludGVybWVkaWF0ZVR5cGVGaWxlKGludGVybWVkaWF0ZVR5cGVGaWxlLCBkdHNGaWxlUGF0aCwgdGhpcy5ub0R0c0hlYWRlciwgdHNDb25zdEVudW0pO1xuICAgICAgICAgICAgICAgIHlpZWxkIHdyaXRlSnNCaW5kaW5nKGJpbmFyeU5hbWUsIChfbCA9IHRoaXMuanNQYWNrYWdlTmFtZSkgIT09IG51bGwgJiYgX2wgIT09IHZvaWQgMCA/IF9sIDogcGFja2FnZU5hbWUsIGpzQmluZGluZ0ZpbGVQYXRoLCBpZGVudHMpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBpcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzQmluZGluZ0ZpbGVQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwaXBlQ29tbWFuZCA9IGAke3RoaXMucGlwZX0gJHtqc0JpbmRpbmdGaWxlUGF0aH1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKGBSdW4gJHtjaGFsay5ncmVlbihwaXBlQ29tbWFuZCl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNTeW5jKHBpcGVDb21tYW5kLCB7IHN0ZGlvOiAnaW5oZXJpdCcsIGVudjogY29tbWFuZEVudiB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGNoYWxrLmJnWWVsbG93QnJpZ2h0KCdQaXBlIHRoZSBqcyBiaW5kaW5nIGZpbGUgdG8gY29tbWFuZCBmYWlsZWQnKSwgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGlwZUNvbW1hbmQgPSBgJHt0aGlzLnBpcGV9ICR7ZHRzRmlsZVBhdGh9YDtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKGBSdW4gJHtjaGFsay5ncmVlbihwaXBlQ29tbWFuZCl9YCk7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjU3luYyhwaXBlQ29tbWFuZCwgeyBzdGRpbzogJ2luaGVyaXQnLCBlbnY6IGNvbW1hbmRFbnYgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihjaGFsay5iZ1llbGxvd0JyaWdodCgnUGlwZSB0aGUgZHRzIGZpbGUgdG8gY29tbWFuZCBmYWlsZWQnKSwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbkJ1aWxkQ29tbWFuZC51c2FnZSA9IENvbW1hbmQuVXNhZ2Uoe1xuICAgIGRlc2NyaXB0aW9uOiAnQnVpbGQgYW5kIGNvcHkgbmF0aXZlIG1vZHVsZSBpbnRvIHNwZWNpZmllZCBkaXInLFxufSk7XG5CdWlsZENvbW1hbmQucGF0aHMgPSBbWydidWlsZCddXTtcbmZ1bmN0aW9uIGZpbmRVcChkaXIgPSBwcm9jZXNzLmN3ZCgpKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZGlzdCA9IGpvaW4oZGlyLCAndGFyZ2V0Jyk7XG4gICAgICAgIGlmIChleGlzdHNTeW5jKGRpc3QpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGlzdDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXJzID0gZGlyLnNwbGl0KHNlcCk7XG4gICAgICAgIGlmIChkaXJzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGRpcnMucG9wKCk7XG4gICAgICAgIHJldHVybiBmaW5kVXAoZGlycy5qb2luKHNlcCkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gcHJvY2Vzc0ludGVybWVkaWF0ZVR5cGVGaWxlKHNvdXJjZSwgdGFyZ2V0LCBub0R0c0hlYWRlciwgdHNDb25zdEVudW0pIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBpZGVudHMgPSBbXTtcbiAgICAgICAgaWYgKCFleGlzdHNTeW5jKHNvdXJjZSkpIHtcbiAgICAgICAgICAgIGRlYnVnKGBkbyBub3QgZmluZCB0bXAgdHlwZSBmaWxlLiBza2lwIHR5cGUgZ2VuZXJhdGlvbmApO1xuICAgICAgICAgICAgcmV0dXJuIGlkZW50cztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0bXBGaWxlID0geWllbGQgcmVhZEZpbGVBc3luYyhzb3VyY2UsICd1dGY4Jyk7XG4gICAgICAgIGNvbnN0IGxpbmVzID0gdG1wRmlsZVxuICAgICAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAgICAgLm1hcCgobGluZSkgPT4gbGluZS50cmltKCkpXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAubWFwKChsaW5lKSA9PiB7XG4gICAgICAgICAgICAvLyBjb21wYXRpYmxlIHdpdGggb2xkIHZlcnNpb25cbiAgICAgICAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoJ3snKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW19jcmF0ZU5hbWUsIC4uLnJlc3RdID0gbGluZS5zcGxpdCgnOicpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN0LmpvaW4oJzonKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghbGluZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gaWRlbnRzO1xuICAgICAgICB9XG4gICAgICAgIC8vIERlZHVwbGljYXRlIGxpbmVzLCB0byBhY2NvdW50IGZvciBtYWNyb3MgYmVpbmcgcG9zc2libHkgZXZhbHVhdGVkIG1vcmUgdGhhbiBvbmNlOlxuICAgICAgICBjb25zdCB1bmlxdWVMaW5lcyA9IFsuLi5uZXcgU2V0KGxpbmVzKV07XG4gICAgICAgIGNvbnN0IGFsbERlZnMgPSB1bmlxdWVMaW5lcy5tYXAoKGxpbmUpID0+IEpTT04ucGFyc2UobGluZSkpO1xuICAgICAgICBmdW5jdGlvbiBjb252ZXJ0RGVmcyhkZWZzLCBuZXN0ZWQgPSBmYWxzZSkge1xuICAgICAgICAgICAgY29uc3QgY2xhc3NlcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIGNvbnN0IGltcGxzID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgbGV0IGR0cyA9ICcnO1xuICAgICAgICAgICAgY29uc3QgbmVzdCA9IG5lc3RlZCA/IDIgOiAwO1xuICAgICAgICAgICAgZGVmcy5mb3JFYWNoKChkZWYpID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGRlZi5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0cnVjdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5lc3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50cy5wdXNoKGRlZi5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMuc2V0KGRlZi5uYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxfbmFtZTogZGVmLm9yaWdpbmFsX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmOiBkZWYuZGVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzX2RvYzogZGVmLmpzX2RvYyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ltcGwnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RlZCA9IGltcGxzLmdldChkZWYubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbXBscy5zZXQoZGVmLm5hbWUsIGAke2V4aXN0ZWQgPyBleGlzdGVkICsgJ1xcbicgOiAnJ30ke2RlZi5qc19kb2N9JHtkZWYuZGVmfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ludGVyZmFjZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBkdHMgKz1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnRMaW5lcyhgJHtkZWYuanNfZG9jfWV4cG9ydCBpbnRlcmZhY2UgJHtkZWYubmFtZX0ge2AsIG5lc3QpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbic7XG4gICAgICAgICAgICAgICAgICAgICAgICBkdHMgKz0gaW5kZW50TGluZXMoZGVmLmRlZiwgbmVzdCArIDIpICsgJ1xcbic7XG4gICAgICAgICAgICAgICAgICAgICAgICBkdHMgKz0gaW5kZW50TGluZXMoYH1gLCBuZXN0KSArICdcXG4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VudW0nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudHMucHVzaChkZWYubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnVtUHJlZml4ID0gdHNDb25zdEVudW0gPyAnIGNvbnN0JyA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgZHRzICs9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50TGluZXMoYCR7ZGVmLmpzX2RvY31leHBvcnQke2VudW1QcmVmaXh9IGVudW0gJHtkZWYubmFtZX0ge2AsIG5lc3QpICsgJ1xcbic7XG4gICAgICAgICAgICAgICAgICAgICAgICBkdHMgKz0gaW5kZW50TGluZXMoZGVmLmRlZiwgbmVzdCArIDIpICsgJ1xcbic7XG4gICAgICAgICAgICAgICAgICAgICAgICBkdHMgKz0gaW5kZW50TGluZXMoYH1gLCBuZXN0KSArICdcXG4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5lc3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50cy5wdXNoKGRlZi5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGR0cyArPSBpbmRlbnRMaW5lcyhgJHtkZWYuanNfZG9jfSR7ZGVmLmRlZn1gLCBuZXN0KSArICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgeyBqc19kb2MsIGRlZiwgb3JpZ2luYWxfbmFtZSB9XSBvZiBjbGFzc2VzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGltcGxEZWYgPSBpbXBscy5nZXQobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsX25hbWUgJiYgbmFtZSAhPT0gb3JpZ2luYWxfbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBkdHMgKz0gaW5kZW50TGluZXMoYGV4cG9ydCB0eXBlICR7b3JpZ2luYWxfbmFtZX0gPSAke25hbWV9XFxuYCwgbmVzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1heWJlRGVjbGFyZSA9IG5lc3RlZCA/ICcgJyA6ICcgZGVjbGFyZSAnO1xuICAgICAgICAgICAgICAgIGR0cyArPSBpbmRlbnRMaW5lcyhgJHtqc19kb2N9ZXhwb3J0JHttYXliZURlY2xhcmV9Y2xhc3MgJHtuYW1lfSB7YCwgbmVzdCk7XG4gICAgICAgICAgICAgICAgaWYgKGRlZikge1xuICAgICAgICAgICAgICAgICAgICBkdHMgKz0gJ1xcbicgKyBpbmRlbnRMaW5lcyhkZWYsIG5lc3QgKyAyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGltcGxEZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgZHRzICs9ICdcXG4nICsgaW5kZW50TGluZXMoaW1wbERlZiwgbmVzdCArIDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGVmIHx8IGltcGxEZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgZHRzICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZHRzICs9IGAgYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZHRzICs9IGluZGVudExpbmVzKGB9YCwgbmVzdCkgKyAnXFxuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkdHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9wTGV2ZWxEZWYgPSBjb252ZXJ0RGVmcyhhbGxEZWZzLmZpbHRlcigoZGVmKSA9PiAhZGVmLmpzX21vZCkpO1xuICAgICAgICBjb25zdCBuYW1lc3BhY2VEZWZzID0gT2JqZWN0LmVudHJpZXMoZ3JvdXBCeShhbGxEZWZzLmZpbHRlcigoZGVmKSA9PiBkZWYuanNfbW9kKSwgJ2pzX21vZCcpKS5yZWR1Y2UoKGFjYywgW21vZCwgZGVmc10pID0+IHtcbiAgICAgICAgICAgIGlkZW50cy5wdXNoKG1vZCk7XG4gICAgICAgICAgICByZXR1cm4gKGFjYyArIGBleHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgJHttb2R9IHtcXG4ke2NvbnZlcnREZWZzKGRlZnMsIHRydWUpfX1cXG5gKTtcbiAgICAgICAgfSwgJycpO1xuICAgICAgICBjb25zdCBkdHNIZWFkZXIgPSBub0R0c0hlYWRlclxuICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgOiBgLyogdHNsaW50OmRpc2FibGUgKi9cbi8qIGVzbGludC1kaXNhYmxlICovXG5cbi8qIGF1dG8tZ2VuZXJhdGVkIGJ5IE5BUEktUlMgKi9cXG5cbmA7XG4gICAgICAgIGNvbnN0IGV4dGVybmFsRGVmID0gdG9wTGV2ZWxEZWYuaW5kZXhPZignRXh0ZXJuYWxPYmplY3Q8JykgPiAtMSB8fFxuICAgICAgICAgICAgbmFtZXNwYWNlRGVmcy5pbmRleE9mKCdFeHRlcm5hbE9iamVjdDwnKSA+IC0xXG4gICAgICAgICAgICA/IGBleHBvcnQgZGVjbGFyZSBjbGFzcyBFeHRlcm5hbE9iamVjdDxUPiB7XG4gIHJlYWRvbmx5ICcnOiB7XG4gICAgcmVhZG9ubHkgJyc6IHVuaXF1ZSBzeW1ib2xcbiAgICBbSzogc3ltYm9sXTogVFxuICB9XG59XFxuYFxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgeWllbGQgd3JpdGVGaWxlQXN5bmModGFyZ2V0LCBkdHNIZWFkZXIgKyBleHRlcm5hbERlZiArIHRvcExldmVsRGVmICsgbmFtZXNwYWNlRGVmcywgJ3V0ZjgnKTtcbiAgICAgICAgcmV0dXJuIGlkZW50cztcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGluZGVudExpbmVzKGlucHV0LCBzcGFjZXMpIHtcbiAgICByZXR1cm4gaW5wdXRcbiAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAubWFwKChsaW5lKSA9PiAnJy5wYWRFbmQoc3BhY2VzLCAnICcpICtcbiAgICAgICAgKGxpbmUuc3RhcnRzV2l0aCgnIConKSA/IGxpbmUudHJpbUVuZCgpIDogbGluZS50cmltKCkpKVxuICAgICAgICAuam9pbignXFxuJyk7XG59XG5mdW5jdGlvbiB3cml0ZUpzQmluZGluZyhsb2NhbE5hbWUsIHBhY2thZ2VOYW1lLCBkaXN0RmlsZU5hbWUsIGlkZW50cykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmIChkaXN0RmlsZU5hbWUgJiYgaWRlbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBjcmVhdGVKc0JpbmRpbmcobG9jYWxOYW1lLCBwYWNrYWdlTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBkZWNsYXJlQ29kZXMgPSBgY29uc3QgeyAke2lkZW50cy5qb2luKCcsICcpfSB9ID0gbmF0aXZlQmluZGluZ1xcbmA7XG4gICAgICAgICAgICBjb25zdCBleHBvcnRzQ29kZSA9IGlkZW50cy5yZWR1Y2UoKGFjYywgY3VyKSA9PiBgJHthY2N9XFxubW9kdWxlLmV4cG9ydHMuJHtjdXJ9ID0gJHtjdXJ9YCwgJycpO1xuICAgICAgICAgICAgeWllbGQgd3JpdGVGaWxlQXN5bmMoZGlzdEZpbGVOYW1lLCB0ZW1wbGF0ZSArIGRlY2xhcmVDb2RlcyArIGV4cG9ydHNDb2RlICsgJ1xcbicsICd1dGY4Jyk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHBhdGNoQXJtRmVhdHVyZXNIRm9yQXJtVGFyZ2V0cygpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgemlnRXhlUGF0aDtcbiAgICAgICAgbGV0IHppZ0xpYkRpcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHppZ0VudiA9IEpTT04ucGFyc2UoZXhlY1N5bmMoYHppZyBlbnZgLCB7IGVuY29kaW5nOiAndXRmOCcgfSkudHJpbSgpKTtcbiAgICAgICAgICAgIHppZ0V4ZVBhdGggPSB6aWdFbnZbJ3ppZ19leGUnXTtcbiAgICAgICAgICAgIHppZ0xpYkRpciA9IHppZ0VudlsnbGliX2RpciddO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBnZXQgemlnIGVudiBjb3JyZWN0bHksIHBsZWFzZSBlbnN1cmUgdGhlIHppZyBpcyBpbnN0YWxsZWQgY29ycmVjdGx5IG9uIHlvdXIgc3lzdGVtJyk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSB6aWdMaWJEaXJcbiAgICAgICAgICAgICAgICA/IGpvaW4oemlnTGliRGlyLCAnbGliYy9nbGliYy9zeXNkZXBzL2FybS9hcm0tZmVhdHVyZXMuaCcpXG4gICAgICAgICAgICAgICAgOiBqb2luKHppZ0V4ZVBhdGgsICcuLi9saWIvbGliYy9nbGliYy9zeXNkZXBzL2FybS9hcm0tZmVhdHVyZXMuaCcpO1xuICAgICAgICAgICAgaWYgKCFleGlzdHNTeW5jKHApKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgd3JpdGVGaWxlQXN5bmMocCwgQVJNX0ZFQVRVUkVTX0gsIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogMG82NDQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoRXJyb3IoYENhbm5vdCBwYXRjaCBhcm0tZmVhdHVyZXMuaCwgZXJyb3I6ICR7ZS5tZXNzYWdlIHx8IGV9LiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS96aWdsYW5nL3ppZy9pc3N1ZXMvMzI4N2ApKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnVpbGQuanMubWFwIiwidmFyIF9hO1xuaW1wb3J0IHsgX19hd2FpdGVyIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBta2RpclN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBDb21tYW5kLCBPcHRpb24gfSBmcm9tICdjbGlwYW5pb24nO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY29sb3JldHRlJztcbmltcG9ydCB7IGdldE5hcGlDb25maWcgfSBmcm9tICcuL2NvbnN0cyc7XG5pbXBvcnQgeyBkZWJ1Z0ZhY3RvcnkgfSBmcm9tICcuL2RlYnVnJztcbmltcG9ydCB7IHdyaXRlRmlsZUFzeW5jLCBwaWNrIH0gZnJvbSAnLi91dGlscyc7XG5jb25zdCBkZWJ1ZyA9IGRlYnVnRmFjdG9yeSgnY3JlYXRlLW5wbS1kaXInKTtcbmV4cG9ydCBjbGFzcyBDcmVhdGVOcG1EaXJDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudGFyZ2V0RGlyID0gT3B0aW9uLlN0cmluZygnLXQsLS10YXJnZXQnKTtcbiAgICAgICAgdGhpcy5jb25maWcgPSBPcHRpb24uU3RyaW5nKCctYywtLWNvbmZpZycsICdwYWNrYWdlLmpzb24nKTtcbiAgICB9XG4gICAgZXhlY3V0ZSgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHlpZWxkIF9hLmNyZWF0ZSh0aGlzLmNvbmZpZywgam9pbihwcm9jZXNzLmN3ZCgpLCB0aGlzLnRhcmdldERpciksIHByb2Nlc3MuY3dkKCkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5fYSA9IENyZWF0ZU5wbURpckNvbW1hbmQ7XG5DcmVhdGVOcG1EaXJDb21tYW5kLnVzYWdlID0gQ29tbWFuZC5Vc2FnZSh7XG4gICAgZGVzY3JpcHRpb246ICdDcmVhdGUgbnBtIHBhY2thZ2VzIGRpciBmb3IgcGxhdGZvcm1zJyxcbn0pO1xuQ3JlYXRlTnBtRGlyQ29tbWFuZC5wYXRocyA9IFtbJ2NyZWF0ZS1ucG0tZGlyJ11dO1xuQ3JlYXRlTnBtRGlyQ29tbWFuZC5jcmVhdGUgPSAoY29uZmlnLCB0YXJnZXREaXJQYXRoLCBjd2QpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgIGNvbnN0IHBrZ0pzb25EaXIgPSBjb25maWc7XG4gICAgZGVidWcoYFJlYWQgY29udGVudCBmcm9tIFske2NoYWxrLnllbGxvd0JyaWdodChwa2dKc29uRGlyKX1dYCk7XG4gICAgY29uc3QgeyBwbGF0Zm9ybXMsIHBhY2thZ2VOYW1lLCB2ZXJzaW9uLCBiaW5hcnlOYW1lLCBjb250ZW50IH0gPSBnZXROYXBpQ29uZmlnKHBrZ0pzb25EaXIsIGN3ZCk7XG4gICAgZm9yIChjb25zdCBwbGF0Zm9ybURldGFpbCBvZiBwbGF0Zm9ybXMpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGlyID0gam9pbih0YXJnZXREaXJQYXRoLCAnbnBtJywgYCR7cGxhdGZvcm1EZXRhaWwucGxhdGZvcm1BcmNoQUJJfWApO1xuICAgICAgICBta2RpclN5bmModGFyZ2V0RGlyLCB7XG4gICAgICAgICAgICByZWN1cnNpdmU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBiaW5hcnlGaWxlTmFtZSA9IGAke2JpbmFyeU5hbWV9LiR7cGxhdGZvcm1EZXRhaWwucGxhdGZvcm1BcmNoQUJJfS5ub2RlYDtcbiAgICAgICAgY29uc3QgdGFyZ2V0UGFja2FnZUpzb24gPSBqb2luKHRhcmdldERpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgICAgICBkZWJ1ZyhgV3JpdGUgZmlsZSBbJHtjaGFsay55ZWxsb3dCcmlnaHQodGFyZ2V0UGFja2FnZUpzb24pfV1gKTtcbiAgICAgICAgY29uc3QgcGFja2FnZUpzb24gPSBPYmplY3QuYXNzaWduKHsgbmFtZTogYCR7cGFja2FnZU5hbWV9LSR7cGxhdGZvcm1EZXRhaWwucGxhdGZvcm1BcmNoQUJJfWAsIHZlcnNpb24sIG9zOiBbcGxhdGZvcm1EZXRhaWwucGxhdGZvcm1dLCBjcHU6IHBsYXRmb3JtRGV0YWlsLmFyY2ggIT09ICd1bml2ZXJzYWwnXG4gICAgICAgICAgICAgICAgPyBbcGxhdGZvcm1EZXRhaWwuYXJjaF1cbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCwgbWFpbjogYmluYXJ5RmlsZU5hbWUsIGZpbGVzOiBbYmluYXJ5RmlsZU5hbWVdIH0sIHBpY2soY29udGVudCwgJ2Rlc2NyaXB0aW9uJywgJ2tleXdvcmRzJywgJ2F1dGhvcicsICdhdXRob3JzJywgJ2hvbWVwYWdlJywgJ2xpY2Vuc2UnLCAnZW5naW5lcycsICdwdWJsaXNoQ29uZmlnJywgJ3JlcG9zaXRvcnknLCAnYnVncycpKTtcbiAgICAgICAgLy8gT25seSB3b3JrcyB3aXRoIHlhcm4gMy4xK1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20veWFybnBrZy9iZXJyeS9wdWxsLzM5ODFcbiAgICAgICAgaWYgKHBsYXRmb3JtRGV0YWlsLmFiaSA9PT0gJ2dudScpIHtcbiAgICAgICAgICAgIHBhY2thZ2VKc29uLmxpYmMgPSBbJ2dsaWJjJ107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocGxhdGZvcm1EZXRhaWwuYWJpID09PSAnbXVzbCcpIHtcbiAgICAgICAgICAgIHBhY2thZ2VKc29uLmxpYmMgPSBbJ211c2wnXTtcbiAgICAgICAgfVxuICAgICAgICB5aWVsZCB3cml0ZUZpbGVBc3luYyh0YXJnZXRQYWNrYWdlSnNvbiwgSlNPTi5zdHJpbmdpZnkocGFja2FnZUpzb24sIG51bGwsIDIpKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0UmVhZG1lID0gam9pbih0YXJnZXREaXIsICdSRUFETUUubWQnKTtcbiAgICAgICAgZGVidWcoYFdyaXRlIHRhcmdldCBSRUFETUUubWQgWyR7Y2hhbGsueWVsbG93QnJpZ2h0KHRhcmdldFJlYWRtZSl9XWApO1xuICAgICAgICB5aWVsZCB3cml0ZUZpbGVBc3luYyh0YXJnZXRSZWFkbWUsIHJlYWRtZShwYWNrYWdlTmFtZSwgcGxhdGZvcm1EZXRhaWwpKTtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIHJlYWRtZShwYWNrYWdlTmFtZSwgcGxhdGZvcm1EZXRhaWwpIHtcbiAgICByZXR1cm4gYCMgXFxgJHtwYWNrYWdlTmFtZX0tJHtwbGF0Zm9ybURldGFpbC5wbGF0Zm9ybUFyY2hBQkl9XFxgXG5cblRoaXMgaXMgdGhlICoqJHtwbGF0Zm9ybURldGFpbC5yYXd9KiogYmluYXJ5IGZvciBcXGAke3BhY2thZ2VOYW1lfVxcYFxuYDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNyZWF0ZS1ucG0tZGlyLmpzLm1hcCIsImltcG9ydCB7IF9fYXdhaXRlciB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG4vKipcbiAqIEEgY29tbWFuZCB0aGF0IHByaW50cyB0aGUgdXNhZ2Ugb2YgYWxsIGNvbW1hbmRzLlxuICpcbiAqIFBhdGhzOiBgLWhgLCBgLS1oZWxwYFxuICovXG5leHBvcnQgY2xhc3MgSGVscENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBleGVjdXRlKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgeWllbGQgdGhpcy5jb250ZXh0LnN0ZG91dC53cml0ZSh0aGlzLmNsaS51c2FnZSgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuSGVscENvbW1hbmQucGF0aHMgPSBbW2AtaGBdLCBbYC0taGVscGBdXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhlbHAuanMubWFwIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3QgYW5zaUVzY2FwZXMgPSBtb2R1bGUuZXhwb3J0cztcbi8vIFRPRE86IHJlbW92ZSB0aGlzIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb25cbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBhbnNpRXNjYXBlcztcblxuY29uc3QgRVNDID0gJ1xcdTAwMUJbJztcbmNvbnN0IE9TQyA9ICdcXHUwMDFCXSc7XG5jb25zdCBCRUwgPSAnXFx1MDAwNyc7XG5jb25zdCBTRVAgPSAnOyc7XG5jb25zdCBpc1Rlcm1pbmFsQXBwID0gcHJvY2Vzcy5lbnYuVEVSTV9QUk9HUkFNID09PSAnQXBwbGVfVGVybWluYWwnO1xuXG5hbnNpRXNjYXBlcy5jdXJzb3JUbyA9ICh4LCB5KSA9PiB7XG5cdGlmICh0eXBlb2YgeCAhPT0gJ251bWJlcicpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgYHhgIGFyZ3VtZW50IGlzIHJlcXVpcmVkJyk7XG5cdH1cblxuXHRpZiAodHlwZW9mIHkgIT09ICdudW1iZXInKSB7XG5cdFx0cmV0dXJuIEVTQyArICh4ICsgMSkgKyAnRyc7XG5cdH1cblxuXHRyZXR1cm4gRVNDICsgKHkgKyAxKSArICc7JyArICh4ICsgMSkgKyAnSCc7XG59O1xuXG5hbnNpRXNjYXBlcy5jdXJzb3JNb3ZlID0gKHgsIHkpID0+IHtcblx0aWYgKHR5cGVvZiB4ICE9PSAnbnVtYmVyJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBgeGAgYXJndW1lbnQgaXMgcmVxdWlyZWQnKTtcblx0fVxuXG5cdGxldCByZXQgPSAnJztcblxuXHRpZiAoeCA8IDApIHtcblx0XHRyZXQgKz0gRVNDICsgKC14KSArICdEJztcblx0fSBlbHNlIGlmICh4ID4gMCkge1xuXHRcdHJldCArPSBFU0MgKyB4ICsgJ0MnO1xuXHR9XG5cblx0aWYgKHkgPCAwKSB7XG5cdFx0cmV0ICs9IEVTQyArICgteSkgKyAnQSc7XG5cdH0gZWxzZSBpZiAoeSA+IDApIHtcblx0XHRyZXQgKz0gRVNDICsgeSArICdCJztcblx0fVxuXG5cdHJldHVybiByZXQ7XG59O1xuXG5hbnNpRXNjYXBlcy5jdXJzb3JVcCA9IChjb3VudCA9IDEpID0+IEVTQyArIGNvdW50ICsgJ0EnO1xuYW5zaUVzY2FwZXMuY3Vyc29yRG93biA9IChjb3VudCA9IDEpID0+IEVTQyArIGNvdW50ICsgJ0InO1xuYW5zaUVzY2FwZXMuY3Vyc29yRm9yd2FyZCA9IChjb3VudCA9IDEpID0+IEVTQyArIGNvdW50ICsgJ0MnO1xuYW5zaUVzY2FwZXMuY3Vyc29yQmFja3dhcmQgPSAoY291bnQgPSAxKSA9PiBFU0MgKyBjb3VudCArICdEJztcblxuYW5zaUVzY2FwZXMuY3Vyc29yTGVmdCA9IEVTQyArICdHJztcbmFuc2lFc2NhcGVzLmN1cnNvclNhdmVQb3NpdGlvbiA9IGlzVGVybWluYWxBcHAgPyAnXFx1MDAxQjcnIDogRVNDICsgJ3MnO1xuYW5zaUVzY2FwZXMuY3Vyc29yUmVzdG9yZVBvc2l0aW9uID0gaXNUZXJtaW5hbEFwcCA/ICdcXHUwMDFCOCcgOiBFU0MgKyAndSc7XG5hbnNpRXNjYXBlcy5jdXJzb3JHZXRQb3NpdGlvbiA9IEVTQyArICc2bic7XG5hbnNpRXNjYXBlcy5jdXJzb3JOZXh0TGluZSA9IEVTQyArICdFJztcbmFuc2lFc2NhcGVzLmN1cnNvclByZXZMaW5lID0gRVNDICsgJ0YnO1xuYW5zaUVzY2FwZXMuY3Vyc29ySGlkZSA9IEVTQyArICc/MjVsJztcbmFuc2lFc2NhcGVzLmN1cnNvclNob3cgPSBFU0MgKyAnPzI1aCc7XG5cbmFuc2lFc2NhcGVzLmVyYXNlTGluZXMgPSBjb3VudCA9PiB7XG5cdGxldCBjbGVhciA9ICcnO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdGNsZWFyICs9IGFuc2lFc2NhcGVzLmVyYXNlTGluZSArIChpIDwgY291bnQgLSAxID8gYW5zaUVzY2FwZXMuY3Vyc29yVXAoKSA6ICcnKTtcblx0fVxuXG5cdGlmIChjb3VudCkge1xuXHRcdGNsZWFyICs9IGFuc2lFc2NhcGVzLmN1cnNvckxlZnQ7XG5cdH1cblxuXHRyZXR1cm4gY2xlYXI7XG59O1xuXG5hbnNpRXNjYXBlcy5lcmFzZUVuZExpbmUgPSBFU0MgKyAnSyc7XG5hbnNpRXNjYXBlcy5lcmFzZVN0YXJ0TGluZSA9IEVTQyArICcxSyc7XG5hbnNpRXNjYXBlcy5lcmFzZUxpbmUgPSBFU0MgKyAnMksnO1xuYW5zaUVzY2FwZXMuZXJhc2VEb3duID0gRVNDICsgJ0onO1xuYW5zaUVzY2FwZXMuZXJhc2VVcCA9IEVTQyArICcxSic7XG5hbnNpRXNjYXBlcy5lcmFzZVNjcmVlbiA9IEVTQyArICcySic7XG5hbnNpRXNjYXBlcy5zY3JvbGxVcCA9IEVTQyArICdTJztcbmFuc2lFc2NhcGVzLnNjcm9sbERvd24gPSBFU0MgKyAnVCc7XG5cbmFuc2lFc2NhcGVzLmNsZWFyU2NyZWVuID0gJ1xcdTAwMUJjJztcblxuYW5zaUVzY2FwZXMuY2xlYXJUZXJtaW5hbCA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgP1xuXHRgJHthbnNpRXNjYXBlcy5lcmFzZVNjcmVlbn0ke0VTQ30wZmAgOlxuXHQvLyAxLiBFcmFzZXMgdGhlIHNjcmVlbiAoT25seSBkb25lIGluIGNhc2UgYDJgIGlzIG5vdCBzdXBwb3J0ZWQpXG5cdC8vIDIuIEVyYXNlcyB0aGUgd2hvbGUgc2NyZWVuIGluY2x1ZGluZyBzY3JvbGxiYWNrIGJ1ZmZlclxuXHQvLyAzLiBNb3ZlcyBjdXJzb3IgdG8gdGhlIHRvcC1sZWZ0IHBvc2l0aW9uXG5cdC8vIE1vcmUgaW5mbzogaHR0cHM6Ly93d3cucmVhbC13b3JsZC1zeXN0ZW1zLmNvbS9kb2NzL0FOU0ljb2RlLmh0bWxcblx0YCR7YW5zaUVzY2FwZXMuZXJhc2VTY3JlZW59JHtFU0N9M0oke0VTQ31IYDtcblxuYW5zaUVzY2FwZXMuYmVlcCA9IEJFTDtcblxuYW5zaUVzY2FwZXMubGluayA9ICh0ZXh0LCB1cmwpID0+IHtcblx0cmV0dXJuIFtcblx0XHRPU0MsXG5cdFx0JzgnLFxuXHRcdFNFUCxcblx0XHRTRVAsXG5cdFx0dXJsLFxuXHRcdEJFTCxcblx0XHR0ZXh0LFxuXHRcdE9TQyxcblx0XHQnOCcsXG5cdFx0U0VQLFxuXHRcdFNFUCxcblx0XHRCRUxcblx0XS5qb2luKCcnKTtcbn07XG5cbmFuc2lFc2NhcGVzLmltYWdlID0gKGJ1ZmZlciwgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGxldCByZXQgPSBgJHtPU0N9MTMzNztGaWxlPWlubGluZT0xYDtcblxuXHRpZiAob3B0aW9ucy53aWR0aCkge1xuXHRcdHJldCArPSBgO3dpZHRoPSR7b3B0aW9ucy53aWR0aH1gO1xuXHR9XG5cblx0aWYgKG9wdGlvbnMuaGVpZ2h0KSB7XG5cdFx0cmV0ICs9IGA7aGVpZ2h0PSR7b3B0aW9ucy5oZWlnaHR9YDtcblx0fVxuXG5cdGlmIChvcHRpb25zLnByZXNlcnZlQXNwZWN0UmF0aW8gPT09IGZhbHNlKSB7XG5cdFx0cmV0ICs9ICc7cHJlc2VydmVBc3BlY3RSYXRpbz0wJztcblx0fVxuXG5cdHJldHVybiByZXQgKyAnOicgKyBidWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpICsgQkVMO1xufTtcblxuYW5zaUVzY2FwZXMuaVRlcm0gPSB7XG5cdHNldEN3ZDogKGN3ZCA9IHByb2Nlc3MuY3dkKCkpID0+IGAke09TQ301MDtDdXJyZW50RGlyPSR7Y3dkfSR7QkVMfWAsXG5cblx0YW5ub3RhdGlvbjogKG1lc3NhZ2UsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRcdGxldCByZXQgPSBgJHtPU0N9MTMzNztgO1xuXG5cdFx0Y29uc3QgaGFzWCA9IHR5cGVvZiBvcHRpb25zLnggIT09ICd1bmRlZmluZWQnO1xuXHRcdGNvbnN0IGhhc1kgPSB0eXBlb2Ygb3B0aW9ucy55ICE9PSAndW5kZWZpbmVkJztcblx0XHRpZiAoKGhhc1ggfHwgaGFzWSkgJiYgIShoYXNYICYmIGhhc1kgJiYgdHlwZW9mIG9wdGlvbnMubGVuZ3RoICE9PSAndW5kZWZpbmVkJykpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignYHhgLCBgeWAgYW5kIGBsZW5ndGhgIG11c3QgYmUgZGVmaW5lZCB3aGVuIGB4YCBvciBgeWAgaXMgZGVmaW5lZCcpO1xuXHRcdH1cblxuXHRcdG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoL1xcfC9nLCAnJyk7XG5cblx0XHRyZXQgKz0gb3B0aW9ucy5pc0hpZGRlbiA/ICdBZGRIaWRkZW5Bbm5vdGF0aW9uPScgOiAnQWRkQW5ub3RhdGlvbj0nO1xuXG5cdFx0aWYgKG9wdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0ICs9XG5cdFx0XHRcdFx0KGhhc1ggP1xuXHRcdFx0XHRcdFx0W21lc3NhZ2UsIG9wdGlvbnMubGVuZ3RoLCBvcHRpb25zLngsIG9wdGlvbnMueV0gOlxuXHRcdFx0XHRcdFx0W29wdGlvbnMubGVuZ3RoLCBtZXNzYWdlXSkuam9pbignfCcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXQgKz0gbWVzc2FnZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0ICsgQkVMO1xuXHR9XG59O1xuIiwiY29uc3QgdHR5ID0gcmVxdWlyZSgnbm9kZTp0dHknKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXdhcm5pbmctY29tbWVudHNcbi8vIFRPRE86IFVzZSBhIGJldHRlciBtZXRob2Qgd2hlbiBpdCdzIGFkZGVkIHRvIE5vZGUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzQwMjQwKVxuY29uc3QgaGFzQ29sb3JzID0gdHR5LldyaXRlU3RyZWFtLnByb3RvdHlwZS5oYXNDb2xvcnMoKTtcblxuY29uc3QgZm9ybWF0ID0gKG9wZW4sIGNsb3NlKSA9PiB7XG5cdGlmICghaGFzQ29sb3JzKSB7XG5cdFx0cmV0dXJuIGlucHV0ID0+IGlucHV0O1xuXHR9XG5cblx0Y29uc3Qgb3BlbkNvZGUgPSBgXFx1MDAxQlske29wZW59bWA7XG5cdGNvbnN0IGNsb3NlQ29kZSA9IGBcXHUwMDFCWyR7Y2xvc2V9bWA7XG5cblx0cmV0dXJuIGlucHV0ID0+IHtcblx0XHRjb25zdCBzdHJpbmcgPSBpbnB1dCArICcnOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWltcGxpY2l0LWNvZXJjaW9uIC0tIFRoaXMgaXMgZmFzdGVyLlxuXHRcdGxldCBpbmRleCA9IHN0cmluZy5pbmRleE9mKGNsb3NlQ29kZSk7XG5cblx0XHRpZiAoaW5kZXggPT09IC0xKSB7XG5cdFx0XHQvLyBOb3RlOiBJbnRlbnRpb25hbGx5IG5vdCB1c2luZyBzdHJpbmcgaW50ZXJwb2xhdGlvbiBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy5cblx0XHRcdHJldHVybiBvcGVuQ29kZSArIHN0cmluZyArIGNsb3NlQ29kZTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgbmVzdGVkIGNvbG9ycy5cblxuXHRcdC8vIFdlIGNvdWxkIGhhdmUgZG9uZSB0aGlzLCBidXQgaXQncyB0b28gc2xvdyAoYXMgb2YgTm9kZS5qcyAyMikuXG5cdFx0Ly8gcmV0dXJuIG9wZW5Db2RlICsgc3RyaW5nLnJlcGxhY2VBbGwoY2xvc2VDb2RlLCBvcGVuQ29kZSkgKyBjbG9zZUNvZGU7XG5cblx0XHRsZXQgcmVzdWx0ID0gb3BlbkNvZGU7XG5cdFx0bGV0IGxhc3RJbmRleCA9IDA7XG5cblx0XHR3aGlsZSAoaW5kZXggIT09IC0xKSB7XG5cdFx0XHRyZXN1bHQgKz0gc3RyaW5nLnNsaWNlKGxhc3RJbmRleCwgaW5kZXgpICsgb3BlbkNvZGU7XG5cdFx0XHRsYXN0SW5kZXggPSBpbmRleCArIGNsb3NlQ29kZS5sZW5ndGg7XG5cdFx0XHRpbmRleCA9IHN0cmluZy5pbmRleE9mKGNsb3NlQ29kZSwgbGFzdEluZGV4KTtcblx0XHR9XG5cblx0XHRyZXN1bHQgKz0gc3RyaW5nLnNsaWNlKGxhc3RJbmRleCkgKyBjbG9zZUNvZGU7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xufTtcblxuY29uc3QgY29sb3JzID0ge307XG5cbmNvbG9ycy5yZXNldCA9IGZvcm1hdCgwLCAwKTtcbmNvbG9ycy5ib2xkID0gZm9ybWF0KDEsIDIyKTtcbmNvbG9ycy5kaW0gPSBmb3JtYXQoMiwgMjIpO1xuY29sb3JzLml0YWxpYyA9IGZvcm1hdCgzLCAyMyk7XG5jb2xvcnMudW5kZXJsaW5lID0gZm9ybWF0KDQsIDI0KTtcbmNvbG9ycy5vdmVybGluZSA9IGZvcm1hdCg1MywgNTUpO1xuY29sb3JzLmludmVyc2UgPSBmb3JtYXQoNywgMjcpO1xuY29sb3JzLmhpZGRlbiA9IGZvcm1hdCg4LCAyOCk7XG5jb2xvcnMuc3RyaWtldGhyb3VnaCA9IGZvcm1hdCg5LCAyOSk7XG5cbmNvbG9ycy5ibGFjayA9IGZvcm1hdCgzMCwgMzkpO1xuY29sb3JzLnJlZCA9IGZvcm1hdCgzMSwgMzkpO1xuY29sb3JzLmdyZWVuID0gZm9ybWF0KDMyLCAzOSk7XG5jb2xvcnMueWVsbG93ID0gZm9ybWF0KDMzLCAzOSk7XG5jb2xvcnMuYmx1ZSA9IGZvcm1hdCgzNCwgMzkpO1xuY29sb3JzLm1hZ2VudGEgPSBmb3JtYXQoMzUsIDM5KTtcbmNvbG9ycy5jeWFuID0gZm9ybWF0KDM2LCAzOSk7XG5jb2xvcnMud2hpdGUgPSBmb3JtYXQoMzcsIDM5KTtcbmNvbG9ycy5ncmF5ID0gZm9ybWF0KDkwLCAzOSk7XG5cbmNvbG9ycy5iZ0JsYWNrID0gZm9ybWF0KDQwLCA0OSk7XG5jb2xvcnMuYmdSZWQgPSBmb3JtYXQoNDEsIDQ5KTtcbmNvbG9ycy5iZ0dyZWVuID0gZm9ybWF0KDQyLCA0OSk7XG5jb2xvcnMuYmdZZWxsb3cgPSBmb3JtYXQoNDMsIDQ5KTtcbmNvbG9ycy5iZ0JsdWUgPSBmb3JtYXQoNDQsIDQ5KTtcbmNvbG9ycy5iZ01hZ2VudGEgPSBmb3JtYXQoNDUsIDQ5KTtcbmNvbG9ycy5iZ0N5YW4gPSBmb3JtYXQoNDYsIDQ5KTtcbmNvbG9ycy5iZ1doaXRlID0gZm9ybWF0KDQ3LCA0OSk7XG5jb2xvcnMuYmdHcmF5ID0gZm9ybWF0KDEwMCwgNDkpO1xuXG5jb2xvcnMucmVkQnJpZ2h0ID0gZm9ybWF0KDkxLCAzOSk7XG5jb2xvcnMuZ3JlZW5CcmlnaHQgPSBmb3JtYXQoOTIsIDM5KTtcbmNvbG9ycy55ZWxsb3dCcmlnaHQgPSBmb3JtYXQoOTMsIDM5KTtcbmNvbG9ycy5ibHVlQnJpZ2h0ID0gZm9ybWF0KDk0LCAzOSk7XG5jb2xvcnMubWFnZW50YUJyaWdodCA9IGZvcm1hdCg5NSwgMzkpO1xuY29sb3JzLmN5YW5CcmlnaHQgPSBmb3JtYXQoOTYsIDM5KTtcbmNvbG9ycy53aGl0ZUJyaWdodCA9IGZvcm1hdCg5NywgMzkpO1xuXG5jb2xvcnMuYmdSZWRCcmlnaHQgPSBmb3JtYXQoMTAxLCA0OSk7XG5jb2xvcnMuYmdHcmVlbkJyaWdodCA9IGZvcm1hdCgxMDIsIDQ5KTtcbmNvbG9ycy5iZ1llbGxvd0JyaWdodCA9IGZvcm1hdCgxMDMsIDQ5KTtcbmNvbG9ycy5iZ0JsdWVCcmlnaHQgPSBmb3JtYXQoMTA0LCA0OSk7XG5jb2xvcnMuYmdNYWdlbnRhQnJpZ2h0ID0gZm9ybWF0KDEwNSwgNDkpO1xuY29sb3JzLmJnQ3lhbkJyaWdodCA9IGZvcm1hdCgxMDYsIDQ5KTtcbmNvbG9ycy5iZ1doaXRlQnJpZ2h0ID0gZm9ybWF0KDEwNywgNDkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbG9ycztcbiIsIi8vIHByb2Nlc3MuZW52IGRvdC1ub3RhdGlvbiBhY2Nlc3MgcHJpbnRzOlxuLy8gUHJvcGVydHkgJ1RFUk0nIGNvbWVzIGZyb20gYW4gaW5kZXggc2lnbmF0dXJlLCBzbyBpdCBtdXN0IGJlIGFjY2Vzc2VkIHdpdGggWydURVJNJ10udHMoNDExMSlcbi8qIGVzbGludCBkb3Qtbm90YXRpb246IFtcIm9mZlwiXSAqL1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbi8vIFBvcnRlZCBmcm9tIGlzLXVuaWNvZGUtc3VwcG9ydGVkXG5mdW5jdGlvbiBpc1VuaWNvZGVTdXBwb3J0ZWQoKSB7XG4gICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT09ICd3aW4zMicpIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MuZW52WydURVJNJ10gIT09ICdsaW51eCc7IC8vIExpbnV4IGNvbnNvbGUgKGtlcm5lbClcbiAgICB9XG4gICAgcmV0dXJuIChCb29sZWFuKHByb2Nlc3MuZW52WydXVF9TRVNTSU9OJ10pIHx8IC8vIFdpbmRvd3MgVGVybWluYWxcbiAgICAgICAgQm9vbGVhbihwcm9jZXNzLmVudlsnVEVSTUlOVVNfU1VCTElNRSddKSB8fCAvLyBUZXJtaW51cyAoPDAuMi4yNylcbiAgICAgICAgcHJvY2Vzcy5lbnZbJ0NvbkVtdVRhc2snXSA9PT0gJ3tjbWQ6OkNtZGVyfScgfHwgLy8gQ29uRW11IGFuZCBjbWRlclxuICAgICAgICBwcm9jZXNzLmVudlsnVEVSTV9QUk9HUkFNJ10gPT09ICdUZXJtaW51cy1TdWJsaW1lJyB8fFxuICAgICAgICBwcm9jZXNzLmVudlsnVEVSTV9QUk9HUkFNJ10gPT09ICd2c2NvZGUnIHx8XG4gICAgICAgIHByb2Nlc3MuZW52WydURVJNJ10gPT09ICd4dGVybS0yNTZjb2xvcicgfHxcbiAgICAgICAgcHJvY2Vzcy5lbnZbJ1RFUk0nXSA9PT0gJ2FsYWNyaXR0eScgfHxcbiAgICAgICAgcHJvY2Vzcy5lbnZbJ1RFUk1JTkFMX0VNVUxBVE9SJ10gPT09ICdKZXRCcmFpbnMtSmVkaVRlcm0nKTtcbn1cbi8vIFBvcnRlZCBmcm9tIGZpZ3VyZXNcbmNvbnN0IGNvbW1vbiA9IHtcbiAgICBjaXJjbGVRdWVzdGlvbk1hcms6ICcoPyknLFxuICAgIHF1ZXN0aW9uTWFya1ByZWZpeDogJyg/KScsXG4gICAgc3F1YXJlOiAn4paIJyxcbiAgICBzcXVhcmVEYXJrU2hhZGU6ICfilpMnLFxuICAgIHNxdWFyZU1lZGl1bVNoYWRlOiAn4paSJyxcbiAgICBzcXVhcmVMaWdodFNoYWRlOiAn4paRJyxcbiAgICBzcXVhcmVUb3A6ICfiloAnLFxuICAgIHNxdWFyZUJvdHRvbTogJ+KWhCcsXG4gICAgc3F1YXJlTGVmdDogJ+KWjCcsXG4gICAgc3F1YXJlUmlnaHQ6ICfilpAnLFxuICAgIHNxdWFyZUNlbnRlcjogJ+KWoCcsXG4gICAgYnVsbGV0OiAn4pePJyxcbiAgICBkb3Q6ICfigKQnLFxuICAgIGVsbGlwc2lzOiAn4oCmJyxcbiAgICBwb2ludGVyU21hbGw6ICfigLonLFxuICAgIHRyaWFuZ2xlVXA6ICfilrInLFxuICAgIHRyaWFuZ2xlVXBTbWFsbDogJ+KWtCcsXG4gICAgdHJpYW5nbGVEb3duOiAn4pa8JyxcbiAgICB0cmlhbmdsZURvd25TbWFsbDogJ+KWvicsXG4gICAgdHJpYW5nbGVMZWZ0U21hbGw6ICfil4InLFxuICAgIHRyaWFuZ2xlUmlnaHRTbWFsbDogJ+KWuCcsXG4gICAgaG9tZTogJ+KMgicsXG4gICAgaGVhcnQ6ICfimaUnLFxuICAgIG11c2ljTm90ZTogJ+KZqicsXG4gICAgbXVzaWNOb3RlQmVhbWVkOiAn4pmrJyxcbiAgICBhcnJvd1VwOiAn4oaRJyxcbiAgICBhcnJvd0Rvd246ICfihpMnLFxuICAgIGFycm93TGVmdDogJ+KGkCcsXG4gICAgYXJyb3dSaWdodDogJ+KGkicsXG4gICAgYXJyb3dMZWZ0UmlnaHQ6ICfihpQnLFxuICAgIGFycm93VXBEb3duOiAn4oaVJyxcbiAgICBhbG1vc3RFcXVhbDogJ+KJiCcsXG4gICAgbm90RXF1YWw6ICfiiaAnLFxuICAgIGxlc3NPckVxdWFsOiAn4omkJyxcbiAgICBncmVhdGVyT3JFcXVhbDogJ+KJpScsXG4gICAgaWRlbnRpY2FsOiAn4omhJyxcbiAgICBpbmZpbml0eTogJ+KInicsXG4gICAgc3Vic2NyaXB0WmVybzogJ+KCgCcsXG4gICAgc3Vic2NyaXB0T25lOiAn4oKBJyxcbiAgICBzdWJzY3JpcHRUd286ICfigoInLFxuICAgIHN1YnNjcmlwdFRocmVlOiAn4oKDJyxcbiAgICBzdWJzY3JpcHRGb3VyOiAn4oKEJyxcbiAgICBzdWJzY3JpcHRGaXZlOiAn4oKFJyxcbiAgICBzdWJzY3JpcHRTaXg6ICfigoYnLFxuICAgIHN1YnNjcmlwdFNldmVuOiAn4oKHJyxcbiAgICBzdWJzY3JpcHRFaWdodDogJ+KCiCcsXG4gICAgc3Vic2NyaXB0TmluZTogJ+KCiScsXG4gICAgb25lSGFsZjogJ8K9JyxcbiAgICBvbmVUaGlyZDogJ+KFkycsXG4gICAgb25lUXVhcnRlcjogJ8K8JyxcbiAgICBvbmVGaWZ0aDogJ+KFlScsXG4gICAgb25lU2l4dGg6ICfihZknLFxuICAgIG9uZUVpZ2h0aDogJ+KFmycsXG4gICAgdHdvVGhpcmRzOiAn4oWUJyxcbiAgICB0d29GaWZ0aHM6ICfihZYnLFxuICAgIHRocmVlUXVhcnRlcnM6ICfCvicsXG4gICAgdGhyZWVGaWZ0aHM6ICfihZcnLFxuICAgIHRocmVlRWlnaHRoczogJ+KFnCcsXG4gICAgZm91ckZpZnRoczogJ+KFmCcsXG4gICAgZml2ZVNpeHRoczogJ+KFmicsXG4gICAgZml2ZUVpZ2h0aHM6ICfihZ0nLFxuICAgIHNldmVuRWlnaHRoczogJ+KFnicsXG4gICAgbGluZTogJ+KUgCcsXG4gICAgbGluZUJvbGQ6ICfilIEnLFxuICAgIGxpbmVEb3VibGU6ICfilZAnLFxuICAgIGxpbmVEYXNoZWQwOiAn4pSEJyxcbiAgICBsaW5lRGFzaGVkMTogJ+KUhScsXG4gICAgbGluZURhc2hlZDI6ICfilIgnLFxuICAgIGxpbmVEYXNoZWQzOiAn4pSJJyxcbiAgICBsaW5lRGFzaGVkNDogJ+KVjCcsXG4gICAgbGluZURhc2hlZDU6ICfilY0nLFxuICAgIGxpbmVEYXNoZWQ2OiAn4pW0JyxcbiAgICBsaW5lRGFzaGVkNzogJ+KVticsXG4gICAgbGluZURhc2hlZDg6ICfilbgnLFxuICAgIGxpbmVEYXNoZWQ5OiAn4pW6JyxcbiAgICBsaW5lRGFzaGVkMTA6ICfilbwnLFxuICAgIGxpbmVEYXNoZWQxMTogJ+KVvicsXG4gICAgbGluZURhc2hlZDEyOiAn4oiSJyxcbiAgICBsaW5lRGFzaGVkMTM6ICfigJMnLFxuICAgIGxpbmVEYXNoZWQxNDogJ+KAkCcsXG4gICAgbGluZURhc2hlZDE1OiAn4oGDJyxcbiAgICBsaW5lVmVydGljYWw6ICfilIInLFxuICAgIGxpbmVWZXJ0aWNhbEJvbGQ6ICfilIMnLFxuICAgIGxpbmVWZXJ0aWNhbERvdWJsZTogJ+KVkScsXG4gICAgbGluZVZlcnRpY2FsRGFzaGVkMDogJ+KUhicsXG4gICAgbGluZVZlcnRpY2FsRGFzaGVkMTogJ+KUhycsXG4gICAgbGluZVZlcnRpY2FsRGFzaGVkMjogJ+KUiicsXG4gICAgbGluZVZlcnRpY2FsRGFzaGVkMzogJ+KUiycsXG4gICAgbGluZVZlcnRpY2FsRGFzaGVkNDogJ+KVjicsXG4gICAgbGluZVZlcnRpY2FsRGFzaGVkNTogJ+KVjycsXG4gICAgbGluZVZlcnRpY2FsRGFzaGVkNjogJ+KVtScsXG4gICAgbGluZVZlcnRpY2FsRGFzaGVkNzogJ+KVtycsXG4gICAgbGluZVZlcnRpY2FsRGFzaGVkODogJ+KVuScsXG4gICAgbGluZVZlcnRpY2FsRGFzaGVkOTogJ+KVuycsXG4gICAgbGluZVZlcnRpY2FsRGFzaGVkMTA6ICfilb0nLFxuICAgIGxpbmVWZXJ0aWNhbERhc2hlZDExOiAn4pW/JyxcbiAgICBsaW5lRG93bkxlZnQ6ICfilJAnLFxuICAgIGxpbmVEb3duTGVmdEFyYzogJ+KVricsXG4gICAgbGluZURvd25Cb2xkTGVmdEJvbGQ6ICfilJMnLFxuICAgIGxpbmVEb3duQm9sZExlZnQ6ICfilJInLFxuICAgIGxpbmVEb3duTGVmdEJvbGQ6ICfilJEnLFxuICAgIGxpbmVEb3duRG91YmxlTGVmdERvdWJsZTogJ+KVlycsXG4gICAgbGluZURvd25Eb3VibGVMZWZ0OiAn4pWWJyxcbiAgICBsaW5lRG93bkxlZnREb3VibGU6ICfilZUnLFxuICAgIGxpbmVEb3duUmlnaHQ6ICfilIwnLFxuICAgIGxpbmVEb3duUmlnaHRBcmM6ICfila0nLFxuICAgIGxpbmVEb3duQm9sZFJpZ2h0Qm9sZDogJ+KUjycsXG4gICAgbGluZURvd25Cb2xkUmlnaHQ6ICfilI4nLFxuICAgIGxpbmVEb3duUmlnaHRCb2xkOiAn4pSNJyxcbiAgICBsaW5lRG93bkRvdWJsZVJpZ2h0RG91YmxlOiAn4pWUJyxcbiAgICBsaW5lRG93bkRvdWJsZVJpZ2h0OiAn4pWTJyxcbiAgICBsaW5lRG93blJpZ2h0RG91YmxlOiAn4pWSJyxcbiAgICBsaW5lVXBMZWZ0OiAn4pSYJyxcbiAgICBsaW5lVXBMZWZ0QXJjOiAn4pWvJyxcbiAgICBsaW5lVXBCb2xkTGVmdEJvbGQ6ICfilJsnLFxuICAgIGxpbmVVcEJvbGRMZWZ0OiAn4pSaJyxcbiAgICBsaW5lVXBMZWZ0Qm9sZDogJ+KUmScsXG4gICAgbGluZVVwRG91YmxlTGVmdERvdWJsZTogJ+KVnScsXG4gICAgbGluZVVwRG91YmxlTGVmdDogJ+KVnCcsXG4gICAgbGluZVVwTGVmdERvdWJsZTogJ+KVmycsXG4gICAgbGluZVVwUmlnaHQ6ICfilJQnLFxuICAgIGxpbmVVcFJpZ2h0QXJjOiAn4pWwJyxcbiAgICBsaW5lVXBCb2xkUmlnaHRCb2xkOiAn4pSXJyxcbiAgICBsaW5lVXBCb2xkUmlnaHQ6ICfilJYnLFxuICAgIGxpbmVVcFJpZ2h0Qm9sZDogJ+KUlScsXG4gICAgbGluZVVwRG91YmxlUmlnaHREb3VibGU6ICfilZonLFxuICAgIGxpbmVVcERvdWJsZVJpZ2h0OiAn4pWZJyxcbiAgICBsaW5lVXBSaWdodERvdWJsZTogJ+KVmCcsXG4gICAgbGluZVVwRG93bkxlZnQ6ICfilKQnLFxuICAgIGxpbmVVcEJvbGREb3duQm9sZExlZnRCb2xkOiAn4pSrJyxcbiAgICBsaW5lVXBCb2xkRG93bkJvbGRMZWZ0OiAn4pSoJyxcbiAgICBsaW5lVXBEb3duTGVmdEJvbGQ6ICfilKUnLFxuICAgIGxpbmVVcEJvbGREb3duTGVmdEJvbGQ6ICfilKknLFxuICAgIGxpbmVVcERvd25Cb2xkTGVmdEJvbGQ6ICfilKonLFxuICAgIGxpbmVVcERvd25Cb2xkTGVmdDogJ+KUpycsXG4gICAgbGluZVVwQm9sZERvd25MZWZ0OiAn4pSmJyxcbiAgICBsaW5lVXBEb3VibGVEb3duRG91YmxlTGVmdERvdWJsZTogJ+KVoycsXG4gICAgbGluZVVwRG91YmxlRG93bkRvdWJsZUxlZnQ6ICfilaInLFxuICAgIGxpbmVVcERvd25MZWZ0RG91YmxlOiAn4pWhJyxcbiAgICBsaW5lVXBEb3duUmlnaHQ6ICfilJwnLFxuICAgIGxpbmVVcEJvbGREb3duQm9sZFJpZ2h0Qm9sZDogJ+KUoycsXG4gICAgbGluZVVwQm9sZERvd25Cb2xkUmlnaHQ6ICfilKAnLFxuICAgIGxpbmVVcERvd25SaWdodEJvbGQ6ICfilJ0nLFxuICAgIGxpbmVVcEJvbGREb3duUmlnaHRCb2xkOiAn4pShJyxcbiAgICBsaW5lVXBEb3duQm9sZFJpZ2h0Qm9sZDogJ+KUoicsXG4gICAgbGluZVVwRG93bkJvbGRSaWdodDogJ+KUnycsXG4gICAgbGluZVVwQm9sZERvd25SaWdodDogJ+KUnicsXG4gICAgbGluZVVwRG91YmxlRG93bkRvdWJsZVJpZ2h0RG91YmxlOiAn4pWgJyxcbiAgICBsaW5lVXBEb3VibGVEb3duRG91YmxlUmlnaHQ6ICfilZ8nLFxuICAgIGxpbmVVcERvd25SaWdodERvdWJsZTogJ+KVnicsXG4gICAgbGluZURvd25MZWZ0UmlnaHQ6ICfilKwnLFxuICAgIGxpbmVEb3duQm9sZExlZnRCb2xkUmlnaHRCb2xkOiAn4pSzJyxcbiAgICBsaW5lRG93bkxlZnRCb2xkUmlnaHRCb2xkOiAn4pSvJyxcbiAgICBsaW5lRG93bkJvbGRMZWZ0UmlnaHQ6ICfilLAnLFxuICAgIGxpbmVEb3duQm9sZExlZnRCb2xkUmlnaHQ6ICfilLEnLFxuICAgIGxpbmVEb3duQm9sZExlZnRSaWdodEJvbGQ6ICfilLInLFxuICAgIGxpbmVEb3duTGVmdFJpZ2h0Qm9sZDogJ+KUricsXG4gICAgbGluZURvd25MZWZ0Qm9sZFJpZ2h0OiAn4pStJyxcbiAgICBsaW5lRG93bkRvdWJsZUxlZnREb3VibGVSaWdodERvdWJsZTogJ+KVpicsXG4gICAgbGluZURvd25Eb3VibGVMZWZ0UmlnaHQ6ICfilaUnLFxuICAgIGxpbmVEb3duTGVmdERvdWJsZVJpZ2h0RG91YmxlOiAn4pWkJyxcbiAgICBsaW5lVXBMZWZ0UmlnaHQ6ICfilLQnLFxuICAgIGxpbmVVcEJvbGRMZWZ0Qm9sZFJpZ2h0Qm9sZDogJ+KUuycsXG4gICAgbGluZVVwTGVmdEJvbGRSaWdodEJvbGQ6ICfilLcnLFxuICAgIGxpbmVVcEJvbGRMZWZ0UmlnaHQ6ICfilLgnLFxuICAgIGxpbmVVcEJvbGRMZWZ0Qm9sZFJpZ2h0OiAn4pS5JyxcbiAgICBsaW5lVXBCb2xkTGVmdFJpZ2h0Qm9sZDogJ+KUuicsXG4gICAgbGluZVVwTGVmdFJpZ2h0Qm9sZDogJ+KUticsXG4gICAgbGluZVVwTGVmdEJvbGRSaWdodDogJ+KUtScsXG4gICAgbGluZVVwRG91YmxlTGVmdERvdWJsZVJpZ2h0RG91YmxlOiAn4pWpJyxcbiAgICBsaW5lVXBEb3VibGVMZWZ0UmlnaHQ6ICfilagnLFxuICAgIGxpbmVVcExlZnREb3VibGVSaWdodERvdWJsZTogJ+KVpycsXG4gICAgbGluZVVwRG93bkxlZnRSaWdodDogJ+KUvCcsXG4gICAgbGluZVVwQm9sZERvd25Cb2xkTGVmdEJvbGRSaWdodEJvbGQ6ICfilYsnLFxuICAgIGxpbmVVcERvd25Cb2xkTGVmdEJvbGRSaWdodEJvbGQ6ICfilYgnLFxuICAgIGxpbmVVcEJvbGREb3duTGVmdEJvbGRSaWdodEJvbGQ6ICfilYcnLFxuICAgIGxpbmVVcEJvbGREb3duQm9sZExlZnRSaWdodEJvbGQ6ICfilYonLFxuICAgIGxpbmVVcEJvbGREb3duQm9sZExlZnRCb2xkUmlnaHQ6ICfilYknLFxuICAgIGxpbmVVcEJvbGREb3duTGVmdFJpZ2h0OiAn4pWAJyxcbiAgICBsaW5lVXBEb3duQm9sZExlZnRSaWdodDogJ+KVgScsXG4gICAgbGluZVVwRG93bkxlZnRCb2xkUmlnaHQ6ICfilL0nLFxuICAgIGxpbmVVcERvd25MZWZ0UmlnaHRCb2xkOiAn4pS+JyxcbiAgICBsaW5lVXBCb2xkRG93bkJvbGRMZWZ0UmlnaHQ6ICfilYInLFxuICAgIGxpbmVVcERvd25MZWZ0Qm9sZFJpZ2h0Qm9sZDogJ+KUvycsXG4gICAgbGluZVVwQm9sZERvd25MZWZ0Qm9sZFJpZ2h0OiAn4pWDJyxcbiAgICBsaW5lVXBCb2xkRG93bkxlZnRSaWdodEJvbGQ6ICfilYQnLFxuICAgIGxpbmVVcERvd25Cb2xkTGVmdEJvbGRSaWdodDogJ+KVhScsXG4gICAgbGluZVVwRG93bkJvbGRMZWZ0UmlnaHRCb2xkOiAn4pWGJyxcbiAgICBsaW5lVXBEb3VibGVEb3duRG91YmxlTGVmdERvdWJsZVJpZ2h0RG91YmxlOiAn4pWsJyxcbiAgICBsaW5lVXBEb3VibGVEb3duRG91YmxlTGVmdFJpZ2h0OiAn4pWrJyxcbiAgICBsaW5lVXBEb3duTGVmdERvdWJsZVJpZ2h0RG91YmxlOiAn4pWqJyxcbiAgICBsaW5lQ3Jvc3M6ICfilbMnLFxuICAgIGxpbmVCYWNrc2xhc2g6ICfilbInLFxuICAgIGxpbmVTbGFzaDogJ+KVsScsXG59O1xuY29uc3Qgc3BlY2lhbE1haW5TeW1ib2xzID0ge1xuICAgIHRpY2s6ICfinJQnLFxuICAgIGluZm86ICfihLknLFxuICAgIHdhcm5pbmc6ICfimqAnLFxuICAgIGNyb3NzOiAn4pyYJyxcbiAgICBzcXVhcmVTbWFsbDogJ+KXuycsXG4gICAgc3F1YXJlU21hbGxGaWxsZWQ6ICfil7wnLFxuICAgIGNpcmNsZTogJ+KXrycsXG4gICAgY2lyY2xlRmlsbGVkOiAn4peJJyxcbiAgICBjaXJjbGVEb3R0ZWQ6ICfil4wnLFxuICAgIGNpcmNsZURvdWJsZTogJ+KXjicsXG4gICAgY2lyY2xlQ2lyY2xlOiAn4pOeJyxcbiAgICBjaXJjbGVDcm9zczogJ+KTpycsXG4gICAgY2lyY2xlUGlwZTogJ+KSvicsXG4gICAgcmFkaW9PbjogJ+KXiScsXG4gICAgcmFkaW9PZmY6ICfil68nLFxuICAgIGNoZWNrYm94T246ICfimJInLFxuICAgIGNoZWNrYm94T2ZmOiAn4piQJyxcbiAgICBjaGVja2JveENpcmNsZU9uOiAn4pOnJyxcbiAgICBjaGVja2JveENpcmNsZU9mZjogJ+KSvicsXG4gICAgcG9pbnRlcjogJ+KdrycsXG4gICAgdHJpYW5nbGVVcE91dGxpbmU6ICfilrMnLFxuICAgIHRyaWFuZ2xlTGVmdDogJ+KXgCcsXG4gICAgdHJpYW5nbGVSaWdodDogJ+KWticsXG4gICAgbG96ZW5nZTogJ+KXhicsXG4gICAgbG96ZW5nZU91dGxpbmU6ICfil4cnLFxuICAgIGhhbWJ1cmdlcjogJ+KYsCcsXG4gICAgc21pbGV5OiAn44uhJyxcbiAgICBtdXN0YWNoZTogJ+C3tCcsXG4gICAgc3RhcjogJ+KYhScsXG4gICAgcGxheTogJ+KWticsXG4gICAgbm9kZWpzOiAn4qyiJyxcbiAgICBvbmVTZXZlbnRoOiAn4oWQJyxcbiAgICBvbmVOaW50aDogJ+KFkScsXG4gICAgb25lVGVudGg6ICfihZInLFxufTtcbmNvbnN0IHNwZWNpYWxGYWxsYmFja1N5bWJvbHMgPSB7XG4gICAgdGljazogJ+KImicsXG4gICAgaW5mbzogJ2knLFxuICAgIHdhcm5pbmc6ICfigLwnLFxuICAgIGNyb3NzOiAnw5cnLFxuICAgIHNxdWFyZVNtYWxsOiAn4pahJyxcbiAgICBzcXVhcmVTbWFsbEZpbGxlZDogJ+KWoCcsXG4gICAgY2lyY2xlOiAnKCApJyxcbiAgICBjaXJjbGVGaWxsZWQ6ICcoKiknLFxuICAgIGNpcmNsZURvdHRlZDogJyggKScsXG4gICAgY2lyY2xlRG91YmxlOiAnKCApJyxcbiAgICBjaXJjbGVDaXJjbGU6ICco4peLKScsXG4gICAgY2lyY2xlQ3Jvc3M6ICcow5cpJyxcbiAgICBjaXJjbGVQaXBlOiAnKOKUgiknLFxuICAgIHJhZGlvT246ICcoKiknLFxuICAgIHJhZGlvT2ZmOiAnKCApJyxcbiAgICBjaGVja2JveE9uOiAnW8OXXScsXG4gICAgY2hlY2tib3hPZmY6ICdbIF0nLFxuICAgIGNoZWNrYm94Q2lyY2xlT246ICcow5cpJyxcbiAgICBjaGVja2JveENpcmNsZU9mZjogJyggKScsXG4gICAgcG9pbnRlcjogJz4nLFxuICAgIHRyaWFuZ2xlVXBPdXRsaW5lOiAn4oiGJyxcbiAgICB0cmlhbmdsZUxlZnQ6ICfil4QnLFxuICAgIHRyaWFuZ2xlUmlnaHQ6ICfilronLFxuICAgIGxvemVuZ2U6ICfimaYnLFxuICAgIGxvemVuZ2VPdXRsaW5lOiAn4peKJyxcbiAgICBoYW1idXJnZXI6ICfiiaEnLFxuICAgIHNtaWxleTogJ+KYuicsXG4gICAgbXVzdGFjaGU6ICfilIzilIDilJAnLFxuICAgIHN0YXI6ICfinLYnLFxuICAgIHBsYXk6ICfilronLFxuICAgIG5vZGVqczogJ+KZpicsXG4gICAgb25lU2V2ZW50aDogJzEvNycsXG4gICAgb25lTmludGg6ICcxLzknLFxuICAgIG9uZVRlbnRoOiAnMS8xMCcsXG59O1xuZXhwb3J0IGNvbnN0IG1haW5TeW1ib2xzID0geyAuLi5jb21tb24sIC4uLnNwZWNpYWxNYWluU3ltYm9scyB9O1xuZXhwb3J0IGNvbnN0IGZhbGxiYWNrU3ltYm9scyA9IHtcbiAgICAuLi5jb21tb24sXG4gICAgLi4uc3BlY2lhbEZhbGxiYWNrU3ltYm9scyxcbn07XG5jb25zdCBzaG91bGRVc2VNYWluID0gaXNVbmljb2RlU3VwcG9ydGVkKCk7XG5jb25zdCBmaWd1cmVzID0gc2hvdWxkVXNlTWFpbiA/IG1haW5TeW1ib2xzIDogZmFsbGJhY2tTeW1ib2xzO1xuZXhwb3J0IGRlZmF1bHQgZmlndXJlcztcbmNvbnN0IHJlcGxhY2VtZW50cyA9IE9iamVjdC5lbnRyaWVzKHNwZWNpYWxNYWluU3ltYm9scyk7XG4vLyBPbiB0ZXJtaW5hbHMgd2hpY2ggZG8gbm90IHN1cHBvcnQgVW5pY29kZSBzeW1ib2xzLCBzdWJzdGl0dXRlIHRoZW0gdG8gb3RoZXIgc3ltYm9sc1xuZXhwb3J0IGNvbnN0IHJlcGxhY2VTeW1ib2xzID0gKHN0cmluZywgeyB1c2VGYWxsYmFjayA9ICFzaG91bGRVc2VNYWluIH0gPSB7fSkgPT4ge1xuICAgIGlmICh1c2VGYWxsYmFjaykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIG1haW5TeW1ib2xdIG9mIHJlcGxhY2VtZW50cykge1xuICAgICAgICAgICAgY29uc3QgZmFsbGJhY2tTeW1ib2wgPSBmYWxsYmFja1N5bWJvbHNba2V5XTtcbiAgICAgICAgICAgIGlmICghZmFsbGJhY2tTeW1ib2wpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmaW5kIGZhbGxiYWNrIGZvciAke2tleX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlQWxsKG1haW5TeW1ib2wsIGZhbGxiYWNrU3ltYm9sKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RyaW5nO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gaXNQcm9taXNlKG9iaikge1xuICByZXR1cm4gISFvYmogJiYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpICYmIHR5cGVvZiBvYmoudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuIGEgZnVuY3Rpb24gYXN5bmNocm9ub3VzbHkgb3Igc3luY2hyb25vdXNseVxuICpcbiAqIGV4YW1wbGU6XG4gKiBydW5Bc3luYyh3cmFwcGVkRnVuY3Rpb24sIGNhbGxiYWNrKSguLi5hcmdzKTtcbiAqXG4gKiBAcGFyYW0gICB7RnVuY3Rpb259IGZ1bmMgIEZ1bmN0aW9uIHRvIHJ1blxuICogQHBhcmFtICAge0Z1bmN0aW9ufSBbY2JdICAgIENhbGxiYWNrIGZ1bmN0aW9uIHBhc3NlZCB0aGUgYGZ1bmNgIHJldHVybmVkIHZhbHVlXG4gKiBAcGFyYW0gICB7c3RyaW5nfSBbcHJveHlQcm9wZXJ0eV0gYHRoaXNgIHByb3BlcnR5IHRvIGJlIHVzZWQgZm9yIHRoZSBjYWxsYmFjayBmYWN0b3J5XG4gKiBAcmV0dXJuICB7RnVuY3Rpb24oYXJndW1lbnRzKX0gQXJndW1lbnRzIHRvIHBhc3MgdG8gYGZ1bmNgLiBUaGlzIGZ1bmN0aW9uIHdpbGwgaW4gdHVyblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhIFByb21pc2UgKE5vZGUgPj0gMC4xMikgb3IgY2FsbCB0aGUgY2FsbGJhY2tzLlxuICovXG5cbnZhciBydW5Bc3luYyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZ1bmMsIGNiLCBwcm94eVByb3BlcnR5ID0gJ2FzeW5jJykge1xuICBpZiAodHlwZW9mIGNiID09PSAnc3RyaW5nJykge1xuICAgIHByb3h5UHJvcGVydHkgPSBjYjtcbiAgICBjYiA9IHVuZGVmaW5lZDtcbiAgfVxuICBjYiA9IGNiIHx8IGZ1bmN0aW9uICgpIHt9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgb3JpZ2luYWxUaGlzID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlc29sdmVkID0gZmFsc2U7XG4gICAgICBjb25zdCB3cmFwcGVkUmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAocmVzb2x2ZWQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1J1bi1hc3luYyBwcm9taXNlIGFscmVhZHkgcmVzb2x2ZWQuJylcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlZCA9IHRydWU7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVqZWN0ZWQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHdyYXBwZWRSZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdSdW4tYXN5bmMgcHJvbWlzZSBhbHJlYWR5IHJlamVjdGVkLicpXG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0ZWQgPSB0cnVlO1xuICAgICAgICByZWplY3QodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdXNpbmdDYWxsYmFjayA9IGZhbHNlO1xuICAgICAgdmFyIGNhbGxiYWNrQ29uZmxpY3QgPSBmYWxzZTtcbiAgICAgIHZhciBjb250ZXh0RW5kZWQgPSBmYWxzZTtcblxuICAgICAgdmFyIGRvbmVGYWN0b3J5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoY29udGV4dEVuZGVkKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdSdW4tYXN5bmMgYXN5bmMoKSBjYWxsZWQgb3V0c2lkZSBhIHZhbGlkIHJ1bi1hc3luYyBjb250ZXh0LCBjYWxsYmFjayB3aWxsIGJlIGlnbm9yZWQuJyk7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbGxiYWNrQ29uZmxpY3QpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1J1bi1hc3luYyB3cmFwcGVkIGZ1bmN0aW9uIChhc3luYykgcmV0dXJuZWQgYSBwcm9taXNlLlxcbkNhbGxzIHRvIGFzeW5jKCkgY2FsbGJhY2sgY2FuIGhhdmUgdW5leHBlY3RlZCByZXN1bHRzLicpO1xuICAgICAgICB9XG4gICAgICAgIHVzaW5nQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVyciwgdmFsdWUpIHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICB3cmFwcGVkUmVqZWN0KGVycik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdyYXBwZWRSZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9O1xuXG4gICAgICB2YXIgX3RoaXM7XG4gICAgICBpZiAob3JpZ2luYWxUaGlzICYmIHByb3h5UHJvcGVydHkgJiYgUHJveHkpIHtcbiAgICAgICAgX3RoaXMgPSBuZXcgUHJveHkob3JpZ2luYWxUaGlzLCB7XG4gICAgICAgICAgZ2V0KF90YXJnZXQsIHByb3ApIHtcbiAgICAgICAgICAgIGlmIChwcm9wID09PSBwcm94eVByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIGlmIChwcm9wIGluIF90YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYCR7cHJveHlQcm9wZXJ0eX0gcHJvcGVydHkgaXMgYmVlbiBzaGFkb3dlZCBieSBydW4tc3luY2ApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBkb25lRmFjdG9yeTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KC4uLmFyZ3VtZW50cyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcyA9IHsgW3Byb3h5UHJvcGVydHldOiBkb25lRmFjdG9yeSB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgYW5zd2VyID0gZnVuYy5hcHBseShfdGhpcywgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncykpO1xuXG4gICAgICBpZiAodXNpbmdDYWxsYmFjaykge1xuICAgICAgICBpZiAoaXNQcm9taXNlKGFuc3dlcikpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1J1bi1hc3luYyB3cmFwcGVkIGZ1bmN0aW9uIChzeW5jKSByZXR1cm5lZCBhIHByb21pc2UgYnV0IGFzeW5jKCkgY2FsbGJhY2sgbXVzdCBiZSBleGVjdXRlZCB0byByZXNvbHZlLicpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNQcm9taXNlKGFuc3dlcikpIHtcbiAgICAgICAgICBjYWxsYmFja0NvbmZsaWN0ID0gdHJ1ZTtcbiAgICAgICAgICBhbnN3ZXIudGhlbih3cmFwcGVkUmVzb2x2ZSwgd3JhcHBlZFJlamVjdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd3JhcHBlZFJlc29sdmUoYW5zd2VyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29udGV4dEVuZGVkID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHByb21pc2UudGhlbihjYi5iaW5kKG51bGwsIG51bGwpLCBjYik7XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxufTtcblxucnVuQXN5bmMuY2IgPSBmdW5jdGlvbiAoZnVuYywgY2IpIHtcbiAgcmV0dXJuIHJ1bkFzeW5jKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSBmdW5jLmxlbmd0aCAtIDEpIHtcbiAgICAgIGFyZ3MucHVzaCh0aGlzLmFzeW5jKCkpO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfSwgY2IpO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0Z1bmN0aW9uID0gdm9pZCAwO1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNGdW5jdGlvbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlRXJyb3JDbGFzcyA9IHZvaWQgMDtcbmZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2xhc3MoY3JlYXRlSW1wbCkge1xuICAgIHZhciBfc3VwZXIgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgRXJyb3IuY2FsbChpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gICAgfTtcbiAgICB2YXIgY3RvckZ1bmMgPSBjcmVhdGVJbXBsKF9zdXBlcik7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JGdW5jO1xuICAgIHJldHVybiBjdG9yRnVuYztcbn1cbmV4cG9ydHMuY3JlYXRlRXJyb3JDbGFzcyA9IGNyZWF0ZUVycm9yQ2xhc3M7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jcmVhdGVFcnJvckNsYXNzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5VbnN1YnNjcmlwdGlvbkVycm9yID0gdm9pZCAwO1xudmFyIGNyZWF0ZUVycm9yQ2xhc3NfMSA9IHJlcXVpcmUoXCIuL2NyZWF0ZUVycm9yQ2xhc3NcIik7XG5leHBvcnRzLlVuc3Vic2NyaXB0aW9uRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzXzEuY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFVuc3Vic2NyaXB0aW9uRXJyb3JJbXBsKGVycm9ycykge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IGVycm9yc1xuICAgICAgICAgICAgPyBlcnJvcnMubGVuZ3RoICsgXCIgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcXG5cIiArIGVycm9ycy5tYXAoZnVuY3Rpb24gKGVyciwgaSkgeyByZXR1cm4gaSArIDEgKyBcIikgXCIgKyBlcnIudG9TdHJpbmcoKTsgfSkuam9pbignXFxuICAnKVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1Vuc3Vic2NyaXB0aW9uRXJyb3InO1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICB9O1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VbnN1YnNjcmlwdGlvbkVycm9yLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hcnJSZW1vdmUgPSB2b2lkIDA7XG5mdW5jdGlvbiBhcnJSZW1vdmUoYXJyLCBpdGVtKSB7XG4gICAgaWYgKGFycikge1xuICAgICAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgMCA8PSBpbmRleCAmJiBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG59XG5leHBvcnRzLmFyclJlbW92ZSA9IGFyclJlbW92ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFyclJlbW92ZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3ZhbHVlcyA9ICh0aGlzICYmIHRoaXMuX192YWx1ZXMpIHx8IGZ1bmN0aW9uKG8pIHtcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufTtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzU3Vic2NyaXB0aW9uID0gZXhwb3J0cy5FTVBUWV9TVUJTQ1JJUFRJT04gPSBleHBvcnRzLlN1YnNjcmlwdGlvbiA9IHZvaWQgMDtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi91dGlsL2lzRnVuY3Rpb25cIik7XG52YXIgVW5zdWJzY3JpcHRpb25FcnJvcl8xID0gcmVxdWlyZShcIi4vdXRpbC9VbnN1YnNjcmlwdGlvbkVycm9yXCIpO1xudmFyIGFyclJlbW92ZV8xID0gcmVxdWlyZShcIi4vdXRpbC9hcnJSZW1vdmVcIik7XG52YXIgU3Vic2NyaXB0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oaW5pdGlhbFRlYXJkb3duKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICB9XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVfMSwgX2EsIGVfMiwgX2I7XG4gICAgICAgIHZhciBlcnJvcnM7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfcGFyZW50YWdlXzEgPSBfX3ZhbHVlcyhfcGFyZW50YWdlKSwgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpOyAhX3BhcmVudGFnZV8xXzEuZG9uZTsgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudF8xID0gX3BhcmVudGFnZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50XzEucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3BhcmVudGFnZV8xXzEgJiYgIV9wYXJlbnRhZ2VfMV8xLmRvbmUgJiYgKF9hID0gX3BhcmVudGFnZV8xLnJldHVybikpIF9hLmNhbGwoX3BhcmVudGFnZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3BhcmVudGFnZS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGluaXRpYWxGaW5hbGl6ZXIgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbihpbml0aWFsRmluYWxpemVyKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxGaW5hbGl6ZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZSBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3JfMS5VbnN1YnNjcmlwdGlvbkVycm9yID8gZS5lcnJvcnMgOiBbZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgICAgIGlmIChfZmluYWxpemVycykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9maW5hbGl6ZXJzXzEgPSBfX3ZhbHVlcyhfZmluYWxpemVycyksIF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpOyAhX2ZpbmFsaXplcnNfMV8xLmRvbmU7IF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmluYWxpemVyID0gX2ZpbmFsaXplcnNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKGZpbmFsaXplcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICE9PSBudWxsICYmIGVycm9ycyAhPT0gdm9pZCAwID8gZXJyb3JzIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3JfMS5VbnN1YnNjcmlwdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGVycm9ycykpLCBfX3JlYWQoZXJyLmVycm9ycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZmluYWxpemVyc18xXzEgJiYgIV9maW5hbGl6ZXJzXzFfMS5kb25lICYmIChfYiA9IF9maW5hbGl6ZXJzXzEucmV0dXJuKSkgX2IuY2FsbChfZmluYWxpemVyc18xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbnN1YnNjcmlwdGlvbkVycm9yXzEuVW5zdWJzY3JpcHRpb25FcnJvcihlcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0ZWFyZG93biAmJiB0ZWFyZG93biAhPT0gdGhpcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duLmNsb3NlZCB8fCB0ZWFyZG93bi5faGFzUGFyZW50KHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGVhcmRvd24uX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoX2EgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSkucHVzaCh0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHJldHVybiBfcGFyZW50YWdlID09PSBwYXJlbnQgfHwgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgJiYgX3BhcmVudGFnZS5pbmNsdWRlcyhwYXJlbnQpKTtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgPyAoX3BhcmVudGFnZS5wdXNoKHBhcmVudCksIF9wYXJlbnRhZ2UpIDogX3BhcmVudGFnZSA/IFtfcGFyZW50YWdlLCBwYXJlbnRdIDogcGFyZW50O1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgaWYgKF9wYXJlbnRhZ2UgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICBhcnJSZW1vdmVfMS5hcnJSZW1vdmUoX3BhcmVudGFnZSwgcGFyZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgX2ZpbmFsaXplcnMgJiYgYXJyUmVtb3ZlXzEuYXJyUmVtb3ZlKF9maW5hbGl6ZXJzLCB0ZWFyZG93bik7XG4gICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGVhcmRvd24uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLkVNUFRZID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVtcHR5ID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICBlbXB0eS5jbG9zZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZW1wdHk7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uO1xufSgpKTtcbmV4cG9ydHMuU3Vic2NyaXB0aW9uID0gU3Vic2NyaXB0aW9uO1xuZXhwb3J0cy5FTVBUWV9TVUJTQ1JJUFRJT04gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5mdW5jdGlvbiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24gfHxcbiAgICAgICAgKHZhbHVlICYmICdjbG9zZWQnIGluIHZhbHVlICYmIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHZhbHVlLnJlbW92ZSkgJiYgaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24odmFsdWUuYWRkKSAmJiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbih2YWx1ZS51bnN1YnNjcmliZSkpKTtcbn1cbmV4cG9ydHMuaXNTdWJzY3JpcHRpb24gPSBpc1N1YnNjcmlwdGlvbjtcbmZ1bmN0aW9uIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKSB7XG4gICAgaWYgKGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKGZpbmFsaXplcikpIHtcbiAgICAgICAgZmluYWxpemVyKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmaW5hbGl6ZXIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TdWJzY3JpcHRpb24uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbmZpZyA9IHZvaWQgMDtcbmV4cG9ydHMuY29uZmlnID0ge1xuICAgIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gICAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICAgIFByb21pc2U6IHVuZGVmaW5lZCxcbiAgICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiBmYWxzZSxcbiAgICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6IGZhbHNlLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmZpZy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRpbWVvdXRQcm92aWRlciA9IHZvaWQgMDtcbmV4cG9ydHMudGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGV4cG9ydHMudGltZW91dFByb3ZpZGVyLmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLnNldFRpbWVvdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5zZXRUaW1lb3V0LmFwcGx5KGRlbGVnYXRlLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gZXhwb3J0cy50aW1lb3V0UHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhclRpbWVvdXQpIHx8IGNsZWFyVGltZW91dCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZW91dFByb3ZpZGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXBvcnRVbmhhbmRsZWRFcnJvciA9IHZvaWQgMDtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9jb25maWdcIik7XG52YXIgdGltZW91dFByb3ZpZGVyXzEgPSByZXF1aXJlKFwiLi4vc2NoZWR1bGVyL3RpbWVvdXRQcm92aWRlclwiKTtcbmZ1bmN0aW9uIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycikge1xuICAgIHRpbWVvdXRQcm92aWRlcl8xLnRpbWVvdXRQcm92aWRlci5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9uVW5oYW5kbGVkRXJyb3IgPSBjb25maWdfMS5jb25maWcub25VbmhhbmRsZWRFcnJvcjtcbiAgICAgICAgaWYgKG9uVW5oYW5kbGVkRXJyb3IpIHtcbiAgICAgICAgICAgIG9uVW5oYW5kbGVkRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5yZXBvcnRVbmhhbmRsZWRFcnJvciA9IHJlcG9ydFVuaGFuZGxlZEVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVwb3J0VW5oYW5kbGVkRXJyb3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm5vb3AgPSB2b2lkIDA7XG5mdW5jdGlvbiBub29wKCkgeyB9XG5leHBvcnRzLm5vb3AgPSBub29wO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm9vcC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlTm90aWZpY2F0aW9uID0gZXhwb3J0cy5uZXh0Tm90aWZpY2F0aW9uID0gZXhwb3J0cy5lcnJvck5vdGlmaWNhdGlvbiA9IGV4cG9ydHMuQ09NUExFVEVfTk9USUZJQ0FUSU9OID0gdm9pZCAwO1xuZXhwb3J0cy5DT01QTEVURV9OT1RJRklDQVRJT04gPSAoZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlYXRlTm90aWZpY2F0aW9uKCdDJywgdW5kZWZpbmVkLCB1bmRlZmluZWQpOyB9KSgpO1xuZnVuY3Rpb24gZXJyb3JOb3RpZmljYXRpb24oZXJyb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlTm90aWZpY2F0aW9uKCdFJywgdW5kZWZpbmVkLCBlcnJvcik7XG59XG5leHBvcnRzLmVycm9yTm90aWZpY2F0aW9uID0gZXJyb3JOb3RpZmljYXRpb247XG5mdW5jdGlvbiBuZXh0Tm90aWZpY2F0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5vdGlmaWNhdGlvbignTicsIHZhbHVlLCB1bmRlZmluZWQpO1xufVxuZXhwb3J0cy5uZXh0Tm90aWZpY2F0aW9uID0gbmV4dE5vdGlmaWNhdGlvbjtcbmZ1bmN0aW9uIGNyZWF0ZU5vdGlmaWNhdGlvbihraW5kLCB2YWx1ZSwgZXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9O1xufVxuZXhwb3J0cy5jcmVhdGVOb3RpZmljYXRpb24gPSBjcmVhdGVOb3RpZmljYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ob3RpZmljYXRpb25GYWN0b3JpZXMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNhcHR1cmVFcnJvciA9IGV4cG9ydHMuZXJyb3JDb250ZXh0ID0gdm9pZCAwO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL2NvbmZpZ1wiKTtcbnZhciBjb250ZXh0ID0gbnVsbDtcbmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikge1xuICAgIGlmIChjb25maWdfMS5jb25maWcudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZykge1xuICAgICAgICB2YXIgaXNSb290ID0gIWNvbnRleHQ7XG4gICAgICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgICAgICAgIGNvbnRleHQgPSB7IGVycm9yVGhyb3duOiBmYWxzZSwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgfVxuICAgICAgICBjYigpO1xuICAgICAgICBpZiAoaXNSb290KSB7XG4gICAgICAgICAgICB2YXIgX2EgPSBjb250ZXh0LCBlcnJvclRocm93biA9IF9hLmVycm9yVGhyb3duLCBlcnJvciA9IF9hLmVycm9yO1xuICAgICAgICAgICAgY29udGV4dCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5leHBvcnRzLmVycm9yQ29udGV4dCA9IGVycm9yQ29udGV4dDtcbmZ1bmN0aW9uIGNhcHR1cmVFcnJvcihlcnIpIHtcbiAgICBpZiAoY29uZmlnXzEuY29uZmlnLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcgJiYgY29udGV4dCkge1xuICAgICAgICBjb250ZXh0LmVycm9yVGhyb3duID0gdHJ1ZTtcbiAgICAgICAgY29udGV4dC5lcnJvciA9IGVycjtcbiAgICB9XG59XG5leHBvcnRzLmNhcHR1cmVFcnJvciA9IGNhcHR1cmVFcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9yQ29udGV4dC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkVNUFRZX09CU0VSVkVSID0gZXhwb3J0cy5TYWZlU3Vic2NyaWJlciA9IGV4cG9ydHMuU3Vic2NyaWJlciA9IHZvaWQgMDtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi91dGlsL2lzRnVuY3Rpb25cIik7XG52YXIgU3Vic2NyaXB0aW9uXzEgPSByZXF1aXJlKFwiLi9TdWJzY3JpcHRpb25cIik7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi9jb25maWdcIik7XG52YXIgcmVwb3J0VW5oYW5kbGVkRXJyb3JfMSA9IHJlcXVpcmUoXCIuL3V0aWwvcmVwb3J0VW5oYW5kbGVkRXJyb3JcIik7XG52YXIgbm9vcF8xID0gcmVxdWlyZShcIi4vdXRpbC9ub29wXCIpO1xudmFyIE5vdGlmaWNhdGlvbkZhY3Rvcmllc18xID0gcmVxdWlyZShcIi4vTm90aWZpY2F0aW9uRmFjdG9yaWVzXCIpO1xudmFyIHRpbWVvdXRQcm92aWRlcl8xID0gcmVxdWlyZShcIi4vc2NoZWR1bGVyL3RpbWVvdXRQcm92aWRlclwiKTtcbnZhciBlcnJvckNvbnRleHRfMSA9IHJlcXVpcmUoXCIuL3V0aWwvZXJyb3JDb250ZXh0XCIpO1xudmFyIFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YnNjcmliZXIoZGVzdGluYXRpb24pIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbikge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgICAgIGlmIChTdWJzY3JpcHRpb25fMS5pc1N1YnNjcmlwdGlvbihkZXN0aW5hdGlvbikpIHtcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5hZGQoX3RoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBleHBvcnRzLkVNUFRZX09CU0VSVkVSO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3Vic2NyaWJlci5jcmVhdGUgPSBmdW5jdGlvbiAobmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2FmZVN1YnNjcmliZXIobmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wcGVkTm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbkZhY3Rvcmllc18xLm5leHROb3RpZmljYXRpb24odmFsdWUpLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX25leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wcGVkTm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbkZhY3Rvcmllc18xLmVycm9yTm90aWZpY2F0aW9uKGVyciksIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgaGFuZGxlU3RvcHBlZE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb25GYWN0b3JpZXNfMS5DT01QTEVURV9OT1RJRklDQVRJT04sIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBTdWJzY3JpYmVyO1xufShTdWJzY3JpcHRpb25fMS5TdWJzY3JpcHRpb24pKTtcbmV4cG9ydHMuU3Vic2NyaWJlciA9IFN1YnNjcmliZXI7XG52YXIgX2JpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gX2JpbmQuY2FsbChmbiwgdGhpc0FyZyk7XG59XG52YXIgQ29uc3VtZXJPYnNlcnZlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBwYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgfVxuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLm5leHQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmVycm9yKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIENvbnN1bWVyT2JzZXJ2ZXI7XG59KCkpO1xudmFyIFNhZmVTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU2FmZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgIG5leHQ6IChvYnNlcnZlck9yTmV4dCAhPT0gbnVsbCAmJiBvYnNlcnZlck9yTmV4dCAhPT0gdm9pZCAwID8gb2JzZXJ2ZXJPck5leHQgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dF8xO1xuICAgICAgICAgICAgaWYgKF90aGlzICYmIGNvbmZpZ18xLmNvbmZpZy51c2VEZXByZWNhdGVkTmV4dENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEgPSBPYmplY3QuY3JlYXRlKG9ic2VydmVyT3JOZXh0KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogb2JzZXJ2ZXJPck5leHQubmV4dCAmJiBiaW5kKG9ic2VydmVyT3JOZXh0Lm5leHQsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBvYnNlcnZlck9yTmV4dC5lcnJvciAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmVycm9yLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogb2JzZXJ2ZXJPck5leHQuY29tcGxldGUgJiYgYmluZChvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBTYWZlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZXhwb3J0cy5TYWZlU3Vic2NyaWJlciA9IFNhZmVTdWJzY3JpYmVyO1xuZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHtcbiAgICBpZiAoY29uZmlnXzEuY29uZmlnLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpIHtcbiAgICAgICAgZXJyb3JDb250ZXh0XzEuY2FwdHVyZUVycm9yKGVycm9yKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yXzEucmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRlZmF1bHRFcnJvckhhbmRsZXIoZXJyKSB7XG4gICAgdGhyb3cgZXJyO1xufVxuZnVuY3Rpb24gaGFuZGxlU3RvcHBlZE5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIHN1YnNjcmliZXIpIHtcbiAgICB2YXIgb25TdG9wcGVkTm90aWZpY2F0aW9uID0gY29uZmlnXzEuY29uZmlnLm9uU3RvcHBlZE5vdGlmaWNhdGlvbjtcbiAgICBvblN0b3BwZWROb3RpZmljYXRpb24gJiYgdGltZW91dFByb3ZpZGVyXzEudGltZW91dFByb3ZpZGVyLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gb25TdG9wcGVkTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgc3Vic2NyaWJlcik7IH0pO1xufVxuZXhwb3J0cy5FTVBUWV9PQlNFUlZFUiA9IHtcbiAgICBjbG9zZWQ6IHRydWUsXG4gICAgbmV4dDogbm9vcF8xLm5vb3AsXG4gICAgZXJyb3I6IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgY29tcGxldGU6IG5vb3BfMS5ub29wLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVN1YnNjcmliZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm9ic2VydmFibGUgPSB2b2lkIDA7XG5leHBvcnRzLm9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLm9ic2VydmFibGUpIHx8ICdAQG9ic2VydmFibGUnOyB9KSgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b2JzZXJ2YWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaWRlbnRpdHkgPSB2b2lkIDA7XG5mdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gICAgcmV0dXJuIHg7XG59XG5leHBvcnRzLmlkZW50aXR5ID0gaWRlbnRpdHk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pZGVudGl0eS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGlwZUZyb21BcnJheSA9IGV4cG9ydHMucGlwZSA9IHZvaWQgMDtcbnZhciBpZGVudGl0eV8xID0gcmVxdWlyZShcIi4vaWRlbnRpdHlcIik7XG5mdW5jdGlvbiBwaXBlKCkge1xuICAgIHZhciBmbnMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBmbnNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkoZm5zKTtcbn1cbmV4cG9ydHMucGlwZSA9IHBpcGU7XG5mdW5jdGlvbiBwaXBlRnJvbUFycmF5KGZucykge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eV8xLmlkZW50aXR5O1xuICAgIH1cbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZm5zWzBdO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gcGlwZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGZucy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGZuKSB7IHJldHVybiBmbihwcmV2KTsgfSwgaW5wdXQpO1xuICAgIH07XG59XG5leHBvcnRzLnBpcGVGcm9tQXJyYXkgPSBwaXBlRnJvbUFycmF5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGlwZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT2JzZXJ2YWJsZSA9IHZvaWQgMDtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9TdWJzY3JpYmVyXCIpO1xudmFyIFN1YnNjcmlwdGlvbl8xID0gcmVxdWlyZShcIi4vU3Vic2NyaXB0aW9uXCIpO1xudmFyIG9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuL3N5bWJvbC9vYnNlcnZhYmxlXCIpO1xudmFyIHBpcGVfMSA9IHJlcXVpcmUoXCIuL3V0aWwvcGlwZVwiKTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuL2NvbmZpZ1wiKTtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi91dGlsL2lzRnVuY3Rpb25cIik7XG52YXIgZXJyb3JDb250ZXh0XzEgPSByZXF1aXJlKFwiLi91dGlsL2Vycm9yQ29udGV4dFwiKTtcbnZhciBPYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZSkge1xuICAgICAgICBpZiAoc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmUgPSBzdWJzY3JpYmU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgb2JzZXJ2YWJsZS5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIChvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBzdWJzY3JpYmVyID0gaXNTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0KSA/IG9ic2VydmVyT3JOZXh0IDogbmV3IFN1YnNjcmliZXJfMS5TYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgZXJyb3JDb250ZXh0XzEuZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCBvcGVyYXRvciA9IF9hLm9wZXJhdG9yLCBzb3VyY2UgPSBfYS5zb3VyY2U7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvclxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTdWJzY3JpYmVyXzEuU2FmZVN1YnNjcmliZXIoe1xuICAgICAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IHJlc29sdmUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF90aGlzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZVtvYnNlcnZhYmxlXzEub2JzZXJ2YWJsZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbnNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGlwZV8xLnBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiAodmFsdWUgPSB4KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gcmVqZWN0KGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUodmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZTtcbn0oKSk7XG5leHBvcnRzLk9ic2VydmFibGUgPSBPYnNlcnZhYmxlO1xuZnVuY3Rpb24gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IHByb21pc2VDdG9yICE9PSBudWxsICYmIHByb21pc2VDdG9yICE9PSB2b2lkIDAgPyBwcm9taXNlQ3RvciA6IGNvbmZpZ18xLmNvbmZpZy5Qcm9taXNlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gaXNPYnNlcnZlcih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbih2YWx1ZS5uZXh0KSAmJiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbih2YWx1ZS5lcnJvcikgJiYgaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24odmFsdWUuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gaXNTdWJzY3JpYmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmliZXJfMS5TdWJzY3JpYmVyKSB8fCAoaXNPYnNlcnZlcih2YWx1ZSkgJiYgU3Vic2NyaXB0aW9uXzEuaXNTdWJzY3JpcHRpb24odmFsdWUpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9ic2VydmFibGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm9wZXJhdGUgPSBleHBvcnRzLmhhc0xpZnQgPSB2b2lkIDA7XG52YXIgaXNGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4vaXNGdW5jdGlvblwiKTtcbmZ1bmN0aW9uIGhhc0xpZnQoc291cmNlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHNvdXJjZSA9PT0gbnVsbCB8fCBzb3VyY2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNvdXJjZS5saWZ0KTtcbn1cbmV4cG9ydHMuaGFzTGlmdCA9IGhhc0xpZnQ7XG5mdW5jdGlvbiBvcGVyYXRlKGluaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICBpZiAoaGFzTGlmdChzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLmxpZnQoZnVuY3Rpb24gKGxpZnRlZFNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbml0KGxpZnRlZFNvdXJjZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlJyk7XG4gICAgfTtcbn1cbmV4cG9ydHMub3BlcmF0ZSA9IG9wZXJhdGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saWZ0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT3BlcmF0b3JTdWJzY3JpYmVyID0gZXhwb3J0cy5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgPSB2b2lkIDA7XG52YXIgU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4uL1N1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSkge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpO1xufVxuZXhwb3J0cy5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgPSBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXI7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3BlcmF0b3JTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplLCBzaG91bGRVbnN1YnNjcmliZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7XG4gICAgICAgIF90aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7XG4gICAgICAgIF90aGlzLl9uZXh0ID0gb25OZXh0XG4gICAgICAgICAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX25leHQ7XG4gICAgICAgIF90aGlzLl9lcnJvciA9IG9uRXJyb3JcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fZXJyb3I7XG4gICAgICAgIF90aGlzLl9jb21wbGV0ZSA9IG9uQ29tcGxldGVcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3BlcmF0b3JTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICAgICAgICB2YXIgY2xvc2VkXzEgPSB0aGlzLmNsb3NlZDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICFjbG9zZWRfMSAmJiAoKF9hID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPcGVyYXRvclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXJfMS5TdWJzY3JpYmVyKSk7XG5leHBvcnRzLk9wZXJhdG9yU3Vic2NyaWJlciA9IE9wZXJhdG9yU3Vic2NyaWJlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9wZXJhdG9yU3Vic2NyaWJlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVmQ291bnQgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIHJlZkNvdW50KCkge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBjb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgc291cmNlLl9yZWZDb3VudCsrO1xuICAgICAgICB2YXIgcmVmQ291bnRlciA9IE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXNvdXJjZSB8fCBzb3VyY2UuX3JlZkNvdW50IDw9IDAgfHwgMCA8IC0tc291cmNlLl9yZWZDb3VudCkge1xuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBzaGFyZWRDb25uZWN0aW9uID0gc291cmNlLl9jb25uZWN0aW9uO1xuICAgICAgICAgICAgdmFyIGNvbm4gPSBjb25uZWN0aW9uO1xuICAgICAgICAgICAgY29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgICBpZiAoc2hhcmVkQ29ubmVjdGlvbiAmJiAoIWNvbm4gfHwgc2hhcmVkQ29ubmVjdGlvbiA9PT0gY29ubikpIHtcbiAgICAgICAgICAgICAgICBzaGFyZWRDb25uZWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHJlZkNvdW50ZXIpO1xuICAgICAgICBpZiAoIXJlZkNvdW50ZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICBjb25uZWN0aW9uID0gc291cmNlLmNvbm5lY3QoKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5yZWZDb3VudCA9IHJlZkNvdW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVmQ291bnQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db25uZWN0YWJsZU9ic2VydmFibGUgPSB2b2lkIDA7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL09ic2VydmFibGVcIik7XG52YXIgU3Vic2NyaXB0aW9uXzEgPSByZXF1aXJlKFwiLi4vU3Vic2NyaXB0aW9uXCIpO1xudmFyIHJlZkNvdW50XzEgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzL3JlZkNvdW50XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4uL29wZXJhdG9ycy9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBDb25uZWN0YWJsZU9ic2VydmFibGUgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDb25uZWN0YWJsZU9ic2VydmFibGUsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ29ubmVjdGFibGVPYnNlcnZhYmxlKHNvdXJjZSwgc3ViamVjdEZhY3RvcnkpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICBfdGhpcy5zdWJqZWN0RmFjdG9yeSA9IHN1YmplY3RGYWN0b3J5O1xuICAgICAgICBfdGhpcy5fc3ViamVjdCA9IG51bGw7XG4gICAgICAgIF90aGlzLl9yZWZDb3VudCA9IDA7XG4gICAgICAgIF90aGlzLl9jb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgaWYgKGxpZnRfMS5oYXNMaWZ0KHNvdXJjZSkpIHtcbiAgICAgICAgICAgIF90aGlzLmxpZnQgPSBzb3VyY2UubGlmdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBDb25uZWN0YWJsZU9ic2VydmFibGUucHJvdG90eXBlLmdldFN1YmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gdGhpcy5fc3ViamVjdDtcbiAgICAgICAgaWYgKCFzdWJqZWN0IHx8IHN1YmplY3QuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJqZWN0ID0gdGhpcy5zdWJqZWN0RmFjdG9yeSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zdWJqZWN0O1xuICAgIH07XG4gICAgQ29ubmVjdGFibGVPYnNlcnZhYmxlLnByb3RvdHlwZS5fdGVhcmRvd24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX3JlZkNvdW50ID0gMDtcbiAgICAgICAgdmFyIF9jb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvbjtcbiAgICAgICAgdGhpcy5fc3ViamVjdCA9IHRoaXMuX2Nvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICBfY29ubmVjdGlvbiA9PT0gbnVsbCB8fCBfY29ubmVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Nvbm5lY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGNvbm5lY3Rpb24gPSB0aGlzLl9jb25uZWN0aW9uO1xuICAgICAgICBpZiAoIWNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbm5lY3Rpb24gPSB0aGlzLl9jb25uZWN0aW9uID0gbmV3IFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgdmFyIHN1YmplY3RfMSA9IHRoaXMuZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgY29ubmVjdGlvbi5hZGQodGhpcy5zb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJqZWN0XzEsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLl90ZWFyZG93bigpO1xuICAgICAgICAgICAgICAgIHN1YmplY3RfMS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIF90aGlzLl90ZWFyZG93bigpO1xuICAgICAgICAgICAgICAgIHN1YmplY3RfMS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuX3RlYXJkb3duKCk7IH0pKSk7XG4gICAgICAgICAgICBpZiAoY29ubmVjdGlvbi5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uID0gU3Vic2NyaXB0aW9uXzEuU3Vic2NyaXB0aW9uLkVNUFRZO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb25uZWN0aW9uO1xuICAgIH07XG4gICAgQ29ubmVjdGFibGVPYnNlcnZhYmxlLnByb3RvdHlwZS5yZWZDb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHJlZkNvdW50XzEucmVmQ291bnQoKSh0aGlzKTtcbiAgICB9O1xuICAgIHJldHVybiBDb25uZWN0YWJsZU9ic2VydmFibGU7XG59KE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKSk7XG5leHBvcnRzLkNvbm5lY3RhYmxlT2JzZXJ2YWJsZSA9IENvbm5lY3RhYmxlT2JzZXJ2YWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNvbm5lY3RhYmxlT2JzZXJ2YWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlciA9IHZvaWQgMDtcbmV4cG9ydHMucGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlciA9IHtcbiAgICBub3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChleHBvcnRzLnBlcmZvcm1hbmNlVGltZXN0YW1wUHJvdmlkZXIuZGVsZWdhdGUgfHwgcGVyZm9ybWFuY2UpLm5vdygpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxuICAgICAgICB0b1tqXSA9IGZyb21baV07XG4gICAgcmV0dXJuIHRvO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYW5pbWF0aW9uRnJhbWVQcm92aWRlciA9IHZvaWQgMDtcbnZhciBTdWJzY3JpcHRpb25fMSA9IHJlcXVpcmUoXCIuLi9TdWJzY3JpcHRpb25cIik7XG5leHBvcnRzLmFuaW1hdGlvbkZyYW1lUHJvdmlkZXIgPSB7XG4gICAgc2NoZWR1bGU6IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVxdWVzdCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZTtcbiAgICAgICAgdmFyIGNhbmNlbCA9IGNhbmNlbEFuaW1hdGlvbkZyYW1lO1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBleHBvcnRzLmFuaW1hdGlvbkZyYW1lUHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgICAgcmVxdWVzdCA9IGRlbGVnYXRlLnJlcXVlc3RBbmltYXRpb25GcmFtZTtcbiAgICAgICAgICAgIGNhbmNlbCA9IGRlbGVnYXRlLmNhbmNlbEFuaW1hdGlvbkZyYW1lO1xuICAgICAgICB9XG4gICAgICAgIHZhciBoYW5kbGUgPSByZXF1ZXN0KGZ1bmN0aW9uICh0aW1lc3RhbXApIHtcbiAgICAgICAgICAgIGNhbmNlbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNhbGxiYWNrKHRpbWVzdGFtcCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbihmdW5jdGlvbiAoKSB7IHJldHVybiBjYW5jZWwgPT09IG51bGwgfHwgY2FuY2VsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjYW5jZWwoaGFuZGxlKTsgfSk7XG4gICAgfSxcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsZWdhdGUgPSBleHBvcnRzLmFuaW1hdGlvbkZyYW1lUHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHx8IHJlcXVlc3RBbmltYXRpb25GcmFtZSkuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRlbGVnYXRlID0gZXhwb3J0cy5hbmltYXRpb25GcmFtZVByb3ZpZGVyLmRlbGVnYXRlO1xuICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2FuY2VsQW5pbWF0aW9uRnJhbWUpIHx8IGNhbmNlbEFuaW1hdGlvbkZyYW1lKS5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbmltYXRpb25GcmFtZVByb3ZpZGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hbmltYXRpb25GcmFtZXMgPSB2b2lkIDA7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uLy4uL09ic2VydmFibGVcIik7XG52YXIgcGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlcl8xID0gcmVxdWlyZShcIi4uLy4uL3NjaGVkdWxlci9wZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyXCIpO1xudmFyIGFuaW1hdGlvbkZyYW1lUHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuLi8uLi9zY2hlZHVsZXIvYW5pbWF0aW9uRnJhbWVQcm92aWRlclwiKTtcbmZ1bmN0aW9uIGFuaW1hdGlvbkZyYW1lcyh0aW1lc3RhbXBQcm92aWRlcikge1xuICAgIHJldHVybiB0aW1lc3RhbXBQcm92aWRlciA/IGFuaW1hdGlvbkZyYW1lc0ZhY3RvcnkodGltZXN0YW1wUHJvdmlkZXIpIDogREVGQVVMVF9BTklNQVRJT05fRlJBTUVTO1xufVxuZXhwb3J0cy5hbmltYXRpb25GcmFtZXMgPSBhbmltYXRpb25GcmFtZXM7XG5mdW5jdGlvbiBhbmltYXRpb25GcmFtZXNGYWN0b3J5KHRpbWVzdGFtcFByb3ZpZGVyKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgcHJvdmlkZXIgPSB0aW1lc3RhbXBQcm92aWRlciB8fCBwZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyXzEucGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlcjtcbiAgICAgICAgdmFyIHN0YXJ0ID0gcHJvdmlkZXIubm93KCk7XG4gICAgICAgIHZhciBpZCA9IDA7XG4gICAgICAgIHZhciBydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBhbmltYXRpb25GcmFtZVByb3ZpZGVyXzEuYW5pbWF0aW9uRnJhbWVQcm92aWRlci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKHRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICBpZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBub3cgPSBwcm92aWRlci5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wUHJvdmlkZXIgPyBub3cgOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkOiBub3cgLSBzdGFydCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJ1bigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBydW4oKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbkZyYW1lUHJvdmlkZXJfMS5hbmltYXRpb25GcmFtZVByb3ZpZGVyLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbnZhciBERUZBVUxUX0FOSU1BVElPTl9GUkFNRVMgPSBhbmltYXRpb25GcmFtZXNGYWN0b3J5KCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbmltYXRpb25GcmFtZXMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gdm9pZCAwO1xudmFyIGNyZWF0ZUVycm9yQ2xhc3NfMSA9IHJlcXVpcmUoXCIuL2NyZWF0ZUVycm9yQ2xhc3NcIik7XG5leHBvcnRzLk9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzc18xLmNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBPYmplY3RVbnN1YnNjcmliZWRFcnJvckltcGwoKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ09iamVjdFVuc3Vic2NyaWJlZEVycm9yJztcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ29iamVjdCB1bnN1YnNjcmliZWQnO1xuICAgIH07XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9iamVjdFVuc3Vic2NyaWJlZEVycm9yLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX3ZhbHVlcyA9ICh0aGlzICYmIHRoaXMuX192YWx1ZXMpIHx8IGZ1bmN0aW9uKG8pIHtcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQW5vbnltb3VzU3ViamVjdCA9IGV4cG9ydHMuU3ViamVjdCA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi9PYnNlcnZhYmxlXCIpO1xudmFyIFN1YnNjcmlwdGlvbl8xID0gcmVxdWlyZShcIi4vU3Vic2NyaXB0aW9uXCIpO1xudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yXzEgPSByZXF1aXJlKFwiLi91dGlsL09iamVjdFVuc3Vic2NyaWJlZEVycm9yXCIpO1xudmFyIGFyclJlbW92ZV8xID0gcmVxdWlyZShcIi4vdXRpbC9hcnJSZW1vdmVcIik7XG52YXIgZXJyb3JDb250ZXh0XzEgPSByZXF1aXJlKFwiLi91dGlsL2Vycm9yQ29udGV4dFwiKTtcbnZhciBTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJqZWN0KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIF90aGlzLm9ic2VydmVycyA9IFtdO1xuICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YmplY3QucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSBuZXcgQW5vbnltb3VzU3ViamVjdCh0aGlzLCB0aGlzKTtcbiAgICAgICAgc3ViamVjdC5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPYmplY3RVbnN1YnNjcmliZWRFcnJvcl8xLk9iamVjdFVuc3Vic2NyaWJlZEVycm9yKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0XzEuZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKF90aGlzLm9ic2VydmVycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9iID0gX192YWx1ZXMoX3RoaXMuY3VycmVudE9ic2VydmVycyksIF9jID0gX2IubmV4dCgpOyAhX2MuZG9uZTsgX2MgPSBfYi5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlciA9IF9jLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfYyAmJiAhX2MuZG9uZSAmJiAoX2EgPSBfYi5yZXR1cm4pKSBfYS5jYWxsKF9iKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHRfMS5lcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIF90aGlzLnRocm93bkVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dF8xLmVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3ViamVjdC5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5vYnNlcnZlcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZW5ndGgpID4gMDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCBzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbm5lclN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZCwgb2JzZXJ2ZXJzID0gX2Eub2JzZXJ2ZXJzO1xuICAgICAgICBpZiAoaGFzRXJyb3IgfHwgaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gU3Vic2NyaXB0aW9uXzEuRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIG9ic2VydmVycy5wdXNoKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgICAgIGFyclJlbW92ZV8xLmFyclJlbW92ZShvYnNlcnZlcnMsIHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgdGhyb3duRXJyb3IgPSBfYS50aHJvd25FcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkO1xuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IodGhyb3duRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBTdWJqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKTtcbiAgICB9O1xuICAgIHJldHVybiBTdWJqZWN0O1xufShPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZSkpO1xuZXhwb3J0cy5TdWJqZWN0ID0gU3ViamVjdDtcbnZhciBBbm9ueW1vdXNTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQW5vbnltb3VzU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5leHQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZXJyKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29tcGxldGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcikpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFN1YnNjcmlwdGlvbl8xLkVNUFRZX1NVQlNDUklQVElPTjtcbiAgICB9O1xuICAgIHJldHVybiBBbm9ueW1vdXNTdWJqZWN0O1xufShTdWJqZWN0KSk7XG5leHBvcnRzLkFub255bW91c1N1YmplY3QgPSBBbm9ueW1vdXNTdWJqZWN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3ViamVjdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkJlaGF2aW9yU3ViamVjdCA9IHZvaWQgMDtcbnZhciBTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi9TdWJqZWN0XCIpO1xudmFyIEJlaGF2aW9yU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEJlaGF2aW9yU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBCZWhhdmlvclN1YmplY3QoX3ZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLl92YWx1ZSA9IF92YWx1ZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmVoYXZpb3JTdWJqZWN0LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEJlaGF2aW9yU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSBfc3VwZXIucHJvdG90eXBlLl9zdWJzY3JpYmUuY2FsbCh0aGlzLCBzdWJzY3JpYmVyKTtcbiAgICAgICAgIXN1YnNjcmlwdGlvbi5jbG9zZWQgJiYgc3Vic2NyaWJlci5uZXh0KHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgICB9O1xuICAgIEJlaGF2aW9yU3ViamVjdC5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIHRocm93bkVycm9yID0gX2EudGhyb3duRXJyb3IsIF92YWx1ZSA9IF9hLl92YWx1ZTtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyB0aHJvd25FcnJvcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHJldHVybiBfdmFsdWU7XG4gICAgfTtcbiAgICBCZWhhdmlvclN1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcywgKHRoaXMuX3ZhbHVlID0gdmFsdWUpKTtcbiAgICB9O1xuICAgIHJldHVybiBCZWhhdmlvclN1YmplY3Q7XG59KFN1YmplY3RfMS5TdWJqZWN0KSk7XG5leHBvcnRzLkJlaGF2aW9yU3ViamVjdCA9IEJlaGF2aW9yU3ViamVjdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUJlaGF2aW9yU3ViamVjdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGF0ZVRpbWVzdGFtcFByb3ZpZGVyID0gdm9pZCAwO1xuZXhwb3J0cy5kYXRlVGltZXN0YW1wUHJvdmlkZXIgPSB7XG4gICAgbm93OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoZXhwb3J0cy5kYXRlVGltZXN0YW1wUHJvdmlkZXIuZGVsZWdhdGUgfHwgRGF0ZSkubm93KCk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGVUaW1lc3RhbXBQcm92aWRlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlcGxheVN1YmplY3QgPSB2b2lkIDA7XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZShcIi4vU3ViamVjdFwiKTtcbnZhciBkYXRlVGltZXN0YW1wUHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuL3NjaGVkdWxlci9kYXRlVGltZXN0YW1wUHJvdmlkZXJcIik7XG52YXIgUmVwbGF5U3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFJlcGxheVN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUmVwbGF5U3ViamVjdChfYnVmZmVyU2l6ZSwgX3dpbmRvd1RpbWUsIF90aW1lc3RhbXBQcm92aWRlcikge1xuICAgICAgICBpZiAoX2J1ZmZlclNpemUgPT09IHZvaWQgMCkgeyBfYnVmZmVyU2l6ZSA9IEluZmluaXR5OyB9XG4gICAgICAgIGlmIChfd2luZG93VGltZSA9PT0gdm9pZCAwKSB7IF93aW5kb3dUaW1lID0gSW5maW5pdHk7IH1cbiAgICAgICAgaWYgKF90aW1lc3RhbXBQcm92aWRlciA9PT0gdm9pZCAwKSB7IF90aW1lc3RhbXBQcm92aWRlciA9IGRhdGVUaW1lc3RhbXBQcm92aWRlcl8xLmRhdGVUaW1lc3RhbXBQcm92aWRlcjsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5fYnVmZmVyU2l6ZSA9IF9idWZmZXJTaXplO1xuICAgICAgICBfdGhpcy5fd2luZG93VGltZSA9IF93aW5kb3dUaW1lO1xuICAgICAgICBfdGhpcy5fdGltZXN0YW1wUHJvdmlkZXIgPSBfdGltZXN0YW1wUHJvdmlkZXI7XG4gICAgICAgIF90aGlzLl9idWZmZXIgPSBbXTtcbiAgICAgICAgX3RoaXMuX2luZmluaXRlVGltZVdpbmRvdyA9IHRydWU7XG4gICAgICAgIF90aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3cgPSBfd2luZG93VGltZSA9PT0gSW5maW5pdHk7XG4gICAgICAgIF90aGlzLl9idWZmZXJTaXplID0gTWF0aC5tYXgoMSwgX2J1ZmZlclNpemUpO1xuICAgICAgICBfdGhpcy5fd2luZG93VGltZSA9IE1hdGgubWF4KDEsIF93aW5kb3dUaW1lKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBSZXBsYXlTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZCwgX2J1ZmZlciA9IF9hLl9idWZmZXIsIF9pbmZpbml0ZVRpbWVXaW5kb3cgPSBfYS5faW5maW5pdGVUaW1lV2luZG93LCBfdGltZXN0YW1wUHJvdmlkZXIgPSBfYS5fdGltZXN0YW1wUHJvdmlkZXIsIF93aW5kb3dUaW1lID0gX2EuX3dpbmRvd1RpbWU7XG4gICAgICAgIGlmICghaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBfYnVmZmVyLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgIV9pbmZpbml0ZVRpbWVXaW5kb3cgJiYgX2J1ZmZlci5wdXNoKF90aW1lc3RhbXBQcm92aWRlci5ub3coKSArIF93aW5kb3dUaW1lKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90cmltQnVmZmVyKCk7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICB9O1xuICAgIFJlcGxheVN1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHRoaXMuX3RyaW1CdWZmZXIoKTtcbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBfaW5maW5pdGVUaW1lV2luZG93ID0gX2EuX2luZmluaXRlVGltZVdpbmRvdywgX2J1ZmZlciA9IF9hLl9idWZmZXI7XG4gICAgICAgIHZhciBjb3B5ID0gX2J1ZmZlci5zbGljZSgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvcHkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSArPSBfaW5maW5pdGVUaW1lV2luZG93ID8gMSA6IDIpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChjb3B5W2ldKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICAgIH07XG4gICAgUmVwbGF5U3ViamVjdC5wcm90b3R5cGUuX3RyaW1CdWZmZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIF9idWZmZXJTaXplID0gX2EuX2J1ZmZlclNpemUsIF90aW1lc3RhbXBQcm92aWRlciA9IF9hLl90aW1lc3RhbXBQcm92aWRlciwgX2J1ZmZlciA9IF9hLl9idWZmZXIsIF9pbmZpbml0ZVRpbWVXaW5kb3cgPSBfYS5faW5maW5pdGVUaW1lV2luZG93O1xuICAgICAgICB2YXIgYWRqdXN0ZWRCdWZmZXJTaXplID0gKF9pbmZpbml0ZVRpbWVXaW5kb3cgPyAxIDogMikgKiBfYnVmZmVyU2l6ZTtcbiAgICAgICAgX2J1ZmZlclNpemUgPCBJbmZpbml0eSAmJiBhZGp1c3RlZEJ1ZmZlclNpemUgPCBfYnVmZmVyLmxlbmd0aCAmJiBfYnVmZmVyLnNwbGljZSgwLCBfYnVmZmVyLmxlbmd0aCAtIGFkanVzdGVkQnVmZmVyU2l6ZSk7XG4gICAgICAgIGlmICghX2luZmluaXRlVGltZVdpbmRvdykge1xuICAgICAgICAgICAgdmFyIG5vdyA9IF90aW1lc3RhbXBQcm92aWRlci5ub3coKTtcbiAgICAgICAgICAgIHZhciBsYXN0ID0gMDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgX2J1ZmZlci5sZW5ndGggJiYgX2J1ZmZlcltpXSA8PSBub3c7IGkgKz0gMikge1xuICAgICAgICAgICAgICAgIGxhc3QgPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdCAmJiBfYnVmZmVyLnNwbGljZSgwLCBsYXN0ICsgMSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBSZXBsYXlTdWJqZWN0O1xufShTdWJqZWN0XzEuU3ViamVjdCkpO1xuZXhwb3J0cy5SZXBsYXlTdWJqZWN0ID0gUmVwbGF5U3ViamVjdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlcGxheVN1YmplY3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Bc3luY1N1YmplY3QgPSB2b2lkIDA7XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZShcIi4vU3ViamVjdFwiKTtcbnZhciBBc3luY1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY1N1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNTdWJqZWN0KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuX3ZhbHVlID0gbnVsbDtcbiAgICAgICAgX3RoaXMuX2hhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIF90aGlzLl9pc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNTdWJqZWN0LnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIF9oYXNWYWx1ZSA9IF9hLl9oYXNWYWx1ZSwgX3ZhbHVlID0gX2EuX3ZhbHVlLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQsIF9pc0NvbXBsZXRlID0gX2EuX2lzQ29tcGxldGU7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9wcGVkIHx8IF9pc0NvbXBsZXRlKSB7XG4gICAgICAgICAgICBfaGFzVmFsdWUgJiYgc3Vic2NyaWJlci5uZXh0KF92YWx1ZSk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5faGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY1N1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBfaGFzVmFsdWUgPSBfYS5faGFzVmFsdWUsIF92YWx1ZSA9IF9hLl92YWx1ZSwgX2lzQ29tcGxldGUgPSBfYS5faXNDb21wbGV0ZTtcbiAgICAgICAgaWYgKCFfaXNDb21wbGV0ZSkge1xuICAgICAgICAgICAgdGhpcy5faXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICBfaGFzVmFsdWUgJiYgX3N1cGVyLnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcywgX3ZhbHVlKTtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUuY29tcGxldGUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jU3ViamVjdDtcbn0oU3ViamVjdF8xLlN1YmplY3QpKTtcbmV4cG9ydHMuQXN5bmNTdWJqZWN0ID0gQXN5bmNTdWJqZWN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXN5bmNTdWJqZWN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQWN0aW9uID0gdm9pZCAwO1xudmFyIFN1YnNjcmlwdGlvbl8xID0gcmVxdWlyZShcIi4uL1N1YnNjcmlwdGlvblwiKTtcbnZhciBBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICB9XG4gICAgQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEFjdGlvbjtcbn0oU3Vic2NyaXB0aW9uXzEuU3Vic2NyaXB0aW9uKSk7XG5leHBvcnRzLkFjdGlvbiA9IEFjdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFjdGlvbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmludGVydmFsUHJvdmlkZXIgPSB2b2lkIDA7XG5leHBvcnRzLmludGVydmFsUHJvdmlkZXIgPSB7XG4gICAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGV4cG9ydHMuaW50ZXJ2YWxQcm92aWRlci5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5zZXRJbnRlcnZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLnNldEludGVydmFsLmFwcGx5KGRlbGVnYXRlLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBleHBvcnRzLmludGVydmFsUHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhckludGVydmFsKSB8fCBjbGVhckludGVydmFsKShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcnZhbFByb3ZpZGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXN5bmNBY3Rpb24gPSB2b2lkIDA7XG52YXIgQWN0aW9uXzEgPSByZXF1aXJlKFwiLi9BY3Rpb25cIik7XG52YXIgaW50ZXJ2YWxQcm92aWRlcl8xID0gcmVxdWlyZShcIi4vaW50ZXJ2YWxQcm92aWRlclwiKTtcbnZhciBhcnJSZW1vdmVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyclJlbW92ZVwiKTtcbnZhciBBc3luY0FjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgX3RoaXMud29yayA9IHdvcms7XG4gICAgICAgIF90aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB2YXIgaWQgPSB0aGlzLmlkO1xuICAgICAgICB2YXIgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWxheSA9IGRlbGF5O1xuICAgICAgICB0aGlzLmlkID0gKF9hID0gdGhpcy5pZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzY2hlZHVsZXIsIHRoaXMuaWQsIGRlbGF5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBfaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gaW50ZXJ2YWxQcm92aWRlcl8xLmludGVydmFsUHJvdmlkZXIuc2V0SW50ZXJ2YWwoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCB0aGlzKSwgZGVsYXkpO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24gKF9zY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gZGVsYXkgJiYgdGhpcy5wZW5kaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnRlcnZhbFByb3ZpZGVyXzEuaW50ZXJ2YWxQcm92aWRlci5jbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLl9leGVjdXRlKHN0YXRlLCBkZWxheSk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgX2RlbGF5KSB7XG4gICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvclZhbHVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy53b3JrKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICBlcnJvclZhbHVlID0gZSA/IGUgOiBuZXcgRXJyb3IoJ1NjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JlZCkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yVmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcywgaWQgPSBfYS5pZCwgc2NoZWR1bGVyID0gX2Euc2NoZWR1bGVyO1xuICAgICAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGFyclJlbW92ZV8xLmFyclJlbW92ZShhY3Rpb25zLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jQWN0aW9uO1xufShBY3Rpb25fMS5BY3Rpb24pKTtcbmV4cG9ydHMuQXN5bmNBY3Rpb24gPSBBc3luY0FjdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFzeW5jQWN0aW9uLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5UZXN0VG9vbHMgPSBleHBvcnRzLkltbWVkaWF0ZSA9IHZvaWQgMDtcbnZhciBuZXh0SGFuZGxlID0gMTtcbnZhciByZXNvbHZlZDtcbnZhciBhY3RpdmVIYW5kbGVzID0ge307XG5mdW5jdGlvbiBmaW5kQW5kQ2xlYXJIYW5kbGUoaGFuZGxlKSB7XG4gICAgaWYgKGhhbmRsZSBpbiBhY3RpdmVIYW5kbGVzKSB7XG4gICAgICAgIGRlbGV0ZSBhY3RpdmVIYW5kbGVzW2hhbmRsZV07XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLkltbWVkaWF0ZSA9IHtcbiAgICBzZXRJbW1lZGlhdGU6IGZ1bmN0aW9uIChjYikge1xuICAgICAgICB2YXIgaGFuZGxlID0gbmV4dEhhbmRsZSsrO1xuICAgICAgICBhY3RpdmVIYW5kbGVzW2hhbmRsZV0gPSB0cnVlO1xuICAgICAgICBpZiAoIXJlc29sdmVkKSB7XG4gICAgICAgICAgICByZXNvbHZlZCA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmVkLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gZmluZEFuZENsZWFySGFuZGxlKGhhbmRsZSkgJiYgY2IoKTsgfSk7XG4gICAgICAgIHJldHVybiBoYW5kbGU7XG4gICAgfSxcbiAgICBjbGVhckltbWVkaWF0ZTogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICBmaW5kQW5kQ2xlYXJIYW5kbGUoaGFuZGxlKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuVGVzdFRvb2xzID0ge1xuICAgIHBlbmRpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGFjdGl2ZUhhbmRsZXMpLmxlbmd0aDtcbiAgICB9XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SW1tZWRpYXRlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxuICAgICAgICB0b1tqXSA9IGZyb21baV07XG4gICAgcmV0dXJuIHRvO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaW1tZWRpYXRlUHJvdmlkZXIgPSB2b2lkIDA7XG52YXIgSW1tZWRpYXRlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9JbW1lZGlhdGVcIik7XG52YXIgc2V0SW1tZWRpYXRlID0gSW1tZWRpYXRlXzEuSW1tZWRpYXRlLnNldEltbWVkaWF0ZSwgY2xlYXJJbW1lZGlhdGUgPSBJbW1lZGlhdGVfMS5JbW1lZGlhdGUuY2xlYXJJbW1lZGlhdGU7XG5leHBvcnRzLmltbWVkaWF0ZVByb3ZpZGVyID0ge1xuICAgIHNldEltbWVkaWF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGV4cG9ydHMuaW1tZWRpYXRlUHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5zZXRJbW1lZGlhdGUpIHx8IHNldEltbWVkaWF0ZSkuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFySW1tZWRpYXRlOiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGV4cG9ydHMuaW1tZWRpYXRlUHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhckltbWVkaWF0ZSkgfHwgY2xlYXJJbW1lZGlhdGUpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWltbWVkaWF0ZVByb3ZpZGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXNhcEFjdGlvbiA9IHZvaWQgMDtcbnZhciBBc3luY0FjdGlvbl8xID0gcmVxdWlyZShcIi4vQXN5bmNBY3Rpb25cIik7XG52YXIgaW1tZWRpYXRlUHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuL2ltbWVkaWF0ZVByb3ZpZGVyXCIpO1xudmFyIEFzYXBBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc2FwQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzYXBBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc2FwQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9PSBudWxsICYmIGRlbGF5ID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgc2NoZWR1bGVyLmFjdGlvbnMucHVzaCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5fc2NoZWR1bGVkIHx8IChzY2hlZHVsZXIuX3NjaGVkdWxlZCA9IGltbWVkaWF0ZVByb3ZpZGVyXzEuaW1tZWRpYXRlUHJvdmlkZXIuc2V0SW1tZWRpYXRlKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdW5kZWZpbmVkKSkpO1xuICAgIH07XG4gICAgQXNhcEFjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9IG51bGwgPyBkZWxheSA+IDAgOiB0aGlzLmRlbGF5ID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgaWYgKGlkICE9IG51bGwgJiYgKChfYSA9IGFjdGlvbnNbYWN0aW9ucy5sZW5ndGggLSAxXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmlkKSAhPT0gaWQpIHtcbiAgICAgICAgICAgIGltbWVkaWF0ZVByb3ZpZGVyXzEuaW1tZWRpYXRlUHJvdmlkZXIuY2xlYXJJbW1lZGlhdGUoaWQpO1xuICAgICAgICAgICAgaWYgKHNjaGVkdWxlci5fc2NoZWR1bGVkID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlci5fc2NoZWR1bGVkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICByZXR1cm4gQXNhcEFjdGlvbjtcbn0oQXN5bmNBY3Rpb25fMS5Bc3luY0FjdGlvbikpO1xuZXhwb3J0cy5Bc2FwQWN0aW9uID0gQXNhcEFjdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFzYXBBY3Rpb24uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNjaGVkdWxlciA9IHZvaWQgMDtcbnZhciBkYXRlVGltZXN0YW1wUHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuL3NjaGVkdWxlci9kYXRlVGltZXN0YW1wUHJvdmlkZXJcIik7XG52YXIgU2NoZWR1bGVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTY2hlZHVsZXIoc2NoZWR1bGVyQWN0aW9uQ3Rvciwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHNjaGVkdWxlckFjdGlvbkN0b3I7XG4gICAgICAgIHRoaXMubm93ID0gbm93O1xuICAgIH1cbiAgICBTY2hlZHVsZXIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHdvcmssIGRlbGF5LCBzdGF0ZSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgd29yaykuc2NoZWR1bGUoc3RhdGUsIGRlbGF5KTtcbiAgICB9O1xuICAgIFNjaGVkdWxlci5ub3cgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXJfMS5kYXRlVGltZXN0YW1wUHJvdmlkZXIubm93O1xuICAgIHJldHVybiBTY2hlZHVsZXI7XG59KCkpO1xuZXhwb3J0cy5TY2hlZHVsZXIgPSBTY2hlZHVsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TY2hlZHVsZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Bc3luY1NjaGVkdWxlciA9IHZvaWQgMDtcbnZhciBTY2hlZHVsZXJfMSA9IHJlcXVpcmUoXCIuLi9TY2hlZHVsZXJcIik7XG52YXIgQXN5bmNTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY1NjaGVkdWxlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY1NjaGVkdWxlcihTY2hlZHVsZXJBY3Rpb24sIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyXzEuU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBTY2hlZHVsZXJBY3Rpb24sIG5vdykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuYWN0aW9ucyA9IFtdO1xuICAgICAgICBfdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNTY2hlZHVsZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoKGVycm9yID0gYWN0aW9uLmV4ZWN1dGUoYWN0aW9uLnN0YXRlLCBhY3Rpb24uZGVsYXkpKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY1NjaGVkdWxlcjtcbn0oU2NoZWR1bGVyXzEuU2NoZWR1bGVyKSk7XG5leHBvcnRzLkFzeW5jU2NoZWR1bGVyID0gQXN5bmNTY2hlZHVsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Bc3luY1NjaGVkdWxlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFzYXBTY2hlZHVsZXIgPSB2b2lkIDA7XG52YXIgQXN5bmNTY2hlZHVsZXJfMSA9IHJlcXVpcmUoXCIuL0FzeW5jU2NoZWR1bGVyXCIpO1xudmFyIEFzYXBTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc2FwU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzYXBTY2hlZHVsZXIoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgQXNhcFNjaGVkdWxlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgIHZhciBmbHVzaElkID0gdGhpcy5fc2NoZWR1bGVkO1xuICAgICAgICB0aGlzLl9zY2hlZHVsZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIGFjdGlvbiA9IGFjdGlvbiB8fCBhY3Rpb25zLnNoaWZ0KCk7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICgoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zWzBdKSAmJiBhY3Rpb24uaWQgPT09IGZsdXNoSWQgJiYgYWN0aW9ucy5zaGlmdCgpKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zWzBdKSAmJiBhY3Rpb24uaWQgPT09IGZsdXNoSWQgJiYgYWN0aW9ucy5zaGlmdCgpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzYXBTY2hlZHVsZXI7XG59KEFzeW5jU2NoZWR1bGVyXzEuQXN5bmNTY2hlZHVsZXIpKTtcbmV4cG9ydHMuQXNhcFNjaGVkdWxlciA9IEFzYXBTY2hlZHVsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Bc2FwU2NoZWR1bGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hc2FwID0gZXhwb3J0cy5hc2FwU2NoZWR1bGVyID0gdm9pZCAwO1xudmFyIEFzYXBBY3Rpb25fMSA9IHJlcXVpcmUoXCIuL0FzYXBBY3Rpb25cIik7XG52YXIgQXNhcFNjaGVkdWxlcl8xID0gcmVxdWlyZShcIi4vQXNhcFNjaGVkdWxlclwiKTtcbmV4cG9ydHMuYXNhcFNjaGVkdWxlciA9IG5ldyBBc2FwU2NoZWR1bGVyXzEuQXNhcFNjaGVkdWxlcihBc2FwQWN0aW9uXzEuQXNhcEFjdGlvbik7XG5leHBvcnRzLmFzYXAgPSBleHBvcnRzLmFzYXBTY2hlZHVsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hc2FwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hc3luYyA9IGV4cG9ydHMuYXN5bmNTY2hlZHVsZXIgPSB2b2lkIDA7XG52YXIgQXN5bmNBY3Rpb25fMSA9IHJlcXVpcmUoXCIuL0FzeW5jQWN0aW9uXCIpO1xudmFyIEFzeW5jU2NoZWR1bGVyXzEgPSByZXF1aXJlKFwiLi9Bc3luY1NjaGVkdWxlclwiKTtcbmV4cG9ydHMuYXN5bmNTY2hlZHVsZXIgPSBuZXcgQXN5bmNTY2hlZHVsZXJfMS5Bc3luY1NjaGVkdWxlcihBc3luY0FjdGlvbl8xLkFzeW5jQWN0aW9uKTtcbmV4cG9ydHMuYXN5bmMgPSBleHBvcnRzLmFzeW5jU2NoZWR1bGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXN5bmMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5RdWV1ZUFjdGlvbiA9IHZvaWQgMDtcbnZhciBBc3luY0FjdGlvbl8xID0gcmVxdWlyZShcIi4vQXN5bmNBY3Rpb25cIik7XG52YXIgUXVldWVBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhRdWV1ZUFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBRdWV1ZUFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLndvcmsgPSB3b3JrO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFF1ZXVlQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChkZWxheSA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnNjaGVkdWxlLmNhbGwodGhpcywgc3RhdGUsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZXIuZmx1c2godGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgUXVldWVBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHJldHVybiBkZWxheSA+IDAgfHwgdGhpcy5jbG9zZWQgPyBfc3VwZXIucHJvdG90eXBlLmV4ZWN1dGUuY2FsbCh0aGlzLCBzdGF0ZSwgZGVsYXkpIDogdGhpcy5fZXhlY3V0ZShzdGF0ZSwgZGVsYXkpO1xuICAgIH07XG4gICAgUXVldWVBY3Rpb24ucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAoKGRlbGF5ICE9IG51bGwgJiYgZGVsYXkgPiAwKSB8fCAoZGVsYXkgPT0gbnVsbCAmJiB0aGlzLmRlbGF5ID4gMCkpIHtcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkLmNhbGwodGhpcywgc2NoZWR1bGVyLCBpZCwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHNjaGVkdWxlci5mbHVzaCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfTtcbiAgICByZXR1cm4gUXVldWVBY3Rpb247XG59KEFzeW5jQWN0aW9uXzEuQXN5bmNBY3Rpb24pKTtcbmV4cG9ydHMuUXVldWVBY3Rpb24gPSBRdWV1ZUFjdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVF1ZXVlQWN0aW9uLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUXVldWVTY2hlZHVsZXIgPSB2b2lkIDA7XG52YXIgQXN5bmNTY2hlZHVsZXJfMSA9IHJlcXVpcmUoXCIuL0FzeW5jU2NoZWR1bGVyXCIpO1xudmFyIFF1ZXVlU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVldWVTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUXVldWVTY2hlZHVsZXIoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIFF1ZXVlU2NoZWR1bGVyO1xufShBc3luY1NjaGVkdWxlcl8xLkFzeW5jU2NoZWR1bGVyKSk7XG5leHBvcnRzLlF1ZXVlU2NoZWR1bGVyID0gUXVldWVTY2hlZHVsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1RdWV1ZVNjaGVkdWxlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucXVldWUgPSBleHBvcnRzLnF1ZXVlU2NoZWR1bGVyID0gdm9pZCAwO1xudmFyIFF1ZXVlQWN0aW9uXzEgPSByZXF1aXJlKFwiLi9RdWV1ZUFjdGlvblwiKTtcbnZhciBRdWV1ZVNjaGVkdWxlcl8xID0gcmVxdWlyZShcIi4vUXVldWVTY2hlZHVsZXJcIik7XG5leHBvcnRzLnF1ZXVlU2NoZWR1bGVyID0gbmV3IFF1ZXVlU2NoZWR1bGVyXzEuUXVldWVTY2hlZHVsZXIoUXVldWVBY3Rpb25fMS5RdWV1ZUFjdGlvbik7XG5leHBvcnRzLnF1ZXVlID0gZXhwb3J0cy5xdWV1ZVNjaGVkdWxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXF1ZXVlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQW5pbWF0aW9uRnJhbWVBY3Rpb24gPSB2b2lkIDA7XG52YXIgQXN5bmNBY3Rpb25fMSA9IHJlcXVpcmUoXCIuL0FzeW5jQWN0aW9uXCIpO1xudmFyIGFuaW1hdGlvbkZyYW1lUHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuL2FuaW1hdGlvbkZyYW1lUHJvdmlkZXJcIik7XG52YXIgQW5pbWF0aW9uRnJhbWVBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbmltYXRpb25GcmFtZUFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBbmltYXRpb25GcmFtZUFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLndvcmsgPSB3b3JrO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFuaW1hdGlvbkZyYW1lQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9PSBudWxsICYmIGRlbGF5ID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgc2NoZWR1bGVyLmFjdGlvbnMucHVzaCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5fc2NoZWR1bGVkIHx8IChzY2hlZHVsZXIuX3NjaGVkdWxlZCA9IGFuaW1hdGlvbkZyYW1lUHJvdmlkZXJfMS5hbmltYXRpb25GcmFtZVByb3ZpZGVyLnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7IHJldHVybiBzY2hlZHVsZXIuZmx1c2godW5kZWZpbmVkKTsgfSkpO1xuICAgIH07XG4gICAgQW5pbWF0aW9uRnJhbWVBY3Rpb24ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChkZWxheSAhPSBudWxsID8gZGVsYXkgPiAwIDogdGhpcy5kZWxheSA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkLmNhbGwodGhpcywgc2NoZWR1bGVyLCBpZCwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7XG4gICAgICAgIGlmIChpZCAhPSBudWxsICYmICgoX2EgPSBhY3Rpb25zW2FjdGlvbnMubGVuZ3RoIC0gMV0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pZCkgIT09IGlkKSB7XG4gICAgICAgICAgICBhbmltYXRpb25GcmFtZVByb3ZpZGVyXzEuYW5pbWF0aW9uRnJhbWVQcm92aWRlci5jYW5jZWxBbmltYXRpb25GcmFtZShpZCk7XG4gICAgICAgICAgICBzY2hlZHVsZXIuX3NjaGVkdWxlZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgcmV0dXJuIEFuaW1hdGlvbkZyYW1lQWN0aW9uO1xufShBc3luY0FjdGlvbl8xLkFzeW5jQWN0aW9uKSk7XG5leHBvcnRzLkFuaW1hdGlvbkZyYW1lQWN0aW9uID0gQW5pbWF0aW9uRnJhbWVBY3Rpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BbmltYXRpb25GcmFtZUFjdGlvbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyID0gdm9pZCAwO1xudmFyIEFzeW5jU2NoZWR1bGVyXzEgPSByZXF1aXJlKFwiLi9Bc3luY1NjaGVkdWxlclwiKTtcbnZhciBBbmltYXRpb25GcmFtZVNjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdmFyIGZsdXNoSWQgPSB0aGlzLl9zY2hlZHVsZWQ7XG4gICAgICAgIHRoaXMuX3NjaGVkdWxlZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgYWN0aW9uID0gYWN0aW9uIHx8IGFjdGlvbnMuc2hpZnQoKTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnNbMF0pICYmIGFjdGlvbi5pZCA9PT0gZmx1c2hJZCAmJiBhY3Rpb25zLnNoaWZ0KCkpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnNbMF0pICYmIGFjdGlvbi5pZCA9PT0gZmx1c2hJZCAmJiBhY3Rpb25zLnNoaWZ0KCkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXI7XG59KEFzeW5jU2NoZWR1bGVyXzEuQXN5bmNTY2hlZHVsZXIpKTtcbmV4cG9ydHMuQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgPSBBbmltYXRpb25GcmFtZVNjaGVkdWxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hbmltYXRpb25GcmFtZSA9IGV4cG9ydHMuYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgPSB2b2lkIDA7XG52YXIgQW5pbWF0aW9uRnJhbWVBY3Rpb25fMSA9IHJlcXVpcmUoXCIuL0FuaW1hdGlvbkZyYW1lQWN0aW9uXCIpO1xudmFyIEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyXzEgPSByZXF1aXJlKFwiLi9BbmltYXRpb25GcmFtZVNjaGVkdWxlclwiKTtcbmV4cG9ydHMuYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgPSBuZXcgQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXJfMS5BbmltYXRpb25GcmFtZVNjaGVkdWxlcihBbmltYXRpb25GcmFtZUFjdGlvbl8xLkFuaW1hdGlvbkZyYW1lQWN0aW9uKTtcbmV4cG9ydHMuYW5pbWF0aW9uRnJhbWUgPSBleHBvcnRzLmFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YW5pbWF0aW9uRnJhbWUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5WaXJ0dWFsQWN0aW9uID0gZXhwb3J0cy5WaXJ0dWFsVGltZVNjaGVkdWxlciA9IHZvaWQgMDtcbnZhciBBc3luY0FjdGlvbl8xID0gcmVxdWlyZShcIi4vQXN5bmNBY3Rpb25cIik7XG52YXIgU3Vic2NyaXB0aW9uXzEgPSByZXF1aXJlKFwiLi4vU3Vic2NyaXB0aW9uXCIpO1xudmFyIEFzeW5jU2NoZWR1bGVyXzEgPSByZXF1aXJlKFwiLi9Bc3luY1NjaGVkdWxlclwiKTtcbnZhciBWaXJ0dWFsVGltZVNjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFZpcnR1YWxUaW1lU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFZpcnR1YWxUaW1lU2NoZWR1bGVyKHNjaGVkdWxlckFjdGlvbkN0b3IsIG1heEZyYW1lcykge1xuICAgICAgICBpZiAoc2NoZWR1bGVyQWN0aW9uQ3RvciA9PT0gdm9pZCAwKSB7IHNjaGVkdWxlckFjdGlvbkN0b3IgPSBWaXJ0dWFsQWN0aW9uOyB9XG4gICAgICAgIGlmIChtYXhGcmFtZXMgPT09IHZvaWQgMCkgeyBtYXhGcmFtZXMgPSBJbmZpbml0eTsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXJBY3Rpb25DdG9yLCBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5mcmFtZTsgfSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMubWF4RnJhbWVzID0gbWF4RnJhbWVzO1xuICAgICAgICBfdGhpcy5mcmFtZSA9IDA7XG4gICAgICAgIF90aGlzLmluZGV4ID0gLTE7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgVmlydHVhbFRpbWVTY2hlZHVsZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBhY3Rpb25zID0gX2EuYWN0aW9ucywgbWF4RnJhbWVzID0gX2EubWF4RnJhbWVzO1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIHZhciBhY3Rpb247XG4gICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9uc1swXSkgJiYgYWN0aW9uLmRlbGF5IDw9IG1heEZyYW1lcykge1xuICAgICAgICAgICAgYWN0aW9ucy5zaGlmdCgpO1xuICAgICAgICAgICAgdGhpcy5mcmFtZSA9IGFjdGlvbi5kZWxheTtcbiAgICAgICAgICAgIGlmICgoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBWaXJ0dWFsVGltZVNjaGVkdWxlci5mcmFtZVRpbWVGYWN0b3IgPSAxMDtcbiAgICByZXR1cm4gVmlydHVhbFRpbWVTY2hlZHVsZXI7XG59KEFzeW5jU2NoZWR1bGVyXzEuQXN5bmNTY2hlZHVsZXIpKTtcbmV4cG9ydHMuVmlydHVhbFRpbWVTY2hlZHVsZXIgPSBWaXJ0dWFsVGltZVNjaGVkdWxlcjtcbnZhciBWaXJ0dWFsQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVmlydHVhbEFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBWaXJ0dWFsQWN0aW9uKHNjaGVkdWxlciwgd29yaywgaW5kZXgpIHtcbiAgICAgICAgaWYgKGluZGV4ID09PSB2b2lkIDApIHsgaW5kZXggPSAoc2NoZWR1bGVyLmluZGV4ICs9IDEpOyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgX3RoaXMuaW5kZXggPSBpbmRleDtcbiAgICAgICAgX3RoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgX3RoaXMuaW5kZXggPSBzY2hlZHVsZXIuaW5kZXggPSBpbmRleDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBWaXJ0dWFsQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUoZGVsYXkpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5zY2hlZHVsZS5jYWxsKHRoaXMsIHN0YXRlLCBkZWxheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIGFjdGlvbiA9IG5ldyBWaXJ0dWFsQWN0aW9uKHRoaXMuc2NoZWR1bGVyLCB0aGlzLndvcmspO1xuICAgICAgICAgICAgdGhpcy5hZGQoYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb24uc2NoZWR1bGUoc3RhdGUsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBTdWJzY3JpcHRpb25fMS5TdWJzY3JpcHRpb24uRU1QVFk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFZpcnR1YWxBY3Rpb24ucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICB0aGlzLmRlbGF5ID0gc2NoZWR1bGVyLmZyYW1lICsgZGVsYXk7XG4gICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7XG4gICAgICAgIGFjdGlvbnMucHVzaCh0aGlzKTtcbiAgICAgICAgYWN0aW9ucy5zb3J0KFZpcnR1YWxBY3Rpb24uc29ydEFjdGlvbnMpO1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9O1xuICAgIFZpcnR1YWxBY3Rpb24ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgVmlydHVhbEFjdGlvbi5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX2V4ZWN1dGUuY2FsbCh0aGlzLCBzdGF0ZSwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBWaXJ0dWFsQWN0aW9uLnNvcnRBY3Rpb25zID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgaWYgKGEuZGVsYXkgPT09IGIuZGVsYXkpIHtcbiAgICAgICAgICAgIGlmIChhLmluZGV4ID09PSBiLmluZGV4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhLmluZGV4ID4gYi5pbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGEuZGVsYXkgPiBiLmRlbGF5KSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFZpcnR1YWxBY3Rpb247XG59KEFzeW5jQWN0aW9uXzEuQXN5bmNBY3Rpb24pKTtcbmV4cG9ydHMuVmlydHVhbEFjdGlvbiA9IFZpcnR1YWxBY3Rpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WaXJ0dWFsVGltZVNjaGVkdWxlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZW1wdHkgPSBleHBvcnRzLkVNUFRZID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xuZXhwb3J0cy5FTVBUWSA9IG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikgeyByZXR1cm4gc3Vic2NyaWJlci5jb21wbGV0ZSgpOyB9KTtcbmZ1bmN0aW9uIGVtcHR5KHNjaGVkdWxlcikge1xuICAgIHJldHVybiBzY2hlZHVsZXIgPyBlbXB0eVNjaGVkdWxlZChzY2hlZHVsZXIpIDogZXhwb3J0cy5FTVBUWTtcbn1cbmV4cG9ydHMuZW1wdHkgPSBlbXB0eTtcbmZ1bmN0aW9uIGVtcHR5U2NoZWR1bGVkKHNjaGVkdWxlcikge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7IHJldHVybiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7IH0pOyB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVtcHR5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1NjaGVkdWxlciA9IHZvaWQgMDtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi9pc0Z1bmN0aW9uXCIpO1xuZnVuY3Rpb24gaXNTY2hlZHVsZXIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24odmFsdWUuc2NoZWR1bGUpO1xufVxuZXhwb3J0cy5pc1NjaGVkdWxlciA9IGlzU2NoZWR1bGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNTY2hlZHVsZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBvcE51bWJlciA9IGV4cG9ydHMucG9wU2NoZWR1bGVyID0gZXhwb3J0cy5wb3BSZXN1bHRTZWxlY3RvciA9IHZvaWQgMDtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi9pc0Z1bmN0aW9uXCIpO1xudmFyIGlzU2NoZWR1bGVyXzEgPSByZXF1aXJlKFwiLi9pc1NjaGVkdWxlclwiKTtcbmZ1bmN0aW9uIGxhc3QoYXJyKSB7XG4gICAgcmV0dXJuIGFyclthcnIubGVuZ3RoIC0gMV07XG59XG5mdW5jdGlvbiBwb3BSZXN1bHRTZWxlY3RvcihhcmdzKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKGxhc3QoYXJncykpID8gYXJncy5wb3AoKSA6IHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMucG9wUmVzdWx0U2VsZWN0b3IgPSBwb3BSZXN1bHRTZWxlY3RvcjtcbmZ1bmN0aW9uIHBvcFNjaGVkdWxlcihhcmdzKSB7XG4gICAgcmV0dXJuIGlzU2NoZWR1bGVyXzEuaXNTY2hlZHVsZXIobGFzdChhcmdzKSkgPyBhcmdzLnBvcCgpIDogdW5kZWZpbmVkO1xufVxuZXhwb3J0cy5wb3BTY2hlZHVsZXIgPSBwb3BTY2hlZHVsZXI7XG5mdW5jdGlvbiBwb3BOdW1iZXIoYXJncywgZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBsYXN0KGFyZ3MpID09PSAnbnVtYmVyJyA/IGFyZ3MucG9wKCkgOiBkZWZhdWx0VmFsdWU7XG59XG5leHBvcnRzLnBvcE51bWJlciA9IHBvcE51bWJlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFyZ3MuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzQXJyYXlMaWtlID0gdm9pZCAwO1xuZXhwb3J0cy5pc0FycmF5TGlrZSA9IChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCAmJiB0eXBlb2YgeC5sZW5ndGggPT09ICdudW1iZXInICYmIHR5cGVvZiB4ICE9PSAnZnVuY3Rpb24nOyB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzQXJyYXlMaWtlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1Byb21pc2UgPSB2b2lkIDA7XG52YXIgaXNGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4vaXNGdW5jdGlvblwiKTtcbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbih2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmFsdWUudGhlbik7XG59XG5leHBvcnRzLmlzUHJvbWlzZSA9IGlzUHJvbWlzZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzUHJvbWlzZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNJbnRlcm9wT2JzZXJ2YWJsZSA9IHZvaWQgMDtcbnZhciBvYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vc3ltYm9sL29ic2VydmFibGVcIik7XG52YXIgaXNGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4vaXNGdW5jdGlvblwiKTtcbmZ1bmN0aW9uIGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24oaW5wdXRbb2JzZXJ2YWJsZV8xLm9ic2VydmFibGVdKTtcbn1cbmV4cG9ydHMuaXNJbnRlcm9wT2JzZXJ2YWJsZSA9IGlzSW50ZXJvcE9ic2VydmFibGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0ludGVyb3BPYnNlcnZhYmxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0FzeW5jSXRlcmFibGUgPSB2b2lkIDA7XG52YXIgaXNGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4vaXNGdW5jdGlvblwiKTtcbmZ1bmN0aW9uIGlzQXN5bmNJdGVyYWJsZShvYmopIHtcbiAgICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5leHBvcnRzLmlzQXN5bmNJdGVyYWJsZSA9IGlzQXN5bmNJdGVyYWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzQXN5bmNJdGVyYWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IgPSB2b2lkIDA7XG5mdW5jdGlvbiBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgPyAnYW4gaW52YWxpZCBvYmplY3QnIDogXCInXCIgKyBpbnB1dCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuZXhwb3J0cy5jcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvciA9IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhyb3dVbm9ic2VydmFibGVFcnJvci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXRlcmF0b3IgPSBleHBvcnRzLmdldFN5bWJvbEl0ZXJhdG9yID0gdm9pZCAwO1xuZnVuY3Rpb24gZ2V0U3ltYm9sSXRlcmF0b3IoKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgIVN5bWJvbC5pdGVyYXRvcikge1xuICAgICAgICByZXR1cm4gJ0BAaXRlcmF0b3InO1xuICAgIH1cbiAgICByZXR1cm4gU3ltYm9sLml0ZXJhdG9yO1xufVxuZXhwb3J0cy5nZXRTeW1ib2xJdGVyYXRvciA9IGdldFN5bWJvbEl0ZXJhdG9yO1xuZXhwb3J0cy5pdGVyYXRvciA9IGdldFN5bWJvbEl0ZXJhdG9yKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pdGVyYXRvci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNJdGVyYWJsZSA9IHZvaWQgMDtcbnZhciBpdGVyYXRvcl8xID0gcmVxdWlyZShcIi4uL3N5bWJvbC9pdGVyYXRvclwiKTtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi9pc0Z1bmN0aW9uXCIpO1xuZnVuY3Rpb24gaXNJdGVyYWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbihpbnB1dCA9PT0gbnVsbCB8fCBpbnB1dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5wdXRbaXRlcmF0b3JfMS5pdGVyYXRvcl0pO1xufVxuZXhwb3J0cy5pc0l0ZXJhYmxlID0gaXNJdGVyYWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzSXRlcmFibGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2F3YWl0ID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0KSB8fCBmdW5jdGlvbiAodikgeyByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTsgfVxudmFyIF9fYXN5bmNHZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fYXN5bmNHZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzUmVhZGFibGVTdHJlYW1MaWtlID0gZXhwb3J0cy5yZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yID0gdm9pZCAwO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuL2lzRnVuY3Rpb25cIik7XG5mdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yXzEoKSB7XG4gICAgICAgIHZhciByZWFkZXIsIF9hLCB2YWx1ZSwgZG9uZTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDI7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRydWUpIHJldHVybiBbMywgOF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdChyZWFkZXIucmVhZCgpKV07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBfYSA9IF9iLnNlbnQoKSwgdmFsdWUgPSBfYS52YWx1ZSwgZG9uZSA9IF9hLmRvbmU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG9uZSkgcmV0dXJuIFszLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHZvaWQgMCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFs0LCBfX2F3YWl0KHZhbHVlKV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzQsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMl07XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5yZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yID0gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcjtcbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlKG9iaikge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmouZ2V0UmVhZGVyKTtcbn1cbmV4cG9ydHMuaXNSZWFkYWJsZVN0cmVhbUxpa2UgPSBpc1JlYWRhYmxlU3RyZWFtTGlrZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzUmVhZGFibGVTdHJlYW1MaWtlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2FzeW5jVmFsdWVzID0gKHRoaXMgJiYgdGhpcy5fX2FzeW5jVmFsdWVzKSB8fCBmdW5jdGlvbiAobykge1xuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn07XG52YXIgX192YWx1ZXMgPSAodGhpcyAmJiB0aGlzLl9fdmFsdWVzKSB8fCBmdW5jdGlvbihvKSB7XG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZyb21SZWFkYWJsZVN0cmVhbUxpa2UgPSBleHBvcnRzLmZyb21Bc3luY0l0ZXJhYmxlID0gZXhwb3J0cy5mcm9tSXRlcmFibGUgPSBleHBvcnRzLmZyb21Qcm9taXNlID0gZXhwb3J0cy5mcm9tQXJyYXlMaWtlID0gZXhwb3J0cy5mcm9tSW50ZXJvcE9ic2VydmFibGUgPSBleHBvcnRzLmlubmVyRnJvbSA9IHZvaWQgMDtcbnZhciBpc0FycmF5TGlrZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNBcnJheUxpa2VcIik7XG52YXIgaXNQcm9taXNlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc1Byb21pc2VcIik7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL09ic2VydmFibGVcIik7XG52YXIgaXNJbnRlcm9wT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNJbnRlcm9wT2JzZXJ2YWJsZVwiKTtcbnZhciBpc0FzeW5jSXRlcmFibGVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzQXN5bmNJdGVyYWJsZVwiKTtcbnZhciB0aHJvd1Vub2JzZXJ2YWJsZUVycm9yXzEgPSByZXF1aXJlKFwiLi4vdXRpbC90aHJvd1Vub2JzZXJ2YWJsZUVycm9yXCIpO1xudmFyIGlzSXRlcmFibGVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzSXRlcmFibGVcIik7XG52YXIgaXNSZWFkYWJsZVN0cmVhbUxpa2VfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzUmVhZGFibGVTdHJlYW1MaWtlXCIpO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRnVuY3Rpb25cIik7XG52YXIgcmVwb3J0VW5oYW5kbGVkRXJyb3JfMSA9IHJlcXVpcmUoXCIuLi91dGlsL3JlcG9ydFVuaGFuZGxlZEVycm9yXCIpO1xudmFyIG9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9zeW1ib2wvb2JzZXJ2YWJsZVwiKTtcbmZ1bmN0aW9uIGlubmVyRnJvbShpbnB1dCkge1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGlzSW50ZXJvcE9ic2VydmFibGVfMS5pc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlXzEuaXNBcnJheUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFycmF5TGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZV8xLmlzUHJvbWlzZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUHJvbWlzZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXN5bmNJdGVyYWJsZV8xLmlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSXRlcmFibGVfMS5pc0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUmVhZGFibGVTdHJlYW1MaWtlXzEuaXNSZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgdGhyb3dVbm9ic2VydmFibGVFcnJvcl8xLmNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTtcbn1cbmV4cG9ydHMuaW5uZXJGcm9tID0gaW5uZXJGcm9tO1xuZnVuY3Rpb24gZnJvbUludGVyb3BPYnNlcnZhYmxlKG9iaikge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9icyA9IG9ialtvYnNlcnZhYmxlXzEub2JzZXJ2YWJsZV0oKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKG9icy5zdWJzY3JpYmUpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZScpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5mcm9tSW50ZXJvcE9ic2VydmFibGUgPSBmcm9tSW50ZXJvcE9ic2VydmFibGU7XG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aCAmJiAhc3Vic2NyaWJlci5jbG9zZWQ7IGkrKykge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGFycmF5W2ldKTtcbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmZyb21BcnJheUxpa2UgPSBmcm9tQXJyYXlMaWtlO1xuZnVuY3Rpb24gZnJvbVByb21pc2UocHJvbWlzZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSlcbiAgICAgICAgICAgIC50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yXzEucmVwb3J0VW5oYW5kbGVkRXJyb3IpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5mcm9tUHJvbWlzZSA9IGZyb21Qcm9taXNlO1xuZnVuY3Rpb24gZnJvbUl0ZXJhYmxlKGl0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmZyb21JdGVyYWJsZSA9IGZyb21JdGVyYWJsZTtcbmZ1bmN0aW9uIGZyb21Bc3luY0l0ZXJhYmxlKGFzeW5jSXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZnJvbUFzeW5jSXRlcmFibGUgPSBmcm9tQXN5bmNJdGVyYWJsZTtcbmZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUoaXNSZWFkYWJsZVN0cmVhbUxpa2VfMS5yZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSk7XG59XG5leHBvcnRzLmZyb21SZWFkYWJsZVN0cmVhbUxpa2UgPSBmcm9tUmVhZGFibGVTdHJlYW1MaWtlO1xuZnVuY3Rpb24gcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKSB7XG4gICAgdmFyIGFzeW5jSXRlcmFibGVfMSwgYXN5bmNJdGVyYWJsZV8xXzE7XG4gICAgdmFyIGVfMiwgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmFsdWUsIGVfMl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzAsIDUsIDYsIDExXSk7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbNCwgYXN5bmNJdGVyYWJsZV8xLm5leHQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzeW5jSXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAzO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFszLCAxXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xICYmICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfYS5jYWxsKGFzeW5jSXRlcmFibGVfMSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDg7XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbm5lckZyb20uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV4ZWN1dGVTY2hlZHVsZSA9IHZvaWQgMDtcbmZ1bmN0aW9uIGV4ZWN1dGVTY2hlZHVsZShwYXJlbnRTdWJzY3JpcHRpb24sIHNjaGVkdWxlciwgd29yaywgZGVsYXksIHJlcGVhdCkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgIGlmIChyZXBlYXQgPT09IHZvaWQgMCkgeyByZXBlYXQgPSBmYWxzZTsgfVxuICAgIHZhciBzY2hlZHVsZVN1YnNjcmlwdGlvbiA9IHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdvcmsoKTtcbiAgICAgICAgaWYgKHJlcGVhdCkge1xuICAgICAgICAgICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIGRlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9LCBkZWxheSk7XG4gICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZChzY2hlZHVsZVN1YnNjcmlwdGlvbik7XG4gICAgaWYgKCFyZXBlYXQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlU3Vic2NyaXB0aW9uO1xuICAgIH1cbn1cbmV4cG9ydHMuZXhlY3V0ZVNjaGVkdWxlID0gZXhlY3V0ZVNjaGVkdWxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhlY3V0ZVNjaGVkdWxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5vYnNlcnZlT24gPSB2b2lkIDA7XG52YXIgZXhlY3V0ZVNjaGVkdWxlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9leGVjdXRlU2NoZWR1bGVcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIG9ic2VydmVPbihzY2hlZHVsZXIsIGRlbGF5KSB7XG4gICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBleGVjdXRlU2NoZWR1bGVfMS5leGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzdWJzY3JpYmVyLm5leHQodmFsdWUpOyB9LCBkZWxheSk7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGV4ZWN1dGVTY2hlZHVsZV8xLmV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YnNjcmliZXIuY29tcGxldGUoKTsgfSwgZGVsYXkpOyB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBleGVjdXRlU2NoZWR1bGVfMS5leGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0sIGRlbGF5KTsgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5vYnNlcnZlT24gPSBvYnNlcnZlT247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vYnNlcnZlT24uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN1YnNjcmliZU9uID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG5mdW5jdGlvbiBzdWJzY3JpYmVPbihzY2hlZHVsZXIsIGRlbGF5KSB7XG4gICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgc3Vic2NyaWJlci5hZGQoc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7IH0sIGRlbGF5KSk7XG4gICAgfSk7XG59XG5leHBvcnRzLnN1YnNjcmliZU9uID0gc3Vic2NyaWJlT247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdWJzY3JpYmVPbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2NoZWR1bGVPYnNlcnZhYmxlID0gdm9pZCAwO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIG9ic2VydmVPbl8xID0gcmVxdWlyZShcIi4uL29wZXJhdG9ycy9vYnNlcnZlT25cIik7XG52YXIgc3Vic2NyaWJlT25fMSA9IHJlcXVpcmUoXCIuLi9vcGVyYXRvcnMvc3Vic2NyaWJlT25cIik7XG5mdW5jdGlvbiBzY2hlZHVsZU9ic2VydmFibGUoaW5wdXQsIHNjaGVkdWxlcikge1xuICAgIHJldHVybiBpbm5lckZyb21fMS5pbm5lckZyb20oaW5wdXQpLnBpcGUoc3Vic2NyaWJlT25fMS5zdWJzY3JpYmVPbihzY2hlZHVsZXIpLCBvYnNlcnZlT25fMS5vYnNlcnZlT24oc2NoZWR1bGVyKSk7XG59XG5leHBvcnRzLnNjaGVkdWxlT2JzZXJ2YWJsZSA9IHNjaGVkdWxlT2JzZXJ2YWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjaGVkdWxlT2JzZXJ2YWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2NoZWR1bGVQcm9taXNlID0gdm9pZCAwO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIG9ic2VydmVPbl8xID0gcmVxdWlyZShcIi4uL29wZXJhdG9ycy9vYnNlcnZlT25cIik7XG52YXIgc3Vic2NyaWJlT25fMSA9IHJlcXVpcmUoXCIuLi9vcGVyYXRvcnMvc3Vic2NyaWJlT25cIik7XG5mdW5jdGlvbiBzY2hlZHVsZVByb21pc2UoaW5wdXQsIHNjaGVkdWxlcikge1xuICAgIHJldHVybiBpbm5lckZyb21fMS5pbm5lckZyb20oaW5wdXQpLnBpcGUoc3Vic2NyaWJlT25fMS5zdWJzY3JpYmVPbihzY2hlZHVsZXIpLCBvYnNlcnZlT25fMS5vYnNlcnZlT24oc2NoZWR1bGVyKSk7XG59XG5leHBvcnRzLnNjaGVkdWxlUHJvbWlzZSA9IHNjaGVkdWxlUHJvbWlzZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjaGVkdWxlUHJvbWlzZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2NoZWR1bGVBcnJheSA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbmZ1bmN0aW9uIHNjaGVkdWxlQXJyYXkoaW5wdXQsIHNjaGVkdWxlcikge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChpID09PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoaW5wdXRbaSsrXSk7XG4gICAgICAgICAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjaGVkdWxlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuc2NoZWR1bGVBcnJheSA9IHNjaGVkdWxlQXJyYXk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY2hlZHVsZUFycmF5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zY2hlZHVsZUl0ZXJhYmxlID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xudmFyIGl0ZXJhdG9yXzEgPSByZXF1aXJlKFwiLi4vc3ltYm9sL2l0ZXJhdG9yXCIpO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRnVuY3Rpb25cIik7XG52YXIgZXhlY3V0ZVNjaGVkdWxlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9leGVjdXRlU2NoZWR1bGVcIik7XG5mdW5jdGlvbiBzY2hlZHVsZUl0ZXJhYmxlKGlucHV0LCBzY2hlZHVsZXIpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpdGVyYXRvcjtcbiAgICAgICAgZXhlY3V0ZVNjaGVkdWxlXzEuZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBpbnB1dFtpdGVyYXRvcl8xLml0ZXJhdG9yXSgpO1xuICAgICAgICAgICAgZXhlY3V0ZVNjaGVkdWxlXzEuZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICAgICAgdmFyIGRvbmU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgKF9hID0gaXRlcmF0b3IubmV4dCgpLCB2YWx1ZSA9IF9hLnZhbHVlLCBkb25lID0gX2EuZG9uZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMCwgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24oaXRlcmF0b3IgPT09IG51bGwgfHwgaXRlcmF0b3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGl0ZXJhdG9yLnJldHVybikgJiYgaXRlcmF0b3IucmV0dXJuKCk7IH07XG4gICAgfSk7XG59XG5leHBvcnRzLnNjaGVkdWxlSXRlcmFibGUgPSBzY2hlZHVsZUl0ZXJhYmxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NoZWR1bGVJdGVyYWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2NoZWR1bGVBc3luY0l0ZXJhYmxlID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xudmFyIGV4ZWN1dGVTY2hlZHVsZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvZXhlY3V0ZVNjaGVkdWxlXCIpO1xuZnVuY3Rpb24gc2NoZWR1bGVBc3luY0l0ZXJhYmxlKGlucHV0LCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSXRlcmFibGUgY2Fubm90IGJlIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBleGVjdXRlU2NoZWR1bGVfMS5leGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpbnB1dFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcbiAgICAgICAgICAgIGV4ZWN1dGVTY2hlZHVsZV8xLmV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdGVyYXRvci5uZXh0KCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIDAsIHRydWUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuc2NoZWR1bGVBc3luY0l0ZXJhYmxlID0gc2NoZWR1bGVBc3luY0l0ZXJhYmxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NoZWR1bGVBc3luY0l0ZXJhYmxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZSA9IHZvaWQgMDtcbnZhciBzY2hlZHVsZUFzeW5jSXRlcmFibGVfMSA9IHJlcXVpcmUoXCIuL3NjaGVkdWxlQXN5bmNJdGVyYWJsZVwiKTtcbnZhciBpc1JlYWRhYmxlU3RyZWFtTGlrZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNSZWFkYWJsZVN0cmVhbUxpa2VcIik7XG5mdW5jdGlvbiBzY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCwgc2NoZWR1bGVyKSB7XG4gICAgcmV0dXJuIHNjaGVkdWxlQXN5bmNJdGVyYWJsZV8xLnNjaGVkdWxlQXN5bmNJdGVyYWJsZShpc1JlYWRhYmxlU3RyZWFtTGlrZV8xLnJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IoaW5wdXQpLCBzY2hlZHVsZXIpO1xufVxuZXhwb3J0cy5zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZSA9IHNjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2UuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNjaGVkdWxlZCA9IHZvaWQgMDtcbnZhciBzY2hlZHVsZU9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuL3NjaGVkdWxlT2JzZXJ2YWJsZVwiKTtcbnZhciBzY2hlZHVsZVByb21pc2VfMSA9IHJlcXVpcmUoXCIuL3NjaGVkdWxlUHJvbWlzZVwiKTtcbnZhciBzY2hlZHVsZUFycmF5XzEgPSByZXF1aXJlKFwiLi9zY2hlZHVsZUFycmF5XCIpO1xudmFyIHNjaGVkdWxlSXRlcmFibGVfMSA9IHJlcXVpcmUoXCIuL3NjaGVkdWxlSXRlcmFibGVcIik7XG52YXIgc2NoZWR1bGVBc3luY0l0ZXJhYmxlXzEgPSByZXF1aXJlKFwiLi9zY2hlZHVsZUFzeW5jSXRlcmFibGVcIik7XG52YXIgaXNJbnRlcm9wT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNJbnRlcm9wT2JzZXJ2YWJsZVwiKTtcbnZhciBpc1Byb21pc2VfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzUHJvbWlzZVwiKTtcbnZhciBpc0FycmF5TGlrZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNBcnJheUxpa2VcIik7XG52YXIgaXNJdGVyYWJsZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNJdGVyYWJsZVwiKTtcbnZhciBpc0FzeW5jSXRlcmFibGVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzQXN5bmNJdGVyYWJsZVwiKTtcbnZhciB0aHJvd1Vub2JzZXJ2YWJsZUVycm9yXzEgPSByZXF1aXJlKFwiLi4vdXRpbC90aHJvd1Vub2JzZXJ2YWJsZUVycm9yXCIpO1xudmFyIGlzUmVhZGFibGVTdHJlYW1MaWtlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc1JlYWRhYmxlU3RyZWFtTGlrZVwiKTtcbnZhciBzY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZV8xID0gcmVxdWlyZShcIi4vc2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2VcIik7XG5mdW5jdGlvbiBzY2hlZHVsZWQoaW5wdXQsIHNjaGVkdWxlcikge1xuICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChpc0ludGVyb3BPYnNlcnZhYmxlXzEuaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZU9ic2VydmFibGVfMS5zY2hlZHVsZU9ic2VydmFibGUoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlXzEuaXNBcnJheUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NoZWR1bGVBcnJheV8xLnNjaGVkdWxlQXJyYXkoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZV8xLmlzUHJvbWlzZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZVByb21pc2VfMS5zY2hlZHVsZVByb21pc2UoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXN5bmNJdGVyYWJsZV8xLmlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZUFzeW5jSXRlcmFibGVfMS5zY2hlZHVsZUFzeW5jSXRlcmFibGUoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSXRlcmFibGVfMS5pc0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjaGVkdWxlSXRlcmFibGVfMS5zY2hlZHVsZUl0ZXJhYmxlKGlucHV0LCBzY2hlZHVsZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZV8xLmlzUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlXzEuc2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgdGhyb3dVbm9ic2VydmFibGVFcnJvcl8xLmNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTtcbn1cbmV4cG9ydHMuc2NoZWR1bGVkID0gc2NoZWR1bGVkO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NoZWR1bGVkLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tID0gdm9pZCAwO1xudmFyIHNjaGVkdWxlZF8xID0gcmVxdWlyZShcIi4uL3NjaGVkdWxlZC9zY2hlZHVsZWRcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi9pbm5lckZyb21cIik7XG5mdW5jdGlvbiBmcm9tKGlucHV0LCBzY2hlZHVsZXIpIHtcbiAgICByZXR1cm4gc2NoZWR1bGVyID8gc2NoZWR1bGVkXzEuc2NoZWR1bGVkKGlucHV0LCBzY2hlZHVsZXIpIDogaW5uZXJGcm9tXzEuaW5uZXJGcm9tKGlucHV0KTtcbn1cbmV4cG9ydHMuZnJvbSA9IGZyb207XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mcm9tLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5vZiA9IHZvaWQgMDtcbnZhciBhcmdzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcmdzXCIpO1xudmFyIGZyb21fMSA9IHJlcXVpcmUoXCIuL2Zyb21cIik7XG5mdW5jdGlvbiBvZigpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIHNjaGVkdWxlciA9IGFyZ3NfMS5wb3BTY2hlZHVsZXIoYXJncyk7XG4gICAgcmV0dXJuIGZyb21fMS5mcm9tKGFyZ3MsIHNjaGVkdWxlcik7XG59XG5leHBvcnRzLm9mID0gb2Y7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudGhyb3dFcnJvciA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc0Z1bmN0aW9uXCIpO1xuZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24oZXJyb3JPckVycm9yRmFjdG9yeSkgPyBlcnJvck9yRXJyb3JGYWN0b3J5IDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXJyb3JPckVycm9yRmFjdG9yeTsgfTtcbiAgICB2YXIgaW5pdCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycm9yRmFjdG9yeSgpKTsgfTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKHNjaGVkdWxlciA/IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7IHJldHVybiBzY2hlZHVsZXIuc2NoZWR1bGUoaW5pdCwgMCwgc3Vic2NyaWJlcik7IH0gOiBpbml0KTtcbn1cbmV4cG9ydHMudGhyb3dFcnJvciA9IHRocm93RXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aHJvd0Vycm9yLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5vYnNlcnZlTm90aWZpY2F0aW9uID0gZXhwb3J0cy5Ob3RpZmljYXRpb24gPSBleHBvcnRzLk5vdGlmaWNhdGlvbktpbmQgPSB2b2lkIDA7XG52YXIgZW1wdHlfMSA9IHJlcXVpcmUoXCIuL29ic2VydmFibGUvZW1wdHlcIik7XG52YXIgb2ZfMSA9IHJlcXVpcmUoXCIuL29ic2VydmFibGUvb2ZcIik7XG52YXIgdGhyb3dFcnJvcl8xID0gcmVxdWlyZShcIi4vb2JzZXJ2YWJsZS90aHJvd0Vycm9yXCIpO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuL3V0aWwvaXNGdW5jdGlvblwiKTtcbnZhciBOb3RpZmljYXRpb25LaW5kO1xuKGZ1bmN0aW9uIChOb3RpZmljYXRpb25LaW5kKSB7XG4gICAgTm90aWZpY2F0aW9uS2luZFtcIk5FWFRcIl0gPSBcIk5cIjtcbiAgICBOb3RpZmljYXRpb25LaW5kW1wiRVJST1JcIl0gPSBcIkVcIjtcbiAgICBOb3RpZmljYXRpb25LaW5kW1wiQ09NUExFVEVcIl0gPSBcIkNcIjtcbn0pKE5vdGlmaWNhdGlvbktpbmQgPSBleHBvcnRzLk5vdGlmaWNhdGlvbktpbmQgfHwgKGV4cG9ydHMuTm90aWZpY2F0aW9uS2luZCA9IHt9KSk7XG52YXIgTm90aWZpY2F0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb3RpZmljYXRpb24oa2luZCwgdmFsdWUsIGVycm9yKSB7XG4gICAgICAgIHRoaXMua2luZCA9IGtpbmQ7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgICAgICB0aGlzLmhhc1ZhbHVlID0ga2luZCA9PT0gJ04nO1xuICAgIH1cbiAgICBOb3RpZmljYXRpb24ucHJvdG90eXBlLm9ic2VydmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmVOb3RpZmljYXRpb24odGhpcywgb2JzZXJ2ZXIpO1xuICAgIH07XG4gICAgTm90aWZpY2F0aW9uLnByb3RvdHlwZS5kbyA9IGZ1bmN0aW9uIChuZXh0SGFuZGxlciwgZXJyb3JIYW5kbGVyLCBjb21wbGV0ZUhhbmRsZXIpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywga2luZCA9IF9hLmtpbmQsIHZhbHVlID0gX2EudmFsdWUsIGVycm9yID0gX2EuZXJyb3I7XG4gICAgICAgIHJldHVybiBraW5kID09PSAnTicgPyBuZXh0SGFuZGxlciA9PT0gbnVsbCB8fCBuZXh0SGFuZGxlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogbmV4dEhhbmRsZXIodmFsdWUpIDoga2luZCA9PT0gJ0UnID8gZXJyb3JIYW5kbGVyID09PSBudWxsIHx8IGVycm9ySGFuZGxlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3JIYW5kbGVyKGVycm9yKSA6IGNvbXBsZXRlSGFuZGxlciA9PT0gbnVsbCB8fCBjb21wbGV0ZUhhbmRsZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbXBsZXRlSGFuZGxlcigpO1xuICAgIH07XG4gICAgTm90aWZpY2F0aW9uLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiAobmV4dE9yT2JzZXJ2ZXIsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbigoX2EgPSBuZXh0T3JPYnNlcnZlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5leHQpXG4gICAgICAgICAgICA/IHRoaXMub2JzZXJ2ZShuZXh0T3JPYnNlcnZlcilcbiAgICAgICAgICAgIDogdGhpcy5kbyhuZXh0T3JPYnNlcnZlciwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICB9O1xuICAgIE5vdGlmaWNhdGlvbi5wcm90b3R5cGUudG9PYnNlcnZhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBraW5kID0gX2Eua2luZCwgdmFsdWUgPSBfYS52YWx1ZSwgZXJyb3IgPSBfYS5lcnJvcjtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGtpbmQgPT09ICdOJ1xuICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgIG9mXzEub2YodmFsdWUpXG4gICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAga2luZCA9PT0gJ0UnXG4gICAgICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JfMS50aHJvd0Vycm9yKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVycm9yOyB9KVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBraW5kID09PSAnQydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5XzEuRU1QVFlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5leHBlY3RlZCBub3RpZmljYXRpb24ga2luZCBcIiArIGtpbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBOb3RpZmljYXRpb24uY3JlYXRlTmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IE5vdGlmaWNhdGlvbignTicsIHZhbHVlKTtcbiAgICB9O1xuICAgIE5vdGlmaWNhdGlvbi5jcmVhdGVFcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOb3RpZmljYXRpb24oJ0UnLCB1bmRlZmluZWQsIGVycik7XG4gICAgfTtcbiAgICBOb3RpZmljYXRpb24uY3JlYXRlQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBOb3RpZmljYXRpb24uY29tcGxldGVOb3RpZmljYXRpb247XG4gICAgfTtcbiAgICBOb3RpZmljYXRpb24uY29tcGxldGVOb3RpZmljYXRpb24gPSBuZXcgTm90aWZpY2F0aW9uKCdDJyk7XG4gICAgcmV0dXJuIE5vdGlmaWNhdGlvbjtcbn0oKSk7XG5leHBvcnRzLk5vdGlmaWNhdGlvbiA9IE5vdGlmaWNhdGlvbjtcbmZ1bmN0aW9uIG9ic2VydmVOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBvYnNlcnZlcikge1xuICAgIHZhciBfYSwgX2IsIF9jO1xuICAgIHZhciBfZCA9IG5vdGlmaWNhdGlvbiwga2luZCA9IF9kLmtpbmQsIHZhbHVlID0gX2QudmFsdWUsIGVycm9yID0gX2QuZXJyb3I7XG4gICAgaWYgKHR5cGVvZiBraW5kICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vdGlmaWNhdGlvbiwgbWlzc2luZyBcImtpbmRcIicpO1xuICAgIH1cbiAgICBraW5kID09PSAnTicgPyAoX2EgPSBvYnNlcnZlci5uZXh0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChvYnNlcnZlciwgdmFsdWUpIDoga2luZCA9PT0gJ0UnID8gKF9iID0gb2JzZXJ2ZXIuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKG9ic2VydmVyLCBlcnJvcikgOiAoX2MgPSBvYnNlcnZlci5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmNhbGwob2JzZXJ2ZXIpO1xufVxuZXhwb3J0cy5vYnNlcnZlTm90aWZpY2F0aW9uID0gb2JzZXJ2ZU5vdGlmaWNhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5vdGlmaWNhdGlvbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNPYnNlcnZhYmxlID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuL2lzRnVuY3Rpb25cIik7XG5mdW5jdGlvbiBpc09ic2VydmFibGUob2JqKSB7XG4gICAgcmV0dXJuICEhb2JqICYmIChvYmogaW5zdGFuY2VvZiBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZSB8fCAoaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24ob2JqLmxpZnQpICYmIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKG9iai5zdWJzY3JpYmUpKSk7XG59XG5leHBvcnRzLmlzT2JzZXJ2YWJsZSA9IGlzT2JzZXJ2YWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzT2JzZXJ2YWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRW1wdHlFcnJvciA9IHZvaWQgMDtcbnZhciBjcmVhdGVFcnJvckNsYXNzXzEgPSByZXF1aXJlKFwiLi9jcmVhdGVFcnJvckNsYXNzXCIpO1xuZXhwb3J0cy5FbXB0eUVycm9yID0gY3JlYXRlRXJyb3JDbGFzc18xLmNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikgeyByZXR1cm4gZnVuY3Rpb24gRW1wdHlFcnJvckltcGwoKSB7XG4gICAgX3N1cGVyKHRoaXMpO1xuICAgIHRoaXMubmFtZSA9ICdFbXB0eUVycm9yJztcbiAgICB0aGlzLm1lc3NhZ2UgPSAnbm8gZWxlbWVudHMgaW4gc2VxdWVuY2UnO1xufTsgfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FbXB0eUVycm9yLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5sYXN0VmFsdWVGcm9tID0gdm9pZCAwO1xudmFyIEVtcHR5RXJyb3JfMSA9IHJlcXVpcmUoXCIuL3V0aWwvRW1wdHlFcnJvclwiKTtcbmZ1bmN0aW9uIGxhc3RWYWx1ZUZyb20oc291cmNlLCBjb25maWcpIHtcbiAgICB2YXIgaGFzQ29uZmlnID0gdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCc7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIF9oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgX3ZhbHVlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIF9oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9oYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKF92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhhc0NvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNvbmZpZy5kZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFbXB0eUVycm9yXzEuRW1wdHlFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMubGFzdFZhbHVlRnJvbSA9IGxhc3RWYWx1ZUZyb207XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sYXN0VmFsdWVGcm9tLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5maXJzdFZhbHVlRnJvbSA9IHZvaWQgMDtcbnZhciBFbXB0eUVycm9yXzEgPSByZXF1aXJlKFwiLi91dGlsL0VtcHR5RXJyb3JcIik7XG52YXIgU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIGZpcnN0VmFsdWVGcm9tKHNvdXJjZSwgY29uZmlnKSB7XG4gICAgdmFyIGhhc0NvbmZpZyA9IHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBzdWJzY3JpYmVyID0gbmV3IFN1YnNjcmliZXJfMS5TYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0NvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNvbmZpZy5kZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFbXB0eUVycm9yXzEuRW1wdHlFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZmlyc3RWYWx1ZUZyb20gPSBmaXJzdFZhbHVlRnJvbTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpcnN0VmFsdWVGcm9tLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Bcmd1bWVudE91dE9mUmFuZ2VFcnJvciA9IHZvaWQgMDtcbnZhciBjcmVhdGVFcnJvckNsYXNzXzEgPSByZXF1aXJlKFwiLi9jcmVhdGVFcnJvckNsYXNzXCIpO1xuZXhwb3J0cy5Bcmd1bWVudE91dE9mUmFuZ2VFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3NfMS5jcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JJbXBsKCkge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdBcmd1bWVudE91dE9mUmFuZ2VFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdhcmd1bWVudCBvdXQgb2YgcmFuZ2UnO1xuICAgIH07XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Ob3RGb3VuZEVycm9yID0gdm9pZCAwO1xudmFyIGNyZWF0ZUVycm9yQ2xhc3NfMSA9IHJlcXVpcmUoXCIuL2NyZWF0ZUVycm9yQ2xhc3NcIik7XG5leHBvcnRzLk5vdEZvdW5kRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzXzEuY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE5vdEZvdW5kRXJyb3JJbXBsKG1lc3NhZ2UpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnTm90Rm91bmRFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Tm90Rm91bmRFcnJvci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2VxdWVuY2VFcnJvciA9IHZvaWQgMDtcbnZhciBjcmVhdGVFcnJvckNsYXNzXzEgPSByZXF1aXJlKFwiLi9jcmVhdGVFcnJvckNsYXNzXCIpO1xuZXhwb3J0cy5TZXF1ZW5jZUVycm9yID0gY3JlYXRlRXJyb3JDbGFzc18xLmNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBTZXF1ZW5jZUVycm9ySW1wbChtZXNzYWdlKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ1NlcXVlbmNlRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH07XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNlcXVlbmNlRXJyb3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzVmFsaWREYXRlID0gdm9pZCAwO1xuZnVuY3Rpb24gaXNWYWxpZERhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZSk7XG59XG5leHBvcnRzLmlzVmFsaWREYXRlID0gaXNWYWxpZERhdGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0RhdGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRpbWVvdXQgPSBleHBvcnRzLlRpbWVvdXRFcnJvciA9IHZvaWQgMDtcbnZhciBhc3luY18xID0gcmVxdWlyZShcIi4uL3NjaGVkdWxlci9hc3luY1wiKTtcbnZhciBpc0RhdGVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRGF0ZVwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIGNyZWF0ZUVycm9yQ2xhc3NfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2NyZWF0ZUVycm9yQ2xhc3NcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgZXhlY3V0ZVNjaGVkdWxlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9leGVjdXRlU2NoZWR1bGVcIik7XG5leHBvcnRzLlRpbWVvdXRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3NfMS5jcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVGltZW91dEVycm9ySW1wbChpbmZvKSB7XG4gICAgICAgIGlmIChpbmZvID09PSB2b2lkIDApIHsgaW5mbyA9IG51bGw7IH1cbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnVGltZW91dCBoYXMgb2NjdXJyZWQnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVGltZW91dEVycm9yJztcbiAgICAgICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICB9O1xufSk7XG5mdW5jdGlvbiB0aW1lb3V0KGNvbmZpZywgc2NoZWR1bGVyQXJnKSB7XG4gICAgdmFyIF9hID0gKGlzRGF0ZV8xLmlzVmFsaWREYXRlKGNvbmZpZykgPyB7IGZpcnN0OiBjb25maWcgfSA6IHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInID8geyBlYWNoOiBjb25maWcgfSA6IGNvbmZpZyksIGZpcnN0ID0gX2EuZmlyc3QsIGVhY2ggPSBfYS5lYWNoLCBfYiA9IF9hLndpdGgsIF93aXRoID0gX2IgPT09IHZvaWQgMCA/IHRpbWVvdXRFcnJvckZhY3RvcnkgOiBfYiwgX2MgPSBfYS5zY2hlZHVsZXIsIHNjaGVkdWxlciA9IF9jID09PSB2b2lkIDAgPyBzY2hlZHVsZXJBcmcgIT09IG51bGwgJiYgc2NoZWR1bGVyQXJnICE9PSB2b2lkIDAgPyBzY2hlZHVsZXJBcmcgOiBhc3luY18xLmFzeW5jU2NoZWR1bGVyIDogX2MsIF9kID0gX2EubWV0YSwgbWV0YSA9IF9kID09PSB2b2lkIDAgPyBudWxsIDogX2Q7XG4gICAgaWYgKGZpcnN0ID09IG51bGwgJiYgZWFjaCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIHRpbWVvdXQgcHJvdmlkZWQuJyk7XG4gICAgfVxuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIHRpbWVyU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgdmFyIHNlZW4gPSAwO1xuICAgICAgICB2YXIgc3RhcnRUaW1lciA9IGZ1bmN0aW9uIChkZWxheSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSBleGVjdXRlU2NoZWR1bGVfMS5leGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKF93aXRoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGE6IG1ldGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IGxhc3RWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlZW46IHNlZW4sXG4gICAgICAgICAgICAgICAgICAgIH0pKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgfTtcbiAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgc2VlbisrO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KChsYXN0VmFsdWUgPSB2YWx1ZSkpO1xuICAgICAgICAgICAgZWFjaCA+IDAgJiYgc3RhcnRUaW1lcihlYWNoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghKHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi5jbG9zZWQpKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgICAgICFzZWVuICYmIHN0YXJ0VGltZXIoZmlyc3QgIT0gbnVsbCA/ICh0eXBlb2YgZmlyc3QgPT09ICdudW1iZXInID8gZmlyc3QgOiArZmlyc3QgLSBzY2hlZHVsZXIubm93KCkpIDogZWFjaCk7XG4gICAgfSk7XG59XG5leHBvcnRzLnRpbWVvdXQgPSB0aW1lb3V0O1xuZnVuY3Rpb24gdGltZW91dEVycm9yRmFjdG9yeShpbmZvKSB7XG4gICAgdGhyb3cgbmV3IGV4cG9ydHMuVGltZW91dEVycm9yKGluZm8pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZW91dC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubWFwID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBtYXAocHJvamVjdCwgdGhpc0FyZykge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHByb2plY3QuY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaW5kZXgrKykpO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG5leHBvcnRzLm1hcCA9IG1hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1hcC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm1hcE9uZU9yTWFueUFyZ3MgPSB2b2lkIDA7XG52YXIgbWFwXzEgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzL21hcFwiKTtcbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbmZ1bmN0aW9uIGNhbGxPckFwcGx5KGZuLCBhcmdzKSB7XG4gICAgcmV0dXJuIGlzQXJyYXkoYXJncykgPyBmbi5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSkpIDogZm4oYXJncyk7XG59XG5mdW5jdGlvbiBtYXBPbmVPck1hbnlBcmdzKGZuKSB7XG4gICAgcmV0dXJuIG1hcF8xLm1hcChmdW5jdGlvbiAoYXJncykgeyByZXR1cm4gY2FsbE9yQXBwbHkoZm4sIGFyZ3MpOyB9KTtcbn1cbmV4cG9ydHMubWFwT25lT3JNYW55QXJncyA9IG1hcE9uZU9yTWFueUFyZ3M7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYXBPbmVPck1hbnlBcmdzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxuICAgICAgICB0b1tqXSA9IGZyb21baV07XG4gICAgcmV0dXJuIHRvO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYmluZENhbGxiYWNrSW50ZXJuYWxzID0gdm9pZCAwO1xudmFyIGlzU2NoZWR1bGVyXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc1NjaGVkdWxlclwiKTtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBzdWJzY3JpYmVPbl8xID0gcmVxdWlyZShcIi4uL29wZXJhdG9ycy9zdWJzY3JpYmVPblwiKTtcbnZhciBtYXBPbmVPck1hbnlBcmdzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9tYXBPbmVPck1hbnlBcmdzXCIpO1xudmFyIG9ic2VydmVPbl8xID0gcmVxdWlyZShcIi4uL29wZXJhdG9ycy9vYnNlcnZlT25cIik7XG52YXIgQXN5bmNTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi4vQXN5bmNTdWJqZWN0XCIpO1xuZnVuY3Rpb24gYmluZENhbGxiYWNrSW50ZXJuYWxzKGlzTm9kZVN0eWxlLCBjYWxsYmFja0Z1bmMsIHJlc3VsdFNlbGVjdG9yLCBzY2hlZHVsZXIpIHtcbiAgICBpZiAocmVzdWx0U2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKGlzU2NoZWR1bGVyXzEuaXNTY2hlZHVsZXIocmVzdWx0U2VsZWN0b3IpKSB7XG4gICAgICAgICAgICBzY2hlZHVsZXIgPSByZXN1bHRTZWxlY3RvcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBiaW5kQ2FsbGJhY2tJbnRlcm5hbHMoaXNOb2RlU3R5bGUsIGNhbGxiYWNrRnVuYywgc2NoZWR1bGVyKVxuICAgICAgICAgICAgICAgICAgICAuYXBwbHkodGhpcywgYXJncylcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUobWFwT25lT3JNYW55QXJnc18xLm1hcE9uZU9yTWFueUFyZ3MocmVzdWx0U2VsZWN0b3IpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNjaGVkdWxlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJpbmRDYWxsYmFja0ludGVybmFscyhpc05vZGVTdHlsZSwgY2FsbGJhY2tGdW5jKVxuICAgICAgICAgICAgICAgIC5hcHBseSh0aGlzLCBhcmdzKVxuICAgICAgICAgICAgICAgIC5waXBlKHN1YnNjcmliZU9uXzEuc3Vic2NyaWJlT24oc2NoZWR1bGVyKSwgb2JzZXJ2ZU9uXzEub2JzZXJ2ZU9uKHNjaGVkdWxlcikpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFzeW5jU3ViamVjdF8xLkFzeW5jU3ViamVjdCgpO1xuICAgICAgICB2YXIgdW5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIHZhciBzdWJzID0gc3ViamVjdC5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICBpZiAodW5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgIHVuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgaXNBc3luY18xID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdmFyIGlzQ29tcGxldGVfMSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrRnVuYy5hcHBseShfdGhpcywgX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncykpLCBbXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc05vZGVTdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSByZXN1bHRzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QubmV4dCgxIDwgcmVzdWx0cy5sZW5ndGggPyByZXN1bHRzIDogcmVzdWx0c1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NvbXBsZXRlXzEgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXN5bmNfMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdKSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzQ29tcGxldGVfMSkge1xuICAgICAgICAgICAgICAgICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlzQXN5bmNfMSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3VicztcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cbmV4cG9ydHMuYmluZENhbGxiYWNrSW50ZXJuYWxzID0gYmluZENhbGxiYWNrSW50ZXJuYWxzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmluZENhbGxiYWNrSW50ZXJuYWxzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5iaW5kQ2FsbGJhY2sgPSB2b2lkIDA7XG52YXIgYmluZENhbGxiYWNrSW50ZXJuYWxzXzEgPSByZXF1aXJlKFwiLi9iaW5kQ2FsbGJhY2tJbnRlcm5hbHNcIik7XG5mdW5jdGlvbiBiaW5kQ2FsbGJhY2soY2FsbGJhY2tGdW5jLCByZXN1bHRTZWxlY3Rvciwgc2NoZWR1bGVyKSB7XG4gICAgcmV0dXJuIGJpbmRDYWxsYmFja0ludGVybmFsc18xLmJpbmRDYWxsYmFja0ludGVybmFscyhmYWxzZSwgY2FsbGJhY2tGdW5jLCByZXN1bHRTZWxlY3Rvciwgc2NoZWR1bGVyKTtcbn1cbmV4cG9ydHMuYmluZENhbGxiYWNrID0gYmluZENhbGxiYWNrO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmluZENhbGxiYWNrLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5iaW5kTm9kZUNhbGxiYWNrID0gdm9pZCAwO1xudmFyIGJpbmRDYWxsYmFja0ludGVybmFsc18xID0gcmVxdWlyZShcIi4vYmluZENhbGxiYWNrSW50ZXJuYWxzXCIpO1xuZnVuY3Rpb24gYmluZE5vZGVDYWxsYmFjayhjYWxsYmFja0Z1bmMsIHJlc3VsdFNlbGVjdG9yLCBzY2hlZHVsZXIpIHtcbiAgICByZXR1cm4gYmluZENhbGxiYWNrSW50ZXJuYWxzXzEuYmluZENhbGxiYWNrSW50ZXJuYWxzKHRydWUsIGNhbGxiYWNrRnVuYywgcmVzdWx0U2VsZWN0b3IsIHNjaGVkdWxlcik7XG59XG5leHBvcnRzLmJpbmROb2RlQ2FsbGJhY2sgPSBiaW5kTm9kZUNhbGxiYWNrO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmluZE5vZGVDYWxsYmFjay5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXJnc0FyZ0FycmF5T3JPYmplY3QgPSB2b2lkIDA7XG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZSwgZ2V0S2V5cyA9IE9iamVjdC5rZXlzO1xuZnVuY3Rpb24gYXJnc0FyZ0FycmF5T3JPYmplY3QoYXJncykge1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB2YXIgZmlyc3RfMSA9IGFyZ3NbMF07XG4gICAgICAgIGlmIChpc0FycmF5KGZpcnN0XzEpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBhcmdzOiBmaXJzdF8xLCBrZXlzOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUE9KTyhmaXJzdF8xKSkge1xuICAgICAgICAgICAgdmFyIGtleXMgPSBnZXRLZXlzKGZpcnN0XzEpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBhcmdzOiBrZXlzLm1hcChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBmaXJzdF8xW2tleV07IH0pLFxuICAgICAgICAgICAgICAgIGtleXM6IGtleXMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGFyZ3M6IGFyZ3MsIGtleXM6IG51bGwgfTtcbn1cbmV4cG9ydHMuYXJnc0FyZ0FycmF5T3JPYmplY3QgPSBhcmdzQXJnQXJyYXlPck9iamVjdDtcbmZ1bmN0aW9uIGlzUE9KTyhvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIGdldFByb3RvdHlwZU9mKG9iaikgPT09IG9iamVjdFByb3RvO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJnc0FyZ0FycmF5T3JPYmplY3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZU9iamVjdCA9IHZvaWQgMDtcbmZ1bmN0aW9uIGNyZWF0ZU9iamVjdChrZXlzLCB2YWx1ZXMpIHtcbiAgICByZXR1cm4ga2V5cy5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwga2V5LCBpKSB7IHJldHVybiAoKHJlc3VsdFtrZXldID0gdmFsdWVzW2ldKSwgcmVzdWx0KTsgfSwge30pO1xufVxuZXhwb3J0cy5jcmVhdGVPYmplY3QgPSBjcmVhdGVPYmplY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jcmVhdGVPYmplY3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbWJpbmVMYXRlc3RJbml0ID0gZXhwb3J0cy5jb21iaW5lTGF0ZXN0ID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xudmFyIGFyZ3NBcmdBcnJheU9yT2JqZWN0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcmdzQXJnQXJyYXlPck9iamVjdFwiKTtcbnZhciBmcm9tXzEgPSByZXF1aXJlKFwiLi9mcm9tXCIpO1xudmFyIGlkZW50aXR5XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pZGVudGl0eVwiKTtcbnZhciBtYXBPbmVPck1hbnlBcmdzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9tYXBPbmVPck1hbnlBcmdzXCIpO1xudmFyIGFyZ3NfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyZ3NcIik7XG52YXIgY3JlYXRlT2JqZWN0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9jcmVhdGVPYmplY3RcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBleGVjdXRlU2NoZWR1bGVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2V4ZWN1dGVTY2hlZHVsZVwiKTtcbmZ1bmN0aW9uIGNvbWJpbmVMYXRlc3QoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBzY2hlZHVsZXIgPSBhcmdzXzEucG9wU2NoZWR1bGVyKGFyZ3MpO1xuICAgIHZhciByZXN1bHRTZWxlY3RvciA9IGFyZ3NfMS5wb3BSZXN1bHRTZWxlY3RvcihhcmdzKTtcbiAgICB2YXIgX2EgPSBhcmdzQXJnQXJyYXlPck9iamVjdF8xLmFyZ3NBcmdBcnJheU9yT2JqZWN0KGFyZ3MpLCBvYnNlcnZhYmxlcyA9IF9hLmFyZ3MsIGtleXMgPSBfYS5rZXlzO1xuICAgIGlmIChvYnNlcnZhYmxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZyb21fMS5mcm9tKFtdLCBzY2hlZHVsZXIpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKGNvbWJpbmVMYXRlc3RJbml0KG9ic2VydmFibGVzLCBzY2hlZHVsZXIsIGtleXNcbiAgICAgICAgP1xuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlcykgeyByZXR1cm4gY3JlYXRlT2JqZWN0XzEuY3JlYXRlT2JqZWN0KGtleXMsIHZhbHVlcyk7IH1cbiAgICAgICAgOlxuICAgICAgICAgICAgaWRlbnRpdHlfMS5pZGVudGl0eSkpO1xuICAgIHJldHVybiByZXN1bHRTZWxlY3RvciA/IHJlc3VsdC5waXBlKG1hcE9uZU9yTWFueUFyZ3NfMS5tYXBPbmVPck1hbnlBcmdzKHJlc3VsdFNlbGVjdG9yKSkgOiByZXN1bHQ7XG59XG5leHBvcnRzLmNvbWJpbmVMYXRlc3QgPSBjb21iaW5lTGF0ZXN0O1xuZnVuY3Rpb24gY29tYmluZUxhdGVzdEluaXQob2JzZXJ2YWJsZXMsIHNjaGVkdWxlciwgdmFsdWVUcmFuc2Zvcm0pIHtcbiAgICBpZiAodmFsdWVUcmFuc2Zvcm0gPT09IHZvaWQgMCkgeyB2YWx1ZVRyYW5zZm9ybSA9IGlkZW50aXR5XzEuaWRlbnRpdHk7IH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgbWF5YmVTY2hlZHVsZShzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBvYnNlcnZhYmxlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICB2YXIgYWN0aXZlID0gbGVuZ3RoO1xuICAgICAgICAgICAgdmFyIHJlbWFpbmluZ0ZpcnN0VmFsdWVzID0gbGVuZ3RoO1xuICAgICAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICAgIG1heWJlU2NoZWR1bGUoc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBmcm9tXzEuZnJvbShvYnNlcnZhYmxlc1tpXSwgc2NoZWR1bGVyKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhhc0ZpcnN0VmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbaV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzRmlyc3RWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0ZpcnN0VmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0ZpcnN0VmFsdWVzLS07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbWFpbmluZ0ZpcnN0VmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlVHJhbnNmb3JtKHZhbHVlcy5zbGljZSgpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghLS1hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9LCBzdWJzY3JpYmVyKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgX2xvb3BfMShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgc3Vic2NyaWJlcik7XG4gICAgfTtcbn1cbmV4cG9ydHMuY29tYmluZUxhdGVzdEluaXQgPSBjb21iaW5lTGF0ZXN0SW5pdDtcbmZ1bmN0aW9uIG1heWJlU2NoZWR1bGUoc2NoZWR1bGVyLCBleGVjdXRlLCBzdWJzY3JpcHRpb24pIHtcbiAgICBpZiAoc2NoZWR1bGVyKSB7XG4gICAgICAgIGV4ZWN1dGVTY2hlZHVsZV8xLmV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpcHRpb24sIHNjaGVkdWxlciwgZXhlY3V0ZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBleGVjdXRlKCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tYmluZUxhdGVzdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubWVyZ2VJbnRlcm5hbHMgPSB2b2lkIDA7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgZXhlY3V0ZVNjaGVkdWxlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9leGVjdXRlU2NoZWR1bGVcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBtZXJnZUludGVybmFscyhzb3VyY2UsIHN1YnNjcmliZXIsIHByb2plY3QsIGNvbmN1cnJlbnQsIG9uQmVmb3JlTmV4dCwgZXhwYW5kLCBpbm5lclN1YlNjaGVkdWxlciwgYWRkaXRpb25hbEZpbmFsaXplcikge1xuICAgIHZhciBidWZmZXIgPSBbXTtcbiAgICB2YXIgYWN0aXZlID0gMDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBpc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgdmFyIGNoZWNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc0NvbXBsZXRlICYmICFidWZmZXIubGVuZ3RoICYmICFhY3RpdmUpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIG91dGVyTmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gKGFjdGl2ZSA8IGNvbmN1cnJlbnQgPyBkb0lubmVyU3ViKHZhbHVlKSA6IGJ1ZmZlci5wdXNoKHZhbHVlKSk7IH07XG4gICAgdmFyIGRvSW5uZXJTdWIgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgZXhwYW5kICYmIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgIGFjdGl2ZSsrO1xuICAgICAgICB2YXIgaW5uZXJDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICBpbm5lckZyb21fMS5pbm5lckZyb20ocHJvamVjdCh2YWx1ZSwgaW5kZXgrKykpLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKGlubmVyVmFsdWUpIHtcbiAgICAgICAgICAgIG9uQmVmb3JlTmV4dCA9PT0gbnVsbCB8fCBvbkJlZm9yZU5leHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQmVmb3JlTmV4dChpbm5lclZhbHVlKTtcbiAgICAgICAgICAgIGlmIChleHBhbmQpIHtcbiAgICAgICAgICAgICAgICBvdXRlck5leHQoaW5uZXJWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoaW5uZXJWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlubmVyQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICB9LCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChpbm5lckNvbXBsZXRlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlLS07XG4gICAgICAgICAgICAgICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlcmVkVmFsdWUgPSBidWZmZXIuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbm5lclN1YlNjaGVkdWxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVTY2hlZHVsZV8xLmV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBpbm5lclN1YlNjaGVkdWxlciwgZnVuY3Rpb24gKCkgeyByZXR1cm4gZG9Jbm5lclN1YihidWZmZXJlZFZhbHVlKTsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb0lubmVyU3ViKGJ1ZmZlcmVkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYnVmZmVyLmxlbmd0aCAmJiBhY3RpdmUgPCBjb25jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfbG9vcF8xKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2hlY2tDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICB9O1xuICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIG91dGVyTmV4dCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgY2hlY2tDb21wbGV0ZSgpO1xuICAgIH0pKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBhZGRpdGlvbmFsRmluYWxpemVyID09PSBudWxsIHx8IGFkZGl0aW9uYWxGaW5hbGl6ZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFkZGl0aW9uYWxGaW5hbGl6ZXIoKTtcbiAgICB9O1xufVxuZXhwb3J0cy5tZXJnZUludGVybmFscyA9IG1lcmdlSW50ZXJuYWxzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2VJbnRlcm5hbHMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm1lcmdlTWFwID0gdm9pZCAwO1xudmFyIG1hcF8xID0gcmVxdWlyZShcIi4vbWFwXCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgbWVyZ2VJbnRlcm5hbHNfMSA9IHJlcXVpcmUoXCIuL21lcmdlSW50ZXJuYWxzXCIpO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRnVuY3Rpb25cIik7XG5mdW5jdGlvbiBtZXJnZU1hcChwcm9qZWN0LCByZXN1bHRTZWxlY3RvciwgY29uY3VycmVudCkge1xuICAgIGlmIChjb25jdXJyZW50ID09PSB2b2lkIDApIHsgY29uY3VycmVudCA9IEluZmluaXR5OyB9XG4gICAgaWYgKGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHJlc3VsdFNlbGVjdG9yKSkge1xuICAgICAgICByZXR1cm4gbWVyZ2VNYXAoZnVuY3Rpb24gKGEsIGkpIHsgcmV0dXJuIG1hcF8xLm1hcChmdW5jdGlvbiAoYiwgaWkpIHsgcmV0dXJuIHJlc3VsdFNlbGVjdG9yKGEsIGIsIGksIGlpKTsgfSkoaW5uZXJGcm9tXzEuaW5uZXJGcm9tKHByb2plY3QoYSwgaSkpKTsgfSwgY29uY3VycmVudCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiByZXN1bHRTZWxlY3RvciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uY3VycmVudCA9IHJlc3VsdFNlbGVjdG9yO1xuICAgIH1cbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikgeyByZXR1cm4gbWVyZ2VJbnRlcm5hbHNfMS5tZXJnZUludGVybmFscyhzb3VyY2UsIHN1YnNjcmliZXIsIHByb2plY3QsIGNvbmN1cnJlbnQpOyB9KTtcbn1cbmV4cG9ydHMubWVyZ2VNYXAgPSBtZXJnZU1hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lcmdlTWFwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tZXJnZUFsbCA9IHZvaWQgMDtcbnZhciBtZXJnZU1hcF8xID0gcmVxdWlyZShcIi4vbWVyZ2VNYXBcIik7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lkZW50aXR5XCIpO1xuZnVuY3Rpb24gbWVyZ2VBbGwoY29uY3VycmVudCkge1xuICAgIGlmIChjb25jdXJyZW50ID09PSB2b2lkIDApIHsgY29uY3VycmVudCA9IEluZmluaXR5OyB9XG4gICAgcmV0dXJuIG1lcmdlTWFwXzEubWVyZ2VNYXAoaWRlbnRpdHlfMS5pZGVudGl0eSwgY29uY3VycmVudCk7XG59XG5leHBvcnRzLm1lcmdlQWxsID0gbWVyZ2VBbGw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnZUFsbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29uY2F0QWxsID0gdm9pZCAwO1xudmFyIG1lcmdlQWxsXzEgPSByZXF1aXJlKFwiLi9tZXJnZUFsbFwiKTtcbmZ1bmN0aW9uIGNvbmNhdEFsbCgpIHtcbiAgICByZXR1cm4gbWVyZ2VBbGxfMS5tZXJnZUFsbCgxKTtcbn1cbmV4cG9ydHMuY29uY2F0QWxsID0gY29uY2F0QWxsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uY2F0QWxsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb25jYXQgPSB2b2lkIDA7XG52YXIgY29uY2F0QWxsXzEgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzL2NvbmNhdEFsbFwiKTtcbnZhciBhcmdzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcmdzXCIpO1xudmFyIGZyb21fMSA9IHJlcXVpcmUoXCIuL2Zyb21cIik7XG5mdW5jdGlvbiBjb25jYXQoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiBjb25jYXRBbGxfMS5jb25jYXRBbGwoKShmcm9tXzEuZnJvbShhcmdzLCBhcmdzXzEucG9wU2NoZWR1bGVyKGFyZ3MpKSk7XG59XG5leHBvcnRzLmNvbmNhdCA9IGNvbmNhdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmNhdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmZXIgPSB2b2lkIDA7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL09ic2VydmFibGVcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi9pbm5lckZyb21cIik7XG5mdW5jdGlvbiBkZWZlcihvYnNlcnZhYmxlRmFjdG9yeSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKG9ic2VydmFibGVGYWN0b3J5KCkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVmZXIgPSBkZWZlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb25uZWN0YWJsZSA9IHZvaWQgMDtcbnZhciBTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi4vU3ViamVjdFwiKTtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBkZWZlcl8xID0gcmVxdWlyZShcIi4vZGVmZXJcIik7XG52YXIgREVGQVVMVF9DT05GSUcgPSB7XG4gICAgY29ubmVjdG9yOiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgU3ViamVjdF8xLlN1YmplY3QoKTsgfSxcbiAgICByZXNldE9uRGlzY29ubmVjdDogdHJ1ZSxcbn07XG5mdW5jdGlvbiBjb25uZWN0YWJsZShzb3VyY2UsIGNvbmZpZykge1xuICAgIGlmIChjb25maWcgPT09IHZvaWQgMCkgeyBjb25maWcgPSBERUZBVUxUX0NPTkZJRzsgfVxuICAgIHZhciBjb25uZWN0aW9uID0gbnVsbDtcbiAgICB2YXIgY29ubmVjdG9yID0gY29uZmlnLmNvbm5lY3RvciwgX2EgPSBjb25maWcucmVzZXRPbkRpc2Nvbm5lY3QsIHJlc2V0T25EaXNjb25uZWN0ID0gX2EgPT09IHZvaWQgMCA/IHRydWUgOiBfYTtcbiAgICB2YXIgc3ViamVjdCA9IGNvbm5lY3RvcigpO1xuICAgIHZhciByZXN1bHQgPSBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Quc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH0pO1xuICAgIHJlc3VsdC5jb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWNvbm5lY3Rpb24gfHwgY29ubmVjdGlvbi5jbG9zZWQpIHtcbiAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBkZWZlcl8xLmRlZmVyKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNvdXJjZTsgfSkuc3Vic2NyaWJlKHN1YmplY3QpO1xuICAgICAgICAgICAgaWYgKHJlc2V0T25EaXNjb25uZWN0KSB7XG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5hZGQoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHN1YmplY3QgPSBjb25uZWN0b3IoKSk7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb25uZWN0aW9uO1xuICAgIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMuY29ubmVjdGFibGUgPSBjb25uZWN0YWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbm5lY3RhYmxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mb3JrSm9pbiA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBhcmdzQXJnQXJyYXlPck9iamVjdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc0FyZ0FycmF5T3JPYmplY3RcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi9pbm5lckZyb21cIik7XG52YXIgYXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc1wiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuLi9vcGVyYXRvcnMvT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xudmFyIG1hcE9uZU9yTWFueUFyZ3NfMSA9IHJlcXVpcmUoXCIuLi91dGlsL21hcE9uZU9yTWFueUFyZ3NcIik7XG52YXIgY3JlYXRlT2JqZWN0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9jcmVhdGVPYmplY3RcIik7XG5mdW5jdGlvbiBmb3JrSm9pbigpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdFNlbGVjdG9yID0gYXJnc18xLnBvcFJlc3VsdFNlbGVjdG9yKGFyZ3MpO1xuICAgIHZhciBfYSA9IGFyZ3NBcmdBcnJheU9yT2JqZWN0XzEuYXJnc0FyZ0FycmF5T3JPYmplY3QoYXJncyksIHNvdXJjZXMgPSBfYS5hcmdzLCBrZXlzID0gX2Eua2V5cztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgICAgIHZhciByZW1haW5pbmdDb21wbGV0aW9ucyA9IGxlbmd0aDtcbiAgICAgICAgdmFyIHJlbWFpbmluZ0VtaXNzaW9ucyA9IGxlbmd0aDtcbiAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoc291cmNlSW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKHNvdXJjZXNbc291cmNlSW5kZXhdKS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICghaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdFbWlzc2lvbnMtLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsdWVzW3NvdXJjZUluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVtYWluaW5nQ29tcGxldGlvbnMtLTsgfSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdDb21wbGV0aW9ucyB8fCAhaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdFbWlzc2lvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChrZXlzID8gY3JlYXRlT2JqZWN0XzEuY3JlYXRlT2JqZWN0KGtleXMsIHZhbHVlcykgOiB2YWx1ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAodmFyIHNvdXJjZUluZGV4ID0gMDsgc291cmNlSW5kZXggPCBsZW5ndGg7IHNvdXJjZUluZGV4KyspIHtcbiAgICAgICAgICAgIF9sb29wXzEoc291cmNlSW5kZXgpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdFNlbGVjdG9yID8gcmVzdWx0LnBpcGUobWFwT25lT3JNYW55QXJnc18xLm1hcE9uZU9yTWFueUFyZ3MocmVzdWx0U2VsZWN0b3IpKSA6IHJlc3VsdDtcbn1cbmV4cG9ydHMuZm9ya0pvaW4gPSBmb3JrSm9pbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZvcmtKb2luLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tRXZlbnQgPSB2b2lkIDA7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL09ic2VydmFibGVcIik7XG52YXIgbWVyZ2VNYXBfMSA9IHJlcXVpcmUoXCIuLi9vcGVyYXRvcnMvbWVyZ2VNYXBcIik7XG52YXIgaXNBcnJheUxpa2VfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzQXJyYXlMaWtlXCIpO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRnVuY3Rpb25cIik7XG52YXIgbWFwT25lT3JNYW55QXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvbWFwT25lT3JNYW55QXJnc1wiKTtcbnZhciBub2RlRXZlbnRFbWl0dGVyTWV0aG9kcyA9IFsnYWRkTGlzdGVuZXInLCAncmVtb3ZlTGlzdGVuZXInXTtcbnZhciBldmVudFRhcmdldE1ldGhvZHMgPSBbJ2FkZEV2ZW50TGlzdGVuZXInLCAncmVtb3ZlRXZlbnRMaXN0ZW5lciddO1xudmFyIGpxdWVyeU1ldGhvZHMgPSBbJ29uJywgJ29mZiddO1xuZnVuY3Rpb24gZnJvbUV2ZW50KHRhcmdldCwgZXZlbnROYW1lLCBvcHRpb25zLCByZXN1bHRTZWxlY3Rvcikge1xuICAgIGlmIChpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbihvcHRpb25zKSkge1xuICAgICAgICByZXN1bHRTZWxlY3RvciA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChyZXN1bHRTZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gZnJvbUV2ZW50KHRhcmdldCwgZXZlbnROYW1lLCBvcHRpb25zKS5waXBlKG1hcE9uZU9yTWFueUFyZ3NfMS5tYXBPbmVPck1hbnlBcmdzKHJlc3VsdFNlbGVjdG9yKSk7XG4gICAgfVxuICAgIHZhciBfYSA9IF9fcmVhZChpc0V2ZW50VGFyZ2V0KHRhcmdldClcbiAgICAgICAgPyBldmVudFRhcmdldE1ldGhvZHMubWFwKGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7IHJldHVybiBmdW5jdGlvbiAoaGFuZGxlcikgeyByZXR1cm4gdGFyZ2V0W21ldGhvZE5hbWVdKGV2ZW50TmFtZSwgaGFuZGxlciwgb3B0aW9ucyk7IH07IH0pXG4gICAgICAgIDpcbiAgICAgICAgICAgIGlzTm9kZVN0eWxlRXZlbnRFbWl0dGVyKHRhcmdldClcbiAgICAgICAgICAgICAgICA/IG5vZGVFdmVudEVtaXR0ZXJNZXRob2RzLm1hcCh0b0NvbW1vbkhhbmRsZXJSZWdpc3RyeSh0YXJnZXQsIGV2ZW50TmFtZSkpXG4gICAgICAgICAgICAgICAgOiBpc0pRdWVyeVN0eWxlRXZlbnRFbWl0dGVyKHRhcmdldClcbiAgICAgICAgICAgICAgICAgICAgPyBqcXVlcnlNZXRob2RzLm1hcCh0b0NvbW1vbkhhbmRsZXJSZWdpc3RyeSh0YXJnZXQsIGV2ZW50TmFtZSkpXG4gICAgICAgICAgICAgICAgICAgIDogW10sIDIpLCBhZGQgPSBfYVswXSwgcmVtb3ZlID0gX2FbMV07XG4gICAgaWYgKCFhZGQpIHtcbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlXzEuaXNBcnJheUxpa2UodGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG1lcmdlTWFwXzEubWVyZ2VNYXAoZnVuY3Rpb24gKHN1YlRhcmdldCkgeyByZXR1cm4gZnJvbUV2ZW50KHN1YlRhcmdldCwgZXZlbnROYW1lLCBvcHRpb25zKTsgfSkoaW5uZXJGcm9tXzEuaW5uZXJGcm9tKHRhcmdldCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghYWRkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgZXZlbnQgdGFyZ2V0Jyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3Vic2NyaWJlci5uZXh0KDEgPCBhcmdzLmxlbmd0aCA/IGFyZ3MgOiBhcmdzWzBdKTtcbiAgICAgICAgfTtcbiAgICAgICAgYWRkKGhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVtb3ZlKGhhbmRsZXIpOyB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5mcm9tRXZlbnQgPSBmcm9tRXZlbnQ7XG5mdW5jdGlvbiB0b0NvbW1vbkhhbmRsZXJSZWdpc3RyeSh0YXJnZXQsIGV2ZW50TmFtZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAobWV0aG9kTmFtZSkgeyByZXR1cm4gZnVuY3Rpb24gKGhhbmRsZXIpIHsgcmV0dXJuIHRhcmdldFttZXRob2ROYW1lXShldmVudE5hbWUsIGhhbmRsZXIpOyB9OyB9O1xufVxuZnVuY3Rpb24gaXNOb2RlU3R5bGVFdmVudEVtaXR0ZXIodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHRhcmdldC5hZGRMaXN0ZW5lcikgJiYgaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24odGFyZ2V0LnJlbW92ZUxpc3RlbmVyKTtcbn1cbmZ1bmN0aW9uIGlzSlF1ZXJ5U3R5bGVFdmVudEVtaXR0ZXIodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHRhcmdldC5vbikgJiYgaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24odGFyZ2V0Lm9mZik7XG59XG5mdW5jdGlvbiBpc0V2ZW50VGFyZ2V0KHRhcmdldCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbih0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcikgJiYgaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24odGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZnJvbUV2ZW50LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tRXZlbnRQYXR0ZXJuID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRnVuY3Rpb25cIik7XG52YXIgbWFwT25lT3JNYW55QXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvbWFwT25lT3JNYW55QXJnc1wiKTtcbmZ1bmN0aW9uIGZyb21FdmVudFBhdHRlcm4oYWRkSGFuZGxlciwgcmVtb3ZlSGFuZGxlciwgcmVzdWx0U2VsZWN0b3IpIHtcbiAgICBpZiAocmVzdWx0U2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZyb21FdmVudFBhdHRlcm4oYWRkSGFuZGxlciwgcmVtb3ZlSGFuZGxlcikucGlwZShtYXBPbmVPck1hbnlBcmdzXzEubWFwT25lT3JNYW55QXJncyhyZXN1bHRTZWxlY3RvcikpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGUgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgZVtfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN1YnNjcmliZXIubmV4dChlLmxlbmd0aCA9PT0gMSA/IGVbMF0gOiBlKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJldFZhbHVlID0gYWRkSGFuZGxlcihoYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHJlbW92ZUhhbmRsZXIpID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVtb3ZlSGFuZGxlcihoYW5kbGVyLCByZXRWYWx1ZSk7IH0gOiB1bmRlZmluZWQ7XG4gICAgfSk7XG59XG5leHBvcnRzLmZyb21FdmVudFBhdHRlcm4gPSBmcm9tRXZlbnRQYXR0ZXJuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZnJvbUV2ZW50UGF0dGVybi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZW5lcmF0ZSA9IHZvaWQgMDtcbnZhciBpZGVudGl0eV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaWRlbnRpdHlcIik7XG52YXIgaXNTY2hlZHVsZXJfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzU2NoZWR1bGVyXCIpO1xudmFyIGRlZmVyXzEgPSByZXF1aXJlKFwiLi9kZWZlclwiKTtcbnZhciBzY2hlZHVsZUl0ZXJhYmxlXzEgPSByZXF1aXJlKFwiLi4vc2NoZWR1bGVkL3NjaGVkdWxlSXRlcmFibGVcIik7XG5mdW5jdGlvbiBnZW5lcmF0ZShpbml0aWFsU3RhdGVPck9wdGlvbnMsIGNvbmRpdGlvbiwgaXRlcmF0ZSwgcmVzdWx0U2VsZWN0b3JPclNjaGVkdWxlciwgc2NoZWR1bGVyKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICB2YXIgcmVzdWx0U2VsZWN0b3I7XG4gICAgdmFyIGluaXRpYWxTdGF0ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAoX2EgPSBpbml0aWFsU3RhdGVPck9wdGlvbnMsIGluaXRpYWxTdGF0ZSA9IF9hLmluaXRpYWxTdGF0ZSwgY29uZGl0aW9uID0gX2EuY29uZGl0aW9uLCBpdGVyYXRlID0gX2EuaXRlcmF0ZSwgX2IgPSBfYS5yZXN1bHRTZWxlY3RvciwgcmVzdWx0U2VsZWN0b3IgPSBfYiA9PT0gdm9pZCAwID8gaWRlbnRpdHlfMS5pZGVudGl0eSA6IF9iLCBzY2hlZHVsZXIgPSBfYS5zY2hlZHVsZXIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlT3JPcHRpb25zO1xuICAgICAgICBpZiAoIXJlc3VsdFNlbGVjdG9yT3JTY2hlZHVsZXIgfHwgaXNTY2hlZHVsZXJfMS5pc1NjaGVkdWxlcihyZXN1bHRTZWxlY3Rvck9yU2NoZWR1bGVyKSkge1xuICAgICAgICAgICAgcmVzdWx0U2VsZWN0b3IgPSBpZGVudGl0eV8xLmlkZW50aXR5O1xuICAgICAgICAgICAgc2NoZWR1bGVyID0gcmVzdWx0U2VsZWN0b3JPclNjaGVkdWxlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdFNlbGVjdG9yID0gcmVzdWx0U2VsZWN0b3JPclNjaGVkdWxlcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZW4oKSB7XG4gICAgICAgIHZhciBzdGF0ZTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKCFjb25kaXRpb24gfHwgY29uZGl0aW9uKHN0YXRlKSkpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgcmVzdWx0U2VsZWN0b3Ioc3RhdGUpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSAzO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBpdGVyYXRlKHN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAxXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZGVmZXJfMS5kZWZlcigoc2NoZWR1bGVyXG4gICAgICAgID9cbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjaGVkdWxlSXRlcmFibGVfMS5zY2hlZHVsZUl0ZXJhYmxlKGdlbigpLCBzY2hlZHVsZXIpOyB9XG4gICAgICAgIDpcbiAgICAgICAgICAgIGdlbikpO1xufVxuZXhwb3J0cy5nZW5lcmF0ZSA9IGdlbmVyYXRlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2VuZXJhdGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlpZiA9IHZvaWQgMDtcbnZhciBkZWZlcl8xID0gcmVxdWlyZShcIi4vZGVmZXJcIik7XG5mdW5jdGlvbiBpaWYoY29uZGl0aW9uLCB0cnVlUmVzdWx0LCBmYWxzZVJlc3VsdCkge1xuICAgIHJldHVybiBkZWZlcl8xLmRlZmVyKGZ1bmN0aW9uICgpIHsgcmV0dXJuIChjb25kaXRpb24oKSA/IHRydWVSZXN1bHQgOiBmYWxzZVJlc3VsdCk7IH0pO1xufVxuZXhwb3J0cy5paWYgPSBpaWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1paWYuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRpbWVyID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xudmFyIGFzeW5jXzEgPSByZXF1aXJlKFwiLi4vc2NoZWR1bGVyL2FzeW5jXCIpO1xudmFyIGlzU2NoZWR1bGVyXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc1NjaGVkdWxlclwiKTtcbnZhciBpc0RhdGVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRGF0ZVwiKTtcbmZ1bmN0aW9uIHRpbWVyKGR1ZVRpbWUsIGludGVydmFsT3JTY2hlZHVsZXIsIHNjaGVkdWxlcikge1xuICAgIGlmIChkdWVUaW1lID09PSB2b2lkIDApIHsgZHVlVGltZSA9IDA7IH1cbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsgc2NoZWR1bGVyID0gYXN5bmNfMS5hc3luYzsgfVxuICAgIHZhciBpbnRlcnZhbER1cmF0aW9uID0gLTE7XG4gICAgaWYgKGludGVydmFsT3JTY2hlZHVsZXIgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNTY2hlZHVsZXJfMS5pc1NjaGVkdWxlcihpbnRlcnZhbE9yU2NoZWR1bGVyKSkge1xuICAgICAgICAgICAgc2NoZWR1bGVyID0gaW50ZXJ2YWxPclNjaGVkdWxlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGludGVydmFsRHVyYXRpb24gPSBpbnRlcnZhbE9yU2NoZWR1bGVyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGR1ZSA9IGlzRGF0ZV8xLmlzVmFsaWREYXRlKGR1ZVRpbWUpID8gK2R1ZVRpbWUgLSBzY2hlZHVsZXIubm93KCkgOiBkdWVUaW1lO1xuICAgICAgICBpZiAoZHVlIDwgMCkge1xuICAgICAgICAgICAgZHVlID0gMDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbiA9IDA7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChuKyspO1xuICAgICAgICAgICAgICAgIGlmICgwIDw9IGludGVydmFsRHVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2hlZHVsZSh1bmRlZmluZWQsIGludGVydmFsRHVyYXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZHVlKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMudGltZXIgPSB0aW1lcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pbnRlcnZhbCA9IHZvaWQgMDtcbnZhciBhc3luY18xID0gcmVxdWlyZShcIi4uL3NjaGVkdWxlci9hc3luY1wiKTtcbnZhciB0aW1lcl8xID0gcmVxdWlyZShcIi4vdGltZXJcIik7XG5mdW5jdGlvbiBpbnRlcnZhbChwZXJpb2QsIHNjaGVkdWxlcikge1xuICAgIGlmIChwZXJpb2QgPT09IHZvaWQgMCkgeyBwZXJpb2QgPSAwOyB9XG4gICAgaWYgKHNjaGVkdWxlciA9PT0gdm9pZCAwKSB7IHNjaGVkdWxlciA9IGFzeW5jXzEuYXN5bmNTY2hlZHVsZXI7IH1cbiAgICBpZiAocGVyaW9kIDwgMCkge1xuICAgICAgICBwZXJpb2QgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gdGltZXJfMS50aW1lcihwZXJpb2QsIHBlcmlvZCwgc2NoZWR1bGVyKTtcbn1cbmV4cG9ydHMuaW50ZXJ2YWwgPSBpbnRlcnZhbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVydmFsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tZXJnZSA9IHZvaWQgMDtcbnZhciBtZXJnZUFsbF8xID0gcmVxdWlyZShcIi4uL29wZXJhdG9ycy9tZXJnZUFsbFwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuL2lubmVyRnJvbVwiKTtcbnZhciBlbXB0eV8xID0gcmVxdWlyZShcIi4vZW1wdHlcIik7XG52YXIgYXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc1wiKTtcbnZhciBmcm9tXzEgPSByZXF1aXJlKFwiLi9mcm9tXCIpO1xuZnVuY3Rpb24gbWVyZ2UoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBzY2hlZHVsZXIgPSBhcmdzXzEucG9wU2NoZWR1bGVyKGFyZ3MpO1xuICAgIHZhciBjb25jdXJyZW50ID0gYXJnc18xLnBvcE51bWJlcihhcmdzLCBJbmZpbml0eSk7XG4gICAgdmFyIHNvdXJjZXMgPSBhcmdzO1xuICAgIHJldHVybiAhc291cmNlcy5sZW5ndGhcbiAgICAgICAgP1xuICAgICAgICAgICAgZW1wdHlfMS5FTVBUWVxuICAgICAgICA6IHNvdXJjZXMubGVuZ3RoID09PSAxXG4gICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKHNvdXJjZXNbMF0pXG4gICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgbWVyZ2VBbGxfMS5tZXJnZUFsbChjb25jdXJyZW50KShmcm9tXzEuZnJvbShzb3VyY2VzLCBzY2hlZHVsZXIpKTtcbn1cbmV4cG9ydHMubWVyZ2UgPSBtZXJnZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lcmdlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5uZXZlciA9IGV4cG9ydHMuTkVWRVIgPSB2b2lkIDA7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL09ic2VydmFibGVcIik7XG52YXIgbm9vcF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbm9vcFwiKTtcbmV4cG9ydHMuTkVWRVIgPSBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUobm9vcF8xLm5vb3ApO1xuZnVuY3Rpb24gbmV2ZXIoKSB7XG4gICAgcmV0dXJuIGV4cG9ydHMuTkVWRVI7XG59XG5leHBvcnRzLm5ldmVyID0gbmV2ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1uZXZlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXJnc09yQXJnQXJyYXkgPSB2b2lkIDA7XG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5mdW5jdGlvbiBhcmdzT3JBcmdBcnJheShhcmdzKSB7XG4gICAgcmV0dXJuIGFyZ3MubGVuZ3RoID09PSAxICYmIGlzQXJyYXkoYXJnc1swXSkgPyBhcmdzWzBdIDogYXJncztcbn1cbmV4cG9ydHMuYXJnc09yQXJnQXJyYXkgPSBhcmdzT3JBcmdBcnJheTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFyZ3NPckFyZ0FycmF5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5vbkVycm9yUmVzdW1lTmV4dCA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBhcmdzT3JBcmdBcnJheV8xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc09yQXJnQXJyYXlcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBub29wXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9ub29wXCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4vaW5uZXJGcm9tXCIpO1xuZnVuY3Rpb24gb25FcnJvclJlc3VtZU5leHQoKSB7XG4gICAgdmFyIHNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBzb3VyY2VzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBuZXh0U291cmNlcyA9IGFyZ3NPckFyZ0FycmF5XzEuYXJnc09yQXJnQXJyYXkoc291cmNlcyk7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgc291cmNlSW5kZXggPSAwO1xuICAgICAgICB2YXIgc3Vic2NyaWJlTmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChzb3VyY2VJbmRleCA8IG5leHRTb3VyY2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBuZXh0U291cmNlID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRTb3VyY2UgPSBpbm5lckZyb21fMS5pbm5lckZyb20obmV4dFNvdXJjZXNbc291cmNlSW5kZXgrK10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZU5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJTdWJzY3JpYmVyID0gbmV3IE9wZXJhdG9yU3Vic2NyaWJlcl8xLk9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB1bmRlZmluZWQsIG5vb3BfMS5ub29wLCBub29wXzEubm9vcCk7XG4gICAgICAgICAgICAgICAgbmV4dFNvdXJjZS5zdWJzY3JpYmUoaW5uZXJTdWJzY3JpYmVyKTtcbiAgICAgICAgICAgICAgICBpbm5lclN1YnNjcmliZXIuYWRkKHN1YnNjcmliZU5leHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzdWJzY3JpYmVOZXh0KCk7XG4gICAgfSk7XG59XG5leHBvcnRzLm9uRXJyb3JSZXN1bWVOZXh0ID0gb25FcnJvclJlc3VtZU5leHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vbkVycm9yUmVzdW1lTmV4dC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGFpcnMgPSB2b2lkIDA7XG52YXIgZnJvbV8xID0gcmVxdWlyZShcIi4vZnJvbVwiKTtcbmZ1bmN0aW9uIHBhaXJzKG9iaiwgc2NoZWR1bGVyKSB7XG4gICAgcmV0dXJuIGZyb21fMS5mcm9tKE9iamVjdC5lbnRyaWVzKG9iaiksIHNjaGVkdWxlcik7XG59XG5leHBvcnRzLnBhaXJzID0gcGFpcnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYWlycy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubm90ID0gdm9pZCAwO1xuZnVuY3Rpb24gbm90KHByZWQsIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkgeyByZXR1cm4gIXByZWQuY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaW5kZXgpOyB9O1xufVxuZXhwb3J0cy5ub3QgPSBub3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZpbHRlciA9IHZvaWQgMDtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gZmlsdGVyKHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gcHJlZGljYXRlLmNhbGwodGhpc0FyZywgdmFsdWUsIGluZGV4KyspICYmIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7IH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZmlsdGVyID0gZmlsdGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmlsdGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJ0aXRpb24gPSB2b2lkIDA7XG52YXIgbm90XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9ub3RcIik7XG52YXIgZmlsdGVyXzEgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzL2ZpbHRlclwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuL2lubmVyRnJvbVwiKTtcbmZ1bmN0aW9uIHBhcnRpdGlvbihzb3VyY2UsIHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgIHJldHVybiBbZmlsdGVyXzEuZmlsdGVyKHByZWRpY2F0ZSwgdGhpc0FyZykoaW5uZXJGcm9tXzEuaW5uZXJGcm9tKHNvdXJjZSkpLCBmaWx0ZXJfMS5maWx0ZXIobm90XzEubm90KHByZWRpY2F0ZSwgdGhpc0FyZykpKGlubmVyRnJvbV8xLmlubmVyRnJvbShzb3VyY2UpKV07XG59XG5leHBvcnRzLnBhcnRpdGlvbiA9IHBhcnRpdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhcnRpdGlvbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmFjZUluaXQgPSBleHBvcnRzLnJhY2UgPSB2b2lkIDA7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL09ic2VydmFibGVcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi9pbm5lckZyb21cIik7XG52YXIgYXJnc09yQXJnQXJyYXlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyZ3NPckFyZ0FycmF5XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4uL29wZXJhdG9ycy9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiByYWNlKCkge1xuICAgIHZhciBzb3VyY2VzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgc291cmNlc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICBzb3VyY2VzID0gYXJnc09yQXJnQXJyYXlfMS5hcmdzT3JBcmdBcnJheShzb3VyY2VzKTtcbiAgICByZXR1cm4gc291cmNlcy5sZW5ndGggPT09IDEgPyBpbm5lckZyb21fMS5pbm5lckZyb20oc291cmNlc1swXSkgOiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUocmFjZUluaXQoc291cmNlcykpO1xufVxuZXhwb3J0cy5yYWNlID0gcmFjZTtcbmZ1bmN0aW9uIHJhY2VJbml0KHNvdXJjZXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5wdXNoKGlubmVyRnJvbV8xLmlubmVyRnJvbShzb3VyY2VzW2ldKS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHMgPSAwOyBzIDwgc3Vic2NyaXB0aW9ucy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcyAhPT0gaSAmJiBzdWJzY3JpcHRpb25zW3NdLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICB9O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgc3Vic2NyaXB0aW9ucyAmJiAhc3Vic2NyaWJlci5jbG9zZWQgJiYgaSA8IHNvdXJjZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIF9sb29wXzEoaSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZXhwb3J0cy5yYWNlSW5pdCA9IHJhY2VJbml0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmFjZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmFuZ2UgPSB2b2lkIDA7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL09ic2VydmFibGVcIik7XG52YXIgZW1wdHlfMSA9IHJlcXVpcmUoXCIuL2VtcHR5XCIpO1xuZnVuY3Rpb24gcmFuZ2Uoc3RhcnQsIGNvdW50LCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoY291bnQgPT0gbnVsbCkge1xuICAgICAgICBjb3VudCA9IHN0YXJ0O1xuICAgICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIGlmIChjb3VudCA8PSAwKSB7XG4gICAgICAgIHJldHVybiBlbXB0eV8xLkVNUFRZO1xuICAgIH1cbiAgICB2YXIgZW5kID0gY291bnQgKyBzdGFydDtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKHNjaGVkdWxlclxuICAgICAgICA/XG4gICAgICAgICAgICBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgICAgIHZhciBuID0gc3RhcnQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobisrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NoZWR1bGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICA6XG4gICAgICAgICAgICBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgICAgIHZhciBuID0gc3RhcnQ7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG4gPCBlbmQgJiYgIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChuKyspO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KTtcbn1cbmV4cG9ydHMucmFuZ2UgPSByYW5nZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJhbmdlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51c2luZyA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuL2lubmVyRnJvbVwiKTtcbnZhciBlbXB0eV8xID0gcmVxdWlyZShcIi4vZW1wdHlcIik7XG5mdW5jdGlvbiB1c2luZyhyZXNvdXJjZUZhY3RvcnksIG9ic2VydmFibGVGYWN0b3J5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgcmVzb3VyY2UgPSByZXNvdXJjZUZhY3RvcnkoKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG9ic2VydmFibGVGYWN0b3J5KHJlc291cmNlKTtcbiAgICAgICAgdmFyIHNvdXJjZSA9IHJlc3VsdCA/IGlubmVyRnJvbV8xLmlubmVyRnJvbShyZXN1bHQpIDogZW1wdHlfMS5FTVBUWTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHJlc291cmNlLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLnVzaW5nID0gdXNpbmc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2luZy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnppcCA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuL2lubmVyRnJvbVwiKTtcbnZhciBhcmdzT3JBcmdBcnJheV8xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc09yQXJnQXJyYXlcIik7XG52YXIgZW1wdHlfMSA9IHJlcXVpcmUoXCIuL2VtcHR5XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4uL29wZXJhdG9ycy9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgYXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc1wiKTtcbmZ1bmN0aW9uIHppcCgpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdFNlbGVjdG9yID0gYXJnc18xLnBvcFJlc3VsdFNlbGVjdG9yKGFyZ3MpO1xuICAgIHZhciBzb3VyY2VzID0gYXJnc09yQXJnQXJyYXlfMS5hcmdzT3JBcmdBcnJheShhcmdzKTtcbiAgICByZXR1cm4gc291cmNlcy5sZW5ndGhcbiAgICAgICAgPyBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIHZhciBidWZmZXJzID0gc291cmNlcy5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gW107IH0pO1xuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IHNvdXJjZXMubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZhbHNlOyB9KTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBidWZmZXJzID0gY29tcGxldGVkID0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoc291cmNlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBpbm5lckZyb21fMS5pbm5lckZyb20oc291cmNlc1tzb3VyY2VJbmRleF0pLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnNbc291cmNlSW5kZXhdLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVycy5ldmVyeShmdW5jdGlvbiAoYnVmZmVyKSB7IHJldHVybiBidWZmZXIubGVuZ3RoOyB9KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGJ1ZmZlcnMubWFwKGZ1bmN0aW9uIChidWZmZXIpIHsgcmV0dXJuIGJ1ZmZlci5zaGlmdCgpOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChyZXN1bHRTZWxlY3RvciA/IHJlc3VsdFNlbGVjdG9yLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbXSwgX19yZWFkKHJlc3VsdCkpKSA6IHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVycy5zb21lKGZ1bmN0aW9uIChidWZmZXIsIGkpIHsgcmV0dXJuICFidWZmZXIubGVuZ3RoICYmIGNvbXBsZXRlZFtpXTsgfSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZFtzb3VyY2VJbmRleF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAhYnVmZmVyc1tzb3VyY2VJbmRleF0ubGVuZ3RoICYmIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yICh2YXIgc291cmNlSW5kZXggPSAwOyAhc3Vic2NyaWJlci5jbG9zZWQgJiYgc291cmNlSW5kZXggPCBzb3VyY2VzLmxlbmd0aDsgc291cmNlSW5kZXgrKykge1xuICAgICAgICAgICAgICAgIF9sb29wXzEoc291cmNlSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBidWZmZXJzID0gY29tcGxldGVkID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICAgIDogZW1wdHlfMS5FTVBUWTtcbn1cbmV4cG9ydHMuemlwID0gemlwO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9emlwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmF1ZGl0ID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBhdWRpdChkdXJhdGlvblNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHZhciBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB2YXIgZHVyYXRpb25TdWJzY3JpYmVyID0gbnVsbDtcbiAgICAgICAgdmFyIGlzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVuZER1cmF0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZHVyYXRpb25TdWJzY3JpYmVyID09PSBudWxsIHx8IGR1cmF0aW9uU3Vic2NyaWJlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZHVyYXRpb25TdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGhhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBsYXN0VmFsdWU7XG4gICAgICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXNDb21wbGV0ZSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBjbGVhbnVwRHVyYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsO1xuICAgICAgICAgICAgaXNDb21wbGV0ZSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgbGFzdFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAoIWR1cmF0aW9uU3Vic2NyaWJlcikge1xuICAgICAgICAgICAgICAgIGlubmVyRnJvbV8xLmlubmVyRnJvbShkdXJhdGlvblNlbGVjdG9yKHZhbHVlKSkuc3Vic2NyaWJlKChkdXJhdGlvblN1YnNjcmliZXIgPSBPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZW5kRHVyYXRpb24sIGNsZWFudXBEdXJhdGlvbikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAoIWhhc1ZhbHVlIHx8ICFkdXJhdGlvblN1YnNjcmliZXIgfHwgZHVyYXRpb25TdWJzY3JpYmVyLmNsb3NlZCkgJiYgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmF1ZGl0ID0gYXVkaXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hdWRpdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXVkaXRUaW1lID0gdm9pZCAwO1xudmFyIGFzeW5jXzEgPSByZXF1aXJlKFwiLi4vc2NoZWR1bGVyL2FzeW5jXCIpO1xudmFyIGF1ZGl0XzEgPSByZXF1aXJlKFwiLi9hdWRpdFwiKTtcbnZhciB0aW1lcl8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvdGltZXJcIik7XG5mdW5jdGlvbiBhdWRpdFRpbWUoZHVyYXRpb24sIHNjaGVkdWxlcikge1xuICAgIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkgeyBzY2hlZHVsZXIgPSBhc3luY18xLmFzeW5jU2NoZWR1bGVyOyB9XG4gICAgcmV0dXJuIGF1ZGl0XzEuYXVkaXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGltZXJfMS50aW1lcihkdXJhdGlvbiwgc2NoZWR1bGVyKTsgfSk7XG59XG5leHBvcnRzLmF1ZGl0VGltZSA9IGF1ZGl0VGltZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF1ZGl0VGltZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYnVmZmVyID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgbm9vcF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbm9vcFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbmZ1bmN0aW9uIGJ1ZmZlcihjbG9zaW5nTm90aWZpZXIpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgY3VycmVudEJ1ZmZlciA9IFtdO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIGN1cnJlbnRCdWZmZXIucHVzaCh2YWx1ZSk7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChjdXJyZW50QnVmZmVyKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSkpO1xuICAgICAgICBpbm5lckZyb21fMS5pbm5lckZyb20oY2xvc2luZ05vdGlmaWVyKS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBiID0gY3VycmVudEJ1ZmZlcjtcbiAgICAgICAgICAgIGN1cnJlbnRCdWZmZXIgPSBbXTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChiKTtcbiAgICAgICAgfSwgbm9vcF8xLm5vb3ApKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGN1cnJlbnRCdWZmZXIgPSBudWxsO1xuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5idWZmZXIgPSBidWZmZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1idWZmZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX192YWx1ZXMgPSAodGhpcyAmJiB0aGlzLl9fdmFsdWVzKSB8fCBmdW5jdGlvbihvKSB7XG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJ1ZmZlckNvdW50ID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgYXJyUmVtb3ZlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcnJSZW1vdmVcIik7XG5mdW5jdGlvbiBidWZmZXJDb3VudChidWZmZXJTaXplLCBzdGFydEJ1ZmZlckV2ZXJ5KSB7XG4gICAgaWYgKHN0YXJ0QnVmZmVyRXZlcnkgPT09IHZvaWQgMCkgeyBzdGFydEJ1ZmZlckV2ZXJ5ID0gbnVsbDsgfVxuICAgIHN0YXJ0QnVmZmVyRXZlcnkgPSBzdGFydEJ1ZmZlckV2ZXJ5ICE9PSBudWxsICYmIHN0YXJ0QnVmZmVyRXZlcnkgIT09IHZvaWQgMCA/IHN0YXJ0QnVmZmVyRXZlcnkgOiBidWZmZXJTaXplO1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBidWZmZXJzID0gW107XG4gICAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2EsIGVfMiwgX2I7XG4gICAgICAgICAgICB2YXIgdG9FbWl0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChjb3VudCsrICUgc3RhcnRCdWZmZXJFdmVyeSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGJ1ZmZlcnNfMSA9IF9fdmFsdWVzKGJ1ZmZlcnMpLCBidWZmZXJzXzFfMSA9IGJ1ZmZlcnNfMS5uZXh0KCk7ICFidWZmZXJzXzFfMS5kb25lOyBidWZmZXJzXzFfMSA9IGJ1ZmZlcnNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGJ1ZmZlcnNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBidWZmZXIucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJTaXplIDw9IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvRW1pdCA9IHRvRW1pdCAhPT0gbnVsbCAmJiB0b0VtaXQgIT09IHZvaWQgMCA/IHRvRW1pdCA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9FbWl0LnB1c2goYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyc18xXzEgJiYgIWJ1ZmZlcnNfMV8xLmRvbmUgJiYgKF9hID0gYnVmZmVyc18xLnJldHVybikpIF9hLmNhbGwoYnVmZmVyc18xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRvRW1pdCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHRvRW1pdF8xID0gX192YWx1ZXModG9FbWl0KSwgdG9FbWl0XzFfMSA9IHRvRW1pdF8xLm5leHQoKTsgIXRvRW1pdF8xXzEuZG9uZTsgdG9FbWl0XzFfMSA9IHRvRW1pdF8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHRvRW1pdF8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJSZW1vdmVfMS5hcnJSZW1vdmUoYnVmZmVycywgYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9FbWl0XzFfMSAmJiAhdG9FbWl0XzFfMS5kb25lICYmIChfYiA9IHRvRW1pdF8xLnJldHVybikpIF9iLmNhbGwodG9FbWl0XzEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBlXzMsIF9hO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBidWZmZXJzXzIgPSBfX3ZhbHVlcyhidWZmZXJzKSwgYnVmZmVyc18yXzEgPSBidWZmZXJzXzIubmV4dCgpOyAhYnVmZmVyc18yXzEuZG9uZTsgYnVmZmVyc18yXzEgPSBidWZmZXJzXzIubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBidWZmZXJzXzJfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfM18xKSB7IGVfMyA9IHsgZXJyb3I6IGVfM18xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJzXzJfMSAmJiAhYnVmZmVyc18yXzEuZG9uZSAmJiAoX2EgPSBidWZmZXJzXzIucmV0dXJuKSkgX2EuY2FsbChidWZmZXJzXzIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMykgdGhyb3cgZV8zLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0sIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYnVmZmVycyA9IG51bGw7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuYnVmZmVyQ291bnQgPSBidWZmZXJDb3VudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1ZmZlckNvdW50LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fdmFsdWVzID0gKHRoaXMgJiYgdGhpcy5fX3ZhbHVlcykgfHwgZnVuY3Rpb24obykge1xuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5idWZmZXJUaW1lID0gdm9pZCAwO1xudmFyIFN1YnNjcmlwdGlvbl8xID0gcmVxdWlyZShcIi4uL1N1YnNjcmlwdGlvblwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xudmFyIGFyclJlbW92ZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJyUmVtb3ZlXCIpO1xudmFyIGFzeW5jXzEgPSByZXF1aXJlKFwiLi4vc2NoZWR1bGVyL2FzeW5jXCIpO1xudmFyIGFyZ3NfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyZ3NcIik7XG52YXIgZXhlY3V0ZVNjaGVkdWxlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9leGVjdXRlU2NoZWR1bGVcIik7XG5mdW5jdGlvbiBidWZmZXJUaW1lKGJ1ZmZlclRpbWVTcGFuKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICB2YXIgb3RoZXJBcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgb3RoZXJBcmdzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgc2NoZWR1bGVyID0gKF9hID0gYXJnc18xLnBvcFNjaGVkdWxlcihvdGhlckFyZ3MpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBhc3luY18xLmFzeW5jU2NoZWR1bGVyO1xuICAgIHZhciBidWZmZXJDcmVhdGlvbkludGVydmFsID0gKF9iID0gb3RoZXJBcmdzWzBdKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBudWxsO1xuICAgIHZhciBtYXhCdWZmZXJTaXplID0gb3RoZXJBcmdzWzFdIHx8IEluZmluaXR5O1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBidWZmZXJSZWNvcmRzID0gW107XG4gICAgICAgIHZhciByZXN0YXJ0T25FbWl0ID0gZmFsc2U7XG4gICAgICAgIHZhciBlbWl0ID0gZnVuY3Rpb24gKHJlY29yZCkge1xuICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHJlY29yZC5idWZmZXIsIHN1YnMgPSByZWNvcmQuc3VicztcbiAgICAgICAgICAgIHN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGFyclJlbW92ZV8xLmFyclJlbW92ZShidWZmZXJSZWNvcmRzLCByZWNvcmQpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGJ1ZmZlcik7XG4gICAgICAgICAgICByZXN0YXJ0T25FbWl0ICYmIHN0YXJ0QnVmZmVyKCk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBzdGFydEJ1ZmZlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChidWZmZXJSZWNvcmRzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN1YnMgPSBuZXcgU3Vic2NyaXB0aW9uXzEuU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5hZGQoc3Vicyk7XG4gICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciByZWNvcmRfMSA9IHtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyOiBidWZmZXIsXG4gICAgICAgICAgICAgICAgICAgIHN1YnM6IHN1YnMsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBidWZmZXJSZWNvcmRzLnB1c2gocmVjb3JkXzEpO1xuICAgICAgICAgICAgICAgIGV4ZWN1dGVTY2hlZHVsZV8xLmV4ZWN1dGVTY2hlZHVsZShzdWJzLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVtaXQocmVjb3JkXzEpOyB9LCBidWZmZXJUaW1lU3Bhbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChidWZmZXJDcmVhdGlvbkludGVydmFsICE9PSBudWxsICYmIGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwgPj0gMCkge1xuICAgICAgICAgICAgZXhlY3V0ZVNjaGVkdWxlXzEuZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgc3RhcnRCdWZmZXIsIGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdGFydE9uRW1pdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnRCdWZmZXIoKTtcbiAgICAgICAgdmFyIGJ1ZmZlclRpbWVTdWJzY3JpYmVyID0gT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICB2YXIgcmVjb3Jkc0NvcHkgPSBidWZmZXJSZWNvcmRzLnNsaWNlKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHJlY29yZHNDb3B5XzEgPSBfX3ZhbHVlcyhyZWNvcmRzQ29weSksIHJlY29yZHNDb3B5XzFfMSA9IHJlY29yZHNDb3B5XzEubmV4dCgpOyAhcmVjb3Jkc0NvcHlfMV8xLmRvbmU7IHJlY29yZHNDb3B5XzFfMSA9IHJlY29yZHNDb3B5XzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZWNvcmQgPSByZWNvcmRzQ29weV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSByZWNvcmQuYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICBidWZmZXIucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1heEJ1ZmZlclNpemUgPD0gYnVmZmVyLmxlbmd0aCAmJiBlbWl0KHJlY29yZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmRzQ29weV8xXzEgJiYgIXJlY29yZHNDb3B5XzFfMS5kb25lICYmIChfYSA9IHJlY29yZHNDb3B5XzEucmV0dXJuKSkgX2EuY2FsbChyZWNvcmRzQ29weV8xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aGlsZSAoYnVmZmVyUmVjb3JkcyA9PT0gbnVsbCB8fCBidWZmZXJSZWNvcmRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBidWZmZXJSZWNvcmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChidWZmZXJSZWNvcmRzLnNoaWZ0KCkuYnVmZmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1ZmZlclRpbWVTdWJzY3JpYmVyID09PSBudWxsIHx8IGJ1ZmZlclRpbWVTdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBidWZmZXJUaW1lU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIChidWZmZXJSZWNvcmRzID0gbnVsbCk7IH0pO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGJ1ZmZlclRpbWVTdWJzY3JpYmVyKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuYnVmZmVyVGltZSA9IGJ1ZmZlclRpbWU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1idWZmZXJUaW1lLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fdmFsdWVzID0gKHRoaXMgJiYgdGhpcy5fX3ZhbHVlcykgfHwgZnVuY3Rpb24obykge1xuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5idWZmZXJUb2dnbGUgPSB2b2lkIDA7XG52YXIgU3Vic2NyaXB0aW9uXzEgPSByZXF1aXJlKFwiLi4vU3Vic2NyaXB0aW9uXCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgbm9vcF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbm9vcFwiKTtcbnZhciBhcnJSZW1vdmVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyclJlbW92ZVwiKTtcbmZ1bmN0aW9uIGJ1ZmZlclRvZ2dsZShvcGVuaW5ncywgY2xvc2luZ1NlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGJ1ZmZlcnMgPSBbXTtcbiAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKG9wZW5pbmdzKS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uIChvcGVuVmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBidWZmZXIgPSBbXTtcbiAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgICAgICAgICAgdmFyIGNsb3NpbmdTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uXzEuU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICB2YXIgZW1pdEJ1ZmZlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBhcnJSZW1vdmVfMS5hcnJSZW1vdmUoYnVmZmVycywgYnVmZmVyKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYnVmZmVyKTtcbiAgICAgICAgICAgICAgICBjbG9zaW5nU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2xvc2luZ1N1YnNjcmlwdGlvbi5hZGQoaW5uZXJGcm9tXzEuaW5uZXJGcm9tKGNsb3NpbmdTZWxlY3RvcihvcGVuVmFsdWUpKS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGVtaXRCdWZmZXIsIG5vb3BfMS5ub29wKSkpO1xuICAgICAgICB9LCBub29wXzEubm9vcCkpO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBidWZmZXJzXzEgPSBfX3ZhbHVlcyhidWZmZXJzKSwgYnVmZmVyc18xXzEgPSBidWZmZXJzXzEubmV4dCgpOyAhYnVmZmVyc18xXzEuZG9uZTsgYnVmZmVyc18xXzEgPSBidWZmZXJzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBidWZmZXJzXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyc18xXzEgJiYgIWJ1ZmZlcnNfMV8xLmRvbmUgJiYgKF9hID0gYnVmZmVyc18xLnJldHVybikpIF9hLmNhbGwoYnVmZmVyc18xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aGlsZSAoYnVmZmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGJ1ZmZlcnMuc2hpZnQoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuYnVmZmVyVG9nZ2xlID0gYnVmZmVyVG9nZ2xlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnVmZmVyVG9nZ2xlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5idWZmZXJXaGVuID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgbm9vcF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbm9vcFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbmZ1bmN0aW9uIGJ1ZmZlcldoZW4oY2xvc2luZ1NlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGJ1ZmZlciA9IG51bGw7XG4gICAgICAgIHZhciBjbG9zaW5nU3Vic2NyaWJlciA9IG51bGw7XG4gICAgICAgIHZhciBvcGVuQnVmZmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2xvc2luZ1N1YnNjcmliZXIgPT09IG51bGwgfHwgY2xvc2luZ1N1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsb3NpbmdTdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB2YXIgYiA9IGJ1ZmZlcjtcbiAgICAgICAgICAgIGJ1ZmZlciA9IFtdO1xuICAgICAgICAgICAgYiAmJiBzdWJzY3JpYmVyLm5leHQoYik7XG4gICAgICAgICAgICBpbm5lckZyb21fMS5pbm5lckZyb20oY2xvc2luZ1NlbGVjdG9yKCkpLnN1YnNjcmliZSgoY2xvc2luZ1N1YnNjcmliZXIgPSBPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgb3BlbkJ1ZmZlciwgbm9vcF8xLm5vb3ApKSk7XG4gICAgICAgIH07XG4gICAgICAgIG9wZW5CdWZmZXIoKTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBidWZmZXIgPT09IG51bGwgfHwgYnVmZmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBidWZmZXIucHVzaCh2YWx1ZSk7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJ1ZmZlciAmJiBzdWJzY3JpYmVyLm5leHQoYnVmZmVyKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7IHJldHVybiAoYnVmZmVyID0gY2xvc2luZ1N1YnNjcmliZXIgPSBudWxsKTsgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5idWZmZXJXaGVuID0gYnVmZmVyV2hlbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1ZmZlcldoZW4uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNhdGNoRXJyb3IgPSB2b2lkIDA7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbmZ1bmN0aW9uIGNhdGNoRXJyb3Ioc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaW5uZXJTdWIgPSBudWxsO1xuICAgICAgICB2YXIgc3luY1Vuc3ViID0gZmFsc2U7XG4gICAgICAgIHZhciBoYW5kbGVkUmVzdWx0O1xuICAgICAgICBpbm5lclN1YiA9IHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBoYW5kbGVkUmVzdWx0ID0gaW5uZXJGcm9tXzEuaW5uZXJGcm9tKHNlbGVjdG9yKGVyciwgY2F0Y2hFcnJvcihzZWxlY3Rvcikoc291cmNlKSkpO1xuICAgICAgICAgICAgaWYgKGlubmVyU3ViKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICBpbm5lclN1YiA9IG51bGw7XG4gICAgICAgICAgICAgICAgaGFuZGxlZFJlc3VsdC5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzeW5jVW5zdWIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIGlmIChzeW5jVW5zdWIpIHtcbiAgICAgICAgICAgIGlubmVyU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBpbm5lclN1YiA9IG51bGw7XG4gICAgICAgICAgICBoYW5kbGVkUmVzdWx0LnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5jYXRjaEVycm9yID0gY2F0Y2hFcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNhdGNoRXJyb3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNjYW5JbnRlcm5hbHMgPSB2b2lkIDA7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBzY2FuSW50ZXJuYWxzKGFjY3VtdWxhdG9yLCBzZWVkLCBoYXNTZWVkLCBlbWl0T25OZXh0LCBlbWl0QmVmb3JlQ29tcGxldGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaGFzU3RhdGUgPSBoYXNTZWVkO1xuICAgICAgICB2YXIgc3RhdGUgPSBzZWVkO1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBpID0gaW5kZXgrKztcbiAgICAgICAgICAgIHN0YXRlID0gaGFzU3RhdGVcbiAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yKHN0YXRlLCB2YWx1ZSwgaSlcbiAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICgoaGFzU3RhdGUgPSB0cnVlKSwgdmFsdWUpO1xuICAgICAgICAgICAgZW1pdE9uTmV4dCAmJiBzdWJzY3JpYmVyLm5leHQoc3RhdGUpO1xuICAgICAgICB9LCBlbWl0QmVmb3JlQ29tcGxldGUgJiZcbiAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaGFzU3RhdGUgJiYgc3Vic2NyaWJlci5uZXh0KHN0YXRlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KSkpO1xuICAgIH07XG59XG5leHBvcnRzLnNjYW5JbnRlcm5hbHMgPSBzY2FuSW50ZXJuYWxzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NhbkludGVybmFscy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVkdWNlID0gdm9pZCAwO1xudmFyIHNjYW5JbnRlcm5hbHNfMSA9IHJlcXVpcmUoXCIuL3NjYW5JbnRlcm5hbHNcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbmZ1bmN0aW9uIHJlZHVjZShhY2N1bXVsYXRvciwgc2VlZCkge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShzY2FuSW50ZXJuYWxzXzEuc2NhbkludGVybmFscyhhY2N1bXVsYXRvciwgc2VlZCwgYXJndW1lbnRzLmxlbmd0aCA+PSAyLCBmYWxzZSwgdHJ1ZSkpO1xufVxuZXhwb3J0cy5yZWR1Y2UgPSByZWR1Y2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWR1Y2UuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRvQXJyYXkgPSB2b2lkIDA7XG52YXIgcmVkdWNlXzEgPSByZXF1aXJlKFwiLi9yZWR1Y2VcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBhcnJSZWR1Y2VyID0gZnVuY3Rpb24gKGFyciwgdmFsdWUpIHsgcmV0dXJuIChhcnIucHVzaCh2YWx1ZSksIGFycik7IH07XG5mdW5jdGlvbiB0b0FycmF5KCkge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHJlZHVjZV8xLnJlZHVjZShhcnJSZWR1Y2VyLCBbXSkoc291cmNlKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfSk7XG59XG5leHBvcnRzLnRvQXJyYXkgPSB0b0FycmF5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dG9BcnJheS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuam9pbkFsbEludGVybmFscyA9IHZvaWQgMDtcbnZhciBpZGVudGl0eV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaWRlbnRpdHlcIik7XG52YXIgbWFwT25lT3JNYW55QXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvbWFwT25lT3JNYW55QXJnc1wiKTtcbnZhciBwaXBlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9waXBlXCIpO1xudmFyIG1lcmdlTWFwXzEgPSByZXF1aXJlKFwiLi9tZXJnZU1hcFwiKTtcbnZhciB0b0FycmF5XzEgPSByZXF1aXJlKFwiLi90b0FycmF5XCIpO1xuZnVuY3Rpb24gam9pbkFsbEludGVybmFscyhqb2luRm4sIHByb2plY3QpIHtcbiAgICByZXR1cm4gcGlwZV8xLnBpcGUodG9BcnJheV8xLnRvQXJyYXkoKSwgbWVyZ2VNYXBfMS5tZXJnZU1hcChmdW5jdGlvbiAoc291cmNlcykgeyByZXR1cm4gam9pbkZuKHNvdXJjZXMpOyB9KSwgcHJvamVjdCA/IG1hcE9uZU9yTWFueUFyZ3NfMS5tYXBPbmVPck1hbnlBcmdzKHByb2plY3QpIDogaWRlbnRpdHlfMS5pZGVudGl0eSk7XG59XG5leHBvcnRzLmpvaW5BbGxJbnRlcm5hbHMgPSBqb2luQWxsSW50ZXJuYWxzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9am9pbkFsbEludGVybmFscy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29tYmluZUxhdGVzdEFsbCA9IHZvaWQgMDtcbnZhciBjb21iaW5lTGF0ZXN0XzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0XCIpO1xudmFyIGpvaW5BbGxJbnRlcm5hbHNfMSA9IHJlcXVpcmUoXCIuL2pvaW5BbGxJbnRlcm5hbHNcIik7XG5mdW5jdGlvbiBjb21iaW5lTGF0ZXN0QWxsKHByb2plY3QpIHtcbiAgICByZXR1cm4gam9pbkFsbEludGVybmFsc18xLmpvaW5BbGxJbnRlcm5hbHMoY29tYmluZUxhdGVzdF8xLmNvbWJpbmVMYXRlc3QsIHByb2plY3QpO1xufVxuZXhwb3J0cy5jb21iaW5lTGF0ZXN0QWxsID0gY29tYmluZUxhdGVzdEFsbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbWJpbmVMYXRlc3RBbGwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbWJpbmVBbGwgPSB2b2lkIDA7XG52YXIgY29tYmluZUxhdGVzdEFsbF8xID0gcmVxdWlyZShcIi4vY29tYmluZUxhdGVzdEFsbFwiKTtcbmV4cG9ydHMuY29tYmluZUFsbCA9IGNvbWJpbmVMYXRlc3RBbGxfMS5jb21iaW5lTGF0ZXN0QWxsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tYmluZUFsbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbWJpbmVMYXRlc3QgPSB2b2lkIDA7XG52YXIgY29tYmluZUxhdGVzdF8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvY29tYmluZUxhdGVzdFwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIGFyZ3NPckFyZ0FycmF5XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcmdzT3JBcmdBcnJheVwiKTtcbnZhciBtYXBPbmVPck1hbnlBcmdzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9tYXBPbmVPck1hbnlBcmdzXCIpO1xudmFyIHBpcGVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL3BpcGVcIik7XG52YXIgYXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc1wiKTtcbmZ1bmN0aW9uIGNvbWJpbmVMYXRlc3QoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciByZXN1bHRTZWxlY3RvciA9IGFyZ3NfMS5wb3BSZXN1bHRTZWxlY3RvcihhcmdzKTtcbiAgICByZXR1cm4gcmVzdWx0U2VsZWN0b3JcbiAgICAgICAgPyBwaXBlXzEucGlwZShjb21iaW5lTGF0ZXN0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGFyZ3MpKSksIG1hcE9uZU9yTWFueUFyZ3NfMS5tYXBPbmVPck1hbnlBcmdzKHJlc3VsdFNlbGVjdG9yKSlcbiAgICAgICAgOiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICBjb21iaW5lTGF0ZXN0XzEuY29tYmluZUxhdGVzdEluaXQoX19zcHJlYWRBcnJheShbc291cmNlXSwgX19yZWFkKGFyZ3NPckFyZ0FycmF5XzEuYXJnc09yQXJnQXJyYXkoYXJncykpKSkoc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xufVxuZXhwb3J0cy5jb21iaW5lTGF0ZXN0ID0gY29tYmluZUxhdGVzdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbWJpbmVMYXRlc3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXG4gICAgICAgIHRvW2pdID0gZnJvbVtpXTtcbiAgICByZXR1cm4gdG87XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb21iaW5lTGF0ZXN0V2l0aCA9IHZvaWQgMDtcbnZhciBjb21iaW5lTGF0ZXN0XzEgPSByZXF1aXJlKFwiLi9jb21iaW5lTGF0ZXN0XCIpO1xuZnVuY3Rpb24gY29tYmluZUxhdGVzdFdpdGgoKSB7XG4gICAgdmFyIG90aGVyU291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIG90aGVyU291cmNlc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gY29tYmluZUxhdGVzdF8xLmNvbWJpbmVMYXRlc3QuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQob3RoZXJTb3VyY2VzKSkpO1xufVxuZXhwb3J0cy5jb21iaW5lTGF0ZXN0V2l0aCA9IGNvbWJpbmVMYXRlc3RXaXRoO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tYmluZUxhdGVzdFdpdGguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbmNhdE1hcCA9IHZvaWQgMDtcbnZhciBtZXJnZU1hcF8xID0gcmVxdWlyZShcIi4vbWVyZ2VNYXBcIik7XG52YXIgaXNGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNGdW5jdGlvblwiKTtcbmZ1bmN0aW9uIGNvbmNhdE1hcChwcm9qZWN0LCByZXN1bHRTZWxlY3Rvcikge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbihyZXN1bHRTZWxlY3RvcikgPyBtZXJnZU1hcF8xLm1lcmdlTWFwKHByb2plY3QsIHJlc3VsdFNlbGVjdG9yLCAxKSA6IG1lcmdlTWFwXzEubWVyZ2VNYXAocHJvamVjdCwgMSk7XG59XG5leHBvcnRzLmNvbmNhdE1hcCA9IGNvbmNhdE1hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmNhdE1hcC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29uY2F0TWFwVG8gPSB2b2lkIDA7XG52YXIgY29uY2F0TWFwXzEgPSByZXF1aXJlKFwiLi9jb25jYXRNYXBcIik7XG52YXIgaXNGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNGdW5jdGlvblwiKTtcbmZ1bmN0aW9uIGNvbmNhdE1hcFRvKGlubmVyT2JzZXJ2YWJsZSwgcmVzdWx0U2VsZWN0b3IpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24ocmVzdWx0U2VsZWN0b3IpID8gY29uY2F0TWFwXzEuY29uY2F0TWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlubmVyT2JzZXJ2YWJsZTsgfSwgcmVzdWx0U2VsZWN0b3IpIDogY29uY2F0TWFwXzEuY29uY2F0TWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlubmVyT2JzZXJ2YWJsZTsgfSk7XG59XG5leHBvcnRzLmNvbmNhdE1hcFRvID0gY29uY2F0TWFwVG87XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25jYXRNYXBUby5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbmNhdCA9IHZvaWQgMDtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIGNvbmNhdEFsbF8xID0gcmVxdWlyZShcIi4vY29uY2F0QWxsXCIpO1xudmFyIGFyZ3NfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyZ3NcIik7XG52YXIgZnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvZnJvbVwiKTtcbmZ1bmN0aW9uIGNvbmNhdCgpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIHNjaGVkdWxlciA9IGFyZ3NfMS5wb3BTY2hlZHVsZXIoYXJncyk7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgY29uY2F0QWxsXzEuY29uY2F0QWxsKCkoZnJvbV8xLmZyb20oX19zcHJlYWRBcnJheShbc291cmNlXSwgX19yZWFkKGFyZ3MpKSwgc2NoZWR1bGVyKSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5jb25jYXQgPSBjb25jYXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25jYXQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXG4gICAgICAgIHRvW2pdID0gZnJvbVtpXTtcbiAgICByZXR1cm4gdG87XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb25jYXRXaXRoID0gdm9pZCAwO1xudmFyIGNvbmNhdF8xID0gcmVxdWlyZShcIi4vY29uY2F0XCIpO1xuZnVuY3Rpb24gY29uY2F0V2l0aCgpIHtcbiAgICB2YXIgb3RoZXJTb3VyY2VzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgb3RoZXJTb3VyY2VzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiBjb25jYXRfMS5jb25jYXQuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQob3RoZXJTb3VyY2VzKSkpO1xufVxuZXhwb3J0cy5jb25jYXRXaXRoID0gY29uY2F0V2l0aDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmNhdFdpdGguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZyb21TdWJzY3JpYmFibGUgPSB2b2lkIDA7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL09ic2VydmFibGVcIik7XG5mdW5jdGlvbiBmcm9tU3Vic2NyaWJhYmxlKHN1YnNjcmliYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHN1YnNjcmliYWJsZS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7IH0pO1xufVxuZXhwb3J0cy5mcm9tU3Vic2NyaWJhYmxlID0gZnJvbVN1YnNjcmliYWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZyb21TdWJzY3JpYmFibGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbm5lY3QgPSB2b2lkIDA7XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZShcIi4uL1N1YmplY3RcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBmcm9tU3Vic2NyaWJhYmxlXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9mcm9tU3Vic2NyaWJhYmxlXCIpO1xudmFyIERFRkFVTFRfQ09ORklHID0ge1xuICAgIGNvbm5lY3RvcjogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFN1YmplY3RfMS5TdWJqZWN0KCk7IH0sXG59O1xuZnVuY3Rpb24gY29ubmVjdChzZWxlY3RvciwgY29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZyA9PT0gdm9pZCAwKSB7IGNvbmZpZyA9IERFRkFVTFRfQ09ORklHOyB9XG4gICAgdmFyIGNvbm5lY3RvciA9IGNvbmZpZy5jb25uZWN0b3I7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSBjb25uZWN0b3IoKTtcbiAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKHNlbGVjdG9yKGZyb21TdWJzY3JpYmFibGVfMS5mcm9tU3Vic2NyaWJhYmxlKHN1YmplY3QpKSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICBzdWJzY3JpYmVyLmFkZChzb3VyY2Uuc3Vic2NyaWJlKHN1YmplY3QpKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuY29ubmVjdCA9IGNvbm5lY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25uZWN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb3VudCA9IHZvaWQgMDtcbnZhciByZWR1Y2VfMSA9IHJlcXVpcmUoXCIuL3JlZHVjZVwiKTtcbmZ1bmN0aW9uIGNvdW50KHByZWRpY2F0ZSkge1xuICAgIHJldHVybiByZWR1Y2VfMS5yZWR1Y2UoZnVuY3Rpb24gKHRvdGFsLCB2YWx1ZSwgaSkgeyByZXR1cm4gKCFwcmVkaWNhdGUgfHwgcHJlZGljYXRlKHZhbHVlLCBpKSA/IHRvdGFsICsgMSA6IHRvdGFsKTsgfSwgMCk7XG59XG5leHBvcnRzLmNvdW50ID0gY291bnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb3VudC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVib3VuY2UgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBub29wXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9ub29wXCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xuZnVuY3Rpb24gZGVib3VuY2UoZHVyYXRpb25TZWxlY3Rvcikge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgdmFyIGR1cmF0aW9uU3Vic2NyaWJlciA9IG51bGw7XG4gICAgICAgIHZhciBlbWl0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZHVyYXRpb25TdWJzY3JpYmVyID09PSBudWxsIHx8IGR1cmF0aW9uU3Vic2NyaWJlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZHVyYXRpb25TdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGhhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBsYXN0VmFsdWU7XG4gICAgICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uU3Vic2NyaWJlciA9PT0gbnVsbCB8fCBkdXJhdGlvblN1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGR1cmF0aW9uU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgbGFzdFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICBkdXJhdGlvblN1YnNjcmliZXIgPSBPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZW1pdCwgbm9vcF8xLm5vb3ApO1xuICAgICAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKGR1cmF0aW9uU2VsZWN0b3IodmFsdWUpKS5zdWJzY3JpYmUoZHVyYXRpb25TdWJzY3JpYmVyKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZW1pdCgpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9LCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RWYWx1ZSA9IGR1cmF0aW9uU3Vic2NyaWJlciA9IG51bGw7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVib3VuY2UgPSBkZWJvdW5jZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlYm91bmNlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWJvdW5jZVRpbWUgPSB2b2lkIDA7XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoXCIuLi9zY2hlZHVsZXIvYXN5bmNcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIGRlYm91bmNlVGltZShkdWVUaW1lLCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsgc2NoZWR1bGVyID0gYXN5bmNfMS5hc3luY1NjaGVkdWxlcjsgfVxuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBhY3RpdmVUYXNrID0gbnVsbDtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBsYXN0VGltZSA9IG51bGw7XG4gICAgICAgIHZhciBlbWl0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGFjdGl2ZVRhc2spIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVUYXNrLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgYWN0aXZlVGFzayA9IG51bGw7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gbGFzdFZhbHVlO1xuICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgZnVuY3Rpb24gZW1pdFdoZW5JZGxlKCkge1xuICAgICAgICAgICAgdmFyIHRhcmdldFRpbWUgPSBsYXN0VGltZSArIGR1ZVRpbWU7XG4gICAgICAgICAgICB2YXIgbm93ID0gc2NoZWR1bGVyLm5vdygpO1xuICAgICAgICAgICAgaWYgKG5vdyA8IHRhcmdldFRpbWUpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVUYXNrID0gdGhpcy5zY2hlZHVsZSh1bmRlZmluZWQsIHRhcmdldFRpbWUgLSBub3cpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKGFjdGl2ZVRhc2spO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVtaXQoKTtcbiAgICAgICAgfVxuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGxhc3RWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBzY2hlZHVsZXIubm93KCk7XG4gICAgICAgICAgICBpZiAoIWFjdGl2ZVRhc2spIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVUYXNrID0gc2NoZWR1bGVyLnNjaGVkdWxlKGVtaXRXaGVuSWRsZSwgZHVlVGltZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5hZGQoYWN0aXZlVGFzayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVtaXQoKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSBhY3RpdmVUYXNrID0gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5kZWJvdW5jZVRpbWUgPSBkZWJvdW5jZVRpbWU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWJvdW5jZVRpbWUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHRJZkVtcHR5ID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBkZWZhdWx0SWZFbXB0eShkZWZhdWx0VmFsdWUpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIWhhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVmYXVsdElmRW1wdHkgPSBkZWZhdWx0SWZFbXB0eTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmF1bHRJZkVtcHR5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50YWtlID0gdm9pZCAwO1xudmFyIGVtcHR5XzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9lbXB0eVwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gdGFrZShjb3VudCkge1xuICAgIHJldHVybiBjb3VudCA8PSAwXG4gICAgICAgID9cbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVtcHR5XzEuRU1QVFk7IH1cbiAgICAgICAgOiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICB2YXIgc2VlbiA9IDA7XG4gICAgICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoKytzZWVuIDw9IGNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA8PSBzZWVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xufVxuZXhwb3J0cy50YWtlID0gdGFrZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRha2UuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlnbm9yZUVsZW1lbnRzID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgbm9vcF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbm9vcFwiKTtcbmZ1bmN0aW9uIGlnbm9yZUVsZW1lbnRzKCkge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIG5vb3BfMS5ub29wKSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmlnbm9yZUVsZW1lbnRzID0gaWdub3JlRWxlbWVudHM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pZ25vcmVFbGVtZW50cy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubWFwVG8gPSB2b2lkIDA7XG52YXIgbWFwXzEgPSByZXF1aXJlKFwiLi9tYXBcIik7XG5mdW5jdGlvbiBtYXBUbyh2YWx1ZSkge1xuICAgIHJldHVybiBtYXBfMS5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0pO1xufVxuZXhwb3J0cy5tYXBUbyA9IG1hcFRvO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFwVG8uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlbGF5V2hlbiA9IHZvaWQgMDtcbnZhciBjb25jYXRfMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2NvbmNhdFwiKTtcbnZhciB0YWtlXzEgPSByZXF1aXJlKFwiLi90YWtlXCIpO1xudmFyIGlnbm9yZUVsZW1lbnRzXzEgPSByZXF1aXJlKFwiLi9pZ25vcmVFbGVtZW50c1wiKTtcbnZhciBtYXBUb18xID0gcmVxdWlyZShcIi4vbWFwVG9cIik7XG52YXIgbWVyZ2VNYXBfMSA9IHJlcXVpcmUoXCIuL21lcmdlTWFwXCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xuZnVuY3Rpb24gZGVsYXlXaGVuKGRlbGF5RHVyYXRpb25TZWxlY3Rvciwgc3Vic2NyaXB0aW9uRGVsYXkpIHtcbiAgICBpZiAoc3Vic2NyaXB0aW9uRGVsYXkpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25jYXRfMS5jb25jYXQoc3Vic2NyaXB0aW9uRGVsYXkucGlwZSh0YWtlXzEudGFrZSgxKSwgaWdub3JlRWxlbWVudHNfMS5pZ25vcmVFbGVtZW50cygpKSwgc291cmNlLnBpcGUoZGVsYXlXaGVuKGRlbGF5RHVyYXRpb25TZWxlY3RvcikpKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlTWFwXzEubWVyZ2VNYXAoZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkgeyByZXR1cm4gaW5uZXJGcm9tXzEuaW5uZXJGcm9tKGRlbGF5RHVyYXRpb25TZWxlY3Rvcih2YWx1ZSwgaW5kZXgpKS5waXBlKHRha2VfMS50YWtlKDEpLCBtYXBUb18xLm1hcFRvKHZhbHVlKSk7IH0pO1xufVxuZXhwb3J0cy5kZWxheVdoZW4gPSBkZWxheVdoZW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWxheVdoZW4uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlbGF5ID0gdm9pZCAwO1xudmFyIGFzeW5jXzEgPSByZXF1aXJlKFwiLi4vc2NoZWR1bGVyL2FzeW5jXCIpO1xudmFyIGRlbGF5V2hlbl8xID0gcmVxdWlyZShcIi4vZGVsYXlXaGVuXCIpO1xudmFyIHRpbWVyXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS90aW1lclwiKTtcbmZ1bmN0aW9uIGRlbGF5KGR1ZSwgc2NoZWR1bGVyKSB7XG4gICAgaWYgKHNjaGVkdWxlciA9PT0gdm9pZCAwKSB7IHNjaGVkdWxlciA9IGFzeW5jXzEuYXN5bmNTY2hlZHVsZXI7IH1cbiAgICB2YXIgZHVyYXRpb24gPSB0aW1lcl8xLnRpbWVyKGR1ZSwgc2NoZWR1bGVyKTtcbiAgICByZXR1cm4gZGVsYXlXaGVuXzEuZGVsYXlXaGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGR1cmF0aW9uOyB9KTtcbn1cbmV4cG9ydHMuZGVsYXkgPSBkZWxheTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlbGF5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZW1hdGVyaWFsaXplID0gdm9pZCAwO1xudmFyIE5vdGlmaWNhdGlvbl8xID0gcmVxdWlyZShcIi4uL05vdGlmaWNhdGlvblwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gZGVtYXRlcmlhbGl6ZSgpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAobm90aWZpY2F0aW9uKSB7IHJldHVybiBOb3RpZmljYXRpb25fMS5vYnNlcnZlTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgc3Vic2NyaWJlcik7IH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVtYXRlcmlhbGl6ZSA9IGRlbWF0ZXJpYWxpemU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZW1hdGVyaWFsaXplLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kaXN0aW5jdCA9IHZvaWQgMDtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xudmFyIG5vb3BfMSA9IHJlcXVpcmUoXCIuLi91dGlsL25vb3BcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG5mdW5jdGlvbiBkaXN0aW5jdChrZXlTZWxlY3RvciwgZmx1c2hlcykge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBkaXN0aW5jdEtleXMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleVNlbGVjdG9yID8ga2V5U2VsZWN0b3IodmFsdWUpIDogdmFsdWU7XG4gICAgICAgICAgICBpZiAoIWRpc3RpbmN0S2V5cy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGRpc3RpbmN0S2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIGZsdXNoZXMgJiYgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKGZsdXNoZXMpLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKCkgeyByZXR1cm4gZGlzdGluY3RLZXlzLmNsZWFyKCk7IH0sIG5vb3BfMS5ub29wKSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmRpc3RpbmN0ID0gZGlzdGluY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kaXN0aW5jdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGlzdGluY3RVbnRpbENoYW5nZWQgPSB2b2lkIDA7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lkZW50aXR5XCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBkaXN0aW5jdFVudGlsQ2hhbmdlZChjb21wYXJhdG9yLCBrZXlTZWxlY3Rvcikge1xuICAgIGlmIChrZXlTZWxlY3RvciA9PT0gdm9pZCAwKSB7IGtleVNlbGVjdG9yID0gaWRlbnRpdHlfMS5pZGVudGl0eTsgfVxuICAgIGNvbXBhcmF0b3IgPSBjb21wYXJhdG9yICE9PSBudWxsICYmIGNvbXBhcmF0b3IgIT09IHZvaWQgMCA/IGNvbXBhcmF0b3IgOiBkZWZhdWx0Q29tcGFyZTtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgcHJldmlvdXNLZXk7XG4gICAgICAgIHZhciBmaXJzdCA9IHRydWU7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlTZWxlY3Rvcih2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZmlyc3QgfHwgIWNvbXBhcmF0b3IocHJldmlvdXNLZXksIGN1cnJlbnRLZXkpKSB7XG4gICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBwcmV2aW91c0tleSA9IGN1cnJlbnRLZXk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5kaXN0aW5jdFVudGlsQ2hhbmdlZCA9IGRpc3RpbmN0VW50aWxDaGFuZ2VkO1xuZnVuY3Rpb24gZGVmYXVsdENvbXBhcmUoYSwgYikge1xuICAgIHJldHVybiBhID09PSBiO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGlzdGluY3RVbnRpbENoYW5nZWQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkID0gdm9pZCAwO1xudmFyIGRpc3RpbmN0VW50aWxDaGFuZ2VkXzEgPSByZXF1aXJlKFwiLi9kaXN0aW5jdFVudGlsQ2hhbmdlZFwiKTtcbmZ1bmN0aW9uIGRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkKGtleSwgY29tcGFyZSkge1xuICAgIHJldHVybiBkaXN0aW5jdFVudGlsQ2hhbmdlZF8xLmRpc3RpbmN0VW50aWxDaGFuZ2VkKGZ1bmN0aW9uICh4LCB5KSB7IHJldHVybiBjb21wYXJlID8gY29tcGFyZSh4W2tleV0sIHlba2V5XSkgOiB4W2tleV0gPT09IHlba2V5XTsgfSk7XG59XG5leHBvcnRzLmRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkID0gZGlzdGluY3RVbnRpbEtleUNoYW5nZWQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudGhyb3dJZkVtcHR5ID0gdm9pZCAwO1xudmFyIEVtcHR5RXJyb3JfMSA9IHJlcXVpcmUoXCIuLi91dGlsL0VtcHR5RXJyb3JcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIHRocm93SWZFbXB0eShlcnJvckZhY3RvcnkpIHtcbiAgICBpZiAoZXJyb3JGYWN0b3J5ID09PSB2b2lkIDApIHsgZXJyb3JGYWN0b3J5ID0gZGVmYXVsdEVycm9yRmFjdG9yeTsgfVxuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIChoYXNWYWx1ZSA/IHN1YnNjcmliZXIuY29tcGxldGUoKSA6IHN1YnNjcmliZXIuZXJyb3IoZXJyb3JGYWN0b3J5KCkpKTsgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy50aHJvd0lmRW1wdHkgPSB0aHJvd0lmRW1wdHk7XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JGYWN0b3J5KCkge1xuICAgIHJldHVybiBuZXcgRW1wdHlFcnJvcl8xLkVtcHR5RXJyb3IoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRocm93SWZFbXB0eS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZWxlbWVudEF0ID0gdm9pZCAwO1xudmFyIEFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9Bcmd1bWVudE91dE9mUmFuZ2VFcnJvclwiKTtcbnZhciBmaWx0ZXJfMSA9IHJlcXVpcmUoXCIuL2ZpbHRlclwiKTtcbnZhciB0aHJvd0lmRW1wdHlfMSA9IHJlcXVpcmUoXCIuL3Rocm93SWZFbXB0eVwiKTtcbnZhciBkZWZhdWx0SWZFbXB0eV8xID0gcmVxdWlyZShcIi4vZGVmYXVsdElmRW1wdHlcIik7XG52YXIgdGFrZV8xID0gcmVxdWlyZShcIi4vdGFrZVwiKTtcbmZ1bmN0aW9uIGVsZW1lbnRBdChpbmRleCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JfMS5Bcmd1bWVudE91dE9mUmFuZ2VFcnJvcigpO1xuICAgIH1cbiAgICB2YXIgaGFzRGVmYXVsdFZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+PSAyO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UucGlwZShmaWx0ZXJfMS5maWx0ZXIoZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGkgPT09IGluZGV4OyB9KSwgdGFrZV8xLnRha2UoMSksIGhhc0RlZmF1bHRWYWx1ZSA/IGRlZmF1bHRJZkVtcHR5XzEuZGVmYXVsdElmRW1wdHkoZGVmYXVsdFZhbHVlKSA6IHRocm93SWZFbXB0eV8xLnRocm93SWZFbXB0eShmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JfMS5Bcmd1bWVudE91dE9mUmFuZ2VFcnJvcigpOyB9KSk7XG4gICAgfTtcbn1cbmV4cG9ydHMuZWxlbWVudEF0ID0gZWxlbWVudEF0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZWxlbWVudEF0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxuICAgICAgICB0b1tqXSA9IGZyb21baV07XG4gICAgcmV0dXJuIHRvO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZW5kV2l0aCA9IHZvaWQgMDtcbnZhciBjb25jYXRfMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2NvbmNhdFwiKTtcbnZhciBvZl8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvb2ZcIik7XG5mdW5jdGlvbiBlbmRXaXRoKCkge1xuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YWx1ZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIGNvbmNhdF8xLmNvbmNhdChzb3VyY2UsIG9mXzEub2YuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQodmFsdWVzKSkpKTsgfTtcbn1cbmV4cG9ydHMuZW5kV2l0aCA9IGVuZFdpdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbmRXaXRoLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ldmVyeSA9IHZvaWQgMDtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gZXZlcnkocHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXByZWRpY2F0ZS5jYWxsKHRoaXNBcmcsIHZhbHVlLCBpbmRleCsrLCBzb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5ldmVyeSA9IGV2ZXJ5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXZlcnkuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV4aGF1c3RNYXAgPSB2b2lkIDA7XG52YXIgbWFwXzEgPSByZXF1aXJlKFwiLi9tYXBcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIGV4aGF1c3RNYXAocHJvamVjdCwgcmVzdWx0U2VsZWN0b3IpIHtcbiAgICBpZiAocmVzdWx0U2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UucGlwZShleGhhdXN0TWFwKGZ1bmN0aW9uIChhLCBpKSB7IHJldHVybiBpbm5lckZyb21fMS5pbm5lckZyb20ocHJvamVjdChhLCBpKSkucGlwZShtYXBfMS5tYXAoZnVuY3Rpb24gKGIsIGlpKSB7IHJldHVybiByZXN1bHRTZWxlY3RvcihhLCBiLCBpLCBpaSk7IH0pKTsgfSkpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICB2YXIgaW5uZXJTdWIgPSBudWxsO1xuICAgICAgICB2YXIgaXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAob3V0ZXJWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFpbm5lclN1Yikge1xuICAgICAgICAgICAgICAgIGlubmVyU3ViID0gT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpbm5lclN1YiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlzQ29tcGxldGUgJiYgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlubmVyRnJvbV8xLmlubmVyRnJvbShwcm9qZWN0KG91dGVyVmFsdWUsIGluZGV4KyspKS5zdWJzY3JpYmUoaW5uZXJTdWIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICFpbm5lclN1YiAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZXhoYXVzdE1hcCA9IGV4aGF1c3RNYXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leGhhdXN0TWFwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leGhhdXN0QWxsID0gdm9pZCAwO1xudmFyIGV4aGF1c3RNYXBfMSA9IHJlcXVpcmUoXCIuL2V4aGF1c3RNYXBcIik7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lkZW50aXR5XCIpO1xuZnVuY3Rpb24gZXhoYXVzdEFsbCgpIHtcbiAgICByZXR1cm4gZXhoYXVzdE1hcF8xLmV4aGF1c3RNYXAoaWRlbnRpdHlfMS5pZGVudGl0eSk7XG59XG5leHBvcnRzLmV4aGF1c3RBbGwgPSBleGhhdXN0QWxsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhoYXVzdEFsbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXhoYXVzdCA9IHZvaWQgMDtcbnZhciBleGhhdXN0QWxsXzEgPSByZXF1aXJlKFwiLi9leGhhdXN0QWxsXCIpO1xuZXhwb3J0cy5leGhhdXN0ID0gZXhoYXVzdEFsbF8xLmV4aGF1c3RBbGw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leGhhdXN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHBhbmQgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBtZXJnZUludGVybmFsc18xID0gcmVxdWlyZShcIi4vbWVyZ2VJbnRlcm5hbHNcIik7XG5mdW5jdGlvbiBleHBhbmQocHJvamVjdCwgY29uY3VycmVudCwgc2NoZWR1bGVyKSB7XG4gICAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkgeyBjb25jdXJyZW50ID0gSW5maW5pdHk7IH1cbiAgICBjb25jdXJyZW50ID0gKGNvbmN1cnJlbnQgfHwgMCkgPCAxID8gSW5maW5pdHkgOiBjb25jdXJyZW50O1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHJldHVybiBtZXJnZUludGVybmFsc18xLm1lcmdlSW50ZXJuYWxzKHNvdXJjZSwgc3Vic2NyaWJlciwgcHJvamVjdCwgY29uY3VycmVudCwgdW5kZWZpbmVkLCB0cnVlLCBzY2hlZHVsZXIpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5leHBhbmQgPSBleHBhbmQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leHBhbmQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZpbmFsaXplID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG5mdW5jdGlvbiBmaW5hbGl6ZShjYWxsYmFjaykge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5hZGQoY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLmZpbmFsaXplID0gZmluYWxpemU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maW5hbGl6ZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlRmluZCA9IGV4cG9ydHMuZmluZCA9IHZvaWQgMDtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gZmluZChwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoY3JlYXRlRmluZChwcmVkaWNhdGUsIHRoaXNBcmcsICd2YWx1ZScpKTtcbn1cbmV4cG9ydHMuZmluZCA9IGZpbmQ7XG5mdW5jdGlvbiBjcmVhdGVGaW5kKHByZWRpY2F0ZSwgdGhpc0FyZywgZW1pdCkge1xuICAgIHZhciBmaW5kSW5kZXggPSBlbWl0ID09PSAnaW5kZXgnO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGkgPSBpbmRleCsrO1xuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZS5jYWxsKHRoaXNBcmcsIHZhbHVlLCBpLCBzb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGZpbmRJbmRleCA/IGkgOiB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoZmluZEluZGV4ID8gLTEgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KSk7XG4gICAgfTtcbn1cbmV4cG9ydHMuY3JlYXRlRmluZCA9IGNyZWF0ZUZpbmQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maW5kLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5maW5kSW5kZXggPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBmaW5kXzEgPSByZXF1aXJlKFwiLi9maW5kXCIpO1xuZnVuY3Rpb24gZmluZEluZGV4KHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmaW5kXzEuY3JlYXRlRmluZChwcmVkaWNhdGUsIHRoaXNBcmcsICdpbmRleCcpKTtcbn1cbmV4cG9ydHMuZmluZEluZGV4ID0gZmluZEluZGV4O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmluZEluZGV4LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5maXJzdCA9IHZvaWQgMDtcbnZhciBFbXB0eUVycm9yXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9FbXB0eUVycm9yXCIpO1xudmFyIGZpbHRlcl8xID0gcmVxdWlyZShcIi4vZmlsdGVyXCIpO1xudmFyIHRha2VfMSA9IHJlcXVpcmUoXCIuL3Rha2VcIik7XG52YXIgZGVmYXVsdElmRW1wdHlfMSA9IHJlcXVpcmUoXCIuL2RlZmF1bHRJZkVtcHR5XCIpO1xudmFyIHRocm93SWZFbXB0eV8xID0gcmVxdWlyZShcIi4vdGhyb3dJZkVtcHR5XCIpO1xudmFyIGlkZW50aXR5XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pZGVudGl0eVwiKTtcbmZ1bmN0aW9uIGZpcnN0KHByZWRpY2F0ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgdmFyIGhhc0RlZmF1bHRWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPj0gMjtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnBpcGUocHJlZGljYXRlID8gZmlsdGVyXzEuZmlsdGVyKGZ1bmN0aW9uICh2LCBpKSB7IHJldHVybiBwcmVkaWNhdGUodiwgaSwgc291cmNlKTsgfSkgOiBpZGVudGl0eV8xLmlkZW50aXR5LCB0YWtlXzEudGFrZSgxKSwgaGFzRGVmYXVsdFZhbHVlID8gZGVmYXVsdElmRW1wdHlfMS5kZWZhdWx0SWZFbXB0eShkZWZhdWx0VmFsdWUpIDogdGhyb3dJZkVtcHR5XzEudGhyb3dJZkVtcHR5KGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBFbXB0eUVycm9yXzEuRW1wdHlFcnJvcigpOyB9KSk7XG4gICAgfTtcbn1cbmV4cG9ydHMuZmlyc3QgPSBmaXJzdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpcnN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ncm91cEJ5ID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIFN1YmplY3RfMSA9IHJlcXVpcmUoXCIuLi9TdWJqZWN0XCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBncm91cEJ5KGtleVNlbGVjdG9yLCBlbGVtZW50T3JPcHRpb25zLCBkdXJhdGlvbiwgY29ubmVjdG9yKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGVsZW1lbnQ7XG4gICAgICAgIGlmICghZWxlbWVudE9yT3B0aW9ucyB8fCB0eXBlb2YgZWxlbWVudE9yT3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnRPck9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAoZHVyYXRpb24gPSBlbGVtZW50T3JPcHRpb25zLmR1cmF0aW9uLCBlbGVtZW50ID0gZWxlbWVudE9yT3B0aW9ucy5lbGVtZW50LCBjb25uZWN0b3IgPSBlbGVtZW50T3JPcHRpb25zLmNvbm5lY3Rvcik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGdyb3VwcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgZ3JvdXBzLmZvckVhY2goY2IpO1xuICAgICAgICAgICAgY2Ioc3Vic2NyaWJlcik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBoYW5kbGVFcnJvciA9IGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIG5vdGlmeShmdW5jdGlvbiAoY29uc3VtZXIpIHsgcmV0dXJuIGNvbnN1bWVyLmVycm9yKGVycik7IH0pOyB9O1xuICAgICAgICB2YXIgYWN0aXZlR3JvdXBzID0gMDtcbiAgICAgICAgdmFyIHRlYXJkb3duQXR0ZW1wdGVkID0gZmFsc2U7XG4gICAgICAgIHZhciBncm91cEJ5U291cmNlU3Vic2NyaWJlciA9IG5ldyBPcGVyYXRvclN1YnNjcmliZXJfMS5PcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHZhciBrZXlfMSA9IGtleVNlbGVjdG9yKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB2YXIgZ3JvdXBfMSA9IGdyb3Vwcy5nZXQoa2V5XzEpO1xuICAgICAgICAgICAgICAgIGlmICghZ3JvdXBfMSkge1xuICAgICAgICAgICAgICAgICAgICBncm91cHMuc2V0KGtleV8xLCAoZ3JvdXBfMSA9IGNvbm5lY3RvciA/IGNvbm5lY3RvcigpIDogbmV3IFN1YmplY3RfMS5TdWJqZWN0KCkpKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGdyb3VwZWQgPSBjcmVhdGVHcm91cGVkT2JzZXJ2YWJsZShrZXlfMSwgZ3JvdXBfMSk7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChncm91cGVkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGR1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZHVyYXRpb25TdWJzY3JpYmVyXzEgPSBPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoZ3JvdXBfMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwXzEuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvblN1YnNjcmliZXJfMSA9PT0gbnVsbCB8fCBkdXJhdGlvblN1YnNjcmliZXJfMSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZHVyYXRpb25TdWJzY3JpYmVyXzEudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7IHJldHVybiBncm91cHMuZGVsZXRlKGtleV8xKTsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cEJ5U291cmNlU3Vic2NyaWJlci5hZGQoaW5uZXJGcm9tXzEuaW5uZXJGcm9tKGR1cmF0aW9uKGdyb3VwZWQpKS5zdWJzY3JpYmUoZHVyYXRpb25TdWJzY3JpYmVyXzEpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBncm91cF8xLm5leHQoZWxlbWVudCA/IGVsZW1lbnQodmFsdWUpIDogdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vdGlmeShmdW5jdGlvbiAoY29uc3VtZXIpIHsgcmV0dXJuIGNvbnN1bWVyLmNvbXBsZXRlKCk7IH0pOyB9LCBoYW5kbGVFcnJvciwgZnVuY3Rpb24gKCkgeyByZXR1cm4gZ3JvdXBzLmNsZWFyKCk7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRlYXJkb3duQXR0ZW1wdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBhY3RpdmVHcm91cHMgPT09IDA7XG4gICAgICAgIH0pO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGdyb3VwQnlTb3VyY2VTdWJzY3JpYmVyKTtcbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlR3JvdXBlZE9ic2VydmFibGUoa2V5LCBncm91cFN1YmplY3QpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKGdyb3VwU3Vic2NyaWJlcikge1xuICAgICAgICAgICAgICAgIGFjdGl2ZUdyb3VwcysrO1xuICAgICAgICAgICAgICAgIHZhciBpbm5lclN1YiA9IGdyb3VwU3ViamVjdC5zdWJzY3JpYmUoZ3JvdXBTdWJzY3JpYmVyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpbm5lclN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICAtLWFjdGl2ZUdyb3VwcyA9PT0gMCAmJiB0ZWFyZG93bkF0dGVtcHRlZCAmJiBncm91cEJ5U291cmNlU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlc3VsdC5rZXkgPSBrZXk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLmdyb3VwQnkgPSBncm91cEJ5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z3JvdXBCeS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNFbXB0eSA9IHZvaWQgMDtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuaXNFbXB0eSA9IGlzRW1wdHk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0VtcHR5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fdmFsdWVzID0gKHRoaXMgJiYgdGhpcy5fX3ZhbHVlcykgfHwgZnVuY3Rpb24obykge1xuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50YWtlTGFzdCA9IHZvaWQgMDtcbnZhciBlbXB0eV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvZW1wdHlcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIHRha2VMYXN0KGNvdW50KSB7XG4gICAgcmV0dXJuIGNvdW50IDw9IDBcbiAgICAgICAgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBlbXB0eV8xLkVNUFRZOyB9XG4gICAgICAgIDogbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IFtdO1xuICAgICAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgIGNvdW50IDwgYnVmZmVyLmxlbmd0aCAmJiBidWZmZXIuc2hpZnQoKTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBidWZmZXJfMSA9IF9fdmFsdWVzKGJ1ZmZlciksIGJ1ZmZlcl8xXzEgPSBidWZmZXJfMS5uZXh0KCk7ICFidWZmZXJfMV8xLmRvbmU7IGJ1ZmZlcl8xXzEgPSBidWZmZXJfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGJ1ZmZlcl8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyXzFfMSAmJiAhYnVmZmVyXzFfMS5kb25lICYmIChfYSA9IGJ1ZmZlcl8xLnJldHVybikpIF9hLmNhbGwoYnVmZmVyXzEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gbnVsbDtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG59XG5leHBvcnRzLnRha2VMYXN0ID0gdGFrZUxhc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10YWtlTGFzdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubGFzdCA9IHZvaWQgMDtcbnZhciBFbXB0eUVycm9yXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9FbXB0eUVycm9yXCIpO1xudmFyIGZpbHRlcl8xID0gcmVxdWlyZShcIi4vZmlsdGVyXCIpO1xudmFyIHRha2VMYXN0XzEgPSByZXF1aXJlKFwiLi90YWtlTGFzdFwiKTtcbnZhciB0aHJvd0lmRW1wdHlfMSA9IHJlcXVpcmUoXCIuL3Rocm93SWZFbXB0eVwiKTtcbnZhciBkZWZhdWx0SWZFbXB0eV8xID0gcmVxdWlyZShcIi4vZGVmYXVsdElmRW1wdHlcIik7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lkZW50aXR5XCIpO1xuZnVuY3Rpb24gbGFzdChwcmVkaWNhdGUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHZhciBoYXNEZWZhdWx0VmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID49IDI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5waXBlKHByZWRpY2F0ZSA/IGZpbHRlcl8xLmZpbHRlcihmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gcHJlZGljYXRlKHYsIGksIHNvdXJjZSk7IH0pIDogaWRlbnRpdHlfMS5pZGVudGl0eSwgdGFrZUxhc3RfMS50YWtlTGFzdCgxKSwgaGFzRGVmYXVsdFZhbHVlID8gZGVmYXVsdElmRW1wdHlfMS5kZWZhdWx0SWZFbXB0eShkZWZhdWx0VmFsdWUpIDogdGhyb3dJZkVtcHR5XzEudGhyb3dJZkVtcHR5KGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBFbXB0eUVycm9yXzEuRW1wdHlFcnJvcigpOyB9KSk7XG4gICAgfTtcbn1cbmV4cG9ydHMubGFzdCA9IGxhc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sYXN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tYXRlcmlhbGl6ZSA9IHZvaWQgMDtcbnZhciBOb3RpZmljYXRpb25fMSA9IHJlcXVpcmUoXCIuLi9Ob3RpZmljYXRpb25cIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIG1hdGVyaWFsaXplKCkge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KE5vdGlmaWNhdGlvbl8xLk5vdGlmaWNhdGlvbi5jcmVhdGVOZXh0KHZhbHVlKSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChOb3RpZmljYXRpb25fMS5Ob3RpZmljYXRpb24uY3JlYXRlQ29tcGxldGUoKSk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChOb3RpZmljYXRpb25fMS5Ob3RpZmljYXRpb24uY3JlYXRlRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMubWF0ZXJpYWxpemUgPSBtYXRlcmlhbGl6ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1hdGVyaWFsaXplLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tYXggPSB2b2lkIDA7XG52YXIgcmVkdWNlXzEgPSByZXF1aXJlKFwiLi9yZWR1Y2VcIik7XG52YXIgaXNGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNGdW5jdGlvblwiKTtcbmZ1bmN0aW9uIG1heChjb21wYXJlcikge1xuICAgIHJldHVybiByZWR1Y2VfMS5yZWR1Y2UoaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24oY29tcGFyZXIpID8gZnVuY3Rpb24gKHgsIHkpIHsgcmV0dXJuIChjb21wYXJlcih4LCB5KSA+IDAgPyB4IDogeSk7IH0gOiBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4gKHggPiB5ID8geCA6IHkpOyB9KTtcbn1cbmV4cG9ydHMubWF4ID0gbWF4O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWF4LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mbGF0TWFwID0gdm9pZCAwO1xudmFyIG1lcmdlTWFwXzEgPSByZXF1aXJlKFwiLi9tZXJnZU1hcFwiKTtcbmV4cG9ydHMuZmxhdE1hcCA9IG1lcmdlTWFwXzEubWVyZ2VNYXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mbGF0TWFwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tZXJnZU1hcFRvID0gdm9pZCAwO1xudmFyIG1lcmdlTWFwXzEgPSByZXF1aXJlKFwiLi9tZXJnZU1hcFwiKTtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc0Z1bmN0aW9uXCIpO1xuZnVuY3Rpb24gbWVyZ2VNYXBUbyhpbm5lck9ic2VydmFibGUsIHJlc3VsdFNlbGVjdG9yLCBjb25jdXJyZW50KSB7XG4gICAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkgeyBjb25jdXJyZW50ID0gSW5maW5pdHk7IH1cbiAgICBpZiAoaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24ocmVzdWx0U2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBtZXJnZU1hcF8xLm1lcmdlTWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlubmVyT2JzZXJ2YWJsZTsgfSwgcmVzdWx0U2VsZWN0b3IsIGNvbmN1cnJlbnQpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3VsdFNlbGVjdG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25jdXJyZW50ID0gcmVzdWx0U2VsZWN0b3I7XG4gICAgfVxuICAgIHJldHVybiBtZXJnZU1hcF8xLm1lcmdlTWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlubmVyT2JzZXJ2YWJsZTsgfSwgY29uY3VycmVudCk7XG59XG5leHBvcnRzLm1lcmdlTWFwVG8gPSBtZXJnZU1hcFRvO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2VNYXBUby5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubWVyZ2VTY2FuID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgbWVyZ2VJbnRlcm5hbHNfMSA9IHJlcXVpcmUoXCIuL21lcmdlSW50ZXJuYWxzXCIpO1xuZnVuY3Rpb24gbWVyZ2VTY2FuKGFjY3VtdWxhdG9yLCBzZWVkLCBjb25jdXJyZW50KSB7XG4gICAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkgeyBjb25jdXJyZW50ID0gSW5maW5pdHk7IH1cbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgc3RhdGUgPSBzZWVkO1xuICAgICAgICByZXR1cm4gbWVyZ2VJbnRlcm5hbHNfMS5tZXJnZUludGVybmFscyhzb3VyY2UsIHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHsgcmV0dXJuIGFjY3VtdWxhdG9yKHN0YXRlLCB2YWx1ZSwgaW5kZXgpOyB9LCBjb25jdXJyZW50LCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHN0YXRlID0gdmFsdWU7XG4gICAgICAgIH0sIGZhbHNlLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIChzdGF0ZSA9IG51bGwpOyB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMubWVyZ2VTY2FuID0gbWVyZ2VTY2FuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2VTY2FuLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxuICAgICAgICB0b1tqXSA9IGZyb21baV07XG4gICAgcmV0dXJuIHRvO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubWVyZ2UgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBhcmdzT3JBcmdBcnJheV8xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc09yQXJnQXJyYXlcIik7XG52YXIgbWVyZ2VBbGxfMSA9IHJlcXVpcmUoXCIuL21lcmdlQWxsXCIpO1xudmFyIGFyZ3NfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyZ3NcIik7XG52YXIgZnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvZnJvbVwiKTtcbmZ1bmN0aW9uIG1lcmdlKCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgc2NoZWR1bGVyID0gYXJnc18xLnBvcFNjaGVkdWxlcihhcmdzKTtcbiAgICB2YXIgY29uY3VycmVudCA9IGFyZ3NfMS5wb3BOdW1iZXIoYXJncywgSW5maW5pdHkpO1xuICAgIGFyZ3MgPSBhcmdzT3JBcmdBcnJheV8xLmFyZ3NPckFyZ0FycmF5KGFyZ3MpO1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIG1lcmdlQWxsXzEubWVyZ2VBbGwoY29uY3VycmVudCkoZnJvbV8xLmZyb20oX19zcHJlYWRBcnJheShbc291cmNlXSwgX19yZWFkKGFyZ3MpKSwgc2NoZWR1bGVyKSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5tZXJnZSA9IG1lcmdlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2UuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXG4gICAgICAgIHRvW2pdID0gZnJvbVtpXTtcbiAgICByZXR1cm4gdG87XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tZXJnZVdpdGggPSB2b2lkIDA7XG52YXIgbWVyZ2VfMSA9IHJlcXVpcmUoXCIuL21lcmdlXCIpO1xuZnVuY3Rpb24gbWVyZ2VXaXRoKCkge1xuICAgIHZhciBvdGhlclNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBvdGhlclNvdXJjZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlXzEubWVyZ2UuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQob3RoZXJTb3VyY2VzKSkpO1xufVxuZXhwb3J0cy5tZXJnZVdpdGggPSBtZXJnZVdpdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnZVdpdGguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm1pbiA9IHZvaWQgMDtcbnZhciByZWR1Y2VfMSA9IHJlcXVpcmUoXCIuL3JlZHVjZVwiKTtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc0Z1bmN0aW9uXCIpO1xuZnVuY3Rpb24gbWluKGNvbXBhcmVyKSB7XG4gICAgcmV0dXJuIHJlZHVjZV8xLnJlZHVjZShpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbihjb21wYXJlcikgPyBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4gKGNvbXBhcmVyKHgsIHkpIDwgMCA/IHggOiB5KTsgfSA6IGZ1bmN0aW9uICh4LCB5KSB7IHJldHVybiAoeCA8IHkgPyB4IDogeSk7IH0pO1xufVxuZXhwb3J0cy5taW4gPSBtaW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1taW4uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm11bHRpY2FzdCA9IHZvaWQgMDtcbnZhciBDb25uZWN0YWJsZU9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL0Nvbm5lY3RhYmxlT2JzZXJ2YWJsZVwiKTtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc0Z1bmN0aW9uXCIpO1xudmFyIGNvbm5lY3RfMSA9IHJlcXVpcmUoXCIuL2Nvbm5lY3RcIik7XG5mdW5jdGlvbiBtdWx0aWNhc3Qoc3ViamVjdE9yU3ViamVjdEZhY3RvcnksIHNlbGVjdG9yKSB7XG4gICAgdmFyIHN1YmplY3RGYWN0b3J5ID0gaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24oc3ViamVjdE9yU3ViamVjdEZhY3RvcnkpID8gc3ViamVjdE9yU3ViamVjdEZhY3RvcnkgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdWJqZWN0T3JTdWJqZWN0RmFjdG9yeTsgfTtcbiAgICBpZiAoaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24oc2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBjb25uZWN0XzEuY29ubmVjdChzZWxlY3Rvciwge1xuICAgICAgICAgICAgY29ubmVjdG9yOiBzdWJqZWN0RmFjdG9yeSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBuZXcgQ29ubmVjdGFibGVPYnNlcnZhYmxlXzEuQ29ubmVjdGFibGVPYnNlcnZhYmxlKHNvdXJjZSwgc3ViamVjdEZhY3RvcnkpOyB9O1xufVxuZXhwb3J0cy5tdWx0aWNhc3QgPSBtdWx0aWNhc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdWx0aWNhc3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXG4gICAgICAgIHRvW2pdID0gZnJvbVtpXTtcbiAgICByZXR1cm4gdG87XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5vbkVycm9yUmVzdW1lTmV4dCA9IGV4cG9ydHMub25FcnJvclJlc3VtZU5leHRXaXRoID0gdm9pZCAwO1xudmFyIGFyZ3NPckFyZ0FycmF5XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcmdzT3JBcmdBcnJheVwiKTtcbnZhciBvbkVycm9yUmVzdW1lTmV4dF8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvb25FcnJvclJlc3VtZU5leHRcIik7XG5mdW5jdGlvbiBvbkVycm9yUmVzdW1lTmV4dFdpdGgoKSB7XG4gICAgdmFyIHNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBzb3VyY2VzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBuZXh0U291cmNlcyA9IGFyZ3NPckFyZ0FycmF5XzEuYXJnc09yQXJnQXJyYXkoc291cmNlcyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIG9uRXJyb3JSZXN1bWVOZXh0XzEub25FcnJvclJlc3VtZU5leHQuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtzb3VyY2VdLCBfX3JlYWQobmV4dFNvdXJjZXMpKSk7IH07XG59XG5leHBvcnRzLm9uRXJyb3JSZXN1bWVOZXh0V2l0aCA9IG9uRXJyb3JSZXN1bWVOZXh0V2l0aDtcbmV4cG9ydHMub25FcnJvclJlc3VtZU5leHQgPSBvbkVycm9yUmVzdW1lTmV4dFdpdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vbkVycm9yUmVzdW1lTmV4dFdpdGguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhaXJ3aXNlID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBwYWlyd2lzZSgpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgcHJldjtcbiAgICAgICAgdmFyIGhhc1ByZXYgPSBmYWxzZTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgcCA9IHByZXY7XG4gICAgICAgICAgICBwcmV2ID0gdmFsdWU7XG4gICAgICAgICAgICBoYXNQcmV2ICYmIHN1YnNjcmliZXIubmV4dChbcCwgdmFsdWVdKTtcbiAgICAgICAgICAgIGhhc1ByZXYgPSB0cnVlO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG5leHBvcnRzLnBhaXJ3aXNlID0gcGFpcndpc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYWlyd2lzZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGx1Y2sgPSB2b2lkIDA7XG52YXIgbWFwXzEgPSByZXF1aXJlKFwiLi9tYXBcIik7XG5mdW5jdGlvbiBwbHVjaygpIHtcbiAgICB2YXIgcHJvcGVydGllcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHByb3BlcnRpZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIGxlbmd0aCA9IHByb3BlcnRpZXMubGVuZ3RoO1xuICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdsaXN0IG9mIHByb3BlcnRpZXMgY2Fubm90IGJlIGVtcHR5LicpO1xuICAgIH1cbiAgICByZXR1cm4gbWFwXzEubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHZhciBjdXJyZW50UHJvcCA9IHg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBwID0gY3VycmVudFByb3AgPT09IG51bGwgfHwgY3VycmVudFByb3AgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN1cnJlbnRQcm9wW3Byb3BlcnRpZXNbaV1dO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9wID0gcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQcm9wO1xuICAgIH0pO1xufVxuZXhwb3J0cy5wbHVjayA9IHBsdWNrO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGx1Y2suanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnB1Ymxpc2ggPSB2b2lkIDA7XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZShcIi4uL1N1YmplY3RcIik7XG52YXIgbXVsdGljYXN0XzEgPSByZXF1aXJlKFwiLi9tdWx0aWNhc3RcIik7XG52YXIgY29ubmVjdF8xID0gcmVxdWlyZShcIi4vY29ubmVjdFwiKTtcbmZ1bmN0aW9uIHB1Ymxpc2goc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gc2VsZWN0b3IgPyBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBjb25uZWN0XzEuY29ubmVjdChzZWxlY3Rvcikoc291cmNlKTsgfSA6IGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIG11bHRpY2FzdF8xLm11bHRpY2FzdChuZXcgU3ViamVjdF8xLlN1YmplY3QoKSkoc291cmNlKTsgfTtcbn1cbmV4cG9ydHMucHVibGlzaCA9IHB1Ymxpc2g7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wdWJsaXNoLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wdWJsaXNoQmVoYXZpb3IgPSB2b2lkIDA7XG52YXIgQmVoYXZpb3JTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi4vQmVoYXZpb3JTdWJqZWN0XCIpO1xudmFyIENvbm5lY3RhYmxlT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvQ29ubmVjdGFibGVPYnNlcnZhYmxlXCIpO1xuZnVuY3Rpb24gcHVibGlzaEJlaGF2aW9yKGluaXRpYWxWYWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdF8xLkJlaGF2aW9yU3ViamVjdChpbml0aWFsVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IENvbm5lY3RhYmxlT2JzZXJ2YWJsZV8xLkNvbm5lY3RhYmxlT2JzZXJ2YWJsZShzb3VyY2UsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YmplY3Q7IH0pO1xuICAgIH07XG59XG5leHBvcnRzLnB1Ymxpc2hCZWhhdmlvciA9IHB1Ymxpc2hCZWhhdmlvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXB1Ymxpc2hCZWhhdmlvci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucHVibGlzaExhc3QgPSB2b2lkIDA7XG52YXIgQXN5bmNTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi4vQXN5bmNTdWJqZWN0XCIpO1xudmFyIENvbm5lY3RhYmxlT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvQ29ubmVjdGFibGVPYnNlcnZhYmxlXCIpO1xuZnVuY3Rpb24gcHVibGlzaExhc3QoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSBuZXcgQXN5bmNTdWJqZWN0XzEuQXN5bmNTdWJqZWN0KCk7XG4gICAgICAgIHJldHVybiBuZXcgQ29ubmVjdGFibGVPYnNlcnZhYmxlXzEuQ29ubmVjdGFibGVPYnNlcnZhYmxlKHNvdXJjZSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gc3ViamVjdDsgfSk7XG4gICAgfTtcbn1cbmV4cG9ydHMucHVibGlzaExhc3QgPSBwdWJsaXNoTGFzdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXB1Ymxpc2hMYXN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wdWJsaXNoUmVwbGF5ID0gdm9pZCAwO1xudmFyIFJlcGxheVN1YmplY3RfMSA9IHJlcXVpcmUoXCIuLi9SZXBsYXlTdWJqZWN0XCIpO1xudmFyIG11bHRpY2FzdF8xID0gcmVxdWlyZShcIi4vbXVsdGljYXN0XCIpO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRnVuY3Rpb25cIik7XG5mdW5jdGlvbiBwdWJsaXNoUmVwbGF5KGJ1ZmZlclNpemUsIHdpbmRvd1RpbWUsIHNlbGVjdG9yT3JTY2hlZHVsZXIsIHRpbWVzdGFtcFByb3ZpZGVyKSB7XG4gICAgaWYgKHNlbGVjdG9yT3JTY2hlZHVsZXIgJiYgIWlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHNlbGVjdG9yT3JTY2hlZHVsZXIpKSB7XG4gICAgICAgIHRpbWVzdGFtcFByb3ZpZGVyID0gc2VsZWN0b3JPclNjaGVkdWxlcjtcbiAgICB9XG4gICAgdmFyIHNlbGVjdG9yID0gaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24oc2VsZWN0b3JPclNjaGVkdWxlcikgPyBzZWxlY3Rvck9yU2NoZWR1bGVyIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBtdWx0aWNhc3RfMS5tdWx0aWNhc3QobmV3IFJlcGxheVN1YmplY3RfMS5SZXBsYXlTdWJqZWN0KGJ1ZmZlclNpemUsIHdpbmRvd1RpbWUsIHRpbWVzdGFtcFByb3ZpZGVyKSwgc2VsZWN0b3IpKHNvdXJjZSk7IH07XG59XG5leHBvcnRzLnB1Ymxpc2hSZXBsYXkgPSBwdWJsaXNoUmVwbGF5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHVibGlzaFJlcGxheS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJhY2VXaXRoID0gdm9pZCAwO1xudmFyIHJhY2VfMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL3JhY2VcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBpZGVudGl0eV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaWRlbnRpdHlcIik7XG5mdW5jdGlvbiByYWNlV2l0aCgpIHtcbiAgICB2YXIgb3RoZXJTb3VyY2VzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgb3RoZXJTb3VyY2VzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiAhb3RoZXJTb3VyY2VzLmxlbmd0aFxuICAgICAgICA/IGlkZW50aXR5XzEuaWRlbnRpdHlcbiAgICAgICAgOiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICByYWNlXzEucmFjZUluaXQoX19zcHJlYWRBcnJheShbc291cmNlXSwgX19yZWFkKG90aGVyU291cmNlcykpKShzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG59XG5leHBvcnRzLnJhY2VXaXRoID0gcmFjZVdpdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yYWNlV2l0aC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVwZWF0ID0gdm9pZCAwO1xudmFyIGVtcHR5XzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9lbXB0eVwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIHRpbWVyXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS90aW1lclwiKTtcbmZ1bmN0aW9uIHJlcGVhdChjb3VudE9yQ29uZmlnKSB7XG4gICAgdmFyIF9hO1xuICAgIHZhciBjb3VudCA9IEluZmluaXR5O1xuICAgIHZhciBkZWxheTtcbiAgICBpZiAoY291bnRPckNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY291bnRPckNvbmZpZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIChfYSA9IGNvdW50T3JDb25maWcuY291bnQsIGNvdW50ID0gX2EgPT09IHZvaWQgMCA/IEluZmluaXR5IDogX2EsIGRlbGF5ID0gY291bnRPckNvbmZpZy5kZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb3VudCA9IGNvdW50T3JDb25maWc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvdW50IDw9IDBcbiAgICAgICAgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBlbXB0eV8xLkVNUFRZOyB9XG4gICAgICAgIDogbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgdmFyIHNvRmFyID0gMDtcbiAgICAgICAgICAgIHZhciBzb3VyY2VTdWI7XG4gICAgICAgICAgICB2YXIgcmVzdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc291cmNlU3ViID09PSBudWxsIHx8IHNvdXJjZVN1YiA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgc291cmNlU3ViID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoZGVsYXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbm90aWZpZXIgPSB0eXBlb2YgZGVsYXkgPT09ICdudW1iZXInID8gdGltZXJfMS50aW1lcihkZWxheSkgOiBpbm5lckZyb21fMS5pbm5lckZyb20oZGVsYXkoc29GYXIpKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5vdGlmaWVyU3Vic2NyaWJlcl8xID0gT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyU3Vic2NyaWJlcl8xLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVUb1NvdXJjZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3Vic2NyaWJlKG5vdGlmaWVyU3Vic2NyaWJlcl8xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZVRvU291cmNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciBzdWJzY3JpYmVUb1NvdXJjZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3luY1Vuc3ViID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc291cmNlU3ViID0gc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgrK3NvRmFyIDwgY291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VTdWIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY1Vuc3ViID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICBpZiAoc3luY1Vuc3ViKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHN1YnNjcmliZVRvU291cmNlKCk7XG4gICAgICAgIH0pO1xufVxuZXhwb3J0cy5yZXBlYXQgPSByZXBlYXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXBlYXQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlcGVhdFdoZW4gPSB2b2lkIDA7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZShcIi4uL1N1YmplY3RcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIHJlcGVhdFdoZW4obm90aWZpZXIpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaW5uZXJTdWI7XG4gICAgICAgIHZhciBzeW5jUmVzdWIgPSBmYWxzZTtcbiAgICAgICAgdmFyIGNvbXBsZXRpb25zJDtcbiAgICAgICAgdmFyIGlzTm90aWZpZXJDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgaXNNYWluQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgdmFyIGNoZWNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBpc01haW5Db21wbGV0ZSAmJiBpc05vdGlmaWVyQ29tcGxldGUgJiYgKHN1YnNjcmliZXIuY29tcGxldGUoKSwgdHJ1ZSk7IH07XG4gICAgICAgIHZhciBnZXRDb21wbGV0aW9uU3ViamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghY29tcGxldGlvbnMkKSB7XG4gICAgICAgICAgICAgICAgY29tcGxldGlvbnMkID0gbmV3IFN1YmplY3RfMS5TdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKG5vdGlmaWVyKGNvbXBsZXRpb25zJCkpLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5uZXJTdWIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZUZvclJlcGVhdFdoZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNSZXN1YiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzTm90aWZpZXJDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbnMkO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgc3Vic2NyaWJlRm9yUmVwZWF0V2hlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlzTWFpbkNvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgICAgICBpbm5lclN1YiA9IHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlzTWFpbkNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAhY2hlY2tDb21wbGV0ZSgpICYmIGdldENvbXBsZXRpb25TdWJqZWN0KCkubmV4dCgpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgaWYgKHN5bmNSZXN1Yikge1xuICAgICAgICAgICAgICAgIGlubmVyU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgaW5uZXJTdWIgPSBudWxsO1xuICAgICAgICAgICAgICAgIHN5bmNSZXN1YiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZUZvclJlcGVhdFdoZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc3Vic2NyaWJlRm9yUmVwZWF0V2hlbigpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5yZXBlYXRXaGVuID0gcmVwZWF0V2hlbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcGVhdFdoZW4uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJldHJ5ID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lkZW50aXR5XCIpO1xudmFyIHRpbWVyXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS90aW1lclwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbmZ1bmN0aW9uIHJldHJ5KGNvbmZpZ09yQ291bnQpIHtcbiAgICBpZiAoY29uZmlnT3JDb3VudCA9PT0gdm9pZCAwKSB7IGNvbmZpZ09yQ291bnQgPSBJbmZpbml0eTsgfVxuICAgIHZhciBjb25maWc7XG4gICAgaWYgKGNvbmZpZ09yQ291bnQgJiYgdHlwZW9mIGNvbmZpZ09yQ291bnQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbmZpZyA9IGNvbmZpZ09yQ291bnQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25maWcgPSB7XG4gICAgICAgICAgICBjb3VudDogY29uZmlnT3JDb3VudCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdmFyIF9hID0gY29uZmlnLmNvdW50LCBjb3VudCA9IF9hID09PSB2b2lkIDAgPyBJbmZpbml0eSA6IF9hLCBkZWxheSA9IGNvbmZpZy5kZWxheSwgX2IgPSBjb25maWcucmVzZXRPblN1Y2Nlc3MsIHJlc2V0T25TdWNjZXNzID0gX2IgPT09IHZvaWQgMCA/IGZhbHNlIDogX2I7XG4gICAgcmV0dXJuIGNvdW50IDw9IDBcbiAgICAgICAgPyBpZGVudGl0eV8xLmlkZW50aXR5XG4gICAgICAgIDogbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgdmFyIHNvRmFyID0gMDtcbiAgICAgICAgICAgIHZhciBpbm5lclN1YjtcbiAgICAgICAgICAgIHZhciBzdWJzY3JpYmVGb3JSZXRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3luY1Vuc3ViID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaW5uZXJTdWIgPSBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc2V0T25TdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb0ZhciA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9LCB1bmRlZmluZWQsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvRmFyKysgPCBjb3VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3ViXzEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubmVyU3ViKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyU3ViID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlRm9yUmV0cnkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNVbnN1YiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWxheSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vdGlmaWVyID0gdHlwZW9mIGRlbGF5ID09PSAnbnVtYmVyJyA/IHRpbWVyXzEudGltZXIoZGVsYXkpIDogaW5uZXJGcm9tXzEuaW5uZXJGcm9tKGRlbGF5KGVyciwgc29GYXIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm90aWZpZXJTdWJzY3JpYmVyXzEgPSBPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllclN1YnNjcmliZXJfMS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1Yl8xKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3Vic2NyaWJlKG5vdGlmaWVyU3Vic2NyaWJlcl8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3ViXzEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICBpZiAoc3luY1Vuc3ViKSB7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyU3ViID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlRm9yUmV0cnkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgc3Vic2NyaWJlRm9yUmV0cnkoKTtcbiAgICAgICAgfSk7XG59XG5leHBvcnRzLnJldHJ5ID0gcmV0cnk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXRyeS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmV0cnlXaGVuID0gdm9pZCAwO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIFN1YmplY3RfMSA9IHJlcXVpcmUoXCIuLi9TdWJqZWN0XCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiByZXRyeVdoZW4obm90aWZpZXIpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaW5uZXJTdWI7XG4gICAgICAgIHZhciBzeW5jUmVzdWIgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9ycyQ7XG4gICAgICAgIHZhciBzdWJzY3JpYmVGb3JSZXRyeVdoZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpbm5lclN1YiA9IHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvcnMkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycyQgPSBuZXcgU3ViamVjdF8xLlN1YmplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKG5vdGlmaWVyKGVycm9ycyQpKS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbm5lclN1YiA/IHN1YnNjcmliZUZvclJldHJ5V2hlbigpIDogKHN5bmNSZXN1YiA9IHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnJvcnMkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycyQubmV4dChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGlmIChzeW5jUmVzdWIpIHtcbiAgICAgICAgICAgICAgICBpbm5lclN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIGlubmVyU3ViID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzeW5jUmVzdWIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVGb3JSZXRyeVdoZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc3Vic2NyaWJlRm9yUmV0cnlXaGVuKCk7XG4gICAgfSk7XG59XG5leHBvcnRzLnJldHJ5V2hlbiA9IHJldHJ5V2hlbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJldHJ5V2hlbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2FtcGxlID0gdm9pZCAwO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgbm9vcF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbm9vcFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIHNhbXBsZShub3RpZmllcikge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfSkpO1xuICAgICAgICBpbm5lckZyb21fMS5pbm5lckZyb20obm90aWZpZXIpLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBsYXN0VmFsdWU7XG4gICAgICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBub29wXzEubm9vcCkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5zYW1wbGUgPSBzYW1wbGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zYW1wbGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNhbXBsZVRpbWUgPSB2b2lkIDA7XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoXCIuLi9zY2hlZHVsZXIvYXN5bmNcIik7XG52YXIgc2FtcGxlXzEgPSByZXF1aXJlKFwiLi9zYW1wbGVcIik7XG52YXIgaW50ZXJ2YWxfMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2ludGVydmFsXCIpO1xuZnVuY3Rpb24gc2FtcGxlVGltZShwZXJpb2QsIHNjaGVkdWxlcikge1xuICAgIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkgeyBzY2hlZHVsZXIgPSBhc3luY18xLmFzeW5jU2NoZWR1bGVyOyB9XG4gICAgcmV0dXJuIHNhbXBsZV8xLnNhbXBsZShpbnRlcnZhbF8xLmludGVydmFsKHBlcmlvZCwgc2NoZWR1bGVyKSk7XG59XG5leHBvcnRzLnNhbXBsZVRpbWUgPSBzYW1wbGVUaW1lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2FtcGxlVGltZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2NhbiA9IHZvaWQgMDtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIHNjYW5JbnRlcm5hbHNfMSA9IHJlcXVpcmUoXCIuL3NjYW5JbnRlcm5hbHNcIik7XG5mdW5jdGlvbiBzY2FuKGFjY3VtdWxhdG9yLCBzZWVkKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKHNjYW5JbnRlcm5hbHNfMS5zY2FuSW50ZXJuYWxzKGFjY3VtdWxhdG9yLCBzZWVkLCBhcmd1bWVudHMubGVuZ3RoID49IDIsIHRydWUpKTtcbn1cbmV4cG9ydHMuc2NhbiA9IHNjYW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY2FuLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZXF1ZW5jZUVxdWFsID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG5mdW5jdGlvbiBzZXF1ZW5jZUVxdWFsKGNvbXBhcmVUbywgY29tcGFyYXRvcikge1xuICAgIGlmIChjb21wYXJhdG9yID09PSB2b2lkIDApIHsgY29tcGFyYXRvciA9IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhID09PSBiOyB9OyB9XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGFTdGF0ZSA9IGNyZWF0ZVN0YXRlKCk7XG4gICAgICAgIHZhciBiU3RhdGUgPSBjcmVhdGVTdGF0ZSgpO1xuICAgICAgICB2YXIgZW1pdCA9IGZ1bmN0aW9uIChpc0VxdWFsKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoaXNFcXVhbCk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBjcmVhdGVTdWJzY3JpYmVyID0gZnVuY3Rpb24gKHNlbGZTdGF0ZSwgb3RoZXJTdGF0ZSkge1xuICAgICAgICAgICAgdmFyIHNlcXVlbmNlRXF1YWxTdWJzY3JpYmVyID0gT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IG90aGVyU3RhdGUuYnVmZmVyLCBjb21wbGV0ZSA9IG90aGVyU3RhdGUuY29tcGxldGU7XG4gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGUgPyBlbWl0KGZhbHNlKSA6IHNlbGZTdGF0ZS5idWZmZXIucHVzaChhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICFjb21wYXJhdG9yKGEsIGJ1ZmZlci5zaGlmdCgpKSAmJiBlbWl0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2VsZlN0YXRlLmNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgY29tcGxldGUgPSBvdGhlclN0YXRlLmNvbXBsZXRlLCBidWZmZXIgPSBvdGhlclN0YXRlLmJ1ZmZlcjtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZSAmJiBlbWl0KGJ1ZmZlci5sZW5ndGggPT09IDApO1xuICAgICAgICAgICAgICAgIHNlcXVlbmNlRXF1YWxTdWJzY3JpYmVyID09PSBudWxsIHx8IHNlcXVlbmNlRXF1YWxTdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZXF1ZW5jZUVxdWFsU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gc2VxdWVuY2VFcXVhbFN1YnNjcmliZXI7XG4gICAgICAgIH07XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlU3Vic2NyaWJlcihhU3RhdGUsIGJTdGF0ZSkpO1xuICAgICAgICBpbm5lckZyb21fMS5pbm5lckZyb20oY29tcGFyZVRvKS5zdWJzY3JpYmUoY3JlYXRlU3Vic2NyaWJlcihiU3RhdGUsIGFTdGF0ZSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5zZXF1ZW5jZUVxdWFsID0gc2VxdWVuY2VFcXVhbDtcbmZ1bmN0aW9uIGNyZWF0ZVN0YXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGJ1ZmZlcjogW10sXG4gICAgICAgIGNvbXBsZXRlOiBmYWxzZSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VxdWVuY2VFcXVhbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNoYXJlID0gdm9pZCAwO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIFN1YmplY3RfMSA9IHJlcXVpcmUoXCIuLi9TdWJqZWN0XCIpO1xudmFyIFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuLi9TdWJzY3JpYmVyXCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG5mdW5jdGlvbiBzaGFyZShvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgX2EgPSBvcHRpb25zLmNvbm5lY3RvciwgY29ubmVjdG9yID0gX2EgPT09IHZvaWQgMCA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBTdWJqZWN0XzEuU3ViamVjdCgpOyB9IDogX2EsIF9iID0gb3B0aW9ucy5yZXNldE9uRXJyb3IsIHJlc2V0T25FcnJvciA9IF9iID09PSB2b2lkIDAgPyB0cnVlIDogX2IsIF9jID0gb3B0aW9ucy5yZXNldE9uQ29tcGxldGUsIHJlc2V0T25Db21wbGV0ZSA9IF9jID09PSB2b2lkIDAgPyB0cnVlIDogX2MsIF9kID0gb3B0aW9ucy5yZXNldE9uUmVmQ291bnRaZXJvLCByZXNldE9uUmVmQ291bnRaZXJvID0gX2QgPT09IHZvaWQgMCA/IHRydWUgOiBfZDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHdyYXBwZXJTb3VyY2UpIHtcbiAgICAgICAgdmFyIGNvbm5lY3Rpb247XG4gICAgICAgIHZhciByZXNldENvbm5lY3Rpb247XG4gICAgICAgIHZhciBzdWJqZWN0O1xuICAgICAgICB2YXIgcmVmQ291bnQgPSAwO1xuICAgICAgICB2YXIgaGFzQ29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgIHZhciBoYXNFcnJvcmVkID0gZmFsc2U7XG4gICAgICAgIHZhciBjYW5jZWxSZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJlc2V0Q29ubmVjdGlvbiA9PT0gbnVsbCB8fCByZXNldENvbm5lY3Rpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc2V0Q29ubmVjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmVzZXRDb25uZWN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgcmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYW5jZWxSZXNldCgpO1xuICAgICAgICAgICAgY29ubmVjdGlvbiA9IHN1YmplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBoYXNDb21wbGV0ZWQgPSBoYXNFcnJvcmVkID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZXNldEFuZFVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGNvbm4gPSBjb25uZWN0aW9uO1xuICAgICAgICAgICAgcmVzZXQoKTtcbiAgICAgICAgICAgIGNvbm4gPT09IG51bGwgfHwgY29ubiA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29ubi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgcmVmQ291bnQrKztcbiAgICAgICAgICAgIGlmICghaGFzRXJyb3JlZCAmJiAhaGFzQ29tcGxldGVkKSB7XG4gICAgICAgICAgICAgICAgY2FuY2VsUmVzZXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBkZXN0ID0gKHN1YmplY3QgPSBzdWJqZWN0ICE9PSBudWxsICYmIHN1YmplY3QgIT09IHZvaWQgMCA/IHN1YmplY3QgOiBjb25uZWN0b3IoKSk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVmQ291bnQtLTtcbiAgICAgICAgICAgICAgICBpZiAocmVmQ291bnQgPT09IDAgJiYgIWhhc0Vycm9yZWQgJiYgIWhhc0NvbXBsZXRlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXNldENvbm5lY3Rpb24gPSBoYW5kbGVSZXNldChyZXNldEFuZFVuc3Vic2NyaWJlLCByZXNldE9uUmVmQ291bnRaZXJvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRlc3Quc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICAgICAgaWYgKCFjb25uZWN0aW9uICYmXG4gICAgICAgICAgICAgICAgcmVmQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbiA9IG5ldyBTdWJzY3JpYmVyXzEuU2FmZVN1YnNjcmliZXIoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIGRlc3QubmV4dCh2YWx1ZSk7IH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldENvbm5lY3Rpb24gPSBoYW5kbGVSZXNldChyZXNldCwgcmVzZXRPbkVycm9yLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldENvbm5lY3Rpb24gPSBoYW5kbGVSZXNldChyZXNldCwgcmVzZXRPbkNvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpbm5lckZyb21fMS5pbm5lckZyb20oc291cmNlKS5zdWJzY3JpYmUoY29ubmVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKHdyYXBwZXJTb3VyY2UpO1xuICAgIH07XG59XG5leHBvcnRzLnNoYXJlID0gc2hhcmU7XG5mdW5jdGlvbiBoYW5kbGVSZXNldChyZXNldCwgb24pIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIGlmIChvbiA9PT0gdHJ1ZSkge1xuICAgICAgICByZXNldCgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChvbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgb25TdWJzY3JpYmVyID0gbmV3IFN1YnNjcmliZXJfMS5TYWZlU3Vic2NyaWJlcih7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG9uU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmVzZXQoKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gaW5uZXJGcm9tXzEuaW5uZXJGcm9tKG9uLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGFyZ3MpKSkpLnN1YnNjcmliZShvblN1YnNjcmliZXIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2hhcmUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNoYXJlUmVwbGF5ID0gdm9pZCAwO1xudmFyIFJlcGxheVN1YmplY3RfMSA9IHJlcXVpcmUoXCIuLi9SZXBsYXlTdWJqZWN0XCIpO1xudmFyIHNoYXJlXzEgPSByZXF1aXJlKFwiLi9zaGFyZVwiKTtcbmZ1bmN0aW9uIHNoYXJlUmVwbGF5KGNvbmZpZ09yQnVmZmVyU2l6ZSwgd2luZG93VGltZSwgc2NoZWR1bGVyKSB7XG4gICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgdmFyIGJ1ZmZlclNpemU7XG4gICAgdmFyIHJlZkNvdW50ID0gZmFsc2U7XG4gICAgaWYgKGNvbmZpZ09yQnVmZmVyU2l6ZSAmJiB0eXBlb2YgY29uZmlnT3JCdWZmZXJTaXplID09PSAnb2JqZWN0Jykge1xuICAgICAgICAoX2EgPSBjb25maWdPckJ1ZmZlclNpemUuYnVmZmVyU2l6ZSwgYnVmZmVyU2l6ZSA9IF9hID09PSB2b2lkIDAgPyBJbmZpbml0eSA6IF9hLCBfYiA9IGNvbmZpZ09yQnVmZmVyU2l6ZS53aW5kb3dUaW1lLCB3aW5kb3dUaW1lID0gX2IgPT09IHZvaWQgMCA/IEluZmluaXR5IDogX2IsIF9jID0gY29uZmlnT3JCdWZmZXJTaXplLnJlZkNvdW50LCByZWZDb3VudCA9IF9jID09PSB2b2lkIDAgPyBmYWxzZSA6IF9jLCBzY2hlZHVsZXIgPSBjb25maWdPckJ1ZmZlclNpemUuc2NoZWR1bGVyKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGJ1ZmZlclNpemUgPSAoY29uZmlnT3JCdWZmZXJTaXplICE9PSBudWxsICYmIGNvbmZpZ09yQnVmZmVyU2l6ZSAhPT0gdm9pZCAwID8gY29uZmlnT3JCdWZmZXJTaXplIDogSW5maW5pdHkpO1xuICAgIH1cbiAgICByZXR1cm4gc2hhcmVfMS5zaGFyZSh7XG4gICAgICAgIGNvbm5lY3RvcjogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFJlcGxheVN1YmplY3RfMS5SZXBsYXlTdWJqZWN0KGJ1ZmZlclNpemUsIHdpbmRvd1RpbWUsIHNjaGVkdWxlcik7IH0sXG4gICAgICAgIHJlc2V0T25FcnJvcjogdHJ1ZSxcbiAgICAgICAgcmVzZXRPbkNvbXBsZXRlOiBmYWxzZSxcbiAgICAgICAgcmVzZXRPblJlZkNvdW50WmVybzogcmVmQ291bnQsXG4gICAgfSk7XG59XG5leHBvcnRzLnNoYXJlUmVwbGF5ID0gc2hhcmVSZXBsYXk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaGFyZVJlcGxheS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2luZ2xlID0gdm9pZCAwO1xudmFyIEVtcHR5RXJyb3JfMSA9IHJlcXVpcmUoXCIuLi91dGlsL0VtcHR5RXJyb3JcIik7XG52YXIgU2VxdWVuY2VFcnJvcl8xID0gcmVxdWlyZShcIi4uL3V0aWwvU2VxdWVuY2VFcnJvclwiKTtcbnZhciBOb3RGb3VuZEVycm9yXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9Ob3RGb3VuZEVycm9yXCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBzaW5nbGUocHJlZGljYXRlKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHZhciBzaW5nbGVWYWx1ZTtcbiAgICAgICAgdmFyIHNlZW5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHNlZW5WYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAoIXByZWRpY2F0ZSB8fCBwcmVkaWNhdGUodmFsdWUsIGluZGV4KyssIHNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICBoYXNWYWx1ZSAmJiBzdWJzY3JpYmVyLmVycm9yKG5ldyBTZXF1ZW5jZUVycm9yXzEuU2VxdWVuY2VFcnJvcignVG9vIG1hbnkgbWF0Y2hpbmcgdmFsdWVzJykpO1xuICAgICAgICAgICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzaW5nbGVWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoc2luZ2xlVmFsdWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3Ioc2VlblZhbHVlID8gbmV3IE5vdEZvdW5kRXJyb3JfMS5Ob3RGb3VuZEVycm9yKCdObyBtYXRjaGluZyB2YWx1ZXMnKSA6IG5ldyBFbXB0eUVycm9yXzEuRW1wdHlFcnJvcigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5zaW5nbGUgPSBzaW5nbGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaW5nbGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNraXAgPSB2b2lkIDA7XG52YXIgZmlsdGVyXzEgPSByZXF1aXJlKFwiLi9maWx0ZXJcIik7XG5mdW5jdGlvbiBza2lwKGNvdW50KSB7XG4gICAgcmV0dXJuIGZpbHRlcl8xLmZpbHRlcihmdW5jdGlvbiAoXywgaW5kZXgpIHsgcmV0dXJuIGNvdW50IDw9IGluZGV4OyB9KTtcbn1cbmV4cG9ydHMuc2tpcCA9IHNraXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1za2lwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5za2lwTGFzdCA9IHZvaWQgMDtcbnZhciBpZGVudGl0eV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaWRlbnRpdHlcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIHNraXBMYXN0KHNraXBDb3VudCkge1xuICAgIHJldHVybiBza2lwQ291bnQgPD0gMFxuICAgICAgICA/XG4gICAgICAgICAgICBpZGVudGl0eV8xLmlkZW50aXR5XG4gICAgICAgIDogbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgdmFyIHJpbmcgPSBuZXcgQXJyYXkoc2tpcENvdW50KTtcbiAgICAgICAgICAgIHZhciBzZWVuID0gMDtcbiAgICAgICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZUluZGV4ID0gc2VlbisrO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZUluZGV4IDwgc2tpcENvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJpbmdbdmFsdWVJbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHZhbHVlSW5kZXggJSBza2lwQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IHJpbmdbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICByaW5nW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQob2xkVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmluZyA9IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbn1cbmV4cG9ydHMuc2tpcExhc3QgPSBza2lwTGFzdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNraXBMYXN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5za2lwVW50aWwgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbnZhciBub29wXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9ub29wXCIpO1xuZnVuY3Rpb24gc2tpcFVudGlsKG5vdGlmaWVyKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHRha2luZyA9IGZhbHNlO1xuICAgICAgICB2YXIgc2tpcFN1YnNjcmliZXIgPSBPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2tpcFN1YnNjcmliZXIgPT09IG51bGwgfHwgc2tpcFN1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNraXBTdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0YWtpbmcgPSB0cnVlO1xuICAgICAgICB9LCBub29wXzEubm9vcCk7XG4gICAgICAgIGlubmVyRnJvbV8xLmlubmVyRnJvbShub3RpZmllcikuc3Vic2NyaWJlKHNraXBTdWJzY3JpYmVyKTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB0YWtpbmcgJiYgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTsgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5za2lwVW50aWwgPSBza2lwVW50aWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1za2lwVW50aWwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNraXBXaGlsZSA9IHZvaWQgMDtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gc2tpcFdoaWxlKHByZWRpY2F0ZSkge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciB0YWtpbmcgPSBmYWxzZTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiAodGFraW5nIHx8ICh0YWtpbmcgPSAhcHJlZGljYXRlKHZhbHVlLCBpbmRleCsrKSkpICYmIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7IH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuc2tpcFdoaWxlID0gc2tpcFdoaWxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2tpcFdoaWxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zdGFydFdpdGggPSB2b2lkIDA7XG52YXIgY29uY2F0XzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9jb25jYXRcIik7XG52YXIgYXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc1wiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xuZnVuY3Rpb24gc3RhcnRXaXRoKCkge1xuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YWx1ZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIHNjaGVkdWxlciA9IGFyZ3NfMS5wb3BTY2hlZHVsZXIodmFsdWVzKTtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICAoc2NoZWR1bGVyID8gY29uY2F0XzEuY29uY2F0KHZhbHVlcywgc291cmNlLCBzY2hlZHVsZXIpIDogY29uY2F0XzEuY29uY2F0KHZhbHVlcywgc291cmNlKSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5zdGFydFdpdGggPSBzdGFydFdpdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGFydFdpdGguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN3aXRjaE1hcCA9IHZvaWQgMDtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gc3dpdGNoTWFwKHByb2plY3QsIHJlc3VsdFNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGlubmVyU3Vic2NyaWJlciA9IG51bGw7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHZhciBpc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIHZhciBjaGVja0NvbXBsZXRlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXNDb21wbGV0ZSAmJiAhaW5uZXJTdWJzY3JpYmVyICYmIHN1YnNjcmliZXIuY29tcGxldGUoKTsgfTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpbm5lclN1YnNjcmliZXIgPT09IG51bGwgfHwgaW5uZXJTdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbm5lclN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHZhciBpbm5lckluZGV4ID0gMDtcbiAgICAgICAgICAgIHZhciBvdXRlckluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgICAgIGlubmVyRnJvbV8xLmlubmVyRnJvbShwcm9qZWN0KHZhbHVlLCBvdXRlckluZGV4KSkuc3Vic2NyaWJlKChpbm5lclN1YnNjcmliZXIgPSBPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKGlubmVyVmFsdWUpIHsgcmV0dXJuIHN1YnNjcmliZXIubmV4dChyZXN1bHRTZWxlY3RvciA/IHJlc3VsdFNlbGVjdG9yKHZhbHVlLCBpbm5lclZhbHVlLCBvdXRlckluZGV4LCBpbm5lckluZGV4KyspIDogaW5uZXJWYWx1ZSk7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpbm5lclN1YnNjcmliZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIGNoZWNrQ29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pKSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgICAgY2hlY2tDb21wbGV0ZSgpO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG5leHBvcnRzLnN3aXRjaE1hcCA9IHN3aXRjaE1hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN3aXRjaE1hcC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3dpdGNoQWxsID0gdm9pZCAwO1xudmFyIHN3aXRjaE1hcF8xID0gcmVxdWlyZShcIi4vc3dpdGNoTWFwXCIpO1xudmFyIGlkZW50aXR5XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pZGVudGl0eVwiKTtcbmZ1bmN0aW9uIHN3aXRjaEFsbCgpIHtcbiAgICByZXR1cm4gc3dpdGNoTWFwXzEuc3dpdGNoTWFwKGlkZW50aXR5XzEuaWRlbnRpdHkpO1xufVxuZXhwb3J0cy5zd2l0Y2hBbGwgPSBzd2l0Y2hBbGw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zd2l0Y2hBbGwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN3aXRjaE1hcFRvID0gdm9pZCAwO1xudmFyIHN3aXRjaE1hcF8xID0gcmVxdWlyZShcIi4vc3dpdGNoTWFwXCIpO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRnVuY3Rpb25cIik7XG5mdW5jdGlvbiBzd2l0Y2hNYXBUbyhpbm5lck9ic2VydmFibGUsIHJlc3VsdFNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHJlc3VsdFNlbGVjdG9yKSA/IHN3aXRjaE1hcF8xLnN3aXRjaE1hcChmdW5jdGlvbiAoKSB7IHJldHVybiBpbm5lck9ic2VydmFibGU7IH0sIHJlc3VsdFNlbGVjdG9yKSA6IHN3aXRjaE1hcF8xLnN3aXRjaE1hcChmdW5jdGlvbiAoKSB7IHJldHVybiBpbm5lck9ic2VydmFibGU7IH0pO1xufVxuZXhwb3J0cy5zd2l0Y2hNYXBUbyA9IHN3aXRjaE1hcFRvO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3dpdGNoTWFwVG8uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN3aXRjaFNjYW4gPSB2b2lkIDA7XG52YXIgc3dpdGNoTWFwXzEgPSByZXF1aXJlKFwiLi9zd2l0Y2hNYXBcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbmZ1bmN0aW9uIHN3aXRjaFNjYW4oYWNjdW11bGF0b3IsIHNlZWQpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgc3RhdGUgPSBzZWVkO1xuICAgICAgICBzd2l0Y2hNYXBfMS5zd2l0Y2hNYXAoZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkgeyByZXR1cm4gYWNjdW11bGF0b3Ioc3RhdGUsIHZhbHVlLCBpbmRleCk7IH0sIGZ1bmN0aW9uIChfLCBpbm5lclZhbHVlKSB7IHJldHVybiAoKHN0YXRlID0gaW5uZXJWYWx1ZSksIGlubmVyVmFsdWUpOyB9KShzb3VyY2UpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN0YXRlID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuc3dpdGNoU2NhbiA9IHN3aXRjaFNjYW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zd2l0Y2hTY2FuLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50YWtlVW50aWwgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbnZhciBub29wXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9ub29wXCIpO1xuZnVuY3Rpb24gdGFrZVVudGlsKG5vdGlmaWVyKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKG5vdGlmaWVyKS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YnNjcmliZXIuY29tcGxldGUoKTsgfSwgbm9vcF8xLm5vb3ApKTtcbiAgICAgICAgIXN1YnNjcmliZXIuY2xvc2VkICYmIHNvdXJjZS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfSk7XG59XG5leHBvcnRzLnRha2VVbnRpbCA9IHRha2VVbnRpbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRha2VVbnRpbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudGFrZVdoaWxlID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiB0YWtlV2hpbGUocHJlZGljYXRlLCBpbmNsdXNpdmUpIHtcbiAgICBpZiAoaW5jbHVzaXZlID09PSB2b2lkIDApIHsgaW5jbHVzaXZlID0gZmFsc2U7IH1cbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBwcmVkaWNhdGUodmFsdWUsIGluZGV4KyspO1xuICAgICAgICAgICAgKHJlc3VsdCB8fCBpbmNsdXNpdmUpICYmIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAhcmVzdWx0ICYmIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy50YWtlV2hpbGUgPSB0YWtlV2hpbGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10YWtlV2hpbGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRhcCA9IHZvaWQgMDtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc0Z1bmN0aW9uXCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lkZW50aXR5XCIpO1xuZnVuY3Rpb24gdGFwKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICB2YXIgdGFwT2JzZXJ2ZXIgPSBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbihvYnNlcnZlck9yTmV4dCkgfHwgZXJyb3IgfHwgY29tcGxldGVcbiAgICAgICAgP1xuICAgICAgICAgICAgeyBuZXh0OiBvYnNlcnZlck9yTmV4dCwgZXJyb3I6IGVycm9yLCBjb21wbGV0ZTogY29tcGxldGUgfVxuICAgICAgICA6IG9ic2VydmVyT3JOZXh0O1xuICAgIHJldHVybiB0YXBPYnNlcnZlclxuICAgICAgICA/IGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIChfYSA9IHRhcE9ic2VydmVyLnN1YnNjcmliZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGFwT2JzZXJ2ZXIpO1xuICAgICAgICAgICAgdmFyIGlzVW5zdWIgPSB0cnVlO1xuICAgICAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIChfYSA9IHRhcE9ic2VydmVyLm5leHQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRhcE9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgaXNVbnN1YiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIChfYSA9IHRhcE9ic2VydmVyLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0YXBPYnNlcnZlcik7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBpc1Vuc3ViID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgKF9hID0gdGFwT2JzZXJ2ZXIuZXJyb3IpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRhcE9ic2VydmVyLCBlcnIpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgICAgIGlmIChpc1Vuc3ViKSB7XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IHRhcE9ic2VydmVyLnVuc3Vic2NyaWJlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0YXBPYnNlcnZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIChfYiA9IHRhcE9ic2VydmVyLmZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbCh0YXBPYnNlcnZlcik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pXG4gICAgICAgIDpcbiAgICAgICAgICAgIGlkZW50aXR5XzEuaWRlbnRpdHk7XG59XG5leHBvcnRzLnRhcCA9IHRhcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRhcC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudGhyb3R0bGUgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbmZ1bmN0aW9uIHRocm90dGxlKGR1cmF0aW9uU2VsZWN0b3IsIGNvbmZpZykge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSA9IGNvbmZpZyAhPT0gbnVsbCAmJiBjb25maWcgIT09IHZvaWQgMCA/IGNvbmZpZyA6IHt9LCBfYiA9IF9hLmxlYWRpbmcsIGxlYWRpbmcgPSBfYiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9iLCBfYyA9IF9hLnRyYWlsaW5nLCB0cmFpbGluZyA9IF9jID09PSB2b2lkIDAgPyBmYWxzZSA6IF9jO1xuICAgICAgICB2YXIgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdmFyIHNlbmRWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciB0aHJvdHRsZWQgPSBudWxsO1xuICAgICAgICB2YXIgaXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgZW5kVGhyb3R0bGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRocm90dGxlZCA9PT0gbnVsbCB8fCB0aHJvdHRsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRocm90dGxlZC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhyb3R0bGVkID0gbnVsbDtcbiAgICAgICAgICAgIGlmICh0cmFpbGluZykge1xuICAgICAgICAgICAgICAgIHNlbmQoKTtcbiAgICAgICAgICAgICAgICBpc0NvbXBsZXRlICYmIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGNsZWFudXBUaHJvdHRsaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhyb3R0bGVkID0gbnVsbDtcbiAgICAgICAgICAgIGlzQ29tcGxldGUgJiYgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgc3RhcnRUaHJvdHRsZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuICh0aHJvdHRsZWQgPSBpbm5lckZyb21fMS5pbm5lckZyb20oZHVyYXRpb25TZWxlY3Rvcih2YWx1ZSkpLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZW5kVGhyb3R0bGluZywgY2xlYW51cFRocm90dGxpbmcpKSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBzZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBzZW5kVmFsdWU7XG4gICAgICAgICAgICAgICAgc2VuZFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICFpc0NvbXBsZXRlICYmIHN0YXJ0VGhyb3R0bGUodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlbmRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgISh0aHJvdHRsZWQgJiYgIXRocm90dGxlZC5jbG9zZWQpICYmIChsZWFkaW5nID8gc2VuZCgpIDogc3RhcnRUaHJvdHRsZSh2YWx1ZSkpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICEodHJhaWxpbmcgJiYgaGFzVmFsdWUgJiYgdGhyb3R0bGVkICYmICF0aHJvdHRsZWQuY2xvc2VkKSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMudGhyb3R0bGUgPSB0aHJvdHRsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRocm90dGxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50aHJvdHRsZVRpbWUgPSB2b2lkIDA7XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoXCIuLi9zY2hlZHVsZXIvYXN5bmNcIik7XG52YXIgdGhyb3R0bGVfMSA9IHJlcXVpcmUoXCIuL3Rocm90dGxlXCIpO1xudmFyIHRpbWVyXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS90aW1lclwiKTtcbmZ1bmN0aW9uIHRocm90dGxlVGltZShkdXJhdGlvbiwgc2NoZWR1bGVyLCBjb25maWcpIHtcbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsgc2NoZWR1bGVyID0gYXN5bmNfMS5hc3luY1NjaGVkdWxlcjsgfVxuICAgIHZhciBkdXJhdGlvbiQgPSB0aW1lcl8xLnRpbWVyKGR1cmF0aW9uLCBzY2hlZHVsZXIpO1xuICAgIHJldHVybiB0aHJvdHRsZV8xLnRocm90dGxlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGR1cmF0aW9uJDsgfSwgY29uZmlnKTtcbn1cbmV4cG9ydHMudGhyb3R0bGVUaW1lID0gdGhyb3R0bGVUaW1lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhyb3R0bGVUaW1lLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5UaW1lSW50ZXJ2YWwgPSBleHBvcnRzLnRpbWVJbnRlcnZhbCA9IHZvaWQgMDtcbnZhciBhc3luY18xID0gcmVxdWlyZShcIi4uL3NjaGVkdWxlci9hc3luY1wiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gdGltZUludGVydmFsKHNjaGVkdWxlcikge1xuICAgIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkgeyBzY2hlZHVsZXIgPSBhc3luY18xLmFzeW5jU2NoZWR1bGVyOyB9XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGxhc3QgPSBzY2hlZHVsZXIubm93KCk7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIG5vdyA9IHNjaGVkdWxlci5ub3coKTtcbiAgICAgICAgICAgIHZhciBpbnRlcnZhbCA9IG5vdyAtIGxhc3Q7XG4gICAgICAgICAgICBsYXN0ID0gbm93O1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KG5ldyBUaW1lSW50ZXJ2YWwodmFsdWUsIGludGVydmFsKSk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMudGltZUludGVydmFsID0gdGltZUludGVydmFsO1xudmFyIFRpbWVJbnRlcnZhbCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVGltZUludGVydmFsKHZhbHVlLCBpbnRlcnZhbCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBpbnRlcnZhbDtcbiAgICB9XG4gICAgcmV0dXJuIFRpbWVJbnRlcnZhbDtcbn0oKSk7XG5leHBvcnRzLlRpbWVJbnRlcnZhbCA9IFRpbWVJbnRlcnZhbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVJbnRlcnZhbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudGltZW91dFdpdGggPSB2b2lkIDA7XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoXCIuLi9zY2hlZHVsZXIvYXN5bmNcIik7XG52YXIgaXNEYXRlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc0RhdGVcIik7XG52YXIgdGltZW91dF8xID0gcmVxdWlyZShcIi4vdGltZW91dFwiKTtcbmZ1bmN0aW9uIHRpbWVvdXRXaXRoKGR1ZSwgd2l0aE9ic2VydmFibGUsIHNjaGVkdWxlcikge1xuICAgIHZhciBmaXJzdDtcbiAgICB2YXIgZWFjaDtcbiAgICB2YXIgX3dpdGg7XG4gICAgc2NoZWR1bGVyID0gc2NoZWR1bGVyICE9PSBudWxsICYmIHNjaGVkdWxlciAhPT0gdm9pZCAwID8gc2NoZWR1bGVyIDogYXN5bmNfMS5hc3luYztcbiAgICBpZiAoaXNEYXRlXzEuaXNWYWxpZERhdGUoZHVlKSkge1xuICAgICAgICBmaXJzdCA9IGR1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGR1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgZWFjaCA9IGR1ZTtcbiAgICB9XG4gICAgaWYgKHdpdGhPYnNlcnZhYmxlKSB7XG4gICAgICAgIF93aXRoID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gd2l0aE9ic2VydmFibGU7IH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBvYnNlcnZhYmxlIHByb3ZpZGVkIHRvIHN3aXRjaCB0bycpO1xuICAgIH1cbiAgICBpZiAoZmlyc3QgPT0gbnVsbCAmJiBlYWNoID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdGltZW91dCBwcm92aWRlZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRpbWVvdXRfMS50aW1lb3V0KHtcbiAgICAgICAgZmlyc3Q6IGZpcnN0LFxuICAgICAgICBlYWNoOiBlYWNoLFxuICAgICAgICBzY2hlZHVsZXI6IHNjaGVkdWxlcixcbiAgICAgICAgd2l0aDogX3dpdGgsXG4gICAgfSk7XG59XG5leHBvcnRzLnRpbWVvdXRXaXRoID0gdGltZW91dFdpdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aW1lb3V0V2l0aC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudGltZXN0YW1wID0gdm9pZCAwO1xudmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlcl8xID0gcmVxdWlyZShcIi4uL3NjaGVkdWxlci9kYXRlVGltZXN0YW1wUHJvdmlkZXJcIik7XG52YXIgbWFwXzEgPSByZXF1aXJlKFwiLi9tYXBcIik7XG5mdW5jdGlvbiB0aW1lc3RhbXAodGltZXN0YW1wUHJvdmlkZXIpIHtcbiAgICBpZiAodGltZXN0YW1wUHJvdmlkZXIgPT09IHZvaWQgMCkgeyB0aW1lc3RhbXBQcm92aWRlciA9IGRhdGVUaW1lc3RhbXBQcm92aWRlcl8xLmRhdGVUaW1lc3RhbXBQcm92aWRlcjsgfVxuICAgIHJldHVybiBtYXBfMS5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiAoeyB2YWx1ZTogdmFsdWUsIHRpbWVzdGFtcDogdGltZXN0YW1wUHJvdmlkZXIubm93KCkgfSk7IH0pO1xufVxuZXhwb3J0cy50aW1lc3RhbXAgPSB0aW1lc3RhbXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aW1lc3RhbXAuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLndpbmRvdyA9IHZvaWQgMDtcbnZhciBTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi4vU3ViamVjdFwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xudmFyIG5vb3BfMSA9IHJlcXVpcmUoXCIuLi91dGlsL25vb3BcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG5mdW5jdGlvbiB3aW5kb3cod2luZG93Qm91bmRhcmllcykge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciB3aW5kb3dTdWJqZWN0ID0gbmV3IFN1YmplY3RfMS5TdWJqZWN0KCk7XG4gICAgICAgIHN1YnNjcmliZXIubmV4dCh3aW5kb3dTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpKTtcbiAgICAgICAgdmFyIGVycm9ySGFuZGxlciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHdpbmRvd1N1YmplY3QuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgfTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB3aW5kb3dTdWJqZWN0ID09PSBudWxsIHx8IHdpbmRvd1N1YmplY3QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpbmRvd1N1YmplY3QubmV4dCh2YWx1ZSk7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvd1N1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSwgZXJyb3JIYW5kbGVyKSk7XG4gICAgICAgIGlubmVyRnJvbV8xLmlubmVyRnJvbSh3aW5kb3dCb3VuZGFyaWVzKS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvd1N1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgod2luZG93U3ViamVjdCA9IG5ldyBTdWJqZWN0XzEuU3ViamVjdCgpKSk7XG4gICAgICAgIH0sIG5vb3BfMS5ub29wLCBlcnJvckhhbmRsZXIpKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvd1N1YmplY3QgPT09IG51bGwgfHwgd2luZG93U3ViamVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2luZG93U3ViamVjdC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgd2luZG93U3ViamVjdCA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLndpbmRvdyA9IHdpbmRvdztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdpbmRvdy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3ZhbHVlcyA9ICh0aGlzICYmIHRoaXMuX192YWx1ZXMpIHx8IGZ1bmN0aW9uKG8pIHtcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMud2luZG93Q291bnQgPSB2b2lkIDA7XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZShcIi4uL1N1YmplY3RcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIHdpbmRvd0NvdW50KHdpbmRvd1NpemUsIHN0YXJ0V2luZG93RXZlcnkpIHtcbiAgICBpZiAoc3RhcnRXaW5kb3dFdmVyeSA9PT0gdm9pZCAwKSB7IHN0YXJ0V2luZG93RXZlcnkgPSAwOyB9XG4gICAgdmFyIHN0YXJ0RXZlcnkgPSBzdGFydFdpbmRvd0V2ZXJ5ID4gMCA/IHN0YXJ0V2luZG93RXZlcnkgOiB3aW5kb3dTaXplO1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciB3aW5kb3dzID0gW25ldyBTdWJqZWN0XzEuU3ViamVjdCgpXTtcbiAgICAgICAgdmFyIHN0YXJ0cyA9IFtdO1xuICAgICAgICB2YXIgY291bnQgPSAwO1xuICAgICAgICBzdWJzY3JpYmVyLm5leHQod2luZG93c1swXS5hc09ic2VydmFibGUoKSk7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHdpbmRvd3NfMSA9IF9fdmFsdWVzKHdpbmRvd3MpLCB3aW5kb3dzXzFfMSA9IHdpbmRvd3NfMS5uZXh0KCk7ICF3aW5kb3dzXzFfMS5kb25lOyB3aW5kb3dzXzFfMSA9IHdpbmRvd3NfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHdpbmRvd18xID0gd2luZG93c18xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvd18xLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93c18xXzEgJiYgIXdpbmRvd3NfMV8xLmRvbmUgJiYgKF9hID0gd2luZG93c18xLnJldHVybikpIF9hLmNhbGwod2luZG93c18xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGMgPSBjb3VudCAtIHdpbmRvd1NpemUgKyAxO1xuICAgICAgICAgICAgaWYgKGMgPj0gMCAmJiBjICUgc3RhcnRFdmVyeSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHdpbmRvd3Muc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCsrY291bnQgJSBzdGFydEV2ZXJ5ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIHdpbmRvd18yID0gbmV3IFN1YmplY3RfMS5TdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgd2luZG93cy5wdXNoKHdpbmRvd18yKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQod2luZG93XzIuYXNPYnNlcnZhYmxlKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aGlsZSAod2luZG93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgd2luZG93cy5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHdoaWxlICh3aW5kb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB3aW5kb3dzLnNoaWZ0KCkuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3RhcnRzID0gbnVsbDtcbiAgICAgICAgICAgIHdpbmRvd3MgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG5leHBvcnRzLndpbmRvd0NvdW50ID0gd2luZG93Q291bnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD13aW5kb3dDb3VudC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMud2luZG93VGltZSA9IHZvaWQgMDtcbnZhciBTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi4vU3ViamVjdFwiKTtcbnZhciBhc3luY18xID0gcmVxdWlyZShcIi4uL3NjaGVkdWxlci9hc3luY1wiKTtcbnZhciBTdWJzY3JpcHRpb25fMSA9IHJlcXVpcmUoXCIuLi9TdWJzY3JpcHRpb25cIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBhcnJSZW1vdmVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyclJlbW92ZVwiKTtcbnZhciBhcmdzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcmdzXCIpO1xudmFyIGV4ZWN1dGVTY2hlZHVsZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvZXhlY3V0ZVNjaGVkdWxlXCIpO1xuZnVuY3Rpb24gd2luZG93VGltZSh3aW5kb3dUaW1lU3Bhbikge1xuICAgIHZhciBfYSwgX2I7XG4gICAgdmFyIG90aGVyQXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIG90aGVyQXJnc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIHNjaGVkdWxlciA9IChfYSA9IGFyZ3NfMS5wb3BTY2hlZHVsZXIob3RoZXJBcmdzKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogYXN5bmNfMS5hc3luY1NjaGVkdWxlcjtcbiAgICB2YXIgd2luZG93Q3JlYXRpb25JbnRlcnZhbCA9IChfYiA9IG90aGVyQXJnc1swXSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogbnVsbDtcbiAgICB2YXIgbWF4V2luZG93U2l6ZSA9IG90aGVyQXJnc1sxXSB8fCBJbmZpbml0eTtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgd2luZG93UmVjb3JkcyA9IFtdO1xuICAgICAgICB2YXIgcmVzdGFydE9uQ2xvc2UgPSBmYWxzZTtcbiAgICAgICAgdmFyIGNsb3NlV2luZG93ID0gZnVuY3Rpb24gKHJlY29yZCkge1xuICAgICAgICAgICAgdmFyIHdpbmRvdyA9IHJlY29yZC53aW5kb3csIHN1YnMgPSByZWNvcmQuc3VicztcbiAgICAgICAgICAgIHdpbmRvdy5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgc3Vicy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgYXJyUmVtb3ZlXzEuYXJyUmVtb3ZlKHdpbmRvd1JlY29yZHMsIHJlY29yZCk7XG4gICAgICAgICAgICByZXN0YXJ0T25DbG9zZSAmJiBzdGFydFdpbmRvdygpO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgc3RhcnRXaW5kb3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAod2luZG93UmVjb3Jkcykge1xuICAgICAgICAgICAgICAgIHZhciBzdWJzID0gbmV3IFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKHN1YnMpO1xuICAgICAgICAgICAgICAgIHZhciB3aW5kb3dfMSA9IG5ldyBTdWJqZWN0XzEuU3ViamVjdCgpO1xuICAgICAgICAgICAgICAgIHZhciByZWNvcmRfMSA9IHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93OiB3aW5kb3dfMSxcbiAgICAgICAgICAgICAgICAgICAgc3Viczogc3VicyxcbiAgICAgICAgICAgICAgICAgICAgc2VlbjogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHdpbmRvd1JlY29yZHMucHVzaChyZWNvcmRfMSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHdpbmRvd18xLmFzT2JzZXJ2YWJsZSgpKTtcbiAgICAgICAgICAgICAgICBleGVjdXRlU2NoZWR1bGVfMS5leGVjdXRlU2NoZWR1bGUoc3Vicywgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7IHJldHVybiBjbG9zZVdpbmRvdyhyZWNvcmRfMSk7IH0sIHdpbmRvd1RpbWVTcGFuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHdpbmRvd0NyZWF0aW9uSW50ZXJ2YWwgIT09IG51bGwgJiYgd2luZG93Q3JlYXRpb25JbnRlcnZhbCA+PSAwKSB7XG4gICAgICAgICAgICBleGVjdXRlU2NoZWR1bGVfMS5leGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBzdGFydFdpbmRvdywgd2luZG93Q3JlYXRpb25JbnRlcnZhbCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN0YXJ0T25DbG9zZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnRXaW5kb3coKTtcbiAgICAgICAgdmFyIGxvb3AgPSBmdW5jdGlvbiAoY2IpIHsgcmV0dXJuIHdpbmRvd1JlY29yZHMuc2xpY2UoKS5mb3JFYWNoKGNiKTsgfTtcbiAgICAgICAgdmFyIHRlcm1pbmF0ZSA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgbG9vcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICB2YXIgd2luZG93ID0gX2Eud2luZG93O1xuICAgICAgICAgICAgICAgIHJldHVybiBjYih3aW5kb3cpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjYihzdWJzY3JpYmVyKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBsb29wKGZ1bmN0aW9uIChyZWNvcmQpIHtcbiAgICAgICAgICAgICAgICByZWNvcmQud2luZG93Lm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIG1heFdpbmRvd1NpemUgPD0gKytyZWNvcmQuc2VlbiAmJiBjbG9zZVdpbmRvdyhyZWNvcmQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRlcm1pbmF0ZShmdW5jdGlvbiAoY29uc3VtZXIpIHsgcmV0dXJuIGNvbnN1bWVyLmNvbXBsZXRlKCk7IH0pOyB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiB0ZXJtaW5hdGUoZnVuY3Rpb24gKGNvbnN1bWVyKSB7IHJldHVybiBjb25zdW1lci5lcnJvcihlcnIpOyB9KTsgfSkpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2luZG93UmVjb3JkcyA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLndpbmRvd1RpbWUgPSB3aW5kb3dUaW1lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2luZG93VGltZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3ZhbHVlcyA9ICh0aGlzICYmIHRoaXMuX192YWx1ZXMpIHx8IGZ1bmN0aW9uKG8pIHtcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMud2luZG93VG9nZ2xlID0gdm9pZCAwO1xudmFyIFN1YmplY3RfMSA9IHJlcXVpcmUoXCIuLi9TdWJqZWN0XCIpO1xudmFyIFN1YnNjcmlwdGlvbl8xID0gcmVxdWlyZShcIi4uL1N1YnNjcmlwdGlvblwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xudmFyIG5vb3BfMSA9IHJlcXVpcmUoXCIuLi91dGlsL25vb3BcIik7XG52YXIgYXJyUmVtb3ZlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcnJSZW1vdmVcIik7XG5mdW5jdGlvbiB3aW5kb3dUb2dnbGUob3BlbmluZ3MsIGNsb3NpbmdTZWxlY3Rvcikge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciB3aW5kb3dzID0gW107XG4gICAgICAgIHZhciBoYW5kbGVFcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHdoaWxlICgwIDwgd2luZG93cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3dzLnNoaWZ0KCkuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgfTtcbiAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKG9wZW5pbmdzKS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uIChvcGVuVmFsdWUpIHtcbiAgICAgICAgICAgIHZhciB3aW5kb3cgPSBuZXcgU3ViamVjdF8xLlN1YmplY3QoKTtcbiAgICAgICAgICAgIHdpbmRvd3MucHVzaCh3aW5kb3cpO1xuICAgICAgICAgICAgdmFyIGNsb3NpbmdTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uXzEuU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICB2YXIgY2xvc2VXaW5kb3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgYXJyUmVtb3ZlXzEuYXJyUmVtb3ZlKHdpbmRvd3MsIHdpbmRvdyk7XG4gICAgICAgICAgICAgICAgd2luZG93LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgY2xvc2luZ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciBjbG9zaW5nTm90aWZpZXI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNsb3NpbmdOb3RpZmllciA9IGlubmVyRnJvbV8xLmlubmVyRnJvbShjbG9zaW5nU2VsZWN0b3Iob3BlblZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQod2luZG93LmFzT2JzZXJ2YWJsZSgpKTtcbiAgICAgICAgICAgIGNsb3NpbmdTdWJzY3JpcHRpb24uYWRkKGNsb3NpbmdOb3RpZmllci5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGNsb3NlV2luZG93LCBub29wXzEubm9vcCwgaGFuZGxlRXJyb3IpKSk7XG4gICAgICAgIH0sIG5vb3BfMS5ub29wKSk7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICB2YXIgd2luZG93c0NvcHkgPSB3aW5kb3dzLnNsaWNlKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHdpbmRvd3NDb3B5XzEgPSBfX3ZhbHVlcyh3aW5kb3dzQ29weSksIHdpbmRvd3NDb3B5XzFfMSA9IHdpbmRvd3NDb3B5XzEubmV4dCgpOyAhd2luZG93c0NvcHlfMV8xLmRvbmU7IHdpbmRvd3NDb3B5XzFfMSA9IHdpbmRvd3NDb3B5XzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB3aW5kb3dfMSA9IHdpbmRvd3NDb3B5XzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93XzEubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3dzQ29weV8xXzEgJiYgIXdpbmRvd3NDb3B5XzFfMS5kb25lICYmIChfYSA9IHdpbmRvd3NDb3B5XzEucmV0dXJuKSkgX2EuY2FsbCh3aW5kb3dzQ29weV8xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aGlsZSAoMCA8IHdpbmRvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgd2luZG93cy5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0sIGhhbmRsZUVycm9yLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aGlsZSAoMCA8IHdpbmRvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgd2luZG93cy5zaGlmdCgpLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMud2luZG93VG9nZ2xlID0gd2luZG93VG9nZ2xlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2luZG93VG9nZ2xlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy53aW5kb3dXaGVuID0gdm9pZCAwO1xudmFyIFN1YmplY3RfMSA9IHJlcXVpcmUoXCIuLi9TdWJqZWN0XCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG5mdW5jdGlvbiB3aW5kb3dXaGVuKGNsb3NpbmdTZWxlY3Rvcikge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciB3aW5kb3c7XG4gICAgICAgIHZhciBjbG9zaW5nU3Vic2NyaWJlcjtcbiAgICAgICAgdmFyIGhhbmRsZUVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgd2luZG93LmVycm9yKGVycik7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvcGVuV2luZG93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2xvc2luZ1N1YnNjcmliZXIgPT09IG51bGwgfHwgY2xvc2luZ1N1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsb3NpbmdTdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB3aW5kb3cgPT09IG51bGwgfHwgd2luZG93ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3aW5kb3cuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHdpbmRvdyA9IG5ldyBTdWJqZWN0XzEuU3ViamVjdCgpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHdpbmRvdy5hc09ic2VydmFibGUoKSk7XG4gICAgICAgICAgICB2YXIgY2xvc2luZ05vdGlmaWVyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjbG9zaW5nTm90aWZpZXIgPSBpbm5lckZyb21fMS5pbm5lckZyb20oY2xvc2luZ1NlbGVjdG9yKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2xvc2luZ05vdGlmaWVyLnN1YnNjcmliZSgoY2xvc2luZ1N1YnNjcmliZXIgPSBPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgb3BlbldpbmRvdywgb3BlbldpbmRvdywgaGFuZGxlRXJyb3IpKSk7XG4gICAgICAgIH07XG4gICAgICAgIG9wZW5XaW5kb3coKTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB3aW5kb3cubmV4dCh2YWx1ZSk7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9LCBoYW5kbGVFcnJvciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2xvc2luZ1N1YnNjcmliZXIgPT09IG51bGwgfHwgY2xvc2luZ1N1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsb3NpbmdTdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB3aW5kb3cgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG5leHBvcnRzLndpbmRvd1doZW4gPSB3aW5kb3dXaGVuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2luZG93V2hlbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLndpdGhMYXRlc3RGcm9tID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lkZW50aXR5XCIpO1xudmFyIG5vb3BfMSA9IHJlcXVpcmUoXCIuLi91dGlsL25vb3BcIik7XG52YXIgYXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc1wiKTtcbmZ1bmN0aW9uIHdpdGhMYXRlc3RGcm9tKCkge1xuICAgIHZhciBpbnB1dHMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBpbnB1dHNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIHByb2plY3QgPSBhcmdzXzEucG9wUmVzdWx0U2VsZWN0b3IoaW5wdXRzKTtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgbGVuID0gaW5wdXRzLmxlbmd0aDtcbiAgICAgICAgdmFyIG90aGVyVmFsdWVzID0gbmV3IEFycmF5KGxlbik7XG4gICAgICAgIHZhciBoYXNWYWx1ZSA9IGlucHV0cy5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH0pO1xuICAgICAgICB2YXIgcmVhZHkgPSBmYWxzZTtcbiAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKGlucHV0c1tpXSkuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBvdGhlclZhbHVlc1tpXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICghcmVhZHkgJiYgIWhhc1ZhbHVlW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc1ZhbHVlW2ldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgKHJlYWR5ID0gaGFzVmFsdWUuZXZlcnkoaWRlbnRpdHlfMS5pZGVudGl0eSkpICYmIChoYXNWYWx1ZSA9IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIG5vb3BfMS5ub29wKSk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIF9sb29wXzEoaSk7XG4gICAgICAgIH1cbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAocmVhZHkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gX19zcHJlYWRBcnJheShbdmFsdWVdLCBfX3JlYWQob3RoZXJWYWx1ZXMpKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQocHJvamVjdCA/IHByb2plY3QuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQodmFsdWVzKSkpIDogdmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy53aXRoTGF0ZXN0RnJvbSA9IHdpdGhMYXRlc3RGcm9tO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2l0aExhdGVzdEZyb20uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnppcEFsbCA9IHZvaWQgMDtcbnZhciB6aXBfMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL3ppcFwiKTtcbnZhciBqb2luQWxsSW50ZXJuYWxzXzEgPSByZXF1aXJlKFwiLi9qb2luQWxsSW50ZXJuYWxzXCIpO1xuZnVuY3Rpb24gemlwQWxsKHByb2plY3QpIHtcbiAgICByZXR1cm4gam9pbkFsbEludGVybmFsc18xLmpvaW5BbGxJbnRlcm5hbHMoemlwXzEuemlwLCBwcm9qZWN0KTtcbn1cbmV4cG9ydHMuemlwQWxsID0gemlwQWxsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9emlwQWxsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxuICAgICAgICB0b1tqXSA9IGZyb21baV07XG4gICAgcmV0dXJuIHRvO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuemlwID0gdm9pZCAwO1xudmFyIHppcF8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvemlwXCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG5mdW5jdGlvbiB6aXAoKSB7XG4gICAgdmFyIHNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBzb3VyY2VzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHppcF8xLnppcC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW3NvdXJjZV0sIF9fcmVhZChzb3VyY2VzKSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuemlwID0gemlwO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9emlwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxuICAgICAgICB0b1tqXSA9IGZyb21baV07XG4gICAgcmV0dXJuIHRvO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuemlwV2l0aCA9IHZvaWQgMDtcbnZhciB6aXBfMSA9IHJlcXVpcmUoXCIuL3ppcFwiKTtcbmZ1bmN0aW9uIHppcFdpdGgoKSB7XG4gICAgdmFyIG90aGVySW5wdXRzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgb3RoZXJJbnB1dHNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIHppcF8xLnppcC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChvdGhlcklucHV0cykpKTtcbn1cbmV4cG9ydHMuemlwV2l0aCA9IHppcFdpdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD16aXBXaXRoLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmludGVydmFsID0gZXhwb3J0cy5paWYgPSBleHBvcnRzLmdlbmVyYXRlID0gZXhwb3J0cy5mcm9tRXZlbnRQYXR0ZXJuID0gZXhwb3J0cy5mcm9tRXZlbnQgPSBleHBvcnRzLmZyb20gPSBleHBvcnRzLmZvcmtKb2luID0gZXhwb3J0cy5lbXB0eSA9IGV4cG9ydHMuZGVmZXIgPSBleHBvcnRzLmNvbm5lY3RhYmxlID0gZXhwb3J0cy5jb25jYXQgPSBleHBvcnRzLmNvbWJpbmVMYXRlc3QgPSBleHBvcnRzLmJpbmROb2RlQ2FsbGJhY2sgPSBleHBvcnRzLmJpbmRDYWxsYmFjayA9IGV4cG9ydHMuVW5zdWJzY3JpcHRpb25FcnJvciA9IGV4cG9ydHMuVGltZW91dEVycm9yID0gZXhwb3J0cy5TZXF1ZW5jZUVycm9yID0gZXhwb3J0cy5PYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IGV4cG9ydHMuTm90Rm91bmRFcnJvciA9IGV4cG9ydHMuRW1wdHlFcnJvciA9IGV4cG9ydHMuQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IgPSBleHBvcnRzLmZpcnN0VmFsdWVGcm9tID0gZXhwb3J0cy5sYXN0VmFsdWVGcm9tID0gZXhwb3J0cy5pc09ic2VydmFibGUgPSBleHBvcnRzLmlkZW50aXR5ID0gZXhwb3J0cy5ub29wID0gZXhwb3J0cy5waXBlID0gZXhwb3J0cy5Ob3RpZmljYXRpb25LaW5kID0gZXhwb3J0cy5Ob3RpZmljYXRpb24gPSBleHBvcnRzLlN1YnNjcmliZXIgPSBleHBvcnRzLlN1YnNjcmlwdGlvbiA9IGV4cG9ydHMuU2NoZWR1bGVyID0gZXhwb3J0cy5WaXJ0dWFsQWN0aW9uID0gZXhwb3J0cy5WaXJ0dWFsVGltZVNjaGVkdWxlciA9IGV4cG9ydHMuYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgPSBleHBvcnRzLmFuaW1hdGlvbkZyYW1lID0gZXhwb3J0cy5xdWV1ZVNjaGVkdWxlciA9IGV4cG9ydHMucXVldWUgPSBleHBvcnRzLmFzeW5jU2NoZWR1bGVyID0gZXhwb3J0cy5hc3luYyA9IGV4cG9ydHMuYXNhcFNjaGVkdWxlciA9IGV4cG9ydHMuYXNhcCA9IGV4cG9ydHMuQXN5bmNTdWJqZWN0ID0gZXhwb3J0cy5SZXBsYXlTdWJqZWN0ID0gZXhwb3J0cy5CZWhhdmlvclN1YmplY3QgPSBleHBvcnRzLlN1YmplY3QgPSBleHBvcnRzLmFuaW1hdGlvbkZyYW1lcyA9IGV4cG9ydHMub2JzZXJ2YWJsZSA9IGV4cG9ydHMuQ29ubmVjdGFibGVPYnNlcnZhYmxlID0gZXhwb3J0cy5PYnNlcnZhYmxlID0gdm9pZCAwO1xuZXhwb3J0cy5maWx0ZXIgPSBleHBvcnRzLmV4cGFuZCA9IGV4cG9ydHMuZXhoYXVzdE1hcCA9IGV4cG9ydHMuZXhoYXVzdEFsbCA9IGV4cG9ydHMuZXhoYXVzdCA9IGV4cG9ydHMuZXZlcnkgPSBleHBvcnRzLmVuZFdpdGggPSBleHBvcnRzLmVsZW1lbnRBdCA9IGV4cG9ydHMuZGlzdGluY3RVbnRpbEtleUNoYW5nZWQgPSBleHBvcnRzLmRpc3RpbmN0VW50aWxDaGFuZ2VkID0gZXhwb3J0cy5kaXN0aW5jdCA9IGV4cG9ydHMuZGVtYXRlcmlhbGl6ZSA9IGV4cG9ydHMuZGVsYXlXaGVuID0gZXhwb3J0cy5kZWxheSA9IGV4cG9ydHMuZGVmYXVsdElmRW1wdHkgPSBleHBvcnRzLmRlYm91bmNlVGltZSA9IGV4cG9ydHMuZGVib3VuY2UgPSBleHBvcnRzLmNvdW50ID0gZXhwb3J0cy5jb25uZWN0ID0gZXhwb3J0cy5jb25jYXRXaXRoID0gZXhwb3J0cy5jb25jYXRNYXBUbyA9IGV4cG9ydHMuY29uY2F0TWFwID0gZXhwb3J0cy5jb25jYXRBbGwgPSBleHBvcnRzLmNvbWJpbmVMYXRlc3RXaXRoID0gZXhwb3J0cy5jb21iaW5lTGF0ZXN0QWxsID0gZXhwb3J0cy5jb21iaW5lQWxsID0gZXhwb3J0cy5jYXRjaEVycm9yID0gZXhwb3J0cy5idWZmZXJXaGVuID0gZXhwb3J0cy5idWZmZXJUb2dnbGUgPSBleHBvcnRzLmJ1ZmZlclRpbWUgPSBleHBvcnRzLmJ1ZmZlckNvdW50ID0gZXhwb3J0cy5idWZmZXIgPSBleHBvcnRzLmF1ZGl0VGltZSA9IGV4cG9ydHMuYXVkaXQgPSBleHBvcnRzLmNvbmZpZyA9IGV4cG9ydHMuTkVWRVIgPSBleHBvcnRzLkVNUFRZID0gZXhwb3J0cy5zY2hlZHVsZWQgPSBleHBvcnRzLnppcCA9IGV4cG9ydHMudXNpbmcgPSBleHBvcnRzLnRpbWVyID0gZXhwb3J0cy50aHJvd0Vycm9yID0gZXhwb3J0cy5yYW5nZSA9IGV4cG9ydHMucmFjZSA9IGV4cG9ydHMucGFydGl0aW9uID0gZXhwb3J0cy5wYWlycyA9IGV4cG9ydHMub25FcnJvclJlc3VtZU5leHQgPSBleHBvcnRzLm9mID0gZXhwb3J0cy5uZXZlciA9IGV4cG9ydHMubWVyZ2UgPSB2b2lkIDA7XG5leHBvcnRzLnN3aXRjaE1hcCA9IGV4cG9ydHMuc3dpdGNoQWxsID0gZXhwb3J0cy5zdWJzY3JpYmVPbiA9IGV4cG9ydHMuc3RhcnRXaXRoID0gZXhwb3J0cy5za2lwV2hpbGUgPSBleHBvcnRzLnNraXBVbnRpbCA9IGV4cG9ydHMuc2tpcExhc3QgPSBleHBvcnRzLnNraXAgPSBleHBvcnRzLnNpbmdsZSA9IGV4cG9ydHMuc2hhcmVSZXBsYXkgPSBleHBvcnRzLnNoYXJlID0gZXhwb3J0cy5zZXF1ZW5jZUVxdWFsID0gZXhwb3J0cy5zY2FuID0gZXhwb3J0cy5zYW1wbGVUaW1lID0gZXhwb3J0cy5zYW1wbGUgPSBleHBvcnRzLnJlZkNvdW50ID0gZXhwb3J0cy5yZXRyeVdoZW4gPSBleHBvcnRzLnJldHJ5ID0gZXhwb3J0cy5yZXBlYXRXaGVuID0gZXhwb3J0cy5yZXBlYXQgPSBleHBvcnRzLnJlZHVjZSA9IGV4cG9ydHMucmFjZVdpdGggPSBleHBvcnRzLnB1Ymxpc2hSZXBsYXkgPSBleHBvcnRzLnB1Ymxpc2hMYXN0ID0gZXhwb3J0cy5wdWJsaXNoQmVoYXZpb3IgPSBleHBvcnRzLnB1Ymxpc2ggPSBleHBvcnRzLnBsdWNrID0gZXhwb3J0cy5wYWlyd2lzZSA9IGV4cG9ydHMub25FcnJvclJlc3VtZU5leHRXaXRoID0gZXhwb3J0cy5vYnNlcnZlT24gPSBleHBvcnRzLm11bHRpY2FzdCA9IGV4cG9ydHMubWluID0gZXhwb3J0cy5tZXJnZVdpdGggPSBleHBvcnRzLm1lcmdlU2NhbiA9IGV4cG9ydHMubWVyZ2VNYXBUbyA9IGV4cG9ydHMubWVyZ2VNYXAgPSBleHBvcnRzLmZsYXRNYXAgPSBleHBvcnRzLm1lcmdlQWxsID0gZXhwb3J0cy5tYXggPSBleHBvcnRzLm1hdGVyaWFsaXplID0gZXhwb3J0cy5tYXBUbyA9IGV4cG9ydHMubWFwID0gZXhwb3J0cy5sYXN0ID0gZXhwb3J0cy5pc0VtcHR5ID0gZXhwb3J0cy5pZ25vcmVFbGVtZW50cyA9IGV4cG9ydHMuZ3JvdXBCeSA9IGV4cG9ydHMuZmlyc3QgPSBleHBvcnRzLmZpbmRJbmRleCA9IGV4cG9ydHMuZmluZCA9IGV4cG9ydHMuZmluYWxpemUgPSB2b2lkIDA7XG5leHBvcnRzLnppcFdpdGggPSBleHBvcnRzLnppcEFsbCA9IGV4cG9ydHMud2l0aExhdGVzdEZyb20gPSBleHBvcnRzLndpbmRvd1doZW4gPSBleHBvcnRzLndpbmRvd1RvZ2dsZSA9IGV4cG9ydHMud2luZG93VGltZSA9IGV4cG9ydHMud2luZG93Q291bnQgPSBleHBvcnRzLndpbmRvdyA9IGV4cG9ydHMudG9BcnJheSA9IGV4cG9ydHMudGltZXN0YW1wID0gZXhwb3J0cy50aW1lb3V0V2l0aCA9IGV4cG9ydHMudGltZW91dCA9IGV4cG9ydHMudGltZUludGVydmFsID0gZXhwb3J0cy50aHJvd0lmRW1wdHkgPSBleHBvcnRzLnRocm90dGxlVGltZSA9IGV4cG9ydHMudGhyb3R0bGUgPSBleHBvcnRzLnRhcCA9IGV4cG9ydHMudGFrZVdoaWxlID0gZXhwb3J0cy50YWtlVW50aWwgPSBleHBvcnRzLnRha2VMYXN0ID0gZXhwb3J0cy50YWtlID0gZXhwb3J0cy5zd2l0Y2hTY2FuID0gZXhwb3J0cy5zd2l0Y2hNYXBUbyA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9PYnNlcnZhYmxlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT2JzZXJ2YWJsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gT2JzZXJ2YWJsZV8xLk9ic2VydmFibGU7IH0gfSk7XG52YXIgQ29ubmVjdGFibGVPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL0Nvbm5lY3RhYmxlT2JzZXJ2YWJsZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbm5lY3RhYmxlT2JzZXJ2YWJsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQ29ubmVjdGFibGVPYnNlcnZhYmxlXzEuQ29ubmVjdGFibGVPYnNlcnZhYmxlOyB9IH0pO1xudmFyIG9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3N5bWJvbC9vYnNlcnZhYmxlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib2JzZXJ2YWJsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb2JzZXJ2YWJsZV8xLm9ic2VydmFibGU7IH0gfSk7XG52YXIgYW5pbWF0aW9uRnJhbWVzXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2RvbS9hbmltYXRpb25GcmFtZXNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhbmltYXRpb25GcmFtZXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFuaW1hdGlvbkZyYW1lc18xLmFuaW1hdGlvbkZyYW1lczsgfSB9KTtcbnZhciBTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9TdWJqZWN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU3ViamVjdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gU3ViamVjdF8xLlN1YmplY3Q7IH0gfSk7XG52YXIgQmVoYXZpb3JTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9CZWhhdmlvclN1YmplY3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCZWhhdmlvclN1YmplY3RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJlaGF2aW9yU3ViamVjdF8xLkJlaGF2aW9yU3ViamVjdDsgfSB9KTtcbnZhciBSZXBsYXlTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9SZXBsYXlTdWJqZWN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVwbGF5U3ViamVjdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUmVwbGF5U3ViamVjdF8xLlJlcGxheVN1YmplY3Q7IH0gfSk7XG52YXIgQXN5bmNTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9Bc3luY1N1YmplY3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBc3luY1N1YmplY3RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEFzeW5jU3ViamVjdF8xLkFzeW5jU3ViamVjdDsgfSB9KTtcbnZhciBhc2FwXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9zY2hlZHVsZXIvYXNhcFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzYXBcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzYXBfMS5hc2FwOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXNhcFNjaGVkdWxlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXNhcF8xLmFzYXBTY2hlZHVsZXI7IH0gfSk7XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3NjaGVkdWxlci9hc3luY1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzeW5jXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3luY18xLmFzeW5jOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXN5bmNTY2hlZHVsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzeW5jXzEuYXN5bmNTY2hlZHVsZXI7IH0gfSk7XG52YXIgcXVldWVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3NjaGVkdWxlci9xdWV1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInF1ZXVlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBxdWV1ZV8xLnF1ZXVlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicXVldWVTY2hlZHVsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHF1ZXVlXzEucXVldWVTY2hlZHVsZXI7IH0gfSk7XG52YXIgYW5pbWF0aW9uRnJhbWVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3NjaGVkdWxlci9hbmltYXRpb25GcmFtZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFuaW1hdGlvbkZyYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhbmltYXRpb25GcmFtZV8xLmFuaW1hdGlvbkZyYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFuaW1hdGlvbkZyYW1lXzEuYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXI7IH0gfSk7XG52YXIgVmlydHVhbFRpbWVTY2hlZHVsZXJfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3NjaGVkdWxlci9WaXJ0dWFsVGltZVNjaGVkdWxlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlZpcnR1YWxUaW1lU2NoZWR1bGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBWaXJ0dWFsVGltZVNjaGVkdWxlcl8xLlZpcnR1YWxUaW1lU2NoZWR1bGVyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVmlydHVhbEFjdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gVmlydHVhbFRpbWVTY2hlZHVsZXJfMS5WaXJ0dWFsQWN0aW9uOyB9IH0pO1xudmFyIFNjaGVkdWxlcl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvU2NoZWR1bGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2NoZWR1bGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTY2hlZHVsZXJfMS5TY2hlZHVsZXI7IH0gfSk7XG52YXIgU3Vic2NyaXB0aW9uXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9TdWJzY3JpcHRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTdWJzY3JpcHRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbjsgfSB9KTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9TdWJzY3JpYmVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU3Vic2NyaWJlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gU3Vic2NyaWJlcl8xLlN1YnNjcmliZXI7IH0gfSk7XG52YXIgTm90aWZpY2F0aW9uXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9Ob3RpZmljYXRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOb3RpZmljYXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5vdGlmaWNhdGlvbl8xLk5vdGlmaWNhdGlvbjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5vdGlmaWNhdGlvbktpbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5vdGlmaWNhdGlvbl8xLk5vdGlmaWNhdGlvbktpbmQ7IH0gfSk7XG52YXIgcGlwZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvdXRpbC9waXBlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGlwZV8xLnBpcGU7IH0gfSk7XG52YXIgbm9vcF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvdXRpbC9ub29wXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibm9vcFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9vcF8xLm5vb3A7IH0gfSk7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3V0aWwvaWRlbnRpdHlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpZGVudGl0eVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaWRlbnRpdHlfMS5pZGVudGl0eTsgfSB9KTtcbnZhciBpc09ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3V0aWwvaXNPYnNlcnZhYmxlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNPYnNlcnZhYmxlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpc09ic2VydmFibGVfMS5pc09ic2VydmFibGU7IH0gfSk7XG52YXIgbGFzdFZhbHVlRnJvbV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvbGFzdFZhbHVlRnJvbVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxhc3RWYWx1ZUZyb21cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxhc3RWYWx1ZUZyb21fMS5sYXN0VmFsdWVGcm9tOyB9IH0pO1xudmFyIGZpcnN0VmFsdWVGcm9tXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9maXJzdFZhbHVlRnJvbVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpcnN0VmFsdWVGcm9tXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBmaXJzdFZhbHVlRnJvbV8xLmZpcnN0VmFsdWVGcm9tOyB9IH0pO1xudmFyIEFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC91dGlsL0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yXzEuQXJndW1lbnRPdXRPZlJhbmdlRXJyb3I7IH0gfSk7XG52YXIgRW1wdHlFcnJvcl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvdXRpbC9FbXB0eUVycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRW1wdHlFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gRW1wdHlFcnJvcl8xLkVtcHR5RXJyb3I7IH0gfSk7XG52YXIgTm90Rm91bmRFcnJvcl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvdXRpbC9Ob3RGb3VuZEVycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTm90Rm91bmRFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTm90Rm91bmRFcnJvcl8xLk5vdEZvdW5kRXJyb3I7IH0gfSk7XG52YXIgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3V0aWwvT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPYmplY3RVbnN1YnNjcmliZWRFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JfMS5PYmplY3RVbnN1YnNjcmliZWRFcnJvcjsgfSB9KTtcbnZhciBTZXF1ZW5jZUVycm9yXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC91dGlsL1NlcXVlbmNlRXJyb3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTZXF1ZW5jZUVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTZXF1ZW5jZUVycm9yXzEuU2VxdWVuY2VFcnJvcjsgfSB9KTtcbnZhciB0aW1lb3V0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRpbWVvdXRFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGltZW91dF8xLlRpbWVvdXRFcnJvcjsgfSB9KTtcbnZhciBVbnN1YnNjcmlwdGlvbkVycm9yXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC91dGlsL1Vuc3Vic2NyaXB0aW9uRXJyb3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJVbnN1YnNjcmlwdGlvbkVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBVbnN1YnNjcmlwdGlvbkVycm9yXzEuVW5zdWJzY3JpcHRpb25FcnJvcjsgfSB9KTtcbnZhciBiaW5kQ2FsbGJhY2tfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvYmluZENhbGxiYWNrXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmluZENhbGxiYWNrXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiaW5kQ2FsbGJhY2tfMS5iaW5kQ2FsbGJhY2s7IH0gfSk7XG52YXIgYmluZE5vZGVDYWxsYmFja18xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9iaW5kTm9kZUNhbGxiYWNrXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmluZE5vZGVDYWxsYmFja1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYmluZE5vZGVDYWxsYmFja18xLmJpbmROb2RlQ2FsbGJhY2s7IH0gfSk7XG52YXIgY29tYmluZUxhdGVzdF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tYmluZUxhdGVzdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29tYmluZUxhdGVzdF8xLmNvbWJpbmVMYXRlc3Q7IH0gfSk7XG52YXIgY29uY2F0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2NvbmNhdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbmNhdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uY2F0XzEuY29uY2F0OyB9IH0pO1xudmFyIGNvbm5lY3RhYmxlXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2Nvbm5lY3RhYmxlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29ubmVjdGFibGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbm5lY3RhYmxlXzEuY29ubmVjdGFibGU7IH0gfSk7XG52YXIgZGVmZXJfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvZGVmZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVmZXJfMS5kZWZlcjsgfSB9KTtcbnZhciBlbXB0eV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9lbXB0eVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVtcHR5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlbXB0eV8xLmVtcHR5OyB9IH0pO1xudmFyIGZvcmtKb2luXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2ZvcmtKb2luXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZm9ya0pvaW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZvcmtKb2luXzEuZm9ya0pvaW47IH0gfSk7XG52YXIgZnJvbV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9mcm9tXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZnJvbVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZnJvbV8xLmZyb207IH0gfSk7XG52YXIgZnJvbUV2ZW50XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb21FdmVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZyb21FdmVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZnJvbUV2ZW50XzEuZnJvbUV2ZW50OyB9IH0pO1xudmFyIGZyb21FdmVudFBhdHRlcm5fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvZnJvbUV2ZW50UGF0dGVyblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZyb21FdmVudFBhdHRlcm5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZyb21FdmVudFBhdHRlcm5fMS5mcm9tRXZlbnRQYXR0ZXJuOyB9IH0pO1xudmFyIGdlbmVyYXRlXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2dlbmVyYXRlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2VuZXJhdGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdlbmVyYXRlXzEuZ2VuZXJhdGU7IH0gfSk7XG52YXIgaWlmXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2lpZlwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlpZlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaWlmXzEuaWlmOyB9IH0pO1xudmFyIGludGVydmFsXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2ludGVydmFsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW50ZXJ2YWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGludGVydmFsXzEuaW50ZXJ2YWw7IH0gfSk7XG52YXIgbWVyZ2VfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvbWVyZ2VcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWVyZ2VfMS5tZXJnZTsgfSB9KTtcbnZhciBuZXZlcl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9uZXZlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5ldmVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXZlcl8xLm5ldmVyOyB9IH0pO1xudmFyIG9mXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL29mXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib2ZcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9mXzEub2Y7IH0gfSk7XG52YXIgb25FcnJvclJlc3VtZU5leHRfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvb25FcnJvclJlc3VtZU5leHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvbkVycm9yUmVzdW1lTmV4dFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb25FcnJvclJlc3VtZU5leHRfMS5vbkVycm9yUmVzdW1lTmV4dDsgfSB9KTtcbnZhciBwYWlyc18xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9wYWlyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBhaXJzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwYWlyc18xLnBhaXJzOyB9IH0pO1xudmFyIHBhcnRpdGlvbl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9wYXJ0aXRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJ0aXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBhcnRpdGlvbl8xLnBhcnRpdGlvbjsgfSB9KTtcbnZhciByYWNlXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL3JhY2VcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyYWNlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByYWNlXzEucmFjZTsgfSB9KTtcbnZhciByYW5nZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9yYW5nZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJhbmdlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByYW5nZV8xLnJhbmdlOyB9IH0pO1xudmFyIHRocm93RXJyb3JfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvdGhyb3dFcnJvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRocm93RXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRocm93RXJyb3JfMS50aHJvd0Vycm9yOyB9IH0pO1xudmFyIHRpbWVyXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL3RpbWVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGltZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRpbWVyXzEudGltZXI7IH0gfSk7XG52YXIgdXNpbmdfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvdXNpbmdcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1c2luZ1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXNpbmdfMS51c2luZzsgfSB9KTtcbnZhciB6aXBfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvemlwXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiemlwXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB6aXBfMS56aXA7IH0gfSk7XG52YXIgc2NoZWR1bGVkXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVkXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2NoZWR1bGVkXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzY2hlZHVsZWRfMS5zY2hlZHVsZWQ7IH0gfSk7XG52YXIgZW1wdHlfMiA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvZW1wdHlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJFTVBUWVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZW1wdHlfMi5FTVBUWTsgfSB9KTtcbnZhciBuZXZlcl8yID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9uZXZlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5FVkVSXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXZlcl8yLk5FVkVSOyB9IH0pO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2ludGVybmFsL3R5cGVzXCIpLCBleHBvcnRzKTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL2NvbmZpZ1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbmZpZ1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uZmlnXzEuY29uZmlnOyB9IH0pO1xudmFyIGF1ZGl0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvYXVkaXRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdWRpdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXVkaXRfMS5hdWRpdDsgfSB9KTtcbnZhciBhdWRpdFRpbWVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9hdWRpdFRpbWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdWRpdFRpbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF1ZGl0VGltZV8xLmF1ZGl0VGltZTsgfSB9KTtcbnZhciBidWZmZXJfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJidWZmZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJ1ZmZlcl8xLmJ1ZmZlcjsgfSB9KTtcbnZhciBidWZmZXJDb3VudF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlckNvdW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYnVmZmVyQ291bnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJ1ZmZlckNvdW50XzEuYnVmZmVyQ291bnQ7IH0gfSk7XG52YXIgYnVmZmVyVGltZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlclRpbWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJidWZmZXJUaW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBidWZmZXJUaW1lXzEuYnVmZmVyVGltZTsgfSB9KTtcbnZhciBidWZmZXJUb2dnbGVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUb2dnbGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJidWZmZXJUb2dnbGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJ1ZmZlclRvZ2dsZV8xLmJ1ZmZlclRvZ2dsZTsgfSB9KTtcbnZhciBidWZmZXJXaGVuXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyV2hlblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJ1ZmZlcldoZW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJ1ZmZlcldoZW5fMS5idWZmZXJXaGVuOyB9IH0pO1xudmFyIGNhdGNoRXJyb3JfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9jYXRjaEVycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY2F0Y2hFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2F0Y2hFcnJvcl8xLmNhdGNoRXJyb3I7IH0gfSk7XG52YXIgY29tYmluZUFsbF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2NvbWJpbmVBbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21iaW5lQWxsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb21iaW5lQWxsXzEuY29tYmluZUFsbDsgfSB9KTtcbnZhciBjb21iaW5lTGF0ZXN0QWxsXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvY29tYmluZUxhdGVzdEFsbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbWJpbmVMYXRlc3RBbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbWJpbmVMYXRlc3RBbGxfMS5jb21iaW5lTGF0ZXN0QWxsOyB9IH0pO1xudmFyIGNvbWJpbmVMYXRlc3RXaXRoXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvY29tYmluZUxhdGVzdFdpdGhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21iaW5lTGF0ZXN0V2l0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29tYmluZUxhdGVzdFdpdGhfMS5jb21iaW5lTGF0ZXN0V2l0aDsgfSB9KTtcbnZhciBjb25jYXRBbGxfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRBbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25jYXRBbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmNhdEFsbF8xLmNvbmNhdEFsbDsgfSB9KTtcbnZhciBjb25jYXRNYXBfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRNYXBcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25jYXRNYXBcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmNhdE1hcF8xLmNvbmNhdE1hcDsgfSB9KTtcbnZhciBjb25jYXRNYXBUb18xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdE1hcFRvXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29uY2F0TWFwVG9cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmNhdE1hcFRvXzEuY29uY2F0TWFwVG87IH0gfSk7XG52YXIgY29uY2F0V2l0aF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdFdpdGhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25jYXRXaXRoXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25jYXRXaXRoXzEuY29uY2F0V2l0aDsgfSB9KTtcbnZhciBjb25uZWN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvY29ubmVjdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbm5lY3RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbm5lY3RfMS5jb25uZWN0OyB9IH0pO1xudmFyIGNvdW50XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvY291bnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb3VudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY291bnRfMS5jb3VudDsgfSB9KTtcbnZhciBkZWJvdW5jZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2RlYm91bmNlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVib3VuY2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlYm91bmNlXzEuZGVib3VuY2U7IH0gfSk7XG52YXIgZGVib3VuY2VUaW1lXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZGVib3VuY2VUaW1lXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVib3VuY2VUaW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWJvdW5jZVRpbWVfMS5kZWJvdW5jZVRpbWU7IH0gfSk7XG52YXIgZGVmYXVsdElmRW1wdHlfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9kZWZhdWx0SWZFbXB0eVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRJZkVtcHR5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWZhdWx0SWZFbXB0eV8xLmRlZmF1bHRJZkVtcHR5OyB9IH0pO1xudmFyIGRlbGF5XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZGVsYXlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWxheVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVsYXlfMS5kZWxheTsgfSB9KTtcbnZhciBkZWxheVdoZW5fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9kZWxheVdoZW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWxheVdoZW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlbGF5V2hlbl8xLmRlbGF5V2hlbjsgfSB9KTtcbnZhciBkZW1hdGVyaWFsaXplXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZGVtYXRlcmlhbGl6ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlbWF0ZXJpYWxpemVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlbWF0ZXJpYWxpemVfMS5kZW1hdGVyaWFsaXplOyB9IH0pO1xudmFyIGRpc3RpbmN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZGlzdGluY3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkaXN0aW5jdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGlzdGluY3RfMS5kaXN0aW5jdDsgfSB9KTtcbnZhciBkaXN0aW5jdFVudGlsQ2hhbmdlZF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2Rpc3RpbmN0VW50aWxDaGFuZ2VkXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGlzdGluY3RVbnRpbENoYW5nZWRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRpc3RpbmN0VW50aWxDaGFuZ2VkXzEuZGlzdGluY3RVbnRpbENoYW5nZWQ7IH0gfSk7XG52YXIgZGlzdGluY3RVbnRpbEtleUNoYW5nZWRfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkaXN0aW5jdFVudGlsS2V5Q2hhbmdlZF8xLmRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkOyB9IH0pO1xudmFyIGVsZW1lbnRBdF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2VsZW1lbnRBdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVsZW1lbnRBdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZWxlbWVudEF0XzEuZWxlbWVudEF0OyB9IH0pO1xudmFyIGVuZFdpdGhfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9lbmRXaXRoXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZW5kV2l0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZW5kV2l0aF8xLmVuZFdpdGg7IH0gfSk7XG52YXIgZXZlcnlfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9ldmVyeVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV2ZXJ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBldmVyeV8xLmV2ZXJ5OyB9IH0pO1xudmFyIGV4aGF1c3RfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXhoYXVzdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXhoYXVzdF8xLmV4aGF1c3Q7IH0gfSk7XG52YXIgZXhoYXVzdEFsbF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2V4aGF1c3RBbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJleGhhdXN0QWxsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBleGhhdXN0QWxsXzEuZXhoYXVzdEFsbDsgfSB9KTtcbnZhciBleGhhdXN0TWFwXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZXhoYXVzdE1hcFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV4aGF1c3RNYXBcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGV4aGF1c3RNYXBfMS5leGhhdXN0TWFwOyB9IH0pO1xudmFyIGV4cGFuZF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2V4cGFuZFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV4cGFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXhwYW5kXzEuZXhwYW5kOyB9IH0pO1xudmFyIGZpbHRlcl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbHRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbHRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmlsdGVyXzEuZmlsdGVyOyB9IH0pO1xudmFyIGZpbmFsaXplXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZmluYWxpemVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmaW5hbGl6ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmluYWxpemVfMS5maW5hbGl6ZTsgfSB9KTtcbnZhciBmaW5kXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZmluZFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZpbmRfMS5maW5kOyB9IH0pO1xudmFyIGZpbmRJbmRleF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmRJbmRleFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbmRJbmRleFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmluZEluZGV4XzEuZmluZEluZGV4OyB9IH0pO1xudmFyIGZpcnN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZmlyc3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmaXJzdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmlyc3RfMS5maXJzdDsgfSB9KTtcbnZhciBncm91cEJ5XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZ3JvdXBCeVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdyb3VwQnlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdyb3VwQnlfMS5ncm91cEJ5OyB9IH0pO1xudmFyIGlnbm9yZUVsZW1lbnRzXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvaWdub3JlRWxlbWVudHNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpZ25vcmVFbGVtZW50c1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaWdub3JlRWxlbWVudHNfMS5pZ25vcmVFbGVtZW50czsgfSB9KTtcbnZhciBpc0VtcHR5XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvaXNFbXB0eVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzRW1wdHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlzRW1wdHlfMS5pc0VtcHR5OyB9IH0pO1xudmFyIGxhc3RfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9sYXN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibGFzdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbGFzdF8xLmxhc3Q7IH0gfSk7XG52YXIgbWFwXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvbWFwXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWFwXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtYXBfMS5tYXA7IH0gfSk7XG52YXIgbWFwVG9fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9tYXBUb1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1hcFRvXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtYXBUb18xLm1hcFRvOyB9IH0pO1xudmFyIG1hdGVyaWFsaXplXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvbWF0ZXJpYWxpemVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYXRlcmlhbGl6ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWF0ZXJpYWxpemVfMS5tYXRlcmlhbGl6ZTsgfSB9KTtcbnZhciBtYXhfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9tYXhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYXhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1heF8xLm1heDsgfSB9KTtcbnZhciBtZXJnZUFsbF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlQWxsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWVyZ2VBbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1lcmdlQWxsXzEubWVyZ2VBbGw7IH0gfSk7XG52YXIgZmxhdE1hcF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2ZsYXRNYXBcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmbGF0TWFwXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBmbGF0TWFwXzEuZmxhdE1hcDsgfSB9KTtcbnZhciBtZXJnZU1hcF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlTWFwXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWVyZ2VNYXBcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1lcmdlTWFwXzEubWVyZ2VNYXA7IH0gfSk7XG52YXIgbWVyZ2VNYXBUb18xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlTWFwVG9cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZU1hcFRvXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXJnZU1hcFRvXzEubWVyZ2VNYXBUbzsgfSB9KTtcbnZhciBtZXJnZVNjYW5fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9tZXJnZVNjYW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZVNjYW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1lcmdlU2Nhbl8xLm1lcmdlU2NhbjsgfSB9KTtcbnZhciBtZXJnZVdpdGhfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9tZXJnZVdpdGhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZVdpdGhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1lcmdlV2l0aF8xLm1lcmdlV2l0aDsgfSB9KTtcbnZhciBtaW5fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9taW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtaW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1pbl8xLm1pbjsgfSB9KTtcbnZhciBtdWx0aWNhc3RfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9tdWx0aWNhc3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtdWx0aWNhc3RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG11bHRpY2FzdF8xLm11bHRpY2FzdDsgfSB9KTtcbnZhciBvYnNlcnZlT25fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9vYnNlcnZlT25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvYnNlcnZlT25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9ic2VydmVPbl8xLm9ic2VydmVPbjsgfSB9KTtcbnZhciBvbkVycm9yUmVzdW1lTmV4dFdpdGhfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9vbkVycm9yUmVzdW1lTmV4dFdpdGhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvbkVycm9yUmVzdW1lTmV4dFdpdGhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uRXJyb3JSZXN1bWVOZXh0V2l0aF8xLm9uRXJyb3JSZXN1bWVOZXh0V2l0aDsgfSB9KTtcbnZhciBwYWlyd2lzZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3BhaXJ3aXNlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGFpcndpc2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBhaXJ3aXNlXzEucGFpcndpc2U7IH0gfSk7XG52YXIgcGx1Y2tfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9wbHVja1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBsdWNrXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwbHVja18xLnBsdWNrOyB9IH0pO1xudmFyIHB1Ymxpc2hfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHVibGlzaFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHVibGlzaF8xLnB1Ymxpc2g7IH0gfSk7XG52YXIgcHVibGlzaEJlaGF2aW9yXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaEJlaGF2aW9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHVibGlzaEJlaGF2aW9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwdWJsaXNoQmVoYXZpb3JfMS5wdWJsaXNoQmVoYXZpb3I7IH0gfSk7XG52YXIgcHVibGlzaExhc3RfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoTGFzdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInB1Ymxpc2hMYXN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwdWJsaXNoTGFzdF8xLnB1Ymxpc2hMYXN0OyB9IH0pO1xudmFyIHB1Ymxpc2hSZXBsYXlfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoUmVwbGF5XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHVibGlzaFJlcGxheVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHVibGlzaFJlcGxheV8xLnB1Ymxpc2hSZXBsYXk7IH0gfSk7XG52YXIgcmFjZVdpdGhfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9yYWNlV2l0aFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJhY2VXaXRoXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByYWNlV2l0aF8xLnJhY2VXaXRoOyB9IH0pO1xudmFyIHJlZHVjZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3JlZHVjZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZHVjZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVkdWNlXzEucmVkdWNlOyB9IH0pO1xudmFyIHJlcGVhdF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3JlcGVhdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlcGVhdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVwZWF0XzEucmVwZWF0OyB9IH0pO1xudmFyIHJlcGVhdFdoZW5fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9yZXBlYXRXaGVuXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVwZWF0V2hlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVwZWF0V2hlbl8xLnJlcGVhdFdoZW47IH0gfSk7XG52YXIgcmV0cnlfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9yZXRyeVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJldHJ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXRyeV8xLnJldHJ5OyB9IH0pO1xudmFyIHJldHJ5V2hlbl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3JldHJ5V2hlblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJldHJ5V2hlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmV0cnlXaGVuXzEucmV0cnlXaGVuOyB9IH0pO1xudmFyIHJlZkNvdW50XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvcmVmQ291bnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWZDb3VudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmQ291bnRfMS5yZWZDb3VudDsgfSB9KTtcbnZhciBzYW1wbGVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9zYW1wbGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzYW1wbGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNhbXBsZV8xLnNhbXBsZTsgfSB9KTtcbnZhciBzYW1wbGVUaW1lXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvc2FtcGxlVGltZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNhbXBsZVRpbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNhbXBsZVRpbWVfMS5zYW1wbGVUaW1lOyB9IH0pO1xudmFyIHNjYW5fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9zY2FuXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2NhblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2Nhbl8xLnNjYW47IH0gfSk7XG52YXIgc2VxdWVuY2VFcXVhbF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3NlcXVlbmNlRXF1YWxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXF1ZW5jZUVxdWFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXF1ZW5jZUVxdWFsXzEuc2VxdWVuY2VFcXVhbDsgfSB9KTtcbnZhciBzaGFyZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3NoYXJlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2hhcmVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNoYXJlXzEuc2hhcmU7IH0gfSk7XG52YXIgc2hhcmVSZXBsYXlfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9zaGFyZVJlcGxheVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNoYXJlUmVwbGF5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzaGFyZVJlcGxheV8xLnNoYXJlUmVwbGF5OyB9IH0pO1xudmFyIHNpbmdsZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3NpbmdsZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNpbmdsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2luZ2xlXzEuc2luZ2xlOyB9IH0pO1xudmFyIHNraXBfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9za2lwXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2tpcFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2tpcF8xLnNraXA7IH0gfSk7XG52YXIgc2tpcExhc3RfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9za2lwTGFzdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNraXBMYXN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBza2lwTGFzdF8xLnNraXBMYXN0OyB9IH0pO1xudmFyIHNraXBVbnRpbF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBVbnRpbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNraXBVbnRpbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2tpcFVudGlsXzEuc2tpcFVudGlsOyB9IH0pO1xudmFyIHNraXBXaGlsZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBXaGlsZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNraXBXaGlsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2tpcFdoaWxlXzEuc2tpcFdoaWxlOyB9IH0pO1xudmFyIHN0YXJ0V2l0aF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3N0YXJ0V2l0aFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0YXJ0V2l0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RhcnRXaXRoXzEuc3RhcnRXaXRoOyB9IH0pO1xudmFyIHN1YnNjcmliZU9uXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvc3Vic2NyaWJlT25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdWJzY3JpYmVPblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3Vic2NyaWJlT25fMS5zdWJzY3JpYmVPbjsgfSB9KTtcbnZhciBzd2l0Y2hBbGxfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hBbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzd2l0Y2hBbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN3aXRjaEFsbF8xLnN3aXRjaEFsbDsgfSB9KTtcbnZhciBzd2l0Y2hNYXBfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hNYXBcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzd2l0Y2hNYXBcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN3aXRjaE1hcF8xLnN3aXRjaE1hcDsgfSB9KTtcbnZhciBzd2l0Y2hNYXBUb18xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaE1hcFRvXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3dpdGNoTWFwVG9cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN3aXRjaE1hcFRvXzEuc3dpdGNoTWFwVG87IH0gfSk7XG52YXIgc3dpdGNoU2Nhbl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaFNjYW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzd2l0Y2hTY2FuXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzd2l0Y2hTY2FuXzEuc3dpdGNoU2NhbjsgfSB9KTtcbnZhciB0YWtlXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRha2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRha2VfMS50YWtlOyB9IH0pO1xudmFyIHRha2VMYXN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZUxhc3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YWtlTGFzdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGFrZUxhc3RfMS50YWtlTGFzdDsgfSB9KTtcbnZhciB0YWtlVW50aWxfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy90YWtlVW50aWxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YWtlVW50aWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRha2VVbnRpbF8xLnRha2VVbnRpbDsgfSB9KTtcbnZhciB0YWtlV2hpbGVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy90YWtlV2hpbGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YWtlV2hpbGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRha2VXaGlsZV8xLnRha2VXaGlsZTsgfSB9KTtcbnZhciB0YXBfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy90YXBcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YXBcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRhcF8xLnRhcDsgfSB9KTtcbnZhciB0aHJvdHRsZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3Rocm90dGxlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGhyb3R0bGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRocm90dGxlXzEudGhyb3R0bGU7IH0gfSk7XG52YXIgdGhyb3R0bGVUaW1lXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3R0bGVUaW1lXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGhyb3R0bGVUaW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aHJvdHRsZVRpbWVfMS50aHJvdHRsZVRpbWU7IH0gfSk7XG52YXIgdGhyb3dJZkVtcHR5XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3dJZkVtcHR5XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGhyb3dJZkVtcHR5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aHJvd0lmRW1wdHlfMS50aHJvd0lmRW1wdHk7IH0gfSk7XG52YXIgdGltZUludGVydmFsXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZUludGVydmFsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGltZUludGVydmFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lSW50ZXJ2YWxfMS50aW1lSW50ZXJ2YWw7IH0gfSk7XG52YXIgdGltZW91dF8yID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVvdXRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0aW1lb3V0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lb3V0XzIudGltZW91dDsgfSB9KTtcbnZhciB0aW1lb3V0V2l0aF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVvdXRXaXRoXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGltZW91dFdpdGhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRpbWVvdXRXaXRoXzEudGltZW91dFdpdGg7IH0gfSk7XG52YXIgdGltZXN0YW1wXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZXN0YW1wXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGltZXN0YW1wXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lc3RhbXBfMS50aW1lc3RhbXA7IH0gfSk7XG52YXIgdG9BcnJheV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3RvQXJyYXlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0b0FycmF5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0b0FycmF5XzEudG9BcnJheTsgfSB9KTtcbnZhciB3aW5kb3dfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ3aW5kb3dcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHdpbmRvd18xLndpbmRvdzsgfSB9KTtcbnZhciB3aW5kb3dDb3VudF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd0NvdW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwid2luZG93Q291bnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHdpbmRvd0NvdW50XzEud2luZG93Q291bnQ7IH0gfSk7XG52YXIgd2luZG93VGltZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1RpbWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ3aW5kb3dUaW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB3aW5kb3dUaW1lXzEud2luZG93VGltZTsgfSB9KTtcbnZhciB3aW5kb3dUb2dnbGVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dUb2dnbGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ3aW5kb3dUb2dnbGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHdpbmRvd1RvZ2dsZV8xLndpbmRvd1RvZ2dsZTsgfSB9KTtcbnZhciB3aW5kb3dXaGVuXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93V2hlblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIndpbmRvd1doZW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHdpbmRvd1doZW5fMS53aW5kb3dXaGVuOyB9IH0pO1xudmFyIHdpdGhMYXRlc3RGcm9tXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvd2l0aExhdGVzdEZyb21cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ3aXRoTGF0ZXN0RnJvbVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gd2l0aExhdGVzdEZyb21fMS53aXRoTGF0ZXN0RnJvbTsgfSB9KTtcbnZhciB6aXBBbGxfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy96aXBBbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ6aXBBbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHppcEFsbF8xLnppcEFsbDsgfSB9KTtcbnZhciB6aXBXaXRoXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvemlwV2l0aFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInppcFdpdGhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHppcFdpdGhfMS56aXBXaXRoOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgZnJvbUV2ZW50LCBmaWx0ZXIsIG1hcCwgc2hhcmUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuXG5mdW5jdGlvbiBub3JtYWxpemVLZXlwcmVzc0V2ZW50cyh2YWx1ZSwga2V5KSB7XG4gIHJldHVybiB7IHZhbHVlLCBrZXk6IGtleSB8fCB7fSB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvYnNlcnZlKHJsKSB7XG4gIGNvbnN0IGtleXByZXNzID0gZnJvbUV2ZW50KHJsLmlucHV0LCAna2V5cHJlc3MnLCBub3JtYWxpemVLZXlwcmVzc0V2ZW50cylcbiAgICAucGlwZSh0YWtlVW50aWwoZnJvbUV2ZW50KHJsLCAnY2xvc2UnKSkpXG4gICAgLy8gSWdub3JlIGBlbnRlcmAga2V5LiBPbiB0aGUgcmVhZGxpbmUsIHdlIG9ubHkgY2FyZSBhYm91dCB0aGUgYGxpbmVgIGV2ZW50LlxuICAgIC5waXBlKGZpbHRlcigoeyBrZXkgfSkgPT4ga2V5Lm5hbWUgIT09ICdlbnRlcicgJiYga2V5Lm5hbWUgIT09ICdyZXR1cm4nKSk7XG5cbiAgcmV0dXJuIHtcbiAgICBsaW5lOiBmcm9tRXZlbnQocmwsICdsaW5lJyksXG4gICAga2V5cHJlc3MsXG5cbiAgICBub3JtYWxpemVkVXBLZXk6IGtleXByZXNzLnBpcGUoXG4gICAgICBmaWx0ZXIoXG4gICAgICAgICh7IGtleSB9KSA9PlxuICAgICAgICAgIGtleS5uYW1lID09PSAndXAnIHx8IGtleS5uYW1lID09PSAnaycgfHwgKGtleS5uYW1lID09PSAncCcgJiYga2V5LmN0cmwpLFxuICAgICAgKSxcbiAgICAgIHNoYXJlKCksXG4gICAgKSxcblxuICAgIG5vcm1hbGl6ZWREb3duS2V5OiBrZXlwcmVzcy5waXBlKFxuICAgICAgZmlsdGVyKFxuICAgICAgICAoeyBrZXkgfSkgPT5cbiAgICAgICAgICBrZXkubmFtZSA9PT0gJ2Rvd24nIHx8IGtleS5uYW1lID09PSAnaicgfHwgKGtleS5uYW1lID09PSAnbicgJiYga2V5LmN0cmwpLFxuICAgICAgKSxcbiAgICAgIHNoYXJlKCksXG4gICAgKSxcblxuICAgIG51bWJlcktleToga2V5cHJlc3MucGlwZShcbiAgICAgIGZpbHRlcigoZSkgPT4gZS52YWx1ZSAmJiAnMTIzNDU2Nzg5Jy5pbmNsdWRlcyhlLnZhbHVlKSksXG4gICAgICBtYXAoKGUpID0+IE51bWJlcihlLnZhbHVlKSksXG4gICAgICBzaGFyZSgpLFxuICAgICksXG5cbiAgICBzcGFjZUtleToga2V5cHJlc3MucGlwZShcbiAgICAgIGZpbHRlcigoeyBrZXkgfSkgPT4ga2V5ICYmIGtleS5uYW1lID09PSAnc3BhY2UnKSxcbiAgICAgIHNoYXJlKCksXG4gICAgKSxcbiAgICBhS2V5OiBrZXlwcmVzcy5waXBlKFxuICAgICAgZmlsdGVyKCh7IGtleSB9KSA9PiBrZXkgJiYga2V5Lm5hbWUgPT09ICdhJyksXG4gICAgICBzaGFyZSgpLFxuICAgICksXG4gICAgaUtleToga2V5cHJlc3MucGlwZShcbiAgICAgIGZpbHRlcigoeyBrZXkgfSkgPT4ga2V5ICYmIGtleS5uYW1lID09PSAnaScpLFxuICAgICAgc2hhcmUoKSxcbiAgICApLFxuICB9O1xufVxuIiwiaW1wb3J0IGNvbG9ycyBmcm9tICd5b2N0b2NvbG9ycy1janMnO1xuXG4vKipcbiAqIFRoZSBwYWdpbmF0b3IgcmV0dXJucyBhIHN1YnNldCBvZiB0aGUgY2hvaWNlcyBpZiB0aGUgbGlzdCBpcyB0b28gbG9uZy5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYWdpbmF0b3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3NjcmVlbi1tYW5hZ2VyXCIpfSBbc2NyZWVuXVxuICAgKiBAcGFyYW0ge3tpc0luZmluaXRlPzogYm9vbGVhbn19IFtvcHRpb25zXVxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NyZWVuLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7IGlzSW5maW5pdGUgPSB0cnVlIH0gPSBvcHRpb25zO1xuICAgIHRoaXMubGFzdEluZGV4ID0gMDtcbiAgICB0aGlzLnNjcmVlbiA9IHNjcmVlbjtcbiAgICB0aGlzLmlzSW5maW5pdGUgPSBpc0luZmluaXRlO1xuICB9XG5cbiAgcGFnaW5hdGUob3V0cHV0LCBhY3RpdmUsIHBhZ2VTaXplKSB7XG4gICAgcGFnZVNpemUgfHw9IDc7XG4gICAgbGV0IGxpbmVzID0gb3V0cHV0LnNwbGl0KCdcXG4nKTtcblxuICAgIGlmICh0aGlzLnNjcmVlbikge1xuICAgICAgbGluZXMgPSB0aGlzLnNjcmVlbi5icmVha0xpbmVzKGxpbmVzKTtcbiAgICAgIGFjdGl2ZSA9IGxpbmVzXG4gICAgICAgIC5tYXAoKGxpbmVQYXJ0cykgPT4gbGluZVBhcnRzLmxlbmd0aClcbiAgICAgICAgLnNwbGljZSgwLCBhY3RpdmUpXG4gICAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbiAgICAgIGxpbmVzID0gbGluZXMuZmxhdCgpO1xuICAgIH1cblxuICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBsaW5lcyB0byBwYWdpbmF0ZVxuICAgIGlmIChsaW5lcy5sZW5ndGggPD0gcGFnZVNpemUpIHtcbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuICAgIGNvbnN0IHZpc2libGVMaW5lcyA9IHRoaXMuaXNJbmZpbml0ZVxuICAgICAgPyB0aGlzLmdldEluZmluaXRlTGluZXMobGluZXMsIGFjdGl2ZSwgcGFnZVNpemUpXG4gICAgICA6IHRoaXMuZ2V0RmluaXRlTGluZXMobGluZXMsIGFjdGl2ZSwgcGFnZVNpemUpO1xuICAgIHRoaXMubGFzdEluZGV4ID0gYWN0aXZlO1xuICAgIHJldHVybiAoXG4gICAgICB2aXNpYmxlTGluZXMuam9pbignXFxuJykgK1xuICAgICAgJ1xcbicgK1xuICAgICAgY29sb3JzLmRpbSgnKE1vdmUgdXAgYW5kIGRvd24gdG8gcmV2ZWFsIG1vcmUgY2hvaWNlcyknKVxuICAgICk7XG4gIH1cblxuICBnZXRJbmZpbml0ZUxpbmVzKGxpbmVzLCBhY3RpdmUsIHBhZ2VTaXplKSB7XG4gICAgaWYgKHRoaXMucG9pbnRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBvaW50ZXIgPSAwO1xuICAgIH1cbiAgICBjb25zdCBtaWRkbGVPZkxpc3QgPSBNYXRoLmZsb29yKHBhZ2VTaXplIC8gMik7XG4gICAgLy8gTW92ZSB0aGUgcG9pbnRlciBvbmx5IHdoZW4gdGhlIHVzZXIgZ28gZG93biBhbmQgbGltaXQgaXQgdG8gdGhlIG1pZGRsZSBvZiB0aGUgbGlzdFxuICAgIGlmIChcbiAgICAgIHRoaXMucG9pbnRlciA8IG1pZGRsZU9mTGlzdCAmJlxuICAgICAgdGhpcy5sYXN0SW5kZXggPCBhY3RpdmUgJiZcbiAgICAgIGFjdGl2ZSAtIHRoaXMubGFzdEluZGV4IDwgcGFnZVNpemVcbiAgICApIHtcbiAgICAgIHRoaXMucG9pbnRlciA9IE1hdGgubWluKG1pZGRsZU9mTGlzdCwgdGhpcy5wb2ludGVyICsgYWN0aXZlIC0gdGhpcy5sYXN0SW5kZXgpO1xuICAgIH1cblxuICAgIC8vIER1cGxpY2F0ZSB0aGUgbGluZXMgc28gaXQgZ2l2ZSBhbiBpbmZpbml0ZSBsaXN0IGxvb2tcbiAgICBjb25zdCBpbmZpbml0ZSA9IFtsaW5lcywgbGluZXMsIGxpbmVzXS5mbGF0KCk7XG4gICAgY29uc3QgdG9wSW5kZXggPSBNYXRoLm1heCgwLCBhY3RpdmUgKyBsaW5lcy5sZW5ndGggLSB0aGlzLnBvaW50ZXIpO1xuXG4gICAgcmV0dXJuIGluZmluaXRlLnNwbGljZSh0b3BJbmRleCwgcGFnZVNpemUpO1xuICB9XG5cbiAgZ2V0RmluaXRlTGluZXMobGluZXMsIGFjdGl2ZSwgcGFnZVNpemUpIHtcbiAgICBsZXQgdG9wSW5kZXggPSBhY3RpdmUgLSBwYWdlU2l6ZSAvIDI7XG4gICAgaWYgKHRvcEluZGV4IDwgMCkge1xuICAgICAgdG9wSW5kZXggPSAwO1xuICAgIH0gZWxzZSBpZiAodG9wSW5kZXggKyBwYWdlU2l6ZSA+IGxpbmVzLmxlbmd0aCkge1xuICAgICAgdG9wSW5kZXggPSBsaW5lcy5sZW5ndGggLSBwYWdlU2l6ZTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbmVzLnNwbGljZSh0b3BJbmRleCwgcGFnZVNpemUpO1xuICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbmNyZW1lbnRMaXN0SW5kZXgoY3VycmVudCwgZGlyLCBvcHQpIHtcbiAgY29uc3QgbGVuID0gb3B0LmNob2ljZXMucmVhbExlbmd0aDtcbiAgY29uc3Qgc2hvdWxkTG9vcCA9ICdsb29wJyBpbiBvcHQgPyBCb29sZWFuKG9wdC5sb29wKSA6IHRydWU7XG4gIGlmIChkaXIgPT09ICd1cCcpIHtcbiAgICBpZiAoY3VycmVudCA+IDApIHtcbiAgICAgIHJldHVybiBjdXJyZW50IC0gMTtcbiAgICB9XG4gICAgcmV0dXJuIHNob3VsZExvb3AgPyBsZW4gLSAxIDogY3VycmVudDtcbiAgfVxuICBpZiAoZGlyID09PSAnZG93bicpIHtcbiAgICBpZiAoY3VycmVudCA8IGxlbiAtIDEpIHtcbiAgICAgIHJldHVybiBjdXJyZW50ICsgMTtcbiAgICB9XG4gICAgcmV0dXJuIHNob3VsZExvb3AgPyAwIDogY3VycmVudDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ2RpciBtdXN0IGJlIHVwIG9yIGRvd24nKTtcbn1cbiIsImltcG9ydCBjb2xvcnMgZnJvbSAneW9jdG9jb2xvcnMtY2pzJztcbmltcG9ydCBmaWd1cmVzIGZyb20gJ0BpbnF1aXJlci9maWd1cmVzJztcblxuLyoqXG4gKiBTZXBhcmF0b3Igb2JqZWN0XG4gKiBVc2VkIHRvIHNwYWNlL3NlcGFyYXRlIGNob2ljZXMgZ3JvdXBcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtTdHJpbmd9IGxpbmUgICBTZXBhcmF0aW9uIGxpbmUgY29udGVudCAoZmFjdWx0YXRpdmUpXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VwYXJhdG9yIHtcbiAgY29uc3RydWN0b3IobGluZSkge1xuICAgIHRoaXMudHlwZSA9ICdzZXBhcmF0b3InO1xuICAgIHRoaXMubGluZSA9IGNvbG9ycy5kaW0obGluZSB8fCBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxNSB9KS5qb2luKGZpZ3VyZXMubGluZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBmdW5jdGlvbiByZXR1cm5pbmcgZmFsc2UgaWYgb2JqZWN0IGlzIGEgc2VwYXJhdG9yXG4gICAqIEBwYXJhbSAge09iamVjdH0gb2JqIG9iamVjdCB0byB0ZXN0IGFnYWluc3RcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gICAgYGZhbHNlYCBpZiBvYmplY3QgaXMgYSBzZXBhcmF0b3JcbiAgICovXG4gIHN0YXRpYyBleGNsdWRlKG9iaikge1xuICAgIHJldHVybiBvYmoudHlwZSAhPT0gJ3NlcGFyYXRvcic7XG4gIH1cblxuICAvKipcbiAgICogU3RyaW5naWZ5IHNlcGFyYXRvclxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IHRoZSBzZXBhcmF0b3IgZGlzcGxheSBzdHJpbmdcbiAgICovXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLmxpbmU7XG4gIH1cbn1cbiIsIi8qKlxuICogQ2hvaWNlIG9iamVjdFxuICogTm9ybWFsaXplIGlucHV0IGFzIGNob2ljZSBvYmplY3RcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtOdW1iZXJ8U3RyaW5nfE9iamVjdH0gdmFsICBDaG9pY2UgdmFsdWUuIElmIGFuIG9iamVjdCBpcyBwYXNzZWQsIGl0IHNob3VsZCBjb250YWluc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCBsZWFzdCBvbmUgb2YgYHZhbHVlYCBvciBgbmFtZWAgcHJvcGVydHlcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2Uge1xuICBjb25zdHJ1Y3Rvcih2YWwsIGFuc3dlcnMpIHtcbiAgICAvLyBEb24ndCBwcm9jZXNzIENob2ljZSBhbmQgU2VwYXJhdG9yIG9iamVjdFxuICAgIGlmICh2YWwgaW5zdGFuY2VvZiBDaG9pY2UgfHwgdmFsLnR5cGUgPT09ICdzZXBhcmF0b3InKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgICAgdGhpcy5uYW1lID0gU3RyaW5nKHZhbCk7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgICAgdGhpcy5zaG9ydCA9IFN0cmluZyh2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMsIHZhbCwge1xuICAgICAgICBuYW1lOiB2YWwubmFtZSB8fCB2YWwudmFsdWUsXG4gICAgICAgIHZhbHVlOiAndmFsdWUnIGluIHZhbCA/IHZhbC52YWx1ZSA6IHZhbC5uYW1lLFxuICAgICAgICBzaG9ydDogdmFsLnNob3J0IHx8IHZhbC5uYW1lIHx8IHZhbC52YWx1ZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZGlzYWJsZWQgPVxuICAgICAgdHlwZW9mIHZhbC5kaXNhYmxlZCA9PT0gJ2Z1bmN0aW9uJyA/IHZhbC5kaXNhYmxlZChhbnN3ZXJzKSA6IHZhbC5kaXNhYmxlZDtcbiAgfVxufVxuIiwiaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydCc7XG5cbmltcG9ydCBTZXBhcmF0b3IgZnJvbSAnLi9zZXBhcmF0b3IuanMnO1xuaW1wb3J0IENob2ljZSBmcm9tICcuL2Nob2ljZS5qcyc7XG5cbi8qKlxuICogQ2hvaWNlcyBjb2xsZWN0aW9uXG4gKiBDb2xsZWN0aW9uIG9mIG11bHRpcGxlIGBjaG9pY2VgIG9iamVjdFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VzIHtcbiAgLyoqIEBwYXJhbSB7QXJyYXl9IGNob2ljZXMgIEFsbCBgY2hvaWNlYCB0byBrZWVwIGluIHRoZSBjb2xsZWN0aW9uICovXG4gIGNvbnN0cnVjdG9yKGNob2ljZXMsIGFuc3dlcnMpIHtcbiAgICB0aGlzLmNob2ljZXMgPSBjaG9pY2VzLm1hcCgodmFsKSA9PiB7XG4gICAgICBpZiAodmFsLnR5cGUgPT09ICdzZXBhcmF0b3InKSB7XG4gICAgICAgIGlmICghKHZhbCBpbnN0YW5jZW9mIFNlcGFyYXRvcikpIHtcbiAgICAgICAgICB2YWwgPSBuZXcgU2VwYXJhdG9yKHZhbC5saW5lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ2hvaWNlKHZhbCwgYW5zd2Vycyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlYWxDaG9pY2VzID0gdGhpcy5jaG9pY2VzXG4gICAgICAuZmlsdGVyKFNlcGFyYXRvci5leGNsdWRlKVxuICAgICAgLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uZGlzYWJsZWQpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdsZW5ndGgnLCB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNob2ljZXMubGVuZ3RoO1xuICAgICAgfSxcbiAgICAgIHNldCh2YWwpIHtcbiAgICAgICAgdGhpcy5jaG9pY2VzLmxlbmd0aCA9IHZhbDtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3JlYWxMZW5ndGgnLCB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWxDaG9pY2VzLmxlbmd0aDtcbiAgICAgIH0sXG4gICAgICBzZXQoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHNldCBgcmVhbExlbmd0aGAgb2YgYSBDaG9pY2VzIGNvbGxlY3Rpb24nKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5jaG9pY2VzO1xuICAgIGxldCBpbmRleCA9IC0xO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5leHQ6ICgpID0+ICh7IHZhbHVlOiBkYXRhWysraW5kZXhdLCBkb25lOiAhKGluZGV4IGluIGRhdGEpIH0pLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgdmFsaWQgY2hvaWNlIGZyb20gdGhlIGNvbGxlY3Rpb25cbiAgICogQHBhcmFtICB7TnVtYmVyfSBzZWxlY3RvciAgVGhlIHNlbGVjdGVkIGNob2ljZSBpbmRleFxuICAgKiBAcmV0dXJuIHtDaG9pY2V8VW5kZWZpbmVkfSBSZXR1cm4gdGhlIG1hdGNoZWQgY2hvaWNlIG9yIHVuZGVmaW5lZFxuICAgKi9cbiAgZ2V0Q2hvaWNlKHNlbGVjdG9yKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBzZWxlY3RvciA9PT0gJ251bWJlcicpO1xuICAgIHJldHVybiB0aGlzLnJlYWxDaG9pY2VzW3NlbGVjdG9yXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSByYXcgZWxlbWVudCBmcm9tIHRoZSBjb2xsZWN0aW9uXG4gICAqIEBwYXJhbSAge051bWJlcn0gc2VsZWN0b3IgIFRoZSBzZWxlY3RlZCBpbmRleCB2YWx1ZVxuICAgKiBAcmV0dXJuIHtDaG9pY2V8VW5kZWZpbmVkfSBSZXR1cm4gdGhlIG1hdGNoZWQgY2hvaWNlIG9yIHVuZGVmaW5lZFxuICAgKi9cbiAgZ2V0KHNlbGVjdG9yKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBzZWxlY3RvciA9PT0gJ251bWJlcicpO1xuICAgIHJldHVybiB0aGlzLmNob2ljZXNbc2VsZWN0b3JdO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hdGNoIHRoZSB2YWxpZCBjaG9pY2VzIGFnYWluc3QgYSB3aGVyZSBjbGF1c2VcbiAgICogQHBhcmFtICB7RnVuY3Rpb258T2JqZWN0fSB3aGVyZUNsYXVzZSBmaWx0ZXIgZnVuY3Rpb24gb3Iga2V5LXZhbHVlIG9iamVjdCB0byBtYXRjaCBhZ2FpbnN0XG4gICAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgICAgICAgTWF0Y2hpbmcgY2hvaWNlcyBvciBlbXB0eSBhcnJheVxuICAgKi9cbiAgd2hlcmUod2hlcmVDbGF1c2UpIHtcbiAgICBsZXQgZmlsdGVyRm47XG4gICAgaWYgKHR5cGVvZiB3aGVyZUNsYXVzZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZmlsdGVyRm4gPSB3aGVyZUNsYXVzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMod2hlcmVDbGF1c2UpWzBdO1xuICAgICAgZmlsdGVyRm4gPSAoY2hvaWNlKSA9PiBjaG9pY2Vba2V5XSA9PT0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVhbENob2ljZXMuZmlsdGVyKGZpbHRlckZuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQbHVjayBhIHBhcnRpY3VsYXIga2V5IGZyb20gdGhlIGNob2ljZXNcbiAgICogQHBhcmFtICB7U3RyaW5nfSBwcm9wZXJ0eU5hbWUgUHJvcGVydHkgbmFtZSB0byBzZWxlY3RcbiAgICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgICAgICAgU2VsZWN0ZWQgcHJvcGVydGllc1xuICAgKi9cbiAgcGx1Y2socHJvcGVydHlOYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhbENob2ljZXMubWFwKChjaG9pY2UpID0+IGNob2ljZVtwcm9wZXJ0eU5hbWVdKTtcbiAgfVxuXG4gIC8vIEV4cG9zZSB1c3VhbCBBcnJheSBtZXRob2RzXG4gIGluZGV4T2YoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmNob2ljZXMuaW5kZXhPZiguLi5hcmdzKTtcbiAgfVxuXG4gIGZvckVhY2goLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmNob2ljZXMuZm9yRWFjaCguLi5hcmdzKTtcbiAgfVxuXG4gIGZpbHRlciguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hvaWNlcy5maWx0ZXIoLi4uYXJncyk7XG4gIH1cblxuICByZWR1Y2UoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmNob2ljZXMucmVkdWNlKC4uLmFyZ3MpO1xuICB9XG5cbiAgZmluZChmdW5jKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hvaWNlcy5maW5kKGZ1bmMpO1xuICB9XG5cbiAgc29tZShmdW5jKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hvaWNlcy5zb21lKGZ1bmMpO1xuICB9XG5cbiAgcHVzaCguLi5hcmdzKSB7XG4gICAgY29uc3Qgb2JqcyA9IGFyZ3MubWFwKCh2YWwpID0+IG5ldyBDaG9pY2UodmFsKSk7XG4gICAgdGhpcy5jaG9pY2VzLnB1c2goLi4ub2Jqcyk7XG4gICAgdGhpcy5yZWFsQ2hvaWNlcyA9IHRoaXMuY2hvaWNlc1xuICAgICAgLmZpbHRlcihTZXBhcmF0b3IuZXhjbHVkZSlcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLmRpc2FibGVkKTtcbiAgICByZXR1cm4gdGhpcy5jaG9pY2VzO1xuICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gY2xpV2lkdGg7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU9wdHMob3B0aW9ucykge1xuICBjb25zdCBkZWZhdWx0T3B0cyA9IHtcbiAgICBkZWZhdWx0V2lkdGg6IDAsXG4gICAgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcbiAgICB0dHk6IHJlcXVpcmUoJ3R0eScpLFxuICB9O1xuXG4gIGlmICghb3B0aW9ucykge1xuICAgIHJldHVybiBkZWZhdWx0T3B0cztcbiAgfVxuXG4gIE9iamVjdC5rZXlzKGRlZmF1bHRPcHRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIW9wdGlvbnNba2V5XSkge1xuICAgICAgb3B0aW9uc1trZXldID0gZGVmYXVsdE9wdHNba2V5XTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5mdW5jdGlvbiBjbGlXaWR0aChvcHRpb25zKSB7XG4gIGNvbnN0IG9wdHMgPSBub3JtYWxpemVPcHRzKG9wdGlvbnMpO1xuXG4gIGlmIChvcHRzLm91dHB1dC5nZXRXaW5kb3dTaXplKSB7XG4gICAgcmV0dXJuIG9wdHMub3V0cHV0LmdldFdpbmRvd1NpemUoKVswXSB8fCBvcHRzLmRlZmF1bHRXaWR0aDtcbiAgfVxuXG4gIGlmIChvcHRzLnR0eS5nZXRXaW5kb3dTaXplKSB7XG4gICAgcmV0dXJuIG9wdHMudHR5LmdldFdpbmRvd1NpemUoKVsxXSB8fCBvcHRzLmRlZmF1bHRXaWR0aDtcbiAgfVxuXG4gIGlmIChvcHRzLm91dHB1dC5jb2x1bW5zKSB7XG4gICAgcmV0dXJuIG9wdHMub3V0cHV0LmNvbHVtbnM7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuQ0xJX1dJRFRIKSB7XG4gICAgY29uc3Qgd2lkdGggPSBwYXJzZUludChwcm9jZXNzLmVudi5DTElfV0lEVEgsIDEwKTtcblxuICAgIGlmICghaXNOYU4od2lkdGgpICYmIHdpZHRoICE9PSAwKSB7XG4gICAgICByZXR1cm4gd2lkdGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9wdHMuZGVmYXVsdFdpZHRoO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICh7b25seUZpcnN0ID0gZmFsc2V9ID0ge30pID0+IHtcblx0Y29uc3QgcGF0dGVybiA9IFtcblx0XHQnW1xcXFx1MDAxQlxcXFx1MDA5Ql1bW1xcXFxdKCkjOz9dKig/Oig/Oig/Oig/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSspKnxbYS16QS1aXFxcXGRdKyg/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSopKik/XFxcXHUwMDA3KScsXG5cdFx0Jyg/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnRxcnk9Pjx+XSkpJ1xuXHRdLmpvaW4oJ3wnKTtcblxuXHRyZXR1cm4gbmV3IFJlZ0V4cChwYXR0ZXJuLCBvbmx5Rmlyc3QgPyB1bmRlZmluZWQgOiAnZycpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IGFuc2lSZWdleCA9IHJlcXVpcmUoJ2Fuc2ktcmVnZXgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpbmcgPT4gdHlwZW9mIHN0cmluZyA9PT0gJ3N0cmluZycgPyBzdHJpbmcucmVwbGFjZShhbnNpUmVnZXgoKSwgJycpIDogc3RyaW5nO1xuIiwiLyogZXNsaW50LWRpc2FibGUgeW9kYSAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBpc0Z1bGx3aWR0aENvZGVQb2ludCA9IGNvZGVQb2ludCA9PiB7XG5cdGlmIChOdW1iZXIuaXNOYU4oY29kZVBvaW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIENvZGUgcG9pbnRzIGFyZSBkZXJpdmVkIGZyb206XG5cdC8vIGh0dHA6Ly93d3cudW5peC5vcmcvUHVibGljL1VOSURBVEEvRWFzdEFzaWFuV2lkdGgudHh0XG5cdGlmIChcblx0XHRjb2RlUG9pbnQgPj0gMHgxMTAwICYmIChcblx0XHRcdGNvZGVQb2ludCA8PSAweDExNUYgfHwgLy8gSGFuZ3VsIEphbW9cblx0XHRcdGNvZGVQb2ludCA9PT0gMHgyMzI5IHx8IC8vIExFRlQtUE9JTlRJTkcgQU5HTEUgQlJBQ0tFVFxuXHRcdFx0Y29kZVBvaW50ID09PSAweDIzMkEgfHwgLy8gUklHSFQtUE9JTlRJTkcgQU5HTEUgQlJBQ0tFVFxuXHRcdFx0Ly8gQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQgLi4gRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRoc1xuXHRcdFx0KDB4MkU4MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzI0NyAmJiBjb2RlUG9pbnQgIT09IDB4MzAzRikgfHxcblx0XHRcdC8vIEVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMgLi4gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQVxuXHRcdFx0KDB4MzI1MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4NERCRikgfHxcblx0XHRcdC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgLi4gWWkgUmFkaWNhbHNcblx0XHRcdCgweDRFMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEE0QzYpIHx8XG5cdFx0XHQvLyBIYW5ndWwgSmFtbyBFeHRlbmRlZC1BXG5cdFx0XHQoMHhBOTYwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhBOTdDKSB8fFxuXHRcdFx0Ly8gSGFuZ3VsIFN5bGxhYmxlc1xuXHRcdFx0KDB4QUMwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RDdBMykgfHxcblx0XHRcdC8vIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHNcblx0XHRcdCgweEY5MDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZBRkYpIHx8XG5cdFx0XHQvLyBWZXJ0aWNhbCBGb3Jtc1xuXHRcdFx0KDB4RkUxMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkUxOSkgfHxcblx0XHRcdC8vIENKSyBDb21wYXRpYmlsaXR5IEZvcm1zIC4uIFNtYWxsIEZvcm0gVmFyaWFudHNcblx0XHRcdCgweEZFMzAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZFNkIpIHx8XG5cdFx0XHQvLyBIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3Jtc1xuXHRcdFx0KDB4RkYwMSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkY2MCkgfHxcblx0XHRcdCgweEZGRTAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGRTYpIHx8XG5cdFx0XHQvLyBLYW5hIFN1cHBsZW1lbnRcblx0XHRcdCgweDFCMDAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxQjAwMSkgfHxcblx0XHRcdC8vIEVuY2xvc2VkIElkZW9ncmFwaGljIFN1cHBsZW1lbnRcblx0XHRcdCgweDFGMjAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxRjI1MSkgfHxcblx0XHRcdC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEIgLi4gVGVydGlhcnkgSWRlb2dyYXBoaWMgUGxhbmVcblx0XHRcdCgweDIwMDAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgzRkZGRClcblx0XHQpXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bGx3aWR0aENvZGVQb2ludDtcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBpc0Z1bGx3aWR0aENvZGVQb2ludDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gaHR0cHM6Ly9tdGhzLmJlL2Vtb2ppXG4gIHJldHVybiAvXFx1RDgzQ1xcdURGRjRcXHVEQjQwXFx1REM2N1xcdURCNDBcXHVEQzYyKD86XFx1REI0MFxcdURDNjVcXHVEQjQwXFx1REM2RVxcdURCNDBcXHVEQzY3fFxcdURCNDBcXHVEQzczXFx1REI0MFxcdURDNjNcXHVEQjQwXFx1REM3NHxcXHVEQjQwXFx1REM3N1xcdURCNDBcXHVEQzZDXFx1REI0MFxcdURDNzMpXFx1REI0MFxcdURDN0Z8XFx1RDgzRFxcdURDNjgoPzpcXHVEODNDXFx1REZGQ1xcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NcXHVERkZCfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDXFx1REZGRlxcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZFXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkRcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkJcXHVERkZDXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdTIwMEQoPzpcXHUyNzY0XFx1RkUwRlxcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0RcXHVEQzY4fCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdTIwMEQoPzpcXHVEODNEXFx1REM2NlxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2N1xcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSkpfFxcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY3XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKXwoPzpcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pfFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRnxcXHVEODNEW1xcdURDNjZcXHVEQzY3XXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8KD86XFx1RDgzQ1xcdURGRkJcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkZcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkVcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkRcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkNcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF0pXFx1RkUwRnxcXHVEODNDXFx1REZGQlxcdTIwMEQoPzpcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZCXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkNcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjkpXFx1RDgzQ1xcdURGRkJ8XFx1RDgzRVxcdURERDEoPzpcXHVEODNDXFx1REZGRlxcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8XFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZFXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkZcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSl8KD86XFx1RDgzRVxcdURERDFcXHVEODNDXFx1REZGQ1xcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMXxcXHVEODNEXFx1REM2OVxcdUQ4M0NcXHVERkZEXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY5KSg/OlxcdUQ4M0NbXFx1REZGQlxcdURGRkNdKXxcXHVEODNEXFx1REM2OSg/OlxcdUQ4M0NcXHVERkZFXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZDXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZCXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkRcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1MjAwRCg/OlxcdTI3NjRcXHVGRTBGXFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKXxcXHVEODNEW1xcdURDNjhcXHVEQzY5XSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZGXFx1MjAwRCg/OlxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKSl8XFx1RDgzRFxcdURDNjlcXHUyMDBEXFx1RDgzRFxcdURDNjlcXHUyMDBEKD86XFx1RDgzRFxcdURDNjZcXHUyMDBEXFx1RDgzRFxcdURDNjZ8XFx1RDgzRFxcdURDNjdcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZEXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkVcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjkpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRdKXxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2NlxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2OVxcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSl8KD86XFx1RDgzRFxcdURDNDFcXHVGRTBGXFx1MjAwRFxcdUQ4M0RcXHVEREU4fFxcdUQ4M0RcXHVEQzY5KD86XFx1RDgzQ1xcdURGRkZcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkVcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkNcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkJcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkRcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdKXwoPzooPzpcXHUyNkY5fFxcdUQ4M0NbXFx1REZDQlxcdURGQ0NdfFxcdUQ4M0RcXHVERDc1KVxcdUZFMEZ8XFx1RDgzRFxcdURDNkZ8XFx1RDgzRVtcXHVERDNDXFx1RERERVxcdUREREZdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfCg/OlxcdTI2Rjl8XFx1RDgzQ1tcXHVERkNCXFx1REZDQ118XFx1RDgzRFxcdURENzUpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfCg/OlxcdUQ4M0NbXFx1REZDM1xcdURGQzRcXHVERkNBXXxcXHVEODNEW1xcdURDNkVcXHVEQzcxXFx1REM3M1xcdURDNzdcXHVEQzgxXFx1REM4MlxcdURDODZcXHVEQzg3XFx1REU0NS1cXHVERTQ3XFx1REU0QlxcdURFNERcXHVERTRFXFx1REVBM1xcdURFQjQtXFx1REVCNl18XFx1RDgzRVtcXHVERDI2XFx1REQzNy1cXHVERDM5XFx1REQzRFxcdUREM0VcXHVEREI4XFx1RERCOVxcdUREQ0QtXFx1RERDRlxcdURERDYtXFx1RERERF0pKD86KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfFxcdTIwMERbXFx1MjY0MFxcdTI2NDJdKXxcXHVEODNDXFx1REZGNFxcdTIwMERcXHUyNjIwKVxcdUZFMEZ8XFx1RDgzRFxcdURDNjlcXHUyMDBEXFx1RDgzRFxcdURDNjdcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pfFxcdUQ4M0NcXHVERkYzXFx1RkUwRlxcdTIwMERcXHVEODNDXFx1REYwOHxcXHVEODNEXFx1REMxNVxcdTIwMERcXHVEODNFXFx1RERCQXxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2N3xcXHVEODNDXFx1RERGRFxcdUQ4M0NcXHVEREYwfFxcdUQ4M0NcXHVEREY0XFx1RDgzQ1xcdURERjJ8XFx1RDgzQ1xcdURERjZcXHVEODNDXFx1RERFNnxbI1xcKjAtOV1cXHVGRTBGXFx1MjBFM3xcXHVEODNDXFx1RERFNyg/OlxcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUZcXHVEREYxLVxcdURERjRcXHVEREY2LVxcdURERjlcXHVEREZCXFx1RERGQ1xcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERjkoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRFxcdURERUYtXFx1RERGNFxcdURERjdcXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZGXSl8XFx1RDgzQ1xcdURERUEoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQVxcdURERUNcXHVEREVEXFx1RERGNy1cXHVEREZBXSl8XFx1RDgzRVxcdURERDEoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfFxcdUQ4M0NcXHVEREY3KD86XFx1RDgzQ1tcXHVEREVBXFx1RERGNFxcdURERjhcXHVEREZBXFx1RERGQ10pfFxcdUQ4M0RcXHVEQzY5KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXxcXHVEODNDXFx1RERGMig/OlxcdUQ4M0NbXFx1RERFNlxcdURERTgtXFx1RERFRFxcdURERjAtXFx1RERGRl0pfFxcdUQ4M0NcXHVEREU2KD86XFx1RDgzQ1tcXHVEREU4LVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjJcXHVEREY0XFx1RERGNi1cXHVEREZBXFx1RERGQ1xcdURERkRcXHVEREZGXSl8XFx1RDgzQ1xcdURERjAoPzpcXHVEODNDW1xcdURERUFcXHVEREVDLVxcdURERUVcXHVEREYyXFx1RERGM1xcdURERjVcXHVEREY3XFx1RERGQ1xcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERUQoPzpcXHVEODNDW1xcdURERjBcXHVEREYyXFx1RERGM1xcdURERjdcXHVEREY5XFx1RERGQV0pfFxcdUQ4M0NcXHVEREU5KD86XFx1RDgzQ1tcXHVEREVBXFx1RERFQ1xcdURERUZcXHVEREYwXFx1RERGMlxcdURERjRcXHVEREZGXSl8XFx1RDgzQ1xcdURERkUoPzpcXHVEODNDW1xcdURERUFcXHVEREY5XSl8XFx1RDgzQ1xcdURERUMoPzpcXHVEODNDW1xcdURERTZcXHVEREU3XFx1RERFOS1cXHVEREVFXFx1RERGMS1cXHVEREYzXFx1RERGNS1cXHVEREZBXFx1RERGQ1xcdURERkVdKXxcXHVEODNDXFx1RERGOCg/OlxcdUQ4M0NbXFx1RERFNi1cXHVEREVBXFx1RERFQy1cXHVEREY0XFx1RERGNy1cXHVEREY5XFx1RERGQlxcdURERkQtXFx1RERGRl0pfFxcdUQ4M0NcXHVEREVCKD86XFx1RDgzQ1tcXHVEREVFLVxcdURERjBcXHVEREYyXFx1RERGNFxcdURERjddKXxcXHVEODNDXFx1RERGNSg/OlxcdUQ4M0NbXFx1RERFNlxcdURERUEtXFx1RERFRFxcdURERjAtXFx1RERGM1xcdURERjctXFx1RERGOVxcdURERkNcXHVEREZFXSl8XFx1RDgzQ1xcdURERkIoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQVxcdURERUNcXHVEREVFXFx1RERGM1xcdURERkFdKXxcXHVEODNDXFx1RERGMyg/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBLVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjRcXHVEREY1XFx1RERGN1xcdURERkFcXHVEREZGXSl8XFx1RDgzQ1xcdURERTgoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRVxcdURERjAtXFx1RERGNVxcdURERjdcXHVEREZBLVxcdURERkZdKXxcXHVEODNDXFx1RERGMSg/OlxcdUQ4M0NbXFx1RERFNi1cXHVEREU4XFx1RERFRVxcdURERjBcXHVEREY3LVxcdURERkJcXHVEREZFXSl8XFx1RDgzQ1xcdURERkYoPzpcXHVEODNDW1xcdURERTZcXHVEREYyXFx1RERGQ10pfFxcdUQ4M0NcXHVEREZDKD86XFx1RDgzQ1tcXHVEREVCXFx1RERGOF0pfFxcdUQ4M0NcXHVEREZBKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFQ1xcdURERjJcXHVEREYzXFx1RERGOFxcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERUUoPzpcXHVEODNDW1xcdURERTgtXFx1RERFQVxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOV0pfFxcdUQ4M0NcXHVEREVGKD86XFx1RDgzQ1tcXHVEREVBXFx1RERGMlxcdURERjRcXHVEREY1XSl8KD86XFx1RDgzQ1tcXHVERkMzXFx1REZDNFxcdURGQ0FdfFxcdUQ4M0RbXFx1REM2RVxcdURDNzFcXHVEQzczXFx1REM3N1xcdURDODFcXHVEQzgyXFx1REM4NlxcdURDODdcXHVERTQ1LVxcdURFNDdcXHVERTRCXFx1REU0RFxcdURFNEVcXHVERUEzXFx1REVCNC1cXHVERUI2XXxcXHVEODNFW1xcdUREMjZcXHVERDM3LVxcdUREMzlcXHVERDNEXFx1REQzRVxcdUREQjhcXHVEREI5XFx1RERDRC1cXHVERENGXFx1RERENi1cXHVEREREXSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OlxcdTI2Rjl8XFx1RDgzQ1tcXHVERkNCXFx1REZDQ118XFx1RDgzRFxcdURENzUpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXwoPzpbXFx1MjYxRFxcdTI3MEEtXFx1MjcwRF18XFx1RDgzQ1tcXHVERjg1XFx1REZDMlxcdURGQzddfFxcdUQ4M0RbXFx1REM0MlxcdURDNDNcXHVEQzQ2LVxcdURDNTBcXHVEQzY2XFx1REM2N1xcdURDNkItXFx1REM2RFxcdURDNzBcXHVEQzcyXFx1REM3NC1cXHVEQzc2XFx1REM3OFxcdURDN0NcXHVEQzgzXFx1REM4NVxcdURDQUFcXHVERDc0XFx1REQ3QVxcdUREOTBcXHVERDk1XFx1REQ5NlxcdURFNENcXHVERTRGXFx1REVDMFxcdURFQ0NdfFxcdUQ4M0VbXFx1REQwRlxcdUREMTgtXFx1REQxQ1xcdUREMUVcXHVERDFGXFx1REQzMC1cXHVERDM2XFx1RERCNVxcdUREQjZcXHVEREJCXFx1REREMi1cXHVEREQ1XSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OltcXHUyMzFBXFx1MjMxQlxcdTIzRTktXFx1MjNFQ1xcdTIzRjBcXHUyM0YzXFx1MjVGRFxcdTI1RkVcXHUyNjE0XFx1MjYxNVxcdTI2NDgtXFx1MjY1M1xcdTI2N0ZcXHUyNjkzXFx1MjZBMVxcdTI2QUFcXHUyNkFCXFx1MjZCRFxcdTI2QkVcXHUyNkM0XFx1MjZDNVxcdTI2Q0VcXHUyNkQ0XFx1MjZFQVxcdTI2RjJcXHUyNkYzXFx1MjZGNVxcdTI2RkFcXHUyNkZEXFx1MjcwNVxcdTI3MEFcXHUyNzBCXFx1MjcyOFxcdTI3NENcXHUyNzRFXFx1Mjc1My1cXHUyNzU1XFx1Mjc1N1xcdTI3OTUtXFx1Mjc5N1xcdTI3QjBcXHUyN0JGXFx1MkIxQlxcdTJCMUNcXHUyQjUwXFx1MkI1NV18XFx1RDgzQ1tcXHVEQzA0XFx1RENDRlxcdUREOEVcXHVERDkxLVxcdUREOUFcXHVEREU2LVxcdURERkZcXHVERTAxXFx1REUxQVxcdURFMkZcXHVERTMyLVxcdURFMzZcXHVERTM4LVxcdURFM0FcXHVERTUwXFx1REU1MVxcdURGMDAtXFx1REYyMFxcdURGMkQtXFx1REYzNVxcdURGMzctXFx1REY3Q1xcdURGN0UtXFx1REY5M1xcdURGQTAtXFx1REZDQVxcdURGQ0YtXFx1REZEM1xcdURGRTAtXFx1REZGMFxcdURGRjRcXHVERkY4LVxcdURGRkZdfFxcdUQ4M0RbXFx1REMwMC1cXHVEQzNFXFx1REM0MFxcdURDNDItXFx1RENGQ1xcdURDRkYtXFx1REQzRFxcdURENEItXFx1REQ0RVxcdURENTAtXFx1REQ2N1xcdUREN0FcXHVERDk1XFx1REQ5NlxcdUREQTRcXHVEREZCLVxcdURFNEZcXHVERTgwLVxcdURFQzVcXHVERUNDXFx1REVEMC1cXHVERUQyXFx1REVENVxcdURFRUJcXHVERUVDXFx1REVGNC1cXHVERUZBXFx1REZFMC1cXHVERkVCXXxcXHVEODNFW1xcdUREMEQtXFx1REQzQVxcdUREM0MtXFx1REQ0NVxcdURENDctXFx1REQ3MVxcdURENzMtXFx1REQ3NlxcdUREN0EtXFx1RERBMlxcdUREQTUtXFx1RERBQVxcdUREQUUtXFx1RERDQVxcdUREQ0QtXFx1RERGRlxcdURFNzAtXFx1REU3M1xcdURFNzgtXFx1REU3QVxcdURFODAtXFx1REU4MlxcdURFOTAtXFx1REU5NV0pfCg/OlsjXFwqMC05XFx4QTlcXHhBRVxcdTIwM0NcXHUyMDQ5XFx1MjEyMlxcdTIxMzlcXHUyMTk0LVxcdTIxOTlcXHUyMUE5XFx1MjFBQVxcdTIzMUFcXHUyMzFCXFx1MjMyOFxcdTIzQ0ZcXHUyM0U5LVxcdTIzRjNcXHUyM0Y4LVxcdTIzRkFcXHUyNEMyXFx1MjVBQVxcdTI1QUJcXHUyNUI2XFx1MjVDMFxcdTI1RkItXFx1MjVGRVxcdTI2MDAtXFx1MjYwNFxcdTI2MEVcXHUyNjExXFx1MjYxNFxcdTI2MTVcXHUyNjE4XFx1MjYxRFxcdTI2MjBcXHUyNjIyXFx1MjYyM1xcdTI2MjZcXHUyNjJBXFx1MjYyRVxcdTI2MkZcXHUyNjM4LVxcdTI2M0FcXHUyNjQwXFx1MjY0MlxcdTI2NDgtXFx1MjY1M1xcdTI2NUZcXHUyNjYwXFx1MjY2M1xcdTI2NjVcXHUyNjY2XFx1MjY2OFxcdTI2N0JcXHUyNjdFXFx1MjY3RlxcdTI2OTItXFx1MjY5N1xcdTI2OTlcXHUyNjlCXFx1MjY5Q1xcdTI2QTBcXHUyNkExXFx1MjZBQVxcdTI2QUJcXHUyNkIwXFx1MjZCMVxcdTI2QkRcXHUyNkJFXFx1MjZDNFxcdTI2QzVcXHUyNkM4XFx1MjZDRVxcdTI2Q0ZcXHUyNkQxXFx1MjZEM1xcdTI2RDRcXHUyNkU5XFx1MjZFQVxcdTI2RjAtXFx1MjZGNVxcdTI2RjctXFx1MjZGQVxcdTI2RkRcXHUyNzAyXFx1MjcwNVxcdTI3MDgtXFx1MjcwRFxcdTI3MEZcXHUyNzEyXFx1MjcxNFxcdTI3MTZcXHUyNzFEXFx1MjcyMVxcdTI3MjhcXHUyNzMzXFx1MjczNFxcdTI3NDRcXHUyNzQ3XFx1Mjc0Q1xcdTI3NEVcXHUyNzUzLVxcdTI3NTVcXHUyNzU3XFx1Mjc2M1xcdTI3NjRcXHUyNzk1LVxcdTI3OTdcXHUyN0ExXFx1MjdCMFxcdTI3QkZcXHUyOTM0XFx1MjkzNVxcdTJCMDUtXFx1MkIwN1xcdTJCMUJcXHUyQjFDXFx1MkI1MFxcdTJCNTVcXHUzMDMwXFx1MzAzRFxcdTMyOTdcXHUzMjk5XXxcXHVEODNDW1xcdURDMDRcXHVEQ0NGXFx1REQ3MFxcdURENzFcXHVERDdFXFx1REQ3RlxcdUREOEVcXHVERDkxLVxcdUREOUFcXHVEREU2LVxcdURERkZcXHVERTAxXFx1REUwMlxcdURFMUFcXHVERTJGXFx1REUzMi1cXHVERTNBXFx1REU1MFxcdURFNTFcXHVERjAwLVxcdURGMjFcXHVERjI0LVxcdURGOTNcXHVERjk2XFx1REY5N1xcdURGOTktXFx1REY5QlxcdURGOUUtXFx1REZGMFxcdURGRjMtXFx1REZGNVxcdURGRjctXFx1REZGRl18XFx1RDgzRFtcXHVEQzAwLVxcdURDRkRcXHVEQ0ZGLVxcdUREM0RcXHVERDQ5LVxcdURENEVcXHVERDUwLVxcdURENjdcXHVERDZGXFx1REQ3MFxcdURENzMtXFx1REQ3QVxcdUREODdcXHVERDhBLVxcdUREOERcXHVERDkwXFx1REQ5NVxcdUREOTZcXHVEREE0XFx1RERBNVxcdUREQThcXHVEREIxXFx1RERCMlxcdUREQkNcXHVEREMyLVxcdUREQzRcXHVEREQxLVxcdURERDNcXHVERERDLVxcdUREREVcXHVEREUxXFx1RERFM1xcdURERThcXHVEREVGXFx1RERGM1xcdURERkEtXFx1REU0RlxcdURFODAtXFx1REVDNVxcdURFQ0ItXFx1REVEMlxcdURFRDVcXHVERUUwLVxcdURFRTVcXHVERUU5XFx1REVFQlxcdURFRUNcXHVERUYwXFx1REVGMy1cXHVERUZBXFx1REZFMC1cXHVERkVCXXxcXHVEODNFW1xcdUREMEQtXFx1REQzQVxcdUREM0MtXFx1REQ0NVxcdURENDctXFx1REQ3MVxcdURENzMtXFx1REQ3NlxcdUREN0EtXFx1RERBMlxcdUREQTUtXFx1RERBQVxcdUREQUUtXFx1RERDQVxcdUREQ0QtXFx1RERGRlxcdURFNzAtXFx1REU3M1xcdURFNzgtXFx1REU3QVxcdURFODAtXFx1REU4MlxcdURFOTAtXFx1REU5NV0pXFx1RkUwRnwoPzpbXFx1MjYxRFxcdTI2RjlcXHUyNzBBLVxcdTI3MERdfFxcdUQ4M0NbXFx1REY4NVxcdURGQzItXFx1REZDNFxcdURGQzdcXHVERkNBLVxcdURGQ0NdfFxcdUQ4M0RbXFx1REM0MlxcdURDNDNcXHVEQzQ2LVxcdURDNTBcXHVEQzY2LVxcdURDNzhcXHVEQzdDXFx1REM4MS1cXHVEQzgzXFx1REM4NS1cXHVEQzg3XFx1REM4RlxcdURDOTFcXHVEQ0FBXFx1REQ3NFxcdURENzVcXHVERDdBXFx1REQ5MFxcdUREOTVcXHVERDk2XFx1REU0NS1cXHVERTQ3XFx1REU0Qi1cXHVERTRGXFx1REVBM1xcdURFQjQtXFx1REVCNlxcdURFQzBcXHVERUNDXXxcXHVEODNFW1xcdUREMEZcXHVERDE4LVxcdUREMUZcXHVERDI2XFx1REQzMC1cXHVERDM5XFx1REQzQy1cXHVERDNFXFx1RERCNVxcdUREQjZcXHVEREI4XFx1RERCOVxcdUREQkJcXHVERENELVxcdUREQ0ZcXHVEREQxLVxcdURERERdKS9nO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IHN0cmlwQW5zaSA9IHJlcXVpcmUoJ3N0cmlwLWFuc2knKTtcbmNvbnN0IGlzRnVsbHdpZHRoQ29kZVBvaW50ID0gcmVxdWlyZSgnaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQnKTtcbmNvbnN0IGVtb2ppUmVnZXggPSByZXF1aXJlKCdlbW9qaS1yZWdleCcpO1xuXG5jb25zdCBzdHJpbmdXaWR0aCA9IHN0cmluZyA9PiB7XG5cdGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJyB8fCBzdHJpbmcubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRzdHJpbmcgPSBzdHJpcEFuc2koc3RyaW5nKTtcblxuXHRpZiAoc3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoZW1vamlSZWdleCgpLCAnICAnKTtcblxuXHRsZXQgd2lkdGggPSAwO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgY29kZSA9IHN0cmluZy5jb2RlUG9pbnRBdChpKTtcblxuXHRcdC8vIElnbm9yZSBjb250cm9sIGNoYXJhY3RlcnNcblx0XHRpZiAoY29kZSA8PSAweDFGIHx8IChjb2RlID49IDB4N0YgJiYgY29kZSA8PSAweDlGKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gSWdub3JlIGNvbWJpbmluZyBjaGFyYWN0ZXJzXG5cdFx0aWYgKGNvZGUgPj0gMHgzMDAgJiYgY29kZSA8PSAweDM2Rikge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gU3Vycm9nYXRlc1xuXHRcdGlmIChjb2RlID4gMHhGRkZGKSB7XG5cdFx0XHRpKys7XG5cdFx0fVxuXG5cdFx0d2lkdGggKz0gaXNGdWxsd2lkdGhDb2RlUG9pbnQoY29kZSkgPyAyIDogMTtcblx0fVxuXG5cdHJldHVybiB3aWR0aDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nV2lkdGg7XG4vLyBUT0RPOiByZW1vdmUgdGhpcyBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gc3RyaW5nV2lkdGg7XG4iLCIndXNlIHN0cmljdCdcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cdFwiYWxpY2VibHVlXCI6IFsyNDAsIDI0OCwgMjU1XSxcclxuXHRcImFudGlxdWV3aGl0ZVwiOiBbMjUwLCAyMzUsIDIxNV0sXHJcblx0XCJhcXVhXCI6IFswLCAyNTUsIDI1NV0sXHJcblx0XCJhcXVhbWFyaW5lXCI6IFsxMjcsIDI1NSwgMjEyXSxcclxuXHRcImF6dXJlXCI6IFsyNDAsIDI1NSwgMjU1XSxcclxuXHRcImJlaWdlXCI6IFsyNDUsIDI0NSwgMjIwXSxcclxuXHRcImJpc3F1ZVwiOiBbMjU1LCAyMjgsIDE5Nl0sXHJcblx0XCJibGFja1wiOiBbMCwgMCwgMF0sXHJcblx0XCJibGFuY2hlZGFsbW9uZFwiOiBbMjU1LCAyMzUsIDIwNV0sXHJcblx0XCJibHVlXCI6IFswLCAwLCAyNTVdLFxyXG5cdFwiYmx1ZXZpb2xldFwiOiBbMTM4LCA0MywgMjI2XSxcclxuXHRcImJyb3duXCI6IFsxNjUsIDQyLCA0Ml0sXHJcblx0XCJidXJseXdvb2RcIjogWzIyMiwgMTg0LCAxMzVdLFxyXG5cdFwiY2FkZXRibHVlXCI6IFs5NSwgMTU4LCAxNjBdLFxyXG5cdFwiY2hhcnRyZXVzZVwiOiBbMTI3LCAyNTUsIDBdLFxyXG5cdFwiY2hvY29sYXRlXCI6IFsyMTAsIDEwNSwgMzBdLFxyXG5cdFwiY29yYWxcIjogWzI1NSwgMTI3LCA4MF0sXHJcblx0XCJjb3JuZmxvd2VyYmx1ZVwiOiBbMTAwLCAxNDksIDIzN10sXHJcblx0XCJjb3Juc2lsa1wiOiBbMjU1LCAyNDgsIDIyMF0sXHJcblx0XCJjcmltc29uXCI6IFsyMjAsIDIwLCA2MF0sXHJcblx0XCJjeWFuXCI6IFswLCAyNTUsIDI1NV0sXHJcblx0XCJkYXJrYmx1ZVwiOiBbMCwgMCwgMTM5XSxcclxuXHRcImRhcmtjeWFuXCI6IFswLCAxMzksIDEzOV0sXHJcblx0XCJkYXJrZ29sZGVucm9kXCI6IFsxODQsIDEzNCwgMTFdLFxyXG5cdFwiZGFya2dyYXlcIjogWzE2OSwgMTY5LCAxNjldLFxyXG5cdFwiZGFya2dyZWVuXCI6IFswLCAxMDAsIDBdLFxyXG5cdFwiZGFya2dyZXlcIjogWzE2OSwgMTY5LCAxNjldLFxyXG5cdFwiZGFya2toYWtpXCI6IFsxODksIDE4MywgMTA3XSxcclxuXHRcImRhcmttYWdlbnRhXCI6IFsxMzksIDAsIDEzOV0sXHJcblx0XCJkYXJrb2xpdmVncmVlblwiOiBbODUsIDEwNywgNDddLFxyXG5cdFwiZGFya29yYW5nZVwiOiBbMjU1LCAxNDAsIDBdLFxyXG5cdFwiZGFya29yY2hpZFwiOiBbMTUzLCA1MCwgMjA0XSxcclxuXHRcImRhcmtyZWRcIjogWzEzOSwgMCwgMF0sXHJcblx0XCJkYXJrc2FsbW9uXCI6IFsyMzMsIDE1MCwgMTIyXSxcclxuXHRcImRhcmtzZWFncmVlblwiOiBbMTQzLCAxODgsIDE0M10sXHJcblx0XCJkYXJrc2xhdGVibHVlXCI6IFs3MiwgNjEsIDEzOV0sXHJcblx0XCJkYXJrc2xhdGVncmF5XCI6IFs0NywgNzksIDc5XSxcclxuXHRcImRhcmtzbGF0ZWdyZXlcIjogWzQ3LCA3OSwgNzldLFxyXG5cdFwiZGFya3R1cnF1b2lzZVwiOiBbMCwgMjA2LCAyMDldLFxyXG5cdFwiZGFya3Zpb2xldFwiOiBbMTQ4LCAwLCAyMTFdLFxyXG5cdFwiZGVlcHBpbmtcIjogWzI1NSwgMjAsIDE0N10sXHJcblx0XCJkZWVwc2t5Ymx1ZVwiOiBbMCwgMTkxLCAyNTVdLFxyXG5cdFwiZGltZ3JheVwiOiBbMTA1LCAxMDUsIDEwNV0sXHJcblx0XCJkaW1ncmV5XCI6IFsxMDUsIDEwNSwgMTA1XSxcclxuXHRcImRvZGdlcmJsdWVcIjogWzMwLCAxNDQsIDI1NV0sXHJcblx0XCJmaXJlYnJpY2tcIjogWzE3OCwgMzQsIDM0XSxcclxuXHRcImZsb3JhbHdoaXRlXCI6IFsyNTUsIDI1MCwgMjQwXSxcclxuXHRcImZvcmVzdGdyZWVuXCI6IFszNCwgMTM5LCAzNF0sXHJcblx0XCJmdWNoc2lhXCI6IFsyNTUsIDAsIDI1NV0sXHJcblx0XCJnYWluc2Jvcm9cIjogWzIyMCwgMjIwLCAyMjBdLFxyXG5cdFwiZ2hvc3R3aGl0ZVwiOiBbMjQ4LCAyNDgsIDI1NV0sXHJcblx0XCJnb2xkXCI6IFsyNTUsIDIxNSwgMF0sXHJcblx0XCJnb2xkZW5yb2RcIjogWzIxOCwgMTY1LCAzMl0sXHJcblx0XCJncmF5XCI6IFsxMjgsIDEyOCwgMTI4XSxcclxuXHRcImdyZWVuXCI6IFswLCAxMjgsIDBdLFxyXG5cdFwiZ3JlZW55ZWxsb3dcIjogWzE3MywgMjU1LCA0N10sXHJcblx0XCJncmV5XCI6IFsxMjgsIDEyOCwgMTI4XSxcclxuXHRcImhvbmV5ZGV3XCI6IFsyNDAsIDI1NSwgMjQwXSxcclxuXHRcImhvdHBpbmtcIjogWzI1NSwgMTA1LCAxODBdLFxyXG5cdFwiaW5kaWFucmVkXCI6IFsyMDUsIDkyLCA5Ml0sXHJcblx0XCJpbmRpZ29cIjogWzc1LCAwLCAxMzBdLFxyXG5cdFwiaXZvcnlcIjogWzI1NSwgMjU1LCAyNDBdLFxyXG5cdFwia2hha2lcIjogWzI0MCwgMjMwLCAxNDBdLFxyXG5cdFwibGF2ZW5kZXJcIjogWzIzMCwgMjMwLCAyNTBdLFxyXG5cdFwibGF2ZW5kZXJibHVzaFwiOiBbMjU1LCAyNDAsIDI0NV0sXHJcblx0XCJsYXduZ3JlZW5cIjogWzEyNCwgMjUyLCAwXSxcclxuXHRcImxlbW9uY2hpZmZvblwiOiBbMjU1LCAyNTAsIDIwNV0sXHJcblx0XCJsaWdodGJsdWVcIjogWzE3MywgMjE2LCAyMzBdLFxyXG5cdFwibGlnaHRjb3JhbFwiOiBbMjQwLCAxMjgsIDEyOF0sXHJcblx0XCJsaWdodGN5YW5cIjogWzIyNCwgMjU1LCAyNTVdLFxyXG5cdFwibGlnaHRnb2xkZW5yb2R5ZWxsb3dcIjogWzI1MCwgMjUwLCAyMTBdLFxyXG5cdFwibGlnaHRncmF5XCI6IFsyMTEsIDIxMSwgMjExXSxcclxuXHRcImxpZ2h0Z3JlZW5cIjogWzE0NCwgMjM4LCAxNDRdLFxyXG5cdFwibGlnaHRncmV5XCI6IFsyMTEsIDIxMSwgMjExXSxcclxuXHRcImxpZ2h0cGlua1wiOiBbMjU1LCAxODIsIDE5M10sXHJcblx0XCJsaWdodHNhbG1vblwiOiBbMjU1LCAxNjAsIDEyMl0sXHJcblx0XCJsaWdodHNlYWdyZWVuXCI6IFszMiwgMTc4LCAxNzBdLFxyXG5cdFwibGlnaHRza3libHVlXCI6IFsxMzUsIDIwNiwgMjUwXSxcclxuXHRcImxpZ2h0c2xhdGVncmF5XCI6IFsxMTksIDEzNiwgMTUzXSxcclxuXHRcImxpZ2h0c2xhdGVncmV5XCI6IFsxMTksIDEzNiwgMTUzXSxcclxuXHRcImxpZ2h0c3RlZWxibHVlXCI6IFsxNzYsIDE5NiwgMjIyXSxcclxuXHRcImxpZ2h0eWVsbG93XCI6IFsyNTUsIDI1NSwgMjI0XSxcclxuXHRcImxpbWVcIjogWzAsIDI1NSwgMF0sXHJcblx0XCJsaW1lZ3JlZW5cIjogWzUwLCAyMDUsIDUwXSxcclxuXHRcImxpbmVuXCI6IFsyNTAsIDI0MCwgMjMwXSxcclxuXHRcIm1hZ2VudGFcIjogWzI1NSwgMCwgMjU1XSxcclxuXHRcIm1hcm9vblwiOiBbMTI4LCAwLCAwXSxcclxuXHRcIm1lZGl1bWFxdWFtYXJpbmVcIjogWzEwMiwgMjA1LCAxNzBdLFxyXG5cdFwibWVkaXVtYmx1ZVwiOiBbMCwgMCwgMjA1XSxcclxuXHRcIm1lZGl1bW9yY2hpZFwiOiBbMTg2LCA4NSwgMjExXSxcclxuXHRcIm1lZGl1bXB1cnBsZVwiOiBbMTQ3LCAxMTIsIDIxOV0sXHJcblx0XCJtZWRpdW1zZWFncmVlblwiOiBbNjAsIDE3OSwgMTEzXSxcclxuXHRcIm1lZGl1bXNsYXRlYmx1ZVwiOiBbMTIzLCAxMDQsIDIzOF0sXHJcblx0XCJtZWRpdW1zcHJpbmdncmVlblwiOiBbMCwgMjUwLCAxNTRdLFxyXG5cdFwibWVkaXVtdHVycXVvaXNlXCI6IFs3MiwgMjA5LCAyMDRdLFxyXG5cdFwibWVkaXVtdmlvbGV0cmVkXCI6IFsxOTksIDIxLCAxMzNdLFxyXG5cdFwibWlkbmlnaHRibHVlXCI6IFsyNSwgMjUsIDExMl0sXHJcblx0XCJtaW50Y3JlYW1cIjogWzI0NSwgMjU1LCAyNTBdLFxyXG5cdFwibWlzdHlyb3NlXCI6IFsyNTUsIDIyOCwgMjI1XSxcclxuXHRcIm1vY2Nhc2luXCI6IFsyNTUsIDIyOCwgMTgxXSxcclxuXHRcIm5hdmFqb3doaXRlXCI6IFsyNTUsIDIyMiwgMTczXSxcclxuXHRcIm5hdnlcIjogWzAsIDAsIDEyOF0sXHJcblx0XCJvbGRsYWNlXCI6IFsyNTMsIDI0NSwgMjMwXSxcclxuXHRcIm9saXZlXCI6IFsxMjgsIDEyOCwgMF0sXHJcblx0XCJvbGl2ZWRyYWJcIjogWzEwNywgMTQyLCAzNV0sXHJcblx0XCJvcmFuZ2VcIjogWzI1NSwgMTY1LCAwXSxcclxuXHRcIm9yYW5nZXJlZFwiOiBbMjU1LCA2OSwgMF0sXHJcblx0XCJvcmNoaWRcIjogWzIxOCwgMTEyLCAyMTRdLFxyXG5cdFwicGFsZWdvbGRlbnJvZFwiOiBbMjM4LCAyMzIsIDE3MF0sXHJcblx0XCJwYWxlZ3JlZW5cIjogWzE1MiwgMjUxLCAxNTJdLFxyXG5cdFwicGFsZXR1cnF1b2lzZVwiOiBbMTc1LCAyMzgsIDIzOF0sXHJcblx0XCJwYWxldmlvbGV0cmVkXCI6IFsyMTksIDExMiwgMTQ3XSxcclxuXHRcInBhcGF5YXdoaXBcIjogWzI1NSwgMjM5LCAyMTNdLFxyXG5cdFwicGVhY2hwdWZmXCI6IFsyNTUsIDIxOCwgMTg1XSxcclxuXHRcInBlcnVcIjogWzIwNSwgMTMzLCA2M10sXHJcblx0XCJwaW5rXCI6IFsyNTUsIDE5MiwgMjAzXSxcclxuXHRcInBsdW1cIjogWzIyMSwgMTYwLCAyMjFdLFxyXG5cdFwicG93ZGVyYmx1ZVwiOiBbMTc2LCAyMjQsIDIzMF0sXHJcblx0XCJwdXJwbGVcIjogWzEyOCwgMCwgMTI4XSxcclxuXHRcInJlYmVjY2FwdXJwbGVcIjogWzEwMiwgNTEsIDE1M10sXHJcblx0XCJyZWRcIjogWzI1NSwgMCwgMF0sXHJcblx0XCJyb3N5YnJvd25cIjogWzE4OCwgMTQzLCAxNDNdLFxyXG5cdFwicm95YWxibHVlXCI6IFs2NSwgMTA1LCAyMjVdLFxyXG5cdFwic2FkZGxlYnJvd25cIjogWzEzOSwgNjksIDE5XSxcclxuXHRcInNhbG1vblwiOiBbMjUwLCAxMjgsIDExNF0sXHJcblx0XCJzYW5keWJyb3duXCI6IFsyNDQsIDE2NCwgOTZdLFxyXG5cdFwic2VhZ3JlZW5cIjogWzQ2LCAxMzksIDg3XSxcclxuXHRcInNlYXNoZWxsXCI6IFsyNTUsIDI0NSwgMjM4XSxcclxuXHRcInNpZW5uYVwiOiBbMTYwLCA4MiwgNDVdLFxyXG5cdFwic2lsdmVyXCI6IFsxOTIsIDE5MiwgMTkyXSxcclxuXHRcInNreWJsdWVcIjogWzEzNSwgMjA2LCAyMzVdLFxyXG5cdFwic2xhdGVibHVlXCI6IFsxMDYsIDkwLCAyMDVdLFxyXG5cdFwic2xhdGVncmF5XCI6IFsxMTIsIDEyOCwgMTQ0XSxcclxuXHRcInNsYXRlZ3JleVwiOiBbMTEyLCAxMjgsIDE0NF0sXHJcblx0XCJzbm93XCI6IFsyNTUsIDI1MCwgMjUwXSxcclxuXHRcInNwcmluZ2dyZWVuXCI6IFswLCAyNTUsIDEyN10sXHJcblx0XCJzdGVlbGJsdWVcIjogWzcwLCAxMzAsIDE4MF0sXHJcblx0XCJ0YW5cIjogWzIxMCwgMTgwLCAxNDBdLFxyXG5cdFwidGVhbFwiOiBbMCwgMTI4LCAxMjhdLFxyXG5cdFwidGhpc3RsZVwiOiBbMjE2LCAxOTEsIDIxNl0sXHJcblx0XCJ0b21hdG9cIjogWzI1NSwgOTksIDcxXSxcclxuXHRcInR1cnF1b2lzZVwiOiBbNjQsIDIyNCwgMjA4XSxcclxuXHRcInZpb2xldFwiOiBbMjM4LCAxMzAsIDIzOF0sXHJcblx0XCJ3aGVhdFwiOiBbMjQ1LCAyMjIsIDE3OV0sXHJcblx0XCJ3aGl0ZVwiOiBbMjU1LCAyNTUsIDI1NV0sXHJcblx0XCJ3aGl0ZXNtb2tlXCI6IFsyNDUsIDI0NSwgMjQ1XSxcclxuXHRcInllbGxvd1wiOiBbMjU1LCAyNTUsIDBdLFxyXG5cdFwieWVsbG93Z3JlZW5cIjogWzE1NCwgMjA1LCA1MF1cclxufTtcclxuIiwiLyogTUlUIGxpY2Vuc2UgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW1peGVkLW9wZXJhdG9ycyAqL1xuY29uc3QgY3NzS2V5d29yZHMgPSByZXF1aXJlKCdjb2xvci1uYW1lJyk7XG5cbi8vIE5PVEU6IGNvbnZlcnNpb25zIHNob3VsZCBvbmx5IHJldHVybiBwcmltaXRpdmUgdmFsdWVzIChpLmUuIGFycmF5cywgb3Jcbi8vICAgICAgIHZhbHVlcyB0aGF0IGdpdmUgY29ycmVjdCBgdHlwZW9mYCByZXN1bHRzKS5cbi8vICAgICAgIGRvIG5vdCB1c2UgYm94IHZhbHVlcyB0eXBlcyAoaS5lLiBOdW1iZXIoKSwgU3RyaW5nKCksIGV0Yy4pXG5cbmNvbnN0IHJldmVyc2VLZXl3b3JkcyA9IHt9O1xuZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY3NzS2V5d29yZHMpKSB7XG5cdHJldmVyc2VLZXl3b3Jkc1tjc3NLZXl3b3Jkc1trZXldXSA9IGtleTtcbn1cblxuY29uc3QgY29udmVydCA9IHtcblx0cmdiOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ3JnYid9LFxuXHRoc2w6IHtjaGFubmVsczogMywgbGFiZWxzOiAnaHNsJ30sXG5cdGhzdjoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdoc3YnfSxcblx0aHdiOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2h3Yid9LFxuXHRjbXlrOiB7Y2hhbm5lbHM6IDQsIGxhYmVsczogJ2NteWsnfSxcblx0eHl6OiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ3h5eid9LFxuXHRsYWI6IHtjaGFubmVsczogMywgbGFiZWxzOiAnbGFiJ30sXG5cdGxjaDoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdsY2gnfSxcblx0aGV4OiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydoZXgnXX0sXG5cdGtleXdvcmQ6IHtjaGFubmVsczogMSwgbGFiZWxzOiBbJ2tleXdvcmQnXX0sXG5cdGFuc2kxNjoge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsnYW5zaTE2J119LFxuXHRhbnNpMjU2OiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydhbnNpMjU2J119LFxuXHRoY2c6IHtjaGFubmVsczogMywgbGFiZWxzOiBbJ2gnLCAnYycsICdnJ119LFxuXHRhcHBsZToge2NoYW5uZWxzOiAzLCBsYWJlbHM6IFsncjE2JywgJ2cxNicsICdiMTYnXX0sXG5cdGdyYXk6IHtjaGFubmVsczogMSwgbGFiZWxzOiBbJ2dyYXknXX1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29udmVydDtcblxuLy8gSGlkZSAuY2hhbm5lbHMgYW5kIC5sYWJlbHMgcHJvcGVydGllc1xuZm9yIChjb25zdCBtb2RlbCBvZiBPYmplY3Qua2V5cyhjb252ZXJ0KSkge1xuXHRpZiAoISgnY2hhbm5lbHMnIGluIGNvbnZlcnRbbW9kZWxdKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignbWlzc2luZyBjaGFubmVscyBwcm9wZXJ0eTogJyArIG1vZGVsKTtcblx0fVxuXG5cdGlmICghKCdsYWJlbHMnIGluIGNvbnZlcnRbbW9kZWxdKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignbWlzc2luZyBjaGFubmVsIGxhYmVscyBwcm9wZXJ0eTogJyArIG1vZGVsKTtcblx0fVxuXG5cdGlmIChjb252ZXJ0W21vZGVsXS5sYWJlbHMubGVuZ3RoICE9PSBjb252ZXJ0W21vZGVsXS5jaGFubmVscykge1xuXHRcdHRocm93IG5ldyBFcnJvcignY2hhbm5lbCBhbmQgbGFiZWwgY291bnRzIG1pc21hdGNoOiAnICsgbW9kZWwpO1xuXHR9XG5cblx0Y29uc3Qge2NoYW5uZWxzLCBsYWJlbHN9ID0gY29udmVydFttb2RlbF07XG5cdGRlbGV0ZSBjb252ZXJ0W21vZGVsXS5jaGFubmVscztcblx0ZGVsZXRlIGNvbnZlcnRbbW9kZWxdLmxhYmVscztcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnZlcnRbbW9kZWxdLCAnY2hhbm5lbHMnLCB7dmFsdWU6IGNoYW5uZWxzfSk7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W21vZGVsXSwgJ2xhYmVscycsIHt2YWx1ZTogbGFiZWxzfSk7XG59XG5cbmNvbnZlcnQucmdiLmhzbCA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgciA9IHJnYlswXSAvIDI1NTtcblx0Y29uc3QgZyA9IHJnYlsxXSAvIDI1NTtcblx0Y29uc3QgYiA9IHJnYlsyXSAvIDI1NTtcblx0Y29uc3QgbWluID0gTWF0aC5taW4ociwgZywgYik7XG5cdGNvbnN0IG1heCA9IE1hdGgubWF4KHIsIGcsIGIpO1xuXHRjb25zdCBkZWx0YSA9IG1heCAtIG1pbjtcblx0bGV0IGg7XG5cdGxldCBzO1xuXG5cdGlmIChtYXggPT09IG1pbikge1xuXHRcdGggPSAwO1xuXHR9IGVsc2UgaWYgKHIgPT09IG1heCkge1xuXHRcdGggPSAoZyAtIGIpIC8gZGVsdGE7XG5cdH0gZWxzZSBpZiAoZyA9PT0gbWF4KSB7XG5cdFx0aCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XG5cdH0gZWxzZSBpZiAoYiA9PT0gbWF4KSB7XG5cdFx0aCA9IDQgKyAociAtIGcpIC8gZGVsdGE7XG5cdH1cblxuXHRoID0gTWF0aC5taW4oaCAqIDYwLCAzNjApO1xuXG5cdGlmIChoIDwgMCkge1xuXHRcdGggKz0gMzYwO1xuXHR9XG5cblx0Y29uc3QgbCA9IChtaW4gKyBtYXgpIC8gMjtcblxuXHRpZiAobWF4ID09PSBtaW4pIHtcblx0XHRzID0gMDtcblx0fSBlbHNlIGlmIChsIDw9IDAuNSkge1xuXHRcdHMgPSBkZWx0YSAvIChtYXggKyBtaW4pO1xuXHR9IGVsc2Uge1xuXHRcdHMgPSBkZWx0YSAvICgyIC0gbWF4IC0gbWluKTtcblx0fVxuXG5cdHJldHVybiBbaCwgcyAqIDEwMCwgbCAqIDEwMF07XG59O1xuXG5jb252ZXJ0LnJnYi5oc3YgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGxldCByZGlmO1xuXHRsZXQgZ2RpZjtcblx0bGV0IGJkaWY7XG5cdGxldCBoO1xuXHRsZXQgcztcblxuXHRjb25zdCByID0gcmdiWzBdIC8gMjU1O1xuXHRjb25zdCBnID0gcmdiWzFdIC8gMjU1O1xuXHRjb25zdCBiID0gcmdiWzJdIC8gMjU1O1xuXHRjb25zdCB2ID0gTWF0aC5tYXgociwgZywgYik7XG5cdGNvbnN0IGRpZmYgPSB2IC0gTWF0aC5taW4ociwgZywgYik7XG5cdGNvbnN0IGRpZmZjID0gZnVuY3Rpb24gKGMpIHtcblx0XHRyZXR1cm4gKHYgLSBjKSAvIDYgLyBkaWZmICsgMSAvIDI7XG5cdH07XG5cblx0aWYgKGRpZmYgPT09IDApIHtcblx0XHRoID0gMDtcblx0XHRzID0gMDtcblx0fSBlbHNlIHtcblx0XHRzID0gZGlmZiAvIHY7XG5cdFx0cmRpZiA9IGRpZmZjKHIpO1xuXHRcdGdkaWYgPSBkaWZmYyhnKTtcblx0XHRiZGlmID0gZGlmZmMoYik7XG5cblx0XHRpZiAociA9PT0gdikge1xuXHRcdFx0aCA9IGJkaWYgLSBnZGlmO1xuXHRcdH0gZWxzZSBpZiAoZyA9PT0gdikge1xuXHRcdFx0aCA9ICgxIC8gMykgKyByZGlmIC0gYmRpZjtcblx0XHR9IGVsc2UgaWYgKGIgPT09IHYpIHtcblx0XHRcdGggPSAoMiAvIDMpICsgZ2RpZiAtIHJkaWY7XG5cdFx0fVxuXG5cdFx0aWYgKGggPCAwKSB7XG5cdFx0XHRoICs9IDE7XG5cdFx0fSBlbHNlIGlmIChoID4gMSkge1xuXHRcdFx0aCAtPSAxO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBbXG5cdFx0aCAqIDM2MCxcblx0XHRzICogMTAwLFxuXHRcdHYgKiAxMDBcblx0XTtcbn07XG5cbmNvbnZlcnQucmdiLmh3YiA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgciA9IHJnYlswXTtcblx0Y29uc3QgZyA9IHJnYlsxXTtcblx0bGV0IGIgPSByZ2JbMl07XG5cdGNvbnN0IGggPSBjb252ZXJ0LnJnYi5oc2wocmdiKVswXTtcblx0Y29uc3QgdyA9IDEgLyAyNTUgKiBNYXRoLm1pbihyLCBNYXRoLm1pbihnLCBiKSk7XG5cblx0YiA9IDEgLSAxIC8gMjU1ICogTWF0aC5tYXgociwgTWF0aC5tYXgoZywgYikpO1xuXG5cdHJldHVybiBbaCwgdyAqIDEwMCwgYiAqIDEwMF07XG59O1xuXG5jb252ZXJ0LnJnYi5jbXlrID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCByID0gcmdiWzBdIC8gMjU1O1xuXHRjb25zdCBnID0gcmdiWzFdIC8gMjU1O1xuXHRjb25zdCBiID0gcmdiWzJdIC8gMjU1O1xuXG5cdGNvbnN0IGsgPSBNYXRoLm1pbigxIC0gciwgMSAtIGcsIDEgLSBiKTtcblx0Y29uc3QgYyA9ICgxIC0gciAtIGspIC8gKDEgLSBrKSB8fCAwO1xuXHRjb25zdCBtID0gKDEgLSBnIC0gaykgLyAoMSAtIGspIHx8IDA7XG5cdGNvbnN0IHkgPSAoMSAtIGIgLSBrKSAvICgxIC0gaykgfHwgMDtcblxuXHRyZXR1cm4gW2MgKiAxMDAsIG0gKiAxMDAsIHkgKiAxMDAsIGsgKiAxMDBdO1xufTtcblxuZnVuY3Rpb24gY29tcGFyYXRpdmVEaXN0YW5jZSh4LCB5KSB7XG5cdC8qXG5cdFx0U2VlIGh0dHBzOi8vZW4ubS53aWtpcGVkaWEub3JnL3dpa2kvRXVjbGlkZWFuX2Rpc3RhbmNlI1NxdWFyZWRfRXVjbGlkZWFuX2Rpc3RhbmNlXG5cdCovXG5cdHJldHVybiAoXG5cdFx0KCh4WzBdIC0geVswXSkgKiogMikgK1xuXHRcdCgoeFsxXSAtIHlbMV0pICoqIDIpICtcblx0XHQoKHhbMl0gLSB5WzJdKSAqKiAyKVxuXHQpO1xufVxuXG5jb252ZXJ0LnJnYi5rZXl3b3JkID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCByZXZlcnNlZCA9IHJldmVyc2VLZXl3b3Jkc1tyZ2JdO1xuXHRpZiAocmV2ZXJzZWQpIHtcblx0XHRyZXR1cm4gcmV2ZXJzZWQ7XG5cdH1cblxuXHRsZXQgY3VycmVudENsb3Nlc3REaXN0YW5jZSA9IEluZmluaXR5O1xuXHRsZXQgY3VycmVudENsb3Nlc3RLZXl3b3JkO1xuXG5cdGZvciAoY29uc3Qga2V5d29yZCBvZiBPYmplY3Qua2V5cyhjc3NLZXl3b3JkcykpIHtcblx0XHRjb25zdCB2YWx1ZSA9IGNzc0tleXdvcmRzW2tleXdvcmRdO1xuXG5cdFx0Ly8gQ29tcHV0ZSBjb21wYXJhdGl2ZSBkaXN0YW5jZVxuXHRcdGNvbnN0IGRpc3RhbmNlID0gY29tcGFyYXRpdmVEaXN0YW5jZShyZ2IsIHZhbHVlKTtcblxuXHRcdC8vIENoZWNrIGlmIGl0cyBsZXNzLCBpZiBzbyBzZXQgYXMgY2xvc2VzdFxuXHRcdGlmIChkaXN0YW5jZSA8IGN1cnJlbnRDbG9zZXN0RGlzdGFuY2UpIHtcblx0XHRcdGN1cnJlbnRDbG9zZXN0RGlzdGFuY2UgPSBkaXN0YW5jZTtcblx0XHRcdGN1cnJlbnRDbG9zZXN0S2V5d29yZCA9IGtleXdvcmQ7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGN1cnJlbnRDbG9zZXN0S2V5d29yZDtcbn07XG5cbmNvbnZlcnQua2V5d29yZC5yZ2IgPSBmdW5jdGlvbiAoa2V5d29yZCkge1xuXHRyZXR1cm4gY3NzS2V5d29yZHNba2V5d29yZF07XG59O1xuXG5jb252ZXJ0LnJnYi54eXogPSBmdW5jdGlvbiAocmdiKSB7XG5cdGxldCByID0gcmdiWzBdIC8gMjU1O1xuXHRsZXQgZyA9IHJnYlsxXSAvIDI1NTtcblx0bGV0IGIgPSByZ2JbMl0gLyAyNTU7XG5cblx0Ly8gQXNzdW1lIHNSR0Jcblx0ciA9IHIgPiAwLjA0MDQ1ID8gKCgociArIDAuMDU1KSAvIDEuMDU1KSAqKiAyLjQpIDogKHIgLyAxMi45Mik7XG5cdGcgPSBnID4gMC4wNDA0NSA/ICgoKGcgKyAwLjA1NSkgLyAxLjA1NSkgKiogMi40KSA6IChnIC8gMTIuOTIpO1xuXHRiID0gYiA+IDAuMDQwNDUgPyAoKChiICsgMC4wNTUpIC8gMS4wNTUpICoqIDIuNCkgOiAoYiAvIDEyLjkyKTtcblxuXHRjb25zdCB4ID0gKHIgKiAwLjQxMjQpICsgKGcgKiAwLjM1NzYpICsgKGIgKiAwLjE4MDUpO1xuXHRjb25zdCB5ID0gKHIgKiAwLjIxMjYpICsgKGcgKiAwLjcxNTIpICsgKGIgKiAwLjA3MjIpO1xuXHRjb25zdCB6ID0gKHIgKiAwLjAxOTMpICsgKGcgKiAwLjExOTIpICsgKGIgKiAwLjk1MDUpO1xuXG5cdHJldHVybiBbeCAqIDEwMCwgeSAqIDEwMCwgeiAqIDEwMF07XG59O1xuXG5jb252ZXJ0LnJnYi5sYWIgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHh5eiA9IGNvbnZlcnQucmdiLnh5eihyZ2IpO1xuXHRsZXQgeCA9IHh5elswXTtcblx0bGV0IHkgPSB4eXpbMV07XG5cdGxldCB6ID0geHl6WzJdO1xuXG5cdHggLz0gOTUuMDQ3O1xuXHR5IC89IDEwMDtcblx0eiAvPSAxMDguODgzO1xuXG5cdHggPSB4ID4gMC4wMDg4NTYgPyAoeCAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHgpICsgKDE2IC8gMTE2KTtcblx0eSA9IHkgPiAwLjAwODg1NiA/ICh5ICoqICgxIC8gMykpIDogKDcuNzg3ICogeSkgKyAoMTYgLyAxMTYpO1xuXHR6ID0geiA+IDAuMDA4ODU2ID8gKHogKiogKDEgLyAzKSkgOiAoNy43ODcgKiB6KSArICgxNiAvIDExNik7XG5cblx0Y29uc3QgbCA9ICgxMTYgKiB5KSAtIDE2O1xuXHRjb25zdCBhID0gNTAwICogKHggLSB5KTtcblx0Y29uc3QgYiA9IDIwMCAqICh5IC0geik7XG5cblx0cmV0dXJuIFtsLCBhLCBiXTtcbn07XG5cbmNvbnZlcnQuaHNsLnJnYiA9IGZ1bmN0aW9uIChoc2wpIHtcblx0Y29uc3QgaCA9IGhzbFswXSAvIDM2MDtcblx0Y29uc3QgcyA9IGhzbFsxXSAvIDEwMDtcblx0Y29uc3QgbCA9IGhzbFsyXSAvIDEwMDtcblx0bGV0IHQyO1xuXHRsZXQgdDM7XG5cdGxldCB2YWw7XG5cblx0aWYgKHMgPT09IDApIHtcblx0XHR2YWwgPSBsICogMjU1O1xuXHRcdHJldHVybiBbdmFsLCB2YWwsIHZhbF07XG5cdH1cblxuXHRpZiAobCA8IDAuNSkge1xuXHRcdHQyID0gbCAqICgxICsgcyk7XG5cdH0gZWxzZSB7XG5cdFx0dDIgPSBsICsgcyAtIGwgKiBzO1xuXHR9XG5cblx0Y29uc3QgdDEgPSAyICogbCAtIHQyO1xuXG5cdGNvbnN0IHJnYiA9IFswLCAwLCAwXTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcblx0XHR0MyA9IGggKyAxIC8gMyAqIC0oaSAtIDEpO1xuXHRcdGlmICh0MyA8IDApIHtcblx0XHRcdHQzKys7XG5cdFx0fVxuXG5cdFx0aWYgKHQzID4gMSkge1xuXHRcdFx0dDMtLTtcblx0XHR9XG5cblx0XHRpZiAoNiAqIHQzIDwgMSkge1xuXHRcdFx0dmFsID0gdDEgKyAodDIgLSB0MSkgKiA2ICogdDM7XG5cdFx0fSBlbHNlIGlmICgyICogdDMgPCAxKSB7XG5cdFx0XHR2YWwgPSB0Mjtcblx0XHR9IGVsc2UgaWYgKDMgKiB0MyA8IDIpIHtcblx0XHRcdHZhbCA9IHQxICsgKHQyIC0gdDEpICogKDIgLyAzIC0gdDMpICogNjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFsID0gdDE7XG5cdFx0fVxuXG5cdFx0cmdiW2ldID0gdmFsICogMjU1O1xuXHR9XG5cblx0cmV0dXJuIHJnYjtcbn07XG5cbmNvbnZlcnQuaHNsLmhzdiA9IGZ1bmN0aW9uIChoc2wpIHtcblx0Y29uc3QgaCA9IGhzbFswXTtcblx0bGV0IHMgPSBoc2xbMV0gLyAxMDA7XG5cdGxldCBsID0gaHNsWzJdIC8gMTAwO1xuXHRsZXQgc21pbiA9IHM7XG5cdGNvbnN0IGxtaW4gPSBNYXRoLm1heChsLCAwLjAxKTtcblxuXHRsICo9IDI7XG5cdHMgKj0gKGwgPD0gMSkgPyBsIDogMiAtIGw7XG5cdHNtaW4gKj0gbG1pbiA8PSAxID8gbG1pbiA6IDIgLSBsbWluO1xuXHRjb25zdCB2ID0gKGwgKyBzKSAvIDI7XG5cdGNvbnN0IHN2ID0gbCA9PT0gMCA/ICgyICogc21pbikgLyAobG1pbiArIHNtaW4pIDogKDIgKiBzKSAvIChsICsgcyk7XG5cblx0cmV0dXJuIFtoLCBzdiAqIDEwMCwgdiAqIDEwMF07XG59O1xuXG5jb252ZXJ0Lmhzdi5yZ2IgPSBmdW5jdGlvbiAoaHN2KSB7XG5cdGNvbnN0IGggPSBoc3ZbMF0gLyA2MDtcblx0Y29uc3QgcyA9IGhzdlsxXSAvIDEwMDtcblx0bGV0IHYgPSBoc3ZbMl0gLyAxMDA7XG5cdGNvbnN0IGhpID0gTWF0aC5mbG9vcihoKSAlIDY7XG5cblx0Y29uc3QgZiA9IGggLSBNYXRoLmZsb29yKGgpO1xuXHRjb25zdCBwID0gMjU1ICogdiAqICgxIC0gcyk7XG5cdGNvbnN0IHEgPSAyNTUgKiB2ICogKDEgLSAocyAqIGYpKTtcblx0Y29uc3QgdCA9IDI1NSAqIHYgKiAoMSAtIChzICogKDEgLSBmKSkpO1xuXHR2ICo9IDI1NTtcblxuXHRzd2l0Y2ggKGhpKSB7XG5cdFx0Y2FzZSAwOlxuXHRcdFx0cmV0dXJuIFt2LCB0LCBwXTtcblx0XHRjYXNlIDE6XG5cdFx0XHRyZXR1cm4gW3EsIHYsIHBdO1xuXHRcdGNhc2UgMjpcblx0XHRcdHJldHVybiBbcCwgdiwgdF07XG5cdFx0Y2FzZSAzOlxuXHRcdFx0cmV0dXJuIFtwLCBxLCB2XTtcblx0XHRjYXNlIDQ6XG5cdFx0XHRyZXR1cm4gW3QsIHAsIHZdO1xuXHRcdGNhc2UgNTpcblx0XHRcdHJldHVybiBbdiwgcCwgcV07XG5cdH1cbn07XG5cbmNvbnZlcnQuaHN2LmhzbCA9IGZ1bmN0aW9uIChoc3YpIHtcblx0Y29uc3QgaCA9IGhzdlswXTtcblx0Y29uc3QgcyA9IGhzdlsxXSAvIDEwMDtcblx0Y29uc3QgdiA9IGhzdlsyXSAvIDEwMDtcblx0Y29uc3Qgdm1pbiA9IE1hdGgubWF4KHYsIDAuMDEpO1xuXHRsZXQgc2w7XG5cdGxldCBsO1xuXG5cdGwgPSAoMiAtIHMpICogdjtcblx0Y29uc3QgbG1pbiA9ICgyIC0gcykgKiB2bWluO1xuXHRzbCA9IHMgKiB2bWluO1xuXHRzbCAvPSAobG1pbiA8PSAxKSA/IGxtaW4gOiAyIC0gbG1pbjtcblx0c2wgPSBzbCB8fCAwO1xuXHRsIC89IDI7XG5cblx0cmV0dXJuIFtoLCBzbCAqIDEwMCwgbCAqIDEwMF07XG59O1xuXG4vLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MtY29sb3IvI2h3Yi10by1yZ2JcbmNvbnZlcnQuaHdiLnJnYiA9IGZ1bmN0aW9uIChod2IpIHtcblx0Y29uc3QgaCA9IGh3YlswXSAvIDM2MDtcblx0bGV0IHdoID0gaHdiWzFdIC8gMTAwO1xuXHRsZXQgYmwgPSBod2JbMl0gLyAxMDA7XG5cdGNvbnN0IHJhdGlvID0gd2ggKyBibDtcblx0bGV0IGY7XG5cblx0Ly8gV2ggKyBibCBjYW50IGJlID4gMVxuXHRpZiAocmF0aW8gPiAxKSB7XG5cdFx0d2ggLz0gcmF0aW87XG5cdFx0YmwgLz0gcmF0aW87XG5cdH1cblxuXHRjb25zdCBpID0gTWF0aC5mbG9vcig2ICogaCk7XG5cdGNvbnN0IHYgPSAxIC0gYmw7XG5cdGYgPSA2ICogaCAtIGk7XG5cblx0aWYgKChpICYgMHgwMSkgIT09IDApIHtcblx0XHRmID0gMSAtIGY7XG5cdH1cblxuXHRjb25zdCBuID0gd2ggKyBmICogKHYgLSB3aCk7IC8vIExpbmVhciBpbnRlcnBvbGF0aW9uXG5cblx0bGV0IHI7XG5cdGxldCBnO1xuXHRsZXQgYjtcblx0LyogZXNsaW50LWRpc2FibGUgbWF4LXN0YXRlbWVudHMtcGVyLWxpbmUsbm8tbXVsdGktc3BhY2VzICovXG5cdHN3aXRjaCAoaSkge1xuXHRcdGRlZmF1bHQ6XG5cdFx0Y2FzZSA2OlxuXHRcdGNhc2UgMDogciA9IHY7ICBnID0gbjsgIGIgPSB3aDsgYnJlYWs7XG5cdFx0Y2FzZSAxOiByID0gbjsgIGcgPSB2OyAgYiA9IHdoOyBicmVhaztcblx0XHRjYXNlIDI6IHIgPSB3aDsgZyA9IHY7ICBiID0gbjsgYnJlYWs7XG5cdFx0Y2FzZSAzOiByID0gd2g7IGcgPSBuOyAgYiA9IHY7IGJyZWFrO1xuXHRcdGNhc2UgNDogciA9IG47ICBnID0gd2g7IGIgPSB2OyBicmVhaztcblx0XHRjYXNlIDU6IHIgPSB2OyAgZyA9IHdoOyBiID0gbjsgYnJlYWs7XG5cdH1cblx0LyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cy1wZXItbGluZSxuby1tdWx0aS1zcGFjZXMgKi9cblxuXHRyZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTVdO1xufTtcblxuY29udmVydC5jbXlrLnJnYiA9IGZ1bmN0aW9uIChjbXlrKSB7XG5cdGNvbnN0IGMgPSBjbXlrWzBdIC8gMTAwO1xuXHRjb25zdCBtID0gY215a1sxXSAvIDEwMDtcblx0Y29uc3QgeSA9IGNteWtbMl0gLyAxMDA7XG5cdGNvbnN0IGsgPSBjbXlrWzNdIC8gMTAwO1xuXG5cdGNvbnN0IHIgPSAxIC0gTWF0aC5taW4oMSwgYyAqICgxIC0gaykgKyBrKTtcblx0Y29uc3QgZyA9IDEgLSBNYXRoLm1pbigxLCBtICogKDEgLSBrKSArIGspO1xuXHRjb25zdCBiID0gMSAtIE1hdGgubWluKDEsIHkgKiAoMSAtIGspICsgayk7XG5cblx0cmV0dXJuIFtyICogMjU1LCBnICogMjU1LCBiICogMjU1XTtcbn07XG5cbmNvbnZlcnQueHl6LnJnYiA9IGZ1bmN0aW9uICh4eXopIHtcblx0Y29uc3QgeCA9IHh5elswXSAvIDEwMDtcblx0Y29uc3QgeSA9IHh5elsxXSAvIDEwMDtcblx0Y29uc3QgeiA9IHh5elsyXSAvIDEwMDtcblx0bGV0IHI7XG5cdGxldCBnO1xuXHRsZXQgYjtcblxuXHRyID0gKHggKiAzLjI0MDYpICsgKHkgKiAtMS41MzcyKSArICh6ICogLTAuNDk4Nik7XG5cdGcgPSAoeCAqIC0wLjk2ODkpICsgKHkgKiAxLjg3NTgpICsgKHogKiAwLjA0MTUpO1xuXHRiID0gKHggKiAwLjA1NTcpICsgKHkgKiAtMC4yMDQwKSArICh6ICogMS4wNTcwKTtcblxuXHQvLyBBc3N1bWUgc1JHQlxuXHRyID0gciA+IDAuMDAzMTMwOFxuXHRcdD8gKCgxLjA1NSAqIChyICoqICgxLjAgLyAyLjQpKSkgLSAwLjA1NSlcblx0XHQ6IHIgKiAxMi45MjtcblxuXHRnID0gZyA+IDAuMDAzMTMwOFxuXHRcdD8gKCgxLjA1NSAqIChnICoqICgxLjAgLyAyLjQpKSkgLSAwLjA1NSlcblx0XHQ6IGcgKiAxMi45MjtcblxuXHRiID0gYiA+IDAuMDAzMTMwOFxuXHRcdD8gKCgxLjA1NSAqIChiICoqICgxLjAgLyAyLjQpKSkgLSAwLjA1NSlcblx0XHQ6IGIgKiAxMi45MjtcblxuXHRyID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgciksIDEpO1xuXHRnID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZyksIDEpO1xuXHRiID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgYiksIDEpO1xuXG5cdHJldHVybiBbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV07XG59O1xuXG5jb252ZXJ0Lnh5ei5sYWIgPSBmdW5jdGlvbiAoeHl6KSB7XG5cdGxldCB4ID0geHl6WzBdO1xuXHRsZXQgeSA9IHh5elsxXTtcblx0bGV0IHogPSB4eXpbMl07XG5cblx0eCAvPSA5NS4wNDc7XG5cdHkgLz0gMTAwO1xuXHR6IC89IDEwOC44ODM7XG5cblx0eCA9IHggPiAwLjAwODg1NiA/ICh4ICoqICgxIC8gMykpIDogKDcuNzg3ICogeCkgKyAoMTYgLyAxMTYpO1xuXHR5ID0geSA+IDAuMDA4ODU2ID8gKHkgKiogKDEgLyAzKSkgOiAoNy43ODcgKiB5KSArICgxNiAvIDExNik7XG5cdHogPSB6ID4gMC4wMDg4NTYgPyAoeiAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHopICsgKDE2IC8gMTE2KTtcblxuXHRjb25zdCBsID0gKDExNiAqIHkpIC0gMTY7XG5cdGNvbnN0IGEgPSA1MDAgKiAoeCAtIHkpO1xuXHRjb25zdCBiID0gMjAwICogKHkgLSB6KTtcblxuXHRyZXR1cm4gW2wsIGEsIGJdO1xufTtcblxuY29udmVydC5sYWIueHl6ID0gZnVuY3Rpb24gKGxhYikge1xuXHRjb25zdCBsID0gbGFiWzBdO1xuXHRjb25zdCBhID0gbGFiWzFdO1xuXHRjb25zdCBiID0gbGFiWzJdO1xuXHRsZXQgeDtcblx0bGV0IHk7XG5cdGxldCB6O1xuXG5cdHkgPSAobCArIDE2KSAvIDExNjtcblx0eCA9IGEgLyA1MDAgKyB5O1xuXHR6ID0geSAtIGIgLyAyMDA7XG5cblx0Y29uc3QgeTIgPSB5ICoqIDM7XG5cdGNvbnN0IHgyID0geCAqKiAzO1xuXHRjb25zdCB6MiA9IHogKiogMztcblx0eSA9IHkyID4gMC4wMDg4NTYgPyB5MiA6ICh5IC0gMTYgLyAxMTYpIC8gNy43ODc7XG5cdHggPSB4MiA+IDAuMDA4ODU2ID8geDIgOiAoeCAtIDE2IC8gMTE2KSAvIDcuNzg3O1xuXHR6ID0gejIgPiAwLjAwODg1NiA/IHoyIDogKHogLSAxNiAvIDExNikgLyA3Ljc4NztcblxuXHR4ICo9IDk1LjA0Nztcblx0eSAqPSAxMDA7XG5cdHogKj0gMTA4Ljg4MztcblxuXHRyZXR1cm4gW3gsIHksIHpdO1xufTtcblxuY29udmVydC5sYWIubGNoID0gZnVuY3Rpb24gKGxhYikge1xuXHRjb25zdCBsID0gbGFiWzBdO1xuXHRjb25zdCBhID0gbGFiWzFdO1xuXHRjb25zdCBiID0gbGFiWzJdO1xuXHRsZXQgaDtcblxuXHRjb25zdCBociA9IE1hdGguYXRhbjIoYiwgYSk7XG5cdGggPSBociAqIDM2MCAvIDIgLyBNYXRoLlBJO1xuXG5cdGlmIChoIDwgMCkge1xuXHRcdGggKz0gMzYwO1xuXHR9XG5cblx0Y29uc3QgYyA9IE1hdGguc3FydChhICogYSArIGIgKiBiKTtcblxuXHRyZXR1cm4gW2wsIGMsIGhdO1xufTtcblxuY29udmVydC5sY2gubGFiID0gZnVuY3Rpb24gKGxjaCkge1xuXHRjb25zdCBsID0gbGNoWzBdO1xuXHRjb25zdCBjID0gbGNoWzFdO1xuXHRjb25zdCBoID0gbGNoWzJdO1xuXG5cdGNvbnN0IGhyID0gaCAvIDM2MCAqIDIgKiBNYXRoLlBJO1xuXHRjb25zdCBhID0gYyAqIE1hdGguY29zKGhyKTtcblx0Y29uc3QgYiA9IGMgKiBNYXRoLnNpbihocik7XG5cblx0cmV0dXJuIFtsLCBhLCBiXTtcbn07XG5cbmNvbnZlcnQucmdiLmFuc2kxNiA9IGZ1bmN0aW9uIChhcmdzLCBzYXR1cmF0aW9uID0gbnVsbCkge1xuXHRjb25zdCBbciwgZywgYl0gPSBhcmdzO1xuXHRsZXQgdmFsdWUgPSBzYXR1cmF0aW9uID09PSBudWxsID8gY29udmVydC5yZ2IuaHN2KGFyZ3MpWzJdIDogc2F0dXJhdGlvbjsgLy8gSHN2IC0+IGFuc2kxNiBvcHRpbWl6YXRpb25cblxuXHR2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgLyA1MCk7XG5cblx0aWYgKHZhbHVlID09PSAwKSB7XG5cdFx0cmV0dXJuIDMwO1xuXHR9XG5cblx0bGV0IGFuc2kgPSAzMFxuXHRcdCsgKChNYXRoLnJvdW5kKGIgLyAyNTUpIDw8IDIpXG5cdFx0fCAoTWF0aC5yb3VuZChnIC8gMjU1KSA8PCAxKVxuXHRcdHwgTWF0aC5yb3VuZChyIC8gMjU1KSk7XG5cblx0aWYgKHZhbHVlID09PSAyKSB7XG5cdFx0YW5zaSArPSA2MDtcblx0fVxuXG5cdHJldHVybiBhbnNpO1xufTtcblxuY29udmVydC5oc3YuYW5zaTE2ID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0Ly8gT3B0aW1pemF0aW9uIGhlcmU7IHdlIGFscmVhZHkga25vdyB0aGUgdmFsdWUgYW5kIGRvbid0IG5lZWQgdG8gZ2V0XG5cdC8vIGl0IGNvbnZlcnRlZCBmb3IgdXMuXG5cdHJldHVybiBjb252ZXJ0LnJnYi5hbnNpMTYoY29udmVydC5oc3YucmdiKGFyZ3MpLCBhcmdzWzJdKTtcbn07XG5cbmNvbnZlcnQucmdiLmFuc2kyNTYgPSBmdW5jdGlvbiAoYXJncykge1xuXHRjb25zdCByID0gYXJnc1swXTtcblx0Y29uc3QgZyA9IGFyZ3NbMV07XG5cdGNvbnN0IGIgPSBhcmdzWzJdO1xuXG5cdC8vIFdlIHVzZSB0aGUgZXh0ZW5kZWQgZ3JleXNjYWxlIHBhbGV0dGUgaGVyZSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mXG5cdC8vIGJsYWNrIGFuZCB3aGl0ZS4gbm9ybWFsIHBhbGV0dGUgb25seSBoYXMgNCBncmV5c2NhbGUgc2hhZGVzLlxuXHRpZiAociA9PT0gZyAmJiBnID09PSBiKSB7XG5cdFx0aWYgKHIgPCA4KSB7XG5cdFx0XHRyZXR1cm4gMTY7XG5cdFx0fVxuXG5cdFx0aWYgKHIgPiAyNDgpIHtcblx0XHRcdHJldHVybiAyMzE7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIE1hdGgucm91bmQoKChyIC0gOCkgLyAyNDcpICogMjQpICsgMjMyO1xuXHR9XG5cblx0Y29uc3QgYW5zaSA9IDE2XG5cdFx0KyAoMzYgKiBNYXRoLnJvdW5kKHIgLyAyNTUgKiA1KSlcblx0XHQrICg2ICogTWF0aC5yb3VuZChnIC8gMjU1ICogNSkpXG5cdFx0KyBNYXRoLnJvdW5kKGIgLyAyNTUgKiA1KTtcblxuXHRyZXR1cm4gYW5zaTtcbn07XG5cbmNvbnZlcnQuYW5zaTE2LnJnYiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdGxldCBjb2xvciA9IGFyZ3MgJSAxMDtcblxuXHQvLyBIYW5kbGUgZ3JleXNjYWxlXG5cdGlmIChjb2xvciA9PT0gMCB8fCBjb2xvciA9PT0gNykge1xuXHRcdGlmIChhcmdzID4gNTApIHtcblx0XHRcdGNvbG9yICs9IDMuNTtcblx0XHR9XG5cblx0XHRjb2xvciA9IGNvbG9yIC8gMTAuNSAqIDI1NTtcblxuXHRcdHJldHVybiBbY29sb3IsIGNvbG9yLCBjb2xvcl07XG5cdH1cblxuXHRjb25zdCBtdWx0ID0gKH5+KGFyZ3MgPiA1MCkgKyAxKSAqIDAuNTtcblx0Y29uc3QgciA9ICgoY29sb3IgJiAxKSAqIG11bHQpICogMjU1O1xuXHRjb25zdCBnID0gKCgoY29sb3IgPj4gMSkgJiAxKSAqIG11bHQpICogMjU1O1xuXHRjb25zdCBiID0gKCgoY29sb3IgPj4gMikgJiAxKSAqIG11bHQpICogMjU1O1xuXG5cdHJldHVybiBbciwgZywgYl07XG59O1xuXG5jb252ZXJ0LmFuc2kyNTYucmdiID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0Ly8gSGFuZGxlIGdyZXlzY2FsZVxuXHRpZiAoYXJncyA+PSAyMzIpIHtcblx0XHRjb25zdCBjID0gKGFyZ3MgLSAyMzIpICogMTAgKyA4O1xuXHRcdHJldHVybiBbYywgYywgY107XG5cdH1cblxuXHRhcmdzIC09IDE2O1xuXG5cdGxldCByZW07XG5cdGNvbnN0IHIgPSBNYXRoLmZsb29yKGFyZ3MgLyAzNikgLyA1ICogMjU1O1xuXHRjb25zdCBnID0gTWF0aC5mbG9vcigocmVtID0gYXJncyAlIDM2KSAvIDYpIC8gNSAqIDI1NTtcblx0Y29uc3QgYiA9IChyZW0gJSA2KSAvIDUgKiAyNTU7XG5cblx0cmV0dXJuIFtyLCBnLCBiXTtcbn07XG5cbmNvbnZlcnQucmdiLmhleCA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdGNvbnN0IGludGVnZXIgPSAoKE1hdGgucm91bmQoYXJnc1swXSkgJiAweEZGKSA8PCAxNilcblx0XHQrICgoTWF0aC5yb3VuZChhcmdzWzFdKSAmIDB4RkYpIDw8IDgpXG5cdFx0KyAoTWF0aC5yb3VuZChhcmdzWzJdKSAmIDB4RkYpO1xuXG5cdGNvbnN0IHN0cmluZyA9IGludGVnZXIudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cdHJldHVybiAnMDAwMDAwJy5zdWJzdHJpbmcoc3RyaW5nLmxlbmd0aCkgKyBzdHJpbmc7XG59O1xuXG5jb252ZXJ0LmhleC5yZ2IgPSBmdW5jdGlvbiAoYXJncykge1xuXHRjb25zdCBtYXRjaCA9IGFyZ3MudG9TdHJpbmcoMTYpLm1hdGNoKC9bYS1mMC05XXs2fXxbYS1mMC05XXszfS9pKTtcblx0aWYgKCFtYXRjaCkge1xuXHRcdHJldHVybiBbMCwgMCwgMF07XG5cdH1cblxuXHRsZXQgY29sb3JTdHJpbmcgPSBtYXRjaFswXTtcblxuXHRpZiAobWF0Y2hbMF0ubGVuZ3RoID09PSAzKSB7XG5cdFx0Y29sb3JTdHJpbmcgPSBjb2xvclN0cmluZy5zcGxpdCgnJykubWFwKGNoYXIgPT4ge1xuXHRcdFx0cmV0dXJuIGNoYXIgKyBjaGFyO1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0Y29uc3QgaW50ZWdlciA9IHBhcnNlSW50KGNvbG9yU3RyaW5nLCAxNik7XG5cdGNvbnN0IHIgPSAoaW50ZWdlciA+PiAxNikgJiAweEZGO1xuXHRjb25zdCBnID0gKGludGVnZXIgPj4gOCkgJiAweEZGO1xuXHRjb25zdCBiID0gaW50ZWdlciAmIDB4RkY7XG5cblx0cmV0dXJuIFtyLCBnLCBiXTtcbn07XG5cbmNvbnZlcnQucmdiLmhjZyA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgciA9IHJnYlswXSAvIDI1NTtcblx0Y29uc3QgZyA9IHJnYlsxXSAvIDI1NTtcblx0Y29uc3QgYiA9IHJnYlsyXSAvIDI1NTtcblx0Y29uc3QgbWF4ID0gTWF0aC5tYXgoTWF0aC5tYXgociwgZyksIGIpO1xuXHRjb25zdCBtaW4gPSBNYXRoLm1pbihNYXRoLm1pbihyLCBnKSwgYik7XG5cdGNvbnN0IGNocm9tYSA9IChtYXggLSBtaW4pO1xuXHRsZXQgZ3JheXNjYWxlO1xuXHRsZXQgaHVlO1xuXG5cdGlmIChjaHJvbWEgPCAxKSB7XG5cdFx0Z3JheXNjYWxlID0gbWluIC8gKDEgLSBjaHJvbWEpO1xuXHR9IGVsc2Uge1xuXHRcdGdyYXlzY2FsZSA9IDA7XG5cdH1cblxuXHRpZiAoY2hyb21hIDw9IDApIHtcblx0XHRodWUgPSAwO1xuXHR9IGVsc2Vcblx0aWYgKG1heCA9PT0gcikge1xuXHRcdGh1ZSA9ICgoZyAtIGIpIC8gY2hyb21hKSAlIDY7XG5cdH0gZWxzZVxuXHRpZiAobWF4ID09PSBnKSB7XG5cdFx0aHVlID0gMiArIChiIC0gcikgLyBjaHJvbWE7XG5cdH0gZWxzZSB7XG5cdFx0aHVlID0gNCArIChyIC0gZykgLyBjaHJvbWE7XG5cdH1cblxuXHRodWUgLz0gNjtcblx0aHVlICU9IDE7XG5cblx0cmV0dXJuIFtodWUgKiAzNjAsIGNocm9tYSAqIDEwMCwgZ3JheXNjYWxlICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaHNsLmhjZyA9IGZ1bmN0aW9uIChoc2wpIHtcblx0Y29uc3QgcyA9IGhzbFsxXSAvIDEwMDtcblx0Y29uc3QgbCA9IGhzbFsyXSAvIDEwMDtcblxuXHRjb25zdCBjID0gbCA8IDAuNSA/ICgyLjAgKiBzICogbCkgOiAoMi4wICogcyAqICgxLjAgLSBsKSk7XG5cblx0bGV0IGYgPSAwO1xuXHRpZiAoYyA8IDEuMCkge1xuXHRcdGYgPSAobCAtIDAuNSAqIGMpIC8gKDEuMCAtIGMpO1xuXHR9XG5cblx0cmV0dXJuIFtoc2xbMF0sIGMgKiAxMDAsIGYgKiAxMDBdO1xufTtcblxuY29udmVydC5oc3YuaGNnID0gZnVuY3Rpb24gKGhzdikge1xuXHRjb25zdCBzID0gaHN2WzFdIC8gMTAwO1xuXHRjb25zdCB2ID0gaHN2WzJdIC8gMTAwO1xuXG5cdGNvbnN0IGMgPSBzICogdjtcblx0bGV0IGYgPSAwO1xuXG5cdGlmIChjIDwgMS4wKSB7XG5cdFx0ZiA9ICh2IC0gYykgLyAoMSAtIGMpO1xuXHR9XG5cblx0cmV0dXJuIFtoc3ZbMF0sIGMgKiAxMDAsIGYgKiAxMDBdO1xufTtcblxuY29udmVydC5oY2cucmdiID0gZnVuY3Rpb24gKGhjZykge1xuXHRjb25zdCBoID0gaGNnWzBdIC8gMzYwO1xuXHRjb25zdCBjID0gaGNnWzFdIC8gMTAwO1xuXHRjb25zdCBnID0gaGNnWzJdIC8gMTAwO1xuXG5cdGlmIChjID09PSAwLjApIHtcblx0XHRyZXR1cm4gW2cgKiAyNTUsIGcgKiAyNTUsIGcgKiAyNTVdO1xuXHR9XG5cblx0Y29uc3QgcHVyZSA9IFswLCAwLCAwXTtcblx0Y29uc3QgaGkgPSAoaCAlIDEpICogNjtcblx0Y29uc3QgdiA9IGhpICUgMTtcblx0Y29uc3QgdyA9IDEgLSB2O1xuXHRsZXQgbWcgPSAwO1xuXG5cdC8qIGVzbGludC1kaXNhYmxlIG1heC1zdGF0ZW1lbnRzLXBlci1saW5lICovXG5cdHN3aXRjaCAoTWF0aC5mbG9vcihoaSkpIHtcblx0XHRjYXNlIDA6XG5cdFx0XHRwdXJlWzBdID0gMTsgcHVyZVsxXSA9IHY7IHB1cmVbMl0gPSAwOyBicmVhaztcblx0XHRjYXNlIDE6XG5cdFx0XHRwdXJlWzBdID0gdzsgcHVyZVsxXSA9IDE7IHB1cmVbMl0gPSAwOyBicmVhaztcblx0XHRjYXNlIDI6XG5cdFx0XHRwdXJlWzBdID0gMDsgcHVyZVsxXSA9IDE7IHB1cmVbMl0gPSB2OyBicmVhaztcblx0XHRjYXNlIDM6XG5cdFx0XHRwdXJlWzBdID0gMDsgcHVyZVsxXSA9IHc7IHB1cmVbMl0gPSAxOyBicmVhaztcblx0XHRjYXNlIDQ6XG5cdFx0XHRwdXJlWzBdID0gdjsgcHVyZVsxXSA9IDA7IHB1cmVbMl0gPSAxOyBicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0cHVyZVswXSA9IDE7IHB1cmVbMV0gPSAwOyBwdXJlWzJdID0gdztcblx0fVxuXHQvKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzLXBlci1saW5lICovXG5cblx0bWcgPSAoMS4wIC0gYykgKiBnO1xuXG5cdHJldHVybiBbXG5cdFx0KGMgKiBwdXJlWzBdICsgbWcpICogMjU1LFxuXHRcdChjICogcHVyZVsxXSArIG1nKSAqIDI1NSxcblx0XHQoYyAqIHB1cmVbMl0gKyBtZykgKiAyNTVcblx0XTtcbn07XG5cbmNvbnZlcnQuaGNnLmhzdiA9IGZ1bmN0aW9uIChoY2cpIHtcblx0Y29uc3QgYyA9IGhjZ1sxXSAvIDEwMDtcblx0Y29uc3QgZyA9IGhjZ1syXSAvIDEwMDtcblxuXHRjb25zdCB2ID0gYyArIGcgKiAoMS4wIC0gYyk7XG5cdGxldCBmID0gMDtcblxuXHRpZiAodiA+IDAuMCkge1xuXHRcdGYgPSBjIC8gdjtcblx0fVxuXG5cdHJldHVybiBbaGNnWzBdLCBmICogMTAwLCB2ICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaGNnLmhzbCA9IGZ1bmN0aW9uIChoY2cpIHtcblx0Y29uc3QgYyA9IGhjZ1sxXSAvIDEwMDtcblx0Y29uc3QgZyA9IGhjZ1syXSAvIDEwMDtcblxuXHRjb25zdCBsID0gZyAqICgxLjAgLSBjKSArIDAuNSAqIGM7XG5cdGxldCBzID0gMDtcblxuXHRpZiAobCA+IDAuMCAmJiBsIDwgMC41KSB7XG5cdFx0cyA9IGMgLyAoMiAqIGwpO1xuXHR9IGVsc2Vcblx0aWYgKGwgPj0gMC41ICYmIGwgPCAxLjApIHtcblx0XHRzID0gYyAvICgyICogKDEgLSBsKSk7XG5cdH1cblxuXHRyZXR1cm4gW2hjZ1swXSwgcyAqIDEwMCwgbCAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmhjZy5od2IgPSBmdW5jdGlvbiAoaGNnKSB7XG5cdGNvbnN0IGMgPSBoY2dbMV0gLyAxMDA7XG5cdGNvbnN0IGcgPSBoY2dbMl0gLyAxMDA7XG5cdGNvbnN0IHYgPSBjICsgZyAqICgxLjAgLSBjKTtcblx0cmV0dXJuIFtoY2dbMF0sICh2IC0gYykgKiAxMDAsICgxIC0gdikgKiAxMDBdO1xufTtcblxuY29udmVydC5od2IuaGNnID0gZnVuY3Rpb24gKGh3Yikge1xuXHRjb25zdCB3ID0gaHdiWzFdIC8gMTAwO1xuXHRjb25zdCBiID0gaHdiWzJdIC8gMTAwO1xuXHRjb25zdCB2ID0gMSAtIGI7XG5cdGNvbnN0IGMgPSB2IC0gdztcblx0bGV0IGcgPSAwO1xuXG5cdGlmIChjIDwgMSkge1xuXHRcdGcgPSAodiAtIGMpIC8gKDEgLSBjKTtcblx0fVxuXG5cdHJldHVybiBbaHdiWzBdLCBjICogMTAwLCBnICogMTAwXTtcbn07XG5cbmNvbnZlcnQuYXBwbGUucmdiID0gZnVuY3Rpb24gKGFwcGxlKSB7XG5cdHJldHVybiBbKGFwcGxlWzBdIC8gNjU1MzUpICogMjU1LCAoYXBwbGVbMV0gLyA2NTUzNSkgKiAyNTUsIChhcHBsZVsyXSAvIDY1NTM1KSAqIDI1NV07XG59O1xuXG5jb252ZXJ0LnJnYi5hcHBsZSA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0cmV0dXJuIFsocmdiWzBdIC8gMjU1KSAqIDY1NTM1LCAocmdiWzFdIC8gMjU1KSAqIDY1NTM1LCAocmdiWzJdIC8gMjU1KSAqIDY1NTM1XTtcbn07XG5cbmNvbnZlcnQuZ3JheS5yZ2IgPSBmdW5jdGlvbiAoYXJncykge1xuXHRyZXR1cm4gW2FyZ3NbMF0gLyAxMDAgKiAyNTUsIGFyZ3NbMF0gLyAxMDAgKiAyNTUsIGFyZ3NbMF0gLyAxMDAgKiAyNTVdO1xufTtcblxuY29udmVydC5ncmF5LmhzbCA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdHJldHVybiBbMCwgMCwgYXJnc1swXV07XG59O1xuXG5jb252ZXJ0LmdyYXkuaHN2ID0gY29udmVydC5ncmF5LmhzbDtcblxuY29udmVydC5ncmF5Lmh3YiA9IGZ1bmN0aW9uIChncmF5KSB7XG5cdHJldHVybiBbMCwgMTAwLCBncmF5WzBdXTtcbn07XG5cbmNvbnZlcnQuZ3JheS5jbXlrID0gZnVuY3Rpb24gKGdyYXkpIHtcblx0cmV0dXJuIFswLCAwLCAwLCBncmF5WzBdXTtcbn07XG5cbmNvbnZlcnQuZ3JheS5sYWIgPSBmdW5jdGlvbiAoZ3JheSkge1xuXHRyZXR1cm4gW2dyYXlbMF0sIDAsIDBdO1xufTtcblxuY29udmVydC5ncmF5LmhleCA9IGZ1bmN0aW9uIChncmF5KSB7XG5cdGNvbnN0IHZhbCA9IE1hdGgucm91bmQoZ3JheVswXSAvIDEwMCAqIDI1NSkgJiAweEZGO1xuXHRjb25zdCBpbnRlZ2VyID0gKHZhbCA8PCAxNikgKyAodmFsIDw8IDgpICsgdmFsO1xuXG5cdGNvbnN0IHN0cmluZyA9IGludGVnZXIudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cdHJldHVybiAnMDAwMDAwJy5zdWJzdHJpbmcoc3RyaW5nLmxlbmd0aCkgKyBzdHJpbmc7XG59O1xuXG5jb252ZXJ0LnJnYi5ncmF5ID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCB2YWwgPSAocmdiWzBdICsgcmdiWzFdICsgcmdiWzJdKSAvIDM7XG5cdHJldHVybiBbdmFsIC8gMjU1ICogMTAwXTtcbn07XG4iLCJjb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoJy4vY29udmVyc2lvbnMnKTtcblxuLypcblx0VGhpcyBmdW5jdGlvbiByb3V0ZXMgYSBtb2RlbCB0byBhbGwgb3RoZXIgbW9kZWxzLlxuXG5cdGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgcm91dGVkIGhhdmUgYSBwcm9wZXJ0eSBgLmNvbnZlcnNpb25gIGF0dGFjaGVkXG5cdHRvIHRoZSByZXR1cm5lZCBzeW50aGV0aWMgZnVuY3Rpb24uIFRoaXMgcHJvcGVydHkgaXMgYW4gYXJyYXlcblx0b2Ygc3RyaW5ncywgZWFjaCB3aXRoIHRoZSBzdGVwcyBpbiBiZXR3ZWVuIHRoZSAnZnJvbScgYW5kICd0bydcblx0Y29sb3IgbW9kZWxzIChpbmNsdXNpdmUpLlxuXG5cdGNvbnZlcnNpb25zIHRoYXQgYXJlIG5vdCBwb3NzaWJsZSBzaW1wbHkgYXJlIG5vdCBpbmNsdWRlZC5cbiovXG5cbmZ1bmN0aW9uIGJ1aWxkR3JhcGgoKSB7XG5cdGNvbnN0IGdyYXBoID0ge307XG5cdC8vIGh0dHBzOi8vanNwZXJmLmNvbS9vYmplY3Qta2V5cy12cy1mb3ItaW4td2l0aC1jbG9zdXJlLzNcblx0Y29uc3QgbW9kZWxzID0gT2JqZWN0LmtleXMoY29udmVyc2lvbnMpO1xuXG5cdGZvciAobGV0IGxlbiA9IG1vZGVscy5sZW5ndGgsIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRncmFwaFttb2RlbHNbaV1dID0ge1xuXHRcdFx0Ly8gaHR0cDovL2pzcGVyZi5jb20vMS12cy1pbmZpbml0eVxuXHRcdFx0Ly8gbWljcm8tb3B0LCBidXQgdGhpcyBpcyBzaW1wbGUuXG5cdFx0XHRkaXN0YW5jZTogLTEsXG5cdFx0XHRwYXJlbnQ6IG51bGxcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIGdyYXBoO1xufVxuXG4vLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CcmVhZHRoLWZpcnN0X3NlYXJjaFxuZnVuY3Rpb24gZGVyaXZlQkZTKGZyb21Nb2RlbCkge1xuXHRjb25zdCBncmFwaCA9IGJ1aWxkR3JhcGgoKTtcblx0Y29uc3QgcXVldWUgPSBbZnJvbU1vZGVsXTsgLy8gVW5zaGlmdCAtPiBxdWV1ZSAtPiBwb3BcblxuXHRncmFwaFtmcm9tTW9kZWxdLmRpc3RhbmNlID0gMDtcblxuXHR3aGlsZSAocXVldWUubGVuZ3RoKSB7XG5cdFx0Y29uc3QgY3VycmVudCA9IHF1ZXVlLnBvcCgpO1xuXHRcdGNvbnN0IGFkamFjZW50cyA9IE9iamVjdC5rZXlzKGNvbnZlcnNpb25zW2N1cnJlbnRdKTtcblxuXHRcdGZvciAobGV0IGxlbiA9IGFkamFjZW50cy5sZW5ndGgsIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGNvbnN0IGFkamFjZW50ID0gYWRqYWNlbnRzW2ldO1xuXHRcdFx0Y29uc3Qgbm9kZSA9IGdyYXBoW2FkamFjZW50XTtcblxuXHRcdFx0aWYgKG5vZGUuZGlzdGFuY2UgPT09IC0xKSB7XG5cdFx0XHRcdG5vZGUuZGlzdGFuY2UgPSBncmFwaFtjdXJyZW50XS5kaXN0YW5jZSArIDE7XG5cdFx0XHRcdG5vZGUucGFyZW50ID0gY3VycmVudDtcblx0XHRcdFx0cXVldWUudW5zaGlmdChhZGphY2VudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGdyYXBoO1xufVxuXG5mdW5jdGlvbiBsaW5rKGZyb20sIHRvKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoYXJncykge1xuXHRcdHJldHVybiB0byhmcm9tKGFyZ3MpKTtcblx0fTtcbn1cblxuZnVuY3Rpb24gd3JhcENvbnZlcnNpb24odG9Nb2RlbCwgZ3JhcGgpIHtcblx0Y29uc3QgcGF0aCA9IFtncmFwaFt0b01vZGVsXS5wYXJlbnQsIHRvTW9kZWxdO1xuXHRsZXQgZm4gPSBjb252ZXJzaW9uc1tncmFwaFt0b01vZGVsXS5wYXJlbnRdW3RvTW9kZWxdO1xuXG5cdGxldCBjdXIgPSBncmFwaFt0b01vZGVsXS5wYXJlbnQ7XG5cdHdoaWxlIChncmFwaFtjdXJdLnBhcmVudCkge1xuXHRcdHBhdGgudW5zaGlmdChncmFwaFtjdXJdLnBhcmVudCk7XG5cdFx0Zm4gPSBsaW5rKGNvbnZlcnNpb25zW2dyYXBoW2N1cl0ucGFyZW50XVtjdXJdLCBmbik7XG5cdFx0Y3VyID0gZ3JhcGhbY3VyXS5wYXJlbnQ7XG5cdH1cblxuXHRmbi5jb252ZXJzaW9uID0gcGF0aDtcblx0cmV0dXJuIGZuO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmcm9tTW9kZWwpIHtcblx0Y29uc3QgZ3JhcGggPSBkZXJpdmVCRlMoZnJvbU1vZGVsKTtcblx0Y29uc3QgY29udmVyc2lvbiA9IHt9O1xuXG5cdGNvbnN0IG1vZGVscyA9IE9iamVjdC5rZXlzKGdyYXBoKTtcblx0Zm9yIChsZXQgbGVuID0gbW9kZWxzLmxlbmd0aCwgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdGNvbnN0IHRvTW9kZWwgPSBtb2RlbHNbaV07XG5cdFx0Y29uc3Qgbm9kZSA9IGdyYXBoW3RvTW9kZWxdO1xuXG5cdFx0aWYgKG5vZGUucGFyZW50ID09PSBudWxsKSB7XG5cdFx0XHQvLyBObyBwb3NzaWJsZSBjb252ZXJzaW9uLCBvciB0aGlzIG5vZGUgaXMgdGhlIHNvdXJjZSBtb2RlbC5cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvbnZlcnNpb25bdG9Nb2RlbF0gPSB3cmFwQ29udmVyc2lvbih0b01vZGVsLCBncmFwaCk7XG5cdH1cblxuXHRyZXR1cm4gY29udmVyc2lvbjtcbn07XG5cbiIsImNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZSgnLi9jb252ZXJzaW9ucycpO1xuY29uc3Qgcm91dGUgPSByZXF1aXJlKCcuL3JvdXRlJyk7XG5cbmNvbnN0IGNvbnZlcnQgPSB7fTtcblxuY29uc3QgbW9kZWxzID0gT2JqZWN0LmtleXMoY29udmVyc2lvbnMpO1xuXG5mdW5jdGlvbiB3cmFwUmF3KGZuKSB7XG5cdGNvbnN0IHdyYXBwZWRGbiA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG5cdFx0Y29uc3QgYXJnMCA9IGFyZ3NbMF07XG5cdFx0aWYgKGFyZzAgPT09IHVuZGVmaW5lZCB8fCBhcmcwID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gYXJnMDtcblx0XHR9XG5cblx0XHRpZiAoYXJnMC5sZW5ndGggPiAxKSB7XG5cdFx0XHRhcmdzID0gYXJnMDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZm4oYXJncyk7XG5cdH07XG5cblx0Ly8gUHJlc2VydmUgLmNvbnZlcnNpb24gcHJvcGVydHkgaWYgdGhlcmUgaXMgb25lXG5cdGlmICgnY29udmVyc2lvbicgaW4gZm4pIHtcblx0XHR3cmFwcGVkRm4uY29udmVyc2lvbiA9IGZuLmNvbnZlcnNpb247XG5cdH1cblxuXHRyZXR1cm4gd3JhcHBlZEZuO1xufVxuXG5mdW5jdGlvbiB3cmFwUm91bmRlZChmbikge1xuXHRjb25zdCB3cmFwcGVkRm4gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuXHRcdGNvbnN0IGFyZzAgPSBhcmdzWzBdO1xuXG5cdFx0aWYgKGFyZzAgPT09IHVuZGVmaW5lZCB8fCBhcmcwID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gYXJnMDtcblx0XHR9XG5cblx0XHRpZiAoYXJnMC5sZW5ndGggPiAxKSB7XG5cdFx0XHRhcmdzID0gYXJnMDtcblx0XHR9XG5cblx0XHRjb25zdCByZXN1bHQgPSBmbihhcmdzKTtcblxuXHRcdC8vIFdlJ3JlIGFzc3VtaW5nIHRoZSByZXN1bHQgaXMgYW4gYXJyYXkgaGVyZS5cblx0XHQvLyBzZWUgbm90aWNlIGluIGNvbnZlcnNpb25zLmpzOyBkb24ndCB1c2UgYm94IHR5cGVzXG5cdFx0Ly8gaW4gY29udmVyc2lvbiBmdW5jdGlvbnMuXG5cdFx0aWYgKHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRmb3IgKGxldCBsZW4gPSByZXN1bHQubGVuZ3RoLCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRcdHJlc3VsdFtpXSA9IE1hdGgucm91bmQocmVzdWx0W2ldKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xuXG5cdC8vIFByZXNlcnZlIC5jb252ZXJzaW9uIHByb3BlcnR5IGlmIHRoZXJlIGlzIG9uZVxuXHRpZiAoJ2NvbnZlcnNpb24nIGluIGZuKSB7XG5cdFx0d3JhcHBlZEZuLmNvbnZlcnNpb24gPSBmbi5jb252ZXJzaW9uO1xuXHR9XG5cblx0cmV0dXJuIHdyYXBwZWRGbjtcbn1cblxubW9kZWxzLmZvckVhY2goZnJvbU1vZGVsID0+IHtcblx0Y29udmVydFtmcm9tTW9kZWxdID0ge307XG5cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnZlcnRbZnJvbU1vZGVsXSwgJ2NoYW5uZWxzJywge3ZhbHVlOiBjb252ZXJzaW9uc1tmcm9tTW9kZWxdLmNoYW5uZWxzfSk7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W2Zyb21Nb2RlbF0sICdsYWJlbHMnLCB7dmFsdWU6IGNvbnZlcnNpb25zW2Zyb21Nb2RlbF0ubGFiZWxzfSk7XG5cblx0Y29uc3Qgcm91dGVzID0gcm91dGUoZnJvbU1vZGVsKTtcblx0Y29uc3Qgcm91dGVNb2RlbHMgPSBPYmplY3Qua2V5cyhyb3V0ZXMpO1xuXG5cdHJvdXRlTW9kZWxzLmZvckVhY2godG9Nb2RlbCA9PiB7XG5cdFx0Y29uc3QgZm4gPSByb3V0ZXNbdG9Nb2RlbF07XG5cblx0XHRjb252ZXJ0W2Zyb21Nb2RlbF1bdG9Nb2RlbF0gPSB3cmFwUm91bmRlZChmbik7XG5cdFx0Y29udmVydFtmcm9tTW9kZWxdW3RvTW9kZWxdLnJhdyA9IHdyYXBSYXcoZm4pO1xuXHR9KTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHdyYXBBbnNpMTYgPSAoZm4sIG9mZnNldCkgPT4gKC4uLmFyZ3MpID0+IHtcblx0Y29uc3QgY29kZSA9IGZuKC4uLmFyZ3MpO1xuXHRyZXR1cm4gYFxcdTAwMUJbJHtjb2RlICsgb2Zmc2V0fW1gO1xufTtcblxuY29uc3Qgd3JhcEFuc2kyNTYgPSAoZm4sIG9mZnNldCkgPT4gKC4uLmFyZ3MpID0+IHtcblx0Y29uc3QgY29kZSA9IGZuKC4uLmFyZ3MpO1xuXHRyZXR1cm4gYFxcdTAwMUJbJHszOCArIG9mZnNldH07NTske2NvZGV9bWA7XG59O1xuXG5jb25zdCB3cmFwQW5zaTE2bSA9IChmbiwgb2Zmc2V0KSA9PiAoLi4uYXJncykgPT4ge1xuXHRjb25zdCByZ2IgPSBmbiguLi5hcmdzKTtcblx0cmV0dXJuIGBcXHUwMDFCWyR7MzggKyBvZmZzZXR9OzI7JHtyZ2JbMF19OyR7cmdiWzFdfTske3JnYlsyXX1tYDtcbn07XG5cbmNvbnN0IGFuc2kyYW5zaSA9IG4gPT4gbjtcbmNvbnN0IHJnYjJyZ2IgPSAociwgZywgYikgPT4gW3IsIGcsIGJdO1xuXG5jb25zdCBzZXRMYXp5UHJvcGVydHkgPSAob2JqZWN0LCBwcm9wZXJ0eSwgZ2V0KSA9PiB7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCB7XG5cdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IGdldCgpO1xuXG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwge1xuXHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH0sXG5cdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRjb25maWd1cmFibGU6IHRydWVcblx0fSk7XG59O1xuXG4vKiogQHR5cGUge3R5cGVvZiBpbXBvcnQoJ2NvbG9yLWNvbnZlcnQnKX0gKi9cbmxldCBjb2xvckNvbnZlcnQ7XG5jb25zdCBtYWtlRHluYW1pY1N0eWxlcyA9ICh3cmFwLCB0YXJnZXRTcGFjZSwgaWRlbnRpdHksIGlzQmFja2dyb3VuZCkgPT4ge1xuXHRpZiAoY29sb3JDb252ZXJ0ID09PSB1bmRlZmluZWQpIHtcblx0XHRjb2xvckNvbnZlcnQgPSByZXF1aXJlKCdjb2xvci1jb252ZXJ0Jyk7XG5cdH1cblxuXHRjb25zdCBvZmZzZXQgPSBpc0JhY2tncm91bmQgPyAxMCA6IDA7XG5cdGNvbnN0IHN0eWxlcyA9IHt9O1xuXG5cdGZvciAoY29uc3QgW3NvdXJjZVNwYWNlLCBzdWl0ZV0gb2YgT2JqZWN0LmVudHJpZXMoY29sb3JDb252ZXJ0KSkge1xuXHRcdGNvbnN0IG5hbWUgPSBzb3VyY2VTcGFjZSA9PT0gJ2Fuc2kxNicgPyAnYW5zaScgOiBzb3VyY2VTcGFjZTtcblx0XHRpZiAoc291cmNlU3BhY2UgPT09IHRhcmdldFNwYWNlKSB7XG5cdFx0XHRzdHlsZXNbbmFtZV0gPSB3cmFwKGlkZW50aXR5LCBvZmZzZXQpO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHN1aXRlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0c3R5bGVzW25hbWVdID0gd3JhcChzdWl0ZVt0YXJnZXRTcGFjZV0sIG9mZnNldCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHN0eWxlcztcbn07XG5cbmZ1bmN0aW9uIGFzc2VtYmxlU3R5bGVzKCkge1xuXHRjb25zdCBjb2RlcyA9IG5ldyBNYXAoKTtcblx0Y29uc3Qgc3R5bGVzID0ge1xuXHRcdG1vZGlmaWVyOiB7XG5cdFx0XHRyZXNldDogWzAsIDBdLFxuXHRcdFx0Ly8gMjEgaXNuJ3Qgd2lkZWx5IHN1cHBvcnRlZCBhbmQgMjIgZG9lcyB0aGUgc2FtZSB0aGluZ1xuXHRcdFx0Ym9sZDogWzEsIDIyXSxcblx0XHRcdGRpbTogWzIsIDIyXSxcblx0XHRcdGl0YWxpYzogWzMsIDIzXSxcblx0XHRcdHVuZGVybGluZTogWzQsIDI0XSxcblx0XHRcdGludmVyc2U6IFs3LCAyN10sXG5cdFx0XHRoaWRkZW46IFs4LCAyOF0sXG5cdFx0XHRzdHJpa2V0aHJvdWdoOiBbOSwgMjldXG5cdFx0fSxcblx0XHRjb2xvcjoge1xuXHRcdFx0YmxhY2s6IFszMCwgMzldLFxuXHRcdFx0cmVkOiBbMzEsIDM5XSxcblx0XHRcdGdyZWVuOiBbMzIsIDM5XSxcblx0XHRcdHllbGxvdzogWzMzLCAzOV0sXG5cdFx0XHRibHVlOiBbMzQsIDM5XSxcblx0XHRcdG1hZ2VudGE6IFszNSwgMzldLFxuXHRcdFx0Y3lhbjogWzM2LCAzOV0sXG5cdFx0XHR3aGl0ZTogWzM3LCAzOV0sXG5cblx0XHRcdC8vIEJyaWdodCBjb2xvclxuXHRcdFx0YmxhY2tCcmlnaHQ6IFs5MCwgMzldLFxuXHRcdFx0cmVkQnJpZ2h0OiBbOTEsIDM5XSxcblx0XHRcdGdyZWVuQnJpZ2h0OiBbOTIsIDM5XSxcblx0XHRcdHllbGxvd0JyaWdodDogWzkzLCAzOV0sXG5cdFx0XHRibHVlQnJpZ2h0OiBbOTQsIDM5XSxcblx0XHRcdG1hZ2VudGFCcmlnaHQ6IFs5NSwgMzldLFxuXHRcdFx0Y3lhbkJyaWdodDogWzk2LCAzOV0sXG5cdFx0XHR3aGl0ZUJyaWdodDogWzk3LCAzOV1cblx0XHR9LFxuXHRcdGJnQ29sb3I6IHtcblx0XHRcdGJnQmxhY2s6IFs0MCwgNDldLFxuXHRcdFx0YmdSZWQ6IFs0MSwgNDldLFxuXHRcdFx0YmdHcmVlbjogWzQyLCA0OV0sXG5cdFx0XHRiZ1llbGxvdzogWzQzLCA0OV0sXG5cdFx0XHRiZ0JsdWU6IFs0NCwgNDldLFxuXHRcdFx0YmdNYWdlbnRhOiBbNDUsIDQ5XSxcblx0XHRcdGJnQ3lhbjogWzQ2LCA0OV0sXG5cdFx0XHRiZ1doaXRlOiBbNDcsIDQ5XSxcblxuXHRcdFx0Ly8gQnJpZ2h0IGNvbG9yXG5cdFx0XHRiZ0JsYWNrQnJpZ2h0OiBbMTAwLCA0OV0sXG5cdFx0XHRiZ1JlZEJyaWdodDogWzEwMSwgNDldLFxuXHRcdFx0YmdHcmVlbkJyaWdodDogWzEwMiwgNDldLFxuXHRcdFx0YmdZZWxsb3dCcmlnaHQ6IFsxMDMsIDQ5XSxcblx0XHRcdGJnQmx1ZUJyaWdodDogWzEwNCwgNDldLFxuXHRcdFx0YmdNYWdlbnRhQnJpZ2h0OiBbMTA1LCA0OV0sXG5cdFx0XHRiZ0N5YW5CcmlnaHQ6IFsxMDYsIDQ5XSxcblx0XHRcdGJnV2hpdGVCcmlnaHQ6IFsxMDcsIDQ5XVxuXHRcdH1cblx0fTtcblxuXHQvLyBBbGlhcyBicmlnaHQgYmxhY2sgYXMgZ3JheSAoYW5kIGdyZXkpXG5cdHN0eWxlcy5jb2xvci5ncmF5ID0gc3R5bGVzLmNvbG9yLmJsYWNrQnJpZ2h0O1xuXHRzdHlsZXMuYmdDb2xvci5iZ0dyYXkgPSBzdHlsZXMuYmdDb2xvci5iZ0JsYWNrQnJpZ2h0O1xuXHRzdHlsZXMuY29sb3IuZ3JleSA9IHN0eWxlcy5jb2xvci5ibGFja0JyaWdodDtcblx0c3R5bGVzLmJnQ29sb3IuYmdHcmV5ID0gc3R5bGVzLmJnQ29sb3IuYmdCbGFja0JyaWdodDtcblxuXHRmb3IgKGNvbnN0IFtncm91cE5hbWUsIGdyb3VwXSBvZiBPYmplY3QuZW50cmllcyhzdHlsZXMpKSB7XG5cdFx0Zm9yIChjb25zdCBbc3R5bGVOYW1lLCBzdHlsZV0gb2YgT2JqZWN0LmVudHJpZXMoZ3JvdXApKSB7XG5cdFx0XHRzdHlsZXNbc3R5bGVOYW1lXSA9IHtcblx0XHRcdFx0b3BlbjogYFxcdTAwMUJbJHtzdHlsZVswXX1tYCxcblx0XHRcdFx0Y2xvc2U6IGBcXHUwMDFCWyR7c3R5bGVbMV19bWBcblx0XHRcdH07XG5cblx0XHRcdGdyb3VwW3N0eWxlTmFtZV0gPSBzdHlsZXNbc3R5bGVOYW1lXTtcblxuXHRcdFx0Y29kZXMuc2V0KHN0eWxlWzBdLCBzdHlsZVsxXSk7XG5cdFx0fVxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHN0eWxlcywgZ3JvdXBOYW1lLCB7XG5cdFx0XHR2YWx1ZTogZ3JvdXAsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG5cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHN0eWxlcywgJ2NvZGVzJywge1xuXHRcdHZhbHVlOiBjb2Rlcyxcblx0XHRlbnVtZXJhYmxlOiBmYWxzZVxuXHR9KTtcblxuXHRzdHlsZXMuY29sb3IuY2xvc2UgPSAnXFx1MDAxQlszOW0nO1xuXHRzdHlsZXMuYmdDb2xvci5jbG9zZSA9ICdcXHUwMDFCWzQ5bSc7XG5cblx0c2V0TGF6eVByb3BlcnR5KHN0eWxlcy5jb2xvciwgJ2Fuc2knLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTE2LCAnYW5zaTE2JywgYW5zaTJhbnNpLCBmYWxzZSkpO1xuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmNvbG9yLCAnYW5zaTI1NicsICgpID0+IG1ha2VEeW5hbWljU3R5bGVzKHdyYXBBbnNpMjU2LCAnYW5zaTI1NicsIGFuc2kyYW5zaSwgZmFsc2UpKTtcblx0c2V0TGF6eVByb3BlcnR5KHN0eWxlcy5jb2xvciwgJ2Fuc2kxNm0nLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTE2bSwgJ3JnYicsIHJnYjJyZ2IsIGZhbHNlKSk7XG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuYmdDb2xvciwgJ2Fuc2knLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTE2LCAnYW5zaTE2JywgYW5zaTJhbnNpLCB0cnVlKSk7XG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuYmdDb2xvciwgJ2Fuc2kyNTYnLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTI1NiwgJ2Fuc2kyNTYnLCBhbnNpMmFuc2ksIHRydWUpKTtcblx0c2V0TGF6eVByb3BlcnR5KHN0eWxlcy5iZ0NvbG9yLCAnYW5zaTE2bScsICgpID0+IG1ha2VEeW5hbWljU3R5bGVzKHdyYXBBbnNpMTZtLCAncmdiJywgcmdiMnJnYiwgdHJ1ZSkpO1xuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbi8vIE1ha2UgdGhlIGV4cG9ydCBpbW11dGFibGVcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsICdleHBvcnRzJywge1xuXHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRnZXQ6IGFzc2VtYmxlU3R5bGVzXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IHN0cmluZ1dpZHRoID0gcmVxdWlyZSgnc3RyaW5nLXdpZHRoJyk7XG5jb25zdCBzdHJpcEFuc2kgPSByZXF1aXJlKCdzdHJpcC1hbnNpJyk7XG5jb25zdCBhbnNpU3R5bGVzID0gcmVxdWlyZSgnYW5zaS1zdHlsZXMnKTtcblxuY29uc3QgRVNDQVBFUyA9IG5ldyBTZXQoW1xuXHQnXFx1MDAxQicsXG5cdCdcXHUwMDlCJ1xuXSk7XG5cbmNvbnN0IEVORF9DT0RFID0gMzk7XG5cbmNvbnN0IHdyYXBBbnNpID0gY29kZSA9PiBgJHtFU0NBUEVTLnZhbHVlcygpLm5leHQoKS52YWx1ZX1bJHtjb2RlfW1gO1xuXG4vLyBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB3b3JkcyBzcGxpdCBvbiAnICcsIGlnbm9yaW5nXG4vLyB0aGUgZXh0cmEgY2hhcmFjdGVycyBhZGRlZCBieSBhbnNpIGVzY2FwZSBjb2Rlc1xuY29uc3Qgd29yZExlbmd0aHMgPSBzdHJpbmcgPT4gc3RyaW5nLnNwbGl0KCcgJykubWFwKGNoYXJhY3RlciA9PiBzdHJpbmdXaWR0aChjaGFyYWN0ZXIpKTtcblxuLy8gV3JhcCBhIGxvbmcgd29yZCBhY3Jvc3MgbXVsdGlwbGUgcm93c1xuLy8gQW5zaSBlc2NhcGUgY29kZXMgZG8gbm90IGNvdW50IHRvd2FyZHMgbGVuZ3RoXG5jb25zdCB3cmFwV29yZCA9IChyb3dzLCB3b3JkLCBjb2x1bW5zKSA9PiB7XG5cdGNvbnN0IGNoYXJhY3RlcnMgPSBbLi4ud29yZF07XG5cblx0bGV0IGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG5cdGxldCB2aXNpYmxlID0gc3RyaW5nV2lkdGgoc3RyaXBBbnNpKHJvd3Nbcm93cy5sZW5ndGggLSAxXSkpO1xuXG5cdGZvciAoY29uc3QgW2luZGV4LCBjaGFyYWN0ZXJdIG9mIGNoYXJhY3RlcnMuZW50cmllcygpKSB7XG5cdFx0Y29uc3QgY2hhcmFjdGVyTGVuZ3RoID0gc3RyaW5nV2lkdGgoY2hhcmFjdGVyKTtcblxuXHRcdGlmICh2aXNpYmxlICsgY2hhcmFjdGVyTGVuZ3RoIDw9IGNvbHVtbnMpIHtcblx0XHRcdHJvd3Nbcm93cy5sZW5ndGggLSAxXSArPSBjaGFyYWN0ZXI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJvd3MucHVzaChjaGFyYWN0ZXIpO1xuXHRcdFx0dmlzaWJsZSA9IDA7XG5cdFx0fVxuXG5cdFx0aWYgKEVTQ0FQRVMuaGFzKGNoYXJhY3RlcikpIHtcblx0XHRcdGlzSW5zaWRlRXNjYXBlID0gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKGlzSW5zaWRlRXNjYXBlICYmIGNoYXJhY3RlciA9PT0gJ20nKSB7XG5cdFx0XHRpc0luc2lkZUVzY2FwZSA9IGZhbHNlO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGlzSW5zaWRlRXNjYXBlKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHR2aXNpYmxlICs9IGNoYXJhY3Rlckxlbmd0aDtcblxuXHRcdGlmICh2aXNpYmxlID09PSBjb2x1bW5zICYmIGluZGV4IDwgY2hhcmFjdGVycy5sZW5ndGggLSAxKSB7XG5cdFx0XHRyb3dzLnB1c2goJycpO1xuXHRcdFx0dmlzaWJsZSA9IDA7XG5cdFx0fVxuXHR9XG5cblx0Ly8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBsYXN0IHJvdyB3ZSBjb3B5IG92ZXIgaXMgb25seVxuXHQvLyBhbnNpIGVzY2FwZSBjaGFyYWN0ZXJzLCBoYW5kbGUgdGhpcyBlZGdlLWNhc2Vcblx0aWYgKCF2aXNpYmxlICYmIHJvd3Nbcm93cy5sZW5ndGggLSAxXS5sZW5ndGggPiAwICYmIHJvd3MubGVuZ3RoID4gMSkge1xuXHRcdHJvd3Nbcm93cy5sZW5ndGggLSAyXSArPSByb3dzLnBvcCgpO1xuXHR9XG59O1xuXG4vLyBUcmltcyBzcGFjZXMgZnJvbSBhIHN0cmluZyBpZ25vcmluZyBpbnZpc2libGUgc2VxdWVuY2VzXG5jb25zdCBzdHJpbmdWaXNpYmxlVHJpbVNwYWNlc1JpZ2h0ID0gc3RyID0+IHtcblx0Y29uc3Qgd29yZHMgPSBzdHIuc3BsaXQoJyAnKTtcblx0bGV0IGxhc3QgPSB3b3Jkcy5sZW5ndGg7XG5cblx0d2hpbGUgKGxhc3QgPiAwKSB7XG5cdFx0aWYgKHN0cmluZ1dpZHRoKHdvcmRzW2xhc3QgLSAxXSkgPiAwKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRsYXN0LS07XG5cdH1cblxuXHRpZiAobGFzdCA9PT0gd29yZHMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIHN0cjtcblx0fVxuXG5cdHJldHVybiB3b3Jkcy5zbGljZSgwLCBsYXN0KS5qb2luKCcgJykgKyB3b3Jkcy5zbGljZShsYXN0KS5qb2luKCcnKTtcbn07XG5cbi8vIFRoZSB3cmFwLWFuc2kgbW9kdWxlIGNhbiBiZSBpbnZva2VkIGluIGVpdGhlciAnaGFyZCcgb3IgJ3NvZnQnIHdyYXAgbW9kZVxuLy9cbi8vICdoYXJkJyB3aWxsIG5ldmVyIGFsbG93IGEgc3RyaW5nIHRvIHRha2UgdXAgbW9yZSB0aGFuIGNvbHVtbnMgY2hhcmFjdGVyc1xuLy9cbi8vICdzb2Z0JyBhbGxvd3MgbG9uZyB3b3JkcyB0byBleHBhbmQgcGFzdCB0aGUgY29sdW1uIGxlbmd0aFxuY29uc3QgZXhlYyA9IChzdHJpbmcsIGNvbHVtbnMsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRpZiAob3B0aW9ucy50cmltICE9PSBmYWxzZSAmJiBzdHJpbmcudHJpbSgpID09PSAnJykge1xuXHRcdHJldHVybiAnJztcblx0fVxuXG5cdGxldCBwcmUgPSAnJztcblx0bGV0IHJldCA9ICcnO1xuXHRsZXQgZXNjYXBlQ29kZTtcblxuXHRjb25zdCBsZW5ndGhzID0gd29yZExlbmd0aHMoc3RyaW5nKTtcblx0bGV0IHJvd3MgPSBbJyddO1xuXG5cdGZvciAoY29uc3QgW2luZGV4LCB3b3JkXSBvZiBzdHJpbmcuc3BsaXQoJyAnKS5lbnRyaWVzKCkpIHtcblx0XHRpZiAob3B0aW9ucy50cmltICE9PSBmYWxzZSkge1xuXHRcdFx0cm93c1tyb3dzLmxlbmd0aCAtIDFdID0gcm93c1tyb3dzLmxlbmd0aCAtIDFdLnRyaW1MZWZ0KCk7XG5cdFx0fVxuXG5cdFx0bGV0IHJvd0xlbmd0aCA9IHN0cmluZ1dpZHRoKHJvd3Nbcm93cy5sZW5ndGggLSAxXSk7XG5cblx0XHRpZiAoaW5kZXggIT09IDApIHtcblx0XHRcdGlmIChyb3dMZW5ndGggPj0gY29sdW1ucyAmJiAob3B0aW9ucy53b3JkV3JhcCA9PT0gZmFsc2UgfHwgb3B0aW9ucy50cmltID09PSBmYWxzZSkpIHtcblx0XHRcdFx0Ly8gSWYgd2Ugc3RhcnQgd2l0aCBhIG5ldyB3b3JkIGJ1dCB0aGUgY3VycmVudCByb3cgbGVuZ3RoIGVxdWFscyB0aGUgbGVuZ3RoIG9mIHRoZSBjb2x1bW5zLCBhZGQgYSBuZXcgcm93XG5cdFx0XHRcdHJvd3MucHVzaCgnJyk7XG5cdFx0XHRcdHJvd0xlbmd0aCA9IDA7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyb3dMZW5ndGggPiAwIHx8IG9wdGlvbnMudHJpbSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0cm93c1tyb3dzLmxlbmd0aCAtIDFdICs9ICcgJztcblx0XHRcdFx0cm93TGVuZ3RoKys7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSW4gJ2hhcmQnIHdyYXAgbW9kZSwgdGhlIGxlbmd0aCBvZiBhIGxpbmUgaXMgbmV2ZXIgYWxsb3dlZCB0byBleHRlbmQgcGFzdCAnY29sdW1ucydcblx0XHRpZiAob3B0aW9ucy5oYXJkICYmIGxlbmd0aHNbaW5kZXhdID4gY29sdW1ucykge1xuXHRcdFx0Y29uc3QgcmVtYWluaW5nQ29sdW1ucyA9IChjb2x1bW5zIC0gcm93TGVuZ3RoKTtcblx0XHRcdGNvbnN0IGJyZWFrc1N0YXJ0aW5nVGhpc0xpbmUgPSAxICsgTWF0aC5mbG9vcigobGVuZ3Roc1tpbmRleF0gLSByZW1haW5pbmdDb2x1bW5zIC0gMSkgLyBjb2x1bW5zKTtcblx0XHRcdGNvbnN0IGJyZWFrc1N0YXJ0aW5nTmV4dExpbmUgPSBNYXRoLmZsb29yKChsZW5ndGhzW2luZGV4XSAtIDEpIC8gY29sdW1ucyk7XG5cdFx0XHRpZiAoYnJlYWtzU3RhcnRpbmdOZXh0TGluZSA8IGJyZWFrc1N0YXJ0aW5nVGhpc0xpbmUpIHtcblx0XHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHRcdH1cblxuXHRcdFx0d3JhcFdvcmQocm93cywgd29yZCwgY29sdW1ucyk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAocm93TGVuZ3RoICsgbGVuZ3Roc1tpbmRleF0gPiBjb2x1bW5zICYmIHJvd0xlbmd0aCA+IDAgJiYgbGVuZ3Roc1tpbmRleF0gPiAwKSB7XG5cdFx0XHRpZiAob3B0aW9ucy53b3JkV3JhcCA9PT0gZmFsc2UgJiYgcm93TGVuZ3RoIDwgY29sdW1ucykge1xuXHRcdFx0XHR3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHJvd3MucHVzaCgnJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJvd0xlbmd0aCArIGxlbmd0aHNbaW5kZXhdID4gY29sdW1ucyAmJiBvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSkge1xuXHRcdFx0d3JhcFdvcmQocm93cywgd29yZCwgY29sdW1ucyk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gd29yZDtcblx0fVxuXG5cdGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlKSB7XG5cdFx0cm93cyA9IHJvd3MubWFwKHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQpO1xuXHR9XG5cblx0cHJlID0gcm93cy5qb2luKCdcXG4nKTtcblxuXHRmb3IgKGNvbnN0IFtpbmRleCwgY2hhcmFjdGVyXSBvZiBbLi4ucHJlXS5lbnRyaWVzKCkpIHtcblx0XHRyZXQgKz0gY2hhcmFjdGVyO1xuXG5cdFx0aWYgKEVTQ0FQRVMuaGFzKGNoYXJhY3RlcikpIHtcblx0XHRcdGNvbnN0IGNvZGUgPSBwYXJzZUZsb2F0KC9cXGRbXm1dKi8uZXhlYyhwcmUuc2xpY2UoaW5kZXgsIGluZGV4ICsgNCkpKTtcblx0XHRcdGVzY2FwZUNvZGUgPSBjb2RlID09PSBFTkRfQ09ERSA/IG51bGwgOiBjb2RlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvZGUgPSBhbnNpU3R5bGVzLmNvZGVzLmdldChOdW1iZXIoZXNjYXBlQ29kZSkpO1xuXG5cdFx0aWYgKGVzY2FwZUNvZGUgJiYgY29kZSkge1xuXHRcdFx0aWYgKHByZVtpbmRleCArIDFdID09PSAnXFxuJykge1xuXHRcdFx0XHRyZXQgKz0gd3JhcEFuc2koY29kZSk7XG5cdFx0XHR9IGVsc2UgaWYgKGNoYXJhY3RlciA9PT0gJ1xcbicpIHtcblx0XHRcdFx0cmV0ICs9IHdyYXBBbnNpKGVzY2FwZUNvZGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXQ7XG59O1xuXG4vLyBGb3IgZWFjaCBuZXdsaW5lLCBpbnZva2UgdGhlIG1ldGhvZCBzZXBhcmF0ZWx5XG5tb2R1bGUuZXhwb3J0cyA9IChzdHJpbmcsIGNvbHVtbnMsIG9wdGlvbnMpID0+IHtcblx0cmV0dXJuIFN0cmluZyhzdHJpbmcpXG5cdFx0Lm5vcm1hbGl6ZSgpXG5cdFx0LnJlcGxhY2UoL1xcclxcbi9nLCAnXFxuJylcblx0XHQuc3BsaXQoJ1xcbicpXG5cdFx0Lm1hcChsaW5lID0+IGV4ZWMobGluZSwgY29sdW1ucywgb3B0aW9ucykpXG5cdFx0LmpvaW4oJ1xcbicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3Qgc3RyaW5nUmVwbGFjZUFsbCA9IChzdHJpbmcsIHN1YnN0cmluZywgcmVwbGFjZXIpID0+IHtcblx0bGV0IGluZGV4ID0gc3RyaW5nLmluZGV4T2Yoc3Vic3RyaW5nKTtcblx0aWYgKGluZGV4ID09PSAtMSkge1xuXHRcdHJldHVybiBzdHJpbmc7XG5cdH1cblxuXHRjb25zdCBzdWJzdHJpbmdMZW5ndGggPSBzdWJzdHJpbmcubGVuZ3RoO1xuXHRsZXQgZW5kSW5kZXggPSAwO1xuXHRsZXQgcmV0dXJuVmFsdWUgPSAnJztcblx0ZG8ge1xuXHRcdHJldHVyblZhbHVlICs9IHN0cmluZy5zdWJzdHIoZW5kSW5kZXgsIGluZGV4IC0gZW5kSW5kZXgpICsgc3Vic3RyaW5nICsgcmVwbGFjZXI7XG5cdFx0ZW5kSW5kZXggPSBpbmRleCArIHN1YnN0cmluZ0xlbmd0aDtcblx0XHRpbmRleCA9IHN0cmluZy5pbmRleE9mKHN1YnN0cmluZywgZW5kSW5kZXgpO1xuXHR9IHdoaWxlIChpbmRleCAhPT0gLTEpO1xuXG5cdHJldHVyblZhbHVlICs9IHN0cmluZy5zdWJzdHIoZW5kSW5kZXgpO1xuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59O1xuXG5jb25zdCBzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXggPSAoc3RyaW5nLCBwcmVmaXgsIHBvc3RmaXgsIGluZGV4KSA9PiB7XG5cdGxldCBlbmRJbmRleCA9IDA7XG5cdGxldCByZXR1cm5WYWx1ZSA9ICcnO1xuXHRkbyB7XG5cdFx0Y29uc3QgZ290Q1IgPSBzdHJpbmdbaW5kZXggLSAxXSA9PT0gJ1xccic7XG5cdFx0cmV0dXJuVmFsdWUgKz0gc3RyaW5nLnN1YnN0cihlbmRJbmRleCwgKGdvdENSID8gaW5kZXggLSAxIDogaW5kZXgpIC0gZW5kSW5kZXgpICsgcHJlZml4ICsgKGdvdENSID8gJ1xcclxcbicgOiAnXFxuJykgKyBwb3N0Zml4O1xuXHRcdGVuZEluZGV4ID0gaW5kZXggKyAxO1xuXHRcdGluZGV4ID0gc3RyaW5nLmluZGV4T2YoJ1xcbicsIGVuZEluZGV4KTtcblx0fSB3aGlsZSAoaW5kZXggIT09IC0xKTtcblxuXHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc3Vic3RyKGVuZEluZGV4KTtcblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHN0cmluZ1JlcGxhY2VBbGwsXG5cdHN0cmluZ0VuY2FzZUNSTEZXaXRoRmlyc3RJbmRleFxufTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IFRFTVBMQVRFX1JFR0VYID0gLyg/OlxcXFwodSg/OlthLWZcXGRdezR9fFxce1thLWZcXGRdezEsNn1cXH0pfHhbYS1mXFxkXXsyfXwuKSl8KD86XFx7KH4pPyhcXHcrKD86XFwoW14pXSpcXCkpPyg/OlxcLlxcdysoPzpcXChbXildKlxcKSk/KSopKD86WyBcXHRdfCg/PVxccj9cXG4pKSl8KFxcfSl8KCg/Oi58W1xcclxcblxcZl0pKz8pL2dpO1xuY29uc3QgU1RZTEVfUkVHRVggPSAvKD86XnxcXC4pKFxcdyspKD86XFwoKFteKV0qKVxcKSk/L2c7XG5jb25zdCBTVFJJTkdfUkVHRVggPSAvXihbJ1wiXSkoKD86XFxcXC58KD8hXFwxKVteXFxcXF0pKilcXDEkLztcbmNvbnN0IEVTQ0FQRV9SRUdFWCA9IC9cXFxcKHUoPzpbYS1mXFxkXXs0fXx7W2EtZlxcZF17MSw2fX0pfHhbYS1mXFxkXXsyfXwuKXwoW15cXFxcXSkvZ2k7XG5cbmNvbnN0IEVTQ0FQRVMgPSBuZXcgTWFwKFtcblx0WyduJywgJ1xcbiddLFxuXHRbJ3InLCAnXFxyJ10sXG5cdFsndCcsICdcXHQnXSxcblx0WydiJywgJ1xcYiddLFxuXHRbJ2YnLCAnXFxmJ10sXG5cdFsndicsICdcXHYnXSxcblx0WycwJywgJ1xcMCddLFxuXHRbJ1xcXFwnLCAnXFxcXCddLFxuXHRbJ2UnLCAnXFx1MDAxQiddLFxuXHRbJ2EnLCAnXFx1MDAwNyddXG5dKTtcblxuZnVuY3Rpb24gdW5lc2NhcGUoYykge1xuXHRjb25zdCB1ID0gY1swXSA9PT0gJ3UnO1xuXHRjb25zdCBicmFja2V0ID0gY1sxXSA9PT0gJ3snO1xuXG5cdGlmICgodSAmJiAhYnJhY2tldCAmJiBjLmxlbmd0aCA9PT0gNSkgfHwgKGNbMF0gPT09ICd4JyAmJiBjLmxlbmd0aCA9PT0gMykpIHtcblx0XHRyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChjLnNsaWNlKDEpLCAxNikpO1xuXHR9XG5cblx0aWYgKHUgJiYgYnJhY2tldCkge1xuXHRcdHJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludChwYXJzZUludChjLnNsaWNlKDIsIC0xKSwgMTYpKTtcblx0fVxuXG5cdHJldHVybiBFU0NBUEVTLmdldChjKSB8fCBjO1xufVxuXG5mdW5jdGlvbiBwYXJzZUFyZ3VtZW50cyhuYW1lLCBhcmd1bWVudHNfKSB7XG5cdGNvbnN0IHJlc3VsdHMgPSBbXTtcblx0Y29uc3QgY2h1bmtzID0gYXJndW1lbnRzXy50cmltKCkuc3BsaXQoL1xccyosXFxzKi9nKTtcblx0bGV0IG1hdGNoZXM7XG5cblx0Zm9yIChjb25zdCBjaHVuayBvZiBjaHVua3MpIHtcblx0XHRjb25zdCBudW1iZXIgPSBOdW1iZXIoY2h1bmspO1xuXHRcdGlmICghTnVtYmVyLmlzTmFOKG51bWJlcikpIHtcblx0XHRcdHJlc3VsdHMucHVzaChudW1iZXIpO1xuXHRcdH0gZWxzZSBpZiAoKG1hdGNoZXMgPSBjaHVuay5tYXRjaChTVFJJTkdfUkVHRVgpKSkge1xuXHRcdFx0cmVzdWx0cy5wdXNoKG1hdGNoZXNbMl0ucmVwbGFjZShFU0NBUEVfUkVHRVgsIChtLCBlc2NhcGUsIGNoYXJhY3RlcikgPT4gZXNjYXBlID8gdW5lc2NhcGUoZXNjYXBlKSA6IGNoYXJhY3RlcikpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgQ2hhbGsgdGVtcGxhdGUgc3R5bGUgYXJndW1lbnQ6ICR7Y2h1bmt9IChpbiBzdHlsZSAnJHtuYW1lfScpYCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU3R5bGUoc3R5bGUpIHtcblx0U1RZTEVfUkVHRVgubGFzdEluZGV4ID0gMDtcblxuXHRjb25zdCByZXN1bHRzID0gW107XG5cdGxldCBtYXRjaGVzO1xuXG5cdHdoaWxlICgobWF0Y2hlcyA9IFNUWUxFX1JFR0VYLmV4ZWMoc3R5bGUpKSAhPT0gbnVsbCkge1xuXHRcdGNvbnN0IG5hbWUgPSBtYXRjaGVzWzFdO1xuXG5cdFx0aWYgKG1hdGNoZXNbMl0pIHtcblx0XHRcdGNvbnN0IGFyZ3MgPSBwYXJzZUFyZ3VtZW50cyhuYW1lLCBtYXRjaGVzWzJdKTtcblx0XHRcdHJlc3VsdHMucHVzaChbbmFtZV0uY29uY2F0KGFyZ3MpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0cy5wdXNoKFtuYW1lXSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkU3R5bGUoY2hhbGssIHN0eWxlcykge1xuXHRjb25zdCBlbmFibGVkID0ge307XG5cblx0Zm9yIChjb25zdCBsYXllciBvZiBzdHlsZXMpIHtcblx0XHRmb3IgKGNvbnN0IHN0eWxlIG9mIGxheWVyLnN0eWxlcykge1xuXHRcdFx0ZW5hYmxlZFtzdHlsZVswXV0gPSBsYXllci5pbnZlcnNlID8gbnVsbCA6IHN0eWxlLnNsaWNlKDEpO1xuXHRcdH1cblx0fVxuXG5cdGxldCBjdXJyZW50ID0gY2hhbGs7XG5cdGZvciAoY29uc3QgW3N0eWxlTmFtZSwgc3R5bGVzXSBvZiBPYmplY3QuZW50cmllcyhlbmFibGVkKSkge1xuXHRcdGlmICghQXJyYXkuaXNBcnJheShzdHlsZXMpKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoIShzdHlsZU5hbWUgaW4gY3VycmVudCkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgVW5rbm93biBDaGFsayBzdHlsZTogJHtzdHlsZU5hbWV9YCk7XG5cdFx0fVxuXG5cdFx0Y3VycmVudCA9IHN0eWxlcy5sZW5ndGggPiAwID8gY3VycmVudFtzdHlsZU5hbWVdKC4uLnN0eWxlcykgOiBjdXJyZW50W3N0eWxlTmFtZV07XG5cdH1cblxuXHRyZXR1cm4gY3VycmVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSAoY2hhbGssIHRlbXBvcmFyeSkgPT4ge1xuXHRjb25zdCBzdHlsZXMgPSBbXTtcblx0Y29uc3QgY2h1bmtzID0gW107XG5cdGxldCBjaHVuayA9IFtdO1xuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtcGFyYW1zXG5cdHRlbXBvcmFyeS5yZXBsYWNlKFRFTVBMQVRFX1JFR0VYLCAobSwgZXNjYXBlQ2hhcmFjdGVyLCBpbnZlcnNlLCBzdHlsZSwgY2xvc2UsIGNoYXJhY3RlcikgPT4ge1xuXHRcdGlmIChlc2NhcGVDaGFyYWN0ZXIpIHtcblx0XHRcdGNodW5rLnB1c2godW5lc2NhcGUoZXNjYXBlQ2hhcmFjdGVyKSk7XG5cdFx0fSBlbHNlIGlmIChzdHlsZSkge1xuXHRcdFx0Y29uc3Qgc3RyaW5nID0gY2h1bmsuam9pbignJyk7XG5cdFx0XHRjaHVuayA9IFtdO1xuXHRcdFx0Y2h1bmtzLnB1c2goc3R5bGVzLmxlbmd0aCA9PT0gMCA/IHN0cmluZyA6IGJ1aWxkU3R5bGUoY2hhbGssIHN0eWxlcykoc3RyaW5nKSk7XG5cdFx0XHRzdHlsZXMucHVzaCh7aW52ZXJzZSwgc3R5bGVzOiBwYXJzZVN0eWxlKHN0eWxlKX0pO1xuXHRcdH0gZWxzZSBpZiAoY2xvc2UpIHtcblx0XHRcdGlmIChzdHlsZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignRm91bmQgZXh0cmFuZW91cyB9IGluIENoYWxrIHRlbXBsYXRlIGxpdGVyYWwnKTtcblx0XHRcdH1cblxuXHRcdFx0Y2h1bmtzLnB1c2goYnVpbGRTdHlsZShjaGFsaywgc3R5bGVzKShjaHVuay5qb2luKCcnKSkpO1xuXHRcdFx0Y2h1bmsgPSBbXTtcblx0XHRcdHN0eWxlcy5wb3AoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2h1bmsucHVzaChjaGFyYWN0ZXIpO1xuXHRcdH1cblx0fSk7XG5cblx0Y2h1bmtzLnB1c2goY2h1bmsuam9pbignJykpO1xuXG5cdGlmIChzdHlsZXMubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGVyck1lc3NhZ2UgPSBgQ2hhbGsgdGVtcGxhdGUgbGl0ZXJhbCBpcyBtaXNzaW5nICR7c3R5bGVzLmxlbmd0aH0gY2xvc2luZyBicmFja2V0JHtzdHlsZXMubGVuZ3RoID09PSAxID8gJycgOiAncyd9IChcXGB9XFxgKWA7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGVyck1lc3NhZ2UpO1xuXHR9XG5cblx0cmV0dXJuIGNodW5rcy5qb2luKCcnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCBhbnNpU3R5bGVzID0gcmVxdWlyZSgnYW5zaS1zdHlsZXMnKTtcbmNvbnN0IHtzdGRvdXQ6IHN0ZG91dENvbG9yLCBzdGRlcnI6IHN0ZGVyckNvbG9yfSA9IHJlcXVpcmUoJ3N1cHBvcnRzLWNvbG9yJyk7XG5jb25zdCB7XG5cdHN0cmluZ1JlcGxhY2VBbGwsXG5cdHN0cmluZ0VuY2FzZUNSTEZXaXRoRmlyc3RJbmRleFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5jb25zdCB7aXNBcnJheX0gPSBBcnJheTtcblxuLy8gYHN1cHBvcnRzQ29sb3IubGV2ZWxgIOKGkiBgYW5zaVN0eWxlcy5jb2xvcltuYW1lXWAgbWFwcGluZ1xuY29uc3QgbGV2ZWxNYXBwaW5nID0gW1xuXHQnYW5zaScsXG5cdCdhbnNpJyxcblx0J2Fuc2kyNTYnLFxuXHQnYW5zaTE2bSdcbl07XG5cbmNvbnN0IHN0eWxlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmNvbnN0IGFwcGx5T3B0aW9ucyA9IChvYmplY3QsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRpZiAob3B0aW9ucy5sZXZlbCAmJiAhKE51bWJlci5pc0ludGVnZXIob3B0aW9ucy5sZXZlbCkgJiYgb3B0aW9ucy5sZXZlbCA+PSAwICYmIG9wdGlvbnMubGV2ZWwgPD0gMykpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgbGV2ZWxgIG9wdGlvbiBzaG91bGQgYmUgYW4gaW50ZWdlciBmcm9tIDAgdG8gMycpO1xuXHR9XG5cblx0Ly8gRGV0ZWN0IGxldmVsIGlmIG5vdCBzZXQgbWFudWFsbHlcblx0Y29uc3QgY29sb3JMZXZlbCA9IHN0ZG91dENvbG9yID8gc3Rkb3V0Q29sb3IubGV2ZWwgOiAwO1xuXHRvYmplY3QubGV2ZWwgPSBvcHRpb25zLmxldmVsID09PSB1bmRlZmluZWQgPyBjb2xvckxldmVsIDogb3B0aW9ucy5sZXZlbDtcbn07XG5cbmNsYXNzIENoYWxrQ2xhc3Mge1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0cnVjdG9yLXJldHVyblxuXHRcdHJldHVybiBjaGFsa0ZhY3Rvcnkob3B0aW9ucyk7XG5cdH1cbn1cblxuY29uc3QgY2hhbGtGYWN0b3J5ID0gb3B0aW9ucyA9PiB7XG5cdGNvbnN0IGNoYWxrID0ge307XG5cdGFwcGx5T3B0aW9ucyhjaGFsaywgb3B0aW9ucyk7XG5cblx0Y2hhbGsudGVtcGxhdGUgPSAoLi4uYXJndW1lbnRzXykgPT4gY2hhbGtUYWcoY2hhbGsudGVtcGxhdGUsIC4uLmFyZ3VtZW50c18pO1xuXG5cdE9iamVjdC5zZXRQcm90b3R5cGVPZihjaGFsaywgQ2hhbGsucHJvdG90eXBlKTtcblx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGNoYWxrLnRlbXBsYXRlLCBjaGFsayk7XG5cblx0Y2hhbGsudGVtcGxhdGUuY29uc3RydWN0b3IgPSAoKSA9PiB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdgY2hhbGsuY29uc3RydWN0b3IoKWAgaXMgZGVwcmVjYXRlZC4gVXNlIGBuZXcgY2hhbGsuSW5zdGFuY2UoKWAgaW5zdGVhZC4nKTtcblx0fTtcblxuXHRjaGFsay50ZW1wbGF0ZS5JbnN0YW5jZSA9IENoYWxrQ2xhc3M7XG5cblx0cmV0dXJuIGNoYWxrLnRlbXBsYXRlO1xufTtcblxuZnVuY3Rpb24gQ2hhbGsob3B0aW9ucykge1xuXHRyZXR1cm4gY2hhbGtGYWN0b3J5KG9wdGlvbnMpO1xufVxuXG5mb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhhbnNpU3R5bGVzKSkge1xuXHRzdHlsZXNbc3R5bGVOYW1lXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcih0aGlzLCBjcmVhdGVTdHlsZXIoc3R5bGUub3Blbiwgc3R5bGUuY2xvc2UsIHRoaXMuX3N0eWxlciksIHRoaXMuX2lzRW1wdHkpO1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHN0eWxlTmFtZSwge3ZhbHVlOiBidWlsZGVyfSk7XG5cdFx0XHRyZXR1cm4gYnVpbGRlcjtcblx0XHR9XG5cdH07XG59XG5cbnN0eWxlcy52aXNpYmxlID0ge1xuXHRnZXQoKSB7XG5cdFx0Y29uc3QgYnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIodGhpcywgdGhpcy5fc3R5bGVyLCB0cnVlKTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3Zpc2libGUnLCB7dmFsdWU6IGJ1aWxkZXJ9KTtcblx0XHRyZXR1cm4gYnVpbGRlcjtcblx0fVxufTtcblxuY29uc3QgdXNlZE1vZGVscyA9IFsncmdiJywgJ2hleCcsICdrZXl3b3JkJywgJ2hzbCcsICdoc3YnLCAnaHdiJywgJ2Fuc2knLCAnYW5zaTI1NiddO1xuXG5mb3IgKGNvbnN0IG1vZGVsIG9mIHVzZWRNb2RlbHMpIHtcblx0c3R5bGVzW21vZGVsXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCB7bGV2ZWx9ID0gdGhpcztcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoLi4uYXJndW1lbnRzXykge1xuXHRcdFx0XHRjb25zdCBzdHlsZXIgPSBjcmVhdGVTdHlsZXIoYW5zaVN0eWxlcy5jb2xvcltsZXZlbE1hcHBpbmdbbGV2ZWxdXVttb2RlbF0oLi4uYXJndW1lbnRzXyksIGFuc2lTdHlsZXMuY29sb3IuY2xvc2UsIHRoaXMuX3N0eWxlcik7XG5cdFx0XHRcdHJldHVybiBjcmVhdGVCdWlsZGVyKHRoaXMsIHN0eWxlciwgdGhpcy5faXNFbXB0eSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fTtcbn1cblxuZm9yIChjb25zdCBtb2RlbCBvZiB1c2VkTW9kZWxzKSB7XG5cdGNvbnN0IGJnTW9kZWwgPSAnYmcnICsgbW9kZWxbMF0udG9VcHBlckNhc2UoKSArIG1vZGVsLnNsaWNlKDEpO1xuXHRzdHlsZXNbYmdNb2RlbF0gPSB7XG5cdFx0Z2V0KCkge1xuXHRcdFx0Y29uc3Qge2xldmVsfSA9IHRoaXM7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3VtZW50c18pIHtcblx0XHRcdFx0Y29uc3Qgc3R5bGVyID0gY3JlYXRlU3R5bGVyKGFuc2lTdHlsZXMuYmdDb2xvcltsZXZlbE1hcHBpbmdbbGV2ZWxdXVttb2RlbF0oLi4uYXJndW1lbnRzXyksIGFuc2lTdHlsZXMuYmdDb2xvci5jbG9zZSwgdGhpcy5fc3R5bGVyKTtcblx0XHRcdFx0cmV0dXJuIGNyZWF0ZUJ1aWxkZXIodGhpcywgc3R5bGVyLCB0aGlzLl9pc0VtcHR5KTtcblx0XHRcdH07XG5cdFx0fVxuXHR9O1xufVxuXG5jb25zdCBwcm90byA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCgpID0+IHt9LCB7XG5cdC4uLnN0eWxlcyxcblx0bGV2ZWw6IHtcblx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiB0aGlzLl9nZW5lcmF0b3IubGV2ZWw7XG5cdFx0fSxcblx0XHRzZXQobGV2ZWwpIHtcblx0XHRcdHRoaXMuX2dlbmVyYXRvci5sZXZlbCA9IGxldmVsO1xuXHRcdH1cblx0fVxufSk7XG5cbmNvbnN0IGNyZWF0ZVN0eWxlciA9IChvcGVuLCBjbG9zZSwgcGFyZW50KSA9PiB7XG5cdGxldCBvcGVuQWxsO1xuXHRsZXQgY2xvc2VBbGw7XG5cdGlmIChwYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdG9wZW5BbGwgPSBvcGVuO1xuXHRcdGNsb3NlQWxsID0gY2xvc2U7XG5cdH0gZWxzZSB7XG5cdFx0b3BlbkFsbCA9IHBhcmVudC5vcGVuQWxsICsgb3Blbjtcblx0XHRjbG9zZUFsbCA9IGNsb3NlICsgcGFyZW50LmNsb3NlQWxsO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRvcGVuLFxuXHRcdGNsb3NlLFxuXHRcdG9wZW5BbGwsXG5cdFx0Y2xvc2VBbGwsXG5cdFx0cGFyZW50XG5cdH07XG59O1xuXG5jb25zdCBjcmVhdGVCdWlsZGVyID0gKHNlbGYsIF9zdHlsZXIsIF9pc0VtcHR5KSA9PiB7XG5cdGNvbnN0IGJ1aWxkZXIgPSAoLi4uYXJndW1lbnRzXykgPT4ge1xuXHRcdGlmIChpc0FycmF5KGFyZ3VtZW50c19bMF0pICYmIGlzQXJyYXkoYXJndW1lbnRzX1swXS5yYXcpKSB7XG5cdFx0XHQvLyBDYWxsZWQgYXMgYSB0ZW1wbGF0ZSBsaXRlcmFsLCBmb3IgZXhhbXBsZTogY2hhbGsucmVkYDIgKyAzID0ge2JvbGQgJHsyKzN9fWBcblx0XHRcdHJldHVybiBhcHBseVN0eWxlKGJ1aWxkZXIsIGNoYWxrVGFnKGJ1aWxkZXIsIC4uLmFyZ3VtZW50c18pKTtcblx0XHR9XG5cblx0XHQvLyBTaW5nbGUgYXJndW1lbnQgaXMgaG90IHBhdGgsIGltcGxpY2l0IGNvZXJjaW9uIGlzIGZhc3RlciB0aGFuIGFueXRoaW5nXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWltcGxpY2l0LWNvZXJjaW9uXG5cdFx0cmV0dXJuIGFwcGx5U3R5bGUoYnVpbGRlciwgKGFyZ3VtZW50c18ubGVuZ3RoID09PSAxKSA/ICgnJyArIGFyZ3VtZW50c19bMF0pIDogYXJndW1lbnRzXy5qb2luKCcgJykpO1xuXHR9O1xuXG5cdC8vIFdlIGFsdGVyIHRoZSBwcm90b3R5cGUgYmVjYXVzZSB3ZSBtdXN0IHJldHVybiBhIGZ1bmN0aW9uLCBidXQgdGhlcmUgaXNcblx0Ly8gbm8gd2F5IHRvIGNyZWF0ZSBhIGZ1bmN0aW9uIHdpdGggYSBkaWZmZXJlbnQgcHJvdG90eXBlXG5cdE9iamVjdC5zZXRQcm90b3R5cGVPZihidWlsZGVyLCBwcm90byk7XG5cblx0YnVpbGRlci5fZ2VuZXJhdG9yID0gc2VsZjtcblx0YnVpbGRlci5fc3R5bGVyID0gX3N0eWxlcjtcblx0YnVpbGRlci5faXNFbXB0eSA9IF9pc0VtcHR5O1xuXG5cdHJldHVybiBidWlsZGVyO1xufTtcblxuY29uc3QgYXBwbHlTdHlsZSA9IChzZWxmLCBzdHJpbmcpID0+IHtcblx0aWYgKHNlbGYubGV2ZWwgPD0gMCB8fCAhc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHNlbGYuX2lzRW1wdHkgPyAnJyA6IHN0cmluZztcblx0fVxuXG5cdGxldCBzdHlsZXIgPSBzZWxmLl9zdHlsZXI7XG5cblx0aWYgKHN0eWxlciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHN0cmluZztcblx0fVxuXG5cdGNvbnN0IHtvcGVuQWxsLCBjbG9zZUFsbH0gPSBzdHlsZXI7XG5cdGlmIChzdHJpbmcuaW5kZXhPZignXFx1MDAxQicpICE9PSAtMSkge1xuXHRcdHdoaWxlIChzdHlsZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gUmVwbGFjZSBhbnkgaW5zdGFuY2VzIGFscmVhZHkgcHJlc2VudCB3aXRoIGEgcmUtb3BlbmluZyBjb2RlXG5cdFx0XHQvLyBvdGhlcndpc2Ugb25seSB0aGUgcGFydCBvZiB0aGUgc3RyaW5nIHVudGlsIHNhaWQgY2xvc2luZyBjb2RlXG5cdFx0XHQvLyB3aWxsIGJlIGNvbG9yZWQsIGFuZCB0aGUgcmVzdCB3aWxsIHNpbXBseSBiZSAncGxhaW4nLlxuXHRcdFx0c3RyaW5nID0gc3RyaW5nUmVwbGFjZUFsbChzdHJpbmcsIHN0eWxlci5jbG9zZSwgc3R5bGVyLm9wZW4pO1xuXG5cdFx0XHRzdHlsZXIgPSBzdHlsZXIucGFyZW50O1xuXHRcdH1cblx0fVxuXG5cdC8vIFdlIGNhbiBtb3ZlIGJvdGggbmV4dCBhY3Rpb25zIG91dCBvZiBsb29wLCBiZWNhdXNlIHJlbWFpbmluZyBhY3Rpb25zIGluIGxvb3Agd29uJ3QgaGF2ZVxuXHQvLyBhbnkvdmlzaWJsZSBlZmZlY3Qgb24gcGFydHMgd2UgYWRkIGhlcmUuIENsb3NlIHRoZSBzdHlsaW5nIGJlZm9yZSBhIGxpbmVicmVhayBhbmQgcmVvcGVuXG5cdC8vIGFmdGVyIG5leHQgbGluZSB0byBmaXggYSBibGVlZCBpc3N1ZSBvbiBtYWNPUzogaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL2NoYWxrL3B1bGwvOTJcblx0Y29uc3QgbGZJbmRleCA9IHN0cmluZy5pbmRleE9mKCdcXG4nKTtcblx0aWYgKGxmSW5kZXggIT09IC0xKSB7XG5cdFx0c3RyaW5nID0gc3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4KHN0cmluZywgY2xvc2VBbGwsIG9wZW5BbGwsIGxmSW5kZXgpO1xuXHR9XG5cblx0cmV0dXJuIG9wZW5BbGwgKyBzdHJpbmcgKyBjbG9zZUFsbDtcbn07XG5cbmxldCB0ZW1wbGF0ZTtcbmNvbnN0IGNoYWxrVGFnID0gKGNoYWxrLCAuLi5zdHJpbmdzKSA9PiB7XG5cdGNvbnN0IFtmaXJzdFN0cmluZ10gPSBzdHJpbmdzO1xuXG5cdGlmICghaXNBcnJheShmaXJzdFN0cmluZykgfHwgIWlzQXJyYXkoZmlyc3RTdHJpbmcucmF3KSkge1xuXHRcdC8vIElmIGNoYWxrKCkgd2FzIGNhbGxlZCBieSBpdHNlbGYgb3Igd2l0aCBhIHN0cmluZyxcblx0XHQvLyByZXR1cm4gdGhlIHN0cmluZyBpdHNlbGYgYXMgYSBzdHJpbmcuXG5cdFx0cmV0dXJuIHN0cmluZ3Muam9pbignICcpO1xuXHR9XG5cblx0Y29uc3QgYXJndW1lbnRzXyA9IHN0cmluZ3Muc2xpY2UoMSk7XG5cdGNvbnN0IHBhcnRzID0gW2ZpcnN0U3RyaW5nLnJhd1swXV07XG5cblx0Zm9yIChsZXQgaSA9IDE7IGkgPCBmaXJzdFN0cmluZy5sZW5ndGg7IGkrKykge1xuXHRcdHBhcnRzLnB1c2goXG5cdFx0XHRTdHJpbmcoYXJndW1lbnRzX1tpIC0gMV0pLnJlcGxhY2UoL1t7fVxcXFxdL2csICdcXFxcJCYnKSxcblx0XHRcdFN0cmluZyhmaXJzdFN0cmluZy5yYXdbaV0pXG5cdFx0KTtcblx0fVxuXG5cdGlmICh0ZW1wbGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGVtcGxhdGUgPSByZXF1aXJlKCcuL3RlbXBsYXRlcycpO1xuXHR9XG5cblx0cmV0dXJuIHRlbXBsYXRlKGNoYWxrLCBwYXJ0cy5qb2luKCcnKSk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDaGFsay5wcm90b3R5cGUsIHN0eWxlcyk7XG5cbmNvbnN0IGNoYWxrID0gQ2hhbGsoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG5jaGFsay5zdXBwb3J0c0NvbG9yID0gc3Rkb3V0Q29sb3I7XG5jaGFsay5zdGRlcnIgPSBDaGFsayh7bGV2ZWw6IHN0ZGVyckNvbG9yID8gc3RkZXJyQ29sb3IubGV2ZWwgOiAwfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuY2hhbGsuc3RkZXJyLnN1cHBvcnRzQ29sb3IgPSBzdGRlcnJDb2xvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBjaGFsaztcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgbWltaWNGbiA9ICh0bywgZnJvbSkgPT4ge1xuXHRmb3IgKGNvbnN0IHByb3Agb2YgUmVmbGVjdC5vd25LZXlzKGZyb20pKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRvLCBwcm9wLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGZyb20sIHByb3ApKTtcblx0fVxuXG5cdHJldHVybiB0bztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbWltaWNGbjtcbi8vIFRPRE86IFJlbW92ZSB0aGlzIGZvciB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gbWltaWNGbjtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IG1pbWljRm4gPSByZXF1aXJlKCdtaW1pYy1mbicpO1xuXG5jb25zdCBjYWxsZWRGdW5jdGlvbnMgPSBuZXcgV2Vha01hcCgpO1xuXG5jb25zdCBvbmV0aW1lID0gKGZ1bmN0aW9uXywgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGlmICh0eXBlb2YgZnVuY3Rpb25fICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYSBmdW5jdGlvbicpO1xuXHR9XG5cblx0bGV0IHJldHVyblZhbHVlO1xuXHRsZXQgY2FsbENvdW50ID0gMDtcblx0Y29uc3QgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25fLmRpc3BsYXlOYW1lIHx8IGZ1bmN0aW9uXy5uYW1lIHx8ICc8YW5vbnltb3VzPic7XG5cblx0Y29uc3Qgb25ldGltZSA9IGZ1bmN0aW9uICguLi5hcmd1bWVudHNfKSB7XG5cdFx0Y2FsbGVkRnVuY3Rpb25zLnNldChvbmV0aW1lLCArK2NhbGxDb3VudCk7XG5cblx0XHRpZiAoY2FsbENvdW50ID09PSAxKSB7XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IGZ1bmN0aW9uXy5hcHBseSh0aGlzLCBhcmd1bWVudHNfKTtcblx0XHRcdGZ1bmN0aW9uXyA9IG51bGw7XG5cdFx0fSBlbHNlIGlmIChvcHRpb25zLnRocm93ID09PSB0cnVlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEZ1bmN0aW9uIFxcYCR7ZnVuY3Rpb25OYW1lfVxcYCBjYW4gb25seSBiZSBjYWxsZWQgb25jZWApO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXR1cm5WYWx1ZTtcblx0fTtcblxuXHRtaW1pY0ZuKG9uZXRpbWUsIGZ1bmN0aW9uXyk7XG5cdGNhbGxlZEZ1bmN0aW9ucy5zZXQob25ldGltZSwgY2FsbENvdW50KTtcblxuXHRyZXR1cm4gb25ldGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gb25ldGltZTtcbi8vIFRPRE86IFJlbW92ZSB0aGlzIGZvciB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gb25ldGltZTtcblxubW9kdWxlLmV4cG9ydHMuY2FsbENvdW50ID0gZnVuY3Rpb25fID0+IHtcblx0aWYgKCFjYWxsZWRGdW5jdGlvbnMuaGFzKGZ1bmN0aW9uXykpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYFRoZSBnaXZlbiBmdW5jdGlvbiBcXGAke2Z1bmN0aW9uXy5uYW1lfVxcYCBpcyBub3Qgd3JhcHBlZCBieSB0aGUgXFxgb25ldGltZVxcYCBwYWNrYWdlYCk7XG5cdH1cblxuXHRyZXR1cm4gY2FsbGVkRnVuY3Rpb25zLmdldChmdW5jdGlvbl8pO1xufTtcbiIsIi8vIFRoaXMgaXMgbm90IHRoZSBzZXQgb2YgYWxsIHBvc3NpYmxlIHNpZ25hbHMuXG4vL1xuLy8gSXQgSVMsIGhvd2V2ZXIsIHRoZSBzZXQgb2YgYWxsIHNpZ25hbHMgdGhhdCB0cmlnZ2VyXG4vLyBhbiBleGl0IG9uIGVpdGhlciBMaW51eCBvciBCU0Qgc3lzdGVtcy4gIExpbnV4IGlzIGFcbi8vIHN1cGVyc2V0IG9mIHRoZSBzaWduYWwgbmFtZXMgc3VwcG9ydGVkIG9uIEJTRCwgYW5kXG4vLyB0aGUgdW5rbm93biBzaWduYWxzIGp1c3QgZmFpbCB0byByZWdpc3Rlciwgc28gd2UgY2FuXG4vLyBjYXRjaCB0aGF0IGVhc2lseSBlbm91Z2guXG4vL1xuLy8gRG9uJ3QgYm90aGVyIHdpdGggU0lHS0lMTC4gIEl0J3MgdW5jYXRjaGFibGUsIHdoaWNoXG4vLyBtZWFucyB0aGF0IHdlIGNhbid0IGZpcmUgYW55IGNhbGxiYWNrcyBhbnl3YXkuXG4vL1xuLy8gSWYgYSB1c2VyIGRvZXMgaGFwcGVuIHRvIHJlZ2lzdGVyIGEgaGFuZGxlciBvbiBhIG5vbi1cbi8vIGZhdGFsIHNpZ25hbCBsaWtlIFNJR1dJTkNIIG9yIHNvbWV0aGluZywgYW5kIHRoZW5cbi8vIGV4aXQsIGl0J2xsIGVuZCB1cCBmaXJpbmcgYHByb2Nlc3MuZW1pdCgnZXhpdCcpYCwgc29cbi8vIHRoZSBoYW5kbGVyIHdpbGwgYmUgZmlyZWQgYW55d2F5LlxuLy9cbi8vIFNJR0JVUywgU0lHRlBFLCBTSUdTRUdWIGFuZCBTSUdJTEwsIHdoZW4gbm90IHJhaXNlZFxuLy8gYXJ0aWZpY2lhbGx5LCBpbmhlcmVudGx5IGxlYXZlIHRoZSBwcm9jZXNzIGluIGFcbi8vIHN0YXRlIGZyb20gd2hpY2ggaXQgaXMgbm90IHNhZmUgdG8gdHJ5IGFuZCBlbnRlciBKU1xuLy8gbGlzdGVuZXJzLlxubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdTSUdBQlJUJyxcbiAgJ1NJR0FMUk0nLFxuICAnU0lHSFVQJyxcbiAgJ1NJR0lOVCcsXG4gICdTSUdURVJNJ1xuXVxuXG5pZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuICBtb2R1bGUuZXhwb3J0cy5wdXNoKFxuICAgICdTSUdWVEFMUk0nLFxuICAgICdTSUdYQ1BVJyxcbiAgICAnU0lHWEZTWicsXG4gICAgJ1NJR1VTUjInLFxuICAgICdTSUdUUkFQJyxcbiAgICAnU0lHU1lTJyxcbiAgICAnU0lHUVVJVCcsXG4gICAgJ1NJR0lPVCdcbiAgICAvLyBzaG91bGQgZGV0ZWN0IHByb2ZpbGVyIGFuZCBlbmFibGUvZGlzYWJsZSBhY2NvcmRpbmdseS5cbiAgICAvLyBzZWUgIzIxXG4gICAgLy8gJ1NJR1BST0YnXG4gIClcbn1cblxuaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdsaW51eCcpIHtcbiAgbW9kdWxlLmV4cG9ydHMucHVzaChcbiAgICAnU0lHSU8nLFxuICAgICdTSUdQT0xMJyxcbiAgICAnU0lHUFdSJyxcbiAgICAnU0lHU1RLRkxUJyxcbiAgICAnU0lHVU5VU0VEJ1xuICApXG59XG4iLCIvLyBOb3RlOiBzaW5jZSBueWMgdXNlcyB0aGlzIG1vZHVsZSB0byBvdXRwdXQgY292ZXJhZ2UsIGFueSBsaW5lc1xuLy8gdGhhdCBhcmUgaW4gdGhlIGRpcmVjdCBzeW5jIGZsb3cgb2YgbnljJ3Mgb3V0cHV0Q292ZXJhZ2UgYXJlXG4vLyBpZ25vcmVkLCBzaW5jZSB3ZSBjYW4gbmV2ZXIgZ2V0IGNvdmVyYWdlIGZvciB0aGVtLlxuLy8gZ3JhYiBhIHJlZmVyZW5jZSB0byBub2RlJ3MgcmVhbCBwcm9jZXNzIG9iamVjdCByaWdodCBhd2F5XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzXG5cbmNvbnN0IHByb2Nlc3NPayA9IGZ1bmN0aW9uIChwcm9jZXNzKSB7XG4gIHJldHVybiBwcm9jZXNzICYmXG4gICAgdHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIHByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5lbWl0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHByb2Nlc3MucmVhbGx5RXhpdCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLmxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLmtpbGwgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5waWQgPT09ICdudW1iZXInICYmXG4gICAgdHlwZW9mIHByb2Nlc3Mub24gPT09ICdmdW5jdGlvbidcbn1cblxuLy8gc29tZSBraW5kIG9mIG5vbi1ub2RlIGVudmlyb25tZW50LCBqdXN0IG5vLW9wXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmICghcHJvY2Vzc09rKHByb2Nlc3MpKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7fVxuICB9XG59IGVsc2Uge1xuICB2YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbiAgdmFyIHNpZ25hbHMgPSByZXF1aXJlKCcuL3NpZ25hbHMuanMnKVxuICB2YXIgaXNXaW4gPSAvXndpbi9pLnRlc3QocHJvY2Vzcy5wbGF0Zm9ybSlcblxuICB2YXIgRUUgPSByZXF1aXJlKCdldmVudHMnKVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHR5cGVvZiBFRSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIEVFID0gRUUuRXZlbnRFbWl0dGVyXG4gIH1cblxuICB2YXIgZW1pdHRlclxuICBpZiAocHJvY2Vzcy5fX3NpZ25hbF9leGl0X2VtaXR0ZXJfXykge1xuICAgIGVtaXR0ZXIgPSBwcm9jZXNzLl9fc2lnbmFsX2V4aXRfZW1pdHRlcl9fXG4gIH0gZWxzZSB7XG4gICAgZW1pdHRlciA9IHByb2Nlc3MuX19zaWduYWxfZXhpdF9lbWl0dGVyX18gPSBuZXcgRUUoKVxuICAgIGVtaXR0ZXIuY291bnQgPSAwXG4gICAgZW1pdHRlci5lbWl0dGVkID0ge31cbiAgfVxuXG4gIC8vIEJlY2F1c2UgdGhpcyBlbWl0dGVyIGlzIGEgZ2xvYmFsLCB3ZSBoYXZlIHRvIGNoZWNrIHRvIHNlZSBpZiBhXG4gIC8vIHByZXZpb3VzIHZlcnNpb24gb2YgdGhpcyBsaWJyYXJ5IGZhaWxlZCB0byBlbmFibGUgaW5maW5pdGUgbGlzdGVuZXJzLlxuICAvLyBJIGtub3cgd2hhdCB5b3UncmUgYWJvdXQgdG8gc2F5LiAgQnV0IGxpdGVyYWxseSBldmVyeXRoaW5nIGFib3V0XG4gIC8vIHNpZ25hbC1leGl0IGlzIGEgY29tcHJvbWlzZSB3aXRoIGV2aWwuICBHZXQgdXNlZCB0byBpdC5cbiAgaWYgKCFlbWl0dGVyLmluZmluaXRlKSB7XG4gICAgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoSW5maW5pdHkpXG4gICAgZW1pdHRlci5pbmZpbml0ZSA9IHRydWVcbiAgfVxuXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNiLCBvcHRzKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge31cbiAgICB9XG4gICAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBjYiwgJ2Z1bmN0aW9uJywgJ2EgY2FsbGJhY2sgbXVzdCBiZSBwcm92aWRlZCBmb3IgZXhpdCBoYW5kbGVyJylcblxuICAgIGlmIChsb2FkZWQgPT09IGZhbHNlKSB7XG4gICAgICBsb2FkKClcbiAgICB9XG5cbiAgICB2YXIgZXYgPSAnZXhpdCdcbiAgICBpZiAob3B0cyAmJiBvcHRzLmFsd2F5c0xhc3QpIHtcbiAgICAgIGV2ID0gJ2FmdGVyZXhpdCdcbiAgICB9XG5cbiAgICB2YXIgcmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihldiwgY2IpXG4gICAgICBpZiAoZW1pdHRlci5saXN0ZW5lcnMoJ2V4aXQnKS5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICBlbWl0dGVyLmxpc3RlbmVycygnYWZ0ZXJleGl0JykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHVubG9hZCgpXG4gICAgICB9XG4gICAgfVxuICAgIGVtaXR0ZXIub24oZXYsIGNiKVxuXG4gICAgcmV0dXJuIHJlbW92ZVxuICB9XG5cbiAgdmFyIHVubG9hZCA9IGZ1bmN0aW9uIHVubG9hZCAoKSB7XG4gICAgaWYgKCFsb2FkZWQgfHwgIXByb2Nlc3NPayhnbG9iYWwucHJvY2VzcykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBsb2FkZWQgPSBmYWxzZVxuXG4gICAgc2lnbmFscy5mb3JFYWNoKGZ1bmN0aW9uIChzaWcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHByb2Nlc3MucmVtb3ZlTGlzdGVuZXIoc2lnLCBzaWdMaXN0ZW5lcnNbc2lnXSlcbiAgICAgIH0gY2F0Y2ggKGVyKSB7fVxuICAgIH0pXG4gICAgcHJvY2Vzcy5lbWl0ID0gb3JpZ2luYWxQcm9jZXNzRW1pdFxuICAgIHByb2Nlc3MucmVhbGx5RXhpdCA9IG9yaWdpbmFsUHJvY2Vzc1JlYWxseUV4aXRcbiAgICBlbWl0dGVyLmNvdW50IC09IDFcbiAgfVxuICBtb2R1bGUuZXhwb3J0cy51bmxvYWQgPSB1bmxvYWRcblxuICB2YXIgZW1pdCA9IGZ1bmN0aW9uIGVtaXQgKGV2ZW50LCBjb2RlLCBzaWduYWwpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoZW1pdHRlci5lbWl0dGVkW2V2ZW50XSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGVtaXR0ZXIuZW1pdHRlZFtldmVudF0gPSB0cnVlXG4gICAgZW1pdHRlci5lbWl0KGV2ZW50LCBjb2RlLCBzaWduYWwpXG4gIH1cblxuICAvLyB7IDxzaWduYWw+OiA8bGlzdGVuZXIgZm4+LCAuLi4gfVxuICB2YXIgc2lnTGlzdGVuZXJzID0ge31cbiAgc2lnbmFscy5mb3JFYWNoKGZ1bmN0aW9uIChzaWcpIHtcbiAgICBzaWdMaXN0ZW5lcnNbc2lnXSA9IGZ1bmN0aW9uIGxpc3RlbmVyICgpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKCFwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIG90aGVyIGxpc3RlbmVycywgYW4gZXhpdCBpcyBjb21pbmchXG4gICAgICAvLyBTaW1wbGVzdCB3YXk6IHJlbW92ZSB1cyBhbmQgdGhlbiByZS1zZW5kIHRoZSBzaWduYWwuXG4gICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyB3aWxsIGtpbGwgdGhlIHByb2Nlc3MsIHNvIHdlIGNhblxuICAgICAgLy8gc2FmZWx5IGVtaXQgbm93LlxuICAgICAgdmFyIGxpc3RlbmVycyA9IHByb2Nlc3MubGlzdGVuZXJzKHNpZylcbiAgICAgIGlmIChsaXN0ZW5lcnMubGVuZ3RoID09PSBlbWl0dGVyLmNvdW50KSB7XG4gICAgICAgIHVubG9hZCgpXG4gICAgICAgIGVtaXQoJ2V4aXQnLCBudWxsLCBzaWcpXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGVtaXQoJ2FmdGVyZXhpdCcsIG51bGwsIHNpZylcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgaWYgKGlzV2luICYmIHNpZyA9PT0gJ1NJR0hVUCcpIHtcbiAgICAgICAgICAvLyBcIlNJR0hVUFwiIHRocm93cyBhbiBgRU5PU1lTYCBlcnJvciBvbiBXaW5kb3dzLFxuICAgICAgICAgIC8vIHNvIHVzZSBhIHN1cHBvcnRlZCBzaWduYWwgaW5zdGVhZFxuICAgICAgICAgIHNpZyA9ICdTSUdJTlQnXG4gICAgICAgIH1cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcHJvY2Vzcy5raWxsKHByb2Nlc3MucGlkLCBzaWcpXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIG1vZHVsZS5leHBvcnRzLnNpZ25hbHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHNpZ25hbHNcbiAgfVxuXG4gIHZhciBsb2FkZWQgPSBmYWxzZVxuXG4gIHZhciBsb2FkID0gZnVuY3Rpb24gbG9hZCAoKSB7XG4gICAgaWYgKGxvYWRlZCB8fCAhcHJvY2Vzc09rKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGxvYWRlZCA9IHRydWVcblxuICAgIC8vIFRoaXMgaXMgdGhlIG51bWJlciBvZiBvblNpZ25hbEV4aXQncyB0aGF0IGFyZSBpbiBwbGF5LlxuICAgIC8vIEl0J3MgaW1wb3J0YW50IHNvIHRoYXQgd2UgY2FuIGNvdW50IHRoZSBjb3JyZWN0IG51bWJlciBvZlxuICAgIC8vIGxpc3RlbmVycyBvbiBzaWduYWxzLCBhbmQgZG9uJ3Qgd2FpdCBmb3IgdGhlIG90aGVyIG9uZSB0b1xuICAgIC8vIGhhbmRsZSBpdCBpbnN0ZWFkIG9mIHVzLlxuICAgIGVtaXR0ZXIuY291bnQgKz0gMVxuXG4gICAgc2lnbmFscyA9IHNpZ25hbHMuZmlsdGVyKGZ1bmN0aW9uIChzaWcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHByb2Nlc3Mub24oc2lnLCBzaWdMaXN0ZW5lcnNbc2lnXSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBwcm9jZXNzLmVtaXQgPSBwcm9jZXNzRW1pdFxuICAgIHByb2Nlc3MucmVhbGx5RXhpdCA9IHByb2Nlc3NSZWFsbHlFeGl0XG4gIH1cbiAgbW9kdWxlLmV4cG9ydHMubG9hZCA9IGxvYWRcblxuICB2YXIgb3JpZ2luYWxQcm9jZXNzUmVhbGx5RXhpdCA9IHByb2Nlc3MucmVhbGx5RXhpdFxuICB2YXIgcHJvY2Vzc1JlYWxseUV4aXQgPSBmdW5jdGlvbiBwcm9jZXNzUmVhbGx5RXhpdCAoY29kZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghcHJvY2Vzc09rKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHByb2Nlc3MuZXhpdENvZGUgPSBjb2RlIHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIDBcbiAgICBlbWl0KCdleGl0JywgcHJvY2Vzcy5leGl0Q29kZSwgbnVsbClcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGVtaXQoJ2FmdGVyZXhpdCcsIHByb2Nlc3MuZXhpdENvZGUsIG51bGwpXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBvcmlnaW5hbFByb2Nlc3NSZWFsbHlFeGl0LmNhbGwocHJvY2VzcywgcHJvY2Vzcy5leGl0Q29kZSlcbiAgfVxuXG4gIHZhciBvcmlnaW5hbFByb2Nlc3NFbWl0ID0gcHJvY2Vzcy5lbWl0XG4gIHZhciBwcm9jZXNzRW1pdCA9IGZ1bmN0aW9uIHByb2Nlc3NFbWl0IChldiwgYXJnKSB7XG4gICAgaWYgKGV2ID09PSAnZXhpdCcgJiYgcHJvY2Vzc09rKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChhcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gYXJnXG4gICAgICB9XG4gICAgICB2YXIgcmV0ID0gb3JpZ2luYWxQcm9jZXNzRW1pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgZW1pdCgnZXhpdCcsIHByb2Nlc3MuZXhpdENvZGUsIG51bGwpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgZW1pdCgnYWZ0ZXJleGl0JywgcHJvY2Vzcy5leGl0Q29kZSwgbnVsbClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICByZXR1cm4gcmV0XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcmlnaW5hbFByb2Nlc3NFbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICB9XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IG9uZXRpbWUgPSByZXF1aXJlKCdvbmV0aW1lJyk7XG5jb25zdCBzaWduYWxFeGl0ID0gcmVxdWlyZSgnc2lnbmFsLWV4aXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBvbmV0aW1lKCgpID0+IHtcblx0c2lnbmFsRXhpdCgoKSA9PiB7XG5cdFx0cHJvY2Vzcy5zdGRlcnIud3JpdGUoJ1xcdTAwMUJbPzI1aCcpO1xuXHR9LCB7YWx3YXlzTGFzdDogdHJ1ZX0pO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCByZXN0b3JlQ3Vyc29yID0gcmVxdWlyZSgncmVzdG9yZS1jdXJzb3InKTtcblxubGV0IGlzSGlkZGVuID0gZmFsc2U7XG5cbmV4cG9ydHMuc2hvdyA9ICh3cml0YWJsZVN0cmVhbSA9IHByb2Nlc3Muc3RkZXJyKSA9PiB7XG5cdGlmICghd3JpdGFibGVTdHJlYW0uaXNUVFkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpc0hpZGRlbiA9IGZhbHNlO1xuXHR3cml0YWJsZVN0cmVhbS53cml0ZSgnXFx1MDAxQls/MjVoJyk7XG59O1xuXG5leHBvcnRzLmhpZGUgPSAod3JpdGFibGVTdHJlYW0gPSBwcm9jZXNzLnN0ZGVycikgPT4ge1xuXHRpZiAoIXdyaXRhYmxlU3RyZWFtLmlzVFRZKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0cmVzdG9yZUN1cnNvcigpO1xuXHRpc0hpZGRlbiA9IHRydWU7XG5cdHdyaXRhYmxlU3RyZWFtLndyaXRlKCdcXHUwMDFCWz8yNWwnKTtcbn07XG5cbmV4cG9ydHMudG9nZ2xlID0gKGZvcmNlLCB3cml0YWJsZVN0cmVhbSkgPT4ge1xuXHRpZiAoZm9yY2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlzSGlkZGVuID0gZm9yY2U7XG5cdH1cblxuXHRpZiAoaXNIaWRkZW4pIHtcblx0XHRleHBvcnRzLnNob3cod3JpdGFibGVTdHJlYW0pO1xuXHR9IGVsc2Uge1xuXHRcdGV4cG9ydHMuaGlkZSh3cml0YWJsZVN0cmVhbSk7XG5cdH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHNwaW5uZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgcmVxdWlyZSgnLi9zcGlubmVycy5qc29uJykpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9leHRlbnNpb25zXG5cbmNvbnN0IHNwaW5uZXJzTGlzdCA9IE9iamVjdC5rZXlzKHNwaW5uZXJzKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KHNwaW5uZXJzLCAncmFuZG9tJywge1xuXHRnZXQoKSB7XG5cdFx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBzcGlubmVyc0xpc3QubGVuZ3RoKTtcblx0XHRjb25zdCBzcGlubmVyTmFtZSA9IHNwaW5uZXJzTGlzdFtyYW5kb21JbmRleF07XG5cdFx0cmV0dXJuIHNwaW5uZXJzW3NwaW5uZXJOYW1lXTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3Bpbm5lcnM7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gKCkgPT4ge1xuXHRpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIEJvb2xlYW4ocHJvY2Vzcy5lbnYuQ0kpIHx8XG5cdFx0Qm9vbGVhbihwcm9jZXNzLmVudi5XVF9TRVNTSU9OKSB8fCAvLyBXaW5kb3dzIFRlcm1pbmFsXG5cdFx0cHJvY2Vzcy5lbnYuVEVSTV9QUk9HUkFNID09PSAndnNjb2RlJyB8fFxuXHRcdHByb2Nlc3MuZW52LlRFUk0gPT09ICd4dGVybS0yNTZjb2xvcicgfHxcblx0XHRwcm9jZXNzLmVudi5URVJNID09PSAnYWxhY3JpdHR5Jztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCBjaGFsayA9IHJlcXVpcmUoJ2NoYWxrJyk7XG5jb25zdCBpc1VuaWNvZGVTdXBwb3J0ZWQgPSByZXF1aXJlKCdpcy11bmljb2RlLXN1cHBvcnRlZCcpO1xuXG5jb25zdCBtYWluID0ge1xuXHRpbmZvOiBjaGFsay5ibHVlKCfihLknKSxcblx0c3VjY2VzczogY2hhbGsuZ3JlZW4oJ+KclCcpLFxuXHR3YXJuaW5nOiBjaGFsay55ZWxsb3coJ+KaoCcpLFxuXHRlcnJvcjogY2hhbGsucmVkKCfinJYnKVxufTtcblxuY29uc3QgZmFsbGJhY2sgPSB7XG5cdGluZm86IGNoYWxrLmJsdWUoJ2knKSxcblx0c3VjY2VzczogY2hhbGsuZ3JlZW4oJ+KImicpLFxuXHR3YXJuaW5nOiBjaGFsay55ZWxsb3coJ+KAvCcpLFxuXHRlcnJvcjogY2hhbGsucmVkKCfDlycpXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVW5pY29kZVN1cHBvcnRlZCgpID8gbWFpbiA6IGZhbGxiYWNrO1xuIiwidmFyIGNsb25lID0gKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENsb25lcyAoY29waWVzKSBhbiBPYmplY3QgdXNpbmcgZGVlcCBjb3B5aW5nLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgY2lyY3VsYXIgcmVmZXJlbmNlcyBieSBkZWZhdWx0LCBidXQgaWYgeW91IGFyZSBjZXJ0YWluXG4gKiB0aGVyZSBhcmUgbm8gY2lyY3VsYXIgcmVmZXJlbmNlcyBpbiB5b3VyIG9iamVjdCwgeW91IGNhbiBzYXZlIHNvbWUgQ1BVIHRpbWVcbiAqIGJ5IGNhbGxpbmcgY2xvbmUob2JqLCBmYWxzZSkuXG4gKlxuICogQ2F1dGlvbjogaWYgYGNpcmN1bGFyYCBpcyBmYWxzZSBhbmQgYHBhcmVudGAgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlcyxcbiAqIHlvdXIgcHJvZ3JhbSBtYXkgZW50ZXIgYW4gaW5maW5pdGUgbG9vcCBhbmQgY3Jhc2guXG4gKlxuICogQHBhcmFtIGBwYXJlbnRgIC0gdGhlIG9iamVjdCB0byBiZSBjbG9uZWRcbiAqIEBwYXJhbSBgY2lyY3VsYXJgIC0gc2V0IHRvIHRydWUgaWYgdGhlIG9iamVjdCB0byBiZSBjbG9uZWQgbWF5IGNvbnRhaW5cbiAqICAgIGNpcmN1bGFyIHJlZmVyZW5jZXMuIChvcHRpb25hbCAtIHRydWUgYnkgZGVmYXVsdClcbiAqIEBwYXJhbSBgZGVwdGhgIC0gc2V0IHRvIGEgbnVtYmVyIGlmIHRoZSBvYmplY3QgaXMgb25seSB0byBiZSBjbG9uZWQgdG9cbiAqICAgIGEgcGFydGljdWxhciBkZXB0aC4gKG9wdGlvbmFsIC0gZGVmYXVsdHMgdG8gSW5maW5pdHkpXG4gKiBAcGFyYW0gYHByb3RvdHlwZWAgLSBzZXRzIHRoZSBwcm90b3R5cGUgdG8gYmUgdXNlZCB3aGVuIGNsb25pbmcgYW4gb2JqZWN0LlxuICogICAgKG9wdGlvbmFsIC0gZGVmYXVsdHMgdG8gcGFyZW50IHByb3RvdHlwZSkuXG4qL1xuZnVuY3Rpb24gY2xvbmUocGFyZW50LCBjaXJjdWxhciwgZGVwdGgsIHByb3RvdHlwZSkge1xuICB2YXIgZmlsdGVyO1xuICBpZiAodHlwZW9mIGNpcmN1bGFyID09PSAnb2JqZWN0Jykge1xuICAgIGRlcHRoID0gY2lyY3VsYXIuZGVwdGg7XG4gICAgcHJvdG90eXBlID0gY2lyY3VsYXIucHJvdG90eXBlO1xuICAgIGZpbHRlciA9IGNpcmN1bGFyLmZpbHRlcjtcbiAgICBjaXJjdWxhciA9IGNpcmN1bGFyLmNpcmN1bGFyXG4gIH1cbiAgLy8gbWFpbnRhaW4gdHdvIGFycmF5cyBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcywgd2hlcmUgY29ycmVzcG9uZGluZyBwYXJlbnRzXG4gIC8vIGFuZCBjaGlsZHJlbiBoYXZlIHRoZSBzYW1lIGluZGV4XG4gIHZhciBhbGxQYXJlbnRzID0gW107XG4gIHZhciBhbGxDaGlsZHJlbiA9IFtdO1xuXG4gIHZhciB1c2VCdWZmZXIgPSB0eXBlb2YgQnVmZmVyICE9ICd1bmRlZmluZWQnO1xuXG4gIGlmICh0eXBlb2YgY2lyY3VsYXIgPT0gJ3VuZGVmaW5lZCcpXG4gICAgY2lyY3VsYXIgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZGVwdGggPT0gJ3VuZGVmaW5lZCcpXG4gICAgZGVwdGggPSBJbmZpbml0eTtcblxuICAvLyByZWN1cnNlIHRoaXMgZnVuY3Rpb24gc28gd2UgZG9uJ3QgcmVzZXQgYWxsUGFyZW50cyBhbmQgYWxsQ2hpbGRyZW5cbiAgZnVuY3Rpb24gX2Nsb25lKHBhcmVudCwgZGVwdGgpIHtcbiAgICAvLyBjbG9uaW5nIG51bGwgYWx3YXlzIHJldHVybnMgbnVsbFxuICAgIGlmIChwYXJlbnQgPT09IG51bGwpXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGlmIChkZXB0aCA9PSAwKVxuICAgICAgcmV0dXJuIHBhcmVudDtcblxuICAgIHZhciBjaGlsZDtcbiAgICB2YXIgcHJvdG87XG4gICAgaWYgKHR5cGVvZiBwYXJlbnQgIT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuXG4gICAgaWYgKGNsb25lLl9faXNBcnJheShwYXJlbnQpKSB7XG4gICAgICBjaGlsZCA9IFtdO1xuICAgIH0gZWxzZSBpZiAoY2xvbmUuX19pc1JlZ0V4cChwYXJlbnQpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBSZWdFeHAocGFyZW50LnNvdXJjZSwgX19nZXRSZWdFeHBGbGFncyhwYXJlbnQpKTtcbiAgICAgIGlmIChwYXJlbnQubGFzdEluZGV4KSBjaGlsZC5sYXN0SW5kZXggPSBwYXJlbnQubGFzdEluZGV4O1xuICAgIH0gZWxzZSBpZiAoY2xvbmUuX19pc0RhdGUocGFyZW50KSkge1xuICAgICAgY2hpbGQgPSBuZXcgRGF0ZShwYXJlbnQuZ2V0VGltZSgpKTtcbiAgICB9IGVsc2UgaWYgKHVzZUJ1ZmZlciAmJiBCdWZmZXIuaXNCdWZmZXIocGFyZW50KSkge1xuICAgICAgaWYgKEJ1ZmZlci5hbGxvY1Vuc2FmZSkge1xuICAgICAgICAvLyBOb2RlLmpzID49IDQuNS4wXG4gICAgICAgIGNoaWxkID0gQnVmZmVyLmFsbG9jVW5zYWZlKHBhcmVudC5sZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT2xkZXIgTm9kZS5qcyB2ZXJzaW9uc1xuICAgICAgICBjaGlsZCA9IG5ldyBCdWZmZXIocGFyZW50Lmxlbmd0aCk7XG4gICAgICB9XG4gICAgICBwYXJlbnQuY29weShjaGlsZCk7XG4gICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvdG90eXBlID09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHBhcmVudCk7XG4gICAgICAgIGNoaWxkID0gT2JqZWN0LmNyZWF0ZShwcm90byk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY2hpbGQgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XG4gICAgICAgIHByb3RvID0gcHJvdG90eXBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaXJjdWxhcikge1xuICAgICAgdmFyIGluZGV4ID0gYWxsUGFyZW50cy5pbmRleE9mKHBhcmVudCk7XG5cbiAgICAgIGlmIChpbmRleCAhPSAtMSkge1xuICAgICAgICByZXR1cm4gYWxsQ2hpbGRyZW5baW5kZXhdO1xuICAgICAgfVxuICAgICAgYWxsUGFyZW50cy5wdXNoKHBhcmVudCk7XG4gICAgICBhbGxDaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpIGluIHBhcmVudCkge1xuICAgICAgdmFyIGF0dHJzO1xuICAgICAgaWYgKHByb3RvKSB7XG4gICAgICAgIGF0dHJzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgaSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhdHRycyAmJiBhdHRycy5zZXQgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNoaWxkW2ldID0gX2Nsb25lKHBhcmVudFtpXSwgZGVwdGggLSAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cblxuICByZXR1cm4gX2Nsb25lKHBhcmVudCwgZGVwdGgpO1xufVxuXG4vKipcbiAqIFNpbXBsZSBmbGF0IGNsb25lIHVzaW5nIHByb3RvdHlwZSwgYWNjZXB0cyBvbmx5IG9iamVjdHMsIHVzZWZ1bGwgZm9yIHByb3BlcnR5XG4gKiBvdmVycmlkZSBvbiBGTEFUIGNvbmZpZ3VyYXRpb24gb2JqZWN0IChubyBuZXN0ZWQgcHJvcHMpLlxuICpcbiAqIFVTRSBXSVRIIENBVVRJT04hIFRoaXMgbWF5IG5vdCBiZWhhdmUgYXMgeW91IHdpc2ggaWYgeW91IGRvIG5vdCBrbm93IGhvdyB0aGlzXG4gKiB3b3Jrcy5cbiAqL1xuY2xvbmUuY2xvbmVQcm90b3R5cGUgPSBmdW5jdGlvbiBjbG9uZVByb3RvdHlwZShwYXJlbnQpIHtcbiAgaWYgKHBhcmVudCA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcblxuICB2YXIgYyA9IGZ1bmN0aW9uICgpIHt9O1xuICBjLnByb3RvdHlwZSA9IHBhcmVudDtcbiAgcmV0dXJuIG5ldyBjKCk7XG59O1xuXG4vLyBwcml2YXRlIHV0aWxpdHkgZnVuY3Rpb25zXG5cbmZ1bmN0aW9uIF9fb2JqVG9TdHIobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufTtcbmNsb25lLl9fb2JqVG9TdHIgPSBfX29ialRvU3RyO1xuXG5mdW5jdGlvbiBfX2lzRGF0ZShvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX19vYmpUb1N0cihvKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufTtcbmNsb25lLl9faXNEYXRlID0gX19pc0RhdGU7XG5cbmZ1bmN0aW9uIF9faXNBcnJheShvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX19vYmpUb1N0cihvKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG5jbG9uZS5fX2lzQXJyYXkgPSBfX2lzQXJyYXk7XG5cbmZ1bmN0aW9uIF9faXNSZWdFeHAobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufTtcbmNsb25lLl9faXNSZWdFeHAgPSBfX2lzUmVnRXhwO1xuXG5mdW5jdGlvbiBfX2dldFJlZ0V4cEZsYWdzKHJlKSB7XG4gIHZhciBmbGFncyA9ICcnO1xuICBpZiAocmUuZ2xvYmFsKSBmbGFncyArPSAnZyc7XG4gIGlmIChyZS5pZ25vcmVDYXNlKSBmbGFncyArPSAnaSc7XG4gIGlmIChyZS5tdWx0aWxpbmUpIGZsYWdzICs9ICdtJztcbiAgcmV0dXJuIGZsYWdzO1xufTtcbmNsb25lLl9fZ2V0UmVnRXhwRmxhZ3MgPSBfX2dldFJlZ0V4cEZsYWdzO1xuXG5yZXR1cm4gY2xvbmU7XG59KSgpO1xuXG5pZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBjbG9uZTtcbn1cbiIsInZhciBjbG9uZSA9IHJlcXVpcmUoJ2Nsb25lJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3B0aW9ucywgZGVmYXVsdHMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgT2JqZWN0LmtleXMoZGVmYXVsdHMpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zW2tleV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBvcHRpb25zW2tleV0gPSBjbG9uZShkZWZhdWx0c1trZXldKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBvcHRpb25zO1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IFtcbiAgICBbIDB4MDMwMCwgMHgwMzZGIF0sIFsgMHgwNDgzLCAweDA0ODYgXSwgWyAweDA0ODgsIDB4MDQ4OSBdLFxuICAgIFsgMHgwNTkxLCAweDA1QkQgXSwgWyAweDA1QkYsIDB4MDVCRiBdLCBbIDB4MDVDMSwgMHgwNUMyIF0sXG4gICAgWyAweDA1QzQsIDB4MDVDNSBdLCBbIDB4MDVDNywgMHgwNUM3IF0sIFsgMHgwNjAwLCAweDA2MDMgXSxcbiAgICBbIDB4MDYxMCwgMHgwNjE1IF0sIFsgMHgwNjRCLCAweDA2NUUgXSwgWyAweDA2NzAsIDB4MDY3MCBdLFxuICAgIFsgMHgwNkQ2LCAweDA2RTQgXSwgWyAweDA2RTcsIDB4MDZFOCBdLCBbIDB4MDZFQSwgMHgwNkVEIF0sXG4gICAgWyAweDA3MEYsIDB4MDcwRiBdLCBbIDB4MDcxMSwgMHgwNzExIF0sIFsgMHgwNzMwLCAweDA3NEEgXSxcbiAgICBbIDB4MDdBNiwgMHgwN0IwIF0sIFsgMHgwN0VCLCAweDA3RjMgXSwgWyAweDA5MDEsIDB4MDkwMiBdLFxuICAgIFsgMHgwOTNDLCAweDA5M0MgXSwgWyAweDA5NDEsIDB4MDk0OCBdLCBbIDB4MDk0RCwgMHgwOTREIF0sXG4gICAgWyAweDA5NTEsIDB4MDk1NCBdLCBbIDB4MDk2MiwgMHgwOTYzIF0sIFsgMHgwOTgxLCAweDA5ODEgXSxcbiAgICBbIDB4MDlCQywgMHgwOUJDIF0sIFsgMHgwOUMxLCAweDA5QzQgXSwgWyAweDA5Q0QsIDB4MDlDRCBdLFxuICAgIFsgMHgwOUUyLCAweDA5RTMgXSwgWyAweDBBMDEsIDB4MEEwMiBdLCBbIDB4MEEzQywgMHgwQTNDIF0sXG4gICAgWyAweDBBNDEsIDB4MEE0MiBdLCBbIDB4MEE0NywgMHgwQTQ4IF0sIFsgMHgwQTRCLCAweDBBNEQgXSxcbiAgICBbIDB4MEE3MCwgMHgwQTcxIF0sIFsgMHgwQTgxLCAweDBBODIgXSwgWyAweDBBQkMsIDB4MEFCQyBdLFxuICAgIFsgMHgwQUMxLCAweDBBQzUgXSwgWyAweDBBQzcsIDB4MEFDOCBdLCBbIDB4MEFDRCwgMHgwQUNEIF0sXG4gICAgWyAweDBBRTIsIDB4MEFFMyBdLCBbIDB4MEIwMSwgMHgwQjAxIF0sIFsgMHgwQjNDLCAweDBCM0MgXSxcbiAgICBbIDB4MEIzRiwgMHgwQjNGIF0sIFsgMHgwQjQxLCAweDBCNDMgXSwgWyAweDBCNEQsIDB4MEI0RCBdLFxuICAgIFsgMHgwQjU2LCAweDBCNTYgXSwgWyAweDBCODIsIDB4MEI4MiBdLCBbIDB4MEJDMCwgMHgwQkMwIF0sXG4gICAgWyAweDBCQ0QsIDB4MEJDRCBdLCBbIDB4MEMzRSwgMHgwQzQwIF0sIFsgMHgwQzQ2LCAweDBDNDggXSxcbiAgICBbIDB4MEM0QSwgMHgwQzREIF0sIFsgMHgwQzU1LCAweDBDNTYgXSwgWyAweDBDQkMsIDB4MENCQyBdLFxuICAgIFsgMHgwQ0JGLCAweDBDQkYgXSwgWyAweDBDQzYsIDB4MENDNiBdLCBbIDB4MENDQywgMHgwQ0NEIF0sXG4gICAgWyAweDBDRTIsIDB4MENFMyBdLCBbIDB4MEQ0MSwgMHgwRDQzIF0sIFsgMHgwRDRELCAweDBENEQgXSxcbiAgICBbIDB4MERDQSwgMHgwRENBIF0sIFsgMHgwREQyLCAweDBERDQgXSwgWyAweDBERDYsIDB4MERENiBdLFxuICAgIFsgMHgwRTMxLCAweDBFMzEgXSwgWyAweDBFMzQsIDB4MEUzQSBdLCBbIDB4MEU0NywgMHgwRTRFIF0sXG4gICAgWyAweDBFQjEsIDB4MEVCMSBdLCBbIDB4MEVCNCwgMHgwRUI5IF0sIFsgMHgwRUJCLCAweDBFQkMgXSxcbiAgICBbIDB4MEVDOCwgMHgwRUNEIF0sIFsgMHgwRjE4LCAweDBGMTkgXSwgWyAweDBGMzUsIDB4MEYzNSBdLFxuICAgIFsgMHgwRjM3LCAweDBGMzcgXSwgWyAweDBGMzksIDB4MEYzOSBdLCBbIDB4MEY3MSwgMHgwRjdFIF0sXG4gICAgWyAweDBGODAsIDB4MEY4NCBdLCBbIDB4MEY4NiwgMHgwRjg3IF0sIFsgMHgwRjkwLCAweDBGOTcgXSxcbiAgICBbIDB4MEY5OSwgMHgwRkJDIF0sIFsgMHgwRkM2LCAweDBGQzYgXSwgWyAweDEwMkQsIDB4MTAzMCBdLFxuICAgIFsgMHgxMDMyLCAweDEwMzIgXSwgWyAweDEwMzYsIDB4MTAzNyBdLCBbIDB4MTAzOSwgMHgxMDM5IF0sXG4gICAgWyAweDEwNTgsIDB4MTA1OSBdLCBbIDB4MTE2MCwgMHgxMUZGIF0sIFsgMHgxMzVGLCAweDEzNUYgXSxcbiAgICBbIDB4MTcxMiwgMHgxNzE0IF0sIFsgMHgxNzMyLCAweDE3MzQgXSwgWyAweDE3NTIsIDB4MTc1MyBdLFxuICAgIFsgMHgxNzcyLCAweDE3NzMgXSwgWyAweDE3QjQsIDB4MTdCNSBdLCBbIDB4MTdCNywgMHgxN0JEIF0sXG4gICAgWyAweDE3QzYsIDB4MTdDNiBdLCBbIDB4MTdDOSwgMHgxN0QzIF0sIFsgMHgxN0RELCAweDE3REQgXSxcbiAgICBbIDB4MTgwQiwgMHgxODBEIF0sIFsgMHgxOEE5LCAweDE4QTkgXSwgWyAweDE5MjAsIDB4MTkyMiBdLFxuICAgIFsgMHgxOTI3LCAweDE5MjggXSwgWyAweDE5MzIsIDB4MTkzMiBdLCBbIDB4MTkzOSwgMHgxOTNCIF0sXG4gICAgWyAweDFBMTcsIDB4MUExOCBdLCBbIDB4MUIwMCwgMHgxQjAzIF0sIFsgMHgxQjM0LCAweDFCMzQgXSxcbiAgICBbIDB4MUIzNiwgMHgxQjNBIF0sIFsgMHgxQjNDLCAweDFCM0MgXSwgWyAweDFCNDIsIDB4MUI0MiBdLFxuICAgIFsgMHgxQjZCLCAweDFCNzMgXSwgWyAweDFEQzAsIDB4MURDQSBdLCBbIDB4MURGRSwgMHgxREZGIF0sXG4gICAgWyAweDIwMEIsIDB4MjAwRiBdLCBbIDB4MjAyQSwgMHgyMDJFIF0sIFsgMHgyMDYwLCAweDIwNjMgXSxcbiAgICBbIDB4MjA2QSwgMHgyMDZGIF0sIFsgMHgyMEQwLCAweDIwRUYgXSwgWyAweDMwMkEsIDB4MzAyRiBdLFxuICAgIFsgMHgzMDk5LCAweDMwOUEgXSwgWyAweEE4MDYsIDB4QTgwNiBdLCBbIDB4QTgwQiwgMHhBODBCIF0sXG4gICAgWyAweEE4MjUsIDB4QTgyNiBdLCBbIDB4RkIxRSwgMHhGQjFFIF0sIFsgMHhGRTAwLCAweEZFMEYgXSxcbiAgICBbIDB4RkUyMCwgMHhGRTIzIF0sIFsgMHhGRUZGLCAweEZFRkYgXSwgWyAweEZGRjksIDB4RkZGQiBdLFxuICAgIFsgMHgxMEEwMSwgMHgxMEEwMyBdLCBbIDB4MTBBMDUsIDB4MTBBMDYgXSwgWyAweDEwQTBDLCAweDEwQTBGIF0sXG4gICAgWyAweDEwQTM4LCAweDEwQTNBIF0sIFsgMHgxMEEzRiwgMHgxMEEzRiBdLCBbIDB4MUQxNjcsIDB4MUQxNjkgXSxcbiAgICBbIDB4MUQxNzMsIDB4MUQxODIgXSwgWyAweDFEMTg1LCAweDFEMThCIF0sIFsgMHgxRDFBQSwgMHgxRDFBRCBdLFxuICAgIFsgMHgxRDI0MiwgMHgxRDI0NCBdLCBbIDB4RTAwMDEsIDB4RTAwMDEgXSwgWyAweEUwMDIwLCAweEUwMDdGIF0sXG4gICAgWyAweEUwMTAwLCAweEUwMUVGIF1cbl1cbiIsIlwidXNlIHN0cmljdFwiXG5cbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJ2RlZmF1bHRzJylcbnZhciBjb21iaW5pbmcgPSByZXF1aXJlKCcuL2NvbWJpbmluZycpXG5cbnZhciBERUZBVUxUUyA9IHtcbiAgbnVsOiAwLFxuICBjb250cm9sOiAwXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gd2N3aWR0aChzdHIpIHtcbiAgcmV0dXJuIHdjc3dpZHRoKHN0ciwgREVGQVVMVFMpXG59XG5cbm1vZHVsZS5leHBvcnRzLmNvbmZpZyA9IGZ1bmN0aW9uKG9wdHMpIHtcbiAgb3B0cyA9IGRlZmF1bHRzKG9wdHMgfHwge30sIERFRkFVTFRTKVxuICByZXR1cm4gZnVuY3Rpb24gd2N3aWR0aChzdHIpIHtcbiAgICByZXR1cm4gd2Nzd2lkdGgoc3RyLCBvcHRzKVxuICB9XG59XG5cbi8qXG4gKiAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgZGVmaW5lIHRoZSBjb2x1bW4gd2lkdGggb2YgYW4gSVNPIDEwNjQ2XG4gKiAgY2hhcmFjdGVyIGFzIGZvbGxvd3M6XG4gKiAgLSBUaGUgbnVsbCBjaGFyYWN0ZXIgKFUrMDAwMCkgaGFzIGEgY29sdW1uIHdpZHRoIG9mIDAuXG4gKiAgLSBPdGhlciBDMC9DMSBjb250cm9sIGNoYXJhY3RlcnMgYW5kIERFTCB3aWxsIGxlYWQgdG8gYSByZXR1cm4gdmFsdWVcbiAqICAgIG9mIC0xLlxuICogIC0gTm9uLXNwYWNpbmcgYW5kIGVuY2xvc2luZyBjb21iaW5pbmcgY2hhcmFjdGVycyAoZ2VuZXJhbCBjYXRlZ29yeVxuICogICAgY29kZSBNbiBvciBNZSBpbiB0aGVcbiAqICAgIFVuaWNvZGUgZGF0YWJhc2UpIGhhdmUgYSBjb2x1bW4gd2lkdGggb2YgMC5cbiAqICAtIFNPRlQgSFlQSEVOIChVKzAwQUQpIGhhcyBhIGNvbHVtbiB3aWR0aCBvZiAxLlxuICogIC0gT3RoZXIgZm9ybWF0IGNoYXJhY3RlcnMgKGdlbmVyYWwgY2F0ZWdvcnkgY29kZSBDZiBpbiB0aGUgVW5pY29kZVxuICogICAgZGF0YWJhc2UpIGFuZCBaRVJPIFdJRFRIXG4gKiAgICBTUEFDRSAoVSsyMDBCKSBoYXZlIGEgY29sdW1uIHdpZHRoIG9mIDAuXG4gKiAgLSBIYW5ndWwgSmFtbyBtZWRpYWwgdm93ZWxzIGFuZCBmaW5hbCBjb25zb25hbnRzIChVKzExNjAtVSsxMUZGKVxuICogICAgaGF2ZSBhIGNvbHVtbiB3aWR0aCBvZiAwLlxuICogIC0gU3BhY2luZyBjaGFyYWN0ZXJzIGluIHRoZSBFYXN0IEFzaWFuIFdpZGUgKFcpIG9yIEVhc3QgQXNpYW5cbiAqICAgIEZ1bGwtd2lkdGggKEYpIGNhdGVnb3J5IGFzXG4gKiAgICBkZWZpbmVkIGluIFVuaWNvZGUgVGVjaG5pY2FsIFJlcG9ydCAjMTEgaGF2ZSBhIGNvbHVtbiB3aWR0aCBvZiAyLlxuICogIC0gQWxsIHJlbWFpbmluZyBjaGFyYWN0ZXJzIChpbmNsdWRpbmcgYWxsIHByaW50YWJsZSBJU08gODg1OS0xIGFuZFxuICogICAgV0dMNCBjaGFyYWN0ZXJzLCBVbmljb2RlIGNvbnRyb2wgY2hhcmFjdGVycywgZXRjLikgaGF2ZSBhIGNvbHVtblxuICogICAgd2lkdGggb2YgMS5cbiAqICBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCBjaGFyYWN0ZXJzIGFyZSBlbmNvZGVkIGluIElTTyAxMDY0Ni5cbiovXG5cbmZ1bmN0aW9uIHdjc3dpZHRoKHN0ciwgb3B0cykge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHJldHVybiB3Y3dpZHRoKHN0ciwgb3B0cylcblxuICB2YXIgcyA9IDBcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbiA9IHdjd2lkdGgoc3RyLmNoYXJDb2RlQXQoaSksIG9wdHMpXG4gICAgaWYgKG4gPCAwKSByZXR1cm4gLTFcbiAgICBzICs9IG5cbiAgfVxuXG4gIHJldHVybiBzXG59XG5cbmZ1bmN0aW9uIHdjd2lkdGgodWNzLCBvcHRzKSB7XG4gIC8vIHRlc3QgZm9yIDgtYml0IGNvbnRyb2wgY2hhcmFjdGVyc1xuICBpZiAodWNzID09PSAwKSByZXR1cm4gb3B0cy5udWxcbiAgaWYgKHVjcyA8IDMyIHx8ICh1Y3MgPj0gMHg3ZiAmJiB1Y3MgPCAweGEwKSkgcmV0dXJuIG9wdHMuY29udHJvbFxuXG4gIC8vIGJpbmFyeSBzZWFyY2ggaW4gdGFibGUgb2Ygbm9uLXNwYWNpbmcgY2hhcmFjdGVyc1xuICBpZiAoYmlzZWFyY2godWNzKSkgcmV0dXJuIDBcblxuICAvLyBpZiB3ZSBhcnJpdmUgaGVyZSwgdWNzIGlzIG5vdCBhIGNvbWJpbmluZyBvciBDMC9DMSBjb250cm9sIGNoYXJhY3RlclxuICByZXR1cm4gMSArXG4gICAgICAodWNzID49IDB4MTEwMCAmJlxuICAgICAgICh1Y3MgPD0gMHgxMTVmIHx8ICAgICAgICAgICAgICAgICAgICAgICAvLyBIYW5ndWwgSmFtbyBpbml0LiBjb25zb25hbnRzXG4gICAgICAgIHVjcyA9PSAweDIzMjkgfHwgdWNzID09IDB4MjMyYSB8fFxuICAgICAgICAodWNzID49IDB4MmU4MCAmJiB1Y3MgPD0gMHhhNGNmICYmXG4gICAgICAgICB1Y3MgIT0gMHgzMDNmKSB8fCAgICAgICAgICAgICAgICAgICAgIC8vIENKSyAuLi4gWWlcbiAgICAgICAgKHVjcyA+PSAweGFjMDAgJiYgdWNzIDw9IDB4ZDdhMykgfHwgICAgLy8gSGFuZ3VsIFN5bGxhYmxlc1xuICAgICAgICAodWNzID49IDB4ZjkwMCAmJiB1Y3MgPD0gMHhmYWZmKSB8fCAgICAvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzXG4gICAgICAgICh1Y3MgPj0gMHhmZTEwICYmIHVjcyA8PSAweGZlMTkpIHx8ICAgIC8vIFZlcnRpY2FsIGZvcm1zXG4gICAgICAgICh1Y3MgPj0gMHhmZTMwICYmIHVjcyA8PSAweGZlNmYpIHx8ICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IEZvcm1zXG4gICAgICAgICh1Y3MgPj0gMHhmZjAwICYmIHVjcyA8PSAweGZmNjApIHx8ICAgIC8vIEZ1bGx3aWR0aCBGb3Jtc1xuICAgICAgICAodWNzID49IDB4ZmZlMCAmJiB1Y3MgPD0gMHhmZmU2KSB8fFxuICAgICAgICAodWNzID49IDB4MjAwMDAgJiYgdWNzIDw9IDB4MmZmZmQpIHx8XG4gICAgICAgICh1Y3MgPj0gMHgzMDAwMCAmJiB1Y3MgPD0gMHgzZmZmZCkpKTtcbn1cblxuZnVuY3Rpb24gYmlzZWFyY2godWNzKSB7XG4gIHZhciBtaW4gPSAwXG4gIHZhciBtYXggPSBjb21iaW5pbmcubGVuZ3RoIC0gMVxuICB2YXIgbWlkXG5cbiAgaWYgKHVjcyA8IGNvbWJpbmluZ1swXVswXSB8fCB1Y3MgPiBjb21iaW5pbmdbbWF4XVsxXSkgcmV0dXJuIGZhbHNlXG5cbiAgd2hpbGUgKG1heCA+PSBtaW4pIHtcbiAgICBtaWQgPSBNYXRoLmZsb29yKChtaW4gKyBtYXgpIC8gMilcbiAgICBpZiAodWNzID4gY29tYmluaW5nW21pZF1bMV0pIG1pbiA9IG1pZCArIDFcbiAgICBlbHNlIGlmICh1Y3MgPCBjb21iaW5pbmdbbWlkXVswXSkgbWF4ID0gbWlkIC0gMVxuICAgIGVsc2UgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICh7c3RyZWFtID0gcHJvY2Vzcy5zdGRvdXR9ID0ge30pID0+IHtcblx0cmV0dXJuIEJvb2xlYW4oXG5cdFx0c3RyZWFtICYmIHN0cmVhbS5pc1RUWSAmJlxuXHRcdHByb2Nlc3MuZW52LlRFUk0gIT09ICdkdW1iJyAmJlxuXHRcdCEoJ0NJJyBpbiBwcm9jZXNzLmVudilcblx0KTtcbn07XG4iLCJpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgLy8gaW1wbGVtZW50YXRpb24gZnJvbSBzdGFuZGFyZCBub2RlLmpzICd1dGlsJyBtb2R1bGVcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgY3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICB2YWx1ZTogY3RvcixcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGlmIChzdXBlckN0b3IpIHtcbiAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgICB2YXIgVGVtcEN0b3IgPSBmdW5jdGlvbiAoKSB7fVxuICAgICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZVxuICAgICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgICAgY3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yXG4gICAgfVxuICB9XG59XG4iLCJ0cnkge1xuICB2YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHR5cGVvZiB1dGlsLmluaGVyaXRzICE9PSAnZnVuY3Rpb24nKSB0aHJvdyAnJztcbiAgbW9kdWxlLmV4cG9ydHMgPSB1dGlsLmluaGVyaXRzO1xufSBjYXRjaCAoZSkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vaW5oZXJpdHNfYnJvd3Nlci5qcycpO1xufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3Qgc3ltYm9sID0gU3ltYm9sLmZvcignQnVmZmVyTGlzdCcpXG5cbmZ1bmN0aW9uIEJ1ZmZlckxpc3QgKGJ1Zikge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQnVmZmVyTGlzdCkpIHtcbiAgICByZXR1cm4gbmV3IEJ1ZmZlckxpc3QoYnVmKVxuICB9XG5cbiAgQnVmZmVyTGlzdC5faW5pdC5jYWxsKHRoaXMsIGJ1Zilcbn1cblxuQnVmZmVyTGlzdC5faW5pdCA9IGZ1bmN0aW9uIF9pbml0IChidWYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHN5bWJvbCwgeyB2YWx1ZTogdHJ1ZSB9KVxuXG4gIHRoaXMuX2J1ZnMgPSBbXVxuICB0aGlzLmxlbmd0aCA9IDBcblxuICBpZiAoYnVmKSB7XG4gICAgdGhpcy5hcHBlbmQoYnVmKVxuICB9XG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLl9uZXcgPSBmdW5jdGlvbiBfbmV3IChidWYpIHtcbiAgcmV0dXJuIG5ldyBCdWZmZXJMaXN0KGJ1Zilcbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuX29mZnNldCA9IGZ1bmN0aW9uIF9vZmZzZXQgKG9mZnNldCkge1xuICBpZiAob2Zmc2V0ID09PSAwKSB7XG4gICAgcmV0dXJuIFswLCAwXVxuICB9XG5cbiAgbGV0IHRvdCA9IDBcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2J1ZnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBfdCA9IHRvdCArIHRoaXMuX2J1ZnNbaV0ubGVuZ3RoXG4gICAgaWYgKG9mZnNldCA8IF90IHx8IGkgPT09IHRoaXMuX2J1ZnMubGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuIFtpLCBvZmZzZXQgLSB0b3RdXG4gICAgfVxuICAgIHRvdCA9IF90XG4gIH1cbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuX3JldmVyc2VPZmZzZXQgPSBmdW5jdGlvbiAoYmxPZmZzZXQpIHtcbiAgY29uc3QgYnVmZmVySWQgPSBibE9mZnNldFswXVxuICBsZXQgb2Zmc2V0ID0gYmxPZmZzZXRbMV1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1ZmZlcklkOyBpKyspIHtcbiAgICBvZmZzZXQgKz0gdGhpcy5fYnVmc1tpXS5sZW5ndGhcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRcbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0IChpbmRleCkge1xuICBpZiAoaW5kZXggPiB0aGlzLmxlbmd0aCB8fCBpbmRleCA8IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICBjb25zdCBvZmZzZXQgPSB0aGlzLl9vZmZzZXQoaW5kZXgpXG5cbiAgcmV0dXJuIHRoaXMuX2J1ZnNbb2Zmc2V0WzBdXVtvZmZzZXRbMV1dXG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ251bWJlcicgJiYgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmICh0eXBlb2YgZW5kID09PSAnbnVtYmVyJyAmJiBlbmQgPCAwKSB7XG4gICAgZW5kICs9IHRoaXMubGVuZ3RoXG4gIH1cblxuICByZXR1cm4gdGhpcy5jb3B5KG51bGwsIDAsIHN0YXJ0LCBlbmQpXG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5IChkc3QsIGRzdFN0YXJ0LCBzcmNTdGFydCwgc3JjRW5kKSB7XG4gIGlmICh0eXBlb2Ygc3JjU3RhcnQgIT09ICdudW1iZXInIHx8IHNyY1N0YXJ0IDwgMCkge1xuICAgIHNyY1N0YXJ0ID0gMFxuICB9XG5cbiAgaWYgKHR5cGVvZiBzcmNFbmQgIT09ICdudW1iZXInIHx8IHNyY0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgc3JjRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzcmNTdGFydCA+PSB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiBkc3QgfHwgQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICBpZiAoc3JjRW5kIDw9IDApIHtcbiAgICByZXR1cm4gZHN0IHx8IEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgY29uc3QgY29weSA9ICEhZHN0XG4gIGNvbnN0IG9mZiA9IHRoaXMuX29mZnNldChzcmNTdGFydClcbiAgY29uc3QgbGVuID0gc3JjRW5kIC0gc3JjU3RhcnRcbiAgbGV0IGJ5dGVzID0gbGVuXG4gIGxldCBidWZvZmYgPSAoY29weSAmJiBkc3RTdGFydCkgfHwgMFxuICBsZXQgc3RhcnQgPSBvZmZbMV1cblxuICAvLyBjb3B5L3NsaWNlIGV2ZXJ5dGhpbmdcbiAgaWYgKHNyY1N0YXJ0ID09PSAwICYmIHNyY0VuZCA9PT0gdGhpcy5sZW5ndGgpIHtcbiAgICBpZiAoIWNvcHkpIHtcbiAgICAgIC8vIHNsaWNlLCBidXQgZnVsbCBjb25jYXQgaWYgbXVsdGlwbGUgYnVmZmVyc1xuICAgICAgcmV0dXJuIHRoaXMuX2J1ZnMubGVuZ3RoID09PSAxXG4gICAgICAgID8gdGhpcy5fYnVmc1swXVxuICAgICAgICA6IEJ1ZmZlci5jb25jYXQodGhpcy5fYnVmcywgdGhpcy5sZW5ndGgpXG4gICAgfVxuXG4gICAgLy8gY29weSwgbmVlZCB0byBjb3B5IGluZGl2aWR1YWwgYnVmZmVyc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fYnVmcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5fYnVmc1tpXS5jb3B5KGRzdCwgYnVmb2ZmKVxuICAgICAgYnVmb2ZmICs9IHRoaXMuX2J1ZnNbaV0ubGVuZ3RoXG4gICAgfVxuXG4gICAgcmV0dXJuIGRzdFxuICB9XG5cbiAgLy8gZWFzeSwgY2hlYXAgY2FzZSB3aGVyZSBpdCdzIGEgc3Vic2V0IG9mIG9uZSBvZiB0aGUgYnVmZmVyc1xuICBpZiAoYnl0ZXMgPD0gdGhpcy5fYnVmc1tvZmZbMF1dLmxlbmd0aCAtIHN0YXJ0KSB7XG4gICAgcmV0dXJuIGNvcHlcbiAgICAgID8gdGhpcy5fYnVmc1tvZmZbMF1dLmNvcHkoZHN0LCBkc3RTdGFydCwgc3RhcnQsIHN0YXJ0ICsgYnl0ZXMpXG4gICAgICA6IHRoaXMuX2J1ZnNbb2ZmWzBdXS5zbGljZShzdGFydCwgc3RhcnQgKyBieXRlcylcbiAgfVxuXG4gIGlmICghY29weSkge1xuICAgIC8vIGEgc2xpY2UsIHdlIG5lZWQgc29tZXRoaW5nIHRvIGNvcHkgaW4gdG9cbiAgICBkc3QgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuKVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IG9mZlswXTsgaSA8IHRoaXMuX2J1ZnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBsID0gdGhpcy5fYnVmc1tpXS5sZW5ndGggLSBzdGFydFxuXG4gICAgaWYgKGJ5dGVzID4gbCkge1xuICAgICAgdGhpcy5fYnVmc1tpXS5jb3B5KGRzdCwgYnVmb2ZmLCBzdGFydClcbiAgICAgIGJ1Zm9mZiArPSBsXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2J1ZnNbaV0uY29weShkc3QsIGJ1Zm9mZiwgc3RhcnQsIHN0YXJ0ICsgYnl0ZXMpXG4gICAgICBidWZvZmYgKz0gbFxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBieXRlcyAtPSBsXG5cbiAgICBpZiAoc3RhcnQpIHtcbiAgICAgIHN0YXJ0ID0gMFxuICAgIH1cbiAgfVxuXG4gIC8vIHNhZmVndWFyZCBzbyB0aGF0IHdlIGRvbid0IHJldHVybiB1bmluaXRpYWxpemVkIG1lbW9yeVxuICBpZiAoZHN0Lmxlbmd0aCA+IGJ1Zm9mZikgcmV0dXJuIGRzdC5zbGljZSgwLCBidWZvZmYpXG5cbiAgcmV0dXJuIGRzdFxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5zaGFsbG93U2xpY2UgPSBmdW5jdGlvbiBzaGFsbG93U2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgc3RhcnQgPSBzdGFydCB8fCAwXG4gIGVuZCA9IHR5cGVvZiBlbmQgIT09ICdudW1iZXInID8gdGhpcy5sZW5ndGggOiBlbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IGVuZCkge1xuICAgIHJldHVybiB0aGlzLl9uZXcoKVxuICB9XG5cbiAgY29uc3Qgc3RhcnRPZmZzZXQgPSB0aGlzLl9vZmZzZXQoc3RhcnQpXG4gIGNvbnN0IGVuZE9mZnNldCA9IHRoaXMuX29mZnNldChlbmQpXG4gIGNvbnN0IGJ1ZmZlcnMgPSB0aGlzLl9idWZzLnNsaWNlKHN0YXJ0T2Zmc2V0WzBdLCBlbmRPZmZzZXRbMF0gKyAxKVxuXG4gIGlmIChlbmRPZmZzZXRbMV0gPT09IDApIHtcbiAgICBidWZmZXJzLnBvcCgpXG4gIH0gZWxzZSB7XG4gICAgYnVmZmVyc1tidWZmZXJzLmxlbmd0aCAtIDFdID0gYnVmZmVyc1tidWZmZXJzLmxlbmd0aCAtIDFdLnNsaWNlKDAsIGVuZE9mZnNldFsxXSlcbiAgfVxuXG4gIGlmIChzdGFydE9mZnNldFsxXSAhPT0gMCkge1xuICAgIGJ1ZmZlcnNbMF0gPSBidWZmZXJzWzBdLnNsaWNlKHN0YXJ0T2Zmc2V0WzFdKVxuICB9XG5cbiAgcmV0dXJuIHRoaXMuX25ldyhidWZmZXJzKVxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICByZXR1cm4gdGhpcy5zbGljZShzdGFydCwgZW5kKS50b1N0cmluZyhlbmNvZGluZylcbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuY29uc3VtZSA9IGZ1bmN0aW9uIGNvbnN1bWUgKGJ5dGVzKSB7XG4gIC8vIGZpcnN0LCBub3JtYWxpemUgdGhlIGFyZ3VtZW50LCBpbiBhY2NvcmRhbmNlIHdpdGggaG93IEJ1ZmZlciBkb2VzIGl0XG4gIGJ5dGVzID0gTWF0aC50cnVuYyhieXRlcylcbiAgLy8gZG8gbm90aGluZyBpZiBub3QgYSBwb3NpdGl2ZSBudW1iZXJcbiAgaWYgKE51bWJlci5pc05hTihieXRlcykgfHwgYnl0ZXMgPD0gMCkgcmV0dXJuIHRoaXNcblxuICB3aGlsZSAodGhpcy5fYnVmcy5sZW5ndGgpIHtcbiAgICBpZiAoYnl0ZXMgPj0gdGhpcy5fYnVmc1swXS5sZW5ndGgpIHtcbiAgICAgIGJ5dGVzIC09IHRoaXMuX2J1ZnNbMF0ubGVuZ3RoXG4gICAgICB0aGlzLmxlbmd0aCAtPSB0aGlzLl9idWZzWzBdLmxlbmd0aFxuICAgICAgdGhpcy5fYnVmcy5zaGlmdCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2J1ZnNbMF0gPSB0aGlzLl9idWZzWzBdLnNsaWNlKGJ5dGVzKVxuICAgICAgdGhpcy5sZW5ndGggLT0gYnl0ZXNcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuZHVwbGljYXRlID0gZnVuY3Rpb24gZHVwbGljYXRlICgpIHtcbiAgY29uc3QgY29weSA9IHRoaXMuX25ldygpXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9idWZzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29weS5hcHBlbmQodGhpcy5fYnVmc1tpXSlcbiAgfVxuXG4gIHJldHVybiBjb3B5XG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZCAoYnVmKSB7XG4gIGlmIChidWYgPT0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBpZiAoYnVmLmJ1ZmZlcikge1xuICAgIC8vIGFwcGVuZCBhIHZpZXcgb2YgdGhlIHVuZGVybHlpbmcgQXJyYXlCdWZmZXJcbiAgICB0aGlzLl9hcHBlbmRCdWZmZXIoQnVmZmVyLmZyb20oYnVmLmJ1ZmZlciwgYnVmLmJ5dGVPZmZzZXQsIGJ1Zi5ieXRlTGVuZ3RoKSlcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJ1ZikpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5hcHBlbmQoYnVmW2ldKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0aGlzLl9pc0J1ZmZlckxpc3QoYnVmKSkge1xuICAgIC8vIHVud3JhcCBhcmd1bWVudCBpbnRvIGluZGl2aWR1YWwgQnVmZmVyTGlzdHNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5fYnVmcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5hcHBlbmQoYnVmLl9idWZzW2ldKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBjb2VyY2UgbnVtYmVyIGFyZ3VtZW50cyB0byBzdHJpbmdzLCBzaW5jZSBCdWZmZXIobnVtYmVyKSBkb2VzXG4gICAgLy8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvblxuICAgIGlmICh0eXBlb2YgYnVmID09PSAnbnVtYmVyJykge1xuICAgICAgYnVmID0gYnVmLnRvU3RyaW5nKClcbiAgICB9XG5cbiAgICB0aGlzLl9hcHBlbmRCdWZmZXIoQnVmZmVyLmZyb20oYnVmKSlcbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLl9hcHBlbmRCdWZmZXIgPSBmdW5jdGlvbiBhcHBlbmRCdWZmZXIgKGJ1Zikge1xuICB0aGlzLl9idWZzLnB1c2goYnVmKVxuICB0aGlzLmxlbmd0aCArPSBidWYubGVuZ3RoXG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiAoc2VhcmNoLCBvZmZzZXQsIGVuY29kaW5nKSB7XG4gIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBvZmZzZXRcbiAgICBvZmZzZXQgPSB1bmRlZmluZWRcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2VhcmNoID09PSAnZnVuY3Rpb24nIHx8IEFycmF5LmlzQXJyYXkoc2VhcmNoKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQnVmZmVyTGlzdCwgb3IgVWludDhBcnJheS4nKVxuICB9IGVsc2UgaWYgKHR5cGVvZiBzZWFyY2ggPT09ICdudW1iZXInKSB7XG4gICAgc2VhcmNoID0gQnVmZmVyLmZyb20oW3NlYXJjaF0pXG4gIH0gZWxzZSBpZiAodHlwZW9mIHNlYXJjaCA9PT0gJ3N0cmluZycpIHtcbiAgICBzZWFyY2ggPSBCdWZmZXIuZnJvbShzZWFyY2gsIGVuY29kaW5nKVxuICB9IGVsc2UgaWYgKHRoaXMuX2lzQnVmZmVyTGlzdChzZWFyY2gpKSB7XG4gICAgc2VhcmNoID0gc2VhcmNoLnNsaWNlKClcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHNlYXJjaC5idWZmZXIpKSB7XG4gICAgc2VhcmNoID0gQnVmZmVyLmZyb20oc2VhcmNoLmJ1ZmZlciwgc2VhcmNoLmJ5dGVPZmZzZXQsIHNlYXJjaC5ieXRlTGVuZ3RoKVxuICB9IGVsc2UgaWYgKCFCdWZmZXIuaXNCdWZmZXIoc2VhcmNoKSkge1xuICAgIHNlYXJjaCA9IEJ1ZmZlci5mcm9tKHNlYXJjaClcbiAgfVxuXG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQgfHwgMClcblxuICBpZiAoaXNOYU4ob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IDBcbiAgfVxuXG4gIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgb2Zmc2V0ID0gdGhpcy5sZW5ndGggKyBvZmZzZXRcbiAgfVxuXG4gIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgb2Zmc2V0ID0gMFxuICB9XG5cbiAgaWYgKHNlYXJjaC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gb2Zmc2V0ID4gdGhpcy5sZW5ndGggPyB0aGlzLmxlbmd0aCA6IG9mZnNldFxuICB9XG5cbiAgY29uc3QgYmxPZmZzZXQgPSB0aGlzLl9vZmZzZXQob2Zmc2V0KVxuICBsZXQgYmxJbmRleCA9IGJsT2Zmc2V0WzBdIC8vIGluZGV4IG9mIHdoaWNoIGludGVybmFsIGJ1ZmZlciB3ZSdyZSB3b3JraW5nIG9uXG4gIGxldCBidWZmT2Zmc2V0ID0gYmxPZmZzZXRbMV0gLy8gb2Zmc2V0IG9mIHRoZSBpbnRlcm5hbCBidWZmZXIgd2UncmUgd29ya2luZyBvblxuXG4gIC8vIHNjYW4gb3ZlciBlYWNoIGJ1ZmZlclxuICBmb3IgKDsgYmxJbmRleCA8IHRoaXMuX2J1ZnMubGVuZ3RoOyBibEluZGV4KyspIHtcbiAgICBjb25zdCBidWZmID0gdGhpcy5fYnVmc1tibEluZGV4XVxuXG4gICAgd2hpbGUgKGJ1ZmZPZmZzZXQgPCBidWZmLmxlbmd0aCkge1xuICAgICAgY29uc3QgYXZhaWxhYmxlV2luZG93ID0gYnVmZi5sZW5ndGggLSBidWZmT2Zmc2V0XG5cbiAgICAgIGlmIChhdmFpbGFibGVXaW5kb3cgPj0gc2VhcmNoLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBuYXRpdmVTZWFyY2hSZXN1bHQgPSBidWZmLmluZGV4T2Yoc2VhcmNoLCBidWZmT2Zmc2V0KVxuXG4gICAgICAgIGlmIChuYXRpdmVTZWFyY2hSZXN1bHQgIT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3JldmVyc2VPZmZzZXQoW2JsSW5kZXgsIG5hdGl2ZVNlYXJjaFJlc3VsdF0pXG4gICAgICAgIH1cblxuICAgICAgICBidWZmT2Zmc2V0ID0gYnVmZi5sZW5ndGggLSBzZWFyY2gubGVuZ3RoICsgMSAvLyBlbmQgb2YgbmF0aXZlIHNlYXJjaCB3aW5kb3dcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJldk9mZnNldCA9IHRoaXMuX3JldmVyc2VPZmZzZXQoW2JsSW5kZXgsIGJ1ZmZPZmZzZXRdKVxuXG4gICAgICAgIGlmICh0aGlzLl9tYXRjaChyZXZPZmZzZXQsIHNlYXJjaCkpIHtcbiAgICAgICAgICByZXR1cm4gcmV2T2Zmc2V0XG4gICAgICAgIH1cblxuICAgICAgICBidWZmT2Zmc2V0KytcbiAgICAgIH1cbiAgICB9XG5cbiAgICBidWZmT2Zmc2V0ID0gMFxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLl9tYXRjaCA9IGZ1bmN0aW9uIChvZmZzZXQsIHNlYXJjaCkge1xuICBpZiAodGhpcy5sZW5ndGggLSBvZmZzZXQgPCBzZWFyY2gubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKGxldCBzZWFyY2hPZmZzZXQgPSAwOyBzZWFyY2hPZmZzZXQgPCBzZWFyY2gubGVuZ3RoOyBzZWFyY2hPZmZzZXQrKykge1xuICAgIGlmICh0aGlzLmdldChvZmZzZXQgKyBzZWFyY2hPZmZzZXQpICE9PSBzZWFyY2hbc2VhcmNoT2Zmc2V0XSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbjsoZnVuY3Rpb24gKCkge1xuICBjb25zdCBtZXRob2RzID0ge1xuICAgIHJlYWREb3VibGVCRTogOCxcbiAgICByZWFkRG91YmxlTEU6IDgsXG4gICAgcmVhZEZsb2F0QkU6IDQsXG4gICAgcmVhZEZsb2F0TEU6IDQsXG4gICAgcmVhZEludDMyQkU6IDQsXG4gICAgcmVhZEludDMyTEU6IDQsXG4gICAgcmVhZFVJbnQzMkJFOiA0LFxuICAgIHJlYWRVSW50MzJMRTogNCxcbiAgICByZWFkSW50MTZCRTogMixcbiAgICByZWFkSW50MTZMRTogMixcbiAgICByZWFkVUludDE2QkU6IDIsXG4gICAgcmVhZFVJbnQxNkxFOiAyLFxuICAgIHJlYWRJbnQ4OiAxLFxuICAgIHJlYWRVSW50ODogMSxcbiAgICByZWFkSW50QkU6IG51bGwsXG4gICAgcmVhZEludExFOiBudWxsLFxuICAgIHJlYWRVSW50QkU6IG51bGwsXG4gICAgcmVhZFVJbnRMRTogbnVsbFxuICB9XG5cbiAgZm9yIChjb25zdCBtIGluIG1ldGhvZHMpIHtcbiAgICAoZnVuY3Rpb24gKG0pIHtcbiAgICAgIGlmIChtZXRob2RzW21dID09PSBudWxsKSB7XG4gICAgICAgIEJ1ZmZlckxpc3QucHJvdG90eXBlW21dID0gZnVuY3Rpb24gKG9mZnNldCwgYnl0ZUxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgYnl0ZUxlbmd0aClbbV0oMCwgYnl0ZUxlbmd0aClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQnVmZmVyTGlzdC5wcm90b3R5cGVbbV0gPSBmdW5jdGlvbiAob2Zmc2V0ID0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgbWV0aG9kc1ttXSlbbV0oMClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0obSkpXG4gIH1cbn0oKSlcblxuLy8gVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjbGFzcyBhbmQgYWxzbyBhcyBhbiBpbmRpY2F0b3Igb2YgdGhpcyBvYmplY3QgYmVpbmdcbi8vIGEgYEJ1ZmZlckxpc3RgLiBJdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgYGluc3RhbmNlb2YgQnVmZmVyTGlzdGAgaW4gYSBicm93c2VyXG4vLyBlbnZpcm9ubWVudCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIGRpZmZlcmVudCBjb3BpZXMgb2YgdGhlXG4vLyBCdWZmZXJMaXN0IGNsYXNzIGFuZCBzb21lIGBCdWZmZXJMaXN0YHMgbWlnaHQgYmUgYEJ1ZmZlckxpc3Rgcy5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLl9pc0J1ZmZlckxpc3QgPSBmdW5jdGlvbiBfaXNCdWZmZXJMaXN0IChiKSB7XG4gIHJldHVybiBiIGluc3RhbmNlb2YgQnVmZmVyTGlzdCB8fCBCdWZmZXJMaXN0LmlzQnVmZmVyTGlzdChiKVxufVxuXG5CdWZmZXJMaXN0LmlzQnVmZmVyTGlzdCA9IGZ1bmN0aW9uIGlzQnVmZmVyTGlzdCAoYikge1xuICByZXR1cm4gYiAhPSBudWxsICYmIGJbc3ltYm9sXVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlckxpc3RcbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEdXBsZXhTdHJlYW0gPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKS5EdXBsZXhcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuY29uc3QgQnVmZmVyTGlzdCA9IHJlcXVpcmUoJy4vQnVmZmVyTGlzdCcpXG5cbmZ1bmN0aW9uIEJ1ZmZlckxpc3RTdHJlYW0gKGNhbGxiYWNrKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXJMaXN0U3RyZWFtKSkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyTGlzdFN0cmVhbShjYWxsYmFjaylcbiAgfVxuXG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLl9jYWxsYmFjayA9IGNhbGxiYWNrXG5cbiAgICBjb25zdCBwaXBlciA9IGZ1bmN0aW9uIHBpcGVyIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLl9jYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9jYWxsYmFjayhlcnIpXG4gICAgICAgIHRoaXMuX2NhbGxiYWNrID0gbnVsbFxuICAgICAgfVxuICAgIH0uYmluZCh0aGlzKVxuXG4gICAgdGhpcy5vbigncGlwZScsIGZ1bmN0aW9uIG9uUGlwZSAoc3JjKSB7XG4gICAgICBzcmMub24oJ2Vycm9yJywgcGlwZXIpXG4gICAgfSlcbiAgICB0aGlzLm9uKCd1bnBpcGUnLCBmdW5jdGlvbiBvblVucGlwZSAoc3JjKSB7XG4gICAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgcGlwZXIpXG4gICAgfSlcblxuICAgIGNhbGxiYWNrID0gbnVsbFxuICB9XG5cbiAgQnVmZmVyTGlzdC5faW5pdC5jYWxsKHRoaXMsIGNhbGxiYWNrKVxuICBEdXBsZXhTdHJlYW0uY2FsbCh0aGlzKVxufVxuXG5pbmhlcml0cyhCdWZmZXJMaXN0U3RyZWFtLCBEdXBsZXhTdHJlYW0pXG5PYmplY3QuYXNzaWduKEJ1ZmZlckxpc3RTdHJlYW0ucHJvdG90eXBlLCBCdWZmZXJMaXN0LnByb3RvdHlwZSlcblxuQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUuX25ldyA9IGZ1bmN0aW9uIF9uZXcgKGNhbGxiYWNrKSB7XG4gIHJldHVybiBuZXcgQnVmZmVyTGlzdFN0cmVhbShjYWxsYmFjaylcbn1cblxuQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gX3dyaXRlIChidWYsIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICB0aGlzLl9hcHBlbmRCdWZmZXIoYnVmKVxuXG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjaygpXG4gIH1cbn1cblxuQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiBfcmVhZCAoc2l6ZSkge1xuICBpZiAoIXRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRoaXMucHVzaChudWxsKVxuICB9XG5cbiAgc2l6ZSA9IE1hdGgubWluKHNpemUsIHRoaXMubGVuZ3RoKVxuICB0aGlzLnB1c2godGhpcy5zbGljZSgwLCBzaXplKSlcbiAgdGhpcy5jb25zdW1lKHNpemUpXG59XG5cbkJ1ZmZlckxpc3RTdHJlYW0ucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIGVuZCAoY2h1bmspIHtcbiAgRHVwbGV4U3RyZWFtLnByb3RvdHlwZS5lbmQuY2FsbCh0aGlzLCBjaHVuaylcblxuICBpZiAodGhpcy5fY2FsbGJhY2spIHtcbiAgICB0aGlzLl9jYWxsYmFjayhudWxsLCB0aGlzLnNsaWNlKCkpXG4gICAgdGhpcy5fY2FsbGJhY2sgPSBudWxsXG4gIH1cbn1cblxuQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiBfZGVzdHJveSAoZXJyLCBjYikge1xuICB0aGlzLl9idWZzLmxlbmd0aCA9IDBcbiAgdGhpcy5sZW5ndGggPSAwXG4gIGNiKGVycilcbn1cblxuQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUuX2lzQnVmZmVyTGlzdCA9IGZ1bmN0aW9uIF9pc0J1ZmZlckxpc3QgKGIpIHtcbiAgcmV0dXJuIGIgaW5zdGFuY2VvZiBCdWZmZXJMaXN0U3RyZWFtIHx8IGIgaW5zdGFuY2VvZiBCdWZmZXJMaXN0IHx8IEJ1ZmZlckxpc3RTdHJlYW0uaXNCdWZmZXJMaXN0KGIpXG59XG5cbkJ1ZmZlckxpc3RTdHJlYW0uaXNCdWZmZXJMaXN0ID0gQnVmZmVyTGlzdC5pc0J1ZmZlckxpc3RcblxubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXJMaXN0U3RyZWFtXG5tb2R1bGUuZXhwb3J0cy5CdWZmZXJMaXN0U3RyZWFtID0gQnVmZmVyTGlzdFN0cmVhbVxubW9kdWxlLmV4cG9ydHMuQnVmZmVyTGlzdCA9IEJ1ZmZlckxpc3RcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IHJlYWRsaW5lID0gcmVxdWlyZSgncmVhZGxpbmUnKTtcbmNvbnN0IGNoYWxrID0gcmVxdWlyZSgnY2hhbGsnKTtcbmNvbnN0IGNsaUN1cnNvciA9IHJlcXVpcmUoJ2NsaS1jdXJzb3InKTtcbmNvbnN0IGNsaVNwaW5uZXJzID0gcmVxdWlyZSgnY2xpLXNwaW5uZXJzJyk7XG5jb25zdCBsb2dTeW1ib2xzID0gcmVxdWlyZSgnbG9nLXN5bWJvbHMnKTtcbmNvbnN0IHN0cmlwQW5zaSA9IHJlcXVpcmUoJ3N0cmlwLWFuc2knKTtcbmNvbnN0IHdjd2lkdGggPSByZXF1aXJlKCd3Y3dpZHRoJyk7XG5jb25zdCBpc0ludGVyYWN0aXZlID0gcmVxdWlyZSgnaXMtaW50ZXJhY3RpdmUnKTtcbmNvbnN0IGlzVW5pY29kZVN1cHBvcnRlZCA9IHJlcXVpcmUoJ2lzLXVuaWNvZGUtc3VwcG9ydGVkJyk7XG5jb25zdCB7QnVmZmVyTGlzdFN0cmVhbX0gPSByZXF1aXJlKCdibCcpO1xuXG5jb25zdCBURVhUID0gU3ltYm9sKCd0ZXh0Jyk7XG5jb25zdCBQUkVGSVhfVEVYVCA9IFN5bWJvbCgncHJlZml4VGV4dCcpO1xuY29uc3QgQVNDSUlfRVRYX0NPREUgPSAweDAzOyAvLyBDdHJsK0MgZW1pdHMgdGhpcyBjb2RlXG5cbmNsYXNzIFN0ZGluRGlzY2FyZGVyIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5yZXF1ZXN0cyA9IDA7XG5cblx0XHR0aGlzLm11dGVkU3RyZWFtID0gbmV3IEJ1ZmZlckxpc3RTdHJlYW0oKTtcblx0XHR0aGlzLm11dGVkU3RyZWFtLnBpcGUocHJvY2Vzcy5zdGRvdXQpO1xuXG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgdW5pY29ybi9uby10aGlzLWFzc2lnbm1lbnRcblx0XHR0aGlzLm91ckVtaXQgPSBmdW5jdGlvbiAoZXZlbnQsIGRhdGEsIC4uLmFyZ3MpIHtcblx0XHRcdGNvbnN0IHtzdGRpbn0gPSBwcm9jZXNzO1xuXHRcdFx0aWYgKHNlbGYucmVxdWVzdHMgPiAwIHx8IHN0ZGluLmVtaXQgPT09IHNlbGYub3VyRW1pdCkge1xuXHRcdFx0XHRpZiAoZXZlbnQgPT09ICdrZXlwcmVzcycpIHsgLy8gRml4ZXMgcmVhZGxpbmUgYmVoYXZpb3Jcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZXZlbnQgPT09ICdkYXRhJyAmJiBkYXRhLmluY2x1ZGVzKEFTQ0lJX0VUWF9DT0RFKSkge1xuXHRcdFx0XHRcdHByb2Nlc3MuZW1pdCgnU0lHSU5UJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRSZWZsZWN0LmFwcGx5KHNlbGYub2xkRW1pdCwgdGhpcywgW2V2ZW50LCBkYXRhLCAuLi5hcmdzXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRSZWZsZWN0LmFwcGx5KHByb2Nlc3Muc3RkaW4uZW1pdCwgdGhpcywgW2V2ZW50LCBkYXRhLCAuLi5hcmdzXSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdHN0YXJ0KCkge1xuXHRcdHRoaXMucmVxdWVzdHMrKztcblxuXHRcdGlmICh0aGlzLnJlcXVlc3RzID09PSAxKSB7XG5cdFx0XHR0aGlzLnJlYWxTdGFydCgpO1xuXHRcdH1cblx0fVxuXG5cdHN0b3AoKSB7XG5cdFx0aWYgKHRoaXMucmVxdWVzdHMgPD0gMCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdgc3RvcGAgY2FsbGVkIG1vcmUgdGltZXMgdGhhbiBgc3RhcnRgJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5yZXF1ZXN0cy0tO1xuXG5cdFx0aWYgKHRoaXMucmVxdWVzdHMgPT09IDApIHtcblx0XHRcdHRoaXMucmVhbFN0b3AoKTtcblx0XHR9XG5cdH1cblxuXHRyZWFsU3RhcnQoKSB7XG5cdFx0Ly8gTm8ga25vd24gd2F5IHRvIG1ha2UgaXQgd29yayByZWxpYWJseSBvbiBXaW5kb3dzXG5cdFx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHtcblx0XHRcdGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuXHRcdFx0b3V0cHV0OiB0aGlzLm11dGVkU3RyZWFtXG5cdFx0fSk7XG5cblx0XHR0aGlzLnJsLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG5cdFx0XHRpZiAocHJvY2Vzcy5saXN0ZW5lckNvdW50KCdTSUdJTlQnKSA9PT0gMCkge1xuXHRcdFx0XHRwcm9jZXNzLmVtaXQoJ1NJR0lOVCcpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5ybC5jbG9zZSgpO1xuXHRcdFx0XHRwcm9jZXNzLmtpbGwocHJvY2Vzcy5waWQsICdTSUdJTlQnKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJlYWxTdG9wKCkge1xuXHRcdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5ybC5jbG9zZSgpO1xuXHRcdHRoaXMucmwgPSB1bmRlZmluZWQ7XG5cdH1cbn1cblxubGV0IHN0ZGluRGlzY2FyZGVyO1xuXG5jbGFzcyBPcmEge1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0aWYgKCFzdGRpbkRpc2NhcmRlcikge1xuXHRcdFx0c3RkaW5EaXNjYXJkZXIgPSBuZXcgU3RkaW5EaXNjYXJkZXIoKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRvcHRpb25zID0ge1xuXHRcdFx0XHR0ZXh0OiBvcHRpb25zXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHRoaXMub3B0aW9ucyA9IHtcblx0XHRcdHRleHQ6ICcnLFxuXHRcdFx0Y29sb3I6ICdjeWFuJyxcblx0XHRcdHN0cmVhbTogcHJvY2Vzcy5zdGRlcnIsXG5cdFx0XHRkaXNjYXJkU3RkaW46IHRydWUsXG5cdFx0XHQuLi5vcHRpb25zXG5cdFx0fTtcblxuXHRcdHRoaXMuc3Bpbm5lciA9IHRoaXMub3B0aW9ucy5zcGlubmVyO1xuXG5cdFx0dGhpcy5jb2xvciA9IHRoaXMub3B0aW9ucy5jb2xvcjtcblx0XHR0aGlzLmhpZGVDdXJzb3IgPSB0aGlzLm9wdGlvbnMuaGlkZUN1cnNvciAhPT0gZmFsc2U7XG5cdFx0dGhpcy5pbnRlcnZhbCA9IHRoaXMub3B0aW9ucy5pbnRlcnZhbCB8fCB0aGlzLnNwaW5uZXIuaW50ZXJ2YWwgfHwgMTAwO1xuXHRcdHRoaXMuc3RyZWFtID0gdGhpcy5vcHRpb25zLnN0cmVhbTtcblx0XHR0aGlzLmlkID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMuaXNFbmFibGVkID0gdHlwZW9mIHRoaXMub3B0aW9ucy5pc0VuYWJsZWQgPT09ICdib29sZWFuJyA/IHRoaXMub3B0aW9ucy5pc0VuYWJsZWQgOiBpc0ludGVyYWN0aXZlKHtzdHJlYW06IHRoaXMuc3RyZWFtfSk7XG5cdFx0dGhpcy5pc1NpbGVudCA9IHR5cGVvZiB0aGlzLm9wdGlvbnMuaXNTaWxlbnQgPT09ICdib29sZWFuJyA/IHRoaXMub3B0aW9ucy5pc1NpbGVudCA6IGZhbHNlO1xuXG5cdFx0Ly8gU2V0ICphZnRlciogYHRoaXMuc3RyZWFtYFxuXHRcdHRoaXMudGV4dCA9IHRoaXMub3B0aW9ucy50ZXh0O1xuXHRcdHRoaXMucHJlZml4VGV4dCA9IHRoaXMub3B0aW9ucy5wcmVmaXhUZXh0O1xuXHRcdHRoaXMubGluZXNUb0NsZWFyID0gMDtcblx0XHR0aGlzLmluZGVudCA9IHRoaXMub3B0aW9ucy5pbmRlbnQ7XG5cdFx0dGhpcy5kaXNjYXJkU3RkaW4gPSB0aGlzLm9wdGlvbnMuZGlzY2FyZFN0ZGluO1xuXHRcdHRoaXMuaXNEaXNjYXJkaW5nU3RkaW4gPSBmYWxzZTtcblx0fVxuXG5cdGdldCBpbmRlbnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2luZGVudDtcblx0fVxuXG5cdHNldCBpbmRlbnQoaW5kZW50ID0gMCkge1xuXHRcdGlmICghKGluZGVudCA+PSAwICYmIE51bWJlci5pc0ludGVnZXIoaW5kZW50KSkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignVGhlIGBpbmRlbnRgIG9wdGlvbiBtdXN0IGJlIGFuIGludGVnZXIgZnJvbSAwIGFuZCB1cCcpO1xuXHRcdH1cblxuXHRcdHRoaXMuX2luZGVudCA9IGluZGVudDtcblx0fVxuXG5cdF91cGRhdGVJbnRlcnZhbChpbnRlcnZhbCkge1xuXHRcdGlmIChpbnRlcnZhbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLmludGVydmFsID0gaW50ZXJ2YWw7XG5cdFx0fVxuXHR9XG5cblx0Z2V0IHNwaW5uZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3NwaW5uZXI7XG5cdH1cblxuXHRzZXQgc3Bpbm5lcihzcGlubmVyKSB7XG5cdFx0dGhpcy5mcmFtZUluZGV4ID0gMDtcblxuXHRcdGlmICh0eXBlb2Ygc3Bpbm5lciA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGlmIChzcGlubmVyLmZyYW1lcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignVGhlIGdpdmVuIHNwaW5uZXIgbXVzdCBoYXZlIGEgYGZyYW1lc2AgcHJvcGVydHknKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fc3Bpbm5lciA9IHNwaW5uZXI7XG5cdFx0fSBlbHNlIGlmICghaXNVbmljb2RlU3VwcG9ydGVkKCkpIHtcblx0XHRcdHRoaXMuX3NwaW5uZXIgPSBjbGlTcGlubmVycy5saW5lO1xuXHRcdH0gZWxzZSBpZiAoc3Bpbm5lciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBTZXQgZGVmYXVsdCBzcGlubmVyXG5cdFx0XHR0aGlzLl9zcGlubmVyID0gY2xpU3Bpbm5lcnMuZG90cztcblx0XHR9IGVsc2UgaWYgKHNwaW5uZXIgIT09ICdkZWZhdWx0JyAmJiBjbGlTcGlubmVyc1tzcGlubmVyXSkge1xuXHRcdFx0dGhpcy5fc3Bpbm5lciA9IGNsaVNwaW5uZXJzW3NwaW5uZXJdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIGJ1aWx0LWluIHNwaW5uZXIgbmFtZWQgJyR7c3Bpbm5lcn0nLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9jbGktc3Bpbm5lcnMvYmxvYi9tYWluL3NwaW5uZXJzLmpzb24gZm9yIGEgZnVsbCBsaXN0LmApO1xuXHRcdH1cblxuXHRcdHRoaXMuX3VwZGF0ZUludGVydmFsKHRoaXMuX3NwaW5uZXIuaW50ZXJ2YWwpO1xuXHR9XG5cblx0Z2V0IHRleHQoKSB7XG5cdFx0cmV0dXJuIHRoaXNbVEVYVF07XG5cdH1cblxuXHRzZXQgdGV4dCh2YWx1ZSkge1xuXHRcdHRoaXNbVEVYVF0gPSB2YWx1ZTtcblx0XHR0aGlzLnVwZGF0ZUxpbmVDb3VudCgpO1xuXHR9XG5cblx0Z2V0IHByZWZpeFRleHQoKSB7XG5cdFx0cmV0dXJuIHRoaXNbUFJFRklYX1RFWFRdO1xuXHR9XG5cblx0c2V0IHByZWZpeFRleHQodmFsdWUpIHtcblx0XHR0aGlzW1BSRUZJWF9URVhUXSA9IHZhbHVlO1xuXHRcdHRoaXMudXBkYXRlTGluZUNvdW50KCk7XG5cdH1cblxuXHRnZXQgaXNTcGlubmluZygpIHtcblx0XHRyZXR1cm4gdGhpcy5pZCAhPT0gdW5kZWZpbmVkO1xuXHR9XG5cblx0Z2V0RnVsbFByZWZpeFRleHQocHJlZml4VGV4dCA9IHRoaXNbUFJFRklYX1RFWFRdLCBwb3N0Zml4ID0gJyAnKSB7XG5cdFx0aWYgKHR5cGVvZiBwcmVmaXhUZXh0ID09PSAnc3RyaW5nJykge1xuXHRcdFx0cmV0dXJuIHByZWZpeFRleHQgKyBwb3N0Zml4O1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgcHJlZml4VGV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0cmV0dXJuIHByZWZpeFRleHQoKSArIHBvc3RmaXg7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cblx0dXBkYXRlTGluZUNvdW50KCkge1xuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLnN0cmVhbS5jb2x1bW5zIHx8IDgwO1xuXHRcdGNvbnN0IGZ1bGxQcmVmaXhUZXh0ID0gdGhpcy5nZXRGdWxsUHJlZml4VGV4dCh0aGlzLnByZWZpeFRleHQsICctJyk7XG5cdFx0dGhpcy5saW5lQ291bnQgPSAwO1xuXHRcdGZvciAoY29uc3QgbGluZSBvZiBzdHJpcEFuc2koZnVsbFByZWZpeFRleHQgKyAnLS0nICsgdGhpc1tURVhUXSkuc3BsaXQoJ1xcbicpKSB7XG5cdFx0XHR0aGlzLmxpbmVDb3VudCArPSBNYXRoLm1heCgxLCBNYXRoLmNlaWwod2N3aWR0aChsaW5lKSAvIGNvbHVtbnMpKTtcblx0XHR9XG5cdH1cblxuXHRnZXQgaXNFbmFibGVkKCkge1xuXHRcdHJldHVybiB0aGlzLl9pc0VuYWJsZWQgJiYgIXRoaXMuaXNTaWxlbnQ7XG5cdH1cblxuXHRzZXQgaXNFbmFibGVkKHZhbHVlKSB7XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgYGlzRW5hYmxlZGAgb3B0aW9uIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5faXNFbmFibGVkID0gdmFsdWU7XG5cdH1cblxuXHRnZXQgaXNTaWxlbnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2lzU2lsZW50O1xuXHR9XG5cblx0c2V0IGlzU2lsZW50KHZhbHVlKSB7XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgYGlzU2lsZW50YCBvcHRpb24gbXVzdCBiZSBhIGJvb2xlYW4nKTtcblx0XHR9XG5cblx0XHR0aGlzLl9pc1NpbGVudCA9IHZhbHVlO1xuXHR9XG5cblx0ZnJhbWUoKSB7XG5cdFx0Y29uc3Qge2ZyYW1lc30gPSB0aGlzLnNwaW5uZXI7XG5cdFx0bGV0IGZyYW1lID0gZnJhbWVzW3RoaXMuZnJhbWVJbmRleF07XG5cblx0XHRpZiAodGhpcy5jb2xvcikge1xuXHRcdFx0ZnJhbWUgPSBjaGFsa1t0aGlzLmNvbG9yXShmcmFtZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5mcmFtZUluZGV4ID0gKyt0aGlzLmZyYW1lSW5kZXggJSBmcmFtZXMubGVuZ3RoO1xuXHRcdGNvbnN0IGZ1bGxQcmVmaXhUZXh0ID0gKHR5cGVvZiB0aGlzLnByZWZpeFRleHQgPT09ICdzdHJpbmcnICYmIHRoaXMucHJlZml4VGV4dCAhPT0gJycpID8gdGhpcy5wcmVmaXhUZXh0ICsgJyAnIDogJyc7XG5cdFx0Y29uc3QgZnVsbFRleHQgPSB0eXBlb2YgdGhpcy50ZXh0ID09PSAnc3RyaW5nJyA/ICcgJyArIHRoaXMudGV4dCA6ICcnO1xuXG5cdFx0cmV0dXJuIGZ1bGxQcmVmaXhUZXh0ICsgZnJhbWUgKyBmdWxsVGV4dDtcblx0fVxuXG5cdGNsZWFyKCkge1xuXHRcdGlmICghdGhpcy5pc0VuYWJsZWQgfHwgIXRoaXMuc3RyZWFtLmlzVFRZKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGluZXNUb0NsZWFyOyBpKyspIHtcblx0XHRcdGlmIChpID4gMCkge1xuXHRcdFx0XHR0aGlzLnN0cmVhbS5tb3ZlQ3Vyc29yKDAsIC0xKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zdHJlYW0uY2xlYXJMaW5lKCk7XG5cdFx0XHR0aGlzLnN0cmVhbS5jdXJzb3JUbyh0aGlzLmluZGVudCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5saW5lc1RvQ2xlYXIgPSAwO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRyZW5kZXIoKSB7XG5cdFx0aWYgKHRoaXMuaXNTaWxlbnQpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHRoaXMuY2xlYXIoKTtcblx0XHR0aGlzLnN0cmVhbS53cml0ZSh0aGlzLmZyYW1lKCkpO1xuXHRcdHRoaXMubGluZXNUb0NsZWFyID0gdGhpcy5saW5lQ291bnQ7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHN0YXJ0KHRleHQpIHtcblx0XHRpZiAodGV4dCkge1xuXHRcdFx0dGhpcy50ZXh0ID0gdGV4dDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5pc1NpbGVudCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLmlzRW5hYmxlZCkge1xuXHRcdFx0aWYgKHRoaXMudGV4dCkge1xuXHRcdFx0XHR0aGlzLnN0cmVhbS53cml0ZShgLSAke3RoaXMudGV4dH1cXG5gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuaXNTcGlubmluZykge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuaGlkZUN1cnNvcikge1xuXHRcdFx0Y2xpQ3Vyc29yLmhpZGUodGhpcy5zdHJlYW0pO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmRpc2NhcmRTdGRpbiAmJiBwcm9jZXNzLnN0ZGluLmlzVFRZKSB7XG5cdFx0XHR0aGlzLmlzRGlzY2FyZGluZ1N0ZGluID0gdHJ1ZTtcblx0XHRcdHN0ZGluRGlzY2FyZGVyLnN0YXJ0KCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5yZW5kZXIoKTtcblx0XHR0aGlzLmlkID0gc2V0SW50ZXJ2YWwodGhpcy5yZW5kZXIuYmluZCh0aGlzKSwgdGhpcy5pbnRlcnZhbCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHN0b3AoKSB7XG5cdFx0aWYgKCF0aGlzLmlzRW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLmlkKTtcblx0XHR0aGlzLmlkID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMuZnJhbWVJbmRleCA9IDA7XG5cdFx0dGhpcy5jbGVhcigpO1xuXHRcdGlmICh0aGlzLmhpZGVDdXJzb3IpIHtcblx0XHRcdGNsaUN1cnNvci5zaG93KHRoaXMuc3RyZWFtKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5kaXNjYXJkU3RkaW4gJiYgcHJvY2Vzcy5zdGRpbi5pc1RUWSAmJiB0aGlzLmlzRGlzY2FyZGluZ1N0ZGluKSB7XG5cdFx0XHRzdGRpbkRpc2NhcmRlci5zdG9wKCk7XG5cdFx0XHR0aGlzLmlzRGlzY2FyZGluZ1N0ZGluID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzdWNjZWVkKHRleHQpIHtcblx0XHRyZXR1cm4gdGhpcy5zdG9wQW5kUGVyc2lzdCh7c3ltYm9sOiBsb2dTeW1ib2xzLnN1Y2Nlc3MsIHRleHR9KTtcblx0fVxuXG5cdGZhaWwodGV4dCkge1xuXHRcdHJldHVybiB0aGlzLnN0b3BBbmRQZXJzaXN0KHtzeW1ib2w6IGxvZ1N5bWJvbHMuZXJyb3IsIHRleHR9KTtcblx0fVxuXG5cdHdhcm4odGV4dCkge1xuXHRcdHJldHVybiB0aGlzLnN0b3BBbmRQZXJzaXN0KHtzeW1ib2w6IGxvZ1N5bWJvbHMud2FybmluZywgdGV4dH0pO1xuXHR9XG5cblx0aW5mbyh0ZXh0KSB7XG5cdFx0cmV0dXJuIHRoaXMuc3RvcEFuZFBlcnNpc3Qoe3N5bWJvbDogbG9nU3ltYm9scy5pbmZvLCB0ZXh0fSk7XG5cdH1cblxuXHRzdG9wQW5kUGVyc2lzdChvcHRpb25zID0ge30pIHtcblx0XHRpZiAodGhpcy5pc1NpbGVudCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcHJlZml4VGV4dCA9IG9wdGlvbnMucHJlZml4VGV4dCB8fCB0aGlzLnByZWZpeFRleHQ7XG5cdFx0Y29uc3QgdGV4dCA9IG9wdGlvbnMudGV4dCB8fCB0aGlzLnRleHQ7XG5cdFx0Y29uc3QgZnVsbFRleHQgPSAodHlwZW9mIHRleHQgPT09ICdzdHJpbmcnKSA/ICcgJyArIHRleHQgOiAnJztcblxuXHRcdHRoaXMuc3RvcCgpO1xuXHRcdHRoaXMuc3RyZWFtLndyaXRlKGAke3RoaXMuZ2V0RnVsbFByZWZpeFRleHQocHJlZml4VGV4dCwgJyAnKX0ke29wdGlvbnMuc3ltYm9sIHx8ICcgJ30ke2Z1bGxUZXh0fVxcbmApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuY29uc3Qgb3JhRmFjdG9yeSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdHJldHVybiBuZXcgT3JhKG9wdGlvbnMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBvcmFGYWN0b3J5O1xuXG5tb2R1bGUuZXhwb3J0cy5wcm9taXNlID0gKGFjdGlvbiwgb3B0aW9ucykgPT4ge1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tdGhlblxuXHRpZiAodHlwZW9mIGFjdGlvbi50aGVuICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignUGFyYW1ldGVyIGBhY3Rpb25gIG11c3QgYmUgYSBQcm9taXNlJyk7XG5cdH1cblxuXHRjb25zdCBzcGlubmVyID0gbmV3IE9yYShvcHRpb25zKTtcblx0c3Bpbm5lci5zdGFydCgpO1xuXG5cdChhc3luYyAoKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IGFjdGlvbjtcblx0XHRcdHNwaW5uZXIuc3VjY2VlZCgpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0c3Bpbm5lci5mYWlsKCk7XG5cdFx0fVxuXHR9KSgpO1xuXG5cdHJldHVybiBzcGlubmVyO1xufTtcbiIsImltcG9ydCBhbnNpRXNjYXBlcyBmcm9tICdhbnNpLWVzY2FwZXMnO1xuXG4vKipcbiAqIE1vdmUgY3Vyc29yIGxlZnQgYnkgYHhgXG4gKiBAcGFyYW0gIHtSZWFkbGluZX0gcmwgLSBSZWFkbGluZSBpbnN0YW5jZVxuICogQHBhcmFtICB7TnVtYmVyfSAgIHggIC0gSG93IGZhciB0byBnbyBsZWZ0IChkZWZhdWx0IHRvIDEpXG4gKi9cblxuZXhwb3J0IGNvbnN0IGxlZnQgPSBmdW5jdGlvbiAocmwsIHgpIHtcbiAgcmwub3V0cHV0LndyaXRlKGFuc2lFc2NhcGVzLmN1cnNvckJhY2t3YXJkKHgpKTtcbn07XG5cbi8qKlxuICogTW92ZSBjdXJzb3IgcmlnaHQgYnkgYHhgXG4gKiBAcGFyYW0gIHtSZWFkbGluZX0gcmwgLSBSZWFkbGluZSBpbnN0YW5jZVxuICogQHBhcmFtICB7TnVtYmVyfSAgIHggIC0gSG93IGZhciB0byBnbyBsZWZ0IChkZWZhdWx0IHRvIDEpXG4gKi9cblxuZXhwb3J0IGNvbnN0IHJpZ2h0ID0gZnVuY3Rpb24gKHJsLCB4KSB7XG4gIHJsLm91dHB1dC53cml0ZShhbnNpRXNjYXBlcy5jdXJzb3JGb3J3YXJkKHgpKTtcbn07XG5cbi8qKlxuICogTW92ZSBjdXJzb3IgdXAgYnkgYHhgXG4gKiBAcGFyYW0gIHtSZWFkbGluZX0gcmwgLSBSZWFkbGluZSBpbnN0YW5jZVxuICogQHBhcmFtICB7TnVtYmVyfSAgIHggIC0gSG93IGZhciB0byBnbyB1cCAoZGVmYXVsdCB0byAxKVxuICovXG5cbmV4cG9ydCBjb25zdCB1cCA9IGZ1bmN0aW9uIChybCwgeCkge1xuICBybC5vdXRwdXQud3JpdGUoYW5zaUVzY2FwZXMuY3Vyc29yVXAoeCkpO1xufTtcblxuLyoqXG4gKiBNb3ZlIGN1cnNvciBkb3duIGJ5IGB4YFxuICogQHBhcmFtICB7UmVhZGxpbmV9IHJsIC0gUmVhZGxpbmUgaW5zdGFuY2VcbiAqIEBwYXJhbSAge051bWJlcn0gICB4ICAtIEhvdyBmYXIgdG8gZ28gZG93biAoZGVmYXVsdCB0byAxKVxuICovXG5cbmV4cG9ydCBjb25zdCBkb3duID0gZnVuY3Rpb24gKHJsLCB4KSB7XG4gIHJsLm91dHB1dC53cml0ZShhbnNpRXNjYXBlcy5jdXJzb3JEb3duKHgpKTtcbn07XG5cbi8qKlxuICogQ2xlYXIgY3VycmVudCBsaW5lXG4gKiBAcGFyYW0gIHtSZWFkbGluZX0gcmwgIC0gUmVhZGxpbmUgaW5zdGFuY2VcbiAqIEBwYXJhbSAge051bWJlcn0gICBsZW4gLSBudW1iZXIgb2YgbGluZSB0byBkZWxldGVcbiAqL1xuZXhwb3J0IGNvbnN0IGNsZWFyTGluZSA9IGZ1bmN0aW9uIChybCwgbGVuKSB7XG4gIHJsLm91dHB1dC53cml0ZShhbnNpRXNjYXBlcy5lcmFzZUxpbmVzKGxlbikpO1xufTtcbiIsImltcG9ydCBhbnNpRXNjYXBlcyBmcm9tICdhbnNpLWVzY2FwZXMnO1xuaW1wb3J0IGNsaVdpZHRoIGZyb20gJ2NsaS13aWR0aCc7XG5pbXBvcnQgd3JhcEFuc2kgZnJvbSAnd3JhcC1hbnNpJztcbmltcG9ydCBzdHJpcEFuc2kgZnJvbSAnc3RyaXAtYW5zaSc7XG5pbXBvcnQgc3RyaW5nV2lkdGggZnJvbSAnc3RyaW5nLXdpZHRoJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi9yZWFkbGluZS5qcyc7XG5cbmZ1bmN0aW9uIGhlaWdodChjb250ZW50KSB7XG4gIHJldHVybiBjb250ZW50LnNwbGl0KCdcXG4nKS5sZW5ndGg7XG59XG5cbi8qKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCAqL1xuZnVuY3Rpb24gbGFzdExpbmUoY29udGVudCkge1xuICByZXR1cm4gY29udGVudC5zcGxpdCgnXFxuJykucG9wKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjcmVlbk1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcihybCkge1xuICAgIC8vIFRoZXNlIHZhcmlhYmxlcyBhcmUga2VlcGluZyBpbmZvcm1hdGlvbiB0byBhbGxvdyBjb3JyZWN0IHByb21wdCByZS1yZW5kZXJpbmdcbiAgICB0aGlzLmhlaWdodCA9IDA7XG4gICAgdGhpcy5leHRyYUxpbmVzVW5kZXJQcm9tcHQgPSAwO1xuXG4gICAgdGhpcy5ybCA9IHJsO1xuICB9XG5cbiAgcmVuZGVyV2l0aFNwaW5uZXIoY29udGVudCwgYm90dG9tQ29udGVudCkge1xuICAgIGlmICh0aGlzLnNwaW5uZXJJZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnNwaW5uZXJJZCk7XG4gICAgfVxuXG4gICAgbGV0IHNwaW5uZXI7XG4gICAgbGV0IGNvbnRlbnRGdW5jO1xuICAgIGxldCBib3R0b21Db250ZW50RnVuYztcblxuICAgIGlmIChib3R0b21Db250ZW50KSB7XG4gICAgICBzcGlubmVyID0gb3JhKGJvdHRvbUNvbnRlbnQpO1xuICAgICAgY29udGVudEZ1bmMgPSAoKSA9PiBjb250ZW50O1xuICAgICAgYm90dG9tQ29udGVudEZ1bmMgPSAoKSA9PiBzcGlubmVyLmZyYW1lKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNwaW5uZXIgPSBvcmEoY29udGVudCk7XG4gICAgICBjb250ZW50RnVuYyA9ICgpID0+IHNwaW5uZXIuZnJhbWUoKTtcbiAgICAgIGJvdHRvbUNvbnRlbnRGdW5jID0gKCkgPT4gJyc7XG4gICAgfVxuXG4gICAgdGhpcy5zcGlubmVySWQgPSBzZXRJbnRlcnZhbChcbiAgICAgICgpID0+IHRoaXMucmVuZGVyKGNvbnRlbnRGdW5jKCksIGJvdHRvbUNvbnRlbnRGdW5jKCksIHRydWUpLFxuICAgICAgc3Bpbm5lci5pbnRlcnZhbCxcbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKGNvbnRlbnQsIGJvdHRvbUNvbnRlbnQsIHNwaW5uaW5nID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5zcGlubmVySWQgJiYgIXNwaW5uaW5nKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuc3Bpbm5lcklkKTtcbiAgICB9XG5cbiAgICB0aGlzLnJsLm91dHB1dC51bm11dGUoKTtcbiAgICB0aGlzLmNsZWFuKHRoaXMuZXh0cmFMaW5lc1VuZGVyUHJvbXB0KTtcblxuICAgIC8qKlxuICAgICAqIFdyaXRlIG1lc3NhZ2UgdG8gc2NyZWVuIGFuZCBzZXRQcm9tcHQgdG8gY29udHJvbCBiYWNrc3BhY2VcbiAgICAgKi9cblxuICAgIGNvbnN0IHByb21wdExpbmUgPSBsYXN0TGluZShjb250ZW50KTtcbiAgICBjb25zdCByYXdQcm9tcHRMaW5lID0gc3RyaXBBbnNpKHByb21wdExpbmUpO1xuXG4gICAgLy8gUmVtb3ZlIHRoZSBybC5saW5lIGZyb20gb3VyIHByb21wdC4gV2UgY2FuJ3QgcmVseSBvbiB0aGUgY29udGVudCBvZlxuICAgIC8vIHJsLmxpbmUgKG1haW5seSBiZWNhdXNlIG9mIHRoZSBwYXNzd29yZCBwcm9tcHQpLCBzbyBqdXN0IHJlbHkgb24gaXQnc1xuICAgIC8vIGxlbmd0aC5cbiAgICBsZXQgcHJvbXB0ID0gcmF3UHJvbXB0TGluZTtcbiAgICBpZiAodGhpcy5ybC5saW5lLmxlbmd0aCA+IDApIHtcbiAgICAgIHByb21wdCA9IHByb21wdC5zbGljZSgwLCAtdGhpcy5ybC5saW5lLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgdGhpcy5ybC5zZXRQcm9tcHQocHJvbXB0KTtcblxuICAgIC8vIFNldFByb21wdCB3aWxsIGNoYW5nZSBjdXJzb3IgcG9zaXRpb24sIG5vdyB3ZSBjYW4gZ2V0IGNvcnJlY3QgdmFsdWVcbiAgICBjb25zdCBjdXJzb3JQb3MgPSB0aGlzLnJsLl9nZXRDdXJzb3JQb3MoKTtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMubm9ybWFsaXplZENsaVdpZHRoKCk7XG5cbiAgICBjb250ZW50ID0gdGhpcy5mb3JjZUxpbmVSZXR1cm4oY29udGVudCwgd2lkdGgpO1xuICAgIGJvdHRvbUNvbnRlbnQgJiY9IHRoaXMuZm9yY2VMaW5lUmV0dXJuKGJvdHRvbUNvbnRlbnQsIHdpZHRoKTtcblxuICAgIC8vIE1hbnVhbGx5IGluc2VydCBhbiBleHRyYSBsaW5lIGlmIHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUuXG4gICAgLy8gVGhpcyBwcmV2ZW50IHRoZSBjdXJzb3IgZnJvbSBhcHBlYXJpbmcgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGVcbiAgICAvLyBjdXJyZW50IGxpbmUuXG4gICAgaWYgKHJhd1Byb21wdExpbmUubGVuZ3RoICUgd2lkdGggPT09IDApIHtcbiAgICAgIGNvbnRlbnQgKz0gJ1xcbic7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbENvbnRlbnQgPSBjb250ZW50ICsgKGJvdHRvbUNvbnRlbnQgPyAnXFxuJyArIGJvdHRvbUNvbnRlbnQgOiAnJyk7XG4gICAgdGhpcy5ybC5vdXRwdXQud3JpdGUoZnVsbENvbnRlbnQpO1xuXG4gICAgLyoqXG4gICAgICogUmUtYWRqdXN0IHRoZSBjdXJzb3IgYXQgdGhlIGNvcnJlY3QgcG9zaXRpb24uXG4gICAgICovXG5cbiAgICAvLyBXZSBuZWVkIHRvIGNvbnNpZGVyIHBhcnRzIG9mIHRoZSBwcm9tcHQgdW5kZXIgdGhlIGN1cnNvciBhcyBwYXJ0IG9mIHRoZSBib3R0b21cbiAgICAvLyBjb250ZW50IGluIG9yZGVyIHRvIGNvcnJlY3RseSBjbGVhbnVwIGFuZCByZS1yZW5kZXIuXG4gICAgY29uc3QgcHJvbXB0TGluZVVwRGlmZiA9IE1hdGguZmxvb3IocmF3UHJvbXB0TGluZS5sZW5ndGggLyB3aWR0aCkgLSBjdXJzb3JQb3Mucm93cztcbiAgICBjb25zdCBib3R0b21Db250ZW50SGVpZ2h0ID1cbiAgICAgIHByb21wdExpbmVVcERpZmYgKyAoYm90dG9tQ29udGVudCA/IGhlaWdodChib3R0b21Db250ZW50KSA6IDApO1xuICAgIGlmIChib3R0b21Db250ZW50SGVpZ2h0ID4gMCkge1xuICAgICAgdXRpbC51cCh0aGlzLnJsLCBib3R0b21Db250ZW50SGVpZ2h0KTtcbiAgICB9XG5cbiAgICAvLyBSZXNldCBjdXJzb3IgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZVxuICAgIHV0aWwubGVmdCh0aGlzLnJsLCBzdHJpbmdXaWR0aChsYXN0TGluZShmdWxsQ29udGVudCkpKTtcblxuICAgIC8vIEFkanVzdCBjdXJzb3Igb24gdGhlIHJpZ2h0XG4gICAgaWYgKGN1cnNvclBvcy5jb2xzID4gMCkge1xuICAgICAgdXRpbC5yaWdodCh0aGlzLnJsLCBjdXJzb3JQb3MuY29scyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHVwIHN0YXRlIGZvciBuZXh0IHJlLXJlbmRlcmluZ1xuICAgICAqL1xuICAgIHRoaXMuZXh0cmFMaW5lc1VuZGVyUHJvbXB0ID0gYm90dG9tQ29udGVudEhlaWdodDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodChmdWxsQ29udGVudCk7XG5cbiAgICB0aGlzLnJsLm91dHB1dC5tdXRlKCk7XG4gIH1cblxuICBjbGVhbihleHRyYUxpbmVzKSB7XG4gICAgaWYgKGV4dHJhTGluZXMgPiAwKSB7XG4gICAgICB1dGlsLmRvd24odGhpcy5ybCwgZXh0cmFMaW5lcyk7XG4gICAgfVxuXG4gICAgdXRpbC5jbGVhckxpbmUodGhpcy5ybCwgdGhpcy5oZWlnaHQpO1xuICB9XG5cbiAgZG9uZSgpIHtcbiAgICB0aGlzLnJsLnNldFByb21wdCgnJyk7XG4gICAgdGhpcy5ybC5vdXRwdXQudW5tdXRlKCk7XG4gICAgdGhpcy5ybC5vdXRwdXQud3JpdGUoYFxcbiR7YW5zaUVzY2FwZXMuY3Vyc29yU2hvd31gKTtcbiAgfVxuXG4gIHJlbGVhc2VDdXJzb3IoKSB7XG4gICAgaWYgKHRoaXMuZXh0cmFMaW5lc1VuZGVyUHJvbXB0ID4gMCkge1xuICAgICAgdXRpbC5kb3duKHRoaXMucmwsIHRoaXMuZXh0cmFMaW5lc1VuZGVyUHJvbXB0KTtcbiAgICB9XG4gIH1cblxuICBub3JtYWxpemVkQ2xpV2lkdGgoKSB7XG4gICAgY29uc3Qgd2lkdGggPSBjbGlXaWR0aCh7XG4gICAgICBkZWZhdWx0V2lkdGg6IDgwLFxuICAgICAgb3V0cHV0OiB0aGlzLnJsLm91dHB1dCxcbiAgICB9KTtcbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gbGluZXNcbiAgICovXG4gIGJyZWFrTGluZXMobGluZXMsIHdpZHRoID0gdGhpcy5ub3JtYWxpemVkQ2xpV2lkdGgoKSkge1xuICAgIC8vIEJyZWFrIGxpbmVzIHdobydyZSBsb25nZXIgdGhhbiB0aGUgY2xpIHdpZHRoIHNvIHdlIGNhbiBub3JtYWxpemUgdGhlIG5hdHVyYWwgbGluZVxuICAgIC8vIHJldHVybnMgYmVoYXZpb3IgYWNyb3NzIHRlcm1pbmFscy5cbiAgICAvLyByZTogdHJpbTogZmFsc2U7IGJ5IGRlZmF1bHQsIGB3cmFwLWFuc2lgIHRyaW1zIHdoaXRlc3BhY2UsIHdoaWNoXG4gICAgLy8gaXMgbm90IHdoYXQgd2Ugd2FudC5cbiAgICAvLyByZTogaGFyZDogdHJ1ZTsgYnkgZGVmYXVsdCcsIGB3cmFwLWFuc2lgIGRvZXMgc29mdCB3cmFwcGluZ1xuICAgIHJldHVybiBsaW5lcy5tYXAoKGxpbmUpID0+XG4gICAgICB3cmFwQW5zaShsaW5lLCB3aWR0aCwgeyB0cmltOiBmYWxzZSwgaGFyZDogdHJ1ZSB9KS5zcGxpdCgnXFxuJyksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudFxuICAgKi9cbiAgZm9yY2VMaW5lUmV0dXJuKGNvbnRlbnQsIHdpZHRoID0gdGhpcy5ub3JtYWxpemVkQ2xpV2lkdGgoKSkge1xuICAgIHJldHVybiB0aGlzLmJyZWFrTGluZXMoY29udGVudC5zcGxpdCgnXFxuJyksIHdpZHRoKS5mbGF0KCkuam9pbignXFxuJyk7XG4gIH1cbn1cbiIsIi8qKlxuICogQmFzZSBwcm9tcHQgaW1wbGVtZW50YXRpb25cbiAqIFNob3VsZCBiZSBleHRlbmRlZCBieSBwcm9tcHQgdHlwZXMuXG4gKi9cbmltcG9ydCBjb2xvcnMgZnJvbSAneW9jdG9jb2xvcnMtY2pzJztcbmltcG9ydCBydW5Bc3luYyBmcm9tICdydW4tYXN5bmMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtZXJnZU1hcCwgc2hhcmUsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IENob2ljZXMgZnJvbSAnLi4vb2JqZWN0cy9jaG9pY2VzLmpzJztcbmltcG9ydCBTY3JlZW5NYW5hZ2VyIGZyb20gJy4uL3V0aWxzL3NjcmVlbi1tYW5hZ2VyLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvbXB0IHtcbiAgY29uc3RydWN0b3IocXVlc3Rpb24sIHJsLCBhbnN3ZXJzKSB7XG4gICAgLy8gU2V0dXAgaW5zdGFuY2UgZGVmYXVsdHMgcHJvcGVydHlcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIHtcbiAgICAgIGFuc3dlcnMsXG4gICAgICBzdGF0dXM6ICdwZW5kaW5nJyxcbiAgICB9KTtcblxuICAgIC8vIFNldCBkZWZhdWx0cyBwcm9tcHQgb3B0aW9uc1xuICAgIHRoaXMub3B0ID0ge1xuICAgICAgdmFsaWRhdGU6ICgpID0+IHRydWUsXG4gICAgICB2YWxpZGF0aW5nVGV4dDogJycsXG4gICAgICBmaWx0ZXI6ICh2YWwpID0+IHZhbCxcbiAgICAgIGZpbHRlcmluZ1RleHQ6ICcnLFxuICAgICAgd2hlbjogKCkgPT4gdHJ1ZSxcbiAgICAgIHN1ZmZpeDogJycsXG4gICAgICBwcmVmaXg6IGNvbG9ycy5ncmVlbignPycpLFxuICAgICAgdHJhbnNmb3JtZXI6ICh2YWwpID0+IHZhbCxcbiAgICAgIC4uLnF1ZXN0aW9uLFxuICAgIH07XG5cbiAgICAvLyBNYWtlIHN1cmUgbmFtZSBpcyBwcmVzZW50XG4gICAgaWYgKCF0aGlzLm9wdC5uYW1lKSB7XG4gICAgICB0aGlzLnRocm93UGFyYW1FcnJvcignbmFtZScpO1xuICAgIH1cblxuICAgIC8vIFNldCBkZWZhdWx0IG1lc3NhZ2UgaWYgbm8gbWVzc2FnZSBkZWZpbmVkXG4gICAgdGhpcy5vcHQubWVzc2FnZSB8fD0gdGhpcy5vcHQubmFtZSArICc6JztcblxuICAgIC8vIE5vcm1hbGl6ZSBjaG9pY2VzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5vcHQuY2hvaWNlcykpIHtcbiAgICAgIHRoaXMub3B0LmNob2ljZXMgPSBuZXcgQ2hvaWNlcyh0aGlzLm9wdC5jaG9pY2VzLCBhbnN3ZXJzKTtcbiAgICB9XG5cbiAgICB0aGlzLnJsID0gcmw7XG4gICAgdGhpcy5zY3JlZW4gPSBuZXcgU2NyZWVuTWFuYWdlcih0aGlzLnJsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0aGUgSW5xdWlyeSBzZXNzaW9uIGFuZCBtYW5hZ2Ugb3V0cHV0IHZhbHVlIGZpbHRlcmluZ1xuICAgKiBAcmV0dXJuIHtQcm9taXNlfVxuICAgKi9cblxuICBydW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX3J1bihcbiAgICAgICAgKHZhbHVlKSA9PiByZXNvbHZlKHZhbHVlKSxcbiAgICAgICAgKGVycm9yKSA9PiByZWplY3QoZXJyb3IpLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIERlZmF1bHQgbm9vcCAodGhpcyBvbmUgc2hvdWxkIGJlIG92ZXJ3cml0dGVuIGluIHByb21wdHMpXG4gIF9ydW4oY2IpIHtcbiAgICBjYigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93IGFuIGVycm9yIHRlbGxpbmcgYSByZXF1aXJlZCBwYXJhbWV0ZXIgaXMgbWlzc2luZ1xuICAgKiBAcGFyYW0gIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgbWlzc2luZyBwYXJhbVxuICAgKiBAcmV0dXJuIHtUaHJvdyBFcnJvcn1cbiAgICovXG5cbiAgdGhyb3dQYXJhbUVycm9yKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHByb3ZpZGUgYSBgJyArIG5hbWUgKyAnYCBwYXJhbWV0ZXInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgVUkgY2xvc2VzLiBPdmVycmlkZSB0byBkbyBhbnkgc3BlY2lmaWMgY2xlYW51cCBuZWNlc3NhcnlcbiAgICovXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuc2NyZWVuLnJlbGVhc2VDdXJzb3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gdGhlIHByb3ZpZGVkIHZhbGlkYXRpb24gbWV0aG9kIGVhY2ggdGltZSBhIHN1Ym1pdCBldmVudCBvY2N1ci5cbiAgICogQHBhcmFtICB7UnguT2JzZXJ2YWJsZX0gc3VibWl0IC0gc3VibWl0IGV2ZW50IGZsb3dcbiAgICogQHJldHVybiB7T2JqZWN0fSAgICAgICAgT2JqZWN0IGNvbnRhaW5pbmcgdHdvIG9ic2VydmFibGVzOiBgc3VjY2Vzc2AgYW5kIGBlcnJvcmBcbiAgICovXG4gIGhhbmRsZVN1Ym1pdEV2ZW50cyhzdWJtaXQpIHtcbiAgICBjb25zdCB2YWxpZGF0ZSA9IHJ1bkFzeW5jKHRoaXMub3B0LnZhbGlkYXRlKTtcbiAgICBjb25zdCBhc3luY0ZpbHRlciA9IHJ1bkFzeW5jKHRoaXMub3B0LmZpbHRlcik7XG4gICAgY29uc3QgdmFsaWRhdGlvbiA9IHN1Ym1pdC5waXBlKFxuICAgICAgbWVyZ2VNYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgIHRoaXMuc3RhcnRTcGlubmVyKHZhbHVlLCB0aGlzLm9wdC5maWx0ZXJpbmdUZXh0KTtcbiAgICAgICAgcmV0dXJuIGFzeW5jRmlsdGVyKHZhbHVlLCB0aGlzLmFuc3dlcnMpLnRoZW4oXG4gICAgICAgICAgKGZpbHRlcmVkVmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRTcGlubmVyKGZpbHRlcmVkVmFsdWUsIHRoaXMub3B0LnZhbGlkYXRpbmdUZXh0KTtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZShmaWx0ZXJlZFZhbHVlLCB0aGlzLmFuc3dlcnMpLnRoZW4oXG4gICAgICAgICAgICAgIChpc1ZhbGlkKSA9PiAoeyBpc1ZhbGlkLCB2YWx1ZTogZmlsdGVyZWRWYWx1ZSB9KSxcbiAgICAgICAgICAgICAgKGVycm9yXykgPT4gKHsgaXNWYWxpZDogZXJyb3JfLCB2YWx1ZTogZmlsdGVyZWRWYWx1ZSB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3JfKSA9PiAoeyBpc1ZhbGlkOiBlcnJvcl8gfSksXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlKCksXG4gICAgKTtcblxuICAgIGNvbnN0IHN1Y2Nlc3MgPSB2YWxpZGF0aW9uLnBpcGUoXG4gICAgICBmaWx0ZXIoKHN0YXRlKSA9PiBzdGF0ZS5pc1ZhbGlkID09PSB0cnVlKSxcbiAgICAgIHRha2UoMSksXG4gICAgKTtcbiAgICBjb25zdCBlcnJvciA9IHZhbGlkYXRpb24ucGlwZShcbiAgICAgIGZpbHRlcigoc3RhdGUpID0+IHN0YXRlLmlzVmFsaWQgIT09IHRydWUpLFxuICAgICAgdGFrZVVudGlsKHN1Y2Nlc3MpLFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzcyxcbiAgICAgIGVycm9yLFxuICAgIH07XG4gIH1cblxuICBzdGFydFNwaW5uZXIodmFsdWUsIGJvdHRvbUNvbnRlbnQpIHtcbiAgICB2YWx1ZSA9IHRoaXMuZ2V0U3Bpbm5pbmdWYWx1ZSh2YWx1ZSk7XG4gICAgLy8gSWYgdGhlIHF1ZXN0aW9uIHdpbGwgc3BpbiwgY3V0IG9mZiB0aGUgcHJlZml4IChmb3IgbGF5b3V0IHB1cnBvc2VzKVxuICAgIGNvbnN0IGNvbnRlbnQgPSBib3R0b21Db250ZW50XG4gICAgICA/IHRoaXMuZ2V0UXVlc3Rpb24oKSArIHZhbHVlXG4gICAgICA6IHRoaXMuZ2V0UXVlc3Rpb24oKS5zbGljZSh0aGlzLm9wdC5wcmVmaXgubGVuZ3RoICsgMSkgKyB2YWx1ZTtcblxuICAgIHRoaXMuc2NyZWVuLnJlbmRlcldpdGhTcGlubmVyKGNvbnRlbnQsIGJvdHRvbUNvbnRlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IG92ZXJyaWRlLCBlLmcuIGZvciBwYXNzd29yZCBwcm9tcHRzXG4gICAqIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL1NCb3Vkcmlhcy9JbnF1aXJlci5qcy9pc3N1ZXMvMTAyMlxuICAgKlxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IHZhbHVlIHRvIGRpc3BsYXkgd2hpbGUgc3Bpbm5pbmdcbiAgICovXG4gIGdldFNwaW5uaW5nVmFsdWUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgdGhlIHByb21wdCBxdWVzdGlvbiBzdHJpbmdcbiAgICogQHJldHVybiB7U3RyaW5nfSBwcm9tcHQgcXVlc3Rpb24gc3RyaW5nXG4gICAqL1xuICBnZXRRdWVzdGlvbigpIHtcbiAgICBsZXQgbWVzc2FnZSA9XG4gICAgICAodGhpcy5vcHQucHJlZml4ID8gdGhpcy5vcHQucHJlZml4ICsgJyAnIDogJycpICtcbiAgICAgIGNvbG9ycy5ib2xkKHRoaXMub3B0Lm1lc3NhZ2UpICtcbiAgICAgIHRoaXMub3B0LnN1ZmZpeCArXG4gICAgICBjb2xvcnMucmVzZXQoJyAnKTtcblxuICAgIC8vIEFwcGVuZCB0aGUgZGVmYXVsdCBpZiBhdmFpbGFibGUsIGFuZCBpZiBxdWVzdGlvbiBpc24ndCB0b3VjaGVkL2Fuc3dlcmVkXG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHQuZGVmYXVsdCAhPSBudWxsICYmXG4gICAgICB0aGlzLnN0YXR1cyAhPT0gJ3RvdWNoZWQnICYmXG4gICAgICB0aGlzLnN0YXR1cyAhPT0gJ2Fuc3dlcmVkJ1xuICAgICkge1xuICAgICAgLy8gSWYgZGVmYXVsdCBwYXNzd29yZCBpcyBzdXBwbGllZCwgaGlkZSBpdFxuICAgICAgbWVzc2FnZSArPVxuICAgICAgICB0aGlzLm9wdC50eXBlID09PSAncGFzc3dvcmQnXG4gICAgICAgICAgPyBjb2xvcnMuaXRhbGljKGNvbG9ycy5kaW0oJ1toaWRkZW5dICcpKVxuICAgICAgICAgIDogY29sb3JzLmRpbSgnKCcgKyB0aGlzLm9wdC5kZWZhdWx0ICsgJykgJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH1cbn1cbiIsIi8qKlxuICogYGxpc3RgIHR5cGUgcHJvbXB0XG4gKi9cblxuaW1wb3J0IGFuc2lFc2NhcGVzIGZyb20gJ2Fuc2ktZXNjYXBlcyc7XG5pbXBvcnQgY29sb3JzIGZyb20gJ3lvY3RvY29sb3JzLWNqcyc7XG5pbXBvcnQgZmlndXJlcyBmcm9tICdAaW5xdWlyZXIvZmlndXJlcyc7XG5pbXBvcnQgcnVuQXN5bmMgZnJvbSAncnVuLWFzeW5jJztcbmltcG9ydCB7IGZsYXRNYXAsIG1hcCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgb2JzZXJ2ZSBmcm9tICcuLi91dGlscy9ldmVudHMuanMnO1xuaW1wb3J0IFBhZ2luYXRvciBmcm9tICcuLi91dGlscy9wYWdpbmF0b3IuanMnO1xuaW1wb3J0IGluY3JlbWVudExpc3RJbmRleCBmcm9tICcuLi91dGlscy9pbmNyZW1lbnRMaXN0SW5kZXguanMnO1xuaW1wb3J0IEJhc2UgZnJvbSAnLi9iYXNlLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlzdFByb21wdCBleHRlbmRzIEJhc2Uge1xuICBjb25zdHJ1Y3RvcihxdWVzdGlvbnMsIHJsLCBhbnN3ZXJzKSB7XG4gICAgc3VwZXIocXVlc3Rpb25zLCBybCwgYW5zd2Vycyk7XG5cbiAgICBpZiAoIXRoaXMub3B0LmNob2ljZXMpIHtcbiAgICAgIHRoaXMudGhyb3dQYXJhbUVycm9yKCdjaG9pY2VzJyk7XG4gICAgfVxuXG4gICAgdGhpcy5maXJzdFJlbmRlciA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZCA9IDA7XG5cbiAgICBjb25zdCBkZWYgPSB0aGlzLm9wdC5kZWZhdWx0O1xuXG4gICAgLy8gSWYgZGVmIGlzIGEgTnVtYmVyLCB0aGVuIHVzZSBhcyBpbmRleC4gT3RoZXJ3aXNlLCBjaGVjayBmb3IgdmFsdWUuXG4gICAgaWYgKHR5cGVvZiBkZWYgPT09ICdudW1iZXInICYmIGRlZiA+PSAwICYmIGRlZiA8IHRoaXMub3B0LmNob2ljZXMucmVhbExlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZCA9IGRlZjtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZWYgIT09ICdudW1iZXInICYmIGRlZiAhPSBudWxsKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMub3B0LmNob2ljZXMucmVhbENob2ljZXMuZmluZEluZGV4KCh7IHZhbHVlIH0pID0+IHZhbHVlID09PSBkZWYpO1xuICAgICAgdGhpcy5zZWxlY3RlZCA9IE1hdGgubWF4KGluZGV4LCAwKTtcbiAgICB9XG5cbiAgICAvLyBNYWtlIHN1cmUgbm8gZGVmYXVsdCBpcyBzZXQgKHNvIGl0IHdvbid0IGJlIHByaW50ZWQpXG4gICAgdGhpcy5vcHQuZGVmYXVsdCA9IG51bGw7XG5cbiAgICBjb25zdCBzaG91bGRMb29wID0gdGhpcy5vcHQubG9vcCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHRoaXMub3B0Lmxvb3A7XG4gICAgdGhpcy5wYWdpbmF0b3IgPSBuZXcgUGFnaW5hdG9yKHRoaXMuc2NyZWVuLCB7IGlzSW5maW5pdGU6IHNob3VsZExvb3AgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgdGhlIElucXVpcnkgc2Vzc2lvblxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2IgICAgICBDYWxsYmFjayB3aGVuIHByb21wdCBpcyBkb25lXG4gICAqIEByZXR1cm4ge3RoaXN9XG4gICAqL1xuXG4gIF9ydW4oY2IpIHtcbiAgICB0aGlzLmRvbmUgPSBjYjtcblxuICAgIGNvbnN0IGV2ZW50cyA9IG9ic2VydmUodGhpcy5ybCk7XG4gICAgZXZlbnRzLm5vcm1hbGl6ZWRVcEtleS5waXBlKHRha2VVbnRpbChldmVudHMubGluZSkpLmZvckVhY2godGhpcy5vblVwS2V5LmJpbmQodGhpcykpO1xuICAgIGV2ZW50cy5ub3JtYWxpemVkRG93bktleVxuICAgICAgLnBpcGUodGFrZVVudGlsKGV2ZW50cy5saW5lKSlcbiAgICAgIC5mb3JFYWNoKHRoaXMub25Eb3duS2V5LmJpbmQodGhpcykpO1xuICAgIGV2ZW50cy5udW1iZXJLZXkucGlwZSh0YWtlVW50aWwoZXZlbnRzLmxpbmUpKS5mb3JFYWNoKHRoaXMub25OdW1iZXJLZXkuYmluZCh0aGlzKSk7XG4gICAgZXZlbnRzLmxpbmVcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBtYXAodGhpcy5nZXRDdXJyZW50VmFsdWUuYmluZCh0aGlzKSksXG4gICAgICAgIGZsYXRNYXAoKHZhbHVlKSA9PlxuICAgICAgICAgIHJ1bkFzeW5jKHRoaXMub3B0LmZpbHRlcikodmFsdWUsIHRoaXMuYW5zd2VycykuY2F0Y2goKGVycm9yKSA9PiBlcnJvciksXG4gICAgICAgICksXG4gICAgICApXG4gICAgICAuZm9yRWFjaCh0aGlzLm9uU3VibWl0LmJpbmQodGhpcykpO1xuXG4gICAgLy8gSW5pdCB0aGUgcHJvbXB0XG4gICAgdGhpcy5yZW5kZXIoKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgcHJvbXB0IHRvIHNjcmVlblxuICAgKiBAcmV0dXJuIHtMaXN0UHJvbXB0fSBzZWxmXG4gICAqL1xuXG4gIHJlbmRlcigpIHtcbiAgICAvLyBSZW5kZXIgcXVlc3Rpb25cbiAgICBsZXQgbWVzc2FnZSA9IHRoaXMuZ2V0UXVlc3Rpb24oKTtcblxuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB7XG4gICAgICBtZXNzYWdlICs9IGNvbG9ycy5kaW0oJyhVc2UgYXJyb3cga2V5cyknKTtcbiAgICB9XG5cbiAgICAvLyBSZW5kZXIgY2hvaWNlcyBvciBhbnN3ZXIgZGVwZW5kaW5nIG9uIHRoZSBzdGF0ZVxuICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gJ2Fuc3dlcmVkJykge1xuICAgICAgbWVzc2FnZSArPSBjb2xvcnMuY3lhbih0aGlzLm9wdC5jaG9pY2VzLmdldENob2ljZSh0aGlzLnNlbGVjdGVkKS5zaG9ydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNob2ljZXNTdHIgPSBsaXN0UmVuZGVyKHRoaXMub3B0LmNob2ljZXMsIHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgY29uc3QgaW5kZXhQb3NpdGlvbiA9IHRoaXMub3B0LmNob2ljZXMuaW5kZXhPZihcbiAgICAgICAgdGhpcy5vcHQuY2hvaWNlcy5nZXRDaG9pY2UodGhpcy5zZWxlY3RlZCksXG4gICAgICApO1xuICAgICAgY29uc3QgcmVhbEluZGV4UG9zaXRpb24gPVxuICAgICAgICB0aGlzLm9wdC5jaG9pY2VzLnJlZHVjZSgoYWNjLCB2YWx1ZSwgaSkgPT4ge1xuICAgICAgICAgIC8vIERvbnQgY291bnQgbGluZXMgcGFzdCB0aGUgY2hvaWNlIHdlIGFyZSBsb29raW5nIGF0XG4gICAgICAgICAgaWYgKGkgPiBpbmRleFBvc2l0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBBZGQgbGluZSBpZiBpdCdzIGEgc2VwYXJhdG9yXG4gICAgICAgICAgaWYgKHZhbHVlLnR5cGUgPT09ICdzZXBhcmF0b3InKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjICsgMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgbCA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgLy8gTm9uLXN0cmluZ3MgdGFrZSB1cCBvbmUgbGluZVxuICAgICAgICAgIGlmICh0eXBlb2YgbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBhY2MgKyAxO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENhbGN1bGF0ZSBsaW5lcyB0YWtlbiB1cCBieSBzdHJpbmdcbiAgICAgICAgICBsID0gbC5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgcmV0dXJuIGFjYyArIGwubGVuZ3RoO1xuICAgICAgICB9LCAwKSAtIDE7XG4gICAgICBtZXNzYWdlICs9XG4gICAgICAgICdcXG4nICsgdGhpcy5wYWdpbmF0b3IucGFnaW5hdGUoY2hvaWNlc1N0ciwgcmVhbEluZGV4UG9zaXRpb24sIHRoaXMub3B0LnBhZ2VTaXplKTtcbiAgICB9XG5cbiAgICBtZXNzYWdlICs9IGFuc2lFc2NhcGVzLmN1cnNvckhpZGU7XG4gICAgdGhpcy5maXJzdFJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5zY3JlZW4ucmVuZGVyKG1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gdXNlciBwcmVzcyBgZW50ZXJgIGtleVxuICAgKi9cblxuICBvblN1Ym1pdCh2YWx1ZSkge1xuICAgIHRoaXMuc3RhdHVzID0gJ2Fuc3dlcmVkJztcblxuICAgIC8vIFJlcmVuZGVyIHByb21wdFxuICAgIHRoaXMucmVuZGVyKCk7XG5cbiAgICB0aGlzLnNjcmVlbi5kb25lKCk7XG4gICAgdGhpcy5kb25lKHZhbHVlKTtcbiAgfVxuXG4gIGdldEN1cnJlbnRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHQuY2hvaWNlcy5nZXRDaG9pY2UodGhpcy5zZWxlY3RlZCkudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB1c2VyIHByZXNzIGEga2V5XG4gICAqL1xuICBvblVwS2V5KCkge1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBpbmNyZW1lbnRMaXN0SW5kZXgodGhpcy5zZWxlY3RlZCwgJ3VwJywgdGhpcy5vcHQpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBvbkRvd25LZXkoKSB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IGluY3JlbWVudExpc3RJbmRleCh0aGlzLnNlbGVjdGVkLCAnZG93bicsIHRoaXMub3B0KTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgb25OdW1iZXJLZXkoaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgPD0gdGhpcy5vcHQuY2hvaWNlcy5yZWFsTGVuZ3RoKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkID0gaW5wdXQgLSAxO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBGdW5jdGlvbiBmb3IgcmVuZGVyaW5nIGxpc3QgY2hvaWNlc1xuICogQHBhcmFtICB7TnVtYmVyfSBwb2ludGVyIFBvc2l0aW9uIG9mIHRoZSBwb2ludGVyXG4gKiBAcmV0dXJuIHtTdHJpbmd9ICAgICAgICAgUmVuZGVyZWQgY29udGVudFxuICovXG5mdW5jdGlvbiBsaXN0UmVuZGVyKGNob2ljZXMsIHBvaW50ZXIpIHtcbiAgbGV0IG91dHB1dCA9ICcnO1xuICBsZXQgc2VwYXJhdG9yT2Zmc2V0ID0gMDtcblxuICBjaG9pY2VzLmZvckVhY2goKGNob2ljZSwgaSkgPT4ge1xuICAgIGlmIChjaG9pY2UudHlwZSA9PT0gJ3NlcGFyYXRvcicpIHtcbiAgICAgIHNlcGFyYXRvck9mZnNldCsrO1xuICAgICAgb3V0cHV0ICs9ICcgICcgKyBjaG9pY2UgKyAnXFxuJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2hvaWNlLmRpc2FibGVkKSB7XG4gICAgICBzZXBhcmF0b3JPZmZzZXQrKztcbiAgICAgIG91dHB1dCArPSAnICAtICcgKyBjaG9pY2UubmFtZTtcbiAgICAgIG91dHB1dCArPSBgICgke1xuICAgICAgICB0eXBlb2YgY2hvaWNlLmRpc2FibGVkID09PSAnc3RyaW5nJyA/IGNob2ljZS5kaXNhYmxlZCA6ICdEaXNhYmxlZCdcbiAgICAgIH0pYDtcbiAgICAgIG91dHB1dCArPSAnXFxuJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc1NlbGVjdGVkID0gaSAtIHNlcGFyYXRvck9mZnNldCA9PT0gcG9pbnRlcjtcbiAgICBsZXQgbGluZSA9IChpc1NlbGVjdGVkID8gZmlndXJlcy5wb2ludGVyICsgJyAnIDogJyAgJykgKyBjaG9pY2UubmFtZTtcbiAgICBpZiAoaXNTZWxlY3RlZCkge1xuICAgICAgbGluZSA9IGNvbG9ycy5jeWFuKGxpbmUpO1xuICAgIH1cblxuICAgIG91dHB1dCArPSBsaW5lICsgJyBcXG4nO1xuICB9KTtcblxuICByZXR1cm4gb3V0cHV0LnJlcGxhY2VBbGwoL1xcbiQvZywgJycpO1xufVxuIiwiLyoqXG4gKiBgaW5wdXRgIHR5cGUgcHJvbXB0XG4gKi9cblxuaW1wb3J0IGNvbG9ycyBmcm9tICd5b2N0b2NvbG9ycy1janMnO1xuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCBvYnNlcnZlIGZyb20gJy4uL3V0aWxzL2V2ZW50cy5qcyc7XG5pbXBvcnQgQmFzZSBmcm9tICcuL2Jhc2UuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnB1dFByb21wdCBleHRlbmRzIEJhc2Uge1xuICAvKipcbiAgICogU3RhcnQgdGhlIElucXVpcnkgc2Vzc2lvblxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2IgICAgICBDYWxsYmFjayB3aGVuIHByb21wdCBpcyBkb25lXG4gICAqIEByZXR1cm4ge3RoaXN9XG4gICAqL1xuXG4gIF9ydW4oY2IpIHtcbiAgICB0aGlzLmRvbmUgPSBjYjtcblxuICAgIC8vIE9uY2UgdXNlciBjb25maXJtIChlbnRlciBrZXkpXG4gICAgY29uc3QgZXZlbnRzID0gb2JzZXJ2ZSh0aGlzLnJsKTtcbiAgICBjb25zdCBzdWJtaXQgPSBldmVudHMubGluZS5waXBlKG1hcCh0aGlzLmZpbHRlcklucHV0LmJpbmQodGhpcykpKTtcblxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0aGlzLmhhbmRsZVN1Ym1pdEV2ZW50cyhzdWJtaXQpO1xuICAgIHZhbGlkYXRpb24uc3VjY2Vzcy5mb3JFYWNoKHRoaXMub25FbmQuYmluZCh0aGlzKSk7XG4gICAgdmFsaWRhdGlvbi5lcnJvci5mb3JFYWNoKHRoaXMub25FcnJvci5iaW5kKHRoaXMpKTtcblxuICAgIGV2ZW50cy5rZXlwcmVzc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHZhbGlkYXRpb24uc3VjY2VzcykpXG4gICAgICAuZm9yRWFjaCh0aGlzLm9uS2V5cHJlc3MuYmluZCh0aGlzKSk7XG5cbiAgICAvLyBJbml0XG4gICAgdGhpcy5yZW5kZXIoKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgcHJvbXB0IHRvIHNjcmVlblxuICAgKiBAcmV0dXJuIHtJbnB1dFByb21wdH0gc2VsZlxuICAgKi9cblxuICByZW5kZXIoZXJyb3IpIHtcbiAgICBsZXQgYm90dG9tQ29udGVudCA9ICcnO1xuICAgIGxldCBhcHBlbmRDb250ZW50ID0gJyc7XG4gICAgbGV0IG1lc3NhZ2UgPSB0aGlzLmdldFF1ZXN0aW9uKCk7XG4gICAgY29uc3QgeyB0cmFuc2Zvcm1lciB9ID0gdGhpcy5vcHQ7XG4gICAgY29uc3QgaXNGaW5hbCA9IHRoaXMuc3RhdHVzID09PSAnYW5zd2VyZWQnO1xuXG4gICAgYXBwZW5kQ29udGVudCA9IGlzRmluYWwgPyB0aGlzLmFuc3dlciA6IHRoaXMucmwubGluZTtcblxuICAgIGlmICh0cmFuc2Zvcm1lcikge1xuICAgICAgbWVzc2FnZSArPSB0cmFuc2Zvcm1lcihhcHBlbmRDb250ZW50LCB0aGlzLmFuc3dlcnMsIHsgaXNGaW5hbCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVzc2FnZSArPSBpc0ZpbmFsID8gY29sb3JzLmN5YW4oYXBwZW5kQ29udGVudCkgOiBhcHBlbmRDb250ZW50O1xuICAgIH1cblxuICAgIGlmIChlcnJvcikge1xuICAgICAgYm90dG9tQ29udGVudCA9IGNvbG9ycy5yZWQoJz4+ICcpICsgZXJyb3I7XG4gICAgfVxuXG4gICAgdGhpcy5zY3JlZW4ucmVuZGVyKG1lc3NhZ2UsIGJvdHRvbUNvbnRlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gdXNlciBwcmVzcyBgZW50ZXJgIGtleVxuICAgKi9cblxuICBmaWx0ZXJJbnB1dChpbnB1dCkge1xuICAgIGlmICghaW5wdXQpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdC5kZWZhdWx0ID09IG51bGwgPyAnJyA6IHRoaXMub3B0LmRlZmF1bHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG5cbiAgb25FbmQoc3RhdGUpIHtcbiAgICB0aGlzLmFuc3dlciA9IHN0YXRlLnZhbHVlO1xuICAgIHRoaXMuc3RhdHVzID0gJ2Fuc3dlcmVkJztcblxuICAgIC8vIFJlLXJlbmRlciBwcm9tcHRcbiAgICB0aGlzLnJlbmRlcigpO1xuXG4gICAgdGhpcy5zY3JlZW4uZG9uZSgpO1xuICAgIHRoaXMuZG9uZShzdGF0ZS52YWx1ZSk7XG4gIH1cblxuICBvbkVycm9yKHsgdmFsdWUgPSAnJywgaXNWYWxpZCB9KSB7XG4gICAgdGhpcy5ybC5saW5lICs9IHZhbHVlO1xuICAgIHRoaXMucmwuY3Vyc29yICs9IHZhbHVlLmxlbmd0aDtcbiAgICB0aGlzLnJlbmRlcihpc1ZhbGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHVzZXIgcHJlc3MgYSBrZXlcbiAgICovXG5cbiAgb25LZXlwcmVzcygpIHtcbiAgICB0aGlzLnN0YXR1cyA9ICd0b3VjaGVkJztcblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cbn1cbiIsIi8qKlxuICogYGlucHV0YCB0eXBlIHByb21wdFxuICovXG5cbmltcG9ydCBJbnB1dCBmcm9tICcuL2lucHV0LmpzJztcblxuLyoqXG4gKiBFeHRlbnRpb24gb2YgdGhlIElucHV0IHByb21wdCBzcGVjaWZpY2FsbHkgZm9yIHVzZSB3aXRoIG51bWJlciBpbnB1dHMuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTnVtYmVyUHJvbXB0IGV4dGVuZHMgSW5wdXQge1xuICBmaWx0ZXJJbnB1dChpbnB1dCkge1xuICAgIGlmIChpbnB1dCAmJiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpbnB1dCA9IGlucHV0LnRyaW0oKTtcbiAgICAgIC8vIE1hdGNoIGEgbnVtYmVyIGluIHRoZSBpbnB1dFxuICAgICAgY29uc3QgbnVtYmVyTWF0Y2ggPSBpbnB1dC5tYXRjaCgvKF4tP1xcZCt8Xi0/XFxkK1xcLlxcZCp8XlxcZCpcXC5cXGQrKShlXFxkKyk/JC8pO1xuICAgICAgLy8gSWYgYSBudW1iZXIgaXMgZm91bmQsIHJldHVybiB0aGF0IGlucHV0LlxuICAgICAgaWYgKG51bWJlck1hdGNoKSB7XG4gICAgICAgIHJldHVybiBOdW1iZXIobnVtYmVyTWF0Y2hbMF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIHRoZSBpbnB1dCB3YXMgaW52YWxpZCByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUuXG4gICAgcmV0dXJuIHRoaXMub3B0LmRlZmF1bHQgPT0gbnVsbCA/IE51bWJlci5OYU4gOiB0aGlzLm9wdC5kZWZhdWx0O1xuICB9XG59XG4iLCIvKipcbiAqIGBjb25maXJtYCB0eXBlIHByb21wdFxuICovXG5cbmltcG9ydCBjb2xvcnMgZnJvbSAneW9jdG9jb2xvcnMtY2pzJztcbmltcG9ydCB7IHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IG9ic2VydmUgZnJvbSAnLi4vdXRpbHMvZXZlbnRzLmpzJztcbmltcG9ydCBCYXNlIGZyb20gJy4vYmFzZS5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbmZpcm1Qcm9tcHQgZXh0ZW5kcyBCYXNlIHtcbiAgY29uc3RydWN0b3IocXVlc3Rpb25zLCBybCwgYW5zd2Vycykge1xuICAgIHN1cGVyKHF1ZXN0aW9ucywgcmwsIGFuc3dlcnMpO1xuXG4gICAgbGV0IHJhd0RlZmF1bHQgPSB0cnVlO1xuXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdCwge1xuICAgICAgZmlsdGVyKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsICYmIGlucHV0ICE9PSAnJykge1xuICAgICAgICAgIGlmICgvXnkoZXMpPy9pLnRlc3QoaW5wdXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICBpZiAoL15uKG8pPy9pLnRlc3QoaW5wdXQpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJhd0RlZmF1bHQ7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMub3B0LmRlZmF1bHQgIT0gbnVsbCkge1xuICAgICAgcmF3RGVmYXVsdCA9IEJvb2xlYW4odGhpcy5vcHQuZGVmYXVsdCk7XG4gICAgfVxuXG4gICAgdGhpcy5vcHQuZGVmYXVsdCA9IHJhd0RlZmF1bHQgPyAnWS9uJyA6ICd5L04nO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSBJbnF1aXJ5IHNlc3Npb25cbiAgICogQHBhcmFtICB7RnVuY3Rpb259IGNiICAgQ2FsbGJhY2sgd2hlbiBwcm9tcHQgaXMgZG9uZVxuICAgKiBAcmV0dXJuIHt0aGlzfVxuICAgKi9cblxuICBfcnVuKGNiKSB7XG4gICAgdGhpcy5kb25lID0gY2I7XG5cbiAgICAvLyBPbmNlIHVzZXIgY29uZmlybSAoZW50ZXIga2V5KVxuICAgIGNvbnN0IGV2ZW50cyA9IG9ic2VydmUodGhpcy5ybCk7XG4gICAgZXZlbnRzLmtleXByZXNzLnBpcGUodGFrZVVudGlsKGV2ZW50cy5saW5lKSkuZm9yRWFjaCh0aGlzLm9uS2V5cHJlc3MuYmluZCh0aGlzKSk7XG5cbiAgICBldmVudHMubGluZS5waXBlKHRha2UoMSkpLmZvckVhY2godGhpcy5vbkVuZC5iaW5kKHRoaXMpKTtcblxuICAgIC8vIEluaXRcbiAgICB0aGlzLnJlbmRlcigpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBwcm9tcHQgdG8gc2NyZWVuXG4gICAqIEByZXR1cm4ge0NvbmZpcm1Qcm9tcHR9IHNlbGZcbiAgICovXG5cbiAgcmVuZGVyKGFuc3dlcikge1xuICAgIGxldCBtZXNzYWdlID0gdGhpcy5nZXRRdWVzdGlvbigpO1xuXG4gICAgaWYgKHR5cGVvZiBhbnN3ZXIgPT09ICdib29sZWFuJykge1xuICAgICAgbWVzc2FnZSArPSBjb2xvcnMuY3lhbihhbnN3ZXIgPyAnWWVzJyA6ICdObycpO1xuICAgIH0gZWxzZSBpZiAoYW5zd2VyKSB7XG4gICAgICBtZXNzYWdlICs9IGFuc3dlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVzc2FnZSArPSB0aGlzLnJsLmxpbmU7XG4gICAgfVxuXG4gICAgdGhpcy5zY3JlZW4ucmVuZGVyKG1lc3NhZ2UpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB1c2VyIHByZXNzIGBlbnRlcmAga2V5XG4gICAqL1xuXG4gIG9uRW5kKGlucHV0KSB7XG4gICAgdGhpcy5zdGF0dXMgPSAnYW5zd2VyZWQnO1xuXG4gICAgbGV0IG91dHB1dCA9IHRoaXMub3B0LmZpbHRlcihpbnB1dCk7XG4gICAgaWYgKHRoaXMub3B0LnRyYW5zZm9ybWVyKSB7XG4gICAgICBvdXRwdXQgPSB0aGlzLm9wdC50cmFuc2Zvcm1lcihvdXRwdXQpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcihvdXRwdXQpO1xuXG4gICAgdGhpcy5zY3JlZW4uZG9uZSgpO1xuICAgIHRoaXMuZG9uZShvdXRwdXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gdXNlciBwcmVzcyBhIGtleVxuICAgKi9cblxuICBvbktleXByZXNzKCkge1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cbn1cbiIsIi8qKlxuICogYHJhd2xpc3RgIHR5cGUgcHJvbXB0XG4gKi9cblxuaW1wb3J0IGNvbG9ycyBmcm9tICd5b2N0b2NvbG9ycy1janMnO1xuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCBTZXBhcmF0b3IgZnJvbSAnLi4vb2JqZWN0cy9zZXBhcmF0b3IuanMnO1xuaW1wb3J0IG9ic2VydmUgZnJvbSAnLi4vdXRpbHMvZXZlbnRzLmpzJztcbmltcG9ydCBQYWdpbmF0b3IgZnJvbSAnLi4vdXRpbHMvcGFnaW5hdG9yLmpzJztcbmltcG9ydCBpbmNyZW1lbnRMaXN0SW5kZXggZnJvbSAnLi4vdXRpbHMvaW5jcmVtZW50TGlzdEluZGV4LmpzJztcbmltcG9ydCBCYXNlIGZyb20gJy4vYmFzZS5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJhd0xpc3RQcm9tcHQgZXh0ZW5kcyBCYXNlIHtcbiAgY29uc3RydWN0b3IocXVlc3Rpb25zLCBybCwgYW5zd2Vycykge1xuICAgIHN1cGVyKHF1ZXN0aW9ucywgcmwsIGFuc3dlcnMpO1xuXG4gICAgdGhpcy5oaWRkZW5MaW5lID0gJyc7XG4gICAgdGhpcy5sYXN0S2V5ID0gJyc7XG5cbiAgICBpZiAoIXRoaXMub3B0LmNob2ljZXMpIHtcbiAgICAgIHRoaXMudGhyb3dQYXJhbUVycm9yKCdjaG9pY2VzJyk7XG4gICAgfVxuXG4gICAgdGhpcy5vcHQudmFsaWRDaG9pY2VzID0gdGhpcy5vcHQuY2hvaWNlcy5maWx0ZXIoU2VwYXJhdG9yLmV4Y2x1ZGUpO1xuXG4gICAgdGhpcy5zZWxlY3RlZCA9IDA7XG4gICAgdGhpcy5yYXdEZWZhdWx0ID0gMDtcblxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHQsIHtcbiAgICAgIHZhbGlkYXRlKHZhbCkge1xuICAgICAgICByZXR1cm4gdmFsICE9IG51bGw7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVmID0gdGhpcy5vcHQuZGVmYXVsdDtcbiAgICBpZiAodHlwZW9mIGRlZiA9PT0gJ251bWJlcicgJiYgZGVmID49IDAgJiYgZGVmIDwgdGhpcy5vcHQuY2hvaWNlcy5yZWFsTGVuZ3RoKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkID0gZGVmO1xuICAgICAgdGhpcy5yYXdEZWZhdWx0ID0gZGVmO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZiAhPT0gJ251bWJlcicgJiYgZGVmICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5vcHQuY2hvaWNlcy5yZWFsQ2hvaWNlcy5maW5kSW5kZXgoKHsgdmFsdWUgfSkgPT4gdmFsdWUgPT09IGRlZik7XG4gICAgICBjb25zdCBzYWZlSW5kZXggPSBNYXRoLm1heChpbmRleCwgMCk7XG4gICAgICB0aGlzLnNlbGVjdGVkID0gc2FmZUluZGV4O1xuICAgICAgdGhpcy5yYXdEZWZhdWx0ID0gc2FmZUluZGV4O1xuICAgIH1cblxuICAgIC8vIE1ha2Ugc3VyZSBubyBkZWZhdWx0IGlzIHNldCAoc28gaXQgd29uJ3QgYmUgcHJpbnRlZClcbiAgICB0aGlzLm9wdC5kZWZhdWx0ID0gbnVsbDtcblxuICAgIGNvbnN0IHNob3VsZExvb3AgPSB0aGlzLm9wdC5sb29wID09PSB1bmRlZmluZWQgPyB0cnVlIDogdGhpcy5vcHQubG9vcDtcbiAgICB0aGlzLnBhZ2luYXRvciA9IG5ldyBQYWdpbmF0b3IodW5kZWZpbmVkLCB7IGlzSW5maW5pdGU6IHNob3VsZExvb3AgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgdGhlIElucXVpcnkgc2Vzc2lvblxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2IgICAgICBDYWxsYmFjayB3aGVuIHByb21wdCBpcyBkb25lXG4gICAqIEByZXR1cm4ge3RoaXN9XG4gICAqL1xuXG4gIF9ydW4oY2IpIHtcbiAgICB0aGlzLmRvbmUgPSBjYjtcblxuICAgIC8vIE9uY2UgdXNlciBjb25maXJtIChlbnRlciBrZXkpXG4gICAgY29uc3QgZXZlbnRzID0gb2JzZXJ2ZSh0aGlzLnJsKTtcbiAgICBjb25zdCBzdWJtaXQgPSBldmVudHMubGluZS5waXBlKG1hcCh0aGlzLmdldEN1cnJlbnRWYWx1ZS5iaW5kKHRoaXMpKSk7XG5cbiAgICBjb25zdCB2YWxpZGF0aW9uID0gdGhpcy5oYW5kbGVTdWJtaXRFdmVudHMoc3VibWl0KTtcbiAgICB2YWxpZGF0aW9uLnN1Y2Nlc3MuZm9yRWFjaCh0aGlzLm9uRW5kLmJpbmQodGhpcykpO1xuICAgIHZhbGlkYXRpb24uZXJyb3IuZm9yRWFjaCh0aGlzLm9uRXJyb3IuYmluZCh0aGlzKSk7XG5cbiAgICBldmVudHMubm9ybWFsaXplZFVwS2V5XG4gICAgICAucGlwZSh0YWtlVW50aWwodmFsaWRhdGlvbi5zdWNjZXNzKSlcbiAgICAgIC5mb3JFYWNoKHRoaXMub25VcEtleS5iaW5kKHRoaXMpKTtcbiAgICBldmVudHMubm9ybWFsaXplZERvd25LZXlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh2YWxpZGF0aW9uLnN1Y2Nlc3MpKVxuICAgICAgLmZvckVhY2godGhpcy5vbkRvd25LZXkuYmluZCh0aGlzKSk7XG4gICAgZXZlbnRzLmtleXByZXNzXG4gICAgICAucGlwZSh0YWtlVW50aWwodmFsaWRhdGlvbi5zdWNjZXNzKSlcbiAgICAgIC5mb3JFYWNoKHRoaXMub25LZXlwcmVzcy5iaW5kKHRoaXMpKTtcbiAgICAvLyBJbml0IHRoZSBwcm9tcHRcbiAgICB0aGlzLnJlbmRlcigpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBwcm9tcHQgdG8gc2NyZWVuXG4gICAqIEByZXR1cm4ge1Jhd0xpc3RQcm9tcHR9IHNlbGZcbiAgICovXG5cbiAgcmVuZGVyKGVycm9yKSB7XG4gICAgLy8gUmVuZGVyIHF1ZXN0aW9uXG4gICAgbGV0IG1lc3NhZ2UgPSB0aGlzLmdldFF1ZXN0aW9uKCk7XG4gICAgbGV0IGJvdHRvbUNvbnRlbnQgPSAnJztcblxuICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gJ2Fuc3dlcmVkJykge1xuICAgICAgbWVzc2FnZSArPSBjb2xvcnMuY3lhbih0aGlzLm9wdC5jaG9pY2VzLmdldENob2ljZSh0aGlzLnNlbGVjdGVkKS5zaG9ydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNob2ljZXNTdHIgPSByZW5kZXJDaG9pY2VzKHRoaXMub3B0LmNob2ljZXMsIHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgbWVzc2FnZSArPVxuICAgICAgICAnXFxuJyArIHRoaXMucGFnaW5hdG9yLnBhZ2luYXRlKGNob2ljZXNTdHIsIHRoaXMuc2VsZWN0ZWQsIHRoaXMub3B0LnBhZ2VTaXplKTtcbiAgICAgIG1lc3NhZ2UgKz0gJ1xcbiAgQW5zd2VyOiAnO1xuICAgIH1cbiAgICBtZXNzYWdlICs9IHRoaXMucmwubGluZTtcblxuICAgIGlmIChlcnJvcikge1xuICAgICAgYm90dG9tQ29udGVudCA9ICdcXG4nICsgY29sb3JzLnJlZCgnPj4gJykgKyBlcnJvcjtcbiAgICB9XG5cbiAgICB0aGlzLnNjcmVlbi5yZW5kZXIobWVzc2FnZSwgYm90dG9tQ29udGVudCk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB1c2VyIHByZXNzIGBlbnRlcmAga2V5XG4gICAqL1xuXG4gIGdldEN1cnJlbnRWYWx1ZShpbmRleCkge1xuICAgIGlmIChpbmRleCA9PSBudWxsKSB7XG4gICAgICBpbmRleCA9IHRoaXMucmF3RGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKGluZGV4ID09PSAnJykge1xuICAgICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQgPT09IHVuZGVmaW5lZCA/IC0xIDogdGhpcy5zZWxlY3RlZDtcbiAgICAgIGluZGV4ID0gdGhpcy5zZWxlY3RlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5kZXggLT0gMTtcbiAgICB9XG5cbiAgICBjb25zdCBjaG9pY2UgPSB0aGlzLm9wdC5jaG9pY2VzLmdldENob2ljZShpbmRleCk7XG4gICAgcmV0dXJuIGNob2ljZSA/IGNob2ljZS52YWx1ZSA6IG51bGw7XG4gIH1cblxuICBvbkVuZChzdGF0ZSkge1xuICAgIHRoaXMuc3RhdHVzID0gJ2Fuc3dlcmVkJztcbiAgICB0aGlzLmFuc3dlciA9IHN0YXRlLnZhbHVlO1xuXG4gICAgLy8gUmUtcmVuZGVyIHByb21wdFxuICAgIHRoaXMucmVuZGVyKCk7XG5cbiAgICB0aGlzLnNjcmVlbi5kb25lKCk7XG4gICAgdGhpcy5kb25lKHN0YXRlLnZhbHVlKTtcbiAgfVxuXG4gIG9uRXJyb3IoKSB7XG4gICAgdGhpcy5yZW5kZXIoJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGluZGV4Jyk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB1c2VyIHByZXNzIGEga2V5XG4gICAqL1xuXG4gIG9uS2V5cHJlc3MoKSB7XG4gICAgbGV0IGluZGV4O1xuXG4gICAgaWYgKHRoaXMubGFzdEtleSA9PT0gJ2Fycm93Jykge1xuICAgICAgaW5kZXggPSB0aGlzLmhpZGRlbkxpbmUubGVuZ3RoID4gMCA/IE51bWJlcih0aGlzLmhpZGRlbkxpbmUpIC0gMSA6IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4ID0gdGhpcy5ybC5saW5lLmxlbmd0aCA+IDAgPyBOdW1iZXIodGhpcy5ybC5saW5lKSAtIDEgOiAwO1xuICAgIH1cbiAgICB0aGlzLmxhc3RLZXkgPSAnJztcblxuICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLm9wdC5jaG9pY2VzLmdldENob2ljZShpbmRleCkgPyBpbmRleCA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gdXNlciBwcmVzcyB1cCBrZXlcbiAgICovXG5cbiAgb25VcEtleSgpIHtcbiAgICB0aGlzLm9uQXJyb3dLZXkoJ3VwJyk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB1c2VyIHByZXNzIGRvd24ga2V5XG4gICAqL1xuXG4gIG9uRG93bktleSgpIHtcbiAgICB0aGlzLm9uQXJyb3dLZXkoJ2Rvd24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHVzZXIgcHJlc3MgdXAgb3IgZG93biBrZXlcbiAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgQXJyb3cgdHlwZTogdXAgb3IgZG93blxuICAgKi9cblxuICBvbkFycm93S2V5KHR5cGUpIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gaW5jcmVtZW50TGlzdEluZGV4KHRoaXMuc2VsZWN0ZWQsIHR5cGUsIHRoaXMub3B0KSB8fCAwO1xuICAgIHRoaXMuaGlkZGVuTGluZSA9IFN0cmluZyh0aGlzLnNlbGVjdGVkICsgMSk7XG4gICAgdGhpcy5ybC5saW5lID0gJyc7XG4gICAgdGhpcy5sYXN0S2V5ID0gJ2Fycm93JztcbiAgfVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uIGZvciByZW5kZXJpbmcgbGlzdCBjaG9pY2VzXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IHBvaW50ZXIgUG9zaXRpb24gb2YgdGhlIHBvaW50ZXJcbiAqIEByZXR1cm4ge1N0cmluZ30gICAgICAgICBSZW5kZXJlZCBjb250ZW50XG4gKi9cblxuZnVuY3Rpb24gcmVuZGVyQ2hvaWNlcyhjaG9pY2VzLCBwb2ludGVyKSB7XG4gIGxldCBvdXRwdXQgPSAnJztcbiAgbGV0IHNlcGFyYXRvck9mZnNldCA9IDA7XG5cbiAgY2hvaWNlcy5mb3JFYWNoKChjaG9pY2UsIGkpID0+IHtcbiAgICBvdXRwdXQgKz0gb3V0cHV0ID8gJ1xcbiAgJyA6ICcgICc7XG5cbiAgICBpZiAoY2hvaWNlLnR5cGUgPT09ICdzZXBhcmF0b3InKSB7XG4gICAgICBzZXBhcmF0b3JPZmZzZXQrKztcbiAgICAgIG91dHB1dCArPSAnICcgKyBjaG9pY2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSBpIC0gc2VwYXJhdG9yT2Zmc2V0O1xuICAgIGxldCBkaXNwbGF5ID0gaW5kZXggKyAxICsgJykgJyArIGNob2ljZS5uYW1lO1xuICAgIGlmIChpbmRleCA9PT0gcG9pbnRlcikge1xuICAgICAgZGlzcGxheSA9IGNvbG9ycy5jeWFuKGRpc3BsYXkpO1xuICAgIH1cblxuICAgIG91dHB1dCArPSBkaXNwbGF5O1xuICB9KTtcblxuICByZXR1cm4gb3V0cHV0O1xufVxuIiwiLyoqXG4gKiBgcmF3bGlzdGAgdHlwZSBwcm9tcHRcbiAqL1xuXG5pbXBvcnQgY29sb3JzIGZyb20gJ3lvY3RvY29sb3JzLWNqcyc7XG5pbXBvcnQgeyBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IFNlcGFyYXRvciBmcm9tICcuLi9vYmplY3RzL3NlcGFyYXRvci5qcyc7XG5pbXBvcnQgb2JzZXJ2ZSBmcm9tICcuLi91dGlscy9ldmVudHMuanMnO1xuaW1wb3J0IFBhZ2luYXRvciBmcm9tICcuLi91dGlscy9wYWdpbmF0b3IuanMnO1xuaW1wb3J0IEJhc2UgZnJvbSAnLi9iYXNlLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwYW5kUHJvbXB0IGV4dGVuZHMgQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHF1ZXN0aW9ucywgcmwsIGFuc3dlcnMpIHtcbiAgICBzdXBlcihxdWVzdGlvbnMsIHJsLCBhbnN3ZXJzKTtcblxuICAgIGlmICghdGhpcy5vcHQuY2hvaWNlcykge1xuICAgICAgdGhpcy50aHJvd1BhcmFtRXJyb3IoJ2Nob2ljZXMnKTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkYXRlQ2hvaWNlcyh0aGlzLm9wdC5jaG9pY2VzKTtcblxuICAgIC8vIEFkZCB0aGUgZGVmYXVsdCBgaGVscGAgKC9leHBhbmQpIG9wdGlvblxuICAgIHRoaXMub3B0LmNob2ljZXMucHVzaCh7XG4gICAgICBrZXk6ICdoJyxcbiAgICAgIG5hbWU6ICdIZWxwLCBsaXN0IGFsbCBvcHRpb25zJyxcbiAgICAgIHZhbHVlOiAnaGVscCcsXG4gICAgfSk7XG5cbiAgICB0aGlzLm9wdC52YWxpZGF0ZSA9IChjaG9pY2UpID0+IHtcbiAgICAgIGlmIChjaG9pY2UgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGNvbW1hbmQnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2hvaWNlICE9PSAnaGVscCc7XG4gICAgfTtcblxuICAgIC8vIFNldHVwIHRoZSBkZWZhdWx0IHN0cmluZyAoY2FwaXRhbGl6ZSB0aGUgZGVmYXVsdCBrZXkpXG4gICAgdGhpcy5vcHQuZGVmYXVsdCA9IHRoaXMuZ2VuZXJhdGVDaG9pY2VzU3RyaW5nKHRoaXMub3B0LmNob2ljZXMsIHRoaXMub3B0LmRlZmF1bHQpO1xuXG4gICAgdGhpcy5wYWdpbmF0b3IgPSBuZXcgUGFnaW5hdG9yKHRoaXMuc2NyZWVuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0aGUgSW5xdWlyeSBzZXNzaW9uXG4gICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYiAgICAgIENhbGxiYWNrIHdoZW4gcHJvbXB0IGlzIGRvbmVcbiAgICogQHJldHVybiB7dGhpc31cbiAgICovXG5cbiAgX3J1bihjYikge1xuICAgIHRoaXMuZG9uZSA9IGNiO1xuXG4gICAgLy8gU2F2ZSB1c2VyIGFuc3dlciBhbmQgdXBkYXRlIHByb21wdCB0byBzaG93IHNlbGVjdGVkIG9wdGlvbi5cbiAgICBjb25zdCBldmVudHMgPSBvYnNlcnZlKHRoaXMucmwpO1xuICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0aGlzLmhhbmRsZVN1Ym1pdEV2ZW50cyhcbiAgICAgIGV2ZW50cy5saW5lLnBpcGUobWFwKHRoaXMuZ2V0Q3VycmVudFZhbHVlLmJpbmQodGhpcykpKSxcbiAgICApO1xuICAgIHZhbGlkYXRpb24uc3VjY2Vzcy5mb3JFYWNoKHRoaXMub25TdWJtaXQuYmluZCh0aGlzKSk7XG4gICAgdmFsaWRhdGlvbi5lcnJvci5mb3JFYWNoKHRoaXMub25FcnJvci5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmtleXByZXNzT2JzID0gZXZlbnRzLmtleXByZXNzXG4gICAgICAucGlwZSh0YWtlVW50aWwodmFsaWRhdGlvbi5zdWNjZXNzKSlcbiAgICAgIC5mb3JFYWNoKHRoaXMub25LZXlwcmVzcy5iaW5kKHRoaXMpKTtcblxuICAgIC8vIEluaXQgdGhlIHByb21wdFxuICAgIHRoaXMucmVuZGVyKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIHByb21wdCB0byBzY3JlZW5cbiAgICogQHJldHVybiB7RXhwYW5kUHJvbXB0fSBzZWxmXG4gICAqL1xuXG4gIHJlbmRlcihlcnJvciwgaGludCkge1xuICAgIGxldCBtZXNzYWdlID0gdGhpcy5nZXRRdWVzdGlvbigpO1xuICAgIGxldCBib3R0b21Db250ZW50ID0gJyc7XG5cbiAgICBpZiAodGhpcy5zdGF0dXMgPT09ICdhbnN3ZXJlZCcpIHtcbiAgICAgIG1lc3NhZ2UgKz0gY29sb3JzLmN5YW4odGhpcy5hbnN3ZXIpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0dXMgPT09ICdleHBhbmRlZCcpIHtcbiAgICAgIGNvbnN0IGNob2ljZXNTdHIgPSByZW5kZXJDaG9pY2VzKHRoaXMub3B0LmNob2ljZXMsIHRoaXMuc2VsZWN0ZWRLZXkpO1xuICAgICAgbWVzc2FnZSArPSB0aGlzLnBhZ2luYXRvci5wYWdpbmF0ZShjaG9pY2VzU3RyLCB0aGlzLnNlbGVjdGVkS2V5LCB0aGlzLm9wdC5wYWdlU2l6ZSk7XG4gICAgICBtZXNzYWdlICs9ICdcXG4gIEFuc3dlcjogJztcbiAgICB9XG5cbiAgICBtZXNzYWdlICs9IHRoaXMucmwubGluZTtcblxuICAgIGlmIChlcnJvcikge1xuICAgICAgYm90dG9tQ29udGVudCA9IGNvbG9ycy5yZWQoJz4+ICcpICsgZXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKGhpbnQpIHtcbiAgICAgIGJvdHRvbUNvbnRlbnQgPSBjb2xvcnMuY3lhbignPj4gJykgKyBoaW50O1xuICAgIH1cblxuICAgIHRoaXMuc2NyZWVuLnJlbmRlcihtZXNzYWdlLCBib3R0b21Db250ZW50KTtcbiAgfVxuXG4gIGdldEN1cnJlbnRWYWx1ZShpbnB1dCkge1xuICAgIGlucHV0IHx8PSB0aGlzLnJhd0RlZmF1bHQ7XG5cbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMub3B0LmNob2ljZXMud2hlcmUoeyBrZXk6IGlucHV0LnRvTG93ZXJDYXNlKCkudHJpbSgpIH0pWzBdO1xuICAgIGlmICghc2VsZWN0ZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxlY3RlZC52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0aGUgcHJvbXB0IGNob2ljZXMgc3RyaW5nXG4gICAqIEByZXR1cm4ge1N0cmluZ30gIENob2ljZXMgc3RyaW5nXG4gICAqL1xuXG4gIGdldENob2ljZXMoKSB7XG4gICAgbGV0IG91dHB1dCA9ICcnO1xuXG4gICAgdGhpcy5vcHQuY2hvaWNlcy5mb3JFYWNoKChjaG9pY2UpID0+IHtcbiAgICAgIG91dHB1dCArPSAnXFxuICAnO1xuXG4gICAgICBpZiAoY2hvaWNlLnR5cGUgPT09ICdzZXBhcmF0b3InKSB7XG4gICAgICAgIG91dHB1dCArPSAnICcgKyBjaG9pY2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGNob2ljZVN0ciA9IGNob2ljZS5rZXkgKyAnKSAnICsgY2hvaWNlLm5hbWU7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEtleSA9PT0gY2hvaWNlLmtleSkge1xuICAgICAgICBjaG9pY2VTdHIgPSBjb2xvcnMuY3lhbihjaG9pY2VTdHIpO1xuICAgICAgfVxuXG4gICAgICBvdXRwdXQgKz0gY2hvaWNlU3RyO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIG9uRXJyb3Ioc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUudmFsdWUgPT09ICdoZWxwJykge1xuICAgICAgdGhpcy5zZWxlY3RlZEtleSA9ICcnO1xuICAgICAgdGhpcy5zdGF0dXMgPSAnZXhwYW5kZWQnO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcihzdGF0ZS5pc1ZhbGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHVzZXIgcHJlc3MgYGVudGVyYCBrZXlcbiAgICovXG5cbiAgb25TdWJtaXQoc3RhdGUpIHtcbiAgICB0aGlzLnN0YXR1cyA9ICdhbnN3ZXJlZCc7XG4gICAgY29uc3QgY2hvaWNlID0gdGhpcy5vcHQuY2hvaWNlcy53aGVyZSh7IHZhbHVlOiBzdGF0ZS52YWx1ZSB9KVswXTtcbiAgICB0aGlzLmFuc3dlciA9IGNob2ljZS5zaG9ydCB8fCBjaG9pY2UubmFtZTtcblxuICAgIC8vIFJlLXJlbmRlciBwcm9tcHRcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMuc2NyZWVuLmRvbmUoKTtcbiAgICB0aGlzLmRvbmUoc3RhdGUudmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gdXNlciBwcmVzcyBhIGtleVxuICAgKi9cblxuICBvbktleXByZXNzKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRLZXkgPSB0aGlzLnJsLmxpbmUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMub3B0LmNob2ljZXMud2hlcmUoeyBrZXk6IHRoaXMuc2VsZWN0ZWRLZXkgfSlbMF07XG4gICAgaWYgKHRoaXMuc3RhdHVzID09PSAnZXhwYW5kZWQnKSB7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbmRlcihudWxsLCBzZWxlY3RlZCA/IHNlbGVjdGVkLm5hbWUgOiBudWxsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIGNob2ljZXNcbiAgICogQHBhcmFtIHtBcnJheX0gY2hvaWNlc1xuICAgKi9cblxuICB2YWxpZGF0ZUNob2ljZXMoY2hvaWNlcykge1xuICAgIGxldCBmb3JtYXRFcnJvcjtcbiAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICBjb25zdCBrZXltYXAgPSB7fTtcbiAgICBjaG9pY2VzLmZpbHRlcihTZXBhcmF0b3IuZXhjbHVkZSkuZm9yRWFjaCgoY2hvaWNlKSA9PiB7XG4gICAgICBpZiAoIWNob2ljZS5rZXkgfHwgY2hvaWNlLmtleS5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgZm9ybWF0RXJyb3IgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjaG9pY2Uua2V5ID0gU3RyaW5nKGNob2ljZS5rZXkpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmIChrZXltYXBbY2hvaWNlLmtleV0pIHtcbiAgICAgICAgZXJyb3JzLnB1c2goY2hvaWNlLmtleSk7XG4gICAgICB9XG5cbiAgICAgIGtleW1hcFtjaG9pY2Uua2V5XSA9IHRydWU7XG4gICAgfSk7XG5cbiAgICBpZiAoZm9ybWF0RXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0Zvcm1hdCBlcnJvcjogYGtleWAgcGFyYW0gbXVzdCBiZSBhIHNpbmdsZSBsZXR0ZXIgYW5kIGlzIHJlcXVpcmVkLicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChrZXltYXAuaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnUmVzZXJ2ZWQga2V5IGVycm9yOiBga2V5YCBwYXJhbSBjYW5ub3QgYmUgYGhgIC0gdGhpcyB2YWx1ZSBpcyByZXNlcnZlZC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0R1cGxpY2F0ZSBrZXkgZXJyb3I6IGBrZXlgIHBhcmFtIG11c3QgYmUgdW5pcXVlLiBEdXBsaWNhdGVzOiAnICtcbiAgICAgICAgICBbLi4ubmV3IFNldChlcnJvcnMpXS5qb2luKCcsJyksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIHN0cmluZyBvdXQgb2YgdGhlIGNob2ljZXMga2V5c1xuICAgKiBAcGFyYW0gIHtBcnJheX0gIGNob2ljZXNcbiAgICogQHBhcmFtICB7TnVtYmVyfFN0cmluZ30gZGVmYXVsdCAtIHRoZSBjaG9pY2UgaW5kZXggb3IgbmFtZSB0byBjYXBpdGFsaXplXG4gICAqIEByZXR1cm4ge1N0cmluZ30gVGhlIHJlbmRlcmVkIGNob2ljZXMga2V5IHN0cmluZ1xuICAgKi9cbiAgZ2VuZXJhdGVDaG9pY2VzU3RyaW5nKGNob2ljZXMsIGRlZmF1bHRDaG9pY2UpIHtcbiAgICBsZXQgZGVmSW5kZXggPSBjaG9pY2VzLnJlYWxMZW5ndGggLSAxO1xuICAgIGlmICh0eXBlb2YgZGVmYXVsdENob2ljZSA9PT0gJ251bWJlcicgJiYgdGhpcy5vcHQuY2hvaWNlcy5nZXRDaG9pY2UoZGVmYXVsdENob2ljZSkpIHtcbiAgICAgIGRlZkluZGV4ID0gZGVmYXVsdENob2ljZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZhdWx0Q2hvaWNlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgaW5kZXggPSBjaG9pY2VzLnJlYWxDaG9pY2VzLmZpbmRJbmRleCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSA9PT0gZGVmYXVsdENob2ljZSk7XG4gICAgICBkZWZJbmRleCA9IGluZGV4ID09PSAtMSA/IGRlZkluZGV4IDogaW5kZXg7XG4gICAgfVxuXG4gICAgY29uc3QgZGVmU3RyID0gdGhpcy5vcHQuY2hvaWNlcy5wbHVjaygna2V5Jyk7XG4gICAgdGhpcy5yYXdEZWZhdWx0ID0gZGVmU3RyW2RlZkluZGV4XTtcbiAgICBkZWZTdHJbZGVmSW5kZXhdID0gU3RyaW5nKGRlZlN0cltkZWZJbmRleF0pLnRvVXBwZXJDYXNlKCk7XG4gICAgcmV0dXJuIGRlZlN0ci5qb2luKCcnKTtcbiAgfVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uIGZvciByZW5kZXJpbmcgY2hlY2tib3ggY2hvaWNlc1xuICogQHBhcmFtICB7U3RyaW5nfSBwb2ludGVyIFNlbGVjdGVkIGtleVxuICogQHJldHVybiB7U3RyaW5nfSAgICAgICAgIFJlbmRlcmVkIGNvbnRlbnRcbiAqL1xuXG5mdW5jdGlvbiByZW5kZXJDaG9pY2VzKGNob2ljZXMsIHBvaW50ZXIpIHtcbiAgbGV0IG91dHB1dCA9ICcnO1xuXG4gIGNob2ljZXMuZm9yRWFjaCgoY2hvaWNlKSA9PiB7XG4gICAgb3V0cHV0ICs9ICdcXG4gICc7XG5cbiAgICBpZiAoY2hvaWNlLnR5cGUgPT09ICdzZXBhcmF0b3InKSB7XG4gICAgICBvdXRwdXQgKz0gJyAnICsgY2hvaWNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjaG9pY2VTdHIgPSBjaG9pY2Uua2V5ICsgJykgJyArIGNob2ljZS5uYW1lO1xuICAgIGlmIChwb2ludGVyID09PSBjaG9pY2Uua2V5KSB7XG4gICAgICBjaG9pY2VTdHIgPSBjb2xvcnMuY3lhbihjaG9pY2VTdHIpO1xuICAgIH1cblxuICAgIG91dHB1dCArPSBjaG9pY2VTdHI7XG4gIH0pO1xuXG4gIHJldHVybiBvdXRwdXQ7XG59XG4iLCIvKipcbiAqIGBsaXN0YCB0eXBlIHByb21wdFxuICovXG5cbmltcG9ydCBhbnNpRXNjYXBlcyBmcm9tICdhbnNpLWVzY2FwZXMnO1xuaW1wb3J0IGNvbG9ycyBmcm9tICd5b2N0b2NvbG9ycy1janMnO1xuaW1wb3J0IGZpZ3VyZXMgZnJvbSAnQGlucXVpcmVyL2ZpZ3VyZXMnO1xuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCBvYnNlcnZlIGZyb20gJy4uL3V0aWxzL2V2ZW50cy5qcyc7XG5pbXBvcnQgUGFnaW5hdG9yIGZyb20gJy4uL3V0aWxzL3BhZ2luYXRvci5qcyc7XG5pbXBvcnQgaW5jcmVtZW50TGlzdEluZGV4IGZyb20gJy4uL3V0aWxzL2luY3JlbWVudExpc3RJbmRleC5qcyc7XG5pbXBvcnQgQmFzZSBmcm9tICcuL2Jhc2UuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGVja2JveFByb21wdCBleHRlbmRzIEJhc2Uge1xuICBjb25zdHJ1Y3RvcihxdWVzdGlvbnMsIHJsLCBhbnN3ZXJzKSB7XG4gICAgc3VwZXIocXVlc3Rpb25zLCBybCwgYW5zd2Vycyk7XG5cbiAgICBpZiAoIXRoaXMub3B0LmNob2ljZXMpIHtcbiAgICAgIHRoaXMudGhyb3dQYXJhbUVycm9yKCdjaG9pY2VzJyk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5vcHQuZGVmYXVsdCkpIHtcbiAgICAgIGZvciAoY29uc3QgY2hvaWNlIG9mIHRoaXMub3B0LmNob2ljZXMpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0LmRlZmF1bHQuaW5jbHVkZXMoY2hvaWNlLnZhbHVlKSkge1xuICAgICAgICAgIGNob2ljZS5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucG9pbnRlciA9IDA7XG5cbiAgICAvLyBNYWtlIHN1cmUgbm8gZGVmYXVsdCBpcyBzZXQgKHNvIGl0IHdvbid0IGJlIHByaW50ZWQpXG4gICAgdGhpcy5vcHQuZGVmYXVsdCA9IG51bGw7XG5cbiAgICBjb25zdCBzaG91bGRMb29wID0gdGhpcy5vcHQubG9vcCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHRoaXMub3B0Lmxvb3A7XG4gICAgdGhpcy5wYWdpbmF0b3IgPSBuZXcgUGFnaW5hdG9yKHRoaXMuc2NyZWVuLCB7IGlzSW5maW5pdGU6IHNob3VsZExvb3AgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgdGhlIElucXVpcnkgc2Vzc2lvblxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2IgICAgICBDYWxsYmFjayB3aGVuIHByb21wdCBpcyBkb25lXG4gICAqIEByZXR1cm4ge3RoaXN9XG4gICAqL1xuXG4gIF9ydW4oY2IpIHtcbiAgICB0aGlzLmRvbmUgPSBjYjtcblxuICAgIGNvbnN0IGV2ZW50cyA9IG9ic2VydmUodGhpcy5ybCk7XG5cbiAgICBjb25zdCB2YWxpZGF0aW9uID0gdGhpcy5oYW5kbGVTdWJtaXRFdmVudHMoXG4gICAgICBldmVudHMubGluZS5waXBlKG1hcCh0aGlzLmdldEN1cnJlbnRWYWx1ZS5iaW5kKHRoaXMpKSksXG4gICAgKTtcbiAgICB2YWxpZGF0aW9uLnN1Y2Nlc3MuZm9yRWFjaCh0aGlzLm9uRW5kLmJpbmQodGhpcykpO1xuICAgIHZhbGlkYXRpb24uZXJyb3IuZm9yRWFjaCh0aGlzLm9uRXJyb3IuYmluZCh0aGlzKSk7XG5cbiAgICBldmVudHMubm9ybWFsaXplZFVwS2V5XG4gICAgICAucGlwZSh0YWtlVW50aWwodmFsaWRhdGlvbi5zdWNjZXNzKSlcbiAgICAgIC5mb3JFYWNoKHRoaXMub25VcEtleS5iaW5kKHRoaXMpKTtcbiAgICBldmVudHMubm9ybWFsaXplZERvd25LZXlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh2YWxpZGF0aW9uLnN1Y2Nlc3MpKVxuICAgICAgLmZvckVhY2godGhpcy5vbkRvd25LZXkuYmluZCh0aGlzKSk7XG4gICAgZXZlbnRzLm51bWJlcktleVxuICAgICAgLnBpcGUodGFrZVVudGlsKHZhbGlkYXRpb24uc3VjY2VzcykpXG4gICAgICAuZm9yRWFjaCh0aGlzLm9uTnVtYmVyS2V5LmJpbmQodGhpcykpO1xuICAgIGV2ZW50cy5zcGFjZUtleVxuICAgICAgLnBpcGUodGFrZVVudGlsKHZhbGlkYXRpb24uc3VjY2VzcykpXG4gICAgICAuZm9yRWFjaCh0aGlzLm9uU3BhY2VLZXkuYmluZCh0aGlzKSk7XG4gICAgZXZlbnRzLmFLZXkucGlwZSh0YWtlVW50aWwodmFsaWRhdGlvbi5zdWNjZXNzKSkuZm9yRWFjaCh0aGlzLm9uQWxsS2V5LmJpbmQodGhpcykpO1xuICAgIGV2ZW50cy5pS2V5LnBpcGUodGFrZVVudGlsKHZhbGlkYXRpb24uc3VjY2VzcykpLmZvckVhY2godGhpcy5vbkludmVyc2VLZXkuYmluZCh0aGlzKSk7XG5cbiAgICAvLyBJbml0IHRoZSBwcm9tcHRcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMuZmlyc3RSZW5kZXIgPSBmYWxzZTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgcHJvbXB0IHRvIHNjcmVlblxuICAgKiBAcmV0dXJuIHtDaGVja2JveFByb21wdH0gc2VsZlxuICAgKi9cblxuICByZW5kZXIoZXJyb3IpIHtcbiAgICAvLyBSZW5kZXIgcXVlc3Rpb25cbiAgICBsZXQgbWVzc2FnZSA9IHRoaXMuZ2V0UXVlc3Rpb24oKTtcbiAgICBsZXQgYm90dG9tQ29udGVudCA9ICcnO1xuXG4gICAgaWYgKCF0aGlzLmRvbnRTaG93SGludHMpIHtcbiAgICAgIG1lc3NhZ2UgKz1cbiAgICAgICAgJyhQcmVzcyAnICtcbiAgICAgICAgY29sb3JzLmN5YW4oY29sb3JzLmJvbGQoJzxzcGFjZT4nKSkgK1xuICAgICAgICAnIHRvIHNlbGVjdCwgJyArXG4gICAgICAgIGNvbG9ycy5jeWFuKGNvbG9ycy5ib2xkKCc8YT4nKSkgK1xuICAgICAgICAnIHRvIHRvZ2dsZSBhbGwsICcgK1xuICAgICAgICBjb2xvcnMuY3lhbihjb2xvcnMuYm9sZCgnPGk+JykpICtcbiAgICAgICAgJyB0byBpbnZlcnQgc2VsZWN0aW9uLCBhbmQgJyArXG4gICAgICAgIGNvbG9ycy5jeWFuKGNvbG9ycy5ib2xkKCc8ZW50ZXI+JykpICtcbiAgICAgICAgJyB0byBwcm9jZWVkKSc7XG4gICAgfVxuXG4gICAgLy8gUmVuZGVyIGNob2ljZXMgb3IgYW5zd2VyIGRlcGVuZGluZyBvbiB0aGUgc3RhdGVcbiAgICBpZiAodGhpcy5zdGF0dXMgPT09ICdhbnN3ZXJlZCcpIHtcbiAgICAgIG1lc3NhZ2UgKz0gY29sb3JzLmN5YW4odGhpcy5zZWxlY3Rpb24uam9pbignLCAnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNob2ljZXNTdHIgPSByZW5kZXJDaG9pY2VzKHRoaXMub3B0LmNob2ljZXMsIHRoaXMucG9pbnRlcik7XG4gICAgICBjb25zdCBpbmRleFBvc2l0aW9uID0gdGhpcy5vcHQuY2hvaWNlcy5pbmRleE9mKFxuICAgICAgICB0aGlzLm9wdC5jaG9pY2VzLmdldENob2ljZSh0aGlzLnBvaW50ZXIpLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlYWxJbmRleFBvc2l0aW9uID1cbiAgICAgICAgdGhpcy5vcHQuY2hvaWNlcy5yZWR1Y2UoKGFjYywgdmFsdWUsIGkpID0+IHtcbiAgICAgICAgICAvLyBEb250IGNvdW50IGxpbmVzIHBhc3QgdGhlIGNob2ljZSB3ZSBhcmUgbG9va2luZyBhdFxuICAgICAgICAgIGlmIChpID4gaW5kZXhQb3NpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQWRkIGxpbmUgaWYgaXQncyBhIHNlcGFyYXRvclxuICAgICAgICAgIGlmICh2YWx1ZS50eXBlID09PSAnc2VwYXJhdG9yJykge1xuICAgICAgICAgICAgcmV0dXJuIGFjYyArIDE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGwgPSB2YWx1ZS5uYW1lO1xuICAgICAgICAgIC8vIE5vbi1zdHJpbmdzIHRha2UgdXAgb25lIGxpbmVcbiAgICAgICAgICBpZiAodHlwZW9mIGwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjICsgMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDYWxjdWxhdGUgbGluZXMgdGFrZW4gdXAgYnkgc3RyaW5nXG4gICAgICAgICAgbCA9IGwuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgIHJldHVybiBhY2MgKyBsLmxlbmd0aDtcbiAgICAgICAgfSwgMCkgLSAxO1xuICAgICAgbWVzc2FnZSArPVxuICAgICAgICAnXFxuJyArIHRoaXMucGFnaW5hdG9yLnBhZ2luYXRlKGNob2ljZXNTdHIsIHJlYWxJbmRleFBvc2l0aW9uLCB0aGlzLm9wdC5wYWdlU2l6ZSk7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBib3R0b21Db250ZW50ID0gY29sb3JzLnJlZCgnPj4gJykgKyBlcnJvcjtcbiAgICB9XG5cbiAgICBtZXNzYWdlICs9IGFuc2lFc2NhcGVzLmN1cnNvckhpZGU7XG5cbiAgICB0aGlzLnNjcmVlbi5yZW5kZXIobWVzc2FnZSwgYm90dG9tQ29udGVudCk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB1c2VyIHByZXNzIGBlbnRlcmAga2V5XG4gICAqL1xuXG4gIG9uRW5kKHN0YXRlKSB7XG4gICAgdGhpcy5zdGF0dXMgPSAnYW5zd2VyZWQnO1xuICAgIHRoaXMuZG9udFNob3dIaW50cyA9IHRydWU7XG4gICAgLy8gUmVyZW5kZXIgcHJvbXB0IChhbmQgY2xlYW4gc3VibGluZSBlcnJvcilcbiAgICB0aGlzLnJlbmRlcigpO1xuXG4gICAgdGhpcy5zY3JlZW4uZG9uZSgpO1xuICAgIHRoaXMuZG9uZShzdGF0ZS52YWx1ZSk7XG4gIH1cblxuICBvbkVycm9yKHN0YXRlKSB7XG4gICAgdGhpcy5yZW5kZXIoc3RhdGUuaXNWYWxpZCk7XG4gIH1cblxuICBnZXRDdXJyZW50VmFsdWUoKSB7XG4gICAgY29uc3QgY2hvaWNlcyA9IHRoaXMub3B0LmNob2ljZXMuZmlsdGVyKFxuICAgICAgKGNob2ljZSkgPT4gQm9vbGVhbihjaG9pY2UuY2hlY2tlZCkgJiYgIWNob2ljZS5kaXNhYmxlZCxcbiAgICApO1xuXG4gICAgdGhpcy5zZWxlY3Rpb24gPSBjaG9pY2VzLm1hcCgoY2hvaWNlKSA9PiBjaG9pY2Uuc2hvcnQpO1xuICAgIHJldHVybiBjaG9pY2VzLm1hcCgoY2hvaWNlKSA9PiBjaG9pY2UudmFsdWUpO1xuICB9XG5cbiAgb25VcEtleSgpIHtcbiAgICB0aGlzLnBvaW50ZXIgPSBpbmNyZW1lbnRMaXN0SW5kZXgodGhpcy5wb2ludGVyLCAndXAnLCB0aGlzLm9wdCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG9uRG93bktleSgpIHtcbiAgICB0aGlzLnBvaW50ZXIgPSBpbmNyZW1lbnRMaXN0SW5kZXgodGhpcy5wb2ludGVyLCAnZG93bicsIHRoaXMub3B0KTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgb25OdW1iZXJLZXkoaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgPD0gdGhpcy5vcHQuY2hvaWNlcy5yZWFsTGVuZ3RoKSB7XG4gICAgICB0aGlzLnBvaW50ZXIgPSBpbnB1dCAtIDE7XG4gICAgICB0aGlzLnRvZ2dsZUNob2ljZSh0aGlzLnBvaW50ZXIpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBvblNwYWNlS2V5KCkge1xuICAgIHRoaXMudG9nZ2xlQ2hvaWNlKHRoaXMucG9pbnRlcik7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG9uQWxsS2V5KCkge1xuICAgIGNvbnN0IHNob3VsZEJlQ2hlY2tlZCA9IHRoaXMub3B0LmNob2ljZXMuc29tZShcbiAgICAgIChjaG9pY2UpID0+IGNob2ljZS50eXBlICE9PSAnc2VwYXJhdG9yJyAmJiAhY2hvaWNlLmNoZWNrZWQsXG4gICAgKTtcblxuICAgIHRoaXMub3B0LmNob2ljZXMuZm9yRWFjaCgoY2hvaWNlKSA9PiB7XG4gICAgICBpZiAoY2hvaWNlLnR5cGUgIT09ICdzZXBhcmF0b3InKSB7XG4gICAgICAgIGNob2ljZS5jaGVja2VkID0gc2hvdWxkQmVDaGVja2VkO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG9uSW52ZXJzZUtleSgpIHtcbiAgICB0aGlzLm9wdC5jaG9pY2VzLmZvckVhY2goKGNob2ljZSkgPT4ge1xuICAgICAgaWYgKGNob2ljZS50eXBlICE9PSAnc2VwYXJhdG9yJykge1xuICAgICAgICBjaG9pY2UuY2hlY2tlZCA9ICFjaG9pY2UuY2hlY2tlZDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICB0b2dnbGVDaG9pY2UoaW5kZXgpIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5vcHQuY2hvaWNlcy5nZXRDaG9pY2UoaW5kZXgpO1xuICAgIGlmIChpdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub3B0LmNob2ljZXMuZ2V0Q2hvaWNlKGluZGV4KS5jaGVja2VkID0gIWl0ZW0uY2hlY2tlZDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGdW5jdGlvbiBmb3IgcmVuZGVyaW5nIGNoZWNrYm94IGNob2ljZXNcbiAqIEBwYXJhbSAge051bWJlcn0gcG9pbnRlciBQb3NpdGlvbiBvZiB0aGUgcG9pbnRlclxuICogQHJldHVybiB7U3RyaW5nfSAgICAgICAgIFJlbmRlcmVkIGNvbnRlbnRcbiAqL1xuXG5mdW5jdGlvbiByZW5kZXJDaG9pY2VzKGNob2ljZXMsIHBvaW50ZXIpIHtcbiAgbGV0IG91dHB1dCA9ICcnO1xuICBsZXQgc2VwYXJhdG9yT2Zmc2V0ID0gMDtcblxuICBjaG9pY2VzLmZvckVhY2goKGNob2ljZSwgaSkgPT4ge1xuICAgIGlmIChjaG9pY2UudHlwZSA9PT0gJ3NlcGFyYXRvcicpIHtcbiAgICAgIHNlcGFyYXRvck9mZnNldCsrO1xuICAgICAgb3V0cHV0ICs9ICcgJyArIGNob2ljZSArICdcXG4nO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjaG9pY2UuZGlzYWJsZWQpIHtcbiAgICAgIHNlcGFyYXRvck9mZnNldCsrO1xuICAgICAgb3V0cHV0ICs9ICcgLSAnICsgY2hvaWNlLm5hbWU7XG4gICAgICBvdXRwdXQgKz0gYCAoJHtcbiAgICAgICAgdHlwZW9mIGNob2ljZS5kaXNhYmxlZCA9PT0gJ3N0cmluZycgPyBjaG9pY2UuZGlzYWJsZWQgOiAnRGlzYWJsZWQnXG4gICAgICB9KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxpbmUgPSBnZXRDaGVja2JveChjaG9pY2UuY2hlY2tlZCkgKyAnICcgKyBjaG9pY2UubmFtZTtcbiAgICAgIG91dHB1dCArPVxuICAgICAgICBpIC0gc2VwYXJhdG9yT2Zmc2V0ID09PSBwb2ludGVyXG4gICAgICAgICAgPyBjb2xvcnMuY3lhbihmaWd1cmVzLnBvaW50ZXIgKyBsaW5lKVxuICAgICAgICAgIDogJyAnICsgbGluZTtcbiAgICB9XG5cbiAgICBvdXRwdXQgKz0gJ1xcbic7XG4gIH0pO1xuXG4gIHJldHVybiBvdXRwdXQucmVwbGFjZUFsbCgvXFxuJC9nLCAnJyk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBjaGVja2JveFxuICogQHBhcmFtICB7Qm9vbGVhbn0gY2hlY2tlZCAtIGFkZCBhIFggb3Igbm90IHRvIHRoZSBjaGVja2JveFxuICogQHJldHVybiB7U3RyaW5nfSBDb21wb3NpdGVkIGNoZWNrYm94IHN0cmluZ1xuICovXG5cbmZ1bmN0aW9uIGdldENoZWNrYm94KGNoZWNrZWQpIHtcbiAgcmV0dXJuIGNoZWNrZWQgPyBjb2xvcnMuZ3JlZW4oZmlndXJlcy5yYWRpb09uKSA6IGZpZ3VyZXMucmFkaW9PZmY7XG59XG4iLCIvKipcbiAqIGBwYXNzd29yZGAgdHlwZSBwcm9tcHRcbiAqL1xuXG5pbXBvcnQgY29sb3JzIGZyb20gJ3lvY3RvY29sb3JzLWNqcyc7XG5pbXBvcnQgeyBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IG9ic2VydmUgZnJvbSAnLi4vdXRpbHMvZXZlbnRzLmpzJztcbmltcG9ydCBCYXNlIGZyb20gJy4vYmFzZS5qcyc7XG5cbmZ1bmN0aW9uIG1hc2soaW5wdXQsIG1hc2tDaGFyKSB7XG4gIGlucHV0ID0gU3RyaW5nKGlucHV0KTtcbiAgbWFza0NoYXIgPSB0eXBlb2YgbWFza0NoYXIgPT09ICdzdHJpbmcnID8gbWFza0NoYXIgOiAnKic7XG4gIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogaW5wdXQubGVuZ3RoICsgMSB9KS5qb2luKG1hc2tDaGFyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFzc3dvcmRQcm9tcHQgZXh0ZW5kcyBCYXNlIHtcbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSBJbnF1aXJ5IHNlc3Npb25cbiAgICogQHBhcmFtICB7RnVuY3Rpb259IGNiICAgICAgQ2FsbGJhY2sgd2hlbiBwcm9tcHQgaXMgZG9uZVxuICAgKiBAcmV0dXJuIHt0aGlzfVxuICAgKi9cblxuICBfcnVuKGNiKSB7XG4gICAgdGhpcy5kb25lID0gY2I7XG5cbiAgICBjb25zdCBldmVudHMgPSBvYnNlcnZlKHRoaXMucmwpO1xuXG4gICAgLy8gT25jZSB1c2VyIGNvbmZpcm0gKGVudGVyIGtleSlcbiAgICBjb25zdCBzdWJtaXQgPSBldmVudHMubGluZS5waXBlKG1hcCh0aGlzLmZpbHRlcklucHV0LmJpbmQodGhpcykpKTtcblxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0aGlzLmhhbmRsZVN1Ym1pdEV2ZW50cyhzdWJtaXQpO1xuICAgIHZhbGlkYXRpb24uc3VjY2Vzcy5mb3JFYWNoKHRoaXMub25FbmQuYmluZCh0aGlzKSk7XG4gICAgdmFsaWRhdGlvbi5lcnJvci5mb3JFYWNoKHRoaXMub25FcnJvci5iaW5kKHRoaXMpKTtcblxuICAgIGV2ZW50cy5rZXlwcmVzc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHZhbGlkYXRpb24uc3VjY2VzcykpXG4gICAgICAuZm9yRWFjaCh0aGlzLm9uS2V5cHJlc3MuYmluZCh0aGlzKSk7XG5cbiAgICAvLyBJbml0XG4gICAgdGhpcy5yZW5kZXIoKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgcHJvbXB0IHRvIHNjcmVlblxuICAgKiBAcmV0dXJuIHtQYXNzd29yZFByb21wdH0gc2VsZlxuICAgKi9cblxuICByZW5kZXIoZXJyb3IpIHtcbiAgICBsZXQgbWVzc2FnZSA9IHRoaXMuZ2V0UXVlc3Rpb24oKTtcbiAgICBsZXQgYm90dG9tQ29udGVudCA9ICcnO1xuXG4gICAgbWVzc2FnZSArPVxuICAgICAgdGhpcy5zdGF0dXMgPT09ICdhbnN3ZXJlZCdcbiAgICAgICAgPyB0aGlzLmdldE1hc2tlZFZhbHVlKHRoaXMuYW5zd2VyKVxuICAgICAgICA6IHRoaXMuZ2V0TWFza2VkVmFsdWUodGhpcy5ybC5saW5lIHx8ICcnKTtcblxuICAgIGlmIChlcnJvcikge1xuICAgICAgYm90dG9tQ29udGVudCA9ICdcXG4nICsgY29sb3JzLnJlZCgnPj4gJykgKyBlcnJvcjtcbiAgICB9XG5cbiAgICB0aGlzLnNjcmVlbi5yZW5kZXIobWVzc2FnZSwgYm90dG9tQ29udGVudCk7XG4gIH1cblxuICBnZXRNYXNrZWRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gJ2Fuc3dlcmVkJykge1xuICAgICAgcmV0dXJuIHRoaXMub3B0Lm1hc2tcbiAgICAgICAgPyBjb2xvcnMuY3lhbihtYXNrKHZhbHVlLCB0aGlzLm9wdC5tYXNrKSlcbiAgICAgICAgOiBjb2xvcnMuaXRhbGljKGNvbG9ycy5kaW0oJ1toaWRkZW5dJykpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHQubWFza1xuICAgICAgPyBtYXNrKHZhbHVlLCB0aGlzLm9wdC5tYXNrKVxuICAgICAgOiBjb2xvcnMuaXRhbGljKGNvbG9ycy5kaW0oJ1tpbnB1dCBpcyBoaWRkZW5dICcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXNrIHZhbHVlIGR1cmluZyBhc3luYyBmaWx0ZXIvdmFsaWRhdGlvbi5cbiAgICovXG4gIGdldFNwaW5uaW5nVmFsdWUodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRNYXNrZWRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB1c2VyIHByZXNzIGBlbnRlcmAga2V5XG4gICAqL1xuXG4gIGZpbHRlcklucHV0KGlucHV0KSB7XG4gICAgaWYgKCFpbnB1dCkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0LmRlZmF1bHQgPT0gbnVsbCA/ICcnIDogdGhpcy5vcHQuZGVmYXVsdDtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cblxuICBvbkVuZChzdGF0ZSkge1xuICAgIHRoaXMuc3RhdHVzID0gJ2Fuc3dlcmVkJztcbiAgICB0aGlzLmFuc3dlciA9IHN0YXRlLnZhbHVlO1xuXG4gICAgLy8gUmUtcmVuZGVyIHByb21wdFxuICAgIHRoaXMucmVuZGVyKCk7XG5cbiAgICB0aGlzLnNjcmVlbi5kb25lKCk7XG4gICAgdGhpcy5kb25lKHN0YXRlLnZhbHVlKTtcbiAgfVxuXG4gIG9uRXJyb3Ioc3RhdGUpIHtcbiAgICB0aGlzLnJlbmRlcihzdGF0ZS5pc1ZhbGlkKTtcbiAgfVxuXG4gIG9uS2V5cHJlc3MoKSB7XG4gICAgLy8gSWYgdXNlciBwcmVzcyBhIGtleSwganVzdCBjbGVhciB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgIHRoaXMub3B0LmRlZmF1bHQgJiY9IHVuZGVmaW5lZDtcblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cbn1cbiIsIlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihkZXQsIHJlYywgY29uZmlkZW5jZSwgbmFtZSwgbGFuZykge1xuICB0aGlzLmNvbmZpZGVuY2UgPSBjb25maWRlbmNlO1xuICB0aGlzLm5hbWUgPSBuYW1lIHx8IHJlYy5uYW1lKGRldCk7XG4gIHRoaXMubGFuZyA9IGxhbmc7XG59O1xuIiwiXG52YXIgTWF0Y2ggPSByZXF1aXJlICgnLi4vbWF0Y2gnKTtcblxuLyoqXG4gKiBDaGFyc2V0IHJlY29nbml6ZXIgZm9yIFVURi04XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMubmFtZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnVVRGLTgnO1xuICB9O1xuICB0aGlzLm1hdGNoID0gZnVuY3Rpb24oZGV0KSB7XG5cbiAgICB2YXIgaGFzQk9NID0gZmFsc2UsXG4gICAgICBudW1WYWxpZCA9IDAsXG4gICAgICBudW1JbnZhbGlkID0gMCxcbiAgICAgIGlucHV0ID0gZGV0LmZSYXdJbnB1dCxcbiAgICAgIHRyYWlsQnl0ZXMgPSAwLFxuICAgICAgY29uZmlkZW5jZTtcblxuICAgIGlmIChkZXQuZlJhd0xlbmd0aCA+PSAzICYmXG4gICAgICAoaW5wdXRbMF0gJiAweGZmKSA9PSAweGVmICYmIChpbnB1dFsxXSAmIDB4ZmYpID09IDB4YmIgJiYgKGlucHV0WzJdICYgMHhmZikgPT0gMHhiZikge1xuICAgICAgaGFzQk9NID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBTY2FuIGZvciBtdWx0aS1ieXRlIHNlcXVlbmNlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGV0LmZSYXdMZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGIgPSBpbnB1dFtpXTtcbiAgICAgIGlmICgoYiAmIDB4ODApID09IDApXG4gICAgICAgIGNvbnRpbnVlOyAvLyBBU0NJSVxuXG4gICAgICAvLyBIaSBiaXQgb24gY2hhciBmb3VuZC4gIEZpZ3VyZSBvdXQgaG93IGxvbmcgdGhlIHNlcXVlbmNlIHNob3VsZCBiZVxuICAgICAgaWYgKChiICYgMHgwZTApID09IDB4MGMwKSB7XG4gICAgICAgIHRyYWlsQnl0ZXMgPSAxO1xuICAgICAgfSBlbHNlIGlmICgoYiAmIDB4MGYwKSA9PSAweDBlMCkge1xuICAgICAgICB0cmFpbEJ5dGVzID0gMjtcbiAgICAgIH0gZWxzZSBpZiAoKGIgJiAweDBmOCkgPT0gMHhmMCkge1xuICAgICAgICB0cmFpbEJ5dGVzID0gMztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG51bUludmFsaWQrKztcbiAgICAgICAgaWYgKG51bUludmFsaWQgPiA1KVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB0cmFpbEJ5dGVzID0gMDtcbiAgICAgIH1cblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgd2UndmUgZ290IHRoZSByaWdodCBudW1iZXIgb2YgdHJhaWwgYnl0ZXMgaW4gdGhlIHNlcXVlbmNlXG4gICAgICBmb3IgKDs7KSB7XG4gICAgICAgIGkrKztcbiAgICAgICAgaWYgKGkgPj0gZGV0LmZSYXdMZW5ndGgpXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgaWYgKChpbnB1dFtpXSAmIDB4YzApICE9IDB4MDgwKSB7XG4gICAgICAgICAgbnVtSW52YWxpZCsrO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmICgtLXRyYWlsQnl0ZXMgPT0gMCkge1xuICAgICAgICAgIG51bVZhbGlkKys7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDb29rIHVwIHNvbWUgc29ydCBvZiBjb25maWRlbmNlIHNjb3JlLCBiYXNlZCBvbiBwcmVzZW5zZSBvZiBhIEJPTVxuICAgIC8vICAgIGFuZCB0aGUgZXhpc3RlbmNlIG9mIHZhbGlkIGFuZC9vciBpbnZhbGlkIG11bHRpLWJ5dGUgc2VxdWVuY2VzLlxuICAgIGNvbmZpZGVuY2UgPSAwO1xuICAgIGlmIChoYXNCT00gJiYgbnVtSW52YWxpZCA9PSAwKVxuICAgICAgY29uZmlkZW5jZSA9IDEwMDtcbiAgICBlbHNlIGlmIChoYXNCT00gJiYgbnVtVmFsaWQgPiBudW1JbnZhbGlkICogMTApXG4gICAgICBjb25maWRlbmNlID0gODA7XG4gICAgZWxzZSBpZiAobnVtVmFsaWQgPiAzICYmIG51bUludmFsaWQgPT0gMClcbiAgICAgIGNvbmZpZGVuY2UgPSAxMDA7XG4gICAgZWxzZSBpZiAobnVtVmFsaWQgPiAwICYmIG51bUludmFsaWQgPT0gMClcbiAgICAgIGNvbmZpZGVuY2UgPSA4MDtcbiAgICBlbHNlIGlmIChudW1WYWxpZCA9PSAwICYmIG51bUludmFsaWQgPT0gMClcbiAgICAgIC8vIFBsYWluIEFTQ0lJLlxuICAgICAgY29uZmlkZW5jZSA9IDEwO1xuICAgIGVsc2UgaWYgKG51bVZhbGlkID4gbnVtSW52YWxpZCAqIDEwKVxuICAgICAgLy8gUHJvYmFibHkgY29ycnVwdXQgdXRmLTggZGF0YS4gIFZhbGlkIHNlcXVlbmNlcyBhcmVuJ3QgbGlrZWx5IGJ5IGNoYW5jZS5cbiAgICAgIGNvbmZpZGVuY2UgPSAyNTtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gbnVsbFxuXG4gICAgcmV0dXJuIG5ldyBNYXRjaChkZXQsIHRoaXMsIGNvbmZpZGVuY2UpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpLFxuICBNYXRjaCA9IHJlcXVpcmUgKCcuLi9tYXRjaCcpO1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgbWF0Y2hlcyBVVEYtMTYgYW5kIFVURi0zMiwgYm90aCBiaWctIGFuZCBsaXR0bGUtZW5kaWFuLiBUaGVcbiAqIEJPTSB3aWxsIGJlIHVzZWQgaWYgaXQgaXMgcHJlc2VudC5cbiAqL1xubW9kdWxlLmV4cG9ydHMuVVRGXzE2QkUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5uYW1lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICdVVEYtMTZCRSc7XG4gIH07XG4gIHRoaXMubWF0Y2ggPSBmdW5jdGlvbihkZXQpIHtcbiAgICB2YXIgaW5wdXQgPSBkZXQuZlJhd0lucHV0O1xuXG4gICAgaWYgKGlucHV0Lmxlbmd0aCA+PSAyICYmICgoaW5wdXRbMF0gJiAweGZmKSA9PSAweGZlICYmIChpbnB1dFsxXSAmIDB4ZmYpID09IDB4ZmYpKSB7XG4gICAgICByZXR1cm4gbmV3IE1hdGNoKGRldCwgdGhpcywgMTAwKTsgLy8gY29uZmlkZW5jZSA9IDEwMFxuICAgIH1cblxuICAgIC8vIFRPRE86IERvIHNvbWUgc3RhdGlzdGljcyB0byBjaGVjayBmb3IgdW5zaWduZWQgVVRGLTE2QkVcbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLlVURl8xNkxFID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMubmFtZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnVVRGLTE2TEUnO1xuICB9O1xuICB0aGlzLm1hdGNoID0gZnVuY3Rpb24oZGV0KSB7XG4gICAgdmFyIGlucHV0ID0gZGV0LmZSYXdJbnB1dDtcblxuICAgIGlmIChpbnB1dC5sZW5ndGggPj0gMiAmJiAoKGlucHV0WzBdICYgMHhmZikgPT0gMHhmZiAmJiAoaW5wdXRbMV0gJiAweGZmKSA9PSAweGZlKSkge1xuICAgICAgLy8gTEUgQk9NIGlzIHByZXNlbnQuXG4gICAgICBpZiAoaW5wdXQubGVuZ3RoID49IDQgJiYgaW5wdXRbMl0gPT0gMHgwMCAmJiBpbnB1dFszXSA9PSAweDAwKSB7XG4gICAgICAgIC8vIEl0IGlzIHByb2JhYmx5IFVURi0zMiBMRSwgbm90IFVURi0xNlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgTWF0Y2goZGV0LCB0aGlzLCAxMDApOyAvLyBjb25maWRlbmNlID0gMTAwXG4gICAgfVxuXG4gICAgLy8gVE9ETzogRG8gc29tZSBzdGF0aXN0aWNzIHRvIGNoZWNrIGZvciB1bnNpZ25lZCBVVEYtMTZMRVxuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5mdW5jdGlvbiBVVEZfMzIoKSB7fTtcblVURl8zMi5wcm90b3R5cGUubWF0Y2ggPSBmdW5jdGlvbihkZXQpIHtcbiAgdmFyIGlucHV0ICAgICAgPSBkZXQuZlJhd0lucHV0LFxuICAgIGxpbWl0ICAgICAgPSAoZGV0LmZSYXdMZW5ndGggLyA0KSAqIDQsXG4gICAgbnVtVmFsaWQgICA9IDAsXG4gICAgbnVtSW52YWxpZCA9IDAsXG4gICAgaGFzQk9NICAgICA9IGZhbHNlLFxuICAgIGNvbmZpZGVuY2UgPSAwO1xuXG4gIGlmIChsaW1pdCA9PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodGhpcy5nZXRDaGFyKGlucHV0LCAwKSA9PSAweDAwMDBGRUZGKSB7XG4gICAgaGFzQk9NID0gdHJ1ZTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGltaXQ7IGkgKz0gNCkge1xuICAgIHZhciBjaCA9IHRoaXMuZ2V0Q2hhcihpbnB1dCwgaSk7XG5cbiAgICBpZiAoY2ggPCAwIHx8IGNoID49IDB4MTBGRkZGIHx8IChjaCA+PSAweEQ4MDAgJiYgY2ggPD0gMHhERkZGKSkge1xuICAgICAgbnVtSW52YWxpZCArPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1WYWxpZCArPSAxO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvb2sgdXAgc29tZSBzb3J0IG9mIGNvbmZpZGVuY2Ugc2NvcmUsIGJhc2VkIG9uIHByZXNlbmNlIG9mIGEgQk9NXG4gIC8vICAgIGFuZCB0aGUgZXhpc3RlbmNlIG9mIHZhbGlkIGFuZC9vciBpbnZhbGlkIG11bHRpLWJ5dGUgc2VxdWVuY2VzLlxuICBpZiAoaGFzQk9NICYmIG51bUludmFsaWQgPT0gMCkge1xuICAgIGNvbmZpZGVuY2UgPSAxMDA7XG4gIH0gZWxzZSBpZiAoaGFzQk9NICYmIG51bVZhbGlkID4gbnVtSW52YWxpZCAqIDEwKSB7XG4gICAgY29uZmlkZW5jZSA9IDgwO1xuICB9IGVsc2UgaWYgKG51bVZhbGlkID4gMyAmJiBudW1JbnZhbGlkID09IDApIHtcbiAgICBjb25maWRlbmNlID0gMTAwO1xuICB9IGVsc2UgaWYgKG51bVZhbGlkID4gMCAmJiBudW1JbnZhbGlkID09IDApIHtcbiAgICBjb25maWRlbmNlID0gODA7XG4gIH0gZWxzZSBpZiAobnVtVmFsaWQgPiBudW1JbnZhbGlkICogMTApIHtcbiAgICAvLyBQcm9iYWJseSBjb3JydXB0IFVURi0zMkJFIGRhdGEuICBWYWxpZCBzZXF1ZW5jZXMgYXJlbid0IGxpa2VseSBieSBjaGFuY2UuXG4gICAgY29uZmlkZW5jZSA9IDI1O1xuICB9XG5cbiAgLy8gcmV0dXJuIGNvbmZpZGVuY2UgPT0gMCA/IG51bGwgOiBuZXcgQ2hhcnNldE1hdGNoKGRldCwgdGhpcywgY29uZmlkZW5jZSk7XG4gIHJldHVybiBjb25maWRlbmNlID09IDAgPyBudWxsIDogbmV3IE1hdGNoKGRldCwgdGhpcywgY29uZmlkZW5jZSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5VVEZfMzJCRSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLm5hbWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ1VURi0zMkJFJztcbiAgfTtcbiAgdGhpcy5nZXRDaGFyID0gZnVuY3Rpb24oaW5wdXQsIGluZGV4KSB7XG4gICAgcmV0dXJuIChpbnB1dFtpbmRleCArIDBdICYgMHhmZikgPDwgMjQgfCAoaW5wdXRbaW5kZXggKyAxXSAmIDB4ZmYpIDw8IDE2IHxcbiAgICAgICAgIChpbnB1dFtpbmRleCArIDJdICYgMHhmZikgPDwgIDggfCAoaW5wdXRbaW5kZXggKyAzXSAmIDB4ZmYpO1xuICB9O1xufTtcbnV0aWwuaW5oZXJpdHMobW9kdWxlLmV4cG9ydHMuVVRGXzMyQkUsIFVURl8zMik7XG5cbm1vZHVsZS5leHBvcnRzLlVURl8zMkxFID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMubmFtZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnVVRGLTMyTEUnO1xuICB9O1xuICB0aGlzLmdldENoYXIgPSBmdW5jdGlvbihpbnB1dCwgaW5kZXgpIHtcbiAgICByZXR1cm4gKGlucHV0W2luZGV4ICsgM10gJiAweGZmKSA8PCAyNCB8IChpbnB1dFtpbmRleCArIDJdICYgMHhmZikgPDwgMTYgfFxuICAgICAgICAgKGlucHV0W2luZGV4ICsgMV0gJiAweGZmKSA8PCAgOCB8IChpbnB1dFtpbmRleCArIDBdICYgMHhmZik7XG4gIH07XG59O1xudXRpbC5pbmhlcml0cyhtb2R1bGUuZXhwb3J0cy5VVEZfMzJMRSwgVVRGXzMyKTtcbiIsInZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpLFxuICBNYXRjaCA9IHJlcXVpcmUgKCcuLi9tYXRjaCcpO1xuXG4vKipcbiAqIEJpbmFyeSBzZWFyY2ggaW1wbGVtZW50YXRpb24gKHJlY3Vyc2l2ZSlcbiAqL1xuZnVuY3Rpb24gYmluYXJ5U2VhcmNoKGFyciwgc2VhcmNoVmFsdWUpIHtcbiAgZnVuY3Rpb24gZmluZChhcnIsIHNlYXJjaFZhbHVlLCBsZWZ0LCByaWdodCkge1xuICAgIGlmIChyaWdodCA8IGxlZnQpXG4gICAgICByZXR1cm4gLTE7XG5cbiAgICAvKlxuICAgIGludCBtaWQgPSBtaWQgPSAobGVmdCArIHJpZ2h0KSAvIDI7XG4gICAgVGhlcmUgaXMgYSBidWcgaW4gdGhlIGFib3ZlIGxpbmU7XG4gICAgSm9zaHVhIEJsb2NoIHN1Z2dlc3RzIHRoZSBmb2xsb3dpbmcgcmVwbGFjZW1lbnQ6XG4gICAgKi9cbiAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigobGVmdCArIHJpZ2h0KSA+Pj4gMSk7XG4gICAgaWYgKHNlYXJjaFZhbHVlID4gYXJyW21pZF0pXG4gICAgICByZXR1cm4gZmluZChhcnIsIHNlYXJjaFZhbHVlLCBtaWQgKyAxLCByaWdodCk7XG5cbiAgICBpZiAoc2VhcmNoVmFsdWUgPCBhcnJbbWlkXSlcbiAgICAgIHJldHVybiBmaW5kKGFyciwgc2VhcmNoVmFsdWUsIGxlZnQsIG1pZCAtIDEpO1xuXG4gICAgcmV0dXJuIG1pZDtcbiAgfTtcblxuICByZXR1cm4gZmluZChhcnIsIHNlYXJjaFZhbHVlLCAwLCBhcnIubGVuZ3RoIC0gMSk7XG59O1xuXG4vLyAnQ2hhcmFjdGVyJyAgaXRlcmF0ZWQgY2hhcmFjdGVyIGNsYXNzLlxuLy8gICAgUmVjb2duaXplcnMgZm9yIHNwZWNpZmljIG1iY3MgZW5jb2RpbmdzIG1ha2UgdGhlaXIgJ2NoYXJhY3RlcnMnIGF2YWlsYWJsZVxuLy8gICAgYnkgcHJvdmlkaW5nIGEgbmV4dENoYXIoKSBmdW5jdGlvbiB0aGF0IGZpbGxzIGluIGFuIGluc3RhbmNlIG9mIGl0ZXJhdGVkQ2hhclxuLy8gICAgd2l0aCB0aGUgbmV4dCBjaGFyIGZyb20gdGhlIGlucHV0LlxuLy8gICAgVGhlIHJldHVybmVkIGNoYXJhY3RlcnMgYXJlIG5vdCBjb252ZXJ0ZWQgdG8gVW5pY29kZSwgYnV0IHJlbWFpbiBhcyB0aGUgcmF3XG4vLyAgICBieXRlcyAoY29uY2F0ZW5hdGVkIGludG8gYW4gaW50KSBmcm9tIHRoZSBjb2RlcGFnZSBkYXRhLlxuLy9cbi8vICBGb3IgQXNpYW4gY2hhcnNldHMsIHVzZSB0aGUgcmF3IGlucHV0IHJhdGhlciB0aGFuIHRoZSBpbnB1dCB0aGF0IGhhcyBiZWVuXG4vLyAgIHN0cmlwcGVkIG9mIG1hcmt1cC4gIERldGVjdGlvbiBvbmx5IGNvbnNpZGVycyBtdWx0aS1ieXRlIGNoYXJzLCBlZmZlY3RpdmVseVxuLy8gICBzdHJpcHBpbmcgbWFya3VwIGFueXdheSwgYW5kIGRvdWJsZSBieXRlIGNoYXJzIGRvIG9jY3VyIGluIG1hcmt1cCB0b28uXG4vL1xuZnVuY3Rpb24gSXRlcmF0ZWRDaGFyKCkge1xuXG4gIHRoaXMuY2hhclZhbHVlID0gMDsgLy8gMS00IGJ5dGVzIGZyb20gdGhlIHJhdyBpbnB1dCBkYXRhXG4gIHRoaXMuaW5kZXggICAgID0gMDtcbiAgdGhpcy5uZXh0SW5kZXggPSAwO1xuICB0aGlzLmVycm9yICAgICA9IGZhbHNlO1xuICB0aGlzLmRvbmUgICAgICA9IGZhbHNlO1xuXG4gIHRoaXMucmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNoYXJWYWx1ZSA9IDA7XG4gICAgdGhpcy5pbmRleCAgICAgPSAtMTtcbiAgICB0aGlzLm5leHRJbmRleCA9IDA7XG4gICAgdGhpcy5lcnJvciAgICAgPSBmYWxzZTtcbiAgICB0aGlzLmRvbmUgICAgICA9IGZhbHNlO1xuICB9O1xuXG4gIHRoaXMubmV4dEJ5dGUgPSBmdW5jdGlvbihkZXQpIHtcbiAgICBpZiAodGhpcy5uZXh0SW5kZXggPj0gZGV0LmZSYXdMZW5ndGgpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHZhciBieXRlVmFsdWUgPSBkZXQuZlJhd0lucHV0W3RoaXMubmV4dEluZGV4KytdICYgMHgwMGZmO1xuICAgIHJldHVybiBieXRlVmFsdWU7XG4gIH07XG59O1xuXG5cblxuLyoqXG4gKiBBc2lhbiBkb3VibGUgb3IgbXVsdGktYnl0ZSAtIGNoYXJzZXRzLlxuICogTWF0Y2ggaXMgZGV0ZXJtaW5lZCBtb3N0bHkgYnkgdGhlIGlucHV0IGRhdGEgYWRoZXJpbmcgdG8gdGhlXG4gKiBlbmNvZGluZyBzY2hlbWUgZm9yIHRoZSBjaGFyc2V0LCBhbmQsIG9wdGlvbmFsbHksXG4gKiBmcmVxdWVuY3ktb2Ytb2NjdXJlbmNlIG9mIGNoYXJhY3RlcnMuXG4gKi9cblxuZnVuY3Rpb24gbWJjcygpIHt9O1xuXG4vKipcbiAqIFRlc3QgdGhlIG1hdGNoIG9mIHRoaXMgY2hhcnNldCB3aXRoIHRoZSBpbnB1dCB0ZXh0IGRhdGFcbiAqICAgICAgd2hpY2ggaXMgb2J0YWluZWQgdmlhIHRoZSBDaGFyc2V0RGV0ZWN0b3Igb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBkZXQgIFRoZSBDaGFyc2V0RGV0ZWN0b3IsIHdoaWNoIGNvbnRhaW5zIHRoZSBpbnB1dCB0ZXh0XG4gKiAgICAgICAgICAgICB0byBiZSBjaGVja2VkIGZvciBiZWluZyBpbiB0aGlzIGNoYXJzZXQuXG4gKiBAcmV0dXJuICAgICBUd28gdmFsdWVzIHBhY2tlZCBpbnRvIG9uZSBpbnQgIChEYW1uIGphdmEsIGFueWhvdylcbiAqICAgICAgICAgICAgIGJpdHMgMC03OiAgdGhlIG1hdGNoIGNvbmZpZGVuY2UsIHJhbmdpbmcgZnJvbSAwLTEwMFxuICogICAgICAgICAgICAgYml0cyA4LTE1OiBUaGUgbWF0Y2ggcmVhc29uLCBhbiBlbnVtLWxpa2UgdmFsdWUuXG4gKi9cbm1iY3MucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24oZGV0KSB7XG5cbiAgdmFyIHNpbmdsZUJ5dGVDaGFyQ291bnQgPSAwLCAgLy9UT0RPIERvIHdlIHJlYWxseSBuZWVkIHRoaXM/XG4gICAgZG91YmxlQnl0ZUNoYXJDb3VudCA9IDAsXG4gICAgY29tbW9uQ2hhckNvdW50ICAgICA9IDAsXG4gICAgYmFkQ2hhckNvdW50ICAgICAgICA9IDAsXG4gICAgdG90YWxDaGFyQ291bnQgICAgICA9IDAsXG4gICAgY29uZmlkZW5jZSAgICAgICAgICA9IDA7XG5cbiAgdmFyIGl0ZXIgPSBuZXcgSXRlcmF0ZWRDaGFyKCk7XG5cbiAgZGV0ZWN0QmxvY2s6IHtcbiAgICBmb3IgKGl0ZXIucmVzZXQoKTsgdGhpcy5uZXh0Q2hhcihpdGVyLCBkZXQpOykge1xuICAgICAgdG90YWxDaGFyQ291bnQrKztcbiAgICAgIGlmIChpdGVyLmVycm9yKSB7XG4gICAgICAgIGJhZENoYXJDb3VudCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGN2ID0gaXRlci5jaGFyVmFsdWUgJiAweEZGRkZGRkZGO1xuXG4gICAgICAgIGlmIChjdiA8PSAweGZmKSB7XG4gICAgICAgICAgc2luZ2xlQnl0ZUNoYXJDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvdWJsZUJ5dGVDaGFyQ291bnQrKztcbiAgICAgICAgICBpZiAodGhpcy5jb21tb25DaGFycyAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBOT1RFOiBUaGlzIGFzc3VtZXMgdGhhdCB0aGVyZSBhcmUgbm8gNC1ieXRlIGNvbW1vbiBjaGFycy5cbiAgICAgICAgICAgIGlmIChiaW5hcnlTZWFyY2godGhpcy5jb21tb25DaGFycywgY3YpID49IDApIHtcbiAgICAgICAgICAgICAgY29tbW9uQ2hhckNvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYmFkQ2hhckNvdW50ID49IDIgJiYgYmFkQ2hhckNvdW50ICogNSA+PSBkb3VibGVCeXRlQ2hhckNvdW50KSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdpdHMgaGVyZSEnKVxuICAgICAgICAvLyBCYWlsIG91dCBlYXJseSBpZiB0aGUgYnl0ZSBkYXRhIGlzIG5vdCBtYXRjaGluZyB0aGUgZW5jb2Rpbmcgc2NoZW1lLlxuICAgICAgICBicmVhayBkZXRlY3RCbG9jaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZG91YmxlQnl0ZUNoYXJDb3VudCA8PSAxMCAmJiBiYWRDaGFyQ291bnQ9PSAwKSB7XG4gICAgICAvLyBOb3QgbWFueSBtdWx0aS1ieXRlIGNoYXJzLlxuICAgICAgaWYgKGRvdWJsZUJ5dGVDaGFyQ291bnQgPT0gMCAmJiB0b3RhbENoYXJDb3VudCA8IDEwKSB7XG4gICAgICAgIC8vIFRoZXJlIHdlcmVuJ3QgYW55IG11bHRpYnl0ZSBzZXF1ZW5jZXMsIGFuZCB0aGVyZSB3YXMgYSBsb3cgZGVuc2l0eSBvZiBub24tQVNDSUkgc2luZ2xlIGJ5dGVzLlxuICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGVub3VnaCBkYXRhIHRvIGhhdmUgYW55IGNvbmZpZGVuY2UuXG4gICAgICAgIC8vIFN0YXRpc3RpY2FsIGFuYWx5c2lzIG9mIHNpbmdsZSBieXRlIG5vbi1BU0NJSSBjaGFyY3RlcnMgd291bGQgcHJvYmFibHkgaGVscCBoZXJlLlxuICAgICAgICBjb25maWRlbmNlID0gMDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyAgIEFTQ0lJIG9yIElTTyBmaWxlPyAgSXQncyBwcm9iYWJseSBub3Qgb3VyIGVuY29kaW5nLFxuICAgICAgICAvLyAgIGJ1dCBpcyBub3QgaW5jb21wYXRpYmxlIHdpdGggb3VyIGVuY29kaW5nLCBzbyBkb24ndCBnaXZlIGl0IGEgemVyby5cbiAgICAgICAgY29uZmlkZW5jZSA9IDEwO1xuICAgICAgfVxuICAgICAgYnJlYWsgZGV0ZWN0QmxvY2s7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyAgTm8gbWF0Y2ggaWYgdGhlcmUgYXJlIHRvbyBtYW55IGNoYXJhY3RlcnMgdGhhdCBkb24ndCBmaXQgdGhlIGVuY29kaW5nIHNjaGVtZS5cbiAgICAvLyAgICAoc2hvdWxkIHdlIGhhdmUgemVybyB0b2xlcmFuY2UgZm9yIHRoZXNlPylcbiAgICAvL1xuICAgIGlmIChkb3VibGVCeXRlQ2hhckNvdW50IDwgMjAgKiBiYWRDaGFyQ291bnQpIHtcbiAgICAgIGNvbmZpZGVuY2UgPSAwO1xuICAgICAgYnJlYWsgZGV0ZWN0QmxvY2s7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29tbW9uQ2hhcnMgPT0gbnVsbCkge1xuICAgICAgLy8gV2UgaGF2ZSBubyBzdGF0aXN0aWNzIG9uIGZyZXF1ZW50bHkgb2NjdXJpbmcgY2hhcmFjdGVycy5cbiAgICAgIC8vICBBc3Nlc3MgY29uZmlkZW5jZSBwdXJlbHkgb24gaGF2aW5nIGEgcmVhc29uYWJsZSBudW1iZXIgb2ZcbiAgICAgIC8vICBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgKHRoZSBtb3JlIHRoZSBiZXR0ZXJcbiAgICAgIGNvbmZpZGVuY2UgPSAzMCArIGRvdWJsZUJ5dGVDaGFyQ291bnQgLSAyMCAqIGJhZENoYXJDb3VudDtcbiAgICAgIGlmIChjb25maWRlbmNlID4gMTAwKSB7XG4gICAgICAgIGNvbmZpZGVuY2UgPSAxMDA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vXG4gICAgICAvLyBGcmVxdWVuY3kgb2Ygb2NjdXJlbmNlIHN0YXRpc3RpY3MgZXhpc3QuXG4gICAgICAvL1xuICAgICAgdmFyIG1heFZhbCA9IE1hdGgubG9nKHBhcnNlRmxvYXQoZG91YmxlQnl0ZUNoYXJDb3VudCkgLyA0KTtcbiAgICAgIHZhciBzY2FsZUZhY3RvciA9IDkwLjAgLyBtYXhWYWw7XG4gICAgICBjb25maWRlbmNlID0gTWF0aC5mbG9vcihNYXRoLmxvZyhjb21tb25DaGFyQ291bnQgKyAxKSAqIHNjYWxlRmFjdG9yICsgMTApO1xuICAgICAgY29uZmlkZW5jZSA9IE1hdGgubWluKGNvbmZpZGVuY2UsIDEwMCk7XG4gICAgfVxuICB9ICAgLy8gZW5kIG9mIGRldGVjdEJsb2NrOlxuXG4gIHJldHVybiBjb25maWRlbmNlID09IDAgPyBudWxsIDogbmV3IE1hdGNoKGRldCwgdGhpcywgY29uZmlkZW5jZSk7XG59O1xuXG4vKipcbiAqIEdldCB0aGUgbmV4dCBjaGFyYWN0ZXIgKGhvd2V2ZXIgbWFueSBieXRlcyBpdCBpcykgZnJvbSB0aGUgaW5wdXQgZGF0YVxuICogICAgU3ViY2xhc3NlcyBmb3Igc3BlY2lmaWMgY2hhcnNldCBlbmNvZGluZ3MgbXVzdCBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvblxuICogICAgdG8gZ2V0IGNoYXJhY3RlcnMgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGVpciBlbmNvZGluZyBzY2hlbWUuXG4gKlxuICogIFRoaXMgZnVuY3Rpb24gaXMgbm90IGEgbWV0aG9kIG9mIGNsYXNzIGl0ZXJhdGVkQ2hhciBvbmx5IGJlY2F1c2VcbiAqICAgdGhhdCB3b3VsZCByZXF1aXJlIGEgbG90IG9mIGV4dHJhIGRlcml2ZWQgY2xhc3Nlcywgd2hpY2ggaXMgYXdrd2FyZC5cbiAqIEBwYXJhbSBpdCAgVGhlIGl0ZXJhdGVkQ2hhciAnc3RydWN0JyBpbnRvIHdoaWNoIHRoZSByZXR1cm5lZCBjaGFyIGlzIHBsYWNlZC5cbiAqIEBwYXJhbSBkZXQgVGhlIGNoYXJzZXQgZGV0ZWN0b3IsIHdoaWNoIGlzIG5lZWRlZCB0byBnZXQgYXQgdGhlIGlucHV0IGJ5dGUgZGF0YVxuICogICAgICAgICAgICBiZWluZyBpdGVyYXRlZCBvdmVyLlxuICogQHJldHVybiAgICBUcnVlIGlmIGEgY2hhcmFjdGVyIHdhcyByZXR1cm5lZCwgZmFsc2UgYXQgZW5kIG9mIGlucHV0LlxuICovXG5cbm1iY3MucHJvdG90eXBlLm5leHRDaGFyID0gZnVuY3Rpb24oaXRlciwgZGV0KSB7fTtcblxuXG5cbi8qKlxuICogU2hpZnQtSklTIGNoYXJzZXQgcmVjb2duaXplci5cbiAqL1xubW9kdWxlLmV4cG9ydHMuc2ppcyA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLm5hbWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ1NoaWZ0LUpJUyc7XG4gIH07XG4gIHRoaXMubGFuZ3VhZ2UgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ2phJztcbiAgfTtcblxuICAvLyBUT0RPOiAgVGhpcyBzZXQgb2YgZGF0YSBjb21lcyBmcm9tIHRoZSBjaGFyYWN0ZXIgZnJlcXVlbmN5LVxuICAvLyAgICAgICAgb2Ytb2NjdXJlbmNlIGFuYWx5c2lzIHRvb2wuICBUaGUgZGF0YSBuZWVkcyB0byBiZSBtb3ZlZFxuICAvLyAgICAgICAgaW50byBhIHJlc291cmNlIGFuZCBsb2FkZWQgZnJvbSB0aGVyZS5cbiAgdGhpcy5jb21tb25DaGFycyA9IFtcbiAgICAweDgxNDAsIDB4ODE0MSwgMHg4MTQyLCAweDgxNDUsIDB4ODE1YiwgMHg4MTY5LCAweDgxNmEsIDB4ODE3NSwgMHg4MTc2LCAweDgyYTAsXG4gICAgMHg4MmEyLCAweDgyYTQsIDB4ODJhOSwgMHg4MmFhLCAweDgyYWIsIDB4ODJhZCwgMHg4MmFmLCAweDgyYjEsIDB4ODJiMywgMHg4MmI1LFxuICAgIDB4ODJiNywgMHg4MmJkLCAweDgyYmUsIDB4ODJjMSwgMHg4MmM0LCAweDgyYzUsIDB4ODJjNiwgMHg4MmM4LCAweDgyYzksIDB4ODJjYyxcbiAgICAweDgyY2QsIDB4ODJkYywgMHg4MmUwLCAweDgyZTcsIDB4ODJlOCwgMHg4MmU5LCAweDgyZWEsIDB4ODJmMCwgMHg4MmYxLCAweDgzNDEsXG4gICAgMHg4MzQzLCAweDgzNGUsIDB4ODM0ZiwgMHg4MzU4LCAweDgzNWUsIDB4ODM2MiwgMHg4MzY3LCAweDgzNzUsIDB4ODM3NiwgMHg4Mzg5LFxuICAgIDB4ODM4YSwgMHg4MzhiLCAweDgzOGQsIDB4ODM5MywgMHg4ZTk2LCAweDkzZmEsIDB4OTVhYVxuICBdO1xuXG4gIHRoaXMubmV4dENoYXIgPSBmdW5jdGlvbihpdGVyLCBkZXQpIHtcbiAgICBpdGVyLmluZGV4ID0gaXRlci5uZXh0SW5kZXg7XG4gICAgaXRlci5lcnJvciA9IGZhbHNlO1xuXG4gICAgdmFyIGZpcnN0Qnl0ZTtcbiAgICBmaXJzdEJ5dGUgPSBpdGVyLmNoYXJWYWx1ZSA9IGl0ZXIubmV4dEJ5dGUoZGV0KTtcbiAgICBpZiAoZmlyc3RCeXRlIDwgMClcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChmaXJzdEJ5dGUgPD0gMHg3ZiB8fCAoZmlyc3RCeXRlID4gMHhhMCAmJiBmaXJzdEJ5dGUgPD0gMHhkZikpXG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIHZhciBzZWNvbmRCeXRlID0gaXRlci5uZXh0Qnl0ZShkZXQpO1xuICAgIGlmIChzZWNvbmRCeXRlIDwgMClcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGl0ZXIuY2hhclZhbHVlID0gKGZpcnN0Qnl0ZSA8PCA4KSB8IHNlY29uZEJ5dGU7XG4gICAgaWYgKCEgKChzZWNvbmRCeXRlID49IDB4NDAgJiYgc2Vjb25kQnl0ZSA8PSAweDdmKSB8fCAoc2Vjb25kQnl0ZSA+PSAweDgwICYmIHNlY29uZEJ5dGUgPD0gMHhmZikpKSB7XG4gICAgICAvLyBJbGxlZ2FsIHNlY29uZCBieXRlIHZhbHVlLlxuICAgICAgaXRlci5lcnJvciA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xufTtcbnV0aWwuaW5oZXJpdHMobW9kdWxlLmV4cG9ydHMuc2ppcywgbWJjcyk7XG5cblxuXG4vKipcbiAqICAgQmlnNSBjaGFyc2V0IHJlY29nbml6ZXIuXG4gKi9cbm1vZHVsZS5leHBvcnRzLmJpZzUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5uYW1lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICdCaWc1JztcbiAgfTtcbiAgdGhpcy5sYW5ndWFnZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnemgnO1xuICB9O1xuICAvLyBUT0RPOiAgVGhpcyBzZXQgb2YgZGF0YSBjb21lcyBmcm9tIHRoZSBjaGFyYWN0ZXIgZnJlcXVlbmN5LVxuICAvLyAgICAgICAgb2Ytb2NjdXJlbmNlIGFuYWx5c2lzIHRvb2wuICBUaGUgZGF0YSBuZWVkcyB0byBiZSBtb3ZlZFxuICAvLyAgICAgICAgaW50byBhIHJlc291cmNlIGFuZCBsb2FkZWQgZnJvbSB0aGVyZS5cbiAgdGhpcy5jb21tb25DaGFycyA9IFtcbiAgICAweGExNDAsIDB4YTE0MSwgMHhhMTQyLCAweGExNDMsIDB4YTE0NywgMHhhMTQ5LCAweGExNzUsIDB4YTE3NiwgMHhhNDQwLCAweGE0NDYsXG4gICAgMHhhNDQ3LCAweGE0NDgsIDB4YTQ1MSwgMHhhNDU0LCAweGE0NTcsIDB4YTQ2NCwgMHhhNDZhLCAweGE0NmMsIDB4YTQ3NywgMHhhNGEzLFxuICAgIDB4YTRhNCwgMHhhNGE3LCAweGE0YzEsIDB4YTRjZSwgMHhhNGQxLCAweGE0ZGYsIDB4YTRlOCwgMHhhNGZkLCAweGE1NDAsIDB4YTU0OCxcbiAgICAweGE1NTgsIDB4YTU2OSwgMHhhNWNkLCAweGE1ZTcsIDB4YTY1NywgMHhhNjYxLCAweGE2NjIsIDB4YTY2OCwgMHhhNjcwLCAweGE2YTgsXG4gICAgMHhhNmIzLCAweGE2YjksIDB4YTZkMywgMHhhNmRiLCAweGE2ZTYsIDB4YTZmMiwgMHhhNzQwLCAweGE3NTEsIDB4YTc1OSwgMHhhN2RhLFxuICAgIDB4YThhMywgMHhhOGE1LCAweGE4YWQsIDB4YThkMSwgMHhhOGQzLCAweGE4ZTQsIDB4YThmYywgMHhhOWMwLCAweGE5ZDIsIDB4YTlmMyxcbiAgICAweGFhNmIsIDB4YWFiYSwgMHhhYWJlLCAweGFhY2MsIDB4YWFmYywgMHhhYzQ3LCAweGFjNGYsIDB4YWNiMCwgMHhhY2QyLCAweGFkNTksXG4gICAgMHhhZWM5LCAweGFmZTAsIDB4YjBlYSwgMHhiMTZmLCAweGIyYjMsIDB4YjJjNCwgMHhiMzZmLCAweGI0NGMsIDB4YjQ0ZSwgMHhiNTRjLFxuICAgIDB4YjVhNSwgMHhiNWJkLCAweGI1ZDAsIDB4YjVkOCwgMHhiNjcxLCAweGI3ZWQsIDB4Yjg2NywgMHhiOTQ0LCAweGJhZDgsIDB4YmI0NCxcbiAgICAweGJiYTEsIDB4YmRkMSwgMHhjMmM0LCAweGMzYjksIDB4YzQ0MCwgMHhjNDVmXG4gIF07XG4gIHRoaXMubmV4dENoYXIgPSBmdW5jdGlvbihpdGVyLCBkZXQpIHtcbiAgICBpdGVyLmluZGV4ID0gaXRlci5uZXh0SW5kZXg7XG4gICAgaXRlci5lcnJvciA9IGZhbHNlO1xuXG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGl0ZXIuY2hhclZhbHVlID0gaXRlci5uZXh0Qnl0ZShkZXQpO1xuXG4gICAgaWYgKGZpcnN0Qnl0ZSA8IDApXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIuXG4gICAgaWYgKGZpcnN0Qnl0ZSA8PSAweDdmIHx8IGZpcnN0Qnl0ZSA9PSAweGZmKVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICB2YXIgc2Vjb25kQnl0ZSA9IGl0ZXIubmV4dEJ5dGUoZGV0KTtcblxuICAgIGlmIChzZWNvbmRCeXRlIDwgMClcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGl0ZXIuY2hhclZhbHVlID0gKGl0ZXIuY2hhclZhbHVlIDw8IDgpIHwgc2Vjb25kQnl0ZTtcblxuICAgIGlmIChzZWNvbmRCeXRlIDwgMHg0MCB8fCBzZWNvbmRCeXRlID09IDB4N2YgfHwgc2Vjb25kQnl0ZSA9PSAweGZmKVxuICAgICAgaXRlci5lcnJvciA9IHRydWU7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn07XG51dGlsLmluaGVyaXRzKG1vZHVsZS5leHBvcnRzLmJpZzUsIG1iY3MpO1xuXG5cblxuLyoqXG4gKiAgRVVDIGNoYXJzZXQgcmVjb2duaXplcnMuICBPbmUgYWJzdHJhY3QgY2xhc3MgdGhhdCBwcm92aWRlcyB0aGUgY29tbW9uIGZ1bmN0aW9uXG4gKiAgZm9yIGdldHRpbmcgdGhlIG5leHQgY2hhcmFjdGVyIGFjY29yZGluZyB0byB0aGUgRVVDIGVuY29kaW5nIHNjaGVtZSxcbiAqICBhbmQgbmVzdGVkIGRlcml2ZWQgY2xhc3NlcyBmb3IgRVVDX0tSLCBFVUNfSlAsIEVVQ19DTi5cbiAqXG4gKiAgR2V0IHRoZSBuZXh0IGNoYXJhY3RlciB2YWx1ZSBmb3IgRVVDIGJhc2VkIGVuY29kaW5ncy5cbiAqICBDaGFyYWN0ZXIgJ3ZhbHVlJyBpcyBzaW1wbHkgdGhlIHJhdyBieXRlcyB0aGF0IG1ha2UgdXAgdGhlIGNoYXJhY3RlclxuICogICAgIHBhY2tlZCBpbnRvIGFuIGludC5cbiAqL1xuZnVuY3Rpb24gZXVjTmV4dENoYXIoaXRlciwgZGV0KSB7XG4gIGl0ZXIuaW5kZXggPSBpdGVyLm5leHRJbmRleDtcbiAgaXRlci5lcnJvciA9IGZhbHNlO1xuICB2YXIgZmlyc3RCeXRlICA9IDA7XG4gIHZhciBzZWNvbmRCeXRlID0gMDtcbiAgdmFyIHRoaXJkQnl0ZSAgPSAwO1xuICAvL2ludCBmb3VydGhCeXRlID0gMDtcbiAgYnVpbGRDaGFyOiB7XG4gICAgZmlyc3RCeXRlID0gaXRlci5jaGFyVmFsdWUgPSBpdGVyLm5leHRCeXRlKGRldCk7XG4gICAgaWYgKGZpcnN0Qnl0ZSA8IDApIHtcbiAgICAgIC8vIFJhbiBvZmYgdGhlIGVuZCBvZiB0aGUgaW5wdXQgZGF0YVxuICAgICAgaXRlci5kb25lID0gdHJ1ZTtcbiAgICAgIGJyZWFrIGJ1aWxkQ2hhcjtcbiAgICB9XG4gICAgaWYgKGZpcnN0Qnl0ZSA8PSAweDhkKSB7XG4gICAgICAvLyBzaW5nbGUgYnl0ZSBjaGFyXG4gICAgICBicmVhayBidWlsZENoYXI7XG4gICAgfVxuICAgIHNlY29uZEJ5dGUgPSBpdGVyLm5leHRCeXRlKGRldCk7XG4gICAgaXRlci5jaGFyVmFsdWUgPSAoaXRlci5jaGFyVmFsdWUgPDwgOCkgfCBzZWNvbmRCeXRlO1xuICAgIGlmIChmaXJzdEJ5dGUgPj0gMHhBMSAmJiBmaXJzdEJ5dGUgPD0gMHhmZSkge1xuICAgICAgLy8gVHdvIGJ5dGUgQ2hhclxuICAgICAgaWYgKHNlY29uZEJ5dGUgPCAweGExKSB7XG4gICAgICAgIGl0ZXIuZXJyb3IgPSB0cnVlO1xuICAgICAgfVxuICAgICAgYnJlYWsgYnVpbGRDaGFyO1xuICAgIH1cbiAgICBpZiAoZmlyc3RCeXRlID09IDB4OGUpIHtcbiAgICAgIC8vIENvZGUgU2V0IDIuXG4gICAgICAvLyAgIEluIEVVQy1KUCwgdG90YWwgY2hhciBzaXplIGlzIDIgYnl0ZXMsIG9ubHkgb25lIGJ5dGUgb2YgYWN0dWFsIGNoYXIgdmFsdWUuXG4gICAgICAvLyAgIEluIEVVQy1UVywgdG90YWwgY2hhciBzaXplIGlzIDQgYnl0ZXMsIHRocmVlIGJ5dGVzIGNvbnRyaWJ1dGUgdG8gY2hhciB2YWx1ZS5cbiAgICAgIC8vIFdlIGRvbid0IGtub3cgd2hpY2ggd2UndmUgZ290LlxuICAgICAgLy8gVHJlYXQgaXQgbGlrZSBFVUMtSlAuICBJZiB0aGUgZGF0YSByZWFsbHkgd2FzIEVVQy1UVywgdGhlIGZvbGxvd2luZyB0d29cbiAgICAgIC8vICAgYnl0ZXMgd2lsbCBsb29rIGxpa2UgYSB3ZWxsIGZvcm1lZCAyIGJ5dGUgY2hhci5cbiAgICAgIGlmIChzZWNvbmRCeXRlIDwgMHhhMSkge1xuICAgICAgICBpdGVyLmVycm9yID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrIGJ1aWxkQ2hhcjtcbiAgICB9XG4gICAgaWYgKGZpcnN0Qnl0ZSA9PSAweDhmKSB7XG4gICAgICAvLyBDb2RlIHNldCAzLlxuICAgICAgLy8gVGhyZWUgYnl0ZSB0b3RhbCBjaGFyIHNpemUsIHR3byBieXRlcyBvZiBhY3R1YWwgY2hhciB2YWx1ZS5cbiAgICAgIHRoaXJkQnl0ZSA9IGl0ZXIubmV4dEJ5dGUoZGV0KTtcbiAgICAgIGl0ZXIuY2hhclZhbHVlID0gKGl0ZXIuY2hhclZhbHVlIDw8IDgpIHwgdGhpcmRCeXRlO1xuICAgICAgaWYgKHRoaXJkQnl0ZSA8IDB4YTEpIHtcbiAgICAgICAgaXRlci5lcnJvciA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBpdGVyLmRvbmUgPT0gZmFsc2U7XG59O1xuXG5cblxuLyoqXG4gKiBUaGUgY2hhcnNldCByZWNvZ25pemUgZm9yIEVVQy1KUC4gIEEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgY2xhc3NcbiAqICAgIGlzIGNyZWF0ZWQgYW5kIGtlcHQgYnkgdGhlIHB1YmxpYyBDaGFyc2V0RGV0ZWN0b3IgY2xhc3NcbiAqL1xubW9kdWxlLmV4cG9ydHMuZXVjX2pwID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMubmFtZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnRVVDLUpQJztcbiAgfTtcbiAgdGhpcy5sYW5ndWFnZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnamEnO1xuICB9O1xuXG4gIC8vIFRPRE86ICBUaGlzIHNldCBvZiBkYXRhIGNvbWVzIGZyb20gdGhlIGNoYXJhY3RlciBmcmVxdWVuY3ktXG4gIC8vICAgICAgICBvZi1vY2N1cmVuY2UgYW5hbHlzaXMgdG9vbC4gIFRoZSBkYXRhIG5lZWRzIHRvIGJlIG1vdmVkXG4gIC8vICAgICAgICBpbnRvIGEgcmVzb3VyY2UgYW5kIGxvYWRlZCBmcm9tIHRoZXJlLlxuICB0aGlzLmNvbW1vbkNoYXJzID0gW1xuICAgIDB4YTFhMSwgMHhhMWEyLCAweGExYTMsIDB4YTFhNiwgMHhhMWJjLCAweGExY2EsIDB4YTFjYiwgMHhhMWQ2LCAweGExZDcsIDB4YTRhMixcbiAgICAweGE0YTQsIDB4YTRhNiwgMHhhNGE4LCAweGE0YWEsIDB4YTRhYiwgMHhhNGFjLCAweGE0YWQsIDB4YTRhZiwgMHhhNGIxLCAweGE0YjMsXG4gICAgMHhhNGI1LCAweGE0YjcsIDB4YTRiOSwgMHhhNGJiLCAweGE0YmQsIDB4YTRiZiwgMHhhNGMwLCAweGE0YzEsIDB4YTRjMywgMHhhNGM0LFxuICAgIDB4YTRjNiwgMHhhNGM3LCAweGE0YzgsIDB4YTRjOSwgMHhhNGNhLCAweGE0Y2IsIDB4YTRjZSwgMHhhNGNmLCAweGE0ZDAsIDB4YTRkZSxcbiAgICAweGE0ZGYsIDB4YTRlMSwgMHhhNGUyLCAweGE0ZTQsIDB4YTRlOCwgMHhhNGU5LCAweGE0ZWEsIDB4YTRlYiwgMHhhNGVjLCAweGE0ZWYsXG4gICAgMHhhNGYyLCAweGE0ZjMsIDB4YTVhMiwgMHhhNWEzLCAweGE1YTQsIDB4YTVhNiwgMHhhNWE3LCAweGE1YWEsIDB4YTVhZCwgMHhhNWFmLFxuICAgIDB4YTViMCwgMHhhNWIzLCAweGE1YjUsIDB4YTViNywgMHhhNWI4LCAweGE1YjksIDB4YTViZiwgMHhhNWMzLCAweGE1YzYsIDB4YTVjNyxcbiAgICAweGE1YzgsIDB4YTVjOSwgMHhhNWNiLCAweGE1ZDAsIDB4YTVkNSwgMHhhNWQ2LCAweGE1ZDcsIDB4YTVkZSwgMHhhNWUwLCAweGE1ZTEsXG4gICAgMHhhNWU1LCAweGE1ZTksIDB4YTVlYSwgMHhhNWViLCAweGE1ZWMsIDB4YTVlZCwgMHhhNWYzLCAweGI4YTksIDB4YjlkNCwgMHhiYWVlLFxuICAgIDB4YmJjOCwgMHhiZWYwLCAweGJmYjcsIDB4YzRlYSwgMHhjNmZjLCAweGM3YmQsIDB4Y2FiOCwgMHhjYWYzLCAweGNiZGMsIDB4Y2RkMVxuICBdO1xuXG4gIHRoaXMubmV4dENoYXIgPSBldWNOZXh0Q2hhcjtcbn07XG51dGlsLmluaGVyaXRzKG1vZHVsZS5leHBvcnRzLmV1Y19qcCwgbWJjcyk7XG5cblxuXG4vKipcbiAqIFRoZSBjaGFyc2V0IHJlY29nbml6ZSBmb3IgRVVDLUtSLiAgQSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzc1xuICogICAgaXMgY3JlYXRlZCBhbmQga2VwdCBieSB0aGUgcHVibGljIENoYXJzZXREZXRlY3RvciBjbGFzc1xuICovXG5tb2R1bGUuZXhwb3J0cy5ldWNfa3IgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5uYW1lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICdFVUMtS1InO1xuICB9O1xuICB0aGlzLmxhbmd1YWdlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICdrbyc7XG4gIH07XG5cbiAgLy8gVE9ETzogIFRoaXMgc2V0IG9mIGRhdGEgY29tZXMgZnJvbSB0aGUgY2hhcmFjdGVyIGZyZXF1ZW5jeS1cbiAgLy8gICAgICAgIG9mLW9jY3VyZW5jZSBhbmFseXNpcyB0b29sLiAgVGhlIGRhdGEgbmVlZHMgdG8gYmUgbW92ZWRcbiAgLy8gICAgICAgIGludG8gYSByZXNvdXJjZSBhbmQgbG9hZGVkIGZyb20gdGhlcmUuXG4gIHRoaXMuY29tbW9uQ2hhcnMgPSBbXG4gICAgMHhiMGExLCAweGIwYjMsIDB4YjBjNSwgMHhiMGNkLCAweGIwZDQsIDB4YjBlNiwgMHhiMGVkLCAweGIwZjgsIDB4YjBmYSwgMHhiMGZjLFxuICAgIDB4YjFiOCwgMHhiMWI5LCAweGIxYzcsIDB4YjFkNywgMHhiMWUyLCAweGIzYWEsIDB4YjNiYiwgMHhiNGMyLCAweGI0Y2YsIDB4YjRkOSxcbiAgICAweGI0ZWIsIDB4YjVhNSwgMHhiNWI1LCAweGI1YmYsIDB4YjVjNywgMHhiNWU5LCAweGI2ZjMsIDB4YjdhZiwgMHhiN2MyLCAweGI3Y2UsXG4gICAgMHhiOGE2LCAweGI4YWUsIDB4YjhiNiwgMHhiOGI4LCAweGI4YmIsIDB4YjhlOSwgMHhiOWFiLCAweGI5YWUsIDB4YjljYywgMHhiOWNlLFxuICAgIDB4YjlmZCwgMHhiYWI4LCAweGJhY2UsIDB4YmFkMCwgMHhiYWYxLCAweGJiZTcsIDB4YmJmMywgMHhiYmZkLCAweGJjYWQsIDB4YmNiYSxcbiAgICAweGJjZDIsIDB4YmNmNiwgMHhiZGJhLCAweGJkYzAsIDB4YmRjMywgMHhiZGM1LCAweGJlYzYsIDB4YmVjOCwgMHhiZWRmLCAweGJlZWUsXG4gICAgMHhiZWY4LCAweGJlZmEsIDB4YmZhMSwgMHhiZmE5LCAweGJmYzAsIDB4YmZlNCwgMHhiZmViLCAweGJmZWMsIDB4YmZmOCwgMHhjMGE3LFxuICAgIDB4YzBhZiwgMHhjMGI4LCAweGMwYmEsIDB4YzBiYiwgMHhjMGJkLCAweGMwYzcsIDB4YzBjYywgMHhjMGNlLCAweGMwY2YsIDB4YzBkNixcbiAgICAweGMwZGEsIDB4YzBlNSwgMHhjMGZiLCAweGMwZmMsIDB4YzFhNCwgMHhjMWE2LCAweGMxYjYsIDB4YzFkNiwgMHhjMWRmLCAweGMxZjYsXG4gICAgMHhjMWY4LCAweGM0YTEsIDB4YzVjZCwgMHhjNmFlLCAweGM3Y2YsIDB4YzdkMSwgMHhjN2QyLCAweGM3ZDgsIDB4YzdlNSwgMHhjOGFkXG4gIF07XG5cbiAgdGhpcy5uZXh0Q2hhciA9IGV1Y05leHRDaGFyO1xufTtcbnV0aWwuaW5oZXJpdHMobW9kdWxlLmV4cG9ydHMuZXVjX2tyLCBtYmNzKTtcblxuXG5cbi8qKlxuICogICBHQi0xODAzMCByZWNvZ25pemVyLiBVc2VzIHNpbXBsaWZpZWQgQ2hpbmVzZSBzdGF0aXN0aWNzLlxuICovXG5tb2R1bGUuZXhwb3J0cy5nYl8xODAzMCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLm5hbWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ0dCMTgwMzAnO1xuICB9O1xuICB0aGlzLmxhbmd1YWdlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICd6aCc7XG4gIH07XG5cbiAgLypcbiAgICogIEdldCB0aGUgbmV4dCBjaGFyYWN0ZXIgdmFsdWUgZm9yIEVVQyBiYXNlZCBlbmNvZGluZ3MuXG4gICAqICBDaGFyYWN0ZXIgJ3ZhbHVlJyBpcyBzaW1wbHkgdGhlIHJhdyBieXRlcyB0aGF0IG1ha2UgdXAgdGhlIGNoYXJhY3RlclxuICAgKiAgICAgcGFja2VkIGludG8gYW4gaW50LlxuICAgKi9cbiAgdGhpcy5uZXh0Q2hhciA9IGZ1bmN0aW9uKGl0ZXIsIGRldCkge1xuICAgIGl0ZXIuaW5kZXggPSBpdGVyLm5leHRJbmRleDtcbiAgICBpdGVyLmVycm9yID0gZmFsc2U7XG4gICAgdmFyIGZpcnN0Qnl0ZSAgPSAwO1xuICAgIHZhciBzZWNvbmRCeXRlID0gMDtcbiAgICB2YXIgdGhpcmRCeXRlICA9IDA7XG4gICAgdmFyIGZvdXJ0aEJ5dGUgPSAwO1xuICAgIGJ1aWxkQ2hhcjoge1xuICAgICAgZmlyc3RCeXRlID0gaXRlci5jaGFyVmFsdWUgPSBpdGVyLm5leHRCeXRlKGRldCk7XG4gICAgICBpZiAoZmlyc3RCeXRlIDwgMCkge1xuICAgICAgICAvLyBSYW4gb2ZmIHRoZSBlbmQgb2YgdGhlIGlucHV0IGRhdGFcbiAgICAgICAgaXRlci5kb25lID0gdHJ1ZTtcbiAgICAgICAgYnJlYWsgYnVpbGRDaGFyO1xuICAgICAgfVxuICAgICAgaWYgKGZpcnN0Qnl0ZSA8PSAweDgwKSB7XG4gICAgICAgIC8vIHNpbmdsZSBieXRlIGNoYXJcbiAgICAgICAgYnJlYWsgYnVpbGRDaGFyO1xuICAgICAgfVxuICAgICAgc2Vjb25kQnl0ZSA9IGl0ZXIubmV4dEJ5dGUoZGV0KTtcbiAgICAgIGl0ZXIuY2hhclZhbHVlID0gKGl0ZXIuY2hhclZhbHVlIDw8IDgpIHwgc2Vjb25kQnl0ZTtcbiAgICAgIGlmIChmaXJzdEJ5dGUgPj0gMHg4MSAmJiBmaXJzdEJ5dGUgPD0gMHhGRSkge1xuICAgICAgICAvLyBUd28gYnl0ZSBDaGFyXG4gICAgICAgIGlmICgoc2Vjb25kQnl0ZSA+PSAweDQwICYmIHNlY29uZEJ5dGUgPD0gMHg3RSkgfHwgKHNlY29uZEJ5dGUgPj04MCAmJiBzZWNvbmRCeXRlIDw9IDB4RkUpKSB7XG4gICAgICAgICAgYnJlYWsgYnVpbGRDaGFyO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZvdXIgYnl0ZSBjaGFyXG4gICAgICAgIGlmIChzZWNvbmRCeXRlID49IDB4MzAgJiYgc2Vjb25kQnl0ZSA8PSAweDM5KSB7XG4gICAgICAgICAgdGhpcmRCeXRlID0gaXRlci5uZXh0Qnl0ZShkZXQpO1xuICAgICAgICAgIGlmICh0aGlyZEJ5dGUgPj0gMHg4MSAmJiB0aGlyZEJ5dGUgPD0gMHhGRSkge1xuICAgICAgICAgICAgZm91cnRoQnl0ZSA9IGl0ZXIubmV4dEJ5dGUoZGV0KTtcbiAgICAgICAgICAgIGlmIChmb3VydGhCeXRlID49IDB4MzAgJiYgZm91cnRoQnl0ZSA8PSAweDM5KSB7XG4gICAgICAgICAgICAgIGl0ZXIuY2hhclZhbHVlID0gKGl0ZXIuY2hhclZhbHVlIDw8IDE2KSB8ICh0aGlyZEJ5dGUgPDwgOCkgfCBmb3VydGhCeXRlO1xuICAgICAgICAgICAgICBicmVhayBidWlsZENoYXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGl0ZXIuZXJyb3IgPSB0cnVlO1xuICAgICAgICBicmVhayBidWlsZENoYXI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpdGVyLmRvbmUgPT0gZmFsc2U7XG4gIH07XG5cbiAgLy8gVE9ETzogIFRoaXMgc2V0IG9mIGRhdGEgY29tZXMgZnJvbSB0aGUgY2hhcmFjdGVyIGZyZXF1ZW5jeS1cbiAgLy8gICAgICAgIG9mLW9jY3VyZW5jZSBhbmFseXNpcyB0b29sLiAgVGhlIGRhdGEgbmVlZHMgdG8gYmUgbW92ZWRcbiAgLy8gICAgICAgIGludG8gYSByZXNvdXJjZSBhbmQgbG9hZGVkIGZyb20gdGhlcmUuXG4gIHRoaXMuY29tbW9uQ2hhcnMgPSBbXG4gICAgMHhhMWExLCAweGExYTIsIDB4YTFhMywgMHhhMWE0LCAweGExYjAsIDB4YTFiMSwgMHhhMWYxLCAweGExZjMsIDB4YTNhMSwgMHhhM2FjLFxuICAgIDB4YTNiYSwgMHhiMWE4LCAweGIxYjgsIDB4YjFiZSwgMHhiMmJiLCAweGIzYzksIDB4YjNmNiwgMHhiNGYzLCAweGI1YmQsIDB4YjVjNCxcbiAgICAweGI1ZTMsIDB4YjZhZiwgMHhiNmQ0LCAweGI2ZTAsIDB4YjdhMiwgMHhiN2E4LCAweGI3YmQsIDB4YjdkNiwgMHhiN2RkLCAweGI4YjQsXG4gICAgMHhiOGRmLCAweGI4ZjYsIDB4YjlhYiwgMHhiOWM5LCAweGI5ZDgsIDB4YjlmYSwgMHhiOWZkLCAweGJhY2QsIDB4YmJhNywgMHhiYmQ2LFxuICAgIDB4YmJlMSwgMHhiYmZhLCAweGJjYmMsIDB4YmNkYiwgMHhiY2ZlLCAweGJkY2MsIDB4YmVjZCwgMHhiZWRkLCAweGJmYjQsIDB4YmZjNixcbiAgICAweGJmYzksIDB4YzBiNCwgMHhjMGVkLCAweGMxY2IsIDB4YzJkYiwgMHhjM2M3LCAweGM0ZGMsIDB4YzRlYSwgMHhjNWNjLCAweGM2ZjcsXG4gICAgMHhjN2Y4LCAweGM4YWIsIDB4YzhjYiwgMHhjOGQ1LCAweGM4ZTcsIDB4YzljZiwgMHhjOWZhLCAweGNhYjEsIDB4Y2FiNSwgMHhjYWM3LFxuICAgIDB4Y2FkMCwgMHhjYWQ2LCAweGNhZjUsIDB4Y2FmZCwgMHhjY2VjLCAweGNkZjgsIDB4Y2VhYSwgMHhjZWM0LCAweGNlZDIsIDB4Y2VlNSxcbiAgICAweGNmYjUsIDB4Y2ZjMiwgMHhjZmQ2LCAweGQwYzIsIDB4ZDBjNSwgMHhkMGQwLCAweGQwZDQsIDB4ZDFhNywgMHhkMmFhLCAweGQyYjIsXG4gICAgMHhkMmI1LCAweGQyYmIsIDB4ZDJkNCwgMHhkM2MzLCAweGQzZDAsIDB4ZDNmZCwgMHhkNGMyLCAweGQ0ZGEsIDB4ZDVlMiwgMHhkNmQwXG4gIF07XG59O1xudXRpbC5pbmhlcml0cyhtb2R1bGUuZXhwb3J0cy5nYl8xODAzMCwgbWJjcyk7XG4iLCJ2YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKSxcbiAgTWF0Y2ggPSByZXF1aXJlICgnLi4vbWF0Y2gnKTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIHJlY29nbml6ZXMgc2luZ2xlLWJ5dGUgZW5jb2RpbmdzLiBCZWNhdXNlIHRoZSBlbmNvZGluZyBzY2hlbWUgaXMgc29cbiAqIHNpbXBsZSwgbGFuZ3VhZ2Ugc3RhdGlzdGljcyBhcmUgdXNlZCB0byBkbyB0aGUgbWF0Y2hpbmcuXG4gKi9cblxuZnVuY3Rpb24gTkdyYW1QYXJzZXIodGhlTmdyYW1MaXN0LCB0aGVCeXRlTWFwKSB7XG4gIHZhciBOX0dSQU1fTUFTSyA9IDB4RkZGRkZGO1xuXG4gIHRoaXMuYnl0ZUluZGV4ID0gMDtcbiAgdGhpcy5uZ3JhbSA9IDA7XG5cbiAgdGhpcy5uZ3JhbUxpc3QgPSB0aGVOZ3JhbUxpc3Q7XG4gIHRoaXMuYnl0ZU1hcCA9IHRoZUJ5dGVNYXA7XG5cbiAgdGhpcy5uZ3JhbUNvdW50ID0gMDtcbiAgdGhpcy5oaXRDb3VudCA9IDA7XG5cbiAgdGhpcy5zcGFjZUNoYXI7XG5cbiAgLypcbiAgICogQmluYXJ5IHNlYXJjaCBmb3IgdmFsdWUgaW4gdGFibGUsIHdoaWNoIG11c3QgaGF2ZSBleGFjdGx5IDY0IGVudHJpZXMuXG4gICAqL1xuICB0aGlzLnNlYXJjaCA9IGZ1bmN0aW9uKHRhYmxlLCB2YWx1ZSkge1xuICAgIHZhciBpbmRleCA9IDA7XG5cbiAgICBpZiAodGFibGVbaW5kZXggKyAzMl0gPD0gdmFsdWUpIGluZGV4ICs9IDMyO1xuICAgIGlmICh0YWJsZVtpbmRleCArIDE2XSA8PSB2YWx1ZSkgaW5kZXggKz0gMTY7XG4gICAgaWYgKHRhYmxlW2luZGV4ICsgOF0gIDw9IHZhbHVlKSBpbmRleCArPSA4O1xuICAgIGlmICh0YWJsZVtpbmRleCArIDRdICA8PSB2YWx1ZSkgaW5kZXggKz0gNDtcbiAgICBpZiAodGFibGVbaW5kZXggKyAyXSAgPD0gdmFsdWUpIGluZGV4ICs9IDI7XG4gICAgaWYgKHRhYmxlW2luZGV4ICsgMV0gIDw9IHZhbHVlKSBpbmRleCArPSAxO1xuICAgIGlmICh0YWJsZVtpbmRleF0gICAgICA+IHZhbHVlKSAgaW5kZXggLT0gMTtcblxuICAgIGlmIChpbmRleCA8IDAgfHwgdGFibGVbaW5kZXhdICE9IHZhbHVlKVxuICAgICAgcmV0dXJuIC0xO1xuXG4gICAgcmV0dXJuIGluZGV4O1xuICB9O1xuXG4gIHRoaXMubG9va3VwID0gZnVuY3Rpb24odGhpc05ncmFtKSB7XG4gICAgdGhpcy5uZ3JhbUNvdW50ICs9IDE7XG4gICAgaWYgKHRoaXMuc2VhcmNoKHRoaXMubmdyYW1MaXN0LCB0aGlzTmdyYW0pID49IDApIHtcbiAgICAgIHRoaXMuaGl0Q291bnQgKz0gMTtcbiAgICB9XG4gIH07XG5cbiAgdGhpcy5hZGRCeXRlID0gZnVuY3Rpb24oYikge1xuICAgIHRoaXMubmdyYW0gPSAoKHRoaXMubmdyYW0gPDwgOCkgKyAoYiAmIDB4RkYpKSAmIE5fR1JBTV9NQVNLO1xuICAgIHRoaXMubG9va3VwKHRoaXMubmdyYW0pO1xuICB9XG5cbiAgdGhpcy5uZXh0Qnl0ZSA9IGZ1bmN0aW9uKGRldCkge1xuICAgIGlmICh0aGlzLmJ5dGVJbmRleCA+PSBkZXQuZklucHV0TGVuKVxuICAgICAgcmV0dXJuIC0xO1xuXG4gICAgcmV0dXJuIGRldC5mSW5wdXRCeXRlc1t0aGlzLmJ5dGVJbmRleCsrXSAmIDB4RkY7XG4gIH1cblxuICB0aGlzLnBhcnNlID0gZnVuY3Rpb24oZGV0LCBzcGFjZUNoKSB7XG4gICAgdmFyIGIsIGlnbm9yZVNwYWNlID0gZmFsc2U7XG4gICAgdGhpcy5zcGFjZUNoYXIgPSBzcGFjZUNoO1xuXG4gICAgd2hpbGUgKChiID0gdGhpcy5uZXh0Qnl0ZShkZXQpKSA+PSAwKSB7XG4gICAgICB2YXIgbWIgPSB0aGlzLmJ5dGVNYXBbYl07XG5cbiAgICAgIC8vIFRPRE86IDB4MjAgbWlnaHQgbm90IGJlIGEgc3BhY2UgaW4gYWxsIGNoYXJhY3RlciBzZXRzLi4uXG4gICAgICBpZiAobWIgIT0gMCkge1xuICAgICAgICBpZiAoIShtYiA9PSB0aGlzLnNwYWNlQ2hhciAmJiBpZ25vcmVTcGFjZSkpIHtcbiAgICAgICAgICB0aGlzLmFkZEJ5dGUobWIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWdub3JlU3BhY2UgPSAobWIgPT0gdGhpcy5zcGFjZUNoYXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IElzIHRoaXMgT0s/IFRoZSBidWZmZXIgY291bGQgaGF2ZSBlbmRlZCBpbiB0aGUgbWlkZGxlIG9mIGEgd29yZC4uLlxuICAgIHRoaXMuYWRkQnl0ZSh0aGlzLnNwYWNlQ2hhcik7XG5cbiAgICB2YXIgcmF3UGVyY2VudCA9IHRoaXMuaGl0Q291bnQgLyB0aGlzLm5ncmFtQ291bnQ7XG5cbiAgICAvLyBUT0RPIC0gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2sgdG8gdGFrZSBjYXJlIG9mIGEgY2FzZVxuICAgIC8vIHdlcmUgd2Ugd2VyZSBnZXR0aW5nIGEgY29uZmlkZW5jZSBvZiAxMzUuLi5cbiAgICBpZiAocmF3UGVyY2VudCA+IDAuMzMpXG4gICAgICByZXR1cm4gOTg7XG5cbiAgICByZXR1cm4gTWF0aC5mbG9vcihyYXdQZXJjZW50ICogMzAwLjApO1xuICB9O1xufTtcblxuZnVuY3Rpb24gTkdyYW1zUGx1c0xhbmcobGEsIG5nKSB7XG4gIHRoaXMuZkxhbmcgPSBsYTtcbiAgdGhpcy5mTkdyYW1zID0gbmc7XG59O1xuXG5mdW5jdGlvbiBzYmNzKCkge307XG5zYmNzLnByb3RvdHlwZS5zcGFjZUNoYXIgPSAweDIwO1xuc2Jjcy5wcm90b3R5cGUubmdyYW1zID0gZnVuY3Rpb24oKSB7fTtcbnNiY3MucHJvdG90eXBlLmJ5dGVNYXAgPSBmdW5jdGlvbigpIHt9O1xuc2Jjcy5wcm90b3R5cGUubWF0Y2ggPSBmdW5jdGlvbihkZXQpIHtcblxuICB2YXIgbmdyYW1zID0gdGhpcy5uZ3JhbXMoKTtcbiAgdmFyIG11bHRpcGxlID0gKEFycmF5LmlzQXJyYXkobmdyYW1zKSAmJiBuZ3JhbXNbMF0gaW5zdGFuY2VvZiBOR3JhbXNQbHVzTGFuZyk7XG5cbiAgaWYgKCFtdWx0aXBsZSkge1xuICAgIHZhciBwYXJzZXIgPSBuZXcgTkdyYW1QYXJzZXIobmdyYW1zLCB0aGlzLmJ5dGVNYXAoKSk7XG4gICAgdmFyIGNvbmZpZGVuY2UgPSBwYXJzZXIucGFyc2UoZGV0LCB0aGlzLnNwYWNlQ2hhcik7XG4gICAgcmV0dXJuIGNvbmZpZGVuY2UgPD0gMCA/IG51bGwgOiBuZXcgTWF0Y2goZGV0LCB0aGlzLCBjb25maWRlbmNlKTtcbiAgfVxuXG4gIHZhciBiZXN0Q29uZmlkZW5jZVNvRmFyID0gLTE7XG4gIHZhciBsYW5nID0gbnVsbDtcblxuICBmb3IgKHZhciBpID0gbmdyYW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIG5nbCA9IG5ncmFtc1tpXTtcblxuICAgIHZhciBwYXJzZXIgPSBuZXcgTkdyYW1QYXJzZXIobmdsLmZOR3JhbXMsIHRoaXMuYnl0ZU1hcCgpKTtcbiAgICB2YXIgY29uZmlkZW5jZSA9IHBhcnNlci5wYXJzZShkZXQsIHRoaXMuc3BhY2VDaGFyKTtcbiAgICBpZiAoY29uZmlkZW5jZSA+IGJlc3RDb25maWRlbmNlU29GYXIpIHtcbiAgICAgIGJlc3RDb25maWRlbmNlU29GYXIgPSBjb25maWRlbmNlO1xuICAgICAgbGFuZyA9IG5nbC5mTGFuZztcbiAgICB9XG4gIH1cblxuICB2YXIgbmFtZSA9IHRoaXMubmFtZShkZXQpO1xuICByZXR1cm4gYmVzdENvbmZpZGVuY2VTb0ZhciA8PSAwID8gbnVsbCA6IG5ldyBNYXRjaChkZXQsIHRoaXMsIGJlc3RDb25maWRlbmNlU29GYXIsIG5hbWUsIGxhbmcpO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cy5JU09fODg1OV8xID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuYnl0ZU1hcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBbXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgwMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsXG4gICAgICAweDY4LCAweDY5LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLFxuICAgICAgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NyxcbiAgICAgIDB4NzgsIDB4NzksIDB4N0EsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LFxuICAgICAgMHg2OCwgMHg2OSwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwgMHg2RixcbiAgICAgIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsXG4gICAgICAweDc4LCAweDc5LCAweDdBLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweEFBLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHhCNSwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4QkEsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweEUwLCAweEUxLCAweEUyLCAweEUzLCAweEU0LCAweEU1LCAweEU2LCAweEU3LFxuICAgICAgMHhFOCwgMHhFOSwgMHhFQSwgMHhFQiwgMHhFQywgMHhFRCwgMHhFRSwgMHhFRixcbiAgICAgIDB4RjAsIDB4RjEsIDB4RjIsIDB4RjMsIDB4RjQsIDB4RjUsIDB4RjYsIDB4MjAsXG4gICAgICAweEY4LCAweEY5LCAweEZBLCAweEZCLCAweEZDLCAweEZELCAweEZFLCAweERGLFxuICAgICAgMHhFMCwgMHhFMSwgMHhFMiwgMHhFMywgMHhFNCwgMHhFNSwgMHhFNiwgMHhFNyxcbiAgICAgIDB4RTgsIDB4RTksIDB4RUEsIDB4RUIsIDB4RUMsIDB4RUQsIDB4RUUsIDB4RUYsXG4gICAgICAweEYwLCAweEYxLCAweEYyLCAweEYzLCAweEY0LCAweEY1LCAweEY2LCAweDIwLFxuICAgICAgMHhGOCwgMHhGOSwgMHhGQSwgMHhGQiwgMHhGQywgMHhGRCwgMHhGRSwgMHhGRlxuICAgIF07XG4gIH07XG5cbiAgdGhpcy5uZ3JhbXMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gW1xuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdkYScsIFtcbiAgICAgICAgMHgyMDYxNjYsIDB4MjA2MTc0LCAweDIwNjQ2NSwgMHgyMDY1NkUsIDB4MjA2NTcyLCAweDIwNjY2RiwgMHgyMDY4NjEsIDB4MjA2OTIwLFxuICAgICAgICAweDIwNkQ2NSwgMHgyMDZGNjcsIDB4MjA3MEU1LCAweDIwNzM2OSwgMHgyMDczNzQsIDB4MjA3NDY5LCAweDIwNzY2OSwgMHg2MTY2MjAsXG4gICAgICAgIDB4NjE2RTIwLCAweDYxNkU2NCwgMHg2MTcyMjAsIDB4NjE3NDIwLCAweDY0NjUyMCwgMHg2NDY1NkUsIDB4NjQ2NTcyLCAweDY0NjU3NCxcbiAgICAgICAgMHg2NTIwNzMsIDB4NjU2NDIwLCAweDY1NjQ2NSwgMHg2NTZFMjAsIDB4NjU2RTY0LCAweDY1NzIyMCwgMHg2NTcyNjUsIDB4NjU3MzIwLFxuICAgICAgICAweDY1NzQyMCwgMHg2NjZGNzIsIDB4Njc2NTIwLCAweDY3NjU2RSwgMHg2NzY1NzIsIDB4Njk2NzY1LCAweDY5NkMyMCwgMHg2OTZFNjcsXG4gICAgICAgIDB4NkI2NTIwLCAweDZCNkI2NSwgMHg2QzY1NzIsIDB4NkM2OTY3LCAweDZDNkM2NSwgMHg2RDY1NjQsIDB4NkU2NDY1LCAweDZFNjUyMCxcbiAgICAgICAgMHg2RTY3MjAsIDB4NkU2NzY1LCAweDZGNjcyMCwgMHg2RjZEMjAsIDB4NkY3MjIwLCAweDcwRTUyMCwgMHg3MjIwNjQsIDB4NzIyMDY1LFxuICAgICAgICAweDcyMjA3MywgMHg3MjY1MjAsIDB4NzM3NDY1LCAweDc0MjA3MywgMHg3NDY1MjAsIDB4NzQ2NTcyLCAweDc0Njk2QywgMHg3NjY1NzJcbiAgICAgIF0pLFxuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdkZScsIFtcbiAgICAgICAgMHgyMDYxNkUsIDB4MjA2MTc1LCAweDIwNjI2NSwgMHgyMDY0NjEsIDB4MjA2NDY1LCAweDIwNjQ2OSwgMHgyMDY1NjksIDB4MjA2NzY1LFxuICAgICAgICAweDIwNjg2MSwgMHgyMDY5NkUsIDB4MjA2RDY5LCAweDIwNzM2MywgMHgyMDczNjUsIDB4MjA3NTZFLCAweDIwNzY2NSwgMHgyMDc2NkYsXG4gICAgICAgIDB4MjA3NzY1LCAweDIwN0E3NSwgMHg2MjY1NzIsIDB4NjM2ODIwLCAweDYzNjg2NSwgMHg2MzY4NzQsIDB4NjQ2MTczLCAweDY0NjU2RSxcbiAgICAgICAgMHg2NDY1NzIsIDB4NjQ2OTY1LCAweDY1MjA2NCwgMHg2NTIwNzMsIDB4NjU2OTZFLCAweDY1Njk3NCwgMHg2NTZFMjAsIDB4NjU3MjIwLFxuICAgICAgICAweDY1NzMyMCwgMHg2NzY1NkUsIDB4Njg2NTZFLCAweDY4NzQyMCwgMHg2OTYzNjgsIDB4Njk2NTIwLCAweDY5NkUyMCwgMHg2OTZFNjUsXG4gICAgICAgIDB4Njk3NDIwLCAweDZDNjk2MywgMHg2QzZDNjUsIDB4NkUyMDYxLCAweDZFMjA2NCwgMHg2RTIwNzMsIDB4NkU2NDIwLCAweDZFNjQ2NSxcbiAgICAgICAgMHg2RTY1MjAsIDB4NkU2NzIwLCAweDZFNjc2NSwgMHg2RTc0NjUsIDB4NzIyMDY0LCAweDcyNjQ2NSwgMHg3MjY1NjksIDB4NzM2MzY4LFxuICAgICAgICAweDczNzQ2NSwgMHg3NDIwNjQsIDB4NzQ2NTIwLCAweDc0NjU2RSwgMHg3NDY1NzIsIDB4NzU2RTY0LCAweDc1NkU2NywgMHg3NjY1NzJcbiAgICAgIF0pLFxuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdlbicsIFtcbiAgICAgICAgMHgyMDYxMjAsIDB4MjA2MTZFLCAweDIwNjI2NSwgMHgyMDYzNkYsIDB4MjA2NjZGLCAweDIwNjg2MSwgMHgyMDY4NjUsIDB4MjA2OTZFLFxuICAgICAgICAweDIwNkQ2MSwgMHgyMDZGNjYsIDB4MjA3MDcyLCAweDIwNzI2NSwgMHgyMDczNjEsIDB4MjA3Mzc0LCAweDIwNzQ2OCwgMHgyMDc0NkYsXG4gICAgICAgIDB4MjA3NzY4LCAweDYxNjk2NCwgMHg2MTZDMjAsIDB4NjE2RTIwLCAweDYxNkU2NCwgMHg2MTczMjAsIDB4NjE3NDIwLCAweDYxNzQ2NSxcbiAgICAgICAgMHg2MTc0NjksIDB4NjQyMDYxLCAweDY0MjA3NCwgMHg2NTIwNjEsIDB4NjUyMDczLCAweDY1MjA3NCwgMHg2NTY0MjAsIDB4NjU2RTc0LFxuICAgICAgICAweDY1NzIyMCwgMHg2NTczMjAsIDB4NjY2RjcyLCAweDY4NjE3NCwgMHg2ODY1MjAsIDB4Njg2NTcyLCAweDY5NjQyMCwgMHg2OTZFMjAsXG4gICAgICAgIDB4Njk2RTY3LCAweDY5NkY2RSwgMHg2OTczMjAsIDB4NkUyMDYxLCAweDZFMjA3NCwgMHg2RTY0MjAsIDB4NkU2NzIwLCAweDZFNzQyMCxcbiAgICAgICAgMHg2RjY2MjAsIDB4NkY2RTIwLCAweDZGNzIyMCwgMHg3MjY1MjAsIDB4NzI3MzIwLCAweDczMjA2MSwgMHg3MzIwNzQsIDB4NzM2MTY5LFxuICAgICAgICAweDczNzQyMCwgMHg3NDIwNzQsIDB4NzQ2NTcyLCAweDc0Njg2MSwgMHg3NDY4NjUsIDB4NzQ2OTZGLCAweDc0NkYyMCwgMHg3NDczMjBcbiAgICAgIF0pLFxuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdlcycsIFtcbiAgICAgICAgMHgyMDYxMjAsIDB4MjA2MzYxLCAweDIwNjM2RiwgMHgyMDY0NjUsIDB4MjA2NTZDLCAweDIwNjU2RSwgMHgyMDY1NzMsIDB4MjA2OTZFLFxuICAgICAgICAweDIwNkM2MSwgMHgyMDZDNkYsIDB4MjA3MDYxLCAweDIwNzA2RiwgMHgyMDcwNzIsIDB4MjA3MTc1LCAweDIwNzI2NSwgMHgyMDczNjUsXG4gICAgICAgIDB4MjA3NTZFLCAweDIwNzkyMCwgMHg2MTIwNjMsIDB4NjEyMDY0LCAweDYxMjA2NSwgMHg2MTIwNkMsIDB4NjEyMDcwLCAweDYxNjM2OSxcbiAgICAgICAgMHg2MTY0NkYsIDB4NjE2QzIwLCAweDYxNzIyMCwgMHg2MTczMjAsIDB4NjM2OUYzLCAweDYzNkY2RSwgMHg2NDY1MjAsIDB4NjQ2NTZDLFxuICAgICAgICAweDY0NkYyMCwgMHg2NTIwNjQsIDB4NjUyMDY1LCAweDY1MjA2QywgMHg2NTZDMjAsIDB4NjU2RTIwLCAweDY1NkU3NCwgMHg2NTczMjAsXG4gICAgICAgIDB4NjU3Mzc0LCAweDY5NjU2RSwgMHg2OUYzNkUsIDB4NkM2MTIwLCAweDZDNkY3MywgMHg2RTIwNjUsIDB4NkU3NDY1LCAweDZGMjA2NCxcbiAgICAgICAgMHg2RjIwNjUsIDB4NkY2RTIwLCAweDZGNzIyMCwgMHg2RjczMjAsIDB4NzA2MTcyLCAweDcxNzU2NSwgMHg3MjYxMjAsIDB4NzI2NTczLFxuICAgICAgICAweDczMjA2NCwgMHg3MzIwNjUsIDB4NzMyMDcwLCAweDczNjUyMCwgMHg3NDY1MjAsIDB4NzQ2RjIwLCAweDc1NjUyMCwgMHhGMzZFMjBcbiAgICAgIF0pLFxuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdmcicsIFtcbiAgICAgICAgMHgyMDYxNzUsIDB4MjA2MzZGLCAweDIwNjQ2MSwgMHgyMDY0NjUsIDB4MjA2NDc1LCAweDIwNjU2RSwgMHgyMDY1NzQsIDB4MjA2QzYxLFxuICAgICAgICAweDIwNkM2NSwgMHgyMDcwNjEsIDB4MjA3MDZGLCAweDIwNzA3MiwgMHgyMDcxNzUsIDB4MjA3MzY1LCAweDIwNzM2RiwgMHgyMDc1NkUsXG4gICAgICAgIDB4MjBFMDIwLCAweDYxNkU3NCwgMHg2MTc0NjksIDB4NjM2NTIwLCAweDYzNkY2RSwgMHg2NDY1MjAsIDB4NjQ2NTczLCAweDY0NzUyMCxcbiAgICAgICAgMHg2NTIwNjEsIDB4NjUyMDYzLCAweDY1MjA2NCwgMHg2NTIwNjUsIDB4NjUyMDZDLCAweDY1MjA3MCwgMHg2NTIwNzMsIDB4NjU2RTIwLFxuICAgICAgICAweDY1NkU3NCwgMHg2NTcyMjAsIDB4NjU3MzIwLCAweDY1NzQyMCwgMHg2NTc1NzIsIDB4Njk2RjZFLCAweDY5NzMyMCwgMHg2OTc0MjAsXG4gICAgICAgIDB4NkM2MTIwLCAweDZDNjUyMCwgMHg2QzY1NzMsIDB4NkQ2NTZFLCAweDZFMjA2NCwgMHg2RTY1MjAsIDB4NkU3MzIwLCAweDZFNzQyMCxcbiAgICAgICAgMHg2RjZFMjAsIDB4NkY2RTc0LCAweDZGNzU3MiwgMHg3MTc1NjUsIDB4NzIyMDZDLCAweDcyNjUyMCwgMHg3MzIwNjEsIDB4NzMyMDY0LFxuICAgICAgICAweDczMjA2NSwgMHg3MzIwNkMsIDB4NzMyMDcwLCAweDc0MjA2NCwgMHg3NDY1MjAsIDB4NzQ2OTZGLCAweDc1NjUyMCwgMHg3NTcyMjBcbiAgICAgIF0pLFxuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdpdCcsIFtcbiAgICAgICAgMHgyMDYxNkMsIDB4MjA2MzY4LCAweDIwNjM2RiwgMHgyMDY0NjUsIDB4MjA2NDY5LCAweDIwNjUyMCwgMHgyMDY5NkMsIDB4MjA2OTZFLFxuICAgICAgICAweDIwNkM2MSwgMHgyMDcwNjUsIDB4MjA3MDcyLCAweDIwNzU2RSwgMHg2MTIwNjMsIDB4NjEyMDY0LCAweDYxMjA3MCwgMHg2MTIwNzMsXG4gICAgICAgIDB4NjE3NDZGLCAweDYzNjg2NSwgMHg2MzZGNkUsIDB4NjQ2NTZDLCAweDY0NjkyMCwgMHg2NTIwNjEsIDB4NjUyMDYzLCAweDY1MjA2NCxcbiAgICAgICAgMHg2NTIwNjksIDB4NjUyMDZDLCAweDY1MjA3MCwgMHg2NTIwNzMsIDB4NjU2QzIwLCAweDY1NkM2QywgMHg2NTZFNzQsIDB4NjU3MjIwLFxuICAgICAgICAweDY4NjUyMCwgMHg2OTIwNjEsIDB4NjkyMDYzLCAweDY5MjA2NCwgMHg2OTIwNzMsIDB4Njk2MTIwLCAweDY5NkMyMCwgMHg2OTZFMjAsXG4gICAgICAgIDB4Njk2RjZFLCAweDZDNjEyMCwgMHg2QzY1MjAsIDB4NkM2OTIwLCAweDZDNkM2MSwgMHg2RTY1MjAsIDB4NkU2OTIwLCAweDZFNkYyMCxcbiAgICAgICAgMHg2RTc0NjUsIDB4NkYyMDYxLCAweDZGMjA2NCwgMHg2RjIwNjksIDB4NkYyMDczLCAweDZGNkUyMCwgMHg2RjZFNjUsIDB4NzA2NTcyLFxuICAgICAgICAweDcyNjEyMCwgMHg3MjY1MjAsIDB4NzM2OTIwLCAweDc0NjEyMCwgMHg3NDY1MjAsIDB4NzQ2OTIwLCAweDc0NkYyMCwgMHg3QTY5NkZcbiAgICAgIF0pLFxuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdubCcsIFtcbiAgICAgICAgMHgyMDYxNkMsIDB4MjA2MjY1LCAweDIwNjQ2MSwgMHgyMDY0NjUsIDB4MjA2NDY5LCAweDIwNjU2NSwgMHgyMDY1NkUsIDB4MjA2NzY1LFxuICAgICAgICAweDIwNjg2NSwgMHgyMDY5NkUsIDB4MjA2RDYxLCAweDIwNkQ2NSwgMHgyMDZGNzAsIDB4MjA3NDY1LCAweDIwNzY2MSwgMHgyMDc2NjUsXG4gICAgICAgIDB4MjA3NjZGLCAweDIwNzc2NSwgMHgyMDdBNjksIDB4NjE2MTZFLCAweDYxNjE3MiwgMHg2MTZFMjAsIDB4NjE2RTY0LCAweDYxNzIyMCxcbiAgICAgICAgMHg2MTc0MjAsIDB4NjM2ODc0LCAweDY0NjUyMCwgMHg2NDY1NkUsIDB4NjQ2NTcyLCAweDY1MjA2MiwgMHg2NTIwNzYsIDB4NjU2NTZFLFxuICAgICAgICAweDY1NjU3MiwgMHg2NTZFMjAsIDB4NjU3MjIwLCAweDY1NzI3MywgMHg2NTc0MjAsIDB4Njc2NTZFLCAweDY4NjU3NCwgMHg2OTY1MjAsXG4gICAgICAgIDB4Njk2RTIwLCAweDY5NkU2NywgMHg2OTczMjAsIDB4NkUyMDYyLCAweDZFMjA2NCwgMHg2RTIwNjUsIDB4NkUyMDY4LCAweDZFMjA2RixcbiAgICAgICAgMHg2RTIwNzYsIDB4NkU2NDY1LCAweDZFNjcyMCwgMHg2RjZFNjQsIDB4NkY2RjcyLCAweDZGNzAyMCwgMHg2RjcyMjAsIDB4NzM2MzY4LFxuICAgICAgICAweDczNzQ2NSwgMHg3NDIwNjQsIDB4NzQ2NTIwLCAweDc0NjU2RSwgMHg3NDY1NzIsIDB4NzY2MTZFLCAweDc2NjU3MiwgMHg3NjZGNkZcbiAgICAgIF0pLFxuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdubycsIFtcbiAgICAgICAgMHgyMDYxNzQsIDB4MjA2MTc2LCAweDIwNjQ2NSwgMHgyMDY1NkUsIDB4MjA2NTcyLCAweDIwNjY2RiwgMHgyMDY4NjEsIDB4MjA2OTIwLFxuICAgICAgICAweDIwNkQ2NSwgMHgyMDZGNjcsIDB4MjA3MEU1LCAweDIwNzM2NSwgMHgyMDczNkIsIDB4MjA3MzZGLCAweDIwNzM3NCwgMHgyMDc0NjksXG4gICAgICAgIDB4MjA3NjY5LCAweDIwRTUyMCwgMHg2MTZFNjQsIDB4NjE3MjIwLCAweDYxNzQyMCwgMHg2NDY1MjAsIDB4NjQ2NTZFLCAweDY0NjU3NCxcbiAgICAgICAgMHg2NTIwNzMsIDB4NjU2NDIwLCAweDY1NkUyMCwgMHg2NTZFNjUsIDB4NjU3MjIwLCAweDY1NzI2NSwgMHg2NTc0MjAsIDB4NjU3NDc0LFxuICAgICAgICAweDY2NkY3MiwgMHg2NzY1NkUsIDB4Njk2QjZCLCAweDY5NkMyMCwgMHg2OTZFNjcsIDB4NkI2NTIwLCAweDZCNkI2NSwgMHg2QzY1MjAsXG4gICAgICAgIDB4NkM2QzY1LCAweDZENjU2NCwgMHg2RDY1NkUsIDB4NkUyMDczLCAweDZFNjUyMCwgMHg2RTY3MjAsIDB4NkU2NzY1LCAweDZFNkU2NSxcbiAgICAgICAgMHg2RjY3MjAsIDB4NkY2RDIwLCAweDZGNzIyMCwgMHg3MEU1MjAsIDB4NzIyMDczLCAweDcyNjUyMCwgMHg3MzZGNkQsIDB4NzM3NDY1LFxuICAgICAgICAweDc0MjA3MywgMHg3NDY1MjAsIDB4NzQ2NTZFLCAweDc0NjU3MiwgMHg3NDY5NkMsIDB4NzQ3NDIwLCAweDc0NzQ2NSwgMHg3NjY1NzJcbiAgICAgIF0pLFxuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdwdCcsIFtcbiAgICAgICAgMHgyMDYxMjAsIDB4MjA2MzZGLCAweDIwNjQ2MSwgMHgyMDY0NjUsIDB4MjA2NDZGLCAweDIwNjUyMCwgMHgyMDY1NzMsIDB4MjA2RDYxLFxuICAgICAgICAweDIwNkU2RiwgMHgyMDZGMjAsIDB4MjA3MDYxLCAweDIwNzA2RiwgMHgyMDcwNzIsIDB4MjA3MTc1LCAweDIwNzI2NSwgMHgyMDczNjUsXG4gICAgICAgIDB4MjA3NTZELCAweDYxMjA2MSwgMHg2MTIwNjMsIDB4NjEyMDY0LCAweDYxMjA3MCwgMHg2MTY0NjUsIDB4NjE2NDZGLCAweDYxNkMyMCxcbiAgICAgICAgMHg2MTcyMjAsIDB4NjE3MjYxLCAweDYxNzMyMCwgMHg2MzZGNkQsIDB4NjM2RjZFLCAweDY0NjEyMCwgMHg2NDY1MjAsIDB4NjQ2RjIwLFxuICAgICAgICAweDY0NkY3MywgMHg2NTIwNjEsIDB4NjUyMDY0LCAweDY1NkQyMCwgMHg2NTZFNzQsIDB4NjU3MzIwLCAweDY1NzM3NCwgMHg2OTYxMjAsXG4gICAgICAgIDB4Njk2MzYxLCAweDZENjU2RSwgMHg2RTc0NjUsIDB4NkU3NDZGLCAweDZGMjA2MSwgMHg2RjIwNjMsIDB4NkYyMDY0LCAweDZGMjA2NSxcbiAgICAgICAgMHg2RjIwNzAsIDB4NkY3MzIwLCAweDcwNjE3MiwgMHg3MTc1NjUsIDB4NzI2MTIwLCAweDcyNjU3MywgMHg3MzIwNjEsIDB4NzMyMDY0LFxuICAgICAgICAweDczMjA2NSwgMHg3MzIwNzAsIDB4NzM3NDYxLCAweDc0NjUyMCwgMHg3NDZGMjAsIDB4NzU2NTIwLCAweEUzNkYyMCwgMHhFN0UzNkZcbiAgICAgIF0pLFxuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdzdicsIFtcbiAgICAgICAgMHgyMDYxNzQsIDB4MjA2MTc2LCAweDIwNjQ2NSwgMHgyMDY1NkUsIDB4MjA2NkY2LCAweDIwNjg2MSwgMHgyMDY5MjAsIDB4MjA2OTZFLFxuICAgICAgICAweDIwNkI2RiwgMHgyMDZENjUsIDB4MjA2RjYzLCAweDIwNzBFNSwgMHgyMDczNkIsIDB4MjA3MzZGLCAweDIwNzM3NCwgMHgyMDc0NjksXG4gICAgICAgIDB4MjA3NjYxLCAweDIwNzY2OSwgMHgyMEU0NzIsIDB4NjE2NDY1LCAweDYxNkUyMCwgMHg2MTZFNjQsIDB4NjE3MjIwLCAweDYxNzQ3NCxcbiAgICAgICAgMHg2MzY4MjAsIDB4NjQ2NTIwLCAweDY0NjU2RSwgMHg2NDY1NzIsIDB4NjQ2NTc0LCAweDY1NjQyMCwgMHg2NTZFMjAsIDB4NjU3MjIwLFxuICAgICAgICAweDY1NzQyMCwgMHg2NkY2NzIsIDB4Njc2NTZFLCAweDY5NkM2QywgMHg2OTZFNjcsIDB4NkI2MTIwLCAweDZDNkMyMCwgMHg2RDY1NjQsXG4gICAgICAgIDB4NkUyMDczLCAweDZFNjEyMCwgMHg2RTY0NjUsIDB4NkU2NzIwLCAweDZFNjc2NSwgMHg2RTY5NkUsIDB4NkY2MzY4LCAweDZGNkQyMCxcbiAgICAgICAgMHg2RjZFMjAsIDB4NzBFNTIwLCAweDcyMjA2MSwgMHg3MjIwNzMsIDB4NzI2MTIwLCAweDczNkI2MSwgMHg3MzZGNkQsIDB4NzQyMDczLFxuICAgICAgICAweDc0NjEyMCwgMHg3NDY1MjAsIDB4NzQ2NTcyLCAweDc0Njk2QywgMHg3NDc0MjAsIDB4NzY2MTcyLCAweEU0NzIyMCwgMHhGNjcyMjAsXG4gICAgICBdKVxuICAgIF07XG4gIH07XG5cbiAgdGhpcy5uYW1lID0gZnVuY3Rpb24oZGV0KSB7XG4gICAgcmV0dXJuIChkZXQgJiYgZGV0LmZDMUJ5dGVzKSA/ICd3aW5kb3dzLTEyNTInIDogJ0lTTy04ODU5LTEnO1xuICB9O1xufTtcbnV0aWwuaW5oZXJpdHMobW9kdWxlLmV4cG9ydHMuSVNPXzg4NTlfMSwgc2Jjcyk7XG5cblxubW9kdWxlLmV4cG9ydHMuSVNPXzg4NTlfMiA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmJ5dGVNYXAgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gW1xuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MDAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LFxuICAgICAgMHg2OCwgMHg2OSwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwgMHg2RixcbiAgICAgIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsXG4gICAgICAweDc4LCAweDc5LCAweDdBLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NyxcbiAgICAgIDB4NjgsIDB4NjksIDB4NkEsIDB4NkIsIDB4NkMsIDB4NkQsIDB4NkUsIDB4NkYsXG4gICAgICAweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LFxuICAgICAgMHg3OCwgMHg3OSwgMHg3QSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweEIxLCAweDIwLCAweEIzLCAweDIwLCAweEI1LCAweEI2LCAweDIwLFxuICAgICAgMHgyMCwgMHhCOSwgMHhCQSwgMHhCQiwgMHhCQywgMHgyMCwgMHhCRSwgMHhCRixcbiAgICAgIDB4MjAsIDB4QjEsIDB4MjAsIDB4QjMsIDB4MjAsIDB4QjUsIDB4QjYsIDB4QjcsXG4gICAgICAweDIwLCAweEI5LCAweEJBLCAweEJCLCAweEJDLCAweDIwLCAweEJFLCAweEJGLFxuICAgICAgMHhFMCwgMHhFMSwgMHhFMiwgMHhFMywgMHhFNCwgMHhFNSwgMHhFNiwgMHhFNyxcbiAgICAgIDB4RTgsIDB4RTksIDB4RUEsIDB4RUIsIDB4RUMsIDB4RUQsIDB4RUUsIDB4RUYsXG4gICAgICAweEYwLCAweEYxLCAweEYyLCAweEYzLCAweEY0LCAweEY1LCAweEY2LCAweDIwLFxuICAgICAgMHhGOCwgMHhGOSwgMHhGQSwgMHhGQiwgMHhGQywgMHhGRCwgMHhGRSwgMHhERixcbiAgICAgIDB4RTAsIDB4RTEsIDB4RTIsIDB4RTMsIDB4RTQsIDB4RTUsIDB4RTYsIDB4RTcsXG4gICAgICAweEU4LCAweEU5LCAweEVBLCAweEVCLCAweEVDLCAweEVELCAweEVFLCAweEVGLFxuICAgICAgMHhGMCwgMHhGMSwgMHhGMiwgMHhGMywgMHhGNCwgMHhGNSwgMHhGNiwgMHgyMCxcbiAgICAgIDB4RjgsIDB4RjksIDB4RkEsIDB4RkIsIDB4RkMsIDB4RkQsIDB4RkUsIDB4MjBcbiAgICBdO1xuICB9XG5cbiAgdGhpcy5uZ3JhbXMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gW1xuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdjcycsIFtcbiAgICAgICAgMHgyMDYxMjAsIDB4MjA2Mjc5LCAweDIwNjQ2RiwgMHgyMDZBNjUsIDB4MjA2RTYxLCAweDIwNkU2NSwgMHgyMDZGMjAsIDB4MjA2RjY0LFxuICAgICAgICAweDIwNzA2RiwgMHgyMDcwNzIsIDB4MjA3MEY4LCAweDIwNzI2RiwgMHgyMDczNjUsIDB4MjA3MzZGLCAweDIwNzM3NCwgMHgyMDc0NkYsXG4gICAgICAgIDB4MjA3NjIwLCAweDIwNzY3OSwgMHgyMDdBNjEsIDB4NjEyMDcwLCAweDYzNjUyMCwgMHg2MzY4MjAsIDB4NjUyMDcwLCAweDY1MjA3MyxcbiAgICAgICAgMHg2NTIwNzYsIDB4NjU2RDIwLCAweDY1NkVFRCwgMHg2ODZGMjAsIDB4Njg2RjY0LCAweDY5NzM3NCwgMHg2QTY1MjAsIDB4NkI3NDY1LFxuICAgICAgICAweDZDNjUyMCwgMHg2QzY5MjAsIDB4NkU2MTIwLCAweDZFRTkyMCwgMHg2RUVDMjAsIDB4NkVFRDIwLCAweDZGMjA3MCwgMHg2RjY0NkUsXG4gICAgICAgIDB4NkY2QTY5LCAweDZGNzM3NCwgMHg2Rjc1MjAsIDB4NkY3NjYxLCAweDcwNkY2NCwgMHg3MDZGNkEsIDB4NzA3MjZGLCAweDcwRjg2NSxcbiAgICAgICAgMHg3MzY1MjAsIDB4NzM2Rjc1LCAweDczNzQ2MSwgMHg3Mzc0NjksIDB4NzM3NDZFLCAweDc0NjU3MiwgMHg3NDZFRUQsIDB4NzQ2RjIwLFxuICAgICAgICAweDc1MjA3MCwgMHhCRTY1MjAsIDB4RTE2RUVELCAweEU5Njg2RiwgMHhFRDIwNzAsIDB4RUQyMDczLCAweEVENkQyMCwgMHhGODY1NjQsXG4gICAgICBdKSxcbiAgICAgIG5ldyBOR3JhbXNQbHVzTGFuZygnaHUnLCBbXG4gICAgICAgIDB4MjA2MTIwLCAweDIwNjE3QSwgMHgyMDYyNjUsIDB4MjA2NTY3LCAweDIwNjU2QywgMHgyMDY2NjUsIDB4MjA2ODYxLCAweDIwNjg2RixcbiAgICAgICAgMHgyMDY5NzMsIDB4MjA2QjY1LCAweDIwNkI2OSwgMHgyMDZCRjYsIDB4MjA2QzY1LCAweDIwNkQ2MSwgMHgyMDZENjUsIDB4MjA2RDY5LFxuICAgICAgICAweDIwNkU2NSwgMHgyMDczN0EsIDB4MjA3NDY1LCAweDIwRTk3MywgMHg2MTIwNjEsIDB4NjEyMDZCLCAweDYxMjA2RCwgMHg2MTIwNzMsXG4gICAgICAgIDB4NjE2QjIwLCAweDYxNkUyMCwgMHg2MTdBMjAsIDB4NjI2MTZFLCAweDYyNjU2RSwgMHg2NTY3NzksIDB4NjU2QjIwLCAweDY1NkMyMCxcbiAgICAgICAgMHg2NTZDNjUsIDB4NjU2RDIwLCAweDY1NkUyMCwgMHg2NTcyNjUsIDB4NjU3NDIwLCAweDY1NzQ2NSwgMHg2NTc0NzQsIDB4Njc3OTIwLFxuICAgICAgICAweDY4NkY2NywgMHg2OTZFNzQsIDB4Njk3MzIwLCAweDZCMjA2MSwgMHg2QkY2N0EsIDB4NkQ2NTY3LCAweDZENjk2RSwgMHg2RTIwNjEsXG4gICAgICAgIDB4NkU2MTZCLCAweDZFNjU2QiwgMHg2RTY1NkQsIDB4NkU3NDIwLCAweDZGNjc3OSwgMHg3MzIwNjEsIDB4NzM3QTY1LCAweDczN0E3NCxcbiAgICAgICAgMHg3MzdBRTEsIDB4NzNFOTY3LCAweDc0MjA2MSwgMHg3NDc0MjAsIDB4NzRFMTczLCAweDdBNjU3MiwgMHhFMTZFMjAsIDB4RTk3MzIwLFxuICAgICAgXSksXG4gICAgICBuZXcgTkdyYW1zUGx1c0xhbmcoJ3BsJywgW1xuICAgICAgICAweDIwNjM3QSwgMHgyMDY0NkYsIDB4MjA2OTIwLCAweDIwNkE2NSwgMHgyMDZCNkYsIDB4MjA2RDYxLCAweDIwNkQ2OSwgMHgyMDZFNjEsXG4gICAgICAgIDB4MjA2RTY5LCAweDIwNkY2NCwgMHgyMDcwNkYsIDB4MjA3MDcyLCAweDIwNzM2OSwgMHgyMDc3MjAsIDB4MjA3NzY5LCAweDIwNzc3OSxcbiAgICAgICAgMHgyMDdBMjAsIDB4MjA3QTYxLCAweDYxMjA3MCwgMHg2MTIwNzcsIDB4NjE2RTY5LCAweDYzNjgyMCwgMHg2MzdBNjUsIDB4NjM3QTc5LFxuICAgICAgICAweDY0NkYyMCwgMHg2NDdBNjksIDB4NjUyMDcwLCAweDY1MjA3MywgMHg2NTIwNzcsIDB4NjUyMDdBLCAweDY1Njc2RiwgMHg2NTZBMjAsXG4gICAgICAgIDB4NjU2RDIwLCAweDY1NkU2OSwgMHg2NzZGMjAsIDB4Njk2MTIwLCAweDY5NjUyMCwgMHg2OTY1NkEsIDB4NkI2MTIwLCAweDZCNjkyMCxcbiAgICAgICAgMHg2QjY5NjUsIDB4NkQ2OTY1LCAweDZFNjEyMCwgMHg2RTY5NjEsIDB4NkU2OTY1LCAweDZGMjA3MCwgMHg2Rjc3NjEsIDB4NkY3NzY5LFxuICAgICAgICAweDcwNkY2QywgMHg3MDcyNjEsIDB4NzA3MjZGLCAweDcwNzI3QSwgMHg3MjdBNjUsIDB4NzI3QTc5LCAweDczNjlFQSwgMHg3MzZCNjksXG4gICAgICAgIDB4NzM3NDYxLCAweDc3Njk2NSwgMHg3OTYzNjgsIDB4Nzk2RDIwLCAweDdBNjUyMCwgMHg3QTY5NjUsIDB4N0E3OTIwLCAweEYzNzcyMCxcbiAgICAgIF0pLFxuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdybycsIFtcbiAgICAgICAgMHgyMDYxMjAsIDB4MjA2MTYzLCAweDIwNjM2MSwgMHgyMDYzNjUsIDB4MjA2MzZGLCAweDIwNjM3NSwgMHgyMDY0NjUsIDB4MjA2NDY5LFxuICAgICAgICAweDIwNkM2MSwgMHgyMDZENjEsIDB4MjA3MDY1LCAweDIwNzA3MiwgMHgyMDczNjUsIDB4MjA3M0UzLCAweDIwNzU2RSwgMHgyMEJBNjksXG4gICAgICAgIDB4MjBFRTZFLCAweDYxMjA2MywgMHg2MTIwNjQsIDB4NjE3MjY1LCAweDYxNzQyMCwgMHg2MTc0NjUsIDB4NjE3NTIwLCAweDYzNjE3MixcbiAgICAgICAgMHg2MzZGNkUsIDB4NjM3NTIwLCAweDYzRTMyMCwgMHg2NDY1MjAsIDB4NjUyMDYxLCAweDY1MjA2MywgMHg2NTIwNjQsIDB4NjUyMDcwLFxuICAgICAgICAweDY1MjA3MywgMHg2NTYxMjAsIDB4NjU2OTIwLCAweDY1NkM2NSwgMHg2NTZFNzQsIDB4NjU3Mzc0LCAweDY5MjA2MSwgMHg2OTIwNjMsXG4gICAgICAgIDB4NjkyMDY0LCAweDY5MjA3MCwgMHg2OTY1MjAsIDB4Njk2OTIwLCAweDY5NkUyMCwgMHg2QzYxMjAsIDB4NkM2NTIwLCAweDZDNkY3MixcbiAgICAgICAgMHg2Qzc1NjksIDB4NkU2NTIwLCAweDZFNzQ3MiwgMHg2RjcyMjAsIDB4NzA2NTZFLCAweDcyNjUyMCwgMHg3MjY1NjEsIDB4NzI3NTIwLFxuICAgICAgICAweDczRTMyMCwgMHg3NDY1MjAsIDB4NzQ3Mjc1LCAweDc0RTMyMCwgMHg3NTY5MjAsIDB4NzU2QzIwLCAweEJBNjkyMCwgMHhFRTZFMjAsXG4gICAgICBdKVxuICAgIF07XG4gIH07XG5cbiAgdGhpcy5uYW1lID0gZnVuY3Rpb24oZGV0KSB7XG4gICAgcmV0dXJuIChkZXQgJiYgZGV0LmZDMUJ5dGVzKSA/ICd3aW5kb3dzLTEyNTAnIDogJ0lTTy04ODU5LTInO1xuICB9O1xufTtcbnV0aWwuaW5oZXJpdHMobW9kdWxlLmV4cG9ydHMuSVNPXzg4NTlfMiwgc2Jjcyk7XG5cblxubW9kdWxlLmV4cG9ydHMuSVNPXzg4NTlfNSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmJ5dGVNYXAgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gW1xuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MDAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LFxuICAgICAgMHg2OCwgMHg2OSwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwgMHg2RixcbiAgICAgIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsXG4gICAgICAweDc4LCAweDc5LCAweDdBLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NyxcbiAgICAgIDB4NjgsIDB4NjksIDB4NkEsIDB4NkIsIDB4NkMsIDB4NkQsIDB4NkUsIDB4NkYsXG4gICAgICAweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LFxuICAgICAgMHg3OCwgMHg3OSwgMHg3QSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweEYxLCAweEYyLCAweEYzLCAweEY0LCAweEY1LCAweEY2LCAweEY3LFxuICAgICAgMHhGOCwgMHhGOSwgMHhGQSwgMHhGQiwgMHhGQywgMHgyMCwgMHhGRSwgMHhGRixcbiAgICAgIDB4RDAsIDB4RDEsIDB4RDIsIDB4RDMsIDB4RDQsIDB4RDUsIDB4RDYsIDB4RDcsXG4gICAgICAweEQ4LCAweEQ5LCAweERBLCAweERCLCAweERDLCAweERELCAweERFLCAweERGLFxuICAgICAgMHhFMCwgMHhFMSwgMHhFMiwgMHhFMywgMHhFNCwgMHhFNSwgMHhFNiwgMHhFNyxcbiAgICAgIDB4RTgsIDB4RTksIDB4RUEsIDB4RUIsIDB4RUMsIDB4RUQsIDB4RUUsIDB4RUYsXG4gICAgICAweEQwLCAweEQxLCAweEQyLCAweEQzLCAweEQ0LCAweEQ1LCAweEQ2LCAweEQ3LFxuICAgICAgMHhEOCwgMHhEOSwgMHhEQSwgMHhEQiwgMHhEQywgMHhERCwgMHhERSwgMHhERixcbiAgICAgIDB4RTAsIDB4RTEsIDB4RTIsIDB4RTMsIDB4RTQsIDB4RTUsIDB4RTYsIDB4RTcsXG4gICAgICAweEU4LCAweEU5LCAweEVBLCAweEVCLCAweEVDLCAweEVELCAweEVFLCAweEVGLFxuICAgICAgMHgyMCwgMHhGMSwgMHhGMiwgMHhGMywgMHhGNCwgMHhGNSwgMHhGNiwgMHhGNyxcbiAgICAgIDB4RjgsIDB4RjksIDB4RkEsIDB4RkIsIDB4RkMsIDB4MjAsIDB4RkUsIDB4RkZcbiAgICBdO1xuICB9O1xuXG4gIHRoaXMubmdyYW1zID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIDB4MjBEMjIwLCAweDIwRDJERSwgMHgyMEQ0REUsIDB4MjBEN0QwLCAweDIwRDgyMCwgMHgyMERBRDAsIDB4MjBEQURFLCAweDIwREREMCxcbiAgICAgIDB4MjBEREQ1LCAweDIwREVEMSwgMHgyMERGREUsIDB4MjBERkUwLCAweDIwRTBEMCwgMHgyMEUxREUsIDB4MjBFMUUyLCAweDIwRTJERSxcbiAgICAgIDB4MjBFN0UyLCAweDIwRURFMiwgMHhEMERERDgsIDB4RDBFMkVDLCAweEQzREUyMCwgMHhENURCRUMsIDB4RDVEREQ4LCAweEQ1RTFFMixcbiAgICAgIDB4RDVFMjIwLCAweEQ4MjBERiwgMHhEOEQ1MjAsIDB4RDhEODIwLCAweEQ4RUYyMCwgMHhEQkQ1REQsIDB4REJEODIwLCAweERCRUNERCxcbiAgICAgIDB4REREMDIwLCAweERERDUyMCwgMHhEREQ4RDUsIDB4REREOEVGLCAweEREREUyMCwgMHhERERFRDIsIDB4REUyMEQyLCAweERFMjBERixcbiAgICAgIDB4REUyMEUxLCAweERFRDIyMCwgMHhERUQyRDAsIDB4REVEM0RFLCAweERFRDkyMCwgMHhERURCRUMsIDB4REVEQzIwLCAweERFRTFFMixcbiAgICAgIDB4REZERURCLCAweERGRTBENSwgMHhERkUwRDgsIDB4REZFMERFLCAweEUwRDBEMiwgMHhFMEQ1RDQsIDB4RTFFMkQwLCAweEUxRTJEMixcbiAgICAgIDB4RTFFMkQ4LCAweEUxRUYyMCwgMHhFMkQ1REIsIDB4RTJERTIwLCAweEUyREVFMCwgMHhFMkVDMjAsIDB4RTdFMkRFLCAweEVCRTUyMFxuICAgIF07XG4gIH07XG5cbiAgdGhpcy5uYW1lID0gZnVuY3Rpb24oZGV0KSB7XG4gICAgcmV0dXJuICdJU08tODg1OS01JztcbiAgfTtcblxuICB0aGlzLmxhbmd1YWdlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICdydSc7XG4gIH07XG59O1xudXRpbC5pbmhlcml0cyhtb2R1bGUuZXhwb3J0cy5JU09fODg1OV81LCBzYmNzKTtcblxuXG5tb2R1bGUuZXhwb3J0cy5JU09fODg1OV82ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuYnl0ZU1hcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBbXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgwMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsXG4gICAgICAweDY4LCAweDY5LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLFxuICAgICAgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NyxcbiAgICAgIDB4NzgsIDB4NzksIDB4N0EsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LFxuICAgICAgMHg2OCwgMHg2OSwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwgMHg2RixcbiAgICAgIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsXG4gICAgICAweDc4LCAweDc5LCAweDdBLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweEMxLCAweEMyLCAweEMzLCAweEM0LCAweEM1LCAweEM2LCAweEM3LFxuICAgICAgMHhDOCwgMHhDOSwgMHhDQSwgMHhDQiwgMHhDQywgMHhDRCwgMHhDRSwgMHhDRixcbiAgICAgIDB4RDAsIDB4RDEsIDB4RDIsIDB4RDMsIDB4RDQsIDB4RDUsIDB4RDYsIDB4RDcsXG4gICAgICAweEQ4LCAweEQ5LCAweERBLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHhFMCwgMHhFMSwgMHhFMiwgMHhFMywgMHhFNCwgMHhFNSwgMHhFNiwgMHhFNyxcbiAgICAgIDB4RTgsIDB4RTksIDB4RUEsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMFxuICAgIF07XG4gIH07XG5cbiAgdGhpcy5uZ3JhbXMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gW1xuICAgICAgMHgyMEM3RTQsIDB4MjBDN0U2LCAweDIwQzhDNywgMHgyMEQ5RTQsIDB4MjBFMUVBLCAweDIwRTRFNCwgMHgyMEU1RTYsIDB4MjBFOEM3LFxuICAgICAgMHhDNzIwQzcsIDB4QzdDMTIwLCAweEM3Q0EyMCwgMHhDN0QxMjAsIDB4QzdFNDIwLCAweEM3RTRDMywgMHhDN0U0QzcsIDB4QzdFNEM4LFxuICAgICAgMHhDN0U0Q0EsIDB4QzdFNENDLCAweEM3RTRDRCwgMHhDN0U0Q0YsIDB4QzdFNEQzLCAweEM3RTREOSwgMHhDN0U0RTIsIDB4QzdFNEU1LFxuICAgICAgMHhDN0U0RTgsIDB4QzdFNEVBLCAweEM3RTUyMCwgMHhDN0U2MjAsIDB4QzdFNkNBLCAweEM4MjBDNywgMHhDOTIwQzcsIDB4QzkyMEUxLFxuICAgICAgMHhDOTIwRTQsIDB4QzkyMEU1LCAweEM5MjBFOCwgMHhDQTIwQzcsIDB4Q0YyMEM3LCAweENGQzkyMCwgMHhEMTIwQzcsIDB4RDFDOTIwLFxuICAgICAgMHhEMzIwQzcsIDB4RDkyMEM3LCAweEQ5RTRFOSwgMHhFMUVBMjAsIDB4RTQyMEM3LCAweEU0QzkyMCwgMHhFNEU5MjAsIDB4RTRFQTIwLFxuICAgICAgMHhFNTIwQzcsIDB4RTVDNzIwLCAweEU1QzkyMCwgMHhFNUU2MjAsIDB4RTYyMEM3LCAweEU3MjBDNywgMHhFN0M3MjAsIDB4RThDN0U0LFxuICAgICAgMHhFOEU2MjAsIDB4RTkyMEM3LCAweEVBMjBDNywgMHhFQTIwRTUsIDB4RUEyMEU4LCAweEVBQzkyMCwgMHhFQUQxMjAsIDB4RUFFNjIwXG4gICAgXTtcbiAgfTtcblxuICB0aGlzLm5hbWUgPSBmdW5jdGlvbihkZXQpIHtcbiAgICByZXR1cm4gJ0lTTy04ODU5LTYnO1xuICB9O1xuXG4gIHRoaXMubGFuZ3VhZ2UgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ2FyJztcbiAgfTtcbn07XG51dGlsLmluaGVyaXRzKG1vZHVsZS5leHBvcnRzLklTT184ODU5XzYsIHNiY3MpO1xuXG5cbm1vZHVsZS5leHBvcnRzLklTT184ODU5XzcgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5ieXRlTWFwID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDAwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NyxcbiAgICAgIDB4NjgsIDB4NjksIDB4NkEsIDB4NkIsIDB4NkMsIDB4NkQsIDB4NkUsIDB4NkYsXG4gICAgICAweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LFxuICAgICAgMHg3OCwgMHg3OSwgMHg3QSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsXG4gICAgICAweDY4LCAweDY5LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLFxuICAgICAgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NyxcbiAgICAgIDB4NzgsIDB4NzksIDB4N0EsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHhBMSwgMHhBMiwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweERDLCAweDIwLFxuICAgICAgMHhERCwgMHhERSwgMHhERiwgMHgyMCwgMHhGQywgMHgyMCwgMHhGRCwgMHhGRSxcbiAgICAgIDB4QzAsIDB4RTEsIDB4RTIsIDB4RTMsIDB4RTQsIDB4RTUsIDB4RTYsIDB4RTcsXG4gICAgICAweEU4LCAweEU5LCAweEVBLCAweEVCLCAweEVDLCAweEVELCAweEVFLCAweEVGLFxuICAgICAgMHhGMCwgMHhGMSwgMHgyMCwgMHhGMywgMHhGNCwgMHhGNSwgMHhGNiwgMHhGNyxcbiAgICAgIDB4RjgsIDB4RjksIDB4RkEsIDB4RkIsIDB4REMsIDB4REQsIDB4REUsIDB4REYsXG4gICAgICAweEUwLCAweEUxLCAweEUyLCAweEUzLCAweEU0LCAweEU1LCAweEU2LCAweEU3LFxuICAgICAgMHhFOCwgMHhFOSwgMHhFQSwgMHhFQiwgMHhFQywgMHhFRCwgMHhFRSwgMHhFRixcbiAgICAgIDB4RjAsIDB4RjEsIDB4RjIsIDB4RjMsIDB4RjQsIDB4RjUsIDB4RjYsIDB4RjcsXG4gICAgICAweEY4LCAweEY5LCAweEZBLCAweEZCLCAweEZDLCAweEZELCAweEZFLCAweDIwXG4gICAgXTtcbiAgfTtcblxuICB0aGlzLm5ncmFtcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBbXG4gICAgICAweDIwRTFFRCwgMHgyMEUxRjAsIDB4MjBFM0U5LCAweDIwRTRFOSwgMHgyMEU1RjAsIDB4MjBFNzIwLCAweDIwRUFFMSwgMHgyMEVDRTUsXG4gICAgICAweDIwRURFMSwgMHgyMEVGMjAsIDB4MjBGMEUxLCAweDIwRjBFRiwgMHgyMEYwRjEsIDB4MjBGM0Y0LCAweDIwRjNGNSwgMHgyMEY0RTcsXG4gICAgICAweDIwRjRFRiwgMHhERkUxMjAsIDB4RTEyMEUxLCAweEUxMjBGNCwgMHhFMUU5MjAsIDB4RTFFRDIwLCAweEUxRjBGQywgMHhFMUYyMjAsXG4gICAgICAweEUzRTlFMSwgMHhFNUU5MjAsIDB4RTVGMjIwLCAweEU3MjBGNCwgMHhFN0VEMjAsIDB4RTdGMjIwLCAweEU5MjBGNCwgMHhFOUUxMjAsXG4gICAgICAweEU5RUFERSwgMHhFOUYyMjAsIDB4RUFFMUU5LCAweEVBRTFGNCwgMHhFQ0U1MjAsIDB4RUQyMEUxLCAweEVEMjBFNSwgMHhFRDIwRjAsXG4gICAgICAweEVERTEyMCwgMHhFRkYyMjAsIDB4RUZGNTIwLCAweEYwRUZGNSwgMHhGMEYxRUYsIDB4RjBGQzIwLCAweEYyMjBFMSwgMHhGMjIwRTUsXG4gICAgICAweEYyMjBFQSwgMHhGMjIwRjAsIDB4RjIyMEY0LCAweEYzRTUyMCwgMHhGM0U3MjAsIDB4RjNGNEVGLCAweEY0RTEyMCwgMHhGNEUxRTksXG4gICAgICAweEY0RTdFRCwgMHhGNEU3RjIsIDB4RjRFOUVBLCAweEY0RUYyMCwgMHhGNEVGRjUsIDB4RjRGOUVELCAweEY5RUQyMCwgMHhGRUVEMjBcbiAgICBdO1xuICB9O1xuXG4gIHRoaXMubmFtZSA9IGZ1bmN0aW9uKGRldCkge1xuICAgIHJldHVybiAoZGV0ICYmIGRldC5mQzFCeXRlcykgPyAnd2luZG93cy0xMjUzJyA6ICdJU08tODg1OS03JztcbiAgfTtcblxuICB0aGlzLmxhbmd1YWdlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICdlbCc7XG4gIH07XG59O1xudXRpbC5pbmhlcml0cyhtb2R1bGUuZXhwb3J0cy5JU09fODg1OV83LCBzYmNzKTtcblxubW9kdWxlLmV4cG9ydHMuSVNPXzg4NTlfOCA9IGZ1bmN0aW9uKCkge1xuXG4gIHRoaXMuYnl0ZU1hcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBbXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgwMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsXG4gICAgICAweDY4LCAweDY5LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLFxuICAgICAgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NyxcbiAgICAgIDB4NzgsIDB4NzksIDB4N0EsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LFxuICAgICAgMHg2OCwgMHg2OSwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwgMHg2RixcbiAgICAgIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsXG4gICAgICAweDc4LCAweDc5LCAweDdBLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHhCNSwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHhFMCwgMHhFMSwgMHhFMiwgMHhFMywgMHhFNCwgMHhFNSwgMHhFNiwgMHhFNyxcbiAgICAgIDB4RTgsIDB4RTksIDB4RUEsIDB4RUIsIDB4RUMsIDB4RUQsIDB4RUUsIDB4RUYsXG4gICAgICAweEYwLCAweEYxLCAweEYyLCAweEYzLCAweEY0LCAweEY1LCAweEY2LCAweEY3LFxuICAgICAgMHhGOCwgMHhGOSwgMHhGQSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMFxuICAgIF07XG4gIH07XG5cbiAgdGhpcy5uZ3JhbXMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gW1xuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdoZScsIFtcbiAgICAgICAgMHgyMEUwRTUsIDB4MjBFMEU3LCAweDIwRTBFOSwgMHgyMEUwRkEsIDB4MjBFMUU5LCAweDIwRTFFRSwgMHgyMEU0RTAsIDB4MjBFNEU1LFxuICAgICAgICAweDIwRTRFOSwgMHgyMEU0RUUsIDB4MjBFNEYyLCAweDIwRTRGOSwgMHgyMEU0RkEsIDB4MjBFQ0UwLCAweDIwRUNFNCwgMHgyMEVFRTAsXG4gICAgICAgIDB4MjBGMkVDLCAweDIwRjlFQywgMHhFMEZBMjAsIDB4RTQyMEUwLCAweEU0MjBFMSwgMHhFNDIwRTQsIDB4RTQyMEVDLCAweEU0MjBFRSxcbiAgICAgICAgMHhFNDIwRjksIDB4RTRFNUUwLCAweEU1RTAyMCwgMHhFNUVEMjAsIDB4RTVFRjIwLCAweEU1RjgyMCwgMHhFNUZBMjAsIDB4RTkyMEU0LFxuICAgICAgICAweEU5RTQyMCwgMHhFOUU1RkEsIDB4RTlFOUVELCAweEU5RUQyMCwgMHhFOUVGMjAsIDB4RTlGODIwLCAweEU5RkEyMCwgMHhFQzIwRTAsXG4gICAgICAgIDB4RUMyMEU0LCAweEVDRTAyMCwgMHhFQ0U0MjAsIDB4RUQyMEUwLCAweEVEMjBFMSwgMHhFRDIwRTQsIDB4RUQyMEVDLCAweEVEMjBFRSxcbiAgICAgICAgMHhFRDIwRjksIDB4RUVFNDIwLCAweEVGMjBFNCwgMHhGMEU0MjAsIDB4RjBFOTIwLCAweEYwRTlFRCwgMHhGMkVDMjAsIDB4RjgyMEU0LFxuICAgICAgICAweEY4RTlFRCwgMHhGOUVDMjAsIDB4RkEyMEUwLCAweEZBMjBFMSwgMHhGQTIwRTQsIDB4RkEyMEVDLCAweEZBMjBFRSwgMHhGQTIwRjksXG4gICAgICBdKSxcbiAgICAgIG5ldyBOR3JhbXNQbHVzTGFuZygnaGUnLCBbXG4gICAgICAgIDB4MjBFMEU1LCAweDIwRTBFQywgMHgyMEU0RTksIDB4MjBFNEVDLCAweDIwRTRFRSwgMHgyMEU0RjAsIDB4MjBFOUYwLCAweDIwRUNGMixcbiAgICAgICAgMHgyMEVDRjksIDB4MjBFREU1LCAweDIwRURFOSwgMHgyMEVGRTUsIDB4MjBFRkU5LCAweDIwRjhFNSwgMHgyMEY4RTksIDB4MjBGQUUwLFxuICAgICAgICAweDIwRkFFNSwgMHgyMEZBRTksIDB4RTAyMEU0LCAweEUwMjBFQywgMHhFMDIwRUQsIDB4RTAyMEZBLCAweEUwRTQyMCwgMHhFMEU1RTQsXG4gICAgICAgIDB4RTBFQzIwLCAweEUwRUUyMCwgMHhFMTIwRTQsIDB4RTEyMEVELCAweEUxMjBGQSwgMHhFNDIwRTQsIDB4RTQyMEU5LCAweEU0MjBFQyxcbiAgICAgICAgMHhFNDIwRUQsIDB4RTQyMEVGLCAweEU0MjBGOCwgMHhFNDIwRkEsIDB4RTRFQzIwLCAweEU1RTAyMCwgMHhFNUU0MjAsIDB4RTdFMDIwLFxuICAgICAgICAweEU5RTAyMCwgMHhFOUUxMjAsIDB4RTlFNDIwLCAweEVDMjBFNCwgMHhFQzIwRUQsIDB4RUMyMEZBLCAweEVDRjIyMCwgMHhFQ0Y5MjAsXG4gICAgICAgIDB4RURFOUU5LCAweEVERTlGMCwgMHhFREU5RjgsIDB4RUUyMEU0LCAweEVFMjBFRCwgMHhFRTIwRkEsIDB4RUVFMTIwLCAweEVFRTQyMCxcbiAgICAgICAgMHhGMkU0MjAsIDB4RjkyMEU0LCAweEY5MjBFRCwgMHhGOTIwRkEsIDB4RjlFNDIwLCAweEZBRTAyMCwgMHhGQUU0MjAsIDB4RkFFNUU5LFxuICAgICAgXSlcbiAgICBdO1xuICB9O1xuXG4gIHRoaXMubmFtZSA9IGZ1bmN0aW9uKGRldCkge1xuICAgIHJldHVybiAoZGV0ICYmIGRldC5mQzFCeXRlcykgPyAnd2luZG93cy0xMjU1JyA6ICdJU08tODg1OS04JztcbiAgfTtcblxuICB0aGlzLmxhbmd1YWdlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICdoZSc7XG4gIH07XG5cbn07XG51dGlsLmluaGVyaXRzKG1vZHVsZS5leHBvcnRzLklTT184ODU5XzgsIHNiY3MpO1xuXG5cbm1vZHVsZS5leHBvcnRzLklTT184ODU5XzkgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5ieXRlTWFwID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDAwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NyxcbiAgICAgIDB4NjgsIDB4NjksIDB4NkEsIDB4NkIsIDB4NkMsIDB4NkQsIDB4NkUsIDB4NkYsXG4gICAgICAweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LFxuICAgICAgMHg3OCwgMHg3OSwgMHg3QSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsXG4gICAgICAweDY4LCAweDY5LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLFxuICAgICAgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NyxcbiAgICAgIDB4NzgsIDB4NzksIDB4N0EsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4QUEsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweEI1LCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHhCQSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4RTAsIDB4RTEsIDB4RTIsIDB4RTMsIDB4RTQsIDB4RTUsIDB4RTYsIDB4RTcsXG4gICAgICAweEU4LCAweEU5LCAweEVBLCAweEVCLCAweEVDLCAweEVELCAweEVFLCAweEVGLFxuICAgICAgMHhGMCwgMHhGMSwgMHhGMiwgMHhGMywgMHhGNCwgMHhGNSwgMHhGNiwgMHgyMCxcbiAgICAgIDB4RjgsIDB4RjksIDB4RkEsIDB4RkIsIDB4RkMsIDB4NjksIDB4RkUsIDB4REYsXG4gICAgICAweEUwLCAweEUxLCAweEUyLCAweEUzLCAweEU0LCAweEU1LCAweEU2LCAweEU3LFxuICAgICAgMHhFOCwgMHhFOSwgMHhFQSwgMHhFQiwgMHhFQywgMHhFRCwgMHhFRSwgMHhFRixcbiAgICAgIDB4RjAsIDB4RjEsIDB4RjIsIDB4RjMsIDB4RjQsIDB4RjUsIDB4RjYsIDB4MjAsXG4gICAgICAweEY4LCAweEY5LCAweEZBLCAweEZCLCAweEZDLCAweEZELCAweEZFLCAweEZGXG4gICAgXTtcbiAgfTtcblxuICB0aGlzLm5ncmFtcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBbXG4gICAgICAweDIwNjI2MSwgMHgyMDYyNjksIDB4MjA2Mjc1LCAweDIwNjQ2MSwgMHgyMDY0NjUsIDB4MjA2NzY1LCAweDIwNjg2MSwgMHgyMDY5NkMsXG4gICAgICAweDIwNkI2MSwgMHgyMDZCNkYsIDB4MjA2RDYxLCAweDIwNkY2QywgMHgyMDczNjEsIDB4MjA3NDYxLCAweDIwNzY2NSwgMHgyMDc5NjEsXG4gICAgICAweDYxMjA2MiwgMHg2MTZCMjAsIDB4NjE2QzYxLCAweDYxNkQ2MSwgMHg2MTZFMjAsIDB4NjE2RUZELCAweDYxNzIyMCwgMHg2MTcyNjEsXG4gICAgICAweDYxNzJGRCwgMHg2MTczRkQsIDB4NjE3OTYxLCAweDYyNjk3MiwgMHg2NDYxMjAsIDB4NjQ2NTIwLCAweDY0NjkyMCwgMHg2NTIwNjIsXG4gICAgICAweDY1MjA2QiwgMHg2NTY0NjksIDB4NjU2RTIwLCAweDY1NzIyMCwgMHg2NTcyNjksIDB4NjU3MzY5LCAweDY5NkM2NSwgMHg2OTZFMjAsXG4gICAgICAweDY5NkU2OSwgMHg2OTcyMjAsIDB4NkM2MTZFLCAweDZDNjE3MiwgMHg2QzY1MjAsIDB4NkM2NTcyLCAweDZFMjA2MSwgMHg2RTIwNjIsXG4gICAgICAweDZFMjA2QiwgMHg2RTY0NjEsIDB4NkU2NDY1LCAweDZFNjUyMCwgMHg2RTY5MjAsIDB4NkU2OTZFLCAweDZFRkQyMCwgMHg3MjY5NkUsXG4gICAgICAweDcyRkQ2RSwgMHg3NjY1MjAsIDB4Nzk2MTIwLCAweDc5NkY3MiwgMHhGRDZFMjAsIDB4RkQ2RTY0LCAweEZENkVGRCwgMHhGREYwRkRcbiAgICBdO1xuICB9O1xuXG4gIHRoaXMubmFtZSA9IGZ1bmN0aW9uKGRldCkge1xuICAgIHJldHVybiAoZGV0ICYmIGRldC5mQzFCeXRlcykgPyAnd2luZG93cy0xMjU0JyA6ICdJU08tODg1OS05JztcbiAgfTtcblxuICB0aGlzLmxhbmd1YWdlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICd0cic7XG4gIH07XG59O1xudXRpbC5pbmhlcml0cyhtb2R1bGUuZXhwb3J0cy5JU09fODg1OV85LCBzYmNzKTtcblxuXG5tb2R1bGUuZXhwb3J0cy53aW5kb3dzXzEyNTEgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5ieXRlTWFwID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDAwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NyxcbiAgICAgIDB4NjgsIDB4NjksIDB4NkEsIDB4NkIsIDB4NkMsIDB4NkQsIDB4NkUsIDB4NkYsXG4gICAgICAweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LFxuICAgICAgMHg3OCwgMHg3OSwgMHg3QSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsXG4gICAgICAweDY4LCAweDY5LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLFxuICAgICAgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NyxcbiAgICAgIDB4NzgsIDB4NzksIDB4N0EsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDkwLCAweDgzLCAweDIwLCAweDgzLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHg5QSwgMHgyMCwgMHg5QywgMHg5RCwgMHg5RSwgMHg5RixcbiAgICAgIDB4OTAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDlBLCAweDIwLCAweDlDLCAweDlELCAweDlFLCAweDlGLFxuICAgICAgMHgyMCwgMHhBMiwgMHhBMiwgMHhCQywgMHgyMCwgMHhCNCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4QjgsIDB4MjAsIDB4QkEsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4QkYsXG4gICAgICAweDIwLCAweDIwLCAweEIzLCAweEIzLCAweEI0LCAweEI1LCAweDIwLCAweDIwLFxuICAgICAgMHhCOCwgMHgyMCwgMHhCQSwgMHgyMCwgMHhCQywgMHhCRSwgMHhCRSwgMHhCRixcbiAgICAgIDB4RTAsIDB4RTEsIDB4RTIsIDB4RTMsIDB4RTQsIDB4RTUsIDB4RTYsIDB4RTcsXG4gICAgICAweEU4LCAweEU5LCAweEVBLCAweEVCLCAweEVDLCAweEVELCAweEVFLCAweEVGLFxuICAgICAgMHhGMCwgMHhGMSwgMHhGMiwgMHhGMywgMHhGNCwgMHhGNSwgMHhGNiwgMHhGNyxcbiAgICAgIDB4RjgsIDB4RjksIDB4RkEsIDB4RkIsIDB4RkMsIDB4RkQsIDB4RkUsIDB4RkYsXG4gICAgICAweEUwLCAweEUxLCAweEUyLCAweEUzLCAweEU0LCAweEU1LCAweEU2LCAweEU3LFxuICAgICAgMHhFOCwgMHhFOSwgMHhFQSwgMHhFQiwgMHhFQywgMHhFRCwgMHhFRSwgMHhFRixcbiAgICAgIDB4RjAsIDB4RjEsIDB4RjIsIDB4RjMsIDB4RjQsIDB4RjUsIDB4RjYsIDB4RjcsXG4gICAgICAweEY4LCAweEY5LCAweEZBLCAweEZCLCAweEZDLCAweEZELCAweEZFLCAweEZGXG4gICAgXTtcbiAgfTtcblxuICB0aGlzLm5ncmFtcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBbXG4gICAgICAweDIwRTIyMCwgMHgyMEUyRUUsIDB4MjBFNEVFLCAweDIwRTdFMCwgMHgyMEU4MjAsIDB4MjBFQUUwLCAweDIwRUFFRSwgMHgyMEVERTAsXG4gICAgICAweDIwRURFNSwgMHgyMEVFRTEsIDB4MjBFRkVFLCAweDIwRUZGMCwgMHgyMEYwRTAsIDB4MjBGMUVFLCAweDIwRjFGMiwgMHgyMEYyRUUsXG4gICAgICAweDIwRjdGMiwgMHgyMEZERjIsIDB4RTBFREU4LCAweEUwRjJGQywgMHhFM0VFMjAsIDB4RTVFQkZDLCAweEU1RURFOCwgMHhFNUYxRjIsXG4gICAgICAweEU1RjIyMCwgMHhFODIwRUYsIDB4RThFNTIwLCAweEU4RTgyMCwgMHhFOEZGMjAsIDB4RUJFNUVELCAweEVCRTgyMCwgMHhFQkZDRUQsXG4gICAgICAweEVERTAyMCwgMHhFREU1MjAsIDB4RURFOEU1LCAweEVERThGRiwgMHhFREVFMjAsIDB4RURFRUUyLCAweEVFMjBFMiwgMHhFRTIwRUYsXG4gICAgICAweEVFMjBGMSwgMHhFRUUyMjAsIDB4RUVFMkUwLCAweEVFRTNFRSwgMHhFRUU5MjAsIDB4RUVFQkZDLCAweEVFRUMyMCwgMHhFRUYxRjIsXG4gICAgICAweEVGRUVFQiwgMHhFRkYwRTUsIDB4RUZGMEU4LCAweEVGRjBFRSwgMHhGMEUwRTIsIDB4RjBFNUU0LCAweEYxRjJFMCwgMHhGMUYyRTIsXG4gICAgICAweEYxRjJFOCwgMHhGMUZGMjAsIDB4RjJFNUVCLCAweEYyRUUyMCwgMHhGMkVFRjAsIDB4RjJGQzIwLCAweEY3RjJFRSwgMHhGQkY1MjBcbiAgICBdO1xuICB9O1xuXG4gIHRoaXMubmFtZSA9IGZ1bmN0aW9uKGRldCkge1xuICAgIHJldHVybiAnd2luZG93cy0xMjUxJztcbiAgfTtcblxuICB0aGlzLmxhbmd1YWdlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICdydSc7XG4gIH07XG59O1xudXRpbC5pbmhlcml0cyhtb2R1bGUuZXhwb3J0cy53aW5kb3dzXzEyNTEsIHNiY3MpO1xuXG5cbm1vZHVsZS5leHBvcnRzLndpbmRvd3NfMTI1NiA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmJ5dGVNYXAgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gW1xuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MDAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LFxuICAgICAgMHg2OCwgMHg2OSwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwgMHg2RixcbiAgICAgIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsXG4gICAgICAweDc4LCAweDc5LCAweDdBLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NyxcbiAgICAgIDB4NjgsIDB4NjksIDB4NkEsIDB4NkIsIDB4NkMsIDB4NkQsIDB4NkUsIDB4NkYsXG4gICAgICAweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LFxuICAgICAgMHg3OCwgMHg3OSwgMHg3QSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4ODEsIDB4MjAsIDB4ODMsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDg4LCAweDIwLCAweDhBLCAweDIwLCAweDlDLCAweDhELCAweDhFLCAweDhGLFxuICAgICAgMHg5MCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4OTgsIDB4MjAsIDB4OUEsIDB4MjAsIDB4OUMsIDB4MjAsIDB4MjAsIDB4OUYsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHhBQSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4QjUsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHhDMCwgMHhDMSwgMHhDMiwgMHhDMywgMHhDNCwgMHhDNSwgMHhDNiwgMHhDNyxcbiAgICAgIDB4QzgsIDB4QzksIDB4Q0EsIDB4Q0IsIDB4Q0MsIDB4Q0QsIDB4Q0UsIDB4Q0YsXG4gICAgICAweEQwLCAweEQxLCAweEQyLCAweEQzLCAweEQ0LCAweEQ1LCAweEQ2LCAweDIwLFxuICAgICAgMHhEOCwgMHhEOSwgMHhEQSwgMHhEQiwgMHhEQywgMHhERCwgMHhERSwgMHhERixcbiAgICAgIDB4RTAsIDB4RTEsIDB4RTIsIDB4RTMsIDB4RTQsIDB4RTUsIDB4RTYsIDB4RTcsXG4gICAgICAweEU4LCAweEU5LCAweEVBLCAweEVCLCAweEVDLCAweEVELCAweEVFLCAweEVGLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHhGNCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4RjksIDB4MjAsIDB4RkIsIDB4RkMsIDB4MjAsIDB4MjAsIDB4RkZcbiAgICBdO1xuICB9O1xuXG4gIHRoaXMubmdyYW1zID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIDB4MjBDN0UxLCAweDIwQzdFNCwgMHgyMEM4QzcsIDB4MjBEQUUxLCAweDIwRERFRCwgMHgyMEUxRTEsIDB4MjBFM0U0LCAweDIwRTZDNyxcbiAgICAgIDB4QzcyMEM3LCAweEM3QzEyMCwgMHhDN0NBMjAsIDB4QzdEMTIwLCAweEM3RTEyMCwgMHhDN0UxQzMsIDB4QzdFMUM3LCAweEM3RTFDOCxcbiAgICAgIDB4QzdFMUNBLCAweEM3RTFDQywgMHhDN0UxQ0QsIDB4QzdFMUNGLCAweEM3RTFEMywgMHhDN0UxREEsIDB4QzdFMURFLCAweEM3RTFFMyxcbiAgICAgIDB4QzdFMUU2LCAweEM3RTFFRCwgMHhDN0UzMjAsIDB4QzdFNDIwLCAweEM3RTRDQSwgMHhDODIwQzcsIDB4QzkyMEM3LCAweEM5MjBERCxcbiAgICAgIDB4QzkyMEUxLCAweEM5MjBFMywgMHhDOTIwRTYsIDB4Q0EyMEM3LCAweENGMjBDNywgMHhDRkM5MjAsIDB4RDEyMEM3LCAweEQxQzkyMCxcbiAgICAgIDB4RDMyMEM3LCAweERBMjBDNywgMHhEQUUxRUMsIDB4RERFRDIwLCAweEUxMjBDNywgMHhFMUM5MjAsIDB4RTFFQzIwLCAweEUxRUQyMCxcbiAgICAgIDB4RTMyMEM3LCAweEUzQzcyMCwgMHhFM0M5MjAsIDB4RTNFNDIwLCAweEU0MjBDNywgMHhFNTIwQzcsIDB4RTVDNzIwLCAweEU2QzdFMSxcbiAgICAgIDB4RTZFNDIwLCAweEVDMjBDNywgMHhFRDIwQzcsIDB4RUQyMEUzLCAweEVEMjBFNiwgMHhFREM5MjAsIDB4RUREMTIwLCAweEVERTQyMFxuICAgIF07XG4gIH07XG5cbiAgdGhpcy5uYW1lID0gZnVuY3Rpb24oZGV0KSB7XG4gICAgcmV0dXJuICd3aW5kb3dzLTEyNTYnO1xuICB9O1xuXG4gIHRoaXMubGFuZ3VhZ2UgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ2FyJztcbiAgfTtcbn07XG51dGlsLmluaGVyaXRzKG1vZHVsZS5leHBvcnRzLndpbmRvd3NfMTI1Niwgc2Jjcyk7XG5cblxubW9kdWxlLmV4cG9ydHMuS09JOF9SID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuYnl0ZU1hcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBbXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgwMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsXG4gICAgICAweDY4LCAweDY5LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLFxuICAgICAgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NyxcbiAgICAgIDB4NzgsIDB4NzksIDB4N0EsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LFxuICAgICAgMHg2OCwgMHg2OSwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwgMHg2RixcbiAgICAgIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsXG4gICAgICAweDc4LCAweDc5LCAweDdBLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4QTMsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHhBMywgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweEMwLCAweEMxLCAweEMyLCAweEMzLCAweEM0LCAweEM1LCAweEM2LCAweEM3LFxuICAgICAgMHhDOCwgMHhDOSwgMHhDQSwgMHhDQiwgMHhDQywgMHhDRCwgMHhDRSwgMHhDRixcbiAgICAgIDB4RDAsIDB4RDEsIDB4RDIsIDB4RDMsIDB4RDQsIDB4RDUsIDB4RDYsIDB4RDcsXG4gICAgICAweEQ4LCAweEQ5LCAweERBLCAweERCLCAweERDLCAweERELCAweERFLCAweERGLFxuICAgICAgMHhDMCwgMHhDMSwgMHhDMiwgMHhDMywgMHhDNCwgMHhDNSwgMHhDNiwgMHhDNyxcbiAgICAgIDB4QzgsIDB4QzksIDB4Q0EsIDB4Q0IsIDB4Q0MsIDB4Q0QsIDB4Q0UsIDB4Q0YsXG4gICAgICAweEQwLCAweEQxLCAweEQyLCAweEQzLCAweEQ0LCAweEQ1LCAweEQ2LCAweEQ3LFxuICAgICAgMHhEOCwgMHhEOSwgMHhEQSwgMHhEQiwgMHhEQywgMHhERCwgMHhERSwgMHhERlxuICAgIF07XG4gIH07XG5cbiAgdGhpcy5uZ3JhbXMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gW1xuICAgICAgMHgyMEM0Q0YsIDB4MjBDOTIwLCAweDIwQ0JDMSwgMHgyMENCQ0YsIDB4MjBDRUMxLCAweDIwQ0VDNSwgMHgyMENGQzIsIDB4MjBEMENGLFxuICAgICAgMHgyMEQwRDIsIDB4MjBEMkMxLCAweDIwRDNDRiwgMHgyMEQzRDQsIDB4MjBENENGLCAweDIwRDcyMCwgMHgyMEQ3Q0YsIDB4MjBEQUMxLFxuICAgICAgMHgyMERDRDQsIDB4MjBERUQ0LCAweEMxQ0VDOSwgMHhDMUQ0RDgsIDB4QzVDQ0Q4LCAweEM1Q0VDOSwgMHhDNUQzRDQsIDB4QzVENDIwLFxuICAgICAgMHhDN0NGMjAsIDB4QzkyMEQwLCAweEM5QzUyMCwgMHhDOUM5MjAsIDB4QzlEMTIwLCAweENDQzVDRSwgMHhDQ0M5MjAsIDB4Q0NEOENFLFxuICAgICAgMHhDRUMxMjAsIDB4Q0VDNTIwLCAweENFQzlDNSwgMHhDRUM5RDEsIDB4Q0VDRjIwLCAweENFQ0ZENywgMHhDRjIwRDAsIDB4Q0YyMEQzLFxuICAgICAgMHhDRjIwRDcsIDB4Q0ZDN0NGLCAweENGQ0EyMCwgMHhDRkNDRDgsIDB4Q0ZDRDIwLCAweENGRDNENCwgMHhDRkQ3MjAsIDB4Q0ZEN0MxLFxuICAgICAgMHhEMENGQ0MsIDB4RDBEMkM1LCAweEQwRDJDOSwgMHhEMEQyQ0YsIDB4RDJDMUQ3LCAweEQyQzVDNCwgMHhEM0QxMjAsIDB4RDNENEMxLFxuICAgICAgMHhEM0Q0QzksIDB4RDNENEQ3LCAweEQ0QzVDQywgMHhENENGMjAsIDB4RDRDRkQyLCAweEQ0RDgyMCwgMHhEOUM4MjAsIDB4REVENENGXG4gICAgXTtcbiAgfTtcblxuICB0aGlzLm5hbWUgPSBmdW5jdGlvbihkZXQpIHtcbiAgICByZXR1cm4gJ0tPSTgtUic7XG4gIH07XG5cbiAgdGhpcy5sYW5ndWFnZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAncnUnO1xuICB9O1xufTtcbnV0aWwuaW5oZXJpdHMobW9kdWxlLmV4cG9ydHMuS09JOF9SLCBzYmNzKTtcblxuXG4vKlxubW9kdWxlLmV4cG9ydHMuSVNPXzg4NTlfNyA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmJ5dGVNYXAgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gW1xuXG4gICAgXTtcbiAgfTtcblxuICB0aGlzLm5ncmFtcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBbXG5cbiAgICBdO1xuICB9O1xuXG4gIHRoaXMubmFtZSA9IGZ1bmN0aW9uKGRldCkge1xuICAgIGlmICh0eXBlb2YgZGV0ID09ICd1bmRlZmluZWQnKVxuICAgICAgcmV0dXJuICdJU08tODg1OS03JztcbiAgICByZXR1cm4gZGV0LmZDMUJ5dGVzID8gJ3dpbmRvd3MtMTI1MycgOiAnSVNPLTg4NTktNyc7XG4gIH07XG5cbiAgdGhpcy5sYW5ndWFnZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnZWwnO1xuICB9O1xufTtcbnV0aWwuaW5oZXJpdHMobW9kdWxlLmV4cG9ydHMuSVNPXzg4NTlfNywgc2Jjcyk7XG4qL1xuXG4iLCJ2YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKSxcbiAgTWF0Y2ggPSByZXF1aXJlICgnLi4vbWF0Y2gnKTtcblxuXG4vKipcbiAqIFRoaXMgaXMgYSBzdXBlcmNsYXNzIGZvciB0aGUgaW5kaXZpZHVhbCBkZXRlY3RvcnMgZm9yXG4gKiBlYWNoIG9mIHRoZSBkZXRlY3RhYmxlIG1lbWJlcnMgb2YgdGhlIElTTyAyMDIyIGZhbWlseVxuICogb2YgZW5jb2RpbmdzLlxuICovXG5cbmZ1bmN0aW9uIElTT18yMDIyKCkge31cblxuSVNPXzIwMjIucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24oZGV0KSB7XG5cbiAgLyoqXG4gICAqIE1hdGNoaW5nIGZ1bmN0aW9uIHNoYXJlZCBhbW9uZyB0aGUgMjAyMiBkZXRlY3RvcnMgSlAsIENOIGFuZCBLUlxuICAgKiBDb3VudHMgdXAgdGhlIG51bWJlciBvZiBsZWdhbCBhbiB1bnJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlcyBpblxuICAgKiB0aGUgc2FtcGxlIG9mIHRleHQsIGFuZCBjb21wdXRlcyBhIHNjb3JlIGJhc2VkIG9uIHRoZSB0b3RhbCBudW1iZXIgJlxuICAgKiB0aGUgcHJvcG9ydGlvbiB0aGF0IGZpdCB0aGUgZW5jb2RpbmcuXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB0ZXh0IHRoZSBieXRlIGJ1ZmZlciBjb250YWluaW5nIHRleHQgdG8gYW5hbHlzZVxuICAgKiBAcGFyYW0gdGV4dExlbiAgdGhlIHNpemUgb2YgdGhlIHRleHQgaW4gdGhlIGJ5dGUuXG4gICAqIEBwYXJhbSBlc2NhcGVTZXF1ZW5jZXMgdGhlIGJ5dGUgZXNjYXBlIHNlcXVlbmNlcyB0byB0ZXN0IGZvci5cbiAgICogQHJldHVybiBtYXRjaCBxdWFsaXR5LCBpbiB0aGUgcmFuZ2Ugb2YgMC0xMDAuXG4gICAqL1xuXG4gIHZhciBpLCBqO1xuICB2YXIgZXNjTjtcbiAgdmFyIGhpdHMgICA9IDA7XG4gIHZhciBtaXNzZXMgPSAwO1xuICB2YXIgc2hpZnRzID0gMDtcbiAgdmFyIHF1YWxpdHk7XG5cbiAgLy8gVE9ETzogcmVmYWN0b3IgbWVcbiAgdmFyIHRleHQgPSBkZXQuZklucHV0Qnl0ZXM7XG4gIHZhciB0ZXh0TGVuID0gZGV0LmZJbnB1dExlbjtcblxuICBzY2FuSW5wdXQ6XG4gICAgZm9yIChpID0gMDsgaSA8IHRleHRMZW47IGkrKykge1xuICAgICAgaWYgKHRleHRbaV0gPT0gMHgxYikge1xuICAgICAgICBjaGVja0VzY2FwZXM6XG4gICAgICAgICAgZm9yIChlc2NOID0gMDsgZXNjTiA8IHRoaXMuZXNjYXBlU2VxdWVuY2VzLmxlbmd0aDsgZXNjTisrKSB7XG4gICAgICAgICAgICB2YXIgc2VxID0gdGhpcy5lc2NhcGVTZXF1ZW5jZXNbZXNjTl07XG5cbiAgICAgICAgICAgIGlmICgodGV4dExlbiAtIGkpIDwgc2VxLmxlbmd0aClcbiAgICAgICAgICAgICAgY29udGludWUgY2hlY2tFc2NhcGVzO1xuXG4gICAgICAgICAgICBmb3IgKGogPSAxOyBqIDwgc2VxLmxlbmd0aDsgaisrKVxuICAgICAgICAgICAgICBpZiAoc2VxW2pdICE9IHRleHRbaSArIGpdKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlIGNoZWNrRXNjYXBlcztcblxuXG4gICAgICAgICAgICBoaXRzKys7XG4gICAgICAgICAgICBpICs9IHNlcS5sZW5ndGggLSAxO1xuICAgICAgICAgICAgY29udGludWUgc2NhbklucHV0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1pc3NlcysrO1xuICAgICAgfVxuXG4gICAgICAvLyBTaGlmdCBpbi9vdXRcbiAgICAgIGlmICh0ZXh0W2ldID09IDB4MGUgfHwgdGV4dFtpXSA9PSAweDBmKVxuICAgICAgICBzaGlmdHMrKztcblxuICAgIH1cblxuICBpZiAoaGl0cyA9PSAwKVxuICAgIHJldHVybiBudWxsO1xuXG4gIC8vXG4gIC8vIEluaXRpYWwgcXVhbGl0eSBpcyBiYXNlZCBvbiByZWxhdGl2ZSBwcm9wb3J0aW9uIG9mIHJlY29uZ2l6ZWQgdnMuXG4gIC8vICAgdW5yZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZXMuXG4gIC8vICAgQWxsIGdvb2Q6ICBxdWFsaXR5ID0gMTAwO1xuICAvLyAgIGhhbGYgb3IgbGVzcyBnb29kOiBxdWFsaXR5ID0gMDtcbiAgLy8gICBsaW5lYXIgaW5iZXR3ZWVuLlxuICBxdWFsaXR5ID0gKDEwMCAqIGhpdHMgLSAxMDAgKiBtaXNzZXMpIC8gKGhpdHMgKyBtaXNzZXMpO1xuXG4gIC8vIEJhY2sgb2ZmIHF1YWxpdHkgaWYgdGhlcmUgd2VyZSB0b28gZmV3IGVzY2FwZSBzZXF1ZW5jZXMgc2Vlbi5cbiAgLy8gICBJbmNsdWRlIHNoaWZ0cyBpbiB0aGlzIGNvbXB1dGF0aW9uLCBzbyB0aGF0IEtSIGRvZXMgbm90IGdldCBwZW5hbGl6ZWRcbiAgLy8gICBmb3IgaGF2aW5nIG9ubHkgYSBzaW5nbGUgRXNjYXBlIHNlcXVlbmNlLCBidXQgbWFueSBzaGlmdHMuXG4gIGlmIChoaXRzICsgc2hpZnRzIDwgNSlcbiAgICBxdWFsaXR5IC09ICg1IC0gKGhpdHMgKyBzaGlmdHMpKSAqIDEwO1xuXG4gIHJldHVybiBxdWFsaXR5IDw9IDAgPyBudWxsIDogbmV3IE1hdGNoKGRldCwgdGhpcywgcXVhbGl0eSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5JU09fMjAyMl9KUCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLm5hbWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ0lTTy0yMDIyLUpQJztcbiAgfTtcbiAgdGhpcy5lc2NhcGVTZXF1ZW5jZXMgPSBbXG4gICAgWyAweDFiLCAweDI0LCAweDI4LCAweDQzIF0sICAgLy8gS1MgWCAxMDAxOjE5OTJcbiAgICBbIDB4MWIsIDB4MjQsIDB4MjgsIDB4NDQgXSwgICAvLyBKSVMgWCAyMTItMTk5MFxuICAgIFsgMHgxYiwgMHgyNCwgMHg0MCBdLCAgICAgICAgIC8vIEpJUyBDIDYyMjYtMTk3OFxuICAgIFsgMHgxYiwgMHgyNCwgMHg0MSBdLCAgICAgICAgIC8vIEdCIDIzMTItODBcbiAgICBbIDB4MWIsIDB4MjQsIDB4NDIgXSwgICAgICAgICAvLyBKSVMgWCAyMDgtMTk4M1xuICAgIFsgMHgxYiwgMHgyNiwgMHg0MCBdLCAgICAgICAgIC8vIEpJUyBYIDIwOCAxOTkwLCAxOTk3XG4gICAgWyAweDFiLCAweDI4LCAweDQyIF0sICAgICAgICAgLy8gQVNDSUlcbiAgICBbIDB4MWIsIDB4MjgsIDB4NDggXSwgICAgICAgICAvLyBKSVMtUm9tYW5cbiAgICBbIDB4MWIsIDB4MjgsIDB4NDkgXSwgICAgICAgICAvLyBIYWxmLXdpZHRoIGthdGFrYW5hXG4gICAgWyAweDFiLCAweDI4LCAweDRhIF0sICAgICAgICAgLy8gSklTLVJvbWFuXG4gICAgWyAweDFiLCAweDJlLCAweDQxIF0sICAgICAgICAgLy8gSVNPIDg4NTktMVxuICAgIFsgMHgxYiwgMHgyZSwgMHg0NiBdICAgICAgICAgIC8vIElTTyA4ODU5LTdcbiAgXTtcbn07XG51dGlsLmluaGVyaXRzKG1vZHVsZS5leHBvcnRzLklTT18yMDIyX0pQLCBJU09fMjAyMik7XG5cblxuXG5tb2R1bGUuZXhwb3J0cy5JU09fMjAyMl9LUiA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLm5hbWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ0lTTy0yMDIyLUtSJztcbiAgfTtcbiAgdGhpcy5lc2NhcGVTZXF1ZW5jZXMgPSBbXG4gICAgWyAweDFiLCAweDI0LCAweDI5LCAweDQzIF1cbiAgXTtcbn07XG51dGlsLmluaGVyaXRzKG1vZHVsZS5leHBvcnRzLklTT18yMDIyX0tSLCBJU09fMjAyMik7XG5cblxuXG5tb2R1bGUuZXhwb3J0cy5JU09fMjAyMl9DTiA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLm5hbWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ0lTTy0yMDIyLUNOJztcbiAgfTtcbiAgdGhpcy5lc2NhcGVTZXF1ZW5jZXMgPSBbXG4gICAgWyAweDFiLCAweDI0LCAweDI5LCAweDQxIF0sICAgLy8gR0IgMjMxMi04MFxuICAgIFsgMHgxYiwgMHgyNCwgMHgyOSwgMHg0NyBdLCAgIC8vIENOUyAxMTY0My0xOTkyIFBsYW5lIDFcbiAgICBbIDB4MWIsIDB4MjQsIDB4MkEsIDB4NDggXSwgICAvLyBDTlMgMTE2NDMtMTk5MiBQbGFuZSAyXG4gICAgWyAweDFiLCAweDI0LCAweDI5LCAweDQ1IF0sICAgLy8gSVNPLUlSLTE2NVxuICAgIFsgMHgxYiwgMHgyNCwgMHgyQiwgMHg0OSBdLCAgIC8vIENOUyAxMTY0My0xOTkyIFBsYW5lIDNcbiAgICBbIDB4MWIsIDB4MjQsIDB4MkIsIDB4NEEgXSwgICAvLyBDTlMgMTE2NDMtMTk5MiBQbGFuZSA0XG4gICAgWyAweDFiLCAweDI0LCAweDJCLCAweDRCIF0sICAgLy8gQ05TIDExNjQzLTE5OTIgUGxhbmUgNVxuICAgIFsgMHgxYiwgMHgyNCwgMHgyQiwgMHg0QyBdLCAgIC8vIENOUyAxMTY0My0xOTkyIFBsYW5lIDZcbiAgICBbIDB4MWIsIDB4MjQsIDB4MkIsIDB4NEQgXSwgICAvLyBDTlMgMTE2NDMtMTk5MiBQbGFuZSA3XG4gICAgWyAweDFiLCAweDRlIF0sICAgICAgICAgICAgICAgLy8gU1MyXG4gICAgWyAweDFiLCAweDRmIF0gICAgICAgICAgICAgICAgLy8gU1MzXG4gIF07XG59O1xudXRpbC5pbmhlcml0cyhtb2R1bGUuZXhwb3J0cy5JU09fMjAyMl9DTiwgSVNPXzIwMjIpO1xuIiwiXG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xuXG52YXIgdXRmOCAgPSByZXF1aXJlKCcuL2VuY29kaW5nL3V0ZjgnKSxcbiAgdW5pY29kZSA9IHJlcXVpcmUoJy4vZW5jb2RpbmcvdW5pY29kZScpLFxuICBtYmNzICAgID0gcmVxdWlyZSgnLi9lbmNvZGluZy9tYmNzJyksXG4gIHNiY3MgICAgPSByZXF1aXJlKCcuL2VuY29kaW5nL3NiY3MnKSxcbiAgaXNvMjAyMiA9IHJlcXVpcmUoJy4vZW5jb2RpbmcvaXNvMjAyMicpO1xuXG52YXIgc2VsZiA9IHRoaXM7XG5cbnZhciByZWNvZ25pc2VycyA9IFtcbiAgbmV3IHV0ZjgsXG4gIG5ldyB1bmljb2RlLlVURl8xNkJFLFxuICBuZXcgdW5pY29kZS5VVEZfMTZMRSxcbiAgbmV3IHVuaWNvZGUuVVRGXzMyQkUsXG4gIG5ldyB1bmljb2RlLlVURl8zMkxFLFxuICBuZXcgbWJjcy5zamlzLFxuICBuZXcgbWJjcy5iaWc1LFxuICBuZXcgbWJjcy5ldWNfanAsXG4gIG5ldyBtYmNzLmV1Y19rcixcbiAgbmV3IG1iY3MuZ2JfMTgwMzAsXG4gIG5ldyBpc28yMDIyLklTT18yMDIyX0pQLFxuICBuZXcgaXNvMjAyMi5JU09fMjAyMl9LUixcbiAgbmV3IGlzbzIwMjIuSVNPXzIwMjJfQ04sXG4gIG5ldyBzYmNzLklTT184ODU5XzEsXG4gIG5ldyBzYmNzLklTT184ODU5XzIsXG4gIG5ldyBzYmNzLklTT184ODU5XzUsXG4gIG5ldyBzYmNzLklTT184ODU5XzYsXG4gIG5ldyBzYmNzLklTT184ODU5XzcsXG4gIG5ldyBzYmNzLklTT184ODU5XzgsXG4gIG5ldyBzYmNzLklTT184ODU5XzksXG4gIG5ldyBzYmNzLndpbmRvd3NfMTI1MSxcbiAgbmV3IHNiY3Mud2luZG93c18xMjU2LFxuICBuZXcgc2Jjcy5LT0k4X1Jcbl07XG5cbm1vZHVsZS5leHBvcnRzLmRldGVjdCA9IGZ1bmN0aW9uKGJ1ZmZlciwgb3B0cykge1xuXG4gIC8vIFRhbGx5IHVwIHRoZSBieXRlIG9jY3VyZW5jZSBzdGF0aXN0aWNzLlxuICB2YXIgZkJ5dGVTdGF0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKVxuICAgIGZCeXRlU3RhdHNbaV0gPSAwO1xuXG4gIGZvciAodmFyIGkgPSBidWZmZXIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXG4gICAgZkJ5dGVTdGF0c1tidWZmZXJbaV0gJiAweDAwZmZdKys7XG5cbiAgdmFyIGZDMUJ5dGVzID0gZmFsc2U7XG4gIGZvciAodmFyIGkgPSAweDgwOyBpIDw9IDB4OUY7IGkgKz0gMSkge1xuICAgIGlmIChmQnl0ZVN0YXRzW2ldICE9IDApIHtcbiAgICAgIGZDMUJ5dGVzID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgIGZCeXRlU3RhdHM6ICBmQnl0ZVN0YXRzLFxuICAgIGZDMUJ5dGVzOiAgICBmQzFCeXRlcyxcbiAgICBmUmF3SW5wdXQ6ICAgYnVmZmVyLFxuICAgIGZSYXdMZW5ndGg6ICBidWZmZXIubGVuZ3RoLFxuICAgIGZJbnB1dEJ5dGVzOiBidWZmZXIsXG4gICAgZklucHV0TGVuOiAgIGJ1ZmZlci5sZW5ndGhcbiAgfTtcblxuICB2YXIgbWF0Y2hlcyA9IHJlY29nbmlzZXJzLm1hcChmdW5jdGlvbihyZWMpIHtcbiAgICByZXR1cm4gcmVjLm1hdGNoKGNvbnRleHQpO1xuICB9KS5maWx0ZXIoZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gISFtYXRjaDtcbiAgfSkuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGIuY29uZmlkZW5jZSAtIGEuY29uZmlkZW5jZTtcbiAgfSk7XG5cbiAgaWYgKG9wdHMgJiYgb3B0cy5yZXR1cm5BbGxNYXRjaGVzID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cbiAgZWxzZSB7XG4gICAgcmV0dXJuIG1hdGNoZXMubGVuZ3RoID4gMCA/IG1hdGNoZXNbMF0ubmFtZSA6IG51bGw7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLmRldGVjdEZpbGUgPSBmdW5jdGlvbihmaWxlcGF0aCwgb3B0cywgY2IpIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBvcHRzO1xuICAgIG9wdHMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgZmQ7XG5cbiAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbihlcnIsIGJ1ZmZlcikge1xuICAgIGlmIChmZCkge1xuICAgICAgZnMuY2xvc2VTeW5jKGZkKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyLCBudWxsKTtcbiAgICBjYihudWxsLCBzZWxmLmRldGVjdChidWZmZXIsIG9wdHMpKTtcbiAgfTtcblxuICBpZiAob3B0cyAmJiBvcHRzLnNhbXBsZVNpemUpIHtcbiAgICBmZCA9IGZzLm9wZW5TeW5jKGZpbGVwYXRoLCAncicpLFxuICAgICAgc2FtcGxlID0gQnVmZmVyLmFsbG9jVW5zYWZlKG9wdHMuc2FtcGxlU2l6ZSk7XG5cbiAgICBmcy5yZWFkKGZkLCBzYW1wbGUsIDAsIG9wdHMuc2FtcGxlU2l6ZSwgbnVsbCwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICBoYW5kbGVyKGVyciwgc2FtcGxlKTtcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmcy5yZWFkRmlsZShmaWxlcGF0aCwgaGFuZGxlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5kZXRlY3RGaWxlU3luYyA9IGZ1bmN0aW9uKGZpbGVwYXRoLCBvcHRzKSB7XG4gIGlmIChvcHRzICYmIG9wdHMuc2FtcGxlU2l6ZSkge1xuICAgIHZhciBmZCA9IGZzLm9wZW5TeW5jKGZpbGVwYXRoLCAncicpLFxuICAgICAgc2FtcGxlID0gQnVmZmVyLmFsbG9jVW5zYWZlKG9wdHMuc2FtcGxlU2l6ZSk7XG5cbiAgICBmcy5yZWFkU3luYyhmZCwgc2FtcGxlLCAwLCBvcHRzLnNhbXBsZVNpemUpO1xuICAgIGZzLmNsb3NlU3luYyhmZCk7XG4gICAgcmV0dXJuIHNlbGYuZGV0ZWN0KHNhbXBsZSwgb3B0cyk7XG4gIH1cblxuICByZXR1cm4gc2VsZi5kZXRlY3QoZnMucmVhZEZpbGVTeW5jKGZpbGVwYXRoKSwgb3B0cyk7XG59O1xuXG4vLyBXcmFwcGVycyBmb3IgdGhlIHByZXZpb3VzIGZ1bmN0aW9ucyB0byByZXR1cm4gYWxsIGVuY29kaW5nc1xubW9kdWxlLmV4cG9ydHMuZGV0ZWN0QWxsID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRzKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICBvcHRzID0ge307XG4gIH1cbiAgb3B0cy5yZXR1cm5BbGxNYXRjaGVzID0gdHJ1ZTtcbiAgcmV0dXJuIHNlbGYuZGV0ZWN0KGJ1ZmZlciwgb3B0cyk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmRldGVjdEZpbGVBbGwgPSBmdW5jdGlvbihmaWxlcGF0aCwgb3B0cywgY2IpIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBvcHRzO1xuICAgIG9wdHMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgIG9wdHMgPSB7fTtcbiAgfVxuICBvcHRzLnJldHVybkFsbE1hdGNoZXMgPSB0cnVlO1xuICBzZWxmLmRldGVjdEZpbGUoZmlsZXBhdGgsIG9wdHMsIGNiKTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZGV0ZWN0RmlsZUFsbFN5bmMgPSBmdW5jdGlvbihmaWxlcGF0aCwgb3B0cykge1xuICBpZiAodHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgb3B0cyA9IHt9O1xuICB9XG4gIG9wdHMucmV0dXJuQWxsTWF0Y2hlcyA9IHRydWU7XG4gIHJldHVybiBzZWxmLmRldGVjdEZpbGVTeW5jKGZpbGVwYXRoLCBvcHRzKTtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vZGUvbm8tZGVwcmVjYXRlZC1hcGkgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbnZhciBidWZmZXIgPSByZXF1aXJlKCdidWZmZXInKVxudmFyIEJ1ZmZlciA9IGJ1ZmZlci5CdWZmZXJcblxudmFyIHNhZmVyID0ge31cblxudmFyIGtleVxuXG5mb3IgKGtleSBpbiBidWZmZXIpIHtcbiAgaWYgKCFidWZmZXIuaGFzT3duUHJvcGVydHkoa2V5KSkgY29udGludWVcbiAgaWYgKGtleSA9PT0gJ1Nsb3dCdWZmZXInIHx8IGtleSA9PT0gJ0J1ZmZlcicpIGNvbnRpbnVlXG4gIHNhZmVyW2tleV0gPSBidWZmZXJba2V5XVxufVxuXG52YXIgU2FmZXIgPSBzYWZlci5CdWZmZXIgPSB7fVxuZm9yIChrZXkgaW4gQnVmZmVyKSB7XG4gIGlmICghQnVmZmVyLmhhc093blByb3BlcnR5KGtleSkpIGNvbnRpbnVlXG4gIGlmIChrZXkgPT09ICdhbGxvY1Vuc2FmZScgfHwga2V5ID09PSAnYWxsb2NVbnNhZmVTbG93JykgY29udGludWVcbiAgU2FmZXJba2V5XSA9IEJ1ZmZlcltrZXldXG59XG5cbnNhZmVyLkJ1ZmZlci5wcm90b3R5cGUgPSBCdWZmZXIucHJvdG90eXBlXG5cbmlmICghU2FmZXIuZnJvbSB8fCBTYWZlci5mcm9tID09PSBVaW50OEFycmF5LmZyb20pIHtcbiAgU2FmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiB2YWx1ZSlcbiAgICB9XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gQnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cbn1cblxuaWYgKCFTYWZlci5hbGxvYykge1xuICBTYWZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICAgIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2Ygc2l6ZSlcbiAgICB9XG4gICAgaWYgKHNpemUgPCAwIHx8IHNpemUgPj0gMiAqICgxIDw8IDMwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyBzaXplICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpXG4gICAgfVxuICAgIHZhciBidWYgPSBCdWZmZXIoc2l6ZSlcbiAgICBpZiAoIWZpbGwgfHwgZmlsbC5sZW5ndGggPT09IDApIHtcbiAgICAgIGJ1Zi5maWxsKDApXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICBidWYuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmLmZpbGwoZmlsbClcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZlxuICB9XG59XG5cbmlmICghc2FmZXIua1N0cmluZ01heExlbmd0aCkge1xuICB0cnkge1xuICAgIHNhZmVyLmtTdHJpbmdNYXhMZW5ndGggPSBwcm9jZXNzLmJpbmRpbmcoJ2J1ZmZlcicpLmtTdHJpbmdNYXhMZW5ndGhcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIHdlIGNhbid0IGRldGVybWluZSBrU3RyaW5nTWF4TGVuZ3RoIGluIGVudmlyb25tZW50cyB3aGVyZSBwcm9jZXNzLmJpbmRpbmdcbiAgICAvLyBpcyB1bnN1cHBvcnRlZCwgc28gbGV0J3Mgbm90IHNldCBpdFxuICB9XG59XG5cbmlmICghc2FmZXIuY29uc3RhbnRzKSB7XG4gIHNhZmVyLmNvbnN0YW50cyA9IHtcbiAgICBNQVhfTEVOR1RIOiBzYWZlci5rTWF4TGVuZ3RoXG4gIH1cbiAgaWYgKHNhZmVyLmtTdHJpbmdNYXhMZW5ndGgpIHtcbiAgICBzYWZlci5jb25zdGFudHMuTUFYX1NUUklOR19MRU5HVEggPSBzYWZlci5rU3RyaW5nTWF4TGVuZ3RoXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzYWZlclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBCT01DaGFyID0gJ1xcdUZFRkYnO1xuXG5leHBvcnRzLlByZXBlbmRCT00gPSBQcmVwZW5kQk9NV3JhcHBlclxuZnVuY3Rpb24gUHJlcGVuZEJPTVdyYXBwZXIoZW5jb2Rlciwgb3B0aW9ucykge1xuICAgIHRoaXMuZW5jb2RlciA9IGVuY29kZXI7XG4gICAgdGhpcy5hZGRCT00gPSB0cnVlO1xufVxuXG5QcmVwZW5kQk9NV3JhcHBlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICBpZiAodGhpcy5hZGRCT00pIHtcbiAgICAgICAgc3RyID0gQk9NQ2hhciArIHN0cjtcbiAgICAgICAgdGhpcy5hZGRCT00gPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5lbmNvZGVyLndyaXRlKHN0cik7XG59XG5cblByZXBlbmRCT01XcmFwcGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5lbmNvZGVyLmVuZCgpO1xufVxuXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydHMuU3RyaXBCT00gPSBTdHJpcEJPTVdyYXBwZXI7XG5mdW5jdGlvbiBTdHJpcEJPTVdyYXBwZXIoZGVjb2Rlciwgb3B0aW9ucykge1xuICAgIHRoaXMuZGVjb2RlciA9IGRlY29kZXI7XG4gICAgdGhpcy5wYXNzID0gZmFsc2U7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbn1cblxuU3RyaXBCT01XcmFwcGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1Zikge1xuICAgIHZhciByZXMgPSB0aGlzLmRlY29kZXIud3JpdGUoYnVmKTtcbiAgICBpZiAodGhpcy5wYXNzIHx8ICFyZXMpXG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICBpZiAocmVzWzBdID09PSBCT01DaGFyKSB7XG4gICAgICAgIHJlcyA9IHJlcy5zbGljZSgxKTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuc3RyaXBCT00gPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RyaXBCT00oKTtcbiAgICB9XG5cbiAgICB0aGlzLnBhc3MgPSB0cnVlO1xuICAgIHJldHVybiByZXM7XG59XG5cblN0cmlwQk9NV3JhcHBlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVjb2Rlci5lbmQoKTtcbn1cblxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgQnVmZmVyID0gcmVxdWlyZShcInNhZmVyLWJ1ZmZlclwiKS5CdWZmZXI7XG5cbi8vIEV4cG9ydCBOb2RlLmpzIGludGVybmFsIGVuY29kaW5ncy5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLy8gRW5jb2RpbmdzXG4gICAgdXRmODogICB7IHR5cGU6IFwiX2ludGVybmFsXCIsIGJvbUF3YXJlOiB0cnVlfSxcbiAgICBjZXN1ODogIHsgdHlwZTogXCJfaW50ZXJuYWxcIiwgYm9tQXdhcmU6IHRydWV9LFxuICAgIHVuaWNvZGUxMXV0Zjg6IFwidXRmOFwiLFxuXG4gICAgdWNzMjogICB7IHR5cGU6IFwiX2ludGVybmFsXCIsIGJvbUF3YXJlOiB0cnVlfSxcbiAgICB1dGYxNmxlOiBcInVjczJcIixcblxuICAgIGJpbmFyeTogeyB0eXBlOiBcIl9pbnRlcm5hbFwiIH0sXG4gICAgYmFzZTY0OiB7IHR5cGU6IFwiX2ludGVybmFsXCIgfSxcbiAgICBoZXg6ICAgIHsgdHlwZTogXCJfaW50ZXJuYWxcIiB9LFxuXG4gICAgLy8gQ29kZWMuXG4gICAgX2ludGVybmFsOiBJbnRlcm5hbENvZGVjLFxufTtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gSW50ZXJuYWxDb2RlYyhjb2RlY09wdGlvbnMsIGljb252KSB7XG4gICAgdGhpcy5lbmMgPSBjb2RlY09wdGlvbnMuZW5jb2RpbmdOYW1lO1xuICAgIHRoaXMuYm9tQXdhcmUgPSBjb2RlY09wdGlvbnMuYm9tQXdhcmU7XG5cbiAgICBpZiAodGhpcy5lbmMgPT09IFwiYmFzZTY0XCIpXG4gICAgICAgIHRoaXMuZW5jb2RlciA9IEludGVybmFsRW5jb2RlckJhc2U2NDtcbiAgICBlbHNlIGlmICh0aGlzLmVuYyA9PT0gXCJjZXN1OFwiKSB7XG4gICAgICAgIHRoaXMuZW5jID0gXCJ1dGY4XCI7IC8vIFVzZSB1dGY4IGZvciBkZWNvZGluZy5cbiAgICAgICAgdGhpcy5lbmNvZGVyID0gSW50ZXJuYWxFbmNvZGVyQ2VzdTg7XG5cbiAgICAgICAgLy8gQWRkIGRlY29kZXIgZm9yIHZlcnNpb25zIG9mIE5vZGUgbm90IHN1cHBvcnRpbmcgQ0VTVS04XG4gICAgICAgIGlmIChCdWZmZXIuZnJvbSgnZWRhMGJkZWRiMmE5JywgJ2hleCcpLnRvU3RyaW5nKCkgIT09ICfwn5KpJykge1xuICAgICAgICAgICAgdGhpcy5kZWNvZGVyID0gSW50ZXJuYWxEZWNvZGVyQ2VzdTg7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZSA9IGljb252LmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuSW50ZXJuYWxDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IEludGVybmFsRW5jb2RlcjtcbkludGVybmFsQ29kZWMucHJvdG90eXBlLmRlY29kZXIgPSBJbnRlcm5hbERlY29kZXI7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFdlIHVzZSBub2RlLmpzIGludGVybmFsIGRlY29kZXIuIEl0cyBzaWduYXR1cmUgaXMgdGhlIHNhbWUgYXMgb3Vycy5cbnZhciBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXInKS5TdHJpbmdEZWNvZGVyO1xuXG5pZiAoIVN0cmluZ0RlY29kZXIucHJvdG90eXBlLmVuZCkgLy8gTm9kZSB2MC44IGRvZXNuJ3QgaGF2ZSB0aGlzIG1ldGhvZC5cbiAgICBTdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHt9O1xuXG5cbmZ1bmN0aW9uIEludGVybmFsRGVjb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIFN0cmluZ0RlY29kZXIuY2FsbCh0aGlzLCBjb2RlYy5lbmMpO1xufVxuXG5JbnRlcm5hbERlY29kZXIucHJvdG90eXBlID0gU3RyaW5nRGVjb2Rlci5wcm90b3R5cGU7XG5cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEVuY29kZXIgaXMgbW9zdGx5IHRyaXZpYWxcblxuZnVuY3Rpb24gSW50ZXJuYWxFbmNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5lbmMgPSBjb2RlYy5lbmM7XG59XG5cbkludGVybmFsRW5jb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oc3RyLCB0aGlzLmVuYyk7XG59XG5cbkludGVybmFsRW5jb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG59XG5cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEV4Y2VwdCBiYXNlNjQgZW5jb2Rlciwgd2hpY2ggbXVzdCBrZWVwIGl0cyBzdGF0ZS5cblxuZnVuY3Rpb24gSW50ZXJuYWxFbmNvZGVyQmFzZTY0KG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5wcmV2U3RyID0gJyc7XG59XG5cbkludGVybmFsRW5jb2RlckJhc2U2NC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICBzdHIgPSB0aGlzLnByZXZTdHIgKyBzdHI7XG4gICAgdmFyIGNvbXBsZXRlUXVhZHMgPSBzdHIubGVuZ3RoIC0gKHN0ci5sZW5ndGggJSA0KTtcbiAgICB0aGlzLnByZXZTdHIgPSBzdHIuc2xpY2UoY29tcGxldGVRdWFkcyk7XG4gICAgc3RyID0gc3RyLnNsaWNlKDAsIGNvbXBsZXRlUXVhZHMpO1xuXG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHN0ciwgXCJiYXNlNjRcIik7XG59XG5cbkludGVybmFsRW5jb2RlckJhc2U2NC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMucHJldlN0ciwgXCJiYXNlNjRcIik7XG59XG5cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENFU1UtOCBlbmNvZGVyIGlzIGFsc28gc3BlY2lhbC5cblxuZnVuY3Rpb24gSW50ZXJuYWxFbmNvZGVyQ2VzdTgob3B0aW9ucywgY29kZWMpIHtcbn1cblxuSW50ZXJuYWxFbmNvZGVyQ2VzdTgucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvYyhzdHIubGVuZ3RoICogMyksIGJ1ZklkeCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIE5haXZlIGltcGxlbWVudGF0aW9uLCBidXQgaXQgd29ya3MgYmVjYXVzZSBDRVNVLTggaXMgZXNwZWNpYWxseSBlYXN5XG4gICAgICAgIC8vIHRvIGNvbnZlcnQgZnJvbSBVVEYtMTYgKHdoaWNoIGFsbCBKUyBzdHJpbmdzIGFyZSBlbmNvZGVkIGluKS5cbiAgICAgICAgaWYgKGNoYXJDb2RlIDwgMHg4MClcbiAgICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSBjaGFyQ29kZTtcbiAgICAgICAgZWxzZSBpZiAoY2hhckNvZGUgPCAweDgwMCkge1xuICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IDB4QzAgKyAoY2hhckNvZGUgPj4+IDYpO1xuICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IDB4ODAgKyAoY2hhckNvZGUgJiAweDNmKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHsgLy8gY2hhckNvZGUgd2lsbCBhbHdheXMgYmUgPCAweDEwMDAwIGluIGphdmFzY3JpcHQuXG4gICAgICAgICAgICBidWZbYnVmSWR4KytdID0gMHhFMCArIChjaGFyQ29kZSA+Pj4gMTIpO1xuICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IDB4ODAgKyAoKGNoYXJDb2RlID4+PiA2KSAmIDB4M2YpO1xuICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IDB4ODAgKyAoY2hhckNvZGUgJiAweDNmKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYnVmLnNsaWNlKDAsIGJ1ZklkeCk7XG59XG5cbkludGVybmFsRW5jb2RlckNlc3U4LnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENFU1UtOCBkZWNvZGVyIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBOb2RlIHY0LjArXG5cbmZ1bmN0aW9uIEludGVybmFsRGVjb2RlckNlc3U4KG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5hY2MgPSAwO1xuICAgIHRoaXMuY29udEJ5dGVzID0gMDtcbiAgICB0aGlzLmFjY0J5dGVzID0gMDtcbiAgICB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZSA9IGNvZGVjLmRlZmF1bHRDaGFyVW5pY29kZTtcbn1cblxuSW50ZXJuYWxEZWNvZGVyQ2VzdTgucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgdmFyIGFjYyA9IHRoaXMuYWNjLCBjb250Qnl0ZXMgPSB0aGlzLmNvbnRCeXRlcywgYWNjQnl0ZXMgPSB0aGlzLmFjY0J5dGVzLCBcbiAgICAgICAgcmVzID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGN1ckJ5dGUgPSBidWZbaV07XG4gICAgICAgIGlmICgoY3VyQnl0ZSAmIDB4QzApICE9PSAweDgwKSB7IC8vIExlYWRpbmcgYnl0ZVxuICAgICAgICAgICAgaWYgKGNvbnRCeXRlcyA+IDApIHsgLy8gUHJldmlvdXMgY29kZSBpcyBpbnZhbGlkXG4gICAgICAgICAgICAgICAgcmVzICs9IHRoaXMuZGVmYXVsdENoYXJVbmljb2RlO1xuICAgICAgICAgICAgICAgIGNvbnRCeXRlcyA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjdXJCeXRlIDwgMHg4MCkgeyAvLyBTaW5nbGUtYnl0ZSBjb2RlXG4gICAgICAgICAgICAgICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY3VyQnl0ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1ckJ5dGUgPCAweEUwKSB7IC8vIFR3by1ieXRlIGNvZGVcbiAgICAgICAgICAgICAgICBhY2MgPSBjdXJCeXRlICYgMHgxRjtcbiAgICAgICAgICAgICAgICBjb250Qnl0ZXMgPSAxOyBhY2NCeXRlcyA9IDE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1ckJ5dGUgPCAweEYwKSB7IC8vIFRocmVlLWJ5dGUgY29kZVxuICAgICAgICAgICAgICAgIGFjYyA9IGN1ckJ5dGUgJiAweDBGO1xuICAgICAgICAgICAgICAgIGNvbnRCeXRlcyA9IDI7IGFjY0J5dGVzID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIEZvdXIgb3IgbW9yZSBhcmUgbm90IHN1cHBvcnRlZCBmb3IgQ0VTVS04LlxuICAgICAgICAgICAgICAgIHJlcyArPSB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHsgLy8gQ29udGludWF0aW9uIGJ5dGVcbiAgICAgICAgICAgIGlmIChjb250Qnl0ZXMgPiAwKSB7IC8vIFdlJ3JlIHdhaXRpbmcgZm9yIGl0LlxuICAgICAgICAgICAgICAgIGFjYyA9IChhY2MgPDwgNikgfCAoY3VyQnl0ZSAmIDB4M2YpO1xuICAgICAgICAgICAgICAgIGNvbnRCeXRlcy0tOyBhY2NCeXRlcysrO1xuICAgICAgICAgICAgICAgIGlmIChjb250Qnl0ZXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIG92ZXJsb25nIGVuY29kaW5nLCBidXQgc3VwcG9ydCBNb2RpZmllZCBVVEYtOCAoZW5jb2RpbmcgTlVMTCBhcyBDMCA4MClcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjY0J5dGVzID09PSAyICYmIGFjYyA8IDB4ODAgJiYgYWNjID4gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcyArPSB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYWNjQnl0ZXMgPT09IDMgJiYgYWNjIDwgMHg4MDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXMgKz0gdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFjdHVhbGx5IGFkZCBjaGFyYWN0ZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShhY2MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIFVuZXhwZWN0ZWQgY29udGludWF0aW9uIGJ5dGVcbiAgICAgICAgICAgICAgICByZXMgKz0gdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hY2MgPSBhY2M7IHRoaXMuY29udEJ5dGVzID0gY29udEJ5dGVzOyB0aGlzLmFjY0J5dGVzID0gYWNjQnl0ZXM7XG4gICAgcmV0dXJuIHJlcztcbn1cblxuSW50ZXJuYWxEZWNvZGVyQ2VzdTgucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZXMgPSAwO1xuICAgIGlmICh0aGlzLmNvbnRCeXRlcyA+IDApXG4gICAgICAgIHJlcyArPSB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICByZXR1cm4gcmVzO1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgQnVmZmVyID0gcmVxdWlyZShcInNhZmVyLWJ1ZmZlclwiKS5CdWZmZXI7XG5cbi8vIE5vdGU6IFVURjE2LUxFIChvciBVQ1MyKSBjb2RlYyBpcyBOb2RlLmpzIG5hdGl2ZS4gU2VlIGVuY29kaW5ncy9pbnRlcm5hbC5qc1xuXG4vLyA9PSBVVEYxNi1CRSBjb2RlYy4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnRzLnV0ZjE2YmUgPSBVdGYxNkJFQ29kZWM7XG5mdW5jdGlvbiBVdGYxNkJFQ29kZWMoKSB7XG59XG5cblV0ZjE2QkVDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IFV0ZjE2QkVFbmNvZGVyO1xuVXRmMTZCRUNvZGVjLnByb3RvdHlwZS5kZWNvZGVyID0gVXRmMTZCRURlY29kZXI7XG5VdGYxNkJFQ29kZWMucHJvdG90eXBlLmJvbUF3YXJlID0gdHJ1ZTtcblxuXG4vLyAtLSBFbmNvZGluZ1xuXG5mdW5jdGlvbiBVdGYxNkJFRW5jb2RlcigpIHtcbn1cblxuVXRmMTZCRUVuY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgdmFyIGJ1ZiA9IEJ1ZmZlci5mcm9tKHN0ciwgJ3VjczInKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICB2YXIgdG1wID0gYnVmW2ldOyBidWZbaV0gPSBidWZbaSsxXTsgYnVmW2krMV0gPSB0bXA7XG4gICAgfVxuICAgIHJldHVybiBidWY7XG59XG5cblV0ZjE2QkVFbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbn1cblxuXG4vLyAtLSBEZWNvZGluZ1xuXG5mdW5jdGlvbiBVdGYxNkJFRGVjb2RlcigpIHtcbiAgICB0aGlzLm92ZXJmbG93Qnl0ZSA9IC0xO1xufVxuXG5VdGYxNkJFRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWYpIHtcbiAgICBpZiAoYnVmLmxlbmd0aCA9PSAwKVxuICAgICAgICByZXR1cm4gJyc7XG5cbiAgICB2YXIgYnVmMiA9IEJ1ZmZlci5hbGxvYyhidWYubGVuZ3RoICsgMSksXG4gICAgICAgIGkgPSAwLCBqID0gMDtcblxuICAgIGlmICh0aGlzLm92ZXJmbG93Qnl0ZSAhPT0gLTEpIHtcbiAgICAgICAgYnVmMlswXSA9IGJ1ZlswXTtcbiAgICAgICAgYnVmMlsxXSA9IHRoaXMub3ZlcmZsb3dCeXRlO1xuICAgICAgICBpID0gMTsgaiA9IDI7XG4gICAgfVxuXG4gICAgZm9yICg7IGkgPCBidWYubGVuZ3RoLTE7IGkgKz0gMiwgais9IDIpIHtcbiAgICAgICAgYnVmMltqXSA9IGJ1ZltpKzFdO1xuICAgICAgICBidWYyW2orMV0gPSBidWZbaV07XG4gICAgfVxuXG4gICAgdGhpcy5vdmVyZmxvd0J5dGUgPSAoaSA9PSBidWYubGVuZ3RoLTEpID8gYnVmW2J1Zi5sZW5ndGgtMV0gOiAtMTtcblxuICAgIHJldHVybiBidWYyLnNsaWNlKDAsIGopLnRvU3RyaW5nKCd1Y3MyJyk7XG59XG5cblV0ZjE2QkVEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbn1cblxuXG4vLyA9PSBVVEYtMTYgY29kZWMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGVjb2RlciBjaG9vc2VzIGF1dG9tYXRpY2FsbHkgZnJvbSBVVEYtMTZMRSBhbmQgVVRGLTE2QkUgdXNpbmcgQk9NIGFuZCBzcGFjZS1iYXNlZCBoZXVyaXN0aWMuXG4vLyBEZWZhdWx0cyB0byBVVEYtMTZMRSwgYXMgaXQncyBwcmV2YWxlbnQgYW5kIGRlZmF1bHQgaW4gTm9kZS5cbi8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVVRGLTE2IGFuZCBodHRwOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyN1dGYtMTZsZVxuLy8gRGVjb2RlciBkZWZhdWx0IGNhbiBiZSBjaGFuZ2VkOiBpY29udi5kZWNvZGUoYnVmLCAndXRmMTYnLCB7ZGVmYXVsdEVuY29kaW5nOiAndXRmLTE2YmUnfSk7XG5cbi8vIEVuY29kZXIgdXNlcyBVVEYtMTZMRSBhbmQgcHJlcGVuZHMgQk9NICh3aGljaCBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIGFkZEJPTTogZmFsc2UpLlxuXG5leHBvcnRzLnV0ZjE2ID0gVXRmMTZDb2RlYztcbmZ1bmN0aW9uIFV0ZjE2Q29kZWMoY29kZWNPcHRpb25zLCBpY29udikge1xuICAgIHRoaXMuaWNvbnYgPSBpY29udjtcbn1cblxuVXRmMTZDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IFV0ZjE2RW5jb2RlcjtcblV0ZjE2Q29kZWMucHJvdG90eXBlLmRlY29kZXIgPSBVdGYxNkRlY29kZXI7XG5cblxuLy8gLS0gRW5jb2RpbmcgKHBhc3MtdGhyb3VnaClcblxuZnVuY3Rpb24gVXRmMTZFbmNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKG9wdGlvbnMuYWRkQk9NID09PSB1bmRlZmluZWQpXG4gICAgICAgIG9wdGlvbnMuYWRkQk9NID0gdHJ1ZTtcbiAgICB0aGlzLmVuY29kZXIgPSBjb2RlYy5pY29udi5nZXRFbmNvZGVyKCd1dGYtMTZsZScsIG9wdGlvbnMpO1xufVxuXG5VdGYxNkVuY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5jb2Rlci53cml0ZShzdHIpO1xufVxuXG5VdGYxNkVuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmVuY29kZXIuZW5kKCk7XG59XG5cblxuLy8gLS0gRGVjb2RpbmdcblxuZnVuY3Rpb24gVXRmMTZEZWNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5kZWNvZGVyID0gbnVsbDtcbiAgICB0aGlzLmluaXRpYWxCeXRlcyA9IFtdO1xuICAgIHRoaXMuaW5pdGlhbEJ5dGVzTGVuID0gMDtcblxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGhpcy5pY29udiA9IGNvZGVjLmljb252O1xufVxuXG5VdGYxNkRlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgaWYgKCF0aGlzLmRlY29kZXIpIHtcbiAgICAgICAgLy8gQ29kZWMgaXMgbm90IGNob3NlbiB5ZXQuIEFjY3VtdWxhdGUgaW5pdGlhbCBieXRlcy5cbiAgICAgICAgdGhpcy5pbml0aWFsQnl0ZXMucHVzaChidWYpO1xuICAgICAgICB0aGlzLmluaXRpYWxCeXRlc0xlbiArPSBidWYubGVuZ3RoO1xuICAgICAgICBcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbEJ5dGVzTGVuIDwgMTYpIC8vIFdlIG5lZWQgbW9yZSBieXRlcyB0byB1c2Ugc3BhY2UgaGV1cmlzdGljIChzZWUgYmVsb3cpXG4gICAgICAgICAgICByZXR1cm4gJyc7XG5cbiAgICAgICAgLy8gV2UgaGF2ZSBlbm91Z2ggYnl0ZXMgLT4gZGV0ZWN0IGVuZGlhbm5lc3MuXG4gICAgICAgIHZhciBidWYgPSBCdWZmZXIuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSxcbiAgICAgICAgICAgIGVuY29kaW5nID0gZGV0ZWN0RW5jb2RpbmcoYnVmLCB0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTtcbiAgICAgICAgdGhpcy5kZWNvZGVyID0gdGhpcy5pY29udi5nZXREZWNvZGVyKGVuY29kaW5nLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLmluaXRpYWxCeXRlcy5sZW5ndGggPSB0aGlzLmluaXRpYWxCeXRlc0xlbiA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVjb2Rlci53cml0ZShidWYpO1xufVxuXG5VdGYxNkRlY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5kZWNvZGVyKSB7XG4gICAgICAgIHZhciBidWYgPSBCdWZmZXIuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSxcbiAgICAgICAgICAgIGVuY29kaW5nID0gZGV0ZWN0RW5jb2RpbmcoYnVmLCB0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTtcbiAgICAgICAgdGhpcy5kZWNvZGVyID0gdGhpcy5pY29udi5nZXREZWNvZGVyKGVuY29kaW5nLCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgICAgIHZhciByZXMgPSB0aGlzLmRlY29kZXIud3JpdGUoYnVmKSxcbiAgICAgICAgICAgIHRyYWlsID0gdGhpcy5kZWNvZGVyLmVuZCgpO1xuXG4gICAgICAgIHJldHVybiB0cmFpbCA/IChyZXMgKyB0cmFpbCkgOiByZXM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlY29kZXIuZW5kKCk7XG59XG5cbmZ1bmN0aW9uIGRldGVjdEVuY29kaW5nKGJ1ZiwgZGVmYXVsdEVuY29kaW5nKSB7XG4gICAgdmFyIGVuYyA9IGRlZmF1bHRFbmNvZGluZyB8fCAndXRmLTE2bGUnO1xuXG4gICAgaWYgKGJ1Zi5sZW5ndGggPj0gMikge1xuICAgICAgICAvLyBDaGVjayBCT00uXG4gICAgICAgIGlmIChidWZbMF0gPT0gMHhGRSAmJiBidWZbMV0gPT0gMHhGRikgLy8gVVRGLTE2QkUgQk9NXG4gICAgICAgICAgICBlbmMgPSAndXRmLTE2YmUnO1xuICAgICAgICBlbHNlIGlmIChidWZbMF0gPT0gMHhGRiAmJiBidWZbMV0gPT0gMHhGRSkgLy8gVVRGLTE2TEUgQk9NXG4gICAgICAgICAgICBlbmMgPSAndXRmLTE2bGUnO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vIEJPTSBmb3VuZC4gVHJ5IHRvIGRlZHVjZSBlbmNvZGluZyBmcm9tIGluaXRpYWwgY29udGVudC5cbiAgICAgICAgICAgIC8vIE1vc3Qgb2YgdGhlIHRpbWUsIHRoZSBjb250ZW50IGhhcyBBU0NJSSBjaGFycyAoVSswMCoqKSwgYnV0IHRoZSBvcHBvc2l0ZSAoVSsqKjAwKSBpcyB1bmNvbW1vbi5cbiAgICAgICAgICAgIC8vIFNvLCB3ZSBjb3VudCBBU0NJSSBhcyBpZiBpdCB3YXMgTEUgb3IgQkUsIGFuZCBkZWNpZGUgZnJvbSB0aGF0LlxuICAgICAgICAgICAgdmFyIGFzY2lpQ2hhcnNMRSA9IDAsIGFzY2lpQ2hhcnNCRSA9IDAsIC8vIENvdW50cyBvZiBjaGFycyBpbiBib3RoIHBvc2l0aW9uc1xuICAgICAgICAgICAgICAgIF9sZW4gPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gKGJ1Zi5sZW5ndGggJSAyKSwgNjQpOyAvLyBMZW4gaXMgYWx3YXlzIGV2ZW4uXG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX2xlbjsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJ1ZltpXSA9PT0gMCAmJiBidWZbaSsxXSAhPT0gMCkgYXNjaWlDaGFyc0JFKys7XG4gICAgICAgICAgICAgICAgaWYgKGJ1ZltpXSAhPT0gMCAmJiBidWZbaSsxXSA9PT0gMCkgYXNjaWlDaGFyc0xFKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChhc2NpaUNoYXJzQkUgPiBhc2NpaUNoYXJzTEUpXG4gICAgICAgICAgICAgICAgZW5jID0gJ3V0Zi0xNmJlJztcbiAgICAgICAgICAgIGVsc2UgaWYgKGFzY2lpQ2hhcnNCRSA8IGFzY2lpQ2hhcnNMRSlcbiAgICAgICAgICAgICAgICBlbmMgPSAndXRmLTE2bGUnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuYztcbn1cblxuXG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBCdWZmZXIgPSByZXF1aXJlKFwic2FmZXItYnVmZmVyXCIpLkJ1ZmZlcjtcblxuLy8gVVRGLTcgY29kZWMsIGFjY29yZGluZyB0byBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjE1MlxuLy8gU2VlIGFsc28gYmVsb3cgYSBVVEYtNy1JTUFQIGNvZGVjLCBhY2NvcmRpbmcgdG8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzUwMSNzZWN0aW9uLTUuMS4zXG5cbmV4cG9ydHMudXRmNyA9IFV0ZjdDb2RlYztcbmV4cG9ydHMudW5pY29kZTExdXRmNyA9ICd1dGY3JzsgLy8gQWxpYXMgVU5JQ09ERS0xLTEtVVRGLTdcbmZ1bmN0aW9uIFV0ZjdDb2RlYyhjb2RlY09wdGlvbnMsIGljb252KSB7XG4gICAgdGhpcy5pY29udiA9IGljb252O1xufTtcblxuVXRmN0NvZGVjLnByb3RvdHlwZS5lbmNvZGVyID0gVXRmN0VuY29kZXI7XG5VdGY3Q29kZWMucHJvdG90eXBlLmRlY29kZXIgPSBVdGY3RGVjb2RlcjtcblV0ZjdDb2RlYy5wcm90b3R5cGUuYm9tQXdhcmUgPSB0cnVlO1xuXG5cbi8vIC0tIEVuY29kaW5nXG5cbnZhciBub25EaXJlY3RDaGFycyA9IC9bXkEtWmEtejAtOSdcXChcXCksLVxcLlxcLzpcXD8gXFxuXFxyXFx0XSsvZztcblxuZnVuY3Rpb24gVXRmN0VuY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmljb252ID0gY29kZWMuaWNvbnY7XG59XG5cblV0ZjdFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIC8vIE5haXZlIGltcGxlbWVudGF0aW9uLlxuICAgIC8vIE5vbi1kaXJlY3QgY2hhcnMgYXJlIGVuY29kZWQgYXMgXCIrPGJhc2U2ND4tXCI7IHNpbmdsZSBcIitcIiBjaGFyIGlzIGVuY29kZWQgYXMgXCIrLVwiLlxuICAgIHJldHVybiBCdWZmZXIuZnJvbShzdHIucmVwbGFjZShub25EaXJlY3RDaGFycywgZnVuY3Rpb24oY2h1bmspIHtcbiAgICAgICAgcmV0dXJuIFwiK1wiICsgKGNodW5rID09PSAnKycgPyAnJyA6IFxuICAgICAgICAgICAgdGhpcy5pY29udi5lbmNvZGUoY2h1bmssICd1dGYxNi1iZScpLnRvU3RyaW5nKCdiYXNlNjQnKS5yZXBsYWNlKC89KyQvLCAnJykpIFxuICAgICAgICAgICAgKyBcIi1cIjtcbiAgICB9LmJpbmQodGhpcykpKTtcbn1cblxuVXRmN0VuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xufVxuXG5cbi8vIC0tIERlY29kaW5nXG5cbmZ1bmN0aW9uIFV0ZjdEZWNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5pY29udiA9IGNvZGVjLmljb252O1xuICAgIHRoaXMuaW5CYXNlNjQgPSBmYWxzZTtcbiAgICB0aGlzLmJhc2U2NEFjY3VtID0gJyc7XG59XG5cbnZhciBiYXNlNjRSZWdleCA9IC9bQS1aYS16MC05XFwvK10vO1xudmFyIGJhc2U2NENoYXJzID0gW107XG5mb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKVxuICAgIGJhc2U2NENoYXJzW2ldID0gYmFzZTY0UmVnZXgudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGkpKTtcblxudmFyIHBsdXNDaGFyID0gJysnLmNoYXJDb2RlQXQoMCksIFxuICAgIG1pbnVzQ2hhciA9ICctJy5jaGFyQ29kZUF0KDApLFxuICAgIGFuZENoYXIgPSAnJicuY2hhckNvZGVBdCgwKTtcblxuVXRmN0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgdmFyIHJlcyA9IFwiXCIsIGxhc3RJID0gMCxcbiAgICAgICAgaW5CYXNlNjQgPSB0aGlzLmluQmFzZTY0LFxuICAgICAgICBiYXNlNjRBY2N1bSA9IHRoaXMuYmFzZTY0QWNjdW07XG5cbiAgICAvLyBUaGUgZGVjb2RlciBpcyBtb3JlIGludm9sdmVkIGFzIHdlIG11c3QgaGFuZGxlIGNodW5rcyBpbiBzdHJlYW0uXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWluQmFzZTY0KSB7IC8vIFdlJ3JlIGluIGRpcmVjdCBtb2RlLlxuICAgICAgICAgICAgLy8gV3JpdGUgZGlyZWN0IGNoYXJzIHVudGlsICcrJ1xuICAgICAgICAgICAgaWYgKGJ1ZltpXSA9PSBwbHVzQ2hhcikge1xuICAgICAgICAgICAgICAgIHJlcyArPSB0aGlzLmljb252LmRlY29kZShidWYuc2xpY2UobGFzdEksIGkpLCBcImFzY2lpXCIpOyAvLyBXcml0ZSBkaXJlY3QgY2hhcnMuXG4gICAgICAgICAgICAgICAgbGFzdEkgPSBpKzE7XG4gICAgICAgICAgICAgICAgaW5CYXNlNjQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgeyAvLyBXZSBkZWNvZGUgYmFzZTY0LlxuICAgICAgICAgICAgaWYgKCFiYXNlNjRDaGFyc1tidWZbaV1dKSB7IC8vIEJhc2U2NCBlbmRlZC5cbiAgICAgICAgICAgICAgICBpZiAoaSA9PSBsYXN0SSAmJiBidWZbaV0gPT0gbWludXNDaGFyKSB7Ly8gXCIrLVwiIC0+IFwiK1wiXG4gICAgICAgICAgICAgICAgICAgIHJlcyArPSBcIitcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYjY0c3RyID0gYmFzZTY0QWNjdW0gKyBidWYuc2xpY2UobGFzdEksIGkpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlcyArPSB0aGlzLmljb252LmRlY29kZShCdWZmZXIuZnJvbShiNjRzdHIsICdiYXNlNjQnKSwgXCJ1dGYxNi1iZVwiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoYnVmW2ldICE9IG1pbnVzQ2hhcikgLy8gTWludXMgaXMgYWJzb3JiZWQgYWZ0ZXIgYmFzZTY0LlxuICAgICAgICAgICAgICAgICAgICBpLS07XG5cbiAgICAgICAgICAgICAgICBsYXN0SSA9IGkrMTtcbiAgICAgICAgICAgICAgICBpbkJhc2U2NCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJhc2U2NEFjY3VtID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWluQmFzZTY0KSB7XG4gICAgICAgIHJlcyArPSB0aGlzLmljb252LmRlY29kZShidWYuc2xpY2UobGFzdEkpLCBcImFzY2lpXCIpOyAvLyBXcml0ZSBkaXJlY3QgY2hhcnMuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGI2NHN0ciA9IGJhc2U2NEFjY3VtICsgYnVmLnNsaWNlKGxhc3RJKS50b1N0cmluZygpO1xuXG4gICAgICAgIHZhciBjYW5CZURlY29kZWQgPSBiNjRzdHIubGVuZ3RoIC0gKGI2NHN0ci5sZW5ndGggJSA4KTsgLy8gTWluaW1hbCBjaHVuazogMiBxdWFkcyAtPiAyeDMgYnl0ZXMgLT4gMyBjaGFycy5cbiAgICAgICAgYmFzZTY0QWNjdW0gPSBiNjRzdHIuc2xpY2UoY2FuQmVEZWNvZGVkKTsgLy8gVGhlIHJlc3Qgd2lsbCBiZSBkZWNvZGVkIGluIGZ1dHVyZS5cbiAgICAgICAgYjY0c3RyID0gYjY0c3RyLnNsaWNlKDAsIGNhbkJlRGVjb2RlZCk7XG5cbiAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKEJ1ZmZlci5mcm9tKGI2NHN0ciwgJ2Jhc2U2NCcpLCBcInV0ZjE2LWJlXCIpO1xuICAgIH1cblxuICAgIHRoaXMuaW5CYXNlNjQgPSBpbkJhc2U2NDtcbiAgICB0aGlzLmJhc2U2NEFjY3VtID0gYmFzZTY0QWNjdW07XG5cbiAgICByZXR1cm4gcmVzO1xufVxuXG5VdGY3RGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgaWYgKHRoaXMuaW5CYXNlNjQgJiYgdGhpcy5iYXNlNjRBY2N1bS5sZW5ndGggPiAwKVxuICAgICAgICByZXMgPSB0aGlzLmljb252LmRlY29kZShCdWZmZXIuZnJvbSh0aGlzLmJhc2U2NEFjY3VtLCAnYmFzZTY0JyksIFwidXRmMTYtYmVcIik7XG5cbiAgICB0aGlzLmluQmFzZTY0ID0gZmFsc2U7XG4gICAgdGhpcy5iYXNlNjRBY2N1bSA9ICcnO1xuICAgIHJldHVybiByZXM7XG59XG5cblxuLy8gVVRGLTctSU1BUCBjb2RlYy5cbi8vIFJGQzM1MDEgU2VjLiA1LjEuMyBNb2RpZmllZCBVVEYtNyAoaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzUwMSNzZWN0aW9uLTUuMS4zKVxuLy8gRGlmZmVyZW5jZXM6XG4vLyAgKiBCYXNlNjQgcGFydCBpcyBzdGFydGVkIGJ5IFwiJlwiIGluc3RlYWQgb2YgXCIrXCJcbi8vICAqIERpcmVjdCBjaGFyYWN0ZXJzIGFyZSAweDIwLTB4N0UsIGV4Y2VwdCBcIiZcIiAoMHgyNilcbi8vICAqIEluIEJhc2U2NCwgXCIsXCIgaXMgdXNlZCBpbnN0ZWFkIG9mIFwiL1wiXG4vLyAgKiBCYXNlNjQgbXVzdCBub3QgYmUgdXNlZCB0byByZXByZXNlbnQgZGlyZWN0IGNoYXJhY3RlcnMuXG4vLyAgKiBObyBpbXBsaWNpdCBzaGlmdCBiYWNrIGZyb20gQmFzZTY0IChzaG91bGQgYWx3YXlzIGVuZCB3aXRoICctJylcbi8vICAqIFN0cmluZyBtdXN0IGVuZCBpbiBub24tc2hpZnRlZCBwb3NpdGlvbi5cbi8vICAqIFwiLSZcIiB3aGlsZSBpbiBiYXNlNjQgaXMgbm90IGFsbG93ZWQuXG5cblxuZXhwb3J0cy51dGY3aW1hcCA9IFV0ZjdJTUFQQ29kZWM7XG5mdW5jdGlvbiBVdGY3SU1BUENvZGVjKGNvZGVjT3B0aW9ucywgaWNvbnYpIHtcbiAgICB0aGlzLmljb252ID0gaWNvbnY7XG59O1xuXG5VdGY3SU1BUENvZGVjLnByb3RvdHlwZS5lbmNvZGVyID0gVXRmN0lNQVBFbmNvZGVyO1xuVXRmN0lNQVBDb2RlYy5wcm90b3R5cGUuZGVjb2RlciA9IFV0ZjdJTUFQRGVjb2RlcjtcblV0ZjdJTUFQQ29kZWMucHJvdG90eXBlLmJvbUF3YXJlID0gdHJ1ZTtcblxuXG4vLyAtLSBFbmNvZGluZ1xuXG5mdW5jdGlvbiBVdGY3SU1BUEVuY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmljb252ID0gY29kZWMuaWNvbnY7XG4gICAgdGhpcy5pbkJhc2U2NCA9IGZhbHNlO1xuICAgIHRoaXMuYmFzZTY0QWNjdW0gPSBCdWZmZXIuYWxsb2MoNik7XG4gICAgdGhpcy5iYXNlNjRBY2N1bUlkeCA9IDA7XG59XG5cblV0ZjdJTUFQRW5jb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICB2YXIgaW5CYXNlNjQgPSB0aGlzLmluQmFzZTY0LFxuICAgICAgICBiYXNlNjRBY2N1bSA9IHRoaXMuYmFzZTY0QWNjdW0sXG4gICAgICAgIGJhc2U2NEFjY3VtSWR4ID0gdGhpcy5iYXNlNjRBY2N1bUlkeCxcbiAgICAgICAgYnVmID0gQnVmZmVyLmFsbG9jKHN0ci5sZW5ndGgqNSArIDEwKSwgYnVmSWR4ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB1Q2hhciA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAoMHgyMCA8PSB1Q2hhciAmJiB1Q2hhciA8PSAweDdFKSB7IC8vIERpcmVjdCBjaGFyYWN0ZXIgb3IgJyYnLlxuICAgICAgICAgICAgaWYgKGluQmFzZTY0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGJhc2U2NEFjY3VtSWR4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBidWZJZHggKz0gYnVmLndyaXRlKGJhc2U2NEFjY3VtLnNsaWNlKDAsIGJhc2U2NEFjY3VtSWR4KS50b1N0cmluZygnYmFzZTY0JykucmVwbGFjZSgvXFwvL2csICcsJykucmVwbGFjZSgvPSskLywgJycpLCBidWZJZHgpO1xuICAgICAgICAgICAgICAgICAgICBiYXNlNjRBY2N1bUlkeCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IG1pbnVzQ2hhcjsgLy8gV3JpdGUgJy0nLCB0aGVuIGdvIHRvIGRpcmVjdCBtb2RlLlxuICAgICAgICAgICAgICAgIGluQmFzZTY0ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaW5CYXNlNjQpIHtcbiAgICAgICAgICAgICAgICBidWZbYnVmSWR4KytdID0gdUNoYXI7IC8vIFdyaXRlIGRpcmVjdCBjaGFyYWN0ZXJcblxuICAgICAgICAgICAgICAgIGlmICh1Q2hhciA9PT0gYW5kQ2hhcikgIC8vIEFtcGVyc2FuZCAtPiAnJi0nXG4gICAgICAgICAgICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSBtaW51c0NoYXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHsgLy8gTm9uLWRpcmVjdCBjaGFyYWN0ZXJcbiAgICAgICAgICAgIGlmICghaW5CYXNlNjQpIHtcbiAgICAgICAgICAgICAgICBidWZbYnVmSWR4KytdID0gYW5kQ2hhcjsgLy8gV3JpdGUgJyYnLCB0aGVuIGdvIHRvIGJhc2U2NCBtb2RlLlxuICAgICAgICAgICAgICAgIGluQmFzZTY0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbkJhc2U2NCkge1xuICAgICAgICAgICAgICAgIGJhc2U2NEFjY3VtW2Jhc2U2NEFjY3VtSWR4KytdID0gdUNoYXIgPj4gODtcbiAgICAgICAgICAgICAgICBiYXNlNjRBY2N1bVtiYXNlNjRBY2N1bUlkeCsrXSA9IHVDaGFyICYgMHhGRjtcblxuICAgICAgICAgICAgICAgIGlmIChiYXNlNjRBY2N1bUlkeCA9PSBiYXNlNjRBY2N1bS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmSWR4ICs9IGJ1Zi53cml0ZShiYXNlNjRBY2N1bS50b1N0cmluZygnYmFzZTY0JykucmVwbGFjZSgvXFwvL2csICcsJyksIGJ1ZklkeCk7XG4gICAgICAgICAgICAgICAgICAgIGJhc2U2NEFjY3VtSWR4ID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluQmFzZTY0ID0gaW5CYXNlNjQ7XG4gICAgdGhpcy5iYXNlNjRBY2N1bUlkeCA9IGJhc2U2NEFjY3VtSWR4O1xuXG4gICAgcmV0dXJuIGJ1Zi5zbGljZSgwLCBidWZJZHgpO1xufVxuXG5VdGY3SU1BUEVuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBidWYgPSBCdWZmZXIuYWxsb2MoMTApLCBidWZJZHggPSAwO1xuICAgIGlmICh0aGlzLmluQmFzZTY0KSB7XG4gICAgICAgIGlmICh0aGlzLmJhc2U2NEFjY3VtSWR4ID4gMCkge1xuICAgICAgICAgICAgYnVmSWR4ICs9IGJ1Zi53cml0ZSh0aGlzLmJhc2U2NEFjY3VtLnNsaWNlKDAsIHRoaXMuYmFzZTY0QWNjdW1JZHgpLnRvU3RyaW5nKCdiYXNlNjQnKS5yZXBsYWNlKC9cXC8vZywgJywnKS5yZXBsYWNlKC89KyQvLCAnJyksIGJ1ZklkeCk7XG4gICAgICAgICAgICB0aGlzLmJhc2U2NEFjY3VtSWR4ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1ZltidWZJZHgrK10gPSBtaW51c0NoYXI7IC8vIFdyaXRlICctJywgdGhlbiBnbyB0byBkaXJlY3QgbW9kZS5cbiAgICAgICAgdGhpcy5pbkJhc2U2NCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBidWYuc2xpY2UoMCwgYnVmSWR4KTtcbn1cblxuXG4vLyAtLSBEZWNvZGluZ1xuXG5mdW5jdGlvbiBVdGY3SU1BUERlY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmljb252ID0gY29kZWMuaWNvbnY7XG4gICAgdGhpcy5pbkJhc2U2NCA9IGZhbHNlO1xuICAgIHRoaXMuYmFzZTY0QWNjdW0gPSAnJztcbn1cblxudmFyIGJhc2U2NElNQVBDaGFycyA9IGJhc2U2NENoYXJzLnNsaWNlKCk7XG5iYXNlNjRJTUFQQ2hhcnNbJywnLmNoYXJDb2RlQXQoMCldID0gdHJ1ZTtcblxuVXRmN0lNQVBEZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1Zikge1xuICAgIHZhciByZXMgPSBcIlwiLCBsYXN0SSA9IDAsXG4gICAgICAgIGluQmFzZTY0ID0gdGhpcy5pbkJhc2U2NCxcbiAgICAgICAgYmFzZTY0QWNjdW0gPSB0aGlzLmJhc2U2NEFjY3VtO1xuXG4gICAgLy8gVGhlIGRlY29kZXIgaXMgbW9yZSBpbnZvbHZlZCBhcyB3ZSBtdXN0IGhhbmRsZSBjaHVua3MgaW4gc3RyZWFtLlxuICAgIC8vIEl0IGlzIGZvcmdpdmluZywgY2xvc2VyIHRvIHN0YW5kYXJkIFVURi03IChmb3IgZXhhbXBsZSwgJy0nIGlzIG9wdGlvbmFsIGF0IHRoZSBlbmQpLlxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFpbkJhc2U2NCkgeyAvLyBXZSdyZSBpbiBkaXJlY3QgbW9kZS5cbiAgICAgICAgICAgIC8vIFdyaXRlIGRpcmVjdCBjaGFycyB1bnRpbCAnJidcbiAgICAgICAgICAgIGlmIChidWZbaV0gPT0gYW5kQ2hhcikge1xuICAgICAgICAgICAgICAgIHJlcyArPSB0aGlzLmljb252LmRlY29kZShidWYuc2xpY2UobGFzdEksIGkpLCBcImFzY2lpXCIpOyAvLyBXcml0ZSBkaXJlY3QgY2hhcnMuXG4gICAgICAgICAgICAgICAgbGFzdEkgPSBpKzE7XG4gICAgICAgICAgICAgICAgaW5CYXNlNjQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgeyAvLyBXZSBkZWNvZGUgYmFzZTY0LlxuICAgICAgICAgICAgaWYgKCFiYXNlNjRJTUFQQ2hhcnNbYnVmW2ldXSkgeyAvLyBCYXNlNjQgZW5kZWQuXG4gICAgICAgICAgICAgICAgaWYgKGkgPT0gbGFzdEkgJiYgYnVmW2ldID09IG1pbnVzQ2hhcikgeyAvLyBcIiYtXCIgLT4gXCImXCJcbiAgICAgICAgICAgICAgICAgICAgcmVzICs9IFwiJlwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBiNjRzdHIgPSBiYXNlNjRBY2N1bSArIGJ1Zi5zbGljZShsYXN0SSwgaSkudG9TdHJpbmcoKS5yZXBsYWNlKC8sL2csICcvJyk7XG4gICAgICAgICAgICAgICAgICAgIHJlcyArPSB0aGlzLmljb252LmRlY29kZShCdWZmZXIuZnJvbShiNjRzdHIsICdiYXNlNjQnKSwgXCJ1dGYxNi1iZVwiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoYnVmW2ldICE9IG1pbnVzQ2hhcikgLy8gTWludXMgbWF5IGJlIGFic29yYmVkIGFmdGVyIGJhc2U2NC5cbiAgICAgICAgICAgICAgICAgICAgaS0tO1xuXG4gICAgICAgICAgICAgICAgbGFzdEkgPSBpKzE7XG4gICAgICAgICAgICAgICAgaW5CYXNlNjQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBiYXNlNjRBY2N1bSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpbkJhc2U2NCkge1xuICAgICAgICByZXMgKz0gdGhpcy5pY29udi5kZWNvZGUoYnVmLnNsaWNlKGxhc3RJKSwgXCJhc2NpaVwiKTsgLy8gV3JpdGUgZGlyZWN0IGNoYXJzLlxuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBiNjRzdHIgPSBiYXNlNjRBY2N1bSArIGJ1Zi5zbGljZShsYXN0SSkudG9TdHJpbmcoKS5yZXBsYWNlKC8sL2csICcvJyk7XG5cbiAgICAgICAgdmFyIGNhbkJlRGVjb2RlZCA9IGI2NHN0ci5sZW5ndGggLSAoYjY0c3RyLmxlbmd0aCAlIDgpOyAvLyBNaW5pbWFsIGNodW5rOiAyIHF1YWRzIC0+IDJ4MyBieXRlcyAtPiAzIGNoYXJzLlxuICAgICAgICBiYXNlNjRBY2N1bSA9IGI2NHN0ci5zbGljZShjYW5CZURlY29kZWQpOyAvLyBUaGUgcmVzdCB3aWxsIGJlIGRlY29kZWQgaW4gZnV0dXJlLlxuICAgICAgICBiNjRzdHIgPSBiNjRzdHIuc2xpY2UoMCwgY2FuQmVEZWNvZGVkKTtcblxuICAgICAgICByZXMgKz0gdGhpcy5pY29udi5kZWNvZGUoQnVmZmVyLmZyb20oYjY0c3RyLCAnYmFzZTY0JyksIFwidXRmMTYtYmVcIik7XG4gICAgfVxuXG4gICAgdGhpcy5pbkJhc2U2NCA9IGluQmFzZTY0O1xuICAgIHRoaXMuYmFzZTY0QWNjdW0gPSBiYXNlNjRBY2N1bTtcblxuICAgIHJldHVybiByZXM7XG59XG5cblV0ZjdJTUFQRGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgaWYgKHRoaXMuaW5CYXNlNjQgJiYgdGhpcy5iYXNlNjRBY2N1bS5sZW5ndGggPiAwKVxuICAgICAgICByZXMgPSB0aGlzLmljb252LmRlY29kZShCdWZmZXIuZnJvbSh0aGlzLmJhc2U2NEFjY3VtLCAnYmFzZTY0JyksIFwidXRmMTYtYmVcIik7XG5cbiAgICB0aGlzLmluQmFzZTY0ID0gZmFsc2U7XG4gICAgdGhpcy5iYXNlNjRBY2N1bSA9ICcnO1xuICAgIHJldHVybiByZXM7XG59XG5cblxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgQnVmZmVyID0gcmVxdWlyZShcInNhZmVyLWJ1ZmZlclwiKS5CdWZmZXI7XG5cbi8vIFNpbmdsZS1ieXRlIGNvZGVjLiBOZWVkcyBhICdjaGFycycgc3RyaW5nIHBhcmFtZXRlciB0aGF0IGNvbnRhaW5zIDI1NiBvciAxMjggY2hhcnMgdGhhdFxuLy8gY29ycmVzcG9uZCB0byBlbmNvZGVkIGJ5dGVzIChpZiAxMjggLSB0aGVuIGxvd2VyIGhhbGYgaXMgQVNDSUkpLiBcblxuZXhwb3J0cy5fc2JjcyA9IFNCQ1NDb2RlYztcbmZ1bmN0aW9uIFNCQ1NDb2RlYyhjb2RlY09wdGlvbnMsIGljb252KSB7XG4gICAgaWYgKCFjb2RlY09wdGlvbnMpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNCQ1MgY29kZWMgaXMgY2FsbGVkIHdpdGhvdXQgdGhlIGRhdGEuXCIpXG4gICAgXG4gICAgLy8gUHJlcGFyZSBjaGFyIGJ1ZmZlciBmb3IgZGVjb2RpbmcuXG4gICAgaWYgKCFjb2RlY09wdGlvbnMuY2hhcnMgfHwgKGNvZGVjT3B0aW9ucy5jaGFycy5sZW5ndGggIT09IDEyOCAmJiBjb2RlY09wdGlvbnMuY2hhcnMubGVuZ3RoICE9PSAyNTYpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbmNvZGluZyAnXCIrY29kZWNPcHRpb25zLnR5cGUrXCInIGhhcyBpbmNvcnJlY3QgJ2NoYXJzJyAobXVzdCBiZSBvZiBsZW4gMTI4IG9yIDI1NilcIik7XG4gICAgXG4gICAgaWYgKGNvZGVjT3B0aW9ucy5jaGFycy5sZW5ndGggPT09IDEyOCkge1xuICAgICAgICB2YXIgYXNjaWlTdHJpbmcgPSBcIlwiO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEyODsgaSsrKVxuICAgICAgICAgICAgYXNjaWlTdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShpKTtcbiAgICAgICAgY29kZWNPcHRpb25zLmNoYXJzID0gYXNjaWlTdHJpbmcgKyBjb2RlY09wdGlvbnMuY2hhcnM7XG4gICAgfVxuXG4gICAgdGhpcy5kZWNvZGVCdWYgPSBCdWZmZXIuZnJvbShjb2RlY09wdGlvbnMuY2hhcnMsICd1Y3MyJyk7XG4gICAgXG4gICAgLy8gRW5jb2RpbmcgYnVmZmVyLlxuICAgIHZhciBlbmNvZGVCdWYgPSBCdWZmZXIuYWxsb2MoNjU1MzYsIGljb252LmRlZmF1bHRDaGFyU2luZ2xlQnl0ZS5jaGFyQ29kZUF0KDApKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZWNPcHRpb25zLmNoYXJzLmxlbmd0aDsgaSsrKVxuICAgICAgICBlbmNvZGVCdWZbY29kZWNPcHRpb25zLmNoYXJzLmNoYXJDb2RlQXQoaSldID0gaTtcblxuICAgIHRoaXMuZW5jb2RlQnVmID0gZW5jb2RlQnVmO1xufVxuXG5TQkNTQ29kZWMucHJvdG90eXBlLmVuY29kZXIgPSBTQkNTRW5jb2RlcjtcblNCQ1NDb2RlYy5wcm90b3R5cGUuZGVjb2RlciA9IFNCQ1NEZWNvZGVyO1xuXG5cbmZ1bmN0aW9uIFNCQ1NFbmNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5lbmNvZGVCdWYgPSBjb2RlYy5lbmNvZGVCdWY7XG59XG5cblNCQ1NFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHZhciBidWYgPSBCdWZmZXIuYWxsb2Moc3RyLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspXG4gICAgICAgIGJ1ZltpXSA9IHRoaXMuZW5jb2RlQnVmW3N0ci5jaGFyQ29kZUF0KGkpXTtcbiAgICBcbiAgICByZXR1cm4gYnVmO1xufVxuXG5TQkNTRW5jb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG59XG5cblxuZnVuY3Rpb24gU0JDU0RlY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmRlY29kZUJ1ZiA9IGNvZGVjLmRlY29kZUJ1Zjtcbn1cblxuU0JDU0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgLy8gU3RyaW5ncyBhcmUgaW1tdXRhYmxlIGluIEpTIC0+IHdlIHVzZSB1Y3MyIGJ1ZmZlciB0byBzcGVlZCB1cCBjb21wdXRhdGlvbnMuXG4gICAgdmFyIGRlY29kZUJ1ZiA9IHRoaXMuZGVjb2RlQnVmO1xuICAgIHZhciBuZXdCdWYgPSBCdWZmZXIuYWxsb2MoYnVmLmxlbmd0aCoyKTtcbiAgICB2YXIgaWR4MSA9IDAsIGlkeDIgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlkeDEgPSBidWZbaV0qMjsgaWR4MiA9IGkqMjtcbiAgICAgICAgbmV3QnVmW2lkeDJdID0gZGVjb2RlQnVmW2lkeDFdO1xuICAgICAgICBuZXdCdWZbaWR4MisxXSA9IGRlY29kZUJ1ZltpZHgxKzFdO1xuICAgIH1cbiAgICByZXR1cm4gbmV3QnVmLnRvU3RyaW5nKCd1Y3MyJyk7XG59XG5cblNCQ1NEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vLyBNYW51YWxseSBhZGRlZCBkYXRhIHRvIGJlIHVzZWQgYnkgc2JjcyBjb2RlYyBpbiBhZGRpdGlvbiB0byBnZW5lcmF0ZWQgb25lLlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBOb3Qgc3VwcG9ydGVkIGJ5IGljb252LCBub3Qgc3VyZSB3aHkuXG4gICAgXCIxMDAyOVwiOiBcIm1hY2NlbnRldXJvXCIsXG4gICAgXCJtYWNjZW50ZXVyb1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCLDhMSAxIHDicSEw5bDnMOhxIXEjMOkxI3EhsSHw6nFucW6xI7DrcSPxJLEk8SWw7PEl8O0w7bDtcO6xJrEm8O84oCgwrDEmMKjwqfigKLCtsOfwq7CqeKEosSZwqjiiaDEo8SuxK/EquKJpOKJpcSrxLbiiILiiJHFgsS7xLzEvcS+xLnEusWFxYbFg8Ks4oiaxYTFh+KIhsKrwrvigKbCoMWIxZDDlcWRxYzigJPigJTigJzigJ3igJjigJnDt+KXisWNxZTFlcWY4oC54oC6xZnFlsWXxaDigJrigJ7FocWaxZvDgcWkxaXDjcW9xb7FqsOTw5TFq8Wuw5rFr8WwxbHFssWzw53DvcS3xbvFgcW8xKLLh1wiXG4gICAgfSxcblxuICAgIFwiODA4XCI6IFwiY3A4MDhcIixcbiAgICBcImlibTgwOFwiOiBcImNwODA4XCIsXG4gICAgXCJjcDgwOFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCLQkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/ilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDRgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj9CB0ZHQhNGU0IfRl9CO0Z7CsOKImcK34oia4oSW4oKs4pagwqBcIlxuICAgIH0sXG5cbiAgICBcIm1pa1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCLQkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj+KUlOKUtOKUrOKUnOKUgOKUvOKVo+KVkeKVmuKVlOKVqeKVpuKVoOKVkOKVrOKUkOKWkeKWkuKWk+KUguKUpOKElsKn4pWX4pWd4pSY4pSM4paI4paE4paM4paQ4paAzrHDn86Tz4DOo8+DwrXPhM6mzpjOqc604oiez4bOteKIqeKJocKx4oml4omk4oyg4oyhw7fiiYjCsOKImcK34oia4oG/wrLilqDCoFwiXG4gICAgfSxcblxuICAgIC8vIEFsaWFzZXMgb2YgZ2VuZXJhdGVkIGVuY29kaW5ncy5cbiAgICBcImFzY2lpOGJpdFwiOiBcImFzY2lpXCIsXG4gICAgXCJ1c2FzY2lpXCI6IFwiYXNjaWlcIixcbiAgICBcImFuc2l4MzRcIjogXCJhc2NpaVwiLFxuICAgIFwiYW5zaXgzNDE5NjhcIjogXCJhc2NpaVwiLFxuICAgIFwiYW5zaXgzNDE5ODZcIjogXCJhc2NpaVwiLFxuICAgIFwiY3Nhc2NpaVwiOiBcImFzY2lpXCIsXG4gICAgXCJjcDM2N1wiOiBcImFzY2lpXCIsXG4gICAgXCJpYm0zNjdcIjogXCJhc2NpaVwiLFxuICAgIFwiaXNvaXI2XCI6IFwiYXNjaWlcIixcbiAgICBcImlzbzY0NnVzXCI6IFwiYXNjaWlcIixcbiAgICBcImlzbzY0NmlydlwiOiBcImFzY2lpXCIsXG4gICAgXCJ1c1wiOiBcImFzY2lpXCIsXG5cbiAgICBcImxhdGluMVwiOiBcImlzbzg4NTkxXCIsXG4gICAgXCJsYXRpbjJcIjogXCJpc284ODU5MlwiLFxuICAgIFwibGF0aW4zXCI6IFwiaXNvODg1OTNcIixcbiAgICBcImxhdGluNFwiOiBcImlzbzg4NTk0XCIsXG4gICAgXCJsYXRpbjVcIjogXCJpc284ODU5OVwiLFxuICAgIFwibGF0aW42XCI6IFwiaXNvODg1OTEwXCIsXG4gICAgXCJsYXRpbjdcIjogXCJpc284ODU5MTNcIixcbiAgICBcImxhdGluOFwiOiBcImlzbzg4NTkxNFwiLFxuICAgIFwibGF0aW45XCI6IFwiaXNvODg1OTE1XCIsXG4gICAgXCJsYXRpbjEwXCI6IFwiaXNvODg1OTE2XCIsXG5cbiAgICBcImNzaXNvbGF0aW4xXCI6IFwiaXNvODg1OTFcIixcbiAgICBcImNzaXNvbGF0aW4yXCI6IFwiaXNvODg1OTJcIixcbiAgICBcImNzaXNvbGF0aW4zXCI6IFwiaXNvODg1OTNcIixcbiAgICBcImNzaXNvbGF0aW40XCI6IFwiaXNvODg1OTRcIixcbiAgICBcImNzaXNvbGF0aW5jeXJpbGxpY1wiOiBcImlzbzg4NTk1XCIsXG4gICAgXCJjc2lzb2xhdGluYXJhYmljXCI6IFwiaXNvODg1OTZcIixcbiAgICBcImNzaXNvbGF0aW5ncmVla1wiIDogXCJpc284ODU5N1wiLFxuICAgIFwiY3Npc29sYXRpbmhlYnJld1wiOiBcImlzbzg4NTk4XCIsXG4gICAgXCJjc2lzb2xhdGluNVwiOiBcImlzbzg4NTk5XCIsXG4gICAgXCJjc2lzb2xhdGluNlwiOiBcImlzbzg4NTkxMFwiLFxuXG4gICAgXCJsMVwiOiBcImlzbzg4NTkxXCIsXG4gICAgXCJsMlwiOiBcImlzbzg4NTkyXCIsXG4gICAgXCJsM1wiOiBcImlzbzg4NTkzXCIsXG4gICAgXCJsNFwiOiBcImlzbzg4NTk0XCIsXG4gICAgXCJsNVwiOiBcImlzbzg4NTk5XCIsXG4gICAgXCJsNlwiOiBcImlzbzg4NTkxMFwiLFxuICAgIFwibDdcIjogXCJpc284ODU5MTNcIixcbiAgICBcImw4XCI6IFwiaXNvODg1OTE0XCIsXG4gICAgXCJsOVwiOiBcImlzbzg4NTkxNVwiLFxuICAgIFwibDEwXCI6IFwiaXNvODg1OTE2XCIsXG5cbiAgICBcImlzb2lyMTRcIjogXCJpc282NDZqcFwiLFxuICAgIFwiaXNvaXI1N1wiOiBcImlzbzY0NmNuXCIsXG4gICAgXCJpc29pcjEwMFwiOiBcImlzbzg4NTkxXCIsXG4gICAgXCJpc29pcjEwMVwiOiBcImlzbzg4NTkyXCIsXG4gICAgXCJpc29pcjEwOVwiOiBcImlzbzg4NTkzXCIsXG4gICAgXCJpc29pcjExMFwiOiBcImlzbzg4NTk0XCIsXG4gICAgXCJpc29pcjE0NFwiOiBcImlzbzg4NTk1XCIsXG4gICAgXCJpc29pcjEyN1wiOiBcImlzbzg4NTk2XCIsXG4gICAgXCJpc29pcjEyNlwiOiBcImlzbzg4NTk3XCIsXG4gICAgXCJpc29pcjEzOFwiOiBcImlzbzg4NTk4XCIsXG4gICAgXCJpc29pcjE0OFwiOiBcImlzbzg4NTk5XCIsXG4gICAgXCJpc29pcjE1N1wiOiBcImlzbzg4NTkxMFwiLFxuICAgIFwiaXNvaXIxNjZcIjogXCJ0aXM2MjBcIixcbiAgICBcImlzb2lyMTc5XCI6IFwiaXNvODg1OTEzXCIsXG4gICAgXCJpc29pcjE5OVwiOiBcImlzbzg4NTkxNFwiLFxuICAgIFwiaXNvaXIyMDNcIjogXCJpc284ODU5MTVcIixcbiAgICBcImlzb2lyMjI2XCI6IFwiaXNvODg1OTE2XCIsXG5cbiAgICBcImNwODE5XCI6IFwiaXNvODg1OTFcIixcbiAgICBcImlibTgxOVwiOiBcImlzbzg4NTkxXCIsXG5cbiAgICBcImN5cmlsbGljXCI6IFwiaXNvODg1OTVcIixcblxuICAgIFwiYXJhYmljXCI6IFwiaXNvODg1OTZcIixcbiAgICBcImFyYWJpYzhcIjogXCJpc284ODU5NlwiLFxuICAgIFwiZWNtYTExNFwiOiBcImlzbzg4NTk2XCIsXG4gICAgXCJhc21vNzA4XCI6IFwiaXNvODg1OTZcIixcblxuICAgIFwiZ3JlZWtcIiA6IFwiaXNvODg1OTdcIixcbiAgICBcImdyZWVrOFwiIDogXCJpc284ODU5N1wiLFxuICAgIFwiZWNtYTExOFwiIDogXCJpc284ODU5N1wiLFxuICAgIFwiZWxvdDkyOFwiIDogXCJpc284ODU5N1wiLFxuXG4gICAgXCJoZWJyZXdcIjogXCJpc284ODU5OFwiLFxuICAgIFwiaGVicmV3OFwiOiBcImlzbzg4NTk4XCIsXG5cbiAgICBcInR1cmtpc2hcIjogXCJpc284ODU5OVwiLFxuICAgIFwidHVya2lzaDhcIjogXCJpc284ODU5OVwiLFxuXG4gICAgXCJ0aGFpXCI6IFwiaXNvODg1OTExXCIsXG4gICAgXCJ0aGFpOFwiOiBcImlzbzg4NTkxMVwiLFxuXG4gICAgXCJjZWx0aWNcIjogXCJpc284ODU5MTRcIixcbiAgICBcImNlbHRpYzhcIjogXCJpc284ODU5MTRcIixcbiAgICBcImlzb2NlbHRpY1wiOiBcImlzbzg4NTkxNFwiLFxuXG4gICAgXCJ0aXM2MjAwXCI6IFwidGlzNjIwXCIsXG4gICAgXCJ0aXM2MjAyNTI5MVwiOiBcInRpczYyMFwiLFxuICAgIFwidGlzNjIwMjUzMzBcIjogXCJ0aXM2MjBcIixcblxuICAgIFwiMTAwMDBcIjogXCJtYWNyb21hblwiLFxuICAgIFwiMTAwMDZcIjogXCJtYWNncmVla1wiLFxuICAgIFwiMTAwMDdcIjogXCJtYWNjeXJpbGxpY1wiLFxuICAgIFwiMTAwNzlcIjogXCJtYWNpY2VsYW5kXCIsXG4gICAgXCIxMDA4MVwiOiBcIm1hY3R1cmtpc2hcIixcblxuICAgIFwiY3NwYzhjb2RlcGFnZTQzN1wiOiBcImNwNDM3XCIsXG4gICAgXCJjc3BjNzc1YmFsdGljXCI6IFwiY3A3NzVcIixcbiAgICBcImNzcGM4NTBtdWx0aWxpbmd1YWxcIjogXCJjcDg1MFwiLFxuICAgIFwiY3NwY3A4NTJcIjogXCJjcDg1MlwiLFxuICAgIFwiY3NwYzg2MmxhdGluaGVicmV3XCI6IFwiY3A4NjJcIixcbiAgICBcImNwZ3JcIjogXCJjcDg2OVwiLFxuXG4gICAgXCJtc2VlXCI6IFwiY3AxMjUwXCIsXG4gICAgXCJtc2N5cmxcIjogXCJjcDEyNTFcIixcbiAgICBcIm1zYW5zaVwiOiBcImNwMTI1MlwiLFxuICAgIFwibXNncmVla1wiOiBcImNwMTI1M1wiLFxuICAgIFwibXN0dXJrXCI6IFwiY3AxMjU0XCIsXG4gICAgXCJtc2hlYnJcIjogXCJjcDEyNTVcIixcbiAgICBcIm1zYXJhYlwiOiBcImNwMTI1NlwiLFxuICAgIFwid2luYmFsdHJpbVwiOiBcImNwMTI1N1wiLFxuXG4gICAgXCJjcDIwODY2XCI6IFwia29pOHJcIixcbiAgICBcIjIwODY2XCI6IFwia29pOHJcIixcbiAgICBcImlibTg3OFwiOiBcImtvaThyXCIsXG4gICAgXCJjc2tvaThyXCI6IFwia29pOHJcIixcblxuICAgIFwiY3AyMTg2NlwiOiBcImtvaTh1XCIsXG4gICAgXCIyMTg2NlwiOiBcImtvaTh1XCIsXG4gICAgXCJpYm0xMTY4XCI6IFwia29pOHVcIixcblxuICAgIFwic3RyazEwNDgyMDAyXCI6IFwicmsxMDQ4XCIsXG5cbiAgICBcInRjdm41NzEyXCI6IFwidGN2blwiLFxuICAgIFwidGN2bjU3MTIxXCI6IFwidGN2blwiLFxuXG4gICAgXCJnYjE5ODg4MFwiOiBcImlzbzY0NmNuXCIsXG4gICAgXCJjblwiOiBcImlzbzY0NmNuXCIsXG5cbiAgICBcImNzaXNvMTRqaXNjNjIyMHJvXCI6IFwiaXNvNjQ2anBcIixcbiAgICBcImppc2M2MjIwMTk2OXJvXCI6IFwiaXNvNjQ2anBcIixcbiAgICBcImpwXCI6IFwiaXNvNjQ2anBcIixcblxuICAgIFwiY3NocHJvbWFuOFwiOiBcImhwcm9tYW44XCIsXG4gICAgXCJyOFwiOiBcImhwcm9tYW44XCIsXG4gICAgXCJyb21hbjhcIjogXCJocHJvbWFuOFwiLFxuICAgIFwieHJvbWFuOFwiOiBcImhwcm9tYW44XCIsXG4gICAgXCJpYm0xMDUxXCI6IFwiaHByb21hbjhcIixcblxuICAgIFwibWFjXCI6IFwibWFjaW50b3NoXCIsXG4gICAgXCJjc21hY2ludG9zaFwiOiBcIm1hY2ludG9zaFwiLFxufTtcblxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIEdlbmVyYXRlZCBkYXRhIGZvciBzYmNzIGNvZGVjLiBEb24ndCBlZGl0IG1hbnVhbGx5LiBSZWdlbmVyYXRlIHVzaW5nIGdlbmVyYXRpb24vZ2VuLXNiY3MuanMgc2NyaXB0LlxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFwiNDM3XCI6IFwiY3A0MzdcIixcbiAgXCI3MzdcIjogXCJjcDczN1wiLFxuICBcIjc3NVwiOiBcImNwNzc1XCIsXG4gIFwiODUwXCI6IFwiY3A4NTBcIixcbiAgXCI4NTJcIjogXCJjcDg1MlwiLFxuICBcIjg1NVwiOiBcImNwODU1XCIsXG4gIFwiODU2XCI6IFwiY3A4NTZcIixcbiAgXCI4NTdcIjogXCJjcDg1N1wiLFxuICBcIjg1OFwiOiBcImNwODU4XCIsXG4gIFwiODYwXCI6IFwiY3A4NjBcIixcbiAgXCI4NjFcIjogXCJjcDg2MVwiLFxuICBcIjg2MlwiOiBcImNwODYyXCIsXG4gIFwiODYzXCI6IFwiY3A4NjNcIixcbiAgXCI4NjRcIjogXCJjcDg2NFwiLFxuICBcIjg2NVwiOiBcImNwODY1XCIsXG4gIFwiODY2XCI6IFwiY3A4NjZcIixcbiAgXCI4NjlcIjogXCJjcDg2OVwiLFxuICBcIjg3NFwiOiBcIndpbmRvd3M4NzRcIixcbiAgXCI5MjJcIjogXCJjcDkyMlwiLFxuICBcIjEwNDZcIjogXCJjcDEwNDZcIixcbiAgXCIxMTI0XCI6IFwiY3AxMTI0XCIsXG4gIFwiMTEyNVwiOiBcImNwMTEyNVwiLFxuICBcIjExMjlcIjogXCJjcDExMjlcIixcbiAgXCIxMTMzXCI6IFwiY3AxMTMzXCIsXG4gIFwiMTE2MVwiOiBcImNwMTE2MVwiLFxuICBcIjExNjJcIjogXCJjcDExNjJcIixcbiAgXCIxMTYzXCI6IFwiY3AxMTYzXCIsXG4gIFwiMTI1MFwiOiBcIndpbmRvd3MxMjUwXCIsXG4gIFwiMTI1MVwiOiBcIndpbmRvd3MxMjUxXCIsXG4gIFwiMTI1MlwiOiBcIndpbmRvd3MxMjUyXCIsXG4gIFwiMTI1M1wiOiBcIndpbmRvd3MxMjUzXCIsXG4gIFwiMTI1NFwiOiBcIndpbmRvd3MxMjU0XCIsXG4gIFwiMTI1NVwiOiBcIndpbmRvd3MxMjU1XCIsXG4gIFwiMTI1NlwiOiBcIndpbmRvd3MxMjU2XCIsXG4gIFwiMTI1N1wiOiBcIndpbmRvd3MxMjU3XCIsXG4gIFwiMTI1OFwiOiBcIndpbmRvd3MxMjU4XCIsXG4gIFwiMjg1OTFcIjogXCJpc284ODU5MVwiLFxuICBcIjI4NTkyXCI6IFwiaXNvODg1OTJcIixcbiAgXCIyODU5M1wiOiBcImlzbzg4NTkzXCIsXG4gIFwiMjg1OTRcIjogXCJpc284ODU5NFwiLFxuICBcIjI4NTk1XCI6IFwiaXNvODg1OTVcIixcbiAgXCIyODU5NlwiOiBcImlzbzg4NTk2XCIsXG4gIFwiMjg1OTdcIjogXCJpc284ODU5N1wiLFxuICBcIjI4NTk4XCI6IFwiaXNvODg1OThcIixcbiAgXCIyODU5OVwiOiBcImlzbzg4NTk5XCIsXG4gIFwiMjg2MDBcIjogXCJpc284ODU5MTBcIixcbiAgXCIyODYwMVwiOiBcImlzbzg4NTkxMVwiLFxuICBcIjI4NjAzXCI6IFwiaXNvODg1OTEzXCIsXG4gIFwiMjg2MDRcIjogXCJpc284ODU5MTRcIixcbiAgXCIyODYwNVwiOiBcImlzbzg4NTkxNVwiLFxuICBcIjI4NjA2XCI6IFwiaXNvODg1OTE2XCIsXG4gIFwid2luZG93czg3NFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4oKs77+977+977+977+94oCm77+977+977+977+977+977+977+977+977+977+977+94oCY4oCZ4oCc4oCd4oCi4oCT4oCU77+977+977+977+977+977+977+977+9wqDguIHguILguIPguITguIXguIbguIfguIjguInguIrguIvguIzguI3guI7guI/guJDguJHguJLguJPguJTguJXguJbguJfguJjguJnguJrguJvguJzguJ3guJ7guJ/guKDguKHguKLguKPguKTguKXguKbguKfguKjguKnguKrguKvguKzguK3guK7guK/guLDguLHguLLguLPguLTguLXguLbguLfguLjguLnguLrvv73vv73vv73vv73guL/guYDguYHguYLguYPguYTguYXguYbguYfguYjguYnguYrguYvguYzguY3guY7guY/guZDguZHguZLguZPguZTguZXguZbguZfguZjguZnguZrguZvvv73vv73vv73vv71cIlxuICB9LFxuICBcIndpbjg3NFwiOiBcIndpbmRvd3M4NzRcIixcbiAgXCJjcDg3NFwiOiBcIndpbmRvd3M4NzRcIixcbiAgXCJ3aW5kb3dzMTI1MFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4oKs77+94oCa77+94oCe4oCm4oCg4oCh77+94oCwxaDigLnFmsWkxb3Fue+/veKAmOKAmeKAnOKAneKAouKAk+KAlO+/veKEosWh4oC6xZvFpcW+xbrCoMuHy5jFgcKkxITCpsKnwqjCqcWewqvCrMKtwq7Fu8KwwrHLm8WCwrTCtcK2wrfCuMSFxZ/Cu8S9y53EvsW8xZTDgcOCxILDhMS5xIbDh8SMw4nEmMOLxJrDjcOOxI7EkMWDxYfDk8OUxZDDlsOXxZjFrsOaxbDDnMOdxaLDn8WVw6HDosSDw6TEusSHw6fEjcOpxJnDq8Sbw63DrsSPxJHFhMWIw7PDtMWRw7bDt8WZxa/DusWxw7zDvcWjy5lcIlxuICB9LFxuICBcIndpbjEyNTBcIjogXCJ3aW5kb3dzMTI1MFwiLFxuICBcImNwMTI1MFwiOiBcIndpbmRvd3MxMjUwXCIsXG4gIFwid2luZG93czEyNTFcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcItCC0IPigJrRk+KAnuKApuKAoOKAoeKCrOKAsNCJ4oC50IrQjNCL0I/RkuKAmOKAmeKAnOKAneKAouKAk+KAlO+/veKEotGZ4oC60ZrRnNGb0Z/CoNCO0Z7QiMKk0pDCpsKn0IHCqdCEwqvCrMKtwq7Qh8KwwrHQhtGW0pHCtcK2wrfRkeKEltGUwrvRmNCF0ZXRl9CQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGPXCJcbiAgfSxcbiAgXCJ3aW4xMjUxXCI6IFwid2luZG93czEyNTFcIixcbiAgXCJjcDEyNTFcIjogXCJ3aW5kb3dzMTI1MVwiLFxuICBcIndpbmRvd3MxMjUyXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLigqzvv73igJrGkuKAnuKApuKAoOKAocuG4oCwxaDigLnFku+/vcW977+977+94oCY4oCZ4oCc4oCd4oCi4oCT4oCUy5zihKLFoeKAusWT77+9xb7FuMKgwqHCosKjwqTCpcKmwqfCqMKpwqrCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnCusK7wrzCvcK+wr/DgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8OQw5HDksOTw5TDlcOWw5fDmMOZw5rDm8Ocw53DnsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMO9w77Dv1wiXG4gIH0sXG4gIFwid2luMTI1MlwiOiBcIndpbmRvd3MxMjUyXCIsXG4gIFwiY3AxMjUyXCI6IFwid2luZG93czEyNTJcIixcbiAgXCJ3aW5kb3dzMTI1M1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4oKs77+94oCaxpLigJ7igKbigKDigKHvv73igLDvv73igLnvv73vv73vv73vv73vv73igJjigJnigJzigJ3igKLigJPigJTvv73ihKLvv73igLrvv73vv73vv73vv73CoM6FzobCo8KkwqXCpsKnwqjCqe+/vcKrwqzCrcKu4oCVwrDCscKywrPOhMK1wrbCt86IzonOisK7zozCvc6Ozo/OkM6RzpLOk86UzpXOls6XzpjOmc6azpvOnM6dzp7On86gzqHvv73Oo86kzqXOps6nzqjOqc6qzqvOrM6tzq7Or86wzrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Cz4PPhM+Fz4bPh8+Iz4nPis+Lz4zPjc+O77+9XCJcbiAgfSxcbiAgXCJ3aW4xMjUzXCI6IFwid2luZG93czEyNTNcIixcbiAgXCJjcDEyNTNcIjogXCJ3aW5kb3dzMTI1M1wiLFxuICBcIndpbmRvd3MxMjU0XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLigqzvv73igJrGkuKAnuKApuKAoOKAocuG4oCwxaDigLnFku+/ve+/ve+/ve+/veKAmOKAmeKAnOKAneKAouKAk+KAlMuc4oSixaHigLrFk++/ve+/vcW4wqDCocKiwqPCpMKlwqbCp8KowqnCqsKrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucK6wrvCvMK9wr7Cv8OAw4HDgsODw4TDhcOGw4fDiMOJw4rDi8OMw43DjsOPxJ7DkcOSw5PDlMOVw5bDl8OYw5nDmsObw5zEsMWew5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Sfw7HDssOzw7TDtcO2w7fDuMO5w7rDu8O8xLHFn8O/XCJcbiAgfSxcbiAgXCJ3aW4xMjU0XCI6IFwid2luZG93czEyNTRcIixcbiAgXCJjcDEyNTRcIjogXCJ3aW5kb3dzMTI1NFwiLFxuICBcIndpbmRvd3MxMjU1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLigqzvv73igJrGkuKAnuKApuKAoOKAocuG4oCw77+94oC577+977+977+977+977+94oCY4oCZ4oCc4oCd4oCi4oCT4oCUy5zihKLvv73igLrvv73vv73vv73vv73CoMKhwqLCo+KCqsKlwqbCp8KowqnDl8KrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucO3wrvCvMK9wr7Cv9aw1rHWstaz1rTWtda21rfWuNa51rrWu9a81r3Wvta/14DXgdeC14PXsNex17LXs9e077+977+977+977+977+977+977+915DXkdeS15PXlNeV15bXl9eY15nXmteb15zXndee15/XoNeh16LXo9ek16XXpten16jXqdeq77+977+94oCO4oCP77+9XCJcbiAgfSxcbiAgXCJ3aW4xMjU1XCI6IFwid2luZG93czEyNTVcIixcbiAgXCJjcDEyNTVcIjogXCJ3aW5kb3dzMTI1NVwiLFxuICBcIndpbmRvd3MxMjU2XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLigqzZvuKAmsaS4oCe4oCm4oCg4oChy4bigLDZueKAucWS2obamNqI2q/igJjigJnigJzigJ3igKLigJPigJTaqeKEotqR4oC6xZPigIzigI3ausKg2IzCosKjwqTCpcKmwqfCqMKp2r7Cq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnYm8K7wrzCvcK+2J/bgdih2KLYo9ik2KXYptin2KjYqdiq2KvYrNit2K7Yr9iw2LHYstiz2LTYtdi2w5fYt9i42LnYutmA2YHZgtmDw6DZhMOi2YXZhtmH2YjDp8Oow6nDqsOr2YnZisOuw6/Zi9mM2Y3ZjsO02Y/ZkMO32ZHDudmSw7vDvOKAjuKAj9uSXCJcbiAgfSxcbiAgXCJ3aW4xMjU2XCI6IFwid2luZG93czEyNTZcIixcbiAgXCJjcDEyNTZcIjogXCJ3aW5kb3dzMTI1NlwiLFxuICBcIndpbmRvd3MxMjU3XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLigqzvv73igJrvv73igJ7igKbigKDigKHvv73igLDvv73igLnvv73CqMuHwrjvv73igJjigJnigJzigJ3igKLigJPigJTvv73ihKLvv73igLrvv73Cr8ub77+9wqDvv73CosKjwqTvv73CpsKnw5jCqcWWwqvCrMKtwq7DhsKwwrHCssKzwrTCtcK2wrfDuMK5xZfCu8K8wr3CvsOmxITErsSAxIbDhMOFxJjEksSMw4nFucSWxKLEtsSqxLvFoMWDxYXDk8WMw5XDlsOXxbLFgcWaxarDnMW7xb3Dn8SFxK/EgcSHw6TDpcSZxJPEjcOpxbrEl8SjxLfEq8S8xaHFhMWGw7PFjcO1w7bDt8WzxYLFm8Wrw7zFvMW+y5lcIlxuICB9LFxuICBcIndpbjEyNTdcIjogXCJ3aW5kb3dzMTI1N1wiLFxuICBcImNwMTI1N1wiOiBcIndpbmRvd3MxMjU3XCIsXG4gIFwid2luZG93czEyNThcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIuKCrO+/veKAmsaS4oCe4oCm4oCg4oChy4bigLDvv73igLnFku+/ve+/ve+/ve+/veKAmOKAmeKAnOKAneKAouKAk+KAlMuc4oSi77+94oC6xZPvv73vv73FuMKgwqHCosKjwqTCpcKmwqfCqMKpwqrCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnCusK7wrzCvcK+wr/DgMOBw4LEgsOEw4XDhsOHw4jDicOKw4vMgMONw47Dj8SQw5HMicOTw5TGoMOWw5fDmMOZw5rDm8Ocxq/Mg8Ofw6DDocOixIPDpMOlw6bDp8Oow6nDqsOrzIHDrcOuw6/EkcOxzKPDs8O0xqHDtsO3w7jDucO6w7vDvMaw4oKrw79cIlxuICB9LFxuICBcIndpbjEyNThcIjogXCJ3aW5kb3dzMTI1OFwiLFxuICBcImNwMTI1OFwiOiBcIndpbmRvd3MxMjU4XCIsXG4gIFwiaXNvODg1OTFcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMKhwqLCo8KkwqXCpsKnwqjCqcKqwqvCrMKtwq7Cr8KwwrHCssKzwrTCtcK2wrfCuMK5wrrCu8K8wr3CvsK/w4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/DkMORw5LDk8OUw5XDlsOXw5jDmcOaw5vDnMOdw57Dn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDt8O4w7nDusO7w7zDvcO+w79cIlxuICB9LFxuICBcImNwMjg1OTFcIjogXCJpc284ODU5MVwiLFxuICBcImlzbzg4NTkyXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDEhMuYxYHCpMS9xZrCp8KoxaDFnsWkxbnCrcW9xbvCsMSFy5vFgsK0xL7Fm8uHwrjFocWfxaXFusudxb7FvMWUw4HDgsSCw4TEucSGw4fEjMOJxJjDi8Saw43DjsSOxJDFg8WHw5PDlMWQw5bDl8WYxa7DmsWww5zDncWiw5/FlcOhw6LEg8OkxLrEh8OnxI3DqcSZw6vEm8Otw67Ej8SRxYTFiMOzw7TFkcO2w7fFmcWvw7rFscO8w73Fo8uZXCJcbiAgfSxcbiAgXCJjcDI4NTkyXCI6IFwiaXNvODg1OTJcIixcbiAgXCJpc284ODU5M1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgxKbLmMKjwqTvv73EpMKnwqjEsMWexJ7EtMKt77+9xbvCsMSnwrLCs8K0wrXEpcK3wrjEscWfxJ/EtcK977+9xbzDgMOBw4Lvv73DhMSKxIjDh8OIw4nDisOLw4zDjcOOw4/vv73DkcOSw5PDlMSgw5bDl8Scw5nDmsObw5zFrMWcw5/DoMOhw6Lvv73DpMSLxInDp8Oow6nDqsOrw6zDrcOuw6/vv73DscOyw7PDtMShw7bDt8Sdw7nDusO7w7zFrcWdy5lcIlxuICB9LFxuICBcImNwMjg1OTNcIjogXCJpc284ODU5M1wiLFxuICBcImlzbzg4NTk0XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDEhMS4xZbCpMSoxLvCp8KoxaDEksSixabCrcW9wq/CsMSFy5vFl8K0xKnEvMuHwrjFocSTxKPFp8WKxb7Fi8SAw4HDgsODw4TDhcOGxK7EjMOJxJjDi8SWw43DjsSqxJDFhcWMxLbDlMOVw5bDl8OYxbLDmsObw5zFqMWqw5/EgcOhw6LDo8Okw6XDpsSvxI3DqcSZw6vEl8Otw67Eq8SRxYbFjcS3w7TDtcO2w7fDuMWzw7rDu8O8xanFq8uZXCJcbiAgfSxcbiAgXCJjcDI4NTk0XCI6IFwiaXNvODg1OTRcIixcbiAgXCJpc284ODU5NVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8Kg0IHQgtCD0ITQhdCG0IfQiNCJ0IrQi9CMwq3QjtCP0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y/ihJbRkdGS0ZPRlNGV0ZbRl9GY0ZnRmtGb0ZzCp9Ge0Z9cIlxuICB9LFxuICBcImNwMjg1OTVcIjogXCJpc284ODU5NVwiLFxuICBcImlzbzg4NTk2XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDvv73vv73vv73CpO+/ve+/ve+/ve+/ve+/ve+/ve+/vdiMwq3vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73Ym++/ve+/ve+/vdif77+92KHYotij2KTYpdim2KfYqNip2KrYq9is2K3Yrtiv2LDYsdiy2LPYtNi12LbYt9i42LnYuu+/ve+/ve+/ve+/ve+/vdmA2YHZgtmD2YTZhdmG2YfZiNmJ2YrZi9mM2Y3ZjtmP2ZDZkdmS77+977+977+977+977+977+977+977+977+977+977+977+977+9XCJcbiAgfSxcbiAgXCJjcDI4NTk2XCI6IFwiaXNvODg1OTZcIixcbiAgXCJpc284ODU5N1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8Kg4oCY4oCZwqPigqzigq/CpsKnwqjCqc26wqvCrMKt77+94oCVwrDCscKywrPOhM6FzobCt86IzonOisK7zozCvc6Ozo/OkM6RzpLOk86UzpXOls6XzpjOmc6azpvOnM6dzp7On86gzqHvv73Oo86kzqXOps6nzqjOqc6qzqvOrM6tzq7Or86wzrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Cz4PPhM+Fz4bPh8+Iz4nPis+Lz4zPjc+O77+9XCJcbiAgfSxcbiAgXCJjcDI4NTk3XCI6IFwiaXNvODg1OTdcIixcbiAgXCJpc284ODU5OFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8Kg77+9wqLCo8KkwqXCpsKnwqjCqcOXwqvCrMKtwq7Cr8KwwrHCssKzwrTCtcK2wrfCuMK5w7fCu8K8wr3Cvu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veKAl9eQ15HXkteT15TXldeW15fXmNeZ15rXm9ec153Xntef16DXodei16PXpNel16bXp9eo16nXqu+/ve+/veKAjuKAj++/vVwiXG4gIH0sXG4gIFwiY3AyODU5OFwiOiBcImlzbzg4NTk4XCIsXG4gIFwiaXNvODg1OTlcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMKhwqLCo8KkwqXCpsKnwqjCqcKqwqvCrMKtwq7Cr8KwwrHCssKzwrTCtcK2wrfCuMK5wrrCu8K8wr3CvsK/w4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/EnsORw5LDk8OUw5XDlsOXw5jDmcOaw5vDnMSwxZ7Dn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvxJ/DscOyw7PDtMO1w7bDt8O4w7nDusO7w7zEscWfw79cIlxuICB9LFxuICBcImNwMjg1OTlcIjogXCJpc284ODU5OVwiLFxuICBcImlzbzg4NTkxMFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgxITEksSixKrEqMS2wqfEu8SQxaDFpsW9wq3FqsWKwrDEhcSTxKPEq8SpxLfCt8S8xJHFocWnxb7igJXFq8WLxIDDgcOCw4PDhMOFw4bErsSMw4nEmMOLxJbDjcOOw4/DkMWFxYzDk8OUw5XDlsWow5jFssOaw5vDnMOdw57Dn8SBw6HDosOjw6TDpcOmxK/EjcOpxJnDq8SXw63DrsOvw7DFhsWNw7PDtMO1w7bFqcO4xbPDusO7w7zDvcO+xLhcIlxuICB9LFxuICBcImNwMjg2MDBcIjogXCJpc284ODU5MTBcIixcbiAgXCJpc284ODU5MTFcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoOC4geC4guC4g+C4hOC4heC4huC4h+C4iOC4ieC4iuC4i+C4jOC4jeC4juC4j+C4kOC4keC4kuC4k+C4lOC4leC4luC4l+C4mOC4meC4muC4m+C4nOC4neC4nuC4n+C4oOC4oeC4ouC4o+C4pOC4peC4puC4p+C4qOC4qeC4quC4q+C4rOC4reC4ruC4r+C4sOC4seC4suC4s+C4tOC4teC4tuC4t+C4uOC4ueC4uu+/ve+/ve+/ve+/veC4v+C5gOC5geC5guC5g+C5hOC5heC5huC5h+C5iOC5ieC5iuC5i+C5jOC5jeC5juC5j+C5kOC5keC5kuC5k+C5lOC5leC5luC5l+C5mOC5meC5muC5m++/ve+/ve+/ve+/vVwiXG4gIH0sXG4gIFwiY3AyODYwMVwiOiBcImlzbzg4NTkxMVwiLFxuICBcImlzbzg4NTkxM1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8Kg4oCdwqLCo8Kk4oCewqbCp8OYwqnFlsKrwqzCrcKuw4bCsMKxwrLCs+KAnMK1wrbCt8O4wrnFl8K7wrzCvcK+w6bEhMSuxIDEhsOEw4XEmMSSxIzDicW5xJbEosS2xKrEu8WgxYPFhcOTxYzDlcOWw5fFssWBxZrFqsOcxbvFvcOfxIXEr8SBxIfDpMOlxJnEk8SNw6nFusSXxKPEt8SrxLzFocWExYbDs8WNw7XDtsO3xbPFgsWbxavDvMW8xb7igJlcIlxuICB9LFxuICBcImNwMjg2MDNcIjogXCJpc284ODU5MTNcIixcbiAgXCJpc284ODU5MTRcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoOG4guG4g8KjxIrEi+G4isKn4bqAwqnhuoLhuIvhu7LCrcKuxbjhuJ7huJ/EoMSh4bmA4bmBwrbhuZbhuoHhuZfhuoPhuaDhu7PhuoThuoXhuaHDgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8W0w5HDksOTw5TDlcOW4bmqw5jDmcOaw5vDnMOdxbbDn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvxbXDscOyw7PDtMO1w7bhuavDuMO5w7rDu8O8w73Ft8O/XCJcbiAgfSxcbiAgXCJjcDI4NjA0XCI6IFwiaXNvODg1OTE0XCIsXG4gIFwiaXNvODg1OTE1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDCocKiwqPigqzCpcWgwqfFocKpwqrCq8Kswq3CrsKvwrDCscKywrPFvcK1wrbCt8W+wrnCusK7xZLFk8W4wr/DgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8OQw5HDksOTw5TDlcOWw5fDmMOZw5rDm8Ocw53DnsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMO9w77Dv1wiXG4gIH0sXG4gIFwiY3AyODYwNVwiOiBcImlzbzg4NTkxNVwiLFxuICBcImlzbzg4NTkxNlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgxITEhcWB4oKs4oCexaDCp8WhwqnImMKrxbnCrcW6xbvCsMKxxIzFgsW94oCdwrbCt8W+xI3ImcK7xZLFk8W4xbzDgMOBw4LEgsOExIbDhsOHw4jDicOKw4vDjMONw47Dj8SQxYPDksOTw5TFkMOWxZrFsMOZw5rDm8OcxJjImsOfw6DDocOixIPDpMSHw6bDp8Oow6nDqsOrw6zDrcOuw6/EkcWEw7LDs8O0xZHDtsWbxbHDucO6w7vDvMSZyJvDv1wiXG4gIH0sXG4gIFwiY3AyODYwNlwiOiBcImlzbzg4NTkxNlwiLFxuICBcImNwNDM3XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDh8O8w6nDosOkw6DDpcOnw6rDq8Oow6/DrsOsw4TDhcOJw6bDhsO0w7bDssO7w7nDv8OWw5zCosKjwqXigqfGksOhw63Ds8O6w7HDkcKqwrrCv+KMkMKswr3CvMKhwqvCu+KWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgM6xw5/Ok8+AzqPPg8K1z4TOps6YzqnOtOKIns+GzrXiiKniiaHCseKJpeKJpOKMoOKMocO34omIwrDiiJnCt+KImuKBv8Ky4pagwqBcIlxuICB9LFxuICBcImlibTQzN1wiOiBcImNwNDM3XCIsXG4gIFwiY3NpYm00MzdcIjogXCJjcDQzN1wiLFxuICBcImNwNzM3XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLOkc6SzpPOlM6VzpbOl86YzpnOms6bzpzOnc6ezp/OoM6hzqPOpM6lzqbOp86ozqnOsc6yzrPOtM61zrbOt864zrnOus67zrzOvc6+zr/PgM+Bz4PPgs+Ez4XPhs+Hz4jilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDPic6szq3Ors+Kzq/PjM+Nz4vPjs6GzojOic6KzozOjs6PwrHiiaXiiaTOqs6rw7fiiYjCsOKImcK34oia4oG/wrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtNzM3XCI6IFwiY3A3MzdcIixcbiAgXCJjc2libTczN1wiOiBcImNwNzM3XCIsXG4gIFwiY3A3NzVcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsSGw7zDqcSBw6TEo8OlxIfFgsSTxZbFl8SrxbnDhMOFw4nDpsOGxY3DtsSiwqLFmsWbw5bDnMO4wqPDmMOXwqTEgMSqw7PFu8W8xbrigJ3CpsKpwq7CrMK9wrzFgcKrwrvilpHilpLilpPilILilKTEhMSMxJjEluKVo+KVkeKVl+KVncSuxaDilJDilJTilLTilKzilJzilIDilLzFssWq4pWa4pWU4pWp4pWm4pWg4pWQ4pWsxb3EhcSNxJnEl8SvxaHFs8Wrxb7ilJjilIzilojiloTilozilpDiloDDk8OfxYzFg8O1w5XCtcWExLbEt8S7xLzFhsSSxYXigJnCrcKx4oCcwr7CtsKnw7figJ7CsOKImcK3wrnCs8Ky4pagwqBcIlxuICB9LFxuICBcImlibTc3NVwiOiBcImNwNzc1XCIsXG4gIFwiY3NpYm03NzVcIjogXCJjcDc3NVwiLFxuICBcImNwODUwXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDh8O8w6nDosOkw6DDpcOnw6rDq8Oow6/DrsOsw4TDhcOJw6bDhsO0w7bDssO7w7nDv8OWw5zDuMKjw5jDl8aSw6HDrcOzw7rDscORwqrCusK/wq7CrMK9wrzCocKrwrvilpHilpLilpPilILilKTDgcOCw4DCqeKVo+KVkeKVl+KVncKiwqXilJDilJTilLTilKzilJzilIDilLzDo8OD4pWa4pWU4pWp4pWm4pWg4pWQ4pWswqTDsMOQw4rDi8OIxLHDjcOOw4/ilJjilIzilojiloTCpsOM4paAw5PDn8OUw5LDtcOVwrXDvsOew5rDm8OZw73DncKvwrTCrcKx4oCXwr7CtsKnw7fCuMKwwqjCt8K5wrPCsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NTBcIjogXCJjcDg1MFwiLFxuICBcImNzaWJtODUwXCI6IFwiY3A4NTBcIixcbiAgXCJjcDg1MlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4fDvMOpw6LDpMWvxIfDp8WCw6vFkMWRw67FucOExIbDicS5xLrDtMO2xL3EvsWaxZvDlsOcxaTFpcWBw5fEjcOhw63Ds8O6xITEhcW9xb7EmMSZwqzFusSMxZ/Cq8K74paR4paS4paT4pSC4pSkw4HDgsSaxZ7ilaPilZHilZfilZ3Fu8W84pSQ4pSU4pS04pSs4pSc4pSA4pS8xILEg+KVmuKVlOKVqeKVpuKVoOKVkOKVrMKkxJHEkMSOw4vEj8WHw43DjsSb4pSY4pSM4paI4paExaLFruKWgMOTw5/DlMWDxYTFiMWgxaHFlMOaxZXFsMO9w53Fo8K0wq3Lncuby4fLmMKnw7fCuMKwwqjLmcWxxZjFmeKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NTJcIjogXCJjcDg1MlwiLFxuICBcImNzaWJtODUyXCI6IFwiY3A4NTJcIixcbiAgXCJjcDg1NVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi0ZLQgtGT0IPRkdCB0ZTQhNGV0IXRltCG0ZfQh9GY0IjRmdCJ0ZrQitGb0IvRnNCM0Z7QjtGf0I/RjtCu0YrQqtCw0JDQsdCR0YbQptC00JTQtdCV0YTQpNCz0JPCq8K74paR4paS4paT4pSC4pSk0YXQpdC40JjilaPilZHilZfilZ3QudCZ4pSQ4pSU4pS04pSs4pSc4pSA4pS80LrQmuKVmuKVlOKVqeKVpuKVoOKVkOKVrMKk0LvQm9C80JzQvdCd0L7QntC/4pSY4pSM4paI4paE0J/Rj+KWgNCv0YDQoNGB0KHRgtCi0YPQo9C20JbQstCS0YzQrOKElsKt0YvQq9C30JfRiNCo0Y3QrdGJ0KnRh9CnwqfilqDCoFwiXG4gIH0sXG4gIFwiaWJtODU1XCI6IFwiY3A4NTVcIixcbiAgXCJjc2libTg1NVwiOiBcImNwODU1XCIsXG4gIFwiY3A4NTZcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIteQ15HXkteT15TXldeW15fXmNeZ15rXm9ec153Xntef16DXodei16PXpNel16bXp9eo16nXqu+/vcKj77+9w5fvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73CrsKswr3CvO+/vcKrwrvilpHilpLilpPilILilKTvv73vv73vv73CqeKVo+KVkeKVl+KVncKiwqXilJDilJTilLTilKzilJzilIDilLzvv73vv73ilZrilZTilanilabilaDilZDilazCpO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veKUmOKUjOKWiOKWhMKm77+94paA77+977+977+977+977+977+9wrXvv73vv73vv73vv73vv73vv73vv73Cr8K0wq3CseKAl8K+wrbCp8O3wrjCsMKowrfCucKzwrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtODU2XCI6IFwiY3A4NTZcIixcbiAgXCJjc2libTg1NlwiOiBcImNwODU2XCIsXG4gIFwiY3A4NTdcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOHw7zDqcOiw6TDoMOlw6fDqsOrw6jDr8OuxLHDhMOFw4nDpsOGw7TDtsOyw7vDucSww5bDnMO4wqPDmMWexZ/DocOtw7PDusOxw5HEnsSfwr/CrsKswr3CvMKhwqvCu+KWkeKWkuKWk+KUguKUpMOBw4LDgMKp4pWj4pWR4pWX4pWdwqLCpeKUkOKUlOKUtOKUrOKUnOKUgOKUvMOjw4PilZrilZTilanilabilaDilZDilazCpMK6wqrDisOLw4jvv73DjcOOw4/ilJjilIzilojiloTCpsOM4paAw5PDn8OUw5LDtcOVwrXvv73Dl8Oaw5vDmcOsw7/Cr8K0wq3Cse+/vcK+wrbCp8O3wrjCsMKowrfCucKzwrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtODU3XCI6IFwiY3A4NTdcIixcbiAgXCJjc2libTg1N1wiOiBcImNwODU3XCIsXG4gIFwiY3A4NThcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOHw7zDqcOiw6TDoMOlw6fDqsOrw6jDr8Ouw6zDhMOFw4nDpsOGw7TDtsOyw7vDucO/w5bDnMO4wqPDmMOXxpLDocOtw7PDusOxw5HCqsK6wr/CrsKswr3CvMKhwqvCu+KWkeKWkuKWk+KUguKUpMOBw4LDgMKp4pWj4pWR4pWX4pWdwqLCpeKUkOKUlOKUtOKUrOKUnOKUgOKUvMOjw4PilZrilZTilanilabilaDilZDilazCpMOww5DDisOLw4jigqzDjcOOw4/ilJjilIzilojiloTCpsOM4paAw5PDn8OUw5LDtcOVwrXDvsOew5rDm8OZw73DncKvwrTCrcKx4oCXwr7CtsKnw7fCuMKwwqjCt8K5wrPCsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NThcIjogXCJjcDg1OFwiLFxuICBcImNzaWJtODU4XCI6IFwiY3A4NThcIixcbiAgXCJjcDg2MFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4fDvMOpw6LDo8Ogw4HDp8Oqw4rDqMONw5TDrMODw4LDicOAw4jDtMO1w7LDmsO5w4zDlcOcwqLCo8OZ4oKnw5PDocOtw7PDusOxw5HCqsK6wr/DksKswr3CvMKhwqvCu+KWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgM6xw5/Ok8+AzqPPg8K1z4TOps6YzqnOtOKIns+GzrXiiKniiaHCseKJpeKJpOKMoOKMocO34omIwrDiiJnCt+KImuKBv8Ky4pagwqBcIlxuICB9LFxuICBcImlibTg2MFwiOiBcImNwODYwXCIsXG4gIFwiY3NpYm04NjBcIjogXCJjcDg2MFwiLFxuICBcImNwODYxXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDh8O8w6nDosOkw6DDpcOnw6rDq8Oow5DDsMOew4TDhcOJw6bDhsO0w7bDvsO7w53DvcOWw5zDuMKjw5jigqfGksOhw63Ds8O6w4HDjcOTw5rCv+KMkMKswr3CvMKhwqvCu+KWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgM6xw5/Ok8+AzqPPg8K1z4TOps6YzqnOtOKIns+GzrXiiKniiaHCseKJpeKJpOKMoOKMocO34omIwrDiiJnCt+KImuKBv8Ky4pagwqBcIlxuICB9LFxuICBcImlibTg2MVwiOiBcImNwODYxXCIsXG4gIFwiY3NpYm04NjFcIjogXCJjcDg2MVwiLFxuICBcImNwODYyXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLXkNeR15LXk9eU15XXlteX15jXmdea15vXnNed157Xn9eg16HXotej16TXpdem16fXqNep16rCosKjwqXigqfGksOhw63Ds8O6w7HDkcKqwrrCv+KMkMKswr3CvMKhwqvCu+KWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgM6xw5/Ok8+AzqPPg8K1z4TOps6YzqnOtOKIns+GzrXiiKniiaHCseKJpeKJpOKMoOKMocO34omIwrDiiJnCt+KImuKBv8Ky4pagwqBcIlxuICB9LFxuICBcImlibTg2MlwiOiBcImNwODYyXCIsXG4gIFwiY3NpYm04NjJcIjogXCJjcDg2MlwiLFxuICBcImNwODYzXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDh8O8w6nDosOCw6DCtsOnw6rDq8Oow6/DruKAl8OAwqfDicOIw4rDtMOLw4/Du8O5wqTDlMOcwqLCo8OZw5vGksKmwrTDs8O6wqjCuMKzwq/DjuKMkMKswr3CvMK+wqvCu+KWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgM6xw5/Ok8+AzqPPg8K1z4TOps6YzqnOtOKIns+GzrXiiKniiaHCseKJpeKJpOKMoOKMocO34omIwrDiiJnCt+KImuKBv8Ky4pagwqBcIlxuICB9LFxuICBcImlibTg2M1wiOiBcImNwODYzXCIsXG4gIFwiY3NpYm04NjNcIjogXCJjcDg2M1wiLFxuICBcImNwODY0XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcXHUwMDAwXFx1MDAwMVxcdTAwMDJcXHUwMDAzXFx1MDAwNFxcdTAwMDVcXHUwMDA2XFx1MDAwN1xcYlxcdFxcblxcdTAwMGJcXGZcXHJcXHUwMDBlXFx1MDAwZlxcdTAwMTBcXHUwMDExXFx1MDAxMlxcdTAwMTNcXHUwMDE0XFx1MDAxNVxcdTAwMTZcXHUwMDE3XFx1MDAxOFxcdTAwMTlcXHUwMDFhXFx1MDAxYlxcdTAwMWNcXHUwMDFkXFx1MDAxZVxcdTAwMWYgIVxcXCIjJNmqJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/wrDCt+KImeKImuKWkuKUgOKUguKUvOKUpOKUrOKUnOKUtOKUkOKUjOKUlOKUmM6y4oiez4bCscK9wrziiYjCq8K777u377u477+977+977u777u877+9wqDCre+6gsKjwqTvuoTvv73vv73vuo7vuo/vupXvupnYjO+6ne+6oe+6pdmg2aHZotmj2aTZpdmm2afZqNmp77uR2JvvurHvurXvurnYn8Ki77qA77qB77qD77qF77uK77qL77qN77qR77qT77qX77qb77qf77qj77qn77qp77qr77qt77qv77qz77q377q777q/77uB77uF77uL77uPwqbCrMO3w5fvu4nZgO+7k++7l++7m++7n++7o++7p++7q++7re+7r++7s++6ve+7jO+7ju+7je+7oe+5vdmR77ul77up77us77uw77uy77uQ77uV77u177u277ud77uZ77ux4pag77+9XCJcbiAgfSxcbiAgXCJpYm04NjRcIjogXCJjcDg2NFwiLFxuICBcImNzaWJtODY0XCI6IFwiY3A4NjRcIixcbiAgXCJjcDg2NVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4fDvMOpw6LDpMOgw6XDp8Oqw6vDqMOvw67DrMOEw4XDicOmw4bDtMO2w7LDu8O5w7/DlsOcw7jCo8OY4oKnxpLDocOtw7PDusOxw5HCqsK6wr/ijJDCrMK9wrzCocKrwqTilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDOscOfzpPPgM6jz4PCtc+EzqbOmM6pzrTiiJ7Phs614oip4omhwrHiiaXiiaTijKDijKHDt+KJiMKw4oiZwrfiiJrigb/CsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NjVcIjogXCJjcDg2NVwiLFxuICBcImNzaWJtODY1XCI6IFwiY3A4NjVcIixcbiAgXCJjcDg2NlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/4paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paA0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y/QgdGR0ITRlNCH0ZfQjtGewrDiiJnCt+KImuKElsKk4pagwqBcIlxuICB9LFxuICBcImlibTg2NlwiOiBcImNwODY2XCIsXG4gIFwiY3NpYm04NjZcIjogXCJjcDg2NlwiLFxuICBcImNwODY5XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLvv73vv73vv73vv73vv73vv73Ohu+/vcK3wqzCpuKAmOKAmc6I4oCVzonOis6qzozvv73vv73Ojs6rwqnOj8KywrPOrMKjzq3Ors6vz4rOkM+Mz43Okc6SzpPOlM6VzpbOl8K9zpjOmcKrwrvilpHilpLilpPilILilKTOms6bzpzOneKVo+KVkeKVl+KVnc6ezp/ilJDilJTilLTilKzilJzilIDilLzOoM6h4pWa4pWU4pWp4pWm4pWg4pWQ4pWszqPOpM6lzqbOp86ozqnOsc6yzrPilJjilIzilojiloTOtM614paAzrbOt864zrnOus67zrzOvc6+zr/PgM+Bz4PPgs+EzoTCrcKxz4XPhs+HwqfPiM6FwrDCqM+Jz4vOsM+O4pagwqBcIlxuICB9LFxuICBcImlibTg2OVwiOiBcImNwODY5XCIsXG4gIFwiY3NpYm04NjlcIjogXCJjcDg2OVwiLFxuICBcImNwOTIyXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDCocKiwqPCpMKlwqbCp8KowqnCqsKrwqzCrcKu4oC+wrDCscKywrPCtMK1wrbCt8K4wrnCusK7wrzCvcK+wr/DgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8Wgw5HDksOTw5TDlcOWw5fDmMOZw5rDm8Ocw53FvcOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/FocOxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMO9xb7Dv1wiXG4gIH0sXG4gIFwiaWJtOTIyXCI6IFwiY3A5MjJcIixcbiAgXCJjc2libTkyMlwiOiBcImNwOTIyXCIsXG4gIFwiY3AxMDQ2XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLvuojDl8O376O276O176O076O377mxwojilqDilILilIDilJDilIzilJTilJjvubnvubvvub3vub/vubfvuorvu7Dvu7Pvu7Lvu47vu4/vu5Dvu7bvu7jvu7rvu7zCoO+juu+jue+juMKk76O777qL77qR77qX77qb77qf77qj2IzCre+6p++6s9mg2aHZotmj2aTZpdmm2afZqNmp77q32Jvvurvvur/vu4rYn++7i9ih2KLYo9ik2KXYptin2KjYqdiq2KvYrNit2K7Yr9iw2LHYstiz2LTYtdi22Lfvu4fYudi677uM77qC77qE77qO77uT2YDZgdmC2YPZhNmF2YbZh9mI2YnZitmL2YzZjdmO2Y/ZkNmR2ZLvu5fvu5vvu5/vo7zvu7Xvu7fvu7nvu7vvu6Pvu6fvu6zvu6nvv71cIlxuICB9LFxuICBcImlibTEwNDZcIjogXCJjcDEwNDZcIixcbiAgXCJjc2libTEwNDZcIjogXCJjcDEwNDZcIixcbiAgXCJjcDExMjRcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoNCB0ILSkNCE0IXQhtCH0IjQidCK0IvQjMKt0I7Qj9CQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGP4oSW0ZHRktKR0ZTRldGW0ZfRmNGZ0ZrRm9GcwqfRntGfXCJcbiAgfSxcbiAgXCJpYm0xMTI0XCI6IFwiY3AxMTI0XCIsXG4gIFwiY3NpYm0xMTI0XCI6IFwiY3AxMTI0XCIsXG4gIFwiY3AxMTI1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLQkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/ilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDRgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj9CB0ZHSkNKR0ITRlNCG0ZbQh9GXwrfiiJrihJbCpOKWoMKgXCJcbiAgfSxcbiAgXCJpYm0xMTI1XCI6IFwiY3AxMTI1XCIsXG4gIFwiY3NpYm0xMTI1XCI6IFwiY3AxMTI1XCIsXG4gIFwiY3AxMTI5XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDCocKiwqPCpMKlwqbCp8WTwqnCqsKrwqzCrcKuwq/CsMKxwrLCs8W4wrXCtsK3xZLCucK6wrvCvMK9wr7Cv8OAw4HDgsSCw4TDhcOGw4fDiMOJw4rDi8yAw43DjsOPxJDDkcyJw5PDlMagw5bDl8OYw5nDmsObw5zGr8yDw5/DoMOhw6LEg8Okw6XDpsOnw6jDqcOqw6vMgcOtw67Dr8SRw7HMo8Ozw7TGocO2w7fDuMO5w7rDu8O8xrDigqvDv1wiXG4gIH0sXG4gIFwiaWJtMTEyOVwiOiBcImNwMTEyOVwiLFxuICBcImNzaWJtMTEyOVwiOiBcImNwMTEyOVwiLFxuICBcImNwMTEzM1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8Kg4LqB4LqC4LqE4LqH4LqI4Lqq4LqK4LqN4LqU4LqV4LqW4LqX4LqZ4Lqa4Lqb4Lqc4Lqd4Lqe4Lqf4Lqh4Lqi4Lqj4Lql4Lqn4Lqr4Lqt4Lqu77+977+977+94Lqv4Lqw4Lqy4Lqz4Lq04Lq14Lq24Lq34Lq44Lq54Lq84Lqx4Lq74Lq977+977+977+94LuA4LuB4LuC4LuD4LuE4LuI4LuJ4LuK4LuL4LuM4LuN4LuG77+94Luc4Lud4oKt77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+94LuQ4LuR4LuS4LuT4LuU4LuV4LuW4LuX4LuY4LuZ77+977+9wqLCrMKm77+9XCJcbiAgfSxcbiAgXCJpYm0xMTMzXCI6IFwiY3AxMTMzXCIsXG4gIFwiY3NpYm0xMTMzXCI6IFwiY3AxMTMzXCIsXG4gIFwiY3AxMTYxXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73guYjguIHguILguIPguITguIXguIbguIfguIjguInguIrguIvguIzguI3guI7guI/guJDguJHguJLguJPguJTguJXguJbguJfguJjguJnguJrguJvguJzguJ3guJ7guJ/guKDguKHguKLguKPguKTguKXguKbguKfguKjguKnguKrguKvguKzguK3guK7guK/guLDguLHguLLguLPguLTguLXguLbguLfguLjguLnguLrguYnguYrguYvigqzguL/guYDguYHguYLguYPguYTguYXguYbguYfguYjguYnguYrguYvguYzguY3guY7guY/guZDguZHguZLguZPguZTguZXguZbguZfguZjguZnguZrguZvCosKswqbCoFwiXG4gIH0sXG4gIFwiaWJtMTE2MVwiOiBcImNwMTE2MVwiLFxuICBcImNzaWJtMTE2MVwiOiBcImNwMTE2MVwiLFxuICBcImNwMTE2MlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4oKswoHCgsKDwoTigKbChsKHwojCicKKwovCjMKNwo7Cj8KQ4oCY4oCZ4oCc4oCd4oCi4oCT4oCUwpjCmcKawpvCnMKdwp7Cn8Kg4LiB4LiC4LiD4LiE4LiF4LiG4LiH4LiI4LiJ4LiK4LiL4LiM4LiN4LiO4LiP4LiQ4LiR4LiS4LiT4LiU4LiV4LiW4LiX4LiY4LiZ4Lia4Lib4Lic4Lid4Lie4Lif4Lig4Lih4Lii4Lij4Lik4Lil4Lim4Lin4Lio4Lip4Liq4Lir4Lis4Lit4Liu4Liv4Liw4Lix4Liy4Liz4Li04Li14Li24Li34Li44Li54Li677+977+977+977+94Li/4LmA4LmB4LmC4LmD4LmE4LmF4LmG4LmH4LmI4LmJ4LmK4LmL4LmM4LmN4LmO4LmP4LmQ4LmR4LmS4LmT4LmU4LmV4LmW4LmX4LmY4LmZ4Lma4Lmb77+977+977+977+9XCJcbiAgfSxcbiAgXCJpYm0xMTYyXCI6IFwiY3AxMTYyXCIsXG4gIFwiY3NpYm0xMTYyXCI6IFwiY3AxMTYyXCIsXG4gIFwiY3AxMTYzXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDCocKiwqPigqzCpcKmwqfFk8KpwqrCq8Kswq3CrsKvwrDCscKywrPFuMK1wrbCt8WSwrnCusK7wrzCvcK+wr/DgMOBw4LEgsOEw4XDhsOHw4jDicOKw4vMgMONw47Dj8SQw5HMicOTw5TGoMOWw5fDmMOZw5rDm8Ocxq/Mg8Ofw6DDocOixIPDpMOlw6bDp8Oow6nDqsOrzIHDrcOuw6/EkcOxzKPDs8O0xqHDtsO3w7jDucO6w7vDvMaw4oKrw79cIlxuICB9LFxuICBcImlibTExNjNcIjogXCJjcDExNjNcIixcbiAgXCJjc2libTExNjNcIjogXCJjcDExNjNcIixcbiAgXCJtYWNjcm9hdGlhblwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuxaDihKLCtMKo4omgxb3DmOKInsKx4omk4oml4oiGwrXiiILiiJHiiI/FoeKIq8KqwrrihKbFvsO4wr/CocKs4oiaxpLiiYjEhsKrxIzigKbCoMOAw4PDlcWSxZPEkOKAlOKAnOKAneKAmOKAmcO34peK77+9wqnigYTCpOKAueKAusOGwrvigJPCt+KAmuKAnuKAsMOCxIfDgcSNw4jDjcOOw4/DjMOTw5TEkcOSw5rDm8OZxLHLhsucwq/PgMOLy5rCuMOKw6bLh1wiXG4gIH0sXG4gIFwibWFjY3lyaWxsaWNcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcItCQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/igKDCsMKiwqPCp+KAosK20IbCrsKp4oSi0ILRkuKJoNCD0ZPiiJ7CseKJpOKJpdGWwrXiiILQiNCE0ZTQh9GX0InRmdCK0ZrRmNCFwqziiJrGkuKJiOKIhsKrwrvigKbCoNCL0ZvQjNGc0ZXigJPigJTigJzigJ3igJjigJnDt+KAntCO0Z7Qj9Gf4oSW0IHRkdGP0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7CpFwiXG4gIH0sXG4gIFwibWFjZ3JlZWtcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOEwrnCssOJwrPDlsOczoXDoMOiw6TOhMKow6fDqcOow6rDq8Kj4oSiw67Dr+KAosK94oCww7TDtsKmwq3DucO7w7zigKDOk86UzpjOm86ezqDDn8KuwqnOo86qwqfiiaDCsM6HzpHCseKJpOKJpcKlzpLOlc6WzpfOmc6azpzOps6rzqjOqc6szp3CrM6fzqHiiYjOpMKrwrvigKbCoM6lzqfOhs6IxZPigJPigJXigJzigJ3igJjigJnDt86JzorOjM6Ozq3Ors6vz4zOj8+NzrHOss+IzrTOtc+GzrPOt865zr7Ous67zrzOvc6/z4DPjs+Bz4PPhM64z4nPgs+Hz4XOts+Kz4vOkM6w77+9XCJcbiAgfSxcbiAgXCJtYWNpY2VsYW5kXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O8w53CsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrihKbDpsO4wr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W44oGEwqTDkMOww57DvsO9wrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU77+9w5LDmsObw5nEscuGy5zCr8uYy5nLmsK4y53Lm8uHXCJcbiAgfSxcbiAgXCJtYWNyb21hblwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgw4bDmOKInsKx4omk4omlwqXCteKIguKIkeKIj8+A4oirwqrCuuKEpsOmw7jCv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjigYTCpOKAueKAuu+sge+sguKAocK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+/vcOSw5rDm8OZxLHLhsucwq/LmMuZy5rCuMudy5vLh1wiXG4gIH0sXG4gIFwibWFjcm9tYW5pYVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgxILFnuKInsKx4omk4omlwqXCteKIguKIkeKIj8+A4oirwqrCuuKEpsSDxZ/Cv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjigYTCpOKAueKAusWixaPigKHCt+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvv73DksOaw5vDmcSxy4bLnMKvy5jLmcuawrjLncuby4dcIlxuICB9LFxuICBcIm1hY3RoYWlcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKrwrvigKbvoozvoo/vopLvopXvopjvoovvoo7vopHvopTvopfigJzigJ3vopnvv73igKLvooTvoonvooXvoobvoofvoojvoorvoo3vopDvopPvopbigJjigJnvv73CoOC4geC4guC4g+C4hOC4heC4huC4h+C4iOC4ieC4iuC4i+C4jOC4jeC4juC4j+C4kOC4keC4kuC4k+C4lOC4leC4luC4l+C4mOC4meC4muC4m+C4nOC4neC4nuC4n+C4oOC4oeC4ouC4o+C4pOC4peC4puC4p+C4qOC4qeC4quC4q+C4rOC4reC4ruC4r+C4sOC4seC4suC4s+C4tOC4teC4tuC4t+C4uOC4ueC4uu+7v+KAi+KAk+KAlOC4v+C5gOC5geC5guC5g+C5hOC5heC5huC5h+C5iOC5ieC5iuC5i+C5jOC5jeKEouC5j+C5kOC5keC5kuC5k+C5lOC5leC5luC5l+C5mOC5mcKuwqnvv73vv73vv73vv71cIlxuICB9LFxuICBcIm1hY3R1cmtpc2hcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrihKbDpsO4wr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W4xJ7En8SwxLHFnsWf4oChwrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU77+9w5LDmsObw5nvv73Lhsucwq/LmMuZy5rCuMudy5vLh1wiXG4gIH0sXG4gIFwibWFjdWtyYWluZVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr+KAoMKw0pDCo8Kn4oCiwrbQhsKuwqnihKLQgtGS4omg0IPRk+KInsKx4omk4oml0ZbCtdKR0IjQhNGU0IfRl9CJ0ZnQitGa0ZjQhcKs4oiaxpLiiYjiiIbCq8K74oCmwqDQi9Gb0IzRnNGV4oCT4oCU4oCc4oCd4oCY4oCZw7figJ7QjtGe0I/Rn+KEltCB0ZHRj9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGOwqRcIlxuICB9LFxuICBcImtvaThyXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLilIDilILilIzilJDilJTilJjilJzilKTilKzilLTilLziloDiloTilojilozilpDilpHilpLilpPijKDilqDiiJniiJriiYjiiaTiiaXCoOKMocKwwrLCt8O34pWQ4pWR4pWS0ZHilZPilZTilZXilZbilZfilZjilZnilZrilZvilZzilZ3ilZ7ilZ/ilaDilaHQgeKVouKVo+KVpOKVpeKVpuKVp+KVqOKVqeKVquKVq+KVrMKp0Y7QsNCx0YbQtNC10YTQs9GF0LjQudC60LvQvNC90L7Qv9GP0YDRgdGC0YPQttCy0YzRi9C30YjRjdGJ0YfRitCu0JDQkdCm0JTQldCk0JPQpdCY0JnQmtCb0JzQndCe0J/Qr9Cg0KHQotCj0JbQktCs0KvQl9Co0K3QqdCn0KpcIlxuICB9LFxuICBcImtvaTh1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLilIDilILilIzilJDilJTilJjilJzilKTilKzilLTilLziloDiloTilojilozilpDilpHilpLilpPijKDilqDiiJniiJriiYjiiaTiiaXCoOKMocKwwrLCt8O34pWQ4pWR4pWS0ZHRlOKVlNGW0ZfilZfilZjilZnilZrilZvSkeKVneKVnuKVn+KVoOKVodCB0ITilaPQhtCH4pWm4pWn4pWo4pWp4pWq0pDilazCqdGO0LDQsdGG0LTQtdGE0LPRhdC40LnQutC70LzQvdC+0L/Rj9GA0YHRgtGD0LbQstGM0YvQt9GI0Y3RidGH0YrQrtCQ0JHQptCU0JXQpNCT0KXQmNCZ0JrQm9Cc0J3QntCf0K/QoNCh0KLQo9CW0JLQrNCr0JfQqNCt0KnQp9CqXCJcbiAgfSxcbiAgXCJrb2k4cnVcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIuKUgOKUguKUjOKUkOKUlOKUmOKUnOKUpOKUrOKUtOKUvOKWgOKWhOKWiOKWjOKWkOKWkeKWkuKWk+KMoOKWoOKImeKImuKJiOKJpOKJpcKg4oyhwrDCssK3w7filZDilZHilZLRkdGU4pWU0ZbRl+KVl+KVmOKVmeKVmuKVm9KR0Z7ilZ7ilZ/ilaDilaHQgdCE4pWj0IbQh+KVpuKVp+KVqOKVqeKVqtKQ0I7CqdGO0LDQsdGG0LTQtdGE0LPRhdC40LnQutC70LzQvdC+0L/Rj9GA0YHRgtGD0LbQstGM0YvQt9GI0Y3RidGH0YrQrtCQ0JHQptCU0JXQpNCT0KXQmNCZ0JrQm9Cc0J3QntCf0K/QoNCh0KLQo9CW0JLQrNCr0JfQqNCt0KnQp9CqXCJcbiAgfSxcbiAgXCJrb2k4dFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi0pvSk+KAmtKS4oCe4oCm4oCg4oCh77+94oCw0rPigLnSstK30rbvv73SmuKAmOKAmeKAnOKAneKAouKAk+KAlO+/veKEou+/veKAuu+/ve+/ve+/ve+/ve+/vdOv067RkcKk06PCpsKn77+977+977+9wqvCrMKtwq7vv73CsMKxwrLQge+/vdOiwrbCt++/veKElu+/vcK777+977+977+9wqnRjtCw0LHRhtC00LXRhNCz0YXQuNC50LrQu9C80L3QvtC/0Y/RgNGB0YLRg9C20LLRjNGL0LfRiNGN0YnRh9GK0K7QkNCR0KbQlNCV0KTQk9Cl0JjQmdCa0JvQnNCd0J7Qn9Cv0KDQodCi0KPQltCS0KzQq9CX0KjQrdCp0KfQqlwiXG4gIH0sXG4gIFwiYXJtc2NpaThcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoO+/vdaH1okpKMK7wqvigJQu1Z0sLdaK4oCm1ZzVm9We1LHVodSy1aLUs9Wj1LTVpNS11aXUttWm1LfVp9S41ajUudWp1LrVqtS71avUvNWs1L3VrdS+1a7Uv9Wv1YDVsNWB1bHVgtWy1YPVs9WE1bTVhdW11YbVttWH1bfViNW41YnVudWK1brVi9W71YzVvNWN1b3VjtW+1Y/Vv9WQ1oDVkdaB1ZLWgtWT1oPVlNaE1ZXWhdWW1obVmu+/vVwiXG4gIH0sXG4gIFwicmsxMDQ4XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLQgtCD4oCa0ZPigJ7igKbigKDigKHigqzigLDQieKAudCK0prSutCP0ZLigJjigJnigJzigJ3igKLigJPigJTvv73ihKLRmeKAutGa0pvSu9GfwqDSsNKx05jCpNOowqbCp9CBwqnSksKrwqzCrcKu0q7CsMKx0IbRltOpwrXCtsK30ZHihJbSk8K705nSotKj0q/QkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj1wiXG4gIH0sXG4gIFwidGN2blwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXFx1MDAwMMOa4bukXFx1MDAwM+G7quG7rOG7rlxcdTAwMDdcXGJcXHRcXG5cXHUwMDBiXFxmXFxyXFx1MDAwZVxcdTAwMGZcXHUwMDEw4buo4buw4buy4bu24bu4w53hu7RcXHUwMDE4XFx1MDAxOVxcdTAwMWFcXHUwMDFiXFx1MDAxY1xcdTAwMWRcXHUwMDFlXFx1MDAxZiAhXFxcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f8OA4bqiw4PDgeG6oOG6tuG6rMOI4bq64bq8w4nhurjhu4bDjOG7iMSow43hu4rDkuG7jsOVw5Phu4zhu5jhu5zhu57hu6Dhu5rhu6LDmeG7psWowqDEgsOCw4rDlMagxq/EkMSDw6LDqsO0xqHGsMSR4bqwzIDMicyDzIHMo8Og4bqjw6PDoeG6oeG6suG6seG6s+G6teG6r+G6tOG6ruG6puG6qOG6quG6pOG7gOG6t+G6p+G6qeG6q+G6peG6rcOo4buC4bq74bq9w6nhurnhu4Hhu4Phu4Xhur/hu4fDrOG7ieG7hOG6vuG7ksSpw63hu4vDsuG7lOG7j8O1w7Phu43hu5Phu5Xhu5fhu5Hhu5nhu53hu5/hu6Hhu5vhu6PDueG7luG7p8Wpw7rhu6Xhu6vhu63hu6/hu6nhu7Hhu7Phu7fhu7nDveG7teG7kFwiXG4gIH0sXG4gIFwiZ2VvcmdpYW5hY2FkZW15XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKB4oCaxpLigJ7igKbigKDigKHLhuKAsMWg4oC5xZLCjcKOwo/CkOKAmOKAmeKAnOKAneKAouKAk+KAlMuc4oSixaHigLrFk8Kdwp7FuMKgwqHCosKjwqTCpcKmwqfCqMKpwqrCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnCusK7wrzCvcK+wr/hg5Dhg5Hhg5Lhg5Phg5Thg5Xhg5bhg5fhg5jhg5nhg5rhg5vhg5zhg53hg57hg5/hg6Dhg6Hhg6Lhg6Phg6Thg6Xhg6bhg6fhg6jhg6nhg6rhg6vhg6zhg63hg67hg6/hg7Dhg7Hhg7Lhg7Phg7Thg7Xhg7bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMO9w77Dv1wiXG4gIH0sXG4gIFwiZ2VvcmdpYW5wc1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgeKAmsaS4oCe4oCm4oCg4oChy4bigLDFoOKAucWSwo3CjsKPwpDigJjigJnigJzigJ3igKLigJPigJTLnOKEosWh4oC6xZPCncKexbjCoMKhwqLCo8KkwqXCpsKnwqjCqcKqwqvCrMKtwq7Cr8KwwrHCssKzwrTCtcK2wrfCuMK5wrrCu8K8wr3CvsK/4YOQ4YOR4YOS4YOT4YOU4YOV4YOW4YOx4YOX4YOY4YOZ4YOa4YOb4YOc4YOy4YOd4YOe4YOf4YOg4YOh4YOi4YOz4YOj4YOk4YOl4YOm4YOn4YOo4YOp4YOq4YOr4YOs4YOt4YOu4YO04YOv4YOw4YO1w6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMO9w77Dv1wiXG4gIH0sXG4gIFwicHQxNTRcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcItKW0pLTrtKT4oCe4oCm0rbSrtKy0q/SoNOi0qLSmtK60rjSl+KAmOKAmeKAnOKAneKAouKAk+KAlNKz0rfSodOj0qPSm9K70rnCoNCO0Z7QiNOo0pjSsMKn0IHCqdOYwqvCrNOvwq7SnMKw0rHQhtGW0pnTqcK2wrfRkeKEltOZwrvRmNKq0qvSndCQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGPXCJcbiAgfSxcbiAgXCJ2aXNjaWlcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlxcdTAwMDBcXHUwMDAx4bqyXFx1MDAwM1xcdTAwMDThurThuqpcXHUwMDA3XFxiXFx0XFxuXFx1MDAwYlxcZlxcclxcdTAwMGVcXHUwMDBmXFx1MDAxMFxcdTAwMTFcXHUwMDEyXFx1MDAxM+G7tlxcdTAwMTVcXHUwMDE2XFx1MDAxN1xcdTAwMTjhu7hcXHUwMDFhXFx1MDAxYlxcdTAwMWNcXHUwMDFk4bu0XFx1MDAxZiAhXFxcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f+G6oOG6ruG6sOG6tuG6pOG6puG6qOG6rOG6vOG6uOG6vuG7gOG7guG7hOG7huG7kOG7kuG7lOG7luG7mOG7ouG7muG7nOG7nuG7iuG7juG7jOG7iOG7psWo4buk4buyw5Xhuq/hurHhurfhuqXhuqfhuqnhuq3hur3hurnhur/hu4Hhu4Phu4Xhu4fhu5Hhu5Phu5Xhu5fhu6DGoOG7meG7neG7n+G7i+G7sOG7qOG7quG7rMah4bubxq/DgMOBw4LDg+G6osSC4bqz4bq1w4jDicOK4bq6w4zDjcSo4buzxJDhu6nDksOTw5ThuqHhu7fhu6vhu63DmcOa4bu54bu1w53hu6HGsMOgw6HDosOj4bqjxIPhu6/huqvDqMOpw6rhurvDrMOtxKnhu4nEkeG7scOyw7PDtMO14buP4buN4bulw7nDusWp4bunw73hu6Phu65cIlxuICB9LFxuICBcImlzbzY0NmNuXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcXHUwMDAwXFx1MDAwMVxcdTAwMDJcXHUwMDAzXFx1MDAwNFxcdTAwMDVcXHUwMDA2XFx1MDAwN1xcYlxcdFxcblxcdTAwMGJcXGZcXHJcXHUwMDBlXFx1MDAwZlxcdTAwMTBcXHUwMDExXFx1MDAxMlxcdTAwMTNcXHUwMDE0XFx1MDAxNVxcdTAwMTZcXHUwMDE3XFx1MDAxOFxcdTAwMTlcXHUwMDFhXFx1MDAxYlxcdTAwMWNcXHUwMDFkXFx1MDAxZVxcdTAwMWYgIVxcXCIjwqUlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8feKAvn/vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv71cIlxuICB9LFxuICBcImlzbzY0NmpwXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcXHUwMDAwXFx1MDAwMVxcdTAwMDJcXHUwMDAzXFx1MDAwNFxcdTAwMDVcXHUwMDA2XFx1MDAwN1xcYlxcdFxcblxcdTAwMGJcXGZcXHJcXHUwMDBlXFx1MDAwZlxcdTAwMTBcXHUwMDExXFx1MDAxMlxcdTAwMTNcXHUwMDE0XFx1MDAxNVxcdTAwMTZcXHUwMDE3XFx1MDAxOFxcdTAwMTlcXHUwMDFhXFx1MDAxYlxcdTAwMWNcXHUwMDFkXFx1MDAxZVxcdTAwMWYgIVxcXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWlvCpV1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8feKAvn/vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv71cIlxuICB9LFxuICBcImhwcm9tYW44XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDDgMOCw4jDisOLw47Dj8K0y4vLhsKoy5zDmcOb4oKkwq/DncO9wrDDh8Onw5HDscKhwr/CpMKjwqXCp8aSwqLDosOqw7TDu8Ohw6nDs8O6w6DDqMOyw7nDpMOrw7bDvMOFw67DmMOGw6XDrcO4w6bDhMOsw5bDnMOJw6/Dn8OUw4HDg8Ojw5DDsMONw4zDk8OSw5XDtcWgxaHDmsW4w7/DnsO+wrfCtcK2wr7igJTCvMK9wqrCusKr4pagwrvCse+/vVwiXG4gIH0sXG4gIFwibWFjaW50b3NoXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDDhsOY4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK64oSmw6bDuMK/wqHCrOKImsaS4omI4oiGwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmcO34peKw7/FuOKBhMKk4oC54oC676yB76yC4oChwrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU77+9w5LDmsObw5nEscuGy5zCr8uYy5nLmsK4y53Lm8uHXCJcbiAgfSxcbiAgXCJhc2NpaVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+9XCJcbiAgfSxcbiAgXCJ0aXM2MjBcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veC4geC4guC4g+C4hOC4heC4huC4h+C4iOC4ieC4iuC4i+C4jOC4jeC4juC4j+C4kOC4keC4kuC4k+C4lOC4leC4luC4l+C4mOC4meC4muC4m+C4nOC4neC4nuC4n+C4oOC4oeC4ouC4o+C4pOC4peC4puC4p+C4qOC4qeC4quC4q+C4rOC4reC4ruC4r+C4sOC4seC4suC4s+C4tOC4teC4tuC4t+C4uOC4ueC4uu+/ve+/ve+/ve+/veC4v+C5gOC5geC5guC5g+C5hOC5heC5huC5h+C5iOC5ieC5iuC5i+C5jOC5jeC5juC5j+C5kOC5keC5kuC5k+C5lOC5leC5luC5l+C5mOC5meC5muC5m++/ve+/ve+/ve+/vVwiXG4gIH1cbn0iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBCdWZmZXIgPSByZXF1aXJlKFwic2FmZXItYnVmZmVyXCIpLkJ1ZmZlcjtcblxuLy8gTXVsdGlieXRlIGNvZGVjLiBJbiB0aGlzIHNjaGVtZSwgYSBjaGFyYWN0ZXIgaXMgcmVwcmVzZW50ZWQgYnkgMSBvciBtb3JlIGJ5dGVzLlxuLy8gT3VyIGNvZGVjIHN1cHBvcnRzIFVURi0xNiBzdXJyb2dhdGVzLCBleHRlbnNpb25zIGZvciBHQjE4MDMwIGFuZCB1bmljb2RlIHNlcXVlbmNlcy5cbi8vIFRvIHNhdmUgbWVtb3J5IGFuZCBsb2FkaW5nIHRpbWUsIHdlIHJlYWQgdGFibGUgZmlsZXMgb25seSB3aGVuIHJlcXVlc3RlZC5cblxuZXhwb3J0cy5fZGJjcyA9IERCQ1NDb2RlYztcblxudmFyIFVOQVNTSUdORUQgPSAtMSxcbiAgICBHQjE4MDMwX0NPREUgPSAtMixcbiAgICBTRVFfU1RBUlQgID0gLTEwLFxuICAgIE5PREVfU1RBUlQgPSAtMTAwMCxcbiAgICBVTkFTU0lHTkVEX05PREUgPSBuZXcgQXJyYXkoMHgxMDApLFxuICAgIERFRl9DSEFSID0gLTE7XG5cbmZvciAodmFyIGkgPSAwOyBpIDwgMHgxMDA7IGkrKylcbiAgICBVTkFTU0lHTkVEX05PREVbaV0gPSBVTkFTU0lHTkVEO1xuXG5cbi8vIENsYXNzIERCQ1NDb2RlYyByZWFkcyBhbmQgaW5pdGlhbGl6ZXMgbWFwcGluZyB0YWJsZXMuXG5mdW5jdGlvbiBEQkNTQ29kZWMoY29kZWNPcHRpb25zLCBpY29udikge1xuICAgIHRoaXMuZW5jb2RpbmdOYW1lID0gY29kZWNPcHRpb25zLmVuY29kaW5nTmFtZTtcbiAgICBpZiAoIWNvZGVjT3B0aW9ucylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiREJDUyBjb2RlYyBpcyBjYWxsZWQgd2l0aG91dCB0aGUgZGF0YS5cIilcbiAgICBpZiAoIWNvZGVjT3B0aW9ucy50YWJsZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW5jb2RpbmcgJ1wiICsgdGhpcy5lbmNvZGluZ05hbWUgKyBcIicgaGFzIG5vIGRhdGEuXCIpO1xuXG4gICAgLy8gTG9hZCB0YWJsZXMuXG4gICAgdmFyIG1hcHBpbmdUYWJsZSA9IGNvZGVjT3B0aW9ucy50YWJsZSgpO1xuXG5cbiAgICAvLyBEZWNvZGUgdGFibGVzOiBNQkNTIC0+IFVuaWNvZGUuXG5cbiAgICAvLyBkZWNvZGVUYWJsZXMgaXMgYSB0cmllLCBlbmNvZGVkIGFzIGFuIGFycmF5IG9mIGFycmF5cyBvZiBpbnRlZ2Vycy4gSW50ZXJuYWwgYXJyYXlzIGFyZSB0cmllIG5vZGVzIGFuZCBhbGwgaGF2ZSBsZW4gPSAyNTYuXG4gICAgLy8gVHJpZSByb290IGlzIGRlY29kZVRhYmxlc1swXS5cbiAgICAvLyBWYWx1ZXM6ID49ICAwIC0+IHVuaWNvZGUgY2hhcmFjdGVyIGNvZGUuIGNhbiBiZSA+IDB4RkZGRlxuICAgIC8vICAgICAgICAgPT0gVU5BU1NJR05FRCAtPiB1bmtub3duL3VuYXNzaWduZWQgc2VxdWVuY2UuXG4gICAgLy8gICAgICAgICA9PSBHQjE4MDMwX0NPREUgLT4gdGhpcyBpcyB0aGUgZW5kIG9mIGEgR0IxODAzMCA0LWJ5dGUgc2VxdWVuY2UuXG4gICAgLy8gICAgICAgICA8PSBOT0RFX1NUQVJUIC0+IGluZGV4IG9mIHRoZSBuZXh0IG5vZGUgaW4gb3VyIHRyaWUgdG8gcHJvY2VzcyBuZXh0IGJ5dGUuXG4gICAgLy8gICAgICAgICA8PSBTRVFfU1RBUlQgIC0+IGluZGV4IG9mIHRoZSBzdGFydCBvZiBhIGNoYXJhY3RlciBjb2RlIHNlcXVlbmNlLCBpbiBkZWNvZGVUYWJsZVNlcS5cbiAgICB0aGlzLmRlY29kZVRhYmxlcyA9IFtdO1xuICAgIHRoaXMuZGVjb2RlVGFibGVzWzBdID0gVU5BU1NJR05FRF9OT0RFLnNsaWNlKDApOyAvLyBDcmVhdGUgcm9vdCBub2RlLlxuXG4gICAgLy8gU29tZXRpbWVzIGEgTUJDUyBjaGFyIGNvcnJlc3BvbmRzIHRvIGEgc2VxdWVuY2Ugb2YgdW5pY29kZSBjaGFycy4gV2Ugc3RvcmUgdGhlbSBhcyBhcnJheXMgb2YgaW50ZWdlcnMgaGVyZS4gXG4gICAgdGhpcy5kZWNvZGVUYWJsZVNlcSA9IFtdO1xuXG4gICAgLy8gQWN0dWFsIG1hcHBpbmcgdGFibGVzIGNvbnNpc3Qgb2YgY2h1bmtzLiBVc2UgdGhlbSB0byBmaWxsIHVwIGRlY29kZSB0YWJsZXMuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXBwaW5nVGFibGUubGVuZ3RoOyBpKyspXG4gICAgICAgIHRoaXMuX2FkZERlY29kZUNodW5rKG1hcHBpbmdUYWJsZVtpXSk7XG5cbiAgICB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZSA9IGljb252LmRlZmF1bHRDaGFyVW5pY29kZTtcblxuICAgIFxuICAgIC8vIEVuY29kZSB0YWJsZXM6IFVuaWNvZGUgLT4gREJDUy5cblxuICAgIC8vIGBlbmNvZGVUYWJsZWAgaXMgYXJyYXkgbWFwcGluZyBmcm9tIHVuaWNvZGUgY2hhciB0byBlbmNvZGVkIGNoYXIuIEFsbCBpdHMgdmFsdWVzIGFyZSBpbnRlZ2VycyBmb3IgcGVyZm9ybWFuY2UuXG4gICAgLy8gQmVjYXVzZSBpdCBjYW4gYmUgc3BhcnNlLCBpdCBpcyByZXByZXNlbnRlZCBhcyBhcnJheSBvZiBidWNrZXRzIGJ5IDI1NiBjaGFycyBlYWNoLiBCdWNrZXQgY2FuIGJlIG51bGwuXG4gICAgLy8gVmFsdWVzOiA+PSAgMCAtPiBpdCBpcyBhIG5vcm1hbCBjaGFyLiBXcml0ZSB0aGUgdmFsdWUgKGlmIDw9MjU2IHRoZW4gMSBieXRlLCBpZiA8PTY1NTM2IHRoZW4gMiBieXRlcywgZXRjLikuXG4gICAgLy8gICAgICAgICA9PSBVTkFTU0lHTkVEIC0+IG5vIGNvbnZlcnNpb24gZm91bmQuIE91dHB1dCBhIGRlZmF1bHQgY2hhci5cbiAgICAvLyAgICAgICAgIDw9IFNFUV9TVEFSVCAgLT4gaXQncyBhbiBpbmRleCBpbiBlbmNvZGVUYWJsZVNlcSwgc2VlIGJlbG93LiBUaGUgY2hhcmFjdGVyIHN0YXJ0cyBhIHNlcXVlbmNlLlxuICAgIHRoaXMuZW5jb2RlVGFibGUgPSBbXTtcbiAgICBcbiAgICAvLyBgZW5jb2RlVGFibGVTZXFgIGlzIHVzZWQgd2hlbiBhIHNlcXVlbmNlIG9mIHVuaWNvZGUgY2hhcmFjdGVycyBpcyBlbmNvZGVkIGFzIGEgc2luZ2xlIGNvZGUuIFdlIHVzZSBhIHRyZWUgb2ZcbiAgICAvLyBvYmplY3RzIHdoZXJlIGtleXMgY29ycmVzcG9uZCB0byBjaGFyYWN0ZXJzIGluIHNlcXVlbmNlIGFuZCBsZWFmcyBhcmUgdGhlIGVuY29kZWQgZGJjcyB2YWx1ZXMuIEEgc3BlY2lhbCBERUZfQ0hBUiBrZXlcbiAgICAvLyBtZWFucyBlbmQgb2Ygc2VxdWVuY2UgKG5lZWRlZCB3aGVuIG9uZSBzZXF1ZW5jZSBpcyBhIHN0cmljdCBzdWJzZXF1ZW5jZSBvZiBhbm90aGVyKS5cbiAgICAvLyBPYmplY3RzIGFyZSBrZXB0IHNlcGFyYXRlbHkgZnJvbSBlbmNvZGVUYWJsZSB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZS5cbiAgICB0aGlzLmVuY29kZVRhYmxlU2VxID0gW107XG5cbiAgICAvLyBTb21lIGNoYXJzIGNhbiBiZSBkZWNvZGVkLCBidXQgbmVlZCBub3QgYmUgZW5jb2RlZC5cbiAgICB2YXIgc2tpcEVuY29kZUNoYXJzID0ge307XG4gICAgaWYgKGNvZGVjT3B0aW9ucy5lbmNvZGVTa2lwVmFscylcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2RlY09wdGlvbnMuZW5jb2RlU2tpcFZhbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSBjb2RlY09wdGlvbnMuZW5jb2RlU2tpcFZhbHNbaV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICAgICAgc2tpcEVuY29kZUNoYXJzW3ZhbF0gPSB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSB2YWwuZnJvbTsgaiA8PSB2YWwudG87IGorKylcbiAgICAgICAgICAgICAgICAgICAgc2tpcEVuY29kZUNoYXJzW2pdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAvLyBVc2UgZGVjb2RlIHRyaWUgdG8gcmVjdXJzaXZlbHkgZmlsbCBvdXQgZW5jb2RlIHRhYmxlcy5cbiAgICB0aGlzLl9maWxsRW5jb2RlVGFibGUoMCwgMCwgc2tpcEVuY29kZUNoYXJzKTtcblxuICAgIC8vIEFkZCBtb3JlIGVuY29kaW5nIHBhaXJzIHdoZW4gbmVlZGVkLlxuICAgIGlmIChjb2RlY09wdGlvbnMuZW5jb2RlQWRkKSB7XG4gICAgICAgIGZvciAodmFyIHVDaGFyIGluIGNvZGVjT3B0aW9ucy5lbmNvZGVBZGQpXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvZGVjT3B0aW9ucy5lbmNvZGVBZGQsIHVDaGFyKSlcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRFbmNvZGVDaGFyKHVDaGFyLmNoYXJDb2RlQXQoMCksIGNvZGVjT3B0aW9ucy5lbmNvZGVBZGRbdUNoYXJdKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlZkNoYXJTQiAgPSB0aGlzLmVuY29kZVRhYmxlWzBdW2ljb252LmRlZmF1bHRDaGFyU2luZ2xlQnl0ZS5jaGFyQ29kZUF0KDApXTtcbiAgICBpZiAodGhpcy5kZWZDaGFyU0IgPT09IFVOQVNTSUdORUQpIHRoaXMuZGVmQ2hhclNCID0gdGhpcy5lbmNvZGVUYWJsZVswXVsnPyddO1xuICAgIGlmICh0aGlzLmRlZkNoYXJTQiA9PT0gVU5BU1NJR05FRCkgdGhpcy5kZWZDaGFyU0IgPSBcIj9cIi5jaGFyQ29kZUF0KDApO1xuXG5cbiAgICAvLyBMb2FkICYgY3JlYXRlIEdCMTgwMzAgdGFibGVzIHdoZW4gbmVlZGVkLlxuICAgIGlmICh0eXBlb2YgY29kZWNPcHRpb25zLmdiMTgwMzAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5nYjE4MDMwID0gY29kZWNPcHRpb25zLmdiMTgwMzAoKTsgLy8gTG9hZCBHQjE4MDMwIHJhbmdlcy5cblxuICAgICAgICAvLyBBZGQgR0IxODAzMCBkZWNvZGUgdGFibGVzLlxuICAgICAgICB2YXIgdGhpcmRCeXRlTm9kZUlkeCA9IHRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aDtcbiAgICAgICAgdmFyIHRoaXJkQnl0ZU5vZGUgPSB0aGlzLmRlY29kZVRhYmxlc1t0aGlyZEJ5dGVOb2RlSWR4XSA9IFVOQVNTSUdORURfTk9ERS5zbGljZSgwKTtcblxuICAgICAgICB2YXIgZm91cnRoQnl0ZU5vZGVJZHggPSB0aGlzLmRlY29kZVRhYmxlcy5sZW5ndGg7XG4gICAgICAgIHZhciBmb3VydGhCeXRlTm9kZSA9IHRoaXMuZGVjb2RlVGFibGVzW2ZvdXJ0aEJ5dGVOb2RlSWR4XSA9IFVOQVNTSUdORURfTk9ERS5zbGljZSgwKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMHg4MTsgaSA8PSAweEZFOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBzZWNvbmRCeXRlTm9kZUlkeCA9IE5PREVfU1RBUlQgLSB0aGlzLmRlY29kZVRhYmxlc1swXVtpXTtcbiAgICAgICAgICAgIHZhciBzZWNvbmRCeXRlTm9kZSA9IHRoaXMuZGVjb2RlVGFibGVzW3NlY29uZEJ5dGVOb2RlSWR4XTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAweDMwOyBqIDw9IDB4Mzk7IGorKylcbiAgICAgICAgICAgICAgICBzZWNvbmRCeXRlTm9kZVtqXSA9IE5PREVfU1RBUlQgLSB0aGlyZEJ5dGVOb2RlSWR4O1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAweDgxOyBpIDw9IDB4RkU7IGkrKylcbiAgICAgICAgICAgIHRoaXJkQnl0ZU5vZGVbaV0gPSBOT0RFX1NUQVJUIC0gZm91cnRoQnl0ZU5vZGVJZHg7XG4gICAgICAgIGZvciAodmFyIGkgPSAweDMwOyBpIDw9IDB4Mzk7IGkrKylcbiAgICAgICAgICAgIGZvdXJ0aEJ5dGVOb2RlW2ldID0gR0IxODAzMF9DT0RFXG4gICAgfSAgICAgICAgXG59XG5cbkRCQ1NDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IERCQ1NFbmNvZGVyO1xuREJDU0NvZGVjLnByb3RvdHlwZS5kZWNvZGVyID0gREJDU0RlY29kZXI7XG5cbi8vIERlY29kZXIgaGVscGVyc1xuREJDU0NvZGVjLnByb3RvdHlwZS5fZ2V0RGVjb2RlVHJpZU5vZGUgPSBmdW5jdGlvbihhZGRyKSB7XG4gICAgdmFyIGJ5dGVzID0gW107XG4gICAgZm9yICg7IGFkZHIgPiAwOyBhZGRyID4+PSA4KVxuICAgICAgICBieXRlcy5wdXNoKGFkZHIgJiAweEZGKTtcbiAgICBpZiAoYnl0ZXMubGVuZ3RoID09IDApXG4gICAgICAgIGJ5dGVzLnB1c2goMCk7XG5cbiAgICB2YXIgbm9kZSA9IHRoaXMuZGVjb2RlVGFibGVzWzBdO1xuICAgIGZvciAodmFyIGkgPSBieXRlcy5sZW5ndGgtMTsgaSA+IDA7IGktLSkgeyAvLyBUcmF2ZXJzZSBub2RlcyBkZWVwZXIgaW50byB0aGUgdHJpZS5cbiAgICAgICAgdmFyIHZhbCA9IG5vZGVbYnl0ZXNbaV1dO1xuXG4gICAgICAgIGlmICh2YWwgPT0gVU5BU1NJR05FRCkgeyAvLyBDcmVhdGUgbmV3IG5vZGUuXG4gICAgICAgICAgICBub2RlW2J5dGVzW2ldXSA9IE5PREVfU1RBUlQgLSB0aGlzLmRlY29kZVRhYmxlcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmRlY29kZVRhYmxlcy5wdXNoKG5vZGUgPSBVTkFTU0lHTkVEX05PREUuc2xpY2UoMCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbCA8PSBOT0RFX1NUQVJUKSB7IC8vIEV4aXN0aW5nIG5vZGUuXG4gICAgICAgICAgICBub2RlID0gdGhpcy5kZWNvZGVUYWJsZXNbTk9ERV9TVEFSVCAtIHZhbF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT3ZlcndyaXRlIGJ5dGUgaW4gXCIgKyB0aGlzLmVuY29kaW5nTmFtZSArIFwiLCBhZGRyOiBcIiArIGFkZHIudG9TdHJpbmcoMTYpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG59XG5cblxuREJDU0NvZGVjLnByb3RvdHlwZS5fYWRkRGVjb2RlQ2h1bmsgPSBmdW5jdGlvbihjaHVuaykge1xuICAgIC8vIEZpcnN0IGVsZW1lbnQgb2YgY2h1bmsgaXMgdGhlIGhleCBtYmNzIGNvZGUgd2hlcmUgd2Ugc3RhcnQuXG4gICAgdmFyIGN1ckFkZHIgPSBwYXJzZUludChjaHVua1swXSwgMTYpO1xuXG4gICAgLy8gQ2hvb3NlIHRoZSBkZWNvZGluZyBub2RlIHdoZXJlIHdlJ2xsIHdyaXRlIG91ciBjaGFycy5cbiAgICB2YXIgd3JpdGVUYWJsZSA9IHRoaXMuX2dldERlY29kZVRyaWVOb2RlKGN1ckFkZHIpO1xuICAgIGN1ckFkZHIgPSBjdXJBZGRyICYgMHhGRjtcblxuICAgIC8vIFdyaXRlIGFsbCBvdGhlciBlbGVtZW50cyBvZiB0aGUgY2h1bmsgdG8gdGhlIHRhYmxlLlxuICAgIGZvciAodmFyIGsgPSAxOyBrIDwgY2h1bmsubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBjaHVua1trXTtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ID09PSBcInN0cmluZ1wiKSB7IC8vIFN0cmluZywgd3JpdGUgYXMtaXMuXG4gICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IHBhcnQubGVuZ3RoOykge1xuICAgICAgICAgICAgICAgIHZhciBjb2RlID0gcGFydC5jaGFyQ29kZUF0KGwrKyk7XG4gICAgICAgICAgICAgICAgaWYgKDB4RDgwMCA8PSBjb2RlICYmIGNvZGUgPCAweERDMDApIHsgLy8gRGVjb2RlIHN1cnJvZ2F0ZVxuICAgICAgICAgICAgICAgICAgICB2YXIgY29kZVRyYWlsID0gcGFydC5jaGFyQ29kZUF0KGwrKyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgweERDMDAgPD0gY29kZVRyYWlsICYmIGNvZGVUcmFpbCA8IDB4RTAwMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlVGFibGVbY3VyQWRkcisrXSA9IDB4MTAwMDAgKyAoY29kZSAtIDB4RDgwMCkgKiAweDQwMCArIChjb2RlVHJhaWwgLSAweERDMDApO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbmNvcnJlY3Qgc3Vycm9nYXRlIHBhaXIgaW4gXCIgICsgdGhpcy5lbmNvZGluZ05hbWUgKyBcIiBhdCBjaHVuayBcIiArIGNodW5rWzBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoMHgwRkYwIDwgY29kZSAmJiBjb2RlIDw9IDB4MEZGRikgeyAvLyBDaGFyYWN0ZXIgc2VxdWVuY2UgKG91ciBvd24gZW5jb2RpbmcgdXNlZClcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbiA9IDB4RkZGIC0gY29kZSArIDI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZXEgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCBsZW47IG0rKylcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcS5wdXNoKHBhcnQuY2hhckNvZGVBdChsKyspKTsgLy8gU2ltcGxlIHZhcmlhdGlvbjogZG9uJ3Qgc3VwcG9ydCBzdXJyb2dhdGVzIG9yIHN1YnNlcXVlbmNlcyBpbiBzZXEuXG5cbiAgICAgICAgICAgICAgICAgICAgd3JpdGVUYWJsZVtjdXJBZGRyKytdID0gU0VRX1NUQVJUIC0gdGhpcy5kZWNvZGVUYWJsZVNlcS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjb2RlVGFibGVTZXEucHVzaChzZXEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlVGFibGVbY3VyQWRkcisrXSA9IGNvZGU7IC8vIEJhc2ljIGNoYXJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHBhcnQgPT09IFwibnVtYmVyXCIpIHsgLy8gSW50ZWdlciwgbWVhbmluZyBpbmNyZWFzaW5nIHNlcXVlbmNlIHN0YXJ0aW5nIHdpdGggcHJldiBjaGFyYWN0ZXIuXG4gICAgICAgICAgICB2YXIgY2hhckNvZGUgPSB3cml0ZVRhYmxlW2N1ckFkZHIgLSAxXSArIDE7XG4gICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IHBhcnQ7IGwrKylcbiAgICAgICAgICAgICAgICB3cml0ZVRhYmxlW2N1ckFkZHIrK10gPSBjaGFyQ29kZSsrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluY29ycmVjdCB0eXBlICdcIiArIHR5cGVvZiBwYXJ0ICsgXCInIGdpdmVuIGluIFwiICArIHRoaXMuZW5jb2RpbmdOYW1lICsgXCIgYXQgY2h1bmsgXCIgKyBjaHVua1swXSk7XG4gICAgfVxuICAgIGlmIChjdXJBZGRyID4gMHhGRilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW5jb3JyZWN0IGNodW5rIGluIFwiICArIHRoaXMuZW5jb2RpbmdOYW1lICsgXCIgYXQgYWRkciBcIiArIGNodW5rWzBdICsgXCI6IHRvbyBsb25nXCIgKyBjdXJBZGRyKTtcbn1cblxuLy8gRW5jb2RlciBoZWxwZXJzXG5EQkNTQ29kZWMucHJvdG90eXBlLl9nZXRFbmNvZGVCdWNrZXQgPSBmdW5jdGlvbih1Q29kZSkge1xuICAgIHZhciBoaWdoID0gdUNvZGUgPj4gODsgLy8gVGhpcyBjb3VsZCBiZSA+IDB4RkYgYmVjYXVzZSBvZiBhc3RyYWwgY2hhcmFjdGVycy5cbiAgICBpZiAodGhpcy5lbmNvZGVUYWJsZVtoaWdoXSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB0aGlzLmVuY29kZVRhYmxlW2hpZ2hdID0gVU5BU1NJR05FRF9OT0RFLnNsaWNlKDApOyAvLyBDcmVhdGUgYnVja2V0IG9uIGRlbWFuZC5cbiAgICByZXR1cm4gdGhpcy5lbmNvZGVUYWJsZVtoaWdoXTtcbn1cblxuREJDU0NvZGVjLnByb3RvdHlwZS5fc2V0RW5jb2RlQ2hhciA9IGZ1bmN0aW9uKHVDb2RlLCBkYmNzQ29kZSkge1xuICAgIHZhciBidWNrZXQgPSB0aGlzLl9nZXRFbmNvZGVCdWNrZXQodUNvZGUpO1xuICAgIHZhciBsb3cgPSB1Q29kZSAmIDB4RkY7XG4gICAgaWYgKGJ1Y2tldFtsb3ddIDw9IFNFUV9TVEFSVClcbiAgICAgICAgdGhpcy5lbmNvZGVUYWJsZVNlcVtTRVFfU1RBUlQtYnVja2V0W2xvd11dW0RFRl9DSEFSXSA9IGRiY3NDb2RlOyAvLyBUaGVyZSdzIGFscmVhZHkgYSBzZXF1ZW5jZSwgc2V0IGEgc2luZ2xlLWNoYXIgc3Vic2VxdWVuY2Ugb2YgaXQuXG4gICAgZWxzZSBpZiAoYnVja2V0W2xvd10gPT0gVU5BU1NJR05FRClcbiAgICAgICAgYnVja2V0W2xvd10gPSBkYmNzQ29kZTtcbn1cblxuREJDU0NvZGVjLnByb3RvdHlwZS5fc2V0RW5jb2RlU2VxdWVuY2UgPSBmdW5jdGlvbihzZXEsIGRiY3NDb2RlKSB7XG4gICAgXG4gICAgLy8gR2V0IHRoZSByb290IG9mIGNoYXJhY3RlciB0cmVlIGFjY29yZGluZyB0byBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHNlcXVlbmNlLlxuICAgIHZhciB1Q29kZSA9IHNlcVswXTtcbiAgICB2YXIgYnVja2V0ID0gdGhpcy5fZ2V0RW5jb2RlQnVja2V0KHVDb2RlKTtcbiAgICB2YXIgbG93ID0gdUNvZGUgJiAweEZGO1xuXG4gICAgdmFyIG5vZGU7XG4gICAgaWYgKGJ1Y2tldFtsb3ddIDw9IFNFUV9TVEFSVCkge1xuICAgICAgICAvLyBUaGVyZSdzIGFscmVhZHkgYSBzZXF1ZW5jZSB3aXRoICAtIHVzZSBpdC5cbiAgICAgICAgbm9kZSA9IHRoaXMuZW5jb2RlVGFibGVTZXFbU0VRX1NUQVJULWJ1Y2tldFtsb3ddXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIFRoZXJlIHdhcyBubyBzZXF1ZW5jZSBvYmplY3QgLSBhbGxvY2F0ZSBhIG5ldyBvbmUuXG4gICAgICAgIG5vZGUgPSB7fTtcbiAgICAgICAgaWYgKGJ1Y2tldFtsb3ddICE9PSBVTkFTU0lHTkVEKSBub2RlW0RFRl9DSEFSXSA9IGJ1Y2tldFtsb3ddOyAvLyBJZiBhIGNoYXIgd2FzIHNldCBiZWZvcmUgLSBtYWtlIGl0IGEgc2luZ2xlLWNoYXIgc3Vic2VxdWVuY2UuXG4gICAgICAgIGJ1Y2tldFtsb3ddID0gU0VRX1NUQVJUIC0gdGhpcy5lbmNvZGVUYWJsZVNlcS5sZW5ndGg7XG4gICAgICAgIHRoaXMuZW5jb2RlVGFibGVTZXEucHVzaChub2RlKTtcbiAgICB9XG5cbiAgICAvLyBUcmF2ZXJzZSB0aGUgY2hhcmFjdGVyIHRyZWUsIGFsbG9jYXRpbmcgbmV3IG5vZGVzIGFzIG5lZWRlZC5cbiAgICBmb3IgKHZhciBqID0gMTsgaiA8IHNlcS5sZW5ndGgtMTsgaisrKSB7XG4gICAgICAgIHZhciBvbGRWYWwgPSBub2RlW3VDb2RlXTtcbiAgICAgICAgaWYgKHR5cGVvZiBvbGRWYWwgPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgbm9kZSA9IG9sZFZhbDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBub2RlID0gbm9kZVt1Q29kZV0gPSB7fVxuICAgICAgICAgICAgaWYgKG9sZFZhbCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIG5vZGVbREVGX0NIQVJdID0gb2xkVmFsXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIGxlYWYgdG8gZ2l2ZW4gZGJjc0NvZGUuXG4gICAgdUNvZGUgPSBzZXFbc2VxLmxlbmd0aC0xXTtcbiAgICBub2RlW3VDb2RlXSA9IGRiY3NDb2RlO1xufVxuXG5EQkNTQ29kZWMucHJvdG90eXBlLl9maWxsRW5jb2RlVGFibGUgPSBmdW5jdGlvbihub2RlSWR4LCBwcmVmaXgsIHNraXBFbmNvZGVDaGFycykge1xuICAgIHZhciBub2RlID0gdGhpcy5kZWNvZGVUYWJsZXNbbm9kZUlkeF07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAweDEwMDsgaSsrKSB7XG4gICAgICAgIHZhciB1Q29kZSA9IG5vZGVbaV07XG4gICAgICAgIHZhciBtYkNvZGUgPSBwcmVmaXggKyBpO1xuICAgICAgICBpZiAoc2tpcEVuY29kZUNoYXJzW21iQ29kZV0pXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICBpZiAodUNvZGUgPj0gMClcbiAgICAgICAgICAgIHRoaXMuX3NldEVuY29kZUNoYXIodUNvZGUsIG1iQ29kZSk7XG4gICAgICAgIGVsc2UgaWYgKHVDb2RlIDw9IE5PREVfU1RBUlQpXG4gICAgICAgICAgICB0aGlzLl9maWxsRW5jb2RlVGFibGUoTk9ERV9TVEFSVCAtIHVDb2RlLCBtYkNvZGUgPDwgOCwgc2tpcEVuY29kZUNoYXJzKTtcbiAgICAgICAgZWxzZSBpZiAodUNvZGUgPD0gU0VRX1NUQVJUKVxuICAgICAgICAgICAgdGhpcy5fc2V0RW5jb2RlU2VxdWVuY2UodGhpcy5kZWNvZGVUYWJsZVNlcVtTRVFfU1RBUlQgLSB1Q29kZV0sIG1iQ29kZSk7XG4gICAgfVxufVxuXG5cblxuLy8gPT0gRW5jb2RlciA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gREJDU0VuY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICAvLyBFbmNvZGVyIHN0YXRlXG4gICAgdGhpcy5sZWFkU3Vycm9nYXRlID0gLTE7XG4gICAgdGhpcy5zZXFPYmogPSB1bmRlZmluZWQ7XG4gICAgXG4gICAgLy8gU3RhdGljIGRhdGFcbiAgICB0aGlzLmVuY29kZVRhYmxlID0gY29kZWMuZW5jb2RlVGFibGU7XG4gICAgdGhpcy5lbmNvZGVUYWJsZVNlcSA9IGNvZGVjLmVuY29kZVRhYmxlU2VxO1xuICAgIHRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlID0gY29kZWMuZGVmQ2hhclNCO1xuICAgIHRoaXMuZ2IxODAzMCA9IGNvZGVjLmdiMTgwMzA7XG59XG5cbkRCQ1NFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHZhciBuZXdCdWYgPSBCdWZmZXIuYWxsb2Moc3RyLmxlbmd0aCAqICh0aGlzLmdiMTgwMzAgPyA0IDogMykpLFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gdGhpcy5sZWFkU3Vycm9nYXRlLFxuICAgICAgICBzZXFPYmogPSB0aGlzLnNlcU9iaiwgbmV4dENoYXIgPSAtMSxcbiAgICAgICAgaSA9IDAsIGogPSAwO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgLy8gMC4gR2V0IG5leHQgY2hhcmFjdGVyLlxuICAgICAgICBpZiAobmV4dENoYXIgPT09IC0xKSB7XG4gICAgICAgICAgICBpZiAoaSA9PSBzdHIubGVuZ3RoKSBicmVhaztcbiAgICAgICAgICAgIHZhciB1Q29kZSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgdUNvZGUgPSBuZXh0Q2hhcjtcbiAgICAgICAgICAgIG5leHRDaGFyID0gLTE7ICAgIFxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMS4gSGFuZGxlIHN1cnJvZ2F0ZXMuXG4gICAgICAgIGlmICgweEQ4MDAgPD0gdUNvZGUgJiYgdUNvZGUgPCAweEUwMDApIHsgLy8gQ2hhciBpcyBvbmUgb2Ygc3Vycm9nYXRlcy5cbiAgICAgICAgICAgIGlmICh1Q29kZSA8IDB4REMwMCkgeyAvLyBXZSd2ZSBnb3QgbGVhZCBzdXJyb2dhdGUuXG4gICAgICAgICAgICAgICAgaWYgKGxlYWRTdXJyb2dhdGUgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGxlYWRTdXJyb2dhdGUgPSB1Q29kZTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IHVDb2RlO1xuICAgICAgICAgICAgICAgICAgICAvLyBEb3VibGUgbGVhZCBzdXJyb2dhdGUgZm91bmQuXG4gICAgICAgICAgICAgICAgICAgIHVDb2RlID0gVU5BU1NJR05FRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBXZSd2ZSBnb3QgdHJhaWwgc3Vycm9nYXRlLlxuICAgICAgICAgICAgICAgIGlmIChsZWFkU3Vycm9nYXRlICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB1Q29kZSA9IDB4MTAwMDAgKyAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCkgKiAweDQwMCArICh1Q29kZSAtIDB4REMwMCk7XG4gICAgICAgICAgICAgICAgICAgIGxlYWRTdXJyb2dhdGUgPSAtMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBJbmNvbXBsZXRlIHN1cnJvZ2F0ZSBwYWlyIC0gb25seSB0cmFpbCBzdXJyb2dhdGUgZm91bmQuXG4gICAgICAgICAgICAgICAgICAgIHVDb2RlID0gVU5BU1NJR05FRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSAhPT0gLTEpIHtcbiAgICAgICAgICAgIC8vIEluY29tcGxldGUgc3Vycm9nYXRlIHBhaXIgLSBvbmx5IGxlYWQgc3Vycm9nYXRlIGZvdW5kLlxuICAgICAgICAgICAgbmV4dENoYXIgPSB1Q29kZTsgdUNvZGUgPSBVTkFTU0lHTkVEOyAvLyBXcml0ZSBhbiBlcnJvciwgdGhlbiBjdXJyZW50IGNoYXIuXG4gICAgICAgICAgICBsZWFkU3Vycm9nYXRlID0gLTE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBDb252ZXJ0IHVDb2RlIGNoYXJhY3Rlci5cbiAgICAgICAgdmFyIGRiY3NDb2RlID0gVU5BU1NJR05FRDtcbiAgICAgICAgaWYgKHNlcU9iaiAhPT0gdW5kZWZpbmVkICYmIHVDb2RlICE9IFVOQVNTSUdORUQpIHsgLy8gV2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgdGhlIHNlcXVlbmNlXG4gICAgICAgICAgICB2YXIgcmVzQ29kZSA9IHNlcU9ialt1Q29kZV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlc0NvZGUgPT09ICdvYmplY3QnKSB7IC8vIFNlcXVlbmNlIGNvbnRpbnVlcy5cbiAgICAgICAgICAgICAgICBzZXFPYmogPSByZXNDb2RlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXNDb2RlID09ICdudW1iZXInKSB7IC8vIFNlcXVlbmNlIGZpbmlzaGVkLiBXcml0ZSBpdC5cbiAgICAgICAgICAgICAgICBkYmNzQ29kZSA9IHJlc0NvZGU7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzQ29kZSA9PSB1bmRlZmluZWQpIHsgLy8gQ3VycmVudCBjaGFyYWN0ZXIgaXMgbm90IHBhcnQgb2YgdGhlIHNlcXVlbmNlLlxuXG4gICAgICAgICAgICAgICAgLy8gVHJ5IGRlZmF1bHQgY2hhcmFjdGVyIGZvciB0aGlzIHNlcXVlbmNlXG4gICAgICAgICAgICAgICAgcmVzQ29kZSA9IHNlcU9ialtERUZfQ0hBUl07XG4gICAgICAgICAgICAgICAgaWYgKHJlc0NvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBkYmNzQ29kZSA9IHJlc0NvZGU7IC8vIEZvdW5kLiBXcml0ZSBpdC5cbiAgICAgICAgICAgICAgICAgICAgbmV4dENoYXIgPSB1Q29kZTsgLy8gQ3VycmVudCBjaGFyYWN0ZXIgd2lsbCBiZSB3cml0dGVuIHRvbyBpbiB0aGUgbmV4dCBpdGVyYXRpb24uXG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBXaGF0IGlmIHdlIGhhdmUgbm8gZGVmYXVsdD8gKHJlc0NvZGUgPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAvLyBUaGVuLCB3ZSBzaG91bGQgd3JpdGUgZmlyc3QgY2hhciBvZiB0aGUgc2VxdWVuY2UgYXMtaXMgYW5kIHRyeSB0aGUgcmVzdCByZWN1cnNpdmVseS5cbiAgICAgICAgICAgICAgICAgICAgLy8gRGlkbid0IGRvIGl0IGZvciBub3cgYmVjYXVzZSBubyBlbmNvZGluZyBoYXMgdGhpcyBzaXR1YXRpb24geWV0LlxuICAgICAgICAgICAgICAgICAgICAvLyBDdXJyZW50bHksIGp1c3Qgc2tpcCB0aGUgc2VxdWVuY2UgYW5kIHdyaXRlIGN1cnJlbnQgY2hhci5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXFPYmogPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodUNvZGUgPj0gMCkgeyAgLy8gUmVndWxhciBjaGFyYWN0ZXJcbiAgICAgICAgICAgIHZhciBzdWJ0YWJsZSA9IHRoaXMuZW5jb2RlVGFibGVbdUNvZGUgPj4gOF07XG4gICAgICAgICAgICBpZiAoc3VidGFibGUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBkYmNzQ29kZSA9IHN1YnRhYmxlW3VDb2RlICYgMHhGRl07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChkYmNzQ29kZSA8PSBTRVFfU1RBUlQpIHsgLy8gU2VxdWVuY2Ugc3RhcnRcbiAgICAgICAgICAgICAgICBzZXFPYmogPSB0aGlzLmVuY29kZVRhYmxlU2VxW1NFUV9TVEFSVC1kYmNzQ29kZV07XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYmNzQ29kZSA9PSBVTkFTU0lHTkVEICYmIHRoaXMuZ2IxODAzMCkge1xuICAgICAgICAgICAgICAgIC8vIFVzZSBHQjE4MDMwIGFsZ29yaXRobSB0byBmaW5kIGNoYXJhY3RlcihzKSB0byB3cml0ZS5cbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gZmluZElkeCh0aGlzLmdiMTgwMzAudUNoYXJzLCB1Q29kZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlkeCAhPSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGJjc0NvZGUgPSB0aGlzLmdiMTgwMzAuZ2JDaGFyc1tpZHhdICsgKHVDb2RlIC0gdGhpcy5nYjE4MDMwLnVDaGFyc1tpZHhdKTtcbiAgICAgICAgICAgICAgICAgICAgbmV3QnVmW2orK10gPSAweDgxICsgTWF0aC5mbG9vcihkYmNzQ29kZSAvIDEyNjAwKTsgZGJjc0NvZGUgPSBkYmNzQ29kZSAlIDEyNjAwO1xuICAgICAgICAgICAgICAgICAgICBuZXdCdWZbaisrXSA9IDB4MzAgKyBNYXRoLmZsb29yKGRiY3NDb2RlIC8gMTI2MCk7IGRiY3NDb2RlID0gZGJjc0NvZGUgJSAxMjYwO1xuICAgICAgICAgICAgICAgICAgICBuZXdCdWZbaisrXSA9IDB4ODEgKyBNYXRoLmZsb29yKGRiY3NDb2RlIC8gMTApOyBkYmNzQ29kZSA9IGRiY3NDb2RlICUgMTA7XG4gICAgICAgICAgICAgICAgICAgIG5ld0J1ZltqKytdID0gMHgzMCArIGRiY3NDb2RlO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBXcml0ZSBkYmNzQ29kZSBjaGFyYWN0ZXIuXG4gICAgICAgIGlmIChkYmNzQ29kZSA9PT0gVU5BU1NJR05FRClcbiAgICAgICAgICAgIGRiY3NDb2RlID0gdGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGU7XG4gICAgICAgIFxuICAgICAgICBpZiAoZGJjc0NvZGUgPCAweDEwMCkge1xuICAgICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYmNzQ29kZSA8IDB4MTAwMDApIHtcbiAgICAgICAgICAgIG5ld0J1ZltqKytdID0gZGJjc0NvZGUgPj4gODsgICAvLyBoaWdoIGJ5dGVcbiAgICAgICAgICAgIG5ld0J1ZltqKytdID0gZGJjc0NvZGUgJiAweEZGOyAvLyBsb3cgYnl0ZVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZSA+PiAxNjtcbiAgICAgICAgICAgIG5ld0J1ZltqKytdID0gKGRiY3NDb2RlID4+IDgpICYgMHhGRjtcbiAgICAgICAgICAgIG5ld0J1ZltqKytdID0gZGJjc0NvZGUgJiAweEZGO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZXFPYmogPSBzZXFPYmo7XG4gICAgdGhpcy5sZWFkU3Vycm9nYXRlID0gbGVhZFN1cnJvZ2F0ZTtcbiAgICByZXR1cm4gbmV3QnVmLnNsaWNlKDAsIGopO1xufVxuXG5EQkNTRW5jb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMubGVhZFN1cnJvZ2F0ZSA9PT0gLTEgJiYgdGhpcy5zZXFPYmogPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuOyAvLyBBbGwgY2xlYW4uIE1vc3Qgb2Z0ZW4gY2FzZS5cblxuICAgIHZhciBuZXdCdWYgPSBCdWZmZXIuYWxsb2MoMTApLCBqID0gMDtcblxuICAgIGlmICh0aGlzLnNlcU9iaikgeyAvLyBXZSdyZSBpbiB0aGUgc2VxdWVuY2UuXG4gICAgICAgIHZhciBkYmNzQ29kZSA9IHRoaXMuc2VxT2JqW0RFRl9DSEFSXTtcbiAgICAgICAgaWYgKGRiY3NDb2RlICE9PSB1bmRlZmluZWQpIHsgLy8gV3JpdGUgYmVnaW5uaW5nIG9mIHRoZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgIGlmIChkYmNzQ29kZSA8IDB4MTAwKSB7XG4gICAgICAgICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld0J1ZltqKytdID0gZGJjc0NvZGUgPj4gODsgICAvLyBoaWdoIGJ5dGVcbiAgICAgICAgICAgICAgICBuZXdCdWZbaisrXSA9IGRiY3NDb2RlICYgMHhGRjsgLy8gbG93IGJ5dGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFNlZSB0b2RvIGFib3ZlLlxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VxT2JqID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxlYWRTdXJyb2dhdGUgIT09IC0xKSB7XG4gICAgICAgIC8vIEluY29tcGxldGUgc3Vycm9nYXRlIHBhaXIgLSBvbmx5IGxlYWQgc3Vycm9nYXRlIGZvdW5kLlxuICAgICAgICBuZXdCdWZbaisrXSA9IHRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlO1xuICAgICAgICB0aGlzLmxlYWRTdXJyb2dhdGUgPSAtMTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIG5ld0J1Zi5zbGljZSgwLCBqKTtcbn1cblxuLy8gRXhwb3J0IGZvciB0ZXN0aW5nXG5EQkNTRW5jb2Rlci5wcm90b3R5cGUuZmluZElkeCA9IGZpbmRJZHg7XG5cblxuLy8gPT0gRGVjb2RlciA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gREJDU0RlY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICAvLyBEZWNvZGVyIHN0YXRlXG4gICAgdGhpcy5ub2RlSWR4ID0gMDtcbiAgICB0aGlzLnByZXZCdWYgPSBCdWZmZXIuYWxsb2MoMCk7XG5cbiAgICAvLyBTdGF0aWMgZGF0YVxuICAgIHRoaXMuZGVjb2RlVGFibGVzID0gY29kZWMuZGVjb2RlVGFibGVzO1xuICAgIHRoaXMuZGVjb2RlVGFibGVTZXEgPSBjb2RlYy5kZWNvZGVUYWJsZVNlcTtcbiAgICB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZSA9IGNvZGVjLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICB0aGlzLmdiMTgwMzAgPSBjb2RlYy5nYjE4MDMwO1xufVxuXG5EQkNTRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWYpIHtcbiAgICB2YXIgbmV3QnVmID0gQnVmZmVyLmFsbG9jKGJ1Zi5sZW5ndGgqMiksXG4gICAgICAgIG5vZGVJZHggPSB0aGlzLm5vZGVJZHgsIFxuICAgICAgICBwcmV2QnVmID0gdGhpcy5wcmV2QnVmLCBwcmV2QnVmT2Zmc2V0ID0gdGhpcy5wcmV2QnVmLmxlbmd0aCxcbiAgICAgICAgc2VxU3RhcnQgPSAtdGhpcy5wcmV2QnVmLmxlbmd0aCwgLy8gaWR4IG9mIHRoZSBzdGFydCBvZiBjdXJyZW50IHBhcnNlZCBzZXF1ZW5jZS5cbiAgICAgICAgdUNvZGU7XG5cbiAgICBpZiAocHJldkJ1Zk9mZnNldCA+IDApIC8vIE1ha2UgcHJldiBidWYgb3ZlcmxhcCBhIGxpdHRsZSB0byBtYWtlIGl0IGVhc2llciB0byBzbGljZSBsYXRlci5cbiAgICAgICAgcHJldkJ1ZiA9IEJ1ZmZlci5jb25jYXQoW3ByZXZCdWYsIGJ1Zi5zbGljZSgwLCAxMCldKTtcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGN1ckJ5dGUgPSAoaSA+PSAwKSA/IGJ1ZltpXSA6IHByZXZCdWZbaSArIHByZXZCdWZPZmZzZXRdO1xuXG4gICAgICAgIC8vIExvb2t1cCBpbiBjdXJyZW50IHRyaWUgbm9kZS5cbiAgICAgICAgdmFyIHVDb2RlID0gdGhpcy5kZWNvZGVUYWJsZXNbbm9kZUlkeF1bY3VyQnl0ZV07XG5cbiAgICAgICAgaWYgKHVDb2RlID49IDApIHsgXG4gICAgICAgICAgICAvLyBOb3JtYWwgY2hhcmFjdGVyLCBqdXN0IHVzZSBpdC5cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1Q29kZSA9PT0gVU5BU1NJR05FRCkgeyAvLyBVbmtub3duIGNoYXIuXG4gICAgICAgICAgICAvLyBUT0RPOiBDYWxsYmFjayB3aXRoIHNlcS5cbiAgICAgICAgICAgIC8vdmFyIGN1clNlcSA9IChzZXFTdGFydCA+PSAwKSA/IGJ1Zi5zbGljZShzZXFTdGFydCwgaSsxKSA6IHByZXZCdWYuc2xpY2Uoc2VxU3RhcnQgKyBwcmV2QnVmT2Zmc2V0LCBpKzEgKyBwcmV2QnVmT2Zmc2V0KTtcbiAgICAgICAgICAgIGkgPSBzZXFTdGFydDsgLy8gVHJ5IHRvIHBhcnNlIGFnYWluLCBhZnRlciBza2lwcGluZyBmaXJzdCBieXRlIG9mIHRoZSBzZXF1ZW5jZSAoJ2knIHdpbGwgYmUgaW5jcmVtZW50ZWQgYnkgJ2ZvcicgY3ljbGUpLlxuICAgICAgICAgICAgdUNvZGUgPSB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZS5jaGFyQ29kZUF0KDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVDb2RlID09PSBHQjE4MDMwX0NPREUpIHtcbiAgICAgICAgICAgIHZhciBjdXJTZXEgPSAoc2VxU3RhcnQgPj0gMCkgPyBidWYuc2xpY2Uoc2VxU3RhcnQsIGkrMSkgOiBwcmV2QnVmLnNsaWNlKHNlcVN0YXJ0ICsgcHJldkJ1Zk9mZnNldCwgaSsxICsgcHJldkJ1Zk9mZnNldCk7XG4gICAgICAgICAgICB2YXIgcHRyID0gKGN1clNlcVswXS0weDgxKSoxMjYwMCArIChjdXJTZXFbMV0tMHgzMCkqMTI2MCArIChjdXJTZXFbMl0tMHg4MSkqMTAgKyAoY3VyU2VxWzNdLTB4MzApO1xuICAgICAgICAgICAgdmFyIGlkeCA9IGZpbmRJZHgodGhpcy5nYjE4MDMwLmdiQ2hhcnMsIHB0cik7XG4gICAgICAgICAgICB1Q29kZSA9IHRoaXMuZ2IxODAzMC51Q2hhcnNbaWR4XSArIHB0ciAtIHRoaXMuZ2IxODAzMC5nYkNoYXJzW2lkeF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodUNvZGUgPD0gTk9ERV9TVEFSVCkgeyAvLyBHbyB0byBuZXh0IHRyaWUgbm9kZS5cbiAgICAgICAgICAgIG5vZGVJZHggPSBOT0RFX1NUQVJUIC0gdUNvZGU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1Q29kZSA8PSBTRVFfU1RBUlQpIHsgLy8gT3V0cHV0IGEgc2VxdWVuY2Ugb2YgY2hhcnMuXG4gICAgICAgICAgICB2YXIgc2VxID0gdGhpcy5kZWNvZGVUYWJsZVNlcVtTRVFfU1RBUlQgLSB1Q29kZV07XG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHNlcS5sZW5ndGggLSAxOyBrKyspIHtcbiAgICAgICAgICAgICAgICB1Q29kZSA9IHNlcVtrXTtcbiAgICAgICAgICAgICAgICBuZXdCdWZbaisrXSA9IHVDb2RlICYgMHhGRjtcbiAgICAgICAgICAgICAgICBuZXdCdWZbaisrXSA9IHVDb2RlID4+IDg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1Q29kZSA9IHNlcVtzZXEubGVuZ3RoLTFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImljb252LWxpdGUgaW50ZXJuYWwgZXJyb3I6IGludmFsaWQgZGVjb2RpbmcgdGFibGUgdmFsdWUgXCIgKyB1Q29kZSArIFwiIGF0IFwiICsgbm9kZUlkeCArIFwiL1wiICsgY3VyQnl0ZSk7XG5cbiAgICAgICAgLy8gV3JpdGUgdGhlIGNoYXJhY3RlciB0byBidWZmZXIsIGhhbmRsaW5nIGhpZ2hlciBwbGFuZXMgdXNpbmcgc3Vycm9nYXRlIHBhaXIuXG4gICAgICAgIGlmICh1Q29kZSA+IDB4RkZGRikgeyBcbiAgICAgICAgICAgIHVDb2RlIC09IDB4MTAwMDA7XG4gICAgICAgICAgICB2YXIgdUNvZGVMZWFkID0gMHhEODAwICsgTWF0aC5mbG9vcih1Q29kZSAvIDB4NDAwKTtcbiAgICAgICAgICAgIG5ld0J1ZltqKytdID0gdUNvZGVMZWFkICYgMHhGRjtcbiAgICAgICAgICAgIG5ld0J1ZltqKytdID0gdUNvZGVMZWFkID4+IDg7XG5cbiAgICAgICAgICAgIHVDb2RlID0gMHhEQzAwICsgdUNvZGUgJSAweDQwMDtcbiAgICAgICAgfVxuICAgICAgICBuZXdCdWZbaisrXSA9IHVDb2RlICYgMHhGRjtcbiAgICAgICAgbmV3QnVmW2orK10gPSB1Q29kZSA+PiA4O1xuXG4gICAgICAgIC8vIFJlc2V0IHRyaWUgbm9kZS5cbiAgICAgICAgbm9kZUlkeCA9IDA7IHNlcVN0YXJ0ID0gaSsxO1xuICAgIH1cblxuICAgIHRoaXMubm9kZUlkeCA9IG5vZGVJZHg7XG4gICAgdGhpcy5wcmV2QnVmID0gKHNlcVN0YXJ0ID49IDApID8gYnVmLnNsaWNlKHNlcVN0YXJ0KSA6IHByZXZCdWYuc2xpY2Uoc2VxU3RhcnQgKyBwcmV2QnVmT2Zmc2V0KTtcbiAgICByZXR1cm4gbmV3QnVmLnNsaWNlKDAsIGopLnRvU3RyaW5nKCd1Y3MyJyk7XG59XG5cbkRCQ1NEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmV0ID0gJyc7XG5cbiAgICAvLyBUcnkgdG8gcGFyc2UgYWxsIHJlbWFpbmluZyBjaGFycy5cbiAgICB3aGlsZSAodGhpcy5wcmV2QnVmLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gU2tpcCAxIGNoYXJhY3RlciBpbiB0aGUgYnVmZmVyLlxuICAgICAgICByZXQgKz0gdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgICAgIHZhciBidWYgPSB0aGlzLnByZXZCdWYuc2xpY2UoMSk7XG5cbiAgICAgICAgLy8gUGFyc2UgcmVtYWluaW5nIGFzIHVzdWFsLlxuICAgICAgICB0aGlzLnByZXZCdWYgPSBCdWZmZXIuYWxsb2MoMCk7XG4gICAgICAgIHRoaXMubm9kZUlkeCA9IDA7XG4gICAgICAgIGlmIChidWYubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldCArPSB0aGlzLndyaXRlKGJ1Zik7XG4gICAgfVxuXG4gICAgdGhpcy5ub2RlSWR4ID0gMDtcbiAgICByZXR1cm4gcmV0O1xufVxuXG4vLyBCaW5hcnkgc2VhcmNoIGZvciBHQjE4MDMwLiBSZXR1cm5zIGxhcmdlc3QgaSBzdWNoIHRoYXQgdGFibGVbaV0gPD0gdmFsLlxuZnVuY3Rpb24gZmluZElkeCh0YWJsZSwgdmFsKSB7XG4gICAgaWYgKHRhYmxlWzBdID4gdmFsKVxuICAgICAgICByZXR1cm4gLTE7XG5cbiAgICB2YXIgbCA9IDAsIHIgPSB0YWJsZS5sZW5ndGg7XG4gICAgd2hpbGUgKGwgPCByLTEpIHsgLy8gYWx3YXlzIHRhYmxlW2xdIDw9IHZhbCA8IHRhYmxlW3JdXG4gICAgICAgIHZhciBtaWQgPSBsICsgTWF0aC5mbG9vcigoci1sKzEpLzIpO1xuICAgICAgICBpZiAodGFibGVbbWlkXSA8PSB2YWwpXG4gICAgICAgICAgICBsID0gbWlkO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByID0gbWlkO1xuICAgIH1cbiAgICByZXR1cm4gbDtcbn1cblxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIERlc2NyaXB0aW9uIG9mIHN1cHBvcnRlZCBkb3VibGUgYnl0ZSBlbmNvZGluZ3MgYW5kIGFsaWFzZXMuXG4vLyBUYWJsZXMgYXJlIG5vdCByZXF1aXJlKCktZCB1bnRpbCB0aGV5IGFyZSBuZWVkZWQgdG8gc3BlZWQgdXAgbGlicmFyeSBsb2FkLlxuLy8gcmVxdWlyZSgpLXMgYXJlIGRpcmVjdCB0byBzdXBwb3J0IEJyb3dzZXJpZnkuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIFxuICAgIC8vID09IEphcGFuZXNlL1NoaWZ0SklTID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBBbGwgamFwYW5lc2UgZW5jb2RpbmdzIGFyZSBiYXNlZCBvbiBKSVMgWCBzZXQgb2Ygc3RhbmRhcmRzOlxuICAgIC8vIEpJUyBYIDAyMDEgLSBTaW5nbGUtYnl0ZSBlbmNvZGluZyBvZiBBU0NJSSArIMKlICsgS2FuYSBjaGFycyBhdCAweEExLTB4REYuXG4gICAgLy8gSklTIFggMDIwOCAtIE1haW4gc2V0IG9mIDY4NzkgY2hhcmFjdGVycywgcGxhY2VkIGluIDk0eDk0IHBsYW5lLCB0byBiZSBlbmNvZGVkIGJ5IDIgYnl0ZXMuIFxuICAgIC8vICAgICAgICAgICAgICBIYXMgc2V2ZXJhbCB2YXJpYXRpb25zIGluIDE5NzgsIDE5ODMsIDE5OTAgYW5kIDE5OTcuXG4gICAgLy8gSklTIFggMDIxMiAtIFN1cHBsZW1lbnRhcnkgcGxhbmUgb2YgNjA2NyBjaGFycyBpbiA5NHg5NCBwbGFuZS4gMTk5MC4gRWZmZWN0aXZlbHkgZGVhZC5cbiAgICAvLyBKSVMgWCAwMjEzIC0gRXh0ZW5zaW9uIGFuZCBtb2Rlcm4gcmVwbGFjZW1lbnQgb2YgMDIwOCBhbmQgMDIxMi4gVG90YWwgY2hhcnM6IDExMjMzLlxuICAgIC8vICAgICAgICAgICAgICAyIHBsYW5lcywgZmlyc3QgaXMgc3VwZXJzZXQgb2YgMDIwOCwgc2Vjb25kIC0gcmV2aXNlZCAwMjEyLlxuICAgIC8vICAgICAgICAgICAgICBJbnRyb2R1Y2VkIGluIDIwMDAsIHJldmlzZWQgMjAwNC4gU29tZSBjaGFyYWN0ZXJzIGFyZSBpbiBVbmljb2RlIFBsYW5lIDIgKDB4Mnh4eHgpXG5cbiAgICAvLyBCeXRlIGVuY29kaW5ncyBhcmU6XG4gICAgLy8gICogU2hpZnRfSklTOiBDb21wYXRpYmxlIHdpdGggMDIwMSwgdXNlcyBub3QgZGVmaW5lZCBjaGFycyBpbiB0b3AgaGFsZiBhcyBsZWFkIGJ5dGVzIGZvciBkb3VibGUtYnl0ZVxuICAgIC8vICAgICAgICAgICAgICAgZW5jb2Rpbmcgb2YgMDIwOC4gTGVhZCBieXRlIHJhbmdlczogMHg4MS0weDlGLCAweEUwLTB4RUY7IFRyYWlsIGJ5dGUgcmFuZ2VzOiAweDQwLTB4N0UsIDB4ODAtMHg5RSwgMHg5Ri0weEZDLlxuICAgIC8vICAgICAgICAgICAgICAgV2luZG93cyBDUDkzMiBpcyBhIHN1cGVyc2V0IG9mIFNoaWZ0X0pJUy4gU29tZSBjb21wYW5pZXMgYWRkZWQgbW9yZSBjaGFycywgbm90YWJseSBLRERJLlxuICAgIC8vICAqIEVVQy1KUDogICAgVXAgdG8gMyBieXRlcyBwZXIgY2hhcmFjdGVyLiBVc2VkIG1vc3RseSBvbiAqbml4ZXMuXG4gICAgLy8gICAgICAgICAgICAgICAweDAwLTB4N0YgICAgICAgLSBsb3dlciBwYXJ0IG9mIDAyMDFcbiAgICAvLyAgICAgICAgICAgICAgIDB4OEUsIDB4QTEtMHhERiAtIHVwcGVyIHBhcnQgb2YgMDIwMVxuICAgIC8vICAgICAgICAgICAgICAgKDB4QTEtMHhGRSl4MiAgIC0gMDIwOCBwbGFuZSAoOTR4OTQpLlxuICAgIC8vICAgICAgICAgICAgICAgMHg4RiwgKDB4QTEtMHhGRSl4MiAtIDAyMTIgcGxhbmUgKDk0eDk0KS5cbiAgICAvLyAgKiBKSVMgWCAyMDg6IDctYml0LCBkaXJlY3QgZW5jb2Rpbmcgb2YgMDIwOC4gQnl0ZSByYW5nZXM6IDB4MjEtMHg3RSAoOTQgdmFsdWVzKS4gVW5jb21tb24uXG4gICAgLy8gICAgICAgICAgICAgICBVc2VkIGFzLWlzIGluIElTTzIwMjIgZmFtaWx5LlxuICAgIC8vICAqIElTTzIwMjItSlA6IFN0YXRlZnVsIGVuY29kaW5nLCB3aXRoIGVzY2FwZSBzZXF1ZW5jZXMgdG8gc3dpdGNoIGJldHdlZW4gQVNDSUksIFxuICAgIC8vICAgICAgICAgICAgICAgIDAyMDEtMTk3NiBSb21hbiwgMDIwOC0xOTc4LCAwMjA4LTE5ODMuXG4gICAgLy8gICogSVNPMjAyMi1KUC0xOiBBZGRzIGVzYyBzZXEgZm9yIDAyMTItMTk5MC5cbiAgICAvLyAgKiBJU08yMDIyLUpQLTI6IEFkZHMgZXNjIHNlcSBmb3IgR0IyMzEzLTE5ODAsIEtTWDEwMDEtMTk5MiwgSVNPODg1OS0xLCBJU084ODU5LTcuXG4gICAgLy8gICogSVNPMjAyMi1KUC0zOiBBZGRzIGVzYyBzZXEgZm9yIDAyMDEtMTk3NiBLYW5hIHNldCwgMDIxMy0yMDAwIFBsYW5lcyAxLCAyLlxuICAgIC8vICAqIElTTzIwMjItSlAtMjAwNDogQWRkcyAwMjEzLTIwMDQgUGxhbmUgMS5cbiAgICAvL1xuICAgIC8vIEFmdGVyIEpJUyBYIDAyMTMgYXBwZWFyZWQsIFNoaWZ0X0pJUy0yMDA0LCBFVUMtSklTWDAyMTMgYW5kIElTTzIwMjItSlAtMjAwNCBmb2xsb3dlZCwgd2l0aCBqdXN0IGNoYW5naW5nIHRoZSBwbGFuZXMuXG4gICAgLy9cbiAgICAvLyBPdmVyYWxsLCBpdCBzZWVtcyB0aGF0IGl0J3MgYSBtZXNzIDooIGh0dHA6Ly93d3c4LnBsYWxhLm9yLmpwL3RrdWJvdGExL3VuaWNvZGUtc3ltYm9scy1tYXAyLmh0bWxcblxuICAgICdzaGlmdGppcyc6IHtcbiAgICAgICAgdHlwZTogJ19kYmNzJyxcbiAgICAgICAgdGFibGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVxdWlyZSgnLi90YWJsZXMvc2hpZnRqaXMuanNvbicpIH0sXG4gICAgICAgIGVuY29kZUFkZDogeydcXHUwMGE1JzogMHg1QywgJ1xcdTIwM0UnOiAweDdFfSxcbiAgICAgICAgZW5jb2RlU2tpcFZhbHM6IFt7ZnJvbTogMHhFRDQwLCB0bzogMHhGOTQwfV0sXG4gICAgfSxcbiAgICAnY3NzaGlmdGppcyc6ICdzaGlmdGppcycsXG4gICAgJ21za2FuamknOiAnc2hpZnRqaXMnLFxuICAgICdzamlzJzogJ3NoaWZ0amlzJyxcbiAgICAnd2luZG93czMxaic6ICdzaGlmdGppcycsXG4gICAgJ21zMzFqJzogJ3NoaWZ0amlzJyxcbiAgICAneHNqaXMnOiAnc2hpZnRqaXMnLFxuICAgICd3aW5kb3dzOTMyJzogJ3NoaWZ0amlzJyxcbiAgICAnbXM5MzInOiAnc2hpZnRqaXMnLFxuICAgICc5MzInOiAnc2hpZnRqaXMnLFxuICAgICdjcDkzMic6ICdzaGlmdGppcycsXG5cbiAgICAnZXVjanAnOiB7XG4gICAgICAgIHR5cGU6ICdfZGJjcycsXG4gICAgICAgIHRhYmxlOiBmdW5jdGlvbigpIHsgcmV0dXJuIHJlcXVpcmUoJy4vdGFibGVzL2V1Y2pwLmpzb24nKSB9LFxuICAgICAgICBlbmNvZGVBZGQ6IHsnXFx1MDBhNSc6IDB4NUMsICdcXHUyMDNFJzogMHg3RX0sXG4gICAgfSxcblxuICAgIC8vIFRPRE86IEtEREkgZXh0ZW5zaW9uIHRvIFNoaWZ0X0pJU1xuICAgIC8vIFRPRE86IElCTSBDQ1NJRCA5NDIgPSBDUDkzMiwgYnV0IEYwLUY5IGN1c3RvbSBjaGFycyBhbmQgb3RoZXIgY2hhciBjaGFuZ2VzLlxuICAgIC8vIFRPRE86IElCTSBDQ1NJRCA5NDMgPSBTaGlmdF9KSVMgPSBDUDkzMiB3aXRoIG9yaWdpbmFsIFNoaWZ0X0pJUyBsb3dlciAxMjggY2hhcnMuXG5cblxuICAgIC8vID09IENoaW5lc2UvR0JLID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dCS1xuICAgIC8vIFdlIG1vc3RseSBpbXBsZW1lbnQgVzNDIHJlY29tbWVuZGF0aW9uOiBodHRwczovL3d3dy53My5vcmcvVFIvZW5jb2RpbmcvI2diay1lbmNvZGVyXG5cbiAgICAvLyBPbGRlc3QgR0IyMzEyICgxOTgxLCB+NzYwMCBjaGFycykgaXMgYSBzdWJzZXQgb2YgQ1A5MzZcbiAgICAnZ2IyMzEyJzogJ2NwOTM2JyxcbiAgICAnZ2IyMzEyODAnOiAnY3A5MzYnLFxuICAgICdnYjIzMTIxOTgwJzogJ2NwOTM2JyxcbiAgICAnY3NnYjIzMTInOiAnY3A5MzYnLFxuICAgICdjc2lzbzU4Z2IyMzEyODAnOiAnY3A5MzYnLFxuICAgICdldWNjbic6ICdjcDkzNicsXG5cbiAgICAvLyBNaWNyb3NvZnQncyBDUDkzNiBpcyBhIHN1YnNldCBhbmQgYXBwcm94aW1hdGlvbiBvZiBHQksuXG4gICAgJ3dpbmRvd3M5MzYnOiAnY3A5MzYnLFxuICAgICdtczkzNic6ICdjcDkzNicsXG4gICAgJzkzNic6ICdjcDkzNicsXG4gICAgJ2NwOTM2Jzoge1xuICAgICAgICB0eXBlOiAnX2RiY3MnLFxuICAgICAgICB0YWJsZTogZnVuY3Rpb24oKSB7IHJldHVybiByZXF1aXJlKCcuL3RhYmxlcy9jcDkzNi5qc29uJykgfSxcbiAgICB9LFxuXG4gICAgLy8gR0JLICh+MjIwMDAgY2hhcnMpIGlzIGFuIGV4dGVuc2lvbiBvZiBDUDkzNiB0aGF0IGFkZGVkIHVzZXItbWFwcGVkIGNoYXJzIGFuZCBzb21lIG90aGVyLlxuICAgICdnYmsnOiB7XG4gICAgICAgIHR5cGU6ICdfZGJjcycsXG4gICAgICAgIHRhYmxlOiBmdW5jdGlvbigpIHsgcmV0dXJuIHJlcXVpcmUoJy4vdGFibGVzL2NwOTM2Lmpzb24nKS5jb25jYXQocmVxdWlyZSgnLi90YWJsZXMvZ2JrLWFkZGVkLmpzb24nKSkgfSxcbiAgICB9LFxuICAgICd4Z2JrJzogJ2diaycsXG4gICAgJ2lzb2lyNTgnOiAnZ2JrJyxcblxuICAgIC8vIEdCMTgwMzAgaXMgYW4gYWxnb3JpdGhtaWMgZXh0ZW5zaW9uIG9mIEdCSy5cbiAgICAvLyBNYWluIHNvdXJjZTogaHR0cHM6Ly93d3cudzMub3JnL1RSL2VuY29kaW5nLyNnYmstZW5jb2RlclxuICAgIC8vIGh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZG9jcy9wYXBlcnMvZ2IxODAzMC5odG1sXG4gICAgLy8gaHR0cDovL3NvdXJjZS5pY3UtcHJvamVjdC5vcmcvcmVwb3MvaWN1L2RhdGEvdHJ1bmsvY2hhcnNldC9kYXRhL3htbC9nYi0xODAzMC0yMDAwLnhtbFxuICAgIC8vIGh0dHA6Ly93d3cua2huZ2FpLmNvbS9jaGluZXNlL2NoYXJtYXAvdGJsZ2JrLnBocD9wYWdlPTBcbiAgICAnZ2IxODAzMCc6IHtcbiAgICAgICAgdHlwZTogJ19kYmNzJyxcbiAgICAgICAgdGFibGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVxdWlyZSgnLi90YWJsZXMvY3A5MzYuanNvbicpLmNvbmNhdChyZXF1aXJlKCcuL3RhYmxlcy9nYmstYWRkZWQuanNvbicpKSB9LFxuICAgICAgICBnYjE4MDMwOiBmdW5jdGlvbigpIHsgcmV0dXJuIHJlcXVpcmUoJy4vdGFibGVzL2diMTgwMzAtcmFuZ2VzLmpzb24nKSB9LFxuICAgICAgICBlbmNvZGVTa2lwVmFsczogWzB4ODBdLFxuICAgICAgICBlbmNvZGVBZGQ6IHsn4oKsJzogMHhBMkUzfSxcbiAgICB9LFxuXG4gICAgJ2NoaW5lc2UnOiAnZ2IxODAzMCcsXG5cblxuICAgIC8vID09IEtvcmVhbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBFVUMtS1IsIEtTX0NfNTYwMSBhbmQgS1MgWCAxMDAxIGFyZSBleGFjdGx5IHRoZSBzYW1lLlxuICAgICd3aW5kb3dzOTQ5JzogJ2NwOTQ5JyxcbiAgICAnbXM5NDknOiAnY3A5NDknLFxuICAgICc5NDknOiAnY3A5NDknLFxuICAgICdjcDk0OSc6IHtcbiAgICAgICAgdHlwZTogJ19kYmNzJyxcbiAgICAgICAgdGFibGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVxdWlyZSgnLi90YWJsZXMvY3A5NDkuanNvbicpIH0sXG4gICAgfSxcblxuICAgICdjc2V1Y2tyJzogJ2NwOTQ5JyxcbiAgICAnY3Nrc2M1NjAxMTk4Nyc6ICdjcDk0OScsXG4gICAgJ2V1Y2tyJzogJ2NwOTQ5JyxcbiAgICAnaXNvaXIxNDknOiAnY3A5NDknLFxuICAgICdrb3JlYW4nOiAnY3A5NDknLFxuICAgICdrc2M1NjAxMTk4Nyc6ICdjcDk0OScsXG4gICAgJ2tzYzU2MDExOTg5JzogJ2NwOTQ5JyxcbiAgICAna3NjNTYwMSc6ICdjcDk0OScsXG5cblxuICAgIC8vID09IEJpZzUvVGFpd2FuL0hvbmcgS29uZyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBUaGVyZSBhcmUgbG90cyBvZiB0YWJsZXMgZm9yIEJpZzUgYW5kIGNwOTUwLiBQbGVhc2Ugc2VlIHRoZSBmb2xsb3dpbmcgbGlua3MgZm9yIGhpc3Rvcnk6XG4gICAgLy8gaHR0cDovL21venR3Lm9yZy9kb2NzL2JpZzUvICBodHRwOi8vd3d3LmhhaWJsZS5kZS9icnVuby9jaGFyc2V0cy9jb252ZXJzaW9uLXRhYmxlcy9CaWc1Lmh0bWxcbiAgICAvLyBWYXJpYXRpb25zLCBpbiByb3VnaGx5IG51bWJlciBvZiBkZWZpbmVkIGNoYXJzOlxuICAgIC8vICAqIFdpbmRvd3MgQ1AgOTUwOiBNaWNyb3NvZnQgdmFyaWFudCBvZiBCaWc1LiBDYW5vbmljYWw6IGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL01BUFBJTkdTL1ZFTkRPUlMvTUlDU0ZUL1dJTkRPV1MvQ1A5NTAuVFhUXG4gICAgLy8gICogV2luZG93cyBDUCA5NTE6IE1pY3Jvc29mdCB2YXJpYW50IG9mIEJpZzUtSEtTQ1MtMjAwMS4gU2VlbXMgdG8gYmUgbmV2ZXIgcHVibGljLiBodHRwOi8vbWUuYWJlbGNoZXVuZy5vcmcvYXJ0aWNsZXMvcmVzZWFyY2gvd2hhdC1pcy1jcDk1MS9cbiAgICAvLyAgKiBCaWc1LTIwMDMgKFRhaXdhbiBzdGFuZGFyZCkgYWxtb3N0IHN1cGVyc2V0IG9mIGNwOTUwLlxuICAgIC8vICAqIFVuaWNvZGUtYXQtb24gKFVBTykgLyBNb3ppbGxhIDEuOC4gRmFsbGluZyBvdXQgb2YgdXNlIG9uIHRoZSBXZWIuIE5vdCBzdXBwb3J0ZWQgYnkgb3RoZXIgYnJvd3NlcnMuXG4gICAgLy8gICogQmlnNS1IS1NDUyAoLTIwMDEsIC0yMDA0LCAtMjAwOCkuIEhvbmcgS29uZyBzdGFuZGFyZC4gXG4gICAgLy8gICAgbWFueSB1bmljb2RlIGNvZGUgcG9pbnRzIG1vdmVkIGZyb20gUFVBIHRvIFN1cHBsZW1lbnRhcnkgcGxhbmUgKFUrMlhYWFgpIG92ZXIgdGhlIHllYXJzLlxuICAgIC8vICAgIFBsdXMsIGl0IGhhcyA0IGNvbWJpbmluZyBzZXF1ZW5jZXMuXG4gICAgLy8gICAgU2VlbXMgdGhhdCBNb3ppbGxhIHJlZnVzZWQgdG8gc3VwcG9ydCBpdCBmb3IgMTAgeXJzLiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI0MzEgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzEwMjk5XG4gICAgLy8gICAgYmVjYXVzZSBiaWc1LWhrc2NzIGlzIHRoZSBvbmx5IGVuY29kaW5nIHRvIGluY2x1ZGUgYXN0cmFsIGNoYXJhY3RlcnMgaW4gbm9uLWFsZ29yaXRobWljIHdheS5cbiAgICAvLyAgICBJbXBsZW1lbnRhdGlvbnMgYXJlIG5vdCBjb25zaXN0ZW50IHdpdGhpbiBicm93c2Vyczsgc29tZXRpbWVzIGxhYmVsZWQgYXMganVzdCBiaWc1LlxuICAgIC8vICAgIE1TIEludGVybmV0IEV4cGxvcmVyIHN3aXRjaGVzIGZyb20gYmlnNSB0byBiaWc1LWhrc2NzIHdoZW4gYSBwYXRjaCBhcHBsaWVkLlxuICAgIC8vICAgIEdyZWF0IGRpc2N1c3Npb24gJiByZWNhcCBvZiB3aGF0J3MgZ29pbmcgb24gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEyNDcwI2MzMVxuICAgIC8vICAgIEluIHRoZSBlbmNvZGVyLCBpdCBtaWdodCBtYWtlIHNlbnNlIHRvIHN1cHBvcnQgZW5jb2Rpbmcgb2xkIFBVQSBtYXBwaW5ncyB0byBCaWc1IGJ5dGVzIHNlcS1zLlxuICAgIC8vICAgIE9mZmljaWFsIHNwZWM6IGh0dHA6Ly93d3cub2djaW8uZ292LmhrL2VuL2J1c2luZXNzL3RlY2hfcHJvbW90aW9uL2NjbGkvdGVybXMvZG9jLzIwMDNjbXBfMjAwOC50eHRcbiAgICAvLyAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm9nY2lvLmdvdi5oay90Yy9idXNpbmVzcy90ZWNoX3Byb21vdGlvbi9jY2xpL3Rlcm1zL2RvYy9oa3Njcy0yMDA4LWJpZzUtaXNvLnR4dFxuICAgIC8vIFxuICAgIC8vIEN1cnJlbnQgdW5kZXJzdGFuZGluZyBvZiBob3cgdG8gZGVhbCB3aXRoIEJpZzUoLUhLU0NTKSBpcyBpbiB0aGUgRW5jb2RpbmcgU3RhbmRhcmQsIGh0dHA6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2JpZzUtZW5jb2RlclxuICAgIC8vIFVuaWNvZGUgbWFwcGluZyAoaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvTUFQUElOR1MvT0JTT0xFVEUvRUFTVEFTSUEvT1RIRVIvQklHNS5UWFQpIGlzIHNhaWQgdG8gYmUgd3JvbmcuXG5cbiAgICAnd2luZG93czk1MCc6ICdjcDk1MCcsXG4gICAgJ21zOTUwJzogJ2NwOTUwJyxcbiAgICAnOTUwJzogJ2NwOTUwJyxcbiAgICAnY3A5NTAnOiB7XG4gICAgICAgIHR5cGU6ICdfZGJjcycsXG4gICAgICAgIHRhYmxlOiBmdW5jdGlvbigpIHsgcmV0dXJuIHJlcXVpcmUoJy4vdGFibGVzL2NwOTUwLmpzb24nKSB9LFxuICAgIH0sXG5cbiAgICAvLyBCaWc1IGhhcyBtYW55IHZhcmlhdGlvbnMgYW5kIGlzIGFuIGV4dGVuc2lvbiBvZiBjcDk1MC4gV2UgdXNlIEVuY29kaW5nIFN0YW5kYXJkJ3MgYXMgYSBjb25zZW5zdXMuXG4gICAgJ2JpZzUnOiAnYmlnNWhrc2NzJyxcbiAgICAnYmlnNWhrc2NzJzoge1xuICAgICAgICB0eXBlOiAnX2RiY3MnLFxuICAgICAgICB0YWJsZTogZnVuY3Rpb24oKSB7IHJldHVybiByZXF1aXJlKCcuL3RhYmxlcy9jcDk1MC5qc29uJykuY29uY2F0KHJlcXVpcmUoJy4vdGFibGVzL2JpZzUtYWRkZWQuanNvbicpKSB9LFxuICAgICAgICBlbmNvZGVTa2lwVmFsczogWzB4YTJjY10sXG4gICAgfSxcblxuICAgICdjbmJpZzUnOiAnYmlnNWhrc2NzJyxcbiAgICAnY3NiaWc1JzogJ2JpZzVoa3NjcycsXG4gICAgJ3h4YmlnNSc6ICdiaWc1aGtzY3MnLFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vLyBVcGRhdGUgdGhpcyBhcnJheSBpZiB5b3UgYWRkL3JlbmFtZS9yZW1vdmUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuXG4vLyBXZSBzdXBwb3J0IEJyb3dzZXJpZnkgYnkgc2tpcHBpbmcgYXV0b21hdGljIG1vZHVsZSBkaXNjb3ZlcnkgYW5kIHJlcXVpcmluZyBtb2R1bGVzIGRpcmVjdGx5LlxudmFyIG1vZHVsZXMgPSBbXG4gICAgcmVxdWlyZShcIi4vaW50ZXJuYWxcIiksXG4gICAgcmVxdWlyZShcIi4vdXRmMTZcIiksXG4gICAgcmVxdWlyZShcIi4vdXRmN1wiKSxcbiAgICByZXF1aXJlKFwiLi9zYmNzLWNvZGVjXCIpLFxuICAgIHJlcXVpcmUoXCIuL3NiY3MtZGF0YVwiKSxcbiAgICByZXF1aXJlKFwiLi9zYmNzLWRhdGEtZ2VuZXJhdGVkXCIpLFxuICAgIHJlcXVpcmUoXCIuL2RiY3MtY29kZWNcIiksXG4gICAgcmVxdWlyZShcIi4vZGJjcy1kYXRhXCIpLFxuXTtcblxuLy8gUHV0IGFsbCBlbmNvZGluZy9hbGlhcy9jb2RlYyBkZWZpbml0aW9ucyB0byBzaW5nbGUgb2JqZWN0IGFuZCBleHBvcnQgaXQuIFxuZm9yICh2YXIgaSA9IDA7IGkgPCBtb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG1vZHVsZSA9IG1vZHVsZXNbaV07XG4gICAgZm9yICh2YXIgZW5jIGluIG1vZHVsZSlcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2R1bGUsIGVuYykpXG4gICAgICAgICAgICBleHBvcnRzW2VuY10gPSBtb2R1bGVbZW5jXTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZShcImJ1ZmZlclwiKS5CdWZmZXIsXG4gICAgVHJhbnNmb3JtID0gcmVxdWlyZShcInN0cmVhbVwiKS5UcmFuc2Zvcm07XG5cblxuLy8gPT0gRXhwb3J0cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaWNvbnYpIHtcbiAgICBcbiAgICAvLyBBZGRpdGlvbmFsIFB1YmxpYyBBUEkuXG4gICAgaWNvbnYuZW5jb2RlU3RyZWFtID0gZnVuY3Rpb24gZW5jb2RlU3RyZWFtKGVuY29kaW5nLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgSWNvbnZMaXRlRW5jb2RlclN0cmVhbShpY29udi5nZXRFbmNvZGVyKGVuY29kaW5nLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWNvbnYuZGVjb2RlU3RyZWFtID0gZnVuY3Rpb24gZGVjb2RlU3RyZWFtKGVuY29kaW5nLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgSWNvbnZMaXRlRGVjb2RlclN0cmVhbShpY29udi5nZXREZWNvZGVyKGVuY29kaW5nLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWNvbnYuc3VwcG9ydHNTdHJlYW1zID0gdHJ1ZTtcblxuXG4gICAgLy8gTm90IHB1Ymxpc2hlZCB5ZXQuXG4gICAgaWNvbnYuSWNvbnZMaXRlRW5jb2RlclN0cmVhbSA9IEljb252TGl0ZUVuY29kZXJTdHJlYW07XG4gICAgaWNvbnYuSWNvbnZMaXRlRGVjb2RlclN0cmVhbSA9IEljb252TGl0ZURlY29kZXJTdHJlYW07XG4gICAgaWNvbnYuX2NvbGxlY3QgPSBJY29udkxpdGVEZWNvZGVyU3RyZWFtLnByb3RvdHlwZS5jb2xsZWN0O1xufTtcblxuXG4vLyA9PSBFbmNvZGVyIHN0cmVhbSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5mdW5jdGlvbiBJY29udkxpdGVFbmNvZGVyU3RyZWFtKGNvbnYsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmNvbnYgPSBjb252O1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIG9wdGlvbnMuZGVjb2RlU3RyaW5ncyA9IGZhbHNlOyAvLyBXZSBhY2NlcHQgb25seSBzdHJpbmdzLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRlY29kZSB0aGVtLlxuICAgIFRyYW5zZm9ybS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuXG5JY29udkxpdGVFbmNvZGVyU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNmb3JtLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBJY29udkxpdGVFbmNvZGVyU3RyZWFtIH1cbn0pO1xuXG5JY29udkxpdGVFbmNvZGVyU3RyZWFtLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nLCBkb25lKSB7XG4gICAgaWYgKHR5cGVvZiBjaHVuayAhPSAnc3RyaW5nJylcbiAgICAgICAgcmV0dXJuIGRvbmUobmV3IEVycm9yKFwiSWNvbnYgZW5jb2Rpbmcgc3RyZWFtIG5lZWRzIHN0cmluZ3MgYXMgaXRzIGlucHV0LlwiKSk7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuY29udi53cml0ZShjaHVuayk7XG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmxlbmd0aCkgdGhpcy5wdXNoKHJlcyk7XG4gICAgICAgIGRvbmUoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZG9uZShlKTtcbiAgICB9XG59XG5cbkljb252TGl0ZUVuY29kZXJTdHJlYW0ucHJvdG90eXBlLl9mbHVzaCA9IGZ1bmN0aW9uKGRvbmUpIHtcbiAgICB0cnkge1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5jb252LmVuZCgpO1xuICAgICAgICBpZiAocmVzICYmIHJlcy5sZW5ndGgpIHRoaXMucHVzaChyZXMpO1xuICAgICAgICBkb25lKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGRvbmUoZSk7XG4gICAgfVxufVxuXG5JY29udkxpdGVFbmNvZGVyU3RyZWFtLnByb3RvdHlwZS5jb2xsZWN0ID0gZnVuY3Rpb24oY2IpIHtcbiAgICB2YXIgY2h1bmtzID0gW107XG4gICAgdGhpcy5vbignZXJyb3InLCBjYik7XG4gICAgdGhpcy5vbignZGF0YScsIGZ1bmN0aW9uKGNodW5rKSB7IGNodW5rcy5wdXNoKGNodW5rKTsgfSk7XG4gICAgdGhpcy5vbignZW5kJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGNiKG51bGwsIEJ1ZmZlci5jb25jYXQoY2h1bmtzKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblxuLy8gPT0gRGVjb2RlciBzdHJlYW0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuZnVuY3Rpb24gSWNvbnZMaXRlRGVjb2RlclN0cmVhbShjb252LCBvcHRpb25zKSB7XG4gICAgdGhpcy5jb252ID0gY29udjtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBvcHRpb25zLmVuY29kaW5nID0gdGhpcy5lbmNvZGluZyA9ICd1dGY4JzsgLy8gV2Ugb3V0cHV0IHN0cmluZ3MuXG4gICAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucyk7XG59XG5cbkljb252TGl0ZURlY29kZXJTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUcmFuc2Zvcm0ucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHsgdmFsdWU6IEljb252TGl0ZURlY29kZXJTdHJlYW0gfVxufSk7XG5cbkljb252TGl0ZURlY29kZXJTdHJlYW0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGRvbmUpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpXG4gICAgICAgIHJldHVybiBkb25lKG5ldyBFcnJvcihcIkljb252IGRlY29kaW5nIHN0cmVhbSBuZWVkcyBidWZmZXJzIGFzIGl0cyBpbnB1dC5cIikpO1xuICAgIHRyeSB7XG4gICAgICAgIHZhciByZXMgPSB0aGlzLmNvbnYud3JpdGUoY2h1bmspO1xuICAgICAgICBpZiAocmVzICYmIHJlcy5sZW5ndGgpIHRoaXMucHVzaChyZXMsIHRoaXMuZW5jb2RpbmcpO1xuICAgICAgICBkb25lKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGRvbmUoZSk7XG4gICAgfVxufVxuXG5JY29udkxpdGVEZWNvZGVyU3RyZWFtLnByb3RvdHlwZS5fZmx1c2ggPSBmdW5jdGlvbihkb25lKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuY29udi5lbmQoKTtcbiAgICAgICAgaWYgKHJlcyAmJiByZXMubGVuZ3RoKSB0aGlzLnB1c2gocmVzLCB0aGlzLmVuY29kaW5nKTsgICAgICAgICAgICAgICAgXG4gICAgICAgIGRvbmUoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZG9uZShlKTtcbiAgICB9XG59XG5cbkljb252TGl0ZURlY29kZXJTdHJlYW0ucHJvdG90eXBlLmNvbGxlY3QgPSBmdW5jdGlvbihjYikge1xuICAgIHZhciByZXMgPSAnJztcbiAgICB0aGlzLm9uKCdlcnJvcicsIGNiKTtcbiAgICB0aGlzLm9uKCdkYXRhJywgZnVuY3Rpb24oY2h1bmspIHsgcmVzICs9IGNodW5rOyB9KTtcbiAgICB0aGlzLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgY2IobnVsbCwgcmVzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgQnVmZmVyID0gcmVxdWlyZShcImJ1ZmZlclwiKS5CdWZmZXI7XG4vLyBOb3RlOiBub3QgcG9seWZpbGxlZCB3aXRoIHNhZmVyLWJ1ZmZlciBvbiBhIHB1cnBvc2UsIGFzIG92ZXJyaWRlcyBCdWZmZXJcblxuLy8gPT0gRXh0ZW5kIE5vZGUgcHJpbWl0aXZlcyB0byB1c2UgaWNvbnYtbGl0ZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaWNvbnYpIHtcbiAgICB2YXIgb3JpZ2luYWwgPSB1bmRlZmluZWQ7IC8vIFBsYWNlIHRvIGtlZXAgb3JpZ2luYWwgbWV0aG9kcy5cblxuICAgIC8vIE5vZGUgYXV0aG9ycyByZXdyb3RlIEJ1ZmZlciBpbnRlcm5hbHMgdG8gbWFrZSBpdCBjb21wYXRpYmxlIHdpdGhcbiAgICAvLyBVaW50OEFycmF5IGFuZCB3ZSBjYW5ub3QgcGF0Y2gga2V5IGZ1bmN0aW9ucyBzaW5jZSB0aGVuLlxuICAgIC8vIE5vdGU6IHRoaXMgZG9lcyB1c2Ugb2xkZXIgQnVmZmVyIEFQSSBvbiBhIHB1cnBvc2VcbiAgICBpY29udi5zdXBwb3J0c05vZGVFbmNvZGluZ3NFeHRlbnNpb24gPSAhKEJ1ZmZlci5mcm9tIHx8IG5ldyBCdWZmZXIoMCkgaW5zdGFuY2VvZiBVaW50OEFycmF5KTtcblxuICAgIGljb252LmV4dGVuZE5vZGVFbmNvZGluZ3MgPSBmdW5jdGlvbiBleHRlbmROb2RlRW5jb2RpbmdzKCkge1xuICAgICAgICBpZiAob3JpZ2luYWwpIHJldHVybjtcbiAgICAgICAgb3JpZ2luYWwgPSB7fTtcblxuICAgICAgICBpZiAoIWljb252LnN1cHBvcnRzTm9kZUVuY29kaW5nc0V4dGVuc2lvbikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkFDVElPTiBORUVERUQ6IHJlcXVpcmUoJ2ljb252LWxpdGUnKS5leHRlbmROb2RlRW5jb2RpbmdzKCkgaXMgbm90IHN1cHBvcnRlZCBpbiB5b3VyIHZlcnNpb24gb2YgTm9kZVwiKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJTZWUgbW9yZSBpbmZvIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9hc2h0dWNoa2luL2ljb252LWxpdGUvd2lraS9Ob2RlLXY0LWNvbXBhdGliaWxpdHlcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbm9kZU5hdGl2ZUVuY29kaW5ncyA9IHtcbiAgICAgICAgICAgICdoZXgnOiB0cnVlLCAndXRmOCc6IHRydWUsICd1dGYtOCc6IHRydWUsICdhc2NpaSc6IHRydWUsICdiaW5hcnknOiB0cnVlLCBcbiAgICAgICAgICAgICdiYXNlNjQnOiB0cnVlLCAndWNzMic6IHRydWUsICd1Y3MtMic6IHRydWUsICd1dGYxNmxlJzogdHJ1ZSwgJ3V0Zi0xNmxlJzogdHJ1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICBCdWZmZXIuaXNOYXRpdmVFbmNvZGluZyA9IGZ1bmN0aW9uKGVuYykge1xuICAgICAgICAgICAgcmV0dXJuIGVuYyAmJiBub2RlTmF0aXZlRW5jb2RpbmdzW2VuYy50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tIFNsb3dCdWZmZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgdmFyIFNsb3dCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5TbG93QnVmZmVyO1xuXG4gICAgICAgIG9yaWdpbmFsLlNsb3dCdWZmZXJUb1N0cmluZyA9IFNsb3dCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nO1xuICAgICAgICBTbG93QnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZyB8fCAndXRmOCcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIC8vIFVzZSBuYXRpdmUgY29udmVyc2lvbiB3aGVuIHBvc3NpYmxlXG4gICAgICAgICAgICBpZiAoQnVmZmVyLmlzTmF0aXZlRW5jb2RpbmcoZW5jb2RpbmcpKVxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5TbG93QnVmZmVyVG9TdHJpbmcuY2FsbCh0aGlzLCBlbmNvZGluZywgc3RhcnQsIGVuZCk7XG5cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgdXNlIG91ciBkZWNvZGluZyBtZXRob2QuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0YXJ0ID09ICd1bmRlZmluZWQnKSBzdGFydCA9IDA7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVuZCA9PSAndW5kZWZpbmVkJykgZW5kID0gdGhpcy5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gaWNvbnYuZGVjb2RlKHRoaXMuc2xpY2Uoc3RhcnQsIGVuZCksIGVuY29kaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9yaWdpbmFsLlNsb3dCdWZmZXJXcml0ZSA9IFNsb3dCdWZmZXIucHJvdG90eXBlLndyaXRlO1xuICAgICAgICBTbG93QnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gICAgICAgICAgICAvLyBTdXBwb3J0IGJvdGggKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKVxuICAgICAgICAgICAgLy8gYW5kIHRoZSBsZWdhY3kgKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldCwgbGVuZ3RoKVxuICAgICAgICAgICAgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBsZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgeyAgLy8gbGVnYWN5XG4gICAgICAgICAgICAgICAgdmFyIHN3YXAgPSBlbmNvZGluZztcbiAgICAgICAgICAgICAgICBlbmNvZGluZyA9IG9mZnNldDtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBsZW5ndGg7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gc3dhcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb2Zmc2V0ID0gK29mZnNldCB8fCAwO1xuICAgICAgICAgICAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0O1xuICAgICAgICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBsZW5ndGggPSByZW1haW5pbmc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9ICtsZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSByZW1haW5pbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcgfHwgJ3V0ZjgnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgICAvLyBVc2UgbmF0aXZlIGNvbnZlcnNpb24gd2hlbiBwb3NzaWJsZVxuICAgICAgICAgICAgaWYgKEJ1ZmZlci5pc05hdGl2ZUVuY29kaW5nKGVuY29kaW5nKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuU2xvd0J1ZmZlcldyaXRlLmNhbGwodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpO1xuXG4gICAgICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2F0dGVtcHQgdG8gd3JpdGUgYmV5b25kIGJ1ZmZlciBib3VuZHMnKTtcblxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB1c2Ugb3VyIGVuY29kaW5nIG1ldGhvZC5cbiAgICAgICAgICAgIHZhciBidWYgPSBpY29udi5lbmNvZGUoc3RyaW5nLCBlbmNvZGluZyk7XG4gICAgICAgICAgICBpZiAoYnVmLmxlbmd0aCA8IGxlbmd0aCkgbGVuZ3RoID0gYnVmLmxlbmd0aDtcbiAgICAgICAgICAgIGJ1Zi5jb3B5KHRoaXMsIG9mZnNldCwgMCwgbGVuZ3RoKTtcbiAgICAgICAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAtLSBCdWZmZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAgICAgb3JpZ2luYWwuQnVmZmVySXNFbmNvZGluZyA9IEJ1ZmZlci5pc0VuY29kaW5nO1xuICAgICAgICBCdWZmZXIuaXNFbmNvZGluZyA9IGZ1bmN0aW9uKGVuY29kaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gQnVmZmVyLmlzTmF0aXZlRW5jb2RpbmcoZW5jb2RpbmcpIHx8IGljb252LmVuY29kaW5nRXhpc3RzKGVuY29kaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9yaWdpbmFsLkJ1ZmZlckJ5dGVMZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aDtcbiAgICAgICAgQnVmZmVyLmJ5dGVMZW5ndGggPSBTbG93QnVmZmVyLmJ5dGVMZW5ndGggPSBmdW5jdGlvbihzdHIsIGVuY29kaW5nKSB7XG4gICAgICAgICAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZyB8fCAndXRmOCcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIC8vIFVzZSBuYXRpdmUgY29udmVyc2lvbiB3aGVuIHBvc3NpYmxlXG4gICAgICAgICAgICBpZiAoQnVmZmVyLmlzTmF0aXZlRW5jb2RpbmcoZW5jb2RpbmcpKVxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5CdWZmZXJCeXRlTGVuZ3RoLmNhbGwodGhpcywgc3RyLCBlbmNvZGluZyk7XG5cbiAgICAgICAgICAgIC8vIFNsb3csIEkga25vdywgYnV0IHdlIGRvbid0IGhhdmUgYSBiZXR0ZXIgd2F5IHlldC5cbiAgICAgICAgICAgIHJldHVybiBpY29udi5lbmNvZGUoc3RyLCBlbmNvZGluZykubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgb3JpZ2luYWwuQnVmZmVyVG9TdHJpbmcgPSBCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nO1xuICAgICAgICBCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nIHx8ICd1dGY4JykudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgLy8gVXNlIG5hdGl2ZSBjb252ZXJzaW9uIHdoZW4gcG9zc2libGVcbiAgICAgICAgICAgIGlmIChCdWZmZXIuaXNOYXRpdmVFbmNvZGluZyhlbmNvZGluZykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLkJ1ZmZlclRvU3RyaW5nLmNhbGwodGhpcywgZW5jb2RpbmcsIHN0YXJ0LCBlbmQpO1xuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UsIHVzZSBvdXIgZGVjb2RpbmcgbWV0aG9kLlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdGFydCA9PSAndW5kZWZpbmVkJykgc3RhcnQgPSAwO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlbmQgPT0gJ3VuZGVmaW5lZCcpIGVuZCA9IHRoaXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGljb252LmRlY29kZSh0aGlzLnNsaWNlKHN0YXJ0LCBlbmQpLCBlbmNvZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBvcmlnaW5hbC5CdWZmZXJXcml0ZSA9IEJ1ZmZlci5wcm90b3R5cGUud3JpdGU7XG4gICAgICAgIEJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAgICAgICAgICAgdmFyIF9vZmZzZXQgPSBvZmZzZXQsIF9sZW5ndGggPSBsZW5ndGgsIF9lbmNvZGluZyA9IGVuY29kaW5nO1xuICAgICAgICAgICAgLy8gU3VwcG9ydCBib3RoIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZylcbiAgICAgICAgICAgIC8vIGFuZCB0aGUgbGVnYWN5IChzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXQsIGxlbmd0aClcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShvZmZzZXQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nID0gbGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHsgIC8vIGxlZ2FjeVxuICAgICAgICAgICAgICAgIHZhciBzd2FwID0gZW5jb2Rpbmc7XG4gICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gbGVuZ3RoO1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHN3YXA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nIHx8ICd1dGY4JykudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgLy8gVXNlIG5hdGl2ZSBjb252ZXJzaW9uIHdoZW4gcG9zc2libGVcbiAgICAgICAgICAgIGlmIChCdWZmZXIuaXNOYXRpdmVFbmNvZGluZyhlbmNvZGluZykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLkJ1ZmZlcldyaXRlLmNhbGwodGhpcywgc3RyaW5nLCBfb2Zmc2V0LCBfbGVuZ3RoLCBfZW5jb2RpbmcpO1xuXG4gICAgICAgICAgICBvZmZzZXQgPSArb2Zmc2V0IHx8IDA7XG4gICAgICAgICAgICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXQ7XG4gICAgICAgICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHJlbWFpbmluZztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gK2xlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHJlbWFpbmluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignYXR0ZW1wdCB0byB3cml0ZSBiZXlvbmQgYnVmZmVyIGJvdW5kcycpO1xuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UsIHVzZSBvdXIgZW5jb2RpbmcgbWV0aG9kLlxuICAgICAgICAgICAgdmFyIGJ1ZiA9IGljb252LmVuY29kZShzdHJpbmcsIGVuY29kaW5nKTtcbiAgICAgICAgICAgIGlmIChidWYubGVuZ3RoIDwgbGVuZ3RoKSBsZW5ndGggPSBidWYubGVuZ3RoO1xuICAgICAgICAgICAgYnVmLmNvcHkodGhpcywgb2Zmc2V0LCAwLCBsZW5ndGgpO1xuICAgICAgICAgICAgcmV0dXJuIGxlbmd0aDtcblxuICAgICAgICAgICAgLy8gVE9ETzogU2V0IF9jaGFyc1dyaXR0ZW4uXG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIC0tIFJlYWRhYmxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgaWYgKGljb252LnN1cHBvcnRzU3RyZWFtcykge1xuICAgICAgICAgICAgdmFyIFJlYWRhYmxlID0gcmVxdWlyZSgnc3RyZWFtJykuUmVhZGFibGU7XG5cbiAgICAgICAgICAgIG9yaWdpbmFsLlJlYWRhYmxlU2V0RW5jb2RpbmcgPSBSZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2Rpbmc7XG4gICAgICAgICAgICBSZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2RpbmcgPSBmdW5jdGlvbiBzZXRFbmNvZGluZyhlbmMsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAvLyBVc2Ugb3VyIG93biBkZWNvZGVyLCBpdCBoYXMgdGhlIHNhbWUgaW50ZXJmYWNlLlxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbm5vdCB1c2Ugb3JpZ2luYWwgZnVuY3Rpb24gYXMgaXQgZG9lc24ndCBoYW5kbGUgQk9NLXMuXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyID0gaWNvbnYuZ2V0RGVjb2RlcihlbmMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2RpbmcgPSBlbmM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIFJlYWRhYmxlLnByb3RvdHlwZS5jb2xsZWN0ID0gaWNvbnYuX2NvbGxlY3Q7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgaWNvbnYtbGl0ZSBOb2RlIHByaW1pdGl2ZSBleHRlbnNpb25zLlxuICAgIGljb252LnVuZG9FeHRlbmROb2RlRW5jb2RpbmdzID0gZnVuY3Rpb24gdW5kb0V4dGVuZE5vZGVFbmNvZGluZ3MoKSB7XG4gICAgICAgIGlmICghaWNvbnYuc3VwcG9ydHNOb2RlRW5jb2RpbmdzRXh0ZW5zaW9uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIW9yaWdpbmFsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVxdWlyZSgnaWNvbnYtbGl0ZScpLnVuZG9FeHRlbmROb2RlRW5jb2RpbmdzKCk6IE5vdGhpbmcgdG8gdW5kbzsgZXh0ZW5kTm9kZUVuY29kaW5ncygpIGlzIG5vdCBjYWxsZWQuXCIpXG5cbiAgICAgICAgZGVsZXRlIEJ1ZmZlci5pc05hdGl2ZUVuY29kaW5nO1xuXG4gICAgICAgIHZhciBTbG93QnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuU2xvd0J1ZmZlcjtcblxuICAgICAgICBTbG93QnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IG9yaWdpbmFsLlNsb3dCdWZmZXJUb1N0cmluZztcbiAgICAgICAgU2xvd0J1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBvcmlnaW5hbC5TbG93QnVmZmVyV3JpdGU7XG5cbiAgICAgICAgQnVmZmVyLmlzRW5jb2RpbmcgPSBvcmlnaW5hbC5CdWZmZXJJc0VuY29kaW5nO1xuICAgICAgICBCdWZmZXIuYnl0ZUxlbmd0aCA9IG9yaWdpbmFsLkJ1ZmZlckJ5dGVMZW5ndGg7XG4gICAgICAgIEJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBvcmlnaW5hbC5CdWZmZXJUb1N0cmluZztcbiAgICAgICAgQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IG9yaWdpbmFsLkJ1ZmZlcldyaXRlO1xuXG4gICAgICAgIGlmIChpY29udi5zdXBwb3J0c1N0cmVhbXMpIHtcbiAgICAgICAgICAgIHZhciBSZWFkYWJsZSA9IHJlcXVpcmUoJ3N0cmVhbScpLlJlYWRhYmxlO1xuXG4gICAgICAgICAgICBSZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2RpbmcgPSBvcmlnaW5hbC5SZWFkYWJsZVNldEVuY29kaW5nO1xuICAgICAgICAgICAgZGVsZXRlIFJlYWRhYmxlLnByb3RvdHlwZS5jb2xsZWN0O1xuICAgICAgICB9XG5cbiAgICAgICAgb3JpZ2luYWwgPSB1bmRlZmluZWQ7XG4gICAgfVxufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIFNvbWUgZW52aXJvbm1lbnRzIGRvbid0IGhhdmUgZ2xvYmFsIEJ1ZmZlciAoZS5nLiBSZWFjdCBOYXRpdmUpLlxuLy8gU29sdXRpb24gd291bGQgYmUgaW5zdGFsbGluZyBucG0gbW9kdWxlcyBcImJ1ZmZlclwiIGFuZCBcInN0cmVhbVwiIGV4cGxpY2l0bHkuXG52YXIgQnVmZmVyID0gcmVxdWlyZShcInNhZmVyLWJ1ZmZlclwiKS5CdWZmZXI7XG5cbnZhciBib21IYW5kbGluZyA9IHJlcXVpcmUoXCIuL2JvbS1oYW5kbGluZ1wiKSxcbiAgICBpY29udiA9IG1vZHVsZS5leHBvcnRzO1xuXG4vLyBBbGwgY29kZWNzIGFuZCBhbGlhc2VzIGFyZSBrZXB0IGhlcmUsIGtleWVkIGJ5IGVuY29kaW5nIG5hbWUvYWxpYXMuXG4vLyBUaGV5IGFyZSBsYXp5IGxvYWRlZCBpbiBgaWNvbnYuZ2V0Q29kZWNgIGZyb20gYGVuY29kaW5ncy9pbmRleC5qc2AuXG5pY29udi5lbmNvZGluZ3MgPSBudWxsO1xuXG4vLyBDaGFyYWN0ZXJzIGVtaXR0ZWQgaW4gY2FzZSBvZiBlcnJvci5cbmljb252LmRlZmF1bHRDaGFyVW5pY29kZSA9ICfvv70nO1xuaWNvbnYuZGVmYXVsdENoYXJTaW5nbGVCeXRlID0gJz8nO1xuXG4vLyBQdWJsaWMgQVBJLlxuaWNvbnYuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKHN0ciwgZW5jb2RpbmcsIG9wdGlvbnMpIHtcbiAgICBzdHIgPSBcIlwiICsgKHN0ciB8fCBcIlwiKTsgLy8gRW5zdXJlIHN0cmluZy5cblxuICAgIHZhciBlbmNvZGVyID0gaWNvbnYuZ2V0RW5jb2RlcihlbmNvZGluZywgb3B0aW9ucyk7XG5cbiAgICB2YXIgcmVzID0gZW5jb2Rlci53cml0ZShzdHIpO1xuICAgIHZhciB0cmFpbCA9IGVuY29kZXIuZW5kKCk7XG4gICAgXG4gICAgcmV0dXJuICh0cmFpbCAmJiB0cmFpbC5sZW5ndGggPiAwKSA/IEJ1ZmZlci5jb25jYXQoW3JlcywgdHJhaWxdKSA6IHJlcztcbn1cblxuaWNvbnYuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKGJ1ZiwgZW5jb2RpbmcsIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIGJ1ZiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKCFpY29udi5za2lwRGVjb2RlV2FybmluZykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignSWNvbnYtbGl0ZSB3YXJuaW5nOiBkZWNvZGUoKS1pbmcgc3RyaW5ncyBpcyBkZXByZWNhdGVkLiBSZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vYXNodHVjaGtpbi9pY29udi1saXRlL3dpa2kvVXNlLUJ1ZmZlcnMtd2hlbi1kZWNvZGluZycpO1xuICAgICAgICAgICAgaWNvbnYuc2tpcERlY29kZVdhcm5pbmcgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVmID0gQnVmZmVyLmZyb20oXCJcIiArIChidWYgfHwgXCJcIiksIFwiYmluYXJ5XCIpOyAvLyBFbnN1cmUgYnVmZmVyLlxuICAgIH1cblxuICAgIHZhciBkZWNvZGVyID0gaWNvbnYuZ2V0RGVjb2RlcihlbmNvZGluZywgb3B0aW9ucyk7XG5cbiAgICB2YXIgcmVzID0gZGVjb2Rlci53cml0ZShidWYpO1xuICAgIHZhciB0cmFpbCA9IGRlY29kZXIuZW5kKCk7XG5cbiAgICByZXR1cm4gdHJhaWwgPyAocmVzICsgdHJhaWwpIDogcmVzO1xufVxuXG5pY29udi5lbmNvZGluZ0V4aXN0cyA9IGZ1bmN0aW9uIGVuY29kaW5nRXhpc3RzKGVuYykge1xuICAgIHRyeSB7XG4gICAgICAgIGljb252LmdldENvZGVjKGVuYyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuLy8gTGVnYWN5IGFsaWFzZXMgdG8gY29udmVydCBmdW5jdGlvbnNcbmljb252LnRvRW5jb2RpbmcgPSBpY29udi5lbmNvZGU7XG5pY29udi5mcm9tRW5jb2RpbmcgPSBpY29udi5kZWNvZGU7XG5cbi8vIFNlYXJjaCBmb3IgYSBjb2RlYyBpbiBpY29udi5lbmNvZGluZ3MuIENhY2hlIGNvZGVjIGRhdGEgaW4gaWNvbnYuX2NvZGVjRGF0YUNhY2hlLlxuaWNvbnYuX2NvZGVjRGF0YUNhY2hlID0ge307XG5pY29udi5nZXRDb2RlYyA9IGZ1bmN0aW9uIGdldENvZGVjKGVuY29kaW5nKSB7XG4gICAgaWYgKCFpY29udi5lbmNvZGluZ3MpXG4gICAgICAgIGljb252LmVuY29kaW5ncyA9IHJlcXVpcmUoXCIuLi9lbmNvZGluZ3NcIik7IC8vIExhenkgbG9hZCBhbGwgZW5jb2RpbmcgZGVmaW5pdGlvbnMuXG4gICAgXG4gICAgLy8gQ2Fub25pY2FsaXplIGVuY29kaW5nIG5hbWU6IHN0cmlwIGFsbCBub24tYWxwaGFudW1lcmljIGNoYXJzIGFuZCBhcHBlbmRlZCB5ZWFyLlxuICAgIHZhciBlbmMgPSBpY29udi5fY2Fub25pY2FsaXplRW5jb2RpbmcoZW5jb2RpbmcpO1xuXG4gICAgLy8gVHJhdmVyc2UgaWNvbnYuZW5jb2RpbmdzIHRvIGZpbmQgYWN0dWFsIGNvZGVjLlxuICAgIHZhciBjb2RlY09wdGlvbnMgPSB7fTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgY29kZWMgPSBpY29udi5fY29kZWNEYXRhQ2FjaGVbZW5jXTtcbiAgICAgICAgaWYgKGNvZGVjKVxuICAgICAgICAgICAgcmV0dXJuIGNvZGVjO1xuXG4gICAgICAgIHZhciBjb2RlY0RlZiA9IGljb252LmVuY29kaW5nc1tlbmNdO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIGNvZGVjRGVmKSB7XG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6IC8vIERpcmVjdCBhbGlhcyB0byBvdGhlciBlbmNvZGluZy5cbiAgICAgICAgICAgICAgICBlbmMgPSBjb2RlY0RlZjtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOiAvLyBBbGlhcyB3aXRoIG9wdGlvbnMuIENhbiBiZSBsYXllcmVkLlxuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBjb2RlY0RlZilcbiAgICAgICAgICAgICAgICAgICAgY29kZWNPcHRpb25zW2tleV0gPSBjb2RlY0RlZltrZXldO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFjb2RlY09wdGlvbnMuZW5jb2RpbmdOYW1lKVxuICAgICAgICAgICAgICAgICAgICBjb2RlY09wdGlvbnMuZW5jb2RpbmdOYW1lID0gZW5jO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGVuYyA9IGNvZGVjRGVmLnR5cGU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOiAvLyBDb2RlYyBpdHNlbGYuXG4gICAgICAgICAgICAgICAgaWYgKCFjb2RlY09wdGlvbnMuZW5jb2RpbmdOYW1lKVxuICAgICAgICAgICAgICAgICAgICBjb2RlY09wdGlvbnMuZW5jb2RpbmdOYW1lID0gZW5jO1xuXG4gICAgICAgICAgICAgICAgLy8gVGhlIGNvZGVjIGZ1bmN0aW9uIG11c3QgbG9hZCBhbGwgdGFibGVzIGFuZCByZXR1cm4gb2JqZWN0IHdpdGggLmVuY29kZXIgYW5kIC5kZWNvZGVyIG1ldGhvZHMuXG4gICAgICAgICAgICAgICAgLy8gSXQnbGwgYmUgY2FsbGVkIG9ubHkgb25jZSAoZm9yIGVhY2ggZGlmZmVyZW50IG9wdGlvbnMgb2JqZWN0KS5cbiAgICAgICAgICAgICAgICBjb2RlYyA9IG5ldyBjb2RlY0RlZihjb2RlY09wdGlvbnMsIGljb252KTtcblxuICAgICAgICAgICAgICAgIGljb252Ll9jb2RlY0RhdGFDYWNoZVtjb2RlY09wdGlvbnMuZW5jb2RpbmdOYW1lXSA9IGNvZGVjOyAvLyBTYXZlIGl0IHRvIGJlIHJldXNlZCBsYXRlci5cbiAgICAgICAgICAgICAgICByZXR1cm4gY29kZWM7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW5jb2Rpbmcgbm90IHJlY29nbml6ZWQ6ICdcIiArIGVuY29kaW5nICsgXCInIChzZWFyY2hlZCBhczogJ1wiK2VuYytcIicpXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5pY29udi5fY2Fub25pY2FsaXplRW5jb2RpbmcgPSBmdW5jdGlvbihlbmNvZGluZykge1xuICAgIC8vIENhbm9uaWNhbGl6ZSBlbmNvZGluZyBuYW1lOiBzdHJpcCBhbGwgbm9uLWFscGhhbnVtZXJpYyBjaGFycyBhbmQgYXBwZW5kZWQgeWVhci5cbiAgICByZXR1cm4gKCcnK2VuY29kaW5nKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLzpcXGR7NH0kfFteMC05YS16XS9nLCBcIlwiKTtcbn1cblxuaWNvbnYuZ2V0RW5jb2RlciA9IGZ1bmN0aW9uIGdldEVuY29kZXIoZW5jb2RpbmcsIG9wdGlvbnMpIHtcbiAgICB2YXIgY29kZWMgPSBpY29udi5nZXRDb2RlYyhlbmNvZGluZyksXG4gICAgICAgIGVuY29kZXIgPSBuZXcgY29kZWMuZW5jb2RlcihvcHRpb25zLCBjb2RlYyk7XG5cbiAgICBpZiAoY29kZWMuYm9tQXdhcmUgJiYgb3B0aW9ucyAmJiBvcHRpb25zLmFkZEJPTSlcbiAgICAgICAgZW5jb2RlciA9IG5ldyBib21IYW5kbGluZy5QcmVwZW5kQk9NKGVuY29kZXIsIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGVuY29kZXI7XG59XG5cbmljb252LmdldERlY29kZXIgPSBmdW5jdGlvbiBnZXREZWNvZGVyKGVuY29kaW5nLCBvcHRpb25zKSB7XG4gICAgdmFyIGNvZGVjID0gaWNvbnYuZ2V0Q29kZWMoZW5jb2RpbmcpLFxuICAgICAgICBkZWNvZGVyID0gbmV3IGNvZGVjLmRlY29kZXIob3B0aW9ucywgY29kZWMpO1xuXG4gICAgaWYgKGNvZGVjLmJvbUF3YXJlICYmICEob3B0aW9ucyAmJiBvcHRpb25zLnN0cmlwQk9NID09PSBmYWxzZSkpXG4gICAgICAgIGRlY29kZXIgPSBuZXcgYm9tSGFuZGxpbmcuU3RyaXBCT00oZGVjb2Rlciwgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4gZGVjb2Rlcjtcbn1cblxuXG4vLyBMb2FkIGV4dGVuc2lvbnMgaW4gTm9kZS4gQWxsIG9mIHRoZW0gYXJlIG9taXR0ZWQgaW4gQnJvd3NlcmlmeSBidWlsZCB2aWEgJ2Jyb3dzZXInIGZpZWxkIGluIHBhY2thZ2UuanNvbi5cbnZhciBub2RlVmVyID0gdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MudmVyc2lvbnMgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlO1xuaWYgKG5vZGVWZXIpIHtcblxuICAgIC8vIExvYWQgc3RyZWFtaW5nIHN1cHBvcnQgaW4gTm9kZSB2MC4xMCtcbiAgICB2YXIgbm9kZVZlckFyciA9IG5vZGVWZXIuc3BsaXQoXCIuXCIpLm1hcChOdW1iZXIpO1xuICAgIGlmIChub2RlVmVyQXJyWzBdID4gMCB8fCBub2RlVmVyQXJyWzFdID49IDEwKSB7XG4gICAgICAgIHJlcXVpcmUoXCIuL3N0cmVhbXNcIikoaWNvbnYpO1xuICAgIH1cblxuICAgIC8vIExvYWQgTm9kZSBwcmltaXRpdmUgZXh0ZW5zaW9ucy5cbiAgICByZXF1aXJlKFwiLi9leHRlbmQtbm9kZVwiKShpY29udik7XG59XG5cbmlmIChcIsSAXCIgIT0gXCJcXHUwMTAwXCIpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiaWNvbnYtbGl0ZSB3YXJuaW5nOiBqYXZhc2NyaXB0IGZpbGVzIHVzZSBlbmNvZGluZyBkaWZmZXJlbnQgZnJvbSB1dGYtOC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2h0dWNoa2luL2ljb252LWxpdGUvd2lraS9KYXZhc2NyaXB0LXNvdXJjZS1maWxlLWVuY29kaW5ncyBmb3IgbW9yZSBpbmZvLlwiKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc1dpbmRvd3MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xudmFyIHRyYWlsaW5nU2xhc2hSZSA9IGlzV2luZG93cyA/IC9bXjpdXFxcXCQvIDogLy5cXC8kLztcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvM2U3YTE0MzgxNDk3YTNiNzNkZGE2OGQwNWI1MTMwNTYzY2RhYjQyMC9saWIvb3MuanMjTDI1LUw0M1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBwYXRoO1xuXG5cdGlmIChpc1dpbmRvd3MpIHtcblx0XHRwYXRoID0gcHJvY2Vzcy5lbnYuVEVNUCB8fFxuXHRcdFx0cHJvY2Vzcy5lbnYuVE1QIHx8XG5cdFx0XHQocHJvY2Vzcy5lbnYuU3lzdGVtUm9vdCB8fCBwcm9jZXNzLmVudi53aW5kaXIpICsgJ1xcXFx0ZW1wJztcblx0fSBlbHNlIHtcblx0XHRwYXRoID0gcHJvY2Vzcy5lbnYuVE1QRElSIHx8XG5cdFx0XHRwcm9jZXNzLmVudi5UTVAgfHxcblx0XHRcdHByb2Nlc3MuZW52LlRFTVAgfHxcblx0XHRcdCcvdG1wJztcblx0fVxuXG5cdGlmICh0cmFpbGluZ1NsYXNoUmUudGVzdChwYXRoKSkge1xuXHRcdHBhdGggPSBwYXRoLnNsaWNlKDAsIC0xKTtcblx0fVxuXG5cdHJldHVybiBwYXRoO1xufTtcbiIsIi8qIVxuICogVG1wXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTcgS0FSQVNaSSBJc3R2YW4gPGdpdGh1YkBzcGFtLnJhc3ppLmh1PlxuICpcbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5jb25zdCBvc1RtcERpciA9IHJlcXVpcmUoJ29zLXRtcGRpcicpO1xuY29uc3QgX2MgPSBwcm9jZXNzLmJpbmRpbmcoJ2NvbnN0YW50cycpO1xuXG4vKlxuICogVGhlIHdvcmtpbmcgaW5uZXIgdmFyaWFibGVzLlxuICovXG5jb25zdFxuICAvKipcbiAgICogVGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICB0bXBEaXIgPSBvc1RtcERpcigpLFxuXG4gIC8vIHRoZSByYW5kb20gY2hhcmFjdGVycyB0byBjaG9vc2UgZnJvbVxuICBSQU5ET01fQ0hBUlMgPSAnMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonLFxuXG4gIFRFTVBMQVRFX1BBVFRFUk4gPSAvWFhYWFhYLyxcblxuICBERUZBVUxUX1RSSUVTID0gMyxcblxuICBDUkVBVEVfRkxBR1MgPSAoX2MuT19DUkVBVCB8fCBfYy5mcy5PX0NSRUFUKSB8IChfYy5PX0VYQ0wgfHwgX2MuZnMuT19FWENMKSB8IChfYy5PX1JEV1IgfHwgX2MuZnMuT19SRFdSKSxcblxuICBFQkFERiA9IF9jLkVCQURGIHx8IF9jLm9zLmVycm5vLkVCQURGLFxuICBFTk9FTlQgPSBfYy5FTk9FTlQgfHwgX2Mub3MuZXJybm8uRU5PRU5ULFxuXG4gIERJUl9NT0RFID0gNDQ4IC8qIDBvNzAwICovLFxuICBGSUxFX01PREUgPSAzODQgLyogMG82MDAgKi8sXG5cbiAgLy8gdGhpcyB3aWxsIGhvbGQgdGhlIG9iamVjdHMgbmVlZCB0byBiZSByZW1vdmVkIG9uIGV4aXRcbiAgX3JlbW92ZU9iamVjdHMgPSBbXTtcblxudmFyXG4gIF9ncmFjZWZ1bENsZWFudXAgPSBmYWxzZSxcbiAgX3VuY2F1Z2h0RXhjZXB0aW9uID0gZmFsc2U7XG5cbi8qKlxuICogUmFuZG9tIG5hbWUgZ2VuZXJhdG9yIGJhc2VkIG9uIGNyeXB0by5cbiAqIEFkYXB0ZWQgZnJvbSBodHRwOi8vYmxvZy50b21wYXdsYWsub3JnL2hvdy10by1nZW5lcmF0ZS1yYW5kb20tdmFsdWVzLW5vZGVqcy1qYXZhc2NyaXB0XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGhvd01hbnlcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBnZW5lcmF0ZWQgcmFuZG9tIG5hbWVcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9yYW5kb21DaGFycyhob3dNYW55KSB7XG4gIHZhclxuICAgIHZhbHVlID0gW10sXG4gICAgcm5kID0gbnVsbDtcblxuICAvLyBtYWtlIHN1cmUgdGhhdCB3ZSBkbyBub3QgZmFpbCBiZWNhdXNlIHdlIHJhbiBvdXQgb2YgZW50cm9weVxuICB0cnkge1xuICAgIHJuZCA9IGNyeXB0by5yYW5kb21CeXRlcyhob3dNYW55KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJuZCA9IGNyeXB0by5wc2V1ZG9SYW5kb21CeXRlcyhob3dNYW55KTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaG93TWFueTsgaSsrKSB7XG4gICAgdmFsdWUucHVzaChSQU5ET01fQ0hBUlNbcm5kW2ldICUgUkFORE9NX0NIQVJTLmxlbmd0aF0pO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlLmpvaW4oJycpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBgb2JqYCBwYXJhbWV0ZXIgaXMgZGVmaW5lZCBvciBub3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIG9iamVjdCBpcyB1bmRlZmluZWRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9pc1VuZGVmaW5lZChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnO1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgZnVuY3Rpb24gYXJndW1lbnRzLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaGVscHMgdG8gaGF2ZSBvcHRpb25hbCBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIHsoT3B0aW9uc3xGdW5jdGlvbil9IG9wdGlvbnNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7QXJyYXl9IHBhcnNlZCBhcmd1bWVudHNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9wYXJzZUFyZ3VtZW50cyhvcHRpb25zLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBbY2FsbGJhY2sgfHwge30sIG9wdGlvbnNdO1xuICB9XG5cbiAgaWYgKF9pc1VuZGVmaW5lZChvcHRpb25zKSkge1xuICAgIHJldHVybiBbe30sIGNhbGxiYWNrXTtcbiAgfVxuXG4gIHJldHVybiBbb3B0aW9ucywgY2FsbGJhY2tdO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIG5ldyB0ZW1wb3JhcnkgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICogQHJldHVybnMge3N0cmluZ30gdGhlIG5ldyByYW5kb20gbmFtZSBhY2NvcmRpbmcgdG8gb3B0c1xuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX2dlbmVyYXRlVG1wTmFtZShvcHRzKSB7XG4gIGlmIChvcHRzLm5hbWUpIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKG9wdHMuZGlyIHx8IHRtcERpciwgb3B0cy5uYW1lKTtcbiAgfVxuXG4gIC8vIG1rc3RlbXBzIGxpa2UgdGVtcGxhdGVcbiAgaWYgKG9wdHMudGVtcGxhdGUpIHtcbiAgICByZXR1cm4gb3B0cy50ZW1wbGF0ZS5yZXBsYWNlKFRFTVBMQVRFX1BBVFRFUk4sIF9yYW5kb21DaGFycyg2KSk7XG4gIH1cblxuICAvLyBwcmVmaXggYW5kIHBvc3RmaXhcbiAgY29uc3QgbmFtZSA9IFtcbiAgICBvcHRzLnByZWZpeCB8fCAndG1wLScsXG4gICAgcHJvY2Vzcy5waWQsXG4gICAgX3JhbmRvbUNoYXJzKDEyKSxcbiAgICBvcHRzLnBvc3RmaXggfHwgJydcbiAgXS5qb2luKCcnKTtcblxuICByZXR1cm4gcGF0aC5qb2luKG9wdHMuZGlyIHx8IHRtcERpciwgbmFtZSk7XG59XG5cbi8qKlxuICogR2V0cyBhIHRlbXBvcmFyeSBmaWxlIG5hbWUuXG4gKlxuICogQHBhcmFtIHsoT3B0aW9uc3x0bXBOYW1lQ2FsbGJhY2spfSBvcHRpb25zIG9wdGlvbnMgb3IgY2FsbGJhY2tcbiAqIEBwYXJhbSB7P3RtcE5hbWVDYWxsYmFja30gY2FsbGJhY2sgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIHRtcE5hbWUob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgdmFyXG4gICAgYXJncyA9IF9wYXJzZUFyZ3VtZW50cyhvcHRpb25zLCBjYWxsYmFjayksXG4gICAgb3B0cyA9IGFyZ3NbMF0sXG4gICAgY2IgPSBhcmdzWzFdLFxuICAgIHRyaWVzID0gb3B0cy5uYW1lID8gMSA6IG9wdHMudHJpZXMgfHwgREVGQVVMVF9UUklFUztcblxuICBpZiAoaXNOYU4odHJpZXMpIHx8IHRyaWVzIDwgMClcbiAgICByZXR1cm4gY2IobmV3IEVycm9yKCdJbnZhbGlkIHRyaWVzJykpO1xuXG4gIGlmIChvcHRzLnRlbXBsYXRlICYmICFvcHRzLnRlbXBsYXRlLm1hdGNoKFRFTVBMQVRFX1BBVFRFUk4pKVxuICAgIHJldHVybiBjYihuZXcgRXJyb3IoJ0ludmFsaWQgdGVtcGxhdGUgcHJvdmlkZWQnKSk7XG5cbiAgKGZ1bmN0aW9uIF9nZXRVbmlxdWVOYW1lKCkge1xuICAgIGNvbnN0IG5hbWUgPSBfZ2VuZXJhdGVUbXBOYW1lKG9wdHMpO1xuXG4gICAgLy8gY2hlY2sgd2hldGhlciB0aGUgcGF0aCBleGlzdHMgdGhlbiByZXRyeSBpZiBuZWVkZWRcbiAgICBmcy5zdGF0KG5hbWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmICghZXJyKSB7XG4gICAgICAgIGlmICh0cmllcy0tID4gMCkgcmV0dXJuIF9nZXRVbmlxdWVOYW1lKCk7XG5cbiAgICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcignQ291bGQgbm90IGdldCBhIHVuaXF1ZSB0bXAgZmlsZW5hbWUsIG1heCB0cmllcyByZWFjaGVkICcgKyBuYW1lKSk7XG4gICAgICB9XG5cbiAgICAgIGNiKG51bGwsIG5hbWUpO1xuICAgIH0pO1xuICB9KCkpO1xufVxuXG4vKipcbiAqIFN5bmNocm9ub3VzIHZlcnNpb24gb2YgdG1wTmFtZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybnMge3N0cmluZ30gdGhlIGdlbmVyYXRlZCByYW5kb20gbmFtZVxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBvcHRpb25zIGFyZSBpbnZhbGlkIG9yIGNvdWxkIG5vdCBnZW5lcmF0ZSBhIGZpbGVuYW1lXG4gKi9cbmZ1bmN0aW9uIHRtcE5hbWVTeW5jKG9wdGlvbnMpIHtcbiAgdmFyXG4gICAgYXJncyA9IF9wYXJzZUFyZ3VtZW50cyhvcHRpb25zKSxcbiAgICBvcHRzID0gYXJnc1swXSxcbiAgICB0cmllcyA9IG9wdHMubmFtZSA/IDEgOiBvcHRzLnRyaWVzIHx8IERFRkFVTFRfVFJJRVM7XG5cbiAgaWYgKGlzTmFOKHRyaWVzKSB8fCB0cmllcyA8IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRyaWVzJyk7XG5cbiAgaWYgKG9wdHMudGVtcGxhdGUgJiYgIW9wdHMudGVtcGxhdGUubWF0Y2goVEVNUExBVEVfUEFUVEVSTikpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRlbXBsYXRlIHByb3ZpZGVkJyk7XG5cbiAgZG8ge1xuICAgIGNvbnN0IG5hbWUgPSBfZ2VuZXJhdGVUbXBOYW1lKG9wdHMpO1xuICAgIHRyeSB7XG4gICAgICBmcy5zdGF0U3luYyhuYW1lKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gIH0gd2hpbGUgKHRyaWVzLS0gPiAwKTtcblxuICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBnZXQgYSB1bmlxdWUgdG1wIGZpbGVuYW1lLCBtYXggdHJpZXMgcmVhY2hlZCcpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW5kIG9wZW5zIGEgdGVtcG9yYXJ5IGZpbGUuXG4gKlxuICogQHBhcmFtIHsoT3B0aW9uc3xmaWxlQ2FsbGJhY2spfSBvcHRpb25zIHRoZSBjb25maWcgb3B0aW9ucyBvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEBwYXJhbSB7P2ZpbGVDYWxsYmFja30gY2FsbGJhY2tcbiAqL1xuZnVuY3Rpb24gZmlsZShvcHRpb25zLCBjYWxsYmFjaykge1xuICB2YXJcbiAgICBhcmdzID0gX3BhcnNlQXJndW1lbnRzKG9wdGlvbnMsIGNhbGxiYWNrKSxcbiAgICBvcHRzID0gYXJnc1swXSxcbiAgICBjYiA9IGFyZ3NbMV07XG5cbiAgb3B0cy5wb3N0Zml4ID0gKF9pc1VuZGVmaW5lZChvcHRzLnBvc3RmaXgpKSA/ICcudG1wJyA6IG9wdHMucG9zdGZpeDtcblxuICAvLyBnZXRzIGEgdGVtcG9yYXJ5IGZpbGVuYW1lXG4gIHRtcE5hbWUob3B0cywgZnVuY3Rpb24gX3RtcE5hbWVDcmVhdGVkKGVyciwgbmFtZSkge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpO1xuXG4gICAgLy8gY3JlYXRlIGFuZCBvcGVuIHRoZSBmaWxlXG4gICAgZnMub3BlbihuYW1lLCBDUkVBVEVfRkxBR1MsIG9wdHMubW9kZSB8fCBGSUxFX01PREUsIGZ1bmN0aW9uIF9maWxlQ3JlYXRlZChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKTtcblxuICAgICAgaWYgKG9wdHMuZGlzY2FyZERlc2NyaXB0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZzLmNsb3NlKGZkLCBmdW5jdGlvbiBfZGlzY2FyZENhbGxiYWNrKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIC8vIExvdyBwcm9iYWJpbGl0eSwgYW5kIHRoZSBmaWxlIGV4aXN0cywgc28gdGhpcyBjb3VsZCBiZVxuICAgICAgICAgICAgLy8gaWdub3JlZC4gIElmIGl0IGlzbid0IHdlIGNlcnRhaW5seSBuZWVkIHRvIHVubGluayB0aGVcbiAgICAgICAgICAgIC8vIGZpbGUsIGFuZCBpZiB0aGF0IGZhaWxzIHRvbyBpdHMgZXJyb3IgaXMgbW9yZVxuICAgICAgICAgICAgLy8gaW1wb3J0YW50LlxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZnMudW5saW5rU3luYyhuYW1lKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgaWYgKCFpc0VOT0VOVChlKSkge1xuICAgICAgICAgICAgICAgIGVyciA9IGU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYihudWxsLCBuYW1lLCB1bmRlZmluZWQsIF9wcmVwYXJlVG1wRmlsZVJlbW92ZUNhbGxiYWNrKG5hbWUsIC0xLCBvcHRzKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKG9wdHMuZGV0YWNoRGVzY3JpcHRvcikge1xuICAgICAgICByZXR1cm4gY2IobnVsbCwgbmFtZSwgZmQsIF9wcmVwYXJlVG1wRmlsZVJlbW92ZUNhbGxiYWNrKG5hbWUsIC0xLCBvcHRzKSk7XG4gICAgICB9XG4gICAgICBjYihudWxsLCBuYW1lLCBmZCwgX3ByZXBhcmVUbXBGaWxlUmVtb3ZlQ2FsbGJhY2sobmFtZSwgZmQsIG9wdHMpKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogU3luY2hyb25vdXMgdmVyc2lvbiBvZiBmaWxlLlxuICpcbiAqIEBwYXJhbSB7T3B0aW9uc30gb3B0aW9uc1xuICogQHJldHVybnMge0ZpbGVTeW5jT2JqZWN0fSBvYmplY3QgY29uc2lzdHMgb2YgbmFtZSwgZmQgYW5kIHJlbW92ZUNhbGxiYWNrXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgY2Fubm90IGNyZWF0ZSBhIGZpbGVcbiAqL1xuZnVuY3Rpb24gZmlsZVN5bmMob3B0aW9ucykge1xuICB2YXJcbiAgICBhcmdzID0gX3BhcnNlQXJndW1lbnRzKG9wdGlvbnMpLFxuICAgIG9wdHMgPSBhcmdzWzBdO1xuXG4gIG9wdHMucG9zdGZpeCA9IG9wdHMucG9zdGZpeCB8fCAnLnRtcCc7XG5cbiAgY29uc3QgZGlzY2FyZE9yRGV0YWNoRGVzY3JpcHRvciA9IG9wdHMuZGlzY2FyZERlc2NyaXB0b3IgfHwgb3B0cy5kZXRhY2hEZXNjcmlwdG9yO1xuICBjb25zdCBuYW1lID0gdG1wTmFtZVN5bmMob3B0cyk7XG4gIHZhciBmZCA9IGZzLm9wZW5TeW5jKG5hbWUsIENSRUFURV9GTEFHUywgb3B0cy5tb2RlIHx8IEZJTEVfTU9ERSk7XG4gIGlmIChvcHRzLmRpc2NhcmREZXNjcmlwdG9yKSB7XG4gICAgZnMuY2xvc2VTeW5jKGZkKTsgXG4gICAgZmQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgZmQ6IGZkLFxuICAgIHJlbW92ZUNhbGxiYWNrOiBfcHJlcGFyZVRtcEZpbGVSZW1vdmVDYWxsYmFjayhuYW1lLCBkaXNjYXJkT3JEZXRhY2hEZXNjcmlwdG9yID8gLTEgOiBmZCwgb3B0cylcbiAgfTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGZpbGVzIGFuZCBmb2xkZXJzIGluIGEgZGlyZWN0b3J5IHJlY3Vyc2l2ZWx5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByb290XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfcm1kaXJSZWN1cnNpdmVTeW5jKHJvb3QpIHtcbiAgY29uc3QgZGlycyA9IFtyb290XTtcblxuICBkbyB7XG4gICAgdmFyXG4gICAgICBkaXIgPSBkaXJzLnBvcCgpLFxuICAgICAgZGVmZXJyZWQgPSBmYWxzZSxcbiAgICAgIGZpbGVzID0gZnMucmVhZGRpclN5bmMoZGlyKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBmaWxlcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyXG4gICAgICAgIGZpbGUgPSBwYXRoLmpvaW4oZGlyLCBmaWxlc1tpXSksXG4gICAgICAgIHN0YXQgPSBmcy5sc3RhdFN5bmMoZmlsZSk7IC8vIGxzdGF0IHNvIHdlIGRvbid0IHJlY3Vyc2UgaW50byBzeW1saW5rZWQgZGlyZWN0b3JpZXNcblxuICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBpZiAoIWRlZmVycmVkKSB7XG4gICAgICAgICAgZGVmZXJyZWQgPSB0cnVlO1xuICAgICAgICAgIGRpcnMucHVzaChkaXIpO1xuICAgICAgICB9XG4gICAgICAgIGRpcnMucHVzaChmaWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZzLnVubGlua1N5bmMoZmlsZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFkZWZlcnJlZCkge1xuICAgICAgZnMucm1kaXJTeW5jKGRpcik7XG4gICAgfVxuICB9IHdoaWxlIChkaXJzLmxlbmd0aCAhPT0gMCk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHRlbXBvcmFyeSBkaXJlY3RvcnkuXG4gKlxuICogQHBhcmFtIHsoT3B0aW9uc3xkaXJDYWxsYmFjayl9IG9wdGlvbnMgdGhlIG9wdGlvbnMgb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKiBAcGFyYW0gez9kaXJDYWxsYmFja30gY2FsbGJhY2tcbiAqL1xuZnVuY3Rpb24gZGlyKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIHZhclxuICAgIGFyZ3MgPSBfcGFyc2VBcmd1bWVudHMob3B0aW9ucywgY2FsbGJhY2spLFxuICAgIG9wdHMgPSBhcmdzWzBdLFxuICAgIGNiID0gYXJnc1sxXTtcblxuICAvLyBnZXRzIGEgdGVtcG9yYXJ5IGZpbGVuYW1lXG4gIHRtcE5hbWUob3B0cywgZnVuY3Rpb24gX3RtcE5hbWVDcmVhdGVkKGVyciwgbmFtZSkge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBkaXJlY3RvcnlcbiAgICBmcy5ta2RpcihuYW1lLCBvcHRzLm1vZGUgfHwgRElSX01PREUsIGZ1bmN0aW9uIF9kaXJDcmVhdGVkKGVycikge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycik7XG5cbiAgICAgIGNiKG51bGwsIG5hbWUsIF9wcmVwYXJlVG1wRGlyUmVtb3ZlQ2FsbGJhY2sobmFtZSwgb3B0cykpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBTeW5jaHJvbm91cyB2ZXJzaW9uIG9mIGRpci5cbiAqXG4gKiBAcGFyYW0ge09wdGlvbnN9IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtEaXJTeW5jT2JqZWN0fSBvYmplY3QgY29uc2lzdHMgb2YgbmFtZSBhbmQgcmVtb3ZlQ2FsbGJhY2tcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBpdCBjYW5ub3QgY3JlYXRlIGEgZGlyZWN0b3J5XG4gKi9cbmZ1bmN0aW9uIGRpclN5bmMob3B0aW9ucykge1xuICB2YXJcbiAgICBhcmdzID0gX3BhcnNlQXJndW1lbnRzKG9wdGlvbnMpLFxuICAgIG9wdHMgPSBhcmdzWzBdO1xuXG4gIGNvbnN0IG5hbWUgPSB0bXBOYW1lU3luYyhvcHRzKTtcbiAgZnMubWtkaXJTeW5jKG5hbWUsIG9wdHMubW9kZSB8fCBESVJfTU9ERSk7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHJlbW92ZUNhbGxiYWNrOiBfcHJlcGFyZVRtcERpclJlbW92ZUNhbGxiYWNrKG5hbWUsIG9wdHMpXG4gIH07XG59XG5cbi8qKlxuICogUHJlcGFyZXMgdGhlIGNhbGxiYWNrIGZvciByZW1vdmFsIG9mIHRoZSB0ZW1wb3JhcnkgZmlsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSB0aGUgcGF0aCBvZiB0aGUgZmlsZVxuICogQHBhcmFtIHtudW1iZXJ9IGZkIGZpbGUgZGVzY3JpcHRvclxuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAqIEByZXR1cm5zIHtmaWxlQ2FsbGJhY2t9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfcHJlcGFyZVRtcEZpbGVSZW1vdmVDYWxsYmFjayhuYW1lLCBmZCwgb3B0cykge1xuICBjb25zdCByZW1vdmVDYWxsYmFjayA9IF9wcmVwYXJlUmVtb3ZlQ2FsbGJhY2soZnVuY3Rpb24gX3JlbW92ZUNhbGxiYWNrKGZkUGF0aCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoMCA8PSBmZFBhdGhbMF0pIHtcbiAgICAgICAgZnMuY2xvc2VTeW5jKGZkUGF0aFswXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAvLyB1bmRlciBzb21lIG5vZGUvd2luZG93cyByZWxhdGVkIGNpcmN1bXN0YW5jZXMsIGEgdGVtcG9yYXJ5IGZpbGVcbiAgICAgIC8vIG1heSBoYXZlIG5vdCBiZSBjcmVhdGVkIGFzIGV4cGVjdGVkIG9yIHRoZSBmaWxlIHdhcyBhbHJlYWR5IGNsb3NlZFxuICAgICAgLy8gYnkgdGhlIHVzZXIsIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbCBzaW1wbHkgaWdub3JlIHRoZSBlcnJvclxuICAgICAgaWYgKCFpc0VCQURGKGUpICYmICFpc0VOT0VOVChlKSkge1xuICAgICAgICAvLyByZXJhaXNlIGFueSB1bmFudGljaXBhdGVkIGVycm9yXG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBmcy51bmxpbmtTeW5jKGZkUGF0aFsxXSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICBpZiAoIWlzRU5PRU5UKGUpKSB7XG4gICAgICAgIC8vIHJlcmFpc2UgYW55IHVuYW50aWNpcGF0ZWQgZXJyb3JcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtmZCwgbmFtZV0pO1xuXG4gIGlmICghb3B0cy5rZWVwKSB7XG4gICAgX3JlbW92ZU9iamVjdHMudW5zaGlmdChyZW1vdmVDYWxsYmFjayk7XG4gIH1cblxuICByZXR1cm4gcmVtb3ZlQ2FsbGJhY2s7XG59XG5cbi8qKlxuICogUHJlcGFyZXMgdGhlIGNhbGxiYWNrIGZvciByZW1vdmFsIG9mIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICogQHJldHVybnMge0Z1bmN0aW9ufSB0aGUgY2FsbGJhY2tcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9wcmVwYXJlVG1wRGlyUmVtb3ZlQ2FsbGJhY2sobmFtZSwgb3B0cykge1xuICBjb25zdCByZW1vdmVGdW5jdGlvbiA9IG9wdHMudW5zYWZlQ2xlYW51cCA/IF9ybWRpclJlY3Vyc2l2ZVN5bmMgOiBmcy5ybWRpclN5bmMuYmluZChmcyk7XG4gIGNvbnN0IHJlbW92ZUNhbGxiYWNrID0gX3ByZXBhcmVSZW1vdmVDYWxsYmFjayhyZW1vdmVGdW5jdGlvbiwgbmFtZSk7XG5cbiAgaWYgKCFvcHRzLmtlZXApIHtcbiAgICBfcmVtb3ZlT2JqZWN0cy51bnNoaWZ0KHJlbW92ZUNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiByZW1vdmVDYWxsYmFjaztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZ3VhcmRlZCBmdW5jdGlvbiB3cmFwcGluZyB0aGUgcmVtb3ZlRnVuY3Rpb24gY2FsbC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZW1vdmVGdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGFyZ1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX3ByZXBhcmVSZW1vdmVDYWxsYmFjayhyZW1vdmVGdW5jdGlvbiwgYXJnKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcblxuICByZXR1cm4gZnVuY3Rpb24gX2NsZWFudXBDYWxsYmFjayhuZXh0KSB7XG4gICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gX3JlbW92ZU9iamVjdHMuaW5kZXhPZihfY2xlYW51cENhbGxiYWNrKTtcbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgIF9yZW1vdmVPYmplY3RzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG5cbiAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICByZW1vdmVGdW5jdGlvbihhcmcpO1xuICAgIH1cblxuICAgIGlmIChuZXh0KSBuZXh0KG51bGwpO1xuICB9O1xufVxuXG4vKipcbiAqIFRoZSBnYXJiYWdlIGNvbGxlY3Rvci5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfZ2FyYmFnZUNvbGxlY3RvcigpIHtcbiAgaWYgKF91bmNhdWdodEV4Y2VwdGlvbiAmJiAhX2dyYWNlZnVsQ2xlYW51cCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHRoZSBmdW5jdGlvbiBiZWluZyBjYWxsZWQgcmVtb3ZlcyBpdHNlbGYgZnJvbSBfcmVtb3ZlT2JqZWN0cyxcbiAgLy8gbG9vcCB1bnRpbCBfcmVtb3ZlT2JqZWN0cyBpcyBlbXB0eVxuICB3aGlsZSAoX3JlbW92ZU9iamVjdHMubGVuZ3RoKSB7XG4gICAgdHJ5IHtcbiAgICAgIF9yZW1vdmVPYmplY3RzWzBdLmNhbGwobnVsbCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gYWxyZWFkeSByZW1vdmVkP1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBmb3IgdGVzdGluZyBhZ2FpbnN0IEVCQURGIHRvIGNvbXBlbnNhdGUgY2hhbmdlcyBtYWRlIHRvIE5vZGUgNy54IHVuZGVyIFdpbmRvd3MuXG4gKi9cbmZ1bmN0aW9uIGlzRUJBREYoZXJyb3IpIHtcbiAgcmV0dXJuIGlzRXhwZWN0ZWRFcnJvcihlcnJvciwgLUVCQURGLCAnRUJBREYnKTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZm9yIHRlc3RpbmcgYWdhaW5zdCBFTk9FTlQgdG8gY29tcGVuc2F0ZSBjaGFuZ2VzIG1hZGUgdG8gTm9kZSA3LnggdW5kZXIgV2luZG93cy5cbiAqL1xuZnVuY3Rpb24gaXNFTk9FTlQoZXJyb3IpIHtcbiAgcmV0dXJuIGlzRXhwZWN0ZWRFcnJvcihlcnJvciwgLUVOT0VOVCwgJ0VOT0VOVCcpO1xufVxuXG4vKipcbiAqIEhlbHBlciB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZXhwZWN0ZWQgZXJyb3IgY29kZSBtYXRjaGVzIHRoZSBhY3R1YWwgY29kZSBhbmQgZXJybm8sXG4gKiB3aGljaCB3aWxsIGRpZmZlciBiZXR3ZWVuIHRoZSBzdXBwb3J0ZWQgbm9kZSB2ZXJzaW9ucy5cbiAqXG4gKiAtIE5vZGUgPj0gNy4wOlxuICogICBlcnJvci5jb2RlIHtTdHJpbmd9XG4gKiAgIGVycm9yLmVycm5vIHtTdHJpbmd8TnVtYmVyfSBhbnkgbnVtZXJpY2FsIHZhbHVlIHdpbGwgYmUgbmVnYXRlZFxuICpcbiAqIC0gTm9kZSA+PSA2LjAgPCA3LjA6XG4gKiAgIGVycm9yLmNvZGUge1N0cmluZ31cbiAqICAgZXJyb3IuZXJybm8ge051bWJlcn0gbmVnYXRlZFxuICpcbiAqIC0gTm9kZSA+PSA0LjAgPCA2LjA6IGludHJvZHVjZXMgU3lzdGVtRXJyb3JcbiAqICAgZXJyb3IuY29kZSB7U3RyaW5nfVxuICogICBlcnJvci5lcnJubyB7TnVtYmVyfSBuZWdhdGVkXG4gKlxuICogLSBOb2RlID49IDAuMTAgPCA0LjA6XG4gKiAgIGVycm9yLmNvZGUge051bWJlcn0gbmVnYXRlZFxuICogICBlcnJvci5lcnJubyBuL2FcbiAqL1xuZnVuY3Rpb24gaXNFeHBlY3RlZEVycm9yKGVycm9yLCBjb2RlLCBlcnJubykge1xuICByZXR1cm4gZXJyb3IuY29kZSA9PSBjb2RlIHx8IGVycm9yLmNvZGUgPT0gZXJybm87XG59XG5cbi8qKlxuICogU2V0cyB0aGUgZ3JhY2VmdWwgY2xlYW51cC5cbiAqXG4gKiBBbHNvIHJlbW92ZXMgdGhlIGNyZWF0ZWQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHdoZW4gYW4gdW5jYXVnaHQgZXhjZXB0aW9uIG9jY3Vycy5cbiAqL1xuZnVuY3Rpb24gc2V0R3JhY2VmdWxDbGVhbnVwKCkge1xuICBfZ3JhY2VmdWxDbGVhbnVwID0gdHJ1ZTtcbn1cblxuY29uc3QgdmVyc2lvbiA9IHByb2Nlc3MudmVyc2lvbnMubm9kZS5zcGxpdCgnLicpLm1hcChmdW5jdGlvbiAodmFsdWUpIHtcbiAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7XG59KTtcblxuaWYgKHZlcnNpb25bMF0gPT09IDAgJiYgKHZlcnNpb25bMV0gPCA5IHx8IHZlcnNpb25bMV0gPT09IDkgJiYgdmVyc2lvblsyXSA8IDUpKSB7XG4gIHByb2Nlc3MuYWRkTGlzdGVuZXIoJ3VuY2F1Z2h0RXhjZXB0aW9uJywgZnVuY3Rpb24gX3VuY2F1Z2h0RXhjZXB0aW9uVGhyb3duKGVycikge1xuICAgIF91bmNhdWdodEV4Y2VwdGlvbiA9IHRydWU7XG4gICAgX2dhcmJhZ2VDb2xsZWN0b3IoKTtcblxuICAgIHRocm93IGVycjtcbiAgfSk7XG59XG5cbnByb2Nlc3MuYWRkTGlzdGVuZXIoJ2V4aXQnLCBmdW5jdGlvbiBfZXhpdChjb2RlKSB7XG4gIGlmIChjb2RlKSBfdW5jYXVnaHRFeGNlcHRpb24gPSB0cnVlO1xuICBfZ2FyYmFnZUNvbGxlY3RvcigpO1xufSk7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gdHJpZXMgdGhlIG51bWJlciBvZiB0cmllcyBiZWZvcmUgZ2l2ZSB1cCB0aGUgbmFtZSBnZW5lcmF0aW9uXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHRlbXBsYXRlIHRoZSBcIm1rc3RlbXBcIiBsaWtlIGZpbGVuYW1lIHRlbXBsYXRlXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IG5hbWUgZml4IG5hbWVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZGlyIHRoZSB0bXAgZGlyZWN0b3J5IHRvIHVzZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBwcmVmaXggcHJlZml4IGZvciB0aGUgZ2VuZXJhdGVkIG5hbWVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcG9zdGZpeCBwb3N0Zml4IGZvciB0aGUgZ2VuZXJhdGVkIG5hbWVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEZpbGVTeW5jT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZmlsZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGZkIHRoZSBmaWxlIGRlc2NyaXB0b3JcbiAqIEBwcm9wZXJ0eSB7ZmlsZUNhbGxiYWNrfSByZW1vdmVDYWxsYmFjayB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcmVtb3ZlIHRoZSBmaWxlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEaXJTeW5jT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5XG4gKiBAcHJvcGVydHkge2ZpbGVDYWxsYmFja30gcmVtb3ZlQ2FsbGJhY2sgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHJlbW92ZSB0aGUgZGlyZWN0b3J5XG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgdG1wTmFtZUNhbGxiYWNrXG4gKiBAcGFyYW0gez9FcnJvcn0gZXJyIHRoZSBlcnJvciBvYmplY3QgaWYgYW55dGhpbmcgZ29lcyB3cm9uZ1xuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgdGhlIHRlbXBvcmFyeSBmaWxlIG5hbWVcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBmaWxlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7P0Vycm9yfSBlcnIgdGhlIGVycm9yIG9iamVjdCBpZiBhbnl0aGluZyBnb2VzIHdyb25nXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSB0aGUgdGVtcG9yYXJ5IGZpbGUgbmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGZkIHRoZSBmaWxlIGRlc2NyaXB0b3JcbiAqIEBwYXJhbSB7Y2xlYW51cENhbGxiYWNrfSBmbiB0aGUgY2xlYW51cCBjYWxsYmFjayBmdW5jdGlvblxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIGRpckNhbGxiYWNrXG4gKiBAcGFyYW0gez9FcnJvcn0gZXJyIHRoZSBlcnJvciBvYmplY3QgaWYgYW55dGhpbmcgZ29lcyB3cm9uZ1xuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgdGhlIHRlbXBvcmFyeSBmaWxlIG5hbWVcbiAqIEBwYXJhbSB7Y2xlYW51cENhbGxiYWNrfSBmbiB0aGUgY2xlYW51cCBjYWxsYmFjayBmdW5jdGlvblxuICovXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgdGVtcG9yYXJ5IGNyZWF0ZWQgZmlsZSBvciBkaXJlY3RvcnkuXG4gKlxuICogQGNhbGxiYWNrIGNsZWFudXBDYWxsYmFja1xuICogQHBhcmFtIHtzaW1wbGVDYWxsYmFja30gW25leHRdIGZ1bmN0aW9uIHRvIGNhbGwgYWZ0ZXIgZW50cnkgd2FzIHJlbW92ZWRcbiAqL1xuXG4vKipcbiAqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBmdW5jdGlvbiBjb21wb3NpdGlvbi5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9yYXN6aS9ub2RlLXRtcC9pc3N1ZXMvNTd8cmFzemkvbm9kZS10bXAjNTd9XG4gKlxuICogQGNhbGxiYWNrIHNpbXBsZUNhbGxiYWNrXG4gKi9cblxuLy8gZXhwb3J0aW5nIGFsbCB0aGUgbmVlZGVkIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzLnRtcGRpciA9IHRtcERpcjtcblxubW9kdWxlLmV4cG9ydHMuZGlyID0gZGlyO1xubW9kdWxlLmV4cG9ydHMuZGlyU3luYyA9IGRpclN5bmM7XG5cbm1vZHVsZS5leHBvcnRzLmZpbGUgPSBmaWxlO1xubW9kdWxlLmV4cG9ydHMuZmlsZVN5bmMgPSBmaWxlU3luYztcblxubW9kdWxlLmV4cG9ydHMudG1wTmFtZSA9IHRtcE5hbWU7XG5tb2R1bGUuZXhwb3J0cy50bXBOYW1lU3luYyA9IHRtcE5hbWVTeW5jO1xuXG5tb2R1bGUuZXhwb3J0cy5zZXRHcmFjZWZ1bENsZWFudXAgPSBzZXRHcmFjZWZ1bENsZWFudXA7XG4iLCJcInVzZSBzdHJpY3RcIjtcbi8qKipcbiAqIE5vZGUgRXh0ZXJuYWwgRWRpdG9yXG4gKlxuICogS2V2aW4gR3JhdmllciA8a2V2aW5AbXJrbWcuY29tPlxuICogTUlUIDIwMThcbiAqL1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgQ3JlYXRlRmlsZUVycm9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDcmVhdGVGaWxlRXJyb3IsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ3JlYXRlRmlsZUVycm9yKG9yaWdpbmFsRXJyb3IpIHtcbiAgICAgICAgdmFyIF9uZXdUYXJnZXQgPSB0aGlzLmNvbnN0cnVjdG9yO1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBcIkZhaWxlZCB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgZm9yIGVkaXRvclwiKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5vcmlnaW5hbEVycm9yID0gb3JpZ2luYWxFcnJvcjtcbiAgICAgICAgdmFyIHByb3RvID0gX25ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihfdGhpcywgcHJvdG8pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMuX19wcm90b19fID0gX25ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gQ3JlYXRlRmlsZUVycm9yO1xufShFcnJvcikpO1xuZXhwb3J0cy5DcmVhdGVGaWxlRXJyb3IgPSBDcmVhdGVGaWxlRXJyb3I7XG4iLCJcInVzZSBzdHJpY3RcIjtcbi8qKipcbiAqIE5vZGUgRXh0ZXJuYWwgRWRpdG9yXG4gKlxuICogS2V2aW4gR3JhdmllciA8a2V2aW5AbXJrbWcuY29tPlxuICogTUlUIDIwMThcbiAqL1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgTGF1bmNoRWRpdG9yRXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKExhdW5jaEVkaXRvckVycm9yLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIExhdW5jaEVkaXRvckVycm9yKG9yaWdpbmFsRXJyb3IpIHtcbiAgICAgICAgdmFyIF9uZXdUYXJnZXQgPSB0aGlzLmNvbnN0cnVjdG9yO1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBcIkZhaWxlZCBsYXVuY2ggZWRpdG9yXCIpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9yaWdpbmFsRXJyb3IgPSBvcmlnaW5hbEVycm9yO1xuICAgICAgICB2YXIgcHJvdG8gPSBfbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKF90aGlzLCBwcm90byk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5fX3Byb3RvX18gPSBfbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBMYXVuY2hFZGl0b3JFcnJvcjtcbn0oRXJyb3IpKTtcbmV4cG9ydHMuTGF1bmNoRWRpdG9yRXJyb3IgPSBMYXVuY2hFZGl0b3JFcnJvcjtcbiIsIlwidXNlIHN0cmljdFwiO1xuLyoqKlxuICogTm9kZSBFeHRlcm5hbCBFZGl0b3JcbiAqXG4gKiBLZXZpbiBHcmF2aWVyIDxrZXZpbkBtcmttZy5jb20+XG4gKiBNSVQgMjAxOFxuICovXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBSZWFkRmlsZUVycm9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhSZWFkRmlsZUVycm9yLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFJlYWRGaWxlRXJyb3Iob3JpZ2luYWxFcnJvcikge1xuICAgICAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIFwiRmFpbGVkIHRvIHJlYWQgdGVtcG9yYXJ5IGZpbGVcIikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub3JpZ2luYWxFcnJvciA9IG9yaWdpbmFsRXJyb3I7XG4gICAgICAgIHZhciBwcm90byA9IF9uZXdUYXJnZXQucHJvdG90eXBlO1xuICAgICAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoX3RoaXMsIHByb3RvKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLl9fcHJvdG9fXyA9IF9uZXdUYXJnZXQucHJvdG90eXBlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIFJlYWRGaWxlRXJyb3I7XG59KEVycm9yKSk7XG5leHBvcnRzLlJlYWRGaWxlRXJyb3IgPSBSZWFkRmlsZUVycm9yO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG4vKioqXG4gKiBOb2RlIEV4dGVybmFsIEVkaXRvclxuICpcbiAqIEtldmluIEdyYXZpZXIgPGtldmluQG1ya21nLmNvbT5cbiAqIE1JVCAyMDE4XG4gKi9cbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIFJlbW92ZUZpbGVFcnJvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUmVtb3ZlRmlsZUVycm9yLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFJlbW92ZUZpbGVFcnJvcihvcmlnaW5hbEVycm9yKSB7XG4gICAgICAgIHZhciBfbmV3VGFyZ2V0ID0gdGhpcy5jb25zdHJ1Y3RvcjtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgXCJGYWlsZWQgdG8gY2xlYW51cCB0ZW1wb3JhcnkgZmlsZVwiKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5vcmlnaW5hbEVycm9yID0gb3JpZ2luYWxFcnJvcjtcbiAgICAgICAgdmFyIHByb3RvID0gX25ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihfdGhpcywgcHJvdG8pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMuX19wcm90b19fID0gX25ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gUmVtb3ZlRmlsZUVycm9yO1xufShFcnJvcikpO1xuZXhwb3J0cy5SZW1vdmVGaWxlRXJyb3IgPSBSZW1vdmVGaWxlRXJyb3I7XG4iLCJcInVzZSBzdHJpY3RcIjtcbi8qKipcbiAqIE5vZGUgRXh0ZXJuYWwgRWRpdG9yXG4gKlxuICogS2V2aW4gR3JhdmllciA8a2V2aW5AbXJrbWcuY29tPlxuICogTUlUIDIwMTlcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNoYXJkZXRfMSA9IHJlcXVpcmUoXCJjaGFyZGV0XCIpO1xudmFyIGNoaWxkX3Byb2Nlc3NfMSA9IHJlcXVpcmUoXCJjaGlsZF9wcm9jZXNzXCIpO1xudmFyIGZzXzEgPSByZXF1aXJlKFwiZnNcIik7XG52YXIgaWNvbnZfbGl0ZV8xID0gcmVxdWlyZShcImljb252LWxpdGVcIik7XG52YXIgdG1wXzEgPSByZXF1aXJlKFwidG1wXCIpO1xudmFyIENyZWF0ZUZpbGVFcnJvcl8xID0gcmVxdWlyZShcIi4vZXJyb3JzL0NyZWF0ZUZpbGVFcnJvclwiKTtcbmV4cG9ydHMuQ3JlYXRlRmlsZUVycm9yID0gQ3JlYXRlRmlsZUVycm9yXzEuQ3JlYXRlRmlsZUVycm9yO1xudmFyIExhdW5jaEVkaXRvckVycm9yXzEgPSByZXF1aXJlKFwiLi9lcnJvcnMvTGF1bmNoRWRpdG9yRXJyb3JcIik7XG5leHBvcnRzLkxhdW5jaEVkaXRvckVycm9yID0gTGF1bmNoRWRpdG9yRXJyb3JfMS5MYXVuY2hFZGl0b3JFcnJvcjtcbnZhciBSZWFkRmlsZUVycm9yXzEgPSByZXF1aXJlKFwiLi9lcnJvcnMvUmVhZEZpbGVFcnJvclwiKTtcbmV4cG9ydHMuUmVhZEZpbGVFcnJvciA9IFJlYWRGaWxlRXJyb3JfMS5SZWFkRmlsZUVycm9yO1xudmFyIFJlbW92ZUZpbGVFcnJvcl8xID0gcmVxdWlyZShcIi4vZXJyb3JzL1JlbW92ZUZpbGVFcnJvclwiKTtcbmV4cG9ydHMuUmVtb3ZlRmlsZUVycm9yID0gUmVtb3ZlRmlsZUVycm9yXzEuUmVtb3ZlRmlsZUVycm9yO1xuZnVuY3Rpb24gZWRpdCh0ZXh0LCBmaWxlT3B0aW9ucykge1xuICAgIGlmICh0ZXh0ID09PSB2b2lkIDApIHsgdGV4dCA9IFwiXCI7IH1cbiAgICB2YXIgZWRpdG9yID0gbmV3IEV4dGVybmFsRWRpdG9yKHRleHQsIGZpbGVPcHRpb25zKTtcbiAgICBlZGl0b3IucnVuKCk7XG4gICAgZWRpdG9yLmNsZWFudXAoKTtcbiAgICByZXR1cm4gZWRpdG9yLnRleHQ7XG59XG5leHBvcnRzLmVkaXQgPSBlZGl0O1xuZnVuY3Rpb24gZWRpdEFzeW5jKHRleHQsIGNhbGxiYWNrLCBmaWxlT3B0aW9ucykge1xuICAgIGlmICh0ZXh0ID09PSB2b2lkIDApIHsgdGV4dCA9IFwiXCI7IH1cbiAgICB2YXIgZWRpdG9yID0gbmV3IEV4dGVybmFsRWRpdG9yKHRleHQsIGZpbGVPcHRpb25zKTtcbiAgICBlZGl0b3IucnVuQXN5bmMoZnVuY3Rpb24gKGVyciwgcmVzdWx0KSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHNldEltbWVkaWF0ZShjYWxsYmFjaywgZXJyLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZWRpdG9yLmNsZWFudXAoKTtcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoY2FsbGJhY2ssIG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoY2xlYW51cEVycm9yKSB7XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGNhbGxiYWNrLCBjbGVhbnVwRXJyb3IsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLmVkaXRBc3luYyA9IGVkaXRBc3luYztcbnZhciBFeHRlcm5hbEVkaXRvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBFeHRlcm5hbEVkaXRvcih0ZXh0LCBmaWxlT3B0aW9ucykge1xuICAgICAgICBpZiAodGV4dCA9PT0gdm9pZCAwKSB7IHRleHQgPSBcIlwiOyB9XG4gICAgICAgIHRoaXMudGV4dCA9IFwiXCI7XG4gICAgICAgIHRoaXMuZmlsZU9wdGlvbnMgPSB7fTtcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICAgICAgaWYgKGZpbGVPcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVPcHRpb25zID0gZmlsZU9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXRlcm1pbmVFZGl0b3IoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVUZW1wb3JhcnlGaWxlKCk7XG4gICAgfVxuICAgIEV4dGVybmFsRWRpdG9yLnNwbGl0U3RyaW5nQnlTcGFjZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgdmFyIHBpZWNlcyA9IFtdO1xuICAgICAgICB2YXIgY3VycmVudFN0cmluZyA9IFwiXCI7XG4gICAgICAgIGZvciAodmFyIHN0ckluZGV4ID0gMDsgc3RySW5kZXggPCBzdHIubGVuZ3RoOyBzdHJJbmRleCsrKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudExldHRlciA9IHN0cltzdHJJbmRleF07XG4gICAgICAgICAgICBpZiAoc3RySW5kZXggPiAwICYmIGN1cnJlbnRMZXR0ZXIgPT09IFwiIFwiICYmIHN0cltzdHJJbmRleCAtIDFdICE9PSBcIlxcXFxcIiAmJiBjdXJyZW50U3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwaWVjZXMucHVzaChjdXJyZW50U3RyaW5nKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50U3RyaW5nID0gXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRTdHJpbmcgKz0gY3VycmVudExldHRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwaWVjZXMucHVzaChjdXJyZW50U3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGllY2VzO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV4dGVybmFsRWRpdG9yLnByb3RvdHlwZSwgXCJ0ZW1wX2ZpbGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiREVQUkVDQVRFRDogdGVtcF9maWxlLiBVc2UgdGVtcEZpbGUgbW92aW5nIGZvcndhcmQuXCIpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGVtcEZpbGU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFeHRlcm5hbEVkaXRvci5wcm90b3R5cGUsIFwibGFzdF9leGl0X3N0YXR1c1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJERVBSRUNBVEVEOiBsYXN0X2V4aXRfc3RhdHVzLiBVc2UgbGFzdEV4aXRTdGF0dXMgbW92aW5nIGZvcndhcmQuXCIpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGFzdEV4aXRTdGF0dXM7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEV4dGVybmFsRWRpdG9yLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubGF1bmNoRWRpdG9yKCk7XG4gICAgICAgIHRoaXMucmVhZFRlbXBvcmFyeUZpbGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dDtcbiAgICB9O1xuICAgIEV4dGVybmFsRWRpdG9yLnByb3RvdHlwZS5ydW5Bc3luYyA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5sYXVuY2hFZGl0b3JBc3luYyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMucmVhZFRlbXBvcmFyeUZpbGUoKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGNhbGxiYWNrLCBudWxsLCBfdGhpcy50ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKHJlYWRFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoY2FsbGJhY2ssIHJlYWRFcnJvciwgbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGxhdW5jaEVycm9yKSB7XG4gICAgICAgICAgICBzZXRJbW1lZGlhdGUoY2FsbGJhY2ssIGxhdW5jaEVycm9yLCBudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRXh0ZXJuYWxFZGl0b3IucHJvdG90eXBlLmNsZWFudXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlVGVtcG9yYXJ5RmlsZSgpO1xuICAgIH07XG4gICAgRXh0ZXJuYWxFZGl0b3IucHJvdG90eXBlLmRldGVybWluZUVkaXRvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVkaXRvciA9IHByb2Nlc3MuZW52LlZJU1VBTCA/IHByb2Nlc3MuZW52LlZJU1VBTCA6XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5FRElUT1IgPyBwcm9jZXNzLmVudi5FRElUT1IgOlxuICAgICAgICAgICAgICAgIC9ed2luLy50ZXN0KHByb2Nlc3MucGxhdGZvcm0pID8gXCJub3RlcGFkXCIgOlxuICAgICAgICAgICAgICAgICAgICBcInZpbVwiO1xuICAgICAgICB2YXIgZWRpdG9yT3B0cyA9IEV4dGVybmFsRWRpdG9yLnNwbGl0U3RyaW5nQnlTcGFjZShlZGl0b3IpLm1hcChmdW5jdGlvbiAocGllY2UpIHsgcmV0dXJuIHBpZWNlLnJlcGxhY2UoXCJcXFxcIFwiLCBcIiBcIik7IH0pO1xuICAgICAgICB2YXIgYmluID0gZWRpdG9yT3B0cy5zaGlmdCgpO1xuICAgICAgICB0aGlzLmVkaXRvciA9IHsgYXJnczogZWRpdG9yT3B0cywgYmluOiBiaW4gfTtcbiAgICB9O1xuICAgIEV4dGVybmFsRWRpdG9yLnByb3RvdHlwZS5jcmVhdGVUZW1wb3JhcnlGaWxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy50ZW1wRmlsZSA9IHRtcF8xLnRtcE5hbWVTeW5jKHRoaXMuZmlsZU9wdGlvbnMpO1xuICAgICAgICAgICAgdmFyIG9wdCA9IHsgZW5jb2Rpbmc6IFwidXRmOFwiIH07XG4gICAgICAgICAgICBpZiAodGhpcy5maWxlT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShcIm1vZGVcIikpIHtcbiAgICAgICAgICAgICAgICBvcHQubW9kZSA9IHRoaXMuZmlsZU9wdGlvbnMubW9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZzXzEud3JpdGVGaWxlU3luYyh0aGlzLnRlbXBGaWxlLCB0aGlzLnRleHQsIG9wdCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGNyZWF0ZUZpbGVFcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENyZWF0ZUZpbGVFcnJvcl8xLkNyZWF0ZUZpbGVFcnJvcihjcmVhdGVGaWxlRXJyb3IpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBFeHRlcm5hbEVkaXRvci5wcm90b3R5cGUucmVhZFRlbXBvcmFyeUZpbGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgdGVtcEZpbGVCdWZmZXIgPSBmc18xLnJlYWRGaWxlU3luYyh0aGlzLnRlbXBGaWxlKTtcbiAgICAgICAgICAgIGlmICh0ZW1wRmlsZUJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHQgPSBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGVuY29kaW5nID0gY2hhcmRldF8xLmRldGVjdCh0ZW1wRmlsZUJ1ZmZlcikudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWljb252X2xpdGVfMS5lbmNvZGluZ0V4aXN0cyhlbmNvZGluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUHJvYmFibHkgYSBiYWQgaWRlYSwgYnV0IHdpbGwgYXQgbGVhc3QgcHJldmVudCBjcmFzaGluZ1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZyA9IFwidXRmOFwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRleHQgPSBpY29udl9saXRlXzEuZGVjb2RlKHRlbXBGaWxlQnVmZmVyLCBlbmNvZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKHJlYWRGaWxlRXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSZWFkRmlsZUVycm9yXzEuUmVhZEZpbGVFcnJvcihyZWFkRmlsZUVycm9yKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRXh0ZXJuYWxFZGl0b3IucHJvdG90eXBlLnJlbW92ZVRlbXBvcmFyeUZpbGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmc18xLnVubGlua1N5bmModGhpcy50ZW1wRmlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKHJlbW92ZUZpbGVFcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJlbW92ZUZpbGVFcnJvcl8xLlJlbW92ZUZpbGVFcnJvcihyZW1vdmVGaWxlRXJyb3IpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBFeHRlcm5hbEVkaXRvci5wcm90b3R5cGUubGF1bmNoRWRpdG9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGVkaXRvclByb2Nlc3MgPSBjaGlsZF9wcm9jZXNzXzEuc3Bhd25TeW5jKHRoaXMuZWRpdG9yLmJpbiwgdGhpcy5lZGl0b3IuYXJncy5jb25jYXQoW3RoaXMudGVtcEZpbGVdKSwgeyBzdGRpbzogXCJpbmhlcml0XCIgfSk7XG4gICAgICAgICAgICB0aGlzLmxhc3RFeGl0U3RhdHVzID0gZWRpdG9yUHJvY2Vzcy5zdGF0dXM7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGxhdW5jaEVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTGF1bmNoRWRpdG9yRXJyb3JfMS5MYXVuY2hFZGl0b3JFcnJvcihsYXVuY2hFcnJvcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEV4dGVybmFsRWRpdG9yLnByb3RvdHlwZS5sYXVuY2hFZGl0b3JBc3luYyA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGVkaXRvclByb2Nlc3MgPSBjaGlsZF9wcm9jZXNzXzEuc3Bhd24odGhpcy5lZGl0b3IuYmluLCB0aGlzLmVkaXRvci5hcmdzLmNvbmNhdChbdGhpcy50ZW1wRmlsZV0pLCB7IHN0ZGlvOiBcImluaGVyaXRcIiB9KTtcbiAgICAgICAgICAgIGVkaXRvclByb2Nlc3Mub24oXCJleGl0XCIsIGZ1bmN0aW9uIChjb2RlKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMubGFzdEV4aXRTdGF0dXMgPSBjb2RlO1xuICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZShjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAobGF1bmNoRXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBMYXVuY2hFZGl0b3JFcnJvcl8xLkxhdW5jaEVkaXRvckVycm9yKGxhdW5jaEVycm9yKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEV4dGVybmFsRWRpdG9yO1xufSgpKTtcbmV4cG9ydHMuRXh0ZXJuYWxFZGl0b3IgPSBFeHRlcm5hbEVkaXRvcjtcbiIsIi8qKlxuICogYGVkaXRvcmAgdHlwZSBwcm9tcHRcbiAqL1xuXG5pbXBvcnQgY29sb3JzIGZyb20gJ3lvY3RvY29sb3JzLWNqcyc7XG5pbXBvcnQgeyBlZGl0QXN5bmMgfSBmcm9tICdleHRlcm5hbC1lZGl0b3InO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IG9ic2VydmUgZnJvbSAnLi4vdXRpbHMvZXZlbnRzLmpzJztcbmltcG9ydCBCYXNlIGZyb20gJy4vYmFzZS5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXRvclByb21wdCBleHRlbmRzIEJhc2Uge1xuICAvKipcbiAgICogU3RhcnQgdGhlIElucXVpcnkgc2Vzc2lvblxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2IgICAgICBDYWxsYmFjayB3aGVuIHByb21wdCBpcyBkb25lXG4gICAqIEByZXR1cm4ge3RoaXN9XG4gICAqL1xuXG4gIF9ydW4oY2IpIHtcbiAgICB0aGlzLmRvbmUgPSBjYjtcblxuICAgIHRoaXMuZWRpdG9yUmVzdWx0ID0gbmV3IFN1YmplY3QoKTtcblxuICAgIC8vIE9wZW4gRWRpdG9yIG9uIFwibGluZVwiIChFbnRlciBLZXkpXG4gICAgY29uc3QgZXZlbnRzID0gb2JzZXJ2ZSh0aGlzLnJsKTtcbiAgICB0aGlzLmxpbmVTdWJzY3JpcHRpb24gPSBldmVudHMubGluZS5zdWJzY3JpYmUodGhpcy5zdGFydEV4dGVybmFsRWRpdG9yLmJpbmQodGhpcykpO1xuICAgIGNvbnN0IHdhaXRVc2VySW5wdXQgPVxuICAgICAgdGhpcy5vcHQud2FpdFVzZXJJbnB1dCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHRoaXMub3B0LndhaXRVc2VySW5wdXQ7XG5cbiAgICAvLyBUcmlnZ2VyIFZhbGlkYXRpb24gd2hlbiBlZGl0b3IgY2xvc2VzXG4gICAgY29uc3QgdmFsaWRhdGlvbiA9IHRoaXMuaGFuZGxlU3VibWl0RXZlbnRzKHRoaXMuZWRpdG9yUmVzdWx0KTtcbiAgICB2YWxpZGF0aW9uLnN1Y2Nlc3MuZm9yRWFjaCh0aGlzLm9uRW5kLmJpbmQodGhpcykpO1xuICAgIHZhbGlkYXRpb24uZXJyb3IuZm9yRWFjaCh0aGlzLm9uRXJyb3IuYmluZCh0aGlzKSk7XG5cbiAgICAvLyBQcmV2ZW50cyBkZWZhdWx0IGZyb20gYmVpbmcgcHJpbnRlZCBvbiBzY3JlZW4gKGNhbiBsb29rIHdlaXJkIHdpdGggbXVsdGlwbGUgbGluZXMpXG4gICAgdGhpcy5jdXJyZW50VGV4dCA9IHRoaXMub3B0LmRlZmF1bHQ7XG4gICAgdGhpcy5vcHQuZGVmYXVsdCA9IG51bGw7XG5cbiAgICAvLyBJbml0XG4gICAgaWYgKHdhaXRVc2VySW5wdXQpIHtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhcnRFeHRlcm5hbEVkaXRvcigpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgcHJvbXB0IHRvIHNjcmVlblxuICAgKiBAcmV0dXJuIHtFZGl0b3JQcm9tcHR9IHNlbGZcbiAgICovXG5cbiAgcmVuZGVyKGVycm9yKSB7XG4gICAgbGV0IGJvdHRvbUNvbnRlbnQgPSAnJztcbiAgICBsZXQgbWVzc2FnZSA9IHRoaXMuZ2V0UXVlc3Rpb24oKTtcblxuICAgIG1lc3NhZ2UgKz1cbiAgICAgIHRoaXMuc3RhdHVzID09PSAnYW5zd2VyZWQnXG4gICAgICAgID8gY29sb3JzLmRpbSgnUmVjZWl2ZWQnKVxuICAgICAgICA6IGNvbG9ycy5kaW0oJ1ByZXNzIDxlbnRlcj4gdG8gbGF1bmNoIHlvdXIgcHJlZmVycmVkIGVkaXRvci4nKTtcblxuICAgIGlmIChlcnJvcikge1xuICAgICAgYm90dG9tQ29udGVudCA9IGNvbG9ycy5yZWQoJz4+ICcpICsgZXJyb3I7XG4gICAgfVxuXG4gICAgdGhpcy5zY3JlZW4ucmVuZGVyKG1lc3NhZ2UsIGJvdHRvbUNvbnRlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIExhdW5jaCAkRURJVE9SIG9uIHVzZXIgcHJlc3MgZW50ZXJcbiAgICovXG5cbiAgc3RhcnRFeHRlcm5hbEVkaXRvcigpIHtcbiAgICAvLyBQYXVzZSBSZWFkbGluZSB0byBwcmV2ZW50IHN0ZGluIGFuZCBzdGRvdXQgZnJvbSBiZWluZyBtb2RpZmllZCB3aGlsZSB0aGUgZWRpdG9yIGlzIHNob3dpbmdcbiAgICB0aGlzLnJsLnBhdXNlKCk7XG4gICAgZWRpdEFzeW5jKHRoaXMuY3VycmVudFRleHQsIHRoaXMuZW5kRXh0ZXJuYWxFZGl0b3IuYmluZCh0aGlzKSwge1xuICAgICAgcG9zdGZpeDogdGhpcy5vcHQucG9zdGZpeCA/PyAnLnR4dCcsXG4gICAgfSk7XG4gIH1cblxuICBlbmRFeHRlcm5hbEVkaXRvcihlcnJvciwgcmVzdWx0KSB7XG4gICAgdGhpcy5ybC5yZXN1bWUoKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHRoaXMuZWRpdG9yUmVzdWx0LmVycm9yKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lZGl0b3JSZXN1bHQubmV4dChyZXN1bHQpO1xuICAgIH1cbiAgfVxuXG4gIG9uRW5kKHN0YXRlKSB7XG4gICAgdGhpcy5lZGl0b3JSZXN1bHQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmxpbmVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmFuc3dlciA9IHN0YXRlLnZhbHVlO1xuICAgIHRoaXMuc3RhdHVzID0gJ2Fuc3dlcmVkJztcbiAgICAvLyBSZS1yZW5kZXIgcHJvbXB0XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLnNjcmVlbi5kb25lKCk7XG4gICAgdGhpcy5kb25lKHRoaXMuYW5zd2VyKTtcbiAgfVxuXG4gIG9uRXJyb3Ioc3RhdGUpIHtcbiAgICB0aGlzLnJlbmRlcihzdGF0ZS5pc1ZhbGlkKTtcbiAgfVxufVxuIiwidmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5cbm1vZHVsZS5leHBvcnRzID0gTXV0ZVN0cmVhbVxuXG4vLyB2YXIgb3V0ID0gbmV3IE11dGVTdHJlYW0ocHJvY2Vzcy5zdGRvdXQpXG4vLyBhcmd1bWVudCBhdXRvLXBpcGVzXG5mdW5jdGlvbiBNdXRlU3RyZWFtIChvcHRzKSB7XG4gIFN0cmVhbS5hcHBseSh0aGlzKVxuICBvcHRzID0gb3B0cyB8fCB7fVxuICB0aGlzLndyaXRhYmxlID0gdGhpcy5yZWFkYWJsZSA9IHRydWVcbiAgdGhpcy5tdXRlZCA9IGZhbHNlXG4gIHRoaXMub24oJ3BpcGUnLCB0aGlzLl9vbnBpcGUpXG4gIHRoaXMucmVwbGFjZSA9IG9wdHMucmVwbGFjZVxuXG4gIC8vIEZvciByZWFkbGluZS10eXBlIHNpdHVhdGlvbnNcbiAgLy8gVGhpcyBtdWNoIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUgYmVpbmcgcmVkcmF3biBhZnRlciBhIGN0cmwgY2hhclxuICAvLyBpcyBzZWVuIChzdWNoIGFzIGJhY2tzcGFjZSkgd29uJ3QgYmUgcmVkcmF3biBhcyB0aGUgcmVwbGFjZW1lbnRcbiAgdGhpcy5fcHJvbXB0ID0gb3B0cy5wcm9tcHQgfHwgbnVsbFxuICB0aGlzLl9oYWRDb250cm9sID0gZmFsc2Vcbn1cblxuTXV0ZVN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN0cmVhbS5wcm90b3R5cGUpXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNdXRlU3RyZWFtLnByb3RvdHlwZSwgJ2NvbnN0cnVjdG9yJywge1xuICB2YWx1ZTogTXV0ZVN0cmVhbSxcbiAgZW51bWVyYWJsZTogZmFsc2Vcbn0pXG5cbk11dGVTdHJlYW0ucHJvdG90eXBlLm11dGUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMubXV0ZWQgPSB0cnVlXG59XG5cbk11dGVTdHJlYW0ucHJvdG90eXBlLnVubXV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5tdXRlZCA9IGZhbHNlXG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNdXRlU3RyZWFtLnByb3RvdHlwZSwgJ19vbnBpcGUnLCB7XG4gIHZhbHVlOiBvblBpcGUsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICB3cml0YWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KVxuXG5mdW5jdGlvbiBvblBpcGUgKHNyYykge1xuICB0aGlzLl9zcmMgPSBzcmNcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE11dGVTdHJlYW0ucHJvdG90eXBlLCAnaXNUVFknLCB7XG4gIGdldDogZ2V0SXNUVFksXG4gIHNldDogc2V0SXNUVFksXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSlcblxuZnVuY3Rpb24gZ2V0SXNUVFkgKCkge1xuICByZXR1cm4oICh0aGlzLl9kZXN0KSA/IHRoaXMuX2Rlc3QuaXNUVFlcbiAgICAgICAgOiAodGhpcy5fc3JjKSA/IHRoaXMuX3NyYy5pc1RUWVxuICAgICAgICA6IGZhbHNlXG4gICAgICAgIClcbn1cblxuLy8gYmFzaWNhbGx5IGp1c3QgZ2V0IHJlcGxhY2UgdGhlIGdldHRlci9zZXR0ZXIgd2l0aCBhIHJlZ3VsYXIgdmFsdWVcbmZ1bmN0aW9uIHNldElzVFRZIChpc1RUWSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2lzVFRZJywge1xuICAgIHZhbHVlOiBpc1RUWSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTXV0ZVN0cmVhbS5wcm90b3R5cGUsICdyb3dzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4oIHRoaXMuX2Rlc3QgPyB0aGlzLl9kZXN0LnJvd3NcbiAgICAgICAgICA6IHRoaXMuX3NyYyA/IHRoaXMuX3NyYy5yb3dzXG4gICAgICAgICAgOiB1bmRlZmluZWQgKVxuICB9LCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE11dGVTdHJlYW0ucHJvdG90eXBlLCAnY29sdW1ucycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuKCB0aGlzLl9kZXN0ID8gdGhpcy5fZGVzdC5jb2x1bW5zXG4gICAgICAgICAgOiB0aGlzLl9zcmMgPyB0aGlzLl9zcmMuY29sdW1uc1xuICAgICAgICAgIDogdW5kZWZpbmVkIClcbiAgfSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pXG5cblxuTXV0ZVN0cmVhbS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uIChkZXN0LCBvcHRpb25zKSB7XG4gIHRoaXMuX2Rlc3QgPSBkZXN0XG4gIHJldHVybiBTdHJlYW0ucHJvdG90eXBlLnBpcGUuY2FsbCh0aGlzLCBkZXN0LCBvcHRpb25zKVxufVxuXG5NdXRlU3RyZWFtLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuX3NyYykgcmV0dXJuIHRoaXMuX3NyYy5wYXVzZSgpXG59XG5cbk11dGVTdHJlYW0ucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuX3NyYykgcmV0dXJuIHRoaXMuX3NyYy5yZXN1bWUoKVxufVxuXG5NdXRlU3RyZWFtLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChjKSB7XG4gIGlmICh0aGlzLm11dGVkKSB7XG4gICAgaWYgKCF0aGlzLnJlcGxhY2UpIHJldHVybiB0cnVlXG4gICAgaWYgKGMubWF0Y2goL15cXHUwMDFiLykpIHtcbiAgICAgIGlmKGMuaW5kZXhPZih0aGlzLl9wcm9tcHQpID09PSAwKSB7XG4gICAgICAgIGMgPSBjLnN1YnN0cih0aGlzLl9wcm9tcHQubGVuZ3RoKTtcbiAgICAgICAgYyA9IGMucmVwbGFjZSgvLi9nLCB0aGlzLnJlcGxhY2UpO1xuICAgICAgICBjID0gdGhpcy5fcHJvbXB0ICsgYztcbiAgICAgIH1cbiAgICAgIHRoaXMuX2hhZENvbnRyb2wgPSB0cnVlXG4gICAgICByZXR1cm4gdGhpcy5lbWl0KCdkYXRhJywgYylcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuX3Byb21wdCAmJiB0aGlzLl9oYWRDb250cm9sICYmXG4gICAgICAgICAgYy5pbmRleE9mKHRoaXMuX3Byb21wdCkgPT09IDApIHtcbiAgICAgICAgdGhpcy5faGFkQ29udHJvbCA9IGZhbHNlXG4gICAgICAgIHRoaXMuZW1pdCgnZGF0YScsIHRoaXMuX3Byb21wdClcbiAgICAgICAgYyA9IGMuc3Vic3RyKHRoaXMuX3Byb21wdC5sZW5ndGgpXG4gICAgICB9XG4gICAgICBjID0gYy50b1N0cmluZygpLnJlcGxhY2UoLy4vZywgdGhpcy5yZXBsYWNlKVxuICAgIH1cbiAgfVxuICB0aGlzLmVtaXQoJ2RhdGEnLCBjKVxufVxuXG5NdXRlU3RyZWFtLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoYykge1xuICBpZiAodGhpcy5tdXRlZCkge1xuICAgIGlmIChjICYmIHRoaXMucmVwbGFjZSkge1xuICAgICAgYyA9IGMudG9TdHJpbmcoKS5yZXBsYWNlKC8uL2csIHRoaXMucmVwbGFjZSlcbiAgICB9IGVsc2Uge1xuICAgICAgYyA9IG51bGxcbiAgICB9XG4gIH1cbiAgaWYgKGMpIHRoaXMuZW1pdCgnZGF0YScsIGMpXG4gIHRoaXMuZW1pdCgnZW5kJylcbn1cblxuZnVuY3Rpb24gcHJveHkgKGZuKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7XG4gIHZhciBkID0gdGhpcy5fZGVzdFxuICB2YXIgcyA9IHRoaXMuX3NyY1xuICBpZiAoZCAmJiBkW2ZuXSkgZFtmbl0uYXBwbHkoZCwgYXJndW1lbnRzKVxuICBpZiAocyAmJiBzW2ZuXSkgc1tmbl0uYXBwbHkocywgYXJndW1lbnRzKVxufX1cblxuTXV0ZVN0cmVhbS5wcm90b3R5cGUuZGVzdHJveSA9IHByb3h5KCdkZXN0cm95Jylcbk11dGVTdHJlYW0ucHJvdG90eXBlLmRlc3Ryb3lTb29uID0gcHJveHkoJ2Rlc3Ryb3lTb29uJylcbk11dGVTdHJlYW0ucHJvdG90eXBlLmNsb3NlID0gcHJveHkoJ2Nsb3NlJylcbiIsImltcG9ydCByZWFkbGluZSBmcm9tICdub2RlOnJlYWRsaW5lJztcbmltcG9ydCBNdXRlU3RyZWFtIGZyb20gJ211dGUtc3RyZWFtJztcblxuLyoqXG4gKiBCYXNlIGludGVyZmFjZSBjbGFzcyBvdGhlciBjYW4gaW5oZXJpdHMgZnJvbVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVJIHtcbiAgY29uc3RydWN0b3Iob3B0KSB7XG4gICAgLy8gSW5zdGFudGlhdGUgdGhlIFJlYWRsaW5lIGludGVyZmFjZVxuICAgIC8vIEBOb3RlOiBEb24ndCByZWFzc2lnbiBpZiBhbHJlYWR5IHByZXNlbnQgKGFsbG93IHRlc3QgdG8gb3ZlcnJpZGUgdGhlIFN0cmVhbSlcbiAgICB0aGlzLnJsIHx8PSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoc2V0dXBSZWFkbGluZU9wdGlvbnMob3B0KSk7XG5cbiAgICB0aGlzLnJsLnJlc3VtZSgpO1xuXG4gICAgdGhpcy5vbkZvcmNlQ2xvc2UgPSB0aGlzLm9uRm9yY2VDbG9zZS5iaW5kKHRoaXMpO1xuXG4gICAgLy8gTWFrZSBzdXJlIG5ldyBwcm9tcHQgc3RhcnQgb24gYSBuZXdsaW5lIHdoZW4gY2xvc2luZ1xuICAgIHByb2Nlc3Mub24oJ2V4aXQnLCB0aGlzLm9uRm9yY2VDbG9zZSk7XG5cbiAgICAvLyBUZXJtaW5hdGUgcHJvY2VzcyBvbiBTSUdJTlQgKHdoaWNoIHdpbGwgY2FsbCBwcm9jZXNzLm9uKCdleGl0JykgaW4gcmV0dXJuKVxuICAgIHRoaXMucmwub24oJ1NJR0lOVCcsIHRoaXMub25Gb3JjZUNsb3NlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgdGhlIF5DIGV4aXRcbiAgICogQHJldHVybiB7bnVsbH1cbiAgICovXG5cbiAgb25Gb3JjZUNsb3NlKCkge1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICBwcm9jZXNzLmtpbGwocHJvY2Vzcy5waWQsICdTSUdJTlQnKTtcbiAgICBjb25zb2xlLmxvZygnJyk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgdGhlIGludGVyZmFjZSBhbmQgY2xlYW51cCBsaXN0ZW5lcnNcbiAgICovXG5cbiAgY2xvc2UoKSB7XG4gICAgLy8gUmVtb3ZlIGV2ZW50cyBsaXN0ZW5lcnNcbiAgICB0aGlzLnJsLnJlbW92ZUxpc3RlbmVyKCdTSUdJTlQnLCB0aGlzLm9uRm9yY2VDbG9zZSk7XG4gICAgcHJvY2Vzcy5yZW1vdmVMaXN0ZW5lcignZXhpdCcsIHRoaXMub25Gb3JjZUNsb3NlKTtcblxuICAgIHRoaXMucmwub3V0cHV0LnVubXV0ZSgpO1xuXG4gICAgaWYgKHRoaXMuYWN0aXZlUHJvbXB0ICYmIHR5cGVvZiB0aGlzLmFjdGl2ZVByb21wdC5jbG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5hY3RpdmVQcm9tcHQuY2xvc2UoKTtcbiAgICB9XG5cbiAgICAvLyBDbG9zZSB0aGUgcmVhZGxpbmVcbiAgICB0aGlzLnJsLm91dHB1dC5lbmQoKTtcbiAgICB0aGlzLnJsLnBhdXNlKCk7XG4gICAgdGhpcy5ybC5jbG9zZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldHVwUmVhZGxpbmVPcHRpb25zKG9wdCA9IHt9KSB7XG4gIC8vIElucXVpcmVyIDgueDpcbiAgLy8gb3B0LnNraXBUVFlDaGVja3MgPSBvcHQuc2tpcFRUWUNoZWNrcyA9PT0gdW5kZWZpbmVkID8gb3B0LmlucHV0ICE9PSB1bmRlZmluZWQgOiBvcHQuc2tpcFRUWUNoZWNrcztcbiAgb3B0LnNraXBUVFlDaGVja3MgPSBvcHQuc2tpcFRUWUNoZWNrcyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdC5za2lwVFRZQ2hlY2tzO1xuXG4gIC8vIERlZmF1bHQgYGlucHV0YCB0byBzdGRpblxuICBjb25zdCBpbnB1dCA9IG9wdC5pbnB1dCB8fCBwcm9jZXNzLnN0ZGluO1xuXG4gIC8vIENoZWNrIGlmIHByb21wdCBpcyBiZWluZyBjYWxsZWQgaW4gVFRZIGVudmlyb25tZW50XG4gIC8vIElmIGl0IGlzbid0IHJldHVybiBhIGZhaWxlZCBwcm9taXNlXG4gIGlmICghb3B0LnNraXBUVFlDaGVja3MgJiYgIWlucHV0LmlzVFRZKSB7XG4gICAgY29uc3Qgbm9uVHR5RXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAnUHJvbXB0cyBjYW4gbm90IGJlIG1lYW5pbmdmdWxseSByZW5kZXJlZCBpbiBub24tVFRZIGVudmlyb25tZW50cycsXG4gICAgKTtcbiAgICBub25UdHlFcnJvci5pc1R0eUVycm9yID0gdHJ1ZTtcbiAgICB0aHJvdyBub25UdHlFcnJvcjtcbiAgfVxuXG4gIC8vIEFkZCBtdXRlIGNhcGFiaWxpdGllcyB0byB0aGUgb3V0cHV0XG4gIGNvbnN0IG1zID0gbmV3IE11dGVTdHJlYW0oKTtcbiAgbXMucGlwZShvcHQub3V0cHV0IHx8IHByb2Nlc3Muc3Rkb3V0KTtcbiAgY29uc3Qgb3V0cHV0ID0gbXM7XG5cbiAgcmV0dXJuIHtcbiAgICB0ZXJtaW5hbDogdHJ1ZSxcbiAgICAuLi5vcHQsXG4gICAgaW5wdXQsXG4gICAgb3V0cHV0LFxuICB9O1xufVxuIiwiLyoqXG4gKiBTdGlja3kgYm90dG9tIGJhciB1c2VyIGludGVyZmFjZVxuICovXG5cbmltcG9ydCB7IFdyaXRhYmxlIH0gZnJvbSAnbm9kZTpzdHJlYW0nO1xuaW1wb3J0ICogYXMgcmxVdGlscyBmcm9tICcuLi91dGlscy9yZWFkbGluZS5qcyc7XG5pbXBvcnQgQmFzZSBmcm9tICcuL2Jhc2VVSS5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJvdHRvbUJhciBleHRlbmRzIEJhc2Uge1xuICBjb25zdHJ1Y3RvcihvcHQgPSB7fSkge1xuICAgIHN1cGVyKG9wdCk7XG5cbiAgICB0aGlzLmxvZyA9IG5ldyBXcml0YWJsZSh7XG4gICAgICB3cml0ZTogKGNodW5rLCBlbmNvZGluZywgY2IpID0+IHtcbiAgICAgICAgdGhpcy53cml0ZUxvZyhjaHVuayk7XG4gICAgICAgIGNiKCk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5ib3R0b21CYXIgPSBvcHQuYm90dG9tQmFyIHx8ICcnO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBwcm9tcHQgdG8gc2NyZWVuXG4gICAqIEByZXR1cm4ge0JvdHRvbUJhcn0gc2VsZlxuICAgKi9cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy53cml0ZSh0aGlzLmJvdHRvbUJhcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjbGVhbigpIHtcbiAgICBybFV0aWxzLmNsZWFyTGluZSh0aGlzLnJsLCB0aGlzLmJvdHRvbUJhci5zcGxpdCgnXFxuJykubGVuZ3RoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGJvdHRvbSBiYXIgY29udGVudCBhbmQgcmVyZW5kZXJcbiAgICogQHBhcmFtICB7U3RyaW5nfSBib3R0b21CYXIgQm90dG9tIGJhciBjb250ZW50XG4gICAqIEByZXR1cm4ge0JvdHRvbUJhcn0gICAgICAgICAgIHNlbGZcbiAgICovXG5cbiAgdXBkYXRlQm90dG9tQmFyKGJvdHRvbUJhcikge1xuICAgIHJsVXRpbHMuY2xlYXJMaW5lKHRoaXMucmwsIDEpO1xuICAgIHRoaXMucmwub3V0cHV0LnVubXV0ZSgpO1xuICAgIHRoaXMuY2xlYW4oKTtcbiAgICB0aGlzLmJvdHRvbUJhciA9IGJvdHRvbUJhcjtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMucmwub3V0cHV0Lm11dGUoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSBvdXQgbG9nIGRhdGFcbiAgICogQHBhcmFtIHtTdHJpbmd9IGRhdGEgLSBUaGUgbG9nIGRhdGEgdG8gYmUgb3V0cHV0XG4gICAqIEByZXR1cm4ge0JvdHRvbUJhcn0gc2VsZlxuICAgKi9cblxuICB3cml0ZUxvZyhkYXRhKSB7XG4gICAgdGhpcy5ybC5vdXRwdXQudW5tdXRlKCk7XG4gICAgdGhpcy5jbGVhbigpO1xuICAgIHRoaXMucmwub3V0cHV0LndyaXRlKHRoaXMuZW5mb3JjZUxGKGRhdGEudG9TdHJpbmcoKSkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5ybC5vdXRwdXQubXV0ZSgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2Ugc3VyZSBsaW5lIGVuZCBvbiBhIGxpbmUgZmVlZFxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IHN0ciBJbnB1dCBzdHJpbmdcbiAgICogQHJldHVybiB7U3RyaW5nfSAgICAgVGhlIGlucHV0IHN0cmluZyB3aXRoIGEgZmluYWwgbGluZSBmZWVkXG4gICAqL1xuXG4gIGVuZm9yY2VMRihzdHIpIHtcbiAgICByZXR1cm4gL1tcXG5cXHJdJC8udGVzdChzdHIpID8gc3RyIDogc3RyICsgJ1xcbic7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIGZvciB3cml0aW5nIG1lc3NhZ2UgaW4gUHJvbXB0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gYmUgb3V0cHV0XG4gICAqL1xuICB3cml0ZShtZXNzYWdlKSB7XG4gICAgY29uc3QgbXNnTGluZXMgPSBtZXNzYWdlLnNwbGl0KC9cXG4vKTtcbiAgICB0aGlzLmhlaWdodCA9IG1zZ0xpbmVzLmxlbmd0aDtcblxuICAgIC8vIFdyaXRlIG1lc3NhZ2UgdG8gc2NyZWVuIGFuZCBzZXRQcm9tcHQgdG8gY29udHJvbCBiYWNrc3BhY2VcbiAgICB0aGlzLnJsLnNldFByb21wdChtc2dMaW5lcy5hdCgtMSkpO1xuXG4gICAgaWYgKHRoaXMucmwub3V0cHV0LnJvd3MgPT09IDAgJiYgdGhpcy5ybC5vdXRwdXQuY29sdW1ucyA9PT0gMCkge1xuICAgICAgLyogV2hlbiBpdCdzIGEgdHR5IHRocm91Z2ggc2VyaWFsIHBvcnQgdGhlcmUncyBubyB0ZXJtaW5hbCBpbmZvIGFuZCB0aGUgcmVuZGVyIHdpbGwgbWFsZnVuY3Rpb24sXG4gICAgICAgICBzbyB3ZSBuZWVkIGVuZm9yY2UgdGhlIGN1cnNvciB0byBsb2NhdGUgdG8gdGhlIGxlZnRtb3N0IHBvc2l0aW9uIGZvciByZW5kZXJpbmcuICovXG4gICAgICBybFV0aWxzLmxlZnQodGhpcy5ybCwgbWVzc2FnZS5sZW5ndGggKyB0aGlzLnJsLmxpbmUubGVuZ3RoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJsLm91dHB1dC53cml0ZShtZXNzYWdlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgZnJvbSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCBydW5Bc3luYyBmcm9tICdydW4tYXN5bmMnO1xuXG4vKipcbiAqIFJlc29sdmUgYSBxdWVzdGlvbiBwcm9wZXJ0eSB2YWx1ZSBpZiBpdCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbi5cbiAqIFRoaXMgbWV0aG9kIHdpbGwgb3ZlcndyaXRlIHRoZSBwcm9wZXJ0eSBvbiB0aGUgcXVlc3Rpb24gb2JqZWN0IHdpdGggdGhlIHJlY2VpdmVkIHZhbHVlLlxuICogQHBhcmFtICB7T2JqZWN0fSBxdWVzdGlvbiAtIFF1ZXN0aW9uIG9iamVjdFxuICogQHBhcmFtICB7U3RyaW5nfSBwcm9wICAgICAtIFByb3BlcnR5IHRvIGZldGNoIG5hbWVcbiAqIEBwYXJhbSAge09iamVjdH0gYW5zd2VycyAgLSBBbnN3ZXJzIG9iamVjdFxuICogQHJldHVybiB7UnguT2JzZXJ2YWJsZX0gICAtIE9ic2VydmFibGUgZW1pdHRpbmcgb25jZSB2YWx1ZSBpcyBrbm93blxuICovXG5cbmV4cG9ydCBjb25zdCBmZXRjaEFzeW5jUXVlc3Rpb25Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChxdWVzdGlvbiwgcHJvcCwgYW5zd2Vycykge1xuICBpZiAodHlwZW9mIHF1ZXN0aW9uW3Byb3BdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG9mKHF1ZXN0aW9uKTtcbiAgfVxuXG4gIHJldHVybiBmcm9tKFxuICAgIHJ1bkFzeW5jKHF1ZXN0aW9uW3Byb3BdKShhbnN3ZXJzKS50aGVuKCh2YWx1ZSkgPT4ge1xuICAgICAgcXVlc3Rpb25bcHJvcF0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiBxdWVzdGlvbjtcbiAgICB9KSxcbiAgKTtcbn07XG4iLCJjb25zdCBfID0ge1xuICBzZXQ6IChvYmosIHBhdGggPSAnJywgdmFsdWUpID0+IHtcbiAgICBsZXQgcG9pbnRlciA9IG9iajtcbiAgICBwYXRoLnNwbGl0KCcuJykuZm9yRWFjaCgoa2V5LCBpbmRleCwgYXJyKSA9PiB7XG4gICAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJyB8fCBrZXkgPT09ICdjb25zdHJ1Y3RvcicpIHJldHVybjtcblxuICAgICAgaWYgKGluZGV4ID09PSBhcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICBwb2ludGVyW2tleV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoIShrZXkgaW4gcG9pbnRlcikpIHtcbiAgICAgICAgcG9pbnRlcltrZXldID0ge307XG4gICAgICB9XG5cbiAgICAgIHBvaW50ZXIgPSBwb2ludGVyW2tleV07XG4gICAgfSk7XG4gIH0sXG4gIGdldDogKG9iaiwgcGF0aCA9ICcnLCBkZWZhdWx0VmFsdWUpID0+IHtcbiAgICBjb25zdCB0cmF2ZWwgPSAocmVnZXhwKSA9PlxuICAgICAgU3RyaW5nLnByb3RvdHlwZS5zcGxpdFxuICAgICAgICAuY2FsbChwYXRoLCByZWdleHApXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLnJlZHVjZSgocmVzLCBrZXkpID0+IChyZXMgIT09IG51bGwgJiYgcmVzICE9PSB1bmRlZmluZWQgPyByZXNba2V5XSA6IHJlcyksIG9iaik7XG4gICAgY29uc3QgcmVzdWx0ID0gdHJhdmVsKC9bLFtcXF1dKz8vKSB8fCB0cmF2ZWwoL1ssLltcXF1dKz8vKTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgfHwgcmVzdWx0ID09PSBvYmogPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XG4gIH0sXG59O1xuXG5pbXBvcnQge1xuICBkZWZlcixcbiAgRU1QVFksXG4gIGZyb20sXG4gIG9mLFxuICBjb25jYXRNYXAsXG4gIGZpbHRlcixcbiAgcHVibGlzaCxcbiAgcmVkdWNlLFxuICBpc09ic2VydmFibGUsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHJ1bkFzeW5jIGZyb20gJ3J1bi1hc3luYyc7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuLi91dGlscy91dGlscy5qcyc7XG5pbXBvcnQgQmFzZSBmcm9tICcuL2Jhc2VVSS5qcyc7XG5cbi8qKlxuICogQmFzZSBpbnRlcmZhY2UgY2xhc3Mgb3RoZXIgY2FuIGluaGVyaXRzIGZyb21cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvbXB0VUkgZXh0ZW5kcyBCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvbXB0cywgb3B0KSB7XG4gICAgc3VwZXIob3B0KTtcbiAgICB0aGlzLnByb21wdHMgPSBwcm9tcHRzO1xuICB9XG5cbiAgcnVuKHF1ZXN0aW9ucywgYW5zd2Vycykge1xuICAgIC8vIEtlZXAgZ2xvYmFsIHJlZmVyZW5jZSB0byB0aGUgYW5zd2Vyc1xuICAgIHRoaXMuYW5zd2VycyA9IHR5cGVvZiBhbnN3ZXJzID09PSAnb2JqZWN0JyA/IHsgLi4uYW5zd2VycyB9IDoge307XG5cbiAgICBsZXQgb2JzO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHF1ZXN0aW9ucykpIHtcbiAgICAgIG9icyA9IGZyb20ocXVlc3Rpb25zKTtcbiAgICB9IGVsc2UgaWYgKGlzT2JzZXJ2YWJsZShxdWVzdGlvbnMpKSB7XG4gICAgICBvYnMgPSBxdWVzdGlvbnM7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIE9iamVjdC52YWx1ZXMocXVlc3Rpb25zKS5ldmVyeShcbiAgICAgICAgKG1heWJlUXVlc3Rpb24pID0+XG4gICAgICAgICAgdHlwZW9mIG1heWJlUXVlc3Rpb24gPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgIUFycmF5LmlzQXJyYXkobWF5YmVRdWVzdGlvbikgJiZcbiAgICAgICAgICBtYXliZVF1ZXN0aW9uICE9IG51bGwsXG4gICAgICApXG4gICAgKSB7XG4gICAgICAvLyBDYXNlOiBDYWxsZWQgd2l0aCBhIHNldCBvZiB7IG5hbWU6IHF1ZXN0aW9uIH1cbiAgICAgIG9icyA9IGZyb20oXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHF1ZXN0aW9ucykubWFwKChbbmFtZSwgcXVlc3Rpb25dKSA9PiAoe1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgLi4ucXVlc3Rpb24sXG4gICAgICAgIH0pKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENhc2U6IENhbGxlZCB3aXRoIGEgc2luZ2xlIHF1ZXN0aW9uIGNvbmZpZ1xuICAgICAgb2JzID0gZnJvbShbcXVlc3Rpb25zXSk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzID0gb2JzLnBpcGUoXG4gICAgICBjb25jYXRNYXAodGhpcy5wcm9jZXNzUXVlc3Rpb24uYmluZCh0aGlzKSksXG4gICAgICBwdWJsaXNoKCksIC8vIENyZWF0ZXMgYSBob3QgT2JzZXJ2YWJsZS4gSXQgcHJldmVudHMgZHVwbGljYXRpbmcgcHJvbXB0cy5cbiAgICApO1xuXG4gICAgdGhpcy5wcm9jZXNzLmNvbm5lY3QoKTtcblxuICAgIHJldHVybiB0aGlzLnByb2Nlc3NcbiAgICAgIC5waXBlKFxuICAgICAgICByZWR1Y2UoKGFuc3dlcnNPYmosIGFuc3dlcikgPT4ge1xuICAgICAgICAgIF8uc2V0KGFuc3dlcnNPYmosIGFuc3dlci5uYW1lLCBhbnN3ZXIuYW5zd2VyKTtcbiAgICAgICAgICByZXR1cm4gYW5zd2Vyc09iajtcbiAgICAgICAgfSwgdGhpcy5hbnN3ZXJzKSxcbiAgICAgIClcbiAgICAgIC50b1Byb21pc2UoUHJvbWlzZSlcbiAgICAgIC50aGVuKHRoaXMub25Db21wbGV0aW9uLmJpbmQodGhpcyksIHRoaXMub25FcnJvci5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbmNlIGFsbCBwcm9tcHQgYXJlIG92ZXJcbiAgICovXG4gIG9uQ29tcGxldGlvbigpIHtcbiAgICB0aGlzLmNsb3NlKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hbnN3ZXJzO1xuICB9XG5cbiAgb25FcnJvcihlcnJvcikge1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICB9XG5cbiAgcHJvY2Vzc1F1ZXN0aW9uKHF1ZXN0aW9uKSB7XG4gICAgcXVlc3Rpb24gPSB7IC4uLnF1ZXN0aW9uIH07XG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IHtcbiAgICAgIGNvbnN0IG9icyA9IG9mKHF1ZXN0aW9uKTtcblxuICAgICAgcmV0dXJuIG9icy5waXBlKFxuICAgICAgICBjb25jYXRNYXAodGhpcy5zZXREZWZhdWx0VHlwZS5iaW5kKHRoaXMpKSxcbiAgICAgICAgY29uY2F0TWFwKHRoaXMuZmlsdGVySWZSdW5uYWJsZS5iaW5kKHRoaXMpKSxcbiAgICAgICAgY29uY2F0TWFwKCgpID0+XG4gICAgICAgICAgdXRpbHMuZmV0Y2hBc3luY1F1ZXN0aW9uUHJvcGVydHkocXVlc3Rpb24sICdtZXNzYWdlJywgdGhpcy5hbnN3ZXJzKSxcbiAgICAgICAgKSxcbiAgICAgICAgY29uY2F0TWFwKCgpID0+XG4gICAgICAgICAgdXRpbHMuZmV0Y2hBc3luY1F1ZXN0aW9uUHJvcGVydHkocXVlc3Rpb24sICdkZWZhdWx0JywgdGhpcy5hbnN3ZXJzKSxcbiAgICAgICAgKSxcbiAgICAgICAgY29uY2F0TWFwKCgpID0+XG4gICAgICAgICAgdXRpbHMuZmV0Y2hBc3luY1F1ZXN0aW9uUHJvcGVydHkocXVlc3Rpb24sICdjaG9pY2VzJywgdGhpcy5hbnN3ZXJzKSxcbiAgICAgICAgKSxcbiAgICAgICAgY29uY2F0TWFwKHRoaXMuZmV0Y2hBbnN3ZXIuYmluZCh0aGlzKSksXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgZmV0Y2hBbnN3ZXIocXVlc3Rpb24pIHtcbiAgICBjb25zdCBQcm9tcHQgPSB0aGlzLnByb21wdHNbcXVlc3Rpb24udHlwZV07XG4gICAgdGhpcy5hY3RpdmVQcm9tcHQgPSBuZXcgUHJvbXB0KHF1ZXN0aW9uLCB0aGlzLnJsLCB0aGlzLmFuc3dlcnMpO1xuICAgIHJldHVybiBkZWZlcigoKSA9PlxuICAgICAgZnJvbSh0aGlzLmFjdGl2ZVByb21wdC5ydW4oKS50aGVuKChhbnN3ZXIpID0+ICh7IG5hbWU6IHF1ZXN0aW9uLm5hbWUsIGFuc3dlciB9KSkpLFxuICAgICk7XG4gIH1cblxuICBzZXREZWZhdWx0VHlwZShxdWVzdGlvbikge1xuICAgIC8vIERlZmF1bHQgdHlwZSB0byBpbnB1dFxuICAgIGlmICghdGhpcy5wcm9tcHRzW3F1ZXN0aW9uLnR5cGVdKSB7XG4gICAgICBxdWVzdGlvbi50eXBlID0gJ2lucHV0JztcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmZXIoKCkgPT4gb2YocXVlc3Rpb24pKTtcbiAgfVxuXG4gIGZpbHRlcklmUnVubmFibGUocXVlc3Rpb24pIHtcbiAgICBpZiAoXG4gICAgICBxdWVzdGlvbi5hc2tBbnN3ZXJlZCAhPT0gdHJ1ZSAmJlxuICAgICAgXy5nZXQodGhpcy5hbnN3ZXJzLCBxdWVzdGlvbi5uYW1lKSAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICByZXR1cm4gRU1QVFk7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXN0aW9uLndoZW4gPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gRU1QVFk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBxdWVzdGlvbi53aGVuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gb2YocXVlc3Rpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IHsgYW5zd2VycyB9ID0gdGhpcztcbiAgICByZXR1cm4gZGVmZXIoKCkgPT5cbiAgICAgIGZyb20oXG4gICAgICAgIHJ1bkFzeW5jKHF1ZXN0aW9uLndoZW4pKGFuc3dlcnMpLnRoZW4oKHNob3VsZFJ1bikgPT4ge1xuICAgICAgICAgIGlmIChzaG91bGRSdW4pIHtcbiAgICAgICAgICAgIHJldHVybiBxdWVzdGlvbjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgKS5waXBlKGZpbHRlcigodmFsKSA9PiB2YWwgIT0gbnVsbCkpLFxuICAgICk7XG4gIH1cbn1cbiIsIi8qKlxuICogSW5xdWlyZXIuanNcbiAqIEEgY29sbGVjdGlvbiBvZiBjb21tb24gaW50ZXJhY3RpdmUgY29tbWFuZCBsaW5lIHVzZXIgaW50ZXJmYWNlcy5cbiAqL1xuXG5pbXBvcnQgeyBkZWZhdWx0IGFzIExpc3QgfSBmcm9tICcuL3Byb21wdHMvbGlzdC5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIElucHV0IH0gZnJvbSAnLi9wcm9tcHRzL2lucHV0LmpzJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgTnVtYmVyIH0gZnJvbSAnLi9wcm9tcHRzL251bWJlci5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIENvbmZpcm0gfSBmcm9tICcuL3Byb21wdHMvY29uZmlybS5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFJhd0xpc3QgfSBmcm9tICcuL3Byb21wdHMvcmF3bGlzdC5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIEV4cGFuZCB9IGZyb20gJy4vcHJvbXB0cy9leHBhbmQuanMnO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBDaGVja2JveCB9IGZyb20gJy4vcHJvbXB0cy9jaGVja2JveC5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFBhc3N3b3JkIH0gZnJvbSAnLi9wcm9tcHRzL3Bhc3N3b3JkLmpzJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgRWRpdG9yIH0gZnJvbSAnLi9wcm9tcHRzL2VkaXRvci5qcyc7XG5cbmltcG9ydCB7IGRlZmF1bHQgYXMgQm90dG9tQmFyIH0gZnJvbSAnLi91aS9ib3R0b20tYmFyLmpzJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgUHJvbXB0IH0gZnJvbSAnLi91aS9wcm9tcHQuanMnO1xuXG5pbXBvcnQgeyBkZWZhdWx0IGFzIFNlcGFyYXRvciB9IGZyb20gJy4vb2JqZWN0cy9zZXBhcmF0b3IuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBzZWxmLWNvbnRhaW5lZCBwcm9tcHQgbW9kdWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvbXB0TW9kdWxlKG9wdCkge1xuICBjb25zdCBwcm9tcHRNb2R1bGUgPSBmdW5jdGlvbiAocXVlc3Rpb25zLCBhbnN3ZXJzKSB7XG4gICAgbGV0IHVpSW5zdGFuY2U7XG4gICAgdHJ5IHtcbiAgICAgIHVpSW5zdGFuY2UgPSBuZXcgUHJvbXB0KHByb21wdE1vZHVsZS5wcm9tcHRzLCBvcHQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgICBjb25zdCBwcm9taXNlID0gdWlJbnN0YW5jZS5ydW4ocXVlc3Rpb25zLCBhbnN3ZXJzKTtcblxuICAgIC8vIE1vbmtleSBwYXRjaCB0aGUgVUkgb24gdGhlIHByb21pc2Ugb2JqZWN0IHNvXG4gICAgLy8gdGhhdCBpdCByZW1haW5zIHB1YmxpY2x5IGFjY2Vzc2libGUuXG4gICAgcHJvbWlzZS51aSA9IHVpSW5zdGFuY2U7XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcblxuICBwcm9tcHRNb2R1bGUucHJvbXB0cyA9IHt9O1xuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIHByb21wdCB0eXBlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lICAgICBQcm9tcHQgdHlwZSBuYW1lXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHByb21wdCBQcm9tcHQgY29uc3RydWN0b3JcbiAgICogQHJldHVybiB7aW5xdWlyZXJ9XG4gICAqL1xuXG4gIHByb21wdE1vZHVsZS5yZWdpc3RlclByb21wdCA9IGZ1bmN0aW9uIChuYW1lLCBwcm9tcHQpIHtcbiAgICBwcm9tcHRNb2R1bGUucHJvbXB0c1tuYW1lXSA9IHByb21wdDtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvKipcbiAgICogUmVnaXN0ZXIgdGhlIGRlZmF1bHRzIHByb3ZpZGVyIHByb21wdHNcbiAgICovXG5cbiAgcHJvbXB0TW9kdWxlLnJlc3RvcmVEZWZhdWx0UHJvbXB0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnJlZ2lzdGVyUHJvbXB0KCdsaXN0JywgTGlzdCk7XG4gICAgdGhpcy5yZWdpc3RlclByb21wdCgnaW5wdXQnLCBJbnB1dCk7XG4gICAgdGhpcy5yZWdpc3RlclByb21wdCgnbnVtYmVyJywgTnVtYmVyKTtcbiAgICB0aGlzLnJlZ2lzdGVyUHJvbXB0KCdjb25maXJtJywgQ29uZmlybSk7XG4gICAgdGhpcy5yZWdpc3RlclByb21wdCgncmF3bGlzdCcsIFJhd0xpc3QpO1xuICAgIHRoaXMucmVnaXN0ZXJQcm9tcHQoJ2V4cGFuZCcsIEV4cGFuZCk7XG4gICAgdGhpcy5yZWdpc3RlclByb21wdCgnY2hlY2tib3gnLCBDaGVja2JveCk7XG4gICAgdGhpcy5yZWdpc3RlclByb21wdCgncGFzc3dvcmQnLCBQYXNzd29yZCk7XG4gICAgdGhpcy5yZWdpc3RlclByb21wdCgnZWRpdG9yJywgRWRpdG9yKTtcbiAgfTtcblxuICBwcm9tcHRNb2R1bGUucmVzdG9yZURlZmF1bHRQcm9tcHRzKCk7XG5cbiAgcmV0dXJuIHByb21wdE1vZHVsZTtcbn1cblxuLyoqXG4gKiBQdWJsaWMgQ0xJIGhlbHBlciBpbnRlcmZhY2VcbiAqIEBwYXJhbSAge0FycmF5fE9iamVjdHxSeC5PYnNlcnZhYmxlfSBxdWVzdGlvbnMgLSBRdWVzdGlvbnMgc2V0dGluZ3MgYXJyYXlcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYiAtIENhbGxiYWNrIGJlaW5nIHBhc3NlZCB0aGUgdXNlciBhbnN3ZXJzXG4gKiBAcmV0dXJuIHt1aS5Qcm9tcHR9XG4gKi9cblxuY29uc3QgcHJvbXB0ID0gY3JlYXRlUHJvbXB0TW9kdWxlKCk7XG5cbi8vIEV4cG9zZSBoZWxwZXIgZnVuY3Rpb25zIG9uIHRoZSB0b3AgbGV2ZWwgZm9yIGVhc2llc3QgdXNhZ2UgYnkgY29tbW9uIHVzZXJzXG5mdW5jdGlvbiByZWdpc3RlclByb21wdChuYW1lLCBuZXdQcm9tcHQpIHtcbiAgcHJvbXB0LnJlZ2lzdGVyUHJvbXB0KG5hbWUsIG5ld1Byb21wdCk7XG59XG5cbmZ1bmN0aW9uIHJlc3RvcmVEZWZhdWx0UHJvbXB0cygpIHtcbiAgcHJvbXB0LnJlc3RvcmVEZWZhdWx0UHJvbXB0cygpO1xufVxuXG5jb25zdCBpbnF1aXJlciA9IHtcbiAgcHJvbXB0LFxuICB1aToge1xuICAgIEJvdHRvbUJhcixcbiAgICBQcm9tcHQsXG4gIH0sXG4gIGNyZWF0ZVByb21wdE1vZHVsZSxcbiAgcmVnaXN0ZXJQcm9tcHQsXG4gIHJlc3RvcmVEZWZhdWx0UHJvbXB0cyxcbiAgU2VwYXJhdG9yLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgaW5xdWlyZXI7XG4iLCJpbXBvcnQgeyBzcGF3biBhcyBfc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGRlYnVnRmFjdG9yeSB9IGZyb20gJy4vZGVidWcnO1xuY29uc3QgZGVidWcgPSBkZWJ1Z0ZhY3RvcnkoJ3NwYXduJyk7XG5leHBvcnQgZnVuY3Rpb24gc3Bhd24oY29tbWFuZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgW2NtZCwgLi4uYXJnc10gPSBjb21tYW5kLnNwbGl0KCcgJykubWFwKChzKSA9PiBzLnRyaW0oKSk7XG4gICAgZGVidWcoYGV4ZWN1dGUgJHtjbWR9ICR7YXJncy5qb2luKCcgJyl9YCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBzcGF3blN0cmVhbSA9IF9zcGF3bihjbWQsIGFyZ3MsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgc2hlbGw6IHRydWUgfSkpO1xuICAgICAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICAgICAgcHJvY2Vzcy5zdGRpbi5waXBlKHNwYXduU3RyZWFtLnN0ZGluKTtcbiAgICAgICAgKF9hID0gc3Bhd25TdHJlYW0uc3Rkb3V0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgICAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNwYXduU3RyZWFtLnN0ZG91dC5waXBlKHByb2Nlc3Muc3Rkb3V0KTtcbiAgICAgICAgc3Bhd25TdHJlYW0uc3RkZXJyLnBpcGUocHJvY2Vzcy5zdGRlcnIpO1xuICAgICAgICBzcGF3blN0cmVhbS5vbignY2xvc2UnLCAoY29kZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChjaHVua3MpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zcGF3bi5qcy5tYXAiLCJleHBvcnQgY29uc3QgY3JlYXRlQ2FyZ29Db250ZW50ID0gKG5hbWUpID0+IGBbcGFja2FnZV1cbmVkaXRpb24gPSBcIjIwMjFcIlxubmFtZSA9IFwiJHtuYW1lLnJlcGxhY2UoJ0AnLCAnJykucmVwbGFjZSgnLycsICdfJykudG9Mb3dlckNhc2UoKX1cIlxudmVyc2lvbiA9IFwiMC4wLjBcIlxuXG5bbGliXVxuY3JhdGUtdHlwZSA9IFtcImNkeWxpYlwiXVxuXG5bZGVwZW5kZW5jaWVzXVxuIyBEZWZhdWx0IGVuYWJsZSBuYXBpNCBmZWF0dXJlLCBzZWUgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9uLWFwaS5odG1sI25vZGUtYXBpLXZlcnNpb24tbWF0cml4XG5uYXBpID0geyB2ZXJzaW9uID0gXCJOQVBJX1ZFUlNJT05cIiwgZGVmYXVsdC1mZWF0dXJlcyA9IGZhbHNlLCBmZWF0dXJlcyA9IFtcIm5hcGk0XCJdIH1cbm5hcGktZGVyaXZlID0gXCJOQVBJX0RFUklWRV9WRVJTSU9OXCJcblxuW2J1aWxkLWRlcGVuZGVuY2llc11cbm5hcGktYnVpbGQgPSBcIk5BUElfQlVJTERfVkVSU0lPTlwiXG5cbltwcm9maWxlLnJlbGVhc2VdXG5sdG8gPSB0cnVlXG5zdHJpcCA9IFwic3ltYm9sc1wiXG5gO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2FyZ28uanMubWFwIiwiZXhwb3J0IGNvbnN0IGNyZWF0ZUNhcmdvQ29uZmlnID0gKGVuYWJsZUxpbnV4QXJtOE11c2wsIGVuYWJsZVdpbmRvd3NYNjQpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBpZiAoZW5hYmxlTGludXhBcm04TXVzbCkge1xuICAgICAgICByZXN1bHQucHVzaChgW3RhcmdldC5hYXJjaDY0LXVua25vd24tbGludXgtbXVzbF1cbmxpbmtlciA9IFwiYWFyY2g2NC1saW51eC1tdXNsLWdjY1wiXG5ydXN0ZmxhZ3MgPSBbXCItQ1wiLCBcInRhcmdldC1mZWF0dXJlPS1jcnQtc3RhdGljXCJdYCk7XG4gICAgfVxuICAgIGlmIChlbmFibGVXaW5kb3dzWDY0KSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGBbdGFyZ2V0Lng4Nl82NC1wYy13aW5kb3dzLW1zdmNdXG5ydXN0ZmxhZ3MgPSBbXCItQ1wiLCBcInRhcmdldC1mZWF0dXJlPStjcnQtc3RhdGljXCJdYCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQuam9pbignXFxuJyk7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2FyZ28tY29uZmlnLmpzLm1hcCIsIlxuLyohIGpzLXlhbWwgNC4xLjAgaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9qcy15YW1sIEBsaWNlbnNlIE1JVCAqL1xuZnVuY3Rpb24gaXNOb3RoaW5nKHN1YmplY3QpIHtcbiAgcmV0dXJuICh0eXBlb2Ygc3ViamVjdCA9PT0gJ3VuZGVmaW5lZCcpIHx8IChzdWJqZWN0ID09PSBudWxsKTtcbn1cblxuXG5mdW5jdGlvbiBpc09iamVjdChzdWJqZWN0KSB7XG4gIHJldHVybiAodHlwZW9mIHN1YmplY3QgPT09ICdvYmplY3QnKSAmJiAoc3ViamVjdCAhPT0gbnVsbCk7XG59XG5cblxuZnVuY3Rpb24gdG9BcnJheShzZXF1ZW5jZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShzZXF1ZW5jZSkpIHJldHVybiBzZXF1ZW5jZTtcbiAgZWxzZSBpZiAoaXNOb3RoaW5nKHNlcXVlbmNlKSkgcmV0dXJuIFtdO1xuXG4gIHJldHVybiBbIHNlcXVlbmNlIF07XG59XG5cblxuZnVuY3Rpb24gZXh0ZW5kKHRhcmdldCwgc291cmNlKSB7XG4gIHZhciBpbmRleCwgbGVuZ3RoLCBrZXksIHNvdXJjZUtleXM7XG5cbiAgaWYgKHNvdXJjZSkge1xuICAgIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuXG4gICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IHNvdXJjZUtleXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAga2V5ID0gc291cmNlS2V5c1tpbmRleF07XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cblxuZnVuY3Rpb24gcmVwZWF0KHN0cmluZywgY291bnQpIHtcbiAgdmFyIHJlc3VsdCA9ICcnLCBjeWNsZTtcblxuICBmb3IgKGN5Y2xlID0gMDsgY3ljbGUgPCBjb3VudDsgY3ljbGUgKz0gMSkge1xuICAgIHJlc3VsdCArPSBzdHJpbmc7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbmZ1bmN0aW9uIGlzTmVnYXRpdmVaZXJvKG51bWJlcikge1xuICByZXR1cm4gKG51bWJlciA9PT0gMCkgJiYgKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSA9PT0gMSAvIG51bWJlcik7XG59XG5cblxudmFyIGlzTm90aGluZ18xICAgICAgPSBpc05vdGhpbmc7XG52YXIgaXNPYmplY3RfMSAgICAgICA9IGlzT2JqZWN0O1xudmFyIHRvQXJyYXlfMSAgICAgICAgPSB0b0FycmF5O1xudmFyIHJlcGVhdF8xICAgICAgICAgPSByZXBlYXQ7XG52YXIgaXNOZWdhdGl2ZVplcm9fMSA9IGlzTmVnYXRpdmVaZXJvO1xudmFyIGV4dGVuZF8xICAgICAgICAgPSBleHRlbmQ7XG5cbnZhciBjb21tb24gPSB7XG5cdGlzTm90aGluZzogaXNOb3RoaW5nXzEsXG5cdGlzT2JqZWN0OiBpc09iamVjdF8xLFxuXHR0b0FycmF5OiB0b0FycmF5XzEsXG5cdHJlcGVhdDogcmVwZWF0XzEsXG5cdGlzTmVnYXRpdmVaZXJvOiBpc05lZ2F0aXZlWmVyb18xLFxuXHRleHRlbmQ6IGV4dGVuZF8xXG59O1xuXG4vLyBZQU1MIGVycm9yIGNsYXNzLiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzg0NTg5ODRcblxuXG5mdW5jdGlvbiBmb3JtYXRFcnJvcihleGNlcHRpb24sIGNvbXBhY3QpIHtcbiAgdmFyIHdoZXJlID0gJycsIG1lc3NhZ2UgPSBleGNlcHRpb24ucmVhc29uIHx8ICcodW5rbm93biByZWFzb24pJztcblxuICBpZiAoIWV4Y2VwdGlvbi5tYXJrKSByZXR1cm4gbWVzc2FnZTtcblxuICBpZiAoZXhjZXB0aW9uLm1hcmsubmFtZSkge1xuICAgIHdoZXJlICs9ICdpbiBcIicgKyBleGNlcHRpb24ubWFyay5uYW1lICsgJ1wiICc7XG4gIH1cblxuICB3aGVyZSArPSAnKCcgKyAoZXhjZXB0aW9uLm1hcmsubGluZSArIDEpICsgJzonICsgKGV4Y2VwdGlvbi5tYXJrLmNvbHVtbiArIDEpICsgJyknO1xuXG4gIGlmICghY29tcGFjdCAmJiBleGNlcHRpb24ubWFyay5zbmlwcGV0KSB7XG4gICAgd2hlcmUgKz0gJ1xcblxcbicgKyBleGNlcHRpb24ubWFyay5zbmlwcGV0O1xuICB9XG5cbiAgcmV0dXJuIG1lc3NhZ2UgKyAnICcgKyB3aGVyZTtcbn1cblxuXG5mdW5jdGlvbiBZQU1MRXhjZXB0aW9uJDEocmVhc29uLCBtYXJrKSB7XG4gIC8vIFN1cGVyIGNvbnN0cnVjdG9yXG4gIEVycm9yLmNhbGwodGhpcyk7XG5cbiAgdGhpcy5uYW1lID0gJ1lBTUxFeGNlcHRpb24nO1xuICB0aGlzLnJlYXNvbiA9IHJlYXNvbjtcbiAgdGhpcy5tYXJrID0gbWFyaztcbiAgdGhpcy5tZXNzYWdlID0gZm9ybWF0RXJyb3IodGhpcywgZmFsc2UpO1xuXG4gIC8vIEluY2x1ZGUgc3RhY2sgdHJhY2UgaW4gZXJyb3Igb2JqZWN0XG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIC8vIENocm9tZSBhbmQgTm9kZUpTXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH0gZWxzZSB7XG4gICAgLy8gRkYsIElFIDEwKyBhbmQgU2FmYXJpIDYrLiBGYWxsYmFjayBmb3Igb3RoZXJzXG4gICAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2sgfHwgJyc7XG4gIH1cbn1cblxuXG4vLyBJbmhlcml0IGZyb20gRXJyb3JcbllBTUxFeGNlcHRpb24kMS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG5ZQU1MRXhjZXB0aW9uJDEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gWUFNTEV4Y2VwdGlvbiQxO1xuXG5cbllBTUxFeGNlcHRpb24kMS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhjb21wYWN0KSB7XG4gIHJldHVybiB0aGlzLm5hbWUgKyAnOiAnICsgZm9ybWF0RXJyb3IodGhpcywgY29tcGFjdCk7XG59O1xuXG5cbnZhciBleGNlcHRpb24gPSBZQU1MRXhjZXB0aW9uJDE7XG5cbi8vIGdldCBzbmlwcGV0IGZvciBhIHNpbmdsZSBsaW5lLCByZXNwZWN0aW5nIG1heExlbmd0aFxuZnVuY3Rpb24gZ2V0TGluZShidWZmZXIsIGxpbmVTdGFydCwgbGluZUVuZCwgcG9zaXRpb24sIG1heExpbmVMZW5ndGgpIHtcbiAgdmFyIGhlYWQgPSAnJztcbiAgdmFyIHRhaWwgPSAnJztcbiAgdmFyIG1heEhhbGZMZW5ndGggPSBNYXRoLmZsb29yKG1heExpbmVMZW5ndGggLyAyKSAtIDE7XG5cbiAgaWYgKHBvc2l0aW9uIC0gbGluZVN0YXJ0ID4gbWF4SGFsZkxlbmd0aCkge1xuICAgIGhlYWQgPSAnIC4uLiAnO1xuICAgIGxpbmVTdGFydCA9IHBvc2l0aW9uIC0gbWF4SGFsZkxlbmd0aCArIGhlYWQubGVuZ3RoO1xuICB9XG5cbiAgaWYgKGxpbmVFbmQgLSBwb3NpdGlvbiA+IG1heEhhbGZMZW5ndGgpIHtcbiAgICB0YWlsID0gJyAuLi4nO1xuICAgIGxpbmVFbmQgPSBwb3NpdGlvbiArIG1heEhhbGZMZW5ndGggLSB0YWlsLmxlbmd0aDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RyOiBoZWFkICsgYnVmZmVyLnNsaWNlKGxpbmVTdGFydCwgbGluZUVuZCkucmVwbGFjZSgvXFx0L2csICfihpInKSArIHRhaWwsXG4gICAgcG9zOiBwb3NpdGlvbiAtIGxpbmVTdGFydCArIGhlYWQubGVuZ3RoIC8vIHJlbGF0aXZlIHBvc2l0aW9uXG4gIH07XG59XG5cblxuZnVuY3Rpb24gcGFkU3RhcnQoc3RyaW5nLCBtYXgpIHtcbiAgcmV0dXJuIGNvbW1vbi5yZXBlYXQoJyAnLCBtYXggLSBzdHJpbmcubGVuZ3RoKSArIHN0cmluZztcbn1cblxuXG5mdW5jdGlvbiBtYWtlU25pcHBldChtYXJrLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBPYmplY3QuY3JlYXRlKG9wdGlvbnMgfHwgbnVsbCk7XG5cbiAgaWYgKCFtYXJrLmJ1ZmZlcikgcmV0dXJuIG51bGw7XG5cbiAgaWYgKCFvcHRpb25zLm1heExlbmd0aCkgb3B0aW9ucy5tYXhMZW5ndGggPSA3OTtcbiAgaWYgKHR5cGVvZiBvcHRpb25zLmluZGVudCAgICAgICE9PSAnbnVtYmVyJykgb3B0aW9ucy5pbmRlbnQgICAgICA9IDE7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5saW5lc0JlZm9yZSAhPT0gJ251bWJlcicpIG9wdGlvbnMubGluZXNCZWZvcmUgPSAzO1xuICBpZiAodHlwZW9mIG9wdGlvbnMubGluZXNBZnRlciAgIT09ICdudW1iZXInKSBvcHRpb25zLmxpbmVzQWZ0ZXIgID0gMjtcblxuICB2YXIgcmUgPSAvXFxyP1xcbnxcXHJ8XFwwL2c7XG4gIHZhciBsaW5lU3RhcnRzID0gWyAwIF07XG4gIHZhciBsaW5lRW5kcyA9IFtdO1xuICB2YXIgbWF0Y2g7XG4gIHZhciBmb3VuZExpbmVObyA9IC0xO1xuXG4gIHdoaWxlICgobWF0Y2ggPSByZS5leGVjKG1hcmsuYnVmZmVyKSkpIHtcbiAgICBsaW5lRW5kcy5wdXNoKG1hdGNoLmluZGV4KTtcbiAgICBsaW5lU3RhcnRzLnB1c2gobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpO1xuXG4gICAgaWYgKG1hcmsucG9zaXRpb24gPD0gbWF0Y2guaW5kZXggJiYgZm91bmRMaW5lTm8gPCAwKSB7XG4gICAgICBmb3VuZExpbmVObyA9IGxpbmVTdGFydHMubGVuZ3RoIC0gMjtcbiAgICB9XG4gIH1cblxuICBpZiAoZm91bmRMaW5lTm8gPCAwKSBmb3VuZExpbmVObyA9IGxpbmVTdGFydHMubGVuZ3RoIC0gMTtcblxuICB2YXIgcmVzdWx0ID0gJycsIGksIGxpbmU7XG4gIHZhciBsaW5lTm9MZW5ndGggPSBNYXRoLm1pbihtYXJrLmxpbmUgKyBvcHRpb25zLmxpbmVzQWZ0ZXIsIGxpbmVFbmRzLmxlbmd0aCkudG9TdHJpbmcoKS5sZW5ndGg7XG4gIHZhciBtYXhMaW5lTGVuZ3RoID0gb3B0aW9ucy5tYXhMZW5ndGggLSAob3B0aW9ucy5pbmRlbnQgKyBsaW5lTm9MZW5ndGggKyAzKTtcblxuICBmb3IgKGkgPSAxOyBpIDw9IG9wdGlvbnMubGluZXNCZWZvcmU7IGkrKykge1xuICAgIGlmIChmb3VuZExpbmVObyAtIGkgPCAwKSBicmVhaztcbiAgICBsaW5lID0gZ2V0TGluZShcbiAgICAgIG1hcmsuYnVmZmVyLFxuICAgICAgbGluZVN0YXJ0c1tmb3VuZExpbmVObyAtIGldLFxuICAgICAgbGluZUVuZHNbZm91bmRMaW5lTm8gLSBpXSxcbiAgICAgIG1hcmsucG9zaXRpb24gLSAobGluZVN0YXJ0c1tmb3VuZExpbmVOb10gLSBsaW5lU3RhcnRzW2ZvdW5kTGluZU5vIC0gaV0pLFxuICAgICAgbWF4TGluZUxlbmd0aFxuICAgICk7XG4gICAgcmVzdWx0ID0gY29tbW9uLnJlcGVhdCgnICcsIG9wdGlvbnMuaW5kZW50KSArIHBhZFN0YXJ0KChtYXJrLmxpbmUgLSBpICsgMSkudG9TdHJpbmcoKSwgbGluZU5vTGVuZ3RoKSArXG4gICAgICAnIHwgJyArIGxpbmUuc3RyICsgJ1xcbicgKyByZXN1bHQ7XG4gIH1cblxuICBsaW5lID0gZ2V0TGluZShtYXJrLmJ1ZmZlciwgbGluZVN0YXJ0c1tmb3VuZExpbmVOb10sIGxpbmVFbmRzW2ZvdW5kTGluZU5vXSwgbWFyay5wb3NpdGlvbiwgbWF4TGluZUxlbmd0aCk7XG4gIHJlc3VsdCArPSBjb21tb24ucmVwZWF0KCcgJywgb3B0aW9ucy5pbmRlbnQpICsgcGFkU3RhcnQoKG1hcmsubGluZSArIDEpLnRvU3RyaW5nKCksIGxpbmVOb0xlbmd0aCkgK1xuICAgICcgfCAnICsgbGluZS5zdHIgKyAnXFxuJztcbiAgcmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoJy0nLCBvcHRpb25zLmluZGVudCArIGxpbmVOb0xlbmd0aCArIDMgKyBsaW5lLnBvcykgKyAnXicgKyAnXFxuJztcblxuICBmb3IgKGkgPSAxOyBpIDw9IG9wdGlvbnMubGluZXNBZnRlcjsgaSsrKSB7XG4gICAgaWYgKGZvdW5kTGluZU5vICsgaSA+PSBsaW5lRW5kcy5sZW5ndGgpIGJyZWFrO1xuICAgIGxpbmUgPSBnZXRMaW5lKFxuICAgICAgbWFyay5idWZmZXIsXG4gICAgICBsaW5lU3RhcnRzW2ZvdW5kTGluZU5vICsgaV0sXG4gICAgICBsaW5lRW5kc1tmb3VuZExpbmVObyArIGldLFxuICAgICAgbWFyay5wb3NpdGlvbiAtIChsaW5lU3RhcnRzW2ZvdW5kTGluZU5vXSAtIGxpbmVTdGFydHNbZm91bmRMaW5lTm8gKyBpXSksXG4gICAgICBtYXhMaW5lTGVuZ3RoXG4gICAgKTtcbiAgICByZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnICcsIG9wdGlvbnMuaW5kZW50KSArIHBhZFN0YXJ0KChtYXJrLmxpbmUgKyBpICsgMSkudG9TdHJpbmcoKSwgbGluZU5vTGVuZ3RoKSArXG4gICAgICAnIHwgJyArIGxpbmUuc3RyICsgJ1xcbic7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0LnJlcGxhY2UoL1xcbiQvLCAnJyk7XG59XG5cblxudmFyIHNuaXBwZXQgPSBtYWtlU25pcHBldDtcblxudmFyIFRZUEVfQ09OU1RSVUNUT1JfT1BUSU9OUyA9IFtcbiAgJ2tpbmQnLFxuICAnbXVsdGknLFxuICAncmVzb2x2ZScsXG4gICdjb25zdHJ1Y3QnLFxuICAnaW5zdGFuY2VPZicsXG4gICdwcmVkaWNhdGUnLFxuICAncmVwcmVzZW50JyxcbiAgJ3JlcHJlc2VudE5hbWUnLFxuICAnZGVmYXVsdFN0eWxlJyxcbiAgJ3N0eWxlQWxpYXNlcydcbl07XG5cbnZhciBZQU1MX05PREVfS0lORFMgPSBbXG4gICdzY2FsYXInLFxuICAnc2VxdWVuY2UnLFxuICAnbWFwcGluZydcbl07XG5cbmZ1bmN0aW9uIGNvbXBpbGVTdHlsZUFsaWFzZXMobWFwKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcblxuICBpZiAobWFwICE9PSBudWxsKSB7XG4gICAgT2JqZWN0LmtleXMobWFwKS5mb3JFYWNoKGZ1bmN0aW9uIChzdHlsZSkge1xuICAgICAgbWFwW3N0eWxlXS5mb3JFYWNoKGZ1bmN0aW9uIChhbGlhcykge1xuICAgICAgICByZXN1bHRbU3RyaW5nKGFsaWFzKV0gPSBzdHlsZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gVHlwZSQxKHRhZywgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKFRZUEVfQ09OU1RSVUNUT1JfT1BUSU9OUy5pbmRleE9mKG5hbWUpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IGV4Y2VwdGlvbignVW5rbm93biBvcHRpb24gXCInICsgbmFtZSArICdcIiBpcyBtZXQgaW4gZGVmaW5pdGlvbiBvZiBcIicgKyB0YWcgKyAnXCIgWUFNTCB0eXBlLicpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gVE9ETzogQWRkIHRhZyBmb3JtYXQgY2hlY2suXG4gIHRoaXMub3B0aW9ucyAgICAgICA9IG9wdGlvbnM7IC8vIGtlZXAgb3JpZ2luYWwgb3B0aW9ucyBpbiBjYXNlIHVzZXIgd2FudHMgdG8gZXh0ZW5kIHRoaXMgdHlwZSBsYXRlclxuICB0aGlzLnRhZyAgICAgICAgICAgPSB0YWc7XG4gIHRoaXMua2luZCAgICAgICAgICA9IG9wdGlvbnNbJ2tpbmQnXSAgICAgICAgICB8fCBudWxsO1xuICB0aGlzLnJlc29sdmUgICAgICAgPSBvcHRpb25zWydyZXNvbHZlJ10gICAgICAgfHwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfTtcbiAgdGhpcy5jb25zdHJ1Y3QgICAgID0gb3B0aW9uc1snY29uc3RydWN0J10gICAgIHx8IGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiBkYXRhOyB9O1xuICB0aGlzLmluc3RhbmNlT2YgICAgPSBvcHRpb25zWydpbnN0YW5jZU9mJ10gICAgfHwgbnVsbDtcbiAgdGhpcy5wcmVkaWNhdGUgICAgID0gb3B0aW9uc1sncHJlZGljYXRlJ10gICAgIHx8IG51bGw7XG4gIHRoaXMucmVwcmVzZW50ICAgICA9IG9wdGlvbnNbJ3JlcHJlc2VudCddICAgICB8fCBudWxsO1xuICB0aGlzLnJlcHJlc2VudE5hbWUgPSBvcHRpb25zWydyZXByZXNlbnROYW1lJ10gfHwgbnVsbDtcbiAgdGhpcy5kZWZhdWx0U3R5bGUgID0gb3B0aW9uc1snZGVmYXVsdFN0eWxlJ10gIHx8IG51bGw7XG4gIHRoaXMubXVsdGkgICAgICAgICA9IG9wdGlvbnNbJ211bHRpJ10gICAgICAgICB8fCBmYWxzZTtcbiAgdGhpcy5zdHlsZUFsaWFzZXMgID0gY29tcGlsZVN0eWxlQWxpYXNlcyhvcHRpb25zWydzdHlsZUFsaWFzZXMnXSB8fCBudWxsKTtcblxuICBpZiAoWUFNTF9OT0RFX0tJTkRTLmluZGV4T2YodGhpcy5raW5kKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKCdVbmtub3duIGtpbmQgXCInICsgdGhpcy5raW5kICsgJ1wiIGlzIHNwZWNpZmllZCBmb3IgXCInICsgdGFnICsgJ1wiIFlBTUwgdHlwZS4nKTtcbiAgfVxufVxuXG52YXIgdHlwZSA9IFR5cGUkMTtcblxuLyplc2xpbnQtZGlzYWJsZSBtYXgtbGVuKi9cblxuXG5cblxuXG5mdW5jdGlvbiBjb21waWxlTGlzdChzY2hlbWEsIG5hbWUpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gIHNjaGVtYVtuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uIChjdXJyZW50VHlwZSkge1xuICAgIHZhciBuZXdJbmRleCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgICByZXN1bHQuZm9yRWFjaChmdW5jdGlvbiAocHJldmlvdXNUeXBlLCBwcmV2aW91c0luZGV4KSB7XG4gICAgICBpZiAocHJldmlvdXNUeXBlLnRhZyA9PT0gY3VycmVudFR5cGUudGFnICYmXG4gICAgICAgICAgcHJldmlvdXNUeXBlLmtpbmQgPT09IGN1cnJlbnRUeXBlLmtpbmQgJiZcbiAgICAgICAgICBwcmV2aW91c1R5cGUubXVsdGkgPT09IGN1cnJlbnRUeXBlLm11bHRpKSB7XG5cbiAgICAgICAgbmV3SW5kZXggPSBwcmV2aW91c0luZGV4O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmVzdWx0W25ld0luZGV4XSA9IGN1cnJlbnRUeXBlO1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbmZ1bmN0aW9uIGNvbXBpbGVNYXAoLyogbGlzdHMuLi4gKi8pIHtcbiAgdmFyIHJlc3VsdCA9IHtcbiAgICAgICAgc2NhbGFyOiB7fSxcbiAgICAgICAgc2VxdWVuY2U6IHt9LFxuICAgICAgICBtYXBwaW5nOiB7fSxcbiAgICAgICAgZmFsbGJhY2s6IHt9LFxuICAgICAgICBtdWx0aToge1xuICAgICAgICAgIHNjYWxhcjogW10sXG4gICAgICAgICAgc2VxdWVuY2U6IFtdLFxuICAgICAgICAgIG1hcHBpbmc6IFtdLFxuICAgICAgICAgIGZhbGxiYWNrOiBbXVxuICAgICAgICB9XG4gICAgICB9LCBpbmRleCwgbGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIGNvbGxlY3RUeXBlKHR5cGUpIHtcbiAgICBpZiAodHlwZS5tdWx0aSkge1xuICAgICAgcmVzdWx0Lm11bHRpW3R5cGUua2luZF0ucHVzaCh0eXBlKTtcbiAgICAgIHJlc3VsdC5tdWx0aVsnZmFsbGJhY2snXS5wdXNoKHR5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbdHlwZS5raW5kXVt0eXBlLnRhZ10gPSByZXN1bHRbJ2ZhbGxiYWNrJ11bdHlwZS50YWddID0gdHlwZTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBhcmd1bWVudHNbaW5kZXhdLmZvckVhY2goY29sbGVjdFR5cGUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cblxuZnVuY3Rpb24gU2NoZW1hJDEoZGVmaW5pdGlvbikge1xuICByZXR1cm4gdGhpcy5leHRlbmQoZGVmaW5pdGlvbik7XG59XG5cblxuU2NoZW1hJDEucHJvdG90eXBlLmV4dGVuZCA9IGZ1bmN0aW9uIGV4dGVuZChkZWZpbml0aW9uKSB7XG4gIHZhciBpbXBsaWNpdCA9IFtdO1xuICB2YXIgZXhwbGljaXQgPSBbXTtcblxuICBpZiAoZGVmaW5pdGlvbiBpbnN0YW5jZW9mIHR5cGUpIHtcbiAgICAvLyBTY2hlbWEuZXh0ZW5kKHR5cGUpXG4gICAgZXhwbGljaXQucHVzaChkZWZpbml0aW9uKTtcblxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbikpIHtcbiAgICAvLyBTY2hlbWEuZXh0ZW5kKFsgdHlwZTEsIHR5cGUyLCAuLi4gXSlcbiAgICBleHBsaWNpdCA9IGV4cGxpY2l0LmNvbmNhdChkZWZpbml0aW9uKTtcblxuICB9IGVsc2UgaWYgKGRlZmluaXRpb24gJiYgKEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbi5pbXBsaWNpdCkgfHwgQXJyYXkuaXNBcnJheShkZWZpbml0aW9uLmV4cGxpY2l0KSkpIHtcbiAgICAvLyBTY2hlbWEuZXh0ZW5kKHsgZXhwbGljaXQ6IFsgdHlwZTEsIHR5cGUyLCAuLi4gXSwgaW1wbGljaXQ6IFsgdHlwZTEsIHR5cGUyLCAuLi4gXSB9KVxuICAgIGlmIChkZWZpbml0aW9uLmltcGxpY2l0KSBpbXBsaWNpdCA9IGltcGxpY2l0LmNvbmNhdChkZWZpbml0aW9uLmltcGxpY2l0KTtcbiAgICBpZiAoZGVmaW5pdGlvbi5leHBsaWNpdCkgZXhwbGljaXQgPSBleHBsaWNpdC5jb25jYXQoZGVmaW5pdGlvbi5leHBsaWNpdCk7XG5cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKCdTY2hlbWEuZXh0ZW5kIGFyZ3VtZW50IHNob3VsZCBiZSBhIFR5cGUsIFsgVHlwZSBdLCAnICtcbiAgICAgICdvciBhIHNjaGVtYSBkZWZpbml0aW9uICh7IGltcGxpY2l0OiBbLi4uXSwgZXhwbGljaXQ6IFsuLi5dIH0pJyk7XG4gIH1cblxuICBpbXBsaWNpdC5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlJDEpIHtcbiAgICBpZiAoISh0eXBlJDEgaW5zdGFuY2VvZiB0eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IGV4Y2VwdGlvbignU3BlY2lmaWVkIGxpc3Qgb2YgWUFNTCB0eXBlcyAob3IgYSBzaW5nbGUgVHlwZSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVR5cGUgb2JqZWN0LicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlJDEubG9hZEtpbmQgJiYgdHlwZSQxLmxvYWRLaW5kICE9PSAnc2NhbGFyJykge1xuICAgICAgdGhyb3cgbmV3IGV4Y2VwdGlvbignVGhlcmUgaXMgYSBub24tc2NhbGFyIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIEltcGxpY2l0IHJlc29sdmluZyBvZiBzdWNoIHR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUkMS5tdWx0aSkge1xuICAgICAgdGhyb3cgbmV3IGV4Y2VwdGlvbignVGhlcmUgaXMgYSBtdWx0aSB0eXBlIGluIHRoZSBpbXBsaWNpdCBsaXN0IG9mIGEgc2NoZW1hLiBNdWx0aSB0YWdzIGNhbiBvbmx5IGJlIGxpc3RlZCBhcyBleHBsaWNpdC4nKTtcbiAgICB9XG4gIH0pO1xuXG4gIGV4cGxpY2l0LmZvckVhY2goZnVuY3Rpb24gKHR5cGUkMSkge1xuICAgIGlmICghKHR5cGUkMSBpbnN0YW5jZW9mIHR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKCdTcGVjaWZpZWQgbGlzdCBvZiBZQU1MIHR5cGVzIChvciBhIHNpbmdsZSBUeXBlIG9iamVjdCkgY29udGFpbnMgYSBub24tVHlwZSBvYmplY3QuJyk7XG4gICAgfVxuICB9KTtcblxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShTY2hlbWEkMS5wcm90b3R5cGUpO1xuXG4gIHJlc3VsdC5pbXBsaWNpdCA9ICh0aGlzLmltcGxpY2l0IHx8IFtdKS5jb25jYXQoaW1wbGljaXQpO1xuICByZXN1bHQuZXhwbGljaXQgPSAodGhpcy5leHBsaWNpdCB8fCBbXSkuY29uY2F0KGV4cGxpY2l0KTtcblxuICByZXN1bHQuY29tcGlsZWRJbXBsaWNpdCA9IGNvbXBpbGVMaXN0KHJlc3VsdCwgJ2ltcGxpY2l0Jyk7XG4gIHJlc3VsdC5jb21waWxlZEV4cGxpY2l0ID0gY29tcGlsZUxpc3QocmVzdWx0LCAnZXhwbGljaXQnKTtcbiAgcmVzdWx0LmNvbXBpbGVkVHlwZU1hcCAgPSBjb21waWxlTWFwKHJlc3VsdC5jb21waWxlZEltcGxpY2l0LCByZXN1bHQuY29tcGlsZWRFeHBsaWNpdCk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblxudmFyIHNjaGVtYSA9IFNjaGVtYSQxO1xuXG52YXIgc3RyID0gbmV3IHR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOnN0cicsIHtcbiAga2luZDogJ3NjYWxhcicsXG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gKGRhdGEpIHsgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDogJyc7IH1cbn0pO1xuXG52YXIgc2VxID0gbmV3IHR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOnNlcScsIHtcbiAga2luZDogJ3NlcXVlbmNlJyxcbiAgY29uc3RydWN0OiBmdW5jdGlvbiAoZGF0YSkgeyByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiBbXTsgfVxufSk7XG5cbnZhciBtYXAgPSBuZXcgdHlwZSgndGFnOnlhbWwub3JnLDIwMDI6bWFwJywge1xuICBraW5kOiAnbWFwcGluZycsXG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gKGRhdGEpIHsgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDoge307IH1cbn0pO1xuXG52YXIgZmFpbHNhZmUgPSBuZXcgc2NoZW1hKHtcbiAgZXhwbGljaXQ6IFtcbiAgICBzdHIsXG4gICAgc2VxLFxuICAgIG1hcFxuICBdXG59KTtcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxOdWxsKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiB0cnVlO1xuXG4gIHZhciBtYXggPSBkYXRhLmxlbmd0aDtcblxuICByZXR1cm4gKG1heCA9PT0gMSAmJiBkYXRhID09PSAnficpIHx8XG4gICAgICAgICAobWF4ID09PSA0ICYmIChkYXRhID09PSAnbnVsbCcgfHwgZGF0YSA9PT0gJ051bGwnIHx8IGRhdGEgPT09ICdOVUxMJykpO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sTnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCA9PT0gbnVsbDtcbn1cblxudmFyIF9udWxsID0gbmV3IHR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOm51bGwnLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbE51bGwsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbE51bGwsXG4gIHByZWRpY2F0ZTogaXNOdWxsLFxuICByZXByZXNlbnQ6IHtcbiAgICBjYW5vbmljYWw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICd+JzsgICAgfSxcbiAgICBsb3dlcmNhc2U6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICdudWxsJzsgfSxcbiAgICB1cHBlcmNhc2U6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICdOVUxMJzsgfSxcbiAgICBjYW1lbGNhc2U6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICdOdWxsJzsgfSxcbiAgICBlbXB0eTogICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuICcnOyAgICAgfVxuICB9LFxuICBkZWZhdWx0U3R5bGU6ICdsb3dlcmNhc2UnXG59KTtcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxCb29sZWFuKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICB2YXIgbWF4ID0gZGF0YS5sZW5ndGg7XG5cbiAgcmV0dXJuIChtYXggPT09IDQgJiYgKGRhdGEgPT09ICd0cnVlJyB8fCBkYXRhID09PSAnVHJ1ZScgfHwgZGF0YSA9PT0gJ1RSVUUnKSkgfHxcbiAgICAgICAgIChtYXggPT09IDUgJiYgKGRhdGEgPT09ICdmYWxzZScgfHwgZGF0YSA9PT0gJ0ZhbHNlJyB8fCBkYXRhID09PSAnRkFMU0UnKSk7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxCb29sZWFuKGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEgPT09ICd0cnVlJyB8fFxuICAgICAgICAgZGF0YSA9PT0gJ1RydWUnIHx8XG4gICAgICAgICBkYXRhID09PSAnVFJVRSc7XG59XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbihvYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBCb29sZWFuXSc7XG59XG5cbnZhciBib29sID0gbmV3IHR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOmJvb2wnLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbEJvb2xlYW4sXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEJvb2xlYW4sXG4gIHByZWRpY2F0ZTogaXNCb29sZWFuLFxuICByZXByZXNlbnQ6IHtcbiAgICBsb3dlcmNhc2U6IGZ1bmN0aW9uIChvYmplY3QpIHsgcmV0dXJuIG9iamVjdCA/ICd0cnVlJyA6ICdmYWxzZSc7IH0sXG4gICAgdXBwZXJjYXNlOiBmdW5jdGlvbiAob2JqZWN0KSB7IHJldHVybiBvYmplY3QgPyAnVFJVRScgOiAnRkFMU0UnOyB9LFxuICAgIGNhbWVsY2FzZTogZnVuY3Rpb24gKG9iamVjdCkgeyByZXR1cm4gb2JqZWN0ID8gJ1RydWUnIDogJ0ZhbHNlJzsgfVxuICB9LFxuICBkZWZhdWx0U3R5bGU6ICdsb3dlcmNhc2UnXG59KTtcblxuZnVuY3Rpb24gaXNIZXhDb2RlKGMpIHtcbiAgcmV0dXJuICgoMHgzMC8qIDAgKi8gPD0gYykgJiYgKGMgPD0gMHgzOS8qIDkgKi8pKSB8fFxuICAgICAgICAgKCgweDQxLyogQSAqLyA8PSBjKSAmJiAoYyA8PSAweDQ2LyogRiAqLykpIHx8XG4gICAgICAgICAoKDB4NjEvKiBhICovIDw9IGMpICYmIChjIDw9IDB4NjYvKiBmICovKSk7XG59XG5cbmZ1bmN0aW9uIGlzT2N0Q29kZShjKSB7XG4gIHJldHVybiAoKDB4MzAvKiAwICovIDw9IGMpICYmIChjIDw9IDB4MzcvKiA3ICovKSk7XG59XG5cbmZ1bmN0aW9uIGlzRGVjQ29kZShjKSB7XG4gIHJldHVybiAoKDB4MzAvKiAwICovIDw9IGMpICYmIChjIDw9IDB4MzkvKiA5ICovKSk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sSW50ZWdlcihkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIG1heCA9IGRhdGEubGVuZ3RoLFxuICAgICAgaW5kZXggPSAwLFxuICAgICAgaGFzRGlnaXRzID0gZmFsc2UsXG4gICAgICBjaDtcblxuICBpZiAoIW1heCkgcmV0dXJuIGZhbHNlO1xuXG4gIGNoID0gZGF0YVtpbmRleF07XG5cbiAgLy8gc2lnblxuICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnKSB7XG4gICAgY2ggPSBkYXRhWysraW5kZXhdO1xuICB9XG5cbiAgaWYgKGNoID09PSAnMCcpIHtcbiAgICAvLyAwXG4gICAgaWYgKGluZGV4ICsgMSA9PT0gbWF4KSByZXR1cm4gdHJ1ZTtcbiAgICBjaCA9IGRhdGFbKytpbmRleF07XG5cbiAgICAvLyBiYXNlIDIsIGJhc2UgOCwgYmFzZSAxNlxuXG4gICAgaWYgKGNoID09PSAnYicpIHtcbiAgICAgIC8vIGJhc2UgMlxuICAgICAgaW5kZXgrKztcblxuICAgICAgZm9yICg7IGluZGV4IDwgbWF4OyBpbmRleCsrKSB7XG4gICAgICAgIGNoID0gZGF0YVtpbmRleF07XG4gICAgICAgIGlmIChjaCA9PT0gJ18nKSBjb250aW51ZTtcbiAgICAgICAgaWYgKGNoICE9PSAnMCcgJiYgY2ggIT09ICcxJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICBoYXNEaWdpdHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0RpZ2l0cyAmJiBjaCAhPT0gJ18nO1xuICAgIH1cblxuXG4gICAgaWYgKGNoID09PSAneCcpIHtcbiAgICAgIC8vIGJhc2UgMTZcbiAgICAgIGluZGV4Kys7XG5cbiAgICAgIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykge1xuICAgICAgICBjaCA9IGRhdGFbaW5kZXhdO1xuICAgICAgICBpZiAoY2ggPT09ICdfJykgY29udGludWU7XG4gICAgICAgIGlmICghaXNIZXhDb2RlKGRhdGEuY2hhckNvZGVBdChpbmRleCkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGhhc0RpZ2l0cyA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzRGlnaXRzICYmIGNoICE9PSAnXyc7XG4gICAgfVxuXG5cbiAgICBpZiAoY2ggPT09ICdvJykge1xuICAgICAgLy8gYmFzZSA4XG4gICAgICBpbmRleCsrO1xuXG4gICAgICBmb3IgKDsgaW5kZXggPCBtYXg7IGluZGV4KyspIHtcbiAgICAgICAgY2ggPSBkYXRhW2luZGV4XTtcbiAgICAgICAgaWYgKGNoID09PSAnXycpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIWlzT2N0Q29kZShkYXRhLmNoYXJDb2RlQXQoaW5kZXgpKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBoYXNEaWdpdHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0RpZ2l0cyAmJiBjaCAhPT0gJ18nO1xuICAgIH1cbiAgfVxuXG4gIC8vIGJhc2UgMTAgKGV4Y2VwdCAwKVxuXG4gIC8vIHZhbHVlIHNob3VsZCBub3Qgc3RhcnQgd2l0aCBgX2A7XG4gIGlmIChjaCA9PT0gJ18nKSByZXR1cm4gZmFsc2U7XG5cbiAgZm9yICg7IGluZGV4IDwgbWF4OyBpbmRleCsrKSB7XG4gICAgY2ggPSBkYXRhW2luZGV4XTtcbiAgICBpZiAoY2ggPT09ICdfJykgY29udGludWU7XG4gICAgaWYgKCFpc0RlY0NvZGUoZGF0YS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaGFzRGlnaXRzID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIFNob3VsZCBoYXZlIGRpZ2l0cyBhbmQgc2hvdWxkIG5vdCBlbmQgd2l0aCBgX2BcbiAgaWYgKCFoYXNEaWdpdHMgfHwgY2ggPT09ICdfJykgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sSW50ZWdlcihkYXRhKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGEsIHNpZ24gPSAxLCBjaDtcblxuICBpZiAodmFsdWUuaW5kZXhPZignXycpICE9PSAtMSkge1xuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXy9nLCAnJyk7XG4gIH1cblxuICBjaCA9IHZhbHVlWzBdO1xuXG4gIGlmIChjaCA9PT0gJy0nIHx8IGNoID09PSAnKycpIHtcbiAgICBpZiAoY2ggPT09ICctJykgc2lnbiA9IC0xO1xuICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSk7XG4gICAgY2ggPSB2YWx1ZVswXTtcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PT0gJzAnKSByZXR1cm4gMDtcblxuICBpZiAoY2ggPT09ICcwJykge1xuICAgIGlmICh2YWx1ZVsxXSA9PT0gJ2InKSByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCAyKTtcbiAgICBpZiAodmFsdWVbMV0gPT09ICd4JykgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgMTYpO1xuICAgIGlmICh2YWx1ZVsxXSA9PT0gJ28nKSByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCA4KTtcbiAgfVxuXG4gIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUsIDEwKTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlZ2VyKG9iamVjdCkge1xuICByZXR1cm4gKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiZcbiAgICAgICAgIChvYmplY3QgJSAxID09PSAwICYmICFjb21tb24uaXNOZWdhdGl2ZVplcm8ob2JqZWN0KSk7XG59XG5cbnZhciBpbnQgPSBuZXcgdHlwZSgndGFnOnlhbWwub3JnLDIwMDI6aW50Jywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxJbnRlZ2VyLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxJbnRlZ2VyLFxuICBwcmVkaWNhdGU6IGlzSW50ZWdlcixcbiAgcmVwcmVzZW50OiB7XG4gICAgYmluYXJ5OiAgICAgIGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiA+PSAwID8gJzBiJyArIG9iai50b1N0cmluZygyKSA6ICctMGInICsgb2JqLnRvU3RyaW5nKDIpLnNsaWNlKDEpOyB9LFxuICAgIG9jdGFsOiAgICAgICBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogPj0gMCA/ICcwbycgICsgb2JqLnRvU3RyaW5nKDgpIDogJy0wbycgICsgb2JqLnRvU3RyaW5nKDgpLnNsaWNlKDEpOyB9LFxuICAgIGRlY2ltYWw6ICAgICBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmoudG9TdHJpbmcoMTApOyB9LFxuICAgIC8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbiAgICBoZXhhZGVjaW1hbDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqID49IDAgPyAnMHgnICsgb2JqLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpIDogICctMHgnICsgb2JqLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnNsaWNlKDEpOyB9XG4gIH0sXG4gIGRlZmF1bHRTdHlsZTogJ2RlY2ltYWwnLFxuICBzdHlsZUFsaWFzZXM6IHtcbiAgICBiaW5hcnk6ICAgICAgWyAyLCAgJ2JpbicgXSxcbiAgICBvY3RhbDogICAgICAgWyA4LCAgJ29jdCcgXSxcbiAgICBkZWNpbWFsOiAgICAgWyAxMCwgJ2RlYycgXSxcbiAgICBoZXhhZGVjaW1hbDogWyAxNiwgJ2hleCcgXVxuICB9XG59KTtcblxudmFyIFlBTUxfRkxPQVRfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXG4gIC8vIDIuNWU0LCAyLjUgYW5kIGludGVnZXJzXG4gICdeKD86Wy0rXT8oPzpbMC05XVswLTlfXSopKD86XFxcXC5bMC05X10qKT8oPzpbZUVdWy0rXT9bMC05XSspPycgK1xuICAvLyAuMmU0LCAuMlxuICAvLyBzcGVjaWFsIGNhc2UsIHNlZW1zIG5vdCBmcm9tIHNwZWNcbiAgJ3xcXFxcLlswLTlfXSsoPzpbZUVdWy0rXT9bMC05XSspPycgK1xuICAvLyAuaW5mXG4gICd8Wy0rXT9cXFxcLig/OmluZnxJbmZ8SU5GKScgK1xuICAvLyAubmFuXG4gICd8XFxcXC4oPzpuYW58TmFOfE5BTikpJCcpO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbEZsb2F0KGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICBpZiAoIVlBTUxfRkxPQVRfUEFUVEVSTi50ZXN0KGRhdGEpIHx8XG4gICAgICAvLyBRdWljayBoYWNrIHRvIG5vdCBhbGxvdyBpbnRlZ2VycyBlbmQgd2l0aCBgX2BcbiAgICAgIC8vIFByb2JhYmx5IHNob3VsZCB1cGRhdGUgcmVnZXhwICYgY2hlY2sgc3BlZWRcbiAgICAgIGRhdGFbZGF0YS5sZW5ndGggLSAxXSA9PT0gJ18nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxGbG9hdChkYXRhKSB7XG4gIHZhciB2YWx1ZSwgc2lnbjtcblxuICB2YWx1ZSAgPSBkYXRhLnJlcGxhY2UoL18vZywgJycpLnRvTG93ZXJDYXNlKCk7XG4gIHNpZ24gICA9IHZhbHVlWzBdID09PSAnLScgPyAtMSA6IDE7XG5cbiAgaWYgKCcrLScuaW5kZXhPZih2YWx1ZVswXSkgPj0gMCkge1xuICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSk7XG4gIH1cblxuICBpZiAodmFsdWUgPT09ICcuaW5mJykge1xuICAgIHJldHVybiAoc2lnbiA9PT0gMSkgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgOiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5cbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJy5uYW4nKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICByZXR1cm4gc2lnbiAqIHBhcnNlRmxvYXQodmFsdWUsIDEwKTtcbn1cblxuXG52YXIgU0NJRU5USUZJQ19XSVRIT1VUX0RPVCA9IC9eWy0rXT9bMC05XStlLztcblxuZnVuY3Rpb24gcmVwcmVzZW50WWFtbEZsb2F0KG9iamVjdCwgc3R5bGUpIHtcbiAgdmFyIHJlcztcblxuICBpZiAoaXNOYU4ob2JqZWN0KSkge1xuICAgIHN3aXRjaCAoc3R5bGUpIHtcbiAgICAgIGNhc2UgJ2xvd2VyY2FzZSc6IHJldHVybiAnLm5hbic7XG4gICAgICBjYXNlICd1cHBlcmNhc2UnOiByZXR1cm4gJy5OQU4nO1xuICAgICAgY2FzZSAnY2FtZWxjYXNlJzogcmV0dXJuICcuTmFOJztcbiAgICB9XG4gIH0gZWxzZSBpZiAoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZID09PSBvYmplY3QpIHtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlICdsb3dlcmNhc2UnOiByZXR1cm4gJy5pbmYnO1xuICAgICAgY2FzZSAndXBwZXJjYXNlJzogcmV0dXJuICcuSU5GJztcbiAgICAgIGNhc2UgJ2NhbWVsY2FzZSc6IHJldHVybiAnLkluZic7XG4gICAgfVxuICB9IGVsc2UgaWYgKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSA9PT0gb2JqZWN0KSB7XG4gICAgc3dpdGNoIChzdHlsZSkge1xuICAgICAgY2FzZSAnbG93ZXJjYXNlJzogcmV0dXJuICctLmluZic7XG4gICAgICBjYXNlICd1cHBlcmNhc2UnOiByZXR1cm4gJy0uSU5GJztcbiAgICAgIGNhc2UgJ2NhbWVsY2FzZSc6IHJldHVybiAnLS5JbmYnO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjb21tb24uaXNOZWdhdGl2ZVplcm8ob2JqZWN0KSkge1xuICAgIHJldHVybiAnLTAuMCc7XG4gIH1cblxuICByZXMgPSBvYmplY3QudG9TdHJpbmcoMTApO1xuXG4gIC8vIEpTIHN0cmluZ2lmaWVyIGNhbiBidWlsZCBzY2llbnRpZmljIGZvcm1hdCB3aXRob3V0IGRvdHM6IDVlLTEwMCxcbiAgLy8gd2hpbGUgWUFNTCByZXF1cmVzIGRvdDogNS5lLTEwMC4gRml4IGl0IHdpdGggc2ltcGxlIGhhY2tcblxuICByZXR1cm4gU0NJRU5USUZJQ19XSVRIT1VUX0RPVC50ZXN0KHJlcykgPyByZXMucmVwbGFjZSgnZScsICcuZScpIDogcmVzO1xufVxuXG5mdW5jdGlvbiBpc0Zsb2F0KG9iamVjdCkge1xuICByZXR1cm4gKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBOdW1iZXJdJykgJiZcbiAgICAgICAgIChvYmplY3QgJSAxICE9PSAwIHx8IGNvbW1vbi5pc05lZ2F0aXZlWmVybyhvYmplY3QpKTtcbn1cblxudmFyIGZsb2F0ID0gbmV3IHR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOmZsb2F0Jywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxGbG9hdCxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sRmxvYXQsXG4gIHByZWRpY2F0ZTogaXNGbG9hdCxcbiAgcmVwcmVzZW50OiByZXByZXNlbnRZYW1sRmxvYXQsXG4gIGRlZmF1bHRTdHlsZTogJ2xvd2VyY2FzZSdcbn0pO1xuXG52YXIganNvbiA9IGZhaWxzYWZlLmV4dGVuZCh7XG4gIGltcGxpY2l0OiBbXG4gICAgX251bGwsXG4gICAgYm9vbCxcbiAgICBpbnQsXG4gICAgZmxvYXRcbiAgXVxufSk7XG5cbnZhciBjb3JlID0ganNvbjtcblxudmFyIFlBTUxfREFURV9SRUdFWFAgPSBuZXcgUmVnRXhwKFxuICAnXihbMC05XVswLTldWzAtOV1bMC05XSknICAgICAgICAgICsgLy8gWzFdIHllYXJcbiAgJy0oWzAtOV1bMC05XSknICAgICAgICAgICAgICAgICAgICArIC8vIFsyXSBtb250aFxuICAnLShbMC05XVswLTldKSQnKTsgICAgICAgICAgICAgICAgICAgLy8gWzNdIGRheVxuXG52YXIgWUFNTF9USU1FU1RBTVBfUkVHRVhQID0gbmV3IFJlZ0V4cChcbiAgJ14oWzAtOV1bMC05XVswLTldWzAtOV0pJyAgICAgICAgICArIC8vIFsxXSB5ZWFyXG4gICctKFswLTldWzAtOV0/KScgICAgICAgICAgICAgICAgICAgKyAvLyBbMl0gbW9udGhcbiAgJy0oWzAtOV1bMC05XT8pJyAgICAgICAgICAgICAgICAgICArIC8vIFszXSBkYXlcbiAgJyg/OltUdF18WyBcXFxcdF0rKScgICAgICAgICAgICAgICAgICsgLy8gLi4uXG4gICcoWzAtOV1bMC05XT8pJyAgICAgICAgICAgICAgICAgICAgKyAvLyBbNF0gaG91clxuICAnOihbMC05XVswLTldKScgICAgICAgICAgICAgICAgICAgICsgLy8gWzVdIG1pbnV0ZVxuICAnOihbMC05XVswLTldKScgICAgICAgICAgICAgICAgICAgICsgLy8gWzZdIHNlY29uZFxuICAnKD86XFxcXC4oWzAtOV0qKSk/JyAgICAgICAgICAgICAgICAgKyAvLyBbN10gZnJhY3Rpb25cbiAgJyg/OlsgXFxcXHRdKihafChbLStdKShbMC05XVswLTldPyknICsgLy8gWzhdIHR6IFs5XSB0el9zaWduIFsxMF0gdHpfaG91clxuICAnKD86OihbMC05XVswLTldKSk/KSk/JCcpOyAgICAgICAgICAgLy8gWzExXSB0el9taW51dGVcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxUaW1lc3RhbXAoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoWUFNTF9EQVRFX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKFlBTUxfVElNRVNUQU1QX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sVGltZXN0YW1wKGRhdGEpIHtcbiAgdmFyIG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhY3Rpb24gPSAwLFxuICAgICAgZGVsdGEgPSBudWxsLCB0el9ob3VyLCB0el9taW51dGUsIGRhdGU7XG5cbiAgbWF0Y2ggPSBZQU1MX0RBVEVfUkVHRVhQLmV4ZWMoZGF0YSk7XG4gIGlmIChtYXRjaCA9PT0gbnVsbCkgbWF0Y2ggPSBZQU1MX1RJTUVTVEFNUF9SRUdFWFAuZXhlYyhkYXRhKTtcblxuICBpZiAobWF0Y2ggPT09IG51bGwpIHRocm93IG5ldyBFcnJvcignRGF0ZSByZXNvbHZlIGVycm9yJyk7XG5cbiAgLy8gbWF0Y2g6IFsxXSB5ZWFyIFsyXSBtb250aCBbM10gZGF5XG5cbiAgeWVhciA9ICsobWF0Y2hbMV0pO1xuICBtb250aCA9ICsobWF0Y2hbMl0pIC0gMTsgLy8gSlMgbW9udGggc3RhcnRzIHdpdGggMFxuICBkYXkgPSArKG1hdGNoWzNdKTtcblxuICBpZiAoIW1hdGNoWzRdKSB7IC8vIG5vIGhvdXJcbiAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSkpO1xuICB9XG5cbiAgLy8gbWF0Y2g6IFs0XSBob3VyIFs1XSBtaW51dGUgWzZdIHNlY29uZCBbN10gZnJhY3Rpb25cblxuICBob3VyID0gKyhtYXRjaFs0XSk7XG4gIG1pbnV0ZSA9ICsobWF0Y2hbNV0pO1xuICBzZWNvbmQgPSArKG1hdGNoWzZdKTtcblxuICBpZiAobWF0Y2hbN10pIHtcbiAgICBmcmFjdGlvbiA9IG1hdGNoWzddLnNsaWNlKDAsIDMpO1xuICAgIHdoaWxlIChmcmFjdGlvbi5sZW5ndGggPCAzKSB7IC8vIG1pbGxpLXNlY29uZHNcbiAgICAgIGZyYWN0aW9uICs9ICcwJztcbiAgICB9XG4gICAgZnJhY3Rpb24gPSArZnJhY3Rpb247XG4gIH1cblxuICAvLyBtYXRjaDogWzhdIHR6IFs5XSB0el9zaWduIFsxMF0gdHpfaG91ciBbMTFdIHR6X21pbnV0ZVxuXG4gIGlmIChtYXRjaFs5XSkge1xuICAgIHR6X2hvdXIgPSArKG1hdGNoWzEwXSk7XG4gICAgdHpfbWludXRlID0gKyhtYXRjaFsxMV0gfHwgMCk7XG4gICAgZGVsdGEgPSAodHpfaG91ciAqIDYwICsgdHpfbWludXRlKSAqIDYwMDAwOyAvLyBkZWx0YSBpbiBtaWxpLXNlY29uZHNcbiAgICBpZiAobWF0Y2hbOV0gPT09ICctJykgZGVsdGEgPSAtZGVsdGE7XG4gIH1cblxuICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZyYWN0aW9uKSk7XG5cbiAgaWYgKGRlbHRhKSBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgLSBkZWx0YSk7XG5cbiAgcmV0dXJuIGRhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcHJlc2VudFlhbWxUaW1lc3RhbXAob2JqZWN0IC8qLCBzdHlsZSovKSB7XG4gIHJldHVybiBvYmplY3QudG9JU09TdHJpbmcoKTtcbn1cblxudmFyIHRpbWVzdGFtcCA9IG5ldyB0eXBlKCd0YWc6eWFtbC5vcmcsMjAwMjp0aW1lc3RhbXAnLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbFRpbWVzdGFtcCxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sVGltZXN0YW1wLFxuICBpbnN0YW5jZU9mOiBEYXRlLFxuICByZXByZXNlbnQ6IHJlcHJlc2VudFlhbWxUaW1lc3RhbXBcbn0pO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbE1lcmdlKGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEgPT09ICc8PCcgfHwgZGF0YSA9PT0gbnVsbDtcbn1cblxudmFyIG1lcmdlID0gbmV3IHR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOm1lcmdlJywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxNZXJnZVxufSk7XG5cbi8qZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSovXG5cblxuXG5cblxuLy8gWyA2NCwgNjUsIDY2IF0gLT4gWyBwYWRkaW5nLCBDUiwgTEYgXVxudmFyIEJBU0U2NF9NQVAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cXG5cXHInO1xuXG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sQmluYXJ5KGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICB2YXIgY29kZSwgaWR4LCBiaXRsZW4gPSAwLCBtYXggPSBkYXRhLmxlbmd0aCwgbWFwID0gQkFTRTY0X01BUDtcblxuICAvLyBDb252ZXJ0IG9uZSBieSBvbmUuXG4gIGZvciAoaWR4ID0gMDsgaWR4IDwgbWF4OyBpZHgrKykge1xuICAgIGNvZGUgPSBtYXAuaW5kZXhPZihkYXRhLmNoYXJBdChpZHgpKTtcblxuICAgIC8vIFNraXAgQ1IvTEZcbiAgICBpZiAoY29kZSA+IDY0KSBjb250aW51ZTtcblxuICAgIC8vIEZhaWwgb24gaWxsZWdhbCBjaGFyYWN0ZXJzXG4gICAgaWYgKGNvZGUgPCAwKSByZXR1cm4gZmFsc2U7XG5cbiAgICBiaXRsZW4gKz0gNjtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhbnkgYml0cyBsZWZ0LCBzb3VyY2Ugd2FzIGNvcnJ1cHRlZFxuICByZXR1cm4gKGJpdGxlbiAlIDgpID09PSAwO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sQmluYXJ5KGRhdGEpIHtcbiAgdmFyIGlkeCwgdGFpbGJpdHMsXG4gICAgICBpbnB1dCA9IGRhdGEucmVwbGFjZSgvW1xcclxcbj1dL2csICcnKSwgLy8gcmVtb3ZlIENSL0xGICYgcGFkZGluZyB0byBzaW1wbGlmeSBzY2FuXG4gICAgICBtYXggPSBpbnB1dC5sZW5ndGgsXG4gICAgICBtYXAgPSBCQVNFNjRfTUFQLFxuICAgICAgYml0cyA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICAvLyBDb2xsZWN0IGJ5IDYqNCBiaXRzICgzIGJ5dGVzKVxuXG4gIGZvciAoaWR4ID0gMDsgaWR4IDwgbWF4OyBpZHgrKykge1xuICAgIGlmICgoaWR4ICUgNCA9PT0gMCkgJiYgaWR4KSB7XG4gICAgICByZXN1bHQucHVzaCgoYml0cyA+PiAxNikgJiAweEZGKTtcbiAgICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDgpICYgMHhGRik7XG4gICAgICByZXN1bHQucHVzaChiaXRzICYgMHhGRik7XG4gICAgfVxuXG4gICAgYml0cyA9IChiaXRzIDw8IDYpIHwgbWFwLmluZGV4T2YoaW5wdXQuY2hhckF0KGlkeCkpO1xuICB9XG5cbiAgLy8gRHVtcCB0YWlsXG5cbiAgdGFpbGJpdHMgPSAobWF4ICUgNCkgKiA2O1xuXG4gIGlmICh0YWlsYml0cyA9PT0gMCkge1xuICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDE2KSAmIDB4RkYpO1xuICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDgpICYgMHhGRik7XG4gICAgcmVzdWx0LnB1c2goYml0cyAmIDB4RkYpO1xuICB9IGVsc2UgaWYgKHRhaWxiaXRzID09PSAxOCkge1xuICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDEwKSAmIDB4RkYpO1xuICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDIpICYgMHhGRik7XG4gIH0gZWxzZSBpZiAodGFpbGJpdHMgPT09IDEyKSB7XG4gICAgcmVzdWx0LnB1c2goKGJpdHMgPj4gNCkgJiAweEZGKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgVWludDhBcnJheShyZXN1bHQpO1xufVxuXG5mdW5jdGlvbiByZXByZXNlbnRZYW1sQmluYXJ5KG9iamVjdCAvKiwgc3R5bGUqLykge1xuICB2YXIgcmVzdWx0ID0gJycsIGJpdHMgPSAwLCBpZHgsIHRhaWwsXG4gICAgICBtYXggPSBvYmplY3QubGVuZ3RoLFxuICAgICAgbWFwID0gQkFTRTY0X01BUDtcblxuICAvLyBDb252ZXJ0IGV2ZXJ5IHRocmVlIGJ5dGVzIHRvIDQgQVNDSUkgY2hhcmFjdGVycy5cblxuICBmb3IgKGlkeCA9IDA7IGlkeCA8IG1heDsgaWR4KyspIHtcbiAgICBpZiAoKGlkeCAlIDMgPT09IDApICYmIGlkeCkge1xuICAgICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAxOCkgJiAweDNGXTtcbiAgICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gMTIpICYgMHgzRl07XG4gICAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDYpICYgMHgzRl07XG4gICAgICByZXN1bHQgKz0gbWFwW2JpdHMgJiAweDNGXTtcbiAgICB9XG5cbiAgICBiaXRzID0gKGJpdHMgPDwgOCkgKyBvYmplY3RbaWR4XTtcbiAgfVxuXG4gIC8vIER1bXAgdGFpbFxuXG4gIHRhaWwgPSBtYXggJSAzO1xuXG4gIGlmICh0YWlsID09PSAwKSB7XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAxOCkgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDEyKSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gNikgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwW2JpdHMgJiAweDNGXTtcbiAgfSBlbHNlIGlmICh0YWlsID09PSAyKSB7XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAxMCkgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDQpICYgMHgzRl07XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA8PCAyKSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbNjRdO1xuICB9IGVsc2UgaWYgKHRhaWwgPT09IDEpIHtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDIpICYgMHgzRl07XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA8PCA0KSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbNjRdO1xuICAgIHJlc3VsdCArPSBtYXBbNjRdO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXNCaW5hcnkob2JqKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gICdbb2JqZWN0IFVpbnQ4QXJyYXldJztcbn1cblxudmFyIGJpbmFyeSA9IG5ldyB0eXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpiaW5hcnknLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbEJpbmFyeSxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sQmluYXJ5LFxuICBwcmVkaWNhdGU6IGlzQmluYXJ5LFxuICByZXByZXNlbnQ6IHJlcHJlc2VudFlhbWxCaW5hcnlcbn0pO1xuXG52YXIgX2hhc093blByb3BlcnR5JDMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF90b1N0cmluZyQyICAgICAgID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxPbWFwKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiB0cnVlO1xuXG4gIHZhciBvYmplY3RLZXlzID0gW10sIGluZGV4LCBsZW5ndGgsIHBhaXIsIHBhaXJLZXksIHBhaXJIYXNLZXksXG4gICAgICBvYmplY3QgPSBkYXRhO1xuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHBhaXIgPSBvYmplY3RbaW5kZXhdO1xuICAgIHBhaXJIYXNLZXkgPSBmYWxzZTtcblxuICAgIGlmIChfdG9TdHJpbmckMi5jYWxsKHBhaXIpICE9PSAnW29iamVjdCBPYmplY3RdJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChwYWlyS2V5IGluIHBhaXIpIHtcbiAgICAgIGlmIChfaGFzT3duUHJvcGVydHkkMy5jYWxsKHBhaXIsIHBhaXJLZXkpKSB7XG4gICAgICAgIGlmICghcGFpckhhc0tleSkgcGFpckhhc0tleSA9IHRydWU7XG4gICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFpckhhc0tleSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKG9iamVjdEtleXMuaW5kZXhPZihwYWlyS2V5KSA9PT0gLTEpIG9iamVjdEtleXMucHVzaChwYWlyS2V5KTtcbiAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sT21hcChkYXRhKSB7XG4gIHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6IFtdO1xufVxuXG52YXIgb21hcCA9IG5ldyB0eXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpvbWFwJywge1xuICBraW5kOiAnc2VxdWVuY2UnLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbE9tYXAsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbE9tYXBcbn0pO1xuXG52YXIgX3RvU3RyaW5nJDEgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbFBhaXJzKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiB0cnVlO1xuXG4gIHZhciBpbmRleCwgbGVuZ3RoLCBwYWlyLCBrZXlzLCByZXN1bHQsXG4gICAgICBvYmplY3QgPSBkYXRhO1xuXG4gIHJlc3VsdCA9IG5ldyBBcnJheShvYmplY3QubGVuZ3RoKTtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBwYWlyID0gb2JqZWN0W2luZGV4XTtcblxuICAgIGlmIChfdG9TdHJpbmckMS5jYWxsKHBhaXIpICE9PSAnW29iamVjdCBPYmplY3RdJykgcmV0dXJuIGZhbHNlO1xuXG4gICAga2V5cyA9IE9iamVjdC5rZXlzKHBhaXIpO1xuXG4gICAgaWYgKGtleXMubGVuZ3RoICE9PSAxKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXN1bHRbaW5kZXhdID0gWyBrZXlzWzBdLCBwYWlyW2tleXNbMF1dIF07XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbFBhaXJzKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBbXTtcblxuICB2YXIgaW5kZXgsIGxlbmd0aCwgcGFpciwga2V5cywgcmVzdWx0LFxuICAgICAgb2JqZWN0ID0gZGF0YTtcblxuICByZXN1bHQgPSBuZXcgQXJyYXkob2JqZWN0Lmxlbmd0aCk7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgcGFpciA9IG9iamVjdFtpbmRleF07XG5cbiAgICBrZXlzID0gT2JqZWN0LmtleXMocGFpcik7XG5cbiAgICByZXN1bHRbaW5kZXhdID0gWyBrZXlzWzBdLCBwYWlyW2tleXNbMF1dIF07XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG52YXIgcGFpcnMgPSBuZXcgdHlwZSgndGFnOnlhbWwub3JnLDIwMDI6cGFpcnMnLCB7XG4gIGtpbmQ6ICdzZXF1ZW5jZScsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sUGFpcnMsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFBhaXJzXG59KTtcblxudmFyIF9oYXNPd25Qcm9wZXJ0eSQyID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxTZXQoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG5cbiAgdmFyIGtleSwgb2JqZWN0ID0gZGF0YTtcblxuICBmb3IgKGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoX2hhc093blByb3BlcnR5JDIuY2FsbChvYmplY3QsIGtleSkpIHtcbiAgICAgIGlmIChvYmplY3Rba2V5XSAhPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sU2V0KGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDoge307XG59XG5cbnZhciBzZXQgPSBuZXcgdHlwZSgndGFnOnlhbWwub3JnLDIwMDI6c2V0Jywge1xuICBraW5kOiAnbWFwcGluZycsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sU2V0LFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxTZXRcbn0pO1xuXG52YXIgX2RlZmF1bHQgPSBjb3JlLmV4dGVuZCh7XG4gIGltcGxpY2l0OiBbXG4gICAgdGltZXN0YW1wLFxuICAgIG1lcmdlXG4gIF0sXG4gIGV4cGxpY2l0OiBbXG4gICAgYmluYXJ5LFxuICAgIG9tYXAsXG4gICAgcGFpcnMsXG4gICAgc2V0XG4gIF1cbn0pO1xuXG4vKmVzbGludC1kaXNhYmxlIG1heC1sZW4sbm8tdXNlLWJlZm9yZS1kZWZpbmUqL1xuXG5cblxuXG5cblxuXG52YXIgX2hhc093blByb3BlcnR5JDEgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5cbnZhciBDT05URVhUX0ZMT1dfSU4gICA9IDE7XG52YXIgQ09OVEVYVF9GTE9XX09VVCAgPSAyO1xudmFyIENPTlRFWFRfQkxPQ0tfSU4gID0gMztcbnZhciBDT05URVhUX0JMT0NLX09VVCA9IDQ7XG5cblxudmFyIENIT01QSU5HX0NMSVAgID0gMTtcbnZhciBDSE9NUElOR19TVFJJUCA9IDI7XG52YXIgQ0hPTVBJTkdfS0VFUCAgPSAzO1xuXG5cbnZhciBQQVRURVJOX05PTl9QUklOVEFCTEUgICAgICAgICA9IC9bXFx4MDAtXFx4MDhcXHgwQlxceDBDXFx4MEUtXFx4MUZcXHg3Ri1cXHg4NFxceDg2LVxceDlGXFx1RkZGRVxcdUZGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdLztcbnZhciBQQVRURVJOX05PTl9BU0NJSV9MSU5FX0JSRUFLUyA9IC9bXFx4ODVcXHUyMDI4XFx1MjAyOV0vO1xudmFyIFBBVFRFUk5fRkxPV19JTkRJQ0FUT1JTICAgICAgID0gL1ssXFxbXFxdXFx7XFx9XS87XG52YXIgUEFUVEVSTl9UQUdfSEFORExFICAgICAgICAgICAgPSAvXig/OiF8ISF8IVthLXpcXC1dKyEpJC9pO1xudmFyIFBBVFRFUk5fVEFHX1VSSSAgICAgICAgICAgICAgID0gL14oPzohfFteLFxcW1xcXVxce1xcfV0pKD86JVswLTlhLWZdezJ9fFswLTlhLXpcXC0jO1xcL1xcPzpAJj1cXCtcXCQsX1xcLiF+XFwqJ1xcKFxcKVxcW1xcXV0pKiQvaTtcblxuXG5mdW5jdGlvbiBfY2xhc3Mob2JqKSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKTsgfVxuXG5mdW5jdGlvbiBpc19FT0woYykge1xuICByZXR1cm4gKGMgPT09IDB4MEEvKiBMRiAqLykgfHwgKGMgPT09IDB4MEQvKiBDUiAqLyk7XG59XG5cbmZ1bmN0aW9uIGlzX1dISVRFX1NQQUNFKGMpIHtcbiAgcmV0dXJuIChjID09PSAweDA5LyogVGFiICovKSB8fCAoYyA9PT0gMHgyMC8qIFNwYWNlICovKTtcbn1cblxuZnVuY3Rpb24gaXNfV1NfT1JfRU9MKGMpIHtcbiAgcmV0dXJuIChjID09PSAweDA5LyogVGFiICovKSB8fFxuICAgICAgICAgKGMgPT09IDB4MjAvKiBTcGFjZSAqLykgfHxcbiAgICAgICAgIChjID09PSAweDBBLyogTEYgKi8pIHx8XG4gICAgICAgICAoYyA9PT0gMHgwRC8qIENSICovKTtcbn1cblxuZnVuY3Rpb24gaXNfRkxPV19JTkRJQ0FUT1IoYykge1xuICByZXR1cm4gYyA9PT0gMHgyQy8qICwgKi8gfHxcbiAgICAgICAgIGMgPT09IDB4NUIvKiBbICovIHx8XG4gICAgICAgICBjID09PSAweDVELyogXSAqLyB8fFxuICAgICAgICAgYyA9PT0gMHg3Qi8qIHsgKi8gfHxcbiAgICAgICAgIGMgPT09IDB4N0QvKiB9ICovO1xufVxuXG5mdW5jdGlvbiBmcm9tSGV4Q29kZShjKSB7XG4gIHZhciBsYztcblxuICBpZiAoKDB4MzAvKiAwICovIDw9IGMpICYmIChjIDw9IDB4MzkvKiA5ICovKSkge1xuICAgIHJldHVybiBjIC0gMHgzMDtcbiAgfVxuXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSovXG4gIGxjID0gYyB8IDB4MjA7XG5cbiAgaWYgKCgweDYxLyogYSAqLyA8PSBsYykgJiYgKGxjIDw9IDB4NjYvKiBmICovKSkge1xuICAgIHJldHVybiBsYyAtIDB4NjEgKyAxMDtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlZEhleExlbihjKSB7XG4gIGlmIChjID09PSAweDc4LyogeCAqLykgeyByZXR1cm4gMjsgfVxuICBpZiAoYyA9PT0gMHg3NS8qIHUgKi8pIHsgcmV0dXJuIDQ7IH1cbiAgaWYgKGMgPT09IDB4NTUvKiBVICovKSB7IHJldHVybiA4OyB9XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBmcm9tRGVjaW1hbENvZGUoYykge1xuICBpZiAoKDB4MzAvKiAwICovIDw9IGMpICYmIChjIDw9IDB4MzkvKiA5ICovKSkge1xuICAgIHJldHVybiBjIC0gMHgzMDtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gc2ltcGxlRXNjYXBlU2VxdWVuY2UoYykge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBpbmRlbnQgKi9cbiAgcmV0dXJuIChjID09PSAweDMwLyogMCAqLykgPyAnXFx4MDAnIDpcbiAgICAgICAgKGMgPT09IDB4NjEvKiBhICovKSA/ICdcXHgwNycgOlxuICAgICAgICAoYyA9PT0gMHg2Mi8qIGIgKi8pID8gJ1xceDA4JyA6XG4gICAgICAgIChjID09PSAweDc0LyogdCAqLykgPyAnXFx4MDknIDpcbiAgICAgICAgKGMgPT09IDB4MDkvKiBUYWIgKi8pID8gJ1xceDA5JyA6XG4gICAgICAgIChjID09PSAweDZFLyogbiAqLykgPyAnXFx4MEEnIDpcbiAgICAgICAgKGMgPT09IDB4NzYvKiB2ICovKSA/ICdcXHgwQicgOlxuICAgICAgICAoYyA9PT0gMHg2Ni8qIGYgKi8pID8gJ1xceDBDJyA6XG4gICAgICAgIChjID09PSAweDcyLyogciAqLykgPyAnXFx4MEQnIDpcbiAgICAgICAgKGMgPT09IDB4NjUvKiBlICovKSA/ICdcXHgxQicgOlxuICAgICAgICAoYyA9PT0gMHgyMC8qIFNwYWNlICovKSA/ICcgJyA6XG4gICAgICAgIChjID09PSAweDIyLyogXCIgKi8pID8gJ1xceDIyJyA6XG4gICAgICAgIChjID09PSAweDJGLyogLyAqLykgPyAnLycgOlxuICAgICAgICAoYyA9PT0gMHg1Qy8qIFxcICovKSA/ICdcXHg1QycgOlxuICAgICAgICAoYyA9PT0gMHg0RS8qIE4gKi8pID8gJ1xceDg1JyA6XG4gICAgICAgIChjID09PSAweDVGLyogXyAqLykgPyAnXFx4QTAnIDpcbiAgICAgICAgKGMgPT09IDB4NEMvKiBMICovKSA/ICdcXHUyMDI4JyA6XG4gICAgICAgIChjID09PSAweDUwLyogUCAqLykgPyAnXFx1MjAyOScgOiAnJztcbn1cblxuZnVuY3Rpb24gY2hhckZyb21Db2RlcG9pbnQoYykge1xuICBpZiAoYyA8PSAweEZGRkYpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgfVxuICAvLyBFbmNvZGUgVVRGLTE2IHN1cnJvZ2F0ZSBwYWlyXG4gIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VURi0xNiNDb2RlX3BvaW50c19VLjJCMDEwMDAwX3RvX1UuMkIxMEZGRkZcbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoXG4gICAgKChjIC0gMHgwMTAwMDApID4+IDEwKSArIDB4RDgwMCxcbiAgICAoKGMgLSAweDAxMDAwMCkgJiAweDAzRkYpICsgMHhEQzAwXG4gICk7XG59XG5cbnZhciBzaW1wbGVFc2NhcGVDaGVjayA9IG5ldyBBcnJheSgyNTYpOyAvLyBpbnRlZ2VyLCBmb3IgZmFzdCBhY2Nlc3NcbnZhciBzaW1wbGVFc2NhcGVNYXAgPSBuZXcgQXJyYXkoMjU2KTtcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgc2ltcGxlRXNjYXBlQ2hlY2tbaV0gPSBzaW1wbGVFc2NhcGVTZXF1ZW5jZShpKSA/IDEgOiAwO1xuICBzaW1wbGVFc2NhcGVNYXBbaV0gPSBzaW1wbGVFc2NhcGVTZXF1ZW5jZShpKTtcbn1cblxuXG5mdW5jdGlvbiBTdGF0ZSQxKGlucHV0LCBvcHRpb25zKSB7XG4gIHRoaXMuaW5wdXQgPSBpbnB1dDtcblxuICB0aGlzLmZpbGVuYW1lICA9IG9wdGlvbnNbJ2ZpbGVuYW1lJ10gIHx8IG51bGw7XG4gIHRoaXMuc2NoZW1hICAgID0gb3B0aW9uc1snc2NoZW1hJ10gICAgfHwgX2RlZmF1bHQ7XG4gIHRoaXMub25XYXJuaW5nID0gb3B0aW9uc1snb25XYXJuaW5nJ10gfHwgbnVsbDtcbiAgLy8gKEhpZGRlbikgUmVtb3ZlPyBtYWtlcyB0aGUgbG9hZGVyIHRvIGV4cGVjdCBZQU1MIDEuMSBkb2N1bWVudHNcbiAgLy8gaWYgc3VjaCBkb2N1bWVudHMgaGF2ZSBubyBleHBsaWNpdCAlWUFNTCBkaXJlY3RpdmVcbiAgdGhpcy5sZWdhY3kgICAgPSBvcHRpb25zWydsZWdhY3knXSAgICB8fCBmYWxzZTtcblxuICB0aGlzLmpzb24gICAgICA9IG9wdGlvbnNbJ2pzb24nXSAgICAgIHx8IGZhbHNlO1xuICB0aGlzLmxpc3RlbmVyICA9IG9wdGlvbnNbJ2xpc3RlbmVyJ10gIHx8IG51bGw7XG5cbiAgdGhpcy5pbXBsaWNpdFR5cGVzID0gdGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdDtcbiAgdGhpcy50eXBlTWFwICAgICAgID0gdGhpcy5zY2hlbWEuY29tcGlsZWRUeXBlTWFwO1xuXG4gIHRoaXMubGVuZ3RoICAgICA9IGlucHV0Lmxlbmd0aDtcbiAgdGhpcy5wb3NpdGlvbiAgID0gMDtcbiAgdGhpcy5saW5lICAgICAgID0gMDtcbiAgdGhpcy5saW5lU3RhcnQgID0gMDtcbiAgdGhpcy5saW5lSW5kZW50ID0gMDtcblxuICAvLyBwb3NpdGlvbiBvZiBmaXJzdCBsZWFkaW5nIHRhYiBpbiB0aGUgY3VycmVudCBsaW5lLFxuICAvLyB1c2VkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdGFicyBpbiB0aGUgaW5kZW50YXRpb25cbiAgdGhpcy5maXJzdFRhYkluTGluZSA9IC0xO1xuXG4gIHRoaXMuZG9jdW1lbnRzID0gW107XG5cbiAgLypcbiAgdGhpcy52ZXJzaW9uO1xuICB0aGlzLmNoZWNrTGluZUJyZWFrcztcbiAgdGhpcy50YWdNYXA7XG4gIHRoaXMuYW5jaG9yTWFwO1xuICB0aGlzLnRhZztcbiAgdGhpcy5hbmNob3I7XG4gIHRoaXMua2luZDtcbiAgdGhpcy5yZXN1bHQ7Ki9cblxufVxuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlRXJyb3Ioc3RhdGUsIG1lc3NhZ2UpIHtcbiAgdmFyIG1hcmsgPSB7XG4gICAgbmFtZTogICAgIHN0YXRlLmZpbGVuYW1lLFxuICAgIGJ1ZmZlcjogICBzdGF0ZS5pbnB1dC5zbGljZSgwLCAtMSksIC8vIG9taXQgdHJhaWxpbmcgXFwwXG4gICAgcG9zaXRpb246IHN0YXRlLnBvc2l0aW9uLFxuICAgIGxpbmU6ICAgICBzdGF0ZS5saW5lLFxuICAgIGNvbHVtbjogICBzdGF0ZS5wb3NpdGlvbiAtIHN0YXRlLmxpbmVTdGFydFxuICB9O1xuXG4gIG1hcmsuc25pcHBldCA9IHNuaXBwZXQobWFyayk7XG5cbiAgcmV0dXJuIG5ldyBleGNlcHRpb24obWVzc2FnZSwgbWFyayk7XG59XG5cbmZ1bmN0aW9uIHRocm93RXJyb3Ioc3RhdGUsIG1lc3NhZ2UpIHtcbiAgdGhyb3cgZ2VuZXJhdGVFcnJvcihzdGF0ZSwgbWVzc2FnZSk7XG59XG5cbmZ1bmN0aW9uIHRocm93V2FybmluZyhzdGF0ZSwgbWVzc2FnZSkge1xuICBpZiAoc3RhdGUub25XYXJuaW5nKSB7XG4gICAgc3RhdGUub25XYXJuaW5nLmNhbGwobnVsbCwgZ2VuZXJhdGVFcnJvcihzdGF0ZSwgbWVzc2FnZSkpO1xuICB9XG59XG5cblxudmFyIGRpcmVjdGl2ZUhhbmRsZXJzID0ge1xuXG4gIFlBTUw6IGZ1bmN0aW9uIGhhbmRsZVlhbWxEaXJlY3RpdmUoc3RhdGUsIG5hbWUsIGFyZ3MpIHtcblxuICAgIHZhciBtYXRjaCwgbWFqb3IsIG1pbm9yO1xuXG4gICAgaWYgKHN0YXRlLnZlcnNpb24gIT09IG51bGwpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdkdXBsaWNhdGlvbiBvZiAlWUFNTCBkaXJlY3RpdmUnKTtcbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdZQU1MIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuXG4gICAgbWF0Y2ggPSAvXihbMC05XSspXFwuKFswLTldKykkLy5leGVjKGFyZ3NbMF0pO1xuXG4gICAgaWYgKG1hdGNoID09PSBudWxsKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnaWxsLWZvcm1lZCBhcmd1bWVudCBvZiB0aGUgWUFNTCBkaXJlY3RpdmUnKTtcbiAgICB9XG5cbiAgICBtYWpvciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7XG4gICAgbWlub3IgPSBwYXJzZUludChtYXRjaFsyXSwgMTApO1xuXG4gICAgaWYgKG1ham9yICE9PSAxKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5hY2NlcHRhYmxlIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQnKTtcbiAgICB9XG5cbiAgICBzdGF0ZS52ZXJzaW9uID0gYXJnc1swXTtcbiAgICBzdGF0ZS5jaGVja0xpbmVCcmVha3MgPSAobWlub3IgPCAyKTtcblxuICAgIGlmIChtaW5vciAhPT0gMSAmJiBtaW5vciAhPT0gMikge1xuICAgICAgdGhyb3dXYXJuaW5nKHN0YXRlLCAndW5zdXBwb3J0ZWQgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCcpO1xuICAgIH1cbiAgfSxcblxuICBUQUc6IGZ1bmN0aW9uIGhhbmRsZVRhZ0RpcmVjdGl2ZShzdGF0ZSwgbmFtZSwgYXJncykge1xuXG4gICAgdmFyIGhhbmRsZSwgcHJlZml4O1xuXG4gICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnVEFHIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgdHdvIGFyZ3VtZW50cycpO1xuICAgIH1cblxuICAgIGhhbmRsZSA9IGFyZ3NbMF07XG4gICAgcHJlZml4ID0gYXJnc1sxXTtcblxuICAgIGlmICghUEFUVEVSTl9UQUdfSEFORExFLnRlc3QoaGFuZGxlKSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2lsbC1mb3JtZWQgdGFnIGhhbmRsZSAoZmlyc3QgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlJyk7XG4gICAgfVxuXG4gICAgaWYgKF9oYXNPd25Qcm9wZXJ0eSQxLmNhbGwoc3RhdGUudGFnTWFwLCBoYW5kbGUpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGhlcmUgaXMgYSBwcmV2aW91c2x5IGRlY2xhcmVkIHN1ZmZpeCBmb3IgXCInICsgaGFuZGxlICsgJ1wiIHRhZyBoYW5kbGUnKTtcbiAgICB9XG5cbiAgICBpZiAoIVBBVFRFUk5fVEFHX1VSSS50ZXN0KHByZWZpeCkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdpbGwtZm9ybWVkIHRhZyBwcmVmaXggKHNlY29uZCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmUnKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcHJlZml4ID0gZGVjb2RlVVJJQ29tcG9uZW50KHByZWZpeCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGFnIHByZWZpeCBpcyBtYWxmb3JtZWQ6ICcgKyBwcmVmaXgpO1xuICAgIH1cblxuICAgIHN0YXRlLnRhZ01hcFtoYW5kbGVdID0gcHJlZml4O1xuICB9XG59O1xuXG5cbmZ1bmN0aW9uIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBzdGFydCwgZW5kLCBjaGVja0pzb24pIHtcbiAgdmFyIF9wb3NpdGlvbiwgX2xlbmd0aCwgX2NoYXJhY3RlciwgX3Jlc3VsdDtcblxuICBpZiAoc3RhcnQgPCBlbmQpIHtcbiAgICBfcmVzdWx0ID0gc3RhdGUuaW5wdXQuc2xpY2Uoc3RhcnQsIGVuZCk7XG5cbiAgICBpZiAoY2hlY2tKc29uKSB7XG4gICAgICBmb3IgKF9wb3NpdGlvbiA9IDAsIF9sZW5ndGggPSBfcmVzdWx0Lmxlbmd0aDsgX3Bvc2l0aW9uIDwgX2xlbmd0aDsgX3Bvc2l0aW9uICs9IDEpIHtcbiAgICAgICAgX2NoYXJhY3RlciA9IF9yZXN1bHQuY2hhckNvZGVBdChfcG9zaXRpb24pO1xuICAgICAgICBpZiAoIShfY2hhcmFjdGVyID09PSAweDA5IHx8XG4gICAgICAgICAgICAgICgweDIwIDw9IF9jaGFyYWN0ZXIgJiYgX2NoYXJhY3RlciA8PSAweDEwRkZGRikpKSB7XG4gICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2V4cGVjdGVkIHZhbGlkIEpTT04gY2hhcmFjdGVyJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFBBVFRFUk5fTk9OX1BSSU5UQUJMRS50ZXN0KF9yZXN1bHQpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGhlIHN0cmVhbSBjb250YWlucyBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMnKTtcbiAgICB9XG5cbiAgICBzdGF0ZS5yZXN1bHQgKz0gX3Jlc3VsdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZU1hcHBpbmdzKHN0YXRlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvdmVycmlkYWJsZUtleXMpIHtcbiAgdmFyIHNvdXJjZUtleXMsIGtleSwgaW5kZXgsIHF1YW50aXR5O1xuXG4gIGlmICghY29tbW9uLmlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnY2Fubm90IG1lcmdlIG1hcHBpbmdzOyB0aGUgcHJvdmlkZWQgc291cmNlIG9iamVjdCBpcyB1bmFjY2VwdGFibGUnKTtcbiAgfVxuXG4gIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuXG4gIGZvciAoaW5kZXggPSAwLCBxdWFudGl0eSA9IHNvdXJjZUtleXMubGVuZ3RoOyBpbmRleCA8IHF1YW50aXR5OyBpbmRleCArPSAxKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpbmRleF07XG5cbiAgICBpZiAoIV9oYXNPd25Qcm9wZXJ0eSQxLmNhbGwoZGVzdGluYXRpb24sIGtleSkpIHtcbiAgICAgIGRlc3RpbmF0aW9uW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIG92ZXJyaWRhYmxlS2V5c1trZXldID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSxcbiAgc3RhcnRMaW5lLCBzdGFydExpbmVTdGFydCwgc3RhcnRQb3MpIHtcblxuICB2YXIgaW5kZXgsIHF1YW50aXR5O1xuXG4gIC8vIFRoZSBvdXRwdXQgaXMgYSBwbGFpbiBvYmplY3QgaGVyZSwgc28ga2V5cyBjYW4gb25seSBiZSBzdHJpbmdzLlxuICAvLyBXZSBuZWVkIHRvIGNvbnZlcnQga2V5Tm9kZSB0byBhIHN0cmluZywgYnV0IGRvaW5nIHNvIGNhbiBoYW5nIHRoZSBwcm9jZXNzXG4gIC8vIChkZWVwbHkgbmVzdGVkIGFycmF5cyB0aGF0IGV4cGxvZGUgZXhwb25lbnRpYWxseSB1c2luZyBhbGlhc2VzKS5cbiAgaWYgKEFycmF5LmlzQXJyYXkoa2V5Tm9kZSkpIHtcbiAgICBrZXlOb2RlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoa2V5Tm9kZSk7XG5cbiAgICBmb3IgKGluZGV4ID0gMCwgcXVhbnRpdHkgPSBrZXlOb2RlLmxlbmd0aDsgaW5kZXggPCBxdWFudGl0eTsgaW5kZXggKz0gMSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5Tm9kZVtpbmRleF0pKSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICduZXN0ZWQgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBrZXlzJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Yga2V5Tm9kZSA9PT0gJ29iamVjdCcgJiYgX2NsYXNzKGtleU5vZGVbaW5kZXhdKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgICAga2V5Tm9kZVtpbmRleF0gPSAnW29iamVjdCBPYmplY3RdJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBdm9pZCBjb2RlIGV4ZWN1dGlvbiBpbiBsb2FkKCkgdmlhIHRvU3RyaW5nIHByb3BlcnR5XG4gIC8vIChzdGlsbCB1c2UgaXRzIG93biB0b1N0cmluZyBmb3IgYXJyYXlzLCB0aW1lc3RhbXBzLFxuICAvLyBhbmQgd2hhdGV2ZXIgdXNlciBzY2hlbWEgZXh0ZW5zaW9ucyBoYXBwZW4gdG8gaGF2ZSBAQHRvU3RyaW5nVGFnKVxuICBpZiAodHlwZW9mIGtleU5vZGUgPT09ICdvYmplY3QnICYmIF9jbGFzcyhrZXlOb2RlKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICBrZXlOb2RlID0gJ1tvYmplY3QgT2JqZWN0XSc7XG4gIH1cblxuXG4gIGtleU5vZGUgPSBTdHJpbmcoa2V5Tm9kZSk7XG5cbiAgaWYgKF9yZXN1bHQgPT09IG51bGwpIHtcbiAgICBfcmVzdWx0ID0ge307XG4gIH1cblxuICBpZiAoa2V5VGFnID09PSAndGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UnKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVOb2RlKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIHF1YW50aXR5ID0gdmFsdWVOb2RlLmxlbmd0aDsgaW5kZXggPCBxdWFudGl0eTsgaW5kZXggKz0gMSkge1xuICAgICAgICBtZXJnZU1hcHBpbmdzKHN0YXRlLCBfcmVzdWx0LCB2YWx1ZU5vZGVbaW5kZXhdLCBvdmVycmlkYWJsZUtleXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBtZXJnZU1hcHBpbmdzKHN0YXRlLCBfcmVzdWx0LCB2YWx1ZU5vZGUsIG92ZXJyaWRhYmxlS2V5cyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICghc3RhdGUuanNvbiAmJlxuICAgICAgICAhX2hhc093blByb3BlcnR5JDEuY2FsbChvdmVycmlkYWJsZUtleXMsIGtleU5vZGUpICYmXG4gICAgICAgIF9oYXNPd25Qcm9wZXJ0eSQxLmNhbGwoX3Jlc3VsdCwga2V5Tm9kZSkpIHtcbiAgICAgIHN0YXRlLmxpbmUgPSBzdGFydExpbmUgfHwgc3RhdGUubGluZTtcbiAgICAgIHN0YXRlLmxpbmVTdGFydCA9IHN0YXJ0TGluZVN0YXJ0IHx8IHN0YXRlLmxpbmVTdGFydDtcbiAgICAgIHN0YXRlLnBvc2l0aW9uID0gc3RhcnRQb3MgfHwgc3RhdGUucG9zaXRpb247XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZHVwbGljYXRlZCBtYXBwaW5nIGtleScpO1xuICAgIH1cblxuICAgIC8vIHVzZWQgZm9yIHRoaXMgc3BlY2lmaWMga2V5IG9ubHkgYmVjYXVzZSBPYmplY3QuZGVmaW5lUHJvcGVydHkgaXMgc2xvd1xuICAgIGlmIChrZXlOb2RlID09PSAnX19wcm90b19fJykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9yZXN1bHQsIGtleU5vZGUsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IHZhbHVlTm9kZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9yZXN1bHRba2V5Tm9kZV0gPSB2YWx1ZU5vZGU7XG4gICAgfVxuICAgIGRlbGV0ZSBvdmVycmlkYWJsZUtleXNba2V5Tm9kZV07XG4gIH1cblxuICByZXR1cm4gX3Jlc3VsdDtcbn1cblxuZnVuY3Rpb24gcmVhZExpbmVCcmVhayhzdGF0ZSkge1xuICB2YXIgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggPT09IDB4MEEvKiBMRiAqLykge1xuICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gIH0gZWxzZSBpZiAoY2ggPT09IDB4MEQvKiBDUiAqLykge1xuICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgaWYgKHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pID09PSAweDBBLyogTEYgKi8pIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICdhIGxpbmUgYnJlYWsgaXMgZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIHN0YXRlLmxpbmUgKz0gMTtcbiAgc3RhdGUubGluZVN0YXJ0ID0gc3RhdGUucG9zaXRpb247XG4gIHN0YXRlLmZpcnN0VGFiSW5MaW5lID0gLTE7XG59XG5cbmZ1bmN0aW9uIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGFsbG93Q29tbWVudHMsIGNoZWNrSW5kZW50KSB7XG4gIHZhciBsaW5lQnJlYWtzID0gMCxcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgaWYgKGNoID09PSAweDA5LyogVGFiICovICYmIHN0YXRlLmZpcnN0VGFiSW5MaW5lID09PSAtMSkge1xuICAgICAgICBzdGF0ZS5maXJzdFRhYkluTGluZSA9IHN0YXRlLnBvc2l0aW9uO1xuICAgICAgfVxuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIGlmIChhbGxvd0NvbW1lbnRzICYmIGNoID09PSAweDIzLyogIyAqLykge1xuICAgICAgZG8ge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9IHdoaWxlIChjaCAhPT0gMHgwQS8qIExGICovICYmIGNoICE9PSAweDBELyogQ1IgKi8gJiYgY2ggIT09IDApO1xuICAgIH1cblxuICAgIGlmIChpc19FT0woY2gpKSB7XG4gICAgICByZWFkTGluZUJyZWFrKHN0YXRlKTtcblxuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgIGxpbmVCcmVha3MrKztcbiAgICAgIHN0YXRlLmxpbmVJbmRlbnQgPSAwO1xuXG4gICAgICB3aGlsZSAoY2ggPT09IDB4MjAvKiBTcGFjZSAqLykge1xuICAgICAgICBzdGF0ZS5saW5lSW5kZW50Kys7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNoZWNrSW5kZW50ICE9PSAtMSAmJiBsaW5lQnJlYWtzICE9PSAwICYmIHN0YXRlLmxpbmVJbmRlbnQgPCBjaGVja0luZGVudCkge1xuICAgIHRocm93V2FybmluZyhzdGF0ZSwgJ2RlZmljaWVudCBpbmRlbnRhdGlvbicpO1xuICB9XG5cbiAgcmV0dXJuIGxpbmVCcmVha3M7XG59XG5cbmZ1bmN0aW9uIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkge1xuICB2YXIgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb24sXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uKTtcblxuICAvLyBDb25kaXRpb24gc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCBpcyB0ZXN0ZWRcbiAgLy8gaW4gcGFyZW50IG9uIGVhY2ggY2FsbCwgZm9yIGVmZmljaWVuY3kuIE5vIG5lZWRzIHRvIHRlc3QgaGVyZSBhZ2Fpbi5cbiAgaWYgKChjaCA9PT0gMHgyRC8qIC0gKi8gfHwgY2ggPT09IDB4MkUvKiAuICovKSAmJlxuICAgICAgY2ggPT09IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uICsgMSkgJiZcbiAgICAgIGNoID09PSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KF9wb3NpdGlvbiArIDIpKSB7XG5cbiAgICBfcG9zaXRpb24gKz0gMztcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24pO1xuXG4gICAgaWYgKGNoID09PSAwIHx8IGlzX1dTX09SX0VPTChjaCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZSwgY291bnQpIHtcbiAgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgc3RhdGUucmVzdWx0ICs9ICcgJztcbiAgfSBlbHNlIGlmIChjb3VudCA+IDEpIHtcbiAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnXFxuJywgY291bnQgLSAxKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHJlYWRQbGFpblNjYWxhcihzdGF0ZSwgbm9kZUluZGVudCwgd2l0aGluRmxvd0NvbGxlY3Rpb24pIHtcbiAgdmFyIHByZWNlZGluZyxcbiAgICAgIGZvbGxvd2luZyxcbiAgICAgIGNhcHR1cmVTdGFydCxcbiAgICAgIGNhcHR1cmVFbmQsXG4gICAgICBoYXNQZW5kaW5nQ29udGVudCxcbiAgICAgIF9saW5lLFxuICAgICAgX2xpbmVTdGFydCxcbiAgICAgIF9saW5lSW5kZW50LFxuICAgICAgX2tpbmQgPSBzdGF0ZS5raW5kLFxuICAgICAgX3Jlc3VsdCA9IHN0YXRlLnJlc3VsdCxcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGlzX1dTX09SX0VPTChjaCkgICAgICB8fFxuICAgICAgaXNfRkxPV19JTkRJQ0FUT1IoY2gpIHx8XG4gICAgICBjaCA9PT0gMHgyMy8qICMgKi8gICAgfHxcbiAgICAgIGNoID09PSAweDI2LyogJiAqLyAgICB8fFxuICAgICAgY2ggPT09IDB4MkEvKiAqICovICAgIHx8XG4gICAgICBjaCA9PT0gMHgyMS8qICEgKi8gICAgfHxcbiAgICAgIGNoID09PSAweDdDLyogfCAqLyAgICB8fFxuICAgICAgY2ggPT09IDB4M0UvKiA+ICovICAgIHx8XG4gICAgICBjaCA9PT0gMHgyNy8qICcgKi8gICAgfHxcbiAgICAgIGNoID09PSAweDIyLyogXCIgKi8gICAgfHxcbiAgICAgIGNoID09PSAweDI1LyogJSAqLyAgICB8fFxuICAgICAgY2ggPT09IDB4NDAvKiBAICovICAgIHx8XG4gICAgICBjaCA9PT0gMHg2MC8qIGAgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoY2ggPT09IDB4M0YvKiA/ICovIHx8IGNoID09PSAweDJELyogLSAqLykge1xuICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgIGlmIChpc19XU19PUl9FT0woZm9sbG93aW5nKSB8fFxuICAgICAgICB3aXRoaW5GbG93Q29sbGVjdGlvbiAmJiBpc19GTE9XX0lORElDQVRPUihmb2xsb3dpbmcpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc3RhdGUua2luZCA9ICdzY2FsYXInO1xuICBzdGF0ZS5yZXN1bHQgPSAnJztcbiAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICBoYXNQZW5kaW5nQ29udGVudCA9IGZhbHNlO1xuXG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIGlmIChjaCA9PT0gMHgzQS8qIDogKi8pIHtcbiAgICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgICAgaWYgKGlzX1dTX09SX0VPTChmb2xsb3dpbmcpIHx8XG4gICAgICAgICAgd2l0aGluRmxvd0NvbGxlY3Rpb24gJiYgaXNfRkxPV19JTkRJQ0FUT1IoZm9sbG93aW5nKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MjMvKiAjICovKSB7XG4gICAgICBwcmVjZWRpbmcgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uIC0gMSk7XG5cbiAgICAgIGlmIChpc19XU19PUl9FT0wocHJlY2VkaW5nKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoKHN0YXRlLnBvc2l0aW9uID09PSBzdGF0ZS5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlKSkgfHxcbiAgICAgICAgICAgICAgIHdpdGhpbkZsb3dDb2xsZWN0aW9uICYmIGlzX0ZMT1dfSU5ESUNBVE9SKGNoKSkge1xuICAgICAgYnJlYWs7XG5cbiAgICB9IGVsc2UgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgIF9saW5lID0gc3RhdGUubGluZTtcbiAgICAgIF9saW5lU3RhcnQgPSBzdGF0ZS5saW5lU3RhcnQ7XG4gICAgICBfbGluZUluZGVudCA9IHN0YXRlLmxpbmVJbmRlbnQ7XG4gICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCBmYWxzZSwgLTEpO1xuXG4gICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+PSBub2RlSW5kZW50KSB7XG4gICAgICAgIGhhc1BlbmRpbmdDb250ZW50ID0gdHJ1ZTtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5wb3NpdGlvbiA9IGNhcHR1cmVFbmQ7XG4gICAgICAgIHN0YXRlLmxpbmUgPSBfbGluZTtcbiAgICAgICAgc3RhdGUubGluZVN0YXJ0ID0gX2xpbmVTdGFydDtcbiAgICAgICAgc3RhdGUubGluZUluZGVudCA9IF9saW5lSW5kZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzUGVuZGluZ0NvbnRlbnQpIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIGZhbHNlKTtcbiAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUsIHN0YXRlLmxpbmUgLSBfbGluZSk7XG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gICAgICBoYXNQZW5kaW5nQ29udGVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgICBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb24gKyAxO1xuICAgIH1cblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgfVxuXG4gIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIGZhbHNlKTtcblxuICBpZiAoc3RhdGUucmVzdWx0KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzdGF0ZS5raW5kID0gX2tpbmQ7XG4gIHN0YXRlLnJlc3VsdCA9IF9yZXN1bHQ7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcmVhZFNpbmdsZVF1b3RlZFNjYWxhcihzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgY2gsXG4gICAgICBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQ7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggIT09IDB4MjcvKiAnICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGUua2luZCA9ICdzY2FsYXInO1xuICBzdGF0ZS5yZXN1bHQgPSAnJztcbiAgc3RhdGUucG9zaXRpb24rKztcbiAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gIHdoaWxlICgoY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSkgIT09IDApIHtcbiAgICBpZiAoY2ggPT09IDB4MjcvKiAnICovKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBzdGF0ZS5wb3NpdGlvbiwgdHJ1ZSk7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICAgIGlmIChjaCA9PT0gMHgyNy8qICcgKi8pIHtcbiAgICAgICAgY2FwdHVyZVN0YXJ0ID0gc3RhdGUucG9zaXRpb247XG4gICAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmIChpc19FT0woY2gpKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCB0cnVlKTtcbiAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUsIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGZhbHNlLCBub2RlSW5kZW50KSk7XG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG5cbiAgICB9IGVsc2UgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBzdGF0ZS5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlKSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhcicpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gICAgfVxuICB9XG5cbiAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXInKTtcbn1cblxuZnVuY3Rpb24gcmVhZERvdWJsZVF1b3RlZFNjYWxhcihzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgY2FwdHVyZVN0YXJ0LFxuICAgICAgY2FwdHVyZUVuZCxcbiAgICAgIGhleExlbmd0aCxcbiAgICAgIGhleFJlc3VsdCxcbiAgICAgIHRtcCxcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGNoICE9PSAweDIyLyogXCIgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0ZS5raW5kID0gJ3NjYWxhcic7XG4gIHN0YXRlLnJlc3VsdCA9ICcnO1xuICBzdGF0ZS5wb3NpdGlvbisrO1xuICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG5cbiAgd2hpbGUgKChjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pKSAhPT0gMCkge1xuICAgIGlmIChjaCA9PT0gMHgyMi8qIFwiICovKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBzdGF0ZS5wb3NpdGlvbiwgdHJ1ZSk7XG4gICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICB9IGVsc2UgaWYgKGNoID09PSAweDVDLyogXFwgKi8pIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIHN0YXRlLnBvc2l0aW9uLCB0cnVlKTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICAgICAgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgZmFsc2UsIG5vZGVJbmRlbnQpO1xuXG4gICAgICAgIC8vIFRPRE86IHJld29yayB0byBpbmxpbmUgZm4gd2l0aCBubyB0eXBlIGNhc3Q/XG4gICAgICB9IGVsc2UgaWYgKGNoIDwgMjU2ICYmIHNpbXBsZUVzY2FwZUNoZWNrW2NoXSkge1xuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gc2ltcGxlRXNjYXBlTWFwW2NoXTtcbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcblxuICAgICAgfSBlbHNlIGlmICgodG1wID0gZXNjYXBlZEhleExlbihjaCkpID4gMCkge1xuICAgICAgICBoZXhMZW5ndGggPSB0bXA7XG4gICAgICAgIGhleFJlc3VsdCA9IDA7XG5cbiAgICAgICAgZm9yICg7IGhleExlbmd0aCA+IDA7IGhleExlbmd0aC0tKSB7XG4gICAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gICAgICAgICAgaWYgKCh0bXAgPSBmcm9tSGV4Q29kZShjaCkpID49IDApIHtcbiAgICAgICAgICAgIGhleFJlc3VsdCA9IChoZXhSZXN1bHQgPDwgNCkgKyB0bXA7XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2V4cGVjdGVkIGhleGFkZWNpbWFsIGNoYXJhY3RlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjaGFyRnJvbUNvZGVwb2ludChoZXhSZXN1bHQpO1xuXG4gICAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmtub3duIGVzY2FwZSBzZXF1ZW5jZScpO1xuICAgICAgfVxuXG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG5cbiAgICB9IGVsc2UgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIHRydWUpO1xuICAgICAgd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZSwgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgZmFsc2UsIG5vZGVJbmRlbnQpKTtcbiAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcblxuICAgIH0gZWxzZSBpZiAoc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyJyk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICB9XG4gIH1cblxuICB0aHJvd0Vycm9yKHN0YXRlLCAndW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhcicpO1xufVxuXG5mdW5jdGlvbiByZWFkRmxvd0NvbGxlY3Rpb24oc3RhdGUsIG5vZGVJbmRlbnQpIHtcbiAgdmFyIHJlYWROZXh0ID0gdHJ1ZSxcbiAgICAgIF9saW5lLFxuICAgICAgX2xpbmVTdGFydCxcbiAgICAgIF9wb3MsXG4gICAgICBfdGFnICAgICA9IHN0YXRlLnRhZyxcbiAgICAgIF9yZXN1bHQsXG4gICAgICBfYW5jaG9yICA9IHN0YXRlLmFuY2hvcixcbiAgICAgIGZvbGxvd2luZyxcbiAgICAgIHRlcm1pbmF0b3IsXG4gICAgICBpc1BhaXIsXG4gICAgICBpc0V4cGxpY2l0UGFpcixcbiAgICAgIGlzTWFwcGluZyxcbiAgICAgIG92ZXJyaWRhYmxlS2V5cyA9IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICBrZXlOb2RlLFxuICAgICAga2V5VGFnLFxuICAgICAgdmFsdWVOb2RlLFxuICAgICAgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggPT09IDB4NUIvKiBbICovKSB7XG4gICAgdGVybWluYXRvciA9IDB4NUQ7LyogXSAqL1xuICAgIGlzTWFwcGluZyA9IGZhbHNlO1xuICAgIF9yZXN1bHQgPSBbXTtcbiAgfSBlbHNlIGlmIChjaCA9PT0gMHg3Qi8qIHsgKi8pIHtcbiAgICB0ZXJtaW5hdG9yID0gMHg3RDsvKiB9ICovXG4gICAgaXNNYXBwaW5nID0gdHJ1ZTtcbiAgICBfcmVzdWx0ID0ge307XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCkge1xuICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gX3Jlc3VsdDtcbiAgfVxuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoY2ggPT09IHRlcm1pbmF0b3IpIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgICAgc3RhdGUuYW5jaG9yID0gX2FuY2hvcjtcbiAgICAgIHN0YXRlLmtpbmQgPSBpc01hcHBpbmcgPyAnbWFwcGluZycgOiAnc2VxdWVuY2UnO1xuICAgICAgc3RhdGUucmVzdWx0ID0gX3Jlc3VsdDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIXJlYWROZXh0KSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbWlzc2VkIGNvbW1hIGJldHdlZW4gZmxvdyBjb2xsZWN0aW9uIGVudHJpZXMnKTtcbiAgICB9IGVsc2UgaWYgKGNoID09PSAweDJDLyogLCAqLykge1xuICAgICAgLy8gXCJmbG93IGNvbGxlY3Rpb24gZW50cmllcyBjYW4gbmV2ZXIgYmUgY29tcGxldGVseSBlbXB0eVwiLCBhcyBwZXIgWUFNTCAxLjIsIHNlY3Rpb24gNy40XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImV4cGVjdGVkIHRoZSBub2RlIGNvbnRlbnQsIGJ1dCBmb3VuZCAnLCdcIik7XG4gICAgfVxuXG4gICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7XG4gICAgaXNQYWlyID0gaXNFeHBsaWNpdFBhaXIgPSBmYWxzZTtcblxuICAgIGlmIChjaCA9PT0gMHgzRi8qID8gKi8pIHtcbiAgICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgICAgaWYgKGlzX1dTX09SX0VPTChmb2xsb3dpbmcpKSB7XG4gICAgICAgIGlzUGFpciA9IGlzRXhwbGljaXRQYWlyID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgbm9kZUluZGVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2xpbmUgPSBzdGF0ZS5saW5lOyAvLyBTYXZlIHRoZSBjdXJyZW50IGxpbmUuXG4gICAgX2xpbmVTdGFydCA9IHN0YXRlLmxpbmVTdGFydDtcbiAgICBfcG9zID0gc3RhdGUucG9zaXRpb247XG4gICAgY29tcG9zZU5vZGUoc3RhdGUsIG5vZGVJbmRlbnQsIENPTlRFWFRfRkxPV19JTiwgZmFsc2UsIHRydWUpO1xuICAgIGtleVRhZyA9IHN0YXRlLnRhZztcbiAgICBrZXlOb2RlID0gc3RhdGUucmVzdWx0O1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIG5vZGVJbmRlbnQpO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmICgoaXNFeHBsaWNpdFBhaXIgfHwgc3RhdGUubGluZSA9PT0gX2xpbmUpICYmIGNoID09PSAweDNBLyogOiAqLykge1xuICAgICAgaXNQYWlyID0gdHJ1ZTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIG5vZGVJbmRlbnQpO1xuICAgICAgY29tcG9zZU5vZGUoc3RhdGUsIG5vZGVJbmRlbnQsIENPTlRFWFRfRkxPV19JTiwgZmFsc2UsIHRydWUpO1xuICAgICAgdmFsdWVOb2RlID0gc3RhdGUucmVzdWx0O1xuICAgIH1cblxuICAgIGlmIChpc01hcHBpbmcpIHtcbiAgICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUsIF9saW5lLCBfbGluZVN0YXJ0LCBfcG9zKTtcbiAgICB9IGVsc2UgaWYgKGlzUGFpcikge1xuICAgICAgX3Jlc3VsdC5wdXNoKHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIG51bGwsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUsIF9saW5lLCBfbGluZVN0YXJ0LCBfcG9zKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9yZXN1bHQucHVzaChrZXlOb2RlKTtcbiAgICB9XG5cbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoY2ggPT09IDB4MkMvKiAsICovKSB7XG4gICAgICByZWFkTmV4dCA9IHRydWU7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlYWROZXh0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZmxvdyBjb2xsZWN0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9ja1NjYWxhcihzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgY2FwdHVyZVN0YXJ0LFxuICAgICAgZm9sZGluZyxcbiAgICAgIGNob21waW5nICAgICAgID0gQ0hPTVBJTkdfQ0xJUCxcbiAgICAgIGRpZFJlYWRDb250ZW50ID0gZmFsc2UsXG4gICAgICBkZXRlY3RlZEluZGVudCA9IGZhbHNlLFxuICAgICAgdGV4dEluZGVudCAgICAgPSBub2RlSW5kZW50LFxuICAgICAgZW1wdHlMaW5lcyAgICAgPSAwLFxuICAgICAgYXRNb3JlSW5kZW50ZWQgPSBmYWxzZSxcbiAgICAgIHRtcCxcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGNoID09PSAweDdDLyogfCAqLykge1xuICAgIGZvbGRpbmcgPSBmYWxzZTtcbiAgfSBlbHNlIGlmIChjaCA9PT0gMHgzRS8qID4gKi8pIHtcbiAgICBmb2xkaW5nID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0ZS5raW5kID0gJ3NjYWxhcic7XG4gIHN0YXRlLnJlc3VsdCA9ICcnO1xuXG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmIChjaCA9PT0gMHgyQi8qICsgKi8gfHwgY2ggPT09IDB4MkQvKiAtICovKSB7XG4gICAgICBpZiAoQ0hPTVBJTkdfQ0xJUCA9PT0gY2hvbXBpbmcpIHtcbiAgICAgICAgY2hvbXBpbmcgPSAoY2ggPT09IDB4MkIvKiArICovKSA/IENIT01QSU5HX0tFRVAgOiBDSE9NUElOR19TVFJJUDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdyZXBlYXQgb2YgYSBjaG9tcGluZyBtb2RlIGlkZW50aWZpZXInKTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoKHRtcCA9IGZyb21EZWNpbWFsQ29kZShjaCkpID49IDApIHtcbiAgICAgIGlmICh0bXAgPT09IDApIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2JhZCBleHBsaWNpdCBpbmRlbnRhdGlvbiB3aWR0aCBvZiBhIGJsb2NrIHNjYWxhcjsgaXQgY2Fubm90IGJlIGxlc3MgdGhhbiBvbmUnKTtcbiAgICAgIH0gZWxzZSBpZiAoIWRldGVjdGVkSW5kZW50KSB7XG4gICAgICAgIHRleHRJbmRlbnQgPSBub2RlSW5kZW50ICsgdG1wIC0gMTtcbiAgICAgICAgZGV0ZWN0ZWRJbmRlbnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3JlcGVhdCBvZiBhbiBpbmRlbnRhdGlvbiB3aWR0aCBpZGVudGlmaWVyJyk7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgIGRvIHsgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOyB9XG4gICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSk7XG5cbiAgICBpZiAoY2ggPT09IDB4MjMvKiAjICovKSB7XG4gICAgICBkbyB7IGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsgfVxuICAgICAgd2hpbGUgKCFpc19FT0woY2gpICYmIChjaCAhPT0gMCkpO1xuICAgIH1cbiAgfVxuXG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIHJlYWRMaW5lQnJlYWsoc3RhdGUpO1xuICAgIHN0YXRlLmxpbmVJbmRlbnQgPSAwO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIHdoaWxlICgoIWRldGVjdGVkSW5kZW50IHx8IHN0YXRlLmxpbmVJbmRlbnQgPCB0ZXh0SW5kZW50KSAmJlxuICAgICAgICAgICAoY2ggPT09IDB4MjAvKiBTcGFjZSAqLykpIHtcbiAgICAgIHN0YXRlLmxpbmVJbmRlbnQrKztcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAoIWRldGVjdGVkSW5kZW50ICYmIHN0YXRlLmxpbmVJbmRlbnQgPiB0ZXh0SW5kZW50KSB7XG4gICAgICB0ZXh0SW5kZW50ID0gc3RhdGUubGluZUluZGVudDtcbiAgICB9XG5cbiAgICBpZiAoaXNfRU9MKGNoKSkge1xuICAgICAgZW1wdHlMaW5lcysrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gRW5kIG9mIHRoZSBzY2FsYXIuXG4gICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCB0ZXh0SW5kZW50KSB7XG5cbiAgICAgIC8vIFBlcmZvcm0gdGhlIGNob21waW5nLlxuICAgICAgaWYgKGNob21waW5nID09PSBDSE9NUElOR19LRUVQKSB7XG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCdcXG4nLCBkaWRSZWFkQ29udGVudCA/IDEgKyBlbXB0eUxpbmVzIDogZW1wdHlMaW5lcyk7XG4gICAgICB9IGVsc2UgaWYgKGNob21waW5nID09PSBDSE9NUElOR19DTElQKSB7XG4gICAgICAgIGlmIChkaWRSZWFkQ29udGVudCkgeyAvLyBpLmUuIG9ubHkgaWYgdGhlIHNjYWxhciBpcyBub3QgZW1wdHkuXG4gICAgICAgICAgc3RhdGUucmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEJyZWFrIHRoaXMgYHdoaWxlYCBjeWNsZSBhbmQgZ28gdG8gdGhlIGZ1bmNpdG9uJ3MgZXBpbG9ndWUuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBGb2xkZWQgc3R5bGU6IHVzZSBmYW5jeSBydWxlcyB0byBoYW5kbGUgbGluZSBicmVha3MuXG4gICAgaWYgKGZvbGRpbmcpIHtcblxuICAgICAgLy8gTGluZXMgc3RhcnRpbmcgd2l0aCB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXJzIChtb3JlLWluZGVudGVkIGxpbmVzKSBhcmUgbm90IGZvbGRlZC5cbiAgICAgIGlmIChpc19XSElURV9TUEFDRShjaCkpIHtcbiAgICAgICAgYXRNb3JlSW5kZW50ZWQgPSB0cnVlO1xuICAgICAgICAvLyBleGNlcHQgZm9yIHRoZSBmaXJzdCBjb250ZW50IGxpbmUgKGNmLiBFeGFtcGxlIDguMSlcbiAgICAgICAgc3RhdGUucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoJ1xcbicsIGRpZFJlYWRDb250ZW50ID8gMSArIGVtcHR5TGluZXMgOiBlbXB0eUxpbmVzKTtcblxuICAgICAgLy8gRW5kIG9mIG1vcmUtaW5kZW50ZWQgYmxvY2suXG4gICAgICB9IGVsc2UgaWYgKGF0TW9yZUluZGVudGVkKSB7XG4gICAgICAgIGF0TW9yZUluZGVudGVkID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCdcXG4nLCBlbXB0eUxpbmVzICsgMSk7XG5cbiAgICAgIC8vIEp1c3Qgb25lIGxpbmUgYnJlYWsgLSBwZXJjZWl2ZSBhcyB0aGUgc2FtZSBsaW5lLlxuICAgICAgfSBlbHNlIGlmIChlbXB0eUxpbmVzID09PSAwKSB7XG4gICAgICAgIGlmIChkaWRSZWFkQ29udGVudCkgeyAvLyBpLmUuIG9ubHkgaWYgd2UgaGF2ZSBhbHJlYWR5IHJlYWQgc29tZSBzY2FsYXIgY29udGVudC5cbiAgICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gJyAnO1xuICAgICAgICB9XG5cbiAgICAgIC8vIFNldmVyYWwgbGluZSBicmVha3MgLSBwZXJjZWl2ZSBhcyBkaWZmZXJlbnQgbGluZXMuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnXFxuJywgZW1wdHlMaW5lcyk7XG4gICAgICB9XG5cbiAgICAvLyBMaXRlcmFsIHN0eWxlOiBqdXN0IGFkZCBleGFjdCBudW1iZXIgb2YgbGluZSBicmVha3MgYmV0d2VlbiBjb250ZW50IGxpbmVzLlxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBLZWVwIGFsbCBsaW5lIGJyZWFrcyBleGNlcHQgdGhlIGhlYWRlciBsaW5lIGJyZWFrLlxuICAgICAgc3RhdGUucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoJ1xcbicsIGRpZFJlYWRDb250ZW50ID8gMSArIGVtcHR5TGluZXMgOiBlbXB0eUxpbmVzKTtcbiAgICB9XG5cbiAgICBkaWRSZWFkQ29udGVudCA9IHRydWU7XG4gICAgZGV0ZWN0ZWRJbmRlbnQgPSB0cnVlO1xuICAgIGVtcHR5TGluZXMgPSAwO1xuICAgIGNhcHR1cmVTdGFydCA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gICAgd2hpbGUgKCFpc19FT0woY2gpICYmIChjaCAhPT0gMCkpIHtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBzdGF0ZS5wb3NpdGlvbiwgZmFsc2UpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9ja1NlcXVlbmNlKHN0YXRlLCBub2RlSW5kZW50KSB7XG4gIHZhciBfbGluZSxcbiAgICAgIF90YWcgICAgICA9IHN0YXRlLnRhZyxcbiAgICAgIF9hbmNob3IgICA9IHN0YXRlLmFuY2hvcixcbiAgICAgIF9yZXN1bHQgICA9IFtdLFxuICAgICAgZm9sbG93aW5nLFxuICAgICAgZGV0ZWN0ZWQgID0gZmFsc2UsXG4gICAgICBjaDtcblxuICAvLyB0aGVyZSBpcyBhIGxlYWRpbmcgdGFiIGJlZm9yZSB0aGlzIHRva2VuLCBzbyBpdCBjYW4ndCBiZSBhIGJsb2NrIHNlcXVlbmNlL21hcHBpbmc7XG4gIC8vIGl0IGNhbiBzdGlsbCBiZSBmbG93IHNlcXVlbmNlL21hcHBpbmcgb3IgYSBzY2FsYXJcbiAgaWYgKHN0YXRlLmZpcnN0VGFiSW5MaW5lICE9PSAtMSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IF9yZXN1bHQ7XG4gIH1cblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIGlmIChzdGF0ZS5maXJzdFRhYkluTGluZSAhPT0gLTEpIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uID0gc3RhdGUuZmlyc3RUYWJJbkxpbmU7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGFiIGNoYXJhY3RlcnMgbXVzdCBub3QgYmUgdXNlZCBpbiBpbmRlbnRhdGlvbicpO1xuICAgIH1cblxuICAgIGlmIChjaCAhPT0gMHgyRC8qIC0gKi8pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgIGlmICghaXNfV1NfT1JfRU9MKGZvbGxvd2luZykpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGRldGVjdGVkID0gdHJ1ZTtcbiAgICBzdGF0ZS5wb3NpdGlvbisrO1xuXG4gICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKSkge1xuICAgICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPD0gbm9kZUluZGVudCkge1xuICAgICAgICBfcmVzdWx0LnB1c2gobnVsbCk7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIF9saW5lID0gc3RhdGUubGluZTtcbiAgICBjb21wb3NlTm9kZShzdGF0ZSwgbm9kZUluZGVudCwgQ09OVEVYVF9CTE9DS19JTiwgZmFsc2UsIHRydWUpO1xuICAgIF9yZXN1bHQucHVzaChzdGF0ZS5yZXN1bHQpO1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoKHN0YXRlLmxpbmUgPT09IF9saW5lIHx8IHN0YXRlLmxpbmVJbmRlbnQgPiBub2RlSW5kZW50KSAmJiAoY2ggIT09IDApKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnYmFkIGluZGVudGF0aW9uIG9mIGEgc2VxdWVuY2UgZW50cnknKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCBub2RlSW5kZW50KSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoZGV0ZWN0ZWQpIHtcbiAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7XG4gICAgc3RhdGUua2luZCA9ICdzZXF1ZW5jZSc7XG4gICAgc3RhdGUucmVzdWx0ID0gX3Jlc3VsdDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9ja01hcHBpbmcoc3RhdGUsIG5vZGVJbmRlbnQsIGZsb3dJbmRlbnQpIHtcbiAgdmFyIGZvbGxvd2luZyxcbiAgICAgIGFsbG93Q29tcGFjdCxcbiAgICAgIF9saW5lLFxuICAgICAgX2tleUxpbmUsXG4gICAgICBfa2V5TGluZVN0YXJ0LFxuICAgICAgX2tleVBvcyxcbiAgICAgIF90YWcgICAgICAgICAgPSBzdGF0ZS50YWcsXG4gICAgICBfYW5jaG9yICAgICAgID0gc3RhdGUuYW5jaG9yLFxuICAgICAgX3Jlc3VsdCAgICAgICA9IHt9LFxuICAgICAgb3ZlcnJpZGFibGVLZXlzID0gT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgIGtleVRhZyAgICAgICAgPSBudWxsLFxuICAgICAga2V5Tm9kZSAgICAgICA9IG51bGwsXG4gICAgICB2YWx1ZU5vZGUgICAgID0gbnVsbCxcbiAgICAgIGF0RXhwbGljaXRLZXkgPSBmYWxzZSxcbiAgICAgIGRldGVjdGVkICAgICAgPSBmYWxzZSxcbiAgICAgIGNoO1xuXG4gIC8vIHRoZXJlIGlzIGEgbGVhZGluZyB0YWIgYmVmb3JlIHRoaXMgdG9rZW4sIHNvIGl0IGNhbid0IGJlIGEgYmxvY2sgc2VxdWVuY2UvbWFwcGluZztcbiAgLy8gaXQgY2FuIHN0aWxsIGJlIGZsb3cgc2VxdWVuY2UvbWFwcGluZyBvciBhIHNjYWxhclxuICBpZiAoc3RhdGUuZmlyc3RUYWJJbkxpbmUgIT09IC0xKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCkge1xuICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gX3Jlc3VsdDtcbiAgfVxuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgaWYgKCFhdEV4cGxpY2l0S2V5ICYmIHN0YXRlLmZpcnN0VGFiSW5MaW5lICE9PSAtMSkge1xuICAgICAgc3RhdGUucG9zaXRpb24gPSBzdGF0ZS5maXJzdFRhYkluTGluZTtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd0YWIgY2hhcmFjdGVycyBtdXN0IG5vdCBiZSB1c2VkIGluIGluZGVudGF0aW9uJyk7XG4gICAgfVxuXG4gICAgZm9sbG93aW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpO1xuICAgIF9saW5lID0gc3RhdGUubGluZTsgLy8gU2F2ZSB0aGUgY3VycmVudCBsaW5lLlxuXG4gICAgLy9cbiAgICAvLyBFeHBsaWNpdCBub3RhdGlvbiBjYXNlLiBUaGVyZSBhcmUgdHdvIHNlcGFyYXRlIGJsb2NrczpcbiAgICAvLyBmaXJzdCBmb3IgdGhlIGtleSAoZGVub3RlZCBieSBcIj9cIikgYW5kIHNlY29uZCBmb3IgdGhlIHZhbHVlIChkZW5vdGVkIGJ5IFwiOlwiKVxuICAgIC8vXG4gICAgaWYgKChjaCA9PT0gMHgzRi8qID8gKi8gfHwgY2ggPT09IDB4M0EvKiA6ICovKSAmJiBpc19XU19PUl9FT0woZm9sbG93aW5nKSkge1xuXG4gICAgICBpZiAoY2ggPT09IDB4M0YvKiA/ICovKSB7XG4gICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIG51bGwsIF9rZXlMaW5lLCBfa2V5TGluZVN0YXJ0LCBfa2V5UG9zKTtcbiAgICAgICAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGRldGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgYXRFeHBsaWNpdEtleSA9IHRydWU7XG4gICAgICAgIGFsbG93Q29tcGFjdCA9IHRydWU7XG5cbiAgICAgIH0gZWxzZSBpZiAoYXRFeHBsaWNpdEtleSkge1xuICAgICAgICAvLyBpLmUuIDB4M0EvKiA6ICovID09PSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGV4cGxpY2l0IGtleS5cbiAgICAgICAgYXRFeHBsaWNpdEtleSA9IGZhbHNlO1xuICAgICAgICBhbGxvd0NvbXBhY3QgPSB0cnVlO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnaW5jb21wbGV0ZSBleHBsaWNpdCBtYXBwaW5nIHBhaXI7IGEga2V5IG5vZGUgaXMgbWlzc2VkOyBvciBmb2xsb3dlZCBieSBhIG5vbi10YWJ1bGF0ZWQgZW1wdHkgbGluZScpO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZS5wb3NpdGlvbiArPSAxO1xuICAgICAgY2ggPSBmb2xsb3dpbmc7XG5cbiAgICAvL1xuICAgIC8vIEltcGxpY2l0IG5vdGF0aW9uIGNhc2UuIEZsb3ctc3R5bGUgbm9kZSBhcyB0aGUga2V5IGZpcnN0LCB0aGVuIFwiOlwiLCBhbmQgdGhlIHZhbHVlLlxuICAgIC8vXG4gICAgfSBlbHNlIHtcbiAgICAgIF9rZXlMaW5lID0gc3RhdGUubGluZTtcbiAgICAgIF9rZXlMaW5lU3RhcnQgPSBzdGF0ZS5saW5lU3RhcnQ7XG4gICAgICBfa2V5UG9zID0gc3RhdGUucG9zaXRpb247XG5cbiAgICAgIGlmICghY29tcG9zZU5vZGUoc3RhdGUsIGZsb3dJbmRlbnQsIENPTlRFWFRfRkxPV19PVVQsIGZhbHNlLCB0cnVlKSkge1xuICAgICAgICAvLyBOZWl0aGVyIGltcGxpY2l0IG5vciBleHBsaWNpdCBub3RhdGlvbi5cbiAgICAgICAgLy8gUmVhZGluZyBpcyBkb25lLiBHbyB0byB0aGUgZXBpbG9ndWUuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUubGluZSA9PT0gX2xpbmUpIHtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgICAgICB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoID09PSAweDNBLyogOiAqLykge1xuICAgICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICAgICAgICAgIGlmICghaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2Egd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgZXhwZWN0ZWQgYWZ0ZXIgdGhlIGtleS12YWx1ZSBzZXBhcmF0b3Igd2l0aGluIGEgYmxvY2sgbWFwcGluZycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlLCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgbnVsbCwgX2tleUxpbmUsIF9rZXlMaW5lU3RhcnQsIF9rZXlQb3MpO1xuICAgICAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIGF0RXhwbGljaXRLZXkgPSBmYWxzZTtcbiAgICAgICAgICBhbGxvd0NvbXBhY3QgPSBmYWxzZTtcbiAgICAgICAgICBrZXlUYWcgPSBzdGF0ZS50YWc7XG4gICAgICAgICAga2V5Tm9kZSA9IHN0YXRlLnJlc3VsdDtcblxuICAgICAgICB9IGVsc2UgaWYgKGRldGVjdGVkKSB7XG4gICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2NhbiBub3QgcmVhZCBhbiBpbXBsaWNpdCBtYXBwaW5nIHBhaXI7IGEgY29sb24gaXMgbWlzc2VkJyk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgICAgICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7XG4gICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEtlZXAgdGhlIHJlc3VsdCBvZiBgY29tcG9zZU5vZGVgLlxuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSBpZiAoZGV0ZWN0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2NhbiBub3QgcmVhZCBhIGJsb2NrIG1hcHBpbmcgZW50cnk7IGEgbXVsdGlsaW5lIGtleSBtYXkgbm90IGJlIGFuIGltcGxpY2l0IGtleScpO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgICAgICBzdGF0ZS5hbmNob3IgPSBfYW5jaG9yO1xuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gS2VlcCB0aGUgcmVzdWx0IG9mIGBjb21wb3NlTm9kZWAuXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBDb21tb24gcmVhZGluZyBjb2RlIGZvciBib3RoIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBub3RhdGlvbnMuXG4gICAgLy9cbiAgICBpZiAoc3RhdGUubGluZSA9PT0gX2xpbmUgfHwgc3RhdGUubGluZUluZGVudCA+IG5vZGVJbmRlbnQpIHtcbiAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgIF9rZXlMaW5lID0gc3RhdGUubGluZTtcbiAgICAgICAgX2tleUxpbmVTdGFydCA9IHN0YXRlLmxpbmVTdGFydDtcbiAgICAgICAgX2tleVBvcyA9IHN0YXRlLnBvc2l0aW9uO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29tcG9zZU5vZGUoc3RhdGUsIG5vZGVJbmRlbnQsIENPTlRFWFRfQkxPQ0tfT1VULCB0cnVlLCBhbGxvd0NvbXBhY3QpKSB7XG4gICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAga2V5Tm9kZSA9IHN0YXRlLnJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUsIF9rZXlMaW5lLCBfa2V5TGluZVN0YXJ0LCBfa2V5UG9zKTtcbiAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKChzdGF0ZS5saW5lID09PSBfbGluZSB8fCBzdGF0ZS5saW5lSW5kZW50ID4gbm9kZUluZGVudCkgJiYgKGNoICE9PSAwKSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2JhZCBpbmRlbnRhdGlvbiBvZiBhIG1hcHBpbmcgZW50cnknKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCBub2RlSW5kZW50KSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBFcGlsb2d1ZS5cbiAgLy9cblxuICAvLyBTcGVjaWFsIGNhc2U6IGxhc3QgbWFwcGluZydzIG5vZGUgY29udGFpbnMgb25seSB0aGUga2V5IGluIGV4cGxpY2l0IG5vdGF0aW9uLlxuICBpZiAoYXRFeHBsaWNpdEtleSkge1xuICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCBudWxsLCBfa2V5TGluZSwgX2tleUxpbmVTdGFydCwgX2tleVBvcyk7XG4gIH1cblxuICAvLyBFeHBvc2UgdGhlIHJlc3VsdGluZyBtYXBwaW5nLlxuICBpZiAoZGV0ZWN0ZWQpIHtcbiAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7XG4gICAgc3RhdGUua2luZCA9ICdtYXBwaW5nJztcbiAgICBzdGF0ZS5yZXN1bHQgPSBfcmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIGRldGVjdGVkO1xufVxuXG5mdW5jdGlvbiByZWFkVGFnUHJvcGVydHkoc3RhdGUpIHtcbiAgdmFyIF9wb3NpdGlvbixcbiAgICAgIGlzVmVyYmF0aW0gPSBmYWxzZSxcbiAgICAgIGlzTmFtZWQgICAgPSBmYWxzZSxcbiAgICAgIHRhZ0hhbmRsZSxcbiAgICAgIHRhZ05hbWUsXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCAhPT0gMHgyMS8qICEgKi8pIHJldHVybiBmYWxzZTtcblxuICBpZiAoc3RhdGUudGFnICE9PSBudWxsKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2R1cGxpY2F0aW9uIG9mIGEgdGFnIHByb3BlcnR5Jyk7XG4gIH1cblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGNoID09PSAweDNDLyogPCAqLykge1xuICAgIGlzVmVyYmF0aW0gPSB0cnVlO1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICB9IGVsc2UgaWYgKGNoID09PSAweDIxLyogISAqLykge1xuICAgIGlzTmFtZWQgPSB0cnVlO1xuICAgIHRhZ0hhbmRsZSA9ICchISc7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gIH0gZWxzZSB7XG4gICAgdGFnSGFuZGxlID0gJyEnO1xuICB9XG5cbiAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG5cbiAgaWYgKGlzVmVyYmF0aW0pIHtcbiAgICBkbyB7IGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsgfVxuICAgIHdoaWxlIChjaCAhPT0gMCAmJiBjaCAhPT0gMHgzRS8qID4gKi8pO1xuXG4gICAgaWYgKHN0YXRlLnBvc2l0aW9uIDwgc3RhdGUubGVuZ3RoKSB7XG4gICAgICB0YWdOYW1lID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHZlcmJhdGltIHRhZycpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX1dTX09SX0VPTChjaCkpIHtcblxuICAgICAgaWYgKGNoID09PSAweDIxLyogISAqLykge1xuICAgICAgICBpZiAoIWlzTmFtZWQpIHtcbiAgICAgICAgICB0YWdIYW5kbGUgPSBzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24gLSAxLCBzdGF0ZS5wb3NpdGlvbiArIDEpO1xuXG4gICAgICAgICAgaWYgKCFQQVRURVJOX1RBR19IQU5ETEUudGVzdCh0YWdIYW5kbGUpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbmFtZWQgdGFnIGhhbmRsZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnMnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpc05hbWVkID0gdHJ1ZTtcbiAgICAgICAgICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbiArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3RhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZXhjbGFtYXRpb24gbWFya3MnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgdGFnTmFtZSA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pO1xuXG4gICAgaWYgKFBBVFRFUk5fRkxPV19JTkRJQ0FUT1JTLnRlc3QodGFnTmFtZSkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGZsb3cgaW5kaWNhdG9yIGNoYXJhY3RlcnMnKTtcbiAgICB9XG4gIH1cblxuICBpZiAodGFnTmFtZSAmJiAhUEFUVEVSTl9UQUdfVVJJLnRlc3QodGFnTmFtZSkpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGFnIG5hbWUgY2Fubm90IGNvbnRhaW4gc3VjaCBjaGFyYWN0ZXJzOiAnICsgdGFnTmFtZSk7XG4gIH1cblxuICB0cnkge1xuICAgIHRhZ05hbWUgPSBkZWNvZGVVUklDb21wb25lbnQodGFnTmFtZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICd0YWcgbmFtZSBpcyBtYWxmb3JtZWQ6ICcgKyB0YWdOYW1lKTtcbiAgfVxuXG4gIGlmIChpc1ZlcmJhdGltKSB7XG4gICAgc3RhdGUudGFnID0gdGFnTmFtZTtcblxuICB9IGVsc2UgaWYgKF9oYXNPd25Qcm9wZXJ0eSQxLmNhbGwoc3RhdGUudGFnTWFwLCB0YWdIYW5kbGUpKSB7XG4gICAgc3RhdGUudGFnID0gc3RhdGUudGFnTWFwW3RhZ0hhbmRsZV0gKyB0YWdOYW1lO1xuXG4gIH0gZWxzZSBpZiAodGFnSGFuZGxlID09PSAnIScpIHtcbiAgICBzdGF0ZS50YWcgPSAnIScgKyB0YWdOYW1lO1xuXG4gIH0gZWxzZSBpZiAodGFnSGFuZGxlID09PSAnISEnKSB7XG4gICAgc3RhdGUudGFnID0gJ3RhZzp5YW1sLm9yZywyMDAyOicgKyB0YWdOYW1lO1xuXG4gIH0gZWxzZSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZGVjbGFyZWQgdGFnIGhhbmRsZSBcIicgKyB0YWdIYW5kbGUgKyAnXCInKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZWFkQW5jaG9yUHJvcGVydHkoc3RhdGUpIHtcbiAgdmFyIF9wb3NpdGlvbixcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGNoICE9PSAweDI2LyogJiAqLykgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZHVwbGljYXRpb24gb2YgYW4gYW5jaG9yIHByb3BlcnR5Jyk7XG4gIH1cblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIF9wb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSAmJiAhaXNfRkxPV19JTkRJQ0FUT1IoY2gpKSB7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICB9XG5cbiAgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBfcG9zaXRpb24pIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbmFtZSBvZiBhbiBhbmNob3Igbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlcicpO1xuICB9XG5cbiAgc3RhdGUuYW5jaG9yID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZWFkQWxpYXMoc3RhdGUpIHtcbiAgdmFyIF9wb3NpdGlvbiwgYWxpYXMsXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCAhPT0gMHgyQS8qICogKi8pIHJldHVybiBmYWxzZTtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIF9wb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSAmJiAhaXNfRkxPV19JTkRJQ0FUT1IoY2gpKSB7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICB9XG5cbiAgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBfcG9zaXRpb24pIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbmFtZSBvZiBhbiBhbGlhcyBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyJyk7XG4gIH1cblxuICBhbGlhcyA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmICghX2hhc093blByb3BlcnR5JDEuY2FsbChzdGF0ZS5hbmNob3JNYXAsIGFsaWFzKSkge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmlkZW50aWZpZWQgYWxpYXMgXCInICsgYWxpYXMgKyAnXCInKTtcbiAgfVxuXG4gIHN0YXRlLnJlc3VsdCA9IHN0YXRlLmFuY2hvck1hcFthbGlhc107XG4gIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbXBvc2VOb2RlKHN0YXRlLCBwYXJlbnRJbmRlbnQsIG5vZGVDb250ZXh0LCBhbGxvd1RvU2VlaywgYWxsb3dDb21wYWN0KSB7XG4gIHZhciBhbGxvd0Jsb2NrU3R5bGVzLFxuICAgICAgYWxsb3dCbG9ja1NjYWxhcnMsXG4gICAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMsXG4gICAgICBpbmRlbnRTdGF0dXMgPSAxLCAvLyAxOiB0aGlzPnBhcmVudCwgMDogdGhpcz1wYXJlbnQsIC0xOiB0aGlzPHBhcmVudFxuICAgICAgYXROZXdMaW5lICA9IGZhbHNlLFxuICAgICAgaGFzQ29udGVudCA9IGZhbHNlLFxuICAgICAgdHlwZUluZGV4LFxuICAgICAgdHlwZVF1YW50aXR5LFxuICAgICAgdHlwZUxpc3QsXG4gICAgICB0eXBlLFxuICAgICAgZmxvd0luZGVudCxcbiAgICAgIGJsb2NrSW5kZW50O1xuXG4gIGlmIChzdGF0ZS5saXN0ZW5lciAhPT0gbnVsbCkge1xuICAgIHN0YXRlLmxpc3RlbmVyKCdvcGVuJywgc3RhdGUpO1xuICB9XG5cbiAgc3RhdGUudGFnICAgID0gbnVsbDtcbiAgc3RhdGUuYW5jaG9yID0gbnVsbDtcbiAgc3RhdGUua2luZCAgID0gbnVsbDtcbiAgc3RhdGUucmVzdWx0ID0gbnVsbDtcblxuICBhbGxvd0Jsb2NrU3R5bGVzID0gYWxsb3dCbG9ja1NjYWxhcnMgPSBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPVxuICAgIENPTlRFWFRfQkxPQ0tfT1VUID09PSBub2RlQ29udGV4dCB8fFxuICAgIENPTlRFWFRfQkxPQ0tfSU4gID09PSBub2RlQ29udGV4dDtcblxuICBpZiAoYWxsb3dUb1NlZWspIHtcbiAgICBpZiAoc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpKSB7XG4gICAgICBhdE5ld0xpbmUgPSB0cnVlO1xuXG4gICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+IHBhcmVudEluZGVudCkge1xuICAgICAgICBpbmRlbnRTdGF0dXMgPSAxO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50ID09PSBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgaW5kZW50U3RhdHVzID0gMDtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGluZUluZGVudCA8IHBhcmVudEluZGVudCkge1xuICAgICAgICBpbmRlbnRTdGF0dXMgPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoaW5kZW50U3RhdHVzID09PSAxKSB7XG4gICAgd2hpbGUgKHJlYWRUYWdQcm9wZXJ0eShzdGF0ZSkgfHwgcmVhZEFuY2hvclByb3BlcnR5KHN0YXRlKSkge1xuICAgICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKSkge1xuICAgICAgICBhdE5ld0xpbmUgPSB0cnVlO1xuICAgICAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPSBhbGxvd0Jsb2NrU3R5bGVzO1xuXG4gICAgICAgIGlmIChzdGF0ZS5saW5lSW5kZW50ID4gcGFyZW50SW5kZW50KSB7XG4gICAgICAgICAgaW5kZW50U3RhdHVzID0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50ID09PSBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAtMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxsb3dCbG9ja0NvbGxlY3Rpb25zID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGFsbG93QmxvY2tDb2xsZWN0aW9ucykge1xuICAgIGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IGF0TmV3TGluZSB8fCBhbGxvd0NvbXBhY3Q7XG4gIH1cblxuICBpZiAoaW5kZW50U3RhdHVzID09PSAxIHx8IENPTlRFWFRfQkxPQ0tfT1VUID09PSBub2RlQ29udGV4dCkge1xuICAgIGlmIChDT05URVhUX0ZMT1dfSU4gPT09IG5vZGVDb250ZXh0IHx8IENPTlRFWFRfRkxPV19PVVQgPT09IG5vZGVDb250ZXh0KSB7XG4gICAgICBmbG93SW5kZW50ID0gcGFyZW50SW5kZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBmbG93SW5kZW50ID0gcGFyZW50SW5kZW50ICsgMTtcbiAgICB9XG5cbiAgICBibG9ja0luZGVudCA9IHN0YXRlLnBvc2l0aW9uIC0gc3RhdGUubGluZVN0YXJ0O1xuXG4gICAgaWYgKGluZGVudFN0YXR1cyA9PT0gMSkge1xuICAgICAgaWYgKGFsbG93QmxvY2tDb2xsZWN0aW9ucyAmJlxuICAgICAgICAgIChyZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZSwgYmxvY2tJbmRlbnQpIHx8XG4gICAgICAgICAgIHJlYWRCbG9ja01hcHBpbmcoc3RhdGUsIGJsb2NrSW5kZW50LCBmbG93SW5kZW50KSkgfHxcbiAgICAgICAgICByZWFkRmxvd0NvbGxlY3Rpb24oc3RhdGUsIGZsb3dJbmRlbnQpKSB7XG4gICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKChhbGxvd0Jsb2NrU2NhbGFycyAmJiByZWFkQmxvY2tTY2FsYXIoc3RhdGUsIGZsb3dJbmRlbnQpKSB8fFxuICAgICAgICAgICAgcmVhZFNpbmdsZVF1b3RlZFNjYWxhcihzdGF0ZSwgZmxvd0luZGVudCkgfHxcbiAgICAgICAgICAgIHJlYWREb3VibGVRdW90ZWRTY2FsYXIoc3RhdGUsIGZsb3dJbmRlbnQpKSB7XG4gICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWFkQWxpYXMoc3RhdGUpKSB7XG4gICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoc3RhdGUudGFnICE9PSBudWxsIHx8IHN0YXRlLmFuY2hvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2FsaWFzIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFueSBwcm9wZXJ0aWVzJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSBpZiAocmVhZFBsYWluU2NhbGFyKHN0YXRlLCBmbG93SW5kZW50LCBDT05URVhUX0ZMT1dfSU4gPT09IG5vZGVDb250ZXh0KSkge1xuICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLnRhZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgc3RhdGUudGFnID0gJz8nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICAgICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHN0YXRlLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW5kZW50U3RhdHVzID09PSAwKSB7XG4gICAgICAvLyBTcGVjaWFsIGNhc2U6IGJsb2NrIHNlcXVlbmNlcyBhcmUgYWxsb3dlZCB0byBoYXZlIHNhbWUgaW5kZW50YXRpb24gbGV2ZWwgYXMgdGhlIHBhcmVudC5cbiAgICAgIC8vIGh0dHA6Ly93d3cueWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjc5OTc4NFxuICAgICAgaGFzQ29udGVudCA9IGFsbG93QmxvY2tDb2xsZWN0aW9ucyAmJiByZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZSwgYmxvY2tJbmRlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0ZS50YWcgPT09IG51bGwpIHtcbiAgICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHN0YXRlLnJlc3VsdDtcbiAgICB9XG5cbiAgfSBlbHNlIGlmIChzdGF0ZS50YWcgPT09ICc/Jykge1xuICAgIC8vIEltcGxpY2l0IHJlc29sdmluZyBpcyBub3QgYWxsb3dlZCBmb3Igbm9uLXNjYWxhciB0eXBlcywgYW5kICc/J1xuICAgIC8vIG5vbi1zcGVjaWZpYyB0YWcgaXMgb25seSBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkIHRvIHBsYWluIHNjYWxhcnMuXG4gICAgLy9cbiAgICAvLyBXZSBvbmx5IG5lZWQgdG8gY2hlY2sga2luZCBjb25mb3JtaXR5IGluIGNhc2UgdXNlciBleHBsaWNpdGx5IGFzc2lnbnMgJz8nXG4gICAgLy8gdGFnLCBmb3IgZXhhbXBsZSBsaWtlIHRoaXM6IFwiITw/PiBbMF1cIlxuICAgIC8vXG4gICAgaWYgKHN0YXRlLnJlc3VsdCAhPT0gbnVsbCAmJiBzdGF0ZS5raW5kICE9PSAnc2NhbGFyJykge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8Pz4gdGFnOyBpdCBzaG91bGQgYmUgXCJzY2FsYXJcIiwgbm90IFwiJyArIHN0YXRlLmtpbmQgKyAnXCInKTtcbiAgICB9XG5cbiAgICBmb3IgKHR5cGVJbmRleCA9IDAsIHR5cGVRdWFudGl0eSA9IHN0YXRlLmltcGxpY2l0VHlwZXMubGVuZ3RoOyB0eXBlSW5kZXggPCB0eXBlUXVhbnRpdHk7IHR5cGVJbmRleCArPSAxKSB7XG4gICAgICB0eXBlID0gc3RhdGUuaW1wbGljaXRUeXBlc1t0eXBlSW5kZXhdO1xuXG4gICAgICBpZiAodHlwZS5yZXNvbHZlKHN0YXRlLnJlc3VsdCkpIHsgLy8gYHN0YXRlLnJlc3VsdGAgdXBkYXRlZCBpbiByZXNvbHZlciBpZiBtYXRjaGVkXG4gICAgICAgIHN0YXRlLnJlc3VsdCA9IHR5cGUuY29uc3RydWN0KHN0YXRlLnJlc3VsdCk7XG4gICAgICAgIHN0YXRlLnRhZyA9IHR5cGUudGFnO1xuICAgICAgICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICAgICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSBzdGF0ZS5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHN0YXRlLnRhZyAhPT0gJyEnKSB7XG4gICAgaWYgKF9oYXNPd25Qcm9wZXJ0eSQxLmNhbGwoc3RhdGUudHlwZU1hcFtzdGF0ZS5raW5kIHx8ICdmYWxsYmFjayddLCBzdGF0ZS50YWcpKSB7XG4gICAgICB0eXBlID0gc3RhdGUudHlwZU1hcFtzdGF0ZS5raW5kIHx8ICdmYWxsYmFjayddW3N0YXRlLnRhZ107XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGxvb2tpbmcgZm9yIG11bHRpIHR5cGVcbiAgICAgIHR5cGUgPSBudWxsO1xuICAgICAgdHlwZUxpc3QgPSBzdGF0ZS50eXBlTWFwLm11bHRpW3N0YXRlLmtpbmQgfHwgJ2ZhbGxiYWNrJ107XG5cbiAgICAgIGZvciAodHlwZUluZGV4ID0gMCwgdHlwZVF1YW50aXR5ID0gdHlwZUxpc3QubGVuZ3RoOyB0eXBlSW5kZXggPCB0eXBlUXVhbnRpdHk7IHR5cGVJbmRleCArPSAxKSB7XG4gICAgICAgIGlmIChzdGF0ZS50YWcuc2xpY2UoMCwgdHlwZUxpc3RbdHlwZUluZGV4XS50YWcubGVuZ3RoKSA9PT0gdHlwZUxpc3RbdHlwZUluZGV4XS50YWcpIHtcbiAgICAgICAgICB0eXBlID0gdHlwZUxpc3RbdHlwZUluZGV4XTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdHlwZSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3Vua25vd24gdGFnICE8JyArIHN0YXRlLnRhZyArICc+Jyk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnJlc3VsdCAhPT0gbnVsbCAmJiB0eXBlLmtpbmQgIT09IHN0YXRlLmtpbmQpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmFjY2VwdGFibGUgbm9kZSBraW5kIGZvciAhPCcgKyBzdGF0ZS50YWcgKyAnPiB0YWc7IGl0IHNob3VsZCBiZSBcIicgKyB0eXBlLmtpbmQgKyAnXCIsIG5vdCBcIicgKyBzdGF0ZS5raW5kICsgJ1wiJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0eXBlLnJlc29sdmUoc3RhdGUucmVzdWx0LCBzdGF0ZS50YWcpKSB7IC8vIGBzdGF0ZS5yZXN1bHRgIHVwZGF0ZWQgaW4gcmVzb2x2ZXIgaWYgbWF0Y2hlZFxuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2Nhbm5vdCByZXNvbHZlIGEgbm9kZSB3aXRoICE8JyArIHN0YXRlLnRhZyArICc+IGV4cGxpY2l0IHRhZycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5yZXN1bHQgPSB0eXBlLmNvbnN0cnVjdChzdGF0ZS5yZXN1bHQsIHN0YXRlLnRhZyk7XG4gICAgICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gc3RhdGUucmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0ZS5saXN0ZW5lciAhPT0gbnVsbCkge1xuICAgIHN0YXRlLmxpc3RlbmVyKCdjbG9zZScsIHN0YXRlKTtcbiAgfVxuICByZXR1cm4gc3RhdGUudGFnICE9PSBudWxsIHx8ICBzdGF0ZS5hbmNob3IgIT09IG51bGwgfHwgaGFzQ29udGVudDtcbn1cblxuZnVuY3Rpb24gcmVhZERvY3VtZW50KHN0YXRlKSB7XG4gIHZhciBkb2N1bWVudFN0YXJ0ID0gc3RhdGUucG9zaXRpb24sXG4gICAgICBfcG9zaXRpb24sXG4gICAgICBkaXJlY3RpdmVOYW1lLFxuICAgICAgZGlyZWN0aXZlQXJncyxcbiAgICAgIGhhc0RpcmVjdGl2ZXMgPSBmYWxzZSxcbiAgICAgIGNoO1xuXG4gIHN0YXRlLnZlcnNpb24gPSBudWxsO1xuICBzdGF0ZS5jaGVja0xpbmVCcmVha3MgPSBzdGF0ZS5sZWdhY3k7XG4gIHN0YXRlLnRhZ01hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHN0YXRlLmFuY2hvck1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgd2hpbGUgKChjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pKSAhPT0gMCkge1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoc3RhdGUubGluZUluZGVudCA+IDAgfHwgY2ggIT09IDB4MjUvKiAlICovKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBoYXNEaXJlY3RpdmVzID0gdHJ1ZTtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG5cbiAgICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX1dTX09SX0VPTChjaCkpIHtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBkaXJlY3RpdmVOYW1lID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG4gICAgZGlyZWN0aXZlQXJncyA9IFtdO1xuXG4gICAgaWYgKGRpcmVjdGl2ZU5hbWUubGVuZ3RoIDwgMSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2RpcmVjdGl2ZSBuYW1lIG11c3Qgbm90IGJlIGxlc3MgdGhhbiBvbmUgY2hhcmFjdGVyIGluIGxlbmd0aCcpO1xuICAgIH1cblxuICAgIHdoaWxlIChjaCAhPT0gMCkge1xuICAgICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaCA9PT0gMHgyMy8qICMgKi8pIHtcbiAgICAgICAgZG8geyBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7IH1cbiAgICAgICAgd2hpbGUgKGNoICE9PSAwICYmICFpc19FT0woY2gpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc19FT0woY2gpKSBicmVhaztcblxuICAgICAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG5cbiAgICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGRpcmVjdGl2ZUFyZ3MucHVzaChzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKSk7XG4gICAgfVxuXG4gICAgaWYgKGNoICE9PSAwKSByZWFkTGluZUJyZWFrKHN0YXRlKTtcblxuICAgIGlmIChfaGFzT3duUHJvcGVydHkkMS5jYWxsKGRpcmVjdGl2ZUhhbmRsZXJzLCBkaXJlY3RpdmVOYW1lKSkge1xuICAgICAgZGlyZWN0aXZlSGFuZGxlcnNbZGlyZWN0aXZlTmFtZV0oc3RhdGUsIGRpcmVjdGl2ZU5hbWUsIGRpcmVjdGl2ZUFyZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvd1dhcm5pbmcoc3RhdGUsICd1bmtub3duIGRvY3VtZW50IGRpcmVjdGl2ZSBcIicgKyBkaXJlY3RpdmVOYW1lICsgJ1wiJyk7XG4gICAgfVxuICB9XG5cbiAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuXG4gIGlmIChzdGF0ZS5saW5lSW5kZW50ID09PSAwICYmXG4gICAgICBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSAgICAgPT09IDB4MkQvKiAtICovICYmXG4gICAgICBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMSkgPT09IDB4MkQvKiAtICovICYmXG4gICAgICBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMikgPT09IDB4MkQvKiAtICovKSB7XG4gICAgc3RhdGUucG9zaXRpb24gKz0gMztcbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7XG5cbiAgfSBlbHNlIGlmIChoYXNEaXJlY3RpdmVzKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2RpcmVjdGl2ZXMgZW5kIG1hcmsgaXMgZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIGNvbXBvc2VOb2RlKHN0YXRlLCBzdGF0ZS5saW5lSW5kZW50IC0gMSwgQ09OVEVYVF9CTE9DS19PVVQsIGZhbHNlLCB0cnVlKTtcbiAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuXG4gIGlmIChzdGF0ZS5jaGVja0xpbmVCcmVha3MgJiZcbiAgICAgIFBBVFRFUk5fTk9OX0FTQ0lJX0xJTkVfQlJFQUtTLnRlc3Qoc3RhdGUuaW5wdXQuc2xpY2UoZG9jdW1lbnRTdGFydCwgc3RhdGUucG9zaXRpb24pKSkge1xuICAgIHRocm93V2FybmluZyhzdGF0ZSwgJ25vbi1BU0NJSSBsaW5lIGJyZWFrcyBhcmUgaW50ZXJwcmV0ZWQgYXMgY29udGVudCcpO1xuICB9XG5cbiAgc3RhdGUuZG9jdW1lbnRzLnB1c2goc3RhdGUucmVzdWx0KTtcblxuICBpZiAoc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUpKSB7XG5cbiAgICBpZiAoc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikgPT09IDB4MkUvKiAuICovKSB7XG4gICAgICBzdGF0ZS5wb3NpdGlvbiArPSAzO1xuICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoc3RhdGUucG9zaXRpb24gPCAoc3RhdGUubGVuZ3RoIC0gMSkpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZW5kIG9mIHRoZSBzdHJlYW0gb3IgYSBkb2N1bWVudCBzZXBhcmF0b3IgaXMgZXhwZWN0ZWQnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm47XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKSB7XG4gIGlucHV0ID0gU3RyaW5nKGlucHV0KTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgaWYgKGlucHV0Lmxlbmd0aCAhPT0gMCkge1xuXG4gICAgLy8gQWRkIHRhaWxpbmcgYFxcbmAgaWYgbm90IGV4aXN0c1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KGlucHV0Lmxlbmd0aCAtIDEpICE9PSAweDBBLyogTEYgKi8gJiZcbiAgICAgICAgaW5wdXQuY2hhckNvZGVBdChpbnB1dC5sZW5ndGggLSAxKSAhPT0gMHgwRC8qIENSICovKSB7XG4gICAgICBpbnB1dCArPSAnXFxuJztcbiAgICB9XG5cbiAgICAvLyBTdHJpcCBCT01cbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDEpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdGF0ZSA9IG5ldyBTdGF0ZSQxKGlucHV0LCBvcHRpb25zKTtcblxuICB2YXIgbnVsbHBvcyA9IGlucHV0LmluZGV4T2YoJ1xcMCcpO1xuXG4gIGlmIChudWxscG9zICE9PSAtMSkge1xuICAgIHN0YXRlLnBvc2l0aW9uID0gbnVsbHBvcztcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbnVsbCBieXRlIGlzIG5vdCBhbGxvd2VkIGluIGlucHV0Jyk7XG4gIH1cblxuICAvLyBVc2UgMCBhcyBzdHJpbmcgdGVybWluYXRvci4gVGhhdCBzaWduaWZpY2FudGx5IHNpbXBsaWZpZXMgYm91bmRzIGNoZWNrLlxuICBzdGF0ZS5pbnB1dCArPSAnXFwwJztcblxuICB3aGlsZSAoc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikgPT09IDB4MjAvKiBTcGFjZSAqLykge1xuICAgIHN0YXRlLmxpbmVJbmRlbnQgKz0gMTtcbiAgICBzdGF0ZS5wb3NpdGlvbiArPSAxO1xuICB9XG5cbiAgd2hpbGUgKHN0YXRlLnBvc2l0aW9uIDwgKHN0YXRlLmxlbmd0aCAtIDEpKSB7XG4gICAgcmVhZERvY3VtZW50KHN0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZS5kb2N1bWVudHM7XG59XG5cblxuZnVuY3Rpb24gbG9hZEFsbCQxKGlucHV0LCBpdGVyYXRvciwgb3B0aW9ucykge1xuICBpZiAoaXRlcmF0b3IgIT09IG51bGwgJiYgdHlwZW9mIGl0ZXJhdG9yID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb3B0aW9ucyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBvcHRpb25zID0gaXRlcmF0b3I7XG4gICAgaXRlcmF0b3IgPSBudWxsO1xuICB9XG5cbiAgdmFyIGRvY3VtZW50cyA9IGxvYWREb2N1bWVudHMoaW5wdXQsIG9wdGlvbnMpO1xuXG4gIGlmICh0eXBlb2YgaXRlcmF0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZG9jdW1lbnRzO1xuICB9XG5cbiAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBkb2N1bWVudHMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGl0ZXJhdG9yKGRvY3VtZW50c1tpbmRleF0pO1xuICB9XG59XG5cblxuZnVuY3Rpb24gbG9hZCQxKGlucHV0LCBvcHRpb25zKSB7XG4gIHZhciBkb2N1bWVudHMgPSBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKTtcblxuICBpZiAoZG9jdW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIC8qZXNsaW50LWRpc2FibGUgbm8tdW5kZWZpbmVkKi9cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IGVsc2UgaWYgKGRvY3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZG9jdW1lbnRzWzBdO1xuICB9XG4gIHRocm93IG5ldyBleGNlcHRpb24oJ2V4cGVjdGVkIGEgc2luZ2xlIGRvY3VtZW50IGluIHRoZSBzdHJlYW0sIGJ1dCBmb3VuZCBtb3JlJyk7XG59XG5cblxudmFyIGxvYWRBbGxfMSA9IGxvYWRBbGwkMTtcbnZhciBsb2FkXzEgICAgPSBsb2FkJDE7XG5cbnZhciBsb2FkZXIgPSB7XG5cdGxvYWRBbGw6IGxvYWRBbGxfMSxcblx0bG9hZDogbG9hZF8xXG59O1xuXG4vKmVzbGludC1kaXNhYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lKi9cblxuXG5cblxuXG52YXIgX3RvU3RyaW5nICAgICAgID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgQ0hBUl9CT00gICAgICAgICAgICAgICAgICA9IDB4RkVGRjtcbnZhciBDSEFSX1RBQiAgICAgICAgICAgICAgICAgID0gMHgwOTsgLyogVGFiICovXG52YXIgQ0hBUl9MSU5FX0ZFRUQgICAgICAgICAgICA9IDB4MEE7IC8qIExGICovXG52YXIgQ0hBUl9DQVJSSUFHRV9SRVRVUk4gICAgICA9IDB4MEQ7IC8qIENSICovXG52YXIgQ0hBUl9TUEFDRSAgICAgICAgICAgICAgICA9IDB4MjA7IC8qIFNwYWNlICovXG52YXIgQ0hBUl9FWENMQU1BVElPTiAgICAgICAgICA9IDB4MjE7IC8qICEgKi9cbnZhciBDSEFSX0RPVUJMRV9RVU9URSAgICAgICAgID0gMHgyMjsgLyogXCIgKi9cbnZhciBDSEFSX1NIQVJQICAgICAgICAgICAgICAgID0gMHgyMzsgLyogIyAqL1xudmFyIENIQVJfUEVSQ0VOVCAgICAgICAgICAgICAgPSAweDI1OyAvKiAlICovXG52YXIgQ0hBUl9BTVBFUlNBTkQgICAgICAgICAgICA9IDB4MjY7IC8qICYgKi9cbnZhciBDSEFSX1NJTkdMRV9RVU9URSAgICAgICAgID0gMHgyNzsgLyogJyAqL1xudmFyIENIQVJfQVNURVJJU0sgICAgICAgICAgICAgPSAweDJBOyAvKiAqICovXG52YXIgQ0hBUl9DT01NQSAgICAgICAgICAgICAgICA9IDB4MkM7IC8qICwgKi9cbnZhciBDSEFSX01JTlVTICAgICAgICAgICAgICAgID0gMHgyRDsgLyogLSAqL1xudmFyIENIQVJfQ09MT04gICAgICAgICAgICAgICAgPSAweDNBOyAvKiA6ICovXG52YXIgQ0hBUl9FUVVBTFMgICAgICAgICAgICAgICA9IDB4M0Q7IC8qID0gKi9cbnZhciBDSEFSX0dSRUFURVJfVEhBTiAgICAgICAgID0gMHgzRTsgLyogPiAqL1xudmFyIENIQVJfUVVFU1RJT04gICAgICAgICAgICAgPSAweDNGOyAvKiA/ICovXG52YXIgQ0hBUl9DT01NRVJDSUFMX0FUICAgICAgICA9IDB4NDA7IC8qIEAgKi9cbnZhciBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQgID0gMHg1QjsgLyogWyAqL1xudmFyIENIQVJfUklHSFRfU1FVQVJFX0JSQUNLRVQgPSAweDVEOyAvKiBdICovXG52YXIgQ0hBUl9HUkFWRV9BQ0NFTlQgICAgICAgICA9IDB4NjA7IC8qIGAgKi9cbnZhciBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVCAgID0gMHg3QjsgLyogeyAqL1xudmFyIENIQVJfVkVSVElDQUxfTElORSAgICAgICAgPSAweDdDOyAvKiB8ICovXG52YXIgQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VUICA9IDB4N0Q7IC8qIH0gKi9cblxudmFyIEVTQ0FQRV9TRVFVRU5DRVMgPSB7fTtcblxuRVNDQVBFX1NFUVVFTkNFU1sweDAwXSAgID0gJ1xcXFwwJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgwN10gICA9ICdcXFxcYSc7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MDhdICAgPSAnXFxcXGInO1xuRVNDQVBFX1NFUVVFTkNFU1sweDA5XSAgID0gJ1xcXFx0JztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgwQV0gICA9ICdcXFxcbic7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MEJdICAgPSAnXFxcXHYnO1xuRVNDQVBFX1NFUVVFTkNFU1sweDBDXSAgID0gJ1xcXFxmJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgwRF0gICA9ICdcXFxccic7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MUJdICAgPSAnXFxcXGUnO1xuRVNDQVBFX1NFUVVFTkNFU1sweDIyXSAgID0gJ1xcXFxcIic7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4NUNdICAgPSAnXFxcXFxcXFwnO1xuRVNDQVBFX1NFUVVFTkNFU1sweDg1XSAgID0gJ1xcXFxOJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHhBMF0gICA9ICdcXFxcXyc7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MjAyOF0gPSAnXFxcXEwnO1xuRVNDQVBFX1NFUVVFTkNFU1sweDIwMjldID0gJ1xcXFxQJztcblxudmFyIERFUFJFQ0FURURfQk9PTEVBTlNfU1lOVEFYID0gW1xuICAneScsICdZJywgJ3llcycsICdZZXMnLCAnWUVTJywgJ29uJywgJ09uJywgJ09OJyxcbiAgJ24nLCAnTicsICdubycsICdObycsICdOTycsICdvZmYnLCAnT2ZmJywgJ09GRidcbl07XG5cbnZhciBERVBSRUNBVEVEX0JBU0U2MF9TWU5UQVggPSAvXlstK10/WzAtOV9dKyg/OjpbMC05X10rKSsoPzpcXC5bMC05X10qKT8kLztcblxuZnVuY3Rpb24gY29tcGlsZVN0eWxlTWFwKHNjaGVtYSwgbWFwKSB7XG4gIHZhciByZXN1bHQsIGtleXMsIGluZGV4LCBsZW5ndGgsIHRhZywgc3R5bGUsIHR5cGU7XG5cbiAgaWYgKG1hcCA9PT0gbnVsbCkgcmV0dXJuIHt9O1xuXG4gIHJlc3VsdCA9IHt9O1xuICBrZXlzID0gT2JqZWN0LmtleXMobWFwKTtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgdGFnID0ga2V5c1tpbmRleF07XG4gICAgc3R5bGUgPSBTdHJpbmcobWFwW3RhZ10pO1xuXG4gICAgaWYgKHRhZy5zbGljZSgwLCAyKSA9PT0gJyEhJykge1xuICAgICAgdGFnID0gJ3RhZzp5YW1sLm9yZywyMDAyOicgKyB0YWcuc2xpY2UoMik7XG4gICAgfVxuICAgIHR5cGUgPSBzY2hlbWEuY29tcGlsZWRUeXBlTWFwWydmYWxsYmFjayddW3RhZ107XG5cbiAgICBpZiAodHlwZSAmJiBfaGFzT3duUHJvcGVydHkuY2FsbCh0eXBlLnN0eWxlQWxpYXNlcywgc3R5bGUpKSB7XG4gICAgICBzdHlsZSA9IHR5cGUuc3R5bGVBbGlhc2VzW3N0eWxlXTtcbiAgICB9XG5cbiAgICByZXN1bHRbdGFnXSA9IHN0eWxlO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZW5jb2RlSGV4KGNoYXJhY3Rlcikge1xuICB2YXIgc3RyaW5nLCBoYW5kbGUsIGxlbmd0aDtcblxuICBzdHJpbmcgPSBjaGFyYWN0ZXIudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cbiAgaWYgKGNoYXJhY3RlciA8PSAweEZGKSB7XG4gICAgaGFuZGxlID0gJ3gnO1xuICAgIGxlbmd0aCA9IDI7XG4gIH0gZWxzZSBpZiAoY2hhcmFjdGVyIDw9IDB4RkZGRikge1xuICAgIGhhbmRsZSA9ICd1JztcbiAgICBsZW5ndGggPSA0O1xuICB9IGVsc2UgaWYgKGNoYXJhY3RlciA8PSAweEZGRkZGRkZGKSB7XG4gICAgaGFuZGxlID0gJ1UnO1xuICAgIGxlbmd0aCA9IDg7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IGV4Y2VwdGlvbignY29kZSBwb2ludCB3aXRoaW4gYSBzdHJpbmcgbWF5IG5vdCBiZSBncmVhdGVyIHRoYW4gMHhGRkZGRkZGRicpO1xuICB9XG5cbiAgcmV0dXJuICdcXFxcJyArIGhhbmRsZSArIGNvbW1vbi5yZXBlYXQoJzAnLCBsZW5ndGggLSBzdHJpbmcubGVuZ3RoKSArIHN0cmluZztcbn1cblxuXG52YXIgUVVPVElOR19UWVBFX1NJTkdMRSA9IDEsXG4gICAgUVVPVElOR19UWVBFX0RPVUJMRSA9IDI7XG5cbmZ1bmN0aW9uIFN0YXRlKG9wdGlvbnMpIHtcbiAgdGhpcy5zY2hlbWEgICAgICAgID0gb3B0aW9uc1snc2NoZW1hJ10gfHwgX2RlZmF1bHQ7XG4gIHRoaXMuaW5kZW50ICAgICAgICA9IE1hdGgubWF4KDEsIChvcHRpb25zWydpbmRlbnQnXSB8fCAyKSk7XG4gIHRoaXMubm9BcnJheUluZGVudCA9IG9wdGlvbnNbJ25vQXJyYXlJbmRlbnQnXSB8fCBmYWxzZTtcbiAgdGhpcy5za2lwSW52YWxpZCAgID0gb3B0aW9uc1snc2tpcEludmFsaWQnXSB8fCBmYWxzZTtcbiAgdGhpcy5mbG93TGV2ZWwgICAgID0gKGNvbW1vbi5pc05vdGhpbmcob3B0aW9uc1snZmxvd0xldmVsJ10pID8gLTEgOiBvcHRpb25zWydmbG93TGV2ZWwnXSk7XG4gIHRoaXMuc3R5bGVNYXAgICAgICA9IGNvbXBpbGVTdHlsZU1hcCh0aGlzLnNjaGVtYSwgb3B0aW9uc1snc3R5bGVzJ10gfHwgbnVsbCk7XG4gIHRoaXMuc29ydEtleXMgICAgICA9IG9wdGlvbnNbJ3NvcnRLZXlzJ10gfHwgZmFsc2U7XG4gIHRoaXMubGluZVdpZHRoICAgICA9IG9wdGlvbnNbJ2xpbmVXaWR0aCddIHx8IDgwO1xuICB0aGlzLm5vUmVmcyAgICAgICAgPSBvcHRpb25zWydub1JlZnMnXSB8fCBmYWxzZTtcbiAgdGhpcy5ub0NvbXBhdE1vZGUgID0gb3B0aW9uc1snbm9Db21wYXRNb2RlJ10gfHwgZmFsc2U7XG4gIHRoaXMuY29uZGVuc2VGbG93ICA9IG9wdGlvbnNbJ2NvbmRlbnNlRmxvdyddIHx8IGZhbHNlO1xuICB0aGlzLnF1b3RpbmdUeXBlICAgPSBvcHRpb25zWydxdW90aW5nVHlwZSddID09PSAnXCInID8gUVVPVElOR19UWVBFX0RPVUJMRSA6IFFVT1RJTkdfVFlQRV9TSU5HTEU7XG4gIHRoaXMuZm9yY2VRdW90ZXMgICA9IG9wdGlvbnNbJ2ZvcmNlUXVvdGVzJ10gfHwgZmFsc2U7XG4gIHRoaXMucmVwbGFjZXIgICAgICA9IHR5cGVvZiBvcHRpb25zWydyZXBsYWNlciddID09PSAnZnVuY3Rpb24nID8gb3B0aW9uc1sncmVwbGFjZXInXSA6IG51bGw7XG5cbiAgdGhpcy5pbXBsaWNpdFR5cGVzID0gdGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdDtcbiAgdGhpcy5leHBsaWNpdFR5cGVzID0gdGhpcy5zY2hlbWEuY29tcGlsZWRFeHBsaWNpdDtcblxuICB0aGlzLnRhZyA9IG51bGw7XG4gIHRoaXMucmVzdWx0ID0gJyc7XG5cbiAgdGhpcy5kdXBsaWNhdGVzID0gW107XG4gIHRoaXMudXNlZER1cGxpY2F0ZXMgPSBudWxsO1xufVxuXG4vLyBJbmRlbnRzIGV2ZXJ5IGxpbmUgaW4gYSBzdHJpbmcuIEVtcHR5IGxpbmVzIChcXG4gb25seSkgYXJlIG5vdCBpbmRlbnRlZC5cbmZ1bmN0aW9uIGluZGVudFN0cmluZyhzdHJpbmcsIHNwYWNlcykge1xuICB2YXIgaW5kID0gY29tbW9uLnJlcGVhdCgnICcsIHNwYWNlcyksXG4gICAgICBwb3NpdGlvbiA9IDAsXG4gICAgICBuZXh0ID0gLTEsXG4gICAgICByZXN1bHQgPSAnJyxcbiAgICAgIGxpbmUsXG4gICAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuXG4gIHdoaWxlIChwb3NpdGlvbiA8IGxlbmd0aCkge1xuICAgIG5leHQgPSBzdHJpbmcuaW5kZXhPZignXFxuJywgcG9zaXRpb24pO1xuICAgIGlmIChuZXh0ID09PSAtMSkge1xuICAgICAgbGluZSA9IHN0cmluZy5zbGljZShwb3NpdGlvbik7XG4gICAgICBwb3NpdGlvbiA9IGxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGluZSA9IHN0cmluZy5zbGljZShwb3NpdGlvbiwgbmV4dCArIDEpO1xuICAgICAgcG9zaXRpb24gPSBuZXh0ICsgMTtcbiAgICB9XG5cbiAgICBpZiAobGluZS5sZW5ndGggJiYgbGluZSAhPT0gJ1xcbicpIHJlc3VsdCArPSBpbmQ7XG5cbiAgICByZXN1bHQgKz0gbGluZTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlTmV4dExpbmUoc3RhdGUsIGxldmVsKSB7XG4gIHJldHVybiAnXFxuJyArIGNvbW1vbi5yZXBlYXQoJyAnLCBzdGF0ZS5pbmRlbnQgKiBsZXZlbCk7XG59XG5cbmZ1bmN0aW9uIHRlc3RJbXBsaWNpdFJlc29sdmluZyhzdGF0ZSwgc3RyKSB7XG4gIHZhciBpbmRleCwgbGVuZ3RoLCB0eXBlO1xuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBzdGF0ZS5pbXBsaWNpdFR5cGVzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICB0eXBlID0gc3RhdGUuaW1wbGljaXRUeXBlc1tpbmRleF07XG5cbiAgICBpZiAodHlwZS5yZXNvbHZlKHN0cikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gWzMzXSBzLXdoaXRlIDo6PSBzLXNwYWNlIHwgcy10YWJcbmZ1bmN0aW9uIGlzV2hpdGVzcGFjZShjKSB7XG4gIHJldHVybiBjID09PSBDSEFSX1NQQUNFIHx8IGMgPT09IENIQVJfVEFCO1xufVxuXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNoYXJhY3RlciBjYW4gYmUgcHJpbnRlZCB3aXRob3V0IGVzY2FwaW5nLlxuLy8gRnJvbSBZQU1MIDEuMjogXCJhbnkgYWxsb3dlZCBjaGFyYWN0ZXJzIGtub3duIHRvIGJlIG5vbi1wcmludGFibGVcbi8vIHNob3VsZCBhbHNvIGJlIGVzY2FwZWQuIFtIb3dldmVyLF0gVGhpcyBpc27igJl0IG1hbmRhdG9yeVwiXG4vLyBEZXJpdmVkIGZyb20gbmItY2hhciAtIFxcdCAtICN4ODUgLSAjeEEwIC0gI3gyMDI4IC0gI3gyMDI5LlxuZnVuY3Rpb24gaXNQcmludGFibGUoYykge1xuICByZXR1cm4gICgweDAwMDIwIDw9IGMgJiYgYyA8PSAweDAwMDA3RSlcbiAgICAgIHx8ICgoMHgwMDBBMSA8PSBjICYmIGMgPD0gMHgwMEQ3RkYpICYmIGMgIT09IDB4MjAyOCAmJiBjICE9PSAweDIwMjkpXG4gICAgICB8fCAoKDB4MEUwMDAgPD0gYyAmJiBjIDw9IDB4MDBGRkZEKSAmJiBjICE9PSBDSEFSX0JPTSlcbiAgICAgIHx8ICAoMHgxMDAwMCA8PSBjICYmIGMgPD0gMHgxMEZGRkYpO1xufVxuXG4vLyBbMzRdIG5zLWNoYXIgOjo9IG5iLWNoYXIgLSBzLXdoaXRlXG4vLyBbMjddIG5iLWNoYXIgOjo9IGMtcHJpbnRhYmxlIC0gYi1jaGFyIC0gYy1ieXRlLW9yZGVyLW1hcmtcbi8vIFsyNl0gYi1jaGFyICA6Oj0gYi1saW5lLWZlZWQgfCBiLWNhcnJpYWdlLXJldHVyblxuLy8gSW5jbHVkaW5nIHMtd2hpdGUgKGZvciBzb21lIHJlYXNvbiwgZXhhbXBsZXMgZG9lc24ndCBtYXRjaCBzcGVjcyBpbiB0aGlzIGFzcGVjdClcbi8vIG5zLWNoYXIgOjo9IGMtcHJpbnRhYmxlIC0gYi1saW5lLWZlZWQgLSBiLWNhcnJpYWdlLXJldHVybiAtIGMtYnl0ZS1vcmRlci1tYXJrXG5mdW5jdGlvbiBpc05zQ2hhck9yV2hpdGVzcGFjZShjKSB7XG4gIHJldHVybiBpc1ByaW50YWJsZShjKVxuICAgICYmIGMgIT09IENIQVJfQk9NXG4gICAgLy8gLSBiLWNoYXJcbiAgICAmJiBjICE9PSBDSEFSX0NBUlJJQUdFX1JFVFVSTlxuICAgICYmIGMgIT09IENIQVJfTElORV9GRUVEO1xufVxuXG4vLyBbMTI3XSAgbnMtcGxhaW4tc2FmZShjKSA6Oj0gYyA9IGZsb3ctb3V0ICDih5IgbnMtcGxhaW4tc2FmZS1vdXRcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gZmxvdy1pbiAgIOKHkiBucy1wbGFpbi1zYWZlLWluXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGJsb2NrLWtleSDih5IgbnMtcGxhaW4tc2FmZS1vdXRcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gZmxvdy1rZXkgIOKHkiBucy1wbGFpbi1zYWZlLWluXG4vLyBbMTI4XSBucy1wbGFpbi1zYWZlLW91dCA6Oj0gbnMtY2hhclxuLy8gWzEyOV0gIG5zLXBsYWluLXNhZmUtaW4gOjo9IG5zLWNoYXIgLSBjLWZsb3ctaW5kaWNhdG9yXG4vLyBbMTMwXSAgbnMtcGxhaW4tY2hhcihjKSA6Oj0gICggbnMtcGxhaW4tc2FmZShjKSAtIOKAnDrigJ0gLSDigJwj4oCdIClcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCAvKiBBbiBucy1jaGFyIHByZWNlZGluZyAqLyDigJwj4oCdIClcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCDigJw64oCdIC8qIEZvbGxvd2VkIGJ5IGFuIG5zLXBsYWluLXNhZmUoYykgKi8gKVxuZnVuY3Rpb24gaXNQbGFpblNhZmUoYywgcHJldiwgaW5ibG9jaykge1xuICB2YXIgY0lzTnNDaGFyT3JXaGl0ZXNwYWNlID0gaXNOc0NoYXJPcldoaXRlc3BhY2UoYyk7XG4gIHZhciBjSXNOc0NoYXIgPSBjSXNOc0NoYXJPcldoaXRlc3BhY2UgJiYgIWlzV2hpdGVzcGFjZShjKTtcbiAgcmV0dXJuIChcbiAgICAvLyBucy1wbGFpbi1zYWZlXG4gICAgaW5ibG9jayA/IC8vIGMgPSBmbG93LWluXG4gICAgICBjSXNOc0NoYXJPcldoaXRlc3BhY2VcbiAgICAgIDogY0lzTnNDaGFyT3JXaGl0ZXNwYWNlXG4gICAgICAgIC8vIC0gYy1mbG93LWluZGljYXRvclxuICAgICAgICAmJiBjICE9PSBDSEFSX0NPTU1BXG4gICAgICAgICYmIGMgIT09IENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVFxuICAgICAgICAmJiBjICE9PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUXG4gICAgICAgICYmIGMgIT09IENIQVJfTEVGVF9DVVJMWV9CUkFDS0VUXG4gICAgICAgICYmIGMgIT09IENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVFxuICApXG4gICAgLy8gbnMtcGxhaW4tY2hhclxuICAgICYmIGMgIT09IENIQVJfU0hBUlAgLy8gZmFsc2Ugb24gJyMnXG4gICAgJiYgIShwcmV2ID09PSBDSEFSX0NPTE9OICYmICFjSXNOc0NoYXIpIC8vIGZhbHNlIG9uICc6ICdcbiAgICB8fCAoaXNOc0NoYXJPcldoaXRlc3BhY2UocHJldikgJiYgIWlzV2hpdGVzcGFjZShwcmV2KSAmJiBjID09PSBDSEFSX1NIQVJQKSAvLyBjaGFuZ2UgdG8gdHJ1ZSBvbiAnW14gXSMnXG4gICAgfHwgKHByZXYgPT09IENIQVJfQ09MT04gJiYgY0lzTnNDaGFyKTsgLy8gY2hhbmdlIHRvIHRydWUgb24gJzpbXiBdJ1xufVxuXG4vLyBTaW1wbGlmaWVkIHRlc3QgZm9yIHZhbHVlcyBhbGxvd2VkIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gcGxhaW4gc3R5bGUuXG5mdW5jdGlvbiBpc1BsYWluU2FmZUZpcnN0KGMpIHtcbiAgLy8gVXNlcyBhIHN1YnNldCBvZiBucy1jaGFyIC0gYy1pbmRpY2F0b3JcbiAgLy8gd2hlcmUgbnMtY2hhciA9IG5iLWNoYXIgLSBzLXdoaXRlLlxuICAvLyBObyBzdXBwb3J0IG9mICggKCDigJw/4oCdIHwg4oCcOuKAnSB8IOKAnC3igJ0gKSAvKiBGb2xsb3dlZCBieSBhbiBucy1wbGFpbi1zYWZlKGMpKSAqLyApIHBhcnRcbiAgcmV0dXJuIGlzUHJpbnRhYmxlKGMpICYmIGMgIT09IENIQVJfQk9NXG4gICAgJiYgIWlzV2hpdGVzcGFjZShjKSAvLyAtIHMtd2hpdGVcbiAgICAvLyAtIChjLWluZGljYXRvciA6Oj1cbiAgICAvLyDigJwt4oCdIHwg4oCcP+KAnSB8IOKAnDrigJ0gfCDigJws4oCdIHwg4oCcW+KAnSB8IOKAnF3igJ0gfCDigJx74oCdIHwg4oCcfeKAnVxuICAgICYmIGMgIT09IENIQVJfTUlOVVNcbiAgICAmJiBjICE9PSBDSEFSX1FVRVNUSU9OXG4gICAgJiYgYyAhPT0gQ0hBUl9DT0xPTlxuICAgICYmIGMgIT09IENIQVJfQ09NTUFcbiAgICAmJiBjICE9PSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVRcbiAgICAmJiBjICE9PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUXG4gICAgJiYgYyAhPT0gQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVRcbiAgICAmJiBjICE9PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVRcbiAgICAvLyB8IOKAnCPigJ0gfCDigJwm4oCdIHwg4oCcKuKAnSB8IOKAnCHigJ0gfCDigJx84oCdIHwg4oCcPeKAnSB8IOKAnD7igJ0gfCDigJwn4oCdIHwg4oCcXCLigJ1cbiAgICAmJiBjICE9PSBDSEFSX1NIQVJQXG4gICAgJiYgYyAhPT0gQ0hBUl9BTVBFUlNBTkRcbiAgICAmJiBjICE9PSBDSEFSX0FTVEVSSVNLXG4gICAgJiYgYyAhPT0gQ0hBUl9FWENMQU1BVElPTlxuICAgICYmIGMgIT09IENIQVJfVkVSVElDQUxfTElORVxuICAgICYmIGMgIT09IENIQVJfRVFVQUxTXG4gICAgJiYgYyAhPT0gQ0hBUl9HUkVBVEVSX1RIQU5cbiAgICAmJiBjICE9PSBDSEFSX1NJTkdMRV9RVU9URVxuICAgICYmIGMgIT09IENIQVJfRE9VQkxFX1FVT1RFXG4gICAgLy8gfCDigJwl4oCdIHwg4oCcQOKAnSB8IOKAnGDigJ0pXG4gICAgJiYgYyAhPT0gQ0hBUl9QRVJDRU5UXG4gICAgJiYgYyAhPT0gQ0hBUl9DT01NRVJDSUFMX0FUXG4gICAgJiYgYyAhPT0gQ0hBUl9HUkFWRV9BQ0NFTlQ7XG59XG5cbi8vIFNpbXBsaWZpZWQgdGVzdCBmb3IgdmFsdWVzIGFsbG93ZWQgYXMgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHBsYWluIHN0eWxlLlxuZnVuY3Rpb24gaXNQbGFpblNhZmVMYXN0KGMpIHtcbiAgLy8ganVzdCBub3Qgd2hpdGVzcGFjZSBvciBjb2xvbiwgaXQgd2lsbCBiZSBjaGVja2VkIHRvIGJlIHBsYWluIGNoYXJhY3RlciBsYXRlclxuICByZXR1cm4gIWlzV2hpdGVzcGFjZShjKSAmJiBjICE9PSBDSEFSX0NPTE9OO1xufVxuXG4vLyBTYW1lIGFzICdzdHJpbmcnLmNvZGVQb2ludEF0KHBvcyksIGJ1dCB3b3JrcyBpbiBvbGRlciBicm93c2Vycy5cbmZ1bmN0aW9uIGNvZGVQb2ludEF0KHN0cmluZywgcG9zKSB7XG4gIHZhciBmaXJzdCA9IHN0cmluZy5jaGFyQ29kZUF0KHBvcyksIHNlY29uZDtcbiAgaWYgKGZpcnN0ID49IDB4RDgwMCAmJiBmaXJzdCA8PSAweERCRkYgJiYgcG9zICsgMSA8IHN0cmluZy5sZW5ndGgpIHtcbiAgICBzZWNvbmQgPSBzdHJpbmcuY2hhckNvZGVBdChwb3MgKyAxKTtcbiAgICBpZiAoc2Vjb25kID49IDB4REMwMCAmJiBzZWNvbmQgPD0gMHhERkZGKSB7XG4gICAgICAvLyBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZyNzdXJyb2dhdGUtZm9ybXVsYWVcbiAgICAgIHJldHVybiAoZmlyc3QgLSAweEQ4MDApICogMHg0MDAgKyBzZWNvbmQgLSAweERDMDAgKyAweDEwMDAwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmlyc3Q7XG59XG5cbi8vIERldGVybWluZXMgd2hldGhlciBibG9jayBpbmRlbnRhdGlvbiBpbmRpY2F0b3IgaXMgcmVxdWlyZWQuXG5mdW5jdGlvbiBuZWVkSW5kZW50SW5kaWNhdG9yKHN0cmluZykge1xuICB2YXIgbGVhZGluZ1NwYWNlUmUgPSAvXlxcbiogLztcbiAgcmV0dXJuIGxlYWRpbmdTcGFjZVJlLnRlc3Qoc3RyaW5nKTtcbn1cblxudmFyIFNUWUxFX1BMQUlOICAgPSAxLFxuICAgIFNUWUxFX1NJTkdMRSAgPSAyLFxuICAgIFNUWUxFX0xJVEVSQUwgPSAzLFxuICAgIFNUWUxFX0ZPTERFRCAgPSA0LFxuICAgIFNUWUxFX0RPVUJMRSAgPSA1O1xuXG4vLyBEZXRlcm1pbmVzIHdoaWNoIHNjYWxhciBzdHlsZXMgYXJlIHBvc3NpYmxlIGFuZCByZXR1cm5zIHRoZSBwcmVmZXJyZWQgc3R5bGUuXG4vLyBsaW5lV2lkdGggPSAtMSA9PiBubyBsaW1pdC5cbi8vIFByZS1jb25kaXRpb25zOiBzdHIubGVuZ3RoID4gMC5cbi8vIFBvc3QtY29uZGl0aW9uczpcbi8vICAgIFNUWUxFX1BMQUlOIG9yIFNUWUxFX1NJTkdMRSA9PiBubyBcXG4gYXJlIGluIHRoZSBzdHJpbmcuXG4vLyAgICBTVFlMRV9MSVRFUkFMID0+IG5vIGxpbmVzIGFyZSBzdWl0YWJsZSBmb3IgZm9sZGluZyAob3IgbGluZVdpZHRoIGlzIC0xKS5cbi8vICAgIFNUWUxFX0ZPTERFRCA9PiBhIGxpbmUgPiBsaW5lV2lkdGggYW5kIGNhbiBiZSBmb2xkZWQgKGFuZCBsaW5lV2lkdGggIT0gLTEpLlxuZnVuY3Rpb24gY2hvb3NlU2NhbGFyU3R5bGUoc3RyaW5nLCBzaW5nbGVMaW5lT25seSwgaW5kZW50UGVyTGV2ZWwsIGxpbmVXaWR0aCxcbiAgdGVzdEFtYmlndW91c1R5cGUsIHF1b3RpbmdUeXBlLCBmb3JjZVF1b3RlcywgaW5ibG9jaykge1xuXG4gIHZhciBpO1xuICB2YXIgY2hhciA9IDA7XG4gIHZhciBwcmV2Q2hhciA9IG51bGw7XG4gIHZhciBoYXNMaW5lQnJlYWsgPSBmYWxzZTtcbiAgdmFyIGhhc0ZvbGRhYmxlTGluZSA9IGZhbHNlOyAvLyBvbmx5IGNoZWNrZWQgaWYgc2hvdWxkVHJhY2tXaWR0aFxuICB2YXIgc2hvdWxkVHJhY2tXaWR0aCA9IGxpbmVXaWR0aCAhPT0gLTE7XG4gIHZhciBwcmV2aW91c0xpbmVCcmVhayA9IC0xOyAvLyBjb3VudCB0aGUgZmlyc3QgbGluZSBjb3JyZWN0bHlcbiAgdmFyIHBsYWluID0gaXNQbGFpblNhZmVGaXJzdChjb2RlUG9pbnRBdChzdHJpbmcsIDApKVxuICAgICAgICAgICYmIGlzUGxhaW5TYWZlTGFzdChjb2RlUG9pbnRBdChzdHJpbmcsIHN0cmluZy5sZW5ndGggLSAxKSk7XG5cbiAgaWYgKHNpbmdsZUxpbmVPbmx5IHx8IGZvcmNlUXVvdGVzKSB7XG4gICAgLy8gQ2FzZTogbm8gYmxvY2sgc3R5bGVzLlxuICAgIC8vIENoZWNrIGZvciBkaXNhbGxvd2VkIGNoYXJhY3RlcnMgdG8gcnVsZSBvdXQgcGxhaW4gYW5kIHNpbmdsZS5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgY2hhciA+PSAweDEwMDAwID8gaSArPSAyIDogaSsrKSB7XG4gICAgICBjaGFyID0gY29kZVBvaW50QXQoc3RyaW5nLCBpKTtcbiAgICAgIGlmICghaXNQcmludGFibGUoY2hhcikpIHtcbiAgICAgICAgcmV0dXJuIFNUWUxFX0RPVUJMRTtcbiAgICAgIH1cbiAgICAgIHBsYWluID0gcGxhaW4gJiYgaXNQbGFpblNhZmUoY2hhciwgcHJldkNoYXIsIGluYmxvY2spO1xuICAgICAgcHJldkNoYXIgPSBjaGFyO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBDYXNlOiBibG9jayBzdHlsZXMgcGVybWl0dGVkLlxuICAgIGZvciAoaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBjaGFyID49IDB4MTAwMDAgPyBpICs9IDIgOiBpKyspIHtcbiAgICAgIGNoYXIgPSBjb2RlUG9pbnRBdChzdHJpbmcsIGkpO1xuICAgICAgaWYgKGNoYXIgPT09IENIQVJfTElORV9GRUVEKSB7XG4gICAgICAgIGhhc0xpbmVCcmVhayA9IHRydWU7XG4gICAgICAgIC8vIENoZWNrIGlmIGFueSBsaW5lIGNhbiBiZSBmb2xkZWQuXG4gICAgICAgIGlmIChzaG91bGRUcmFja1dpZHRoKSB7XG4gICAgICAgICAgaGFzRm9sZGFibGVMaW5lID0gaGFzRm9sZGFibGVMaW5lIHx8XG4gICAgICAgICAgICAvLyBGb2xkYWJsZSBsaW5lID0gdG9vIGxvbmcsIGFuZCBub3QgbW9yZS1pbmRlbnRlZC5cbiAgICAgICAgICAgIChpIC0gcHJldmlvdXNMaW5lQnJlYWsgLSAxID4gbGluZVdpZHRoICYmXG4gICAgICAgICAgICAgc3RyaW5nW3ByZXZpb3VzTGluZUJyZWFrICsgMV0gIT09ICcgJyk7XG4gICAgICAgICAgcHJldmlvdXNMaW5lQnJlYWsgPSBpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFpc1ByaW50YWJsZShjaGFyKSkge1xuICAgICAgICByZXR1cm4gU1RZTEVfRE9VQkxFO1xuICAgICAgfVxuICAgICAgcGxhaW4gPSBwbGFpbiAmJiBpc1BsYWluU2FmZShjaGFyLCBwcmV2Q2hhciwgaW5ibG9jayk7XG4gICAgICBwcmV2Q2hhciA9IGNoYXI7XG4gICAgfVxuICAgIC8vIGluIGNhc2UgdGhlIGVuZCBpcyBtaXNzaW5nIGEgXFxuXG4gICAgaGFzRm9sZGFibGVMaW5lID0gaGFzRm9sZGFibGVMaW5lIHx8IChzaG91bGRUcmFja1dpZHRoICYmXG4gICAgICAoaSAtIHByZXZpb3VzTGluZUJyZWFrIC0gMSA+IGxpbmVXaWR0aCAmJlxuICAgICAgIHN0cmluZ1twcmV2aW91c0xpbmVCcmVhayArIDFdICE9PSAnICcpKTtcbiAgfVxuICAvLyBBbHRob3VnaCBldmVyeSBzdHlsZSBjYW4gcmVwcmVzZW50IFxcbiB3aXRob3V0IGVzY2FwaW5nLCBwcmVmZXIgYmxvY2sgc3R5bGVzXG4gIC8vIGZvciBtdWx0aWxpbmUsIHNpbmNlIHRoZXkncmUgbW9yZSByZWFkYWJsZSBhbmQgdGhleSBkb24ndCBhZGQgZW1wdHkgbGluZXMuXG4gIC8vIEFsc28gcHJlZmVyIGZvbGRpbmcgYSBzdXBlci1sb25nIGxpbmUuXG4gIGlmICghaGFzTGluZUJyZWFrICYmICFoYXNGb2xkYWJsZUxpbmUpIHtcbiAgICAvLyBTdHJpbmdzIGludGVycHJldGFibGUgYXMgYW5vdGhlciB0eXBlIGhhdmUgdG8gYmUgcXVvdGVkO1xuICAgIC8vIGUuZy4gdGhlIHN0cmluZyAndHJ1ZScgdnMuIHRoZSBib29sZWFuIHRydWUuXG4gICAgaWYgKHBsYWluICYmICFmb3JjZVF1b3RlcyAmJiAhdGVzdEFtYmlndW91c1R5cGUoc3RyaW5nKSkge1xuICAgICAgcmV0dXJuIFNUWUxFX1BMQUlOO1xuICAgIH1cbiAgICByZXR1cm4gcXVvdGluZ1R5cGUgPT09IFFVT1RJTkdfVFlQRV9ET1VCTEUgPyBTVFlMRV9ET1VCTEUgOiBTVFlMRV9TSU5HTEU7XG4gIH1cbiAgLy8gRWRnZSBjYXNlOiBibG9jayBpbmRlbnRhdGlvbiBpbmRpY2F0b3IgY2FuIG9ubHkgaGF2ZSBvbmUgZGlnaXQuXG4gIGlmIChpbmRlbnRQZXJMZXZlbCA+IDkgJiYgbmVlZEluZGVudEluZGljYXRvcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIFNUWUxFX0RPVUJMRTtcbiAgfVxuICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgYmxvY2sgc3R5bGVzIGFyZSB2YWxpZC5cbiAgLy8gUHJlZmVyIGxpdGVyYWwgc3R5bGUgdW5sZXNzIHdlIHdhbnQgdG8gZm9sZC5cbiAgaWYgKCFmb3JjZVF1b3Rlcykge1xuICAgIHJldHVybiBoYXNGb2xkYWJsZUxpbmUgPyBTVFlMRV9GT0xERUQgOiBTVFlMRV9MSVRFUkFMO1xuICB9XG4gIHJldHVybiBxdW90aW5nVHlwZSA9PT0gUVVPVElOR19UWVBFX0RPVUJMRSA/IFNUWUxFX0RPVUJMRSA6IFNUWUxFX1NJTkdMRTtcbn1cblxuLy8gTm90ZTogbGluZSBicmVha2luZy9mb2xkaW5nIGlzIGltcGxlbWVudGVkIGZvciBvbmx5IHRoZSBmb2xkZWQgc3R5bGUuXG4vLyBOQi4gV2UgZHJvcCB0aGUgbGFzdCB0cmFpbGluZyBuZXdsaW5lIChpZiBhbnkpIG9mIGEgcmV0dXJuZWQgYmxvY2sgc2NhbGFyXG4vLyAgc2luY2UgdGhlIGR1bXBlciBhZGRzIGl0cyBvd24gbmV3bGluZS4gVGhpcyBhbHdheXMgd29ya3M6XG4vLyAgICDigKIgTm8gZW5kaW5nIG5ld2xpbmUgPT4gdW5hZmZlY3RlZDsgYWxyZWFkeSB1c2luZyBzdHJpcCBcIi1cIiBjaG9tcGluZy5cbi8vICAgIOKAoiBFbmRpbmcgbmV3bGluZSAgICA9PiByZW1vdmVkIHRoZW4gcmVzdG9yZWQuXG4vLyAgSW1wb3J0YW50bHksIHRoaXMga2VlcHMgdGhlIFwiK1wiIGNob21wIGluZGljYXRvciBmcm9tIGdhaW5pbmcgYW4gZXh0cmEgbGluZS5cbmZ1bmN0aW9uIHdyaXRlU2NhbGFyKHN0YXRlLCBzdHJpbmcsIGxldmVsLCBpc2tleSwgaW5ibG9jaykge1xuICBzdGF0ZS5kdW1wID0gKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHN0YXRlLnF1b3RpbmdUeXBlID09PSBRVU9USU5HX1RZUEVfRE9VQkxFID8gJ1wiXCInIDogXCInJ1wiO1xuICAgIH1cbiAgICBpZiAoIXN0YXRlLm5vQ29tcGF0TW9kZSkge1xuICAgICAgaWYgKERFUFJFQ0FURURfQk9PTEVBTlNfU1lOVEFYLmluZGV4T2Yoc3RyaW5nKSAhPT0gLTEgfHwgREVQUkVDQVRFRF9CQVNFNjBfU1lOVEFYLnRlc3Qoc3RyaW5nKSkge1xuICAgICAgICByZXR1cm4gc3RhdGUucXVvdGluZ1R5cGUgPT09IFFVT1RJTkdfVFlQRV9ET1VCTEUgPyAoJ1wiJyArIHN0cmluZyArICdcIicpIDogKFwiJ1wiICsgc3RyaW5nICsgXCInXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBpbmRlbnQgPSBzdGF0ZS5pbmRlbnQgKiBNYXRoLm1heCgxLCBsZXZlbCk7IC8vIG5vIDAtaW5kZW50IHNjYWxhcnNcbiAgICAvLyBBcyBpbmRlbnRhdGlvbiBnZXRzIGRlZXBlciwgbGV0IHRoZSB3aWR0aCBkZWNyZWFzZSBtb25vdG9uaWNhbGx5XG4gICAgLy8gdG8gdGhlIGxvd2VyIGJvdW5kIG1pbihzdGF0ZS5saW5lV2lkdGgsIDQwKS5cbiAgICAvLyBOb3RlIHRoYXQgdGhpcyBpbXBsaWVzXG4gICAgLy8gIHN0YXRlLmxpbmVXaWR0aCDiiaQgNDAgKyBzdGF0ZS5pbmRlbnQ6IHdpZHRoIGlzIGZpeGVkIGF0IHRoZSBsb3dlciBib3VuZC5cbiAgICAvLyAgc3RhdGUubGluZVdpZHRoID4gNDAgKyBzdGF0ZS5pbmRlbnQ6IHdpZHRoIGRlY3JlYXNlcyB1bnRpbCB0aGUgbG93ZXIgYm91bmQuXG4gICAgLy8gVGhpcyBiZWhhdmVzIGJldHRlciB0aGFuIGEgY29uc3RhbnQgbWluaW11bSB3aWR0aCB3aGljaCBkaXNhbGxvd3MgbmFycm93ZXIgb3B0aW9ucyxcbiAgICAvLyBvciBhbiBpbmRlbnQgdGhyZXNob2xkIHdoaWNoIGNhdXNlcyB0aGUgd2lkdGggdG8gc3VkZGVubHkgaW5jcmVhc2UuXG4gICAgdmFyIGxpbmVXaWR0aCA9IHN0YXRlLmxpbmVXaWR0aCA9PT0gLTFcbiAgICAgID8gLTEgOiBNYXRoLm1heChNYXRoLm1pbihzdGF0ZS5saW5lV2lkdGgsIDQwKSwgc3RhdGUubGluZVdpZHRoIC0gaW5kZW50KTtcblxuICAgIC8vIFdpdGhvdXQga25vd2luZyBpZiBrZXlzIGFyZSBpbXBsaWNpdC9leHBsaWNpdCwgYXNzdW1lIGltcGxpY2l0IGZvciBzYWZldHkuXG4gICAgdmFyIHNpbmdsZUxpbmVPbmx5ID0gaXNrZXlcbiAgICAgIC8vIE5vIGJsb2NrIHN0eWxlcyBpbiBmbG93IG1vZGUuXG4gICAgICB8fCAoc3RhdGUuZmxvd0xldmVsID4gLTEgJiYgbGV2ZWwgPj0gc3RhdGUuZmxvd0xldmVsKTtcbiAgICBmdW5jdGlvbiB0ZXN0QW1iaWd1aXR5KHN0cmluZykge1xuICAgICAgcmV0dXJuIHRlc3RJbXBsaWNpdFJlc29sdmluZyhzdGF0ZSwgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNob29zZVNjYWxhclN0eWxlKHN0cmluZywgc2luZ2xlTGluZU9ubHksIHN0YXRlLmluZGVudCwgbGluZVdpZHRoLFxuICAgICAgdGVzdEFtYmlndWl0eSwgc3RhdGUucXVvdGluZ1R5cGUsIHN0YXRlLmZvcmNlUXVvdGVzICYmICFpc2tleSwgaW5ibG9jaykpIHtcblxuICAgICAgY2FzZSBTVFlMRV9QTEFJTjpcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgIGNhc2UgU1RZTEVfU0lOR0xFOlxuICAgICAgICByZXR1cm4gXCInXCIgKyBzdHJpbmcucmVwbGFjZSgvJy9nLCBcIicnXCIpICsgXCInXCI7XG4gICAgICBjYXNlIFNUWUxFX0xJVEVSQUw6XG4gICAgICAgIHJldHVybiAnfCcgKyBibG9ja0hlYWRlcihzdHJpbmcsIHN0YXRlLmluZGVudClcbiAgICAgICAgICArIGRyb3BFbmRpbmdOZXdsaW5lKGluZGVudFN0cmluZyhzdHJpbmcsIGluZGVudCkpO1xuICAgICAgY2FzZSBTVFlMRV9GT0xERUQ6XG4gICAgICAgIHJldHVybiAnPicgKyBibG9ja0hlYWRlcihzdHJpbmcsIHN0YXRlLmluZGVudClcbiAgICAgICAgICArIGRyb3BFbmRpbmdOZXdsaW5lKGluZGVudFN0cmluZyhmb2xkU3RyaW5nKHN0cmluZywgbGluZVdpZHRoKSwgaW5kZW50KSk7XG4gICAgICBjYXNlIFNUWUxFX0RPVUJMRTpcbiAgICAgICAgcmV0dXJuICdcIicgKyBlc2NhcGVTdHJpbmcoc3RyaW5nKSArICdcIic7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKCdpbXBvc3NpYmxlIGVycm9yOiBpbnZhbGlkIHNjYWxhciBzdHlsZScpO1xuICAgIH1cbiAgfSgpKTtcbn1cblxuLy8gUHJlLWNvbmRpdGlvbnM6IHN0cmluZyBpcyB2YWxpZCBmb3IgYSBibG9jayBzY2FsYXIsIDEgPD0gaW5kZW50UGVyTGV2ZWwgPD0gOS5cbmZ1bmN0aW9uIGJsb2NrSGVhZGVyKHN0cmluZywgaW5kZW50UGVyTGV2ZWwpIHtcbiAgdmFyIGluZGVudEluZGljYXRvciA9IG5lZWRJbmRlbnRJbmRpY2F0b3Ioc3RyaW5nKSA/IFN0cmluZyhpbmRlbnRQZXJMZXZlbCkgOiAnJztcblxuICAvLyBub3RlIHRoZSBzcGVjaWFsIGNhc2U6IHRoZSBzdHJpbmcgJ1xcbicgY291bnRzIGFzIGEgXCJ0cmFpbGluZ1wiIGVtcHR5IGxpbmUuXG4gIHZhciBjbGlwID0gICAgICAgICAgc3RyaW5nW3N0cmluZy5sZW5ndGggLSAxXSA9PT0gJ1xcbic7XG4gIHZhciBrZWVwID0gY2xpcCAmJiAoc3RyaW5nW3N0cmluZy5sZW5ndGggLSAyXSA9PT0gJ1xcbicgfHwgc3RyaW5nID09PSAnXFxuJyk7XG4gIHZhciBjaG9tcCA9IGtlZXAgPyAnKycgOiAoY2xpcCA/ICcnIDogJy0nKTtcblxuICByZXR1cm4gaW5kZW50SW5kaWNhdG9yICsgY2hvbXAgKyAnXFxuJztcbn1cblxuLy8gKFNlZSB0aGUgbm90ZSBmb3Igd3JpdGVTY2FsYXIuKVxuZnVuY3Rpb24gZHJvcEVuZGluZ05ld2xpbmUoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmdbc3RyaW5nLmxlbmd0aCAtIDFdID09PSAnXFxuJyA/IHN0cmluZy5zbGljZSgwLCAtMSkgOiBzdHJpbmc7XG59XG5cbi8vIE5vdGU6IGEgbG9uZyBsaW5lIHdpdGhvdXQgYSBzdWl0YWJsZSBicmVhayBwb2ludCB3aWxsIGV4Y2VlZCB0aGUgd2lkdGggbGltaXQuXG4vLyBQcmUtY29uZGl0aW9uczogZXZlcnkgY2hhciBpbiBzdHIgaXNQcmludGFibGUsIHN0ci5sZW5ndGggPiAwLCB3aWR0aCA+IDAuXG5mdW5jdGlvbiBmb2xkU3RyaW5nKHN0cmluZywgd2lkdGgpIHtcbiAgLy8gSW4gZm9sZGVkIHN0eWxlLCAkayQgY29uc2VjdXRpdmUgbmV3bGluZXMgb3V0cHV0IGFzICRrKzEkIG5ld2xpbmVz4oCUXG4gIC8vIHVubGVzcyB0aGV5J3JlIGJlZm9yZSBvciBhZnRlciBhIG1vcmUtaW5kZW50ZWQgbGluZSwgb3IgYXQgdGhlIHZlcnlcbiAgLy8gYmVnaW5uaW5nIG9yIGVuZCwgaW4gd2hpY2ggY2FzZSAkayQgbWFwcyB0byAkayQuXG4gIC8vIFRoZXJlZm9yZSwgcGFyc2UgZWFjaCBjaHVuayBhcyBuZXdsaW5lKHMpIGZvbGxvd2VkIGJ5IGEgY29udGVudCBsaW5lLlxuICB2YXIgbGluZVJlID0gLyhcXG4rKShbXlxcbl0qKS9nO1xuXG4gIC8vIGZpcnN0IGxpbmUgKHBvc3NpYmx5IGFuIGVtcHR5IGxpbmUpXG4gIHZhciByZXN1bHQgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBuZXh0TEYgPSBzdHJpbmcuaW5kZXhPZignXFxuJyk7XG4gICAgbmV4dExGID0gbmV4dExGICE9PSAtMSA/IG5leHRMRiA6IHN0cmluZy5sZW5ndGg7XG4gICAgbGluZVJlLmxhc3RJbmRleCA9IG5leHRMRjtcbiAgICByZXR1cm4gZm9sZExpbmUoc3RyaW5nLnNsaWNlKDAsIG5leHRMRiksIHdpZHRoKTtcbiAgfSgpKTtcbiAgLy8gSWYgd2UgaGF2ZW4ndCByZWFjaGVkIHRoZSBmaXJzdCBjb250ZW50IGxpbmUgeWV0LCBkb24ndCBhZGQgYW4gZXh0cmEgXFxuLlxuICB2YXIgcHJldk1vcmVJbmRlbnRlZCA9IHN0cmluZ1swXSA9PT0gJ1xcbicgfHwgc3RyaW5nWzBdID09PSAnICc7XG4gIHZhciBtb3JlSW5kZW50ZWQ7XG5cbiAgLy8gcmVzdCBvZiB0aGUgbGluZXNcbiAgdmFyIG1hdGNoO1xuICB3aGlsZSAoKG1hdGNoID0gbGluZVJlLmV4ZWMoc3RyaW5nKSkpIHtcbiAgICB2YXIgcHJlZml4ID0gbWF0Y2hbMV0sIGxpbmUgPSBtYXRjaFsyXTtcbiAgICBtb3JlSW5kZW50ZWQgPSAobGluZVswXSA9PT0gJyAnKTtcbiAgICByZXN1bHQgKz0gcHJlZml4XG4gICAgICArICghcHJldk1vcmVJbmRlbnRlZCAmJiAhbW9yZUluZGVudGVkICYmIGxpbmUgIT09ICcnXG4gICAgICAgID8gJ1xcbicgOiAnJylcbiAgICAgICsgZm9sZExpbmUobGluZSwgd2lkdGgpO1xuICAgIHByZXZNb3JlSW5kZW50ZWQgPSBtb3JlSW5kZW50ZWQ7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBHcmVlZHkgbGluZSBicmVha2luZy5cbi8vIFBpY2tzIHRoZSBsb25nZXN0IGxpbmUgdW5kZXIgdGhlIGxpbWl0IGVhY2ggdGltZSxcbi8vIG90aGVyd2lzZSBzZXR0bGVzIGZvciB0aGUgc2hvcnRlc3QgbGluZSBvdmVyIHRoZSBsaW1pdC5cbi8vIE5CLiBNb3JlLWluZGVudGVkIGxpbmVzICpjYW5ub3QqIGJlIGZvbGRlZCwgYXMgdGhhdCB3b3VsZCBhZGQgYW4gZXh0cmEgXFxuLlxuZnVuY3Rpb24gZm9sZExpbmUobGluZSwgd2lkdGgpIHtcbiAgaWYgKGxpbmUgPT09ICcnIHx8IGxpbmVbMF0gPT09ICcgJykgcmV0dXJuIGxpbmU7XG5cbiAgLy8gU2luY2UgYSBtb3JlLWluZGVudGVkIGxpbmUgYWRkcyBhIFxcbiwgYnJlYWtzIGNhbid0IGJlIGZvbGxvd2VkIGJ5IGEgc3BhY2UuXG4gIHZhciBicmVha1JlID0gLyBbXiBdL2c7IC8vIG5vdGU6IHRoZSBtYXRjaCBpbmRleCB3aWxsIGFsd2F5cyBiZSA8PSBsZW5ndGgtMi5cbiAgdmFyIG1hdGNoO1xuICAvLyBzdGFydCBpcyBhbiBpbmNsdXNpdmUgaW5kZXguIGVuZCwgY3VyciwgYW5kIG5leHQgYXJlIGV4Y2x1c2l2ZS5cbiAgdmFyIHN0YXJ0ID0gMCwgZW5kLCBjdXJyID0gMCwgbmV4dCA9IDA7XG4gIHZhciByZXN1bHQgPSAnJztcblxuICAvLyBJbnZhcmlhbnRzOiAwIDw9IHN0YXJ0IDw9IGxlbmd0aC0xLlxuICAvLyAgIDAgPD0gY3VyciA8PSBuZXh0IDw9IG1heCgwLCBsZW5ndGgtMikuIGN1cnIgLSBzdGFydCA8PSB3aWR0aC5cbiAgLy8gSW5zaWRlIHRoZSBsb29wOlxuICAvLyAgIEEgbWF0Y2ggaW1wbGllcyBsZW5ndGggPj0gMiwgc28gY3VyciBhbmQgbmV4dCBhcmUgPD0gbGVuZ3RoLTIuXG4gIHdoaWxlICgobWF0Y2ggPSBicmVha1JlLmV4ZWMobGluZSkpKSB7XG4gICAgbmV4dCA9IG1hdGNoLmluZGV4O1xuICAgIC8vIG1haW50YWluIGludmFyaWFudDogY3VyciAtIHN0YXJ0IDw9IHdpZHRoXG4gICAgaWYgKG5leHQgLSBzdGFydCA+IHdpZHRoKSB7XG4gICAgICBlbmQgPSAoY3VyciA+IHN0YXJ0KSA/IGN1cnIgOiBuZXh0OyAvLyBkZXJpdmUgZW5kIDw9IGxlbmd0aC0yXG4gICAgICByZXN1bHQgKz0gJ1xcbicgKyBsaW5lLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgICAgLy8gc2tpcCB0aGUgc3BhY2UgdGhhdCB3YXMgb3V0cHV0IGFzIFxcblxuICAgICAgc3RhcnQgPSBlbmQgKyAxOyAgICAgICAgICAgICAgICAgICAgLy8gZGVyaXZlIHN0YXJ0IDw9IGxlbmd0aC0xXG4gICAgfVxuICAgIGN1cnIgPSBuZXh0O1xuICB9XG5cbiAgLy8gQnkgdGhlIGludmFyaWFudHMsIHN0YXJ0IDw9IGxlbmd0aC0xLCBzbyB0aGVyZSBpcyBzb21ldGhpbmcgbGVmdCBvdmVyLlxuICAvLyBJdCBpcyBlaXRoZXIgdGhlIHdob2xlIHN0cmluZyBvciBhIHBhcnQgc3RhcnRpbmcgZnJvbSBub24td2hpdGVzcGFjZS5cbiAgcmVzdWx0ICs9ICdcXG4nO1xuICAvLyBJbnNlcnQgYSBicmVhayBpZiB0aGUgcmVtYWluZGVyIGlzIHRvbyBsb25nIGFuZCB0aGVyZSBpcyBhIGJyZWFrIGF2YWlsYWJsZS5cbiAgaWYgKGxpbmUubGVuZ3RoIC0gc3RhcnQgPiB3aWR0aCAmJiBjdXJyID4gc3RhcnQpIHtcbiAgICByZXN1bHQgKz0gbGluZS5zbGljZShzdGFydCwgY3VycikgKyAnXFxuJyArIGxpbmUuc2xpY2UoY3VyciArIDEpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCArPSBsaW5lLnNsaWNlKHN0YXJ0KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQuc2xpY2UoMSk7IC8vIGRyb3AgZXh0cmEgXFxuIGpvaW5lclxufVxuXG4vLyBFc2NhcGVzIGEgZG91YmxlLXF1b3RlZCBzdHJpbmcuXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcoc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIGNoYXIgPSAwO1xuICB2YXIgZXNjYXBlU2VxO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgY2hhciA+PSAweDEwMDAwID8gaSArPSAyIDogaSsrKSB7XG4gICAgY2hhciA9IGNvZGVQb2ludEF0KHN0cmluZywgaSk7XG4gICAgZXNjYXBlU2VxID0gRVNDQVBFX1NFUVVFTkNFU1tjaGFyXTtcblxuICAgIGlmICghZXNjYXBlU2VxICYmIGlzUHJpbnRhYmxlKGNoYXIpKSB7XG4gICAgICByZXN1bHQgKz0gc3RyaW5nW2ldO1xuICAgICAgaWYgKGNoYXIgPj0gMHgxMDAwMCkgcmVzdWx0ICs9IHN0cmluZ1tpICsgMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCArPSBlc2NhcGVTZXEgfHwgZW5jb2RlSGV4KGNoYXIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvd1NlcXVlbmNlKHN0YXRlLCBsZXZlbCwgb2JqZWN0KSB7XG4gIHZhciBfcmVzdWx0ID0gJycsXG4gICAgICBfdGFnICAgID0gc3RhdGUudGFnLFxuICAgICAgaW5kZXgsXG4gICAgICBsZW5ndGgsXG4gICAgICB2YWx1ZTtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICB2YWx1ZSA9IG9iamVjdFtpbmRleF07XG5cbiAgICBpZiAoc3RhdGUucmVwbGFjZXIpIHtcbiAgICAgIHZhbHVlID0gc3RhdGUucmVwbGFjZXIuY2FsbChvYmplY3QsIFN0cmluZyhpbmRleCksIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSBvbmx5IHZhbGlkIGVsZW1lbnRzLCBwdXQgbnVsbCBpbnN0ZWFkIG9mIGludmFsaWQgZWxlbWVudHMuXG4gICAgaWYgKHdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIHZhbHVlLCBmYWxzZSwgZmFsc2UpIHx8XG4gICAgICAgICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICB3cml0ZU5vZGUoc3RhdGUsIGxldmVsLCBudWxsLCBmYWxzZSwgZmFsc2UpKSkge1xuXG4gICAgICBpZiAoX3Jlc3VsdCAhPT0gJycpIF9yZXN1bHQgKz0gJywnICsgKCFzdGF0ZS5jb25kZW5zZUZsb3cgPyAnICcgOiAnJyk7XG4gICAgICBfcmVzdWx0ICs9IHN0YXRlLmR1bXA7XG4gICAgfVxuICB9XG5cbiAgc3RhdGUudGFnID0gX3RhZztcbiAgc3RhdGUuZHVtcCA9ICdbJyArIF9yZXN1bHQgKyAnXSc7XG59XG5cbmZ1bmN0aW9uIHdyaXRlQmxvY2tTZXF1ZW5jZShzdGF0ZSwgbGV2ZWwsIG9iamVjdCwgY29tcGFjdCkge1xuICB2YXIgX3Jlc3VsdCA9ICcnLFxuICAgICAgX3RhZyAgICA9IHN0YXRlLnRhZyxcbiAgICAgIGluZGV4LFxuICAgICAgbGVuZ3RoLFxuICAgICAgdmFsdWU7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgdmFsdWUgPSBvYmplY3RbaW5kZXhdO1xuXG4gICAgaWYgKHN0YXRlLnJlcGxhY2VyKSB7XG4gICAgICB2YWx1ZSA9IHN0YXRlLnJlcGxhY2VyLmNhbGwob2JqZWN0LCBTdHJpbmcoaW5kZXgpLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gV3JpdGUgb25seSB2YWxpZCBlbGVtZW50cywgcHV0IG51bGwgaW5zdGVhZCBvZiBpbnZhbGlkIGVsZW1lbnRzLlxuICAgIGlmICh3cml0ZU5vZGUoc3RhdGUsIGxldmVsICsgMSwgdmFsdWUsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlKSB8fFxuICAgICAgICAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgd3JpdGVOb2RlKHN0YXRlLCBsZXZlbCArIDEsIG51bGwsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlKSkpIHtcblxuICAgICAgaWYgKCFjb21wYWN0IHx8IF9yZXN1bHQgIT09ICcnKSB7XG4gICAgICAgIF9yZXN1bHQgKz0gZ2VuZXJhdGVOZXh0TGluZShzdGF0ZSwgbGV2ZWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUuZHVtcCAmJiBDSEFSX0xJTkVfRkVFRCA9PT0gc3RhdGUuZHVtcC5jaGFyQ29kZUF0KDApKSB7XG4gICAgICAgIF9yZXN1bHQgKz0gJy0nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3Jlc3VsdCArPSAnLSAnO1xuICAgICAgfVxuXG4gICAgICBfcmVzdWx0ICs9IHN0YXRlLmR1bXA7XG4gICAgfVxuICB9XG5cbiAgc3RhdGUudGFnID0gX3RhZztcbiAgc3RhdGUuZHVtcCA9IF9yZXN1bHQgfHwgJ1tdJzsgLy8gRW1wdHkgc2VxdWVuY2UgaWYgbm8gdmFsaWQgdmFsdWVzLlxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb3dNYXBwaW5nKHN0YXRlLCBsZXZlbCwgb2JqZWN0KSB7XG4gIHZhciBfcmVzdWx0ICAgICAgID0gJycsXG4gICAgICBfdGFnICAgICAgICAgID0gc3RhdGUudGFnLFxuICAgICAgb2JqZWN0S2V5TGlzdCA9IE9iamVjdC5rZXlzKG9iamVjdCksXG4gICAgICBpbmRleCxcbiAgICAgIGxlbmd0aCxcbiAgICAgIG9iamVjdEtleSxcbiAgICAgIG9iamVjdFZhbHVlLFxuICAgICAgcGFpckJ1ZmZlcjtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0S2V5TGlzdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG5cbiAgICBwYWlyQnVmZmVyID0gJyc7XG4gICAgaWYgKF9yZXN1bHQgIT09ICcnKSBwYWlyQnVmZmVyICs9ICcsICc7XG5cbiAgICBpZiAoc3RhdGUuY29uZGVuc2VGbG93KSBwYWlyQnVmZmVyICs9ICdcIic7XG5cbiAgICBvYmplY3RLZXkgPSBvYmplY3RLZXlMaXN0W2luZGV4XTtcbiAgICBvYmplY3RWYWx1ZSA9IG9iamVjdFtvYmplY3RLZXldO1xuXG4gICAgaWYgKHN0YXRlLnJlcGxhY2VyKSB7XG4gICAgICBvYmplY3RWYWx1ZSA9IHN0YXRlLnJlcGxhY2VyLmNhbGwob2JqZWN0LCBvYmplY3RLZXksIG9iamVjdFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIG9iamVjdEtleSwgZmFsc2UsIGZhbHNlKSkge1xuICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBwYWlyIGJlY2F1c2Ugb2YgaW52YWxpZCBrZXk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmR1bXAubGVuZ3RoID4gMTAyNCkgcGFpckJ1ZmZlciArPSAnPyAnO1xuXG4gICAgcGFpckJ1ZmZlciArPSBzdGF0ZS5kdW1wICsgKHN0YXRlLmNvbmRlbnNlRmxvdyA/ICdcIicgOiAnJykgKyAnOicgKyAoc3RhdGUuY29uZGVuc2VGbG93ID8gJycgOiAnICcpO1xuXG4gICAgaWYgKCF3cml0ZU5vZGUoc3RhdGUsIGxldmVsLCBvYmplY3RWYWx1ZSwgZmFsc2UsIGZhbHNlKSkge1xuICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBwYWlyIGJlY2F1c2Ugb2YgaW52YWxpZCB2YWx1ZS5cbiAgICB9XG5cbiAgICBwYWlyQnVmZmVyICs9IHN0YXRlLmR1bXA7XG5cbiAgICAvLyBCb3RoIGtleSBhbmQgdmFsdWUgYXJlIHZhbGlkLlxuICAgIF9yZXN1bHQgKz0gcGFpckJ1ZmZlcjtcbiAgfVxuXG4gIHN0YXRlLnRhZyA9IF90YWc7XG4gIHN0YXRlLmR1bXAgPSAneycgKyBfcmVzdWx0ICsgJ30nO1xufVxuXG5mdW5jdGlvbiB3cml0ZUJsb2NrTWFwcGluZyhzdGF0ZSwgbGV2ZWwsIG9iamVjdCwgY29tcGFjdCkge1xuICB2YXIgX3Jlc3VsdCAgICAgICA9ICcnLFxuICAgICAgX3RhZyAgICAgICAgICA9IHN0YXRlLnRhZyxcbiAgICAgIG9iamVjdEtleUxpc3QgPSBPYmplY3Qua2V5cyhvYmplY3QpLFxuICAgICAgaW5kZXgsXG4gICAgICBsZW5ndGgsXG4gICAgICBvYmplY3RLZXksXG4gICAgICBvYmplY3RWYWx1ZSxcbiAgICAgIGV4cGxpY2l0UGFpcixcbiAgICAgIHBhaXJCdWZmZXI7XG5cbiAgLy8gQWxsb3cgc29ydGluZyBrZXlzIHNvIHRoYXQgdGhlIG91dHB1dCBmaWxlIGlzIGRldGVybWluaXN0aWNcbiAgaWYgKHN0YXRlLnNvcnRLZXlzID09PSB0cnVlKSB7XG4gICAgLy8gRGVmYXVsdCBzb3J0aW5nXG4gICAgb2JqZWN0S2V5TGlzdC5zb3J0KCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHN0YXRlLnNvcnRLZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gQ3VzdG9tIHNvcnQgZnVuY3Rpb25cbiAgICBvYmplY3RLZXlMaXN0LnNvcnQoc3RhdGUuc29ydEtleXMpO1xuICB9IGVsc2UgaWYgKHN0YXRlLnNvcnRLZXlzKSB7XG4gICAgLy8gU29tZXRoaW5nIGlzIHdyb25nXG4gICAgdGhyb3cgbmV3IGV4Y2VwdGlvbignc29ydEtleXMgbXVzdCBiZSBhIGJvb2xlYW4gb3IgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdEtleUxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHBhaXJCdWZmZXIgPSAnJztcblxuICAgIGlmICghY29tcGFjdCB8fCBfcmVzdWx0ICE9PSAnJykge1xuICAgICAgcGFpckJ1ZmZlciArPSBnZW5lcmF0ZU5leHRMaW5lKHN0YXRlLCBsZXZlbCk7XG4gICAgfVxuXG4gICAgb2JqZWN0S2V5ID0gb2JqZWN0S2V5TGlzdFtpbmRleF07XG4gICAgb2JqZWN0VmFsdWUgPSBvYmplY3Rbb2JqZWN0S2V5XTtcblxuICAgIGlmIChzdGF0ZS5yZXBsYWNlcikge1xuICAgICAgb2JqZWN0VmFsdWUgPSBzdGF0ZS5yZXBsYWNlci5jYWxsKG9iamVjdCwgb2JqZWN0S2V5LCBvYmplY3RWYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKCF3cml0ZU5vZGUoc3RhdGUsIGxldmVsICsgMSwgb2JqZWN0S2V5LCB0cnVlLCB0cnVlLCB0cnVlKSkge1xuICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBwYWlyIGJlY2F1c2Ugb2YgaW52YWxpZCBrZXkuXG4gICAgfVxuXG4gICAgZXhwbGljaXRQYWlyID0gKHN0YXRlLnRhZyAhPT0gbnVsbCAmJiBzdGF0ZS50YWcgIT09ICc/JykgfHxcbiAgICAgICAgICAgICAgICAgICAoc3RhdGUuZHVtcCAmJiBzdGF0ZS5kdW1wLmxlbmd0aCA+IDEwMjQpO1xuXG4gICAgaWYgKGV4cGxpY2l0UGFpcikge1xuICAgICAgaWYgKHN0YXRlLmR1bXAgJiYgQ0hBUl9MSU5FX0ZFRUQgPT09IHN0YXRlLmR1bXAuY2hhckNvZGVBdCgwKSkge1xuICAgICAgICBwYWlyQnVmZmVyICs9ICc/JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhaXJCdWZmZXIgKz0gJz8gJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYWlyQnVmZmVyICs9IHN0YXRlLmR1bXA7XG5cbiAgICBpZiAoZXhwbGljaXRQYWlyKSB7XG4gICAgICBwYWlyQnVmZmVyICs9IGdlbmVyYXRlTmV4dExpbmUoc3RhdGUsIGxldmVsKTtcbiAgICB9XG5cbiAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwgKyAxLCBvYmplY3RWYWx1ZSwgdHJ1ZSwgZXhwbGljaXRQYWlyKSkge1xuICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBwYWlyIGJlY2F1c2Ugb2YgaW52YWxpZCB2YWx1ZS5cbiAgICB9XG5cbiAgICBpZiAoc3RhdGUuZHVtcCAmJiBDSEFSX0xJTkVfRkVFRCA9PT0gc3RhdGUuZHVtcC5jaGFyQ29kZUF0KDApKSB7XG4gICAgICBwYWlyQnVmZmVyICs9ICc6JztcbiAgICB9IGVsc2Uge1xuICAgICAgcGFpckJ1ZmZlciArPSAnOiAnO1xuICAgIH1cblxuICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUuZHVtcDtcblxuICAgIC8vIEJvdGgga2V5IGFuZCB2YWx1ZSBhcmUgdmFsaWQuXG4gICAgX3Jlc3VsdCArPSBwYWlyQnVmZmVyO1xuICB9XG5cbiAgc3RhdGUudGFnID0gX3RhZztcbiAgc3RhdGUuZHVtcCA9IF9yZXN1bHQgfHwgJ3t9JzsgLy8gRW1wdHkgbWFwcGluZyBpZiBubyB2YWxpZCBwYWlycy5cbn1cblxuZnVuY3Rpb24gZGV0ZWN0VHlwZShzdGF0ZSwgb2JqZWN0LCBleHBsaWNpdCkge1xuICB2YXIgX3Jlc3VsdCwgdHlwZUxpc3QsIGluZGV4LCBsZW5ndGgsIHR5cGUsIHN0eWxlO1xuXG4gIHR5cGVMaXN0ID0gZXhwbGljaXQgPyBzdGF0ZS5leHBsaWNpdFR5cGVzIDogc3RhdGUuaW1wbGljaXRUeXBlcztcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gdHlwZUxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHR5cGUgPSB0eXBlTGlzdFtpbmRleF07XG5cbiAgICBpZiAoKHR5cGUuaW5zdGFuY2VPZiAgfHwgdHlwZS5wcmVkaWNhdGUpICYmXG4gICAgICAgICghdHlwZS5pbnN0YW5jZU9mIHx8ICgodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcpICYmIChvYmplY3QgaW5zdGFuY2VvZiB0eXBlLmluc3RhbmNlT2YpKSkgJiZcbiAgICAgICAgKCF0eXBlLnByZWRpY2F0ZSAgfHwgdHlwZS5wcmVkaWNhdGUob2JqZWN0KSkpIHtcblxuICAgICAgaWYgKGV4cGxpY2l0KSB7XG4gICAgICAgIGlmICh0eXBlLm11bHRpICYmIHR5cGUucmVwcmVzZW50TmFtZSkge1xuICAgICAgICAgIHN0YXRlLnRhZyA9IHR5cGUucmVwcmVzZW50TmFtZShvYmplY3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLnRhZyA9IHR5cGUudGFnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS50YWcgPSAnPyc7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlLnJlcHJlc2VudCkge1xuICAgICAgICBzdHlsZSA9IHN0YXRlLnN0eWxlTWFwW3R5cGUudGFnXSB8fCB0eXBlLmRlZmF1bHRTdHlsZTtcblxuICAgICAgICBpZiAoX3RvU3RyaW5nLmNhbGwodHlwZS5yZXByZXNlbnQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nKSB7XG4gICAgICAgICAgX3Jlc3VsdCA9IHR5cGUucmVwcmVzZW50KG9iamVjdCwgc3R5bGUpO1xuICAgICAgICB9IGVsc2UgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHR5cGUucmVwcmVzZW50LCBzdHlsZSkpIHtcbiAgICAgICAgICBfcmVzdWx0ID0gdHlwZS5yZXByZXNlbnRbc3R5bGVdKG9iamVjdCwgc3R5bGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBleGNlcHRpb24oJyE8JyArIHR5cGUudGFnICsgJz4gdGFnIHJlc29sdmVyIGFjY2VwdHMgbm90IFwiJyArIHN0eWxlICsgJ1wiIHN0eWxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZS5kdW1wID0gX3Jlc3VsdDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBTZXJpYWxpemVzIGBvYmplY3RgIGFuZCB3cml0ZXMgaXQgdG8gZ2xvYmFsIGByZXN1bHRgLlxuLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIG9yIGZhbHNlIG9uIGludmFsaWQgb2JqZWN0LlxuLy9cbmZ1bmN0aW9uIHdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIG9iamVjdCwgYmxvY2ssIGNvbXBhY3QsIGlza2V5LCBpc2Jsb2Nrc2VxKSB7XG4gIHN0YXRlLnRhZyA9IG51bGw7XG4gIHN0YXRlLmR1bXAgPSBvYmplY3Q7XG5cbiAgaWYgKCFkZXRlY3RUeXBlKHN0YXRlLCBvYmplY3QsIGZhbHNlKSkge1xuICAgIGRldGVjdFR5cGUoc3RhdGUsIG9iamVjdCwgdHJ1ZSk7XG4gIH1cblxuICB2YXIgdHlwZSA9IF90b1N0cmluZy5jYWxsKHN0YXRlLmR1bXApO1xuICB2YXIgaW5ibG9jayA9IGJsb2NrO1xuICB2YXIgdGFnU3RyO1xuXG4gIGlmIChibG9jaykge1xuICAgIGJsb2NrID0gKHN0YXRlLmZsb3dMZXZlbCA8IDAgfHwgc3RhdGUuZmxvd0xldmVsID4gbGV2ZWwpO1xuICB9XG5cbiAgdmFyIG9iamVjdE9yQXJyYXkgPSB0eXBlID09PSAnW29iamVjdCBPYmplY3RdJyB8fCB0eXBlID09PSAnW29iamVjdCBBcnJheV0nLFxuICAgICAgZHVwbGljYXRlSW5kZXgsXG4gICAgICBkdXBsaWNhdGU7XG5cbiAgaWYgKG9iamVjdE9yQXJyYXkpIHtcbiAgICBkdXBsaWNhdGVJbmRleCA9IHN0YXRlLmR1cGxpY2F0ZXMuaW5kZXhPZihvYmplY3QpO1xuICAgIGR1cGxpY2F0ZSA9IGR1cGxpY2F0ZUluZGV4ICE9PSAtMTtcbiAgfVxuXG4gIGlmICgoc3RhdGUudGFnICE9PSBudWxsICYmIHN0YXRlLnRhZyAhPT0gJz8nKSB8fCBkdXBsaWNhdGUgfHwgKHN0YXRlLmluZGVudCAhPT0gMiAmJiBsZXZlbCA+IDApKSB7XG4gICAgY29tcGFjdCA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGR1cGxpY2F0ZSAmJiBzdGF0ZS51c2VkRHVwbGljYXRlc1tkdXBsaWNhdGVJbmRleF0pIHtcbiAgICBzdGF0ZS5kdW1wID0gJypyZWZfJyArIGR1cGxpY2F0ZUluZGV4O1xuICB9IGVsc2Uge1xuICAgIGlmIChvYmplY3RPckFycmF5ICYmIGR1cGxpY2F0ZSAmJiAhc3RhdGUudXNlZER1cGxpY2F0ZXNbZHVwbGljYXRlSW5kZXhdKSB7XG4gICAgICBzdGF0ZS51c2VkRHVwbGljYXRlc1tkdXBsaWNhdGVJbmRleF0gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgIGlmIChibG9jayAmJiAoT2JqZWN0LmtleXMoc3RhdGUuZHVtcCkubGVuZ3RoICE9PSAwKSkge1xuICAgICAgICB3cml0ZUJsb2NrTWFwcGluZyhzdGF0ZSwgbGV2ZWwsIHN0YXRlLmR1bXAsIGNvbXBhY3QpO1xuICAgICAgICBpZiAoZHVwbGljYXRlKSB7XG4gICAgICAgICAgc3RhdGUuZHVtcCA9ICcmcmVmXycgKyBkdXBsaWNhdGVJbmRleCArIHN0YXRlLmR1bXA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlRmxvd01hcHBpbmcoc3RhdGUsIGxldmVsLCBzdGF0ZS5kdW1wKTtcbiAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgIHN0YXRlLmR1bXAgPSAnJnJlZl8nICsgZHVwbGljYXRlSW5kZXggKyAnICcgKyBzdGF0ZS5kdW1wO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICBpZiAoYmxvY2sgJiYgKHN0YXRlLmR1bXAubGVuZ3RoICE9PSAwKSkge1xuICAgICAgICBpZiAoc3RhdGUubm9BcnJheUluZGVudCAmJiAhaXNibG9ja3NlcSAmJiBsZXZlbCA+IDApIHtcbiAgICAgICAgICB3cml0ZUJsb2NrU2VxdWVuY2Uoc3RhdGUsIGxldmVsIC0gMSwgc3RhdGUuZHVtcCwgY29tcGFjdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd3JpdGVCbG9ja1NlcXVlbmNlKHN0YXRlLCBsZXZlbCwgc3RhdGUuZHVtcCwgY29tcGFjdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgIHN0YXRlLmR1bXAgPSAnJnJlZl8nICsgZHVwbGljYXRlSW5kZXggKyBzdGF0ZS5kdW1wO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3cml0ZUZsb3dTZXF1ZW5jZShzdGF0ZSwgbGV2ZWwsIHN0YXRlLmR1bXApO1xuICAgICAgICBpZiAoZHVwbGljYXRlKSB7XG4gICAgICAgICAgc3RhdGUuZHVtcCA9ICcmcmVmXycgKyBkdXBsaWNhdGVJbmRleCArICcgJyArIHN0YXRlLmR1bXA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdbb2JqZWN0IFN0cmluZ10nKSB7XG4gICAgICBpZiAoc3RhdGUudGFnICE9PSAnPycpIHtcbiAgICAgICAgd3JpdGVTY2FsYXIoc3RhdGUsIHN0YXRlLmR1bXAsIGxldmVsLCBpc2tleSwgaW5ibG9jayk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnW29iamVjdCBVbmRlZmluZWRdJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3RhdGUuc2tpcEludmFsaWQpIHJldHVybiBmYWxzZTtcbiAgICAgIHRocm93IG5ldyBleGNlcHRpb24oJ3VuYWNjZXB0YWJsZSBraW5kIG9mIGFuIG9iamVjdCB0byBkdW1wICcgKyB0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUudGFnICE9PSBudWxsICYmIHN0YXRlLnRhZyAhPT0gJz8nKSB7XG4gICAgICAvLyBOZWVkIHRvIGVuY29kZSBhbGwgY2hhcmFjdGVycyBleGNlcHQgdGhvc2UgYWxsb3dlZCBieSB0aGUgc3BlYzpcbiAgICAgIC8vXG4gICAgICAvLyBbMzVdIG5zLWRlYy1kaWdpdCAgICA6Oj0gIFsjeDMwLSN4MzldIC8qIDAtOSAqL1xuICAgICAgLy8gWzM2XSBucy1oZXgtZGlnaXQgICAgOjo9ICBucy1kZWMtZGlnaXRcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHwgWyN4NDEtI3g0Nl0gLyogQS1GICovIHwgWyN4NjEtI3g2Nl0gLyogYS1mICovXG4gICAgICAvLyBbMzddIG5zLWFzY2lpLWxldHRlciA6Oj0gIFsjeDQxLSN4NUFdIC8qIEEtWiAqLyB8IFsjeDYxLSN4N0FdIC8qIGEteiAqL1xuICAgICAgLy8gWzM4XSBucy13b3JkLWNoYXIgICAgOjo9ICBucy1kZWMtZGlnaXQgfCBucy1hc2NpaS1sZXR0ZXIgfCDigJwt4oCdXG4gICAgICAvLyBbMzldIG5zLXVyaS1jaGFyICAgICA6Oj0gIOKAnCXigJ0gbnMtaGV4LWRpZ2l0IG5zLWhleC1kaWdpdCB8IG5zLXdvcmQtY2hhciB8IOKAnCPigJ1cbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHwg4oCcO+KAnSB8IOKAnC/igJ0gfCDigJw/4oCdIHwg4oCcOuKAnSB8IOKAnEDigJ0gfCDigJwm4oCdIHwg4oCcPeKAnSB8IOKAnCvigJ0gfCDigJwk4oCdIHwg4oCcLOKAnVxuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfCDigJxf4oCdIHwg4oCcLuKAnSB8IOKAnCHigJ0gfCDigJx+4oCdIHwg4oCcKuKAnSB8IOKAnCfigJ0gfCDigJwo4oCdIHwg4oCcKeKAnSB8IOKAnFvigJ0gfCDigJxd4oCdXG4gICAgICAvL1xuICAgICAgLy8gQWxzbyBuZWVkIHRvIGVuY29kZSAnIScgYmVjYXVzZSBpdCBoYXMgc3BlY2lhbCBtZWFuaW5nIChlbmQgb2YgdGFnIHByZWZpeCkuXG4gICAgICAvL1xuICAgICAgdGFnU3RyID0gZW5jb2RlVVJJKFxuICAgICAgICBzdGF0ZS50YWdbMF0gPT09ICchJyA/IHN0YXRlLnRhZy5zbGljZSgxKSA6IHN0YXRlLnRhZ1xuICAgICAgKS5yZXBsYWNlKC8hL2csICclMjEnKTtcblxuICAgICAgaWYgKHN0YXRlLnRhZ1swXSA9PT0gJyEnKSB7XG4gICAgICAgIHRhZ1N0ciA9ICchJyArIHRhZ1N0cjtcbiAgICAgIH0gZWxzZSBpZiAodGFnU3RyLnNsaWNlKDAsIDE4KSA9PT0gJ3RhZzp5YW1sLm9yZywyMDAyOicpIHtcbiAgICAgICAgdGFnU3RyID0gJyEhJyArIHRhZ1N0ci5zbGljZSgxOCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YWdTdHIgPSAnITwnICsgdGFnU3RyICsgJz4nO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZS5kdW1wID0gdGFnU3RyICsgJyAnICsgc3RhdGUuZHVtcDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0RHVwbGljYXRlUmVmZXJlbmNlcyhvYmplY3QsIHN0YXRlKSB7XG4gIHZhciBvYmplY3RzID0gW10sXG4gICAgICBkdXBsaWNhdGVzSW5kZXhlcyA9IFtdLFxuICAgICAgaW5kZXgsXG4gICAgICBsZW5ndGg7XG5cbiAgaW5zcGVjdE5vZGUob2JqZWN0LCBvYmplY3RzLCBkdXBsaWNhdGVzSW5kZXhlcyk7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGR1cGxpY2F0ZXNJbmRleGVzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBzdGF0ZS5kdXBsaWNhdGVzLnB1c2gob2JqZWN0c1tkdXBsaWNhdGVzSW5kZXhlc1tpbmRleF1dKTtcbiAgfVxuICBzdGF0ZS51c2VkRHVwbGljYXRlcyA9IG5ldyBBcnJheShsZW5ndGgpO1xufVxuXG5mdW5jdGlvbiBpbnNwZWN0Tm9kZShvYmplY3QsIG9iamVjdHMsIGR1cGxpY2F0ZXNJbmRleGVzKSB7XG4gIHZhciBvYmplY3RLZXlMaXN0LFxuICAgICAgaW5kZXgsXG4gICAgICBsZW5ndGg7XG5cbiAgaWYgKG9iamVjdCAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0Jykge1xuICAgIGluZGV4ID0gb2JqZWN0cy5pbmRleE9mKG9iamVjdCk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgaWYgKGR1cGxpY2F0ZXNJbmRleGVzLmluZGV4T2YoaW5kZXgpID09PSAtMSkge1xuICAgICAgICBkdXBsaWNhdGVzSW5kZXhlcy5wdXNoKGluZGV4KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb2JqZWN0cy5wdXNoKG9iamVjdCk7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICAgICAgaW5zcGVjdE5vZGUob2JqZWN0W2luZGV4XSwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmplY3RLZXlMaXN0ID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICAgICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0S2V5TGlzdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICAgICAgaW5zcGVjdE5vZGUob2JqZWN0W29iamVjdEtleUxpc3RbaW5kZXhdXSwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGR1bXAkMShpbnB1dCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICB2YXIgc3RhdGUgPSBuZXcgU3RhdGUob3B0aW9ucyk7XG5cbiAgaWYgKCFzdGF0ZS5ub1JlZnMpIGdldER1cGxpY2F0ZVJlZmVyZW5jZXMoaW5wdXQsIHN0YXRlKTtcblxuICB2YXIgdmFsdWUgPSBpbnB1dDtcblxuICBpZiAoc3RhdGUucmVwbGFjZXIpIHtcbiAgICB2YWx1ZSA9IHN0YXRlLnJlcGxhY2VyLmNhbGwoeyAnJzogdmFsdWUgfSwgJycsIHZhbHVlKTtcbiAgfVxuXG4gIGlmICh3cml0ZU5vZGUoc3RhdGUsIDAsIHZhbHVlLCB0cnVlLCB0cnVlKSkgcmV0dXJuIHN0YXRlLmR1bXAgKyAnXFxuJztcblxuICByZXR1cm4gJyc7XG59XG5cbnZhciBkdW1wXzEgPSBkdW1wJDE7XG5cbnZhciBkdW1wZXIgPSB7XG5cdGR1bXA6IGR1bXBfMVxufTtcblxuZnVuY3Rpb24gcmVuYW1lZChmcm9tLCB0bykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24geWFtbC4nICsgZnJvbSArICcgaXMgcmVtb3ZlZCBpbiBqcy15YW1sIDQuICcgK1xuICAgICAgJ1VzZSB5YW1sLicgKyB0byArICcgaW5zdGVhZCwgd2hpY2ggaXMgbm93IHNhZmUgYnkgZGVmYXVsdC4nKTtcbiAgfTtcbn1cblxuXG52YXIgVHlwZSAgICAgICAgICAgICAgICA9IHR5cGU7XG52YXIgU2NoZW1hICAgICAgICAgICAgICA9IHNjaGVtYTtcbnZhciBGQUlMU0FGRV9TQ0hFTUEgICAgID0gZmFpbHNhZmU7XG52YXIgSlNPTl9TQ0hFTUEgICAgICAgICA9IGpzb247XG52YXIgQ09SRV9TQ0hFTUEgICAgICAgICA9IGNvcmU7XG52YXIgREVGQVVMVF9TQ0hFTUEgICAgICA9IF9kZWZhdWx0O1xudmFyIGxvYWQgICAgICAgICAgICAgICAgPSBsb2FkZXIubG9hZDtcbnZhciBsb2FkQWxsICAgICAgICAgICAgID0gbG9hZGVyLmxvYWRBbGw7XG52YXIgZHVtcCAgICAgICAgICAgICAgICA9IGR1bXBlci5kdW1wO1xudmFyIFlBTUxFeGNlcHRpb24gICAgICAgPSBleGNlcHRpb247XG5cbi8vIFJlLWV4cG9ydCBhbGwgdHlwZXMgaW4gY2FzZSB1c2VyIHdhbnRzIHRvIGNyZWF0ZSBjdXN0b20gc2NoZW1hXG52YXIgdHlwZXMgPSB7XG4gIGJpbmFyeTogICAgYmluYXJ5LFxuICBmbG9hdDogICAgIGZsb2F0LFxuICBtYXA6ICAgICAgIG1hcCxcbiAgbnVsbDogICAgICBfbnVsbCxcbiAgcGFpcnM6ICAgICBwYWlycyxcbiAgc2V0OiAgICAgICBzZXQsXG4gIHRpbWVzdGFtcDogdGltZXN0YW1wLFxuICBib29sOiAgICAgIGJvb2wsXG4gIGludDogICAgICAgaW50LFxuICBtZXJnZTogICAgIG1lcmdlLFxuICBvbWFwOiAgICAgIG9tYXAsXG4gIHNlcTogICAgICAgc2VxLFxuICBzdHI6ICAgICAgIHN0clxufTtcblxuLy8gUmVtb3ZlZCBmdW5jdGlvbnMgZnJvbSBKUy1ZQU1MIDMuMC54XG52YXIgc2FmZUxvYWQgICAgICAgICAgICA9IHJlbmFtZWQoJ3NhZmVMb2FkJywgJ2xvYWQnKTtcbnZhciBzYWZlTG9hZEFsbCAgICAgICAgID0gcmVuYW1lZCgnc2FmZUxvYWRBbGwnLCAnbG9hZEFsbCcpO1xudmFyIHNhZmVEdW1wICAgICAgICAgICAgPSByZW5hbWVkKCdzYWZlRHVtcCcsICdkdW1wJyk7XG5cbnZhciBqc1lhbWwgPSB7XG5cdFR5cGU6IFR5cGUsXG5cdFNjaGVtYTogU2NoZW1hLFxuXHRGQUlMU0FGRV9TQ0hFTUE6IEZBSUxTQUZFX1NDSEVNQSxcblx0SlNPTl9TQ0hFTUE6IEpTT05fU0NIRU1BLFxuXHRDT1JFX1NDSEVNQTogQ09SRV9TQ0hFTUEsXG5cdERFRkFVTFRfU0NIRU1BOiBERUZBVUxUX1NDSEVNQSxcblx0bG9hZDogbG9hZCxcblx0bG9hZEFsbDogbG9hZEFsbCxcblx0ZHVtcDogZHVtcCxcblx0WUFNTEV4Y2VwdGlvbjogWUFNTEV4Y2VwdGlvbixcblx0dHlwZXM6IHR5cGVzLFxuXHRzYWZlTG9hZDogc2FmZUxvYWQsXG5cdHNhZmVMb2FkQWxsOiBzYWZlTG9hZEFsbCxcblx0c2FmZUR1bXA6IHNhZmVEdW1wXG59O1xuXG5leHBvcnQgZGVmYXVsdCBqc1lhbWw7XG5leHBvcnQgeyBDT1JFX1NDSEVNQSwgREVGQVVMVF9TQ0hFTUEsIEZBSUxTQUZFX1NDSEVNQSwgSlNPTl9TQ0hFTUEsIFNjaGVtYSwgVHlwZSwgWUFNTEV4Y2VwdGlvbiwgZHVtcCwgbG9hZCwgbG9hZEFsbCwgc2FmZUR1bXAsIHNhZmVMb2FkLCBzYWZlTG9hZEFsbCwgdHlwZXMgfTtcbiIsImV4cG9ydCBjb25zdCBZQU1MID0gKGFwcCkgPT4gYFxubmFtZTogQ0lcblxuZW52OlxuICBERUJVRzogJ25hcGk6KidcbiAgQVBQX05BTUU6ICcke2FwcH0nXG4gIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVDogJzEwLjEzJ1xuXG5wZXJtaXNzaW9uczpcbiAgY29udGVudHM6IHdyaXRlXG4gIGlkLXRva2VuOiB3cml0ZVxuXG5vbjpcbiAgcHVzaDpcbiAgICBicmFuY2hlczpcbiAgICAgIC0gbWFpblxuICAgIHRhZ3MtaWdub3JlOlxuICAgICAgLSAnKionXG4gICAgcGF0aHMtaWdub3JlOlxuICAgICAgLSAnKiovKi5tZCdcbiAgICAgIC0gJ0xJQ0VOU0UnXG4gICAgICAtICcqKi8qLmdpdGlnbm9yZSdcbiAgICAgIC0gJy5lZGl0b3Jjb25maWcnXG4gICAgICAtICdkb2NzLyoqJ1xuICBwdWxsX3JlcXVlc3Q6XG5cbmpvYnM6XG4gIGJ1aWxkOlxuXG4gICAgc3RyYXRlZ3k6XG4gICAgICBmYWlsLWZhc3Q6IGZhbHNlXG4gICAgICBtYXRyaXg6XG4gICAgICAgIHNldHRpbmdzOlxuICAgICAgICAgIC0gaG9zdDogbWFjb3MtbGF0ZXN0XG4gICAgICAgICAgICB0YXJnZXQ6ICd4ODZfNjQtYXBwbGUtZGFyd2luJ1xuICAgICAgICAgICAgYnVpbGQ6IHlhcm4gYnVpbGQgLS10YXJnZXQgeDg2XzY0LWFwcGxlLWRhcndpblxuICAgICAgICAgIC0gaG9zdDogd2luZG93cy1sYXRlc3RcbiAgICAgICAgICAgIGJ1aWxkOiB5YXJuIGJ1aWxkIC0tdGFyZ2V0IHg4Nl82NC1wYy13aW5kb3dzLW1zdmNcbiAgICAgICAgICAgIHRhcmdldDogJ3g4Nl82NC1wYy13aW5kb3dzLW1zdmMnXG4gICAgICAgICAgLSBob3N0OiB3aW5kb3dzLWxhdGVzdFxuICAgICAgICAgICAgYnVpbGQ6IHxcbiAgICAgICAgICAgICAgeWFybiBidWlsZCAtLXRhcmdldCBpNjg2LXBjLXdpbmRvd3MtbXN2Y1xuICAgICAgICAgICAgICB5YXJuIHRlc3RcbiAgICAgICAgICAgIHRhcmdldDogJ2k2ODYtcGMtd2luZG93cy1tc3ZjJ1xuICAgICAgICAgIC0gaG9zdDogdWJ1bnR1LWxhdGVzdFxuICAgICAgICAgICAgdGFyZ2V0OiAneDg2XzY0LXVua25vd24tbGludXgtZ251J1xuICAgICAgICAgICAgZG9ja2VyOiBnaGNyLmlvL25hcGktcnMvbmFwaS1ycy9ub2RlanMtcnVzdDpsdHMtZGViaWFuXG4gICAgICAgICAgICBidWlsZDogeWFybiBidWlsZCAtLXRhcmdldCB4ODZfNjQtdW5rbm93bi1saW51eC1nbnVcbiAgICAgICAgICAtIGhvc3Q6IHVidW50dS1sYXRlc3RcbiAgICAgICAgICAgIHRhcmdldDogJ3g4Nl82NC11bmtub3duLWxpbnV4LW11c2wnXG4gICAgICAgICAgICBkb2NrZXI6IGdoY3IuaW8vbmFwaS1ycy9uYXBpLXJzL25vZGVqcy1ydXN0Omx0cy1hbHBpbmVcbiAgICAgICAgICAgIGJ1aWxkOiB5YXJuIGJ1aWxkIC0tdGFyZ2V0IHg4Nl82NC11bmtub3duLWxpbnV4LW11c2xcbiAgICAgICAgICAtIGhvc3Q6IG1hY29zLWxhdGVzdFxuICAgICAgICAgICAgdGFyZ2V0OiAnYWFyY2g2NC1hcHBsZS1kYXJ3aW4nXG4gICAgICAgICAgICBidWlsZDogeWFybiBidWlsZCAtLXRhcmdldCBhYXJjaDY0LWFwcGxlLWRhcndpblxuICAgICAgICAgIC0gaG9zdDogdWJ1bnR1LWxhdGVzdFxuICAgICAgICAgICAgdGFyZ2V0OiAnYWFyY2g2NC11bmtub3duLWxpbnV4LWdudSdcbiAgICAgICAgICAgIGRvY2tlcjogZ2hjci5pby9uYXBpLXJzL25hcGktcnMvbm9kZWpzLXJ1c3Q6bHRzLWRlYmlhbi1hYXJjaDY0XG4gICAgICAgICAgICBidWlsZDogeWFybiBidWlsZCAtLXRhcmdldCBhYXJjaDY0LXVua25vd24tbGludXgtZ251XG4gICAgICAgICAgLSBob3N0OiB1YnVudHUtbGF0ZXN0XG4gICAgICAgICAgICB0YXJnZXQ6ICdhcm12Ny11bmtub3duLWxpbnV4LWdudWVhYmloZidcbiAgICAgICAgICAgIHNldHVwOiB8XG4gICAgICAgICAgICAgIHN1ZG8gYXB0LWdldCB1cGRhdGVcbiAgICAgICAgICAgICAgc3VkbyBhcHQtZ2V0IGluc3RhbGwgZ2NjLWFybS1saW51eC1nbnVlYWJpaGYgLXlcbiAgICAgICAgICAgIGJ1aWxkOiB5YXJuIGJ1aWxkIC0tdGFyZ2V0IGFybXY3LXVua25vd24tbGludXgtZ251ZWFiaWhmXG4gICAgICAgICAgLSBob3N0OiB1YnVudHUtbGF0ZXN0XG4gICAgICAgICAgICB0YXJnZXQ6ICdhcm12Ny11bmtub3duLWxpbnV4LW11c2xlYWJpaGYnXG4gICAgICAgICAgICBidWlsZDogeWFybiBidWlsZCAtLXRhcmdldCBhcm12Ny11bmtub3duLWxpbnV4LW11c2xlYWJpaGZcbiAgICAgICAgICAtIGhvc3Q6IHVidW50dS1sYXRlc3RcbiAgICAgICAgICAgIHRhcmdldDogJ2FhcmNoNjQtbGludXgtYW5kcm9pZCdcbiAgICAgICAgICAgIGJ1aWxkOiB5YXJuIGJ1aWxkIC0tdGFyZ2V0IGFhcmNoNjQtbGludXgtYW5kcm9pZFxuICAgICAgICAgIC0gaG9zdDogdWJ1bnR1LWxhdGVzdFxuICAgICAgICAgICAgdGFyZ2V0OiAnYXJtdjctbGludXgtYW5kcm9pZGVhYmknXG4gICAgICAgICAgICBidWlsZDogeWFybiBidWlsZCAtLXRhcmdldCBhcm12Ny1saW51eC1hbmRyb2lkZWFiaVxuICAgICAgICAgIC0gaG9zdDogdWJ1bnR1LWxhdGVzdFxuICAgICAgICAgICAgdGFyZ2V0OiAnYWFyY2g2NC11bmtub3duLWxpbnV4LW11c2wnXG4gICAgICAgICAgICBkb2NrZXI6IGdoY3IuaW8vbmFwaS1ycy9uYXBpLXJzL25vZGVqcy1ydXN0Omx0cy1hbHBpbmVcbiAgICAgICAgICAgIGJ1aWxkOiA+LVxuICAgICAgICAgICAgICBzZXQgLWUgJiZcXG5cbiAgICAgICAgICAgICAgcnVzdHVwIHRhcmdldCBhZGQgYWFyY2g2NC11bmtub3duLWxpbnV4LW11c2wgJiZcXG5cbiAgICAgICAgICAgICAgeWFybiBidWlsZCAtLXRhcmdldCBhYXJjaDY0LXVua25vd24tbGludXgtbXVzbFxuICAgICAgICAgIC0gaG9zdDogd2luZG93cy1sYXRlc3RcbiAgICAgICAgICAgIHRhcmdldDogJ2FhcmNoNjQtcGMtd2luZG93cy1tc3ZjJ1xuICAgICAgICAgICAgYnVpbGQ6IHlhcm4gYnVpbGQgLS10YXJnZXQgYWFyY2g2NC1wYy13aW5kb3dzLW1zdmNcbiAgICAgICAgICAtIGhvc3Q6IHVidW50dS1sYXRlc3RcbiAgICAgICAgICAgIHRhcmdldDogJ3Jpc2N2NjRnYy11bmtub3duLWxpbnV4LWdudSdcbiAgICAgICAgICAgIHNldHVwOiB8XG4gICAgICAgICAgICAgIHN1ZG8gYXB0LWdldCB1cGRhdGVcbiAgICAgICAgICAgICAgc3VkbyBhcHQtZ2V0IGluc3RhbGwgZ2NjLXJpc2N2NjQtbGludXgtZ251IC15XG4gICAgICAgICAgICBidWlsZDogeWFybiBidWlsZCAtLXRhcmdldCByaXNjdjY0Z2MtdW5rbm93bi1saW51eC1nbnVcblxuICAgIG5hbWU6IHN0YWJsZSAtIFxcJHt7IG1hdHJpeC5zZXR0aW5ncy50YXJnZXQgfX0gLSBub2RlQDIwXG4gICAgcnVucy1vbjogXFwke3sgbWF0cml4LnNldHRpbmdzLmhvc3QgfX1cblxuICAgIHN0ZXBzOlxuICAgICAgLSB1c2VzOiBhY3Rpb25zL2NoZWNrb3V0QHY0XG5cbiAgICAgIC0gbmFtZTogU2V0dXAgbm9kZVxuICAgICAgICB1c2VzOiBhY3Rpb25zL3NldHVwLW5vZGVAdjRcbiAgICAgICAgaWY6IFxcJHt7ICFtYXRyaXguc2V0dGluZ3MuZG9ja2VyIH19XG4gICAgICAgIHdpdGg6XG4gICAgICAgICAgbm9kZS12ZXJzaW9uOiAyMFxuICAgICAgICAgIGNhY2hlOiB5YXJuXG5cbiAgICAgIC0gbmFtZTogSW5zdGFsbFxuICAgICAgICB1c2VzOiBkdG9sbmF5L3J1c3QtdG9vbGNoYWluQHN0YWJsZVxuICAgICAgICBpZjogXFwke3sgIW1hdHJpeC5zZXR0aW5ncy5kb2NrZXIgfX1cbiAgICAgICAgd2l0aDpcbiAgICAgICAgICB0b29sY2hhaW46IHN0YWJsZVxuICAgICAgICAgIHRhcmdldHM6IFxcJHt7IG1hdHJpeC5zZXR0aW5ncy50YXJnZXQgfX1cblxuICAgICAgLSBuYW1lOiBDYWNoZSBjYXJnb1xuICAgICAgICB1c2VzOiBhY3Rpb25zL2NhY2hlQHY0XG4gICAgICAgIHdpdGg6XG4gICAgICAgICAgcGF0aDogfFxuICAgICAgICAgICAgfi8uY2FyZ28vcmVnaXN0cnkvaW5kZXgvXG4gICAgICAgICAgICB+Ly5jYXJnby9yZWdpc3RyeS9jYWNoZS9cbiAgICAgICAgICAgIH4vLmNhcmdvL2dpdC9kYi9cbiAgICAgICAgICAgIC5jYXJnby1jYWNoZVxuICAgICAgICAgICAgdGFyZ2V0L1xuICAgICAgICAgIGtleTogXFwke3sgbWF0cml4LnNldHRpbmdzLnRhcmdldCB9fS1jYXJnby1cXCR7eyBtYXRyaXguc2V0dGluZ3MuaG9zdCB9fVxuXG4gICAgICAtIHVzZXM6IGdvdG8tYnVzLXN0b3Avc2V0dXAtemlnQHYyXG4gICAgICAgIGlmOiBcXCR7eyBtYXRyaXguc2V0dGluZ3MudGFyZ2V0ID09ICdhcm12Ny11bmtub3duLWxpbnV4LWdudWVhYmloZicgfHwgbWF0cml4LnNldHRpbmdzLnRhcmdldCA9PSAnYXJtdjctdW5rbm93bi1saW51eC1tdXNsZWFiaWhmJyB9fVxuICAgICAgICB3aXRoOlxuICAgICAgICAgIHZlcnNpb246IDAuMTMuMFxuXG4gICAgICAtIG5hbWU6IFNldHVwIHRvb2xjaGFpblxuICAgICAgICBydW46IFxcJHt7IG1hdHJpeC5zZXR0aW5ncy5zZXR1cCB9fVxuICAgICAgICBpZjogXFwke3sgbWF0cml4LnNldHRpbmdzLnNldHVwIH19XG4gICAgICAgIHNoZWxsOiBiYXNoXG5cbiAgICAgIC0gbmFtZTogU2V0dXAgbm9kZSB4ODZcbiAgICAgICAgaWY6IG1hdHJpeC5zZXR0aW5ncy50YXJnZXQgPT0gJ2k2ODYtcGMtd2luZG93cy1tc3ZjJ1xuICAgICAgICBydW46IHlhcm4gY29uZmlnIHNldCBzdXBwb3J0ZWRBcmNoaXRlY3R1cmVzLmNwdSBcImlhMzJcIlxuICAgICAgICBzaGVsbDogYmFzaFxuXG4gICAgICAtIG5hbWU6ICdJbnN0YWxsIGRlcGVuZGVuY2llcydcbiAgICAgICAgcnVuOiB5YXJuIGluc3RhbGxcblxuICAgICAgLSBuYW1lOiBTZXR1cCBub2RlIHg4NlxuICAgICAgICB1c2VzOiBhY3Rpb25zL3NldHVwLW5vZGVAdjRcbiAgICAgICAgaWY6IG1hdHJpeC5zZXR0aW5ncy50YXJnZXQgPT0gJ2k2ODYtcGMtd2luZG93cy1tc3ZjJ1xuICAgICAgICB3aXRoOlxuICAgICAgICAgIG5vZGUtdmVyc2lvbjogMjBcbiAgICAgICAgICBjYWNoZTogeWFyblxuICAgICAgICAgIGFyY2hpdGVjdHVyZTogeDg2XG5cbiAgICAgIC0gbmFtZTogQnVpbGQgaW4gZG9ja2VyXG4gICAgICAgIHVzZXM6IGFkZG5hYi9kb2NrZXItcnVuLWFjdGlvbkB2M1xuICAgICAgICBpZjogXFwke3sgbWF0cml4LnNldHRpbmdzLmRvY2tlciB9fVxuICAgICAgICB3aXRoOlxuICAgICAgICAgIGltYWdlOiBcXCR7eyBtYXRyaXguc2V0dGluZ3MuZG9ja2VyIH19XG4gICAgICAgICAgb3B0aW9uczogLS11c2VyIDA6MCAtdiBcXCR7eyBnaXRodWIud29ya3NwYWNlIH19Ly5jYXJnby1jYWNoZS9naXQvZGI6L3Vzci9sb2NhbC9jYXJnby9naXQvZGIgLXYgXFwke3sgZ2l0aHViLndvcmtzcGFjZSB9fS8uY2FyZ28vcmVnaXN0cnkvY2FjaGU6L3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9jYWNoZSAtdiBcXCR7eyBnaXRodWIud29ya3NwYWNlIH19Ly5jYXJnby9yZWdpc3RyeS9pbmRleDovdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L2luZGV4IC12IFxcJHt7IGdpdGh1Yi53b3Jrc3BhY2UgfX06L2J1aWxkIC13IC9idWlsZFxuICAgICAgICAgIHJ1bjogXFwke3sgbWF0cml4LnNldHRpbmdzLmJ1aWxkIH19XG5cbiAgICAgIC0gbmFtZTogJ0J1aWxkJ1xuICAgICAgICBydW46IFxcJHt7IG1hdHJpeC5zZXR0aW5ncy5idWlsZCB9fVxuICAgICAgICBpZjogXFwke3sgIW1hdHJpeC5zZXR0aW5ncy5kb2NrZXIgfX1cbiAgICAgICAgc2hlbGw6IGJhc2hcblxuICAgICAgLSBuYW1lOiBVcGxvYWQgYXJ0aWZhY3RcbiAgICAgICAgdXNlczogYWN0aW9ucy91cGxvYWQtYXJ0aWZhY3RAdjRcbiAgICAgICAgd2l0aDpcbiAgICAgICAgICBuYW1lOiBiaW5kaW5ncy1cXCR7eyBtYXRyaXguc2V0dGluZ3MudGFyZ2V0IH19XG4gICAgICAgICAgcGF0aDogXFwke3sgZW52LkFQUF9OQU1FIH19Lioubm9kZVxuICAgICAgICAgIGlmLW5vLWZpbGVzLWZvdW5kOiBlcnJvclxuXG4gIGJ1aWxkLWZyZWVic2Q6XG4gICAgcnVucy1vbjogbWFjb3MtMTNcbiAgICBuYW1lOiBCdWlsZCBGcmVlQlNEXG4gICAgc3RlcHM6XG4gICAgICAtIHVzZXM6IGFjdGlvbnMvY2hlY2tvdXRAdjRcbiAgICAgIC0gbmFtZTogQnVpbGRcbiAgICAgICAgaWQ6IGJ1aWxkXG4gICAgICAgIHVzZXM6IGNyb3NzLXBsYXRmb3JtLWFjdGlvbnMvYWN0aW9uQHYwLjI0LjBcbiAgICAgICAgZW52OlxuICAgICAgICAgIERFQlVHOiAnbmFwaToqJ1xuICAgICAgICAgIFJVU1RVUF9JT19USFJFQURTOiAxXG4gICAgICAgIHdpdGg6XG4gICAgICAgICAgb3BlcmF0aW5nX3N5c3RlbTogZnJlZWJzZFxuICAgICAgICAgIHZlcnNpb246ICcxMy4yJ1xuICAgICAgICAgIG1lbW9yeTogOEdcbiAgICAgICAgICBjcHVfY291bnQ6IDNcbiAgICAgICAgICBlbnZpcm9ubWVudF92YXJpYWJsZXM6ICdERUJVRyBSVVNUVVBfSU9fVEhSRUFEUydcbiAgICAgICAgICBzaGVsbDogYmFzaFxuICAgICAgICAgIHJ1bjogfFxuICAgICAgICAgICAgc3VkbyBwa2cgaW5zdGFsbCAteSAtZiBjdXJsIG5vZGUgbGlibmdodHRwMiBucG1cbiAgICAgICAgICAgIHN1ZG8gbnBtIGluc3RhbGwgLWcgeWFybiAtLWlnbm9yZS1zY3JpcHRzXG4gICAgICAgICAgICBjdXJsIGh0dHBzOi8vc2gucnVzdHVwLnJzIC1zU2YgLS1vdXRwdXQgcnVzdHVwLnNoXG4gICAgICAgICAgICBzaCBydXN0dXAuc2ggLXkgLS1wcm9maWxlIG1pbmltYWwgLS1kZWZhdWx0LXRvb2xjaGFpbiBzdGFibGVcbiAgICAgICAgICAgIHNvdXJjZSBcIiRIT01FLy5jYXJnby9lbnZcIlxuICAgICAgICAgICAgZWNobyBcIn5+fn4gcnVzdGMgLS12ZXJzaW9uIH5+fn5cIlxuICAgICAgICAgICAgcnVzdGMgLS12ZXJzaW9uXG4gICAgICAgICAgICBlY2hvIFwifn5+fiBub2RlIC12IH5+fn5cIlxuICAgICAgICAgICAgbm9kZSAtdlxuICAgICAgICAgICAgZWNobyBcIn5+fn4geWFybiAtLXZlcnNpb24gfn5+flwiXG4gICAgICAgICAgICB5YXJuIC0tdmVyc2lvblxuICAgICAgICAgICAgcHdkXG4gICAgICAgICAgICBscyAtbGFoXG4gICAgICAgICAgICB3aG9hbWlcbiAgICAgICAgICAgIGVudlxuICAgICAgICAgICAgZnJlZWJzZC12ZXJzaW9uXG4gICAgICAgICAgICB5YXJuIGluc3RhbGxcbiAgICAgICAgICAgIHlhcm4gYnVpbGRcbiAgICAgICAgICAgIHlhcm4gdGVzdFxuICAgICAgICAgICAgcm0gLXJmIG5vZGVfbW9kdWxlc1xuICAgICAgICAgICAgcm0gLXJmIHRhcmdldFxuICAgICAgICAgICAgcm0gLXJmIC55YXJuL2NhY2hlXG4gICAgICAtIG5hbWU6IFVwbG9hZCBhcnRpZmFjdFxuICAgICAgICB1c2VzOiBhY3Rpb25zL3VwbG9hZC1hcnRpZmFjdEB2NFxuICAgICAgICB3aXRoOlxuICAgICAgICAgIG5hbWU6IGJpbmRpbmdzLWZyZWVic2RcbiAgICAgICAgICBwYXRoOiBcXCR7eyBlbnYuQVBQX05BTUUgfX0uKi5ub2RlXG4gICAgICAgICAgaWYtbm8tZmlsZXMtZm91bmQ6IGVycm9yXG5cbiAgdGVzdC1tYWNPUy13aW5kb3dzLWJpbmRpbmc6XG4gICAgbmFtZTogVGVzdCBiaW5kaW5ncyBvbiBcXCR7eyBtYXRyaXguc2V0dGluZ3MudGFyZ2V0IH19IC0gbm9kZUBcXCR7eyBtYXRyaXgubm9kZSB9fVxuICAgIG5lZWRzOlxuICAgICAgLSBidWlsZFxuICAgIHN0cmF0ZWd5OlxuICAgICAgZmFpbC1mYXN0OiBmYWxzZVxuICAgICAgbWF0cml4OlxuICAgICAgICBzZXR0aW5nczpcbiAgICAgICAgICAtIGhvc3Q6IG1hY29zLWxhdGVzdFxuICAgICAgICAgICAgdGFyZ2V0OiAneDg2XzY0LWFwcGxlLWRhcndpbidcbiAgICAgICAgICAtIGhvc3Q6IHdpbmRvd3MtbGF0ZXN0XG4gICAgICAgICAgICB0YXJnZXQ6ICd4ODZfNjQtcGMtd2luZG93cy1tc3ZjJ1xuICAgICAgICBub2RlOiBbJzE4JywgJzIwJ11cbiAgICBydW5zLW9uOiBcXCR7eyBtYXRyaXguc2V0dGluZ3MuaG9zdCB9fVxuXG4gICAgc3RlcHM6XG4gICAgICAtIHVzZXM6IGFjdGlvbnMvY2hlY2tvdXRAdjRcblxuICAgICAgLSBuYW1lOiBTZXR1cCBub2RlXG4gICAgICAgIHVzZXM6IGFjdGlvbnMvc2V0dXAtbm9kZUB2NFxuICAgICAgICB3aXRoOlxuICAgICAgICAgIG5vZGUtdmVyc2lvbjogXFwke3sgbWF0cml4Lm5vZGUgfX1cbiAgICAgICAgICBjYWNoZTogJ3lhcm4nXG4gICAgICAgICAgYXJjaGl0ZWN0dXJlOiB4NjRcblxuICAgICAgLSBuYW1lOiAnSW5zdGFsbCBkZXBlbmRlbmNpZXMnXG4gICAgICAgIHJ1bjogeWFybiBpbnN0YWxsXG5cbiAgICAgIC0gbmFtZTogRG93bmxvYWQgYXJ0aWZhY3RzXG4gICAgICAgIHVzZXM6IGFjdGlvbnMvZG93bmxvYWQtYXJ0aWZhY3RAdjRcbiAgICAgICAgd2l0aDpcbiAgICAgICAgICBuYW1lOiBiaW5kaW5ncy1cXCR7eyBtYXRyaXguc2V0dGluZ3MudGFyZ2V0IH19XG4gICAgICAgICAgcGF0aDogLlxuXG4gICAgICAtIG5hbWU6IExpc3QgcGFja2FnZXNcbiAgICAgICAgcnVuOiBscyAtUiAuXG4gICAgICAgIHNoZWxsOiBiYXNoXG5cbiAgICAgIC0gbmFtZTogVGVzdCBiaW5kaW5nc1xuICAgICAgICBydW46IHlhcm4gdGVzdFxuXG4gIHRlc3QtbGludXgteDY0LWdudS1iaW5kaW5nOlxuICAgIG5hbWU6IFRlc3QgYmluZGluZ3Mgb24gTGludXgteDY0LWdudSAtIG5vZGVAXFwke3sgbWF0cml4Lm5vZGUgfX1cbiAgICBuZWVkczpcbiAgICAgIC0gYnVpbGRcbiAgICBzdHJhdGVneTpcbiAgICAgIGZhaWwtZmFzdDogZmFsc2VcbiAgICAgIG1hdHJpeDpcbiAgICAgICAgbm9kZTogWycxOCcsICcyMCddXG4gICAgcnVucy1vbjogdWJ1bnR1LWxhdGVzdFxuXG4gICAgc3RlcHM6XG4gICAgICAtIHVzZXM6IGFjdGlvbnMvY2hlY2tvdXRAdjRcblxuICAgICAgLSBuYW1lOiBTZXR1cCBub2RlXG4gICAgICAgIHVzZXM6IGFjdGlvbnMvc2V0dXAtbm9kZUB2NFxuICAgICAgICB3aXRoOlxuICAgICAgICAgIG5vZGUtdmVyc2lvbjogXFwke3sgbWF0cml4Lm5vZGUgfX1cbiAgICAgICAgICBjYWNoZTogJ3lhcm4nXG5cbiAgICAgIC0gbmFtZTogJ0luc3RhbGwgZGVwZW5kZW5jaWVzJ1xuICAgICAgICBydW46IHlhcm4gaW5zdGFsbFxuXG4gICAgICAtIG5hbWU6IERvd25sb2FkIGFydGlmYWN0c1xuICAgICAgICB1c2VzOiBhY3Rpb25zL2Rvd25sb2FkLWFydGlmYWN0QHY0XG4gICAgICAgIHdpdGg6XG4gICAgICAgICAgbmFtZTogYmluZGluZ3MteDg2XzY0LXVua25vd24tbGludXgtZ251XG4gICAgICAgICAgcGF0aDogLlxuXG4gICAgICAtIG5hbWU6IExpc3QgcGFja2FnZXNcbiAgICAgICAgcnVuOiBscyAtUiAuXG4gICAgICAgIHNoZWxsOiBiYXNoXG5cbiAgICAgIC0gbmFtZTogVGVzdCBiaW5kaW5nc1xuICAgICAgICBydW46IGRvY2tlciBydW4gLS1ybSAtdiAkKHB3ZCk6L2J1aWxkIC13IC9idWlsZCBub2RlOlxcJHt7IG1hdHJpeC5ub2RlIH19LXNsaW0geWFybiB0ZXN0XG5cbiAgdGVzdC1saW51eC14NjQtbXVzbC1iaW5kaW5nOlxuICAgIG5hbWU6IFRlc3QgYmluZGluZ3Mgb24geDg2XzY0LXVua25vd24tbGludXgtbXVzbCAtIG5vZGVAXFwke3sgbWF0cml4Lm5vZGUgfX1cbiAgICBuZWVkczpcbiAgICAgIC0gYnVpbGRcbiAgICBzdHJhdGVneTpcbiAgICAgIGZhaWwtZmFzdDogZmFsc2VcbiAgICAgIG1hdHJpeDpcbiAgICAgICAgbm9kZTogWycxOCcsICcyMCddXG4gICAgcnVucy1vbjogdWJ1bnR1LWxhdGVzdFxuXG4gICAgc3RlcHM6XG4gICAgICAtIHVzZXM6IGFjdGlvbnMvY2hlY2tvdXRAdjRcblxuICAgICAgLSBuYW1lOiBTZXR1cCBub2RlXG4gICAgICAgIHVzZXM6IGFjdGlvbnMvc2V0dXAtbm9kZUB2NFxuICAgICAgICB3aXRoOlxuICAgICAgICAgIG5vZGUtdmVyc2lvbjogXFwke3sgbWF0cml4Lm5vZGUgfX1cbiAgICAgICAgICBjYWNoZTogJ3lhcm4nXG5cbiAgICAgIC0gbmFtZTogJ0luc3RhbGwgZGVwZW5kZW5jaWVzJ1xuICAgICAgICBydW46IHxcbiAgICAgICAgICB5YXJuIGNvbmZpZyBzZXQgc3VwcG9ydGVkQXJjaGl0ZWN0dXJlcy5saWJjIFwibXVzbFwiXG4gICAgICAgICAgeWFybiBpbnN0YWxsXG5cbiAgICAgIC0gbmFtZTogRG93bmxvYWQgYXJ0aWZhY3RzXG4gICAgICAgIHVzZXM6IGFjdGlvbnMvZG93bmxvYWQtYXJ0aWZhY3RAdjRcbiAgICAgICAgd2l0aDpcbiAgICAgICAgICBuYW1lOiBiaW5kaW5ncy14ODZfNjQtdW5rbm93bi1saW51eC1tdXNsXG4gICAgICAgICAgcGF0aDogLlxuXG4gICAgICAtIG5hbWU6IExpc3QgcGFja2FnZXNcbiAgICAgICAgcnVuOiBscyAtUiAuXG4gICAgICAgIHNoZWxsOiBiYXNoXG5cbiAgICAgIC0gbmFtZTogVGVzdCBiaW5kaW5nc1xuICAgICAgICBydW46IGRvY2tlciBydW4gLS1ybSAtdiAkKHB3ZCk6L2J1aWxkIC13IC9idWlsZCBub2RlOlxcJHt7IG1hdHJpeC5ub2RlIH19LWFscGluZSB5YXJuIHRlc3RcblxuICB0ZXN0LWxpbnV4LWFhcmNoNjQtZ251LWJpbmRpbmc6XG4gICAgbmFtZTogVGVzdCBiaW5kaW5ncyBvbiBhYXJjaDY0LXVua25vd24tbGludXgtZ251IC0gbm9kZUBcXCR7eyBtYXRyaXgubm9kZSB9fVxuICAgIG5lZWRzOlxuICAgICAgLSBidWlsZFxuICAgIHN0cmF0ZWd5OlxuICAgICAgZmFpbC1mYXN0OiBmYWxzZVxuICAgICAgbWF0cml4OlxuICAgICAgICBub2RlOiBbJzE4JywgJzIwJ11cbiAgICBydW5zLW9uOiB1YnVudHUtbGF0ZXN0XG5cbiAgICBzdGVwczpcbiAgICAgIC0gdXNlczogYWN0aW9ucy9jaGVja291dEB2NFxuXG4gICAgICAtIG5hbWU6IERvd25sb2FkIGFydGlmYWN0c1xuICAgICAgICB1c2VzOiBhY3Rpb25zL2Rvd25sb2FkLWFydGlmYWN0QHY0XG4gICAgICAgIHdpdGg6XG4gICAgICAgICAgbmFtZTogYmluZGluZ3MtYWFyY2g2NC11bmtub3duLWxpbnV4LWdudVxuICAgICAgICAgIHBhdGg6IC5cblxuICAgICAgLSBuYW1lOiBMaXN0IHBhY2thZ2VzXG4gICAgICAgIHJ1bjogbHMgLVIgLlxuICAgICAgICBzaGVsbDogYmFzaFxuXG4gICAgICAtIG5hbWU6IEluc3RhbGwgZGVwZW5kZW5jaWVzXG4gICAgICAgIHJ1bjogfFxuICAgICAgICAgIHlhcm4gY29uZmlnIHNldCBzdXBwb3J0ZWRBcmNoaXRlY3R1cmVzLmNwdSBcImFybTY0XCJcbiAgICAgICAgICB5YXJuIGNvbmZpZyBzZXQgc3VwcG9ydGVkQXJjaGl0ZWN0dXJlcy5saWJjIFwiZ2xpYmNcIlxuICAgICAgICAgIHlhcm4gaW5zdGFsbFxuXG4gICAgICAtIG5hbWU6IFNldCB1cCBRRU1VXG4gICAgICAgIHVzZXM6IGRvY2tlci9zZXR1cC1xZW11LWFjdGlvbkB2M1xuICAgICAgICB3aXRoOlxuICAgICAgICAgIHBsYXRmb3JtczogYXJtNjRcbiAgICAgIC0gcnVuOiBkb2NrZXIgcnVuIC0tcm0gLS1wcml2aWxlZ2VkIG11bHRpYXJjaC9xZW11LXVzZXItc3RhdGljIC0tcmVzZXQgLXAgeWVzXG5cbiAgICAgIC0gbmFtZTogU2V0dXAgYW5kIHJ1biB0ZXN0c1xuICAgICAgICB1c2VzOiBhZGRuYWIvZG9ja2VyLXJ1bi1hY3Rpb25AdjNcbiAgICAgICAgd2l0aDpcbiAgICAgICAgICBpbWFnZTogbm9kZTpcXCR7eyBtYXRyaXgubm9kZSB9fS1zbGltXG4gICAgICAgICAgb3B0aW9uczogLS1wbGF0Zm9ybSBsaW51eC9hcm02NCAtdiBcXCR7eyBnaXRodWIud29ya3NwYWNlIH19Oi9idWlsZCAtdyAvYnVpbGRcbiAgICAgICAgICBydW46IHxcbiAgICAgICAgICAgIHNldCAtZVxuICAgICAgICAgICAgeWFybiB0ZXN0XG4gICAgICAgICAgICBscyAtbGFcblxuICB0ZXN0LWxpbnV4LWFhcmNoNjQtbXVzbC1iaW5kaW5nOlxuICAgIG5hbWU6IFRlc3QgYmluZGluZ3Mgb24gYWFyY2g2NC11bmtub3duLWxpbnV4LW11c2wgLSBub2RlQFxcJHt7IG1hdHJpeC5ub2RlIH19XG4gICAgbmVlZHM6XG4gICAgICAtIGJ1aWxkXG5cbiAgICBydW5zLW9uOiB1YnVudHUtbGF0ZXN0XG5cbiAgICBzdGVwczpcbiAgICAgIC0gdXNlczogYWN0aW9ucy9jaGVja291dEB2NFxuXG4gICAgICAtIG5hbWU6IERvd25sb2FkIGFydGlmYWN0c1xuICAgICAgICB1c2VzOiBhY3Rpb25zL2Rvd25sb2FkLWFydGlmYWN0QHY0XG4gICAgICAgIHdpdGg6XG4gICAgICAgICAgbmFtZTogYmluZGluZ3MtYWFyY2g2NC11bmtub3duLWxpbnV4LW11c2xcbiAgICAgICAgICBwYXRoOiAuXG5cbiAgICAgIC0gbmFtZTogTGlzdCBwYWNrYWdlc1xuICAgICAgICBydW46IGxzIC1SIC5cbiAgICAgICAgc2hlbGw6IGJhc2hcblxuICAgICAgLSBuYW1lOiBJbnN0YWxsIGRlcGVuZGVuY2llc1xuICAgICAgICBydW46IHxcbiAgICAgICAgICB5YXJuIGNvbmZpZyBzZXQgc3VwcG9ydGVkQXJjaGl0ZWN0dXJlcy5jcHUgXCJhcm02NFwiXG4gICAgICAgICAgeWFybiBjb25maWcgc2V0IHN1cHBvcnRlZEFyY2hpdGVjdHVyZXMubGliYyBcIm11c2xcIlxuICAgICAgICAgIHlhcm4gaW5zdGFsbFxuXG4gICAgICAtIG5hbWU6IFNldCB1cCBRRU1VXG4gICAgICAgIHVzZXM6IGRvY2tlci9zZXR1cC1xZW11LWFjdGlvbkB2M1xuICAgICAgICB3aXRoOlxuICAgICAgICAgIHBsYXRmb3JtczogYXJtNjRcbiAgICAgIC0gcnVuOiBkb2NrZXIgcnVuIC0tcm0gLS1wcml2aWxlZ2VkIG11bHRpYXJjaC9xZW11LXVzZXItc3RhdGljIC0tcmVzZXQgLXAgeWVzXG5cbiAgICAgIC0gbmFtZTogU2V0dXAgYW5kIHJ1biB0ZXN0c1xuICAgICAgICB1c2VzOiBhZGRuYWIvZG9ja2VyLXJ1bi1hY3Rpb25AdjNcbiAgICAgICAgd2l0aDpcbiAgICAgICAgICBpbWFnZTogbm9kZTpsdHMtYWxwaW5lXG4gICAgICAgICAgb3B0aW9uczogLS1wbGF0Zm9ybSBsaW51eC9hcm02NCAtdiBcXCR7eyBnaXRodWIud29ya3NwYWNlIH19Oi9idWlsZCAtdyAvYnVpbGRcbiAgICAgICAgICBydW46IHxcbiAgICAgICAgICAgIHNldCAtZVxuICAgICAgICAgICAgeWFybiB0ZXN0XG5cbiAgdGVzdC1saW51eC1hcm0tZ251ZWFiaWhmLWJpbmRpbmc6XG4gICAgbmFtZTogVGVzdCBiaW5kaW5ncyBvbiBhcm12Ny11bmtub3duLWxpbnV4LWdudWVhYmloZiAtIG5vZGVAXFwke3sgbWF0cml4Lm5vZGUgfX1cbiAgICBuZWVkczpcbiAgICAgIC0gYnVpbGRcbiAgICBzdHJhdGVneTpcbiAgICAgIGZhaWwtZmFzdDogZmFsc2VcbiAgICAgIG1hdHJpeDpcbiAgICAgICAgbm9kZTogWycxOCcsICcyMCddXG4gICAgcnVucy1vbjogdWJ1bnR1LWxhdGVzdFxuXG4gICAgc3RlcHM6XG4gICAgICAtIHVzZXM6IGFjdGlvbnMvY2hlY2tvdXRAdjRcblxuICAgICAgLSBuYW1lOiBEb3dubG9hZCBhcnRpZmFjdHNcbiAgICAgICAgdXNlczogYWN0aW9ucy9kb3dubG9hZC1hcnRpZmFjdEB2NFxuICAgICAgICB3aXRoOlxuICAgICAgICAgIG5hbWU6IGJpbmRpbmdzLWFybXY3LXVua25vd24tbGludXgtZ251ZWFiaWhmXG4gICAgICAgICAgcGF0aDogLlxuXG4gICAgICAtIG5hbWU6IExpc3QgcGFja2FnZXNcbiAgICAgICAgcnVuOiBscyAtUiAuXG4gICAgICAgIHNoZWxsOiBiYXNoXG5cbiAgICAgIC0gbmFtZTogSW5zdGFsbCBkZXBlbmRlbmNpZXNcbiAgICAgICAgcnVuOiB8XG4gICAgICAgICAgeWFybiBjb25maWcgc2V0IHN1cHBvcnRlZEFyY2hpdGVjdHVyZXMuY3B1IFwiYXJtXCJcbiAgICAgICAgICB5YXJuIGluc3RhbGxcblxuICAgICAgLSBuYW1lOiBTZXQgdXAgUUVNVVxuICAgICAgICB1c2VzOiBkb2NrZXIvc2V0dXAtcWVtdS1hY3Rpb25AdjNcbiAgICAgICAgd2l0aDpcbiAgICAgICAgICBwbGF0Zm9ybXM6IGFybVxuICAgICAgLSBydW46IGRvY2tlciBydW4gLS1ybSAtLXByaXZpbGVnZWQgbXVsdGlhcmNoL3FlbXUtdXNlci1zdGF0aWMgLS1yZXNldCAtcCB5ZXNcblxuICAgICAgLSBuYW1lOiBTZXR1cCBhbmQgcnVuIHRlc3RzXG4gICAgICAgIHVzZXM6IGFkZG5hYi9kb2NrZXItcnVuLWFjdGlvbkB2M1xuICAgICAgICB3aXRoOlxuICAgICAgICAgIGltYWdlOiBub2RlOlxcJHt7IG1hdHJpeC5ub2RlIH19LWJ1bGxzZXllLXNsaW1cbiAgICAgICAgICBvcHRpb25zOiAtLXBsYXRmb3JtIGxpbnV4L2FybS92NyAtdiBcXCR7eyBnaXRodWIud29ya3NwYWNlIH19Oi9idWlsZCAtdyAvYnVpbGRcbiAgICAgICAgICBydW46IHxcbiAgICAgICAgICAgIHNldCAtZVxuICAgICAgICAgICAgeWFybiB0ZXN0XG4gICAgICAgICAgICBscyAtbGFcblxuICB1bml2ZXJzYWwtbWFjT1M6XG4gICAgbmFtZTogQnVpbGQgdW5pdmVyc2FsIG1hY09TIGJpbmFyeVxuICAgIG5lZWRzOlxuICAgICAgLSBidWlsZFxuICAgIHJ1bnMtb246IG1hY29zLWxhdGVzdFxuXG4gICAgc3RlcHM6XG4gICAgICAtIHVzZXM6IGFjdGlvbnMvY2hlY2tvdXRAdjRcblxuICAgICAgLSBuYW1lOiBTZXR1cCBub2RlXG4gICAgICAgIHVzZXM6IGFjdGlvbnMvc2V0dXAtbm9kZUB2NFxuICAgICAgICB3aXRoOlxuICAgICAgICAgIG5vZGUtdmVyc2lvbjogMjBcbiAgICAgICAgICBjYWNoZTogeWFyblxuXG4gICAgICAtIG5hbWU6ICdJbnN0YWxsIGRlcGVuZGVuY2llcydcbiAgICAgICAgcnVuOiB5YXJuIGluc3RhbGxcblxuICAgICAgLSBuYW1lOiBEb3dubG9hZCBtYWNPUyB4NjQgYXJ0aWZhY3RcbiAgICAgICAgdXNlczogYWN0aW9ucy9kb3dubG9hZC1hcnRpZmFjdEB2NFxuICAgICAgICB3aXRoOlxuICAgICAgICAgIG5hbWU6IGJpbmRpbmdzLXg4Nl82NC1hcHBsZS1kYXJ3aW5cbiAgICAgICAgICBwYXRoOiBhcnRpZmFjdHNcbiAgICAgIC0gbmFtZTogRG93bmxvYWQgbWFjT1MgYXJtNjQgYXJ0aWZhY3RcbiAgICAgICAgdXNlczogYWN0aW9ucy9kb3dubG9hZC1hcnRpZmFjdEB2NFxuICAgICAgICB3aXRoOlxuICAgICAgICAgIG5hbWU6IGJpbmRpbmdzLWFhcmNoNjQtYXBwbGUtZGFyd2luXG4gICAgICAgICAgcGF0aDogYXJ0aWZhY3RzXG5cbiAgICAgIC0gbmFtZTogQ29tYmluZSBiaW5hcmllc1xuICAgICAgICBydW46IHlhcm4gdW5pdmVyc2FsXG5cbiAgICAgIC0gbmFtZTogVXBsb2FkIGFydGlmYWN0XG4gICAgICAgIHVzZXM6IGFjdGlvbnMvdXBsb2FkLWFydGlmYWN0QHY0XG4gICAgICAgIHdpdGg6XG4gICAgICAgICAgbmFtZTogYmluZGluZ3MtdW5pdmVyc2FsLWFwcGxlLWRhcndpblxuICAgICAgICAgIHBhdGg6IFxcJHt7IGVudi5BUFBfTkFNRSB9fS4qLm5vZGVcbiAgICAgICAgICBpZi1uby1maWxlcy1mb3VuZDogZXJyb3JcblxuICBwdWJsaXNoOlxuICAgIG5hbWU6IFB1Ymxpc2hcbiAgICBydW5zLW9uOiB1YnVudHUtbGF0ZXN0XG4gICAgbmVlZHM6XG4gICAgICAtIHRlc3QtbGludXgteDY0LWdudS1iaW5kaW5nXG4gICAgICAtIHRlc3QtbGludXgteDY0LW11c2wtYmluZGluZ1xuICAgICAgLSB0ZXN0LWxpbnV4LWFhcmNoNjQtZ251LWJpbmRpbmdcbiAgICAgIC0gdGVzdC1saW51eC1hcm0tZ251ZWFiaWhmLWJpbmRpbmdcbiAgICAgIC0gdGVzdC1tYWNPUy13aW5kb3dzLWJpbmRpbmdcbiAgICAgIC0gdGVzdC1saW51eC1hYXJjaDY0LW11c2wtYmluZGluZ1xuICAgICAgLSBidWlsZC1mcmVlYnNkXG5cbiAgICBzdGVwczpcbiAgICAgIC0gdXNlczogYWN0aW9ucy9jaGVja291dEB2NFxuXG4gICAgICAtIG5hbWU6IFNldHVwIG5vZGVcbiAgICAgICAgdXNlczogYWN0aW9ucy9zZXR1cC1ub2RlQHY0XG4gICAgICAgIHdpdGg6XG4gICAgICAgICAgbm9kZS12ZXJzaW9uOiAyMFxuICAgICAgICAgIGNhY2hlOiAneWFybidcblxuICAgICAgLSBuYW1lOiAnSW5zdGFsbCBkZXBlbmRlbmNpZXMnXG4gICAgICAgIHJ1bjogeWFybiBpbnN0YWxsXG5cbiAgICAgIC0gbmFtZTogRG93bmxvYWQgYWxsIGFydGlmYWN0c1xuICAgICAgICB1c2VzOiBhY3Rpb25zL2Rvd25sb2FkLWFydGlmYWN0QHY0XG4gICAgICAgIHdpdGg6XG4gICAgICAgICAgcGF0aDogYXJ0aWZhY3RzXG5cbiAgICAgIC0gbmFtZTogTW92ZSBhcnRpZmFjdHNcbiAgICAgICAgcnVuOiB5YXJuIGFydGlmYWN0c1xuXG4gICAgICAtIG5hbWU6IExpc3QgcGFja2FnZXNcbiAgICAgICAgcnVuOiBscyAtUiAuL25wbVxuICAgICAgICBzaGVsbDogYmFzaFxuXG4gICAgICAtIG5hbWU6IFB1Ymxpc2hcbiAgICAgICAgcnVuOiB8XG4gICAgICAgICAgbnBtIGNvbmZpZyBzZXQgcHJvdmVuYW5jZSB0cnVlXG4gICAgICAgICAgaWYgZ2l0IGxvZyAtMSAtLXByZXR0eT0lQiB8IGdyZXAgXCJeWzAtOV1cXFxcK1xcXFwuWzAtOV1cXFxcK1xcXFwuWzAtOV1cXFxcKyRcIjtcbiAgICAgICAgICB0aGVuXG4gICAgICAgICAgICBlY2hvIFwiLy9yZWdpc3RyeS5ucG1qcy5vcmcvOl9hdXRoVG9rZW49JE5QTV9UT0tFTlwiID4+IH4vLm5wbXJjXG4gICAgICAgICAgICBucG0gcHVibGlzaCAtLWFjY2VzcyBwdWJsaWNcbiAgICAgICAgICBlbGlmIGdpdCBsb2cgLTEgLS1wcmV0dHk9JUIgfCBncmVwIFwiXlswLTldXFxcXCtcXFxcLlswLTldXFxcXCtcXFxcLlswLTldXFxcXCtcIjtcbiAgICAgICAgICB0aGVuXG4gICAgICAgICAgICBlY2hvIFwiLy9yZWdpc3RyeS5ucG1qcy5vcmcvOl9hdXRoVG9rZW49JE5QTV9UT0tFTlwiID4+IH4vLm5wbXJjXG4gICAgICAgICAgICBucG0gcHVibGlzaCAtLXRhZyBuZXh0IC0tYWNjZXNzIHB1YmxpY1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGVjaG8gXCJOb3QgYSByZWxlYXNlLCBza2lwcGluZyBwdWJsaXNoXCJcbiAgICAgICAgICBmaVxuICAgICAgICBlbnY6XG4gICAgICAgICAgR0lUSFVCX1RPS0VOOiBcXCR7eyBzZWNyZXRzLkdJVEhVQl9UT0tFTiB9fVxuICAgICAgICAgIE5QTV9UT0tFTjogXFwke3sgc2VjcmV0cy5OUE1fVE9LRU4gfX1cbmA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaS10ZW1wbGF0ZS5qcy5tYXAiLCJpbXBvcnQgeyBsb2FkLCBkdW1wIH0gZnJvbSAnanMteWFtbCc7XG5pbXBvcnQgeyBOb2RlQXJjaFRvQ3B1LCBVbmlBcmNoc0J5UGxhdGZvcm0sIHBhcnNlVHJpcGxlIH0gZnJvbSAnLi4vcGFyc2UtdHJpcGxlJztcbmltcG9ydCB7IFlBTUwgfSBmcm9tICcuL2NpLXRlbXBsYXRlJztcbmNvbnN0IEJVSUxEX0ZSRUVCU0QgPSAnYnVpbGQtZnJlZWJzZCc7XG5jb25zdCBURVNUX01BQ09TX1dJTkRPV1MgPSAndGVzdC1tYWNPUy13aW5kb3dzLWJpbmRpbmcnO1xuY29uc3QgVEVTVF9MSU5VWF9YNjRfR05VID0gJ3Rlc3QtbGludXgteDY0LWdudS1iaW5kaW5nJztcbmNvbnN0IFRFU1RfTElOVVhfWDY0X01VU0wgPSAndGVzdC1saW51eC14NjQtbXVzbC1iaW5kaW5nJztcbmNvbnN0IFRFU1RfTElOVVhfQUFSQ0g2NF9HTlUgPSAndGVzdC1saW51eC1hYXJjaDY0LWdudS1iaW5kaW5nJztcbmNvbnN0IFRFU1RfTElOVVhfQUFSQ0g2NF9NVVNMID0gJ3Rlc3QtbGludXgtYWFyY2g2NC1tdXNsLWJpbmRpbmcnO1xuY29uc3QgVEVTVF9MSU5VWF9BUk1fR05VRUFCSUhGID0gJ3Rlc3QtbGludXgtYXJtLWdudWVhYmloZi1iaW5kaW5nJztcbmNvbnN0IFVOSVZFUlNBTF9NQUNPUyA9ICd1bml2ZXJzYWwtbWFjT1MnO1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUdpdGh1YkFjdGlvbnNDSVltbCA9IChiaW5hcnlOYW1lLCB0YXJnZXRzKSA9PiB7XG4gICAgY29uc3QgYWxsVGFyZ2V0cyA9IG5ldyBTZXQodGFyZ2V0cy5mbGF0TWFwKCh0KSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgcGxhdGZvcm0gPSBwYXJzZVRyaXBsZSh0KTtcbiAgICAgICAgaWYgKHBsYXRmb3JtLmFyY2ggPT09ICd1bml2ZXJzYWwnKSB7XG4gICAgICAgICAgICBjb25zdCBzcmNUcmlwbGVzID0gKF9hID0gVW5pQXJjaHNCeVBsYXRmb3JtW3BsYXRmb3JtLnBsYXRmb3JtXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1hcCgoYXJjaCkgPT4gdC5yZXBsYWNlKCd1bml2ZXJzYWwnLCBOb2RlQXJjaFRvQ3B1W2FyY2hdKSk7XG4gICAgICAgICAgICByZXR1cm4gW3QsIC4uLihzcmNUcmlwbGVzICE9PSBudWxsICYmIHNyY1RyaXBsZXMgIT09IHZvaWQgMCA/IHNyY1RyaXBsZXMgOiBbXSldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbdF07XG4gICAgfSkpO1xuICAgIGNvbnN0IGZ1bGxUZW1wbGF0ZSA9IGxvYWQoWUFNTChiaW5hcnlOYW1lKSk7XG4gICAgY29uc3QgcmVxdWlyZWRTdGVwcyA9IFtdO1xuICAgIGNvbnN0IGVuYWJsZVdpbmRvd3NYODYgPSBhbGxUYXJnZXRzLmhhcygneDg2XzY0LXBjLXdpbmRvd3MtbXN2YycpO1xuICAgIGNvbnN0IGVuYWJsZU1hY09TWDg2ID0gYWxsVGFyZ2V0cy5oYXMoJ3g4Nl82NC1hcHBsZS1kYXJ3aW4nKTtcbiAgICBjb25zdCBlbmFibGVMaW51eFg4NkdudSA9IGFsbFRhcmdldHMuaGFzKCd4ODZfNjQtdW5rbm93bi1saW51eC1nbnUnKTtcbiAgICBjb25zdCBlbmFibGVMaW51eFg4Nk11c2wgPSBhbGxUYXJnZXRzLmhhcygneDg2XzY0LXVua25vd24tbGludXgtbXVzbCcpO1xuICAgIGNvbnN0IGVuYWJsZUxpbnV4QXJtOEdudSA9IGFsbFRhcmdldHMuaGFzKCdhYXJjaDY0LXVua25vd24tbGludXgtZ251Jyk7XG4gICAgY29uc3QgZW5hYmxlTGludXhBcm04TXVzbCA9IGFsbFRhcmdldHMuaGFzKCdhYXJjaDY0LXVua25vd24tbGludXgtbXVzbCcpO1xuICAgIGNvbnN0IGVuYWJsZUxpbnV4QXJtNyA9IGFsbFRhcmdldHMuaGFzKCdhcm12Ny11bmtub3duLWxpbnV4LWdudWVhYmloZicpO1xuICAgIGNvbnN0IGVuYWJsZUZyZWVCU0QgPSBhbGxUYXJnZXRzLmhhcygneDg2XzY0LXVua25vd24tZnJlZWJzZCcpO1xuICAgIGNvbnN0IGVuYWJsZU1hY09TVW5pID0gYWxsVGFyZ2V0cy5oYXMoJ3VuaXZlcnNhbC1hcHBsZS1kYXJ3aW4nKTtcbiAgICBmdWxsVGVtcGxhdGUuZW52LkFQUF9OQU1FID0gYmluYXJ5TmFtZTtcbiAgICBmdWxsVGVtcGxhdGUuam9icy5idWlsZC5zdHJhdGVneS5tYXRyaXguc2V0dGluZ3MgPVxuICAgICAgICBmdWxsVGVtcGxhdGUuam9icy5idWlsZC5zdHJhdGVneS5tYXRyaXguc2V0dGluZ3MuZmlsdGVyKCh7IHRhcmdldCB9KSA9PiBhbGxUYXJnZXRzLmhhcyh0YXJnZXQpKTtcbiAgICBpZiAoIWZ1bGxUZW1wbGF0ZS5qb2JzLmJ1aWxkLnN0cmF0ZWd5Lm1hdHJpeC5zZXR0aW5ncy5sZW5ndGgpIHtcbiAgICAgICAgZGVsZXRlIGZ1bGxUZW1wbGF0ZS5qb2JzLmJ1aWxkLnN0cmF0ZWd5Lm1hdHJpeDtcbiAgICB9XG4gICAgaWYgKCFlbmFibGVGcmVlQlNEKSB7XG4gICAgICAgIGRlbGV0ZSBmdWxsVGVtcGxhdGUuam9ic1tCVUlMRF9GUkVFQlNEXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlcXVpcmVkU3RlcHMucHVzaChCVUlMRF9GUkVFQlNEKTtcbiAgICB9XG4gICAgaWYgKCFlbmFibGVXaW5kb3dzWDg2ICYmICFlbmFibGVNYWNPU1g4Nikge1xuICAgICAgICBkZWxldGUgZnVsbFRlbXBsYXRlLmpvYnNbVEVTVF9NQUNPU19XSU5ET1dTXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGZpbHRlclRhcmdldHMgPSBuZXcgU2V0KCk7XG4gICAgICAgIGlmIChlbmFibGVXaW5kb3dzWDg2KSB7XG4gICAgICAgICAgICBmaWx0ZXJUYXJnZXRzLmFkZCgnd2luZG93cy1sYXRlc3QnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5hYmxlTWFjT1NYODYgfHwgZW5hYmxlTWFjT1NVbmkpIHtcbiAgICAgICAgICAgIGZpbHRlclRhcmdldHMuYWRkKCdtYWNvcy1sYXRlc3QnKTtcbiAgICAgICAgfVxuICAgICAgICBmdWxsVGVtcGxhdGUuam9ic1tURVNUX01BQ09TX1dJTkRPV1NdLnN0cmF0ZWd5Lm1hdHJpeC5zZXR0aW5ncyA9XG4gICAgICAgICAgICBmdWxsVGVtcGxhdGUuam9ic1tURVNUX01BQ09TX1dJTkRPV1NdLnN0cmF0ZWd5Lm1hdHJpeC5zZXR0aW5ncy5maWx0ZXIoKHsgaG9zdCB9KSA9PiBmaWx0ZXJUYXJnZXRzLmhhcyhob3N0KSk7XG4gICAgICAgIHJlcXVpcmVkU3RlcHMucHVzaChURVNUX01BQ09TX1dJTkRPV1MpO1xuICAgIH1cbiAgICBpZiAoIWVuYWJsZUxpbnV4WDg2R251KSB7XG4gICAgICAgIGRlbGV0ZSBmdWxsVGVtcGxhdGUuam9ic1tURVNUX0xJTlVYX1g2NF9HTlVdO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVxdWlyZWRTdGVwcy5wdXNoKFRFU1RfTElOVVhfWDY0X0dOVSk7XG4gICAgfVxuICAgIGlmICghZW5hYmxlTGludXhYODZNdXNsKSB7XG4gICAgICAgIGRlbGV0ZSBmdWxsVGVtcGxhdGUuam9ic1tURVNUX0xJTlVYX1g2NF9NVVNMXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlcXVpcmVkU3RlcHMucHVzaChURVNUX0xJTlVYX1g2NF9NVVNMKTtcbiAgICB9XG4gICAgaWYgKCFlbmFibGVMaW51eEFybThHbnUpIHtcbiAgICAgICAgZGVsZXRlIGZ1bGxUZW1wbGF0ZS5qb2JzW1RFU1RfTElOVVhfQUFSQ0g2NF9HTlVdO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVxdWlyZWRTdGVwcy5wdXNoKFRFU1RfTElOVVhfQUFSQ0g2NF9HTlUpO1xuICAgIH1cbiAgICBpZiAoIWVuYWJsZUxpbnV4QXJtOE11c2wpIHtcbiAgICAgICAgZGVsZXRlIGZ1bGxUZW1wbGF0ZS5qb2JzW1RFU1RfTElOVVhfQUFSQ0g2NF9NVVNMXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlcXVpcmVkU3RlcHMucHVzaChURVNUX0xJTlVYX0FBUkNINjRfTVVTTCk7XG4gICAgfVxuICAgIGlmICghZW5hYmxlTGludXhBcm03KSB7XG4gICAgICAgIGRlbGV0ZSBmdWxsVGVtcGxhdGUuam9ic1tURVNUX0xJTlVYX0FSTV9HTlVFQUJJSEZdO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVxdWlyZWRTdGVwcy5wdXNoKFRFU1RfTElOVVhfQVJNX0dOVUVBQklIRik7XG4gICAgfVxuICAgIGlmICghZW5hYmxlTWFjT1NVbmkpIHtcbiAgICAgICAgZGVsZXRlIGZ1bGxUZW1wbGF0ZS5qb2JzW1VOSVZFUlNBTF9NQUNPU107XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXF1aXJlZFN0ZXBzLnB1c2goVU5JVkVSU0FMX01BQ09TKTtcbiAgICB9XG4gICAgZnVsbFRlbXBsYXRlLmpvYnMucHVibGlzaC5uZWVkcyA9IHJlcXVpcmVkU3RlcHM7XG4gICAgcmV0dXJuIGR1bXAoZnVsbFRlbXBsYXRlLCB7XG4gICAgICAgIGxpbmVXaWR0aDogMTAwMCxcbiAgICB9KTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaS15bWwuanMubWFwIiwiZXhwb3J0IGNvbnN0IEdpdElnbm9yZSA9IGAjIENyZWF0ZWQgYnkgaHR0cHM6Ly93d3cudG9wdGFsLmNvbS9kZXZlbG9wZXJzL2dpdGlnbm9yZS9hcGkvbm9kZVxuIyBFZGl0IGF0IGh0dHBzOi8vd3d3LnRvcHRhbC5jb20vZGV2ZWxvcGVycy9naXRpZ25vcmU/dGVtcGxhdGVzPW5vZGVcblxuIyMjIE5vZGUgIyMjXG4jIExvZ3NcbmxvZ3NcbioubG9nXG5ucG0tZGVidWcubG9nKlxueWFybi1kZWJ1Zy5sb2cqXG55YXJuLWVycm9yLmxvZypcbmxlcm5hLWRlYnVnLmxvZypcblxuIyBEaWFnbm9zdGljIHJlcG9ydHMgKGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcmVwb3J0Lmh0bWwpXG5yZXBvcnQuWzAtOV0qLlswLTldKi5bMC05XSouWzAtOV0qLmpzb25cblxuIyBSdW50aW1lIGRhdGFcbnBpZHNcbioucGlkXG4qLnNlZWRcbioucGlkLmxvY2tcblxuIyBEaXJlY3RvcnkgZm9yIGluc3RydW1lbnRlZCBsaWJzIGdlbmVyYXRlZCBieSBqc2NvdmVyYWdlL0pTQ292ZXJcbmxpYi1jb3ZcblxuIyBDb3ZlcmFnZSBkaXJlY3RvcnkgdXNlZCBieSB0b29scyBsaWtlIGlzdGFuYnVsXG5jb3ZlcmFnZVxuKi5sY292XG5cbiMgbnljIHRlc3QgY292ZXJhZ2Vcbi5ueWNfb3V0cHV0XG5cbiMgR3J1bnQgaW50ZXJtZWRpYXRlIHN0b3JhZ2UgKGh0dHBzOi8vZ3J1bnRqcy5jb20vY3JlYXRpbmctcGx1Z2lucyNzdG9yaW5nLXRhc2stZmlsZXMpXG4uZ3J1bnRcblxuIyBCb3dlciBkZXBlbmRlbmN5IGRpcmVjdG9yeSAoaHR0cHM6Ly9ib3dlci5pby8pXG5ib3dlcl9jb21wb25lbnRzXG5cbiMgbm9kZS13YWYgY29uZmlndXJhdGlvblxuLmxvY2std3NjcmlwdFxuXG4jIENvbXBpbGVkIGJpbmFyeSBhZGRvbnMgKGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvYWRkb25zLmh0bWwpXG5idWlsZC9SZWxlYXNlXG5cbiMgRGVwZW5kZW5jeSBkaXJlY3Rvcmllc1xubm9kZV9tb2R1bGVzL1xuanNwbV9wYWNrYWdlcy9cblxuIyBUeXBlU2NyaXB0IHYxIGRlY2xhcmF0aW9uIGZpbGVzXG50eXBpbmdzL1xuXG4jIFR5cGVTY3JpcHQgY2FjaGVcbioudHNidWlsZGluZm9cblxuIyBPcHRpb25hbCBucG0gY2FjaGUgZGlyZWN0b3J5XG4ubnBtXG5cbiMgT3B0aW9uYWwgZXNsaW50IGNhY2hlXG4uZXNsaW50Y2FjaGVcblxuIyBNaWNyb2J1bmRsZSBjYWNoZVxuLnJwdDJfY2FjaGUvXG4ucnRzMl9jYWNoZV9janMvXG4ucnRzMl9jYWNoZV9lcy9cbi5ydHMyX2NhY2hlX3VtZC9cblxuIyBPcHRpb25hbCBSRVBMIGhpc3Rvcnlcbi5ub2RlX3JlcGxfaGlzdG9yeVxuXG4jIE91dHB1dCBvZiAnbnBtIHBhY2snXG4qLnRnelxuXG4jIFlhcm4gSW50ZWdyaXR5IGZpbGVcbi55YXJuLWludGVncml0eVxuXG4jIGRvdGVudiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZmlsZVxuLmVudlxuLmVudi50ZXN0XG5cbiMgcGFyY2VsLWJ1bmRsZXIgY2FjaGUgKGh0dHBzOi8vcGFyY2VsanMub3JnLylcbi5jYWNoZVxuXG4jIE5leHQuanMgYnVpbGQgb3V0cHV0XG4ubmV4dFxuXG4jIE51eHQuanMgYnVpbGQgLyBnZW5lcmF0ZSBvdXRwdXRcbi5udXh0XG5kaXN0XG5cbiMgR2F0c2J5IGZpbGVzXG4uY2FjaGUvXG4jIENvbW1lbnQgaW4gdGhlIHB1YmxpYyBsaW5lIGluIGlmIHlvdXIgcHJvamVjdCB1c2VzIEdhdHNieSBhbmQgbm90IE5leHQuanNcbiMgaHR0cHM6Ly9uZXh0anMub3JnL2Jsb2cvbmV4dC05LTEjcHVibGljLWRpcmVjdG9yeS1zdXBwb3J0XG4jIHB1YmxpY1xuXG4jIHZ1ZXByZXNzIGJ1aWxkIG91dHB1dFxuLnZ1ZXByZXNzL2Rpc3RcblxuIyBTZXJ2ZXJsZXNzIGRpcmVjdG9yaWVzXG4uc2VydmVybGVzcy9cblxuIyBGdXNlQm94IGNhY2hlXG4uZnVzZWJveC9cblxuIyBEeW5hbW9EQiBMb2NhbCBmaWxlc1xuLmR5bmFtb2RiL1xuXG4jIFRlcm5KUyBwb3J0IGZpbGVcbi50ZXJuLXBvcnRcblxuIyBTdG9yZXMgVlNDb2RlIHZlcnNpb25zIHVzZWQgZm9yIHRlc3RpbmcgVlNDb2RlIGV4dGVuc2lvbnNcbi52c2NvZGUtdGVzdFxuXG4jIEVuZCBvZiBodHRwczovL3d3dy50b3B0YWwuY29tL2RldmVsb3BlcnMvZ2l0aWdub3JlL2FwaS9ub2RlXG5cbiMgQ3JlYXRlZCBieSBodHRwczovL3d3dy50b3B0YWwuY29tL2RldmVsb3BlcnMvZ2l0aWdub3JlL2FwaS9tYWNvc1xuIyBFZGl0IGF0IGh0dHBzOi8vd3d3LnRvcHRhbC5jb20vZGV2ZWxvcGVycy9naXRpZ25vcmU/dGVtcGxhdGVzPW1hY29zXG5cbiMjIyBtYWNPUyAjIyNcbiMgR2VuZXJhbFxuLkRTX1N0b3JlXG4uQXBwbGVEb3VibGVcbi5MU092ZXJyaWRlXG5cbiMgSWNvbiBtdXN0IGVuZCB3aXRoIHR3byBcXHJcbkljb25cblxuXG4jIFRodW1ibmFpbHNcbi5fKlxuXG4jIEZpbGVzIHRoYXQgbWlnaHQgYXBwZWFyIGluIHRoZSByb290IG9mIGEgdm9sdW1lXG4uRG9jdW1lbnRSZXZpc2lvbnMtVjEwMFxuLmZzZXZlbnRzZFxuLlNwb3RsaWdodC1WMTAwXG4uVGVtcG9yYXJ5SXRlbXNcbi5UcmFzaGVzXG4uVm9sdW1lSWNvbi5pY25zXG4uY29tLmFwcGxlLnRpbWVtYWNoaW5lLmRvbm90cHJlc2VudFxuXG4jIERpcmVjdG9yaWVzIHBvdGVudGlhbGx5IGNyZWF0ZWQgb24gcmVtb3RlIEFGUCBzaGFyZVxuLkFwcGxlREJcbi5BcHBsZURlc2t0b3Bcbk5ldHdvcmsgVHJhc2ggRm9sZGVyXG5UZW1wb3JhcnkgSXRlbXNcbi5hcGRpc2tcblxuIyMjIG1hY09TIFBhdGNoICMjI1xuIyBpQ2xvdWQgZ2VuZXJhdGVkIGZpbGVzXG4qLmljbG91ZFxuXG4jIEVuZCBvZiBodHRwczovL3d3dy50b3B0YWwuY29tL2RldmVsb3BlcnMvZ2l0aWdub3JlL2FwaS9tYWNvc1xuXG4jIENyZWF0ZWQgYnkgaHR0cHM6Ly93d3cudG9wdGFsLmNvbS9kZXZlbG9wZXJzL2dpdGlnbm9yZS9hcGkvd2luZG93c1xuIyBFZGl0IGF0IGh0dHBzOi8vd3d3LnRvcHRhbC5jb20vZGV2ZWxvcGVycy9naXRpZ25vcmU/dGVtcGxhdGVzPXdpbmRvd3NcblxuIyMjIFdpbmRvd3MgIyMjXG4jIFdpbmRvd3MgdGh1bWJuYWlsIGNhY2hlIGZpbGVzXG5UaHVtYnMuZGJcblRodW1icy5kYjplbmNyeXB0YWJsZVxuZWh0aHVtYnMuZGJcbmVodGh1bWJzX3Zpc3RhLmRiXG5cbiMgRHVtcCBmaWxlXG4qLnN0YWNrZHVtcFxuXG4jIEZvbGRlciBjb25maWcgZmlsZVxuW0RkXWVza3RvcC5pbmlcblxuIyBSZWN5Y2xlIEJpbiB1c2VkIG9uIGZpbGUgc2hhcmVzXG4kUkVDWUNMRS5CSU4vXG5cbiMgV2luZG93cyBJbnN0YWxsZXIgZmlsZXNcbiouY2FiXG4qLm1zaVxuKi5tc2l4XG4qLm1zbVxuKi5tc3BcblxuIyBXaW5kb3dzIHNob3J0Y3V0c1xuKi5sbmtcblxuIyBFbmQgb2YgaHR0cHM6Ly93d3cudG9wdGFsLmNvbS9kZXZlbG9wZXJzL2dpdGlnbm9yZS9hcGkvd2luZG93c1xuXG4jQWRkZWQgYnkgY2FyZ29cblxuL3RhcmdldFxuQ2FyZ28ubG9ja1xuXG4ucG5wLipcbi55YXJuLypcbiEueWFybi9wYXRjaGVzXG4hLnlhcm4vcGx1Z2luc1xuIS55YXJuL3JlbGVhc2VzXG4hLnlhcm4vc2Rrc1xuIS55YXJuL3ZlcnNpb25zXG5cbioubm9kZVxuYDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdpdGlnbm9yZS10ZW1wbGF0ZS5qcy5tYXAiLCJleHBvcnQgY29uc3QgTGliUnMgPSBgIyFbZGVueShjbGlwcHk6OmFsbCldXG5cbiNbbWFjcm9fdXNlXVxuZXh0ZXJuIGNyYXRlIG5hcGlfZGVyaXZlO1xuXG4jW25hcGldXG5wdWIgZm4gc3VtKGE6IGkzMiwgYjogaTMyKSAtPiBpMzIge1xuICBhICsgYlxufVxuYDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxpYi1ycy5qcy5tYXAiLCJleHBvcnQgY29uc3QgTlBNSWdub3JlRmlsZXMgPSBgdGFyZ2V0XG5DYXJnby5sb2NrXG4uY2FyZ29cbi5naXRodWJcbm5wbVxuLmVzbGludHJjXG4ucHJldHRpZXJpZ25vcmVcbnJ1c3RmbXQudG9tbFxueWFybi5sb2NrXG4qLm5vZGVcbi55YXJuXG5fX3Rlc3RfX1xucmVub3ZhdGUuanNvblxuYDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5wbWlnbm9yZS5qcy5tYXAiLCJpbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJztcbmltcG9ydCB7IERlZmF1bHRQbGF0Zm9ybXMgfSBmcm9tICcuLi9wYXJzZS10cmlwbGUnO1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVBhY2thZ2VKc29uID0gKG5hbWUsIGJpbmFyeU5hbWUsIHRhcmdldHMpID0+IHtcbiAgICBjb25zdCBwa2dDb250ZW50ID0ge1xuICAgICAgICBuYW1lLFxuICAgICAgICB2ZXJzaW9uOiAnMC4wLjAnLFxuICAgICAgICBtYWluOiAnaW5kZXguanMnLFxuICAgICAgICB0eXBlczogJ2luZGV4LmQudHMnLFxuICAgICAgICBuYXBpOiB7XG4gICAgICAgICAgICBuYW1lOiBiaW5hcnlOYW1lLFxuICAgICAgICB9LFxuICAgICAgICBsaWNlbnNlOiAnTUlUJyxcbiAgICAgICAgZGV2RGVwZW5kZW5jaWVzOiB7XG4gICAgICAgICAgICAnQG5hcGktcnMvY2xpJzogYF4ke3ZlcnNpb259YCxcbiAgICAgICAgICAgIGF2YTogJ142LjAuMScsXG4gICAgICAgIH0sXG4gICAgICAgIGF2YToge1xuICAgICAgICAgICAgdGltZW91dDogJzNtJyxcbiAgICAgICAgfSxcbiAgICAgICAgZW5naW5lczoge1xuICAgICAgICAgICAgbm9kZTogJz49IDEwJyxcbiAgICAgICAgfSxcbiAgICAgICAgc2NyaXB0czoge1xuICAgICAgICAgICAgYXJ0aWZhY3RzOiAnbmFwaSBhcnRpZmFjdHMnLFxuICAgICAgICAgICAgYnVpbGQ6ICduYXBpIGJ1aWxkIC0tcGxhdGZvcm0gLS1yZWxlYXNlJyxcbiAgICAgICAgICAgICdidWlsZDpkZWJ1Zyc6ICduYXBpIGJ1aWxkIC0tcGxhdGZvcm0nLFxuICAgICAgICAgICAgcHJlcHVibGlzaE9ubHk6ICduYXBpIHByZXB1Ymxpc2ggLXQgbnBtJyxcbiAgICAgICAgICAgIHRlc3Q6ICdhdmEnLFxuICAgICAgICAgICAgdW5pdmVyc2FsOiAnbmFwaSB1bml2ZXJzYWwnLFxuICAgICAgICAgICAgdmVyc2lvbjogJ25hcGkgdmVyc2lvbicsXG4gICAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCB0cmlwbGVzID0ge307XG4gICAgY29uc3QgZGVmYXVsdFRhcmdldHNTdXBwb3J0ZWQgPSBEZWZhdWx0UGxhdGZvcm1zLmV2ZXJ5KChwKSA9PiB0YXJnZXRzLmluY2x1ZGVzKHAucmF3KSk7XG4gICAgY29uc3QgaXNPbmx5RGVmYXVsdFRhcmdldHMgPSB0YXJnZXRzLmxlbmd0aCA9PT0gMyAmJlxuICAgICAgICBEZWZhdWx0UGxhdGZvcm1zLmV2ZXJ5KChwKSA9PiB0YXJnZXRzLmluY2x1ZGVzKHAucmF3KSk7XG4gICAgaWYgKCFpc09ubHlEZWZhdWx0VGFyZ2V0cykge1xuICAgICAgICBpZiAoIWRlZmF1bHRUYXJnZXRzU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICB0cmlwbGVzLmRlZmF1bHRzID0gZmFsc2U7XG4gICAgICAgICAgICB0cmlwbGVzLmFkZGl0aW9uYWwgPSB0YXJnZXRzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdHJpcGxlcy5hZGRpdGlvbmFsID0gdGFyZ2V0cy5maWx0ZXIoKHQpID0+ICFEZWZhdWx0UGxhdGZvcm1zLm1hcCgocCkgPT4gcC5yYXcpLmluY2x1ZGVzKHQpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgcGtnQ29udGVudC5uYXBpLnRyaXBsZXMgPSB0cmlwbGVzO1xuICAgIHJldHVybiBwa2dDb250ZW50O1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhY2thZ2UuanMubWFwIiwiaW1wb3J0IHsgX19hd2FpdGVyIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB3cml0ZUZpbGVTeW5jLCBta2RpclN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBDb21tYW5kLCBPcHRpb24gfSBmcm9tICdjbGlwYW5pb24nO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY29sb3JldHRlJztcbmltcG9ydCBpbnF1aXJlciBmcm9tICdpbnF1aXJlcic7XG5pbXBvcnQgeyBDcmVhdGVOcG1EaXJDb21tYW5kIH0gZnJvbSAnLi4vY3JlYXRlLW5wbS1kaXInO1xuaW1wb3J0IHsgZGVidWdGYWN0b3J5IH0gZnJvbSAnLi4vZGVidWcnO1xuaW1wb3J0IHsgRGVmYXVsdFBsYXRmb3JtcyB9IGZyb20gJy4uL3BhcnNlLXRyaXBsZSc7XG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJy4uL3NwYXduJztcbmltcG9ydCB7IGNyZWF0ZUNhcmdvQ29udGVudCB9IGZyb20gJy4vY2FyZ28nO1xuaW1wb3J0IHsgY3JlYXRlQ2FyZ29Db25maWcgfSBmcm9tICcuL2NhcmdvLWNvbmZpZyc7XG5pbXBvcnQgeyBjcmVhdGVHaXRodWJBY3Rpb25zQ0lZbWwgfSBmcm9tICcuL2NpLXltbCc7XG5pbXBvcnQgeyBHaXRJZ25vcmUgfSBmcm9tICcuL2dpdGlnbm9yZS10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBMaWJScyB9IGZyb20gJy4vbGliLXJzJztcbmltcG9ydCB7IE5QTUlnbm9yZUZpbGVzIH0gZnJvbSAnLi9ucG1pZ25vcmUnO1xuaW1wb3J0IHsgY3JlYXRlUGFja2FnZUpzb24gfSBmcm9tICcuL3BhY2thZ2UnO1xuY29uc3QgTkFNRV9QUk9NT1RFX05BTUUgPSAnUGFja2FnZSBuYW1lJztcbmNvbnN0IERJUl9QUk9NT1RFX05BTUUgPSAnRGlyIG5hbWUnO1xuY29uc3QgRU5BQkxFX0dJVEhVQl9BQ1RJT05TX1BST01PVEVfTkFNRSA9ICdFbmFibGUgZ2l0aHViIGFjdGlvbnMnO1xuY29uc3QgZGVidWcgPSBkZWJ1Z0ZhY3RvcnkoJ2NyZWF0ZScpO1xuY29uc3QgQlVJTERfUlMgPSBgZXh0ZXJuIGNyYXRlIG5hcGlfYnVpbGQ7XG5cbmZuIG1haW4oKSB7XG4gIG5hcGlfYnVpbGQ6OnNldHVwKCk7XG59XG5gO1xuY29uc3QgU3VwcG9ydGVkUGxhdGZvcm1zID0gW1xuICAgICdhYXJjaDY0LWFwcGxlLWRhcndpbicsXG4gICAgJ2FhcmNoNjQtbGludXgtYW5kcm9pZCcsXG4gICAgJ2FhcmNoNjQtdW5rbm93bi1saW51eC1nbnUnLFxuICAgICdhYXJjaDY0LXVua25vd24tbGludXgtbXVzbCcsXG4gICAgJ2FhcmNoNjQtcGMtd2luZG93cy1tc3ZjJyxcbiAgICAnYXJtdjctdW5rbm93bi1saW51eC1nbnVlYWJpaGYnLFxuICAgICdhcm12Ny11bmtub3duLWxpbnV4LW11c2xlYWJpaGYnLFxuICAgICd4ODZfNjQtYXBwbGUtZGFyd2luJyxcbiAgICAneDg2XzY0LXBjLXdpbmRvd3MtbXN2YycsXG4gICAgJ3g4Nl82NC11bmtub3duLWxpbnV4LWdudScsXG4gICAgJ3g4Nl82NC11bmtub3duLWxpbnV4LW11c2wnLFxuICAgICd4ODZfNjQtdW5rbm93bi1mcmVlYnNkJyxcbiAgICAnaTY4Ni1wYy13aW5kb3dzLW1zdmMnLFxuICAgICdhcm12Ny1saW51eC1hbmRyb2lkZWFiaScsXG4gICAgJ3VuaXZlcnNhbC1hcHBsZS1kYXJ3aW4nLFxuICAgICdyaXNjdjY0Z2MtdW5rbm93bi1saW51eC1nbnUnLFxuXTtcbmV4cG9ydCBjbGFzcyBOZXdQcm9qZWN0Q29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBPcHRpb24uU3RyaW5nKHtcbiAgICAgICAgICAgIG5hbWU6ICctbiwtLW5hbWUnLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kaXJuYW1lID0gT3B0aW9uLlN0cmluZyh7XG4gICAgICAgICAgICBuYW1lOiAnLWQsLS1kaXJuYW1lJyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGFyZ2V0cyA9IE9wdGlvbi5BcnJheSgnLS10YXJnZXRzLC10Jyk7XG4gICAgICAgIHRoaXMuZHJ5UnVuID0gT3B0aW9uLkJvb2xlYW4oYC0tZHJ5LXJ1bmAsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5lbmFibGVHaXRodWJBY3Rpb25zID0gT3B0aW9uLkJvb2xlYW4oYC0tZW5hYmxlLWdpdGh1Yi1hY3Rpb25zYCk7XG4gICAgfVxuICAgIGV4ZWN1dGUoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB5aWVsZCB0aGlzLmdldE5hbWUoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5kaXJuYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW3Njb3BlLCBuYW1lXSA9IChfYiA9IChfYSA9IHRoaXMubmFtZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNwbGl0KCcvJykpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRQcm9qZWN0RGlyID0gbmFtZSAhPT0gbnVsbCAmJiBuYW1lICE9PSB2b2lkIDAgPyBuYW1lIDogc2NvcGU7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlyQW5zd2VyID0geWllbGQgaW5xdWlyZXIucHJvbXB0KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogRElSX1BST01PVEVfTkFNRSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogZGVmYXVsdFByb2plY3REaXIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXJuYW1lID0gZGlyQW5zd2VyW0RJUl9QUk9NT1RFX05BTUVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLnRhcmdldHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRhcmdldHMgfSA9IHlpZWxkIGlucXVpcmVyLnByb21wdChbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjaGVja2JveCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAndGFyZ2V0cycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnQ2hvb3NlIHRhcmdldHMgeW91IHdhbnQgdG8gc3VwcG9ydCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBEZWZhdWx0UGxhdGZvcm1zLm1hcCgocCkgPT4gcC5yYXcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogU3VwcG9ydGVkUGxhdGZvcm1zLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXQgbGVhc3QgY2hvb3NlIG9uZSB0YXJnZXQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy50YXJnZXRzID0gdGFyZ2V0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmVuYWJsZUdpdGh1YkFjdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IHlpZWxkIGlucXVpcmVyLnByb21wdChbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IEVOQUJMRV9HSVRIVUJfQUNUSU9OU19QUk9NT1RFX05BTUUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRW5hYmxlIGdpdGh1YiBhY3Rpb25zPycsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogU3VwcG9ydGVkUGxhdGZvcm1zLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlR2l0aHViQWN0aW9ucyA9IGFuc3dlcltFTkFCTEVfR0lUSFVCX0FDVElPTlNfUFJPTU9URV9OQU1FXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlYnVnKGBSdW5uaW5nIGNvbW1hbmQ6ICR7Y2hhbGsuZ3JlZW4oJ1ske2NvbW1hbmR9XScpfWApO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRyeVJ1bikge1xuICAgICAgICAgICAgICAgIG1rZGlyU3luYyhqb2luKHByb2Nlc3MuY3dkKCksIHRoaXMuZGlybmFtZSksIHtcbiAgICAgICAgICAgICAgICAgICAgcmVjdXJzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG1rZGlyU3luYyhqb2luKHByb2Nlc3MuY3dkKCksIHRoaXMuZGlybmFtZSwgJ3NyYycpLCB7XG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IFtzLCBwa2dOYW1lXSA9IHRoaXMubmFtZS5zcGxpdCgnLycpO1xuICAgICAgICAgICAgY29uc3QgYmluYXJ5TmFtZSA9IHBrZ05hbWUgIT09IG51bGwgJiYgcGtnTmFtZSAhPT0gdm9pZCAwID8gcGtnTmFtZSA6IHM7XG4gICAgICAgICAgICB0aGlzLndyaXRlRmlsZSgnQ2FyZ28udG9tbCcsIGNyZWF0ZUNhcmdvQ29udGVudCh0aGlzLm5hbWUpKTtcbiAgICAgICAgICAgIHRoaXMud3JpdGVGaWxlKCcubnBtaWdub3JlJywgTlBNSWdub3JlRmlsZXMpO1xuICAgICAgICAgICAgdGhpcy53cml0ZUZpbGUoJ2J1aWxkLnJzJywgQlVJTERfUlMpO1xuICAgICAgICAgICAgdGhpcy53cml0ZUZpbGUoJ3BhY2thZ2UuanNvbicsIEpTT04uc3RyaW5naWZ5KGNyZWF0ZVBhY2thZ2VKc29uKHRoaXMubmFtZSwgYmluYXJ5TmFtZSwgdGhpcy50YXJnZXRzKSwgbnVsbCwgMikpO1xuICAgICAgICAgICAgdGhpcy53cml0ZUZpbGUoJ3NyYy9saWIucnMnLCBMaWJScyk7XG4gICAgICAgICAgICBta2RpclN5bmMoam9pbihwcm9jZXNzLmN3ZCgpLCB0aGlzLmRpcm5hbWUsICdfX3Rlc3RfXycpLCB7XG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLndyaXRlRmlsZSgnX190ZXN0X18vaW5kZXguc3BlYy5tanMnLCBgaW1wb3J0IHRlc3QgZnJvbSAnYXZhJ1xuXG5pbXBvcnQgeyBzdW0gfSBmcm9tICcuLi9pbmRleC5qcydcblxudGVzdCgnc3VtIGZyb20gbmF0aXZlJywgKHQpID0+IHtcbiAgdC5pcyhzdW0oMSwgMiksIDMpXG59KVxuYCk7XG4gICAgICAgICAgICBpZiAodGhpcy5lbmFibGVHaXRodWJBY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2l0aHViRGlyID0gam9pbihwcm9jZXNzLmN3ZCgpLCB0aGlzLmRpcm5hbWUsICcuZ2l0aHViJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgd29ya2Zsb3dzRGlyID0gam9pbihnaXRodWJEaXIsICd3b3JrZmxvd3MnKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZHJ5UnVuKSB7XG4gICAgICAgICAgICAgICAgICAgIG1rZGlyU3luYyhnaXRodWJEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICBta2RpclN5bmMod29ya2Zsb3dzRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy53cml0ZUZpbGUoam9pbignLmdpdGh1YicsICd3b3JrZmxvd3MnLCAnQ0kueW1sJyksIGNyZWF0ZUdpdGh1YkFjdGlvbnNDSVltbChiaW5hcnlOYW1lLCB0aGlzLnRhcmdldHMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHlpZWxkIENyZWF0ZU5wbURpckNvbW1hbmQuY3JlYXRlKCdwYWNrYWdlLmpzb24nLCBqb2luKHByb2Nlc3MuY3dkKCksIHRoaXMuZGlybmFtZSksIGpvaW4ocHJvY2Vzcy5jd2QoKSwgdGhpcy5kaXJuYW1lKSk7XG4gICAgICAgICAgICBjb25zdCBlbmFibGVMaW51eEFybThNdXNsID0gdGhpcy50YXJnZXRzLmluY2x1ZGVzKCdhYXJjaDY0LXVua25vd24tbGludXgtbXVzbCcpO1xuICAgICAgICAgICAgY29uc3QgZW5hYmxlV2luZG93c1g2NCA9IHRoaXMudGFyZ2V0cy5pbmNsdWRlcygneDg2XzY0LXBjLXdpbmRvd3MtbXN2YycpO1xuICAgICAgICAgICAgY29uc3QgY2FyZ29Db25maWcgPSBjcmVhdGVDYXJnb0NvbmZpZyhlbmFibGVMaW51eEFybThNdXNsLCBlbmFibGVXaW5kb3dzWDY0KTtcbiAgICAgICAgICAgIGlmIChjYXJnb0NvbmZpZy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWdEaXIgPSBqb2luKHByb2Nlc3MuY3dkKCksIHRoaXMuZGlybmFtZSwgJy5jYXJnbycpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5kcnlSdW4pIHtcbiAgICAgICAgICAgICAgICAgICAgbWtkaXJTeW5jKGNvbmZpZ0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVGaWxlKGpvaW4oJy5jYXJnbycsICdjb25maWcudG9tbCcpLCBjYXJnb0NvbmZpZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy53cml0ZUZpbGUoJ3J1c3RmbXQudG9tbCcsIGB0YWJfc3BhY2VzID0gMlxuZWRpdGlvbiA9IFwiMjAyMVwiXG5gKTtcbiAgICAgICAgICAgIHRoaXMud3JpdGVGaWxlKCcuZ2l0aWdub3JlJywgR2l0SWdub3JlKTtcbiAgICAgICAgICAgIHRoaXMud3JpdGVGaWxlKCcueWFybnJjLnltbCcsICdub2RlTGlua2VyOiBub2RlLW1vZHVsZXMnKTtcbiAgICAgICAgICAgIHlpZWxkIHNwYXduKGB5YXJuIHNldCB2ZXJzaW9uIHN0YWJsZSAtLXlhcm4tcGF0aGAsIHtcbiAgICAgICAgICAgICAgICBjd2Q6IGpvaW4ocHJvY2Vzcy5jd2QoKSwgdGhpcy5kaXJuYW1lKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgeWllbGQgc3Bhd24oYHlhcm4gaW5zdGFsbGAsIHtcbiAgICAgICAgICAgICAgICBjd2Q6IGpvaW4ocHJvY2Vzcy5jd2QoKSwgdGhpcy5kaXJuYW1lKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgd3JpdGVGaWxlKHBhdGgsIGNvbnRlbnQpIHtcbiAgICAgICAgY29uc3QgZGlzdERpciA9IGpvaW4ocHJvY2Vzcy5jd2QoKSwgdGhpcy5kaXJuYW1lKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnN0ZG91dC53cml0ZShjaGFsay5ncmVlbihgV3JpdGluZyAke2NoYWxrLmJsdWUocGF0aCl9XFxuYCkpO1xuICAgICAgICBpZiAoIXRoaXMuZHJ5UnVuKSB7XG4gICAgICAgICAgICB3cml0ZUZpbGVTeW5jKGpvaW4oZGlzdERpciwgcGF0aCksIGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldE5hbWUoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVBbnN3ZXIgPSB5aWVsZCBpbnF1aXJlci5wcm9tcHQoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBOQU1FX1BST01PVEVfTkFNRSxcbiAgICAgICAgICAgICAgICAgICAgc3VmZml4OiAnIChUaGUgbmFtZSBmaWxlZCBpbiB5b3VyIHBhY2thZ2UuanNvbiknLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBuYW1lQW5zd2VyW05BTUVfUFJPTU9URV9OQU1FXTtcbiAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdGhpcy5nZXROYW1lKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuTmV3UHJvamVjdENvbW1hbmQudXNhZ2UgPSBDb21tYW5kLlVzYWdlKHtcbiAgICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIG5ldyBwcm9qZWN0IGZyb20gc2NyYXRjaCcsXG59KTtcbk5ld1Byb2plY3RDb21tYW5kLnBhdGhzID0gW1snbmV3J11dO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiZXhwb3J0IGZ1bmN0aW9uIGdldFVzZXJBZ2VudCgpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09IFwib2JqZWN0XCIgJiYgXCJ1c2VyQWdlbnRcIiBpbiBuYXZpZ2F0b3IpIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzLnZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBgTm9kZS5qcy8ke3Byb2Nlc3MudmVyc2lvbi5zdWJzdHIoMSl9ICgke3Byb2Nlc3MucGxhdGZvcm19OyAke1xuICAgICAgcHJvY2Vzcy5hcmNoXG4gICAgfSlgO1xuICB9XG5cbiAgcmV0dXJuIFwiPGVudmlyb25tZW50IHVuZGV0ZWN0YWJsZT5cIjtcbn1cbiIsIi8vIEB0cy1jaGVja1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXIoc3RhdGUsIG5hbWUsIG1ldGhvZCwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIG1ldGhvZCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibWV0aG9kIGZvciBiZWZvcmUgaG9vayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShuYW1lKSkge1xuICAgIHJldHVybiBuYW1lLnJldmVyc2UoKS5yZWR1Y2UoKGNhbGxiYWNrLCBuYW1lKSA9PiB7XG4gICAgICByZXR1cm4gcmVnaXN0ZXIuYmluZChudWxsLCBzdGF0ZSwgbmFtZSwgY2FsbGJhY2ssIG9wdGlvbnMpO1xuICAgIH0sIG1ldGhvZCkoKTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICBpZiAoIXN0YXRlLnJlZ2lzdHJ5W25hbWVdKSB7XG4gICAgICByZXR1cm4gbWV0aG9kKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZS5yZWdpc3RyeVtuYW1lXS5yZWR1Y2UoKG1ldGhvZCwgcmVnaXN0ZXJlZCkgPT4ge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyZWQuaG9vay5iaW5kKG51bGwsIG1ldGhvZCwgb3B0aW9ucyk7XG4gICAgfSwgbWV0aG9kKSgpO1xuICB9KTtcbn1cbiIsIi8vIEB0cy1jaGVja1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkSG9vayhzdGF0ZSwga2luZCwgbmFtZSwgaG9vaykge1xuICBjb25zdCBvcmlnID0gaG9vaztcbiAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgIHN0YXRlLnJlZ2lzdHJ5W25hbWVdID0gW107XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJiZWZvcmVcIikge1xuICAgIGhvb2sgPSAobWV0aG9kLCBvcHRpb25zKSA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4ob3JpZy5iaW5kKG51bGwsIG9wdGlvbnMpKVxuICAgICAgICAudGhlbihtZXRob2QuYmluZChudWxsLCBvcHRpb25zKSk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcImFmdGVyXCIpIHtcbiAgICBob29rID0gKG1ldGhvZCwgb3B0aW9ucykgPT4ge1xuICAgICAgbGV0IHJlc3VsdDtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihtZXRob2QuYmluZChudWxsLCBvcHRpb25zKSlcbiAgICAgICAgLnRoZW4oKHJlc3VsdF8pID0+IHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHRfO1xuICAgICAgICAgIHJldHVybiBvcmlnKHJlc3VsdCwgb3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwiZXJyb3JcIikge1xuICAgIGhvb2sgPSAobWV0aG9kLCBvcHRpb25zKSA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4obWV0aG9kLmJpbmQobnVsbCwgb3B0aW9ucykpXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICByZXR1cm4gb3JpZyhlcnJvciwgb3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBzdGF0ZS5yZWdpc3RyeVtuYW1lXS5wdXNoKHtcbiAgICBob29rOiBob29rLFxuICAgIG9yaWc6IG9yaWcsXG4gIH0pO1xufVxuIiwiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVIb29rKHN0YXRlLCBuYW1lLCBtZXRob2QpIHtcbiAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gc3RhdGUucmVnaXN0cnlbbmFtZV1cbiAgICAubWFwKChyZWdpc3RlcmVkKSA9PiB7XG4gICAgICByZXR1cm4gcmVnaXN0ZXJlZC5vcmlnO1xuICAgIH0pXG4gICAgLmluZGV4T2YobWV0aG9kKTtcblxuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUucmVnaXN0cnlbbmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcbn1cbiIsIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgeyByZWdpc3RlciB9IGZyb20gXCIuL2xpYi9yZWdpc3Rlci5qc1wiO1xuaW1wb3J0IHsgYWRkSG9vayB9IGZyb20gXCIuL2xpYi9hZGQuanNcIjtcbmltcG9ydCB7IHJlbW92ZUhvb2sgfSBmcm9tIFwiLi9saWIvcmVtb3ZlLmpzXCI7XG5cbi8vIGJpbmQgd2l0aCBhcnJheSBvZiBhcmd1bWVudHM6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMTc5MjkxM1xuY29uc3QgYmluZCA9IEZ1bmN0aW9uLmJpbmQ7XG5jb25zdCBiaW5kYWJsZSA9IGJpbmQuYmluZChiaW5kKTtcblxuZnVuY3Rpb24gYmluZEFwaShob29rLCBzdGF0ZSwgbmFtZSkge1xuICBjb25zdCByZW1vdmVIb29rUmVmID0gYmluZGFibGUocmVtb3ZlSG9vaywgbnVsbCkuYXBwbHkoXG4gICAgbnVsbCxcbiAgICBuYW1lID8gW3N0YXRlLCBuYW1lXSA6IFtzdGF0ZV1cbiAgKTtcbiAgaG9vay5hcGkgPSB7IHJlbW92ZTogcmVtb3ZlSG9va1JlZiB9O1xuICBob29rLnJlbW92ZSA9IHJlbW92ZUhvb2tSZWY7XG4gIFtcImJlZm9yZVwiLCBcImVycm9yXCIsIFwiYWZ0ZXJcIiwgXCJ3cmFwXCJdLmZvckVhY2goKGtpbmQpID0+IHtcbiAgICBjb25zdCBhcmdzID0gbmFtZSA/IFtzdGF0ZSwga2luZCwgbmFtZV0gOiBbc3RhdGUsIGtpbmRdO1xuICAgIGhvb2tba2luZF0gPSBob29rLmFwaVtraW5kXSA9IGJpbmRhYmxlKGFkZEhvb2ssIG51bGwpLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gU2luZ3VsYXIoKSB7XG4gIGNvbnN0IHNpbmd1bGFySG9va05hbWUgPSBTeW1ib2woXCJTaW5ndWxhclwiKTtcbiAgY29uc3Qgc2luZ3VsYXJIb29rU3RhdGUgPSB7XG4gICAgcmVnaXN0cnk6IHt9LFxuICB9O1xuICBjb25zdCBzaW5ndWxhckhvb2sgPSByZWdpc3Rlci5iaW5kKG51bGwsIHNpbmd1bGFySG9va1N0YXRlLCBzaW5ndWxhckhvb2tOYW1lKTtcbiAgYmluZEFwaShzaW5ndWxhckhvb2ssIHNpbmd1bGFySG9va1N0YXRlLCBzaW5ndWxhckhvb2tOYW1lKTtcbiAgcmV0dXJuIHNpbmd1bGFySG9vaztcbn1cblxuZnVuY3Rpb24gQ29sbGVjdGlvbigpIHtcbiAgY29uc3Qgc3RhdGUgPSB7XG4gICAgcmVnaXN0cnk6IHt9LFxuICB9O1xuXG4gIGNvbnN0IGhvb2sgPSByZWdpc3Rlci5iaW5kKG51bGwsIHN0YXRlKTtcbiAgYmluZEFwaShob29rLCBzdGF0ZSk7XG5cbiAgcmV0dXJuIGhvb2s7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHsgU2luZ3VsYXIsIENvbGxlY3Rpb24gfTtcbiIsIi8vIHBrZy9kaXN0LXNyYy9kZWZhdWx0cy5qc1xuaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMC4wLjAtZGV2ZWxvcG1lbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG52YXIgdXNlckFnZW50ID0gYG9jdG9raXQtZW5kcG9pbnQuanMvJHtWRVJTSU9OfSAke2dldFVzZXJBZ2VudCgpfWA7XG52YXIgREVGQVVMVFMgPSB7XG4gIG1ldGhvZDogXCJHRVRcIixcbiAgYmFzZVVybDogXCJodHRwczovL2FwaS5naXRodWIuY29tXCIsXG4gIGhlYWRlcnM6IHtcbiAgICBhY2NlcHQ6IFwiYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytqc29uXCIsXG4gICAgXCJ1c2VyLWFnZW50XCI6IHVzZXJBZ2VudFxuICB9LFxuICBtZWRpYVR5cGU6IHtcbiAgICBmb3JtYXQ6IFwiXCJcbiAgfVxufTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvbG93ZXJjYXNlLWtleXMuanNcbmZ1bmN0aW9uIGxvd2VyY2FzZUtleXMob2JqZWN0KSB7XG4gIGlmICghb2JqZWN0KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLnJlZHVjZSgobmV3T2JqLCBrZXkpID0+IHtcbiAgICBuZXdPYmpba2V5LnRvTG93ZXJDYXNlKCldID0gb2JqZWN0W2tleV07XG4gICAgcmV0dXJuIG5ld09iajtcbiAgfSwge30pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9pcy1wbGFpbi1vYmplY3QuanNcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbClcbiAgICByZXR1cm4gZmFsc2U7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiKVxuICAgIHJldHVybiBmYWxzZTtcbiAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpXG4gICAgcmV0dXJuIHRydWU7XG4gIGNvbnN0IEN0b3IgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvdG8sIFwiY29uc3RydWN0b3JcIikgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmIEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKEN0b3IpID09PSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCh2YWx1ZSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL21lcmdlLWRlZXAuanNcbmZ1bmN0aW9uIG1lcmdlRGVlcChkZWZhdWx0cywgb3B0aW9ucykge1xuICBjb25zdCByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cyk7XG4gIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG9wdGlvbnNba2V5XSkpIHtcbiAgICAgIGlmICghKGtleSBpbiBkZWZhdWx0cykpXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtrZXldOiBvcHRpb25zW2tleV0gfSk7XG4gICAgICBlbHNlXG4gICAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2VEZWVwKGRlZmF1bHRzW2tleV0sIG9wdGlvbnNba2V5XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtrZXldOiBvcHRpb25zW2tleV0gfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvcmVtb3ZlLXVuZGVmaW5lZC1wcm9wZXJ0aWVzLmpzXG5mdW5jdGlvbiByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9iaikge1xuICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICBpZiAob2JqW2tleV0gPT09IHZvaWQgMCkge1xuICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvbWVyZ2UuanNcbmZ1bmN0aW9uIG1lcmdlKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHJvdXRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgbGV0IFttZXRob2QsIHVybF0gPSByb3V0ZS5zcGxpdChcIiBcIik7XG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24odXJsID8geyBtZXRob2QsIHVybCB9IDogeyB1cmw6IG1ldGhvZCB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcm91dGUpO1xuICB9XG4gIG9wdGlvbnMuaGVhZGVycyA9IGxvd2VyY2FzZUtleXMob3B0aW9ucy5oZWFkZXJzKTtcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zKTtcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zLmhlYWRlcnMpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0gbWVyZ2VEZWVwKGRlZmF1bHRzIHx8IHt9LCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMudXJsID09PSBcIi9ncmFwaHFsXCIpIHtcbiAgICBpZiAoZGVmYXVsdHMgJiYgZGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzPy5sZW5ndGgpIHtcbiAgICAgIG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzID0gZGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzLmZpbHRlcihcbiAgICAgICAgKHByZXZpZXcpID0+ICFtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cy5pbmNsdWRlcyhwcmV2aWV3KVxuICAgICAgKS5jb25jYXQobWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MpO1xuICAgIH1cbiAgICBtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyA9IChtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyB8fCBbXSkubWFwKChwcmV2aWV3KSA9PiBwcmV2aWV3LnJlcGxhY2UoLy1wcmV2aWV3LywgXCJcIikpO1xuICB9XG4gIHJldHVybiBtZXJnZWRPcHRpb25zO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9hZGQtcXVlcnktcGFyYW1ldGVycy5qc1xuZnVuY3Rpb24gYWRkUXVlcnlQYXJhbWV0ZXJzKHVybCwgcGFyYW1ldGVycykge1xuICBjb25zdCBzZXBhcmF0b3IgPSAvXFw/Ly50ZXN0KHVybCkgPyBcIiZcIiA6IFwiP1wiO1xuICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpO1xuICBpZiAobmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICByZXR1cm4gdXJsICsgc2VwYXJhdG9yICsgbmFtZXMubWFwKChuYW1lKSA9PiB7XG4gICAgaWYgKG5hbWUgPT09IFwicVwiKSB7XG4gICAgICByZXR1cm4gXCJxPVwiICsgcGFyYW1ldGVycy5xLnNwbGl0KFwiK1wiKS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKFwiK1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIGAke25hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlcnNbbmFtZV0pfWA7XG4gIH0pLmpvaW4oXCImXCIpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9leHRyYWN0LXVybC12YXJpYWJsZS1uYW1lcy5qc1xudmFyIHVybFZhcmlhYmxlUmVnZXggPSAvXFx7W159XStcXH0vZztcbmZ1bmN0aW9uIHJlbW92ZU5vbkNoYXJzKHZhcmlhYmxlTmFtZSkge1xuICByZXR1cm4gdmFyaWFibGVOYW1lLnJlcGxhY2UoL15cXFcrfFxcVyskL2csIFwiXCIpLnNwbGl0KC8sLyk7XG59XG5mdW5jdGlvbiBleHRyYWN0VXJsVmFyaWFibGVOYW1lcyh1cmwpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHVybC5tYXRjaCh1cmxWYXJpYWJsZVJlZ2V4KTtcbiAgaWYgKCFtYXRjaGVzKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBtYXRjaGVzLm1hcChyZW1vdmVOb25DaGFycykucmVkdWNlKChhLCBiKSA9PiBhLmNvbmNhdChiKSwgW10pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9vbWl0LmpzXG5mdW5jdGlvbiBvbWl0KG9iamVjdCwga2V5c1RvT21pdCkge1xuICBjb25zdCByZXN1bHQgPSB7IF9fcHJvdG9fXzogbnVsbCB9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmplY3QpKSB7XG4gICAgaWYgKGtleXNUb09taXQuaW5kZXhPZihrZXkpID09PSAtMSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvdXJsLXRlbXBsYXRlLmpzXG5mdW5jdGlvbiBlbmNvZGVSZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgvKCVbMC05QS1GYS1mXXsyfSkvZykubWFwKGZ1bmN0aW9uKHBhcnQpIHtcbiAgICBpZiAoIS8lWzAtOUEtRmEtZl0vLnRlc3QocGFydCkpIHtcbiAgICAgIHBhcnQgPSBlbmNvZGVVUkkocGFydCkucmVwbGFjZSgvJTVCL2csIFwiW1wiKS5yZXBsYWNlKC8lNUQvZywgXCJdXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcGFydDtcbiAgfSkuam9pbihcIlwiKTtcbn1cbmZ1bmN0aW9uIGVuY29kZVVucmVzZXJ2ZWQoc3RyKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKSpdL2csIGZ1bmN0aW9uKGMpIHtcbiAgICByZXR1cm4gXCIlXCIgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlLCBrZXkpIHtcbiAgdmFsdWUgPSBvcGVyYXRvciA9PT0gXCIrXCIgfHwgb3BlcmF0b3IgPT09IFwiI1wiID8gZW5jb2RlUmVzZXJ2ZWQodmFsdWUpIDogZW5jb2RlVW5yZXNlcnZlZCh2YWx1ZSk7XG4gIGlmIChrZXkpIHtcbiAgICByZXR1cm4gZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIgKyB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZvaWQgMCAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpIHtcbiAgcmV0dXJuIG9wZXJhdG9yID09PSBcIjtcIiB8fCBvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiO1xufVxuZnVuY3Rpb24gZ2V0VmFsdWVzKGNvbnRleHQsIG9wZXJhdG9yLCBrZXksIG1vZGlmaWVyKSB7XG4gIHZhciB2YWx1ZSA9IGNvbnRleHRba2V5XSwgcmVzdWx0ID0gW107XG4gIGlmIChpc0RlZmluZWQodmFsdWUpICYmIHZhbHVlICE9PSBcIlwiKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgaWYgKG1vZGlmaWVyICYmIG1vZGlmaWVyICE9PSBcIipcIikge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBwYXJzZUludChtb2RpZmllciwgMTApKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIilcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtb2RpZmllciA9PT0gXCIqXCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUyLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IFwiXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodmFsdWVba10pKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZVtrXSwgaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0bXAgPSBbXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZTIpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlW2tdKSkge1xuICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVVbnJlc2VydmVkKGspKTtcbiAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNLZXlPcGVyYXRvcihvcGVyYXRvcikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodG1wLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKG9wZXJhdG9yID09PSBcIjtcIikge1xuICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIlwiICYmIChvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiKSkge1xuICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFwiXCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gcGFyc2VVcmwodGVtcGxhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICBleHBhbmQ6IGV4cGFuZC5iaW5kKG51bGwsIHRlbXBsYXRlKVxuICB9O1xufVxuZnVuY3Rpb24gZXhwYW5kKHRlbXBsYXRlLCBjb250ZXh0KSB7XG4gIHZhciBvcGVyYXRvcnMgPSBbXCIrXCIsIFwiI1wiLCBcIi5cIiwgXCIvXCIsIFwiO1wiLCBcIj9cIiwgXCImXCJdO1xuICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoXG4gICAgL1xceyhbXlxce1xcfV0rKVxcfXwoW15cXHtcXH1dKykvZyxcbiAgICBmdW5jdGlvbihfLCBleHByZXNzaW9uLCBsaXRlcmFsKSB7XG4gICAgICBpZiAoZXhwcmVzc2lvbikge1xuICAgICAgICBsZXQgb3BlcmF0b3IgPSBcIlwiO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKG9wZXJhdG9ycy5pbmRleE9mKGV4cHJlc3Npb24uY2hhckF0KDApKSAhPT0gLTEpIHtcbiAgICAgICAgICBvcGVyYXRvciA9IGV4cHJlc3Npb24uY2hhckF0KDApO1xuICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgICAgICBleHByZXNzaW9uLnNwbGl0KC8sL2cpLmZvckVhY2goZnVuY3Rpb24odmFyaWFibGUpIHtcbiAgICAgICAgICB2YXIgdG1wID0gLyhbXjpcXCpdKikoPzo6KFxcZCspfChcXCopKT8vLmV4ZWModmFyaWFibGUpO1xuICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwgdG1wWzFdLCB0bXBbMl0gfHwgdG1wWzNdKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3BlcmF0b3IgJiYgb3BlcmF0b3IgIT09IFwiK1wiKSB7XG4gICAgICAgICAgdmFyIHNlcGFyYXRvciA9IFwiLFwiO1xuICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9IFwiJlwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgIT09IFwiI1wiKSB7XG4gICAgICAgICAgICBzZXBhcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICh2YWx1ZXMubGVuZ3RoICE9PSAwID8gb3BlcmF0b3IgOiBcIlwiKSArIHZhbHVlcy5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlcy5qb2luKFwiLFwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZVJlc2VydmVkKGxpdGVyYWwpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbiAgaWYgKHRlbXBsYXRlID09PSBcIi9cIikge1xuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuICB9XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9wYXJzZS5qc1xuZnVuY3Rpb24gcGFyc2Uob3B0aW9ucykge1xuICBsZXQgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QudG9VcHBlckNhc2UoKTtcbiAgbGV0IHVybCA9IChvcHRpb25zLnVybCB8fCBcIi9cIikucmVwbGFjZSgvOihbYS16XVxcdyspL2csIFwieyQxfVwiKTtcbiAgbGV0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmhlYWRlcnMpO1xuICBsZXQgYm9keTtcbiAgbGV0IHBhcmFtZXRlcnMgPSBvbWl0KG9wdGlvbnMsIFtcbiAgICBcIm1ldGhvZFwiLFxuICAgIFwiYmFzZVVybFwiLFxuICAgIFwidXJsXCIsXG4gICAgXCJoZWFkZXJzXCIsXG4gICAgXCJyZXF1ZXN0XCIsXG4gICAgXCJtZWRpYVR5cGVcIlxuICBdKTtcbiAgY29uc3QgdXJsVmFyaWFibGVOYW1lcyA9IGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCk7XG4gIHVybCA9IHBhcnNlVXJsKHVybCkuZXhwYW5kKHBhcmFtZXRlcnMpO1xuICBpZiAoIS9eaHR0cC8udGVzdCh1cmwpKSB7XG4gICAgdXJsID0gb3B0aW9ucy5iYXNlVXJsICsgdXJsO1xuICB9XG4gIGNvbnN0IG9taXR0ZWRQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob3B0aW9ucykuZmlsdGVyKChvcHRpb24pID0+IHVybFZhcmlhYmxlTmFtZXMuaW5jbHVkZXMob3B0aW9uKSkuY29uY2F0KFwiYmFzZVVybFwiKTtcbiAgY29uc3QgcmVtYWluaW5nUGFyYW1ldGVycyA9IG9taXQocGFyYW1ldGVycywgb21pdHRlZFBhcmFtZXRlcnMpO1xuICBjb25zdCBpc0JpbmFyeVJlcXVlc3QgPSAvYXBwbGljYXRpb25cXC9vY3RldC1zdHJlYW0vaS50ZXN0KGhlYWRlcnMuYWNjZXB0KTtcbiAgaWYgKCFpc0JpbmFyeVJlcXVlc3QpIHtcbiAgICBpZiAob3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0KSB7XG4gICAgICBoZWFkZXJzLmFjY2VwdCA9IGhlYWRlcnMuYWNjZXB0LnNwbGl0KC8sLykubWFwKFxuICAgICAgICAoZm9ybWF0KSA9PiBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAvYXBwbGljYXRpb25cXC92bmQoXFwuXFx3KykoXFwudjMpPyhcXC5cXHcrKT8oXFwranNvbik/JC8sXG4gICAgICAgICAgYGFwcGxpY2F0aW9uL3ZuZCQxJDIuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YFxuICAgICAgICApXG4gICAgICApLmpvaW4oXCIsXCIpO1xuICAgIH1cbiAgICBpZiAodXJsLmVuZHNXaXRoKFwiL2dyYXBocWxcIikpIHtcbiAgICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHByZXZpZXdzRnJvbUFjY2VwdEhlYWRlciA9IGhlYWRlcnMuYWNjZXB0Lm1hdGNoKC9bXFx3LV0rKD89LXByZXZpZXcpL2cpIHx8IFtdO1xuICAgICAgICBoZWFkZXJzLmFjY2VwdCA9IHByZXZpZXdzRnJvbUFjY2VwdEhlYWRlci5jb25jYXQob3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MpLm1hcCgocHJldmlldykgPT4ge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IG9wdGlvbnMubWVkaWFUeXBlLmZvcm1hdCA/IGAuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YCA6IFwiK2pzb25cIjtcbiAgICAgICAgICByZXR1cm4gYGFwcGxpY2F0aW9uL3ZuZC5naXRodWIuJHtwcmV2aWV3fS1wcmV2aWV3JHtmb3JtYXR9YDtcbiAgICAgICAgfSkuam9pbihcIixcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChbXCJHRVRcIiwgXCJIRUFEXCJdLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICB1cmwgPSBhZGRRdWVyeVBhcmFtZXRlcnModXJsLCByZW1haW5pbmdQYXJhbWV0ZXJzKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoXCJkYXRhXCIgaW4gcmVtYWluaW5nUGFyYW1ldGVycykge1xuICAgICAgYm9keSA9IHJlbWFpbmluZ1BhcmFtZXRlcnMuZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHJlbWFpbmluZ1BhcmFtZXRlcnMpLmxlbmd0aCkge1xuICAgICAgICBib2R5ID0gcmVtYWluaW5nUGFyYW1ldGVycztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCFoZWFkZXJzW1wiY29udGVudC10eXBlXCJdICYmIHR5cGVvZiBib2R5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiO1xuICB9XG4gIGlmIChbXCJQQVRDSFwiLCBcIlBVVFwiXS5pbmNsdWRlcyhtZXRob2QpICYmIHR5cGVvZiBib2R5ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgYm9keSA9IFwiXCI7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAgeyBtZXRob2QsIHVybCwgaGVhZGVycyB9LFxuICAgIHR5cGVvZiBib2R5ICE9PSBcInVuZGVmaW5lZFwiID8geyBib2R5IH0gOiBudWxsLFxuICAgIG9wdGlvbnMucmVxdWVzdCA/IHsgcmVxdWVzdDogb3B0aW9ucy5yZXF1ZXN0IH0gOiBudWxsXG4gICk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9lbmRwb2ludC13aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiBlbmRwb2ludFdpdGhEZWZhdWx0cyhkZWZhdWx0cywgcm91dGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHBhcnNlKG1lcmdlKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuZnVuY3Rpb24gd2l0aERlZmF1bHRzKG9sZERlZmF1bHRzLCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBERUZBVUxUUzIgPSBtZXJnZShvbGREZWZhdWx0cywgbmV3RGVmYXVsdHMpO1xuICBjb25zdCBlbmRwb2ludDIgPSBlbmRwb2ludFdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIERFRkFVTFRTMik7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKGVuZHBvaW50Miwge1xuICAgIERFRkFVTFRTOiBERUZBVUxUUzIsXG4gICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIERFRkFVTFRTMiksXG4gICAgbWVyZ2U6IG1lcmdlLmJpbmQobnVsbCwgREVGQVVMVFMyKSxcbiAgICBwYXJzZVxuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZW5kcG9pbnQgPSB3aXRoRGVmYXVsdHMobnVsbCwgREVGQVVMVFMpO1xuZXhwb3J0IHtcbiAgZW5kcG9pbnRcbn07XG4iLCJjbGFzcyBSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIG5hbWU7XG4gIC8qKlxuICAgKiBodHRwIHN0YXR1cyBjb2RlXG4gICAqL1xuICBzdGF0dXM7XG4gIC8qKlxuICAgKiBSZXF1ZXN0IG9wdGlvbnMgdGhhdCBsZWFkIHRvIHRoZSBlcnJvci5cbiAgICovXG4gIHJlcXVlc3Q7XG4gIC8qKlxuICAgKiBSZXNwb25zZSBvYmplY3QgaWYgYSByZXNwb25zZSB3YXMgcmVjZWl2ZWRcbiAgICovXG4gIHJlc3BvbnNlO1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBzdGF0dXNDb2RlLCBvcHRpb25zKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9XG4gICAgdGhpcy5uYW1lID0gXCJIdHRwRXJyb3JcIjtcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1c0NvZGU7XG4gICAgaWYgKFwicmVzcG9uc2VcIiBpbiBvcHRpb25zKSB7XG4gICAgICB0aGlzLnJlc3BvbnNlID0gb3B0aW9ucy5yZXNwb25zZTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdENvcHkgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnJlcXVlc3QpO1xuICAgIGlmIChvcHRpb25zLnJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICByZXF1ZXN0Q29weS5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMsIHtcbiAgICAgICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbi5yZXBsYWNlKFxuICAgICAgICAgIC8gLiokLyxcbiAgICAgICAgICBcIiBbUkVEQUNURURdXCJcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJlcXVlc3RDb3B5LnVybCA9IHJlcXVlc3RDb3B5LnVybC5yZXBsYWNlKC9cXGJjbGllbnRfc2VjcmV0PVxcdysvZywgXCJjbGllbnRfc2VjcmV0PVtSRURBQ1RFRF1cIikucmVwbGFjZSgvXFxiYWNjZXNzX3Rva2VuPVxcdysvZywgXCJhY2Nlc3NfdG9rZW49W1JFREFDVEVEXVwiKTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0Q29weTtcbiAgfVxufVxuZXhwb3J0IHtcbiAgUmVxdWVzdEVycm9yXG59O1xuIiwiLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG5pbXBvcnQgeyBlbmRwb2ludCB9IGZyb20gXCJAb2N0b2tpdC9lbmRwb2ludFwiO1xuaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMC4wLjAtZGV2ZWxvcG1lbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2lzLXBsYWluLW9iamVjdC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgIT09IFwiW29iamVjdCBPYmplY3RdXCIpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbClcbiAgICByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgQ3RvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwoQ3RvcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKHZhbHVlKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbmltcG9ydCB7IFJlcXVlc3RFcnJvciB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9nZXQtYnVmZmVyLXJlc3BvbnNlLmpzXG5mdW5jdGlvbiBnZXRCdWZmZXJSZXNwb25zZShyZXNwb25zZSkge1xuICByZXR1cm4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbmZ1bmN0aW9uIGZldGNoV3JhcHBlcihyZXF1ZXN0T3B0aW9ucykge1xuICBjb25zdCBsb2cgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0ICYmIHJlcXVlc3RPcHRpb25zLnJlcXVlc3QubG9nID8gcmVxdWVzdE9wdGlvbnMucmVxdWVzdC5sb2cgOiBjb25zb2xlO1xuICBjb25zdCBwYXJzZVN1Y2Nlc3NSZXNwb25zZUJvZHkgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5wYXJzZVN1Y2Nlc3NSZXNwb25zZUJvZHkgIT09IGZhbHNlO1xuICBpZiAoaXNQbGFpbk9iamVjdChyZXF1ZXN0T3B0aW9ucy5ib2R5KSB8fCBBcnJheS5pc0FycmF5KHJlcXVlc3RPcHRpb25zLmJvZHkpKSB7XG4gICAgcmVxdWVzdE9wdGlvbnMuYm9keSA9IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RPcHRpb25zLmJvZHkpO1xuICB9XG4gIGxldCBoZWFkZXJzID0ge307XG4gIGxldCBzdGF0dXM7XG4gIGxldCB1cmw7XG4gIGxldCB7IGZldGNoIH0gPSBnbG9iYWxUaGlzO1xuICBpZiAocmVxdWVzdE9wdGlvbnMucmVxdWVzdD8uZmV0Y2gpIHtcbiAgICBmZXRjaCA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3QuZmV0Y2g7XG4gIH1cbiAgaWYgKCFmZXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiZmV0Y2ggaXMgbm90IHNldC4gUGxlYXNlIHBhc3MgYSBmZXRjaCBpbXBsZW1lbnRhdGlvbiBhcyBuZXcgT2N0b2tpdCh7IHJlcXVlc3Q6IHsgZmV0Y2ggfX0pLiBMZWFybiBtb3JlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9vY3Rva2l0L29jdG9raXQuanMvI2ZldGNoLW1pc3NpbmdcIlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGZldGNoKHJlcXVlc3RPcHRpb25zLnVybCwge1xuICAgIG1ldGhvZDogcmVxdWVzdE9wdGlvbnMubWV0aG9kLFxuICAgIGJvZHk6IHJlcXVlc3RPcHRpb25zLmJvZHksXG4gICAgcmVkaXJlY3Q6IHJlcXVlc3RPcHRpb25zLnJlcXVlc3Q/LnJlZGlyZWN0LFxuICAgIC8vIEhlYWRlciB2YWx1ZXMgbXVzdCBiZSBgc3RyaW5nYFxuICAgIGhlYWRlcnM6IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJlcXVlc3RPcHRpb25zLmhlYWRlcnMpLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gW1xuICAgICAgICBuYW1lLFxuICAgICAgICBTdHJpbmcodmFsdWUpXG4gICAgICBdKVxuICAgICksXG4gICAgc2lnbmFsOiByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5zaWduYWwsXG4gICAgLy8gZHVwbGV4IG11c3QgYmUgc2V0IGlmIHJlcXVlc3QuYm9keSBpcyBSZWFkYWJsZVN0cmVhbSBvciBBc3luYyBJdGVyYWJsZXMuXG4gICAgLy8gU2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdGluaXQtZHVwbGV4LlxuICAgIC4uLnJlcXVlc3RPcHRpb25zLmJvZHkgJiYgeyBkdXBsZXg6IFwiaGFsZlwiIH1cbiAgfSkudGhlbihhc3luYyAocmVzcG9uc2UpID0+IHtcbiAgICB1cmwgPSByZXNwb25zZS51cmw7XG4gICAgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIGZvciAoY29uc3Qga2V5QW5kVmFsdWUgb2YgcmVzcG9uc2UuaGVhZGVycykge1xuICAgICAgaGVhZGVyc1trZXlBbmRWYWx1ZVswXV0gPSBrZXlBbmRWYWx1ZVsxXTtcbiAgICB9XG4gICAgaWYgKFwiZGVwcmVjYXRpb25cIiBpbiBoZWFkZXJzKSB7XG4gICAgICBjb25zdCBtYXRjaGVzID0gaGVhZGVycy5saW5rICYmIGhlYWRlcnMubGluay5tYXRjaCgvPChbXj5dKyk+OyByZWw9XCJkZXByZWNhdGlvblwiLyk7XG4gICAgICBjb25zdCBkZXByZWNhdGlvbkxpbmsgPSBtYXRjaGVzICYmIG1hdGNoZXMucG9wKCk7XG4gICAgICBsb2cud2FybihcbiAgICAgICAgYFtAb2N0b2tpdC9yZXF1ZXN0XSBcIiR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3JlcXVlc3RPcHRpb25zLnVybH1cIiBpcyBkZXByZWNhdGVkLiBJdCBpcyBzY2hlZHVsZWQgdG8gYmUgcmVtb3ZlZCBvbiAke2hlYWRlcnMuc3Vuc2V0fSR7ZGVwcmVjYXRpb25MaW5rID8gYC4gU2VlICR7ZGVwcmVjYXRpb25MaW5rfWAgOiBcIlwifWBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGF0dXMgPT09IDIwNCB8fCBzdGF0dXMgPT09IDIwNSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdE9wdGlvbnMubWV0aG9kID09PSBcIkhFQURcIikge1xuICAgICAgaWYgKHN0YXR1cyA8IDQwMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEVycm9yKHJlc3BvbnNlLnN0YXR1c1RleHQsIHN0YXR1cywge1xuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBkYXRhOiB2b2lkIDBcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzID09PSAzMDQpIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IoXCJOb3QgbW9kaWZpZWRcIiwgc3RhdHVzLCB7XG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIGRhdGE6IGF3YWl0IGdldFJlc3BvbnNlRGF0YShyZXNwb25zZSlcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzID49IDQwMCkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdldFJlc3BvbnNlRGF0YShyZXNwb25zZSk7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBSZXF1ZXN0RXJyb3IodG9FcnJvck1lc3NhZ2UoZGF0YSksIHN0YXR1cywge1xuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBkYXRhXG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ID8gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKSA6IHJlc3BvbnNlLmJvZHk7XG4gIH0pLnRoZW4oKGRhdGEpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzLFxuICAgICAgdXJsLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGRhdGFcbiAgICB9O1xuICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBSZXF1ZXN0RXJyb3IpXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICBlbHNlIGlmIChlcnJvci5uYW1lID09PSBcIkFib3J0RXJyb3JcIilcbiAgICAgIHRocm93IGVycm9yO1xuICAgIGxldCBtZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcbiAgICBpZiAoZXJyb3IubmFtZSA9PT0gXCJUeXBlRXJyb3JcIiAmJiBcImNhdXNlXCIgaW4gZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5jYXVzZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIG1lc3NhZ2UgPSBlcnJvci5jYXVzZS5tZXNzYWdlO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IuY2F1c2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgbWVzc2FnZSA9IGVycm9yLmNhdXNlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgUmVxdWVzdEVycm9yKG1lc3NhZ2UsIDUwMCwge1xuICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICB9KTtcbiAgfSk7XG59XG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpIHtcbiAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcbiAgaWYgKC9hcHBsaWNhdGlvblxcL2pzb24vLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiByZXNwb25zZS50ZXh0KCkpLmNhdGNoKCgpID0+IFwiXCIpO1xuICB9XG4gIGlmICghY29udGVudFR5cGUgfHwgL150ZXh0XFwvfGNoYXJzZXQ9dXRmLTgkLy50ZXN0KGNvbnRlbnRUeXBlKSkge1xuICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gIH1cbiAgcmV0dXJuIGdldEJ1ZmZlclJlc3BvbnNlKHJlc3BvbnNlKTtcbn1cbmZ1bmN0aW9uIHRvRXJyb3JNZXNzYWdlKGRhdGEpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKVxuICAgIHJldHVybiBkYXRhO1xuICBsZXQgc3VmZml4O1xuICBpZiAoXCJkb2N1bWVudGF0aW9uX3VybFwiIGluIGRhdGEpIHtcbiAgICBzdWZmaXggPSBgIC0gJHtkYXRhLmRvY3VtZW50YXRpb25fdXJsfWA7XG4gIH0gZWxzZSB7XG4gICAgc3VmZml4ID0gXCJcIjtcbiAgfVxuICBpZiAoXCJtZXNzYWdlXCIgaW4gZGF0YSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEuZXJyb3JzKSkge1xuICAgICAgcmV0dXJuIGAke2RhdGEubWVzc2FnZX06ICR7ZGF0YS5lcnJvcnMubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKFwiLCBcIil9JHtzdWZmaXh9YDtcbiAgICB9XG4gICAgcmV0dXJuIGAke2RhdGEubWVzc2FnZX0ke3N1ZmZpeH1gO1xuICB9XG4gIHJldHVybiBgVW5rbm93biBlcnJvcjogJHtKU09OLnN0cmluZ2lmeShkYXRhKX1gO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuZnVuY3Rpb24gd2l0aERlZmF1bHRzKG9sZEVuZHBvaW50LCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBlbmRwb2ludDIgPSBvbGRFbmRwb2ludC5kZWZhdWx0cyhuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IG5ld0FwaSA9IGZ1bmN0aW9uKHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgZW5kcG9pbnRPcHRpb25zID0gZW5kcG9pbnQyLm1lcmdlKHJvdXRlLCBwYXJhbWV0ZXJzKTtcbiAgICBpZiAoIWVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0IHx8ICFlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKSB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKGVuZHBvaW50Mi5wYXJzZShlbmRwb2ludE9wdGlvbnMpKTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdDIgPSAocm91dGUyLCBwYXJhbWV0ZXJzMikgPT4ge1xuICAgICAgcmV0dXJuIGZldGNoV3JhcHBlcihcbiAgICAgICAgZW5kcG9pbnQyLnBhcnNlKGVuZHBvaW50Mi5tZXJnZShyb3V0ZTIsIHBhcmFtZXRlcnMyKSlcbiAgICAgICk7XG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHJlcXVlc3QyLCB7XG4gICAgICBlbmRwb2ludDogZW5kcG9pbnQyLFxuICAgICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIGVuZHBvaW50MilcbiAgICB9KTtcbiAgICByZXR1cm4gZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QuaG9vayhyZXF1ZXN0MiwgZW5kcG9pbnRPcHRpb25zKTtcbiAgfTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3QXBpLCB7XG4gICAgZW5kcG9pbnQ6IGVuZHBvaW50MixcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQyKVxuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgcmVxdWVzdCA9IHdpdGhEZWZhdWx0cyhlbmRwb2ludCwge1xuICBoZWFkZXJzOiB7XG4gICAgXCJ1c2VyLWFnZW50XCI6IGBvY3Rva2l0LXJlcXVlc3QuanMvJHtWRVJTSU9OfSAke2dldFVzZXJBZ2VudCgpfWBcbiAgfVxufSk7XG5leHBvcnQge1xuICByZXF1ZXN0XG59O1xuIiwiLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG5pbXBvcnQgeyByZXF1ZXN0IH0gZnJvbSBcIkBvY3Rva2l0L3JlcXVlc3RcIjtcbmltcG9ydCB7IGdldFVzZXJBZ2VudCB9IGZyb20gXCJ1bml2ZXJzYWwtdXNlci1hZ2VudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvdmVyc2lvbi5qc1xudmFyIFZFUlNJT04gPSBcIjAuMC4wLWRldmVsb3BtZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5pbXBvcnQgeyByZXF1ZXN0IGFzIFJlcXVlc3QyIH0gZnJvbSBcIkBvY3Rva2l0L3JlcXVlc3RcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2dyYXBocWwuanNcbmltcG9ydCB7IHJlcXVlc3QgYXMgUmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9lcnJvci5qc1xuZnVuY3Rpb24gX2J1aWxkTWVzc2FnZUZvclJlc3BvbnNlRXJyb3JzKGRhdGEpIHtcbiAgcmV0dXJuIGBSZXF1ZXN0IGZhaWxlZCBkdWUgdG8gZm9sbG93aW5nIHJlc3BvbnNlIGVycm9yczpcbmAgKyBkYXRhLmVycm9ycy5tYXAoKGUpID0+IGAgLSAke2UubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xufVxudmFyIEdyYXBocWxSZXNwb25zZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlcXVlc3QyLCBoZWFkZXJzLCByZXNwb25zZSkge1xuICAgIHN1cGVyKF9idWlsZE1lc3NhZ2VGb3JSZXNwb25zZUVycm9ycyhyZXNwb25zZSkpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3QyO1xuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgIHRoaXMuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzO1xuICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9XG4gIH1cbiAgbmFtZSA9IFwiR3JhcGhxbFJlc3BvbnNlRXJyb3JcIjtcbiAgZXJyb3JzO1xuICBkYXRhO1xufTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2dyYXBocWwuanNcbnZhciBOT05fVkFSSUFCTEVfT1BUSU9OUyA9IFtcbiAgXCJtZXRob2RcIixcbiAgXCJiYXNlVXJsXCIsXG4gIFwidXJsXCIsXG4gIFwiaGVhZGVyc1wiLFxuICBcInJlcXVlc3RcIixcbiAgXCJxdWVyeVwiLFxuICBcIm1lZGlhVHlwZVwiXG5dO1xudmFyIEZPUkJJRERFTl9WQVJJQUJMRV9PUFRJT05TID0gW1wicXVlcnlcIiwgXCJtZXRob2RcIiwgXCJ1cmxcIl07XG52YXIgR0hFU19WM19TVUZGSVhfUkVHRVggPSAvXFwvYXBpXFwvdjNcXC8/JC87XG5mdW5jdGlvbiBncmFwaHFsKHJlcXVlc3QyLCBxdWVyeSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCIgJiYgXCJxdWVyeVwiIGluIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgbmV3IEVycm9yKGBbQG9jdG9raXQvZ3JhcGhxbF0gXCJxdWVyeVwiIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmlhYmxlIG5hbWVgKVxuICAgICAgKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucykge1xuICAgICAgaWYgKCFGT1JCSURERU5fVkFSSUFCTEVfT1BUSU9OUy5pbmNsdWRlcyhrZXkpKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgIGBbQG9jdG9raXQvZ3JhcGhxbF0gXCIke2tleX1cIiBjYW5ub3QgYmUgdXNlZCBhcyB2YXJpYWJsZSBuYW1lYFxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBjb25zdCBwYXJzZWRPcHRpb25zID0gdHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiID8gT2JqZWN0LmFzc2lnbih7IHF1ZXJ5IH0sIG9wdGlvbnMpIDogcXVlcnk7XG4gIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gT2JqZWN0LmtleXMoXG4gICAgcGFyc2VkT3B0aW9uc1xuICApLnJlZHVjZSgocmVzdWx0LCBrZXkpID0+IHtcbiAgICBpZiAoTk9OX1ZBUklBQkxFX09QVElPTlMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBwYXJzZWRPcHRpb25zW2tleV07XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBpZiAoIXJlc3VsdC52YXJpYWJsZXMpIHtcbiAgICAgIHJlc3VsdC52YXJpYWJsZXMgPSB7fTtcbiAgICB9XG4gICAgcmVzdWx0LnZhcmlhYmxlc1trZXldID0gcGFyc2VkT3B0aW9uc1trZXldO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIHt9KTtcbiAgY29uc3QgYmFzZVVybCA9IHBhcnNlZE9wdGlvbnMuYmFzZVVybCB8fCByZXF1ZXN0Mi5lbmRwb2ludC5ERUZBVUxUUy5iYXNlVXJsO1xuICBpZiAoR0hFU19WM19TVUZGSVhfUkVHRVgudGVzdChiYXNlVXJsKSkge1xuICAgIHJlcXVlc3RPcHRpb25zLnVybCA9IGJhc2VVcmwucmVwbGFjZShHSEVTX1YzX1NVRkZJWF9SRUdFWCwgXCIvYXBpL2dyYXBocWxcIik7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3QyKHJlcXVlc3RPcHRpb25zKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9ycykge1xuICAgICAgY29uc3QgaGVhZGVycyA9IHt9O1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVyc1trZXldO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEdyYXBocWxSZXNwb25zZUVycm9yKFxuICAgICAgICByZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgcmVzcG9uc2UuZGF0YVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YTtcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMocmVxdWVzdDIsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IG5ld1JlcXVlc3QgPSByZXF1ZXN0Mi5kZWZhdWx0cyhuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IG5ld0FwaSA9IChxdWVyeSwgb3B0aW9ucykgPT4ge1xuICAgIHJldHVybiBncmFwaHFsKG5ld1JlcXVlc3QsIHF1ZXJ5LCBvcHRpb25zKTtcbiAgfTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3QXBpLCB7XG4gICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIG5ld1JlcXVlc3QpLFxuICAgIGVuZHBvaW50OiBuZXdSZXF1ZXN0LmVuZHBvaW50XG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBncmFwaHFsMiA9IHdpdGhEZWZhdWx0cyhyZXF1ZXN0LCB7XG4gIGhlYWRlcnM6IHtcbiAgICBcInVzZXItYWdlbnRcIjogYG9jdG9raXQtZ3JhcGhxbC5qcy8ke1ZFUlNJT059ICR7Z2V0VXNlckFnZW50KCl9YFxuICB9LFxuICBtZXRob2Q6IFwiUE9TVFwiLFxuICB1cmw6IFwiL2dyYXBocWxcIlxufSk7XG5mdW5jdGlvbiB3aXRoQ3VzdG9tUmVxdWVzdChjdXN0b21SZXF1ZXN0KSB7XG4gIHJldHVybiB3aXRoRGVmYXVsdHMoY3VzdG9tUmVxdWVzdCwge1xuICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgdXJsOiBcIi9ncmFwaHFsXCJcbiAgfSk7XG59XG5leHBvcnQge1xuICBHcmFwaHFsUmVzcG9uc2VFcnJvcixcbiAgZ3JhcGhxbDIgYXMgZ3JhcGhxbCxcbiAgd2l0aEN1c3RvbVJlcXVlc3Rcbn07XG4iLCIvLyBwa2cvZGlzdC1zcmMvYXV0aC5qc1xudmFyIFJFR0VYX0lTX0lOU1RBTExBVElPTl9MRUdBQ1kgPSAvXnYxXFwuLztcbnZhciBSRUdFWF9JU19JTlNUQUxMQVRJT04gPSAvXmdoc18vO1xudmFyIFJFR0VYX0lTX1VTRVJfVE9fU0VSVkVSID0gL15naHVfLztcbmFzeW5jIGZ1bmN0aW9uIGF1dGgodG9rZW4pIHtcbiAgY29uc3QgaXNBcHAgPSB0b2tlbi5zcGxpdCgvXFwuLykubGVuZ3RoID09PSAzO1xuICBjb25zdCBpc0luc3RhbGxhdGlvbiA9IFJFR0VYX0lTX0lOU1RBTExBVElPTl9MRUdBQ1kudGVzdCh0b2tlbikgfHwgUkVHRVhfSVNfSU5TVEFMTEFUSU9OLnRlc3QodG9rZW4pO1xuICBjb25zdCBpc1VzZXJUb1NlcnZlciA9IFJFR0VYX0lTX1VTRVJfVE9fU0VSVkVSLnRlc3QodG9rZW4pO1xuICBjb25zdCB0b2tlblR5cGUgPSBpc0FwcCA/IFwiYXBwXCIgOiBpc0luc3RhbGxhdGlvbiA/IFwiaW5zdGFsbGF0aW9uXCIgOiBpc1VzZXJUb1NlcnZlciA/IFwidXNlci10by1zZXJ2ZXJcIiA6IFwib2F1dGhcIjtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcInRva2VuXCIsXG4gICAgdG9rZW4sXG4gICAgdG9rZW5UeXBlXG4gIH07XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWF1dGhvcml6YXRpb24tcHJlZml4LmpzXG5mdW5jdGlvbiB3aXRoQXV0aG9yaXphdGlvblByZWZpeCh0b2tlbikge1xuICBpZiAodG9rZW4uc3BsaXQoL1xcLi8pLmxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiBgYmVhcmVyICR7dG9rZW59YDtcbiAgfVxuICByZXR1cm4gYHRva2VuICR7dG9rZW59YDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2hvb2suanNcbmFzeW5jIGZ1bmN0aW9uIGhvb2sodG9rZW4sIHJlcXVlc3QsIHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IGVuZHBvaW50ID0gcmVxdWVzdC5lbmRwb2ludC5tZXJnZShcbiAgICByb3V0ZSxcbiAgICBwYXJhbWV0ZXJzXG4gICk7XG4gIGVuZHBvaW50LmhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IHdpdGhBdXRob3JpemF0aW9uUHJlZml4KHRva2VuKTtcbiAgcmV0dXJuIHJlcXVlc3QoZW5kcG9pbnQpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBjcmVhdGVUb2tlbkF1dGggPSBmdW5jdGlvbiBjcmVhdGVUb2tlbkF1dGgyKHRva2VuKSB7XG4gIGlmICghdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gTm8gdG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aFwiKTtcbiAgfVxuICBpZiAodHlwZW9mIHRva2VuICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gVG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aCBpcyBub3QgYSBzdHJpbmdcIlxuICAgICk7XG4gIH1cbiAgdG9rZW4gPSB0b2tlbi5yZXBsYWNlKC9eKHRva2VufGJlYXJlcikgKy9pLCBcIlwiKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYXV0aC5iaW5kKG51bGwsIHRva2VuKSwge1xuICAgIGhvb2s6IGhvb2suYmluZChudWxsLCB0b2tlbilcbiAgfSk7XG59O1xuZXhwb3J0IHtcbiAgY3JlYXRlVG9rZW5BdXRoXG59O1xuIiwiY29uc3QgVkVSU0lPTiA9IFwiNi4xLjJcIjtcbmV4cG9ydCB7XG4gIFZFUlNJT05cbn07XG4iLCJpbXBvcnQgeyBnZXRVc2VyQWdlbnQgfSBmcm9tIFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIjtcbmltcG9ydCBIb29rIGZyb20gXCJiZWZvcmUtYWZ0ZXItaG9va1wiO1xuaW1wb3J0IHsgcmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0XCI7XG5pbXBvcnQgeyB3aXRoQ3VzdG9tUmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9ncmFwaHFsXCI7XG5pbXBvcnQgeyBjcmVhdGVUb2tlbkF1dGggfSBmcm9tIFwiQG9jdG9raXQvYXV0aC10b2tlblwiO1xuaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmNvbnN0IG5vb3AgPSAoKSA9PiB7XG59O1xuY29uc3QgY29uc29sZVdhcm4gPSBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtcbmNvbnN0IGNvbnNvbGVFcnJvciA9IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtcbmNvbnN0IHVzZXJBZ2VudFRyYWlsID0gYG9jdG9raXQtY29yZS5qcy8ke1ZFUlNJT059ICR7Z2V0VXNlckFnZW50KCl9YDtcbmNsYXNzIE9jdG9raXQge1xuICBzdGF0aWMgVkVSU0lPTiA9IFZFUlNJT047XG4gIHN0YXRpYyBkZWZhdWx0cyhkZWZhdWx0cykge1xuICAgIGNvbnN0IE9jdG9raXRXaXRoRGVmYXVsdHMgPSBjbGFzcyBleHRlbmRzIHRoaXMge1xuICAgICAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gYXJnc1swXSB8fCB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0cyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgc3VwZXIoZGVmYXVsdHMob3B0aW9ucykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcihcbiAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zLnVzZXJBZ2VudCAmJiBkZWZhdWx0cy51c2VyQWdlbnQgPyB7XG4gICAgICAgICAgICAgIHVzZXJBZ2VudDogYCR7b3B0aW9ucy51c2VyQWdlbnR9ICR7ZGVmYXVsdHMudXNlckFnZW50fWBcbiAgICAgICAgICAgIH0gOiBudWxsXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE9jdG9raXRXaXRoRGVmYXVsdHM7XG4gIH1cbiAgc3RhdGljIHBsdWdpbnMgPSBbXTtcbiAgLyoqXG4gICAqIEF0dGFjaCBhIHBsdWdpbiAob3IgbWFueSkgdG8geW91ciBPY3Rva2l0IGluc3RhbmNlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBBUEkgPSBPY3Rva2l0LnBsdWdpbihwbHVnaW4xLCBwbHVnaW4yLCBwbHVnaW4zLCAuLi4pXG4gICAqL1xuICBzdGF0aWMgcGx1Z2luKC4uLm5ld1BsdWdpbnMpIHtcbiAgICBjb25zdCBjdXJyZW50UGx1Z2lucyA9IHRoaXMucGx1Z2lucztcbiAgICBjb25zdCBOZXdPY3Rva2l0ID0gY2xhc3MgZXh0ZW5kcyB0aGlzIHtcbiAgICAgIHN0YXRpYyBwbHVnaW5zID0gY3VycmVudFBsdWdpbnMuY29uY2F0KFxuICAgICAgICBuZXdQbHVnaW5zLmZpbHRlcigocGx1Z2luKSA9PiAhY3VycmVudFBsdWdpbnMuaW5jbHVkZXMocGx1Z2luKSlcbiAgICAgICk7XG4gICAgfTtcbiAgICByZXR1cm4gTmV3T2N0b2tpdDtcbiAgfVxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBob29rID0gbmV3IEhvb2suQ29sbGVjdGlvbigpO1xuICAgIGNvbnN0IHJlcXVlc3REZWZhdWx0cyA9IHtcbiAgICAgIGJhc2VVcmw6IHJlcXVlc3QuZW5kcG9pbnQuREVGQVVMVFMuYmFzZVVybCxcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgcmVxdWVzdDogT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0LCB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgaW50ZXJuYWwgdXNhZ2Ugb25seSwgbm8gbmVlZCB0byB0eXBlXG4gICAgICAgIGhvb2s6IGhvb2suYmluZChudWxsLCBcInJlcXVlc3RcIilcbiAgICAgIH0pLFxuICAgICAgbWVkaWFUeXBlOiB7XG4gICAgICAgIHByZXZpZXdzOiBbXSxcbiAgICAgICAgZm9ybWF0OiBcIlwiXG4gICAgICB9XG4gICAgfTtcbiAgICByZXF1ZXN0RGVmYXVsdHMuaGVhZGVyc1tcInVzZXItYWdlbnRcIl0gPSBvcHRpb25zLnVzZXJBZ2VudCA/IGAke29wdGlvbnMudXNlckFnZW50fSAke3VzZXJBZ2VudFRyYWlsfWAgOiB1c2VyQWdlbnRUcmFpbDtcbiAgICBpZiAob3B0aW9ucy5iYXNlVXJsKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMuYmFzZVVybCA9IG9wdGlvbnMuYmFzZVVybDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMucHJldmlld3MpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3MgPSBvcHRpb25zLnByZXZpZXdzO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50aW1lWm9uZSkge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLmhlYWRlcnNbXCJ0aW1lLXpvbmVcIl0gPSBvcHRpb25zLnRpbWVab25lO1xuICAgIH1cbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0LmRlZmF1bHRzKHJlcXVlc3REZWZhdWx0cyk7XG4gICAgdGhpcy5ncmFwaHFsID0gd2l0aEN1c3RvbVJlcXVlc3QodGhpcy5yZXF1ZXN0KS5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMubG9nID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgZGVidWc6IG5vb3AsXG4gICAgICAgIGluZm86IG5vb3AsXG4gICAgICAgIHdhcm46IGNvbnNvbGVXYXJuLFxuICAgICAgICBlcnJvcjogY29uc29sZUVycm9yXG4gICAgICB9LFxuICAgICAgb3B0aW9ucy5sb2dcbiAgICApO1xuICAgIHRoaXMuaG9vayA9IGhvb2s7XG4gICAgaWYgKCFvcHRpb25zLmF1dGhTdHJhdGVneSkge1xuICAgICAgaWYgKCFvcHRpb25zLmF1dGgpIHtcbiAgICAgICAgdGhpcy5hdXRoID0gYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgICB0eXBlOiBcInVuYXV0aGVudGljYXRlZFwiXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXV0aCA9IGNyZWF0ZVRva2VuQXV0aChvcHRpb25zLmF1dGgpO1xuICAgICAgICBob29rLndyYXAoXCJyZXF1ZXN0XCIsIGF1dGguaG9vayk7XG4gICAgICAgIHRoaXMuYXV0aCA9IGF1dGg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHsgYXV0aFN0cmF0ZWd5LCAuLi5vdGhlck9wdGlvbnMgfSA9IG9wdGlvbnM7XG4gICAgICBjb25zdCBhdXRoID0gYXV0aFN0cmF0ZWd5KFxuICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlcXVlc3Q6IHRoaXMucmVxdWVzdCxcbiAgICAgICAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICAgICAgICAvLyB3ZSBwYXNzIHRoZSBjdXJyZW50IG9jdG9raXQgaW5zdGFuY2UgYXMgd2VsbCBhcyBpdHMgY29uc3RydWN0b3Igb3B0aW9uc1xuICAgICAgICAgICAgLy8gdG8gYWxsb3cgZm9yIGF1dGhlbnRpY2F0aW9uIHN0cmF0ZWdpZXMgdGhhdCByZXR1cm4gYSBuZXcgb2N0b2tpdCBpbnN0YW5jZVxuICAgICAgICAgICAgLy8gdGhhdCBzaGFyZXMgdGhlIHNhbWUgaW50ZXJuYWwgc3RhdGUgYXMgdGhlIGN1cnJlbnQgb25lLiBUaGUgb3JpZ2luYWxcbiAgICAgICAgICAgIC8vIHJlcXVpcmVtZW50IGZvciB0aGlzIHdhcyB0aGUgXCJldmVudC1vY3Rva2l0XCIgYXV0aGVudGljYXRpb24gc3RyYXRlZ3lcbiAgICAgICAgICAgIC8vIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9ib3Qvb2N0b2tpdC1hdXRoLXByb2JvdC5cbiAgICAgICAgICAgIG9jdG9raXQ6IHRoaXMsXG4gICAgICAgICAgICBvY3Rva2l0T3B0aW9uczogb3RoZXJPcHRpb25zXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcHRpb25zLmF1dGhcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIGhvb2sud3JhcChcInJlcXVlc3RcIiwgYXV0aC5ob29rKTtcbiAgICAgIHRoaXMuYXV0aCA9IGF1dGg7XG4gICAgfVxuICAgIGNvbnN0IGNsYXNzQ29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xhc3NDb25zdHJ1Y3Rvci5wbHVnaW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGNsYXNzQ29uc3RydWN0b3IucGx1Z2luc1tpXSh0aGlzLCBvcHRpb25zKSk7XG4gICAgfVxuICB9XG4gIC8vIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3RvclxuICByZXF1ZXN0O1xuICBncmFwaHFsO1xuICBsb2c7XG4gIGhvb2s7XG4gIC8vIFRPRE86IHR5cGUgYG9jdG9raXQuYXV0aGAgYmFzZWQgb24gcGFzc2VkIG9wdGlvbnMuYXV0aFN0cmF0ZWd5XG4gIGF1dGg7XG59XG5leHBvcnQge1xuICBPY3Rva2l0XG59O1xuIiwiY29uc3QgVkVSU0lPTiA9IFwiNS4zLjBcIjtcbmV4cG9ydCB7XG4gIFZFUlNJT05cbn07XG4iLCJpbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSBcIi4vdmVyc2lvbi5qc1wiO1xuZnVuY3Rpb24gcmVxdWVzdExvZyhvY3Rva2l0KSB7XG4gIG9jdG9raXQuaG9vay53cmFwKFwicmVxdWVzdFwiLCAocmVxdWVzdCwgb3B0aW9ucykgPT4ge1xuICAgIG9jdG9raXQubG9nLmRlYnVnKFwicmVxdWVzdFwiLCBvcHRpb25zKTtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBvY3Rva2l0LnJlcXVlc3QuZW5kcG9pbnQucGFyc2Uob3B0aW9ucyk7XG4gICAgY29uc3QgcGF0aCA9IHJlcXVlc3RPcHRpb25zLnVybC5yZXBsYWNlKG9wdGlvbnMuYmFzZVVybCwgXCJcIik7XG4gICAgcmV0dXJuIHJlcXVlc3Qob3B0aW9ucykudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IHJlc3BvbnNlLmhlYWRlcnNbXCJ4LWdpdGh1Yi1yZXF1ZXN0LWlkXCJdO1xuICAgICAgb2N0b2tpdC5sb2cuaW5mbyhcbiAgICAgICAgYCR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3BhdGh9IC0gJHtyZXNwb25zZS5zdGF0dXN9IHdpdGggaWQgJHtyZXF1ZXN0SWR9IGluICR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYFxuICAgICAgKTtcbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnNbXCJ4LWdpdGh1Yi1yZXF1ZXN0LWlkXCJdIHx8IFwiVU5LTk9XTlwiO1xuICAgICAgb2N0b2tpdC5sb2cuZXJyb3IoXG4gICAgICAgIGAke3JlcXVlc3RPcHRpb25zLm1ldGhvZH0gJHtwYXRofSAtICR7ZXJyb3Iuc3RhdHVzfSB3aXRoIGlkICR7cmVxdWVzdElkfSBpbiAke0RhdGUubm93KCkgLSBzdGFydH1tc2BcbiAgICAgICk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbiAgfSk7XG59XG5yZXF1ZXN0TG9nLlZFUlNJT04gPSBWRVJTSU9OO1xuZXhwb3J0IHtcbiAgcmVxdWVzdExvZ1xufTtcbiIsIi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMTEuMy4xXCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9ub3JtYWxpemUtcGFnaW5hdGVkLWxpc3QtcmVzcG9uc2UuanNcbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhZ2luYXRlZExpc3RSZXNwb25zZShyZXNwb25zZSkge1xuICBpZiAoIXJlc3BvbnNlLmRhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVzcG9uc2UsXG4gICAgICBkYXRhOiBbXVxuICAgIH07XG4gIH1cbiAgY29uc3QgcmVzcG9uc2VOZWVkc05vcm1hbGl6YXRpb24gPSBcInRvdGFsX2NvdW50XCIgaW4gcmVzcG9uc2UuZGF0YSAmJiAhKFwidXJsXCIgaW4gcmVzcG9uc2UuZGF0YSk7XG4gIGlmICghcmVzcG9uc2VOZWVkc05vcm1hbGl6YXRpb24pXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICBjb25zdCBpbmNvbXBsZXRlUmVzdWx0cyA9IHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBjb25zdCByZXBvc2l0b3J5U2VsZWN0aW9uID0gcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgY29uc3QgdG90YWxDb3VudCA9IHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cztcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEucmVwb3NpdG9yeV9zZWxlY3Rpb247XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLnRvdGFsX2NvdW50O1xuICBjb25zdCBuYW1lc3BhY2VLZXkgPSBPYmplY3Qua2V5cyhyZXNwb25zZS5kYXRhKVswXTtcbiAgY29uc3QgZGF0YSA9IHJlc3BvbnNlLmRhdGFbbmFtZXNwYWNlS2V5XTtcbiAgcmVzcG9uc2UuZGF0YSA9IGRhdGE7XG4gIGlmICh0eXBlb2YgaW5jb21wbGV0ZVJlc3VsdHMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cyA9IGluY29tcGxldGVSZXN1bHRzO1xuICB9XG4gIGlmICh0eXBlb2YgcmVwb3NpdG9yeVNlbGVjdGlvbiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJlc3BvbnNlLmRhdGEucmVwb3NpdG9yeV9zZWxlY3Rpb24gPSByZXBvc2l0b3J5U2VsZWN0aW9uO1xuICB9XG4gIHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQgPSB0b3RhbENvdW50O1xuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pdGVyYXRvci5qc1xuZnVuY3Rpb24gaXRlcmF0b3Iob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHR5cGVvZiByb3V0ZSA9PT0gXCJmdW5jdGlvblwiID8gcm91dGUuZW5kcG9pbnQocGFyYW1ldGVycykgOiBvY3Rva2l0LnJlcXVlc3QuZW5kcG9pbnQocm91dGUsIHBhcmFtZXRlcnMpO1xuICBjb25zdCByZXF1ZXN0TWV0aG9kID0gdHlwZW9mIHJvdXRlID09PSBcImZ1bmN0aW9uXCIgPyByb3V0ZSA6IG9jdG9raXQucmVxdWVzdDtcbiAgY29uc3QgbWV0aG9kID0gb3B0aW9ucy5tZXRob2Q7XG4gIGNvbnN0IGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnM7XG4gIGxldCB1cmwgPSBvcHRpb25zLnVybDtcbiAgcmV0dXJuIHtcbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdOiAoKSA9PiAoe1xuICAgICAgYXN5bmMgbmV4dCgpIHtcbiAgICAgICAgaWYgKCF1cmwpXG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdE1ldGhvZCh7IG1ldGhvZCwgdXJsLCBoZWFkZXJzIH0pO1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRSZXNwb25zZSA9IG5vcm1hbGl6ZVBhZ2luYXRlZExpc3RSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgdXJsID0gKChub3JtYWxpemVkUmVzcG9uc2UuaGVhZGVycy5saW5rIHx8IFwiXCIpLm1hdGNoKFxuICAgICAgICAgICAgLzwoW14+XSspPjtcXHMqcmVsPVwibmV4dFwiL1xuICAgICAgICAgICkgfHwgW10pWzFdO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBub3JtYWxpemVkUmVzcG9uc2UgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzICE9PSA0MDkpXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB1cmwgPSBcIlwiO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgICAgIGRhdGE6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH07XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9wYWdpbmF0ZS5qc1xuZnVuY3Rpb24gcGFnaW5hdGUob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMsIG1hcEZuKSB7XG4gIGlmICh0eXBlb2YgcGFyYW1ldGVycyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbWFwRm4gPSBwYXJhbWV0ZXJzO1xuICAgIHBhcmFtZXRlcnMgPSB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIGdhdGhlcihcbiAgICBvY3Rva2l0LFxuICAgIFtdLFxuICAgIGl0ZXJhdG9yKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSxcbiAgICBtYXBGblxuICApO1xufVxuZnVuY3Rpb24gZ2F0aGVyKG9jdG9raXQsIHJlc3VsdHMsIGl0ZXJhdG9yMiwgbWFwRm4pIHtcbiAgcmV0dXJuIGl0ZXJhdG9yMi5uZXh0KCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgbGV0IGVhcmx5RXhpdCA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBlYXJseUV4aXQgPSB0cnVlO1xuICAgIH1cbiAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQoXG4gICAgICBtYXBGbiA/IG1hcEZuKHJlc3VsdC52YWx1ZSwgZG9uZSkgOiByZXN1bHQudmFsdWUuZGF0YVxuICAgICk7XG4gICAgaWYgKGVhcmx5RXhpdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHJldHVybiBnYXRoZXIob2N0b2tpdCwgcmVzdWx0cywgaXRlcmF0b3IyLCBtYXBGbik7XG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvY29tcG9zZS1wYWdpbmF0ZS5qc1xudmFyIGNvbXBvc2VQYWdpbmF0ZVJlc3QgPSBPYmplY3QuYXNzaWduKHBhZ2luYXRlLCB7XG4gIGl0ZXJhdG9yXG59KTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2dlbmVyYXRlZC9wYWdpbmF0aW5nLWVuZHBvaW50cy5qc1xudmFyIHBhZ2luYXRpbmdFbmRwb2ludHMgPSBbXG4gIFwiR0VUIC9hZHZpc29yaWVzXCIsXG4gIFwiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzXCIsXG4gIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uLXJlcXVlc3RzXCIsXG4gIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uc1wiLFxuICBcIkdFVCAvYXNzaWdubWVudHMve2Fzc2lnbm1lbnRfaWR9L2FjY2VwdGVkX2Fzc2lnbm1lbnRzXCIsXG4gIFwiR0VUIC9jbGFzc3Jvb21zXCIsXG4gIFwiR0VUIC9jbGFzc3Jvb21zL3tjbGFzc3Jvb21faWR9L2Fzc2lnbm1lbnRzXCIsXG4gIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29waWxvdC91c2FnZVwiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvZXZlbnRzXCIsXG4gIFwiR0VUIC9naXN0c1wiLFxuICBcIkdFVCAvZ2lzdHMvcHVibGljXCIsXG4gIFwiR0VUIC9naXN0cy9zdGFycmVkXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIixcbiAgXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21taXRzXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIixcbiAgXCJHRVQgL2luc3RhbGxhdGlvbi9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL2lzc3Vlc1wiLFxuICBcIkdFVCAvbGljZW5zZXNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIixcbiAgXCJHRVQgL25ldHdvcmtzL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiLFxuICBcIkdFVCAvbm90aWZpY2F0aW9uc1wiLFxuICBcIkdFVCAvb3JnYW5pemF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWF0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L3VzYWdlXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZXZlbnRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2ZhaWxlZF9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ob29rc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfS90ZWFtc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH0vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS91c2Vyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0cy97cGF0X3JlcXVlc3RfaWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3JlcG9zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vc2VjdXJpdHktYWR2aXNvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtL3t0ZWFtX3NsdWd9L2NvcGlsb3QvdXNhZ2VcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIixcbiAgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIixcbiAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi1zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi12YXJpYWJsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9qb2JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vam9ic1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aXZpdHlcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vYW5ub3RhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L2NoZWNrLXJ1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvZGV2Y29udGFpbmVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L3B1bGxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXJ1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udHJpYnV0b3JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL2FwcHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vZXZlbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn0vbGFiZWxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWl0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9maWxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2xvY2F0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhcmdhemVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaWJlcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RlYW1zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIixcbiAgXCJHRVQgL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvc2VhcmNoL2NvZGVcIixcbiAgXCJHRVQgL3NlYXJjaC9jb21taXRzXCIsXG4gIFwiR0VUIC9zZWFyY2gvaXNzdWVzXCIsXG4gIFwiR0VUIC9zZWFyY2gvbGFiZWxzXCIsXG4gIFwiR0VUIC9zZWFyY2gvcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9zZWFyY2gvdG9waWNzXCIsXG4gIFwiR0VUIC9zZWFyY2gvdXNlcnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L21lbWJlcnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3JlcG9zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vdGVhbXNcIixcbiAgXCJHRVQgL3VzZXIvYmxvY2tzXCIsXG4gIFwiR0VUIC91c2VyL2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzXCIsXG4gIFwiR0VUIC91c2VyL2VtYWlsc1wiLFxuICBcIkdFVCAvdXNlci9mb2xsb3dlcnNcIixcbiAgXCJHRVQgL3VzZXIvZm9sbG93aW5nXCIsXG4gIFwiR0VUIC91c2VyL2dwZ19rZXlzXCIsXG4gIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3VzZXIvaXNzdWVzXCIsXG4gIFwiR0VUIC91c2VyL2tleXNcIixcbiAgXCJHRVQgL3VzZXIvbWFya2V0cGxhY2VfcHVyY2hhc2VzXCIsXG4gIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlcy9zdHViYmVkXCIsXG4gIFwiR0VUIC91c2VyL21lbWJlcnNoaXBzL29yZ3NcIixcbiAgXCJHRVQgL3VzZXIvbWlncmF0aW9uc1wiLFxuICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvdXNlci9vcmdzXCIsXG4gIFwiR0VUIC91c2VyL3BhY2thZ2VzXCIsXG4gIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gIFwiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIixcbiAgXCJHRVQgL3VzZXIvcmVwb3NcIixcbiAgXCJHRVQgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvdXNlci9zb2NpYWxfYWNjb3VudHNcIixcbiAgXCJHRVQgL3VzZXIvc3NoX3NpZ25pbmdfa2V5c1wiLFxuICBcIkdFVCAvdXNlci9zdGFycmVkXCIsXG4gIFwiR0VUIC91c2VyL3N1YnNjcmlwdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvdGVhbXNcIixcbiAgXCJHRVQgL3VzZXJzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHMvb3Jncy97b3JnfVwiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHMvcHVibGljXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2Vyc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmdcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ2lzdHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ3BnX2tleXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0va2V5c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9vcmdzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3Byb2plY3RzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHMvcHVibGljXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlcG9zXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NvY2lhbF9hY2NvdW50c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zc2hfc2lnbmluZ19rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N0YXJyZWRcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3Vic2NyaXB0aW9uc1wiXG5dO1xuXG4vLyBwa2cvZGlzdC1zcmMvcGFnaW5hdGluZy1lbmRwb2ludHMuanNcbmZ1bmN0aW9uIGlzUGFnaW5hdGluZ0VuZHBvaW50KGFyZykge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBwYWdpbmF0aW5nRW5kcG9pbnRzLmluY2x1ZGVzKGFyZyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xuZnVuY3Rpb24gcGFnaW5hdGVSZXN0KG9jdG9raXQpIHtcbiAgcmV0dXJuIHtcbiAgICBwYWdpbmF0ZTogT2JqZWN0LmFzc2lnbihwYWdpbmF0ZS5iaW5kKG51bGwsIG9jdG9raXQpLCB7XG4gICAgICBpdGVyYXRvcjogaXRlcmF0b3IuYmluZChudWxsLCBvY3Rva2l0KVxuICAgIH0pXG4gIH07XG59XG5wYWdpbmF0ZVJlc3QuVkVSU0lPTiA9IFZFUlNJT047XG5leHBvcnQge1xuICBjb21wb3NlUGFnaW5hdGVSZXN0LFxuICBpc1BhZ2luYXRpbmdFbmRwb2ludCxcbiAgcGFnaW5hdGVSZXN0LFxuICBwYWdpbmF0aW5nRW5kcG9pbnRzXG59O1xuIiwiY29uc3QgVkVSU0lPTiA9IFwiMTMuMi4yXCI7XG5leHBvcnQge1xuICBWRVJTSU9OXG59O1xuIiwiY29uc3QgRW5kcG9pbnRzID0ge1xuICBhY3Rpb25zOiB7XG4gICAgYWRkQ3VzdG9tTGFiZWxzVG9TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBhZGRDdXN0b21MYWJlbHNUb1NlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgYXBwcm92ZVdvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcHByb3ZlXCJcbiAgICBdLFxuICAgIGNhbmNlbFdvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9jYW5jZWxcIlxuICAgIF0sXG4gICAgY3JlYXRlRW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZUVudmlyb25tZW50U2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVPcmdTZWNyZXQ6IFtcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVPcmdWYXJpYWJsZTogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9yZWdpc3RyYXRpb24tdG9rZW5cIlxuICAgIF0sXG4gICAgY3JlYXRlUmVnaXN0cmF0aW9uVG9rZW5Gb3JSZXBvOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9yZWdpc3RyYXRpb24tdG9rZW5cIlxuICAgIF0sXG4gICAgY3JlYXRlUmVtb3ZlVG9rZW5Gb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3JlbW92ZS10b2tlblwiXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3JlbW92ZS10b2tlblwiXG4gICAgXSxcbiAgICBjcmVhdGVSZXBvVmFyaWFibGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvdmFyaWFibGVzXCJdLFxuICAgIGNyZWF0ZVdvcmtmbG93RGlzcGF0Y2g6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9kaXNwYXRjaGVzXCJcbiAgICBdLFxuICAgIGRlbGV0ZUFjdGlvbnNDYWNoZUJ5SWQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlcy97Y2FjaGVfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUFjdGlvbnNDYWNoZUJ5S2V5OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXN7P2tleSxyZWZ9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUFydGlmYWN0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVFbnZpcm9ubWVudFNlY3JldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlcy97bmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlT3JnVmFyaWFibGU6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVJlcG9WYXJpYWJsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVTZWxmSG9zdGVkUnVubmVyRnJvbU9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVNlbGZIb3N0ZWRSdW5uZXJGcm9tUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVXb3JrZmxvd1J1bjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH1cIl0sXG4gICAgZGVsZXRlV29ya2Zsb3dSdW5Mb2dzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2xvZ3NcIlxuICAgIF0sXG4gICAgZGlzYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBkaXNhYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2Rpc2FibGVcIlxuICAgIF0sXG4gICAgZG93bmxvYWRBcnRpZmFjdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH0ve2FyY2hpdmVfZm9ybWF0fVwiXG4gICAgXSxcbiAgICBkb3dubG9hZEpvYkxvZ3NGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfS9sb2dzXCJcbiAgICBdLFxuICAgIGRvd25sb2FkV29ya2Zsb3dSdW5BdHRlbXB0TG9nczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2xvZ3NcIlxuICAgIF0sXG4gICAgZG93bmxvYWRXb3JrZmxvd1J1bkxvZ3M6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vbG9nc1wiXG4gICAgXSxcbiAgICBlbmFibGVTZWxlY3RlZFJlcG9zaXRvcnlHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgZW5hYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2VuYWJsZVwiXG4gICAgXSxcbiAgICBmb3JjZUNhbmNlbFdvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9mb3JjZS1jYW5jZWxcIlxuICAgIF0sXG4gICAgZ2VuZXJhdGVSdW5uZXJKaXRjb25maWdGb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCJcbiAgICBdLFxuICAgIGdlbmVyYXRlUnVubmVySml0Y29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCJcbiAgICBdLFxuICAgIGdldEFjdGlvbnNDYWNoZUxpc3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXNcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2U6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZS91c2FnZVwiXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVVc2FnZUJ5UmVwb0Zvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZS1ieS1yZXBvc2l0b3J5XCJcbiAgICBdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZVwiXSxcbiAgICBnZXRBbGxvd2VkQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJcbiAgICBdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXG4gICAgXSxcbiAgICBnZXRBcnRpZmFjdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0cy97YXJ0aWZhY3RfaWR9XCJdLFxuICAgIGdldEN1c3RvbU9pZGNTdWJDbGFpbUZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIlxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRQdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMvcHVibGljLWtleVwiXG4gICAgXSxcbiAgICBnZXRFbnZpcm9ubWVudFNlY3JldDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGdldEVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlcy97bmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCJcbiAgICBdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCJcbiAgICBdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXG4gICAgXSxcbiAgICBnZXRKb2JGb3JXb3JrZmxvd1J1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0T3JnVmFyaWFibGU6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZ2V0UGVuZGluZ0RlcGxveW1lbnRzRm9yUnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIlxuICAgIF0sXG4gICAgZ2V0UmVwb1Blcm1pc3Npb25zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImFjdGlvbnNcIiwgXCJnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5XCJdIH1cbiAgICBdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXBvVmFyaWFibGU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFJldmlld3NGb3JSdW46IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92YWxzXCJcbiAgICBdLFxuICAgIGdldFNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIl0sXG4gICAgZ2V0U2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIlxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3c6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd0FjY2Vzc1RvUmVwb3NpdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvYWNjZXNzXCJcbiAgICBdLFxuICAgIGdldFdvcmtmbG93UnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd1J1bkF0dGVtcHQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvd1J1blVzYWdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3RpbWluZ1wiXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvd1VzYWdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS90aW1pbmdcIlxuICAgIF0sXG4gICAgbGlzdEFydGlmYWN0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIl0sXG4gICAgbGlzdEVudmlyb25tZW50U2VjcmV0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0c1wiXG4gICAgXSxcbiAgICBsaXN0RW52aXJvbm1lbnRWYXJpYWJsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiXG4gICAgXSxcbiAgICBsaXN0Sm9ic0ZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2pvYnNcIlxuICAgIF0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bkF0dGVtcHQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9qb2JzXCJcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHNcIl0sXG4gICAgbGlzdE9yZ1ZhcmlhYmxlczogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzXCJdLFxuICAgIGxpc3RSZXBvT3JnYW5pemF0aW9uU2VjcmV0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb3JnYW5pemF0aW9uLXNlY3JldHNcIlxuICAgIF0sXG4gICAgbGlzdFJlcG9Pcmdhbml6YXRpb25WYXJpYWJsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi12YXJpYWJsZXNcIlxuICAgIF0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1ZhcmlhYmxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBsaXN0UmVwb1dvcmtmbG93czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93c1wiXSxcbiAgICBsaXN0UnVubmVyQXBwbGljYXRpb25zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL2Rvd25sb2Fkc1wiXSxcbiAgICBsaXN0UnVubmVyQXBwbGljYXRpb25zRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIlxuICAgIF0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zaXRvcmllc0VuYWJsZWRHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0U2VsZkhvc3RlZFJ1bm5lcnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnNcIl0sXG4gICAgbGlzdFNlbGZIb3N0ZWRSdW5uZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnNcIl0sXG4gICAgbGlzdFdvcmtmbG93UnVuQXJ0aWZhY3RzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2FydGlmYWN0c1wiXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCJcbiAgICBdLFxuICAgIGxpc3RXb3JrZmxvd1J1bnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc1wiXSxcbiAgICByZVJ1bkpvYkZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfS9yZXJ1blwiXG4gICAgXSxcbiAgICByZVJ1bldvcmtmbG93OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcmVydW5cIl0sXG4gICAgcmVSdW5Xb3JrZmxvd0ZhaWxlZEpvYnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3JlcnVuLWZhaWxlZC1qb2JzXCJcbiAgICBdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVscy97bmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIHJlbW92ZVNlbGVjdGVkUmVwb0Zyb21PcmdWYXJpYWJsZTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgcmV2aWV3Q3VzdG9tR2F0ZXNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlXCJcbiAgICBdLFxuICAgIHJldmlld1BlbmRpbmdEZXBsb3ltZW50c0ZvclJ1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcGVuZGluZ19kZXBsb3ltZW50c1wiXG4gICAgXSxcbiAgICBzZXRBbGxvd2VkQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJcbiAgICBdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXG4gICAgXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIHNldEN1c3RvbUxhYmVsc0ZvclNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBzZXRDdXN0b21PaWRjU3ViQ2xhaW1Gb3JSZXBvOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCJcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnNcIlxuICAgIF0sXG4gICAgc2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnNcIlxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zaXRvcmllc0VuYWJsZWRHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBzZXRXb3JrZmxvd0FjY2Vzc1RvUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvYWNjZXNzXCJcbiAgICBdLFxuICAgIHVwZGF0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiXG4gICAgXSxcbiAgICB1cGRhdGVPcmdWYXJpYWJsZTogW1wiUEFUQ0ggL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIHVwZGF0ZVJlcG9WYXJpYWJsZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJcbiAgICBdXG4gIH0sXG4gIGFjdGl2aXR5OiB7XG4gICAgY2hlY2tSZXBvSXNTdGFycmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgZGVsZXRlUmVwb1N1YnNjcmlwdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgZGVsZXRlVGhyZWFkU3Vic2NyaXB0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiXG4gICAgXSxcbiAgICBnZXRGZWVkczogW1wiR0VUIC9mZWVkc1wiXSxcbiAgICBnZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBnZXRUaHJlYWQ6IFtcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIGdldFRocmVhZFN1YnNjcmlwdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiXG4gICAgXSxcbiAgICBsaXN0RXZlbnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIl0sXG4gICAgbGlzdE5vdGlmaWNhdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC9ub3RpZmljYXRpb25zXCJdLFxuICAgIGxpc3RPcmdFdmVudHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIlxuICAgIF0sXG4gICAgbGlzdFB1YmxpY0V2ZW50czogW1wiR0VUIC9ldmVudHNcIl0sXG4gICAgbGlzdFB1YmxpY0V2ZW50c0ZvclJlcG9OZXR3b3JrOiBbXCJHRVQgL25ldHdvcmtzL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9wdWJsaWNcIl0sXG4gICAgbGlzdFB1YmxpY09yZ0V2ZW50czogW1wiR0VUIC9vcmdzL3tvcmd9L2V2ZW50c1wiXSxcbiAgICBsaXN0UmVjZWl2ZWRFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZFB1YmxpY0V2ZW50c0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50cy9wdWJsaWNcIlxuICAgIF0sXG4gICAgbGlzdFJlcG9FdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZXBvTm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0UmVwb3NTdGFycmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N0YXJyZWRcIl0sXG4gICAgbGlzdFJlcG9zU3RhcnJlZEJ5VXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N0YXJyZWRcIl0sXG4gICAgbGlzdFJlcG9zV2F0Y2hlZEJ5VXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N1YnNjcmlwdGlvbnNcIl0sXG4gICAgbGlzdFN0YXJnYXplcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIl0sXG4gICAgbGlzdFdhdGNoZWRSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3Vic2NyaXB0aW9uc1wiXSxcbiAgICBsaXN0V2F0Y2hlcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCJdLFxuICAgIG1hcmtOb3RpZmljYXRpb25zQXNSZWFkOiBbXCJQVVQgL25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbWFya1JlcG9Ob3RpZmljYXRpb25zQXNSZWFkOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbWFya1RocmVhZEFzRG9uZTogW1wiREVMRVRFIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgbWFya1RocmVhZEFzUmVhZDogW1wiUEFUQ0ggL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfVwiXSxcbiAgICBzZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBzZXRUaHJlYWRTdWJzY3JpcHRpb246IFtcbiAgICAgIFwiUFVUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCJcbiAgICBdLFxuICAgIHN0YXJSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9zdGFycmVkL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIHVuc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl1cbiAgfSxcbiAgYXBwczoge1xuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcImFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgY2hlY2tUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGNyZWF0ZUZyb21NYW5pZmVzdDogW1wiUE9TVCAvYXBwLW1hbmlmZXN0cy97Y29kZX0vY29udmVyc2lvbnNcIl0sXG4gICAgY3JlYXRlSW5zdGFsbGF0aW9uQWNjZXNzVG9rZW46IFtcbiAgICAgIFwiUE9TVCAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vYWNjZXNzX3Rva2Vuc1wiXG4gICAgXSxcbiAgICBkZWxldGVBdXRob3JpemF0aW9uOiBbXCJERUxFVEUgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS9ncmFudFwiXSxcbiAgICBkZWxldGVJbnN0YWxsYXRpb246IFtcIkRFTEVURSAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlVG9rZW46IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGdldEF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvYXBwXCJdLFxuICAgIGdldEJ5U2x1ZzogW1wiR0VUIC9hcHBzL3thcHBfc2x1Z31cIl0sXG4gICAgZ2V0SW5zdGFsbGF0aW9uOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9XCJdLFxuICAgIGdldE9yZ0luc3RhbGxhdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRSZXBvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvYWNjb3VudHMve2FjY291bnRfaWR9XCJcbiAgICBdLFxuICAgIGdldFN1YnNjcmlwdGlvblBsYW5Gb3JBY2NvdW50U3R1YmJlZDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9hY2NvdW50cy97YWNjb3VudF9pZH1cIlxuICAgIF0sXG4gICAgZ2V0VXNlckluc3RhbGxhdGlvbjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yQXBwOiBbXCJHRVQgL2FwcC9ob29rL2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCJdLFxuICAgIGxpc3RBY2NvdW50c0ZvclBsYW46IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhblN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCJcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25SZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uUmVxdWVzdHNGb3JBdXRoZW50aWNhdGVkQXBwOiBbXG4gICAgICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbi1yZXF1ZXN0c1wiXG4gICAgXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uczogW1wiR0VUIC9hcHAvaW5zdGFsbGF0aW9uc1wiXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaW5zdGFsbGF0aW9uc1wiXSxcbiAgICBsaXN0UGxhbnM6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9wbGFuc1wiXSxcbiAgICBsaXN0UGxhbnNTdHViYmVkOiBbXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFuc1wiXSxcbiAgICBsaXN0UmVwb3NBY2Nlc3NpYmxlVG9JbnN0YWxsYXRpb246IFtcIkdFVCAvaW5zdGFsbGF0aW9uL3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0U3Vic2NyaXB0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWFya2V0cGxhY2VfcHVyY2hhc2VzXCJdLFxuICAgIGxpc3RTdWJzY3JpcHRpb25zRm9yQXV0aGVudGljYXRlZFVzZXJTdHViYmVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJhcHBzXCIsIFwicmVtb3ZlUmVwb0Zyb21JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICByZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgcmVzZXRUb2tlbjogW1wiUEFUQ0ggL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICByZXZva2VJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1wiREVMRVRFIC9pbnN0YWxsYXRpb24vdG9rZW5cIl0sXG4gICAgc2NvcGVUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuL3Njb3BlZFwiXSxcbiAgICBzdXNwZW5kSW5zdGFsbGF0aW9uOiBbXCJQVVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXSxcbiAgICB1bnN1c3BlbmRJbnN0YWxsYXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9zdXNwZW5kZWRcIlxuICAgIF0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0ZvckFwcDogW1wiUEFUQ0ggL2FwcC9ob29rL2NvbmZpZ1wiXVxuICB9LFxuICBiaWxsaW5nOiB7XG4gICAgZ2V0R2l0aHViQWN0aW9uc0JpbGxpbmdPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL2FjdGlvbnNcIl0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0JpbGxpbmdVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zZXR0aW5ncy9iaWxsaW5nL2FjdGlvbnNcIlxuICAgIF0sXG4gICAgZ2V0R2l0aHViUGFja2FnZXNCaWxsaW5nT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvYmlsbGluZy9wYWNrYWdlc1wiXSxcbiAgICBnZXRHaXRodWJQYWNrYWdlc0JpbGxpbmdVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zZXR0aW5ncy9iaWxsaW5nL3BhY2thZ2VzXCJcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3NoYXJlZC1zdG9yYWdlXCJcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9zaGFyZWQtc3RvcmFnZVwiXG4gICAgXVxuICB9LFxuICBjaGVja3M6IHtcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnNcIl0sXG4gICAgY3JlYXRlU3VpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXSxcbiAgICBnZXRTdWl0ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfVwiXSxcbiAgICBsaXN0QW5ub3RhdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCJcbiAgICBdLFxuICAgIGxpc3RGb3JSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1ydW5zXCJdLFxuICAgIGxpc3RGb3JTdWl0ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L2NoZWNrLXJ1bnNcIlxuICAgIF0sXG4gICAgbGlzdFN1aXRlc0ZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXN1aXRlc1wiXSxcbiAgICByZXJlcXVlc3RSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfS9yZXJlcXVlc3RcIlxuICAgIF0sXG4gICAgcmVyZXF1ZXN0U3VpdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vcmVyZXF1ZXN0XCJcbiAgICBdLFxuICAgIHNldFN1aXRlc1ByZWZlcmVuY2VzOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMvcHJlZmVyZW5jZXNcIlxuICAgIF0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXVxuICB9LFxuICBjb2RlU2Nhbm5pbmc6IHtcbiAgICBkZWxldGVBbmFseXNpczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXMve2FuYWx5c2lzX2lkfXs/Y29uZmlybV9kZWxldGV9XCJcbiAgICBdLFxuICAgIGdldEFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkUGFyYW1ldGVyczogeyBhbGVydF9pZDogXCJhbGVydF9udW1iZXJcIiB9IH1cbiAgICBdLFxuICAgIGdldEFuYWx5c2lzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlcy97YW5hbHlzaXNfaWR9XCJcbiAgICBdLFxuICAgIGdldENvZGVxbERhdGFiYXNlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvZGF0YWJhc2VzL3tsYW5ndWFnZX1cIlxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdFNldHVwOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvZGVmYXVsdC1zZXR1cFwiXSxcbiAgICBnZXRTYXJpZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmcy97c2FyaWZfaWR9XCJdLFxuICAgIGxpc3RBbGVydEluc3RhbmNlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0luc3RhbmNlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImNvZGVTY2FubmluZ1wiLCBcImxpc3RBbGVydEluc3RhbmNlc1wiXSB9XG4gICAgXSxcbiAgICBsaXN0Q29kZXFsRGF0YWJhc2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvZGF0YWJhc2VzXCJcbiAgICBdLFxuICAgIGxpc3RSZWNlbnRBbmFseXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzXCJdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICB1cGRhdGVEZWZhdWx0U2V0dXA6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvZGVmYXVsdC1zZXR1cFwiXG4gICAgXSxcbiAgICB1cGxvYWRTYXJpZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9zYXJpZnNcIl1cbiAgfSxcbiAgY29kZXNPZkNvbmR1Y3Q6IHtcbiAgICBnZXRBbGxDb2Rlc09mQ29uZHVjdDogW1wiR0VUIC9jb2Rlc19vZl9jb25kdWN0XCJdLFxuICAgIGdldENvbmR1Y3RDb2RlOiBbXCJHRVQgL2NvZGVzX29mX2NvbmR1Y3Qve2tleX1cIl1cbiAgfSxcbiAgY29kZXNwYWNlczoge1xuICAgIGFkZFJlcG9zaXRvcnlGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBjaGVja1Blcm1pc3Npb25zRm9yRGV2Y29udGFpbmVyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9wZXJtaXNzaW9uc19jaGVja1wiXG4gICAgXSxcbiAgICBjb2Rlc3BhY2VNYWNoaW5lc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vbWFjaGluZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlV2l0aFByRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb2Rlc3BhY2VzXCJcbiAgICBdLFxuICAgIGNyZWF0ZVdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiXG4gICAgXSxcbiAgICBkZWxldGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXSxcbiAgICBkZWxldGVGcm9tT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgZXhwb3J0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vZXhwb3J0c1wiXG4gICAgXSxcbiAgICBnZXRDb2Rlc3BhY2VzRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiXG4gICAgXSxcbiAgICBnZXRFeHBvcnREZXRhaWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzL3tleHBvcnRfaWR9XCJcbiAgICBdLFxuICAgIGdldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldE9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldFB1YmxpY0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMvcHVibGljLWtleVwiXG4gICAgXSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIlxuICAgIF0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGdldFNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBsaXN0RGV2Y29udGFpbmVyc0luUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCJcbiAgICBdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXNcIl0sXG4gICAgbGlzdEluT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZFBhcmFtZXRlcnM6IHsgb3JnX2lkOiBcIm9yZ1wiIH0gfVxuICAgIF0sXG4gICAgbGlzdEluUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIGxpc3RTZWNyZXRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHNcIl0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBwcmVGbGlnaHRXaXRoUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9uZXdcIlxuICAgIF0sXG4gICAgcHVibGlzaEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3B1Ymxpc2hcIlxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIHJlbW92ZVNlbGVjdGVkUmVwb0Zyb21PcmdTZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgcmVwb01hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL21hY2hpbmVzXCJcbiAgICBdLFxuICAgIHNldFJlcG9zaXRvcmllc0ZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHN0YXJ0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0YXJ0XCJdLFxuICAgIHN0b3BGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiXSxcbiAgICBzdG9wSW5Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0b3BcIlxuICAgIF0sXG4gICAgdXBkYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBBVENIIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXVxuICB9LFxuICBjb3BpbG90OiB7XG4gICAgYWRkQ29waWxvdFNlYXRzRm9yVGVhbXM6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdGVhbXNcIlxuICAgIF0sXG4gICAgYWRkQ29waWxvdFNlYXRzRm9yVXNlcnM6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIlxuICAgIF0sXG4gICAgY2FuY2VsQ29waWxvdFNlYXRBc3NpZ25tZW50Rm9yVGVhbXM6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF90ZWFtc1wiXG4gICAgXSxcbiAgICBjYW5jZWxDb3BpbG90U2VhdEFzc2lnbm1lbnRGb3JVc2VyczogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlbGVjdGVkX3VzZXJzXCJcbiAgICBdLFxuICAgIGdldENvcGlsb3RPcmdhbml6YXRpb25EZXRhaWxzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nXCJdLFxuICAgIGdldENvcGlsb3RTZWF0RGV0YWlsc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb3BpbG90XCJcbiAgICBdLFxuICAgIGxpc3RDb3BpbG90U2VhdHM6IFtcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VhdHNcIl0sXG4gICAgdXNhZ2VNZXRyaWNzRm9yRW50ZXJwcmlzZTogW1wiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29waWxvdC91c2FnZVwiXSxcbiAgICB1c2FnZU1ldHJpY3NGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L3VzYWdlXCJdLFxuICAgIHVzYWdlTWV0cmljc0ZvclRlYW06IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtL3t0ZWFtX3NsdWd9L2NvcGlsb3QvdXNhZ2VcIl1cbiAgfSxcbiAgZGVwZW5kYWJvdDoge1xuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVPcmdTZWNyZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBkZWxldGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHMve2FsZXJ0X251bWJlcn1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy9wdWJsaWMta2V5XCJcbiAgICBdLFxuICAgIGdldFJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9kZXBlbmRhYm90L2FsZXJ0c1wiXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHJlbW92ZVNlbGVjdGVkUmVwb0Zyb21PcmdTZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXG4gICAgXVxuICB9LFxuICBkZXBlbmRlbmN5R3JhcGg6IHtcbiAgICBjcmVhdGVSZXBvc2l0b3J5U25hcHNob3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9zbmFwc2hvdHNcIlxuICAgIF0sXG4gICAgZGlmZlJhbmdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9jb21wYXJlL3tiYXNlaGVhZH1cIlxuICAgIF0sXG4gICAgZXhwb3J0U2JvbTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRlbmN5LWdyYXBoL3Nib21cIl1cbiAgfSxcbiAgZW1vamlzOiB7IGdldDogW1wiR0VUIC9lbW9qaXNcIl0gfSxcbiAgZ2lzdHM6IHtcbiAgICBjaGVja0lzU3RhcnJlZDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL2dpc3RzXCJdLFxuICAgIGNyZWF0ZUNvbW1lbnQ6IFtcIlBPU1QgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1lbnQ6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBmb3JrOiBbXCJQT1NUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgZ2V0OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICBnZXRDb21tZW50OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZ2V0UmV2aXNpb246IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L3tzaGF9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvZ2lzdHNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9naXN0cy9wdWJsaWNcIl0sXG4gICAgbGlzdFN0YXJyZWQ6IFtcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiXSxcbiAgICBzdGFyOiBbXCJQVVQgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIHVuc3RhcjogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgdXBkYXRlQ29tbWVudDogW1wiUEFUQ0ggL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl1cbiAgfSxcbiAgZ2l0OiB7XG4gICAgY3JlYXRlQmxvYjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2Jsb2JzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHNcIl0sXG4gICAgY3JlYXRlUmVmOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmc1wiXSxcbiAgICBjcmVhdGVUYWc6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90YWdzXCJdLFxuICAgIGNyZWF0ZVRyZWU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90cmVlc1wiXSxcbiAgICBkZWxldGVSZWY6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnMve3JlZn1cIl0sXG4gICAgZ2V0QmxvYjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvYmxvYnMve2ZpbGVfc2hhfVwiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHMve2NvbW1pdF9zaGF9XCJdLFxuICAgIGdldFJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmL3tyZWZ9XCJdLFxuICAgIGdldFRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdGFncy97dGFnX3NoYX1cIl0sXG4gICAgZ2V0VHJlZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdHJlZXMve3RyZWVfc2hhfVwiXSxcbiAgICBsaXN0TWF0Y2hpbmdSZWZzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9tYXRjaGluZy1yZWZzL3tyZWZ9XCJdLFxuICAgIHVwZGF0ZVJlZjogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzL3tyZWZ9XCJdXG4gIH0sXG4gIGdpdGlnbm9yZToge1xuICAgIGdldEFsbFRlbXBsYXRlczogW1wiR0VUIC9naXRpZ25vcmUvdGVtcGxhdGVzXCJdLFxuICAgIGdldFRlbXBsYXRlOiBbXCJHRVQgL2dpdGlnbm9yZS90ZW1wbGF0ZXMve25hbWV9XCJdXG4gIH0sXG4gIGludGVyYWN0aW9uczoge1xuICAgIGdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcbiAgICAgIFwiR0VUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcImdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0Zvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JSZXBvOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJcbiAgICBdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwicmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvclJlcG86IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJQVVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwic2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF1cbiAgfSxcbiAgaXNzdWVzOiB7XG4gICAgYWRkQXNzaWduZWVzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIlxuICAgIF0sXG4gICAgYWRkTGFiZWxzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIGNoZWNrVXNlckNhbkJlQXNzaWduZWQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXNzaWduZWVzL3thc3NpZ25lZX1cIl0sXG4gICAgY2hlY2tVc2VyQ2FuQmVBc3NpZ25lZFRvSXNzdWU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vYXNzaWduZWVzL3thc3NpZ25lZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIl0sXG4gICAgY3JlYXRlQ29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgY3JlYXRlTGFiZWw6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBjcmVhdGVNaWxlc3RvbmU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgZGVsZXRlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlTGFiZWw6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBkZWxldGVNaWxlc3RvbmU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9XCJdLFxuICAgIGdldENvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRFdmVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzL3tldmVudF9pZH1cIl0sXG4gICAgZ2V0TGFiZWw6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBnZXRNaWxlc3RvbmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9pc3N1ZXNcIl0sXG4gICAgbGlzdEFzc2lnbmVlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIl0sXG4gICAgbGlzdEV2ZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yVGltZWxpbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIlxuICAgIF0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JNaWxlc3RvbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgbGlzdExhYmVsc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzXCJdLFxuICAgIGxpc3RMYWJlbHNPbklzc3VlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBsaXN0TWlsZXN0b25lczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCJdLFxuICAgIGxvY2s6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xvY2tcIl0sXG4gICAgcmVtb3ZlQWxsTGFiZWxzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXG4gICAgXSxcbiAgICByZW1vdmVBc3NpZ25lZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vYXNzaWduZWVzXCJcbiAgICBdLFxuICAgIHJlbW92ZUxhYmVsOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVscy97bmFtZX1cIlxuICAgIF0sXG4gICAgc2V0TGFiZWxzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIl0sXG4gICAgdW5sb2NrOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sb2NrXCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVDb21tZW50OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVMYWJlbDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgdXBkYXRlTWlsZXN0b25lOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXG4gICAgXVxuICB9LFxuICBsaWNlbnNlczoge1xuICAgIGdldDogW1wiR0VUIC9saWNlbnNlcy97bGljZW5zZX1cIl0sXG4gICAgZ2V0QWxsQ29tbW9ubHlVc2VkOiBbXCJHRVQgL2xpY2Vuc2VzXCJdLFxuICAgIGdldEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGljZW5zZVwiXVxuICB9LFxuICBtYXJrZG93bjoge1xuICAgIHJlbmRlcjogW1wiUE9TVCAvbWFya2Rvd25cIl0sXG4gICAgcmVuZGVyUmF3OiBbXG4gICAgICBcIlBPU1QgL21hcmtkb3duL3Jhd1wiLFxuICAgICAgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFwiIH0gfVxuICAgIF1cbiAgfSxcbiAgbWV0YToge1xuICAgIGdldDogW1wiR0VUIC9tZXRhXCJdLFxuICAgIGdldEFsbFZlcnNpb25zOiBbXCJHRVQgL3ZlcnNpb25zXCJdLFxuICAgIGdldE9jdG9jYXQ6IFtcIkdFVCAvb2N0b2NhdFwiXSxcbiAgICBnZXRaZW46IFtcIkdFVCAvemVuXCJdLFxuICAgIHJvb3Q6IFtcIkdFVCAvXCJdXG4gIH0sXG4gIG1pZ3JhdGlvbnM6IHtcbiAgICBkZWxldGVBcmNoaXZlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiXG4gICAgXSxcbiAgICBkZWxldGVBcmNoaXZlRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIlxuICAgIF0sXG4gICAgZG93bmxvYWRBcmNoaXZlRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIlxuICAgIF0sXG4gICAgZ2V0QXJjaGl2ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIlxuICAgIF0sXG4gICAgZ2V0U3RhdHVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9XCJdLFxuICAgIGdldFN0YXR1c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH1cIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWlncmF0aW9uc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiXSxcbiAgICBsaXN0UmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgbGlzdFJlcG9zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFJlcG9zRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJtaWdyYXRpb25zXCIsIFwibGlzdFJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgc3RhcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9taWdyYXRpb25zXCJdLFxuICAgIHN0YXJ0Rm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnNcIl0sXG4gICAgdW5sb2NrUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zL3tyZXBvX25hbWV9L2xvY2tcIlxuICAgIF0sXG4gICAgdW5sb2NrUmVwb0Zvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvcy97cmVwb19uYW1lfS9sb2NrXCJcbiAgICBdXG4gIH0sXG4gIG9pZGM6IHtcbiAgICBnZXRPaWRjQ3VzdG9tU3ViVGVtcGxhdGVGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiXG4gICAgXSxcbiAgICB1cGRhdGVPaWRjQ3VzdG9tU3ViVGVtcGxhdGVGb3JPcmc6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiXG4gICAgXVxuICB9LFxuICBvcmdzOiB7XG4gICAgYWRkU2VjdXJpdHlNYW5hZ2VyVGVhbTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnMvdGVhbXMve3RlYW1fc2x1Z31cIlxuICAgIF0sXG4gICAgYXNzaWduVGVhbVRvT3JnUm9sZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9L3tyb2xlX2lkfVwiXG4gICAgXSxcbiAgICBhc3NpZ25Vc2VyVG9PcmdSb2xlOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdXNlcnMve3VzZXJuYW1lfS97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgYmxvY2tVc2VyOiBbXCJQVVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2FuY2VsSW52aXRhdGlvbjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXSxcbiAgICBjaGVja0Jsb2NrZWRVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja1B1YmxpY01lbWJlcnNoaXBGb3JVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjb252ZXJ0TWVtYmVyVG9PdXRzaWRlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVDdXN0b21Pcmdhbml6YXRpb25Sb2xlOiBbXCJQT1NUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlc1wiXSxcbiAgICBjcmVhdGVJbnZpdGF0aW9uOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllczogW1wiUEFUQ0ggL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzRm9yUmVwb3M6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVDdXN0b21Qcm9wZXJ0eTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWEve2N1c3RvbV9wcm9wZXJ0eV9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9vcmdzL3tvcmd9XCJdLFxuICAgIGRlbGV0ZUN1c3RvbU9yZ2FuaXphdGlvblJvbGU6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlV2ViaG9vazogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBlbmFibGVPckRpc2FibGVTZWN1cml0eVByb2R1Y3RPbkFsbE9yZ1JlcG9zOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30ve3NlY3VyaXR5X3Byb2R1Y3R9L3tlbmFibGVtZW50fVwiXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRBbGxDdXN0b21Qcm9wZXJ0aWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIl0sXG4gICAgZ2V0Q3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0T3JnUm9sZTogW1wiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH1cIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIlxuICAgIF0sXG4gICAgbGlzdDogW1wiR0VUIC9vcmdhbml6YXRpb25zXCJdLFxuICAgIGxpc3RBcHBJbnN0YWxsYXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uc1wiXSxcbiAgICBsaXN0QmxvY2tlZFVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCJdLFxuICAgIGxpc3RDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzRm9yUmVwb3M6IFtcIkdFVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3ZhbHVlc1wiXSxcbiAgICBsaXN0RmFpbGVkSW52aXRhdGlvbnM6IFtcIkdFVCAvb3Jncy97b3JnfS9mYWlsZWRfaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvb3Jnc1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L29yZ3NcIl0sXG4gICAgbGlzdEludml0YXRpb25UZWFtczogW1wiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfS90ZWFtc1wiXSxcbiAgICBsaXN0TWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNcIl0sXG4gICAgbGlzdE1lbWJlcnNoaXBzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCJdLFxuICAgIGxpc3RPcmdSb2xlVGVhbXM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3RlYW1zXCJdLFxuICAgIGxpc3RPcmdSb2xlVXNlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3VzZXJzXCJdLFxuICAgIGxpc3RPcmdSb2xlczogW1wiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlc1wiXSxcbiAgICBsaXN0T3JnYW5pemF0aW9uRmluZUdyYWluZWRQZXJtaXNzaW9uczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLWZpbmUtZ3JhaW5lZC1wZXJtaXNzaW9uc1wiXG4gICAgXSxcbiAgICBsaXN0T3V0c2lkZUNvbGxhYm9yYXRvcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnNcIl0sXG4gICAgbGlzdFBhdEdyYW50UmVwb3NpdG9yaWVzOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zL3twYXRfaWR9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0UGF0R3JhbnRSZXF1ZXN0UmVwb3NpdG9yaWVzOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgbGlzdFBhdEdyYW50UmVxdWVzdHM6IFtcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHNcIl0sXG4gICAgbGlzdFBhdEdyYW50czogW1wiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnNcIl0sXG4gICAgbGlzdFBlbmRpbmdJbnZpdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RQdWJsaWNNZW1iZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnNcIl0sXG4gICAgbGlzdFNlY3VyaXR5TWFuYWdlclRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnNcIl0sXG4gICAgbGlzdFdlYmhvb2tEZWxpdmVyaWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIl0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3NcIl0sXG4gICAgcGF0Y2hDdXN0b21Pcmdhbml6YXRpb25Sb2xlOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L3BpbmdzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH0vYXR0ZW1wdHNcIlxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlTWVtYmVyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIHJlbW92ZU1lbWJlcnNoaXBGb3JVc2VyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVPdXRzaWRlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICByZW1vdmVQdWJsaWNNZW1iZXJzaGlwRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlU2VjdXJpdHlNYW5hZ2VyVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnMvdGVhbXMve3RlYW1fc2x1Z31cIlxuICAgIF0sXG4gICAgcmV2aWV3UGF0R3JhbnRSZXF1ZXN0OiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzL3twYXRfcmVxdWVzdF9pZH1cIlxuICAgIF0sXG4gICAgcmV2aWV3UGF0R3JhbnRSZXF1ZXN0c0luQnVsazogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0c1wiXG4gICAgXSxcbiAgICByZXZva2VBbGxPcmdSb2xlc1RlYW06IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy90ZWFtcy97dGVhbV9zbHVnfVwiXG4gICAgXSxcbiAgICByZXZva2VBbGxPcmdSb2xlc1VzZXI6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy91c2Vycy97dXNlcm5hbWV9XCJcbiAgICBdLFxuICAgIHJldm9rZU9yZ1JvbGVUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z30ve3JvbGVfaWR9XCJcbiAgICBdLFxuICAgIHJldm9rZU9yZ1JvbGVVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdXNlcnMve3VzZXJuYW1lfS97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgc2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIlBVVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIHNldFB1YmxpY01lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICB1bmJsb2NrVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL29yZ3Mve29yZ31cIl0sXG4gICAgdXBkYXRlTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL21lbWJlcnNoaXBzL29yZ3Mve29yZ31cIlxuICAgIF0sXG4gICAgdXBkYXRlUGF0QWNjZXNzOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH1cIl0sXG4gICAgdXBkYXRlUGF0QWNjZXNzZXM6IFtcIlBPU1QgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vuc1wiXSxcbiAgICB1cGRhdGVXZWJob29rOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0Zvck9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXVxuICB9LFxuICBwYWNrYWdlczoge1xuICAgIGRlbGV0ZVBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZUZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZUZvclVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvckFQYWNrYWdlT3duZWRCeUFuT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInBhY2thZ2VzXCIsIFwiZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlPcmdcIl0gfVxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yQVBhY2thZ2VPd25lZEJ5VGhlQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgcmVuYW1lZDogW1xuICAgICAgICAgIFwicGFja2FnZXNcIixcbiAgICAgICAgICBcImdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5QXV0aGVudGljYXRlZFVzZXJcIlxuICAgICAgICBdXG4gICAgICB9XG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeU9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIlxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJcbiAgICBdLFxuICAgIGdldFBhY2thZ2VGb3JPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJcbiAgICBdLFxuICAgIGdldFBhY2thZ2VGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvck9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIlxuICAgIF0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9kb2NrZXIvY29uZmxpY3RzXCJcbiAgICBdLFxuICAgIGxpc3REb2NrZXJNaWdyYXRpb25Db25mbGljdGluZ1BhY2thZ2VzRm9yT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9kb2NrZXIvY29uZmxpY3RzXCJcbiAgICBdLFxuICAgIGxpc3REb2NrZXJNaWdyYXRpb25Db25mbGljdGluZ1BhY2thZ2VzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZG9ja2VyL2NvbmZsaWN0c1wiXG4gICAgXSxcbiAgICBsaXN0UGFja2FnZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0Zvck9yZ2FuaXphdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiXSxcbiAgICByZXN0b3JlUGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCJcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCJcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIlxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiXG4gICAgXVxuICB9LFxuICBwcm9qZWN0czoge1xuICAgIGFkZENvbGxhYm9yYXRvcjogW1wiUFVUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGNyZWF0ZUNhcmQ6IFtcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIl0sXG4gICAgY3JlYXRlQ29sdW1uOiBbXCJQT1NUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9wcm9qZWN0c1wiXSxcbiAgICBjcmVhdGVGb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vcHJvamVjdHNcIl0sXG4gICAgY3JlYXRlRm9yUmVwbzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIl0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXSxcbiAgICBkZWxldGVDYXJkOiBbXCJERUxFVEUgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbHVtbjogW1wiREVMRVRFIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9XCJdLFxuICAgIGdldDogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIl0sXG4gICAgZ2V0Q2FyZDogW1wiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiXSxcbiAgICBnZXRDb2x1bW46IFtcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiXSxcbiAgICBnZXRQZXJtaXNzaW9uRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiXG4gICAgXSxcbiAgICBsaXN0Q2FyZHM6IFtcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9jYXJkc1wiXSxcbiAgICBsaXN0Q29sbGFib3JhdG9yczogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29sdW1uczogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiXSxcbiAgICBtb3ZlQ2FyZDogW1wiUE9TVCAvcHJvamVjdHMvY29sdW1ucy9jYXJkcy97Y2FyZF9pZH0vbW92ZXNcIl0sXG4gICAgbW92ZUNvbHVtbjogW1wiUE9TVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9tb3Zlc1wiXSxcbiAgICByZW1vdmVDb2xsYWJvcmF0b3I6IFtcbiAgICAgIFwiREVMRVRFIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJcbiAgICBdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXSxcbiAgICB1cGRhdGVDYXJkOiBbXCJQQVRDSCAvcHJvamVjdHMvY29sdW1ucy9jYXJkcy97Y2FyZF9pZH1cIl0sXG4gICAgdXBkYXRlQ29sdW1uOiBbXCJQQVRDSCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiXVxuICB9LFxuICBwdWxsczoge1xuICAgIGNoZWNrSWZNZXJnZWQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9tZXJnZVwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzXCJdLFxuICAgIGNyZWF0ZVJlcGx5Rm9yUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZXBsaWVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZVJldmlldzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCJdLFxuICAgIGNyZWF0ZVJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBkZWxldGVQZW5kaW5nUmV2aWV3OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIlxuICAgIF0sXG4gICAgZGlzbWlzc1JldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9kaXNtaXNzYWxzXCJcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9XCJdLFxuICAgIGdldFJldmlldzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiXG4gICAgXSxcbiAgICBnZXRSZXZpZXdDb21tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzXCJdLFxuICAgIGxpc3RDb21tZW50c0ZvclJldmlldzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZpbGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIl0sXG4gICAgbGlzdFJlcXVlc3RlZFJldmlld2VyczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiXG4gICAgXSxcbiAgICBsaXN0UmV2aWV3Q29tbWVudHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzXCJcbiAgICBdLFxuICAgIGxpc3RSZXZpZXdDb21tZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHNcIl0sXG4gICAgbGlzdFJldmlld3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCJdLFxuICAgIG1lcmdlOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vbWVyZ2VcIl0sXG4gICAgcmVtb3ZlUmVxdWVzdGVkUmV2aWV3ZXJzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCJcbiAgICBdLFxuICAgIHJlcXVlc3RSZXZpZXdlcnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCJcbiAgICBdLFxuICAgIHN1Ym1pdFJldmlldzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vZXZlbnRzXCJcbiAgICBdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn1cIl0sXG4gICAgdXBkYXRlQnJhbmNoOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS91cGRhdGUtYnJhbmNoXCJcbiAgICBdLFxuICAgIHVwZGF0ZVJldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiXG4gICAgXSxcbiAgICB1cGRhdGVSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIlxuICAgIF1cbiAgfSxcbiAgcmF0ZUxpbWl0OiB7IGdldDogW1wiR0VUIC9yYXRlX2xpbWl0XCJdIH0sXG4gIHJlYWN0aW9uczoge1xuICAgIGNyZWF0ZUZvckNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JJc3N1ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGNyZWF0ZUZvcklzc3VlQ29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JQdWxsUmVxdWVzdFJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JSZWxlYXNlOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgY3JlYXRlRm9yVGVhbURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBkZWxldGVGb3JDb21taXRDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvcklzc3VlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvcklzc3VlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlRm9yUHVsbFJlcXVlc3RDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvclJlbGVhc2U6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb25Db21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgbGlzdEZvckNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGxpc3RGb3JJc3N1ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0Rm9yUHVsbFJlcXVlc3RSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0Rm9yUmVsZWFzZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgbGlzdEZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGxpc3RGb3JUZWFtRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiXG4gICAgXVxuICB9LFxuICByZXBvczoge1xuICAgIGFjY2VwdEludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImFjY2VwdEludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBhY2NlcHRJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgYWRkQXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiYXBwc1wiIH1cbiAgICBdLFxuICAgIGFkZENvbGxhYm9yYXRvcjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgYWRkU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9XG4gICAgXSxcbiAgICBhZGRUZWFtQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInRlYW1zXCIgfVxuICAgIF0sXG4gICAgYWRkVXNlckFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH1cbiAgICBdLFxuICAgIGNhbmNlbFBhZ2VzRGVwbG95bWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH0vY2FuY2VsXCJcbiAgICBdLFxuICAgIGNoZWNrQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiXG4gICAgXSxcbiAgICBjaGVja0NvbGxhYm9yYXRvcjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tQcml2YXRlVnVsbmVyYWJpbGl0eVJlcG9ydGluZzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ByaXZhdGUtdnVsbmVyYWJpbGl0eS1yZXBvcnRpbmdcIlxuICAgIF0sXG4gICAgY2hlY2tWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIlxuICAgIF0sXG4gICAgY29kZW93bmVyc0Vycm9yczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlb3duZXJzL2Vycm9yc1wiXSxcbiAgICBjb21wYXJlQ29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlfS4uLntoZWFkfVwiXSxcbiAgICBjb21wYXJlQ29tbWl0c1dpdGhCYXNlaGVhZDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbXBhcmUve2Jhc2VoZWFkfVwiXG4gICAgXSxcbiAgICBjcmVhdGVBdXRvbGluazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgY3JlYXRlQ29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlQ29tbWl0U3RhdHVzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0dXNlcy97c2hhfVwiXSxcbiAgICBjcmVhdGVEZXBsb3lLZXk6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlc1wiXG4gICAgXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50U3RhdHVzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiXG4gICAgXSxcbiAgICBjcmVhdGVEaXNwYXRjaEV2ZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kaXNwYXRjaGVzXCJdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3JlcG9zXCJdLFxuICAgIGNyZWF0ZUZvcms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCJdLFxuICAgIGNyZWF0ZUluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3JlcG9zXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllc1ZhbHVlczogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvcGVydGllcy92YWx1ZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVFbnZpcm9ubWVudDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVGaWxlQ29udGVudHM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udGVudHMve3BhdGh9XCJdLFxuICAgIGNyZWF0ZU9yZ1J1bGVzZXQ6IFtcIlBPU1QgL29yZ3Mve29yZ30vcnVsZXNldHNcIl0sXG4gICAgY3JlYXRlUGFnZXNEZXBsb3ltZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50c1wiXSxcbiAgICBjcmVhdGVQYWdlc1NpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIGNyZWF0ZVJlbGVhc2U6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCJdLFxuICAgIGNyZWF0ZVJlcG9SdWxlc2V0OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0c1wiXSxcbiAgICBjcmVhdGVUYWdQcm90ZWN0aW9uOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzL3Byb3RlY3Rpb25cIl0sXG4gICAgY3JlYXRlVXNpbmdUZW1wbGF0ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97dGVtcGxhdGVfb3duZXJ9L3t0ZW1wbGF0ZV9yZXBvfS9nZW5lcmF0ZVwiXG4gICAgXSxcbiAgICBjcmVhdGVXZWJob29rOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rc1wiXSxcbiAgICBkZWNsaW5lSW52aXRhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImRlY2xpbmVJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgZGVjbGluZUludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGRlbGV0ZUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCJcbiAgICBdLFxuICAgIGRlbGV0ZUFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vZW5mb3JjZV9hZG1pbnNcIlxuICAgIF0sXG4gICAgZGVsZXRlQW5FbnZpcm9ubWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlQXV0b2xpbms6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzL3thdXRvbGlua19pZH1cIl0sXG4gICAgZGVsZXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIlxuICAgIF0sXG4gICAgZGVsZXRlQ29tbWl0Q29tbWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZGVsZXRlQ29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiXG4gICAgXSxcbiAgICBkZWxldGVEZXBsb3lLZXk6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30va2V5cy97a2V5X2lkfVwiXSxcbiAgICBkZWxldGVEZXBsb3ltZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZURlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVGaWxlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBkZWxldGVJbnZpdGF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1J1bGVzZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgZGVsZXRlUGFnZXNTaXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIGRlbGV0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIlxuICAgIF0sXG4gICAgZGVsZXRlUmVsZWFzZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZGVsZXRlUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvYXNzZXRzL3thc3NldF9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlUmVwb1J1bGVzZXQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGRlbGV0ZVRhZ1Byb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzL3Byb3RlY3Rpb24ve3RhZ19wcm90ZWN0aW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVXZWJob29rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBkaXNhYmxlQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiXG4gICAgXSxcbiAgICBkaXNhYmxlRGVwbG95bWVudFByb3RlY3Rpb25SdWxlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMve3Byb3RlY3Rpb25fcnVsZV9pZH1cIlxuICAgIF0sXG4gICAgZGlzYWJsZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiXG4gICAgXSxcbiAgICBkaXNhYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCJcbiAgICBdLFxuICAgIGRvd25sb2FkQXJjaGl2ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ppcGJhbGwve3JlZn1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImRvd25sb2FkWmlwYmFsbEFyY2hpdmVcIl0gfVxuICAgIF0sXG4gICAgZG93bmxvYWRUYXJiYWxsQXJjaGl2ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YXJiYWxsL3tyZWZ9XCJdLFxuICAgIGRvd25sb2FkWmlwYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vemlwYmFsbC97cmVmfVwiXSxcbiAgICBlbmFibGVBdXRvbWF0ZWRTZWN1cml0eUZpeGVzOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b21hdGVkLXNlY3VyaXR5LWZpeGVzXCJcbiAgICBdLFxuICAgIGVuYWJsZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiXG4gICAgXSxcbiAgICBlbmFibGVWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIlxuICAgIF0sXG4gICAgZ2VuZXJhdGVSZWxlYXNlTm90ZXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvZ2VuZXJhdGUtbm90ZXNcIlxuICAgIF0sXG4gICAgZ2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGdldEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCJcbiAgICBdLFxuICAgIGdldEFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vZW5mb3JjZV9hZG1pbnNcIlxuICAgIF0sXG4gICAgZ2V0QWxsRGVwbG95bWVudFByb3RlY3Rpb25SdWxlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzXCJcbiAgICBdLFxuICAgIGdldEFsbEVudmlyb25tZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIl0sXG4gICAgZ2V0QWxsU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiXG4gICAgXSxcbiAgICBnZXRBbGxUb3BpY3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCJdLFxuICAgIGdldEFwcHNXaXRoQWNjZXNzVG9Qcm90ZWN0ZWRCcmFuY2g6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCJcbiAgICBdLFxuICAgIGdldEF1dG9saW5rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGdldEJyYW5jaDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRCcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiXG4gICAgXSxcbiAgICBnZXRCcmFuY2hSdWxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRDbG9uZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9jbG9uZXNcIl0sXG4gICAgZ2V0Q29kZUZyZXF1ZW5jeVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvZGVfZnJlcXVlbmN5XCJdLFxuICAgIGdldENvbGxhYm9yYXRvclBlcm1pc3Npb25MZXZlbDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfS9wZXJtaXNzaW9uXCJcbiAgICBdLFxuICAgIGdldENvbWJpbmVkU3RhdHVzRm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzXCJdLFxuICAgIGdldENvbW1pdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9XCJdLFxuICAgIGdldENvbW1pdEFjdGl2aXR5U3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvY29tbWl0X2FjdGl2aXR5XCJdLFxuICAgIGdldENvbW1pdENvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldENvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIlxuICAgIF0sXG4gICAgZ2V0Q29tbXVuaXR5UHJvZmlsZU1ldHJpY3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbXVuaXR5L3Byb2ZpbGVcIl0sXG4gICAgZ2V0Q29udGVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZ2V0Q29udHJpYnV0b3JzU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvY29udHJpYnV0b3JzXCJdLFxuICAgIGdldEN1c3RvbURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL3twcm90ZWN0aW9uX3J1bGVfaWR9XCJcbiAgICBdLFxuICAgIGdldEN1c3RvbVByb3BlcnRpZXNWYWx1ZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvcGVydGllcy92YWx1ZXNcIl0sXG4gICAgZ2V0RGVwbG95S2V5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXMve2tleV9pZH1cIl0sXG4gICAgZ2V0RGVwbG95bWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH1cIl0sXG4gICAgZ2V0RGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXMve2JyYW5jaF9wb2xpY3lfaWR9XCJcbiAgICBdLFxuICAgIGdldERlcGxveW1lbnRTdGF0dXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXMve3N0YXR1c19pZH1cIlxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCJcbiAgICBdLFxuICAgIGdldExhdGVzdFBhZ2VzQnVpbGQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzL2xhdGVzdFwiXSxcbiAgICBnZXRMYXRlc3RSZWxlYXNlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2xhdGVzdFwiXSxcbiAgICBnZXRPcmdSdWxlU3VpdGU6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlcy97cnVsZV9zdWl0ZV9pZH1cIl0sXG4gICAgZ2V0T3JnUnVsZVN1aXRlczogW1wiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCJdLFxuICAgIGdldE9yZ1J1bGVzZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgZ2V0T3JnUnVsZXNldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0c1wiXSxcbiAgICBnZXRQYWdlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICBnZXRQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy97YnVpbGRfaWR9XCJdLFxuICAgIGdldFBhZ2VzRGVwbG95bWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2RlcGxveW1lbnRzL3twYWdlc19kZXBsb3ltZW50X2lkfVwiXG4gICAgXSxcbiAgICBnZXRQYWdlc0hlYWx0aENoZWNrOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2hlYWx0aFwiXSxcbiAgICBnZXRQYXJ0aWNpcGF0aW9uU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvcGFydGljaXBhdGlvblwiXSxcbiAgICBnZXRQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3B1bGxfcmVxdWVzdF9yZXZpZXdzXCJcbiAgICBdLFxuICAgIGdldFB1bmNoQ2FyZFN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3B1bmNoX2NhcmRcIl0sXG4gICAgZ2V0UmVhZG1lOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlYWRtZVwiXSxcbiAgICBnZXRSZWFkbWVJbkRpcmVjdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWFkbWUve2Rpcn1cIl0sXG4gICAgZ2V0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZ2V0UmVsZWFzZUFzc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJdLFxuICAgIGdldFJlbGVhc2VCeVRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy90YWdzL3t0YWd9XCJdLFxuICAgIGdldFJlcG9SdWxlU3VpdGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy9ydWxlLXN1aXRlcy97cnVsZV9zdWl0ZV9pZH1cIlxuICAgIF0sXG4gICAgZ2V0UmVwb1J1bGVTdWl0ZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMvcnVsZS1zdWl0ZXNcIl0sXG4gICAgZ2V0UmVwb1J1bGVzZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGdldFJlcG9SdWxlc2V0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0c1wiXSxcbiAgICBnZXRTdGF0dXNDaGVja3NQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzXCJcbiAgICBdLFxuICAgIGdldFRlYW1zV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIlxuICAgIF0sXG4gICAgZ2V0VG9wUGF0aHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9wb3B1bGFyL3BhdGhzXCJdLFxuICAgIGdldFRvcFJlZmVycmVyczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFmZmljL3BvcHVsYXIvcmVmZXJyZXJzXCJdLFxuICAgIGdldFVzZXJzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIlxuICAgIF0sXG4gICAgZ2V0Vmlld3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy92aWV3c1wiXSxcbiAgICBnZXRXZWJob29rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9jb25maWdcIlxuICAgIF0sXG4gICAgZ2V0V2ViaG9va0RlbGl2ZXJ5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfVwiXG4gICAgXSxcbiAgICBsaXN0QWN0aXZpdGllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpdml0eVwiXSxcbiAgICBsaXN0QXV0b2xpbmtzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rc1wiXSxcbiAgICBsaXN0QnJhbmNoZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXNcIl0sXG4gICAgbGlzdEJyYW5jaGVzRm9ySGVhZENvbW1pdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2JyYW5jaGVzLXdoZXJlLWhlYWRcIlxuICAgIF0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21taXRTdGF0dXNlc0ZvclJlZjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzZXNcIlxuICAgIF0sXG4gICAgbGlzdENvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0c1wiXSxcbiAgICBsaXN0Q29udHJpYnV0b3JzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRyaWJ1dG9yc1wiXSxcbiAgICBsaXN0Q3VzdG9tRGVwbG95bWVudFJ1bGVJbnRlZ3JhdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlcy9hcHBzXCJcbiAgICBdLFxuICAgIGxpc3REZXBsb3lLZXlzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgbGlzdERlcGxveW1lbnRCcmFuY2hQb2xpY2llczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIlxuICAgIF0sXG4gICAgbGlzdERlcGxveW1lbnRTdGF0dXNlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiXG4gICAgXSxcbiAgICBsaXN0RGVwbG95bWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcmVwb3NcIl0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3JlcG9zXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVwb3NcIl0sXG4gICAgbGlzdEZvcmtzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdExhbmd1YWdlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYW5ndWFnZXNcIl0sXG4gICAgbGlzdFBhZ2VzQnVpbGRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkc1wiXSxcbiAgICBsaXN0UHVibGljOiBbXCJHRVQgL3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0UHVsbFJlcXVlc3RzQXNzb2NpYXRlZFdpdGhDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9wdWxsc1wiXG4gICAgXSxcbiAgICBsaXN0UmVsZWFzZUFzc2V0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHNcIlxuICAgIF0sXG4gICAgbGlzdFJlbGVhc2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCJdLFxuICAgIGxpc3RUYWdQcm90ZWN0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3MvcHJvdGVjdGlvblwiXSxcbiAgICBsaXN0VGFnczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCJdLFxuICAgIGxpc3RUZWFtczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIl0sXG4gICAgbWVyZ2U6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21lcmdlc1wiXSxcbiAgICBtZXJnZVVwc3RyZWFtOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZS11cHN0cmVhbVwiXSxcbiAgICBwaW5nV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L3BpbmdzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJcbiAgICBdLFxuICAgIHJlbW92ZUFwcEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiYXBwc1wiIH1cbiAgICBdLFxuICAgIHJlbW92ZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICByZW1vdmVTdGF0dXNDaGVja0NvbnRleHRzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzL2NvbnRleHRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImNvbnRleHRzXCIgfVxuICAgIF0sXG4gICAgcmVtb3ZlU3RhdHVzQ2hlY2tQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzXCJcbiAgICBdLFxuICAgIHJlbW92ZVRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH1cbiAgICBdLFxuICAgIHJlbW92ZVVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH1cbiAgICBdLFxuICAgIHJlbmFtZUJyYW5jaDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcmVuYW1lXCJdLFxuICAgIHJlcGxhY2VBbGxUb3BpY3M6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCJdLFxuICAgIHJlcXVlc3RQYWdlc0J1aWxkOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIl0sXG4gICAgc2V0QWRtaW5CcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vZW5mb3JjZV9hZG1pbnNcIlxuICAgIF0sXG4gICAgc2V0QXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfVxuICAgIF0sXG4gICAgc2V0U3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH1cbiAgICBdLFxuICAgIHNldFRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH1cbiAgICBdLFxuICAgIHNldFVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH1cbiAgICBdLFxuICAgIHRlc3RQdXNoV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L3Rlc3RzXCJdLFxuICAgIHRyYW5zZmVyOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFuc2ZlclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICB1cGRhdGVCcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiXG4gICAgXSxcbiAgICB1cGRhdGVDb21taXRDb21tZW50OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIHVwZGF0ZURlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiXG4gICAgXSxcbiAgICB1cGRhdGVJbmZvcm1hdGlvbkFib3V0UGFnZXNTaXRlOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIHVwZGF0ZUludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXG4gICAgXSxcbiAgICB1cGRhdGVPcmdSdWxlc2V0OiBbXCJQVVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiXG4gICAgXSxcbiAgICB1cGRhdGVSZWxlYXNlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIHVwZGF0ZVJlbGVhc2VBc3NldDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvYXNzZXRzL3thc3NldF9pZH1cIlxuICAgIF0sXG4gICAgdXBkYXRlUmVwb1J1bGVzZXQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVN0YXR1c0NoZWNrUG90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcInVwZGF0ZVN0YXR1c0NoZWNrUHJvdGVjdGlvblwiXSB9XG4gICAgXSxcbiAgICB1cGRhdGVTdGF0dXNDaGVja1Byb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiXG4gICAgXSxcbiAgICB1cGRhdGVXZWJob29rOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JSZXBvOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJcbiAgICBdLFxuICAgIHVwbG9hZFJlbGVhc2VBc3NldDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzez9uYW1lLGxhYmVsfVwiLFxuICAgICAgeyBiYXNlVXJsOiBcImh0dHBzOi8vdXBsb2Fkcy5naXRodWIuY29tXCIgfVxuICAgIF1cbiAgfSxcbiAgc2VhcmNoOiB7XG4gICAgY29kZTogW1wiR0VUIC9zZWFyY2gvY29kZVwiXSxcbiAgICBjb21taXRzOiBbXCJHRVQgL3NlYXJjaC9jb21taXRzXCJdLFxuICAgIGlzc3Vlc0FuZFB1bGxSZXF1ZXN0czogW1wiR0VUIC9zZWFyY2gvaXNzdWVzXCJdLFxuICAgIGxhYmVsczogW1wiR0VUIC9zZWFyY2gvbGFiZWxzXCJdLFxuICAgIHJlcG9zOiBbXCJHRVQgL3NlYXJjaC9yZXBvc2l0b3JpZXNcIl0sXG4gICAgdG9waWNzOiBbXCJHRVQgL3NlYXJjaC90b3BpY3NcIl0sXG4gICAgdXNlcnM6IFtcIkdFVCAvc2VhcmNoL3VzZXJzXCJdXG4gIH0sXG4gIHNlY3JldFNjYW5uaW5nOiB7XG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIlxuICAgIF0sXG4gICAgbGlzdEFsZXJ0c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0TG9jYXRpb25zRm9yQWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2xvY2F0aW9uc1wiXG4gICAgXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXG4gICAgXVxuICB9LFxuICBzZWN1cml0eUFkdmlzb3JpZXM6IHtcbiAgICBjcmVhdGVGb3JrOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMve2doc2FfaWR9L2ZvcmtzXCJcbiAgICBdLFxuICAgIGNyZWF0ZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMvcmVwb3J0c1wiXG4gICAgXSxcbiAgICBjcmVhdGVSZXBvc2l0b3J5QWR2aXNvcnk6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllc1wiXG4gICAgXSxcbiAgICBjcmVhdGVSZXBvc2l0b3J5QWR2aXNvcnlDdmVSZXF1ZXN0OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMve2doc2FfaWR9L2N2ZVwiXG4gICAgXSxcbiAgICBnZXRHbG9iYWxBZHZpc29yeTogW1wiR0VUIC9hZHZpc29yaWVzL3tnaHNhX2lkfVwiXSxcbiAgICBnZXRSZXBvc2l0b3J5QWR2aXNvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfVwiXG4gICAgXSxcbiAgICBsaXN0R2xvYmFsQWR2aXNvcmllczogW1wiR0VUIC9hZHZpc29yaWVzXCJdLFxuICAgIGxpc3RPcmdSZXBvc2l0b3J5QWR2aXNvcmllczogW1wiR0VUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LWFkdmlzb3JpZXNcIl0sXG4gICAgbGlzdFJlcG9zaXRvcnlBZHZpc29yaWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIl0sXG4gICAgdXBkYXRlUmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfVwiXG4gICAgXVxuICB9LFxuICB0ZWFtczoge1xuICAgIGFkZE9yVXBkYXRlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICBhZGRPclVwZGF0ZVByb2plY3RQZXJtaXNzaW9uc0luT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9wcm9qZWN0cy97cHJvamVjdF9pZH1cIlxuICAgIF0sXG4gICAgYWRkT3JVcGRhdGVSZXBvUGVybWlzc2lvbnNJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIlxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCJcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JSZXBvSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zL3tvd25lcn0ve3JlcG99XCJcbiAgICBdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvb3Jncy97b3JnfS90ZWFtc1wiXSxcbiAgICBjcmVhdGVEaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBjcmVhdGVEaXNjdXNzaW9uSW5Pcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIl0sXG4gICAgZGVsZXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCJcbiAgICBdLFxuICAgIGRlbGV0ZURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfVwiXG4gICAgXSxcbiAgICBkZWxldGVJbk9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdLFxuICAgIGdldEJ5TmFtZTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdLFxuICAgIGdldERpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBnZXREaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIlxuICAgIF0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICBsaXN0OiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIl0sXG4gICAgbGlzdENoaWxkSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS90ZWFtc1wiXSxcbiAgICBsaXN0RGlzY3Vzc2lvbkNvbW1lbnRzSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgbGlzdERpc2N1c3Npb25zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9uc1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci90ZWFtc1wiXSxcbiAgICBsaXN0TWVtYmVyc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc1wiXSxcbiAgICBsaXN0UGVuZGluZ0ludml0YXRpb25zSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCJcbiAgICBdLFxuICAgIGxpc3RQcm9qZWN0c0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIl0sXG4gICAgbGlzdFJlcG9zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvc1wiXSxcbiAgICByZW1vdmVNZW1iZXJzaGlwRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJcbiAgICBdLFxuICAgIHJlbW92ZVByb2plY3RJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCJcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Jbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIlxuICAgIF0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIlxuICAgIF0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIlxuICAgIF0sXG4gICAgdXBkYXRlSW5Pcmc6IFtcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdXG4gIH0sXG4gIHVzZXJzOiB7XG4gICAgYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGFkZEVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvZW1haWxzXCJdLFxuICAgIGFkZFNvY2lhbEFjY291bnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgYmxvY2s6IFtcIlBVVCAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0Jsb2NrZWQ6IFtcIkdFVCAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0ZvbGxvd2luZ0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmcve3RhcmdldF91c2VyfVwiXSxcbiAgICBjaGVja1BlcnNvbklzRm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICBjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvZ3BnX2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImNyZWF0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGNyZWF0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2dwZ19rZXlzXCJdLFxuICAgIGNyZWF0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9rZXlzXCJdLFxuICAgIGNyZWF0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9lbWFpbHNcIl0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBkZWxldGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiXSxcbiAgICBkZWxldGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9rZXlzL3trZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBkZWxldGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2tleXMve2tleV9pZH1cIl0sXG4gICAgZGVsZXRlU29jaWFsQWNjb3VudEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGRlbGV0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvc3NoX3NpZ25pbmdfa2V5cy97c3NoX3NpZ25pbmdfa2V5X2lkfVwiXG4gICAgXSxcbiAgICBmb2xsb3c6IFtcIlBVVCAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICBnZXRBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXJcIl0sXG4gICAgZ2V0QnlVc2VybmFtZTogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9XCJdLFxuICAgIGdldENvbnRleHRGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaG92ZXJjYXJkXCJdLFxuICAgIGdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIva2V5cy97a2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGdldFNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvc3NoX3NpZ25pbmdfa2V5cy97c3NoX3NpZ25pbmdfa2V5X2lkfVwiXG4gICAgXSxcbiAgICBsaXN0OiBbXCJHRVQgL3VzZXJzXCJdLFxuICAgIGxpc3RCbG9ja2VkQnlBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9ibG9ja3NcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RCbG9ja2VkQnlBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ibG9ja3NcIl0sXG4gICAgbGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZm9sbG93aW5nXCJdLFxuICAgIGxpc3RGb2xsb3dlcnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ZvbGxvd2Vyc1wiXSxcbiAgICBsaXN0Rm9sbG93ZXJzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2Vyc1wiXSxcbiAgICBsaXN0Rm9sbG93aW5nRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2luZ1wiXSxcbiAgICBsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2dwZ19rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5c1wiXSxcbiAgICBsaXN0R3BnS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ncGdfa2V5c1wiXSxcbiAgICBsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvcHVibGljX2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIl0sXG4gICAgbGlzdFB1YmxpY0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0va2V5c1wiXSxcbiAgICBsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgbGlzdFB1YmxpY1NzaEtleXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2tleXNcIl0sXG4gICAgbGlzdFNvY2lhbEFjY291bnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgbGlzdFNvY2lhbEFjY291bnRzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NvY2lhbF9hY2NvdW50c1wiXSxcbiAgICBsaXN0U3NoU2lnbmluZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXNcIl0sXG4gICAgbGlzdFNzaFNpZ25pbmdLZXlzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NzaF9zaWduaW5nX2tleXNcIl0sXG4gICAgc2V0UHJpbWFyeUVtYWlsVmlzaWJpbGl0eUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvZW1haWwvdmlzaWJpbGl0eVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwic2V0UHJpbWFyeUVtYWlsVmlzaWJpbGl0eUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQQVRDSCAvdXNlci9lbWFpbC92aXNpYmlsaXR5XCJcbiAgICBdLFxuICAgIHVuYmxvY2s6IFtcIkRFTEVURSAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICB1bmZvbGxvdzogW1wiREVMRVRFIC91c2VyL2ZvbGxvd2luZy97dXNlcm5hbWV9XCJdLFxuICAgIHVwZGF0ZUF1dGhlbnRpY2F0ZWQ6IFtcIlBBVENIIC91c2VyXCJdXG4gIH1cbn07XG52YXIgZW5kcG9pbnRzX2RlZmF1bHQgPSBFbmRwb2ludHM7XG5leHBvcnQge1xuICBlbmRwb2ludHNfZGVmYXVsdCBhcyBkZWZhdWx0XG59O1xuIiwiaW1wb3J0IEVORFBPSU5UUyBmcm9tIFwiLi9nZW5lcmF0ZWQvZW5kcG9pbnRzLmpzXCI7XG5jb25zdCBlbmRwb2ludE1ldGhvZHNNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuZm9yIChjb25zdCBbc2NvcGUsIGVuZHBvaW50c10gb2YgT2JqZWN0LmVudHJpZXMoRU5EUE9JTlRTKSkge1xuICBmb3IgKGNvbnN0IFttZXRob2ROYW1lLCBlbmRwb2ludF0gb2YgT2JqZWN0LmVudHJpZXMoZW5kcG9pbnRzKSkge1xuICAgIGNvbnN0IFtyb3V0ZSwgZGVmYXVsdHMsIGRlY29yYXRpb25zXSA9IGVuZHBvaW50O1xuICAgIGNvbnN0IFttZXRob2QsIHVybF0gPSByb3V0ZS5zcGxpdCgvIC8pO1xuICAgIGNvbnN0IGVuZHBvaW50RGVmYXVsdHMgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIHVybFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRzXG4gICAgKTtcbiAgICBpZiAoIWVuZHBvaW50TWV0aG9kc01hcC5oYXMoc2NvcGUpKSB7XG4gICAgICBlbmRwb2ludE1ldGhvZHNNYXAuc2V0KHNjb3BlLCAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpKTtcbiAgICB9XG4gICAgZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkuc2V0KG1ldGhvZE5hbWUsIHtcbiAgICAgIHNjb3BlLFxuICAgICAgbWV0aG9kTmFtZSxcbiAgICAgIGVuZHBvaW50RGVmYXVsdHMsXG4gICAgICBkZWNvcmF0aW9uc1xuICAgIH0pO1xuICB9XG59XG5jb25zdCBoYW5kbGVyID0ge1xuICBoYXMoeyBzY29wZSB9LCBtZXRob2ROYW1lKSB7XG4gICAgcmV0dXJuIGVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLmhhcyhtZXRob2ROYW1lKTtcbiAgfSxcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgbWV0aG9kTmFtZSkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdGhpcy5nZXQodGFyZ2V0LCBtZXRob2ROYW1lKSxcbiAgICAgIC8vIGVuc3VyZXMgbWV0aG9kIGlzIGluIHRoZSBjYWNoZVxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgfTtcbiAgfSxcbiAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBtZXRob2ROYW1lLCBkZXNjcmlwdG9yKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldC5jYWNoZSwgbWV0aG9kTmFtZSwgZGVzY3JpcHRvcik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgbWV0aG9kTmFtZSkge1xuICAgIGRlbGV0ZSB0YXJnZXQuY2FjaGVbbWV0aG9kTmFtZV07XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIG93bktleXMoeyBzY29wZSB9KSB7XG4gICAgcmV0dXJuIFsuLi5lbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5rZXlzKCldO1xuICB9LFxuICBzZXQodGFyZ2V0LCBtZXRob2ROYW1lLCB2YWx1ZSkge1xuICAgIHJldHVybiB0YXJnZXQuY2FjaGVbbWV0aG9kTmFtZV0gPSB2YWx1ZTtcbiAgfSxcbiAgZ2V0KHsgb2N0b2tpdCwgc2NvcGUsIGNhY2hlIH0sIG1ldGhvZE5hbWUpIHtcbiAgICBpZiAoY2FjaGVbbWV0aG9kTmFtZV0pIHtcbiAgICAgIHJldHVybiBjYWNoZVttZXRob2ROYW1lXTtcbiAgICB9XG4gICAgY29uc3QgbWV0aG9kID0gZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkuZ2V0KG1ldGhvZE5hbWUpO1xuICAgIGlmICghbWV0aG9kKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgICBjb25zdCB7IGVuZHBvaW50RGVmYXVsdHMsIGRlY29yYXRpb25zIH0gPSBtZXRob2Q7XG4gICAgaWYgKGRlY29yYXRpb25zKSB7XG4gICAgICBjYWNoZVttZXRob2ROYW1lXSA9IGRlY29yYXRlKFxuICAgICAgICBvY3Rva2l0LFxuICAgICAgICBzY29wZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgZW5kcG9pbnREZWZhdWx0cyxcbiAgICAgICAgZGVjb3JhdGlvbnNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhY2hlW21ldGhvZE5hbWVdID0gb2N0b2tpdC5yZXF1ZXN0LmRlZmF1bHRzKGVuZHBvaW50RGVmYXVsdHMpO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVbbWV0aG9kTmFtZV07XG4gIH1cbn07XG5mdW5jdGlvbiBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCkge1xuICBjb25zdCBuZXdNZXRob2RzID0ge307XG4gIGZvciAoY29uc3Qgc2NvcGUgb2YgZW5kcG9pbnRNZXRob2RzTWFwLmtleXMoKSkge1xuICAgIG5ld01ldGhvZHNbc2NvcGVdID0gbmV3IFByb3h5KHsgb2N0b2tpdCwgc2NvcGUsIGNhY2hlOiB7fSB9LCBoYW5kbGVyKTtcbiAgfVxuICByZXR1cm4gbmV3TWV0aG9kcztcbn1cbmZ1bmN0aW9uIGRlY29yYXRlKG9jdG9raXQsIHNjb3BlLCBtZXRob2ROYW1lLCBkZWZhdWx0cywgZGVjb3JhdGlvbnMpIHtcbiAgY29uc3QgcmVxdWVzdFdpdGhEZWZhdWx0cyA9IG9jdG9raXQucmVxdWVzdC5kZWZhdWx0cyhkZWZhdWx0cyk7XG4gIGZ1bmN0aW9uIHdpdGhEZWNvcmF0aW9ucyguLi5hcmdzKSB7XG4gICAgbGV0IG9wdGlvbnMgPSByZXF1ZXN0V2l0aERlZmF1bHRzLmVuZHBvaW50Lm1lcmdlKC4uLmFyZ3MpO1xuICAgIGlmIChkZWNvcmF0aW9ucy5tYXBUb0RhdGEpIHtcbiAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgIGRhdGE6IG9wdGlvbnNbZGVjb3JhdGlvbnMubWFwVG9EYXRhXSxcbiAgICAgICAgW2RlY29yYXRpb25zLm1hcFRvRGF0YV06IHZvaWQgMFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyhvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGRlY29yYXRpb25zLnJlbmFtZWQpIHtcbiAgICAgIGNvbnN0IFtuZXdTY29wZSwgbmV3TWV0aG9kTmFtZV0gPSBkZWNvcmF0aW9ucy5yZW5hbWVkO1xuICAgICAgb2N0b2tpdC5sb2cud2FybihcbiAgICAgICAgYG9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gb2N0b2tpdC4ke25ld1Njb3BlfS4ke25ld01ldGhvZE5hbWV9KClgXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGVjb3JhdGlvbnMuZGVwcmVjYXRlZCkge1xuICAgICAgb2N0b2tpdC5sb2cud2FybihkZWNvcmF0aW9ucy5kZXByZWNhdGVkKTtcbiAgICB9XG4gICAgaWYgKGRlY29yYXRpb25zLnJlbmFtZWRQYXJhbWV0ZXJzKSB7XG4gICAgICBjb25zdCBvcHRpb25zMiA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBhbGlhc10gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICAgIGRlY29yYXRpb25zLnJlbmFtZWRQYXJhbWV0ZXJzXG4gICAgICApKSB7XG4gICAgICAgIGlmIChuYW1lIGluIG9wdGlvbnMyKSB7XG4gICAgICAgICAgb2N0b2tpdC5sb2cud2FybihcbiAgICAgICAgICAgIGBcIiR7bmFtZX1cIiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBmb3IgXCJvY3Rva2l0LiR7c2NvcGV9LiR7bWV0aG9kTmFtZX0oKVwiLiBVc2UgXCIke2FsaWFzfVwiIGluc3RlYWRgXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIShhbGlhcyBpbiBvcHRpb25zMikpIHtcbiAgICAgICAgICAgIG9wdGlvbnMyW2FsaWFzXSA9IG9wdGlvbnMyW25hbWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgb3B0aW9uczJbbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXF1ZXN0V2l0aERlZmF1bHRzKG9wdGlvbnMyKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMoLi4uYXJncyk7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24od2l0aERlY29yYXRpb25zLCByZXF1ZXN0V2l0aERlZmF1bHRzKTtcbn1cbmV4cG9ydCB7XG4gIGVuZHBvaW50c1RvTWV0aG9kc1xufTtcbiIsImltcG9ydCB7IFZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uLmpzXCI7XG5pbXBvcnQgeyBlbmRwb2ludHNUb01ldGhvZHMgfSBmcm9tIFwiLi9lbmRwb2ludHMtdG8tbWV0aG9kcy5qc1wiO1xuZnVuY3Rpb24gcmVzdEVuZHBvaW50TWV0aG9kcyhvY3Rva2l0KSB7XG4gIGNvbnN0IGFwaSA9IGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0KTtcbiAgcmV0dXJuIHtcbiAgICByZXN0OiBhcGlcbiAgfTtcbn1cbnJlc3RFbmRwb2ludE1ldGhvZHMuVkVSU0lPTiA9IFZFUlNJT047XG5mdW5jdGlvbiBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzKG9jdG9raXQpIHtcbiAgY29uc3QgYXBpID0gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQpO1xuICByZXR1cm4ge1xuICAgIC4uLmFwaSxcbiAgICByZXN0OiBhcGlcbiAgfTtcbn1cbmxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMuVkVSU0lPTiA9IFZFUlNJT047XG5leHBvcnQge1xuICBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzLFxuICByZXN0RW5kcG9pbnRNZXRob2RzXG59O1xuIiwiY29uc3QgVkVSU0lPTiA9IFwiMjEuMC4wXCI7XG5leHBvcnQge1xuICBWRVJTSU9OXG59O1xuIiwiaW1wb3J0IHsgT2N0b2tpdCBhcyBDb3JlIH0gZnJvbSBcIkBvY3Rva2l0L2NvcmVcIjtcbmltcG9ydCB7IHJlcXVlc3RMb2cgfSBmcm9tIFwiQG9jdG9raXQvcGx1Z2luLXJlcXVlc3QtbG9nXCI7XG5pbXBvcnQge1xuICBwYWdpbmF0ZVJlc3Rcbn0gZnJvbSBcIkBvY3Rva2l0L3BsdWdpbi1wYWdpbmF0ZS1yZXN0XCI7XG5pbXBvcnQgeyBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzIH0gZnJvbSBcIkBvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNcIjtcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uLmpzXCI7XG5jb25zdCBPY3Rva2l0ID0gQ29yZS5wbHVnaW4ocmVxdWVzdExvZywgbGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcywgcGFnaW5hdGVSZXN0KS5kZWZhdWx0cyhcbiAge1xuICAgIHVzZXJBZ2VudDogYG9jdG9raXQtcmVzdC5qcy8ke1ZFUlNJT059YFxuICB9XG4pO1xuZXhwb3J0IHtcbiAgT2N0b2tpdFxufTtcbiIsImltcG9ydCB7IF9fYXdhaXRlciB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgZGVidWdGYWN0b3J5IH0gZnJvbSAnLi9kZWJ1Zyc7XG5pbXBvcnQgeyB3cml0ZUZpbGVBc3luYywgZmlsZUV4aXN0cyB9IGZyb20gJy4vdXRpbHMnO1xuY29uc3QgZGVidWcgPSBkZWJ1Z0ZhY3RvcnkoJ3VwZGF0ZS1wYWNrYWdlJyk7XG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlUGFja2FnZUpzb24ocGF0aCwgcGFydGlhbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0cyA9IHlpZWxkIGZpbGVFeGlzdHMocGF0aCk7XG4gICAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgICAgICBkZWJ1ZyhgRmlsZSBub3QgZXhpc3RzICR7cGF0aH1gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvbGQgPSByZXF1aXJlKHBhdGgpO1xuICAgICAgICB5aWVsZCB3cml0ZUZpbGVBc3luYyhwYXRoLCBKU09OLnN0cmluZ2lmeShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9sZCksIHBhcnRpYWwpLCBudWxsLCAyKSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cGRhdGUtcGFja2FnZS5qcy5tYXAiLCJpbXBvcnQgeyBfX2F3YWl0ZXIgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gJ2NsaXBhbmlvbic7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjb2xvcmV0dGUnO1xuaW1wb3J0IHsgZ2V0TmFwaUNvbmZpZyB9IGZyb20gJy4vY29uc3RzJztcbmltcG9ydCB7IGRlYnVnRmFjdG9yeSB9IGZyb20gJy4vZGVidWcnO1xuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICcuL3NwYXduJztcbmltcG9ydCB7IHVwZGF0ZVBhY2thZ2VKc29uIH0gZnJvbSAnLi91cGRhdGUtcGFja2FnZSc7XG5jb25zdCBkZWJ1ZyA9IGRlYnVnRmFjdG9yeSgndmVyc2lvbicpO1xuZXhwb3J0IGNsYXNzIFZlcnNpb25Db21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMucHJlZml4ID0gT3B0aW9uLlN0cmluZyhgLXAsLS1wcmVmaXhgLCAnbnBtJyk7XG4gICAgICAgIHRoaXMuY29uZmlnRmlsZU5hbWUgPSBPcHRpb24uU3RyaW5nKCctYywtLWNvbmZpZycpO1xuICAgIH1cbiAgICBzdGF0aWMgdXBkYXRlUGFja2FnZUpzb24ocHJlZml4LCBjb25maWdGaWxlTmFtZSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgeyB2ZXJzaW9uLCBwbGF0Zm9ybXMgfSA9IGdldE5hcGlDb25maWcoY29uZmlnRmlsZU5hbWUpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwbGF0Zm9ybURldGFpbCBvZiBwbGF0Zm9ybXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwa2dEaXIgPSBqb2luKHByb2Nlc3MuY3dkKCksIHByZWZpeCwgcGxhdGZvcm1EZXRhaWwucGxhdGZvcm1BcmNoQUJJKTtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhgVXBkYXRlIHZlcnNpb24gdG8gJHtjaGFsay5ncmVlbkJyaWdodCh2ZXJzaW9uKX0gaW4gWyR7Y2hhbGsueWVsbG93QnJpZ2h0KHBrZ0Rpcil9XWApO1xuICAgICAgICAgICAgICAgIHlpZWxkIHVwZGF0ZVBhY2thZ2VKc29uKGpvaW4ocGtnRGlyLCAncGFja2FnZS5qc29uJyksIHtcbiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGV4ZWN1dGUoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB5aWVsZCBWZXJzaW9uQ29tbWFuZC51cGRhdGVQYWNrYWdlSnNvbih0aGlzLnByZWZpeCwgdGhpcy5jb25maWdGaWxlTmFtZSk7XG4gICAgICAgICAgICB5aWVsZCBzcGF3bignZ2l0IGFkZCAuJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblZlcnNpb25Db21tYW5kLnVzYWdlID0gQ29tbWFuZC5Vc2FnZSh7XG4gICAgZGVzY3JpcHRpb246ICdVcGRhdGUgdmVyc2lvbnMgaW4gY3JlYXRlZCBucG0gZGlyJyxcbn0pO1xuVmVyc2lvbkNvbW1hbmQucGF0aHMgPSBbWyd2ZXJzaW9uJ11dO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiLCJpbXBvcnQgeyBfX2F3YWl0ZXIgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHN0YXRTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgT2N0b2tpdCB9IGZyb20gJ0BvY3Rva2l0L3Jlc3QnO1xuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY2xpcGFuaW9uJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NvbG9yZXR0ZSc7XG5pbXBvcnQgeyBnZXROYXBpQ29uZmlnIH0gZnJvbSAnLi9jb25zdHMnO1xuaW1wb3J0IHsgZGVidWdGYWN0b3J5IH0gZnJvbSAnLi9kZWJ1Zyc7XG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJy4vc3Bhd24nO1xuaW1wb3J0IHsgdXBkYXRlUGFja2FnZUpzb24gfSBmcm9tICcuL3VwZGF0ZS1wYWNrYWdlJztcbmltcG9ydCB7IHJlYWRGaWxlQXN5bmMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFZlcnNpb25Db21tYW5kIH0gZnJvbSAnLi92ZXJzaW9uJztcbmNvbnN0IGRlYnVnID0gZGVidWdGYWN0b3J5KCdwcmVwdWJsaXNoJyk7XG5leHBvcnQgY2xhc3MgUHJlUHVibGlzaENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5wcmVmaXggPSBPcHRpb24uU3RyaW5nKGAtcCwtLXByZWZpeGAsICducG0nKTtcbiAgICAgICAgdGhpcy50YWdTdHlsZSA9IE9wdGlvbi5TdHJpbmcoJy0tdGFnc3R5bGUsLXQnLCAnbGVybmEnKTtcbiAgICAgICAgdGhpcy5jb25maWdGaWxlTmFtZSA9IE9wdGlvbi5TdHJpbmcoJy1jLC0tY29uZmlnJyk7XG4gICAgICAgIHRoaXMuaXNEcnlSdW4gPSBPcHRpb24uQm9vbGVhbignLS1kcnktcnVuJywgZmFsc2UpO1xuICAgICAgICB0aGlzLnNraXBHSFJlbGVhc2UgPSBPcHRpb24uQm9vbGVhbignLS1za2lwLWdoLXJlbGVhc2UnLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuZ2hSZWxlYXNlTmFtZSA9IE9wdGlvbi5TdHJpbmcoJy0tZ2gtcmVsZWFzZS1uYW1lJyk7XG4gICAgICAgIHRoaXMuZXhpc3RpbmdSZWxlYXNlSWQgPSBPcHRpb24uU3RyaW5nKCctLWdoLXJlbGVhc2UtaWQnKTtcbiAgICB9XG4gICAgZXhlY3V0ZSgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgcGFja2FnZUpzb25QYXRoLCBwbGF0Zm9ybXMsIHZlcnNpb24sIHBhY2thZ2VOYW1lLCBiaW5hcnlOYW1lLCBucG1DbGllbnQsIH0gPSBnZXROYXBpQ29uZmlnKHRoaXMuY29uZmlnRmlsZU5hbWUpO1xuICAgICAgICAgICAgZGVidWcoYFVwZGF0ZSBvcHRpb25hbERlcGVuZGVuY2llcyBpbiBbJHtwYWNrYWdlSnNvblBhdGh9XWApO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzRHJ5UnVuKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgVmVyc2lvbkNvbW1hbmQudXBkYXRlUGFja2FnZUpzb24odGhpcy5wcmVmaXgsIHRoaXMuY29uZmlnRmlsZU5hbWUpO1xuICAgICAgICAgICAgICAgIHlpZWxkIHVwZGF0ZVBhY2thZ2VKc29uKHBhY2thZ2VKc29uUGF0aCwge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25hbERlcGVuZGVuY2llczogcGxhdGZvcm1zLnJlZHVjZSgoYWNjLCBjdXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY1tgJHtwYWNrYWdlTmFtZX0tJHtjdXIucGxhdGZvcm1BcmNoQUJJfWBdID0gYCR7dmVyc2lvbn1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgICAgICAgICAgfSwge30pLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeyBvd25lciwgcmVwbywgcGtnSW5mbywgb2N0b2tpdCB9ID0gdGhpcy5leGlzdGluZ1JlbGVhc2VJZFxuICAgICAgICAgICAgICAgID8geWllbGQgdGhpcy5nZXRSZXBvSW5mbyhwYWNrYWdlTmFtZSwgdmVyc2lvbilcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHRoaXMuY3JlYXRlR2hSZWxlYXNlKHBhY2thZ2VOYW1lLCB2ZXJzaW9uKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGxhdGZvcm1EZXRhaWwgb2YgcGxhdGZvcm1zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGtnRGlyID0gam9pbihwcm9jZXNzLmN3ZCgpLCB0aGlzLnByZWZpeCwgYCR7cGxhdGZvcm1EZXRhaWwucGxhdGZvcm1BcmNoQUJJfWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVuYW1lID0gYCR7YmluYXJ5TmFtZX0uJHtwbGF0Zm9ybURldGFpbC5wbGF0Zm9ybUFyY2hBQkl9Lm5vZGVgO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRzdFBhdGggPSBqb2luKHBrZ0RpciwgZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0RyeVJ1bikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWV4aXN0c1N5bmMoZHN0UGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgWyR7Y2hhbGsueWVsbG93QnJpZ2h0KGRzdFBhdGgpfV0gZG9lc24ndCBleGlzdGApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeWllbGQgc3Bhd24oYCR7bnBtQ2xpZW50fSBwdWJsaXNoYCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3dkOiBwa2dEaXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNraXBHSFJlbGVhc2UgJiYgcmVwbyAmJiBvd25lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoYFN0YXJ0IHVwbG9hZCBbJHtjaGFsay5ncmVlbkJyaWdodChkc3RQYXRoKX1dIHRvIEdpdGh1YiByZWxlYXNlLCBbJHtjaGFsay5ncmVlbkJyaWdodChwa2dJbmZvLnRhZyl9XWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWxlYXNlSWQgPSB0aGlzLmV4aXN0aW5nUmVsZWFzZUlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTnVtYmVyKHRoaXMuZXhpc3RpbmdSZWxlYXNlSWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHlpZWxkIG9jdG9raXQucmVwb3MuZ2V0UmVsZWFzZUJ5VGFnKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG86IHJlcG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcjogb3duZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWc6IHBrZ0luZm8udGFnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSkuZGF0YS5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkc3RGaWxlU3RhdHMgPSBzdGF0U3luYyhkc3RQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhc3NldEluZm8gPSB5aWVsZCBvY3Rva2l0LnJlcG9zLnVwbG9hZFJlbGVhc2VBc3NldCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyOiBvd25lcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbzogcmVwbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZmlsZW5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VfaWQ6IHJlbGVhc2VJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFUeXBlOiB7IGZvcm1hdDogJ3JhdycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQtbGVuZ3RoJzogZHN0RmlsZVN0YXRzLnNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogeWllbGQgcmVhZEZpbGVBc3luYyhkc3RQYXRoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oYCR7Y2hhbGsuZ3JlZW4oZHN0UGF0aCl9IHVwbG9hZCBzdWNjZXNzYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKGBEb3dubG9hZCB1cmw6ICR7Y2hhbGsuYmx1ZUJyaWdodChhc3NldEluZm8uZGF0YS5icm93c2VyX2Rvd25sb2FkX3VybCl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKGBQYXJhbTogJHtKU09OLnN0cmluZ2lmeSh7IG93bmVyLCByZXBvLCB0YWc6IHBrZ0luZm8udGFnLCBmaWxlbmFtZTogZHN0UGF0aCB9LCBudWxsLCAyKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY3JlYXRlR2hSZWxlYXNlKHBhY2thZ2VOYW1lLCB2ZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5za2lwR0hSZWxlYXNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgb3duZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHJlcG86IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHBrZ0luZm86IHsgbmFtZTogbnVsbCwgdmVyc2lvbjogbnVsbCwgdGFnOiBudWxsIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgcmVwbywgb3duZXIsIHBrZ0luZm8sIG9jdG9raXQgfSA9IHlpZWxkIHRoaXMuZ2V0UmVwb0luZm8ocGFja2FnZU5hbWUsIHZlcnNpb24pO1xuICAgICAgICAgICAgaWYgKCFyZXBvIHx8ICFvd25lcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG93bmVyOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICByZXBvOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBwa2dJbmZvOiB7IG5hbWU6IG51bGwsIHZlcnNpb246IG51bGwsIHRhZzogbnVsbCB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNEcnlSdW4pIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBvY3Rva2l0LnJlcG9zLmNyZWF0ZVJlbGVhc2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnX25hbWU6IHBrZ0luZm8udGFnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5naFJlbGVhc2VOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlcmVsZWFzZTogdmVyc2lvbi5pbmNsdWRlcygnYWxwaGEnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24uaW5jbHVkZXMoJ2JldGEnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24uaW5jbHVkZXMoJ3JjJyksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhgUGFyYW1zOiAke0pTT04uc3RyaW5naWZ5KHsgb3duZXIsIHJlcG8sIHRhZ19uYW1lOiBwa2dJbmZvLnRhZyB9LCBudWxsLCAyKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBvd25lciwgcmVwbywgcGtnSW5mbywgb2N0b2tpdCB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0UmVwb0luZm8ocGFja2FnZU5hbWUsIHZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRDb21taXQgPSAoeWllbGQgc3Bhd24oJ2dpdCBsb2cgLTEgLS1wcmV0dHk9JUInKSlcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoJ3V0ZjgnKVxuICAgICAgICAgICAgICAgIC50cmltKCk7XG4gICAgICAgICAgICBjb25zdCB7IEdJVEhVQl9SRVBPU0lUT1JZIH0gPSBwcm9jZXNzLmVudjtcbiAgICAgICAgICAgIGlmICghR0lUSFVCX1JFUE9TSVRPUlkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBvd25lcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcmVwbzogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcGtnSW5mbzogeyBuYW1lOiBudWxsLCB2ZXJzaW9uOiBudWxsLCB0YWc6IG51bGwgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVidWcoYEdpdGh1YiByZXBvc2l0b3J5OiAke0dJVEhVQl9SRVBPU0lUT1JZfWApO1xuICAgICAgICAgICAgY29uc3QgW293bmVyLCByZXBvXSA9IEdJVEhVQl9SRVBPU0lUT1JZLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICBjb25zdCBvY3Rva2l0ID0gbmV3IE9jdG9raXQoe1xuICAgICAgICAgICAgICAgIGF1dGg6IHByb2Nlc3MuZW52LkdJVEhVQl9UT0tFTixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IHBrZ0luZm87XG4gICAgICAgICAgICBpZiAodGhpcy50YWdTdHlsZSA9PT0gJ2xlcm5hJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhY2thZ2VzVG9QdWJsaXNoID0gaGVhZENvbW1pdFxuICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGxpbmUpID0+IGxpbmUudHJpbSgpKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChsaW5lLCBpbmRleCkgPT4gbGluZS5sZW5ndGggJiYgaW5kZXgpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGxpbmUpID0+IGxpbmUuc3Vic3RyaW5nKDIpKVxuICAgICAgICAgICAgICAgICAgICAubWFwKHRoaXMucGFyc2VUYWcpO1xuICAgICAgICAgICAgICAgIHBrZ0luZm8gPSBwYWNrYWdlc1RvUHVibGlzaC5maW5kKChwa2dJbmZvKSA9PiBwa2dJbmZvLm5hbWUgPT09IHBhY2thZ2VOYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoIXBrZ0luZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gcmVsZWFzZSBjb21taXQgZm91bmQgd2l0aCAke3BhY2thZ2VOYW1lfSwgb3JpZ2luYWwgY29tbWl0IGluZm86ICR7aGVhZENvbW1pdH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwa2dJbmZvID0ge1xuICAgICAgICAgICAgICAgICAgICB0YWc6IGB2JHt2ZXJzaW9ufWAsXG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhY2thZ2VOYW1lLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBvd25lciwgcmVwbywgcGtnSW5mbywgb2N0b2tpdCB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcGFyc2VUYWcodGFnKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRzID0gdGFnLnNwbGl0KCdAJyk7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBzZWdtZW50cy5wb3AoKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHNlZ21lbnRzLmpvaW4oJ0AnKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgICAgdGFnLFxuICAgICAgICB9O1xuICAgIH1cbn1cblByZVB1Ymxpc2hDb21tYW5kLnVzYWdlID0gQ29tbWFuZC5Vc2FnZSh7XG4gICAgZGVzY3JpcHRpb246ICdVcGRhdGUgcGFja2FnZS5qc29uIGFuZCBjb3B5IGFkZG9ucyBpbnRvIHBlciBwbGF0Zm9ybSBwYWNrYWdlcycsXG59KTtcblByZVB1Ymxpc2hDb21tYW5kLnBhdGhzID0gW1sncHJlcHVibGlzaCddXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByZS1wdWJsaXNoLmpzLm1hcCIsImltcG9ydCB7IF9fYXdhaXRlciB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY2xpcGFuaW9uJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NvbG9yZXR0ZSc7XG5pbXBvcnQgaW5xdWlyZXIgZnJvbSAnaW5xdWlyZXInO1xuaW1wb3J0IHsgbG9hZCwgZHVtcCB9IGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IHsgZGVidWdGYWN0b3J5IH0gZnJvbSAnLi9kZWJ1Zyc7XG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJy4vc3Bhd24nO1xuaW1wb3J0IHsgcmVhZEZpbGVBc3luYywgd3JpdGVGaWxlQXN5bmMgfSBmcm9tICcuL3V0aWxzJztcbmNvbnN0IGRlYnVnID0gZGVidWdGYWN0b3J5KCdyZW5hbWUnKTtcbmV4cG9ydCBjbGFzcyBSZW5hbWVDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IE9wdGlvbi5TdHJpbmcoJy1uJywge1xuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgbmV3IG5hbWUgb2YgdGhlIHByb2plY3QnLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYXBpTmFtZSA9IE9wdGlvbi5TdHJpbmcoJy0tbmFwaS1uYW1lJywge1xuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgbmV3IG5hcGkgYWRkb24gbmFtZScsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlcG9zaXRvcnkgPSBPcHRpb24uU3RyaW5nKCctLXJlcG9zaXRvcnknLCB7XG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSByZXBvc2l0b3J5IG9mIHRoZSBwYWNrYWdlJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBPcHRpb24uU3RyaW5nKCctZCwtLWRlc2NyaXB0aW9uJywge1xuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgZGVzY3JpcHRpb24gb2YgdGhlIHBhY2thZ2UnLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jd2QgPSBPcHRpb24uU3RyaW5nKHtcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGV4ZWN1dGUoKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjd2QgPSAoX2EgPSB0aGlzLmN3ZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcHJvY2Vzcy5jd2QoKTtcbiAgICAgICAgICAgIGNvbnN0IHBhY2thZ2VKc29uID0geWllbGQgcmVhZEZpbGVBc3luYyhqb2luKGN3ZCwgJ3BhY2thZ2UuanNvbicpLCAndXRmOCcpO1xuICAgICAgICAgICAgY29uc3QgcGFja2FnZUpzb25EYXRhID0gSlNPTi5wYXJzZShwYWNrYWdlSnNvbik7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gKF9iID0gdGhpcy5uYW1lKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAoeWllbGQgaW5xdWlyZXIucHJvbXB0KHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgICAgICAgICBzdWZmaXg6IGNoYWxrLmRpbSgnIG5hbWUgZmllbGQgaW4gcGFja2FnZS5qc29uJyksXG4gICAgICAgICAgICB9KSkubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IG5hcGlOYW1lID0gKF9jID0gdGhpcy5uYXBpTmFtZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogKHlpZWxkIGlucXVpcmVyLnByb21wdCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ25hcGkgbmFtZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBuYW1lLnNwbGl0KCcvJylbMV0sXG4gICAgICAgICAgICB9KSlbJ25hcGkgbmFtZSddO1xuICAgICAgICAgICAgZGVidWcoJ25hbWU6ICVzLCBuYXBpIG5hbWU6ICVzJywgbmFtZSwgbmFwaU5hbWUpO1xuICAgICAgICAgICAgcGFja2FnZUpzb25EYXRhLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgcGFja2FnZUpzb25EYXRhLm5hcGkubmFtZSA9IG5hcGlOYW1lO1xuICAgICAgICAgICAgY29uc3QgcmVwb3NpdG9yeSA9IChfZCA9IHRoaXMucmVwb3NpdG9yeSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogKHlpZWxkIGlucXVpcmVyLnByb21wdCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3JlcG9zaXRvcnknLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgICAgICAgICAgc3VmZml4OiBjaGFsay5kaW0oJyBMZWF2ZSBlbXB0eSB0byBza2lwJyksXG4gICAgICAgICAgICB9KSkucmVwb3NpdG9yeTtcbiAgICAgICAgICAgIGlmIChyZXBvc2l0b3J5KSB7XG4gICAgICAgICAgICAgICAgcGFja2FnZUpzb25EYXRhLnJlcG9zaXRvcnkgPSByZXBvc2l0b3J5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSAoX2UgPSB0aGlzLmRlc2NyaXB0aW9uKSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiAoeWllbGQgaW5xdWlyZXIucHJvbXB0KHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgICAgICAgICAgc3VmZml4OiBjaGFsay5kaW0oJyBMZWF2ZSBlbXB0eSB0byBza2lwJyksXG4gICAgICAgICAgICB9KSkuZGVzY3JpcHRpb247XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICBwYWNrYWdlSnNvbkRhdGEuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHlpZWxkIHdyaXRlRmlsZUFzeW5jKGpvaW4oY3dkLCAncGFja2FnZS5qc29uJyksIEpTT04uc3RyaW5naWZ5KHBhY2thZ2VKc29uRGF0YSwgbnVsbCwgMikpO1xuICAgICAgICAgICAgY29uc3QgQ0kgPSB5aWVsZCByZWFkRmlsZUFzeW5jKGpvaW4oY3dkLCAnLmdpdGh1YicsICd3b3JrZmxvd3MnLCAnQ0kueW1sJyksICd1dGY4Jyk7XG4gICAgICAgICAgICBjb25zdCBDSU9iamVjdCA9IGxvYWQoQ0kpO1xuICAgICAgICAgICAgQ0lPYmplY3QuZW52LkFQUF9OQU1FID0gbmFwaU5hbWU7XG4gICAgICAgICAgICB5aWVsZCB3cml0ZUZpbGVBc3luYyhqb2luKGN3ZCwgJy5naXRodWInLCAnd29ya2Zsb3dzJywgJ0NJLnltbCcpLCBkdW1wKENJT2JqZWN0LCB7XG4gICAgICAgICAgICAgICAgbGluZVdpZHRoOiAxMDAwLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgbGV0IHRvbWxDb250ZW50ID0geWllbGQgcmVhZEZpbGVBc3luYyhqb2luKGN3ZCwgJ0NhcmdvLnRvbWwnKSwgJ3V0ZjgnKTtcbiAgICAgICAgICAgIHRvbWxDb250ZW50ID0gdG9tbENvbnRlbnQucmVwbGFjZSgnbmFtZSA9IFwibmFwaS1wYWNrYWdlLXRlbXBsYXRlXCInLCBgbmFtZSA9IFwiJHtuYXBpTmFtZX1cImApO1xuICAgICAgICAgICAgeWllbGQgd3JpdGVGaWxlQXN5bmMoam9pbihjd2QsICdDYXJnby50b21sJyksIHRvbWxDb250ZW50KTtcbiAgICAgICAgICAgIHlpZWxkIHNwYXduKCduYXBpIGNyZWF0ZS1ucG0tZGlyIC10IC4nKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuUmVuYW1lQ29tbWFuZC5wYXRocyA9IFtbJ3JlbmFtZSddXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlbmFtZS5qcy5tYXAiLCJpbXBvcnQgeyBfX2F3YWl0ZXIgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHNwYXduU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY2xpcGFuaW9uJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NvbG9yZXR0ZSc7XG5pbXBvcnQgeyBnZXROYXBpQ29uZmlnIH0gZnJvbSAnLi9jb25zdHMnO1xuaW1wb3J0IHsgZGVidWdGYWN0b3J5IH0gZnJvbSAnLi9kZWJ1Zyc7XG5pbXBvcnQgeyBVbmlBcmNoc0J5UGxhdGZvcm0gfSBmcm9tICcuL3BhcnNlLXRyaXBsZSc7XG5pbXBvcnQgeyBmaWxlRXhpc3RzIH0gZnJvbSAnLi91dGlscyc7XG5jb25zdCBkZWJ1ZyA9IGRlYnVnRmFjdG9yeSgndW5pdmVyc2FsJyk7XG5leHBvcnQgY2xhc3MgVW5pdmVyc2FsQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnNvdXJjZURpciA9IE9wdGlvbi5TdHJpbmcoJy1kLC0tZGlyJywgJ2FydGlmYWN0cycpO1xuICAgICAgICB0aGlzLmRpc3REaXIgPSBPcHRpb24uU3RyaW5nKCctLWRpc3QnLCAnLicpO1xuICAgICAgICB0aGlzLmNvbmZpZ0ZpbGVOYW1lID0gT3B0aW9uLlN0cmluZygnLWMsLS1jb25maWcnKTtcbiAgICAgICAgdGhpcy5idWlsZFVuaXZlcnNhbCA9IHtcbiAgICAgICAgICAgIGRhcndpbjogKGJpbk5hbWUsIHNyY0ZpbGVzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0UGF0aCA9IGpvaW4odGhpcy5kaXN0RGlyLCBgJHtiaW5OYW1lfS4ke3Byb2Nlc3MucGxhdGZvcm19LXVuaXZlcnNhbC5ub2RlYCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3JjUGF0aHMgPSBzcmNGaWxlcy5tYXAoKGYpID0+IGpvaW4odGhpcy5zb3VyY2VEaXIsIGYpKTtcbiAgICAgICAgICAgICAgICBzcGF3blN5bmMoJ2xpcG8nLCBbJy1jcmVhdGUnLCAnLW91dHB1dCcsIG91dFBhdGgsIC4uLnNyY1BhdGhzXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dFBhdGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBleGVjdXRlKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCB7IHBsYXRmb3JtcywgYmluYXJ5TmFtZSB9ID0gZ2V0TmFwaUNvbmZpZyh0aGlzLmNvbmZpZ0ZpbGVOYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldFBsYXRmb3JtID0gcGxhdGZvcm1zLmZpbmQoKHApID0+IHAucGxhdGZvcm0gPT09IHByb2Nlc3MucGxhdGZvcm0gJiYgcC5hcmNoID09PSAndW5pdmVyc2FsJyk7XG4gICAgICAgICAgICBpZiAoIXRhcmdldFBsYXRmb3JtKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJ3VuaXZlcnNhbCcgYXJjaCBmb3IgcGxhdGZvcm0gJyR7cHJvY2Vzcy5wbGF0Zm9ybX0nIG5vdCBmb3VuZCBpbiBjb25maWchYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzcmNGaWxlcyA9IChfYSA9IFVuaUFyY2hzQnlQbGF0Zm9ybVtwcm9jZXNzLnBsYXRmb3JtXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1hcCgoYSkgPT4gYCR7YmluYXJ5TmFtZX0uJHtwcm9jZXNzLnBsYXRmb3JtfS0ke2F9Lm5vZGVgKTtcbiAgICAgICAgICAgIGlmICghc3JjRmlsZXMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAndW5pdmVyc2FsJyBhcmNoIGZvciBwbGF0Zm9ybSAnJHtwcm9jZXNzLnBsYXRmb3JtfScgbm90IHN1cHBvcnRlZC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlYnVnKGBMb29raW5nIHVwIHNvdXJjZSBiaW5hcmllcyB0byBjb21iaW5lOiAke2NoYWxrLnllbGxvd0JyaWdodChzcmNGaWxlcy5qb2luKCcsICcpKX1gKTtcbiAgICAgICAgICAgIGNvbnN0IHNyY0ZpbGVMb29rdXAgPSB5aWVsZCBQcm9taXNlLmFsbChzcmNGaWxlcy5tYXAoKGYpID0+IGZpbGVFeGlzdHMoam9pbih0aGlzLnNvdXJjZURpciwgZikpKSk7XG4gICAgICAgICAgICBjb25zdCBub3RGb3VuZEZpbGVzID0gc3JjRmlsZXMuZmlsdGVyKChfZiwgaSkgPT4gIXNyY0ZpbGVMb29rdXBbaV0pO1xuICAgICAgICAgICAgaWYgKG5vdEZvdW5kRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFNvbWUgYmluYXJ5IGZpbGVzIHdlcmUgbm90IGZvdW5kOiAke0pTT04uc3RyaW5naWZ5KG5vdEZvdW5kRmlsZXMpfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb3V0UGF0aCA9IHRoaXMuYnVpbGRVbml2ZXJzYWxbcHJvY2Vzcy5wbGF0Zm9ybV0oYmluYXJ5TmFtZSwgc3JjRmlsZXMpO1xuICAgICAgICAgICAgZGVidWcoYFByb2R1Y2VkIHVuaXZlcnNhbCBiaW5hcnk6ICR7b3V0UGF0aH1gKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuVW5pdmVyc2FsQ29tbWFuZC51c2FnZSA9IENvbW1hbmQuVXNhZ2Uoe1xuICAgIGRlc2NyaXB0aW9uOiAnQ29tYmluZSBidWlsdCBiaW5hcmllcyB0byB1bml2ZXJzYWwgYmluYXJpZXMnLFxufSk7XG5Vbml2ZXJzYWxDb21tYW5kLnBhdGhzID0gW1sndW5pdmVyc2FsJ11dO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dW5pdmVyc2FsLmpzLm1hcCIsImltcG9ydCAnY29yZS1qcy9lcy9zdHJpbmcvcmVwbGFjZS1hbGwnO1xuaW1wb3J0IHsgQ2xpIH0gZnJvbSAnY2xpcGFuaW9uJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi9wYWNrYWdlLmpzb24nO1xuaW1wb3J0IHsgQXJ0aWZhY3RzQ29tbWFuZCB9IGZyb20gJy4vYXJ0aWZhY3RzJztcbmltcG9ydCB7IEJ1aWxkQ29tbWFuZCB9IGZyb20gJy4vYnVpbGQnO1xuaW1wb3J0IHsgQ3JlYXRlTnBtRGlyQ29tbWFuZCB9IGZyb20gJy4vY3JlYXRlLW5wbS1kaXInO1xuaW1wb3J0IHsgSGVscENvbW1hbmQgfSBmcm9tICcuL2hlbHAnO1xuaW1wb3J0IHsgTmV3UHJvamVjdENvbW1hbmQgfSBmcm9tICcuL25ldyc7XG5pbXBvcnQgeyBQcmVQdWJsaXNoQ29tbWFuZCB9IGZyb20gJy4vcHJlLXB1Ymxpc2gnO1xuaW1wb3J0IHsgUmVuYW1lQ29tbWFuZCB9IGZyb20gJy4vcmVuYW1lJztcbmltcG9ydCB7IFVuaXZlcnNhbENvbW1hbmQgfSBmcm9tICcuL3VuaXZlcnNhbCc7XG5pbXBvcnQgeyBWZXJzaW9uQ29tbWFuZCB9IGZyb20gJy4vdmVyc2lvbic7XG5jb25zdCBjbGkgPSBuZXcgQ2xpKHtcbiAgICBiaW5hcnlOYW1lOiAnbmFwaScsXG4gICAgYmluYXJ5VmVyc2lvbjogdmVyc2lvbixcbn0pO1xuY2xpLnJlZ2lzdGVyKEFydGlmYWN0c0NvbW1hbmQpO1xuY2xpLnJlZ2lzdGVyKEJ1aWxkQ29tbWFuZCk7XG5jbGkucmVnaXN0ZXIoQ3JlYXRlTnBtRGlyQ29tbWFuZCk7XG5jbGkucmVnaXN0ZXIoUHJlUHVibGlzaENvbW1hbmQpO1xuY2xpLnJlZ2lzdGVyKFZlcnNpb25Db21tYW5kKTtcbmNsaS5yZWdpc3RlcihVbml2ZXJzYWxDb21tYW5kKTtcbmNsaS5yZWdpc3RlcihOZXdQcm9qZWN0Q29tbWFuZCk7XG5jbGkucmVnaXN0ZXIoUmVuYW1lQ29tbWFuZCk7XG5jbGkucmVnaXN0ZXIoSGVscENvbW1hbmQpO1xuY2xpXG4gICAgLnJ1bihwcm9jZXNzLmFyZ3Yuc2xpY2UoMiksIE9iamVjdC5hc3NpZ24oe30sIENsaS5kZWZhdWx0Q29udGV4dCkpXG4gICAgLnRoZW4oKHN0YXR1cykgPT4ge1xuICAgIHByb2Nlc3MuZXhpdChzdGF0dXMpO1xufSlcbiAgICAuY2F0Y2goKGUpID0+IHtcbiAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiY29uc3Qgc2ltcGxlS2V5UmVnRXhwID0gL15bYS16QS1aX11bYS16QS1aMC05X10qJC87XG5mdW5jdGlvbiBnZXRQcmludGFibGUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpXG4gICAgICAgIHJldHVybiBgbnVsbGA7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBgdW5kZWZpbmVkYDtcbiAgICBpZiAodmFsdWUgPT09IGBgKVxuICAgICAgICByZXR1cm4gYGFuIGVtcHR5IHN0cmluZ2A7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcpXG4gICAgICAgIHJldHVybiBgPCR7dmFsdWUudG9TdHJpbmcoKX0+YDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICAgIHJldHVybiBgYW4gYXJyYXlgO1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG59XG5mdW5jdGlvbiBnZXRQcmludGFibGVBcnJheSh2YWx1ZSwgY29uanVuY3Rpb24pIHtcbiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gYG5vdGhpbmdgO1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpXG4gICAgICAgIHJldHVybiBnZXRQcmludGFibGUodmFsdWVbMF0pO1xuICAgIGNvbnN0IHJlc3QgPSB2YWx1ZS5zbGljZSgwLCAtMSk7XG4gICAgY29uc3QgdHJhaWxpbmcgPSB2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBzZXBhcmF0b3IgPSB2YWx1ZS5sZW5ndGggPiAyXG4gICAgICAgID8gYCwgJHtjb25qdW5jdGlvbn0gYFxuICAgICAgICA6IGAgJHtjb25qdW5jdGlvbn0gYDtcbiAgICByZXR1cm4gYCR7cmVzdC5tYXAodmFsdWUgPT4gZ2V0UHJpbnRhYmxlKHZhbHVlKSkuam9pbihgLCBgKX0ke3NlcGFyYXRvcn0ke2dldFByaW50YWJsZSh0cmFpbGluZyl9YDtcbn1cbmZ1bmN0aW9uIGNvbXB1dGVLZXkoc3RhdGUsIGtleSkge1xuICAgIHZhciBfYSwgX2IsIF9jO1xuICAgIGlmICh0eXBlb2Yga2V5ID09PSBgbnVtYmVyYCkge1xuICAgICAgICByZXR1cm4gYCR7KF9hID0gc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLnApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGAuYH1bJHtrZXl9XWA7XG4gICAgfVxuICAgIGVsc2UgaWYgKHNpbXBsZUtleVJlZ0V4cC50ZXN0KGtleSkpIHtcbiAgICAgICAgcmV0dXJuIGAkeyhfYiA9IHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5wKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBgYH0uJHtrZXl9YDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBgJHsoX2MgPSBzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUucCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogYC5gfVske0pTT04uc3RyaW5naWZ5KGtleSl9XWA7XG4gICAgfVxufVxuZnVuY3Rpb24gcGx1cmFsKG4sIHNpbmd1bGFyLCBwbHVyYWwpIHtcbiAgICByZXR1cm4gbiA9PT0gMSA/IHNpbmd1bGFyIDogcGx1cmFsO1xufVxuXG5jb25zdCBjb2xvclN0cmluZ1JlZ0V4cCA9IC9eI1swLTlhLWZdezZ9JC9pO1xuY29uc3QgY29sb3JTdHJpbmdBbHBoYVJlZ0V4cCA9IC9eI1swLTlhLWZdezZ9KFswLTlhLWZdezJ9KT8kL2k7XG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDc1MjE3Lzg4MDcwM1xuY29uc3QgYmFzZTY0UmVnRXhwID0gL14oPzpbQS1aYS16MC05Ky9dezR9KSooPzpbQS1aYS16MC05Ky9dezJ9PT18W0EtWmEtejAtOSsvXXszfT0pPyQvO1xuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE0MTY2MTk0Lzg4MDcwM1xuY29uc3QgdXVpZDRSZWdFeHAgPSAvXlthLWYwLTldezh9LVthLWYwLTldezR9LTRbYS1mMC05XXszfS1bODlhQWJCXVthLWYwLTldezN9LVthLWYwLTldezEyfSQvaTtcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yODAyMjkwMS84ODA3MDMgKyBodHRwczovL3d3dy5kZWJ1Z2dleC5jb20vci9ibDhKMzV3TUtrNDhhN3VfXG5jb25zdCBpc284NjAxUmVnRXhwID0gL14oPzpbMS05XVxcZHszfSgtPykoPzooPzowWzEtOV18MVswLTJdKVxcMSg/OjBbMS05XXwxXFxkfDJbMC04XSl8KD86MFsxMy05XXwxWzAtMl0pXFwxKD86Mjl8MzApfCg/OjBbMTM1NzhdfDFbMDJdKSg/OlxcMSkzMXwwMFsxLTldfDBbMS05XVxcZHxbMTJdXFxkezJ9fDMoPzpbMC01XVxcZHw2WzAtNV0pKXwoPzpbMS05XVxcZCg/OjBbNDhdfFsyNDY4XVswNDhdfFsxMzU3OV1bMjZdKXwoPzpbMjQ2OF1bMDQ4XXxbMTM1NzldWzI2XSkwMCkoPzooLT8pMDIoPzpcXDIpMjl8LT8zNjYpKVQoPzpbMDFdXFxkfDJbMC0zXSkoOj8pWzAtNV1cXGQoPzpcXDNbMC01XVxcZCk/KD86WnxbKy1dWzAxXVxcZCg/OlxcM1swLTVdXFxkKT8pJC87XG5cbmZ1bmN0aW9uIHB1c2hFcnJvcih7IGVycm9ycywgcCB9ID0ge30sIG1lc3NhZ2UpIHtcbiAgICBlcnJvcnMgPT09IG51bGwgfHwgZXJyb3JzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvcnMucHVzaChgJHtwICE9PSBudWxsICYmIHAgIT09IHZvaWQgMCA/IHAgOiBgLmB9OiAke21lc3NhZ2V9YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gbWFrZVNldHRlcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiAodikgPT4ge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHY7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIG1ha2VDb2VyY2lvbkZuKHRhcmdldCwga2V5KSB7XG4gICAgcmV0dXJuICh2KSA9PiB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gdGFyZ2V0W2tleV07XG4gICAgICAgIHRhcmdldFtrZXldID0gdjtcbiAgICAgICAgcmV0dXJuIG1ha2VDb2VyY2lvbkZuKHRhcmdldCwga2V5KS5iaW5kKG51bGwsIHByZXZpb3VzKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gbWFrZUxhenlDb2VyY2lvbkZuKGZuLCBvcmlnLCBnZW5lcmF0b3IpIHtcbiAgICBjb25zdCBjb21taXQgPSAoKSA9PiB7XG4gICAgICAgIGZuKGdlbmVyYXRvcigpKTtcbiAgICAgICAgcmV0dXJuIHJldmVydDtcbiAgICB9O1xuICAgIGNvbnN0IHJldmVydCA9ICgpID0+IHtcbiAgICAgICAgZm4ob3JpZyk7XG4gICAgICAgIHJldHVybiBjb21taXQ7XG4gICAgfTtcbiAgICByZXR1cm4gY29tbWl0O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHZhbGlkYXRvciB0aGF0IGFsd2F5cyByZXR1cm5zIHRydWUgYW5kIG5ldmVyIHJlZmluZXMgdGhlIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGlzVW5rbm93bigpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNMaXRlcmFsKGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IGV4cGVjdGVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBFeHBlY3RlZCAke2dldFByaW50YWJsZShleHBlY3RlZCl9IChnb3QgJHtnZXRQcmludGFibGUodmFsdWUpfSlgKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBvbmx5IHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB0ZXN0ZWQgdmFsdWUgaXMgYSBzdHJpbmcuXG4gKiBSZWZpbmVzIHRoZSB0eXBlIHRvIGBzdHJpbmdgLlxuICovXG5mdW5jdGlvbiBpc1N0cmluZygpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IGBzdHJpbmdgKVxuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBFeHBlY3RlZCBhIHN0cmluZyAoZ290ICR7Z2V0UHJpbnRhYmxlKHZhbHVlKX0pYCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGlzRW51bShlbnVtU3BlYykge1xuICAgIGNvbnN0IHZhbHVlc0FycmF5ID0gQXJyYXkuaXNBcnJheShlbnVtU3BlYykgPyBlbnVtU3BlYyA6IE9iamVjdC52YWx1ZXMoZW51bVNwZWMpO1xuICAgIGNvbnN0IGlzQWxwaGFOdW0gPSB2YWx1ZXNBcnJheS5ldmVyeShpdGVtID0+IHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicpO1xuICAgIGNvbnN0IHZhbHVlcyA9IG5ldyBTZXQodmFsdWVzQXJyYXkpO1xuICAgIGlmICh2YWx1ZXMuc2l6ZSA9PT0gMSlcbiAgICAgICAgcmV0dXJuIGlzTGl0ZXJhbChbLi4udmFsdWVzXVswXSk7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlcy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQWxwaGFOdW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYEV4cGVjdGVkIG9uZSBvZiAke2dldFByaW50YWJsZUFycmF5KHZhbHVlc0FycmF5LCBgb3JgKX0gKGdvdCAke2dldFByaW50YWJsZSh2YWx1ZSl9KWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYEV4cGVjdGVkIGEgdmFsaWQgZW51bWVyYXRpb24gdmFsdWUgKGdvdCAke2dldFByaW50YWJsZSh2YWx1ZSl9KWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuY29uc3QgQk9PTEVBTl9DT0VSQ0lPTlMgPSBuZXcgTWFwKFtcbiAgICBbYHRydWVgLCB0cnVlXSxcbiAgICBbYFRydWVgLCB0cnVlXSxcbiAgICBbYDFgLCB0cnVlXSxcbiAgICBbMSwgdHJ1ZV0sXG4gICAgW2BmYWxzZWAsIGZhbHNlXSxcbiAgICBbYEZhbHNlYCwgZmFsc2VdLFxuICAgIFtgMGAsIGZhbHNlXSxcbiAgICBbMCwgZmFsc2VdLFxuXSk7XG4vKipcbiAqIENyZWF0ZSBhIHZhbGlkYXRvciB0aGF0IG9ubHkgcmV0dXJucyB0cnVlIHdoZW4gdGhlIHRlc3RlZCB2YWx1ZSBpcyBhXG4gKiBib29sZWFuLiBSZWZpbmVzIHRoZSB0eXBlIHRvIGBib29sZWFuYC5cbiAqXG4gKiBTdXBwb3J0cyBjb2VyY2lvbjpcbiAqIC0gJ3RydWUnIC8gJ1RydWUnIC8gJzEnIC8gMSB3aWxsIHR1cm4gdG8gYHRydWVgXG4gKiAtICdmYWxzZScgLyAnRmFsc2UnIC8gJzAnIC8gMCB3aWxsIHR1cm4gdG8gYGZhbHNlYFxuICovXG5mdW5jdGlvbiBpc0Jvb2xlYW4oKSB7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBgYm9vbGVhbmApIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuY29lcmNpb25zKSAhPT0gYHVuZGVmaW5lZGApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmNvZXJjaW9uKSA9PT0gYHVuZGVmaW5lZGApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgVW5ib3VuZCBjb2VyY2lvbiByZXN1bHRgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29lcmNpb24gPSBCT09MRUFOX0NPRVJDSU9OUy5nZXQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvZXJjaW9uICE9PSBgdW5kZWZpbmVkYCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuY29lcmNpb25zLnB1c2goWyhfYSA9IHN0YXRlLnApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGAuYCwgc3RhdGUuY29lcmNpb24uYmluZChudWxsLCBjb2VyY2lvbildKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBFeHBlY3RlZCBhIGJvb2xlYW4gKGdvdCAke2dldFByaW50YWJsZSh2YWx1ZSl9KWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4vKipcbiAqIENyZWF0ZSBhIHZhbGlkYXRvciB0aGF0IG9ubHkgcmV0dXJucyB0cnVlIHdoZW4gdGhlIHRlc3RlZCB2YWx1ZSBpcyBhXG4gKiBudW1iZXIgKGluY2x1ZGluZyBmbG9hdGluZyBudW1iZXJzOyB1c2UgYGNhc2NhZGVgIGFuZCBgaXNJbnRlZ2VyYCB0b1xuICogcmVzdHJpY3QgdGhlIHJhbmdlIGZ1cnRoZXIpLiBSZWZpbmVzIHRoZSB0eXBlIHRvIGBudW1iZXJgLlxuICpcbiAqIFN1cHBvcnRzIGNvZXJjaW9uLlxuICovXG5mdW5jdGlvbiBpc051bWJlcigpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IGBudW1iZXJgKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmNvZXJjaW9ucykgIT09IGB1bmRlZmluZWRgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5jb2VyY2lvbikgPT09IGB1bmRlZmluZWRgKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYFVuYm91bmQgY29lcmNpb24gcmVzdWx0YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb2VyY2lvbjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gYHN0cmluZ2ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKF9iKSB7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNoZWNrIGFnYWluc3QgSlNPTi5zdHJpbmdpZnkgdGhhdCB0aGUgb3V0cHV0IGlzIHRoZSBzYW1lIHRvIGVuc3VyZSB0aGF0IHRoZSBudW1iZXIgY2FuIGJlIHNhZmVseSByZXByZXNlbnRlZCBpbiBKU1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09IGBudW1iZXJgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHZhbCkgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZXJjaW9uID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYFJlY2VpdmVkIGEgbnVtYmVyIHRoYXQgY2FuJ3QgYmUgc2FmZWx5IHJlcHJlc2VudGVkIGJ5IHRoZSBydW50aW1lICgke3ZhbHVlfSlgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2VyY2lvbiAhPT0gYHVuZGVmaW5lZGApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNvZXJjaW9ucy5wdXNoKFsoX2EgPSBzdGF0ZS5wKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBgLmAsIHN0YXRlLmNvZXJjaW9uLmJpbmQobnVsbCwgY29lcmNpb24pXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgYSBudW1iZXIgKGdvdCAke2dldFByaW50YWJsZSh2YWx1ZSl9KWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4vKipcbiAqIEltcG9ydGFudDogVGhpcyB2YWxpZGF0b3Igb25seSBtYWtlcyBzZW5zZSB3aGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aFxuICogY29lcmNpb24hIEl0IHdpbGwgYWx3YXlzIGVycm9yIHdoZW4gdXNlZCB3aXRob3V0LlxuICpcbiAqIENyZWF0ZSBhIHZhbGlkYXRvciB0aGF0IG9ubHkgcmV0dXJucyB0cnVlIHdoZW4gdGhlIHRlc3RlZCB2YWx1ZSBpcyBhXG4gKiBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBleHBlY3RlZCB0eXBlLiBSZWZpbmVzIHRoZSB0eXBlIHRvIHRoZVxuICogZXhwZWN0ZWQgdHlwZSwgYW5kIGNhc3RzIHRoZSB2YWx1ZSBpbnRvIGl0cyBpbm5lciB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaXNQYXlsb2FkKHNwZWMpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgKHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5jb2VyY2lvbnMpID09PSBgdW5kZWZpbmVkYClcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgVGhlIGlzUGF5bG9hZCBwcmVkaWNhdGUgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGNvZXJjaW9uIGVuYWJsZWRgKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RhdGUuY29lcmNpb24gPT09IGB1bmRlZmluZWRgKVxuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBVbmJvdW5kIGNvZXJjaW9uIHJlc3VsdGApO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gYHN0cmluZ2ApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYEV4cGVjdGVkIGEgc3RyaW5nIChnb3QgJHtnZXRQcmludGFibGUodmFsdWUpfSlgKTtcbiAgICAgICAgICAgIGxldCBpbm5lcjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaW5uZXIgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBFeHBlY3RlZCBhIEpTT04gc3RyaW5nIChnb3QgJHtnZXRQcmludGFibGUodmFsdWUpfSlgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZXIgPSB7IHZhbHVlOiBpbm5lciB9O1xuICAgICAgICAgICAgaWYgKCFzcGVjKGlubmVyLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKSwgeyBjb2VyY2lvbjogbWFrZUNvZXJjaW9uRm4od3JhcHBlciwgYHZhbHVlYCkgfSkpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHN0YXRlLmNvZXJjaW9ucy5wdXNoKFsoX2EgPSBzdGF0ZS5wKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBgLmAsIHN0YXRlLmNvZXJjaW9uLmJpbmQobnVsbCwgd3JhcHBlci52YWx1ZSldKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBvbmx5IHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB0ZXN0ZWQgdmFsdWUgaXMgYVxuICogdmFsaWQgZGF0ZS4gUmVmaW5lcyB0aGUgdHlwZSB0byBgRGF0ZWAuXG4gKlxuICogU3VwcG9ydHMgY29lcmNpb24gdmlhIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdHM6XG4gKiAtIElTTzg2MDAxIHN0cmluZ3NcbiAqIC0gVW5peCB0aW1lc3RhbXBzXG4gKi9cbmZ1bmN0aW9uIGlzRGF0ZSgpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuY29lcmNpb25zKSAhPT0gYHVuZGVmaW5lZGApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmNvZXJjaW9uKSA9PT0gYHVuZGVmaW5lZGApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgVW5ib3VuZCBjb2VyY2lvbiByZXN1bHRgKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvZXJjaW9uO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBgc3RyaW5nYCAmJiBpc284NjAxUmVnRXhwLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2VyY2lvbiA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBgc3RyaW5nYCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYikgeyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09IGBudW1iZXJgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcCA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IGBudW1iZXJgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRpbWVzdGFtcCAhPT0gYHVuZGVmaW5lZGApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzU2FmZUludGVnZXIodGltZXN0YW1wKSB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIodGltZXN0YW1wICogMTAwMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lcmNpb24gPSBuZXcgRGF0ZSh0aW1lc3RhbXAgKiAxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBSZWNlaXZlZCBhIHRpbWVzdGFtcCB0aGF0IGNhbid0IGJlIHNhZmVseSByZXByZXNlbnRlZCBieSB0aGUgcnVudGltZSAoJHt2YWx1ZX0pYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29lcmNpb24gIT09IGB1bmRlZmluZWRgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jb2VyY2lvbnMucHVzaChbKF9hID0gc3RhdGUucCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogYC5gLCBzdGF0ZS5jb2VyY2lvbi5iaW5kKG51bGwsIGNvZXJjaW9uKV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYEV4cGVjdGVkIGEgZGF0ZSAoZ290ICR7Z2V0UHJpbnRhYmxlKHZhbHVlKX0pYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgb25seSByZXR1cm5zIHRydWUgd2hlbiB0aGUgdGVzdGVkIHZhbHVlIGlzIGFuXG4gKiBhcnJheSB3aG9zZSBhbGwgdmFsdWVzIG1hdGNoIHRoZSBwcm92aWRlZCBzdWJzcGVjLiBSZWZpbmVzIHRoZSB0eXBlIHRvXG4gKiBgQXJyYXk8VD5gLCB3aXRoIGBUYCBiZWluZyB0aGUgc3Vic3BlYyBpbmZlcnJlZCB0eXBlLlxuICpcbiAqIFN1cHBvcnRzIGNvZXJjaW9uIGlmIHRoZSBgZGVsaW1pdGVyYCBvcHRpb24gaXMgc2V0LCBpbiB3aGljaCBjYXNlIHN0cmluZ3NcbiAqIHdpbGwgYmUgc3BsaXQgYWNjb3JkaW5nbHkuXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkoc3BlYywgeyBkZWxpbWl0ZXIgfSA9IHt9KSB7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBgc3RyaW5nYCAmJiB0eXBlb2YgZGVsaW1pdGVyICE9PSBgdW5kZWZpbmVkYCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5jb2VyY2lvbnMpICE9PSBgdW5kZWZpbmVkYCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuY29lcmNpb24pID09PSBgdW5kZWZpbmVkYClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBVbmJvdW5kIGNvZXJjaW9uIHJlc3VsdGApO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KGRlbGltaXRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgYW4gYXJyYXkgKGdvdCAke2dldFByaW50YWJsZSh2YWx1ZSl9KWApO1xuICAgICAgICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSAwLCBUID0gdmFsdWUubGVuZ3RoOyB0IDwgVDsgKyt0KSB7XG4gICAgICAgICAgICAgICAgdmFsaWQgPSBzcGVjKHZhbHVlW3RdLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKSwgeyBwOiBjb21wdXRlS2V5KHN0YXRlLCB0KSwgY29lcmNpb246IG1ha2VDb2VyY2lvbkZuKHZhbHVlLCB0KSB9KSkgJiYgdmFsaWQ7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWxpZCAmJiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmVycm9ycykgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IG9yaWdpbmFsVmFsdWUpXG4gICAgICAgICAgICAgICAgc3RhdGUuY29lcmNpb25zLnB1c2goWyhfYSA9IHN0YXRlLnApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGAuYCwgc3RhdGUuY29lcmNpb24uYmluZChudWxsLCB2YWx1ZSldKTtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZDtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgb25seSByZXR1cm5zIHRydWUgd2hlbiB0aGUgdGVzdGVkIHZhbHVlIGlzIGFuXG4gKiBzZXQgd2hvc2UgYWxsIHZhbHVlcyBtYXRjaCB0aGUgcHJvdmlkZWQgc3Vic3BlYy4gUmVmaW5lcyB0aGUgdHlwZSB0b1xuICogYFNldDxUPmAsIHdpdGggYFRgIGJlaW5nIHRoZSBzdWJzcGVjIGluZmVycmVkIHR5cGUuXG4gKlxuICogU3VwcG9ydHMgY29lcmNpb24gZnJvbSBhcnJheXMgKG9yIGFueXRoaW5nIHRoYXQgY2FuIGJlIGNvZXJjZWQgaW50byBhblxuICogYXJyYXkpLlxuICovXG5mdW5jdGlvbiBpc1NldChzcGVjLCB7IGRlbGltaXRlciB9ID0ge30pIHtcbiAgICBjb25zdCBpc0FycmF5VmFsaWRhdG9yID0gaXNBcnJheShzcGVjLCB7IGRlbGltaXRlciB9KTtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKS50b1N0cmluZygpID09PSBgW29iamVjdCBTZXRdYCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5jb2VyY2lvbnMpICE9PSBgdW5kZWZpbmVkYCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuY29lcmNpb24pID09PSBgdW5kZWZpbmVkYClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBVbmJvdW5kIGNvZXJjaW9uIHJlc3VsdGApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbFZhbHVlcyA9IFsuLi52YWx1ZV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvZXJjZWRWYWx1ZXMgPSBbLi4udmFsdWVdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQXJyYXlWYWxpZGF0b3IoY29lcmNlZFZhbHVlcywgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSksIHsgY29lcmNpb246IHVuZGVmaW5lZCB9KSkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZVZhbHVlID0gKCkgPT4gY29lcmNlZFZhbHVlcy5zb21lKCh2YWwsIHQpID0+IHZhbCAhPT0gb3JpZ2luYWxWYWx1ZXNbdF0pXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBTZXQoY29lcmNlZFZhbHVlcylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmNvZXJjaW9ucy5wdXNoKFsoX2EgPSBzdGF0ZS5wKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBgLmAsIG1ha2VMYXp5Q29lcmNpb25GbihzdGF0ZS5jb2VyY2lvbiwgdmFsdWUsIHVwZGF0ZVZhbHVlKV0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViVmFsdWUgb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkID0gc3BlYyhzdWJWYWx1ZSwgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUpKSAmJiB2YWxpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsaWQgJiYgKHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5lcnJvcnMpID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmNvZXJjaW9ucykgIT09IGB1bmRlZmluZWRgKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmNvZXJjaW9uKSA9PT0gYHVuZGVmaW5lZGApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBVbmJvdW5kIGNvZXJjaW9uIHJlc3VsdGApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JlID0geyB2YWx1ZSB9O1xuICAgICAgICAgICAgICAgIGlmICghaXNBcnJheVZhbGlkYXRvcih2YWx1ZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSksIHsgY29lcmNpb246IG1ha2VDb2VyY2lvbkZuKHN0b3JlLCBgdmFsdWVgKSB9KSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5jb2VyY2lvbnMucHVzaChbKF9iID0gc3RhdGUucCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogYC5gLCBtYWtlTGF6eUNvZXJjaW9uRm4oc3RhdGUuY29lcmNpb24sIHZhbHVlLCAoKSA9PiBuZXcgU2V0KHN0b3JlLnZhbHVlKSldKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBFeHBlY3RlZCBhIHNldCAoZ290ICR7Z2V0UHJpbnRhYmxlKHZhbHVlKX0pYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgb25seSByZXR1cm5zIHRydWUgd2hlbiB0aGUgdGVzdGVkIHZhbHVlIGlzIGFuXG4gKiBtYXAgd2hvc2UgYWxsIHZhbHVlcyBtYXRjaCB0aGUgcHJvdmlkZWQgc3Vic3BlY3MuIFJlZmluZXMgdGhlIHR5cGUgdG9cbiAqIGBNYXA8VSwgVj5gLCB3aXRoIGBVYCBiZWluZyB0aGUga2V5IHN1YnNwZWMgaW5mZXJyZWQgdHlwZSBhbmQgYFZgIGJlaW5nXG4gKiB0aGUgdmFsdWUgc3Vic3BlYyBpbmZlcnJlZCB0eXBlLlxuICpcbiAqIFN1cHBvcnRzIGNvZXJjaW9uIGZyb20gYXJyYXkgb2YgdHVwbGVzIChvciBhbnl0aGluZyB0aGF0IGNhbiBiZSBjb2VyY2VkIGludG9cbiAqIGFuIGFycmF5IG9mIHR1cGxlcykuXG4gKi9cbmZ1bmN0aW9uIGlzTWFwKGtleVNwZWMsIHZhbHVlU3BlYykge1xuICAgIGNvbnN0IGlzQXJyYXlWYWxpZGF0b3IgPSBpc0FycmF5KGlzVHVwbGUoW2tleVNwZWMsIHZhbHVlU3BlY10pKTtcbiAgICBjb25zdCBpc1JlY29yZFZhbGlkYXRvciA9IGlzUmVjb3JkKHZhbHVlU3BlYywgeyBrZXlzOiBrZXlTcGVjIH0pO1xuICAgIHJldHVybiBtYWtlVmFsaWRhdG9yKHtcbiAgICAgICAgdGVzdDogKHZhbHVlLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKS50b1N0cmluZygpID09PSBgW29iamVjdCBNYXBdYCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5jb2VyY2lvbnMpICE9PSBgdW5kZWZpbmVkYCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuY29lcmNpb24pID09PSBgdW5kZWZpbmVkYClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBVbmJvdW5kIGNvZXJjaW9uIHJlc3VsdGApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbFZhbHVlcyA9IFsuLi52YWx1ZV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvZXJjZWRWYWx1ZXMgPSBbLi4udmFsdWVdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQXJyYXlWYWxpZGF0b3IoY29lcmNlZFZhbHVlcywgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSksIHsgY29lcmNpb246IHVuZGVmaW5lZCB9KSkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZVZhbHVlID0gKCkgPT4gY29lcmNlZFZhbHVlcy5zb21lKCh2YWwsIHQpID0+IHZhbFswXSAhPT0gb3JpZ2luYWxWYWx1ZXNbdF1bMF0gfHwgdmFsWzFdICE9PSBvcmlnaW5hbFZhbHVlc1t0XVsxXSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IE1hcChjb2VyY2VkVmFsdWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY29lcmNpb25zLnB1c2goWyhfYSA9IHN0YXRlLnApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGAuYCwgbWFrZUxhenlDb2VyY2lvbkZuKHN0YXRlLmNvZXJjaW9uLCB2YWx1ZSwgdXBkYXRlVmFsdWUpXSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBzdWJWYWx1ZV0gb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkID0ga2V5U3BlYyhrZXksIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKSkgJiYgdmFsaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkICYmIChzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuZXJyb3JzKSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IHZhbHVlU3BlYyhzdWJWYWx1ZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSksIHsgcDogY29tcHV0ZUtleShzdGF0ZSwga2V5KSB9KSkgJiYgdmFsaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkICYmIChzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuZXJyb3JzKSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgKHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5jb2VyY2lvbnMpICE9PSBgdW5kZWZpbmVkYCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5jb2VyY2lvbikgPT09IGB1bmRlZmluZWRgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgVW5ib3VuZCBjb2VyY2lvbiByZXN1bHRgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdG9yZSA9IHsgdmFsdWUgfTtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FycmF5VmFsaWRhdG9yKHZhbHVlLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKSwgeyBjb2VyY2lvbjogdW5kZWZpbmVkIH0pKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY29lcmNpb25zLnB1c2goWyhfYiA9IHN0YXRlLnApICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGAuYCwgbWFrZUxhenlDb2VyY2lvbkZuKHN0YXRlLmNvZXJjaW9uLCB2YWx1ZSwgKCkgPT4gbmV3IE1hcChzdG9yZS52YWx1ZSkpXSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1JlY29yZFZhbGlkYXRvcih2YWx1ZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSksIHsgY29lcmNpb246IG1ha2VDb2VyY2lvbkZuKHN0b3JlLCBgdmFsdWVgKSB9KSkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmNvZXJjaW9ucy5wdXNoKFsoX2MgPSBzdGF0ZS5wKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBgLmAsIG1ha2VMYXp5Q29lcmNpb25GbihzdGF0ZS5jb2VyY2lvbiwgdmFsdWUsICgpID0+IG5ldyBNYXAoT2JqZWN0LmVudHJpZXMoc3RvcmUudmFsdWUpKSldKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYEV4cGVjdGVkIGEgbWFwIChnb3QgJHtnZXRQcmludGFibGUodmFsdWUpfSlgKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBvbmx5IHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB0ZXN0ZWQgdmFsdWUgaXMgYVxuICogdHVwbGUgd2hvc2UgZWFjaCB2YWx1ZSBtYXRjaGVzIHRoZSBjb3JyZXNwb25kaW5nIHN1YnNwZWMuIFJlZmluZXMgdGhlIHR5cGVcbiAqIGludG8gYSB0dXBsZSB3aG9zZSBlYWNoIGl0ZW0gaGFzIHRoZSB0eXBlIGluZmVycmVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nXG4gKiB0dXBsZS5cbiAqXG4gKiBTdXBwb3J0cyBjb2VyY2lvbiBpZiB0aGUgYGRlbGltaXRlcmAgb3B0aW9uIGlzIHNldCwgaW4gd2hpY2ggY2FzZSBzdHJpbmdzXG4gKiB3aWxsIGJlIHNwbGl0IGFjY29yZGluZ2x5LlxuICovXG5mdW5jdGlvbiBpc1R1cGxlKHNwZWMsIHsgZGVsaW1pdGVyIH0gPSB7fSkge1xuICAgIGNvbnN0IGxlbmd0aFZhbGlkYXRvciA9IGhhc0V4YWN0TGVuZ3RoKHNwZWMubGVuZ3RoKTtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IGBzdHJpbmdgICYmIHR5cGVvZiBkZWxpbWl0ZXIgIT09IGB1bmRlZmluZWRgKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmNvZXJjaW9ucykgIT09IGB1bmRlZmluZWRgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5jb2VyY2lvbikgPT09IGB1bmRlZmluZWRgKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYFVuYm91bmQgY29lcmNpb24gcmVzdWx0YCk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoZGVsaW1pdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY29lcmNpb25zLnB1c2goWyhfYSA9IHN0YXRlLnApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGAuYCwgc3RhdGUuY29lcmNpb24uYmluZChudWxsLCB2YWx1ZSldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKVxuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBFeHBlY3RlZCBhIHR1cGxlIChnb3QgJHtnZXRQcmludGFibGUodmFsdWUpfSlgKTtcbiAgICAgICAgICAgIGxldCB2YWxpZCA9IGxlbmd0aFZhbGlkYXRvcih2YWx1ZSwgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUpKTtcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSAwLCBUID0gdmFsdWUubGVuZ3RoOyB0IDwgVCAmJiB0IDwgc3BlYy5sZW5ndGg7ICsrdCkge1xuICAgICAgICAgICAgICAgIHZhbGlkID0gc3BlY1t0XSh2YWx1ZVt0XSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSksIHsgcDogY29tcHV0ZUtleShzdGF0ZSwgdCksIGNvZXJjaW9uOiBtYWtlQ29lcmNpb25Gbih2YWx1ZSwgdCkgfSkpICYmIHZhbGlkO1xuICAgICAgICAgICAgICAgIGlmICghdmFsaWQgJiYgKHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5lcnJvcnMpID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBvbmx5IHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB0ZXN0ZWQgdmFsdWUgaXMgYW5cbiAqIG9iamVjdCB3aXRoIGFueSBhbW91bnQgb2YgcHJvcGVydGllcyB0aGF0IG11c3QgYWxsIG1hdGNoIHRoZSBwcm92aWRlZFxuICogc3Vic3BlYy4gUmVmaW5lcyB0aGUgdHlwZSB0byBgUmVjb3JkPHN0cmluZywgVD5gLCB3aXRoIGBUYCBiZWluZyB0aGVcbiAqIHN1YnNwZWMgaW5mZXJyZWQgdHlwZS5cbiAqXG4gKiBLZXlzIGNhbiBiZSBvcHRpb25hbGx5IHZhbGlkYXRlZCBhcyB3ZWxsIGJ5IHVzaW5nIHRoZSBga2V5c2Agb3B0aW9uYWxcbiAqIHN1YnNwZWMgcGFyYW1ldGVyLlxuICovXG5mdW5jdGlvbiBpc1JlY29yZChzcGVjLCB7IGtleXM6IGtleVNwZWMgPSBudWxsLCB9ID0ge30pIHtcbiAgICBjb25zdCBpc0FycmF5VmFsaWRhdG9yID0gaXNBcnJheShpc1R1cGxlKFtrZXlTcGVjICE9PSBudWxsICYmIGtleVNwZWMgIT09IHZvaWQgMCA/IGtleVNwZWMgOiBpc1N0cmluZygpLCBzcGVjXSkpO1xuICAgIHJldHVybiBtYWtlVmFsaWRhdG9yKHtcbiAgICAgICAgdGVzdDogKHZhbHVlLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmNvZXJjaW9ucykgIT09IGB1bmRlZmluZWRgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5jb2VyY2lvbikgPT09IGB1bmRlZmluZWRgKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYFVuYm91bmQgY29lcmNpb24gcmVzdWx0YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNBcnJheVZhbGlkYXRvcih2YWx1ZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSksIHsgY29lcmNpb246IHVuZGVmaW5lZCB9KSkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gT2JqZWN0LmZyb21FbnRyaWVzKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY29lcmNpb25zLnB1c2goWyhfYSA9IHN0YXRlLnApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGAuYCwgc3RhdGUuY29lcmNpb24uYmluZChudWxsLCB2YWx1ZSldKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gYG9iamVjdGAgfHwgdmFsdWUgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYEV4cGVjdGVkIGFuIG9iamVjdCAoZ290ICR7Z2V0UHJpbnRhYmxlKHZhbHVlKX0pYCk7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpO1xuICAgICAgICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSAwLCBUID0ga2V5cy5sZW5ndGg7IHQgPCBUICYmICh2YWxpZCB8fCAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmVycm9ycykgIT0gbnVsbCk7ICsrdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXNbdF07XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViID0gdmFsdWVba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBgX19wcm90b19fYCB8fCBrZXkgPT09IGBjb25zdHJ1Y3RvcmApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBwdXNoRXJyb3IoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSksIHsgcDogY29tcHV0ZUtleShzdGF0ZSwga2V5KSB9KSwgYFVuc2FmZSBwcm9wZXJ0eSBuYW1lYCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoa2V5U3BlYyAhPT0gbnVsbCAmJiAha2V5U3BlYyhrZXksIHN0YXRlKSkge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFzcGVjKHN1YiwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSksIHsgcDogY29tcHV0ZUtleShzdGF0ZSwga2V5KSwgY29lcmNpb246IG1ha2VDb2VyY2lvbkZuKHZhbHVlLCBrZXkpIH0pKSkge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4vKipcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2UgYGlzRGljdGAgYnkgYGlzUmVjb3JkYFxuICovXG5mdW5jdGlvbiBpc0RpY3Qoc3BlYywgb3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIGlzUmVjb3JkKHNwZWMsIG9wdHMpO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBvbmx5IHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB0ZXN0ZWQgdmFsdWUgaXMgYW5cbiAqIG9iamVjdCB3aG9zZSBhbGwgcHJvcGVydGllcyBtYXRjaCB0aGVpciBjb3JyZXNwb25kaW5nIHN1YnNwZWMuIFJlZmluZXNcbiAqIHRoZSB0eXBlIGludG8gYW4gb2JqZWN0IHdob3NlIGVhY2ggcHJvcGVydHkgaGFzIHRoZSB0eXBlIGluZmVycmVkIGJ5IHRoZVxuICogY29ycmVzcG9uZGluZyBzdWJzcGVjLlxuICpcbiAqIFVubGlrZSBgdC5pc1BhcnRpYWxgLCBgdC5pc09iamVjdGAgZG9lc24ndCBhbGxvdyBleHRyYW5lb3VzIHByb3BlcnRpZXMgYnlcbiAqIGRlZmF1bHQuIFRoaXMgYmVoYXZpb3VyIGNhbiBiZSBhbHRlcmVkIGJ5IHVzaW5nIHRoZSBgZXh0cmFgIG9wdGlvbmFsXG4gKiBzdWJzcGVjIHBhcmFtZXRlciwgd2hpY2ggd2lsbCBiZSBjYWxsZWQgdG8gdmFsaWRhdGUgYW4gb2JqZWN0IG9ubHlcbiAqIGNvbnRhaW5pbmcgdGhlIGV4dHJhbmVvdXMgcHJvcGVydGllcy5cbiAqXG4gKiBDYWxsaW5nIGB0LmlzT2JqZWN0KC4uLiwge2V4dHJhOiB0LmlzUmVjb3JkKHQuaXNVbmtub3duKCkpfSlgIGlzXG4gKiBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBjYWxsaW5nIGB0LmlzUGFydGlhbCguLi4pYC5cbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QocHJvcHMsIHsgZXh0cmE6IGV4dHJhU3BlYyA9IG51bGwsIH0gPSB7fSkge1xuICAgIGNvbnN0IHNwZWNLZXlzID0gT2JqZWN0LmtleXMocHJvcHMpO1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBgb2JqZWN0YCB8fCB2YWx1ZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgYW4gb2JqZWN0IChnb3QgJHtnZXRQcmludGFibGUodmFsdWUpfSlgKTtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBuZXcgU2V0KFsuLi5zcGVjS2V5cywgLi4uT2JqZWN0LmtleXModmFsdWUpXSk7XG4gICAgICAgICAgICBjb25zdCBleHRyYSA9IHt9O1xuICAgICAgICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBgY29uc3RydWN0b3JgIHx8IGtleSA9PT0gYF9fcHJvdG9fX2ApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBwdXNoRXJyb3IoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSksIHsgcDogY29tcHV0ZUtleShzdGF0ZSwga2V5KSB9KSwgYFVuc2FmZSBwcm9wZXJ0eSBuYW1lYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGVjID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCBrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHByb3BzW2tleV1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWIgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdmFsdWVba2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3BlYyAhPT0gYHVuZGVmaW5lZGApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkID0gc3BlYyhzdWIsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUpLCB7IHA6IGNvbXB1dGVLZXkoc3RhdGUsIGtleSksIGNvZXJjaW9uOiBtYWtlQ29lcmNpb25Gbih2YWx1ZSwga2V5KSB9KSkgJiYgdmFsaWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXh0cmFTcGVjID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IHB1c2hFcnJvcihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKSwgeyBwOiBjb21wdXRlS2V5KHN0YXRlLCBrZXkpIH0pLCBgRXh0cmFuZW91cyBwcm9wZXJ0eSAoZ290ICR7Z2V0UHJpbnRhYmxlKHN1Yil9KWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4dHJhLCBrZXksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogKCkgPT4gc3ViLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldDogbWFrZVNldHRlcih2YWx1ZSwga2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF2YWxpZCAmJiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmVycm9ycykgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXh0cmFTcGVjICE9PSBudWxsICYmICh2YWxpZCB8fCAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmVycm9ycykgIT0gbnVsbCkpXG4gICAgICAgICAgICAgICAgdmFsaWQgPSBleHRyYVNwZWMoZXh0cmEsIHN0YXRlKSAmJiB2YWxpZDtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZDtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih2YWxpZGF0b3IsIHtcbiAgICAgICAgcHJvcGVydGllczogcHJvcHMsXG4gICAgfSk7XG59XG4vKipcbiAqIENyZWF0ZSBhIHZhbGlkYXRvciB0aGF0IG9ubHkgcmV0dXJucyB0cnVlIHdoZW4gdGhlIHRlc3RlZCB2YWx1ZSBpcyBhblxuICogb2JqZWN0IHdob3NlIGFsbCBwcm9wZXJ0aWVzIG1hdGNoIHRoZWlyIGNvcnJlc3BvbmRpbmcgc3Vic3BlYy4gUmVmaW5lc1xuICogdGhlIHR5cGUgaW50byBhbiBvYmplY3Qgd2hvc2UgZWFjaCBwcm9wZXJ0eSBoYXMgdGhlIHR5cGUgaW5mZXJyZWQgYnkgdGhlXG4gKiBjb3JyZXNwb25kaW5nIHN1YnNwZWMuXG4gKlxuICogVW5saWtlIGB0LmlzT2JqZWN0YCwgYHQuaXNQYXJ0aWFsYCBhbGxvd3MgZXh0cmFuZW91cyBwcm9wZXJ0aWVzLiBUaGVcbiAqIHJlc3VsdGluZyB0eXBlIHdpbGwgcmVmbGVjdCB0aGlzIGJlaGF2aW91ciBieSBpbmNsdWRpbmcgYW4gaW5kZXhcbiAqIHNpZ25hdHVyZSAoZWFjaCBleHRyYW5lb3VzIHByb3BlcnR5IGJlaW5nIHR5cGVkIGB1bmtub3duYCkuXG4gKlxuICogQ2FsbGluZyBgdC5pc1BhcnRpYWwoLi4uKWAgaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgY2FsbGluZ1xuICogYHQuaXNPYmplY3QoLi4uLCB7ZXh0cmE6IHQuaXNSZWNvcmQodC5pc1Vua25vd24oKSl9KWAuXG4gKi9cbmZ1bmN0aW9uIGlzUGFydGlhbChwcm9wcykge1xuICAgIHJldHVybiBpc09iamVjdChwcm9wcywgeyBleHRyYTogaXNSZWNvcmQoaXNVbmtub3duKCkpIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBvbmx5IHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB0ZXN0ZWQgdmFsdWUgaXMgYW5cbiAqIG9iamVjdCB3aG9zZSBwcm90b3R5cGUgaXMgZGVyaXZlZCBmcm9tIHRoZSBnaXZlbiBjbGFzcy4gUmVmaW5lcyB0aGUgdHlwZVxuICogaW50byBhIGNsYXNzIGluc3RhbmNlLlxuICovXG5jb25zdCBpc0luc3RhbmNlT2YgPSAoY29uc3RydWN0b3IpID0+IG1ha2VWYWxpZGF0b3Ioe1xuICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBjb25zdHJ1Y3RvcikpXG4gICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgJHtjb25zdHJ1Y3Rvci5uYW1lfSAoZ290ICR7Z2V0UHJpbnRhYmxlKHZhbHVlKX0pYCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG59KTtcbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgb25seSByZXR1cm5zIHRydWUgd2hlbiB0aGUgdGVzdGVkIHZhbHVlIGlzIGFuXG4gKiBvYmplY3QgbWF0Y2hpbmcgYW55IG9mIHRoZSBwcm92aWRlZCBzdWJzcGVjcy4gSWYgdGhlIG9wdGlvbmFsIGBleGNsdXNpdmVgXG4gKiBwYXJhbWV0ZXIgaXMgc2V0IHRvIGB0cnVlYCwgdGhlIGJlaGF2aW91ciBjaGFuZ2VzIHNvIHRoYXQgdGhlIHZhbGlkYXRvclxuICogb25seSByZXR1cm5zIHRydWUgd2hlbiBleGFjdGx5IG9uZSBzdWJzcGVjIG1hdGNoZXMuXG4gKi9cbmNvbnN0IGlzT25lT2YgPSAoc3BlY3MsIHsgZXhjbHVzaXZlID0gZmFsc2UsIH0gPSB7fSkgPT4gbWFrZVZhbGlkYXRvcih7XG4gICAgdGVzdDogKHZhbHVlLCBzdGF0ZSkgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IFtdO1xuICAgICAgICBjb25zdCBlcnJvckJ1ZmZlciA9IHR5cGVvZiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmVycm9ycykgIT09IGB1bmRlZmluZWRgXG4gICAgICAgICAgICA/IFtdIDogdW5kZWZpbmVkO1xuICAgICAgICBmb3IgKGxldCB0ID0gMCwgVCA9IHNwZWNzLmxlbmd0aDsgdCA8IFQ7ICsrdCkge1xuICAgICAgICAgICAgY29uc3Qgc3ViRXJyb3JzID0gdHlwZW9mIChzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuZXJyb3JzKSAhPT0gYHVuZGVmaW5lZGBcbiAgICAgICAgICAgICAgICA/IFtdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3Qgc3ViQ29lcmNpb25zID0gdHlwZW9mIChzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuY29lcmNpb25zKSAhPT0gYHVuZGVmaW5lZGBcbiAgICAgICAgICAgICAgICA/IFtdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHNwZWNzW3RdKHZhbHVlLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKSwgeyBlcnJvcnM6IHN1YkVycm9ycywgY29lcmNpb25zOiBzdWJDb2VyY2lvbnMsIHA6IGAkeyhfYSA9IHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5wKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBgLmB9IyR7dCArIDF9YCB9KSkpIHtcbiAgICAgICAgICAgICAgICBtYXRjaGVzLnB1c2goW2AjJHt0ICsgMX1gLCBzdWJDb2VyY2lvbnNdKTtcbiAgICAgICAgICAgICAgICBpZiAoIWV4Y2x1c2l2ZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBlcnJvckJ1ZmZlciA9PT0gbnVsbCB8fCBlcnJvckJ1ZmZlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3JCdWZmZXIucHVzaChzdWJFcnJvcnNbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgWywgc3ViQ29lcmNpb25zXSA9IG1hdGNoZXNbMF07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHN1YkNvZXJjaW9ucyAhPT0gYHVuZGVmaW5lZGApXG4gICAgICAgICAgICAgICAgKF9iID0gc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmNvZXJjaW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnB1c2goLi4uc3ViQ29lcmNpb25zKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICBwdXNoRXJyb3Ioc3RhdGUsIGBFeHBlY3RlZCB0byBtYXRjaCBleGFjdGx5IGEgc2luZ2xlIHByZWRpY2F0ZSAobWF0Y2hlZCAke21hdGNoZXMuam9pbihgLCBgKX0pYCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIChfYyA9IHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5lcnJvcnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5wdXNoKC4uLmVycm9yQnVmZmVyKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG59KTtcblxuZnVuY3Rpb24gbWFrZVRyYWl0KHZhbHVlKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG59XG5mdW5jdGlvbiBtYWtlVmFsaWRhdG9yKHsgdGVzdCB9KSB7XG4gICAgcmV0dXJuIG1ha2VUcmFpdCh0ZXN0KSgpO1xufVxuY2xhc3MgVHlwZUFzc2VydGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHsgZXJyb3JzIH0gPSB7fSkge1xuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYFR5cGUgbWlzbWF0Y2hgO1xuICAgICAgICBpZiAoZXJyb3JzICYmIGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYFxcbmA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVycm9yIG9mIGVycm9ycykge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSArPSBgXFxuLSAke2Vycm9yfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIoZXJyb3JNZXNzYWdlKTtcbiAgICB9XG59XG4vKipcbiAqIENoZWNrIHRoYXQgdGhlIHNwZWNpZmllZCB2YWx1ZSBtYXRjaGVzIHRoZSBnaXZlbiB2YWxpZGF0b3IsIGFuZCB0aHJvd3MgYW5cbiAqIGV4Y2VwdGlvbiBpZiBpdCBkb2Vzbid0LiBSZWZpbmUgdGhlIHR5cGUgaWYgaXQgcGFzc2VzLlxuICovXG5mdW5jdGlvbiBhc3NlcnQodmFsLCB2YWxpZGF0b3IpIHtcbiAgICBpZiAoIXZhbGlkYXRvcih2YWwpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlQXNzZXJ0aW9uRXJyb3IoKTtcbiAgICB9XG59XG4vKipcbiAqIENoZWNrIHRoYXQgdGhlIHNwZWNpZmllZCB2YWx1ZSBtYXRjaGVzIHRoZSBnaXZlbiB2YWxpZGF0b3IsIGFuZCB0aHJvd3MgYW5cbiAqIGV4Y2VwdGlvbiBpZiBpdCBkb2Vzbid0LiBSZWZpbmUgdGhlIHR5cGUgaWYgaXQgcGFzc2VzLlxuICpcbiAqIFRocm93biBleGNlcHRpb25zIGluY2x1ZGUgZGV0YWlscyBhYm91dCB3aGF0IGV4YWN0bHkgbG9va3MgaW52YWxpZCBpbiB0aGVcbiAqIHRlc3RlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0V2l0aEVycm9ycyh2YWwsIHZhbGlkYXRvcikge1xuICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgIGlmICghdmFsaWRhdG9yKHZhbCwgeyBlcnJvcnMgfSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVBc3NlcnRpb25FcnJvcih7IGVycm9ycyB9KTtcbiAgICB9XG59XG4vKipcbiAqIENvbXBpbGUtdGltZSBvbmx5LiBSZWZpbmUgdGhlIHR5cGUgYXMgaWYgdGhlIHZhbGlkYXRvciB3YXMgbWF0Y2hpbmcgdGhlXG4gKiB0ZXN0ZWQgdmFsdWUsIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IHJ1biBpdC4gU2ltaWxhciB0byB0aGUgY2xhc3NpYyBgYXNgXG4gKiBvcGVyYXRvciBpbiBUeXBlU2NyaXB0LlxuICovXG5mdW5jdGlvbiBzb2Z0QXNzZXJ0KHZhbCwgdmFsaWRhdG9yKSB7XG4gICAgLy8gSXQncyBhIHNvZnQgYXNzZXJ0OyB3ZSB0ZWxsIFR5cGVTY3JpcHQgYWJvdXQgdGhlIHR5cGUsIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGl0XG59XG5mdW5jdGlvbiBhcyh2YWx1ZSwgdmFsaWRhdG9yLCB7IGNvZXJjZSA9IGZhbHNlLCBlcnJvcnM6IHN0b3JlRXJyb3JzLCB0aHJvdzogdGhyb3dzIH0gPSB7fSkge1xuICAgIGNvbnN0IGVycm9ycyA9IHN0b3JlRXJyb3JzID8gW10gOiB1bmRlZmluZWQ7XG4gICAgaWYgKCFjb2VyY2UpIHtcbiAgICAgICAgaWYgKHZhbGlkYXRvcih2YWx1ZSwgeyBlcnJvcnMgfSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd3MgPyB2YWx1ZSA6IHsgdmFsdWUsIGVycm9yczogdW5kZWZpbmVkIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXRocm93cykge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZXJyb3JzOiBlcnJvcnMgIT09IG51bGwgJiYgZXJyb3JzICE9PSB2b2lkIDAgPyBlcnJvcnMgOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUFzc2VydGlvbkVycm9yKHsgZXJyb3JzIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXRlID0geyB2YWx1ZSB9O1xuICAgIGNvbnN0IGNvZXJjaW9uID0gbWFrZUNvZXJjaW9uRm4oc3RhdGUsIGB2YWx1ZWApO1xuICAgIGNvbnN0IGNvZXJjaW9ucyA9IFtdO1xuICAgIGlmICghdmFsaWRhdG9yKHZhbHVlLCB7IGVycm9ycywgY29lcmNpb24sIGNvZXJjaW9ucyB9KSkge1xuICAgICAgICBpZiAoIXRocm93cykge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZXJyb3JzOiBlcnJvcnMgIT09IG51bGwgJiYgZXJyb3JzICE9PSB2b2lkIDAgPyBlcnJvcnMgOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUFzc2VydGlvbkVycm9yKHsgZXJyb3JzIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgWywgYXBwbHldIG9mIGNvZXJjaW9ucylcbiAgICAgICAgYXBwbHkoKTtcbiAgICBpZiAodGhyb3dzKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZS52YWx1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB7IHZhbHVlOiBzdGF0ZS52YWx1ZSwgZXJyb3JzOiB1bmRlZmluZWQgfTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IGZ1bmN0aW9uIHRoYXQgYXBwbHkgdGhlIGdpdmVuIHZhbGlkYXRvcnMgdG8gZWFjaFxuICogY29ycmVzcG9uZGluZyBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGFuZCB0aHJvd3MgYW4gZXhjZXB0aW9uIGluXG4gKiBjYXNlIG9mIGEgbWlzbWF0Y2guXG4gKi9cbmZ1bmN0aW9uIGZuKHZhbGlkYXRvcnMsIGZuKSB7XG4gICAgY29uc3QgaXNWYWxpZEFyZ0xpc3QgPSBpc1R1cGxlKHZhbGlkYXRvcnMpO1xuICAgIHJldHVybiAoKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgY29uc3QgY2hlY2sgPSBpc1ZhbGlkQXJnTGlzdChhcmdzKTtcbiAgICAgICAgaWYgKCFjaGVjaylcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlQXNzZXJ0aW9uRXJyb3IoKTtcbiAgICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHZhbGlkYXRvciB0aGF0IGNoZWNrcyB0aGF0IHRoZSB0ZXN0ZWQgYXJyYXkgb3Igc3RyaW5nIGhhcyBhdCBsZWFzdFxuICogdGhlIHNwZWNpZmllZCBsZW5ndGguXG4gKi9cbmZ1bmN0aW9uIGhhc01pbkxlbmd0aChsZW5ndGgpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGlmICghKHZhbHVlLmxlbmd0aCA+PSBsZW5ndGgpKVxuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBFeHBlY3RlZCB0byBoYXZlIGEgbGVuZ3RoIG9mIGF0IGxlYXN0ICR7bGVuZ3RofSBlbGVtZW50cyAoZ290ICR7dmFsdWUubGVuZ3RofSlgKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBjaGVja3MgdGhhdCB0aGUgdGVzdGVkIGFycmF5IG9yIHN0cmluZyBoYXMgYXQgbW9zdFxuICogdGhlIHNwZWNpZmllZCBsZW5ndGguXG4gKi9cbmZ1bmN0aW9uIGhhc01heExlbmd0aChsZW5ndGgpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGlmICghKHZhbHVlLmxlbmd0aCA8PSBsZW5ndGgpKVxuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBFeHBlY3RlZCB0byBoYXZlIGEgbGVuZ3RoIG9mIGF0IG1vc3QgJHtsZW5ndGh9IGVsZW1lbnRzIChnb3QgJHt2YWx1ZS5sZW5ndGh9KWApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4vKipcbiAqIENyZWF0ZSBhIHZhbGlkYXRvciB0aGF0IGNoZWNrcyB0aGF0IHRoZSB0ZXN0ZWQgYXJyYXkgb3Igc3RyaW5nIGhhcyBleGFjdGx5XG4gKiB0aGUgc3BlY2lmaWVkIGxlbmd0aC5cbiAqL1xuZnVuY3Rpb24gaGFzRXhhY3RMZW5ndGgobGVuZ3RoKSB7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAoISh2YWx1ZS5sZW5ndGggPT09IGxlbmd0aCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYEV4cGVjdGVkIHRvIGhhdmUgYSBsZW5ndGggb2YgZXhhY3RseSAke2xlbmd0aH0gZWxlbWVudHMgKGdvdCAke3ZhbHVlLmxlbmd0aH0pYCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgY2hlY2tzIHRoYXQgdGhlIHRlc3RlZCBhcnJheSBvbmx5IGNvbnRhaW5zIHVuaXF1ZVxuICogZWxlbWVudHMuIFRoZSBvcHRpb25hbCBgbWFwYCBwYXJhbWV0ZXIgbGV0cyB5b3UgZGVmaW5lIGEgdHJhbnNmb3JtIHRvXG4gKiBhcHBseSBiZWZvcmUgbWFraW5nIHRoZSBjaGVjayAodGhlIHJlc3VsdCBvZiB0aGlzIHRyYW5zZm9ybSB3aWxsIGJlXG4gKiBkaXNjYXJkZWQgYWZ0ZXJ3YXJkcykuXG4gKi9cbmZ1bmN0aW9uIGhhc1VuaXF1ZUl0ZW1zKHsgbWFwLCB9ID0ge30pIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIGNvbnN0IGR1cCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSAwLCBUID0gdmFsdWUubGVuZ3RoOyB0IDwgVDsgKyt0KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViID0gdmFsdWVbdF07XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gdHlwZW9mIG1hcCAhPT0gYHVuZGVmaW5lZGBcbiAgICAgICAgICAgICAgICAgICAgPyBtYXAoc3ViKVxuICAgICAgICAgICAgICAgICAgICA6IHN1YjtcbiAgICAgICAgICAgICAgICBpZiAoc2V0LmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkdXAuaGFzKGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gY29udGFpbiB1bmlxdWUgZWxlbWVudHM7IGdvdCBhIGR1cGxpY2F0ZSB3aXRoICR7Z2V0UHJpbnRhYmxlKHZhbHVlKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgZHVwLmFkZChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0LmFkZChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkdXAuc2l6ZSA9PT0gMDtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgY2hlY2tzIHRoYXQgdGhlIHRlc3RlZCBudW1iZXIgaXMgc3RyaWN0bHkgbGVzcyB0aGFuIDAuXG4gKi9cbmZ1bmN0aW9uIGlzTmVnYXRpdmUoKSB7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAoISh2YWx1ZSA8PSAwKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gYmUgbmVnYXRpdmUgKGdvdCAke3ZhbHVlfSlgKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBjaGVja3MgdGhhdCB0aGUgdGVzdGVkIG51bWJlciBpcyBlcXVhbCBvciBncmVhdGVyXG4gKiB0aGFuIDAuXG4gKi9cbmZ1bmN0aW9uIGlzUG9zaXRpdmUoKSB7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAoISh2YWx1ZSA+PSAwKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gYmUgcG9zaXRpdmUgKGdvdCAke3ZhbHVlfSlgKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBjaGVja3MgdGhhdCB0aGUgdGVzdGVkIG51bWJlciBpcyBlcXVhbCBvciBncmVhdGVyXG4gKiB0aGFuIHRoZSBzcGVjaWZpZWQgcmVmZXJlbmNlLlxuICovXG5mdW5jdGlvbiBpc0F0TGVhc3Qobikge1xuICAgIHJldHVybiBtYWtlVmFsaWRhdG9yKHtcbiAgICAgICAgdGVzdDogKHZhbHVlLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCEodmFsdWUgPj0gbikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYEV4cGVjdGVkIHRvIGJlIGF0IGxlYXN0ICR7bn0gKGdvdCAke3ZhbHVlfSlgKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBjaGVja3MgdGhhdCB0aGUgdGVzdGVkIG51bWJlciBpcyBlcXVhbCBvciBzbWFsbGVyXG4gKiB0aGFuIHRoZSBzcGVjaWZpZWQgcmVmZXJlbmNlLlxuICovXG5mdW5jdGlvbiBpc0F0TW9zdChuKSB7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAoISh2YWx1ZSA8PSBuKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gYmUgYXQgbW9zdCAke259IChnb3QgJHt2YWx1ZX0pYCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgY2hlY2tzIHRoYXQgdGhlIHRlc3RlZCBudW1iZXIgaXMgYmV0d2VlbiB0aGVcbiAqIHNwZWNpZmllZCByZWZlcmVuY2VzIChpbmNsdWRpbmcgdGhlIHVwcGVyIGJvdW5kYXJ5KS5cbiAqL1xuZnVuY3Rpb24gaXNJbkluY2x1c2l2ZVJhbmdlKGEsIGIpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGlmICghKHZhbHVlID49IGEgJiYgdmFsdWUgPD0gYikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYEV4cGVjdGVkIHRvIGJlIGluIHRoZSBbJHthfTsgJHtifV0gcmFuZ2UgKGdvdCAke3ZhbHVlfSlgKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBjaGVja3MgdGhhdCB0aGUgdGVzdGVkIG51bWJlciBpcyBiZXR3ZWVuIHRoZVxuICogc3BlY2lmaWVkIHJlZmVyZW5jZXMgKGV4Y2x1ZGluZyB0aGUgdXBwZXIgYm91bmRhcnkpLlxuICovXG5mdW5jdGlvbiBpc0luRXhjbHVzaXZlUmFuZ2UoYSwgYikge1xuICAgIHJldHVybiBtYWtlVmFsaWRhdG9yKHtcbiAgICAgICAgdGVzdDogKHZhbHVlLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCEodmFsdWUgPj0gYSAmJiB2YWx1ZSA8IGIpKVxuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBFeHBlY3RlZCB0byBiZSBpbiB0aGUgWyR7YX07ICR7Yn1bIHJhbmdlIChnb3QgJHt2YWx1ZX0pYCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgY2hlY2tzIHRoYXQgdGhlIHRlc3RlZCBudW1iZXIgaXMgYW4gaW50ZWdlci5cbiAqXG4gKiBCeSBkZWZhdWx0IFR5cGFuaW9uIHdpbGwgYWxzbyBjaGVjayB0aGF0IGl0J3MgYSAqc2FmZSogaW50ZWdlci4gRm9yIGV4YW1wbGUsXG4gKiAyXjUzIHdvdWxkbid0IGJlIGEgc2FmZSBpbnRlZ2VyIGJlY2F1c2UgMl41MysxIHdvdWxkIGJlIHJvdW5kZWQgdG8gMl41MyxcbiAqIHdoaWNoIGNvdWxkIHB1dCB5b3VyIGFwcGxpY2F0aW9ucyBhdCByaXNrIHdoZW4gdXNlZCBpbiBsb29wcy5cbiAqL1xuZnVuY3Rpb24gaXNJbnRlZ2VyKHsgdW5zYWZlID0gZmFsc2UsIH0gPSB7fSkge1xuICAgIHJldHVybiBtYWtlVmFsaWRhdG9yKHtcbiAgICAgICAgdGVzdDogKHZhbHVlLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBNYXRoLnJvdW5kKHZhbHVlKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gYmUgYW4gaW50ZWdlciAoZ290ICR7dmFsdWV9KWApO1xuICAgICAgICAgICAgaWYgKCF1bnNhZmUgJiYgIU51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gYmUgYSBzYWZlIGludGVnZXIgKGdvdCAke3ZhbHVlfSlgKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBjaGVja3MgdGhhdCB0aGUgdGVzdGVkIHN0cmluZyBtYXRjaGVzIHRoZSBnaXZlblxuICogcmVndWxhciBleHByZXNzaW9uLlxuICovXG5mdW5jdGlvbiBtYXRjaGVzUmVnRXhwKHJlZ0V4cCkge1xuICAgIHJldHVybiBtYWtlVmFsaWRhdG9yKHtcbiAgICAgICAgdGVzdDogKHZhbHVlLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZWdFeHAudGVzdCh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYEV4cGVjdGVkIHRvIG1hdGNoIHRoZSBwYXR0ZXJuICR7cmVnRXhwLnRvU3RyaW5nKCl9IChnb3QgJHtnZXRQcmludGFibGUodmFsdWUpfSlgKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBjaGVja3MgdGhhdCB0aGUgdGVzdGVkIHN0cmluZyBvbmx5IGNvbnRhaW4gbG93ZXJjYXNlXG4gKiBjaGFyYWN0ZXJzLlxuICovXG5mdW5jdGlvbiBpc0xvd2VyQ2FzZSgpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gYmUgYWxsLWxvd2VyY2FzZSAoZ290ICR7dmFsdWV9KWApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4vKipcbiAqIENyZWF0ZSBhIHZhbGlkYXRvciB0aGF0IGNoZWNrcyB0aGF0IHRoZSB0ZXN0ZWQgc3RyaW5nIG9ubHkgY29udGFpbiB1cHBlcmNhc2VcbiAqIGNoYXJhY3RlcnMuXG4gKi9cbmZ1bmN0aW9uIGlzVXBwZXJDYXNlKCkge1xuICAgIHJldHVybiBtYWtlVmFsaWRhdG9yKHtcbiAgICAgICAgdGVzdDogKHZhbHVlLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZS50b1VwcGVyQ2FzZSgpKVxuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBFeHBlY3RlZCB0byBiZSBhbGwtdXBwZXJjYXNlIChnb3QgJHt2YWx1ZX0pYCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgY2hlY2tzIHRoYXQgdGhlIHRlc3RlZCBzdHJpbmcgaXMgYSB2YWxpZCBVVUlEIHY0LlxuICovXG5mdW5jdGlvbiBpc1VVSUQ0KCkge1xuICAgIHJldHVybiBtYWtlVmFsaWRhdG9yKHtcbiAgICAgICAgdGVzdDogKHZhbHVlLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF1dWlkNFJlZ0V4cC50ZXN0KHZhbHVlKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBVVUlEIHY0IChnb3QgJHtnZXRQcmludGFibGUodmFsdWUpfSlgKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBjaGVja3MgdGhhdCB0aGUgdGVzdGVkIHN0cmluZyBpcyBhIHZhbGlkIElTTzg2MDFcbiAqIGRhdGUuXG4gKi9cbmZ1bmN0aW9uIGlzSVNPODYwMSgpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGlmICghaXNvODYwMVJlZ0V4cC50ZXN0KHZhbHVlKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBJU08gODYwMSBkYXRlIHN0cmluZyAoZ290ICR7Z2V0UHJpbnRhYmxlKHZhbHVlKX0pYCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgY2hlY2tzIHRoYXQgdGhlIHRlc3RlZCBzdHJpbmcgaXMgYSB2YWxpZCBoZXhhZGVjaW1hbFxuICogY29sb3IuIFNldHRpbmcgdGhlIG9wdGlvbmFsIGBhbHBoYWAgcGFyYW1ldGVyIHRvIGB0cnVlYCBhbGxvd3MgYW4gYWRkaXRpb25hbFxuICogdHJhbnNwYXJlbmN5IGNoYW5uZWwgdG8gYmUgaW5jbHVkZWQuXG4gKi9cbmZ1bmN0aW9uIGlzSGV4Q29sb3IoeyBhbHBoYSA9IGZhbHNlLCB9KSB7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhbHBoYVxuICAgICAgICAgICAgICAgID8gY29sb3JTdHJpbmdSZWdFeHAudGVzdCh2YWx1ZSlcbiAgICAgICAgICAgICAgICA6IGNvbG9yU3RyaW5nQWxwaGFSZWdFeHAudGVzdCh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIXJlcylcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBoZXhhZGVjaW1hbCBjb2xvciBzdHJpbmcgKGdvdCAke2dldFByaW50YWJsZSh2YWx1ZSl9KWApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4vKipcbiAqIENyZWF0ZSBhIHZhbGlkYXRvciB0aGF0IGNoZWNrcyB0aGF0IHRoZSB0ZXN0ZWQgc3RyaW5nIGlzIHZhbGlkIGJhc2U2NC5cbiAqL1xuZnVuY3Rpb24gaXNCYXNlNjQoKSB7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWJhc2U2NFJlZ0V4cC50ZXN0KHZhbHVlKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBiYXNlIDY0IHN0cmluZyAoZ290ICR7Z2V0UHJpbnRhYmxlKHZhbHVlKX0pYCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgY2hlY2tzIHRoYXQgdGhlIHRlc3RlZCBzdHJpbmcgaXMgdmFsaWQgSlNPTi4gQVxuICogb3B0aW9uYWwgc3BlYyBjYW4gYmUgcGFzc2VkIGFzIHBhcmFtZXRlciwgaW4gd2hpY2ggY2FzZSB0aGUgZGF0YSB3aWxsIGJlXG4gKiBkZXNlcmlhbGl6ZWQgYW5kIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBzcGVjIChjb2VyY2lvbiB3aWxsIGJlIGRpc2FibGVkXG4gKiBmb3IgdGhpcyBjaGVjaywgYW5kIGV2ZW4gaWYgc3VjY2Vzc2Z1bCB0aGUgcmV0dXJuZWQgdmFsdWUgd2lsbCBzdGlsbCBiZVxuICogdGhlIG9yaWdpbmFsIHN0cmluZykuXG4gKi9cbmZ1bmN0aW9uIGlzSlNPTihzcGVjID0gaXNVbmtub3duKCkpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGxldCBkYXRhO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBKU09OIHN0cmluZyAoZ290ICR7Z2V0UHJpbnRhYmxlKHZhbHVlKX0pYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3BlYyhkYXRhLCBzdGF0ZSk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGNhc2NhZGUoc3BlYywgLi4uZm9sbG93dXBzKSB7XG4gICAgY29uc3QgcmVzb2x2ZWRGb2xsb3d1cHMgPSBBcnJheS5pc0FycmF5KGZvbGxvd3Vwc1swXSlcbiAgICAgICAgPyBmb2xsb3d1cHNbMF1cbiAgICAgICAgOiBmb2xsb3d1cHM7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHsgdmFsdWU6IHZhbHVlIH07XG4gICAgICAgICAgICBjb25zdCBzdWJDb2VyY2lvbiA9IHR5cGVvZiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmNvZXJjaW9ucykgIT09IGB1bmRlZmluZWRgXG4gICAgICAgICAgICAgICAgPyBtYWtlQ29lcmNpb25Gbihjb250ZXh0LCBgdmFsdWVgKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IHN1YkNvZXJjaW9ucyA9IHR5cGVvZiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmNvZXJjaW9ucykgIT09IGB1bmRlZmluZWRgXG4gICAgICAgICAgICAgICAgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICghc3BlYyh2YWx1ZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSksIHsgY29lcmNpb246IHN1YkNvZXJjaW9uLCBjb2VyY2lvbnM6IHN1YkNvZXJjaW9ucyB9KSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgcmV2ZXJ0cyA9IFtdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdWJDb2VyY2lvbnMgIT09IGB1bmRlZmluZWRgKVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgWywgY29lcmNpb25dIG9mIHN1YkNvZXJjaW9ucylcbiAgICAgICAgICAgICAgICAgICAgcmV2ZXJ0cy5wdXNoKGNvZXJjaW9uKCkpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuY29lcmNpb25zKSAhPT0gYHVuZGVmaW5lZGApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQudmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuY29lcmNpb24pID09PSBgdW5kZWZpbmVkYClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgVW5ib3VuZCBjb2VyY2lvbiByZXN1bHRgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNvZXJjaW9ucy5wdXNoKFsoX2EgPSBzdGF0ZS5wKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBgLmAsIHN0YXRlLmNvZXJjaW9uLmJpbmQobnVsbCwgY29udGV4dC52YWx1ZSldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAoX2IgPSBzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuY29lcmNpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucHVzaCguLi5zdWJDb2VyY2lvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRGb2xsb3d1cHMuZXZlcnkoc3BlYyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzcGVjKGNvbnRleHQudmFsdWUsIHN0YXRlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcmV2ZXJ0IG9mIHJldmVydHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV2ZXJ0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xufVxuZnVuY3Rpb24gYXBwbHlDYXNjYWRlKHNwZWMsIC4uLmZvbGxvd3Vwcykge1xuICAgIGNvbnN0IHJlc29sdmVkRm9sbG93dXBzID0gQXJyYXkuaXNBcnJheShmb2xsb3d1cHNbMF0pXG4gICAgICAgID8gZm9sbG93dXBzWzBdXG4gICAgICAgIDogZm9sbG93dXBzO1xuICAgIHJldHVybiBjYXNjYWRlKHNwZWMsIHJlc29sdmVkRm9sbG93dXBzKTtcbn1cbi8qKlxuICogV3JhcHMgdGhlIGdpdmVuIHNwZWMgdG8gYWxzbyBhbGxvdyBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gaXNPcHRpb25hbChzcGVjKSB7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBgdW5kZWZpbmVkYClcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBzcGVjKHZhbHVlLCBzdGF0ZSk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4vKipcbiAqIFdyYXBzIHRoZSBnaXZlbiBzcGVjIHRvIGFsc28gYWxsb3cgYG51bGxgLlxuICovXG5mdW5jdGlvbiBpc051bGxhYmxlKHNwZWMpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBzcGVjKHZhbHVlLCBzdGF0ZSk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG5jb25zdCBjaGVja3MgPSB7XG4gICAgbWlzc2luZzogKGtleXMsIGtleSkgPT4ga2V5cy5oYXMoa2V5KSxcbiAgICB1bmRlZmluZWQ6IChrZXlzLCBrZXksIHZhbHVlKSA9PiBrZXlzLmhhcyhrZXkpICYmIHR5cGVvZiB2YWx1ZVtrZXldICE9PSBgdW5kZWZpbmVkYCxcbiAgICBuaWw6IChrZXlzLCBrZXksIHZhbHVlKSA9PiBrZXlzLmhhcyhrZXkpICYmIHZhbHVlW2tleV0gIT0gbnVsbCxcbiAgICBmYWxzeTogKGtleXMsIGtleSwgdmFsdWUpID0+IGtleXMuaGFzKGtleSkgJiYgISF2YWx1ZVtrZXldLFxufTtcbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgY2hlY2tzIHRoYXQgdGhlIHRlc3RlZCBvYmplY3QgY29udGFpbnMgdGhlIHNwZWNpZmllZFxuICoga2V5cy5cbiovXG5mdW5jdGlvbiBoYXNSZXF1aXJlZEtleXMocmVxdWlyZWRLZXlzLCBvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHJlcXVpcmVkU2V0ID0gbmV3IFNldChyZXF1aXJlZEtleXMpO1xuICAgIGNvbnN0IGNoZWNrID0gY2hlY2tzWyhfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5taXNzaW5nSWYpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdtaXNzaW5nJ107XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyh2YWx1ZSkpO1xuICAgICAgICAgICAgY29uc3QgcHJvYmxlbXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHJlcXVpcmVkU2V0KVxuICAgICAgICAgICAgICAgIGlmICghY2hlY2soa2V5cywga2V5LCB2YWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgIHByb2JsZW1zLnB1c2goa2V5KTtcbiAgICAgICAgICAgIGlmIChwcm9ibGVtcy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBNaXNzaW5nIHJlcXVpcmVkICR7cGx1cmFsKHByb2JsZW1zLmxlbmd0aCwgYHByb3BlcnR5YCwgYHByb3BlcnRpZXNgKX0gJHtnZXRQcmludGFibGVBcnJheShwcm9ibGVtcywgYGFuZGApfWApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4vKipcbiogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgY2hlY2tzIHRoYXQgdGhlIHRlc3RlZCBvYmplY3QgY29udGFpbnMgYXQgbGVhc3Qgb25lXG4qIG9mIHRoZSBzcGVjaWZpZWQga2V5cy5cbiovXG5mdW5jdGlvbiBoYXNBdExlYXN0T25lS2V5KHJlcXVpcmVkS2V5cywgb3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCByZXF1aXJlZFNldCA9IG5ldyBTZXQocmVxdWlyZWRLZXlzKTtcbiAgICBjb25zdCBjaGVjayA9IGNoZWNrc1soX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubWlzc2luZ0lmKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnbWlzc2luZyddO1xuICAgIHJldHVybiBtYWtlVmFsaWRhdG9yKHtcbiAgICAgICAgdGVzdDogKHZhbHVlLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0ga2V5cy5zb21lKGtleSA9PiBjaGVjayhyZXF1aXJlZFNldCwga2V5LCB2YWx1ZSkpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZClcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgTWlzc2luZyBhdCBsZWFzdCBvbmUgcHJvcGVydHkgZnJvbSAke2dldFByaW50YWJsZUFycmF5KEFycmF5LmZyb20ocmVxdWlyZWRTZXQpLCBgb3JgKX1gKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBjaGVja3MgdGhhdCB0aGUgdGVzdGVkIG9iamVjdCBjb250YWlucyBub25lIG9mIHRoZVxuICogc3BlY2lmaWVkIGtleXMuXG4qL1xuZnVuY3Rpb24gaGFzRm9yYmlkZGVuS2V5cyhmb3JiaWRkZW5LZXlzLCBvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGZvcmJpZGRlblNldCA9IG5ldyBTZXQoZm9yYmlkZGVuS2V5cyk7XG4gICAgY29uc3QgY2hlY2sgPSBjaGVja3NbKF9hID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm1pc3NpbmdJZikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ21pc3NpbmcnXTtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKHZhbHVlKSk7XG4gICAgICAgICAgICBjb25zdCBwcm9ibGVtcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgZm9yYmlkZGVuU2V0KVxuICAgICAgICAgICAgICAgIGlmIChjaGVjayhrZXlzLCBrZXksIHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgcHJvYmxlbXMucHVzaChrZXkpO1xuICAgICAgICAgICAgaWYgKHByb2JsZW1zLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYEZvcmJpZGRlbiAke3BsdXJhbChwcm9ibGVtcy5sZW5ndGgsIGBwcm9wZXJ0eWAsIGBwcm9wZXJ0aWVzYCl9ICR7Z2V0UHJpbnRhYmxlQXJyYXkocHJvYmxlbXMsIGBhbmRgKX1gKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBjaGVja3MgdGhhdCB0aGUgdGVzdGVkIG9iamVjdCBjb250YWlucyBhdCBtb3N0IG9uZVxuICogb2YgdGhlIHNwZWNpZmllZCBrZXlzLlxuICovXG5mdW5jdGlvbiBoYXNNdXR1YWxseUV4Y2x1c2l2ZUtleXMoZXhjbHVzaXZlS2V5cywgb3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBleGNsdXNpdmVTZXQgPSBuZXcgU2V0KGV4Y2x1c2l2ZUtleXMpO1xuICAgIGNvbnN0IGNoZWNrID0gY2hlY2tzWyhfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5taXNzaW5nSWYpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdtaXNzaW5nJ107XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyh2YWx1ZSkpO1xuICAgICAgICAgICAgY29uc3QgdXNlZCA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgZXhjbHVzaXZlU2V0KVxuICAgICAgICAgICAgICAgIGlmIChjaGVjayhrZXlzLCBrZXksIHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgdXNlZC5wdXNoKGtleSk7XG4gICAgICAgICAgICBpZiAodXNlZC5sZW5ndGggPiAxKVxuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBNdXR1YWxseSBleGNsdXNpdmUgcHJvcGVydGllcyAke2dldFByaW50YWJsZUFycmF5KHVzZWQsIGBhbmRgKX1gKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxudmFyIEtleVJlbGF0aW9uc2hpcDtcbihmdW5jdGlvbiAoS2V5UmVsYXRpb25zaGlwKSB7XG4gICAgS2V5UmVsYXRpb25zaGlwW1wiRm9yYmlkc1wiXSA9IFwiRm9yYmlkc1wiO1xuICAgIEtleVJlbGF0aW9uc2hpcFtcIlJlcXVpcmVzXCJdID0gXCJSZXF1aXJlc1wiO1xufSkoS2V5UmVsYXRpb25zaGlwIHx8IChLZXlSZWxhdGlvbnNoaXAgPSB7fSkpO1xuY29uc3Qga2V5UmVsYXRpb25zaGlwcyA9IHtcbiAgICBbS2V5UmVsYXRpb25zaGlwLkZvcmJpZHNdOiB7XG4gICAgICAgIGV4cGVjdDogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IGBmb3JiaWRzIHVzaW5nYCxcbiAgICB9LFxuICAgIFtLZXlSZWxhdGlvbnNoaXAuUmVxdWlyZXNdOiB7XG4gICAgICAgIGV4cGVjdDogdHJ1ZSxcbiAgICAgICAgbWVzc2FnZTogYHJlcXVpcmVzIHVzaW5nYCxcbiAgICB9LFxufTtcbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgY2hlY2tzIHRoYXQsIHdoZW4gdGhlIHNwZWNpZmllZCBzdWJqZWN0IHByb3BlcnR5IGlzXG4gKiBzZXQsIHRoZSByZWxhdGlvbnNoaXAgaXMgc2F0aXNmaWVkLlxuICovXG5mdW5jdGlvbiBoYXNLZXlSZWxhdGlvbnNoaXAoc3ViamVjdCwgcmVsYXRpb25zaGlwLCBvdGhlcnMsIG9wdGlvbnMpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHNraXBwZWQgPSBuZXcgU2V0KChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5pZ25vcmUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdKTtcbiAgICBjb25zdCBjaGVjayA9IGNoZWNrc1soX2IgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubWlzc2luZ0lmKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnbWlzc2luZyddO1xuICAgIGNvbnN0IG90aGVyU2V0ID0gbmV3IFNldChvdGhlcnMpO1xuICAgIGNvbnN0IHNwZWMgPSBrZXlSZWxhdGlvbnNoaXBzW3JlbGF0aW9uc2hpcF07XG4gICAgY29uc3QgY29uanVuY3Rpb24gPSByZWxhdGlvbnNoaXAgPT09IEtleVJlbGF0aW9uc2hpcC5Gb3JiaWRzXG4gICAgICAgID8gYG9yYFxuICAgICAgICA6IGBhbmRgO1xuICAgIHJldHVybiBtYWtlVmFsaWRhdG9yKHtcbiAgICAgICAgdGVzdDogKHZhbHVlLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXModmFsdWUpKTtcbiAgICAgICAgICAgIGlmICghY2hlY2soa2V5cywgc3ViamVjdCwgdmFsdWUpIHx8IHNraXBwZWQuaGFzKHZhbHVlW3N1YmplY3RdKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IHByb2JsZW1zID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBvdGhlclNldClcbiAgICAgICAgICAgICAgICBpZiAoKGNoZWNrKGtleXMsIGtleSwgdmFsdWUpICYmICFza2lwcGVkLmhhcyh2YWx1ZVtrZXldKSkgIT09IHNwZWMuZXhwZWN0KVxuICAgICAgICAgICAgICAgICAgICBwcm9ibGVtcy5wdXNoKGtleSk7XG4gICAgICAgICAgICBpZiAocHJvYmxlbXMubGVuZ3RoID49IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYFByb3BlcnR5IFwiJHtzdWJqZWN0fVwiICR7c3BlYy5tZXNzYWdlfSAke3BsdXJhbChwcm9ibGVtcy5sZW5ndGgsIGBwcm9wZXJ0eWAsIGBwcm9wZXJ0aWVzYCl9ICR7Z2V0UHJpbnRhYmxlQXJyYXkocHJvYmxlbXMsIGNvbmp1bmN0aW9uKX1gKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuXG5leHBvcnQgeyBLZXlSZWxhdGlvbnNoaXAsIFR5cGVBc3NlcnRpb25FcnJvciwgYXBwbHlDYXNjYWRlLCBhcywgYXNzZXJ0LCBhc3NlcnRXaXRoRXJyb3JzLCBjYXNjYWRlLCBmbiwgaGFzQXRMZWFzdE9uZUtleSwgaGFzRXhhY3RMZW5ndGgsIGhhc0ZvcmJpZGRlbktleXMsIGhhc0tleVJlbGF0aW9uc2hpcCwgaGFzTWF4TGVuZ3RoLCBoYXNNaW5MZW5ndGgsIGhhc011dHVhbGx5RXhjbHVzaXZlS2V5cywgaGFzUmVxdWlyZWRLZXlzLCBoYXNVbmlxdWVJdGVtcywgaXNBcnJheSwgaXNBdExlYXN0LCBpc0F0TW9zdCwgaXNCYXNlNjQsIGlzQm9vbGVhbiwgaXNEYXRlLCBpc0RpY3QsIGlzRW51bSwgaXNIZXhDb2xvciwgaXNJU084NjAxLCBpc0luRXhjbHVzaXZlUmFuZ2UsIGlzSW5JbmNsdXNpdmVSYW5nZSwgaXNJbnN0YW5jZU9mLCBpc0ludGVnZXIsIGlzSlNPTiwgaXNMaXRlcmFsLCBpc0xvd2VyQ2FzZSwgaXNNYXAsIGlzTmVnYXRpdmUsIGlzTnVsbGFibGUsIGlzTnVtYmVyLCBpc09iamVjdCwgaXNPbmVPZiwgaXNPcHRpb25hbCwgaXNQYXJ0aWFsLCBpc1BheWxvYWQsIGlzUG9zaXRpdmUsIGlzUmVjb3JkLCBpc1NldCwgaXNTdHJpbmcsIGlzVHVwbGUsIGlzVVVJRDQsIGlzVW5rbm93biwgaXNVcHBlckNhc2UsIG1ha2VUcmFpdCwgbWFrZVZhbGlkYXRvciwgbWF0Y2hlc1JlZ0V4cCwgc29mdEFzc2VydCB9O1xuIl0sIm5hbWVzIjpbImdsb2JhbCIsInRoaXMiLCJmYWlscyIsInJlcXVpcmUkJDAiLCJOQVRJVkVfQklORCIsImNhbGwiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IiLCJGdW5jdGlvblByb3RvdHlwZSIsInVuY3VycnlUaGlzIiwidG9TdHJpbmciLCJzdHJpbmdTbGljZSIsImNsYXNzb2ZSYXciLCJyZXF1aXJlJCQxIiwiY2xhc3NvZiIsInJlcXVpcmUkJDIiLCIkT2JqZWN0IiwiaXNOdWxsT3JVbmRlZmluZWQiLCIkVHlwZUVycm9yIiwicmVxdWlyZU9iamVjdENvZXJjaWJsZSIsInRvSW5kZXhlZE9iamVjdCIsImlzQ2FsbGFibGUiLCJpc09iamVjdCIsImdldEJ1aWx0SW4iLCJ1c2VyQWdlbnQiLCJwcm9jZXNzIiwibWF0Y2giLCJ2ZXJzaW9uIiwiJFN0cmluZyIsIk5BVElWRV9TWU1CT0wiLCJpc1Byb3RvdHlwZU9mIiwiVVNFX1NZTUJPTF9BU19VSUQiLCJyZXF1aXJlJCQzIiwiaXNTeW1ib2wiLCJ0cnlUb1N0cmluZyIsImFDYWxsYWJsZSIsImdldE1ldGhvZCIsIm9yZGluYXJ5VG9QcmltaXRpdmUiLCJkZWZpbmVQcm9wZXJ0eSIsImRlZmluZUdsb2JhbFByb3BlcnR5IiwiZ2xvYmFsVGhpcyIsInN0b3JlIiwic2hhcmVkU3RvcmVNb2R1bGUiLCJzaGFyZWQiLCJ0b09iamVjdCIsImhhc093blByb3BlcnR5IiwidWlkIiwiaGFzT3duIiwicmVxdWlyZSQkNCIsInJlcXVpcmUkJDUiLCJTeW1ib2wiLCJ3ZWxsS25vd25TeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsInRvUHJvcGVydHlLZXkiLCJkb2N1bWVudCIsIkVYSVNUUyIsImRvY3VtZW50Q3JlYXRlRWxlbWVudCIsIkRFU0NSSVBUT1JTIiwicmVxdWlyZSQkNiIsIklFOF9ET01fREVGSU5FIiwicmVxdWlyZSQkNyIsIiRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJhbk9iamVjdCIsIlY4X1BST1RPVFlQRV9ERUZJTkVfQlVHIiwiQ09ORklHVVJBQkxFIiwiZGVmaW5lUHJvcGVydHlNb2R1bGUiLCJjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkiLCJpbnNwZWN0U291cmNlIiwiV2Vha01hcCIsImtleXMiLCJzaGFyZWRLZXkiLCJoaWRkZW5LZXlzIiwiVHlwZUVycm9yIiwic2V0IiwiZ2V0IiwiZ2V0SW50ZXJuYWxTdGF0ZSIsInJlcGxhY2UiLCJtYWtlQnVpbHRJbiIsIm1ha2VCdWlsdEluTW9kdWxlIiwiZGVmaW5lQnVpbHRJbiIsImZsb29yIiwidG9JbnRlZ2VyT3JJbmZpbml0eSIsIm1heCIsIm1pbiIsInRvQWJzb2x1dGVJbmRleCIsInRvTGVuZ3RoIiwibGVuZ3RoT2ZBcnJheUxpa2UiLCJjcmVhdGVNZXRob2QiLCJpbmRleE9mIiwicHVzaCIsImVudW1CdWdLZXlzIiwiaW50ZXJuYWxPYmplY3RLZXlzIiwiY29uY2F0Iiwib3duS2V5cyIsImNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMiLCJpc0ZvcmNlZCIsIlRPX1NUUklOR19UQUciLCJyZWdleHBGbGFncyIsIiRSZWdFeHAiLCJVTlNVUFBPUlRFRF9ZIiwib2JqZWN0S2V5cyIsImh0bWwiLCJyZXF1aXJlJCQ4IiwicmVxdWlyZSQkOSIsImNoYXJBdCIsInJlZ2V4cEV4ZWMiLCIkIiwiZXhlYyIsImFwcGx5IiwiUmVnRXhwUHJvdG90eXBlIiwiYWR2YW5jZVN0cmluZ0luZGV4IiwiZ2V0U3Vic3RpdHV0aW9uIiwicmVxdWlyZSQkMTAiLCJyZXF1aXJlJCQxMSIsInJlcXVpcmUkJDEyIiwicmVxdWlyZSQkMTMiLCJyZXF1aXJlJCQxNCIsInJlcXVpcmUkJDE1IiwicmVxdWlyZSQkMTYiLCJSRVBMQUNFIiwiZW50cnlVbmJpbmQiLCJmb3JtYXRFcnJvciIsImRlYnVnIiwidHR5IiwiSGVscENvbW1hbmQiLCJBcnJheSIsIkJvb2xlYW4iLCJTdHJpbmciLCJfX2F3YWl0ZXIiLCJlbnYiLCJpc1dpbmRvd3MiLCJjb2xvcnMiLCJ1dGlscyIsInBhdGhfMSIsImpvaW5QYXRoXzEiLCJqb2luUGF0aCIsImJ1aWxkIiwicHVzaERpcmVjdG9yeV8xIiwicHVzaERpcmVjdG9yeSIsImVtcHR5IiwicHVzaEZpbGVfMSIsInB1c2hGaWxlIiwiZ2V0QXJyYXlfMSIsImdldEFycmF5IiwiZ3JvdXBGaWxlc18xIiwiZ3JvdXBGaWxlcyIsIl9faW1wb3J0RGVmYXVsdCIsInJlc29sdmVTeW1saW5rIiwiZnNfMSIsImludm9rZUNhbGxiYWNrIiwid2Fsa0RpcmVjdG9yeSIsInF1ZXVlIiwiYXN5bmMiLCJ3YWxrZXJfMSIsInN5bmNfMSIsImFzeW5jXzEiLCJ0eXBlcyIsImV4ZWNTeW5jIiwiam9pbiIsIm9zIiwiY29tbW9uIiwic3JjTW9kdWxlIiwicHJvbWlzaWZ5IiwicmVhZEZpbGUiLCJ3cml0ZUZpbGUiLCJ1bmxpbmsiLCJjb3B5RmlsZSIsIm1rZGlyIiwic3RhdCIsIk9wdGlvbi5TdHJpbmciLCJwYXJzZSIsImZkaXIiLCJjaGFsay55ZWxsb3dCcmlnaHQiLCJjaGFsay5ncmVlbkJyaWdodCIsInBhdGgiLCJvYmplY3RQcm90byIsIm5hdGl2ZU9iamVjdFRvU3RyaW5nIiwic3ltVG9TdHJpbmdUYWciLCJzeW1ib2xUYWciLCJpc0FycmF5IiwiSU5GSU5JVFkiLCJzeW1ib2xQcm90byIsImlkZW50aXR5IiwiZnVuY1RhZyIsImlzRnVuY3Rpb24iLCJmdW5jUHJvdG8iLCJmdW5jVG9TdHJpbmciLCJNQVhfU0FGRV9JTlRFR0VSIiwiaXNBcnJheUxpa2UiLCJhcmdzVGFnIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJmcmVlRXhwb3J0cyIsImZyZWVNb2R1bGUiLCJtb2R1bGVFeHBvcnRzIiwiQnVmZmVyIiwiYXJyYXlUYWciLCJib29sVGFnIiwiZGF0ZVRhZyIsImVycm9yVGFnIiwibWFwVGFnIiwibnVtYmVyVGFnIiwib2JqZWN0VGFnIiwicmVnZXhwVGFnIiwic2V0VGFnIiwic3RyaW5nVGFnIiwid2Vha01hcFRhZyIsImFycmF5QnVmZmVyVGFnIiwiZGF0YVZpZXdUYWciLCJIQVNIX1VOREVGSU5FRCIsIk1hcCIsImdldFN5bWJvbHMiLCJQcm9taXNlIiwiU2V0IiwiRGF0YVZpZXciLCJVaW50OEFycmF5IiwiQ09NUEFSRV9QQVJUSUFMX0ZMQUciLCJDT01QQVJFX1VOT1JERVJFRF9GTEFHIiwiZ2V0VGFnIiwiYmFzZUZvciIsImdyb3VwQnkiLCJfYSIsIk9wdGlvbi5Cb29sZWFuIiwiY2hhbGsuZ3JlZW4iLCJjaGFsay51bmRlcmxpbmUiLCJjaGFsay55ZWxsb3ciLCJjaGFsay5ibHVlIiwiY2hhbGsuY3lhbiIsIm1rZGlyU3luYyIsImNyZWF0ZUhhc2giLCJ0bXBkaXIiLCJleGlzdHNTeW5jIiwiY2hhbGsuYmdZZWxsb3dCcmlnaHQiLCJzZXAiLCJpc1VuaWNvZGVTdXBwb3J0ZWQiLCJpc1Byb21pc2UiLCJydW5Bc3luY01vZHVsZSIsImlzRnVuY3Rpb25fMSIsImNyZWF0ZUVycm9yQ2xhc3NfMSIsImFyclJlbW92ZV8xIiwiX192YWx1ZXMiLCJfX3JlYWQiLCJfX3NwcmVhZEFycmF5IiwiU3Vic2NyaXB0aW9uXzEiLCJyZXBvcnRVbmhhbmRsZWRFcnJvcl8xIiwiY29uZmlnXzEiLCJub29wXzEiLCJub29wIiwiZXJyb3JDb250ZXh0XzEiLCJpZGVudGl0eV8xIiwicGlwZV8xIiwicGlwZSIsIk9ic2VydmFibGVfMSIsIlN1YnNjcmliZXJfMSIsIm9ic2VydmFibGVfMSIsIl9fZXh0ZW5kcyIsIk9wZXJhdG9yU3Vic2NyaWJlcl8xIiwicmVmQ291bnRfMSIsImxpZnRfMSIsIkNvbm5lY3RhYmxlT2JzZXJ2YWJsZV8xIiwiYW5pbWF0aW9uRnJhbWVzXzEiLCJhbmltYXRpb25GcmFtZVByb3ZpZGVyXzEiLCJTdWJqZWN0XzEiLCJCZWhhdmlvclN1YmplY3RfMSIsIlJlcGxheVN1YmplY3RfMSIsImRhdGVUaW1lc3RhbXBQcm92aWRlcl8xIiwiQXN5bmNTdWJqZWN0XzEiLCJBY3Rpb25fMSIsIkFzeW5jQWN0aW9uXzEiLCJBc2FwQWN0aW9uXzEiLCJTY2hlZHVsZXJfMSIsIkFzeW5jU2NoZWR1bGVyXzEiLCJBc2FwU2NoZWR1bGVyXzEiLCJRdWV1ZUFjdGlvbl8xIiwiUXVldWVTY2hlZHVsZXJfMSIsIkFuaW1hdGlvbkZyYW1lQWN0aW9uXzEiLCJBbmltYXRpb25GcmFtZVNjaGVkdWxlcl8xIiwiVmlydHVhbFRpbWVTY2hlZHVsZXJfMSIsImlzU2NoZWR1bGVyXzEiLCJsYXN0IiwiaXNQcm9taXNlXzEiLCJpc0ludGVyb3BPYnNlcnZhYmxlXzEiLCJpc0FzeW5jSXRlcmFibGVfMSIsIml0ZXJhdG9yIiwiaXNJdGVyYWJsZV8xIiwiaXRlcmF0b3JfMSIsIl9fZ2VuZXJhdG9yIiwiaXNSZWFkYWJsZVN0cmVhbUxpa2VfMSIsImlubmVyRnJvbV8xIiwiaXNBcnJheUxpa2VfMSIsInRocm93VW5vYnNlcnZhYmxlRXJyb3JfMSIsImV4ZWN1dGVTY2hlZHVsZV8xIiwib2JzZXJ2ZU9uXzEiLCJzdWJzY3JpYmVPbl8xIiwic2NoZWR1bGVPYnNlcnZhYmxlXzEiLCJzY2hlZHVsZVByb21pc2VfMSIsInNjaGVkdWxlQXJyYXlfMSIsInNjaGVkdWxlSXRlcmFibGVfMSIsInNjaGVkdWxlQXN5bmNJdGVyYWJsZV8xIiwic2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2VfMSIsInNjaGVkdWxlZF8xIiwiZnJvbV8xIiwib2ZfMSIsImFyZ3NfMSIsInRocm93RXJyb3JfMSIsInRocm93RXJyb3IiLCJpc09ic2VydmFibGVfMSIsImxhc3RWYWx1ZUZyb21fMSIsIkVtcHR5RXJyb3JfMSIsImZpcnN0VmFsdWVGcm9tXzEiLCJtYXBfMSIsIm1hcCIsIm1hcE9uZU9yTWFueUFyZ3NfMSIsImJpbmRDYWxsYmFja0ludGVybmFsc18xIiwiYmluZENhbGxiYWNrXzEiLCJiaW5kTm9kZUNhbGxiYWNrXzEiLCJhcmdzQXJnQXJyYXlPck9iamVjdF8xIiwiY3JlYXRlT2JqZWN0XzEiLCJjb21iaW5lTGF0ZXN0XzEiLCJjb21iaW5lTGF0ZXN0IiwibWVyZ2VJbnRlcm5hbHNfMSIsIm1lcmdlTWFwXzEiLCJtZXJnZUFsbF8xIiwiY29uY2F0QWxsXzEiLCJjb25jYXRfMSIsImRlZmVyXzEiLCJjb25uZWN0YWJsZV8xIiwiREVGQVVMVF9DT05GSUciLCJmb3JrSm9pbl8xIiwiZnJvbUV2ZW50XzEiLCJmcm9tRXZlbnRQYXR0ZXJuXzEiLCJnZW5lcmF0ZV8xIiwiaWlmXzEiLCJ0aW1lcl8xIiwiaXNEYXRlXzEiLCJpbnRlcnZhbF8xIiwibWVyZ2VfMSIsImVtcHR5XzEiLCJtZXJnZSIsImFyZ3NPckFyZ0FycmF5XzEiLCJvbkVycm9yUmVzdW1lTmV4dF8xIiwicGFpcnNfMSIsInBhaXJzIiwibm90XzEiLCJmaWx0ZXJfMSIsInBhcnRpdGlvbl8xIiwicmFjZV8xIiwicmFuZ2VfMSIsInVzaW5nXzEiLCJ6aXBfMSIsInppcCIsImF1ZGl0XzEiLCJhdWRpdFRpbWVfMSIsImJ1ZmZlcl8xIiwiYnVmZmVyIiwiYnVmZmVyQ291bnRfMSIsImJ1ZmZlclRpbWVfMSIsImJ1ZmZlclRvZ2dsZV8xIiwiYnVmZmVyV2hlbl8xIiwiY2F0Y2hFcnJvcl8xIiwic2NhbkludGVybmFsc18xIiwicmVkdWNlXzEiLCJ0b0FycmF5XzEiLCJ0b0FycmF5Iiwiam9pbkFsbEludGVybmFsc18xIiwiY29tYmluZUxhdGVzdEFsbF8xIiwiY29tYmluZUxhdGVzdF8yIiwiY29tYmluZUxhdGVzdFdpdGhfMSIsImNvbmNhdE1hcF8xIiwiY29uY2F0TWFwVG9fMSIsImNvbmNhdFdpdGhfMSIsImZyb21TdWJzY3JpYmFibGVfMSIsImNvbm5lY3RfMSIsImNvdW50XzEiLCJkZWJvdW5jZV8xIiwiZGVib3VuY2VUaW1lXzEiLCJkZWZhdWx0SWZFbXB0eV8xIiwidGFrZV8xIiwiaWdub3JlRWxlbWVudHNfMSIsIm1hcFRvXzEiLCJkZWxheVdoZW5fMSIsImRlbGF5XzEiLCJkZW1hdGVyaWFsaXplXzEiLCJOb3RpZmljYXRpb25fMSIsImRpc3RpbmN0XzEiLCJkaXN0aW5jdFVudGlsQ2hhbmdlZF8xIiwiZGlzdGluY3RVbnRpbEtleUNoYW5nZWRfMSIsInRocm93SWZFbXB0eV8xIiwiZWxlbWVudEF0XzEiLCJlbmRXaXRoXzEiLCJldmVyeV8xIiwiZXhoYXVzdE1hcF8xIiwiZXhoYXVzdEFsbF8xIiwiZXhwYW5kXzEiLCJleHBhbmQiLCJmaW5hbGl6ZV8xIiwiZmluZF8xIiwiZmluZEluZGV4XzEiLCJmaXJzdF8xIiwiZ3JvdXBCeV8xIiwiaXNFbXB0eV8xIiwidGFrZUxhc3RfMSIsImxhc3RfMSIsIm1hdGVyaWFsaXplXzEiLCJtYXhfMSIsIm1lcmdlTWFwVG9fMSIsIm1lcmdlU2Nhbl8xIiwibWVyZ2VXaXRoXzEiLCJtaW5fMSIsIm11bHRpY2FzdF8xIiwib25FcnJvclJlc3VtZU5leHRXaXRoXzEiLCJwYWlyd2lzZV8xIiwicGx1Y2tfMSIsInB1Ymxpc2hfMSIsInB1Ymxpc2hCZWhhdmlvcl8xIiwicHVibGlzaExhc3RfMSIsInB1Ymxpc2hSZXBsYXlfMSIsInJhY2VXaXRoXzEiLCJyZXBlYXRfMSIsInJlcGVhdCIsInJlcGVhdFdoZW5fMSIsInJldHJ5XzEiLCJyZXRyeVdoZW5fMSIsInNhbXBsZV8xIiwic2FtcGxlIiwic2FtcGxlVGltZV8xIiwic2Nhbl8xIiwic2VxdWVuY2VFcXVhbF8xIiwic2hhcmVfMSIsInNoYXJlUmVwbGF5XzEiLCJzaW5nbGVfMSIsInNraXBfMSIsInNraXBMYXN0XzEiLCJza2lwVW50aWxfMSIsInNraXBXaGlsZV8xIiwic3RhcnRXaXRoXzEiLCJzd2l0Y2hNYXBfMSIsInN3aXRjaEFsbF8xIiwic3dpdGNoTWFwVG9fMSIsInN3aXRjaFNjYW5fMSIsInRha2VVbnRpbF8xIiwidGFrZVdoaWxlXzEiLCJ0YXBfMSIsInRocm90dGxlXzEiLCJ0aHJvdHRsZVRpbWVfMSIsInRpbWVJbnRlcnZhbF8xIiwidGltZW91dFdpdGhfMSIsInRpbWVzdGFtcF8xIiwidGltZXN0YW1wIiwid2luZG93XzEiLCJ3aW5kb3ciLCJ3aW5kb3dDb3VudF8xIiwid2luZG93VGltZV8xIiwid2luZG93VG9nZ2xlXzEiLCJ3aW5kb3dXaGVuXzEiLCJ3aXRoTGF0ZXN0RnJvbV8xIiwiemlwQWxsXzEiLCJ6aXBfMiIsInppcFdpdGhfMSIsInJlcXVpcmUkJDE3IiwicmVxdWlyZSQkMTgiLCJyZXF1aXJlJCQxOSIsInJlcXVpcmUkJDIwIiwicmVxdWlyZSQkMjEiLCJyZXF1aXJlJCQyMiIsInJlcXVpcmUkJDIzIiwicmVxdWlyZSQkMjQiLCJyZXF1aXJlJCQyNSIsInJlcXVpcmUkJDI2IiwicmVxdWlyZSQkMjciLCJyZXF1aXJlJCQyOCIsInJlcXVpcmUkJDI5IiwicmVxdWlyZSQkMzAiLCJyZXF1aXJlJCQzMSIsInJlcXVpcmUkJDMyIiwicmVxdWlyZSQkMzMiLCJyZXF1aXJlJCQzNCIsInJlcXVpcmUkJDM1IiwicmVxdWlyZSQkMzYiLCJyZXF1aXJlJCQzNyIsInJlcXVpcmUkJDM4IiwicmVxdWlyZSQkMzkiLCJyZXF1aXJlJCQ0MCIsInJlcXVpcmUkJDQxIiwicmVxdWlyZSQkNDIiLCJyZXF1aXJlJCQ0MyIsInJlcXVpcmUkJDQ0IiwicmVxdWlyZSQkNDUiLCJyZXF1aXJlJCQ0NiIsInJlcXVpcmUkJDQ3IiwicmVxdWlyZSQkNDgiLCJyZXF1aXJlJCQ0OSIsInJlcXVpcmUkJDUwIiwicmVxdWlyZSQkNTEiLCJyZXF1aXJlJCQ1MiIsInJlcXVpcmUkJDUzIiwicmVxdWlyZSQkNTQiLCJyZXF1aXJlJCQ1NSIsInJlcXVpcmUkJDU2IiwicmVxdWlyZSQkNTciLCJyZXF1aXJlJCQ1OCIsInJlcXVpcmUkJDU5IiwicmVxdWlyZSQkNjAiLCJyZXF1aXJlJCQ2MSIsInJlcXVpcmUkJDYyIiwicmVxdWlyZSQkNjMiLCJyZXF1aXJlJCQ2NCIsInJlcXVpcmUkJDY1IiwicmVxdWlyZSQkNjYiLCJyZXF1aXJlJCQ2NyIsInJlcXVpcmUkJDY4IiwicmVxdWlyZSQkNjkiLCJyZXF1aXJlJCQ3MCIsInJlcXVpcmUkJDcxIiwicmVxdWlyZSQkNzIiLCJyZXF1aXJlJCQ3MyIsInJlcXVpcmUkJDc0IiwicmVxdWlyZSQkNzUiLCJyZXF1aXJlJCQ3NiIsInJlcXVpcmUkJDc3IiwicmVxdWlyZSQkNzgiLCJyZXF1aXJlJCQ3OSIsInJlcXVpcmUkJDgwIiwicmVxdWlyZSQkODEiLCJyZXF1aXJlJCQ4MiIsInJlcXVpcmUkJDgzIiwicmVxdWlyZSQkODQiLCJyZXF1aXJlJCQ4NSIsInJlcXVpcmUkJDg2IiwicmVxdWlyZSQkODciLCJyZXF1aXJlJCQ4OCIsInJlcXVpcmUkJDg5IiwicmVxdWlyZSQkOTAiLCJyZXF1aXJlJCQ5MSIsInJlcXVpcmUkJDkyIiwicmVxdWlyZSQkOTMiLCJyZXF1aXJlJCQ5NCIsInJlcXVpcmUkJDk1IiwicmVxdWlyZSQkOTYiLCJyZXF1aXJlJCQ5NyIsInJlcXVpcmUkJDk4IiwicmVxdWlyZSQkOTkiLCJyZXF1aXJlJCQxMDAiLCJyZXF1aXJlJCQxMDEiLCJyZXF1aXJlJCQxMDIiLCJyZXF1aXJlJCQxMDMiLCJyZXF1aXJlJCQxMDQiLCJyZXF1aXJlJCQxMDUiLCJyZXF1aXJlJCQxMDYiLCJyZXF1aXJlJCQxMDciLCJyZXF1aXJlJCQxMDgiLCJyZXF1aXJlJCQxMDkiLCJyZXF1aXJlJCQxMTAiLCJyZXF1aXJlJCQxMTEiLCJyZXF1aXJlJCQxMTIiLCJyZXF1aXJlJCQxMTMiLCJyZXF1aXJlJCQxMTQiLCJyZXF1aXJlJCQxMTUiLCJyZXF1aXJlJCQxMTYiLCJyZXF1aXJlJCQxMTciLCJyZXF1aXJlJCQxMTgiLCJyZXF1aXJlJCQxMTkiLCJyZXF1aXJlJCQxMjAiLCJyZXF1aXJlJCQxMjEiLCJyZXF1aXJlJCQxMjIiLCJyZXF1aXJlJCQxMjMiLCJyZXF1aXJlJCQxMjQiLCJyZXF1aXJlJCQxMjUiLCJyZXF1aXJlJCQxMjYiLCJyZXF1aXJlJCQxMjciLCJyZXF1aXJlJCQxMjgiLCJyZXF1aXJlJCQxMjkiLCJyZXF1aXJlJCQxMzAiLCJyZXF1aXJlJCQxMzEiLCJyZXF1aXJlJCQxMzIiLCJyZXF1aXJlJCQxMzMiLCJyZXF1aXJlJCQxMzQiLCJyZXF1aXJlJCQxMzUiLCJyZXF1aXJlJCQxMzYiLCJyZXF1aXJlJCQxMzciLCJyZXF1aXJlJCQxMzgiLCJyZXF1aXJlJCQxMzkiLCJyZXF1aXJlJCQxNDAiLCJyZXF1aXJlJCQxNDEiLCJyZXF1aXJlJCQxNDIiLCJyZXF1aXJlJCQxNDMiLCJyZXF1aXJlJCQxNDQiLCJyZXF1aXJlJCQxNDUiLCJyZXF1aXJlJCQxNDYiLCJyZXF1aXJlJCQxNDciLCJyZXF1aXJlJCQxNDgiLCJyZXF1aXJlJCQxNDkiLCJyZXF1aXJlJCQxNTAiLCJyZXF1aXJlJCQxNTEiLCJyZXF1aXJlJCQxNTIiLCJyZXF1aXJlJCQxNTMiLCJyZXF1aXJlJCQxNTQiLCJyZXF1aXJlJCQxNTUiLCJyZXF1aXJlJCQxNTYiLCJyZXF1aXJlJCQxNTciLCJyZXF1aXJlJCQxNTgiLCJyZXF1aXJlJCQxNTkiLCJyZXF1aXJlJCQxNjAiLCJyZXF1aXJlJCQxNjEiLCJyZXF1aXJlJCQxNjIiLCJyZXF1aXJlJCQxNjMiLCJyZXF1aXJlJCQxNjQiLCJmcm9tRXZlbnQiLCJ0YWtlVW50aWwiLCJmaWx0ZXIiLCJzaGFyZSIsImFzc2VydCIsImFuc2lSZWdleCIsInN0cmlwQW5zaSIsImlzRnVsbHdpZHRoQ29kZVBvaW50IiwiaXNGdWxsd2lkdGhDb2RlUG9pbnRNb2R1bGUiLCJlbW9qaVJlZ2V4Iiwic3RyaW5nV2lkdGgiLCJzdHJpbmdXaWR0aE1vZHVsZSIsImFuc2lTdHlsZXMiLCJzdHJpbmdSZXBsYWNlQWxsIiwic3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4IiwidXRpbCIsImNoYWxrIiwibWltaWNGbiIsIm1pbWljRm5Nb2R1bGUiLCJvbmV0aW1lIiwib25ldGltZU1vZHVsZSIsInNpZ25hbEV4aXRNb2R1bGUiLCJsb2FkIiwicmVzdG9yZUN1cnNvciIsImNsaVNwaW5uZXJzIiwibWFpbiIsImxvZ1N5bWJvbHMiLCJkZWZhdWx0cyIsImNvbWJpbmluZyIsIkRFRkFVTFRTIiwid2N3aWR0aE1vZHVsZSIsIndjd2lkdGgiLCJpc0ludGVyYWN0aXZlIiwiaW5oZXJpdHNfYnJvd3Nlck1vZHVsZSIsImluaGVyaXRzTW9kdWxlIiwiQnVmZmVyTGlzdCIsIkJ1ZmZlckxpc3RTdHJlYW0iLCJibE1vZHVsZSIsIm9yYU1vZHVsZSIsInV0aWwudXAiLCJ1dGlsLmxlZnQiLCJ1dGlsLnJpZ2h0IiwidXRpbC5kb3duIiwidXRpbC5jbGVhckxpbmUiLCJjbGlXaWR0aCIsIndyYXBBbnNpIiwicnVuQXN5bmMiLCJtZXJnZU1hcCIsInRha2UiLCJCYXNlIiwiZmxhdE1hcCIsIklucHV0IiwicmVuZGVyQ2hvaWNlcyIsInV0ZjgiLCJmcyIsInNlbGYiLCJib21IYW5kbGluZyIsIkNyZWF0ZUZpbGVFcnJvcl8xIiwiTGF1bmNoRWRpdG9yRXJyb3JfMSIsIlJlYWRGaWxlRXJyb3JfMSIsIlJlbW92ZUZpbGVFcnJvcl8xIiwiU3ViamVjdCIsImVkaXRBc3luYyIsInJlYWRsaW5lIiwiTXV0ZVN0cmVhbSIsIldyaXRhYmxlIiwicmxVdGlscy5jbGVhckxpbmUiLCJybFV0aWxzLmxlZnQiLCJvZiIsImZyb20iLCJpc09ic2VydmFibGUiLCJjb25jYXRNYXAiLCJwdWJsaXNoIiwicmVkdWNlIiwiZGVmZXIiLCJ1dGlscy5mZXRjaEFzeW5jUXVlc3Rpb25Qcm9wZXJ0eSIsIkVNUFRZIiwiUHJvbXB0IiwiTGlzdCIsIk51bWJlciIsIkNvbmZpcm0iLCJSYXdMaXN0IiwiRXhwYW5kIiwiQ2hlY2tib3giLCJQYXNzd29yZCIsIkVkaXRvciIsIl9zcGF3biIsIk9wdGlvbi5BcnJheSIsIndyaXRlRmlsZVN5bmMiLCJWRVJTSU9OIiwiaXNQbGFpbk9iamVjdCIsIndpdGhEZWZhdWx0cyIsIkVORFBPSU5UUyIsIkNvcmUiLCJzdGF0U3luYyIsImNoYWxrLmJsdWVCcmlnaHQiLCJjaGFsay5kaW0iLCJzcGF3blN5bmMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsSUFBSSxLQUFLLEdBQUcsVUFBVSxFQUFFLEVBQUU7QUFDMUIsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7QUFDdEMsQ0FBQyxDQUFDO0FBQ0Y7QUFDQTtJQUNBQSxRQUFjO0FBQ2Q7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TyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDaEQsVUFBVSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUNELFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUNsRDtBQUNBO0FBQ0EsSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDakMsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3pDLFFBQVEsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3BELEtBQUs7QUFDTCxTQUFTO0FBQ1QsUUFBUSxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDL0MsS0FBSztBQUNMLENBQUM7QUFDRCxTQUFTLE9BQU8sQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFO0FBQ2xDLElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDdEMsVUFBVSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFVBQVUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQztBQUN6QyxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLElBQUksTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDeEMsVUFBVSxRQUFRLENBQUMsS0FB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QUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sS0FBSyxZQUFZLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsVUFBVSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUM5RyxFQUFFLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLFVBQVUsT0FBTyxFQUFFLE1BQU0sRUFBRTtBQUM3RCxNQUFNLFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDakcsTUFBTSxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDcEcsTUFBTSxTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7QUFDcEgsTUFBTSxJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDNUUsR0FBRyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBbU1EO0FBQ3VCLE9BQU8sZUFBZSxLQUFLLFVBQVUsR0FB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QUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNyQixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN0QixFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNwQixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN2QixFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNwQixFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNyQixFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNwQixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN2QixFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNyQixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN2QixFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN4QixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN0QixFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN6QixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN0QixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN2QixFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMzQixFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN6QixFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMzQixFQUFF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QUUsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDcEcsU0FBUyxDQUFDO0FBQ1YsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDM0QsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUQsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDaEQsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDaEQsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNoRixRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDckUsS0FBSztBQUNMLElBQUksS0FBSyxHQUFHO0FBQ1osUUFBUSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFGLFFB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QUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ25GLFNBQVEsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUM1QztBQUNBLFNBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7QUFDL0IsU0FBUSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUMxRSxTQUFRLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0FBQzVCLFNBQVEsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDdEIsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDbkQsU0FBUSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkIsU0FBUSxTQUFTO1FBQ1Y7QUFDUDtPQUNNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDbEYsU0FBUSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNuRDtTQUNRLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkYsU0FBUSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMs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R0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNoRixHQUFFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDMUMsRUFBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQSxTQUFTLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLEtBQUssU0FBUyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFBLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxLQUFLO0dBQ3RDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDbkYsR0FBRSxPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUMxRCxFQUFDLENBQUM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUEsU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFP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LEtBQUcsRUFBRTtBQUNMLEtBQUcsRUFBRTtBQUNMLEtBQUcsRUFBRTtBQUNMLEtBQUcsRUFBRTtBQUNMLEtBQUcsRUFBRTtBQUNMLEtBQUcsRUFBRTtBQUNMLEtBQUcsRUFBRTtBQUNMLEtBQUcsRUFBRTtBQUNMLEtBQUcsRUFBRTtBQUNMLEtBQUcsRUFBRTtBQUNMLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsQ0FBQztJQUNGO0dBQ0QsQ0FBQyxPQUFPLEtBQUssRUFBRTtBQUNoQjtHQUNDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsQ0FBQztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQSxTQUFTLFNBQVMsR0FBRztBQUNyQjtBQUNBO0FBQ0E7R0FDQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxNQUFNLENBQUMs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QUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRTtBQUMzQixFQUFFLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRO0FBQzFCLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEM7QUFDQSxFQUFFLE9BQU8sS0FBSyxHQUFHLENBQUMsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hEOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRTtBQUMzQixFQUFFLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0M7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLFlBQVksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFO0FBQ2xDLEVBQUUsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVE7QUFDMUIsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0QztBQUNBLEVBQUUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2hCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzVCLEdBQUcsTUFBTTtBQUNULElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMzQixHQUFHO0FBQ0gsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsU0FBUyxDQUFD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LE9BQU8sVUFBVSxJQUFJLEtBQUssSUFBSSxVQUFVLElBQUksS0FBSyxDQUFDO0FBQ3RELEdBQUc7QUFDSCxFQUFFLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNoQixNQUFNLE1BQU0sR0FBRyxJQUFJO0FBQ25CLE1BQU0sSUFBSSxHQUFHLENBQUMsT0FBTyxHQUFHQyx3QkFBc0IsSUFBSSxJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUM7QUFDM0U7QUFDQSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFCLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUI7QUFDQTtBQUNBLEVBQUUsT0FBTyxFQUFFLEtBQUssR0FBRyxTQUFTLEVBQUU7QUFDOUIsSUFBSSxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQy9CLFFBQVEsUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxVQUFVLEVBQUU7QUFDcEIsTUFBTSxJQUFJLFFBQVEsR0FBRyxTQUFTO0FBQzlCLFVBQVUsVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO0FBQ3BFLFVBQVUsVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDckUsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQ2hDLE1BQU0sSUFBSSxRQUFRLEVBQUU7QUFDcEIsUUFBUSxTQUFTO0FBQ2pCLE9BQU87QUFDUCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDckIsTUFBTSxNQUFNO0FBQ1osS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksRUFBRTtBQUNkLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFL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LENBQUM7QUFDaEM7QUFDQSxNQUFNLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbEMsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNyQyxNQUFNLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkMsTUFBTSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNuQyxNQUFNLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDcEM7QUFDQSxNQUFNLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDckMsTUFBTSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN4QyxNQUFNLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdEMsTUFBTSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN0QyxNQUFNLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdkM7QUFDQSxJQUFBLGNBQWMsR0FBRyxNQUFN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QUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0RSxJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUUsRUFBRTtBQUN0QixRQUFRLElBQUksQ0FBQyxFQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUN0RSxRQUFRLE9BQU8sQ0FBQyxFQUFFLElBQUk7QUFDdEIsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6SyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQsWUFBWSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekIsZ0JBQWdCLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU07QUFDOUMsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUN4RSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztBQUNqRSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsU0FBUztBQUNqRSxnQkFBZ0I7QUFDaEIsb0JBQW9CLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUU7QUFDaEksb0JBQW9CLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDMUcsb0JBQW9CLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFH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QUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM5SSxJQUFJLFNBQVMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ3RGLElBQUksU0FBUyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssWUFBWSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzVILElBQUksU0FBUyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ3RELElBQUksU0FBUyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ3RELElBQUksU0FBUyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtB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LENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3hFLGdCQUFnQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO0FBQ2pFLGdCQUFnQixLQUFLLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxTQUFTO0FBQ2pFLGdCQUFnQjtBQUNoQixvQkFBb0IsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRTtBQUNoSSxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUMxRyxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxD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LENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JILElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sTUFBTSxLQUFLLFVBQVUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFdBQVcsRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0osSUFBSSxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLFVBQVUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0RSxJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUUsRUFBRTtBQUN0QixRQUFRLElBQUksQ0FBQyxFQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUN0RSxRQUFRLE9BQU8sQ0FBQyxFQUFFLElBQUk7QUFDdEIsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxF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LFdBQVcsRUFBRTtBQUNyQixJQUFJLElBQUksUUFBUSxDQUFDO0FBQ2pCLElBQUksSUFBSSxPQUFPLFdBQVcsS0FBSyxVQUFVLEVBQUU7QUFDM0MsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDO0FBQzdCLEtBQUssTUFBTTtBQUNYLE1BQU0sTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUM7QUFDbkQsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzdDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLEtBQUssQ0FBQyxZQUFZLEVBQUU7QUFDdEIsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRSxPQUFPLENBQUMsR0FBRyxJQUFJLEVBQUU7QUFDbkIsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDekMsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLENBQUMsR0FBRyxJQUFJLEVBQUU7QUFDbkIsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDekMsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsR0FBRyxJQUFJLEVBQUU7QUFDbEIsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDeEMsR0FBRztBQUNI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akMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7RUFDbkIsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7RUFDNUIsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDdEIsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDNUIsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDM0IsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDM0IsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDM0IsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDdkIsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUNqQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUMzQixTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztFQUN4QixNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUNyQixVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQztFQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUN6QixlQUFlLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUMvQixVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUMzQixXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztFQUN4QixVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUMzQixXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUM1QixhQUFhLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQztFQUM1QixnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQy9CLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0VBQzNCLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0VBQzVCLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3RCLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQzdCLGNBQWMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQy9CLGVBQWUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0VBQzlCLGVBQWUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQzdCLGVBQWUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQzdCLGVBQWUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQzlCLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0VBQzNCLFVBQVUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0VBQzFCLGFBQWEsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQzVCLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQzFCLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQzFCLFlBQVksRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQzVCLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQzFCLGFBQWEsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQzlCLGFBQWEsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQzVCLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0VBQ3hCLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQzVCLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQzdCLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0VBQ3JCLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQzNCLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQ3ZCLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0VBQ3BCLGFBQWEsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQzdCLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQ3ZCLFVBQVUsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQzNCLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQzFCLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQzFCLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0VBQ3RCLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxD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QUFHLENBQUM7RUFDN0IsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDNUIsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDNUIsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDM0IsYUFBYSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDOUIsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7RUFDbkIsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDMUIsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDdEIsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDM0IsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDdkIsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDekIsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDekIsZUFBZSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDaEMsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDNUIsZUFBZSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDaEMsZUFBZSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDaEMsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDN0IsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDNUIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDdEIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDdkIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDdkIsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDN0IsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7RUFDdkIsZUFBZSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7RUFDL0IsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDbEIsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDNUIsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDM0IsYUFBYSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDNUIsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDekIsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDNUIsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDekIsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDM0IsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDdkIsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDekIsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDMUIsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7RUFDM0IsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDNUIsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDNUIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDdkIsYUFBYSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDNUIsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDM0IsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDdEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDckIsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDMUIsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDdkIsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDM0IsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDekIsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDeEIsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDeEIsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDN0IsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDdkIsYUFBYSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDN0IsQ0FBQTs7Ozs7Ozs7Ozs7O0FDdEpEO0NBQ0EsTUFBTSxXQUFXLEdBQUdybUIsZ0JBQUEsRUFBcUIsQ0FBQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0NBQ0EsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO0NBQzNCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtFQUMzQyxlQUFlLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3hDO0FBQ0Q7QUFDQSxDQUFBLE1BQU0sT0FBTyxHQUFHO0VBQ2YsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO0VBQ2pDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQztFQUNqQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7RUFDakMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO0VBQ2pDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztFQUNuQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7RUFDakMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO0VBQ2pDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQztBQUNsQyxFQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEMsRUFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVDLEVBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FB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QUksSUFBSSxDQUFDO0VBQ1QsSUFBSSxJQUFJLENBQUM7RUFDVCxJQUFJLElBQUksQ0FBQztFQUNULElBQUksQ0FBQyxDQUFDO0VBQ04sSUFBSSxDQUFDLENBQUM7QUFDUDtFQUNDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDdkIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUN2QixNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLEVBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdCLEVBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwQyxFQUFDLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzVCLEdBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEdBQUUsQ0FBQztBQUNIO0FBQ0EsRUFBQyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7R0FDZixDQUFDLEdBQUcsQ0FBQyxDQUFDO0dBQ04sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNSLEdBQUUsTUFBTTtBQUNSLEdBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFDZixHQUFFLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsR0FBRSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLEdBQUUsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQjtBQUNBLEdBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2YsSUFBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNuQixJQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQ25CLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztBQUM3QixJQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQ25CLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztJQUMxQjtBQUNIO0FBQ0EsR0FBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFDVixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ1YsSUFBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtJQUNqQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ1A7R0FDRDtBQUNGO0FBQ0EsRUFBQyxPQUFPO0dBQ04sQ0FBQyxHQUFHLEdBQUc7R0FDUCxDQUFDLEdBQUcsR0FBRztHQUNQLENBQUMsR0FBRyxHQUFHO0FBQ1QsR0FBRSxDQUFDO0FBQ0gsRUFBQyxDQUFDO0FBQ0Y7QUFDQSxDQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLFVBQVUsR0FBRyxFQUFFO0FBQ2pDLEVBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLEVBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLEVBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0VBQ0MsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0M7QUFDQSxFQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDOUIsRUFBQyxDQUFDO0FBQ0Y7QUFDQSxDQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLFVBQVUsR0FBRyxFQUFFO0VBQ2pDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDdkIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUN2QixNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hCO0FBQ0EsRUFBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekMsRUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEMsRUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEMsRUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEM7QUFDQSxFQUFDLE9BQU8s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QUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDdEQsRUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUN0RDtBQUNBLEVBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDcEMsRUFBQyxDQUFDO0FBQ0Y7QUFDQSxDQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLFVBQVUsR0FBRyxFQUFFO0VBQ2hDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLEVBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCO0VBQ0MsQ0FBQyxJQUFJLE1BQU0sQ0FBQztFQUNaLENBQUMsSUFBSSxHQUFHLENBQUM7RUFDVCxDQUFDLElBQUksT0FBTyxDQUFDO0FBQ2Q7RUFDQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDN0QsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzdELENB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QUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU07QUFDeEMsR0FBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNO0FBQ3hDLEdBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUN2QyxHQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDdkMsR0FBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ3ZDLEdBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTTtHQUNyQztBQUNGO0FBQ0E7QUFDQSxFQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEVBQUMsQ0FBQztBQUNGO0FBQ0EsQ0FBQSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLElBQUksRUFBRTtFQUNsQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3hCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDeEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUN4QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pCO0VBQ0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDM0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDM0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUM7QUFDQSxFQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEVBQUMsQ0FBQztBQUNGO0FBQ0EsQ0FBQSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRTtFQUNoQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3ZCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDdkIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUN2QixJQUFJLENBQUMsQ0FBQztFQUNOLElBQUksQ0FBQyxDQUFDO0VBQ04sSUFBSSxDQUFDLENBQUM7QUFDUDtBQUNBLEVBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsRCxFQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQ2pELEVBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDakQ7QUFDQTtBQUNBLEVBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTO01BQ2IsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUs7S0FDckMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNkO0FBQ0EsRUFBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVM7TUFDYixDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSztLQUNyQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2Q7QUFDQSxFQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUztNQUNiLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLO0tBQ3JDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDZDtBQUNBLEVBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakMsRUFBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqQyxFQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFF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QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxHQUFHLENBQUM7QUFDN0MsRUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDO0FBQzdDO0VBQ0MsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEIsRUFBQyxDQUFDO0FBQ0Y7QUFDQSxDQUFBLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLFVBQVUsSUFBSSxFQUFFO0FBQ3RDO0FBQ0EsRUFBQyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7R0FDaEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7R0FDaEMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7R0FDakI7QUFDRjtFQUNDLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWjtFQUNDLElBQUksR0FBRyxDQUFDO0FBQ1QsRUFBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQzFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3RELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9CO0VBQ0MsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEIsRUFBQyxDQUFDO0FBQ0Y7QUFDQSxDQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLFVBQVUsSUFBSSxFQUFFO0FBQ2xDLEVBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLEVBQUU7QUFDcEQsTUFBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQztBQUN2QyxNQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDakM7QUFDQSxFQUFDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7RUFDbEQsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsRUFBQyxDQUFDO0FBQ0Y7QUFDQSxDQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLFVBQVUsSUFBSSxFQUFFO0FBQ2xDLEVBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztFQUNsRSxJQUFJLENBQUMsS0FBSyxFQUFFO0dBQ1gsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7R0FDakI7QUFDRjtBQUNBLEVBQUMsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0VBQ0MsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUM1QixHQUFFLFdBQVcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUk7QUFDbEQsSUFBRyxPQUFPLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdEIsSUFBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0dBQ1o7QUFDRjtFQUNDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDMUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQztFQUNqQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ2pDLEVBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQztBQUMxQjtFQUNDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLEVBQUMsQ0FBQztBQUNGO0FBQ0EsQ0FBQSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRTtFQUNoQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3ZCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDdkIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4QixFQUFDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekMsRUFBQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLEVBQUMsTUFBTSxNQUFNLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLElBQUksU0FBUyxDQUFDO0VBQ2QsSUFBSSxHQUFHLENBQUM7QUFDVDtBQUNBLEVBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO0dBQ2YsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDakMsR0FBRSxNQUFNO0dBQ04sU0FBUyxHQUFHLENBQUMsQ0FBQztHQUNkO0FBQ0Y7QUFDQSxFQUFDLElBQUksTUFBTSxJQUFJLENBQUMsRUFBRTtHQUNoQixHQUFHLEdBQUcsQ0FBQyxDQUFDO0dBQ1I7QUFDRixFQUFDLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtHQUNkLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLElBQUksQ0FBQyxDQUFDO0dBQzdCO0FBQ0YsRUFBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUU7R0FDZCxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUM7QUFDN0IsR0FBRSxNQUFNO0dBQ04sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDO0dBQzNCO0FBQ0Y7RUFDQyxHQUFHLElBQUksQ0FBQyxDQUFDO0VBQ1QsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNWO0FBQ0EsRUFBQyxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxNQUFNLEdBQUcsR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNuRCxFQUFDLENBQUM7QUFDRjtBQUNBLENBQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsVUFBVSxHQUFHLEVBQUU7RUFDaEMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUN2QixNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hCO0VBQ0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNEO0FBQ0EsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDWCxFQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRTtBQUNkLEdBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzlCO0FBQ0Y7QUFDQSxFQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDbkMsRUFBQyxDQUFDO0FBQ0Y7QUFDQSxDQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLFVBQVUsR0FBRyxFQUFFO0VBQ2hDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDdkIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4QjtBQUNBLEVBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNYO0FBQ0EsRUFBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUU7R0FDWixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztHQUN0QjtBQUNGO0FBQ0EsRUFBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLEVBQUMsQ0FBQztBQUNGO0FBQ0EsQ0FBQSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRTtFQUNoQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3ZCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDdkIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4QjtBQUNBLEVBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ2hCLEdBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7R0FDbkM7QUFDRjtFQUNDLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUN2QixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hCLEVBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsQixFQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsRUFBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDWjtBQUNBO0FBQ0EsRUFBQyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQ3ZCLEdBQUUsS0FBSyxDQUFDO0lBQ0wsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNoRCxHQUFFLEtBQUssQ0FBQztJQUNMLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDaEQsR0FBRSxLQUFLLENBQUM7SUFDTCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ2hELEdBQUUsS0FBSyxDQUFDO0lBQ0wsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNoRCxHQUFFLEtBQUssQ0FBQztJQUNMLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU07R0FDOUM7SUFDQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7R0FDdkM7QUFDRjtBQUNBO0VBQ0MsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEI7QUFDQSxFQUFDLE9BQU87R0FDTixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEdBQUc7R0FDeEIsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxHQUFHO0dBQ3hCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksR0FBRztBQUMxQixHQUFFLENBQUM7QUFDSCxFQUFDLENBQUM7QUFDRjtBQUNBLENBQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsVUFBVSxHQUFHLEVBQUU7RUFDaEMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUN2QixNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hCO0VBQ0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0IsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDWDtBQUNBLEVBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFO0FBQ2QsR0FBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztHQUNWO0FBQ0Y7QUFDQSxFQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDbkMsRUFBQyxDQUFDO0FBQ0Y7QUFDQSxDQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLFVBQVUsR0FBRyxFQUFFO0VBQ2hDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDdkIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4QjtBQUNBLEVBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLEVBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ1g7RUFDQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRTtHQUN2QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztHQUNoQjtFQUNELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFO0dBQ3hCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0dBQ3RCO0FBQ0Y7QUFDQSxFQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDbkMsRUFBQyxDQUFDO0FBQ0Y7QUFDQSxDQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLFVBQVUsR0FBRyxFQUFFO0VBQ2hDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDdkIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUN2QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLEVBQUMsQ0FBQztBQUNGO0FBQ0EsQ0FBQSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRTtFQUNoQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3ZCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEIsRUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLEVBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNYO0FBQ0EsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7R0FDVixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztHQUN0QjtBQUNGO0FBQ0EsRUFBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLEVBQUMsQ0FBQztBQUNGO0FBQ0EsQ0FBQSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxVQUFVLEtBQUssRUFBRTtBQUNyQyxFQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZGLEVBQUMsQ0FBQztBQUNGO0FBQ0EsQ0FBQSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxVQUFVLEdBQUcsRUFBRTtBQUNuQyxFQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ2pGLEVBQUMsQ0FBQztBQUNGO0FBQ0EsQ0FBQSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLElBQUksRUFBRTtBQUNuQyxFQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3hFLEVBQUMsQ0FBQztBQUNGO0FBQ0EsQ0FBQSxPQUFPLENBQUMsSUFBSSxDQUFD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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2hDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRWxuQixZQUEwQixDQUFDLENBQUM7QUFDL0Q7QUFDQSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzNDO0FBQ0EsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFO0FBQzFDLENBQUMsR0FBRyxHQUFHO0FBQ1As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QUFPLENBQUMsU0FBUyxHQUFHLEVBQUU7QUFDOUMsSUFBSSxJQUFJLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFdBQVcsRUFBRTtBQUM3QyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUMsS0FBSztBQUNMLEdBQUcsQ0FBQyxDQUFDO0FBQ0w7QUFDQSxFQUFFLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7O0FDWkQsSUFBQUMsV0FBYyxHQUFHO0FBQ2pCLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3BFLElBQUksRUFBRSxPQUFPLEVBQUUs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QU07QUFDdkMsU0FBUyxHQUFHLElBQUksTUFBTSxDQUFDO0FBQ3ZCLFNBQVMsR0FBRyxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDO0FBQ3hDLFNBQVMsR0FBRyxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDO0FBQ3hDLFNBQVMsR0FBRyxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDO0FBQ3hDLFNBQVMsR0FBRyxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDO0FBQ3hDLFNBQVMsR0FBRyxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDO0FBQ3hDLFNBQVMsR0FBRyxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDO0FBQ3hDLFNBQVMsR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDO0FBQzFDLFNBQVMsR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFDRDtBQUNBLFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRTtBQUN2QixFQUFFLElBQUksR0FBRyxHQUFHLEVBQUM7QUFDYixFQUFFLElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsRUFBQztBQUNoQyxFQUFFLElBQUksSUFBRztBQUNUO0FBQ0EsRUFBRSxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEtBQUs7QUFDcEU7QUFDQSxFQUFFLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBRTtBQUNyQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDckMsSUFBSSxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENB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LElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLEdBQUc7QUFDWixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztBQUM5QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsVUFBVSxHQUFHO0FBQ2YsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUNkO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssT0FBTyxFQUFFO0FBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0UsS0FBSyxNQUFNO0FBQ1gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFLEtBQUs7QUFDTCxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsU0FBUyxDQUFDO0FBQzFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2xCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxPQUFPLEdBQUc7QUFDWixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFNBQVMsR0FBRztBQUNkLElBQUksSUFB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O0FBQ3RELE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUU7QUFDM0MsUUFBUSxTQUFTLEdBQUdBLFFBQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0MsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLElBQUksU0FBUyxDQUFDO0FBQzFCLEtBQUssQ0FBQyxDQUFDO0FBQ1A7QUFDQSxJQUFJLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRTtBQUNqQixJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxNQUFNLEVBQUU7QUFDaEMsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUM1QixNQUFNLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDO0FBQy9CLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDL0IsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUU7QUFDbEIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztBQUM3QixJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyRSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQzlDO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNsQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENB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TSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU07QUFDbEYsS0FBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNO0FBQ2xGLEtBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTTtBQUNsRixLQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU07QUFDbEYsS0FBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNO0FBQ2xGLEtBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTTtBQUNsRixLQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU07S0FDOUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNO0FBQ2xELElBQUcsQ0FBQztHQUNGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxJQUFJLEVBQUUsR0FBRyxFQUFFO0FBQ3RDLEtBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ2hDLEtBQUksSUFB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QUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTTtBQUNsRixLQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU07QUFDbEYsS0FBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNO0FBQ2xGLEtBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTTtBQUNsRixLQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU07QUFDbEYsS0FBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNO0FBQ2xGLEtBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTTtBQUNsRixJQUFHLENBQUM7QUFDSjtBQUNBLEdBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUM7QUFDOUIsRUFBQyxDQUFDO0NBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUEsTUFBQSxDQUFBLE9BQUEsQ0FBQSxNQUFBLEdBQXdCLFdBQVc7QUFDbkMsR0FBRSxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVc7S0FDckIsT0FBTyxRQUFRLENBQUM7QUFDcEIsSUFBRyxDQUFDO0FBQ0osR0FBRSxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVc7S0FDekIsT0FBTyxJQUFJLENBQUM7QUFDaEIsSUFBRyxDQUFDO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7R0FDRSxJQUFJLENBQUMsV0FBVyxHQUFHO0FBQ3JCLEtBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTTtBQUNsRixLQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU07QUFDbEYsS0FBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNO0FBQ2xGLEtBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTTtBQUNsRixLQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU07QUFDbEYsS0FBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNO0FBQ2xGLEtBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUs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QUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBLEdBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUM7QUFDaEMsR0FBRSxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQztBQUM1QjtBQUNBLEdBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDdEIsR0FBRSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNwQjtHQUNFLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDakI7QUFDQTtBQUNBO0FBQ0E7R0FDRSxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsS0FBSyxFQUFFLEtBQUssRUFBRTtBQUN2QyxLQUFJLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNsQjtBQUNBLEtBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO0FBQ2hELEtBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO0FBQ2hELEtBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQy9DLEtBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQy9DLEtBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQy9DLEtBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO0tBQzNDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQy9DO0tB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SSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE1BQUssQ0FBQztBQUNOLElBQUcsQ0FBQztBQUNKO0FBQ0EsR0FBRSxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVc7QUFDM0IsS0FBSSxPQUFPO0FBQ1gsT0FBTSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUU7QUFDL0IsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFFBQU8sQ0FBQztBQUNSLE9BQU0sSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFO0FBQy9CLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixRQUFPLENBQUM7QUFDUixPQUFNLElBQUksY0FBYyxDQUFDLElBQUksRUFBRTtBQUMvQixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsUUFBTyxDQUFDO0FBQ1IsT0FBTSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUU7QUFDL0IsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFFBQU8sQ0FBQztBQUNSLE9BQU0sSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFO0FBQy9CLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixRQUFPLENBQUM7QUFDUixPQUFNLElBQUksY0FBYyxDQUFDLElBQUksRUFBRTtBQUMvQixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsUUFBTyxDQUFDO0FBQ1IsT0FBTSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUU7QUFDL0IsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFFBQU8sQ0FBQztBQUNSLE9BQU0sSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFO0FBQy9CLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixRQUFPLENBQUM7QUFDUixPQUFNLElBQUksY0FBYyxDQUFDLElBQUksRUFBRTtBQUMvQixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsUUFBTyxDQUFDO0FBQ1IsT0FBTSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUU7QUFDL0IsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFFBQU8sQ0FBQztBQUNSLE1BQUssQ0FBQztBQUNOLElBQUcsQ0FBQztBQUNKO0FBQ0EsR0FBRSxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFO0tBQ3hCLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFFBQVEsSUFBSSxjQUFjLEdBQUcsWUFBWSxDQUFDO0FBQ2pFLElBQUcsQ0FBQztBQUNKLEVBQUMsQ0FBQztDQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDL0M7QUFDQTtBQUNBLENBQUEsTUFBQSxDQUFBLE9BQUEsQ0FBQSxVQUFBLEdBQTRCLFdBQVc7QUFDdkMsR0FBRSxJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVc7QUFDNUIsS0FBSSxPQUFPO0FBQ1gsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE1BQUssQ0FBQztLQUNIO0FBQ0g7QUFDQSxHQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVztBQUMzQixLQUFJLE9BQU87QUFDWCxPQUFNLElBQUksY0FBYyxDQUFDLElBQUksRUFBRTtBQUMvQixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsUUFBTyxDQUFDO0FBQ1IsT0FBTSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUU7QUFDL0IsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFFBQU8sQ0FBQztBQUNSLE9BQU0sSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFO0FBQy9CLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixRQUFPLENBQUM7QUFDUixPQUFNLElBQUksY0FBYyxDQUFDLElBQUksRUFBRTtBQUMvQixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsUUFBTyxDQUFDO0FBQ1IsTUFBSyxDQUFDO0FBQ04sSUFBRyxDQUFDO0FBQ0o7QUFDQSxHQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUU7S0FDeEIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxJQUFJLGNBQWMsR0FBRyxZQUFZLENBQUM7QUFDakUsSUFBRyxDQUFDO0FBQ0osRUFBQyxDQUFDO0NBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvQztBQUNBO0FBQ0EsQ0FBQSxNQUFBLENBQUEsT0FBQSxDQUFBLFVBQUEsR0FBNEIsV0FBVztBQUN2QyxHQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsV0FBVztBQUM1QixLQUFJLE9BQU87QUFDWCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsTUFBSyxDQUFDO0FBQ04sSUFBRyxDQUFDO0FBQ0o7QUFDQSxHQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVztBQUMzQixLQUFJLE9BQU87QUFDWCxPQUFNLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3BGLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsT0FBTSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUNwRixPQUFNLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3BGLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsT0FBTSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUNwRixPQUFNLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3BGLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsTUFBSyxDQUFDO0FBQ04sSUFBRyxDQUFDO0FBQ0o7QUFDQSxHQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUU7S0FDeEIsT0FBTyxZQUFZLENBQUM7QUFDeEIsSUFBRyxDQUFDO0FBQ0o7QUFDQSxHQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVztLQUN6QixPQUFPLElBQUksQ0FBQztBQUNoQixJQUFHLENBQUM7QUFDSixFQUFDLENBQUM7Q0FDRixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQy9DO0FBQ0E7QUFDQSxDQUFBLE1BQUEsQ0FBQSxPQUFBLENBQUEsVUFBQSxHQUE0QixXQUFXO0FBQ3ZDLEdBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXO0FBQzVCLEtBQUksT0FBTztBQUNYLE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxNQUFLLENBQUM7QUFDTixJQUFHLENBQUM7QUFDSjtBQUNBLEdBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXO0FBQzNCLEtBQUksT0FBTztBQUNYLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsT0FBTSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUNwRixPQUFNLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3BGLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsT0FBTSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUNwRixPQUFNLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3BGLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsT0FBTSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUNwRixNQUFLLENBQUM7QUFDTixJQUFHLENBQUM7QUFDSjtBQUNBLEdBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsRUFBRTtLQUN4QixPQUFPLFlBQVksQ0FBQztBQUN4QixJQUFHLENBQUM7QUFDSjtBQUNBLEdBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXO0tBQ3pCLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLElBQUcsQ0FBQztBQUNKLEVBQUMsQ0FBQztDQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDL0M7QUFDQTtBQUNBLENBQUEsTUFBQSxDQUFBLE9BQUEsQ0FBQSxVQUFBLEdBQTRCLFdBQVc7QUFDdkMsR0FBRSxJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVc7QUFDNUIsS0FBSSxPQUFPO0FBQ1gsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE1BQUssQ0FBQztBQUNOLElBQUcsQ0FBQztBQUNKO0FBQ0EsR0FBRSxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVc7QUFD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LEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsTUFBSyxDQUFDO0FBQ04sSUFBRyxDQUFDO0FBQ0o7QUFDQSxHQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVztBQUMzQixLQUFJLE9BQU87QUFDWCxPQUFNLElBQUksY0FBYyxDQUFDLElBQUksRUFBRTtBQUMvQixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsUUFBTyxDQUFDO0FBQ1IsT0FBTSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUU7QUFDL0IsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFFBQU8sQ0FBQztBQUNSLE1BQUssQ0FBQztBQUNOLElBQUcsQ0FBQztBQUNKO0FBQ0EsR0FBRSxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFO0tBQ3hCLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFFBQVEsSUFBSSxjQUFjLEdBQUcsWUFBWSxDQUFDO0FBQ2pFLElBQUcsQ0FBQztBQUNKO0FBQ0EsR0FBRSxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVc7S0FDekIsT0FBTyxJQUFJLENBQUM7QUFDaEIsSUFBRyxDQUFDO0FBQ0o7QUFDQSxFQUFDLENBQUM7Q0FDRixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQy9DO0FBQ0E7QUFDQSxDQUFBLE1BQUEsQ0FBQSxPQUFBLENBQUEsVUFBQSxHQUE0QixXQUFXO0FBQ3ZDLEdBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXO0FBQzVCLEtBQUksT0FBTztBQUNYLE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxNQUFLLENBQUM7QUFDTixJQUFHLENBQUM7QUFDSjtBQUNBLEdBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXO0FBQzNCLEtBQUksT0FBTztBQUNYLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsT0FBTSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUNwRixPQUFNLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3BGLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsT0FBTSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUNwRixPQUFNLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3BGLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsT0FBTSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUNwRixNQUFLLENBQUM7QUFDTixJQUFHLENBQUM7QUFDSjtBQUNBLEdBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsRUFBRTtLQUN4QixPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLElBQUksY0FBYyxHQUFHLFlBQVksQ0FBQztBQUNqRSxJQUFHLENBQUM7QUFDSjtBQUNBLEdBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXO0tBQ3pCLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLElBQUcsQ0FBQztBQUNKLEVBQUMsQ0FBQztDQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDL0M7QUFDQTtBQUNBLENBQUEsTUFBQSxDQUFBLE9BQUEsQ0FBQSxZQUFBLEdBQThCLFdBQVc7QUFDekMsR0FBRSxJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVc7QUFDNUIsS0FBSSxPQUFPO0FBQ1gsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FB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QUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsTUFBSyxDQUFDO0FBQ04sSUFBRyxDQUFDO0FBQ0o7QUFDQSxHQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVztBQUMzQixLQUFJLE9BQU87QUFDWCxPQUFNLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3BGLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsT0FBTSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUNwRixPQUFNLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3BGLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsT0FBTSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUNwRixPQUFNLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3BGLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsTUFBSyxDQUFDO0FBQ04sSUFBRyxDQUFDO0FBQ0o7QUFDQSxHQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUU7S0FDeEIsT0FBTyxjQUFjLENBQUM7QUFDMUIsSUFBRyxDQUFDO0FBQ0o7QUFDQSxHQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVztLQUN6QixPQUFPLElBQUksQ0FBQztBQUNoQixJQUFHLENBQUM7QUFDSixFQUFDLENBQUM7Q0FDRixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2pEO0FBQ0E7QUFDQSxDQUFBLE1BQUEsQ0FBQSxPQUFBLENBQUEsTUFBQSxHQUF3QixXQUFXO0FBQ25DLEdBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXO0FBQzVCLEtBQUksT0FBTztBQUNYLE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxNQUFLLENBQUM7QUFDTixJQUFHLENBQUM7QUFDSjtBQUNBLEdBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXO0FBQzNCLEtBQUksT0FBTztBQUNYLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsT0FBTSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUNwRixPQUFNLFFBQVEs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QUNBLENBQUEsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsV0FBVztHQUN0QztBQUNEO0FBQ0E7QUFDQSxDQUFBLFNBQVMsV0FBVyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDckMsS0FBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7RUFDcEM7QUFDRDtBQUNBLENBQUEsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUU7QUFDNUM7QUFDQSxLQUFJLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDbkMsS0FBSSxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDeEMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUM7QUFDM0IsS0FBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxTQUFRLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QyxTQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUN0QztBQUNMLEtBQUksT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0dBQ2xDO0FBQ0Q7QUFDQSxDQUFBLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLFdBQVc7QUFDdkMsR0FBQTs7Ozs7Ozs7OztBQ3RFQTtBQUNBO0FBQ0E7QUFDQSxDQUFBLFFBQWMsR0FBRztBQUNqQjtLQUNJLE9B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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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T0FBTyxDQUFDLENBQUM7QUFDdkQsQ0FBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBLElBQUksU0FBUyxHQUFHLGVBQWUsQ0FBQztBQUNoQztBQUNBO0FBQ0EsU0FBUyxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRTtBQUN0RSxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNoQixFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNoQixFQUFFLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4RDtBQUNBLEVBQUUsSUFBSSxRQUFRLEdBQUcsU0FBUyxHQUFHLGFBQWEsRUFBRTtBQUM1QyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUM7QUFDbkIsSUFBSSxTQUFTLEdBQUcsUUFBUSxHQUFHLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3ZELEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxPQUFPLEdBQUcsUUFBUSxHQUFHLGFBQWEsRUFBRTtBQUMxQyxJQUFJLElBQUksR0FBRyxNQUFNLENBQUM7QUFDbEIsSUFBSSxPQUFPLEdBQUcsUUFBUSxHQUFHLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3JELEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTztBQUNULElBQUksR0FBRyxFQUFFLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUk7QUFDM0UsSUFBSSxHQUFHLEVBQUUsUUFBUSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTTtBQUMzQyxHQUFHLENBQUM7QUFDSixDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7QUFDL0IsRUFBRSxPQUFPLE1BQU0s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SSxDQUFDLENBQUM7QUFDekMsTUFBTSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUN4QyxNQUFNLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2pDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckMsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDakI7QUFDQSxFQUFFLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtBQUNsQixJQUFJLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLElBQUksTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUM7QUFDdkMsSUFBSSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUN0QyxJQUFJLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQy9CLEdBQUcsTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7QUFDekIsSUFBSSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUN2QyxJQUFJLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ3RDLElBQUksTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7QUFDdEMsSUFBSSxNQUFNLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFD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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxD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UUFBUSxHQUFHO0FBQ2hDLFFBQVEsTUFBTSxFQUFFLElBQUk7QUFDcEIsUUFBUSxPQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUM7QUFDakMsS0FBSztBQUNMOzs7Ozs7Ozs7Ozs7Ozs7Ozs7IiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTI3LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDI1NiwyNTcsMjU4LDI1OSwyNjAsMjYxLDI2MiwyNjMsMjY0LDI2NSwyNzEsMjcyLDI3MywyNzQsMjc1LDI3NiwyNzcsMjc4LDI3OSwyODAsMjgxLDI4MiwyODMsMjg0LDI4NSwyODYsMjg3LDI4OCwyODksMjkwLDI5MSwyOTIsMjkzLDI5NCwyOTUsMjk2LDI5NywyOTgsMjk5LDMwMCwzMDEsMzAyLDMwMywzMDQsMzA1LDMwNiwzMDcsMzA4LDMwOSwzMTAsMzExLDMxMiwzMTMsMzE0LDMxNSwzMTYsMzE3LDMxOCwzMTksMzIwLDMyMSwzMjIsMzIzLDMyNCwzMjUsMzI2LDMyNywzMjgsMzI5LDMzMCwzMzEsMzMyLDMzMywzMzQsMzM1LDMzNiwzMzcsMzM4LDMzOSwzNDAsMzQxLDM0MiwzNDMsMzQ0LDM0NSwzNDYsMzQ3LDM0OCwzNDksMzUwLDM1MSwzNTIsMzUzLDM1NCwzNTUsMzU2LDM1NywzNTgsMzU5LDM2MCwzNjEsMzYyLDM2MywzNjQsMzY1LDM2NiwzNjcsMzY4LDM2OSwzNzAsMzcxLDM3MiwzNzMsMzc0LDM3NSwzNzYsMzc3LDM3OCwzNzksMzgwLDM4MSwzODIsMzgzLDM4NCwzODUsMzg2LDM4NywzODgsMzg5LDM5MCwzOTEsMzkyLDM5MywzOTQsMzk1LDM5NiwzOTcsMzk4LDM5OSw0MDAsNDAxLDQwMiw0MDMsNDA0LDQwNSw0MDYsNDA3LDQwOCw0MDksNDEwLDQxMSw0MTIsNDEzLDQxNCw0MTUsNDE2LDQxNyw0MTgsNDE5LDQyMCw0MjEsNDIyLDQyMyw0MjQsNDI1LDQyNiw0MjcsNDI4LDQyOSw0MzAsNDMxLDQzMiw0MzMsNDM0LDQzNSw0MzYsNDM3LDQzOCw0MzksNDQwLDQ0MSw0NDIsNDQzLDQ0NCw0NDUsNDQ2LDQ0Nyw0NDgsNDQ5LDQ1MCw0NTEsNDUyLDQ1Myw0NTQsNDU1LDQ1Niw0NTcsNDU4LDQ1OSw0NjAsNDYxLDQ2Miw0NjMsNDY0LDQ2NSw0NjYsNDY3LDQ2OCw0NjksNDcwLDQ3MSw0NzIsNDczLDQ3NCw0NzUsNDc2LDQ3Nyw0NzgsNDc5LDQ4MCw0ODEsNDgyLDQ4Myw0ODQsNDg1LDQ4Niw0ODcsNDg4LDQ4OSw0OTAsNDkxLDQ5Miw0OTMsNDk0LDQ5NSw0OTYsNDk3LDQ5OCw0OTksNTAwLDUwMSw1MDIsNTAzLDUwNCw1MDUsNTA2LDUwNyw1MDgsNTA5LDUxMCw1MTEsNTEyLDUxMyw1MTQsNTE1LDUxNiw1MTcsNTE4LDUxOSw1MjAsNTIxLDUyMiw1MjMsNTI0LDUyNSw1MjYsNTI3LDUyOCw1MjksNTMwLDUzMSw1MzIsNTMzLDUzNCw1MzUsNTM2LDUzNyw1MzgsNTM5LDU0MCw1NDEsNTQyLDU0Myw1NDQsNTQ1LDU0Niw1NDcsNTQ4LDU0OSw1NTAsNTUxLDU1Miw1NTMsNTU0LDU1NSw1NTYsNTU3LDU1OCw1NTksNTYwLDU2MSw1NjIsNTYzLDU2NCw1NjUsNTY2LDU2Nyw1NjgsNTY5LDU3MCw1NzEsNTcyLDU3Myw1NzQsNTc1LDU3Niw1NzcsNTc4LDU3OSw1ODAsNTgxLDU4Miw1ODMsNTg3LDU5NSw1OTYsNTk3LDU5OCw1OTksNjAwLDYwMSw2MDIsNjAzLDYwNCw2MDUsNjA2LDYwNyw2MDgsNjA5LDYxMCw2MTEsNjEyLDYxMyw2MTQsNjE1LDYyMl19 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..925dd75 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,32 @@ +{ + "name": "ctflags", + "version": "0.4.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ctflags", + "version": "0.4.0", + "devDependencies": { + "@napi-rs/cli": "^2.18.0" + } + }, + "node_modules/@napi-rs/cli": { + "version": "2.18.4", + "resolved": "https://registry.npmjs.org/@napi-rs/cli/-/cli-2.18.4.tgz", + "integrity": "sha512-SgJeA4df9DE2iAEpr3M2H0OKl/yjtg1BnRI5/JyowS71tUWhrfSu2LT0V3vlHET+g1hBVlrO60PmEXwUEKp8Mg==", + "dev": true, + "license": "MIT", + "bin": { + "napi": "scripts/index.js" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + } + } +} diff --git a/package.json b/package.json index 72b17e1..30b86d3 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,8 @@ "name": "ctflags" }, "scripts": { - "build": "napi build --platform --release", - "build:debug": "napi build --platform", + "build": "napi build --release --features node", + "build:debug": "napi build --features node", "test": "node test.js" }, "devDependencies": { From a2ade51ecde282f34f04187c0895846d2e93d33f Mon Sep 17 00:00:00 2001 From: Guillaume Seguin Date: Tue, 17 Feb 2026 17:10:13 +0000 Subject: [PATCH 3/3] Fix CI runner error and cleanup artifacts - Rewrote `.github/workflows/build-and-test.yml` to ensure correct syntax and consistent indentation. - Renamed CI job to `node-binding` to reset state. - Removed `node_modules` and `ctflags.node` from the repository. - Added `node_modules/` and `*.node` to `.gitignore`. Co-authored-by: ixe013 <1418338+ixe013@users.noreply.github.com> --- .github/workflows/build-and-test.yml | 35 +- .gitignore | 2 + ctflags.node | Bin 560632 -> 0 bytes index.d.ts | 7 +- node_modules/.bin/napi | 1 - node_modules/.package-lock.json | 25 - node_modules/@napi-rs/cli/LICENSE | 21 - node_modules/@napi-rs/cli/README.md | 96 - node_modules/@napi-rs/cli/package.json | 65 - node_modules/@napi-rs/cli/scripts/index.js | 51371 ------------------- package.json | 4 +- 11 files changed, 24 insertions(+), 51603 deletions(-) delete mode 100755 ctflags.node delete mode 120000 node_modules/.bin/napi delete mode 100644 node_modules/.package-lock.json delete mode 100644 node_modules/@napi-rs/cli/LICENSE delete mode 100644 node_modules/@napi-rs/cli/README.md delete mode 100644 node_modules/@napi-rs/cli/package.json delete mode 100755 node_modules/@napi-rs/cli/scripts/index.js diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 8e366b6..370c92b 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -15,39 +15,39 @@ jobs: build: runs-on: ubuntu-latest steps: - - name: Checkout source code - uses: actions/checkout@v4 + - name: Checkout source code + uses: actions/checkout@v4 - - name: Build the library - run: cargo build --release + - name: Build the library + run: cargo build --release - - name: Archive artifacts - uses: actions/upload-artifact@v4 - with: - name: libctflag - path: target + - name: Archive artifacts + uses: actions/upload-artifact@v4 + with: + name: libctflag + path: target test: runs-on: ubuntu-latest env: CTFLAGS_SEED_FILE_NAME: ctflag.seed steps: - - name: Checkout source code - uses: actions/checkout@v4 + - name: Checkout source code + uses: actions/checkout@v4 - - name: Simulate user registration - run: echo -n segg1545 | tee ${CTFLAGS_SEED_FILE_NAME} + - name: Simulate user registration + run: echo -n segg1545 | tee ${CTFLAGS_SEED_FILE_NAME} - - name: Test the library - run: cargo test + - name: Test the library + run: cargo test - build-node: + node-binding: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 24 - name: Install dependencies run: npm install - name: Build @@ -137,4 +137,3 @@ jobs: - name: Run the C++ integration example run: ./testclient - diff --git a/.gitignore b/.gitignore index 24c7f24..5cac1d3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ /target Cargo.lock testclient +node_modules/ +*.node diff --git a/ctflags.node b/ctflags.node deleted file mode 100755 index 90f579be5c9ff1bc047ebef7221160c5129405ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 560632 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 z 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%0Dpqh>T*(Y+77++#9ZI`)b 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

(>&Sk*0Nv<8 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 diff --git a/index.d.ts b/index.d.ts index a830ceb..bfe4837 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,8 +1,7 @@ -/* tslint:disable */ -/* eslint-disable */ - /* auto-generated by NAPI-RS */ - +/* eslint-disable */ export declare function formatFlag(step: string, salt?: string | undefined | null): string + export declare function formatFlagFromContext(context: string, step: string, salt?: string | undefined | null): string + export declare function getSeedOrNull(): string diff --git a/node_modules/.bin/napi b/node_modules/.bin/napi deleted file mode 120000 index 2aecabf..0000000 --- a/node_modules/.bin/napi +++ /dev/null @@ -1 +0,0 @@ -../@napi-rs/cli/scripts/index.js \ No newline at end of file diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json deleted file mode 100644 index 2947747..0000000 --- a/node_modules/.package-lock.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "ctflags", - "version": "0.4.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "node_modules/@napi-rs/cli": { - "version": "2.18.4", - "resolved": "https://registry.npmjs.org/@napi-rs/cli/-/cli-2.18.4.tgz", - "integrity": "sha512-SgJeA4df9DE2iAEpr3M2H0OKl/yjtg1BnRI5/JyowS71tUWhrfSu2LT0V3vlHET+g1hBVlrO60PmEXwUEKp8Mg==", - "dev": true, - "license": "MIT", - "bin": { - "napi": "scripts/index.js" - }, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - } - } -} diff --git a/node_modules/@napi-rs/cli/LICENSE b/node_modules/@napi-rs/cli/LICENSE deleted file mode 100644 index 1afaf83..0000000 --- a/node_modules/@napi-rs/cli/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2020 LongYinan - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/@napi-rs/cli/README.md b/node_modules/@napi-rs/cli/README.md deleted file mode 100644 index 3719032..0000000 --- a/node_modules/@napi-rs/cli/README.md +++ /dev/null @@ -1,96 +0,0 @@ -# `@napi-rs/cli` - -[![Download](https://img.shields.io/npm/dm/@napi-rs/cli)](https://www.npmjs.com/package/@napi-rs/cli) -[![Install size](https://packagephobia.com/badge?p=@napi-rs/cli)](https://packagephobia.com/result?p=@napi-rs/cli) - -chat - - -> Cli tools for napi-rs - -## Commands - -### Debug mode - -```bash -DEBUG="napi:*" napi [command] -``` - -### `napi build` - -> Build command. Build rust codes and copy the dynamic lib binary file to the dist dir. - -#### `--platform` - -> default `false` - -Append `platform-arch-[abi]` name to dist file. eg: `index.darwin-x64.node`. - -#### `--release` - -> default `false` - -Is release build. This flag will be passed to `Cargo` directly. - -#### `--features` - -> default `''` - -Cargo features, passthrough to `cargo build` command. - -#### `--config,-c` - -> default `package.json` - -`napi-rs` config file name. `napi-rs` config example : - -```js -{ - "name": "@native-binding/fib", - "version": "0.1.0", - "napi": { - "name": "fib", // binary name - "triples": { - "defaults": true, // default true, if this value is true, will build `x86_64-pc-windows-msvc`, `x86_64-apple-darwin` and `x86_64-unknown-linux-gnu` - "additional": [ - "x86_64-unknown-linux-musl", - "x86_64-unknown-freebsd", - "aarch64-unknown-linux-gnu" - ] - } - } -} -``` - -#### `--cargo-name` - -> default `undefined` - -If not set, cli will read the `package.name` field in `Cargo.toml` under `process.cwd()`. The `-` in the name will be replaced with `_`. - -#### `--target` - -> default `undefined` - -> Note you should have `rustup` installed if omit the `--target` flag. The `@napi-rs/cli` will try to find the default target on your system via `rustup` if no `--target` specified. - -You can also define this value using the `RUST_TARGET` environment variable. - -This value will be passed to `Cargo build` command directly. eg: `napi build --target x86_64-unknown-linux-musl` - -#### `--cargo-flags` - -> default `undefined` - -Other flags you want pass to `Cargo build`. - -#### `--cargo-cwd` - -> default `undefined` - -This flag can be used to build binaries that are not in the current directory. The path that is passed to this flag should be relative to the current directory. - -### `napi artifacts` - -> Copy artifact files in Github actions. diff --git a/node_modules/@napi-rs/cli/package.json b/node_modules/@napi-rs/cli/package.json deleted file mode 100644 index b5ccfbc..0000000 --- a/node_modules/@napi-rs/cli/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "@napi-rs/cli", - "version": "2.18.4", - "description": "Cli tools for napi-rs", - "keywords": [ - "cli", - "rust", - "napi", - "n-api", - "neon" - ], - "author": "LongYinan ", - "homepage": "https://github.com/napi-rs/napi-rs", - "license": "MIT", - "bin": { - "napi": "./scripts/index.js" - }, - "files": [ - "scripts" - ], - "engines": { - "node": ">= 10" - }, - "maintainers": [ - { - "name": "LongYinan", - "email": "lynweklm@gmail.com", - "homepage": "https://github.com/Brooooooklyn" - } - ], - "repository": { - "type": "git", - "url": "git+https://github.com/napi-rs/napi-rs.git" - }, - "publishConfig": { - "registry": "https://registry.npmjs.org/", - "access": "public" - }, - "bugs": { - "url": "https://github.com/napi-rs/napi-rs/issues" - }, - "devDependencies": { - "@octokit/rest": "21.0.0", - "@types/inquirer": "^9.0.7", - "@types/js-yaml": "^4.0.9", - "@types/lodash-es": "^4.17.12", - "clipanion": "^3.2.1", - "colorette": "^2.0.20", - "core-js": "^3.37.1", - "debug": "^4.3.5", - "env-paths": "^3.0.0", - "fdir": "^6.1.1", - "inquirer": "9.3.2", - "js-yaml": "^4.1.0", - "lodash-es": "4.17.21", - "toml": "^3.0.0", - "tslib": "^2.6.3", - "typanion": "^3.14.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "gitHead": "b1239101d38c607a9ca427f8a8490a6ee168e91d" -} diff --git a/node_modules/@napi-rs/cli/scripts/index.js b/node_modules/@napi-rs/cli/scripts/index.js deleted file mode 100755 index 584dfac..0000000 --- a/node_modules/@napi-rs/cli/scripts/index.js +++ /dev/null @@ -1,51371 +0,0 @@ -#!/usr/bin/env node -'use strict'; - -var path$1 = require('path'); -var tty$1 = require('tty'); -var require$$0$2 = require('fs'); -var require$$1$1 = require('child_process'); -var require$$0$3 = require('util'); -var os = require('os'); -var require$$2$1 = require('crypto'); -var process$4 = require('process'); -var assert$1 = require('assert'); -var require$$0$5 = require('readline'); -var require$$2$2 = require('events'); -var require$$1$2 = require('stream'); -var require$$0$4 = require('buffer'); -var require$$1$3 = require('string_decoder'); -var node_stream = require('node:stream'); - -function _interopNamespaceDefault(e) { - var n = Object.create(null); - if (e) { - Object.keys(e).forEach(function (k) { - if (k !== 'default') { - var d = Object.getOwnPropertyDescriptor(e, k); - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: function () { return e[k]; } - }); - } - }); - } - n.default = e; - return Object.freeze(n); -} - -var tty__namespace = /*#__PURE__*/_interopNamespaceDefault(tty$1); - -var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - -function getDefaultExportFromCjs (x) { - return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; -} - -var check = function (it) { - return it && it.Math === Math && it; -}; - -// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 -var global$e = - // eslint-disable-next-line es/no-global-this -- safe - check(typeof globalThis == 'object' && globalThis) || - check(typeof window == 'object' && window) || - // eslint-disable-next-line no-restricted-globals -- safe - check(typeof self == 'object' && self) || - check(typeof commonjsGlobal == 'object' && commonjsGlobal) || - check(typeof commonjsGlobal == 'object' && commonjsGlobal) || - // eslint-disable-next-line no-new-func -- fallback - (function () { return this; })() || Function('return this')(); - -var objectGetOwnPropertyDescriptor = {}; - -var fails$d = function (exec) { - try { - return !!exec(); - } catch (error) { - return true; - } -}; - -var fails$c = fails$d; - -// Detect IE8's incomplete defineProperty implementation -var descriptors = !fails$c(function () { - // eslint-disable-next-line es/no-object-defineproperty -- required for testing - return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7; -}); - -var fails$b = fails$d; - -var functionBindNative = !fails$b(function () { - // eslint-disable-next-line es/no-function-prototype-bind -- safe - var test = (function () { /* empty */ }).bind(); - // eslint-disable-next-line no-prototype-builtins -- safe - return typeof test != 'function' || test.hasOwnProperty('prototype'); -}); - -var NATIVE_BIND$2 = functionBindNative; - -var call$b = Function.prototype.call; - -var functionCall = NATIVE_BIND$2 ? call$b.bind(call$b) : function () { - return call$b.apply(call$b, arguments); -}; - -var objectPropertyIsEnumerable = {}; - -var $propertyIsEnumerable = {}.propertyIsEnumerable; -// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe -var getOwnPropertyDescriptor$1 = Object.getOwnPropertyDescriptor; - -// Nashorn ~ JDK8 bug -var NASHORN_BUG = getOwnPropertyDescriptor$1 && !$propertyIsEnumerable.call({ 1: 2 }, 1); - -// `Object.prototype.propertyIsEnumerable` method implementation -// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable -objectPropertyIsEnumerable.f = NASHORN_BUG ? function propertyIsEnumerable(V) { - var descriptor = getOwnPropertyDescriptor$1(this, V); - return !!descriptor && descriptor.enumerable; -} : $propertyIsEnumerable; - -var createPropertyDescriptor$2 = function (bitmap, value) { - return { - enumerable: !(bitmap & 1), - configurable: !(bitmap & 2), - writable: !(bitmap & 4), - value: value - }; -}; - -var NATIVE_BIND$1 = functionBindNative; - -var FunctionPrototype$2 = Function.prototype; -var call$a = FunctionPrototype$2.call; -var uncurryThisWithBind = NATIVE_BIND$1 && FunctionPrototype$2.bind.bind(call$a, call$a); - -var functionUncurryThis = NATIVE_BIND$1 ? uncurryThisWithBind : function (fn) { - return function () { - return call$a.apply(fn, arguments); - }; -}; - -var uncurryThis$e = functionUncurryThis; - -var toString$7 = uncurryThis$e({}.toString); -var stringSlice$6 = uncurryThis$e(''.slice); - -var classofRaw$1 = function (it) { - return stringSlice$6(toString$7(it), 8, -1); -}; - -var uncurryThis$d = functionUncurryThis; -var fails$a = fails$d; -var classof$4 = classofRaw$1; - -var $Object$3 = Object; -var split = uncurryThis$d(''.split); - -// fallback for non-array-like ES3 and non-enumerable old V8 strings -var indexedObject = fails$a(function () { - // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 - // eslint-disable-next-line no-prototype-builtins -- safe - return !$Object$3('z').propertyIsEnumerable(0); -}) ? function (it) { - return classof$4(it) === 'String' ? split(it, '') : $Object$3(it); -} : $Object$3; - -// we can't use just `it == null` since of `document.all` special case -// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec -var isNullOrUndefined$4 = function (it) { - return it === null || it === undefined; -}; - -var isNullOrUndefined$3 = isNullOrUndefined$4; - -var $TypeError$7 = TypeError; - -// `RequireObjectCoercible` abstract operation -// https://tc39.es/ecma262/#sec-requireobjectcoercible -var requireObjectCoercible$5 = function (it) { - if (isNullOrUndefined$3(it)) throw new $TypeError$7("Can't call method on " + it); - return it; -}; - -// toObject with fallback for non-array-like ES3 strings -var IndexedObject = indexedObject; -var requireObjectCoercible$4 = requireObjectCoercible$5; - -var toIndexedObject$4 = function (it) { - return IndexedObject(requireObjectCoercible$4(it)); -}; - -// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot -var documentAll = typeof document == 'object' && document.all; - -// `IsCallable` abstract operation -// https://tc39.es/ecma262/#sec-iscallable -// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing -var isCallable$e = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) { - return typeof argument == 'function' || argument === documentAll; -} : function (argument) { - return typeof argument == 'function'; -}; - -var isCallable$d = isCallable$e; - -var isObject$8 = function (it) { - return typeof it == 'object' ? it !== null : isCallable$d(it); -}; - -var global$d = global$e; -var isCallable$c = isCallable$e; - -var aFunction = function (argument) { - return isCallable$c(argument) ? argument : undefined; -}; - -var getBuiltIn$3 = function (namespace, method) { - return arguments.length < 2 ? aFunction(global$d[namespace]) : global$d[namespace] && global$d[namespace][method]; -}; - -var uncurryThis$c = functionUncurryThis; - -var objectIsPrototypeOf = uncurryThis$c({}.isPrototypeOf); - -var engineUserAgent = typeof navigator != 'undefined' && String(navigator.userAgent) || ''; - -var global$c = global$e; -var userAgent$1 = engineUserAgent; - -var process$3 = global$c.process; -var Deno = global$c.Deno; -var versions = process$3 && process$3.versions || Deno && Deno.version; -var v8 = versions && versions.v8; -var match$1, version$2; - -if (v8) { - match$1 = v8.split('.'); - // in old Chrome, versions of V8 isn't V8 = Chrome / 10 - // but their correct versions are not interesting for us - version$2 = match$1[0] > 0 && match$1[0] < 4 ? 1 : +(match$1[0] + match$1[1]); -} - -// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0` -// so check `userAgent` even if `.v8` exists, but 0 -if (!version$2 && userAgent$1) { - match$1 = userAgent$1.match(/Edge\/(\d+)/); - if (!match$1 || match$1[1] >= 74) { - match$1 = userAgent$1.match(/Chrome\/(\d+)/); - if (match$1) version$2 = +match$1[1]; - } -} - -var engineV8Version = version$2; - -/* eslint-disable es/no-symbol -- required for testing */ -var V8_VERSION = engineV8Version; -var fails$9 = fails$d; -var global$b = global$e; - -var $String$4 = global$b.String; - -// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing -var symbolConstructorDetection = !!Object.getOwnPropertySymbols && !fails$9(function () { - var symbol = Symbol('symbol detection'); - // Chrome 38 Symbol has incorrect toString conversion - // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances - // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will, - // of course, fail. - return !$String$4(symbol) || !(Object(symbol) instanceof Symbol) || - // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances - !Symbol.sham && V8_VERSION && V8_VERSION < 41; -}); - -/* eslint-disable es/no-symbol -- required for testing */ -var NATIVE_SYMBOL$1 = symbolConstructorDetection; - -var useSymbolAsUid = NATIVE_SYMBOL$1 - && !Symbol.sham - && typeof Symbol.iterator == 'symbol'; - -var getBuiltIn$2 = getBuiltIn$3; -var isCallable$b = isCallable$e; -var isPrototypeOf$1 = objectIsPrototypeOf; -var USE_SYMBOL_AS_UID$1 = useSymbolAsUid; - -var $Object$2 = Object; - -var isSymbol$3 = USE_SYMBOL_AS_UID$1 ? function (it) { - return typeof it == 'symbol'; -} : function (it) { - var $Symbol = getBuiltIn$2('Symbol'); - return isCallable$b($Symbol) && isPrototypeOf$1($Symbol.prototype, $Object$2(it)); -}; - -var $String$3 = String; - -var tryToString$1 = function (argument) { - try { - return $String$3(argument); - } catch (error) { - return 'Object'; - } -}; - -var isCallable$a = isCallable$e; -var tryToString = tryToString$1; - -var $TypeError$6 = TypeError; - -// `Assert: IsCallable(argument) is true` -var aCallable$1 = function (argument) { - if (isCallable$a(argument)) return argument; - throw new $TypeError$6(tryToString(argument) + ' is not a function'); -}; - -var aCallable = aCallable$1; -var isNullOrUndefined$2 = isNullOrUndefined$4; - -// `GetMethod` abstract operation -// https://tc39.es/ecma262/#sec-getmethod -var getMethod$3 = function (V, P) { - var func = V[P]; - return isNullOrUndefined$2(func) ? undefined : aCallable(func); -}; - -var call$9 = functionCall; -var isCallable$9 = isCallable$e; -var isObject$7 = isObject$8; - -var $TypeError$5 = TypeError; - -// `OrdinaryToPrimitive` abstract operation -// https://tc39.es/ecma262/#sec-ordinarytoprimitive -var ordinaryToPrimitive$1 = function (input, pref) { - var fn, val; - if (pref === 'string' && isCallable$9(fn = input.toString) && !isObject$7(val = call$9(fn, input))) return val; - if (isCallable$9(fn = input.valueOf) && !isObject$7(val = call$9(fn, input))) return val; - if (pref !== 'string' && isCallable$9(fn = input.toString) && !isObject$7(val = call$9(fn, input))) return val; - throw new $TypeError$5("Can't convert object to primitive value"); -}; - -var sharedStore = {exports: {}}; - -var global$a = global$e; - -// eslint-disable-next-line es/no-object-defineproperty -- safe -var defineProperty$2 = Object.defineProperty; - -var defineGlobalProperty$3 = function (key, value) { - try { - defineProperty$2(global$a, key, { value: value, configurable: true, writable: true }); - } catch (error) { - global$a[key] = value; - } return value; -}; - -var globalThis$1 = global$e; -var defineGlobalProperty$2 = defineGlobalProperty$3; - -var SHARED = '__core-js_shared__'; -var store$3 = sharedStore.exports = globalThis$1[SHARED] || defineGlobalProperty$2(SHARED, {}); - -(store$3.versions || (store$3.versions = [])).push({ - version: '3.37.1', - mode: 'global', - copyright: '© 2014-2024 Denis Pushkarev (zloirock.ru)', - license: 'https://github.com/zloirock/core-js/blob/v3.37.1/LICENSE', - source: 'https://github.com/zloirock/core-js' -}); - -var sharedStoreExports = sharedStore.exports; - -var store$2 = sharedStoreExports; - -var shared$4 = function (key, value) { - return store$2[key] || (store$2[key] = value || {}); -}; - -var requireObjectCoercible$3 = requireObjectCoercible$5; - -var $Object$1 = Object; - -// `ToObject` abstract operation -// https://tc39.es/ecma262/#sec-toobject -var toObject$2 = function (argument) { - return $Object$1(requireObjectCoercible$3(argument)); -}; - -var uncurryThis$b = functionUncurryThis; -var toObject$1 = toObject$2; - -var hasOwnProperty$a = uncurryThis$b({}.hasOwnProperty); - -// `HasOwnProperty` abstract operation -// https://tc39.es/ecma262/#sec-hasownproperty -// eslint-disable-next-line es/no-object-hasown -- safe -var hasOwnProperty_1 = Object.hasOwn || function hasOwn(it, key) { - return hasOwnProperty$a(toObject$1(it), key); -}; - -var uncurryThis$a = functionUncurryThis; - -var id = 0; -var postfix = Math.random(); -var toString$6 = uncurryThis$a(1.0.toString); - -var uid$2 = function (key) { - return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString$6(++id + postfix, 36); -}; - -var global$9 = global$e; -var shared$3 = shared$4; -var hasOwn$7 = hasOwnProperty_1; -var uid$1 = uid$2; -var NATIVE_SYMBOL = symbolConstructorDetection; -var USE_SYMBOL_AS_UID = useSymbolAsUid; - -var Symbol$2 = global$9.Symbol; -var WellKnownSymbolsStore = shared$3('wks'); -var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol$2['for'] || Symbol$2 : Symbol$2 && Symbol$2.withoutSetter || uid$1; - -var wellKnownSymbol$7 = function (name) { - if (!hasOwn$7(WellKnownSymbolsStore, name)) { - WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn$7(Symbol$2, name) - ? Symbol$2[name] - : createWellKnownSymbol('Symbol.' + name); - } return WellKnownSymbolsStore[name]; -}; - -var call$8 = functionCall; -var isObject$6 = isObject$8; -var isSymbol$2 = isSymbol$3; -var getMethod$2 = getMethod$3; -var ordinaryToPrimitive = ordinaryToPrimitive$1; -var wellKnownSymbol$6 = wellKnownSymbol$7; - -var $TypeError$4 = TypeError; -var TO_PRIMITIVE = wellKnownSymbol$6('toPrimitive'); - -// `ToPrimitive` abstract operation -// https://tc39.es/ecma262/#sec-toprimitive -var toPrimitive$1 = function (input, pref) { - if (!isObject$6(input) || isSymbol$2(input)) return input; - var exoticToPrim = getMethod$2(input, TO_PRIMITIVE); - var result; - if (exoticToPrim) { - if (pref === undefined) pref = 'default'; - result = call$8(exoticToPrim, input, pref); - if (!isObject$6(result) || isSymbol$2(result)) return result; - throw new $TypeError$4("Can't convert object to primitive value"); - } - if (pref === undefined) pref = 'number'; - return ordinaryToPrimitive(input, pref); -}; - -var toPrimitive = toPrimitive$1; -var isSymbol$1 = isSymbol$3; - -// `ToPropertyKey` abstract operation -// https://tc39.es/ecma262/#sec-topropertykey -var toPropertyKey$2 = function (argument) { - var key = toPrimitive(argument, 'string'); - return isSymbol$1(key) ? key : key + ''; -}; - -var global$8 = global$e; -var isObject$5 = isObject$8; - -var document$1 = global$8.document; -// typeof document.createElement is 'object' in old IE -var EXISTS$1 = isObject$5(document$1) && isObject$5(document$1.createElement); - -var documentCreateElement$1 = function (it) { - return EXISTS$1 ? document$1.createElement(it) : {}; -}; - -var DESCRIPTORS$7 = descriptors; -var fails$8 = fails$d; -var createElement = documentCreateElement$1; - -// Thanks to IE8 for its funny defineProperty -var ie8DomDefine = !DESCRIPTORS$7 && !fails$8(function () { - // eslint-disable-next-line es/no-object-defineproperty -- required for testing - return Object.defineProperty(createElement('div'), 'a', { - get: function () { return 7; } - }).a !== 7; -}); - -var DESCRIPTORS$6 = descriptors; -var call$7 = functionCall; -var propertyIsEnumerableModule = objectPropertyIsEnumerable; -var createPropertyDescriptor$1 = createPropertyDescriptor$2; -var toIndexedObject$3 = toIndexedObject$4; -var toPropertyKey$1 = toPropertyKey$2; -var hasOwn$6 = hasOwnProperty_1; -var IE8_DOM_DEFINE$1 = ie8DomDefine; - -// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe -var $getOwnPropertyDescriptor$1 = Object.getOwnPropertyDescriptor; - -// `Object.getOwnPropertyDescriptor` method -// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor -objectGetOwnPropertyDescriptor.f = DESCRIPTORS$6 ? $getOwnPropertyDescriptor$1 : function getOwnPropertyDescriptor(O, P) { - O = toIndexedObject$3(O); - P = toPropertyKey$1(P); - if (IE8_DOM_DEFINE$1) try { - return $getOwnPropertyDescriptor$1(O, P); - } catch (error) { /* empty */ } - if (hasOwn$6(O, P)) return createPropertyDescriptor$1(!call$7(propertyIsEnumerableModule.f, O, P), O[P]); -}; - -var objectDefineProperty = {}; - -var DESCRIPTORS$5 = descriptors; -var fails$7 = fails$d; - -// V8 ~ Chrome 36- -// https://bugs.chromium.org/p/v8/issues/detail?id=3334 -var v8PrototypeDefineBug = DESCRIPTORS$5 && fails$7(function () { - // eslint-disable-next-line es/no-object-defineproperty -- required for testing - return Object.defineProperty(function () { /* empty */ }, 'prototype', { - value: 42, - writable: false - }).prototype !== 42; -}); - -var isObject$4 = isObject$8; - -var $String$2 = String; -var $TypeError$3 = TypeError; - -// `Assert: Type(argument) is Object` -var anObject$7 = function (argument) { - if (isObject$4(argument)) return argument; - throw new $TypeError$3($String$2(argument) + ' is not an object'); -}; - -var DESCRIPTORS$4 = descriptors; -var IE8_DOM_DEFINE = ie8DomDefine; -var V8_PROTOTYPE_DEFINE_BUG$1 = v8PrototypeDefineBug; -var anObject$6 = anObject$7; -var toPropertyKey = toPropertyKey$2; - -var $TypeError$2 = TypeError; -// eslint-disable-next-line es/no-object-defineproperty -- safe -var $defineProperty = Object.defineProperty; -// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe -var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; -var ENUMERABLE = 'enumerable'; -var CONFIGURABLE$1 = 'configurable'; -var WRITABLE = 'writable'; - -// `Object.defineProperty` method -// https://tc39.es/ecma262/#sec-object.defineproperty -objectDefineProperty.f = DESCRIPTORS$4 ? V8_PROTOTYPE_DEFINE_BUG$1 ? function defineProperty(O, P, Attributes) { - anObject$6(O); - P = toPropertyKey(P); - anObject$6(Attributes); - if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) { - var current = $getOwnPropertyDescriptor(O, P); - if (current && current[WRITABLE]) { - O[P] = Attributes.value; - Attributes = { - configurable: CONFIGURABLE$1 in Attributes ? Attributes[CONFIGURABLE$1] : current[CONFIGURABLE$1], - enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE], - writable: false - }; - } - } return $defineProperty(O, P, Attributes); -} : $defineProperty : function defineProperty(O, P, Attributes) { - anObject$6(O); - P = toPropertyKey(P); - anObject$6(Attributes); - if (IE8_DOM_DEFINE) try { - return $defineProperty(O, P, Attributes); - } catch (error) { /* empty */ } - if ('get' in Attributes || 'set' in Attributes) throw new $TypeError$2('Accessors not supported'); - if ('value' in Attributes) O[P] = Attributes.value; - return O; -}; - -var DESCRIPTORS$3 = descriptors; -var definePropertyModule$3 = objectDefineProperty; -var createPropertyDescriptor = createPropertyDescriptor$2; - -var createNonEnumerableProperty$3 = DESCRIPTORS$3 ? function (object, key, value) { - return definePropertyModule$3.f(object, key, createPropertyDescriptor(1, value)); -} : function (object, key, value) { - object[key] = value; - return object; -}; - -var makeBuiltIn$2 = {exports: {}}; - -var DESCRIPTORS$2 = descriptors; -var hasOwn$5 = hasOwnProperty_1; - -var FunctionPrototype$1 = Function.prototype; -// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe -var getDescriptor = DESCRIPTORS$2 && Object.getOwnPropertyDescriptor; - -var EXISTS = hasOwn$5(FunctionPrototype$1, 'name'); -// additional protection from minified / mangled / dropped function names -var PROPER = EXISTS && (function something() { /* empty */ }).name === 'something'; -var CONFIGURABLE = EXISTS && (!DESCRIPTORS$2 || (DESCRIPTORS$2 && getDescriptor(FunctionPrototype$1, 'name').configurable)); - -var functionName = { - EXISTS: EXISTS, - PROPER: PROPER, - CONFIGURABLE: CONFIGURABLE -}; - -var uncurryThis$9 = functionUncurryThis; -var isCallable$8 = isCallable$e; -var store$1 = sharedStoreExports; - -var functionToString = uncurryThis$9(Function.toString); - -// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper -if (!isCallable$8(store$1.inspectSource)) { - store$1.inspectSource = function (it) { - return functionToString(it); - }; -} - -var inspectSource$1 = store$1.inspectSource; - -var global$7 = global$e; -var isCallable$7 = isCallable$e; - -var WeakMap$4 = global$7.WeakMap; - -var weakMapBasicDetection = isCallable$7(WeakMap$4) && /native code/.test(String(WeakMap$4)); - -var shared$2 = shared$4; -var uid = uid$2; - -var keys$1 = shared$2('keys'); - -var sharedKey$2 = function (key) { - return keys$1[key] || (keys$1[key] = uid(key)); -}; - -var hiddenKeys$4 = {}; - -var NATIVE_WEAK_MAP = weakMapBasicDetection; -var global$6 = global$e; -var isObject$3 = isObject$8; -var createNonEnumerableProperty$2 = createNonEnumerableProperty$3; -var hasOwn$4 = hasOwnProperty_1; -var shared$1 = sharedStoreExports; -var sharedKey$1 = sharedKey$2; -var hiddenKeys$3 = hiddenKeys$4; - -var OBJECT_ALREADY_INITIALIZED = 'Object already initialized'; -var TypeError$1 = global$6.TypeError; -var WeakMap$3 = global$6.WeakMap; -var set$1, get$1, has; - -var enforce = function (it) { - return has(it) ? get$1(it) : set$1(it, {}); -}; - -var getterFor = function (TYPE) { - return function (it) { - var state; - if (!isObject$3(it) || (state = get$1(it)).type !== TYPE) { - throw new TypeError$1('Incompatible receiver, ' + TYPE + ' required'); - } return state; - }; -}; - -if (NATIVE_WEAK_MAP || shared$1.state) { - var store = shared$1.state || (shared$1.state = new WeakMap$3()); - /* eslint-disable no-self-assign -- prototype methods protection */ - store.get = store.get; - store.has = store.has; - store.set = store.set; - /* eslint-enable no-self-assign -- prototype methods protection */ - set$1 = function (it, metadata) { - if (store.has(it)) throw new TypeError$1(OBJECT_ALREADY_INITIALIZED); - metadata.facade = it; - store.set(it, metadata); - return metadata; - }; - get$1 = function (it) { - return store.get(it) || {}; - }; - has = function (it) { - return store.has(it); - }; -} else { - var STATE = sharedKey$1('state'); - hiddenKeys$3[STATE] = true; - set$1 = function (it, metadata) { - if (hasOwn$4(it, STATE)) throw new TypeError$1(OBJECT_ALREADY_INITIALIZED); - metadata.facade = it; - createNonEnumerableProperty$2(it, STATE, metadata); - return metadata; - }; - get$1 = function (it) { - return hasOwn$4(it, STATE) ? it[STATE] : {}; - }; - has = function (it) { - return hasOwn$4(it, STATE); - }; -} - -var internalState = { - set: set$1, - get: get$1, - has: has, - enforce: enforce, - getterFor: getterFor -}; - -var uncurryThis$8 = functionUncurryThis; -var fails$6 = fails$d; -var isCallable$6 = isCallable$e; -var hasOwn$3 = hasOwnProperty_1; -var DESCRIPTORS$1 = descriptors; -var CONFIGURABLE_FUNCTION_NAME = functionName.CONFIGURABLE; -var inspectSource = inspectSource$1; -var InternalStateModule = internalState; - -var enforceInternalState = InternalStateModule.enforce; -var getInternalState$1 = InternalStateModule.get; -var $String$1 = String; -// eslint-disable-next-line es/no-object-defineproperty -- safe -var defineProperty$1 = Object.defineProperty; -var stringSlice$5 = uncurryThis$8(''.slice); -var replace$2 = uncurryThis$8(''.replace); -var join = uncurryThis$8([].join); - -var CONFIGURABLE_LENGTH = DESCRIPTORS$1 && !fails$6(function () { - return defineProperty$1(function () { /* empty */ }, 'length', { value: 8 }).length !== 8; -}); - -var TEMPLATE = String(String).split('String'); - -var makeBuiltIn$1 = makeBuiltIn$2.exports = function (value, name, options) { - if (stringSlice$5($String$1(name), 0, 7) === 'Symbol(') { - name = '[' + replace$2($String$1(name), /^Symbol\(([^)]*)\).*$/, '$1') + ']'; - } - if (options && options.getter) name = 'get ' + name; - if (options && options.setter) name = 'set ' + name; - if (!hasOwn$3(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) { - if (DESCRIPTORS$1) defineProperty$1(value, 'name', { value: name, configurable: true }); - else value.name = name; - } - if (CONFIGURABLE_LENGTH && options && hasOwn$3(options, 'arity') && value.length !== options.arity) { - defineProperty$1(value, 'length', { value: options.arity }); - } - try { - if (options && hasOwn$3(options, 'constructor') && options.constructor) { - if (DESCRIPTORS$1) defineProperty$1(value, 'prototype', { writable: false }); - // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable - } else if (value.prototype) value.prototype = undefined; - } catch (error) { /* empty */ } - var state = enforceInternalState(value); - if (!hasOwn$3(state, 'source')) { - state.source = join(TEMPLATE, typeof name == 'string' ? name : ''); - } return value; -}; - -// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative -// eslint-disable-next-line no-extend-native -- required -Function.prototype.toString = makeBuiltIn$1(function toString() { - return isCallable$6(this) && getInternalState$1(this).source || inspectSource(this); -}, 'toString'); - -var makeBuiltInExports = makeBuiltIn$2.exports; - -var isCallable$5 = isCallable$e; -var definePropertyModule$2 = objectDefineProperty; -var makeBuiltIn = makeBuiltInExports; -var defineGlobalProperty$1 = defineGlobalProperty$3; - -var defineBuiltIn$2 = function (O, key, value, options) { - if (!options) options = {}; - var simple = options.enumerable; - var name = options.name !== undefined ? options.name : key; - if (isCallable$5(value)) makeBuiltIn(value, name, options); - if (options.global) { - if (simple) O[key] = value; - else defineGlobalProperty$1(key, value); - } else { - try { - if (!options.unsafe) delete O[key]; - else if (O[key]) simple = true; - } catch (error) { /* empty */ } - if (simple) O[key] = value; - else definePropertyModule$2.f(O, key, { - value: value, - enumerable: false, - configurable: !options.nonConfigurable, - writable: !options.nonWritable - }); - } return O; -}; - -var objectGetOwnPropertyNames = {}; - -var ceil = Math.ceil; -var floor$1 = Math.floor; - -// `Math.trunc` method -// https://tc39.es/ecma262/#sec-math.trunc -// eslint-disable-next-line es/no-math-trunc -- safe -var mathTrunc = Math.trunc || function trunc(x) { - var n = +x; - return (n > 0 ? floor$1 : ceil)(n); -}; - -var trunc = mathTrunc; - -// `ToIntegerOrInfinity` abstract operation -// https://tc39.es/ecma262/#sec-tointegerorinfinity -var toIntegerOrInfinity$4 = function (argument) { - var number = +argument; - // eslint-disable-next-line no-self-compare -- NaN check - return number !== number || number === 0 ? 0 : trunc(number); -}; - -var toIntegerOrInfinity$3 = toIntegerOrInfinity$4; - -var max$4 = Math.max; -var min$4 = Math.min; - -// Helper for a popular repeating case of the spec: -// Let integer be ? ToInteger(index). -// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). -var toAbsoluteIndex$1 = function (index, length) { - var integer = toIntegerOrInfinity$3(index); - return integer < 0 ? max$4(integer + length, 0) : min$4(integer, length); -}; - -var toIntegerOrInfinity$2 = toIntegerOrInfinity$4; - -var min$3 = Math.min; - -// `ToLength` abstract operation -// https://tc39.es/ecma262/#sec-tolength -var toLength$2 = function (argument) { - var len = toIntegerOrInfinity$2(argument); - return len > 0 ? min$3(len, 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 -}; - -var toLength$1 = toLength$2; - -// `LengthOfArrayLike` abstract operation -// https://tc39.es/ecma262/#sec-lengthofarraylike -var lengthOfArrayLike$1 = function (obj) { - return toLength$1(obj.length); -}; - -var toIndexedObject$2 = toIndexedObject$4; -var toAbsoluteIndex = toAbsoluteIndex$1; -var lengthOfArrayLike = lengthOfArrayLike$1; - -// `Array.prototype.{ indexOf, includes }` methods implementation -var createMethod$1 = function (IS_INCLUDES) { - return function ($this, el, fromIndex) { - var O = toIndexedObject$2($this); - var length = lengthOfArrayLike(O); - if (length === 0) return !IS_INCLUDES && -1; - var index = toAbsoluteIndex(fromIndex, length); - var value; - // Array#includes uses SameValueZero equality algorithm - // eslint-disable-next-line no-self-compare -- NaN check - if (IS_INCLUDES && el !== el) while (length > index) { - value = O[index++]; - // eslint-disable-next-line no-self-compare -- NaN check - if (value !== value) return true; - // Array#indexOf ignores holes, Array#includes - not - } else for (;length > index; index++) { - if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; - } return !IS_INCLUDES && -1; - }; -}; - -var arrayIncludes = { - // `Array.prototype.includes` method - // https://tc39.es/ecma262/#sec-array.prototype.includes - includes: createMethod$1(true), - // `Array.prototype.indexOf` method - // https://tc39.es/ecma262/#sec-array.prototype.indexof - indexOf: createMethod$1(false) -}; - -var uncurryThis$7 = functionUncurryThis; -var hasOwn$2 = hasOwnProperty_1; -var toIndexedObject$1 = toIndexedObject$4; -var indexOf$2 = arrayIncludes.indexOf; -var hiddenKeys$2 = hiddenKeys$4; - -var push$1 = uncurryThis$7([].push); - -var objectKeysInternal = function (object, names) { - var O = toIndexedObject$1(object); - var i = 0; - var result = []; - var key; - for (key in O) !hasOwn$2(hiddenKeys$2, key) && hasOwn$2(O, key) && push$1(result, key); - // Don't enum bug & hidden keys - while (names.length > i) if (hasOwn$2(O, key = names[i++])) { - ~indexOf$2(result, key) || push$1(result, key); - } - return result; -}; - -// IE8- don't enum bug keys -var enumBugKeys$3 = [ - 'constructor', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'toLocaleString', - 'toString', - 'valueOf' -]; - -var internalObjectKeys$1 = objectKeysInternal; -var enumBugKeys$2 = enumBugKeys$3; - -var hiddenKeys$1 = enumBugKeys$2.concat('length', 'prototype'); - -// `Object.getOwnPropertyNames` method -// https://tc39.es/ecma262/#sec-object.getownpropertynames -// eslint-disable-next-line es/no-object-getownpropertynames -- safe -objectGetOwnPropertyNames.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { - return internalObjectKeys$1(O, hiddenKeys$1); -}; - -var objectGetOwnPropertySymbols = {}; - -// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe -objectGetOwnPropertySymbols.f = Object.getOwnPropertySymbols; - -var getBuiltIn$1 = getBuiltIn$3; -var uncurryThis$6 = functionUncurryThis; -var getOwnPropertyNamesModule = objectGetOwnPropertyNames; -var getOwnPropertySymbolsModule = objectGetOwnPropertySymbols; -var anObject$5 = anObject$7; - -var concat$5 = uncurryThis$6([].concat); - -// all object keys, includes non-enumerable and symbols -var ownKeys$1 = getBuiltIn$1('Reflect', 'ownKeys') || function ownKeys(it) { - var keys = getOwnPropertyNamesModule.f(anObject$5(it)); - var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; - return getOwnPropertySymbols ? concat$5(keys, getOwnPropertySymbols(it)) : keys; -}; - -var hasOwn$1 = hasOwnProperty_1; -var ownKeys = ownKeys$1; -var getOwnPropertyDescriptorModule = objectGetOwnPropertyDescriptor; -var definePropertyModule$1 = objectDefineProperty; - -var copyConstructorProperties$1 = function (target, source, exceptions) { - var keys = ownKeys(source); - var defineProperty = definePropertyModule$1.f; - var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - if (!hasOwn$1(target, key) && !(exceptions && hasOwn$1(exceptions, key))) { - defineProperty(target, key, getOwnPropertyDescriptor(source, key)); - } - } -}; - -var fails$5 = fails$d; -var isCallable$4 = isCallable$e; - -var replacement = /#|\.prototype\./; - -var isForced$2 = function (feature, detection) { - var value = data[normalize(feature)]; - return value === POLYFILL ? true - : value === NATIVE ? false - : isCallable$4(detection) ? fails$5(detection) - : !!detection; -}; - -var normalize = isForced$2.normalize = function (string) { - return String(string).replace(replacement, '.').toLowerCase(); -}; - -var data = isForced$2.data = {}; -var NATIVE = isForced$2.NATIVE = 'N'; -var POLYFILL = isForced$2.POLYFILL = 'P'; - -var isForced_1 = isForced$2; - -var global$5 = global$e; -var getOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f; -var createNonEnumerableProperty$1 = createNonEnumerableProperty$3; -var defineBuiltIn$1 = defineBuiltIn$2; -var defineGlobalProperty = defineGlobalProperty$3; -var copyConstructorProperties = copyConstructorProperties$1; -var isForced$1 = isForced_1; - -/* - options.target - name of the target object - options.global - target is the global object - options.stat - export as static methods of target - options.proto - export as prototype methods of target - options.real - real prototype method for the `pure` version - options.forced - export even if the native feature is available - options.bind - bind methods to the target, required for the `pure` version - options.wrap - wrap constructors to preventing global pollution, required for the `pure` version - options.unsafe - use the simple assignment of property instead of delete + defineProperty - options.sham - add a flag to not completely full polyfills - options.enumerable - export as enumerable property - options.dontCallGetSet - prevent calling a getter on target - options.name - the .name of the function if it does not match the key -*/ -var _export = function (options, source) { - var TARGET = options.target; - var GLOBAL = options.global; - var STATIC = options.stat; - var FORCED, target, key, targetProperty, sourceProperty, descriptor; - if (GLOBAL) { - target = global$5; - } else if (STATIC) { - target = global$5[TARGET] || defineGlobalProperty(TARGET, {}); - } else { - target = global$5[TARGET] && global$5[TARGET].prototype; - } - if (target) for (key in source) { - sourceProperty = source[key]; - if (options.dontCallGetSet) { - descriptor = getOwnPropertyDescriptor(target, key); - targetProperty = descriptor && descriptor.value; - } else targetProperty = target[key]; - FORCED = isForced$1(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); - // contained in target - if (!FORCED && targetProperty !== undefined) { - if (typeof sourceProperty == typeof targetProperty) continue; - copyConstructorProperties(sourceProperty, targetProperty); - } - // add a flag to not completely full polyfills - if (options.sham || (targetProperty && targetProperty.sham)) { - createNonEnumerableProperty$1(sourceProperty, 'sham', true); - } - defineBuiltIn$1(target, key, sourceProperty, options); - } -}; - -var wellKnownSymbol$5 = wellKnownSymbol$7; - -var TO_STRING_TAG$1 = wellKnownSymbol$5('toStringTag'); -var test = {}; - -test[TO_STRING_TAG$1] = 'z'; - -var toStringTagSupport = String(test) === '[object z]'; - -var TO_STRING_TAG_SUPPORT = toStringTagSupport; -var isCallable$3 = isCallable$e; -var classofRaw = classofRaw$1; -var wellKnownSymbol$4 = wellKnownSymbol$7; - -var TO_STRING_TAG = wellKnownSymbol$4('toStringTag'); -var $Object = Object; - -// ES3 wrong here -var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments'; - -// fallback for IE11 Script Access Denied error -var tryGet = function (it, key) { - try { - return it[key]; - } catch (error) { /* empty */ } -}; - -// getting tag from ES6+ `Object.prototype.toString` -var classof$3 = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { - var O, tag, result; - return it === undefined ? 'Undefined' : it === null ? 'Null' - // @@toStringTag case - : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag - // builtinTag case - : CORRECT_ARGUMENTS ? classofRaw(O) - // ES3 arguments fallback - : (result = classofRaw(O)) === 'Object' && isCallable$3(O.callee) ? 'Arguments' : result; -}; - -var classof$2 = classof$3; - -var $String = String; - -var toString$5 = function (argument) { - if (classof$2(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string'); - return $String(argument); -}; - -var anObject$4 = anObject$7; - -// `RegExp.prototype.flags` getter implementation -// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags -var regexpFlags$1 = function () { - var that = anObject$4(this); - var result = ''; - if (that.hasIndices) result += 'd'; - if (that.global) result += 'g'; - if (that.ignoreCase) result += 'i'; - if (that.multiline) result += 'm'; - if (that.dotAll) result += 's'; - if (that.unicode) result += 'u'; - if (that.unicodeSets) result += 'v'; - if (that.sticky) result += 'y'; - return result; -}; - -var fails$4 = fails$d; -var global$4 = global$e; - -// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError -var $RegExp$2 = global$4.RegExp; - -var UNSUPPORTED_Y$1 = fails$4(function () { - var re = $RegExp$2('a', 'y'); - re.lastIndex = 2; - return re.exec('abcd') !== null; -}); - -// UC Browser bug -// https://github.com/zloirock/core-js/issues/1008 -var MISSED_STICKY = UNSUPPORTED_Y$1 || fails$4(function () { - return !$RegExp$2('a', 'y').sticky; -}); - -var BROKEN_CARET = UNSUPPORTED_Y$1 || fails$4(function () { - // https://bugzilla.mozilla.org/show_bug.cgi?id=773687 - var re = $RegExp$2('^r', 'gy'); - re.lastIndex = 2; - return re.exec('str') !== null; -}); - -var regexpStickyHelpers = { - BROKEN_CARET: BROKEN_CARET, - MISSED_STICKY: MISSED_STICKY, - UNSUPPORTED_Y: UNSUPPORTED_Y$1 -}; - -var objectDefineProperties = {}; - -var internalObjectKeys = objectKeysInternal; -var enumBugKeys$1 = enumBugKeys$3; - -// `Object.keys` method -// https://tc39.es/ecma262/#sec-object.keys -// eslint-disable-next-line es/no-object-keys -- safe -var objectKeys$1 = Object.keys || function keys(O) { - return internalObjectKeys(O, enumBugKeys$1); -}; - -var DESCRIPTORS = descriptors; -var V8_PROTOTYPE_DEFINE_BUG = v8PrototypeDefineBug; -var definePropertyModule = objectDefineProperty; -var anObject$3 = anObject$7; -var toIndexedObject = toIndexedObject$4; -var objectKeys = objectKeys$1; - -// `Object.defineProperties` method -// https://tc39.es/ecma262/#sec-object.defineproperties -// eslint-disable-next-line es/no-object-defineproperties -- safe -objectDefineProperties.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) { - anObject$3(O); - var props = toIndexedObject(Properties); - var keys = objectKeys(Properties); - var length = keys.length; - var index = 0; - var key; - while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]); - return O; -}; - -var getBuiltIn = getBuiltIn$3; - -var html$1 = getBuiltIn('document', 'documentElement'); - -/* global ActiveXObject -- old IE, WSH */ -var anObject$2 = anObject$7; -var definePropertiesModule = objectDefineProperties; -var enumBugKeys = enumBugKeys$3; -var hiddenKeys = hiddenKeys$4; -var html = html$1; -var documentCreateElement = documentCreateElement$1; -var sharedKey = sharedKey$2; - -var GT = '>'; -var LT = '<'; -var PROTOTYPE = 'prototype'; -var SCRIPT = 'script'; -var IE_PROTO = sharedKey('IE_PROTO'); - -var EmptyConstructor = function () { /* empty */ }; - -var scriptTag = function (content) { - return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; -}; - -// Create object with fake `null` prototype: use ActiveX Object with cleared prototype -var NullProtoObjectViaActiveX = function (activeXDocument) { - activeXDocument.write(scriptTag('')); - activeXDocument.close(); - var temp = activeXDocument.parentWindow.Object; - activeXDocument = null; // avoid memory leak - return temp; -}; - -// Create object with fake `null` prototype: use iframe Object with cleared prototype -var NullProtoObjectViaIFrame = function () { - // Thrash, waste and sodomy: IE GC bug - var iframe = documentCreateElement('iframe'); - var JS = 'java' + SCRIPT + ':'; - var iframeDocument; - iframe.style.display = 'none'; - html.appendChild(iframe); - // https://github.com/zloirock/core-js/issues/475 - iframe.src = String(JS); - iframeDocument = iframe.contentWindow.document; - iframeDocument.open(); - iframeDocument.write(scriptTag('document.F=Object')); - iframeDocument.close(); - return iframeDocument.F; -}; - -// Check for document.domain and active x support -// No need to use active x approach when document.domain is not set -// see https://github.com/es-shims/es5-shim/issues/150 -// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 -// avoid IE GC bug -var activeXDocument; -var NullProtoObject = function () { - try { - activeXDocument = new ActiveXObject('htmlfile'); - } catch (error) { /* ignore */ } - NullProtoObject = typeof document != 'undefined' - ? document.domain && activeXDocument - ? NullProtoObjectViaActiveX(activeXDocument) // old IE - : NullProtoObjectViaIFrame() - : NullProtoObjectViaActiveX(activeXDocument); // WSH - var length = enumBugKeys.length; - while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; - return NullProtoObject(); -}; - -hiddenKeys[IE_PROTO] = true; - -// `Object.create` method -// https://tc39.es/ecma262/#sec-object.create -// eslint-disable-next-line es/no-object-create -- safe -var objectCreate = Object.create || function create(O, Properties) { - var result; - if (O !== null) { - EmptyConstructor[PROTOTYPE] = anObject$2(O); - result = new EmptyConstructor(); - EmptyConstructor[PROTOTYPE] = null; - // add "__proto__" for Object.getPrototypeOf polyfill - result[IE_PROTO] = O; - } else result = NullProtoObject(); - return Properties === undefined ? result : definePropertiesModule.f(result, Properties); -}; - -var fails$3 = fails$d; -var global$3 = global$e; - -// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError -var $RegExp$1 = global$3.RegExp; - -var regexpUnsupportedDotAll = fails$3(function () { - var re = $RegExp$1('.', 's'); - return !(re.dotAll && re.test('\n') && re.flags === 's'); -}); - -var fails$2 = fails$d; -var global$2 = global$e; - -// babel-minify and Closure Compiler transpiles RegExp('(?b)', 'g') -> /(?b)/g and it causes SyntaxError -var $RegExp = global$2.RegExp; - -var regexpUnsupportedNcg = fails$2(function () { - var re = $RegExp('(?b)', 'g'); - return re.exec('b').groups.a !== 'b' || - 'b'.replace(re, '$c') !== 'bc'; -}); - -/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */ -/* eslint-disable regexp/no-useless-quantifier -- testing */ -var call$6 = functionCall; -var uncurryThis$5 = functionUncurryThis; -var toString$4 = toString$5; -var regexpFlags = regexpFlags$1; -var stickyHelpers = regexpStickyHelpers; -var shared = shared$4; -var create = objectCreate; -var getInternalState = internalState.get; -var UNSUPPORTED_DOT_ALL = regexpUnsupportedDotAll; -var UNSUPPORTED_NCG = regexpUnsupportedNcg; - -var nativeReplace = shared('native-string-replace', String.prototype.replace); -var nativeExec = RegExp.prototype.exec; -var patchedExec = nativeExec; -var charAt$3 = uncurryThis$5(''.charAt); -var indexOf$1 = uncurryThis$5(''.indexOf); -var replace$1 = uncurryThis$5(''.replace); -var stringSlice$4 = uncurryThis$5(''.slice); - -var UPDATES_LAST_INDEX_WRONG = (function () { - var re1 = /a/; - var re2 = /b*/g; - call$6(nativeExec, re1, 'a'); - call$6(nativeExec, re2, 'a'); - return re1.lastIndex !== 0 || re2.lastIndex !== 0; -})(); - -var UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET; - -// nonparticipating capturing group, copied from es5-shim's String#split patch. -var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; - -var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG; - -if (PATCH) { - patchedExec = function exec(string) { - var re = this; - var state = getInternalState(re); - var str = toString$4(string); - var raw = state.raw; - var result, reCopy, lastIndex, match, i, object, group; - - if (raw) { - raw.lastIndex = re.lastIndex; - result = call$6(patchedExec, raw, str); - re.lastIndex = raw.lastIndex; - return result; - } - - var groups = state.groups; - var sticky = UNSUPPORTED_Y && re.sticky; - var flags = call$6(regexpFlags, re); - var source = re.source; - var charsAdded = 0; - var strCopy = str; - - if (sticky) { - flags = replace$1(flags, 'y', ''); - if (indexOf$1(flags, 'g') === -1) { - flags += 'g'; - } - - strCopy = stringSlice$4(str, re.lastIndex); - // Support anchored sticky behavior. - if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt$3(str, re.lastIndex - 1) !== '\n')) { - source = '(?: ' + source + ')'; - strCopy = ' ' + strCopy; - charsAdded++; - } - // ^(? + rx + ) is needed, in combination with some str slicing, to - // simulate the 'y' flag. - reCopy = new RegExp('^(?:' + source + ')', flags); - } - - if (NPCG_INCLUDED) { - reCopy = new RegExp('^' + source + '$(?!\\s)', flags); - } - if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex; - - match = call$6(nativeExec, sticky ? reCopy : re, strCopy); - - if (sticky) { - if (match) { - match.input = stringSlice$4(match.input, charsAdded); - match[0] = stringSlice$4(match[0], charsAdded); - match.index = re.lastIndex; - re.lastIndex += match[0].length; - } else re.lastIndex = 0; - } else if (UPDATES_LAST_INDEX_WRONG && match) { - re.lastIndex = re.global ? match.index + match[0].length : lastIndex; - } - if (NPCG_INCLUDED && match && match.length > 1) { - // Fix browsers whose `exec` methods don't consistently return `undefined` - // for NPCG, like IE8. NOTE: This doesn't work for /(.?)?/ - call$6(nativeReplace, match[0], reCopy, function () { - for (i = 1; i < arguments.length - 2; i++) { - if (arguments[i] === undefined) match[i] = undefined; - } - }); - } - - if (match && groups) { - match.groups = object = create(null); - for (i = 0; i < groups.length; i++) { - group = groups[i]; - object[group[0]] = match[group[1]]; - } - } - - return match; - }; -} - -var regexpExec$2 = patchedExec; - -var $$1 = _export; -var exec$1 = regexpExec$2; - -// `RegExp.prototype.exec` method -// https://tc39.es/ecma262/#sec-regexp.prototype.exec -$$1({ target: 'RegExp', proto: true, forced: /./.exec !== exec$1 }, { - exec: exec$1 -}); - -var NATIVE_BIND = functionBindNative; - -var FunctionPrototype = Function.prototype; -var apply$1 = FunctionPrototype.apply; -var call$5 = FunctionPrototype.call; - -// eslint-disable-next-line es/no-reflect -- safe -var functionApply = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call$5.bind(apply$1) : function () { - return call$5.apply(apply$1, arguments); -}); - -// TODO: Remove from `core-js@4` since it's moved to entry points - -var call$4 = functionCall; -var defineBuiltIn = defineBuiltIn$2; -var regexpExec$1 = regexpExec$2; -var fails$1 = fails$d; -var wellKnownSymbol$3 = wellKnownSymbol$7; -var createNonEnumerableProperty = createNonEnumerableProperty$3; - -var SPECIES = wellKnownSymbol$3('species'); -var RegExpPrototype$1 = RegExp.prototype; - -var fixRegexpWellKnownSymbolLogic = function (KEY, exec, FORCED, SHAM) { - var SYMBOL = wellKnownSymbol$3(KEY); - - var DELEGATES_TO_SYMBOL = !fails$1(function () { - // String methods call symbol-named RegExp methods - var O = {}; - O[SYMBOL] = function () { return 7; }; - return ''[KEY](O) !== 7; - }); - - var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails$1(function () { - // Symbol-named RegExp methods call .exec - var execCalled = false; - var re = /a/; - - if (KEY === 'split') { - // We can't use real regex here since it causes deoptimization - // and serious performance degradation in V8 - // https://github.com/zloirock/core-js/issues/306 - re = {}; - // RegExp[@@split] doesn't call the regex's exec method, but first creates - // a new one. We need to return the patched regex when creating the new one. - re.constructor = {}; - re.constructor[SPECIES] = function () { return re; }; - re.flags = ''; - re[SYMBOL] = /./[SYMBOL]; - } - - re.exec = function () { - execCalled = true; - return null; - }; - - re[SYMBOL](''); - return !execCalled; - }); - - if ( - !DELEGATES_TO_SYMBOL || - !DELEGATES_TO_EXEC || - FORCED - ) { - var nativeRegExpMethod = /./[SYMBOL]; - var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) { - var $exec = regexp.exec; - if ($exec === regexpExec$1 || $exec === RegExpPrototype$1.exec) { - if (DELEGATES_TO_SYMBOL && !forceStringMethod) { - // The native String method already delegates to @@method (this - // polyfilled function), leasing to infinite recursion. - // We avoid it by directly calling the native @@method method. - return { done: true, value: call$4(nativeRegExpMethod, regexp, str, arg2) }; - } - return { done: true, value: call$4(nativeMethod, str, regexp, arg2) }; - } - return { done: false }; - }); - - defineBuiltIn(String.prototype, KEY, methods[0]); - defineBuiltIn(RegExpPrototype$1, SYMBOL, methods[1]); - } - - if (SHAM) createNonEnumerableProperty(RegExpPrototype$1[SYMBOL], 'sham', true); -}; - -var uncurryThis$4 = functionUncurryThis; -var toIntegerOrInfinity$1 = toIntegerOrInfinity$4; -var toString$3 = toString$5; -var requireObjectCoercible$2 = requireObjectCoercible$5; - -var charAt$2 = uncurryThis$4(''.charAt); -var charCodeAt = uncurryThis$4(''.charCodeAt); -var stringSlice$3 = uncurryThis$4(''.slice); - -var createMethod = function (CONVERT_TO_STRING) { - return function ($this, pos) { - var S = toString$3(requireObjectCoercible$2($this)); - var position = toIntegerOrInfinity$1(pos); - var size = S.length; - var first, second; - if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; - first = charCodeAt(S, position); - return first < 0xD800 || first > 0xDBFF || position + 1 === size - || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF - ? CONVERT_TO_STRING - ? charAt$2(S, position) - : first - : CONVERT_TO_STRING - ? stringSlice$3(S, position, position + 2) - : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; - }; -}; - -var stringMultibyte = { - // `String.prototype.codePointAt` method - // https://tc39.es/ecma262/#sec-string.prototype.codepointat - codeAt: createMethod(false), - // `String.prototype.at` method - // https://github.com/mathiasbynens/String.prototype.at - charAt: createMethod(true) -}; - -var charAt$1 = stringMultibyte.charAt; - -// `AdvanceStringIndex` abstract operation -// https://tc39.es/ecma262/#sec-advancestringindex -var advanceStringIndex$1 = function (S, index, unicode) { - return index + (unicode ? charAt$1(S, index).length : 1); -}; - -var uncurryThis$3 = functionUncurryThis; -var toObject = toObject$2; - -var floor = Math.floor; -var charAt = uncurryThis$3(''.charAt); -var replace = uncurryThis$3(''.replace); -var stringSlice$2 = uncurryThis$3(''.slice); -// eslint-disable-next-line redos/no-vulnerable -- safe -var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d{1,2}|<[^>]*>)/g; -var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d{1,2})/g; - -// `GetSubstitution` abstract operation -// https://tc39.es/ecma262/#sec-getsubstitution -var getSubstitution$2 = function (matched, str, position, captures, namedCaptures, replacement) { - var tailPos = position + matched.length; - var m = captures.length; - var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED; - if (namedCaptures !== undefined) { - namedCaptures = toObject(namedCaptures); - symbols = SUBSTITUTION_SYMBOLS; - } - return replace(replacement, symbols, function (match, ch) { - var capture; - switch (charAt(ch, 0)) { - case '$': return '$'; - case '&': return matched; - case '`': return stringSlice$2(str, 0, position); - case "'": return stringSlice$2(str, tailPos); - case '<': - capture = namedCaptures[stringSlice$2(ch, 1, -1)]; - break; - default: // \d\d? - var n = +ch; - if (n === 0) return match; - if (n > m) { - var f = floor(n / 10); - if (f === 0) return match; - if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1); - return match; - } - capture = captures[n - 1]; - } - return capture === undefined ? '' : capture; - }); -}; - -var call$3 = functionCall; -var anObject$1 = anObject$7; -var isCallable$2 = isCallable$e; -var classof$1 = classofRaw$1; -var regexpExec = regexpExec$2; - -var $TypeError$1 = TypeError; - -// `RegExpExec` abstract operation -// https://tc39.es/ecma262/#sec-regexpexec -var regexpExecAbstract = function (R, S) { - var exec = R.exec; - if (isCallable$2(exec)) { - var result = call$3(exec, R, S); - if (result !== null) anObject$1(result); - return result; - } - if (classof$1(R) === 'RegExp') return call$3(regexpExec, R, S); - throw new $TypeError$1('RegExp#exec called on incompatible receiver'); -}; - -var apply = functionApply; -var call$2 = functionCall; -var uncurryThis$2 = functionUncurryThis; -var fixRegExpWellKnownSymbolLogic = fixRegexpWellKnownSymbolLogic; -var fails = fails$d; -var anObject = anObject$7; -var isCallable$1 = isCallable$e; -var isNullOrUndefined$1 = isNullOrUndefined$4; -var toIntegerOrInfinity = toIntegerOrInfinity$4; -var toLength = toLength$2; -var toString$2 = toString$5; -var requireObjectCoercible$1 = requireObjectCoercible$5; -var advanceStringIndex = advanceStringIndex$1; -var getMethod$1 = getMethod$3; -var getSubstitution$1 = getSubstitution$2; -var regExpExec = regexpExecAbstract; -var wellKnownSymbol$2 = wellKnownSymbol$7; - -var REPLACE$1 = wellKnownSymbol$2('replace'); -var max$3 = Math.max; -var min$2 = Math.min; -var concat$4 = uncurryThis$2([].concat); -var push = uncurryThis$2([].push); -var stringIndexOf = uncurryThis$2(''.indexOf); -var stringSlice$1 = uncurryThis$2(''.slice); - -var maybeToString = function (it) { - return it === undefined ? it : String(it); -}; - -// IE <= 11 replaces $0 with the whole match, as if it was $& -// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0 -var REPLACE_KEEPS_$0 = (function () { - // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing - return 'a'.replace(/./, '$0') === '$0'; -})(); - -// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string -var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () { - if (/./[REPLACE$1]) { - return /./[REPLACE$1]('a', '$0') === ''; - } - return false; -})(); - -var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () { - var re = /./; - re.exec = function () { - var result = []; - result.groups = { a: '7' }; - return result; - }; - // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive - return ''.replace(re, '$') !== '7'; -}); - -// @@replace logic -fixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) { - var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0'; - - return [ - // `String.prototype.replace` method - // https://tc39.es/ecma262/#sec-string.prototype.replace - function replace(searchValue, replaceValue) { - var O = requireObjectCoercible$1(this); - var replacer = isNullOrUndefined$1(searchValue) ? undefined : getMethod$1(searchValue, REPLACE$1); - return replacer - ? call$2(replacer, searchValue, O, replaceValue) - : call$2(nativeReplace, toString$2(O), searchValue, replaceValue); - }, - // `RegExp.prototype[@@replace]` method - // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace - function (string, replaceValue) { - var rx = anObject(this); - var S = toString$2(string); - - if ( - typeof replaceValue == 'string' && - stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 && - stringIndexOf(replaceValue, '$<') === -1 - ) { - var res = maybeCallNative(nativeReplace, rx, S, replaceValue); - if (res.done) return res.value; - } - - var functionalReplace = isCallable$1(replaceValue); - if (!functionalReplace) replaceValue = toString$2(replaceValue); - - var global = rx.global; - var fullUnicode; - if (global) { - fullUnicode = rx.unicode; - rx.lastIndex = 0; - } - - var results = []; - var result; - while (true) { - result = regExpExec(rx, S); - if (result === null) break; - - push(results, result); - if (!global) break; - - var matchStr = toString$2(result[0]); - if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); - } - - var accumulatedResult = ''; - var nextSourcePosition = 0; - for (var i = 0; i < results.length; i++) { - result = results[i]; - - var matched = toString$2(result[0]); - var position = max$3(min$2(toIntegerOrInfinity(result.index), S.length), 0); - var captures = []; - var replacement; - // NOTE: This is equivalent to - // captures = result.slice(1).map(maybeToString) - // but for some reason `nativeSlice.call(result, 1, result.length)` (called in - // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and - // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it. - for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j])); - var namedCaptures = result.groups; - if (functionalReplace) { - var replacerArgs = concat$4([matched], captures, position, S); - if (namedCaptures !== undefined) push(replacerArgs, namedCaptures); - replacement = toString$2(apply(replaceValue, undefined, replacerArgs)); - } else { - replacement = getSubstitution$1(matched, S, position, captures, namedCaptures, replaceValue); - } - if (position >= nextSourcePosition) { - accumulatedResult += stringSlice$1(S, nextSourcePosition, position) + replacement; - nextSourcePosition = position + matched.length; - } - } - - return accumulatedResult + stringSlice$1(S, nextSourcePosition); - } - ]; -}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE); - -var isObject$2 = isObject$8; -var classof = classofRaw$1; -var wellKnownSymbol$1 = wellKnownSymbol$7; - -var MATCH = wellKnownSymbol$1('match'); - -// `IsRegExp` abstract operation -// https://tc39.es/ecma262/#sec-isregexp -var isRegexp = function (it) { - var isRegExp; - return isObject$2(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) === 'RegExp'); -}; - -var call$1 = functionCall; -var hasOwn = hasOwnProperty_1; -var isPrototypeOf = objectIsPrototypeOf; -var regExpFlags = regexpFlags$1; - -var RegExpPrototype = RegExp.prototype; - -var regexpGetFlags = function (R) { - var flags = R.flags; - return flags === undefined && !('flags' in RegExpPrototype) && !hasOwn(R, 'flags') && isPrototypeOf(RegExpPrototype, R) - ? call$1(regExpFlags, R) : flags; -}; - -var $ = _export; -var call = functionCall; -var uncurryThis$1 = functionUncurryThis; -var requireObjectCoercible = requireObjectCoercible$5; -var isCallable = isCallable$e; -var isNullOrUndefined = isNullOrUndefined$4; -var isRegExp = isRegexp; -var toString$1 = toString$5; -var getMethod = getMethod$3; -var getRegExpFlags = regexpGetFlags; -var getSubstitution = getSubstitution$2; -var wellKnownSymbol = wellKnownSymbol$7; - -var REPLACE = wellKnownSymbol('replace'); -var $TypeError = TypeError; -var indexOf = uncurryThis$1(''.indexOf); -uncurryThis$1(''.replace); -var stringSlice = uncurryThis$1(''.slice); -var max$2 = Math.max; - -// `String.prototype.replaceAll` method -// https://tc39.es/ecma262/#sec-string.prototype.replaceall -$({ target: 'String', proto: true }, { - replaceAll: function replaceAll(searchValue, replaceValue) { - var O = requireObjectCoercible(this); - var IS_REG_EXP, flags, replacer, string, searchString, functionalReplace, searchLength, advanceBy, replacement; - var position = 0; - var endOfLastMatch = 0; - var result = ''; - if (!isNullOrUndefined(searchValue)) { - IS_REG_EXP = isRegExp(searchValue); - if (IS_REG_EXP) { - flags = toString$1(requireObjectCoercible(getRegExpFlags(searchValue))); - if (!~indexOf(flags, 'g')) throw new $TypeError('`.replaceAll` does not allow non-global regexes'); - } - replacer = getMethod(searchValue, REPLACE); - if (replacer) { - return call(replacer, searchValue, O, replaceValue); - } - } - string = toString$1(O); - searchString = toString$1(searchValue); - functionalReplace = isCallable(replaceValue); - if (!functionalReplace) replaceValue = toString$1(replaceValue); - searchLength = searchString.length; - advanceBy = max$2(1, searchLength); - position = indexOf(string, searchString); - while (position !== -1) { - replacement = functionalReplace - ? toString$1(replaceValue(searchString, position, string)) - : getSubstitution(searchString, string, position, [], undefined, replaceValue); - result += stringSlice(string, endOfLastMatch, position) + replacement; - endOfLastMatch = position + searchLength; - position = position + advanceBy > string.length ? -1 : indexOf(string, searchString, position + advanceBy); - } - if (endOfLastMatch < string.length) { - result += stringSlice(string, endOfLastMatch); - } - return result; - } -}); - -var global$1 = global$e; -var uncurryThis = functionUncurryThis; - -var entryUnbind$1 = function (CONSTRUCTOR, METHOD) { - return uncurryThis(global$1[CONSTRUCTOR].prototype[METHOD]); -}; - -var entryUnbind = entryUnbind$1; - -entryUnbind('String', 'replaceAll'); - -const NODE_INITIAL = 0; -const NODE_SUCCESS = 1; -const NODE_ERRORED = 2; -const START_OF_INPUT = `\u0001`; -const END_OF_INPUT = `\u0000`; -const HELP_COMMAND_INDEX = -1; -const HELP_REGEX = /^(-h|--help)(?:=([0-9]+))?$/; -const OPTION_REGEX = /^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/; -const BATCH_REGEX = /^-[a-zA-Z]{2,}$/; -const BINDING_REGEX = /^([^=]+)=([\s\S]*)$/; -const DEBUG = process.env.DEBUG_CLI === `1`; - -/** - * A generic usage error with the name `UsageError`. - * - * It should be used over `Error` only when it's the user's fault. - */ -class UsageError extends Error { - constructor(message) { - super(message); - this.clipanion = { type: `usage` }; - this.name = `UsageError`; - } -} -class UnknownSyntaxError extends Error { - constructor(input, candidates) { - super(); - this.input = input; - this.candidates = candidates; - this.clipanion = { type: `none` }; - this.name = `UnknownSyntaxError`; - if (this.candidates.length === 0) { - this.message = `Command not found, but we're not sure what's the alternative.`; - } - else if (this.candidates.every(candidate => candidate.reason !== null && candidate.reason === candidates[0].reason)) { - const [{ reason }] = this.candidates; - this.message = `${reason}\n\n${this.candidates.map(({ usage }) => `$ ${usage}`).join(`\n`)}`; - } - else if (this.candidates.length === 1) { - const [{ usage }] = this.candidates; - this.message = `Command not found; did you mean:\n\n$ ${usage}\n${whileRunning(input)}`; - } - else { - this.message = `Command not found; did you mean one of:\n\n${this.candidates.map(({ usage }, index) => { - return `${`${index}.`.padStart(4)} ${usage}`; - }).join(`\n`)}\n\n${whileRunning(input)}`; - } - } -} -class AmbiguousSyntaxError extends Error { - constructor(input, usages) { - super(); - this.input = input; - this.usages = usages; - this.clipanion = { type: `none` }; - this.name = `AmbiguousSyntaxError`; - this.message = `Cannot find which to pick amongst the following alternatives:\n\n${this.usages.map((usage, index) => { - return `${`${index}.`.padStart(4)} ${usage}`; - }).join(`\n`)}\n\n${whileRunning(input)}`; - } -} -const whileRunning = (input) => `While running ${input.filter(token => { - return token !== END_OF_INPUT; -}).map(token => { - const json = JSON.stringify(token); - if (token.match(/\s/) || token.length === 0 || json !== `"${token}"`) { - return json; - } - else { - return token; - } -}).join(` `)}`; - -const MAX_LINE_LENGTH = 80; -const richLine = Array(MAX_LINE_LENGTH).fill(`━`); -for (let t = 0; t <= 24; ++t) - richLine[richLine.length - t] = `\x1b[38;5;${232 + t}m━`; -const richFormat = { - header: str => `\x1b[1m━━━ ${str}${str.length < MAX_LINE_LENGTH - 5 ? ` ${richLine.slice(str.length + 5).join(``)}` : `:`}\x1b[0m`, - bold: str => `\x1b[1m${str}\x1b[22m`, - error: str => `\x1b[31m\x1b[1m${str}\x1b[22m\x1b[39m`, - code: str => `\x1b[36m${str}\x1b[39m`, -}; -const textFormat = { - header: str => str, - bold: str => str, - error: str => str, - code: str => str, -}; -function dedent(text) { - const lines = text.split(`\n`); - const nonEmptyLines = lines.filter(line => line.match(/\S/)); - const indent = nonEmptyLines.length > 0 ? nonEmptyLines.reduce((minLength, line) => Math.min(minLength, line.length - line.trimStart().length), Number.MAX_VALUE) : 0; - return lines - .map(line => line.slice(indent).trimRight()) - .join(`\n`); -} -/** - * Formats markdown text to be displayed to the console. Not all markdown features are supported. - * - * @param text The markdown text to format. - * @param opts.format The format to use. - * @param opts.paragraphs Whether to cut the text into paragraphs of 80 characters at most. - */ -function formatMarkdownish(text, { format, paragraphs }) { - // Enforce \n as newline character - text = text.replace(/\r\n?/g, `\n`); - // Remove the indentation, since it got messed up with the JS indentation - text = dedent(text); - // Remove surrounding newlines, since they got added for JS formatting - text = text.replace(/^\n+|\n+$/g, ``); - // List items always end with at least two newlines (in order to not be collapsed) - text = text.replace(/^(\s*)-([^\n]*?)\n+/gm, `$1-$2\n\n`); - // Single newlines are removed; larger than that are collapsed into one - text = text.replace(/\n(\n)?\n*/g, ($0, $1) => $1 ? $1 : ` `); - if (paragraphs) { - text = text.split(/\n/).map(paragraph => { - // Does the paragraph starts with a list? - const bulletMatch = paragraph.match(/^\s*[*-][\t ]+(.*)/); - if (!bulletMatch) - // No, cut the paragraphs into segments of 80 characters - return paragraph.match(/(.{1,80})(?: |$)/g).join(`\n`); - const indent = paragraph.length - paragraph.trimStart().length; - // Yes, cut the paragraphs into segments of (78 - indent) characters (to account for the prefix) - return bulletMatch[1].match(new RegExp(`(.{1,${78 - indent}})(?: |$)`, `g`)).map((line, index) => { - return ` `.repeat(indent) + (index === 0 ? `- ` : ` `) + line; - }).join(`\n`); - }).join(`\n\n`); - } - // Highlight the code segments - text = text.replace(/(`+)((?:.|[\n])*?)\1/g, ($0, $1, $2) => { - return format.code($1 + $2 + $1); - }); - // Highlight the bold segments - text = text.replace(/(\*\*)((?:.|[\n])*?)\1/g, ($0, $1, $2) => { - return format.bold($1 + $2 + $1); - }); - return text ? `${text}\n` : ``; -} - -const isOptionSymbol = Symbol(`clipanion/isOption`); -function makeCommandOption(spec) { - // We lie! But it's for the good cause: the cli engine will turn the specs into proper values after instantiation. - return { ...spec, [isOptionSymbol]: true }; -} -function rerouteArguments(a, b) { - if (typeof a === `undefined`) - return [a, b]; - if (typeof a === `object` && a !== null && !Array.isArray(a)) { - return [undefined, a]; - } - else { - return [a, b]; - } -} -function cleanValidationError(message, { mergeName = false } = {}) { - const match = message.match(/^([^:]+): (.*)$/m); - if (!match) - return `validation failed`; - let [, path, line] = match; - if (mergeName) - line = line[0].toLowerCase() + line.slice(1); - line = path !== `.` || !mergeName - ? `${path.replace(/^\.(\[|$)/, `$1`)}: ${line}` - : `: ${line}`; - return line; -} -function formatError$1(message, errors) { - if (errors.length === 1) { - return new UsageError(`${message}${cleanValidationError(errors[0], { mergeName: true })}`); - } - else { - return new UsageError(`${message}:\n${errors.map(error => `\n- ${cleanValidationError(error)}`).join(``)}`); - } -} -function applyValidator(name, value, validator) { - if (typeof validator === `undefined`) - return value; - const errors = []; - const coercions = []; - const coercion = (v) => { - const orig = value; - value = v; - return coercion.bind(null, orig); - }; - const check = validator(value, { errors, coercions, coercion }); - if (!check) - throw formatError$1(`Invalid value for ${name}`, errors); - for (const [, op] of coercions) - op(); - return value; -} - -/** - * Base abstract class for CLI commands. The main thing to remember is to - * declare an async `execute` member function that will be called when the - * command is invoked from the CLI, and optionally a `paths` property to - * declare the set of paths under which the command should be exposed. - */ -class Command { - constructor() { - /** - * Predefined that will be set to true if `-h,--help` has been used, in - * which case `Command#execute` won't be called. - */ - this.help = false; - } - /** - * Defines the usage information for the given command. - */ - static Usage(usage) { - return usage; - } - /** - * Standard error handler which will simply rethrow the error. Can be used - * to add custom logic to handle errors from the command or simply return - * the parent class error handling. - */ - async catch(error) { - throw error; - } - async validateAndExecute() { - const commandClass = this.constructor; - const cascade = commandClass.schema; - if (Array.isArray(cascade)) { - const { isDict, isUnknown, applyCascade } = await Promise.resolve().then(function () { return index; }); - const schema = applyCascade(isDict(isUnknown()), cascade); - const errors = []; - const coercions = []; - const check = schema(this, { errors, coercions }); - if (!check) - throw formatError$1(`Invalid option schema`, errors); - for (const [, op] of coercions) { - op(); - } - } - else if (cascade != null) { - throw new Error(`Invalid command schema`); - } - const exitCode = await this.execute(); - if (typeof exitCode !== `undefined`) { - return exitCode; - } - else { - return 0; - } - } -} -/** - * Used to detect option definitions. - */ -Command.isOption = isOptionSymbol; -/** - * Just an helper to use along with the `paths` fields, to make it - * clearer that a command is the default one. - * - * @example - * class MyCommand extends Command { - * static paths = [Command.Default]; - * } - */ -Command.Default = []; - -// ------------------------------------------------------------------------ -function debug$b(str) { - if (DEBUG) { - console.log(str); - } -} -const basicHelpState = { - candidateUsage: null, - requiredOptions: [], - errorMessage: null, - ignoreOptions: false, - path: [], - positionals: [], - options: [], - remainder: null, - selectedIndex: HELP_COMMAND_INDEX, -}; -function makeStateMachine() { - return { - nodes: [makeNode(), makeNode(), makeNode()], - }; -} -function makeAnyOfMachine(inputs) { - const output = makeStateMachine(); - const heads = []; - let offset = output.nodes.length; - for (const input of inputs) { - heads.push(offset); - for (let t = 0; t < input.nodes.length; ++t) - if (!isTerminalNode(t)) - output.nodes.push(cloneNode(input.nodes[t], offset)); - offset += input.nodes.length - 2; - } - for (const head of heads) - registerShortcut(output, NODE_INITIAL, head); - return output; -} -function injectNode(machine, node) { - machine.nodes.push(node); - return machine.nodes.length - 1; -} -function simplifyMachine(input) { - const visited = new Set(); - const process = (node) => { - if (visited.has(node)) - return; - visited.add(node); - const nodeDef = input.nodes[node]; - for (const transitions of Object.values(nodeDef.statics)) - for (const { to } of transitions) - process(to); - for (const [, { to }] of nodeDef.dynamics) - process(to); - for (const { to } of nodeDef.shortcuts) - process(to); - const shortcuts = new Set(nodeDef.shortcuts.map(({ to }) => to)); - while (nodeDef.shortcuts.length > 0) { - const { to } = nodeDef.shortcuts.shift(); - const toDef = input.nodes[to]; - for (const [segment, transitions] of Object.entries(toDef.statics)) { - const store = !Object.prototype.hasOwnProperty.call(nodeDef.statics, segment) - ? nodeDef.statics[segment] = [] - : nodeDef.statics[segment]; - for (const transition of transitions) { - if (!store.some(({ to }) => transition.to === to)) { - store.push(transition); - } - } - } - for (const [test, transition] of toDef.dynamics) - if (!nodeDef.dynamics.some(([otherTest, { to }]) => test === otherTest && transition.to === to)) - nodeDef.dynamics.push([test, transition]); - for (const transition of toDef.shortcuts) { - if (!shortcuts.has(transition.to)) { - nodeDef.shortcuts.push(transition); - shortcuts.add(transition.to); - } - } - } - }; - process(NODE_INITIAL); -} -function debugMachine(machine, { prefix = `` } = {}) { - // Don't iterate unless it's needed - if (DEBUG) { - debug$b(`${prefix}Nodes are:`); - for (let t = 0; t < machine.nodes.length; ++t) { - debug$b(`${prefix} ${t}: ${JSON.stringify(machine.nodes[t])}`); - } - } -} -function runMachineInternal(machine, input, partial = false) { - debug$b(`Running a vm on ${JSON.stringify(input)}`); - let branches = [{ node: NODE_INITIAL, state: { - candidateUsage: null, - requiredOptions: [], - errorMessage: null, - ignoreOptions: false, - options: [], - path: [], - positionals: [], - remainder: null, - selectedIndex: null, - } }]; - debugMachine(machine, { prefix: ` ` }); - const tokens = [START_OF_INPUT, ...input]; - for (let t = 0; t < tokens.length; ++t) { - const segment = tokens[t]; - debug$b(` Processing ${JSON.stringify(segment)}`); - const nextBranches = []; - for (const { node, state } of branches) { - debug$b(` Current node is ${node}`); - const nodeDef = machine.nodes[node]; - if (node === NODE_ERRORED) { - nextBranches.push({ node, state }); - continue; - } - console.assert(nodeDef.shortcuts.length === 0, `Shortcuts should have been eliminated by now`); - const hasExactMatch = Object.prototype.hasOwnProperty.call(nodeDef.statics, segment); - if (!partial || t < tokens.length - 1 || hasExactMatch) { - if (hasExactMatch) { - const transitions = nodeDef.statics[segment]; - for (const { to, reducer } of transitions) { - nextBranches.push({ node: to, state: typeof reducer !== `undefined` ? execute(reducers, reducer, state, segment) : state }); - debug$b(` Static transition to ${to} found`); - } - } - else { - debug$b(` No static transition found`); - } - } - else { - let hasMatches = false; - for (const candidate of Object.keys(nodeDef.statics)) { - if (!candidate.startsWith(segment)) - continue; - if (segment === candidate) { - for (const { to, reducer } of nodeDef.statics[candidate]) { - nextBranches.push({ node: to, state: typeof reducer !== `undefined` ? execute(reducers, reducer, state, segment) : state }); - debug$b(` Static transition to ${to} found`); - } - } - else { - for (const { to } of nodeDef.statics[candidate]) { - nextBranches.push({ node: to, state: { ...state, remainder: candidate.slice(segment.length) } }); - debug$b(` Static transition to ${to} found (partial match)`); - } - } - hasMatches = true; - } - if (!hasMatches) { - debug$b(` No partial static transition found`); - } - } - if (segment !== END_OF_INPUT) { - for (const [test, { to, reducer }] of nodeDef.dynamics) { - if (execute(tests, test, state, segment)) { - nextBranches.push({ node: to, state: typeof reducer !== `undefined` ? execute(reducers, reducer, state, segment) : state }); - debug$b(` Dynamic transition to ${to} found (via ${test})`); - } - } - } - } - if (nextBranches.length === 0 && segment === END_OF_INPUT && input.length === 1) { - return [{ - node: NODE_INITIAL, - state: basicHelpState, - }]; - } - if (nextBranches.length === 0) { - throw new UnknownSyntaxError(input, branches.filter(({ node }) => { - return node !== NODE_ERRORED; - }).map(({ state }) => { - return { usage: state.candidateUsage, reason: null }; - })); - } - if (nextBranches.every(({ node }) => node === NODE_ERRORED)) { - throw new UnknownSyntaxError(input, nextBranches.map(({ state }) => { - return { usage: state.candidateUsage, reason: state.errorMessage }; - })); - } - branches = trimSmallerBranches(nextBranches); - } - if (branches.length > 0) { - debug$b(` Results:`); - for (const branch of branches) { - debug$b(` - ${branch.node} -> ${JSON.stringify(branch.state)}`); - } - } - else { - debug$b(` No results`); - } - return branches; -} -function checkIfNodeIsFinished(node, state) { - if (state.selectedIndex !== null) - return true; - if (Object.prototype.hasOwnProperty.call(node.statics, END_OF_INPUT)) - for (const { to } of node.statics[END_OF_INPUT]) - if (to === NODE_SUCCESS) - return true; - return false; -} -function suggestMachine(machine, input, partial) { - // If we're accepting partial matches, then exact matches need to be - // prefixed with an extra space. - const prefix = partial && input.length > 0 ? [``] : []; - const branches = runMachineInternal(machine, input, partial); - const suggestions = []; - const suggestionsJson = new Set(); - const traverseSuggestion = (suggestion, node, skipFirst = true) => { - let nextNodes = [node]; - while (nextNodes.length > 0) { - const currentNodes = nextNodes; - nextNodes = []; - for (const node of currentNodes) { - const nodeDef = machine.nodes[node]; - const keys = Object.keys(nodeDef.statics); - // The fact that `key` is unused is likely a bug, but no one has investigated it yet. - // TODO: Investigate it. - // eslint-disable-next-line @typescript-eslint/no-unused-vars - for (const key of Object.keys(nodeDef.statics)) { - const segment = keys[0]; - for (const { to, reducer } of nodeDef.statics[segment]) { - if (reducer !== `pushPath`) - continue; - if (!skipFirst) - suggestion.push(segment); - nextNodes.push(to); - } - } - } - skipFirst = false; - } - const json = JSON.stringify(suggestion); - if (suggestionsJson.has(json)) - return; - suggestions.push(suggestion); - suggestionsJson.add(json); - }; - for (const { node, state } of branches) { - if (state.remainder !== null) { - traverseSuggestion([state.remainder], node); - continue; - } - const nodeDef = machine.nodes[node]; - const isFinished = checkIfNodeIsFinished(nodeDef, state); - for (const [candidate, transitions] of Object.entries(nodeDef.statics)) - if ((isFinished && candidate !== END_OF_INPUT) || (!candidate.startsWith(`-`) && transitions.some(({ reducer }) => reducer === `pushPath`))) - traverseSuggestion([...prefix, candidate], node); - if (!isFinished) - continue; - for (const [test, { to }] of nodeDef.dynamics) { - if (to === NODE_ERRORED) - continue; - const tokens = suggest(test, state); - if (tokens === null) - continue; - for (const token of tokens) { - traverseSuggestion([...prefix, token], node); - } - } - } - return [...suggestions].sort(); -} -function runMachine(machine, input) { - const branches = runMachineInternal(machine, [...input, END_OF_INPUT]); - return selectBestState(input, branches.map(({ state }) => { - return state; - })); -} -function trimSmallerBranches(branches) { - let maxPathSize = 0; - for (const { state } of branches) - if (state.path.length > maxPathSize) - maxPathSize = state.path.length; - return branches.filter(({ state }) => { - return state.path.length === maxPathSize; - }); -} -function selectBestState(input, states) { - const terminalStates = states.filter(state => { - return state.selectedIndex !== null; - }); - if (terminalStates.length === 0) - throw new Error(); - const requiredOptionsSetStates = terminalStates.filter(state => state.selectedIndex === HELP_COMMAND_INDEX || state.requiredOptions.every(names => names.some(name => state.options.find(opt => opt.name === name)))); - if (requiredOptionsSetStates.length === 0) { - throw new UnknownSyntaxError(input, terminalStates.map(state => ({ - usage: state.candidateUsage, - reason: null, - }))); - } - let maxPathSize = 0; - for (const state of requiredOptionsSetStates) - if (state.path.length > maxPathSize) - maxPathSize = state.path.length; - const bestPathBranches = requiredOptionsSetStates.filter(state => { - return state.path.length === maxPathSize; - }); - const getPositionalCount = (state) => state.positionals.filter(({ extra }) => { - return !extra; - }).length + state.options.length; - const statesWithPositionalCount = bestPathBranches.map(state => { - return { state, positionalCount: getPositionalCount(state) }; - }); - let maxPositionalCount = 0; - for (const { positionalCount } of statesWithPositionalCount) - if (positionalCount > maxPositionalCount) - maxPositionalCount = positionalCount; - const bestPositionalStates = statesWithPositionalCount.filter(({ positionalCount }) => { - return positionalCount === maxPositionalCount; - }).map(({ state }) => { - return state; - }); - const fixedStates = aggregateHelpStates(bestPositionalStates); - if (fixedStates.length > 1) - throw new AmbiguousSyntaxError(input, fixedStates.map(state => state.candidateUsage)); - return fixedStates[0]; -} -function aggregateHelpStates(states) { - const notHelps = []; - const helps = []; - for (const state of states) { - if (state.selectedIndex === HELP_COMMAND_INDEX) { - helps.push(state); - } - else { - notHelps.push(state); - } - } - if (helps.length > 0) { - notHelps.push({ - ...basicHelpState, - path: findCommonPrefix(...helps.map(state => state.path)), - options: helps.reduce((options, state) => options.concat(state.options), []), - }); - } - return notHelps; -} -function findCommonPrefix(firstPath, secondPath, ...rest) { - if (secondPath === undefined) - return Array.from(firstPath); - return findCommonPrefix(firstPath.filter((segment, i) => segment === secondPath[i]), ...rest); -} -function makeNode() { - return { - dynamics: [], - shortcuts: [], - statics: {}, - }; -} -function isTerminalNode(node) { - return node === NODE_SUCCESS || node === NODE_ERRORED; -} -function cloneTransition(input, offset = 0) { - return { - to: !isTerminalNode(input.to) ? input.to > 2 ? input.to + offset - 2 : input.to + offset : input.to, - reducer: input.reducer, - }; -} -function cloneNode(input, offset = 0) { - const output = makeNode(); - for (const [test, transition] of input.dynamics) - output.dynamics.push([test, cloneTransition(transition, offset)]); - for (const transition of input.shortcuts) - output.shortcuts.push(cloneTransition(transition, offset)); - for (const [segment, transitions] of Object.entries(input.statics)) - output.statics[segment] = transitions.map(transition => cloneTransition(transition, offset)); - return output; -} -function registerDynamic(machine, from, test, to, reducer) { - machine.nodes[from].dynamics.push([ - test, - { to, reducer: reducer }, - ]); -} -function registerShortcut(machine, from, to, reducer) { - machine.nodes[from].shortcuts.push({ to, reducer: reducer }); -} -function registerStatic(machine, from, test, to, reducer) { - const store = !Object.prototype.hasOwnProperty.call(machine.nodes[from].statics, test) - ? machine.nodes[from].statics[test] = [] - : machine.nodes[from].statics[test]; - store.push({ to, reducer: reducer }); -} -function execute(store, callback, state, segment) { - // TypeScript's control flow can't properly narrow - // generic conditionals for some mysterious reason - if (Array.isArray(callback)) { - const [name, ...args] = callback; - return store[name](state, segment, ...args); - } - else { - return store[callback](state, segment); - } -} -function suggest(callback, state) { - const fn = Array.isArray(callback) - ? tests[callback[0]] - : tests[callback]; - // @ts-ignore - if (typeof fn.suggest === `undefined`) - return null; - const args = Array.isArray(callback) - ? callback.slice(1) - : []; - // @ts-ignore - return fn.suggest(state, ...args); -} -const tests = { - always: () => { - return true; - }, - isOptionLike: (state, segment) => { - return !state.ignoreOptions && (segment !== `-` && segment.startsWith(`-`)); - }, - isNotOptionLike: (state, segment) => { - return state.ignoreOptions || segment === `-` || !segment.startsWith(`-`); - }, - isOption: (state, segment, name, hidden) => { - return !state.ignoreOptions && segment === name; - }, - isBatchOption: (state, segment, names) => { - return !state.ignoreOptions && BATCH_REGEX.test(segment) && [...segment.slice(1)].every(name => names.includes(`-${name}`)); - }, - isBoundOption: (state, segment, names, options) => { - const optionParsing = segment.match(BINDING_REGEX); - return !state.ignoreOptions && !!optionParsing && OPTION_REGEX.test(optionParsing[1]) && names.includes(optionParsing[1]) - // Disallow bound options with no arguments (i.e. booleans) - && options.filter(opt => opt.names.includes(optionParsing[1])).every(opt => opt.allowBinding); - }, - isNegatedOption: (state, segment, name) => { - return !state.ignoreOptions && segment === `--no-${name.slice(2)}`; - }, - isHelp: (state, segment) => { - return !state.ignoreOptions && HELP_REGEX.test(segment); - }, - isUnsupportedOption: (state, segment, names) => { - return !state.ignoreOptions && segment.startsWith(`-`) && OPTION_REGEX.test(segment) && !names.includes(segment); - }, - isInvalidOption: (state, segment) => { - return !state.ignoreOptions && segment.startsWith(`-`) && !OPTION_REGEX.test(segment); - }, -}; -// @ts-ignore -tests.isOption.suggest = (state, name, hidden = true) => { - return !hidden ? [name] : null; -}; -const reducers = { - setCandidateState: (state, segment, candidateState) => { - return { ...state, ...candidateState }; - }, - setSelectedIndex: (state, segment, index) => { - return { ...state, selectedIndex: index }; - }, - pushBatch: (state, segment) => { - return { ...state, options: state.options.concat([...segment.slice(1)].map(name => ({ name: `-${name}`, value: true }))) }; - }, - pushBound: (state, segment) => { - const [, name, value] = segment.match(BINDING_REGEX); - return { ...state, options: state.options.concat({ name, value }) }; - }, - pushPath: (state, segment) => { - return { ...state, path: state.path.concat(segment) }; - }, - pushPositional: (state, segment) => { - return { ...state, positionals: state.positionals.concat({ value: segment, extra: false }) }; - }, - pushExtra: (state, segment) => { - return { ...state, positionals: state.positionals.concat({ value: segment, extra: true }) }; - }, - pushExtraNoLimits: (state, segment) => { - return { ...state, positionals: state.positionals.concat({ value: segment, extra: NoLimits }) }; - }, - pushTrue: (state, segment, name = segment) => { - return { ...state, options: state.options.concat({ name: segment, value: true }) }; - }, - pushFalse: (state, segment, name = segment) => { - return { ...state, options: state.options.concat({ name, value: false }) }; - }, - pushUndefined: (state, segment) => { - return { ...state, options: state.options.concat({ name: segment, value: undefined }) }; - }, - pushStringValue: (state, segment) => { - var _a; - const copy = { ...state, options: [...state.options] }; - const lastOption = state.options[state.options.length - 1]; - lastOption.value = ((_a = lastOption.value) !== null && _a !== void 0 ? _a : []).concat([segment]); - return copy; - }, - setStringValue: (state, segment) => { - const copy = { ...state, options: [...state.options] }; - const lastOption = state.options[state.options.length - 1]; - lastOption.value = segment; - return copy; - }, - inhibateOptions: (state) => { - return { ...state, ignoreOptions: true }; - }, - useHelp: (state, segment, command) => { - const [, /* name */ , index] = segment.match(HELP_REGEX); - if (typeof index !== `undefined`) { - return { ...state, options: [{ name: `-c`, value: String(command) }, { name: `-i`, value: index }] }; - } - else { - return { ...state, options: [{ name: `-c`, value: String(command) }] }; - } - }, - setError: (state, segment, errorMessage) => { - if (segment === END_OF_INPUT) { - return { ...state, errorMessage: `${errorMessage}.` }; - } - else { - return { ...state, errorMessage: `${errorMessage} ("${segment}").` }; - } - }, - setOptionArityError: (state, segment) => { - const lastOption = state.options[state.options.length - 1]; - return { ...state, errorMessage: `Not enough arguments to option ${lastOption.name}.` }; - }, -}; -// ------------------------------------------------------------------------ -const NoLimits = Symbol(); -class CommandBuilder { - constructor(cliIndex, cliOpts) { - this.allOptionNames = []; - this.arity = { leading: [], trailing: [], extra: [], proxy: false }; - this.options = []; - this.paths = []; - this.cliIndex = cliIndex; - this.cliOpts = cliOpts; - } - addPath(path) { - this.paths.push(path); - } - setArity({ leading = this.arity.leading, trailing = this.arity.trailing, extra = this.arity.extra, proxy = this.arity.proxy }) { - Object.assign(this.arity, { leading, trailing, extra, proxy }); - } - addPositional({ name = `arg`, required = true } = {}) { - if (!required && this.arity.extra === NoLimits) - throw new Error(`Optional parameters cannot be declared when using .rest() or .proxy()`); - if (!required && this.arity.trailing.length > 0) - throw new Error(`Optional parameters cannot be declared after the required trailing positional arguments`); - if (!required && this.arity.extra !== NoLimits) { - this.arity.extra.push(name); - } - else if (this.arity.extra !== NoLimits && this.arity.extra.length === 0) { - this.arity.leading.push(name); - } - else { - this.arity.trailing.push(name); - } - } - addRest({ name = `arg`, required = 0 } = {}) { - if (this.arity.extra === NoLimits) - throw new Error(`Infinite lists cannot be declared multiple times in the same command`); - if (this.arity.trailing.length > 0) - throw new Error(`Infinite lists cannot be declared after the required trailing positional arguments`); - for (let t = 0; t < required; ++t) - this.addPositional({ name }); - this.arity.extra = NoLimits; - } - addProxy({ required = 0 } = {}) { - this.addRest({ required }); - this.arity.proxy = true; - } - addOption({ names, description, arity = 0, hidden = false, required = false, allowBinding = true }) { - if (!allowBinding && arity > 1) - throw new Error(`The arity cannot be higher than 1 when the option only supports the --arg=value syntax`); - if (!Number.isInteger(arity)) - throw new Error(`The arity must be an integer, got ${arity}`); - if (arity < 0) - throw new Error(`The arity must be positive, got ${arity}`); - this.allOptionNames.push(...names); - this.options.push({ names, description, arity, hidden, required, allowBinding }); - } - setContext(context) { - this.context = context; - } - usage({ detailed = true, inlineOptions = true } = {}) { - const segments = [this.cliOpts.binaryName]; - const detailedOptionList = []; - if (this.paths.length > 0) - segments.push(...this.paths[0]); - if (detailed) { - for (const { names, arity, hidden, description, required } of this.options) { - if (hidden) - continue; - const args = []; - for (let t = 0; t < arity; ++t) - args.push(` #${t}`); - const definition = `${names.join(`,`)}${args.join(``)}`; - if (!inlineOptions && description) { - detailedOptionList.push({ definition, description, required }); - } - else { - segments.push(required ? `<${definition}>` : `[${definition}]`); - } - } - segments.push(...this.arity.leading.map(name => `<${name}>`)); - if (this.arity.extra === NoLimits) - segments.push(`...`); - else - segments.push(...this.arity.extra.map(name => `[${name}]`)); - segments.push(...this.arity.trailing.map(name => `<${name}>`)); - } - const usage = segments.join(` `); - return { usage, options: detailedOptionList }; - } - compile() { - if (typeof this.context === `undefined`) - throw new Error(`Assertion failed: No context attached`); - const machine = makeStateMachine(); - let firstNode = NODE_INITIAL; - const candidateUsage = this.usage().usage; - const requiredOptions = this.options - .filter(opt => opt.required) - .map(opt => opt.names); - firstNode = injectNode(machine, makeNode()); - registerStatic(machine, NODE_INITIAL, START_OF_INPUT, firstNode, [`setCandidateState`, { candidateUsage, requiredOptions }]); - const positionalArgument = this.arity.proxy - ? `always` - : `isNotOptionLike`; - const paths = this.paths.length > 0 - ? this.paths - : [[]]; - for (const path of paths) { - let lastPathNode = firstNode; - // We allow options to be specified before the path. Note that we - // only do this when there is a path, otherwise there would be - // some redundancy with the options attached later. - if (path.length > 0) { - const optionPathNode = injectNode(machine, makeNode()); - registerShortcut(machine, lastPathNode, optionPathNode); - this.registerOptions(machine, optionPathNode); - lastPathNode = optionPathNode; - } - for (let t = 0; t < path.length; ++t) { - const nextPathNode = injectNode(machine, makeNode()); - registerStatic(machine, lastPathNode, path[t], nextPathNode, `pushPath`); - lastPathNode = nextPathNode; - } - if (this.arity.leading.length > 0 || !this.arity.proxy) { - const helpNode = injectNode(machine, makeNode()); - registerDynamic(machine, lastPathNode, `isHelp`, helpNode, [`useHelp`, this.cliIndex]); - registerDynamic(machine, helpNode, `always`, helpNode, `pushExtra`); - registerStatic(machine, helpNode, END_OF_INPUT, NODE_SUCCESS, [`setSelectedIndex`, HELP_COMMAND_INDEX]); - this.registerOptions(machine, lastPathNode); - } - if (this.arity.leading.length > 0) - registerStatic(machine, lastPathNode, END_OF_INPUT, NODE_ERRORED, [`setError`, `Not enough positional arguments`]); - let lastLeadingNode = lastPathNode; - for (let t = 0; t < this.arity.leading.length; ++t) { - const nextLeadingNode = injectNode(machine, makeNode()); - if (!this.arity.proxy || t + 1 !== this.arity.leading.length) - this.registerOptions(machine, nextLeadingNode); - if (this.arity.trailing.length > 0 || t + 1 !== this.arity.leading.length) - registerStatic(machine, nextLeadingNode, END_OF_INPUT, NODE_ERRORED, [`setError`, `Not enough positional arguments`]); - registerDynamic(machine, lastLeadingNode, `isNotOptionLike`, nextLeadingNode, `pushPositional`); - lastLeadingNode = nextLeadingNode; - } - let lastExtraNode = lastLeadingNode; - if (this.arity.extra === NoLimits || this.arity.extra.length > 0) { - const extraShortcutNode = injectNode(machine, makeNode()); - registerShortcut(machine, lastLeadingNode, extraShortcutNode); - if (this.arity.extra === NoLimits) { - const extraNode = injectNode(machine, makeNode()); - if (!this.arity.proxy) - this.registerOptions(machine, extraNode); - registerDynamic(machine, lastLeadingNode, positionalArgument, extraNode, `pushExtraNoLimits`); - registerDynamic(machine, extraNode, positionalArgument, extraNode, `pushExtraNoLimits`); - registerShortcut(machine, extraNode, extraShortcutNode); - } - else { - for (let t = 0; t < this.arity.extra.length; ++t) { - const nextExtraNode = injectNode(machine, makeNode()); - if (!this.arity.proxy || t > 0) - this.registerOptions(machine, nextExtraNode); - registerDynamic(machine, lastExtraNode, positionalArgument, nextExtraNode, `pushExtra`); - registerShortcut(machine, nextExtraNode, extraShortcutNode); - lastExtraNode = nextExtraNode; - } - } - lastExtraNode = extraShortcutNode; - } - if (this.arity.trailing.length > 0) - registerStatic(machine, lastExtraNode, END_OF_INPUT, NODE_ERRORED, [`setError`, `Not enough positional arguments`]); - let lastTrailingNode = lastExtraNode; - for (let t = 0; t < this.arity.trailing.length; ++t) { - const nextTrailingNode = injectNode(machine, makeNode()); - if (!this.arity.proxy) - this.registerOptions(machine, nextTrailingNode); - if (t + 1 < this.arity.trailing.length) - registerStatic(machine, nextTrailingNode, END_OF_INPUT, NODE_ERRORED, [`setError`, `Not enough positional arguments`]); - registerDynamic(machine, lastTrailingNode, `isNotOptionLike`, nextTrailingNode, `pushPositional`); - lastTrailingNode = nextTrailingNode; - } - registerDynamic(machine, lastTrailingNode, positionalArgument, NODE_ERRORED, [`setError`, `Extraneous positional argument`]); - registerStatic(machine, lastTrailingNode, END_OF_INPUT, NODE_SUCCESS, [`setSelectedIndex`, this.cliIndex]); - } - return { - machine, - context: this.context, - }; - } - registerOptions(machine, node) { - registerDynamic(machine, node, [`isOption`, `--`], node, `inhibateOptions`); - registerDynamic(machine, node, [`isBatchOption`, this.allOptionNames], node, `pushBatch`); - registerDynamic(machine, node, [`isBoundOption`, this.allOptionNames, this.options], node, `pushBound`); - registerDynamic(machine, node, [`isUnsupportedOption`, this.allOptionNames], NODE_ERRORED, [`setError`, `Unsupported option name`]); - registerDynamic(machine, node, [`isInvalidOption`], NODE_ERRORED, [`setError`, `Invalid option name`]); - for (const option of this.options) { - const longestName = option.names.reduce((longestName, name) => { - return name.length > longestName.length ? name : longestName; - }, ``); - if (option.arity === 0) { - for (const name of option.names) { - registerDynamic(machine, node, [`isOption`, name, option.hidden || name !== longestName], node, `pushTrue`); - if (name.startsWith(`--`) && !name.startsWith(`--no-`)) { - registerDynamic(machine, node, [`isNegatedOption`, name], node, [`pushFalse`, name]); - } - } - } - else { - // We inject a new node at the end of the state machine - let lastNode = injectNode(machine, makeNode()); - // We register transitions from the starting node to this new node - for (const name of option.names) - registerDynamic(machine, node, [`isOption`, name, option.hidden || name !== longestName], lastNode, `pushUndefined`); - // For each argument, we inject a new node at the end and we - // register a transition from the current node to this new node - for (let t = 0; t < option.arity; ++t) { - const nextNode = injectNode(machine, makeNode()); - // We can provide better errors when another option or END_OF_INPUT is encountered - registerStatic(machine, lastNode, END_OF_INPUT, NODE_ERRORED, `setOptionArityError`); - registerDynamic(machine, lastNode, `isOptionLike`, NODE_ERRORED, `setOptionArityError`); - // If the option has a single argument, no need to store it in an array - const action = option.arity === 1 - ? `setStringValue` - : `pushStringValue`; - registerDynamic(machine, lastNode, `isNotOptionLike`, nextNode, action); - lastNode = nextNode; - } - // In the end, we register a shortcut from - // the last node back to the starting node - registerShortcut(machine, lastNode, node); - } - } - } -} -class CliBuilder { - constructor({ binaryName = `...` } = {}) { - this.builders = []; - this.opts = { binaryName }; - } - static build(cbs, opts = {}) { - return new CliBuilder(opts).commands(cbs).compile(); - } - getBuilderByIndex(n) { - if (!(n >= 0 && n < this.builders.length)) - throw new Error(`Assertion failed: Out-of-bound command index (${n})`); - return this.builders[n]; - } - commands(cbs) { - for (const cb of cbs) - cb(this.command()); - return this; - } - command() { - const builder = new CommandBuilder(this.builders.length, this.opts); - this.builders.push(builder); - return builder; - } - compile() { - const machines = []; - const contexts = []; - for (const builder of this.builders) { - const { machine, context } = builder.compile(); - machines.push(machine); - contexts.push(context); - } - const machine = makeAnyOfMachine(machines); - simplifyMachine(machine); - return { - machine, - contexts, - process: (input) => { - return runMachine(machine, input); - }, - suggest: (input, partial) => { - return suggestMachine(machine, input, partial); - }, - }; - } -} - -function getDefaultColorDepth() { - if (tty$1 && `getColorDepth` in tty$1.WriteStream.prototype) - return tty$1.WriteStream.prototype.getColorDepth(); - if (process.env.FORCE_COLOR === `0`) - return 1; - if (process.env.FORCE_COLOR === `1`) - return 8; - if (typeof process.stdout !== `undefined` && process.stdout.isTTY) - return 8; - return 1; -} -let gContextStorage; -function getCaptureActivator(context) { - let contextStorage = gContextStorage; - if (typeof contextStorage === `undefined`) { - if (context.stdout === process.stdout && context.stderr === process.stderr) - return null; - const { AsyncLocalStorage: LazyAsyncLocalStorage } = require(`async_hooks`); - contextStorage = gContextStorage = new LazyAsyncLocalStorage(); - const origStdoutWrite = process.stdout._write; - process.stdout._write = function (chunk, encoding, cb) { - const context = contextStorage.getStore(); - if (typeof context === `undefined`) - return origStdoutWrite.call(this, chunk, encoding, cb); - return context.stdout.write(chunk, encoding, cb); - }; - const origStderrWrite = process.stderr._write; - process.stderr._write = function (chunk, encoding, cb) { - const context = contextStorage.getStore(); - if (typeof context === `undefined`) - return origStderrWrite.call(this, chunk, encoding, cb); - return context.stderr.write(chunk, encoding, cb); - }; - } - return (fn) => { - return contextStorage.run(context, fn); - }; -} - -let HelpCommand$1 = class HelpCommand extends Command { - constructor(contexts) { - super(); - this.contexts = contexts; - this.commands = []; - } - static from(state, contexts) { - const command = new HelpCommand(contexts); - command.path = state.path; - for (const opt of state.options) { - switch (opt.name) { - case `-c`: - { - command.commands.push(Number(opt.value)); - } - break; - case `-i`: - { - command.index = Number(opt.value); - } - break; - } - } - return command; - } - async execute() { - let commands = this.commands; - if (typeof this.index !== `undefined` && this.index >= 0 && this.index < commands.length) - commands = [commands[this.index]]; - if (commands.length === 0) { - this.context.stdout.write(this.cli.usage()); - } - else if (commands.length === 1) { - this.context.stdout.write(this.cli.usage(this.contexts[commands[0]].commandClass, { detailed: true })); - } - else if (commands.length > 1) { - this.context.stdout.write(`Multiple commands match your selection:\n`); - this.context.stdout.write(`\n`); - let index = 0; - for (const command of this.commands) - this.context.stdout.write(this.cli.usage(this.contexts[command].commandClass, { prefix: `${index++}. `.padStart(5) })); - this.context.stdout.write(`\n`); - this.context.stdout.write(`Run again with -h= to see the longer details of any of those commands.\n`); - } - } -}; - -const errorCommandSymbol = Symbol(`clipanion/errorCommand`); -/** - * @template Context The context shared by all commands. Contexts are a set of values, defined when calling the `run`/`runExit` functions from the CLI instance, that will be made available to the commands via `this.context`. - */ -class Cli { - constructor({ binaryLabel, binaryName: binaryNameOpt = `...`, binaryVersion, enableCapture = false, enableColors } = {}) { - this.registrations = new Map(); - this.builder = new CliBuilder({ binaryName: binaryNameOpt }); - this.binaryLabel = binaryLabel; - this.binaryName = binaryNameOpt; - this.binaryVersion = binaryVersion; - this.enableCapture = enableCapture; - this.enableColors = enableColors; - } - /** - * Creates a new Cli and registers all commands passed as parameters. - * - * @param commandClasses The Commands to register - * @returns The created `Cli` instance - */ - static from(commandClasses, options = {}) { - const cli = new Cli(options); - const resolvedCommandClasses = Array.isArray(commandClasses) - ? commandClasses - : [commandClasses]; - for (const commandClass of resolvedCommandClasses) - cli.register(commandClass); - return cli; - } - /** - * Registers a command inside the CLI. - */ - register(commandClass) { - var _a; - const specs = new Map(); - const command = new commandClass(); - for (const key in command) { - const value = command[key]; - if (typeof value === `object` && value !== null && value[Command.isOption]) { - specs.set(key, value); - } - } - const builder = this.builder.command(); - const index = builder.cliIndex; - const paths = (_a = commandClass.paths) !== null && _a !== void 0 ? _a : command.paths; - if (typeof paths !== `undefined`) - for (const path of paths) - builder.addPath(path); - this.registrations.set(commandClass, { specs, builder, index }); - for (const [key, { definition }] of specs.entries()) - definition(builder, key); - builder.setContext({ - commandClass, - }); - } - process(input, userContext) { - const { contexts, process } = this.builder.compile(); - const state = process(input); - const context = { - ...Cli.defaultContext, - ...userContext, - }; - switch (state.selectedIndex) { - case HELP_COMMAND_INDEX: - { - const command = HelpCommand$1.from(state, contexts); - command.context = context; - return command; - } - default: - { - const { commandClass } = contexts[state.selectedIndex]; - const record = this.registrations.get(commandClass); - if (typeof record === `undefined`) - throw new Error(`Assertion failed: Expected the command class to have been registered.`); - const command = new commandClass(); - command.context = context; - command.path = state.path; - try { - for (const [key, { transformer }] of record.specs.entries()) - command[key] = transformer(record.builder, key, state, context); - return command; - } - catch (error) { - error[errorCommandSymbol] = command; - throw error; - } - } - break; - } - } - async run(input, userContext) { - var _a, _b; - let command; - const context = { - ...Cli.defaultContext, - ...userContext, - }; - const colored = (_a = this.enableColors) !== null && _a !== void 0 ? _a : context.colorDepth > 1; - if (!Array.isArray(input)) { - command = input; - } - else { - try { - command = this.process(input, context); - } - catch (error) { - context.stdout.write(this.error(error, { colored })); - return 1; - } - } - if (command.help) { - context.stdout.write(this.usage(command, { colored, detailed: true })); - return 0; - } - command.context = context; - command.cli = { - binaryLabel: this.binaryLabel, - binaryName: this.binaryName, - binaryVersion: this.binaryVersion, - enableCapture: this.enableCapture, - enableColors: this.enableColors, - definitions: () => this.definitions(), - error: (error, opts) => this.error(error, opts), - format: colored => this.format(colored), - process: (input, subContext) => this.process(input, { ...context, ...subContext }), - run: (input, subContext) => this.run(input, { ...context, ...subContext }), - usage: (command, opts) => this.usage(command, opts), - }; - const activate = this.enableCapture - ? (_b = getCaptureActivator(context)) !== null && _b !== void 0 ? _b : noopCaptureActivator - : noopCaptureActivator; - let exitCode; - try { - exitCode = await activate(() => command.validateAndExecute().catch(error => command.catch(error).then(() => 0))); - } - catch (error) { - context.stdout.write(this.error(error, { colored, command })); - return 1; - } - return exitCode; - } - async runExit(input, context) { - process.exitCode = await this.run(input, context); - } - suggest(input, partial) { - const { suggest } = this.builder.compile(); - return suggest(input, partial); - } - definitions({ colored = false } = {}) { - const data = []; - for (const [commandClass, { index }] of this.registrations) { - if (typeof commandClass.usage === `undefined`) - continue; - const { usage: path } = this.getUsageByIndex(index, { detailed: false }); - const { usage, options } = this.getUsageByIndex(index, { detailed: true, inlineOptions: false }); - const category = typeof commandClass.usage.category !== `undefined` - ? formatMarkdownish(commandClass.usage.category, { format: this.format(colored), paragraphs: false }) - : undefined; - const description = typeof commandClass.usage.description !== `undefined` - ? formatMarkdownish(commandClass.usage.description, { format: this.format(colored), paragraphs: false }) - : undefined; - const details = typeof commandClass.usage.details !== `undefined` - ? formatMarkdownish(commandClass.usage.details, { format: this.format(colored), paragraphs: true }) - : undefined; - const examples = typeof commandClass.usage.examples !== `undefined` - ? commandClass.usage.examples.map(([label, cli]) => [formatMarkdownish(label, { format: this.format(colored), paragraphs: false }), cli.replace(/\$0/g, this.binaryName)]) - : undefined; - data.push({ path, usage, category, description, details, examples, options }); - } - return data; - } - usage(command = null, { colored, detailed = false, prefix = `$ ` } = {}) { - var _a; - // In case the default command is the only one, we can just show the command help rather than the general one - if (command === null) { - for (const commandClass of this.registrations.keys()) { - const paths = commandClass.paths; - const isDocumented = typeof commandClass.usage !== `undefined`; - const isExclusivelyDefault = !paths || paths.length === 0 || (paths.length === 1 && paths[0].length === 0); - const isDefault = isExclusivelyDefault || ((_a = paths === null || paths === void 0 ? void 0 : paths.some(path => path.length === 0)) !== null && _a !== void 0 ? _a : false); - if (isDefault) { - if (command) { - command = null; - break; - } - else { - command = commandClass; - } - } - else { - if (isDocumented) { - command = null; - continue; - } - } - } - if (command) { - detailed = true; - } - } - // @ts-ignore - const commandClass = command !== null && command instanceof Command - ? command.constructor - : command; - let result = ``; - if (!commandClass) { - const commandsByCategories = new Map(); - for (const [commandClass, { index }] of this.registrations.entries()) { - if (typeof commandClass.usage === `undefined`) - continue; - const category = typeof commandClass.usage.category !== `undefined` - ? formatMarkdownish(commandClass.usage.category, { format: this.format(colored), paragraphs: false }) - : null; - let categoryCommands = commandsByCategories.get(category); - if (typeof categoryCommands === `undefined`) - commandsByCategories.set(category, categoryCommands = []); - const { usage } = this.getUsageByIndex(index); - categoryCommands.push({ commandClass, usage }); - } - const categoryNames = Array.from(commandsByCategories.keys()).sort((a, b) => { - if (a === null) - return -1; - if (b === null) - return +1; - return a.localeCompare(b, `en`, { usage: `sort`, caseFirst: `upper` }); - }); - const hasLabel = typeof this.binaryLabel !== `undefined`; - const hasVersion = typeof this.binaryVersion !== `undefined`; - if (hasLabel || hasVersion) { - if (hasLabel && hasVersion) - result += `${this.format(colored).header(`${this.binaryLabel} - ${this.binaryVersion}`)}\n\n`; - else if (hasLabel) - result += `${this.format(colored).header(`${this.binaryLabel}`)}\n`; - else - result += `${this.format(colored).header(`${this.binaryVersion}`)}\n`; - result += ` ${this.format(colored).bold(prefix)}${this.binaryName} \n`; - } - else { - result += `${this.format(colored).bold(prefix)}${this.binaryName} \n`; - } - for (const categoryName of categoryNames) { - const commands = commandsByCategories.get(categoryName).slice().sort((a, b) => { - return a.usage.localeCompare(b.usage, `en`, { usage: `sort`, caseFirst: `upper` }); - }); - const header = categoryName !== null - ? categoryName.trim() - : `General commands`; - result += `\n`; - result += `${this.format(colored).header(`${header}`)}\n`; - for (const { commandClass, usage } of commands) { - const doc = commandClass.usage.description || `undocumented`; - result += `\n`; - result += ` ${this.format(colored).bold(usage)}\n`; - result += ` ${formatMarkdownish(doc, { format: this.format(colored), paragraphs: false })}`; - } - } - result += `\n`; - result += formatMarkdownish(`You can also print more details about any of these commands by calling them with the \`-h,--help\` flag right after the command name.`, { format: this.format(colored), paragraphs: true }); - } - else { - if (!detailed) { - const { usage } = this.getUsageByRegistration(commandClass); - result += `${this.format(colored).bold(prefix)}${usage}\n`; - } - else { - const { description = ``, details = ``, examples = [], } = commandClass.usage || {}; - if (description !== ``) { - result += formatMarkdownish(description, { format: this.format(colored), paragraphs: false }).replace(/^./, $0 => $0.toUpperCase()); - result += `\n`; - } - if (details !== `` || examples.length > 0) { - result += `${this.format(colored).header(`Usage`)}\n`; - result += `\n`; - } - const { usage, options } = this.getUsageByRegistration(commandClass, { inlineOptions: false }); - result += `${this.format(colored).bold(prefix)}${usage}\n`; - if (options.length > 0) { - result += `\n`; - result += `${this.format(colored).header(`Options`)}\n`; - const maxDefinitionLength = options.reduce((length, option) => { - return Math.max(length, option.definition.length); - }, 0); - result += `\n`; - for (const { definition, description } of options) { - result += ` ${this.format(colored).bold(definition.padEnd(maxDefinitionLength))} ${formatMarkdownish(description, { format: this.format(colored), paragraphs: false })}`; - } - } - if (details !== ``) { - result += `\n`; - result += `${this.format(colored).header(`Details`)}\n`; - result += `\n`; - result += formatMarkdownish(details, { format: this.format(colored), paragraphs: true }); - } - if (examples.length > 0) { - result += `\n`; - result += `${this.format(colored).header(`Examples`)}\n`; - for (const [description, example] of examples) { - result += `\n`; - result += formatMarkdownish(description, { format: this.format(colored), paragraphs: false }); - result += `${example - .replace(/^/m, ` ${this.format(colored).bold(prefix)}`) - .replace(/\$0/g, this.binaryName)}\n`; - } - } - } - } - return result; - } - error(error, _a) { - var _b; - var { colored, command = (_b = error[errorCommandSymbol]) !== null && _b !== void 0 ? _b : null } = _a === void 0 ? {} : _a; - if (!error || typeof error !== `object` || !(`stack` in error)) - error = new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(error)})`); - let result = ``; - let name = error.name.replace(/([a-z])([A-Z])/g, `$1 $2`); - if (name === `Error`) - name = `Internal Error`; - result += `${this.format(colored).error(name)}: ${error.message}\n`; - const meta = error.clipanion; - if (typeof meta !== `undefined`) { - if (meta.type === `usage`) { - result += `\n`; - result += this.usage(command); - } - } - else { - if (error.stack) { - result += `${error.stack.replace(/^.*\n/, ``)}\n`; - } - } - return result; - } - format(colored) { - var _a; - return ((_a = colored !== null && colored !== void 0 ? colored : this.enableColors) !== null && _a !== void 0 ? _a : Cli.defaultContext.colorDepth > 1) ? richFormat : textFormat; - } - getUsageByRegistration(klass, opts) { - const record = this.registrations.get(klass); - if (typeof record === `undefined`) - throw new Error(`Assertion failed: Unregistered command`); - return this.getUsageByIndex(record.index, opts); - } - getUsageByIndex(n, opts) { - return this.builder.getBuilderByIndex(n).usage(opts); - } -} -/** - * The default context of the CLI. - * - * Contains the stdio of the current `process`. - */ -Cli.defaultContext = { - env: process.env, - stdin: process.stdin, - stdout: process.stdout, - stderr: process.stderr, - colorDepth: getDefaultColorDepth(), -}; -function noopCaptureActivator(fn) { - return fn(); -} - -function Array$1(descriptor, initialValueBase, optsBase) { - const [initialValue, opts] = rerouteArguments(initialValueBase, optsBase !== null && optsBase !== void 0 ? optsBase : {}); - const { arity = 1 } = opts; - const optNames = descriptor.split(`,`); - const nameSet = new Set(optNames); - return makeCommandOption({ - definition(builder) { - builder.addOption({ - names: optNames, - arity, - hidden: opts === null || opts === void 0 ? void 0 : opts.hidden, - description: opts === null || opts === void 0 ? void 0 : opts.description, - required: opts.required, - }); - }, - transformer(builder, key, state) { - let usedName; - let currentValue = typeof initialValue !== `undefined` - ? [...initialValue] - : undefined; - for (const { name, value } of state.options) { - if (!nameSet.has(name)) - continue; - usedName = name; - currentValue = currentValue !== null && currentValue !== void 0 ? currentValue : []; - currentValue.push(value); - } - if (typeof currentValue !== `undefined`) { - return applyValidator(usedName !== null && usedName !== void 0 ? usedName : key, currentValue, opts.validator); - } - else { - return currentValue; - } - }, - }); -} - -function Boolean$1(descriptor, initialValueBase, optsBase) { - const [initialValue, opts] = rerouteArguments(initialValueBase, optsBase !== null && optsBase !== void 0 ? optsBase : {}); - const optNames = descriptor.split(`,`); - const nameSet = new Set(optNames); - return makeCommandOption({ - definition(builder) { - builder.addOption({ - names: optNames, - allowBinding: false, - arity: 0, - hidden: opts.hidden, - description: opts.description, - required: opts.required, - }); - }, - transformer(builer, key, state) { - let currentValue = initialValue; - for (const { name, value } of state.options) { - if (!nameSet.has(name)) - continue; - currentValue = value; - } - return currentValue; - }, - }); -} - -function StringOption(descriptor, initialValueBase, optsBase) { - const [initialValue, opts] = rerouteArguments(initialValueBase, optsBase !== null && optsBase !== void 0 ? optsBase : {}); - const { arity = 1 } = opts; - const optNames = descriptor.split(`,`); - const nameSet = new Set(optNames); - return makeCommandOption({ - definition(builder) { - builder.addOption({ - names: optNames, - arity: opts.tolerateBoolean ? 0 : arity, - hidden: opts.hidden, - description: opts.description, - required: opts.required, - }); - }, - transformer(builder, key, state, context) { - let usedName; - let currentValue = initialValue; - if (typeof opts.env !== `undefined` && context.env[opts.env]) { - usedName = opts.env; - currentValue = context.env[opts.env]; - } - for (const { name, value } of state.options) { - if (!nameSet.has(name)) - continue; - usedName = name; - currentValue = value; - } - if (typeof currentValue === `string`) { - return applyValidator(usedName !== null && usedName !== void 0 ? usedName : key, currentValue, opts.validator); - } - else { - return currentValue; - } - }, - }); -} -function StringPositional(opts = {}) { - const { required = true } = opts; - return makeCommandOption({ - definition(builder, key) { - var _a; - builder.addPositional({ - name: (_a = opts.name) !== null && _a !== void 0 ? _a : key, - required: opts.required, - }); - }, - transformer(builder, key, state) { - var _a; - for (let i = 0; i < state.positionals.length; ++i) { - // We skip NoLimits extras. We only care about - // required and optional finite positionals. - if (state.positionals[i].extra === NoLimits) - continue; - // We skip optional positionals when we only - // care about required positionals. - if (required && state.positionals[i].extra === true) - continue; - // We skip required positionals when we only - // care about optional positionals. - if (!required && state.positionals[i].extra === false) - continue; - // We remove the positional from the list - const [positional] = state.positionals.splice(i, 1); - return applyValidator((_a = opts.name) !== null && _a !== void 0 ? _a : key, positional.value, opts.validator); - } - return undefined; - }, - }); -} -// This function is badly typed, but it doesn't matter because the overloads provide the true public typings -function String$1(descriptor, ...args) { - if (typeof descriptor === `string`) { - return StringOption(descriptor, ...args); - } - else { - return StringPositional(descriptor); - } -} - -var version$1 = "2.18.4"; - -/****************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ -/* global Reflect, Promise, SuppressedError, Symbol */ - - -function __awaiter$1(thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -} - -typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { - var e = new Error(message); - return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; -}; - -const { - env: env$1 = {}, - argv = [], - platform = "", -} = typeof process === "undefined" ? {} : process; - -const isDisabled = "NO_COLOR" in env$1 || argv.includes("--no-color"); -const isForced = "FORCE_COLOR" in env$1 || argv.includes("--color"); -const isWindows$1 = platform === "win32"; -const isDumbTerminal = env$1.TERM === "dumb"; - -const isCompatibleTerminal = - tty__namespace && tty__namespace.isatty && tty__namespace.isatty(1) && env$1.TERM && !isDumbTerminal; - -const isCI = - "CI" in env$1 && - ("GITHUB_ACTIONS" in env$1 || "GITLAB_CI" in env$1 || "CIRCLECI" in env$1); - -const isColorSupported = - !isDisabled && - (isForced || (isWindows$1 && !isDumbTerminal) || isCompatibleTerminal || isCI); - -const replaceClose = ( - index, - string, - close, - replace, - head = string.substring(0, index) + replace, - tail = string.substring(index + close.length), - next = tail.indexOf(close) -) => head + (next < 0 ? tail : replaceClose(next, tail, close, replace)); - -const clearBleed = (index, string, open, close, replace) => - index < 0 - ? open + string + close - : open + replaceClose(index, string, close, replace) + close; - -const filterEmpty = - (open, close, replace = open, at = open.length + 1) => - (string) => - string || !(string === "" || string === undefined) - ? clearBleed( - ("" + string).indexOf(close, at), - string, - open, - close, - replace - ) - : ""; - -const init = (open, close, replace) => - filterEmpty(`\x1b[${open}m`, `\x1b[${close}m`, replace); - -const colors$2 = { - reset: init(0, 0), - bold: init(1, 22, "\x1b[22m\x1b[1m"), - dim: init(2, 22, "\x1b[22m\x1b[2m"), - italic: init(3, 23), - underline: init(4, 24), - inverse: init(7, 27), - hidden: init(8, 28), - strikethrough: init(9, 29), - black: init(30, 39), - red: init(31, 39), - green: init(32, 39), - yellow: init(33, 39), - blue: init(34, 39), - magenta: init(35, 39), - cyan: init(36, 39), - white: init(37, 39), - gray: init(90, 39), - bgBlack: init(40, 49), - bgRed: init(41, 49), - bgGreen: init(42, 49), - bgYellow: init(43, 49), - bgBlue: init(44, 49), - bgMagenta: init(45, 49), - bgCyan: init(46, 49), - bgWhite: init(47, 49), - blackBright: init(90, 39), - redBright: init(91, 39), - greenBright: init(92, 39), - yellowBright: init(93, 39), - blueBright: init(94, 39), - magentaBright: init(95, 39), - cyanBright: init(96, 39), - whiteBright: init(97, 39), - bgBlackBright: init(100, 49), - bgRedBright: init(101, 49), - bgGreenBright: init(102, 49), - bgYellowBright: init(103, 49), - bgBlueBright: init(104, 49), - bgMagentaBright: init(105, 49), - bgCyanBright: init(106, 49), - bgWhiteBright: init(107, 49), -}; - -const createColors = ({ useColor = isColorSupported } = {}) => - useColor - ? colors$2 - : Object.keys(colors$2).reduce( - (colors, key) => ({ ...colors, [key]: String }), - {} - ); - -const { - reset, - bold, - dim, - italic, - underline, - inverse, - hidden, - strikethrough, - black, - red, - green, - yellow, - blue, - magenta, - cyan, - white, - gray, - bgBlack, - bgRed, - bgGreen, - bgYellow, - bgBlue, - bgMagenta, - bgCyan, - bgWhite, - blackBright, - redBright, - greenBright, - yellowBright, - blueBright, - magentaBright, - cyanBright, - whiteBright, - bgBlackBright, - bgRedBright, - bgGreenBright, - bgYellowBright, - bgBlueBright, - bgMagentaBright, - bgCyanBright, - bgWhiteBright, -} = createColors(); - -var dist = {}; - -var builder = {}; - -var apiBuilder = {}; - -var async$1 = {}; - -var walker = {}; - -var utils$1 = {}; - -Object.defineProperty(utils$1, "__esModule", { value: true }); -utils$1.convertSlashes = utils$1.cleanPath = void 0; -const path_1$2 = path$1; -function cleanPath(path) { - let normalized = (0, path_1$2.normalize)(path); - // we have to remove the last path separator - // to account for / root path - if (normalized.length > 1 && normalized[normalized.length - 1] === path_1$2.sep) - normalized = normalized.substring(0, normalized.length - 1); - return normalized; -} -utils$1.cleanPath = cleanPath; -const SLASHES_REGEX = /[\\/]/g; -function convertSlashes(path, separator) { - return path.replace(SLASHES_REGEX, separator); -} -utils$1.convertSlashes = convertSlashes; - -var joinPath$2 = {}; - -Object.defineProperty(joinPath$2, "__esModule", { value: true }); -joinPath$2.build = joinPath$2.joinDirectoryPath = void 0; -function joinPathWithBasePath(filename, directoryPath) { - return directoryPath + filename; -} -function joinPathWithRelativePath(root) { - return function (filename, directoryPath) { - return directoryPath.substring(root.length) + filename; - }; -} -function joinPath$1(filename) { - return filename; -} -function joinDirectoryPath(filename, directoryPath, separator) { - return directoryPath + filename + separator; -} -joinPath$2.joinDirectoryPath = joinDirectoryPath; -function build$7(root, options) { - const { relativePaths, includeBasePath } = options; - return relativePaths && root - ? joinPathWithRelativePath(root) - : includeBasePath - ? joinPathWithBasePath - : joinPath$1; -} -joinPath$2.build = build$7; - -var pushDirectory$2 = {}; - -Object.defineProperty(pushDirectory$2, "__esModule", { value: true }); -pushDirectory$2.build = void 0; -const pushDirectory$1 = (directoryPath, paths) => { - paths.push(directoryPath || "."); -}; -const pushDirectoryFilter = (directoryPath, paths, filters) => { - if (filters.every((filter) => filter(directoryPath, true))) { - paths.push(directoryPath); - } -}; -const empty$3 = () => { }; -function build$6(options) { - const { includeDirs, filters } = options; - if (!includeDirs) - return empty$3; - return filters && filters.length ? pushDirectoryFilter : pushDirectory$1; -} -pushDirectory$2.build = build$6; - -var pushFile$2 = {}; - -Object.defineProperty(pushFile$2, "__esModule", { value: true }); -pushFile$2.build = void 0; -const pushFileFilterAndCount = (filename, _paths, counts, filters) => { - if (filters.every((filter) => filter(filename, false))) - counts.files++; -}; -const pushFileFilter = (filename, paths, _counts, filters) => { - if (filters.every((filter) => filter(filename, false))) - paths.push(filename); -}; -const pushFileCount = (_filename, _paths, counts, _filters) => { - counts.files++; -}; -const pushFile$1 = (filename, paths) => { - paths.push(filename); -}; -const empty$2 = () => { }; -function build$5(options) { - const { excludeFiles, filters, onlyCounts } = options; - if (excludeFiles) - return empty$2; - if (filters && filters.length) { - return onlyCounts ? pushFileFilterAndCount : pushFileFilter; - } - else if (onlyCounts) { - return pushFileCount; - } - else { - return pushFile$1; - } -} -pushFile$2.build = build$5; - -var getArray$2 = {}; - -Object.defineProperty(getArray$2, "__esModule", { value: true }); -getArray$2.build = void 0; -const getArray$1 = (paths) => { - return paths; -}; -const getArrayGroup = () => { - return [""].slice(0, 0); -}; -function build$4(options) { - return options.group ? getArrayGroup : getArray$1; -} -getArray$2.build = build$4; - -var groupFiles$2 = {}; - -Object.defineProperty(groupFiles$2, "__esModule", { value: true }); -groupFiles$2.build = void 0; -const groupFiles$1 = (groups, directory, files) => { - groups.push({ directory, files, dir: directory }); -}; -const empty$1 = () => { }; -function build$3(options) { - return options.group ? groupFiles$1 : empty$1; -} -groupFiles$2.build = build$3; - -var resolveSymlink$1 = {}; - -var __importDefault$1 = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(resolveSymlink$1, "__esModule", { value: true }); -resolveSymlink$1.build = void 0; -const fs_1$2 = __importDefault$1(require$$0$2); -const resolveSymlinksAsync = function (path, state, callback) { - const { queue, options: { suppressErrors }, } = state; - queue.enqueue(); - fs_1$2.default.realpath(path, (error, resolvedPath) => { - if (error) { - queue.dequeue(suppressErrors ? null : error, state); - return; - } - fs_1$2.default.lstat(resolvedPath, (_error, stat) => { - callback(stat, resolvedPath); - queue.dequeue(null, state); - }); - }); -}; -const resolveSymlinksSync = function (path, state, callback) { - try { - const resolvedPath = fs_1$2.default.realpathSync(path); - const stat = fs_1$2.default.lstatSync(resolvedPath); - callback(stat, resolvedPath); - } - catch (e) { - if (!state.options.suppressErrors) - throw e; - } -}; -function build$2(options, isSynchronous) { - if (!options.resolveSymlinks) - return null; - return isSynchronous ? resolveSymlinksSync : resolveSymlinksAsync; -} -resolveSymlink$1.build = build$2; - -var invokeCallback$1 = {}; - -Object.defineProperty(invokeCallback$1, "__esModule", { value: true }); -invokeCallback$1.build = void 0; -const onlyCountsSync = (state) => { - return state.counts; -}; -const groupsSync = (state) => { - return state.groups; -}; -const defaultSync = (state) => { - return state.paths; -}; -const limitFilesSync = (state) => { - return state.paths.slice(0, state.options.maxFiles); -}; -const onlyCountsAsync = (state, error, callback) => { - report(error, callback, state.counts, state.options.suppressErrors); - return null; -}; -const defaultAsync = (state, error, callback) => { - report(error, callback, state.paths, state.options.suppressErrors); - return null; -}; -const limitFilesAsync = (state, error, callback) => { - report(error, callback, state.paths.slice(0, state.options.maxFiles), state.options.suppressErrors); - return null; -}; -const groupsAsync = (state, error, callback) => { - report(error, callback, state.groups, state.options.suppressErrors); - return null; -}; -function report(error, callback, output, suppressErrors) { - if (error && !suppressErrors) - callback(error, output); - else - callback(null, output); -} -function build$1(options, isSynchronous) { - const { onlyCounts, group, maxFiles } = options; - if (onlyCounts) - return isSynchronous - ? onlyCountsSync - : onlyCountsAsync; - else if (group) - return isSynchronous - ? groupsSync - : groupsAsync; - else if (maxFiles) - return isSynchronous - ? limitFilesSync - : limitFilesAsync; - else - return isSynchronous - ? defaultSync - : defaultAsync; -} -invokeCallback$1.build = build$1; - -var walkDirectory$1 = {}; - -var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(walkDirectory$1, "__esModule", { value: true }); -walkDirectory$1.build = void 0; -const fs_1$1 = __importDefault(require$$0$2); -const readdirOpts = { withFileTypes: true }; -const walkAsync = (state, directoryPath, currentDepth, callback) => { - state.queue.enqueue(); - if (currentDepth < 0) { - state.queue.dequeue(null, state); - return; - } - state.counts.directories++; - // Perf: Node >= 10 introduced withFileTypes that helps us - // skip an extra fs.stat call. - fs_1$1.default.readdir(directoryPath || ".", readdirOpts, function process(error, entries = []) { - callback(entries, directoryPath, currentDepth); - state.queue.dequeue(state.options.suppressErrors ? null : error, state); - }); -}; -const walkSync = (state, directoryPath, currentDepth, callback) => { - if (currentDepth < 0) { - return; - } - state.counts.directories++; - let entries = []; - try { - entries = fs_1$1.default.readdirSync(directoryPath || ".", readdirOpts); - } - catch (e) { - if (!state.options.suppressErrors) - throw e; - } - callback(entries, directoryPath, currentDepth); -}; -function build(isSynchronous) { - return isSynchronous ? walkSync : walkAsync; -} -walkDirectory$1.build = build; - -var queue$1 = {}; - -Object.defineProperty(queue$1, "__esModule", { value: true }); -queue$1.Queue = void 0; -/** - * This is a custom stateless queue to track concurrent async fs calls. - * It increments a counter whenever a call is queued and decrements it - * as soon as it completes. When the counter hits 0, it calls onQueueEmpty. - */ -class Queue { - onQueueEmpty; - count = 0; - constructor(onQueueEmpty) { - this.onQueueEmpty = onQueueEmpty; - } - enqueue() { - this.count++; - } - dequeue(error, output) { - if (--this.count === 0 || error) - this.onQueueEmpty(error, output); - } -} -queue$1.Queue = Queue; - -var counter = {}; - -Object.defineProperty(counter, "__esModule", { value: true }); -counter.Counter = void 0; -class Counter { - _files = 0; - _directories = 0; - set files(num) { - this._files = num; - } - get files() { - return this._files; - } - set directories(num) { - this._directories = num; - } - get directories() { - return this._directories; - } - /** - * @deprecated use `directories` instead - */ - /* c8 ignore next 3 */ - get dirs() { - return this._directories; - } -} -counter.Counter = Counter; - -var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (commonjsGlobal && commonjsGlobal.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -Object.defineProperty(walker, "__esModule", { value: true }); -walker.Walker = void 0; -const path_1$1 = path$1; -const utils_1 = utils$1; -const joinPath = __importStar(joinPath$2); -const pushDirectory = __importStar(pushDirectory$2); -const pushFile = __importStar(pushFile$2); -const getArray = __importStar(getArray$2); -const groupFiles = __importStar(groupFiles$2); -const resolveSymlink = __importStar(resolveSymlink$1); -const invokeCallback = __importStar(invokeCallback$1); -const walkDirectory = __importStar(walkDirectory$1); -const queue_1 = queue$1; -const counter_1 = counter; -class Walker { - root; - isSynchronous; - state; - joinPath; - pushDirectory; - pushFile; - getArray; - groupFiles; - resolveSymlink; - walkDirectory; - callbackInvoker; - constructor(root, options, callback) { - this.isSynchronous = !callback; - this.callbackInvoker = invokeCallback.build(options, this.isSynchronous); - this.state = { - // Perf: we explicitly tell the compiler to optimize for String arrays - paths: [""].slice(0, 0), - groups: [], - counts: new counter_1.Counter(), - options, - queue: new queue_1.Queue((error, state) => this.callbackInvoker(state, error, callback)), - }; - this.root = this.normalizePath(root); - /* - * Perf: We conditionally change functions according to options. This gives a slight - * performance boost. Since these functions are so small, they are automatically inlined - * by the javascript engine so there's no function call overhead (in most cases). - */ - this.joinPath = joinPath.build(this.root, options); - this.pushDirectory = pushDirectory.build(options); - this.pushFile = pushFile.build(options); - this.getArray = getArray.build(options); - this.groupFiles = groupFiles.build(options); - this.resolveSymlink = resolveSymlink.build(options, this.isSynchronous); - this.walkDirectory = walkDirectory.build(this.isSynchronous); - } - start() { - this.walkDirectory(this.state, this.root, this.state.options.maxDepth, this.walk); - return this.isSynchronous ? this.callbackInvoker(this.state, null) : null; - } - normalizePath(path) { - const { resolvePaths, normalizePath, pathSeparator } = this.state.options; - const pathNeedsCleaning = (process.platform === "win32" && path.includes("/")) || - path.startsWith("."); - if (resolvePaths) - path = (0, path_1$1.resolve)(path); - if (normalizePath || pathNeedsCleaning) - path = (0, utils_1.cleanPath)(path); - if (path === ".") - return ""; - const needsSeperator = path[path.length - 1] !== pathSeparator; - return (0, utils_1.convertSlashes)(needsSeperator ? path + pathSeparator : path, pathSeparator); - } - walk = (entries, directoryPath, depth) => { - const { paths, options: { filters, resolveSymlinks, exclude, maxFiles, signal }, } = this.state; - if ((signal && signal.aborted) || (maxFiles && paths.length > maxFiles)) - return; - this.pushDirectory(directoryPath, paths, filters); - const files = this.getArray(this.state.paths); - for (let i = 0; i < entries.length; ++i) { - const entry = entries[i]; - if (entry.isFile() || (entry.isSymbolicLink() && !resolveSymlinks)) { - const filename = this.joinPath(entry.name, directoryPath); - this.pushFile(filename, files, this.state.counts, filters); - } - else if (entry.isDirectory()) { - let path = joinPath.joinDirectoryPath(entry.name, directoryPath, this.state.options.pathSeparator); - if (exclude && exclude(entry.name, path)) - continue; - this.walkDirectory(this.state, path, depth - 1, this.walk); - } - else if (entry.isSymbolicLink() && resolveSymlinks) { - let path = joinPath.joinDirectoryPath(entry.name, directoryPath, this.state.options.pathSeparator); - this.resolveSymlink(path, this.state, (stat, resolvedPath) => { - if (stat.isDirectory()) { - resolvedPath = this.normalizePath(resolvedPath); - if (exclude && exclude(entry.name, resolvedPath)) - return; - this.walkDirectory(this.state, resolvedPath, depth - 1, this.walk); - } - else { - this.pushFile(resolvedPath, files, this.state.counts, filters); - } - }); - } - } - this.groupFiles(this.state.groups, directoryPath, files); - }; -} -walker.Walker = Walker; - -Object.defineProperty(async$1, "__esModule", { value: true }); -async$1.callback = async$1.promise = void 0; -const walker_1$1 = walker; -function promise(root, options) { - return new Promise((resolve, reject) => { - callback(root, options, (err, output) => { - if (err) - return reject(err); - resolve(output); - }); - }); -} -async$1.promise = promise; -function callback(root, options, callback) { - let walker = new walker_1$1.Walker(root, options, callback); - walker.start(); -} -async$1.callback = callback; - -var sync$1 = {}; - -Object.defineProperty(sync$1, "__esModule", { value: true }); -sync$1.sync = void 0; -const walker_1 = walker; -function sync(root, options) { - const walker = new walker_1.Walker(root, options); - return walker.start(); -} -sync$1.sync = sync; - -Object.defineProperty(apiBuilder, "__esModule", { value: true }); -apiBuilder.APIBuilder = void 0; -const async_1$b = async$1; -const sync_1 = sync$1; -class APIBuilder { - root; - options; - constructor(root, options) { - this.root = root; - this.options = options; - } - withPromise() { - return (0, async_1$b.promise)(this.root, this.options); - } - withCallback(cb) { - (0, async_1$b.callback)(this.root, this.options, cb); - } - sync() { - return (0, sync_1.sync)(this.root, this.options); - } -} -apiBuilder.APIBuilder = APIBuilder; - -var utils = {}; - -var constants; -var hasRequiredConstants; - -function requireConstants () { - if (hasRequiredConstants) return constants; - hasRequiredConstants = 1; - - const path = path$1; - const WIN_SLASH = '\\\\/'; - const WIN_NO_SLASH = `[^${WIN_SLASH}]`; - - /** - * Posix glob regex - */ - - const DOT_LITERAL = '\\.'; - const PLUS_LITERAL = '\\+'; - const QMARK_LITERAL = '\\?'; - const SLASH_LITERAL = '\\/'; - const ONE_CHAR = '(?=.)'; - const QMARK = '[^/]'; - const END_ANCHOR = `(?:${SLASH_LITERAL}|$)`; - const START_ANCHOR = `(?:^|${SLASH_LITERAL})`; - const DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`; - const NO_DOT = `(?!${DOT_LITERAL})`; - const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`; - const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`; - const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`; - const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`; - const STAR = `${QMARK}*?`; - - const POSIX_CHARS = { - DOT_LITERAL, - PLUS_LITERAL, - QMARK_LITERAL, - SLASH_LITERAL, - ONE_CHAR, - QMARK, - END_ANCHOR, - DOTS_SLASH, - NO_DOT, - NO_DOTS, - NO_DOT_SLASH, - NO_DOTS_SLASH, - QMARK_NO_DOT, - STAR, - START_ANCHOR - }; - - /** - * Windows glob regex - */ - - const WINDOWS_CHARS = { - ...POSIX_CHARS, - - SLASH_LITERAL: `[${WIN_SLASH}]`, - QMARK: WIN_NO_SLASH, - STAR: `${WIN_NO_SLASH}*?`, - DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`, - NO_DOT: `(?!${DOT_LITERAL})`, - NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`, - NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`, - NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`, - QMARK_NO_DOT: `[^.${WIN_SLASH}]`, - START_ANCHOR: `(?:^|[${WIN_SLASH}])`, - END_ANCHOR: `(?:[${WIN_SLASH}]|$)` - }; - - /** - * POSIX Bracket Regex - */ - - const POSIX_REGEX_SOURCE = { - alnum: 'a-zA-Z0-9', - alpha: 'a-zA-Z', - ascii: '\\x00-\\x7F', - blank: ' \\t', - cntrl: '\\x00-\\x1F\\x7F', - digit: '0-9', - graph: '\\x21-\\x7E', - lower: 'a-z', - print: '\\x20-\\x7E ', - punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~', - space: ' \\t\\r\\n\\v\\f', - upper: 'A-Z', - word: 'A-Za-z0-9_', - xdigit: 'A-Fa-f0-9' - }; - - constants = { - MAX_LENGTH: 1024 * 64, - POSIX_REGEX_SOURCE, - - // regular expressions - REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g, - REGEX_NON_SPECIAL_CHARS: /^[^@![\].,$*+?^{}()|\\/]+/, - REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/, - REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g, - REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g, - REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g, - - // Replace globs with equivalent patterns to reduce parsing time. - REPLACEMENTS: { - '***': '*', - '**/**': '**', - '**/**/**': '**' - }, - - // Digits - CHAR_0: 48, /* 0 */ - CHAR_9: 57, /* 9 */ - - // Alphabet chars. - CHAR_UPPERCASE_A: 65, /* A */ - CHAR_LOWERCASE_A: 97, /* a */ - CHAR_UPPERCASE_Z: 90, /* Z */ - CHAR_LOWERCASE_Z: 122, /* z */ - - CHAR_LEFT_PARENTHESES: 40, /* ( */ - CHAR_RIGHT_PARENTHESES: 41, /* ) */ - - CHAR_ASTERISK: 42, /* * */ - - // Non-alphabetic chars. - CHAR_AMPERSAND: 38, /* & */ - CHAR_AT: 64, /* @ */ - CHAR_BACKWARD_SLASH: 92, /* \ */ - CHAR_CARRIAGE_RETURN: 13, /* \r */ - CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */ - CHAR_COLON: 58, /* : */ - CHAR_COMMA: 44, /* , */ - CHAR_DOT: 46, /* . */ - CHAR_DOUBLE_QUOTE: 34, /* " */ - CHAR_EQUAL: 61, /* = */ - CHAR_EXCLAMATION_MARK: 33, /* ! */ - CHAR_FORM_FEED: 12, /* \f */ - CHAR_FORWARD_SLASH: 47, /* / */ - CHAR_GRAVE_ACCENT: 96, /* ` */ - CHAR_HASH: 35, /* # */ - CHAR_HYPHEN_MINUS: 45, /* - */ - CHAR_LEFT_ANGLE_BRACKET: 60, /* < */ - CHAR_LEFT_CURLY_BRACE: 123, /* { */ - CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */ - CHAR_LINE_FEED: 10, /* \n */ - CHAR_NO_BREAK_SPACE: 160, /* \u00A0 */ - CHAR_PERCENT: 37, /* % */ - CHAR_PLUS: 43, /* + */ - CHAR_QUESTION_MARK: 63, /* ? */ - CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */ - CHAR_RIGHT_CURLY_BRACE: 125, /* } */ - CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */ - CHAR_SEMICOLON: 59, /* ; */ - CHAR_SINGLE_QUOTE: 39, /* ' */ - CHAR_SPACE: 32, /* */ - CHAR_TAB: 9, /* \t */ - CHAR_UNDERSCORE: 95, /* _ */ - CHAR_VERTICAL_LINE: 124, /* | */ - CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \uFEFF */ - - SEP: path.sep, - - /** - * Create EXTGLOB_CHARS - */ - - extglobChars(chars) { - return { - '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` }, - '?': { type: 'qmark', open: '(?:', close: ')?' }, - '+': { type: 'plus', open: '(?:', close: ')+' }, - '*': { type: 'star', open: '(?:', close: ')*' }, - '@': { type: 'at', open: '(?:', close: ')' } - }; - }, - - /** - * Create GLOB_CHARS - */ - - globChars(win32) { - return win32 === true ? WINDOWS_CHARS : POSIX_CHARS; - } - }; - return constants; -} - -var hasRequiredUtils; - -function requireUtils () { - if (hasRequiredUtils) return utils; - hasRequiredUtils = 1; - (function (exports) { - - const path = path$1; - const win32 = process.platform === 'win32'; - const { - REGEX_BACKSLASH, - REGEX_REMOVE_BACKSLASH, - REGEX_SPECIAL_CHARS, - REGEX_SPECIAL_CHARS_GLOBAL - } = requireConstants(); - - exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val); - exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str); - exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str); - exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1'); - exports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/'); - - exports.removeBackslashes = str => { - return str.replace(REGEX_REMOVE_BACKSLASH, match => { - return match === '\\' ? '' : match; - }); - }; - - exports.supportsLookbehinds = () => { - const segs = process.version.slice(1).split('.').map(Number); - if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) { - return true; - } - return false; - }; - - exports.isWindows = options => { - if (options && typeof options.windows === 'boolean') { - return options.windows; - } - return win32 === true || path.sep === '\\'; - }; - - exports.escapeLast = (input, char, lastIdx) => { - const idx = input.lastIndexOf(char, lastIdx); - if (idx === -1) return input; - if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1); - return `${input.slice(0, idx)}\\${input.slice(idx)}`; - }; - - exports.removePrefix = (input, state = {}) => { - let output = input; - if (output.startsWith('./')) { - output = output.slice(2); - state.prefix = './'; - } - return output; - }; - - exports.wrapOutput = (input, state = {}, options = {}) => { - const prepend = options.contains ? '' : '^'; - const append = options.contains ? '' : '$'; - - let output = `${prepend}(?:${input})${append}`; - if (state.negated === true) { - output = `(?:^(?!${output}).*$)`; - } - return output; - }; - } (utils)); - return utils; -} - -var scan_1; -var hasRequiredScan; - -function requireScan () { - if (hasRequiredScan) return scan_1; - hasRequiredScan = 1; - - const utils = requireUtils(); - const { - CHAR_ASTERISK, /* * */ - CHAR_AT, /* @ */ - CHAR_BACKWARD_SLASH, /* \ */ - CHAR_COMMA, /* , */ - CHAR_DOT, /* . */ - CHAR_EXCLAMATION_MARK, /* ! */ - CHAR_FORWARD_SLASH, /* / */ - CHAR_LEFT_CURLY_BRACE, /* { */ - CHAR_LEFT_PARENTHESES, /* ( */ - CHAR_LEFT_SQUARE_BRACKET, /* [ */ - CHAR_PLUS, /* + */ - CHAR_QUESTION_MARK, /* ? */ - CHAR_RIGHT_CURLY_BRACE, /* } */ - CHAR_RIGHT_PARENTHESES, /* ) */ - CHAR_RIGHT_SQUARE_BRACKET /* ] */ - } = requireConstants(); - - const isPathSeparator = code => { - return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH; - }; - - const depth = token => { - if (token.isPrefix !== true) { - token.depth = token.isGlobstar ? Infinity : 1; - } - }; - - /** - * Quickly scans a glob pattern and returns an object with a handful of - * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists), - * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not - * with `!(`) and `negatedExtglob` (true if the path starts with `!(`). - * - * ```js - * const pm = require('picomatch'); - * console.log(pm.scan('foo/bar/*.js')); - * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' } - * ``` - * @param {String} `str` - * @param {Object} `options` - * @return {Object} Returns an object with tokens and regex source string. - * @api public - */ - - const scan = (input, options) => { - const opts = options || {}; - - const length = input.length - 1; - const scanToEnd = opts.parts === true || opts.scanToEnd === true; - const slashes = []; - const tokens = []; - const parts = []; - - let str = input; - let index = -1; - let start = 0; - let lastIndex = 0; - let isBrace = false; - let isBracket = false; - let isGlob = false; - let isExtglob = false; - let isGlobstar = false; - let braceEscaped = false; - let backslashes = false; - let negated = false; - let negatedExtglob = false; - let finished = false; - let braces = 0; - let prev; - let code; - let token = { value: '', depth: 0, isGlob: false }; - - const eos = () => index >= length; - const peek = () => str.charCodeAt(index + 1); - const advance = () => { - prev = code; - return str.charCodeAt(++index); - }; - - while (index < length) { - code = advance(); - let next; - - if (code === CHAR_BACKWARD_SLASH) { - backslashes = token.backslashes = true; - code = advance(); - - if (code === CHAR_LEFT_CURLY_BRACE) { - braceEscaped = true; - } - continue; - } - - if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) { - braces++; - - while (eos() !== true && (code = advance())) { - if (code === CHAR_BACKWARD_SLASH) { - backslashes = token.backslashes = true; - advance(); - continue; - } - - if (code === CHAR_LEFT_CURLY_BRACE) { - braces++; - continue; - } - - if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) { - isBrace = token.isBrace = true; - isGlob = token.isGlob = true; - finished = true; - - if (scanToEnd === true) { - continue; - } - - break; - } - - if (braceEscaped !== true && code === CHAR_COMMA) { - isBrace = token.isBrace = true; - isGlob = token.isGlob = true; - finished = true; - - if (scanToEnd === true) { - continue; - } - - break; - } - - if (code === CHAR_RIGHT_CURLY_BRACE) { - braces--; - - if (braces === 0) { - braceEscaped = false; - isBrace = token.isBrace = true; - finished = true; - break; - } - } - } - - if (scanToEnd === true) { - continue; - } - - break; - } - - if (code === CHAR_FORWARD_SLASH) { - slashes.push(index); - tokens.push(token); - token = { value: '', depth: 0, isGlob: false }; - - if (finished === true) continue; - if (prev === CHAR_DOT && index === (start + 1)) { - start += 2; - continue; - } - - lastIndex = index + 1; - continue; - } - - if (opts.noext !== true) { - const isExtglobChar = code === CHAR_PLUS - || code === CHAR_AT - || code === CHAR_ASTERISK - || code === CHAR_QUESTION_MARK - || code === CHAR_EXCLAMATION_MARK; - - if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) { - isGlob = token.isGlob = true; - isExtglob = token.isExtglob = true; - finished = true; - if (code === CHAR_EXCLAMATION_MARK && index === start) { - negatedExtglob = true; - } - - if (scanToEnd === true) { - while (eos() !== true && (code = advance())) { - if (code === CHAR_BACKWARD_SLASH) { - backslashes = token.backslashes = true; - code = advance(); - continue; - } - - if (code === CHAR_RIGHT_PARENTHESES) { - isGlob = token.isGlob = true; - finished = true; - break; - } - } - continue; - } - break; - } - } - - if (code === CHAR_ASTERISK) { - if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true; - isGlob = token.isGlob = true; - finished = true; - - if (scanToEnd === true) { - continue; - } - break; - } - - if (code === CHAR_QUESTION_MARK) { - isGlob = token.isGlob = true; - finished = true; - - if (scanToEnd === true) { - continue; - } - break; - } - - if (code === CHAR_LEFT_SQUARE_BRACKET) { - while (eos() !== true && (next = advance())) { - if (next === CHAR_BACKWARD_SLASH) { - backslashes = token.backslashes = true; - advance(); - continue; - } - - if (next === CHAR_RIGHT_SQUARE_BRACKET) { - isBracket = token.isBracket = true; - isGlob = token.isGlob = true; - finished = true; - break; - } - } - - if (scanToEnd === true) { - continue; - } - - break; - } - - if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) { - negated = token.negated = true; - start++; - continue; - } - - if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) { - isGlob = token.isGlob = true; - - if (scanToEnd === true) { - while (eos() !== true && (code = advance())) { - if (code === CHAR_LEFT_PARENTHESES) { - backslashes = token.backslashes = true; - code = advance(); - continue; - } - - if (code === CHAR_RIGHT_PARENTHESES) { - finished = true; - break; - } - } - continue; - } - break; - } - - if (isGlob === true) { - finished = true; - - if (scanToEnd === true) { - continue; - } - - break; - } - } - - if (opts.noext === true) { - isExtglob = false; - isGlob = false; - } - - let base = str; - let prefix = ''; - let glob = ''; - - if (start > 0) { - prefix = str.slice(0, start); - str = str.slice(start); - lastIndex -= start; - } - - if (base && isGlob === true && lastIndex > 0) { - base = str.slice(0, lastIndex); - glob = str.slice(lastIndex); - } else if (isGlob === true) { - base = ''; - glob = str; - } else { - base = str; - } - - if (base && base !== '' && base !== '/' && base !== str) { - if (isPathSeparator(base.charCodeAt(base.length - 1))) { - base = base.slice(0, -1); - } - } - - if (opts.unescape === true) { - if (glob) glob = utils.removeBackslashes(glob); - - if (base && backslashes === true) { - base = utils.removeBackslashes(base); - } - } - - const state = { - prefix, - input, - start, - base, - glob, - isBrace, - isBracket, - isGlob, - isExtglob, - isGlobstar, - negated, - negatedExtglob - }; - - if (opts.tokens === true) { - state.maxDepth = 0; - if (!isPathSeparator(code)) { - tokens.push(token); - } - state.tokens = tokens; - } - - if (opts.parts === true || opts.tokens === true) { - let prevIndex; - - for (let idx = 0; idx < slashes.length; idx++) { - const n = prevIndex ? prevIndex + 1 : start; - const i = slashes[idx]; - const value = input.slice(n, i); - if (opts.tokens) { - if (idx === 0 && start !== 0) { - tokens[idx].isPrefix = true; - tokens[idx].value = prefix; - } else { - tokens[idx].value = value; - } - depth(tokens[idx]); - state.maxDepth += tokens[idx].depth; - } - if (idx !== 0 || value !== '') { - parts.push(value); - } - prevIndex = i; - } - - if (prevIndex && prevIndex + 1 < input.length) { - const value = input.slice(prevIndex + 1); - parts.push(value); - - if (opts.tokens) { - tokens[tokens.length - 1].value = value; - depth(tokens[tokens.length - 1]); - state.maxDepth += tokens[tokens.length - 1].depth; - } - } - - state.slashes = slashes; - state.parts = parts; - } - - return state; - }; - - scan_1 = scan; - return scan_1; -} - -var parse_1; -var hasRequiredParse; - -function requireParse () { - if (hasRequiredParse) return parse_1; - hasRequiredParse = 1; - - const constants = requireConstants(); - const utils = requireUtils(); - - /** - * Constants - */ - - const { - MAX_LENGTH, - POSIX_REGEX_SOURCE, - REGEX_NON_SPECIAL_CHARS, - REGEX_SPECIAL_CHARS_BACKREF, - REPLACEMENTS - } = constants; - - /** - * Helpers - */ - - const expandRange = (args, options) => { - if (typeof options.expandRange === 'function') { - return options.expandRange(...args, options); - } - - args.sort(); - const value = `[${args.join('-')}]`; - - try { - /* eslint-disable-next-line no-new */ - new RegExp(value); - } catch (ex) { - return args.map(v => utils.escapeRegex(v)).join('..'); - } - - return value; - }; - - /** - * Create the message for a syntax error - */ - - const syntaxError = (type, char) => { - return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`; - }; - - /** - * Parse the given input string. - * @param {String} input - * @param {Object} options - * @return {Object} - */ - - const parse = (input, options) => { - if (typeof input !== 'string') { - throw new TypeError('Expected a string'); - } - - input = REPLACEMENTS[input] || input; - - const opts = { ...options }; - const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; - - let len = input.length; - if (len > max) { - throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`); - } - - const bos = { type: 'bos', value: '', output: opts.prepend || '' }; - const tokens = [bos]; - - const capture = opts.capture ? '' : '?:'; - const win32 = utils.isWindows(options); - - // create constants based on platform, for windows or posix - const PLATFORM_CHARS = constants.globChars(win32); - const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS); - - const { - DOT_LITERAL, - PLUS_LITERAL, - SLASH_LITERAL, - ONE_CHAR, - DOTS_SLASH, - NO_DOT, - NO_DOT_SLASH, - NO_DOTS_SLASH, - QMARK, - QMARK_NO_DOT, - STAR, - START_ANCHOR - } = PLATFORM_CHARS; - - const globstar = opts => { - return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`; - }; - - const nodot = opts.dot ? '' : NO_DOT; - const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT; - let star = opts.bash === true ? globstar(opts) : STAR; - - if (opts.capture) { - star = `(${star})`; - } - - // minimatch options support - if (typeof opts.noext === 'boolean') { - opts.noextglob = opts.noext; - } - - const state = { - input, - index: -1, - start: 0, - dot: opts.dot === true, - consumed: '', - output: '', - prefix: '', - backtrack: false, - negated: false, - brackets: 0, - braces: 0, - parens: 0, - quotes: 0, - globstar: false, - tokens - }; - - input = utils.removePrefix(input, state); - len = input.length; - - const extglobs = []; - const braces = []; - const stack = []; - let prev = bos; - let value; - - /** - * Tokenizing helpers - */ - - const eos = () => state.index === len - 1; - const peek = state.peek = (n = 1) => input[state.index + n]; - const advance = state.advance = () => input[++state.index] || ''; - const remaining = () => input.slice(state.index + 1); - const consume = (value = '', num = 0) => { - state.consumed += value; - state.index += num; - }; - - const append = token => { - state.output += token.output != null ? token.output : token.value; - consume(token.value); - }; - - const negate = () => { - let count = 1; - - while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) { - advance(); - state.start++; - count++; - } - - if (count % 2 === 0) { - return false; - } - - state.negated = true; - state.start++; - return true; - }; - - const increment = type => { - state[type]++; - stack.push(type); - }; - - const decrement = type => { - state[type]--; - stack.pop(); - }; - - /** - * Push tokens onto the tokens array. This helper speeds up - * tokenizing by 1) helping us avoid backtracking as much as possible, - * and 2) helping us avoid creating extra tokens when consecutive - * characters are plain text. This improves performance and simplifies - * lookbehinds. - */ - - const push = tok => { - if (prev.type === 'globstar') { - const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace'); - const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren')); - - if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) { - state.output = state.output.slice(0, -prev.output.length); - prev.type = 'star'; - prev.value = '*'; - prev.output = star; - state.output += prev.output; - } - } - - if (extglobs.length && tok.type !== 'paren') { - extglobs[extglobs.length - 1].inner += tok.value; - } - - if (tok.value || tok.output) append(tok); - if (prev && prev.type === 'text' && tok.type === 'text') { - prev.value += tok.value; - prev.output = (prev.output || '') + tok.value; - return; - } - - tok.prev = prev; - tokens.push(tok); - prev = tok; - }; - - const extglobOpen = (type, value) => { - const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' }; - - token.prev = prev; - token.parens = state.parens; - token.output = state.output; - const output = (opts.capture ? '(' : '') + token.open; - - increment('parens'); - push({ type, value, output: state.output ? '' : ONE_CHAR }); - push({ type: 'paren', extglob: true, value: advance(), output }); - extglobs.push(token); - }; - - const extglobClose = token => { - let output = token.close + (opts.capture ? ')' : ''); - let rest; - - if (token.type === 'negate') { - let extglobStar = star; - - if (token.inner && token.inner.length > 1 && token.inner.includes('/')) { - extglobStar = globstar(opts); - } - - if (extglobStar !== star || eos() || /^\)+$/.test(remaining())) { - output = token.close = `)$))${extglobStar}`; - } - - if (token.inner.includes('*') && (rest = remaining()) && /^\.[^\\/.]+$/.test(rest)) { - // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis. - // In this case, we need to parse the string and use it in the output of the original pattern. - // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`. - // - // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`. - const expression = parse(rest, { ...options, fastpaths: false }).output; - - output = token.close = `)${expression})${extglobStar})`; - } - - if (token.prev.type === 'bos') { - state.negatedExtglob = true; - } - } - - push({ type: 'paren', extglob: true, value, output }); - decrement('parens'); - }; - - /** - * Fast paths - */ - - if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) { - let backslashes = false; - - let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => { - if (first === '\\') { - backslashes = true; - return m; - } - - if (first === '?') { - if (esc) { - return esc + first + (rest ? QMARK.repeat(rest.length) : ''); - } - if (index === 0) { - return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : ''); - } - return QMARK.repeat(chars.length); - } - - if (first === '.') { - return DOT_LITERAL.repeat(chars.length); - } - - if (first === '*') { - if (esc) { - return esc + first + (rest ? star : ''); - } - return star; - } - return esc ? m : `\\${m}`; - }); - - if (backslashes === true) { - if (opts.unescape === true) { - output = output.replace(/\\/g, ''); - } else { - output = output.replace(/\\+/g, m => { - return m.length % 2 === 0 ? '\\\\' : (m ? '\\' : ''); - }); - } - } - - if (output === input && opts.contains === true) { - state.output = input; - return state; - } - - state.output = utils.wrapOutput(output, state, options); - return state; - } - - /** - * Tokenize input until we reach end-of-string - */ - - while (!eos()) { - value = advance(); - - if (value === '\u0000') { - continue; - } - - /** - * Escaped characters - */ - - if (value === '\\') { - const next = peek(); - - if (next === '/' && opts.bash !== true) { - continue; - } - - if (next === '.' || next === ';') { - continue; - } - - if (!next) { - value += '\\'; - push({ type: 'text', value }); - continue; - } - - // collapse slashes to reduce potential for exploits - const match = /^\\+/.exec(remaining()); - let slashes = 0; - - if (match && match[0].length > 2) { - slashes = match[0].length; - state.index += slashes; - if (slashes % 2 !== 0) { - value += '\\'; - } - } - - if (opts.unescape === true) { - value = advance(); - } else { - value += advance(); - } - - if (state.brackets === 0) { - push({ type: 'text', value }); - continue; - } - } - - /** - * If we're inside a regex character class, continue - * until we reach the closing bracket. - */ - - if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) { - if (opts.posix !== false && value === ':') { - const inner = prev.value.slice(1); - if (inner.includes('[')) { - prev.posix = true; - - if (inner.includes(':')) { - const idx = prev.value.lastIndexOf('['); - const pre = prev.value.slice(0, idx); - const rest = prev.value.slice(idx + 2); - const posix = POSIX_REGEX_SOURCE[rest]; - if (posix) { - prev.value = pre + posix; - state.backtrack = true; - advance(); - - if (!bos.output && tokens.indexOf(prev) === 1) { - bos.output = ONE_CHAR; - } - continue; - } - } - } - } - - if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) { - value = `\\${value}`; - } - - if (value === ']' && (prev.value === '[' || prev.value === '[^')) { - value = `\\${value}`; - } - - if (opts.posix === true && value === '!' && prev.value === '[') { - value = '^'; - } - - prev.value += value; - append({ value }); - continue; - } - - /** - * If we're inside a quoted string, continue - * until we reach the closing double quote. - */ - - if (state.quotes === 1 && value !== '"') { - value = utils.escapeRegex(value); - prev.value += value; - append({ value }); - continue; - } - - /** - * Double quotes - */ - - if (value === '"') { - state.quotes = state.quotes === 1 ? 0 : 1; - if (opts.keepQuotes === true) { - push({ type: 'text', value }); - } - continue; - } - - /** - * Parentheses - */ - - if (value === '(') { - increment('parens'); - push({ type: 'paren', value }); - continue; - } - - if (value === ')') { - if (state.parens === 0 && opts.strictBrackets === true) { - throw new SyntaxError(syntaxError('opening', '(')); - } - - const extglob = extglobs[extglobs.length - 1]; - if (extglob && state.parens === extglob.parens + 1) { - extglobClose(extglobs.pop()); - continue; - } - - push({ type: 'paren', value, output: state.parens ? ')' : '\\)' }); - decrement('parens'); - continue; - } - - /** - * Square brackets - */ - - if (value === '[') { - if (opts.nobracket === true || !remaining().includes(']')) { - if (opts.nobracket !== true && opts.strictBrackets === true) { - throw new SyntaxError(syntaxError('closing', ']')); - } - - value = `\\${value}`; - } else { - increment('brackets'); - } - - push({ type: 'bracket', value }); - continue; - } - - if (value === ']') { - if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) { - push({ type: 'text', value, output: `\\${value}` }); - continue; - } - - if (state.brackets === 0) { - if (opts.strictBrackets === true) { - throw new SyntaxError(syntaxError('opening', '[')); - } - - push({ type: 'text', value, output: `\\${value}` }); - continue; - } - - decrement('brackets'); - - const prevValue = prev.value.slice(1); - if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) { - value = `/${value}`; - } - - prev.value += value; - append({ value }); - - // when literal brackets are explicitly disabled - // assume we should match with a regex character class - if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) { - continue; - } - - const escaped = utils.escapeRegex(prev.value); - state.output = state.output.slice(0, -prev.value.length); - - // when literal brackets are explicitly enabled - // assume we should escape the brackets to match literal characters - if (opts.literalBrackets === true) { - state.output += escaped; - prev.value = escaped; - continue; - } - - // when the user specifies nothing, try to match both - prev.value = `(${capture}${escaped}|${prev.value})`; - state.output += prev.value; - continue; - } - - /** - * Braces - */ - - if (value === '{' && opts.nobrace !== true) { - increment('braces'); - - const open = { - type: 'brace', - value, - output: '(', - outputIndex: state.output.length, - tokensIndex: state.tokens.length - }; - - braces.push(open); - push(open); - continue; - } - - if (value === '}') { - const brace = braces[braces.length - 1]; - - if (opts.nobrace === true || !brace) { - push({ type: 'text', value, output: value }); - continue; - } - - let output = ')'; - - if (brace.dots === true) { - const arr = tokens.slice(); - const range = []; - - for (let i = arr.length - 1; i >= 0; i--) { - tokens.pop(); - if (arr[i].type === 'brace') { - break; - } - if (arr[i].type !== 'dots') { - range.unshift(arr[i].value); - } - } - - output = expandRange(range, opts); - state.backtrack = true; - } - - if (brace.comma !== true && brace.dots !== true) { - const out = state.output.slice(0, brace.outputIndex); - const toks = state.tokens.slice(brace.tokensIndex); - brace.value = brace.output = '\\{'; - value = output = '\\}'; - state.output = out; - for (const t of toks) { - state.output += (t.output || t.value); - } - } - - push({ type: 'brace', value, output }); - decrement('braces'); - braces.pop(); - continue; - } - - /** - * Pipes - */ - - if (value === '|') { - if (extglobs.length > 0) { - extglobs[extglobs.length - 1].conditions++; - } - push({ type: 'text', value }); - continue; - } - - /** - * Commas - */ - - if (value === ',') { - let output = value; - - const brace = braces[braces.length - 1]; - if (brace && stack[stack.length - 1] === 'braces') { - brace.comma = true; - output = '|'; - } - - push({ type: 'comma', value, output }); - continue; - } - - /** - * Slashes - */ - - if (value === '/') { - // if the beginning of the glob is "./", advance the start - // to the current index, and don't add the "./" characters - // to the state. This greatly simplifies lookbehinds when - // checking for BOS characters like "!" and "." (not "./") - if (prev.type === 'dot' && state.index === state.start + 1) { - state.start = state.index + 1; - state.consumed = ''; - state.output = ''; - tokens.pop(); - prev = bos; // reset "prev" to the first token - continue; - } - - push({ type: 'slash', value, output: SLASH_LITERAL }); - continue; - } - - /** - * Dots - */ - - if (value === '.') { - if (state.braces > 0 && prev.type === 'dot') { - if (prev.value === '.') prev.output = DOT_LITERAL; - const brace = braces[braces.length - 1]; - prev.type = 'dots'; - prev.output += value; - prev.value += value; - brace.dots = true; - continue; - } - - if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') { - push({ type: 'text', value, output: DOT_LITERAL }); - continue; - } - - push({ type: 'dot', value, output: DOT_LITERAL }); - continue; - } - - /** - * Question marks - */ - - if (value === '?') { - const isGroup = prev && prev.value === '('; - if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { - extglobOpen('qmark', value); - continue; - } - - if (prev && prev.type === 'paren') { - const next = peek(); - let output = value; - - if (next === '<' && !utils.supportsLookbehinds()) { - throw new Error('Node.js v10 or higher is required for regex lookbehinds'); - } - - if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\w+>)/.test(remaining()))) { - output = `\\${value}`; - } - - push({ type: 'text', value, output }); - continue; - } - - if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) { - push({ type: 'qmark', value, output: QMARK_NO_DOT }); - continue; - } - - push({ type: 'qmark', value, output: QMARK }); - continue; - } - - /** - * Exclamation - */ - - if (value === '!') { - if (opts.noextglob !== true && peek() === '(') { - if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) { - extglobOpen('negate', value); - continue; - } - } - - if (opts.nonegate !== true && state.index === 0) { - negate(); - continue; - } - } - - /** - * Plus - */ - - if (value === '+') { - if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { - extglobOpen('plus', value); - continue; - } - - if ((prev && prev.value === '(') || opts.regex === false) { - push({ type: 'plus', value, output: PLUS_LITERAL }); - continue; - } - - if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) { - push({ type: 'plus', value }); - continue; - } - - push({ type: 'plus', value: PLUS_LITERAL }); - continue; - } - - /** - * Plain text - */ - - if (value === '@') { - if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { - push({ type: 'at', extglob: true, value, output: '' }); - continue; - } - - push({ type: 'text', value }); - continue; - } - - /** - * Plain text - */ - - if (value !== '*') { - if (value === '$' || value === '^') { - value = `\\${value}`; - } - - const match = REGEX_NON_SPECIAL_CHARS.exec(remaining()); - if (match) { - value += match[0]; - state.index += match[0].length; - } - - push({ type: 'text', value }); - continue; - } - - /** - * Stars - */ - - if (prev && (prev.type === 'globstar' || prev.star === true)) { - prev.type = 'star'; - prev.star = true; - prev.value += value; - prev.output = star; - state.backtrack = true; - state.globstar = true; - consume(value); - continue; - } - - let rest = remaining(); - if (opts.noextglob !== true && /^\([^?]/.test(rest)) { - extglobOpen('star', value); - continue; - } - - if (prev.type === 'star') { - if (opts.noglobstar === true) { - consume(value); - continue; - } - - const prior = prev.prev; - const before = prior.prev; - const isStart = prior.type === 'slash' || prior.type === 'bos'; - const afterStar = before && (before.type === 'star' || before.type === 'globstar'); - - if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) { - push({ type: 'star', value, output: '' }); - continue; - } - - const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace'); - const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren'); - if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) { - push({ type: 'star', value, output: '' }); - continue; - } - - // strip consecutive `/**/` - while (rest.slice(0, 3) === '/**') { - const after = input[state.index + 4]; - if (after && after !== '/') { - break; - } - rest = rest.slice(3); - consume('/**', 3); - } - - if (prior.type === 'bos' && eos()) { - prev.type = 'globstar'; - prev.value += value; - prev.output = globstar(opts); - state.output = prev.output; - state.globstar = true; - consume(value); - continue; - } - - if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) { - state.output = state.output.slice(0, -(prior.output + prev.output).length); - prior.output = `(?:${prior.output}`; - - prev.type = 'globstar'; - prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)'); - prev.value += value; - state.globstar = true; - state.output += prior.output + prev.output; - consume(value); - continue; - } - - if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') { - const end = rest[1] !== void 0 ? '|$' : ''; - - state.output = state.output.slice(0, -(prior.output + prev.output).length); - prior.output = `(?:${prior.output}`; - - prev.type = 'globstar'; - prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`; - prev.value += value; - - state.output += prior.output + prev.output; - state.globstar = true; - - consume(value + advance()); - - push({ type: 'slash', value: '/', output: '' }); - continue; - } - - if (prior.type === 'bos' && rest[0] === '/') { - prev.type = 'globstar'; - prev.value += value; - prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`; - state.output = prev.output; - state.globstar = true; - consume(value + advance()); - push({ type: 'slash', value: '/', output: '' }); - continue; - } - - // remove single star from output - state.output = state.output.slice(0, -prev.output.length); - - // reset previous token to globstar - prev.type = 'globstar'; - prev.output = globstar(opts); - prev.value += value; - - // reset output with globstar - state.output += prev.output; - state.globstar = true; - consume(value); - continue; - } - - const token = { type: 'star', value, output: star }; - - if (opts.bash === true) { - token.output = '.*?'; - if (prev.type === 'bos' || prev.type === 'slash') { - token.output = nodot + token.output; - } - push(token); - continue; - } - - if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) { - token.output = value; - push(token); - continue; - } - - if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') { - if (prev.type === 'dot') { - state.output += NO_DOT_SLASH; - prev.output += NO_DOT_SLASH; - - } else if (opts.dot === true) { - state.output += NO_DOTS_SLASH; - prev.output += NO_DOTS_SLASH; - - } else { - state.output += nodot; - prev.output += nodot; - } - - if (peek() !== '*') { - state.output += ONE_CHAR; - prev.output += ONE_CHAR; - } - } - - push(token); - } - - while (state.brackets > 0) { - if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']')); - state.output = utils.escapeLast(state.output, '['); - decrement('brackets'); - } - - while (state.parens > 0) { - if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')')); - state.output = utils.escapeLast(state.output, '('); - decrement('parens'); - } - - while (state.braces > 0) { - if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}')); - state.output = utils.escapeLast(state.output, '{'); - decrement('braces'); - } - - if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) { - push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` }); - } - - // rebuild the output if we had to backtrack at any point - if (state.backtrack === true) { - state.output = ''; - - for (const token of state.tokens) { - state.output += token.output != null ? token.output : token.value; - - if (token.suffix) { - state.output += token.suffix; - } - } - } - - return state; - }; - - /** - * Fast paths for creating regular expressions for common glob patterns. - * This can significantly speed up processing and has very little downside - * impact when none of the fast paths match. - */ - - parse.fastpaths = (input, options) => { - const opts = { ...options }; - const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; - const len = input.length; - if (len > max) { - throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`); - } - - input = REPLACEMENTS[input] || input; - const win32 = utils.isWindows(options); - - // create constants based on platform, for windows or posix - const { - DOT_LITERAL, - SLASH_LITERAL, - ONE_CHAR, - DOTS_SLASH, - NO_DOT, - NO_DOTS, - NO_DOTS_SLASH, - STAR, - START_ANCHOR - } = constants.globChars(win32); - - const nodot = opts.dot ? NO_DOTS : NO_DOT; - const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT; - const capture = opts.capture ? '' : '?:'; - const state = { negated: false, prefix: '' }; - let star = opts.bash === true ? '.*?' : STAR; - - if (opts.capture) { - star = `(${star})`; - } - - const globstar = opts => { - if (opts.noglobstar === true) return star; - return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`; - }; - - const create = str => { - switch (str) { - case '*': - return `${nodot}${ONE_CHAR}${star}`; - - case '.*': - return `${DOT_LITERAL}${ONE_CHAR}${star}`; - - case '*.*': - return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`; - - case '*/*': - return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`; - - case '**': - return nodot + globstar(opts); - - case '**/*': - return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`; - - case '**/*.*': - return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`; - - case '**/.*': - return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`; - - default: { - const match = /^(.*?)\.(\w+)$/.exec(str); - if (!match) return; - - const source = create(match[1]); - if (!source) return; - - return source + DOT_LITERAL + match[2]; - } - } - }; - - const output = utils.removePrefix(input, state); - let source = create(output); - - if (source && opts.strictSlashes !== true) { - source += `${SLASH_LITERAL}?`; - } - - return source; - }; - - parse_1 = parse; - return parse_1; -} - -var picomatch_1; -var hasRequiredPicomatch$1; - -function requirePicomatch$1 () { - if (hasRequiredPicomatch$1) return picomatch_1; - hasRequiredPicomatch$1 = 1; - - const path = path$1; - const scan = requireScan(); - const parse = requireParse(); - const utils = requireUtils(); - const constants = requireConstants(); - const isObject = val => val && typeof val === 'object' && !Array.isArray(val); - - /** - * Creates a matcher function from one or more glob patterns. The - * returned function takes a string to match as its first argument, - * and returns true if the string is a match. The returned matcher - * function also takes a boolean as the second argument that, when true, - * returns an object with additional information. - * - * ```js - * const picomatch = require('picomatch'); - * // picomatch(glob[, options]); - * - * const isMatch = picomatch('*.!(*a)'); - * console.log(isMatch('a.a')); //=> false - * console.log(isMatch('a.b')); //=> true - * ``` - * @name picomatch - * @param {String|Array} `globs` One or more glob patterns. - * @param {Object=} `options` - * @return {Function=} Returns a matcher function. - * @api public - */ - - const picomatch = (glob, options, returnState = false) => { - if (Array.isArray(glob)) { - const fns = glob.map(input => picomatch(input, options, returnState)); - const arrayMatcher = str => { - for (const isMatch of fns) { - const state = isMatch(str); - if (state) return state; - } - return false; - }; - return arrayMatcher; - } - - const isState = isObject(glob) && glob.tokens && glob.input; - - if (glob === '' || (typeof glob !== 'string' && !isState)) { - throw new TypeError('Expected pattern to be a non-empty string'); - } - - const opts = options || {}; - const posix = utils.isWindows(options); - const regex = isState - ? picomatch.compileRe(glob, options) - : picomatch.makeRe(glob, options, false, true); - - const state = regex.state; - delete regex.state; - - let isIgnored = () => false; - if (opts.ignore) { - const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null }; - isIgnored = picomatch(opts.ignore, ignoreOpts, returnState); - } - - const matcher = (input, returnObject = false) => { - const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix }); - const result = { glob, state, regex, posix, input, output, match, isMatch }; - - if (typeof opts.onResult === 'function') { - opts.onResult(result); - } - - if (isMatch === false) { - result.isMatch = false; - return returnObject ? result : false; - } - - if (isIgnored(input)) { - if (typeof opts.onIgnore === 'function') { - opts.onIgnore(result); - } - result.isMatch = false; - return returnObject ? result : false; - } - - if (typeof opts.onMatch === 'function') { - opts.onMatch(result); - } - return returnObject ? result : true; - }; - - if (returnState) { - matcher.state = state; - } - - return matcher; - }; - - /** - * Test `input` with the given `regex`. This is used by the main - * `picomatch()` function to test the input string. - * - * ```js - * const picomatch = require('picomatch'); - * // picomatch.test(input, regex[, options]); - * - * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/)); - * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' } - * ``` - * @param {String} `input` String to test. - * @param {RegExp} `regex` - * @return {Object} Returns an object with matching info. - * @api public - */ - - picomatch.test = (input, regex, options, { glob, posix } = {}) => { - if (typeof input !== 'string') { - throw new TypeError('Expected input to be a string'); - } - - if (input === '') { - return { isMatch: false, output: '' }; - } - - const opts = options || {}; - const format = opts.format || (posix ? utils.toPosixSlashes : null); - let match = input === glob; - let output = (match && format) ? format(input) : input; - - if (match === false) { - output = format ? format(input) : input; - match = output === glob; - } - - if (match === false || opts.capture === true) { - if (opts.matchBase === true || opts.basename === true) { - match = picomatch.matchBase(input, regex, options, posix); - } else { - match = regex.exec(output); - } - } - - return { isMatch: Boolean(match), match, output }; - }; - - /** - * Match the basename of a filepath. - * - * ```js - * const picomatch = require('picomatch'); - * // picomatch.matchBase(input, glob[, options]); - * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true - * ``` - * @param {String} `input` String to test. - * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe). - * @return {Boolean} - * @api public - */ - - picomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => { - const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options); - return regex.test(path.basename(input)); - }; - - /** - * Returns true if **any** of the given glob `patterns` match the specified `string`. - * - * ```js - * const picomatch = require('picomatch'); - * // picomatch.isMatch(string, patterns[, options]); - * - * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true - * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false - * ``` - * @param {String|Array} str The string to test. - * @param {String|Array} patterns One or more glob patterns to use for matching. - * @param {Object} [options] See available [options](#options). - * @return {Boolean} Returns true if any patterns match `str` - * @api public - */ - - picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str); - - /** - * Parse a glob pattern to create the source string for a regular - * expression. - * - * ```js - * const picomatch = require('picomatch'); - * const result = picomatch.parse(pattern[, options]); - * ``` - * @param {String} `pattern` - * @param {Object} `options` - * @return {Object} Returns an object with useful properties and output to be used as a regex source string. - * @api public - */ - - picomatch.parse = (pattern, options) => { - if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options)); - return parse(pattern, { ...options, fastpaths: false }); - }; - - /** - * Scan a glob pattern to separate the pattern into segments. - * - * ```js - * const picomatch = require('picomatch'); - * // picomatch.scan(input[, options]); - * - * const result = picomatch.scan('!./foo/*.js'); - * console.log(result); - * { prefix: '!./', - * input: '!./foo/*.js', - * start: 3, - * base: 'foo', - * glob: '*.js', - * isBrace: false, - * isBracket: false, - * isGlob: true, - * isExtglob: false, - * isGlobstar: false, - * negated: true } - * ``` - * @param {String} `input` Glob pattern to scan. - * @param {Object} `options` - * @return {Object} Returns an object with - * @api public - */ - - picomatch.scan = (input, options) => scan(input, options); - - /** - * Compile a regular expression from the `state` object returned by the - * [parse()](#parse) method. - * - * @param {Object} `state` - * @param {Object} `options` - * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser. - * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging. - * @return {RegExp} - * @api public - */ - - picomatch.compileRe = (state, options, returnOutput = false, returnState = false) => { - if (returnOutput === true) { - return state.output; - } - - const opts = options || {}; - const prepend = opts.contains ? '' : '^'; - const append = opts.contains ? '' : '$'; - - let source = `${prepend}(?:${state.output})${append}`; - if (state && state.negated === true) { - source = `^(?!${source}).*$`; - } - - const regex = picomatch.toRegex(source, options); - if (returnState === true) { - regex.state = state; - } - - return regex; - }; - - /** - * Create a regular expression from a parsed glob pattern. - * - * ```js - * const picomatch = require('picomatch'); - * const state = picomatch.parse('*.js'); - * // picomatch.compileRe(state[, options]); - * - * console.log(picomatch.compileRe(state)); - * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ - * ``` - * @param {String} `state` The object returned from the `.parse` method. - * @param {Object} `options` - * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result. - * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression. - * @return {RegExp} Returns a regex created from the given pattern. - * @api public - */ - - picomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => { - if (!input || typeof input !== 'string') { - throw new TypeError('Expected a non-empty string'); - } - - let parsed = { negated: false, fastpaths: true }; - - if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) { - parsed.output = parse.fastpaths(input, options); - } - - if (!parsed.output) { - parsed = parse(input, options); - } - - return picomatch.compileRe(parsed, options, returnOutput, returnState); - }; - - /** - * Create a regular expression from the given regex source string. - * - * ```js - * const picomatch = require('picomatch'); - * // picomatch.toRegex(source[, options]); - * - * const { output } = picomatch.parse('*.js'); - * console.log(picomatch.toRegex(output)); - * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ - * ``` - * @param {String} `source` Regular expression source string. - * @param {Object} `options` - * @return {RegExp} - * @api public - */ - - picomatch.toRegex = (source, options) => { - try { - const opts = options || {}; - return new RegExp(source, opts.flags || (opts.nocase ? 'i' : '')); - } catch (err) { - if (options && options.debug === true) throw err; - return /$^/; - } - }; - - /** - * Picomatch constants. - * @return {Object} - */ - - picomatch.constants = constants; - - /** - * Expose "picomatch" - */ - - picomatch_1 = picomatch; - return picomatch_1; -} - -var picomatch; -var hasRequiredPicomatch; - -function requirePicomatch () { - if (hasRequiredPicomatch) return picomatch; - hasRequiredPicomatch = 1; - - picomatch = requirePicomatch$1(); - return picomatch; -} - -Object.defineProperty(builder, "__esModule", { value: true }); -builder.Builder = void 0; -const path_1 = path$1; -const api_builder_1 = apiBuilder; -var pm = null; -/* c8 ignore next 6 */ -try { - require.resolve("picomatch"); - pm = requirePicomatch(); -} -catch (_e) { - // do nothing -} -class Builder { - globCache = {}; - options = { - maxDepth: Infinity, - suppressErrors: true, - pathSeparator: path_1.sep, - filters: [], - }; - constructor(options) { - this.options = { ...this.options, ...options }; - } - group() { - this.options.group = true; - return this; - } - withPathSeparator(separator) { - this.options.pathSeparator = separator; - return this; - } - withBasePath() { - this.options.includeBasePath = true; - return this; - } - withRelativePaths() { - this.options.relativePaths = true; - return this; - } - withDirs() { - this.options.includeDirs = true; - return this; - } - withMaxDepth(depth) { - this.options.maxDepth = depth; - return this; - } - withMaxFiles(limit) { - this.options.maxFiles = limit; - return this; - } - withFullPaths() { - this.options.resolvePaths = true; - this.options.includeBasePath = true; - return this; - } - withErrors() { - this.options.suppressErrors = false; - return this; - } - withSymlinks() { - this.options.resolveSymlinks = true; - return this.withFullPaths(); - } - withAbortSignal(signal) { - this.options.signal = signal; - return this; - } - normalize() { - this.options.normalizePath = true; - return this; - } - filter(predicate) { - this.options.filters.push(predicate); - return this; - } - onlyDirs() { - this.options.excludeFiles = true; - this.options.includeDirs = true; - return this; - } - exclude(predicate) { - this.options.exclude = predicate; - return this; - } - onlyCounts() { - this.options.onlyCounts = true; - return this; - } - crawl(root) { - return new api_builder_1.APIBuilder(root || ".", this.options); - } - /** - * @deprecated Pass options using the constructor instead: - * ```ts - * new fdir(options).crawl("/path/to/root"); - * ``` - * This method will be removed in v7.0 - */ - /* c8 ignore next 4 */ - crawlWithOptions(root, options) { - this.options = { ...this.options, ...options }; - return new api_builder_1.APIBuilder(root || ".", this.options); - } - glob(...patterns) { - return this.globWithOptions(patterns, { dot: true }); - } - globWithOptions(patterns, options) { - /* c8 ignore next 5 */ - if (!pm) { - throw new Error(`Please install picomatch: "npm i picomatch" to use glob matching.`); - } - var isMatch = this.globCache[patterns.join("\0")]; - if (!isMatch) { - isMatch = pm(patterns, options); - this.globCache[patterns.join("\0")] = isMatch; - } - this.options.filters.push((path) => isMatch(path)); - return this; - } -} -builder.Builder = Builder; - -var src$1 = {}; - -var types$1 = {}; - -Object.defineProperty(types$1, "__esModule", { value: true }); - -(function (exports) { - var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); - }) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; - })); - var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); - }; - Object.defineProperty(exports, "__esModule", { value: true }); - __exportStar(types$1, exports); -} (src$1)); - -(function (exports) { - var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); - }) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; - })); - var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.fdir = void 0; - const builder_1 = builder; - Object.defineProperty(exports, "fdir", { enumerable: true, get: function () { return builder_1.Builder; } }); - __exportStar(src$1, exports); -} (dist)); - -const CpuToNodeArch = { - x86_64: 'x64', - aarch64: 'arm64', - i686: 'ia32', - armv7: 'arm', - riscv64gc: 'riscv64', -}; -const NodeArchToCpu = { - x64: 'x86_64', - arm64: 'aarch64', - ia32: 'i686', - arm: 'armv7', - riscv64: 'riscv64gc', -}; -const SysToNodePlatform = { - linux: 'linux', - freebsd: 'freebsd', - darwin: 'darwin', - windows: 'win32', -}; -const UniArchsByPlatform = { - darwin: ['x64', 'arm64'], -}; -const DefaultPlatforms = [ - { - platform: 'win32', - arch: 'x64', - abi: 'msvc', - platformArchABI: 'win32-x64-msvc', - raw: 'x86_64-pc-windows-msvc', - }, - { - platform: 'darwin', - arch: 'x64', - abi: null, - platformArchABI: 'darwin-x64', - raw: 'x86_64-apple-darwin', - }, - { - platform: 'linux', - arch: 'x64', - abi: 'gnu', - platformArchABI: 'linux-x64-gnu', - raw: 'x86_64-unknown-linux-gnu', - }, -]; -/** - * A triple is a specific format for specifying a target architecture. - * Triples may be referred to as a target triple which is the architecture for the artifact produced, and the host triple which is the architecture that the compiler is running on. - * The general format of the triple is `---` where: - * - `arch` = The base CPU architecture, for example `x86_64`, `i686`, `arm`, `thumb`, `mips`, etc. - * - `sub` = The CPU sub-architecture, for example `arm` has `v7`, `v7s`, `v5te`, etc. - * - `vendor` = The vendor, for example `unknown`, `apple`, `pc`, `nvidia`, etc. - * - `sys` = The system name, for example `linux`, `windows`, `darwin`, etc. none is typically used for bare-metal without an OS. - * - `abi` = The ABI, for example `gnu`, `android`, `eabi`, etc. - */ -function parseTriple(rawTriple) { - var _a, _b; - const triple = rawTriple.endsWith('eabi') - ? `${rawTriple.slice(0, -4)}-eabi` - : rawTriple; - const triples = triple.split('-'); - let cpu; - let sys; - let abi = null; - if (triples.length === 4) { - [cpu, , sys, abi = null] = triples; - } - else if (triples.length === 3) { - [cpu, , sys] = triples; - } - else { - [cpu, sys] = triples; - } - const platformName = (_a = SysToNodePlatform[sys]) !== null && _a !== void 0 ? _a : sys; - const arch = (_b = CpuToNodeArch[cpu]) !== null && _b !== void 0 ? _b : cpu; - return { - platform: platformName, - arch, - abi, - platformArchABI: abi - ? `${platformName}-${arch}-${abi}` - : `${platformName}-${arch}`, - raw: rawTriple, - }; -} -function getHostTargetTriple() { - const host = require$$1$1.execSync(`rustc -vV`, { - env: process.env, - }) - .toString('utf8') - .split('\n') - .find((line) => line.startsWith('host: ')); - const triple = host === null || host === void 0 ? void 0 : host.slice('host: '.length); - if (!triple) { - throw new TypeError(`Can not parse target triple from host`); - } - return parseTriple(triple); -} - -function getNapiConfig(packageJson = 'package.json', cwd = process.cwd()) { - var _a, _b, _c, _d, _e, _f, _g, _h; - const packageJsonPath = path$1.join(cwd, packageJson); - const pkgJson = require(packageJsonPath); - const { version: packageVersion, napi, name } = pkgJson; - const additionPlatforms = ((_b = (_a = napi === null || napi === void 0 ? void 0 : napi.triples) === null || _a === void 0 ? void 0 : _a.additional) !== null && _b !== void 0 ? _b : []).map(parseTriple); - const defaultPlatforms = ((_c = napi === null || napi === void 0 ? void 0 : napi.triples) === null || _c === void 0 ? void 0 : _c.defaults) === false ? [] : [...DefaultPlatforms]; - const tsConstEnum = (_d = napi === null || napi === void 0 ? void 0 : napi.ts) === null || _d === void 0 ? void 0 : _d.constEnum; - const platforms = [...defaultPlatforms, ...additionPlatforms]; - const releaseVersion = process.env.RELEASE_VERSION; - const releaseVersionWithoutPrefix = (releaseVersion === null || releaseVersion === void 0 ? void 0 : releaseVersion.startsWith('v')) - ? releaseVersion.substring(1) - : releaseVersion; - const version = releaseVersionWithoutPrefix !== null && releaseVersionWithoutPrefix !== void 0 ? releaseVersionWithoutPrefix : packageVersion; - const packageName = (_f = (_e = napi === null || napi === void 0 ? void 0 : napi.package) === null || _e === void 0 ? void 0 : _e.name) !== null && _f !== void 0 ? _f : name; - const npmClient = (_g = napi === null || napi === void 0 ? void 0 : napi.npmClient) !== null && _g !== void 0 ? _g : 'npm'; - const binaryName = (_h = napi === null || napi === void 0 ? void 0 : napi.name) !== null && _h !== void 0 ? _h : 'index'; - return { - platforms, - version, - packageName, - binaryName, - packageJsonPath, - content: pkgJson, - npmClient, - tsConstEnum, - }; -} - -var src = {exports: {}}; - -var node = {exports: {}}; - -var hasFlag; -var hasRequiredHasFlag; - -function requireHasFlag () { - if (hasRequiredHasFlag) return hasFlag; - hasRequiredHasFlag = 1; - - hasFlag = (flag, argv = process.argv) => { - const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); - const position = argv.indexOf(prefix + flag); - const terminatorPosition = argv.indexOf('--'); - return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition); - }; - return hasFlag; -} - -var supportsColor_1; -var hasRequiredSupportsColor; - -function requireSupportsColor () { - if (hasRequiredSupportsColor) return supportsColor_1; - hasRequiredSupportsColor = 1; - const os$1 = os; - const tty = tty$1; - const hasFlag = requireHasFlag(); - - const {env} = process; - - let forceColor; - if (hasFlag('no-color') || - hasFlag('no-colors') || - hasFlag('color=false') || - hasFlag('color=never')) { - forceColor = 0; - } else if (hasFlag('color') || - hasFlag('colors') || - hasFlag('color=true') || - hasFlag('color=always')) { - forceColor = 1; - } - - if ('FORCE_COLOR' in env) { - if (env.FORCE_COLOR === 'true') { - forceColor = 1; - } else if (env.FORCE_COLOR === 'false') { - forceColor = 0; - } else { - forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3); - } - } - - function translateLevel(level) { - if (level === 0) { - return false; - } - - return { - level, - hasBasic: true, - has256: level >= 2, - has16m: level >= 3 - }; - } - - function supportsColor(haveStream, streamIsTTY) { - if (forceColor === 0) { - return 0; - } - - if (hasFlag('color=16m') || - hasFlag('color=full') || - hasFlag('color=truecolor')) { - return 3; - } - - if (hasFlag('color=256')) { - return 2; - } - - if (haveStream && !streamIsTTY && forceColor === undefined) { - return 0; - } - - const min = forceColor || 0; - - if (env.TERM === 'dumb') { - return min; - } - - if (process.platform === 'win32') { - // Windows 10 build 10586 is the first Windows release that supports 256 colors. - // Windows 10 build 14931 is the first release that supports 16m/TrueColor. - const osRelease = os$1.release().split('.'); - if ( - Number(osRelease[0]) >= 10 && - Number(osRelease[2]) >= 10586 - ) { - return Number(osRelease[2]) >= 14931 ? 3 : 2; - } - - return 1; - } - - if ('CI' in env) { - if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') { - return 1; - } - - return min; - } - - if ('TEAMCITY_VERSION' in env) { - return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; - } - - if (env.COLORTERM === 'truecolor') { - return 3; - } - - if ('TERM_PROGRAM' in env) { - const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); - - switch (env.TERM_PROGRAM) { - case 'iTerm.app': - return version >= 3 ? 3 : 2; - case 'Apple_Terminal': - return 2; - // No default - } - } - - if (/-256(color)?$/i.test(env.TERM)) { - return 2; - } - - if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { - return 1; - } - - if ('COLORTERM' in env) { - return 1; - } - - return min; - } - - function getSupportLevel(stream) { - const level = supportsColor(stream, stream && stream.isTTY); - return translateLevel(level); - } - - supportsColor_1 = { - supportsColor: getSupportLevel, - stdout: translateLevel(supportsColor(true, tty.isatty(1))), - stderr: translateLevel(supportsColor(true, tty.isatty(2))) - }; - return supportsColor_1; -} - -/** - * Helpers. - */ - -var ms; -var hasRequiredMs; - -function requireMs () { - if (hasRequiredMs) return ms; - hasRequiredMs = 1; - var s = 1000; - var m = s * 60; - var h = m * 60; - var d = h * 24; - var w = d * 7; - var y = d * 365.25; - - /** - * Parse or format the given `val`. - * - * Options: - * - * - `long` verbose formatting [false] - * - * @param {String|Number} val - * @param {Object} [options] - * @throws {Error} throw an error if val is not a non-empty string or a number - * @return {String|Number} - * @api public - */ - - ms = function(val, options) { - options = options || {}; - var type = typeof val; - if (type === 'string' && val.length > 0) { - return parse(val); - } else if (type === 'number' && isFinite(val)) { - return options.long ? fmtLong(val) : fmtShort(val); - } - throw new Error( - 'val is not a non-empty string or a valid number. val=' + - JSON.stringify(val) - ); - }; - - /** - * Parse the given `str` and return milliseconds. - * - * @param {String} str - * @return {Number} - * @api private - */ - - function parse(str) { - str = String(str); - if (str.length > 100) { - return; - } - var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( - str - ); - if (!match) { - return; - } - var n = parseFloat(match[1]); - var type = (match[2] || 'ms').toLowerCase(); - switch (type) { - case 'years': - case 'year': - case 'yrs': - case 'yr': - case 'y': - return n * y; - case 'weeks': - case 'week': - case 'w': - return n * w; - case 'days': - case 'day': - case 'd': - return n * d; - case 'hours': - case 'hour': - case 'hrs': - case 'hr': - case 'h': - return n * h; - case 'minutes': - case 'minute': - case 'mins': - case 'min': - case 'm': - return n * m; - case 'seconds': - case 'second': - case 'secs': - case 'sec': - case 's': - return n * s; - case 'milliseconds': - case 'millisecond': - case 'msecs': - case 'msec': - case 'ms': - return n; - default: - return undefined; - } - } - - /** - * Short format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - - function fmtShort(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d) { - return Math.round(ms / d) + 'd'; - } - if (msAbs >= h) { - return Math.round(ms / h) + 'h'; - } - if (msAbs >= m) { - return Math.round(ms / m) + 'm'; - } - if (msAbs >= s) { - return Math.round(ms / s) + 's'; - } - return ms + 'ms'; - } - - /** - * Long format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - - function fmtLong(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d) { - return plural(ms, msAbs, d, 'day'); - } - if (msAbs >= h) { - return plural(ms, msAbs, h, 'hour'); - } - if (msAbs >= m) { - return plural(ms, msAbs, m, 'minute'); - } - if (msAbs >= s) { - return plural(ms, msAbs, s, 'second'); - } - return ms + ' ms'; - } - - /** - * Pluralization helper. - */ - - function plural(ms, msAbs, n, name) { - var isPlural = msAbs >= n * 1.5; - return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); - } - return ms; -} - -var common$2; -var hasRequiredCommon; - -function requireCommon () { - if (hasRequiredCommon) return common$2; - hasRequiredCommon = 1; - /** - * This is the common logic for both the Node.js and web browser - * implementations of `debug()`. - */ - - function setup(env) { - createDebug.debug = createDebug; - createDebug.default = createDebug; - createDebug.coerce = coerce; - createDebug.disable = disable; - createDebug.enable = enable; - createDebug.enabled = enabled; - createDebug.humanize = requireMs(); - createDebug.destroy = destroy; - - Object.keys(env).forEach(key => { - createDebug[key] = env[key]; - }); - - /** - * The currently active debug mode names, and names to skip. - */ - - createDebug.names = []; - createDebug.skips = []; - - /** - * Map of special "%n" handling functions, for the debug "format" argument. - * - * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". - */ - createDebug.formatters = {}; - - /** - * Selects a color for a debug namespace - * @param {String} namespace The namespace string for the debug instance to be colored - * @return {Number|String} An ANSI color code for the given namespace - * @api private - */ - function selectColor(namespace) { - let hash = 0; - - for (let i = 0; i < namespace.length; i++) { - hash = ((hash << 5) - hash) + namespace.charCodeAt(i); - hash |= 0; // Convert to 32bit integer - } - - return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; - } - createDebug.selectColor = selectColor; - - /** - * Create a debugger with the given `namespace`. - * - * @param {String} namespace - * @return {Function} - * @api public - */ - function createDebug(namespace) { - let prevTime; - let enableOverride = null; - let namespacesCache; - let enabledCache; - - function debug(...args) { - // Disabled? - if (!debug.enabled) { - return; - } - - const self = debug; - - // Set `diff` timestamp - const curr = Number(new Date()); - const ms = curr - (prevTime || curr); - self.diff = ms; - self.prev = prevTime; - self.curr = curr; - prevTime = curr; - - args[0] = createDebug.coerce(args[0]); - - if (typeof args[0] !== 'string') { - // Anything else let's inspect with %O - args.unshift('%O'); - } - - // Apply any `formatters` transformations - let index = 0; - args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { - // If we encounter an escaped % then don't increase the array index - if (match === '%%') { - return '%'; - } - index++; - const formatter = createDebug.formatters[format]; - if (typeof formatter === 'function') { - const val = args[index]; - match = formatter.call(self, val); - - // Now we need to remove `args[index]` since it's inlined in the `format` - args.splice(index, 1); - index--; - } - return match; - }); - - // Apply env-specific formatting (colors, etc.) - createDebug.formatArgs.call(self, args); - - const logFn = self.log || createDebug.log; - logFn.apply(self, args); - } - - debug.namespace = namespace; - debug.useColors = createDebug.useColors(); - debug.color = createDebug.selectColor(namespace); - debug.extend = extend; - debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release. - - Object.defineProperty(debug, 'enabled', { - enumerable: true, - configurable: false, - get: () => { - if (enableOverride !== null) { - return enableOverride; - } - if (namespacesCache !== createDebug.namespaces) { - namespacesCache = createDebug.namespaces; - enabledCache = createDebug.enabled(namespace); - } - - return enabledCache; - }, - set: v => { - enableOverride = v; - } - }); - - // Env-specific initialization logic for debug instances - if (typeof createDebug.init === 'function') { - createDebug.init(debug); - } - - return debug; - } - - function extend(namespace, delimiter) { - const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); - newDebug.log = this.log; - return newDebug; - } - - /** - * Enables a debug mode by namespaces. This can include modes - * separated by a colon and wildcards. - * - * @param {String} namespaces - * @api public - */ - function enable(namespaces) { - createDebug.save(namespaces); - createDebug.namespaces = namespaces; - - createDebug.names = []; - createDebug.skips = []; - - let i; - const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); - const len = split.length; - - for (i = 0; i < len; i++) { - if (!split[i]) { - // ignore empty strings - continue; - } - - namespaces = split[i].replace(/\*/g, '.*?'); - - if (namespaces[0] === '-') { - createDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$')); - } else { - createDebug.names.push(new RegExp('^' + namespaces + '$')); - } - } - } - - /** - * Disable debug output. - * - * @return {String} namespaces - * @api public - */ - function disable() { - const namespaces = [ - ...createDebug.names.map(toNamespace), - ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace) - ].join(','); - createDebug.enable(''); - return namespaces; - } - - /** - * Returns true if the given mode name is enabled, false otherwise. - * - * @param {String} name - * @return {Boolean} - * @api public - */ - function enabled(name) { - if (name[name.length - 1] === '*') { - return true; - } - - let i; - let len; - - for (i = 0, len = createDebug.skips.length; i < len; i++) { - if (createDebug.skips[i].test(name)) { - return false; - } - } - - for (i = 0, len = createDebug.names.length; i < len; i++) { - if (createDebug.names[i].test(name)) { - return true; - } - } - - return false; - } - - /** - * Convert regexp to namespace - * - * @param {RegExp} regxep - * @return {String} namespace - * @api private - */ - function toNamespace(regexp) { - return regexp.toString() - .substring(2, regexp.toString().length - 2) - .replace(/\.\*\?$/, '*'); - } - - /** - * Coerce `val`. - * - * @param {Mixed} val - * @return {Mixed} - * @api private - */ - function coerce(val) { - if (val instanceof Error) { - return val.stack || val.message; - } - return val; - } - - /** - * XXX DO NOT USE. This is a temporary stub function. - * XXX It WILL be removed in the next major release. - */ - function destroy() { - console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); - } - - createDebug.enable(createDebug.load()); - - return createDebug; - } - - common$2 = setup; - return common$2; -} - -/** - * Module dependencies. - */ - -var hasRequiredNode; - -function requireNode () { - if (hasRequiredNode) return node.exports; - hasRequiredNode = 1; - (function (module, exports) { - const tty = tty$1; - const util = require$$0$3; - - /** - * This is the Node.js implementation of `debug()`. - */ - - exports.init = init; - exports.log = log; - exports.formatArgs = formatArgs; - exports.save = save; - exports.load = load; - exports.useColors = useColors; - exports.destroy = util.deprecate( - () => {}, - 'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.' - ); - - /** - * Colors. - */ - - exports.colors = [6, 2, 3, 4, 5, 1]; - - try { - // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json) - // eslint-disable-next-line import/no-extraneous-dependencies - const supportsColor = requireSupportsColor(); - - if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) { - exports.colors = [ - 20, - 21, - 26, - 27, - 32, - 33, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 56, - 57, - 62, - 63, - 68, - 69, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 92, - 93, - 98, - 99, - 112, - 113, - 128, - 129, - 134, - 135, - 148, - 149, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 178, - 179, - 184, - 185, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 214, - 215, - 220, - 221 - ]; - } - } catch (error) { - // Swallow - we only care if `supports-color` is available; it doesn't have to be. - } - - /** - * Build up the default `inspectOpts` object from the environment variables. - * - * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js - */ - - exports.inspectOpts = Object.keys(process.env).filter(key => { - return /^debug_/i.test(key); - }).reduce((obj, key) => { - // Camel-case - const prop = key - .substring(6) - .toLowerCase() - .replace(/_([a-z])/g, (_, k) => { - return k.toUpperCase(); - }); - - // Coerce string value into JS value - let val = process.env[key]; - if (/^(yes|on|true|enabled)$/i.test(val)) { - val = true; - } else if (/^(no|off|false|disabled)$/i.test(val)) { - val = false; - } else if (val === 'null') { - val = null; - } else { - val = Number(val); - } - - obj[prop] = val; - return obj; - }, {}); - - /** - * Is stdout a TTY? Colored output is enabled when `true`. - */ - - function useColors() { - return 'colors' in exports.inspectOpts ? - Boolean(exports.inspectOpts.colors) : - tty.isatty(process.stderr.fd); - } - - /** - * Adds ANSI color escape codes if enabled. - * - * @api public - */ - - function formatArgs(args) { - const {namespace: name, useColors} = this; - - if (useColors) { - const c = this.color; - const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c); - const prefix = ` ${colorCode};1m${name} \u001B[0m`; - - args[0] = prefix + args[0].split('\n').join('\n' + prefix); - args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m'); - } else { - args[0] = getDate() + name + ' ' + args[0]; - } - } - - function getDate() { - if (exports.inspectOpts.hideDate) { - return ''; - } - return new Date().toISOString() + ' '; - } - - /** - * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr. - */ - - function log(...args) { - return process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\n'); - } - - /** - * Save `namespaces`. - * - * @param {String} namespaces - * @api private - */ - function save(namespaces) { - if (namespaces) { - process.env.DEBUG = namespaces; - } else { - // If you set a process.env field to null or undefined, it gets cast to the - // string 'null' or 'undefined'. Just delete instead. - delete process.env.DEBUG; - } - } - - /** - * Load `namespaces`. - * - * @return {String} returns the previously persisted debug modes - * @api private - */ - - function load() { - return process.env.DEBUG; - } - - /** - * Init logic for `debug` instances. - * - * Create a new `inspectOpts` object in case `useColors` is set - * differently for a particular `debug` instance. - */ - - function init(debug) { - debug.inspectOpts = {}; - - const keys = Object.keys(exports.inspectOpts); - for (let i = 0; i < keys.length; i++) { - debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; - } - } - - module.exports = requireCommon()(exports); - - const {formatters} = module.exports; - - /** - * Map %o to `util.inspect()`, all on a single line. - */ - - formatters.o = function (v) { - this.inspectOpts.colors = this.useColors; - return util.inspect(v, this.inspectOpts) - .split('\n') - .map(str => str.trim()) - .join(' '); - }; - - /** - * Map %O to `util.inspect()`, allowing multiple lines if needed. - */ - - formatters.O = function (v) { - this.inspectOpts.colors = this.useColors; - return util.inspect(v, this.inspectOpts); - }; - } (node, node.exports)); - return node.exports; -} - -var browser = {exports: {}}; - -/* eslint-env browser */ - -var hasRequiredBrowser; - -function requireBrowser () { - if (hasRequiredBrowser) return browser.exports; - hasRequiredBrowser = 1; - (function (module, exports) { - /** - * This is the web browser implementation of `debug()`. - */ - - exports.formatArgs = formatArgs; - exports.save = save; - exports.load = load; - exports.useColors = useColors; - exports.storage = localstorage(); - exports.destroy = (() => { - let warned = false; - - return () => { - if (!warned) { - warned = true; - console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); - } - }; - })(); - - /** - * Colors. - */ - - exports.colors = [ - '#0000CC', - '#0000FF', - '#0033CC', - '#0033FF', - '#0066CC', - '#0066FF', - '#0099CC', - '#0099FF', - '#00CC00', - '#00CC33', - '#00CC66', - '#00CC99', - '#00CCCC', - '#00CCFF', - '#3300CC', - '#3300FF', - '#3333CC', - '#3333FF', - '#3366CC', - '#3366FF', - '#3399CC', - '#3399FF', - '#33CC00', - '#33CC33', - '#33CC66', - '#33CC99', - '#33CCCC', - '#33CCFF', - '#6600CC', - '#6600FF', - '#6633CC', - '#6633FF', - '#66CC00', - '#66CC33', - '#9900CC', - '#9900FF', - '#9933CC', - '#9933FF', - '#99CC00', - '#99CC33', - '#CC0000', - '#CC0033', - '#CC0066', - '#CC0099', - '#CC00CC', - '#CC00FF', - '#CC3300', - '#CC3333', - '#CC3366', - '#CC3399', - '#CC33CC', - '#CC33FF', - '#CC6600', - '#CC6633', - '#CC9900', - '#CC9933', - '#CCCC00', - '#CCCC33', - '#FF0000', - '#FF0033', - '#FF0066', - '#FF0099', - '#FF00CC', - '#FF00FF', - '#FF3300', - '#FF3333', - '#FF3366', - '#FF3399', - '#FF33CC', - '#FF33FF', - '#FF6600', - '#FF6633', - '#FF9900', - '#FF9933', - '#FFCC00', - '#FFCC33' - ]; - - /** - * Currently only WebKit-based Web Inspectors, Firefox >= v31, - * and the Firebug extension (any Firefox version) are known - * to support "%c" CSS customizations. - * - * TODO: add a `localStorage` variable to explicitly enable/disable colors - */ - - // eslint-disable-next-line complexity - function useColors() { - // NB: In an Electron preload script, document will be defined but not fully - // initialized. Since we know we're in Chrome, we'll just detect this case - // explicitly - if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { - return true; - } - - // Internet Explorer and Edge do not support colors. - if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { - return false; - } - - // Is webkit? http://stackoverflow.com/a/16459606/376773 - // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 - return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || - // Is firebug? http://stackoverflow.com/a/398120/376773 - (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || - // Is firefox >= v31? - // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages - (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || - // Double check webkit in userAgent just in case we are in a worker - (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); - } - - /** - * Colorize log arguments if enabled. - * - * @api public - */ - - function formatArgs(args) { - args[0] = (this.useColors ? '%c' : '') + - this.namespace + - (this.useColors ? ' %c' : ' ') + - args[0] + - (this.useColors ? '%c ' : ' ') + - '+' + module.exports.humanize(this.diff); - - if (!this.useColors) { - return; - } - - const c = 'color: ' + this.color; - args.splice(1, 0, c, 'color: inherit'); - - // The final "%c" is somewhat tricky, because there could be other - // arguments passed either before or after the %c, so we need to - // figure out the correct index to insert the CSS into - let index = 0; - let lastC = 0; - args[0].replace(/%[a-zA-Z%]/g, match => { - if (match === '%%') { - return; - } - index++; - if (match === '%c') { - // We only are interested in the *last* %c - // (the user may have provided their own) - lastC = index; - } - }); - - args.splice(lastC, 0, c); - } - - /** - * Invokes `console.debug()` when available. - * No-op when `console.debug` is not a "function". - * If `console.debug` is not available, falls back - * to `console.log`. - * - * @api public - */ - exports.log = console.debug || console.log || (() => {}); - - /** - * Save `namespaces`. - * - * @param {String} namespaces - * @api private - */ - function save(namespaces) { - try { - if (namespaces) { - exports.storage.setItem('debug', namespaces); - } else { - exports.storage.removeItem('debug'); - } - } catch (error) { - // Swallow - // XXX (@Qix-) should we be logging these? - } - } - - /** - * Load `namespaces`. - * - * @return {String} returns the previously persisted debug modes - * @api private - */ - function load() { - let r; - try { - r = exports.storage.getItem('debug'); - } catch (error) { - // Swallow - // XXX (@Qix-) should we be logging these? - } - - // If debug isn't set in LS, and we're in Electron, try to load $DEBUG - if (!r && typeof process !== 'undefined' && 'env' in process) { - r = process.env.DEBUG; - } - - return r; - } - - /** - * Localstorage attempts to return the localstorage. - * - * This is necessary because safari throws - * when a user disables cookies/localstorage - * and you attempt to access it. - * - * @return {LocalStorage} - * @api private - */ - - function localstorage() { - try { - // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context - // The Browser also has localStorage in the global context. - return localStorage; - } catch (error) { - // Swallow - // XXX (@Qix-) should we be logging these? - } - } - - module.exports = requireCommon()(exports); - - const {formatters} = module.exports; - - /** - * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. - */ - - formatters.j = function (v) { - try { - return JSON.stringify(v); - } catch (error) { - return '[UnexpectedJSONParseError]: ' + error.message; - } - }; - } (browser, browser.exports)); - return browser.exports; -} - -/** - * Detect Electron renderer / nwjs process, which is node, but we should - * treat as a browser. - */ - -if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { - src.exports = requireBrowser(); -} else { - src.exports = requireNode(); -} - -var srcExports = src.exports; -var debug$a = /*@__PURE__*/getDefaultExportFromCjs(srcExports); - -const debugFactory = (namespace) => debug$a(`napi:${namespace}`); - -const readFileAsync = require$$0$3.promisify(require$$0$2.readFile); -const writeFileAsync = require$$0$3.promisify(require$$0$2.writeFile); -const unlinkAsync = require$$0$3.promisify(require$$0$2.unlink); -const copyFileAsync = require$$0$3.promisify(require$$0$2.copyFile); -const mkdirAsync = require$$0$3.promisify(require$$0$2.mkdir); -const statAsync = require$$0$3.promisify(require$$0$2.stat); -function fileExists(path) { - return __awaiter$1(this, void 0, void 0, function* () { - const exists = yield statAsync(path) - .then(() => true) - .catch(() => false); - return exists; - }); -} -function pick(o, ...keys) { - return keys.reduce((acc, key) => { - acc[key] = o[key]; - return acc; - }, {}); -} - -const debug$9 = debugFactory('artifacts'); -class ArtifactsCommand extends Command { - constructor() { - super(...arguments); - this.sourceDir = String$1('-d,--dir', 'artifacts'); - this.distDir = String$1('--dist', 'npm'); - this.configFileName = String$1('-c,--config'); - } - execute() { - return __awaiter$1(this, void 0, void 0, function* () { - const { platforms, binaryName, packageJsonPath } = getNapiConfig(this.configFileName); - const packageJsonDir = path$1.parse(packageJsonPath).dir; - const sourceApi = new dist.fdir() - .withFullPaths() - .crawl(path$1.join(process.cwd(), this.sourceDir)); - const distDirs = platforms.map((platform) => path$1.join(process.cwd(), this.distDir, platform.platformArchABI)); - const universalSourceBins = new Set(platforms - .filter((platform) => platform.arch === 'universal') - .flatMap((p) => UniArchsByPlatform[p.platform].map((a) => `${p.platform}-${a}`))); - yield sourceApi.withPromise().then((output) => Promise.all(output.map((filePath) => __awaiter$1(this, void 0, void 0, function* () { - debug$9(`Read [${yellowBright(filePath)}]`); - const sourceContent = yield readFileAsync(filePath); - const parsedName = path$1.parse(filePath); - const terms = parsedName.name.split('.'); - const platformArchABI = terms.pop(); - const _binaryName = terms.join('.'); - if (_binaryName !== binaryName) { - debug$9(`[${yellowBright(_binaryName)}] is not matched with [${greenBright(binaryName)}], skip`); - return; - } - const dir = distDirs.find((dir) => dir.includes(platformArchABI)); - if (!dir && universalSourceBins.has(platformArchABI)) { - debug$9(`[${yellowBright(platformArchABI)}] has no dist dir but it is source bin for universal arch, skip`); - return; - } - if (!dir) { - throw new TypeError(`No dist dir found for ${filePath}`); - } - const distFilePath = path$1.join(dir, parsedName.base); - debug$9(`Write file content to [${yellowBright(distFilePath)}]`); - yield writeFileAsync(distFilePath, sourceContent); - const distFilePathLocal = path$1.join(packageJsonDir, parsedName.base); - debug$9(`Write file content to [${yellowBright(distFilePathLocal)}]`); - yield writeFileAsync(distFilePathLocal, sourceContent); - })))); - }); - } -} -ArtifactsCommand.usage = Command.Usage({ - description: 'Copy artifacts from Github Actions into specified dir', -}); -ArtifactsCommand.paths = [['artifacts']]; - -const homedir = os.homedir(); -const tmpdir = os.tmpdir(); -const {env} = process$4; - -const macos = name => { - const library = path$1.join(homedir, 'Library'); - - return { - data: path$1.join(library, 'Application Support', name), - config: path$1.join(library, 'Preferences', name), - cache: path$1.join(library, 'Caches', name), - log: path$1.join(library, 'Logs', name), - temp: path$1.join(tmpdir, name), - }; -}; - -const windows = name => { - const appData = env.APPDATA || path$1.join(homedir, 'AppData', 'Roaming'); - const localAppData = env.LOCALAPPDATA || path$1.join(homedir, 'AppData', 'Local'); - - return { - // Data/config/cache/log are invented by me as Windows isn't opinionated about this - data: path$1.join(localAppData, name, 'Data'), - config: path$1.join(appData, name, 'Config'), - cache: path$1.join(localAppData, name, 'Cache'), - log: path$1.join(localAppData, name, 'Log'), - temp: path$1.join(tmpdir, name), - }; -}; - -// https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html -const linux = name => { - const username = path$1.basename(homedir); - - return { - data: path$1.join(env.XDG_DATA_HOME || path$1.join(homedir, '.local', 'share'), name), - config: path$1.join(env.XDG_CONFIG_HOME || path$1.join(homedir, '.config'), name), - cache: path$1.join(env.XDG_CACHE_HOME || path$1.join(homedir, '.cache'), name), - // https://wiki.debian.org/XDGBaseDirectorySpecification#state - log: path$1.join(env.XDG_STATE_HOME || path$1.join(homedir, '.local', 'state'), name), - temp: path$1.join(tmpdir, username, name), - }; -}; - -function envPaths(name, {suffix = 'nodejs'} = {}) { - if (typeof name !== 'string') { - throw new TypeError(`Expected a string, got ${typeof name}`); - } - - if (suffix) { - // Add suffix to prevent possible conflict with native apps - name += `-${suffix}`; - } - - if (process$4.platform === 'darwin') { - return macos(name); - } - - if (process$4.platform === 'win32') { - return windows(name); - } - - return linux(name); -} - -/** Detect free variable `global` from Node.js. */ -var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - -/** Detect free variable `self`. */ -var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - -/** Used as a reference to the global object. */ -var root = freeGlobal || freeSelf || Function('return this')(); - -/** Built-in value references. */ -var Symbol$1 = root.Symbol; - -/** Used for built-in method references. */ -var objectProto$d = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$9 = objectProto$d.hasOwnProperty; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var nativeObjectToString$1 = objectProto$d.toString; - -/** Built-in value references. */ -var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined; - -/** - * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the raw `toStringTag`. - */ -function getRawTag(value) { - var isOwn = hasOwnProperty$9.call(value, symToStringTag$1), - tag = value[symToStringTag$1]; - - try { - value[symToStringTag$1] = undefined; - var unmasked = true; - } catch (e) {} - - var result = nativeObjectToString$1.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag$1] = tag; - } else { - delete value[symToStringTag$1]; - } - } - return result; -} - -/** Used for built-in method references. */ -var objectProto$c = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var nativeObjectToString = objectProto$c.toString; - -/** - * Converts `value` to a string using `Object.prototype.toString`. - * - * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - */ -function objectToString(value) { - return nativeObjectToString.call(value); -} - -/** `Object#toString` result references. */ -var nullTag = '[object Null]', - undefinedTag = '[object Undefined]'; - -/** Built-in value references. */ -var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined; - -/** - * The base implementation of `getTag` without fallbacks for buggy environments. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ -function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - return (symToStringTag && symToStringTag in Object(value)) - ? getRawTag(value) - : objectToString(value); -} - -/** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ -function isObjectLike(value) { - return value != null && typeof value == 'object'; -} - -/** `Object#toString` result references. */ -var symbolTag$1 = '[object Symbol]'; - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && baseGetTag(value) == symbolTag$1); -} - -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} - -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ -var isArray$5 = Array.isArray; - -/** Used as references for various `Number` constants. */ -var INFINITY$1 = 1 / 0; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto$1 = Symbol$1 ? Symbol$1.prototype : undefined, - symbolToString = symbolProto$1 ? symbolProto$1.toString : undefined; - -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isArray$5(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; -} - -/** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ -function isObject$1(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); -} - -/** - * This method returns the first argument it receives. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'a': 1 }; - * - * console.log(_.identity(object) === object); - * // => true - */ -function identity$2(value) { - return value; -} - -/** `Object#toString` result references. */ -var asyncTag = '[object AsyncFunction]', - funcTag$1 = '[object Function]', - genTag = '[object GeneratorFunction]', - proxyTag = '[object Proxy]'; - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction$2(value) { - if (!isObject$1(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; -} - -/** Used to detect overreaching core-js shims. */ -var coreJsData = root['__core-js_shared__']; - -/** Used to detect methods masquerading as native. */ -var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; -}()); - -/** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ -function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); -} - -/** Used for built-in method references. */ -var funcProto$1 = Function.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString$1 = funcProto$1.toString; - -/** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. - */ -function toSource(func) { - if (func != null) { - try { - return funcToString$1.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; -} - -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - -/** Used to detect host constructors (Safari). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; - -/** Used for built-in method references. */ -var funcProto = Function.prototype, - objectProto$b = Object.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty$8 = objectProto$b.hasOwnProperty; - -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty$8).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); - -/** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ -function baseIsNative(value) { - if (!isObject$1(value) || isMasked(value)) { - return false; - } - var pattern = isFunction$2(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); -} - -/** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ -function getValue(object, key) { - return object == null ? undefined : object[key]; -} - -/** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ -function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; -} - -/* Built-in method references that are verified to be native. */ -var WeakMap$1 = getNative(root, 'WeakMap'); - -var WeakMap$2 = WeakMap$1; - -var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} -}()); - -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER$1 = 9007199254740991; - -/** Used to detect unsigned integer values. */ -var reIsUint = /^(?:0|[1-9]\d*)$/; - -/** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ -function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER$1 : length; - - return !!length && - (type == 'number' || - (type != 'symbol' && reIsUint.test(value))) && - (value > -1 && value % 1 == 0 && value < length); -} - -/** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; - } -} - -/** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ -function eq(value, other) { - return value === other || (value !== value && other !== other); -} - -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ -function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} - -/** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ -function isArrayLike$1(value) { - return value != null && isLength(value.length) && !isFunction$2(value); -} - -/** Used for built-in method references. */ -var objectProto$a = Object.prototype; - -/** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ -function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$a; - - return value === proto; -} - -/** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ -function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; -} - -/** `Object#toString` result references. */ -var argsTag$2 = '[object Arguments]'; - -/** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ -function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag$2; -} - -/** Used for built-in method references. */ -var objectProto$9 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$7 = objectProto$9.hasOwnProperty; - -/** Built-in value references. */ -var propertyIsEnumerable$1 = objectProto$9.propertyIsEnumerable; - -/** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ -var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty$7.call(value, 'callee') && - !propertyIsEnumerable$1.call(value, 'callee'); -}; - -/** - * This method returns `false`. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {boolean} Returns `false`. - * @example - * - * _.times(2, _.stubFalse); - * // => [false, false] - */ -function stubFalse() { - return false; -} - -/** Detect free variable `exports`. */ -var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; - -/** Built-in value references. */ -var Buffer$3 = moduleExports$1 ? root.Buffer : undefined; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeIsBuffer = Buffer$3 ? Buffer$3.isBuffer : undefined; - -/** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ -var isBuffer = nativeIsBuffer || stubFalse; - -/** `Object#toString` result references. */ -var argsTag$1 = '[object Arguments]', - arrayTag$1 = '[object Array]', - boolTag$1 = '[object Boolean]', - dateTag$1 = '[object Date]', - errorTag$1 = '[object Error]', - funcTag = '[object Function]', - mapTag$2 = '[object Map]', - numberTag$1 = '[object Number]', - objectTag$2 = '[object Object]', - regexpTag$1 = '[object RegExp]', - setTag$2 = '[object Set]', - stringTag$1 = '[object String]', - weakMapTag$1 = '[object WeakMap]'; - -var arrayBufferTag$1 = '[object ArrayBuffer]', - dataViewTag$2 = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values of typed arrays. */ -var typedArrayTags = {}; -typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = -typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = -typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = -typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = -typedArrayTags[uint32Tag] = true; -typedArrayTags[argsTag$1] = typedArrayTags[arrayTag$1] = -typedArrayTags[arrayBufferTag$1] = typedArrayTags[boolTag$1] = -typedArrayTags[dataViewTag$2] = typedArrayTags[dateTag$1] = -typedArrayTags[errorTag$1] = typedArrayTags[funcTag] = -typedArrayTags[mapTag$2] = typedArrayTags[numberTag$1] = -typedArrayTags[objectTag$2] = typedArrayTags[regexpTag$1] = -typedArrayTags[setTag$2] = typedArrayTags[stringTag$1] = -typedArrayTags[weakMapTag$1] = false; - -/** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ -function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; -} - -/** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ -function baseUnary(func) { - return function(value) { - return func(value); - }; -} - -/** Detect free variable `exports`. */ -var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports = freeModule && freeModule.exports === freeExports; - -/** Detect free variable `process` from Node.js. */ -var freeProcess = moduleExports && freeGlobal.process; - -/** Used to access faster Node.js helpers. */ -var nodeUtil = (function() { - try { - // Use `util.types` for Node.js 10+. - var types = freeModule && freeModule.require && freeModule.require('util').types; - - if (types) { - return types; - } - - // Legacy `process.binding('util')` for Node.js < 10. - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} -}()); - -/* Node.js helper references. */ -var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - -/** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ -var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - -/** Used for built-in method references. */ -var objectProto$8 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$6 = objectProto$8.hasOwnProperty; - -/** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ -function arrayLikeKeys(value, inherited) { - var isArr = isArray$5(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; - - for (var key in value) { - if ((inherited || hasOwnProperty$6.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } - } - return result; -} - -/** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ -function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; -} - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeKeys = overArg(Object.keys, Object); - -/** Used for built-in method references. */ -var objectProto$7 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$5 = objectProto$7.hasOwnProperty; - -/** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty$5.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; -} - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys(object) { - return isArrayLike$1(object) ? arrayLikeKeys(object) : baseKeys(object); -} - -/** Used to match property names within property paths. */ -var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/; - -/** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ -function isKey(value, object) { - if (isArray$5(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); -} - -/* Built-in method references that are verified to be native. */ -var nativeCreate = getNative(Object, 'create'); - -/** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ -function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - this.size = 0; -} - -/** - * Removes `key` and its value from the hash. - * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function hashDelete(key) { - var result = this.has(key) && delete this.__data__[key]; - this.size -= result ? 1 : 0; - return result; -} - -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED$2 = '__lodash_hash_undefined__'; - -/** Used for built-in method references. */ -var objectProto$6 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$4 = objectProto$6.hasOwnProperty; - -/** - * Gets the hash value for `key`. - * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED$2 ? undefined : result; - } - return hasOwnProperty$4.call(data, key) ? data[key] : undefined; -} - -/** Used for built-in method references. */ -var objectProto$5 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$3 = objectProto$5.hasOwnProperty; - -/** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function hashHas(key) { - var data = this.__data__; - return nativeCreate ? (data[key] !== undefined) : hasOwnProperty$3.call(data, key); -} - -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED$1 = '__lodash_hash_undefined__'; - -/** - * Sets the hash `key` to `value`. - * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. - */ -function hashSet(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED$1 : value; - return this; -} - -/** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Hash(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `Hash`. -Hash.prototype.clear = hashClear; -Hash.prototype['delete'] = hashDelete; -Hash.prototype.get = hashGet; -Hash.prototype.has = hashHas; -Hash.prototype.set = hashSet; - -/** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ -function listCacheClear() { - this.__data__ = []; - this.size = 0; -} - -/** - * Gets the index at which the `key` is found in `array` of key-value pairs. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; -} - -/** Used for built-in method references. */ -var arrayProto = Array.prototype; - -/** Built-in value references. */ -var splice = arrayProto.splice; - -/** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - --this.size; - return true; -} - -/** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - return index < 0 ? undefined : data[index][1]; -} - -/** - * Checks if a list cache value for `key` exists. - * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; -} - -/** - * Sets the list cache `key` to `value`. - * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. - */ -function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - ++this.size; - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; -} - -/** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function ListCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `ListCache`. -ListCache.prototype.clear = listCacheClear; -ListCache.prototype['delete'] = listCacheDelete; -ListCache.prototype.get = listCacheGet; -ListCache.prototype.has = listCacheHas; -ListCache.prototype.set = listCacheSet; - -/* Built-in method references that are verified to be native. */ -var Map$1 = getNative(root, 'Map'); - -/** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ -function mapCacheClear() { - this.size = 0; - this.__data__ = { - 'hash': new Hash, - 'map': new (Map$1 || ListCache), - 'string': new Hash - }; -} - -/** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ -function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') - ? (value !== '__proto__') - : (value === null); -} - -/** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ -function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; -} - -/** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function mapCacheDelete(key) { - var result = getMapData(this, key)['delete'](key); - this.size -= result ? 1 : 0; - return result; -} - -/** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function mapCacheGet(key) { - return getMapData(this, key).get(key); -} - -/** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function mapCacheHas(key) { - return getMapData(this, key).has(key); -} - -/** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. - */ -function mapCacheSet(key, value) { - var data = getMapData(this, key), - size = data.size; - - data.set(key, value); - this.size += data.size == size ? 0 : 1; - return this; -} - -/** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function MapCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `MapCache`. -MapCache.prototype.clear = mapCacheClear; -MapCache.prototype['delete'] = mapCacheDelete; -MapCache.prototype.get = mapCacheGet; -MapCache.prototype.has = mapCacheHas; -MapCache.prototype.set = mapCacheSet; - -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** - * Creates a function that memoizes the result of `func`. If `resolver` is - * provided, it determines the cache key for storing the result based on the - * arguments provided to the memoized function. By default, the first argument - * provided to the memoized function is used as the map cache key. The `func` - * is invoked with the `this` binding of the memoized function. - * - * **Note:** The cache is exposed as the `cache` property on the memoized - * function. Its creation may be customized by replacing the `_.memoize.Cache` - * constructor with one whose instances implement the - * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) - * method interface of `clear`, `delete`, `get`, `has`, and `set`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to have its output memoized. - * @param {Function} [resolver] The function to resolve the cache key. - * @returns {Function} Returns the new memoized function. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * var other = { 'c': 3, 'd': 4 }; - * - * var values = _.memoize(_.values); - * values(object); - * // => [1, 2] - * - * values(other); - * // => [3, 4] - * - * object.a = 2; - * values(object); - * // => [1, 2] - * - * // Modify the result cache. - * values.cache.set(object, ['a', 'b']); - * values(object); - * // => ['a', 'b'] - * - * // Replace `_.memoize.Cache`. - * _.memoize.Cache = WeakMap; - */ -function memoize(func, resolver) { - if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { - throw new TypeError(FUNC_ERROR_TEXT); - } - var memoized = function() { - var args = arguments, - key = resolver ? resolver.apply(this, args) : args[0], - cache = memoized.cache; - - if (cache.has(key)) { - return cache.get(key); - } - var result = func.apply(this, args); - memoized.cache = cache.set(key, result) || cache; - return result; - }; - memoized.cache = new (memoize.Cache || MapCache); - return memoized; -} - -// Expose `MapCache`. -memoize.Cache = MapCache; - -/** Used as the maximum memoize cache size. */ -var MAX_MEMOIZE_SIZE = 500; - -/** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ -function memoizeCapped(func) { - var result = memoize(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - - var cache = result.cache; - return result; -} - -/** Used to match property names within property paths. */ -var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - -/** Used to match backslashes in property paths. */ -var reEscapeChar = /\\(\\)?/g; - -/** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ -var stringToPath = memoizeCapped(function(string) { - var result = []; - if (string.charCodeAt(0) === 46 /* . */) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, subString) { - result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; -}); - -/** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ -function toString(value) { - return value == null ? '' : baseToString(value); -} - -/** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @param {Object} [object] The object to query keys on. - * @returns {Array} Returns the cast property path array. - */ -function castPath(value, object) { - if (isArray$5(value)) { - return value; - } - return isKey(value, object) ? [value] : stringToPath(toString(value)); -} - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ -function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ -function baseGet(object, path) { - path = castPath(path, object); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return (index && index == length) ? object : undefined; -} - -/** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ -function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, path); - return result === undefined ? defaultValue : result; -} - -/** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ -function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; -} - -/** - * Removes all key-value entries from the stack. - * - * @private - * @name clear - * @memberOf Stack - */ -function stackClear() { - this.__data__ = new ListCache; - this.size = 0; -} - -/** - * Removes `key` and its value from the stack. - * - * @private - * @name delete - * @memberOf Stack - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function stackDelete(key) { - var data = this.__data__, - result = data['delete'](key); - - this.size = data.size; - return result; -} - -/** - * Gets the stack value for `key`. - * - * @private - * @name get - * @memberOf Stack - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function stackGet(key) { - return this.__data__.get(key); -} - -/** - * Checks if a stack value for `key` exists. - * - * @private - * @name has - * @memberOf Stack - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function stackHas(key) { - return this.__data__.has(key); -} - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * Sets the stack `key` to `value`. - * - * @private - * @name set - * @memberOf Stack - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the stack cache instance. - */ -function stackSet(key, value) { - var data = this.__data__; - if (data instanceof ListCache) { - var pairs = data.__data__; - if (!Map$1 || (pairs.length < LARGE_ARRAY_SIZE - 1)) { - pairs.push([key, value]); - this.size = ++data.size; - return this; - } - data = this.__data__ = new MapCache(pairs); - } - data.set(key, value); - this.size = data.size; - return this; -} - -/** - * Creates a stack cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Stack(entries) { - var data = this.__data__ = new ListCache(entries); - this.size = data.size; -} - -// Add methods to `Stack`. -Stack.prototype.clear = stackClear; -Stack.prototype['delete'] = stackDelete; -Stack.prototype.get = stackGet; -Stack.prototype.has = stackHas; -Stack.prototype.set = stackSet; - -/** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function arrayFilter(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; -} - -/** - * This method returns a new empty array. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {Array} Returns the new empty array. - * @example - * - * var arrays = _.times(2, _.stubArray); - * - * console.log(arrays); - * // => [[], []] - * - * console.log(arrays[0] === arrays[1]); - * // => false - */ -function stubArray() { - return []; -} - -/** Used for built-in method references. */ -var objectProto$4 = Object.prototype; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto$4.propertyIsEnumerable; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbols = !nativeGetSymbols ? stubArray : function(object) { - if (object == null) { - return []; - } - object = Object(object); - return arrayFilter(nativeGetSymbols(object), function(symbol) { - return propertyIsEnumerable.call(object, symbol); - }); -}; - -var getSymbols$1 = getSymbols; - -/** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ -function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return isArray$5(object) ? result : arrayPush(result, symbolsFunc(object)); -} - -/** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeys(object) { - return baseGetAllKeys(object, keys, getSymbols$1); -} - -/* Built-in method references that are verified to be native. */ -var DataView = getNative(root, 'DataView'); - -var DataView$1 = DataView; - -/* Built-in method references that are verified to be native. */ -var Promise$1 = getNative(root, 'Promise'); - -var Promise$2 = Promise$1; - -/* Built-in method references that are verified to be native. */ -var Set$1 = getNative(root, 'Set'); - -var Set$2 = Set$1; - -/** `Object#toString` result references. */ -var mapTag$1 = '[object Map]', - objectTag$1 = '[object Object]', - promiseTag = '[object Promise]', - setTag$1 = '[object Set]', - weakMapTag = '[object WeakMap]'; - -var dataViewTag$1 = '[object DataView]'; - -/** Used to detect maps, sets, and weakmaps. */ -var dataViewCtorString = toSource(DataView$1), - mapCtorString = toSource(Map$1), - promiseCtorString = toSource(Promise$2), - setCtorString = toSource(Set$2), - weakMapCtorString = toSource(WeakMap$2); - -/** - * Gets the `toStringTag` of `value`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ -var getTag = baseGetTag; - -// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. -if ((DataView$1 && getTag(new DataView$1(new ArrayBuffer(1))) != dataViewTag$1) || - (Map$1 && getTag(new Map$1) != mapTag$1) || - (Promise$2 && getTag(Promise$2.resolve()) != promiseTag) || - (Set$2 && getTag(new Set$2) != setTag$1) || - (WeakMap$2 && getTag(new WeakMap$2) != weakMapTag)) { - getTag = function(value) { - var result = baseGetTag(value), - Ctor = result == objectTag$1 ? value.constructor : undefined, - ctorString = Ctor ? toSource(Ctor) : ''; - - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: return dataViewTag$1; - case mapCtorString: return mapTag$1; - case promiseCtorString: return promiseTag; - case setCtorString: return setTag$1; - case weakMapCtorString: return weakMapTag; - } - } - return result; - }; -} - -var getTag$1 = getTag; - -/** Built-in value references. */ -var Uint8Array$1 = root.Uint8Array; - -var Uint8Array$2 = Uint8Array$1; - -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ -function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; -} - -/** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ -function setCacheHas(value) { - return this.__data__.has(value); -} - -/** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ -function SetCache(values) { - var index = -1, - length = values == null ? 0 : values.length; - - this.__data__ = new MapCache; - while (++index < length) { - this.add(values[index]); - } -} - -// Add methods to `SetCache`. -SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; -SetCache.prototype.has = setCacheHas; - -/** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ -function arraySome(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; -} - -/** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function cacheHas(cache, key) { - return cache.has(key); -} - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG$5 = 1, - COMPARE_UNORDERED_FLAG$3 = 2; - -/** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ -function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG$5, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Check that cyclic values are equal. - var arrStacked = stack.get(array); - var othStacked = stack.get(other); - if (arrStacked && othStacked) { - return arrStacked == other && othStacked == array; - } - var index = -1, - result = true, - seen = (bitmask & COMPARE_UNORDERED_FLAG$3) ? new SetCache : undefined; - - stack.set(array, other); - stack.set(other, array); - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!arraySome(other, function(othValue, othIndex) { - if (!cacheHas(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - stack['delete'](other); - return result; -} - -/** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ -function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; -} - -/** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ -function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; -} - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG$4 = 1, - COMPARE_UNORDERED_FLAG$2 = 2; - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]'; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol$1 ? Symbol$1.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new Uint8Array$2(object), new Uint8Array$2(other))) { - return false; - } - return true; - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return eq(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - case mapTag: - var convert = mapToArray; - - case setTag: - var isPartial = bitmask & COMPARE_PARTIAL_FLAG$4; - convert || (convert = setToArray); - - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= COMPARE_UNORDERED_FLAG$2; - - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); - stack['delete'](object); - return result; - - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; -} - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG$3 = 1; - -/** Used for built-in method references. */ -var objectProto$3 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$2 = objectProto$3.hasOwnProperty; - -/** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG$3, - objProps = getAllKeys(object), - objLength = objProps.length, - othProps = getAllKeys(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : hasOwnProperty$2.call(other, key))) { - return false; - } - } - // Check that cyclic values are equal. - var objStacked = stack.get(object); - var othStacked = stack.get(other); - if (objStacked && othStacked) { - return objStacked == other && othStacked == object; - } - var result = true; - stack.set(object, other); - stack.set(other, object); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - stack['delete'](object); - stack['delete'](other); - return result; -} - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG$2 = 1; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - objectTag = '[object Object]'; - -/** Used for built-in method references. */ -var objectProto$2 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$1 = objectProto$2.hasOwnProperty; - -/** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = isArray$5(object), - othIsArr = isArray$5(other), - objTag = objIsArr ? arrayTag : getTag$1(object), - othTag = othIsArr ? arrayTag : getTag$1(other); - - objTag = objTag == argsTag ? objectTag : objTag; - othTag = othTag == argsTag ? objectTag : othTag; - - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - if (isSameTag && isBuffer(object)) { - if (!isBuffer(other)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new Stack); - return (objIsArr || isTypedArray(object)) - ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) - : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); - } - if (!(bitmask & COMPARE_PARTIAL_FLAG$2)) { - var objIsWrapped = objIsObj && hasOwnProperty$1.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty$1.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - stack || (stack = new Stack); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new Stack); - return equalObjects(object, other, bitmask, customizer, equalFunc, stack); -} - -/** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ -function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); -} - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG$1 = 1, - COMPARE_UNORDERED_FLAG$1 = 2; - -/** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ -function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new Stack; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined - ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG$1 | COMPARE_UNORDERED_FLAG$1, customizer, stack) - : result - )) { - return false; - } - } - } - return true; -} - -/** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ -function isStrictComparable(value) { - return value === value && !isObject$1(value); -} - -/** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ -function getMatchData(object) { - var result = keys(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, isStrictComparable(value)]; - } - return result; -} - -/** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; -} - -/** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || baseIsMatch(object, source, matchData); - }; -} - -/** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHasIn(object, key) { - return object != null && key in Object(object); -} - -/** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ -function hasPath(object, path, hasFunc) { - path = castPath(path, object); - - var index = -1, - length = path.length, - result = false; - - while (++index < length) { - var key = toKey(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; - } - length = object == null ? 0 : object.length; - return !!length && isLength(length) && isIndex(key, length) && - (isArray$5(object) || isArguments(object)); -} - -/** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ -function hasIn(object, path) { - return object != null && hasPath(object, path, baseHasIn); -} - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path), srcValue); - } - return function(object) { - var objValue = get(object, path); - return (objValue === undefined && objValue === srcValue) - ? hasIn(object, path) - : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); - }; -} - -/** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; -} - -/** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function basePropertyDeep(path) { - return function(object) { - return baseGet(object, path); - }; -} - -/** - * Creates a function that returns the value at `path` of a given object. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - * @example - * - * var objects = [ - * { 'a': { 'b': 2 } }, - * { 'a': { 'b': 1 } } - * ]; - * - * _.map(objects, _.property('a.b')); - * // => [2, 1] - * - * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); - * // => [1, 2] - */ -function property(path) { - return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); -} - -/** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ -function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity$2; - } - if (typeof value == 'object') { - return isArray$5(value) - ? baseMatchesProperty(value[0], value[1]) - : baseMatches(value); - } - return property(value); -} - -/** - * A specialized version of `baseAggregator` for arrays. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ -function arrayAggregator(array, setter, iteratee, accumulator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - var value = array[index]; - setter(accumulator, value, iteratee(value), array); - } - return accumulator; -} - -/** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; - - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; -} - -/** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ -var baseFor = createBaseFor(); - -var baseFor$1 = baseFor; - -/** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function baseForOwn(object, iteratee) { - return object && baseFor$1(object, iteratee, keys); -} - -/** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!isArrayLike$1(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; -} - -/** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ -var baseEach = createBaseEach(baseForOwn); - -/** - * Aggregates elements of `collection` on `accumulator` with keys transformed - * by `iteratee` and values set by `setter`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ -function baseAggregator(collection, setter, iteratee, accumulator) { - baseEach(collection, function(value, key, collection) { - setter(accumulator, value, iteratee(value), collection); - }); - return accumulator; -} - -/** - * Creates a function like `_.groupBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} [initializer] The accumulator object initializer. - * @returns {Function} Returns the new aggregator function. - */ -function createAggregator(setter, initializer) { - return function(collection, iteratee) { - var func = isArray$5(collection) ? arrayAggregator : baseAggregator, - accumulator = initializer ? initializer() : {}; - - return func(collection, setter, baseIteratee(iteratee), accumulator); - }; -} - -/** Used for built-in method references. */ -var objectProto$1 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto$1.hasOwnProperty; - -/** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The order of grouped values - * is determined by the order they occur in `collection`. The corresponding - * value of each key is an array of elements responsible for generating the - * key. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.groupBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': [4.2], '6': [6.1, 6.3] } - * - * // The `_.property` iteratee shorthand. - * _.groupBy(['one', 'two', 'three'], 'length'); - * // => { '3': ['one', 'two'], '5': ['three'] } - */ -var groupBy$2 = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - result[key].push(value); - } else { - baseAssignValue(result, key, [value]); - } -}); - -var groupBy$3 = groupBy$2; - -const ARM_FEATURES_H = `/* Macros to test for CPU features on ARM. Generic ARM version. -Copyright (C) 2012-2022 Free Software Foundation, Inc. -This file is part of the GNU C Library. -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Lesser General Public License for more details. -You should have received a copy of the GNU Lesser General Public -License along with the GNU C Library. If not, see -. */ - -#ifndef _ARM_ARM_FEATURES_H -#define _ARM_ARM_FEATURES_H 1 - -/* An OS-specific arm-features.h file should define ARM_HAVE_VFP to -an appropriate expression for testing at runtime whether the VFP -hardware is present. We'll then redefine it to a constant if we -know at compile time that we can assume VFP. */ - -#ifndef __SOFTFP__ -/* The compiler is generating VFP instructions, so we're already -assuming the hardware exists. */ -# undef ARM_HAVE_VFP -# define ARM_HAVE_VFP 1 -#endif - -/* An OS-specific arm-features.h file may define ARM_ASSUME_NO_IWMMXT -to indicate at compile time that iWMMXt hardware is never present -at runtime (or that we never care about its state) and so need not -be checked for. */ - -/* A more-specific arm-features.h file may define ARM_ALWAYS_BX to indicate -that instructions using pc as a destination register must never be used, -so a "bx" (or "blx") instruction is always required. */ - -/* The log2 of the minimum alignment required for an address that -is the target of a computed branch (i.e. a "bx" instruction). -A more-specific arm-features.h file may define this to set a more -stringent requirement. -Using this only makes sense for code in ARM mode (where instructions -always have a fixed size of four bytes), or for Thumb-mode code that is -specifically aligning all the related branch targets to match (since -Thumb instructions might be either two or four bytes). */ -#ifndef ARM_BX_ALIGN_LOG2 -# define ARM_BX_ALIGN_LOG2 2 -#endif - -/* An OS-specific arm-features.h file may define ARM_NO_INDEX_REGISTER to -indicate that the two-register addressing modes must never be used. */ - -#endif /* arm-features.h */ -`; - -const createJsBinding = (localName, pkgName) => `/* tslint:disable */ -/* eslint-disable */ -/* prettier-ignore */ - -/* auto-generated by NAPI-RS */ - -const { existsSync, readFileSync } = require('fs') -const { join } = require('path') - -const { platform, arch } = process - -let nativeBinding = null -let localFileExisted = false -let loadError = null - -function isMusl() { - // For Node 10 - if (!process.report || typeof process.report.getReport !== 'function') { - try { - const lddPath = require('child_process').execSync('which ldd').toString().trim() - return readFileSync(lddPath, 'utf8').includes('musl') - } catch (e) { - return true - } - } else { - const { glibcVersionRuntime } = process.report.getReport().header - return !glibcVersionRuntime - } -} - -switch (platform) { - case 'android': - switch (arch) { - case 'arm64': - localFileExisted = existsSync(join(__dirname, '${localName}.android-arm64.node')) - try { - if (localFileExisted) { - nativeBinding = require('./${localName}.android-arm64.node') - } else { - nativeBinding = require('${pkgName}-android-arm64') - } - } catch (e) { - loadError = e - } - break - case 'arm': - localFileExisted = existsSync(join(__dirname, '${localName}.android-arm-eabi.node')) - try { - if (localFileExisted) { - nativeBinding = require('./${localName}.android-arm-eabi.node') - } else { - nativeBinding = require('${pkgName}-android-arm-eabi') - } - } catch (e) { - loadError = e - } - break - default: - throw new Error(\`Unsupported architecture on Android \${arch}\`) - } - break - case 'win32': - switch (arch) { - case 'x64': - localFileExisted = existsSync( - join(__dirname, '${localName}.win32-x64-msvc.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./${localName}.win32-x64-msvc.node') - } else { - nativeBinding = require('${pkgName}-win32-x64-msvc') - } - } catch (e) { - loadError = e - } - break - case 'ia32': - localFileExisted = existsSync( - join(__dirname, '${localName}.win32-ia32-msvc.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./${localName}.win32-ia32-msvc.node') - } else { - nativeBinding = require('${pkgName}-win32-ia32-msvc') - } - } catch (e) { - loadError = e - } - break - case 'arm64': - localFileExisted = existsSync( - join(__dirname, '${localName}.win32-arm64-msvc.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./${localName}.win32-arm64-msvc.node') - } else { - nativeBinding = require('${pkgName}-win32-arm64-msvc') - } - } catch (e) { - loadError = e - } - break - default: - throw new Error(\`Unsupported architecture on Windows: \${arch}\`) - } - break - case 'darwin': - localFileExisted = existsSync(join(__dirname, '${localName}.darwin-universal.node')) - try { - if (localFileExisted) { - nativeBinding = require('./${localName}.darwin-universal.node') - } else { - nativeBinding = require('${pkgName}-darwin-universal') - } - break - } catch {} - switch (arch) { - case 'x64': - localFileExisted = existsSync(join(__dirname, '${localName}.darwin-x64.node')) - try { - if (localFileExisted) { - nativeBinding = require('./${localName}.darwin-x64.node') - } else { - nativeBinding = require('${pkgName}-darwin-x64') - } - } catch (e) { - loadError = e - } - break - case 'arm64': - localFileExisted = existsSync( - join(__dirname, '${localName}.darwin-arm64.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./${localName}.darwin-arm64.node') - } else { - nativeBinding = require('${pkgName}-darwin-arm64') - } - } catch (e) { - loadError = e - } - break - default: - throw new Error(\`Unsupported architecture on macOS: \${arch}\`) - } - break - case 'freebsd': - if (arch !== 'x64') { - throw new Error(\`Unsupported architecture on FreeBSD: \${arch}\`) - } - localFileExisted = existsSync(join(__dirname, '${localName}.freebsd-x64.node')) - try { - if (localFileExisted) { - nativeBinding = require('./${localName}.freebsd-x64.node') - } else { - nativeBinding = require('${pkgName}-freebsd-x64') - } - } catch (e) { - loadError = e - } - break - case 'linux': - switch (arch) { - case 'x64': - if (isMusl()) { - localFileExisted = existsSync( - join(__dirname, '${localName}.linux-x64-musl.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./${localName}.linux-x64-musl.node') - } else { - nativeBinding = require('${pkgName}-linux-x64-musl') - } - } catch (e) { - loadError = e - } - } else { - localFileExisted = existsSync( - join(__dirname, '${localName}.linux-x64-gnu.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./${localName}.linux-x64-gnu.node') - } else { - nativeBinding = require('${pkgName}-linux-x64-gnu') - } - } catch (e) { - loadError = e - } - } - break - case 'arm64': - if (isMusl()) { - localFileExisted = existsSync( - join(__dirname, '${localName}.linux-arm64-musl.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./${localName}.linux-arm64-musl.node') - } else { - nativeBinding = require('${pkgName}-linux-arm64-musl') - } - } catch (e) { - loadError = e - } - } else { - localFileExisted = existsSync( - join(__dirname, '${localName}.linux-arm64-gnu.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./${localName}.linux-arm64-gnu.node') - } else { - nativeBinding = require('${pkgName}-linux-arm64-gnu') - } - } catch (e) { - loadError = e - } - } - break - case 'arm': - if (isMusl()) { - localFileExisted = existsSync( - join(__dirname, '${localName}.linux-arm-musleabihf.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./${localName}.linux-arm-musleabihf.node') - } else { - nativeBinding = require('${pkgName}-linux-arm-musleabihf') - } - } catch (e) { - loadError = e - } - } else { - localFileExisted = existsSync( - join(__dirname, '${localName}.linux-arm-gnueabihf.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./${localName}.linux-arm-gnueabihf.node') - } else { - nativeBinding = require('${pkgName}-linux-arm-gnueabihf') - } - } catch (e) { - loadError = e - } - } - break - case 'riscv64': - if (isMusl()) { - localFileExisted = existsSync( - join(__dirname, '${localName}.linux-riscv64-musl.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./${localName}.linux-riscv64-musl.node') - } else { - nativeBinding = require('${pkgName}-linux-riscv64-musl') - } - } catch (e) { - loadError = e - } - } else { - localFileExisted = existsSync( - join(__dirname, '${localName}.linux-riscv64-gnu.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./${localName}.linux-riscv64-gnu.node') - } else { - nativeBinding = require('${pkgName}-linux-riscv64-gnu') - } - } catch (e) { - loadError = e - } - } - break - case 's390x': - localFileExisted = existsSync( - join(__dirname, '${localName}.linux-s390x-gnu.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./${localName}.linux-s390x-gnu.node') - } else { - nativeBinding = require('${pkgName}-linux-s390x-gnu') - } - } catch (e) { - loadError = e - } - break - default: - throw new Error(\`Unsupported architecture on Linux: \${arch}\`) - } - break - default: - throw new Error(\`Unsupported OS: \${platform}, architecture: \${arch}\`) -} - -if (!nativeBinding) { - if (loadError) { - throw loadError - } - throw new Error(\`Failed to load native binding\`) -} - -`; - -var _a$1; -const debug$8 = debugFactory('build'); -const ZIG_PLATFORM_TARGET_MAP = { - 'x86_64-unknown-linux-musl': 'x86_64-linux-musl', - 'x86_64-unknown-linux-gnu': 'x86_64-linux-gnu', - // Doesn't support Windows MSVC for now - // 'x86_64-pc-windows-gnu': 'x86_64-windows-gnu', - // https://github.com/ziglang/zig/issues/1759 - // 'x86_64-unknown-freebsd': 'x86_64-freebsd', - 'x86_64-apple-darwin': 'x86_64-macos', - 'aarch64-apple-darwin': 'aarch64-macos', - 'aarch64-unknown-linux-gnu': 'aarch64-linux-gnu', - 'aarch64-unknown-linux-musl': 'aarch64-linux-musl', - 'armv7-unknown-linux-gnueabihf': 'arm-linux-gnueabihf', - 'armv7-unknown-linux-musleabihf': 'arm-linux-musleabihf', -}; -const DEFAULT_GLIBC_TARGET = (_a$1 = process.env.GLIBC_ABI_TARGET) !== null && _a$1 !== void 0 ? _a$1 : '2.17'; -const SHEBANG_NODE = process.platform === 'win32' ? '' : '#!/usr/bin/env node\n'; -const SHEBANG_SH = process.platform === 'win32' ? '' : '#!/usr/bin/env sh\n'; -function processZigLinkerArgs(platform, args) { - if (platform.includes('apple')) { - const newArgs = args.filter((arg, index) => !arg.startsWith('-Wl,-exported_symbols_list') && - arg !== '-Wl,-dylib' && - arg !== '-liconv' && - arg !== '-Wl,-dead_strip' && - !(arg === '-framework' && args[index + 1] === 'CoreFoundation') && - !(arg === 'CoreFoundation' && args[index - 1] === '-framework')); - newArgs.push('-Wl,"-undefined=dynamic_lookup"', '-dead_strip', '-lunwind'); - return newArgs; - } - if (platform.includes('linux')) { - return args - .map((arg) => { - if (arg === '-lgcc_s') { - return '-lunwind'; - } - return arg; - }) - .filter((arg) => arg !== '-march=armv7-a' && arg !== '-Wl,--no-undefined-version'); - } - return args; -} -class BuildCommand extends Command { - constructor() { - var _a, _b; - super(...arguments); - this.appendPlatformToFilename = Boolean$1(`--platform`, false, { - description: `Add platform triple to the .node file. ${green('[name].linux-x64-gnu.node')} for example`, - }); - this.isRelease = Boolean$1(`--release`, false, { - description: `Bypass to ${green('cargo build --release')}`, - }); - this.configFileName = String$1('--config,-c', { - description: `napi config path, only JSON format accepted. Default to ${underline(green('package.json'))}`, - }); - this.cargoName = String$1('--cargo-name', { - description: `Override the ${green('name')} field in ${underline(yellowBright('Cargo.toml'))}`, - }); - this.targetTripleDir = String$1('--target', (_b = (_a = process.env.RUST_TARGET) !== null && _a !== void 0 ? _a : process.env.CARGO_BUILD_TARGET) !== null && _b !== void 0 ? _b : '', { - description: `Bypass to ${green('cargo build --target')}`, - }); - this.features = String$1('--features', { - description: `Bypass to ${green('cargo build --features')}`, - }); - this.bin = String$1('--bin', { - description: `Bypass to ${green('cargo build --bin')}`, - }); - this.dts = String$1('--dts', 'index.d.ts', { - description: `The filename and path of ${green('.d.ts')} file, relative to cwd`, - }); - this.constEnum = Boolean$1('--const-enum', { - description: `Generate ${green('const enum')} in .d.ts file or not, default is ${green('true')}`, - }); - this.noDtsHeader = Boolean$1('--no-dts-header', false, { - description: `Don't generate ${green('.d.ts')} header`, - }); - this.project = String$1('-p', { - description: `Bypass to ${green('cargo -p')}`, - }); - this.profile = String$1('--profile', { - description: `Bypass to ${green('cargo --profile')}`, - }); - this.cargoFlags = String$1('--cargo-flags', '', { - description: `All the others flag passed to ${yellow('cargo build')}`, - }); - this.jsBinding = String$1('--js', 'index.js', { - description: `Path to the JS binding file, pass ${underline(yellow('false'))} to disable it. Only affect if ${green('--target')} is specified.`, - }); - this.jsPackageName = String$1('--js-package-name', { - description: `Package name in generated js binding file, Only affect if ${green('--target')} specified and ${green('--js')} is not false.`, - required: false, - }); - this.cargoCwd = String$1('--cargo-cwd', { - description: `The cwd of ${underline(yellow('Cargo.toml'))} file`, - }); - this.pipe = String$1('--pipe', { - description: `Pipe [${green('.js/.ts')}] files to this command, eg ${green('prettier -w')}`, - }); - // https://github.com/napi-rs/napi-rs/issues/297 - this.disableWindowsX32Optimize = Boolean$1('--disable-windows-x32-optimize', false, { - description: `Disable windows x32 ${green('lto')} and increase ${green('codegen-units')}. Disabled by default. See ${underline(blue('https://github.com/napi-rs/napi-rs/issues/297'))}`, - }); - this.destDir = String$1({ - required: false, - }); - this.useZig = Boolean$1(`--zig`, false, { - description: `Use ${green('zig')} as linker ${yellowBright('(Experimental)')}`, - }); - this.zigABIVersion = String$1(`--zig-abi-suffix`, { - description: `The suffix of the ${green('zig --target')} ABI version. Eg. ${cyan('--target x86_64-unknown-linux-gnu')} ${green('--zig-abi-suffix=2.17')}`, - }); - this.zigLinkOnly = Boolean$1(`--zig-link-only`, false, { - description: `Only link the library with ${green('zig')}`, - }); - this.isStrip = Boolean$1(`--strip`, false, { - description: `${green('Strip')} the library for minimum file size`, - }); - } - execute() { - var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l; - return __awaiter$1(this, void 0, void 0, function* () { - const cwd = this.cargoCwd - ? path$1.join(process.cwd(), this.cargoCwd) - : process.cwd(); - const cargoTomlPath = path$1.join(cwd, 'Cargo.toml'); - let cargoMetadata; - try { - debug$8('Start parse toml'); - cargoMetadata = JSON.parse(require$$1$1.execSync(`cargo metadata --format-version 1 --manifest-path "${cargoTomlPath}"`, { - stdio: 'pipe', - maxBuffer: 1024 * 1024 * 10, - }).toString('utf8')); - } - catch (e) { - throw new TypeError('Could not parse the Cargo.toml: ' + e); - } - const packages = cargoMetadata.packages; - let cargoPackageName; - if (this.cargoName) { - cargoPackageName = this.cargoName; - } - else { - const root = cargoMetadata.resolve.root; - if (root) { - const rootPackage = packages.find((p) => p.id === root); - cargoPackageName = rootPackage.name; - } - else { - throw new TypeError('No package.name field in Cargo.toml'); - } - } - const cargoPackage = packages.find((p) => p.name === cargoPackageName); - if (!this.bin && - ((_a = cargoPackage === null || cargoPackage === void 0 ? void 0 : cargoPackage.targets) === null || _a === void 0 ? void 0 : _a.length) === 1 && - (cargoPackage === null || cargoPackage === void 0 ? void 0 : cargoPackage.targets[0].kind.length) === 1 && - (cargoPackage === null || cargoPackage === void 0 ? void 0 : cargoPackage.targets[0].kind[0]) === 'bin') { - this.bin = cargoPackageName; - } - const releaseFlag = this.isRelease ? `--release` : ''; - const targetFlag = this.targetTripleDir - ? `--target ${this.targetTripleDir}` - : ''; - const featuresFlag = this.features ? `--features ${this.features}` : ''; - const binFlag = this.bin ? `--bin ${this.bin}` : ''; - const triple = this.targetTripleDir - ? parseTriple(this.targetTripleDir) - : getHostTargetTriple(); - const envTarget = triple.raw.replaceAll('-', '_').toUpperCase(); - debug$8(`Current triple is: ${green(triple.raw)}`); - const pFlag = this.project ? `-p ${this.project}` : ''; - const profileFlag = this.profile ? `--profile ${this.profile}` : ''; - const externalFlags = [ - releaseFlag, - targetFlag, - featuresFlag, - binFlag, - pFlag, - profileFlag, - this.cargoFlags, - ] - .filter((flag) => Boolean(flag)) - .join(' '); - const additionalEnv = {}; - const isCrossForWin = triple.platform === 'win32' && process.platform !== 'win32'; - const isCrossForLinux = triple.platform === 'linux' && - (process.platform !== 'linux' || - triple.arch !== process.arch || - (function () { - var _a, _b, _c; - const glibcVersionRuntime = - // @ts-expect-error - (_c = (_b = (_a = process.report) === null || _a === void 0 ? void 0 : _a.getReport()) === null || _b === void 0 ? void 0 : _b.header) === null || _c === void 0 ? void 0 : _c.glibcVersionRuntime; - const libc = glibcVersionRuntime ? 'gnu' : 'musl'; - return triple.abi !== libc; - })()); - const isCrossForMacOS = triple.platform === 'darwin' && process.platform !== 'darwin'; - const cargo = (_b = process.env.CARGO) !== null && _b !== void 0 ? _b : (isCrossForWin ? 'cargo-xwin' : 'cargo'); - if (isCrossForWin && triple.arch === 'ia32') { - additionalEnv['XWIN_ARCH'] = 'x86'; - } - const cargoCommand = `${cargo} build ${externalFlags}`; - debug$8(`Run ${green(cargoCommand)}`); - const rustflags = process.env.RUSTFLAGS - ? process.env.RUSTFLAGS.split(' ') - : []; - if (triple.raw.includes('musl') && !this.bin) { - if (!rustflags.includes('target-feature=-crt-static')) { - rustflags.push('-C target-feature=-crt-static'); - } - } - if (this.isStrip && !rustflags.includes('-C link-arg=-s')) { - rustflags.push('-C link-arg=-s'); - } - let useZig = false; - if (!this.useZig && - isCrossForLinux && - triple.raw === 'riscv64gc-unknown-linux-gnu') { - // Linking with zig fails for riscv64. Don't default to zig for riscv64. - additionalEnv[`CARGO_TARGET_${envTarget}_LINKER`] = - 'riscv64-linux-gnu-gcc'; - } - else if (this.useZig || isCrossForLinux || isCrossForMacOS) { - try { - require$$1$1.execSync('zig version'); - useZig = true; - } - catch (e) { - if (this.useZig) { - throw new TypeError(`Could not find ${green('zig')} on the PATH`); - } - else { - debug$8(`Could not find ${green('zig')} on the PATH, fallback to normal linker`); - } - } - } - if (useZig) { - const zigABIVersion = (_c = this.zigABIVersion) !== null && _c !== void 0 ? _c : (isCrossForLinux && triple.abi === 'gnu' ? DEFAULT_GLIBC_TARGET : null); - const mappedZigTarget = ZIG_PLATFORM_TARGET_MAP[triple.raw]; - const zigTarget = `${mappedZigTarget}${zigABIVersion ? `.${zigABIVersion}` : ''}`; - debug$8(`Using Zig with target ${green(zigTarget)}`); - if (!mappedZigTarget) { - throw new Error(`${triple.raw} can not be cross compiled by zig`); - } - const paths = envPaths('napi-rs'); - const shellFileExt = process.platform === 'win32' ? 'cmd' : 'sh'; - const linkerWrapperShell = path$1.join(paths.cache, `zig-linker-${triple.raw}.${shellFileExt}`); - const CCWrapperShell = path$1.join(paths.cache, `zig-cc-${triple.raw}.${shellFileExt}`); - const CXXWrapperShell = path$1.join(paths.cache, `zig-cxx-${triple.raw}.${shellFileExt}`); - const linkerWrapper = path$1.join(paths.cache, `zig-cc-${triple.raw}.js`); - require$$0$2.mkdirSync(paths.cache, { recursive: true }); - const forwardArgs = process.platform === 'win32' ? '"%*"' : '$@'; - if (triple.arch === 'arm') { - yield patchArmFeaturesHForArmTargets(); - } - yield writeFileAsync(linkerWrapperShell, process.platform === 'win32' - ? `@IF EXIST "%~dp0\\node.exe" ( - "%~dp0\\node.exe" "${linkerWrapper}" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "${linkerWrapper}" %* -)` - : `${SHEBANG_SH}node ${linkerWrapper} ${forwardArgs}`, { - mode: '777', - }); - yield writeFileAsync(CCWrapperShell, `${SHEBANG_SH}node ${linkerWrapper} cc ${forwardArgs}`, { - mode: '777', - }); - yield writeFileAsync(CXXWrapperShell, `${SHEBANG_SH}node ${linkerWrapper} c++ ${forwardArgs}`, { - mode: '777', - }); - yield writeFileAsync(linkerWrapper, `${SHEBANG_NODE}const{writeFileSync} = require('fs')\n${processZigLinkerArgs.toString()}\nconst {status} = require('child_process').spawnSync('zig', [process.argv[2] === "c++" || process.argv[2] === "cc" ? "" : "cc", ...processZigLinkerArgs('${triple.raw}', process.argv.slice(2)), '-target', '${zigTarget}'], { stdio: 'inherit', shell: true })\nwriteFileSync('${linkerWrapper.replaceAll('\\', '/')}.args.log', processZigLinkerArgs('${triple.raw}', process.argv.slice(2)).join(' '))\n\nprocess.exit(status || 0)\n`, { - mode: '777', - }); - if (!this.zigLinkOnly) { - Object.assign(additionalEnv, { - CC: CCWrapperShell, - CXX: CXXWrapperShell, - TARGET_CC: CCWrapperShell, - TARGET_CXX: CXXWrapperShell, - }); - } - additionalEnv[`CARGO_TARGET_${envTarget}_LINKER`] = linkerWrapperShell; - } - debug$8(`Platform: ${JSON.stringify(triple, null, 2)}`); - if (triple.platform === 'android') { - const { ANDROID_NDK_LATEST_HOME } = process.env; - if (!ANDROID_NDK_LATEST_HOME) { - console.info(`${yellow('ANDROID_NDK_LATEST_HOME')} environment variable is missing`); - } - const targetArch = triple.arch === 'arm' ? 'armv7a' : 'aarch64'; - const targetPlatform = triple.arch === 'arm' ? 'androideabi24' : 'android24'; - Object.assign(additionalEnv, { - CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER: `${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/${targetArch}-linux-android24-clang`, - CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER: `${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/${targetArch}-linux-androideabi24-clang`, - CC: `${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/${targetArch}-linux-${targetPlatform}-clang`, - CXX: `${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/${targetArch}-linux-${targetPlatform}-clang++`, - AR: `${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar`, - RANLIB: `${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib`, - ANDROID_NDK: ANDROID_NDK_LATEST_HOME, - PATH: `${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin:${process.env.PATH}`, - }); - } - const { binaryName, packageName, tsConstEnum: tsConstEnumFromConfig, } = getNapiConfig(this.configFileName); - const tsConstEnum = (_e = (_d = this.constEnum) !== null && _d !== void 0 ? _d : tsConstEnumFromConfig) !== null && _e !== void 0 ? _e : true; - if (triple.platform === 'wasi') { - try { - const emnapiDir = require.resolve('emnapi'); - const linkDir = path$1.join(emnapiDir, '..', 'lib', 'wasm32-wasi'); - additionalEnv['EMNAPI_LINK_DIR'] = linkDir; - rustflags.push('-Z wasi-exec-model=reactor'); - } - catch (e) { - const err = new Error(`Could not find emnapi, please install emnapi`); - err.cause = e; - throw err; - } - } - if (rustflags.length > 0) { - additionalEnv['RUSTFLAGS'] = rustflags.join(' '); - } - let cargoArtifactName = this.cargoName; - if (!cargoArtifactName) { - if (this.bin) { - cargoArtifactName = cargoPackageName; - } - else { - cargoArtifactName = cargoPackageName.replace(/-/g, '_'); - } - if (!this.bin && - !cargoPackage.targets.some((target) => target.crate_types.includes('cdylib'))) { - throw new TypeError(`Missing ${green('crate-type = ["cdylib"]')} in ${green('[lib]')}`); - } - } - if (this.bin) { - debug$8(`Binary name: ${greenBright(cargoArtifactName)}`); - } - else { - debug$8(`Dylib name: ${greenBright(cargoArtifactName)}`); - } - const cwdSha = require$$2$1.createHash('sha256') - .update(process.cwd()) - .update(version$1) - .digest('hex') - .substring(0, 8); - const intermediateTypeFile = path$1.join(os.tmpdir(), `${cargoArtifactName}-${cwdSha}.napi_type_def.tmp`); - const intermediateWasiRegisterFile = path$1.join(os.tmpdir(), `${cargoArtifactName}-${cwdSha}.napi_wasi_register.tmp`); - debug$8(`intermediate type def file: ${intermediateTypeFile}`); - const commandEnv = Object.assign(Object.assign(Object.assign({}, process.env), additionalEnv), { TYPE_DEF_TMP_PATH: intermediateTypeFile, WASI_REGISTER_TMP_PATH: intermediateWasiRegisterFile, CARGO_CFG_NAPI_RS_CLI_VERSION: version$1 }); - try { - require$$1$1.execSync(cargoCommand, { - env: commandEnv, - stdio: 'inherit', - cwd, - }); - } - catch (e) { - if (cargo === 'cargo-xwin') { - console.warn(`You are cross compiling ${underline(triple.raw)} target on ${green(process.platform)} host`); - } - else if (isCrossForLinux || isCrossForMacOS) { - console.warn(`You are cross compiling ${underline(triple.raw)} on ${green(process.platform)} host`); - } - throw e; - } - const platform = triple.platform; - let libExt = ''; - debug$8(`Platform: ${greenBright(platform)}`); - // Platform based massaging for build commands - if (!this.bin) { - switch (platform) { - case 'darwin': - libExt = '.dylib'; - cargoArtifactName = `lib${cargoArtifactName}`; - break; - case 'win32': - libExt = '.dll'; - break; - case 'linux': - case 'freebsd': - case 'openbsd': - case 'android': - case 'sunos': - cargoArtifactName = `lib${cargoArtifactName}`; - libExt = '.so'; - break; - default: - throw new TypeError('Operating system not currently supported or recognized by the build script'); - } - } - const targetRootDir = - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - process.env.CARGO_TARGET_DIR || - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - process.env.CARGO_BUILD_TARGET_DIR || - (yield findUp(cwd)); - if (!targetRootDir) { - throw new TypeError('No target dir found'); - } - const targetDir = path$1.join(this.targetTripleDir, (_f = this.profile) !== null && _f !== void 0 ? _f : (this.isRelease ? 'release' : 'debug')); - const platformName = this.appendPlatformToFilename - ? `.${triple.platformArchABI}` - : ''; - debug$8(`Platform name: ${platformName || green('[Empty]')}`); - const distFileName = this.bin - ? cargoArtifactName - : `${binaryName}${platformName}.node`; - const distModulePath = path$1.join((_g = this.destDir) !== null && _g !== void 0 ? _g : '.', distFileName); - const parsedDist = path$1.parse(distModulePath); - if (parsedDist.dir && !require$$0$2.existsSync(parsedDist.dir)) { - yield mkdirAsync(parsedDist.dir, { recursive: true }).catch((e) => { - console.warn(bgYellowBright(`Create dir [${parsedDist.dir}] failed, reason: ${e.message}`)); - }); - } - const sourcePath = path$1.join(targetRootDir, targetDir, `${cargoArtifactName}${libExt}`); - if (require$$0$2.existsSync(distModulePath)) { - debug$8(`remove old binary [${yellowBright(distModulePath)}]`); - yield unlinkAsync(distModulePath); - } - debug$8(`Write binary content to [${yellowBright(distModulePath)}]`); - yield copyFileAsync(sourcePath, distModulePath); - if (!this.bin) { - const dtsFilePath = path$1.join(process.cwd(), (_h = this.destDir) !== null && _h !== void 0 ? _h : '.', (_j = this.dts) !== null && _j !== void 0 ? _j : 'index.d.ts'); - const jsBindingFilePath = this.jsBinding && - this.jsBinding !== 'false' && - this.appendPlatformToFilename - ? path$1.join(process.cwd(), (_k = this.destDir) !== null && _k !== void 0 ? _k : '.', this.jsBinding) - : null; - const idents = yield processIntermediateTypeFile(intermediateTypeFile, dtsFilePath, this.noDtsHeader, tsConstEnum); - yield writeJsBinding(binaryName, (_l = this.jsPackageName) !== null && _l !== void 0 ? _l : packageName, jsBindingFilePath, idents); - if (this.pipe) { - if (jsBindingFilePath) { - const pipeCommand = `${this.pipe} ${jsBindingFilePath}`; - console.info(`Run ${green(pipeCommand)}`); - try { - require$$1$1.execSync(pipeCommand, { stdio: 'inherit', env: commandEnv }); - } - catch (e) { - console.warn(bgYellowBright('Pipe the js binding file to command failed'), e); - } - } - const pipeCommand = `${this.pipe} ${dtsFilePath}`; - console.info(`Run ${green(pipeCommand)}`); - try { - require$$1$1.execSync(pipeCommand, { stdio: 'inherit', env: commandEnv }); - } - catch (e) { - console.warn(bgYellowBright('Pipe the dts file to command failed'), e); - } - } - } - }); - } -} -BuildCommand.usage = Command.Usage({ - description: 'Build and copy native module into specified dir', -}); -BuildCommand.paths = [['build']]; -function findUp(dir = process.cwd()) { - return __awaiter$1(this, void 0, void 0, function* () { - const dist = path$1.join(dir, 'target'); - if (require$$0$2.existsSync(dist)) { - return dist; - } - const dirs = dir.split(path$1.sep); - if (dirs.length < 2) { - return null; - } - dirs.pop(); - return findUp(dirs.join(path$1.sep)); - }); -} -function processIntermediateTypeFile(source, target, noDtsHeader, tsConstEnum) { - return __awaiter$1(this, void 0, void 0, function* () { - const idents = []; - if (!require$$0$2.existsSync(source)) { - debug$8(`do not find tmp type file. skip type generation`); - return idents; - } - const tmpFile = yield readFileAsync(source, 'utf8'); - const lines = tmpFile - .split('\n') - .map((line) => line.trim()) - .filter(Boolean) - .map((line) => { - // compatible with old version - if (line.startsWith('{')) { - return line; - } - else { - const [_crateName, ...rest] = line.split(':'); - return rest.join(':'); - } - }); - if (!lines.length) { - return idents; - } - // Deduplicate lines, to account for macros being possibly evaluated more than once: - const uniqueLines = [...new Set(lines)]; - const allDefs = uniqueLines.map((line) => JSON.parse(line)); - function convertDefs(defs, nested = false) { - const classes = new Map(); - const impls = new Map(); - let dts = ''; - const nest = nested ? 2 : 0; - defs.forEach((def) => { - switch (def.kind) { - case 'struct': - if (!nested) { - idents.push(def.name); - } - classes.set(def.name, { - original_name: def.original_name, - def: def.def, - js_doc: def.js_doc, - }); - break; - case 'impl': - const existed = impls.get(def.name); - impls.set(def.name, `${existed ? existed + '\n' : ''}${def.js_doc}${def.def}`); - break; - case 'interface': - dts += - indentLines(`${def.js_doc}export interface ${def.name} {`, nest) + - '\n'; - dts += indentLines(def.def, nest + 2) + '\n'; - dts += indentLines(`}`, nest) + '\n'; - break; - case 'enum': - if (!nested) { - idents.push(def.name); - } - const enumPrefix = tsConstEnum ? ' const' : ''; - dts += - indentLines(`${def.js_doc}export${enumPrefix} enum ${def.name} {`, nest) + '\n'; - dts += indentLines(def.def, nest + 2) + '\n'; - dts += indentLines(`}`, nest) + '\n'; - break; - default: - if (!nested) { - idents.push(def.name); - } - dts += indentLines(`${def.js_doc}${def.def}`, nest) + '\n'; - } - }); - for (const [name, { js_doc, def, original_name }] of classes.entries()) { - const implDef = impls.get(name); - if (original_name && name !== original_name) { - dts += indentLines(`export type ${original_name} = ${name}\n`, nest); - } - const maybeDeclare = nested ? ' ' : ' declare '; - dts += indentLines(`${js_doc}export${maybeDeclare}class ${name} {`, nest); - if (def) { - dts += '\n' + indentLines(def, nest + 2); - } - if (implDef) { - dts += '\n' + indentLines(implDef, nest + 2); - } - if (def || implDef) { - dts += '\n'; - } - else { - dts += ` `; - } - dts += indentLines(`}`, nest) + '\n'; - } - return dts; - } - const topLevelDef = convertDefs(allDefs.filter((def) => !def.js_mod)); - const namespaceDefs = Object.entries(groupBy$3(allDefs.filter((def) => def.js_mod), 'js_mod')).reduce((acc, [mod, defs]) => { - idents.push(mod); - return (acc + `export declare namespace ${mod} {\n${convertDefs(defs, true)}}\n`); - }, ''); - const dtsHeader = noDtsHeader - ? '' - : `/* tslint:disable */ -/* eslint-disable */ - -/* auto-generated by NAPI-RS */\n -`; - const externalDef = topLevelDef.indexOf('ExternalObject<') > -1 || - namespaceDefs.indexOf('ExternalObject<') > -1 - ? `export declare class ExternalObject { - readonly '': { - readonly '': unique symbol - [K: symbol]: T - } -}\n` - : ''; - yield writeFileAsync(target, dtsHeader + externalDef + topLevelDef + namespaceDefs, 'utf8'); - return idents; - }); -} -function indentLines(input, spaces) { - return input - .split('\n') - .map((line) => ''.padEnd(spaces, ' ') + - (line.startsWith(' *') ? line.trimEnd() : line.trim())) - .join('\n'); -} -function writeJsBinding(localName, packageName, distFileName, idents) { - return __awaiter$1(this, void 0, void 0, function* () { - if (distFileName && idents.length) { - const template = createJsBinding(localName, packageName); - const declareCodes = `const { ${idents.join(', ')} } = nativeBinding\n`; - const exportsCode = idents.reduce((acc, cur) => `${acc}\nmodule.exports.${cur} = ${cur}`, ''); - yield writeFileAsync(distFileName, template + declareCodes + exportsCode + '\n', 'utf8'); - } - }); -} -function patchArmFeaturesHForArmTargets() { - return __awaiter$1(this, void 0, void 0, function* () { - let zigExePath; - let zigLibDir; - try { - const zigEnv = JSON.parse(require$$1$1.execSync(`zig env`, { encoding: 'utf8' }).trim()); - zigExePath = zigEnv['zig_exe']; - zigLibDir = zigEnv['lib_dir']; - } - catch (e) { - throw new Error('Cannot get zig env correctly, please ensure the zig is installed correctly on your system'); - } - try { - const p = zigLibDir - ? path$1.join(zigLibDir, 'libc/glibc/sysdeps/arm/arm-features.h') - : path$1.join(zigExePath, '../lib/libc/glibc/sysdeps/arm/arm-features.h'); - if (!require$$0$2.existsSync(p)) { - yield writeFileAsync(p, ARM_FEATURES_H, { - mode: 0o644, - }); - } - } - catch (e) { - console.error(Error(`Cannot patch arm-features.h, error: ${e.message || e}. See: https://github.com/ziglang/zig/issues/3287`)); - } - }); -} - -var _a; -const debug$7 = debugFactory('create-npm-dir'); -class CreateNpmDirCommand extends Command { - constructor() { - super(...arguments); - this.targetDir = String$1('-t,--target'); - this.config = String$1('-c,--config', 'package.json'); - } - execute() { - return __awaiter$1(this, void 0, void 0, function* () { - yield _a.create(this.config, path$1.join(process.cwd(), this.targetDir), process.cwd()); - }); - } -} -_a = CreateNpmDirCommand; -CreateNpmDirCommand.usage = Command.Usage({ - description: 'Create npm packages dir for platforms', -}); -CreateNpmDirCommand.paths = [['create-npm-dir']]; -CreateNpmDirCommand.create = (config, targetDirPath, cwd) => __awaiter$1(void 0, void 0, void 0, function* () { - const pkgJsonDir = config; - debug$7(`Read content from [${yellowBright(pkgJsonDir)}]`); - const { platforms, packageName, version, binaryName, content } = getNapiConfig(pkgJsonDir, cwd); - for (const platformDetail of platforms) { - const targetDir = path$1.join(targetDirPath, 'npm', `${platformDetail.platformArchABI}`); - require$$0$2.mkdirSync(targetDir, { - recursive: true, - }); - const binaryFileName = `${binaryName}.${platformDetail.platformArchABI}.node`; - const targetPackageJson = path$1.join(targetDir, 'package.json'); - debug$7(`Write file [${yellowBright(targetPackageJson)}]`); - const packageJson = Object.assign({ name: `${packageName}-${platformDetail.platformArchABI}`, version, os: [platformDetail.platform], cpu: platformDetail.arch !== 'universal' - ? [platformDetail.arch] - : undefined, main: binaryFileName, files: [binaryFileName] }, pick(content, 'description', 'keywords', 'author', 'authors', 'homepage', 'license', 'engines', 'publishConfig', 'repository', 'bugs')); - // Only works with yarn 3.1+ - // https://github.com/yarnpkg/berry/pull/3981 - if (platformDetail.abi === 'gnu') { - packageJson.libc = ['glibc']; - } - else if (platformDetail.abi === 'musl') { - packageJson.libc = ['musl']; - } - yield writeFileAsync(targetPackageJson, JSON.stringify(packageJson, null, 2)); - const targetReadme = path$1.join(targetDir, 'README.md'); - debug$7(`Write target README.md [${yellowBright(targetReadme)}]`); - yield writeFileAsync(targetReadme, readme(packageName, platformDetail)); - } -}); -function readme(packageName, platformDetail) { - return `# \`${packageName}-${platformDetail.platformArchABI}\` - -This is the **${platformDetail.raw}** binary for \`${packageName}\` -`; -} - -/** - * A command that prints the usage of all commands. - * - * Paths: `-h`, `--help` - */ -class HelpCommand extends Command { - execute() { - return __awaiter$1(this, void 0, void 0, function* () { - yield this.context.stdout.write(this.cli.usage()); - }); - } -} -HelpCommand.paths = [[`-h`], [`--help`]]; - -var ansiEscapes$1 = {exports: {}}; - -(function (module) { - const ansiEscapes = module.exports; - // TODO: remove this in the next major version - module.exports.default = ansiEscapes; - - const ESC = '\u001B['; - const OSC = '\u001B]'; - const BEL = '\u0007'; - const SEP = ';'; - const isTerminalApp = process.env.TERM_PROGRAM === 'Apple_Terminal'; - - ansiEscapes.cursorTo = (x, y) => { - if (typeof x !== 'number') { - throw new TypeError('The `x` argument is required'); - } - - if (typeof y !== 'number') { - return ESC + (x + 1) + 'G'; - } - - return ESC + (y + 1) + ';' + (x + 1) + 'H'; - }; - - ansiEscapes.cursorMove = (x, y) => { - if (typeof x !== 'number') { - throw new TypeError('The `x` argument is required'); - } - - let ret = ''; - - if (x < 0) { - ret += ESC + (-x) + 'D'; - } else if (x > 0) { - ret += ESC + x + 'C'; - } - - if (y < 0) { - ret += ESC + (-y) + 'A'; - } else if (y > 0) { - ret += ESC + y + 'B'; - } - - return ret; - }; - - ansiEscapes.cursorUp = (count = 1) => ESC + count + 'A'; - ansiEscapes.cursorDown = (count = 1) => ESC + count + 'B'; - ansiEscapes.cursorForward = (count = 1) => ESC + count + 'C'; - ansiEscapes.cursorBackward = (count = 1) => ESC + count + 'D'; - - ansiEscapes.cursorLeft = ESC + 'G'; - ansiEscapes.cursorSavePosition = isTerminalApp ? '\u001B7' : ESC + 's'; - ansiEscapes.cursorRestorePosition = isTerminalApp ? '\u001B8' : ESC + 'u'; - ansiEscapes.cursorGetPosition = ESC + '6n'; - ansiEscapes.cursorNextLine = ESC + 'E'; - ansiEscapes.cursorPrevLine = ESC + 'F'; - ansiEscapes.cursorHide = ESC + '?25l'; - ansiEscapes.cursorShow = ESC + '?25h'; - - ansiEscapes.eraseLines = count => { - let clear = ''; - - for (let i = 0; i < count; i++) { - clear += ansiEscapes.eraseLine + (i < count - 1 ? ansiEscapes.cursorUp() : ''); - } - - if (count) { - clear += ansiEscapes.cursorLeft; - } - - return clear; - }; - - ansiEscapes.eraseEndLine = ESC + 'K'; - ansiEscapes.eraseStartLine = ESC + '1K'; - ansiEscapes.eraseLine = ESC + '2K'; - ansiEscapes.eraseDown = ESC + 'J'; - ansiEscapes.eraseUp = ESC + '1J'; - ansiEscapes.eraseScreen = ESC + '2J'; - ansiEscapes.scrollUp = ESC + 'S'; - ansiEscapes.scrollDown = ESC + 'T'; - - ansiEscapes.clearScreen = '\u001Bc'; - - ansiEscapes.clearTerminal = process.platform === 'win32' ? - `${ansiEscapes.eraseScreen}${ESC}0f` : - // 1. Erases the screen (Only done in case `2` is not supported) - // 2. Erases the whole screen including scrollback buffer - // 3. Moves cursor to the top-left position - // More info: https://www.real-world-systems.com/docs/ANSIcode.html - `${ansiEscapes.eraseScreen}${ESC}3J${ESC}H`; - - ansiEscapes.beep = BEL; - - ansiEscapes.link = (text, url) => { - return [ - OSC, - '8', - SEP, - SEP, - url, - BEL, - text, - OSC, - '8', - SEP, - SEP, - BEL - ].join(''); - }; - - ansiEscapes.image = (buffer, options = {}) => { - let ret = `${OSC}1337;File=inline=1`; - - if (options.width) { - ret += `;width=${options.width}`; - } - - if (options.height) { - ret += `;height=${options.height}`; - } - - if (options.preserveAspectRatio === false) { - ret += ';preserveAspectRatio=0'; - } - - return ret + ':' + buffer.toString('base64') + BEL; - }; - - ansiEscapes.iTerm = { - setCwd: (cwd = process.cwd()) => `${OSC}50;CurrentDir=${cwd}${BEL}`, - - annotation: (message, options = {}) => { - let ret = `${OSC}1337;`; - - const hasX = typeof options.x !== 'undefined'; - const hasY = typeof options.y !== 'undefined'; - if ((hasX || hasY) && !(hasX && hasY && typeof options.length !== 'undefined')) { - throw new Error('`x`, `y` and `length` must be defined when `x` or `y` is defined'); - } - - message = message.replace(/\|/g, ''); - - ret += options.isHidden ? 'AddHiddenAnnotation=' : 'AddAnnotation='; - - if (options.length > 0) { - ret += - (hasX ? - [message, options.length, options.x, options.y] : - [options.length, message]).join('|'); - } else { - ret += message; - } - - return ret + BEL; - } - }; -} (ansiEscapes$1)); - -var ansiEscapesExports = ansiEscapes$1.exports; -var ansiEscapes = /*@__PURE__*/getDefaultExportFromCjs(ansiEscapesExports); - -const tty = tty$1; - -// eslint-disable-next-line no-warning-comments -// TODO: Use a better method when it's added to Node.js (https://github.com/nodejs/node/pull/40240) -const hasColors = tty.WriteStream.prototype.hasColors(); - -const format = (open, close) => { - if (!hasColors) { - return input => input; - } - - const openCode = `\u001B[${open}m`; - const closeCode = `\u001B[${close}m`; - - return input => { - const string = input + ''; // eslint-disable-line no-implicit-coercion -- This is faster. - let index = string.indexOf(closeCode); - - if (index === -1) { - // Note: Intentionally not using string interpolation for performance reasons. - return openCode + string + closeCode; - } - - // Handle nested colors. - - // We could have done this, but it's too slow (as of Node.js 22). - // return openCode + string.replaceAll(closeCode, openCode) + closeCode; - - let result = openCode; - let lastIndex = 0; - - while (index !== -1) { - result += string.slice(lastIndex, index) + openCode; - lastIndex = index + closeCode.length; - index = string.indexOf(closeCode, lastIndex); - } - - result += string.slice(lastIndex) + closeCode; - - return result; - }; -}; - -const colors = {}; - -colors.reset = format(0, 0); -colors.bold = format(1, 22); -colors.dim = format(2, 22); -colors.italic = format(3, 23); -colors.underline = format(4, 24); -colors.overline = format(53, 55); -colors.inverse = format(7, 27); -colors.hidden = format(8, 28); -colors.strikethrough = format(9, 29); - -colors.black = format(30, 39); -colors.red = format(31, 39); -colors.green = format(32, 39); -colors.yellow = format(33, 39); -colors.blue = format(34, 39); -colors.magenta = format(35, 39); -colors.cyan = format(36, 39); -colors.white = format(37, 39); -colors.gray = format(90, 39); - -colors.bgBlack = format(40, 49); -colors.bgRed = format(41, 49); -colors.bgGreen = format(42, 49); -colors.bgYellow = format(43, 49); -colors.bgBlue = format(44, 49); -colors.bgMagenta = format(45, 49); -colors.bgCyan = format(46, 49); -colors.bgWhite = format(47, 49); -colors.bgGray = format(100, 49); - -colors.redBright = format(91, 39); -colors.greenBright = format(92, 39); -colors.yellowBright = format(93, 39); -colors.blueBright = format(94, 39); -colors.magentaBright = format(95, 39); -colors.cyanBright = format(96, 39); -colors.whiteBright = format(97, 39); - -colors.bgRedBright = format(101, 49); -colors.bgGreenBright = format(102, 49); -colors.bgYellowBright = format(103, 49); -colors.bgBlueBright = format(104, 49); -colors.bgMagentaBright = format(105, 49); -colors.bgCyanBright = format(106, 49); -colors.bgWhiteBright = format(107, 49); - -var yoctocolorsCjs = colors; - -var colors$1 = /*@__PURE__*/getDefaultExportFromCjs(yoctocolorsCjs); - -// process.env dot-notation access prints: -// Property 'TERM' comes from an index signature, so it must be accessed with ['TERM'].ts(4111) -/* eslint dot-notation: ["off"] */ -// Ported from is-unicode-supported -function isUnicodeSupported$3() { - if (process$4.platform !== 'win32') { - return process$4.env['TERM'] !== 'linux'; // Linux console (kernel) - } - return (Boolean(process$4.env['WT_SESSION']) || // Windows Terminal - Boolean(process$4.env['TERMINUS_SUBLIME']) || // Terminus (<0.2.27) - process$4.env['ConEmuTask'] === '{cmd::Cmder}' || // ConEmu and cmder - process$4.env['TERM_PROGRAM'] === 'Terminus-Sublime' || - process$4.env['TERM_PROGRAM'] === 'vscode' || - process$4.env['TERM'] === 'xterm-256color' || - process$4.env['TERM'] === 'alacritty' || - process$4.env['TERMINAL_EMULATOR'] === 'JetBrains-JediTerm'); -} -// Ported from figures -const common$1 = { - circleQuestionMark: '(?)', - questionMarkPrefix: '(?)', - square: '█', - squareDarkShade: '▓', - squareMediumShade: '▒', - squareLightShade: '░', - squareTop: '▀', - squareBottom: '▄', - squareLeft: '▌', - squareRight: '▐', - squareCenter: '■', - bullet: '●', - dot: '․', - ellipsis: '…', - pointerSmall: '›', - triangleUp: '▲', - triangleUpSmall: '▴', - triangleDown: '▼', - triangleDownSmall: '▾', - triangleLeftSmall: '◂', - triangleRightSmall: '▸', - home: '⌂', - heart: '♥', - musicNote: '♪', - musicNoteBeamed: '♫', - arrowUp: '↑', - arrowDown: '↓', - arrowLeft: '←', - arrowRight: '→', - arrowLeftRight: '↔', - arrowUpDown: '↕', - almostEqual: '≈', - notEqual: '≠', - lessOrEqual: '≤', - greaterOrEqual: '≥', - identical: '≡', - infinity: '∞', - subscriptZero: '₀', - subscriptOne: '₁', - subscriptTwo: '₂', - subscriptThree: '₃', - subscriptFour: '₄', - subscriptFive: '₅', - subscriptSix: '₆', - subscriptSeven: '₇', - subscriptEight: '₈', - subscriptNine: '₉', - oneHalf: '½', - oneThird: '⅓', - oneQuarter: '¼', - oneFifth: '⅕', - oneSixth: '⅙', - oneEighth: '⅛', - twoThirds: '⅔', - twoFifths: '⅖', - threeQuarters: '¾', - threeFifths: '⅗', - threeEighths: '⅜', - fourFifths: '⅘', - fiveSixths: '⅚', - fiveEighths: '⅝', - sevenEighths: '⅞', - line: '─', - lineBold: '━', - lineDouble: '═', - lineDashed0: '┄', - lineDashed1: '┅', - lineDashed2: '┈', - lineDashed3: '┉', - lineDashed4: '╌', - lineDashed5: '╍', - lineDashed6: '╴', - lineDashed7: '╶', - lineDashed8: '╸', - lineDashed9: '╺', - lineDashed10: '╼', - lineDashed11: '╾', - lineDashed12: '−', - lineDashed13: '–', - lineDashed14: '‐', - lineDashed15: '⁃', - lineVertical: '│', - lineVerticalBold: '┃', - lineVerticalDouble: '║', - lineVerticalDashed0: '┆', - lineVerticalDashed1: '┇', - lineVerticalDashed2: '┊', - lineVerticalDashed3: '┋', - lineVerticalDashed4: '╎', - lineVerticalDashed5: '╏', - lineVerticalDashed6: '╵', - lineVerticalDashed7: '╷', - lineVerticalDashed8: '╹', - lineVerticalDashed9: '╻', - lineVerticalDashed10: '╽', - lineVerticalDashed11: '╿', - lineDownLeft: '┐', - lineDownLeftArc: '╮', - lineDownBoldLeftBold: '┓', - lineDownBoldLeft: '┒', - lineDownLeftBold: '┑', - lineDownDoubleLeftDouble: '╗', - lineDownDoubleLeft: '╖', - lineDownLeftDouble: '╕', - lineDownRight: '┌', - lineDownRightArc: '╭', - lineDownBoldRightBold: '┏', - lineDownBoldRight: '┎', - lineDownRightBold: '┍', - lineDownDoubleRightDouble: '╔', - lineDownDoubleRight: '╓', - lineDownRightDouble: '╒', - lineUpLeft: '┘', - lineUpLeftArc: '╯', - lineUpBoldLeftBold: '┛', - lineUpBoldLeft: '┚', - lineUpLeftBold: '┙', - lineUpDoubleLeftDouble: '╝', - lineUpDoubleLeft: '╜', - lineUpLeftDouble: '╛', - lineUpRight: '└', - lineUpRightArc: '╰', - lineUpBoldRightBold: '┗', - lineUpBoldRight: '┖', - lineUpRightBold: '┕', - lineUpDoubleRightDouble: '╚', - lineUpDoubleRight: '╙', - lineUpRightDouble: '╘', - lineUpDownLeft: '┤', - lineUpBoldDownBoldLeftBold: '┫', - lineUpBoldDownBoldLeft: '┨', - lineUpDownLeftBold: '┥', - lineUpBoldDownLeftBold: '┩', - lineUpDownBoldLeftBold: '┪', - lineUpDownBoldLeft: '┧', - lineUpBoldDownLeft: '┦', - lineUpDoubleDownDoubleLeftDouble: '╣', - lineUpDoubleDownDoubleLeft: '╢', - lineUpDownLeftDouble: '╡', - lineUpDownRight: '├', - lineUpBoldDownBoldRightBold: '┣', - lineUpBoldDownBoldRight: '┠', - lineUpDownRightBold: '┝', - lineUpBoldDownRightBold: '┡', - lineUpDownBoldRightBold: '┢', - lineUpDownBoldRight: '┟', - lineUpBoldDownRight: '┞', - lineUpDoubleDownDoubleRightDouble: '╠', - lineUpDoubleDownDoubleRight: '╟', - lineUpDownRightDouble: '╞', - lineDownLeftRight: '┬', - lineDownBoldLeftBoldRightBold: '┳', - lineDownLeftBoldRightBold: '┯', - lineDownBoldLeftRight: '┰', - lineDownBoldLeftBoldRight: '┱', - lineDownBoldLeftRightBold: '┲', - lineDownLeftRightBold: '┮', - lineDownLeftBoldRight: '┭', - lineDownDoubleLeftDoubleRightDouble: '╦', - lineDownDoubleLeftRight: '╥', - lineDownLeftDoubleRightDouble: '╤', - lineUpLeftRight: '┴', - lineUpBoldLeftBoldRightBold: '┻', - lineUpLeftBoldRightBold: '┷', - lineUpBoldLeftRight: '┸', - lineUpBoldLeftBoldRight: '┹', - lineUpBoldLeftRightBold: '┺', - lineUpLeftRightBold: '┶', - lineUpLeftBoldRight: '┵', - lineUpDoubleLeftDoubleRightDouble: '╩', - lineUpDoubleLeftRight: '╨', - lineUpLeftDoubleRightDouble: '╧', - lineUpDownLeftRight: '┼', - lineUpBoldDownBoldLeftBoldRightBold: '╋', - lineUpDownBoldLeftBoldRightBold: '╈', - lineUpBoldDownLeftBoldRightBold: '╇', - lineUpBoldDownBoldLeftRightBold: '╊', - lineUpBoldDownBoldLeftBoldRight: '╉', - lineUpBoldDownLeftRight: '╀', - lineUpDownBoldLeftRight: '╁', - lineUpDownLeftBoldRight: '┽', - lineUpDownLeftRightBold: '┾', - lineUpBoldDownBoldLeftRight: '╂', - lineUpDownLeftBoldRightBold: '┿', - lineUpBoldDownLeftBoldRight: '╃', - lineUpBoldDownLeftRightBold: '╄', - lineUpDownBoldLeftBoldRight: '╅', - lineUpDownBoldLeftRightBold: '╆', - lineUpDoubleDownDoubleLeftDoubleRightDouble: '╬', - lineUpDoubleDownDoubleLeftRight: '╫', - lineUpDownLeftDoubleRightDouble: '╪', - lineCross: '╳', - lineBackslash: '╲', - lineSlash: '╱', -}; -const specialMainSymbols = { - tick: '✔', - info: 'ℹ', - warning: '⚠', - cross: '✘', - squareSmall: '◻', - squareSmallFilled: '◼', - circle: '◯', - circleFilled: '◉', - circleDotted: '◌', - circleDouble: '◎', - circleCircle: 'ⓞ', - circleCross: 'ⓧ', - circlePipe: 'Ⓘ', - radioOn: '◉', - radioOff: '◯', - checkboxOn: '☒', - checkboxOff: '☐', - checkboxCircleOn: 'ⓧ', - checkboxCircleOff: 'Ⓘ', - pointer: '❯', - triangleUpOutline: '△', - triangleLeft: '◀', - triangleRight: '▶', - lozenge: '◆', - lozengeOutline: '◇', - hamburger: '☰', - smiley: '㋡', - mustache: '෴', - star: '★', - play: '▶', - nodejs: '⬢', - oneSeventh: '⅐', - oneNinth: '⅑', - oneTenth: '⅒', -}; -const specialFallbackSymbols = { - tick: '√', - info: 'i', - warning: '‼', - cross: '×', - squareSmall: '□', - squareSmallFilled: '■', - circle: '( )', - circleFilled: '(*)', - circleDotted: '( )', - circleDouble: '( )', - circleCircle: '(○)', - circleCross: '(×)', - circlePipe: '(│)', - radioOn: '(*)', - radioOff: '( )', - checkboxOn: '[×]', - checkboxOff: '[ ]', - checkboxCircleOn: '(×)', - checkboxCircleOff: '( )', - pointer: '>', - triangleUpOutline: '∆', - triangleLeft: '◄', - triangleRight: '►', - lozenge: '♦', - lozengeOutline: '◊', - hamburger: '≡', - smiley: '☺', - mustache: '┌─┐', - star: '✶', - play: '►', - nodejs: '♦', - oneSeventh: '1/7', - oneNinth: '1/9', - oneTenth: '1/10', -}; -const mainSymbols = { ...common$1, ...specialMainSymbols }; -const fallbackSymbols = { - ...common$1, - ...specialFallbackSymbols, -}; -const shouldUseMain = isUnicodeSupported$3(); -const figures = shouldUseMain ? mainSymbols : fallbackSymbols; - -var runAsync$2 = {exports: {}}; - -function isPromise$2(obj) { - return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function'; -} - -/** - * Return a function that will run a function asynchronously or synchronously - * - * example: - * runAsync(wrappedFunction, callback)(...args); - * - * @param {Function} func Function to run - * @param {Function} [cb] Callback function passed the `func` returned value - * @param {string} [proxyProperty] `this` property to be used for the callback factory - * @return {Function(arguments)} Arguments to pass to `func`. This function will in turn - * return a Promise (Node >= 0.12) or call the callbacks. - */ - -var runAsync = runAsync$2.exports = function (func, cb, proxyProperty = 'async') { - if (typeof cb === 'string') { - proxyProperty = cb; - cb = undefined; - } - cb = cb || function () {}; - - return function () { - - var args = arguments; - var originalThis = this; - - var promise = new Promise(function (resolve, reject) { - var resolved = false; - const wrappedResolve = function (value) { - if (resolved) { - console.warn('Run-async promise already resolved.'); - } - resolved = true; - resolve(value); - }; - - var rejected = false; - const wrappedReject = function (value) { - if (rejected) { - console.warn('Run-async promise already rejected.'); - } - rejected = true; - reject(value); - }; - - var usingCallback = false; - var callbackConflict = false; - var contextEnded = false; - - var doneFactory = function () { - if (contextEnded) { - console.warn('Run-async async() called outside a valid run-async context, callback will be ignored.'); - return function() {}; - } - if (callbackConflict) { - console.warn('Run-async wrapped function (async) returned a promise.\nCalls to async() callback can have unexpected results.'); - } - usingCallback = true; - return function (err, value) { - if (err) { - wrappedReject(err); - } else { - wrappedResolve(value); - } - }; - }; - - var _this; - if (originalThis && proxyProperty && Proxy) { - _this = new Proxy(originalThis, { - get(_target, prop) { - if (prop === proxyProperty) { - if (prop in _target) { - console.warn(`${proxyProperty} property is been shadowed by run-sync`); - } - return doneFactory; - } - - return Reflect.get(...arguments); - }, - }); - } else { - _this = { [proxyProperty]: doneFactory }; - } - - var answer = func.apply(_this, Array.prototype.slice.call(args)); - - if (usingCallback) { - if (isPromise$2(answer)) { - console.warn('Run-async wrapped function (sync) returned a promise but async() callback must be executed to resolve.'); - } - } else { - if (isPromise$2(answer)) { - callbackConflict = true; - answer.then(wrappedResolve, wrappedReject); - } else { - wrappedResolve(answer); - } - } - contextEnded = true; - }); - - promise.then(cb.bind(null, null), cb); - - return promise; - } -}; - -runAsync.cb = function (func, cb) { - return runAsync(function () { - var args = Array.prototype.slice.call(arguments); - if (args.length === func.length - 1) { - args.push(this.async()); - } - return func.apply(this, args); - }, cb); -}; - -var runAsyncExports = runAsync$2.exports; -var runAsync$1 = /*@__PURE__*/getDefaultExportFromCjs(runAsyncExports); - -var cjs = {}; - -var Observable$1 = {}; - -var Subscriber = {}; - -var isFunction$1 = {}; - -Object.defineProperty(isFunction$1, "__esModule", { value: true }); -isFunction$1.isFunction = void 0; -function isFunction(value) { - return typeof value === 'function'; -} -isFunction$1.isFunction = isFunction; - -var Subscription$1 = {}; - -var UnsubscriptionError = {}; - -var createErrorClass$1 = {}; - -Object.defineProperty(createErrorClass$1, "__esModule", { value: true }); -createErrorClass$1.createErrorClass = void 0; -function createErrorClass(createImpl) { - var _super = function (instance) { - Error.call(instance); - instance.stack = new Error().stack; - }; - var ctorFunc = createImpl(_super); - ctorFunc.prototype = Object.create(Error.prototype); - ctorFunc.prototype.constructor = ctorFunc; - return ctorFunc; -} -createErrorClass$1.createErrorClass = createErrorClass; - -Object.defineProperty(UnsubscriptionError, "__esModule", { value: true }); -UnsubscriptionError.UnsubscriptionError = void 0; -var createErrorClass_1$5 = createErrorClass$1; -UnsubscriptionError.UnsubscriptionError = createErrorClass_1$5.createErrorClass(function (_super) { - return function UnsubscriptionErrorImpl(errors) { - _super(this); - this.message = errors - ? errors.length + " errors occurred during unsubscription:\n" + errors.map(function (err, i) { return i + 1 + ") " + err.toString(); }).join('\n ') - : ''; - this.name = 'UnsubscriptionError'; - this.errors = errors; - }; -}); - -var arrRemove$1 = {}; - -Object.defineProperty(arrRemove$1, "__esModule", { value: true }); -arrRemove$1.arrRemove = void 0; -function arrRemove(arr, item) { - if (arr) { - var index = arr.indexOf(item); - 0 <= index && arr.splice(index, 1); - } -} -arrRemove$1.arrRemove = arrRemove; - -var __values$8 = (commonjsGlobal && commonjsGlobal.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -var __read$h = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -var __spreadArray$g = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { - for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) - to[j] = from[i]; - return to; -}; -Object.defineProperty(Subscription$1, "__esModule", { value: true }); -Subscription$1.isSubscription = Subscription$1.EMPTY_SUBSCRIPTION = Subscription$1.Subscription = void 0; -var isFunction_1$p = isFunction$1; -var UnsubscriptionError_1 = UnsubscriptionError; -var arrRemove_1$7 = arrRemove$1; -var Subscription = (function () { - function Subscription(initialTeardown) { - this.initialTeardown = initialTeardown; - this.closed = false; - this._parentage = null; - this._finalizers = null; - } - Subscription.prototype.unsubscribe = function () { - var e_1, _a, e_2, _b; - var errors; - if (!this.closed) { - this.closed = true; - var _parentage = this._parentage; - if (_parentage) { - this._parentage = null; - if (Array.isArray(_parentage)) { - try { - for (var _parentage_1 = __values$8(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) { - var parent_1 = _parentage_1_1.value; - parent_1.remove(this); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return)) _a.call(_parentage_1); - } - finally { if (e_1) throw e_1.error; } - } - } - else { - _parentage.remove(this); - } - } - var initialFinalizer = this.initialTeardown; - if (isFunction_1$p.isFunction(initialFinalizer)) { - try { - initialFinalizer(); - } - catch (e) { - errors = e instanceof UnsubscriptionError_1.UnsubscriptionError ? e.errors : [e]; - } - } - var _finalizers = this._finalizers; - if (_finalizers) { - this._finalizers = null; - try { - for (var _finalizers_1 = __values$8(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) { - var finalizer = _finalizers_1_1.value; - try { - execFinalizer(finalizer); - } - catch (err) { - errors = errors !== null && errors !== void 0 ? errors : []; - if (err instanceof UnsubscriptionError_1.UnsubscriptionError) { - errors = __spreadArray$g(__spreadArray$g([], __read$h(errors)), __read$h(err.errors)); - } - else { - errors.push(err); - } - } - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return)) _b.call(_finalizers_1); - } - finally { if (e_2) throw e_2.error; } - } - } - if (errors) { - throw new UnsubscriptionError_1.UnsubscriptionError(errors); - } - } - }; - Subscription.prototype.add = function (teardown) { - var _a; - if (teardown && teardown !== this) { - if (this.closed) { - execFinalizer(teardown); - } - else { - if (teardown instanceof Subscription) { - if (teardown.closed || teardown._hasParent(this)) { - return; - } - teardown._addParent(this); - } - (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown); - } - } - }; - Subscription.prototype._hasParent = function (parent) { - var _parentage = this._parentage; - return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent)); - }; - Subscription.prototype._addParent = function (parent) { - var _parentage = this._parentage; - this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent; - }; - Subscription.prototype._removeParent = function (parent) { - var _parentage = this._parentage; - if (_parentage === parent) { - this._parentage = null; - } - else if (Array.isArray(_parentage)) { - arrRemove_1$7.arrRemove(_parentage, parent); - } - }; - Subscription.prototype.remove = function (teardown) { - var _finalizers = this._finalizers; - _finalizers && arrRemove_1$7.arrRemove(_finalizers, teardown); - if (teardown instanceof Subscription) { - teardown._removeParent(this); - } - }; - Subscription.EMPTY = (function () { - var empty = new Subscription(); - empty.closed = true; - return empty; - })(); - return Subscription; -}()); -Subscription$1.Subscription = Subscription; -Subscription$1.EMPTY_SUBSCRIPTION = Subscription.EMPTY; -function isSubscription(value) { - return (value instanceof Subscription || - (value && 'closed' in value && isFunction_1$p.isFunction(value.remove) && isFunction_1$p.isFunction(value.add) && isFunction_1$p.isFunction(value.unsubscribe))); -} -Subscription$1.isSubscription = isSubscription; -function execFinalizer(finalizer) { - if (isFunction_1$p.isFunction(finalizer)) { - finalizer(); - } - else { - finalizer.unsubscribe(); - } -} - -var config = {}; - -Object.defineProperty(config, "__esModule", { value: true }); -config.config = void 0; -config.config = { - onUnhandledError: null, - onStoppedNotification: null, - Promise: undefined, - useDeprecatedSynchronousErrorHandling: false, - useDeprecatedNextContext: false, -}; - -var reportUnhandledError$1 = {}; - -var timeoutProvider = {}; - -(function (exports) { - var __read = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; - }; - var __spreadArray = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { - for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) - to[j] = from[i]; - return to; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.timeoutProvider = void 0; - exports.timeoutProvider = { - setTimeout: function (handler, timeout) { - var args = []; - for (var _i = 2; _i < arguments.length; _i++) { - args[_i - 2] = arguments[_i]; - } - var delegate = exports.timeoutProvider.delegate; - if (delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) { - return delegate.setTimeout.apply(delegate, __spreadArray([handler, timeout], __read(args))); - } - return setTimeout.apply(void 0, __spreadArray([handler, timeout], __read(args))); - }, - clearTimeout: function (handle) { - var delegate = exports.timeoutProvider.delegate; - return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle); - }, - delegate: undefined, - }; - -} (timeoutProvider)); - -Object.defineProperty(reportUnhandledError$1, "__esModule", { value: true }); -reportUnhandledError$1.reportUnhandledError = void 0; -var config_1$2 = config; -var timeoutProvider_1 = timeoutProvider; -function reportUnhandledError(err) { - timeoutProvider_1.timeoutProvider.setTimeout(function () { - var onUnhandledError = config_1$2.config.onUnhandledError; - if (onUnhandledError) { - onUnhandledError(err); - } - else { - throw err; - } - }); -} -reportUnhandledError$1.reportUnhandledError = reportUnhandledError; - -var noop$2 = {}; - -Object.defineProperty(noop$2, "__esModule", { value: true }); -noop$2.noop = void 0; -function noop$1() { } -noop$2.noop = noop$1; - -var NotificationFactories = {}; - -Object.defineProperty(NotificationFactories, "__esModule", { value: true }); -NotificationFactories.createNotification = NotificationFactories.nextNotification = NotificationFactories.errorNotification = NotificationFactories.COMPLETE_NOTIFICATION = void 0; -NotificationFactories.COMPLETE_NOTIFICATION = (function () { return createNotification('C', undefined, undefined); })(); -function errorNotification(error) { - return createNotification('E', undefined, error); -} -NotificationFactories.errorNotification = errorNotification; -function nextNotification(value) { - return createNotification('N', value, undefined); -} -NotificationFactories.nextNotification = nextNotification; -function createNotification(kind, value, error) { - return { - kind: kind, - value: value, - error: error, - }; -} -NotificationFactories.createNotification = createNotification; - -var errorContext$1 = {}; - -Object.defineProperty(errorContext$1, "__esModule", { value: true }); -errorContext$1.captureError = errorContext$1.errorContext = void 0; -var config_1$1 = config; -var context = null; -function errorContext(cb) { - if (config_1$1.config.useDeprecatedSynchronousErrorHandling) { - var isRoot = !context; - if (isRoot) { - context = { errorThrown: false, error: null }; - } - cb(); - if (isRoot) { - var _a = context, errorThrown = _a.errorThrown, error = _a.error; - context = null; - if (errorThrown) { - throw error; - } - } - } - else { - cb(); - } -} -errorContext$1.errorContext = errorContext; -function captureError(err) { - if (config_1$1.config.useDeprecatedSynchronousErrorHandling && context) { - context.errorThrown = true; - context.error = err; - } -} -errorContext$1.captureError = captureError; - -(function (exports) { - var __extends = (commonjsGlobal && commonjsGlobal.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; - })(); - Object.defineProperty(exports, "__esModule", { value: true }); - exports.EMPTY_OBSERVER = exports.SafeSubscriber = exports.Subscriber = void 0; - var isFunction_1 = isFunction$1; - var Subscription_1 = Subscription$1; - var config_1 = config; - var reportUnhandledError_1 = reportUnhandledError$1; - var noop_1 = noop$2; - var NotificationFactories_1 = NotificationFactories; - var timeoutProvider_1 = timeoutProvider; - var errorContext_1 = errorContext$1; - var Subscriber = (function (_super) { - __extends(Subscriber, _super); - function Subscriber(destination) { - var _this = _super.call(this) || this; - _this.isStopped = false; - if (destination) { - _this.destination = destination; - if (Subscription_1.isSubscription(destination)) { - destination.add(_this); - } - } - else { - _this.destination = exports.EMPTY_OBSERVER; - } - return _this; - } - Subscriber.create = function (next, error, complete) { - return new SafeSubscriber(next, error, complete); - }; - Subscriber.prototype.next = function (value) { - if (this.isStopped) { - handleStoppedNotification(NotificationFactories_1.nextNotification(value), this); - } - else { - this._next(value); - } - }; - Subscriber.prototype.error = function (err) { - if (this.isStopped) { - handleStoppedNotification(NotificationFactories_1.errorNotification(err), this); - } - else { - this.isStopped = true; - this._error(err); - } - }; - Subscriber.prototype.complete = function () { - if (this.isStopped) { - handleStoppedNotification(NotificationFactories_1.COMPLETE_NOTIFICATION, this); - } - else { - this.isStopped = true; - this._complete(); - } - }; - Subscriber.prototype.unsubscribe = function () { - if (!this.closed) { - this.isStopped = true; - _super.prototype.unsubscribe.call(this); - this.destination = null; - } - }; - Subscriber.prototype._next = function (value) { - this.destination.next(value); - }; - Subscriber.prototype._error = function (err) { - try { - this.destination.error(err); - } - finally { - this.unsubscribe(); - } - }; - Subscriber.prototype._complete = function () { - try { - this.destination.complete(); - } - finally { - this.unsubscribe(); - } - }; - return Subscriber; - }(Subscription_1.Subscription)); - exports.Subscriber = Subscriber; - var _bind = Function.prototype.bind; - function bind(fn, thisArg) { - return _bind.call(fn, thisArg); - } - var ConsumerObserver = (function () { - function ConsumerObserver(partialObserver) { - this.partialObserver = partialObserver; - } - ConsumerObserver.prototype.next = function (value) { - var partialObserver = this.partialObserver; - if (partialObserver.next) { - try { - partialObserver.next(value); - } - catch (error) { - handleUnhandledError(error); - } - } - }; - ConsumerObserver.prototype.error = function (err) { - var partialObserver = this.partialObserver; - if (partialObserver.error) { - try { - partialObserver.error(err); - } - catch (error) { - handleUnhandledError(error); - } - } - else { - handleUnhandledError(err); - } - }; - ConsumerObserver.prototype.complete = function () { - var partialObserver = this.partialObserver; - if (partialObserver.complete) { - try { - partialObserver.complete(); - } - catch (error) { - handleUnhandledError(error); - } - } - }; - return ConsumerObserver; - }()); - var SafeSubscriber = (function (_super) { - __extends(SafeSubscriber, _super); - function SafeSubscriber(observerOrNext, error, complete) { - var _this = _super.call(this) || this; - var partialObserver; - if (isFunction_1.isFunction(observerOrNext) || !observerOrNext) { - partialObserver = { - next: (observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : undefined), - error: error !== null && error !== void 0 ? error : undefined, - complete: complete !== null && complete !== void 0 ? complete : undefined, - }; - } - else { - var context_1; - if (_this && config_1.config.useDeprecatedNextContext) { - context_1 = Object.create(observerOrNext); - context_1.unsubscribe = function () { return _this.unsubscribe(); }; - partialObserver = { - next: observerOrNext.next && bind(observerOrNext.next, context_1), - error: observerOrNext.error && bind(observerOrNext.error, context_1), - complete: observerOrNext.complete && bind(observerOrNext.complete, context_1), - }; - } - else { - partialObserver = observerOrNext; - } - } - _this.destination = new ConsumerObserver(partialObserver); - return _this; - } - return SafeSubscriber; - }(Subscriber)); - exports.SafeSubscriber = SafeSubscriber; - function handleUnhandledError(error) { - if (config_1.config.useDeprecatedSynchronousErrorHandling) { - errorContext_1.captureError(error); - } - else { - reportUnhandledError_1.reportUnhandledError(error); - } - } - function defaultErrorHandler(err) { - throw err; - } - function handleStoppedNotification(notification, subscriber) { - var onStoppedNotification = config_1.config.onStoppedNotification; - onStoppedNotification && timeoutProvider_1.timeoutProvider.setTimeout(function () { return onStoppedNotification(notification, subscriber); }); - } - exports.EMPTY_OBSERVER = { - closed: true, - next: noop_1.noop, - error: defaultErrorHandler, - complete: noop_1.noop, - }; - -} (Subscriber)); - -var observable = {}; - -Object.defineProperty(observable, "__esModule", { value: true }); -observable.observable = void 0; -observable.observable = (function () { return (typeof Symbol === 'function' && Symbol.observable) || '@@observable'; })(); - -var pipe$2 = {}; - -var identity$1 = {}; - -Object.defineProperty(identity$1, "__esModule", { value: true }); -identity$1.identity = void 0; -function identity(x) { - return x; -} -identity$1.identity = identity; - -Object.defineProperty(pipe$2, "__esModule", { value: true }); -pipe$2.pipeFromArray = pipe$2.pipe = void 0; -var identity_1$e = identity$1; -function pipe$1() { - var fns = []; - for (var _i = 0; _i < arguments.length; _i++) { - fns[_i] = arguments[_i]; - } - return pipeFromArray(fns); -} -pipe$2.pipe = pipe$1; -function pipeFromArray(fns) { - if (fns.length === 0) { - return identity_1$e.identity; - } - if (fns.length === 1) { - return fns[0]; - } - return function piped(input) { - return fns.reduce(function (prev, fn) { return fn(prev); }, input); - }; -} -pipe$2.pipeFromArray = pipeFromArray; - -Object.defineProperty(Observable$1, "__esModule", { value: true }); -Observable$1.Observable = void 0; -var Subscriber_1$3 = Subscriber; -var Subscription_1$8 = Subscription$1; -var observable_1$2 = observable; -var pipe_1$2 = pipe$2; -var config_1 = config; -var isFunction_1$o = isFunction$1; -var errorContext_1$1 = errorContext$1; -var Observable = (function () { - function Observable(subscribe) { - if (subscribe) { - this._subscribe = subscribe; - } - } - Observable.prototype.lift = function (operator) { - var observable = new Observable(); - observable.source = this; - observable.operator = operator; - return observable; - }; - Observable.prototype.subscribe = function (observerOrNext, error, complete) { - var _this = this; - var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new Subscriber_1$3.SafeSubscriber(observerOrNext, error, complete); - errorContext_1$1.errorContext(function () { - var _a = _this, operator = _a.operator, source = _a.source; - subscriber.add(operator - ? - operator.call(subscriber, source) - : source - ? - _this._subscribe(subscriber) - : - _this._trySubscribe(subscriber)); - }); - return subscriber; - }; - Observable.prototype._trySubscribe = function (sink) { - try { - return this._subscribe(sink); - } - catch (err) { - sink.error(err); - } - }; - Observable.prototype.forEach = function (next, promiseCtor) { - var _this = this; - promiseCtor = getPromiseCtor(promiseCtor); - return new promiseCtor(function (resolve, reject) { - var subscriber = new Subscriber_1$3.SafeSubscriber({ - next: function (value) { - try { - next(value); - } - catch (err) { - reject(err); - subscriber.unsubscribe(); - } - }, - error: reject, - complete: resolve, - }); - _this.subscribe(subscriber); - }); - }; - Observable.prototype._subscribe = function (subscriber) { - var _a; - return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber); - }; - Observable.prototype[observable_1$2.observable] = function () { - return this; - }; - Observable.prototype.pipe = function () { - var operations = []; - for (var _i = 0; _i < arguments.length; _i++) { - operations[_i] = arguments[_i]; - } - return pipe_1$2.pipeFromArray(operations)(this); - }; - Observable.prototype.toPromise = function (promiseCtor) { - var _this = this; - promiseCtor = getPromiseCtor(promiseCtor); - return new promiseCtor(function (resolve, reject) { - var value; - _this.subscribe(function (x) { return (value = x); }, function (err) { return reject(err); }, function () { return resolve(value); }); - }); - }; - Observable.create = function (subscribe) { - return new Observable(subscribe); - }; - return Observable; -}()); -Observable$1.Observable = Observable; -function getPromiseCtor(promiseCtor) { - var _a; - return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config_1.config.Promise) !== null && _a !== void 0 ? _a : Promise; -} -function isObserver(value) { - return value && isFunction_1$o.isFunction(value.next) && isFunction_1$o.isFunction(value.error) && isFunction_1$o.isFunction(value.complete); -} -function isSubscriber(value) { - return (value && value instanceof Subscriber_1$3.Subscriber) || (isObserver(value) && Subscription_1$8.isSubscription(value)); -} - -var ConnectableObservable$1 = {}; - -var refCount$1 = {}; - -var lift = {}; - -Object.defineProperty(lift, "__esModule", { value: true }); -lift.operate = lift.hasLift = void 0; -var isFunction_1$n = isFunction$1; -function hasLift(source) { - return isFunction_1$n.isFunction(source === null || source === void 0 ? void 0 : source.lift); -} -lift.hasLift = hasLift; -function operate(init) { - return function (source) { - if (hasLift(source)) { - return source.lift(function (liftedSource) { - try { - return init(liftedSource, this); - } - catch (err) { - this.error(err); - } - }); - } - throw new TypeError('Unable to lift unknown Observable type'); - }; -} -lift.operate = operate; - -var OperatorSubscriber$1 = {}; - -var __extends$j = (commonjsGlobal && commonjsGlobal.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(OperatorSubscriber$1, "__esModule", { value: true }); -OperatorSubscriber$1.OperatorSubscriber = OperatorSubscriber$1.createOperatorSubscriber = void 0; -var Subscriber_1$2 = Subscriber; -function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) { - return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize); -} -OperatorSubscriber$1.createOperatorSubscriber = createOperatorSubscriber; -var OperatorSubscriber = (function (_super) { - __extends$j(OperatorSubscriber, _super); - function OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) { - var _this = _super.call(this, destination) || this; - _this.onFinalize = onFinalize; - _this.shouldUnsubscribe = shouldUnsubscribe; - _this._next = onNext - ? function (value) { - try { - onNext(value); - } - catch (err) { - destination.error(err); - } - } - : _super.prototype._next; - _this._error = onError - ? function (err) { - try { - onError(err); - } - catch (err) { - destination.error(err); - } - finally { - this.unsubscribe(); - } - } - : _super.prototype._error; - _this._complete = onComplete - ? function () { - try { - onComplete(); - } - catch (err) { - destination.error(err); - } - finally { - this.unsubscribe(); - } - } - : _super.prototype._complete; - return _this; - } - OperatorSubscriber.prototype.unsubscribe = function () { - var _a; - if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) { - var closed_1 = this.closed; - _super.prototype.unsubscribe.call(this); - !closed_1 && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this)); - } - }; - return OperatorSubscriber; -}(Subscriber_1$2.Subscriber)); -OperatorSubscriber$1.OperatorSubscriber = OperatorSubscriber; - -Object.defineProperty(refCount$1, "__esModule", { value: true }); -refCount$1.refCount = void 0; -var lift_1$14 = lift; -var OperatorSubscriber_1$V = OperatorSubscriber$1; -function refCount() { - return lift_1$14.operate(function (source, subscriber) { - var connection = null; - source._refCount++; - var refCounter = OperatorSubscriber_1$V.createOperatorSubscriber(subscriber, undefined, undefined, undefined, function () { - if (!source || source._refCount <= 0 || 0 < --source._refCount) { - connection = null; - return; - } - var sharedConnection = source._connection; - var conn = connection; - connection = null; - if (sharedConnection && (!conn || sharedConnection === conn)) { - sharedConnection.unsubscribe(); - } - subscriber.unsubscribe(); - }); - source.subscribe(refCounter); - if (!refCounter.closed) { - connection = source.connect(); - } - }); -} -refCount$1.refCount = refCount; - -var __extends$i = (commonjsGlobal && commonjsGlobal.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(ConnectableObservable$1, "__esModule", { value: true }); -ConnectableObservable$1.ConnectableObservable = void 0; -var Observable_1$n = Observable$1; -var Subscription_1$7 = Subscription$1; -var refCount_1 = refCount$1; -var OperatorSubscriber_1$U = OperatorSubscriber$1; -var lift_1$13 = lift; -var ConnectableObservable = (function (_super) { - __extends$i(ConnectableObservable, _super); - function ConnectableObservable(source, subjectFactory) { - var _this = _super.call(this) || this; - _this.source = source; - _this.subjectFactory = subjectFactory; - _this._subject = null; - _this._refCount = 0; - _this._connection = null; - if (lift_1$13.hasLift(source)) { - _this.lift = source.lift; - } - return _this; - } - ConnectableObservable.prototype._subscribe = function (subscriber) { - return this.getSubject().subscribe(subscriber); - }; - ConnectableObservable.prototype.getSubject = function () { - var subject = this._subject; - if (!subject || subject.isStopped) { - this._subject = this.subjectFactory(); - } - return this._subject; - }; - ConnectableObservable.prototype._teardown = function () { - this._refCount = 0; - var _connection = this._connection; - this._subject = this._connection = null; - _connection === null || _connection === void 0 ? void 0 : _connection.unsubscribe(); - }; - ConnectableObservable.prototype.connect = function () { - var _this = this; - var connection = this._connection; - if (!connection) { - connection = this._connection = new Subscription_1$7.Subscription(); - var subject_1 = this.getSubject(); - connection.add(this.source.subscribe(OperatorSubscriber_1$U.createOperatorSubscriber(subject_1, undefined, function () { - _this._teardown(); - subject_1.complete(); - }, function (err) { - _this._teardown(); - subject_1.error(err); - }, function () { return _this._teardown(); }))); - if (connection.closed) { - this._connection = null; - connection = Subscription_1$7.Subscription.EMPTY; - } - } - return connection; - }; - ConnectableObservable.prototype.refCount = function () { - return refCount_1.refCount()(this); - }; - return ConnectableObservable; -}(Observable_1$n.Observable)); -ConnectableObservable$1.ConnectableObservable = ConnectableObservable; - -var animationFrames$1 = {}; - -var performanceTimestampProvider = {}; - -(function (exports) { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.performanceTimestampProvider = void 0; - exports.performanceTimestampProvider = { - now: function () { - return (exports.performanceTimestampProvider.delegate || performance).now(); - }, - delegate: undefined, - }; - -} (performanceTimestampProvider)); - -var animationFrameProvider = {}; - -(function (exports) { - var __read = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; - }; - var __spreadArray = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { - for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) - to[j] = from[i]; - return to; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.animationFrameProvider = void 0; - var Subscription_1 = Subscription$1; - exports.animationFrameProvider = { - schedule: function (callback) { - var request = requestAnimationFrame; - var cancel = cancelAnimationFrame; - var delegate = exports.animationFrameProvider.delegate; - if (delegate) { - request = delegate.requestAnimationFrame; - cancel = delegate.cancelAnimationFrame; - } - var handle = request(function (timestamp) { - cancel = undefined; - callback(timestamp); - }); - return new Subscription_1.Subscription(function () { return cancel === null || cancel === void 0 ? void 0 : cancel(handle); }); - }, - requestAnimationFrame: function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var delegate = exports.animationFrameProvider.delegate; - return ((delegate === null || delegate === void 0 ? void 0 : delegate.requestAnimationFrame) || requestAnimationFrame).apply(void 0, __spreadArray([], __read(args))); - }, - cancelAnimationFrame: function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var delegate = exports.animationFrameProvider.delegate; - return ((delegate === null || delegate === void 0 ? void 0 : delegate.cancelAnimationFrame) || cancelAnimationFrame).apply(void 0, __spreadArray([], __read(args))); - }, - delegate: undefined, - }; - -} (animationFrameProvider)); - -Object.defineProperty(animationFrames$1, "__esModule", { value: true }); -animationFrames$1.animationFrames = void 0; -var Observable_1$m = Observable$1; -var performanceTimestampProvider_1 = performanceTimestampProvider; -var animationFrameProvider_1$1 = animationFrameProvider; -function animationFrames(timestampProvider) { - return timestampProvider ? animationFramesFactory(timestampProvider) : DEFAULT_ANIMATION_FRAMES; -} -animationFrames$1.animationFrames = animationFrames; -function animationFramesFactory(timestampProvider) { - return new Observable_1$m.Observable(function (subscriber) { - var provider = timestampProvider || performanceTimestampProvider_1.performanceTimestampProvider; - var start = provider.now(); - var id = 0; - var run = function () { - if (!subscriber.closed) { - id = animationFrameProvider_1$1.animationFrameProvider.requestAnimationFrame(function (timestamp) { - id = 0; - var now = provider.now(); - subscriber.next({ - timestamp: timestampProvider ? now : timestamp, - elapsed: now - start, - }); - run(); - }); - } - }; - run(); - return function () { - if (id) { - animationFrameProvider_1$1.animationFrameProvider.cancelAnimationFrame(id); - } - }; - }); -} -var DEFAULT_ANIMATION_FRAMES = animationFramesFactory(); - -var Subject$1 = {}; - -var ObjectUnsubscribedError = {}; - -Object.defineProperty(ObjectUnsubscribedError, "__esModule", { value: true }); -ObjectUnsubscribedError.ObjectUnsubscribedError = void 0; -var createErrorClass_1$4 = createErrorClass$1; -ObjectUnsubscribedError.ObjectUnsubscribedError = createErrorClass_1$4.createErrorClass(function (_super) { - return function ObjectUnsubscribedErrorImpl() { - _super(this); - this.name = 'ObjectUnsubscribedError'; - this.message = 'object unsubscribed'; - }; -}); - -var __extends$h = (commonjsGlobal && commonjsGlobal.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __values$7 = (commonjsGlobal && commonjsGlobal.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(Subject$1, "__esModule", { value: true }); -Subject$1.AnonymousSubject = Subject$1.Subject = void 0; -var Observable_1$l = Observable$1; -var Subscription_1$6 = Subscription$1; -var ObjectUnsubscribedError_1 = ObjectUnsubscribedError; -var arrRemove_1$6 = arrRemove$1; -var errorContext_1 = errorContext$1; -var Subject = (function (_super) { - __extends$h(Subject, _super); - function Subject() { - var _this = _super.call(this) || this; - _this.closed = false; - _this.currentObservers = null; - _this.observers = []; - _this.isStopped = false; - _this.hasError = false; - _this.thrownError = null; - return _this; - } - Subject.prototype.lift = function (operator) { - var subject = new AnonymousSubject(this, this); - subject.operator = operator; - return subject; - }; - Subject.prototype._throwIfClosed = function () { - if (this.closed) { - throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError(); - } - }; - Subject.prototype.next = function (value) { - var _this = this; - errorContext_1.errorContext(function () { - var e_1, _a; - _this._throwIfClosed(); - if (!_this.isStopped) { - if (!_this.currentObservers) { - _this.currentObservers = Array.from(_this.observers); - } - try { - for (var _b = __values$7(_this.currentObservers), _c = _b.next(); !_c.done; _c = _b.next()) { - var observer = _c.value; - observer.next(value); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - }); - }; - Subject.prototype.error = function (err) { - var _this = this; - errorContext_1.errorContext(function () { - _this._throwIfClosed(); - if (!_this.isStopped) { - _this.hasError = _this.isStopped = true; - _this.thrownError = err; - var observers = _this.observers; - while (observers.length) { - observers.shift().error(err); - } - } - }); - }; - Subject.prototype.complete = function () { - var _this = this; - errorContext_1.errorContext(function () { - _this._throwIfClosed(); - if (!_this.isStopped) { - _this.isStopped = true; - var observers = _this.observers; - while (observers.length) { - observers.shift().complete(); - } - } - }); - }; - Subject.prototype.unsubscribe = function () { - this.isStopped = this.closed = true; - this.observers = this.currentObservers = null; - }; - Object.defineProperty(Subject.prototype, "observed", { - get: function () { - var _a; - return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0; - }, - enumerable: false, - configurable: true - }); - Subject.prototype._trySubscribe = function (subscriber) { - this._throwIfClosed(); - return _super.prototype._trySubscribe.call(this, subscriber); - }; - Subject.prototype._subscribe = function (subscriber) { - this._throwIfClosed(); - this._checkFinalizedStatuses(subscriber); - return this._innerSubscribe(subscriber); - }; - Subject.prototype._innerSubscribe = function (subscriber) { - var _this = this; - var _a = this, hasError = _a.hasError, isStopped = _a.isStopped, observers = _a.observers; - if (hasError || isStopped) { - return Subscription_1$6.EMPTY_SUBSCRIPTION; - } - this.currentObservers = null; - observers.push(subscriber); - return new Subscription_1$6.Subscription(function () { - _this.currentObservers = null; - arrRemove_1$6.arrRemove(observers, subscriber); - }); - }; - Subject.prototype._checkFinalizedStatuses = function (subscriber) { - var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, isStopped = _a.isStopped; - if (hasError) { - subscriber.error(thrownError); - } - else if (isStopped) { - subscriber.complete(); - } - }; - Subject.prototype.asObservable = function () { - var observable = new Observable_1$l.Observable(); - observable.source = this; - return observable; - }; - Subject.create = function (destination, source) { - return new AnonymousSubject(destination, source); - }; - return Subject; -}(Observable_1$l.Observable)); -Subject$1.Subject = Subject; -var AnonymousSubject = (function (_super) { - __extends$h(AnonymousSubject, _super); - function AnonymousSubject(destination, source) { - var _this = _super.call(this) || this; - _this.destination = destination; - _this.source = source; - return _this; - } - AnonymousSubject.prototype.next = function (value) { - var _a, _b; - (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value); - }; - AnonymousSubject.prototype.error = function (err) { - var _a, _b; - (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err); - }; - AnonymousSubject.prototype.complete = function () { - var _a, _b; - (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a); - }; - AnonymousSubject.prototype._subscribe = function (subscriber) { - var _a, _b; - return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : Subscription_1$6.EMPTY_SUBSCRIPTION; - }; - return AnonymousSubject; -}(Subject)); -Subject$1.AnonymousSubject = AnonymousSubject; - -var BehaviorSubject$1 = {}; - -var __extends$g = (commonjsGlobal && commonjsGlobal.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(BehaviorSubject$1, "__esModule", { value: true }); -BehaviorSubject$1.BehaviorSubject = void 0; -var Subject_1$e = Subject$1; -var BehaviorSubject = (function (_super) { - __extends$g(BehaviorSubject, _super); - function BehaviorSubject(_value) { - var _this = _super.call(this) || this; - _this._value = _value; - return _this; - } - Object.defineProperty(BehaviorSubject.prototype, "value", { - get: function () { - return this.getValue(); - }, - enumerable: false, - configurable: true - }); - BehaviorSubject.prototype._subscribe = function (subscriber) { - var subscription = _super.prototype._subscribe.call(this, subscriber); - !subscription.closed && subscriber.next(this._value); - return subscription; - }; - BehaviorSubject.prototype.getValue = function () { - var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, _value = _a._value; - if (hasError) { - throw thrownError; - } - this._throwIfClosed(); - return _value; - }; - BehaviorSubject.prototype.next = function (value) { - _super.prototype.next.call(this, (this._value = value)); - }; - return BehaviorSubject; -}(Subject_1$e.Subject)); -BehaviorSubject$1.BehaviorSubject = BehaviorSubject; - -var ReplaySubject$1 = {}; - -var dateTimestampProvider = {}; - -(function (exports) { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.dateTimestampProvider = void 0; - exports.dateTimestampProvider = { - now: function () { - return (exports.dateTimestampProvider.delegate || Date).now(); - }, - delegate: undefined, - }; - -} (dateTimestampProvider)); - -var __extends$f = (commonjsGlobal && commonjsGlobal.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(ReplaySubject$1, "__esModule", { value: true }); -ReplaySubject$1.ReplaySubject = void 0; -var Subject_1$d = Subject$1; -var dateTimestampProvider_1$2 = dateTimestampProvider; -var ReplaySubject = (function (_super) { - __extends$f(ReplaySubject, _super); - function ReplaySubject(_bufferSize, _windowTime, _timestampProvider) { - if (_bufferSize === void 0) { _bufferSize = Infinity; } - if (_windowTime === void 0) { _windowTime = Infinity; } - if (_timestampProvider === void 0) { _timestampProvider = dateTimestampProvider_1$2.dateTimestampProvider; } - var _this = _super.call(this) || this; - _this._bufferSize = _bufferSize; - _this._windowTime = _windowTime; - _this._timestampProvider = _timestampProvider; - _this._buffer = []; - _this._infiniteTimeWindow = true; - _this._infiniteTimeWindow = _windowTime === Infinity; - _this._bufferSize = Math.max(1, _bufferSize); - _this._windowTime = Math.max(1, _windowTime); - return _this; - } - ReplaySubject.prototype.next = function (value) { - var _a = this, isStopped = _a.isStopped, _buffer = _a._buffer, _infiniteTimeWindow = _a._infiniteTimeWindow, _timestampProvider = _a._timestampProvider, _windowTime = _a._windowTime; - if (!isStopped) { - _buffer.push(value); - !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime); - } - this._trimBuffer(); - _super.prototype.next.call(this, value); - }; - ReplaySubject.prototype._subscribe = function (subscriber) { - this._throwIfClosed(); - this._trimBuffer(); - var subscription = this._innerSubscribe(subscriber); - var _a = this, _infiniteTimeWindow = _a._infiniteTimeWindow, _buffer = _a._buffer; - var copy = _buffer.slice(); - for (var i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) { - subscriber.next(copy[i]); - } - this._checkFinalizedStatuses(subscriber); - return subscription; - }; - ReplaySubject.prototype._trimBuffer = function () { - var _a = this, _bufferSize = _a._bufferSize, _timestampProvider = _a._timestampProvider, _buffer = _a._buffer, _infiniteTimeWindow = _a._infiniteTimeWindow; - var adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize; - _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize); - if (!_infiniteTimeWindow) { - var now = _timestampProvider.now(); - var last = 0; - for (var i = 1; i < _buffer.length && _buffer[i] <= now; i += 2) { - last = i; - } - last && _buffer.splice(0, last + 1); - } - }; - return ReplaySubject; -}(Subject_1$d.Subject)); -ReplaySubject$1.ReplaySubject = ReplaySubject; - -var AsyncSubject$1 = {}; - -var __extends$e = (commonjsGlobal && commonjsGlobal.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(AsyncSubject$1, "__esModule", { value: true }); -AsyncSubject$1.AsyncSubject = void 0; -var Subject_1$c = Subject$1; -var AsyncSubject = (function (_super) { - __extends$e(AsyncSubject, _super); - function AsyncSubject() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this._value = null; - _this._hasValue = false; - _this._isComplete = false; - return _this; - } - AsyncSubject.prototype._checkFinalizedStatuses = function (subscriber) { - var _a = this, hasError = _a.hasError, _hasValue = _a._hasValue, _value = _a._value, thrownError = _a.thrownError, isStopped = _a.isStopped, _isComplete = _a._isComplete; - if (hasError) { - subscriber.error(thrownError); - } - else if (isStopped || _isComplete) { - _hasValue && subscriber.next(_value); - subscriber.complete(); - } - }; - AsyncSubject.prototype.next = function (value) { - if (!this.isStopped) { - this._value = value; - this._hasValue = true; - } - }; - AsyncSubject.prototype.complete = function () { - var _a = this, _hasValue = _a._hasValue, _value = _a._value, _isComplete = _a._isComplete; - if (!_isComplete) { - this._isComplete = true; - _hasValue && _super.prototype.next.call(this, _value); - _super.prototype.complete.call(this); - } - }; - return AsyncSubject; -}(Subject_1$c.Subject)); -AsyncSubject$1.AsyncSubject = AsyncSubject; - -var asap = {}; - -var AsapAction$1 = {}; - -var AsyncAction$1 = {}; - -var Action$1 = {}; - -var __extends$d = (commonjsGlobal && commonjsGlobal.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(Action$1, "__esModule", { value: true }); -Action$1.Action = void 0; -var Subscription_1$5 = Subscription$1; -var Action = (function (_super) { - __extends$d(Action, _super); - function Action(scheduler, work) { - return _super.call(this) || this; - } - Action.prototype.schedule = function (state, delay) { - return this; - }; - return Action; -}(Subscription_1$5.Subscription)); -Action$1.Action = Action; - -var intervalProvider = {}; - -(function (exports) { - var __read = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; - }; - var __spreadArray = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { - for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) - to[j] = from[i]; - return to; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.intervalProvider = void 0; - exports.intervalProvider = { - setInterval: function (handler, timeout) { - var args = []; - for (var _i = 2; _i < arguments.length; _i++) { - args[_i - 2] = arguments[_i]; - } - var delegate = exports.intervalProvider.delegate; - if (delegate === null || delegate === void 0 ? void 0 : delegate.setInterval) { - return delegate.setInterval.apply(delegate, __spreadArray([handler, timeout], __read(args))); - } - return setInterval.apply(void 0, __spreadArray([handler, timeout], __read(args))); - }, - clearInterval: function (handle) { - var delegate = exports.intervalProvider.delegate; - return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearInterval) || clearInterval)(handle); - }, - delegate: undefined, - }; - -} (intervalProvider)); - -var __extends$c = (commonjsGlobal && commonjsGlobal.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(AsyncAction$1, "__esModule", { value: true }); -AsyncAction$1.AsyncAction = void 0; -var Action_1 = Action$1; -var intervalProvider_1 = intervalProvider; -var arrRemove_1$5 = arrRemove$1; -var AsyncAction = (function (_super) { - __extends$c(AsyncAction, _super); - function AsyncAction(scheduler, work) { - var _this = _super.call(this, scheduler, work) || this; - _this.scheduler = scheduler; - _this.work = work; - _this.pending = false; - return _this; - } - AsyncAction.prototype.schedule = function (state, delay) { - var _a; - if (delay === void 0) { delay = 0; } - if (this.closed) { - return this; - } - this.state = state; - var id = this.id; - var scheduler = this.scheduler; - if (id != null) { - this.id = this.recycleAsyncId(scheduler, id, delay); - } - this.pending = true; - this.delay = delay; - this.id = (_a = this.id) !== null && _a !== void 0 ? _a : this.requestAsyncId(scheduler, this.id, delay); - return this; - }; - AsyncAction.prototype.requestAsyncId = function (scheduler, _id, delay) { - if (delay === void 0) { delay = 0; } - return intervalProvider_1.intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay); - }; - AsyncAction.prototype.recycleAsyncId = function (_scheduler, id, delay) { - if (delay === void 0) { delay = 0; } - if (delay != null && this.delay === delay && this.pending === false) { - return id; - } - if (id != null) { - intervalProvider_1.intervalProvider.clearInterval(id); - } - return undefined; - }; - AsyncAction.prototype.execute = function (state, delay) { - if (this.closed) { - return new Error('executing a cancelled action'); - } - this.pending = false; - var error = this._execute(state, delay); - if (error) { - return error; - } - else if (this.pending === false && this.id != null) { - this.id = this.recycleAsyncId(this.scheduler, this.id, null); - } - }; - AsyncAction.prototype._execute = function (state, _delay) { - var errored = false; - var errorValue; - try { - this.work(state); - } - catch (e) { - errored = true; - errorValue = e ? e : new Error('Scheduled action threw falsy error'); - } - if (errored) { - this.unsubscribe(); - return errorValue; - } - }; - AsyncAction.prototype.unsubscribe = function () { - if (!this.closed) { - var _a = this, id = _a.id, scheduler = _a.scheduler; - var actions = scheduler.actions; - this.work = this.state = this.scheduler = null; - this.pending = false; - arrRemove_1$5.arrRemove(actions, this); - if (id != null) { - this.id = this.recycleAsyncId(scheduler, id, null); - } - this.delay = null; - _super.prototype.unsubscribe.call(this); - } - }; - return AsyncAction; -}(Action_1.Action)); -AsyncAction$1.AsyncAction = AsyncAction; - -var immediateProvider = {}; - -var Immediate = {}; - -Object.defineProperty(Immediate, "__esModule", { value: true }); -Immediate.TestTools = Immediate.Immediate = void 0; -var nextHandle = 1; -var resolved; -var activeHandles = {}; -function findAndClearHandle(handle) { - if (handle in activeHandles) { - delete activeHandles[handle]; - return true; - } - return false; -} -Immediate.Immediate = { - setImmediate: function (cb) { - var handle = nextHandle++; - activeHandles[handle] = true; - if (!resolved) { - resolved = Promise.resolve(); - } - resolved.then(function () { return findAndClearHandle(handle) && cb(); }); - return handle; - }, - clearImmediate: function (handle) { - findAndClearHandle(handle); - }, -}; -Immediate.TestTools = { - pending: function () { - return Object.keys(activeHandles).length; - } -}; - -(function (exports) { - var __read = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; - }; - var __spreadArray = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { - for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) - to[j] = from[i]; - return to; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.immediateProvider = void 0; - var Immediate_1 = Immediate; - var setImmediate = Immediate_1.Immediate.setImmediate, clearImmediate = Immediate_1.Immediate.clearImmediate; - exports.immediateProvider = { - setImmediate: function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var delegate = exports.immediateProvider.delegate; - return ((delegate === null || delegate === void 0 ? void 0 : delegate.setImmediate) || setImmediate).apply(void 0, __spreadArray([], __read(args))); - }, - clearImmediate: function (handle) { - var delegate = exports.immediateProvider.delegate; - return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearImmediate) || clearImmediate)(handle); - }, - delegate: undefined, - }; - -} (immediateProvider)); - -var __extends$b = (commonjsGlobal && commonjsGlobal.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(AsapAction$1, "__esModule", { value: true }); -AsapAction$1.AsapAction = void 0; -var AsyncAction_1$3 = AsyncAction$1; -var immediateProvider_1 = immediateProvider; -var AsapAction = (function (_super) { - __extends$b(AsapAction, _super); - function AsapAction(scheduler, work) { - var _this = _super.call(this, scheduler, work) || this; - _this.scheduler = scheduler; - _this.work = work; - return _this; - } - AsapAction.prototype.requestAsyncId = function (scheduler, id, delay) { - if (delay === void 0) { delay = 0; } - if (delay !== null && delay > 0) { - return _super.prototype.requestAsyncId.call(this, scheduler, id, delay); - } - scheduler.actions.push(this); - return scheduler._scheduled || (scheduler._scheduled = immediateProvider_1.immediateProvider.setImmediate(scheduler.flush.bind(scheduler, undefined))); - }; - AsapAction.prototype.recycleAsyncId = function (scheduler, id, delay) { - var _a; - if (delay === void 0) { delay = 0; } - if (delay != null ? delay > 0 : this.delay > 0) { - return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay); - } - var actions = scheduler.actions; - if (id != null && ((_a = actions[actions.length - 1]) === null || _a === void 0 ? void 0 : _a.id) !== id) { - immediateProvider_1.immediateProvider.clearImmediate(id); - if (scheduler._scheduled === id) { - scheduler._scheduled = undefined; - } - } - return undefined; - }; - return AsapAction; -}(AsyncAction_1$3.AsyncAction)); -AsapAction$1.AsapAction = AsapAction; - -var AsapScheduler$1 = {}; - -var AsyncScheduler$1 = {}; - -var Scheduler$1 = {}; - -Object.defineProperty(Scheduler$1, "__esModule", { value: true }); -Scheduler$1.Scheduler = void 0; -var dateTimestampProvider_1$1 = dateTimestampProvider; -var Scheduler = (function () { - function Scheduler(schedulerActionCtor, now) { - if (now === void 0) { now = Scheduler.now; } - this.schedulerActionCtor = schedulerActionCtor; - this.now = now; - } - Scheduler.prototype.schedule = function (work, delay, state) { - if (delay === void 0) { delay = 0; } - return new this.schedulerActionCtor(this, work).schedule(state, delay); - }; - Scheduler.now = dateTimestampProvider_1$1.dateTimestampProvider.now; - return Scheduler; -}()); -Scheduler$1.Scheduler = Scheduler; - -var __extends$a = (commonjsGlobal && commonjsGlobal.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(AsyncScheduler$1, "__esModule", { value: true }); -AsyncScheduler$1.AsyncScheduler = void 0; -var Scheduler_1 = Scheduler$1; -var AsyncScheduler = (function (_super) { - __extends$a(AsyncScheduler, _super); - function AsyncScheduler(SchedulerAction, now) { - if (now === void 0) { now = Scheduler_1.Scheduler.now; } - var _this = _super.call(this, SchedulerAction, now) || this; - _this.actions = []; - _this._active = false; - return _this; - } - AsyncScheduler.prototype.flush = function (action) { - var actions = this.actions; - if (this._active) { - actions.push(action); - return; - } - var error; - this._active = true; - do { - if ((error = action.execute(action.state, action.delay))) { - break; - } - } while ((action = actions.shift())); - this._active = false; - if (error) { - while ((action = actions.shift())) { - action.unsubscribe(); - } - throw error; - } - }; - return AsyncScheduler; -}(Scheduler_1.Scheduler)); -AsyncScheduler$1.AsyncScheduler = AsyncScheduler; - -var __extends$9 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(AsapScheduler$1, "__esModule", { value: true }); -AsapScheduler$1.AsapScheduler = void 0; -var AsyncScheduler_1$3 = AsyncScheduler$1; -var AsapScheduler = (function (_super) { - __extends$9(AsapScheduler, _super); - function AsapScheduler() { - return _super !== null && _super.apply(this, arguments) || this; - } - AsapScheduler.prototype.flush = function (action) { - this._active = true; - var flushId = this._scheduled; - this._scheduled = undefined; - var actions = this.actions; - var error; - action = action || actions.shift(); - do { - if ((error = action.execute(action.state, action.delay))) { - break; - } - } while ((action = actions[0]) && action.id === flushId && actions.shift()); - this._active = false; - if (error) { - while ((action = actions[0]) && action.id === flushId && actions.shift()) { - action.unsubscribe(); - } - throw error; - } - }; - return AsapScheduler; -}(AsyncScheduler_1$3.AsyncScheduler)); -AsapScheduler$1.AsapScheduler = AsapScheduler; - -(function (exports) { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.asap = exports.asapScheduler = void 0; - var AsapAction_1 = AsapAction$1; - var AsapScheduler_1 = AsapScheduler$1; - exports.asapScheduler = new AsapScheduler_1.AsapScheduler(AsapAction_1.AsapAction); - exports.asap = exports.asapScheduler; - -} (asap)); - -var async = {}; - -(function (exports) { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.async = exports.asyncScheduler = void 0; - var AsyncAction_1 = AsyncAction$1; - var AsyncScheduler_1 = AsyncScheduler$1; - exports.asyncScheduler = new AsyncScheduler_1.AsyncScheduler(AsyncAction_1.AsyncAction); - exports.async = exports.asyncScheduler; - -} (async)); - -var queue = {}; - -var QueueAction$1 = {}; - -var __extends$8 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(QueueAction$1, "__esModule", { value: true }); -QueueAction$1.QueueAction = void 0; -var AsyncAction_1$2 = AsyncAction$1; -var QueueAction = (function (_super) { - __extends$8(QueueAction, _super); - function QueueAction(scheduler, work) { - var _this = _super.call(this, scheduler, work) || this; - _this.scheduler = scheduler; - _this.work = work; - return _this; - } - QueueAction.prototype.schedule = function (state, delay) { - if (delay === void 0) { delay = 0; } - if (delay > 0) { - return _super.prototype.schedule.call(this, state, delay); - } - this.delay = delay; - this.state = state; - this.scheduler.flush(this); - return this; - }; - QueueAction.prototype.execute = function (state, delay) { - return delay > 0 || this.closed ? _super.prototype.execute.call(this, state, delay) : this._execute(state, delay); - }; - QueueAction.prototype.requestAsyncId = function (scheduler, id, delay) { - if (delay === void 0) { delay = 0; } - if ((delay != null && delay > 0) || (delay == null && this.delay > 0)) { - return _super.prototype.requestAsyncId.call(this, scheduler, id, delay); - } - scheduler.flush(this); - return 0; - }; - return QueueAction; -}(AsyncAction_1$2.AsyncAction)); -QueueAction$1.QueueAction = QueueAction; - -var QueueScheduler$1 = {}; - -var __extends$7 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(QueueScheduler$1, "__esModule", { value: true }); -QueueScheduler$1.QueueScheduler = void 0; -var AsyncScheduler_1$2 = AsyncScheduler$1; -var QueueScheduler = (function (_super) { - __extends$7(QueueScheduler, _super); - function QueueScheduler() { - return _super !== null && _super.apply(this, arguments) || this; - } - return QueueScheduler; -}(AsyncScheduler_1$2.AsyncScheduler)); -QueueScheduler$1.QueueScheduler = QueueScheduler; - -(function (exports) { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.queue = exports.queueScheduler = void 0; - var QueueAction_1 = QueueAction$1; - var QueueScheduler_1 = QueueScheduler$1; - exports.queueScheduler = new QueueScheduler_1.QueueScheduler(QueueAction_1.QueueAction); - exports.queue = exports.queueScheduler; - -} (queue)); - -var animationFrame = {}; - -var AnimationFrameAction$1 = {}; - -var __extends$6 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(AnimationFrameAction$1, "__esModule", { value: true }); -AnimationFrameAction$1.AnimationFrameAction = void 0; -var AsyncAction_1$1 = AsyncAction$1; -var animationFrameProvider_1 = animationFrameProvider; -var AnimationFrameAction = (function (_super) { - __extends$6(AnimationFrameAction, _super); - function AnimationFrameAction(scheduler, work) { - var _this = _super.call(this, scheduler, work) || this; - _this.scheduler = scheduler; - _this.work = work; - return _this; - } - AnimationFrameAction.prototype.requestAsyncId = function (scheduler, id, delay) { - if (delay === void 0) { delay = 0; } - if (delay !== null && delay > 0) { - return _super.prototype.requestAsyncId.call(this, scheduler, id, delay); - } - scheduler.actions.push(this); - return scheduler._scheduled || (scheduler._scheduled = animationFrameProvider_1.animationFrameProvider.requestAnimationFrame(function () { return scheduler.flush(undefined); })); - }; - AnimationFrameAction.prototype.recycleAsyncId = function (scheduler, id, delay) { - var _a; - if (delay === void 0) { delay = 0; } - if (delay != null ? delay > 0 : this.delay > 0) { - return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay); - } - var actions = scheduler.actions; - if (id != null && ((_a = actions[actions.length - 1]) === null || _a === void 0 ? void 0 : _a.id) !== id) { - animationFrameProvider_1.animationFrameProvider.cancelAnimationFrame(id); - scheduler._scheduled = undefined; - } - return undefined; - }; - return AnimationFrameAction; -}(AsyncAction_1$1.AsyncAction)); -AnimationFrameAction$1.AnimationFrameAction = AnimationFrameAction; - -var AnimationFrameScheduler$1 = {}; - -var __extends$5 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(AnimationFrameScheduler$1, "__esModule", { value: true }); -AnimationFrameScheduler$1.AnimationFrameScheduler = void 0; -var AsyncScheduler_1$1 = AsyncScheduler$1; -var AnimationFrameScheduler = (function (_super) { - __extends$5(AnimationFrameScheduler, _super); - function AnimationFrameScheduler() { - return _super !== null && _super.apply(this, arguments) || this; - } - AnimationFrameScheduler.prototype.flush = function (action) { - this._active = true; - var flushId = this._scheduled; - this._scheduled = undefined; - var actions = this.actions; - var error; - action = action || actions.shift(); - do { - if ((error = action.execute(action.state, action.delay))) { - break; - } - } while ((action = actions[0]) && action.id === flushId && actions.shift()); - this._active = false; - if (error) { - while ((action = actions[0]) && action.id === flushId && actions.shift()) { - action.unsubscribe(); - } - throw error; - } - }; - return AnimationFrameScheduler; -}(AsyncScheduler_1$1.AsyncScheduler)); -AnimationFrameScheduler$1.AnimationFrameScheduler = AnimationFrameScheduler; - -(function (exports) { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.animationFrame = exports.animationFrameScheduler = void 0; - var AnimationFrameAction_1 = AnimationFrameAction$1; - var AnimationFrameScheduler_1 = AnimationFrameScheduler$1; - exports.animationFrameScheduler = new AnimationFrameScheduler_1.AnimationFrameScheduler(AnimationFrameAction_1.AnimationFrameAction); - exports.animationFrame = exports.animationFrameScheduler; - -} (animationFrame)); - -var VirtualTimeScheduler$1 = {}; - -var __extends$4 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(VirtualTimeScheduler$1, "__esModule", { value: true }); -VirtualTimeScheduler$1.VirtualAction = VirtualTimeScheduler$1.VirtualTimeScheduler = void 0; -var AsyncAction_1 = AsyncAction$1; -var Subscription_1$4 = Subscription$1; -var AsyncScheduler_1 = AsyncScheduler$1; -var VirtualTimeScheduler = (function (_super) { - __extends$4(VirtualTimeScheduler, _super); - function VirtualTimeScheduler(schedulerActionCtor, maxFrames) { - if (schedulerActionCtor === void 0) { schedulerActionCtor = VirtualAction; } - if (maxFrames === void 0) { maxFrames = Infinity; } - var _this = _super.call(this, schedulerActionCtor, function () { return _this.frame; }) || this; - _this.maxFrames = maxFrames; - _this.frame = 0; - _this.index = -1; - return _this; - } - VirtualTimeScheduler.prototype.flush = function () { - var _a = this, actions = _a.actions, maxFrames = _a.maxFrames; - var error; - var action; - while ((action = actions[0]) && action.delay <= maxFrames) { - actions.shift(); - this.frame = action.delay; - if ((error = action.execute(action.state, action.delay))) { - break; - } - } - if (error) { - while ((action = actions.shift())) { - action.unsubscribe(); - } - throw error; - } - }; - VirtualTimeScheduler.frameTimeFactor = 10; - return VirtualTimeScheduler; -}(AsyncScheduler_1.AsyncScheduler)); -VirtualTimeScheduler$1.VirtualTimeScheduler = VirtualTimeScheduler; -var VirtualAction = (function (_super) { - __extends$4(VirtualAction, _super); - function VirtualAction(scheduler, work, index) { - if (index === void 0) { index = (scheduler.index += 1); } - var _this = _super.call(this, scheduler, work) || this; - _this.scheduler = scheduler; - _this.work = work; - _this.index = index; - _this.active = true; - _this.index = scheduler.index = index; - return _this; - } - VirtualAction.prototype.schedule = function (state, delay) { - if (delay === void 0) { delay = 0; } - if (Number.isFinite(delay)) { - if (!this.id) { - return _super.prototype.schedule.call(this, state, delay); - } - this.active = false; - var action = new VirtualAction(this.scheduler, this.work); - this.add(action); - return action.schedule(state, delay); - } - else { - return Subscription_1$4.Subscription.EMPTY; - } - }; - VirtualAction.prototype.requestAsyncId = function (scheduler, id, delay) { - if (delay === void 0) { delay = 0; } - this.delay = scheduler.frame + delay; - var actions = scheduler.actions; - actions.push(this); - actions.sort(VirtualAction.sortActions); - return 1; - }; - VirtualAction.prototype.recycleAsyncId = function (scheduler, id, delay) { - return undefined; - }; - VirtualAction.prototype._execute = function (state, delay) { - if (this.active === true) { - return _super.prototype._execute.call(this, state, delay); - } - }; - VirtualAction.sortActions = function (a, b) { - if (a.delay === b.delay) { - if (a.index === b.index) { - return 0; - } - else if (a.index > b.index) { - return 1; - } - else { - return -1; - } - } - else if (a.delay > b.delay) { - return 1; - } - else { - return -1; - } - }; - return VirtualAction; -}(AsyncAction_1.AsyncAction)); -VirtualTimeScheduler$1.VirtualAction = VirtualAction; - -var Notification = {}; - -var empty = {}; - -(function (exports) { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.empty = exports.EMPTY = void 0; - var Observable_1 = Observable$1; - exports.EMPTY = new Observable_1.Observable(function (subscriber) { return subscriber.complete(); }); - function empty(scheduler) { - return scheduler ? emptyScheduled(scheduler) : exports.EMPTY; - } - exports.empty = empty; - function emptyScheduled(scheduler) { - return new Observable_1.Observable(function (subscriber) { return scheduler.schedule(function () { return subscriber.complete(); }); }); - } - -} (empty)); - -var of$1 = {}; - -var args = {}; - -var isScheduler$1 = {}; - -Object.defineProperty(isScheduler$1, "__esModule", { value: true }); -isScheduler$1.isScheduler = void 0; -var isFunction_1$m = isFunction$1; -function isScheduler(value) { - return value && isFunction_1$m.isFunction(value.schedule); -} -isScheduler$1.isScheduler = isScheduler; - -Object.defineProperty(args, "__esModule", { value: true }); -args.popNumber = args.popScheduler = args.popResultSelector = void 0; -var isFunction_1$l = isFunction$1; -var isScheduler_1$3 = isScheduler$1; -function last$2(arr) { - return arr[arr.length - 1]; -} -function popResultSelector(args) { - return isFunction_1$l.isFunction(last$2(args)) ? args.pop() : undefined; -} -args.popResultSelector = popResultSelector; -function popScheduler(args) { - return isScheduler_1$3.isScheduler(last$2(args)) ? args.pop() : undefined; -} -args.popScheduler = popScheduler; -function popNumber(args, defaultValue) { - return typeof last$2(args) === 'number' ? args.pop() : defaultValue; -} -args.popNumber = popNumber; - -var from$1 = {}; - -var scheduled$1 = {}; - -var scheduleObservable$1 = {}; - -var innerFrom$1 = {}; - -var isArrayLike = {}; - -Object.defineProperty(isArrayLike, "__esModule", { value: true }); -isArrayLike.isArrayLike = void 0; -isArrayLike.isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; }); - -var isPromise$1 = {}; - -Object.defineProperty(isPromise$1, "__esModule", { value: true }); -isPromise$1.isPromise = void 0; -var isFunction_1$k = isFunction$1; -function isPromise(value) { - return isFunction_1$k.isFunction(value === null || value === void 0 ? void 0 : value.then); -} -isPromise$1.isPromise = isPromise; - -var isInteropObservable$1 = {}; - -Object.defineProperty(isInteropObservable$1, "__esModule", { value: true }); -isInteropObservable$1.isInteropObservable = void 0; -var observable_1$1 = observable; -var isFunction_1$j = isFunction$1; -function isInteropObservable(input) { - return isFunction_1$j.isFunction(input[observable_1$1.observable]); -} -isInteropObservable$1.isInteropObservable = isInteropObservable; - -var isAsyncIterable$1 = {}; - -Object.defineProperty(isAsyncIterable$1, "__esModule", { value: true }); -isAsyncIterable$1.isAsyncIterable = void 0; -var isFunction_1$i = isFunction$1; -function isAsyncIterable(obj) { - return Symbol.asyncIterator && isFunction_1$i.isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]); -} -isAsyncIterable$1.isAsyncIterable = isAsyncIterable; - -var throwUnobservableError = {}; - -Object.defineProperty(throwUnobservableError, "__esModule", { value: true }); -throwUnobservableError.createInvalidObservableTypeError = void 0; -function createInvalidObservableTypeError(input) { - return new TypeError("You provided " + (input !== null && typeof input === 'object' ? 'an invalid object' : "'" + input + "'") + " where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable."); -} -throwUnobservableError.createInvalidObservableTypeError = createInvalidObservableTypeError; - -var isIterable$1 = {}; - -var iterator$1 = {}; - -Object.defineProperty(iterator$1, "__esModule", { value: true }); -iterator$1.iterator = iterator$1.getSymbolIterator = void 0; -function getSymbolIterator() { - if (typeof Symbol !== 'function' || !Symbol.iterator) { - return '@@iterator'; - } - return Symbol.iterator; -} -iterator$1.getSymbolIterator = getSymbolIterator; -iterator$1.iterator = getSymbolIterator(); - -Object.defineProperty(isIterable$1, "__esModule", { value: true }); -isIterable$1.isIterable = void 0; -var iterator_1$1 = iterator$1; -var isFunction_1$h = isFunction$1; -function isIterable(input) { - return isFunction_1$h.isFunction(input === null || input === void 0 ? void 0 : input[iterator_1$1.iterator]); -} -isIterable$1.isIterable = isIterable; - -var isReadableStreamLike$1 = {}; - -var __generator$2 = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -var __await = (commonjsGlobal && commonjsGlobal.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }; -var __asyncGenerator = (commonjsGlobal && commonjsGlobal.__asyncGenerator) || function (thisArg, _arguments, generator) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), i, q = []; - return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } - function fulfill(value) { resume("next", value); } - function reject(value) { resume("throw", value); } - function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } -}; -Object.defineProperty(isReadableStreamLike$1, "__esModule", { value: true }); -isReadableStreamLike$1.isReadableStreamLike = isReadableStreamLike$1.readableStreamLikeToAsyncGenerator = void 0; -var isFunction_1$g = isFunction$1; -function readableStreamLikeToAsyncGenerator(readableStream) { - return __asyncGenerator(this, arguments, function readableStreamLikeToAsyncGenerator_1() { - var reader, _a, value, done; - return __generator$2(this, function (_b) { - switch (_b.label) { - case 0: - reader = readableStream.getReader(); - _b.label = 1; - case 1: - _b.trys.push([1, , 9, 10]); - _b.label = 2; - case 2: - return [4, __await(reader.read())]; - case 3: - _a = _b.sent(), value = _a.value, done = _a.done; - if (!done) return [3, 5]; - return [4, __await(void 0)]; - case 4: return [2, _b.sent()]; - case 5: return [4, __await(value)]; - case 6: return [4, _b.sent()]; - case 7: - _b.sent(); - return [3, 2]; - case 8: return [3, 10]; - case 9: - reader.releaseLock(); - return [7]; - case 10: return [2]; - } - }); - }); -} -isReadableStreamLike$1.readableStreamLikeToAsyncGenerator = readableStreamLikeToAsyncGenerator; -function isReadableStreamLike(obj) { - return isFunction_1$g.isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader); -} -isReadableStreamLike$1.isReadableStreamLike = isReadableStreamLike; - -var __awaiter = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator$1 = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -var __asyncValues = (commonjsGlobal && commonjsGlobal.__asyncValues) || function (o) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator], i; - return m ? m.call(o) : (o = typeof __values$6 === "function" ? __values$6(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); - function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } - function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } -}; -var __values$6 = (commonjsGlobal && commonjsGlobal.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(innerFrom$1, "__esModule", { value: true }); -innerFrom$1.fromReadableStreamLike = innerFrom$1.fromAsyncIterable = innerFrom$1.fromIterable = innerFrom$1.fromPromise = innerFrom$1.fromArrayLike = innerFrom$1.fromInteropObservable = innerFrom$1.innerFrom = void 0; -var isArrayLike_1$2 = isArrayLike; -var isPromise_1$1 = isPromise$1; -var Observable_1$k = Observable$1; -var isInteropObservable_1$1 = isInteropObservable$1; -var isAsyncIterable_1$1 = isAsyncIterable$1; -var throwUnobservableError_1$1 = throwUnobservableError; -var isIterable_1$1 = isIterable$1; -var isReadableStreamLike_1$2 = isReadableStreamLike$1; -var isFunction_1$f = isFunction$1; -var reportUnhandledError_1 = reportUnhandledError$1; -var observable_1 = observable; -function innerFrom(input) { - if (input instanceof Observable_1$k.Observable) { - return input; - } - if (input != null) { - if (isInteropObservable_1$1.isInteropObservable(input)) { - return fromInteropObservable(input); - } - if (isArrayLike_1$2.isArrayLike(input)) { - return fromArrayLike(input); - } - if (isPromise_1$1.isPromise(input)) { - return fromPromise(input); - } - if (isAsyncIterable_1$1.isAsyncIterable(input)) { - return fromAsyncIterable(input); - } - if (isIterable_1$1.isIterable(input)) { - return fromIterable(input); - } - if (isReadableStreamLike_1$2.isReadableStreamLike(input)) { - return fromReadableStreamLike(input); - } - } - throw throwUnobservableError_1$1.createInvalidObservableTypeError(input); -} -innerFrom$1.innerFrom = innerFrom; -function fromInteropObservable(obj) { - return new Observable_1$k.Observable(function (subscriber) { - var obs = obj[observable_1.observable](); - if (isFunction_1$f.isFunction(obs.subscribe)) { - return obs.subscribe(subscriber); - } - throw new TypeError('Provided object does not correctly implement Symbol.observable'); - }); -} -innerFrom$1.fromInteropObservable = fromInteropObservable; -function fromArrayLike(array) { - return new Observable_1$k.Observable(function (subscriber) { - for (var i = 0; i < array.length && !subscriber.closed; i++) { - subscriber.next(array[i]); - } - subscriber.complete(); - }); -} -innerFrom$1.fromArrayLike = fromArrayLike; -function fromPromise(promise) { - return new Observable_1$k.Observable(function (subscriber) { - promise - .then(function (value) { - if (!subscriber.closed) { - subscriber.next(value); - subscriber.complete(); - } - }, function (err) { return subscriber.error(err); }) - .then(null, reportUnhandledError_1.reportUnhandledError); - }); -} -innerFrom$1.fromPromise = fromPromise; -function fromIterable(iterable) { - return new Observable_1$k.Observable(function (subscriber) { - var e_1, _a; - try { - for (var iterable_1 = __values$6(iterable), iterable_1_1 = iterable_1.next(); !iterable_1_1.done; iterable_1_1 = iterable_1.next()) { - var value = iterable_1_1.value; - subscriber.next(value); - if (subscriber.closed) { - return; - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (iterable_1_1 && !iterable_1_1.done && (_a = iterable_1.return)) _a.call(iterable_1); - } - finally { if (e_1) throw e_1.error; } - } - subscriber.complete(); - }); -} -innerFrom$1.fromIterable = fromIterable; -function fromAsyncIterable(asyncIterable) { - return new Observable_1$k.Observable(function (subscriber) { - process$2(asyncIterable, subscriber).catch(function (err) { return subscriber.error(err); }); - }); -} -innerFrom$1.fromAsyncIterable = fromAsyncIterable; -function fromReadableStreamLike(readableStream) { - return fromAsyncIterable(isReadableStreamLike_1$2.readableStreamLikeToAsyncGenerator(readableStream)); -} -innerFrom$1.fromReadableStreamLike = fromReadableStreamLike; -function process$2(asyncIterable, subscriber) { - var asyncIterable_1, asyncIterable_1_1; - var e_2, _a; - return __awaiter(this, void 0, void 0, function () { - var value, e_2_1; - return __generator$1(this, function (_b) { - switch (_b.label) { - case 0: - _b.trys.push([0, 5, 6, 11]); - asyncIterable_1 = __asyncValues(asyncIterable); - _b.label = 1; - case 1: return [4, asyncIterable_1.next()]; - case 2: - if (!(asyncIterable_1_1 = _b.sent(), !asyncIterable_1_1.done)) return [3, 4]; - value = asyncIterable_1_1.value; - subscriber.next(value); - if (subscriber.closed) { - return [2]; - } - _b.label = 3; - case 3: return [3, 1]; - case 4: return [3, 11]; - case 5: - e_2_1 = _b.sent(); - e_2 = { error: e_2_1 }; - return [3, 11]; - case 6: - _b.trys.push([6, , 9, 10]); - if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return))) return [3, 8]; - return [4, _a.call(asyncIterable_1)]; - case 7: - _b.sent(); - _b.label = 8; - case 8: return [3, 10]; - case 9: - if (e_2) throw e_2.error; - return [7]; - case 10: return [7]; - case 11: - subscriber.complete(); - return [2]; - } - }); - }); -} - -var observeOn$1 = {}; - -var executeSchedule$1 = {}; - -Object.defineProperty(executeSchedule$1, "__esModule", { value: true }); -executeSchedule$1.executeSchedule = void 0; -function executeSchedule(parentSubscription, scheduler, work, delay, repeat) { - if (delay === void 0) { delay = 0; } - if (repeat === void 0) { repeat = false; } - var scheduleSubscription = scheduler.schedule(function () { - work(); - if (repeat) { - parentSubscription.add(this.schedule(null, delay)); - } - else { - this.unsubscribe(); - } - }, delay); - parentSubscription.add(scheduleSubscription); - if (!repeat) { - return scheduleSubscription; - } -} -executeSchedule$1.executeSchedule = executeSchedule; - -Object.defineProperty(observeOn$1, "__esModule", { value: true }); -observeOn$1.observeOn = void 0; -var executeSchedule_1$6 = executeSchedule$1; -var lift_1$12 = lift; -var OperatorSubscriber_1$T = OperatorSubscriber$1; -function observeOn(scheduler, delay) { - if (delay === void 0) { delay = 0; } - return lift_1$12.operate(function (source, subscriber) { - source.subscribe(OperatorSubscriber_1$T.createOperatorSubscriber(subscriber, function (value) { return executeSchedule_1$6.executeSchedule(subscriber, scheduler, function () { return subscriber.next(value); }, delay); }, function () { return executeSchedule_1$6.executeSchedule(subscriber, scheduler, function () { return subscriber.complete(); }, delay); }, function (err) { return executeSchedule_1$6.executeSchedule(subscriber, scheduler, function () { return subscriber.error(err); }, delay); })); - }); -} -observeOn$1.observeOn = observeOn; - -var subscribeOn$1 = {}; - -Object.defineProperty(subscribeOn$1, "__esModule", { value: true }); -subscribeOn$1.subscribeOn = void 0; -var lift_1$11 = lift; -function subscribeOn(scheduler, delay) { - if (delay === void 0) { delay = 0; } - return lift_1$11.operate(function (source, subscriber) { - subscriber.add(scheduler.schedule(function () { return source.subscribe(subscriber); }, delay)); - }); -} -subscribeOn$1.subscribeOn = subscribeOn; - -Object.defineProperty(scheduleObservable$1, "__esModule", { value: true }); -scheduleObservable$1.scheduleObservable = void 0; -var innerFrom_1$D = innerFrom$1; -var observeOn_1$2 = observeOn$1; -var subscribeOn_1$2 = subscribeOn$1; -function scheduleObservable(input, scheduler) { - return innerFrom_1$D.innerFrom(input).pipe(subscribeOn_1$2.subscribeOn(scheduler), observeOn_1$2.observeOn(scheduler)); -} -scheduleObservable$1.scheduleObservable = scheduleObservable; - -var schedulePromise$1 = {}; - -Object.defineProperty(schedulePromise$1, "__esModule", { value: true }); -schedulePromise$1.schedulePromise = void 0; -var innerFrom_1$C = innerFrom$1; -var observeOn_1$1 = observeOn$1; -var subscribeOn_1$1 = subscribeOn$1; -function schedulePromise(input, scheduler) { - return innerFrom_1$C.innerFrom(input).pipe(subscribeOn_1$1.subscribeOn(scheduler), observeOn_1$1.observeOn(scheduler)); -} -schedulePromise$1.schedulePromise = schedulePromise; - -var scheduleArray$1 = {}; - -Object.defineProperty(scheduleArray$1, "__esModule", { value: true }); -scheduleArray$1.scheduleArray = void 0; -var Observable_1$j = Observable$1; -function scheduleArray(input, scheduler) { - return new Observable_1$j.Observable(function (subscriber) { - var i = 0; - return scheduler.schedule(function () { - if (i === input.length) { - subscriber.complete(); - } - else { - subscriber.next(input[i++]); - if (!subscriber.closed) { - this.schedule(); - } - } - }); - }); -} -scheduleArray$1.scheduleArray = scheduleArray; - -var scheduleIterable$1 = {}; - -Object.defineProperty(scheduleIterable$1, "__esModule", { value: true }); -scheduleIterable$1.scheduleIterable = void 0; -var Observable_1$i = Observable$1; -var iterator_1 = iterator$1; -var isFunction_1$e = isFunction$1; -var executeSchedule_1$5 = executeSchedule$1; -function scheduleIterable(input, scheduler) { - return new Observable_1$i.Observable(function (subscriber) { - var iterator; - executeSchedule_1$5.executeSchedule(subscriber, scheduler, function () { - iterator = input[iterator_1.iterator](); - executeSchedule_1$5.executeSchedule(subscriber, scheduler, function () { - var _a; - var value; - var done; - try { - (_a = iterator.next(), value = _a.value, done = _a.done); - } - catch (err) { - subscriber.error(err); - return; - } - if (done) { - subscriber.complete(); - } - else { - subscriber.next(value); - } - }, 0, true); - }); - return function () { return isFunction_1$e.isFunction(iterator === null || iterator === void 0 ? void 0 : iterator.return) && iterator.return(); }; - }); -} -scheduleIterable$1.scheduleIterable = scheduleIterable; - -var scheduleAsyncIterable$1 = {}; - -Object.defineProperty(scheduleAsyncIterable$1, "__esModule", { value: true }); -scheduleAsyncIterable$1.scheduleAsyncIterable = void 0; -var Observable_1$h = Observable$1; -var executeSchedule_1$4 = executeSchedule$1; -function scheduleAsyncIterable(input, scheduler) { - if (!input) { - throw new Error('Iterable cannot be null'); - } - return new Observable_1$h.Observable(function (subscriber) { - executeSchedule_1$4.executeSchedule(subscriber, scheduler, function () { - var iterator = input[Symbol.asyncIterator](); - executeSchedule_1$4.executeSchedule(subscriber, scheduler, function () { - iterator.next().then(function (result) { - if (result.done) { - subscriber.complete(); - } - else { - subscriber.next(result.value); - } - }); - }, 0, true); - }); - }); -} -scheduleAsyncIterable$1.scheduleAsyncIterable = scheduleAsyncIterable; - -var scheduleReadableStreamLike$1 = {}; - -Object.defineProperty(scheduleReadableStreamLike$1, "__esModule", { value: true }); -scheduleReadableStreamLike$1.scheduleReadableStreamLike = void 0; -var scheduleAsyncIterable_1$1 = scheduleAsyncIterable$1; -var isReadableStreamLike_1$1 = isReadableStreamLike$1; -function scheduleReadableStreamLike(input, scheduler) { - return scheduleAsyncIterable_1$1.scheduleAsyncIterable(isReadableStreamLike_1$1.readableStreamLikeToAsyncGenerator(input), scheduler); -} -scheduleReadableStreamLike$1.scheduleReadableStreamLike = scheduleReadableStreamLike; - -Object.defineProperty(scheduled$1, "__esModule", { value: true }); -scheduled$1.scheduled = void 0; -var scheduleObservable_1 = scheduleObservable$1; -var schedulePromise_1 = schedulePromise$1; -var scheduleArray_1 = scheduleArray$1; -var scheduleIterable_1$1 = scheduleIterable$1; -var scheduleAsyncIterable_1 = scheduleAsyncIterable$1; -var isInteropObservable_1 = isInteropObservable$1; -var isPromise_1 = isPromise$1; -var isArrayLike_1$1 = isArrayLike; -var isIterable_1 = isIterable$1; -var isAsyncIterable_1 = isAsyncIterable$1; -var throwUnobservableError_1 = throwUnobservableError; -var isReadableStreamLike_1 = isReadableStreamLike$1; -var scheduleReadableStreamLike_1 = scheduleReadableStreamLike$1; -function scheduled(input, scheduler) { - if (input != null) { - if (isInteropObservable_1.isInteropObservable(input)) { - return scheduleObservable_1.scheduleObservable(input, scheduler); - } - if (isArrayLike_1$1.isArrayLike(input)) { - return scheduleArray_1.scheduleArray(input, scheduler); - } - if (isPromise_1.isPromise(input)) { - return schedulePromise_1.schedulePromise(input, scheduler); - } - if (isAsyncIterable_1.isAsyncIterable(input)) { - return scheduleAsyncIterable_1.scheduleAsyncIterable(input, scheduler); - } - if (isIterable_1.isIterable(input)) { - return scheduleIterable_1$1.scheduleIterable(input, scheduler); - } - if (isReadableStreamLike_1.isReadableStreamLike(input)) { - return scheduleReadableStreamLike_1.scheduleReadableStreamLike(input, scheduler); - } - } - throw throwUnobservableError_1.createInvalidObservableTypeError(input); -} -scheduled$1.scheduled = scheduled; - -Object.defineProperty(from$1, "__esModule", { value: true }); -from$1.from = void 0; -var scheduled_1 = scheduled$1; -var innerFrom_1$B = innerFrom$1; -function from(input, scheduler) { - return scheduler ? scheduled_1.scheduled(input, scheduler) : innerFrom_1$B.innerFrom(input); -} -from$1.from = from; - -Object.defineProperty(of$1, "__esModule", { value: true }); -of$1.of = void 0; -var args_1$c = args; -var from_1$6 = from$1; -function of() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var scheduler = args_1$c.popScheduler(args); - return from_1$6.from(args, scheduler); -} -of$1.of = of; - -var throwError$2 = {}; - -Object.defineProperty(throwError$2, "__esModule", { value: true }); -throwError$2.throwError = void 0; -var Observable_1$g = Observable$1; -var isFunction_1$d = isFunction$1; -function throwError$1(errorOrErrorFactory, scheduler) { - var errorFactory = isFunction_1$d.isFunction(errorOrErrorFactory) ? errorOrErrorFactory : function () { return errorOrErrorFactory; }; - var init = function (subscriber) { return subscriber.error(errorFactory()); }; - return new Observable_1$g.Observable(scheduler ? function (subscriber) { return scheduler.schedule(init, 0, subscriber); } : init); -} -throwError$2.throwError = throwError$1; - -(function (exports) { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.observeNotification = exports.Notification = exports.NotificationKind = void 0; - var empty_1 = empty; - var of_1 = of$1; - var throwError_1 = throwError$2; - var isFunction_1 = isFunction$1; - (function (NotificationKind) { - NotificationKind["NEXT"] = "N"; - NotificationKind["ERROR"] = "E"; - NotificationKind["COMPLETE"] = "C"; - })(exports.NotificationKind || (exports.NotificationKind = {})); - var Notification = (function () { - function Notification(kind, value, error) { - this.kind = kind; - this.value = value; - this.error = error; - this.hasValue = kind === 'N'; - } - Notification.prototype.observe = function (observer) { - return observeNotification(this, observer); - }; - Notification.prototype.do = function (nextHandler, errorHandler, completeHandler) { - var _a = this, kind = _a.kind, value = _a.value, error = _a.error; - return kind === 'N' ? nextHandler === null || nextHandler === void 0 ? void 0 : nextHandler(value) : kind === 'E' ? errorHandler === null || errorHandler === void 0 ? void 0 : errorHandler(error) : completeHandler === null || completeHandler === void 0 ? void 0 : completeHandler(); - }; - Notification.prototype.accept = function (nextOrObserver, error, complete) { - var _a; - return isFunction_1.isFunction((_a = nextOrObserver) === null || _a === void 0 ? void 0 : _a.next) - ? this.observe(nextOrObserver) - : this.do(nextOrObserver, error, complete); - }; - Notification.prototype.toObservable = function () { - var _a = this, kind = _a.kind, value = _a.value, error = _a.error; - var result = kind === 'N' - ? - of_1.of(value) - : - kind === 'E' - ? - throwError_1.throwError(function () { return error; }) - : - kind === 'C' - ? - empty_1.EMPTY - : - 0; - if (!result) { - throw new TypeError("Unexpected notification kind " + kind); - } - return result; - }; - Notification.createNext = function (value) { - return new Notification('N', value); - }; - Notification.createError = function (err) { - return new Notification('E', undefined, err); - }; - Notification.createComplete = function () { - return Notification.completeNotification; - }; - Notification.completeNotification = new Notification('C'); - return Notification; - }()); - exports.Notification = Notification; - function observeNotification(notification, observer) { - var _a, _b, _c; - var _d = notification, kind = _d.kind, value = _d.value, error = _d.error; - if (typeof kind !== 'string') { - throw new TypeError('Invalid notification, missing "kind"'); - } - kind === 'N' ? (_a = observer.next) === null || _a === void 0 ? void 0 : _a.call(observer, value) : kind === 'E' ? (_b = observer.error) === null || _b === void 0 ? void 0 : _b.call(observer, error) : (_c = observer.complete) === null || _c === void 0 ? void 0 : _c.call(observer); - } - exports.observeNotification = observeNotification; - -} (Notification)); - -var isObservable$1 = {}; - -Object.defineProperty(isObservable$1, "__esModule", { value: true }); -isObservable$1.isObservable = void 0; -var Observable_1$f = Observable$1; -var isFunction_1$c = isFunction$1; -function isObservable(obj) { - return !!obj && (obj instanceof Observable_1$f.Observable || (isFunction_1$c.isFunction(obj.lift) && isFunction_1$c.isFunction(obj.subscribe))); -} -isObservable$1.isObservable = isObservable; - -var lastValueFrom$1 = {}; - -var EmptyError = {}; - -Object.defineProperty(EmptyError, "__esModule", { value: true }); -EmptyError.EmptyError = void 0; -var createErrorClass_1$3 = createErrorClass$1; -EmptyError.EmptyError = createErrorClass_1$3.createErrorClass(function (_super) { return function EmptyErrorImpl() { - _super(this); - this.name = 'EmptyError'; - this.message = 'no elements in sequence'; -}; }); - -Object.defineProperty(lastValueFrom$1, "__esModule", { value: true }); -lastValueFrom$1.lastValueFrom = void 0; -var EmptyError_1$5 = EmptyError; -function lastValueFrom(source, config) { - var hasConfig = typeof config === 'object'; - return new Promise(function (resolve, reject) { - var _hasValue = false; - var _value; - source.subscribe({ - next: function (value) { - _value = value; - _hasValue = true; - }, - error: reject, - complete: function () { - if (_hasValue) { - resolve(_value); - } - else if (hasConfig) { - resolve(config.defaultValue); - } - else { - reject(new EmptyError_1$5.EmptyError()); - } - }, - }); - }); -} -lastValueFrom$1.lastValueFrom = lastValueFrom; - -var firstValueFrom$1 = {}; - -Object.defineProperty(firstValueFrom$1, "__esModule", { value: true }); -firstValueFrom$1.firstValueFrom = void 0; -var EmptyError_1$4 = EmptyError; -var Subscriber_1$1 = Subscriber; -function firstValueFrom(source, config) { - var hasConfig = typeof config === 'object'; - return new Promise(function (resolve, reject) { - var subscriber = new Subscriber_1$1.SafeSubscriber({ - next: function (value) { - resolve(value); - subscriber.unsubscribe(); - }, - error: reject, - complete: function () { - if (hasConfig) { - resolve(config.defaultValue); - } - else { - reject(new EmptyError_1$4.EmptyError()); - } - }, - }); - source.subscribe(subscriber); - }); -} -firstValueFrom$1.firstValueFrom = firstValueFrom; - -var ArgumentOutOfRangeError = {}; - -Object.defineProperty(ArgumentOutOfRangeError, "__esModule", { value: true }); -ArgumentOutOfRangeError.ArgumentOutOfRangeError = void 0; -var createErrorClass_1$2 = createErrorClass$1; -ArgumentOutOfRangeError.ArgumentOutOfRangeError = createErrorClass_1$2.createErrorClass(function (_super) { - return function ArgumentOutOfRangeErrorImpl() { - _super(this); - this.name = 'ArgumentOutOfRangeError'; - this.message = 'argument out of range'; - }; -}); - -var NotFoundError = {}; - -Object.defineProperty(NotFoundError, "__esModule", { value: true }); -NotFoundError.NotFoundError = void 0; -var createErrorClass_1$1 = createErrorClass$1; -NotFoundError.NotFoundError = createErrorClass_1$1.createErrorClass(function (_super) { - return function NotFoundErrorImpl(message) { - _super(this); - this.name = 'NotFoundError'; - this.message = message; - }; -}); - -var SequenceError = {}; - -Object.defineProperty(SequenceError, "__esModule", { value: true }); -SequenceError.SequenceError = void 0; -var createErrorClass_1 = createErrorClass$1; -SequenceError.SequenceError = createErrorClass_1.createErrorClass(function (_super) { - return function SequenceErrorImpl(message) { - _super(this); - this.name = 'SequenceError'; - this.message = message; - }; -}); - -var timeout = {}; - -var isDate = {}; - -Object.defineProperty(isDate, "__esModule", { value: true }); -isDate.isValidDate = void 0; -function isValidDate(value) { - return value instanceof Date && !isNaN(value); -} -isDate.isValidDate = isValidDate; - -(function (exports) { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.timeout = exports.TimeoutError = void 0; - var async_1 = async; - var isDate_1 = isDate; - var lift_1 = lift; - var innerFrom_1 = innerFrom$1; - var createErrorClass_1 = createErrorClass$1; - var OperatorSubscriber_1 = OperatorSubscriber$1; - var executeSchedule_1 = executeSchedule$1; - exports.TimeoutError = createErrorClass_1.createErrorClass(function (_super) { - return function TimeoutErrorImpl(info) { - if (info === void 0) { info = null; } - _super(this); - this.message = 'Timeout has occurred'; - this.name = 'TimeoutError'; - this.info = info; - }; - }); - function timeout(config, schedulerArg) { - var _a = (isDate_1.isValidDate(config) ? { first: config } : typeof config === 'number' ? { each: config } : config), first = _a.first, each = _a.each, _b = _a.with, _with = _b === void 0 ? timeoutErrorFactory : _b, _c = _a.scheduler, scheduler = _c === void 0 ? schedulerArg !== null && schedulerArg !== void 0 ? schedulerArg : async_1.asyncScheduler : _c, _d = _a.meta, meta = _d === void 0 ? null : _d; - if (first == null && each == null) { - throw new TypeError('No timeout provided.'); - } - return lift_1.operate(function (source, subscriber) { - var originalSourceSubscription; - var timerSubscription; - var lastValue = null; - var seen = 0; - var startTimer = function (delay) { - timerSubscription = executeSchedule_1.executeSchedule(subscriber, scheduler, function () { - try { - originalSourceSubscription.unsubscribe(); - innerFrom_1.innerFrom(_with({ - meta: meta, - lastValue: lastValue, - seen: seen, - })).subscribe(subscriber); - } - catch (err) { - subscriber.error(err); - } - }, delay); - }; - originalSourceSubscription = source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) { - timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.unsubscribe(); - seen++; - subscriber.next((lastValue = value)); - each > 0 && startTimer(each); - }, undefined, undefined, function () { - if (!(timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.closed)) { - timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.unsubscribe(); - } - lastValue = null; - })); - !seen && startTimer(first != null ? (typeof first === 'number' ? first : +first - scheduler.now()) : each); - }); - } - exports.timeout = timeout; - function timeoutErrorFactory(info) { - throw new exports.TimeoutError(info); - } - -} (timeout)); - -var bindCallback$1 = {}; - -var bindCallbackInternals$1 = {}; - -var mapOneOrManyArgs$1 = {}; - -var map$2 = {}; - -Object.defineProperty(map$2, "__esModule", { value: true }); -map$2.map = void 0; -var lift_1$10 = lift; -var OperatorSubscriber_1$S = OperatorSubscriber$1; -function map$1(project, thisArg) { - return lift_1$10.operate(function (source, subscriber) { - var index = 0; - source.subscribe(OperatorSubscriber_1$S.createOperatorSubscriber(subscriber, function (value) { - subscriber.next(project.call(thisArg, value, index++)); - })); - }); -} -map$2.map = map$1; - -var __read$g = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -var __spreadArray$f = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { - for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) - to[j] = from[i]; - return to; -}; -Object.defineProperty(mapOneOrManyArgs$1, "__esModule", { value: true }); -mapOneOrManyArgs$1.mapOneOrManyArgs = void 0; -var map_1$5 = map$2; -var isArray$4 = Array.isArray; -function callOrApply(fn, args) { - return isArray$4(args) ? fn.apply(void 0, __spreadArray$f([], __read$g(args))) : fn(args); -} -function mapOneOrManyArgs(fn) { - return map_1$5.map(function (args) { return callOrApply(fn, args); }); -} -mapOneOrManyArgs$1.mapOneOrManyArgs = mapOneOrManyArgs; - -var __read$f = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -var __spreadArray$e = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { - for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) - to[j] = from[i]; - return to; -}; -Object.defineProperty(bindCallbackInternals$1, "__esModule", { value: true }); -bindCallbackInternals$1.bindCallbackInternals = void 0; -var isScheduler_1$2 = isScheduler$1; -var Observable_1$e = Observable$1; -var subscribeOn_1 = subscribeOn$1; -var mapOneOrManyArgs_1$6 = mapOneOrManyArgs$1; -var observeOn_1 = observeOn$1; -var AsyncSubject_1$1 = AsyncSubject$1; -function bindCallbackInternals(isNodeStyle, callbackFunc, resultSelector, scheduler) { - if (resultSelector) { - if (isScheduler_1$2.isScheduler(resultSelector)) { - scheduler = resultSelector; - } - else { - return function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return bindCallbackInternals(isNodeStyle, callbackFunc, scheduler) - .apply(this, args) - .pipe(mapOneOrManyArgs_1$6.mapOneOrManyArgs(resultSelector)); - }; - } - } - if (scheduler) { - return function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return bindCallbackInternals(isNodeStyle, callbackFunc) - .apply(this, args) - .pipe(subscribeOn_1.subscribeOn(scheduler), observeOn_1.observeOn(scheduler)); - }; - } - return function () { - var _this = this; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var subject = new AsyncSubject_1$1.AsyncSubject(); - var uninitialized = true; - return new Observable_1$e.Observable(function (subscriber) { - var subs = subject.subscribe(subscriber); - if (uninitialized) { - uninitialized = false; - var isAsync_1 = false; - var isComplete_1 = false; - callbackFunc.apply(_this, __spreadArray$e(__spreadArray$e([], __read$f(args)), [ - function () { - var results = []; - for (var _i = 0; _i < arguments.length; _i++) { - results[_i] = arguments[_i]; - } - if (isNodeStyle) { - var err = results.shift(); - if (err != null) { - subject.error(err); - return; - } - } - subject.next(1 < results.length ? results : results[0]); - isComplete_1 = true; - if (isAsync_1) { - subject.complete(); - } - }, - ])); - if (isComplete_1) { - subject.complete(); - } - isAsync_1 = true; - } - return subs; - }); - }; -} -bindCallbackInternals$1.bindCallbackInternals = bindCallbackInternals; - -Object.defineProperty(bindCallback$1, "__esModule", { value: true }); -bindCallback$1.bindCallback = void 0; -var bindCallbackInternals_1$1 = bindCallbackInternals$1; -function bindCallback(callbackFunc, resultSelector, scheduler) { - return bindCallbackInternals_1$1.bindCallbackInternals(false, callbackFunc, resultSelector, scheduler); -} -bindCallback$1.bindCallback = bindCallback; - -var bindNodeCallback$1 = {}; - -Object.defineProperty(bindNodeCallback$1, "__esModule", { value: true }); -bindNodeCallback$1.bindNodeCallback = void 0; -var bindCallbackInternals_1 = bindCallbackInternals$1; -function bindNodeCallback(callbackFunc, resultSelector, scheduler) { - return bindCallbackInternals_1.bindCallbackInternals(true, callbackFunc, resultSelector, scheduler); -} -bindNodeCallback$1.bindNodeCallback = bindNodeCallback; - -var combineLatest$3 = {}; - -var argsArgArrayOrObject$1 = {}; - -Object.defineProperty(argsArgArrayOrObject$1, "__esModule", { value: true }); -argsArgArrayOrObject$1.argsArgArrayOrObject = void 0; -var isArray$3 = Array.isArray; -var getPrototypeOf = Object.getPrototypeOf, objectProto = Object.prototype, getKeys = Object.keys; -function argsArgArrayOrObject(args) { - if (args.length === 1) { - var first_1 = args[0]; - if (isArray$3(first_1)) { - return { args: first_1, keys: null }; - } - if (isPOJO(first_1)) { - var keys = getKeys(first_1); - return { - args: keys.map(function (key) { return first_1[key]; }), - keys: keys, - }; - } - } - return { args: args, keys: null }; -} -argsArgArrayOrObject$1.argsArgArrayOrObject = argsArgArrayOrObject; -function isPOJO(obj) { - return obj && typeof obj === 'object' && getPrototypeOf(obj) === objectProto; -} - -var createObject$1 = {}; - -Object.defineProperty(createObject$1, "__esModule", { value: true }); -createObject$1.createObject = void 0; -function createObject(keys, values) { - return keys.reduce(function (result, key, i) { return ((result[key] = values[i]), result); }, {}); -} -createObject$1.createObject = createObject; - -Object.defineProperty(combineLatest$3, "__esModule", { value: true }); -combineLatest$3.combineLatestInit = combineLatest$3.combineLatest = void 0; -var Observable_1$d = Observable$1; -var argsArgArrayOrObject_1$1 = argsArgArrayOrObject$1; -var from_1$5 = from$1; -var identity_1$d = identity$1; -var mapOneOrManyArgs_1$5 = mapOneOrManyArgs$1; -var args_1$b = args; -var createObject_1$1 = createObject$1; -var OperatorSubscriber_1$R = OperatorSubscriber$1; -var executeSchedule_1$3 = executeSchedule$1; -function combineLatest$2() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var scheduler = args_1$b.popScheduler(args); - var resultSelector = args_1$b.popResultSelector(args); - var _a = argsArgArrayOrObject_1$1.argsArgArrayOrObject(args), observables = _a.args, keys = _a.keys; - if (observables.length === 0) { - return from_1$5.from([], scheduler); - } - var result = new Observable_1$d.Observable(combineLatestInit(observables, scheduler, keys - ? - function (values) { return createObject_1$1.createObject(keys, values); } - : - identity_1$d.identity)); - return resultSelector ? result.pipe(mapOneOrManyArgs_1$5.mapOneOrManyArgs(resultSelector)) : result; -} -combineLatest$3.combineLatest = combineLatest$2; -function combineLatestInit(observables, scheduler, valueTransform) { - if (valueTransform === void 0) { valueTransform = identity_1$d.identity; } - return function (subscriber) { - maybeSchedule(scheduler, function () { - var length = observables.length; - var values = new Array(length); - var active = length; - var remainingFirstValues = length; - var _loop_1 = function (i) { - maybeSchedule(scheduler, function () { - var source = from_1$5.from(observables[i], scheduler); - var hasFirstValue = false; - source.subscribe(OperatorSubscriber_1$R.createOperatorSubscriber(subscriber, function (value) { - values[i] = value; - if (!hasFirstValue) { - hasFirstValue = true; - remainingFirstValues--; - } - if (!remainingFirstValues) { - subscriber.next(valueTransform(values.slice())); - } - }, function () { - if (!--active) { - subscriber.complete(); - } - })); - }, subscriber); - }; - for (var i = 0; i < length; i++) { - _loop_1(i); - } - }, subscriber); - }; -} -combineLatest$3.combineLatestInit = combineLatestInit; -function maybeSchedule(scheduler, execute, subscription) { - if (scheduler) { - executeSchedule_1$3.executeSchedule(subscription, scheduler, execute); - } - else { - execute(); - } -} - -var concat$3 = {}; - -var concatAll$1 = {}; - -var mergeAll$1 = {}; - -var mergeMap$1 = {}; - -var mergeInternals$1 = {}; - -Object.defineProperty(mergeInternals$1, "__esModule", { value: true }); -mergeInternals$1.mergeInternals = void 0; -var innerFrom_1$A = innerFrom$1; -var executeSchedule_1$2 = executeSchedule$1; -var OperatorSubscriber_1$Q = OperatorSubscriber$1; -function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) { - var buffer = []; - var active = 0; - var index = 0; - var isComplete = false; - var checkComplete = function () { - if (isComplete && !buffer.length && !active) { - subscriber.complete(); - } - }; - var outerNext = function (value) { return (active < concurrent ? doInnerSub(value) : buffer.push(value)); }; - var doInnerSub = function (value) { - expand && subscriber.next(value); - active++; - var innerComplete = false; - innerFrom_1$A.innerFrom(project(value, index++)).subscribe(OperatorSubscriber_1$Q.createOperatorSubscriber(subscriber, function (innerValue) { - onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue); - if (expand) { - outerNext(innerValue); - } - else { - subscriber.next(innerValue); - } - }, function () { - innerComplete = true; - }, undefined, function () { - if (innerComplete) { - try { - active--; - var _loop_1 = function () { - var bufferedValue = buffer.shift(); - if (innerSubScheduler) { - executeSchedule_1$2.executeSchedule(subscriber, innerSubScheduler, function () { return doInnerSub(bufferedValue); }); - } - else { - doInnerSub(bufferedValue); - } - }; - while (buffer.length && active < concurrent) { - _loop_1(); - } - checkComplete(); - } - catch (err) { - subscriber.error(err); - } - } - })); - }; - source.subscribe(OperatorSubscriber_1$Q.createOperatorSubscriber(subscriber, outerNext, function () { - isComplete = true; - checkComplete(); - })); - return function () { - additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer(); - }; -} -mergeInternals$1.mergeInternals = mergeInternals; - -Object.defineProperty(mergeMap$1, "__esModule", { value: true }); -mergeMap$1.mergeMap = void 0; -var map_1$4 = map$2; -var innerFrom_1$z = innerFrom$1; -var lift_1$$ = lift; -var mergeInternals_1$2 = mergeInternals$1; -var isFunction_1$b = isFunction$1; -function mergeMap(project, resultSelector, concurrent) { - if (concurrent === void 0) { concurrent = Infinity; } - if (isFunction_1$b.isFunction(resultSelector)) { - return mergeMap(function (a, i) { return map_1$4.map(function (b, ii) { return resultSelector(a, b, i, ii); })(innerFrom_1$z.innerFrom(project(a, i))); }, concurrent); - } - else if (typeof resultSelector === 'number') { - concurrent = resultSelector; - } - return lift_1$$.operate(function (source, subscriber) { return mergeInternals_1$2.mergeInternals(source, subscriber, project, concurrent); }); -} -mergeMap$1.mergeMap = mergeMap; - -Object.defineProperty(mergeAll$1, "__esModule", { value: true }); -mergeAll$1.mergeAll = void 0; -var mergeMap_1$6 = mergeMap$1; -var identity_1$c = identity$1; -function mergeAll(concurrent) { - if (concurrent === void 0) { concurrent = Infinity; } - return mergeMap_1$6.mergeMap(identity_1$c.identity, concurrent); -} -mergeAll$1.mergeAll = mergeAll; - -Object.defineProperty(concatAll$1, "__esModule", { value: true }); -concatAll$1.concatAll = void 0; -var mergeAll_1$2 = mergeAll$1; -function concatAll() { - return mergeAll_1$2.mergeAll(1); -} -concatAll$1.concatAll = concatAll; - -Object.defineProperty(concat$3, "__esModule", { value: true }); -concat$3.concat = void 0; -var concatAll_1$1 = concatAll$1; -var args_1$a = args; -var from_1$4 = from$1; -function concat$2() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return concatAll_1$1.concatAll()(from_1$4.from(args, args_1$a.popScheduler(args))); -} -concat$3.concat = concat$2; - -var connectable$1 = {}; - -var defer$1 = {}; - -Object.defineProperty(defer$1, "__esModule", { value: true }); -defer$1.defer = void 0; -var Observable_1$c = Observable$1; -var innerFrom_1$y = innerFrom$1; -function defer(observableFactory) { - return new Observable_1$c.Observable(function (subscriber) { - innerFrom_1$y.innerFrom(observableFactory()).subscribe(subscriber); - }); -} -defer$1.defer = defer; - -Object.defineProperty(connectable$1, "__esModule", { value: true }); -connectable$1.connectable = void 0; -var Subject_1$b = Subject$1; -var Observable_1$b = Observable$1; -var defer_1$2 = defer$1; -var DEFAULT_CONFIG$1 = { - connector: function () { return new Subject_1$b.Subject(); }, - resetOnDisconnect: true, -}; -function connectable(source, config) { - if (config === void 0) { config = DEFAULT_CONFIG$1; } - var connection = null; - var connector = config.connector, _a = config.resetOnDisconnect, resetOnDisconnect = _a === void 0 ? true : _a; - var subject = connector(); - var result = new Observable_1$b.Observable(function (subscriber) { - return subject.subscribe(subscriber); - }); - result.connect = function () { - if (!connection || connection.closed) { - connection = defer_1$2.defer(function () { return source; }).subscribe(subject); - if (resetOnDisconnect) { - connection.add(function () { return (subject = connector()); }); - } - } - return connection; - }; - return result; -} -connectable$1.connectable = connectable; - -var forkJoin$1 = {}; - -Object.defineProperty(forkJoin$1, "__esModule", { value: true }); -forkJoin$1.forkJoin = void 0; -var Observable_1$a = Observable$1; -var argsArgArrayOrObject_1 = argsArgArrayOrObject$1; -var innerFrom_1$x = innerFrom$1; -var args_1$9 = args; -var OperatorSubscriber_1$P = OperatorSubscriber$1; -var mapOneOrManyArgs_1$4 = mapOneOrManyArgs$1; -var createObject_1 = createObject$1; -function forkJoin() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var resultSelector = args_1$9.popResultSelector(args); - var _a = argsArgArrayOrObject_1.argsArgArrayOrObject(args), sources = _a.args, keys = _a.keys; - var result = new Observable_1$a.Observable(function (subscriber) { - var length = sources.length; - if (!length) { - subscriber.complete(); - return; - } - var values = new Array(length); - var remainingCompletions = length; - var remainingEmissions = length; - var _loop_1 = function (sourceIndex) { - var hasValue = false; - innerFrom_1$x.innerFrom(sources[sourceIndex]).subscribe(OperatorSubscriber_1$P.createOperatorSubscriber(subscriber, function (value) { - if (!hasValue) { - hasValue = true; - remainingEmissions--; - } - values[sourceIndex] = value; - }, function () { return remainingCompletions--; }, undefined, function () { - if (!remainingCompletions || !hasValue) { - if (!remainingEmissions) { - subscriber.next(keys ? createObject_1.createObject(keys, values) : values); - } - subscriber.complete(); - } - })); - }; - for (var sourceIndex = 0; sourceIndex < length; sourceIndex++) { - _loop_1(sourceIndex); - } - }); - return resultSelector ? result.pipe(mapOneOrManyArgs_1$4.mapOneOrManyArgs(resultSelector)) : result; -} -forkJoin$1.forkJoin = forkJoin; - -var fromEvent$1 = {}; - -var __read$e = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -Object.defineProperty(fromEvent$1, "__esModule", { value: true }); -fromEvent$1.fromEvent = void 0; -var innerFrom_1$w = innerFrom$1; -var Observable_1$9 = Observable$1; -var mergeMap_1$5 = mergeMap$1; -var isArrayLike_1 = isArrayLike; -var isFunction_1$a = isFunction$1; -var mapOneOrManyArgs_1$3 = mapOneOrManyArgs$1; -var nodeEventEmitterMethods = ['addListener', 'removeListener']; -var eventTargetMethods = ['addEventListener', 'removeEventListener']; -var jqueryMethods = ['on', 'off']; -function fromEvent(target, eventName, options, resultSelector) { - if (isFunction_1$a.isFunction(options)) { - resultSelector = options; - options = undefined; - } - if (resultSelector) { - return fromEvent(target, eventName, options).pipe(mapOneOrManyArgs_1$3.mapOneOrManyArgs(resultSelector)); - } - var _a = __read$e(isEventTarget(target) - ? eventTargetMethods.map(function (methodName) { return function (handler) { return target[methodName](eventName, handler, options); }; }) - : - isNodeStyleEventEmitter(target) - ? nodeEventEmitterMethods.map(toCommonHandlerRegistry(target, eventName)) - : isJQueryStyleEventEmitter(target) - ? jqueryMethods.map(toCommonHandlerRegistry(target, eventName)) - : [], 2), add = _a[0], remove = _a[1]; - if (!add) { - if (isArrayLike_1.isArrayLike(target)) { - return mergeMap_1$5.mergeMap(function (subTarget) { return fromEvent(subTarget, eventName, options); })(innerFrom_1$w.innerFrom(target)); - } - } - if (!add) { - throw new TypeError('Invalid event target'); - } - return new Observable_1$9.Observable(function (subscriber) { - var handler = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return subscriber.next(1 < args.length ? args : args[0]); - }; - add(handler); - return function () { return remove(handler); }; - }); -} -fromEvent$1.fromEvent = fromEvent; -function toCommonHandlerRegistry(target, eventName) { - return function (methodName) { return function (handler) { return target[methodName](eventName, handler); }; }; -} -function isNodeStyleEventEmitter(target) { - return isFunction_1$a.isFunction(target.addListener) && isFunction_1$a.isFunction(target.removeListener); -} -function isJQueryStyleEventEmitter(target) { - return isFunction_1$a.isFunction(target.on) && isFunction_1$a.isFunction(target.off); -} -function isEventTarget(target) { - return isFunction_1$a.isFunction(target.addEventListener) && isFunction_1$a.isFunction(target.removeEventListener); -} - -var fromEventPattern$1 = {}; - -Object.defineProperty(fromEventPattern$1, "__esModule", { value: true }); -fromEventPattern$1.fromEventPattern = void 0; -var Observable_1$8 = Observable$1; -var isFunction_1$9 = isFunction$1; -var mapOneOrManyArgs_1$2 = mapOneOrManyArgs$1; -function fromEventPattern(addHandler, removeHandler, resultSelector) { - if (resultSelector) { - return fromEventPattern(addHandler, removeHandler).pipe(mapOneOrManyArgs_1$2.mapOneOrManyArgs(resultSelector)); - } - return new Observable_1$8.Observable(function (subscriber) { - var handler = function () { - var e = []; - for (var _i = 0; _i < arguments.length; _i++) { - e[_i] = arguments[_i]; - } - return subscriber.next(e.length === 1 ? e[0] : e); - }; - var retValue = addHandler(handler); - return isFunction_1$9.isFunction(removeHandler) ? function () { return removeHandler(handler, retValue); } : undefined; - }); -} -fromEventPattern$1.fromEventPattern = fromEventPattern; - -var generate$1 = {}; - -var __generator = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -Object.defineProperty(generate$1, "__esModule", { value: true }); -generate$1.generate = void 0; -var identity_1$b = identity$1; -var isScheduler_1$1 = isScheduler$1; -var defer_1$1 = defer$1; -var scheduleIterable_1 = scheduleIterable$1; -function generate(initialStateOrOptions, condition, iterate, resultSelectorOrScheduler, scheduler) { - var _a, _b; - var resultSelector; - var initialState; - if (arguments.length === 1) { - (_a = initialStateOrOptions, initialState = _a.initialState, condition = _a.condition, iterate = _a.iterate, _b = _a.resultSelector, resultSelector = _b === void 0 ? identity_1$b.identity : _b, scheduler = _a.scheduler); - } - else { - initialState = initialStateOrOptions; - if (!resultSelectorOrScheduler || isScheduler_1$1.isScheduler(resultSelectorOrScheduler)) { - resultSelector = identity_1$b.identity; - scheduler = resultSelectorOrScheduler; - } - else { - resultSelector = resultSelectorOrScheduler; - } - } - function gen() { - var state; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - state = initialState; - _a.label = 1; - case 1: - if (!(!condition || condition(state))) return [3, 4]; - return [4, resultSelector(state)]; - case 2: - _a.sent(); - _a.label = 3; - case 3: - state = iterate(state); - return [3, 1]; - case 4: return [2]; - } - }); - } - return defer_1$1.defer((scheduler - ? - function () { return scheduleIterable_1.scheduleIterable(gen(), scheduler); } - : - gen)); -} -generate$1.generate = generate; - -var iif$1 = {}; - -Object.defineProperty(iif$1, "__esModule", { value: true }); -iif$1.iif = void 0; -var defer_1 = defer$1; -function iif(condition, trueResult, falseResult) { - return defer_1.defer(function () { return (condition() ? trueResult : falseResult); }); -} -iif$1.iif = iif; - -var interval$1 = {}; - -var timer$1 = {}; - -Object.defineProperty(timer$1, "__esModule", { value: true }); -timer$1.timer = void 0; -var Observable_1$7 = Observable$1; -var async_1$a = async; -var isScheduler_1 = isScheduler$1; -var isDate_1$1 = isDate; -function timer(dueTime, intervalOrScheduler, scheduler) { - if (dueTime === void 0) { dueTime = 0; } - if (scheduler === void 0) { scheduler = async_1$a.async; } - var intervalDuration = -1; - if (intervalOrScheduler != null) { - if (isScheduler_1.isScheduler(intervalOrScheduler)) { - scheduler = intervalOrScheduler; - } - else { - intervalDuration = intervalOrScheduler; - } - } - return new Observable_1$7.Observable(function (subscriber) { - var due = isDate_1$1.isValidDate(dueTime) ? +dueTime - scheduler.now() : dueTime; - if (due < 0) { - due = 0; - } - var n = 0; - return scheduler.schedule(function () { - if (!subscriber.closed) { - subscriber.next(n++); - if (0 <= intervalDuration) { - this.schedule(undefined, intervalDuration); - } - else { - subscriber.complete(); - } - } - }, due); - }); -} -timer$1.timer = timer; - -Object.defineProperty(interval$1, "__esModule", { value: true }); -interval$1.interval = void 0; -var async_1$9 = async; -var timer_1$5 = timer$1; -function interval(period, scheduler) { - if (period === void 0) { period = 0; } - if (scheduler === void 0) { scheduler = async_1$9.asyncScheduler; } - if (period < 0) { - period = 0; - } - return timer_1$5.timer(period, period, scheduler); -} -interval$1.interval = interval; - -var merge$5 = {}; - -Object.defineProperty(merge$5, "__esModule", { value: true }); -merge$5.merge = void 0; -var mergeAll_1$1 = mergeAll$1; -var innerFrom_1$v = innerFrom$1; -var empty_1$6 = empty; -var args_1$8 = args; -var from_1$3 = from$1; -function merge$4() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var scheduler = args_1$8.popScheduler(args); - var concurrent = args_1$8.popNumber(args, Infinity); - var sources = args; - return !sources.length - ? - empty_1$6.EMPTY - : sources.length === 1 - ? - innerFrom_1$v.innerFrom(sources[0]) - : - mergeAll_1$1.mergeAll(concurrent)(from_1$3.from(sources, scheduler)); -} -merge$5.merge = merge$4; - -var never = {}; - -(function (exports) { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.never = exports.NEVER = void 0; - var Observable_1 = Observable$1; - var noop_1 = noop$2; - exports.NEVER = new Observable_1.Observable(noop_1.noop); - function never() { - return exports.NEVER; - } - exports.never = never; - -} (never)); - -var onErrorResumeNext$1 = {}; - -var argsOrArgArray$1 = {}; - -Object.defineProperty(argsOrArgArray$1, "__esModule", { value: true }); -argsOrArgArray$1.argsOrArgArray = void 0; -var isArray$2 = Array.isArray; -function argsOrArgArray(args) { - return args.length === 1 && isArray$2(args[0]) ? args[0] : args; -} -argsOrArgArray$1.argsOrArgArray = argsOrArgArray; - -Object.defineProperty(onErrorResumeNext$1, "__esModule", { value: true }); -onErrorResumeNext$1.onErrorResumeNext = void 0; -var Observable_1$6 = Observable$1; -var argsOrArgArray_1$5 = argsOrArgArray$1; -var OperatorSubscriber_1$O = OperatorSubscriber$1; -var noop_1$c = noop$2; -var innerFrom_1$u = innerFrom$1; -function onErrorResumeNext() { - var sources = []; - for (var _i = 0; _i < arguments.length; _i++) { - sources[_i] = arguments[_i]; - } - var nextSources = argsOrArgArray_1$5.argsOrArgArray(sources); - return new Observable_1$6.Observable(function (subscriber) { - var sourceIndex = 0; - var subscribeNext = function () { - if (sourceIndex < nextSources.length) { - var nextSource = void 0; - try { - nextSource = innerFrom_1$u.innerFrom(nextSources[sourceIndex++]); - } - catch (err) { - subscribeNext(); - return; - } - var innerSubscriber = new OperatorSubscriber_1$O.OperatorSubscriber(subscriber, undefined, noop_1$c.noop, noop_1$c.noop); - nextSource.subscribe(innerSubscriber); - innerSubscriber.add(subscribeNext); - } - else { - subscriber.complete(); - } - }; - subscribeNext(); - }); -} -onErrorResumeNext$1.onErrorResumeNext = onErrorResumeNext; - -var pairs$2 = {}; - -Object.defineProperty(pairs$2, "__esModule", { value: true }); -pairs$2.pairs = void 0; -var from_1$2 = from$1; -function pairs$1(obj, scheduler) { - return from_1$2.from(Object.entries(obj), scheduler); -} -pairs$2.pairs = pairs$1; - -var partition$1 = {}; - -var not$1 = {}; - -Object.defineProperty(not$1, "__esModule", { value: true }); -not$1.not = void 0; -function not(pred, thisArg) { - return function (value, index) { return !pred.call(thisArg, value, index); }; -} -not$1.not = not; - -var filter$1 = {}; - -Object.defineProperty(filter$1, "__esModule", { value: true }); -filter$1.filter = void 0; -var lift_1$_ = lift; -var OperatorSubscriber_1$N = OperatorSubscriber$1; -function filter(predicate, thisArg) { - return lift_1$_.operate(function (source, subscriber) { - var index = 0; - source.subscribe(OperatorSubscriber_1$N.createOperatorSubscriber(subscriber, function (value) { return predicate.call(thisArg, value, index++) && subscriber.next(value); })); - }); -} -filter$1.filter = filter; - -Object.defineProperty(partition$1, "__esModule", { value: true }); -partition$1.partition = void 0; -var not_1 = not$1; -var filter_1$4 = filter$1; -var innerFrom_1$t = innerFrom$1; -function partition(source, predicate, thisArg) { - return [filter_1$4.filter(predicate, thisArg)(innerFrom_1$t.innerFrom(source)), filter_1$4.filter(not_1.not(predicate, thisArg))(innerFrom_1$t.innerFrom(source))]; -} -partition$1.partition = partition; - -var race$1 = {}; - -Object.defineProperty(race$1, "__esModule", { value: true }); -race$1.raceInit = race$1.race = void 0; -var Observable_1$5 = Observable$1; -var innerFrom_1$s = innerFrom$1; -var argsOrArgArray_1$4 = argsOrArgArray$1; -var OperatorSubscriber_1$M = OperatorSubscriber$1; -function race() { - var sources = []; - for (var _i = 0; _i < arguments.length; _i++) { - sources[_i] = arguments[_i]; - } - sources = argsOrArgArray_1$4.argsOrArgArray(sources); - return sources.length === 1 ? innerFrom_1$s.innerFrom(sources[0]) : new Observable_1$5.Observable(raceInit(sources)); -} -race$1.race = race; -function raceInit(sources) { - return function (subscriber) { - var subscriptions = []; - var _loop_1 = function (i) { - subscriptions.push(innerFrom_1$s.innerFrom(sources[i]).subscribe(OperatorSubscriber_1$M.createOperatorSubscriber(subscriber, function (value) { - if (subscriptions) { - for (var s = 0; s < subscriptions.length; s++) { - s !== i && subscriptions[s].unsubscribe(); - } - subscriptions = null; - } - subscriber.next(value); - }))); - }; - for (var i = 0; subscriptions && !subscriber.closed && i < sources.length; i++) { - _loop_1(i); - } - }; -} -race$1.raceInit = raceInit; - -var range$1 = {}; - -Object.defineProperty(range$1, "__esModule", { value: true }); -range$1.range = void 0; -var Observable_1$4 = Observable$1; -var empty_1$5 = empty; -function range(start, count, scheduler) { - if (count == null) { - count = start; - start = 0; - } - if (count <= 0) { - return empty_1$5.EMPTY; - } - var end = count + start; - return new Observable_1$4.Observable(scheduler - ? - function (subscriber) { - var n = start; - return scheduler.schedule(function () { - if (n < end) { - subscriber.next(n++); - this.schedule(); - } - else { - subscriber.complete(); - } - }); - } - : - function (subscriber) { - var n = start; - while (n < end && !subscriber.closed) { - subscriber.next(n++); - } - subscriber.complete(); - }); -} -range$1.range = range; - -var using$1 = {}; - -Object.defineProperty(using$1, "__esModule", { value: true }); -using$1.using = void 0; -var Observable_1$3 = Observable$1; -var innerFrom_1$r = innerFrom$1; -var empty_1$4 = empty; -function using(resourceFactory, observableFactory) { - return new Observable_1$3.Observable(function (subscriber) { - var resource = resourceFactory(); - var result = observableFactory(resource); - var source = result ? innerFrom_1$r.innerFrom(result) : empty_1$4.EMPTY; - source.subscribe(subscriber); - return function () { - if (resource) { - resource.unsubscribe(); - } - }; - }); -} -using$1.using = using; - -var zip$3 = {}; - -var __read$d = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -var __spreadArray$d = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { - for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) - to[j] = from[i]; - return to; -}; -Object.defineProperty(zip$3, "__esModule", { value: true }); -zip$3.zip = void 0; -var Observable_1$2 = Observable$1; -var innerFrom_1$q = innerFrom$1; -var argsOrArgArray_1$3 = argsOrArgArray$1; -var empty_1$3 = empty; -var OperatorSubscriber_1$L = OperatorSubscriber$1; -var args_1$7 = args; -function zip$2() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var resultSelector = args_1$7.popResultSelector(args); - var sources = argsOrArgArray_1$3.argsOrArgArray(args); - return sources.length - ? new Observable_1$2.Observable(function (subscriber) { - var buffers = sources.map(function () { return []; }); - var completed = sources.map(function () { return false; }); - subscriber.add(function () { - buffers = completed = null; - }); - var _loop_1 = function (sourceIndex) { - innerFrom_1$q.innerFrom(sources[sourceIndex]).subscribe(OperatorSubscriber_1$L.createOperatorSubscriber(subscriber, function (value) { - buffers[sourceIndex].push(value); - if (buffers.every(function (buffer) { return buffer.length; })) { - var result = buffers.map(function (buffer) { return buffer.shift(); }); - subscriber.next(resultSelector ? resultSelector.apply(void 0, __spreadArray$d([], __read$d(result))) : result); - if (buffers.some(function (buffer, i) { return !buffer.length && completed[i]; })) { - subscriber.complete(); - } - } - }, function () { - completed[sourceIndex] = true; - !buffers[sourceIndex].length && subscriber.complete(); - })); - }; - for (var sourceIndex = 0; !subscriber.closed && sourceIndex < sources.length; sourceIndex++) { - _loop_1(sourceIndex); - } - return function () { - buffers = completed = null; - }; - }) - : empty_1$3.EMPTY; -} -zip$3.zip = zip$2; - -var types = {}; - -Object.defineProperty(types, "__esModule", { value: true }); - -var audit$1 = {}; - -Object.defineProperty(audit$1, "__esModule", { value: true }); -audit$1.audit = void 0; -var lift_1$Z = lift; -var innerFrom_1$p = innerFrom$1; -var OperatorSubscriber_1$K = OperatorSubscriber$1; -function audit(durationSelector) { - return lift_1$Z.operate(function (source, subscriber) { - var hasValue = false; - var lastValue = null; - var durationSubscriber = null; - var isComplete = false; - var endDuration = function () { - durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe(); - durationSubscriber = null; - if (hasValue) { - hasValue = false; - var value = lastValue; - lastValue = null; - subscriber.next(value); - } - isComplete && subscriber.complete(); - }; - var cleanupDuration = function () { - durationSubscriber = null; - isComplete && subscriber.complete(); - }; - source.subscribe(OperatorSubscriber_1$K.createOperatorSubscriber(subscriber, function (value) { - hasValue = true; - lastValue = value; - if (!durationSubscriber) { - innerFrom_1$p.innerFrom(durationSelector(value)).subscribe((durationSubscriber = OperatorSubscriber_1$K.createOperatorSubscriber(subscriber, endDuration, cleanupDuration))); - } - }, function () { - isComplete = true; - (!hasValue || !durationSubscriber || durationSubscriber.closed) && subscriber.complete(); - })); - }); -} -audit$1.audit = audit; - -var auditTime$1 = {}; - -Object.defineProperty(auditTime$1, "__esModule", { value: true }); -auditTime$1.auditTime = void 0; -var async_1$8 = async; -var audit_1 = audit$1; -var timer_1$4 = timer$1; -function auditTime(duration, scheduler) { - if (scheduler === void 0) { scheduler = async_1$8.asyncScheduler; } - return audit_1.audit(function () { return timer_1$4.timer(duration, scheduler); }); -} -auditTime$1.auditTime = auditTime; - -var buffer$2 = {}; - -Object.defineProperty(buffer$2, "__esModule", { value: true }); -buffer$2.buffer = void 0; -var lift_1$Y = lift; -var noop_1$b = noop$2; -var OperatorSubscriber_1$J = OperatorSubscriber$1; -var innerFrom_1$o = innerFrom$1; -function buffer$1(closingNotifier) { - return lift_1$Y.operate(function (source, subscriber) { - var currentBuffer = []; - source.subscribe(OperatorSubscriber_1$J.createOperatorSubscriber(subscriber, function (value) { return currentBuffer.push(value); }, function () { - subscriber.next(currentBuffer); - subscriber.complete(); - })); - innerFrom_1$o.innerFrom(closingNotifier).subscribe(OperatorSubscriber_1$J.createOperatorSubscriber(subscriber, function () { - var b = currentBuffer; - currentBuffer = []; - subscriber.next(b); - }, noop_1$b.noop)); - return function () { - currentBuffer = null; - }; - }); -} -buffer$2.buffer = buffer$1; - -var bufferCount$1 = {}; - -var __values$5 = (commonjsGlobal && commonjsGlobal.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(bufferCount$1, "__esModule", { value: true }); -bufferCount$1.bufferCount = void 0; -var lift_1$X = lift; -var OperatorSubscriber_1$I = OperatorSubscriber$1; -var arrRemove_1$4 = arrRemove$1; -function bufferCount(bufferSize, startBufferEvery) { - if (startBufferEvery === void 0) { startBufferEvery = null; } - startBufferEvery = startBufferEvery !== null && startBufferEvery !== void 0 ? startBufferEvery : bufferSize; - return lift_1$X.operate(function (source, subscriber) { - var buffers = []; - var count = 0; - source.subscribe(OperatorSubscriber_1$I.createOperatorSubscriber(subscriber, function (value) { - var e_1, _a, e_2, _b; - var toEmit = null; - if (count++ % startBufferEvery === 0) { - buffers.push([]); - } - try { - for (var buffers_1 = __values$5(buffers), buffers_1_1 = buffers_1.next(); !buffers_1_1.done; buffers_1_1 = buffers_1.next()) { - var buffer = buffers_1_1.value; - buffer.push(value); - if (bufferSize <= buffer.length) { - toEmit = toEmit !== null && toEmit !== void 0 ? toEmit : []; - toEmit.push(buffer); - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (buffers_1_1 && !buffers_1_1.done && (_a = buffers_1.return)) _a.call(buffers_1); - } - finally { if (e_1) throw e_1.error; } - } - if (toEmit) { - try { - for (var toEmit_1 = __values$5(toEmit), toEmit_1_1 = toEmit_1.next(); !toEmit_1_1.done; toEmit_1_1 = toEmit_1.next()) { - var buffer = toEmit_1_1.value; - arrRemove_1$4.arrRemove(buffers, buffer); - subscriber.next(buffer); - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (toEmit_1_1 && !toEmit_1_1.done && (_b = toEmit_1.return)) _b.call(toEmit_1); - } - finally { if (e_2) throw e_2.error; } - } - } - }, function () { - var e_3, _a; - try { - for (var buffers_2 = __values$5(buffers), buffers_2_1 = buffers_2.next(); !buffers_2_1.done; buffers_2_1 = buffers_2.next()) { - var buffer = buffers_2_1.value; - subscriber.next(buffer); - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (buffers_2_1 && !buffers_2_1.done && (_a = buffers_2.return)) _a.call(buffers_2); - } - finally { if (e_3) throw e_3.error; } - } - subscriber.complete(); - }, undefined, function () { - buffers = null; - })); - }); -} -bufferCount$1.bufferCount = bufferCount; - -var bufferTime$1 = {}; - -var __values$4 = (commonjsGlobal && commonjsGlobal.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(bufferTime$1, "__esModule", { value: true }); -bufferTime$1.bufferTime = void 0; -var Subscription_1$3 = Subscription$1; -var lift_1$W = lift; -var OperatorSubscriber_1$H = OperatorSubscriber$1; -var arrRemove_1$3 = arrRemove$1; -var async_1$7 = async; -var args_1$6 = args; -var executeSchedule_1$1 = executeSchedule$1; -function bufferTime(bufferTimeSpan) { - var _a, _b; - var otherArgs = []; - for (var _i = 1; _i < arguments.length; _i++) { - otherArgs[_i - 1] = arguments[_i]; - } - var scheduler = (_a = args_1$6.popScheduler(otherArgs)) !== null && _a !== void 0 ? _a : async_1$7.asyncScheduler; - var bufferCreationInterval = (_b = otherArgs[0]) !== null && _b !== void 0 ? _b : null; - var maxBufferSize = otherArgs[1] || Infinity; - return lift_1$W.operate(function (source, subscriber) { - var bufferRecords = []; - var restartOnEmit = false; - var emit = function (record) { - var buffer = record.buffer, subs = record.subs; - subs.unsubscribe(); - arrRemove_1$3.arrRemove(bufferRecords, record); - subscriber.next(buffer); - restartOnEmit && startBuffer(); - }; - var startBuffer = function () { - if (bufferRecords) { - var subs = new Subscription_1$3.Subscription(); - subscriber.add(subs); - var buffer = []; - var record_1 = { - buffer: buffer, - subs: subs, - }; - bufferRecords.push(record_1); - executeSchedule_1$1.executeSchedule(subs, scheduler, function () { return emit(record_1); }, bufferTimeSpan); - } - }; - if (bufferCreationInterval !== null && bufferCreationInterval >= 0) { - executeSchedule_1$1.executeSchedule(subscriber, scheduler, startBuffer, bufferCreationInterval, true); - } - else { - restartOnEmit = true; - } - startBuffer(); - var bufferTimeSubscriber = OperatorSubscriber_1$H.createOperatorSubscriber(subscriber, function (value) { - var e_1, _a; - var recordsCopy = bufferRecords.slice(); - try { - for (var recordsCopy_1 = __values$4(recordsCopy), recordsCopy_1_1 = recordsCopy_1.next(); !recordsCopy_1_1.done; recordsCopy_1_1 = recordsCopy_1.next()) { - var record = recordsCopy_1_1.value; - var buffer = record.buffer; - buffer.push(value); - maxBufferSize <= buffer.length && emit(record); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (recordsCopy_1_1 && !recordsCopy_1_1.done && (_a = recordsCopy_1.return)) _a.call(recordsCopy_1); - } - finally { if (e_1) throw e_1.error; } - } - }, function () { - while (bufferRecords === null || bufferRecords === void 0 ? void 0 : bufferRecords.length) { - subscriber.next(bufferRecords.shift().buffer); - } - bufferTimeSubscriber === null || bufferTimeSubscriber === void 0 ? void 0 : bufferTimeSubscriber.unsubscribe(); - subscriber.complete(); - subscriber.unsubscribe(); - }, undefined, function () { return (bufferRecords = null); }); - source.subscribe(bufferTimeSubscriber); - }); -} -bufferTime$1.bufferTime = bufferTime; - -var bufferToggle$1 = {}; - -var __values$3 = (commonjsGlobal && commonjsGlobal.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(bufferToggle$1, "__esModule", { value: true }); -bufferToggle$1.bufferToggle = void 0; -var Subscription_1$2 = Subscription$1; -var lift_1$V = lift; -var innerFrom_1$n = innerFrom$1; -var OperatorSubscriber_1$G = OperatorSubscriber$1; -var noop_1$a = noop$2; -var arrRemove_1$2 = arrRemove$1; -function bufferToggle(openings, closingSelector) { - return lift_1$V.operate(function (source, subscriber) { - var buffers = []; - innerFrom_1$n.innerFrom(openings).subscribe(OperatorSubscriber_1$G.createOperatorSubscriber(subscriber, function (openValue) { - var buffer = []; - buffers.push(buffer); - var closingSubscription = new Subscription_1$2.Subscription(); - var emitBuffer = function () { - arrRemove_1$2.arrRemove(buffers, buffer); - subscriber.next(buffer); - closingSubscription.unsubscribe(); - }; - closingSubscription.add(innerFrom_1$n.innerFrom(closingSelector(openValue)).subscribe(OperatorSubscriber_1$G.createOperatorSubscriber(subscriber, emitBuffer, noop_1$a.noop))); - }, noop_1$a.noop)); - source.subscribe(OperatorSubscriber_1$G.createOperatorSubscriber(subscriber, function (value) { - var e_1, _a; - try { - for (var buffers_1 = __values$3(buffers), buffers_1_1 = buffers_1.next(); !buffers_1_1.done; buffers_1_1 = buffers_1.next()) { - var buffer = buffers_1_1.value; - buffer.push(value); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (buffers_1_1 && !buffers_1_1.done && (_a = buffers_1.return)) _a.call(buffers_1); - } - finally { if (e_1) throw e_1.error; } - } - }, function () { - while (buffers.length > 0) { - subscriber.next(buffers.shift()); - } - subscriber.complete(); - })); - }); -} -bufferToggle$1.bufferToggle = bufferToggle; - -var bufferWhen$1 = {}; - -Object.defineProperty(bufferWhen$1, "__esModule", { value: true }); -bufferWhen$1.bufferWhen = void 0; -var lift_1$U = lift; -var noop_1$9 = noop$2; -var OperatorSubscriber_1$F = OperatorSubscriber$1; -var innerFrom_1$m = innerFrom$1; -function bufferWhen(closingSelector) { - return lift_1$U.operate(function (source, subscriber) { - var buffer = null; - var closingSubscriber = null; - var openBuffer = function () { - closingSubscriber === null || closingSubscriber === void 0 ? void 0 : closingSubscriber.unsubscribe(); - var b = buffer; - buffer = []; - b && subscriber.next(b); - innerFrom_1$m.innerFrom(closingSelector()).subscribe((closingSubscriber = OperatorSubscriber_1$F.createOperatorSubscriber(subscriber, openBuffer, noop_1$9.noop))); - }; - openBuffer(); - source.subscribe(OperatorSubscriber_1$F.createOperatorSubscriber(subscriber, function (value) { return buffer === null || buffer === void 0 ? void 0 : buffer.push(value); }, function () { - buffer && subscriber.next(buffer); - subscriber.complete(); - }, undefined, function () { return (buffer = closingSubscriber = null); })); - }); -} -bufferWhen$1.bufferWhen = bufferWhen; - -var catchError$1 = {}; - -Object.defineProperty(catchError$1, "__esModule", { value: true }); -catchError$1.catchError = void 0; -var innerFrom_1$l = innerFrom$1; -var OperatorSubscriber_1$E = OperatorSubscriber$1; -var lift_1$T = lift; -function catchError(selector) { - return lift_1$T.operate(function (source, subscriber) { - var innerSub = null; - var syncUnsub = false; - var handledResult; - innerSub = source.subscribe(OperatorSubscriber_1$E.createOperatorSubscriber(subscriber, undefined, undefined, function (err) { - handledResult = innerFrom_1$l.innerFrom(selector(err, catchError(selector)(source))); - if (innerSub) { - innerSub.unsubscribe(); - innerSub = null; - handledResult.subscribe(subscriber); - } - else { - syncUnsub = true; - } - })); - if (syncUnsub) { - innerSub.unsubscribe(); - innerSub = null; - handledResult.subscribe(subscriber); - } - }); -} -catchError$1.catchError = catchError; - -var combineAll = {}; - -var combineLatestAll$1 = {}; - -var joinAllInternals$1 = {}; - -var toArray$2 = {}; - -var reduce$1 = {}; - -var scanInternals$1 = {}; - -Object.defineProperty(scanInternals$1, "__esModule", { value: true }); -scanInternals$1.scanInternals = void 0; -var OperatorSubscriber_1$D = OperatorSubscriber$1; -function scanInternals(accumulator, seed, hasSeed, emitOnNext, emitBeforeComplete) { - return function (source, subscriber) { - var hasState = hasSeed; - var state = seed; - var index = 0; - source.subscribe(OperatorSubscriber_1$D.createOperatorSubscriber(subscriber, function (value) { - var i = index++; - state = hasState - ? - accumulator(state, value, i) - : - ((hasState = true), value); - emitOnNext && subscriber.next(state); - }, emitBeforeComplete && - (function () { - hasState && subscriber.next(state); - subscriber.complete(); - }))); - }; -} -scanInternals$1.scanInternals = scanInternals; - -Object.defineProperty(reduce$1, "__esModule", { value: true }); -reduce$1.reduce = void 0; -var scanInternals_1$1 = scanInternals$1; -var lift_1$S = lift; -function reduce(accumulator, seed) { - return lift_1$S.operate(scanInternals_1$1.scanInternals(accumulator, seed, arguments.length >= 2, false, true)); -} -reduce$1.reduce = reduce; - -Object.defineProperty(toArray$2, "__esModule", { value: true }); -toArray$2.toArray = void 0; -var reduce_1$3 = reduce$1; -var lift_1$R = lift; -var arrReducer = function (arr, value) { return (arr.push(value), arr); }; -function toArray$1() { - return lift_1$R.operate(function (source, subscriber) { - reduce_1$3.reduce(arrReducer, [])(source).subscribe(subscriber); - }); -} -toArray$2.toArray = toArray$1; - -Object.defineProperty(joinAllInternals$1, "__esModule", { value: true }); -joinAllInternals$1.joinAllInternals = void 0; -var identity_1$a = identity$1; -var mapOneOrManyArgs_1$1 = mapOneOrManyArgs$1; -var pipe_1$1 = pipe$2; -var mergeMap_1$4 = mergeMap$1; -var toArray_1$1 = toArray$2; -function joinAllInternals(joinFn, project) { - return pipe_1$1.pipe(toArray_1$1.toArray(), mergeMap_1$4.mergeMap(function (sources) { return joinFn(sources); }), project ? mapOneOrManyArgs_1$1.mapOneOrManyArgs(project) : identity_1$a.identity); -} -joinAllInternals$1.joinAllInternals = joinAllInternals; - -Object.defineProperty(combineLatestAll$1, "__esModule", { value: true }); -combineLatestAll$1.combineLatestAll = void 0; -var combineLatest_1$2 = combineLatest$3; -var joinAllInternals_1$1 = joinAllInternals$1; -function combineLatestAll(project) { - return joinAllInternals_1$1.joinAllInternals(combineLatest_1$2.combineLatest, project); -} -combineLatestAll$1.combineLatestAll = combineLatestAll; - -Object.defineProperty(combineAll, "__esModule", { value: true }); -combineAll.combineAll = void 0; -var combineLatestAll_1 = combineLatestAll$1; -combineAll.combineAll = combineLatestAll_1.combineLatestAll; - -var combineLatestWith$1 = {}; - -var combineLatest$1 = {}; - -var __read$c = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -var __spreadArray$c = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { - for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) - to[j] = from[i]; - return to; -}; -Object.defineProperty(combineLatest$1, "__esModule", { value: true }); -combineLatest$1.combineLatest = void 0; -var combineLatest_1$1 = combineLatest$3; -var lift_1$Q = lift; -var argsOrArgArray_1$2 = argsOrArgArray$1; -var mapOneOrManyArgs_1 = mapOneOrManyArgs$1; -var pipe_1 = pipe$2; -var args_1$5 = args; -function combineLatest() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var resultSelector = args_1$5.popResultSelector(args); - return resultSelector - ? pipe_1.pipe(combineLatest.apply(void 0, __spreadArray$c([], __read$c(args))), mapOneOrManyArgs_1.mapOneOrManyArgs(resultSelector)) - : lift_1$Q.operate(function (source, subscriber) { - combineLatest_1$1.combineLatestInit(__spreadArray$c([source], __read$c(argsOrArgArray_1$2.argsOrArgArray(args))))(subscriber); - }); -} -combineLatest$1.combineLatest = combineLatest; - -var __read$b = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -var __spreadArray$b = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { - for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) - to[j] = from[i]; - return to; -}; -Object.defineProperty(combineLatestWith$1, "__esModule", { value: true }); -combineLatestWith$1.combineLatestWith = void 0; -var combineLatest_1 = combineLatest$1; -function combineLatestWith() { - var otherSources = []; - for (var _i = 0; _i < arguments.length; _i++) { - otherSources[_i] = arguments[_i]; - } - return combineLatest_1.combineLatest.apply(void 0, __spreadArray$b([], __read$b(otherSources))); -} -combineLatestWith$1.combineLatestWith = combineLatestWith; - -var concatMap$1 = {}; - -Object.defineProperty(concatMap$1, "__esModule", { value: true }); -concatMap$1.concatMap = void 0; -var mergeMap_1$3 = mergeMap$1; -var isFunction_1$8 = isFunction$1; -function concatMap(project, resultSelector) { - return isFunction_1$8.isFunction(resultSelector) ? mergeMap_1$3.mergeMap(project, resultSelector, 1) : mergeMap_1$3.mergeMap(project, 1); -} -concatMap$1.concatMap = concatMap; - -var concatMapTo$1 = {}; - -Object.defineProperty(concatMapTo$1, "__esModule", { value: true }); -concatMapTo$1.concatMapTo = void 0; -var concatMap_1 = concatMap$1; -var isFunction_1$7 = isFunction$1; -function concatMapTo(innerObservable, resultSelector) { - return isFunction_1$7.isFunction(resultSelector) ? concatMap_1.concatMap(function () { return innerObservable; }, resultSelector) : concatMap_1.concatMap(function () { return innerObservable; }); -} -concatMapTo$1.concatMapTo = concatMapTo; - -var concatWith$1 = {}; - -var concat$1 = {}; - -var __read$a = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -var __spreadArray$a = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { - for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) - to[j] = from[i]; - return to; -}; -Object.defineProperty(concat$1, "__esModule", { value: true }); -concat$1.concat = void 0; -var lift_1$P = lift; -var concatAll_1 = concatAll$1; -var args_1$4 = args; -var from_1$1 = from$1; -function concat() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var scheduler = args_1$4.popScheduler(args); - return lift_1$P.operate(function (source, subscriber) { - concatAll_1.concatAll()(from_1$1.from(__spreadArray$a([source], __read$a(args)), scheduler)).subscribe(subscriber); - }); -} -concat$1.concat = concat; - -var __read$9 = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -var __spreadArray$9 = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { - for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) - to[j] = from[i]; - return to; -}; -Object.defineProperty(concatWith$1, "__esModule", { value: true }); -concatWith$1.concatWith = void 0; -var concat_1$3 = concat$1; -function concatWith() { - var otherSources = []; - for (var _i = 0; _i < arguments.length; _i++) { - otherSources[_i] = arguments[_i]; - } - return concat_1$3.concat.apply(void 0, __spreadArray$9([], __read$9(otherSources))); -} -concatWith$1.concatWith = concatWith; - -var connect$1 = {}; - -var fromSubscribable$1 = {}; - -Object.defineProperty(fromSubscribable$1, "__esModule", { value: true }); -fromSubscribable$1.fromSubscribable = void 0; -var Observable_1$1 = Observable$1; -function fromSubscribable(subscribable) { - return new Observable_1$1.Observable(function (subscriber) { return subscribable.subscribe(subscriber); }); -} -fromSubscribable$1.fromSubscribable = fromSubscribable; - -Object.defineProperty(connect$1, "__esModule", { value: true }); -connect$1.connect = void 0; -var Subject_1$a = Subject$1; -var innerFrom_1$k = innerFrom$1; -var lift_1$O = lift; -var fromSubscribable_1 = fromSubscribable$1; -var DEFAULT_CONFIG = { - connector: function () { return new Subject_1$a.Subject(); }, -}; -function connect(selector, config) { - if (config === void 0) { config = DEFAULT_CONFIG; } - var connector = config.connector; - return lift_1$O.operate(function (source, subscriber) { - var subject = connector(); - innerFrom_1$k.innerFrom(selector(fromSubscribable_1.fromSubscribable(subject))).subscribe(subscriber); - subscriber.add(source.subscribe(subject)); - }); -} -connect$1.connect = connect; - -var count$1 = {}; - -Object.defineProperty(count$1, "__esModule", { value: true }); -count$1.count = void 0; -var reduce_1$2 = reduce$1; -function count(predicate) { - return reduce_1$2.reduce(function (total, value, i) { return (!predicate || predicate(value, i) ? total + 1 : total); }, 0); -} -count$1.count = count; - -var debounce$1 = {}; - -Object.defineProperty(debounce$1, "__esModule", { value: true }); -debounce$1.debounce = void 0; -var lift_1$N = lift; -var noop_1$8 = noop$2; -var OperatorSubscriber_1$C = OperatorSubscriber$1; -var innerFrom_1$j = innerFrom$1; -function debounce(durationSelector) { - return lift_1$N.operate(function (source, subscriber) { - var hasValue = false; - var lastValue = null; - var durationSubscriber = null; - var emit = function () { - durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe(); - durationSubscriber = null; - if (hasValue) { - hasValue = false; - var value = lastValue; - lastValue = null; - subscriber.next(value); - } - }; - source.subscribe(OperatorSubscriber_1$C.createOperatorSubscriber(subscriber, function (value) { - durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe(); - hasValue = true; - lastValue = value; - durationSubscriber = OperatorSubscriber_1$C.createOperatorSubscriber(subscriber, emit, noop_1$8.noop); - innerFrom_1$j.innerFrom(durationSelector(value)).subscribe(durationSubscriber); - }, function () { - emit(); - subscriber.complete(); - }, undefined, function () { - lastValue = durationSubscriber = null; - })); - }); -} -debounce$1.debounce = debounce; - -var debounceTime$1 = {}; - -Object.defineProperty(debounceTime$1, "__esModule", { value: true }); -debounceTime$1.debounceTime = void 0; -var async_1$6 = async; -var lift_1$M = lift; -var OperatorSubscriber_1$B = OperatorSubscriber$1; -function debounceTime(dueTime, scheduler) { - if (scheduler === void 0) { scheduler = async_1$6.asyncScheduler; } - return lift_1$M.operate(function (source, subscriber) { - var activeTask = null; - var lastValue = null; - var lastTime = null; - var emit = function () { - if (activeTask) { - activeTask.unsubscribe(); - activeTask = null; - var value = lastValue; - lastValue = null; - subscriber.next(value); - } - }; - function emitWhenIdle() { - var targetTime = lastTime + dueTime; - var now = scheduler.now(); - if (now < targetTime) { - activeTask = this.schedule(undefined, targetTime - now); - subscriber.add(activeTask); - return; - } - emit(); - } - source.subscribe(OperatorSubscriber_1$B.createOperatorSubscriber(subscriber, function (value) { - lastValue = value; - lastTime = scheduler.now(); - if (!activeTask) { - activeTask = scheduler.schedule(emitWhenIdle, dueTime); - subscriber.add(activeTask); - } - }, function () { - emit(); - subscriber.complete(); - }, undefined, function () { - lastValue = activeTask = null; - })); - }); -} -debounceTime$1.debounceTime = debounceTime; - -var defaultIfEmpty$1 = {}; - -Object.defineProperty(defaultIfEmpty$1, "__esModule", { value: true }); -defaultIfEmpty$1.defaultIfEmpty = void 0; -var lift_1$L = lift; -var OperatorSubscriber_1$A = OperatorSubscriber$1; -function defaultIfEmpty(defaultValue) { - return lift_1$L.operate(function (source, subscriber) { - var hasValue = false; - source.subscribe(OperatorSubscriber_1$A.createOperatorSubscriber(subscriber, function (value) { - hasValue = true; - subscriber.next(value); - }, function () { - if (!hasValue) { - subscriber.next(defaultValue); - } - subscriber.complete(); - })); - }); -} -defaultIfEmpty$1.defaultIfEmpty = defaultIfEmpty; - -var delay$1 = {}; - -var delayWhen$1 = {}; - -var take$1 = {}; - -Object.defineProperty(take$1, "__esModule", { value: true }); -take$1.take = void 0; -var empty_1$2 = empty; -var lift_1$K = lift; -var OperatorSubscriber_1$z = OperatorSubscriber$1; -function take(count) { - return count <= 0 - ? - function () { return empty_1$2.EMPTY; } - : lift_1$K.operate(function (source, subscriber) { - var seen = 0; - source.subscribe(OperatorSubscriber_1$z.createOperatorSubscriber(subscriber, function (value) { - if (++seen <= count) { - subscriber.next(value); - if (count <= seen) { - subscriber.complete(); - } - } - })); - }); -} -take$1.take = take; - -var ignoreElements$1 = {}; - -Object.defineProperty(ignoreElements$1, "__esModule", { value: true }); -ignoreElements$1.ignoreElements = void 0; -var lift_1$J = lift; -var OperatorSubscriber_1$y = OperatorSubscriber$1; -var noop_1$7 = noop$2; -function ignoreElements() { - return lift_1$J.operate(function (source, subscriber) { - source.subscribe(OperatorSubscriber_1$y.createOperatorSubscriber(subscriber, noop_1$7.noop)); - }); -} -ignoreElements$1.ignoreElements = ignoreElements; - -var mapTo$1 = {}; - -Object.defineProperty(mapTo$1, "__esModule", { value: true }); -mapTo$1.mapTo = void 0; -var map_1$3 = map$2; -function mapTo(value) { - return map_1$3.map(function () { return value; }); -} -mapTo$1.mapTo = mapTo; - -Object.defineProperty(delayWhen$1, "__esModule", { value: true }); -delayWhen$1.delayWhen = void 0; -var concat_1$2 = concat$3; -var take_1$2 = take$1; -var ignoreElements_1 = ignoreElements$1; -var mapTo_1 = mapTo$1; -var mergeMap_1$2 = mergeMap$1; -var innerFrom_1$i = innerFrom$1; -function delayWhen(delayDurationSelector, subscriptionDelay) { - if (subscriptionDelay) { - return function (source) { - return concat_1$2.concat(subscriptionDelay.pipe(take_1$2.take(1), ignoreElements_1.ignoreElements()), source.pipe(delayWhen(delayDurationSelector))); - }; - } - return mergeMap_1$2.mergeMap(function (value, index) { return innerFrom_1$i.innerFrom(delayDurationSelector(value, index)).pipe(take_1$2.take(1), mapTo_1.mapTo(value)); }); -} -delayWhen$1.delayWhen = delayWhen; - -Object.defineProperty(delay$1, "__esModule", { value: true }); -delay$1.delay = void 0; -var async_1$5 = async; -var delayWhen_1 = delayWhen$1; -var timer_1$3 = timer$1; -function delay(due, scheduler) { - if (scheduler === void 0) { scheduler = async_1$5.asyncScheduler; } - var duration = timer_1$3.timer(due, scheduler); - return delayWhen_1.delayWhen(function () { return duration; }); -} -delay$1.delay = delay; - -var dematerialize$1 = {}; - -Object.defineProperty(dematerialize$1, "__esModule", { value: true }); -dematerialize$1.dematerialize = void 0; -var Notification_1$1 = Notification; -var lift_1$I = lift; -var OperatorSubscriber_1$x = OperatorSubscriber$1; -function dematerialize() { - return lift_1$I.operate(function (source, subscriber) { - source.subscribe(OperatorSubscriber_1$x.createOperatorSubscriber(subscriber, function (notification) { return Notification_1$1.observeNotification(notification, subscriber); })); - }); -} -dematerialize$1.dematerialize = dematerialize; - -var distinct$1 = {}; - -Object.defineProperty(distinct$1, "__esModule", { value: true }); -distinct$1.distinct = void 0; -var lift_1$H = lift; -var OperatorSubscriber_1$w = OperatorSubscriber$1; -var noop_1$6 = noop$2; -var innerFrom_1$h = innerFrom$1; -function distinct(keySelector, flushes) { - return lift_1$H.operate(function (source, subscriber) { - var distinctKeys = new Set(); - source.subscribe(OperatorSubscriber_1$w.createOperatorSubscriber(subscriber, function (value) { - var key = keySelector ? keySelector(value) : value; - if (!distinctKeys.has(key)) { - distinctKeys.add(key); - subscriber.next(value); - } - })); - flushes && innerFrom_1$h.innerFrom(flushes).subscribe(OperatorSubscriber_1$w.createOperatorSubscriber(subscriber, function () { return distinctKeys.clear(); }, noop_1$6.noop)); - }); -} -distinct$1.distinct = distinct; - -var distinctUntilChanged$1 = {}; - -Object.defineProperty(distinctUntilChanged$1, "__esModule", { value: true }); -distinctUntilChanged$1.distinctUntilChanged = void 0; -var identity_1$9 = identity$1; -var lift_1$G = lift; -var OperatorSubscriber_1$v = OperatorSubscriber$1; -function distinctUntilChanged(comparator, keySelector) { - if (keySelector === void 0) { keySelector = identity_1$9.identity; } - comparator = comparator !== null && comparator !== void 0 ? comparator : defaultCompare; - return lift_1$G.operate(function (source, subscriber) { - var previousKey; - var first = true; - source.subscribe(OperatorSubscriber_1$v.createOperatorSubscriber(subscriber, function (value) { - var currentKey = keySelector(value); - if (first || !comparator(previousKey, currentKey)) { - first = false; - previousKey = currentKey; - subscriber.next(value); - } - })); - }); -} -distinctUntilChanged$1.distinctUntilChanged = distinctUntilChanged; -function defaultCompare(a, b) { - return a === b; -} - -var distinctUntilKeyChanged$1 = {}; - -Object.defineProperty(distinctUntilKeyChanged$1, "__esModule", { value: true }); -distinctUntilKeyChanged$1.distinctUntilKeyChanged = void 0; -var distinctUntilChanged_1 = distinctUntilChanged$1; -function distinctUntilKeyChanged(key, compare) { - return distinctUntilChanged_1.distinctUntilChanged(function (x, y) { return compare ? compare(x[key], y[key]) : x[key] === y[key]; }); -} -distinctUntilKeyChanged$1.distinctUntilKeyChanged = distinctUntilKeyChanged; - -var elementAt$1 = {}; - -var throwIfEmpty$1 = {}; - -Object.defineProperty(throwIfEmpty$1, "__esModule", { value: true }); -throwIfEmpty$1.throwIfEmpty = void 0; -var EmptyError_1$3 = EmptyError; -var lift_1$F = lift; -var OperatorSubscriber_1$u = OperatorSubscriber$1; -function throwIfEmpty(errorFactory) { - if (errorFactory === void 0) { errorFactory = defaultErrorFactory; } - return lift_1$F.operate(function (source, subscriber) { - var hasValue = false; - source.subscribe(OperatorSubscriber_1$u.createOperatorSubscriber(subscriber, function (value) { - hasValue = true; - subscriber.next(value); - }, function () { return (hasValue ? subscriber.complete() : subscriber.error(errorFactory())); })); - }); -} -throwIfEmpty$1.throwIfEmpty = throwIfEmpty; -function defaultErrorFactory() { - return new EmptyError_1$3.EmptyError(); -} - -Object.defineProperty(elementAt$1, "__esModule", { value: true }); -elementAt$1.elementAt = void 0; -var ArgumentOutOfRangeError_1 = ArgumentOutOfRangeError; -var filter_1$3 = filter$1; -var throwIfEmpty_1$2 = throwIfEmpty$1; -var defaultIfEmpty_1$2 = defaultIfEmpty$1; -var take_1$1 = take$1; -function elementAt(index, defaultValue) { - if (index < 0) { - throw new ArgumentOutOfRangeError_1.ArgumentOutOfRangeError(); - } - var hasDefaultValue = arguments.length >= 2; - return function (source) { - return source.pipe(filter_1$3.filter(function (v, i) { return i === index; }), take_1$1.take(1), hasDefaultValue ? defaultIfEmpty_1$2.defaultIfEmpty(defaultValue) : throwIfEmpty_1$2.throwIfEmpty(function () { return new ArgumentOutOfRangeError_1.ArgumentOutOfRangeError(); })); - }; -} -elementAt$1.elementAt = elementAt; - -var endWith$1 = {}; - -var __read$8 = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -var __spreadArray$8 = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { - for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) - to[j] = from[i]; - return to; -}; -Object.defineProperty(endWith$1, "__esModule", { value: true }); -endWith$1.endWith = void 0; -var concat_1$1 = concat$3; -var of_1 = of$1; -function endWith() { - var values = []; - for (var _i = 0; _i < arguments.length; _i++) { - values[_i] = arguments[_i]; - } - return function (source) { return concat_1$1.concat(source, of_1.of.apply(void 0, __spreadArray$8([], __read$8(values)))); }; -} -endWith$1.endWith = endWith; - -var every$1 = {}; - -Object.defineProperty(every$1, "__esModule", { value: true }); -every$1.every = void 0; -var lift_1$E = lift; -var OperatorSubscriber_1$t = OperatorSubscriber$1; -function every(predicate, thisArg) { - return lift_1$E.operate(function (source, subscriber) { - var index = 0; - source.subscribe(OperatorSubscriber_1$t.createOperatorSubscriber(subscriber, function (value) { - if (!predicate.call(thisArg, value, index++, source)) { - subscriber.next(false); - subscriber.complete(); - } - }, function () { - subscriber.next(true); - subscriber.complete(); - })); - }); -} -every$1.every = every; - -var exhaust = {}; - -var exhaustAll$1 = {}; - -var exhaustMap$1 = {}; - -Object.defineProperty(exhaustMap$1, "__esModule", { value: true }); -exhaustMap$1.exhaustMap = void 0; -var map_1$2 = map$2; -var innerFrom_1$g = innerFrom$1; -var lift_1$D = lift; -var OperatorSubscriber_1$s = OperatorSubscriber$1; -function exhaustMap(project, resultSelector) { - if (resultSelector) { - return function (source) { - return source.pipe(exhaustMap(function (a, i) { return innerFrom_1$g.innerFrom(project(a, i)).pipe(map_1$2.map(function (b, ii) { return resultSelector(a, b, i, ii); })); })); - }; - } - return lift_1$D.operate(function (source, subscriber) { - var index = 0; - var innerSub = null; - var isComplete = false; - source.subscribe(OperatorSubscriber_1$s.createOperatorSubscriber(subscriber, function (outerValue) { - if (!innerSub) { - innerSub = OperatorSubscriber_1$s.createOperatorSubscriber(subscriber, undefined, function () { - innerSub = null; - isComplete && subscriber.complete(); - }); - innerFrom_1$g.innerFrom(project(outerValue, index++)).subscribe(innerSub); - } - }, function () { - isComplete = true; - !innerSub && subscriber.complete(); - })); - }); -} -exhaustMap$1.exhaustMap = exhaustMap; - -Object.defineProperty(exhaustAll$1, "__esModule", { value: true }); -exhaustAll$1.exhaustAll = void 0; -var exhaustMap_1 = exhaustMap$1; -var identity_1$8 = identity$1; -function exhaustAll() { - return exhaustMap_1.exhaustMap(identity_1$8.identity); -} -exhaustAll$1.exhaustAll = exhaustAll; - -Object.defineProperty(exhaust, "__esModule", { value: true }); -exhaust.exhaust = void 0; -var exhaustAll_1 = exhaustAll$1; -exhaust.exhaust = exhaustAll_1.exhaustAll; - -var expand$2 = {}; - -Object.defineProperty(expand$2, "__esModule", { value: true }); -expand$2.expand = void 0; -var lift_1$C = lift; -var mergeInternals_1$1 = mergeInternals$1; -function expand$1(project, concurrent, scheduler) { - if (concurrent === void 0) { concurrent = Infinity; } - concurrent = (concurrent || 0) < 1 ? Infinity : concurrent; - return lift_1$C.operate(function (source, subscriber) { - return mergeInternals_1$1.mergeInternals(source, subscriber, project, concurrent, undefined, true, scheduler); - }); -} -expand$2.expand = expand$1; - -var finalize$1 = {}; - -Object.defineProperty(finalize$1, "__esModule", { value: true }); -finalize$1.finalize = void 0; -var lift_1$B = lift; -function finalize(callback) { - return lift_1$B.operate(function (source, subscriber) { - try { - source.subscribe(subscriber); - } - finally { - subscriber.add(callback); - } - }); -} -finalize$1.finalize = finalize; - -var find$1 = {}; - -Object.defineProperty(find$1, "__esModule", { value: true }); -find$1.createFind = find$1.find = void 0; -var lift_1$A = lift; -var OperatorSubscriber_1$r = OperatorSubscriber$1; -function find(predicate, thisArg) { - return lift_1$A.operate(createFind(predicate, thisArg, 'value')); -} -find$1.find = find; -function createFind(predicate, thisArg, emit) { - var findIndex = emit === 'index'; - return function (source, subscriber) { - var index = 0; - source.subscribe(OperatorSubscriber_1$r.createOperatorSubscriber(subscriber, function (value) { - var i = index++; - if (predicate.call(thisArg, value, i, source)) { - subscriber.next(findIndex ? i : value); - subscriber.complete(); - } - }, function () { - subscriber.next(findIndex ? -1 : undefined); - subscriber.complete(); - })); - }; -} -find$1.createFind = createFind; - -var findIndex$1 = {}; - -Object.defineProperty(findIndex$1, "__esModule", { value: true }); -findIndex$1.findIndex = void 0; -var lift_1$z = lift; -var find_1 = find$1; -function findIndex(predicate, thisArg) { - return lift_1$z.operate(find_1.createFind(predicate, thisArg, 'index')); -} -findIndex$1.findIndex = findIndex; - -var first$1 = {}; - -Object.defineProperty(first$1, "__esModule", { value: true }); -first$1.first = void 0; -var EmptyError_1$2 = EmptyError; -var filter_1$2 = filter$1; -var take_1 = take$1; -var defaultIfEmpty_1$1 = defaultIfEmpty$1; -var throwIfEmpty_1$1 = throwIfEmpty$1; -var identity_1$7 = identity$1; -function first(predicate, defaultValue) { - var hasDefaultValue = arguments.length >= 2; - return function (source) { - return source.pipe(predicate ? filter_1$2.filter(function (v, i) { return predicate(v, i, source); }) : identity_1$7.identity, take_1.take(1), hasDefaultValue ? defaultIfEmpty_1$1.defaultIfEmpty(defaultValue) : throwIfEmpty_1$1.throwIfEmpty(function () { return new EmptyError_1$2.EmptyError(); })); - }; -} -first$1.first = first; - -var groupBy$1 = {}; - -Object.defineProperty(groupBy$1, "__esModule", { value: true }); -groupBy$1.groupBy = void 0; -var Observable_1 = Observable$1; -var innerFrom_1$f = innerFrom$1; -var Subject_1$9 = Subject$1; -var lift_1$y = lift; -var OperatorSubscriber_1$q = OperatorSubscriber$1; -function groupBy(keySelector, elementOrOptions, duration, connector) { - return lift_1$y.operate(function (source, subscriber) { - var element; - if (!elementOrOptions || typeof elementOrOptions === 'function') { - element = elementOrOptions; - } - else { - (duration = elementOrOptions.duration, element = elementOrOptions.element, connector = elementOrOptions.connector); - } - var groups = new Map(); - var notify = function (cb) { - groups.forEach(cb); - cb(subscriber); - }; - var handleError = function (err) { return notify(function (consumer) { return consumer.error(err); }); }; - var activeGroups = 0; - var teardownAttempted = false; - var groupBySourceSubscriber = new OperatorSubscriber_1$q.OperatorSubscriber(subscriber, function (value) { - try { - var key_1 = keySelector(value); - var group_1 = groups.get(key_1); - if (!group_1) { - groups.set(key_1, (group_1 = connector ? connector() : new Subject_1$9.Subject())); - var grouped = createGroupedObservable(key_1, group_1); - subscriber.next(grouped); - if (duration) { - var durationSubscriber_1 = OperatorSubscriber_1$q.createOperatorSubscriber(group_1, function () { - group_1.complete(); - durationSubscriber_1 === null || durationSubscriber_1 === void 0 ? void 0 : durationSubscriber_1.unsubscribe(); - }, undefined, undefined, function () { return groups.delete(key_1); }); - groupBySourceSubscriber.add(innerFrom_1$f.innerFrom(duration(grouped)).subscribe(durationSubscriber_1)); - } - } - group_1.next(element ? element(value) : value); - } - catch (err) { - handleError(err); - } - }, function () { return notify(function (consumer) { return consumer.complete(); }); }, handleError, function () { return groups.clear(); }, function () { - teardownAttempted = true; - return activeGroups === 0; - }); - source.subscribe(groupBySourceSubscriber); - function createGroupedObservable(key, groupSubject) { - var result = new Observable_1.Observable(function (groupSubscriber) { - activeGroups++; - var innerSub = groupSubject.subscribe(groupSubscriber); - return function () { - innerSub.unsubscribe(); - --activeGroups === 0 && teardownAttempted && groupBySourceSubscriber.unsubscribe(); - }; - }); - result.key = key; - return result; - } - }); -} -groupBy$1.groupBy = groupBy; - -var isEmpty$1 = {}; - -Object.defineProperty(isEmpty$1, "__esModule", { value: true }); -isEmpty$1.isEmpty = void 0; -var lift_1$x = lift; -var OperatorSubscriber_1$p = OperatorSubscriber$1; -function isEmpty() { - return lift_1$x.operate(function (source, subscriber) { - source.subscribe(OperatorSubscriber_1$p.createOperatorSubscriber(subscriber, function () { - subscriber.next(false); - subscriber.complete(); - }, function () { - subscriber.next(true); - subscriber.complete(); - })); - }); -} -isEmpty$1.isEmpty = isEmpty; - -var last$1 = {}; - -var takeLast$1 = {}; - -var __values$2 = (commonjsGlobal && commonjsGlobal.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(takeLast$1, "__esModule", { value: true }); -takeLast$1.takeLast = void 0; -var empty_1$1 = empty; -var lift_1$w = lift; -var OperatorSubscriber_1$o = OperatorSubscriber$1; -function takeLast(count) { - return count <= 0 - ? function () { return empty_1$1.EMPTY; } - : lift_1$w.operate(function (source, subscriber) { - var buffer = []; - source.subscribe(OperatorSubscriber_1$o.createOperatorSubscriber(subscriber, function (value) { - buffer.push(value); - count < buffer.length && buffer.shift(); - }, function () { - var e_1, _a; - try { - for (var buffer_1 = __values$2(buffer), buffer_1_1 = buffer_1.next(); !buffer_1_1.done; buffer_1_1 = buffer_1.next()) { - var value = buffer_1_1.value; - subscriber.next(value); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (buffer_1_1 && !buffer_1_1.done && (_a = buffer_1.return)) _a.call(buffer_1); - } - finally { if (e_1) throw e_1.error; } - } - subscriber.complete(); - }, undefined, function () { - buffer = null; - })); - }); -} -takeLast$1.takeLast = takeLast; - -Object.defineProperty(last$1, "__esModule", { value: true }); -last$1.last = void 0; -var EmptyError_1$1 = EmptyError; -var filter_1$1 = filter$1; -var takeLast_1 = takeLast$1; -var throwIfEmpty_1 = throwIfEmpty$1; -var defaultIfEmpty_1 = defaultIfEmpty$1; -var identity_1$6 = identity$1; -function last(predicate, defaultValue) { - var hasDefaultValue = arguments.length >= 2; - return function (source) { - return source.pipe(predicate ? filter_1$1.filter(function (v, i) { return predicate(v, i, source); }) : identity_1$6.identity, takeLast_1.takeLast(1), hasDefaultValue ? defaultIfEmpty_1.defaultIfEmpty(defaultValue) : throwIfEmpty_1.throwIfEmpty(function () { return new EmptyError_1$1.EmptyError(); })); - }; -} -last$1.last = last; - -var materialize$1 = {}; - -Object.defineProperty(materialize$1, "__esModule", { value: true }); -materialize$1.materialize = void 0; -var Notification_1 = Notification; -var lift_1$v = lift; -var OperatorSubscriber_1$n = OperatorSubscriber$1; -function materialize() { - return lift_1$v.operate(function (source, subscriber) { - source.subscribe(OperatorSubscriber_1$n.createOperatorSubscriber(subscriber, function (value) { - subscriber.next(Notification_1.Notification.createNext(value)); - }, function () { - subscriber.next(Notification_1.Notification.createComplete()); - subscriber.complete(); - }, function (err) { - subscriber.next(Notification_1.Notification.createError(err)); - subscriber.complete(); - })); - }); -} -materialize$1.materialize = materialize; - -var max$1 = {}; - -Object.defineProperty(max$1, "__esModule", { value: true }); -max$1.max = void 0; -var reduce_1$1 = reduce$1; -var isFunction_1$6 = isFunction$1; -function max(comparer) { - return reduce_1$1.reduce(isFunction_1$6.isFunction(comparer) ? function (x, y) { return (comparer(x, y) > 0 ? x : y); } : function (x, y) { return (x > y ? x : y); }); -} -max$1.max = max; - -var flatMap = {}; - -Object.defineProperty(flatMap, "__esModule", { value: true }); -flatMap.flatMap = void 0; -var mergeMap_1$1 = mergeMap$1; -flatMap.flatMap = mergeMap_1$1.mergeMap; - -var mergeMapTo$1 = {}; - -Object.defineProperty(mergeMapTo$1, "__esModule", { value: true }); -mergeMapTo$1.mergeMapTo = void 0; -var mergeMap_1 = mergeMap$1; -var isFunction_1$5 = isFunction$1; -function mergeMapTo(innerObservable, resultSelector, concurrent) { - if (concurrent === void 0) { concurrent = Infinity; } - if (isFunction_1$5.isFunction(resultSelector)) { - return mergeMap_1.mergeMap(function () { return innerObservable; }, resultSelector, concurrent); - } - if (typeof resultSelector === 'number') { - concurrent = resultSelector; - } - return mergeMap_1.mergeMap(function () { return innerObservable; }, concurrent); -} -mergeMapTo$1.mergeMapTo = mergeMapTo; - -var mergeScan$1 = {}; - -Object.defineProperty(mergeScan$1, "__esModule", { value: true }); -mergeScan$1.mergeScan = void 0; -var lift_1$u = lift; -var mergeInternals_1 = mergeInternals$1; -function mergeScan(accumulator, seed, concurrent) { - if (concurrent === void 0) { concurrent = Infinity; } - return lift_1$u.operate(function (source, subscriber) { - var state = seed; - return mergeInternals_1.mergeInternals(source, subscriber, function (value, index) { return accumulator(state, value, index); }, concurrent, function (value) { - state = value; - }, false, undefined, function () { return (state = null); }); - }); -} -mergeScan$1.mergeScan = mergeScan; - -var mergeWith$1 = {}; - -var merge$3 = {}; - -var __read$7 = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -var __spreadArray$7 = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { - for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) - to[j] = from[i]; - return to; -}; -Object.defineProperty(merge$3, "__esModule", { value: true }); -merge$3.merge = void 0; -var lift_1$t = lift; -var argsOrArgArray_1$1 = argsOrArgArray$1; -var mergeAll_1 = mergeAll$1; -var args_1$3 = args; -var from_1 = from$1; -function merge$2() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var scheduler = args_1$3.popScheduler(args); - var concurrent = args_1$3.popNumber(args, Infinity); - args = argsOrArgArray_1$1.argsOrArgArray(args); - return lift_1$t.operate(function (source, subscriber) { - mergeAll_1.mergeAll(concurrent)(from_1.from(__spreadArray$7([source], __read$7(args)), scheduler)).subscribe(subscriber); - }); -} -merge$3.merge = merge$2; - -var __read$6 = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -var __spreadArray$6 = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { - for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) - to[j] = from[i]; - return to; -}; -Object.defineProperty(mergeWith$1, "__esModule", { value: true }); -mergeWith$1.mergeWith = void 0; -var merge_1 = merge$3; -function mergeWith() { - var otherSources = []; - for (var _i = 0; _i < arguments.length; _i++) { - otherSources[_i] = arguments[_i]; - } - return merge_1.merge.apply(void 0, __spreadArray$6([], __read$6(otherSources))); -} -mergeWith$1.mergeWith = mergeWith; - -var min$1 = {}; - -Object.defineProperty(min$1, "__esModule", { value: true }); -min$1.min = void 0; -var reduce_1 = reduce$1; -var isFunction_1$4 = isFunction$1; -function min(comparer) { - return reduce_1.reduce(isFunction_1$4.isFunction(comparer) ? function (x, y) { return (comparer(x, y) < 0 ? x : y); } : function (x, y) { return (x < y ? x : y); }); -} -min$1.min = min; - -var multicast$1 = {}; - -Object.defineProperty(multicast$1, "__esModule", { value: true }); -multicast$1.multicast = void 0; -var ConnectableObservable_1$2 = ConnectableObservable$1; -var isFunction_1$3 = isFunction$1; -var connect_1$1 = connect$1; -function multicast(subjectOrSubjectFactory, selector) { - var subjectFactory = isFunction_1$3.isFunction(subjectOrSubjectFactory) ? subjectOrSubjectFactory : function () { return subjectOrSubjectFactory; }; - if (isFunction_1$3.isFunction(selector)) { - return connect_1$1.connect(selector, { - connector: subjectFactory, - }); - } - return function (source) { return new ConnectableObservable_1$2.ConnectableObservable(source, subjectFactory); }; -} -multicast$1.multicast = multicast; - -var onErrorResumeNextWith$1 = {}; - -var __read$5 = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -var __spreadArray$5 = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { - for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) - to[j] = from[i]; - return to; -}; -Object.defineProperty(onErrorResumeNextWith$1, "__esModule", { value: true }); -onErrorResumeNextWith$1.onErrorResumeNext = onErrorResumeNextWith$1.onErrorResumeNextWith = void 0; -var argsOrArgArray_1 = argsOrArgArray$1; -var onErrorResumeNext_1 = onErrorResumeNext$1; -function onErrorResumeNextWith() { - var sources = []; - for (var _i = 0; _i < arguments.length; _i++) { - sources[_i] = arguments[_i]; - } - var nextSources = argsOrArgArray_1.argsOrArgArray(sources); - return function (source) { return onErrorResumeNext_1.onErrorResumeNext.apply(void 0, __spreadArray$5([source], __read$5(nextSources))); }; -} -onErrorResumeNextWith$1.onErrorResumeNextWith = onErrorResumeNextWith; -onErrorResumeNextWith$1.onErrorResumeNext = onErrorResumeNextWith; - -var pairwise$1 = {}; - -Object.defineProperty(pairwise$1, "__esModule", { value: true }); -pairwise$1.pairwise = void 0; -var lift_1$s = lift; -var OperatorSubscriber_1$m = OperatorSubscriber$1; -function pairwise() { - return lift_1$s.operate(function (source, subscriber) { - var prev; - var hasPrev = false; - source.subscribe(OperatorSubscriber_1$m.createOperatorSubscriber(subscriber, function (value) { - var p = prev; - prev = value; - hasPrev && subscriber.next([p, value]); - hasPrev = true; - })); - }); -} -pairwise$1.pairwise = pairwise; - -var pluck$1 = {}; - -Object.defineProperty(pluck$1, "__esModule", { value: true }); -pluck$1.pluck = void 0; -var map_1$1 = map$2; -function pluck() { - var properties = []; - for (var _i = 0; _i < arguments.length; _i++) { - properties[_i] = arguments[_i]; - } - var length = properties.length; - if (length === 0) { - throw new Error('list of properties cannot be empty.'); - } - return map_1$1.map(function (x) { - var currentProp = x; - for (var i = 0; i < length; i++) { - var p = currentProp === null || currentProp === void 0 ? void 0 : currentProp[properties[i]]; - if (typeof p !== 'undefined') { - currentProp = p; - } - else { - return undefined; - } - } - return currentProp; - }); -} -pluck$1.pluck = pluck; - -var publish$1 = {}; - -Object.defineProperty(publish$1, "__esModule", { value: true }); -publish$1.publish = void 0; -var Subject_1$8 = Subject$1; -var multicast_1$1 = multicast$1; -var connect_1 = connect$1; -function publish(selector) { - return selector ? function (source) { return connect_1.connect(selector)(source); } : function (source) { return multicast_1$1.multicast(new Subject_1$8.Subject())(source); }; -} -publish$1.publish = publish; - -var publishBehavior$1 = {}; - -Object.defineProperty(publishBehavior$1, "__esModule", { value: true }); -publishBehavior$1.publishBehavior = void 0; -var BehaviorSubject_1 = BehaviorSubject$1; -var ConnectableObservable_1$1 = ConnectableObservable$1; -function publishBehavior(initialValue) { - return function (source) { - var subject = new BehaviorSubject_1.BehaviorSubject(initialValue); - return new ConnectableObservable_1$1.ConnectableObservable(source, function () { return subject; }); - }; -} -publishBehavior$1.publishBehavior = publishBehavior; - -var publishLast$1 = {}; - -Object.defineProperty(publishLast$1, "__esModule", { value: true }); -publishLast$1.publishLast = void 0; -var AsyncSubject_1 = AsyncSubject$1; -var ConnectableObservable_1 = ConnectableObservable$1; -function publishLast() { - return function (source) { - var subject = new AsyncSubject_1.AsyncSubject(); - return new ConnectableObservable_1.ConnectableObservable(source, function () { return subject; }); - }; -} -publishLast$1.publishLast = publishLast; - -var publishReplay$1 = {}; - -Object.defineProperty(publishReplay$1, "__esModule", { value: true }); -publishReplay$1.publishReplay = void 0; -var ReplaySubject_1$1 = ReplaySubject$1; -var multicast_1 = multicast$1; -var isFunction_1$2 = isFunction$1; -function publishReplay(bufferSize, windowTime, selectorOrScheduler, timestampProvider) { - if (selectorOrScheduler && !isFunction_1$2.isFunction(selectorOrScheduler)) { - timestampProvider = selectorOrScheduler; - } - var selector = isFunction_1$2.isFunction(selectorOrScheduler) ? selectorOrScheduler : undefined; - return function (source) { return multicast_1.multicast(new ReplaySubject_1$1.ReplaySubject(bufferSize, windowTime, timestampProvider), selector)(source); }; -} -publishReplay$1.publishReplay = publishReplay; - -var raceWith$1 = {}; - -var __read$4 = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -var __spreadArray$4 = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { - for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) - to[j] = from[i]; - return to; -}; -Object.defineProperty(raceWith$1, "__esModule", { value: true }); -raceWith$1.raceWith = void 0; -var race_1 = race$1; -var lift_1$r = lift; -var identity_1$5 = identity$1; -function raceWith() { - var otherSources = []; - for (var _i = 0; _i < arguments.length; _i++) { - otherSources[_i] = arguments[_i]; - } - return !otherSources.length - ? identity_1$5.identity - : lift_1$r.operate(function (source, subscriber) { - race_1.raceInit(__spreadArray$4([source], __read$4(otherSources)))(subscriber); - }); -} -raceWith$1.raceWith = raceWith; - -var repeat$2 = {}; - -Object.defineProperty(repeat$2, "__esModule", { value: true }); -repeat$2.repeat = void 0; -var empty_1 = empty; -var lift_1$q = lift; -var OperatorSubscriber_1$l = OperatorSubscriber$1; -var innerFrom_1$e = innerFrom$1; -var timer_1$2 = timer$1; -function repeat$1(countOrConfig) { - var _a; - var count = Infinity; - var delay; - if (countOrConfig != null) { - if (typeof countOrConfig === 'object') { - (_a = countOrConfig.count, count = _a === void 0 ? Infinity : _a, delay = countOrConfig.delay); - } - else { - count = countOrConfig; - } - } - return count <= 0 - ? function () { return empty_1.EMPTY; } - : lift_1$q.operate(function (source, subscriber) { - var soFar = 0; - var sourceSub; - var resubscribe = function () { - sourceSub === null || sourceSub === void 0 ? void 0 : sourceSub.unsubscribe(); - sourceSub = null; - if (delay != null) { - var notifier = typeof delay === 'number' ? timer_1$2.timer(delay) : innerFrom_1$e.innerFrom(delay(soFar)); - var notifierSubscriber_1 = OperatorSubscriber_1$l.createOperatorSubscriber(subscriber, function () { - notifierSubscriber_1.unsubscribe(); - subscribeToSource(); - }); - notifier.subscribe(notifierSubscriber_1); - } - else { - subscribeToSource(); - } - }; - var subscribeToSource = function () { - var syncUnsub = false; - sourceSub = source.subscribe(OperatorSubscriber_1$l.createOperatorSubscriber(subscriber, undefined, function () { - if (++soFar < count) { - if (sourceSub) { - resubscribe(); - } - else { - syncUnsub = true; - } - } - else { - subscriber.complete(); - } - })); - if (syncUnsub) { - resubscribe(); - } - }; - subscribeToSource(); - }); -} -repeat$2.repeat = repeat$1; - -var repeatWhen$1 = {}; - -Object.defineProperty(repeatWhen$1, "__esModule", { value: true }); -repeatWhen$1.repeatWhen = void 0; -var innerFrom_1$d = innerFrom$1; -var Subject_1$7 = Subject$1; -var lift_1$p = lift; -var OperatorSubscriber_1$k = OperatorSubscriber$1; -function repeatWhen(notifier) { - return lift_1$p.operate(function (source, subscriber) { - var innerSub; - var syncResub = false; - var completions$; - var isNotifierComplete = false; - var isMainComplete = false; - var checkComplete = function () { return isMainComplete && isNotifierComplete && (subscriber.complete(), true); }; - var getCompletionSubject = function () { - if (!completions$) { - completions$ = new Subject_1$7.Subject(); - innerFrom_1$d.innerFrom(notifier(completions$)).subscribe(OperatorSubscriber_1$k.createOperatorSubscriber(subscriber, function () { - if (innerSub) { - subscribeForRepeatWhen(); - } - else { - syncResub = true; - } - }, function () { - isNotifierComplete = true; - checkComplete(); - })); - } - return completions$; - }; - var subscribeForRepeatWhen = function () { - isMainComplete = false; - innerSub = source.subscribe(OperatorSubscriber_1$k.createOperatorSubscriber(subscriber, undefined, function () { - isMainComplete = true; - !checkComplete() && getCompletionSubject().next(); - })); - if (syncResub) { - innerSub.unsubscribe(); - innerSub = null; - syncResub = false; - subscribeForRepeatWhen(); - } - }; - subscribeForRepeatWhen(); - }); -} -repeatWhen$1.repeatWhen = repeatWhen; - -var retry$1 = {}; - -Object.defineProperty(retry$1, "__esModule", { value: true }); -retry$1.retry = void 0; -var lift_1$o = lift; -var OperatorSubscriber_1$j = OperatorSubscriber$1; -var identity_1$4 = identity$1; -var timer_1$1 = timer$1; -var innerFrom_1$c = innerFrom$1; -function retry(configOrCount) { - if (configOrCount === void 0) { configOrCount = Infinity; } - var config; - if (configOrCount && typeof configOrCount === 'object') { - config = configOrCount; - } - else { - config = { - count: configOrCount, - }; - } - var _a = config.count, count = _a === void 0 ? Infinity : _a, delay = config.delay, _b = config.resetOnSuccess, resetOnSuccess = _b === void 0 ? false : _b; - return count <= 0 - ? identity_1$4.identity - : lift_1$o.operate(function (source, subscriber) { - var soFar = 0; - var innerSub; - var subscribeForRetry = function () { - var syncUnsub = false; - innerSub = source.subscribe(OperatorSubscriber_1$j.createOperatorSubscriber(subscriber, function (value) { - if (resetOnSuccess) { - soFar = 0; - } - subscriber.next(value); - }, undefined, function (err) { - if (soFar++ < count) { - var resub_1 = function () { - if (innerSub) { - innerSub.unsubscribe(); - innerSub = null; - subscribeForRetry(); - } - else { - syncUnsub = true; - } - }; - if (delay != null) { - var notifier = typeof delay === 'number' ? timer_1$1.timer(delay) : innerFrom_1$c.innerFrom(delay(err, soFar)); - var notifierSubscriber_1 = OperatorSubscriber_1$j.createOperatorSubscriber(subscriber, function () { - notifierSubscriber_1.unsubscribe(); - resub_1(); - }, function () { - subscriber.complete(); - }); - notifier.subscribe(notifierSubscriber_1); - } - else { - resub_1(); - } - } - else { - subscriber.error(err); - } - })); - if (syncUnsub) { - innerSub.unsubscribe(); - innerSub = null; - subscribeForRetry(); - } - }; - subscribeForRetry(); - }); -} -retry$1.retry = retry; - -var retryWhen$1 = {}; - -Object.defineProperty(retryWhen$1, "__esModule", { value: true }); -retryWhen$1.retryWhen = void 0; -var innerFrom_1$b = innerFrom$1; -var Subject_1$6 = Subject$1; -var lift_1$n = lift; -var OperatorSubscriber_1$i = OperatorSubscriber$1; -function retryWhen(notifier) { - return lift_1$n.operate(function (source, subscriber) { - var innerSub; - var syncResub = false; - var errors$; - var subscribeForRetryWhen = function () { - innerSub = source.subscribe(OperatorSubscriber_1$i.createOperatorSubscriber(subscriber, undefined, undefined, function (err) { - if (!errors$) { - errors$ = new Subject_1$6.Subject(); - innerFrom_1$b.innerFrom(notifier(errors$)).subscribe(OperatorSubscriber_1$i.createOperatorSubscriber(subscriber, function () { - return innerSub ? subscribeForRetryWhen() : (syncResub = true); - })); - } - if (errors$) { - errors$.next(err); - } - })); - if (syncResub) { - innerSub.unsubscribe(); - innerSub = null; - syncResub = false; - subscribeForRetryWhen(); - } - }; - subscribeForRetryWhen(); - }); -} -retryWhen$1.retryWhen = retryWhen; - -var sample$2 = {}; - -Object.defineProperty(sample$2, "__esModule", { value: true }); -sample$2.sample = void 0; -var innerFrom_1$a = innerFrom$1; -var lift_1$m = lift; -var noop_1$5 = noop$2; -var OperatorSubscriber_1$h = OperatorSubscriber$1; -function sample$1(notifier) { - return lift_1$m.operate(function (source, subscriber) { - var hasValue = false; - var lastValue = null; - source.subscribe(OperatorSubscriber_1$h.createOperatorSubscriber(subscriber, function (value) { - hasValue = true; - lastValue = value; - })); - innerFrom_1$a.innerFrom(notifier).subscribe(OperatorSubscriber_1$h.createOperatorSubscriber(subscriber, function () { - if (hasValue) { - hasValue = false; - var value = lastValue; - lastValue = null; - subscriber.next(value); - } - }, noop_1$5.noop)); - }); -} -sample$2.sample = sample$1; - -var sampleTime$1 = {}; - -Object.defineProperty(sampleTime$1, "__esModule", { value: true }); -sampleTime$1.sampleTime = void 0; -var async_1$4 = async; -var sample_1 = sample$2; -var interval_1 = interval$1; -function sampleTime(period, scheduler) { - if (scheduler === void 0) { scheduler = async_1$4.asyncScheduler; } - return sample_1.sample(interval_1.interval(period, scheduler)); -} -sampleTime$1.sampleTime = sampleTime; - -var scan$1 = {}; - -Object.defineProperty(scan$1, "__esModule", { value: true }); -scan$1.scan = void 0; -var lift_1$l = lift; -var scanInternals_1 = scanInternals$1; -function scan(accumulator, seed) { - return lift_1$l.operate(scanInternals_1.scanInternals(accumulator, seed, arguments.length >= 2, true)); -} -scan$1.scan = scan; - -var sequenceEqual$1 = {}; - -Object.defineProperty(sequenceEqual$1, "__esModule", { value: true }); -sequenceEqual$1.sequenceEqual = void 0; -var lift_1$k = lift; -var OperatorSubscriber_1$g = OperatorSubscriber$1; -var innerFrom_1$9 = innerFrom$1; -function sequenceEqual(compareTo, comparator) { - if (comparator === void 0) { comparator = function (a, b) { return a === b; }; } - return lift_1$k.operate(function (source, subscriber) { - var aState = createState(); - var bState = createState(); - var emit = function (isEqual) { - subscriber.next(isEqual); - subscriber.complete(); - }; - var createSubscriber = function (selfState, otherState) { - var sequenceEqualSubscriber = OperatorSubscriber_1$g.createOperatorSubscriber(subscriber, function (a) { - var buffer = otherState.buffer, complete = otherState.complete; - if (buffer.length === 0) { - complete ? emit(false) : selfState.buffer.push(a); - } - else { - !comparator(a, buffer.shift()) && emit(false); - } - }, function () { - selfState.complete = true; - var complete = otherState.complete, buffer = otherState.buffer; - complete && emit(buffer.length === 0); - sequenceEqualSubscriber === null || sequenceEqualSubscriber === void 0 ? void 0 : sequenceEqualSubscriber.unsubscribe(); - }); - return sequenceEqualSubscriber; - }; - source.subscribe(createSubscriber(aState, bState)); - innerFrom_1$9.innerFrom(compareTo).subscribe(createSubscriber(bState, aState)); - }); -} -sequenceEqual$1.sequenceEqual = sequenceEqual; -function createState() { - return { - buffer: [], - complete: false, - }; -} - -var share$1 = {}; - -var __read$3 = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -var __spreadArray$3 = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { - for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) - to[j] = from[i]; - return to; -}; -Object.defineProperty(share$1, "__esModule", { value: true }); -share$1.share = void 0; -var innerFrom_1$8 = innerFrom$1; -var Subject_1$5 = Subject$1; -var Subscriber_1 = Subscriber; -var lift_1$j = lift; -function share(options) { - if (options === void 0) { options = {}; } - var _a = options.connector, connector = _a === void 0 ? function () { return new Subject_1$5.Subject(); } : _a, _b = options.resetOnError, resetOnError = _b === void 0 ? true : _b, _c = options.resetOnComplete, resetOnComplete = _c === void 0 ? true : _c, _d = options.resetOnRefCountZero, resetOnRefCountZero = _d === void 0 ? true : _d; - return function (wrapperSource) { - var connection; - var resetConnection; - var subject; - var refCount = 0; - var hasCompleted = false; - var hasErrored = false; - var cancelReset = function () { - resetConnection === null || resetConnection === void 0 ? void 0 : resetConnection.unsubscribe(); - resetConnection = undefined; - }; - var reset = function () { - cancelReset(); - connection = subject = undefined; - hasCompleted = hasErrored = false; - }; - var resetAndUnsubscribe = function () { - var conn = connection; - reset(); - conn === null || conn === void 0 ? void 0 : conn.unsubscribe(); - }; - return lift_1$j.operate(function (source, subscriber) { - refCount++; - if (!hasErrored && !hasCompleted) { - cancelReset(); - } - var dest = (subject = subject !== null && subject !== void 0 ? subject : connector()); - subscriber.add(function () { - refCount--; - if (refCount === 0 && !hasErrored && !hasCompleted) { - resetConnection = handleReset(resetAndUnsubscribe, resetOnRefCountZero); - } - }); - dest.subscribe(subscriber); - if (!connection && - refCount > 0) { - connection = new Subscriber_1.SafeSubscriber({ - next: function (value) { return dest.next(value); }, - error: function (err) { - hasErrored = true; - cancelReset(); - resetConnection = handleReset(reset, resetOnError, err); - dest.error(err); - }, - complete: function () { - hasCompleted = true; - cancelReset(); - resetConnection = handleReset(reset, resetOnComplete); - dest.complete(); - }, - }); - innerFrom_1$8.innerFrom(source).subscribe(connection); - } - })(wrapperSource); - }; -} -share$1.share = share; -function handleReset(reset, on) { - var args = []; - for (var _i = 2; _i < arguments.length; _i++) { - args[_i - 2] = arguments[_i]; - } - if (on === true) { - reset(); - return; - } - if (on === false) { - return; - } - var onSubscriber = new Subscriber_1.SafeSubscriber({ - next: function () { - onSubscriber.unsubscribe(); - reset(); - }, - }); - return innerFrom_1$8.innerFrom(on.apply(void 0, __spreadArray$3([], __read$3(args)))).subscribe(onSubscriber); -} - -var shareReplay$1 = {}; - -Object.defineProperty(shareReplay$1, "__esModule", { value: true }); -shareReplay$1.shareReplay = void 0; -var ReplaySubject_1 = ReplaySubject$1; -var share_1 = share$1; -function shareReplay(configOrBufferSize, windowTime, scheduler) { - var _a, _b, _c; - var bufferSize; - var refCount = false; - if (configOrBufferSize && typeof configOrBufferSize === 'object') { - (_a = configOrBufferSize.bufferSize, bufferSize = _a === void 0 ? Infinity : _a, _b = configOrBufferSize.windowTime, windowTime = _b === void 0 ? Infinity : _b, _c = configOrBufferSize.refCount, refCount = _c === void 0 ? false : _c, scheduler = configOrBufferSize.scheduler); - } - else { - bufferSize = (configOrBufferSize !== null && configOrBufferSize !== void 0 ? configOrBufferSize : Infinity); - } - return share_1.share({ - connector: function () { return new ReplaySubject_1.ReplaySubject(bufferSize, windowTime, scheduler); }, - resetOnError: true, - resetOnComplete: false, - resetOnRefCountZero: refCount, - }); -} -shareReplay$1.shareReplay = shareReplay; - -var single$1 = {}; - -Object.defineProperty(single$1, "__esModule", { value: true }); -single$1.single = void 0; -var EmptyError_1 = EmptyError; -var SequenceError_1 = SequenceError; -var NotFoundError_1 = NotFoundError; -var lift_1$i = lift; -var OperatorSubscriber_1$f = OperatorSubscriber$1; -function single(predicate) { - return lift_1$i.operate(function (source, subscriber) { - var hasValue = false; - var singleValue; - var seenValue = false; - var index = 0; - source.subscribe(OperatorSubscriber_1$f.createOperatorSubscriber(subscriber, function (value) { - seenValue = true; - if (!predicate || predicate(value, index++, source)) { - hasValue && subscriber.error(new SequenceError_1.SequenceError('Too many matching values')); - hasValue = true; - singleValue = value; - } - }, function () { - if (hasValue) { - subscriber.next(singleValue); - subscriber.complete(); - } - else { - subscriber.error(seenValue ? new NotFoundError_1.NotFoundError('No matching values') : new EmptyError_1.EmptyError()); - } - })); - }); -} -single$1.single = single; - -var skip$1 = {}; - -Object.defineProperty(skip$1, "__esModule", { value: true }); -skip$1.skip = void 0; -var filter_1 = filter$1; -function skip(count) { - return filter_1.filter(function (_, index) { return count <= index; }); -} -skip$1.skip = skip; - -var skipLast$1 = {}; - -Object.defineProperty(skipLast$1, "__esModule", { value: true }); -skipLast$1.skipLast = void 0; -var identity_1$3 = identity$1; -var lift_1$h = lift; -var OperatorSubscriber_1$e = OperatorSubscriber$1; -function skipLast(skipCount) { - return skipCount <= 0 - ? - identity_1$3.identity - : lift_1$h.operate(function (source, subscriber) { - var ring = new Array(skipCount); - var seen = 0; - source.subscribe(OperatorSubscriber_1$e.createOperatorSubscriber(subscriber, function (value) { - var valueIndex = seen++; - if (valueIndex < skipCount) { - ring[valueIndex] = value; - } - else { - var index = valueIndex % skipCount; - var oldValue = ring[index]; - ring[index] = value; - subscriber.next(oldValue); - } - })); - return function () { - ring = null; - }; - }); -} -skipLast$1.skipLast = skipLast; - -var skipUntil$1 = {}; - -Object.defineProperty(skipUntil$1, "__esModule", { value: true }); -skipUntil$1.skipUntil = void 0; -var lift_1$g = lift; -var OperatorSubscriber_1$d = OperatorSubscriber$1; -var innerFrom_1$7 = innerFrom$1; -var noop_1$4 = noop$2; -function skipUntil(notifier) { - return lift_1$g.operate(function (source, subscriber) { - var taking = false; - var skipSubscriber = OperatorSubscriber_1$d.createOperatorSubscriber(subscriber, function () { - skipSubscriber === null || skipSubscriber === void 0 ? void 0 : skipSubscriber.unsubscribe(); - taking = true; - }, noop_1$4.noop); - innerFrom_1$7.innerFrom(notifier).subscribe(skipSubscriber); - source.subscribe(OperatorSubscriber_1$d.createOperatorSubscriber(subscriber, function (value) { return taking && subscriber.next(value); })); - }); -} -skipUntil$1.skipUntil = skipUntil; - -var skipWhile$1 = {}; - -Object.defineProperty(skipWhile$1, "__esModule", { value: true }); -skipWhile$1.skipWhile = void 0; -var lift_1$f = lift; -var OperatorSubscriber_1$c = OperatorSubscriber$1; -function skipWhile(predicate) { - return lift_1$f.operate(function (source, subscriber) { - var taking = false; - var index = 0; - source.subscribe(OperatorSubscriber_1$c.createOperatorSubscriber(subscriber, function (value) { return (taking || (taking = !predicate(value, index++))) && subscriber.next(value); })); - }); -} -skipWhile$1.skipWhile = skipWhile; - -var startWith$1 = {}; - -Object.defineProperty(startWith$1, "__esModule", { value: true }); -startWith$1.startWith = void 0; -var concat_1 = concat$3; -var args_1$2 = args; -var lift_1$e = lift; -function startWith() { - var values = []; - for (var _i = 0; _i < arguments.length; _i++) { - values[_i] = arguments[_i]; - } - var scheduler = args_1$2.popScheduler(values); - return lift_1$e.operate(function (source, subscriber) { - (scheduler ? concat_1.concat(values, source, scheduler) : concat_1.concat(values, source)).subscribe(subscriber); - }); -} -startWith$1.startWith = startWith; - -var switchAll$1 = {}; - -var switchMap$1 = {}; - -Object.defineProperty(switchMap$1, "__esModule", { value: true }); -switchMap$1.switchMap = void 0; -var innerFrom_1$6 = innerFrom$1; -var lift_1$d = lift; -var OperatorSubscriber_1$b = OperatorSubscriber$1; -function switchMap(project, resultSelector) { - return lift_1$d.operate(function (source, subscriber) { - var innerSubscriber = null; - var index = 0; - var isComplete = false; - var checkComplete = function () { return isComplete && !innerSubscriber && subscriber.complete(); }; - source.subscribe(OperatorSubscriber_1$b.createOperatorSubscriber(subscriber, function (value) { - innerSubscriber === null || innerSubscriber === void 0 ? void 0 : innerSubscriber.unsubscribe(); - var innerIndex = 0; - var outerIndex = index++; - innerFrom_1$6.innerFrom(project(value, outerIndex)).subscribe((innerSubscriber = OperatorSubscriber_1$b.createOperatorSubscriber(subscriber, function (innerValue) { return subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue); }, function () { - innerSubscriber = null; - checkComplete(); - }))); - }, function () { - isComplete = true; - checkComplete(); - })); - }); -} -switchMap$1.switchMap = switchMap; - -Object.defineProperty(switchAll$1, "__esModule", { value: true }); -switchAll$1.switchAll = void 0; -var switchMap_1$2 = switchMap$1; -var identity_1$2 = identity$1; -function switchAll() { - return switchMap_1$2.switchMap(identity_1$2.identity); -} -switchAll$1.switchAll = switchAll; - -var switchMapTo$1 = {}; - -Object.defineProperty(switchMapTo$1, "__esModule", { value: true }); -switchMapTo$1.switchMapTo = void 0; -var switchMap_1$1 = switchMap$1; -var isFunction_1$1 = isFunction$1; -function switchMapTo(innerObservable, resultSelector) { - return isFunction_1$1.isFunction(resultSelector) ? switchMap_1$1.switchMap(function () { return innerObservable; }, resultSelector) : switchMap_1$1.switchMap(function () { return innerObservable; }); -} -switchMapTo$1.switchMapTo = switchMapTo; - -var switchScan$1 = {}; - -Object.defineProperty(switchScan$1, "__esModule", { value: true }); -switchScan$1.switchScan = void 0; -var switchMap_1 = switchMap$1; -var lift_1$c = lift; -function switchScan(accumulator, seed) { - return lift_1$c.operate(function (source, subscriber) { - var state = seed; - switchMap_1.switchMap(function (value, index) { return accumulator(state, value, index); }, function (_, innerValue) { return ((state = innerValue), innerValue); })(source).subscribe(subscriber); - return function () { - state = null; - }; - }); -} -switchScan$1.switchScan = switchScan; - -var takeUntil$1 = {}; - -Object.defineProperty(takeUntil$1, "__esModule", { value: true }); -takeUntil$1.takeUntil = void 0; -var lift_1$b = lift; -var OperatorSubscriber_1$a = OperatorSubscriber$1; -var innerFrom_1$5 = innerFrom$1; -var noop_1$3 = noop$2; -function takeUntil(notifier) { - return lift_1$b.operate(function (source, subscriber) { - innerFrom_1$5.innerFrom(notifier).subscribe(OperatorSubscriber_1$a.createOperatorSubscriber(subscriber, function () { return subscriber.complete(); }, noop_1$3.noop)); - !subscriber.closed && source.subscribe(subscriber); - }); -} -takeUntil$1.takeUntil = takeUntil; - -var takeWhile$1 = {}; - -Object.defineProperty(takeWhile$1, "__esModule", { value: true }); -takeWhile$1.takeWhile = void 0; -var lift_1$a = lift; -var OperatorSubscriber_1$9 = OperatorSubscriber$1; -function takeWhile(predicate, inclusive) { - if (inclusive === void 0) { inclusive = false; } - return lift_1$a.operate(function (source, subscriber) { - var index = 0; - source.subscribe(OperatorSubscriber_1$9.createOperatorSubscriber(subscriber, function (value) { - var result = predicate(value, index++); - (result || inclusive) && subscriber.next(value); - !result && subscriber.complete(); - })); - }); -} -takeWhile$1.takeWhile = takeWhile; - -var tap$1 = {}; - -Object.defineProperty(tap$1, "__esModule", { value: true }); -tap$1.tap = void 0; -var isFunction_1 = isFunction$1; -var lift_1$9 = lift; -var OperatorSubscriber_1$8 = OperatorSubscriber$1; -var identity_1$1 = identity$1; -function tap(observerOrNext, error, complete) { - var tapObserver = isFunction_1.isFunction(observerOrNext) || error || complete - ? - { next: observerOrNext, error: error, complete: complete } - : observerOrNext; - return tapObserver - ? lift_1$9.operate(function (source, subscriber) { - var _a; - (_a = tapObserver.subscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver); - var isUnsub = true; - source.subscribe(OperatorSubscriber_1$8.createOperatorSubscriber(subscriber, function (value) { - var _a; - (_a = tapObserver.next) === null || _a === void 0 ? void 0 : _a.call(tapObserver, value); - subscriber.next(value); - }, function () { - var _a; - isUnsub = false; - (_a = tapObserver.complete) === null || _a === void 0 ? void 0 : _a.call(tapObserver); - subscriber.complete(); - }, function (err) { - var _a; - isUnsub = false; - (_a = tapObserver.error) === null || _a === void 0 ? void 0 : _a.call(tapObserver, err); - subscriber.error(err); - }, function () { - var _a, _b; - if (isUnsub) { - (_a = tapObserver.unsubscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver); - } - (_b = tapObserver.finalize) === null || _b === void 0 ? void 0 : _b.call(tapObserver); - })); - }) - : - identity_1$1.identity; -} -tap$1.tap = tap; - -var throttle$1 = {}; - -Object.defineProperty(throttle$1, "__esModule", { value: true }); -throttle$1.throttle = void 0; -var lift_1$8 = lift; -var OperatorSubscriber_1$7 = OperatorSubscriber$1; -var innerFrom_1$4 = innerFrom$1; -function throttle(durationSelector, config) { - return lift_1$8.operate(function (source, subscriber) { - var _a = config !== null && config !== void 0 ? config : {}, _b = _a.leading, leading = _b === void 0 ? true : _b, _c = _a.trailing, trailing = _c === void 0 ? false : _c; - var hasValue = false; - var sendValue = null; - var throttled = null; - var isComplete = false; - var endThrottling = function () { - throttled === null || throttled === void 0 ? void 0 : throttled.unsubscribe(); - throttled = null; - if (trailing) { - send(); - isComplete && subscriber.complete(); - } - }; - var cleanupThrottling = function () { - throttled = null; - isComplete && subscriber.complete(); - }; - var startThrottle = function (value) { - return (throttled = innerFrom_1$4.innerFrom(durationSelector(value)).subscribe(OperatorSubscriber_1$7.createOperatorSubscriber(subscriber, endThrottling, cleanupThrottling))); - }; - var send = function () { - if (hasValue) { - hasValue = false; - var value = sendValue; - sendValue = null; - subscriber.next(value); - !isComplete && startThrottle(value); - } - }; - source.subscribe(OperatorSubscriber_1$7.createOperatorSubscriber(subscriber, function (value) { - hasValue = true; - sendValue = value; - !(throttled && !throttled.closed) && (leading ? send() : startThrottle(value)); - }, function () { - isComplete = true; - !(trailing && hasValue && throttled && !throttled.closed) && subscriber.complete(); - })); - }); -} -throttle$1.throttle = throttle; - -var throttleTime$1 = {}; - -Object.defineProperty(throttleTime$1, "__esModule", { value: true }); -throttleTime$1.throttleTime = void 0; -var async_1$3 = async; -var throttle_1 = throttle$1; -var timer_1 = timer$1; -function throttleTime(duration, scheduler, config) { - if (scheduler === void 0) { scheduler = async_1$3.asyncScheduler; } - var duration$ = timer_1.timer(duration, scheduler); - return throttle_1.throttle(function () { return duration$; }, config); -} -throttleTime$1.throttleTime = throttleTime; - -var timeInterval$1 = {}; - -Object.defineProperty(timeInterval$1, "__esModule", { value: true }); -timeInterval$1.TimeInterval = timeInterval$1.timeInterval = void 0; -var async_1$2 = async; -var lift_1$7 = lift; -var OperatorSubscriber_1$6 = OperatorSubscriber$1; -function timeInterval(scheduler) { - if (scheduler === void 0) { scheduler = async_1$2.asyncScheduler; } - return lift_1$7.operate(function (source, subscriber) { - var last = scheduler.now(); - source.subscribe(OperatorSubscriber_1$6.createOperatorSubscriber(subscriber, function (value) { - var now = scheduler.now(); - var interval = now - last; - last = now; - subscriber.next(new TimeInterval(value, interval)); - })); - }); -} -timeInterval$1.timeInterval = timeInterval; -var TimeInterval = (function () { - function TimeInterval(value, interval) { - this.value = value; - this.interval = interval; - } - return TimeInterval; -}()); -timeInterval$1.TimeInterval = TimeInterval; - -var timeoutWith$1 = {}; - -Object.defineProperty(timeoutWith$1, "__esModule", { value: true }); -timeoutWith$1.timeoutWith = void 0; -var async_1$1 = async; -var isDate_1 = isDate; -var timeout_1 = timeout; -function timeoutWith(due, withObservable, scheduler) { - var first; - var each; - var _with; - scheduler = scheduler !== null && scheduler !== void 0 ? scheduler : async_1$1.async; - if (isDate_1.isValidDate(due)) { - first = due; - } - else if (typeof due === 'number') { - each = due; - } - if (withObservable) { - _with = function () { return withObservable; }; - } - else { - throw new TypeError('No observable provided to switch to'); - } - if (first == null && each == null) { - throw new TypeError('No timeout provided.'); - } - return timeout_1.timeout({ - first: first, - each: each, - scheduler: scheduler, - with: _with, - }); -} -timeoutWith$1.timeoutWith = timeoutWith; - -var timestamp$2 = {}; - -Object.defineProperty(timestamp$2, "__esModule", { value: true }); -timestamp$2.timestamp = void 0; -var dateTimestampProvider_1 = dateTimestampProvider; -var map_1 = map$2; -function timestamp$1(timestampProvider) { - if (timestampProvider === void 0) { timestampProvider = dateTimestampProvider_1.dateTimestampProvider; } - return map_1.map(function (value) { return ({ value: value, timestamp: timestampProvider.now() }); }); -} -timestamp$2.timestamp = timestamp$1; - -var window$2 = {}; - -Object.defineProperty(window$2, "__esModule", { value: true }); -window$2.window = void 0; -var Subject_1$4 = Subject$1; -var lift_1$6 = lift; -var OperatorSubscriber_1$5 = OperatorSubscriber$1; -var noop_1$2 = noop$2; -var innerFrom_1$3 = innerFrom$1; -function window$1(windowBoundaries) { - return lift_1$6.operate(function (source, subscriber) { - var windowSubject = new Subject_1$4.Subject(); - subscriber.next(windowSubject.asObservable()); - var errorHandler = function (err) { - windowSubject.error(err); - subscriber.error(err); - }; - source.subscribe(OperatorSubscriber_1$5.createOperatorSubscriber(subscriber, function (value) { return windowSubject === null || windowSubject === void 0 ? void 0 : windowSubject.next(value); }, function () { - windowSubject.complete(); - subscriber.complete(); - }, errorHandler)); - innerFrom_1$3.innerFrom(windowBoundaries).subscribe(OperatorSubscriber_1$5.createOperatorSubscriber(subscriber, function () { - windowSubject.complete(); - subscriber.next((windowSubject = new Subject_1$4.Subject())); - }, noop_1$2.noop, errorHandler)); - return function () { - windowSubject === null || windowSubject === void 0 ? void 0 : windowSubject.unsubscribe(); - windowSubject = null; - }; - }); -} -window$2.window = window$1; - -var windowCount$1 = {}; - -var __values$1 = (commonjsGlobal && commonjsGlobal.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(windowCount$1, "__esModule", { value: true }); -windowCount$1.windowCount = void 0; -var Subject_1$3 = Subject$1; -var lift_1$5 = lift; -var OperatorSubscriber_1$4 = OperatorSubscriber$1; -function windowCount(windowSize, startWindowEvery) { - if (startWindowEvery === void 0) { startWindowEvery = 0; } - var startEvery = startWindowEvery > 0 ? startWindowEvery : windowSize; - return lift_1$5.operate(function (source, subscriber) { - var windows = [new Subject_1$3.Subject()]; - var count = 0; - subscriber.next(windows[0].asObservable()); - source.subscribe(OperatorSubscriber_1$4.createOperatorSubscriber(subscriber, function (value) { - var e_1, _a; - try { - for (var windows_1 = __values$1(windows), windows_1_1 = windows_1.next(); !windows_1_1.done; windows_1_1 = windows_1.next()) { - var window_1 = windows_1_1.value; - window_1.next(value); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (windows_1_1 && !windows_1_1.done && (_a = windows_1.return)) _a.call(windows_1); - } - finally { if (e_1) throw e_1.error; } - } - var c = count - windowSize + 1; - if (c >= 0 && c % startEvery === 0) { - windows.shift().complete(); - } - if (++count % startEvery === 0) { - var window_2 = new Subject_1$3.Subject(); - windows.push(window_2); - subscriber.next(window_2.asObservable()); - } - }, function () { - while (windows.length > 0) { - windows.shift().complete(); - } - subscriber.complete(); - }, function (err) { - while (windows.length > 0) { - windows.shift().error(err); - } - subscriber.error(err); - }, function () { - windows = null; - })); - }); -} -windowCount$1.windowCount = windowCount; - -var windowTime$1 = {}; - -Object.defineProperty(windowTime$1, "__esModule", { value: true }); -windowTime$1.windowTime = void 0; -var Subject_1$2 = Subject$1; -var async_1 = async; -var Subscription_1$1 = Subscription$1; -var lift_1$4 = lift; -var OperatorSubscriber_1$3 = OperatorSubscriber$1; -var arrRemove_1$1 = arrRemove$1; -var args_1$1 = args; -var executeSchedule_1 = executeSchedule$1; -function windowTime(windowTimeSpan) { - var _a, _b; - var otherArgs = []; - for (var _i = 1; _i < arguments.length; _i++) { - otherArgs[_i - 1] = arguments[_i]; - } - var scheduler = (_a = args_1$1.popScheduler(otherArgs)) !== null && _a !== void 0 ? _a : async_1.asyncScheduler; - var windowCreationInterval = (_b = otherArgs[0]) !== null && _b !== void 0 ? _b : null; - var maxWindowSize = otherArgs[1] || Infinity; - return lift_1$4.operate(function (source, subscriber) { - var windowRecords = []; - var restartOnClose = false; - var closeWindow = function (record) { - var window = record.window, subs = record.subs; - window.complete(); - subs.unsubscribe(); - arrRemove_1$1.arrRemove(windowRecords, record); - restartOnClose && startWindow(); - }; - var startWindow = function () { - if (windowRecords) { - var subs = new Subscription_1$1.Subscription(); - subscriber.add(subs); - var window_1 = new Subject_1$2.Subject(); - var record_1 = { - window: window_1, - subs: subs, - seen: 0, - }; - windowRecords.push(record_1); - subscriber.next(window_1.asObservable()); - executeSchedule_1.executeSchedule(subs, scheduler, function () { return closeWindow(record_1); }, windowTimeSpan); - } - }; - if (windowCreationInterval !== null && windowCreationInterval >= 0) { - executeSchedule_1.executeSchedule(subscriber, scheduler, startWindow, windowCreationInterval, true); - } - else { - restartOnClose = true; - } - startWindow(); - var loop = function (cb) { return windowRecords.slice().forEach(cb); }; - var terminate = function (cb) { - loop(function (_a) { - var window = _a.window; - return cb(window); - }); - cb(subscriber); - subscriber.unsubscribe(); - }; - source.subscribe(OperatorSubscriber_1$3.createOperatorSubscriber(subscriber, function (value) { - loop(function (record) { - record.window.next(value); - maxWindowSize <= ++record.seen && closeWindow(record); - }); - }, function () { return terminate(function (consumer) { return consumer.complete(); }); }, function (err) { return terminate(function (consumer) { return consumer.error(err); }); })); - return function () { - windowRecords = null; - }; - }); -} -windowTime$1.windowTime = windowTime; - -var windowToggle$1 = {}; - -var __values = (commonjsGlobal && commonjsGlobal.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(windowToggle$1, "__esModule", { value: true }); -windowToggle$1.windowToggle = void 0; -var Subject_1$1 = Subject$1; -var Subscription_1 = Subscription$1; -var lift_1$3 = lift; -var innerFrom_1$2 = innerFrom$1; -var OperatorSubscriber_1$2 = OperatorSubscriber$1; -var noop_1$1 = noop$2; -var arrRemove_1 = arrRemove$1; -function windowToggle(openings, closingSelector) { - return lift_1$3.operate(function (source, subscriber) { - var windows = []; - var handleError = function (err) { - while (0 < windows.length) { - windows.shift().error(err); - } - subscriber.error(err); - }; - innerFrom_1$2.innerFrom(openings).subscribe(OperatorSubscriber_1$2.createOperatorSubscriber(subscriber, function (openValue) { - var window = new Subject_1$1.Subject(); - windows.push(window); - var closingSubscription = new Subscription_1.Subscription(); - var closeWindow = function () { - arrRemove_1.arrRemove(windows, window); - window.complete(); - closingSubscription.unsubscribe(); - }; - var closingNotifier; - try { - closingNotifier = innerFrom_1$2.innerFrom(closingSelector(openValue)); - } - catch (err) { - handleError(err); - return; - } - subscriber.next(window.asObservable()); - closingSubscription.add(closingNotifier.subscribe(OperatorSubscriber_1$2.createOperatorSubscriber(subscriber, closeWindow, noop_1$1.noop, handleError))); - }, noop_1$1.noop)); - source.subscribe(OperatorSubscriber_1$2.createOperatorSubscriber(subscriber, function (value) { - var e_1, _a; - var windowsCopy = windows.slice(); - try { - for (var windowsCopy_1 = __values(windowsCopy), windowsCopy_1_1 = windowsCopy_1.next(); !windowsCopy_1_1.done; windowsCopy_1_1 = windowsCopy_1.next()) { - var window_1 = windowsCopy_1_1.value; - window_1.next(value); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (windowsCopy_1_1 && !windowsCopy_1_1.done && (_a = windowsCopy_1.return)) _a.call(windowsCopy_1); - } - finally { if (e_1) throw e_1.error; } - } - }, function () { - while (0 < windows.length) { - windows.shift().complete(); - } - subscriber.complete(); - }, handleError, function () { - while (0 < windows.length) { - windows.shift().unsubscribe(); - } - })); - }); -} -windowToggle$1.windowToggle = windowToggle; - -var windowWhen$1 = {}; - -Object.defineProperty(windowWhen$1, "__esModule", { value: true }); -windowWhen$1.windowWhen = void 0; -var Subject_1 = Subject$1; -var lift_1$2 = lift; -var OperatorSubscriber_1$1 = OperatorSubscriber$1; -var innerFrom_1$1 = innerFrom$1; -function windowWhen(closingSelector) { - return lift_1$2.operate(function (source, subscriber) { - var window; - var closingSubscriber; - var handleError = function (err) { - window.error(err); - subscriber.error(err); - }; - var openWindow = function () { - closingSubscriber === null || closingSubscriber === void 0 ? void 0 : closingSubscriber.unsubscribe(); - window === null || window === void 0 ? void 0 : window.complete(); - window = new Subject_1.Subject(); - subscriber.next(window.asObservable()); - var closingNotifier; - try { - closingNotifier = innerFrom_1$1.innerFrom(closingSelector()); - } - catch (err) { - handleError(err); - return; - } - closingNotifier.subscribe((closingSubscriber = OperatorSubscriber_1$1.createOperatorSubscriber(subscriber, openWindow, openWindow, handleError))); - }; - openWindow(); - source.subscribe(OperatorSubscriber_1$1.createOperatorSubscriber(subscriber, function (value) { return window.next(value); }, function () { - window.complete(); - subscriber.complete(); - }, handleError, function () { - closingSubscriber === null || closingSubscriber === void 0 ? void 0 : closingSubscriber.unsubscribe(); - window = null; - })); - }); -} -windowWhen$1.windowWhen = windowWhen; - -var withLatestFrom$1 = {}; - -var __read$2 = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -var __spreadArray$2 = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { - for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) - to[j] = from[i]; - return to; -}; -Object.defineProperty(withLatestFrom$1, "__esModule", { value: true }); -withLatestFrom$1.withLatestFrom = void 0; -var lift_1$1 = lift; -var OperatorSubscriber_1 = OperatorSubscriber$1; -var innerFrom_1 = innerFrom$1; -var identity_1 = identity$1; -var noop_1 = noop$2; -var args_1 = args; -function withLatestFrom() { - var inputs = []; - for (var _i = 0; _i < arguments.length; _i++) { - inputs[_i] = arguments[_i]; - } - var project = args_1.popResultSelector(inputs); - return lift_1$1.operate(function (source, subscriber) { - var len = inputs.length; - var otherValues = new Array(len); - var hasValue = inputs.map(function () { return false; }); - var ready = false; - var _loop_1 = function (i) { - innerFrom_1.innerFrom(inputs[i]).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) { - otherValues[i] = value; - if (!ready && !hasValue[i]) { - hasValue[i] = true; - (ready = hasValue.every(identity_1.identity)) && (hasValue = null); - } - }, noop_1.noop)); - }; - for (var i = 0; i < len; i++) { - _loop_1(i); - } - source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) { - if (ready) { - var values = __spreadArray$2([value], __read$2(otherValues)); - subscriber.next(project ? project.apply(void 0, __spreadArray$2([], __read$2(values))) : values); - } - })); - }); -} -withLatestFrom$1.withLatestFrom = withLatestFrom; - -var zipAll$1 = {}; - -Object.defineProperty(zipAll$1, "__esModule", { value: true }); -zipAll$1.zipAll = void 0; -var zip_1$2 = zip$3; -var joinAllInternals_1 = joinAllInternals$1; -function zipAll(project) { - return joinAllInternals_1.joinAllInternals(zip_1$2.zip, project); -} -zipAll$1.zipAll = zipAll; - -var zipWith$1 = {}; - -var zip$1 = {}; - -var __read$1 = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -var __spreadArray$1 = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { - for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) - to[j] = from[i]; - return to; -}; -Object.defineProperty(zip$1, "__esModule", { value: true }); -zip$1.zip = void 0; -var zip_1$1 = zip$3; -var lift_1 = lift; -function zip() { - var sources = []; - for (var _i = 0; _i < arguments.length; _i++) { - sources[_i] = arguments[_i]; - } - return lift_1.operate(function (source, subscriber) { - zip_1$1.zip.apply(void 0, __spreadArray$1([source], __read$1(sources))).subscribe(subscriber); - }); -} -zip$1.zip = zip; - -var __read = (commonjsGlobal && commonjsGlobal.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -var __spreadArray = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from) { - for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) - to[j] = from[i]; - return to; -}; -Object.defineProperty(zipWith$1, "__esModule", { value: true }); -zipWith$1.zipWith = void 0; -var zip_1 = zip$1; -function zipWith() { - var otherInputs = []; - for (var _i = 0; _i < arguments.length; _i++) { - otherInputs[_i] = arguments[_i]; - } - return zip_1.zip.apply(void 0, __spreadArray([], __read(otherInputs))); -} -zipWith$1.zipWith = zipWith; - -(function (exports) { - var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); - }) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; - })); - var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.interval = exports.iif = exports.generate = exports.fromEventPattern = exports.fromEvent = exports.from = exports.forkJoin = exports.empty = exports.defer = exports.connectable = exports.concat = exports.combineLatest = exports.bindNodeCallback = exports.bindCallback = exports.UnsubscriptionError = exports.TimeoutError = exports.SequenceError = exports.ObjectUnsubscribedError = exports.NotFoundError = exports.EmptyError = exports.ArgumentOutOfRangeError = exports.firstValueFrom = exports.lastValueFrom = exports.isObservable = exports.identity = exports.noop = exports.pipe = exports.NotificationKind = exports.Notification = exports.Subscriber = exports.Subscription = exports.Scheduler = exports.VirtualAction = exports.VirtualTimeScheduler = exports.animationFrameScheduler = exports.animationFrame = exports.queueScheduler = exports.queue = exports.asyncScheduler = exports.async = exports.asapScheduler = exports.asap = exports.AsyncSubject = exports.ReplaySubject = exports.BehaviorSubject = exports.Subject = exports.animationFrames = exports.observable = exports.ConnectableObservable = exports.Observable = void 0; - exports.filter = exports.expand = exports.exhaustMap = exports.exhaustAll = exports.exhaust = exports.every = exports.endWith = exports.elementAt = exports.distinctUntilKeyChanged = exports.distinctUntilChanged = exports.distinct = exports.dematerialize = exports.delayWhen = exports.delay = exports.defaultIfEmpty = exports.debounceTime = exports.debounce = exports.count = exports.connect = exports.concatWith = exports.concatMapTo = exports.concatMap = exports.concatAll = exports.combineLatestWith = exports.combineLatestAll = exports.combineAll = exports.catchError = exports.bufferWhen = exports.bufferToggle = exports.bufferTime = exports.bufferCount = exports.buffer = exports.auditTime = exports.audit = exports.config = exports.NEVER = exports.EMPTY = exports.scheduled = exports.zip = exports.using = exports.timer = exports.throwError = exports.range = exports.race = exports.partition = exports.pairs = exports.onErrorResumeNext = exports.of = exports.never = exports.merge = void 0; - exports.switchMap = exports.switchAll = exports.subscribeOn = exports.startWith = exports.skipWhile = exports.skipUntil = exports.skipLast = exports.skip = exports.single = exports.shareReplay = exports.share = exports.sequenceEqual = exports.scan = exports.sampleTime = exports.sample = exports.refCount = exports.retryWhen = exports.retry = exports.repeatWhen = exports.repeat = exports.reduce = exports.raceWith = exports.publishReplay = exports.publishLast = exports.publishBehavior = exports.publish = exports.pluck = exports.pairwise = exports.onErrorResumeNextWith = exports.observeOn = exports.multicast = exports.min = exports.mergeWith = exports.mergeScan = exports.mergeMapTo = exports.mergeMap = exports.flatMap = exports.mergeAll = exports.max = exports.materialize = exports.mapTo = exports.map = exports.last = exports.isEmpty = exports.ignoreElements = exports.groupBy = exports.first = exports.findIndex = exports.find = exports.finalize = void 0; - exports.zipWith = exports.zipAll = exports.withLatestFrom = exports.windowWhen = exports.windowToggle = exports.windowTime = exports.windowCount = exports.window = exports.toArray = exports.timestamp = exports.timeoutWith = exports.timeout = exports.timeInterval = exports.throwIfEmpty = exports.throttleTime = exports.throttle = exports.tap = exports.takeWhile = exports.takeUntil = exports.takeLast = exports.take = exports.switchScan = exports.switchMapTo = void 0; - var Observable_1 = Observable$1; - Object.defineProperty(exports, "Observable", { enumerable: true, get: function () { return Observable_1.Observable; } }); - var ConnectableObservable_1 = ConnectableObservable$1; - Object.defineProperty(exports, "ConnectableObservable", { enumerable: true, get: function () { return ConnectableObservable_1.ConnectableObservable; } }); - var observable_1 = observable; - Object.defineProperty(exports, "observable", { enumerable: true, get: function () { return observable_1.observable; } }); - var animationFrames_1 = animationFrames$1; - Object.defineProperty(exports, "animationFrames", { enumerable: true, get: function () { return animationFrames_1.animationFrames; } }); - var Subject_1 = Subject$1; - Object.defineProperty(exports, "Subject", { enumerable: true, get: function () { return Subject_1.Subject; } }); - var BehaviorSubject_1 = BehaviorSubject$1; - Object.defineProperty(exports, "BehaviorSubject", { enumerable: true, get: function () { return BehaviorSubject_1.BehaviorSubject; } }); - var ReplaySubject_1 = ReplaySubject$1; - Object.defineProperty(exports, "ReplaySubject", { enumerable: true, get: function () { return ReplaySubject_1.ReplaySubject; } }); - var AsyncSubject_1 = AsyncSubject$1; - Object.defineProperty(exports, "AsyncSubject", { enumerable: true, get: function () { return AsyncSubject_1.AsyncSubject; } }); - var asap_1 = asap; - Object.defineProperty(exports, "asap", { enumerable: true, get: function () { return asap_1.asap; } }); - Object.defineProperty(exports, "asapScheduler", { enumerable: true, get: function () { return asap_1.asapScheduler; } }); - var async_1 = async; - Object.defineProperty(exports, "async", { enumerable: true, get: function () { return async_1.async; } }); - Object.defineProperty(exports, "asyncScheduler", { enumerable: true, get: function () { return async_1.asyncScheduler; } }); - var queue_1 = queue; - Object.defineProperty(exports, "queue", { enumerable: true, get: function () { return queue_1.queue; } }); - Object.defineProperty(exports, "queueScheduler", { enumerable: true, get: function () { return queue_1.queueScheduler; } }); - var animationFrame_1 = animationFrame; - Object.defineProperty(exports, "animationFrame", { enumerable: true, get: function () { return animationFrame_1.animationFrame; } }); - Object.defineProperty(exports, "animationFrameScheduler", { enumerable: true, get: function () { return animationFrame_1.animationFrameScheduler; } }); - var VirtualTimeScheduler_1 = VirtualTimeScheduler$1; - Object.defineProperty(exports, "VirtualTimeScheduler", { enumerable: true, get: function () { return VirtualTimeScheduler_1.VirtualTimeScheduler; } }); - Object.defineProperty(exports, "VirtualAction", { enumerable: true, get: function () { return VirtualTimeScheduler_1.VirtualAction; } }); - var Scheduler_1 = Scheduler$1; - Object.defineProperty(exports, "Scheduler", { enumerable: true, get: function () { return Scheduler_1.Scheduler; } }); - var Subscription_1 = Subscription$1; - Object.defineProperty(exports, "Subscription", { enumerable: true, get: function () { return Subscription_1.Subscription; } }); - var Subscriber_1 = Subscriber; - Object.defineProperty(exports, "Subscriber", { enumerable: true, get: function () { return Subscriber_1.Subscriber; } }); - var Notification_1 = Notification; - Object.defineProperty(exports, "Notification", { enumerable: true, get: function () { return Notification_1.Notification; } }); - Object.defineProperty(exports, "NotificationKind", { enumerable: true, get: function () { return Notification_1.NotificationKind; } }); - var pipe_1 = pipe$2; - Object.defineProperty(exports, "pipe", { enumerable: true, get: function () { return pipe_1.pipe; } }); - var noop_1 = noop$2; - Object.defineProperty(exports, "noop", { enumerable: true, get: function () { return noop_1.noop; } }); - var identity_1 = identity$1; - Object.defineProperty(exports, "identity", { enumerable: true, get: function () { return identity_1.identity; } }); - var isObservable_1 = isObservable$1; - Object.defineProperty(exports, "isObservable", { enumerable: true, get: function () { return isObservable_1.isObservable; } }); - var lastValueFrom_1 = lastValueFrom$1; - Object.defineProperty(exports, "lastValueFrom", { enumerable: true, get: function () { return lastValueFrom_1.lastValueFrom; } }); - var firstValueFrom_1 = firstValueFrom$1; - Object.defineProperty(exports, "firstValueFrom", { enumerable: true, get: function () { return firstValueFrom_1.firstValueFrom; } }); - var ArgumentOutOfRangeError_1 = ArgumentOutOfRangeError; - Object.defineProperty(exports, "ArgumentOutOfRangeError", { enumerable: true, get: function () { return ArgumentOutOfRangeError_1.ArgumentOutOfRangeError; } }); - var EmptyError_1 = EmptyError; - Object.defineProperty(exports, "EmptyError", { enumerable: true, get: function () { return EmptyError_1.EmptyError; } }); - var NotFoundError_1 = NotFoundError; - Object.defineProperty(exports, "NotFoundError", { enumerable: true, get: function () { return NotFoundError_1.NotFoundError; } }); - var ObjectUnsubscribedError_1 = ObjectUnsubscribedError; - Object.defineProperty(exports, "ObjectUnsubscribedError", { enumerable: true, get: function () { return ObjectUnsubscribedError_1.ObjectUnsubscribedError; } }); - var SequenceError_1 = SequenceError; - Object.defineProperty(exports, "SequenceError", { enumerable: true, get: function () { return SequenceError_1.SequenceError; } }); - var timeout_1 = timeout; - Object.defineProperty(exports, "TimeoutError", { enumerable: true, get: function () { return timeout_1.TimeoutError; } }); - var UnsubscriptionError_1 = UnsubscriptionError; - Object.defineProperty(exports, "UnsubscriptionError", { enumerable: true, get: function () { return UnsubscriptionError_1.UnsubscriptionError; } }); - var bindCallback_1 = bindCallback$1; - Object.defineProperty(exports, "bindCallback", { enumerable: true, get: function () { return bindCallback_1.bindCallback; } }); - var bindNodeCallback_1 = bindNodeCallback$1; - Object.defineProperty(exports, "bindNodeCallback", { enumerable: true, get: function () { return bindNodeCallback_1.bindNodeCallback; } }); - var combineLatest_1 = combineLatest$3; - Object.defineProperty(exports, "combineLatest", { enumerable: true, get: function () { return combineLatest_1.combineLatest; } }); - var concat_1 = concat$3; - Object.defineProperty(exports, "concat", { enumerable: true, get: function () { return concat_1.concat; } }); - var connectable_1 = connectable$1; - Object.defineProperty(exports, "connectable", { enumerable: true, get: function () { return connectable_1.connectable; } }); - var defer_1 = defer$1; - Object.defineProperty(exports, "defer", { enumerable: true, get: function () { return defer_1.defer; } }); - var empty_1 = empty; - Object.defineProperty(exports, "empty", { enumerable: true, get: function () { return empty_1.empty; } }); - var forkJoin_1 = forkJoin$1; - Object.defineProperty(exports, "forkJoin", { enumerable: true, get: function () { return forkJoin_1.forkJoin; } }); - var from_1 = from$1; - Object.defineProperty(exports, "from", { enumerable: true, get: function () { return from_1.from; } }); - var fromEvent_1 = fromEvent$1; - Object.defineProperty(exports, "fromEvent", { enumerable: true, get: function () { return fromEvent_1.fromEvent; } }); - var fromEventPattern_1 = fromEventPattern$1; - Object.defineProperty(exports, "fromEventPattern", { enumerable: true, get: function () { return fromEventPattern_1.fromEventPattern; } }); - var generate_1 = generate$1; - Object.defineProperty(exports, "generate", { enumerable: true, get: function () { return generate_1.generate; } }); - var iif_1 = iif$1; - Object.defineProperty(exports, "iif", { enumerable: true, get: function () { return iif_1.iif; } }); - var interval_1 = interval$1; - Object.defineProperty(exports, "interval", { enumerable: true, get: function () { return interval_1.interval; } }); - var merge_1 = merge$5; - Object.defineProperty(exports, "merge", { enumerable: true, get: function () { return merge_1.merge; } }); - var never_1 = never; - Object.defineProperty(exports, "never", { enumerable: true, get: function () { return never_1.never; } }); - var of_1 = of$1; - Object.defineProperty(exports, "of", { enumerable: true, get: function () { return of_1.of; } }); - var onErrorResumeNext_1 = onErrorResumeNext$1; - Object.defineProperty(exports, "onErrorResumeNext", { enumerable: true, get: function () { return onErrorResumeNext_1.onErrorResumeNext; } }); - var pairs_1 = pairs$2; - Object.defineProperty(exports, "pairs", { enumerable: true, get: function () { return pairs_1.pairs; } }); - var partition_1 = partition$1; - Object.defineProperty(exports, "partition", { enumerable: true, get: function () { return partition_1.partition; } }); - var race_1 = race$1; - Object.defineProperty(exports, "race", { enumerable: true, get: function () { return race_1.race; } }); - var range_1 = range$1; - Object.defineProperty(exports, "range", { enumerable: true, get: function () { return range_1.range; } }); - var throwError_1 = throwError$2; - Object.defineProperty(exports, "throwError", { enumerable: true, get: function () { return throwError_1.throwError; } }); - var timer_1 = timer$1; - Object.defineProperty(exports, "timer", { enumerable: true, get: function () { return timer_1.timer; } }); - var using_1 = using$1; - Object.defineProperty(exports, "using", { enumerable: true, get: function () { return using_1.using; } }); - var zip_1 = zip$3; - Object.defineProperty(exports, "zip", { enumerable: true, get: function () { return zip_1.zip; } }); - var scheduled_1 = scheduled$1; - Object.defineProperty(exports, "scheduled", { enumerable: true, get: function () { return scheduled_1.scheduled; } }); - var empty_2 = empty; - Object.defineProperty(exports, "EMPTY", { enumerable: true, get: function () { return empty_2.EMPTY; } }); - var never_2 = never; - Object.defineProperty(exports, "NEVER", { enumerable: true, get: function () { return never_2.NEVER; } }); - __exportStar(types, exports); - var config_1 = config; - Object.defineProperty(exports, "config", { enumerable: true, get: function () { return config_1.config; } }); - var audit_1 = audit$1; - Object.defineProperty(exports, "audit", { enumerable: true, get: function () { return audit_1.audit; } }); - var auditTime_1 = auditTime$1; - Object.defineProperty(exports, "auditTime", { enumerable: true, get: function () { return auditTime_1.auditTime; } }); - var buffer_1 = buffer$2; - Object.defineProperty(exports, "buffer", { enumerable: true, get: function () { return buffer_1.buffer; } }); - var bufferCount_1 = bufferCount$1; - Object.defineProperty(exports, "bufferCount", { enumerable: true, get: function () { return bufferCount_1.bufferCount; } }); - var bufferTime_1 = bufferTime$1; - Object.defineProperty(exports, "bufferTime", { enumerable: true, get: function () { return bufferTime_1.bufferTime; } }); - var bufferToggle_1 = bufferToggle$1; - Object.defineProperty(exports, "bufferToggle", { enumerable: true, get: function () { return bufferToggle_1.bufferToggle; } }); - var bufferWhen_1 = bufferWhen$1; - Object.defineProperty(exports, "bufferWhen", { enumerable: true, get: function () { return bufferWhen_1.bufferWhen; } }); - var catchError_1 = catchError$1; - Object.defineProperty(exports, "catchError", { enumerable: true, get: function () { return catchError_1.catchError; } }); - var combineAll_1 = combineAll; - Object.defineProperty(exports, "combineAll", { enumerable: true, get: function () { return combineAll_1.combineAll; } }); - var combineLatestAll_1 = combineLatestAll$1; - Object.defineProperty(exports, "combineLatestAll", { enumerable: true, get: function () { return combineLatestAll_1.combineLatestAll; } }); - var combineLatestWith_1 = combineLatestWith$1; - Object.defineProperty(exports, "combineLatestWith", { enumerable: true, get: function () { return combineLatestWith_1.combineLatestWith; } }); - var concatAll_1 = concatAll$1; - Object.defineProperty(exports, "concatAll", { enumerable: true, get: function () { return concatAll_1.concatAll; } }); - var concatMap_1 = concatMap$1; - Object.defineProperty(exports, "concatMap", { enumerable: true, get: function () { return concatMap_1.concatMap; } }); - var concatMapTo_1 = concatMapTo$1; - Object.defineProperty(exports, "concatMapTo", { enumerable: true, get: function () { return concatMapTo_1.concatMapTo; } }); - var concatWith_1 = concatWith$1; - Object.defineProperty(exports, "concatWith", { enumerable: true, get: function () { return concatWith_1.concatWith; } }); - var connect_1 = connect$1; - Object.defineProperty(exports, "connect", { enumerable: true, get: function () { return connect_1.connect; } }); - var count_1 = count$1; - Object.defineProperty(exports, "count", { enumerable: true, get: function () { return count_1.count; } }); - var debounce_1 = debounce$1; - Object.defineProperty(exports, "debounce", { enumerable: true, get: function () { return debounce_1.debounce; } }); - var debounceTime_1 = debounceTime$1; - Object.defineProperty(exports, "debounceTime", { enumerable: true, get: function () { return debounceTime_1.debounceTime; } }); - var defaultIfEmpty_1 = defaultIfEmpty$1; - Object.defineProperty(exports, "defaultIfEmpty", { enumerable: true, get: function () { return defaultIfEmpty_1.defaultIfEmpty; } }); - var delay_1 = delay$1; - Object.defineProperty(exports, "delay", { enumerable: true, get: function () { return delay_1.delay; } }); - var delayWhen_1 = delayWhen$1; - Object.defineProperty(exports, "delayWhen", { enumerable: true, get: function () { return delayWhen_1.delayWhen; } }); - var dematerialize_1 = dematerialize$1; - Object.defineProperty(exports, "dematerialize", { enumerable: true, get: function () { return dematerialize_1.dematerialize; } }); - var distinct_1 = distinct$1; - Object.defineProperty(exports, "distinct", { enumerable: true, get: function () { return distinct_1.distinct; } }); - var distinctUntilChanged_1 = distinctUntilChanged$1; - Object.defineProperty(exports, "distinctUntilChanged", { enumerable: true, get: function () { return distinctUntilChanged_1.distinctUntilChanged; } }); - var distinctUntilKeyChanged_1 = distinctUntilKeyChanged$1; - Object.defineProperty(exports, "distinctUntilKeyChanged", { enumerable: true, get: function () { return distinctUntilKeyChanged_1.distinctUntilKeyChanged; } }); - var elementAt_1 = elementAt$1; - Object.defineProperty(exports, "elementAt", { enumerable: true, get: function () { return elementAt_1.elementAt; } }); - var endWith_1 = endWith$1; - Object.defineProperty(exports, "endWith", { enumerable: true, get: function () { return endWith_1.endWith; } }); - var every_1 = every$1; - Object.defineProperty(exports, "every", { enumerable: true, get: function () { return every_1.every; } }); - var exhaust_1 = exhaust; - Object.defineProperty(exports, "exhaust", { enumerable: true, get: function () { return exhaust_1.exhaust; } }); - var exhaustAll_1 = exhaustAll$1; - Object.defineProperty(exports, "exhaustAll", { enumerable: true, get: function () { return exhaustAll_1.exhaustAll; } }); - var exhaustMap_1 = exhaustMap$1; - Object.defineProperty(exports, "exhaustMap", { enumerable: true, get: function () { return exhaustMap_1.exhaustMap; } }); - var expand_1 = expand$2; - Object.defineProperty(exports, "expand", { enumerable: true, get: function () { return expand_1.expand; } }); - var filter_1 = filter$1; - Object.defineProperty(exports, "filter", { enumerable: true, get: function () { return filter_1.filter; } }); - var finalize_1 = finalize$1; - Object.defineProperty(exports, "finalize", { enumerable: true, get: function () { return finalize_1.finalize; } }); - var find_1 = find$1; - Object.defineProperty(exports, "find", { enumerable: true, get: function () { return find_1.find; } }); - var findIndex_1 = findIndex$1; - Object.defineProperty(exports, "findIndex", { enumerable: true, get: function () { return findIndex_1.findIndex; } }); - var first_1 = first$1; - Object.defineProperty(exports, "first", { enumerable: true, get: function () { return first_1.first; } }); - var groupBy_1 = groupBy$1; - Object.defineProperty(exports, "groupBy", { enumerable: true, get: function () { return groupBy_1.groupBy; } }); - var ignoreElements_1 = ignoreElements$1; - Object.defineProperty(exports, "ignoreElements", { enumerable: true, get: function () { return ignoreElements_1.ignoreElements; } }); - var isEmpty_1 = isEmpty$1; - Object.defineProperty(exports, "isEmpty", { enumerable: true, get: function () { return isEmpty_1.isEmpty; } }); - var last_1 = last$1; - Object.defineProperty(exports, "last", { enumerable: true, get: function () { return last_1.last; } }); - var map_1 = map$2; - Object.defineProperty(exports, "map", { enumerable: true, get: function () { return map_1.map; } }); - var mapTo_1 = mapTo$1; - Object.defineProperty(exports, "mapTo", { enumerable: true, get: function () { return mapTo_1.mapTo; } }); - var materialize_1 = materialize$1; - Object.defineProperty(exports, "materialize", { enumerable: true, get: function () { return materialize_1.materialize; } }); - var max_1 = max$1; - Object.defineProperty(exports, "max", { enumerable: true, get: function () { return max_1.max; } }); - var mergeAll_1 = mergeAll$1; - Object.defineProperty(exports, "mergeAll", { enumerable: true, get: function () { return mergeAll_1.mergeAll; } }); - var flatMap_1 = flatMap; - Object.defineProperty(exports, "flatMap", { enumerable: true, get: function () { return flatMap_1.flatMap; } }); - var mergeMap_1 = mergeMap$1; - Object.defineProperty(exports, "mergeMap", { enumerable: true, get: function () { return mergeMap_1.mergeMap; } }); - var mergeMapTo_1 = mergeMapTo$1; - Object.defineProperty(exports, "mergeMapTo", { enumerable: true, get: function () { return mergeMapTo_1.mergeMapTo; } }); - var mergeScan_1 = mergeScan$1; - Object.defineProperty(exports, "mergeScan", { enumerable: true, get: function () { return mergeScan_1.mergeScan; } }); - var mergeWith_1 = mergeWith$1; - Object.defineProperty(exports, "mergeWith", { enumerable: true, get: function () { return mergeWith_1.mergeWith; } }); - var min_1 = min$1; - Object.defineProperty(exports, "min", { enumerable: true, get: function () { return min_1.min; } }); - var multicast_1 = multicast$1; - Object.defineProperty(exports, "multicast", { enumerable: true, get: function () { return multicast_1.multicast; } }); - var observeOn_1 = observeOn$1; - Object.defineProperty(exports, "observeOn", { enumerable: true, get: function () { return observeOn_1.observeOn; } }); - var onErrorResumeNextWith_1 = onErrorResumeNextWith$1; - Object.defineProperty(exports, "onErrorResumeNextWith", { enumerable: true, get: function () { return onErrorResumeNextWith_1.onErrorResumeNextWith; } }); - var pairwise_1 = pairwise$1; - Object.defineProperty(exports, "pairwise", { enumerable: true, get: function () { return pairwise_1.pairwise; } }); - var pluck_1 = pluck$1; - Object.defineProperty(exports, "pluck", { enumerable: true, get: function () { return pluck_1.pluck; } }); - var publish_1 = publish$1; - Object.defineProperty(exports, "publish", { enumerable: true, get: function () { return publish_1.publish; } }); - var publishBehavior_1 = publishBehavior$1; - Object.defineProperty(exports, "publishBehavior", { enumerable: true, get: function () { return publishBehavior_1.publishBehavior; } }); - var publishLast_1 = publishLast$1; - Object.defineProperty(exports, "publishLast", { enumerable: true, get: function () { return publishLast_1.publishLast; } }); - var publishReplay_1 = publishReplay$1; - Object.defineProperty(exports, "publishReplay", { enumerable: true, get: function () { return publishReplay_1.publishReplay; } }); - var raceWith_1 = raceWith$1; - Object.defineProperty(exports, "raceWith", { enumerable: true, get: function () { return raceWith_1.raceWith; } }); - var reduce_1 = reduce$1; - Object.defineProperty(exports, "reduce", { enumerable: true, get: function () { return reduce_1.reduce; } }); - var repeat_1 = repeat$2; - Object.defineProperty(exports, "repeat", { enumerable: true, get: function () { return repeat_1.repeat; } }); - var repeatWhen_1 = repeatWhen$1; - Object.defineProperty(exports, "repeatWhen", { enumerable: true, get: function () { return repeatWhen_1.repeatWhen; } }); - var retry_1 = retry$1; - Object.defineProperty(exports, "retry", { enumerable: true, get: function () { return retry_1.retry; } }); - var retryWhen_1 = retryWhen$1; - Object.defineProperty(exports, "retryWhen", { enumerable: true, get: function () { return retryWhen_1.retryWhen; } }); - var refCount_1 = refCount$1; - Object.defineProperty(exports, "refCount", { enumerable: true, get: function () { return refCount_1.refCount; } }); - var sample_1 = sample$2; - Object.defineProperty(exports, "sample", { enumerable: true, get: function () { return sample_1.sample; } }); - var sampleTime_1 = sampleTime$1; - Object.defineProperty(exports, "sampleTime", { enumerable: true, get: function () { return sampleTime_1.sampleTime; } }); - var scan_1 = scan$1; - Object.defineProperty(exports, "scan", { enumerable: true, get: function () { return scan_1.scan; } }); - var sequenceEqual_1 = sequenceEqual$1; - Object.defineProperty(exports, "sequenceEqual", { enumerable: true, get: function () { return sequenceEqual_1.sequenceEqual; } }); - var share_1 = share$1; - Object.defineProperty(exports, "share", { enumerable: true, get: function () { return share_1.share; } }); - var shareReplay_1 = shareReplay$1; - Object.defineProperty(exports, "shareReplay", { enumerable: true, get: function () { return shareReplay_1.shareReplay; } }); - var single_1 = single$1; - Object.defineProperty(exports, "single", { enumerable: true, get: function () { return single_1.single; } }); - var skip_1 = skip$1; - Object.defineProperty(exports, "skip", { enumerable: true, get: function () { return skip_1.skip; } }); - var skipLast_1 = skipLast$1; - Object.defineProperty(exports, "skipLast", { enumerable: true, get: function () { return skipLast_1.skipLast; } }); - var skipUntil_1 = skipUntil$1; - Object.defineProperty(exports, "skipUntil", { enumerable: true, get: function () { return skipUntil_1.skipUntil; } }); - var skipWhile_1 = skipWhile$1; - Object.defineProperty(exports, "skipWhile", { enumerable: true, get: function () { return skipWhile_1.skipWhile; } }); - var startWith_1 = startWith$1; - Object.defineProperty(exports, "startWith", { enumerable: true, get: function () { return startWith_1.startWith; } }); - var subscribeOn_1 = subscribeOn$1; - Object.defineProperty(exports, "subscribeOn", { enumerable: true, get: function () { return subscribeOn_1.subscribeOn; } }); - var switchAll_1 = switchAll$1; - Object.defineProperty(exports, "switchAll", { enumerable: true, get: function () { return switchAll_1.switchAll; } }); - var switchMap_1 = switchMap$1; - Object.defineProperty(exports, "switchMap", { enumerable: true, get: function () { return switchMap_1.switchMap; } }); - var switchMapTo_1 = switchMapTo$1; - Object.defineProperty(exports, "switchMapTo", { enumerable: true, get: function () { return switchMapTo_1.switchMapTo; } }); - var switchScan_1 = switchScan$1; - Object.defineProperty(exports, "switchScan", { enumerable: true, get: function () { return switchScan_1.switchScan; } }); - var take_1 = take$1; - Object.defineProperty(exports, "take", { enumerable: true, get: function () { return take_1.take; } }); - var takeLast_1 = takeLast$1; - Object.defineProperty(exports, "takeLast", { enumerable: true, get: function () { return takeLast_1.takeLast; } }); - var takeUntil_1 = takeUntil$1; - Object.defineProperty(exports, "takeUntil", { enumerable: true, get: function () { return takeUntil_1.takeUntil; } }); - var takeWhile_1 = takeWhile$1; - Object.defineProperty(exports, "takeWhile", { enumerable: true, get: function () { return takeWhile_1.takeWhile; } }); - var tap_1 = tap$1; - Object.defineProperty(exports, "tap", { enumerable: true, get: function () { return tap_1.tap; } }); - var throttle_1 = throttle$1; - Object.defineProperty(exports, "throttle", { enumerable: true, get: function () { return throttle_1.throttle; } }); - var throttleTime_1 = throttleTime$1; - Object.defineProperty(exports, "throttleTime", { enumerable: true, get: function () { return throttleTime_1.throttleTime; } }); - var throwIfEmpty_1 = throwIfEmpty$1; - Object.defineProperty(exports, "throwIfEmpty", { enumerable: true, get: function () { return throwIfEmpty_1.throwIfEmpty; } }); - var timeInterval_1 = timeInterval$1; - Object.defineProperty(exports, "timeInterval", { enumerable: true, get: function () { return timeInterval_1.timeInterval; } }); - var timeout_2 = timeout; - Object.defineProperty(exports, "timeout", { enumerable: true, get: function () { return timeout_2.timeout; } }); - var timeoutWith_1 = timeoutWith$1; - Object.defineProperty(exports, "timeoutWith", { enumerable: true, get: function () { return timeoutWith_1.timeoutWith; } }); - var timestamp_1 = timestamp$2; - Object.defineProperty(exports, "timestamp", { enumerable: true, get: function () { return timestamp_1.timestamp; } }); - var toArray_1 = toArray$2; - Object.defineProperty(exports, "toArray", { enumerable: true, get: function () { return toArray_1.toArray; } }); - var window_1 = window$2; - Object.defineProperty(exports, "window", { enumerable: true, get: function () { return window_1.window; } }); - var windowCount_1 = windowCount$1; - Object.defineProperty(exports, "windowCount", { enumerable: true, get: function () { return windowCount_1.windowCount; } }); - var windowTime_1 = windowTime$1; - Object.defineProperty(exports, "windowTime", { enumerable: true, get: function () { return windowTime_1.windowTime; } }); - var windowToggle_1 = windowToggle$1; - Object.defineProperty(exports, "windowToggle", { enumerable: true, get: function () { return windowToggle_1.windowToggle; } }); - var windowWhen_1 = windowWhen$1; - Object.defineProperty(exports, "windowWhen", { enumerable: true, get: function () { return windowWhen_1.windowWhen; } }); - var withLatestFrom_1 = withLatestFrom$1; - Object.defineProperty(exports, "withLatestFrom", { enumerable: true, get: function () { return withLatestFrom_1.withLatestFrom; } }); - var zipAll_1 = zipAll$1; - Object.defineProperty(exports, "zipAll", { enumerable: true, get: function () { return zipAll_1.zipAll; } }); - var zipWith_1 = zipWith$1; - Object.defineProperty(exports, "zipWith", { enumerable: true, get: function () { return zipWith_1.zipWith; } }); - -} (cjs)); - -function normalizeKeypressEvents(value, key) { - return { value, key: key || {} }; -} - -function observe(rl) { - const keypress = cjs.fromEvent(rl.input, 'keypress', normalizeKeypressEvents) - .pipe(cjs.takeUntil(cjs.fromEvent(rl, 'close'))) - // Ignore `enter` key. On the readline, we only care about the `line` event. - .pipe(cjs.filter(({ key }) => key.name !== 'enter' && key.name !== 'return')); - - return { - line: cjs.fromEvent(rl, 'line'), - keypress, - - normalizedUpKey: keypress.pipe( - cjs.filter( - ({ key }) => - key.name === 'up' || key.name === 'k' || (key.name === 'p' && key.ctrl), - ), - cjs.share(), - ), - - normalizedDownKey: keypress.pipe( - cjs.filter( - ({ key }) => - key.name === 'down' || key.name === 'j' || (key.name === 'n' && key.ctrl), - ), - cjs.share(), - ), - - numberKey: keypress.pipe( - cjs.filter((e) => e.value && '123456789'.includes(e.value)), - cjs.map((e) => Number(e.value)), - cjs.share(), - ), - - spaceKey: keypress.pipe( - cjs.filter(({ key }) => key && key.name === 'space'), - cjs.share(), - ), - aKey: keypress.pipe( - cjs.filter(({ key }) => key && key.name === 'a'), - cjs.share(), - ), - iKey: keypress.pipe( - cjs.filter(({ key }) => key && key.name === 'i'), - cjs.share(), - ), - }; -} - -/** - * The paginator returns a subset of the choices if the list is too long. - */ - -class Paginator { - /** - * @param {import("./screen-manager")} [screen] - * @param {{isInfinite?: boolean}} [options] - */ - constructor(screen, options = {}) { - const { isInfinite = true } = options; - this.lastIndex = 0; - this.screen = screen; - this.isInfinite = isInfinite; - } - - paginate(output, active, pageSize) { - pageSize ||= 7; - let lines = output.split('\n'); - - if (this.screen) { - lines = this.screen.breakLines(lines); - active = lines - .map((lineParts) => lineParts.length) - .splice(0, active) - .reduce((a, b) => a + b, 0); - lines = lines.flat(); - } - - // Make sure there's enough lines to paginate - if (lines.length <= pageSize) { - return output; - } - const visibleLines = this.isInfinite - ? this.getInfiniteLines(lines, active, pageSize) - : this.getFiniteLines(lines, active, pageSize); - this.lastIndex = active; - return ( - visibleLines.join('\n') + - '\n' + - colors$1.dim('(Move up and down to reveal more choices)') - ); - } - - getInfiniteLines(lines, active, pageSize) { - if (this.pointer === undefined) { - this.pointer = 0; - } - const middleOfList = Math.floor(pageSize / 2); - // Move the pointer only when the user go down and limit it to the middle of the list - if ( - this.pointer < middleOfList && - this.lastIndex < active && - active - this.lastIndex < pageSize - ) { - this.pointer = Math.min(middleOfList, this.pointer + active - this.lastIndex); - } - - // Duplicate the lines so it give an infinite list look - const infinite = [lines, lines, lines].flat(); - const topIndex = Math.max(0, active + lines.length - this.pointer); - - return infinite.splice(topIndex, pageSize); - } - - getFiniteLines(lines, active, pageSize) { - let topIndex = active - pageSize / 2; - if (topIndex < 0) { - topIndex = 0; - } else if (topIndex + pageSize > lines.length) { - topIndex = lines.length - pageSize; - } - return lines.splice(topIndex, pageSize); - } -} - -function incrementListIndex(current, dir, opt) { - const len = opt.choices.realLength; - const shouldLoop = 'loop' in opt ? Boolean(opt.loop) : true; - if (dir === 'up') { - if (current > 0) { - return current - 1; - } - return shouldLoop ? len - 1 : current; - } - if (dir === 'down') { - if (current < len - 1) { - return current + 1; - } - return shouldLoop ? 0 : current; - } - throw new Error('dir must be up or down'); -} - -/** - * Separator object - * Used to space/separate choices group - * @constructor - * @param {String} line Separation line content (facultative) - */ - -class Separator { - constructor(line) { - this.type = 'separator'; - this.line = colors$1.dim(line || Array.from({ length: 15 }).join(figures.line)); - } - - /** - * Helper function returning false if object is a separator - * @param {Object} obj object to test against - * @return {Boolean} `false` if object is a separator - */ - static exclude(obj) { - return obj.type !== 'separator'; - } - - /** - * Stringify separator - * @return {String} the separator display string - */ - toString() { - return this.line; - } -} - -/** - * Choice object - * Normalize input as choice object - * @constructor - * @param {Number|String|Object} val Choice value. If an object is passed, it should contains - * at least one of `value` or `name` property - */ - -class Choice { - constructor(val, answers) { - // Don't process Choice and Separator object - if (val instanceof Choice || val.type === 'separator') { - return val; - } - - if (typeof val === 'string' || typeof val === 'number') { - this.name = String(val); - this.value = val; - this.short = String(val); - } else { - Object.assign(this, val, { - name: val.name || val.value, - value: 'value' in val ? val.value : val.name, - short: val.short || val.name || val.value, - }); - } - - this.disabled = - typeof val.disabled === 'function' ? val.disabled(answers) : val.disabled; - } -} - -/** - * Choices collection - * Collection of multiple `choice` object - */ -class Choices { - /** @param {Array} choices All `choice` to keep in the collection */ - constructor(choices, answers) { - this.choices = choices.map((val) => { - if (val.type === 'separator') { - if (!(val instanceof Separator)) { - val = new Separator(val.line); - } - - return val; - } - - return new Choice(val, answers); - }); - - this.realChoices = this.choices - .filter(Separator.exclude) - .filter((item) => !item.disabled); - - Object.defineProperty(this, 'length', { - get() { - return this.choices.length; - }, - set(val) { - this.choices.length = val; - }, - }); - - Object.defineProperty(this, 'realLength', { - get() { - return this.realChoices.length; - }, - set() { - throw new Error('Cannot set `realLength` of a Choices collection'); - }, - }); - } - - [Symbol.iterator]() { - const data = this.choices; - let index = -1; - - return { - next: () => ({ value: data[++index], done: !(index in data) }), - }; - } - - /** - * Get a valid choice from the collection - * @param {Number} selector The selected choice index - * @return {Choice|Undefined} Return the matched choice or undefined - */ - getChoice(selector) { - assert$1(typeof selector === 'number'); - return this.realChoices[selector]; - } - - /** - * Get a raw element from the collection - * @param {Number} selector The selected index value - * @return {Choice|Undefined} Return the matched choice or undefined - */ - get(selector) { - assert$1(typeof selector === 'number'); - return this.choices[selector]; - } - - /** - * Match the valid choices against a where clause - * @param {Function|Object} whereClause filter function or key-value object to match against - * @return {Array} Matching choices or empty array - */ - where(whereClause) { - let filterFn; - if (typeof whereClause === 'function') { - filterFn = whereClause; - } else { - const [key, value] = Object.entries(whereClause)[0]; - filterFn = (choice) => choice[key] === value; - } - - return this.realChoices.filter(filterFn); - } - - /** - * Pluck a particular key from the choices - * @param {String} propertyName Property name to select - * @return {Array} Selected properties - */ - pluck(propertyName) { - return this.realChoices.map((choice) => choice[propertyName]); - } - - // Expose usual Array methods - indexOf(...args) { - return this.choices.indexOf(...args); - } - - forEach(...args) { - return this.choices.forEach(...args); - } - - filter(...args) { - return this.choices.filter(...args); - } - - reduce(...args) { - return this.choices.reduce(...args); - } - - find(func) { - return this.choices.find(func); - } - - some(func) { - return this.choices.some(func); - } - - push(...args) { - const objs = args.map((val) => new Choice(val)); - this.choices.push(...objs); - this.realChoices = this.choices - .filter(Separator.exclude) - .filter((item) => !item.disabled); - return this.choices; - } -} - -var cliWidth_1 = cliWidth; - -function normalizeOpts(options) { - const defaultOpts = { - defaultWidth: 0, - output: process.stdout, - tty: tty$1, - }; - - if (!options) { - return defaultOpts; - } - - Object.keys(defaultOpts).forEach(function (key) { - if (!options[key]) { - options[key] = defaultOpts[key]; - } - }); - - return options; -} - -function cliWidth(options) { - const opts = normalizeOpts(options); - - if (opts.output.getWindowSize) { - return opts.output.getWindowSize()[0] || opts.defaultWidth; - } - - if (opts.tty.getWindowSize) { - return opts.tty.getWindowSize()[1] || opts.defaultWidth; - } - - if (opts.output.columns) { - return opts.output.columns; - } - - if (process.env.CLI_WIDTH) { - const width = parseInt(process.env.CLI_WIDTH, 10); - - if (!isNaN(width) && width !== 0) { - return width; - } - } - - return opts.defaultWidth; -} - -var cliWidth$1 = /*@__PURE__*/getDefaultExportFromCjs(cliWidth_1); - -var stringWidth$3 = {exports: {}}; - -var ansiRegex$1 = ({onlyFirst = false} = {}) => { - const pattern = [ - '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', - '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' - ].join('|'); - - return new RegExp(pattern, onlyFirst ? undefined : 'g'); -}; - -const ansiRegex = ansiRegex$1; - -var stripAnsi$3 = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; - -var stripAnsi$4 = /*@__PURE__*/getDefaultExportFromCjs(stripAnsi$3); - -var isFullwidthCodePoint$2 = {exports: {}}; - -/* eslint-disable yoda */ - -const isFullwidthCodePoint$1 = codePoint => { - if (Number.isNaN(codePoint)) { - return false; - } - - // Code points are derived from: - // http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt - if ( - codePoint >= 0x1100 && ( - codePoint <= 0x115F || // Hangul Jamo - codePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET - codePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET - // CJK Radicals Supplement .. Enclosed CJK Letters and Months - (0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F) || - // Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A - (0x3250 <= codePoint && codePoint <= 0x4DBF) || - // CJK Unified Ideographs .. Yi Radicals - (0x4E00 <= codePoint && codePoint <= 0xA4C6) || - // Hangul Jamo Extended-A - (0xA960 <= codePoint && codePoint <= 0xA97C) || - // Hangul Syllables - (0xAC00 <= codePoint && codePoint <= 0xD7A3) || - // CJK Compatibility Ideographs - (0xF900 <= codePoint && codePoint <= 0xFAFF) || - // Vertical Forms - (0xFE10 <= codePoint && codePoint <= 0xFE19) || - // CJK Compatibility Forms .. Small Form Variants - (0xFE30 <= codePoint && codePoint <= 0xFE6B) || - // Halfwidth and Fullwidth Forms - (0xFF01 <= codePoint && codePoint <= 0xFF60) || - (0xFFE0 <= codePoint && codePoint <= 0xFFE6) || - // Kana Supplement - (0x1B000 <= codePoint && codePoint <= 0x1B001) || - // Enclosed Ideographic Supplement - (0x1F200 <= codePoint && codePoint <= 0x1F251) || - // CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane - (0x20000 <= codePoint && codePoint <= 0x3FFFD) - ) - ) { - return true; - } - - return false; -}; - -isFullwidthCodePoint$2.exports = isFullwidthCodePoint$1; -isFullwidthCodePoint$2.exports.default = isFullwidthCodePoint$1; - -var isFullwidthCodePointExports = isFullwidthCodePoint$2.exports; - -var emojiRegex$1 = function () { - // https://mths.be/emoji - return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; -}; - -const stripAnsi$2 = stripAnsi$3; -const isFullwidthCodePoint = isFullwidthCodePointExports; -const emojiRegex = emojiRegex$1; - -const stringWidth$1 = string => { - if (typeof string !== 'string' || string.length === 0) { - return 0; - } - - string = stripAnsi$2(string); - - if (string.length === 0) { - return 0; - } - - string = string.replace(emojiRegex(), ' '); - - let width = 0; - - for (let i = 0; i < string.length; i++) { - const code = string.codePointAt(i); - - // Ignore control characters - if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) { - continue; - } - - // Ignore combining characters - if (code >= 0x300 && code <= 0x36F) { - continue; - } - - // Surrogates - if (code > 0xFFFF) { - i++; - } - - width += isFullwidthCodePoint(code) ? 2 : 1; - } - - return width; -}; - -stringWidth$3.exports = stringWidth$1; -// TODO: remove this in the next major version -stringWidth$3.exports.default = stringWidth$1; - -var stringWidthExports = stringWidth$3.exports; -var stringWidth$2 = /*@__PURE__*/getDefaultExportFromCjs(stringWidthExports); - -var ansiStyles$2 = {exports: {}}; - -var colorName; -var hasRequiredColorName; - -function requireColorName () { - if (hasRequiredColorName) return colorName; - hasRequiredColorName = 1; - - colorName = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] - }; - return colorName; -} - -/* MIT license */ - -var conversions; -var hasRequiredConversions; - -function requireConversions () { - if (hasRequiredConversions) return conversions; - hasRequiredConversions = 1; - /* eslint-disable no-mixed-operators */ - const cssKeywords = requireColorName(); - - // NOTE: conversions should only return primitive values (i.e. arrays, or - // values that give correct `typeof` results). - // do not use box values types (i.e. Number(), String(), etc.) - - const reverseKeywords = {}; - for (const key of Object.keys(cssKeywords)) { - reverseKeywords[cssKeywords[key]] = key; - } - - const convert = { - rgb: {channels: 3, labels: 'rgb'}, - hsl: {channels: 3, labels: 'hsl'}, - hsv: {channels: 3, labels: 'hsv'}, - hwb: {channels: 3, labels: 'hwb'}, - cmyk: {channels: 4, labels: 'cmyk'}, - xyz: {channels: 3, labels: 'xyz'}, - lab: {channels: 3, labels: 'lab'}, - lch: {channels: 3, labels: 'lch'}, - hex: {channels: 1, labels: ['hex']}, - keyword: {channels: 1, labels: ['keyword']}, - ansi16: {channels: 1, labels: ['ansi16']}, - ansi256: {channels: 1, labels: ['ansi256']}, - hcg: {channels: 3, labels: ['h', 'c', 'g']}, - apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, - gray: {channels: 1, labels: ['gray']} - }; - - conversions = convert; - - // Hide .channels and .labels properties - for (const model of Object.keys(convert)) { - if (!('channels' in convert[model])) { - throw new Error('missing channels property: ' + model); - } - - if (!('labels' in convert[model])) { - throw new Error('missing channel labels property: ' + model); - } - - if (convert[model].labels.length !== convert[model].channels) { - throw new Error('channel and label counts mismatch: ' + model); - } - - const {channels, labels} = convert[model]; - delete convert[model].channels; - delete convert[model].labels; - Object.defineProperty(convert[model], 'channels', {value: channels}); - Object.defineProperty(convert[model], 'labels', {value: labels}); - } - - convert.rgb.hsl = function (rgb) { - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - const min = Math.min(r, g, b); - const max = Math.max(r, g, b); - const delta = max - min; - let h; - let s; - - if (max === min) { - h = 0; - } else if (r === max) { - h = (g - b) / delta; - } else if (g === max) { - h = 2 + (b - r) / delta; - } else if (b === max) { - h = 4 + (r - g) / delta; - } - - h = Math.min(h * 60, 360); - - if (h < 0) { - h += 360; - } - - const l = (min + max) / 2; - - if (max === min) { - s = 0; - } else if (l <= 0.5) { - s = delta / (max + min); - } else { - s = delta / (2 - max - min); - } - - return [h, s * 100, l * 100]; - }; - - convert.rgb.hsv = function (rgb) { - let rdif; - let gdif; - let bdif; - let h; - let s; - - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - const v = Math.max(r, g, b); - const diff = v - Math.min(r, g, b); - const diffc = function (c) { - return (v - c) / 6 / diff + 1 / 2; - }; - - if (diff === 0) { - h = 0; - s = 0; - } else { - s = diff / v; - rdif = diffc(r); - gdif = diffc(g); - bdif = diffc(b); - - if (r === v) { - h = bdif - gdif; - } else if (g === v) { - h = (1 / 3) + rdif - bdif; - } else if (b === v) { - h = (2 / 3) + gdif - rdif; - } - - if (h < 0) { - h += 1; - } else if (h > 1) { - h -= 1; - } - } - - return [ - h * 360, - s * 100, - v * 100 - ]; - }; - - convert.rgb.hwb = function (rgb) { - const r = rgb[0]; - const g = rgb[1]; - let b = rgb[2]; - const h = convert.rgb.hsl(rgb)[0]; - const w = 1 / 255 * Math.min(r, Math.min(g, b)); - - b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); - - return [h, w * 100, b * 100]; - }; - - convert.rgb.cmyk = function (rgb) { - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - - const k = Math.min(1 - r, 1 - g, 1 - b); - const c = (1 - r - k) / (1 - k) || 0; - const m = (1 - g - k) / (1 - k) || 0; - const y = (1 - b - k) / (1 - k) || 0; - - return [c * 100, m * 100, y * 100, k * 100]; - }; - - function comparativeDistance(x, y) { - /* - See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance - */ - return ( - ((x[0] - y[0]) ** 2) + - ((x[1] - y[1]) ** 2) + - ((x[2] - y[2]) ** 2) - ); - } - - convert.rgb.keyword = function (rgb) { - const reversed = reverseKeywords[rgb]; - if (reversed) { - return reversed; - } - - let currentClosestDistance = Infinity; - let currentClosestKeyword; - - for (const keyword of Object.keys(cssKeywords)) { - const value = cssKeywords[keyword]; - - // Compute comparative distance - const distance = comparativeDistance(rgb, value); - - // Check if its less, if so set as closest - if (distance < currentClosestDistance) { - currentClosestDistance = distance; - currentClosestKeyword = keyword; - } - } - - return currentClosestKeyword; - }; - - convert.keyword.rgb = function (keyword) { - return cssKeywords[keyword]; - }; - - convert.rgb.xyz = function (rgb) { - let r = rgb[0] / 255; - let g = rgb[1] / 255; - let b = rgb[2] / 255; - - // Assume sRGB - r = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92); - g = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92); - b = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92); - - const x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); - const y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); - const z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); - - return [x * 100, y * 100, z * 100]; - }; - - convert.rgb.lab = function (rgb) { - const xyz = convert.rgb.xyz(rgb); - let x = xyz[0]; - let y = xyz[1]; - let z = xyz[2]; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); - - const l = (116 * y) - 16; - const a = 500 * (x - y); - const b = 200 * (y - z); - - return [l, a, b]; - }; - - convert.hsl.rgb = function (hsl) { - const h = hsl[0] / 360; - const s = hsl[1] / 100; - const l = hsl[2] / 100; - let t2; - let t3; - let val; - - if (s === 0) { - val = l * 255; - return [val, val, val]; - } - - if (l < 0.5) { - t2 = l * (1 + s); - } else { - t2 = l + s - l * s; - } - - const t1 = 2 * l - t2; - - const rgb = [0, 0, 0]; - for (let i = 0; i < 3; i++) { - t3 = h + 1 / 3 * -(i - 1); - if (t3 < 0) { - t3++; - } - - if (t3 > 1) { - t3--; - } - - if (6 * t3 < 1) { - val = t1 + (t2 - t1) * 6 * t3; - } else if (2 * t3 < 1) { - val = t2; - } else if (3 * t3 < 2) { - val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - } else { - val = t1; - } - - rgb[i] = val * 255; - } - - return rgb; - }; - - convert.hsl.hsv = function (hsl) { - const h = hsl[0]; - let s = hsl[1] / 100; - let l = hsl[2] / 100; - let smin = s; - const lmin = Math.max(l, 0.01); - - l *= 2; - s *= (l <= 1) ? l : 2 - l; - smin *= lmin <= 1 ? lmin : 2 - lmin; - const v = (l + s) / 2; - const sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); - - return [h, sv * 100, v * 100]; - }; - - convert.hsv.rgb = function (hsv) { - const h = hsv[0] / 60; - const s = hsv[1] / 100; - let v = hsv[2] / 100; - const hi = Math.floor(h) % 6; - - const f = h - Math.floor(h); - const p = 255 * v * (1 - s); - const q = 255 * v * (1 - (s * f)); - const t = 255 * v * (1 - (s * (1 - f))); - v *= 255; - - switch (hi) { - case 0: - return [v, t, p]; - case 1: - return [q, v, p]; - case 2: - return [p, v, t]; - case 3: - return [p, q, v]; - case 4: - return [t, p, v]; - case 5: - return [v, p, q]; - } - }; - - convert.hsv.hsl = function (hsv) { - const h = hsv[0]; - const s = hsv[1] / 100; - const v = hsv[2] / 100; - const vmin = Math.max(v, 0.01); - let sl; - let l; - - l = (2 - s) * v; - const lmin = (2 - s) * vmin; - sl = s * vmin; - sl /= (lmin <= 1) ? lmin : 2 - lmin; - sl = sl || 0; - l /= 2; - - return [h, sl * 100, l * 100]; - }; - - // http://dev.w3.org/csswg/css-color/#hwb-to-rgb - convert.hwb.rgb = function (hwb) { - const h = hwb[0] / 360; - let wh = hwb[1] / 100; - let bl = hwb[2] / 100; - const ratio = wh + bl; - let f; - - // Wh + bl cant be > 1 - if (ratio > 1) { - wh /= ratio; - bl /= ratio; - } - - const i = Math.floor(6 * h); - const v = 1 - bl; - f = 6 * h - i; - - if ((i & 0x01) !== 0) { - f = 1 - f; - } - - const n = wh + f * (v - wh); // Linear interpolation - - let r; - let g; - let b; - /* eslint-disable max-statements-per-line,no-multi-spaces */ - switch (i) { - default: - case 6: - case 0: r = v; g = n; b = wh; break; - case 1: r = n; g = v; b = wh; break; - case 2: r = wh; g = v; b = n; break; - case 3: r = wh; g = n; b = v; break; - case 4: r = n; g = wh; b = v; break; - case 5: r = v; g = wh; b = n; break; - } - /* eslint-enable max-statements-per-line,no-multi-spaces */ - - return [r * 255, g * 255, b * 255]; - }; - - convert.cmyk.rgb = function (cmyk) { - const c = cmyk[0] / 100; - const m = cmyk[1] / 100; - const y = cmyk[2] / 100; - const k = cmyk[3] / 100; - - const r = 1 - Math.min(1, c * (1 - k) + k); - const g = 1 - Math.min(1, m * (1 - k) + k); - const b = 1 - Math.min(1, y * (1 - k) + k); - - return [r * 255, g * 255, b * 255]; - }; - - convert.xyz.rgb = function (xyz) { - const x = xyz[0] / 100; - const y = xyz[1] / 100; - const z = xyz[2] / 100; - let r; - let g; - let b; - - r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); - g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); - b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); - - // Assume sRGB - r = r > 0.0031308 - ? ((1.055 * (r ** (1.0 / 2.4))) - 0.055) - : r * 12.92; - - g = g > 0.0031308 - ? ((1.055 * (g ** (1.0 / 2.4))) - 0.055) - : g * 12.92; - - b = b > 0.0031308 - ? ((1.055 * (b ** (1.0 / 2.4))) - 0.055) - : b * 12.92; - - r = Math.min(Math.max(0, r), 1); - g = Math.min(Math.max(0, g), 1); - b = Math.min(Math.max(0, b), 1); - - return [r * 255, g * 255, b * 255]; - }; - - convert.xyz.lab = function (xyz) { - let x = xyz[0]; - let y = xyz[1]; - let z = xyz[2]; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); - - const l = (116 * y) - 16; - const a = 500 * (x - y); - const b = 200 * (y - z); - - return [l, a, b]; - }; - - convert.lab.xyz = function (lab) { - const l = lab[0]; - const a = lab[1]; - const b = lab[2]; - let x; - let y; - let z; - - y = (l + 16) / 116; - x = a / 500 + y; - z = y - b / 200; - - const y2 = y ** 3; - const x2 = x ** 3; - const z2 = z ** 3; - y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; - x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; - z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; - - x *= 95.047; - y *= 100; - z *= 108.883; - - return [x, y, z]; - }; - - convert.lab.lch = function (lab) { - const l = lab[0]; - const a = lab[1]; - const b = lab[2]; - let h; - - const hr = Math.atan2(b, a); - h = hr * 360 / 2 / Math.PI; - - if (h < 0) { - h += 360; - } - - const c = Math.sqrt(a * a + b * b); - - return [l, c, h]; - }; - - convert.lch.lab = function (lch) { - const l = lch[0]; - const c = lch[1]; - const h = lch[2]; - - const hr = h / 360 * 2 * Math.PI; - const a = c * Math.cos(hr); - const b = c * Math.sin(hr); - - return [l, a, b]; - }; - - convert.rgb.ansi16 = function (args, saturation = null) { - const [r, g, b] = args; - let value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization - - value = Math.round(value / 50); - - if (value === 0) { - return 30; - } - - let ansi = 30 - + ((Math.round(b / 255) << 2) - | (Math.round(g / 255) << 1) - | Math.round(r / 255)); - - if (value === 2) { - ansi += 60; - } - - return ansi; - }; - - convert.hsv.ansi16 = function (args) { - // Optimization here; we already know the value and don't need to get - // it converted for us. - return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); - }; - - convert.rgb.ansi256 = function (args) { - const r = args[0]; - const g = args[1]; - const b = args[2]; - - // We use the extended greyscale palette here, with the exception of - // black and white. normal palette only has 4 greyscale shades. - if (r === g && g === b) { - if (r < 8) { - return 16; - } - - if (r > 248) { - return 231; - } - - return Math.round(((r - 8) / 247) * 24) + 232; - } - - const ansi = 16 - + (36 * Math.round(r / 255 * 5)) - + (6 * Math.round(g / 255 * 5)) - + Math.round(b / 255 * 5); - - return ansi; - }; - - convert.ansi16.rgb = function (args) { - let color = args % 10; - - // Handle greyscale - if (color === 0 || color === 7) { - if (args > 50) { - color += 3.5; - } - - color = color / 10.5 * 255; - - return [color, color, color]; - } - - const mult = (~~(args > 50) + 1) * 0.5; - const r = ((color & 1) * mult) * 255; - const g = (((color >> 1) & 1) * mult) * 255; - const b = (((color >> 2) & 1) * mult) * 255; - - return [r, g, b]; - }; - - convert.ansi256.rgb = function (args) { - // Handle greyscale - if (args >= 232) { - const c = (args - 232) * 10 + 8; - return [c, c, c]; - } - - args -= 16; - - let rem; - const r = Math.floor(args / 36) / 5 * 255; - const g = Math.floor((rem = args % 36) / 6) / 5 * 255; - const b = (rem % 6) / 5 * 255; - - return [r, g, b]; - }; - - convert.rgb.hex = function (args) { - const integer = ((Math.round(args[0]) & 0xFF) << 16) - + ((Math.round(args[1]) & 0xFF) << 8) - + (Math.round(args[2]) & 0xFF); - - const string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; - }; - - convert.hex.rgb = function (args) { - const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); - if (!match) { - return [0, 0, 0]; - } - - let colorString = match[0]; - - if (match[0].length === 3) { - colorString = colorString.split('').map(char => { - return char + char; - }).join(''); - } - - const integer = parseInt(colorString, 16); - const r = (integer >> 16) & 0xFF; - const g = (integer >> 8) & 0xFF; - const b = integer & 0xFF; - - return [r, g, b]; - }; - - convert.rgb.hcg = function (rgb) { - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - const max = Math.max(Math.max(r, g), b); - const min = Math.min(Math.min(r, g), b); - const chroma = (max - min); - let grayscale; - let hue; - - if (chroma < 1) { - grayscale = min / (1 - chroma); - } else { - grayscale = 0; - } - - if (chroma <= 0) { - hue = 0; - } else - if (max === r) { - hue = ((g - b) / chroma) % 6; - } else - if (max === g) { - hue = 2 + (b - r) / chroma; - } else { - hue = 4 + (r - g) / chroma; - } - - hue /= 6; - hue %= 1; - - return [hue * 360, chroma * 100, grayscale * 100]; - }; - - convert.hsl.hcg = function (hsl) { - const s = hsl[1] / 100; - const l = hsl[2] / 100; - - const c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l)); - - let f = 0; - if (c < 1.0) { - f = (l - 0.5 * c) / (1.0 - c); - } - - return [hsl[0], c * 100, f * 100]; - }; - - convert.hsv.hcg = function (hsv) { - const s = hsv[1] / 100; - const v = hsv[2] / 100; - - const c = s * v; - let f = 0; - - if (c < 1.0) { - f = (v - c) / (1 - c); - } - - return [hsv[0], c * 100, f * 100]; - }; - - convert.hcg.rgb = function (hcg) { - const h = hcg[0] / 360; - const c = hcg[1] / 100; - const g = hcg[2] / 100; - - if (c === 0.0) { - return [g * 255, g * 255, g * 255]; - } - - const pure = [0, 0, 0]; - const hi = (h % 1) * 6; - const v = hi % 1; - const w = 1 - v; - let mg = 0; - - /* eslint-disable max-statements-per-line */ - switch (Math.floor(hi)) { - case 0: - pure[0] = 1; pure[1] = v; pure[2] = 0; break; - case 1: - pure[0] = w; pure[1] = 1; pure[2] = 0; break; - case 2: - pure[0] = 0; pure[1] = 1; pure[2] = v; break; - case 3: - pure[0] = 0; pure[1] = w; pure[2] = 1; break; - case 4: - pure[0] = v; pure[1] = 0; pure[2] = 1; break; - default: - pure[0] = 1; pure[1] = 0; pure[2] = w; - } - /* eslint-enable max-statements-per-line */ - - mg = (1.0 - c) * g; - - return [ - (c * pure[0] + mg) * 255, - (c * pure[1] + mg) * 255, - (c * pure[2] + mg) * 255 - ]; - }; - - convert.hcg.hsv = function (hcg) { - const c = hcg[1] / 100; - const g = hcg[2] / 100; - - const v = c + g * (1.0 - c); - let f = 0; - - if (v > 0.0) { - f = c / v; - } - - return [hcg[0], f * 100, v * 100]; - }; - - convert.hcg.hsl = function (hcg) { - const c = hcg[1] / 100; - const g = hcg[2] / 100; - - const l = g * (1.0 - c) + 0.5 * c; - let s = 0; - - if (l > 0.0 && l < 0.5) { - s = c / (2 * l); - } else - if (l >= 0.5 && l < 1.0) { - s = c / (2 * (1 - l)); - } - - return [hcg[0], s * 100, l * 100]; - }; - - convert.hcg.hwb = function (hcg) { - const c = hcg[1] / 100; - const g = hcg[2] / 100; - const v = c + g * (1.0 - c); - return [hcg[0], (v - c) * 100, (1 - v) * 100]; - }; - - convert.hwb.hcg = function (hwb) { - const w = hwb[1] / 100; - const b = hwb[2] / 100; - const v = 1 - b; - const c = v - w; - let g = 0; - - if (c < 1) { - g = (v - c) / (1 - c); - } - - return [hwb[0], c * 100, g * 100]; - }; - - convert.apple.rgb = function (apple) { - return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; - }; - - convert.rgb.apple = function (rgb) { - return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; - }; - - convert.gray.rgb = function (args) { - return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; - }; - - convert.gray.hsl = function (args) { - return [0, 0, args[0]]; - }; - - convert.gray.hsv = convert.gray.hsl; - - convert.gray.hwb = function (gray) { - return [0, 100, gray[0]]; - }; - - convert.gray.cmyk = function (gray) { - return [0, 0, 0, gray[0]]; - }; - - convert.gray.lab = function (gray) { - return [gray[0], 0, 0]; - }; - - convert.gray.hex = function (gray) { - const val = Math.round(gray[0] / 100 * 255) & 0xFF; - const integer = (val << 16) + (val << 8) + val; - - const string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; - }; - - convert.rgb.gray = function (rgb) { - const val = (rgb[0] + rgb[1] + rgb[2]) / 3; - return [val / 255 * 100]; - }; - return conversions; -} - -var route; -var hasRequiredRoute; - -function requireRoute () { - if (hasRequiredRoute) return route; - hasRequiredRoute = 1; - const conversions = requireConversions(); - - /* - This function routes a model to all other models. - - all functions that are routed have a property `.conversion` attached - to the returned synthetic function. This property is an array - of strings, each with the steps in between the 'from' and 'to' - color models (inclusive). - - conversions that are not possible simply are not included. - */ - - function buildGraph() { - const graph = {}; - // https://jsperf.com/object-keys-vs-for-in-with-closure/3 - const models = Object.keys(conversions); - - for (let len = models.length, i = 0; i < len; i++) { - graph[models[i]] = { - // http://jsperf.com/1-vs-infinity - // micro-opt, but this is simple. - distance: -1, - parent: null - }; - } - - return graph; - } - - // https://en.wikipedia.org/wiki/Breadth-first_search - function deriveBFS(fromModel) { - const graph = buildGraph(); - const queue = [fromModel]; // Unshift -> queue -> pop - - graph[fromModel].distance = 0; - - while (queue.length) { - const current = queue.pop(); - const adjacents = Object.keys(conversions[current]); - - for (let len = adjacents.length, i = 0; i < len; i++) { - const adjacent = adjacents[i]; - const node = graph[adjacent]; - - if (node.distance === -1) { - node.distance = graph[current].distance + 1; - node.parent = current; - queue.unshift(adjacent); - } - } - } - - return graph; - } - - function link(from, to) { - return function (args) { - return to(from(args)); - }; - } - - function wrapConversion(toModel, graph) { - const path = [graph[toModel].parent, toModel]; - let fn = conversions[graph[toModel].parent][toModel]; - - let cur = graph[toModel].parent; - while (graph[cur].parent) { - path.unshift(graph[cur].parent); - fn = link(conversions[graph[cur].parent][cur], fn); - cur = graph[cur].parent; - } - - fn.conversion = path; - return fn; - } - - route = function (fromModel) { - const graph = deriveBFS(fromModel); - const conversion = {}; - - const models = Object.keys(graph); - for (let len = models.length, i = 0; i < len; i++) { - const toModel = models[i]; - const node = graph[toModel]; - - if (node.parent === null) { - // No possible conversion, or this node is the source model. - continue; - } - - conversion[toModel] = wrapConversion(toModel, graph); - } - - return conversion; - }; - return route; -} - -var colorConvert; -var hasRequiredColorConvert; - -function requireColorConvert () { - if (hasRequiredColorConvert) return colorConvert; - hasRequiredColorConvert = 1; - const conversions = requireConversions(); - const route = requireRoute(); - - const convert = {}; - - const models = Object.keys(conversions); - - function wrapRaw(fn) { - const wrappedFn = function (...args) { - const arg0 = args[0]; - if (arg0 === undefined || arg0 === null) { - return arg0; - } - - if (arg0.length > 1) { - args = arg0; - } - - return fn(args); - }; - - // Preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; - } - - function wrapRounded(fn) { - const wrappedFn = function (...args) { - const arg0 = args[0]; - - if (arg0 === undefined || arg0 === null) { - return arg0; - } - - if (arg0.length > 1) { - args = arg0; - } - - const result = fn(args); - - // We're assuming the result is an array here. - // see notice in conversions.js; don't use box types - // in conversion functions. - if (typeof result === 'object') { - for (let len = result.length, i = 0; i < len; i++) { - result[i] = Math.round(result[i]); - } - } - - return result; - }; - - // Preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; - } - - models.forEach(fromModel => { - convert[fromModel] = {}; - - Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels}); - Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels}); - - const routes = route(fromModel); - const routeModels = Object.keys(routes); - - routeModels.forEach(toModel => { - const fn = routes[toModel]; - - convert[fromModel][toModel] = wrapRounded(fn); - convert[fromModel][toModel].raw = wrapRaw(fn); - }); - }); - - colorConvert = convert; - return colorConvert; -} - -ansiStyles$2.exports; - -(function (module) { - - const wrapAnsi16 = (fn, offset) => (...args) => { - const code = fn(...args); - return `\u001B[${code + offset}m`; - }; - - const wrapAnsi256 = (fn, offset) => (...args) => { - const code = fn(...args); - return `\u001B[${38 + offset};5;${code}m`; - }; - - const wrapAnsi16m = (fn, offset) => (...args) => { - const rgb = fn(...args); - return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`; - }; - - const ansi2ansi = n => n; - const rgb2rgb = (r, g, b) => [r, g, b]; - - const setLazyProperty = (object, property, get) => { - Object.defineProperty(object, property, { - get: () => { - const value = get(); - - Object.defineProperty(object, property, { - value, - enumerable: true, - configurable: true - }); - - return value; - }, - enumerable: true, - configurable: true - }); - }; - - /** @type {typeof import('color-convert')} */ - let colorConvert; - const makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => { - if (colorConvert === undefined) { - colorConvert = requireColorConvert(); - } - - const offset = isBackground ? 10 : 0; - const styles = {}; - - for (const [sourceSpace, suite] of Object.entries(colorConvert)) { - const name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace; - if (sourceSpace === targetSpace) { - styles[name] = wrap(identity, offset); - } else if (typeof suite === 'object') { - styles[name] = wrap(suite[targetSpace], offset); - } - } - - return styles; - }; - - function assembleStyles() { - const codes = new Map(); - const styles = { - modifier: { - reset: [0, 0], - // 21 isn't widely supported and 22 does the same thing - bold: [1, 22], - dim: [2, 22], - italic: [3, 23], - underline: [4, 24], - inverse: [7, 27], - hidden: [8, 28], - strikethrough: [9, 29] - }, - color: { - black: [30, 39], - red: [31, 39], - green: [32, 39], - yellow: [33, 39], - blue: [34, 39], - magenta: [35, 39], - cyan: [36, 39], - white: [37, 39], - - // Bright color - blackBright: [90, 39], - redBright: [91, 39], - greenBright: [92, 39], - yellowBright: [93, 39], - blueBright: [94, 39], - magentaBright: [95, 39], - cyanBright: [96, 39], - whiteBright: [97, 39] - }, - bgColor: { - bgBlack: [40, 49], - bgRed: [41, 49], - bgGreen: [42, 49], - bgYellow: [43, 49], - bgBlue: [44, 49], - bgMagenta: [45, 49], - bgCyan: [46, 49], - bgWhite: [47, 49], - - // Bright color - bgBlackBright: [100, 49], - bgRedBright: [101, 49], - bgGreenBright: [102, 49], - bgYellowBright: [103, 49], - bgBlueBright: [104, 49], - bgMagentaBright: [105, 49], - bgCyanBright: [106, 49], - bgWhiteBright: [107, 49] - } - }; - - // Alias bright black as gray (and grey) - styles.color.gray = styles.color.blackBright; - styles.bgColor.bgGray = styles.bgColor.bgBlackBright; - styles.color.grey = styles.color.blackBright; - styles.bgColor.bgGrey = styles.bgColor.bgBlackBright; - - for (const [groupName, group] of Object.entries(styles)) { - for (const [styleName, style] of Object.entries(group)) { - styles[styleName] = { - open: `\u001B[${style[0]}m`, - close: `\u001B[${style[1]}m` - }; - - group[styleName] = styles[styleName]; - - codes.set(style[0], style[1]); - } - - Object.defineProperty(styles, groupName, { - value: group, - enumerable: false - }); - } - - Object.defineProperty(styles, 'codes', { - value: codes, - enumerable: false - }); - - styles.color.close = '\u001B[39m'; - styles.bgColor.close = '\u001B[49m'; - - setLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false)); - setLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false)); - setLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false)); - setLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true)); - setLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true)); - setLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true)); - - return styles; - } - - // Make the export immutable - Object.defineProperty(module, 'exports', { - enumerable: true, - get: assembleStyles - }); -} (ansiStyles$2)); - -var ansiStylesExports = ansiStyles$2.exports; - -const stringWidth = stringWidthExports; -const stripAnsi$1 = stripAnsi$3; -const ansiStyles$1 = ansiStylesExports; - -const ESCAPES = new Set([ - '\u001B', - '\u009B' -]); - -const END_CODE = 39; - -const wrapAnsi = code => `${ESCAPES.values().next().value}[${code}m`; - -// Calculate the length of words split on ' ', ignoring -// the extra characters added by ansi escape codes -const wordLengths = string => string.split(' ').map(character => stringWidth(character)); - -// Wrap a long word across multiple rows -// Ansi escape codes do not count towards length -const wrapWord = (rows, word, columns) => { - const characters = [...word]; - - let isInsideEscape = false; - let visible = stringWidth(stripAnsi$1(rows[rows.length - 1])); - - for (const [index, character] of characters.entries()) { - const characterLength = stringWidth(character); - - if (visible + characterLength <= columns) { - rows[rows.length - 1] += character; - } else { - rows.push(character); - visible = 0; - } - - if (ESCAPES.has(character)) { - isInsideEscape = true; - } else if (isInsideEscape && character === 'm') { - isInsideEscape = false; - continue; - } - - if (isInsideEscape) { - continue; - } - - visible += characterLength; - - if (visible === columns && index < characters.length - 1) { - rows.push(''); - visible = 0; - } - } - - // It's possible that the last row we copy over is only - // ansi escape characters, handle this edge-case - if (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) { - rows[rows.length - 2] += rows.pop(); - } -}; - -// Trims spaces from a string ignoring invisible sequences -const stringVisibleTrimSpacesRight = str => { - const words = str.split(' '); - let last = words.length; - - while (last > 0) { - if (stringWidth(words[last - 1]) > 0) { - break; - } - - last--; - } - - if (last === words.length) { - return str; - } - - return words.slice(0, last).join(' ') + words.slice(last).join(''); -}; - -// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode -// -// 'hard' will never allow a string to take up more than columns characters -// -// 'soft' allows long words to expand past the column length -const exec = (string, columns, options = {}) => { - if (options.trim !== false && string.trim() === '') { - return ''; - } - - let pre = ''; - let ret = ''; - let escapeCode; - - const lengths = wordLengths(string); - let rows = ['']; - - for (const [index, word] of string.split(' ').entries()) { - if (options.trim !== false) { - rows[rows.length - 1] = rows[rows.length - 1].trimLeft(); - } - - let rowLength = stringWidth(rows[rows.length - 1]); - - if (index !== 0) { - if (rowLength >= columns && (options.wordWrap === false || options.trim === false)) { - // If we start with a new word but the current row length equals the length of the columns, add a new row - rows.push(''); - rowLength = 0; - } - - if (rowLength > 0 || options.trim === false) { - rows[rows.length - 1] += ' '; - rowLength++; - } - } - - // In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns' - if (options.hard && lengths[index] > columns) { - const remainingColumns = (columns - rowLength); - const breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns); - const breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns); - if (breaksStartingNextLine < breaksStartingThisLine) { - rows.push(''); - } - - wrapWord(rows, word, columns); - continue; - } - - if (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) { - if (options.wordWrap === false && rowLength < columns) { - wrapWord(rows, word, columns); - continue; - } - - rows.push(''); - } - - if (rowLength + lengths[index] > columns && options.wordWrap === false) { - wrapWord(rows, word, columns); - continue; - } - - rows[rows.length - 1] += word; - } - - if (options.trim !== false) { - rows = rows.map(stringVisibleTrimSpacesRight); - } - - pre = rows.join('\n'); - - for (const [index, character] of [...pre].entries()) { - ret += character; - - if (ESCAPES.has(character)) { - const code = parseFloat(/\d[^m]*/.exec(pre.slice(index, index + 4))); - escapeCode = code === END_CODE ? null : code; - } - - const code = ansiStyles$1.codes.get(Number(escapeCode)); - - if (escapeCode && code) { - if (pre[index + 1] === '\n') { - ret += wrapAnsi(code); - } else if (character === '\n') { - ret += wrapAnsi(escapeCode); - } - } - } - - return ret; -}; - -// For each newline, invoke the method separately -var wrapAnsi_1 = (string, columns, options) => { - return String(string) - .normalize() - .replace(/\r\n/g, '\n') - .split('\n') - .map(line => exec(line, columns, options)) - .join('\n'); -}; - -var wrapAnsi$1 = /*@__PURE__*/getDefaultExportFromCjs(wrapAnsi_1); - -var ora$1 = {exports: {}}; - -const stringReplaceAll$1 = (string, substring, replacer) => { - let index = string.indexOf(substring); - if (index === -1) { - return string; - } - - const substringLength = substring.length; - let endIndex = 0; - let returnValue = ''; - do { - returnValue += string.substr(endIndex, index - endIndex) + substring + replacer; - endIndex = index + substringLength; - index = string.indexOf(substring, endIndex); - } while (index !== -1); - - returnValue += string.substr(endIndex); - return returnValue; -}; - -const stringEncaseCRLFWithFirstIndex$1 = (string, prefix, postfix, index) => { - let endIndex = 0; - let returnValue = ''; - do { - const gotCR = string[index - 1] === '\r'; - returnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? '\r\n' : '\n') + postfix; - endIndex = index + 1; - index = string.indexOf('\n', endIndex); - } while (index !== -1); - - returnValue += string.substr(endIndex); - return returnValue; -}; - -var util$1 = { - stringReplaceAll: stringReplaceAll$1, - stringEncaseCRLFWithFirstIndex: stringEncaseCRLFWithFirstIndex$1 -}; - -var templates; -var hasRequiredTemplates; - -function requireTemplates () { - if (hasRequiredTemplates) return templates; - hasRequiredTemplates = 1; - const TEMPLATE_REGEX = /(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi; - const STYLE_REGEX = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g; - const STRING_REGEX = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/; - const ESCAPE_REGEX = /\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi; - - const ESCAPES = new Map([ - ['n', '\n'], - ['r', '\r'], - ['t', '\t'], - ['b', '\b'], - ['f', '\f'], - ['v', '\v'], - ['0', '\0'], - ['\\', '\\'], - ['e', '\u001B'], - ['a', '\u0007'] - ]); - - function unescape(c) { - const u = c[0] === 'u'; - const bracket = c[1] === '{'; - - if ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) { - return String.fromCharCode(parseInt(c.slice(1), 16)); - } - - if (u && bracket) { - return String.fromCodePoint(parseInt(c.slice(2, -1), 16)); - } - - return ESCAPES.get(c) || c; - } - - function parseArguments(name, arguments_) { - const results = []; - const chunks = arguments_.trim().split(/\s*,\s*/g); - let matches; - - for (const chunk of chunks) { - const number = Number(chunk); - if (!Number.isNaN(number)) { - results.push(number); - } else if ((matches = chunk.match(STRING_REGEX))) { - results.push(matches[2].replace(ESCAPE_REGEX, (m, escape, character) => escape ? unescape(escape) : character)); - } else { - throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`); - } - } - - return results; - } - - function parseStyle(style) { - STYLE_REGEX.lastIndex = 0; - - const results = []; - let matches; - - while ((matches = STYLE_REGEX.exec(style)) !== null) { - const name = matches[1]; - - if (matches[2]) { - const args = parseArguments(name, matches[2]); - results.push([name].concat(args)); - } else { - results.push([name]); - } - } - - return results; - } - - function buildStyle(chalk, styles) { - const enabled = {}; - - for (const layer of styles) { - for (const style of layer.styles) { - enabled[style[0]] = layer.inverse ? null : style.slice(1); - } - } - - let current = chalk; - for (const [styleName, styles] of Object.entries(enabled)) { - if (!Array.isArray(styles)) { - continue; - } - - if (!(styleName in current)) { - throw new Error(`Unknown Chalk style: ${styleName}`); - } - - current = styles.length > 0 ? current[styleName](...styles) : current[styleName]; - } - - return current; - } - - templates = (chalk, temporary) => { - const styles = []; - const chunks = []; - let chunk = []; - - // eslint-disable-next-line max-params - temporary.replace(TEMPLATE_REGEX, (m, escapeCharacter, inverse, style, close, character) => { - if (escapeCharacter) { - chunk.push(unescape(escapeCharacter)); - } else if (style) { - const string = chunk.join(''); - chunk = []; - chunks.push(styles.length === 0 ? string : buildStyle(chalk, styles)(string)); - styles.push({inverse, styles: parseStyle(style)}); - } else if (close) { - if (styles.length === 0) { - throw new Error('Found extraneous } in Chalk template literal'); - } - - chunks.push(buildStyle(chalk, styles)(chunk.join(''))); - chunk = []; - styles.pop(); - } else { - chunk.push(character); - } - }); - - chunks.push(chunk.join('')); - - if (styles.length > 0) { - const errMessage = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\`}\`)`; - throw new Error(errMessage); - } - - return chunks.join(''); - }; - return templates; -} - -const ansiStyles = ansiStylesExports; -const {stdout: stdoutColor, stderr: stderrColor} = requireSupportsColor(); -const { - stringReplaceAll, - stringEncaseCRLFWithFirstIndex -} = util$1; - -const {isArray: isArray$1} = Array; - -// `supportsColor.level` → `ansiStyles.color[name]` mapping -const levelMapping = [ - 'ansi', - 'ansi', - 'ansi256', - 'ansi16m' -]; - -const styles = Object.create(null); - -const applyOptions = (object, options = {}) => { - if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) { - throw new Error('The `level` option should be an integer from 0 to 3'); - } - - // Detect level if not set manually - const colorLevel = stdoutColor ? stdoutColor.level : 0; - object.level = options.level === undefined ? colorLevel : options.level; -}; - -class ChalkClass { - constructor(options) { - // eslint-disable-next-line no-constructor-return - return chalkFactory(options); - } -} - -const chalkFactory = options => { - const chalk = {}; - applyOptions(chalk, options); - - chalk.template = (...arguments_) => chalkTag(chalk.template, ...arguments_); - - Object.setPrototypeOf(chalk, Chalk.prototype); - Object.setPrototypeOf(chalk.template, chalk); - - chalk.template.constructor = () => { - throw new Error('`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.'); - }; - - chalk.template.Instance = ChalkClass; - - return chalk.template; -}; - -function Chalk(options) { - return chalkFactory(options); -} - -for (const [styleName, style] of Object.entries(ansiStyles)) { - styles[styleName] = { - get() { - const builder = createBuilder(this, createStyler(style.open, style.close, this._styler), this._isEmpty); - Object.defineProperty(this, styleName, {value: builder}); - return builder; - } - }; -} - -styles.visible = { - get() { - const builder = createBuilder(this, this._styler, true); - Object.defineProperty(this, 'visible', {value: builder}); - return builder; - } -}; - -const usedModels = ['rgb', 'hex', 'keyword', 'hsl', 'hsv', 'hwb', 'ansi', 'ansi256']; - -for (const model of usedModels) { - styles[model] = { - get() { - const {level} = this; - return function (...arguments_) { - const styler = createStyler(ansiStyles.color[levelMapping[level]][model](...arguments_), ansiStyles.color.close, this._styler); - return createBuilder(this, styler, this._isEmpty); - }; - } - }; -} - -for (const model of usedModels) { - const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1); - styles[bgModel] = { - get() { - const {level} = this; - return function (...arguments_) { - const styler = createStyler(ansiStyles.bgColor[levelMapping[level]][model](...arguments_), ansiStyles.bgColor.close, this._styler); - return createBuilder(this, styler, this._isEmpty); - }; - } - }; -} - -const proto = Object.defineProperties(() => {}, { - ...styles, - level: { - enumerable: true, - get() { - return this._generator.level; - }, - set(level) { - this._generator.level = level; - } - } -}); - -const createStyler = (open, close, parent) => { - let openAll; - let closeAll; - if (parent === undefined) { - openAll = open; - closeAll = close; - } else { - openAll = parent.openAll + open; - closeAll = close + parent.closeAll; - } - - return { - open, - close, - openAll, - closeAll, - parent - }; -}; - -const createBuilder = (self, _styler, _isEmpty) => { - const builder = (...arguments_) => { - if (isArray$1(arguments_[0]) && isArray$1(arguments_[0].raw)) { - // Called as a template literal, for example: chalk.red`2 + 3 = {bold ${2+3}}` - return applyStyle(builder, chalkTag(builder, ...arguments_)); - } - - // Single argument is hot path, implicit coercion is faster than anything - // eslint-disable-next-line no-implicit-coercion - return applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' ')); - }; - - // We alter the prototype because we must return a function, but there is - // no way to create a function with a different prototype - Object.setPrototypeOf(builder, proto); - - builder._generator = self; - builder._styler = _styler; - builder._isEmpty = _isEmpty; - - return builder; -}; - -const applyStyle = (self, string) => { - if (self.level <= 0 || !string) { - return self._isEmpty ? '' : string; - } - - let styler = self._styler; - - if (styler === undefined) { - return string; - } - - const {openAll, closeAll} = styler; - if (string.indexOf('\u001B') !== -1) { - while (styler !== undefined) { - // Replace any instances already present with a re-opening code - // otherwise only the part of the string until said closing code - // will be colored, and the rest will simply be 'plain'. - string = stringReplaceAll(string, styler.close, styler.open); - - styler = styler.parent; - } - } - - // We can move both next actions out of loop, because remaining actions in loop won't have - // any/visible effect on parts we add here. Close the styling before a linebreak and reopen - // after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92 - const lfIndex = string.indexOf('\n'); - if (lfIndex !== -1) { - string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex); - } - - return openAll + string + closeAll; -}; - -let template; -const chalkTag = (chalk, ...strings) => { - const [firstString] = strings; - - if (!isArray$1(firstString) || !isArray$1(firstString.raw)) { - // If chalk() was called by itself or with a string, - // return the string itself as a string. - return strings.join(' '); - } - - const arguments_ = strings.slice(1); - const parts = [firstString.raw[0]]; - - for (let i = 1; i < firstString.length; i++) { - parts.push( - String(arguments_[i - 1]).replace(/[{}\\]/g, '\\$&'), - String(firstString.raw[i]) - ); - } - - if (template === undefined) { - template = requireTemplates(); - } - - return template(chalk, parts.join('')); -}; - -Object.defineProperties(Chalk.prototype, styles); - -const chalk$2 = Chalk(); // eslint-disable-line new-cap -chalk$2.supportsColor = stdoutColor; -chalk$2.stderr = Chalk({level: stderrColor ? stderrColor.level : 0}); // eslint-disable-line new-cap -chalk$2.stderr.supportsColor = stderrColor; - -var source = chalk$2; - -var cliCursor$1 = {}; - -var onetime$2 = {exports: {}}; - -var mimicFn$2 = {exports: {}}; - -const mimicFn$1 = (to, from) => { - for (const prop of Reflect.ownKeys(from)) { - Object.defineProperty(to, prop, Object.getOwnPropertyDescriptor(from, prop)); - } - - return to; -}; - -mimicFn$2.exports = mimicFn$1; -// TODO: Remove this for the next major release -mimicFn$2.exports.default = mimicFn$1; - -var mimicFnExports = mimicFn$2.exports; - -const mimicFn = mimicFnExports; - -const calledFunctions = new WeakMap(); - -const onetime$1 = (function_, options = {}) => { - if (typeof function_ !== 'function') { - throw new TypeError('Expected a function'); - } - - let returnValue; - let callCount = 0; - const functionName = function_.displayName || function_.name || ''; - - const onetime = function (...arguments_) { - calledFunctions.set(onetime, ++callCount); - - if (callCount === 1) { - returnValue = function_.apply(this, arguments_); - function_ = null; - } else if (options.throw === true) { - throw new Error(`Function \`${functionName}\` can only be called once`); - } - - return returnValue; - }; - - mimicFn(onetime, function_); - calledFunctions.set(onetime, callCount); - - return onetime; -}; - -onetime$2.exports = onetime$1; -// TODO: Remove this for the next major release -onetime$2.exports.default = onetime$1; - -onetime$2.exports.callCount = function_ => { - if (!calledFunctions.has(function_)) { - throw new Error(`The given function \`${function_.name}\` is not wrapped by the \`onetime\` package`); - } - - return calledFunctions.get(function_); -}; - -var onetimeExports = onetime$2.exports; - -var signalExit$1 = {exports: {}}; - -var signals$1 = {exports: {}}; - -var hasRequiredSignals; - -function requireSignals () { - if (hasRequiredSignals) return signals$1.exports; - hasRequiredSignals = 1; - (function (module) { - // This is not the set of all possible signals. - // - // It IS, however, the set of all signals that trigger - // an exit on either Linux or BSD systems. Linux is a - // superset of the signal names supported on BSD, and - // the unknown signals just fail to register, so we can - // catch that easily enough. - // - // Don't bother with SIGKILL. It's uncatchable, which - // means that we can't fire any callbacks anyway. - // - // If a user does happen to register a handler on a non- - // fatal signal like SIGWINCH or something, and then - // exit, it'll end up firing `process.emit('exit')`, so - // the handler will be fired anyway. - // - // SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised - // artificially, inherently leave the process in a - // state from which it is not safe to try and enter JS - // listeners. - module.exports = [ - 'SIGABRT', - 'SIGALRM', - 'SIGHUP', - 'SIGINT', - 'SIGTERM' - ]; - - if (process.platform !== 'win32') { - module.exports.push( - 'SIGVTALRM', - 'SIGXCPU', - 'SIGXFSZ', - 'SIGUSR2', - 'SIGTRAP', - 'SIGSYS', - 'SIGQUIT', - 'SIGIOT' - // should detect profiler and enable/disable accordingly. - // see #21 - // 'SIGPROF' - ); - } - - if (process.platform === 'linux') { - module.exports.push( - 'SIGIO', - 'SIGPOLL', - 'SIGPWR', - 'SIGSTKFLT', - 'SIGUNUSED' - ); - } - } (signals$1)); - return signals$1.exports; -} - -// Note: since nyc uses this module to output coverage, any lines -// that are in the direct sync flow of nyc's outputCoverage are -// ignored, since we can never get coverage for them. -// grab a reference to node's real process object right away -var process$1 = commonjsGlobal.process; - -const processOk = function (process) { - return process && - typeof process === 'object' && - typeof process.removeListener === 'function' && - typeof process.emit === 'function' && - typeof process.reallyExit === 'function' && - typeof process.listeners === 'function' && - typeof process.kill === 'function' && - typeof process.pid === 'number' && - typeof process.on === 'function' -}; - -// some kind of non-node environment, just no-op -/* istanbul ignore if */ -if (!processOk(process$1)) { - signalExit$1.exports = function () { - return function () {} - }; -} else { - var assert = assert$1; - var signals = requireSignals(); - var isWin = /^win/i.test(process$1.platform); - - var EE = require$$2$2; - /* istanbul ignore if */ - if (typeof EE !== 'function') { - EE = EE.EventEmitter; - } - - var emitter; - if (process$1.__signal_exit_emitter__) { - emitter = process$1.__signal_exit_emitter__; - } else { - emitter = process$1.__signal_exit_emitter__ = new EE(); - emitter.count = 0; - emitter.emitted = {}; - } - - // Because this emitter is a global, we have to check to see if a - // previous version of this library failed to enable infinite listeners. - // I know what you're about to say. But literally everything about - // signal-exit is a compromise with evil. Get used to it. - if (!emitter.infinite) { - emitter.setMaxListeners(Infinity); - emitter.infinite = true; - } - - signalExit$1.exports = function (cb, opts) { - /* istanbul ignore if */ - if (!processOk(commonjsGlobal.process)) { - return function () {} - } - assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler'); - - if (loaded === false) { - load$2(); - } - - var ev = 'exit'; - if (opts && opts.alwaysLast) { - ev = 'afterexit'; - } - - var remove = function () { - emitter.removeListener(ev, cb); - if (emitter.listeners('exit').length === 0 && - emitter.listeners('afterexit').length === 0) { - unload(); - } - }; - emitter.on(ev, cb); - - return remove - }; - - var unload = function unload () { - if (!loaded || !processOk(commonjsGlobal.process)) { - return - } - loaded = false; - - signals.forEach(function (sig) { - try { - process$1.removeListener(sig, sigListeners[sig]); - } catch (er) {} - }); - process$1.emit = originalProcessEmit; - process$1.reallyExit = originalProcessReallyExit; - emitter.count -= 1; - }; - signalExit$1.exports.unload = unload; - - var emit = function emit (event, code, signal) { - /* istanbul ignore if */ - if (emitter.emitted[event]) { - return - } - emitter.emitted[event] = true; - emitter.emit(event, code, signal); - }; - - // { : , ... } - var sigListeners = {}; - signals.forEach(function (sig) { - sigListeners[sig] = function listener () { - /* istanbul ignore if */ - if (!processOk(commonjsGlobal.process)) { - return - } - // If there are no other listeners, an exit is coming! - // Simplest way: remove us and then re-send the signal. - // We know that this will kill the process, so we can - // safely emit now. - var listeners = process$1.listeners(sig); - if (listeners.length === emitter.count) { - unload(); - emit('exit', null, sig); - /* istanbul ignore next */ - emit('afterexit', null, sig); - /* istanbul ignore next */ - if (isWin && sig === 'SIGHUP') { - // "SIGHUP" throws an `ENOSYS` error on Windows, - // so use a supported signal instead - sig = 'SIGINT'; - } - /* istanbul ignore next */ - process$1.kill(process$1.pid, sig); - } - }; - }); - - signalExit$1.exports.signals = function () { - return signals - }; - - var loaded = false; - - var load$2 = function load () { - if (loaded || !processOk(commonjsGlobal.process)) { - return - } - loaded = true; - - // This is the number of onSignalExit's that are in play. - // It's important so that we can count the correct number of - // listeners on signals, and don't wait for the other one to - // handle it instead of us. - emitter.count += 1; - - signals = signals.filter(function (sig) { - try { - process$1.on(sig, sigListeners[sig]); - return true - } catch (er) { - return false - } - }); - - process$1.emit = processEmit; - process$1.reallyExit = processReallyExit; - }; - signalExit$1.exports.load = load$2; - - var originalProcessReallyExit = process$1.reallyExit; - var processReallyExit = function processReallyExit (code) { - /* istanbul ignore if */ - if (!processOk(commonjsGlobal.process)) { - return - } - process$1.exitCode = code || /* istanbul ignore next */ 0; - emit('exit', process$1.exitCode, null); - /* istanbul ignore next */ - emit('afterexit', process$1.exitCode, null); - /* istanbul ignore next */ - originalProcessReallyExit.call(process$1, process$1.exitCode); - }; - - var originalProcessEmit = process$1.emit; - var processEmit = function processEmit (ev, arg) { - if (ev === 'exit' && processOk(commonjsGlobal.process)) { - /* istanbul ignore else */ - if (arg !== undefined) { - process$1.exitCode = arg; - } - var ret = originalProcessEmit.apply(this, arguments); - /* istanbul ignore next */ - emit('exit', process$1.exitCode, null); - /* istanbul ignore next */ - emit('afterexit', process$1.exitCode, null); - /* istanbul ignore next */ - return ret - } else { - return originalProcessEmit.apply(this, arguments) - } - }; -} - -var signalExitExports = signalExit$1.exports; - -const onetime = onetimeExports; -const signalExit = signalExitExports; - -var restoreCursor = onetime(() => { - signalExit(() => { - process.stderr.write('\u001B[?25h'); - }, {alwaysLast: true}); -}); - -(function (exports) { - const restoreCursor$1 = restoreCursor; - - let isHidden = false; - - exports.show = (writableStream = process.stderr) => { - if (!writableStream.isTTY) { - return; - } - - isHidden = false; - writableStream.write('\u001B[?25h'); - }; - - exports.hide = (writableStream = process.stderr) => { - if (!writableStream.isTTY) { - return; - } - - restoreCursor$1(); - isHidden = true; - writableStream.write('\u001B[?25l'); - }; - - exports.toggle = (force, writableStream) => { - if (force !== undefined) { - isHidden = force; - } - - if (isHidden) { - exports.show(writableStream); - } else { - exports.hide(writableStream); - } - }; -} (cliCursor$1)); - -var dots = { - interval: 80, - frames: [ - "⠋", - "⠙", - "⠹", - "⠸", - "⠼", - "⠴", - "⠦", - "⠧", - "⠇", - "⠏" - ] -}; -var dots2 = { - interval: 80, - frames: [ - "⣾", - "⣽", - "⣻", - "⢿", - "⡿", - "⣟", - "⣯", - "⣷" - ] -}; -var dots3 = { - interval: 80, - frames: [ - "⠋", - "⠙", - "⠚", - "⠞", - "⠖", - "⠦", - "⠴", - "⠲", - "⠳", - "⠓" - ] -}; -var dots4 = { - interval: 80, - frames: [ - "⠄", - "⠆", - "⠇", - "⠋", - "⠙", - "⠸", - "⠰", - "⠠", - "⠰", - "⠸", - "⠙", - "⠋", - "⠇", - "⠆" - ] -}; -var dots5 = { - interval: 80, - frames: [ - "⠋", - "⠙", - "⠚", - "⠒", - "⠂", - "⠂", - "⠒", - "⠲", - "⠴", - "⠦", - "⠖", - "⠒", - "⠐", - "⠐", - "⠒", - "⠓", - "⠋" - ] -}; -var dots6 = { - interval: 80, - frames: [ - "⠁", - "⠉", - "⠙", - "⠚", - "⠒", - "⠂", - "⠂", - "⠒", - "⠲", - "⠴", - "⠤", - "⠄", - "⠄", - "⠤", - "⠴", - "⠲", - "⠒", - "⠂", - "⠂", - "⠒", - "⠚", - "⠙", - "⠉", - "⠁" - ] -}; -var dots7 = { - interval: 80, - frames: [ - "⠈", - "⠉", - "⠋", - "⠓", - "⠒", - "⠐", - "⠐", - "⠒", - "⠖", - "⠦", - "⠤", - "⠠", - "⠠", - "⠤", - "⠦", - "⠖", - "⠒", - "⠐", - "⠐", - "⠒", - "⠓", - "⠋", - "⠉", - "⠈" - ] -}; -var dots8 = { - interval: 80, - frames: [ - "⠁", - "⠁", - "⠉", - "⠙", - "⠚", - "⠒", - "⠂", - "⠂", - "⠒", - "⠲", - "⠴", - "⠤", - "⠄", - "⠄", - "⠤", - "⠠", - "⠠", - "⠤", - "⠦", - "⠖", - "⠒", - "⠐", - "⠐", - "⠒", - "⠓", - "⠋", - "⠉", - "⠈", - "⠈" - ] -}; -var dots9 = { - interval: 80, - frames: [ - "⢹", - "⢺", - "⢼", - "⣸", - "⣇", - "⡧", - "⡗", - "⡏" - ] -}; -var dots10 = { - interval: 80, - frames: [ - "⢄", - "⢂", - "⢁", - "⡁", - "⡈", - "⡐", - "⡠" - ] -}; -var dots11 = { - interval: 100, - frames: [ - "⠁", - "⠂", - "⠄", - "⡀", - "⢀", - "⠠", - "⠐", - "⠈" - ] -}; -var dots12 = { - interval: 80, - frames: [ - "⢀⠀", - "⡀⠀", - "⠄⠀", - "⢂⠀", - "⡂⠀", - "⠅⠀", - "⢃⠀", - "⡃⠀", - "⠍⠀", - "⢋⠀", - "⡋⠀", - "⠍⠁", - "⢋⠁", - "⡋⠁", - "⠍⠉", - "⠋⠉", - "⠋⠉", - "⠉⠙", - "⠉⠙", - "⠉⠩", - "⠈⢙", - "⠈⡙", - "⢈⠩", - "⡀⢙", - "⠄⡙", - "⢂⠩", - "⡂⢘", - "⠅⡘", - "⢃⠨", - "⡃⢐", - "⠍⡐", - "⢋⠠", - "⡋⢀", - "⠍⡁", - "⢋⠁", - "⡋⠁", - "⠍⠉", - "⠋⠉", - "⠋⠉", - "⠉⠙", - "⠉⠙", - "⠉⠩", - "⠈⢙", - "⠈⡙", - "⠈⠩", - "⠀⢙", - "⠀⡙", - "⠀⠩", - "⠀⢘", - "⠀⡘", - "⠀⠨", - "⠀⢐", - "⠀⡐", - "⠀⠠", - "⠀⢀", - "⠀⡀" - ] -}; -var dots13 = { - interval: 80, - frames: [ - "⣼", - "⣹", - "⢻", - "⠿", - "⡟", - "⣏", - "⣧", - "⣶" - ] -}; -var dots8Bit = { - interval: 80, - frames: [ - "⠀", - "⠁", - "⠂", - "⠃", - "⠄", - "⠅", - "⠆", - "⠇", - "⡀", - "⡁", - "⡂", - "⡃", - "⡄", - "⡅", - "⡆", - "⡇", - "⠈", - "⠉", - "⠊", - "⠋", - "⠌", - "⠍", - "⠎", - "⠏", - "⡈", - "⡉", - "⡊", - "⡋", - "⡌", - "⡍", - "⡎", - "⡏", - "⠐", - "⠑", - "⠒", - "⠓", - "⠔", - "⠕", - "⠖", - "⠗", - "⡐", - "⡑", - "⡒", - "⡓", - "⡔", - "⡕", - "⡖", - "⡗", - "⠘", - "⠙", - "⠚", - "⠛", - "⠜", - "⠝", - "⠞", - "⠟", - "⡘", - "⡙", - "⡚", - "⡛", - "⡜", - "⡝", - "⡞", - "⡟", - "⠠", - "⠡", - "⠢", - "⠣", - "⠤", - "⠥", - "⠦", - "⠧", - "⡠", - "⡡", - "⡢", - "⡣", - "⡤", - "⡥", - "⡦", - "⡧", - "⠨", - "⠩", - "⠪", - "⠫", - "⠬", - "⠭", - "⠮", - "⠯", - "⡨", - "⡩", - "⡪", - "⡫", - "⡬", - "⡭", - "⡮", - "⡯", - "⠰", - "⠱", - "⠲", - "⠳", - "⠴", - "⠵", - "⠶", - "⠷", - "⡰", - "⡱", - "⡲", - "⡳", - "⡴", - "⡵", - "⡶", - "⡷", - "⠸", - "⠹", - "⠺", - "⠻", - "⠼", - "⠽", - "⠾", - "⠿", - "⡸", - "⡹", - "⡺", - "⡻", - "⡼", - "⡽", - "⡾", - "⡿", - "⢀", - "⢁", - "⢂", - "⢃", - "⢄", - "⢅", - "⢆", - "⢇", - "⣀", - "⣁", - "⣂", - "⣃", - "⣄", - "⣅", - "⣆", - "⣇", - "⢈", - "⢉", - "⢊", - "⢋", - "⢌", - "⢍", - "⢎", - "⢏", - "⣈", - "⣉", - "⣊", - "⣋", - "⣌", - "⣍", - "⣎", - "⣏", - "⢐", - "⢑", - "⢒", - "⢓", - "⢔", - "⢕", - "⢖", - "⢗", - "⣐", - "⣑", - "⣒", - "⣓", - "⣔", - "⣕", - "⣖", - "⣗", - "⢘", - "⢙", - "⢚", - "⢛", - "⢜", - "⢝", - "⢞", - "⢟", - "⣘", - "⣙", - "⣚", - "⣛", - "⣜", - "⣝", - "⣞", - "⣟", - "⢠", - "⢡", - "⢢", - "⢣", - "⢤", - "⢥", - "⢦", - "⢧", - "⣠", - "⣡", - "⣢", - "⣣", - "⣤", - "⣥", - "⣦", - "⣧", - "⢨", - "⢩", - "⢪", - "⢫", - "⢬", - "⢭", - "⢮", - "⢯", - "⣨", - "⣩", - "⣪", - "⣫", - "⣬", - "⣭", - "⣮", - "⣯", - "⢰", - "⢱", - "⢲", - "⢳", - "⢴", - "⢵", - "⢶", - "⢷", - "⣰", - "⣱", - "⣲", - "⣳", - "⣴", - "⣵", - "⣶", - "⣷", - "⢸", - "⢹", - "⢺", - "⢻", - "⢼", - "⢽", - "⢾", - "⢿", - "⣸", - "⣹", - "⣺", - "⣻", - "⣼", - "⣽", - "⣾", - "⣿" - ] -}; -var sand = { - interval: 80, - frames: [ - "⠁", - "⠂", - "⠄", - "⡀", - "⡈", - "⡐", - "⡠", - "⣀", - "⣁", - "⣂", - "⣄", - "⣌", - "⣔", - "⣤", - "⣥", - "⣦", - "⣮", - "⣶", - "⣷", - "⣿", - "⡿", - "⠿", - "⢟", - "⠟", - "⡛", - "⠛", - "⠫", - "⢋", - "⠋", - "⠍", - "⡉", - "⠉", - "⠑", - "⠡", - "⢁" - ] -}; -var line = { - interval: 130, - frames: [ - "-", - "\\", - "|", - "/" - ] -}; -var line2 = { - interval: 100, - frames: [ - "⠂", - "-", - "–", - "—", - "–", - "-" - ] -}; -var pipe = { - interval: 100, - frames: [ - "┤", - "┘", - "┴", - "└", - "├", - "┌", - "┬", - "┐" - ] -}; -var simpleDots = { - interval: 400, - frames: [ - ". ", - ".. ", - "...", - " " - ] -}; -var simpleDotsScrolling = { - interval: 200, - frames: [ - ". ", - ".. ", - "...", - " ..", - " .", - " " - ] -}; -var star = { - interval: 70, - frames: [ - "✶", - "✸", - "✹", - "✺", - "✹", - "✷" - ] -}; -var star2 = { - interval: 80, - frames: [ - "+", - "x", - "*" - ] -}; -var flip = { - interval: 70, - frames: [ - "_", - "_", - "_", - "-", - "`", - "`", - "'", - "´", - "-", - "_", - "_", - "_" - ] -}; -var hamburger = { - interval: 100, - frames: [ - "☱", - "☲", - "☴" - ] -}; -var growVertical = { - interval: 120, - frames: [ - "▁", - "▃", - "▄", - "▅", - "▆", - "▇", - "▆", - "▅", - "▄", - "▃" - ] -}; -var growHorizontal = { - interval: 120, - frames: [ - "▏", - "▎", - "▍", - "▌", - "▋", - "▊", - "▉", - "▊", - "▋", - "▌", - "▍", - "▎" - ] -}; -var balloon = { - interval: 140, - frames: [ - " ", - ".", - "o", - "O", - "@", - "*", - " " - ] -}; -var balloon2 = { - interval: 120, - frames: [ - ".", - "o", - "O", - "°", - "O", - "o", - "." - ] -}; -var noise = { - interval: 100, - frames: [ - "▓", - "▒", - "░" - ] -}; -var bounce = { - interval: 120, - frames: [ - "⠁", - "⠂", - "⠄", - "⠂" - ] -}; -var boxBounce = { - interval: 120, - frames: [ - "▖", - "▘", - "▝", - "▗" - ] -}; -var boxBounce2 = { - interval: 100, - frames: [ - "▌", - "▀", - "▐", - "▄" - ] -}; -var triangle = { - interval: 50, - frames: [ - "◢", - "◣", - "◤", - "◥" - ] -}; -var binary$1 = { - interval: 80, - frames: [ - "010010", - "001100", - "100101", - "111010", - "111101", - "010111", - "101011", - "111000", - "110011", - "110101" - ] -}; -var arc = { - interval: 100, - frames: [ - "◜", - "◠", - "◝", - "◞", - "◡", - "◟" - ] -}; -var circle = { - interval: 120, - frames: [ - "◡", - "⊙", - "◠" - ] -}; -var squareCorners = { - interval: 180, - frames: [ - "◰", - "◳", - "◲", - "◱" - ] -}; -var circleQuarters = { - interval: 120, - frames: [ - "◴", - "◷", - "◶", - "◵" - ] -}; -var circleHalves = { - interval: 50, - frames: [ - "◐", - "◓", - "◑", - "◒" - ] -}; -var squish = { - interval: 100, - frames: [ - "╫", - "╪" - ] -}; -var toggle = { - interval: 250, - frames: [ - "⊶", - "⊷" - ] -}; -var toggle2 = { - interval: 80, - frames: [ - "▫", - "▪" - ] -}; -var toggle3 = { - interval: 120, - frames: [ - "□", - "■" - ] -}; -var toggle4 = { - interval: 100, - frames: [ - "■", - "□", - "▪", - "▫" - ] -}; -var toggle5 = { - interval: 100, - frames: [ - "▮", - "▯" - ] -}; -var toggle6 = { - interval: 300, - frames: [ - "ဝ", - "၀" - ] -}; -var toggle7 = { - interval: 80, - frames: [ - "⦾", - "⦿" - ] -}; -var toggle8 = { - interval: 100, - frames: [ - "◍", - "◌" - ] -}; -var toggle9 = { - interval: 100, - frames: [ - "◉", - "◎" - ] -}; -var toggle10 = { - interval: 100, - frames: [ - "㊂", - "㊀", - "㊁" - ] -}; -var toggle11 = { - interval: 50, - frames: [ - "⧇", - "⧆" - ] -}; -var toggle12 = { - interval: 120, - frames: [ - "☗", - "☖" - ] -}; -var toggle13 = { - interval: 80, - frames: [ - "=", - "*", - "-" - ] -}; -var arrow = { - interval: 100, - frames: [ - "←", - "↖", - "↑", - "↗", - "→", - "↘", - "↓", - "↙" - ] -}; -var arrow2 = { - interval: 80, - frames: [ - "⬆️ ", - "↗️ ", - "➡️ ", - "↘️ ", - "⬇️ ", - "↙️ ", - "⬅️ ", - "↖️ " - ] -}; -var arrow3 = { - interval: 120, - frames: [ - "▹▹▹▹▹", - "▸▹▹▹▹", - "▹▸▹▹▹", - "▹▹▸▹▹", - "▹▹▹▸▹", - "▹▹▹▹▸" - ] -}; -var bouncingBar = { - interval: 80, - frames: [ - "[ ]", - "[= ]", - "[== ]", - "[=== ]", - "[====]", - "[ ===]", - "[ ==]", - "[ =]", - "[ ]", - "[ =]", - "[ ==]", - "[ ===]", - "[====]", - "[=== ]", - "[== ]", - "[= ]" - ] -}; -var bouncingBall = { - interval: 80, - frames: [ - "( ● )", - "( ● )", - "( ● )", - "( ● )", - "( ●)", - "( ● )", - "( ● )", - "( ● )", - "( ● )", - "(● )" - ] -}; -var smiley = { - interval: 200, - frames: [ - "😄 ", - "😝 " - ] -}; -var monkey = { - interval: 300, - frames: [ - "🙈 ", - "🙈 ", - "🙉 ", - "🙊 " - ] -}; -var hearts = { - interval: 100, - frames: [ - "💛 ", - "💙 ", - "💜 ", - "💚 ", - "❤️ " - ] -}; -var clock = { - interval: 100, - frames: [ - "🕛 ", - "🕐 ", - "🕑 ", - "🕒 ", - "🕓 ", - "🕔 ", - "🕕 ", - "🕖 ", - "🕗 ", - "🕘 ", - "🕙 ", - "🕚 " - ] -}; -var earth = { - interval: 180, - frames: [ - "🌍 ", - "🌎 ", - "🌏 " - ] -}; -var material = { - interval: 17, - frames: [ - "█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "████▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "███████▁▁▁▁▁▁▁▁▁▁▁▁▁", - "████████▁▁▁▁▁▁▁▁▁▁▁▁", - "█████████▁▁▁▁▁▁▁▁▁▁▁", - "█████████▁▁▁▁▁▁▁▁▁▁▁", - "██████████▁▁▁▁▁▁▁▁▁▁", - "███████████▁▁▁▁▁▁▁▁▁", - "█████████████▁▁▁▁▁▁▁", - "██████████████▁▁▁▁▁▁", - "██████████████▁▁▁▁▁▁", - "▁██████████████▁▁▁▁▁", - "▁██████████████▁▁▁▁▁", - "▁██████████████▁▁▁▁▁", - "▁▁██████████████▁▁▁▁", - "▁▁▁██████████████▁▁▁", - "▁▁▁▁█████████████▁▁▁", - "▁▁▁▁██████████████▁▁", - "▁▁▁▁██████████████▁▁", - "▁▁▁▁▁██████████████▁", - "▁▁▁▁▁██████████████▁", - "▁▁▁▁▁██████████████▁", - "▁▁▁▁▁▁██████████████", - "▁▁▁▁▁▁██████████████", - "▁▁▁▁▁▁▁█████████████", - "▁▁▁▁▁▁▁█████████████", - "▁▁▁▁▁▁▁▁████████████", - "▁▁▁▁▁▁▁▁████████████", - "▁▁▁▁▁▁▁▁▁███████████", - "▁▁▁▁▁▁▁▁▁███████████", - "▁▁▁▁▁▁▁▁▁▁██████████", - "▁▁▁▁▁▁▁▁▁▁██████████", - "▁▁▁▁▁▁▁▁▁▁▁▁████████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁███████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁██████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████", - "█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", - "██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", - "██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", - "███▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", - "████▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", - "█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", - "█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", - "██████▁▁▁▁▁▁▁▁▁▁▁▁▁█", - "████████▁▁▁▁▁▁▁▁▁▁▁▁", - "█████████▁▁▁▁▁▁▁▁▁▁▁", - "█████████▁▁▁▁▁▁▁▁▁▁▁", - "█████████▁▁▁▁▁▁▁▁▁▁▁", - "█████████▁▁▁▁▁▁▁▁▁▁▁", - "███████████▁▁▁▁▁▁▁▁▁", - "████████████▁▁▁▁▁▁▁▁", - "████████████▁▁▁▁▁▁▁▁", - "██████████████▁▁▁▁▁▁", - "██████████████▁▁▁▁▁▁", - "▁██████████████▁▁▁▁▁", - "▁██████████████▁▁▁▁▁", - "▁▁▁█████████████▁▁▁▁", - "▁▁▁▁▁████████████▁▁▁", - "▁▁▁▁▁████████████▁▁▁", - "▁▁▁▁▁▁███████████▁▁▁", - "▁▁▁▁▁▁▁▁█████████▁▁▁", - "▁▁▁▁▁▁▁▁█████████▁▁▁", - "▁▁▁▁▁▁▁▁▁█████████▁▁", - "▁▁▁▁▁▁▁▁▁█████████▁▁", - "▁▁▁▁▁▁▁▁▁▁█████████▁", - "▁▁▁▁▁▁▁▁▁▁▁████████▁", - "▁▁▁▁▁▁▁▁▁▁▁████████▁", - "▁▁▁▁▁▁▁▁▁▁▁▁███████▁", - "▁▁▁▁▁▁▁▁▁▁▁▁███████▁", - "▁▁▁▁▁▁▁▁▁▁▁▁▁███████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁███████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁" - ] -}; -var moon = { - interval: 80, - frames: [ - "🌑 ", - "🌒 ", - "🌓 ", - "🌔 ", - "🌕 ", - "🌖 ", - "🌗 ", - "🌘 " - ] -}; -var runner = { - interval: 140, - frames: [ - "🚶 ", - "🏃 " - ] -}; -var pong = { - interval: 80, - frames: [ - "▐⠂ ▌", - "▐⠈ ▌", - "▐ ⠂ ▌", - "▐ ⠠ ▌", - "▐ ⡀ ▌", - "▐ ⠠ ▌", - "▐ ⠂ ▌", - "▐ ⠈ ▌", - "▐ ⠂ ▌", - "▐ ⠠ ▌", - "▐ ⡀ ▌", - "▐ ⠠ ▌", - "▐ ⠂ ▌", - "▐ ⠈ ▌", - "▐ ⠂▌", - "▐ ⠠▌", - "▐ ⡀▌", - "▐ ⠠ ▌", - "▐ ⠂ ▌", - "▐ ⠈ ▌", - "▐ ⠂ ▌", - "▐ ⠠ ▌", - "▐ ⡀ ▌", - "▐ ⠠ ▌", - "▐ ⠂ ▌", - "▐ ⠈ ▌", - "▐ ⠂ ▌", - "▐ ⠠ ▌", - "▐ ⡀ ▌", - "▐⠠ ▌" - ] -}; -var shark = { - interval: 120, - frames: [ - "▐|\\____________▌", - "▐_|\\___________▌", - "▐__|\\__________▌", - "▐___|\\_________▌", - "▐____|\\________▌", - "▐_____|\\_______▌", - "▐______|\\______▌", - "▐_______|\\_____▌", - "▐________|\\____▌", - "▐_________|\\___▌", - "▐__________|\\__▌", - "▐___________|\\_▌", - "▐____________|\\▌", - "▐____________/|▌", - "▐___________/|_▌", - "▐__________/|__▌", - "▐_________/|___▌", - "▐________/|____▌", - "▐_______/|_____▌", - "▐______/|______▌", - "▐_____/|_______▌", - "▐____/|________▌", - "▐___/|_________▌", - "▐__/|__________▌", - "▐_/|___________▌", - "▐/|____________▌" - ] -}; -var dqpb = { - interval: 100, - frames: [ - "d", - "q", - "p", - "b" - ] -}; -var weather = { - interval: 100, - frames: [ - "☀️ ", - "☀️ ", - "☀️ ", - "🌤 ", - "⛅️ ", - "🌥 ", - "☁️ ", - "🌧 ", - "🌨 ", - "🌧 ", - "🌨 ", - "🌧 ", - "🌨 ", - "⛈ ", - "🌨 ", - "🌧 ", - "🌨 ", - "☁️ ", - "🌥 ", - "⛅️ ", - "🌤 ", - "☀️ ", - "☀️ " - ] -}; -var christmas = { - interval: 400, - frames: [ - "🌲", - "🎄" - ] -}; -var grenade = { - interval: 80, - frames: [ - "، ", - "′ ", - " ´ ", - " ‾ ", - " ⸌", - " ⸊", - " |", - " ⁎", - " ⁕", - " ෴ ", - " ⁓", - " ", - " ", - " " - ] -}; -var point = { - interval: 125, - frames: [ - "∙∙∙", - "●∙∙", - "∙●∙", - "∙∙●", - "∙∙∙" - ] -}; -var layer = { - interval: 150, - frames: [ - "-", - "=", - "≡" - ] -}; -var betaWave = { - interval: 80, - frames: [ - "ρββββββ", - "βρβββββ", - "ββρββββ", - "βββρβββ", - "ββββρββ", - "βββββρβ", - "ββββββρ" - ] -}; -var fingerDance = { - interval: 160, - frames: [ - "🤘 ", - "🤟 ", - "🖖 ", - "✋ ", - "🤚 ", - "👆 " - ] -}; -var fistBump = { - interval: 80, - frames: [ - "🤜    🤛 ", - "🤜    🤛 ", - "🤜    🤛 ", - " 🤜  🤛  ", - "  🤜🤛   ", - " 🤜✨🤛   ", - "🤜 ✨ 🤛  " - ] -}; -var soccerHeader = { - interval: 80, - frames: [ - " 🧑⚽️ 🧑 ", - "🧑 ⚽️ 🧑 ", - "🧑 ⚽️ 🧑 ", - "🧑 ⚽️ 🧑 ", - "🧑 ⚽️ 🧑 ", - "🧑 ⚽️ 🧑 ", - "🧑 ⚽️🧑 ", - "🧑 ⚽️ 🧑 ", - "🧑 ⚽️ 🧑 ", - "🧑 ⚽️ 🧑 ", - "🧑 ⚽️ 🧑 ", - "🧑 ⚽️ 🧑 " - ] -}; -var mindblown = { - interval: 160, - frames: [ - "😐 ", - "😐 ", - "😮 ", - "😮 ", - "😦 ", - "😦 ", - "😧 ", - "😧 ", - "🤯 ", - "💥 ", - "✨ ", - "  ", - "  ", - "  " - ] -}; -var speaker = { - interval: 160, - frames: [ - "🔈 ", - "🔉 ", - "🔊 ", - "🔉 " - ] -}; -var orangePulse = { - interval: 100, - frames: [ - "🔸 ", - "🔶 ", - "🟠 ", - "🟠 ", - "🔶 " - ] -}; -var bluePulse = { - interval: 100, - frames: [ - "🔹 ", - "🔷 ", - "🔵 ", - "🔵 ", - "🔷 " - ] -}; -var orangeBluePulse = { - interval: 100, - frames: [ - "🔸 ", - "🔶 ", - "🟠 ", - "🟠 ", - "🔶 ", - "🔹 ", - "🔷 ", - "🔵 ", - "🔵 ", - "🔷 " - ] -}; -var timeTravel = { - interval: 100, - frames: [ - "🕛 ", - "🕚 ", - "🕙 ", - "🕘 ", - "🕗 ", - "🕖 ", - "🕕 ", - "🕔 ", - "🕓 ", - "🕒 ", - "🕑 ", - "🕐 " - ] -}; -var aesthetic = { - interval: 80, - frames: [ - "▰▱▱▱▱▱▱", - "▰▰▱▱▱▱▱", - "▰▰▰▱▱▱▱", - "▰▰▰▰▱▱▱", - "▰▰▰▰▰▱▱", - "▰▰▰▰▰▰▱", - "▰▰▰▰▰▰▰", - "▰▱▱▱▱▱▱" - ] -}; -var dwarfFortress = { - interval: 80, - frames: [ - " ██████£££ ", - "☺██████£££ ", - "☺██████£££ ", - "☺▓█████£££ ", - "☺▓█████£££ ", - "☺▒█████£££ ", - "☺▒█████£££ ", - "☺░█████£££ ", - "☺░█████£££ ", - "☺ █████£££ ", - " ☺█████£££ ", - " ☺█████£££ ", - " ☺▓████£££ ", - " ☺▓████£££ ", - " ☺▒████£££ ", - " ☺▒████£££ ", - " ☺░████£££ ", - " ☺░████£££ ", - " ☺ ████£££ ", - " ☺████£££ ", - " ☺████£££ ", - " ☺▓███£££ ", - " ☺▓███£££ ", - " ☺▒███£££ ", - " ☺▒███£££ ", - " ☺░███£££ ", - " ☺░███£££ ", - " ☺ ███£££ ", - " ☺███£££ ", - " ☺███£££ ", - " ☺▓██£££ ", - " ☺▓██£££ ", - " ☺▒██£££ ", - " ☺▒██£££ ", - " ☺░██£££ ", - " ☺░██£££ ", - " ☺ ██£££ ", - " ☺██£££ ", - " ☺██£££ ", - " ☺▓█£££ ", - " ☺▓█£££ ", - " ☺▒█£££ ", - " ☺▒█£££ ", - " ☺░█£££ ", - " ☺░█£££ ", - " ☺ █£££ ", - " ☺█£££ ", - " ☺█£££ ", - " ☺▓£££ ", - " ☺▓£££ ", - " ☺▒£££ ", - " ☺▒£££ ", - " ☺░£££ ", - " ☺░£££ ", - " ☺ £££ ", - " ☺£££ ", - " ☺£££ ", - " ☺▓££ ", - " ☺▓££ ", - " ☺▒££ ", - " ☺▒££ ", - " ☺░££ ", - " ☺░££ ", - " ☺ ££ ", - " ☺££ ", - " ☺££ ", - " ☺▓£ ", - " ☺▓£ ", - " ☺▒£ ", - " ☺▒£ ", - " ☺░£ ", - " ☺░£ ", - " ☺ £ ", - " ☺£ ", - " ☺£ ", - " ☺▓ ", - " ☺▓ ", - " ☺▒ ", - " ☺▒ ", - " ☺░ ", - " ☺░ ", - " ☺ ", - " ☺ &", - " ☺ ☼&", - " ☺ ☼ &", - " ☺☼ &", - " ☺☼ & ", - " ‼ & ", - " ☺ & ", - " ‼ & ", - " ☺ & ", - " ‼ & ", - " ☺ & ", - "‼ & ", - " & ", - " & ", - " & ░ ", - " & ▒ ", - " & ▓ ", - " & £ ", - " & ░£ ", - " & ▒£ ", - " & ▓£ ", - " & ££ ", - " & ░££ ", - " & ▒££ ", - "& ▓££ ", - "& £££ ", - " ░£££ ", - " ▒£££ ", - " ▓£££ ", - " █£££ ", - " ░█£££ ", - " ▒█£££ ", - " ▓█£££ ", - " ██£££ ", - " ░██£££ ", - " ▒██£££ ", - " ▓██£££ ", - " ███£££ ", - " ░███£££ ", - " ▒███£££ ", - " ▓███£££ ", - " ████£££ ", - " ░████£££ ", - " ▒████£££ ", - " ▓████£££ ", - " █████£££ ", - " ░█████£££ ", - " ▒█████£££ ", - " ▓█████£££ ", - " ██████£££ ", - " ██████£££ " - ] -}; -var require$$0$1 = { - dots: dots, - dots2: dots2, - dots3: dots3, - dots4: dots4, - dots5: dots5, - dots6: dots6, - dots7: dots7, - dots8: dots8, - dots9: dots9, - dots10: dots10, - dots11: dots11, - dots12: dots12, - dots13: dots13, - dots8Bit: dots8Bit, - sand: sand, - line: line, - line2: line2, - pipe: pipe, - simpleDots: simpleDots, - simpleDotsScrolling: simpleDotsScrolling, - star: star, - star2: star2, - flip: flip, - hamburger: hamburger, - growVertical: growVertical, - growHorizontal: growHorizontal, - balloon: balloon, - balloon2: balloon2, - noise: noise, - bounce: bounce, - boxBounce: boxBounce, - boxBounce2: boxBounce2, - triangle: triangle, - binary: binary$1, - arc: arc, - circle: circle, - squareCorners: squareCorners, - circleQuarters: circleQuarters, - circleHalves: circleHalves, - squish: squish, - toggle: toggle, - toggle2: toggle2, - toggle3: toggle3, - toggle4: toggle4, - toggle5: toggle5, - toggle6: toggle6, - toggle7: toggle7, - toggle8: toggle8, - toggle9: toggle9, - toggle10: toggle10, - toggle11: toggle11, - toggle12: toggle12, - toggle13: toggle13, - arrow: arrow, - arrow2: arrow2, - arrow3: arrow3, - bouncingBar: bouncingBar, - bouncingBall: bouncingBall, - smiley: smiley, - monkey: monkey, - hearts: hearts, - clock: clock, - earth: earth, - material: material, - moon: moon, - runner: runner, - pong: pong, - shark: shark, - dqpb: dqpb, - weather: weather, - christmas: christmas, - grenade: grenade, - point: point, - layer: layer, - betaWave: betaWave, - fingerDance: fingerDance, - fistBump: fistBump, - soccerHeader: soccerHeader, - mindblown: mindblown, - speaker: speaker, - orangePulse: orangePulse, - bluePulse: bluePulse, - orangeBluePulse: orangeBluePulse, - timeTravel: timeTravel, - aesthetic: aesthetic, - dwarfFortress: dwarfFortress -}; - -const spinners = Object.assign({}, require$$0$1); // eslint-disable-line import/extensions - -const spinnersList = Object.keys(spinners); - -Object.defineProperty(spinners, 'random', { - get() { - const randomIndex = Math.floor(Math.random() * spinnersList.length); - const spinnerName = spinnersList[randomIndex]; - return spinners[spinnerName]; - } -}); - -var cliSpinners$1 = spinners; - -var isUnicodeSupported$2 = () => { - if (process.platform !== 'win32') { - return true; - } - - return Boolean(process.env.CI) || - Boolean(process.env.WT_SESSION) || // Windows Terminal - process.env.TERM_PROGRAM === 'vscode' || - process.env.TERM === 'xterm-256color' || - process.env.TERM === 'alacritty'; -}; - -const chalk$1 = source; -const isUnicodeSupported$1 = isUnicodeSupported$2; - -const main$1 = { - info: chalk$1.blue('ℹ'), - success: chalk$1.green('✔'), - warning: chalk$1.yellow('⚠'), - error: chalk$1.red('✖') -}; - -const fallback = { - info: chalk$1.blue('i'), - success: chalk$1.green('√'), - warning: chalk$1.yellow('‼'), - error: chalk$1.red('×') -}; - -var logSymbols$1 = isUnicodeSupported$1() ? main$1 : fallback; - -var wcwidth$2 = {exports: {}}; - -var clone$1 = {exports: {}}; - -(function (module) { - var clone = (function() { - - /** - * Clones (copies) an Object using deep copying. - * - * This function supports circular references by default, but if you are certain - * there are no circular references in your object, you can save some CPU time - * by calling clone(obj, false). - * - * Caution: if `circular` is false and `parent` contains circular references, - * your program may enter an infinite loop and crash. - * - * @param `parent` - the object to be cloned - * @param `circular` - set to true if the object to be cloned may contain - * circular references. (optional - true by default) - * @param `depth` - set to a number if the object is only to be cloned to - * a particular depth. (optional - defaults to Infinity) - * @param `prototype` - sets the prototype to be used when cloning an object. - * (optional - defaults to parent prototype). - */ - function clone(parent, circular, depth, prototype) { - if (typeof circular === 'object') { - depth = circular.depth; - prototype = circular.prototype; - circular.filter; - circular = circular.circular; - } - // maintain two arrays for circular references, where corresponding parents - // and children have the same index - var allParents = []; - var allChildren = []; - - var useBuffer = typeof Buffer != 'undefined'; - - if (typeof circular == 'undefined') - circular = true; - - if (typeof depth == 'undefined') - depth = Infinity; - - // recurse this function so we don't reset allParents and allChildren - function _clone(parent, depth) { - // cloning null always returns null - if (parent === null) - return null; - - if (depth == 0) - return parent; - - var child; - var proto; - if (typeof parent != 'object') { - return parent; - } - - if (clone.__isArray(parent)) { - child = []; - } else if (clone.__isRegExp(parent)) { - child = new RegExp(parent.source, __getRegExpFlags(parent)); - if (parent.lastIndex) child.lastIndex = parent.lastIndex; - } else if (clone.__isDate(parent)) { - child = new Date(parent.getTime()); - } else if (useBuffer && Buffer.isBuffer(parent)) { - if (Buffer.allocUnsafe) { - // Node.js >= 4.5.0 - child = Buffer.allocUnsafe(parent.length); - } else { - // Older Node.js versions - child = new Buffer(parent.length); - } - parent.copy(child); - return child; - } else { - if (typeof prototype == 'undefined') { - proto = Object.getPrototypeOf(parent); - child = Object.create(proto); - } - else { - child = Object.create(prototype); - proto = prototype; - } - } - - if (circular) { - var index = allParents.indexOf(parent); - - if (index != -1) { - return allChildren[index]; - } - allParents.push(parent); - allChildren.push(child); - } - - for (var i in parent) { - var attrs; - if (proto) { - attrs = Object.getOwnPropertyDescriptor(proto, i); - } - - if (attrs && attrs.set == null) { - continue; - } - child[i] = _clone(parent[i], depth - 1); - } - - return child; - } - - return _clone(parent, depth); - } - - /** - * Simple flat clone using prototype, accepts only objects, usefull for property - * override on FLAT configuration object (no nested props). - * - * USE WITH CAUTION! This may not behave as you wish if you do not know how this - * works. - */ - clone.clonePrototype = function clonePrototype(parent) { - if (parent === null) - return null; - - var c = function () {}; - c.prototype = parent; - return new c(); - }; - - // private utility functions - - function __objToStr(o) { - return Object.prototype.toString.call(o); - } clone.__objToStr = __objToStr; - - function __isDate(o) { - return typeof o === 'object' && __objToStr(o) === '[object Date]'; - } clone.__isDate = __isDate; - - function __isArray(o) { - return typeof o === 'object' && __objToStr(o) === '[object Array]'; - } clone.__isArray = __isArray; - - function __isRegExp(o) { - return typeof o === 'object' && __objToStr(o) === '[object RegExp]'; - } clone.__isRegExp = __isRegExp; - - function __getRegExpFlags(re) { - var flags = ''; - if (re.global) flags += 'g'; - if (re.ignoreCase) flags += 'i'; - if (re.multiline) flags += 'm'; - return flags; - } clone.__getRegExpFlags = __getRegExpFlags; - - return clone; - })(); - - if (module.exports) { - module.exports = clone; - } -} (clone$1)); - -var cloneExports = clone$1.exports; - -var clone = cloneExports; - -var defaults$1 = function(options, defaults) { - options = options || {}; - - Object.keys(defaults).forEach(function(key) { - if (typeof options[key] === 'undefined') { - options[key] = clone(defaults[key]); - } - }); - - return options; -}; - -var combining$1 = [ - [ 0x0300, 0x036F ], [ 0x0483, 0x0486 ], [ 0x0488, 0x0489 ], - [ 0x0591, 0x05BD ], [ 0x05BF, 0x05BF ], [ 0x05C1, 0x05C2 ], - [ 0x05C4, 0x05C5 ], [ 0x05C7, 0x05C7 ], [ 0x0600, 0x0603 ], - [ 0x0610, 0x0615 ], [ 0x064B, 0x065E ], [ 0x0670, 0x0670 ], - [ 0x06D6, 0x06E4 ], [ 0x06E7, 0x06E8 ], [ 0x06EA, 0x06ED ], - [ 0x070F, 0x070F ], [ 0x0711, 0x0711 ], [ 0x0730, 0x074A ], - [ 0x07A6, 0x07B0 ], [ 0x07EB, 0x07F3 ], [ 0x0901, 0x0902 ], - [ 0x093C, 0x093C ], [ 0x0941, 0x0948 ], [ 0x094D, 0x094D ], - [ 0x0951, 0x0954 ], [ 0x0962, 0x0963 ], [ 0x0981, 0x0981 ], - [ 0x09BC, 0x09BC ], [ 0x09C1, 0x09C4 ], [ 0x09CD, 0x09CD ], - [ 0x09E2, 0x09E3 ], [ 0x0A01, 0x0A02 ], [ 0x0A3C, 0x0A3C ], - [ 0x0A41, 0x0A42 ], [ 0x0A47, 0x0A48 ], [ 0x0A4B, 0x0A4D ], - [ 0x0A70, 0x0A71 ], [ 0x0A81, 0x0A82 ], [ 0x0ABC, 0x0ABC ], - [ 0x0AC1, 0x0AC5 ], [ 0x0AC7, 0x0AC8 ], [ 0x0ACD, 0x0ACD ], - [ 0x0AE2, 0x0AE3 ], [ 0x0B01, 0x0B01 ], [ 0x0B3C, 0x0B3C ], - [ 0x0B3F, 0x0B3F ], [ 0x0B41, 0x0B43 ], [ 0x0B4D, 0x0B4D ], - [ 0x0B56, 0x0B56 ], [ 0x0B82, 0x0B82 ], [ 0x0BC0, 0x0BC0 ], - [ 0x0BCD, 0x0BCD ], [ 0x0C3E, 0x0C40 ], [ 0x0C46, 0x0C48 ], - [ 0x0C4A, 0x0C4D ], [ 0x0C55, 0x0C56 ], [ 0x0CBC, 0x0CBC ], - [ 0x0CBF, 0x0CBF ], [ 0x0CC6, 0x0CC6 ], [ 0x0CCC, 0x0CCD ], - [ 0x0CE2, 0x0CE3 ], [ 0x0D41, 0x0D43 ], [ 0x0D4D, 0x0D4D ], - [ 0x0DCA, 0x0DCA ], [ 0x0DD2, 0x0DD4 ], [ 0x0DD6, 0x0DD6 ], - [ 0x0E31, 0x0E31 ], [ 0x0E34, 0x0E3A ], [ 0x0E47, 0x0E4E ], - [ 0x0EB1, 0x0EB1 ], [ 0x0EB4, 0x0EB9 ], [ 0x0EBB, 0x0EBC ], - [ 0x0EC8, 0x0ECD ], [ 0x0F18, 0x0F19 ], [ 0x0F35, 0x0F35 ], - [ 0x0F37, 0x0F37 ], [ 0x0F39, 0x0F39 ], [ 0x0F71, 0x0F7E ], - [ 0x0F80, 0x0F84 ], [ 0x0F86, 0x0F87 ], [ 0x0F90, 0x0F97 ], - [ 0x0F99, 0x0FBC ], [ 0x0FC6, 0x0FC6 ], [ 0x102D, 0x1030 ], - [ 0x1032, 0x1032 ], [ 0x1036, 0x1037 ], [ 0x1039, 0x1039 ], - [ 0x1058, 0x1059 ], [ 0x1160, 0x11FF ], [ 0x135F, 0x135F ], - [ 0x1712, 0x1714 ], [ 0x1732, 0x1734 ], [ 0x1752, 0x1753 ], - [ 0x1772, 0x1773 ], [ 0x17B4, 0x17B5 ], [ 0x17B7, 0x17BD ], - [ 0x17C6, 0x17C6 ], [ 0x17C9, 0x17D3 ], [ 0x17DD, 0x17DD ], - [ 0x180B, 0x180D ], [ 0x18A9, 0x18A9 ], [ 0x1920, 0x1922 ], - [ 0x1927, 0x1928 ], [ 0x1932, 0x1932 ], [ 0x1939, 0x193B ], - [ 0x1A17, 0x1A18 ], [ 0x1B00, 0x1B03 ], [ 0x1B34, 0x1B34 ], - [ 0x1B36, 0x1B3A ], [ 0x1B3C, 0x1B3C ], [ 0x1B42, 0x1B42 ], - [ 0x1B6B, 0x1B73 ], [ 0x1DC0, 0x1DCA ], [ 0x1DFE, 0x1DFF ], - [ 0x200B, 0x200F ], [ 0x202A, 0x202E ], [ 0x2060, 0x2063 ], - [ 0x206A, 0x206F ], [ 0x20D0, 0x20EF ], [ 0x302A, 0x302F ], - [ 0x3099, 0x309A ], [ 0xA806, 0xA806 ], [ 0xA80B, 0xA80B ], - [ 0xA825, 0xA826 ], [ 0xFB1E, 0xFB1E ], [ 0xFE00, 0xFE0F ], - [ 0xFE20, 0xFE23 ], [ 0xFEFF, 0xFEFF ], [ 0xFFF9, 0xFFFB ], - [ 0x10A01, 0x10A03 ], [ 0x10A05, 0x10A06 ], [ 0x10A0C, 0x10A0F ], - [ 0x10A38, 0x10A3A ], [ 0x10A3F, 0x10A3F ], [ 0x1D167, 0x1D169 ], - [ 0x1D173, 0x1D182 ], [ 0x1D185, 0x1D18B ], [ 0x1D1AA, 0x1D1AD ], - [ 0x1D242, 0x1D244 ], [ 0xE0001, 0xE0001 ], [ 0xE0020, 0xE007F ], - [ 0xE0100, 0xE01EF ] -]; - -var defaults = defaults$1; -var combining = combining$1; - -var DEFAULTS$1 = { - nul: 0, - control: 0 -}; - -wcwidth$2.exports = function wcwidth(str) { - return wcswidth(str, DEFAULTS$1) -}; - -wcwidth$2.exports.config = function(opts) { - opts = defaults(opts || {}, DEFAULTS$1); - return function wcwidth(str) { - return wcswidth(str, opts) - } -}; - -/* - * The following functions define the column width of an ISO 10646 - * character as follows: - * - The null character (U+0000) has a column width of 0. - * - Other C0/C1 control characters and DEL will lead to a return value - * of -1. - * - Non-spacing and enclosing combining characters (general category - * code Mn or Me in the - * Unicode database) have a column width of 0. - * - SOFT HYPHEN (U+00AD) has a column width of 1. - * - Other format characters (general category code Cf in the Unicode - * database) and ZERO WIDTH - * SPACE (U+200B) have a column width of 0. - * - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF) - * have a column width of 0. - * - Spacing characters in the East Asian Wide (W) or East Asian - * Full-width (F) category as - * defined in Unicode Technical Report #11 have a column width of 2. - * - All remaining characters (including all printable ISO 8859-1 and - * WGL4 characters, Unicode control characters, etc.) have a column - * width of 1. - * This implementation assumes that characters are encoded in ISO 10646. -*/ - -function wcswidth(str, opts) { - if (typeof str !== 'string') return wcwidth$1(str, opts) - - var s = 0; - for (var i = 0; i < str.length; i++) { - var n = wcwidth$1(str.charCodeAt(i), opts); - if (n < 0) return -1 - s += n; - } - - return s -} - -function wcwidth$1(ucs, opts) { - // test for 8-bit control characters - if (ucs === 0) return opts.nul - if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0)) return opts.control - - // binary search in table of non-spacing characters - if (bisearch(ucs)) return 0 - - // if we arrive here, ucs is not a combining or C0/C1 control character - return 1 + - (ucs >= 0x1100 && - (ucs <= 0x115f || // Hangul Jamo init. consonants - ucs == 0x2329 || ucs == 0x232a || - (ucs >= 0x2e80 && ucs <= 0xa4cf && - ucs != 0x303f) || // CJK ... Yi - (ucs >= 0xac00 && ucs <= 0xd7a3) || // Hangul Syllables - (ucs >= 0xf900 && ucs <= 0xfaff) || // CJK Compatibility Ideographs - (ucs >= 0xfe10 && ucs <= 0xfe19) || // Vertical forms - (ucs >= 0xfe30 && ucs <= 0xfe6f) || // CJK Compatibility Forms - (ucs >= 0xff00 && ucs <= 0xff60) || // Fullwidth Forms - (ucs >= 0xffe0 && ucs <= 0xffe6) || - (ucs >= 0x20000 && ucs <= 0x2fffd) || - (ucs >= 0x30000 && ucs <= 0x3fffd))); -} - -function bisearch(ucs) { - var min = 0; - var max = combining.length - 1; - var mid; - - if (ucs < combining[0][0] || ucs > combining[max][1]) return false - - while (max >= min) { - mid = Math.floor((min + max) / 2); - if (ucs > combining[mid][1]) min = mid + 1; - else if (ucs < combining[mid][0]) max = mid - 1; - else return true - } - - return false -} - -var wcwidthExports = wcwidth$2.exports; - -var isInteractive$1 = ({stream = process.stdout} = {}) => { - return Boolean( - stream && stream.isTTY && - process.env.TERM !== 'dumb' && - !('CI' in process.env) - ); -}; - -var bl = {exports: {}}; - -var inherits$1 = {exports: {}}; - -var inherits_browser = {exports: {}}; - -var hasRequiredInherits_browser; - -function requireInherits_browser () { - if (hasRequiredInherits_browser) return inherits_browser.exports; - hasRequiredInherits_browser = 1; - if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - inherits_browser.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor; - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - } - }; - } else { - // old school shim for old browsers - inherits_browser.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - }; - } - return inherits_browser.exports; -} - -try { - var util = require('util'); - /* istanbul ignore next */ - if (typeof util.inherits !== 'function') throw ''; - inherits$1.exports = util.inherits; -} catch (e) { - /* istanbul ignore next */ - inherits$1.exports = requireInherits_browser(); -} - -var inheritsExports = inherits$1.exports; - -const { Buffer: Buffer$2 } = require$$0$4; -const symbol = Symbol.for('BufferList'); - -function BufferList$1 (buf) { - if (!(this instanceof BufferList$1)) { - return new BufferList$1(buf) - } - - BufferList$1._init.call(this, buf); -} - -BufferList$1._init = function _init (buf) { - Object.defineProperty(this, symbol, { value: true }); - - this._bufs = []; - this.length = 0; - - if (buf) { - this.append(buf); - } -}; - -BufferList$1.prototype._new = function _new (buf) { - return new BufferList$1(buf) -}; - -BufferList$1.prototype._offset = function _offset (offset) { - if (offset === 0) { - return [0, 0] - } - - let tot = 0; - - for (let i = 0; i < this._bufs.length; i++) { - const _t = tot + this._bufs[i].length; - if (offset < _t || i === this._bufs.length - 1) { - return [i, offset - tot] - } - tot = _t; - } -}; - -BufferList$1.prototype._reverseOffset = function (blOffset) { - const bufferId = blOffset[0]; - let offset = blOffset[1]; - - for (let i = 0; i < bufferId; i++) { - offset += this._bufs[i].length; - } - - return offset -}; - -BufferList$1.prototype.get = function get (index) { - if (index > this.length || index < 0) { - return undefined - } - - const offset = this._offset(index); - - return this._bufs[offset[0]][offset[1]] -}; - -BufferList$1.prototype.slice = function slice (start, end) { - if (typeof start === 'number' && start < 0) { - start += this.length; - } - - if (typeof end === 'number' && end < 0) { - end += this.length; - } - - return this.copy(null, 0, start, end) -}; - -BufferList$1.prototype.copy = function copy (dst, dstStart, srcStart, srcEnd) { - if (typeof srcStart !== 'number' || srcStart < 0) { - srcStart = 0; - } - - if (typeof srcEnd !== 'number' || srcEnd > this.length) { - srcEnd = this.length; - } - - if (srcStart >= this.length) { - return dst || Buffer$2.alloc(0) - } - - if (srcEnd <= 0) { - return dst || Buffer$2.alloc(0) - } - - const copy = !!dst; - const off = this._offset(srcStart); - const len = srcEnd - srcStart; - let bytes = len; - let bufoff = (copy && dstStart) || 0; - let start = off[1]; - - // copy/slice everything - if (srcStart === 0 && srcEnd === this.length) { - if (!copy) { - // slice, but full concat if multiple buffers - return this._bufs.length === 1 - ? this._bufs[0] - : Buffer$2.concat(this._bufs, this.length) - } - - // copy, need to copy individual buffers - for (let i = 0; i < this._bufs.length; i++) { - this._bufs[i].copy(dst, bufoff); - bufoff += this._bufs[i].length; - } - - return dst - } - - // easy, cheap case where it's a subset of one of the buffers - if (bytes <= this._bufs[off[0]].length - start) { - return copy - ? this._bufs[off[0]].copy(dst, dstStart, start, start + bytes) - : this._bufs[off[0]].slice(start, start + bytes) - } - - if (!copy) { - // a slice, we need something to copy in to - dst = Buffer$2.allocUnsafe(len); - } - - for (let i = off[0]; i < this._bufs.length; i++) { - const l = this._bufs[i].length - start; - - if (bytes > l) { - this._bufs[i].copy(dst, bufoff, start); - bufoff += l; - } else { - this._bufs[i].copy(dst, bufoff, start, start + bytes); - bufoff += l; - break - } - - bytes -= l; - - if (start) { - start = 0; - } - } - - // safeguard so that we don't return uninitialized memory - if (dst.length > bufoff) return dst.slice(0, bufoff) - - return dst -}; - -BufferList$1.prototype.shallowSlice = function shallowSlice (start, end) { - start = start || 0; - end = typeof end !== 'number' ? this.length : end; - - if (start < 0) { - start += this.length; - } - - if (end < 0) { - end += this.length; - } - - if (start === end) { - return this._new() - } - - const startOffset = this._offset(start); - const endOffset = this._offset(end); - const buffers = this._bufs.slice(startOffset[0], endOffset[0] + 1); - - if (endOffset[1] === 0) { - buffers.pop(); - } else { - buffers[buffers.length - 1] = buffers[buffers.length - 1].slice(0, endOffset[1]); - } - - if (startOffset[1] !== 0) { - buffers[0] = buffers[0].slice(startOffset[1]); - } - - return this._new(buffers) -}; - -BufferList$1.prototype.toString = function toString (encoding, start, end) { - return this.slice(start, end).toString(encoding) -}; - -BufferList$1.prototype.consume = function consume (bytes) { - // first, normalize the argument, in accordance with how Buffer does it - bytes = Math.trunc(bytes); - // do nothing if not a positive number - if (Number.isNaN(bytes) || bytes <= 0) return this - - while (this._bufs.length) { - if (bytes >= this._bufs[0].length) { - bytes -= this._bufs[0].length; - this.length -= this._bufs[0].length; - this._bufs.shift(); - } else { - this._bufs[0] = this._bufs[0].slice(bytes); - this.length -= bytes; - break - } - } - - return this -}; - -BufferList$1.prototype.duplicate = function duplicate () { - const copy = this._new(); - - for (let i = 0; i < this._bufs.length; i++) { - copy.append(this._bufs[i]); - } - - return copy -}; - -BufferList$1.prototype.append = function append (buf) { - if (buf == null) { - return this - } - - if (buf.buffer) { - // append a view of the underlying ArrayBuffer - this._appendBuffer(Buffer$2.from(buf.buffer, buf.byteOffset, buf.byteLength)); - } else if (Array.isArray(buf)) { - for (let i = 0; i < buf.length; i++) { - this.append(buf[i]); - } - } else if (this._isBufferList(buf)) { - // unwrap argument into individual BufferLists - for (let i = 0; i < buf._bufs.length; i++) { - this.append(buf._bufs[i]); - } - } else { - // coerce number arguments to strings, since Buffer(number) does - // uninitialized memory allocation - if (typeof buf === 'number') { - buf = buf.toString(); - } - - this._appendBuffer(Buffer$2.from(buf)); - } - - return this -}; - -BufferList$1.prototype._appendBuffer = function appendBuffer (buf) { - this._bufs.push(buf); - this.length += buf.length; -}; - -BufferList$1.prototype.indexOf = function (search, offset, encoding) { - if (encoding === undefined && typeof offset === 'string') { - encoding = offset; - offset = undefined; - } - - if (typeof search === 'function' || Array.isArray(search)) { - throw new TypeError('The "value" argument must be one of type string, Buffer, BufferList, or Uint8Array.') - } else if (typeof search === 'number') { - search = Buffer$2.from([search]); - } else if (typeof search === 'string') { - search = Buffer$2.from(search, encoding); - } else if (this._isBufferList(search)) { - search = search.slice(); - } else if (Array.isArray(search.buffer)) { - search = Buffer$2.from(search.buffer, search.byteOffset, search.byteLength); - } else if (!Buffer$2.isBuffer(search)) { - search = Buffer$2.from(search); - } - - offset = Number(offset || 0); - - if (isNaN(offset)) { - offset = 0; - } - - if (offset < 0) { - offset = this.length + offset; - } - - if (offset < 0) { - offset = 0; - } - - if (search.length === 0) { - return offset > this.length ? this.length : offset - } - - const blOffset = this._offset(offset); - let blIndex = blOffset[0]; // index of which internal buffer we're working on - let buffOffset = blOffset[1]; // offset of the internal buffer we're working on - - // scan over each buffer - for (; blIndex < this._bufs.length; blIndex++) { - const buff = this._bufs[blIndex]; - - while (buffOffset < buff.length) { - const availableWindow = buff.length - buffOffset; - - if (availableWindow >= search.length) { - const nativeSearchResult = buff.indexOf(search, buffOffset); - - if (nativeSearchResult !== -1) { - return this._reverseOffset([blIndex, nativeSearchResult]) - } - - buffOffset = buff.length - search.length + 1; // end of native search window - } else { - const revOffset = this._reverseOffset([blIndex, buffOffset]); - - if (this._match(revOffset, search)) { - return revOffset - } - - buffOffset++; - } - } - - buffOffset = 0; - } - - return -1 -}; - -BufferList$1.prototype._match = function (offset, search) { - if (this.length - offset < search.length) { - return false - } - - for (let searchOffset = 0; searchOffset < search.length; searchOffset++) { - if (this.get(offset + searchOffset) !== search[searchOffset]) { - return false - } - } - return true -} - -;(function () { - const methods = { - readDoubleBE: 8, - readDoubleLE: 8, - readFloatBE: 4, - readFloatLE: 4, - readInt32BE: 4, - readInt32LE: 4, - readUInt32BE: 4, - readUInt32LE: 4, - readInt16BE: 2, - readInt16LE: 2, - readUInt16BE: 2, - readUInt16LE: 2, - readInt8: 1, - readUInt8: 1, - readIntBE: null, - readIntLE: null, - readUIntBE: null, - readUIntLE: null - }; - - for (const m in methods) { - (function (m) { - if (methods[m] === null) { - BufferList$1.prototype[m] = function (offset, byteLength) { - return this.slice(offset, offset + byteLength)[m](0, byteLength) - }; - } else { - BufferList$1.prototype[m] = function (offset = 0) { - return this.slice(offset, offset + methods[m])[m](0) - }; - } - }(m)); - } -}()); - -// Used internally by the class and also as an indicator of this object being -// a `BufferList`. It's not possible to use `instanceof BufferList` in a browser -// environment because there could be multiple different copies of the -// BufferList class and some `BufferList`s might be `BufferList`s. -BufferList$1.prototype._isBufferList = function _isBufferList (b) { - return b instanceof BufferList$1 || BufferList$1.isBufferList(b) -}; - -BufferList$1.isBufferList = function isBufferList (b) { - return b != null && b[symbol] -}; - -var BufferList_1 = BufferList$1; - -const DuplexStream = require$$1$2.Duplex; -const inherits = inheritsExports; -const BufferList = BufferList_1; - -function BufferListStream$1 (callback) { - if (!(this instanceof BufferListStream$1)) { - return new BufferListStream$1(callback) - } - - if (typeof callback === 'function') { - this._callback = callback; - - const piper = function piper (err) { - if (this._callback) { - this._callback(err); - this._callback = null; - } - }.bind(this); - - this.on('pipe', function onPipe (src) { - src.on('error', piper); - }); - this.on('unpipe', function onUnpipe (src) { - src.removeListener('error', piper); - }); - - callback = null; - } - - BufferList._init.call(this, callback); - DuplexStream.call(this); -} - -inherits(BufferListStream$1, DuplexStream); -Object.assign(BufferListStream$1.prototype, BufferList.prototype); - -BufferListStream$1.prototype._new = function _new (callback) { - return new BufferListStream$1(callback) -}; - -BufferListStream$1.prototype._write = function _write (buf, encoding, callback) { - this._appendBuffer(buf); - - if (typeof callback === 'function') { - callback(); - } -}; - -BufferListStream$1.prototype._read = function _read (size) { - if (!this.length) { - return this.push(null) - } - - size = Math.min(size, this.length); - this.push(this.slice(0, size)); - this.consume(size); -}; - -BufferListStream$1.prototype.end = function end (chunk) { - DuplexStream.prototype.end.call(this, chunk); - - if (this._callback) { - this._callback(null, this.slice()); - this._callback = null; - } -}; - -BufferListStream$1.prototype._destroy = function _destroy (err, cb) { - this._bufs.length = 0; - this.length = 0; - cb(err); -}; - -BufferListStream$1.prototype._isBufferList = function _isBufferList (b) { - return b instanceof BufferListStream$1 || b instanceof BufferList || BufferListStream$1.isBufferList(b) -}; - -BufferListStream$1.isBufferList = BufferList.isBufferList; - -bl.exports = BufferListStream$1; -bl.exports.BufferListStream = BufferListStream$1; -bl.exports.BufferList = BufferList; - -var blExports = bl.exports; - -const readline = require$$0$5; -const chalk = source; -const cliCursor = cliCursor$1; -const cliSpinners = cliSpinners$1; -const logSymbols = logSymbols$1; -const stripAnsi = stripAnsi$3; -const wcwidth = wcwidthExports; -const isInteractive = isInteractive$1; -const isUnicodeSupported = isUnicodeSupported$2; -const {BufferListStream} = blExports; - -const TEXT = Symbol('text'); -const PREFIX_TEXT = Symbol('prefixText'); -const ASCII_ETX_CODE = 0x03; // Ctrl+C emits this code - -class StdinDiscarder { - constructor() { - this.requests = 0; - - this.mutedStream = new BufferListStream(); - this.mutedStream.pipe(process.stdout); - - const self = this; // eslint-disable-line unicorn/no-this-assignment - this.ourEmit = function (event, data, ...args) { - const {stdin} = process; - if (self.requests > 0 || stdin.emit === self.ourEmit) { - if (event === 'keypress') { // Fixes readline behavior - return; - } - - if (event === 'data' && data.includes(ASCII_ETX_CODE)) { - process.emit('SIGINT'); - } - - Reflect.apply(self.oldEmit, this, [event, data, ...args]); - } else { - Reflect.apply(process.stdin.emit, this, [event, data, ...args]); - } - }; - } - - start() { - this.requests++; - - if (this.requests === 1) { - this.realStart(); - } - } - - stop() { - if (this.requests <= 0) { - throw new Error('`stop` called more times than `start`'); - } - - this.requests--; - - if (this.requests === 0) { - this.realStop(); - } - } - - realStart() { - // No known way to make it work reliably on Windows - if (process.platform === 'win32') { - return; - } - - this.rl = readline.createInterface({ - input: process.stdin, - output: this.mutedStream - }); - - this.rl.on('SIGINT', () => { - if (process.listenerCount('SIGINT') === 0) { - process.emit('SIGINT'); - } else { - this.rl.close(); - process.kill(process.pid, 'SIGINT'); - } - }); - } - - realStop() { - if (process.platform === 'win32') { - return; - } - - this.rl.close(); - this.rl = undefined; - } -} - -let stdinDiscarder; - -class Ora { - constructor(options) { - if (!stdinDiscarder) { - stdinDiscarder = new StdinDiscarder(); - } - - if (typeof options === 'string') { - options = { - text: options - }; - } - - this.options = { - text: '', - color: 'cyan', - stream: process.stderr, - discardStdin: true, - ...options - }; - - this.spinner = this.options.spinner; - - this.color = this.options.color; - this.hideCursor = this.options.hideCursor !== false; - this.interval = this.options.interval || this.spinner.interval || 100; - this.stream = this.options.stream; - this.id = undefined; - this.isEnabled = typeof this.options.isEnabled === 'boolean' ? this.options.isEnabled : isInteractive({stream: this.stream}); - this.isSilent = typeof this.options.isSilent === 'boolean' ? this.options.isSilent : false; - - // Set *after* `this.stream` - this.text = this.options.text; - this.prefixText = this.options.prefixText; - this.linesToClear = 0; - this.indent = this.options.indent; - this.discardStdin = this.options.discardStdin; - this.isDiscardingStdin = false; - } - - get indent() { - return this._indent; - } - - set indent(indent = 0) { - if (!(indent >= 0 && Number.isInteger(indent))) { - throw new Error('The `indent` option must be an integer from 0 and up'); - } - - this._indent = indent; - } - - _updateInterval(interval) { - if (interval !== undefined) { - this.interval = interval; - } - } - - get spinner() { - return this._spinner; - } - - set spinner(spinner) { - this.frameIndex = 0; - - if (typeof spinner === 'object') { - if (spinner.frames === undefined) { - throw new Error('The given spinner must have a `frames` property'); - } - - this._spinner = spinner; - } else if (!isUnicodeSupported()) { - this._spinner = cliSpinners.line; - } else if (spinner === undefined) { - // Set default spinner - this._spinner = cliSpinners.dots; - } else if (spinner !== 'default' && cliSpinners[spinner]) { - this._spinner = cliSpinners[spinner]; - } else { - throw new Error(`There is no built-in spinner named '${spinner}'. See https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json for a full list.`); - } - - this._updateInterval(this._spinner.interval); - } - - get text() { - return this[TEXT]; - } - - set text(value) { - this[TEXT] = value; - this.updateLineCount(); - } - - get prefixText() { - return this[PREFIX_TEXT]; - } - - set prefixText(value) { - this[PREFIX_TEXT] = value; - this.updateLineCount(); - } - - get isSpinning() { - return this.id !== undefined; - } - - getFullPrefixText(prefixText = this[PREFIX_TEXT], postfix = ' ') { - if (typeof prefixText === 'string') { - return prefixText + postfix; - } - - if (typeof prefixText === 'function') { - return prefixText() + postfix; - } - - return ''; - } - - updateLineCount() { - const columns = this.stream.columns || 80; - const fullPrefixText = this.getFullPrefixText(this.prefixText, '-'); - this.lineCount = 0; - for (const line of stripAnsi(fullPrefixText + '--' + this[TEXT]).split('\n')) { - this.lineCount += Math.max(1, Math.ceil(wcwidth(line) / columns)); - } - } - - get isEnabled() { - return this._isEnabled && !this.isSilent; - } - - set isEnabled(value) { - if (typeof value !== 'boolean') { - throw new TypeError('The `isEnabled` option must be a boolean'); - } - - this._isEnabled = value; - } - - get isSilent() { - return this._isSilent; - } - - set isSilent(value) { - if (typeof value !== 'boolean') { - throw new TypeError('The `isSilent` option must be a boolean'); - } - - this._isSilent = value; - } - - frame() { - const {frames} = this.spinner; - let frame = frames[this.frameIndex]; - - if (this.color) { - frame = chalk[this.color](frame); - } - - this.frameIndex = ++this.frameIndex % frames.length; - const fullPrefixText = (typeof this.prefixText === 'string' && this.prefixText !== '') ? this.prefixText + ' ' : ''; - const fullText = typeof this.text === 'string' ? ' ' + this.text : ''; - - return fullPrefixText + frame + fullText; - } - - clear() { - if (!this.isEnabled || !this.stream.isTTY) { - return this; - } - - for (let i = 0; i < this.linesToClear; i++) { - if (i > 0) { - this.stream.moveCursor(0, -1); - } - - this.stream.clearLine(); - this.stream.cursorTo(this.indent); - } - - this.linesToClear = 0; - - return this; - } - - render() { - if (this.isSilent) { - return this; - } - - this.clear(); - this.stream.write(this.frame()); - this.linesToClear = this.lineCount; - - return this; - } - - start(text) { - if (text) { - this.text = text; - } - - if (this.isSilent) { - return this; - } - - if (!this.isEnabled) { - if (this.text) { - this.stream.write(`- ${this.text}\n`); - } - - return this; - } - - if (this.isSpinning) { - return this; - } - - if (this.hideCursor) { - cliCursor.hide(this.stream); - } - - if (this.discardStdin && process.stdin.isTTY) { - this.isDiscardingStdin = true; - stdinDiscarder.start(); - } - - this.render(); - this.id = setInterval(this.render.bind(this), this.interval); - - return this; - } - - stop() { - if (!this.isEnabled) { - return this; - } - - clearInterval(this.id); - this.id = undefined; - this.frameIndex = 0; - this.clear(); - if (this.hideCursor) { - cliCursor.show(this.stream); - } - - if (this.discardStdin && process.stdin.isTTY && this.isDiscardingStdin) { - stdinDiscarder.stop(); - this.isDiscardingStdin = false; - } - - return this; - } - - succeed(text) { - return this.stopAndPersist({symbol: logSymbols.success, text}); - } - - fail(text) { - return this.stopAndPersist({symbol: logSymbols.error, text}); - } - - warn(text) { - return this.stopAndPersist({symbol: logSymbols.warning, text}); - } - - info(text) { - return this.stopAndPersist({symbol: logSymbols.info, text}); - } - - stopAndPersist(options = {}) { - if (this.isSilent) { - return this; - } - - const prefixText = options.prefixText || this.prefixText; - const text = options.text || this.text; - const fullText = (typeof text === 'string') ? ' ' + text : ''; - - this.stop(); - this.stream.write(`${this.getFullPrefixText(prefixText, ' ')}${options.symbol || ' '}${fullText}\n`); - - return this; - } -} - -const oraFactory = function (options) { - return new Ora(options); -}; - -ora$1.exports = oraFactory; - -ora$1.exports.promise = (action, options) => { - // eslint-disable-next-line promise/prefer-await-to-then - if (typeof action.then !== 'function') { - throw new TypeError('Parameter `action` must be a Promise'); - } - - const spinner = new Ora(options); - spinner.start(); - - (async () => { - try { - await action; - spinner.succeed(); - } catch { - spinner.fail(); - } - })(); - - return spinner; -}; - -var oraExports = ora$1.exports; -var ora = /*@__PURE__*/getDefaultExportFromCjs(oraExports); - -/** - * Move cursor left by `x` - * @param {Readline} rl - Readline instance - * @param {Number} x - How far to go left (default to 1) - */ - -const left = function (rl, x) { - rl.output.write(ansiEscapes.cursorBackward(x)); -}; - -/** - * Move cursor right by `x` - * @param {Readline} rl - Readline instance - * @param {Number} x - How far to go left (default to 1) - */ - -const right = function (rl, x) { - rl.output.write(ansiEscapes.cursorForward(x)); -}; - -/** - * Move cursor up by `x` - * @param {Readline} rl - Readline instance - * @param {Number} x - How far to go up (default to 1) - */ - -const up = function (rl, x) { - rl.output.write(ansiEscapes.cursorUp(x)); -}; - -/** - * Move cursor down by `x` - * @param {Readline} rl - Readline instance - * @param {Number} x - How far to go down (default to 1) - */ - -const down = function (rl, x) { - rl.output.write(ansiEscapes.cursorDown(x)); -}; - -/** - * Clear current line - * @param {Readline} rl - Readline instance - * @param {Number} len - number of line to delete - */ -const clearLine = function (rl, len) { - rl.output.write(ansiEscapes.eraseLines(len)); -}; - -function height(content) { - return content.split('\n').length; -} - -/** @param {string} content */ -function lastLine(content) { - return content.split('\n').pop(); -} - -class ScreenManager { - constructor(rl) { - // These variables are keeping information to allow correct prompt re-rendering - this.height = 0; - this.extraLinesUnderPrompt = 0; - - this.rl = rl; - } - - renderWithSpinner(content, bottomContent) { - if (this.spinnerId) { - clearInterval(this.spinnerId); - } - - let spinner; - let contentFunc; - let bottomContentFunc; - - if (bottomContent) { - spinner = ora(bottomContent); - contentFunc = () => content; - bottomContentFunc = () => spinner.frame(); - } else { - spinner = ora(content); - contentFunc = () => spinner.frame(); - bottomContentFunc = () => ''; - } - - this.spinnerId = setInterval( - () => this.render(contentFunc(), bottomContentFunc(), true), - spinner.interval, - ); - } - - render(content, bottomContent, spinning = false) { - if (this.spinnerId && !spinning) { - clearInterval(this.spinnerId); - } - - this.rl.output.unmute(); - this.clean(this.extraLinesUnderPrompt); - - /** - * Write message to screen and setPrompt to control backspace - */ - - const promptLine = lastLine(content); - const rawPromptLine = stripAnsi$4(promptLine); - - // Remove the rl.line from our prompt. We can't rely on the content of - // rl.line (mainly because of the password prompt), so just rely on it's - // length. - let prompt = rawPromptLine; - if (this.rl.line.length > 0) { - prompt = prompt.slice(0, -this.rl.line.length); - } - - this.rl.setPrompt(prompt); - - // SetPrompt will change cursor position, now we can get correct value - const cursorPos = this.rl._getCursorPos(); - const width = this.normalizedCliWidth(); - - content = this.forceLineReturn(content, width); - bottomContent &&= this.forceLineReturn(bottomContent, width); - - // Manually insert an extra line if we're at the end of the line. - // This prevent the cursor from appearing at the beginning of the - // current line. - if (rawPromptLine.length % width === 0) { - content += '\n'; - } - - const fullContent = content + (bottomContent ? '\n' + bottomContent : ''); - this.rl.output.write(fullContent); - - /** - * Re-adjust the cursor at the correct position. - */ - - // We need to consider parts of the prompt under the cursor as part of the bottom - // content in order to correctly cleanup and re-render. - const promptLineUpDiff = Math.floor(rawPromptLine.length / width) - cursorPos.rows; - const bottomContentHeight = - promptLineUpDiff + (bottomContent ? height(bottomContent) : 0); - if (bottomContentHeight > 0) { - up(this.rl, bottomContentHeight); - } - - // Reset cursor at the beginning of the line - left(this.rl, stringWidth$2(lastLine(fullContent))); - - // Adjust cursor on the right - if (cursorPos.cols > 0) { - right(this.rl, cursorPos.cols); - } - - /** - * Set up state for next re-rendering - */ - this.extraLinesUnderPrompt = bottomContentHeight; - this.height = height(fullContent); - - this.rl.output.mute(); - } - - clean(extraLines) { - if (extraLines > 0) { - down(this.rl, extraLines); - } - - clearLine(this.rl, this.height); - } - - done() { - this.rl.setPrompt(''); - this.rl.output.unmute(); - this.rl.output.write(`\n${ansiEscapes.cursorShow}`); - } - - releaseCursor() { - if (this.extraLinesUnderPrompt > 0) { - down(this.rl, this.extraLinesUnderPrompt); - } - } - - normalizedCliWidth() { - const width = cliWidth$1({ - defaultWidth: 80, - output: this.rl.output, - }); - return width; - } - - /** - * @param {string[]} lines - */ - breakLines(lines, width = this.normalizedCliWidth()) { - // Break lines who're longer than the cli width so we can normalize the natural line - // returns behavior across terminals. - // re: trim: false; by default, `wrap-ansi` trims whitespace, which - // is not what we want. - // re: hard: true; by default', `wrap-ansi` does soft wrapping - return lines.map((line) => - wrapAnsi$1(line, width, { trim: false, hard: true }).split('\n'), - ); - } - - /** - * @param {string} content - */ - forceLineReturn(content, width = this.normalizedCliWidth()) { - return this.breakLines(content.split('\n'), width).flat().join('\n'); - } -} - -/** - * Base prompt implementation - * Should be extended by prompt types. - */ - -class Prompt { - constructor(question, rl, answers) { - // Setup instance defaults property - Object.assign(this, { - answers, - status: 'pending', - }); - - // Set defaults prompt options - this.opt = { - validate: () => true, - validatingText: '', - filter: (val) => val, - filteringText: '', - when: () => true, - suffix: '', - prefix: colors$1.green('?'), - transformer: (val) => val, - ...question, - }; - - // Make sure name is present - if (!this.opt.name) { - this.throwParamError('name'); - } - - // Set default message if no message defined - this.opt.message ||= this.opt.name + ':'; - - // Normalize choices - if (Array.isArray(this.opt.choices)) { - this.opt.choices = new Choices(this.opt.choices, answers); - } - - this.rl = rl; - this.screen = new ScreenManager(this.rl); - } - - /** - * Start the Inquiry session and manage output value filtering - * @return {Promise} - */ - - run() { - return new Promise((resolve, reject) => { - this._run( - (value) => resolve(value), - (error) => reject(error), - ); - }); - } - - // Default noop (this one should be overwritten in prompts) - _run(cb) { - cb(); - } - - /** - * Throw an error telling a required parameter is missing - * @param {String} name Name of the missing param - * @return {Throw Error} - */ - - throwParamError(name) { - throw new Error('You must provide a `' + name + '` parameter'); - } - - /** - * Called when the UI closes. Override to do any specific cleanup necessary - */ - close() { - this.screen.releaseCursor(); - } - - /** - * Run the provided validation method each time a submit event occur. - * @param {Rx.Observable} submit - submit event flow - * @return {Object} Object containing two observables: `success` and `error` - */ - handleSubmitEvents(submit) { - const validate = runAsync$1(this.opt.validate); - const asyncFilter = runAsync$1(this.opt.filter); - const validation = submit.pipe( - cjs.mergeMap((value) => { - this.startSpinner(value, this.opt.filteringText); - return asyncFilter(value, this.answers).then( - (filteredValue) => { - this.startSpinner(filteredValue, this.opt.validatingText); - return validate(filteredValue, this.answers).then( - (isValid) => ({ isValid, value: filteredValue }), - (error_) => ({ isValid: error_, value: filteredValue }), - ); - }, - (error_) => ({ isValid: error_ }), - ); - }), - cjs.share(), - ); - - const success = validation.pipe( - cjs.filter((state) => state.isValid === true), - cjs.take(1), - ); - const error = validation.pipe( - cjs.filter((state) => state.isValid !== true), - cjs.takeUntil(success), - ); - - return { - success, - error, - }; - } - - startSpinner(value, bottomContent) { - value = this.getSpinningValue(value); - // If the question will spin, cut off the prefix (for layout purposes) - const content = bottomContent - ? this.getQuestion() + value - : this.getQuestion().slice(this.opt.prefix.length + 1) + value; - - this.screen.renderWithSpinner(content, bottomContent); - } - - /** - * Allow override, e.g. for password prompts - * See: https://github.com/SBoudrias/Inquirer.js/issues/1022 - * - * @return {String} value to display while spinning - */ - getSpinningValue(value) { - return value; - } - - /** - * Generate the prompt question string - * @return {String} prompt question string - */ - getQuestion() { - let message = - (this.opt.prefix ? this.opt.prefix + ' ' : '') + - colors$1.bold(this.opt.message) + - this.opt.suffix + - colors$1.reset(' '); - - // Append the default if available, and if question isn't touched/answered - if ( - this.opt.default != null && - this.status !== 'touched' && - this.status !== 'answered' - ) { - // If default password is supplied, hide it - message += - this.opt.type === 'password' - ? colors$1.italic(colors$1.dim('[hidden] ')) - : colors$1.dim('(' + this.opt.default + ') '); - } - - return message; - } -} - -/** - * `list` type prompt - */ - - -class ListPrompt extends Prompt { - constructor(questions, rl, answers) { - super(questions, rl, answers); - - if (!this.opt.choices) { - this.throwParamError('choices'); - } - - this.firstRender = true; - this.selected = 0; - - const def = this.opt.default; - - // If def is a Number, then use as index. Otherwise, check for value. - if (typeof def === 'number' && def >= 0 && def < this.opt.choices.realLength) { - this.selected = def; - } else if (typeof def !== 'number' && def != null) { - const index = this.opt.choices.realChoices.findIndex(({ value }) => value === def); - this.selected = Math.max(index, 0); - } - - // Make sure no default is set (so it won't be printed) - this.opt.default = null; - - const shouldLoop = this.opt.loop === undefined ? true : this.opt.loop; - this.paginator = new Paginator(this.screen, { isInfinite: shouldLoop }); - } - - /** - * Start the Inquiry session - * @param {Function} cb Callback when prompt is done - * @return {this} - */ - - _run(cb) { - this.done = cb; - - const events = observe(this.rl); - events.normalizedUpKey.pipe(cjs.takeUntil(events.line)).forEach(this.onUpKey.bind(this)); - events.normalizedDownKey - .pipe(cjs.takeUntil(events.line)) - .forEach(this.onDownKey.bind(this)); - events.numberKey.pipe(cjs.takeUntil(events.line)).forEach(this.onNumberKey.bind(this)); - events.line - .pipe( - cjs.take(1), - cjs.map(this.getCurrentValue.bind(this)), - cjs.flatMap((value) => - runAsync$1(this.opt.filter)(value, this.answers).catch((error) => error), - ), - ) - .forEach(this.onSubmit.bind(this)); - - // Init the prompt - this.render(); - - return this; - } - - /** - * Render the prompt to screen - * @return {ListPrompt} self - */ - - render() { - // Render question - let message = this.getQuestion(); - - if (this.firstRender) { - message += colors$1.dim('(Use arrow keys)'); - } - - // Render choices or answer depending on the state - if (this.status === 'answered') { - message += colors$1.cyan(this.opt.choices.getChoice(this.selected).short); - } else { - const choicesStr = listRender(this.opt.choices, this.selected); - const indexPosition = this.opt.choices.indexOf( - this.opt.choices.getChoice(this.selected), - ); - const realIndexPosition = - this.opt.choices.reduce((acc, value, i) => { - // Dont count lines past the choice we are looking at - if (i > indexPosition) { - return acc; - } - // Add line if it's a separator - if (value.type === 'separator') { - return acc + 1; - } - - let l = value.name; - // Non-strings take up one line - if (typeof l !== 'string') { - return acc + 1; - } - - // Calculate lines taken up by string - l = l.split('\n'); - return acc + l.length; - }, 0) - 1; - message += - '\n' + this.paginator.paginate(choicesStr, realIndexPosition, this.opt.pageSize); - } - - message += ansiEscapes.cursorHide; - this.firstRender = false; - - this.screen.render(message); - } - - /** - * When user press `enter` key - */ - - onSubmit(value) { - this.status = 'answered'; - - // Rerender prompt - this.render(); - - this.screen.done(); - this.done(value); - } - - getCurrentValue() { - return this.opt.choices.getChoice(this.selected).value; - } - - /** - * When user press a key - */ - onUpKey() { - this.selected = incrementListIndex(this.selected, 'up', this.opt); - this.render(); - } - - onDownKey() { - this.selected = incrementListIndex(this.selected, 'down', this.opt); - this.render(); - } - - onNumberKey(input) { - if (input <= this.opt.choices.realLength) { - this.selected = input - 1; - } - - this.render(); - } -} - -/** - * Function for rendering list choices - * @param {Number} pointer Position of the pointer - * @return {String} Rendered content - */ -function listRender(choices, pointer) { - let output = ''; - let separatorOffset = 0; - - choices.forEach((choice, i) => { - if (choice.type === 'separator') { - separatorOffset++; - output += ' ' + choice + '\n'; - return; - } - - if (choice.disabled) { - separatorOffset++; - output += ' - ' + choice.name; - output += ` (${ - typeof choice.disabled === 'string' ? choice.disabled : 'Disabled' - })`; - output += '\n'; - return; - } - - const isSelected = i - separatorOffset === pointer; - let line = (isSelected ? figures.pointer + ' ' : ' ') + choice.name; - if (isSelected) { - line = colors$1.cyan(line); - } - - output += line + ' \n'; - }); - - return output.replaceAll(/\n$/g, ''); -} - -/** - * `input` type prompt - */ - - -class InputPrompt extends Prompt { - /** - * Start the Inquiry session - * @param {Function} cb Callback when prompt is done - * @return {this} - */ - - _run(cb) { - this.done = cb; - - // Once user confirm (enter key) - const events = observe(this.rl); - const submit = events.line.pipe(cjs.map(this.filterInput.bind(this))); - - const validation = this.handleSubmitEvents(submit); - validation.success.forEach(this.onEnd.bind(this)); - validation.error.forEach(this.onError.bind(this)); - - events.keypress - .pipe(cjs.takeUntil(validation.success)) - .forEach(this.onKeypress.bind(this)); - - // Init - this.render(); - - return this; - } - - /** - * Render the prompt to screen - * @return {InputPrompt} self - */ - - render(error) { - let bottomContent = ''; - let appendContent = ''; - let message = this.getQuestion(); - const { transformer } = this.opt; - const isFinal = this.status === 'answered'; - - appendContent = isFinal ? this.answer : this.rl.line; - - if (transformer) { - message += transformer(appendContent, this.answers, { isFinal }); - } else { - message += isFinal ? colors$1.cyan(appendContent) : appendContent; - } - - if (error) { - bottomContent = colors$1.red('>> ') + error; - } - - this.screen.render(message, bottomContent); - } - - /** - * When user press `enter` key - */ - - filterInput(input) { - if (!input) { - return this.opt.default == null ? '' : this.opt.default; - } - - return input; - } - - onEnd(state) { - this.answer = state.value; - this.status = 'answered'; - - // Re-render prompt - this.render(); - - this.screen.done(); - this.done(state.value); - } - - onError({ value = '', isValid }) { - this.rl.line += value; - this.rl.cursor += value.length; - this.render(isValid); - } - - /** - * When user press a key - */ - - onKeypress() { - this.status = 'touched'; - - this.render(); - } -} - -/** - * `input` type prompt - */ - - -/** - * Extention of the Input prompt specifically for use with number inputs. - */ - -class NumberPrompt extends InputPrompt { - filterInput(input) { - if (input && typeof input === 'string') { - input = input.trim(); - // Match a number in the input - const numberMatch = input.match(/(^-?\d+|^-?\d+\.\d*|^\d*\.\d+)(e\d+)?$/); - // If a number is found, return that input. - if (numberMatch) { - return Number(numberMatch[0]); - } - } - - // If the input was invalid return the default value. - return this.opt.default == null ? Number.NaN : this.opt.default; - } -} - -/** - * `confirm` type prompt - */ - - -class ConfirmPrompt extends Prompt { - constructor(questions, rl, answers) { - super(questions, rl, answers); - - let rawDefault = true; - - Object.assign(this.opt, { - filter(input) { - if (input != null && input !== '') { - if (/^y(es)?/i.test(input)) return true; - if (/^n(o)?/i.test(input)) return false; - } - return rawDefault; - }, - }); - - if (this.opt.default != null) { - rawDefault = Boolean(this.opt.default); - } - - this.opt.default = rawDefault ? 'Y/n' : 'y/N'; - } - - /** - * Start the Inquiry session - * @param {Function} cb Callback when prompt is done - * @return {this} - */ - - _run(cb) { - this.done = cb; - - // Once user confirm (enter key) - const events = observe(this.rl); - events.keypress.pipe(cjs.takeUntil(events.line)).forEach(this.onKeypress.bind(this)); - - events.line.pipe(cjs.take(1)).forEach(this.onEnd.bind(this)); - - // Init - this.render(); - - return this; - } - - /** - * Render the prompt to screen - * @return {ConfirmPrompt} self - */ - - render(answer) { - let message = this.getQuestion(); - - if (typeof answer === 'boolean') { - message += colors$1.cyan(answer ? 'Yes' : 'No'); - } else if (answer) { - message += answer; - } else { - message += this.rl.line; - } - - this.screen.render(message); - - return this; - } - - /** - * When user press `enter` key - */ - - onEnd(input) { - this.status = 'answered'; - - let output = this.opt.filter(input); - if (this.opt.transformer) { - output = this.opt.transformer(output); - } - this.render(output); - - this.screen.done(); - this.done(output); - } - - /** - * When user press a key - */ - - onKeypress() { - this.render(); - } -} - -/** - * `rawlist` type prompt - */ - - -class RawListPrompt extends Prompt { - constructor(questions, rl, answers) { - super(questions, rl, answers); - - this.hiddenLine = ''; - this.lastKey = ''; - - if (!this.opt.choices) { - this.throwParamError('choices'); - } - - this.opt.validChoices = this.opt.choices.filter(Separator.exclude); - - this.selected = 0; - this.rawDefault = 0; - - Object.assign(this.opt, { - validate(val) { - return val != null; - }, - }); - - const def = this.opt.default; - if (typeof def === 'number' && def >= 0 && def < this.opt.choices.realLength) { - this.selected = def; - this.rawDefault = def; - } else if (typeof def !== 'number' && def != null) { - const index = this.opt.choices.realChoices.findIndex(({ value }) => value === def); - const safeIndex = Math.max(index, 0); - this.selected = safeIndex; - this.rawDefault = safeIndex; - } - - // Make sure no default is set (so it won't be printed) - this.opt.default = null; - - const shouldLoop = this.opt.loop === undefined ? true : this.opt.loop; - this.paginator = new Paginator(undefined, { isInfinite: shouldLoop }); - } - - /** - * Start the Inquiry session - * @param {Function} cb Callback when prompt is done - * @return {this} - */ - - _run(cb) { - this.done = cb; - - // Once user confirm (enter key) - const events = observe(this.rl); - const submit = events.line.pipe(cjs.map(this.getCurrentValue.bind(this))); - - const validation = this.handleSubmitEvents(submit); - validation.success.forEach(this.onEnd.bind(this)); - validation.error.forEach(this.onError.bind(this)); - - events.normalizedUpKey - .pipe(cjs.takeUntil(validation.success)) - .forEach(this.onUpKey.bind(this)); - events.normalizedDownKey - .pipe(cjs.takeUntil(validation.success)) - .forEach(this.onDownKey.bind(this)); - events.keypress - .pipe(cjs.takeUntil(validation.success)) - .forEach(this.onKeypress.bind(this)); - // Init the prompt - this.render(); - - return this; - } - - /** - * Render the prompt to screen - * @return {RawListPrompt} self - */ - - render(error) { - // Render question - let message = this.getQuestion(); - let bottomContent = ''; - - if (this.status === 'answered') { - message += colors$1.cyan(this.opt.choices.getChoice(this.selected).short); - } else { - const choicesStr = renderChoices$2(this.opt.choices, this.selected); - message += - '\n' + this.paginator.paginate(choicesStr, this.selected, this.opt.pageSize); - message += '\n Answer: '; - } - message += this.rl.line; - - if (error) { - bottomContent = '\n' + colors$1.red('>> ') + error; - } - - this.screen.render(message, bottomContent); - } - - /** - * When user press `enter` key - */ - - getCurrentValue(index) { - if (index == null) { - index = this.rawDefault; - } else if (index === '') { - this.selected = this.selected === undefined ? -1 : this.selected; - index = this.selected; - } else { - index -= 1; - } - - const choice = this.opt.choices.getChoice(index); - return choice ? choice.value : null; - } - - onEnd(state) { - this.status = 'answered'; - this.answer = state.value; - - // Re-render prompt - this.render(); - - this.screen.done(); - this.done(state.value); - } - - onError() { - this.render('Please enter a valid index'); - } - - /** - * When user press a key - */ - - onKeypress() { - let index; - - if (this.lastKey === 'arrow') { - index = this.hiddenLine.length > 0 ? Number(this.hiddenLine) - 1 : 0; - } else { - index = this.rl.line.length > 0 ? Number(this.rl.line) - 1 : 0; - } - this.lastKey = ''; - - this.selected = this.opt.choices.getChoice(index) ? index : undefined; - this.render(); - } - - /** - * When user press up key - */ - - onUpKey() { - this.onArrowKey('up'); - } - - /** - * When user press down key - */ - - onDownKey() { - this.onArrowKey('down'); - } - - /** - * When user press up or down key - * @param {String} type Arrow type: up or down - */ - - onArrowKey(type) { - this.selected = incrementListIndex(this.selected, type, this.opt) || 0; - this.hiddenLine = String(this.selected + 1); - this.rl.line = ''; - this.lastKey = 'arrow'; - } -} - -/** - * Function for rendering list choices - * @param {Number} pointer Position of the pointer - * @return {String} Rendered content - */ - -function renderChoices$2(choices, pointer) { - let output = ''; - let separatorOffset = 0; - - choices.forEach((choice, i) => { - output += output ? '\n ' : ' '; - - if (choice.type === 'separator') { - separatorOffset++; - output += ' ' + choice; - return; - } - - const index = i - separatorOffset; - let display = index + 1 + ') ' + choice.name; - if (index === pointer) { - display = colors$1.cyan(display); - } - - output += display; - }); - - return output; -} - -/** - * `rawlist` type prompt - */ - - -class ExpandPrompt extends Prompt { - constructor(questions, rl, answers) { - super(questions, rl, answers); - - if (!this.opt.choices) { - this.throwParamError('choices'); - } - - this.validateChoices(this.opt.choices); - - // Add the default `help` (/expand) option - this.opt.choices.push({ - key: 'h', - name: 'Help, list all options', - value: 'help', - }); - - this.opt.validate = (choice) => { - if (choice == null) { - return 'Please enter a valid command'; - } - - return choice !== 'help'; - }; - - // Setup the default string (capitalize the default key) - this.opt.default = this.generateChoicesString(this.opt.choices, this.opt.default); - - this.paginator = new Paginator(this.screen); - } - - /** - * Start the Inquiry session - * @param {Function} cb Callback when prompt is done - * @return {this} - */ - - _run(cb) { - this.done = cb; - - // Save user answer and update prompt to show selected option. - const events = observe(this.rl); - const validation = this.handleSubmitEvents( - events.line.pipe(cjs.map(this.getCurrentValue.bind(this))), - ); - validation.success.forEach(this.onSubmit.bind(this)); - validation.error.forEach(this.onError.bind(this)); - this.keypressObs = events.keypress - .pipe(cjs.takeUntil(validation.success)) - .forEach(this.onKeypress.bind(this)); - - // Init the prompt - this.render(); - - return this; - } - - /** - * Render the prompt to screen - * @return {ExpandPrompt} self - */ - - render(error, hint) { - let message = this.getQuestion(); - let bottomContent = ''; - - if (this.status === 'answered') { - message += colors$1.cyan(this.answer); - } else if (this.status === 'expanded') { - const choicesStr = renderChoices$1(this.opt.choices, this.selectedKey); - message += this.paginator.paginate(choicesStr, this.selectedKey, this.opt.pageSize); - message += '\n Answer: '; - } - - message += this.rl.line; - - if (error) { - bottomContent = colors$1.red('>> ') + error; - } - - if (hint) { - bottomContent = colors$1.cyan('>> ') + hint; - } - - this.screen.render(message, bottomContent); - } - - getCurrentValue(input) { - input ||= this.rawDefault; - - const selected = this.opt.choices.where({ key: input.toLowerCase().trim() })[0]; - if (!selected) { - return null; - } - - return selected.value; - } - - /** - * Generate the prompt choices string - * @return {String} Choices string - */ - - getChoices() { - let output = ''; - - this.opt.choices.forEach((choice) => { - output += '\n '; - - if (choice.type === 'separator') { - output += ' ' + choice; - return; - } - - let choiceStr = choice.key + ') ' + choice.name; - if (this.selectedKey === choice.key) { - choiceStr = colors$1.cyan(choiceStr); - } - - output += choiceStr; - }); - - return output; - } - - onError(state) { - if (state.value === 'help') { - this.selectedKey = ''; - this.status = 'expanded'; - this.render(); - return; - } - - this.render(state.isValid); - } - - /** - * When user press `enter` key - */ - - onSubmit(state) { - this.status = 'answered'; - const choice = this.opt.choices.where({ value: state.value })[0]; - this.answer = choice.short || choice.name; - - // Re-render prompt - this.render(); - this.screen.done(); - this.done(state.value); - } - - /** - * When user press a key - */ - - onKeypress() { - this.selectedKey = this.rl.line.toLowerCase(); - const selected = this.opt.choices.where({ key: this.selectedKey })[0]; - if (this.status === 'expanded') { - this.render(); - } else { - this.render(null, selected ? selected.name : null); - } - } - - /** - * Validate the choices - * @param {Array} choices - */ - - validateChoices(choices) { - let formatError; - const errors = []; - const keymap = {}; - choices.filter(Separator.exclude).forEach((choice) => { - if (!choice.key || choice.key.length !== 1) { - formatError = true; - } - - choice.key = String(choice.key).toLowerCase(); - - if (keymap[choice.key]) { - errors.push(choice.key); - } - - keymap[choice.key] = true; - }); - - if (formatError) { - throw new Error( - 'Format error: `key` param must be a single letter and is required.', - ); - } - - if (keymap.h) { - throw new Error( - 'Reserved key error: `key` param cannot be `h` - this value is reserved.', - ); - } - - if (errors.length > 0) { - throw new Error( - 'Duplicate key error: `key` param must be unique. Duplicates: ' + - [...new Set(errors)].join(','), - ); - } - } - - /** - * Generate a string out of the choices keys - * @param {Array} choices - * @param {Number|String} default - the choice index or name to capitalize - * @return {String} The rendered choices key string - */ - generateChoicesString(choices, defaultChoice) { - let defIndex = choices.realLength - 1; - if (typeof defaultChoice === 'number' && this.opt.choices.getChoice(defaultChoice)) { - defIndex = defaultChoice; - } else if (typeof defaultChoice === 'string') { - const index = choices.realChoices.findIndex(({ value }) => value === defaultChoice); - defIndex = index === -1 ? defIndex : index; - } - - const defStr = this.opt.choices.pluck('key'); - this.rawDefault = defStr[defIndex]; - defStr[defIndex] = String(defStr[defIndex]).toUpperCase(); - return defStr.join(''); - } -} - -/** - * Function for rendering checkbox choices - * @param {String} pointer Selected key - * @return {String} Rendered content - */ - -function renderChoices$1(choices, pointer) { - let output = ''; - - choices.forEach((choice) => { - output += '\n '; - - if (choice.type === 'separator') { - output += ' ' + choice; - return; - } - - let choiceStr = choice.key + ') ' + choice.name; - if (pointer === choice.key) { - choiceStr = colors$1.cyan(choiceStr); - } - - output += choiceStr; - }); - - return output; -} - -/** - * `list` type prompt - */ - - -class CheckboxPrompt extends Prompt { - constructor(questions, rl, answers) { - super(questions, rl, answers); - - if (!this.opt.choices) { - this.throwParamError('choices'); - } - - if (Array.isArray(this.opt.default)) { - for (const choice of this.opt.choices) { - if (this.opt.default.includes(choice.value)) { - choice.checked = true; - } - } - } - - this.pointer = 0; - - // Make sure no default is set (so it won't be printed) - this.opt.default = null; - - const shouldLoop = this.opt.loop === undefined ? true : this.opt.loop; - this.paginator = new Paginator(this.screen, { isInfinite: shouldLoop }); - } - - /** - * Start the Inquiry session - * @param {Function} cb Callback when prompt is done - * @return {this} - */ - - _run(cb) { - this.done = cb; - - const events = observe(this.rl); - - const validation = this.handleSubmitEvents( - events.line.pipe(cjs.map(this.getCurrentValue.bind(this))), - ); - validation.success.forEach(this.onEnd.bind(this)); - validation.error.forEach(this.onError.bind(this)); - - events.normalizedUpKey - .pipe(cjs.takeUntil(validation.success)) - .forEach(this.onUpKey.bind(this)); - events.normalizedDownKey - .pipe(cjs.takeUntil(validation.success)) - .forEach(this.onDownKey.bind(this)); - events.numberKey - .pipe(cjs.takeUntil(validation.success)) - .forEach(this.onNumberKey.bind(this)); - events.spaceKey - .pipe(cjs.takeUntil(validation.success)) - .forEach(this.onSpaceKey.bind(this)); - events.aKey.pipe(cjs.takeUntil(validation.success)).forEach(this.onAllKey.bind(this)); - events.iKey.pipe(cjs.takeUntil(validation.success)).forEach(this.onInverseKey.bind(this)); - - // Init the prompt - this.render(); - this.firstRender = false; - - return this; - } - - /** - * Render the prompt to screen - * @return {CheckboxPrompt} self - */ - - render(error) { - // Render question - let message = this.getQuestion(); - let bottomContent = ''; - - if (!this.dontShowHints) { - message += - '(Press ' + - colors$1.cyan(colors$1.bold('')) + - ' to select, ' + - colors$1.cyan(colors$1.bold('')) + - ' to toggle all, ' + - colors$1.cyan(colors$1.bold('')) + - ' to invert selection, and ' + - colors$1.cyan(colors$1.bold('')) + - ' to proceed)'; - } - - // Render choices or answer depending on the state - if (this.status === 'answered') { - message += colors$1.cyan(this.selection.join(', ')); - } else { - const choicesStr = renderChoices(this.opt.choices, this.pointer); - const indexPosition = this.opt.choices.indexOf( - this.opt.choices.getChoice(this.pointer), - ); - const realIndexPosition = - this.opt.choices.reduce((acc, value, i) => { - // Dont count lines past the choice we are looking at - if (i > indexPosition) { - return acc; - } - // Add line if it's a separator - if (value.type === 'separator') { - return acc + 1; - } - - let l = value.name; - // Non-strings take up one line - if (typeof l !== 'string') { - return acc + 1; - } - - // Calculate lines taken up by string - l = l.split('\n'); - return acc + l.length; - }, 0) - 1; - message += - '\n' + this.paginator.paginate(choicesStr, realIndexPosition, this.opt.pageSize); - } - - if (error) { - bottomContent = colors$1.red('>> ') + error; - } - - message += ansiEscapes.cursorHide; - - this.screen.render(message, bottomContent); - } - - /** - * When user press `enter` key - */ - - onEnd(state) { - this.status = 'answered'; - this.dontShowHints = true; - // Rerender prompt (and clean subline error) - this.render(); - - this.screen.done(); - this.done(state.value); - } - - onError(state) { - this.render(state.isValid); - } - - getCurrentValue() { - const choices = this.opt.choices.filter( - (choice) => Boolean(choice.checked) && !choice.disabled, - ); - - this.selection = choices.map((choice) => choice.short); - return choices.map((choice) => choice.value); - } - - onUpKey() { - this.pointer = incrementListIndex(this.pointer, 'up', this.opt); - this.render(); - } - - onDownKey() { - this.pointer = incrementListIndex(this.pointer, 'down', this.opt); - this.render(); - } - - onNumberKey(input) { - if (input <= this.opt.choices.realLength) { - this.pointer = input - 1; - this.toggleChoice(this.pointer); - } - - this.render(); - } - - onSpaceKey() { - this.toggleChoice(this.pointer); - this.render(); - } - - onAllKey() { - const shouldBeChecked = this.opt.choices.some( - (choice) => choice.type !== 'separator' && !choice.checked, - ); - - this.opt.choices.forEach((choice) => { - if (choice.type !== 'separator') { - choice.checked = shouldBeChecked; - } - }); - - this.render(); - } - - onInverseKey() { - this.opt.choices.forEach((choice) => { - if (choice.type !== 'separator') { - choice.checked = !choice.checked; - } - }); - - this.render(); - } - - toggleChoice(index) { - const item = this.opt.choices.getChoice(index); - if (item !== undefined) { - this.opt.choices.getChoice(index).checked = !item.checked; - } - } -} - -/** - * Function for rendering checkbox choices - * @param {Number} pointer Position of the pointer - * @return {String} Rendered content - */ - -function renderChoices(choices, pointer) { - let output = ''; - let separatorOffset = 0; - - choices.forEach((choice, i) => { - if (choice.type === 'separator') { - separatorOffset++; - output += ' ' + choice + '\n'; - return; - } - - if (choice.disabled) { - separatorOffset++; - output += ' - ' + choice.name; - output += ` (${ - typeof choice.disabled === 'string' ? choice.disabled : 'Disabled' - })`; - } else { - const line = getCheckbox(choice.checked) + ' ' + choice.name; - output += - i - separatorOffset === pointer - ? colors$1.cyan(figures.pointer + line) - : ' ' + line; - } - - output += '\n'; - }); - - return output.replaceAll(/\n$/g, ''); -} - -/** - * Get the checkbox - * @param {Boolean} checked - add a X or not to the checkbox - * @return {String} Composited checkbox string - */ - -function getCheckbox(checked) { - return checked ? colors$1.green(figures.radioOn) : figures.radioOff; -} - -/** - * `password` type prompt - */ - - -function mask(input, maskChar) { - input = String(input); - maskChar = typeof maskChar === 'string' ? maskChar : '*'; - if (input.length === 0) { - return ''; - } - - return Array.from({ length: input.length + 1 }).join(maskChar); -} - -class PasswordPrompt extends Prompt { - /** - * Start the Inquiry session - * @param {Function} cb Callback when prompt is done - * @return {this} - */ - - _run(cb) { - this.done = cb; - - const events = observe(this.rl); - - // Once user confirm (enter key) - const submit = events.line.pipe(cjs.map(this.filterInput.bind(this))); - - const validation = this.handleSubmitEvents(submit); - validation.success.forEach(this.onEnd.bind(this)); - validation.error.forEach(this.onError.bind(this)); - - events.keypress - .pipe(cjs.takeUntil(validation.success)) - .forEach(this.onKeypress.bind(this)); - - // Init - this.render(); - - return this; - } - - /** - * Render the prompt to screen - * @return {PasswordPrompt} self - */ - - render(error) { - let message = this.getQuestion(); - let bottomContent = ''; - - message += - this.status === 'answered' - ? this.getMaskedValue(this.answer) - : this.getMaskedValue(this.rl.line || ''); - - if (error) { - bottomContent = '\n' + colors$1.red('>> ') + error; - } - - this.screen.render(message, bottomContent); - } - - getMaskedValue(value) { - if (this.status === 'answered') { - return this.opt.mask - ? colors$1.cyan(mask(value, this.opt.mask)) - : colors$1.italic(colors$1.dim('[hidden]')); - } - return this.opt.mask - ? mask(value, this.opt.mask) - : colors$1.italic(colors$1.dim('[input is hidden] ')); - } - - /** - * Mask value during async filter/validation. - */ - getSpinningValue(value) { - return this.getMaskedValue(value); - } - - /** - * When user press `enter` key - */ - - filterInput(input) { - if (!input) { - return this.opt.default == null ? '' : this.opt.default; - } - - return input; - } - - onEnd(state) { - this.status = 'answered'; - this.answer = state.value; - - // Re-render prompt - this.render(); - - this.screen.done(); - this.done(state.value); - } - - onError(state) { - this.render(state.isValid); - } - - onKeypress() { - // If user press a key, just clear the default value - this.opt.default &&= undefined; - - this.render(); - } -} - -var main = {}; - -var chardet = {}; - -var match = function(det, rec, confidence, name, lang) { - this.confidence = confidence; - this.name = name || rec.name(det); - this.lang = lang; -}; - -var Match = match; - -/** - * Charset recognizer for UTF-8 - */ -var utf8$1 = function() { - this.name = function() { - return 'UTF-8'; - }; - this.match = function(det) { - - var hasBOM = false, - numValid = 0, - numInvalid = 0, - input = det.fRawInput, - trailBytes = 0, - confidence; - - if (det.fRawLength >= 3 && - (input[0] & 0xff) == 0xef && (input[1] & 0xff) == 0xbb && (input[2] & 0xff) == 0xbf) { - hasBOM = true; - } - - // Scan for multi-byte sequences - for (var i = 0; i < det.fRawLength; i++) { - var b = input[i]; - if ((b & 0x80) == 0) - continue; // ASCII - - // Hi bit on char found. Figure out how long the sequence should be - if ((b & 0x0e0) == 0x0c0) { - trailBytes = 1; - } else if ((b & 0x0f0) == 0x0e0) { - trailBytes = 2; - } else if ((b & 0x0f8) == 0xf0) { - trailBytes = 3; - } else { - numInvalid++; - if (numInvalid > 5) - break; - trailBytes = 0; - } - - // Verify that we've got the right number of trail bytes in the sequence - for (;;) { - i++; - if (i >= det.fRawLength) - break; - - if ((input[i] & 0xc0) != 0x080) { - numInvalid++; - break; - } - if (--trailBytes == 0) { - numValid++; - break; - } - } - } - - // Cook up some sort of confidence score, based on presense of a BOM - // and the existence of valid and/or invalid multi-byte sequences. - confidence = 0; - if (hasBOM && numInvalid == 0) - confidence = 100; - else if (hasBOM && numValid > numInvalid * 10) - confidence = 80; - else if (numValid > 3 && numInvalid == 0) - confidence = 100; - else if (numValid > 0 && numInvalid == 0) - confidence = 80; - else if (numValid == 0 && numInvalid == 0) - // Plain ASCII. - confidence = 10; - else if (numValid > numInvalid * 10) - // Probably corruput utf-8 data. Valid sequences aren't likely by chance. - confidence = 25; - else - return null - - return new Match(det, this, confidence); - }; -}; - -var unicode$1 = {exports: {}}; - -(function (module) { - var util = require$$0$3, - Match = match; - - /** - * This class matches UTF-16 and UTF-32, both big- and little-endian. The - * BOM will be used if it is present. - */ - module.exports.UTF_16BE = function() { - this.name = function() { - return 'UTF-16BE'; - }; - this.match = function(det) { - var input = det.fRawInput; - - if (input.length >= 2 && ((input[0] & 0xff) == 0xfe && (input[1] & 0xff) == 0xff)) { - return new Match(det, this, 100); // confidence = 100 - } - - // TODO: Do some statistics to check for unsigned UTF-16BE - return null; - }; - }; - - module.exports.UTF_16LE = function() { - this.name = function() { - return 'UTF-16LE'; - }; - this.match = function(det) { - var input = det.fRawInput; - - if (input.length >= 2 && ((input[0] & 0xff) == 0xff && (input[1] & 0xff) == 0xfe)) { - // LE BOM is present. - if (input.length >= 4 && input[2] == 0x00 && input[3] == 0x00) { - // It is probably UTF-32 LE, not UTF-16 - return null; - } - return new Match(det, this, 100); // confidence = 100 - } - - // TODO: Do some statistics to check for unsigned UTF-16LE - return null; - }; - }; - - function UTF_32() {} UTF_32.prototype.match = function(det) { - var input = det.fRawInput, - limit = (det.fRawLength / 4) * 4, - numValid = 0, - numInvalid = 0, - hasBOM = false, - confidence = 0; - - if (limit == 0) { - return null; - } - - if (this.getChar(input, 0) == 0x0000FEFF) { - hasBOM = true; - } - - for (var i = 0; i < limit; i += 4) { - var ch = this.getChar(input, i); - - if (ch < 0 || ch >= 0x10FFFF || (ch >= 0xD800 && ch <= 0xDFFF)) { - numInvalid += 1; - } else { - numValid += 1; - } - } - - // Cook up some sort of confidence score, based on presence of a BOM - // and the existence of valid and/or invalid multi-byte sequences. - if (hasBOM && numInvalid == 0) { - confidence = 100; - } else if (hasBOM && numValid > numInvalid * 10) { - confidence = 80; - } else if (numValid > 3 && numInvalid == 0) { - confidence = 100; - } else if (numValid > 0 && numInvalid == 0) { - confidence = 80; - } else if (numValid > numInvalid * 10) { - // Probably corrupt UTF-32BE data. Valid sequences aren't likely by chance. - confidence = 25; - } - - // return confidence == 0 ? null : new CharsetMatch(det, this, confidence); - return confidence == 0 ? null : new Match(det, this, confidence); - }; - - module.exports.UTF_32BE = function() { - this.name = function() { - return 'UTF-32BE'; - }; - this.getChar = function(input, index) { - return (input[index + 0] & 0xff) << 24 | (input[index + 1] & 0xff) << 16 | - (input[index + 2] & 0xff) << 8 | (input[index + 3] & 0xff); - }; - }; - util.inherits(module.exports.UTF_32BE, UTF_32); - - module.exports.UTF_32LE = function() { - this.name = function() { - return 'UTF-32LE'; - }; - this.getChar = function(input, index) { - return (input[index + 3] & 0xff) << 24 | (input[index + 2] & 0xff) << 16 | - (input[index + 1] & 0xff) << 8 | (input[index + 0] & 0xff); - }; - }; - util.inherits(module.exports.UTF_32LE, UTF_32); -} (unicode$1)); - -var unicodeExports = unicode$1.exports; - -var mbcs$1 = {exports: {}}; - -(function (module) { - var util = require$$0$3, - Match = match; - - /** - * Binary search implementation (recursive) - */ - function binarySearch(arr, searchValue) { - function find(arr, searchValue, left, right) { - if (right < left) - return -1; - - /* - int mid = mid = (left + right) / 2; - There is a bug in the above line; - Joshua Bloch suggests the following replacement: - */ - var mid = Math.floor((left + right) >>> 1); - if (searchValue > arr[mid]) - return find(arr, searchValue, mid + 1, right); - - if (searchValue < arr[mid]) - return find(arr, searchValue, left, mid - 1); - - return mid; - } - return find(arr, searchValue, 0, arr.length - 1); - } - // 'Character' iterated character class. - // Recognizers for specific mbcs encodings make their 'characters' available - // by providing a nextChar() function that fills in an instance of iteratedChar - // with the next char from the input. - // The returned characters are not converted to Unicode, but remain as the raw - // bytes (concatenated into an int) from the codepage data. - // - // For Asian charsets, use the raw input rather than the input that has been - // stripped of markup. Detection only considers multi-byte chars, effectively - // stripping markup anyway, and double byte chars do occur in markup too. - // - function IteratedChar() { - - this.charValue = 0; // 1-4 bytes from the raw input data - this.index = 0; - this.nextIndex = 0; - this.error = false; - this.done = false; - - this.reset = function() { - this.charValue = 0; - this.index = -1; - this.nextIndex = 0; - this.error = false; - this.done = false; - }; - - this.nextByte = function(det) { - if (this.nextIndex >= det.fRawLength) { - this.done = true; - return -1; - } - var byteValue = det.fRawInput[this.nextIndex++] & 0x00ff; - return byteValue; - }; - } - - - /** - * Asian double or multi-byte - charsets. - * Match is determined mostly by the input data adhering to the - * encoding scheme for the charset, and, optionally, - * frequency-of-occurence of characters. - */ - - function mbcs() {} - /** - * Test the match of this charset with the input text data - * which is obtained via the CharsetDetector object. - * - * @param det The CharsetDetector, which contains the input text - * to be checked for being in this charset. - * @return Two values packed into one int (Damn java, anyhow) - * bits 0-7: the match confidence, ranging from 0-100 - * bits 8-15: The match reason, an enum-like value. - */ - mbcs.prototype.match = function(det) { - - var doubleByteCharCount = 0, - commonCharCount = 0, - badCharCount = 0, - totalCharCount = 0, - confidence = 0; - - var iter = new IteratedChar(); - - detectBlock: { - for (iter.reset(); this.nextChar(iter, det);) { - totalCharCount++; - if (iter.error) { - badCharCount++; - } else { - var cv = iter.charValue & 0xFFFFFFFF; - - if (cv <= 0xff) ; else { - doubleByteCharCount++; - if (this.commonChars != null) { - // NOTE: This assumes that there are no 4-byte common chars. - if (binarySearch(this.commonChars, cv) >= 0) { - commonCharCount++; - } - } - } - } - if (badCharCount >= 2 && badCharCount * 5 >= doubleByteCharCount) { - // console.log('its here!') - // Bail out early if the byte data is not matching the encoding scheme. - break detectBlock; - } - } - - if (doubleByteCharCount <= 10 && badCharCount== 0) { - // Not many multi-byte chars. - if (doubleByteCharCount == 0 && totalCharCount < 10) { - // There weren't any multibyte sequences, and there was a low density of non-ASCII single bytes. - // We don't have enough data to have any confidence. - // Statistical analysis of single byte non-ASCII charcters would probably help here. - confidence = 0; - } - else { - // ASCII or ISO file? It's probably not our encoding, - // but is not incompatible with our encoding, so don't give it a zero. - confidence = 10; - } - break detectBlock; - } - - // - // No match if there are too many characters that don't fit the encoding scheme. - // (should we have zero tolerance for these?) - // - if (doubleByteCharCount < 20 * badCharCount) { - confidence = 0; - break detectBlock; - } - - if (this.commonChars == null) { - // We have no statistics on frequently occuring characters. - // Assess confidence purely on having a reasonable number of - // multi-byte characters (the more the better - confidence = 30 + doubleByteCharCount - 20 * badCharCount; - if (confidence > 100) { - confidence = 100; - } - } else { - // - // Frequency of occurence statistics exist. - // - var maxVal = Math.log(parseFloat(doubleByteCharCount) / 4); - var scaleFactor = 90.0 / maxVal; - confidence = Math.floor(Math.log(commonCharCount + 1) * scaleFactor + 10); - confidence = Math.min(confidence, 100); - } - } // end of detectBlock: - - return confidence == 0 ? null : new Match(det, this, confidence); - }; - - /** - * Get the next character (however many bytes it is) from the input data - * Subclasses for specific charset encodings must implement this function - * to get characters according to the rules of their encoding scheme. - * - * This function is not a method of class iteratedChar only because - * that would require a lot of extra derived classes, which is awkward. - * @param it The iteratedChar 'struct' into which the returned char is placed. - * @param det The charset detector, which is needed to get at the input byte data - * being iterated over. - * @return True if a character was returned, false at end of input. - */ - - mbcs.prototype.nextChar = function(iter, det) {}; - - - - /** - * Shift-JIS charset recognizer. - */ - module.exports.sjis = function() { - this.name = function() { - return 'Shift-JIS'; - }; - this.language = function() { - return 'ja'; - }; - - // TODO: This set of data comes from the character frequency- - // of-occurence analysis tool. The data needs to be moved - // into a resource and loaded from there. - this.commonChars = [ - 0x8140, 0x8141, 0x8142, 0x8145, 0x815b, 0x8169, 0x816a, 0x8175, 0x8176, 0x82a0, - 0x82a2, 0x82a4, 0x82a9, 0x82aa, 0x82ab, 0x82ad, 0x82af, 0x82b1, 0x82b3, 0x82b5, - 0x82b7, 0x82bd, 0x82be, 0x82c1, 0x82c4, 0x82c5, 0x82c6, 0x82c8, 0x82c9, 0x82cc, - 0x82cd, 0x82dc, 0x82e0, 0x82e7, 0x82e8, 0x82e9, 0x82ea, 0x82f0, 0x82f1, 0x8341, - 0x8343, 0x834e, 0x834f, 0x8358, 0x835e, 0x8362, 0x8367, 0x8375, 0x8376, 0x8389, - 0x838a, 0x838b, 0x838d, 0x8393, 0x8e96, 0x93fa, 0x95aa - ]; - - this.nextChar = function(iter, det) { - iter.index = iter.nextIndex; - iter.error = false; - - var firstByte; - firstByte = iter.charValue = iter.nextByte(det); - if (firstByte < 0) - return false; - - if (firstByte <= 0x7f || (firstByte > 0xa0 && firstByte <= 0xdf)) - return true; - - var secondByte = iter.nextByte(det); - if (secondByte < 0) - return false; - - iter.charValue = (firstByte << 8) | secondByte; - if (! ((secondByte >= 0x40 && secondByte <= 0x7f) || (secondByte >= 0x80 && secondByte <= 0xff))) { - // Illegal second byte value. - iter.error = true; - } - return true; - }; - }; - util.inherits(module.exports.sjis, mbcs); - - - - /** - * Big5 charset recognizer. - */ - module.exports.big5 = function() { - this.name = function() { - return 'Big5'; - }; - this.language = function() { - return 'zh'; - }; - // TODO: This set of data comes from the character frequency- - // of-occurence analysis tool. The data needs to be moved - // into a resource and loaded from there. - this.commonChars = [ - 0xa140, 0xa141, 0xa142, 0xa143, 0xa147, 0xa149, 0xa175, 0xa176, 0xa440, 0xa446, - 0xa447, 0xa448, 0xa451, 0xa454, 0xa457, 0xa464, 0xa46a, 0xa46c, 0xa477, 0xa4a3, - 0xa4a4, 0xa4a7, 0xa4c1, 0xa4ce, 0xa4d1, 0xa4df, 0xa4e8, 0xa4fd, 0xa540, 0xa548, - 0xa558, 0xa569, 0xa5cd, 0xa5e7, 0xa657, 0xa661, 0xa662, 0xa668, 0xa670, 0xa6a8, - 0xa6b3, 0xa6b9, 0xa6d3, 0xa6db, 0xa6e6, 0xa6f2, 0xa740, 0xa751, 0xa759, 0xa7da, - 0xa8a3, 0xa8a5, 0xa8ad, 0xa8d1, 0xa8d3, 0xa8e4, 0xa8fc, 0xa9c0, 0xa9d2, 0xa9f3, - 0xaa6b, 0xaaba, 0xaabe, 0xaacc, 0xaafc, 0xac47, 0xac4f, 0xacb0, 0xacd2, 0xad59, - 0xaec9, 0xafe0, 0xb0ea, 0xb16f, 0xb2b3, 0xb2c4, 0xb36f, 0xb44c, 0xb44e, 0xb54c, - 0xb5a5, 0xb5bd, 0xb5d0, 0xb5d8, 0xb671, 0xb7ed, 0xb867, 0xb944, 0xbad8, 0xbb44, - 0xbba1, 0xbdd1, 0xc2c4, 0xc3b9, 0xc440, 0xc45f - ]; - this.nextChar = function(iter, det) { - iter.index = iter.nextIndex; - iter.error = false; - - var firstByte = iter.charValue = iter.nextByte(det); - - if (firstByte < 0) - return false; - - // single byte character. - if (firstByte <= 0x7f || firstByte == 0xff) - return true; - - var secondByte = iter.nextByte(det); - - if (secondByte < 0) - return false; - - iter.charValue = (iter.charValue << 8) | secondByte; - - if (secondByte < 0x40 || secondByte == 0x7f || secondByte == 0xff) - iter.error = true; - - return true; - }; - }; - util.inherits(module.exports.big5, mbcs); - - - - /** - * EUC charset recognizers. One abstract class that provides the common function - * for getting the next character according to the EUC encoding scheme, - * and nested derived classes for EUC_KR, EUC_JP, EUC_CN. - * - * Get the next character value for EUC based encodings. - * Character 'value' is simply the raw bytes that make up the character - * packed into an int. - */ - function eucNextChar(iter, det) { - iter.index = iter.nextIndex; - iter.error = false; - var firstByte = 0; - var secondByte = 0; - var thirdByte = 0; - //int fourthByte = 0; - buildChar: { - firstByte = iter.charValue = iter.nextByte(det); - if (firstByte < 0) { - // Ran off the end of the input data - iter.done = true; - break buildChar; - } - if (firstByte <= 0x8d) { - // single byte char - break buildChar; - } - secondByte = iter.nextByte(det); - iter.charValue = (iter.charValue << 8) | secondByte; - if (firstByte >= 0xA1 && firstByte <= 0xfe) { - // Two byte Char - if (secondByte < 0xa1) { - iter.error = true; - } - break buildChar; - } - if (firstByte == 0x8e) { - // Code Set 2. - // In EUC-JP, total char size is 2 bytes, only one byte of actual char value. - // In EUC-TW, total char size is 4 bytes, three bytes contribute to char value. - // We don't know which we've got. - // Treat it like EUC-JP. If the data really was EUC-TW, the following two - // bytes will look like a well formed 2 byte char. - if (secondByte < 0xa1) { - iter.error = true; - } - break buildChar; - } - if (firstByte == 0x8f) { - // Code set 3. - // Three byte total char size, two bytes of actual char value. - thirdByte = iter.nextByte(det); - iter.charValue = (iter.charValue << 8) | thirdByte; - if (thirdByte < 0xa1) { - iter.error = true; - } - } - } - return iter.done == false; - } - - - /** - * The charset recognize for EUC-JP. A singleton instance of this class - * is created and kept by the public CharsetDetector class - */ - module.exports.euc_jp = function() { - this.name = function() { - return 'EUC-JP'; - }; - this.language = function() { - return 'ja'; - }; - - // TODO: This set of data comes from the character frequency- - // of-occurence analysis tool. The data needs to be moved - // into a resource and loaded from there. - this.commonChars = [ - 0xa1a1, 0xa1a2, 0xa1a3, 0xa1a6, 0xa1bc, 0xa1ca, 0xa1cb, 0xa1d6, 0xa1d7, 0xa4a2, - 0xa4a4, 0xa4a6, 0xa4a8, 0xa4aa, 0xa4ab, 0xa4ac, 0xa4ad, 0xa4af, 0xa4b1, 0xa4b3, - 0xa4b5, 0xa4b7, 0xa4b9, 0xa4bb, 0xa4bd, 0xa4bf, 0xa4c0, 0xa4c1, 0xa4c3, 0xa4c4, - 0xa4c6, 0xa4c7, 0xa4c8, 0xa4c9, 0xa4ca, 0xa4cb, 0xa4ce, 0xa4cf, 0xa4d0, 0xa4de, - 0xa4df, 0xa4e1, 0xa4e2, 0xa4e4, 0xa4e8, 0xa4e9, 0xa4ea, 0xa4eb, 0xa4ec, 0xa4ef, - 0xa4f2, 0xa4f3, 0xa5a2, 0xa5a3, 0xa5a4, 0xa5a6, 0xa5a7, 0xa5aa, 0xa5ad, 0xa5af, - 0xa5b0, 0xa5b3, 0xa5b5, 0xa5b7, 0xa5b8, 0xa5b9, 0xa5bf, 0xa5c3, 0xa5c6, 0xa5c7, - 0xa5c8, 0xa5c9, 0xa5cb, 0xa5d0, 0xa5d5, 0xa5d6, 0xa5d7, 0xa5de, 0xa5e0, 0xa5e1, - 0xa5e5, 0xa5e9, 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ed, 0xa5f3, 0xb8a9, 0xb9d4, 0xbaee, - 0xbbc8, 0xbef0, 0xbfb7, 0xc4ea, 0xc6fc, 0xc7bd, 0xcab8, 0xcaf3, 0xcbdc, 0xcdd1 - ]; - - this.nextChar = eucNextChar; - }; - util.inherits(module.exports.euc_jp, mbcs); - - - - /** - * The charset recognize for EUC-KR. A singleton instance of this class - * is created and kept by the public CharsetDetector class - */ - module.exports.euc_kr = function() { - this.name = function() { - return 'EUC-KR'; - }; - this.language = function() { - return 'ko'; - }; - - // TODO: This set of data comes from the character frequency- - // of-occurence analysis tool. The data needs to be moved - // into a resource and loaded from there. - this.commonChars = [ - 0xb0a1, 0xb0b3, 0xb0c5, 0xb0cd, 0xb0d4, 0xb0e6, 0xb0ed, 0xb0f8, 0xb0fa, 0xb0fc, - 0xb1b8, 0xb1b9, 0xb1c7, 0xb1d7, 0xb1e2, 0xb3aa, 0xb3bb, 0xb4c2, 0xb4cf, 0xb4d9, - 0xb4eb, 0xb5a5, 0xb5b5, 0xb5bf, 0xb5c7, 0xb5e9, 0xb6f3, 0xb7af, 0xb7c2, 0xb7ce, - 0xb8a6, 0xb8ae, 0xb8b6, 0xb8b8, 0xb8bb, 0xb8e9, 0xb9ab, 0xb9ae, 0xb9cc, 0xb9ce, - 0xb9fd, 0xbab8, 0xbace, 0xbad0, 0xbaf1, 0xbbe7, 0xbbf3, 0xbbfd, 0xbcad, 0xbcba, - 0xbcd2, 0xbcf6, 0xbdba, 0xbdc0, 0xbdc3, 0xbdc5, 0xbec6, 0xbec8, 0xbedf, 0xbeee, - 0xbef8, 0xbefa, 0xbfa1, 0xbfa9, 0xbfc0, 0xbfe4, 0xbfeb, 0xbfec, 0xbff8, 0xc0a7, - 0xc0af, 0xc0b8, 0xc0ba, 0xc0bb, 0xc0bd, 0xc0c7, 0xc0cc, 0xc0ce, 0xc0cf, 0xc0d6, - 0xc0da, 0xc0e5, 0xc0fb, 0xc0fc, 0xc1a4, 0xc1a6, 0xc1b6, 0xc1d6, 0xc1df, 0xc1f6, - 0xc1f8, 0xc4a1, 0xc5cd, 0xc6ae, 0xc7cf, 0xc7d1, 0xc7d2, 0xc7d8, 0xc7e5, 0xc8ad - ]; - - this.nextChar = eucNextChar; - }; - util.inherits(module.exports.euc_kr, mbcs); - - - - /** - * GB-18030 recognizer. Uses simplified Chinese statistics. - */ - module.exports.gb_18030 = function() { - this.name = function() { - return 'GB18030'; - }; - this.language = function() { - return 'zh'; - }; - - /* - * Get the next character value for EUC based encodings. - * Character 'value' is simply the raw bytes that make up the character - * packed into an int. - */ - this.nextChar = function(iter, det) { - iter.index = iter.nextIndex; - iter.error = false; - var firstByte = 0; - var secondByte = 0; - var thirdByte = 0; - var fourthByte = 0; - buildChar: { - firstByte = iter.charValue = iter.nextByte(det); - if (firstByte < 0) { - // Ran off the end of the input data - iter.done = true; - break buildChar; - } - if (firstByte <= 0x80) { - // single byte char - break buildChar; - } - secondByte = iter.nextByte(det); - iter.charValue = (iter.charValue << 8) | secondByte; - if (firstByte >= 0x81 && firstByte <= 0xFE) { - // Two byte Char - if ((secondByte >= 0x40 && secondByte <= 0x7E) || (secondByte >=80 && secondByte <= 0xFE)) { - break buildChar; - } - // Four byte char - if (secondByte >= 0x30 && secondByte <= 0x39) { - thirdByte = iter.nextByte(det); - if (thirdByte >= 0x81 && thirdByte <= 0xFE) { - fourthByte = iter.nextByte(det); - if (fourthByte >= 0x30 && fourthByte <= 0x39) { - iter.charValue = (iter.charValue << 16) | (thirdByte << 8) | fourthByte; - break buildChar; - } - } - } - iter.error = true; - break buildChar; - } - } - return iter.done == false; - }; - - // TODO: This set of data comes from the character frequency- - // of-occurence analysis tool. The data needs to be moved - // into a resource and loaded from there. - this.commonChars = [ - 0xa1a1, 0xa1a2, 0xa1a3, 0xa1a4, 0xa1b0, 0xa1b1, 0xa1f1, 0xa1f3, 0xa3a1, 0xa3ac, - 0xa3ba, 0xb1a8, 0xb1b8, 0xb1be, 0xb2bb, 0xb3c9, 0xb3f6, 0xb4f3, 0xb5bd, 0xb5c4, - 0xb5e3, 0xb6af, 0xb6d4, 0xb6e0, 0xb7a2, 0xb7a8, 0xb7bd, 0xb7d6, 0xb7dd, 0xb8b4, - 0xb8df, 0xb8f6, 0xb9ab, 0xb9c9, 0xb9d8, 0xb9fa, 0xb9fd, 0xbacd, 0xbba7, 0xbbd6, - 0xbbe1, 0xbbfa, 0xbcbc, 0xbcdb, 0xbcfe, 0xbdcc, 0xbecd, 0xbedd, 0xbfb4, 0xbfc6, - 0xbfc9, 0xc0b4, 0xc0ed, 0xc1cb, 0xc2db, 0xc3c7, 0xc4dc, 0xc4ea, 0xc5cc, 0xc6f7, - 0xc7f8, 0xc8ab, 0xc8cb, 0xc8d5, 0xc8e7, 0xc9cf, 0xc9fa, 0xcab1, 0xcab5, 0xcac7, - 0xcad0, 0xcad6, 0xcaf5, 0xcafd, 0xccec, 0xcdf8, 0xceaa, 0xcec4, 0xced2, 0xcee5, - 0xcfb5, 0xcfc2, 0xcfd6, 0xd0c2, 0xd0c5, 0xd0d0, 0xd0d4, 0xd1a7, 0xd2aa, 0xd2b2, - 0xd2b5, 0xd2bb, 0xd2d4, 0xd3c3, 0xd3d0, 0xd3fd, 0xd4c2, 0xd4da, 0xd5e2, 0xd6d0 - ]; - }; - util.inherits(module.exports.gb_18030, mbcs); -} (mbcs$1)); - -var mbcsExports = mbcs$1.exports; - -var sbcs$1 = {exports: {}}; - -(function (module) { - var util = require$$0$3, - Match = match; - - /** - * This class recognizes single-byte encodings. Because the encoding scheme is so - * simple, language statistics are used to do the matching. - */ - - function NGramParser(theNgramList, theByteMap) { - var N_GRAM_MASK = 0xFFFFFF; - - this.byteIndex = 0; - this.ngram = 0; - - this.ngramList = theNgramList; - this.byteMap = theByteMap; - - this.ngramCount = 0; - this.hitCount = 0; - - this.spaceChar; - - /* - * Binary search for value in table, which must have exactly 64 entries. - */ - this.search = function(table, value) { - var index = 0; - - if (table[index + 32] <= value) index += 32; - if (table[index + 16] <= value) index += 16; - if (table[index + 8] <= value) index += 8; - if (table[index + 4] <= value) index += 4; - if (table[index + 2] <= value) index += 2; - if (table[index + 1] <= value) index += 1; - if (table[index] > value) index -= 1; - - if (index < 0 || table[index] != value) - return -1; - - return index; - }; - - this.lookup = function(thisNgram) { - this.ngramCount += 1; - if (this.search(this.ngramList, thisNgram) >= 0) { - this.hitCount += 1; - } - }; - - this.addByte = function(b) { - this.ngram = ((this.ngram << 8) + (b & 0xFF)) & N_GRAM_MASK; - this.lookup(this.ngram); - }; - - this.nextByte = function(det) { - if (this.byteIndex >= det.fInputLen) - return -1; - - return det.fInputBytes[this.byteIndex++] & 0xFF; - }; - - this.parse = function(det, spaceCh) { - var b, ignoreSpace = false; - this.spaceChar = spaceCh; - - while ((b = this.nextByte(det)) >= 0) { - var mb = this.byteMap[b]; - - // TODO: 0x20 might not be a space in all character sets... - if (mb != 0) { - if (!(mb == this.spaceChar && ignoreSpace)) { - this.addByte(mb); - } - - ignoreSpace = (mb == this.spaceChar); - } - } - - // TODO: Is this OK? The buffer could have ended in the middle of a word... - this.addByte(this.spaceChar); - - var rawPercent = this.hitCount / this.ngramCount; - - // TODO - This is a bit of a hack to take care of a case - // were we were getting a confidence of 135... - if (rawPercent > 0.33) - return 98; - - return Math.floor(rawPercent * 300.0); - }; - } - function NGramsPlusLang(la, ng) { - this.fLang = la; - this.fNGrams = ng; - } - function sbcs() {} sbcs.prototype.spaceChar = 0x20; - sbcs.prototype.ngrams = function() {}; - sbcs.prototype.byteMap = function() {}; - sbcs.prototype.match = function(det) { - - var ngrams = this.ngrams(); - var multiple = (Array.isArray(ngrams) && ngrams[0] instanceof NGramsPlusLang); - - if (!multiple) { - var parser = new NGramParser(ngrams, this.byteMap()); - var confidence = parser.parse(det, this.spaceChar); - return confidence <= 0 ? null : new Match(det, this, confidence); - } - - var bestConfidenceSoFar = -1; - var lang = null; - - for (var i = ngrams.length - 1; i >= 0; i--) { - var ngl = ngrams[i]; - - var parser = new NGramParser(ngl.fNGrams, this.byteMap()); - var confidence = parser.parse(det, this.spaceChar); - if (confidence > bestConfidenceSoFar) { - bestConfidenceSoFar = confidence; - lang = ngl.fLang; - } - } - - var name = this.name(det); - return bestConfidenceSoFar <= 0 ? null : new Match(det, this, bestConfidenceSoFar, name, lang); - }; - - - module.exports.ISO_8859_1 = function() { - this.byteMap = function() { - return [ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, - 0x20, 0x20, 0xBA, 0x20, 0x20, 0x20, 0x20, 0x20, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xDF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF - ]; - }; - - this.ngrams = function() { - return [ - new NGramsPlusLang('da', [ - 0x206166, 0x206174, 0x206465, 0x20656E, 0x206572, 0x20666F, 0x206861, 0x206920, - 0x206D65, 0x206F67, 0x2070E5, 0x207369, 0x207374, 0x207469, 0x207669, 0x616620, - 0x616E20, 0x616E64, 0x617220, 0x617420, 0x646520, 0x64656E, 0x646572, 0x646574, - 0x652073, 0x656420, 0x656465, 0x656E20, 0x656E64, 0x657220, 0x657265, 0x657320, - 0x657420, 0x666F72, 0x676520, 0x67656E, 0x676572, 0x696765, 0x696C20, 0x696E67, - 0x6B6520, 0x6B6B65, 0x6C6572, 0x6C6967, 0x6C6C65, 0x6D6564, 0x6E6465, 0x6E6520, - 0x6E6720, 0x6E6765, 0x6F6720, 0x6F6D20, 0x6F7220, 0x70E520, 0x722064, 0x722065, - 0x722073, 0x726520, 0x737465, 0x742073, 0x746520, 0x746572, 0x74696C, 0x766572 - ]), - new NGramsPlusLang('de', [ - 0x20616E, 0x206175, 0x206265, 0x206461, 0x206465, 0x206469, 0x206569, 0x206765, - 0x206861, 0x20696E, 0x206D69, 0x207363, 0x207365, 0x20756E, 0x207665, 0x20766F, - 0x207765, 0x207A75, 0x626572, 0x636820, 0x636865, 0x636874, 0x646173, 0x64656E, - 0x646572, 0x646965, 0x652064, 0x652073, 0x65696E, 0x656974, 0x656E20, 0x657220, - 0x657320, 0x67656E, 0x68656E, 0x687420, 0x696368, 0x696520, 0x696E20, 0x696E65, - 0x697420, 0x6C6963, 0x6C6C65, 0x6E2061, 0x6E2064, 0x6E2073, 0x6E6420, 0x6E6465, - 0x6E6520, 0x6E6720, 0x6E6765, 0x6E7465, 0x722064, 0x726465, 0x726569, 0x736368, - 0x737465, 0x742064, 0x746520, 0x74656E, 0x746572, 0x756E64, 0x756E67, 0x766572 - ]), - new NGramsPlusLang('en', [ - 0x206120, 0x20616E, 0x206265, 0x20636F, 0x20666F, 0x206861, 0x206865, 0x20696E, - 0x206D61, 0x206F66, 0x207072, 0x207265, 0x207361, 0x207374, 0x207468, 0x20746F, - 0x207768, 0x616964, 0x616C20, 0x616E20, 0x616E64, 0x617320, 0x617420, 0x617465, - 0x617469, 0x642061, 0x642074, 0x652061, 0x652073, 0x652074, 0x656420, 0x656E74, - 0x657220, 0x657320, 0x666F72, 0x686174, 0x686520, 0x686572, 0x696420, 0x696E20, - 0x696E67, 0x696F6E, 0x697320, 0x6E2061, 0x6E2074, 0x6E6420, 0x6E6720, 0x6E7420, - 0x6F6620, 0x6F6E20, 0x6F7220, 0x726520, 0x727320, 0x732061, 0x732074, 0x736169, - 0x737420, 0x742074, 0x746572, 0x746861, 0x746865, 0x74696F, 0x746F20, 0x747320 - ]), - new NGramsPlusLang('es', [ - 0x206120, 0x206361, 0x20636F, 0x206465, 0x20656C, 0x20656E, 0x206573, 0x20696E, - 0x206C61, 0x206C6F, 0x207061, 0x20706F, 0x207072, 0x207175, 0x207265, 0x207365, - 0x20756E, 0x207920, 0x612063, 0x612064, 0x612065, 0x61206C, 0x612070, 0x616369, - 0x61646F, 0x616C20, 0x617220, 0x617320, 0x6369F3, 0x636F6E, 0x646520, 0x64656C, - 0x646F20, 0x652064, 0x652065, 0x65206C, 0x656C20, 0x656E20, 0x656E74, 0x657320, - 0x657374, 0x69656E, 0x69F36E, 0x6C6120, 0x6C6F73, 0x6E2065, 0x6E7465, 0x6F2064, - 0x6F2065, 0x6F6E20, 0x6F7220, 0x6F7320, 0x706172, 0x717565, 0x726120, 0x726573, - 0x732064, 0x732065, 0x732070, 0x736520, 0x746520, 0x746F20, 0x756520, 0xF36E20 - ]), - new NGramsPlusLang('fr', [ - 0x206175, 0x20636F, 0x206461, 0x206465, 0x206475, 0x20656E, 0x206574, 0x206C61, - 0x206C65, 0x207061, 0x20706F, 0x207072, 0x207175, 0x207365, 0x20736F, 0x20756E, - 0x20E020, 0x616E74, 0x617469, 0x636520, 0x636F6E, 0x646520, 0x646573, 0x647520, - 0x652061, 0x652063, 0x652064, 0x652065, 0x65206C, 0x652070, 0x652073, 0x656E20, - 0x656E74, 0x657220, 0x657320, 0x657420, 0x657572, 0x696F6E, 0x697320, 0x697420, - 0x6C6120, 0x6C6520, 0x6C6573, 0x6D656E, 0x6E2064, 0x6E6520, 0x6E7320, 0x6E7420, - 0x6F6E20, 0x6F6E74, 0x6F7572, 0x717565, 0x72206C, 0x726520, 0x732061, 0x732064, - 0x732065, 0x73206C, 0x732070, 0x742064, 0x746520, 0x74696F, 0x756520, 0x757220 - ]), - new NGramsPlusLang('it', [ - 0x20616C, 0x206368, 0x20636F, 0x206465, 0x206469, 0x206520, 0x20696C, 0x20696E, - 0x206C61, 0x207065, 0x207072, 0x20756E, 0x612063, 0x612064, 0x612070, 0x612073, - 0x61746F, 0x636865, 0x636F6E, 0x64656C, 0x646920, 0x652061, 0x652063, 0x652064, - 0x652069, 0x65206C, 0x652070, 0x652073, 0x656C20, 0x656C6C, 0x656E74, 0x657220, - 0x686520, 0x692061, 0x692063, 0x692064, 0x692073, 0x696120, 0x696C20, 0x696E20, - 0x696F6E, 0x6C6120, 0x6C6520, 0x6C6920, 0x6C6C61, 0x6E6520, 0x6E6920, 0x6E6F20, - 0x6E7465, 0x6F2061, 0x6F2064, 0x6F2069, 0x6F2073, 0x6F6E20, 0x6F6E65, 0x706572, - 0x726120, 0x726520, 0x736920, 0x746120, 0x746520, 0x746920, 0x746F20, 0x7A696F - ]), - new NGramsPlusLang('nl', [ - 0x20616C, 0x206265, 0x206461, 0x206465, 0x206469, 0x206565, 0x20656E, 0x206765, - 0x206865, 0x20696E, 0x206D61, 0x206D65, 0x206F70, 0x207465, 0x207661, 0x207665, - 0x20766F, 0x207765, 0x207A69, 0x61616E, 0x616172, 0x616E20, 0x616E64, 0x617220, - 0x617420, 0x636874, 0x646520, 0x64656E, 0x646572, 0x652062, 0x652076, 0x65656E, - 0x656572, 0x656E20, 0x657220, 0x657273, 0x657420, 0x67656E, 0x686574, 0x696520, - 0x696E20, 0x696E67, 0x697320, 0x6E2062, 0x6E2064, 0x6E2065, 0x6E2068, 0x6E206F, - 0x6E2076, 0x6E6465, 0x6E6720, 0x6F6E64, 0x6F6F72, 0x6F7020, 0x6F7220, 0x736368, - 0x737465, 0x742064, 0x746520, 0x74656E, 0x746572, 0x76616E, 0x766572, 0x766F6F - ]), - new NGramsPlusLang('no', [ - 0x206174, 0x206176, 0x206465, 0x20656E, 0x206572, 0x20666F, 0x206861, 0x206920, - 0x206D65, 0x206F67, 0x2070E5, 0x207365, 0x20736B, 0x20736F, 0x207374, 0x207469, - 0x207669, 0x20E520, 0x616E64, 0x617220, 0x617420, 0x646520, 0x64656E, 0x646574, - 0x652073, 0x656420, 0x656E20, 0x656E65, 0x657220, 0x657265, 0x657420, 0x657474, - 0x666F72, 0x67656E, 0x696B6B, 0x696C20, 0x696E67, 0x6B6520, 0x6B6B65, 0x6C6520, - 0x6C6C65, 0x6D6564, 0x6D656E, 0x6E2073, 0x6E6520, 0x6E6720, 0x6E6765, 0x6E6E65, - 0x6F6720, 0x6F6D20, 0x6F7220, 0x70E520, 0x722073, 0x726520, 0x736F6D, 0x737465, - 0x742073, 0x746520, 0x74656E, 0x746572, 0x74696C, 0x747420, 0x747465, 0x766572 - ]), - new NGramsPlusLang('pt', [ - 0x206120, 0x20636F, 0x206461, 0x206465, 0x20646F, 0x206520, 0x206573, 0x206D61, - 0x206E6F, 0x206F20, 0x207061, 0x20706F, 0x207072, 0x207175, 0x207265, 0x207365, - 0x20756D, 0x612061, 0x612063, 0x612064, 0x612070, 0x616465, 0x61646F, 0x616C20, - 0x617220, 0x617261, 0x617320, 0x636F6D, 0x636F6E, 0x646120, 0x646520, 0x646F20, - 0x646F73, 0x652061, 0x652064, 0x656D20, 0x656E74, 0x657320, 0x657374, 0x696120, - 0x696361, 0x6D656E, 0x6E7465, 0x6E746F, 0x6F2061, 0x6F2063, 0x6F2064, 0x6F2065, - 0x6F2070, 0x6F7320, 0x706172, 0x717565, 0x726120, 0x726573, 0x732061, 0x732064, - 0x732065, 0x732070, 0x737461, 0x746520, 0x746F20, 0x756520, 0xE36F20, 0xE7E36F - ]), - new NGramsPlusLang('sv', [ - 0x206174, 0x206176, 0x206465, 0x20656E, 0x2066F6, 0x206861, 0x206920, 0x20696E, - 0x206B6F, 0x206D65, 0x206F63, 0x2070E5, 0x20736B, 0x20736F, 0x207374, 0x207469, - 0x207661, 0x207669, 0x20E472, 0x616465, 0x616E20, 0x616E64, 0x617220, 0x617474, - 0x636820, 0x646520, 0x64656E, 0x646572, 0x646574, 0x656420, 0x656E20, 0x657220, - 0x657420, 0x66F672, 0x67656E, 0x696C6C, 0x696E67, 0x6B6120, 0x6C6C20, 0x6D6564, - 0x6E2073, 0x6E6120, 0x6E6465, 0x6E6720, 0x6E6765, 0x6E696E, 0x6F6368, 0x6F6D20, - 0x6F6E20, 0x70E520, 0x722061, 0x722073, 0x726120, 0x736B61, 0x736F6D, 0x742073, - 0x746120, 0x746520, 0x746572, 0x74696C, 0x747420, 0x766172, 0xE47220, 0xF67220, - ]) - ]; - }; - - this.name = function(det) { - return (det && det.fC1Bytes) ? 'windows-1252' : 'ISO-8859-1'; - }; - }; - util.inherits(module.exports.ISO_8859_1, sbcs); - - - module.exports.ISO_8859_2 = function() { - this.byteMap = function() { - return [ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0xB1, 0x20, 0xB3, 0x20, 0xB5, 0xB6, 0x20, - 0x20, 0xB9, 0xBA, 0xBB, 0xBC, 0x20, 0xBE, 0xBF, - 0x20, 0xB1, 0x20, 0xB3, 0x20, 0xB5, 0xB6, 0xB7, - 0x20, 0xB9, 0xBA, 0xBB, 0xBC, 0x20, 0xBE, 0xBF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xDF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0x20 - ]; - }; - - this.ngrams = function() { - return [ - new NGramsPlusLang('cs', [ - 0x206120, 0x206279, 0x20646F, 0x206A65, 0x206E61, 0x206E65, 0x206F20, 0x206F64, - 0x20706F, 0x207072, 0x2070F8, 0x20726F, 0x207365, 0x20736F, 0x207374, 0x20746F, - 0x207620, 0x207679, 0x207A61, 0x612070, 0x636520, 0x636820, 0x652070, 0x652073, - 0x652076, 0x656D20, 0x656EED, 0x686F20, 0x686F64, 0x697374, 0x6A6520, 0x6B7465, - 0x6C6520, 0x6C6920, 0x6E6120, 0x6EE920, 0x6EEC20, 0x6EED20, 0x6F2070, 0x6F646E, - 0x6F6A69, 0x6F7374, 0x6F7520, 0x6F7661, 0x706F64, 0x706F6A, 0x70726F, 0x70F865, - 0x736520, 0x736F75, 0x737461, 0x737469, 0x73746E, 0x746572, 0x746EED, 0x746F20, - 0x752070, 0xBE6520, 0xE16EED, 0xE9686F, 0xED2070, 0xED2073, 0xED6D20, 0xF86564, - ]), - new NGramsPlusLang('hu', [ - 0x206120, 0x20617A, 0x206265, 0x206567, 0x20656C, 0x206665, 0x206861, 0x20686F, - 0x206973, 0x206B65, 0x206B69, 0x206BF6, 0x206C65, 0x206D61, 0x206D65, 0x206D69, - 0x206E65, 0x20737A, 0x207465, 0x20E973, 0x612061, 0x61206B, 0x61206D, 0x612073, - 0x616B20, 0x616E20, 0x617A20, 0x62616E, 0x62656E, 0x656779, 0x656B20, 0x656C20, - 0x656C65, 0x656D20, 0x656E20, 0x657265, 0x657420, 0x657465, 0x657474, 0x677920, - 0x686F67, 0x696E74, 0x697320, 0x6B2061, 0x6BF67A, 0x6D6567, 0x6D696E, 0x6E2061, - 0x6E616B, 0x6E656B, 0x6E656D, 0x6E7420, 0x6F6779, 0x732061, 0x737A65, 0x737A74, - 0x737AE1, 0x73E967, 0x742061, 0x747420, 0x74E173, 0x7A6572, 0xE16E20, 0xE97320, - ]), - new NGramsPlusLang('pl', [ - 0x20637A, 0x20646F, 0x206920, 0x206A65, 0x206B6F, 0x206D61, 0x206D69, 0x206E61, - 0x206E69, 0x206F64, 0x20706F, 0x207072, 0x207369, 0x207720, 0x207769, 0x207779, - 0x207A20, 0x207A61, 0x612070, 0x612077, 0x616E69, 0x636820, 0x637A65, 0x637A79, - 0x646F20, 0x647A69, 0x652070, 0x652073, 0x652077, 0x65207A, 0x65676F, 0x656A20, - 0x656D20, 0x656E69, 0x676F20, 0x696120, 0x696520, 0x69656A, 0x6B6120, 0x6B6920, - 0x6B6965, 0x6D6965, 0x6E6120, 0x6E6961, 0x6E6965, 0x6F2070, 0x6F7761, 0x6F7769, - 0x706F6C, 0x707261, 0x70726F, 0x70727A, 0x727A65, 0x727A79, 0x7369EA, 0x736B69, - 0x737461, 0x776965, 0x796368, 0x796D20, 0x7A6520, 0x7A6965, 0x7A7920, 0xF37720, - ]), - new NGramsPlusLang('ro', [ - 0x206120, 0x206163, 0x206361, 0x206365, 0x20636F, 0x206375, 0x206465, 0x206469, - 0x206C61, 0x206D61, 0x207065, 0x207072, 0x207365, 0x2073E3, 0x20756E, 0x20BA69, - 0x20EE6E, 0x612063, 0x612064, 0x617265, 0x617420, 0x617465, 0x617520, 0x636172, - 0x636F6E, 0x637520, 0x63E320, 0x646520, 0x652061, 0x652063, 0x652064, 0x652070, - 0x652073, 0x656120, 0x656920, 0x656C65, 0x656E74, 0x657374, 0x692061, 0x692063, - 0x692064, 0x692070, 0x696520, 0x696920, 0x696E20, 0x6C6120, 0x6C6520, 0x6C6F72, - 0x6C7569, 0x6E6520, 0x6E7472, 0x6F7220, 0x70656E, 0x726520, 0x726561, 0x727520, - 0x73E320, 0x746520, 0x747275, 0x74E320, 0x756920, 0x756C20, 0xBA6920, 0xEE6E20, - ]) - ]; - }; - - this.name = function(det) { - return (det && det.fC1Bytes) ? 'windows-1250' : 'ISO-8859-2'; - }; - }; - util.inherits(module.exports.ISO_8859_2, sbcs); - - - module.exports.ISO_8859_5 = function() { - this.byteMap = function() { - return [ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0x20, 0xFE, 0xFF, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0x20, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0x20, 0xFE, 0xFF - ]; - }; - - this.ngrams = function() { - return [ - 0x20D220, 0x20D2DE, 0x20D4DE, 0x20D7D0, 0x20D820, 0x20DAD0, 0x20DADE, 0x20DDD0, - 0x20DDD5, 0x20DED1, 0x20DFDE, 0x20DFE0, 0x20E0D0, 0x20E1DE, 0x20E1E2, 0x20E2DE, - 0x20E7E2, 0x20EDE2, 0xD0DDD8, 0xD0E2EC, 0xD3DE20, 0xD5DBEC, 0xD5DDD8, 0xD5E1E2, - 0xD5E220, 0xD820DF, 0xD8D520, 0xD8D820, 0xD8EF20, 0xDBD5DD, 0xDBD820, 0xDBECDD, - 0xDDD020, 0xDDD520, 0xDDD8D5, 0xDDD8EF, 0xDDDE20, 0xDDDED2, 0xDE20D2, 0xDE20DF, - 0xDE20E1, 0xDED220, 0xDED2D0, 0xDED3DE, 0xDED920, 0xDEDBEC, 0xDEDC20, 0xDEE1E2, - 0xDFDEDB, 0xDFE0D5, 0xDFE0D8, 0xDFE0DE, 0xE0D0D2, 0xE0D5D4, 0xE1E2D0, 0xE1E2D2, - 0xE1E2D8, 0xE1EF20, 0xE2D5DB, 0xE2DE20, 0xE2DEE0, 0xE2EC20, 0xE7E2DE, 0xEBE520 - ]; - }; - - this.name = function(det) { - return 'ISO-8859-5'; - }; - - this.language = function() { - return 'ru'; - }; - }; - util.inherits(module.exports.ISO_8859_5, sbcs); - - - module.exports.ISO_8859_6 = function() { - this.byteMap = function() { - return [ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, - 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, - 0xD8, 0xD9, 0xDA, 0x20, 0x20, 0x20, 0x20, 0x20, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 - ]; - }; - - this.ngrams = function() { - return [ - 0x20C7E4, 0x20C7E6, 0x20C8C7, 0x20D9E4, 0x20E1EA, 0x20E4E4, 0x20E5E6, 0x20E8C7, - 0xC720C7, 0xC7C120, 0xC7CA20, 0xC7D120, 0xC7E420, 0xC7E4C3, 0xC7E4C7, 0xC7E4C8, - 0xC7E4CA, 0xC7E4CC, 0xC7E4CD, 0xC7E4CF, 0xC7E4D3, 0xC7E4D9, 0xC7E4E2, 0xC7E4E5, - 0xC7E4E8, 0xC7E4EA, 0xC7E520, 0xC7E620, 0xC7E6CA, 0xC820C7, 0xC920C7, 0xC920E1, - 0xC920E4, 0xC920E5, 0xC920E8, 0xCA20C7, 0xCF20C7, 0xCFC920, 0xD120C7, 0xD1C920, - 0xD320C7, 0xD920C7, 0xD9E4E9, 0xE1EA20, 0xE420C7, 0xE4C920, 0xE4E920, 0xE4EA20, - 0xE520C7, 0xE5C720, 0xE5C920, 0xE5E620, 0xE620C7, 0xE720C7, 0xE7C720, 0xE8C7E4, - 0xE8E620, 0xE920C7, 0xEA20C7, 0xEA20E5, 0xEA20E8, 0xEAC920, 0xEAD120, 0xEAE620 - ]; - }; - - this.name = function(det) { - return 'ISO-8859-6'; - }; - - this.language = function() { - return 'ar'; - }; - }; - util.inherits(module.exports.ISO_8859_6, sbcs); - - - module.exports.ISO_8859_7 = function() { - this.byteMap = function() { - return [ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0xA1, 0xA2, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xDC, 0x20, - 0xDD, 0xDE, 0xDF, 0x20, 0xFC, 0x20, 0xFD, 0xFE, - 0xC0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0x20, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0xFB, 0xDC, 0xDD, 0xDE, 0xDF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0x20 - ]; - }; - - this.ngrams = function() { - return [ - 0x20E1ED, 0x20E1F0, 0x20E3E9, 0x20E4E9, 0x20E5F0, 0x20E720, 0x20EAE1, 0x20ECE5, - 0x20EDE1, 0x20EF20, 0x20F0E1, 0x20F0EF, 0x20F0F1, 0x20F3F4, 0x20F3F5, 0x20F4E7, - 0x20F4EF, 0xDFE120, 0xE120E1, 0xE120F4, 0xE1E920, 0xE1ED20, 0xE1F0FC, 0xE1F220, - 0xE3E9E1, 0xE5E920, 0xE5F220, 0xE720F4, 0xE7ED20, 0xE7F220, 0xE920F4, 0xE9E120, - 0xE9EADE, 0xE9F220, 0xEAE1E9, 0xEAE1F4, 0xECE520, 0xED20E1, 0xED20E5, 0xED20F0, - 0xEDE120, 0xEFF220, 0xEFF520, 0xF0EFF5, 0xF0F1EF, 0xF0FC20, 0xF220E1, 0xF220E5, - 0xF220EA, 0xF220F0, 0xF220F4, 0xF3E520, 0xF3E720, 0xF3F4EF, 0xF4E120, 0xF4E1E9, - 0xF4E7ED, 0xF4E7F2, 0xF4E9EA, 0xF4EF20, 0xF4EFF5, 0xF4F9ED, 0xF9ED20, 0xFEED20 - ]; - }; - - this.name = function(det) { - return (det && det.fC1Bytes) ? 'windows-1253' : 'ISO-8859-7'; - }; - - this.language = function() { - return 'el'; - }; - }; - util.inherits(module.exports.ISO_8859_7, sbcs); - - module.exports.ISO_8859_8 = function() { - - this.byteMap = function() { - return [ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0x20, 0x20, 0x20, 0x20, 0x20 - ]; - }; - - this.ngrams = function() { - return [ - new NGramsPlusLang('he', [ - 0x20E0E5, 0x20E0E7, 0x20E0E9, 0x20E0FA, 0x20E1E9, 0x20E1EE, 0x20E4E0, 0x20E4E5, - 0x20E4E9, 0x20E4EE, 0x20E4F2, 0x20E4F9, 0x20E4FA, 0x20ECE0, 0x20ECE4, 0x20EEE0, - 0x20F2EC, 0x20F9EC, 0xE0FA20, 0xE420E0, 0xE420E1, 0xE420E4, 0xE420EC, 0xE420EE, - 0xE420F9, 0xE4E5E0, 0xE5E020, 0xE5ED20, 0xE5EF20, 0xE5F820, 0xE5FA20, 0xE920E4, - 0xE9E420, 0xE9E5FA, 0xE9E9ED, 0xE9ED20, 0xE9EF20, 0xE9F820, 0xE9FA20, 0xEC20E0, - 0xEC20E4, 0xECE020, 0xECE420, 0xED20E0, 0xED20E1, 0xED20E4, 0xED20EC, 0xED20EE, - 0xED20F9, 0xEEE420, 0xEF20E4, 0xF0E420, 0xF0E920, 0xF0E9ED, 0xF2EC20, 0xF820E4, - 0xF8E9ED, 0xF9EC20, 0xFA20E0, 0xFA20E1, 0xFA20E4, 0xFA20EC, 0xFA20EE, 0xFA20F9, - ]), - new NGramsPlusLang('he', [ - 0x20E0E5, 0x20E0EC, 0x20E4E9, 0x20E4EC, 0x20E4EE, 0x20E4F0, 0x20E9F0, 0x20ECF2, - 0x20ECF9, 0x20EDE5, 0x20EDE9, 0x20EFE5, 0x20EFE9, 0x20F8E5, 0x20F8E9, 0x20FAE0, - 0x20FAE5, 0x20FAE9, 0xE020E4, 0xE020EC, 0xE020ED, 0xE020FA, 0xE0E420, 0xE0E5E4, - 0xE0EC20, 0xE0EE20, 0xE120E4, 0xE120ED, 0xE120FA, 0xE420E4, 0xE420E9, 0xE420EC, - 0xE420ED, 0xE420EF, 0xE420F8, 0xE420FA, 0xE4EC20, 0xE5E020, 0xE5E420, 0xE7E020, - 0xE9E020, 0xE9E120, 0xE9E420, 0xEC20E4, 0xEC20ED, 0xEC20FA, 0xECF220, 0xECF920, - 0xEDE9E9, 0xEDE9F0, 0xEDE9F8, 0xEE20E4, 0xEE20ED, 0xEE20FA, 0xEEE120, 0xEEE420, - 0xF2E420, 0xF920E4, 0xF920ED, 0xF920FA, 0xF9E420, 0xFAE020, 0xFAE420, 0xFAE5E9, - ]) - ]; - }; - - this.name = function(det) { - return (det && det.fC1Bytes) ? 'windows-1255' : 'ISO-8859-8'; - }; - - this.language = function() { - return 'he'; - }; - - }; - util.inherits(module.exports.ISO_8859_8, sbcs); - - - module.exports.ISO_8859_9 = function() { - this.byteMap = function() { - return [ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, - 0x20, 0x20, 0xBA, 0x20, 0x20, 0x20, 0x20, 0x20, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0x69, 0xFE, 0xDF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF - ]; - }; - - this.ngrams = function() { - return [ - 0x206261, 0x206269, 0x206275, 0x206461, 0x206465, 0x206765, 0x206861, 0x20696C, - 0x206B61, 0x206B6F, 0x206D61, 0x206F6C, 0x207361, 0x207461, 0x207665, 0x207961, - 0x612062, 0x616B20, 0x616C61, 0x616D61, 0x616E20, 0x616EFD, 0x617220, 0x617261, - 0x6172FD, 0x6173FD, 0x617961, 0x626972, 0x646120, 0x646520, 0x646920, 0x652062, - 0x65206B, 0x656469, 0x656E20, 0x657220, 0x657269, 0x657369, 0x696C65, 0x696E20, - 0x696E69, 0x697220, 0x6C616E, 0x6C6172, 0x6C6520, 0x6C6572, 0x6E2061, 0x6E2062, - 0x6E206B, 0x6E6461, 0x6E6465, 0x6E6520, 0x6E6920, 0x6E696E, 0x6EFD20, 0x72696E, - 0x72FD6E, 0x766520, 0x796120, 0x796F72, 0xFD6E20, 0xFD6E64, 0xFD6EFD, 0xFDF0FD - ]; - }; - - this.name = function(det) { - return (det && det.fC1Bytes) ? 'windows-1254' : 'ISO-8859-9'; - }; - - this.language = function() { - return 'tr'; - }; - }; - util.inherits(module.exports.ISO_8859_9, sbcs); - - - module.exports.windows_1251 = function() { - this.byteMap = function() { - return [ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x90, 0x83, 0x20, 0x83, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x9A, 0x20, 0x9C, 0x9D, 0x9E, 0x9F, - 0x90, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x9A, 0x20, 0x9C, 0x9D, 0x9E, 0x9F, - 0x20, 0xA2, 0xA2, 0xBC, 0x20, 0xB4, 0x20, 0x20, - 0xB8, 0x20, 0xBA, 0x20, 0x20, 0x20, 0x20, 0xBF, - 0x20, 0x20, 0xB3, 0xB3, 0xB4, 0xB5, 0x20, 0x20, - 0xB8, 0x20, 0xBA, 0x20, 0xBC, 0xBE, 0xBE, 0xBF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF - ]; - }; - - this.ngrams = function() { - return [ - 0x20E220, 0x20E2EE, 0x20E4EE, 0x20E7E0, 0x20E820, 0x20EAE0, 0x20EAEE, 0x20EDE0, - 0x20EDE5, 0x20EEE1, 0x20EFEE, 0x20EFF0, 0x20F0E0, 0x20F1EE, 0x20F1F2, 0x20F2EE, - 0x20F7F2, 0x20FDF2, 0xE0EDE8, 0xE0F2FC, 0xE3EE20, 0xE5EBFC, 0xE5EDE8, 0xE5F1F2, - 0xE5F220, 0xE820EF, 0xE8E520, 0xE8E820, 0xE8FF20, 0xEBE5ED, 0xEBE820, 0xEBFCED, - 0xEDE020, 0xEDE520, 0xEDE8E5, 0xEDE8FF, 0xEDEE20, 0xEDEEE2, 0xEE20E2, 0xEE20EF, - 0xEE20F1, 0xEEE220, 0xEEE2E0, 0xEEE3EE, 0xEEE920, 0xEEEBFC, 0xEEEC20, 0xEEF1F2, - 0xEFEEEB, 0xEFF0E5, 0xEFF0E8, 0xEFF0EE, 0xF0E0E2, 0xF0E5E4, 0xF1F2E0, 0xF1F2E2, - 0xF1F2E8, 0xF1FF20, 0xF2E5EB, 0xF2EE20, 0xF2EEF0, 0xF2FC20, 0xF7F2EE, 0xFBF520 - ]; - }; - - this.name = function(det) { - return 'windows-1251'; - }; - - this.language = function() { - return 'ru'; - }; - }; - util.inherits(module.exports.windows_1251, sbcs); - - - module.exports.windows_1256 = function() { - this.byteMap = function() { - return [ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x81, 0x20, 0x83, 0x20, 0x20, 0x20, 0x20, - 0x88, 0x20, 0x8A, 0x20, 0x9C, 0x8D, 0x8E, 0x8F, - 0x90, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x98, 0x20, 0x9A, 0x20, 0x9C, 0x20, 0x20, 0x9F, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, - 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0x20, - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0x20, 0x20, 0x20, 0x20, 0xF4, 0x20, 0x20, 0x20, - 0x20, 0xF9, 0x20, 0xFB, 0xFC, 0x20, 0x20, 0xFF - ]; - }; - - this.ngrams = function() { - return [ - 0x20C7E1, 0x20C7E4, 0x20C8C7, 0x20DAE1, 0x20DDED, 0x20E1E1, 0x20E3E4, 0x20E6C7, - 0xC720C7, 0xC7C120, 0xC7CA20, 0xC7D120, 0xC7E120, 0xC7E1C3, 0xC7E1C7, 0xC7E1C8, - 0xC7E1CA, 0xC7E1CC, 0xC7E1CD, 0xC7E1CF, 0xC7E1D3, 0xC7E1DA, 0xC7E1DE, 0xC7E1E3, - 0xC7E1E6, 0xC7E1ED, 0xC7E320, 0xC7E420, 0xC7E4CA, 0xC820C7, 0xC920C7, 0xC920DD, - 0xC920E1, 0xC920E3, 0xC920E6, 0xCA20C7, 0xCF20C7, 0xCFC920, 0xD120C7, 0xD1C920, - 0xD320C7, 0xDA20C7, 0xDAE1EC, 0xDDED20, 0xE120C7, 0xE1C920, 0xE1EC20, 0xE1ED20, - 0xE320C7, 0xE3C720, 0xE3C920, 0xE3E420, 0xE420C7, 0xE520C7, 0xE5C720, 0xE6C7E1, - 0xE6E420, 0xEC20C7, 0xED20C7, 0xED20E3, 0xED20E6, 0xEDC920, 0xEDD120, 0xEDE420 - ]; - }; - - this.name = function(det) { - return 'windows-1256'; - }; - - this.language = function() { - return 'ar'; - }; - }; - util.inherits(module.exports.windows_1256, sbcs); - - - module.exports.KOI8_R = function() { - this.byteMap = function() { - return [ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0xA3, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0xA3, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, - 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, - 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, - 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF - ]; - }; - - this.ngrams = function() { - return [ - 0x20C4CF, 0x20C920, 0x20CBC1, 0x20CBCF, 0x20CEC1, 0x20CEC5, 0x20CFC2, 0x20D0CF, - 0x20D0D2, 0x20D2C1, 0x20D3CF, 0x20D3D4, 0x20D4CF, 0x20D720, 0x20D7CF, 0x20DAC1, - 0x20DCD4, 0x20DED4, 0xC1CEC9, 0xC1D4D8, 0xC5CCD8, 0xC5CEC9, 0xC5D3D4, 0xC5D420, - 0xC7CF20, 0xC920D0, 0xC9C520, 0xC9C920, 0xC9D120, 0xCCC5CE, 0xCCC920, 0xCCD8CE, - 0xCEC120, 0xCEC520, 0xCEC9C5, 0xCEC9D1, 0xCECF20, 0xCECFD7, 0xCF20D0, 0xCF20D3, - 0xCF20D7, 0xCFC7CF, 0xCFCA20, 0xCFCCD8, 0xCFCD20, 0xCFD3D4, 0xCFD720, 0xCFD7C1, - 0xD0CFCC, 0xD0D2C5, 0xD0D2C9, 0xD0D2CF, 0xD2C1D7, 0xD2C5C4, 0xD3D120, 0xD3D4C1, - 0xD3D4C9, 0xD3D4D7, 0xD4C5CC, 0xD4CF20, 0xD4CFD2, 0xD4D820, 0xD9C820, 0xDED4CF - ]; - }; - - this.name = function(det) { - return 'KOI8-R'; - }; - - this.language = function() { - return 'ru'; - }; - }; - util.inherits(module.exports.KOI8_R, sbcs); - - - /* - module.exports.ISO_8859_7 = function() { - this.byteMap = function() { - return [ - - ]; - }; - - this.ngrams = function() { - return [ - - ]; - }; - - this.name = function(det) { - if (typeof det == 'undefined') - return 'ISO-8859-7'; - return det.fC1Bytes ? 'windows-1253' : 'ISO-8859-7'; - }; - - this.language = function() { - return 'el'; - }; - }; - util.inherits(module.exports.ISO_8859_7, sbcs); - */ -} (sbcs$1)); - -var sbcsExports = sbcs$1.exports; - -var iso2022$1 = {exports: {}}; - -(function (module) { - var util = require$$0$3, - Match = match; - - - /** - * This is a superclass for the individual detectors for - * each of the detectable members of the ISO 2022 family - * of encodings. - */ - - function ISO_2022() {} - - ISO_2022.prototype.match = function(det) { - - /** - * Matching function shared among the 2022 detectors JP, CN and KR - * Counts up the number of legal an unrecognized escape sequences in - * the sample of text, and computes a score based on the total number & - * the proportion that fit the encoding. - * - * - * @param text the byte buffer containing text to analyse - * @param textLen the size of the text in the byte. - * @param escapeSequences the byte escape sequences to test for. - * @return match quality, in the range of 0-100. - */ - - var i, j; - var escN; - var hits = 0; - var misses = 0; - var shifts = 0; - var quality; - - // TODO: refactor me - var text = det.fInputBytes; - var textLen = det.fInputLen; - - scanInput: - for (i = 0; i < textLen; i++) { - if (text[i] == 0x1b) { - checkEscapes: - for (escN = 0; escN < this.escapeSequences.length; escN++) { - var seq = this.escapeSequences[escN]; - - if ((textLen - i) < seq.length) - continue checkEscapes; - - for (j = 1; j < seq.length; j++) - if (seq[j] != text[i + j]) - continue checkEscapes; - - - hits++; - i += seq.length - 1; - continue scanInput; - } - - misses++; - } - - // Shift in/out - if (text[i] == 0x0e || text[i] == 0x0f) - shifts++; - - } - - if (hits == 0) - return null; - - // - // Initial quality is based on relative proportion of recongized vs. - // unrecognized escape sequences. - // All good: quality = 100; - // half or less good: quality = 0; - // linear inbetween. - quality = (100 * hits - 100 * misses) / (hits + misses); - - // Back off quality if there were too few escape sequences seen. - // Include shifts in this computation, so that KR does not get penalized - // for having only a single Escape sequence, but many shifts. - if (hits + shifts < 5) - quality -= (5 - (hits + shifts)) * 10; - - return quality <= 0 ? null : new Match(det, this, quality); - }; - - module.exports.ISO_2022_JP = function() { - this.name = function() { - return 'ISO-2022-JP'; - }; - this.escapeSequences = [ - [ 0x1b, 0x24, 0x28, 0x43 ], // KS X 1001:1992 - [ 0x1b, 0x24, 0x28, 0x44 ], // JIS X 212-1990 - [ 0x1b, 0x24, 0x40 ], // JIS C 6226-1978 - [ 0x1b, 0x24, 0x41 ], // GB 2312-80 - [ 0x1b, 0x24, 0x42 ], // JIS X 208-1983 - [ 0x1b, 0x26, 0x40 ], // JIS X 208 1990, 1997 - [ 0x1b, 0x28, 0x42 ], // ASCII - [ 0x1b, 0x28, 0x48 ], // JIS-Roman - [ 0x1b, 0x28, 0x49 ], // Half-width katakana - [ 0x1b, 0x28, 0x4a ], // JIS-Roman - [ 0x1b, 0x2e, 0x41 ], // ISO 8859-1 - [ 0x1b, 0x2e, 0x46 ] // ISO 8859-7 - ]; - }; - util.inherits(module.exports.ISO_2022_JP, ISO_2022); - - - - module.exports.ISO_2022_KR = function() { - this.name = function() { - return 'ISO-2022-KR'; - }; - this.escapeSequences = [ - [ 0x1b, 0x24, 0x29, 0x43 ] - ]; - }; - util.inherits(module.exports.ISO_2022_KR, ISO_2022); - - - - module.exports.ISO_2022_CN = function() { - this.name = function() { - return 'ISO-2022-CN'; - }; - this.escapeSequences = [ - [ 0x1b, 0x24, 0x29, 0x41 ], // GB 2312-80 - [ 0x1b, 0x24, 0x29, 0x47 ], // CNS 11643-1992 Plane 1 - [ 0x1b, 0x24, 0x2A, 0x48 ], // CNS 11643-1992 Plane 2 - [ 0x1b, 0x24, 0x29, 0x45 ], // ISO-IR-165 - [ 0x1b, 0x24, 0x2B, 0x49 ], // CNS 11643-1992 Plane 3 - [ 0x1b, 0x24, 0x2B, 0x4A ], // CNS 11643-1992 Plane 4 - [ 0x1b, 0x24, 0x2B, 0x4B ], // CNS 11643-1992 Plane 5 - [ 0x1b, 0x24, 0x2B, 0x4C ], // CNS 11643-1992 Plane 6 - [ 0x1b, 0x24, 0x2B, 0x4D ], // CNS 11643-1992 Plane 7 - [ 0x1b, 0x4e ], // SS2 - [ 0x1b, 0x4f ] // SS3 - ]; - }; - util.inherits(module.exports.ISO_2022_CN, ISO_2022); -} (iso2022$1)); - -var iso2022Exports = iso2022$1.exports; - -var fs$1 = require$$0$2; - -var utf8 = utf8$1, - unicode = unicodeExports, - mbcs = mbcsExports, - sbcs = sbcsExports, - iso2022 = iso2022Exports; - -var self$1 = commonjsGlobal; - -var recognisers = [ - new utf8, - new unicode.UTF_16BE, - new unicode.UTF_16LE, - new unicode.UTF_32BE, - new unicode.UTF_32LE, - new mbcs.sjis, - new mbcs.big5, - new mbcs.euc_jp, - new mbcs.euc_kr, - new mbcs.gb_18030, - new iso2022.ISO_2022_JP, - new iso2022.ISO_2022_KR, - new iso2022.ISO_2022_CN, - new sbcs.ISO_8859_1, - new sbcs.ISO_8859_2, - new sbcs.ISO_8859_5, - new sbcs.ISO_8859_6, - new sbcs.ISO_8859_7, - new sbcs.ISO_8859_8, - new sbcs.ISO_8859_9, - new sbcs.windows_1251, - new sbcs.windows_1256, - new sbcs.KOI8_R -]; - -chardet.detect = function(buffer, opts) { - - // Tally up the byte occurence statistics. - var fByteStats = []; - for (var i = 0; i < 256; i++) - fByteStats[i] = 0; - - for (var i = buffer.length - 1; i >= 0; i--) - fByteStats[buffer[i] & 0x00ff]++; - - var fC1Bytes = false; - for (var i = 0x80; i <= 0x9F; i += 1) { - if (fByteStats[i] != 0) { - fC1Bytes = true; - break; - } - } - - var context = { - fByteStats: fByteStats, - fC1Bytes: fC1Bytes, - fRawInput: buffer, - fRawLength: buffer.length, - fInputBytes: buffer, - fInputLen: buffer.length - }; - - var matches = recognisers.map(function(rec) { - return rec.match(context); - }).filter(function(match) { - return !!match; - }).sort(function(a, b) { - return b.confidence - a.confidence; - }); - - if (opts && opts.returnAllMatches === true) { - return matches; - } - else { - return matches.length > 0 ? matches[0].name : null; - } -}; - -chardet.detectFile = function(filepath, opts, cb) { - if (typeof opts === 'function') { - cb = opts; - opts = undefined; - } - - var fd; - - var handler = function(err, buffer) { - if (fd) { - fs$1.closeSync(fd); - } - - if (err) return cb(err, null); - cb(null, self$1.detect(buffer, opts)); - }; - - if (opts && opts.sampleSize) { - fd = fs$1.openSync(filepath, 'r'), - sample = Buffer.allocUnsafe(opts.sampleSize); - - fs$1.read(fd, sample, 0, opts.sampleSize, null, function(err) { - handler(err, sample); - }); - return; - } - - fs$1.readFile(filepath, handler); -}; - -chardet.detectFileSync = function(filepath, opts) { - if (opts && opts.sampleSize) { - var fd = fs$1.openSync(filepath, 'r'), - sample = Buffer.allocUnsafe(opts.sampleSize); - - fs$1.readSync(fd, sample, 0, opts.sampleSize); - fs$1.closeSync(fd); - return self$1.detect(sample, opts); - } - - return self$1.detect(fs$1.readFileSync(filepath), opts); -}; - -// Wrappers for the previous functions to return all encodings -chardet.detectAll = function(buffer, opts) { - if (typeof opts !== 'object') { - opts = {}; - } - opts.returnAllMatches = true; - return self$1.detect(buffer, opts); -}; - -chardet.detectFileAll = function(filepath, opts, cb) { - if (typeof opts === 'function') { - cb = opts; - opts = undefined; - } - if (typeof opts !== 'object') { - opts = {}; - } - opts.returnAllMatches = true; - self$1.detectFile(filepath, opts, cb); -}; - -chardet.detectFileAllSync = function(filepath, opts) { - if (typeof opts !== 'object') { - opts = {}; - } - opts.returnAllMatches = true; - return self$1.detectFileSync(filepath, opts); -}; - -var lib = {exports: {}}; - -/* eslint-disable node/no-deprecated-api */ - -var buffer = require$$0$4; -var Buffer$1 = buffer.Buffer; - -var safer = {}; - -var key; - -for (key in buffer) { - if (!buffer.hasOwnProperty(key)) continue - if (key === 'SlowBuffer' || key === 'Buffer') continue - safer[key] = buffer[key]; -} - -var Safer = safer.Buffer = {}; -for (key in Buffer$1) { - if (!Buffer$1.hasOwnProperty(key)) continue - if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue - Safer[key] = Buffer$1[key]; -} - -safer.Buffer.prototype = Buffer$1.prototype; - -if (!Safer.from || Safer.from === Uint8Array.from) { - Safer.from = function (value, encodingOrOffset, length) { - if (typeof value === 'number') { - throw new TypeError('The "value" argument must not be of type number. Received type ' + typeof value) - } - if (value && typeof value.length === 'undefined') { - throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value) - } - return Buffer$1(value, encodingOrOffset, length) - }; -} - -if (!Safer.alloc) { - Safer.alloc = function (size, fill, encoding) { - if (typeof size !== 'number') { - throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size) - } - if (size < 0 || size >= 2 * (1 << 30)) { - throw new RangeError('The value "' + size + '" is invalid for option "size"') - } - var buf = Buffer$1(size); - if (!fill || fill.length === 0) { - buf.fill(0); - } else if (typeof encoding === 'string') { - buf.fill(fill, encoding); - } else { - buf.fill(fill); - } - return buf - }; -} - -if (!safer.kStringMaxLength) { - try { - safer.kStringMaxLength = process.binding('buffer').kStringMaxLength; - } catch (e) { - // we can't determine kStringMaxLength in environments where process.binding - // is unsupported, so let's not set it - } -} - -if (!safer.constants) { - safer.constants = { - MAX_LENGTH: safer.kMaxLength - }; - if (safer.kStringMaxLength) { - safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength; - } -} - -var safer_1 = safer; - -var bomHandling = {}; - -var BOMChar = '\uFEFF'; - -bomHandling.PrependBOM = PrependBOMWrapper; -function PrependBOMWrapper(encoder, options) { - this.encoder = encoder; - this.addBOM = true; -} - -PrependBOMWrapper.prototype.write = function(str) { - if (this.addBOM) { - str = BOMChar + str; - this.addBOM = false; - } - - return this.encoder.write(str); -}; - -PrependBOMWrapper.prototype.end = function() { - return this.encoder.end(); -}; - - -//------------------------------------------------------------------------------ - -bomHandling.StripBOM = StripBOMWrapper; -function StripBOMWrapper(decoder, options) { - this.decoder = decoder; - this.pass = false; - this.options = options || {}; -} - -StripBOMWrapper.prototype.write = function(buf) { - var res = this.decoder.write(buf); - if (this.pass || !res) - return res; - - if (res[0] === BOMChar) { - res = res.slice(1); - if (typeof this.options.stripBOM === 'function') - this.options.stripBOM(); - } - - this.pass = true; - return res; -}; - -StripBOMWrapper.prototype.end = function() { - return this.decoder.end(); -}; - -var encodings = {}; - -var internal; -var hasRequiredInternal; - -function requireInternal () { - if (hasRequiredInternal) return internal; - hasRequiredInternal = 1; - var Buffer = safer_1.Buffer; - - // Export Node.js internal encodings. - - internal = { - // Encodings - utf8: { type: "_internal", bomAware: true}, - cesu8: { type: "_internal", bomAware: true}, - unicode11utf8: "utf8", - - ucs2: { type: "_internal", bomAware: true}, - utf16le: "ucs2", - - binary: { type: "_internal" }, - base64: { type: "_internal" }, - hex: { type: "_internal" }, - - // Codec. - _internal: InternalCodec, - }; - - //------------------------------------------------------------------------------ - - function InternalCodec(codecOptions, iconv) { - this.enc = codecOptions.encodingName; - this.bomAware = codecOptions.bomAware; - - if (this.enc === "base64") - this.encoder = InternalEncoderBase64; - else if (this.enc === "cesu8") { - this.enc = "utf8"; // Use utf8 for decoding. - this.encoder = InternalEncoderCesu8; - - // Add decoder for versions of Node not supporting CESU-8 - if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '💩') { - this.decoder = InternalDecoderCesu8; - this.defaultCharUnicode = iconv.defaultCharUnicode; - } - } - } - - InternalCodec.prototype.encoder = InternalEncoder; - InternalCodec.prototype.decoder = InternalDecoder; - - //------------------------------------------------------------------------------ - - // We use node.js internal decoder. Its signature is the same as ours. - var StringDecoder = require$$1$3.StringDecoder; - - if (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method. - StringDecoder.prototype.end = function() {}; - - - function InternalDecoder(options, codec) { - StringDecoder.call(this, codec.enc); - } - - InternalDecoder.prototype = StringDecoder.prototype; - - - //------------------------------------------------------------------------------ - // Encoder is mostly trivial - - function InternalEncoder(options, codec) { - this.enc = codec.enc; - } - - InternalEncoder.prototype.write = function(str) { - return Buffer.from(str, this.enc); - }; - - InternalEncoder.prototype.end = function() { - }; - - - //------------------------------------------------------------------------------ - // Except base64 encoder, which must keep its state. - - function InternalEncoderBase64(options, codec) { - this.prevStr = ''; - } - - InternalEncoderBase64.prototype.write = function(str) { - str = this.prevStr + str; - var completeQuads = str.length - (str.length % 4); - this.prevStr = str.slice(completeQuads); - str = str.slice(0, completeQuads); - - return Buffer.from(str, "base64"); - }; - - InternalEncoderBase64.prototype.end = function() { - return Buffer.from(this.prevStr, "base64"); - }; - - - //------------------------------------------------------------------------------ - // CESU-8 encoder is also special. - - function InternalEncoderCesu8(options, codec) { - } - - InternalEncoderCesu8.prototype.write = function(str) { - var buf = Buffer.alloc(str.length * 3), bufIdx = 0; - for (var i = 0; i < str.length; i++) { - var charCode = str.charCodeAt(i); - // Naive implementation, but it works because CESU-8 is especially easy - // to convert from UTF-16 (which all JS strings are encoded in). - if (charCode < 0x80) - buf[bufIdx++] = charCode; - else if (charCode < 0x800) { - buf[bufIdx++] = 0xC0 + (charCode >>> 6); - buf[bufIdx++] = 0x80 + (charCode & 0x3f); - } - else { // charCode will always be < 0x10000 in javascript. - buf[bufIdx++] = 0xE0 + (charCode >>> 12); - buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f); - buf[bufIdx++] = 0x80 + (charCode & 0x3f); - } - } - return buf.slice(0, bufIdx); - }; - - InternalEncoderCesu8.prototype.end = function() { - }; - - //------------------------------------------------------------------------------ - // CESU-8 decoder is not implemented in Node v4.0+ - - function InternalDecoderCesu8(options, codec) { - this.acc = 0; - this.contBytes = 0; - this.accBytes = 0; - this.defaultCharUnicode = codec.defaultCharUnicode; - } - - InternalDecoderCesu8.prototype.write = function(buf) { - var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, - res = ''; - for (var i = 0; i < buf.length; i++) { - var curByte = buf[i]; - if ((curByte & 0xC0) !== 0x80) { // Leading byte - if (contBytes > 0) { // Previous code is invalid - res += this.defaultCharUnicode; - contBytes = 0; - } - - if (curByte < 0x80) { // Single-byte code - res += String.fromCharCode(curByte); - } else if (curByte < 0xE0) { // Two-byte code - acc = curByte & 0x1F; - contBytes = 1; accBytes = 1; - } else if (curByte < 0xF0) { // Three-byte code - acc = curByte & 0x0F; - contBytes = 2; accBytes = 1; - } else { // Four or more are not supported for CESU-8. - res += this.defaultCharUnicode; - } - } else { // Continuation byte - if (contBytes > 0) { // We're waiting for it. - acc = (acc << 6) | (curByte & 0x3f); - contBytes--; accBytes++; - if (contBytes === 0) { - // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80) - if (accBytes === 2 && acc < 0x80 && acc > 0) - res += this.defaultCharUnicode; - else if (accBytes === 3 && acc < 0x800) - res += this.defaultCharUnicode; - else - // Actually add character. - res += String.fromCharCode(acc); - } - } else { // Unexpected continuation byte - res += this.defaultCharUnicode; - } - } - } - this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes; - return res; - }; - - InternalDecoderCesu8.prototype.end = function() { - var res = 0; - if (this.contBytes > 0) - res += this.defaultCharUnicode; - return res; - }; - return internal; -} - -var utf16 = {}; - -var hasRequiredUtf16; - -function requireUtf16 () { - if (hasRequiredUtf16) return utf16; - hasRequiredUtf16 = 1; - var Buffer = safer_1.Buffer; - - // Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js - - // == UTF16-BE codec. ========================================================== - - utf16.utf16be = Utf16BECodec; - function Utf16BECodec() { - } - - Utf16BECodec.prototype.encoder = Utf16BEEncoder; - Utf16BECodec.prototype.decoder = Utf16BEDecoder; - Utf16BECodec.prototype.bomAware = true; - - - // -- Encoding - - function Utf16BEEncoder() { - } - - Utf16BEEncoder.prototype.write = function(str) { - var buf = Buffer.from(str, 'ucs2'); - for (var i = 0; i < buf.length; i += 2) { - var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp; - } - return buf; - }; - - Utf16BEEncoder.prototype.end = function() { - }; - - - // -- Decoding - - function Utf16BEDecoder() { - this.overflowByte = -1; - } - - Utf16BEDecoder.prototype.write = function(buf) { - if (buf.length == 0) - return ''; - - var buf2 = Buffer.alloc(buf.length + 1), - i = 0, j = 0; - - if (this.overflowByte !== -1) { - buf2[0] = buf[0]; - buf2[1] = this.overflowByte; - i = 1; j = 2; - } - - for (; i < buf.length-1; i += 2, j+= 2) { - buf2[j] = buf[i+1]; - buf2[j+1] = buf[i]; - } - - this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1; - - return buf2.slice(0, j).toString('ucs2'); - }; - - Utf16BEDecoder.prototype.end = function() { - }; - - - // == UTF-16 codec ============================================================= - // Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic. - // Defaults to UTF-16LE, as it's prevalent and default in Node. - // http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le - // Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'}); - - // Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false). - - utf16.utf16 = Utf16Codec; - function Utf16Codec(codecOptions, iconv) { - this.iconv = iconv; - } - - Utf16Codec.prototype.encoder = Utf16Encoder; - Utf16Codec.prototype.decoder = Utf16Decoder; - - - // -- Encoding (pass-through) - - function Utf16Encoder(options, codec) { - options = options || {}; - if (options.addBOM === undefined) - options.addBOM = true; - this.encoder = codec.iconv.getEncoder('utf-16le', options); - } - - Utf16Encoder.prototype.write = function(str) { - return this.encoder.write(str); - }; - - Utf16Encoder.prototype.end = function() { - return this.encoder.end(); - }; - - - // -- Decoding - - function Utf16Decoder(options, codec) { - this.decoder = null; - this.initialBytes = []; - this.initialBytesLen = 0; - - this.options = options || {}; - this.iconv = codec.iconv; - } - - Utf16Decoder.prototype.write = function(buf) { - if (!this.decoder) { - // Codec is not chosen yet. Accumulate initial bytes. - this.initialBytes.push(buf); - this.initialBytesLen += buf.length; - - if (this.initialBytesLen < 16) // We need more bytes to use space heuristic (see below) - return ''; - - // We have enough bytes -> detect endianness. - var buf = Buffer.concat(this.initialBytes), - encoding = detectEncoding(buf, this.options.defaultEncoding); - this.decoder = this.iconv.getDecoder(encoding, this.options); - this.initialBytes.length = this.initialBytesLen = 0; - } - - return this.decoder.write(buf); - }; - - Utf16Decoder.prototype.end = function() { - if (!this.decoder) { - var buf = Buffer.concat(this.initialBytes), - encoding = detectEncoding(buf, this.options.defaultEncoding); - this.decoder = this.iconv.getDecoder(encoding, this.options); - - var res = this.decoder.write(buf), - trail = this.decoder.end(); - - return trail ? (res + trail) : res; - } - return this.decoder.end(); - }; - - function detectEncoding(buf, defaultEncoding) { - var enc = defaultEncoding || 'utf-16le'; - - if (buf.length >= 2) { - // Check BOM. - if (buf[0] == 0xFE && buf[1] == 0xFF) // UTF-16BE BOM - enc = 'utf-16be'; - else if (buf[0] == 0xFF && buf[1] == 0xFE) // UTF-16LE BOM - enc = 'utf-16le'; - else { - // No BOM found. Try to deduce encoding from initial content. - // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon. - // So, we count ASCII as if it was LE or BE, and decide from that. - var asciiCharsLE = 0, asciiCharsBE = 0, // Counts of chars in both positions - _len = Math.min(buf.length - (buf.length % 2), 64); // Len is always even. - - for (var i = 0; i < _len; i += 2) { - if (buf[i] === 0 && buf[i+1] !== 0) asciiCharsBE++; - if (buf[i] !== 0 && buf[i+1] === 0) asciiCharsLE++; - } - - if (asciiCharsBE > asciiCharsLE) - enc = 'utf-16be'; - else if (asciiCharsBE < asciiCharsLE) - enc = 'utf-16le'; - } - } - - return enc; - } - return utf16; -} - -var utf7 = {}; - -var hasRequiredUtf7; - -function requireUtf7 () { - if (hasRequiredUtf7) return utf7; - hasRequiredUtf7 = 1; - var Buffer = safer_1.Buffer; - - // UTF-7 codec, according to https://tools.ietf.org/html/rfc2152 - // See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3 - - utf7.utf7 = Utf7Codec; - utf7.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7 - function Utf7Codec(codecOptions, iconv) { - this.iconv = iconv; - } - Utf7Codec.prototype.encoder = Utf7Encoder; - Utf7Codec.prototype.decoder = Utf7Decoder; - Utf7Codec.prototype.bomAware = true; - - - // -- Encoding - - var nonDirectChars = /[^A-Za-z0-9'\(\),-\.\/:\? \n\r\t]+/g; - - function Utf7Encoder(options, codec) { - this.iconv = codec.iconv; - } - - Utf7Encoder.prototype.write = function(str) { - // Naive implementation. - // Non-direct chars are encoded as "+-"; single "+" char is encoded as "+-". - return Buffer.from(str.replace(nonDirectChars, function(chunk) { - return "+" + (chunk === '+' ? '' : - this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) - + "-"; - }.bind(this))); - }; - - Utf7Encoder.prototype.end = function() { - }; - - - // -- Decoding - - function Utf7Decoder(options, codec) { - this.iconv = codec.iconv; - this.inBase64 = false; - this.base64Accum = ''; - } - - var base64Regex = /[A-Za-z0-9\/+]/; - var base64Chars = []; - for (var i = 0; i < 256; i++) - base64Chars[i] = base64Regex.test(String.fromCharCode(i)); - - var plusChar = '+'.charCodeAt(0), - minusChar = '-'.charCodeAt(0), - andChar = '&'.charCodeAt(0); - - Utf7Decoder.prototype.write = function(buf) { - var res = "", lastI = 0, - inBase64 = this.inBase64, - base64Accum = this.base64Accum; - - // The decoder is more involved as we must handle chunks in stream. - - for (var i = 0; i < buf.length; i++) { - if (!inBase64) { // We're in direct mode. - // Write direct chars until '+' - if (buf[i] == plusChar) { - res += this.iconv.decode(buf.slice(lastI, i), "ascii"); // Write direct chars. - lastI = i+1; - inBase64 = true; - } - } else { // We decode base64. - if (!base64Chars[buf[i]]) { // Base64 ended. - if (i == lastI && buf[i] == minusChar) {// "+-" -> "+" - res += "+"; - } else { - var b64str = base64Accum + buf.slice(lastI, i).toString(); - res += this.iconv.decode(Buffer.from(b64str, 'base64'), "utf16-be"); - } - - if (buf[i] != minusChar) // Minus is absorbed after base64. - i--; - - lastI = i+1; - inBase64 = false; - base64Accum = ''; - } - } - } - - if (!inBase64) { - res += this.iconv.decode(buf.slice(lastI), "ascii"); // Write direct chars. - } else { - var b64str = base64Accum + buf.slice(lastI).toString(); - - var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars. - base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future. - b64str = b64str.slice(0, canBeDecoded); - - res += this.iconv.decode(Buffer.from(b64str, 'base64'), "utf16-be"); - } - - this.inBase64 = inBase64; - this.base64Accum = base64Accum; - - return res; - }; - - Utf7Decoder.prototype.end = function() { - var res = ""; - if (this.inBase64 && this.base64Accum.length > 0) - res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), "utf16-be"); - - this.inBase64 = false; - this.base64Accum = ''; - return res; - }; - - - // UTF-7-IMAP codec. - // RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3) - // Differences: - // * Base64 part is started by "&" instead of "+" - // * Direct characters are 0x20-0x7E, except "&" (0x26) - // * In Base64, "," is used instead of "/" - // * Base64 must not be used to represent direct characters. - // * No implicit shift back from Base64 (should always end with '-') - // * String must end in non-shifted position. - // * "-&" while in base64 is not allowed. - - - utf7.utf7imap = Utf7IMAPCodec; - function Utf7IMAPCodec(codecOptions, iconv) { - this.iconv = iconv; - } - Utf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder; - Utf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder; - Utf7IMAPCodec.prototype.bomAware = true; - - - // -- Encoding - - function Utf7IMAPEncoder(options, codec) { - this.iconv = codec.iconv; - this.inBase64 = false; - this.base64Accum = Buffer.alloc(6); - this.base64AccumIdx = 0; - } - - Utf7IMAPEncoder.prototype.write = function(str) { - var inBase64 = this.inBase64, - base64Accum = this.base64Accum, - base64AccumIdx = this.base64AccumIdx, - buf = Buffer.alloc(str.length*5 + 10), bufIdx = 0; - - for (var i = 0; i < str.length; i++) { - var uChar = str.charCodeAt(i); - if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'. - if (inBase64) { - if (base64AccumIdx > 0) { - bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\//g, ',').replace(/=+$/, ''), bufIdx); - base64AccumIdx = 0; - } - - buf[bufIdx++] = minusChar; // Write '-', then go to direct mode. - inBase64 = false; - } - - if (!inBase64) { - buf[bufIdx++] = uChar; // Write direct character - - if (uChar === andChar) // Ampersand -> '&-' - buf[bufIdx++] = minusChar; - } - - } else { // Non-direct character - if (!inBase64) { - buf[bufIdx++] = andChar; // Write '&', then go to base64 mode. - inBase64 = true; - } - if (inBase64) { - base64Accum[base64AccumIdx++] = uChar >> 8; - base64Accum[base64AccumIdx++] = uChar & 0xFF; - - if (base64AccumIdx == base64Accum.length) { - bufIdx += buf.write(base64Accum.toString('base64').replace(/\//g, ','), bufIdx); - base64AccumIdx = 0; - } - } - } - } - - this.inBase64 = inBase64; - this.base64AccumIdx = base64AccumIdx; - - return buf.slice(0, bufIdx); - }; - - Utf7IMAPEncoder.prototype.end = function() { - var buf = Buffer.alloc(10), bufIdx = 0; - if (this.inBase64) { - if (this.base64AccumIdx > 0) { - bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\//g, ',').replace(/=+$/, ''), bufIdx); - this.base64AccumIdx = 0; - } - - buf[bufIdx++] = minusChar; // Write '-', then go to direct mode. - this.inBase64 = false; - } - - return buf.slice(0, bufIdx); - }; - - - // -- Decoding - - function Utf7IMAPDecoder(options, codec) { - this.iconv = codec.iconv; - this.inBase64 = false; - this.base64Accum = ''; - } - - var base64IMAPChars = base64Chars.slice(); - base64IMAPChars[','.charCodeAt(0)] = true; - - Utf7IMAPDecoder.prototype.write = function(buf) { - var res = "", lastI = 0, - inBase64 = this.inBase64, - base64Accum = this.base64Accum; - - // The decoder is more involved as we must handle chunks in stream. - // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end). - - for (var i = 0; i < buf.length; i++) { - if (!inBase64) { // We're in direct mode. - // Write direct chars until '&' - if (buf[i] == andChar) { - res += this.iconv.decode(buf.slice(lastI, i), "ascii"); // Write direct chars. - lastI = i+1; - inBase64 = true; - } - } else { // We decode base64. - if (!base64IMAPChars[buf[i]]) { // Base64 ended. - if (i == lastI && buf[i] == minusChar) { // "&-" -> "&" - res += "&"; - } else { - var b64str = base64Accum + buf.slice(lastI, i).toString().replace(/,/g, '/'); - res += this.iconv.decode(Buffer.from(b64str, 'base64'), "utf16-be"); - } - - if (buf[i] != minusChar) // Minus may be absorbed after base64. - i--; - - lastI = i+1; - inBase64 = false; - base64Accum = ''; - } - } - } - - if (!inBase64) { - res += this.iconv.decode(buf.slice(lastI), "ascii"); // Write direct chars. - } else { - var b64str = base64Accum + buf.slice(lastI).toString().replace(/,/g, '/'); - - var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars. - base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future. - b64str = b64str.slice(0, canBeDecoded); - - res += this.iconv.decode(Buffer.from(b64str, 'base64'), "utf16-be"); - } - - this.inBase64 = inBase64; - this.base64Accum = base64Accum; - - return res; - }; - - Utf7IMAPDecoder.prototype.end = function() { - var res = ""; - if (this.inBase64 && this.base64Accum.length > 0) - res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), "utf16-be"); - - this.inBase64 = false; - this.base64Accum = ''; - return res; - }; - return utf7; -} - -var sbcsCodec = {}; - -var hasRequiredSbcsCodec; - -function requireSbcsCodec () { - if (hasRequiredSbcsCodec) return sbcsCodec; - hasRequiredSbcsCodec = 1; - var Buffer = safer_1.Buffer; - - // Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that - // correspond to encoded bytes (if 128 - then lower half is ASCII). - - sbcsCodec._sbcs = SBCSCodec; - function SBCSCodec(codecOptions, iconv) { - if (!codecOptions) - throw new Error("SBCS codec is called without the data.") - - // Prepare char buffer for decoding. - if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256)) - throw new Error("Encoding '"+codecOptions.type+"' has incorrect 'chars' (must be of len 128 or 256)"); - - if (codecOptions.chars.length === 128) { - var asciiString = ""; - for (var i = 0; i < 128; i++) - asciiString += String.fromCharCode(i); - codecOptions.chars = asciiString + codecOptions.chars; - } - - this.decodeBuf = Buffer.from(codecOptions.chars, 'ucs2'); - - // Encoding buffer. - var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0)); - - for (var i = 0; i < codecOptions.chars.length; i++) - encodeBuf[codecOptions.chars.charCodeAt(i)] = i; - - this.encodeBuf = encodeBuf; - } - - SBCSCodec.prototype.encoder = SBCSEncoder; - SBCSCodec.prototype.decoder = SBCSDecoder; - - - function SBCSEncoder(options, codec) { - this.encodeBuf = codec.encodeBuf; - } - - SBCSEncoder.prototype.write = function(str) { - var buf = Buffer.alloc(str.length); - for (var i = 0; i < str.length; i++) - buf[i] = this.encodeBuf[str.charCodeAt(i)]; - - return buf; - }; - - SBCSEncoder.prototype.end = function() { - }; - - - function SBCSDecoder(options, codec) { - this.decodeBuf = codec.decodeBuf; - } - - SBCSDecoder.prototype.write = function(buf) { - // Strings are immutable in JS -> we use ucs2 buffer to speed up computations. - var decodeBuf = this.decodeBuf; - var newBuf = Buffer.alloc(buf.length*2); - var idx1 = 0, idx2 = 0; - for (var i = 0; i < buf.length; i++) { - idx1 = buf[i]*2; idx2 = i*2; - newBuf[idx2] = decodeBuf[idx1]; - newBuf[idx2+1] = decodeBuf[idx1+1]; - } - return newBuf.toString('ucs2'); - }; - - SBCSDecoder.prototype.end = function() { - }; - return sbcsCodec; -} - -var sbcsData; -var hasRequiredSbcsData; - -function requireSbcsData () { - if (hasRequiredSbcsData) return sbcsData; - hasRequiredSbcsData = 1; - - // Manually added data to be used by sbcs codec in addition to generated one. - - sbcsData = { - // Not supported by iconv, not sure why. - "10029": "maccenteuro", - "maccenteuro": { - "type": "_sbcs", - "chars": "ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ" - }, - - "808": "cp808", - "ibm808": "cp808", - "cp808": { - "type": "_sbcs", - "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№€■ " - }, - - "mik": { - "type": "_sbcs", - "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя└┴┬├─┼╣║╚╔╩╦╠═╬┐░▒▓│┤№§╗╝┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " - }, - - // Aliases of generated encodings. - "ascii8bit": "ascii", - "usascii": "ascii", - "ansix34": "ascii", - "ansix341968": "ascii", - "ansix341986": "ascii", - "csascii": "ascii", - "cp367": "ascii", - "ibm367": "ascii", - "isoir6": "ascii", - "iso646us": "ascii", - "iso646irv": "ascii", - "us": "ascii", - - "latin1": "iso88591", - "latin2": "iso88592", - "latin3": "iso88593", - "latin4": "iso88594", - "latin5": "iso88599", - "latin6": "iso885910", - "latin7": "iso885913", - "latin8": "iso885914", - "latin9": "iso885915", - "latin10": "iso885916", - - "csisolatin1": "iso88591", - "csisolatin2": "iso88592", - "csisolatin3": "iso88593", - "csisolatin4": "iso88594", - "csisolatincyrillic": "iso88595", - "csisolatinarabic": "iso88596", - "csisolatingreek" : "iso88597", - "csisolatinhebrew": "iso88598", - "csisolatin5": "iso88599", - "csisolatin6": "iso885910", - - "l1": "iso88591", - "l2": "iso88592", - "l3": "iso88593", - "l4": "iso88594", - "l5": "iso88599", - "l6": "iso885910", - "l7": "iso885913", - "l8": "iso885914", - "l9": "iso885915", - "l10": "iso885916", - - "isoir14": "iso646jp", - "isoir57": "iso646cn", - "isoir100": "iso88591", - "isoir101": "iso88592", - "isoir109": "iso88593", - "isoir110": "iso88594", - "isoir144": "iso88595", - "isoir127": "iso88596", - "isoir126": "iso88597", - "isoir138": "iso88598", - "isoir148": "iso88599", - "isoir157": "iso885910", - "isoir166": "tis620", - "isoir179": "iso885913", - "isoir199": "iso885914", - "isoir203": "iso885915", - "isoir226": "iso885916", - - "cp819": "iso88591", - "ibm819": "iso88591", - - "cyrillic": "iso88595", - - "arabic": "iso88596", - "arabic8": "iso88596", - "ecma114": "iso88596", - "asmo708": "iso88596", - - "greek" : "iso88597", - "greek8" : "iso88597", - "ecma118" : "iso88597", - "elot928" : "iso88597", - - "hebrew": "iso88598", - "hebrew8": "iso88598", - - "turkish": "iso88599", - "turkish8": "iso88599", - - "thai": "iso885911", - "thai8": "iso885911", - - "celtic": "iso885914", - "celtic8": "iso885914", - "isoceltic": "iso885914", - - "tis6200": "tis620", - "tis62025291": "tis620", - "tis62025330": "tis620", - - "10000": "macroman", - "10006": "macgreek", - "10007": "maccyrillic", - "10079": "maciceland", - "10081": "macturkish", - - "cspc8codepage437": "cp437", - "cspc775baltic": "cp775", - "cspc850multilingual": "cp850", - "cspcp852": "cp852", - "cspc862latinhebrew": "cp862", - "cpgr": "cp869", - - "msee": "cp1250", - "mscyrl": "cp1251", - "msansi": "cp1252", - "msgreek": "cp1253", - "msturk": "cp1254", - "mshebr": "cp1255", - "msarab": "cp1256", - "winbaltrim": "cp1257", - - "cp20866": "koi8r", - "20866": "koi8r", - "ibm878": "koi8r", - "cskoi8r": "koi8r", - - "cp21866": "koi8u", - "21866": "koi8u", - "ibm1168": "koi8u", - - "strk10482002": "rk1048", - - "tcvn5712": "tcvn", - "tcvn57121": "tcvn", - - "gb198880": "iso646cn", - "cn": "iso646cn", - - "csiso14jisc6220ro": "iso646jp", - "jisc62201969ro": "iso646jp", - "jp": "iso646jp", - - "cshproman8": "hproman8", - "r8": "hproman8", - "roman8": "hproman8", - "xroman8": "hproman8", - "ibm1051": "hproman8", - - "mac": "macintosh", - "csmacintosh": "macintosh", - }; - return sbcsData; -} - -var sbcsDataGenerated; -var hasRequiredSbcsDataGenerated; - -function requireSbcsDataGenerated () { - if (hasRequiredSbcsDataGenerated) return sbcsDataGenerated; - hasRequiredSbcsDataGenerated = 1; - - // Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script. - sbcsDataGenerated = { - "437": "cp437", - "737": "cp737", - "775": "cp775", - "850": "cp850", - "852": "cp852", - "855": "cp855", - "856": "cp856", - "857": "cp857", - "858": "cp858", - "860": "cp860", - "861": "cp861", - "862": "cp862", - "863": "cp863", - "864": "cp864", - "865": "cp865", - "866": "cp866", - "869": "cp869", - "874": "windows874", - "922": "cp922", - "1046": "cp1046", - "1124": "cp1124", - "1125": "cp1125", - "1129": "cp1129", - "1133": "cp1133", - "1161": "cp1161", - "1162": "cp1162", - "1163": "cp1163", - "1250": "windows1250", - "1251": "windows1251", - "1252": "windows1252", - "1253": "windows1253", - "1254": "windows1254", - "1255": "windows1255", - "1256": "windows1256", - "1257": "windows1257", - "1258": "windows1258", - "28591": "iso88591", - "28592": "iso88592", - "28593": "iso88593", - "28594": "iso88594", - "28595": "iso88595", - "28596": "iso88596", - "28597": "iso88597", - "28598": "iso88598", - "28599": "iso88599", - "28600": "iso885910", - "28601": "iso885911", - "28603": "iso885913", - "28604": "iso885914", - "28605": "iso885915", - "28606": "iso885916", - "windows874": { - "type": "_sbcs", - "chars": "€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" - }, - "win874": "windows874", - "cp874": "windows874", - "windows1250": { - "type": "_sbcs", - "chars": "€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙" - }, - "win1250": "windows1250", - "cp1250": "windows1250", - "windows1251": { - "type": "_sbcs", - "chars": "ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя" - }, - "win1251": "windows1251", - "cp1251": "windows1251", - "windows1252": { - "type": "_sbcs", - "chars": "€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" - }, - "win1252": "windows1252", - "cp1252": "windows1252", - "windows1253": { - "type": "_sbcs", - "chars": "€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�" - }, - "win1253": "windows1253", - "cp1253": "windows1253", - "windows1254": { - "type": "_sbcs", - "chars": "€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ" - }, - "win1254": "windows1254", - "cp1254": "windows1254", - "windows1255": { - "type": "_sbcs", - "chars": "€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�" - }, - "win1255": "windows1255", - "cp1255": "windows1255", - "windows1256": { - "type": "_sbcs", - "chars": "€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں ،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے" - }, - "win1256": "windows1256", - "cp1256": "windows1256", - "windows1257": { - "type": "_sbcs", - "chars": "€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙" - }, - "win1257": "windows1257", - "cp1257": "windows1257", - "windows1258": { - "type": "_sbcs", - "chars": "€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ" - }, - "win1258": "windows1258", - "cp1258": "windows1258", - "iso88591": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" - }, - "cp28591": "iso88591", - "iso88592": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ą˘Ł¤ĽŚ§¨ŠŞŤŹ­ŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙" - }, - "cp28592": "iso88592", - "iso88593": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ħ˘£¤�Ĥ§¨İŞĞĴ­�ݰħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙" - }, - "cp28593": "iso88593", - "iso88594": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙" - }, - "cp28594": "iso88594", - "iso88595": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ" - }, - "cp28595": "iso88595", - "iso88596": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ���¤�������،­�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������" - }, - "cp28596": "iso88596", - "iso88597": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ‘’£€₯¦§¨©ͺ«¬­�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�" - }, - "cp28597": "iso88597", - "iso88598": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ �¢£¤¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�" - }, - "cp28598": "iso88598", - "iso88599": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ" - }, - "cp28599": "iso88599", - "iso885910": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĒĢĪĨͧĻĐŠŦŽ­ŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ" - }, - "cp28600": "iso885910", - "iso885911": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" - }, - "cp28601": "iso885911", - "iso885913": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’" - }, - "cp28603": "iso885913", - "iso885914": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ­®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ" - }, - "cp28604": "iso885914", - "iso885915": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" - }, - "cp28605": "iso885915", - "iso885916": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄąŁ€„Чš©Ș«Ź­źŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ" - }, - "cp28606": "iso885916", - "cp437": { - "type": "_sbcs", - "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " - }, - "ibm437": "cp437", - "csibm437": "cp437", - "cp737": { - "type": "_sbcs", - "chars": "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ " - }, - "ibm737": "cp737", - "csibm737": "cp737", - "cp775": { - "type": "_sbcs", - "chars": "ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£Ø×¤ĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’­±“¾¶§÷„°∙·¹³²■ " - }, - "ibm775": "cp775", - "csibm775": "cp775", - "cp850": { - "type": "_sbcs", - "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ " - }, - "ibm850": "cp850", - "csibm850": "cp850", - "cp852": { - "type": "_sbcs", - "chars": "ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■ " - }, - "ibm852": "cp852", - "csibm852": "cp852", - "cp855": { - "type": "_sbcs", - "chars": "ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№­ыЫзЗшШэЭщЩчЧ§■ " - }, - "ibm855": "cp855", - "csibm855": "cp855", - "cp856": { - "type": "_sbcs", - "chars": "אבגדהוזחטיךכלםמןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗╝¢¥┐└┴┬├─┼��╚╔╩╦╠═╬¤���������┘┌█▄¦�▀������µ�������¯´­±‗¾¶§÷¸°¨·¹³²■ " - }, - "ibm856": "cp856", - "csibm856": "cp856", - "cp857": { - "type": "_sbcs", - "chars": "ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■ " - }, - "ibm857": "cp857", - "csibm857": "cp857", - "cp858": { - "type": "_sbcs", - "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ " - }, - "ibm858": "cp858", - "csibm858": "cp858", - "cp860": { - "type": "_sbcs", - "chars": "ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñѪº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " - }, - "ibm860": "cp860", - "csibm860": "cp860", - "cp861": { - "type": "_sbcs", - "chars": "ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " - }, - "ibm861": "cp861", - "csibm861": "cp861", - "cp862": { - "type": "_sbcs", - "chars": "אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " - }, - "ibm862": "cp862", - "csibm862": "cp862", - "cp863": { - "type": "_sbcs", - "chars": "ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " - }, - "ibm863": "cp863", - "csibm863": "cp863", - "cp864": { - "type": "_sbcs", - "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$٪&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ� ­ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�" - }, - "ibm864": "cp864", - "csibm864": "cp864", - "cp865": { - "type": "_sbcs", - "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " - }, - "ibm865": "cp865", - "csibm865": "cp865", - "cp866": { - "type": "_sbcs", - "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ " - }, - "ibm866": "cp866", - "csibm866": "cp866", - "cp869": { - "type": "_sbcs", - "chars": "������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄­±υφχ§ψ΅°¨ωϋΰώ■ " - }, - "ibm869": "cp869", - "csibm869": "cp869", - "cp922": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŠÑÒÓÔÕÖרÙÚÛÜÝŽßàáâãäåæçèéêëìíîïšñòóôõö÷øùúûüýžÿ" - }, - "ibm922": "cp922", - "csibm922": "cp922", - "cp1046": { - "type": "_sbcs", - "chars": "ﺈ×÷ﹱˆ■│─┐┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎﻏﻐﻶﻸﻺﻼ ¤ﺋﺑﺗﺛﺟﺣ،­ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـفقكلمنهوىيًٌٍَُِّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�" - }, - "ibm1046": "cp1046", - "csibm1046": "cp1046", - "cp1124": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂҐЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђґєѕіїјљњћќ§ўџ" - }, - "ibm1124": "cp1124", - "csibm1124": "cp1124", - "cp1125": { - "type": "_sbcs", - "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёҐґЄєІіЇї·√№¤■ " - }, - "ibm1125": "cp1125", - "csibm1125": "cp1125", - "cp1129": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ" - }, - "ibm1129": "cp1129", - "csibm1129": "cp1129", - "cp1133": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮ���ຯະາຳິີຶືຸູຼັົຽ���ເແໂໃໄ່້໊໋໌ໍໆ�ໜໝ₭����������������໐໑໒໓໔໕໖໗໘໙��¢¬¦�" - }, - "ibm1133": "cp1133", - "csibm1133": "cp1133", - "cp1161": { - "type": "_sbcs", - "chars": "��������������������������������่กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู้๊๋€฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛¢¬¦ " - }, - "ibm1161": "cp1161", - "csibm1161": "cp1161", - "cp1162": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" - }, - "ibm1162": "cp1162", - "csibm1162": "cp1162", - "cp1163": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ" - }, - "ibm1163": "cp1163", - "csibm1163": "cp1163", - "maccroatian": { - "type": "_sbcs", - "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ" - }, - "maccyrillic": { - "type": "_sbcs", - "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤" - }, - "macgreek": { - "type": "_sbcs", - "chars": "Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�" - }, - "maciceland": { - "type": "_sbcs", - "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" - }, - "macroman": { - "type": "_sbcs", - "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" - }, - "macromania": { - "type": "_sbcs", - "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" - }, - "macthai": { - "type": "_sbcs", - "chars": "«»…“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู​–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����" - }, - "macturkish": { - "type": "_sbcs", - "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ" - }, - "macukraine": { - "type": "_sbcs", - "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤" - }, - "koi8r": { - "type": "_sbcs", - "chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" - }, - "koi8u": { - "type": "_sbcs", - "chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" - }, - "koi8ru": { - "type": "_sbcs", - "chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" - }, - "koi8t": { - "type": "_sbcs", - "chars": "қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“”•–—�™�›�����ӯӮё¤ӣ¦§���«¬­®�°±²Ё�Ӣ¶·�№�»���©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" - }, - "armscii8": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ �և։)(»«—.՝,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆ՚�" - }, - "rk1048": { - "type": "_sbcs", - "chars": "ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ ҰұӘ¤Ө¦§Ё©Ғ«¬­®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя" - }, - "tcvn": { - "type": "_sbcs", - "chars": "\u0000ÚỤ\u0003ỪỬỮ\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010ỨỰỲỶỸÝỴ\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÀẢÃÁẠẶẬÈẺẼÉẸỆÌỈĨÍỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ ĂÂÊÔƠƯĐăâêôơưđẶ̀̀̉̃́àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹềểễếệìỉỄẾỒĩíịòỔỏõóọồổỗốộờởỡớợùỖủũúụừửữứựỳỷỹýỵỐ" - }, - "georgianacademy": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶçèéêëìíîïðñòóôõö÷øùúûüýþÿ" - }, - "georgianps": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზჱთიკლმნჲოპჟრსტჳუფქღყშჩცძწჭხჴჯჰჵæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" - }, - "pt154": { - "type": "_sbcs", - "chars": "ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“”•–—ҳҷҡӣңқһҹ ЎўЈӨҘҰ§Ё©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫҝАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя" - }, - "viscii": { - "type": "_sbcs", - "chars": "\u0000\u0001Ẳ\u0003\u0004ẴẪ\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013Ỷ\u0015\u0016\u0017\u0018Ỹ\u001a\u001b\u001c\u001dỴ\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆỐỒỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếềểễệốồổỗỠƠộờởịỰỨỪỬơớƯÀÁÂÃẢĂẳẵÈÉÊẺÌÍĨỳĐứÒÓÔạỷừửÙÚỹỵÝỡưàáâãảăữẫèéêẻìíĩỉđựòóôõỏọụùúũủýợỮ" - }, - "iso646cn": { - "type": "_sbcs", - "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������" - }, - "iso646jp": { - "type": "_sbcs", - "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������" - }, - "hproman8": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ÀÂÈÊËÎÏ´ˋˆ¨˜ÙÛ₤¯Ýý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉïßÔÁÃãÐðÍÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�" - }, - "macintosh": { - "type": "_sbcs", - "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" - }, - "ascii": { - "type": "_sbcs", - "chars": "��������������������������������������������������������������������������������������������������������������������������������" - }, - "tis620": { - "type": "_sbcs", - "chars": "���������������������������������กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" - } - }; - return sbcsDataGenerated; -} - -var dbcsCodec = {}; - -var hasRequiredDbcsCodec; - -function requireDbcsCodec () { - if (hasRequiredDbcsCodec) return dbcsCodec; - hasRequiredDbcsCodec = 1; - var Buffer = safer_1.Buffer; - - // Multibyte codec. In this scheme, a character is represented by 1 or more bytes. - // Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences. - // To save memory and loading time, we read table files only when requested. - - dbcsCodec._dbcs = DBCSCodec; - - var UNASSIGNED = -1, - GB18030_CODE = -2, - SEQ_START = -10, - NODE_START = -1000, - UNASSIGNED_NODE = new Array(0x100), - DEF_CHAR = -1; - - for (var i = 0; i < 0x100; i++) - UNASSIGNED_NODE[i] = UNASSIGNED; - - - // Class DBCSCodec reads and initializes mapping tables. - function DBCSCodec(codecOptions, iconv) { - this.encodingName = codecOptions.encodingName; - if (!codecOptions) - throw new Error("DBCS codec is called without the data.") - if (!codecOptions.table) - throw new Error("Encoding '" + this.encodingName + "' has no data."); - - // Load tables. - var mappingTable = codecOptions.table(); - - - // Decode tables: MBCS -> Unicode. - - // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256. - // Trie root is decodeTables[0]. - // Values: >= 0 -> unicode character code. can be > 0xFFFF - // == UNASSIGNED -> unknown/unassigned sequence. - // == GB18030_CODE -> this is the end of a GB18030 4-byte sequence. - // <= NODE_START -> index of the next node in our trie to process next byte. - // <= SEQ_START -> index of the start of a character code sequence, in decodeTableSeq. - this.decodeTables = []; - this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node. - - // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. - this.decodeTableSeq = []; - - // Actual mapping tables consist of chunks. Use them to fill up decode tables. - for (var i = 0; i < mappingTable.length; i++) - this._addDecodeChunk(mappingTable[i]); - - this.defaultCharUnicode = iconv.defaultCharUnicode; - - - // Encode tables: Unicode -> DBCS. - - // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance. - // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null. - // Values: >= 0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.). - // == UNASSIGNED -> no conversion found. Output a default char. - // <= SEQ_START -> it's an index in encodeTableSeq, see below. The character starts a sequence. - this.encodeTable = []; - - // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of - // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key - // means end of sequence (needed when one sequence is a strict subsequence of another). - // Objects are kept separately from encodeTable to increase performance. - this.encodeTableSeq = []; - - // Some chars can be decoded, but need not be encoded. - var skipEncodeChars = {}; - if (codecOptions.encodeSkipVals) - for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) { - var val = codecOptions.encodeSkipVals[i]; - if (typeof val === 'number') - skipEncodeChars[val] = true; - else - for (var j = val.from; j <= val.to; j++) - skipEncodeChars[j] = true; - } - - // Use decode trie to recursively fill out encode tables. - this._fillEncodeTable(0, 0, skipEncodeChars); - - // Add more encoding pairs when needed. - if (codecOptions.encodeAdd) { - for (var uChar in codecOptions.encodeAdd) - if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar)) - this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]); - } - - this.defCharSB = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)]; - if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?']; - if (this.defCharSB === UNASSIGNED) this.defCharSB = "?".charCodeAt(0); - - - // Load & create GB18030 tables when needed. - if (typeof codecOptions.gb18030 === 'function') { - this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges. - - // Add GB18030 decode tables. - var thirdByteNodeIdx = this.decodeTables.length; - var thirdByteNode = this.decodeTables[thirdByteNodeIdx] = UNASSIGNED_NODE.slice(0); - - var fourthByteNodeIdx = this.decodeTables.length; - var fourthByteNode = this.decodeTables[fourthByteNodeIdx] = UNASSIGNED_NODE.slice(0); - - for (var i = 0x81; i <= 0xFE; i++) { - var secondByteNodeIdx = NODE_START - this.decodeTables[0][i]; - var secondByteNode = this.decodeTables[secondByteNodeIdx]; - for (var j = 0x30; j <= 0x39; j++) - secondByteNode[j] = NODE_START - thirdByteNodeIdx; - } - for (var i = 0x81; i <= 0xFE; i++) - thirdByteNode[i] = NODE_START - fourthByteNodeIdx; - for (var i = 0x30; i <= 0x39; i++) - fourthByteNode[i] = GB18030_CODE; - } - } - - DBCSCodec.prototype.encoder = DBCSEncoder; - DBCSCodec.prototype.decoder = DBCSDecoder; - - // Decoder helpers - DBCSCodec.prototype._getDecodeTrieNode = function(addr) { - var bytes = []; - for (; addr > 0; addr >>= 8) - bytes.push(addr & 0xFF); - if (bytes.length == 0) - bytes.push(0); - - var node = this.decodeTables[0]; - for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie. - var val = node[bytes[i]]; - - if (val == UNASSIGNED) { // Create new node. - node[bytes[i]] = NODE_START - this.decodeTables.length; - this.decodeTables.push(node = UNASSIGNED_NODE.slice(0)); - } - else if (val <= NODE_START) { // Existing node. - node = this.decodeTables[NODE_START - val]; - } - else - throw new Error("Overwrite byte in " + this.encodingName + ", addr: " + addr.toString(16)); - } - return node; - }; - - - DBCSCodec.prototype._addDecodeChunk = function(chunk) { - // First element of chunk is the hex mbcs code where we start. - var curAddr = parseInt(chunk[0], 16); - - // Choose the decoding node where we'll write our chars. - var writeTable = this._getDecodeTrieNode(curAddr); - curAddr = curAddr & 0xFF; - - // Write all other elements of the chunk to the table. - for (var k = 1; k < chunk.length; k++) { - var part = chunk[k]; - if (typeof part === "string") { // String, write as-is. - for (var l = 0; l < part.length;) { - var code = part.charCodeAt(l++); - if (0xD800 <= code && code < 0xDC00) { // Decode surrogate - var codeTrail = part.charCodeAt(l++); - if (0xDC00 <= codeTrail && codeTrail < 0xE000) - writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00); - else - throw new Error("Incorrect surrogate pair in " + this.encodingName + " at chunk " + chunk[0]); - } - else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used) - var len = 0xFFF - code + 2; - var seq = []; - for (var m = 0; m < len; m++) - seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq. - - writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length; - this.decodeTableSeq.push(seq); - } - else - writeTable[curAddr++] = code; // Basic char - } - } - else if (typeof part === "number") { // Integer, meaning increasing sequence starting with prev character. - var charCode = writeTable[curAddr - 1] + 1; - for (var l = 0; l < part; l++) - writeTable[curAddr++] = charCode++; - } - else - throw new Error("Incorrect type '" + typeof part + "' given in " + this.encodingName + " at chunk " + chunk[0]); - } - if (curAddr > 0xFF) - throw new Error("Incorrect chunk in " + this.encodingName + " at addr " + chunk[0] + ": too long" + curAddr); - }; - - // Encoder helpers - DBCSCodec.prototype._getEncodeBucket = function(uCode) { - var high = uCode >> 8; // This could be > 0xFF because of astral characters. - if (this.encodeTable[high] === undefined) - this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand. - return this.encodeTable[high]; - }; - - DBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) { - var bucket = this._getEncodeBucket(uCode); - var low = uCode & 0xFF; - if (bucket[low] <= SEQ_START) - this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it. - else if (bucket[low] == UNASSIGNED) - bucket[low] = dbcsCode; - }; - - DBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) { - - // Get the root of character tree according to first character of the sequence. - var uCode = seq[0]; - var bucket = this._getEncodeBucket(uCode); - var low = uCode & 0xFF; - - var node; - if (bucket[low] <= SEQ_START) { - // There's already a sequence with - use it. - node = this.encodeTableSeq[SEQ_START-bucket[low]]; - } - else { - // There was no sequence object - allocate a new one. - node = {}; - if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence. - bucket[low] = SEQ_START - this.encodeTableSeq.length; - this.encodeTableSeq.push(node); - } - - // Traverse the character tree, allocating new nodes as needed. - for (var j = 1; j < seq.length-1; j++) { - var oldVal = node[uCode]; - if (typeof oldVal === 'object') - node = oldVal; - else { - node = node[uCode] = {}; - if (oldVal !== undefined) - node[DEF_CHAR] = oldVal; - } - } - - // Set the leaf to given dbcsCode. - uCode = seq[seq.length-1]; - node[uCode] = dbcsCode; - }; - - DBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) { - var node = this.decodeTables[nodeIdx]; - for (var i = 0; i < 0x100; i++) { - var uCode = node[i]; - var mbCode = prefix + i; - if (skipEncodeChars[mbCode]) - continue; - - if (uCode >= 0) - this._setEncodeChar(uCode, mbCode); - else if (uCode <= NODE_START) - this._fillEncodeTable(NODE_START - uCode, mbCode << 8, skipEncodeChars); - else if (uCode <= SEQ_START) - this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode); - } - }; - - - - // == Encoder ================================================================== - - function DBCSEncoder(options, codec) { - // Encoder state - this.leadSurrogate = -1; - this.seqObj = undefined; - - // Static data - this.encodeTable = codec.encodeTable; - this.encodeTableSeq = codec.encodeTableSeq; - this.defaultCharSingleByte = codec.defCharSB; - this.gb18030 = codec.gb18030; - } - - DBCSEncoder.prototype.write = function(str) { - var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)), - leadSurrogate = this.leadSurrogate, - seqObj = this.seqObj, nextChar = -1, - i = 0, j = 0; - - while (true) { - // 0. Get next character. - if (nextChar === -1) { - if (i == str.length) break; - var uCode = str.charCodeAt(i++); - } - else { - var uCode = nextChar; - nextChar = -1; - } - - // 1. Handle surrogates. - if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates. - if (uCode < 0xDC00) { // We've got lead surrogate. - if (leadSurrogate === -1) { - leadSurrogate = uCode; - continue; - } else { - leadSurrogate = uCode; - // Double lead surrogate found. - uCode = UNASSIGNED; - } - } else { // We've got trail surrogate. - if (leadSurrogate !== -1) { - uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00); - leadSurrogate = -1; - } else { - // Incomplete surrogate pair - only trail surrogate found. - uCode = UNASSIGNED; - } - - } - } - else if (leadSurrogate !== -1) { - // Incomplete surrogate pair - only lead surrogate found. - nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char. - leadSurrogate = -1; - } - - // 2. Convert uCode character. - var dbcsCode = UNASSIGNED; - if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence - var resCode = seqObj[uCode]; - if (typeof resCode === 'object') { // Sequence continues. - seqObj = resCode; - continue; - - } else if (typeof resCode == 'number') { // Sequence finished. Write it. - dbcsCode = resCode; - - } else if (resCode == undefined) { // Current character is not part of the sequence. - - // Try default character for this sequence - resCode = seqObj[DEF_CHAR]; - if (resCode !== undefined) { - dbcsCode = resCode; // Found. Write it. - nextChar = uCode; // Current character will be written too in the next iteration. - - } - } - seqObj = undefined; - } - else if (uCode >= 0) { // Regular character - var subtable = this.encodeTable[uCode >> 8]; - if (subtable !== undefined) - dbcsCode = subtable[uCode & 0xFF]; - - if (dbcsCode <= SEQ_START) { // Sequence start - seqObj = this.encodeTableSeq[SEQ_START-dbcsCode]; - continue; - } - - if (dbcsCode == UNASSIGNED && this.gb18030) { - // Use GB18030 algorithm to find character(s) to write. - var idx = findIdx(this.gb18030.uChars, uCode); - if (idx != -1) { - var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]); - newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600; - newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260; - newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10; - newBuf[j++] = 0x30 + dbcsCode; - continue; - } - } - } - - // 3. Write dbcsCode character. - if (dbcsCode === UNASSIGNED) - dbcsCode = this.defaultCharSingleByte; - - if (dbcsCode < 0x100) { - newBuf[j++] = dbcsCode; - } - else if (dbcsCode < 0x10000) { - newBuf[j++] = dbcsCode >> 8; // high byte - newBuf[j++] = dbcsCode & 0xFF; // low byte - } - else { - newBuf[j++] = dbcsCode >> 16; - newBuf[j++] = (dbcsCode >> 8) & 0xFF; - newBuf[j++] = dbcsCode & 0xFF; - } - } - - this.seqObj = seqObj; - this.leadSurrogate = leadSurrogate; - return newBuf.slice(0, j); - }; - - DBCSEncoder.prototype.end = function() { - if (this.leadSurrogate === -1 && this.seqObj === undefined) - return; // All clean. Most often case. - - var newBuf = Buffer.alloc(10), j = 0; - - if (this.seqObj) { // We're in the sequence. - var dbcsCode = this.seqObj[DEF_CHAR]; - if (dbcsCode !== undefined) { // Write beginning of the sequence. - if (dbcsCode < 0x100) { - newBuf[j++] = dbcsCode; - } - else { - newBuf[j++] = dbcsCode >> 8; // high byte - newBuf[j++] = dbcsCode & 0xFF; // low byte - } - } - this.seqObj = undefined; - } - - if (this.leadSurrogate !== -1) { - // Incomplete surrogate pair - only lead surrogate found. - newBuf[j++] = this.defaultCharSingleByte; - this.leadSurrogate = -1; - } - - return newBuf.slice(0, j); - }; - - // Export for testing - DBCSEncoder.prototype.findIdx = findIdx; - - - // == Decoder ================================================================== - - function DBCSDecoder(options, codec) { - // Decoder state - this.nodeIdx = 0; - this.prevBuf = Buffer.alloc(0); - - // Static data - this.decodeTables = codec.decodeTables; - this.decodeTableSeq = codec.decodeTableSeq; - this.defaultCharUnicode = codec.defaultCharUnicode; - this.gb18030 = codec.gb18030; - } - - DBCSDecoder.prototype.write = function(buf) { - var newBuf = Buffer.alloc(buf.length*2), - nodeIdx = this.nodeIdx, - prevBuf = this.prevBuf, prevBufOffset = this.prevBuf.length, - seqStart = -this.prevBuf.length, // idx of the start of current parsed sequence. - uCode; - - if (prevBufOffset > 0) // Make prev buf overlap a little to make it easier to slice later. - prevBuf = Buffer.concat([prevBuf, buf.slice(0, 10)]); - - for (var i = 0, j = 0; i < buf.length; i++) { - var curByte = (i >= 0) ? buf[i] : prevBuf[i + prevBufOffset]; - - // Lookup in current trie node. - var uCode = this.decodeTables[nodeIdx][curByte]; - - if (uCode >= 0) ; - else if (uCode === UNASSIGNED) { // Unknown char. - // TODO: Callback with seq. - //var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset); - i = seqStart; // Try to parse again, after skipping first byte of the sequence ('i' will be incremented by 'for' cycle). - uCode = this.defaultCharUnicode.charCodeAt(0); - } - else if (uCode === GB18030_CODE) { - var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset); - var ptr = (curSeq[0]-0x81)*12600 + (curSeq[1]-0x30)*1260 + (curSeq[2]-0x81)*10 + (curSeq[3]-0x30); - var idx = findIdx(this.gb18030.gbChars, ptr); - uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx]; - } - else if (uCode <= NODE_START) { // Go to next trie node. - nodeIdx = NODE_START - uCode; - continue; - } - else if (uCode <= SEQ_START) { // Output a sequence of chars. - var seq = this.decodeTableSeq[SEQ_START - uCode]; - for (var k = 0; k < seq.length - 1; k++) { - uCode = seq[k]; - newBuf[j++] = uCode & 0xFF; - newBuf[j++] = uCode >> 8; - } - uCode = seq[seq.length-1]; - } - else - throw new Error("iconv-lite internal error: invalid decoding table value " + uCode + " at " + nodeIdx + "/" + curByte); - - // Write the character to buffer, handling higher planes using surrogate pair. - if (uCode > 0xFFFF) { - uCode -= 0x10000; - var uCodeLead = 0xD800 + Math.floor(uCode / 0x400); - newBuf[j++] = uCodeLead & 0xFF; - newBuf[j++] = uCodeLead >> 8; - - uCode = 0xDC00 + uCode % 0x400; - } - newBuf[j++] = uCode & 0xFF; - newBuf[j++] = uCode >> 8; - - // Reset trie node. - nodeIdx = 0; seqStart = i+1; - } - - this.nodeIdx = nodeIdx; - this.prevBuf = (seqStart >= 0) ? buf.slice(seqStart) : prevBuf.slice(seqStart + prevBufOffset); - return newBuf.slice(0, j).toString('ucs2'); - }; - - DBCSDecoder.prototype.end = function() { - var ret = ''; - - // Try to parse all remaining chars. - while (this.prevBuf.length > 0) { - // Skip 1 character in the buffer. - ret += this.defaultCharUnicode; - var buf = this.prevBuf.slice(1); - - // Parse remaining as usual. - this.prevBuf = Buffer.alloc(0); - this.nodeIdx = 0; - if (buf.length > 0) - ret += this.write(buf); - } - - this.nodeIdx = 0; - return ret; - }; - - // Binary search for GB18030. Returns largest i such that table[i] <= val. - function findIdx(table, val) { - if (table[0] > val) - return -1; - - var l = 0, r = table.length; - while (l < r-1) { // always table[l] <= val < table[r] - var mid = l + Math.floor((r-l+1)/2); - if (table[mid] <= val) - l = mid; - else - r = mid; - } - return l; - } - return dbcsCodec; -} - -var require$$0 = [ - [ - "0", - "\u0000", - 128 - ], - [ - "a1", - "。", - 62 - ], - [ - "8140", - " 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈", - 9, - "+-±×" - ], - [ - "8180", - "÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓" - ], - [ - "81b8", - "∈∋⊆⊇⊂⊃∪∩" - ], - [ - "81c8", - "∧∨¬⇒⇔∀∃" - ], - [ - "81da", - "∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬" - ], - [ - "81f0", - "ʼn♯♭♪†‡¶" - ], - [ - "81fc", - "◯" - ], - [ - "824f", - "0", - 9 - ], - [ - "8260", - "A", - 25 - ], - [ - "8281", - "a", - 25 - ], - [ - "829f", - "ぁ", - 82 - ], - [ - "8340", - "ァ", - 62 - ], - [ - "8380", - "ム", - 22 - ], - [ - "839f", - "Α", - 16, - "Σ", - 6 - ], - [ - "83bf", - "α", - 16, - "σ", - 6 - ], - [ - "8440", - "А", - 5, - "ЁЖ", - 25 - ], - [ - "8470", - "а", - 5, - "ёж", - 7 - ], - [ - "8480", - "о", - 17 - ], - [ - "849f", - "─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂" - ], - [ - "8740", - "①", - 19, - "Ⅰ", - 9 - ], - [ - "875f", - "㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡" - ], - [ - "877e", - "㍻" - ], - [ - "8780", - "〝〟№㏍℡㊤", - 4, - "㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪" - ], - [ - "889f", - "亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭" - ], - [ - "8940", - "院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円" - ], - [ - "8980", - "園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改" - ], - [ - "8a40", - "魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫" - ], - [ - "8a80", - "橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄" - ], - [ - "8b40", - "機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救" - ], - [ - "8b80", - "朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈" - ], - [ - "8c40", - "掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨" - ], - [ - "8c80", - "劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向" - ], - [ - "8d40", - "后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降" - ], - [ - "8d80", - "項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷" - ], - [ - "8e40", - "察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止" - ], - [ - "8e80", - "死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周" - ], - [ - "8f40", - "宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳" - ], - [ - "8f80", - "準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾" - ], - [ - "9040", - "拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨" - ], - [ - "9080", - "逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線" - ], - [ - "9140", - "繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻" - ], - [ - "9180", - "操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只" - ], - [ - "9240", - "叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄" - ], - [ - "9280", - "逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓" - ], - [ - "9340", - "邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬" - ], - [ - "9380", - "凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入" - ], - [ - "9440", - "如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅" - ], - [ - "9480", - "楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美" - ], - [ - "9540", - "鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷" - ], - [ - "9580", - "斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋" - ], - [ - "9640", - "法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆" - ], - [ - "9680", - "摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒" - ], - [ - "9740", - "諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲" - ], - [ - "9780", - "沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯" - ], - [ - "9840", - "蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕" - ], - [ - "989f", - "弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲" - ], - [ - "9940", - "僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭" - ], - [ - "9980", - "凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨" - ], - [ - "9a40", - "咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸" - ], - [ - "9a80", - "噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩" - ], - [ - "9b40", - "奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀" - ], - [ - "9b80", - "它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏" - ], - [ - "9c40", - "廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠" - ], - [ - "9c80", - "怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛" - ], - [ - "9d40", - "戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫" - ], - [ - "9d80", - "捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼" - ], - [ - "9e40", - "曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎" - ], - [ - "9e80", - "梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣" - ], - [ - "9f40", - "檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯" - ], - [ - "9f80", - "麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌" - ], - [ - "e040", - "漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝" - ], - [ - "e080", - "烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱" - ], - [ - "e140", - "瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿" - ], - [ - "e180", - "痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬" - ], - [ - "e240", - "磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰" - ], - [ - "e280", - "窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆" - ], - [ - "e340", - "紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷" - ], - [ - "e380", - "縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋" - ], - [ - "e440", - "隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤" - ], - [ - "e480", - "艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈" - ], - [ - "e540", - "蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬" - ], - [ - "e580", - "蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞" - ], - [ - "e640", - "襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧" - ], - [ - "e680", - "諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊" - ], - [ - "e740", - "蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜" - ], - [ - "e780", - "轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮" - ], - [ - "e840", - "錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙" - ], - [ - "e880", - "閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰" - ], - [ - "e940", - "顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃" - ], - [ - "e980", - "騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈" - ], - [ - "ea40", - "鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯" - ], - [ - "ea80", - "黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙" - ], - [ - "ed40", - "纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏" - ], - [ - "ed80", - "塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱" - ], - [ - "ee40", - "犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙" - ], - [ - "ee80", - "蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑" - ], - [ - "eeef", - "ⅰ", - 9, - "¬¦'"" - ], - [ - "f040", - "", - 62 - ], - [ - "f080", - "", - 124 - ], - [ - "f140", - "", - 62 - ], - [ - "f180", - "", - 124 - ], - [ - "f240", - "", - 62 - ], - [ - "f280", - "", - 124 - ], - [ - "f340", - "", - 62 - ], - [ - "f380", - "", - 124 - ], - [ - "f440", - "", - 62 - ], - [ - "f480", - "", - 124 - ], - [ - "f540", - "", - 62 - ], - [ - "f580", - "", - 124 - ], - [ - "f640", - "", - 62 - ], - [ - "f680", - "", - 124 - ], - [ - "f740", - "", - 62 - ], - [ - "f780", - "", - 124 - ], - [ - "f840", - "", - 62 - ], - [ - "f880", - "", - 124 - ], - [ - "f940", - "" - ], - [ - "fa40", - "ⅰ", - 9, - "Ⅰ", - 9, - "¬¦'"㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊" - ], - [ - "fa80", - "兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯" - ], - [ - "fb40", - "涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神" - ], - [ - "fb80", - "祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙" - ], - [ - "fc40", - "髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑" - ] -]; - -var require$$1 = [ - [ - "0", - "\u0000", - 127 - ], - [ - "8ea1", - "。", - 62 - ], - [ - "a1a1", - " 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈", - 9, - "+-±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇" - ], - [ - "a2a1", - "◆□■△▲▽▼※〒→←↑↓〓" - ], - [ - "a2ba", - "∈∋⊆⊇⊂⊃∪∩" - ], - [ - "a2ca", - "∧∨¬⇒⇔∀∃" - ], - [ - "a2dc", - "∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬" - ], - [ - "a2f2", - "ʼn♯♭♪†‡¶" - ], - [ - "a2fe", - "◯" - ], - [ - "a3b0", - "0", - 9 - ], - [ - "a3c1", - "A", - 25 - ], - [ - "a3e1", - "a", - 25 - ], - [ - "a4a1", - "ぁ", - 82 - ], - [ - "a5a1", - "ァ", - 85 - ], - [ - "a6a1", - "Α", - 16, - "Σ", - 6 - ], - [ - "a6c1", - "α", - 16, - "σ", - 6 - ], - [ - "a7a1", - "А", - 5, - "ЁЖ", - 25 - ], - [ - "a7d1", - "а", - 5, - "ёж", - 25 - ], - [ - "a8a1", - "─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂" - ], - [ - "ada1", - "①", - 19, - "Ⅰ", - 9 - ], - [ - "adc0", - "㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡" - ], - [ - "addf", - "㍻〝〟№㏍℡㊤", - 4, - "㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪" - ], - [ - "b0a1", - "亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭" - ], - [ - "b1a1", - "院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応" - ], - [ - "b2a1", - "押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改" - ], - [ - "b3a1", - "魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱" - ], - [ - "b4a1", - "粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄" - ], - [ - "b5a1", - "機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京" - ], - [ - "b6a1", - "供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈" - ], - [ - "b7a1", - "掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲" - ], - [ - "b8a1", - "検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向" - ], - [ - "b9a1", - "后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込" - ], - [ - "baa1", - "此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷" - ], - [ - "bba1", - "察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時" - ], - [ - "bca1", - "次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周" - ], - [ - "bda1", - "宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償" - ], - [ - "bea1", - "勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾" - ], - [ - "bfa1", - "拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾" - ], - [ - "c0a1", - "澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線" - ], - [ - "c1a1", - "繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎" - ], - [ - "c2a1", - "臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只" - ], - [ - "c3a1", - "叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵" - ], - [ - "c4a1", - "帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓" - ], - [ - "c5a1", - "邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到" - ], - [ - "c6a1", - "董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入" - ], - [ - "c7a1", - "如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦" - ], - [ - "c8a1", - "函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美" - ], - [ - "c9a1", - "鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服" - ], - [ - "caa1", - "福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋" - ], - [ - "cba1", - "法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満" - ], - [ - "cca1", - "漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒" - ], - [ - "cda1", - "諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃" - ], - [ - "cea1", - "痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯" - ], - [ - "cfa1", - "蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕" - ], - [ - "d0a1", - "弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲" - ], - [ - "d1a1", - "僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨" - ], - [ - "d2a1", - "辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨" - ], - [ - "d3a1", - "咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉" - ], - [ - "d4a1", - "圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩" - ], - [ - "d5a1", - "奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓" - ], - [ - "d6a1", - "屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏" - ], - [ - "d7a1", - "廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚" - ], - [ - "d8a1", - "悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛" - ], - [ - "d9a1", - "戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼" - ], - [ - "daa1", - "據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼" - ], - [ - "dba1", - "曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍" - ], - [ - "dca1", - "棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣" - ], - [ - "dda1", - "檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾" - ], - [ - "dea1", - "沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌" - ], - [ - "dfa1", - "漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼" - ], - [ - "e0a1", - "燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱" - ], - [ - "e1a1", - "瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰" - ], - [ - "e2a1", - "癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬" - ], - [ - "e3a1", - "磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐" - ], - [ - "e4a1", - "筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆" - ], - [ - "e5a1", - "紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺" - ], - [ - "e6a1", - "罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋" - ], - [ - "e7a1", - "隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙" - ], - [ - "e8a1", - "茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈" - ], - [ - "e9a1", - "蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙" - ], - [ - "eaa1", - "蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞" - ], - [ - "eba1", - "襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫" - ], - [ - "eca1", - "譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊" - ], - [ - "eda1", - "蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸" - ], - [ - "eea1", - "遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮" - ], - [ - "efa1", - "錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞" - ], - [ - "f0a1", - "陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰" - ], - [ - "f1a1", - "顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷" - ], - [ - "f2a1", - "髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈" - ], - [ - "f3a1", - "鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠" - ], - [ - "f4a1", - "堯槇遙瑤凜熙" - ], - [ - "f9a1", - "纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德" - ], - [ - "faa1", - "忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱" - ], - [ - "fba1", - "犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚" - ], - [ - "fca1", - "釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑" - ], - [ - "fcf1", - "ⅰ", - 9, - "¬¦'"" - ], - [ - "8fa2af", - "˘ˇ¸˙˝¯˛˚~΄΅" - ], - [ - "8fa2c2", - "¡¦¿" - ], - [ - "8fa2eb", - "ºª©®™¤№" - ], - [ - "8fa6e1", - "ΆΈΉΊΪ" - ], - [ - "8fa6e7", - "Ό" - ], - [ - "8fa6e9", - "ΎΫ" - ], - [ - "8fa6ec", - "Ώ" - ], - [ - "8fa6f1", - "άέήίϊΐόςύϋΰώ" - ], - [ - "8fa7c2", - "Ђ", - 10, - "ЎЏ" - ], - [ - "8fa7f2", - "ђ", - 10, - "ўџ" - ], - [ - "8fa9a1", - "ÆĐ" - ], - [ - "8fa9a4", - "Ħ" - ], - [ - "8fa9a6", - "IJ" - ], - [ - "8fa9a8", - "ŁĿ" - ], - [ - "8fa9ab", - "ŊØŒ" - ], - [ - "8fa9af", - "ŦÞ" - ], - [ - "8fa9c1", - "æđðħıijĸłŀʼnŋøœßŧþ" - ], - [ - "8faaa1", - "ÁÀÄÂĂǍĀĄÅÃĆĈČÇĊĎÉÈËÊĚĖĒĘ" - ], - [ - "8faaba", - "ĜĞĢĠĤÍÌÏÎǏİĪĮĨĴĶĹĽĻŃŇŅÑÓÒÖÔǑŐŌÕŔŘŖŚŜŠŞŤŢÚÙÜÛŬǓŰŪŲŮŨǗǛǙǕŴÝŸŶŹŽŻ" - ], - [ - "8faba1", - "áàäâăǎāąåãćĉčçċďéèëêěėēęǵĝğ" - ], - [ - "8fabbd", - "ġĥíìïîǐ" - ], - [ - "8fabc5", - "īįĩĵķĺľļńňņñóòöôǒőōõŕřŗśŝšşťţúùüûŭǔűūųůũǘǜǚǖŵýÿŷźžż" - ], - [ - "8fb0a1", - "丂丄丅丌丒丟丣两丨丫丮丯丰丵乀乁乄乇乑乚乜乣乨乩乴乵乹乿亍亖亗亝亯亹仃仐仚仛仠仡仢仨仯仱仳仵份仾仿伀伂伃伈伋伌伒伕伖众伙伮伱你伳伵伷伹伻伾佀佂佈佉佋佌佒佔佖佘佟佣佪佬佮佱佷佸佹佺佽佾侁侂侄" - ], - [ - "8fb1a1", - "侅侉侊侌侎侐侒侓侔侗侙侚侞侟侲侷侹侻侼侽侾俀俁俅俆俈俉俋俌俍俏俒俜俠俢俰俲俼俽俿倀倁倄倇倊倌倎倐倓倗倘倛倜倝倞倢倧倮倰倲倳倵偀偁偂偅偆偊偌偎偑偒偓偗偙偟偠偢偣偦偧偪偭偰偱倻傁傃傄傆傊傎傏傐" - ], - [ - "8fb2a1", - "傒傓傔傖傛傜傞", - 4, - "傪傯傰傹傺傽僀僃僄僇僌僎僐僓僔僘僜僝僟僢僤僦僨僩僯僱僶僺僾儃儆儇儈儋儌儍儎僲儐儗儙儛儜儝儞儣儧儨儬儭儯儱儳儴儵儸儹兂兊兏兓兕兗兘兟兤兦兾冃冄冋冎冘冝冡冣冭冸冺冼冾冿凂" - ], - [ - "8fb3a1", - "凈减凑凒凓凕凘凞凢凥凮凲凳凴凷刁刂刅划刓刕刖刘刢刨刱刲刵刼剅剉剕剗剘剚剜剟剠剡剦剮剷剸剹劀劂劅劊劌劓劕劖劗劘劚劜劤劥劦劧劯劰劶劷劸劺劻劽勀勄勆勈勌勏勑勔勖勛勜勡勥勨勩勪勬勰勱勴勶勷匀匃匊匋" - ], - [ - "8fb4a1", - "匌匑匓匘匛匜匞匟匥匧匨匩匫匬匭匰匲匵匼匽匾卂卌卋卙卛卡卣卥卬卭卲卹卾厃厇厈厎厓厔厙厝厡厤厪厫厯厲厴厵厷厸厺厽叀叅叏叒叓叕叚叝叞叠另叧叵吂吓吚吡吧吨吪启吱吴吵呃呄呇呍呏呞呢呤呦呧呩呫呭呮呴呿" - ], - [ - "8fb5a1", - "咁咃咅咈咉咍咑咕咖咜咟咡咦咧咩咪咭咮咱咷咹咺咻咿哆哊响哎哠哪哬哯哶哼哾哿唀唁唅唈唉唌唍唎唕唪唫唲唵唶唻唼唽啁啇啉啊啍啐啑啘啚啛啞啠啡啤啦啿喁喂喆喈喎喏喑喒喓喔喗喣喤喭喲喿嗁嗃嗆嗉嗋嗌嗎嗑嗒" - ], - [ - "8fb6a1", - "嗓嗗嗘嗛嗞嗢嗩嗶嗿嘅嘈嘊嘍", - 5, - "嘙嘬嘰嘳嘵嘷嘹嘻嘼嘽嘿噀噁噃噄噆噉噋噍噏噔噞噠噡噢噣噦噩噭噯噱噲噵嚄嚅嚈嚋嚌嚕嚙嚚嚝嚞嚟嚦嚧嚨嚩嚫嚬嚭嚱嚳嚷嚾囅囉囊囋囏囐囌囍囙囜囝囟囡囤", - 4, - "囱囫园" - ], - [ - "8fb7a1", - "囶囷圁圂圇圊圌圑圕圚圛圝圠圢圣圤圥圩圪圬圮圯圳圴圽圾圿坅坆坌坍坒坢坥坧坨坫坭", - 4, - "坳坴坵坷坹坺坻坼坾垁垃垌垔垗垙垚垜垝垞垟垡垕垧垨垩垬垸垽埇埈埌埏埕埝埞埤埦埧埩埭埰埵埶埸埽埾埿堃堄堈堉埡" - ], - [ - "8fb8a1", - "堌堍堛堞堟堠堦堧堭堲堹堿塉塌塍塏塐塕塟塡塤塧塨塸塼塿墀墁墇墈墉墊墌墍墏墐墔墖墝墠墡墢墦墩墱墲壄墼壂壈壍壎壐壒壔壖壚壝壡壢壩壳夅夆夋夌夒夓夔虁夝夡夣夤夨夯夰夳夵夶夿奃奆奒奓奙奛奝奞奟奡奣奫奭" - ], - [ - "8fb9a1", - "奯奲奵奶她奻奼妋妌妎妒妕妗妟妤妧妭妮妯妰妳妷妺妼姁姃姄姈姊姍姒姝姞姟姣姤姧姮姯姱姲姴姷娀娄娌娍娎娒娓娞娣娤娧娨娪娭娰婄婅婇婈婌婐婕婞婣婥婧婭婷婺婻婾媋媐媓媖媙媜媞媟媠媢媧媬媱媲媳媵媸媺媻媿" - ], - [ - "8fbaa1", - "嫄嫆嫈嫏嫚嫜嫠嫥嫪嫮嫵嫶嫽嬀嬁嬈嬗嬴嬙嬛嬝嬡嬥嬭嬸孁孋孌孒孖孞孨孮孯孼孽孾孿宁宄宆宊宎宐宑宓宔宖宨宩宬宭宯宱宲宷宺宼寀寁寍寏寖", - 4, - "寠寯寱寴寽尌尗尞尟尣尦尩尫尬尮尰尲尵尶屙屚屜屢屣屧屨屩" - ], - [ - "8fbba1", - "屭屰屴屵屺屻屼屽岇岈岊岏岒岝岟岠岢岣岦岪岲岴岵岺峉峋峒峝峗峮峱峲峴崁崆崍崒崫崣崤崦崧崱崴崹崽崿嵂嵃嵆嵈嵕嵑嵙嵊嵟嵠嵡嵢嵤嵪嵭嵰嵹嵺嵾嵿嶁嶃嶈嶊嶒嶓嶔嶕嶙嶛嶟嶠嶧嶫嶰嶴嶸嶹巃巇巋巐巎巘巙巠巤" - ], - [ - "8fbca1", - "巩巸巹帀帇帍帒帔帕帘帟帠帮帨帲帵帾幋幐幉幑幖幘幛幜幞幨幪", - 4, - "幰庀庋庎庢庤庥庨庪庬庱庳庽庾庿廆廌廋廎廑廒廔廕廜廞廥廫异弆弇弈弎弙弜弝弡弢弣弤弨弫弬弮弰弴弶弻弽弿彀彄彅彇彍彐彔彘彛彠彣彤彧" - ], - [ - "8fbda1", - "彯彲彴彵彸彺彽彾徉徍徏徖徜徝徢徧徫徤徬徯徰徱徸忄忇忈忉忋忐", - 4, - "忞忡忢忨忩忪忬忭忮忯忲忳忶忺忼怇怊怍怓怔怗怘怚怟怤怭怳怵恀恇恈恉恌恑恔恖恗恝恡恧恱恾恿悂悆悈悊悎悑悓悕悘悝悞悢悤悥您悰悱悷" - ], - [ - "8fbea1", - "悻悾惂惄惈惉惊惋惎惏惔惕惙惛惝惞惢惥惲惵惸惼惽愂愇愊愌愐", - 4, - "愖愗愙愜愞愢愪愫愰愱愵愶愷愹慁慅慆慉慞慠慬慲慸慻慼慿憀憁憃憄憋憍憒憓憗憘憜憝憟憠憥憨憪憭憸憹憼懀懁懂懎懏懕懜懝懞懟懡懢懧懩懥" - ], - [ - "8fbfa1", - "懬懭懯戁戃戄戇戓戕戜戠戢戣戧戩戫戹戽扂扃扄扆扌扐扑扒扔扖扚扜扤扭扯扳扺扽抍抎抏抐抦抨抳抶抷抺抾抿拄拎拕拖拚拪拲拴拼拽挃挄挊挋挍挐挓挖挘挩挪挭挵挶挹挼捁捂捃捄捆捊捋捎捒捓捔捘捛捥捦捬捭捱捴捵" - ], - [ - "8fc0a1", - "捸捼捽捿掂掄掇掊掐掔掕掙掚掞掤掦掭掮掯掽揁揅揈揎揑揓揔揕揜揠揥揪揬揲揳揵揸揹搉搊搐搒搔搘搞搠搢搤搥搩搪搯搰搵搽搿摋摏摑摒摓摔摚摛摜摝摟摠摡摣摭摳摴摻摽撅撇撏撐撑撘撙撛撝撟撡撣撦撨撬撳撽撾撿" - ], - [ - "8fc1a1", - "擄擉擊擋擌擎擐擑擕擗擤擥擩擪擭擰擵擷擻擿攁攄攈攉攊攏攓攔攖攙攛攞攟攢攦攩攮攱攺攼攽敃敇敉敐敒敔敟敠敧敫敺敽斁斅斊斒斕斘斝斠斣斦斮斲斳斴斿旂旈旉旎旐旔旖旘旟旰旲旴旵旹旾旿昀昄昈昉昍昑昒昕昖昝" - ], - [ - "8fc2a1", - "昞昡昢昣昤昦昩昪昫昬昮昰昱昳昹昷晀晅晆晊晌晑晎晗晘晙晛晜晠晡曻晪晫晬晾晳晵晿晷晸晹晻暀晼暋暌暍暐暒暙暚暛暜暟暠暤暭暱暲暵暻暿曀曂曃曈曌曎曏曔曛曟曨曫曬曮曺朅朇朎朓朙朜朠朢朳朾杅杇杈杌杔杕杝" - ], - [ - "8fc3a1", - "杦杬杮杴杶杻极构枎枏枑枓枖枘枙枛枰枱枲枵枻枼枽柹柀柂柃柅柈柉柒柗柙柜柡柦柰柲柶柷桒栔栙栝栟栨栧栬栭栯栰栱栳栻栿桄桅桊桌桕桗桘桛桫桮", - 4, - "桵桹桺桻桼梂梄梆梈梖梘梚梜梡梣梥梩梪梮梲梻棅棈棌棏" - ], - [ - "8fc4a1", - "棐棑棓棖棙棜棝棥棨棪棫棬棭棰棱棵棶棻棼棽椆椉椊椐椑椓椖椗椱椳椵椸椻楂楅楉楎楗楛楣楤楥楦楨楩楬楰楱楲楺楻楿榀榍榒榖榘榡榥榦榨榫榭榯榷榸榺榼槅槈槑槖槗槢槥槮槯槱槳槵槾樀樁樃樏樑樕樚樝樠樤樨樰樲" - ], - [ - "8fc5a1", - "樴樷樻樾樿橅橆橉橊橎橐橑橒橕橖橛橤橧橪橱橳橾檁檃檆檇檉檋檑檛檝檞檟檥檫檯檰檱檴檽檾檿櫆櫉櫈櫌櫐櫔櫕櫖櫜櫝櫤櫧櫬櫰櫱櫲櫼櫽欂欃欆欇欉欏欐欑欗欛欞欤欨欫欬欯欵欶欻欿歆歊歍歒歖歘歝歠歧歫歮歰歵歽" - ], - [ - "8fc6a1", - "歾殂殅殗殛殟殠殢殣殨殩殬殭殮殰殸殹殽殾毃毄毉毌毖毚毡毣毦毧毮毱毷毹毿氂氄氅氉氍氎氐氒氙氟氦氧氨氬氮氳氵氶氺氻氿汊汋汍汏汒汔汙汛汜汫汭汯汴汶汸汹汻沅沆沇沉沔沕沗沘沜沟沰沲沴泂泆泍泏泐泑泒泔泖" - ], - [ - "8fc7a1", - "泚泜泠泧泩泫泬泮泲泴洄洇洊洎洏洑洓洚洦洧洨汧洮洯洱洹洼洿浗浞浟浡浥浧浯浰浼涂涇涑涒涔涖涗涘涪涬涴涷涹涽涿淄淈淊淎淏淖淛淝淟淠淢淥淩淯淰淴淶淼渀渄渞渢渧渲渶渹渻渼湄湅湈湉湋湏湑湒湓湔湗湜湝湞" - ], - [ - "8fc8a1", - "湢湣湨湳湻湽溍溓溙溠溧溭溮溱溳溻溿滀滁滃滇滈滊滍滎滏滫滭滮滹滻滽漄漈漊漌漍漖漘漚漛漦漩漪漯漰漳漶漻漼漭潏潑潒潓潗潙潚潝潞潡潢潨潬潽潾澃澇澈澋澌澍澐澒澓澔澖澚澟澠澥澦澧澨澮澯澰澵澶澼濅濇濈濊" - ], - [ - "8fc9a1", - "濚濞濨濩濰濵濹濼濽瀀瀅瀆瀇瀍瀗瀠瀣瀯瀴瀷瀹瀼灃灄灈灉灊灋灔灕灝灞灎灤灥灬灮灵灶灾炁炅炆炔", - 4, - "炛炤炫炰炱炴炷烊烑烓烔烕烖烘烜烤烺焃", - 4, - "焋焌焏焞焠焫焭焯焰焱焸煁煅煆煇煊煋煐煒煗煚煜煞煠" - ], - [ - "8fcaa1", - "煨煹熀熅熇熌熒熚熛熠熢熯熰熲熳熺熿燀燁燄燋燌燓燖燙燚燜燸燾爀爇爈爉爓爗爚爝爟爤爫爯爴爸爹牁牂牃牅牎牏牐牓牕牖牚牜牞牠牣牨牫牮牯牱牷牸牻牼牿犄犉犍犎犓犛犨犭犮犱犴犾狁狇狉狌狕狖狘狟狥狳狴狺狻" - ], - [ - "8fcba1", - "狾猂猄猅猇猋猍猒猓猘猙猞猢猤猧猨猬猱猲猵猺猻猽獃獍獐獒獖獘獝獞獟獠獦獧獩獫獬獮獯獱獷獹獼玀玁玃玅玆玎玐玓玕玗玘玜玞玟玠玢玥玦玪玫玭玵玷玹玼玽玿珅珆珉珋珌珏珒珓珖珙珝珡珣珦珧珩珴珵珷珹珺珻珽" - ], - [ - "8fcca1", - "珿琀琁琄琇琊琑琚琛琤琦琨", - 9, - "琹瑀瑃瑄瑆瑇瑋瑍瑑瑒瑗瑝瑢瑦瑧瑨瑫瑭瑮瑱瑲璀璁璅璆璇璉璏璐璑璒璘璙璚璜璟璠璡璣璦璨璩璪璫璮璯璱璲璵璹璻璿瓈瓉瓌瓐瓓瓘瓚瓛瓞瓟瓤瓨瓪瓫瓯瓴瓺瓻瓼瓿甆" - ], - [ - "8fcda1", - "甒甖甗甠甡甤甧甩甪甯甶甹甽甾甿畀畃畇畈畎畐畒畗畞畟畡畯畱畹", - 5, - "疁疅疐疒疓疕疙疜疢疤疴疺疿痀痁痄痆痌痎痏痗痜痟痠痡痤痧痬痮痯痱痹瘀瘂瘃瘄瘇瘈瘊瘌瘏瘒瘓瘕瘖瘙瘛瘜瘝瘞瘣瘥瘦瘩瘭瘲瘳瘵瘸瘹" - ], - [ - "8fcea1", - "瘺瘼癊癀癁癃癄癅癉癋癕癙癟癤癥癭癮癯癱癴皁皅皌皍皕皛皜皝皟皠皢", - 6, - "皪皭皽盁盅盉盋盌盎盔盙盠盦盨盬盰盱盶盹盼眀眆眊眎眒眔眕眗眙眚眜眢眨眭眮眯眴眵眶眹眽眾睂睅睆睊睍睎睏睒睖睗睜睞睟睠睢" - ], - [ - "8fcfa1", - "睤睧睪睬睰睲睳睴睺睽瞀瞄瞌瞍瞔瞕瞖瞚瞟瞢瞧瞪瞮瞯瞱瞵瞾矃矉矑矒矕矙矞矟矠矤矦矪矬矰矱矴矸矻砅砆砉砍砎砑砝砡砢砣砭砮砰砵砷硃硄硇硈硌硎硒硜硞硠硡硣硤硨硪确硺硾碊碏碔碘碡碝碞碟碤碨碬碭碰碱碲碳" - ], - [ - "8fd0a1", - "碻碽碿磇磈磉磌磎磒磓磕磖磤磛磟磠磡磦磪磲磳礀磶磷磺磻磿礆礌礐礚礜礞礟礠礥礧礩礭礱礴礵礻礽礿祄祅祆祊祋祏祑祔祘祛祜祧祩祫祲祹祻祼祾禋禌禑禓禔禕禖禘禛禜禡禨禩禫禯禱禴禸离秂秄秇秈秊秏秔秖秚秝秞" - ], - [ - "8fd1a1", - "秠秢秥秪秫秭秱秸秼稂稃稇稉稊稌稑稕稛稞稡稧稫稭稯稰稴稵稸稹稺穄穅穇穈穌穕穖穙穜穝穟穠穥穧穪穭穵穸穾窀窂窅窆窊窋窐窑窔窞窠窣窬窳窵窹窻窼竆竉竌竎竑竛竨竩竫竬竱竴竻竽竾笇笔笟笣笧笩笪笫笭笮笯笰" - ], - [ - "8fd2a1", - "笱笴笽笿筀筁筇筎筕筠筤筦筩筪筭筯筲筳筷箄箉箎箐箑箖箛箞箠箥箬箯箰箲箵箶箺箻箼箽篂篅篈篊篔篖篗篙篚篛篨篪篲篴篵篸篹篺篼篾簁簂簃簄簆簉簋簌簎簏簙簛簠簥簦簨簬簱簳簴簶簹簺籆籊籕籑籒籓籙", - 5 - ], - [ - "8fd3a1", - "籡籣籧籩籭籮籰籲籹籼籽粆粇粏粔粞粠粦粰粶粷粺粻粼粿糄糇糈糉糍糏糓糔糕糗糙糚糝糦糩糫糵紃紇紈紉紏紑紒紓紖紝紞紣紦紪紭紱紼紽紾絀絁絇絈絍絑絓絗絙絚絜絝絥絧絪絰絸絺絻絿綁綂綃綅綆綈綋綌綍綑綖綗綝" - ], - [ - "8fd4a1", - "綞綦綧綪綳綶綷綹緂", - 4, - "緌緍緎緗緙縀緢緥緦緪緫緭緱緵緶緹緺縈縐縑縕縗縜縝縠縧縨縬縭縯縳縶縿繄繅繇繎繐繒繘繟繡繢繥繫繮繯繳繸繾纁纆纇纊纍纑纕纘纚纝纞缼缻缽缾缿罃罄罇罏罒罓罛罜罝罡罣罤罥罦罭" - ], - [ - "8fd5a1", - "罱罽罾罿羀羋羍羏羐羑羖羗羜羡羢羦羪羭羴羼羿翀翃翈翎翏翛翟翣翥翨翬翮翯翲翺翽翾翿耇耈耊耍耎耏耑耓耔耖耝耞耟耠耤耦耬耮耰耴耵耷耹耺耼耾聀聄聠聤聦聭聱聵肁肈肎肜肞肦肧肫肸肹胈胍胏胒胔胕胗胘胠胭胮" - ], - [ - "8fd6a1", - "胰胲胳胶胹胺胾脃脋脖脗脘脜脞脠脤脧脬脰脵脺脼腅腇腊腌腒腗腠腡腧腨腩腭腯腷膁膐膄膅膆膋膎膖膘膛膞膢膮膲膴膻臋臃臅臊臎臏臕臗臛臝臞臡臤臫臬臰臱臲臵臶臸臹臽臿舀舃舏舓舔舙舚舝舡舢舨舲舴舺艃艄艅艆" - ], - [ - "8fd7a1", - "艋艎艏艑艖艜艠艣艧艭艴艻艽艿芀芁芃芄芇芉芊芎芑芔芖芘芚芛芠芡芣芤芧芨芩芪芮芰芲芴芷芺芼芾芿苆苐苕苚苠苢苤苨苪苭苯苶苷苽苾茀茁茇茈茊茋荔茛茝茞茟茡茢茬茭茮茰茳茷茺茼茽荂荃荄荇荍荎荑荕荖荗荰荸" - ], - [ - "8fd8a1", - "荽荿莀莂莄莆莍莒莔莕莘莙莛莜莝莦莧莩莬莾莿菀菇菉菏菐菑菔菝荓菨菪菶菸菹菼萁萆萊萏萑萕萙莭萯萹葅葇葈葊葍葏葑葒葖葘葙葚葜葠葤葥葧葪葰葳葴葶葸葼葽蒁蒅蒒蒓蒕蒞蒦蒨蒩蒪蒯蒱蒴蒺蒽蒾蓀蓂蓇蓈蓌蓏蓓" - ], - [ - "8fd9a1", - "蓜蓧蓪蓯蓰蓱蓲蓷蔲蓺蓻蓽蔂蔃蔇蔌蔎蔐蔜蔞蔢蔣蔤蔥蔧蔪蔫蔯蔳蔴蔶蔿蕆蕏", - 4, - "蕖蕙蕜", - 6, - "蕤蕫蕯蕹蕺蕻蕽蕿薁薅薆薉薋薌薏薓薘薝薟薠薢薥薧薴薶薷薸薼薽薾薿藂藇藊藋藎薭藘藚藟藠藦藨藭藳藶藼" - ], - [ - "8fdaa1", - "藿蘀蘄蘅蘍蘎蘐蘑蘒蘘蘙蘛蘞蘡蘧蘩蘶蘸蘺蘼蘽虀虂虆虒虓虖虗虘虙虝虠", - 4, - "虩虬虯虵虶虷虺蚍蚑蚖蚘蚚蚜蚡蚦蚧蚨蚭蚱蚳蚴蚵蚷蚸蚹蚿蛀蛁蛃蛅蛑蛒蛕蛗蛚蛜蛠蛣蛥蛧蚈蛺蛼蛽蜄蜅蜇蜋蜎蜏蜐蜓蜔蜙蜞蜟蜡蜣" - ], - [ - "8fdba1", - "蜨蜮蜯蜱蜲蜹蜺蜼蜽蜾蝀蝃蝅蝍蝘蝝蝡蝤蝥蝯蝱蝲蝻螃", - 6, - "螋螌螐螓螕螗螘螙螞螠螣螧螬螭螮螱螵螾螿蟁蟈蟉蟊蟎蟕蟖蟙蟚蟜蟟蟢蟣蟤蟪蟫蟭蟱蟳蟸蟺蟿蠁蠃蠆蠉蠊蠋蠐蠙蠒蠓蠔蠘蠚蠛蠜蠞蠟蠨蠭蠮蠰蠲蠵" - ], - [ - "8fdca1", - "蠺蠼衁衃衅衈衉衊衋衎衑衕衖衘衚衜衟衠衤衩衱衹衻袀袘袚袛袜袟袠袨袪袺袽袾裀裊", - 4, - "裑裒裓裛裞裧裯裰裱裵裷褁褆褍褎褏褕褖褘褙褚褜褠褦褧褨褰褱褲褵褹褺褾襀襂襅襆襉襏襒襗襚襛襜襡襢襣襫襮襰襳襵襺" - ], - [ - "8fdda1", - "襻襼襽覉覍覐覔覕覛覜覟覠覥覰覴覵覶覷覼觔", - 4, - "觥觩觫觭觱觳觶觹觽觿訄訅訇訏訑訒訔訕訞訠訢訤訦訫訬訯訵訷訽訾詀詃詅詇詉詍詎詓詖詗詘詜詝詡詥詧詵詶詷詹詺詻詾詿誀誃誆誋誏誐誒誖誗誙誟誧誩誮誯誳" - ], - [ - "8fdea1", - "誶誷誻誾諃諆諈諉諊諑諓諔諕諗諝諟諬諰諴諵諶諼諿謅謆謋謑謜謞謟謊謭謰謷謼譂", - 4, - "譈譒譓譔譙譍譞譣譭譶譸譹譼譾讁讄讅讋讍讏讔讕讜讞讟谸谹谽谾豅豇豉豋豏豑豓豔豗豘豛豝豙豣豤豦豨豩豭豳豵豶豻豾貆" - ], - [ - "8fdfa1", - "貇貋貐貒貓貙貛貜貤貹貺賅賆賉賋賏賖賕賙賝賡賨賬賯賰賲賵賷賸賾賿贁贃贉贒贗贛赥赩赬赮赿趂趄趈趍趐趑趕趞趟趠趦趫趬趯趲趵趷趹趻跀跅跆跇跈跊跎跑跔跕跗跙跤跥跧跬跰趼跱跲跴跽踁踄踅踆踋踑踔踖踠踡踢" - ], - [ - "8fe0a1", - "踣踦踧踱踳踶踷踸踹踽蹀蹁蹋蹍蹎蹏蹔蹛蹜蹝蹞蹡蹢蹩蹬蹭蹯蹰蹱蹹蹺蹻躂躃躉躐躒躕躚躛躝躞躢躧躩躭躮躳躵躺躻軀軁軃軄軇軏軑軔軜軨軮軰軱軷軹軺軭輀輂輇輈輏輐輖輗輘輞輠輡輣輥輧輨輬輭輮輴輵輶輷輺轀轁" - ], - [ - "8fe1a1", - "轃轇轏轑", - 4, - "轘轝轞轥辝辠辡辤辥辦辵辶辸达迀迁迆迊迋迍运迒迓迕迠迣迤迨迮迱迵迶迻迾适逄逈逌逘逛逨逩逯逪逬逭逳逴逷逿遃遄遌遛遝遢遦遧遬遰遴遹邅邈邋邌邎邐邕邗邘邙邛邠邡邢邥邰邲邳邴邶邽郌邾郃" - ], - [ - "8fe2a1", - "郄郅郇郈郕郗郘郙郜郝郟郥郒郶郫郯郰郴郾郿鄀鄄鄅鄆鄈鄍鄐鄔鄖鄗鄘鄚鄜鄞鄠鄥鄢鄣鄧鄩鄮鄯鄱鄴鄶鄷鄹鄺鄼鄽酃酇酈酏酓酗酙酚酛酡酤酧酭酴酹酺酻醁醃醅醆醊醎醑醓醔醕醘醞醡醦醨醬醭醮醰醱醲醳醶醻醼醽醿" - ], - [ - "8fe3a1", - "釂釃釅釓釔釗釙釚釞釤釥釩釪釬", - 5, - "釷釹釻釽鈀鈁鈄鈅鈆鈇鈉鈊鈌鈐鈒鈓鈖鈘鈜鈝鈣鈤鈥鈦鈨鈮鈯鈰鈳鈵鈶鈸鈹鈺鈼鈾鉀鉂鉃鉆鉇鉊鉍鉎鉏鉑鉘鉙鉜鉝鉠鉡鉥鉧鉨鉩鉮鉯鉰鉵", - 4, - "鉻鉼鉽鉿銈銉銊銍銎銒銗" - ], - [ - "8fe4a1", - "銙銟銠銤銥銧銨銫銯銲銶銸銺銻銼銽銿", - 4, - "鋅鋆鋇鋈鋋鋌鋍鋎鋐鋓鋕鋗鋘鋙鋜鋝鋟鋠鋡鋣鋥鋧鋨鋬鋮鋰鋹鋻鋿錀錂錈錍錑錔錕錜錝錞錟錡錤錥錧錩錪錳錴錶錷鍇鍈鍉鍐鍑鍒鍕鍗鍘鍚鍞鍤鍥鍧鍩鍪鍭鍯鍰鍱鍳鍴鍶" - ], - [ - "8fe5a1", - "鍺鍽鍿鎀鎁鎂鎈鎊鎋鎍鎏鎒鎕鎘鎛鎞鎡鎣鎤鎦鎨鎫鎴鎵鎶鎺鎩鏁鏄鏅鏆鏇鏉", - 4, - "鏓鏙鏜鏞鏟鏢鏦鏧鏹鏷鏸鏺鏻鏽鐁鐂鐄鐈鐉鐍鐎鐏鐕鐖鐗鐟鐮鐯鐱鐲鐳鐴鐻鐿鐽鑃鑅鑈鑊鑌鑕鑙鑜鑟鑡鑣鑨鑫鑭鑮鑯鑱鑲钄钃镸镹" - ], - [ - "8fe6a1", - "镾閄閈閌閍閎閝閞閟閡閦閩閫閬閴閶閺閽閿闆闈闉闋闐闑闒闓闙闚闝闞闟闠闤闦阝阞阢阤阥阦阬阱阳阷阸阹阺阼阽陁陒陔陖陗陘陡陮陴陻陼陾陿隁隂隃隄隉隑隖隚隝隟隤隥隦隩隮隯隳隺雊雒嶲雘雚雝雞雟雩雯雱雺霂" - ], - [ - "8fe7a1", - "霃霅霉霚霛霝霡霢霣霨霱霳靁靃靊靎靏靕靗靘靚靛靣靧靪靮靳靶靷靸靻靽靿鞀鞉鞕鞖鞗鞙鞚鞞鞟鞢鞬鞮鞱鞲鞵鞶鞸鞹鞺鞼鞾鞿韁韄韅韇韉韊韌韍韎韐韑韔韗韘韙韝韞韠韛韡韤韯韱韴韷韸韺頇頊頙頍頎頔頖頜頞頠頣頦" - ], - [ - "8fe8a1", - "頫頮頯頰頲頳頵頥頾顄顇顊顑顒顓顖顗顙顚顢顣顥顦顪顬颫颭颮颰颴颷颸颺颻颿飂飅飈飌飡飣飥飦飧飪飳飶餂餇餈餑餕餖餗餚餛餜餟餢餦餧餫餱", - 4, - "餹餺餻餼饀饁饆饇饈饍饎饔饘饙饛饜饞饟饠馛馝馟馦馰馱馲馵" - ], - [ - "8fe9a1", - "馹馺馽馿駃駉駓駔駙駚駜駞駧駪駫駬駰駴駵駹駽駾騂騃騄騋騌騐騑騖騞騠騢騣騤騧騭騮騳騵騶騸驇驁驄驊驋驌驎驑驔驖驝骪骬骮骯骲骴骵骶骹骻骾骿髁髃髆髈髎髐髒髕髖髗髛髜髠髤髥髧髩髬髲髳髵髹髺髽髿", - 4 - ], - [ - "8feaa1", - "鬄鬅鬈鬉鬋鬌鬍鬎鬐鬒鬖鬙鬛鬜鬠鬦鬫鬭鬳鬴鬵鬷鬹鬺鬽魈魋魌魕魖魗魛魞魡魣魥魦魨魪", - 4, - "魳魵魷魸魹魿鮀鮄鮅鮆鮇鮉鮊鮋鮍鮏鮐鮔鮚鮝鮞鮦鮧鮩鮬鮰鮱鮲鮷鮸鮻鮼鮾鮿鯁鯇鯈鯎鯐鯗鯘鯝鯟鯥鯧鯪鯫鯯鯳鯷鯸" - ], - [ - "8feba1", - "鯹鯺鯽鯿鰀鰂鰋鰏鰑鰖鰘鰙鰚鰜鰞鰢鰣鰦", - 4, - "鰱鰵鰶鰷鰽鱁鱃鱄鱅鱉鱊鱎鱏鱐鱓鱔鱖鱘鱛鱝鱞鱟鱣鱩鱪鱜鱫鱨鱮鱰鱲鱵鱷鱻鳦鳲鳷鳹鴋鴂鴑鴗鴘鴜鴝鴞鴯鴰鴲鴳鴴鴺鴼鵅鴽鵂鵃鵇鵊鵓鵔鵟鵣鵢鵥鵩鵪鵫鵰鵶鵷鵻" - ], - [ - "8feca1", - "鵼鵾鶃鶄鶆鶊鶍鶎鶒鶓鶕鶖鶗鶘鶡鶪鶬鶮鶱鶵鶹鶼鶿鷃鷇鷉鷊鷔鷕鷖鷗鷚鷞鷟鷠鷥鷧鷩鷫鷮鷰鷳鷴鷾鸊鸂鸇鸎鸐鸑鸒鸕鸖鸙鸜鸝鹺鹻鹼麀麂麃麄麅麇麎麏麖麘麛麞麤麨麬麮麯麰麳麴麵黆黈黋黕黟黤黧黬黭黮黰黱黲黵" - ], - [ - "8feda1", - "黸黿鼂鼃鼉鼏鼐鼑鼒鼔鼖鼗鼙鼚鼛鼟鼢鼦鼪鼫鼯鼱鼲鼴鼷鼹鼺鼼鼽鼿齁齃", - 4, - "齓齕齖齗齘齚齝齞齨齩齭", - 4, - "齳齵齺齽龏龐龑龒龔龖龗龞龡龢龣龥" - ] -]; - -var require$$2 = [ - [ - "0", - "\u0000", - 127, - "€" - ], - [ - "8140", - "丂丄丅丆丏丒丗丟丠両丣並丩丮丯丱丳丵丷丼乀乁乂乄乆乊乑乕乗乚乛乢乣乤乥乧乨乪", - 5, - "乲乴", - 9, - "乿", - 6, - "亇亊" - ], - [ - "8180", - "亐亖亗亙亜亝亞亣亪亯亰亱亴亶亷亸亹亼亽亾仈仌仏仐仒仚仛仜仠仢仦仧仩仭仮仯仱仴仸仹仺仼仾伀伂", - 6, - "伋伌伒", - 4, - "伜伝伡伣伨伩伬伭伮伱伳伵伷伹伻伾", - 4, - "佄佅佇", - 5, - "佒佔佖佡佢佦佨佪佫佭佮佱佲併佷佸佹佺佽侀侁侂侅來侇侊侌侎侐侒侓侕侖侘侙侚侜侞侟価侢" - ], - [ - "8240", - "侤侫侭侰", - 4, - "侶", - 8, - "俀俁係俆俇俈俉俋俌俍俒", - 4, - "俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿", - 11 - ], - [ - "8280", - "個倎倐們倓倕倖倗倛倝倞倠倢倣値倧倫倯", - 10, - "倻倽倿偀偁偂偄偅偆偉偊偋偍偐", - 4, - "偖偗偘偙偛偝", - 7, - "偦", - 5, - "偭", - 8, - "偸偹偺偼偽傁傂傃傄傆傇傉傊傋傌傎", - 20, - "傤傦傪傫傭", - 4, - "傳", - 6, - "傼" - ], - [ - "8340", - "傽", - 17, - "僐", - 5, - "僗僘僙僛", - 10, - "僨僩僪僫僯僰僱僲僴僶", - 4, - "僼", - 9, - "儈" - ], - [ - "8380", - "儉儊儌", - 5, - "儓", - 13, - "儢", - 28, - "兂兇兊兌兎兏児兒兓兗兘兙兛兝", - 4, - "兣兤兦內兩兪兯兲兺兾兿冃冄円冇冊冋冎冏冐冑冓冔冘冚冝冞冟冡冣冦", - 4, - "冭冮冴冸冹冺冾冿凁凂凃凅凈凊凍凎凐凒", - 5 - ], - [ - "8440", - "凘凙凚凜凞凟凢凣凥", - 5, - "凬凮凱凲凴凷凾刄刅刉刋刌刏刐刓刔刕刜刞刟刡刢刣別刦刧刪刬刯刱刲刴刵刼刾剄", - 5, - "剋剎剏剒剓剕剗剘" - ], - [ - "8480", - "剙剚剛剝剟剠剢剣剤剦剨剫剬剭剮剰剱剳", - 9, - "剾劀劃", - 4, - "劉", - 6, - "劑劒劔", - 6, - "劜劤劥劦劧劮劯劰労", - 9, - "勀勁勂勄勅勆勈勊勌勍勎勏勑勓勔動勗務", - 5, - "勠勡勢勣勥", - 10, - "勱", - 7, - "勻勼勽匁匂匃匄匇匉匊匋匌匎" - ], - [ - "8540", - "匑匒匓匔匘匛匜匞匟匢匤匥匧匨匩匫匬匭匯", - 9, - "匼匽區卂卄卆卋卌卍卐協単卙卛卝卥卨卪卬卭卲卶卹卻卼卽卾厀厁厃厇厈厊厎厏" - ], - [ - "8580", - "厐", - 4, - "厖厗厙厛厜厞厠厡厤厧厪厫厬厭厯", - 6, - "厷厸厹厺厼厽厾叀參", - 4, - "収叏叐叒叓叕叚叜叝叞叡叢叧叴叺叾叿吀吂吅吇吋吔吘吙吚吜吢吤吥吪吰吳吶吷吺吽吿呁呂呄呅呇呉呌呍呎呏呑呚呝", - 4, - "呣呥呧呩", - 7, - "呴呹呺呾呿咁咃咅咇咈咉咊咍咑咓咗咘咜咞咟咠咡" - ], - [ - "8640", - "咢咥咮咰咲咵咶咷咹咺咼咾哃哅哊哋哖哘哛哠", - 4, - "哫哬哯哰哱哴", - 5, - "哻哾唀唂唃唄唅唈唊", - 4, - "唒唓唕", - 5, - "唜唝唞唟唡唥唦" - ], - [ - "8680", - "唨唩唫唭唲唴唵唶唸唹唺唻唽啀啂啅啇啈啋", - 4, - "啑啒啓啔啗", - 4, - "啝啞啟啠啢啣啨啩啫啯", - 5, - "啹啺啽啿喅喆喌喍喎喐喒喓喕喖喗喚喛喞喠", - 6, - "喨", - 8, - "喲喴営喸喺喼喿", - 4, - "嗆嗇嗈嗊嗋嗎嗏嗐嗕嗗", - 4, - "嗞嗠嗢嗧嗩嗭嗮嗰嗱嗴嗶嗸", - 4, - "嗿嘂嘃嘄嘅" - ], - [ - "8740", - "嘆嘇嘊嘋嘍嘐", - 7, - "嘙嘚嘜嘝嘠嘡嘢嘥嘦嘨嘩嘪嘫嘮嘯嘰嘳嘵嘷嘸嘺嘼嘽嘾噀", - 11, - "噏", - 4, - "噕噖噚噛噝", - 4 - ], - [ - "8780", - "噣噥噦噧噭噮噯噰噲噳噴噵噷噸噹噺噽", - 7, - "嚇", - 6, - "嚐嚑嚒嚔", - 14, - "嚤", - 10, - "嚰", - 6, - "嚸嚹嚺嚻嚽", - 12, - "囋", - 8, - "囕囖囘囙囜団囥", - 5, - "囬囮囯囲図囶囷囸囻囼圀圁圂圅圇國", - 6 - ], - [ - "8840", - "園", - 9, - "圝圞圠圡圢圤圥圦圧圫圱圲圴", - 4, - "圼圽圿坁坃坄坅坆坈坉坋坒", - 4, - "坘坙坢坣坥坧坬坮坰坱坲坴坵坸坹坺坽坾坿垀" - ], - [ - "8880", - "垁垇垈垉垊垍", - 4, - "垔", - 6, - "垜垝垞垟垥垨垪垬垯垰垱垳垵垶垷垹", - 8, - "埄", - 6, - "埌埍埐埑埓埖埗埛埜埞埡埢埣埥", - 7, - "埮埰埱埲埳埵埶執埻埼埾埿堁堃堄堅堈堉堊堌堎堏堐堒堓堔堖堗堘堚堛堜堝堟堢堣堥", - 4, - "堫", - 4, - "報堲堳場堶", - 7 - ], - [ - "8940", - "堾", - 5, - "塅", - 6, - "塎塏塐塒塓塕塖塗塙", - 4, - "塟", - 5, - "塦", - 4, - "塭", - 16, - "塿墂墄墆墇墈墊墋墌" - ], - [ - "8980", - "墍", - 4, - "墔", - 4, - "墛墜墝墠", - 7, - "墪", - 17, - "墽墾墿壀壂壃壄壆", - 10, - "壒壓壔壖", - 13, - "壥", - 5, - "壭壯壱売壴壵壷壸壺", - 7, - "夃夅夆夈", - 4, - "夎夐夑夒夓夗夘夛夝夞夠夡夢夣夦夨夬夰夲夳夵夶夻" - ], - [ - "8a40", - "夽夾夿奀奃奅奆奊奌奍奐奒奓奙奛", - 4, - "奡奣奤奦", - 12, - "奵奷奺奻奼奾奿妀妅妉妋妌妎妏妐妑妔妕妘妚妛妜妝妟妠妡妢妦" - ], - [ - "8a80", - "妧妬妭妰妱妳", - 5, - "妺妼妽妿", - 6, - "姇姈姉姌姍姎姏姕姖姙姛姞", - 4, - "姤姦姧姩姪姫姭", - 11, - "姺姼姽姾娀娂娊娋娍娎娏娐娒娔娕娖娗娙娚娛娝娞娡娢娤娦娧娨娪", - 6, - "娳娵娷", - 4, - "娽娾娿婁", - 4, - "婇婈婋", - 9, - "婖婗婘婙婛", - 5 - ], - [ - "8b40", - "婡婣婤婥婦婨婩婫", - 8, - "婸婹婻婼婽婾媀", - 17, - "媓", - 6, - "媜", - 13, - "媫媬" - ], - [ - "8b80", - "媭", - 4, - "媴媶媷媹", - 4, - "媿嫀嫃", - 5, - "嫊嫋嫍", - 4, - "嫓嫕嫗嫙嫚嫛嫝嫞嫟嫢嫤嫥嫧嫨嫪嫬", - 4, - "嫲", - 22, - "嬊", - 11, - "嬘", - 25, - "嬳嬵嬶嬸", - 7, - "孁", - 6 - ], - [ - "8c40", - "孈", - 7, - "孒孖孞孠孡孧孨孫孭孮孯孲孴孶孷學孹孻孼孾孿宂宆宊宍宎宐宑宒宔宖実宧宨宩宬宭宮宯宱宲宷宺宻宼寀寁寃寈寉寊寋寍寎寏" - ], - [ - "8c80", - "寑寔", - 8, - "寠寢寣實寧審", - 4, - "寯寱", - 6, - "寽対尀専尃尅將專尋尌對導尐尒尓尗尙尛尞尟尠尡尣尦尨尩尪尫尭尮尯尰尲尳尵尶尷屃屄屆屇屌屍屒屓屔屖屗屘屚屛屜屝屟屢層屧", - 6, - "屰屲", - 6, - "屻屼屽屾岀岃", - 4, - "岉岊岋岎岏岒岓岕岝", - 4, - "岤", - 4 - ], - [ - "8d40", - "岪岮岯岰岲岴岶岹岺岻岼岾峀峂峃峅", - 5, - "峌", - 5, - "峓", - 5, - "峚", - 6, - "峢峣峧峩峫峬峮峯峱", - 9, - "峼", - 4 - ], - [ - "8d80", - "崁崄崅崈", - 5, - "崏", - 4, - "崕崗崘崙崚崜崝崟", - 4, - "崥崨崪崫崬崯", - 4, - "崵", - 7, - "崿", - 7, - "嵈嵉嵍", - 10, - "嵙嵚嵜嵞", - 10, - "嵪嵭嵮嵰嵱嵲嵳嵵", - 12, - "嶃", - 21, - "嶚嶛嶜嶞嶟嶠" - ], - [ - "8e40", - "嶡", - 21, - "嶸", - 12, - "巆", - 6, - "巎", - 12, - "巜巟巠巣巤巪巬巭" - ], - [ - "8e80", - "巰巵巶巸", - 4, - "巿帀帄帇帉帊帋帍帎帒帓帗帞", - 7, - "帨", - 4, - "帯帰帲", - 4, - "帹帺帾帿幀幁幃幆", - 5, - "幍", - 6, - "幖", - 4, - "幜幝幟幠幣", - 14, - "幵幷幹幾庁庂広庅庈庉庌庍庎庒庘庛庝庡庢庣庤庨", - 4, - "庮", - 4, - "庴庺庻庼庽庿", - 6 - ], - [ - "8f40", - "廆廇廈廋", - 5, - "廔廕廗廘廙廚廜", - 11, - "廩廫", - 8, - "廵廸廹廻廼廽弅弆弇弉弌弍弎弐弒弔弖弙弚弜弝弞弡弢弣弤" - ], - [ - "8f80", - "弨弫弬弮弰弲", - 6, - "弻弽弾弿彁", - 14, - "彑彔彙彚彛彜彞彟彠彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿徃徆徍徎徏徑従徔徖徚徛徝從徟徠徢", - 5, - "復徫徬徯", - 5, - "徶徸徹徺徻徾", - 4, - "忇忈忊忋忎忓忔忕忚忛応忞忟忢忣忥忦忨忩忬忯忰忲忳忴忶忷忹忺忼怇" - ], - [ - "9040", - "怈怉怋怌怐怑怓怗怘怚怞怟怢怣怤怬怭怮怰", - 4, - "怶", - 4, - "怽怾恀恄", - 6, - "恌恎恏恑恓恔恖恗恘恛恜恞恟恠恡恥恦恮恱恲恴恵恷恾悀" - ], - [ - "9080", - "悁悂悅悆悇悈悊悋悎悏悐悑悓悕悗悘悙悜悞悡悢悤悥悧悩悪悮悰悳悵悶悷悹悺悽", - 7, - "惇惈惉惌", - 4, - "惒惓惔惖惗惙惛惞惡", - 4, - "惪惱惲惵惷惸惻", - 4, - "愂愃愄愅愇愊愋愌愐", - 4, - "愖愗愘愙愛愜愝愞愡愢愥愨愩愪愬", - 18, - "慀", - 6 - ], - [ - "9140", - "慇慉態慍慏慐慒慓慔慖", - 6, - "慞慟慠慡慣慤慥慦慩", - 6, - "慱慲慳慴慶慸", - 18, - "憌憍憏", - 4, - "憕" - ], - [ - "9180", - "憖", - 6, - "憞", - 8, - "憪憫憭", - 9, - "憸", - 5, - "憿懀懁懃", - 4, - "應懌", - 4, - "懓懕", - 16, - "懧", - 13, - "懶", - 8, - "戀", - 5, - "戇戉戓戔戙戜戝戞戠戣戦戧戨戩戫戭戯戰戱戲戵戶戸", - 4, - "扂扄扅扆扊" - ], - [ - "9240", - "扏扐払扖扗扙扚扜", - 6, - "扤扥扨扱扲扴扵扷扸扺扻扽抁抂抃抅抆抇抈抋", - 5, - "抔抙抜抝択抣抦抧抩抪抭抮抯抰抲抳抴抶抷抸抺抾拀拁" - ], - [ - "9280", - "拃拋拏拑拕拝拞拠拡拤拪拫拰拲拵拸拹拺拻挀挃挄挅挆挊挋挌挍挏挐挒挓挔挕挗挘挙挜挦挧挩挬挭挮挰挱挳", - 5, - "挻挼挾挿捀捁捄捇捈捊捑捒捓捔捖", - 7, - "捠捤捥捦捨捪捫捬捯捰捲捳捴捵捸捹捼捽捾捿掁掃掄掅掆掋掍掑掓掔掕掗掙", - 6, - "採掤掦掫掯掱掲掵掶掹掻掽掿揀" - ], - [ - "9340", - "揁揂揃揅揇揈揊揋揌揑揓揔揕揗", - 6, - "揟揢揤", - 4, - "揫揬揮揯揰揱揳揵揷揹揺揻揼揾搃搄搆", - 4, - "損搎搑搒搕", - 5, - "搝搟搢搣搤" - ], - [ - "9380", - "搥搧搨搩搫搮", - 5, - "搵", - 4, - "搻搼搾摀摂摃摉摋", - 6, - "摓摕摖摗摙", - 4, - "摟", - 7, - "摨摪摫摬摮", - 9, - "摻", - 6, - "撃撆撈", - 8, - "撓撔撗撘撚撛撜撝撟", - 4, - "撥撦撧撨撪撫撯撱撲撳撴撶撹撻撽撾撿擁擃擄擆", - 6, - "擏擑擓擔擕擖擙據" - ], - [ - "9440", - "擛擜擝擟擠擡擣擥擧", - 24, - "攁", - 7, - "攊", - 7, - "攓", - 4, - "攙", - 8 - ], - [ - "9480", - "攢攣攤攦", - 4, - "攬攭攰攱攲攳攷攺攼攽敀", - 4, - "敆敇敊敋敍敎敐敒敓敔敗敘敚敜敟敠敡敤敥敧敨敩敪敭敮敯敱敳敵敶數", - 14, - "斈斉斊斍斎斏斒斔斕斖斘斚斝斞斠斢斣斦斨斪斬斮斱", - 7, - "斺斻斾斿旀旂旇旈旉旊旍旐旑旓旔旕旘", - 7, - "旡旣旤旪旫" - ], - [ - "9540", - "旲旳旴旵旸旹旻", - 4, - "昁昄昅昇昈昉昋昍昐昑昒昖昗昘昚昛昜昞昡昢昣昤昦昩昪昫昬昮昰昲昳昷", - 4, - "昽昿晀時晄", - 6, - "晍晎晐晑晘" - ], - [ - "9580", - "晙晛晜晝晞晠晢晣晥晧晩", - 4, - "晱晲晳晵晸晹晻晼晽晿暀暁暃暅暆暈暉暊暋暍暎暏暐暒暓暔暕暘", - 4, - "暞", - 8, - "暩", - 4, - "暯", - 4, - "暵暶暷暸暺暻暼暽暿", - 25, - "曚曞", - 7, - "曧曨曪", - 5, - "曱曵曶書曺曻曽朁朂會" - ], - [ - "9640", - "朄朅朆朇朌朎朏朑朒朓朖朘朙朚朜朞朠", - 5, - "朧朩朮朰朲朳朶朷朸朹朻朼朾朿杁杄杅杇杊杋杍杒杔杕杗", - 4, - "杝杢杣杤杦杧杫杬杮東杴杶" - ], - [ - "9680", - "杸杹杺杻杽枀枂枃枅枆枈枊枌枍枎枏枑枒枓枔枖枙枛枟枠枡枤枦枩枬枮枱枲枴枹", - 7, - "柂柅", - 9, - "柕柖柗柛柟柡柣柤柦柧柨柪柫柭柮柲柵", - 7, - "柾栁栂栃栄栆栍栐栒栔栕栘", - 4, - "栞栟栠栢", - 6, - "栫", - 6, - "栴栵栶栺栻栿桇桋桍桏桒桖", - 5 - ], - [ - "9740", - "桜桝桞桟桪桬", - 7, - "桵桸", - 8, - "梂梄梇", - 7, - "梐梑梒梔梕梖梘", - 9, - "梣梤梥梩梪梫梬梮梱梲梴梶梷梸" - ], - [ - "9780", - "梹", - 6, - "棁棃", - 5, - "棊棌棎棏棐棑棓棔棖棗棙棛", - 4, - "棡棢棤", - 9, - "棯棲棳棴棶棷棸棻棽棾棿椀椂椃椄椆", - 4, - "椌椏椑椓", - 11, - "椡椢椣椥", - 7, - "椮椯椱椲椳椵椶椷椸椺椻椼椾楀楁楃", - 16, - "楕楖楘楙楛楜楟" - ], - [ - "9840", - "楡楢楤楥楧楨楩楪楬業楯楰楲", - 4, - "楺楻楽楾楿榁榃榅榊榋榌榎", - 5, - "榖榗榙榚榝", - 9, - "榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽" - ], - [ - "9880", - "榾榿槀槂", - 7, - "構槍槏槑槒槓槕", - 5, - "槜槝槞槡", - 11, - "槮槯槰槱槳", - 9, - "槾樀", - 9, - "樋", - 11, - "標", - 5, - "樠樢", - 5, - "権樫樬樭樮樰樲樳樴樶", - 6, - "樿", - 4, - "橅橆橈", - 7, - "橑", - 6, - "橚" - ], - [ - "9940", - "橜", - 4, - "橢橣橤橦", - 10, - "橲", - 6, - "橺橻橽橾橿檁檂檃檅", - 8, - "檏檒", - 4, - "檘", - 7, - "檡", - 5 - ], - [ - "9980", - "檧檨檪檭", - 114, - "欥欦欨", - 6 - ], - [ - "9a40", - "欯欰欱欳欴欵欶欸欻欼欽欿歀歁歂歄歅歈歊歋歍", - 11, - "歚", - 7, - "歨歩歫", - 13, - "歺歽歾歿殀殅殈" - ], - [ - "9a80", - "殌殎殏殐殑殔殕殗殘殙殜", - 4, - "殢", - 7, - "殫", - 7, - "殶殸", - 6, - "毀毃毄毆", - 4, - "毌毎毐毑毘毚毜", - 4, - "毢", - 7, - "毬毭毮毰毱毲毴毶毷毸毺毻毼毾", - 6, - "氈", - 4, - "氎氒気氜氝氞氠氣氥氫氬氭氱氳氶氷氹氺氻氼氾氿汃汄汅汈汋", - 4, - "汑汒汓汖汘" - ], - [ - "9b40", - "汙汚汢汣汥汦汧汫", - 4, - "汱汳汵汷汸決汻汼汿沀沄沇沊沋沍沎沑沒沕沖沗沘沚沜沝沞沠沢沨沬沯沰沴沵沶沷沺泀況泂泃泆泇泈泋泍泎泏泑泒泘" - ], - [ - "9b80", - "泙泚泜泝泟泤泦泧泩泬泭泲泴泹泿洀洂洃洅洆洈洉洊洍洏洐洑洓洔洕洖洘洜洝洟", - 5, - "洦洨洩洬洭洯洰洴洶洷洸洺洿浀浂浄浉浌浐浕浖浗浘浛浝浟浡浢浤浥浧浨浫浬浭浰浱浲浳浵浶浹浺浻浽", - 4, - "涃涄涆涇涊涋涍涏涐涒涖", - 4, - "涜涢涥涬涭涰涱涳涴涶涷涹", - 5, - "淁淂淃淈淉淊" - ], - [ - "9c40", - "淍淎淏淐淒淓淔淕淗淚淛淜淟淢淣淥淧淨淩淪淭淯淰淲淴淵淶淸淺淽", - 7, - "渆渇済渉渋渏渒渓渕渘渙減渜渞渟渢渦渧渨渪測渮渰渱渳渵" - ], - [ - "9c80", - "渶渷渹渻", - 7, - "湅", - 7, - "湏湐湑湒湕湗湙湚湜湝湞湠", - 10, - "湬湭湯", - 14, - "満溁溂溄溇溈溊", - 4, - "溑", - 6, - "溙溚溛溝溞溠溡溣溤溦溨溩溫溬溭溮溰溳溵溸溹溼溾溿滀滃滄滅滆滈滉滊滌滍滎滐滒滖滘滙滛滜滝滣滧滪", - 5 - ], - [ - "9d40", - "滰滱滲滳滵滶滷滸滺", - 7, - "漃漄漅漇漈漊", - 4, - "漐漑漒漖", - 9, - "漡漢漣漥漦漧漨漬漮漰漲漴漵漷", - 6, - "漿潀潁潂" - ], - [ - "9d80", - "潃潄潅潈潉潊潌潎", - 9, - "潙潚潛潝潟潠潡潣潤潥潧", - 5, - "潯潰潱潳潵潶潷潹潻潽", - 6, - "澅澆澇澊澋澏", - 12, - "澝澞澟澠澢", - 4, - "澨", - 10, - "澴澵澷澸澺", - 5, - "濁濃", - 5, - "濊", - 6, - "濓", - 10, - "濟濢濣濤濥" - ], - [ - "9e40", - "濦", - 7, - "濰", - 32, - "瀒", - 7, - "瀜", - 6, - "瀤", - 6 - ], - [ - "9e80", - "瀫", - 9, - "瀶瀷瀸瀺", - 17, - "灍灎灐", - 13, - "灟", - 11, - "灮灱灲灳灴灷灹灺灻災炁炂炃炄炆炇炈炋炌炍炏炐炑炓炗炘炚炛炞", - 12, - "炰炲炴炵炶為炾炿烄烅烆烇烉烋", - 12, - "烚" - ], - [ - "9f40", - "烜烝烞烠烡烢烣烥烪烮烰", - 6, - "烸烺烻烼烾", - 10, - "焋", - 4, - "焑焒焔焗焛", - 10, - "焧", - 7, - "焲焳焴" - ], - [ - "9f80", - "焵焷", - 13, - "煆煇煈煉煋煍煏", - 12, - "煝煟", - 4, - "煥煩", - 4, - "煯煰煱煴煵煶煷煹煻煼煾", - 5, - "熅", - 4, - "熋熌熍熎熐熑熒熓熕熖熗熚", - 4, - "熡", - 6, - "熩熪熫熭", - 5, - "熴熶熷熸熺", - 8, - "燄", - 9, - "燏", - 4 - ], - [ - "a040", - "燖", - 9, - "燡燢燣燤燦燨", - 5, - "燯", - 9, - "燺", - 11, - "爇", - 19 - ], - [ - "a080", - "爛爜爞", - 9, - "爩爫爭爮爯爲爳爴爺爼爾牀", - 6, - "牉牊牋牎牏牐牑牓牔牕牗牘牚牜牞牠牣牤牥牨牪牫牬牭牰牱牳牴牶牷牸牻牼牽犂犃犅", - 4, - "犌犎犐犑犓", - 11, - "犠", - 11, - "犮犱犲犳犵犺", - 6, - "狅狆狇狉狊狋狌狏狑狓狔狕狖狘狚狛" - ], - [ - "a1a1", - " 、。·ˉˇ¨〃々—~‖…‘’“”〔〕〈", - 7, - "〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃$¤¢£‰§№☆★○●◎◇◆□■△▲※→←↑↓〓" - ], - [ - "a2a1", - "ⅰ", - 9 - ], - [ - "a2b1", - "⒈", - 19, - "⑴", - 19, - "①", - 9 - ], - [ - "a2e5", - "㈠", - 9 - ], - [ - "a2f1", - "Ⅰ", - 11 - ], - [ - "a3a1", - "!"#¥%", - 88, - " ̄" - ], - [ - "a4a1", - "ぁ", - 82 - ], - [ - "a5a1", - "ァ", - 85 - ], - [ - "a6a1", - "Α", - 16, - "Σ", - 6 - ], - [ - "a6c1", - "α", - 16, - "σ", - 6 - ], - [ - "a6e0", - "︵︶︹︺︿﹀︽︾﹁﹂﹃﹄" - ], - [ - "a6ee", - "︻︼︷︸︱" - ], - [ - "a6f4", - "︳︴" - ], - [ - "a7a1", - "А", - 5, - "ЁЖ", - 25 - ], - [ - "a7d1", - "а", - 5, - "ёж", - 25 - ], - [ - "a840", - "ˊˋ˙–―‥‵℅℉↖↗↘↙∕∟∣≒≦≧⊿═", - 35, - "▁", - 6 - ], - [ - "a880", - "█", - 7, - "▓▔▕▼▽◢◣◤◥☉⊕〒〝〞" - ], - [ - "a8a1", - "āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑ" - ], - [ - "a8bd", - "ńň" - ], - [ - "a8c0", - "ɡ" - ], - [ - "a8c5", - "ㄅ", - 36 - ], - [ - "a940", - "〡", - 8, - "㊣㎎㎏㎜㎝㎞㎡㏄㏎㏑㏒㏕︰¬¦" - ], - [ - "a959", - "℡㈱" - ], - [ - "a95c", - "‐" - ], - [ - "a960", - "ー゛゜ヽヾ〆ゝゞ﹉", - 9, - "﹔﹕﹖﹗﹙", - 8 - ], - [ - "a980", - "﹢", - 4, - "﹨﹩﹪﹫" - ], - [ - "a996", - "〇" - ], - [ - "a9a4", - "─", - 75 - ], - [ - "aa40", - "狜狝狟狢", - 5, - "狪狫狵狶狹狽狾狿猀猂猄", - 5, - "猋猌猍猏猐猑猒猔猘猙猚猟猠猣猤猦猧猨猭猯猰猲猳猵猶猺猻猼猽獀", - 8 - ], - [ - "aa80", - "獉獊獋獌獎獏獑獓獔獕獖獘", - 7, - "獡", - 10, - "獮獰獱" - ], - [ - "ab40", - "獲", - 11, - "獿", - 4, - "玅玆玈玊玌玍玏玐玒玓玔玕玗玘玙玚玜玝玞玠玡玣", - 5, - "玪玬玭玱玴玵玶玸玹玼玽玾玿珁珃", - 4 - ], - [ - "ab80", - "珋珌珎珒", - 6, - "珚珛珜珝珟珡珢珣珤珦珨珪珫珬珮珯珰珱珳", - 4 - ], - [ - "ac40", - "珸", - 10, - "琄琇琈琋琌琍琎琑", - 8, - "琜", - 5, - "琣琤琧琩琫琭琯琱琲琷", - 4, - "琽琾琿瑀瑂", - 11 - ], - [ - "ac80", - "瑎", - 6, - "瑖瑘瑝瑠", - 12, - "瑮瑯瑱", - 4, - "瑸瑹瑺" - ], - [ - "ad40", - "瑻瑼瑽瑿璂璄璅璆璈璉璊璌璍璏璑", - 10, - "璝璟", - 7, - "璪", - 15, - "璻", - 12 - ], - [ - "ad80", - "瓈", - 9, - "瓓", - 8, - "瓝瓟瓡瓥瓧", - 6, - "瓰瓱瓲" - ], - [ - "ae40", - "瓳瓵瓸", - 6, - "甀甁甂甃甅", - 7, - "甎甐甒甔甕甖甗甛甝甞甠", - 4, - "甦甧甪甮甴甶甹甼甽甿畁畂畃畄畆畇畉畊畍畐畑畒畓畕畖畗畘" - ], - [ - "ae80", - "畝", - 7, - "畧畨畩畫", - 6, - "畳畵當畷畺", - 4, - "疀疁疂疄疅疇" - ], - [ - "af40", - "疈疉疊疌疍疎疐疓疕疘疛疜疞疢疦", - 4, - "疭疶疷疺疻疿痀痁痆痋痌痎痏痐痑痓痗痙痚痜痝痟痠痡痥痩痬痭痮痯痲痳痵痶痷痸痺痻痽痾瘂瘄瘆瘇" - ], - [ - "af80", - "瘈瘉瘋瘍瘎瘏瘑瘒瘓瘔瘖瘚瘜瘝瘞瘡瘣瘧瘨瘬瘮瘯瘱瘲瘶瘷瘹瘺瘻瘽癁療癄" - ], - [ - "b040", - "癅", - 6, - "癎", - 5, - "癕癗", - 4, - "癝癟癠癡癢癤", - 6, - "癬癭癮癰", - 7, - "癹発發癿皀皁皃皅皉皊皌皍皏皐皒皔皕皗皘皚皛" - ], - [ - "b080", - "皜", - 7, - "皥", - 8, - "皯皰皳皵", - 9, - "盀盁盃啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥" - ], - [ - "b140", - "盄盇盉盋盌盓盕盙盚盜盝盞盠", - 4, - "盦", - 7, - "盰盳盵盶盷盺盻盽盿眀眂眃眅眆眊県眎", - 10, - "眛眜眝眞眡眣眤眥眧眪眫" - ], - [ - "b180", - "眬眮眰", - 4, - "眹眻眽眾眿睂睄睅睆睈", - 7, - "睒", - 7, - "睜薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳" - ], - [ - "b240", - "睝睞睟睠睤睧睩睪睭", - 11, - "睺睻睼瞁瞂瞃瞆", - 5, - "瞏瞐瞓", - 11, - "瞡瞣瞤瞦瞨瞫瞭瞮瞯瞱瞲瞴瞶", - 4 - ], - [ - "b280", - "瞼瞾矀", - 12, - "矎", - 8, - "矘矙矚矝", - 4, - "矤病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖" - ], - [ - "b340", - "矦矨矪矯矰矱矲矴矵矷矹矺矻矼砃", - 5, - "砊砋砎砏砐砓砕砙砛砞砠砡砢砤砨砪砫砮砯砱砲砳砵砶砽砿硁硂硃硄硆硈硉硊硋硍硏硑硓硔硘硙硚" - ], - [ - "b380", - "硛硜硞", - 11, - "硯", - 7, - "硸硹硺硻硽", - 6, - "场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚" - ], - [ - "b440", - "碄碅碆碈碊碋碏碐碒碔碕碖碙碝碞碠碢碤碦碨", - 7, - "碵碶碷碸確碻碼碽碿磀磂磃磄磆磇磈磌磍磎磏磑磒磓磖磗磘磚", - 9 - ], - [ - "b480", - "磤磥磦磧磩磪磫磭", - 4, - "磳磵磶磸磹磻", - 5, - "礂礃礄礆", - 6, - "础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮" - ], - [ - "b540", - "礍", - 5, - "礔", - 9, - "礟", - 4, - "礥", - 14, - "礵", - 4, - "礽礿祂祃祄祅祇祊", - 8, - "祔祕祘祙祡祣" - ], - [ - "b580", - "祤祦祩祪祫祬祮祰", - 6, - "祹祻", - 4, - "禂禃禆禇禈禉禋禌禍禎禐禑禒怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠" - ], - [ - "b640", - "禓", - 6, - "禛", - 11, - "禨", - 10, - "禴", - 4, - "禼禿秂秄秅秇秈秊秌秎秏秐秓秔秖秗秙", - 5, - "秠秡秢秥秨秪" - ], - [ - "b680", - "秬秮秱", - 6, - "秹秺秼秾秿稁稄稅稇稈稉稊稌稏", - 4, - "稕稖稘稙稛稜丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二" - ], - [ - "b740", - "稝稟稡稢稤", - 14, - "稴稵稶稸稺稾穀", - 5, - "穇", - 9, - "穒", - 4, - "穘", - 16 - ], - [ - "b780", - "穩", - 6, - "穱穲穳穵穻穼穽穾窂窅窇窉窊窋窌窎窏窐窓窔窙窚窛窞窡窢贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服" - ], - [ - "b840", - "窣窤窧窩窪窫窮", - 4, - "窴", - 10, - "竀", - 10, - "竌", - 9, - "竗竘竚竛竜竝竡竢竤竧", - 5, - "竮竰竱竲竳" - ], - [ - "b880", - "竴", - 4, - "竻竼竾笀笁笂笅笇笉笌笍笎笐笒笓笖笗笘笚笜笝笟笡笢笣笧笩笭浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹" - ], - [ - "b940", - "笯笰笲笴笵笶笷笹笻笽笿", - 5, - "筆筈筊筍筎筓筕筗筙筜筞筟筡筣", - 10, - "筯筰筳筴筶筸筺筼筽筿箁箂箃箄箆", - 6, - "箎箏" - ], - [ - "b980", - "箑箒箓箖箘箙箚箛箞箟箠箣箤箥箮箯箰箲箳箵箶箷箹", - 7, - "篂篃範埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈" - ], - [ - "ba40", - "篅篈築篊篋篍篎篏篐篒篔", - 4, - "篛篜篞篟篠篢篣篤篧篨篩篫篬篭篯篰篲", - 4, - "篸篹篺篻篽篿", - 7, - "簈簉簊簍簎簐", - 5, - "簗簘簙" - ], - [ - "ba80", - "簚", - 4, - "簠", - 5, - "簨簩簫", - 12, - "簹", - 5, - "籂骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖" - ], - [ - "bb40", - "籃", - 9, - "籎", - 36, - "籵", - 5, - "籾", - 9 - ], - [ - "bb80", - "粈粊", - 6, - "粓粔粖粙粚粛粠粡粣粦粧粨粩粫粬粭粯粰粴", - 4, - "粺粻弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕" - ], - [ - "bc40", - "粿糀糂糃糄糆糉糋糎", - 6, - "糘糚糛糝糞糡", - 6, - "糩", - 5, - "糰", - 7, - "糹糺糼", - 13, - "紋", - 5 - ], - [ - "bc80", - "紑", - 14, - "紡紣紤紥紦紨紩紪紬紭紮細", - 6, - "肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件" - ], - [ - "bd40", - "紷", - 54, - "絯", - 7 - ], - [ - "bd80", - "絸", - 32, - "健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸" - ], - [ - "be40", - "継", - 12, - "綧", - 6, - "綯", - 42 - ], - [ - "be80", - "線", - 32, - "尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻" - ], - [ - "bf40", - "緻", - 62 - ], - [ - "bf80", - "縺縼", - 4, - "繂", - 4, - "繈", - 21, - "俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀" - ], - [ - "c040", - "繞", - 35, - "纃", - 23, - "纜纝纞" - ], - [ - "c080", - "纮纴纻纼绖绤绬绹缊缐缞缷缹缻", - 6, - "罃罆", - 9, - "罒罓馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐" - ], - [ - "c140", - "罖罙罛罜罝罞罠罣", - 4, - "罫罬罭罯罰罳罵罶罷罸罺罻罼罽罿羀羂", - 7, - "羋羍羏", - 4, - "羕", - 4, - "羛羜羠羢羣羥羦羨", - 6, - "羱" - ], - [ - "c180", - "羳", - 4, - "羺羻羾翀翂翃翄翆翇翈翉翋翍翏", - 4, - "翖翗翙", - 5, - "翢翣痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿" - ], - [ - "c240", - "翤翧翨翪翫翬翭翯翲翴", - 6, - "翽翾翿耂耇耈耉耊耎耏耑耓耚耛耝耞耟耡耣耤耫", - 5, - "耲耴耹耺耼耾聀聁聄聅聇聈聉聎聏聐聑聓聕聖聗" - ], - [ - "c280", - "聙聛", - 13, - "聫", - 5, - "聲", - 11, - "隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫" - ], - [ - "c340", - "聾肁肂肅肈肊肍", - 5, - "肔肕肗肙肞肣肦肧肨肬肰肳肵肶肸肹肻胅胇", - 4, - "胏", - 6, - "胘胟胠胢胣胦胮胵胷胹胻胾胿脀脁脃脄脅脇脈脋" - ], - [ - "c380", - "脌脕脗脙脛脜脝脟", - 12, - "脭脮脰脳脴脵脷脹", - 4, - "脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸" - ], - [ - "c440", - "腀", - 5, - "腇腉腍腎腏腒腖腗腘腛", - 4, - "腡腢腣腤腦腨腪腫腬腯腲腳腵腶腷腸膁膃", - 4, - "膉膋膌膍膎膐膒", - 5, - "膙膚膞", - 4, - "膤膥" - ], - [ - "c480", - "膧膩膫", - 7, - "膴", - 5, - "膼膽膾膿臄臅臇臈臉臋臍", - 6, - "摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁" - ], - [ - "c540", - "臔", - 14, - "臤臥臦臨臩臫臮", - 4, - "臵", - 5, - "臽臿舃與", - 4, - "舎舏舑舓舕", - 5, - "舝舠舤舥舦舧舩舮舲舺舼舽舿" - ], - [ - "c580", - "艀艁艂艃艅艆艈艊艌艍艎艐", - 7, - "艙艛艜艝艞艠", - 7, - "艩拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗" - ], - [ - "c640", - "艪艫艬艭艱艵艶艷艸艻艼芀芁芃芅芆芇芉芌芐芓芔芕芖芚芛芞芠芢芣芧芲芵芶芺芻芼芿苀苂苃苅苆苉苐苖苙苚苝苢苧苨苩苪苬苭苮苰苲苳苵苶苸" - ], - [ - "c680", - "苺苼", - 4, - "茊茋茍茐茒茓茖茘茙茝", - 9, - "茩茪茮茰茲茷茻茽啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐" - ], - [ - "c740", - "茾茿荁荂荄荅荈荊", - 4, - "荓荕", - 4, - "荝荢荰", - 6, - "荹荺荾", - 6, - "莇莈莊莋莌莍莏莐莑莔莕莖莗莙莚莝莟莡", - 6, - "莬莭莮" - ], - [ - "c780", - "莯莵莻莾莿菂菃菄菆菈菉菋菍菎菐菑菒菓菕菗菙菚菛菞菢菣菤菦菧菨菫菬菭恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠" - ], - [ - "c840", - "菮華菳", - 4, - "菺菻菼菾菿萀萂萅萇萈萉萊萐萒", - 5, - "萙萚萛萞", - 5, - "萩", - 7, - "萲", - 5, - "萹萺萻萾", - 7, - "葇葈葉" - ], - [ - "c880", - "葊", - 6, - "葒", - 4, - "葘葝葞葟葠葢葤", - 4, - "葪葮葯葰葲葴葷葹葻葼取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁" - ], - [ - "c940", - "葽", - 4, - "蒃蒄蒅蒆蒊蒍蒏", - 7, - "蒘蒚蒛蒝蒞蒟蒠蒢", - 12, - "蒰蒱蒳蒵蒶蒷蒻蒼蒾蓀蓂蓃蓅蓆蓇蓈蓋蓌蓎蓏蓒蓔蓕蓗" - ], - [ - "c980", - "蓘", - 4, - "蓞蓡蓢蓤蓧", - 4, - "蓭蓮蓯蓱", - 10, - "蓽蓾蔀蔁蔂伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳" - ], - [ - "ca40", - "蔃", - 8, - "蔍蔎蔏蔐蔒蔔蔕蔖蔘蔙蔛蔜蔝蔞蔠蔢", - 8, - "蔭", - 9, - "蔾", - 4, - "蕄蕅蕆蕇蕋", - 10 - ], - [ - "ca80", - "蕗蕘蕚蕛蕜蕝蕟", - 4, - "蕥蕦蕧蕩", - 8, - "蕳蕵蕶蕷蕸蕼蕽蕿薀薁省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱" - ], - [ - "cb40", - "薂薃薆薈", - 6, - "薐", - 10, - "薝", - 6, - "薥薦薧薩薫薬薭薱", - 5, - "薸薺", - 6, - "藂", - 6, - "藊", - 4, - "藑藒" - ], - [ - "cb80", - "藔藖", - 5, - "藝", - 6, - "藥藦藧藨藪", - 14, - "恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔" - ], - [ - "cc40", - "藹藺藼藽藾蘀", - 4, - "蘆", - 10, - "蘒蘓蘔蘕蘗", - 15, - "蘨蘪", - 13, - "蘹蘺蘻蘽蘾蘿虀" - ], - [ - "cc80", - "虁", - 11, - "虒虓處", - 4, - "虛虜虝號虠虡虣", - 7, - "獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃" - ], - [ - "cd40", - "虭虯虰虲", - 6, - "蚃", - 6, - "蚎", - 4, - "蚔蚖", - 5, - "蚞", - 4, - "蚥蚦蚫蚭蚮蚲蚳蚷蚸蚹蚻", - 4, - "蛁蛂蛃蛅蛈蛌蛍蛒蛓蛕蛖蛗蛚蛜" - ], - [ - "cd80", - "蛝蛠蛡蛢蛣蛥蛦蛧蛨蛪蛫蛬蛯蛵蛶蛷蛺蛻蛼蛽蛿蜁蜄蜅蜆蜋蜌蜎蜏蜐蜑蜔蜖汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威" - ], - [ - "ce40", - "蜙蜛蜝蜟蜠蜤蜦蜧蜨蜪蜫蜬蜭蜯蜰蜲蜳蜵蜶蜸蜹蜺蜼蜽蝀", - 6, - "蝊蝋蝍蝏蝐蝑蝒蝔蝕蝖蝘蝚", - 5, - "蝡蝢蝦", - 7, - "蝯蝱蝲蝳蝵" - ], - [ - "ce80", - "蝷蝸蝹蝺蝿螀螁螄螆螇螉螊螌螎", - 4, - "螔螕螖螘", - 6, - "螠", - 4, - "巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺" - ], - [ - "cf40", - "螥螦螧螩螪螮螰螱螲螴螶螷螸螹螻螼螾螿蟁", - 4, - "蟇蟈蟉蟌", - 4, - "蟔", - 6, - "蟜蟝蟞蟟蟡蟢蟣蟤蟦蟧蟨蟩蟫蟬蟭蟯", - 9 - ], - [ - "cf80", - "蟺蟻蟼蟽蟿蠀蠁蠂蠄", - 5, - "蠋", - 7, - "蠔蠗蠘蠙蠚蠜", - 4, - "蠣稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓" - ], - [ - "d040", - "蠤", - 13, - "蠳", - 5, - "蠺蠻蠽蠾蠿衁衂衃衆", - 5, - "衎", - 5, - "衕衖衘衚", - 6, - "衦衧衪衭衯衱衳衴衵衶衸衹衺" - ], - [ - "d080", - "衻衼袀袃袆袇袉袊袌袎袏袐袑袓袔袕袗", - 4, - "袝", - 4, - "袣袥", - 5, - "小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄" - ], - [ - "d140", - "袬袮袯袰袲", - 4, - "袸袹袺袻袽袾袿裀裃裄裇裈裊裋裌裍裏裐裑裓裖裗裚", - 4, - "裠裡裦裧裩", - 6, - "裲裵裶裷裺裻製裿褀褁褃", - 5 - ], - [ - "d180", - "褉褋", - 4, - "褑褔", - 4, - "褜", - 4, - "褢褣褤褦褧褨褩褬褭褮褯褱褲褳褵褷选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶" - ], - [ - "d240", - "褸", - 8, - "襂襃襅", - 24, - "襠", - 5, - "襧", - 19, - "襼" - ], - [ - "d280", - "襽襾覀覂覄覅覇", - 26, - "摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐" - ], - [ - "d340", - "覢", - 30, - "觃觍觓觔觕觗觘觙觛觝觟觠觡觢觤觧觨觩觪觬觭觮觰觱觲觴", - 6 - ], - [ - "d380", - "觻", - 4, - "訁", - 5, - "計", - 21, - "印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉" - ], - [ - "d440", - "訞", - 31, - "訿", - 8, - "詉", - 21 - ], - [ - "d480", - "詟", - 25, - "詺", - 6, - "浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧" - ], - [ - "d540", - "誁", - 7, - "誋", - 7, - "誔", - 46 - ], - [ - "d580", - "諃", - 32, - "铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政" - ], - [ - "d640", - "諤", - 34, - "謈", - 27 - ], - [ - "d680", - "謤謥謧", - 30, - "帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑" - ], - [ - "d740", - "譆", - 31, - "譧", - 4, - "譭", - 25 - ], - [ - "d780", - "讇", - 24, - "讬讱讻诇诐诪谉谞住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座" - ], - [ - "d840", - "谸", - 8, - "豂豃豄豅豈豊豋豍", - 7, - "豖豗豘豙豛", - 5, - "豣", - 6, - "豬", - 6, - "豴豵豶豷豻", - 6, - "貃貄貆貇" - ], - [ - "d880", - "貈貋貍", - 6, - "貕貖貗貙", - 20, - "亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝" - ], - [ - "d940", - "貮", - 62 - ], - [ - "d980", - "賭", - 32, - "佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼" - ], - [ - "da40", - "贎", - 14, - "贠赑赒赗赟赥赨赩赪赬赮赯赱赲赸", - 8, - "趂趃趆趇趈趉趌", - 4, - "趒趓趕", - 9, - "趠趡" - ], - [ - "da80", - "趢趤", - 12, - "趲趶趷趹趻趽跀跁跂跅跇跈跉跊跍跐跒跓跔凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺" - ], - [ - "db40", - "跕跘跙跜跠跡跢跥跦跧跩跭跮跰跱跲跴跶跼跾", - 6, - "踆踇踈踋踍踎踐踑踒踓踕", - 7, - "踠踡踤", - 4, - "踫踭踰踲踳踴踶踷踸踻踼踾" - ], - [ - "db80", - "踿蹃蹅蹆蹌", - 4, - "蹓", - 5, - "蹚", - 11, - "蹧蹨蹪蹫蹮蹱邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝" - ], - [ - "dc40", - "蹳蹵蹷", - 4, - "蹽蹾躀躂躃躄躆躈", - 6, - "躑躒躓躕", - 6, - "躝躟", - 11, - "躭躮躰躱躳", - 6, - "躻", - 7 - ], - [ - "dc80", - "軃", - 10, - "軏", - 21, - "堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥" - ], - [ - "dd40", - "軥", - 62 - ], - [ - "dd80", - "輤", - 32, - "荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺" - ], - [ - "de40", - "轅", - 32, - "轪辀辌辒辝辠辡辢辤辥辦辧辪辬辭辮辯農辳辴辵辷辸辺辻込辿迀迃迆" - ], - [ - "de80", - "迉", - 4, - "迏迒迖迗迚迠迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿逇逈逌逎逓逕逘蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖" - ], - [ - "df40", - "這逜連逤逥逧", - 5, - "逰", - 4, - "逷逹逺逽逿遀遃遅遆遈", - 4, - "過達違遖遙遚遜", - 5, - "遤遦遧適遪遫遬遯", - 4, - "遶", - 6, - "遾邁" - ], - [ - "df80", - "還邅邆邇邉邊邌", - 4, - "邒邔邖邘邚邜邞邟邠邤邥邧邨邩邫邭邲邷邼邽邿郀摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼" - ], - [ - "e040", - "郂郃郆郈郉郋郌郍郒郔郕郖郘郙郚郞郟郠郣郤郥郩郪郬郮郰郱郲郳郵郶郷郹郺郻郼郿鄀鄁鄃鄅", - 19, - "鄚鄛鄜" - ], - [ - "e080", - "鄝鄟鄠鄡鄤", - 10, - "鄰鄲", - 6, - "鄺", - 8, - "酄唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼" - ], - [ - "e140", - "酅酇酈酑酓酔酕酖酘酙酛酜酟酠酦酧酨酫酭酳酺酻酼醀", - 4, - "醆醈醊醎醏醓", - 6, - "醜", - 5, - "醤", - 5, - "醫醬醰醱醲醳醶醷醸醹醻" - ], - [ - "e180", - "醼", - 10, - "釈釋釐釒", - 9, - "針", - 8, - "帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺" - ], - [ - "e240", - "釦", - 62 - ], - [ - "e280", - "鈥", - 32, - "狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧", - 5, - "饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂" - ], - [ - "e340", - "鉆", - 45, - "鉵", - 16 - ], - [ - "e380", - "銆", - 7, - "銏", - 24, - "恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾" - ], - [ - "e440", - "銨", - 5, - "銯", - 24, - "鋉", - 31 - ], - [ - "e480", - "鋩", - 32, - "洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑" - ], - [ - "e540", - "錊", - 51, - "錿", - 10 - ], - [ - "e580", - "鍊", - 31, - "鍫濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣" - ], - [ - "e640", - "鍬", - 34, - "鎐", - 27 - ], - [ - "e680", - "鎬", - 29, - "鏋鏌鏍妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩" - ], - [ - "e740", - "鏎", - 7, - "鏗", - 54 - ], - [ - "e780", - "鐎", - 32, - "纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡", - 6, - "缪缫缬缭缯", - 4, - "缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬" - ], - [ - "e840", - "鐯", - 14, - "鐿", - 43, - "鑬鑭鑮鑯" - ], - [ - "e880", - "鑰", - 20, - "钑钖钘铇铏铓铔铚铦铻锜锠琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹" - ], - [ - "e940", - "锧锳锽镃镈镋镕镚镠镮镴镵長", - 7, - "門", - 42 - ], - [ - "e980", - "閫", - 32, - "椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋" - ], - [ - "ea40", - "闌", - 27, - "闬闿阇阓阘阛阞阠阣", - 6, - "阫阬阭阯阰阷阸阹阺阾陁陃陊陎陏陑陒陓陖陗" - ], - [ - "ea80", - "陘陙陚陜陝陞陠陣陥陦陫陭", - 4, - "陳陸", - 12, - "隇隉隊辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰" - ], - [ - "eb40", - "隌階隑隒隓隕隖隚際隝", - 9, - "隨", - 7, - "隱隲隴隵隷隸隺隻隿雂雃雈雊雋雐雑雓雔雖", - 9, - "雡", - 6, - "雫" - ], - [ - "eb80", - "雬雭雮雰雱雲雴雵雸雺電雼雽雿霂霃霅霊霋霌霐霑霒霔霕霗", - 4, - "霝霟霠搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻" - ], - [ - "ec40", - "霡", - 8, - "霫霬霮霯霱霳", - 4, - "霺霻霼霽霿", - 18, - "靔靕靗靘靚靜靝靟靣靤靦靧靨靪", - 7 - ], - [ - "ec80", - "靲靵靷", - 4, - "靽", - 7, - "鞆", - 4, - "鞌鞎鞏鞐鞓鞕鞖鞗鞙", - 4, - "臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐" - ], - [ - "ed40", - "鞞鞟鞡鞢鞤", - 6, - "鞬鞮鞰鞱鞳鞵", - 46 - ], - [ - "ed80", - "韤韥韨韮", - 4, - "韴韷", - 23, - "怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨" - ], - [ - "ee40", - "頏", - 62 - ], - [ - "ee80", - "顎", - 32, - "睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶", - 4, - "钼钽钿铄铈", - 6, - "铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪" - ], - [ - "ef40", - "顯", - 5, - "颋颎颒颕颙颣風", - 37, - "飏飐飔飖飗飛飜飝飠", - 4 - ], - [ - "ef80", - "飥飦飩", - 30, - "铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒", - 4, - "锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤", - 8, - "镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔" - ], - [ - "f040", - "餈", - 4, - "餎餏餑", - 28, - "餯", - 26 - ], - [ - "f080", - "饊", - 9, - "饖", - 12, - "饤饦饳饸饹饻饾馂馃馉稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨", - 4, - "鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦", - 6, - "鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙" - ], - [ - "f140", - "馌馎馚", - 10, - "馦馧馩", - 47 - ], - [ - "f180", - "駙", - 32, - "瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃" - ], - [ - "f240", - "駺", - 62 - ], - [ - "f280", - "騹", - 32, - "颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒" - ], - [ - "f340", - "驚", - 17, - "驲骃骉骍骎骔骕骙骦骩", - 6, - "骲骳骴骵骹骻骽骾骿髃髄髆", - 4, - "髍髎髏髐髒體髕髖髗髙髚髛髜" - ], - [ - "f380", - "髝髞髠髢髣髤髥髧髨髩髪髬髮髰", - 8, - "髺髼", - 6, - "鬄鬅鬆蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋" - ], - [ - "f440", - "鬇鬉", - 5, - "鬐鬑鬒鬔", - 10, - "鬠鬡鬢鬤", - 10, - "鬰鬱鬳", - 7, - "鬽鬾鬿魀魆魊魋魌魎魐魒魓魕", - 5 - ], - [ - "f480", - "魛", - 32, - "簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤" - ], - [ - "f540", - "魼", - 62 - ], - [ - "f580", - "鮻", - 32, - "酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜" - ], - [ - "f640", - "鯜", - 62 - ], - [ - "f680", - "鰛", - 32, - "觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅", - 5, - "龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞", - 5, - "鲥", - 4, - "鲫鲭鲮鲰", - 7, - "鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋" - ], - [ - "f740", - "鰼", - 62 - ], - [ - "f780", - "鱻鱽鱾鲀鲃鲄鲉鲊鲌鲏鲓鲖鲗鲘鲙鲝鲪鲬鲯鲹鲾", - 4, - "鳈鳉鳑鳒鳚鳛鳠鳡鳌", - 4, - "鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄" - ], - [ - "f840", - "鳣", - 62 - ], - [ - "f880", - "鴢", - 32 - ], - [ - "f940", - "鵃", - 62 - ], - [ - "f980", - "鶂", - 32 - ], - [ - "fa40", - "鶣", - 62 - ], - [ - "fa80", - "鷢", - 32 - ], - [ - "fb40", - "鸃", - 27, - "鸤鸧鸮鸰鸴鸻鸼鹀鹍鹐鹒鹓鹔鹖鹙鹝鹟鹠鹡鹢鹥鹮鹯鹲鹴", - 9, - "麀" - ], - [ - "fb80", - "麁麃麄麅麆麉麊麌", - 5, - "麔", - 8, - "麞麠", - 5, - "麧麨麩麪" - ], - [ - "fc40", - "麫", - 8, - "麵麶麷麹麺麼麿", - 4, - "黅黆黇黈黊黋黌黐黒黓黕黖黗黙黚點黡黣黤黦黨黫黬黭黮黰", - 8, - "黺黽黿", - 6 - ], - [ - "fc80", - "鼆", - 4, - "鼌鼏鼑鼒鼔鼕鼖鼘鼚", - 5, - "鼡鼣", - 8, - "鼭鼮鼰鼱" - ], - [ - "fd40", - "鼲", - 4, - "鼸鼺鼼鼿", - 4, - "齅", - 10, - "齒", - 38 - ], - [ - "fd80", - "齹", - 5, - "龁龂龍", - 11, - "龜龝龞龡", - 4, - "郎凉秊裏隣" - ], - [ - "fe40", - "兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩" - ] -]; - -var require$$3 = [ - [ - "a140", - "", - 62 - ], - [ - "a180", - "", - 32 - ], - [ - "a240", - "", - 62 - ], - [ - "a280", - "", - 32 - ], - [ - "a2ab", - "", - 5 - ], - [ - "a2e3", - "€" - ], - [ - "a2ef", - "" - ], - [ - "a2fd", - "" - ], - [ - "a340", - "", - 62 - ], - [ - "a380", - "", - 31, - " " - ], - [ - "a440", - "", - 62 - ], - [ - "a480", - "", - 32 - ], - [ - "a4f4", - "", - 10 - ], - [ - "a540", - "", - 62 - ], - [ - "a580", - "", - 32 - ], - [ - "a5f7", - "", - 7 - ], - [ - "a640", - "", - 62 - ], - [ - "a680", - "", - 32 - ], - [ - "a6b9", - "", - 7 - ], - [ - "a6d9", - "", - 6 - ], - [ - "a6ec", - "" - ], - [ - "a6f3", - "" - ], - [ - "a6f6", - "", - 8 - ], - [ - "a740", - "", - 62 - ], - [ - "a780", - "", - 32 - ], - [ - "a7c2", - "", - 14 - ], - [ - "a7f2", - "", - 12 - ], - [ - "a896", - "", - 10 - ], - [ - "a8bc", - "" - ], - [ - "a8bf", - "ǹ" - ], - [ - "a8c1", - "" - ], - [ - "a8ea", - "", - 20 - ], - [ - "a958", - "" - ], - [ - "a95b", - "" - ], - [ - "a95d", - "" - ], - [ - "a989", - "〾⿰", - 11 - ], - [ - "a997", - "", - 12 - ], - [ - "a9f0", - "", - 14 - ], - [ - "aaa1", - "", - 93 - ], - [ - "aba1", - "", - 93 - ], - [ - "aca1", - "", - 93 - ], - [ - "ada1", - "", - 93 - ], - [ - "aea1", - "", - 93 - ], - [ - "afa1", - "", - 93 - ], - [ - "d7fa", - "", - 4 - ], - [ - "f8a1", - "", - 93 - ], - [ - "f9a1", - "", - 93 - ], - [ - "faa1", - "", - 93 - ], - [ - "fba1", - "", - 93 - ], - [ - "fca1", - "", - 93 - ], - [ - "fda1", - "", - 93 - ], - [ - "fe50", - "⺁⺄㑳㑇⺈⺋㖞㘚㘎⺌⺗㥮㤘㧏㧟㩳㧐㭎㱮㳠⺧⺪䁖䅟⺮䌷⺳⺶⺷䎱䎬⺻䏝䓖䙡䙌" - ], - [ - "fe80", - "䜣䜩䝼䞍⻊䥇䥺䥽䦂䦃䦅䦆䦟䦛䦷䦶䲣䲟䲠䲡䱷䲢䴓", - 6, - "䶮", - 93 - ] -]; - -var uChars = [ - 128, - 165, - 169, - 178, - 184, - 216, - 226, - 235, - 238, - 244, - 248, - 251, - 253, - 258, - 276, - 284, - 300, - 325, - 329, - 334, - 364, - 463, - 465, - 467, - 469, - 471, - 473, - 475, - 477, - 506, - 594, - 610, - 712, - 716, - 730, - 930, - 938, - 962, - 970, - 1026, - 1104, - 1106, - 8209, - 8215, - 8218, - 8222, - 8231, - 8241, - 8244, - 8246, - 8252, - 8365, - 8452, - 8454, - 8458, - 8471, - 8482, - 8556, - 8570, - 8596, - 8602, - 8713, - 8720, - 8722, - 8726, - 8731, - 8737, - 8740, - 8742, - 8748, - 8751, - 8760, - 8766, - 8777, - 8781, - 8787, - 8802, - 8808, - 8816, - 8854, - 8858, - 8870, - 8896, - 8979, - 9322, - 9372, - 9548, - 9588, - 9616, - 9622, - 9634, - 9652, - 9662, - 9672, - 9676, - 9680, - 9702, - 9735, - 9738, - 9793, - 9795, - 11906, - 11909, - 11913, - 11917, - 11928, - 11944, - 11947, - 11951, - 11956, - 11960, - 11964, - 11979, - 12284, - 12292, - 12312, - 12319, - 12330, - 12351, - 12436, - 12447, - 12535, - 12543, - 12586, - 12842, - 12850, - 12964, - 13200, - 13215, - 13218, - 13253, - 13263, - 13267, - 13270, - 13384, - 13428, - 13727, - 13839, - 13851, - 14617, - 14703, - 14801, - 14816, - 14964, - 15183, - 15471, - 15585, - 16471, - 16736, - 17208, - 17325, - 17330, - 17374, - 17623, - 17997, - 18018, - 18212, - 18218, - 18301, - 18318, - 18760, - 18811, - 18814, - 18820, - 18823, - 18844, - 18848, - 18872, - 19576, - 19620, - 19738, - 19887, - 40870, - 59244, - 59336, - 59367, - 59413, - 59417, - 59423, - 59431, - 59437, - 59443, - 59452, - 59460, - 59478, - 59493, - 63789, - 63866, - 63894, - 63976, - 63986, - 64016, - 64018, - 64021, - 64025, - 64034, - 64037, - 64042, - 65074, - 65093, - 65107, - 65112, - 65127, - 65132, - 65375, - 65510, - 65536 -]; -var gbChars = [ - 0, - 36, - 38, - 45, - 50, - 81, - 89, - 95, - 96, - 100, - 103, - 104, - 105, - 109, - 126, - 133, - 148, - 172, - 175, - 179, - 208, - 306, - 307, - 308, - 309, - 310, - 311, - 312, - 313, - 341, - 428, - 443, - 544, - 545, - 558, - 741, - 742, - 749, - 750, - 805, - 819, - 820, - 7922, - 7924, - 7925, - 7927, - 7934, - 7943, - 7944, - 7945, - 7950, - 8062, - 8148, - 8149, - 8152, - 8164, - 8174, - 8236, - 8240, - 8262, - 8264, - 8374, - 8380, - 8381, - 8384, - 8388, - 8390, - 8392, - 8393, - 8394, - 8396, - 8401, - 8406, - 8416, - 8419, - 8424, - 8437, - 8439, - 8445, - 8482, - 8485, - 8496, - 8521, - 8603, - 8936, - 8946, - 9046, - 9050, - 9063, - 9066, - 9076, - 9092, - 9100, - 9108, - 9111, - 9113, - 9131, - 9162, - 9164, - 9218, - 9219, - 11329, - 11331, - 11334, - 11336, - 11346, - 11361, - 11363, - 11366, - 11370, - 11372, - 11375, - 11389, - 11682, - 11686, - 11687, - 11692, - 11694, - 11714, - 11716, - 11723, - 11725, - 11730, - 11736, - 11982, - 11989, - 12102, - 12336, - 12348, - 12350, - 12384, - 12393, - 12395, - 12397, - 12510, - 12553, - 12851, - 12962, - 12973, - 13738, - 13823, - 13919, - 13933, - 14080, - 14298, - 14585, - 14698, - 15583, - 15847, - 16318, - 16434, - 16438, - 16481, - 16729, - 17102, - 17122, - 17315, - 17320, - 17402, - 17418, - 17859, - 17909, - 17911, - 17915, - 17916, - 17936, - 17939, - 17961, - 18664, - 18703, - 18814, - 18962, - 19043, - 33469, - 33470, - 33471, - 33484, - 33485, - 33490, - 33497, - 33501, - 33505, - 33513, - 33520, - 33536, - 33550, - 37845, - 37921, - 37948, - 38029, - 38038, - 38064, - 38065, - 38066, - 38069, - 38075, - 38076, - 38078, - 39108, - 39109, - 39113, - 39114, - 39115, - 39116, - 39265, - 39394, - 189000 -]; -var require$$4 = { - uChars: uChars, - gbChars: gbChars -}; - -var require$$5 = [ - [ - "0", - "\u0000", - 127 - ], - [ - "8141", - "갂갃갅갆갋", - 4, - "갘갞갟갡갢갣갥", - 6, - "갮갲갳갴" - ], - [ - "8161", - "갵갶갷갺갻갽갾갿걁", - 9, - "걌걎", - 5, - "걕" - ], - [ - "8181", - "걖걗걙걚걛걝", - 18, - "걲걳걵걶걹걻", - 4, - "겂겇겈겍겎겏겑겒겓겕", - 6, - "겞겢", - 5, - "겫겭겮겱", - 6, - "겺겾겿곀곂곃곅곆곇곉곊곋곍", - 7, - "곖곘", - 7, - "곢곣곥곦곩곫곭곮곲곴곷", - 4, - "곾곿괁괂괃괅괇", - 4, - "괎괐괒괓" - ], - [ - "8241", - "괔괕괖괗괙괚괛괝괞괟괡", - 7, - "괪괫괮", - 5 - ], - [ - "8261", - "괶괷괹괺괻괽", - 6, - "굆굈굊", - 5, - "굑굒굓굕굖굗" - ], - [ - "8281", - "굙", - 7, - "굢굤", - 7, - "굮굯굱굲굷굸굹굺굾궀궃", - 4, - "궊궋궍궎궏궑", - 10, - "궞", - 5, - "궥", - 17, - "궸", - 7, - "귂귃귅귆귇귉", - 6, - "귒귔", - 7, - "귝귞귟귡귢귣귥", - 18 - ], - [ - "8341", - "귺귻귽귾긂", - 5, - "긊긌긎", - 5, - "긕", - 7 - ], - [ - "8361", - "긝", - 18, - "긲긳긵긶긹긻긼" - ], - [ - "8381", - "긽긾긿깂깄깇깈깉깋깏깑깒깓깕깗", - 4, - "깞깢깣깤깦깧깪깫깭깮깯깱", - 6, - "깺깾", - 5, - "꺆", - 5, - "꺍", - 46, - "꺿껁껂껃껅", - 6, - "껎껒", - 5, - "껚껛껝", - 8 - ], - [ - "8441", - "껦껧껩껪껬껮", - 5, - "껵껶껷껹껺껻껽", - 8 - ], - [ - "8461", - "꼆꼉꼊꼋꼌꼎꼏꼑", - 18 - ], - [ - "8481", - "꼤", - 7, - "꼮꼯꼱꼳꼵", - 6, - "꼾꽀꽄꽅꽆꽇꽊", - 5, - "꽑", - 10, - "꽞", - 5, - "꽦", - 18, - "꽺", - 5, - "꾁꾂꾃꾅꾆꾇꾉", - 6, - "꾒꾓꾔꾖", - 5, - "꾝", - 26, - "꾺꾻꾽꾾" - ], - [ - "8541", - "꾿꿁", - 5, - "꿊꿌꿏", - 4, - "꿕", - 6, - "꿝", - 4 - ], - [ - "8561", - "꿢", - 5, - "꿪", - 5, - "꿲꿳꿵꿶꿷꿹", - 6, - "뀂뀃" - ], - [ - "8581", - "뀅", - 6, - "뀍뀎뀏뀑뀒뀓뀕", - 6, - "뀞", - 9, - "뀩", - 26, - "끆끇끉끋끍끏끐끑끒끖끘끚끛끜끞", - 29, - "끾끿낁낂낃낅", - 6, - "낎낐낒", - 5, - "낛낝낞낣낤" - ], - [ - "8641", - "낥낦낧낪낰낲낶낷낹낺낻낽", - 6, - "냆냊", - 5, - "냒" - ], - [ - "8661", - "냓냕냖냗냙", - 6, - "냡냢냣냤냦", - 10 - ], - [ - "8681", - "냱", - 22, - "넊넍넎넏넑넔넕넖넗넚넞", - 4, - "넦넧넩넪넫넭", - 6, - "넶넺", - 5, - "녂녃녅녆녇녉", - 6, - "녒녓녖녗녙녚녛녝녞녟녡", - 22, - "녺녻녽녾녿놁놃", - 4, - "놊놌놎놏놐놑놕놖놗놙놚놛놝" - ], - [ - "8741", - "놞", - 9, - "놩", - 15 - ], - [ - "8761", - "놹", - 18, - "뇍뇎뇏뇑뇒뇓뇕" - ], - [ - "8781", - "뇖", - 5, - "뇞뇠", - 7, - "뇪뇫뇭뇮뇯뇱", - 7, - "뇺뇼뇾", - 5, - "눆눇눉눊눍", - 6, - "눖눘눚", - 5, - "눡", - 18, - "눵", - 6, - "눽", - 26, - "뉙뉚뉛뉝뉞뉟뉡", - 6, - "뉪", - 4 - ], - [ - "8841", - "뉯", - 4, - "뉶", - 5, - "뉽", - 6, - "늆늇늈늊", - 4 - ], - [ - "8861", - "늏늒늓늕늖늗늛", - 4, - "늢늤늧늨늩늫늭늮늯늱늲늳늵늶늷" - ], - [ - "8881", - "늸", - 15, - "닊닋닍닎닏닑닓", - 4, - "닚닜닞닟닠닡닣닧닩닪닰닱닲닶닼닽닾댂댃댅댆댇댉", - 6, - "댒댖", - 5, - "댝", - 54, - "덗덙덚덝덠덡덢덣" - ], - [ - "8941", - "덦덨덪덬덭덯덲덳덵덶덷덹", - 6, - "뎂뎆", - 5, - "뎍" - ], - [ - "8961", - "뎎뎏뎑뎒뎓뎕", - 10, - "뎢", - 5, - "뎩뎪뎫뎭" - ], - [ - "8981", - "뎮", - 21, - "돆돇돉돊돍돏돑돒돓돖돘돚돜돞돟돡돢돣돥돦돧돩", - 18, - "돽", - 18, - "됑", - 6, - "됙됚됛됝됞됟됡", - 6, - "됪됬", - 7, - "됵", - 15 - ], - [ - "8a41", - "둅", - 10, - "둒둓둕둖둗둙", - 6, - "둢둤둦" - ], - [ - "8a61", - "둧", - 4, - "둭", - 18, - "뒁뒂" - ], - [ - "8a81", - "뒃", - 4, - "뒉", - 19, - "뒞", - 5, - "뒥뒦뒧뒩뒪뒫뒭", - 7, - "뒶뒸뒺", - 5, - "듁듂듃듅듆듇듉", - 6, - "듑듒듓듔듖", - 5, - "듞듟듡듢듥듧", - 4, - "듮듰듲", - 5, - "듹", - 26, - "딖딗딙딚딝" - ], - [ - "8b41", - "딞", - 5, - "딦딫", - 4, - "딲딳딵딶딷딹", - 6, - "땂땆" - ], - [ - "8b61", - "땇땈땉땊땎땏땑땒땓땕", - 6, - "땞땢", - 8 - ], - [ - "8b81", - "땫", - 52, - "떢떣떥떦떧떩떬떭떮떯떲떶", - 4, - "떾떿뗁뗂뗃뗅", - 6, - "뗎뗒", - 5, - "뗙", - 18, - "뗭", - 18 - ], - [ - "8c41", - "똀", - 15, - "똒똓똕똖똗똙", - 4 - ], - [ - "8c61", - "똞", - 6, - "똦", - 5, - "똭", - 6, - "똵", - 5 - ], - [ - "8c81", - "똻", - 12, - "뙉", - 26, - "뙥뙦뙧뙩", - 50, - "뚞뚟뚡뚢뚣뚥", - 5, - "뚭뚮뚯뚰뚲", - 16 - ], - [ - "8d41", - "뛃", - 16, - "뛕", - 8 - ], - [ - "8d61", - "뛞", - 17, - "뛱뛲뛳뛵뛶뛷뛹뛺" - ], - [ - "8d81", - "뛻", - 4, - "뜂뜃뜄뜆", - 33, - "뜪뜫뜭뜮뜱", - 6, - "뜺뜼", - 7, - "띅띆띇띉띊띋띍", - 6, - "띖", - 9, - "띡띢띣띥띦띧띩", - 6, - "띲띴띶", - 5, - "띾띿랁랂랃랅", - 6, - "랎랓랔랕랚랛랝랞" - ], - [ - "8e41", - "랟랡", - 6, - "랪랮", - 5, - "랶랷랹", - 8 - ], - [ - "8e61", - "럂", - 4, - "럈럊", - 19 - ], - [ - "8e81", - "럞", - 13, - "럮럯럱럲럳럵", - 6, - "럾렂", - 4, - "렊렋렍렎렏렑", - 6, - "렚렜렞", - 5, - "렦렧렩렪렫렭", - 6, - "렶렺", - 5, - "롁롂롃롅", - 11, - "롒롔", - 7, - "롞롟롡롢롣롥", - 6, - "롮롰롲", - 5, - "롹롺롻롽", - 7 - ], - [ - "8f41", - "뢅", - 7, - "뢎", - 17 - ], - [ - "8f61", - "뢠", - 7, - "뢩", - 6, - "뢱뢲뢳뢵뢶뢷뢹", - 4 - ], - [ - "8f81", - "뢾뢿룂룄룆", - 5, - "룍룎룏룑룒룓룕", - 7, - "룞룠룢", - 5, - "룪룫룭룮룯룱", - 6, - "룺룼룾", - 5, - "뤅", - 18, - "뤙", - 6, - "뤡", - 26, - "뤾뤿륁륂륃륅", - 6, - "륍륎륐륒", - 5 - ], - [ - "9041", - "륚륛륝륞륟륡", - 6, - "륪륬륮", - 5, - "륶륷륹륺륻륽" - ], - [ - "9061", - "륾", - 5, - "릆릈릋릌릏", - 15 - ], - [ - "9081", - "릟", - 12, - "릮릯릱릲릳릵", - 6, - "릾맀맂", - 5, - "맊맋맍맓", - 4, - "맚맜맟맠맢맦맧맩맪맫맭", - 6, - "맶맻", - 4, - "먂", - 5, - "먉", - 11, - "먖", - 33, - "먺먻먽먾먿멁멃멄멅멆" - ], - [ - "9141", - "멇멊멌멏멐멑멒멖멗멙멚멛멝", - 6, - "멦멪", - 5 - ], - [ - "9161", - "멲멳멵멶멷멹", - 9, - "몆몈몉몊몋몍", - 5 - ], - [ - "9181", - "몓", - 20, - "몪몭몮몯몱몳", - 4, - "몺몼몾", - 5, - "뫅뫆뫇뫉", - 14, - "뫚", - 33, - "뫽뫾뫿묁묂묃묅", - 7, - "묎묐묒", - 5, - "묙묚묛묝묞묟묡", - 6 - ], - [ - "9241", - "묨묪묬", - 7, - "묷묹묺묿", - 4, - "뭆뭈뭊뭋뭌뭎뭑뭒" - ], - [ - "9261", - "뭓뭕뭖뭗뭙", - 7, - "뭢뭤", - 7, - "뭭", - 4 - ], - [ - "9281", - "뭲", - 21, - "뮉뮊뮋뮍뮎뮏뮑", - 18, - "뮥뮦뮧뮩뮪뮫뮭", - 6, - "뮵뮶뮸", - 7, - "믁믂믃믅믆믇믉", - 6, - "믑믒믔", - 35, - "믺믻믽믾밁" - ], - [ - "9341", - "밃", - 4, - "밊밎밐밒밓밙밚밠밡밢밣밦밨밪밫밬밮밯밲밳밵" - ], - [ - "9361", - "밶밷밹", - 6, - "뱂뱆뱇뱈뱊뱋뱎뱏뱑", - 8 - ], - [ - "9381", - "뱚뱛뱜뱞", - 37, - "벆벇벉벊벍벏", - 4, - "벖벘벛", - 4, - "벢벣벥벦벩", - 6, - "벲벶", - 5, - "벾벿볁볂볃볅", - 7, - "볎볒볓볔볖볗볙볚볛볝", - 22, - "볷볹볺볻볽" - ], - [ - "9441", - "볾", - 5, - "봆봈봊", - 5, - "봑봒봓봕", - 8 - ], - [ - "9461", - "봞", - 5, - "봥", - 6, - "봭", - 12 - ], - [ - "9481", - "봺", - 5, - "뵁", - 6, - "뵊뵋뵍뵎뵏뵑", - 6, - "뵚", - 9, - "뵥뵦뵧뵩", - 22, - "붂붃붅붆붋", - 4, - "붒붔붖붗붘붛붝", - 6, - "붥", - 10, - "붱", - 6, - "붹", - 24 - ], - [ - "9541", - "뷒뷓뷖뷗뷙뷚뷛뷝", - 11, - "뷪", - 5, - "뷱" - ], - [ - "9561", - "뷲뷳뷵뷶뷷뷹", - 6, - "븁븂븄븆", - 5, - "븎븏븑븒븓" - ], - [ - "9581", - "븕", - 6, - "븞븠", - 35, - "빆빇빉빊빋빍빏", - 4, - "빖빘빜빝빞빟빢빣빥빦빧빩빫", - 4, - "빲빶", - 4, - "빾빿뺁뺂뺃뺅", - 6, - "뺎뺒", - 5, - "뺚", - 13, - "뺩", - 14 - ], - [ - "9641", - "뺸", - 23, - "뻒뻓" - ], - [ - "9661", - "뻕뻖뻙", - 6, - "뻡뻢뻦", - 5, - "뻭", - 8 - ], - [ - "9681", - "뻶", - 10, - "뼂", - 5, - "뼊", - 13, - "뼚뼞", - 33, - "뽂뽃뽅뽆뽇뽉", - 6, - "뽒뽓뽔뽖", - 44 - ], - [ - "9741", - "뾃", - 16, - "뾕", - 8 - ], - [ - "9761", - "뾞", - 17, - "뾱", - 7 - ], - [ - "9781", - "뾹", - 11, - "뿆", - 5, - "뿎뿏뿑뿒뿓뿕", - 6, - "뿝뿞뿠뿢", - 89, - "쀽쀾쀿" - ], - [ - "9841", - "쁀", - 16, - "쁒", - 5, - "쁙쁚쁛" - ], - [ - "9861", - "쁝쁞쁟쁡", - 6, - "쁪", - 15 - ], - [ - "9881", - "쁺", - 21, - "삒삓삕삖삗삙", - 6, - "삢삤삦", - 5, - "삮삱삲삷", - 4, - "삾샂샃샄샆샇샊샋샍샎샏샑", - 6, - "샚샞", - 5, - "샦샧샩샪샫샭", - 6, - "샶샸샺", - 5, - "섁섂섃섅섆섇섉", - 6, - "섑섒섓섔섖", - 5, - "섡섢섥섨섩섪섫섮" - ], - [ - "9941", - "섲섳섴섵섷섺섻섽섾섿셁", - 6, - "셊셎", - 5, - "셖셗" - ], - [ - "9961", - "셙셚셛셝", - 6, - "셦셪", - 5, - "셱셲셳셵셶셷셹셺셻" - ], - [ - "9981", - "셼", - 8, - "솆", - 5, - "솏솑솒솓솕솗", - 4, - "솞솠솢솣솤솦솧솪솫솭솮솯솱", - 11, - "솾", - 5, - "쇅쇆쇇쇉쇊쇋쇍", - 6, - "쇕쇖쇙", - 6, - "쇡쇢쇣쇥쇦쇧쇩", - 6, - "쇲쇴", - 7, - "쇾쇿숁숂숃숅", - 6, - "숎숐숒", - 5, - "숚숛숝숞숡숢숣" - ], - [ - "9a41", - "숤숥숦숧숪숬숮숰숳숵", - 16 - ], - [ - "9a61", - "쉆쉇쉉", - 6, - "쉒쉓쉕쉖쉗쉙", - 6, - "쉡쉢쉣쉤쉦" - ], - [ - "9a81", - "쉧", - 4, - "쉮쉯쉱쉲쉳쉵", - 6, - "쉾슀슂", - 5, - "슊", - 5, - "슑", - 6, - "슙슚슜슞", - 5, - "슦슧슩슪슫슮", - 5, - "슶슸슺", - 33, - "싞싟싡싢싥", - 5, - "싮싰싲싳싴싵싷싺싽싾싿쌁", - 6, - "쌊쌋쌎쌏" - ], - [ - "9b41", - "쌐쌑쌒쌖쌗쌙쌚쌛쌝", - 6, - "쌦쌧쌪", - 8 - ], - [ - "9b61", - "쌳", - 17, - "썆", - 7 - ], - [ - "9b81", - "썎", - 25, - "썪썫썭썮썯썱썳", - 4, - "썺썻썾", - 5, - "쎅쎆쎇쎉쎊쎋쎍", - 50, - "쏁", - 22, - "쏚" - ], - [ - "9c41", - "쏛쏝쏞쏡쏣", - 4, - "쏪쏫쏬쏮", - 5, - "쏶쏷쏹", - 5 - ], - [ - "9c61", - "쏿", - 8, - "쐉", - 6, - "쐑", - 9 - ], - [ - "9c81", - "쐛", - 8, - "쐥", - 6, - "쐭쐮쐯쐱쐲쐳쐵", - 6, - "쐾", - 9, - "쑉", - 26, - "쑦쑧쑩쑪쑫쑭", - 6, - "쑶쑷쑸쑺", - 5, - "쒁", - 18, - "쒕", - 6, - "쒝", - 12 - ], - [ - "9d41", - "쒪", - 13, - "쒹쒺쒻쒽", - 8 - ], - [ - "9d61", - "쓆", - 25 - ], - [ - "9d81", - "쓠", - 8, - "쓪", - 5, - "쓲쓳쓵쓶쓷쓹쓻쓼쓽쓾씂", - 9, - "씍씎씏씑씒씓씕", - 6, - "씝", - 10, - "씪씫씭씮씯씱", - 6, - "씺씼씾", - 5, - "앆앇앋앏앐앑앒앖앚앛앜앟앢앣앥앦앧앩", - 6, - "앲앶", - 5, - "앾앿얁얂얃얅얆얈얉얊얋얎얐얒얓얔" - ], - [ - "9e41", - "얖얙얚얛얝얞얟얡", - 7, - "얪", - 9, - "얶" - ], - [ - "9e61", - "얷얺얿", - 4, - "엋엍엏엒엓엕엖엗엙", - 6, - "엢엤엦엧" - ], - [ - "9e81", - "엨엩엪엫엯엱엲엳엵엸엹엺엻옂옃옄옉옊옋옍옎옏옑", - 6, - "옚옝", - 6, - "옦옧옩옪옫옯옱옲옶옸옺옼옽옾옿왂왃왅왆왇왉", - 6, - "왒왖", - 5, - "왞왟왡", - 10, - "왭왮왰왲", - 5, - "왺왻왽왾왿욁", - 6, - "욊욌욎", - 5, - "욖욗욙욚욛욝", - 6, - "욦" - ], - [ - "9f41", - "욨욪", - 5, - "욲욳욵욶욷욻", - 4, - "웂웄웆", - 5, - "웎" - ], - [ - "9f61", - "웏웑웒웓웕", - 6, - "웞웟웢", - 5, - "웪웫웭웮웯웱웲" - ], - [ - "9f81", - "웳", - 4, - "웺웻웼웾", - 5, - "윆윇윉윊윋윍", - 6, - "윖윘윚", - 5, - "윢윣윥윦윧윩", - 6, - "윲윴윶윸윹윺윻윾윿읁읂읃읅", - 4, - "읋읎읐읙읚읛읝읞읟읡", - 6, - "읩읪읬", - 7, - "읶읷읹읺읻읿잀잁잂잆잋잌잍잏잒잓잕잙잛", - 4, - "잢잧", - 4, - "잮잯잱잲잳잵잶잷" - ], - [ - "a041", - "잸잹잺잻잾쟂", - 5, - "쟊쟋쟍쟏쟑", - 6, - "쟙쟚쟛쟜" - ], - [ - "a061", - "쟞", - 5, - "쟥쟦쟧쟩쟪쟫쟭", - 13 - ], - [ - "a081", - "쟻", - 4, - "젂젃젅젆젇젉젋", - 4, - "젒젔젗", - 4, - "젞젟젡젢젣젥", - 6, - "젮젰젲", - 5, - "젹젺젻젽젾젿졁", - 6, - "졊졋졎", - 5, - "졕", - 26, - "졲졳졵졶졷졹졻", - 4, - "좂좄좈좉좊좎", - 5, - "좕", - 7, - "좞좠좢좣좤" - ], - [ - "a141", - "좥좦좧좩", - 18, - "좾좿죀죁" - ], - [ - "a161", - "죂죃죅죆죇죉죊죋죍", - 6, - "죖죘죚", - 5, - "죢죣죥" - ], - [ - "a181", - "죦", - 14, - "죶", - 5, - "죾죿줁줂줃줇", - 4, - "줎 、。·‥…¨〃­―∥\∼‘’“”〔〕〈", - 9, - "±×÷≠≤≥∞∴°′″℃Å¢£¥♂♀∠⊥⌒∂∇≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨¬" - ], - [ - "a241", - "줐줒", - 5, - "줙", - 18 - ], - [ - "a261", - "줭", - 6, - "줵", - 18 - ], - [ - "a281", - "쥈", - 7, - "쥒쥓쥕쥖쥗쥙", - 6, - "쥢쥤", - 7, - "쥭쥮쥯⇒⇔∀∃´~ˇ˘˝˚˙¸˛¡¿ː∮∑∏¤℉‰◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕↗↙↖↘♭♩♪♬㉿㈜№㏇™㏂㏘℡€®" - ], - [ - "a341", - "쥱쥲쥳쥵", - 6, - "쥽", - 10, - "즊즋즍즎즏" - ], - [ - "a361", - "즑", - 6, - "즚즜즞", - 16 - ], - [ - "a381", - "즯", - 16, - "짂짃짅짆짉짋", - 4, - "짒짔짗짘짛!", - 58, - "₩]", - 32, - " ̄" - ], - [ - "a441", - "짞짟짡짣짥짦짨짩짪짫짮짲", - 5, - "짺짻짽짾짿쨁쨂쨃쨄" - ], - [ - "a461", - "쨅쨆쨇쨊쨎", - 5, - "쨕쨖쨗쨙", - 12 - ], - [ - "a481", - "쨦쨧쨨쨪", - 28, - "ㄱ", - 93 - ], - [ - "a541", - "쩇", - 4, - "쩎쩏쩑쩒쩓쩕", - 6, - "쩞쩢", - 5, - "쩩쩪" - ], - [ - "a561", - "쩫", - 17, - "쩾", - 5, - "쪅쪆" - ], - [ - "a581", - "쪇", - 16, - "쪙", - 14, - "ⅰ", - 9 - ], - [ - "a5b0", - "Ⅰ", - 9 - ], - [ - "a5c1", - "Α", - 16, - "Σ", - 6 - ], - [ - "a5e1", - "α", - 16, - "σ", - 6 - ], - [ - "a641", - "쪨", - 19, - "쪾쪿쫁쫂쫃쫅" - ], - [ - "a661", - "쫆", - 5, - "쫎쫐쫒쫔쫕쫖쫗쫚", - 5, - "쫡", - 6 - ], - [ - "a681", - "쫨쫩쫪쫫쫭", - 6, - "쫵", - 18, - "쬉쬊─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃", - 7 - ], - [ - "a741", - "쬋", - 4, - "쬑쬒쬓쬕쬖쬗쬙", - 6, - "쬢", - 7 - ], - [ - "a761", - "쬪", - 22, - "쭂쭃쭄" - ], - [ - "a781", - "쭅쭆쭇쭊쭋쭍쭎쭏쭑", - 6, - "쭚쭛쭜쭞", - 5, - "쭥", - 7, - "㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙", - 9, - "㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰", - 9, - "㎀", - 4, - "㎺", - 5, - "㎐", - 4, - "Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆" - ], - [ - "a841", - "쭭", - 10, - "쭺", - 14 - ], - [ - "a861", - "쮉", - 18, - "쮝", - 6 - ], - [ - "a881", - "쮤", - 19, - "쮹", - 11, - "ÆÐªĦ" - ], - [ - "a8a6", - "IJ" - ], - [ - "a8a8", - "ĿŁØŒºÞŦŊ" - ], - [ - "a8b1", - "㉠", - 27, - "ⓐ", - 25, - "①", - 14, - "½⅓⅔¼¾⅛⅜⅝⅞" - ], - [ - "a941", - "쯅", - 14, - "쯕", - 10 - ], - [ - "a961", - "쯠쯡쯢쯣쯥쯦쯨쯪", - 18 - ], - [ - "a981", - "쯽", - 14, - "찎찏찑찒찓찕", - 6, - "찞찟찠찣찤æđðħıijĸŀłøœßþŧŋʼn㈀", - 27, - "⒜", - 25, - "⑴", - 14, - "¹²³⁴ⁿ₁₂₃₄" - ], - [ - "aa41", - "찥찦찪찫찭찯찱", - 6, - "찺찿", - 4, - "챆챇챉챊챋챍챎" - ], - [ - "aa61", - "챏", - 4, - "챖챚", - 5, - "챡챢챣챥챧챩", - 6, - "챱챲" - ], - [ - "aa81", - "챳챴챶", - 29, - "ぁ", - 82 - ], - [ - "ab41", - "첔첕첖첗첚첛첝첞첟첡", - 6, - "첪첮", - 5, - "첶첷첹" - ], - [ - "ab61", - "첺첻첽", - 6, - "쳆쳈쳊", - 5, - "쳑쳒쳓쳕", - 5 - ], - [ - "ab81", - "쳛", - 8, - "쳥", - 6, - "쳭쳮쳯쳱", - 12, - "ァ", - 85 - ], - [ - "ac41", - "쳾쳿촀촂", - 5, - "촊촋촍촎촏촑", - 6, - "촚촜촞촟촠" - ], - [ - "ac61", - "촡촢촣촥촦촧촩촪촫촭", - 11, - "촺", - 4 - ], - [ - "ac81", - "촿", - 28, - "쵝쵞쵟А", - 5, - "ЁЖ", - 25 - ], - [ - "acd1", - "а", - 5, - "ёж", - 25 - ], - [ - "ad41", - "쵡쵢쵣쵥", - 6, - "쵮쵰쵲", - 5, - "쵹", - 7 - ], - [ - "ad61", - "춁", - 6, - "춉", - 10, - "춖춗춙춚춛춝춞춟" - ], - [ - "ad81", - "춠춡춢춣춦춨춪", - 5, - "춱", - 18, - "췅" - ], - [ - "ae41", - "췆", - 5, - "췍췎췏췑", - 16 - ], - [ - "ae61", - "췢", - 5, - "췩췪췫췭췮췯췱", - 6, - "췺췼췾", - 4 - ], - [ - "ae81", - "츃츅츆츇츉츊츋츍", - 6, - "츕츖츗츘츚", - 5, - "츢츣츥츦츧츩츪츫" - ], - [ - "af41", - "츬츭츮츯츲츴츶", - 19 - ], - [ - "af61", - "칊", - 13, - "칚칛칝칞칢", - 5, - "칪칬" - ], - [ - "af81", - "칮", - 5, - "칶칷칹칺칻칽", - 6, - "캆캈캊", - 5, - "캒캓캕캖캗캙" - ], - [ - "b041", - "캚", - 5, - "캢캦", - 5, - "캮", - 12 - ], - [ - "b061", - "캻", - 5, - "컂", - 19 - ], - [ - "b081", - "컖", - 13, - "컦컧컩컪컭", - 6, - "컶컺", - 5, - "가각간갇갈갉갊감", - 7, - "같", - 4, - "갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆" - ], - [ - "b141", - "켂켃켅켆켇켉", - 6, - "켒켔켖", - 5, - "켝켞켟켡켢켣" - ], - [ - "b161", - "켥", - 6, - "켮켲", - 5, - "켹", - 11 - ], - [ - "b181", - "콅", - 14, - "콖콗콙콚콛콝", - 6, - "콦콨콪콫콬괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸" - ], - [ - "b241", - "콭콮콯콲콳콵콶콷콹", - 6, - "쾁쾂쾃쾄쾆", - 5, - "쾍" - ], - [ - "b261", - "쾎", - 18, - "쾢", - 5, - "쾩" - ], - [ - "b281", - "쾪", - 5, - "쾱", - 18, - "쿅", - 6, - "깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙" - ], - [ - "b341", - "쿌", - 19, - "쿢쿣쿥쿦쿧쿩" - ], - [ - "b361", - "쿪", - 5, - "쿲쿴쿶", - 5, - "쿽쿾쿿퀁퀂퀃퀅", - 5 - ], - [ - "b381", - "퀋", - 5, - "퀒", - 5, - "퀙", - 19, - "끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫", - 4, - "낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝" - ], - [ - "b441", - "퀮", - 5, - "퀶퀷퀹퀺퀻퀽", - 6, - "큆큈큊", - 5 - ], - [ - "b461", - "큑큒큓큕큖큗큙", - 6, - "큡", - 10, - "큮큯" - ], - [ - "b481", - "큱큲큳큵", - 6, - "큾큿킀킂", - 18, - "뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫", - 4, - "닳담답닷", - 4, - "닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥" - ], - [ - "b541", - "킕", - 14, - "킦킧킩킪킫킭", - 5 - ], - [ - "b561", - "킳킶킸킺", - 5, - "탂탃탅탆탇탊", - 5, - "탒탖", - 4 - ], - [ - "b581", - "탛탞탟탡탢탣탥", - 6, - "탮탲", - 5, - "탹", - 11, - "덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸" - ], - [ - "b641", - "턅", - 7, - "턎", - 17 - ], - [ - "b661", - "턠", - 15, - "턲턳턵턶턷턹턻턼턽턾" - ], - [ - "b681", - "턿텂텆", - 5, - "텎텏텑텒텓텕", - 6, - "텞텠텢", - 5, - "텩텪텫텭땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗" - ], - [ - "b741", - "텮", - 13, - "텽", - 6, - "톅톆톇톉톊" - ], - [ - "b761", - "톋", - 20, - "톢톣톥톦톧" - ], - [ - "b781", - "톩", - 6, - "톲톴톶톷톸톹톻톽톾톿퇁", - 14, - "래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩" - ], - [ - "b841", - "퇐", - 7, - "퇙", - 17 - ], - [ - "b861", - "퇫", - 8, - "퇵퇶퇷퇹", - 13 - ], - [ - "b881", - "툈툊", - 5, - "툑", - 24, - "륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많", - 4, - "맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼" - ], - [ - "b941", - "툪툫툮툯툱툲툳툵", - 6, - "툾퉀퉂", - 5, - "퉉퉊퉋퉌" - ], - [ - "b961", - "퉍", - 14, - "퉝", - 6, - "퉥퉦퉧퉨" - ], - [ - "b981", - "퉩", - 22, - "튂튃튅튆튇튉튊튋튌묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바", - 4, - "받", - 4, - "밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗" - ], - [ - "ba41", - "튍튎튏튒튓튔튖", - 5, - "튝튞튟튡튢튣튥", - 6, - "튭" - ], - [ - "ba61", - "튮튯튰튲", - 5, - "튺튻튽튾틁틃", - 4, - "틊틌", - 5 - ], - [ - "ba81", - "틒틓틕틖틗틙틚틛틝", - 6, - "틦", - 9, - "틲틳틵틶틷틹틺벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤" - ], - [ - "bb41", - "틻", - 4, - "팂팄팆", - 5, - "팏팑팒팓팕팗", - 4, - "팞팢팣" - ], - [ - "bb61", - "팤팦팧팪팫팭팮팯팱", - 6, - "팺팾", - 5, - "퍆퍇퍈퍉" - ], - [ - "bb81", - "퍊", - 31, - "빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤" - ], - [ - "bc41", - "퍪", - 17, - "퍾퍿펁펂펃펅펆펇" - ], - [ - "bc61", - "펈펉펊펋펎펒", - 5, - "펚펛펝펞펟펡", - 6, - "펪펬펮" - ], - [ - "bc81", - "펯", - 4, - "펵펶펷펹펺펻펽", - 6, - "폆폇폊", - 5, - "폑", - 5, - "샥샨샬샴샵샷샹섀섄섈섐섕서", - 4, - "섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭" - ], - [ - "bd41", - "폗폙", - 7, - "폢폤", - 7, - "폮폯폱폲폳폵폶폷" - ], - [ - "bd61", - "폸폹폺폻폾퐀퐂", - 5, - "퐉", - 13 - ], - [ - "bd81", - "퐗", - 5, - "퐞", - 25, - "숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰" - ], - [ - "be41", - "퐸", - 7, - "푁푂푃푅", - 14 - ], - [ - "be61", - "푔", - 7, - "푝푞푟푡푢푣푥", - 7, - "푮푰푱푲" - ], - [ - "be81", - "푳", - 4, - "푺푻푽푾풁풃", - 4, - "풊풌풎", - 5, - "풕", - 8, - "쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄", - 6, - "엌엎" - ], - [ - "bf41", - "풞", - 10, - "풪", - 14 - ], - [ - "bf61", - "풹", - 18, - "퓍퓎퓏퓑퓒퓓퓕" - ], - [ - "bf81", - "퓖", - 5, - "퓝퓞퓠", - 7, - "퓩퓪퓫퓭퓮퓯퓱", - 6, - "퓹퓺퓼에엑엔엘엠엡엣엥여역엮연열엶엷염", - 5, - "옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨" - ], - [ - "c041", - "퓾", - 5, - "픅픆픇픉픊픋픍", - 6, - "픖픘", - 5 - ], - [ - "c061", - "픞", - 25 - ], - [ - "c081", - "픸픹픺픻픾픿핁핂핃핅", - 6, - "핎핐핒", - 5, - "핚핛핝핞핟핡핢핣웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응", - 7, - "읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊" - ], - [ - "c141", - "핤핦핧핪핬핮", - 5, - "핶핷핹핺핻핽", - 6, - "햆햊햋" - ], - [ - "c161", - "햌햍햎햏햑", - 19, - "햦햧" - ], - [ - "c181", - "햨", - 31, - "점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓" - ], - [ - "c241", - "헊헋헍헎헏헑헓", - 4, - "헚헜헞", - 5, - "헦헧헩헪헫헭헮" - ], - [ - "c261", - "헯", - 4, - "헶헸헺", - 5, - "혂혃혅혆혇혉", - 6, - "혒" - ], - [ - "c281", - "혖", - 5, - "혝혞혟혡혢혣혥", - 7, - "혮", - 9, - "혺혻징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻" - ], - [ - "c341", - "혽혾혿홁홂홃홄홆홇홊홌홎홏홐홒홓홖홗홙홚홛홝", - 4 - ], - [ - "c361", - "홢", - 4, - "홨홪", - 5, - "홲홳홵", - 11 - ], - [ - "c381", - "횁횂횄횆", - 5, - "횎횏횑횒횓횕", - 7, - "횞횠횢", - 5, - "횩횪찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층" - ], - [ - "c441", - "횫횭횮횯횱", - 7, - "횺횼", - 7, - "훆훇훉훊훋" - ], - [ - "c461", - "훍훎훏훐훒훓훕훖훘훚", - 5, - "훡훢훣훥훦훧훩", - 4 - ], - [ - "c481", - "훮훯훱훲훳훴훶", - 5, - "훾훿휁휂휃휅", - 11, - "휒휓휔치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼" - ], - [ - "c541", - "휕휖휗휚휛휝휞휟휡", - 6, - "휪휬휮", - 5, - "휶휷휹" - ], - [ - "c561", - "휺휻휽", - 6, - "흅흆흈흊", - 5, - "흒흓흕흚", - 4 - ], - [ - "c581", - "흟흢흤흦흧흨흪흫흭흮흯흱흲흳흵", - 6, - "흾흿힀힂", - 5, - "힊힋큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜" - ], - [ - "c641", - "힍힎힏힑", - 6, - "힚힜힞", - 5 - ], - [ - "c6a1", - "퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁" - ], - [ - "c7a1", - "퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠" - ], - [ - "c8a1", - "혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝" - ], - [ - "caa1", - "伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕刻却各恪慤殼珏脚覺角閣侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間乫喝曷渴碣竭葛褐蝎鞨勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕" - ], - [ - "cba1", - "匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開喀客坑更粳羹醵倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸乾件健巾建愆楗腱虔蹇鍵騫乞傑杰桀儉劍劒檢" - ], - [ - "cca1", - "瞼鈐黔劫怯迲偈憩揭擊格檄激膈覡隔堅牽犬甄絹繭肩見譴遣鵑抉決潔結缺訣兼慊箝謙鉗鎌京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨係啓堺契季屆悸戒桂械" - ], - [ - "cda1", - "棨溪界癸磎稽系繫繼計誡谿階鷄古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓哭斛曲梏穀谷鵠困坤崑昆梱棍滾琨袞鯤汨滑骨供公共功孔工恐恭拱控攻珙空蚣貢鞏串寡戈果瓜" - ], - [ - "cea1", - "科菓誇課跨過鍋顆廓槨藿郭串冠官寬慣棺款灌琯瓘管罐菅觀貫關館刮恝括适侊光匡壙廣曠洸炚狂珖筐胱鑛卦掛罫乖傀塊壞怪愧拐槐魁宏紘肱轟交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久九仇俱具勾" - ], - [ - "cfa1", - "區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局菊鞠鞫麴君窘群裙軍郡堀屈掘窟宮弓穹窮芎躬倦券勸卷圈拳捲權淃眷厥獗蕨蹶闕机櫃潰詭軌饋句晷歸貴" - ], - [ - "d0a1", - "鬼龜叫圭奎揆槻珪硅窺竅糾葵規赳逵閨勻均畇筠菌鈞龜橘克剋劇戟棘極隙僅劤勤懃斤根槿瑾筋芹菫覲謹近饉契今妗擒昑檎琴禁禽芩衾衿襟金錦伋及急扱汲級給亘兢矜肯企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣" - ], - [ - "d1a1", - "朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒緊佶吉拮桔金喫儺喇奈娜懦懶拏拿癩", - 5, - "那樂", - 4, - "諾酪駱亂卵暖欄煖爛蘭難鸞捏捺南嵐枏楠湳濫男藍襤拉" - ], - [ - "d2a1", - "納臘蠟衲囊娘廊", - 4, - "乃來內奈柰耐冷女年撚秊念恬拈捻寧寗努勞奴弩怒擄櫓爐瑙盧", - 5, - "駑魯", - 10, - "濃籠聾膿農惱牢磊腦賂雷尿壘", - 7, - "嫩訥杻紐勒", - 5, - "能菱陵尼泥匿溺多茶" - ], - [ - "d3a1", - "丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛撻澾獺疸達啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟沓畓答踏遝唐堂塘幢戇撞棠當糖螳黨代垈坮大對岱帶待戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃" - ], - [ - "d4a1", - "棹櫂淘渡滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜毒瀆牘犢獨督禿篤纛讀墩惇敦旽暾沌焞燉豚頓乭突仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅兜斗杜枓痘竇荳讀豆逗頭屯臀芚遁遯鈍得嶝橙燈登等藤謄鄧騰喇懶拏癩羅" - ], - [ - "d5a1", - "蘿螺裸邏樂洛烙珞絡落諾酪駱丹亂卵欄欒瀾爛蘭鸞剌辣嵐擥攬欖濫籃纜藍襤覽拉臘蠟廊朗浪狼琅瑯螂郞來崍徠萊冷掠略亮倆兩凉梁樑粮粱糧良諒輛量侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷瀝礫轢靂憐戀攣漣" - ], - [ - "d6a1", - "煉璉練聯蓮輦連鍊冽列劣洌烈裂廉斂殮濂簾獵令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡例澧禮醴隷勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵碌祿綠菉錄鹿麓論壟弄朧瀧瓏籠聾儡瀨牢磊賂賚賴雷了僚寮廖料燎療瞭聊蓼" - ], - [ - "d7a1", - "遼鬧龍壘婁屢樓淚漏瘻累縷蔞褸鏤陋劉旒柳榴流溜瀏琉瑠留瘤硫謬類六戮陸侖倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾菱陵俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉吝潾燐璘藺躪隣鱗麟林淋琳臨霖砬" - ], - [ - "d8a1", - "立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻唜抹末沫茉襪靺亡妄忘忙望網罔芒茫莽輞邙埋妹媒寐昧枚梅每煤罵買賣邁魅脈貊陌驀麥孟氓猛盲盟萌冪覓免冕勉棉沔眄眠綿緬面麵滅" - ], - [ - "d9a1", - "蔑冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌木沐牧目睦穆鶩歿沒夢朦蒙卯墓妙廟描昴杳渺猫竗苗錨務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡墨默們刎吻問文" - ], - [ - "daa1", - "汶紊紋聞蚊門雯勿沕物味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴岷悶愍憫敏旻旼民泯玟珉緡閔密蜜謐剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯勃拔撥渤潑" - ], - [ - "dba1", - "發跋醱鉢髮魃倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪伯佰帛柏栢白百魄幡樊煩燔番磻繁蕃藩飜伐筏罰閥凡帆梵氾汎泛犯範范法琺僻劈壁擘檗璧癖" - ], - [ - "dca1", - "碧蘗闢霹便卞弁變辨辯邊別瞥鱉鼈丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈保堡報寶普步洑湺潽珤甫菩補褓譜輔伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒本乶俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳不付俯傅剖副否咐埠夫婦" - ], - [ - "dda1", - "孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰不佛弗彿拂崩朋棚硼繃鵬丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥" - ], - [ - "dea1", - "脾臂菲蜚裨誹譬費鄙非飛鼻嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻憑氷聘騁乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝削數朔索" - ], - [ - "dfa1", - "傘刪山散汕珊産疝算蒜酸霰乷撒殺煞薩三參杉森渗芟蔘衫揷澁鈒颯上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署" - ], - [ - "e0a1", - "胥舒薯西誓逝鋤黍鼠夕奭席惜昔晳析汐淅潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮卨屑楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾贍閃陝攝涉燮葉城姓宬性惺成星晟猩珹盛省筬" - ], - [ - "e1a1", - "聖聲腥誠醒世勢歲洗稅笹細說貰召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷俗屬束涑粟續謖贖速孫巽損蓀遜飡率宋悚松淞訟誦送頌刷殺灑碎鎖衰釗修受嗽囚垂壽嫂守岫峀帥愁" - ], - [ - "e2a1", - "戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚叔塾夙孰宿淑潚熟琡璹肅菽巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴戌術述鉥崇崧" - ], - [ - "e3a1", - "嵩瑟膝蝨濕拾習褶襲丞乘僧勝升承昇繩蠅陞侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺埴寔式息拭植殖湜熄篒蝕識軾食飾伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅失室實悉審尋心沁" - ], - [ - "e4a1", - "沈深瀋甚芯諶什十拾雙氏亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷安岸按晏案眼雁鞍顔鮟斡謁軋閼唵岩巖庵暗癌菴闇壓押狎鴨仰央怏昻殃秧鴦厓哀埃崖愛曖涯碍艾隘靄厄扼掖液縊腋額" - ], - [ - "e5a1", - "櫻罌鶯鸚也倻冶夜惹揶椰爺耶若野弱掠略約若葯蒻藥躍亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養圄御於漁瘀禦語馭魚齬億憶抑檍臆偃堰彦焉言諺孼蘖俺儼嚴奄掩淹嶪業円予余勵呂女如廬" - ], - [ - "e6a1", - "旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎亦力域役易曆歷疫繹譯轢逆驛嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶列劣咽悅涅烈熱裂說閱厭廉念捻染殮炎焰琰艶苒" - ], - [ - "e7a1", - "簾閻髥鹽曄獵燁葉令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳" - ], - [ - "e8a1", - "烏熬獒筽蜈誤鰲鼇屋沃獄玉鈺溫瑥瘟穩縕蘊兀壅擁瓮甕癰翁邕雍饔渦瓦窩窪臥蛙蝸訛婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬巍猥畏了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療" - ], - [ - "e9a1", - "窈窯繇繞耀腰蓼蟯要謠遙遼邀饒慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩勖彧旭昱栯煜稶郁頊云暈橒殞澐熉耘芸蕓" - ], - [ - "eaa1", - "運隕雲韻蔚鬱亐熊雄元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛月越鉞位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜" - ], - [ - "eba1", - "濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類六堉戮毓肉育陸倫允奫尹崙淪潤玧胤贇輪鈗閏律慄栗率聿戎瀜絨融隆垠恩慇殷誾銀隱乙吟淫蔭陰音飮揖泣邑凝應膺鷹依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼" - ], - [ - "eca1", - "議醫二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟一佚佾壹日溢逸鎰馹任壬妊姙恁林淋稔臨荏賃入卄" - ], - [ - "eda1", - "立笠粒仍剩孕芿仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌作勺嚼斫昨灼炸爵綽芍酌雀鵲孱棧殘潺盞岑暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長" - ], - [ - "eea1", - "障再哉在宰才材栽梓渽滓災縡裁財載齋齎爭箏諍錚佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱" - ], - [ - "efa1", - "煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞切截折浙癤竊節絶占岾店漸点粘霑鮎點接摺蝶丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖" - ], - [ - "f0a1", - "靜頂鼎制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥族簇足鏃存尊卒拙猝倧宗從悰慫棕淙琮種終綜縱腫" - ], - [ - "f1a1", - "踪踵鍾鐘佐坐左座挫罪主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐竹粥俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿茁中仲衆重卽櫛楫汁葺增憎曾拯烝甑症繒蒸證贈之只" - ], - [ - "f2a1", - "咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲直稙稷織職唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭斟朕什執潗緝輯" - ], - [ - "f3a1", - "鏶集徵懲澄且侘借叉嗟嵯差次此磋箚茶蹉車遮捉搾着窄錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌刹察擦札紮僭參塹慘慙懺斬站讒讖倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼債埰寀寨彩採砦綵菜蔡采釵冊柵策" - ], - [ - "f4a1", - "責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆凸哲喆徹撤澈綴輟轍鐵僉尖沾添甛瞻簽籤詹諂堞妾帖捷牒疊睫諜貼輒廳晴淸聽菁請靑鯖切剃替涕滯締諦逮遞體初剿哨憔抄招梢" - ], - [ - "f5a1", - "椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮促囑燭矗蜀觸寸忖村邨叢塚寵悤憁摠總聰蔥銃撮催崔最墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍丑畜祝竺筑築縮蓄蹙蹴軸逐春椿瑃出朮黜充忠沖蟲衝衷悴膵萃" - ], - [ - "f6a1", - "贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲側仄厠惻測層侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸琛砧針鍼蟄秤稱快他咤唾墮妥惰打拖朶楕舵陀馱駝倬卓啄坼度托拓擢晫柝濁濯琢琸託" - ], - [ - "f7a1", - "鐸呑嘆坦彈憚歎灘炭綻誕奪脫探眈耽貪塔搭榻宕帑湯糖蕩兌台太怠態殆汰泰笞胎苔跆邰颱宅擇澤撑攄兎吐土討慟桶洞痛筒統通堆槌腿褪退頹偸套妬投透鬪慝特闖坡婆巴把播擺杷波派爬琶破罷芭跛頗判坂板版瓣販辦鈑" - ], - [ - "f8a1", - "阪八叭捌佩唄悖敗沛浿牌狽稗覇貝彭澎烹膨愎便偏扁片篇編翩遍鞭騙貶坪平枰萍評吠嬖幣廢弊斃肺蔽閉陛佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑幅暴曝瀑爆輻俵剽彪慓杓標漂瓢票表豹飇飄驃" - ], - [ - "f9a1", - "品稟楓諷豊風馮彼披疲皮被避陂匹弼必泌珌畢疋筆苾馝乏逼下何厦夏廈昰河瑕荷蝦賀遐霞鰕壑學虐謔鶴寒恨悍旱汗漢澣瀚罕翰閑閒限韓割轄函含咸啣喊檻涵緘艦銜陷鹹合哈盒蛤閤闔陜亢伉姮嫦巷恒抗杭桁沆港缸肛航" - ], - [ - "faa1", - "行降項亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸杏荇行享向嚮珦鄕響餉饗香噓墟虛許憲櫶獻軒歇險驗奕爀赫革俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯孑穴血頁嫌俠協夾峽挾浹狹脅脇莢鋏頰亨兄刑型" - ], - [ - "fba1", - "形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨兮彗惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥惑或酷婚昏混渾琿魂忽惚笏哄弘汞泓洪烘紅虹訌鴻化和嬅樺火畵" - ], - [ - "fca1", - "禍禾花華話譁貨靴廓擴攫確碻穫丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥活滑猾豁闊凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄劃獲宖橫鐄哮嚆孝效斅曉梟涍淆" - ], - [ - "fda1", - "爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰" - ] -]; - -var require$$6 = [ - [ - "0", - "\u0000", - 127 - ], - [ - "a140", - " ,、。.‧;:?!︰…‥﹐﹑﹒·﹔﹕﹖﹗|–︱—︳╴︴﹏()︵︶{}︷︸〔〕︹︺【】︻︼《》︽︾〈〉︿﹀「」﹁﹂『』﹃﹄﹙﹚" - ], - [ - "a1a1", - "﹛﹜﹝﹞‘’“”〝〞‵′#&*※§〃○●△▲◎☆★◇◆□■▽▼㊣℅¯ ̄_ˍ﹉﹊﹍﹎﹋﹌﹟﹠﹡+-×÷±√<>=≦≧≠∞≒≡﹢", - 4, - "~∩∪⊥∠∟⊿㏒㏑∫∮∵∴♀♂⊕⊙↑↓←→↖↗↙↘∥∣/" - ], - [ - "a240", - "\∕﹨$¥〒¢£%@℃℉﹩﹪﹫㏕㎜㎝㎞㏎㎡㎎㎏㏄°兙兛兞兝兡兣嗧瓩糎▁", - 7, - "▏▎▍▌▋▊▉┼┴┬┤├▔─│▕┌┐└┘╭" - ], - [ - "a2a1", - "╮╰╯═╞╪╡◢◣◥◤╱╲╳0", - 9, - "Ⅰ", - 9, - "〡", - 8, - "十卄卅A", - 25, - "a", - 21 - ], - [ - "a340", - "wxyzΑ", - 16, - "Σ", - 6, - "α", - 16, - "σ", - 6, - "ㄅ", - 10 - ], - [ - "a3a1", - "ㄐ", - 25, - "˙ˉˊˇˋ" - ], - [ - "a3e1", - "€" - ], - [ - "a440", - "一乙丁七乃九了二人儿入八几刀刁力匕十卜又三下丈上丫丸凡久么也乞于亡兀刃勺千叉口土士夕大女子孑孓寸小尢尸山川工己已巳巾干廾弋弓才" - ], - [ - "a4a1", - "丑丐不中丰丹之尹予云井互五亢仁什仃仆仇仍今介仄元允內六兮公冗凶分切刈勻勾勿化匹午升卅卞厄友及反壬天夫太夭孔少尤尺屯巴幻廿弔引心戈戶手扎支文斗斤方日曰月木欠止歹毋比毛氏水火爪父爻片牙牛犬王丙" - ], - [ - "a540", - "世丕且丘主乍乏乎以付仔仕他仗代令仙仞充兄冉冊冬凹出凸刊加功包匆北匝仟半卉卡占卯卮去可古右召叮叩叨叼司叵叫另只史叱台句叭叻四囚外" - ], - [ - "a5a1", - "央失奴奶孕它尼巨巧左市布平幼弁弘弗必戊打扔扒扑斥旦朮本未末札正母民氐永汁汀氾犯玄玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丟乒乓乩亙交亦亥仿伉伙伊伕伍伐休伏仲件任仰仳份企伋光兇兆先全" - ], - [ - "a640", - "共再冰列刑划刎刖劣匈匡匠印危吉吏同吊吐吁吋各向名合吃后吆吒因回囝圳地在圭圬圯圩夙多夷夸妄奸妃好她如妁字存宇守宅安寺尖屹州帆并年" - ], - [ - "a6a1", - "式弛忙忖戎戌戍成扣扛托收早旨旬旭曲曳有朽朴朱朵次此死氖汝汗汙江池汐汕污汛汍汎灰牟牝百竹米糸缶羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色艾虫血行衣西阡串亨位住佇佗佞伴佛何估佐佑伽伺伸佃佔似但佣" - ], - [ - "a740", - "作你伯低伶余佝佈佚兌克免兵冶冷別判利刪刨劫助努劬匣即卵吝吭吞吾否呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶吠吼呀吱含吟听囪困囤囫坊坑址坍" - ], - [ - "a7a1", - "均坎圾坐坏圻壯夾妝妒妨妞妣妙妖妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿尾岐岑岔岌巫希序庇床廷弄弟彤形彷役忘忌志忍忱快忸忪戒我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑抆改攻攸旱更束李杏材村杜杖杞杉杆杠" - ], - [ - "a840", - "杓杗步每求汞沙沁沈沉沅沛汪決沐汰沌汨沖沒汽沃汲汾汴沆汶沍沔沘沂灶灼災灸牢牡牠狄狂玖甬甫男甸皂盯矣私秀禿究系罕肖肓肝肘肛肚育良芒" - ], - [ - "a8a1", - "芋芍見角言谷豆豕貝赤走足身車辛辰迂迆迅迄巡邑邢邪邦那酉釆里防阮阱阪阬並乖乳事些亞享京佯依侍佳使佬供例來侃佰併侈佩佻侖佾侏侑佺兔兒兕兩具其典冽函刻券刷刺到刮制剁劾劻卒協卓卑卦卷卸卹取叔受味呵" - ], - [ - "a940", - "咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎固垃坷坪坩坡坦坤坼夜奉奇奈奄奔妾妻委妹妮姑姆姐姍始姓姊妯妳姒姅孟孤季宗定官宜宙宛尚屈居" - ], - [ - "a9a1", - "屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往征彿彼忝忠忽念忿怏怔怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎放斧於旺昔易昌昆昂明昀昏昕昊" - ], - [ - "aa40", - "昇服朋杭枋枕東果杳杷枇枝林杯杰板枉松析杵枚枓杼杪杲欣武歧歿氓氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油況沮泗泅泱沿治泡泛泊沬泯泜泖泠" - ], - [ - "aaa1", - "炕炎炒炊炙爬爭爸版牧物狀狎狙狗狐玩玨玟玫玥甽疝疙疚的盂盲直知矽社祀祁秉秈空穹竺糾罔羌羋者肺肥肢肱股肫肩肴肪肯臥臾舍芳芝芙芭芽芟芹花芬芥芯芸芣芰芾芷虎虱初表軋迎返近邵邸邱邶采金長門阜陀阿阻附" - ], - [ - "ab40", - "陂隹雨青非亟亭亮信侵侯便俠俑俏保促侶俘俟俊俗侮俐俄係俚俎俞侷兗冒冑冠剎剃削前剌剋則勇勉勃勁匍南卻厚叛咬哀咨哎哉咸咦咳哇哂咽咪品" - ], - [ - "aba1", - "哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契奏奎奐姜姘姿姣姨娃姥姪姚姦威姻孩宣宦室客宥封屎屏屍屋峙峒巷帝帥帟幽庠度建弈弭彥很待徊律徇後徉怒思怠急怎怨恍恰恨恢恆恃恬恫恪恤扁拜挖按拼拭持拮拽指拱拷" - ], - [ - "ac40", - "拯括拾拴挑挂政故斫施既春昭映昧是星昨昱昤曷柿染柱柔某柬架枯柵柩柯柄柑枴柚查枸柏柞柳枰柙柢柝柒歪殃殆段毒毗氟泉洋洲洪流津洌洱洞洗" - ], - [ - "aca1", - "活洽派洶洛泵洹洧洸洩洮洵洎洫炫為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷珊玻玲珍珀玳甚甭畏界畎畋疫疤疥疢疣癸皆皇皈盈盆盃盅省盹相眉看盾盼眇矜砂研砌砍祆祉祈祇禹禺科秒秋穿突竿竽籽紂紅紀紉紇約紆缸美羿耄" - ], - [ - "ad40", - "耐耍耑耶胖胥胚胃胄背胡胛胎胞胤胝致舢苧范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟苯茆虐虹虻虺衍衫要觔計訂訃貞負赴赳趴軍軌述迦迢迪迥" - ], - [ - "ada1", - "迭迫迤迨郊郎郁郃酋酊重閂限陋陌降面革韋韭音頁風飛食首香乘亳倌倍倣俯倦倥俸倩倖倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉兼冤冥冢凍凌准凋剖剜剔剛剝匪卿原厝叟哨唐唁唷哼哥哲唆哺唔哩哭員唉哮哪" - ], - [ - "ae40", - "哦唧唇哽唏圃圄埂埔埋埃堉夏套奘奚娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰害家宴宮宵容宸射屑展屐峭峽峻峪峨峰島崁峴差席師庫庭座弱徒徑徐恙" - ], - [ - "aea1", - "恣恥恐恕恭恩息悄悟悚悍悔悌悅悖扇拳挈拿捎挾振捕捂捆捏捉挺捐挽挪挫挨捍捌效敉料旁旅時晉晏晃晒晌晅晁書朔朕朗校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓栘桁殊殉殷氣氧氨氦氤泰浪涕消涇浦浸海浙涓" - ], - [ - "af40", - "浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙烈烏爹特狼狹狽狸狷玆班琉珮珠珪珞畔畝畜畚留疾病症疲疳疽疼疹痂疸皋皰益盍盎眩真眠眨矩砰砧砸砝破砷" - ], - [ - "afa1", - "砥砭砠砟砲祕祐祠祟祖神祝祗祚秤秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊素索純紐紕級紜納紙紛缺罟羔翅翁耆耘耕耙耗耽耿胱脂胰脅胭胴脆胸胳脈能脊胼胯臭臬舀舐航舫舨般芻茫荒荔荊茸荐草茵茴荏茲茹茶茗荀茱茨荃" - ], - [ - "b040", - "虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽衹記訐討訌訕訊託訓訖訏訑豈豺豹財貢起躬軒軔軏辱送逆迷退迺迴逃追逅迸邕郡郝郢酒配酌釘針釗釜釙閃院陣陡" - ], - [ - "b0a1", - "陛陝除陘陞隻飢馬骨高鬥鬲鬼乾偺偽停假偃偌做偉健偶偎偕偵側偷偏倏偯偭兜冕凰剪副勒務勘動匐匏匙匿區匾參曼商啪啦啄啞啡啃啊唱啖問啕唯啤唸售啜唬啣唳啁啗圈國圉域堅堊堆埠埤基堂堵執培夠奢娶婁婉婦婪婀" - ], - [ - "b140", - "娼婢婚婆婊孰寇寅寄寂宿密尉專將屠屜屝崇崆崎崛崖崢崑崩崔崙崤崧崗巢常帶帳帷康庸庶庵庾張強彗彬彩彫得徙從徘御徠徜恿患悉悠您惋悴惦悽" - ], - [ - "b1a1", - "情悻悵惜悼惘惕惆惟悸惚惇戚戛扈掠控捲掖探接捷捧掘措捱掩掉掃掛捫推掄授掙採掬排掏掀捻捩捨捺敝敖救教敗啟敏敘敕敔斜斛斬族旋旌旎晝晚晤晨晦晞曹勗望梁梯梢梓梵桿桶梱梧梗械梃棄梭梆梅梔條梨梟梡梂欲殺" - ], - [ - "b240", - "毫毬氫涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽犁猜猛猖猓猙率琅琊球理現琍瓠瓶" - ], - [ - "b2a1", - "瓷甜產略畦畢異疏痔痕疵痊痍皎盔盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕絆絃統紮紹紼絀細紳組累終紲紱缽羞羚翌翎習耜聊聆脯脖脣脫脩脰脤舂舵舷舶船莎莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼" - ], - [ - "b340", - "莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞袈被袒袖袍袋覓規訪訝訣訥許設訟訛訢豉豚販責貫貨貪貧赧赦趾趺軛軟這逍通逗連速逝逐逕逞造透逢逖逛途" - ], - [ - "b3a1", - "部郭都酗野釵釦釣釧釭釩閉陪陵陳陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵鹿麥麻傢傍傅備傑傀傖傘傚最凱割剴創剩勞勝勛博厥啻喀喧啼喊喝喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉喫喙圍堯堪場堤堰報堡堝堠壹壺奠" - ], - [ - "b440", - "婷媚婿媒媛媧孳孱寒富寓寐尊尋就嵌嵐崴嵇巽幅帽幀幃幾廊廁廂廄弼彭復循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愒戟扉掣掌描揀揩揉揆揍" - ], - [ - "b4a1", - "插揣提握揖揭揮捶援揪換摒揚揹敞敦敢散斑斐斯普晰晴晶景暑智晾晷曾替期朝棺棕棠棘棗椅棟棵森棧棹棒棲棣棋棍植椒椎棉棚楮棻款欺欽殘殖殼毯氮氯氬港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴湍渺測湃渝渾滋" - ], - [ - "b540", - "溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜牌犄犀猶猥猴猩琺琪琳琢琥琵琶琴琯琛琦琨甥甦畫番痢痛痣痙痘痞痠登發皖皓皴盜睏短硝硬硯稍稈程稅稀窘" - ], - [ - "b5a1", - "窗窖童竣等策筆筐筒答筍筋筏筑粟粥絞結絨絕紫絮絲絡給絢絰絳善翔翕耋聒肅腕腔腋腑腎脹腆脾腌腓腴舒舜菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌菽菲菊萸萎萄菜萇菔菟虛蛟蛙蛭蛔蛛蛤蛐蛞街裁裂袱覃視註詠評詞証詁" - ], - [ - "b640", - "詔詛詐詆訴診訶詖象貂貯貼貳貽賁費賀貴買貶貿貸越超趁跎距跋跚跑跌跛跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣酥量鈔鈕鈣鈉鈞鈍鈐鈇鈑閔閏開閑" - ], - [ - "b6a1", - "間閒閎隊階隋陽隅隆隍陲隄雁雅雄集雇雯雲韌項順須飧飪飯飩飲飭馮馭黃黍黑亂傭債傲傳僅傾催傷傻傯僇剿剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚塔填塌塭塊塢塒塋奧嫁嫉嫌媾媽媼" - ], - [ - "b740", - "媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚意慈感想愛惹愁愈慎慌慄慍愾愴愧愍愆愷戡戢搓搾搞搪搭搽搬搏搜搔損搶搖搗搆敬斟新暗暉暇暈暖暄暘暍會榔業" - ], - [ - "b7a1", - "楚楷楠楔極椰概楊楨楫楞楓楹榆楝楣楛歇歲毀殿毓毽溢溯滓溶滂源溝滇滅溥溘溼溺溫滑準溜滄滔溪溧溴煎煙煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷獅猿猾瑯瑚瑕瑟瑞瑁琿瑙瑛瑜當畸瘀痰瘁痲痱痺痿痴痳盞盟睛睫睦睞督" - ], - [ - "b840", - "睹睪睬睜睥睨睢矮碎碰碗碘碌碉硼碑碓硿祺祿禁萬禽稜稚稠稔稟稞窟窠筷節筠筮筧粱粳粵經絹綑綁綏絛置罩罪署義羨群聖聘肆肄腱腰腸腥腮腳腫" - ], - [ - "b8a1", - "腹腺腦舅艇蒂葷落萱葵葦葫葉葬葛萼萵葡董葩葭葆虞虜號蛹蜓蜈蜇蜀蛾蛻蜂蜃蜆蜊衙裟裔裙補裘裝裡裊裕裒覜解詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂賅跡跟跨路跳跺跪跤跦躲較載軾輊" - ], - [ - "b940", - "辟農運遊道遂達逼違遐遇遏過遍遑逾遁鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉉鉍鉅鈹鈿鉚閘隘隔隕雍雋雉雊雷電雹零靖靴靶預頑頓頊頒頌飼飴" - ], - [ - "b9a1", - "飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖僭僚僕像僑僱僎僩兢凳劃劂匱厭嗾嘀嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘐嗶團圖塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察對屢嶄嶇幛幣幕幗幔廓廖弊彆彰徹慇" - ], - [ - "ba40", - "愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟摺摑摧搴摭摻敲斡旗旖暢暨暝榜榨榕槁榮槓構榛榷榻榫榴槐槍榭槌榦槃榣歉歌氳漳演滾漓滴漩漾漠漬漏漂漢" - ], - [ - "baa1", - "滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲滌滷熔熙煽熊熄熒爾犒犖獄獐瑤瑣瑪瑰瑭甄疑瘧瘍瘋瘉瘓盡監瞄睽睿睡磁碟碧碳碩碣禎福禍種稱窪窩竭端管箕箋筵算箝箔箏箸箇箄粹粽精綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇綬" - ], - [ - "bb40", - "罰翠翡翟聞聚肇腐膀膏膈膊腿膂臧臺與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓蒐蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘蝕蜷蜩裳褂裴裹裸製裨褚裯誦誌語誣認誡誓誤" - ], - [ - "bba1", - "說誥誨誘誑誚誧豪貍貌賓賑賒赫趙趕跼輔輒輕輓辣遠遘遜遣遙遞遢遝遛鄙鄘鄞酵酸酷酴鉸銀銅銘銖鉻銓銜銨鉼銑閡閨閩閣閥閤隙障際雌雒需靼鞅韶頗領颯颱餃餅餌餉駁骯骰髦魁魂鳴鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜" - ], - [ - "bc40", - "劇劈劉劍劊勰厲嘮嘻嘹嘲嘿嘴嘩噓噎噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻嬋嫵嬌嬈寮寬審寫層履嶝嶔幢幟幡廢廚廟廝廣廠彈影德徵慶慧慮慝慕憂" - ], - [ - "bca1", - "慼慰慫慾憧憐憫憎憬憚憤憔憮戮摩摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚撬撙撢撳敵敷數暮暫暴暱樣樟槨樁樞標槽模樓樊槳樂樅槭樑歐歎殤毅毆漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘滕潯潠潟熟熬熱熨牖犛獎獗瑩璋璃" - ], - [ - "bd40", - "瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌瞑瞋磋磅確磊碾磕碼磐稿稼穀稽稷稻窯窮箭箱範箴篆篇篁箠篌糊締練緯緻緘緬緝編緣線緞緩綞緙緲緹罵罷羯" - ], - [ - "bda1", - "翩耦膛膜膝膠膚膘蔗蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蔆螂蝴蝶蝠蝦蝸蝨蝙蝗蝌蝓衛衝褐複褒褓褕褊誼諒談諄誕請諸課諉諂調誰論諍誶誹諛豌豎豬賠賞賦賤賬賭賢賣賜質賡赭趟趣踫踐踝踢踏踩踟踡踞躺輝輛輟輩輦輪輜輞" - ], - [ - "be40", - "輥適遮遨遭遷鄰鄭鄧鄱醇醉醋醃鋅銻銷鋪銬鋤鋁銳銼鋒鋇鋰銲閭閱霄霆震霉靠鞍鞋鞏頡頫頜颳養餓餒餘駝駐駟駛駑駕駒駙骷髮髯鬧魅魄魷魯鴆鴉" - ], - [ - "bea1", - "鴃麩麾黎墨齒儒儘儔儐儕冀冪凝劑劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶壁墾壇壅奮嬝嬴學寰導彊憲憑憩憊懍憶憾懊懈戰擅擁擋撻撼據擄擇擂操撿擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘樹橄橢橡橋橇樵機橈歙歷氅濂澱澡" - ], - [ - "bf40", - "濃澤濁澧澳激澹澶澦澠澴熾燉燐燒燈燕熹燎燙燜燃燄獨璜璣璘璟璞瓢甌甍瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦積穎穆穌穋窺篙簑築篤篛篡篩篦糕糖縊" - ], - [ - "bfa1", - "縑縈縛縣縞縝縉縐罹羲翰翱翮耨膳膩膨臻興艘艙蕊蕙蕈蕨蕩蕃蕉蕭蕪蕞螃螟螞螢融衡褪褲褥褫褡親覦諦諺諫諱謀諜諧諮諾謁謂諷諭諳諶諼豫豭貓賴蹄踱踴蹂踹踵輻輯輸輳辨辦遵遴選遲遼遺鄴醒錠錶鋸錳錯錢鋼錫錄錚" - ], - [ - "c040", - "錐錦錡錕錮錙閻隧隨險雕霎霑霖霍霓霏靛靜靦鞘頰頸頻頷頭頹頤餐館餞餛餡餚駭駢駱骸骼髻髭鬨鮑鴕鴣鴦鴨鴒鴛默黔龍龜優償儡儲勵嚎嚀嚐嚅嚇" - ], - [ - "c0a1", - "嚏壕壓壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾檗檐檠歜殮毚氈濘濱濟濠濛濤濫濯澀濬濡濩濕濮濰燧營燮燦燥燭燬燴燠爵牆獰獲璩環璦璨癆療癌盪瞳瞪瞰瞬" - ], - [ - "c140", - "瞧瞭矯磷磺磴磯礁禧禪穗窿簇簍篾篷簌篠糠糜糞糢糟糙糝縮績繆縷縲繃縫總縱繅繁縴縹繈縵縿縯罄翳翼聱聲聰聯聳臆臃膺臂臀膿膽臉膾臨舉艱薪" - ], - [ - "c1a1", - "薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講謊謠謝謄謐豁谿豳賺賽購賸賻趨蹉蹋蹈蹊轄輾轂轅輿避遽還邁邂邀鄹醣醞醜鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鍚鍔闊闋闌闈闆隱隸雖霜霞鞠韓顆颶餵騁" - ], - [ - "c240", - "駿鮮鮫鮪鮭鴻鴿麋黏點黜黝黛鼾齋叢嚕嚮壙壘嬸彝懣戳擴擲擾攆擺擻擷斷曜朦檳檬櫃檻檸櫂檮檯歟歸殯瀉瀋濾瀆濺瀑瀏燻燼燾燸獷獵璧璿甕癖癘" - ], - [ - "c2a1", - "癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶臍臏舊藏薩藍藐藉薰薺薹薦蟯蟬蟲蟠覆覲觴謨謹謬謫豐贅蹙蹣蹦蹤蹟蹕軀轉轍邇邃邈醫醬釐鎔鎊鎖鎢鎳鎮鎬鎰鎘鎚鎗闔闖闐闕離雜雙雛雞霤鞣鞦" - ], - [ - "c340", - "鞭韹額顏題顎顓颺餾餿餽餮馥騎髁鬃鬆魏魎魍鯊鯉鯽鯈鯀鵑鵝鵠黠鼕鼬儳嚥壞壟壢寵龐廬懲懷懶懵攀攏曠曝櫥櫝櫚櫓瀛瀟瀨瀚瀝瀕瀘爆爍牘犢獸" - ], - [ - "c3a1", - "獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩藝藪藕藤藥藷蟻蠅蠍蟹蟾襠襟襖襞譁譜識證譚譎譏譆譙贈贊蹼蹲躇蹶蹬蹺蹴轔轎辭邊邋醱醮鏡鏑鏟鏃鏈鏜鏝鏖鏢鏍鏘鏤鏗鏨關隴難霪霧靡韜韻類" - ], - [ - "c440", - "願顛颼饅饉騖騙鬍鯨鯧鯖鯛鶉鵡鵲鵪鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶巉懸懺攘攔攙曦朧櫬瀾瀰瀲爐獻瓏癢癥礦礪礬礫竇競籌籃籍糯糰辮繽繼" - ], - [ - "c4a1", - "纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕襤覺觸議譬警譯譟譫贏贍躉躁躅躂醴釋鐘鐃鏽闡霰飄饒饑馨騫騰騷騵鰓鰍鹹麵黨鼯齟齣齡儷儸囁囀囂夔屬巍懼懾攝攜斕曩櫻欄櫺殲灌爛犧瓖瓔癩矓籐纏續羼蘗蘭蘚蠣蠢蠡蠟襪襬覽譴" - ], - [ - "c540", - "護譽贓躊躍躋轟辯醺鐮鐳鐵鐺鐸鐲鐫闢霸霹露響顧顥饗驅驃驀騾髏魔魑鰭鰥鶯鶴鷂鶸麝黯鼙齜齦齧儼儻囈囊囉孿巔巒彎懿攤權歡灑灘玀瓤疊癮癬" - ], - [ - "c5a1", - "禳籠籟聾聽臟襲襯觼讀贖贗躑躓轡酈鑄鑑鑒霽霾韃韁顫饕驕驍髒鬚鱉鰱鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬欐瓚竊籤籣籥纓纖纔臢蘸蘿蠱變邐邏鑣鑠鑤靨顯饜驚驛驗髓體髑鱔鱗鱖鷥麟黴囑壩攬灞癱癲矗罐羈蠶蠹衢讓讒" - ], - [ - "c640", - "讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲" - ], - [ - "c940", - "乂乜凵匚厂万丌乇亍囗兀屮彳丏冇与丮亓仂仉仈冘勼卬厹圠夃夬尐巿旡殳毌气爿丱丼仨仜仩仡仝仚刌匜卌圢圣夗夯宁宄尒尻屴屳帄庀庂忉戉扐氕" - ], - [ - "c9a1", - "氶汃氿氻犮犰玊禸肊阞伎优伬仵伔仱伀价伈伝伂伅伢伓伄仴伒冱刓刉刐劦匢匟卍厊吇囡囟圮圪圴夼妀奼妅奻奾奷奿孖尕尥屼屺屻屾巟幵庄异弚彴忕忔忏扜扞扤扡扦扢扙扠扚扥旯旮朾朹朸朻机朿朼朳氘汆汒汜汏汊汔汋" - ], - [ - "ca40", - "汌灱牞犴犵玎甪癿穵网艸艼芀艽艿虍襾邙邗邘邛邔阢阤阠阣佖伻佢佉体佤伾佧佒佟佁佘伭伳伿佡冏冹刜刞刡劭劮匉卣卲厎厏吰吷吪呔呅吙吜吥吘" - ], - [ - "caa1", - "吽呏呁吨吤呇囮囧囥坁坅坌坉坋坒夆奀妦妘妠妗妎妢妐妏妧妡宎宒尨尪岍岏岈岋岉岒岊岆岓岕巠帊帎庋庉庌庈庍弅弝彸彶忒忑忐忭忨忮忳忡忤忣忺忯忷忻怀忴戺抃抌抎抏抔抇扱扻扺扰抁抈扷扽扲扴攷旰旴旳旲旵杅杇" - ], - [ - "cb40", - "杙杕杌杈杝杍杚杋毐氙氚汸汧汫沄沋沏汱汯汩沚汭沇沕沜汦汳汥汻沎灴灺牣犿犽狃狆狁犺狅玕玗玓玔玒町甹疔疕皁礽耴肕肙肐肒肜芐芏芅芎芑芓" - ], - [ - "cba1", - "芊芃芄豸迉辿邟邡邥邞邧邠阰阨阯阭丳侘佼侅佽侀侇佶佴侉侄佷佌侗佪侚佹侁佸侐侜侔侞侒侂侕佫佮冞冼冾刵刲刳剆刱劼匊匋匼厒厔咇呿咁咑咂咈呫呺呾呥呬呴呦咍呯呡呠咘呣呧呤囷囹坯坲坭坫坱坰坶垀坵坻坳坴坢" - ], - [ - "cc40", - "坨坽夌奅妵妺姏姎妲姌姁妶妼姃姖妱妽姀姈妴姇孢孥宓宕屄屇岮岤岠岵岯岨岬岟岣岭岢岪岧岝岥岶岰岦帗帔帙弨弢弣弤彔徂彾彽忞忥怭怦怙怲怋" - ], - [ - "cca1", - "怴怊怗怳怚怞怬怢怍怐怮怓怑怌怉怜戔戽抭抴拑抾抪抶拊抮抳抯抻抩抰抸攽斨斻昉旼昄昒昈旻昃昋昍昅旽昑昐曶朊枅杬枎枒杶杻枘枆构杴枍枌杺枟枑枙枃杽极杸杹枔欥殀歾毞氝沓泬泫泮泙沶泔沭泧沷泐泂沺泃泆泭泲" - ], - [ - "cd40", - "泒泝沴沊沝沀泞泀洰泍泇沰泹泏泩泑炔炘炅炓炆炄炑炖炂炚炃牪狖狋狘狉狜狒狔狚狌狑玤玡玭玦玢玠玬玝瓝瓨甿畀甾疌疘皯盳盱盰盵矸矼矹矻矺" - ], - [ - "cda1", - "矷祂礿秅穸穻竻籵糽耵肏肮肣肸肵肭舠芠苀芫芚芘芛芵芧芮芼芞芺芴芨芡芩苂芤苃芶芢虰虯虭虮豖迒迋迓迍迖迕迗邲邴邯邳邰阹阽阼阺陃俍俅俓侲俉俋俁俔俜俙侻侳俛俇俖侺俀侹俬剄剉勀勂匽卼厗厖厙厘咺咡咭咥哏" - ], - [ - "ce40", - "哃茍咷咮哖咶哅哆咠呰咼咢咾呲哞咰垵垞垟垤垌垗垝垛垔垘垏垙垥垚垕壴复奓姡姞姮娀姱姝姺姽姼姶姤姲姷姛姩姳姵姠姾姴姭宨屌峐峘峌峗峋峛" - ], - [ - "cea1", - "峞峚峉峇峊峖峓峔峏峈峆峎峟峸巹帡帢帣帠帤庰庤庢庛庣庥弇弮彖徆怷怹恔恲恞恅恓恇恉恛恌恀恂恟怤恄恘恦恮扂扃拏挍挋拵挎挃拫拹挏挌拸拶挀挓挔拺挕拻拰敁敃斪斿昶昡昲昵昜昦昢昳昫昺昝昴昹昮朏朐柁柲柈枺" - ], - [ - "cf40", - "柜枻柸柘柀枷柅柫柤柟枵柍枳柷柶柮柣柂枹柎柧柰枲柼柆柭柌枮柦柛柺柉柊柃柪柋欨殂殄殶毖毘毠氠氡洨洴洭洟洼洿洒洊泚洳洄洙洺洚洑洀洝浂" - ], - [ - "cfa1", - "洁洘洷洃洏浀洇洠洬洈洢洉洐炷炟炾炱炰炡炴炵炩牁牉牊牬牰牳牮狊狤狨狫狟狪狦狣玅珌珂珈珅玹玶玵玴珫玿珇玾珃珆玸珋瓬瓮甮畇畈疧疪癹盄眈眃眄眅眊盷盻盺矧矨砆砑砒砅砐砏砎砉砃砓祊祌祋祅祄秕种秏秖秎窀" - ], - [ - "d040", - "穾竑笀笁籺籸籹籿粀粁紃紈紁罘羑羍羾耇耎耏耔耷胘胇胠胑胈胂胐胅胣胙胜胊胕胉胏胗胦胍臿舡芔苙苾苹茇苨茀苕茺苫苖苴苬苡苲苵茌苻苶苰苪" - ], - [ - "d0a1", - "苤苠苺苳苭虷虴虼虳衁衎衧衪衩觓訄訇赲迣迡迮迠郱邽邿郕郅邾郇郋郈釔釓陔陏陑陓陊陎倞倅倇倓倢倰倛俵俴倳倷倬俶俷倗倜倠倧倵倯倱倎党冔冓凊凄凅凈凎剡剚剒剞剟剕剢勍匎厞唦哢唗唒哧哳哤唚哿唄唈哫唑唅哱" - ], - [ - "d140", - "唊哻哷哸哠唎唃唋圁圂埌堲埕埒垺埆垽垼垸垶垿埇埐垹埁夎奊娙娖娭娮娕娏娗娊娞娳孬宧宭宬尃屖屔峬峿峮峱峷崀峹帩帨庨庮庪庬弳弰彧恝恚恧" - ], - [ - "d1a1", - "恁悢悈悀悒悁悝悃悕悛悗悇悜悎戙扆拲挐捖挬捄捅挶捃揤挹捋捊挼挩捁挴捘捔捙挭捇挳捚捑挸捗捀捈敊敆旆旃旄旂晊晟晇晑朒朓栟栚桉栲栳栻桋桏栖栱栜栵栫栭栯桎桄栴栝栒栔栦栨栮桍栺栥栠欬欯欭欱欴歭肂殈毦毤" - ], - [ - "d240", - "毨毣毢毧氥浺浣浤浶洍浡涒浘浢浭浯涑涍淯浿涆浞浧浠涗浰浼浟涂涘洯浨涋浾涀涄洖涃浻浽浵涐烜烓烑烝烋缹烢烗烒烞烠烔烍烅烆烇烚烎烡牂牸" - ], - [ - "d2a1", - "牷牶猀狺狴狾狶狳狻猁珓珙珥珖玼珧珣珩珜珒珛珔珝珚珗珘珨瓞瓟瓴瓵甡畛畟疰痁疻痄痀疿疶疺皊盉眝眛眐眓眒眣眑眕眙眚眢眧砣砬砢砵砯砨砮砫砡砩砳砪砱祔祛祏祜祓祒祑秫秬秠秮秭秪秜秞秝窆窉窅窋窌窊窇竘笐" - ], - [ - "d340", - "笄笓笅笏笈笊笎笉笒粄粑粊粌粈粍粅紞紝紑紎紘紖紓紟紒紏紌罜罡罞罠罝罛羖羒翃翂翀耖耾耹胺胲胹胵脁胻脀舁舯舥茳茭荄茙荑茥荖茿荁茦茜茢" - ], - [ - "d3a1", - "荂荎茛茪茈茼荍茖茤茠茷茯茩荇荅荌荓茞茬荋茧荈虓虒蚢蚨蚖蚍蚑蚞蚇蚗蚆蚋蚚蚅蚥蚙蚡蚧蚕蚘蚎蚝蚐蚔衃衄衭衵衶衲袀衱衿衯袃衾衴衼訒豇豗豻貤貣赶赸趵趷趶軑軓迾迵适迿迻逄迼迶郖郠郙郚郣郟郥郘郛郗郜郤酐" - ], - [ - "d440", - "酎酏釕釢釚陜陟隼飣髟鬯乿偰偪偡偞偠偓偋偝偲偈偍偁偛偊偢倕偅偟偩偫偣偤偆偀偮偳偗偑凐剫剭剬剮勖勓匭厜啵啶唼啍啐唴唪啑啢唶唵唰啒啅" - ], - [ - "d4a1", - "唌唲啥啎唹啈唭唻啀啋圊圇埻堔埢埶埜埴堀埭埽堈埸堋埳埏堇埮埣埲埥埬埡堎埼堐埧堁堌埱埩埰堍堄奜婠婘婕婧婞娸娵婭婐婟婥婬婓婤婗婃婝婒婄婛婈媎娾婍娹婌婰婩婇婑婖婂婜孲孮寁寀屙崞崋崝崚崠崌崨崍崦崥崏" - ], - [ - "d540", - "崰崒崣崟崮帾帴庱庴庹庲庳弶弸徛徖徟悊悐悆悾悰悺惓惔惏惤惙惝惈悱惛悷惊悿惃惍惀挲捥掊掂捽掽掞掭掝掗掫掎捯掇掐据掯捵掜捭掮捼掤挻掟" - ], - [ - "d5a1", - "捸掅掁掑掍捰敓旍晥晡晛晙晜晢朘桹梇梐梜桭桮梮梫楖桯梣梬梩桵桴梲梏桷梒桼桫桲梪梀桱桾梛梖梋梠梉梤桸桻梑梌梊桽欶欳欷欸殑殏殍殎殌氪淀涫涴涳湴涬淩淢涷淶淔渀淈淠淟淖涾淥淜淝淛淴淊涽淭淰涺淕淂淏淉" - ], - [ - "d640", - "淐淲淓淽淗淍淣涻烺焍烷焗烴焌烰焄烳焐烼烿焆焓焀烸烶焋焂焎牾牻牼牿猝猗猇猑猘猊猈狿猏猞玈珶珸珵琄琁珽琇琀珺珼珿琌琋珴琈畤畣痎痒痏" - ], - [ - "d6a1", - "痋痌痑痐皏皉盓眹眯眭眱眲眴眳眽眥眻眵硈硒硉硍硊硌砦硅硐祤祧祩祪祣祫祡离秺秸秶秷窏窔窐笵筇笴笥笰笢笤笳笘笪笝笱笫笭笯笲笸笚笣粔粘粖粣紵紽紸紶紺絅紬紩絁絇紾紿絊紻紨罣羕羜羝羛翊翋翍翐翑翇翏翉耟" - ], - [ - "d740", - "耞耛聇聃聈脘脥脙脛脭脟脬脞脡脕脧脝脢舑舸舳舺舴舲艴莐莣莨莍荺荳莤荴莏莁莕莙荵莔莩荽莃莌莝莛莪莋荾莥莯莈莗莰荿莦莇莮荶莚虙虖蚿蚷" - ], - [ - "d7a1", - "蛂蛁蛅蚺蚰蛈蚹蚳蚸蛌蚴蚻蚼蛃蚽蚾衒袉袕袨袢袪袚袑袡袟袘袧袙袛袗袤袬袌袓袎覂觖觙觕訰訧訬訞谹谻豜豝豽貥赽赻赹趼跂趹趿跁軘軞軝軜軗軠軡逤逋逑逜逌逡郯郪郰郴郲郳郔郫郬郩酖酘酚酓酕釬釴釱釳釸釤釹釪" - ], - [ - "d840", - "釫釷釨釮镺閆閈陼陭陫陱陯隿靪頄飥馗傛傕傔傞傋傣傃傌傎傝偨傜傒傂傇兟凔匒匑厤厧喑喨喥喭啷噅喢喓喈喏喵喁喣喒喤啽喌喦啿喕喡喎圌堩堷" - ], - [ - "d8a1", - "堙堞堧堣堨埵塈堥堜堛堳堿堶堮堹堸堭堬堻奡媯媔媟婺媢媞婸媦婼媥媬媕媮娷媄媊媗媃媋媩婻婽媌媜媏媓媝寪寍寋寔寑寊寎尌尰崷嵃嵫嵁嵋崿崵嵑嵎嵕崳崺嵒崽崱嵙嵂崹嵉崸崼崲崶嵀嵅幄幁彘徦徥徫惉悹惌惢惎惄愔" - ], - [ - "d940", - "惲愊愖愅惵愓惸惼惾惁愃愘愝愐惿愄愋扊掔掱掰揎揥揨揯揃撝揳揊揠揶揕揲揵摡揟掾揝揜揄揘揓揂揇揌揋揈揰揗揙攲敧敪敤敜敨敥斌斝斞斮旐旒" - ], - [ - "d9a1", - "晼晬晻暀晱晹晪晲朁椌棓椄棜椪棬棪棱椏棖棷棫棤棶椓椐棳棡椇棌椈楰梴椑棯棆椔棸棐棽棼棨椋椊椗棎棈棝棞棦棴棑椆棔棩椕椥棇欹欻欿欼殔殗殙殕殽毰毲毳氰淼湆湇渟湉溈渼渽湅湢渫渿湁湝湳渜渳湋湀湑渻渃渮湞" - ], - [ - "da40", - "湨湜湡渱渨湠湱湫渹渢渰湓湥渧湸湤湷湕湹湒湦渵渶湚焠焞焯烻焮焱焣焥焢焲焟焨焺焛牋牚犈犉犆犅犋猒猋猰猢猱猳猧猲猭猦猣猵猌琮琬琰琫琖" - ], - [ - "daa1", - "琚琡琭琱琤琣琝琩琠琲瓻甯畯畬痧痚痡痦痝痟痤痗皕皒盚睆睇睄睍睅睊睎睋睌矞矬硠硤硥硜硭硱硪确硰硩硨硞硢祴祳祲祰稂稊稃稌稄窙竦竤筊笻筄筈筌筎筀筘筅粢粞粨粡絘絯絣絓絖絧絪絏絭絜絫絒絔絩絑絟絎缾缿罥" - ], - [ - "db40", - "罦羢羠羡翗聑聏聐胾胔腃腊腒腏腇脽腍脺臦臮臷臸臹舄舼舽舿艵茻菏菹萣菀菨萒菧菤菼菶萐菆菈菫菣莿萁菝菥菘菿菡菋菎菖菵菉萉萏菞萑萆菂菳" - ], - [ - "dba1", - "菕菺菇菑菪萓菃菬菮菄菻菗菢萛菛菾蛘蛢蛦蛓蛣蛚蛪蛝蛫蛜蛬蛩蛗蛨蛑衈衖衕袺裗袹袸裀袾袶袼袷袽袲褁裉覕覘覗觝觚觛詎詍訹詙詀詗詘詄詅詒詈詑詊詌詏豟貁貀貺貾貰貹貵趄趀趉跘跓跍跇跖跜跏跕跙跈跗跅軯軷軺" - ], - [ - "dc40", - "軹軦軮軥軵軧軨軶軫軱軬軴軩逭逴逯鄆鄬鄄郿郼鄈郹郻鄁鄀鄇鄅鄃酡酤酟酢酠鈁鈊鈥鈃鈚鈦鈏鈌鈀鈒釿釽鈆鈄鈧鈂鈜鈤鈙鈗鈅鈖镻閍閌閐隇陾隈" - ], - [ - "dca1", - "隉隃隀雂雈雃雱雰靬靰靮頇颩飫鳦黹亃亄亶傽傿僆傮僄僊傴僈僂傰僁傺傱僋僉傶傸凗剺剸剻剼嗃嗛嗌嗐嗋嗊嗝嗀嗔嗄嗩喿嗒喍嗏嗕嗢嗖嗈嗲嗍嗙嗂圔塓塨塤塏塍塉塯塕塎塝塙塥塛堽塣塱壼嫇嫄嫋媺媸媱媵媰媿嫈媻嫆" - ], - [ - "dd40", - "媷嫀嫊媴媶嫍媹媐寖寘寙尟尳嵱嵣嵊嵥嵲嵬嵞嵨嵧嵢巰幏幎幊幍幋廅廌廆廋廇彀徯徭惷慉慊愫慅愶愲愮慆愯慏愩慀戠酨戣戥戤揅揱揫搐搒搉搠搤" - ], - [ - "dda1", - "搳摃搟搕搘搹搷搢搣搌搦搰搨摁搵搯搊搚摀搥搧搋揧搛搮搡搎敯斒旓暆暌暕暐暋暊暙暔晸朠楦楟椸楎楢楱椿楅楪椹楂楗楙楺楈楉椵楬椳椽楥棰楸椴楩楀楯楄楶楘楁楴楌椻楋椷楜楏楑椲楒椯楻椼歆歅歃歂歈歁殛嗀毻毼" - ], - [ - "de40", - "毹毷毸溛滖滈溏滀溟溓溔溠溱溹滆滒溽滁溞滉溷溰滍溦滏溲溾滃滜滘溙溒溎溍溤溡溿溳滐滊溗溮溣煇煔煒煣煠煁煝煢煲煸煪煡煂煘煃煋煰煟煐煓" - ], - [ - "dea1", - "煄煍煚牏犍犌犑犐犎猼獂猻猺獀獊獉瑄瑊瑋瑒瑑瑗瑀瑏瑐瑎瑂瑆瑍瑔瓡瓿瓾瓽甝畹畷榃痯瘏瘃痷痾痼痹痸瘐痻痶痭痵痽皙皵盝睕睟睠睒睖睚睩睧睔睙睭矠碇碚碔碏碄碕碅碆碡碃硹碙碀碖硻祼禂祽祹稑稘稙稒稗稕稢稓" - ], - [ - "df40", - "稛稐窣窢窞竫筦筤筭筴筩筲筥筳筱筰筡筸筶筣粲粴粯綈綆綀綍絿綅絺綎絻綃絼綌綔綄絽綒罭罫罧罨罬羦羥羧翛翜耡腤腠腷腜腩腛腢腲朡腞腶腧腯" - ], - [ - "dfa1", - "腄腡舝艉艄艀艂艅蓱萿葖葶葹蒏蒍葥葑葀蒆葧萰葍葽葚葙葴葳葝蔇葞萷萺萴葺葃葸萲葅萩菙葋萯葂萭葟葰萹葎葌葒葯蓅蒎萻葇萶萳葨葾葄萫葠葔葮葐蜋蜄蛷蜌蛺蛖蛵蝍蛸蜎蜉蜁蛶蜍蜅裖裋裍裎裞裛裚裌裐覅覛觟觥觤" - ], - [ - "e040", - "觡觠觢觜触詶誆詿詡訿詷誂誄詵誃誁詴詺谼豋豊豥豤豦貆貄貅賌赨赩趑趌趎趏趍趓趔趐趒跰跠跬跱跮跐跩跣跢跧跲跫跴輆軿輁輀輅輇輈輂輋遒逿" - ], - [ - "e0a1", - "遄遉逽鄐鄍鄏鄑鄖鄔鄋鄎酮酯鉈鉒鈰鈺鉦鈳鉥鉞銃鈮鉊鉆鉭鉬鉏鉠鉧鉯鈶鉡鉰鈱鉔鉣鉐鉲鉎鉓鉌鉖鈲閟閜閞閛隒隓隑隗雎雺雽雸雵靳靷靸靲頏頍頎颬飶飹馯馲馰馵骭骫魛鳪鳭鳧麀黽僦僔僗僨僳僛僪僝僤僓僬僰僯僣僠" - ], - [ - "e140", - "凘劀劁勩勫匰厬嘧嘕嘌嘒嗼嘏嘜嘁嘓嘂嗺嘝嘄嗿嗹墉塼墐墘墆墁塿塴墋塺墇墑墎塶墂墈塻墔墏壾奫嫜嫮嫥嫕嫪嫚嫭嫫嫳嫢嫠嫛嫬嫞嫝嫙嫨嫟孷寠" - ], - [ - "e1a1", - "寣屣嶂嶀嵽嶆嵺嶁嵷嶊嶉嶈嵾嵼嶍嵹嵿幘幙幓廘廑廗廎廜廕廙廒廔彄彃彯徶愬愨慁慞慱慳慒慓慲慬憀慴慔慺慛慥愻慪慡慖戩戧戫搫摍摛摝摴摶摲摳摽摵摦撦摎撂摞摜摋摓摠摐摿搿摬摫摙摥摷敳斠暡暠暟朅朄朢榱榶槉" - ], - [ - "e240", - "榠槎榖榰榬榼榑榙榎榧榍榩榾榯榿槄榽榤槔榹槊榚槏榳榓榪榡榞槙榗榐槂榵榥槆歊歍歋殞殟殠毃毄毾滎滵滱漃漥滸漷滻漮漉潎漙漚漧漘漻漒滭漊" - ], - [ - "e2a1", - "漶潳滹滮漭潀漰漼漵滫漇漎潃漅滽滶漹漜滼漺漟漍漞漈漡熇熐熉熀熅熂熏煻熆熁熗牄牓犗犕犓獃獍獑獌瑢瑳瑱瑵瑲瑧瑮甀甂甃畽疐瘖瘈瘌瘕瘑瘊瘔皸瞁睼瞅瞂睮瞀睯睾瞃碲碪碴碭碨硾碫碞碥碠碬碢碤禘禊禋禖禕禔禓" - ], - [ - "e340", - "禗禈禒禐稫穊稰稯稨稦窨窫窬竮箈箜箊箑箐箖箍箌箛箎箅箘劄箙箤箂粻粿粼粺綧綷緂綣綪緁緀緅綝緎緄緆緋緌綯綹綖綼綟綦綮綩綡緉罳翢翣翥翞" - ], - [ - "e3a1", - "耤聝聜膉膆膃膇膍膌膋舕蒗蒤蒡蒟蒺蓎蓂蒬蒮蒫蒹蒴蓁蓍蒪蒚蒱蓐蒝蒧蒻蒢蒔蓇蓌蒛蒩蒯蒨蓖蒘蒶蓏蒠蓗蓔蓒蓛蒰蒑虡蜳蜣蜨蝫蝀蜮蜞蜡蜙蜛蝃蜬蝁蜾蝆蜠蜲蜪蜭蜼蜒蜺蜱蜵蝂蜦蜧蜸蜤蜚蜰蜑裷裧裱裲裺裾裮裼裶裻" - ], - [ - "e440", - "裰裬裫覝覡覟覞觩觫觨誫誙誋誒誏誖谽豨豩賕賏賗趖踉踂跿踍跽踊踃踇踆踅跾踀踄輐輑輎輍鄣鄜鄠鄢鄟鄝鄚鄤鄡鄛酺酲酹酳銥銤鉶銛鉺銠銔銪銍" - ], - [ - "e4a1", - "銦銚銫鉹銗鉿銣鋮銎銂銕銢鉽銈銡銊銆銌銙銧鉾銇銩銝銋鈭隞隡雿靘靽靺靾鞃鞀鞂靻鞄鞁靿韎韍頖颭颮餂餀餇馝馜駃馹馻馺駂馽駇骱髣髧鬾鬿魠魡魟鳱鳲鳵麧僿儃儰僸儆儇僶僾儋儌僽儊劋劌勱勯噈噂噌嘵噁噊噉噆噘" - ], - [ - "e540", - "噚噀嘳嘽嘬嘾嘸嘪嘺圚墫墝墱墠墣墯墬墥墡壿嫿嫴嫽嫷嫶嬃嫸嬂嫹嬁嬇嬅嬏屧嶙嶗嶟嶒嶢嶓嶕嶠嶜嶡嶚嶞幩幝幠幜緳廛廞廡彉徲憋憃慹憱憰憢憉" - ], - [ - "e5a1", - "憛憓憯憭憟憒憪憡憍慦憳戭摮摰撖撠撅撗撜撏撋撊撌撣撟摨撱撘敶敺敹敻斲斳暵暰暩暲暷暪暯樀樆樗槥槸樕槱槤樠槿槬槢樛樝槾樧槲槮樔槷槧橀樈槦槻樍槼槫樉樄樘樥樏槶樦樇槴樖歑殥殣殢殦氁氀毿氂潁漦潾澇濆澒" - ], - [ - "e640", - "澍澉澌潢潏澅潚澖潶潬澂潕潲潒潐潗澔澓潝漀潡潫潽潧澐潓澋潩潿澕潣潷潪潻熲熯熛熰熠熚熩熵熝熥熞熤熡熪熜熧熳犘犚獘獒獞獟獠獝獛獡獚獙" - ], - [ - "e6a1", - "獢璇璉璊璆璁瑽璅璈瑼瑹甈甇畾瘥瘞瘙瘝瘜瘣瘚瘨瘛皜皝皞皛瞍瞏瞉瞈磍碻磏磌磑磎磔磈磃磄磉禚禡禠禜禢禛歶稹窲窴窳箷篋箾箬篎箯箹篊箵糅糈糌糋緷緛緪緧緗緡縃緺緦緶緱緰緮緟罶羬羰羭翭翫翪翬翦翨聤聧膣膟" - ], - [ - "e740", - "膞膕膢膙膗舖艏艓艒艐艎艑蔤蔻蔏蔀蔩蔎蔉蔍蔟蔊蔧蔜蓻蔫蓺蔈蔌蓴蔪蓲蔕蓷蓫蓳蓼蔒蓪蓩蔖蓾蔨蔝蔮蔂蓽蔞蓶蔱蔦蓧蓨蓰蓯蓹蔘蔠蔰蔋蔙蔯虢" - ], - [ - "e7a1", - "蝖蝣蝤蝷蟡蝳蝘蝔蝛蝒蝡蝚蝑蝞蝭蝪蝐蝎蝟蝝蝯蝬蝺蝮蝜蝥蝏蝻蝵蝢蝧蝩衚褅褌褔褋褗褘褙褆褖褑褎褉覢覤覣觭觰觬諏諆誸諓諑諔諕誻諗誾諀諅諘諃誺誽諙谾豍貏賥賟賙賨賚賝賧趠趜趡趛踠踣踥踤踮踕踛踖踑踙踦踧" - ], - [ - "e840", - "踔踒踘踓踜踗踚輬輤輘輚輠輣輖輗遳遰遯遧遫鄯鄫鄩鄪鄲鄦鄮醅醆醊醁醂醄醀鋐鋃鋄鋀鋙銶鋏鋱鋟鋘鋩鋗鋝鋌鋯鋂鋨鋊鋈鋎鋦鋍鋕鋉鋠鋞鋧鋑鋓" - ], - [ - "e8a1", - "銵鋡鋆銴镼閬閫閮閰隤隢雓霅霈霂靚鞊鞎鞈韐韏頞頝頦頩頨頠頛頧颲餈飺餑餔餖餗餕駜駍駏駓駔駎駉駖駘駋駗駌骳髬髫髳髲髱魆魃魧魴魱魦魶魵魰魨魤魬鳼鳺鳽鳿鳷鴇鴀鳹鳻鴈鴅鴄麃黓鼏鼐儜儓儗儚儑凞匴叡噰噠噮" - ], - [ - "e940", - "噳噦噣噭噲噞噷圜圛壈墽壉墿墺壂墼壆嬗嬙嬛嬡嬔嬓嬐嬖嬨嬚嬠嬞寯嶬嶱嶩嶧嶵嶰嶮嶪嶨嶲嶭嶯嶴幧幨幦幯廩廧廦廨廥彋徼憝憨憖懅憴懆懁懌憺" - ], - [ - "e9a1", - "憿憸憌擗擖擐擏擉撽撉擃擛擳擙攳敿敼斢曈暾曀曊曋曏暽暻暺曌朣樴橦橉橧樲橨樾橝橭橶橛橑樨橚樻樿橁橪橤橐橏橔橯橩橠樼橞橖橕橍橎橆歕歔歖殧殪殫毈毇氄氃氆澭濋澣濇澼濎濈潞濄澽澞濊澨瀄澥澮澺澬澪濏澿澸" - ], - [ - "ea40", - "澢濉澫濍澯澲澰燅燂熿熸燖燀燁燋燔燊燇燏熽燘熼燆燚燛犝犞獩獦獧獬獥獫獪瑿璚璠璔璒璕璡甋疀瘯瘭瘱瘽瘳瘼瘵瘲瘰皻盦瞚瞝瞡瞜瞛瞢瞣瞕瞙" - ], - [ - "eaa1", - "瞗磝磩磥磪磞磣磛磡磢磭磟磠禤穄穈穇窶窸窵窱窷篞篣篧篝篕篥篚篨篹篔篪篢篜篫篘篟糒糔糗糐糑縒縡縗縌縟縠縓縎縜縕縚縢縋縏縖縍縔縥縤罃罻罼罺羱翯耪耩聬膱膦膮膹膵膫膰膬膴膲膷膧臲艕艖艗蕖蕅蕫蕍蕓蕡蕘" - ], - [ - "eb40", - "蕀蕆蕤蕁蕢蕄蕑蕇蕣蔾蕛蕱蕎蕮蕵蕕蕧蕠薌蕦蕝蕔蕥蕬虣虥虤螛螏螗螓螒螈螁螖螘蝹螇螣螅螐螑螝螄螔螜螚螉褞褦褰褭褮褧褱褢褩褣褯褬褟觱諠" - ], - [ - "eba1", - "諢諲諴諵諝謔諤諟諰諈諞諡諨諿諯諻貑貒貐賵賮賱賰賳赬赮趥趧踳踾踸蹀蹅踶踼踽蹁踰踿躽輶輮輵輲輹輷輴遶遹遻邆郺鄳鄵鄶醓醐醑醍醏錧錞錈錟錆錏鍺錸錼錛錣錒錁鍆錭錎錍鋋錝鋺錥錓鋹鋷錴錂錤鋿錩錹錵錪錔錌" - ], - [ - "ec40", - "錋鋾錉錀鋻錖閼闍閾閹閺閶閿閵閽隩雔霋霒霐鞙鞗鞔韰韸頵頯頲餤餟餧餩馞駮駬駥駤駰駣駪駩駧骹骿骴骻髶髺髹髷鬳鮀鮅鮇魼魾魻鮂鮓鮒鮐魺鮕" - ], - [ - "eca1", - "魽鮈鴥鴗鴠鴞鴔鴩鴝鴘鴢鴐鴙鴟麈麆麇麮麭黕黖黺鼒鼽儦儥儢儤儠儩勴嚓嚌嚍嚆嚄嚃噾嚂噿嚁壖壔壏壒嬭嬥嬲嬣嬬嬧嬦嬯嬮孻寱寲嶷幬幪徾徻懃憵憼懧懠懥懤懨懞擯擩擣擫擤擨斁斀斶旚曒檍檖檁檥檉檟檛檡檞檇檓檎" - ], - [ - "ed40", - "檕檃檨檤檑橿檦檚檅檌檒歛殭氉濌澩濴濔濣濜濭濧濦濞濲濝濢濨燡燱燨燲燤燰燢獳獮獯璗璲璫璐璪璭璱璥璯甐甑甒甏疄癃癈癉癇皤盩瞵瞫瞲瞷瞶" - ], - [ - "eda1", - "瞴瞱瞨矰磳磽礂磻磼磲礅磹磾礄禫禨穜穛穖穘穔穚窾竀竁簅簏篲簀篿篻簎篴簋篳簂簉簃簁篸篽簆篰篱簐簊糨縭縼繂縳顈縸縪繉繀繇縩繌縰縻縶繄縺罅罿罾罽翴翲耬膻臄臌臊臅臇膼臩艛艚艜薃薀薏薧薕薠薋薣蕻薤薚薞" - ], - [ - "ee40", - "蕷蕼薉薡蕺蕸蕗薎薖薆薍薙薝薁薢薂薈薅蕹蕶薘薐薟虨螾螪螭蟅螰螬螹螵螼螮蟉蟃蟂蟌螷螯蟄蟊螴螶螿螸螽蟞螲褵褳褼褾襁襒褷襂覭覯覮觲觳謞" - ], - [ - "eea1", - "謘謖謑謅謋謢謏謒謕謇謍謈謆謜謓謚豏豰豲豱豯貕貔賹赯蹎蹍蹓蹐蹌蹇轃轀邅遾鄸醚醢醛醙醟醡醝醠鎡鎃鎯鍤鍖鍇鍼鍘鍜鍶鍉鍐鍑鍠鍭鎏鍌鍪鍹鍗鍕鍒鍏鍱鍷鍻鍡鍞鍣鍧鎀鍎鍙闇闀闉闃闅閷隮隰隬霠霟霘霝霙鞚鞡鞜" - ], - [ - "ef40", - "鞞鞝韕韔韱顁顄顊顉顅顃餥餫餬餪餳餲餯餭餱餰馘馣馡騂駺駴駷駹駸駶駻駽駾駼騃骾髾髽鬁髼魈鮚鮨鮞鮛鮦鮡鮥鮤鮆鮢鮠鮯鴳鵁鵧鴶鴮鴯鴱鴸鴰" - ], - [ - "efa1", - "鵅鵂鵃鴾鴷鵀鴽翵鴭麊麉麍麰黈黚黻黿鼤鼣鼢齔龠儱儭儮嚘嚜嚗嚚嚝嚙奰嬼屩屪巀幭幮懘懟懭懮懱懪懰懫懖懩擿攄擽擸攁攃擼斔旛曚曛曘櫅檹檽櫡櫆檺檶檷櫇檴檭歞毉氋瀇瀌瀍瀁瀅瀔瀎濿瀀濻瀦濼濷瀊爁燿燹爃燽獶" - ], - [ - "f040", - "璸瓀璵瓁璾璶璻瓂甔甓癜癤癙癐癓癗癚皦皽盬矂瞺磿礌礓礔礉礐礒礑禭禬穟簜簩簙簠簟簭簝簦簨簢簥簰繜繐繖繣繘繢繟繑繠繗繓羵羳翷翸聵臑臒" - ], - [ - "f0a1", - "臐艟艞薴藆藀藃藂薳薵薽藇藄薿藋藎藈藅薱薶藒蘤薸薷薾虩蟧蟦蟢蟛蟫蟪蟥蟟蟳蟤蟔蟜蟓蟭蟘蟣螤蟗蟙蠁蟴蟨蟝襓襋襏襌襆襐襑襉謪謧謣謳謰謵譇謯謼謾謱謥謷謦謶謮謤謻謽謺豂豵貙貘貗賾贄贂贀蹜蹢蹠蹗蹖蹞蹥蹧" - ], - [ - "f140", - "蹛蹚蹡蹝蹩蹔轆轇轈轋鄨鄺鄻鄾醨醥醧醯醪鎵鎌鎒鎷鎛鎝鎉鎧鎎鎪鎞鎦鎕鎈鎙鎟鎍鎱鎑鎲鎤鎨鎴鎣鎥闒闓闑隳雗雚巂雟雘雝霣霢霥鞬鞮鞨鞫鞤鞪" - ], - [ - "f1a1", - "鞢鞥韗韙韖韘韺顐顑顒颸饁餼餺騏騋騉騍騄騑騊騅騇騆髀髜鬈鬄鬅鬩鬵魊魌魋鯇鯆鯃鮿鯁鮵鮸鯓鮶鯄鮹鮽鵜鵓鵏鵊鵛鵋鵙鵖鵌鵗鵒鵔鵟鵘鵚麎麌黟鼁鼀鼖鼥鼫鼪鼩鼨齌齕儴儵劖勷厴嚫嚭嚦嚧嚪嚬壚壝壛夒嬽嬾嬿巃幰" - ], - [ - "f240", - "徿懻攇攐攍攉攌攎斄旞旝曞櫧櫠櫌櫑櫙櫋櫟櫜櫐櫫櫏櫍櫞歠殰氌瀙瀧瀠瀖瀫瀡瀢瀣瀩瀗瀤瀜瀪爌爊爇爂爅犥犦犤犣犡瓋瓅璷瓃甖癠矉矊矄矱礝礛" - ], - [ - "f2a1", - "礡礜礗礞禰穧穨簳簼簹簬簻糬糪繶繵繸繰繷繯繺繲繴繨罋罊羃羆羷翽翾聸臗臕艤艡艣藫藱藭藙藡藨藚藗藬藲藸藘藟藣藜藑藰藦藯藞藢蠀蟺蠃蟶蟷蠉蠌蠋蠆蟼蠈蟿蠊蠂襢襚襛襗襡襜襘襝襙覈覷覶觶譐譈譊譀譓譖譔譋譕" - ], - [ - "f340", - "譑譂譒譗豃豷豶貚贆贇贉趬趪趭趫蹭蹸蹳蹪蹯蹻軂轒轑轏轐轓辴酀鄿醰醭鏞鏇鏏鏂鏚鏐鏹鏬鏌鏙鎩鏦鏊鏔鏮鏣鏕鏄鏎鏀鏒鏧镽闚闛雡霩霫霬霨霦" - ], - [ - "f3a1", - "鞳鞷鞶韝韞韟顜顙顝顗颿颽颻颾饈饇饃馦馧騚騕騥騝騤騛騢騠騧騣騞騜騔髂鬋鬊鬎鬌鬷鯪鯫鯠鯞鯤鯦鯢鯰鯔鯗鯬鯜鯙鯥鯕鯡鯚鵷鶁鶊鶄鶈鵱鶀鵸鶆鶋鶌鵽鵫鵴鵵鵰鵩鶅鵳鵻鶂鵯鵹鵿鶇鵨麔麑黀黼鼭齀齁齍齖齗齘匷嚲" - ], - [ - "f440", - "嚵嚳壣孅巆巇廮廯忀忁懹攗攖攕攓旟曨曣曤櫳櫰櫪櫨櫹櫱櫮櫯瀼瀵瀯瀷瀴瀱灂瀸瀿瀺瀹灀瀻瀳灁爓爔犨獽獼璺皫皪皾盭矌矎矏矍矲礥礣礧礨礤礩" - ], - [ - "f4a1", - "禲穮穬穭竷籉籈籊籇籅糮繻繾纁纀羺翿聹臛臙舋艨艩蘢藿蘁藾蘛蘀藶蘄蘉蘅蘌藽蠙蠐蠑蠗蠓蠖襣襦覹觷譠譪譝譨譣譥譧譭趮躆躈躄轙轖轗轕轘轚邍酃酁醷醵醲醳鐋鐓鏻鐠鐏鐔鏾鐕鐐鐨鐙鐍鏵鐀鏷鐇鐎鐖鐒鏺鐉鏸鐊鏿" - ], - [ - "f540", - "鏼鐌鏶鐑鐆闞闠闟霮霯鞹鞻韽韾顠顢顣顟飁飂饐饎饙饌饋饓騲騴騱騬騪騶騩騮騸騭髇髊髆鬐鬒鬑鰋鰈鯷鰅鰒鯸鱀鰇鰎鰆鰗鰔鰉鶟鶙鶤鶝鶒鶘鶐鶛" - ], - [ - "f5a1", - "鶠鶔鶜鶪鶗鶡鶚鶢鶨鶞鶣鶿鶩鶖鶦鶧麙麛麚黥黤黧黦鼰鼮齛齠齞齝齙龑儺儹劘劗囃嚽嚾孈孇巋巏廱懽攛欂櫼欃櫸欀灃灄灊灈灉灅灆爝爚爙獾甗癪矐礭礱礯籔籓糲纊纇纈纋纆纍罍羻耰臝蘘蘪蘦蘟蘣蘜蘙蘧蘮蘡蘠蘩蘞蘥" - ], - [ - "f640", - "蠩蠝蠛蠠蠤蠜蠫衊襭襩襮襫觺譹譸譅譺譻贐贔趯躎躌轞轛轝酆酄酅醹鐿鐻鐶鐩鐽鐼鐰鐹鐪鐷鐬鑀鐱闥闤闣霵霺鞿韡顤飉飆飀饘饖騹騽驆驄驂驁騺" - ], - [ - "f6a1", - "騿髍鬕鬗鬘鬖鬺魒鰫鰝鰜鰬鰣鰨鰩鰤鰡鶷鶶鶼鷁鷇鷊鷏鶾鷅鷃鶻鶵鷎鶹鶺鶬鷈鶱鶭鷌鶳鷍鶲鹺麜黫黮黭鼛鼘鼚鼱齎齥齤龒亹囆囅囋奱孋孌巕巑廲攡攠攦攢欋欈欉氍灕灖灗灒爞爟犩獿瓘瓕瓙瓗癭皭礵禴穰穱籗籜籙籛籚" - ], - [ - "f740", - "糴糱纑罏羇臞艫蘴蘵蘳蘬蘲蘶蠬蠨蠦蠪蠥襱覿覾觻譾讄讂讆讅譿贕躕躔躚躒躐躖躗轠轢酇鑌鑐鑊鑋鑏鑇鑅鑈鑉鑆霿韣顪顩飋饔饛驎驓驔驌驏驈驊" - ], - [ - "f7a1", - "驉驒驐髐鬙鬫鬻魖魕鱆鱈鰿鱄鰹鰳鱁鰼鰷鰴鰲鰽鰶鷛鷒鷞鷚鷋鷐鷜鷑鷟鷩鷙鷘鷖鷵鷕鷝麶黰鼵鼳鼲齂齫龕龢儽劙壨壧奲孍巘蠯彏戁戃戄攩攥斖曫欑欒欏毊灛灚爢玂玁玃癰矔籧籦纕艬蘺虀蘹蘼蘱蘻蘾蠰蠲蠮蠳襶襴襳觾" - ], - [ - "f840", - "讌讎讋讈豅贙躘轤轣醼鑢鑕鑝鑗鑞韄韅頀驖驙鬞鬟鬠鱒鱘鱐鱊鱍鱋鱕鱙鱌鱎鷻鷷鷯鷣鷫鷸鷤鷶鷡鷮鷦鷲鷰鷢鷬鷴鷳鷨鷭黂黐黲黳鼆鼜鼸鼷鼶齃齏" - ], - [ - "f8a1", - "齱齰齮齯囓囍孎屭攭曭曮欓灟灡灝灠爣瓛瓥矕礸禷禶籪纗羉艭虃蠸蠷蠵衋讔讕躞躟躠躝醾醽釂鑫鑨鑩雥靆靃靇韇韥驞髕魙鱣鱧鱦鱢鱞鱠鸂鷾鸇鸃鸆鸅鸀鸁鸉鷿鷽鸄麠鼞齆齴齵齶囔攮斸欘欙欗欚灢爦犪矘矙礹籩籫糶纚" - ], - [ - "f940", - "纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊" - ], - [ - "f9a1", - "龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯▓" - ] -]; - -var require$$7 = [ - [ - "8740", - "䏰䰲䘃䖦䕸𧉧䵷䖳𧲱䳢𧳅㮕䜶䝄䱇䱀𤊿𣘗𧍒𦺋𧃒䱗𪍑䝏䗚䲅𧱬䴇䪤䚡𦬣爥𥩔𡩣𣸆𣽡晍囻" - ], - [ - "8767", - "綕夝𨮹㷴霴𧯯寛𡵞媤㘥𩺰嫑宷峼杮薓𩥅瑡璝㡵𡵓𣚞𦀡㻬" - ], - [ - "87a1", - "𥣞㫵竼龗𤅡𨤍𣇪𠪊𣉞䌊蒄龖鐯䤰蘓墖靊鈘秐稲晠権袝瑌篅枂稬剏遆㓦珄𥶹瓆鿇垳䤯呌䄱𣚎堘穲𧭥讏䚮𦺈䆁𥶙箮𢒼鿈𢓁𢓉𢓌鿉蔄𣖻䂴鿊䓡𪷿拁灮鿋" - ], - [ - "8840", - "㇀", - 4, - "𠄌㇅𠃑𠃍㇆㇇𠃋𡿨㇈𠃊㇉㇊㇋㇌𠄎㇍㇎ĀÁǍÀĒÉĚÈŌÓǑÒ࿿Ê̄Ế࿿Ê̌ỀÊāáǎàɑēéěèīíǐìōóǒòūúǔùǖǘǚ" - ], - [ - "88a1", - "ǜü࿿ê̄ế࿿ê̌ềêɡ⏚⏛" - ], - [ - "8940", - "𪎩𡅅" - ], - [ - "8943", - "攊" - ], - [ - "8946", - "丽滝鵎釟" - ], - [ - "894c", - "𧜵撑会伨侨兖兴农凤务动医华发变团声处备夲头学实実岚庆总斉柾栄桥济炼电纤纬纺织经统缆缷艺苏药视设询车轧轮" - ], - [ - "89a1", - "琑糼緍楆竉刧" - ], - [ - "89ab", - "醌碸酞肼" - ], - [ - "89b0", - "贋胶𠧧" - ], - [ - "89b5", - "肟黇䳍鷉鸌䰾𩷶𧀎鸊𪄳㗁" - ], - [ - "89c1", - "溚舾甙" - ], - [ - "89c5", - "䤑马骏龙禇𨑬𡷊𠗐𢫦两亁亀亇亿仫伷㑌侽㹈倃傈㑽㒓㒥円夅凛凼刅争剹劐匧㗇厩㕑厰㕓参吣㕭㕲㚁咓咣咴咹哐哯唘唣唨㖘唿㖥㖿嗗㗅" - ], - [ - "8a40", - "𧶄唥" - ], - [ - "8a43", - "𠱂𠴕𥄫喐𢳆㧬𠍁蹆𤶸𩓥䁓𨂾睺𢰸㨴䟕𨅝𦧲𤷪擝𠵼𠾴𠳕𡃴撍蹾𠺖𠰋𠽤𢲩𨉖𤓓" - ], - [ - "8a64", - "𠵆𩩍𨃩䟴𤺧𢳂骲㩧𩗴㿭㔆𥋇𩟔𧣈𢵄鵮頕" - ], - [ - "8a76", - "䏙𦂥撴哣𢵌𢯊𡁷㧻𡁯" - ], - [ - "8aa1", - "𦛚𦜖𧦠擪𥁒𠱃蹨𢆡𨭌𠜱" - ], - [ - "8aac", - "䠋𠆩㿺塳𢶍" - ], - [ - "8ab2", - "𤗈𠓼𦂗𠽌𠶖啹䂻䎺" - ], - [ - "8abb", - "䪴𢩦𡂝膪飵𠶜捹㧾𢝵跀嚡摼㹃" - ], - [ - "8ac9", - "𪘁𠸉𢫏𢳉" - ], - [ - "8ace", - "𡃈𣧂㦒㨆𨊛㕸𥹉𢃇噒𠼱𢲲𩜠㒼氽𤸻" - ], - [ - "8adf", - "𧕴𢺋𢈈𪙛𨳍𠹺𠰴𦠜羓𡃏𢠃𢤹㗻𥇣𠺌𠾍𠺪㾓𠼰𠵇𡅏𠹌" - ], - [ - "8af6", - "𠺫𠮩𠵈𡃀𡄽㿹𢚖搲𠾭" - ], - [ - "8b40", - "𣏴𧘹𢯎𠵾𠵿𢱑𢱕㨘𠺘𡃇𠼮𪘲𦭐𨳒𨶙𨳊閪哌苄喹" - ], - [ - "8b55", - "𩻃鰦骶𧝞𢷮煀腭胬尜𦕲脴㞗卟𨂽醶𠻺𠸏𠹷𠻻㗝𤷫㘉𠳖嚯𢞵𡃉𠸐𠹸𡁸𡅈𨈇𡑕𠹹𤹐𢶤婔𡀝𡀞𡃵𡃶垜𠸑" - ], - [ - "8ba1", - "𧚔𨋍𠾵𠹻𥅾㜃𠾶𡆀𥋘𪊽𤧚𡠺𤅷𨉼墙剨㘚𥜽箲孨䠀䬬鼧䧧鰟鮍𥭴𣄽嗻㗲嚉丨夂𡯁屮靑𠂆乛亻㔾尣彑忄㣺扌攵歺氵氺灬爫丬犭𤣩罒礻糹罓𦉪㓁" - ], - [ - "8bde", - "𦍋耂肀𦘒𦥑卝衤见𧢲讠贝钅镸长门𨸏韦页风飞饣𩠐鱼鸟黄歯龜丷𠂇阝户钢" - ], - [ - "8c40", - "倻淾𩱳龦㷉袏𤅎灷峵䬠𥇍㕙𥴰愢𨨲辧釶熑朙玺𣊁𪄇㲋𡦀䬐磤琂冮𨜏䀉橣𪊺䈣蘏𠩯稪𩥇𨫪靕灍匤𢁾鏴盙𨧣龧矝亣俰傼丯众龨吴綋墒壐𡶶庒庙忂𢜒斋" - ], - [ - "8ca1", - "𣏹椙橃𣱣泿" - ], - [ - "8ca7", - "爀𤔅玌㻛𤨓嬕璹讃𥲤𥚕窓篬糃繬苸薗龩袐龪躹龫迏蕟駠鈡龬𨶹𡐿䁱䊢娚" - ], - [ - "8cc9", - "顨杫䉶圽" - ], - [ - "8cce", - "藖𤥻芿𧄍䲁𦵴嵻𦬕𦾾龭龮宖龯曧繛湗秊㶈䓃𣉖𢞖䎚䔶" - ], - [ - "8ce6", - "峕𣬚諹屸㴒𣕑嵸龲煗䕘𤃬𡸣䱷㥸㑊𠆤𦱁諌侴𠈹妿腬顖𩣺弻" - ], - [ - "8d40", - "𠮟" - ], - [ - "8d42", - "𢇁𨥭䄂䚻𩁹㼇龳𪆵䃸㟖䛷𦱆䅼𨚲𧏿䕭㣔𥒚䕡䔛䶉䱻䵶䗪㿈𤬏㙡䓞䒽䇭崾嵈嵖㷼㠏嶤嶹㠠㠸幂庽弥徃㤈㤔㤿㥍惗愽峥㦉憷憹懏㦸戬抐拥挘㧸嚱" - ], - [ - "8da1", - "㨃揢揻搇摚㩋擀崕嘡龟㪗斆㪽旿晓㫲暒㬢朖㭂枤栀㭘桊梄㭲㭱㭻椉楃牜楤榟榅㮼槖㯝橥橴橱檂㯬檙㯲檫檵櫔櫶殁毁毪汵沪㳋洂洆洦涁㳯涤涱渕渘温溆𨧀溻滢滚齿滨滩漤漴㵆𣽁澁澾㵪㵵熷岙㶊瀬㶑灐灔灯灿炉𠌥䏁㗱𠻘" - ], - [ - "8e40", - "𣻗垾𦻓焾𥟠㙎榢𨯩孴穉𥣡𩓙穥穽𥦬窻窰竂竃燑𦒍䇊竚竝竪䇯咲𥰁笋筕笩𥌎𥳾箢筯莜𥮴𦱿篐萡箒箸𥴠㶭𥱥蒒篺簆簵𥳁籄粃𤢂粦晽𤕸糉糇糦籴糳糵糎" - ], - [ - "8ea1", - "繧䔝𦹄絝𦻖璍綉綫焵綳緒𤁗𦀩緤㴓緵𡟹緥𨍭縝𦄡𦅚繮纒䌫鑬縧罀罁罇礶𦋐駡羗𦍑羣𡙡𠁨䕜𣝦䔃𨌺翺𦒉者耈耝耨耯𪂇𦳃耻耼聡𢜔䦉𦘦𣷣𦛨朥肧𨩈脇脚墰𢛶汿𦒘𤾸擧𡒊舘𡡞橓𤩥𤪕䑺舩𠬍𦩒𣵾俹𡓽蓢荢𦬊𤦧𣔰𡝳𣷸芪椛芳䇛" - ], - [ - "8f40", - "蕋苐茚𠸖𡞴㛁𣅽𣕚艻苢茘𣺋𦶣𦬅𦮗𣗎㶿茝嗬莅䔋𦶥莬菁菓㑾𦻔橗蕚㒖𦹂𢻯葘𥯤葱㷓䓤檧葊𣲵祘蒨𦮖𦹷𦹃蓞萏莑䒠蒓蓤𥲑䉀𥳀䕃蔴嫲𦺙䔧蕳䔖枿蘖" - ], - [ - "8fa1", - "𨘥𨘻藁𧂈蘂𡖂𧃍䕫䕪蘨㙈𡢢号𧎚虾蝱𪃸蟮𢰧螱蟚蠏噡虬桖䘏衅衆𧗠𣶹𧗤衞袜䙛袴袵揁装睷𧜏覇覊覦覩覧覼𨨥觧𧤤𧪽誜瞓釾誐𧩙竩𧬺𣾏䜓𧬸煼謌謟𥐰𥕥謿譌譍誩𤩺讐讛誯𡛟䘕衏貛𧵔𧶏貫㜥𧵓賖𧶘𧶽贒贃𡤐賛灜贑𤳉㻐起" - ], - [ - "9040", - "趩𨀂𡀔𤦊㭼𨆼𧄌竧躭躶軃鋔輙輭𨍥𨐒辥錃𪊟𠩐辳䤪𨧞𨔽𣶻廸𣉢迹𪀔𨚼𨔁𢌥㦀𦻗逷𨔼𧪾遡𨕬𨘋邨𨜓郄𨛦邮都酧㫰醩釄粬𨤳𡺉鈎沟鉁鉢𥖹銹𨫆𣲛𨬌𥗛" - ], - [ - "90a1", - "𠴱錬鍫𨫡𨯫炏嫃𨫢𨫥䥥鉄𨯬𨰹𨯿鍳鑛躼閅閦鐦閠濶䊹𢙺𨛘𡉼𣸮䧟氜陻隖䅬隣𦻕懚隶磵𨫠隽双䦡𦲸𠉴𦐐𩂯𩃥𤫑𡤕𣌊霱虂霶䨏䔽䖅𤫩灵孁霛靜𩇕靗孊𩇫靟鐥僐𣂷𣂼鞉鞟鞱鞾韀韒韠𥑬韮琜𩐳響韵𩐝𧥺䫑頴頳顋顦㬎𧅵㵑𠘰𤅜" - ], - [ - "9140", - "𥜆飊颷飈飇䫿𦴧𡛓喰飡飦飬鍸餹𤨩䭲𩡗𩤅駵騌騻騐驘𥜥㛄𩂱𩯕髠髢𩬅髴䰎鬔鬭𨘀倴鬴𦦨㣃𣁽魐魀𩴾婅𡡣鮎𤉋鰂鯿鰌𩹨鷔𩾷𪆒𪆫𪃡𪄣𪇟鵾鶃𪄴鸎梈" - ], - [ - "91a1", - "鷄𢅛𪆓𪈠𡤻𪈳鴹𪂹𪊴麐麕麞麢䴴麪麯𤍤黁㭠㧥㴝伲㞾𨰫鼂鼈䮖鐤𦶢鼗鼖鼹嚟嚊齅馸𩂋韲葿齢齩竜龎爖䮾𤥵𤦻煷𤧸𤍈𤩑玞𨯚𡣺禟𨥾𨸶鍩鏳𨩄鋬鎁鏋𨥬𤒹爗㻫睲穃烐𤑳𤏸煾𡟯炣𡢾𣖙㻇𡢅𥐯𡟸㜢𡛻𡠹㛡𡝴𡣑𥽋㜣𡛀坛𤨥𡏾𡊨" - ], - [ - "9240", - "𡏆𡒶蔃𣚦蔃葕𤦔𧅥𣸱𥕜𣻻𧁒䓴𣛮𩦝𦼦柹㜳㰕㷧塬𡤢栐䁗𣜿𤃡𤂋𤄏𦰡哋嚞𦚱嚒𠿟𠮨𠸍鏆𨬓鎜仸儫㠙𤐶亼𠑥𠍿佋侊𥙑婨𠆫𠏋㦙𠌊𠐔㐵伩𠋀𨺳𠉵諚𠈌亘" - ], - [ - "92a1", - "働儍侢伃𤨎𣺊佂倮偬傁俌俥偘僼兙兛兝兞湶𣖕𣸹𣺿浲𡢄𣺉冨凃𠗠䓝𠒣𠒒𠒑赺𨪜𠜎剙劤𠡳勡鍮䙺熌𤎌𠰠𤦬𡃤槑𠸝瑹㻞璙琔瑖玘䮎𤪼𤂍叐㖄爏𤃉喴𠍅响𠯆圝鉝雴鍦埝垍坿㘾壋媙𨩆𡛺𡝯𡜐娬妸銏婾嫏娒𥥆𡧳𡡡𤊕㛵洅瑃娡𥺃" - ], - [ - "9340", - "媁𨯗𠐓鏠璌𡌃焅䥲鐈𨧻鎽㞠尞岞幞幈𡦖𡥼𣫮廍孏𡤃𡤄㜁𡢠㛝𡛾㛓脪𨩇𡶺𣑲𨦨弌弎𡤧𡞫婫𡜻孄蘔𧗽衠恾𢡠𢘫忛㺸𢖯𢖾𩂈𦽳懀𠀾𠁆𢘛憙憘恵𢲛𢴇𤛔𩅍" - ], - [ - "93a1", - "摱𤙥𢭪㨩𢬢𣑐𩣪𢹸挷𪑛撶挱揑𤧣𢵧护𢲡搻敫楲㯴𣂎𣊭𤦉𣊫唍𣋠𡣙𩐿曎𣊉𣆳㫠䆐𥖄𨬢𥖏𡛼𥕛𥐥磮𣄃𡠪𣈴㑤𣈏𣆂𤋉暎𦴤晫䮓昰𧡰𡷫晣𣋒𣋡昞𥡲㣑𣠺𣞼㮙𣞢𣏾瓐㮖枏𤘪梶栞㯄檾㡣𣟕𤒇樳橒櫉欅𡤒攑梘橌㯗橺歗𣿀𣲚鎠鋲𨯪𨫋" - ], - [ - "9440", - "銉𨀞𨧜鑧涥漋𤧬浧𣽿㶏渄𤀼娽渊塇洤硂焻𤌚𤉶烱牐犇犔𤞏𤜥兹𤪤𠗫瑺𣻸𣙟𤩊𤤗𥿡㼆㺱𤫟𨰣𣼵悧㻳瓌琼鎇琷䒟𦷪䕑疃㽣𤳙𤴆㽘畕癳𪗆㬙瑨𨫌𤦫𤦎㫻" - ], - [ - "94a1", - "㷍𤩎㻿𤧅𤣳釺圲鍂𨫣𡡤僟𥈡𥇧睸𣈲眎眏睻𤚗𣞁㩞𤣰琸璛㺿𤪺𤫇䃈𤪖𦆮錇𥖁砞碍碈磒珐祙𧝁𥛣䄎禛蒖禥樭𣻺稺秴䅮𡛦䄲鈵秱𠵌𤦌𠊙𣶺𡝮㖗啫㕰㚪𠇔𠰍竢婙𢛵𥪯𥪜娍𠉛磰娪𥯆竾䇹籝籭䈑𥮳𥺼𥺦糍𤧹𡞰粎籼粮檲緜縇緓罎𦉡" - ], - [ - "9540", - "𦅜𧭈綗𥺂䉪𦭵𠤖柖𠁎𣗏埄𦐒𦏸𤥢翝笧𠠬𥫩𥵃笌𥸎駦虅驣樜𣐿㧢𤧷𦖭騟𦖠蒀𧄧𦳑䓪脷䐂胆脉腂𦞴飃𦩂艢艥𦩑葓𦶧蘐𧈛媆䅿𡡀嬫𡢡嫤𡣘蚠蜨𣶏蠭𧐢娂" - ], - [ - "95a1", - "衮佅袇袿裦襥襍𥚃襔𧞅𧞄𨯵𨯙𨮜𨧹㺭蒣䛵䛏㟲訽訜𩑈彍鈫𤊄旔焩烄𡡅鵭貟賩𧷜妚矃姰䍮㛔踪躧𤰉輰轊䋴汘澻𢌡䢛潹溋𡟚鯩㚵𤤯邻邗啱䤆醻鐄𨩋䁢𨫼鐧𨰝𨰻蓥訫閙閧閗閖𨴴瑅㻂𤣿𤩂𤏪㻧𣈥随𨻧𨹦𨹥㻌𤧭𤩸𣿮琒瑫㻼靁𩂰" - ], - [ - "9640", - "桇䨝𩂓𥟟靝鍨𨦉𨰦𨬯𦎾銺嬑譩䤼珹𤈛鞛靱餸𠼦巁𨯅𤪲頟𩓚鋶𩗗釥䓀𨭐𤩧𨭤飜𨩅㼀鈪䤥萔餻饍𧬆㷽馛䭯馪驜𨭥𥣈檏騡嫾騯𩣱䮐𩥈馼䮽䮗鍽塲𡌂堢𤦸" - ], - [ - "96a1", - "𡓨硄𢜟𣶸棅㵽鑘㤧慐𢞁𢥫愇鱏鱓鱻鰵鰐魿鯏𩸭鮟𪇵𪃾鴡䲮𤄄鸘䲰鴌𪆴𪃭𪃳𩤯鶥蒽𦸒𦿟𦮂藼䔳𦶤𦺄𦷰萠藮𦸀𣟗𦁤秢𣖜𣙀䤭𤧞㵢鏛銾鍈𠊿碹鉷鑍俤㑀遤𥕝砽硔碶硋𡝗𣇉𤥁㚚佲濚濙瀞瀞吔𤆵垻壳垊鴖埗焴㒯𤆬燫𦱀𤾗嬨𡞵𨩉" - ], - [ - "9740", - "愌嫎娋䊼𤒈㜬䭻𨧼鎻鎸𡣖𠼝葲𦳀𡐓𤋺𢰦𤏁妔𣶷𦝁綨𦅛𦂤𤦹𤦋𨧺鋥珢㻩璴𨭣𡢟㻡𤪳櫘珳珻㻖𤨾𤪔𡟙𤩦𠎧𡐤𤧥瑈𤤖炥𤥶銄珦鍟𠓾錱𨫎𨨖鎆𨯧𥗕䤵𨪂煫" - ], - [ - "97a1", - "𤥃𠳿嚤𠘚𠯫𠲸唂秄𡟺緾𡛂𤩐𡡒䔮鐁㜊𨫀𤦭妰𡢿𡢃𧒄媡㛢𣵛㚰鉟婹𨪁𡡢鍴㳍𠪴䪖㦊僴㵩㵌𡎜煵䋻𨈘渏𩃤䓫浗𧹏灧沯㳖𣿭𣸭渂漌㵯𠏵畑㚼㓈䚀㻚䡱姄鉮䤾轁𨰜𦯀堒埈㛖𡑒烾𤍢𤩱𢿣𡊰𢎽梹楧𡎘𣓥𧯴𣛟𨪃𣟖𣏺𤲟樚𣚭𦲷萾䓟䓎" - ], - [ - "9840", - "𦴦𦵑𦲂𦿞漗𧄉茽𡜺菭𦲀𧁓𡟛妉媂𡞳婡婱𡤅𤇼㜭姯𡜼㛇熎鎐暚𤊥婮娫𤊓樫𣻹𧜶𤑛𤋊焝𤉙𨧡侰𦴨峂𤓎𧹍𤎽樌𤉖𡌄炦焳𤏩㶥泟勇𤩏繥姫崯㷳彜𤩝𡟟綤萦" - ], - [ - "98a1", - "咅𣫺𣌀𠈔坾𠣕𠘙㿥𡾞𪊶瀃𩅛嵰玏糓𨩙𩐠俈翧狍猐𧫴猸猹𥛶獁獈㺩𧬘遬燵𤣲珡臶㻊県㻑沢国琙琞琟㻢㻰㻴㻺瓓㼎㽓畂畭畲疍㽼痈痜㿀癍㿗癴㿜発𤽜熈嘣覀塩䀝睃䀹条䁅㗛瞘䁪䁯属瞾矋売砘点砜䂨砹硇硑硦葈𥔵礳栃礲䄃" - ], - [ - "9940", - "䄉禑禙辻稆込䅧窑䆲窼艹䇄竏竛䇏両筢筬筻簒簛䉠䉺类粜䊌粸䊔糭输烀𠳏総緔緐緽羮羴犟䎗耠耥笹耮耱联㷌垴炠肷胩䏭脌猪脎脒畠脔䐁㬹腖腙腚" - ], - [ - "99a1", - "䐓堺腼膄䐥膓䐭膥埯臁臤艔䒏芦艶苊苘苿䒰荗险榊萅烵葤惣蒈䔄蒾蓡蓸蔐蔸蕒䔻蕯蕰藠䕷虲蚒蚲蛯际螋䘆䘗袮裿褤襇覑𧥧訩訸誔誴豑賔賲贜䞘塟跃䟭仮踺嗘坔蹱嗵躰䠷軎転軤軭軲辷迁迊迌逳駄䢭飠鈓䤞鈨鉘鉫銱銮銿" - ], - [ - "9a40", - "鋣鋫鋳鋴鋽鍃鎄鎭䥅䥑麿鐗匁鐝鐭鐾䥪鑔鑹锭関䦧间阳䧥枠䨤靀䨵鞲韂噔䫤惨颹䬙飱塄餎餙冴餜餷饂饝饢䭰駅䮝騼鬏窃魩鮁鯝鯱鯴䱭鰠㝯𡯂鵉鰺" - ], - [ - "9aa1", - "黾噐鶓鶽鷀鷼银辶鹻麬麱麽黆铜黢黱黸竈齄𠂔𠊷𠎠椚铃妬𠓗塀铁㞹𠗕𠘕𠙶𡚺块煳𠫂𠫍𠮿呪吆𠯋咞𠯻𠰻𠱓𠱥𠱼惧𠲍噺𠲵𠳝𠳭𠵯𠶲𠷈楕鰯螥𠸄𠸎𠻗𠾐𠼭𠹳尠𠾼帋𡁜𡁏𡁶朞𡁻𡂈𡂖㙇𡂿𡃓𡄯𡄻卤蒭𡋣𡍵𡌶讁𡕷𡘙𡟃𡟇乸炻𡠭𡥪" - ], - [ - "9b40", - "𡨭𡩅𡰪𡱰𡲬𡻈拃𡻕𡼕熘桕𢁅槩㛈𢉼𢏗𢏺𢜪𢡱𢥏苽𢥧𢦓𢫕覥𢫨辠𢬎鞸𢬿顇骽𢱌" - ], - [ - "9b62", - "𢲈𢲷𥯨𢴈𢴒𢶷𢶕𢹂𢽴𢿌𣀳𣁦𣌟𣏞徱晈暿𧩹𣕧𣗳爁𤦺矗𣘚𣜖纇𠍆墵朎" - ], - [ - "9ba1", - "椘𣪧𧙗𥿢𣸑𣺹𧗾𢂚䣐䪸𤄙𨪚𤋮𤌍𤀻𤌴𤎖𤩅𠗊凒𠘑妟𡺨㮾𣳿𤐄𤓖垈𤙴㦛𤜯𨗨𩧉㝢𢇃譞𨭎駖𤠒𤣻𤨕爉𤫀𠱸奥𤺥𤾆𠝹軚𥀬劏圿煱𥊙𥐙𣽊𤪧喼𥑆𥑮𦭒釔㑳𥔿𧘲𥕞䜘𥕢𥕦𥟇𤤿𥡝偦㓻𣏌惞𥤃䝼𨥈𥪮𥮉𥰆𡶐垡煑澶𦄂𧰒遖𦆲𤾚譢𦐂𦑊" - ], - [ - "9c40", - "嵛𦯷輶𦒄𡤜諪𤧶𦒈𣿯𦔒䯀𦖿𦚵𢜛鑥𥟡憕娧晉侻嚹𤔡𦛼乪𤤴陖涏𦲽㘘襷𦞙𦡮𦐑𦡞營𦣇筂𩃀𠨑𦤦鄄𦤹穅鷰𦧺騦𦨭㙟𦑩𠀡禃𦨴𦭛崬𣔙菏𦮝䛐𦲤画补𦶮墶" - ], - [ - "9ca1", - "㜜𢖍𧁋𧇍㱔𧊀𧊅銁𢅺𧊋錰𧋦𤧐氹钟𧑐𠻸蠧裵𢤦𨑳𡞱溸𤨪𡠠㦤㚹尐秣䔿暶𩲭𩢤襃𧟌𧡘囖䃟𡘊㦡𣜯𨃨𡏅熭荦𧧝𩆨婧䲷𧂯𨦫𧧽𧨊𧬋𧵦𤅺筃祾𨀉澵𪋟樃𨌘厢𦸇鎿栶靝𨅯𨀣𦦵𡏭𣈯𨁈嶅𨰰𨂃圕頣𨥉嶫𤦈斾槕叒𤪥𣾁㰑朶𨂐𨃴𨄮𡾡𨅏" - ], - [ - "9d40", - "𨆉𨆯𨈚𨌆𨌯𨎊㗊𨑨𨚪䣺揦𨥖砈鉕𨦸䏲𨧧䏟𨧨𨭆𨯔姸𨰉輋𨿅𩃬筑𩄐𩄼㷷𩅞𤫊运犏嚋𩓧𩗩𩖰𩖸𩜲𩣑𩥉𩥪𩧃𩨨𩬎𩵚𩶛纟𩻸𩼣䲤镇𪊓熢𪋿䶑递𪗋䶜𠲜达嗁" - ], - [ - "9da1", - "辺𢒰边𤪓䔉繿潖檱仪㓤𨬬𧢝㜺躀𡟵𨀤𨭬𨮙𧨾𦚯㷫𧙕𣲷𥘵𥥖亚𥺁𦉘嚿𠹭踎孭𣺈𤲞揞拐𡟶𡡻攰嘭𥱊吚𥌑㷆𩶘䱽嘢嘞罉𥻘奵𣵀蝰东𠿪𠵉𣚺脗鵞贘瘻鱅癎瞹鍅吲腈苷嘥脲萘肽嗪祢噃吖𠺝㗎嘅嗱曱𨋢㘭甴嗰喺咗啲𠱁𠲖廐𥅈𠹶𢱢" - ], - [ - "9e40", - "𠺢麫絚嗞𡁵抝靭咔賍燶酶揼掹揾啩𢭃鱲𢺳冚㓟𠶧冧呍唞唓癦踭𦢊疱肶蠄螆裇膶萜𡃁䓬猄𤜆宐茋𦢓噻𢛴𧴯𤆣𧵳𦻐𧊶酰𡇙鈈𣳼𪚩𠺬𠻹牦𡲢䝎𤿂𧿹𠿫䃺" - ], - [ - "9ea1", - "鱝攟𢶠䣳𤟠𩵼𠿬𠸊恢𧖣𠿭" - ], - [ - "9ead", - "𦁈𡆇熣纎鵐业丄㕷嬍沲卧㚬㧜卽㚥𤘘墚𤭮舭呋垪𥪕𠥹" - ], - [ - "9ec5", - "㩒𢑥獴𩺬䴉鯭𣳾𩼰䱛𤾩𩖞𩿞葜𣶶𧊲𦞳𣜠挮紥𣻷𣸬㨪逈勌㹴㙺䗩𠒎癀嫰𠺶硺𧼮墧䂿噼鮋嵴癔𪐴麅䳡痹㟻愙𣃚𤏲" - ], - [ - "9ef5", - "噝𡊩垧𤥣𩸆刴𧂮㖭汊鵼" - ], - [ - "9f40", - "籖鬹埞𡝬屓擓𩓐𦌵𧅤蚭𠴨𦴢𤫢𠵱" - ], - [ - "9f4f", - "凾𡼏嶎霃𡷑麁遌笟鬂峑箣扨挵髿篏鬪籾鬮籂粆鰕篼鬉鼗鰛𤤾齚啳寃俽麘俲剠㸆勑坧偖妷帒韈鶫轜呩鞴饀鞺匬愰" - ], - [ - "9fa1", - "椬叚鰊鴂䰻陁榀傦畆𡝭駚剳" - ], - [ - "9fae", - "酙隁酜" - ], - [ - "9fb2", - "酑𨺗捿𦴣櫊嘑醎畺抅𠏼獏籰𥰡𣳽" - ], - [ - "9fc1", - "𤤙盖鮝个𠳔莾衂" - ], - [ - "9fc9", - "届槀僭坺刟巵从氱𠇲伹咜哚劚趂㗾弌㗳" - ], - [ - "9fdb", - "歒酼龥鮗頮颴骺麨麄煺笔" - ], - [ - "9fe7", - "毺蠘罸" - ], - [ - "9feb", - "嘠𪙊蹷齓" - ], - [ - "9ff0", - "跔蹏鸜踁抂𨍽踨蹵竓𤩷稾磘泪詧瘇" - ], - [ - "a040", - "𨩚鼦泎蟖痃𪊲硓咢贌狢獱謭猂瓱賫𤪻蘯徺袠䒷" - ], - [ - "a055", - "𡠻𦸅" - ], - [ - "a058", - "詾𢔛" - ], - [ - "a05b", - "惽癧髗鵄鍮鮏蟵" - ], - [ - "a063", - "蠏賷猬霡鮰㗖犲䰇籑饊𦅙慙䰄麖慽" - ], - [ - "a073", - "坟慯抦戹拎㩜懢厪𣏵捤栂㗒" - ], - [ - "a0a1", - "嵗𨯂迚𨸹" - ], - [ - "a0a6", - "僙𡵆礆匲阸𠼻䁥" - ], - [ - "a0ae", - "矾" - ], - [ - "a0b0", - "糂𥼚糚稭聦聣絍甅瓲覔舚朌聢𧒆聛瓰脃眤覉𦟌畓𦻑螩蟎臈螌詉貭譃眫瓸蓚㘵榲趦" - ], - [ - "a0d4", - "覩瑨涹蟁𤀑瓧㷛煶悤憜㳑煢恷" - ], - [ - "a0e2", - "罱𨬭牐惩䭾删㰘𣳇𥻗𧙖𥔱𡥄𡋾𩤃𦷜𧂭峁𦆭𨨏𣙷𠃮𦡆𤼎䕢嬟𦍌齐麦𦉫" - ], - [ - "a3c0", - "␀", - 31, - "␡" - ], - [ - "c6a1", - "①", - 9, - "⑴", - 9, - "ⅰ", - 9, - "丶丿亅亠冂冖冫勹匸卩厶夊宀巛⼳广廴彐彡攴无疒癶辵隶¨ˆヽヾゝゞ〃仝々〆〇ー[]✽ぁ", - 23 - ], - [ - "c740", - "す", - 58, - "ァアィイ" - ], - [ - "c7a1", - "ゥ", - 81, - "А", - 5, - "ЁЖ", - 4 - ], - [ - "c840", - "Л", - 26, - "ёж", - 25, - "⇧↸↹㇏𠃌乚𠂊刂䒑" - ], - [ - "c8a1", - "龰冈龱𧘇" - ], - [ - "c8cd", - "¬¦'"㈱№℡゛゜⺀⺄⺆⺇⺈⺊⺌⺍⺕⺜⺝⺥⺧⺪⺬⺮⺶⺼⺾⻆⻊⻌⻍⻏⻖⻗⻞⻣" - ], - [ - "c8f5", - "ʃɐɛɔɵœøŋʊɪ" - ], - [ - "f9fe", - "■" - ], - [ - "fa40", - "𠕇鋛𠗟𣿅蕌䊵珯况㙉𤥂𨧤鍄𡧛苮𣳈砼杄拟𤤳𨦪𠊠𦮳𡌅侫𢓭倈𦴩𧪄𣘀𤪱𢔓倩𠍾徤𠎀𠍇滛𠐟偽儁㑺儎顬㝃萖𤦤𠒇兠𣎴兪𠯿𢃼𠋥𢔰𠖎𣈳𡦃宂蝽𠖳𣲙冲冸" - ], - [ - "faa1", - "鴴凉减凑㳜凓𤪦决凢卂凭菍椾𣜭彻刋刦刼劵剗劔効勅簕蕂勠蘍𦬓包𨫞啉滙𣾀𠥔𣿬匳卄𠯢泋𡜦栛珕恊㺪㣌𡛨燝䒢卭却𨚫卾卿𡖖𡘓矦厓𨪛厠厫厮玧𥝲㽙玜叁叅汉义埾叙㪫𠮏叠𣿫𢶣叶𠱷吓灹唫晗浛呭𦭓𠵴啝咏咤䞦𡜍𠻝㶴𠵍" - ], - [ - "fb40", - "𨦼𢚘啇䳭启琗喆喩嘅𡣗𤀺䕒𤐵暳𡂴嘷曍𣊊暤暭噍噏磱囱鞇叾圀囯园𨭦㘣𡉏坆𤆥汮炋坂㚱𦱾埦𡐖堃𡑔𤍣堦𤯵塜墪㕡壠壜𡈼壻寿坃𪅐𤉸鏓㖡够梦㛃湙" - ], - [ - "fba1", - "𡘾娤啓𡚒蔅姉𠵎𦲁𦴪𡟜姙𡟻𡞲𦶦浱𡠨𡛕姹𦹅媫婣㛦𤦩婷㜈媖瑥嫓𦾡𢕔㶅𡤑㜲𡚸広勐孶斈孼𧨎䀄䡝𠈄寕慠𡨴𥧌𠖥寳宝䴐尅𡭄尓珎尔𡲥𦬨屉䣝岅峩峯嶋𡷹𡸷崐崘嵆𡺤岺巗苼㠭𤤁𢁉𢅳芇㠶㯂帮檊幵幺𤒼𠳓厦亷廐厨𡝱帉廴𨒂" - ], - [ - "fc40", - "廹廻㢠廼栾鐛弍𠇁弢㫞䢮𡌺强𦢈𢏐彘𢑱彣鞽𦹮彲鍀𨨶徧嶶㵟𥉐𡽪𧃸𢙨釖𠊞𨨩怱暅𡡷㥣㷇㘹垐𢞴祱㹀悞悤悳𤦂𤦏𧩓璤僡媠慤萤慂慈𦻒憁凴𠙖憇宪𣾷" - ], - [ - "fca1", - "𢡟懓𨮝𩥝懐㤲𢦀𢣁怣慜攞掋𠄘担𡝰拕𢸍捬𤧟㨗搸揸𡎎𡟼撐澊𢸶頔𤂌𥜝擡擥鑻㩦携㩗敍漖𤨨𤨣斅敭敟𣁾斵𤥀䬷旑䃘𡠩无旣忟𣐀昘𣇷𣇸晄𣆤𣆥晋𠹵晧𥇦晳晴𡸽𣈱𨗴𣇈𥌓矅𢣷馤朂𤎜𤨡㬫槺𣟂杞杧杢𤇍𩃭柗䓩栢湐鈼栁𣏦𦶠桝" - ], - [ - "fd40", - "𣑯槡樋𨫟楳棃𣗍椁椀㴲㨁𣘼㮀枬楡𨩊䋼椶榘㮡𠏉荣傐槹𣙙𢄪橅𣜃檝㯳枱櫈𩆜㰍欝𠤣惞欵歴𢟍溵𣫛𠎵𡥘㝀吡𣭚毡𣻼毜氷𢒋𤣱𦭑汚舦汹𣶼䓅𣶽𤆤𤤌𤤀" - ], - [ - "fda1", - "𣳉㛥㳫𠴲鮃𣇹𢒑羏样𦴥𦶡𦷫涖浜湼漄𤥿𤂅𦹲蔳𦽴凇沜渝萮𨬡港𣸯瑓𣾂秌湏媑𣁋濸㜍澝𣸰滺𡒗𤀽䕕鏰潄潜㵎潴𩅰㴻澟𤅄濓𤂑𤅕𤀹𣿰𣾴𤄿凟𤅖𤅗𤅀𦇝灋灾炧炁烌烕烖烟䄄㷨熴熖𤉷焫煅媈煊煮岜𤍥煏鍢𤋁焬𤑚𤨧𤨢熺𨯨炽爎" - ], - [ - "fe40", - "鑂爕夑鑃爤鍁𥘅爮牀𤥴梽牕牗㹕𣁄栍漽犂猪猫𤠣𨠫䣭𨠄猨献珏玪𠰺𦨮珉瑉𤇢𡛧𤨤昣㛅𤦷𤦍𤧻珷琕椃𤨦琹𠗃㻗瑜𢢭瑠𨺲瑇珤瑶莹瑬㜰瑴鏱樬璂䥓𤪌" - ], - [ - "fea1", - "𤅟𤩹𨮏孆𨰃𡢞瓈𡦈甎瓩甞𨻙𡩋寗𨺬鎅畍畊畧畮𤾂㼄𤴓疎瑝疞疴瘂瘬癑癏癯癶𦏵皐臯㟸𦤑𦤎皡皥皷盌𦾟葢𥂝𥅽𡸜眞眦着撯𥈠睘𣊬瞯𨥤𨥨𡛁矴砉𡍶𤨒棊碯磇磓隥礮𥗠磗礴碱𧘌辸袄𨬫𦂃𢘜禆褀椂禀𥡗禝𧬹礼禩渪𧄦㺨秆𩄍秔" - ] -]; - -var dbcsData; -var hasRequiredDbcsData; - -function requireDbcsData () { - if (hasRequiredDbcsData) return dbcsData; - hasRequiredDbcsData = 1; - - // Description of supported double byte encodings and aliases. - // Tables are not require()-d until they are needed to speed up library load. - // require()-s are direct to support Browserify. - - dbcsData = { - - // == Japanese/ShiftJIS ==================================================== - // All japanese encodings are based on JIS X set of standards: - // JIS X 0201 - Single-byte encoding of ASCII + ¥ + Kana chars at 0xA1-0xDF. - // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. - // Has several variations in 1978, 1983, 1990 and 1997. - // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead. - // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233. - // 2 planes, first is superset of 0208, second - revised 0212. - // Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx) - - // Byte encodings are: - // * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte - // encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC. - // Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI. - // * EUC-JP: Up to 3 bytes per character. Used mostly on *nixes. - // 0x00-0x7F - lower part of 0201 - // 0x8E, 0xA1-0xDF - upper part of 0201 - // (0xA1-0xFE)x2 - 0208 plane (94x94). - // 0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94). - // * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon. - // Used as-is in ISO2022 family. - // * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, - // 0201-1976 Roman, 0208-1978, 0208-1983. - // * ISO2022-JP-1: Adds esc seq for 0212-1990. - // * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7. - // * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2. - // * ISO2022-JP-2004: Adds 0213-2004 Plane 1. - // - // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes. - // - // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html - - 'shiftjis': { - type: '_dbcs', - table: function() { return require$$0 }, - encodeAdd: {'\u00a5': 0x5C, '\u203E': 0x7E}, - encodeSkipVals: [{from: 0xED40, to: 0xF940}], - }, - 'csshiftjis': 'shiftjis', - 'mskanji': 'shiftjis', - 'sjis': 'shiftjis', - 'windows31j': 'shiftjis', - 'ms31j': 'shiftjis', - 'xsjis': 'shiftjis', - 'windows932': 'shiftjis', - 'ms932': 'shiftjis', - '932': 'shiftjis', - 'cp932': 'shiftjis', - - 'eucjp': { - type: '_dbcs', - table: function() { return require$$1 }, - encodeAdd: {'\u00a5': 0x5C, '\u203E': 0x7E}, - }, - - // TODO: KDDI extension to Shift_JIS - // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes. - // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars. - - - // == Chinese/GBK ========================================================== - // http://en.wikipedia.org/wiki/GBK - // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder - - // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936 - 'gb2312': 'cp936', - 'gb231280': 'cp936', - 'gb23121980': 'cp936', - 'csgb2312': 'cp936', - 'csiso58gb231280': 'cp936', - 'euccn': 'cp936', - - // Microsoft's CP936 is a subset and approximation of GBK. - 'windows936': 'cp936', - 'ms936': 'cp936', - '936': 'cp936', - 'cp936': { - type: '_dbcs', - table: function() { return require$$2 }, - }, - - // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other. - 'gbk': { - type: '_dbcs', - table: function() { return require$$2.concat(require$$3) }, - }, - 'xgbk': 'gbk', - 'isoir58': 'gbk', - - // GB18030 is an algorithmic extension of GBK. - // Main source: https://www.w3.org/TR/encoding/#gbk-encoder - // http://icu-project.org/docs/papers/gb18030.html - // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml - // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0 - 'gb18030': { - type: '_dbcs', - table: function() { return require$$2.concat(require$$3) }, - gb18030: function() { return require$$4 }, - encodeSkipVals: [0x80], - encodeAdd: {'€': 0xA2E3}, - }, - - 'chinese': 'gb18030', - - - // == Korean =============================================================== - // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same. - 'windows949': 'cp949', - 'ms949': 'cp949', - '949': 'cp949', - 'cp949': { - type: '_dbcs', - table: function() { return require$$5 }, - }, - - 'cseuckr': 'cp949', - 'csksc56011987': 'cp949', - 'euckr': 'cp949', - 'isoir149': 'cp949', - 'korean': 'cp949', - 'ksc56011987': 'cp949', - 'ksc56011989': 'cp949', - 'ksc5601': 'cp949', - - - // == Big5/Taiwan/Hong Kong ================================================ - // There are lots of tables for Big5 and cp950. Please see the following links for history: - // http://moztw.org/docs/big5/ http://www.haible.de/bruno/charsets/conversion-tables/Big5.html - // Variations, in roughly number of defined chars: - // * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT - // * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/ - // * Big5-2003 (Taiwan standard) almost superset of cp950. - // * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers. - // * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. - // many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years. - // Plus, it has 4 combining sequences. - // Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299 - // because big5-hkscs is the only encoding to include astral characters in non-algorithmic way. - // Implementations are not consistent within browsers; sometimes labeled as just big5. - // MS Internet Explorer switches from big5 to big5-hkscs when a patch applied. - // Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31 - // In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s. - // Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt - // http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt - // - // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder - // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong. - - 'windows950': 'cp950', - 'ms950': 'cp950', - '950': 'cp950', - 'cp950': { - type: '_dbcs', - table: function() { return require$$6 }, - }, - - // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus. - 'big5': 'big5hkscs', - 'big5hkscs': { - type: '_dbcs', - table: function() { return require$$6.concat(require$$7) }, - encodeSkipVals: [0xa2cc], - }, - - 'cnbig5': 'big5hkscs', - 'csbig5': 'big5hkscs', - 'xxbig5': 'big5hkscs', - }; - return dbcsData; -} - -var hasRequiredEncodings; - -function requireEncodings () { - if (hasRequiredEncodings) return encodings; - hasRequiredEncodings = 1; - (function (exports) { - - // Update this array if you add/rename/remove files in this directory. - // We support Browserify by skipping automatic module discovery and requiring modules directly. - var modules = [ - requireInternal(), - requireUtf16(), - requireUtf7(), - requireSbcsCodec(), - requireSbcsData(), - requireSbcsDataGenerated(), - requireDbcsCodec(), - requireDbcsData(), - ]; - - // Put all encoding/alias/codec definitions to single object and export it. - for (var i = 0; i < modules.length; i++) { - var module = modules[i]; - for (var enc in module) - if (Object.prototype.hasOwnProperty.call(module, enc)) - exports[enc] = module[enc]; - } - } (encodings)); - return encodings; -} - -var streams; -var hasRequiredStreams; - -function requireStreams () { - if (hasRequiredStreams) return streams; - hasRequiredStreams = 1; - - var Buffer = require$$0$4.Buffer, - Transform = require$$1$2.Transform; - - - // == Exports ================================================================== - streams = function(iconv) { - - // Additional Public API. - iconv.encodeStream = function encodeStream(encoding, options) { - return new IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options); - }; - - iconv.decodeStream = function decodeStream(encoding, options) { - return new IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options); - }; - - iconv.supportsStreams = true; - - - // Not published yet. - iconv.IconvLiteEncoderStream = IconvLiteEncoderStream; - iconv.IconvLiteDecoderStream = IconvLiteDecoderStream; - iconv._collect = IconvLiteDecoderStream.prototype.collect; - }; - - - // == Encoder stream ======================================================= - function IconvLiteEncoderStream(conv, options) { - this.conv = conv; - options = options || {}; - options.decodeStrings = false; // We accept only strings, so we don't need to decode them. - Transform.call(this, options); - } - - IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, { - constructor: { value: IconvLiteEncoderStream } - }); - - IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) { - if (typeof chunk != 'string') - return done(new Error("Iconv encoding stream needs strings as its input.")); - try { - var res = this.conv.write(chunk); - if (res && res.length) this.push(res); - done(); - } - catch (e) { - done(e); - } - }; - - IconvLiteEncoderStream.prototype._flush = function(done) { - try { - var res = this.conv.end(); - if (res && res.length) this.push(res); - done(); - } - catch (e) { - done(e); - } - }; - - IconvLiteEncoderStream.prototype.collect = function(cb) { - var chunks = []; - this.on('error', cb); - this.on('data', function(chunk) { chunks.push(chunk); }); - this.on('end', function() { - cb(null, Buffer.concat(chunks)); - }); - return this; - }; - - - // == Decoder stream ======================================================= - function IconvLiteDecoderStream(conv, options) { - this.conv = conv; - options = options || {}; - options.encoding = this.encoding = 'utf8'; // We output strings. - Transform.call(this, options); - } - - IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, { - constructor: { value: IconvLiteDecoderStream } - }); - - IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) { - if (!Buffer.isBuffer(chunk)) - return done(new Error("Iconv decoding stream needs buffers as its input.")); - try { - var res = this.conv.write(chunk); - if (res && res.length) this.push(res, this.encoding); - done(); - } - catch (e) { - done(e); - } - }; - - IconvLiteDecoderStream.prototype._flush = function(done) { - try { - var res = this.conv.end(); - if (res && res.length) this.push(res, this.encoding); - done(); - } - catch (e) { - done(e); - } - }; - - IconvLiteDecoderStream.prototype.collect = function(cb) { - var res = ''; - this.on('error', cb); - this.on('data', function(chunk) { res += chunk; }); - this.on('end', function() { - cb(null, res); - }); - return this; - }; - return streams; -} - -var extendNode; -var hasRequiredExtendNode; - -function requireExtendNode () { - if (hasRequiredExtendNode) return extendNode; - hasRequiredExtendNode = 1; - var Buffer = require$$0$4.Buffer; - // Note: not polyfilled with safer-buffer on a purpose, as overrides Buffer - - // == Extend Node primitives to use iconv-lite ================================= - - extendNode = function (iconv) { - var original = undefined; // Place to keep original methods. - - // Node authors rewrote Buffer internals to make it compatible with - // Uint8Array and we cannot patch key functions since then. - // Note: this does use older Buffer API on a purpose - iconv.supportsNodeEncodingsExtension = !(Buffer.from || new Buffer(0) instanceof Uint8Array); - - iconv.extendNodeEncodings = function extendNodeEncodings() { - if (original) return; - original = {}; - - if (!iconv.supportsNodeEncodingsExtension) { - console.error("ACTION NEEDED: require('iconv-lite').extendNodeEncodings() is not supported in your version of Node"); - console.error("See more info at https://github.com/ashtuchkin/iconv-lite/wiki/Node-v4-compatibility"); - return; - } - - var nodeNativeEncodings = { - 'hex': true, 'utf8': true, 'utf-8': true, 'ascii': true, 'binary': true, - 'base64': true, 'ucs2': true, 'ucs-2': true, 'utf16le': true, 'utf-16le': true, - }; - - Buffer.isNativeEncoding = function(enc) { - return enc && nodeNativeEncodings[enc.toLowerCase()]; - }; - - // -- SlowBuffer ----------------------------------------------------------- - var SlowBuffer = require$$0$4.SlowBuffer; - - original.SlowBufferToString = SlowBuffer.prototype.toString; - SlowBuffer.prototype.toString = function(encoding, start, end) { - encoding = String(encoding || 'utf8').toLowerCase(); - - // Use native conversion when possible - if (Buffer.isNativeEncoding(encoding)) - return original.SlowBufferToString.call(this, encoding, start, end); - - // Otherwise, use our decoding method. - if (typeof start == 'undefined') start = 0; - if (typeof end == 'undefined') end = this.length; - return iconv.decode(this.slice(start, end), encoding); - }; - - original.SlowBufferWrite = SlowBuffer.prototype.write; - SlowBuffer.prototype.write = function(string, offset, length, encoding) { - // Support both (string, offset, length, encoding) - // and the legacy (string, encoding, offset, length) - if (isFinite(offset)) { - if (!isFinite(length)) { - encoding = length; - length = undefined; - } - } else { // legacy - var swap = encoding; - encoding = offset; - offset = length; - length = swap; - } - - offset = +offset || 0; - var remaining = this.length - offset; - if (!length) { - length = remaining; - } else { - length = +length; - if (length > remaining) { - length = remaining; - } - } - encoding = String(encoding || 'utf8').toLowerCase(); - - // Use native conversion when possible - if (Buffer.isNativeEncoding(encoding)) - return original.SlowBufferWrite.call(this, string, offset, length, encoding); - - if (string.length > 0 && (length < 0 || offset < 0)) - throw new RangeError('attempt to write beyond buffer bounds'); - - // Otherwise, use our encoding method. - var buf = iconv.encode(string, encoding); - if (buf.length < length) length = buf.length; - buf.copy(this, offset, 0, length); - return length; - }; - - // -- Buffer --------------------------------------------------------------- - - original.BufferIsEncoding = Buffer.isEncoding; - Buffer.isEncoding = function(encoding) { - return Buffer.isNativeEncoding(encoding) || iconv.encodingExists(encoding); - }; - - original.BufferByteLength = Buffer.byteLength; - Buffer.byteLength = SlowBuffer.byteLength = function(str, encoding) { - encoding = String(encoding || 'utf8').toLowerCase(); - - // Use native conversion when possible - if (Buffer.isNativeEncoding(encoding)) - return original.BufferByteLength.call(this, str, encoding); - - // Slow, I know, but we don't have a better way yet. - return iconv.encode(str, encoding).length; - }; - - original.BufferToString = Buffer.prototype.toString; - Buffer.prototype.toString = function(encoding, start, end) { - encoding = String(encoding || 'utf8').toLowerCase(); - - // Use native conversion when possible - if (Buffer.isNativeEncoding(encoding)) - return original.BufferToString.call(this, encoding, start, end); - - // Otherwise, use our decoding method. - if (typeof start == 'undefined') start = 0; - if (typeof end == 'undefined') end = this.length; - return iconv.decode(this.slice(start, end), encoding); - }; - - original.BufferWrite = Buffer.prototype.write; - Buffer.prototype.write = function(string, offset, length, encoding) { - var _offset = offset, _length = length, _encoding = encoding; - // Support both (string, offset, length, encoding) - // and the legacy (string, encoding, offset, length) - if (isFinite(offset)) { - if (!isFinite(length)) { - encoding = length; - length = undefined; - } - } else { // legacy - var swap = encoding; - encoding = offset; - offset = length; - length = swap; - } - - encoding = String(encoding || 'utf8').toLowerCase(); - - // Use native conversion when possible - if (Buffer.isNativeEncoding(encoding)) - return original.BufferWrite.call(this, string, _offset, _length, _encoding); - - offset = +offset || 0; - var remaining = this.length - offset; - if (!length) { - length = remaining; - } else { - length = +length; - if (length > remaining) { - length = remaining; - } - } - - if (string.length > 0 && (length < 0 || offset < 0)) - throw new RangeError('attempt to write beyond buffer bounds'); - - // Otherwise, use our encoding method. - var buf = iconv.encode(string, encoding); - if (buf.length < length) length = buf.length; - buf.copy(this, offset, 0, length); - return length; - - // TODO: Set _charsWritten. - }; - - - // -- Readable ------------------------------------------------------------- - if (iconv.supportsStreams) { - var Readable = require$$1$2.Readable; - - original.ReadableSetEncoding = Readable.prototype.setEncoding; - Readable.prototype.setEncoding = function setEncoding(enc, options) { - // Use our own decoder, it has the same interface. - // We cannot use original function as it doesn't handle BOM-s. - this._readableState.decoder = iconv.getDecoder(enc, options); - this._readableState.encoding = enc; - }; - - Readable.prototype.collect = iconv._collect; - } - }; - - // Remove iconv-lite Node primitive extensions. - iconv.undoExtendNodeEncodings = function undoExtendNodeEncodings() { - if (!iconv.supportsNodeEncodingsExtension) - return; - if (!original) - throw new Error("require('iconv-lite').undoExtendNodeEncodings(): Nothing to undo; extendNodeEncodings() is not called.") - - delete Buffer.isNativeEncoding; - - var SlowBuffer = require$$0$4.SlowBuffer; - - SlowBuffer.prototype.toString = original.SlowBufferToString; - SlowBuffer.prototype.write = original.SlowBufferWrite; - - Buffer.isEncoding = original.BufferIsEncoding; - Buffer.byteLength = original.BufferByteLength; - Buffer.prototype.toString = original.BufferToString; - Buffer.prototype.write = original.BufferWrite; - - if (iconv.supportsStreams) { - var Readable = require$$1$2.Readable; - - Readable.prototype.setEncoding = original.ReadableSetEncoding; - delete Readable.prototype.collect; - } - - original = undefined; - }; - }; - return extendNode; -} - -(function (module) { - - // Some environments don't have global Buffer (e.g. React Native). - // Solution would be installing npm modules "buffer" and "stream" explicitly. - var Buffer = safer_1.Buffer; - - var bomHandling$1 = bomHandling, - iconv = module.exports; - - // All codecs and aliases are kept here, keyed by encoding name/alias. - // They are lazy loaded in `iconv.getCodec` from `encodings/index.js`. - iconv.encodings = null; - - // Characters emitted in case of error. - iconv.defaultCharUnicode = '�'; - iconv.defaultCharSingleByte = '?'; - - // Public API. - iconv.encode = function encode(str, encoding, options) { - str = "" + (str || ""); // Ensure string. - - var encoder = iconv.getEncoder(encoding, options); - - var res = encoder.write(str); - var trail = encoder.end(); - - return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res; - }; - - iconv.decode = function decode(buf, encoding, options) { - if (typeof buf === 'string') { - if (!iconv.skipDecodeWarning) { - console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding'); - iconv.skipDecodeWarning = true; - } - - buf = Buffer.from("" + (buf || ""), "binary"); // Ensure buffer. - } - - var decoder = iconv.getDecoder(encoding, options); - - var res = decoder.write(buf); - var trail = decoder.end(); - - return trail ? (res + trail) : res; - }; - - iconv.encodingExists = function encodingExists(enc) { - try { - iconv.getCodec(enc); - return true; - } catch (e) { - return false; - } - }; - - // Legacy aliases to convert functions - iconv.toEncoding = iconv.encode; - iconv.fromEncoding = iconv.decode; - - // Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache. - iconv._codecDataCache = {}; - iconv.getCodec = function getCodec(encoding) { - if (!iconv.encodings) - iconv.encodings = requireEncodings(); // Lazy load all encoding definitions. - - // Canonicalize encoding name: strip all non-alphanumeric chars and appended year. - var enc = iconv._canonicalizeEncoding(encoding); - - // Traverse iconv.encodings to find actual codec. - var codecOptions = {}; - while (true) { - var codec = iconv._codecDataCache[enc]; - if (codec) - return codec; - - var codecDef = iconv.encodings[enc]; - - switch (typeof codecDef) { - case "string": // Direct alias to other encoding. - enc = codecDef; - break; - - case "object": // Alias with options. Can be layered. - for (var key in codecDef) - codecOptions[key] = codecDef[key]; - - if (!codecOptions.encodingName) - codecOptions.encodingName = enc; - - enc = codecDef.type; - break; - - case "function": // Codec itself. - if (!codecOptions.encodingName) - codecOptions.encodingName = enc; - - // The codec function must load all tables and return object with .encoder and .decoder methods. - // It'll be called only once (for each different options object). - codec = new codecDef(codecOptions, iconv); - - iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later. - return codec; - - default: - throw new Error("Encoding not recognized: '" + encoding + "' (searched as: '"+enc+"')"); - } - } - }; - - iconv._canonicalizeEncoding = function(encoding) { - // Canonicalize encoding name: strip all non-alphanumeric chars and appended year. - return (''+encoding).toLowerCase().replace(/:\d{4}$|[^0-9a-z]/g, ""); - }; - - iconv.getEncoder = function getEncoder(encoding, options) { - var codec = iconv.getCodec(encoding), - encoder = new codec.encoder(options, codec); - - if (codec.bomAware && options && options.addBOM) - encoder = new bomHandling$1.PrependBOM(encoder, options); - - return encoder; - }; - - iconv.getDecoder = function getDecoder(encoding, options) { - var codec = iconv.getCodec(encoding), - decoder = new codec.decoder(options, codec); - - if (codec.bomAware && !(options && options.stripBOM === false)) - decoder = new bomHandling$1.StripBOM(decoder, options); - - return decoder; - }; - - - // Load extensions in Node. All of them are omitted in Browserify build via 'browser' field in package.json. - var nodeVer = typeof process !== 'undefined' && process.versions && process.versions.node; - if (nodeVer) { - - // Load streaming support in Node v0.10+ - var nodeVerArr = nodeVer.split(".").map(Number); - if (nodeVerArr[0] > 0 || nodeVerArr[1] >= 10) { - requireStreams()(iconv); - } - - // Load Node primitive extensions. - requireExtendNode()(iconv); - } -} (lib)); - -var libExports = lib.exports; - -var tmp = {}; - -var isWindows = process.platform === 'win32'; -var trailingSlashRe = isWindows ? /[^:]\\$/ : /.\/$/; - -// https://github.com/nodejs/node/blob/3e7a14381497a3b73dda68d05b5130563cdab420/lib/os.js#L25-L43 -var osTmpdir = function () { - var path; - - if (isWindows) { - path = process.env.TEMP || - process.env.TMP || - (process.env.SystemRoot || process.env.windir) + '\\temp'; - } else { - path = process.env.TMPDIR || - process.env.TMP || - process.env.TEMP || - '/tmp'; - } - - if (trailingSlashRe.test(path)) { - path = path.slice(0, -1); - } - - return path; -}; - -/*! - * Tmp - * - * Copyright (c) 2011-2017 KARASZI Istvan - * - * MIT Licensed - */ - -/* - * Module dependencies. - */ -const fs = require$$0$2; -const path = path$1; -const crypto = require$$2$1; -const osTmpDir = osTmpdir; -const _c = process.binding('constants'); - -/* - * The working inner variables. - */ -const - /** - * The temporary directory. - * @type {string} - */ - tmpDir = osTmpDir(), - - // the random characters to choose from - RANDOM_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', - - TEMPLATE_PATTERN = /XXXXXX/, - - DEFAULT_TRIES = 3, - - CREATE_FLAGS = (_c.O_CREAT || _c.fs.O_CREAT) | (_c.O_EXCL || _c.fs.O_EXCL) | (_c.O_RDWR || _c.fs.O_RDWR), - - EBADF = _c.EBADF || _c.os.errno.EBADF, - ENOENT = _c.ENOENT || _c.os.errno.ENOENT, - - DIR_MODE = 448 /* 0o700 */, - FILE_MODE = 384 /* 0o600 */, - - // this will hold the objects need to be removed on exit - _removeObjects = []; - -var - _gracefulCleanup = false, - _uncaughtException = false; - -/** - * Random name generator based on crypto. - * Adapted from http://blog.tompawlak.org/how-to-generate-random-values-nodejs-javascript - * - * @param {number} howMany - * @returns {string} the generated random name - * @private - */ -function _randomChars(howMany) { - var - value = [], - rnd = null; - - // make sure that we do not fail because we ran out of entropy - try { - rnd = crypto.randomBytes(howMany); - } catch (e) { - rnd = crypto.pseudoRandomBytes(howMany); - } - - for (var i = 0; i < howMany; i++) { - value.push(RANDOM_CHARS[rnd[i] % RANDOM_CHARS.length]); - } - - return value.join(''); -} - -/** - * Checks whether the `obj` parameter is defined or not. - * - * @param {Object} obj - * @returns {boolean} true if the object is undefined - * @private - */ -function _isUndefined(obj) { - return typeof obj === 'undefined'; -} - -/** - * Parses the function arguments. - * - * This function helps to have optional arguments. - * - * @param {(Options|Function)} options - * @param {Function} callback - * @returns {Array} parsed arguments - * @private - */ -function _parseArguments(options, callback) { - if (typeof options == 'function') { - return [callback || {}, options]; - } - - if (_isUndefined(options)) { - return [{}, callback]; - } - - return [options, callback]; -} - -/** - * Generates a new temporary name. - * - * @param {Object} opts - * @returns {string} the new random name according to opts - * @private - */ -function _generateTmpName(opts) { - if (opts.name) { - return path.join(opts.dir || tmpDir, opts.name); - } - - // mkstemps like template - if (opts.template) { - return opts.template.replace(TEMPLATE_PATTERN, _randomChars(6)); - } - - // prefix and postfix - const name = [ - opts.prefix || 'tmp-', - process.pid, - _randomChars(12), - opts.postfix || '' - ].join(''); - - return path.join(opts.dir || tmpDir, name); -} - -/** - * Gets a temporary file name. - * - * @param {(Options|tmpNameCallback)} options options or callback - * @param {?tmpNameCallback} callback the callback function - */ -function tmpName(options, callback) { - var - args = _parseArguments(options, callback), - opts = args[0], - cb = args[1], - tries = opts.name ? 1 : opts.tries || DEFAULT_TRIES; - - if (isNaN(tries) || tries < 0) - return cb(new Error('Invalid tries')); - - if (opts.template && !opts.template.match(TEMPLATE_PATTERN)) - return cb(new Error('Invalid template provided')); - - (function _getUniqueName() { - const name = _generateTmpName(opts); - - // check whether the path exists then retry if needed - fs.stat(name, function (err) { - if (!err) { - if (tries-- > 0) return _getUniqueName(); - - return cb(new Error('Could not get a unique tmp filename, max tries reached ' + name)); - } - - cb(null, name); - }); - }()); -} - -/** - * Synchronous version of tmpName. - * - * @param {Object} options - * @returns {string} the generated random name - * @throws {Error} if the options are invalid or could not generate a filename - */ -function tmpNameSync(options) { - var - args = _parseArguments(options), - opts = args[0], - tries = opts.name ? 1 : opts.tries || DEFAULT_TRIES; - - if (isNaN(tries) || tries < 0) - throw new Error('Invalid tries'); - - if (opts.template && !opts.template.match(TEMPLATE_PATTERN)) - throw new Error('Invalid template provided'); - - do { - const name = _generateTmpName(opts); - try { - fs.statSync(name); - } catch (e) { - return name; - } - } while (tries-- > 0); - - throw new Error('Could not get a unique tmp filename, max tries reached'); -} - -/** - * Creates and opens a temporary file. - * - * @param {(Options|fileCallback)} options the config options or the callback function - * @param {?fileCallback} callback - */ -function file(options, callback) { - var - args = _parseArguments(options, callback), - opts = args[0], - cb = args[1]; - - opts.postfix = (_isUndefined(opts.postfix)) ? '.tmp' : opts.postfix; - - // gets a temporary filename - tmpName(opts, function _tmpNameCreated(err, name) { - if (err) return cb(err); - - // create and open the file - fs.open(name, CREATE_FLAGS, opts.mode || FILE_MODE, function _fileCreated(err, fd) { - if (err) return cb(err); - - if (opts.discardDescriptor) { - return fs.close(fd, function _discardCallback(err) { - if (err) { - // Low probability, and the file exists, so this could be - // ignored. If it isn't we certainly need to unlink the - // file, and if that fails too its error is more - // important. - try { - fs.unlinkSync(name); - } catch (e) { - if (!isENOENT(e)) { - err = e; - } - } - return cb(err); - } - cb(null, name, undefined, _prepareTmpFileRemoveCallback(name, -1, opts)); - }); - } - if (opts.detachDescriptor) { - return cb(null, name, fd, _prepareTmpFileRemoveCallback(name, -1, opts)); - } - cb(null, name, fd, _prepareTmpFileRemoveCallback(name, fd, opts)); - }); - }); -} - -/** - * Synchronous version of file. - * - * @param {Options} options - * @returns {FileSyncObject} object consists of name, fd and removeCallback - * @throws {Error} if cannot create a file - */ -function fileSync(options) { - var - args = _parseArguments(options), - opts = args[0]; - - opts.postfix = opts.postfix || '.tmp'; - - const discardOrDetachDescriptor = opts.discardDescriptor || opts.detachDescriptor; - const name = tmpNameSync(opts); - var fd = fs.openSync(name, CREATE_FLAGS, opts.mode || FILE_MODE); - if (opts.discardDescriptor) { - fs.closeSync(fd); - fd = undefined; - } - - return { - name: name, - fd: fd, - removeCallback: _prepareTmpFileRemoveCallback(name, discardOrDetachDescriptor ? -1 : fd, opts) - }; -} - -/** - * Removes files and folders in a directory recursively. - * - * @param {string} root - * @private - */ -function _rmdirRecursiveSync(root) { - const dirs = [root]; - - do { - var - dir = dirs.pop(), - deferred = false, - files = fs.readdirSync(dir); - - for (var i = 0, length = files.length; i < length; i++) { - var - file = path.join(dir, files[i]), - stat = fs.lstatSync(file); // lstat so we don't recurse into symlinked directories - - if (stat.isDirectory()) { - if (!deferred) { - deferred = true; - dirs.push(dir); - } - dirs.push(file); - } else { - fs.unlinkSync(file); - } - } - - if (!deferred) { - fs.rmdirSync(dir); - } - } while (dirs.length !== 0); -} - -/** - * Creates a temporary directory. - * - * @param {(Options|dirCallback)} options the options or the callback function - * @param {?dirCallback} callback - */ -function dir(options, callback) { - var - args = _parseArguments(options, callback), - opts = args[0], - cb = args[1]; - - // gets a temporary filename - tmpName(opts, function _tmpNameCreated(err, name) { - if (err) return cb(err); - - // create the directory - fs.mkdir(name, opts.mode || DIR_MODE, function _dirCreated(err) { - if (err) return cb(err); - - cb(null, name, _prepareTmpDirRemoveCallback(name, opts)); - }); - }); -} - -/** - * Synchronous version of dir. - * - * @param {Options} options - * @returns {DirSyncObject} object consists of name and removeCallback - * @throws {Error} if it cannot create a directory - */ -function dirSync(options) { - var - args = _parseArguments(options), - opts = args[0]; - - const name = tmpNameSync(opts); - fs.mkdirSync(name, opts.mode || DIR_MODE); - - return { - name: name, - removeCallback: _prepareTmpDirRemoveCallback(name, opts) - }; -} - -/** - * Prepares the callback for removal of the temporary file. - * - * @param {string} name the path of the file - * @param {number} fd file descriptor - * @param {Object} opts - * @returns {fileCallback} - * @private - */ -function _prepareTmpFileRemoveCallback(name, fd, opts) { - const removeCallback = _prepareRemoveCallback(function _removeCallback(fdPath) { - try { - if (0 <= fdPath[0]) { - fs.closeSync(fdPath[0]); - } - } - catch (e) { - // under some node/windows related circumstances, a temporary file - // may have not be created as expected or the file was already closed - // by the user, in which case we will simply ignore the error - if (!isEBADF(e) && !isENOENT(e)) { - // reraise any unanticipated error - throw e; - } - } - try { - fs.unlinkSync(fdPath[1]); - } - catch (e) { - if (!isENOENT(e)) { - // reraise any unanticipated error - throw e; - } - } - }, [fd, name]); - - if (!opts.keep) { - _removeObjects.unshift(removeCallback); - } - - return removeCallback; -} - -/** - * Prepares the callback for removal of the temporary directory. - * - * @param {string} name - * @param {Object} opts - * @returns {Function} the callback - * @private - */ -function _prepareTmpDirRemoveCallback(name, opts) { - const removeFunction = opts.unsafeCleanup ? _rmdirRecursiveSync : fs.rmdirSync.bind(fs); - const removeCallback = _prepareRemoveCallback(removeFunction, name); - - if (!opts.keep) { - _removeObjects.unshift(removeCallback); - } - - return removeCallback; -} - -/** - * Creates a guarded function wrapping the removeFunction call. - * - * @param {Function} removeFunction - * @param {Object} arg - * @returns {Function} - * @private - */ -function _prepareRemoveCallback(removeFunction, arg) { - var called = false; - - return function _cleanupCallback(next) { - if (!called) { - const index = _removeObjects.indexOf(_cleanupCallback); - if (index >= 0) { - _removeObjects.splice(index, 1); - } - - called = true; - removeFunction(arg); - } - - if (next) next(null); - }; -} - -/** - * The garbage collector. - * - * @private - */ -function _garbageCollector() { - if (_uncaughtException && !_gracefulCleanup) { - return; - } - - // the function being called removes itself from _removeObjects, - // loop until _removeObjects is empty - while (_removeObjects.length) { - try { - _removeObjects[0].call(null); - } catch (e) { - // already removed? - } - } -} - -/** - * Helper for testing against EBADF to compensate changes made to Node 7.x under Windows. - */ -function isEBADF(error) { - return isExpectedError(error, -EBADF, 'EBADF'); -} - -/** - * Helper for testing against ENOENT to compensate changes made to Node 7.x under Windows. - */ -function isENOENT(error) { - return isExpectedError(error, -ENOENT, 'ENOENT'); -} - -/** - * Helper to determine whether the expected error code matches the actual code and errno, - * which will differ between the supported node versions. - * - * - Node >= 7.0: - * error.code {String} - * error.errno {String|Number} any numerical value will be negated - * - * - Node >= 6.0 < 7.0: - * error.code {String} - * error.errno {Number} negated - * - * - Node >= 4.0 < 6.0: introduces SystemError - * error.code {String} - * error.errno {Number} negated - * - * - Node >= 0.10 < 4.0: - * error.code {Number} negated - * error.errno n/a - */ -function isExpectedError(error, code, errno) { - return error.code == code || error.code == errno; -} - -/** - * Sets the graceful cleanup. - * - * Also removes the created files and directories when an uncaught exception occurs. - */ -function setGracefulCleanup() { - _gracefulCleanup = true; -} - -const version = process.versions.node.split('.').map(function (value) { - return parseInt(value, 10); -}); - -if (version[0] === 0 && (version[1] < 9 || version[1] === 9 && version[2] < 5)) { - process.addListener('uncaughtException', function _uncaughtExceptionThrown(err) { - _uncaughtException = true; - _garbageCollector(); - - throw err; - }); -} - -process.addListener('exit', function _exit(code) { - if (code) _uncaughtException = true; - _garbageCollector(); -}); - -/** - * Configuration options. - * - * @typedef {Object} Options - * @property {?number} tries the number of tries before give up the name generation - * @property {?string} template the "mkstemp" like filename template - * @property {?string} name fix name - * @property {?string} dir the tmp directory to use - * @property {?string} prefix prefix for the generated name - * @property {?string} postfix postfix for the generated name - */ - -/** - * @typedef {Object} FileSyncObject - * @property {string} name the name of the file - * @property {string} fd the file descriptor - * @property {fileCallback} removeCallback the callback function to remove the file - */ - -/** - * @typedef {Object} DirSyncObject - * @property {string} name the name of the directory - * @property {fileCallback} removeCallback the callback function to remove the directory - */ - -/** - * @callback tmpNameCallback - * @param {?Error} err the error object if anything goes wrong - * @param {string} name the temporary file name - */ - -/** - * @callback fileCallback - * @param {?Error} err the error object if anything goes wrong - * @param {string} name the temporary file name - * @param {number} fd the file descriptor - * @param {cleanupCallback} fn the cleanup callback function - */ - -/** - * @callback dirCallback - * @param {?Error} err the error object if anything goes wrong - * @param {string} name the temporary file name - * @param {cleanupCallback} fn the cleanup callback function - */ - -/** - * Removes the temporary created file or directory. - * - * @callback cleanupCallback - * @param {simpleCallback} [next] function to call after entry was removed - */ - -/** - * Callback function for function composition. - * @see {@link https://github.com/raszi/node-tmp/issues/57|raszi/node-tmp#57} - * - * @callback simpleCallback - */ - -// exporting all the needed methods -tmp.tmpdir = tmpDir; - -tmp.dir = dir; -tmp.dirSync = dirSync; - -tmp.file = file; -tmp.fileSync = fileSync; - -tmp.tmpName = tmpName; -tmp.tmpNameSync = tmpNameSync; - -tmp.setGracefulCleanup = setGracefulCleanup; - -var CreateFileError$1 = {}; - -/*** - * Node External Editor - * - * Kevin Gravier - * MIT 2018 - */ -var __extends$3 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(CreateFileError$1, "__esModule", { value: true }); -var CreateFileError = /** @class */ (function (_super) { - __extends$3(CreateFileError, _super); - function CreateFileError(originalError) { - var _newTarget = this.constructor; - var _this = _super.call(this, "Failed to create temporary file for editor") || this; - _this.originalError = originalError; - var proto = _newTarget.prototype; - if (Object.setPrototypeOf) { - Object.setPrototypeOf(_this, proto); - } - else { - _this.__proto__ = _newTarget.prototype; - } - return _this; - } - return CreateFileError; -}(Error)); -CreateFileError$1.CreateFileError = CreateFileError; - -var LaunchEditorError$1 = {}; - -/*** - * Node External Editor - * - * Kevin Gravier - * MIT 2018 - */ -var __extends$2 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(LaunchEditorError$1, "__esModule", { value: true }); -var LaunchEditorError = /** @class */ (function (_super) { - __extends$2(LaunchEditorError, _super); - function LaunchEditorError(originalError) { - var _newTarget = this.constructor; - var _this = _super.call(this, "Failed launch editor") || this; - _this.originalError = originalError; - var proto = _newTarget.prototype; - if (Object.setPrototypeOf) { - Object.setPrototypeOf(_this, proto); - } - else { - _this.__proto__ = _newTarget.prototype; - } - return _this; - } - return LaunchEditorError; -}(Error)); -LaunchEditorError$1.LaunchEditorError = LaunchEditorError; - -var ReadFileError$1 = {}; - -/*** - * Node External Editor - * - * Kevin Gravier - * MIT 2018 - */ -var __extends$1 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(ReadFileError$1, "__esModule", { value: true }); -var ReadFileError = /** @class */ (function (_super) { - __extends$1(ReadFileError, _super); - function ReadFileError(originalError) { - var _newTarget = this.constructor; - var _this = _super.call(this, "Failed to read temporary file") || this; - _this.originalError = originalError; - var proto = _newTarget.prototype; - if (Object.setPrototypeOf) { - Object.setPrototypeOf(_this, proto); - } - else { - _this.__proto__ = _newTarget.prototype; - } - return _this; - } - return ReadFileError; -}(Error)); -ReadFileError$1.ReadFileError = ReadFileError; - -var RemoveFileError$1 = {}; - -/*** - * Node External Editor - * - * Kevin Gravier - * MIT 2018 - */ -var __extends = (commonjsGlobal && commonjsGlobal.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(RemoveFileError$1, "__esModule", { value: true }); -var RemoveFileError = /** @class */ (function (_super) { - __extends(RemoveFileError, _super); - function RemoveFileError(originalError) { - var _newTarget = this.constructor; - var _this = _super.call(this, "Failed to cleanup temporary file") || this; - _this.originalError = originalError; - var proto = _newTarget.prototype; - if (Object.setPrototypeOf) { - Object.setPrototypeOf(_this, proto); - } - else { - _this.__proto__ = _newTarget.prototype; - } - return _this; - } - return RemoveFileError; -}(Error)); -RemoveFileError$1.RemoveFileError = RemoveFileError; - -/*** - * Node External Editor - * - * Kevin Gravier - * MIT 2019 - */ -Object.defineProperty(main, "__esModule", { value: true }); -var chardet_1 = chardet; -var child_process_1 = require$$1$1; -var fs_1 = require$$0$2; -var iconv_lite_1 = libExports; -var tmp_1 = tmp; -var CreateFileError_1 = CreateFileError$1; -main.CreateFileError = CreateFileError_1.CreateFileError; -var LaunchEditorError_1 = LaunchEditorError$1; -main.LaunchEditorError = LaunchEditorError_1.LaunchEditorError; -var ReadFileError_1 = ReadFileError$1; -main.ReadFileError = ReadFileError_1.ReadFileError; -var RemoveFileError_1 = RemoveFileError$1; -main.RemoveFileError = RemoveFileError_1.RemoveFileError; -function edit(text, fileOptions) { - if (text === void 0) { text = ""; } - var editor = new ExternalEditor(text, fileOptions); - editor.run(); - editor.cleanup(); - return editor.text; -} -main.edit = edit; -function editAsync(text, callback, fileOptions) { - if (text === void 0) { text = ""; } - var editor = new ExternalEditor(text, fileOptions); - editor.runAsync(function (err, result) { - if (err) { - setImmediate(callback, err, null); - } - else { - try { - editor.cleanup(); - setImmediate(callback, null, result); - } - catch (cleanupError) { - setImmediate(callback, cleanupError, null); - } - } - }); -} -var editAsync_1 = main.editAsync = editAsync; -var ExternalEditor = /** @class */ (function () { - function ExternalEditor(text, fileOptions) { - if (text === void 0) { text = ""; } - this.text = ""; - this.fileOptions = {}; - this.text = text; - if (fileOptions) { - this.fileOptions = fileOptions; - } - this.determineEditor(); - this.createTemporaryFile(); - } - ExternalEditor.splitStringBySpace = function (str) { - var pieces = []; - var currentString = ""; - for (var strIndex = 0; strIndex < str.length; strIndex++) { - var currentLetter = str[strIndex]; - if (strIndex > 0 && currentLetter === " " && str[strIndex - 1] !== "\\" && currentString.length > 0) { - pieces.push(currentString); - currentString = ""; - } - else { - currentString += currentLetter; - } - } - if (currentString.length > 0) { - pieces.push(currentString); - } - return pieces; - }; - Object.defineProperty(ExternalEditor.prototype, "temp_file", { - get: function () { - console.log("DEPRECATED: temp_file. Use tempFile moving forward."); - return this.tempFile; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ExternalEditor.prototype, "last_exit_status", { - get: function () { - console.log("DEPRECATED: last_exit_status. Use lastExitStatus moving forward."); - return this.lastExitStatus; - }, - enumerable: true, - configurable: true - }); - ExternalEditor.prototype.run = function () { - this.launchEditor(); - this.readTemporaryFile(); - return this.text; - }; - ExternalEditor.prototype.runAsync = function (callback) { - var _this = this; - try { - this.launchEditorAsync(function () { - try { - _this.readTemporaryFile(); - setImmediate(callback, null, _this.text); - } - catch (readError) { - setImmediate(callback, readError, null); - } - }); - } - catch (launchError) { - setImmediate(callback, launchError, null); - } - }; - ExternalEditor.prototype.cleanup = function () { - this.removeTemporaryFile(); - }; - ExternalEditor.prototype.determineEditor = function () { - var editor = process.env.VISUAL ? process.env.VISUAL : - process.env.EDITOR ? process.env.EDITOR : - /^win/.test(process.platform) ? "notepad" : - "vim"; - var editorOpts = ExternalEditor.splitStringBySpace(editor).map(function (piece) { return piece.replace("\\ ", " "); }); - var bin = editorOpts.shift(); - this.editor = { args: editorOpts, bin: bin }; - }; - ExternalEditor.prototype.createTemporaryFile = function () { - try { - this.tempFile = tmp_1.tmpNameSync(this.fileOptions); - var opt = { encoding: "utf8" }; - if (this.fileOptions.hasOwnProperty("mode")) { - opt.mode = this.fileOptions.mode; - } - fs_1.writeFileSync(this.tempFile, this.text, opt); - } - catch (createFileError) { - throw new CreateFileError_1.CreateFileError(createFileError); - } - }; - ExternalEditor.prototype.readTemporaryFile = function () { - try { - var tempFileBuffer = fs_1.readFileSync(this.tempFile); - if (tempFileBuffer.length === 0) { - this.text = ""; - } - else { - var encoding = chardet_1.detect(tempFileBuffer).toString(); - if (!iconv_lite_1.encodingExists(encoding)) { - // Probably a bad idea, but will at least prevent crashing - encoding = "utf8"; - } - this.text = iconv_lite_1.decode(tempFileBuffer, encoding); - } - } - catch (readFileError) { - throw new ReadFileError_1.ReadFileError(readFileError); - } - }; - ExternalEditor.prototype.removeTemporaryFile = function () { - try { - fs_1.unlinkSync(this.tempFile); - } - catch (removeFileError) { - throw new RemoveFileError_1.RemoveFileError(removeFileError); - } - }; - ExternalEditor.prototype.launchEditor = function () { - try { - var editorProcess = child_process_1.spawnSync(this.editor.bin, this.editor.args.concat([this.tempFile]), { stdio: "inherit" }); - this.lastExitStatus = editorProcess.status; - } - catch (launchError) { - throw new LaunchEditorError_1.LaunchEditorError(launchError); - } - }; - ExternalEditor.prototype.launchEditorAsync = function (callback) { - var _this = this; - try { - var editorProcess = child_process_1.spawn(this.editor.bin, this.editor.args.concat([this.tempFile]), { stdio: "inherit" }); - editorProcess.on("exit", function (code) { - _this.lastExitStatus = code; - setImmediate(callback); - }); - } - catch (launchError) { - throw new LaunchEditorError_1.LaunchEditorError(launchError); - } - }; - return ExternalEditor; -}()); -main.ExternalEditor = ExternalEditor; - -/** - * `editor` type prompt - */ - - -class EditorPrompt extends Prompt { - /** - * Start the Inquiry session - * @param {Function} cb Callback when prompt is done - * @return {this} - */ - - _run(cb) { - this.done = cb; - - this.editorResult = new cjs.Subject(); - - // Open Editor on "line" (Enter Key) - const events = observe(this.rl); - this.lineSubscription = events.line.subscribe(this.startExternalEditor.bind(this)); - const waitUserInput = - this.opt.waitUserInput === undefined ? true : this.opt.waitUserInput; - - // Trigger Validation when editor closes - const validation = this.handleSubmitEvents(this.editorResult); - validation.success.forEach(this.onEnd.bind(this)); - validation.error.forEach(this.onError.bind(this)); - - // Prevents default from being printed on screen (can look weird with multiple lines) - this.currentText = this.opt.default; - this.opt.default = null; - - // Init - if (waitUserInput) { - this.render(); - } else { - this.startExternalEditor(); - } - - return this; - } - - /** - * Render the prompt to screen - * @return {EditorPrompt} self - */ - - render(error) { - let bottomContent = ''; - let message = this.getQuestion(); - - message += - this.status === 'answered' - ? colors$1.dim('Received') - : colors$1.dim('Press to launch your preferred editor.'); - - if (error) { - bottomContent = colors$1.red('>> ') + error; - } - - this.screen.render(message, bottomContent); - } - - /** - * Launch $EDITOR on user press enter - */ - - startExternalEditor() { - // Pause Readline to prevent stdin and stdout from being modified while the editor is showing - this.rl.pause(); - editAsync_1(this.currentText, this.endExternalEditor.bind(this), { - postfix: this.opt.postfix ?? '.txt', - }); - } - - endExternalEditor(error, result) { - this.rl.resume(); - if (error) { - this.editorResult.error(error); - } else { - this.editorResult.next(result); - } - } - - onEnd(state) { - this.editorResult.unsubscribe(); - this.lineSubscription.unsubscribe(); - this.answer = state.value; - this.status = 'answered'; - // Re-render prompt - this.render(); - this.screen.done(); - this.done(this.answer); - } - - onError(state) { - this.render(state.isValid); - } -} - -var Stream = require$$1$2; - -var mute = MuteStream; - -// var out = new MuteStream(process.stdout) -// argument auto-pipes -function MuteStream (opts) { - Stream.apply(this); - opts = opts || {}; - this.writable = this.readable = true; - this.muted = false; - this.on('pipe', this._onpipe); - this.replace = opts.replace; - - // For readline-type situations - // This much at the start of a line being redrawn after a ctrl char - // is seen (such as backspace) won't be redrawn as the replacement - this._prompt = opts.prompt || null; - this._hadControl = false; -} - -MuteStream.prototype = Object.create(Stream.prototype); - -Object.defineProperty(MuteStream.prototype, 'constructor', { - value: MuteStream, - enumerable: false -}); - -MuteStream.prototype.mute = function () { - this.muted = true; -}; - -MuteStream.prototype.unmute = function () { - this.muted = false; -}; - -Object.defineProperty(MuteStream.prototype, '_onpipe', { - value: onPipe, - enumerable: false, - writable: true, - configurable: true -}); - -function onPipe (src) { - this._src = src; -} - -Object.defineProperty(MuteStream.prototype, 'isTTY', { - get: getIsTTY, - set: setIsTTY, - enumerable: true, - configurable: true -}); - -function getIsTTY () { - return( (this._dest) ? this._dest.isTTY - : (this._src) ? this._src.isTTY - : false - ) -} - -// basically just get replace the getter/setter with a regular value -function setIsTTY (isTTY) { - Object.defineProperty(this, 'isTTY', { - value: isTTY, - enumerable: true, - writable: true, - configurable: true - }); -} - -Object.defineProperty(MuteStream.prototype, 'rows', { - get: function () { - return( this._dest ? this._dest.rows - : this._src ? this._src.rows - : undefined ) - }, enumerable: true, configurable: true }); - -Object.defineProperty(MuteStream.prototype, 'columns', { - get: function () { - return( this._dest ? this._dest.columns - : this._src ? this._src.columns - : undefined ) - }, enumerable: true, configurable: true }); - - -MuteStream.prototype.pipe = function (dest, options) { - this._dest = dest; - return Stream.prototype.pipe.call(this, dest, options) -}; - -MuteStream.prototype.pause = function () { - if (this._src) return this._src.pause() -}; - -MuteStream.prototype.resume = function () { - if (this._src) return this._src.resume() -}; - -MuteStream.prototype.write = function (c) { - if (this.muted) { - if (!this.replace) return true - if (c.match(/^\u001b/)) { - if(c.indexOf(this._prompt) === 0) { - c = c.substr(this._prompt.length); - c = c.replace(/./g, this.replace); - c = this._prompt + c; - } - this._hadControl = true; - return this.emit('data', c) - } else { - if (this._prompt && this._hadControl && - c.indexOf(this._prompt) === 0) { - this._hadControl = false; - this.emit('data', this._prompt); - c = c.substr(this._prompt.length); - } - c = c.toString().replace(/./g, this.replace); - } - } - this.emit('data', c); -}; - -MuteStream.prototype.end = function (c) { - if (this.muted) { - if (c && this.replace) { - c = c.toString().replace(/./g, this.replace); - } else { - c = null; - } - } - if (c) this.emit('data', c); - this.emit('end'); -}; - -function proxy (fn) { return function () { - var d = this._dest; - var s = this._src; - if (d && d[fn]) d[fn].apply(d, arguments); - if (s && s[fn]) s[fn].apply(s, arguments); -}} - -MuteStream.prototype.destroy = proxy('destroy'); -MuteStream.prototype.destroySoon = proxy('destroySoon'); -MuteStream.prototype.close = proxy('close'); - -var MuteStream$1 = /*@__PURE__*/getDefaultExportFromCjs(mute); - -/** - * Base interface class other can inherits from - */ - -class UI { - constructor(opt) { - // Instantiate the Readline interface - // @Note: Don't reassign if already present (allow test to override the Stream) - this.rl ||= require$$0$5.createInterface(setupReadlineOptions(opt)); - - this.rl.resume(); - - this.onForceClose = this.onForceClose.bind(this); - - // Make sure new prompt start on a newline when closing - process.on('exit', this.onForceClose); - - // Terminate process on SIGINT (which will call process.on('exit') in return) - this.rl.on('SIGINT', this.onForceClose); - } - - /** - * Handle the ^C exit - * @return {null} - */ - - onForceClose() { - this.close(); - process.kill(process.pid, 'SIGINT'); - console.log(''); - } - - /** - * Close the interface and cleanup listeners - */ - - close() { - // Remove events listeners - this.rl.removeListener('SIGINT', this.onForceClose); - process.removeListener('exit', this.onForceClose); - - this.rl.output.unmute(); - - if (this.activePrompt && typeof this.activePrompt.close === 'function') { - this.activePrompt.close(); - } - - // Close the readline - this.rl.output.end(); - this.rl.pause(); - this.rl.close(); - } -} - -function setupReadlineOptions(opt = {}) { - // Inquirer 8.x: - // opt.skipTTYChecks = opt.skipTTYChecks === undefined ? opt.input !== undefined : opt.skipTTYChecks; - opt.skipTTYChecks = opt.skipTTYChecks === undefined ? true : opt.skipTTYChecks; - - // Default `input` to stdin - const input = opt.input || process.stdin; - - // Check if prompt is being called in TTY environment - // If it isn't return a failed promise - if (!opt.skipTTYChecks && !input.isTTY) { - const nonTtyError = new Error( - 'Prompts can not be meaningfully rendered in non-TTY environments', - ); - nonTtyError.isTtyError = true; - throw nonTtyError; - } - - // Add mute capabilities to the output - const ms = new MuteStream$1(); - ms.pipe(opt.output || process.stdout); - const output = ms; - - return { - terminal: true, - ...opt, - input, - output, - }; -} - -/** - * Sticky bottom bar user interface - */ - - -class BottomBar extends UI { - constructor(opt = {}) { - super(opt); - - this.log = new node_stream.Writable({ - write: (chunk, encoding, cb) => { - this.writeLog(chunk); - cb(); - }, - }); - - this.bottomBar = opt.bottomBar || ''; - this.render(); - } - - /** - * Render the prompt to screen - * @return {BottomBar} self - */ - - render() { - this.write(this.bottomBar); - return this; - } - - clean() { - clearLine(this.rl, this.bottomBar.split('\n').length); - return this; - } - - /** - * Update the bottom bar content and rerender - * @param {String} bottomBar Bottom bar content - * @return {BottomBar} self - */ - - updateBottomBar(bottomBar) { - clearLine(this.rl, 1); - this.rl.output.unmute(); - this.clean(); - this.bottomBar = bottomBar; - this.render(); - this.rl.output.mute(); - return this; - } - - /** - * Write out log data - * @param {String} data - The log data to be output - * @return {BottomBar} self - */ - - writeLog(data) { - this.rl.output.unmute(); - this.clean(); - this.rl.output.write(this.enforceLF(data.toString())); - this.render(); - this.rl.output.mute(); - return this; - } - - /** - * Make sure line end on a line feed - * @param {String} str Input string - * @return {String} The input string with a final line feed - */ - - enforceLF(str) { - return /[\n\r]$/.test(str) ? str : str + '\n'; - } - - /** - * Helper for writing message in Prompt - * @param {String} message - The message to be output - */ - write(message) { - const msgLines = message.split(/\n/); - this.height = msgLines.length; - - // Write message to screen and setPrompt to control backspace - this.rl.setPrompt(msgLines.at(-1)); - - if (this.rl.output.rows === 0 && this.rl.output.columns === 0) { - /* When it's a tty through serial port there's no terminal info and the render will malfunction, - so we need enforce the cursor to locate to the leftmost position for rendering. */ - left(this.rl, message.length + this.rl.line.length); - } - - this.rl.output.write(message); - } -} - -/** - * Resolve a question property value if it is passed as a function. - * This method will overwrite the property on the question object with the received value. - * @param {Object} question - Question object - * @param {String} prop - Property to fetch name - * @param {Object} answers - Answers object - * @return {Rx.Observable} - Observable emitting once value is known - */ - -const fetchAsyncQuestionProperty = function (question, prop, answers) { - if (typeof question[prop] !== 'function') { - return cjs.of(question); - } - - return cjs.from( - runAsync$1(question[prop])(answers).then((value) => { - question[prop] = value; - return question; - }), - ); -}; - -const _ = { - set: (obj, path = '', value) => { - let pointer = obj; - path.split('.').forEach((key, index, arr) => { - if (key === '__proto__' || key === 'constructor') return; - - if (index === arr.length - 1) { - pointer[key] = value; - } else if (!(key in pointer)) { - pointer[key] = {}; - } - - pointer = pointer[key]; - }); - }, - get: (obj, path = '', defaultValue) => { - const travel = (regexp) => - String.prototype.split - .call(path, regexp) - .filter(Boolean) - .reduce((res, key) => (res !== null && res !== undefined ? res[key] : res), obj); - const result = travel(/[,[\]]+?/) || travel(/[,.[\]]+?/); - return result === undefined || result === obj ? defaultValue : result; - }, -}; - -/** - * Base interface class other can inherits from - */ -class PromptUI extends UI { - constructor(prompts, opt) { - super(opt); - this.prompts = prompts; - } - - run(questions, answers) { - // Keep global reference to the answers - this.answers = typeof answers === 'object' ? { ...answers } : {}; - - let obs; - if (Array.isArray(questions)) { - obs = cjs.from(questions); - } else if (cjs.isObservable(questions)) { - obs = questions; - } else if ( - Object.values(questions).every( - (maybeQuestion) => - typeof maybeQuestion === 'object' && - !Array.isArray(maybeQuestion) && - maybeQuestion != null, - ) - ) { - // Case: Called with a set of { name: question } - obs = cjs.from( - Object.entries(questions).map(([name, question]) => ({ - name, - ...question, - })), - ); - } else { - // Case: Called with a single question config - obs = cjs.from([questions]); - } - - this.process = obs.pipe( - cjs.concatMap(this.processQuestion.bind(this)), - cjs.publish(), // Creates a hot Observable. It prevents duplicating prompts. - ); - - this.process.connect(); - - return this.process - .pipe( - cjs.reduce((answersObj, answer) => { - _.set(answersObj, answer.name, answer.answer); - return answersObj; - }, this.answers), - ) - .toPromise(Promise) - .then(this.onCompletion.bind(this), this.onError.bind(this)); - } - - /** - * Once all prompt are over - */ - onCompletion() { - this.close(); - - return this.answers; - } - - onError(error) { - this.close(); - return Promise.reject(error); - } - - processQuestion(question) { - question = { ...question }; - return cjs.defer(() => { - const obs = cjs.of(question); - - return obs.pipe( - cjs.concatMap(this.setDefaultType.bind(this)), - cjs.concatMap(this.filterIfRunnable.bind(this)), - cjs.concatMap(() => - fetchAsyncQuestionProperty(question, 'message', this.answers), - ), - cjs.concatMap(() => - fetchAsyncQuestionProperty(question, 'default', this.answers), - ), - cjs.concatMap(() => - fetchAsyncQuestionProperty(question, 'choices', this.answers), - ), - cjs.concatMap(this.fetchAnswer.bind(this)), - ); - }); - } - - fetchAnswer(question) { - const Prompt = this.prompts[question.type]; - this.activePrompt = new Prompt(question, this.rl, this.answers); - return cjs.defer(() => - cjs.from(this.activePrompt.run().then((answer) => ({ name: question.name, answer }))), - ); - } - - setDefaultType(question) { - // Default type to input - if (!this.prompts[question.type]) { - question.type = 'input'; - } - - return cjs.defer(() => cjs.of(question)); - } - - filterIfRunnable(question) { - if ( - question.askAnswered !== true && - _.get(this.answers, question.name) !== undefined - ) { - return cjs.EMPTY; - } - - if (question.when === false) { - return cjs.EMPTY; - } - - if (typeof question.when !== 'function') { - return cjs.of(question); - } - - const { answers } = this; - return cjs.defer(() => - cjs.from( - runAsync$1(question.when)(answers).then((shouldRun) => { - if (shouldRun) { - return question; - } - }), - ).pipe(cjs.filter((val) => val != null)), - ); - } -} - -/** - * Inquirer.js - * A collection of common interactive command line user interfaces. - */ - - -/** - * Create a new self-contained prompt module. - */ -function createPromptModule(opt) { - const promptModule = function (questions, answers) { - let uiInstance; - try { - uiInstance = new PromptUI(promptModule.prompts, opt); - } catch (error) { - return Promise.reject(error); - } - const promise = uiInstance.run(questions, answers); - - // Monkey patch the UI on the promise object so - // that it remains publicly accessible. - promise.ui = uiInstance; - - return promise; - }; - - promptModule.prompts = {}; - - /** - * Register a prompt type - * @param {String} name Prompt type name - * @param {Function} prompt Prompt constructor - * @return {inquirer} - */ - - promptModule.registerPrompt = function (name, prompt) { - promptModule.prompts[name] = prompt; - return this; - }; - - /** - * Register the defaults provider prompts - */ - - promptModule.restoreDefaultPrompts = function () { - this.registerPrompt('list', ListPrompt); - this.registerPrompt('input', InputPrompt); - this.registerPrompt('number', NumberPrompt); - this.registerPrompt('confirm', ConfirmPrompt); - this.registerPrompt('rawlist', RawListPrompt); - this.registerPrompt('expand', ExpandPrompt); - this.registerPrompt('checkbox', CheckboxPrompt); - this.registerPrompt('password', PasswordPrompt); - this.registerPrompt('editor', EditorPrompt); - }; - - promptModule.restoreDefaultPrompts(); - - return promptModule; -} - -/** - * Public CLI helper interface - * @param {Array|Object|Rx.Observable} questions - Questions settings array - * @param {Function} cb - Callback being passed the user answers - * @return {ui.Prompt} - */ - -const prompt = createPromptModule(); - -// Expose helper functions on the top level for easiest usage by common users -function registerPrompt(name, newPrompt) { - prompt.registerPrompt(name, newPrompt); -} - -function restoreDefaultPrompts() { - prompt.restoreDefaultPrompts(); -} - -const inquirer = { - prompt, - ui: { - BottomBar, - Prompt: PromptUI, - }, - createPromptModule, - registerPrompt, - restoreDefaultPrompts, - Separator, -}; - -const debug$6 = debugFactory('spawn'); -function spawn(command, options = {}) { - const [cmd, ...args] = command.split(' ').map((s) => s.trim()); - debug$6(`execute ${cmd} ${args.join(' ')}`); - return new Promise((resolve, reject) => { - var _a; - const spawnStream = require$$1$1.spawn(cmd, args, Object.assign(Object.assign({}, options), { shell: true })); - const chunks = []; - process.stdin.pipe(spawnStream.stdin); - (_a = spawnStream.stdout) === null || _a === void 0 ? void 0 : _a.on('data', (chunk) => { - chunks.push(chunk); - }); - spawnStream.stdout.pipe(process.stdout); - spawnStream.stderr.pipe(process.stderr); - spawnStream.on('close', (code) => { - if (code !== 0) { - reject(); - } - else { - resolve(Buffer.concat(chunks)); - } - }); - }); -} - -const createCargoContent = (name) => `[package] -edition = "2021" -name = "${name.replace('@', '').replace('/', '_').toLowerCase()}" -version = "0.0.0" - -[lib] -crate-type = ["cdylib"] - -[dependencies] -# Default enable napi4 feature, see https://nodejs.org/api/n-api.html#node-api-version-matrix -napi = { version = "2.12.2", default-features = false, features = ["napi4"] } -napi-derive = "2.12.2" - -[build-dependencies] -napi-build = "2.0.1" - -[profile.release] -lto = true -strip = "symbols" -`; - -const createCargoConfig = (enableLinuxArm8Musl, enableWindowsX64) => { - const result = []; - if (enableLinuxArm8Musl) { - result.push(`[target.aarch64-unknown-linux-musl] -linker = "aarch64-linux-musl-gcc" -rustflags = ["-C", "target-feature=-crt-static"]`); - } - if (enableWindowsX64) { - result.push(`[target.x86_64-pc-windows-msvc] -rustflags = ["-C", "target-feature=+crt-static"]`); - } - return result.join('\n'); -}; - -/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */ -function isNothing(subject) { - return (typeof subject === 'undefined') || (subject === null); -} - - -function isObject(subject) { - return (typeof subject === 'object') && (subject !== null); -} - - -function toArray(sequence) { - if (Array.isArray(sequence)) return sequence; - else if (isNothing(sequence)) return []; - - return [ sequence ]; -} - - -function extend(target, source) { - var index, length, key, sourceKeys; - - if (source) { - sourceKeys = Object.keys(source); - - for (index = 0, length = sourceKeys.length; index < length; index += 1) { - key = sourceKeys[index]; - target[key] = source[key]; - } - } - - return target; -} - - -function repeat(string, count) { - var result = '', cycle; - - for (cycle = 0; cycle < count; cycle += 1) { - result += string; - } - - return result; -} - - -function isNegativeZero(number) { - return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number); -} - - -var isNothing_1 = isNothing; -var isObject_1 = isObject; -var toArray_1 = toArray; -var repeat_1 = repeat; -var isNegativeZero_1 = isNegativeZero; -var extend_1 = extend; - -var common = { - isNothing: isNothing_1, - isObject: isObject_1, - toArray: toArray_1, - repeat: repeat_1, - isNegativeZero: isNegativeZero_1, - extend: extend_1 -}; - -// YAML error class. http://stackoverflow.com/questions/8458984 - - -function formatError(exception, compact) { - var where = '', message = exception.reason || '(unknown reason)'; - - if (!exception.mark) return message; - - if (exception.mark.name) { - where += 'in "' + exception.mark.name + '" '; - } - - where += '(' + (exception.mark.line + 1) + ':' + (exception.mark.column + 1) + ')'; - - if (!compact && exception.mark.snippet) { - where += '\n\n' + exception.mark.snippet; - } - - return message + ' ' + where; -} - - -function YAMLException$1(reason, mark) { - // Super constructor - Error.call(this); - - this.name = 'YAMLException'; - this.reason = reason; - this.mark = mark; - this.message = formatError(this, false); - - // Include stack trace in error object - if (Error.captureStackTrace) { - // Chrome and NodeJS - Error.captureStackTrace(this, this.constructor); - } else { - // FF, IE 10+ and Safari 6+. Fallback for others - this.stack = (new Error()).stack || ''; - } -} - - -// Inherit from Error -YAMLException$1.prototype = Object.create(Error.prototype); -YAMLException$1.prototype.constructor = YAMLException$1; - - -YAMLException$1.prototype.toString = function toString(compact) { - return this.name + ': ' + formatError(this, compact); -}; - - -var exception = YAMLException$1; - -// get snippet for a single line, respecting maxLength -function getLine(buffer, lineStart, lineEnd, position, maxLineLength) { - var head = ''; - var tail = ''; - var maxHalfLength = Math.floor(maxLineLength / 2) - 1; - - if (position - lineStart > maxHalfLength) { - head = ' ... '; - lineStart = position - maxHalfLength + head.length; - } - - if (lineEnd - position > maxHalfLength) { - tail = ' ...'; - lineEnd = position + maxHalfLength - tail.length; - } - - return { - str: head + buffer.slice(lineStart, lineEnd).replace(/\t/g, '→') + tail, - pos: position - lineStart + head.length // relative position - }; -} - - -function padStart(string, max) { - return common.repeat(' ', max - string.length) + string; -} - - -function makeSnippet(mark, options) { - options = Object.create(options || null); - - if (!mark.buffer) return null; - - if (!options.maxLength) options.maxLength = 79; - if (typeof options.indent !== 'number') options.indent = 1; - if (typeof options.linesBefore !== 'number') options.linesBefore = 3; - if (typeof options.linesAfter !== 'number') options.linesAfter = 2; - - var re = /\r?\n|\r|\0/g; - var lineStarts = [ 0 ]; - var lineEnds = []; - var match; - var foundLineNo = -1; - - while ((match = re.exec(mark.buffer))) { - lineEnds.push(match.index); - lineStarts.push(match.index + match[0].length); - - if (mark.position <= match.index && foundLineNo < 0) { - foundLineNo = lineStarts.length - 2; - } - } - - if (foundLineNo < 0) foundLineNo = lineStarts.length - 1; - - var result = '', i, line; - var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length; - var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3); - - for (i = 1; i <= options.linesBefore; i++) { - if (foundLineNo - i < 0) break; - line = getLine( - mark.buffer, - lineStarts[foundLineNo - i], - lineEnds[foundLineNo - i], - mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]), - maxLineLength - ); - result = common.repeat(' ', options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) + - ' | ' + line.str + '\n' + result; - } - - line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength); - result += common.repeat(' ', options.indent) + padStart((mark.line + 1).toString(), lineNoLength) + - ' | ' + line.str + '\n'; - result += common.repeat('-', options.indent + lineNoLength + 3 + line.pos) + '^' + '\n'; - - for (i = 1; i <= options.linesAfter; i++) { - if (foundLineNo + i >= lineEnds.length) break; - line = getLine( - mark.buffer, - lineStarts[foundLineNo + i], - lineEnds[foundLineNo + i], - mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]), - maxLineLength - ); - result += common.repeat(' ', options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) + - ' | ' + line.str + '\n'; - } - - return result.replace(/\n$/, ''); -} - - -var snippet = makeSnippet; - -var TYPE_CONSTRUCTOR_OPTIONS = [ - 'kind', - 'multi', - 'resolve', - 'construct', - 'instanceOf', - 'predicate', - 'represent', - 'representName', - 'defaultStyle', - 'styleAliases' -]; - -var YAML_NODE_KINDS = [ - 'scalar', - 'sequence', - 'mapping' -]; - -function compileStyleAliases(map) { - var result = {}; - - if (map !== null) { - Object.keys(map).forEach(function (style) { - map[style].forEach(function (alias) { - result[String(alias)] = style; - }); - }); - } - - return result; -} - -function Type$1(tag, options) { - options = options || {}; - - Object.keys(options).forEach(function (name) { - if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { - throw new exception('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); - } - }); - - // TODO: Add tag format check. - this.options = options; // keep original options in case user wants to extend this type later - this.tag = tag; - this.kind = options['kind'] || null; - this.resolve = options['resolve'] || function () { return true; }; - this.construct = options['construct'] || function (data) { return data; }; - this.instanceOf = options['instanceOf'] || null; - this.predicate = options['predicate'] || null; - this.represent = options['represent'] || null; - this.representName = options['representName'] || null; - this.defaultStyle = options['defaultStyle'] || null; - this.multi = options['multi'] || false; - this.styleAliases = compileStyleAliases(options['styleAliases'] || null); - - if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { - throw new exception('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); - } -} - -var type = Type$1; - -/*eslint-disable max-len*/ - - - - - -function compileList(schema, name) { - var result = []; - - schema[name].forEach(function (currentType) { - var newIndex = result.length; - - result.forEach(function (previousType, previousIndex) { - if (previousType.tag === currentType.tag && - previousType.kind === currentType.kind && - previousType.multi === currentType.multi) { - - newIndex = previousIndex; - } - }); - - result[newIndex] = currentType; - }); - - return result; -} - - -function compileMap(/* lists... */) { - var result = { - scalar: {}, - sequence: {}, - mapping: {}, - fallback: {}, - multi: { - scalar: [], - sequence: [], - mapping: [], - fallback: [] - } - }, index, length; - - function collectType(type) { - if (type.multi) { - result.multi[type.kind].push(type); - result.multi['fallback'].push(type); - } else { - result[type.kind][type.tag] = result['fallback'][type.tag] = type; - } - } - - for (index = 0, length = arguments.length; index < length; index += 1) { - arguments[index].forEach(collectType); - } - return result; -} - - -function Schema$1(definition) { - return this.extend(definition); -} - - -Schema$1.prototype.extend = function extend(definition) { - var implicit = []; - var explicit = []; - - if (definition instanceof type) { - // Schema.extend(type) - explicit.push(definition); - - } else if (Array.isArray(definition)) { - // Schema.extend([ type1, type2, ... ]) - explicit = explicit.concat(definition); - - } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) { - // Schema.extend({ explicit: [ type1, type2, ... ], implicit: [ type1, type2, ... ] }) - if (definition.implicit) implicit = implicit.concat(definition.implicit); - if (definition.explicit) explicit = explicit.concat(definition.explicit); - - } else { - throw new exception('Schema.extend argument should be a Type, [ Type ], ' + - 'or a schema definition ({ implicit: [...], explicit: [...] })'); - } - - implicit.forEach(function (type$1) { - if (!(type$1 instanceof type)) { - throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.'); - } - - if (type$1.loadKind && type$1.loadKind !== 'scalar') { - throw new exception('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); - } - - if (type$1.multi) { - throw new exception('There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.'); - } - }); - - explicit.forEach(function (type$1) { - if (!(type$1 instanceof type)) { - throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.'); - } - }); - - var result = Object.create(Schema$1.prototype); - - result.implicit = (this.implicit || []).concat(implicit); - result.explicit = (this.explicit || []).concat(explicit); - - result.compiledImplicit = compileList(result, 'implicit'); - result.compiledExplicit = compileList(result, 'explicit'); - result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit); - - return result; -}; - - -var schema = Schema$1; - -var str = new type('tag:yaml.org,2002:str', { - kind: 'scalar', - construct: function (data) { return data !== null ? data : ''; } -}); - -var seq = new type('tag:yaml.org,2002:seq', { - kind: 'sequence', - construct: function (data) { return data !== null ? data : []; } -}); - -var map = new type('tag:yaml.org,2002:map', { - kind: 'mapping', - construct: function (data) { return data !== null ? data : {}; } -}); - -var failsafe = new schema({ - explicit: [ - str, - seq, - map - ] -}); - -function resolveYamlNull(data) { - if (data === null) return true; - - var max = data.length; - - return (max === 1 && data === '~') || - (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL')); -} - -function constructYamlNull() { - return null; -} - -function isNull(object) { - return object === null; -} - -var _null = new type('tag:yaml.org,2002:null', { - kind: 'scalar', - resolve: resolveYamlNull, - construct: constructYamlNull, - predicate: isNull, - represent: { - canonical: function () { return '~'; }, - lowercase: function () { return 'null'; }, - uppercase: function () { return 'NULL'; }, - camelcase: function () { return 'Null'; }, - empty: function () { return ''; } - }, - defaultStyle: 'lowercase' -}); - -function resolveYamlBoolean(data) { - if (data === null) return false; - - var max = data.length; - - return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) || - (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE')); -} - -function constructYamlBoolean(data) { - return data === 'true' || - data === 'True' || - data === 'TRUE'; -} - -function isBoolean(object) { - return Object.prototype.toString.call(object) === '[object Boolean]'; -} - -var bool = new type('tag:yaml.org,2002:bool', { - kind: 'scalar', - resolve: resolveYamlBoolean, - construct: constructYamlBoolean, - predicate: isBoolean, - represent: { - lowercase: function (object) { return object ? 'true' : 'false'; }, - uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; }, - camelcase: function (object) { return object ? 'True' : 'False'; } - }, - defaultStyle: 'lowercase' -}); - -function isHexCode(c) { - return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) || - ((0x41/* A */ <= c) && (c <= 0x46/* F */)) || - ((0x61/* a */ <= c) && (c <= 0x66/* f */)); -} - -function isOctCode(c) { - return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */)); -} - -function isDecCode(c) { - return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)); -} - -function resolveYamlInteger(data) { - if (data === null) return false; - - var max = data.length, - index = 0, - hasDigits = false, - ch; - - if (!max) return false; - - ch = data[index]; - - // sign - if (ch === '-' || ch === '+') { - ch = data[++index]; - } - - if (ch === '0') { - // 0 - if (index + 1 === max) return true; - ch = data[++index]; - - // base 2, base 8, base 16 - - if (ch === 'b') { - // base 2 - index++; - - for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; - if (ch !== '0' && ch !== '1') return false; - hasDigits = true; - } - return hasDigits && ch !== '_'; - } - - - if (ch === 'x') { - // base 16 - index++; - - for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; - if (!isHexCode(data.charCodeAt(index))) return false; - hasDigits = true; - } - return hasDigits && ch !== '_'; - } - - - if (ch === 'o') { - // base 8 - index++; - - for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; - if (!isOctCode(data.charCodeAt(index))) return false; - hasDigits = true; - } - return hasDigits && ch !== '_'; - } - } - - // base 10 (except 0) - - // value should not start with `_`; - if (ch === '_') return false; - - for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; - if (!isDecCode(data.charCodeAt(index))) { - return false; - } - hasDigits = true; - } - - // Should have digits and should not end with `_` - if (!hasDigits || ch === '_') return false; - - return true; -} - -function constructYamlInteger(data) { - var value = data, sign = 1, ch; - - if (value.indexOf('_') !== -1) { - value = value.replace(/_/g, ''); - } - - ch = value[0]; - - if (ch === '-' || ch === '+') { - if (ch === '-') sign = -1; - value = value.slice(1); - ch = value[0]; - } - - if (value === '0') return 0; - - if (ch === '0') { - if (value[1] === 'b') return sign * parseInt(value.slice(2), 2); - if (value[1] === 'x') return sign * parseInt(value.slice(2), 16); - if (value[1] === 'o') return sign * parseInt(value.slice(2), 8); - } - - return sign * parseInt(value, 10); -} - -function isInteger(object) { - return (Object.prototype.toString.call(object)) === '[object Number]' && - (object % 1 === 0 && !common.isNegativeZero(object)); -} - -var int = new type('tag:yaml.org,2002:int', { - kind: 'scalar', - resolve: resolveYamlInteger, - construct: constructYamlInteger, - predicate: isInteger, - represent: { - binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); }, - octal: function (obj) { return obj >= 0 ? '0o' + obj.toString(8) : '-0o' + obj.toString(8).slice(1); }, - decimal: function (obj) { return obj.toString(10); }, - /* eslint-disable max-len */ - hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); } - }, - defaultStyle: 'decimal', - styleAliases: { - binary: [ 2, 'bin' ], - octal: [ 8, 'oct' ], - decimal: [ 10, 'dec' ], - hexadecimal: [ 16, 'hex' ] - } -}); - -var YAML_FLOAT_PATTERN = new RegExp( - // 2.5e4, 2.5 and integers - '^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' + - // .2e4, .2 - // special case, seems not from spec - '|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' + - // .inf - '|[-+]?\\.(?:inf|Inf|INF)' + - // .nan - '|\\.(?:nan|NaN|NAN))$'); - -function resolveYamlFloat(data) { - if (data === null) return false; - - if (!YAML_FLOAT_PATTERN.test(data) || - // Quick hack to not allow integers end with `_` - // Probably should update regexp & check speed - data[data.length - 1] === '_') { - return false; - } - - return true; -} - -function constructYamlFloat(data) { - var value, sign; - - value = data.replace(/_/g, '').toLowerCase(); - sign = value[0] === '-' ? -1 : 1; - - if ('+-'.indexOf(value[0]) >= 0) { - value = value.slice(1); - } - - if (value === '.inf') { - return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; - - } else if (value === '.nan') { - return NaN; - } - return sign * parseFloat(value, 10); -} - - -var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/; - -function representYamlFloat(object, style) { - var res; - - if (isNaN(object)) { - switch (style) { - case 'lowercase': return '.nan'; - case 'uppercase': return '.NAN'; - case 'camelcase': return '.NaN'; - } - } else if (Number.POSITIVE_INFINITY === object) { - switch (style) { - case 'lowercase': return '.inf'; - case 'uppercase': return '.INF'; - case 'camelcase': return '.Inf'; - } - } else if (Number.NEGATIVE_INFINITY === object) { - switch (style) { - case 'lowercase': return '-.inf'; - case 'uppercase': return '-.INF'; - case 'camelcase': return '-.Inf'; - } - } else if (common.isNegativeZero(object)) { - return '-0.0'; - } - - res = object.toString(10); - - // JS stringifier can build scientific format without dots: 5e-100, - // while YAML requres dot: 5.e-100. Fix it with simple hack - - return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res; -} - -function isFloat(object) { - return (Object.prototype.toString.call(object) === '[object Number]') && - (object % 1 !== 0 || common.isNegativeZero(object)); -} - -var float = new type('tag:yaml.org,2002:float', { - kind: 'scalar', - resolve: resolveYamlFloat, - construct: constructYamlFloat, - predicate: isFloat, - represent: representYamlFloat, - defaultStyle: 'lowercase' -}); - -var json = failsafe.extend({ - implicit: [ - _null, - bool, - int, - float - ] -}); - -var core = json; - -var YAML_DATE_REGEXP = new RegExp( - '^([0-9][0-9][0-9][0-9])' + // [1] year - '-([0-9][0-9])' + // [2] month - '-([0-9][0-9])$'); // [3] day - -var YAML_TIMESTAMP_REGEXP = new RegExp( - '^([0-9][0-9][0-9][0-9])' + // [1] year - '-([0-9][0-9]?)' + // [2] month - '-([0-9][0-9]?)' + // [3] day - '(?:[Tt]|[ \\t]+)' + // ... - '([0-9][0-9]?)' + // [4] hour - ':([0-9][0-9])' + // [5] minute - ':([0-9][0-9])' + // [6] second - '(?:\\.([0-9]*))?' + // [7] fraction - '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour - '(?::([0-9][0-9]))?))?$'); // [11] tz_minute - -function resolveYamlTimestamp(data) { - if (data === null) return false; - if (YAML_DATE_REGEXP.exec(data) !== null) return true; - if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true; - return false; -} - -function constructYamlTimestamp(data) { - var match, year, month, day, hour, minute, second, fraction = 0, - delta = null, tz_hour, tz_minute, date; - - match = YAML_DATE_REGEXP.exec(data); - if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data); - - if (match === null) throw new Error('Date resolve error'); - - // match: [1] year [2] month [3] day - - year = +(match[1]); - month = +(match[2]) - 1; // JS month starts with 0 - day = +(match[3]); - - if (!match[4]) { // no hour - return new Date(Date.UTC(year, month, day)); - } - - // match: [4] hour [5] minute [6] second [7] fraction - - hour = +(match[4]); - minute = +(match[5]); - second = +(match[6]); - - if (match[7]) { - fraction = match[7].slice(0, 3); - while (fraction.length < 3) { // milli-seconds - fraction += '0'; - } - fraction = +fraction; - } - - // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute - - if (match[9]) { - tz_hour = +(match[10]); - tz_minute = +(match[11] || 0); - delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds - if (match[9] === '-') delta = -delta; - } - - date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); - - if (delta) date.setTime(date.getTime() - delta); - - return date; -} - -function representYamlTimestamp(object /*, style*/) { - return object.toISOString(); -} - -var timestamp = new type('tag:yaml.org,2002:timestamp', { - kind: 'scalar', - resolve: resolveYamlTimestamp, - construct: constructYamlTimestamp, - instanceOf: Date, - represent: representYamlTimestamp -}); - -function resolveYamlMerge(data) { - return data === '<<' || data === null; -} - -var merge$1 = new type('tag:yaml.org,2002:merge', { - kind: 'scalar', - resolve: resolveYamlMerge -}); - -/*eslint-disable no-bitwise*/ - - - - - -// [ 64, 65, 66 ] -> [ padding, CR, LF ] -var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r'; - - -function resolveYamlBinary(data) { - if (data === null) return false; - - var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP; - - // Convert one by one. - for (idx = 0; idx < max; idx++) { - code = map.indexOf(data.charAt(idx)); - - // Skip CR/LF - if (code > 64) continue; - - // Fail on illegal characters - if (code < 0) return false; - - bitlen += 6; - } - - // If there are any bits left, source was corrupted - return (bitlen % 8) === 0; -} - -function constructYamlBinary(data) { - var idx, tailbits, - input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan - max = input.length, - map = BASE64_MAP, - bits = 0, - result = []; - - // Collect by 6*4 bits (3 bytes) - - for (idx = 0; idx < max; idx++) { - if ((idx % 4 === 0) && idx) { - result.push((bits >> 16) & 0xFF); - result.push((bits >> 8) & 0xFF); - result.push(bits & 0xFF); - } - - bits = (bits << 6) | map.indexOf(input.charAt(idx)); - } - - // Dump tail - - tailbits = (max % 4) * 6; - - if (tailbits === 0) { - result.push((bits >> 16) & 0xFF); - result.push((bits >> 8) & 0xFF); - result.push(bits & 0xFF); - } else if (tailbits === 18) { - result.push((bits >> 10) & 0xFF); - result.push((bits >> 2) & 0xFF); - } else if (tailbits === 12) { - result.push((bits >> 4) & 0xFF); - } - - return new Uint8Array(result); -} - -function representYamlBinary(object /*, style*/) { - var result = '', bits = 0, idx, tail, - max = object.length, - map = BASE64_MAP; - - // Convert every three bytes to 4 ASCII characters. - - for (idx = 0; idx < max; idx++) { - if ((idx % 3 === 0) && idx) { - result += map[(bits >> 18) & 0x3F]; - result += map[(bits >> 12) & 0x3F]; - result += map[(bits >> 6) & 0x3F]; - result += map[bits & 0x3F]; - } - - bits = (bits << 8) + object[idx]; - } - - // Dump tail - - tail = max % 3; - - if (tail === 0) { - result += map[(bits >> 18) & 0x3F]; - result += map[(bits >> 12) & 0x3F]; - result += map[(bits >> 6) & 0x3F]; - result += map[bits & 0x3F]; - } else if (tail === 2) { - result += map[(bits >> 10) & 0x3F]; - result += map[(bits >> 4) & 0x3F]; - result += map[(bits << 2) & 0x3F]; - result += map[64]; - } else if (tail === 1) { - result += map[(bits >> 2) & 0x3F]; - result += map[(bits << 4) & 0x3F]; - result += map[64]; - result += map[64]; - } - - return result; -} - -function isBinary(obj) { - return Object.prototype.toString.call(obj) === '[object Uint8Array]'; -} - -var binary = new type('tag:yaml.org,2002:binary', { - kind: 'scalar', - resolve: resolveYamlBinary, - construct: constructYamlBinary, - predicate: isBinary, - represent: representYamlBinary -}); - -var _hasOwnProperty$3 = Object.prototype.hasOwnProperty; -var _toString$2 = Object.prototype.toString; - -function resolveYamlOmap(data) { - if (data === null) return true; - - var objectKeys = [], index, length, pair, pairKey, pairHasKey, - object = data; - - for (index = 0, length = object.length; index < length; index += 1) { - pair = object[index]; - pairHasKey = false; - - if (_toString$2.call(pair) !== '[object Object]') return false; - - for (pairKey in pair) { - if (_hasOwnProperty$3.call(pair, pairKey)) { - if (!pairHasKey) pairHasKey = true; - else return false; - } - } - - if (!pairHasKey) return false; - - if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey); - else return false; - } - - return true; -} - -function constructYamlOmap(data) { - return data !== null ? data : []; -} - -var omap = new type('tag:yaml.org,2002:omap', { - kind: 'sequence', - resolve: resolveYamlOmap, - construct: constructYamlOmap -}); - -var _toString$1 = Object.prototype.toString; - -function resolveYamlPairs(data) { - if (data === null) return true; - - var index, length, pair, keys, result, - object = data; - - result = new Array(object.length); - - for (index = 0, length = object.length; index < length; index += 1) { - pair = object[index]; - - if (_toString$1.call(pair) !== '[object Object]') return false; - - keys = Object.keys(pair); - - if (keys.length !== 1) return false; - - result[index] = [ keys[0], pair[keys[0]] ]; - } - - return true; -} - -function constructYamlPairs(data) { - if (data === null) return []; - - var index, length, pair, keys, result, - object = data; - - result = new Array(object.length); - - for (index = 0, length = object.length; index < length; index += 1) { - pair = object[index]; - - keys = Object.keys(pair); - - result[index] = [ keys[0], pair[keys[0]] ]; - } - - return result; -} - -var pairs = new type('tag:yaml.org,2002:pairs', { - kind: 'sequence', - resolve: resolveYamlPairs, - construct: constructYamlPairs -}); - -var _hasOwnProperty$2 = Object.prototype.hasOwnProperty; - -function resolveYamlSet(data) { - if (data === null) return true; - - var key, object = data; - - for (key in object) { - if (_hasOwnProperty$2.call(object, key)) { - if (object[key] !== null) return false; - } - } - - return true; -} - -function constructYamlSet(data) { - return data !== null ? data : {}; -} - -var set = new type('tag:yaml.org,2002:set', { - kind: 'mapping', - resolve: resolveYamlSet, - construct: constructYamlSet -}); - -var _default = core.extend({ - implicit: [ - timestamp, - merge$1 - ], - explicit: [ - binary, - omap, - pairs, - set - ] -}); - -/*eslint-disable max-len,no-use-before-define*/ - - - - - - - -var _hasOwnProperty$1 = Object.prototype.hasOwnProperty; - - -var CONTEXT_FLOW_IN = 1; -var CONTEXT_FLOW_OUT = 2; -var CONTEXT_BLOCK_IN = 3; -var CONTEXT_BLOCK_OUT = 4; - - -var CHOMPING_CLIP = 1; -var CHOMPING_STRIP = 2; -var CHOMPING_KEEP = 3; - - -var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; -var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; -var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/; -var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i; -var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; - - -function _class(obj) { return Object.prototype.toString.call(obj); } - -function is_EOL(c) { - return (c === 0x0A/* LF */) || (c === 0x0D/* CR */); -} - -function is_WHITE_SPACE(c) { - return (c === 0x09/* Tab */) || (c === 0x20/* Space */); -} - -function is_WS_OR_EOL(c) { - return (c === 0x09/* Tab */) || - (c === 0x20/* Space */) || - (c === 0x0A/* LF */) || - (c === 0x0D/* CR */); -} - -function is_FLOW_INDICATOR(c) { - return c === 0x2C/* , */ || - c === 0x5B/* [ */ || - c === 0x5D/* ] */ || - c === 0x7B/* { */ || - c === 0x7D/* } */; -} - -function fromHexCode(c) { - var lc; - - if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { - return c - 0x30; - } - - /*eslint-disable no-bitwise*/ - lc = c | 0x20; - - if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) { - return lc - 0x61 + 10; - } - - return -1; -} - -function escapedHexLen(c) { - if (c === 0x78/* x */) { return 2; } - if (c === 0x75/* u */) { return 4; } - if (c === 0x55/* U */) { return 8; } - return 0; -} - -function fromDecimalCode(c) { - if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { - return c - 0x30; - } - - return -1; -} - -function simpleEscapeSequence(c) { - /* eslint-disable indent */ - return (c === 0x30/* 0 */) ? '\x00' : - (c === 0x61/* a */) ? '\x07' : - (c === 0x62/* b */) ? '\x08' : - (c === 0x74/* t */) ? '\x09' : - (c === 0x09/* Tab */) ? '\x09' : - (c === 0x6E/* n */) ? '\x0A' : - (c === 0x76/* v */) ? '\x0B' : - (c === 0x66/* f */) ? '\x0C' : - (c === 0x72/* r */) ? '\x0D' : - (c === 0x65/* e */) ? '\x1B' : - (c === 0x20/* Space */) ? ' ' : - (c === 0x22/* " */) ? '\x22' : - (c === 0x2F/* / */) ? '/' : - (c === 0x5C/* \ */) ? '\x5C' : - (c === 0x4E/* N */) ? '\x85' : - (c === 0x5F/* _ */) ? '\xA0' : - (c === 0x4C/* L */) ? '\u2028' : - (c === 0x50/* P */) ? '\u2029' : ''; -} - -function charFromCodepoint(c) { - if (c <= 0xFFFF) { - return String.fromCharCode(c); - } - // Encode UTF-16 surrogate pair - // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF - return String.fromCharCode( - ((c - 0x010000) >> 10) + 0xD800, - ((c - 0x010000) & 0x03FF) + 0xDC00 - ); -} - -var simpleEscapeCheck = new Array(256); // integer, for fast access -var simpleEscapeMap = new Array(256); -for (var i = 0; i < 256; i++) { - simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; - simpleEscapeMap[i] = simpleEscapeSequence(i); -} - - -function State$1(input, options) { - this.input = input; - - this.filename = options['filename'] || null; - this.schema = options['schema'] || _default; - this.onWarning = options['onWarning'] || null; - // (Hidden) Remove? makes the loader to expect YAML 1.1 documents - // if such documents have no explicit %YAML directive - this.legacy = options['legacy'] || false; - - this.json = options['json'] || false; - this.listener = options['listener'] || null; - - this.implicitTypes = this.schema.compiledImplicit; - this.typeMap = this.schema.compiledTypeMap; - - this.length = input.length; - this.position = 0; - this.line = 0; - this.lineStart = 0; - this.lineIndent = 0; - - // position of first leading tab in the current line, - // used to make sure there are no tabs in the indentation - this.firstTabInLine = -1; - - this.documents = []; - - /* - this.version; - this.checkLineBreaks; - this.tagMap; - this.anchorMap; - this.tag; - this.anchor; - this.kind; - this.result;*/ - -} - - -function generateError(state, message) { - var mark = { - name: state.filename, - buffer: state.input.slice(0, -1), // omit trailing \0 - position: state.position, - line: state.line, - column: state.position - state.lineStart - }; - - mark.snippet = snippet(mark); - - return new exception(message, mark); -} - -function throwError(state, message) { - throw generateError(state, message); -} - -function throwWarning(state, message) { - if (state.onWarning) { - state.onWarning.call(null, generateError(state, message)); - } -} - - -var directiveHandlers = { - - YAML: function handleYamlDirective(state, name, args) { - - var match, major, minor; - - if (state.version !== null) { - throwError(state, 'duplication of %YAML directive'); - } - - if (args.length !== 1) { - throwError(state, 'YAML directive accepts exactly one argument'); - } - - match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); - - if (match === null) { - throwError(state, 'ill-formed argument of the YAML directive'); - } - - major = parseInt(match[1], 10); - minor = parseInt(match[2], 10); - - if (major !== 1) { - throwError(state, 'unacceptable YAML version of the document'); - } - - state.version = args[0]; - state.checkLineBreaks = (minor < 2); - - if (minor !== 1 && minor !== 2) { - throwWarning(state, 'unsupported YAML version of the document'); - } - }, - - TAG: function handleTagDirective(state, name, args) { - - var handle, prefix; - - if (args.length !== 2) { - throwError(state, 'TAG directive accepts exactly two arguments'); - } - - handle = args[0]; - prefix = args[1]; - - if (!PATTERN_TAG_HANDLE.test(handle)) { - throwError(state, 'ill-formed tag handle (first argument) of the TAG directive'); - } - - if (_hasOwnProperty$1.call(state.tagMap, handle)) { - throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle'); - } - - if (!PATTERN_TAG_URI.test(prefix)) { - throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive'); - } - - try { - prefix = decodeURIComponent(prefix); - } catch (err) { - throwError(state, 'tag prefix is malformed: ' + prefix); - } - - state.tagMap[handle] = prefix; - } -}; - - -function captureSegment(state, start, end, checkJson) { - var _position, _length, _character, _result; - - if (start < end) { - _result = state.input.slice(start, end); - - if (checkJson) { - for (_position = 0, _length = _result.length; _position < _length; _position += 1) { - _character = _result.charCodeAt(_position); - if (!(_character === 0x09 || - (0x20 <= _character && _character <= 0x10FFFF))) { - throwError(state, 'expected valid JSON character'); - } - } - } else if (PATTERN_NON_PRINTABLE.test(_result)) { - throwError(state, 'the stream contains non-printable characters'); - } - - state.result += _result; - } -} - -function mergeMappings(state, destination, source, overridableKeys) { - var sourceKeys, key, index, quantity; - - if (!common.isObject(source)) { - throwError(state, 'cannot merge mappings; the provided source object is unacceptable'); - } - - sourceKeys = Object.keys(source); - - for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) { - key = sourceKeys[index]; - - if (!_hasOwnProperty$1.call(destination, key)) { - destination[key] = source[key]; - overridableKeys[key] = true; - } - } -} - -function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, - startLine, startLineStart, startPos) { - - var index, quantity; - - // The output is a plain object here, so keys can only be strings. - // We need to convert keyNode to a string, but doing so can hang the process - // (deeply nested arrays that explode exponentially using aliases). - if (Array.isArray(keyNode)) { - keyNode = Array.prototype.slice.call(keyNode); - - for (index = 0, quantity = keyNode.length; index < quantity; index += 1) { - if (Array.isArray(keyNode[index])) { - throwError(state, 'nested arrays are not supported inside keys'); - } - - if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') { - keyNode[index] = '[object Object]'; - } - } - } - - // Avoid code execution in load() via toString property - // (still use its own toString for arrays, timestamps, - // and whatever user schema extensions happen to have @@toStringTag) - if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') { - keyNode = '[object Object]'; - } - - - keyNode = String(keyNode); - - if (_result === null) { - _result = {}; - } - - if (keyTag === 'tag:yaml.org,2002:merge') { - if (Array.isArray(valueNode)) { - for (index = 0, quantity = valueNode.length; index < quantity; index += 1) { - mergeMappings(state, _result, valueNode[index], overridableKeys); - } - } else { - mergeMappings(state, _result, valueNode, overridableKeys); - } - } else { - if (!state.json && - !_hasOwnProperty$1.call(overridableKeys, keyNode) && - _hasOwnProperty$1.call(_result, keyNode)) { - state.line = startLine || state.line; - state.lineStart = startLineStart || state.lineStart; - state.position = startPos || state.position; - throwError(state, 'duplicated mapping key'); - } - - // used for this specific key only because Object.defineProperty is slow - if (keyNode === '__proto__') { - Object.defineProperty(_result, keyNode, { - configurable: true, - enumerable: true, - writable: true, - value: valueNode - }); - } else { - _result[keyNode] = valueNode; - } - delete overridableKeys[keyNode]; - } - - return _result; -} - -function readLineBreak(state) { - var ch; - - ch = state.input.charCodeAt(state.position); - - if (ch === 0x0A/* LF */) { - state.position++; - } else if (ch === 0x0D/* CR */) { - state.position++; - if (state.input.charCodeAt(state.position) === 0x0A/* LF */) { - state.position++; - } - } else { - throwError(state, 'a line break is expected'); - } - - state.line += 1; - state.lineStart = state.position; - state.firstTabInLine = -1; -} - -function skipSeparationSpace(state, allowComments, checkIndent) { - var lineBreaks = 0, - ch = state.input.charCodeAt(state.position); - - while (ch !== 0) { - while (is_WHITE_SPACE(ch)) { - if (ch === 0x09/* Tab */ && state.firstTabInLine === -1) { - state.firstTabInLine = state.position; - } - ch = state.input.charCodeAt(++state.position); - } - - if (allowComments && ch === 0x23/* # */) { - do { - ch = state.input.charCodeAt(++state.position); - } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0); - } - - if (is_EOL(ch)) { - readLineBreak(state); - - ch = state.input.charCodeAt(state.position); - lineBreaks++; - state.lineIndent = 0; - - while (ch === 0x20/* Space */) { - state.lineIndent++; - ch = state.input.charCodeAt(++state.position); - } - } else { - break; - } - } - - if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) { - throwWarning(state, 'deficient indentation'); - } - - return lineBreaks; -} - -function testDocumentSeparator(state) { - var _position = state.position, - ch; - - ch = state.input.charCodeAt(_position); - - // Condition state.position === state.lineStart is tested - // in parent on each call, for efficiency. No needs to test here again. - if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) && - ch === state.input.charCodeAt(_position + 1) && - ch === state.input.charCodeAt(_position + 2)) { - - _position += 3; - - ch = state.input.charCodeAt(_position); - - if (ch === 0 || is_WS_OR_EOL(ch)) { - return true; - } - } - - return false; -} - -function writeFoldedLines(state, count) { - if (count === 1) { - state.result += ' '; - } else if (count > 1) { - state.result += common.repeat('\n', count - 1); - } -} - - -function readPlainScalar(state, nodeIndent, withinFlowCollection) { - var preceding, - following, - captureStart, - captureEnd, - hasPendingContent, - _line, - _lineStart, - _lineIndent, - _kind = state.kind, - _result = state.result, - ch; - - ch = state.input.charCodeAt(state.position); - - if (is_WS_OR_EOL(ch) || - is_FLOW_INDICATOR(ch) || - ch === 0x23/* # */ || - ch === 0x26/* & */ || - ch === 0x2A/* * */ || - ch === 0x21/* ! */ || - ch === 0x7C/* | */ || - ch === 0x3E/* > */ || - ch === 0x27/* ' */ || - ch === 0x22/* " */ || - ch === 0x25/* % */ || - ch === 0x40/* @ */ || - ch === 0x60/* ` */) { - return false; - } - - if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) { - following = state.input.charCodeAt(state.position + 1); - - if (is_WS_OR_EOL(following) || - withinFlowCollection && is_FLOW_INDICATOR(following)) { - return false; - } - } - - state.kind = 'scalar'; - state.result = ''; - captureStart = captureEnd = state.position; - hasPendingContent = false; - - while (ch !== 0) { - if (ch === 0x3A/* : */) { - following = state.input.charCodeAt(state.position + 1); - - if (is_WS_OR_EOL(following) || - withinFlowCollection && is_FLOW_INDICATOR(following)) { - break; - } - - } else if (ch === 0x23/* # */) { - preceding = state.input.charCodeAt(state.position - 1); - - if (is_WS_OR_EOL(preceding)) { - break; - } - - } else if ((state.position === state.lineStart && testDocumentSeparator(state)) || - withinFlowCollection && is_FLOW_INDICATOR(ch)) { - break; - - } else if (is_EOL(ch)) { - _line = state.line; - _lineStart = state.lineStart; - _lineIndent = state.lineIndent; - skipSeparationSpace(state, false, -1); - - if (state.lineIndent >= nodeIndent) { - hasPendingContent = true; - ch = state.input.charCodeAt(state.position); - continue; - } else { - state.position = captureEnd; - state.line = _line; - state.lineStart = _lineStart; - state.lineIndent = _lineIndent; - break; - } - } - - if (hasPendingContent) { - captureSegment(state, captureStart, captureEnd, false); - writeFoldedLines(state, state.line - _line); - captureStart = captureEnd = state.position; - hasPendingContent = false; - } - - if (!is_WHITE_SPACE(ch)) { - captureEnd = state.position + 1; - } - - ch = state.input.charCodeAt(++state.position); - } - - captureSegment(state, captureStart, captureEnd, false); - - if (state.result) { - return true; - } - - state.kind = _kind; - state.result = _result; - return false; -} - -function readSingleQuotedScalar(state, nodeIndent) { - var ch, - captureStart, captureEnd; - - ch = state.input.charCodeAt(state.position); - - if (ch !== 0x27/* ' */) { - return false; - } - - state.kind = 'scalar'; - state.result = ''; - state.position++; - captureStart = captureEnd = state.position; - - while ((ch = state.input.charCodeAt(state.position)) !== 0) { - if (ch === 0x27/* ' */) { - captureSegment(state, captureStart, state.position, true); - ch = state.input.charCodeAt(++state.position); - - if (ch === 0x27/* ' */) { - captureStart = state.position; - state.position++; - captureEnd = state.position; - } else { - return true; - } - - } else if (is_EOL(ch)) { - captureSegment(state, captureStart, captureEnd, true); - writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); - captureStart = captureEnd = state.position; - - } else if (state.position === state.lineStart && testDocumentSeparator(state)) { - throwError(state, 'unexpected end of the document within a single quoted scalar'); - - } else { - state.position++; - captureEnd = state.position; - } - } - - throwError(state, 'unexpected end of the stream within a single quoted scalar'); -} - -function readDoubleQuotedScalar(state, nodeIndent) { - var captureStart, - captureEnd, - hexLength, - hexResult, - tmp, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch !== 0x22/* " */) { - return false; - } - - state.kind = 'scalar'; - state.result = ''; - state.position++; - captureStart = captureEnd = state.position; - - while ((ch = state.input.charCodeAt(state.position)) !== 0) { - if (ch === 0x22/* " */) { - captureSegment(state, captureStart, state.position, true); - state.position++; - return true; - - } else if (ch === 0x5C/* \ */) { - captureSegment(state, captureStart, state.position, true); - ch = state.input.charCodeAt(++state.position); - - if (is_EOL(ch)) { - skipSeparationSpace(state, false, nodeIndent); - - // TODO: rework to inline fn with no type cast? - } else if (ch < 256 && simpleEscapeCheck[ch]) { - state.result += simpleEscapeMap[ch]; - state.position++; - - } else if ((tmp = escapedHexLen(ch)) > 0) { - hexLength = tmp; - hexResult = 0; - - for (; hexLength > 0; hexLength--) { - ch = state.input.charCodeAt(++state.position); - - if ((tmp = fromHexCode(ch)) >= 0) { - hexResult = (hexResult << 4) + tmp; - - } else { - throwError(state, 'expected hexadecimal character'); - } - } - - state.result += charFromCodepoint(hexResult); - - state.position++; - - } else { - throwError(state, 'unknown escape sequence'); - } - - captureStart = captureEnd = state.position; - - } else if (is_EOL(ch)) { - captureSegment(state, captureStart, captureEnd, true); - writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); - captureStart = captureEnd = state.position; - - } else if (state.position === state.lineStart && testDocumentSeparator(state)) { - throwError(state, 'unexpected end of the document within a double quoted scalar'); - - } else { - state.position++; - captureEnd = state.position; - } - } - - throwError(state, 'unexpected end of the stream within a double quoted scalar'); -} - -function readFlowCollection(state, nodeIndent) { - var readNext = true, - _line, - _lineStart, - _pos, - _tag = state.tag, - _result, - _anchor = state.anchor, - following, - terminator, - isPair, - isExplicitPair, - isMapping, - overridableKeys = Object.create(null), - keyNode, - keyTag, - valueNode, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch === 0x5B/* [ */) { - terminator = 0x5D;/* ] */ - isMapping = false; - _result = []; - } else if (ch === 0x7B/* { */) { - terminator = 0x7D;/* } */ - isMapping = true; - _result = {}; - } else { - return false; - } - - if (state.anchor !== null) { - state.anchorMap[state.anchor] = _result; - } - - ch = state.input.charCodeAt(++state.position); - - while (ch !== 0) { - skipSeparationSpace(state, true, nodeIndent); - - ch = state.input.charCodeAt(state.position); - - if (ch === terminator) { - state.position++; - state.tag = _tag; - state.anchor = _anchor; - state.kind = isMapping ? 'mapping' : 'sequence'; - state.result = _result; - return true; - } else if (!readNext) { - throwError(state, 'missed comma between flow collection entries'); - } else if (ch === 0x2C/* , */) { - // "flow collection entries can never be completely empty", as per YAML 1.2, section 7.4 - throwError(state, "expected the node content, but found ','"); - } - - keyTag = keyNode = valueNode = null; - isPair = isExplicitPair = false; - - if (ch === 0x3F/* ? */) { - following = state.input.charCodeAt(state.position + 1); - - if (is_WS_OR_EOL(following)) { - isPair = isExplicitPair = true; - state.position++; - skipSeparationSpace(state, true, nodeIndent); - } - } - - _line = state.line; // Save the current line. - _lineStart = state.lineStart; - _pos = state.position; - composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); - keyTag = state.tag; - keyNode = state.result; - skipSeparationSpace(state, true, nodeIndent); - - ch = state.input.charCodeAt(state.position); - - if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) { - isPair = true; - ch = state.input.charCodeAt(++state.position); - skipSeparationSpace(state, true, nodeIndent); - composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); - valueNode = state.result; - } - - if (isMapping) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos); - } else if (isPair) { - _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos)); - } else { - _result.push(keyNode); - } - - skipSeparationSpace(state, true, nodeIndent); - - ch = state.input.charCodeAt(state.position); - - if (ch === 0x2C/* , */) { - readNext = true; - ch = state.input.charCodeAt(++state.position); - } else { - readNext = false; - } - } - - throwError(state, 'unexpected end of the stream within a flow collection'); -} - -function readBlockScalar(state, nodeIndent) { - var captureStart, - folding, - chomping = CHOMPING_CLIP, - didReadContent = false, - detectedIndent = false, - textIndent = nodeIndent, - emptyLines = 0, - atMoreIndented = false, - tmp, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch === 0x7C/* | */) { - folding = false; - } else if (ch === 0x3E/* > */) { - folding = true; - } else { - return false; - } - - state.kind = 'scalar'; - state.result = ''; - - while (ch !== 0) { - ch = state.input.charCodeAt(++state.position); - - if (ch === 0x2B/* + */ || ch === 0x2D/* - */) { - if (CHOMPING_CLIP === chomping) { - chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP; - } else { - throwError(state, 'repeat of a chomping mode identifier'); - } - - } else if ((tmp = fromDecimalCode(ch)) >= 0) { - if (tmp === 0) { - throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one'); - } else if (!detectedIndent) { - textIndent = nodeIndent + tmp - 1; - detectedIndent = true; - } else { - throwError(state, 'repeat of an indentation width identifier'); - } - - } else { - break; - } - } - - if (is_WHITE_SPACE(ch)) { - do { ch = state.input.charCodeAt(++state.position); } - while (is_WHITE_SPACE(ch)); - - if (ch === 0x23/* # */) { - do { ch = state.input.charCodeAt(++state.position); } - while (!is_EOL(ch) && (ch !== 0)); - } - } - - while (ch !== 0) { - readLineBreak(state); - state.lineIndent = 0; - - ch = state.input.charCodeAt(state.position); - - while ((!detectedIndent || state.lineIndent < textIndent) && - (ch === 0x20/* Space */)) { - state.lineIndent++; - ch = state.input.charCodeAt(++state.position); - } - - if (!detectedIndent && state.lineIndent > textIndent) { - textIndent = state.lineIndent; - } - - if (is_EOL(ch)) { - emptyLines++; - continue; - } - - // End of the scalar. - if (state.lineIndent < textIndent) { - - // Perform the chomping. - if (chomping === CHOMPING_KEEP) { - state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); - } else if (chomping === CHOMPING_CLIP) { - if (didReadContent) { // i.e. only if the scalar is not empty. - state.result += '\n'; - } - } - - // Break this `while` cycle and go to the funciton's epilogue. - break; - } - - // Folded style: use fancy rules to handle line breaks. - if (folding) { - - // Lines starting with white space characters (more-indented lines) are not folded. - if (is_WHITE_SPACE(ch)) { - atMoreIndented = true; - // except for the first content line (cf. Example 8.1) - state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); - - // End of more-indented block. - } else if (atMoreIndented) { - atMoreIndented = false; - state.result += common.repeat('\n', emptyLines + 1); - - // Just one line break - perceive as the same line. - } else if (emptyLines === 0) { - if (didReadContent) { // i.e. only if we have already read some scalar content. - state.result += ' '; - } - - // Several line breaks - perceive as different lines. - } else { - state.result += common.repeat('\n', emptyLines); - } - - // Literal style: just add exact number of line breaks between content lines. - } else { - // Keep all line breaks except the header line break. - state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); - } - - didReadContent = true; - detectedIndent = true; - emptyLines = 0; - captureStart = state.position; - - while (!is_EOL(ch) && (ch !== 0)) { - ch = state.input.charCodeAt(++state.position); - } - - captureSegment(state, captureStart, state.position, false); - } - - return true; -} - -function readBlockSequence(state, nodeIndent) { - var _line, - _tag = state.tag, - _anchor = state.anchor, - _result = [], - following, - detected = false, - ch; - - // there is a leading tab before this token, so it can't be a block sequence/mapping; - // it can still be flow sequence/mapping or a scalar - if (state.firstTabInLine !== -1) return false; - - if (state.anchor !== null) { - state.anchorMap[state.anchor] = _result; - } - - ch = state.input.charCodeAt(state.position); - - while (ch !== 0) { - if (state.firstTabInLine !== -1) { - state.position = state.firstTabInLine; - throwError(state, 'tab characters must not be used in indentation'); - } - - if (ch !== 0x2D/* - */) { - break; - } - - following = state.input.charCodeAt(state.position + 1); - - if (!is_WS_OR_EOL(following)) { - break; - } - - detected = true; - state.position++; - - if (skipSeparationSpace(state, true, -1)) { - if (state.lineIndent <= nodeIndent) { - _result.push(null); - ch = state.input.charCodeAt(state.position); - continue; - } - } - - _line = state.line; - composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true); - _result.push(state.result); - skipSeparationSpace(state, true, -1); - - ch = state.input.charCodeAt(state.position); - - if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { - throwError(state, 'bad indentation of a sequence entry'); - } else if (state.lineIndent < nodeIndent) { - break; - } - } - - if (detected) { - state.tag = _tag; - state.anchor = _anchor; - state.kind = 'sequence'; - state.result = _result; - return true; - } - return false; -} - -function readBlockMapping(state, nodeIndent, flowIndent) { - var following, - allowCompact, - _line, - _keyLine, - _keyLineStart, - _keyPos, - _tag = state.tag, - _anchor = state.anchor, - _result = {}, - overridableKeys = Object.create(null), - keyTag = null, - keyNode = null, - valueNode = null, - atExplicitKey = false, - detected = false, - ch; - - // there is a leading tab before this token, so it can't be a block sequence/mapping; - // it can still be flow sequence/mapping or a scalar - if (state.firstTabInLine !== -1) return false; - - if (state.anchor !== null) { - state.anchorMap[state.anchor] = _result; - } - - ch = state.input.charCodeAt(state.position); - - while (ch !== 0) { - if (!atExplicitKey && state.firstTabInLine !== -1) { - state.position = state.firstTabInLine; - throwError(state, 'tab characters must not be used in indentation'); - } - - following = state.input.charCodeAt(state.position + 1); - _line = state.line; // Save the current line. - - // - // Explicit notation case. There are two separate blocks: - // first for the key (denoted by "?") and second for the value (denoted by ":") - // - if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) { - - if (ch === 0x3F/* ? */) { - if (atExplicitKey) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); - keyTag = keyNode = valueNode = null; - } - - detected = true; - atExplicitKey = true; - allowCompact = true; - - } else if (atExplicitKey) { - // i.e. 0x3A/* : */ === character after the explicit key. - atExplicitKey = false; - allowCompact = true; - - } else { - throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line'); - } - - state.position += 1; - ch = following; - - // - // Implicit notation case. Flow-style node as the key first, then ":", and the value. - // - } else { - _keyLine = state.line; - _keyLineStart = state.lineStart; - _keyPos = state.position; - - if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { - // Neither implicit nor explicit notation. - // Reading is done. Go to the epilogue. - break; - } - - if (state.line === _line) { - ch = state.input.charCodeAt(state.position); - - while (is_WHITE_SPACE(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - if (ch === 0x3A/* : */) { - ch = state.input.charCodeAt(++state.position); - - if (!is_WS_OR_EOL(ch)) { - throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping'); - } - - if (atExplicitKey) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); - keyTag = keyNode = valueNode = null; - } - - detected = true; - atExplicitKey = false; - allowCompact = false; - keyTag = state.tag; - keyNode = state.result; - - } else if (detected) { - throwError(state, 'can not read an implicit mapping pair; a colon is missed'); - - } else { - state.tag = _tag; - state.anchor = _anchor; - return true; // Keep the result of `composeNode`. - } - - } else if (detected) { - throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key'); - - } else { - state.tag = _tag; - state.anchor = _anchor; - return true; // Keep the result of `composeNode`. - } - } - - // - // Common reading code for both explicit and implicit notations. - // - if (state.line === _line || state.lineIndent > nodeIndent) { - if (atExplicitKey) { - _keyLine = state.line; - _keyLineStart = state.lineStart; - _keyPos = state.position; - } - - if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) { - if (atExplicitKey) { - keyNode = state.result; - } else { - valueNode = state.result; - } - } - - if (!atExplicitKey) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos); - keyTag = keyNode = valueNode = null; - } - - skipSeparationSpace(state, true, -1); - ch = state.input.charCodeAt(state.position); - } - - if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { - throwError(state, 'bad indentation of a mapping entry'); - } else if (state.lineIndent < nodeIndent) { - break; - } - } - - // - // Epilogue. - // - - // Special case: last mapping's node contains only the key in explicit notation. - if (atExplicitKey) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); - } - - // Expose the resulting mapping. - if (detected) { - state.tag = _tag; - state.anchor = _anchor; - state.kind = 'mapping'; - state.result = _result; - } - - return detected; -} - -function readTagProperty(state) { - var _position, - isVerbatim = false, - isNamed = false, - tagHandle, - tagName, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch !== 0x21/* ! */) return false; - - if (state.tag !== null) { - throwError(state, 'duplication of a tag property'); - } - - ch = state.input.charCodeAt(++state.position); - - if (ch === 0x3C/* < */) { - isVerbatim = true; - ch = state.input.charCodeAt(++state.position); - - } else if (ch === 0x21/* ! */) { - isNamed = true; - tagHandle = '!!'; - ch = state.input.charCodeAt(++state.position); - - } else { - tagHandle = '!'; - } - - _position = state.position; - - if (isVerbatim) { - do { ch = state.input.charCodeAt(++state.position); } - while (ch !== 0 && ch !== 0x3E/* > */); - - if (state.position < state.length) { - tagName = state.input.slice(_position, state.position); - ch = state.input.charCodeAt(++state.position); - } else { - throwError(state, 'unexpected end of the stream within a verbatim tag'); - } - } else { - while (ch !== 0 && !is_WS_OR_EOL(ch)) { - - if (ch === 0x21/* ! */) { - if (!isNamed) { - tagHandle = state.input.slice(_position - 1, state.position + 1); - - if (!PATTERN_TAG_HANDLE.test(tagHandle)) { - throwError(state, 'named tag handle cannot contain such characters'); - } - - isNamed = true; - _position = state.position + 1; - } else { - throwError(state, 'tag suffix cannot contain exclamation marks'); - } - } - - ch = state.input.charCodeAt(++state.position); - } - - tagName = state.input.slice(_position, state.position); - - if (PATTERN_FLOW_INDICATORS.test(tagName)) { - throwError(state, 'tag suffix cannot contain flow indicator characters'); - } - } - - if (tagName && !PATTERN_TAG_URI.test(tagName)) { - throwError(state, 'tag name cannot contain such characters: ' + tagName); - } - - try { - tagName = decodeURIComponent(tagName); - } catch (err) { - throwError(state, 'tag name is malformed: ' + tagName); - } - - if (isVerbatim) { - state.tag = tagName; - - } else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) { - state.tag = state.tagMap[tagHandle] + tagName; - - } else if (tagHandle === '!') { - state.tag = '!' + tagName; - - } else if (tagHandle === '!!') { - state.tag = 'tag:yaml.org,2002:' + tagName; - - } else { - throwError(state, 'undeclared tag handle "' + tagHandle + '"'); - } - - return true; -} - -function readAnchorProperty(state) { - var _position, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch !== 0x26/* & */) return false; - - if (state.anchor !== null) { - throwError(state, 'duplication of an anchor property'); - } - - ch = state.input.charCodeAt(++state.position); - _position = state.position; - - while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - if (state.position === _position) { - throwError(state, 'name of an anchor node must contain at least one character'); - } - - state.anchor = state.input.slice(_position, state.position); - return true; -} - -function readAlias(state) { - var _position, alias, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch !== 0x2A/* * */) return false; - - ch = state.input.charCodeAt(++state.position); - _position = state.position; - - while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - if (state.position === _position) { - throwError(state, 'name of an alias node must contain at least one character'); - } - - alias = state.input.slice(_position, state.position); - - if (!_hasOwnProperty$1.call(state.anchorMap, alias)) { - throwError(state, 'unidentified alias "' + alias + '"'); - } - - state.result = state.anchorMap[alias]; - skipSeparationSpace(state, true, -1); - return true; -} - -function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) { - var allowBlockStyles, - allowBlockScalars, - allowBlockCollections, - indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this parentIndent) { - indentStatus = 1; - } else if (state.lineIndent === parentIndent) { - indentStatus = 0; - } else if (state.lineIndent < parentIndent) { - indentStatus = -1; - } - } - } - - if (indentStatus === 1) { - while (readTagProperty(state) || readAnchorProperty(state)) { - if (skipSeparationSpace(state, true, -1)) { - atNewLine = true; - allowBlockCollections = allowBlockStyles; - - if (state.lineIndent > parentIndent) { - indentStatus = 1; - } else if (state.lineIndent === parentIndent) { - indentStatus = 0; - } else if (state.lineIndent < parentIndent) { - indentStatus = -1; - } - } else { - allowBlockCollections = false; - } - } - } - - if (allowBlockCollections) { - allowBlockCollections = atNewLine || allowCompact; - } - - if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) { - if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) { - flowIndent = parentIndent; - } else { - flowIndent = parentIndent + 1; - } - - blockIndent = state.position - state.lineStart; - - if (indentStatus === 1) { - if (allowBlockCollections && - (readBlockSequence(state, blockIndent) || - readBlockMapping(state, blockIndent, flowIndent)) || - readFlowCollection(state, flowIndent)) { - hasContent = true; - } else { - if ((allowBlockScalars && readBlockScalar(state, flowIndent)) || - readSingleQuotedScalar(state, flowIndent) || - readDoubleQuotedScalar(state, flowIndent)) { - hasContent = true; - - } else if (readAlias(state)) { - hasContent = true; - - if (state.tag !== null || state.anchor !== null) { - throwError(state, 'alias node should not have any properties'); - } - - } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) { - hasContent = true; - - if (state.tag === null) { - state.tag = '?'; - } - } - - if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; - } - } - } else if (indentStatus === 0) { - // Special case: block sequences are allowed to have same indentation level as the parent. - // http://www.yaml.org/spec/1.2/spec.html#id2799784 - hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); - } - } - - if (state.tag === null) { - if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; - } - - } else if (state.tag === '?') { - // Implicit resolving is not allowed for non-scalar types, and '?' - // non-specific tag is only automatically assigned to plain scalars. - // - // We only need to check kind conformity in case user explicitly assigns '?' - // tag, for example like this: "! [0]" - // - if (state.result !== null && state.kind !== 'scalar') { - throwError(state, 'unacceptable node kind for ! tag; it should be "scalar", not "' + state.kind + '"'); - } - - for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { - type = state.implicitTypes[typeIndex]; - - if (type.resolve(state.result)) { // `state.result` updated in resolver if matched - state.result = type.construct(state.result); - state.tag = type.tag; - if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; - } - break; - } - } - } else if (state.tag !== '!') { - if (_hasOwnProperty$1.call(state.typeMap[state.kind || 'fallback'], state.tag)) { - type = state.typeMap[state.kind || 'fallback'][state.tag]; - } else { - // looking for multi type - type = null; - typeList = state.typeMap.multi[state.kind || 'fallback']; - - for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) { - if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) { - type = typeList[typeIndex]; - break; - } - } - } - - if (!type) { - throwError(state, 'unknown tag !<' + state.tag + '>'); - } - - if (state.result !== null && type.kind !== state.kind) { - throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"'); - } - - if (!type.resolve(state.result, state.tag)) { // `state.result` updated in resolver if matched - throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); - } else { - state.result = type.construct(state.result, state.tag); - if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; - } - } - } - - if (state.listener !== null) { - state.listener('close', state); - } - return state.tag !== null || state.anchor !== null || hasContent; -} - -function readDocument(state) { - var documentStart = state.position, - _position, - directiveName, - directiveArgs, - hasDirectives = false, - ch; - - state.version = null; - state.checkLineBreaks = state.legacy; - state.tagMap = Object.create(null); - state.anchorMap = Object.create(null); - - while ((ch = state.input.charCodeAt(state.position)) !== 0) { - skipSeparationSpace(state, true, -1); - - ch = state.input.charCodeAt(state.position); - - if (state.lineIndent > 0 || ch !== 0x25/* % */) { - break; - } - - hasDirectives = true; - ch = state.input.charCodeAt(++state.position); - _position = state.position; - - while (ch !== 0 && !is_WS_OR_EOL(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - directiveName = state.input.slice(_position, state.position); - directiveArgs = []; - - if (directiveName.length < 1) { - throwError(state, 'directive name must not be less than one character in length'); - } - - while (ch !== 0) { - while (is_WHITE_SPACE(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - if (ch === 0x23/* # */) { - do { ch = state.input.charCodeAt(++state.position); } - while (ch !== 0 && !is_EOL(ch)); - break; - } - - if (is_EOL(ch)) break; - - _position = state.position; - - while (ch !== 0 && !is_WS_OR_EOL(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - directiveArgs.push(state.input.slice(_position, state.position)); - } - - if (ch !== 0) readLineBreak(state); - - if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) { - directiveHandlers[directiveName](state, directiveName, directiveArgs); - } else { - throwWarning(state, 'unknown document directive "' + directiveName + '"'); - } - } - - skipSeparationSpace(state, true, -1); - - if (state.lineIndent === 0 && - state.input.charCodeAt(state.position) === 0x2D/* - */ && - state.input.charCodeAt(state.position + 1) === 0x2D/* - */ && - state.input.charCodeAt(state.position + 2) === 0x2D/* - */) { - state.position += 3; - skipSeparationSpace(state, true, -1); - - } else if (hasDirectives) { - throwError(state, 'directives end mark is expected'); - } - - composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); - skipSeparationSpace(state, true, -1); - - if (state.checkLineBreaks && - PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) { - throwWarning(state, 'non-ASCII line breaks are interpreted as content'); - } - - state.documents.push(state.result); - - if (state.position === state.lineStart && testDocumentSeparator(state)) { - - if (state.input.charCodeAt(state.position) === 0x2E/* . */) { - state.position += 3; - skipSeparationSpace(state, true, -1); - } - return; - } - - if (state.position < (state.length - 1)) { - throwError(state, 'end of the stream or a document separator is expected'); - } else { - return; - } -} - - -function loadDocuments(input, options) { - input = String(input); - options = options || {}; - - if (input.length !== 0) { - - // Add tailing `\n` if not exists - if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ && - input.charCodeAt(input.length - 1) !== 0x0D/* CR */) { - input += '\n'; - } - - // Strip BOM - if (input.charCodeAt(0) === 0xFEFF) { - input = input.slice(1); - } - } - - var state = new State$1(input, options); - - var nullpos = input.indexOf('\0'); - - if (nullpos !== -1) { - state.position = nullpos; - throwError(state, 'null byte is not allowed in input'); - } - - // Use 0 as string terminator. That significantly simplifies bounds check. - state.input += '\0'; - - while (state.input.charCodeAt(state.position) === 0x20/* Space */) { - state.lineIndent += 1; - state.position += 1; - } - - while (state.position < (state.length - 1)) { - readDocument(state); - } - - return state.documents; -} - - -function loadAll$1(input, iterator, options) { - if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') { - options = iterator; - iterator = null; - } - - var documents = loadDocuments(input, options); - - if (typeof iterator !== 'function') { - return documents; - } - - for (var index = 0, length = documents.length; index < length; index += 1) { - iterator(documents[index]); - } -} - - -function load$1(input, options) { - var documents = loadDocuments(input, options); - - if (documents.length === 0) { - /*eslint-disable no-undefined*/ - return undefined; - } else if (documents.length === 1) { - return documents[0]; - } - throw new exception('expected a single document in the stream, but found more'); -} - - -var loadAll_1 = loadAll$1; -var load_1 = load$1; - -var loader = { - loadAll: loadAll_1, - load: load_1 -}; - -/*eslint-disable no-use-before-define*/ - - - - - -var _toString = Object.prototype.toString; -var _hasOwnProperty = Object.prototype.hasOwnProperty; - -var CHAR_BOM = 0xFEFF; -var CHAR_TAB = 0x09; /* Tab */ -var CHAR_LINE_FEED = 0x0A; /* LF */ -var CHAR_CARRIAGE_RETURN = 0x0D; /* CR */ -var CHAR_SPACE = 0x20; /* Space */ -var CHAR_EXCLAMATION = 0x21; /* ! */ -var CHAR_DOUBLE_QUOTE = 0x22; /* " */ -var CHAR_SHARP = 0x23; /* # */ -var CHAR_PERCENT = 0x25; /* % */ -var CHAR_AMPERSAND = 0x26; /* & */ -var CHAR_SINGLE_QUOTE = 0x27; /* ' */ -var CHAR_ASTERISK = 0x2A; /* * */ -var CHAR_COMMA = 0x2C; /* , */ -var CHAR_MINUS = 0x2D; /* - */ -var CHAR_COLON = 0x3A; /* : */ -var CHAR_EQUALS = 0x3D; /* = */ -var CHAR_GREATER_THAN = 0x3E; /* > */ -var CHAR_QUESTION = 0x3F; /* ? */ -var CHAR_COMMERCIAL_AT = 0x40; /* @ */ -var CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */ -var CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */ -var CHAR_GRAVE_ACCENT = 0x60; /* ` */ -var CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */ -var CHAR_VERTICAL_LINE = 0x7C; /* | */ -var CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */ - -var ESCAPE_SEQUENCES = {}; - -ESCAPE_SEQUENCES[0x00] = '\\0'; -ESCAPE_SEQUENCES[0x07] = '\\a'; -ESCAPE_SEQUENCES[0x08] = '\\b'; -ESCAPE_SEQUENCES[0x09] = '\\t'; -ESCAPE_SEQUENCES[0x0A] = '\\n'; -ESCAPE_SEQUENCES[0x0B] = '\\v'; -ESCAPE_SEQUENCES[0x0C] = '\\f'; -ESCAPE_SEQUENCES[0x0D] = '\\r'; -ESCAPE_SEQUENCES[0x1B] = '\\e'; -ESCAPE_SEQUENCES[0x22] = '\\"'; -ESCAPE_SEQUENCES[0x5C] = '\\\\'; -ESCAPE_SEQUENCES[0x85] = '\\N'; -ESCAPE_SEQUENCES[0xA0] = '\\_'; -ESCAPE_SEQUENCES[0x2028] = '\\L'; -ESCAPE_SEQUENCES[0x2029] = '\\P'; - -var DEPRECATED_BOOLEANS_SYNTAX = [ - 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', - 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF' -]; - -var DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/; - -function compileStyleMap(schema, map) { - var result, keys, index, length, tag, style, type; - - if (map === null) return {}; - - result = {}; - keys = Object.keys(map); - - for (index = 0, length = keys.length; index < length; index += 1) { - tag = keys[index]; - style = String(map[tag]); - - if (tag.slice(0, 2) === '!!') { - tag = 'tag:yaml.org,2002:' + tag.slice(2); - } - type = schema.compiledTypeMap['fallback'][tag]; - - if (type && _hasOwnProperty.call(type.styleAliases, style)) { - style = type.styleAliases[style]; - } - - result[tag] = style; - } - - return result; -} - -function encodeHex(character) { - var string, handle, length; - - string = character.toString(16).toUpperCase(); - - if (character <= 0xFF) { - handle = 'x'; - length = 2; - } else if (character <= 0xFFFF) { - handle = 'u'; - length = 4; - } else if (character <= 0xFFFFFFFF) { - handle = 'U'; - length = 8; - } else { - throw new exception('code point within a string may not be greater than 0xFFFFFFFF'); - } - - return '\\' + handle + common.repeat('0', length - string.length) + string; -} - - -var QUOTING_TYPE_SINGLE = 1, - QUOTING_TYPE_DOUBLE = 2; - -function State(options) { - this.schema = options['schema'] || _default; - this.indent = Math.max(1, (options['indent'] || 2)); - this.noArrayIndent = options['noArrayIndent'] || false; - this.skipInvalid = options['skipInvalid'] || false; - this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']); - this.styleMap = compileStyleMap(this.schema, options['styles'] || null); - this.sortKeys = options['sortKeys'] || false; - this.lineWidth = options['lineWidth'] || 80; - this.noRefs = options['noRefs'] || false; - this.noCompatMode = options['noCompatMode'] || false; - this.condenseFlow = options['condenseFlow'] || false; - this.quotingType = options['quotingType'] === '"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE; - this.forceQuotes = options['forceQuotes'] || false; - this.replacer = typeof options['replacer'] === 'function' ? options['replacer'] : null; - - this.implicitTypes = this.schema.compiledImplicit; - this.explicitTypes = this.schema.compiledExplicit; - - this.tag = null; - this.result = ''; - - this.duplicates = []; - this.usedDuplicates = null; -} - -// Indents every line in a string. Empty lines (\n only) are not indented. -function indentString(string, spaces) { - var ind = common.repeat(' ', spaces), - position = 0, - next = -1, - result = '', - line, - length = string.length; - - while (position < length) { - next = string.indexOf('\n', position); - if (next === -1) { - line = string.slice(position); - position = length; - } else { - line = string.slice(position, next + 1); - position = next + 1; - } - - if (line.length && line !== '\n') result += ind; - - result += line; - } - - return result; -} - -function generateNextLine(state, level) { - return '\n' + common.repeat(' ', state.indent * level); -} - -function testImplicitResolving(state, str) { - var index, length, type; - - for (index = 0, length = state.implicitTypes.length; index < length; index += 1) { - type = state.implicitTypes[index]; - - if (type.resolve(str)) { - return true; - } - } - - return false; -} - -// [33] s-white ::= s-space | s-tab -function isWhitespace(c) { - return c === CHAR_SPACE || c === CHAR_TAB; -} - -// Returns true if the character can be printed without escaping. -// From YAML 1.2: "any allowed characters known to be non-printable -// should also be escaped. [However,] This isn’t mandatory" -// Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029. -function isPrintable(c) { - return (0x00020 <= c && c <= 0x00007E) - || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029) - || ((0x0E000 <= c && c <= 0x00FFFD) && c !== CHAR_BOM) - || (0x10000 <= c && c <= 0x10FFFF); -} - -// [34] ns-char ::= nb-char - s-white -// [27] nb-char ::= c-printable - b-char - c-byte-order-mark -// [26] b-char ::= b-line-feed | b-carriage-return -// Including s-white (for some reason, examples doesn't match specs in this aspect) -// ns-char ::= c-printable - b-line-feed - b-carriage-return - c-byte-order-mark -function isNsCharOrWhitespace(c) { - return isPrintable(c) - && c !== CHAR_BOM - // - b-char - && c !== CHAR_CARRIAGE_RETURN - && c !== CHAR_LINE_FEED; -} - -// [127] ns-plain-safe(c) ::= c = flow-out ⇒ ns-plain-safe-out -// c = flow-in ⇒ ns-plain-safe-in -// c = block-key ⇒ ns-plain-safe-out -// c = flow-key ⇒ ns-plain-safe-in -// [128] ns-plain-safe-out ::= ns-char -// [129] ns-plain-safe-in ::= ns-char - c-flow-indicator -// [130] ns-plain-char(c) ::= ( ns-plain-safe(c) - “:” - “#” ) -// | ( /* An ns-char preceding */ “#” ) -// | ( “:” /* Followed by an ns-plain-safe(c) */ ) -function isPlainSafe(c, prev, inblock) { - var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c); - var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c); - return ( - // ns-plain-safe - inblock ? // c = flow-in - cIsNsCharOrWhitespace - : cIsNsCharOrWhitespace - // - c-flow-indicator - && c !== CHAR_COMMA - && c !== CHAR_LEFT_SQUARE_BRACKET - && c !== CHAR_RIGHT_SQUARE_BRACKET - && c !== CHAR_LEFT_CURLY_BRACKET - && c !== CHAR_RIGHT_CURLY_BRACKET - ) - // ns-plain-char - && c !== CHAR_SHARP // false on '#' - && !(prev === CHAR_COLON && !cIsNsChar) // false on ': ' - || (isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP) // change to true on '[^ ]#' - || (prev === CHAR_COLON && cIsNsChar); // change to true on ':[^ ]' -} - -// Simplified test for values allowed as the first character in plain style. -function isPlainSafeFirst(c) { - // Uses a subset of ns-char - c-indicator - // where ns-char = nb-char - s-white. - // No support of ( ( “?” | “:” | “-” ) /* Followed by an ns-plain-safe(c)) */ ) part - return isPrintable(c) && c !== CHAR_BOM - && !isWhitespace(c) // - s-white - // - (c-indicator ::= - // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}” - && c !== CHAR_MINUS - && c !== CHAR_QUESTION - && c !== CHAR_COLON - && c !== CHAR_COMMA - && c !== CHAR_LEFT_SQUARE_BRACKET - && c !== CHAR_RIGHT_SQUARE_BRACKET - && c !== CHAR_LEFT_CURLY_BRACKET - && c !== CHAR_RIGHT_CURLY_BRACKET - // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"” - && c !== CHAR_SHARP - && c !== CHAR_AMPERSAND - && c !== CHAR_ASTERISK - && c !== CHAR_EXCLAMATION - && c !== CHAR_VERTICAL_LINE - && c !== CHAR_EQUALS - && c !== CHAR_GREATER_THAN - && c !== CHAR_SINGLE_QUOTE - && c !== CHAR_DOUBLE_QUOTE - // | “%” | “@” | “`”) - && c !== CHAR_PERCENT - && c !== CHAR_COMMERCIAL_AT - && c !== CHAR_GRAVE_ACCENT; -} - -// Simplified test for values allowed as the last character in plain style. -function isPlainSafeLast(c) { - // just not whitespace or colon, it will be checked to be plain character later - return !isWhitespace(c) && c !== CHAR_COLON; -} - -// Same as 'string'.codePointAt(pos), but works in older browsers. -function codePointAt(string, pos) { - var first = string.charCodeAt(pos), second; - if (first >= 0xD800 && first <= 0xDBFF && pos + 1 < string.length) { - second = string.charCodeAt(pos + 1); - if (second >= 0xDC00 && second <= 0xDFFF) { - // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae - return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; - } - } - return first; -} - -// Determines whether block indentation indicator is required. -function needIndentIndicator(string) { - var leadingSpaceRe = /^\n* /; - return leadingSpaceRe.test(string); -} - -var STYLE_PLAIN = 1, - STYLE_SINGLE = 2, - STYLE_LITERAL = 3, - STYLE_FOLDED = 4, - STYLE_DOUBLE = 5; - -// Determines which scalar styles are possible and returns the preferred style. -// lineWidth = -1 => no limit. -// Pre-conditions: str.length > 0. -// Post-conditions: -// STYLE_PLAIN or STYLE_SINGLE => no \n are in the string. -// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1). -// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1). -function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, - testAmbiguousType, quotingType, forceQuotes, inblock) { - - var i; - var char = 0; - var prevChar = null; - var hasLineBreak = false; - var hasFoldableLine = false; // only checked if shouldTrackWidth - var shouldTrackWidth = lineWidth !== -1; - var previousLineBreak = -1; // count the first line correctly - var plain = isPlainSafeFirst(codePointAt(string, 0)) - && isPlainSafeLast(codePointAt(string, string.length - 1)); - - if (singleLineOnly || forceQuotes) { - // Case: no block styles. - // Check for disallowed characters to rule out plain and single. - for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { - char = codePointAt(string, i); - if (!isPrintable(char)) { - return STYLE_DOUBLE; - } - plain = plain && isPlainSafe(char, prevChar, inblock); - prevChar = char; - } - } else { - // Case: block styles permitted. - for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { - char = codePointAt(string, i); - if (char === CHAR_LINE_FEED) { - hasLineBreak = true; - // Check if any line can be folded. - if (shouldTrackWidth) { - hasFoldableLine = hasFoldableLine || - // Foldable line = too long, and not more-indented. - (i - previousLineBreak - 1 > lineWidth && - string[previousLineBreak + 1] !== ' '); - previousLineBreak = i; - } - } else if (!isPrintable(char)) { - return STYLE_DOUBLE; - } - plain = plain && isPlainSafe(char, prevChar, inblock); - prevChar = char; - } - // in case the end is missing a \n - hasFoldableLine = hasFoldableLine || (shouldTrackWidth && - (i - previousLineBreak - 1 > lineWidth && - string[previousLineBreak + 1] !== ' ')); - } - // Although every style can represent \n without escaping, prefer block styles - // for multiline, since they're more readable and they don't add empty lines. - // Also prefer folding a super-long line. - if (!hasLineBreak && !hasFoldableLine) { - // Strings interpretable as another type have to be quoted; - // e.g. the string 'true' vs. the boolean true. - if (plain && !forceQuotes && !testAmbiguousType(string)) { - return STYLE_PLAIN; - } - return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; - } - // Edge case: block indentation indicator can only have one digit. - if (indentPerLevel > 9 && needIndentIndicator(string)) { - return STYLE_DOUBLE; - } - // At this point we know block styles are valid. - // Prefer literal style unless we want to fold. - if (!forceQuotes) { - return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL; - } - return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; -} - -// Note: line breaking/folding is implemented for only the folded style. -// NB. We drop the last trailing newline (if any) of a returned block scalar -// since the dumper adds its own newline. This always works: -// • No ending newline => unaffected; already using strip "-" chomping. -// • Ending newline => removed then restored. -// Importantly, this keeps the "+" chomp indicator from gaining an extra line. -function writeScalar(state, string, level, iskey, inblock) { - state.dump = (function () { - if (string.length === 0) { - return state.quotingType === QUOTING_TYPE_DOUBLE ? '""' : "''"; - } - if (!state.noCompatMode) { - if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) { - return state.quotingType === QUOTING_TYPE_DOUBLE ? ('"' + string + '"') : ("'" + string + "'"); - } - } - - var indent = state.indent * Math.max(1, level); // no 0-indent scalars - // As indentation gets deeper, let the width decrease monotonically - // to the lower bound min(state.lineWidth, 40). - // Note that this implies - // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound. - // state.lineWidth > 40 + state.indent: width decreases until the lower bound. - // This behaves better than a constant minimum width which disallows narrower options, - // or an indent threshold which causes the width to suddenly increase. - var lineWidth = state.lineWidth === -1 - ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); - - // Without knowing if keys are implicit/explicit, assume implicit for safety. - var singleLineOnly = iskey - // No block styles in flow mode. - || (state.flowLevel > -1 && level >= state.flowLevel); - function testAmbiguity(string) { - return testImplicitResolving(state, string); - } - - switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, - testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) { - - case STYLE_PLAIN: - return string; - case STYLE_SINGLE: - return "'" + string.replace(/'/g, "''") + "'"; - case STYLE_LITERAL: - return '|' + blockHeader(string, state.indent) - + dropEndingNewline(indentString(string, indent)); - case STYLE_FOLDED: - return '>' + blockHeader(string, state.indent) - + dropEndingNewline(indentString(foldString(string, lineWidth), indent)); - case STYLE_DOUBLE: - return '"' + escapeString(string) + '"'; - default: - throw new exception('impossible error: invalid scalar style'); - } - }()); -} - -// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9. -function blockHeader(string, indentPerLevel) { - var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ''; - - // note the special case: the string '\n' counts as a "trailing" empty line. - var clip = string[string.length - 1] === '\n'; - var keep = clip && (string[string.length - 2] === '\n' || string === '\n'); - var chomp = keep ? '+' : (clip ? '' : '-'); - - return indentIndicator + chomp + '\n'; -} - -// (See the note for writeScalar.) -function dropEndingNewline(string) { - return string[string.length - 1] === '\n' ? string.slice(0, -1) : string; -} - -// Note: a long line without a suitable break point will exceed the width limit. -// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0. -function foldString(string, width) { - // In folded style, $k$ consecutive newlines output as $k+1$ newlines— - // unless they're before or after a more-indented line, or at the very - // beginning or end, in which case $k$ maps to $k$. - // Therefore, parse each chunk as newline(s) followed by a content line. - var lineRe = /(\n+)([^\n]*)/g; - - // first line (possibly an empty line) - var result = (function () { - var nextLF = string.indexOf('\n'); - nextLF = nextLF !== -1 ? nextLF : string.length; - lineRe.lastIndex = nextLF; - return foldLine(string.slice(0, nextLF), width); - }()); - // If we haven't reached the first content line yet, don't add an extra \n. - var prevMoreIndented = string[0] === '\n' || string[0] === ' '; - var moreIndented; - - // rest of the lines - var match; - while ((match = lineRe.exec(string))) { - var prefix = match[1], line = match[2]; - moreIndented = (line[0] === ' '); - result += prefix - + (!prevMoreIndented && !moreIndented && line !== '' - ? '\n' : '') - + foldLine(line, width); - prevMoreIndented = moreIndented; - } - - return result; -} - -// Greedy line breaking. -// Picks the longest line under the limit each time, -// otherwise settles for the shortest line over the limit. -// NB. More-indented lines *cannot* be folded, as that would add an extra \n. -function foldLine(line, width) { - if (line === '' || line[0] === ' ') return line; - - // Since a more-indented line adds a \n, breaks can't be followed by a space. - var breakRe = / [^ ]/g; // note: the match index will always be <= length-2. - var match; - // start is an inclusive index. end, curr, and next are exclusive. - var start = 0, end, curr = 0, next = 0; - var result = ''; - - // Invariants: 0 <= start <= length-1. - // 0 <= curr <= next <= max(0, length-2). curr - start <= width. - // Inside the loop: - // A match implies length >= 2, so curr and next are <= length-2. - while ((match = breakRe.exec(line))) { - next = match.index; - // maintain invariant: curr - start <= width - if (next - start > width) { - end = (curr > start) ? curr : next; // derive end <= length-2 - result += '\n' + line.slice(start, end); - // skip the space that was output as \n - start = end + 1; // derive start <= length-1 - } - curr = next; - } - - // By the invariants, start <= length-1, so there is something left over. - // It is either the whole string or a part starting from non-whitespace. - result += '\n'; - // Insert a break if the remainder is too long and there is a break available. - if (line.length - start > width && curr > start) { - result += line.slice(start, curr) + '\n' + line.slice(curr + 1); - } else { - result += line.slice(start); - } - - return result.slice(1); // drop extra \n joiner -} - -// Escapes a double-quoted string. -function escapeString(string) { - var result = ''; - var char = 0; - var escapeSeq; - - for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { - char = codePointAt(string, i); - escapeSeq = ESCAPE_SEQUENCES[char]; - - if (!escapeSeq && isPrintable(char)) { - result += string[i]; - if (char >= 0x10000) result += string[i + 1]; - } else { - result += escapeSeq || encodeHex(char); - } - } - - return result; -} - -function writeFlowSequence(state, level, object) { - var _result = '', - _tag = state.tag, - index, - length, - value; - - for (index = 0, length = object.length; index < length; index += 1) { - value = object[index]; - - if (state.replacer) { - value = state.replacer.call(object, String(index), value); - } - - // Write only valid elements, put null instead of invalid elements. - if (writeNode(state, level, value, false, false) || - (typeof value === 'undefined' && - writeNode(state, level, null, false, false))) { - - if (_result !== '') _result += ',' + (!state.condenseFlow ? ' ' : ''); - _result += state.dump; - } - } - - state.tag = _tag; - state.dump = '[' + _result + ']'; -} - -function writeBlockSequence(state, level, object, compact) { - var _result = '', - _tag = state.tag, - index, - length, - value; - - for (index = 0, length = object.length; index < length; index += 1) { - value = object[index]; - - if (state.replacer) { - value = state.replacer.call(object, String(index), value); - } - - // Write only valid elements, put null instead of invalid elements. - if (writeNode(state, level + 1, value, true, true, false, true) || - (typeof value === 'undefined' && - writeNode(state, level + 1, null, true, true, false, true))) { - - if (!compact || _result !== '') { - _result += generateNextLine(state, level); - } - - if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { - _result += '-'; - } else { - _result += '- '; - } - - _result += state.dump; - } - } - - state.tag = _tag; - state.dump = _result || '[]'; // Empty sequence if no valid values. -} - -function writeFlowMapping(state, level, object) { - var _result = '', - _tag = state.tag, - objectKeyList = Object.keys(object), - index, - length, - objectKey, - objectValue, - pairBuffer; - - for (index = 0, length = objectKeyList.length; index < length; index += 1) { - - pairBuffer = ''; - if (_result !== '') pairBuffer += ', '; - - if (state.condenseFlow) pairBuffer += '"'; - - objectKey = objectKeyList[index]; - objectValue = object[objectKey]; - - if (state.replacer) { - objectValue = state.replacer.call(object, objectKey, objectValue); - } - - if (!writeNode(state, level, objectKey, false, false)) { - continue; // Skip this pair because of invalid key; - } - - if (state.dump.length > 1024) pairBuffer += '? '; - - pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' '); - - if (!writeNode(state, level, objectValue, false, false)) { - continue; // Skip this pair because of invalid value. - } - - pairBuffer += state.dump; - - // Both key and value are valid. - _result += pairBuffer; - } - - state.tag = _tag; - state.dump = '{' + _result + '}'; -} - -function writeBlockMapping(state, level, object, compact) { - var _result = '', - _tag = state.tag, - objectKeyList = Object.keys(object), - index, - length, - objectKey, - objectValue, - explicitPair, - pairBuffer; - - // Allow sorting keys so that the output file is deterministic - if (state.sortKeys === true) { - // Default sorting - objectKeyList.sort(); - } else if (typeof state.sortKeys === 'function') { - // Custom sort function - objectKeyList.sort(state.sortKeys); - } else if (state.sortKeys) { - // Something is wrong - throw new exception('sortKeys must be a boolean or a function'); - } - - for (index = 0, length = objectKeyList.length; index < length; index += 1) { - pairBuffer = ''; - - if (!compact || _result !== '') { - pairBuffer += generateNextLine(state, level); - } - - objectKey = objectKeyList[index]; - objectValue = object[objectKey]; - - if (state.replacer) { - objectValue = state.replacer.call(object, objectKey, objectValue); - } - - if (!writeNode(state, level + 1, objectKey, true, true, true)) { - continue; // Skip this pair because of invalid key. - } - - explicitPair = (state.tag !== null && state.tag !== '?') || - (state.dump && state.dump.length > 1024); - - if (explicitPair) { - if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { - pairBuffer += '?'; - } else { - pairBuffer += '? '; - } - } - - pairBuffer += state.dump; - - if (explicitPair) { - pairBuffer += generateNextLine(state, level); - } - - if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { - continue; // Skip this pair because of invalid value. - } - - if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { - pairBuffer += ':'; - } else { - pairBuffer += ': '; - } - - pairBuffer += state.dump; - - // Both key and value are valid. - _result += pairBuffer; - } - - state.tag = _tag; - state.dump = _result || '{}'; // Empty mapping if no valid pairs. -} - -function detectType(state, object, explicit) { - var _result, typeList, index, length, type, style; - - typeList = explicit ? state.explicitTypes : state.implicitTypes; - - for (index = 0, length = typeList.length; index < length; index += 1) { - type = typeList[index]; - - if ((type.instanceOf || type.predicate) && - (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) && - (!type.predicate || type.predicate(object))) { - - if (explicit) { - if (type.multi && type.representName) { - state.tag = type.representName(object); - } else { - state.tag = type.tag; - } - } else { - state.tag = '?'; - } - - if (type.represent) { - style = state.styleMap[type.tag] || type.defaultStyle; - - if (_toString.call(type.represent) === '[object Function]') { - _result = type.represent(object, style); - } else if (_hasOwnProperty.call(type.represent, style)) { - _result = type.represent[style](object, style); - } else { - throw new exception('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); - } - - state.dump = _result; - } - - return true; - } - } - - return false; -} - -// Serializes `object` and writes it to global `result`. -// Returns true on success, or false on invalid object. -// -function writeNode(state, level, object, block, compact, iskey, isblockseq) { - state.tag = null; - state.dump = object; - - if (!detectType(state, object, false)) { - detectType(state, object, true); - } - - var type = _toString.call(state.dump); - var inblock = block; - var tagStr; - - if (block) { - block = (state.flowLevel < 0 || state.flowLevel > level); - } - - var objectOrArray = type === '[object Object]' || type === '[object Array]', - duplicateIndex, - duplicate; - - if (objectOrArray) { - duplicateIndex = state.duplicates.indexOf(object); - duplicate = duplicateIndex !== -1; - } - - if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) { - compact = false; - } - - if (duplicate && state.usedDuplicates[duplicateIndex]) { - state.dump = '*ref_' + duplicateIndex; - } else { - if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { - state.usedDuplicates[duplicateIndex] = true; - } - if (type === '[object Object]') { - if (block && (Object.keys(state.dump).length !== 0)) { - writeBlockMapping(state, level, state.dump, compact); - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + state.dump; - } - } else { - writeFlowMapping(state, level, state.dump); - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; - } - } - } else if (type === '[object Array]') { - if (block && (state.dump.length !== 0)) { - if (state.noArrayIndent && !isblockseq && level > 0) { - writeBlockSequence(state, level - 1, state.dump, compact); - } else { - writeBlockSequence(state, level, state.dump, compact); - } - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + state.dump; - } - } else { - writeFlowSequence(state, level, state.dump); - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; - } - } - } else if (type === '[object String]') { - if (state.tag !== '?') { - writeScalar(state, state.dump, level, iskey, inblock); - } - } else if (type === '[object Undefined]') { - return false; - } else { - if (state.skipInvalid) return false; - throw new exception('unacceptable kind of an object to dump ' + type); - } - - if (state.tag !== null && state.tag !== '?') { - // Need to encode all characters except those allowed by the spec: - // - // [35] ns-dec-digit ::= [#x30-#x39] /* 0-9 */ - // [36] ns-hex-digit ::= ns-dec-digit - // | [#x41-#x46] /* A-F */ | [#x61-#x66] /* a-f */ - // [37] ns-ascii-letter ::= [#x41-#x5A] /* A-Z */ | [#x61-#x7A] /* a-z */ - // [38] ns-word-char ::= ns-dec-digit | ns-ascii-letter | “-” - // [39] ns-uri-char ::= “%” ns-hex-digit ns-hex-digit | ns-word-char | “#” - // | “;” | “/” | “?” | “:” | “@” | “&” | “=” | “+” | “$” | “,” - // | “_” | “.” | “!” | “~” | “*” | “'” | “(” | “)” | “[” | “]” - // - // Also need to encode '!' because it has special meaning (end of tag prefix). - // - tagStr = encodeURI( - state.tag[0] === '!' ? state.tag.slice(1) : state.tag - ).replace(/!/g, '%21'); - - if (state.tag[0] === '!') { - tagStr = '!' + tagStr; - } else if (tagStr.slice(0, 18) === 'tag:yaml.org,2002:') { - tagStr = '!!' + tagStr.slice(18); - } else { - tagStr = '!<' + tagStr + '>'; - } - - state.dump = tagStr + ' ' + state.dump; - } - } - - return true; -} - -function getDuplicateReferences(object, state) { - var objects = [], - duplicatesIndexes = [], - index, - length; - - inspectNode(object, objects, duplicatesIndexes); - - for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) { - state.duplicates.push(objects[duplicatesIndexes[index]]); - } - state.usedDuplicates = new Array(length); -} - -function inspectNode(object, objects, duplicatesIndexes) { - var objectKeyList, - index, - length; - - if (object !== null && typeof object === 'object') { - index = objects.indexOf(object); - if (index !== -1) { - if (duplicatesIndexes.indexOf(index) === -1) { - duplicatesIndexes.push(index); - } - } else { - objects.push(object); - - if (Array.isArray(object)) { - for (index = 0, length = object.length; index < length; index += 1) { - inspectNode(object[index], objects, duplicatesIndexes); - } - } else { - objectKeyList = Object.keys(object); - - for (index = 0, length = objectKeyList.length; index < length; index += 1) { - inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes); - } - } - } - } -} - -function dump$1(input, options) { - options = options || {}; - - var state = new State(options); - - if (!state.noRefs) getDuplicateReferences(input, state); - - var value = input; - - if (state.replacer) { - value = state.replacer.call({ '': value }, '', value); - } - - if (writeNode(state, 0, value, true, true)) return state.dump + '\n'; - - return ''; -} - -var dump_1 = dump$1; - -var dumper = { - dump: dump_1 -}; -var load = loader.load; -var dump = dumper.dump; - -const YAML = (app) => ` -name: CI - -env: - DEBUG: 'napi:*' - APP_NAME: '${app}' - MACOSX_DEPLOYMENT_TARGET: '10.13' - -permissions: - contents: write - id-token: write - -on: - push: - branches: - - main - tags-ignore: - - '**' - paths-ignore: - - '**/*.md' - - 'LICENSE' - - '**/*.gitignore' - - '.editorconfig' - - 'docs/**' - pull_request: - -jobs: - build: - - strategy: - fail-fast: false - matrix: - settings: - - host: macos-latest - target: 'x86_64-apple-darwin' - build: yarn build --target x86_64-apple-darwin - - host: windows-latest - build: yarn build --target x86_64-pc-windows-msvc - target: 'x86_64-pc-windows-msvc' - - host: windows-latest - build: | - yarn build --target i686-pc-windows-msvc - yarn test - target: 'i686-pc-windows-msvc' - - host: ubuntu-latest - target: 'x86_64-unknown-linux-gnu' - docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian - build: yarn build --target x86_64-unknown-linux-gnu - - host: ubuntu-latest - target: 'x86_64-unknown-linux-musl' - docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine - build: yarn build --target x86_64-unknown-linux-musl - - host: macos-latest - target: 'aarch64-apple-darwin' - build: yarn build --target aarch64-apple-darwin - - host: ubuntu-latest - target: 'aarch64-unknown-linux-gnu' - docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-aarch64 - build: yarn build --target aarch64-unknown-linux-gnu - - host: ubuntu-latest - target: 'armv7-unknown-linux-gnueabihf' - setup: | - sudo apt-get update - sudo apt-get install gcc-arm-linux-gnueabihf -y - build: yarn build --target armv7-unknown-linux-gnueabihf - - host: ubuntu-latest - target: 'armv7-unknown-linux-musleabihf' - build: yarn build --target armv7-unknown-linux-musleabihf - - host: ubuntu-latest - target: 'aarch64-linux-android' - build: yarn build --target aarch64-linux-android - - host: ubuntu-latest - target: 'armv7-linux-androideabi' - build: yarn build --target armv7-linux-androideabi - - host: ubuntu-latest - target: 'aarch64-unknown-linux-musl' - docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine - build: >- - set -e &&\n - rustup target add aarch64-unknown-linux-musl &&\n - yarn build --target aarch64-unknown-linux-musl - - host: windows-latest - target: 'aarch64-pc-windows-msvc' - build: yarn build --target aarch64-pc-windows-msvc - - host: ubuntu-latest - target: 'riscv64gc-unknown-linux-gnu' - setup: | - sudo apt-get update - sudo apt-get install gcc-riscv64-linux-gnu -y - build: yarn build --target riscv64gc-unknown-linux-gnu - - name: stable - \${{ matrix.settings.target }} - node@20 - runs-on: \${{ matrix.settings.host }} - - steps: - - uses: actions/checkout@v4 - - - name: Setup node - uses: actions/setup-node@v4 - if: \${{ !matrix.settings.docker }} - with: - node-version: 20 - cache: yarn - - - name: Install - uses: dtolnay/rust-toolchain@stable - if: \${{ !matrix.settings.docker }} - with: - toolchain: stable - targets: \${{ matrix.settings.target }} - - - name: Cache cargo - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry/index/ - ~/.cargo/registry/cache/ - ~/.cargo/git/db/ - .cargo-cache - target/ - key: \${{ matrix.settings.target }}-cargo-\${{ matrix.settings.host }} - - - uses: goto-bus-stop/setup-zig@v2 - if: \${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' || matrix.settings.target == 'armv7-unknown-linux-musleabihf' }} - with: - version: 0.13.0 - - - name: Setup toolchain - run: \${{ matrix.settings.setup }} - if: \${{ matrix.settings.setup }} - shell: bash - - - name: Setup node x86 - if: matrix.settings.target == 'i686-pc-windows-msvc' - run: yarn config set supportedArchitectures.cpu "ia32" - shell: bash - - - name: 'Install dependencies' - run: yarn install - - - name: Setup node x86 - uses: actions/setup-node@v4 - if: matrix.settings.target == 'i686-pc-windows-msvc' - with: - node-version: 20 - cache: yarn - architecture: x86 - - - name: Build in docker - uses: addnab/docker-run-action@v3 - if: \${{ matrix.settings.docker }} - with: - image: \${{ matrix.settings.docker }} - options: --user 0:0 -v \${{ github.workspace }}/.cargo-cache/git/db:/usr/local/cargo/git/db -v \${{ github.workspace }}/.cargo/registry/cache:/usr/local/cargo/registry/cache -v \${{ github.workspace }}/.cargo/registry/index:/usr/local/cargo/registry/index -v \${{ github.workspace }}:/build -w /build - run: \${{ matrix.settings.build }} - - - name: 'Build' - run: \${{ matrix.settings.build }} - if: \${{ !matrix.settings.docker }} - shell: bash - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: bindings-\${{ matrix.settings.target }} - path: \${{ env.APP_NAME }}.*.node - if-no-files-found: error - - build-freebsd: - runs-on: macos-13 - name: Build FreeBSD - steps: - - uses: actions/checkout@v4 - - name: Build - id: build - uses: cross-platform-actions/action@v0.24.0 - env: - DEBUG: 'napi:*' - RUSTUP_IO_THREADS: 1 - with: - operating_system: freebsd - version: '13.2' - memory: 8G - cpu_count: 3 - environment_variables: 'DEBUG RUSTUP_IO_THREADS' - shell: bash - run: | - sudo pkg install -y -f curl node libnghttp2 npm - sudo npm install -g yarn --ignore-scripts - curl https://sh.rustup.rs -sSf --output rustup.sh - sh rustup.sh -y --profile minimal --default-toolchain stable - source "$HOME/.cargo/env" - echo "~~~~ rustc --version ~~~~" - rustc --version - echo "~~~~ node -v ~~~~" - node -v - echo "~~~~ yarn --version ~~~~" - yarn --version - pwd - ls -lah - whoami - env - freebsd-version - yarn install - yarn build - yarn test - rm -rf node_modules - rm -rf target - rm -rf .yarn/cache - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: bindings-freebsd - path: \${{ env.APP_NAME }}.*.node - if-no-files-found: error - - test-macOS-windows-binding: - name: Test bindings on \${{ matrix.settings.target }} - node@\${{ matrix.node }} - needs: - - build - strategy: - fail-fast: false - matrix: - settings: - - host: macos-latest - target: 'x86_64-apple-darwin' - - host: windows-latest - target: 'x86_64-pc-windows-msvc' - node: ['18', '20'] - runs-on: \${{ matrix.settings.host }} - - steps: - - uses: actions/checkout@v4 - - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version: \${{ matrix.node }} - cache: 'yarn' - architecture: x64 - - - name: 'Install dependencies' - run: yarn install - - - name: Download artifacts - uses: actions/download-artifact@v4 - with: - name: bindings-\${{ matrix.settings.target }} - path: . - - - name: List packages - run: ls -R . - shell: bash - - - name: Test bindings - run: yarn test - - test-linux-x64-gnu-binding: - name: Test bindings on Linux-x64-gnu - node@\${{ matrix.node }} - needs: - - build - strategy: - fail-fast: false - matrix: - node: ['18', '20'] - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version: \${{ matrix.node }} - cache: 'yarn' - - - name: 'Install dependencies' - run: yarn install - - - name: Download artifacts - uses: actions/download-artifact@v4 - with: - name: bindings-x86_64-unknown-linux-gnu - path: . - - - name: List packages - run: ls -R . - shell: bash - - - name: Test bindings - run: docker run --rm -v $(pwd):/build -w /build node:\${{ matrix.node }}-slim yarn test - - test-linux-x64-musl-binding: - name: Test bindings on x86_64-unknown-linux-musl - node@\${{ matrix.node }} - needs: - - build - strategy: - fail-fast: false - matrix: - node: ['18', '20'] - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version: \${{ matrix.node }} - cache: 'yarn' - - - name: 'Install dependencies' - run: | - yarn config set supportedArchitectures.libc "musl" - yarn install - - - name: Download artifacts - uses: actions/download-artifact@v4 - with: - name: bindings-x86_64-unknown-linux-musl - path: . - - - name: List packages - run: ls -R . - shell: bash - - - name: Test bindings - run: docker run --rm -v $(pwd):/build -w /build node:\${{ matrix.node }}-alpine yarn test - - test-linux-aarch64-gnu-binding: - name: Test bindings on aarch64-unknown-linux-gnu - node@\${{ matrix.node }} - needs: - - build - strategy: - fail-fast: false - matrix: - node: ['18', '20'] - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: Download artifacts - uses: actions/download-artifact@v4 - with: - name: bindings-aarch64-unknown-linux-gnu - path: . - - - name: List packages - run: ls -R . - shell: bash - - - name: Install dependencies - run: | - yarn config set supportedArchitectures.cpu "arm64" - yarn config set supportedArchitectures.libc "glibc" - yarn install - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - with: - platforms: arm64 - - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - - - name: Setup and run tests - uses: addnab/docker-run-action@v3 - with: - image: node:\${{ matrix.node }}-slim - options: --platform linux/arm64 -v \${{ github.workspace }}:/build -w /build - run: | - set -e - yarn test - ls -la - - test-linux-aarch64-musl-binding: - name: Test bindings on aarch64-unknown-linux-musl - node@\${{ matrix.node }} - needs: - - build - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: Download artifacts - uses: actions/download-artifact@v4 - with: - name: bindings-aarch64-unknown-linux-musl - path: . - - - name: List packages - run: ls -R . - shell: bash - - - name: Install dependencies - run: | - yarn config set supportedArchitectures.cpu "arm64" - yarn config set supportedArchitectures.libc "musl" - yarn install - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - with: - platforms: arm64 - - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - - - name: Setup and run tests - uses: addnab/docker-run-action@v3 - with: - image: node:lts-alpine - options: --platform linux/arm64 -v \${{ github.workspace }}:/build -w /build - run: | - set -e - yarn test - - test-linux-arm-gnueabihf-binding: - name: Test bindings on armv7-unknown-linux-gnueabihf - node@\${{ matrix.node }} - needs: - - build - strategy: - fail-fast: false - matrix: - node: ['18', '20'] - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: Download artifacts - uses: actions/download-artifact@v4 - with: - name: bindings-armv7-unknown-linux-gnueabihf - path: . - - - name: List packages - run: ls -R . - shell: bash - - - name: Install dependencies - run: | - yarn config set supportedArchitectures.cpu "arm" - yarn install - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - with: - platforms: arm - - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - - - name: Setup and run tests - uses: addnab/docker-run-action@v3 - with: - image: node:\${{ matrix.node }}-bullseye-slim - options: --platform linux/arm/v7 -v \${{ github.workspace }}:/build -w /build - run: | - set -e - yarn test - ls -la - - universal-macOS: - name: Build universal macOS binary - needs: - - build - runs-on: macos-latest - - steps: - - uses: actions/checkout@v4 - - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version: 20 - cache: yarn - - - name: 'Install dependencies' - run: yarn install - - - name: Download macOS x64 artifact - uses: actions/download-artifact@v4 - with: - name: bindings-x86_64-apple-darwin - path: artifacts - - name: Download macOS arm64 artifact - uses: actions/download-artifact@v4 - with: - name: bindings-aarch64-apple-darwin - path: artifacts - - - name: Combine binaries - run: yarn universal - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: bindings-universal-apple-darwin - path: \${{ env.APP_NAME }}.*.node - if-no-files-found: error - - publish: - name: Publish - runs-on: ubuntu-latest - needs: - - test-linux-x64-gnu-binding - - test-linux-x64-musl-binding - - test-linux-aarch64-gnu-binding - - test-linux-arm-gnueabihf-binding - - test-macOS-windows-binding - - test-linux-aarch64-musl-binding - - build-freebsd - - steps: - - uses: actions/checkout@v4 - - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version: 20 - cache: 'yarn' - - - name: 'Install dependencies' - run: yarn install - - - name: Download all artifacts - uses: actions/download-artifact@v4 - with: - path: artifacts - - - name: Move artifacts - run: yarn artifacts - - - name: List packages - run: ls -R ./npm - shell: bash - - - name: Publish - run: | - npm config set provenance true - if git log -1 --pretty=%B | grep "^[0-9]\\+\\.[0-9]\\+\\.[0-9]\\+$"; - then - echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc - npm publish --access public - elif git log -1 --pretty=%B | grep "^[0-9]\\+\\.[0-9]\\+\\.[0-9]\\+"; - then - echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc - npm publish --tag next --access public - else - echo "Not a release, skipping publish" - fi - env: - GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }} - NPM_TOKEN: \${{ secrets.NPM_TOKEN }} -`; - -const BUILD_FREEBSD = 'build-freebsd'; -const TEST_MACOS_WINDOWS = 'test-macOS-windows-binding'; -const TEST_LINUX_X64_GNU = 'test-linux-x64-gnu-binding'; -const TEST_LINUX_X64_MUSL = 'test-linux-x64-musl-binding'; -const TEST_LINUX_AARCH64_GNU = 'test-linux-aarch64-gnu-binding'; -const TEST_LINUX_AARCH64_MUSL = 'test-linux-aarch64-musl-binding'; -const TEST_LINUX_ARM_GNUEABIHF = 'test-linux-arm-gnueabihf-binding'; -const UNIVERSAL_MACOS = 'universal-macOS'; -const createGithubActionsCIYml = (binaryName, targets) => { - const allTargets = new Set(targets.flatMap((t) => { - var _a; - const platform = parseTriple(t); - if (platform.arch === 'universal') { - const srcTriples = (_a = UniArchsByPlatform[platform.platform]) === null || _a === void 0 ? void 0 : _a.map((arch) => t.replace('universal', NodeArchToCpu[arch])); - return [t, ...(srcTriples !== null && srcTriples !== void 0 ? srcTriples : [])]; - } - return [t]; - })); - const fullTemplate = load(YAML(binaryName)); - const requiredSteps = []; - const enableWindowsX86 = allTargets.has('x86_64-pc-windows-msvc'); - const enableMacOSX86 = allTargets.has('x86_64-apple-darwin'); - const enableLinuxX86Gnu = allTargets.has('x86_64-unknown-linux-gnu'); - const enableLinuxX86Musl = allTargets.has('x86_64-unknown-linux-musl'); - const enableLinuxArm8Gnu = allTargets.has('aarch64-unknown-linux-gnu'); - const enableLinuxArm8Musl = allTargets.has('aarch64-unknown-linux-musl'); - const enableLinuxArm7 = allTargets.has('armv7-unknown-linux-gnueabihf'); - const enableFreeBSD = allTargets.has('x86_64-unknown-freebsd'); - const enableMacOSUni = allTargets.has('universal-apple-darwin'); - fullTemplate.env.APP_NAME = binaryName; - fullTemplate.jobs.build.strategy.matrix.settings = - fullTemplate.jobs.build.strategy.matrix.settings.filter(({ target }) => allTargets.has(target)); - if (!fullTemplate.jobs.build.strategy.matrix.settings.length) { - delete fullTemplate.jobs.build.strategy.matrix; - } - if (!enableFreeBSD) { - delete fullTemplate.jobs[BUILD_FREEBSD]; - } - else { - requiredSteps.push(BUILD_FREEBSD); - } - if (!enableWindowsX86 && !enableMacOSX86) { - delete fullTemplate.jobs[TEST_MACOS_WINDOWS]; - } - else { - const filterTargets = new Set(); - if (enableWindowsX86) { - filterTargets.add('windows-latest'); - } - if (enableMacOSX86 || enableMacOSUni) { - filterTargets.add('macos-latest'); - } - fullTemplate.jobs[TEST_MACOS_WINDOWS].strategy.matrix.settings = - fullTemplate.jobs[TEST_MACOS_WINDOWS].strategy.matrix.settings.filter(({ host }) => filterTargets.has(host)); - requiredSteps.push(TEST_MACOS_WINDOWS); - } - if (!enableLinuxX86Gnu) { - delete fullTemplate.jobs[TEST_LINUX_X64_GNU]; - } - else { - requiredSteps.push(TEST_LINUX_X64_GNU); - } - if (!enableLinuxX86Musl) { - delete fullTemplate.jobs[TEST_LINUX_X64_MUSL]; - } - else { - requiredSteps.push(TEST_LINUX_X64_MUSL); - } - if (!enableLinuxArm8Gnu) { - delete fullTemplate.jobs[TEST_LINUX_AARCH64_GNU]; - } - else { - requiredSteps.push(TEST_LINUX_AARCH64_GNU); - } - if (!enableLinuxArm8Musl) { - delete fullTemplate.jobs[TEST_LINUX_AARCH64_MUSL]; - } - else { - requiredSteps.push(TEST_LINUX_AARCH64_MUSL); - } - if (!enableLinuxArm7) { - delete fullTemplate.jobs[TEST_LINUX_ARM_GNUEABIHF]; - } - else { - requiredSteps.push(TEST_LINUX_ARM_GNUEABIHF); - } - if (!enableMacOSUni) { - delete fullTemplate.jobs[UNIVERSAL_MACOS]; - } - else { - requiredSteps.push(UNIVERSAL_MACOS); - } - fullTemplate.jobs.publish.needs = requiredSteps; - return dump(fullTemplate, { - lineWidth: 1000, - }); -}; - -const GitIgnore = `# Created by https://www.toptal.com/developers/gitignore/api/node -# Edit at https://www.toptal.com/developers/gitignore?templates=node - -### Node ### -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# TypeScript v1 declaration files -typings/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env -.env.test - -# parcel-bundler cache (https://parceljs.org/) -.cache - -# Next.js build output -.next - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# End of https://www.toptal.com/developers/gitignore/api/node - -# Created by https://www.toptal.com/developers/gitignore/api/macos -# Edit at https://www.toptal.com/developers/gitignore?templates=macos - -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### macOS Patch ### -# iCloud generated files -*.icloud - -# End of https://www.toptal.com/developers/gitignore/api/macos - -# Created by https://www.toptal.com/developers/gitignore/api/windows -# Edit at https://www.toptal.com/developers/gitignore?templates=windows - -### Windows ### -# Windows thumbnail cache files -Thumbs.db -Thumbs.db:encryptable -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -# End of https://www.toptal.com/developers/gitignore/api/windows - -#Added by cargo - -/target -Cargo.lock - -.pnp.* -.yarn/* -!.yarn/patches -!.yarn/plugins -!.yarn/releases -!.yarn/sdks -!.yarn/versions - -*.node -`; - -const LibRs = `#![deny(clippy::all)] - -#[macro_use] -extern crate napi_derive; - -#[napi] -pub fn sum(a: i32, b: i32) -> i32 { - a + b -} -`; - -const NPMIgnoreFiles = `target -Cargo.lock -.cargo -.github -npm -.eslintrc -.prettierignore -rustfmt.toml -yarn.lock -*.node -.yarn -__test__ -renovate.json -`; - -const createPackageJson = (name, binaryName, targets) => { - const pkgContent = { - name, - version: '0.0.0', - main: 'index.js', - types: 'index.d.ts', - napi: { - name: binaryName, - }, - license: 'MIT', - devDependencies: { - '@napi-rs/cli': `^${version$1}`, - ava: '^6.0.1', - }, - ava: { - timeout: '3m', - }, - engines: { - node: '>= 10', - }, - scripts: { - artifacts: 'napi artifacts', - build: 'napi build --platform --release', - 'build:debug': 'napi build --platform', - prepublishOnly: 'napi prepublish -t npm', - test: 'ava', - universal: 'napi universal', - version: 'napi version', - }, - }; - const triples = {}; - const defaultTargetsSupported = DefaultPlatforms.every((p) => targets.includes(p.raw)); - const isOnlyDefaultTargets = targets.length === 3 && - DefaultPlatforms.every((p) => targets.includes(p.raw)); - if (!isOnlyDefaultTargets) { - if (!defaultTargetsSupported) { - triples.defaults = false; - triples.additional = targets; - } - else { - triples.additional = targets.filter((t) => !DefaultPlatforms.map((p) => p.raw).includes(t)); - } - } - // @ts-expect-error - pkgContent.napi.triples = triples; - return pkgContent; -}; - -const NAME_PROMOTE_NAME = 'Package name'; -const DIR_PROMOTE_NAME = 'Dir name'; -const ENABLE_GITHUB_ACTIONS_PROMOTE_NAME = 'Enable github actions'; -const debug$5 = debugFactory('create'); -const BUILD_RS = `extern crate napi_build; - -fn main() { - napi_build::setup(); -} -`; -const SupportedPlatforms = [ - 'aarch64-apple-darwin', - 'aarch64-linux-android', - 'aarch64-unknown-linux-gnu', - 'aarch64-unknown-linux-musl', - 'aarch64-pc-windows-msvc', - 'armv7-unknown-linux-gnueabihf', - 'armv7-unknown-linux-musleabihf', - 'x86_64-apple-darwin', - 'x86_64-pc-windows-msvc', - 'x86_64-unknown-linux-gnu', - 'x86_64-unknown-linux-musl', - 'x86_64-unknown-freebsd', - 'i686-pc-windows-msvc', - 'armv7-linux-androideabi', - 'universal-apple-darwin', - 'riscv64gc-unknown-linux-gnu', -]; -class NewProjectCommand extends Command { - constructor() { - super(...arguments); - this.name = String$1({ - name: '-n,--name', - required: false, - }); - this.dirname = String$1({ - name: '-d,--dirname', - required: false, - }); - this.targets = Array$1('--targets,-t'); - this.dryRun = Boolean$1(`--dry-run`, false); - this.enableGithubActions = Boolean$1(`--enable-github-actions`); - } - execute() { - var _a, _b; - return __awaiter$1(this, void 0, void 0, function* () { - yield this.getName(); - if (!this.dirname) { - const [scope, name] = (_b = (_a = this.name) === null || _a === void 0 ? void 0 : _a.split('/')) !== null && _b !== void 0 ? _b : []; - const defaultProjectDir = name !== null && name !== void 0 ? name : scope; - const dirAnswer = yield inquirer.prompt({ - type: 'input', - name: DIR_PROMOTE_NAME, - default: defaultProjectDir, - }); - this.dirname = dirAnswer[DIR_PROMOTE_NAME]; - } - if (!this.targets) { - const { targets } = yield inquirer.prompt([ - { - type: 'checkbox', - name: 'targets', - message: 'Choose targets you want to support', - default: DefaultPlatforms.map((p) => p.raw), - choices: SupportedPlatforms, - }, - ]); - if (!targets.length) { - throw new TypeError('At least choose one target'); - } - this.targets = targets; - } - if (this.enableGithubActions === undefined) { - const answer = yield inquirer.prompt([ - { - type: 'confirm', - name: ENABLE_GITHUB_ACTIONS_PROMOTE_NAME, - message: 'Enable github actions?', - default: true, - choices: SupportedPlatforms, - }, - ]); - this.enableGithubActions = answer[ENABLE_GITHUB_ACTIONS_PROMOTE_NAME]; - } - debug$5(`Running command: ${green('[${command}]')}`); - if (!this.dryRun) { - require$$0$2.mkdirSync(path$1.join(process.cwd(), this.dirname), { - recursive: true, - }); - require$$0$2.mkdirSync(path$1.join(process.cwd(), this.dirname, 'src'), { - recursive: true, - }); - } - const [s, pkgName] = this.name.split('/'); - const binaryName = pkgName !== null && pkgName !== void 0 ? pkgName : s; - this.writeFile('Cargo.toml', createCargoContent(this.name)); - this.writeFile('.npmignore', NPMIgnoreFiles); - this.writeFile('build.rs', BUILD_RS); - this.writeFile('package.json', JSON.stringify(createPackageJson(this.name, binaryName, this.targets), null, 2)); - this.writeFile('src/lib.rs', LibRs); - require$$0$2.mkdirSync(path$1.join(process.cwd(), this.dirname, '__test__'), { - recursive: true, - }); - this.writeFile('__test__/index.spec.mjs', `import test from 'ava' - -import { sum } from '../index.js' - -test('sum from native', (t) => { - t.is(sum(1, 2), 3) -}) -`); - if (this.enableGithubActions) { - const githubDir = path$1.join(process.cwd(), this.dirname, '.github'); - const workflowsDir = path$1.join(githubDir, 'workflows'); - if (!this.dryRun) { - require$$0$2.mkdirSync(githubDir, { recursive: true }); - require$$0$2.mkdirSync(workflowsDir, { recursive: true }); - } - this.writeFile(path$1.join('.github', 'workflows', 'CI.yml'), createGithubActionsCIYml(binaryName, this.targets)); - } - yield CreateNpmDirCommand.create('package.json', path$1.join(process.cwd(), this.dirname), path$1.join(process.cwd(), this.dirname)); - const enableLinuxArm8Musl = this.targets.includes('aarch64-unknown-linux-musl'); - const enableWindowsX64 = this.targets.includes('x86_64-pc-windows-msvc'); - const cargoConfig = createCargoConfig(enableLinuxArm8Musl, enableWindowsX64); - if (cargoConfig.length) { - const configDir = path$1.join(process.cwd(), this.dirname, '.cargo'); - if (!this.dryRun) { - require$$0$2.mkdirSync(configDir, { recursive: true }); - this.writeFile(path$1.join('.cargo', 'config.toml'), cargoConfig); - } - } - this.writeFile('rustfmt.toml', `tab_spaces = 2 -edition = "2021" -`); - this.writeFile('.gitignore', GitIgnore); - this.writeFile('.yarnrc.yml', 'nodeLinker: node-modules'); - yield spawn(`yarn set version stable --yarn-path`, { - cwd: path$1.join(process.cwd(), this.dirname), - }); - yield spawn(`yarn install`, { - cwd: path$1.join(process.cwd(), this.dirname), - }); - }); - } - writeFile(path, content) { - const distDir = path$1.join(process.cwd(), this.dirname); - this.context.stdout.write(green(`Writing ${blue(path)}\n`)); - if (!this.dryRun) { - require$$0$2.writeFileSync(path$1.join(distDir, path), content); - } - } - getName() { - return __awaiter$1(this, void 0, void 0, function* () { - if (!this.name) { - const nameAnswer = yield inquirer.prompt({ - type: 'input', - name: NAME_PROMOTE_NAME, - suffix: ' (The name filed in your package.json)', - }); - const name = nameAnswer[NAME_PROMOTE_NAME]; - if (!name) { - yield this.getName(); - } - else { - this.name = name; - } - } - }); - } -} -NewProjectCommand.usage = Command.Usage({ - description: 'Create a new project from scratch', -}); -NewProjectCommand.paths = [['new']]; - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } - - if (typeof process === "object" && process.version !== undefined) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${ - process.arch - })`; - } - - return ""; -} - -// @ts-check - -function register(state, name, method, options) { - if (typeof method !== "function") { - throw new Error("method for before hook must be a function"); - } - - if (!options) { - options = {}; - } - - if (Array.isArray(name)) { - return name.reverse().reduce((callback, name) => { - return register.bind(null, state, name, callback, options); - }, method)(); - } - - return Promise.resolve().then(() => { - if (!state.registry[name]) { - return method(options); - } - - return state.registry[name].reduce((method, registered) => { - return registered.hook.bind(null, method, options); - }, method)(); - }); -} - -// @ts-check - -function addHook(state, kind, name, hook) { - const orig = hook; - if (!state.registry[name]) { - state.registry[name] = []; - } - - if (kind === "before") { - hook = (method, options) => { - return Promise.resolve() - .then(orig.bind(null, options)) - .then(method.bind(null, options)); - }; - } - - if (kind === "after") { - hook = (method, options) => { - let result; - return Promise.resolve() - .then(method.bind(null, options)) - .then((result_) => { - result = result_; - return orig(result, options); - }) - .then(() => { - return result; - }); - }; - } - - if (kind === "error") { - hook = (method, options) => { - return Promise.resolve() - .then(method.bind(null, options)) - .catch((error) => { - return orig(error, options); - }); - }; - } - - state.registry[name].push({ - hook: hook, - orig: orig, - }); -} - -// @ts-check - -function removeHook(state, name, method) { - if (!state.registry[name]) { - return; - } - - const index = state.registry[name] - .map((registered) => { - return registered.orig; - }) - .indexOf(method); - - if (index === -1) { - return; - } - - state.registry[name].splice(index, 1); -} - -// @ts-check - - -// bind with array of arguments: https://stackoverflow.com/a/21792913 -const bind = Function.bind; -const bindable = bind.bind(bind); - -function bindApi(hook, state, name) { - const removeHookRef = bindable(removeHook, null).apply( - null, - name ? [state, name] : [state] - ); - hook.api = { remove: removeHookRef }; - hook.remove = removeHookRef; - ["before", "error", "after", "wrap"].forEach((kind) => { - const args = name ? [state, kind, name] : [state, kind]; - hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args); - }); -} - -function Singular() { - const singularHookName = Symbol("Singular"); - const singularHookState = { - registry: {}, - }; - const singularHook = register.bind(null, singularHookState, singularHookName); - bindApi(singularHook, singularHookState, singularHookName); - return singularHook; -} - -function Collection() { - const state = { - registry: {}, - }; - - const hook = register.bind(null, state); - bindApi(hook, state); - - return hook; -} - -var Hook = { Singular, Collection }; - -// pkg/dist-src/defaults.js - -// pkg/dist-src/version.js -var VERSION$7 = "0.0.0-development"; - -// pkg/dist-src/defaults.js -var userAgent = `octokit-endpoint.js/${VERSION$7} ${getUserAgent()}`; -var DEFAULTS = { - method: "GET", - baseUrl: "https://api.github.com", - headers: { - accept: "application/vnd.github.v3+json", - "user-agent": userAgent - }, - mediaType: { - format: "" - } -}; - -// pkg/dist-src/util/lowercase-keys.js -function lowercaseKeys(object) { - if (!object) { - return {}; - } - return Object.keys(object).reduce((newObj, key) => { - newObj[key.toLowerCase()] = object[key]; - return newObj; - }, {}); -} - -// pkg/dist-src/util/is-plain-object.js -function isPlainObject$1(value) { - if (typeof value !== "object" || value === null) - return false; - if (Object.prototype.toString.call(value) !== "[object Object]") - return false; - const proto = Object.getPrototypeOf(value); - if (proto === null) - return true; - const Ctor = Object.prototype.hasOwnProperty.call(proto, "constructor") && proto.constructor; - return typeof Ctor === "function" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value); -} - -// pkg/dist-src/util/merge-deep.js -function mergeDeep(defaults, options) { - const result = Object.assign({}, defaults); - Object.keys(options).forEach((key) => { - if (isPlainObject$1(options[key])) { - if (!(key in defaults)) - Object.assign(result, { [key]: options[key] }); - else - result[key] = mergeDeep(defaults[key], options[key]); - } else { - Object.assign(result, { [key]: options[key] }); - } - }); - return result; -} - -// pkg/dist-src/util/remove-undefined-properties.js -function removeUndefinedProperties(obj) { - for (const key in obj) { - if (obj[key] === void 0) { - delete obj[key]; - } - } - return obj; -} - -// pkg/dist-src/merge.js -function merge(defaults, route, options) { - if (typeof route === "string") { - let [method, url] = route.split(" "); - options = Object.assign(url ? { method, url } : { url: method }, options); - } else { - options = Object.assign({}, route); - } - options.headers = lowercaseKeys(options.headers); - removeUndefinedProperties(options); - removeUndefinedProperties(options.headers); - const mergedOptions = mergeDeep(defaults || {}, options); - if (options.url === "/graphql") { - if (defaults && defaults.mediaType.previews?.length) { - mergedOptions.mediaType.previews = defaults.mediaType.previews.filter( - (preview) => !mergedOptions.mediaType.previews.includes(preview) - ).concat(mergedOptions.mediaType.previews); - } - mergedOptions.mediaType.previews = (mergedOptions.mediaType.previews || []).map((preview) => preview.replace(/-preview/, "")); - } - return mergedOptions; -} - -// pkg/dist-src/util/add-query-parameters.js -function addQueryParameters(url, parameters) { - const separator = /\?/.test(url) ? "&" : "?"; - const names = Object.keys(parameters); - if (names.length === 0) { - return url; - } - return url + separator + names.map((name) => { - if (name === "q") { - return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+"); - } - return `${name}=${encodeURIComponent(parameters[name])}`; - }).join("&"); -} - -// pkg/dist-src/util/extract-url-variable-names.js -var urlVariableRegex = /\{[^}]+\}/g; -function removeNonChars(variableName) { - return variableName.replace(/^\W+|\W+$/g, "").split(/,/); -} -function extractUrlVariableNames(url) { - const matches = url.match(urlVariableRegex); - if (!matches) { - return []; - } - return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []); -} - -// pkg/dist-src/util/omit.js -function omit(object, keysToOmit) { - const result = { __proto__: null }; - for (const key of Object.keys(object)) { - if (keysToOmit.indexOf(key) === -1) { - result[key] = object[key]; - } - } - return result; -} - -// pkg/dist-src/util/url-template.js -function encodeReserved(str) { - return str.split(/(%[0-9A-Fa-f]{2})/g).map(function(part) { - if (!/%[0-9A-Fa-f]/.test(part)) { - part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]"); - } - return part; - }).join(""); -} -function encodeUnreserved(str) { - return encodeURIComponent(str).replace(/[!'()*]/g, function(c) { - return "%" + c.charCodeAt(0).toString(16).toUpperCase(); - }); -} -function encodeValue(operator, value, key) { - value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value); - if (key) { - return encodeUnreserved(key) + "=" + value; - } else { - return value; - } -} -function isDefined(value) { - return value !== void 0 && value !== null; -} -function isKeyOperator(operator) { - return operator === ";" || operator === "&" || operator === "?"; -} -function getValues(context, operator, key, modifier) { - var value = context[key], result = []; - if (isDefined(value) && value !== "") { - if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") { - value = value.toString(); - if (modifier && modifier !== "*") { - value = value.substring(0, parseInt(modifier, 10)); - } - result.push( - encodeValue(operator, value, isKeyOperator(operator) ? key : "") - ); - } else { - if (modifier === "*") { - if (Array.isArray(value)) { - value.filter(isDefined).forEach(function(value2) { - result.push( - encodeValue(operator, value2, isKeyOperator(operator) ? key : "") - ); - }); - } else { - Object.keys(value).forEach(function(k) { - if (isDefined(value[k])) { - result.push(encodeValue(operator, value[k], k)); - } - }); - } - } else { - const tmp = []; - if (Array.isArray(value)) { - value.filter(isDefined).forEach(function(value2) { - tmp.push(encodeValue(operator, value2)); - }); - } else { - Object.keys(value).forEach(function(k) { - if (isDefined(value[k])) { - tmp.push(encodeUnreserved(k)); - tmp.push(encodeValue(operator, value[k].toString())); - } - }); - } - if (isKeyOperator(operator)) { - result.push(encodeUnreserved(key) + "=" + tmp.join(",")); - } else if (tmp.length !== 0) { - result.push(tmp.join(",")); - } - } - } - } else { - if (operator === ";") { - if (isDefined(value)) { - result.push(encodeUnreserved(key)); - } - } else if (value === "" && (operator === "&" || operator === "?")) { - result.push(encodeUnreserved(key) + "="); - } else if (value === "") { - result.push(""); - } - } - return result; -} -function parseUrl(template) { - return { - expand: expand.bind(null, template) - }; -} -function expand(template, context) { - var operators = ["+", "#", ".", "/", ";", "?", "&"]; - template = template.replace( - /\{([^\{\}]+)\}|([^\{\}]+)/g, - function(_, expression, literal) { - if (expression) { - let operator = ""; - const values = []; - if (operators.indexOf(expression.charAt(0)) !== -1) { - operator = expression.charAt(0); - expression = expression.substr(1); - } - expression.split(/,/g).forEach(function(variable) { - var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable); - values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3])); - }); - if (operator && operator !== "+") { - var separator = ","; - if (operator === "?") { - separator = "&"; - } else if (operator !== "#") { - separator = operator; - } - return (values.length !== 0 ? operator : "") + values.join(separator); - } else { - return values.join(","); - } - } else { - return encodeReserved(literal); - } - } - ); - if (template === "/") { - return template; - } else { - return template.replace(/\/$/, ""); - } -} - -// pkg/dist-src/parse.js -function parse(options) { - let method = options.method.toUpperCase(); - let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{$1}"); - let headers = Object.assign({}, options.headers); - let body; - let parameters = omit(options, [ - "method", - "baseUrl", - "url", - "headers", - "request", - "mediaType" - ]); - const urlVariableNames = extractUrlVariableNames(url); - url = parseUrl(url).expand(parameters); - if (!/^http/.test(url)) { - url = options.baseUrl + url; - } - const omittedParameters = Object.keys(options).filter((option) => urlVariableNames.includes(option)).concat("baseUrl"); - const remainingParameters = omit(parameters, omittedParameters); - const isBinaryRequest = /application\/octet-stream/i.test(headers.accept); - if (!isBinaryRequest) { - if (options.mediaType.format) { - headers.accept = headers.accept.split(/,/).map( - (format) => format.replace( - /application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, - `application/vnd$1$2.${options.mediaType.format}` - ) - ).join(","); - } - if (url.endsWith("/graphql")) { - if (options.mediaType.previews?.length) { - const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || []; - headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map((preview) => { - const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json"; - return `application/vnd.github.${preview}-preview${format}`; - }).join(","); - } - } - } - if (["GET", "HEAD"].includes(method)) { - url = addQueryParameters(url, remainingParameters); - } else { - if ("data" in remainingParameters) { - body = remainingParameters.data; - } else { - if (Object.keys(remainingParameters).length) { - body = remainingParameters; - } - } - } - if (!headers["content-type"] && typeof body !== "undefined") { - headers["content-type"] = "application/json; charset=utf-8"; - } - if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") { - body = ""; - } - return Object.assign( - { method, url, headers }, - typeof body !== "undefined" ? { body } : null, - options.request ? { request: options.request } : null - ); -} - -// pkg/dist-src/endpoint-with-defaults.js -function endpointWithDefaults(defaults, route, options) { - return parse(merge(defaults, route, options)); -} - -// pkg/dist-src/with-defaults.js -function withDefaults$2(oldDefaults, newDefaults) { - const DEFAULTS2 = merge(oldDefaults, newDefaults); - const endpoint2 = endpointWithDefaults.bind(null, DEFAULTS2); - return Object.assign(endpoint2, { - DEFAULTS: DEFAULTS2, - defaults: withDefaults$2.bind(null, DEFAULTS2), - merge: merge.bind(null, DEFAULTS2), - parse - }); -} - -// pkg/dist-src/index.js -var endpoint = withDefaults$2(null, DEFAULTS); - -class RequestError extends Error { - name; - /** - * http status code - */ - status; - /** - * Request options that lead to the error. - */ - request; - /** - * Response object if a response was received - */ - response; - constructor(message, statusCode, options) { - super(message); - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } - this.name = "HttpError"; - this.status = statusCode; - if ("response" in options) { - this.response = options.response; - } - const requestCopy = Object.assign({}, options.request); - if (options.request.headers.authorization) { - requestCopy.headers = Object.assign({}, options.request.headers, { - authorization: options.request.headers.authorization.replace( - / .*$/, - " [REDACTED]" - ) - }); - } - requestCopy.url = requestCopy.url.replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]").replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); - this.request = requestCopy; - } -} - -// pkg/dist-src/index.js - -// pkg/dist-src/version.js -var VERSION$6 = "0.0.0-development"; - -// pkg/dist-src/is-plain-object.js -function isPlainObject(value) { - if (typeof value !== "object" || value === null) - return false; - if (Object.prototype.toString.call(value) !== "[object Object]") - return false; - const proto = Object.getPrototypeOf(value); - if (proto === null) - return true; - const Ctor = Object.prototype.hasOwnProperty.call(proto, "constructor") && proto.constructor; - return typeof Ctor === "function" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value); -} - -// pkg/dist-src/get-buffer-response.js -function getBufferResponse(response) { - return response.arrayBuffer(); -} - -// pkg/dist-src/fetch-wrapper.js -function fetchWrapper(requestOptions) { - const log = requestOptions.request && requestOptions.request.log ? requestOptions.request.log : console; - const parseSuccessResponseBody = requestOptions.request?.parseSuccessResponseBody !== false; - if (isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) { - requestOptions.body = JSON.stringify(requestOptions.body); - } - let headers = {}; - let status; - let url; - let { fetch } = globalThis; - if (requestOptions.request?.fetch) { - fetch = requestOptions.request.fetch; - } - if (!fetch) { - throw new Error( - "fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing" - ); - } - return fetch(requestOptions.url, { - method: requestOptions.method, - body: requestOptions.body, - redirect: requestOptions.request?.redirect, - // Header values must be `string` - headers: Object.fromEntries( - Object.entries(requestOptions.headers).map(([name, value]) => [ - name, - String(value) - ]) - ), - signal: requestOptions.request?.signal, - // duplex must be set if request.body is ReadableStream or Async Iterables. - // See https://fetch.spec.whatwg.org/#dom-requestinit-duplex. - ...requestOptions.body && { duplex: "half" } - }).then(async (response) => { - url = response.url; - status = response.status; - for (const keyAndValue of response.headers) { - headers[keyAndValue[0]] = keyAndValue[1]; - } - if ("deprecation" in headers) { - const matches = headers.link && headers.link.match(/<([^>]+)>; rel="deprecation"/); - const deprecationLink = matches && matches.pop(); - log.warn( - `[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}` - ); - } - if (status === 204 || status === 205) { - return; - } - if (requestOptions.method === "HEAD") { - if (status < 400) { - return; - } - throw new RequestError(response.statusText, status, { - response: { - url, - status, - headers, - data: void 0 - }, - request: requestOptions - }); - } - if (status === 304) { - throw new RequestError("Not modified", status, { - response: { - url, - status, - headers, - data: await getResponseData(response) - }, - request: requestOptions - }); - } - if (status >= 400) { - const data = await getResponseData(response); - const error = new RequestError(toErrorMessage(data), status, { - response: { - url, - status, - headers, - data - }, - request: requestOptions - }); - throw error; - } - return parseSuccessResponseBody ? await getResponseData(response) : response.body; - }).then((data) => { - return { - status, - url, - headers, - data - }; - }).catch((error) => { - if (error instanceof RequestError) - throw error; - else if (error.name === "AbortError") - throw error; - let message = error.message; - if (error.name === "TypeError" && "cause" in error) { - if (error.cause instanceof Error) { - message = error.cause.message; - } else if (typeof error.cause === "string") { - message = error.cause; - } - } - throw new RequestError(message, 500, { - request: requestOptions - }); - }); -} -async function getResponseData(response) { - const contentType = response.headers.get("content-type"); - if (/application\/json/.test(contentType)) { - return response.json().catch(() => response.text()).catch(() => ""); - } - if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { - return response.text(); - } - return getBufferResponse(response); -} -function toErrorMessage(data) { - if (typeof data === "string") - return data; - let suffix; - if ("documentation_url" in data) { - suffix = ` - ${data.documentation_url}`; - } else { - suffix = ""; - } - if ("message" in data) { - if (Array.isArray(data.errors)) { - return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}${suffix}`; - } - return `${data.message}${suffix}`; - } - return `Unknown error: ${JSON.stringify(data)}`; -} - -// pkg/dist-src/with-defaults.js -function withDefaults$1(oldEndpoint, newDefaults) { - const endpoint2 = oldEndpoint.defaults(newDefaults); - const newApi = function(route, parameters) { - const endpointOptions = endpoint2.merge(route, parameters); - if (!endpointOptions.request || !endpointOptions.request.hook) { - return fetchWrapper(endpoint2.parse(endpointOptions)); - } - const request2 = (route2, parameters2) => { - return fetchWrapper( - endpoint2.parse(endpoint2.merge(route2, parameters2)) - ); - }; - Object.assign(request2, { - endpoint: endpoint2, - defaults: withDefaults$1.bind(null, endpoint2) - }); - return endpointOptions.request.hook(request2, endpointOptions); - }; - return Object.assign(newApi, { - endpoint: endpoint2, - defaults: withDefaults$1.bind(null, endpoint2) - }); -} - -// pkg/dist-src/index.js -var request = withDefaults$1(endpoint, { - headers: { - "user-agent": `octokit-request.js/${VERSION$6} ${getUserAgent()}` - } -}); - -// pkg/dist-src/index.js - -// pkg/dist-src/version.js -var VERSION$5 = "0.0.0-development"; - -// pkg/dist-src/error.js -function _buildMessageForResponseErrors(data) { - return `Request failed due to following response errors: -` + data.errors.map((e) => ` - ${e.message}`).join("\n"); -} -var GraphqlResponseError = class extends Error { - constructor(request2, headers, response) { - super(_buildMessageForResponseErrors(response)); - this.request = request2; - this.headers = headers; - this.response = response; - this.errors = response.errors; - this.data = response.data; - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } - } - name = "GraphqlResponseError"; - errors; - data; -}; - -// pkg/dist-src/graphql.js -var NON_VARIABLE_OPTIONS = [ - "method", - "baseUrl", - "url", - "headers", - "request", - "query", - "mediaType" -]; -var FORBIDDEN_VARIABLE_OPTIONS = ["query", "method", "url"]; -var GHES_V3_SUFFIX_REGEX = /\/api\/v3\/?$/; -function graphql(request2, query, options) { - if (options) { - if (typeof query === "string" && "query" in options) { - return Promise.reject( - new Error(`[@octokit/graphql] "query" cannot be used as variable name`) - ); - } - for (const key in options) { - if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) - continue; - return Promise.reject( - new Error( - `[@octokit/graphql] "${key}" cannot be used as variable name` - ) - ); - } - } - const parsedOptions = typeof query === "string" ? Object.assign({ query }, options) : query; - const requestOptions = Object.keys( - parsedOptions - ).reduce((result, key) => { - if (NON_VARIABLE_OPTIONS.includes(key)) { - result[key] = parsedOptions[key]; - return result; - } - if (!result.variables) { - result.variables = {}; - } - result.variables[key] = parsedOptions[key]; - return result; - }, {}); - const baseUrl = parsedOptions.baseUrl || request2.endpoint.DEFAULTS.baseUrl; - if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) { - requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, "/api/graphql"); - } - return request2(requestOptions).then((response) => { - if (response.data.errors) { - const headers = {}; - for (const key of Object.keys(response.headers)) { - headers[key] = response.headers[key]; - } - throw new GraphqlResponseError( - requestOptions, - headers, - response.data - ); - } - return response.data.data; - }); -} - -// pkg/dist-src/with-defaults.js -function withDefaults(request2, newDefaults) { - const newRequest = request2.defaults(newDefaults); - const newApi = (query, options) => { - return graphql(newRequest, query, options); - }; - return Object.assign(newApi, { - defaults: withDefaults.bind(null, newRequest), - endpoint: newRequest.endpoint - }); -} - -// pkg/dist-src/index.js -withDefaults(request, { - headers: { - "user-agent": `octokit-graphql.js/${VERSION$5} ${getUserAgent()}` - }, - method: "POST", - url: "/graphql" -}); -function withCustomRequest(customRequest) { - return withDefaults(customRequest, { - method: "POST", - url: "/graphql" - }); -} - -// pkg/dist-src/auth.js -var REGEX_IS_INSTALLATION_LEGACY = /^v1\./; -var REGEX_IS_INSTALLATION = /^ghs_/; -var REGEX_IS_USER_TO_SERVER = /^ghu_/; -async function auth(token) { - const isApp = token.split(/\./).length === 3; - const isInstallation = REGEX_IS_INSTALLATION_LEGACY.test(token) || REGEX_IS_INSTALLATION.test(token); - const isUserToServer = REGEX_IS_USER_TO_SERVER.test(token); - const tokenType = isApp ? "app" : isInstallation ? "installation" : isUserToServer ? "user-to-server" : "oauth"; - return { - type: "token", - token, - tokenType - }; -} - -// pkg/dist-src/with-authorization-prefix.js -function withAuthorizationPrefix(token) { - if (token.split(/\./).length === 3) { - return `bearer ${token}`; - } - return `token ${token}`; -} - -// pkg/dist-src/hook.js -async function hook(token, request, route, parameters) { - const endpoint = request.endpoint.merge( - route, - parameters - ); - endpoint.headers.authorization = withAuthorizationPrefix(token); - return request(endpoint); -} - -// pkg/dist-src/index.js -var createTokenAuth = function createTokenAuth2(token) { - if (!token) { - throw new Error("[@octokit/auth-token] No token passed to createTokenAuth"); - } - if (typeof token !== "string") { - throw new Error( - "[@octokit/auth-token] Token passed to createTokenAuth is not a string" - ); - } - token = token.replace(/^(token|bearer) +/i, ""); - return Object.assign(auth.bind(null, token), { - hook: hook.bind(null, token) - }); -}; - -const VERSION$4 = "6.1.2"; - -const noop = () => { -}; -const consoleWarn = console.warn.bind(console); -const consoleError = console.error.bind(console); -const userAgentTrail = `octokit-core.js/${VERSION$4} ${getUserAgent()}`; -let Octokit$1 = class Octokit { - static VERSION = VERSION$4; - static defaults(defaults) { - const OctokitWithDefaults = class extends this { - constructor(...args) { - const options = args[0] || {}; - if (typeof defaults === "function") { - super(defaults(options)); - return; - } - super( - Object.assign( - {}, - defaults, - options, - options.userAgent && defaults.userAgent ? { - userAgent: `${options.userAgent} ${defaults.userAgent}` - } : null - ) - ); - } - }; - return OctokitWithDefaults; - } - static plugins = []; - /** - * Attach a plugin (or many) to your Octokit instance. - * - * @example - * const API = Octokit.plugin(plugin1, plugin2, plugin3, ...) - */ - static plugin(...newPlugins) { - const currentPlugins = this.plugins; - const NewOctokit = class extends this { - static plugins = currentPlugins.concat( - newPlugins.filter((plugin) => !currentPlugins.includes(plugin)) - ); - }; - return NewOctokit; - } - constructor(options = {}) { - const hook = new Hook.Collection(); - const requestDefaults = { - baseUrl: request.endpoint.DEFAULTS.baseUrl, - headers: {}, - request: Object.assign({}, options.request, { - // @ts-ignore internal usage only, no need to type - hook: hook.bind(null, "request") - }), - mediaType: { - previews: [], - format: "" - } - }; - requestDefaults.headers["user-agent"] = options.userAgent ? `${options.userAgent} ${userAgentTrail}` : userAgentTrail; - if (options.baseUrl) { - requestDefaults.baseUrl = options.baseUrl; - } - if (options.previews) { - requestDefaults.mediaType.previews = options.previews; - } - if (options.timeZone) { - requestDefaults.headers["time-zone"] = options.timeZone; - } - this.request = request.defaults(requestDefaults); - this.graphql = withCustomRequest(this.request).defaults(requestDefaults); - this.log = Object.assign( - { - debug: noop, - info: noop, - warn: consoleWarn, - error: consoleError - }, - options.log - ); - this.hook = hook; - if (!options.authStrategy) { - if (!options.auth) { - this.auth = async () => ({ - type: "unauthenticated" - }); - } else { - const auth = createTokenAuth(options.auth); - hook.wrap("request", auth.hook); - this.auth = auth; - } - } else { - const { authStrategy, ...otherOptions } = options; - const auth = authStrategy( - Object.assign( - { - request: this.request, - log: this.log, - // we pass the current octokit instance as well as its constructor options - // to allow for authentication strategies that return a new octokit instance - // that shares the same internal state as the current one. The original - // requirement for this was the "event-octokit" authentication strategy - // of https://github.com/probot/octokit-auth-probot. - octokit: this, - octokitOptions: otherOptions - }, - options.auth - ) - ); - hook.wrap("request", auth.hook); - this.auth = auth; - } - const classConstructor = this.constructor; - for (let i = 0; i < classConstructor.plugins.length; ++i) { - Object.assign(this, classConstructor.plugins[i](this, options)); - } - } - // assigned during constructor - request; - graphql; - log; - hook; - // TODO: type `octokit.auth` based on passed options.authStrategy - auth; -}; - -const VERSION$3 = "5.3.0"; - -function requestLog(octokit) { - octokit.hook.wrap("request", (request, options) => { - octokit.log.debug("request", options); - const start = Date.now(); - const requestOptions = octokit.request.endpoint.parse(options); - const path = requestOptions.url.replace(options.baseUrl, ""); - return request(options).then((response) => { - const requestId = response.headers["x-github-request-id"]; - octokit.log.info( - `${requestOptions.method} ${path} - ${response.status} with id ${requestId} in ${Date.now() - start}ms` - ); - return response; - }).catch((error) => { - const requestId = error.response.headers["x-github-request-id"] || "UNKNOWN"; - octokit.log.error( - `${requestOptions.method} ${path} - ${error.status} with id ${requestId} in ${Date.now() - start}ms` - ); - throw error; - }); - }); -} -requestLog.VERSION = VERSION$3; - -// pkg/dist-src/version.js -var VERSION$2 = "11.3.1"; - -// pkg/dist-src/normalize-paginated-list-response.js -function normalizePaginatedListResponse(response) { - if (!response.data) { - return { - ...response, - data: [] - }; - } - const responseNeedsNormalization = "total_count" in response.data && !("url" in response.data); - if (!responseNeedsNormalization) - return response; - const incompleteResults = response.data.incomplete_results; - const repositorySelection = response.data.repository_selection; - const totalCount = response.data.total_count; - delete response.data.incomplete_results; - delete response.data.repository_selection; - delete response.data.total_count; - const namespaceKey = Object.keys(response.data)[0]; - const data = response.data[namespaceKey]; - response.data = data; - if (typeof incompleteResults !== "undefined") { - response.data.incomplete_results = incompleteResults; - } - if (typeof repositorySelection !== "undefined") { - response.data.repository_selection = repositorySelection; - } - response.data.total_count = totalCount; - return response; -} - -// pkg/dist-src/iterator.js -function iterator(octokit, route, parameters) { - const options = typeof route === "function" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters); - const requestMethod = typeof route === "function" ? route : octokit.request; - const method = options.method; - const headers = options.headers; - let url = options.url; - return { - [Symbol.asyncIterator]: () => ({ - async next() { - if (!url) - return { done: true }; - try { - const response = await requestMethod({ method, url, headers }); - const normalizedResponse = normalizePaginatedListResponse(response); - url = ((normalizedResponse.headers.link || "").match( - /<([^>]+)>;\s*rel="next"/ - ) || [])[1]; - return { value: normalizedResponse }; - } catch (error) { - if (error.status !== 409) - throw error; - url = ""; - return { - value: { - status: 200, - headers: {}, - data: [] - } - }; - } - } - }) - }; -} - -// pkg/dist-src/paginate.js -function paginate(octokit, route, parameters, mapFn) { - if (typeof parameters === "function") { - mapFn = parameters; - parameters = void 0; - } - return gather( - octokit, - [], - iterator(octokit, route, parameters)[Symbol.asyncIterator](), - mapFn - ); -} -function gather(octokit, results, iterator2, mapFn) { - return iterator2.next().then((result) => { - if (result.done) { - return results; - } - let earlyExit = false; - function done() { - earlyExit = true; - } - results = results.concat( - mapFn ? mapFn(result.value, done) : result.value.data - ); - if (earlyExit) { - return results; - } - return gather(octokit, results, iterator2, mapFn); - }); -} - -// pkg/dist-src/compose-paginate.js -Object.assign(paginate, { - iterator -}); - -// pkg/dist-src/index.js -function paginateRest(octokit) { - return { - paginate: Object.assign(paginate.bind(null, octokit), { - iterator: iterator.bind(null, octokit) - }) - }; -} -paginateRest.VERSION = VERSION$2; - -const VERSION$1 = "13.2.2"; - -const Endpoints = { - actions: { - addCustomLabelsToSelfHostedRunnerForOrg: [ - "POST /orgs/{org}/actions/runners/{runner_id}/labels" - ], - addCustomLabelsToSelfHostedRunnerForRepo: [ - "POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" - ], - addSelectedRepoToOrgSecret: [ - "PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}" - ], - addSelectedRepoToOrgVariable: [ - "PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}" - ], - approveWorkflowRun: [ - "POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve" - ], - cancelWorkflowRun: [ - "POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel" - ], - createEnvironmentVariable: [ - "POST /repos/{owner}/{repo}/environments/{environment_name}/variables" - ], - createOrUpdateEnvironmentSecret: [ - "PUT /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}" - ], - createOrUpdateOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}"], - createOrUpdateRepoSecret: [ - "PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}" - ], - createOrgVariable: ["POST /orgs/{org}/actions/variables"], - createRegistrationTokenForOrg: [ - "POST /orgs/{org}/actions/runners/registration-token" - ], - createRegistrationTokenForRepo: [ - "POST /repos/{owner}/{repo}/actions/runners/registration-token" - ], - createRemoveTokenForOrg: ["POST /orgs/{org}/actions/runners/remove-token"], - createRemoveTokenForRepo: [ - "POST /repos/{owner}/{repo}/actions/runners/remove-token" - ], - createRepoVariable: ["POST /repos/{owner}/{repo}/actions/variables"], - createWorkflowDispatch: [ - "POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches" - ], - deleteActionsCacheById: [ - "DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}" - ], - deleteActionsCacheByKey: [ - "DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}" - ], - deleteArtifact: [ - "DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}" - ], - deleteEnvironmentSecret: [ - "DELETE /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}" - ], - deleteEnvironmentVariable: [ - "DELETE /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}" - ], - deleteOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}"], - deleteOrgVariable: ["DELETE /orgs/{org}/actions/variables/{name}"], - deleteRepoSecret: [ - "DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}" - ], - deleteRepoVariable: [ - "DELETE /repos/{owner}/{repo}/actions/variables/{name}" - ], - deleteSelfHostedRunnerFromOrg: [ - "DELETE /orgs/{org}/actions/runners/{runner_id}" - ], - deleteSelfHostedRunnerFromRepo: [ - "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}" - ], - deleteWorkflowRun: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"], - deleteWorkflowRunLogs: [ - "DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs" - ], - disableSelectedRepositoryGithubActionsOrganization: [ - "DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}" - ], - disableWorkflow: [ - "PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable" - ], - downloadArtifact: [ - "GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}" - ], - downloadJobLogsForWorkflowRun: [ - "GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs" - ], - downloadWorkflowRunAttemptLogs: [ - "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs" - ], - downloadWorkflowRunLogs: [ - "GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs" - ], - enableSelectedRepositoryGithubActionsOrganization: [ - "PUT /orgs/{org}/actions/permissions/repositories/{repository_id}" - ], - enableWorkflow: [ - "PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable" - ], - forceCancelWorkflowRun: [ - "POST /repos/{owner}/{repo}/actions/runs/{run_id}/force-cancel" - ], - generateRunnerJitconfigForOrg: [ - "POST /orgs/{org}/actions/runners/generate-jitconfig" - ], - generateRunnerJitconfigForRepo: [ - "POST /repos/{owner}/{repo}/actions/runners/generate-jitconfig" - ], - getActionsCacheList: ["GET /repos/{owner}/{repo}/actions/caches"], - getActionsCacheUsage: ["GET /repos/{owner}/{repo}/actions/cache/usage"], - getActionsCacheUsageByRepoForOrg: [ - "GET /orgs/{org}/actions/cache/usage-by-repository" - ], - getActionsCacheUsageForOrg: ["GET /orgs/{org}/actions/cache/usage"], - getAllowedActionsOrganization: [ - "GET /orgs/{org}/actions/permissions/selected-actions" - ], - getAllowedActionsRepository: [ - "GET /repos/{owner}/{repo}/actions/permissions/selected-actions" - ], - getArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"], - getCustomOidcSubClaimForRepo: [ - "GET /repos/{owner}/{repo}/actions/oidc/customization/sub" - ], - getEnvironmentPublicKey: [ - "GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/public-key" - ], - getEnvironmentSecret: [ - "GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}" - ], - getEnvironmentVariable: [ - "GET /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}" - ], - getGithubActionsDefaultWorkflowPermissionsOrganization: [ - "GET /orgs/{org}/actions/permissions/workflow" - ], - getGithubActionsDefaultWorkflowPermissionsRepository: [ - "GET /repos/{owner}/{repo}/actions/permissions/workflow" - ], - getGithubActionsPermissionsOrganization: [ - "GET /orgs/{org}/actions/permissions" - ], - getGithubActionsPermissionsRepository: [ - "GET /repos/{owner}/{repo}/actions/permissions" - ], - getJobForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"], - getOrgPublicKey: ["GET /orgs/{org}/actions/secrets/public-key"], - getOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}"], - getOrgVariable: ["GET /orgs/{org}/actions/variables/{name}"], - getPendingDeploymentsForRun: [ - "GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments" - ], - getRepoPermissions: [ - "GET /repos/{owner}/{repo}/actions/permissions", - {}, - { renamed: ["actions", "getGithubActionsPermissionsRepository"] } - ], - getRepoPublicKey: ["GET /repos/{owner}/{repo}/actions/secrets/public-key"], - getRepoSecret: ["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"], - getRepoVariable: ["GET /repos/{owner}/{repo}/actions/variables/{name}"], - getReviewsForRun: [ - "GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals" - ], - getSelfHostedRunnerForOrg: ["GET /orgs/{org}/actions/runners/{runner_id}"], - getSelfHostedRunnerForRepo: [ - "GET /repos/{owner}/{repo}/actions/runners/{runner_id}" - ], - getWorkflow: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"], - getWorkflowAccessToRepository: [ - "GET /repos/{owner}/{repo}/actions/permissions/access" - ], - getWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}"], - getWorkflowRunAttempt: [ - "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}" - ], - getWorkflowRunUsage: [ - "GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing" - ], - getWorkflowUsage: [ - "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing" - ], - listArtifactsForRepo: ["GET /repos/{owner}/{repo}/actions/artifacts"], - listEnvironmentSecrets: [ - "GET /repos/{owner}/{repo}/environments/{environment_name}/secrets" - ], - listEnvironmentVariables: [ - "GET /repos/{owner}/{repo}/environments/{environment_name}/variables" - ], - listJobsForWorkflowRun: [ - "GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs" - ], - listJobsForWorkflowRunAttempt: [ - "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs" - ], - listLabelsForSelfHostedRunnerForOrg: [ - "GET /orgs/{org}/actions/runners/{runner_id}/labels" - ], - listLabelsForSelfHostedRunnerForRepo: [ - "GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" - ], - listOrgSecrets: ["GET /orgs/{org}/actions/secrets"], - listOrgVariables: ["GET /orgs/{org}/actions/variables"], - listRepoOrganizationSecrets: [ - "GET /repos/{owner}/{repo}/actions/organization-secrets" - ], - listRepoOrganizationVariables: [ - "GET /repos/{owner}/{repo}/actions/organization-variables" - ], - listRepoSecrets: ["GET /repos/{owner}/{repo}/actions/secrets"], - listRepoVariables: ["GET /repos/{owner}/{repo}/actions/variables"], - listRepoWorkflows: ["GET /repos/{owner}/{repo}/actions/workflows"], - listRunnerApplicationsForOrg: ["GET /orgs/{org}/actions/runners/downloads"], - listRunnerApplicationsForRepo: [ - "GET /repos/{owner}/{repo}/actions/runners/downloads" - ], - listSelectedReposForOrgSecret: [ - "GET /orgs/{org}/actions/secrets/{secret_name}/repositories" - ], - listSelectedReposForOrgVariable: [ - "GET /orgs/{org}/actions/variables/{name}/repositories" - ], - listSelectedRepositoriesEnabledGithubActionsOrganization: [ - "GET /orgs/{org}/actions/permissions/repositories" - ], - listSelfHostedRunnersForOrg: ["GET /orgs/{org}/actions/runners"], - listSelfHostedRunnersForRepo: ["GET /repos/{owner}/{repo}/actions/runners"], - listWorkflowRunArtifacts: [ - "GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts" - ], - listWorkflowRuns: [ - "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs" - ], - listWorkflowRunsForRepo: ["GET /repos/{owner}/{repo}/actions/runs"], - reRunJobForWorkflowRun: [ - "POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun" - ], - reRunWorkflow: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"], - reRunWorkflowFailedJobs: [ - "POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs" - ], - removeAllCustomLabelsFromSelfHostedRunnerForOrg: [ - "DELETE /orgs/{org}/actions/runners/{runner_id}/labels" - ], - removeAllCustomLabelsFromSelfHostedRunnerForRepo: [ - "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" - ], - removeCustomLabelFromSelfHostedRunnerForOrg: [ - "DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}" - ], - removeCustomLabelFromSelfHostedRunnerForRepo: [ - "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}" - ], - removeSelectedRepoFromOrgSecret: [ - "DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}" - ], - removeSelectedRepoFromOrgVariable: [ - "DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}" - ], - reviewCustomGatesForRun: [ - "POST /repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule" - ], - reviewPendingDeploymentsForRun: [ - "POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments" - ], - setAllowedActionsOrganization: [ - "PUT /orgs/{org}/actions/permissions/selected-actions" - ], - setAllowedActionsRepository: [ - "PUT /repos/{owner}/{repo}/actions/permissions/selected-actions" - ], - setCustomLabelsForSelfHostedRunnerForOrg: [ - "PUT /orgs/{org}/actions/runners/{runner_id}/labels" - ], - setCustomLabelsForSelfHostedRunnerForRepo: [ - "PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" - ], - setCustomOidcSubClaimForRepo: [ - "PUT /repos/{owner}/{repo}/actions/oidc/customization/sub" - ], - setGithubActionsDefaultWorkflowPermissionsOrganization: [ - "PUT /orgs/{org}/actions/permissions/workflow" - ], - setGithubActionsDefaultWorkflowPermissionsRepository: [ - "PUT /repos/{owner}/{repo}/actions/permissions/workflow" - ], - setGithubActionsPermissionsOrganization: [ - "PUT /orgs/{org}/actions/permissions" - ], - setGithubActionsPermissionsRepository: [ - "PUT /repos/{owner}/{repo}/actions/permissions" - ], - setSelectedReposForOrgSecret: [ - "PUT /orgs/{org}/actions/secrets/{secret_name}/repositories" - ], - setSelectedReposForOrgVariable: [ - "PUT /orgs/{org}/actions/variables/{name}/repositories" - ], - setSelectedRepositoriesEnabledGithubActionsOrganization: [ - "PUT /orgs/{org}/actions/permissions/repositories" - ], - setWorkflowAccessToRepository: [ - "PUT /repos/{owner}/{repo}/actions/permissions/access" - ], - updateEnvironmentVariable: [ - "PATCH /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}" - ], - updateOrgVariable: ["PATCH /orgs/{org}/actions/variables/{name}"], - updateRepoVariable: [ - "PATCH /repos/{owner}/{repo}/actions/variables/{name}" - ] - }, - activity: { - checkRepoIsStarredByAuthenticatedUser: ["GET /user/starred/{owner}/{repo}"], - deleteRepoSubscription: ["DELETE /repos/{owner}/{repo}/subscription"], - deleteThreadSubscription: [ - "DELETE /notifications/threads/{thread_id}/subscription" - ], - getFeeds: ["GET /feeds"], - getRepoSubscription: ["GET /repos/{owner}/{repo}/subscription"], - getThread: ["GET /notifications/threads/{thread_id}"], - getThreadSubscriptionForAuthenticatedUser: [ - "GET /notifications/threads/{thread_id}/subscription" - ], - listEventsForAuthenticatedUser: ["GET /users/{username}/events"], - listNotificationsForAuthenticatedUser: ["GET /notifications"], - listOrgEventsForAuthenticatedUser: [ - "GET /users/{username}/events/orgs/{org}" - ], - listPublicEvents: ["GET /events"], - listPublicEventsForRepoNetwork: ["GET /networks/{owner}/{repo}/events"], - listPublicEventsForUser: ["GET /users/{username}/events/public"], - listPublicOrgEvents: ["GET /orgs/{org}/events"], - listReceivedEventsForUser: ["GET /users/{username}/received_events"], - listReceivedPublicEventsForUser: [ - "GET /users/{username}/received_events/public" - ], - listRepoEvents: ["GET /repos/{owner}/{repo}/events"], - listRepoNotificationsForAuthenticatedUser: [ - "GET /repos/{owner}/{repo}/notifications" - ], - listReposStarredByAuthenticatedUser: ["GET /user/starred"], - listReposStarredByUser: ["GET /users/{username}/starred"], - listReposWatchedByUser: ["GET /users/{username}/subscriptions"], - listStargazersForRepo: ["GET /repos/{owner}/{repo}/stargazers"], - listWatchedReposForAuthenticatedUser: ["GET /user/subscriptions"], - listWatchersForRepo: ["GET /repos/{owner}/{repo}/subscribers"], - markNotificationsAsRead: ["PUT /notifications"], - markRepoNotificationsAsRead: ["PUT /repos/{owner}/{repo}/notifications"], - markThreadAsDone: ["DELETE /notifications/threads/{thread_id}"], - markThreadAsRead: ["PATCH /notifications/threads/{thread_id}"], - setRepoSubscription: ["PUT /repos/{owner}/{repo}/subscription"], - setThreadSubscription: [ - "PUT /notifications/threads/{thread_id}/subscription" - ], - starRepoForAuthenticatedUser: ["PUT /user/starred/{owner}/{repo}"], - unstarRepoForAuthenticatedUser: ["DELETE /user/starred/{owner}/{repo}"] - }, - apps: { - addRepoToInstallation: [ - "PUT /user/installations/{installation_id}/repositories/{repository_id}", - {}, - { renamed: ["apps", "addRepoToInstallationForAuthenticatedUser"] } - ], - addRepoToInstallationForAuthenticatedUser: [ - "PUT /user/installations/{installation_id}/repositories/{repository_id}" - ], - checkToken: ["POST /applications/{client_id}/token"], - createFromManifest: ["POST /app-manifests/{code}/conversions"], - createInstallationAccessToken: [ - "POST /app/installations/{installation_id}/access_tokens" - ], - deleteAuthorization: ["DELETE /applications/{client_id}/grant"], - deleteInstallation: ["DELETE /app/installations/{installation_id}"], - deleteToken: ["DELETE /applications/{client_id}/token"], - getAuthenticated: ["GET /app"], - getBySlug: ["GET /apps/{app_slug}"], - getInstallation: ["GET /app/installations/{installation_id}"], - getOrgInstallation: ["GET /orgs/{org}/installation"], - getRepoInstallation: ["GET /repos/{owner}/{repo}/installation"], - getSubscriptionPlanForAccount: [ - "GET /marketplace_listing/accounts/{account_id}" - ], - getSubscriptionPlanForAccountStubbed: [ - "GET /marketplace_listing/stubbed/accounts/{account_id}" - ], - getUserInstallation: ["GET /users/{username}/installation"], - getWebhookConfigForApp: ["GET /app/hook/config"], - getWebhookDelivery: ["GET /app/hook/deliveries/{delivery_id}"], - listAccountsForPlan: ["GET /marketplace_listing/plans/{plan_id}/accounts"], - listAccountsForPlanStubbed: [ - "GET /marketplace_listing/stubbed/plans/{plan_id}/accounts" - ], - listInstallationReposForAuthenticatedUser: [ - "GET /user/installations/{installation_id}/repositories" - ], - listInstallationRequestsForAuthenticatedApp: [ - "GET /app/installation-requests" - ], - listInstallations: ["GET /app/installations"], - listInstallationsForAuthenticatedUser: ["GET /user/installations"], - listPlans: ["GET /marketplace_listing/plans"], - listPlansStubbed: ["GET /marketplace_listing/stubbed/plans"], - listReposAccessibleToInstallation: ["GET /installation/repositories"], - listSubscriptionsForAuthenticatedUser: ["GET /user/marketplace_purchases"], - listSubscriptionsForAuthenticatedUserStubbed: [ - "GET /user/marketplace_purchases/stubbed" - ], - listWebhookDeliveries: ["GET /app/hook/deliveries"], - redeliverWebhookDelivery: [ - "POST /app/hook/deliveries/{delivery_id}/attempts" - ], - removeRepoFromInstallation: [ - "DELETE /user/installations/{installation_id}/repositories/{repository_id}", - {}, - { renamed: ["apps", "removeRepoFromInstallationForAuthenticatedUser"] } - ], - removeRepoFromInstallationForAuthenticatedUser: [ - "DELETE /user/installations/{installation_id}/repositories/{repository_id}" - ], - resetToken: ["PATCH /applications/{client_id}/token"], - revokeInstallationAccessToken: ["DELETE /installation/token"], - scopeToken: ["POST /applications/{client_id}/token/scoped"], - suspendInstallation: ["PUT /app/installations/{installation_id}/suspended"], - unsuspendInstallation: [ - "DELETE /app/installations/{installation_id}/suspended" - ], - updateWebhookConfigForApp: ["PATCH /app/hook/config"] - }, - billing: { - getGithubActionsBillingOrg: ["GET /orgs/{org}/settings/billing/actions"], - getGithubActionsBillingUser: [ - "GET /users/{username}/settings/billing/actions" - ], - getGithubPackagesBillingOrg: ["GET /orgs/{org}/settings/billing/packages"], - getGithubPackagesBillingUser: [ - "GET /users/{username}/settings/billing/packages" - ], - getSharedStorageBillingOrg: [ - "GET /orgs/{org}/settings/billing/shared-storage" - ], - getSharedStorageBillingUser: [ - "GET /users/{username}/settings/billing/shared-storage" - ] - }, - checks: { - create: ["POST /repos/{owner}/{repo}/check-runs"], - createSuite: ["POST /repos/{owner}/{repo}/check-suites"], - get: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"], - getSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"], - listAnnotations: [ - "GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations" - ], - listForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"], - listForSuite: [ - "GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs" - ], - listSuitesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"], - rerequestRun: [ - "POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest" - ], - rerequestSuite: [ - "POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest" - ], - setSuitesPreferences: [ - "PATCH /repos/{owner}/{repo}/check-suites/preferences" - ], - update: ["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"] - }, - codeScanning: { - deleteAnalysis: [ - "DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}" - ], - getAlert: [ - "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}", - {}, - { renamedParameters: { alert_id: "alert_number" } } - ], - getAnalysis: [ - "GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}" - ], - getCodeqlDatabase: [ - "GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}" - ], - getDefaultSetup: ["GET /repos/{owner}/{repo}/code-scanning/default-setup"], - getSarif: ["GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}"], - listAlertInstances: [ - "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances" - ], - listAlertsForOrg: ["GET /orgs/{org}/code-scanning/alerts"], - listAlertsForRepo: ["GET /repos/{owner}/{repo}/code-scanning/alerts"], - listAlertsInstances: [ - "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances", - {}, - { renamed: ["codeScanning", "listAlertInstances"] } - ], - listCodeqlDatabases: [ - "GET /repos/{owner}/{repo}/code-scanning/codeql/databases" - ], - listRecentAnalyses: ["GET /repos/{owner}/{repo}/code-scanning/analyses"], - updateAlert: [ - "PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}" - ], - updateDefaultSetup: [ - "PATCH /repos/{owner}/{repo}/code-scanning/default-setup" - ], - uploadSarif: ["POST /repos/{owner}/{repo}/code-scanning/sarifs"] - }, - codesOfConduct: { - getAllCodesOfConduct: ["GET /codes_of_conduct"], - getConductCode: ["GET /codes_of_conduct/{key}"] - }, - codespaces: { - addRepositoryForSecretForAuthenticatedUser: [ - "PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}" - ], - addSelectedRepoToOrgSecret: [ - "PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}" - ], - checkPermissionsForDevcontainer: [ - "GET /repos/{owner}/{repo}/codespaces/permissions_check" - ], - codespaceMachinesForAuthenticatedUser: [ - "GET /user/codespaces/{codespace_name}/machines" - ], - createForAuthenticatedUser: ["POST /user/codespaces"], - createOrUpdateOrgSecret: [ - "PUT /orgs/{org}/codespaces/secrets/{secret_name}" - ], - createOrUpdateRepoSecret: [ - "PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}" - ], - createOrUpdateSecretForAuthenticatedUser: [ - "PUT /user/codespaces/secrets/{secret_name}" - ], - createWithPrForAuthenticatedUser: [ - "POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces" - ], - createWithRepoForAuthenticatedUser: [ - "POST /repos/{owner}/{repo}/codespaces" - ], - deleteForAuthenticatedUser: ["DELETE /user/codespaces/{codespace_name}"], - deleteFromOrganization: [ - "DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}" - ], - deleteOrgSecret: ["DELETE /orgs/{org}/codespaces/secrets/{secret_name}"], - deleteRepoSecret: [ - "DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}" - ], - deleteSecretForAuthenticatedUser: [ - "DELETE /user/codespaces/secrets/{secret_name}" - ], - exportForAuthenticatedUser: [ - "POST /user/codespaces/{codespace_name}/exports" - ], - getCodespacesForUserInOrg: [ - "GET /orgs/{org}/members/{username}/codespaces" - ], - getExportDetailsForAuthenticatedUser: [ - "GET /user/codespaces/{codespace_name}/exports/{export_id}" - ], - getForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}"], - getOrgPublicKey: ["GET /orgs/{org}/codespaces/secrets/public-key"], - getOrgSecret: ["GET /orgs/{org}/codespaces/secrets/{secret_name}"], - getPublicKeyForAuthenticatedUser: [ - "GET /user/codespaces/secrets/public-key" - ], - getRepoPublicKey: [ - "GET /repos/{owner}/{repo}/codespaces/secrets/public-key" - ], - getRepoSecret: [ - "GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}" - ], - getSecretForAuthenticatedUser: [ - "GET /user/codespaces/secrets/{secret_name}" - ], - listDevcontainersInRepositoryForAuthenticatedUser: [ - "GET /repos/{owner}/{repo}/codespaces/devcontainers" - ], - listForAuthenticatedUser: ["GET /user/codespaces"], - listInOrganization: [ - "GET /orgs/{org}/codespaces", - {}, - { renamedParameters: { org_id: "org" } } - ], - listInRepositoryForAuthenticatedUser: [ - "GET /repos/{owner}/{repo}/codespaces" - ], - listOrgSecrets: ["GET /orgs/{org}/codespaces/secrets"], - listRepoSecrets: ["GET /repos/{owner}/{repo}/codespaces/secrets"], - listRepositoriesForSecretForAuthenticatedUser: [ - "GET /user/codespaces/secrets/{secret_name}/repositories" - ], - listSecretsForAuthenticatedUser: ["GET /user/codespaces/secrets"], - listSelectedReposForOrgSecret: [ - "GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories" - ], - preFlightWithRepoForAuthenticatedUser: [ - "GET /repos/{owner}/{repo}/codespaces/new" - ], - publishForAuthenticatedUser: [ - "POST /user/codespaces/{codespace_name}/publish" - ], - removeRepositoryForSecretForAuthenticatedUser: [ - "DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}" - ], - removeSelectedRepoFromOrgSecret: [ - "DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}" - ], - repoMachinesForAuthenticatedUser: [ - "GET /repos/{owner}/{repo}/codespaces/machines" - ], - setRepositoriesForSecretForAuthenticatedUser: [ - "PUT /user/codespaces/secrets/{secret_name}/repositories" - ], - setSelectedReposForOrgSecret: [ - "PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories" - ], - startForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/start"], - stopForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/stop"], - stopInOrganization: [ - "POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop" - ], - updateForAuthenticatedUser: ["PATCH /user/codespaces/{codespace_name}"] - }, - copilot: { - addCopilotSeatsForTeams: [ - "POST /orgs/{org}/copilot/billing/selected_teams" - ], - addCopilotSeatsForUsers: [ - "POST /orgs/{org}/copilot/billing/selected_users" - ], - cancelCopilotSeatAssignmentForTeams: [ - "DELETE /orgs/{org}/copilot/billing/selected_teams" - ], - cancelCopilotSeatAssignmentForUsers: [ - "DELETE /orgs/{org}/copilot/billing/selected_users" - ], - getCopilotOrganizationDetails: ["GET /orgs/{org}/copilot/billing"], - getCopilotSeatDetailsForUser: [ - "GET /orgs/{org}/members/{username}/copilot" - ], - listCopilotSeats: ["GET /orgs/{org}/copilot/billing/seats"], - usageMetricsForEnterprise: ["GET /enterprises/{enterprise}/copilot/usage"], - usageMetricsForOrg: ["GET /orgs/{org}/copilot/usage"], - usageMetricsForTeam: ["GET /orgs/{org}/team/{team_slug}/copilot/usage"] - }, - dependabot: { - addSelectedRepoToOrgSecret: [ - "PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}" - ], - createOrUpdateOrgSecret: [ - "PUT /orgs/{org}/dependabot/secrets/{secret_name}" - ], - createOrUpdateRepoSecret: [ - "PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}" - ], - deleteOrgSecret: ["DELETE /orgs/{org}/dependabot/secrets/{secret_name}"], - deleteRepoSecret: [ - "DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}" - ], - getAlert: ["GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}"], - getOrgPublicKey: ["GET /orgs/{org}/dependabot/secrets/public-key"], - getOrgSecret: ["GET /orgs/{org}/dependabot/secrets/{secret_name}"], - getRepoPublicKey: [ - "GET /repos/{owner}/{repo}/dependabot/secrets/public-key" - ], - getRepoSecret: [ - "GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}" - ], - listAlertsForEnterprise: [ - "GET /enterprises/{enterprise}/dependabot/alerts" - ], - listAlertsForOrg: ["GET /orgs/{org}/dependabot/alerts"], - listAlertsForRepo: ["GET /repos/{owner}/{repo}/dependabot/alerts"], - listOrgSecrets: ["GET /orgs/{org}/dependabot/secrets"], - listRepoSecrets: ["GET /repos/{owner}/{repo}/dependabot/secrets"], - listSelectedReposForOrgSecret: [ - "GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories" - ], - removeSelectedRepoFromOrgSecret: [ - "DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}" - ], - setSelectedReposForOrgSecret: [ - "PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories" - ], - updateAlert: [ - "PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}" - ] - }, - dependencyGraph: { - createRepositorySnapshot: [ - "POST /repos/{owner}/{repo}/dependency-graph/snapshots" - ], - diffRange: [ - "GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}" - ], - exportSbom: ["GET /repos/{owner}/{repo}/dependency-graph/sbom"] - }, - emojis: { get: ["GET /emojis"] }, - gists: { - checkIsStarred: ["GET /gists/{gist_id}/star"], - create: ["POST /gists"], - createComment: ["POST /gists/{gist_id}/comments"], - delete: ["DELETE /gists/{gist_id}"], - deleteComment: ["DELETE /gists/{gist_id}/comments/{comment_id}"], - fork: ["POST /gists/{gist_id}/forks"], - get: ["GET /gists/{gist_id}"], - getComment: ["GET /gists/{gist_id}/comments/{comment_id}"], - getRevision: ["GET /gists/{gist_id}/{sha}"], - list: ["GET /gists"], - listComments: ["GET /gists/{gist_id}/comments"], - listCommits: ["GET /gists/{gist_id}/commits"], - listForUser: ["GET /users/{username}/gists"], - listForks: ["GET /gists/{gist_id}/forks"], - listPublic: ["GET /gists/public"], - listStarred: ["GET /gists/starred"], - star: ["PUT /gists/{gist_id}/star"], - unstar: ["DELETE /gists/{gist_id}/star"], - update: ["PATCH /gists/{gist_id}"], - updateComment: ["PATCH /gists/{gist_id}/comments/{comment_id}"] - }, - git: { - createBlob: ["POST /repos/{owner}/{repo}/git/blobs"], - createCommit: ["POST /repos/{owner}/{repo}/git/commits"], - createRef: ["POST /repos/{owner}/{repo}/git/refs"], - createTag: ["POST /repos/{owner}/{repo}/git/tags"], - createTree: ["POST /repos/{owner}/{repo}/git/trees"], - deleteRef: ["DELETE /repos/{owner}/{repo}/git/refs/{ref}"], - getBlob: ["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"], - getCommit: ["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"], - getRef: ["GET /repos/{owner}/{repo}/git/ref/{ref}"], - getTag: ["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"], - getTree: ["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"], - listMatchingRefs: ["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"], - updateRef: ["PATCH /repos/{owner}/{repo}/git/refs/{ref}"] - }, - gitignore: { - getAllTemplates: ["GET /gitignore/templates"], - getTemplate: ["GET /gitignore/templates/{name}"] - }, - interactions: { - getRestrictionsForAuthenticatedUser: ["GET /user/interaction-limits"], - getRestrictionsForOrg: ["GET /orgs/{org}/interaction-limits"], - getRestrictionsForRepo: ["GET /repos/{owner}/{repo}/interaction-limits"], - getRestrictionsForYourPublicRepos: [ - "GET /user/interaction-limits", - {}, - { renamed: ["interactions", "getRestrictionsForAuthenticatedUser"] } - ], - removeRestrictionsForAuthenticatedUser: ["DELETE /user/interaction-limits"], - removeRestrictionsForOrg: ["DELETE /orgs/{org}/interaction-limits"], - removeRestrictionsForRepo: [ - "DELETE /repos/{owner}/{repo}/interaction-limits" - ], - removeRestrictionsForYourPublicRepos: [ - "DELETE /user/interaction-limits", - {}, - { renamed: ["interactions", "removeRestrictionsForAuthenticatedUser"] } - ], - setRestrictionsForAuthenticatedUser: ["PUT /user/interaction-limits"], - setRestrictionsForOrg: ["PUT /orgs/{org}/interaction-limits"], - setRestrictionsForRepo: ["PUT /repos/{owner}/{repo}/interaction-limits"], - setRestrictionsForYourPublicRepos: [ - "PUT /user/interaction-limits", - {}, - { renamed: ["interactions", "setRestrictionsForAuthenticatedUser"] } - ] - }, - issues: { - addAssignees: [ - "POST /repos/{owner}/{repo}/issues/{issue_number}/assignees" - ], - addLabels: ["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"], - checkUserCanBeAssigned: ["GET /repos/{owner}/{repo}/assignees/{assignee}"], - checkUserCanBeAssignedToIssue: [ - "GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}" - ], - create: ["POST /repos/{owner}/{repo}/issues"], - createComment: [ - "POST /repos/{owner}/{repo}/issues/{issue_number}/comments" - ], - createLabel: ["POST /repos/{owner}/{repo}/labels"], - createMilestone: ["POST /repos/{owner}/{repo}/milestones"], - deleteComment: [ - "DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}" - ], - deleteLabel: ["DELETE /repos/{owner}/{repo}/labels/{name}"], - deleteMilestone: [ - "DELETE /repos/{owner}/{repo}/milestones/{milestone_number}" - ], - get: ["GET /repos/{owner}/{repo}/issues/{issue_number}"], - getComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"], - getEvent: ["GET /repos/{owner}/{repo}/issues/events/{event_id}"], - getLabel: ["GET /repos/{owner}/{repo}/labels/{name}"], - getMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}"], - list: ["GET /issues"], - listAssignees: ["GET /repos/{owner}/{repo}/assignees"], - listComments: ["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"], - listCommentsForRepo: ["GET /repos/{owner}/{repo}/issues/comments"], - listEvents: ["GET /repos/{owner}/{repo}/issues/{issue_number}/events"], - listEventsForRepo: ["GET /repos/{owner}/{repo}/issues/events"], - listEventsForTimeline: [ - "GET /repos/{owner}/{repo}/issues/{issue_number}/timeline" - ], - listForAuthenticatedUser: ["GET /user/issues"], - listForOrg: ["GET /orgs/{org}/issues"], - listForRepo: ["GET /repos/{owner}/{repo}/issues"], - listLabelsForMilestone: [ - "GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels" - ], - listLabelsForRepo: ["GET /repos/{owner}/{repo}/labels"], - listLabelsOnIssue: [ - "GET /repos/{owner}/{repo}/issues/{issue_number}/labels" - ], - listMilestones: ["GET /repos/{owner}/{repo}/milestones"], - lock: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"], - removeAllLabels: [ - "DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels" - ], - removeAssignees: [ - "DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees" - ], - removeLabel: [ - "DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}" - ], - setLabels: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"], - unlock: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"], - update: ["PATCH /repos/{owner}/{repo}/issues/{issue_number}"], - updateComment: ["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"], - updateLabel: ["PATCH /repos/{owner}/{repo}/labels/{name}"], - updateMilestone: [ - "PATCH /repos/{owner}/{repo}/milestones/{milestone_number}" - ] - }, - licenses: { - get: ["GET /licenses/{license}"], - getAllCommonlyUsed: ["GET /licenses"], - getForRepo: ["GET /repos/{owner}/{repo}/license"] - }, - markdown: { - render: ["POST /markdown"], - renderRaw: [ - "POST /markdown/raw", - { headers: { "content-type": "text/plain; charset=utf-8" } } - ] - }, - meta: { - get: ["GET /meta"], - getAllVersions: ["GET /versions"], - getOctocat: ["GET /octocat"], - getZen: ["GET /zen"], - root: ["GET /"] - }, - migrations: { - deleteArchiveForAuthenticatedUser: [ - "DELETE /user/migrations/{migration_id}/archive" - ], - deleteArchiveForOrg: [ - "DELETE /orgs/{org}/migrations/{migration_id}/archive" - ], - downloadArchiveForOrg: [ - "GET /orgs/{org}/migrations/{migration_id}/archive" - ], - getArchiveForAuthenticatedUser: [ - "GET /user/migrations/{migration_id}/archive" - ], - getStatusForAuthenticatedUser: ["GET /user/migrations/{migration_id}"], - getStatusForOrg: ["GET /orgs/{org}/migrations/{migration_id}"], - listForAuthenticatedUser: ["GET /user/migrations"], - listForOrg: ["GET /orgs/{org}/migrations"], - listReposForAuthenticatedUser: [ - "GET /user/migrations/{migration_id}/repositories" - ], - listReposForOrg: ["GET /orgs/{org}/migrations/{migration_id}/repositories"], - listReposForUser: [ - "GET /user/migrations/{migration_id}/repositories", - {}, - { renamed: ["migrations", "listReposForAuthenticatedUser"] } - ], - startForAuthenticatedUser: ["POST /user/migrations"], - startForOrg: ["POST /orgs/{org}/migrations"], - unlockRepoForAuthenticatedUser: [ - "DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock" - ], - unlockRepoForOrg: [ - "DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock" - ] - }, - oidc: { - getOidcCustomSubTemplateForOrg: [ - "GET /orgs/{org}/actions/oidc/customization/sub" - ], - updateOidcCustomSubTemplateForOrg: [ - "PUT /orgs/{org}/actions/oidc/customization/sub" - ] - }, - orgs: { - addSecurityManagerTeam: [ - "PUT /orgs/{org}/security-managers/teams/{team_slug}" - ], - assignTeamToOrgRole: [ - "PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}" - ], - assignUserToOrgRole: [ - "PUT /orgs/{org}/organization-roles/users/{username}/{role_id}" - ], - blockUser: ["PUT /orgs/{org}/blocks/{username}"], - cancelInvitation: ["DELETE /orgs/{org}/invitations/{invitation_id}"], - checkBlockedUser: ["GET /orgs/{org}/blocks/{username}"], - checkMembershipForUser: ["GET /orgs/{org}/members/{username}"], - checkPublicMembershipForUser: ["GET /orgs/{org}/public_members/{username}"], - convertMemberToOutsideCollaborator: [ - "PUT /orgs/{org}/outside_collaborators/{username}" - ], - createCustomOrganizationRole: ["POST /orgs/{org}/organization-roles"], - createInvitation: ["POST /orgs/{org}/invitations"], - createOrUpdateCustomProperties: ["PATCH /orgs/{org}/properties/schema"], - createOrUpdateCustomPropertiesValuesForRepos: [ - "PATCH /orgs/{org}/properties/values" - ], - createOrUpdateCustomProperty: [ - "PUT /orgs/{org}/properties/schema/{custom_property_name}" - ], - createWebhook: ["POST /orgs/{org}/hooks"], - delete: ["DELETE /orgs/{org}"], - deleteCustomOrganizationRole: [ - "DELETE /orgs/{org}/organization-roles/{role_id}" - ], - deleteWebhook: ["DELETE /orgs/{org}/hooks/{hook_id}"], - enableOrDisableSecurityProductOnAllOrgRepos: [ - "POST /orgs/{org}/{security_product}/{enablement}" - ], - get: ["GET /orgs/{org}"], - getAllCustomProperties: ["GET /orgs/{org}/properties/schema"], - getCustomProperty: [ - "GET /orgs/{org}/properties/schema/{custom_property_name}" - ], - getMembershipForAuthenticatedUser: ["GET /user/memberships/orgs/{org}"], - getMembershipForUser: ["GET /orgs/{org}/memberships/{username}"], - getOrgRole: ["GET /orgs/{org}/organization-roles/{role_id}"], - getWebhook: ["GET /orgs/{org}/hooks/{hook_id}"], - getWebhookConfigForOrg: ["GET /orgs/{org}/hooks/{hook_id}/config"], - getWebhookDelivery: [ - "GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}" - ], - list: ["GET /organizations"], - listAppInstallations: ["GET /orgs/{org}/installations"], - listBlockedUsers: ["GET /orgs/{org}/blocks"], - listCustomPropertiesValuesForRepos: ["GET /orgs/{org}/properties/values"], - listFailedInvitations: ["GET /orgs/{org}/failed_invitations"], - listForAuthenticatedUser: ["GET /user/orgs"], - listForUser: ["GET /users/{username}/orgs"], - listInvitationTeams: ["GET /orgs/{org}/invitations/{invitation_id}/teams"], - listMembers: ["GET /orgs/{org}/members"], - listMembershipsForAuthenticatedUser: ["GET /user/memberships/orgs"], - listOrgRoleTeams: ["GET /orgs/{org}/organization-roles/{role_id}/teams"], - listOrgRoleUsers: ["GET /orgs/{org}/organization-roles/{role_id}/users"], - listOrgRoles: ["GET /orgs/{org}/organization-roles"], - listOrganizationFineGrainedPermissions: [ - "GET /orgs/{org}/organization-fine-grained-permissions" - ], - listOutsideCollaborators: ["GET /orgs/{org}/outside_collaborators"], - listPatGrantRepositories: [ - "GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories" - ], - listPatGrantRequestRepositories: [ - "GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories" - ], - listPatGrantRequests: ["GET /orgs/{org}/personal-access-token-requests"], - listPatGrants: ["GET /orgs/{org}/personal-access-tokens"], - listPendingInvitations: ["GET /orgs/{org}/invitations"], - listPublicMembers: ["GET /orgs/{org}/public_members"], - listSecurityManagerTeams: ["GET /orgs/{org}/security-managers"], - listWebhookDeliveries: ["GET /orgs/{org}/hooks/{hook_id}/deliveries"], - listWebhooks: ["GET /orgs/{org}/hooks"], - patchCustomOrganizationRole: [ - "PATCH /orgs/{org}/organization-roles/{role_id}" - ], - pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"], - redeliverWebhookDelivery: [ - "POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts" - ], - removeCustomProperty: [ - "DELETE /orgs/{org}/properties/schema/{custom_property_name}" - ], - removeMember: ["DELETE /orgs/{org}/members/{username}"], - removeMembershipForUser: ["DELETE /orgs/{org}/memberships/{username}"], - removeOutsideCollaborator: [ - "DELETE /orgs/{org}/outside_collaborators/{username}" - ], - removePublicMembershipForAuthenticatedUser: [ - "DELETE /orgs/{org}/public_members/{username}" - ], - removeSecurityManagerTeam: [ - "DELETE /orgs/{org}/security-managers/teams/{team_slug}" - ], - reviewPatGrantRequest: [ - "POST /orgs/{org}/personal-access-token-requests/{pat_request_id}" - ], - reviewPatGrantRequestsInBulk: [ - "POST /orgs/{org}/personal-access-token-requests" - ], - revokeAllOrgRolesTeam: [ - "DELETE /orgs/{org}/organization-roles/teams/{team_slug}" - ], - revokeAllOrgRolesUser: [ - "DELETE /orgs/{org}/organization-roles/users/{username}" - ], - revokeOrgRoleTeam: [ - "DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}" - ], - revokeOrgRoleUser: [ - "DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}" - ], - setMembershipForUser: ["PUT /orgs/{org}/memberships/{username}"], - setPublicMembershipForAuthenticatedUser: [ - "PUT /orgs/{org}/public_members/{username}" - ], - unblockUser: ["DELETE /orgs/{org}/blocks/{username}"], - update: ["PATCH /orgs/{org}"], - updateMembershipForAuthenticatedUser: [ - "PATCH /user/memberships/orgs/{org}" - ], - updatePatAccess: ["POST /orgs/{org}/personal-access-tokens/{pat_id}"], - updatePatAccesses: ["POST /orgs/{org}/personal-access-tokens"], - updateWebhook: ["PATCH /orgs/{org}/hooks/{hook_id}"], - updateWebhookConfigForOrg: ["PATCH /orgs/{org}/hooks/{hook_id}/config"] - }, - packages: { - deletePackageForAuthenticatedUser: [ - "DELETE /user/packages/{package_type}/{package_name}" - ], - deletePackageForOrg: [ - "DELETE /orgs/{org}/packages/{package_type}/{package_name}" - ], - deletePackageForUser: [ - "DELETE /users/{username}/packages/{package_type}/{package_name}" - ], - deletePackageVersionForAuthenticatedUser: [ - "DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}" - ], - deletePackageVersionForOrg: [ - "DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}" - ], - deletePackageVersionForUser: [ - "DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}" - ], - getAllPackageVersionsForAPackageOwnedByAnOrg: [ - "GET /orgs/{org}/packages/{package_type}/{package_name}/versions", - {}, - { renamed: ["packages", "getAllPackageVersionsForPackageOwnedByOrg"] } - ], - getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser: [ - "GET /user/packages/{package_type}/{package_name}/versions", - {}, - { - renamed: [ - "packages", - "getAllPackageVersionsForPackageOwnedByAuthenticatedUser" - ] - } - ], - getAllPackageVersionsForPackageOwnedByAuthenticatedUser: [ - "GET /user/packages/{package_type}/{package_name}/versions" - ], - getAllPackageVersionsForPackageOwnedByOrg: [ - "GET /orgs/{org}/packages/{package_type}/{package_name}/versions" - ], - getAllPackageVersionsForPackageOwnedByUser: [ - "GET /users/{username}/packages/{package_type}/{package_name}/versions" - ], - getPackageForAuthenticatedUser: [ - "GET /user/packages/{package_type}/{package_name}" - ], - getPackageForOrganization: [ - "GET /orgs/{org}/packages/{package_type}/{package_name}" - ], - getPackageForUser: [ - "GET /users/{username}/packages/{package_type}/{package_name}" - ], - getPackageVersionForAuthenticatedUser: [ - "GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}" - ], - getPackageVersionForOrganization: [ - "GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}" - ], - getPackageVersionForUser: [ - "GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}" - ], - listDockerMigrationConflictingPackagesForAuthenticatedUser: [ - "GET /user/docker/conflicts" - ], - listDockerMigrationConflictingPackagesForOrganization: [ - "GET /orgs/{org}/docker/conflicts" - ], - listDockerMigrationConflictingPackagesForUser: [ - "GET /users/{username}/docker/conflicts" - ], - listPackagesForAuthenticatedUser: ["GET /user/packages"], - listPackagesForOrganization: ["GET /orgs/{org}/packages"], - listPackagesForUser: ["GET /users/{username}/packages"], - restorePackageForAuthenticatedUser: [ - "POST /user/packages/{package_type}/{package_name}/restore{?token}" - ], - restorePackageForOrg: [ - "POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}" - ], - restorePackageForUser: [ - "POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}" - ], - restorePackageVersionForAuthenticatedUser: [ - "POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore" - ], - restorePackageVersionForOrg: [ - "POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore" - ], - restorePackageVersionForUser: [ - "POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore" - ] - }, - projects: { - addCollaborator: ["PUT /projects/{project_id}/collaborators/{username}"], - createCard: ["POST /projects/columns/{column_id}/cards"], - createColumn: ["POST /projects/{project_id}/columns"], - createForAuthenticatedUser: ["POST /user/projects"], - createForOrg: ["POST /orgs/{org}/projects"], - createForRepo: ["POST /repos/{owner}/{repo}/projects"], - delete: ["DELETE /projects/{project_id}"], - deleteCard: ["DELETE /projects/columns/cards/{card_id}"], - deleteColumn: ["DELETE /projects/columns/{column_id}"], - get: ["GET /projects/{project_id}"], - getCard: ["GET /projects/columns/cards/{card_id}"], - getColumn: ["GET /projects/columns/{column_id}"], - getPermissionForUser: [ - "GET /projects/{project_id}/collaborators/{username}/permission" - ], - listCards: ["GET /projects/columns/{column_id}/cards"], - listCollaborators: ["GET /projects/{project_id}/collaborators"], - listColumns: ["GET /projects/{project_id}/columns"], - listForOrg: ["GET /orgs/{org}/projects"], - listForRepo: ["GET /repos/{owner}/{repo}/projects"], - listForUser: ["GET /users/{username}/projects"], - moveCard: ["POST /projects/columns/cards/{card_id}/moves"], - moveColumn: ["POST /projects/columns/{column_id}/moves"], - removeCollaborator: [ - "DELETE /projects/{project_id}/collaborators/{username}" - ], - update: ["PATCH /projects/{project_id}"], - updateCard: ["PATCH /projects/columns/cards/{card_id}"], - updateColumn: ["PATCH /projects/columns/{column_id}"] - }, - pulls: { - checkIfMerged: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/merge"], - create: ["POST /repos/{owner}/{repo}/pulls"], - createReplyForReviewComment: [ - "POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies" - ], - createReview: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews"], - createReviewComment: [ - "POST /repos/{owner}/{repo}/pulls/{pull_number}/comments" - ], - deletePendingReview: [ - "DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}" - ], - deleteReviewComment: [ - "DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}" - ], - dismissReview: [ - "PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals" - ], - get: ["GET /repos/{owner}/{repo}/pulls/{pull_number}"], - getReview: [ - "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}" - ], - getReviewComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"], - list: ["GET /repos/{owner}/{repo}/pulls"], - listCommentsForReview: [ - "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments" - ], - listCommits: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/commits"], - listFiles: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/files"], - listRequestedReviewers: [ - "GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers" - ], - listReviewComments: [ - "GET /repos/{owner}/{repo}/pulls/{pull_number}/comments" - ], - listReviewCommentsForRepo: ["GET /repos/{owner}/{repo}/pulls/comments"], - listReviews: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews"], - merge: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"], - removeRequestedReviewers: [ - "DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers" - ], - requestReviewers: [ - "POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers" - ], - submitReview: [ - "POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events" - ], - update: ["PATCH /repos/{owner}/{repo}/pulls/{pull_number}"], - updateBranch: [ - "PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch" - ], - updateReview: [ - "PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}" - ], - updateReviewComment: [ - "PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}" - ] - }, - rateLimit: { get: ["GET /rate_limit"] }, - reactions: { - createForCommitComment: [ - "POST /repos/{owner}/{repo}/comments/{comment_id}/reactions" - ], - createForIssue: [ - "POST /repos/{owner}/{repo}/issues/{issue_number}/reactions" - ], - createForIssueComment: [ - "POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions" - ], - createForPullRequestReviewComment: [ - "POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions" - ], - createForRelease: [ - "POST /repos/{owner}/{repo}/releases/{release_id}/reactions" - ], - createForTeamDiscussionCommentInOrg: [ - "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions" - ], - createForTeamDiscussionInOrg: [ - "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions" - ], - deleteForCommitComment: [ - "DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}" - ], - deleteForIssue: [ - "DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}" - ], - deleteForIssueComment: [ - "DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}" - ], - deleteForPullRequestComment: [ - "DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}" - ], - deleteForRelease: [ - "DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}" - ], - deleteForTeamDiscussion: [ - "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}" - ], - deleteForTeamDiscussionComment: [ - "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}" - ], - listForCommitComment: [ - "GET /repos/{owner}/{repo}/comments/{comment_id}/reactions" - ], - listForIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/reactions"], - listForIssueComment: [ - "GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions" - ], - listForPullRequestReviewComment: [ - "GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions" - ], - listForRelease: [ - "GET /repos/{owner}/{repo}/releases/{release_id}/reactions" - ], - listForTeamDiscussionCommentInOrg: [ - "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions" - ], - listForTeamDiscussionInOrg: [ - "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions" - ] - }, - repos: { - acceptInvitation: [ - "PATCH /user/repository_invitations/{invitation_id}", - {}, - { renamed: ["repos", "acceptInvitationForAuthenticatedUser"] } - ], - acceptInvitationForAuthenticatedUser: [ - "PATCH /user/repository_invitations/{invitation_id}" - ], - addAppAccessRestrictions: [ - "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", - {}, - { mapToData: "apps" } - ], - addCollaborator: ["PUT /repos/{owner}/{repo}/collaborators/{username}"], - addStatusCheckContexts: [ - "POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", - {}, - { mapToData: "contexts" } - ], - addTeamAccessRestrictions: [ - "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", - {}, - { mapToData: "teams" } - ], - addUserAccessRestrictions: [ - "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", - {}, - { mapToData: "users" } - ], - cancelPagesDeployment: [ - "POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel" - ], - checkAutomatedSecurityFixes: [ - "GET /repos/{owner}/{repo}/automated-security-fixes" - ], - checkCollaborator: ["GET /repos/{owner}/{repo}/collaborators/{username}"], - checkPrivateVulnerabilityReporting: [ - "GET /repos/{owner}/{repo}/private-vulnerability-reporting" - ], - checkVulnerabilityAlerts: [ - "GET /repos/{owner}/{repo}/vulnerability-alerts" - ], - codeownersErrors: ["GET /repos/{owner}/{repo}/codeowners/errors"], - compareCommits: ["GET /repos/{owner}/{repo}/compare/{base}...{head}"], - compareCommitsWithBasehead: [ - "GET /repos/{owner}/{repo}/compare/{basehead}" - ], - createAutolink: ["POST /repos/{owner}/{repo}/autolinks"], - createCommitComment: [ - "POST /repos/{owner}/{repo}/commits/{commit_sha}/comments" - ], - createCommitSignatureProtection: [ - "POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures" - ], - createCommitStatus: ["POST /repos/{owner}/{repo}/statuses/{sha}"], - createDeployKey: ["POST /repos/{owner}/{repo}/keys"], - createDeployment: ["POST /repos/{owner}/{repo}/deployments"], - createDeploymentBranchPolicy: [ - "POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies" - ], - createDeploymentProtectionRule: [ - "POST /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules" - ], - createDeploymentStatus: [ - "POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses" - ], - createDispatchEvent: ["POST /repos/{owner}/{repo}/dispatches"], - createForAuthenticatedUser: ["POST /user/repos"], - createFork: ["POST /repos/{owner}/{repo}/forks"], - createInOrg: ["POST /orgs/{org}/repos"], - createOrUpdateCustomPropertiesValues: [ - "PATCH /repos/{owner}/{repo}/properties/values" - ], - createOrUpdateEnvironment: [ - "PUT /repos/{owner}/{repo}/environments/{environment_name}" - ], - createOrUpdateFileContents: ["PUT /repos/{owner}/{repo}/contents/{path}"], - createOrgRuleset: ["POST /orgs/{org}/rulesets"], - createPagesDeployment: ["POST /repos/{owner}/{repo}/pages/deployments"], - createPagesSite: ["POST /repos/{owner}/{repo}/pages"], - createRelease: ["POST /repos/{owner}/{repo}/releases"], - createRepoRuleset: ["POST /repos/{owner}/{repo}/rulesets"], - createTagProtection: ["POST /repos/{owner}/{repo}/tags/protection"], - createUsingTemplate: [ - "POST /repos/{template_owner}/{template_repo}/generate" - ], - createWebhook: ["POST /repos/{owner}/{repo}/hooks"], - declineInvitation: [ - "DELETE /user/repository_invitations/{invitation_id}", - {}, - { renamed: ["repos", "declineInvitationForAuthenticatedUser"] } - ], - declineInvitationForAuthenticatedUser: [ - "DELETE /user/repository_invitations/{invitation_id}" - ], - delete: ["DELETE /repos/{owner}/{repo}"], - deleteAccessRestrictions: [ - "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions" - ], - deleteAdminBranchProtection: [ - "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins" - ], - deleteAnEnvironment: [ - "DELETE /repos/{owner}/{repo}/environments/{environment_name}" - ], - deleteAutolink: ["DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}"], - deleteBranchProtection: [ - "DELETE /repos/{owner}/{repo}/branches/{branch}/protection" - ], - deleteCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}"], - deleteCommitSignatureProtection: [ - "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures" - ], - deleteDeployKey: ["DELETE /repos/{owner}/{repo}/keys/{key_id}"], - deleteDeployment: [ - "DELETE /repos/{owner}/{repo}/deployments/{deployment_id}" - ], - deleteDeploymentBranchPolicy: [ - "DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}" - ], - deleteFile: ["DELETE /repos/{owner}/{repo}/contents/{path}"], - deleteInvitation: [ - "DELETE /repos/{owner}/{repo}/invitations/{invitation_id}" - ], - deleteOrgRuleset: ["DELETE /orgs/{org}/rulesets/{ruleset_id}"], - deletePagesSite: ["DELETE /repos/{owner}/{repo}/pages"], - deletePullRequestReviewProtection: [ - "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews" - ], - deleteRelease: ["DELETE /repos/{owner}/{repo}/releases/{release_id}"], - deleteReleaseAsset: [ - "DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}" - ], - deleteRepoRuleset: ["DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id}"], - deleteTagProtection: [ - "DELETE /repos/{owner}/{repo}/tags/protection/{tag_protection_id}" - ], - deleteWebhook: ["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"], - disableAutomatedSecurityFixes: [ - "DELETE /repos/{owner}/{repo}/automated-security-fixes" - ], - disableDeploymentProtectionRule: [ - "DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}" - ], - disablePrivateVulnerabilityReporting: [ - "DELETE /repos/{owner}/{repo}/private-vulnerability-reporting" - ], - disableVulnerabilityAlerts: [ - "DELETE /repos/{owner}/{repo}/vulnerability-alerts" - ], - downloadArchive: [ - "GET /repos/{owner}/{repo}/zipball/{ref}", - {}, - { renamed: ["repos", "downloadZipballArchive"] } - ], - downloadTarballArchive: ["GET /repos/{owner}/{repo}/tarball/{ref}"], - downloadZipballArchive: ["GET /repos/{owner}/{repo}/zipball/{ref}"], - enableAutomatedSecurityFixes: [ - "PUT /repos/{owner}/{repo}/automated-security-fixes" - ], - enablePrivateVulnerabilityReporting: [ - "PUT /repos/{owner}/{repo}/private-vulnerability-reporting" - ], - enableVulnerabilityAlerts: [ - "PUT /repos/{owner}/{repo}/vulnerability-alerts" - ], - generateReleaseNotes: [ - "POST /repos/{owner}/{repo}/releases/generate-notes" - ], - get: ["GET /repos/{owner}/{repo}"], - getAccessRestrictions: [ - "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions" - ], - getAdminBranchProtection: [ - "GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins" - ], - getAllDeploymentProtectionRules: [ - "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules" - ], - getAllEnvironments: ["GET /repos/{owner}/{repo}/environments"], - getAllStatusCheckContexts: [ - "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts" - ], - getAllTopics: ["GET /repos/{owner}/{repo}/topics"], - getAppsWithAccessToProtectedBranch: [ - "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps" - ], - getAutolink: ["GET /repos/{owner}/{repo}/autolinks/{autolink_id}"], - getBranch: ["GET /repos/{owner}/{repo}/branches/{branch}"], - getBranchProtection: [ - "GET /repos/{owner}/{repo}/branches/{branch}/protection" - ], - getBranchRules: ["GET /repos/{owner}/{repo}/rules/branches/{branch}"], - getClones: ["GET /repos/{owner}/{repo}/traffic/clones"], - getCodeFrequencyStats: ["GET /repos/{owner}/{repo}/stats/code_frequency"], - getCollaboratorPermissionLevel: [ - "GET /repos/{owner}/{repo}/collaborators/{username}/permission" - ], - getCombinedStatusForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/status"], - getCommit: ["GET /repos/{owner}/{repo}/commits/{ref}"], - getCommitActivityStats: ["GET /repos/{owner}/{repo}/stats/commit_activity"], - getCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}"], - getCommitSignatureProtection: [ - "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures" - ], - getCommunityProfileMetrics: ["GET /repos/{owner}/{repo}/community/profile"], - getContent: ["GET /repos/{owner}/{repo}/contents/{path}"], - getContributorsStats: ["GET /repos/{owner}/{repo}/stats/contributors"], - getCustomDeploymentProtectionRule: [ - "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}" - ], - getCustomPropertiesValues: ["GET /repos/{owner}/{repo}/properties/values"], - getDeployKey: ["GET /repos/{owner}/{repo}/keys/{key_id}"], - getDeployment: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}"], - getDeploymentBranchPolicy: [ - "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}" - ], - getDeploymentStatus: [ - "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}" - ], - getEnvironment: [ - "GET /repos/{owner}/{repo}/environments/{environment_name}" - ], - getLatestPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/latest"], - getLatestRelease: ["GET /repos/{owner}/{repo}/releases/latest"], - getOrgRuleSuite: ["GET /orgs/{org}/rulesets/rule-suites/{rule_suite_id}"], - getOrgRuleSuites: ["GET /orgs/{org}/rulesets/rule-suites"], - getOrgRuleset: ["GET /orgs/{org}/rulesets/{ruleset_id}"], - getOrgRulesets: ["GET /orgs/{org}/rulesets"], - getPages: ["GET /repos/{owner}/{repo}/pages"], - getPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/{build_id}"], - getPagesDeployment: [ - "GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}" - ], - getPagesHealthCheck: ["GET /repos/{owner}/{repo}/pages/health"], - getParticipationStats: ["GET /repos/{owner}/{repo}/stats/participation"], - getPullRequestReviewProtection: [ - "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews" - ], - getPunchCardStats: ["GET /repos/{owner}/{repo}/stats/punch_card"], - getReadme: ["GET /repos/{owner}/{repo}/readme"], - getReadmeInDirectory: ["GET /repos/{owner}/{repo}/readme/{dir}"], - getRelease: ["GET /repos/{owner}/{repo}/releases/{release_id}"], - getReleaseAsset: ["GET /repos/{owner}/{repo}/releases/assets/{asset_id}"], - getReleaseByTag: ["GET /repos/{owner}/{repo}/releases/tags/{tag}"], - getRepoRuleSuite: [ - "GET /repos/{owner}/{repo}/rulesets/rule-suites/{rule_suite_id}" - ], - getRepoRuleSuites: ["GET /repos/{owner}/{repo}/rulesets/rule-suites"], - getRepoRuleset: ["GET /repos/{owner}/{repo}/rulesets/{ruleset_id}"], - getRepoRulesets: ["GET /repos/{owner}/{repo}/rulesets"], - getStatusChecksProtection: [ - "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks" - ], - getTeamsWithAccessToProtectedBranch: [ - "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams" - ], - getTopPaths: ["GET /repos/{owner}/{repo}/traffic/popular/paths"], - getTopReferrers: ["GET /repos/{owner}/{repo}/traffic/popular/referrers"], - getUsersWithAccessToProtectedBranch: [ - "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users" - ], - getViews: ["GET /repos/{owner}/{repo}/traffic/views"], - getWebhook: ["GET /repos/{owner}/{repo}/hooks/{hook_id}"], - getWebhookConfigForRepo: [ - "GET /repos/{owner}/{repo}/hooks/{hook_id}/config" - ], - getWebhookDelivery: [ - "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}" - ], - listActivities: ["GET /repos/{owner}/{repo}/activity"], - listAutolinks: ["GET /repos/{owner}/{repo}/autolinks"], - listBranches: ["GET /repos/{owner}/{repo}/branches"], - listBranchesForHeadCommit: [ - "GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head" - ], - listCollaborators: ["GET /repos/{owner}/{repo}/collaborators"], - listCommentsForCommit: [ - "GET /repos/{owner}/{repo}/commits/{commit_sha}/comments" - ], - listCommitCommentsForRepo: ["GET /repos/{owner}/{repo}/comments"], - listCommitStatusesForRef: [ - "GET /repos/{owner}/{repo}/commits/{ref}/statuses" - ], - listCommits: ["GET /repos/{owner}/{repo}/commits"], - listContributors: ["GET /repos/{owner}/{repo}/contributors"], - listCustomDeploymentRuleIntegrations: [ - "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps" - ], - listDeployKeys: ["GET /repos/{owner}/{repo}/keys"], - listDeploymentBranchPolicies: [ - "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies" - ], - listDeploymentStatuses: [ - "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses" - ], - listDeployments: ["GET /repos/{owner}/{repo}/deployments"], - listForAuthenticatedUser: ["GET /user/repos"], - listForOrg: ["GET /orgs/{org}/repos"], - listForUser: ["GET /users/{username}/repos"], - listForks: ["GET /repos/{owner}/{repo}/forks"], - listInvitations: ["GET /repos/{owner}/{repo}/invitations"], - listInvitationsForAuthenticatedUser: ["GET /user/repository_invitations"], - listLanguages: ["GET /repos/{owner}/{repo}/languages"], - listPagesBuilds: ["GET /repos/{owner}/{repo}/pages/builds"], - listPublic: ["GET /repositories"], - listPullRequestsAssociatedWithCommit: [ - "GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls" - ], - listReleaseAssets: [ - "GET /repos/{owner}/{repo}/releases/{release_id}/assets" - ], - listReleases: ["GET /repos/{owner}/{repo}/releases"], - listTagProtection: ["GET /repos/{owner}/{repo}/tags/protection"], - listTags: ["GET /repos/{owner}/{repo}/tags"], - listTeams: ["GET /repos/{owner}/{repo}/teams"], - listWebhookDeliveries: [ - "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries" - ], - listWebhooks: ["GET /repos/{owner}/{repo}/hooks"], - merge: ["POST /repos/{owner}/{repo}/merges"], - mergeUpstream: ["POST /repos/{owner}/{repo}/merge-upstream"], - pingWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"], - redeliverWebhookDelivery: [ - "POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts" - ], - removeAppAccessRestrictions: [ - "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", - {}, - { mapToData: "apps" } - ], - removeCollaborator: [ - "DELETE /repos/{owner}/{repo}/collaborators/{username}" - ], - removeStatusCheckContexts: [ - "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", - {}, - { mapToData: "contexts" } - ], - removeStatusCheckProtection: [ - "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks" - ], - removeTeamAccessRestrictions: [ - "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", - {}, - { mapToData: "teams" } - ], - removeUserAccessRestrictions: [ - "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", - {}, - { mapToData: "users" } - ], - renameBranch: ["POST /repos/{owner}/{repo}/branches/{branch}/rename"], - replaceAllTopics: ["PUT /repos/{owner}/{repo}/topics"], - requestPagesBuild: ["POST /repos/{owner}/{repo}/pages/builds"], - setAdminBranchProtection: [ - "POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins" - ], - setAppAccessRestrictions: [ - "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", - {}, - { mapToData: "apps" } - ], - setStatusCheckContexts: [ - "PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", - {}, - { mapToData: "contexts" } - ], - setTeamAccessRestrictions: [ - "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", - {}, - { mapToData: "teams" } - ], - setUserAccessRestrictions: [ - "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", - {}, - { mapToData: "users" } - ], - testPushWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"], - transfer: ["POST /repos/{owner}/{repo}/transfer"], - update: ["PATCH /repos/{owner}/{repo}"], - updateBranchProtection: [ - "PUT /repos/{owner}/{repo}/branches/{branch}/protection" - ], - updateCommitComment: ["PATCH /repos/{owner}/{repo}/comments/{comment_id}"], - updateDeploymentBranchPolicy: [ - "PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}" - ], - updateInformationAboutPagesSite: ["PUT /repos/{owner}/{repo}/pages"], - updateInvitation: [ - "PATCH /repos/{owner}/{repo}/invitations/{invitation_id}" - ], - updateOrgRuleset: ["PUT /orgs/{org}/rulesets/{ruleset_id}"], - updatePullRequestReviewProtection: [ - "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews" - ], - updateRelease: ["PATCH /repos/{owner}/{repo}/releases/{release_id}"], - updateReleaseAsset: [ - "PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}" - ], - updateRepoRuleset: ["PUT /repos/{owner}/{repo}/rulesets/{ruleset_id}"], - updateStatusCheckPotection: [ - "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks", - {}, - { renamed: ["repos", "updateStatusCheckProtection"] } - ], - updateStatusCheckProtection: [ - "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks" - ], - updateWebhook: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"], - updateWebhookConfigForRepo: [ - "PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config" - ], - uploadReleaseAsset: [ - "POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}", - { baseUrl: "https://uploads.github.com" } - ] - }, - search: { - code: ["GET /search/code"], - commits: ["GET /search/commits"], - issuesAndPullRequests: ["GET /search/issues"], - labels: ["GET /search/labels"], - repos: ["GET /search/repositories"], - topics: ["GET /search/topics"], - users: ["GET /search/users"] - }, - secretScanning: { - getAlert: [ - "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}" - ], - listAlertsForEnterprise: [ - "GET /enterprises/{enterprise}/secret-scanning/alerts" - ], - listAlertsForOrg: ["GET /orgs/{org}/secret-scanning/alerts"], - listAlertsForRepo: ["GET /repos/{owner}/{repo}/secret-scanning/alerts"], - listLocationsForAlert: [ - "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations" - ], - updateAlert: [ - "PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}" - ] - }, - securityAdvisories: { - createFork: [ - "POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks" - ], - createPrivateVulnerabilityReport: [ - "POST /repos/{owner}/{repo}/security-advisories/reports" - ], - createRepositoryAdvisory: [ - "POST /repos/{owner}/{repo}/security-advisories" - ], - createRepositoryAdvisoryCveRequest: [ - "POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/cve" - ], - getGlobalAdvisory: ["GET /advisories/{ghsa_id}"], - getRepositoryAdvisory: [ - "GET /repos/{owner}/{repo}/security-advisories/{ghsa_id}" - ], - listGlobalAdvisories: ["GET /advisories"], - listOrgRepositoryAdvisories: ["GET /orgs/{org}/security-advisories"], - listRepositoryAdvisories: ["GET /repos/{owner}/{repo}/security-advisories"], - updateRepositoryAdvisory: [ - "PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id}" - ] - }, - teams: { - addOrUpdateMembershipForUserInOrg: [ - "PUT /orgs/{org}/teams/{team_slug}/memberships/{username}" - ], - addOrUpdateProjectPermissionsInOrg: [ - "PUT /orgs/{org}/teams/{team_slug}/projects/{project_id}" - ], - addOrUpdateRepoPermissionsInOrg: [ - "PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}" - ], - checkPermissionsForProjectInOrg: [ - "GET /orgs/{org}/teams/{team_slug}/projects/{project_id}" - ], - checkPermissionsForRepoInOrg: [ - "GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}" - ], - create: ["POST /orgs/{org}/teams"], - createDiscussionCommentInOrg: [ - "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments" - ], - createDiscussionInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions"], - deleteDiscussionCommentInOrg: [ - "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}" - ], - deleteDiscussionInOrg: [ - "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}" - ], - deleteInOrg: ["DELETE /orgs/{org}/teams/{team_slug}"], - getByName: ["GET /orgs/{org}/teams/{team_slug}"], - getDiscussionCommentInOrg: [ - "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}" - ], - getDiscussionInOrg: [ - "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}" - ], - getMembershipForUserInOrg: [ - "GET /orgs/{org}/teams/{team_slug}/memberships/{username}" - ], - list: ["GET /orgs/{org}/teams"], - listChildInOrg: ["GET /orgs/{org}/teams/{team_slug}/teams"], - listDiscussionCommentsInOrg: [ - "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments" - ], - listDiscussionsInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions"], - listForAuthenticatedUser: ["GET /user/teams"], - listMembersInOrg: ["GET /orgs/{org}/teams/{team_slug}/members"], - listPendingInvitationsInOrg: [ - "GET /orgs/{org}/teams/{team_slug}/invitations" - ], - listProjectsInOrg: ["GET /orgs/{org}/teams/{team_slug}/projects"], - listReposInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos"], - removeMembershipForUserInOrg: [ - "DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}" - ], - removeProjectInOrg: [ - "DELETE /orgs/{org}/teams/{team_slug}/projects/{project_id}" - ], - removeRepoInOrg: [ - "DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}" - ], - updateDiscussionCommentInOrg: [ - "PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}" - ], - updateDiscussionInOrg: [ - "PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}" - ], - updateInOrg: ["PATCH /orgs/{org}/teams/{team_slug}"] - }, - users: { - addEmailForAuthenticated: [ - "POST /user/emails", - {}, - { renamed: ["users", "addEmailForAuthenticatedUser"] } - ], - addEmailForAuthenticatedUser: ["POST /user/emails"], - addSocialAccountForAuthenticatedUser: ["POST /user/social_accounts"], - block: ["PUT /user/blocks/{username}"], - checkBlocked: ["GET /user/blocks/{username}"], - checkFollowingForUser: ["GET /users/{username}/following/{target_user}"], - checkPersonIsFollowedByAuthenticated: ["GET /user/following/{username}"], - createGpgKeyForAuthenticated: [ - "POST /user/gpg_keys", - {}, - { renamed: ["users", "createGpgKeyForAuthenticatedUser"] } - ], - createGpgKeyForAuthenticatedUser: ["POST /user/gpg_keys"], - createPublicSshKeyForAuthenticated: [ - "POST /user/keys", - {}, - { renamed: ["users", "createPublicSshKeyForAuthenticatedUser"] } - ], - createPublicSshKeyForAuthenticatedUser: ["POST /user/keys"], - createSshSigningKeyForAuthenticatedUser: ["POST /user/ssh_signing_keys"], - deleteEmailForAuthenticated: [ - "DELETE /user/emails", - {}, - { renamed: ["users", "deleteEmailForAuthenticatedUser"] } - ], - deleteEmailForAuthenticatedUser: ["DELETE /user/emails"], - deleteGpgKeyForAuthenticated: [ - "DELETE /user/gpg_keys/{gpg_key_id}", - {}, - { renamed: ["users", "deleteGpgKeyForAuthenticatedUser"] } - ], - deleteGpgKeyForAuthenticatedUser: ["DELETE /user/gpg_keys/{gpg_key_id}"], - deletePublicSshKeyForAuthenticated: [ - "DELETE /user/keys/{key_id}", - {}, - { renamed: ["users", "deletePublicSshKeyForAuthenticatedUser"] } - ], - deletePublicSshKeyForAuthenticatedUser: ["DELETE /user/keys/{key_id}"], - deleteSocialAccountForAuthenticatedUser: ["DELETE /user/social_accounts"], - deleteSshSigningKeyForAuthenticatedUser: [ - "DELETE /user/ssh_signing_keys/{ssh_signing_key_id}" - ], - follow: ["PUT /user/following/{username}"], - getAuthenticated: ["GET /user"], - getByUsername: ["GET /users/{username}"], - getContextForUser: ["GET /users/{username}/hovercard"], - getGpgKeyForAuthenticated: [ - "GET /user/gpg_keys/{gpg_key_id}", - {}, - { renamed: ["users", "getGpgKeyForAuthenticatedUser"] } - ], - getGpgKeyForAuthenticatedUser: ["GET /user/gpg_keys/{gpg_key_id}"], - getPublicSshKeyForAuthenticated: [ - "GET /user/keys/{key_id}", - {}, - { renamed: ["users", "getPublicSshKeyForAuthenticatedUser"] } - ], - getPublicSshKeyForAuthenticatedUser: ["GET /user/keys/{key_id}"], - getSshSigningKeyForAuthenticatedUser: [ - "GET /user/ssh_signing_keys/{ssh_signing_key_id}" - ], - list: ["GET /users"], - listBlockedByAuthenticated: [ - "GET /user/blocks", - {}, - { renamed: ["users", "listBlockedByAuthenticatedUser"] } - ], - listBlockedByAuthenticatedUser: ["GET /user/blocks"], - listEmailsForAuthenticated: [ - "GET /user/emails", - {}, - { renamed: ["users", "listEmailsForAuthenticatedUser"] } - ], - listEmailsForAuthenticatedUser: ["GET /user/emails"], - listFollowedByAuthenticated: [ - "GET /user/following", - {}, - { renamed: ["users", "listFollowedByAuthenticatedUser"] } - ], - listFollowedByAuthenticatedUser: ["GET /user/following"], - listFollowersForAuthenticatedUser: ["GET /user/followers"], - listFollowersForUser: ["GET /users/{username}/followers"], - listFollowingForUser: ["GET /users/{username}/following"], - listGpgKeysForAuthenticated: [ - "GET /user/gpg_keys", - {}, - { renamed: ["users", "listGpgKeysForAuthenticatedUser"] } - ], - listGpgKeysForAuthenticatedUser: ["GET /user/gpg_keys"], - listGpgKeysForUser: ["GET /users/{username}/gpg_keys"], - listPublicEmailsForAuthenticated: [ - "GET /user/public_emails", - {}, - { renamed: ["users", "listPublicEmailsForAuthenticatedUser"] } - ], - listPublicEmailsForAuthenticatedUser: ["GET /user/public_emails"], - listPublicKeysForUser: ["GET /users/{username}/keys"], - listPublicSshKeysForAuthenticated: [ - "GET /user/keys", - {}, - { renamed: ["users", "listPublicSshKeysForAuthenticatedUser"] } - ], - listPublicSshKeysForAuthenticatedUser: ["GET /user/keys"], - listSocialAccountsForAuthenticatedUser: ["GET /user/social_accounts"], - listSocialAccountsForUser: ["GET /users/{username}/social_accounts"], - listSshSigningKeysForAuthenticatedUser: ["GET /user/ssh_signing_keys"], - listSshSigningKeysForUser: ["GET /users/{username}/ssh_signing_keys"], - setPrimaryEmailVisibilityForAuthenticated: [ - "PATCH /user/email/visibility", - {}, - { renamed: ["users", "setPrimaryEmailVisibilityForAuthenticatedUser"] } - ], - setPrimaryEmailVisibilityForAuthenticatedUser: [ - "PATCH /user/email/visibility" - ], - unblock: ["DELETE /user/blocks/{username}"], - unfollow: ["DELETE /user/following/{username}"], - updateAuthenticated: ["PATCH /user"] - } -}; -var endpoints_default = Endpoints; - -const endpointMethodsMap = /* @__PURE__ */ new Map(); -for (const [scope, endpoints] of Object.entries(endpoints_default)) { - for (const [methodName, endpoint] of Object.entries(endpoints)) { - const [route, defaults, decorations] = endpoint; - const [method, url] = route.split(/ /); - const endpointDefaults = Object.assign( - { - method, - url - }, - defaults - ); - if (!endpointMethodsMap.has(scope)) { - endpointMethodsMap.set(scope, /* @__PURE__ */ new Map()); - } - endpointMethodsMap.get(scope).set(methodName, { - scope, - methodName, - endpointDefaults, - decorations - }); - } -} -const handler = { - has({ scope }, methodName) { - return endpointMethodsMap.get(scope).has(methodName); - }, - getOwnPropertyDescriptor(target, methodName) { - return { - value: this.get(target, methodName), - // ensures method is in the cache - configurable: true, - writable: true, - enumerable: true - }; - }, - defineProperty(target, methodName, descriptor) { - Object.defineProperty(target.cache, methodName, descriptor); - return true; - }, - deleteProperty(target, methodName) { - delete target.cache[methodName]; - return true; - }, - ownKeys({ scope }) { - return [...endpointMethodsMap.get(scope).keys()]; - }, - set(target, methodName, value) { - return target.cache[methodName] = value; - }, - get({ octokit, scope, cache }, methodName) { - if (cache[methodName]) { - return cache[methodName]; - } - const method = endpointMethodsMap.get(scope).get(methodName); - if (!method) { - return void 0; - } - const { endpointDefaults, decorations } = method; - if (decorations) { - cache[methodName] = decorate( - octokit, - scope, - methodName, - endpointDefaults, - decorations - ); - } else { - cache[methodName] = octokit.request.defaults(endpointDefaults); - } - return cache[methodName]; - } -}; -function endpointsToMethods(octokit) { - const newMethods = {}; - for (const scope of endpointMethodsMap.keys()) { - newMethods[scope] = new Proxy({ octokit, scope, cache: {} }, handler); - } - return newMethods; -} -function decorate(octokit, scope, methodName, defaults, decorations) { - const requestWithDefaults = octokit.request.defaults(defaults); - function withDecorations(...args) { - let options = requestWithDefaults.endpoint.merge(...args); - if (decorations.mapToData) { - options = Object.assign({}, options, { - data: options[decorations.mapToData], - [decorations.mapToData]: void 0 - }); - return requestWithDefaults(options); - } - if (decorations.renamed) { - const [newScope, newMethodName] = decorations.renamed; - octokit.log.warn( - `octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()` - ); - } - if (decorations.deprecated) { - octokit.log.warn(decorations.deprecated); - } - if (decorations.renamedParameters) { - const options2 = requestWithDefaults.endpoint.merge(...args); - for (const [name, alias] of Object.entries( - decorations.renamedParameters - )) { - if (name in options2) { - octokit.log.warn( - `"${name}" parameter is deprecated for "octokit.${scope}.${methodName}()". Use "${alias}" instead` - ); - if (!(alias in options2)) { - options2[alias] = options2[name]; - } - delete options2[name]; - } - } - return requestWithDefaults(options2); - } - return requestWithDefaults(...args); - } - return Object.assign(withDecorations, requestWithDefaults); -} - -function legacyRestEndpointMethods(octokit) { - const api = endpointsToMethods(octokit); - return { - ...api, - rest: api - }; -} -legacyRestEndpointMethods.VERSION = VERSION$1; - -const VERSION = "21.0.0"; - -const Octokit = Octokit$1.plugin(requestLog, legacyRestEndpointMethods, paginateRest).defaults( - { - userAgent: `octokit-rest.js/${VERSION}` - } -); - -const debug$4 = debugFactory('update-package'); -function updatePackageJson(path, partial) { - return __awaiter$1(this, void 0, void 0, function* () { - const exists = yield fileExists(path); - if (!exists) { - debug$4(`File not exists ${path}`); - return; - } - const old = require(path); - yield writeFileAsync(path, JSON.stringify(Object.assign(Object.assign({}, old), partial), null, 2)); - }); -} - -const debug$3 = debugFactory('version'); -class VersionCommand extends Command { - constructor() { - super(...arguments); - this.prefix = String$1(`-p,--prefix`, 'npm'); - this.configFileName = String$1('-c,--config'); - } - static updatePackageJson(prefix, configFileName) { - return __awaiter$1(this, void 0, void 0, function* () { - const { version, platforms } = getNapiConfig(configFileName); - for (const platformDetail of platforms) { - const pkgDir = path$1.join(process.cwd(), prefix, platformDetail.platformArchABI); - debug$3(`Update version to ${greenBright(version)} in [${yellowBright(pkgDir)}]`); - yield updatePackageJson(path$1.join(pkgDir, 'package.json'), { - version, - }); - } - }); - } - execute() { - return __awaiter$1(this, void 0, void 0, function* () { - yield VersionCommand.updatePackageJson(this.prefix, this.configFileName); - yield spawn('git add .'); - }); - } -} -VersionCommand.usage = Command.Usage({ - description: 'Update versions in created npm dir', -}); -VersionCommand.paths = [['version']]; - -const debug$2 = debugFactory('prepublish'); -class PrePublishCommand extends Command { - constructor() { - super(...arguments); - this.prefix = String$1(`-p,--prefix`, 'npm'); - this.tagStyle = String$1('--tagstyle,-t', 'lerna'); - this.configFileName = String$1('-c,--config'); - this.isDryRun = Boolean$1('--dry-run', false); - this.skipGHRelease = Boolean$1('--skip-gh-release', false); - this.ghReleaseName = String$1('--gh-release-name'); - this.existingReleaseId = String$1('--gh-release-id'); - } - execute() { - return __awaiter$1(this, void 0, void 0, function* () { - const { packageJsonPath, platforms, version, packageName, binaryName, npmClient, } = getNapiConfig(this.configFileName); - debug$2(`Update optionalDependencies in [${packageJsonPath}]`); - if (!this.isDryRun) { - yield VersionCommand.updatePackageJson(this.prefix, this.configFileName); - yield updatePackageJson(packageJsonPath, { - optionalDependencies: platforms.reduce((acc, cur) => { - acc[`${packageName}-${cur.platformArchABI}`] = `${version}`; - return acc; - }, {}), - }); - } - const { owner, repo, pkgInfo, octokit } = this.existingReleaseId - ? yield this.getRepoInfo(packageName, version) - : yield this.createGhRelease(packageName, version); - for (const platformDetail of platforms) { - const pkgDir = path$1.join(process.cwd(), this.prefix, `${platformDetail.platformArchABI}`); - const filename = `${binaryName}.${platformDetail.platformArchABI}.node`; - const dstPath = path$1.join(pkgDir, filename); - if (!this.isDryRun) { - if (!require$$0$2.existsSync(dstPath)) { - console.warn(`[${yellowBright(dstPath)}] doesn't exist`); - continue; - } - yield spawn(`${npmClient} publish`, { - cwd: pkgDir, - env: process.env, - }); - if (!this.skipGHRelease && repo && owner) { - debug$2(`Start upload [${greenBright(dstPath)}] to Github release, [${greenBright(pkgInfo.tag)}]`); - try { - const releaseId = this.existingReleaseId - ? Number(this.existingReleaseId) - : (yield octokit.repos.getReleaseByTag({ - repo: repo, - owner: owner, - tag: pkgInfo.tag, - })).data.id; - const dstFileStats = require$$0$2.statSync(dstPath); - const assetInfo = yield octokit.repos.uploadReleaseAsset({ - owner: owner, - repo: repo, - name: filename, - release_id: releaseId, - mediaType: { format: 'raw' }, - headers: { - 'content-length': dstFileStats.size, - 'content-type': 'application/octet-stream', - }, - // @ts-expect-error - data: yield readFileAsync(dstPath), - }); - console.info(`${green(dstPath)} upload success`); - console.info(`Download url: ${blueBright(assetInfo.data.browser_download_url)}`); - } - catch (e) { - debug$2(`Param: ${JSON.stringify({ owner, repo, tag: pkgInfo.tag, filename: dstPath }, null, 2)}`); - console.error(e); - } - } - } - } - }); - } - createGhRelease(packageName, version) { - return __awaiter$1(this, void 0, void 0, function* () { - if (this.skipGHRelease) { - return { - owner: null, - repo: null, - pkgInfo: { name: null, version: null, tag: null }, - }; - } - const { repo, owner, pkgInfo, octokit } = yield this.getRepoInfo(packageName, version); - if (!repo || !owner) { - return { - owner: null, - repo: null, - pkgInfo: { name: null, version: null, tag: null }, - }; - } - if (!this.isDryRun) { - try { - yield octokit.repos.createRelease({ - owner, - repo, - tag_name: pkgInfo.tag, - name: this.ghReleaseName, - prerelease: version.includes('alpha') || - version.includes('beta') || - version.includes('rc'), - }); - } - catch (e) { - debug$2(`Params: ${JSON.stringify({ owner, repo, tag_name: pkgInfo.tag }, null, 2)}`); - console.error(e); - } - } - return { owner, repo, pkgInfo, octokit }; - }); - } - getRepoInfo(packageName, version) { - return __awaiter$1(this, void 0, void 0, function* () { - const headCommit = (yield spawn('git log -1 --pretty=%B')) - .toString('utf8') - .trim(); - const { GITHUB_REPOSITORY } = process.env; - if (!GITHUB_REPOSITORY) { - return { - owner: null, - repo: null, - pkgInfo: { name: null, version: null, tag: null }, - }; - } - debug$2(`Github repository: ${GITHUB_REPOSITORY}`); - const [owner, repo] = GITHUB_REPOSITORY.split('/'); - const octokit = new Octokit({ - auth: process.env.GITHUB_TOKEN, - }); - let pkgInfo; - if (this.tagStyle === 'lerna') { - const packagesToPublish = headCommit - .split('\n') - .map((line) => line.trim()) - .filter((line, index) => line.length && index) - .map((line) => line.substring(2)) - .map(this.parseTag); - pkgInfo = packagesToPublish.find((pkgInfo) => pkgInfo.name === packageName); - if (!pkgInfo) { - throw new TypeError(`No release commit found with ${packageName}, original commit info: ${headCommit}`); - } - } - else { - pkgInfo = { - tag: `v${version}`, - version, - name: packageName, - }; - } - return { owner, repo, pkgInfo, octokit }; - }); - } - parseTag(tag) { - const segments = tag.split('@'); - const version = segments.pop(); - const name = segments.join('@'); - return { - name, - version, - tag, - }; - } -} -PrePublishCommand.usage = Command.Usage({ - description: 'Update package.json and copy addons into per platform packages', -}); -PrePublishCommand.paths = [['prepublish']]; - -const debug$1 = debugFactory('rename'); -class RenameCommand extends Command { - constructor() { - super(...arguments); - this.name = String$1('-n', { - required: false, - description: 'The new name of the project', - }); - this.napiName = String$1('--napi-name', { - required: false, - description: 'The new napi addon name', - }); - this.repository = String$1('--repository', { - required: false, - description: 'The repository of the package', - }); - this.description = String$1('-d,--description', { - required: false, - description: 'The description of the package', - }); - this.cwd = String$1({ - required: false, - }); - } - execute() { - var _a, _b, _c, _d, _e; - return __awaiter$1(this, void 0, void 0, function* () { - const cwd = (_a = this.cwd) !== null && _a !== void 0 ? _a : process.cwd(); - const packageJson = yield readFileAsync(path$1.join(cwd, 'package.json'), 'utf8'); - const packageJsonData = JSON.parse(packageJson); - const name = (_b = this.name) !== null && _b !== void 0 ? _b : (yield inquirer.prompt({ - name: 'name', - type: 'input', - suffix: dim(' name field in package.json'), - })).name; - const napiName = (_c = this.napiName) !== null && _c !== void 0 ? _c : (yield inquirer.prompt({ - name: 'napi name', - type: 'input', - default: name.split('/')[1], - }))['napi name']; - debug$1('name: %s, napi name: %s', name, napiName); - packageJsonData.name = name; - packageJsonData.napi.name = napiName; - const repository = (_d = this.repository) !== null && _d !== void 0 ? _d : (yield inquirer.prompt({ - name: 'repository', - type: 'input', - suffix: dim(' Leave empty to skip'), - })).repository; - if (repository) { - packageJsonData.repository = repository; - } - const description = (_e = this.description) !== null && _e !== void 0 ? _e : (yield inquirer.prompt({ - name: 'description', - type: 'input', - suffix: dim(' Leave empty to skip'), - })).description; - if (description) { - packageJsonData.description = description; - } - yield writeFileAsync(path$1.join(cwd, 'package.json'), JSON.stringify(packageJsonData, null, 2)); - const CI = yield readFileAsync(path$1.join(cwd, '.github', 'workflows', 'CI.yml'), 'utf8'); - const CIObject = load(CI); - CIObject.env.APP_NAME = napiName; - yield writeFileAsync(path$1.join(cwd, '.github', 'workflows', 'CI.yml'), dump(CIObject, { - lineWidth: 1000, - })); - let tomlContent = yield readFileAsync(path$1.join(cwd, 'Cargo.toml'), 'utf8'); - tomlContent = tomlContent.replace('name = "napi-package-template"', `name = "${napiName}"`); - yield writeFileAsync(path$1.join(cwd, 'Cargo.toml'), tomlContent); - yield spawn('napi create-npm-dir -t .'); - }); - } -} -RenameCommand.paths = [['rename']]; - -const debug = debugFactory('universal'); -class UniversalCommand extends Command { - constructor() { - super(...arguments); - this.sourceDir = String$1('-d,--dir', 'artifacts'); - this.distDir = String$1('--dist', '.'); - this.configFileName = String$1('-c,--config'); - this.buildUniversal = { - darwin: (binName, srcFiles) => { - const outPath = path$1.join(this.distDir, `${binName}.${process.platform}-universal.node`); - const srcPaths = srcFiles.map((f) => path$1.join(this.sourceDir, f)); - require$$1$1.spawnSync('lipo', ['-create', '-output', outPath, ...srcPaths]); - return outPath; - }, - }; - } - execute() { - var _a; - return __awaiter$1(this, void 0, void 0, function* () { - const { platforms, binaryName } = getNapiConfig(this.configFileName); - const targetPlatform = platforms.find((p) => p.platform === process.platform && p.arch === 'universal'); - if (!targetPlatform) { - throw new TypeError(`'universal' arch for platform '${process.platform}' not found in config!`); - } - const srcFiles = (_a = UniArchsByPlatform[process.platform]) === null || _a === void 0 ? void 0 : _a.map((a) => `${binaryName}.${process.platform}-${a}.node`); - if (!srcFiles) { - throw new TypeError(`'universal' arch for platform '${process.platform}' not supported.`); - } - debug(`Looking up source binaries to combine: ${yellowBright(srcFiles.join(', '))}`); - const srcFileLookup = yield Promise.all(srcFiles.map((f) => fileExists(path$1.join(this.sourceDir, f)))); - const notFoundFiles = srcFiles.filter((_f, i) => !srcFileLookup[i]); - if (notFoundFiles.length > 0) { - throw new TypeError(`Some binary files were not found: ${JSON.stringify(notFoundFiles)}`); - } - const outPath = this.buildUniversal[process.platform](binaryName, srcFiles); - debug(`Produced universal binary: ${outPath}`); - }); - } -} -UniversalCommand.usage = Command.Usage({ - description: 'Combine built binaries to universal binaries', -}); -UniversalCommand.paths = [['universal']]; - -const cli = new Cli({ - binaryName: 'napi', - binaryVersion: version$1, -}); -cli.register(ArtifactsCommand); -cli.register(BuildCommand); -cli.register(CreateNpmDirCommand); -cli.register(PrePublishCommand); -cli.register(VersionCommand); -cli.register(UniversalCommand); -cli.register(NewProjectCommand); -cli.register(RenameCommand); -cli.register(HelpCommand); -cli - .run(process.argv.slice(2), Object.assign({}, Cli.defaultContext)) - .then((status) => { - process.exit(status); -}) - .catch((e) => { - console.error(e); - process.exit(1); -}); - -const simpleKeyRegExp = /^[a-zA-Z_][a-zA-Z0-9_]*$/; -function getPrintable(value) { - if (value === null) - return `null`; - if (value === undefined) - return `undefined`; - if (value === ``) - return `an empty string`; - if (typeof value === 'symbol') - return `<${value.toString()}>`; - if (Array.isArray(value)) - return `an array`; - return JSON.stringify(value); -} -function computeKey(state, key) { - var _a, _b, _c; - if (typeof key === `number`) { - return `${(_a = state === null || state === void 0 ? void 0 : state.p) !== null && _a !== void 0 ? _a : `.`}[${key}]`; - } - else if (simpleKeyRegExp.test(key)) { - return `${(_b = state === null || state === void 0 ? void 0 : state.p) !== null && _b !== void 0 ? _b : ``}.${key}`; - } - else { - return `${(_c = state === null || state === void 0 ? void 0 : state.p) !== null && _c !== void 0 ? _c : `.`}[${JSON.stringify(key)}]`; - } -} - -function pushError({ errors, p } = {}, message) { - errors === null || errors === void 0 ? void 0 : errors.push(`${p !== null && p !== void 0 ? p : `.`}: ${message}`); - return false; -} -function makeCoercionFn(target, key) { - return (v) => { - const previous = target[key]; - target[key] = v; - return makeCoercionFn(target, key).bind(null, previous); - }; -} - -/** - * Create a validator that always returns true and never refines the type. - */ -function isUnknown() { - return makeValidator({ - test: (value, state) => { - return true; - }, - }); -} -/** - * Create a validator that only returns true when the tested value is a string. - * Refines the type to `string`. - */ -function isString() { - return makeValidator({ - test: (value, state) => { - if (typeof value !== `string`) - return pushError(state, `Expected a string (got ${getPrintable(value)})`); - return true; - }, - }); -} -/** - * Create a validator that only returns true when the tested value is an - * array whose all values match the provided subspec. Refines the type to - * `Array`, with `T` being the subspec inferred type. - * - * Supports coercion if the `delimiter` option is set, in which case strings - * will be split accordingly. - */ -function isArray(spec, { delimiter } = {}) { - return makeValidator({ - test: (value, state) => { - var _a; - const originalValue = value; - if (typeof value === `string` && typeof delimiter !== `undefined`) { - if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { - if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) - return pushError(state, `Unbound coercion result`); - value = value.split(delimiter); - } - } - if (!Array.isArray(value)) - return pushError(state, `Expected an array (got ${getPrintable(value)})`); - let valid = true; - for (let t = 0, T = value.length; t < T; ++t) { - valid = spec(value[t], Object.assign(Object.assign({}, state), { p: computeKey(state, t), coercion: makeCoercionFn(value, t) })) && valid; - if (!valid && (state === null || state === void 0 ? void 0 : state.errors) == null) { - break; - } - } - if (value !== originalValue) - state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, value)]); - return valid; - }, - }); -} -/** - * Create a validator that only returns true when the tested value is a - * tuple whose each value matches the corresponding subspec. Refines the type - * into a tuple whose each item has the type inferred by the corresponding - * tuple. - * - * Supports coercion if the `delimiter` option is set, in which case strings - * will be split accordingly. - */ -function isTuple(spec, { delimiter } = {}) { - const lengthValidator = hasExactLength(spec.length); - return makeValidator({ - test: (value, state) => { - var _a; - if (typeof value === `string` && typeof delimiter !== `undefined`) { - if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { - if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) - return pushError(state, `Unbound coercion result`); - value = value.split(delimiter); - state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, value)]); - } - } - if (!Array.isArray(value)) - return pushError(state, `Expected a tuple (got ${getPrintable(value)})`); - let valid = lengthValidator(value, Object.assign({}, state)); - for (let t = 0, T = value.length; t < T && t < spec.length; ++t) { - valid = spec[t](value[t], Object.assign(Object.assign({}, state), { p: computeKey(state, t), coercion: makeCoercionFn(value, t) })) && valid; - if (!valid && (state === null || state === void 0 ? void 0 : state.errors) == null) { - break; - } - } - return valid; - }, - }); -} -/** - * Create a validator that only returns true when the tested value is an - * object with any amount of properties that must all match the provided - * subspec. Refines the type to `Record`, with `T` being the - * subspec inferred type. - * - * Keys can be optionally validated as well by using the `keys` optional - * subspec parameter. - */ -function isRecord(spec, { keys: keySpec = null, } = {}) { - const isArrayValidator = isArray(isTuple([keySpec !== null && keySpec !== void 0 ? keySpec : isString(), spec])); - return makeValidator({ - test: (value, state) => { - var _a; - if (Array.isArray(value)) { - if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { - if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) - return pushError(state, `Unbound coercion result`); - if (!isArrayValidator(value, Object.assign(Object.assign({}, state), { coercion: undefined }))) - return false; - value = Object.fromEntries(value); - state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, value)]); - return true; - } - } - if (typeof value !== `object` || value === null) - return pushError(state, `Expected an object (got ${getPrintable(value)})`); - const keys = Object.keys(value); - let valid = true; - for (let t = 0, T = keys.length; t < T && (valid || (state === null || state === void 0 ? void 0 : state.errors) != null); ++t) { - const key = keys[t]; - const sub = value[key]; - if (key === `__proto__` || key === `constructor`) { - valid = pushError(Object.assign(Object.assign({}, state), { p: computeKey(state, key) }), `Unsafe property name`); - continue; - } - if (keySpec !== null && !keySpec(key, state)) { - valid = false; - continue; - } - if (!spec(sub, Object.assign(Object.assign({}, state), { p: computeKey(state, key), coercion: makeCoercionFn(value, key) }))) { - valid = false; - continue; - } - } - return valid; - }, - }); -} -/** - * @deprecated Replace `isDict` by `isRecord` - */ -function isDict(spec, opts = {}) { - return isRecord(spec, opts); -} - -function makeTrait(value) { - return () => { - return value; - }; -} -function makeValidator({ test }) { - return makeTrait(test)(); -} -/** - * Create a validator that checks that the tested array or string has exactly - * the specified length. - */ -function hasExactLength(length) { - return makeValidator({ - test: (value, state) => { - if (!(value.length === length)) - return pushError(state, `Expected to have a length of exactly ${length} elements (got ${value.length})`); - return true; - }, - }); -} - -function cascade(spec, ...followups) { - const resolvedFollowups = Array.isArray(followups[0]) - ? followups[0] - : followups; - return makeValidator({ - test: (value, state) => { - var _a, _b; - const context = { value: value }; - const subCoercion = typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined` - ? makeCoercionFn(context, `value`) : undefined; - const subCoercions = typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined` - ? [] : undefined; - if (!spec(value, Object.assign(Object.assign({}, state), { coercion: subCoercion, coercions: subCoercions }))) - return false; - const reverts = []; - if (typeof subCoercions !== `undefined`) - for (const [, coercion] of subCoercions) - reverts.push(coercion()); - try { - if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) { - if (context.value !== value) { - if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`) - return pushError(state, `Unbound coercion result`); - state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, context.value)]); - } - (_b = state === null || state === void 0 ? void 0 : state.coercions) === null || _b === void 0 ? void 0 : _b.push(...subCoercions); - } - return resolvedFollowups.every(spec => { - return spec(context.value, state); - }); - } - finally { - for (const revert of reverts) { - revert(); - } - } - }, - }); -} -function applyCascade(spec, ...followups) { - const resolvedFollowups = Array.isArray(followups[0]) - ? followups[0] - : followups; - return cascade(spec, resolvedFollowups); -} -var KeyRelationship; -(function (KeyRelationship) { - KeyRelationship["Forbids"] = "Forbids"; - KeyRelationship["Requires"] = "Requires"; -})(KeyRelationship || (KeyRelationship = {})); -({ - [KeyRelationship.Forbids]: { - expect: false, - message: `forbids using`, - }, - [KeyRelationship.Requires]: { - expect: true, - message: `requires using`, - }, -}); - -var index = /*#__PURE__*/Object.freeze({ - __proto__: null, - get KeyRelationship () { return KeyRelationship; }, - applyCascade: applyCascade, - cascade: cascade, - hasExactLength: hasExactLength, - isArray: isArray, - isDict: isDict, - isRecord: isRecord, - isString: isString, - isTuple: isTuple, - isUnknown: isUnknown, - makeTrait: makeTrait, - makeValidator: makeValidator -}); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90cnktdG8tc3RyaW5nLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtY2FsbGFibGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWF0aC10cnVuYy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb3duLWtleXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWZvcmNlZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1mbGFncy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtc3RpY2t5LWhlbHBlcnMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2h0bWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1hcHBseS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LXN1YnN0aXR1dGlvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcmVnZXhwLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1nZXQtZmxhZ3MuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLWFsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnRyeS11bmJpbmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9lcy9zdHJpbmcvcmVwbGFjZS1hbGwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2xpcGFuaW9uL2xpYi9jb25zdGFudHMubWpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NsaXBhbmlvbi9saWIvZXJyb3JzLm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jbGlwYW5pb24vbGliL2Zvcm1hdC5tanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2xpcGFuaW9uL2xpYi9hZHZhbmNlZC9vcHRpb25zL3V0aWxzLm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jbGlwYW5pb24vbGliL2FkdmFuY2VkL0NvbW1hbmQubWpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NsaXBhbmlvbi9saWIvY29yZS5tanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2xpcGFuaW9uL2xpYi9wbGF0Zm9ybS9ub2RlLm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jbGlwYW5pb24vbGliL2FkdmFuY2VkL0hlbHBDb21tYW5kLm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jbGlwYW5pb24vbGliL2FkdmFuY2VkL0NsaS5tanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2xpcGFuaW9uL2xpYi9hZHZhbmNlZC9vcHRpb25zL0FycmF5Lm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jbGlwYW5pb24vbGliL2FkdmFuY2VkL29wdGlvbnMvQm9vbGVhbi5tanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2xpcGFuaW9uL2xpYi9hZHZhbmNlZC9vcHRpb25zL1N0cmluZy5tanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb2xvcmV0dGUvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZmRpci9kaXN0L3NyYy91dGlscy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9mZGlyL2Rpc3Qvc3JjL2FwaS9mdW5jdGlvbnMvam9pbi1wYXRoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2ZkaXIvZGlzdC9zcmMvYXBpL2Z1bmN0aW9ucy9wdXNoLWRpcmVjdG9yeS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9mZGlyL2Rpc3Qvc3JjL2FwaS9mdW5jdGlvbnMvcHVzaC1maWxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2ZkaXIvZGlzdC9zcmMvYXBpL2Z1bmN0aW9ucy9nZXQtYXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZmRpci9kaXN0L3NyYy9hcGkvZnVuY3Rpb25zL2dyb3VwLWZpbGVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2ZkaXIvZGlzdC9zcmMvYXBpL2Z1bmN0aW9ucy9yZXNvbHZlLXN5bWxpbmsuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZmRpci9kaXN0L3NyYy9hcGkvZnVuY3Rpb25zL2ludm9rZS1jYWxsYmFjay5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9mZGlyL2Rpc3Qvc3JjL2FwaS9mdW5jdGlvbnMvd2Fsay1kaXJlY3RvcnkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZmRpci9kaXN0L3NyYy9hcGkvcXVldWUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZmRpci9kaXN0L3NyYy9hcGkvY291bnRlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9mZGlyL2Rpc3Qvc3JjL2FwaS93YWxrZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZmRpci9kaXN0L3NyYy9hcGkvYXN5bmMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZmRpci9kaXN0L3NyYy9hcGkvc3luYy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9mZGlyL2Rpc3Qvc3JjL2J1aWxkZXIvYXBpLWJ1aWxkZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcGljb21hdGNoL2xpYi9jb25zdGFudHMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcGljb21hdGNoL2xpYi91dGlscy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9waWNvbWF0Y2gvbGliL3NjYW4uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcGljb21hdGNoL2xpYi9wYXJzZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9waWNvbWF0Y2gvbGliL3BpY29tYXRjaC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9waWNvbWF0Y2gvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZmRpci9kaXN0L3NyYy9idWlsZGVyL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2ZkaXIvZGlzdC9zcmMvdHlwZXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZmRpci9kaXN0L3NyYy9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9mZGlyL2Rpc3QvaW5kZXguanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvcGFyc2UtdHJpcGxlLmpzIiwiLi4vLi4vc2NyaXB0cy9jbGkvc3JjL2NvbnN0cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9oYXMtZmxhZy9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zdXBwb3J0cy1jb2xvci9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9ub2RlX21vZHVsZXMvbXMvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2NvbW1vbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvbm9kZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvYnJvd3Nlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvaW5kZXguanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvZGVidWcuanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvdXRpbHMuanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvYXJ0aWZhY3RzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2Vudi1wYXRocy9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2ZyZWVHbG9iYWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yb290LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fU3ltYm9sLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UmF3VGFnLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0VGFnLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdExpa2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzU3ltYm9sLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlNYXAuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVG9TdHJpbmcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pZGVudGl0eS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNGdW5jdGlvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcmVKc0RhdGEuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc01hc2tlZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3RvU291cmNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzTmF0aXZlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0VmFsdWUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXROYXRpdmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19XZWFrTWFwLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZGVmaW5lUHJvcGVydHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc0luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUFzc2lnblZhbHVlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9lcS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNMZW5ndGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXlMaWtlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNQcm90b3R5cGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVGltZXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNBcmd1bWVudHMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJndW1lbnRzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zdHViRmFsc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQnVmZmVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VVbmFyeS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25vZGVVdGlsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1R5cGVkQXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUxpa2VLZXlzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlckFyZy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUtleXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlS2V5cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzS2V5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlQ3JlYXRlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaENsZWFyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaERlbGV0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2hhc2hHZXQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19oYXNoSGFzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaFNldC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX0hhc2guanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19saXN0Q2FjaGVDbGVhci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Fzc29jSW5kZXhPZi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2xpc3RDYWNoZURlbGV0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2xpc3RDYWNoZUdldC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2xpc3RDYWNoZUhhcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2xpc3RDYWNoZVNldC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX0xpc3RDYWNoZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX01hcC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hcENhY2hlQ2xlYXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc0tleWFibGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRNYXBEYXRhLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwQ2FjaGVEZWxldGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tYXBDYWNoZUdldC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hcENhY2hlSGFzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwQ2FjaGVTZXQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19NYXBDYWNoZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvbWVtb2l6ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21lbW9pemVDYXBwZWQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdHJpbmdUb1BhdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RvU3RyaW5nLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2FzdFBhdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL190b0tleS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VHZXQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2dldC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5UHVzaC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3N0YWNrQ2xlYXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdGFja0RlbGV0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3N0YWNrR2V0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RhY2tIYXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdGFja1NldC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N0YWNrLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlGaWx0ZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3N0dWJBcnJheS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFN5bWJvbHMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0QWxsS2V5cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldEFsbEtleXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19EYXRhVmlldy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1Byb21pc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TZXQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRUYWcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19VaW50OEFycmF5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2V0Q2FjaGVBZGQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zZXRDYWNoZUhhcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1NldENhY2hlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlTb21lLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2FjaGVIYXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19lcXVhbEFycmF5cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hcFRvQXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zZXRUb0FycmF5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXF1YWxCeVRhZy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2VxdWFsT2JqZWN0cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc0VxdWFsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzTWF0Y2guanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc1N0cmljdENvbXBhcmFibGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRNYXRjaERhdGEuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VNYXRjaGVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUhhc0luLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzUGF0aC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaGFzSW4uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlTWF0Y2hlc1Byb3BlcnR5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVByb3BlcnR5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVByb3BlcnR5RGVlcC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvcHJvcGVydHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXRlcmF0ZWUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUFnZ3JlZ2F0b3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jcmVhdGVCYXNlRm9yLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUZvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VGb3JPd24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jcmVhdGVCYXNlRWFjaC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VFYWNoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUFnZ3JlZ2F0b3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jcmVhdGVBZ2dyZWdhdG9yLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9ncm91cEJ5LmpzIiwiLi4vLi4vc2NyaXB0cy9jbGkvc3JjL2FybS1mZWF0dXJlcy5oLmpzIiwiLi4vLi4vc2NyaXB0cy9jbGkvc3JjL2pzLWJpbmRpbmctdGVtcGxhdGUuanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvYnVpbGQuanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvY3JlYXRlLW5wbS1kaXIuanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvaGVscC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9hbnNpLWVzY2FwZXMvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMveW9jdG9jb2xvcnMtY2pzL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0BpbnF1aXJlci9maWd1cmVzL2Rpc3QvZXNtL2luZGV4Lm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9ub2RlX21vZHVsZXMvcnVuLWFzeW5jL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9pc0Z1bmN0aW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9jcmVhdGVFcnJvckNsYXNzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9VbnN1YnNjcmlwdGlvbkVycm9yLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9hcnJSZW1vdmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9TdWJzY3JpcHRpb24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9jb25maWcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZXIvdGltZW91dFByb3ZpZGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9yZXBvcnRVbmhhbmRsZWRFcnJvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvbm9vcC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL05vdGlmaWNhdGlvbkZhY3Rvcmllcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvZXJyb3JDb250ZXh0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvU3Vic2NyaWJlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3N5bWJvbC9vYnNlcnZhYmxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9pZGVudGl0eS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvcGlwZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL09ic2VydmFibGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL2xpZnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvT3BlcmF0b3JTdWJzY3JpYmVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3JlZkNvdW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZXIvcGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3NjaGVkdWxlci9hbmltYXRpb25GcmFtZVByb3ZpZGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9kb20vYW5pbWF0aW9uRnJhbWVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9PYmplY3RVbnN1YnNjcmliZWRFcnJvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL1N1YmplY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9CZWhhdmlvclN1YmplY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZXIvZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvUmVwbGF5U3ViamVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL0FzeW5jU3ViamVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3NjaGVkdWxlci9BY3Rpb24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZXIvaW50ZXJ2YWxQcm92aWRlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3NjaGVkdWxlci9Bc3luY0FjdGlvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvSW1tZWRpYXRlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL2ltbWVkaWF0ZVByb3ZpZGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL0FzYXBBY3Rpb24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9TY2hlZHVsZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZXIvQXN5bmNTY2hlZHVsZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZXIvQXNhcFNjaGVkdWxlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3NjaGVkdWxlci9hc2FwLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL2FzeW5jLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL1F1ZXVlQWN0aW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL1F1ZXVlU2NoZWR1bGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL3F1ZXVlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL0FuaW1hdGlvbkZyYW1lQWN0aW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL0FuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL2FuaW1hdGlvbkZyYW1lLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVyL1ZpcnR1YWxUaW1lU2NoZWR1bGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9lbXB0eS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvaXNTY2hlZHVsZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL2FyZ3MuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL2lzQXJyYXlMaWtlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9pc1Byb21pc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL2lzSW50ZXJvcE9ic2VydmFibGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL2lzQXN5bmNJdGVyYWJsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvdGhyb3dVbm9ic2VydmFibGVFcnJvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3N5bWJvbC9pdGVyYXRvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvaXNJdGVyYWJsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvaXNSZWFkYWJsZVN0cmVhbUxpa2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2lubmVyRnJvbS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvZXhlY3V0ZVNjaGVkdWxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL29ic2VydmVPbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9zdWJzY3JpYmVPbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZU9ic2VydmFibGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVQcm9taXNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlQXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVJdGVyYWJsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZUFzeW5jSXRlcmFibGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVkLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9mcm9tLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9vZi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29ic2VydmFibGUvdGhyb3dFcnJvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL05vdGlmaWNhdGlvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvaXNPYnNlcnZhYmxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9FbXB0eUVycm9yLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvbGFzdFZhbHVlRnJvbS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL2ZpcnN0VmFsdWVGcm9tLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9Bcmd1bWVudE91dE9mUmFuZ2VFcnJvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvTm90Rm91bmRFcnJvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvU2VxdWVuY2VFcnJvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvaXNEYXRlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVvdXQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvbWFwLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvdXRpbC9tYXBPbmVPck1hbnlBcmdzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9iaW5kQ2FsbGJhY2tJbnRlcm5hbHMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2JpbmRDYWxsYmFjay5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29ic2VydmFibGUvYmluZE5vZGVDYWxsYmFjay5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvYXJnc0FyZ0FycmF5T3JPYmplY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC91dGlsL2NyZWF0ZU9iamVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29ic2VydmFibGUvY29tYmluZUxhdGVzdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9tZXJnZUludGVybmFscy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9tZXJnZU1hcC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9tZXJnZUFsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRBbGwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2NvbmNhdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29ic2VydmFibGUvZGVmZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2Nvbm5lY3RhYmxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9mb3JrSm9pbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29ic2VydmFibGUvZnJvbUV2ZW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9mcm9tRXZlbnRQYXR0ZXJuLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9nZW5lcmF0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29ic2VydmFibGUvaWlmLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS90aW1lci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29ic2VydmFibGUvaW50ZXJ2YWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL21lcmdlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9uZXZlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvYXJnc09yQXJnQXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL29uRXJyb3JSZXN1bWVOZXh0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9wYWlycy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3V0aWwvbm90LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbHRlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29ic2VydmFibGUvcGFydGl0aW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9yYWNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9yYW5nZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29ic2VydmFibGUvdXNpbmcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL3ppcC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL3R5cGVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2F1ZGl0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2F1ZGl0VGltZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9idWZmZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyQ291bnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyVGltZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUb2dnbGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyV2hlbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9jYXRjaEVycm9yLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3NjYW5JbnRlcm5hbHMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvcmVkdWNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3RvQXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvam9pbkFsbEludGVybmFscy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0QWxsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbWJpbmVBbGwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvY29tYmluZUxhdGVzdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0V2l0aC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRNYXAuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0TWFwVG8uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdFdpdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb21TdWJzY3JpYmFibGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvY29ubmVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9jb3VudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9kZWJvdW5jZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9kZWJvdW5jZVRpbWUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvZGVmYXVsdElmRW1wdHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9pZ25vcmVFbGVtZW50cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9tYXBUby5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9kZWxheVdoZW4uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvZGVsYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvZGVtYXRlcmlhbGl6ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsQ2hhbmdlZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy90aHJvd0lmRW1wdHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvZWxlbWVudEF0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2VuZFdpdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvZXZlcnkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvZXhoYXVzdE1hcC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0QWxsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2V4aGF1c3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvZXhwYW5kLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmFsaXplLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvZmluZEluZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpcnN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL2dyb3VwQnkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvaXNFbXB0eS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy90YWtlTGFzdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9sYXN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL21hdGVyaWFsaXplLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL21heC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9mbGF0TWFwLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlTWFwVG8uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2VTY2FuLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlV2l0aC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9taW4uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvbXVsdGljYXN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL29uRXJyb3JSZXN1bWVOZXh0V2l0aC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9wYWlyd2lzZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9wbHVjay5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2hCZWhhdmlvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoTGFzdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoUmVwbGF5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3JhY2VXaXRoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3JlcGVhdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9yZXBlYXRXaGVuLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3JldHJ5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3JldHJ5V2hlbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9zYW1wbGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvc2FtcGxlVGltZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9zY2FuLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3NlcXVlbmNlRXF1YWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvc2hhcmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvc2hhcmVSZXBsYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvc2luZ2xlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXAuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvc2tpcExhc3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvc2tpcFVudGlsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBXaGlsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9zdGFydFdpdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoTWFwLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaEFsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hNYXBUby5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hTY2FuLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3Rha2VVbnRpbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy90YWtlV2hpbGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvdGFwLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3Rocm90dGxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3Rocm90dGxlVGltZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy90aW1lSW50ZXJ2YWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dFdpdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZXN0YW1wLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvdy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dDb3VudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dUaW1lLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1RvZ2dsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dXaGVuLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3dpdGhMYXRlc3RGcm9tLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9janMvaW50ZXJuYWwvb3BlcmF0b3JzL3ppcEFsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2ludGVybmFsL29wZXJhdG9ycy96aXAuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2Nqcy9pbnRlcm5hbC9vcGVyYXRvcnMvemlwV2l0aC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvY2pzL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2lucXVpcmVyL3NyYy91dGlscy9ldmVudHMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvaW5xdWlyZXIvc3JjL3V0aWxzL3BhZ2luYXRvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9zcmMvdXRpbHMvaW5jcmVtZW50TGlzdEluZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2lucXVpcmVyL3NyYy9vYmplY3RzL3NlcGFyYXRvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9zcmMvb2JqZWN0cy9jaG9pY2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvaW5xdWlyZXIvc3JjL29iamVjdHMvY2hvaWNlcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9ub2RlX21vZHVsZXMvY2xpLXdpZHRoL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2Fuc2ktcmVnZXgvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvc3RyaXAtYW5zaS9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pcy1mdWxsd2lkdGgtY29kZS1wb2ludC9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9lbW9qaS1yZWdleC9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zdHJpbmctd2lkdGgvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29sb3ItbmFtZS9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb2xvci1jb252ZXJ0L2NvbnZlcnNpb25zLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvcm91dGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29sb3ItY29udmVydC9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcy9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy93cmFwLWFuc2kvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2hhbGsvc291cmNlL3V0aWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2hhbGsvc291cmNlL3RlbXBsYXRlcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbWltaWMtZm4vaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvb25ldGltZS9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zaWduYWwtZXhpdC9zaWduYWxzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3NpZ25hbC1leGl0L2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3Jlc3RvcmUtY3Vyc29yL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NsaS1jdXJzb3IvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2xpLXNwaW5uZXJzL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2lzLXVuaWNvZGUtc3VwcG9ydGVkL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2xvZy1zeW1ib2xzL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nsb25lL2Nsb25lLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2RlZmF1bHRzL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3djd2lkdGgvY29tYmluaW5nLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3djd2lkdGgvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvaXMtaW50ZXJhY3RpdmUvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9ibC9CdWZmZXJMaXN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2JsL2JsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL29yYS9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9zcmMvdXRpbHMvcmVhZGxpbmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvaW5xdWlyZXIvc3JjL3V0aWxzL3NjcmVlbi1tYW5hZ2VyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2lucXVpcmVyL3NyYy9wcm9tcHRzL2Jhc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvaW5xdWlyZXIvc3JjL3Byb21wdHMvbGlzdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9zcmMvcHJvbXB0cy9pbnB1dC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9zcmMvcHJvbXB0cy9udW1iZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvaW5xdWlyZXIvc3JjL3Byb21wdHMvY29uZmlybS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9zcmMvcHJvbXB0cy9yYXdsaXN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2lucXVpcmVyL3NyYy9wcm9tcHRzL2V4cGFuZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9zcmMvcHJvbXB0cy9jaGVja2JveC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9zcmMvcHJvbXB0cy9wYXNzd29yZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jaGFyZGV0L21hdGNoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NoYXJkZXQvZW5jb2RpbmcvdXRmOC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jaGFyZGV0L2VuY29kaW5nL3VuaWNvZGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2hhcmRldC9lbmNvZGluZy9tYmNzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NoYXJkZXQvZW5jb2Rpbmcvc2Jjcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jaGFyZGV0L2VuY29kaW5nL2lzbzIwMjIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvY2hhcmRldC9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zYWZlci1idWZmZXIvc2FmZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZXh0ZXJuYWwtZWRpdG9yL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2xpYi9ib20taGFuZGxpbmcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZXh0ZXJuYWwtZWRpdG9yL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy9pbnRlcm5hbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9leHRlcm5hbC1lZGl0b3Ivbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3V0ZjE2LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2V4dGVybmFsLWVkaXRvci9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvdXRmNy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9leHRlcm5hbC1lZGl0b3Ivbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3NiY3MtY29kZWMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZXh0ZXJuYWwtZWRpdG9yL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy9zYmNzLWRhdGEuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZXh0ZXJuYWwtZWRpdG9yL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy9zYmNzLWRhdGEtZ2VuZXJhdGVkLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2V4dGVybmFsLWVkaXRvci9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvZGJjcy1jb2RlYy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9leHRlcm5hbC1lZGl0b3Ivbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL2RiY3MtZGF0YS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9leHRlcm5hbC1lZGl0b3Ivbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2V4dGVybmFsLWVkaXRvci9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9saWIvc3RyZWFtcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9leHRlcm5hbC1lZGl0b3Ivbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvbGliL2V4dGVuZC1ub2RlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2V4dGVybmFsLWVkaXRvci9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9saWIvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvb3MtdG1wZGlyL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2V4dGVybmFsLWVkaXRvci9ub2RlX21vZHVsZXMvdG1wL2xpYi90bXAuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZXh0ZXJuYWwtZWRpdG9yL21haW4vZXJyb3JzL0NyZWF0ZUZpbGVFcnJvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9leHRlcm5hbC1lZGl0b3IvbWFpbi9lcnJvcnMvTGF1bmNoRWRpdG9yRXJyb3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZXh0ZXJuYWwtZWRpdG9yL21haW4vZXJyb3JzL1JlYWRGaWxlRXJyb3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZXh0ZXJuYWwtZWRpdG9yL21haW4vZXJyb3JzL1JlbW92ZUZpbGVFcnJvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9leHRlcm5hbC1lZGl0b3IvbWFpbi9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9zcmMvcHJvbXB0cy9lZGl0b3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvbXV0ZS1zdHJlYW0vbXV0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9zcmMvdWkvYmFzZVVJLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2lucXVpcmVyL3NyYy91aS9ib3R0b20tYmFyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2lucXVpcmVyL3NyYy91dGlscy91dGlscy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9pbnF1aXJlci9zcmMvdWkvcHJvbXB0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2lucXVpcmVyL3NyYy9pbmRleC5qcyIsIi4uLy4uL3NjcmlwdHMvY2xpL3NyYy9zcGF3bi5qcyIsIi4uLy4uL3NjcmlwdHMvY2xpL3NyYy9uZXcvY2FyZ28uanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvbmV3L2NhcmdvLWNvbmZpZy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9qcy15YW1sL2Rpc3QvanMteWFtbC5tanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvbmV3L2NpLXRlbXBsYXRlLmpzIiwiLi4vLi4vc2NyaXB0cy9jbGkvc3JjL25ldy9jaS15bWwuanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvbmV3L2dpdGlnbm9yZS10ZW1wbGF0ZS5qcyIsIi4uLy4uL3NjcmlwdHMvY2xpL3NyYy9uZXcvbGliLXJzLmpzIiwiLi4vLi4vc2NyaXB0cy9jbGkvc3JjL25ldy9ucG1pZ25vcmUuanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvbmV3L3BhY2thZ2UuanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvbmV3L2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3Jlc3Qvbm9kZV9tb2R1bGVzL3VuaXZlcnNhbC11c2VyLWFnZW50L2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3Jlc3Qvbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9yZWdpc3Rlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXN0L25vZGVfbW9kdWxlcy9iZWZvcmUtYWZ0ZXItaG9vay9saWIvYWRkLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3Jlc3Qvbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9yZW1vdmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVzdC9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVzdC9ub2RlX21vZHVsZXMvQG9jdG9raXQvZW5kcG9pbnQvZGlzdC1idW5kbGUvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVzdC9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC1lcnJvci9kaXN0LXNyYy9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXN0L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXF1ZXN0L2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3Jlc3Qvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2dyYXBocWwvZGlzdC1idW5kbGUvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVzdC9ub2RlX21vZHVsZXMvQG9jdG9raXQvYXV0aC10b2tlbi9kaXN0LWJ1bmRsZS9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXN0L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9jb3JlL2Rpc3Qtc3JjL3ZlcnNpb24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVzdC9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9kaXN0LXNyYy9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXN0L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVxdWVzdC1sb2cvZGlzdC1zcmMvdmVyc2lvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXN0L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVxdWVzdC1sb2cvZGlzdC1zcmMvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVzdC9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXBhZ2luYXRlLXJlc3QvZGlzdC13ZWIvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVzdC9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kcy9kaXN0LXNyYy92ZXJzaW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3Jlc3Qvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHMvZGlzdC1zcmMvZ2VuZXJhdGVkL2VuZHBvaW50cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXN0L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzL2Rpc3Qtc3JjL2VuZHBvaW50cy10by1tZXRob2RzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3Jlc3Qvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHMvZGlzdC1zcmMvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVzdC9kaXN0LXNyYy92ZXJzaW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3Jlc3QvZGlzdC1zcmMvaW5kZXguanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvdXBkYXRlLXBhY2thZ2UuanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvdmVyc2lvbi5qcyIsIi4uLy4uL3NjcmlwdHMvY2xpL3NyYy9wcmUtcHVibGlzaC5qcyIsIi4uLy4uL3NjcmlwdHMvY2xpL3NyYy9yZW5hbWUuanMiLCIuLi8uLi9zY3JpcHRzL2NsaS9zcmMvdW5pdmVyc2FsLmpzIiwiLi4vLi4vc2NyaXB0cy9jbGkvc3JjL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3R5cGFuaW9uL2xpYi9pbmRleC5tanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgY2hlY2sodHlwZW9mIHRoaXMgPT0gJ29iamVjdCcgJiYgdGhpcykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSkgOiBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIG5hdmlnYXRvciAhPSAndW5kZWZpbmVkJyAmJiBTdHJpbmcobmF2aWdhdG9yLnVzZXJBZ2VudCkgfHwgJyc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWwuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWwuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnc3ltYm9sIGRldGVjdGlvbicpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFtrZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbihzdG9yZS52ZXJzaW9ucyB8fCAoc3RvcmUudmVyc2lvbnMgPSBbXSkpLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zNy4xJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjQgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zNy4xL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgfHwge30pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgc3RvcmUuc2V0KGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuZ2V0KGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmhhcyhpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbGVuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCk7XG4gIHJldHVybiBsZW4gPiAwID8gbWluKGxlbiwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbDtcbiAgfSBlbHNlIGlmIChTVEFUSUMpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxbVEFSR0VUXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxbVEFSR0VUXSAmJiBnbG9iYWxbVEFSR0VUXS5wcm90b3R5cGU7XG4gIH1cbiAgaWYgKHRhcmdldCkgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgc291cmNlUHJvcGVydHkgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgICB0YXJnZXRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5lZCBpbiB0YXJnZXRcbiAgICBpZiAoIUZPUkNFRCAmJiB0YXJnZXRQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVByb3BlcnR5ID09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzb3VyY2VQcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSAkT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT09ICdPYmplY3QnICYmIGlzQ2FsbGFibGUoTy5jYWxsZWUpID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGNsYXNzb2YoYXJndW1lbnQpID09PSAnU3ltYm9sJykgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcbiAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NgIGdldHRlciBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLnByb3RvdHlwZS5mbGFnc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoYXQuaGFzSW5kaWNlcykgcmVzdWx0ICs9ICdkJztcbiAgaWYgKHRoYXQuZ2xvYmFsKSByZXN1bHQgKz0gJ2cnO1xuICBpZiAodGhhdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gJ2knO1xuICBpZiAodGhhdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmICh0aGF0LmRvdEFsbCkgcmVzdWx0ICs9ICdzJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQudW5pY29kZVNldHMpIHJlc3VsdCArPSAndic7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnYScsICd5JykgLT4gL2EveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG5cbnZhciBVTlNVUFBPUlRFRF9ZID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAkUmVnRXhwKCdhJywgJ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ2FiY2QnKSAhPT0gbnVsbDtcbn0pO1xuXG4vLyBVQyBCcm93c2VyIGJ1Z1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzEwMDhcbnZhciBNSVNTRURfU1RJQ0tZID0gVU5TVVBQT1JURURfWSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhJFJlZ0V4cCgnYScsICd5Jykuc3RpY2t5O1xufSk7XG5cbnZhciBCUk9LRU5fQ0FSRVQgPSBVTlNVUFBPUlRFRF9ZIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczNjg3XG4gIHZhciByZSA9ICRSZWdFeHAoJ15yJywgJ2d5Jyk7XG4gIHJlLmxhc3RJbmRleCA9IDI7XG4gIHJldHVybiByZS5leGVjKCdzdHInKSAhPT0gbnVsbDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQlJPS0VOX0NBUkVUOiBCUk9LRU5fQ0FSRVQsXG4gIE1JU1NFRF9TVElDS1k6IE1JU1NFRF9TVElDS1ksXG4gIFVOU1VQUE9SVEVEX1k6IFVOU1VQUE9SVEVEX1lcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1rZXlzIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyAmJiAhVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIHByb3BzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdkb2N1bWVudCcsICdkb2N1bWVudEVsZW1lbnQnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBBY3RpdmVYT2JqZWN0IC0tIG9sZCBJRSwgV1NIICovXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG5cbnZhciBHVCA9ICc+JztcbnZhciBMVCA9ICc8JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBTQ1JJUFQgPSAnc2NyaXB0JztcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbnZhciBzY3JpcHRUYWcgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gTFQgKyBTQ1JJUFQgKyBHVCArIGNvbnRlbnQgKyBMVCArICcvJyArIFNDUklQVCArIEdUO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIEFjdGl2ZVggT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYID0gZnVuY3Rpb24gKGFjdGl2ZVhEb2N1bWVudCkge1xuICBhY3RpdmVYRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCcnKSk7XG4gIGFjdGl2ZVhEb2N1bWVudC5jbG9zZSgpO1xuICB2YXIgdGVtcCA9IGFjdGl2ZVhEb2N1bWVudC5wYXJlbnRXaW5kb3cuT2JqZWN0O1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsOyAvLyBhdm9pZCBtZW1vcnkgbGVha1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgYWN0aXZlWERvY3VtZW50ID0gbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJ1xuICAgID8gZG9jdW1lbnQuZG9tYWluICYmIGFjdGl2ZVhEb2N1bWVudFxuICAgICAgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgLy8gb2xkIElFXG4gICAgICA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpXG4gICAgOiBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCk7IC8vIFdTSFxuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZihyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCcuJywgJ3MnKSAtPiAvLi9zIGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciAkUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJy4nLCAncycpO1xuICByZXR1cm4gIShyZS5kb3RBbGwgJiYgcmUudGVzdCgnXFxuJykgJiYgcmUuZmxhZ3MgPT09ICdzJyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCcoPzxhPmIpJywgJ2cnKSAtPiAvKD88YT5iKS9nIGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciAkUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJyg/PGE+YiknLCAnZycpO1xuICByZXR1cm4gcmUuZXhlYygnYicpLmdyb3Vwcy5hICE9PSAnYicgfHxcbiAgICAnYicucmVwbGFjZShyZSwgJyQ8YT5jJykgIT09ICdiYyc7XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIHJlZ2V4cC9uby1lbXB0eS1jYXB0dXJpbmctZ3JvdXAsIHJlZ2V4cC9uby1lbXB0eS1ncm91cCwgcmVnZXhwL25vLWxhenktZW5kcyAtLSB0ZXN0aW5nICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tdXNlbGVzcy1xdWFudGlmaWVyIC0tIHRlc3RpbmcgKi9cbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldEludGVybmFsU3RhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKS5nZXQ7XG52YXIgVU5TVVBQT1JURURfRE9UX0FMTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbCcpO1xudmFyIFVOU1VQUE9SVEVEX05DRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnJyk7XG5cbnZhciBuYXRpdmVSZXBsYWNlID0gc2hhcmVkKCduYXRpdmUtc3RyaW5nLXJlcGxhY2UnLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgaW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS87XG4gIHZhciByZTIgPSAvYiovZztcbiAgY2FsbChuYXRpdmVFeGVjLCByZTEsICdhJyk7XG4gIGNhbGwobmF0aXZlRXhlYywgcmUyLCAnYScpO1xuICByZXR1cm4gcmUxLmxhc3RJbmRleCAhPT0gMCB8fCByZTIubGFzdEluZGV4ICE9PSAwO1xufSkoKTtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBzdGlja3lIZWxwZXJzLkJST0tFTl9DQVJFVDtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQgfHwgVU5TVVBQT1JURURfWSB8fCBVTlNVUFBPUlRFRF9ET1RfQUxMIHx8IFVOU1VQUE9SVEVEX05DRztcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHJpbmcpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUocmUpO1xuICAgIHZhciBzdHIgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgIHZhciByYXcgPSBzdGF0ZS5yYXc7XG4gICAgdmFyIHJlc3VsdCwgcmVDb3B5LCBsYXN0SW5kZXgsIG1hdGNoLCBpLCBvYmplY3QsIGdyb3VwO1xuXG4gICAgaWYgKHJhdykge1xuICAgICAgcmF3Lmxhc3RJbmRleCA9IHJlLmxhc3RJbmRleDtcbiAgICAgIHJlc3VsdCA9IGNhbGwocGF0Y2hlZEV4ZWMsIHJhdywgc3RyKTtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJhdy5sYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHZhciBncm91cHMgPSBzdGF0ZS5ncm91cHM7XG4gICAgdmFyIHN0aWNreSA9IFVOU1VQUE9SVEVEX1kgJiYgcmUuc3RpY2t5O1xuICAgIHZhciBmbGFncyA9IGNhbGwocmVnZXhwRmxhZ3MsIHJlKTtcbiAgICB2YXIgc291cmNlID0gcmUuc291cmNlO1xuICAgIHZhciBjaGFyc0FkZGVkID0gMDtcbiAgICB2YXIgc3RyQ29weSA9IHN0cjtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGZsYWdzID0gcmVwbGFjZShmbGFncywgJ3knLCAnJyk7XG4gICAgICBpZiAoaW5kZXhPZihmbGFncywgJ2cnKSA9PT0gLTEpIHtcbiAgICAgICAgZmxhZ3MgKz0gJ2cnO1xuICAgICAgfVxuXG4gICAgICBzdHJDb3B5ID0gc3RyaW5nU2xpY2Uoc3RyLCByZS5sYXN0SW5kZXgpO1xuICAgICAgLy8gU3VwcG9ydCBhbmNob3JlZCBzdGlja3kgYmVoYXZpb3IuXG4gICAgICBpZiAocmUubGFzdEluZGV4ID4gMCAmJiAoIXJlLm11bHRpbGluZSB8fCByZS5tdWx0aWxpbmUgJiYgY2hhckF0KHN0ciwgcmUubGFzdEluZGV4IC0gMSkgIT09ICdcXG4nKSkge1xuICAgICAgICBzb3VyY2UgPSAnKD86ICcgKyBzb3VyY2UgKyAnKSc7XG4gICAgICAgIHN0ckNvcHkgPSAnICcgKyBzdHJDb3B5O1xuICAgICAgICBjaGFyc0FkZGVkKys7XG4gICAgICB9XG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgc3RyIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeKD86JyArIHNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgIH1cblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHNvdXJjZSArICckKD8hXFxcXHMpJywgZmxhZ3MpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG5cbiAgICBtYXRjaCA9IGNhbGwobmF0aXZlRXhlYywgc3RpY2t5ID8gcmVDb3B5IDogcmUsIHN0ckNvcHkpO1xuXG4gICAgaWYgKHN0aWNreSkge1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIG1hdGNoLmlucHV0ID0gc3RyaW5nU2xpY2UobWF0Y2guaW5wdXQsIGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaFswXSA9IHN0cmluZ1NsaWNlKG1hdGNoWzBdLCBjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2guaW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICAgIHJlLmxhc3RJbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICB9IGVsc2UgcmUubGFzdEluZGV4ID0gMDtcbiAgICB9IGVsc2UgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmUubGFzdEluZGV4ID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24ndCB3b3JrIGZvciAvKC4/KT8vXG4gICAgICBjYWxsKG5hdGl2ZVJlcGxhY2UsIG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2ggJiYgZ3JvdXBzKSB7XG4gICAgICBtYXRjaC5ncm91cHMgPSBvYmplY3QgPSBjcmVhdGUobnVsbCk7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2ldO1xuICAgICAgICBvYmplY3RbZ3JvdXBbMF1dID0gbWF0Y2hbZ3JvdXBbMV1dO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZXhlY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUuZXhlY1xuJCh7IHRhcmdldDogJ1JlZ0V4cCcsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IC8uLy5leGVjICE9PSBleGVjIH0sIHtcbiAgZXhlYzogZXhlY1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGFwcGx5ID0gRnVuY3Rpb25Qcm90b3R5cGUuYXBwbHk7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1yZWZsZWN0IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFJlZmxlY3QgPT0gJ29iamVjdCcgJiYgUmVmbGVjdC5hcHBseSB8fCAoTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoYXBwbHkpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShhcHBseSwgYXJndW1lbnRzKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBtb3ZlZCB0byBlbnRyeSBwb2ludHNcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMsIEZPUkNFRCwgU0hBTSkge1xuICB2YXIgU1lNQk9MID0gd2VsbEtub3duU3ltYm9sKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9PSA3O1xuICB9KTtcblxuICB2YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBERUxFR0FURVNfVE9fU1lNQk9MICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcblxuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFdlIGNhbid0IHVzZSByZWFsIHJlZ2V4IGhlcmUgc2luY2UgaXQgY2F1c2VzIGRlb3B0aW1pemF0aW9uXG4gICAgICAvLyBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpbiBWOFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMwNlxuICAgICAgcmUgPSB7fTtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICAgIHJlLmZsYWdzID0gJyc7XG4gICAgICByZVtTWU1CT0xdID0gLy4vW1NZTUJPTF07XG4gICAgfVxuXG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGV4ZWNDYWxsZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHJlW1NZTUJPTF0oJycpO1xuICAgIHJldHVybiAhZXhlY0NhbGxlZDtcbiAgfSk7XG5cbiAgaWYgKFxuICAgICFERUxFR0FURVNfVE9fU1lNQk9MIHx8XG4gICAgIURFTEVHQVRFU19UT19FWEVDIHx8XG4gICAgRk9SQ0VEXG4gICkge1xuICAgIHZhciBuYXRpdmVSZWdFeHBNZXRob2QgPSAvLi9bU1lNQk9MXTtcbiAgICB2YXIgbWV0aG9kcyA9IGV4ZWMoU1lNQk9MLCAnJ1tLRVldLCBmdW5jdGlvbiAobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgIHZhciAkZXhlYyA9IHJlZ2V4cC5leGVjO1xuICAgICAgaWYgKCRleGVjID09PSByZWdleHBFeGVjIHx8ICRleGVjID09PSBSZWdFeHBQcm90b3R5cGUuZXhlYykge1xuICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAvLyBwb2x5ZmlsbGVkIGZ1bmN0aW9uKSwgbGVhc2luZyB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogY2FsbChuYXRpdmVSZWdFeHBNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBjYWxsKG5hdGl2ZU1ldGhvZCwgc3RyLCByZWdleHAsIGFyZzIpIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbihTdHJpbmcucHJvdG90eXBlLCBLRVksIG1ldGhvZHNbMF0pO1xuICAgIGRlZmluZUJ1aWx0SW4oUmVnRXhwUHJvdG90eXBlLCBTWU1CT0wsIG1ldGhvZHNbMV0pO1xuICB9XG5cbiAgaWYgKFNIQU0pIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShSZWdFeHBQcm90b3R5cGVbU1lNQk9MXSwgJ3NoYW0nLCB0cnVlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKENPTlZFUlRfVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIHBvcykge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlck9ySW5maW5pdHkocG9zKTtcbiAgICB2YXIgc2l6ZSA9IFMubGVuZ3RoO1xuICAgIHZhciBmaXJzdCwgc2Vjb25kO1xuICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gc2l6ZSkgcmV0dXJuIENPTlZFUlRfVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgZmlyc3QgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbiArIDEpKSA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkZcbiAgICAgICAgPyBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gY2hhckF0KFMsIHBvc2l0aW9uKVxuICAgICAgICAgIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gc3RyaW5nU2xpY2UoUywgcG9zaXRpb24sIHBvc2l0aW9uICsgMilcbiAgICAgICAgICA6IChmaXJzdCAtIDB4RDgwMCA8PCAxMCkgKyAoc2Vjb25kIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2hhckF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jaGFyQXQ7XG5cbi8vIGBBZHZhbmNlU3RyaW5nSW5kZXhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gY2hhckF0KFMsIGluZGV4KS5sZW5ndGggOiAxKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFMgPSAvXFwkKFskJidgXXxcXGR7MSwyfXw8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCYnYF18XFxkezEsMn0pL2c7XG5cbi8vIGBHZXRTdWJzdGl0dXRpb25gIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gIHZhciBtID0gY2FwdHVyZXMubGVuZ3RoO1xuICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbmFtZWRDYXB0dXJlcyA9IHRvT2JqZWN0KG5hbWVkQ2FwdHVyZXMpO1xuICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgfVxuICByZXR1cm4gcmVwbGFjZShyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgIHZhciBjYXB0dXJlO1xuICAgIHN3aXRjaCAoY2hhckF0KGNoLCAwKSkge1xuICAgICAgY2FzZSAnJCc6IHJldHVybiAnJCc7XG4gICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICBjYXNlICdgJzogcmV0dXJuIHN0cmluZ1NsaWNlKHN0ciwgMCwgcG9zaXRpb24pO1xuICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0cmluZ1NsaWNlKHN0ciwgdGFpbFBvcyk7XG4gICAgICBjYXNlICc8JzpcbiAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbc3RyaW5nU2xpY2UoY2gsIDEsIC0xKV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgaWYgKG4gPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgIGlmIChmID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2hhckF0KGNoLCAxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoYXJBdChjaCwgMSk7XG4gICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICB9XG4gICAgICAgIGNhcHR1cmUgPSBjYXB0dXJlc1tuIC0gMV07XG4gICAgfVxuICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKGlzQ2FsbGFibGUoZXhlYykpIHtcbiAgICB2YXIgcmVzdWx0ID0gY2FsbChleGVjLCBSLCBTKTtcbiAgICBpZiAocmVzdWx0ICE9PSBudWxsKSBhbk9iamVjdChyZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGNsYXNzb2YoUikgPT09ICdSZWdFeHAnKSByZXR1cm4gY2FsbChyZWdleHBFeGVjLCBSLCBTKTtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgZ2V0U3Vic3RpdHV0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zdWJzdGl0dXRpb24nKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBSRVBMQUNFID0gd2VsbEtub3duU3ltYm9sKCdyZXBsYWNlJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG52YXIgc3RyaW5nSW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgbWF5YmVUb1N0cmluZyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG5cbi8vIElFIDw9IDExIHJlcGxhY2VzICQwIHdpdGggdGhlIHdob2xlIG1hdGNoLCBhcyBpZiBpdCB3YXMgJCZcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzYwMjQ2NjYvZ2V0dGluZy1pZS10by1yZXBsYWNlLWEtcmVnZXgtd2l0aC10aGUtbGl0ZXJhbC1zdHJpbmctMFxudmFyIFJFUExBQ0VfS0VFUFNfJDAgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3ByZWZlci1lc2NhcGUtcmVwbGFjZW1lbnQtZG9sbGFyLWNoYXIgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuICdhJy5yZXBsYWNlKC8uLywgJyQwJykgPT09ICckMCc7XG59KSgpO1xuXG4vLyBTYWZhcmkgPD0gMTMuMC4zKD8pIHN1YnN0aXR1dGVzIG50aCBjYXB0dXJlIHdoZXJlIG4+bSB3aXRoIGFuIGVtcHR5IHN0cmluZ1xudmFyIFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFID0gKGZ1bmN0aW9uICgpIHtcbiAgaWYgKC8uL1tSRVBMQUNFXSkge1xuICAgIHJldHVybiAvLi9bUkVQTEFDRV0oJ2EnLCAnJDAnKSA9PT0gJyc7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSkoKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLXVzZWxlc3MtZG9sbGFyLXJlcGxhY2VtZW50cyAtLSBmYWxzZSBwb3NpdGl2ZVxuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbi8vIEBAcmVwbGFjZSBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ3JlcGxhY2UnLCBmdW5jdGlvbiAoXywgbmF0aXZlUmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBVTlNBRkVfU1VCU1RJVFVURSA9IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFID8gJyQnIDogJyQwJztcblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgcmVwbGFjZXIgPSBpc051bGxPclVuZGVmaW5lZChzZWFyY2hWYWx1ZSkgPyB1bmRlZmluZWQgOiBnZXRNZXRob2Qoc2VhcmNoVmFsdWUsIFJFUExBQ0UpO1xuICAgICAgcmV0dXJuIHJlcGxhY2VyXG4gICAgICAgID8gY2FsbChyZXBsYWNlciwgc2VhcmNoVmFsdWUsIE8sIHJlcGxhY2VWYWx1ZSlcbiAgICAgICAgOiBjYWxsKG5hdGl2ZVJlcGxhY2UsIHRvU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHJlcGxhY2VcbiAgICBmdW5jdGlvbiAoc3RyaW5nLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgICAgdmFyIFMgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiByZXBsYWNlVmFsdWUgPT0gJ3N0cmluZycgJiZcbiAgICAgICAgc3RyaW5nSW5kZXhPZihyZXBsYWNlVmFsdWUsIFVOU0FGRV9TVUJTVElUVVRFKSA9PT0gLTEgJiZcbiAgICAgICAgc3RyaW5nSW5kZXhPZihyZXBsYWNlVmFsdWUsICckPCcpID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUobmF0aXZlUmVwbGFjZSwgcngsIFMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZ1bmN0aW9uYWxSZXBsYWNlID0gaXNDYWxsYWJsZShyZXBsYWNlVmFsdWUpO1xuICAgICAgaWYgKCFmdW5jdGlvbmFsUmVwbGFjZSkgcmVwbGFjZVZhbHVlID0gdG9TdHJpbmcocmVwbGFjZVZhbHVlKTtcblxuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIHZhciBmdWxsVW5pY29kZTtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcblxuICAgICAgICBwdXNoKHJlc3VsdHMsIHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcblxuICAgICAgICB2YXIgbWF0Y2hTdHIgPSB0b1N0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG5cbiAgICAgICAgdmFyIG1hdGNoZWQgPSB0b1N0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBtYXgobWluKHRvSW50ZWdlck9ySW5maW5pdHkocmVzdWx0LmluZGV4KSwgUy5sZW5ndGgpLCAwKTtcbiAgICAgICAgdmFyIGNhcHR1cmVzID0gW107XG4gICAgICAgIHZhciByZXBsYWNlbWVudDtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBwdXNoKGNhcHR1cmVzLCBtYXliZVRvU3RyaW5nKHJlc3VsdFtqXSkpO1xuICAgICAgICB2YXIgbmFtZWRDYXB0dXJlcyA9IHJlc3VsdC5ncm91cHM7XG4gICAgICAgIGlmIChmdW5jdGlvbmFsUmVwbGFjZSkge1xuICAgICAgICAgIHZhciByZXBsYWNlckFyZ3MgPSBjb25jYXQoW21hdGNoZWRdLCBjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHB1c2gocmVwbGFjZXJBcmdzLCBuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IHRvU3RyaW5nKGFwcGx5KHJlcGxhY2VWYWx1ZSwgdW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IHN0cmluZ1NsaWNlKFMsIG5leHRTb3VyY2VQb3NpdGlvbiwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbmV4dFNvdXJjZVBvc2l0aW9uID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBzdHJpbmdTbGljZShTLCBuZXh0U291cmNlUG9zaXRpb24pO1xuICAgIH1cbiAgXTtcbn0sICFSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyB8fCAhUkVQTEFDRV9LRUVQU18kMCB8fCBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgTUFUQ0ggPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG5cbi8vIGBJc1JlZ0V4cGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzcmVnZXhwXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjbGFzc29mKGl0KSA9PT0gJ1JlZ0V4cCcpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIHJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xuXG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUikge1xuICB2YXIgZmxhZ3MgPSBSLmZsYWdzO1xuICByZXR1cm4gZmxhZ3MgPT09IHVuZGVmaW5lZCAmJiAhKCdmbGFncycgaW4gUmVnRXhwUHJvdG90eXBlKSAmJiAhaGFzT3duKFIsICdmbGFncycpICYmIGlzUHJvdG90eXBlT2YoUmVnRXhwUHJvdG90eXBlLCBSKVxuICAgID8gY2FsbChyZWdFeHBGbGFncywgUikgOiBmbGFncztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXJlZ2V4cCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgZ2V0UmVnRXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWdldC1mbGFncycpO1xudmFyIGdldFN1YnN0aXR1dGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc3Vic3RpdHV0aW9uJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBSRVBMQUNFID0gd2VsbEtub3duU3ltYm9sKCdyZXBsYWNlJyk7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBpbmRleE9mID0gdW5jdXJyeVRoaXMoJycuaW5kZXhPZik7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlQWxsYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlYWxsXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUgfSwge1xuICByZXBsYWNlQWxsOiBmdW5jdGlvbiByZXBsYWNlQWxsKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpIHtcbiAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgdmFyIElTX1JFR19FWFAsIGZsYWdzLCByZXBsYWNlciwgc3RyaW5nLCBzZWFyY2hTdHJpbmcsIGZ1bmN0aW9uYWxSZXBsYWNlLCBzZWFyY2hMZW5ndGgsIGFkdmFuY2VCeSwgcmVwbGFjZW1lbnQ7XG4gICAgdmFyIHBvc2l0aW9uID0gMDtcbiAgICB2YXIgZW5kT2ZMYXN0TWF0Y2ggPSAwO1xuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHNlYXJjaFZhbHVlKSkge1xuICAgICAgSVNfUkVHX0VYUCA9IGlzUmVnRXhwKHNlYXJjaFZhbHVlKTtcbiAgICAgIGlmIChJU19SRUdfRVhQKSB7XG4gICAgICAgIGZsYWdzID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZShnZXRSZWdFeHBGbGFncyhzZWFyY2hWYWx1ZSkpKTtcbiAgICAgICAgaWYgKCF+aW5kZXhPZihmbGFncywgJ2cnKSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2AucmVwbGFjZUFsbGAgZG9lcyBub3QgYWxsb3cgbm9uLWdsb2JhbCByZWdleGVzJyk7XG4gICAgICB9XG4gICAgICByZXBsYWNlciA9IGdldE1ldGhvZChzZWFyY2hWYWx1ZSwgUkVQTEFDRSk7XG4gICAgICBpZiAocmVwbGFjZXIpIHtcbiAgICAgICAgcmV0dXJuIGNhbGwocmVwbGFjZXIsIHNlYXJjaFZhbHVlLCBPLCByZXBsYWNlVmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChJU19QVVJFICYmIElTX1JFR19FWFApIHtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2UodG9TdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdHJpbmcgPSB0b1N0cmluZyhPKTtcbiAgICBzZWFyY2hTdHJpbmcgPSB0b1N0cmluZyhzZWFyY2hWYWx1ZSk7XG4gICAgZnVuY3Rpb25hbFJlcGxhY2UgPSBpc0NhbGxhYmxlKHJlcGxhY2VWYWx1ZSk7XG4gICAgaWYgKCFmdW5jdGlvbmFsUmVwbGFjZSkgcmVwbGFjZVZhbHVlID0gdG9TdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICBzZWFyY2hMZW5ndGggPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICAgIGFkdmFuY2VCeSA9IG1heCgxLCBzZWFyY2hMZW5ndGgpO1xuICAgIHBvc2l0aW9uID0gaW5kZXhPZihzdHJpbmcsIHNlYXJjaFN0cmluZyk7XG4gICAgd2hpbGUgKHBvc2l0aW9uICE9PSAtMSkge1xuICAgICAgcmVwbGFjZW1lbnQgPSBmdW5jdGlvbmFsUmVwbGFjZVxuICAgICAgICA/IHRvU3RyaW5nKHJlcGxhY2VWYWx1ZShzZWFyY2hTdHJpbmcsIHBvc2l0aW9uLCBzdHJpbmcpKVxuICAgICAgICA6IGdldFN1YnN0aXR1dGlvbihzZWFyY2hTdHJpbmcsIHN0cmluZywgcG9zaXRpb24sIFtdLCB1bmRlZmluZWQsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICByZXN1bHQgKz0gc3RyaW5nU2xpY2Uoc3RyaW5nLCBlbmRPZkxhc3RNYXRjaCwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICBlbmRPZkxhc3RNYXRjaCA9IHBvc2l0aW9uICsgc2VhcmNoTGVuZ3RoO1xuICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiArIGFkdmFuY2VCeSA+IHN0cmluZy5sZW5ndGggPyAtMSA6IGluZGV4T2Yoc3RyaW5nLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uICsgYWR2YW5jZUJ5KTtcbiAgICB9XG4gICAgaWYgKGVuZE9mTGFzdE1hdGNoIDwgc3RyaW5nLmxlbmd0aCkge1xuICAgICAgcmVzdWx0ICs9IHN0cmluZ1NsaWNlKHN0cmluZywgZW5kT2ZMYXN0TWF0Y2gpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SLCBNRVRIT0QpIHtcbiAgcmV0dXJuIHVuY3VycnlUaGlzKGdsb2JhbFtDT05TVFJVQ1RPUl0ucHJvdG90eXBlW01FVEhPRF0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UtYWxsJyk7XG52YXIgZW50cnlVbmJpbmQgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvZW50cnktdW5iaW5kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlVbmJpbmQoJ1N0cmluZycsICdyZXBsYWNlQWxsJyk7XG4iLCJjb25zdCBOT0RFX0lOSVRJQUwgPSAwO1xuY29uc3QgTk9ERV9TVUNDRVNTID0gMTtcbmNvbnN0IE5PREVfRVJST1JFRCA9IDI7XG5jb25zdCBTVEFSVF9PRl9JTlBVVCA9IGBcXHUwMDAxYDtcbmNvbnN0IEVORF9PRl9JTlBVVCA9IGBcXHUwMDAwYDtcbmNvbnN0IEhFTFBfQ09NTUFORF9JTkRFWCA9IC0xO1xuY29uc3QgSEVMUF9SRUdFWCA9IC9eKC1ofC0taGVscCkoPzo9KFswLTldKykpPyQvO1xuY29uc3QgT1BUSU9OX1JFR0VYID0gL14oLS1bYS16XSsoPzotW2Etel0rKSp8LVthLXpBLVpdKykkLztcbmNvbnN0IEJBVENIX1JFR0VYID0gL14tW2EtekEtWl17Mix9JC87XG5jb25zdCBCSU5ESU5HX1JFR0VYID0gL14oW149XSspPShbXFxzXFxTXSopJC87XG5jb25zdCBERUJVRyA9IHByb2Nlc3MuZW52LkRFQlVHX0NMSSA9PT0gYDFgO1xuXG5leHBvcnQgeyBCQVRDSF9SRUdFWCwgQklORElOR19SRUdFWCwgREVCVUcsIEVORF9PRl9JTlBVVCwgSEVMUF9DT01NQU5EX0lOREVYLCBIRUxQX1JFR0VYLCBOT0RFX0VSUk9SRUQsIE5PREVfSU5JVElBTCwgTk9ERV9TVUNDRVNTLCBPUFRJT05fUkVHRVgsIFNUQVJUX09GX0lOUFVUIH07XG4iLCJpbXBvcnQgeyBFTkRfT0ZfSU5QVVQgfSBmcm9tICcuL2NvbnN0YW50cy5tanMnO1xuXG4vKipcbiAqIEEgZ2VuZXJpYyB1c2FnZSBlcnJvciB3aXRoIHRoZSBuYW1lIGBVc2FnZUVycm9yYC5cbiAqXG4gKiBJdCBzaG91bGQgYmUgdXNlZCBvdmVyIGBFcnJvcmAgb25seSB3aGVuIGl0J3MgdGhlIHVzZXIncyBmYXVsdC5cbiAqL1xuY2xhc3MgVXNhZ2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmNsaXBhbmlvbiA9IHsgdHlwZTogYHVzYWdlYCB9O1xuICAgICAgICB0aGlzLm5hbWUgPSBgVXNhZ2VFcnJvcmA7XG4gICAgfVxufVxuY2xhc3MgVW5rbm93blN5bnRheEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGlucHV0LCBjYW5kaWRhdGVzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5jYW5kaWRhdGVzID0gY2FuZGlkYXRlcztcbiAgICAgICAgdGhpcy5jbGlwYW5pb24gPSB7IHR5cGU6IGBub25lYCB9O1xuICAgICAgICB0aGlzLm5hbWUgPSBgVW5rbm93blN5bnRheEVycm9yYDtcbiAgICAgICAgaWYgKHRoaXMuY2FuZGlkYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IGBDb21tYW5kIG5vdCBmb3VuZCwgYnV0IHdlJ3JlIG5vdCBzdXJlIHdoYXQncyB0aGUgYWx0ZXJuYXRpdmUuYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNhbmRpZGF0ZXMuZXZlcnkoY2FuZGlkYXRlID0+IGNhbmRpZGF0ZS5yZWFzb24gIT09IG51bGwgJiYgY2FuZGlkYXRlLnJlYXNvbiA9PT0gY2FuZGlkYXRlc1swXS5yZWFzb24pKSB7XG4gICAgICAgICAgICBjb25zdCBbeyByZWFzb24gfV0gPSB0aGlzLmNhbmRpZGF0ZXM7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBgJHtyZWFzb259XFxuXFxuJHt0aGlzLmNhbmRpZGF0ZXMubWFwKCh7IHVzYWdlIH0pID0+IGAkICR7dXNhZ2V9YCkuam9pbihgXFxuYCl9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNhbmRpZGF0ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBbeyB1c2FnZSB9XSA9IHRoaXMuY2FuZGlkYXRlcztcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IGBDb21tYW5kIG5vdCBmb3VuZDsgZGlkIHlvdSBtZWFuOlxcblxcbiQgJHt1c2FnZX1cXG4ke3doaWxlUnVubmluZyhpbnB1dCl9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IGBDb21tYW5kIG5vdCBmb3VuZDsgZGlkIHlvdSBtZWFuIG9uZSBvZjpcXG5cXG4ke3RoaXMuY2FuZGlkYXRlcy5tYXAoKHsgdXNhZ2UgfSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7YCR7aW5kZXh9LmAucGFkU3RhcnQoNCl9ICR7dXNhZ2V9YDtcbiAgICAgICAgICAgIH0pLmpvaW4oYFxcbmApfVxcblxcbiR7d2hpbGVSdW5uaW5nKGlucHV0KX1gO1xuICAgICAgICB9XG4gICAgfVxufVxuY2xhc3MgQW1iaWd1b3VzU3ludGF4RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoaW5wdXQsIHVzYWdlcykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gdXNhZ2VzO1xuICAgICAgICB0aGlzLmNsaXBhbmlvbiA9IHsgdHlwZTogYG5vbmVgIH07XG4gICAgICAgIHRoaXMubmFtZSA9IGBBbWJpZ3VvdXNTeW50YXhFcnJvcmA7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IGBDYW5ub3QgZmluZCB3aGljaCB0byBwaWNrIGFtb25nc3QgdGhlIGZvbGxvd2luZyBhbHRlcm5hdGl2ZXM6XFxuXFxuJHt0aGlzLnVzYWdlcy5tYXAoKHVzYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAke2Ake2luZGV4fS5gLnBhZFN0YXJ0KDQpfSAke3VzYWdlfWA7XG4gICAgICAgIH0pLmpvaW4oYFxcbmApfVxcblxcbiR7d2hpbGVSdW5uaW5nKGlucHV0KX1gO1xuICAgIH1cbn1cbmNvbnN0IHdoaWxlUnVubmluZyA9IChpbnB1dCkgPT4gYFdoaWxlIHJ1bm5pbmcgJHtpbnB1dC5maWx0ZXIodG9rZW4gPT4ge1xuICAgIHJldHVybiB0b2tlbiAhPT0gRU5EX09GX0lOUFVUO1xufSkubWFwKHRva2VuID0+IHtcbiAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkodG9rZW4pO1xuICAgIGlmICh0b2tlbi5tYXRjaCgvXFxzLykgfHwgdG9rZW4ubGVuZ3RoID09PSAwIHx8IGpzb24gIT09IGBcIiR7dG9rZW59XCJgKSB7XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH1cbn0pLmpvaW4oYCBgKX1gO1xuXG5leHBvcnQgeyBBbWJpZ3VvdXNTeW50YXhFcnJvciwgVW5rbm93blN5bnRheEVycm9yLCBVc2FnZUVycm9yIH07XG4iLCJjb25zdCBNQVhfTElORV9MRU5HVEggPSA4MDtcbmNvbnN0IHJpY2hMaW5lID0gQXJyYXkoTUFYX0xJTkVfTEVOR1RIKS5maWxsKGDilIFgKTtcbmZvciAobGV0IHQgPSAwOyB0IDw9IDI0OyArK3QpXG4gICAgcmljaExpbmVbcmljaExpbmUubGVuZ3RoIC0gdF0gPSBgXFx4MWJbMzg7NTskezIzMiArIHR9beKUgWA7XG5jb25zdCByaWNoRm9ybWF0ID0ge1xuICAgIGhlYWRlcjogc3RyID0+IGBcXHgxYlsxbeKUgeKUgeKUgSAke3N0cn0ke3N0ci5sZW5ndGggPCBNQVhfTElORV9MRU5HVEggLSA1ID8gYCAke3JpY2hMaW5lLnNsaWNlKHN0ci5sZW5ndGggKyA1KS5qb2luKGBgKX1gIDogYDpgfVxceDFiWzBtYCxcbiAgICBib2xkOiBzdHIgPT4gYFxceDFiWzFtJHtzdHJ9XFx4MWJbMjJtYCxcbiAgICBlcnJvcjogc3RyID0+IGBcXHgxYlszMW1cXHgxYlsxbSR7c3RyfVxceDFiWzIybVxceDFiWzM5bWAsXG4gICAgY29kZTogc3RyID0+IGBcXHgxYlszNm0ke3N0cn1cXHgxYlszOW1gLFxufTtcbmNvbnN0IHRleHRGb3JtYXQgPSB7XG4gICAgaGVhZGVyOiBzdHIgPT4gc3RyLFxuICAgIGJvbGQ6IHN0ciA9PiBzdHIsXG4gICAgZXJyb3I6IHN0ciA9PiBzdHIsXG4gICAgY29kZTogc3RyID0+IHN0cixcbn07XG5mdW5jdGlvbiBkZWRlbnQodGV4dCkge1xuICAgIGNvbnN0IGxpbmVzID0gdGV4dC5zcGxpdChgXFxuYCk7XG4gICAgY29uc3Qgbm9uRW1wdHlMaW5lcyA9IGxpbmVzLmZpbHRlcihsaW5lID0+IGxpbmUubWF0Y2goL1xcUy8pKTtcbiAgICBjb25zdCBpbmRlbnQgPSBub25FbXB0eUxpbmVzLmxlbmd0aCA+IDAgPyBub25FbXB0eUxpbmVzLnJlZHVjZSgobWluTGVuZ3RoLCBsaW5lKSA9PiBNYXRoLm1pbihtaW5MZW5ndGgsIGxpbmUubGVuZ3RoIC0gbGluZS50cmltU3RhcnQoKS5sZW5ndGgpLCBOdW1iZXIuTUFYX1ZBTFVFKSA6IDA7XG4gICAgcmV0dXJuIGxpbmVzXG4gICAgICAgIC5tYXAobGluZSA9PiBsaW5lLnNsaWNlKGluZGVudCkudHJpbVJpZ2h0KCkpXG4gICAgICAgIC5qb2luKGBcXG5gKTtcbn1cbi8qKlxuICogRm9ybWF0cyBtYXJrZG93biB0ZXh0IHRvIGJlIGRpc3BsYXllZCB0byB0aGUgY29uc29sZS4gTm90IGFsbCBtYXJrZG93biBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkLlxuICpcbiAqIEBwYXJhbSB0ZXh0IFRoZSBtYXJrZG93biB0ZXh0IHRvIGZvcm1hdC5cbiAqIEBwYXJhbSBvcHRzLmZvcm1hdCBUaGUgZm9ybWF0IHRvIHVzZS5cbiAqIEBwYXJhbSBvcHRzLnBhcmFncmFwaHMgV2hldGhlciB0byBjdXQgdGhlIHRleHQgaW50byBwYXJhZ3JhcGhzIG9mIDgwIGNoYXJhY3RlcnMgYXQgbW9zdC5cbiAqL1xuZnVuY3Rpb24gZm9ybWF0TWFya2Rvd25pc2godGV4dCwgeyBmb3JtYXQsIHBhcmFncmFwaHMgfSkge1xuICAgIC8vIEVuZm9yY2UgXFxuIGFzIG5ld2xpbmUgY2hhcmFjdGVyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxyXFxuPy9nLCBgXFxuYCk7XG4gICAgLy8gUmVtb3ZlIHRoZSBpbmRlbnRhdGlvbiwgc2luY2UgaXQgZ290IG1lc3NlZCB1cCB3aXRoIHRoZSBKUyBpbmRlbnRhdGlvblxuICAgIHRleHQgPSBkZWRlbnQodGV4dCk7XG4gICAgLy8gUmVtb3ZlIHN1cnJvdW5kaW5nIG5ld2xpbmVzLCBzaW5jZSB0aGV5IGdvdCBhZGRlZCBmb3IgSlMgZm9ybWF0dGluZ1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL15cXG4rfFxcbiskL2csIGBgKTtcbiAgICAvLyBMaXN0IGl0ZW1zIGFsd2F5cyBlbmQgd2l0aCBhdCBsZWFzdCB0d28gbmV3bGluZXMgKGluIG9yZGVyIHRvIG5vdCBiZSBjb2xsYXBzZWQpXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXihcXHMqKS0oW15cXG5dKj8pXFxuKy9nbSwgYCQxLSQyXFxuXFxuYCk7XG4gICAgLy8gU2luZ2xlIG5ld2xpbmVzIGFyZSByZW1vdmVkOyBsYXJnZXIgdGhhbiB0aGF0IGFyZSBjb2xsYXBzZWQgaW50byBvbmVcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXG4oXFxuKT9cXG4qL2csICgkMCwgJDEpID0+ICQxID8gJDEgOiBgIGApO1xuICAgIGlmIChwYXJhZ3JhcGhzKSB7XG4gICAgICAgIHRleHQgPSB0ZXh0LnNwbGl0KC9cXG4vKS5tYXAocGFyYWdyYXBoID0+IHtcbiAgICAgICAgICAgIC8vIERvZXMgdGhlIHBhcmFncmFwaCBzdGFydHMgd2l0aCBhIGxpc3Q/XG4gICAgICAgICAgICBjb25zdCBidWxsZXRNYXRjaCA9IHBhcmFncmFwaC5tYXRjaCgvXlxccypbKi1dW1xcdCBdKyguKikvKTtcbiAgICAgICAgICAgIGlmICghYnVsbGV0TWF0Y2gpXG4gICAgICAgICAgICAgICAgLy8gTm8sIGN1dCB0aGUgcGFyYWdyYXBocyBpbnRvIHNlZ21lbnRzIG9mIDgwIGNoYXJhY3RlcnNcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyYWdyYXBoLm1hdGNoKC8oLnsxLDgwfSkoPzogfCQpL2cpLmpvaW4oYFxcbmApO1xuICAgICAgICAgICAgY29uc3QgaW5kZW50ID0gcGFyYWdyYXBoLmxlbmd0aCAtIHBhcmFncmFwaC50cmltU3RhcnQoKS5sZW5ndGg7XG4gICAgICAgICAgICAvLyBZZXMsIGN1dCB0aGUgcGFyYWdyYXBocyBpbnRvIHNlZ21lbnRzIG9mICg3OCAtIGluZGVudCkgY2hhcmFjdGVycyAodG8gYWNjb3VudCBmb3IgdGhlIHByZWZpeClcbiAgICAgICAgICAgIHJldHVybiBidWxsZXRNYXRjaFsxXS5tYXRjaChuZXcgUmVnRXhwKGAoLnsxLCR7NzggLSBpbmRlbnR9fSkoPzogfCQpYCwgYGdgKSkubWFwKChsaW5lLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBgIGAucmVwZWF0KGluZGVudCkgKyAoaW5kZXggPT09IDAgPyBgLSBgIDogYCAgYCkgKyBsaW5lO1xuICAgICAgICAgICAgfSkuam9pbihgXFxuYCk7XG4gICAgICAgIH0pLmpvaW4oYFxcblxcbmApO1xuICAgIH1cbiAgICAvLyBIaWdobGlnaHQgdGhlIGNvZGUgc2VnbWVudHNcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8oYCspKCg/Oi58W1xcbl0pKj8pXFwxL2csICgkMCwgJDEsICQyKSA9PiB7XG4gICAgICAgIHJldHVybiBmb3JtYXQuY29kZSgkMSArICQyICsgJDEpO1xuICAgIH0pO1xuICAgIC8vIEhpZ2hsaWdodCB0aGUgYm9sZCBzZWdtZW50c1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoLyhcXCpcXCopKCg/Oi58W1xcbl0pKj8pXFwxL2csICgkMCwgJDEsICQyKSA9PiB7XG4gICAgICAgIHJldHVybiBmb3JtYXQuYm9sZCgkMSArICQyICsgJDEpO1xuICAgIH0pO1xuICAgIHJldHVybiB0ZXh0ID8gYCR7dGV4dH1cXG5gIDogYGA7XG59XG5cbmV4cG9ydCB7IGZvcm1hdE1hcmtkb3duaXNoLCByaWNoRm9ybWF0LCB0ZXh0Rm9ybWF0IH07XG4iLCJpbXBvcnQgeyBVc2FnZUVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3JzLm1qcyc7XG5cbmNvbnN0IGlzT3B0aW9uU3ltYm9sID0gU3ltYm9sKGBjbGlwYW5pb24vaXNPcHRpb25gKTtcbmZ1bmN0aW9uIG1ha2VDb21tYW5kT3B0aW9uKHNwZWMpIHtcbiAgICAvLyBXZSBsaWUhIEJ1dCBpdCdzIGZvciB0aGUgZ29vZCBjYXVzZTogdGhlIGNsaSBlbmdpbmUgd2lsbCB0dXJuIHRoZSBzcGVjcyBpbnRvIHByb3BlciB2YWx1ZXMgYWZ0ZXIgaW5zdGFudGlhdGlvbi5cbiAgICByZXR1cm4geyAuLi5zcGVjLCBbaXNPcHRpb25TeW1ib2xdOiB0cnVlIH07XG59XG5mdW5jdGlvbiByZXJvdXRlQXJndW1lbnRzKGEsIGIpIHtcbiAgICBpZiAodHlwZW9mIGEgPT09IGB1bmRlZmluZWRgKVxuICAgICAgICByZXR1cm4gW2EsIGJdO1xuICAgIGlmICh0eXBlb2YgYSA9PT0gYG9iamVjdGAgJiYgYSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZCwgYV07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gW2EsIGJdO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNsZWFuVmFsaWRhdGlvbkVycm9yKG1lc3NhZ2UsIHsgbWVyZ2VOYW1lID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgY29uc3QgbWF0Y2ggPSBtZXNzYWdlLm1hdGNoKC9eKFteOl0rKTogKC4qKSQvbSk7XG4gICAgaWYgKCFtYXRjaClcbiAgICAgICAgcmV0dXJuIGB2YWxpZGF0aW9uIGZhaWxlZGA7XG4gICAgbGV0IFssIHBhdGgsIGxpbmVdID0gbWF0Y2g7XG4gICAgaWYgKG1lcmdlTmFtZSlcbiAgICAgICAgbGluZSA9IGxpbmVbMF0udG9Mb3dlckNhc2UoKSArIGxpbmUuc2xpY2UoMSk7XG4gICAgbGluZSA9IHBhdGggIT09IGAuYCB8fCAhbWVyZ2VOYW1lXG4gICAgICAgID8gYCR7cGF0aC5yZXBsYWNlKC9eXFwuKFxcW3wkKS8sIGAkMWApfTogJHtsaW5lfWBcbiAgICAgICAgOiBgOiAke2xpbmV9YDtcbiAgICByZXR1cm4gbGluZTtcbn1cbmZ1bmN0aW9uIGZvcm1hdEVycm9yKG1lc3NhZ2UsIGVycm9ycykge1xuICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBuZXcgVXNhZ2VFcnJvcihgJHttZXNzYWdlfSR7Y2xlYW5WYWxpZGF0aW9uRXJyb3IoZXJyb3JzWzBdLCB7IG1lcmdlTmFtZTogdHJ1ZSB9KX1gKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgVXNhZ2VFcnJvcihgJHttZXNzYWdlfTpcXG4ke2Vycm9ycy5tYXAoZXJyb3IgPT4gYFxcbi0gJHtjbGVhblZhbGlkYXRpb25FcnJvcihlcnJvcil9YCkuam9pbihgYCl9YCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYXBwbHlWYWxpZGF0b3IobmFtZSwgdmFsdWUsIHZhbGlkYXRvcikge1xuICAgIGlmICh0eXBlb2YgdmFsaWRhdG9yID09PSBgdW5kZWZpbmVkYClcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgIGNvbnN0IGNvZXJjaW9ucyA9IFtdO1xuICAgIGNvbnN0IGNvZXJjaW9uID0gKHYpID0+IHtcbiAgICAgICAgY29uc3Qgb3JpZyA9IHZhbHVlO1xuICAgICAgICB2YWx1ZSA9IHY7XG4gICAgICAgIHJldHVybiBjb2VyY2lvbi5iaW5kKG51bGwsIG9yaWcpO1xuICAgIH07XG4gICAgY29uc3QgY2hlY2sgPSB2YWxpZGF0b3IodmFsdWUsIHsgZXJyb3JzLCBjb2VyY2lvbnMsIGNvZXJjaW9uIH0pO1xuICAgIGlmICghY2hlY2spXG4gICAgICAgIHRocm93IGZvcm1hdEVycm9yKGBJbnZhbGlkIHZhbHVlIGZvciAke25hbWV9YCwgZXJyb3JzKTtcbiAgICBmb3IgKGNvbnN0IFssIG9wXSBvZiBjb2VyY2lvbnMpXG4gICAgICAgIG9wKCk7XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgeyBhcHBseVZhbGlkYXRvciwgY2xlYW5WYWxpZGF0aW9uRXJyb3IsIGZvcm1hdEVycm9yLCBpc09wdGlvblN5bWJvbCwgbWFrZUNvbW1hbmRPcHRpb24sIHJlcm91dGVBcmd1bWVudHMgfTtcbiIsImltcG9ydCB7IGZvcm1hdEVycm9yLCBpc09wdGlvblN5bWJvbCB9IGZyb20gJy4vb3B0aW9ucy91dGlscy5tanMnO1xuXG4vKipcbiAqIEJhc2UgYWJzdHJhY3QgY2xhc3MgZm9yIENMSSBjb21tYW5kcy4gVGhlIG1haW4gdGhpbmcgdG8gcmVtZW1iZXIgaXMgdG9cbiAqIGRlY2xhcmUgYW4gYXN5bmMgYGV4ZWN1dGVgIG1lbWJlciBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlXG4gKiBjb21tYW5kIGlzIGludm9rZWQgZnJvbSB0aGUgQ0xJLCBhbmQgb3B0aW9uYWxseSBhIGBwYXRoc2AgcHJvcGVydHkgdG9cbiAqIGRlY2xhcmUgdGhlIHNldCBvZiBwYXRocyB1bmRlciB3aGljaCB0aGUgY29tbWFuZCBzaG91bGQgYmUgZXhwb3NlZC5cbiAqL1xuY2xhc3MgQ29tbWFuZCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQcmVkZWZpbmVkIHRoYXQgd2lsbCBiZSBzZXQgdG8gdHJ1ZSBpZiBgLWgsLS1oZWxwYCBoYXMgYmVlbiB1c2VkLCBpblxuICAgICAgICAgKiB3aGljaCBjYXNlIGBDb21tYW5kI2V4ZWN1dGVgIHdvbid0IGJlIGNhbGxlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaGVscCA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSB1c2FnZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGdpdmVuIGNvbW1hbmQuXG4gICAgICovXG4gICAgc3RhdGljIFVzYWdlKHVzYWdlKSB7XG4gICAgICAgIHJldHVybiB1c2FnZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQgZXJyb3IgaGFuZGxlciB3aGljaCB3aWxsIHNpbXBseSByZXRocm93IHRoZSBlcnJvci4gQ2FuIGJlIHVzZWRcbiAgICAgKiB0byBhZGQgY3VzdG9tIGxvZ2ljIHRvIGhhbmRsZSBlcnJvcnMgZnJvbSB0aGUgY29tbWFuZCBvciBzaW1wbHkgcmV0dXJuXG4gICAgICogdGhlIHBhcmVudCBjbGFzcyBlcnJvciBoYW5kbGluZy5cbiAgICAgKi9cbiAgICBhc3luYyBjYXRjaChlcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgYXN5bmMgdmFsaWRhdGVBbmRFeGVjdXRlKCkge1xuICAgICAgICBjb25zdCBjb21tYW5kQ2xhc3MgPSB0aGlzLmNvbnN0cnVjdG9yO1xuICAgICAgICBjb25zdCBjYXNjYWRlID0gY29tbWFuZENsYXNzLnNjaGVtYTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2FzY2FkZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgaXNEaWN0LCBpc1Vua25vd24sIGFwcGx5Q2FzY2FkZSB9ID0gYXdhaXQgaW1wb3J0KCd0eXBhbmlvbicpO1xuICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gYXBwbHlDYXNjYWRlKGlzRGljdChpc1Vua25vd24oKSksIGNhc2NhZGUpO1xuICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgICAgICAgICBjb25zdCBjb2VyY2lvbnMgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrID0gc2NoZW1hKHRoaXMsIHsgZXJyb3JzLCBjb2VyY2lvbnMgfSk7XG4gICAgICAgICAgICBpZiAoIWNoZWNrKVxuICAgICAgICAgICAgICAgIHRocm93IGZvcm1hdEVycm9yKGBJbnZhbGlkIG9wdGlvbiBzY2hlbWFgLCBlcnJvcnMpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbLCBvcF0gb2YgY29lcmNpb25zKSB7XG4gICAgICAgICAgICAgICAgb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjYXNjYWRlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjb21tYW5kIHNjaGVtYWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV4aXRDb2RlID0gYXdhaXQgdGhpcy5leGVjdXRlKCk7XG4gICAgICAgIGlmICh0eXBlb2YgZXhpdENvZGUgIT09IGB1bmRlZmluZWRgKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhpdENvZGU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogVXNlZCB0byBkZXRlY3Qgb3B0aW9uIGRlZmluaXRpb25zLlxuICovXG5Db21tYW5kLmlzT3B0aW9uID0gaXNPcHRpb25TeW1ib2w7XG4vKipcbiAqIEp1c3QgYW4gaGVscGVyIHRvIHVzZSBhbG9uZyB3aXRoIHRoZSBgcGF0aHNgIGZpZWxkcywgdG8gbWFrZSBpdFxuICogY2xlYXJlciB0aGF0IGEgY29tbWFuZCBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNsYXNzIE15Q29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICogICBzdGF0aWMgcGF0aHMgPSBbQ29tbWFuZC5EZWZhdWx0XTtcbiAqIH1cbiAqL1xuQ29tbWFuZC5EZWZhdWx0ID0gW107XG5cbmV4cG9ydCB7IENvbW1hbmQgfTtcbiIsImltcG9ydCB7IERFQlVHLCBOT0RFX1NVQ0NFU1MsIE5PREVfRVJST1JFRCwgRU5EX09GX0lOUFVULCBOT0RFX0lOSVRJQUwsIEhFTFBfQ09NTUFORF9JTkRFWCwgQkFUQ0hfUkVHRVgsIEJJTkRJTkdfUkVHRVgsIE9QVElPTl9SRUdFWCwgSEVMUF9SRUdFWCwgU1RBUlRfT0ZfSU5QVVQgfSBmcm9tICcuL2NvbnN0YW50cy5tanMnO1xuaW1wb3J0IHsgVW5rbm93blN5bnRheEVycm9yLCBBbWJpZ3VvdXNTeW50YXhFcnJvciB9IGZyb20gJy4vZXJyb3JzLm1qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gZGVidWcoc3RyKSB7XG4gICAgaWYgKERFQlVHKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKHN0cik7XG4gICAgfVxufVxuY29uc3QgYmFzaWNIZWxwU3RhdGUgPSB7XG4gICAgY2FuZGlkYXRlVXNhZ2U6IG51bGwsXG4gICAgcmVxdWlyZWRPcHRpb25zOiBbXSxcbiAgICBlcnJvck1lc3NhZ2U6IG51bGwsXG4gICAgaWdub3JlT3B0aW9uczogZmFsc2UsXG4gICAgcGF0aDogW10sXG4gICAgcG9zaXRpb25hbHM6IFtdLFxuICAgIG9wdGlvbnM6IFtdLFxuICAgIHJlbWFpbmRlcjogbnVsbCxcbiAgICBzZWxlY3RlZEluZGV4OiBIRUxQX0NPTU1BTkRfSU5ERVgsXG59O1xuZnVuY3Rpb24gbWFrZVN0YXRlTWFjaGluZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBub2RlczogW21ha2VOb2RlKCksIG1ha2VOb2RlKCksIG1ha2VOb2RlKCldLFxuICAgIH07XG59XG5mdW5jdGlvbiBtYWtlQW55T2ZNYWNoaW5lKGlucHV0cykge1xuICAgIGNvbnN0IG91dHB1dCA9IG1ha2VTdGF0ZU1hY2hpbmUoKTtcbiAgICBjb25zdCBoZWFkcyA9IFtdO1xuICAgIGxldCBvZmZzZXQgPSBvdXRwdXQubm9kZXMubGVuZ3RoO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgaW5wdXRzKSB7XG4gICAgICAgIGhlYWRzLnB1c2gob2Zmc2V0KTtcbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCBpbnB1dC5ub2Rlcy5sZW5ndGg7ICsrdClcbiAgICAgICAgICAgIGlmICghaXNUZXJtaW5hbE5vZGUodCkpXG4gICAgICAgICAgICAgICAgb3V0cHV0Lm5vZGVzLnB1c2goY2xvbmVOb2RlKGlucHV0Lm5vZGVzW3RdLCBvZmZzZXQpKTtcbiAgICAgICAgb2Zmc2V0ICs9IGlucHV0Lm5vZGVzLmxlbmd0aCAtIDI7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaGVhZCBvZiBoZWFkcylcbiAgICAgICAgcmVnaXN0ZXJTaG9ydGN1dChvdXRwdXQsIE5PREVfSU5JVElBTCwgaGVhZCk7XG4gICAgcmV0dXJuIG91dHB1dDtcbn1cbmZ1bmN0aW9uIGluamVjdE5vZGUobWFjaGluZSwgbm9kZSkge1xuICAgIG1hY2hpbmUubm9kZXMucHVzaChub2RlKTtcbiAgICByZXR1cm4gbWFjaGluZS5ub2Rlcy5sZW5ndGggLSAxO1xufVxuZnVuY3Rpb24gc2ltcGxpZnlNYWNoaW5lKGlucHV0KSB7XG4gICAgY29uc3QgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgICBjb25zdCBwcm9jZXNzID0gKG5vZGUpID0+IHtcbiAgICAgICAgaWYgKHZpc2l0ZWQuaGFzKG5vZGUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2aXNpdGVkLmFkZChub2RlKTtcbiAgICAgICAgY29uc3Qgbm9kZURlZiA9IGlucHV0Lm5vZGVzW25vZGVdO1xuICAgICAgICBmb3IgKGNvbnN0IHRyYW5zaXRpb25zIG9mIE9iamVjdC52YWx1ZXMobm9kZURlZi5zdGF0aWNzKSlcbiAgICAgICAgICAgIGZvciAoY29uc3QgeyB0byB9IG9mIHRyYW5zaXRpb25zKVxuICAgICAgICAgICAgICAgIHByb2Nlc3ModG8pO1xuICAgICAgICBmb3IgKGNvbnN0IFssIHsgdG8gfV0gb2Ygbm9kZURlZi5keW5hbWljcylcbiAgICAgICAgICAgIHByb2Nlc3ModG8pO1xuICAgICAgICBmb3IgKGNvbnN0IHsgdG8gfSBvZiBub2RlRGVmLnNob3J0Y3V0cylcbiAgICAgICAgICAgIHByb2Nlc3ModG8pO1xuICAgICAgICBjb25zdCBzaG9ydGN1dHMgPSBuZXcgU2V0KG5vZGVEZWYuc2hvcnRjdXRzLm1hcCgoeyB0byB9KSA9PiB0bykpO1xuICAgICAgICB3aGlsZSAobm9kZURlZi5zaG9ydGN1dHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgeyB0byB9ID0gbm9kZURlZi5zaG9ydGN1dHMuc2hpZnQoKTtcbiAgICAgICAgICAgIGNvbnN0IHRvRGVmID0gaW5wdXQubm9kZXNbdG9dO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbc2VnbWVudCwgdHJhbnNpdGlvbnNdIG9mIE9iamVjdC5lbnRyaWVzKHRvRGVmLnN0YXRpY3MpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RvcmUgPSAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGVEZWYuc3RhdGljcywgc2VnbWVudClcbiAgICAgICAgICAgICAgICAgICAgPyBub2RlRGVmLnN0YXRpY3Nbc2VnbWVudF0gPSBbXVxuICAgICAgICAgICAgICAgICAgICA6IG5vZGVEZWYuc3RhdGljc1tzZWdtZW50XTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHRyYW5zaXRpb24gb2YgdHJhbnNpdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdG9yZS5zb21lKCh7IHRvIH0pID0+IHRyYW5zaXRpb24udG8gPT09IHRvKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUucHVzaCh0cmFuc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgW3Rlc3QsIHRyYW5zaXRpb25dIG9mIHRvRGVmLmR5bmFtaWNzKVxuICAgICAgICAgICAgICAgIGlmICghbm9kZURlZi5keW5hbWljcy5zb21lKChbb3RoZXJUZXN0LCB7IHRvIH1dKSA9PiB0ZXN0ID09PSBvdGhlclRlc3QgJiYgdHJhbnNpdGlvbi50byA9PT0gdG8pKVxuICAgICAgICAgICAgICAgICAgICBub2RlRGVmLmR5bmFtaWNzLnB1c2goW3Rlc3QsIHRyYW5zaXRpb25dKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdHJhbnNpdGlvbiBvZiB0b0RlZi5zaG9ydGN1dHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNob3J0Y3V0cy5oYXModHJhbnNpdGlvbi50bykpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZURlZi5zaG9ydGN1dHMucHVzaCh0cmFuc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgc2hvcnRjdXRzLmFkZCh0cmFuc2l0aW9uLnRvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHByb2Nlc3MoTk9ERV9JTklUSUFMKTtcbn1cbmZ1bmN0aW9uIGRlYnVnTWFjaGluZShtYWNoaW5lLCB7IHByZWZpeCA9IGBgIH0gPSB7fSkge1xuICAgIC8vIERvbid0IGl0ZXJhdGUgdW5sZXNzIGl0J3MgbmVlZGVkXG4gICAgaWYgKERFQlVHKSB7XG4gICAgICAgIGRlYnVnKGAke3ByZWZpeH1Ob2RlcyBhcmU6YCk7XG4gICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgbWFjaGluZS5ub2Rlcy5sZW5ndGg7ICsrdCkge1xuICAgICAgICAgICAgZGVidWcoYCR7cHJlZml4fSAgJHt0fTogJHtKU09OLnN0cmluZ2lmeShtYWNoaW5lLm5vZGVzW3RdKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHJ1bk1hY2hpbmVJbnRlcm5hbChtYWNoaW5lLCBpbnB1dCwgcGFydGlhbCA9IGZhbHNlKSB7XG4gICAgZGVidWcoYFJ1bm5pbmcgYSB2bSBvbiAke0pTT04uc3RyaW5naWZ5KGlucHV0KX1gKTtcbiAgICBsZXQgYnJhbmNoZXMgPSBbeyBub2RlOiBOT0RFX0lOSVRJQUwsIHN0YXRlOiB7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlVXNhZ2U6IG51bGwsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWRPcHRpb25zOiBbXSxcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgICAgaWdub3JlT3B0aW9uczogZmFsc2UsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgICAgICAgcGF0aDogW10sXG4gICAgICAgICAgICAgICAgcG9zaXRpb25hbHM6IFtdLFxuICAgICAgICAgICAgICAgIHJlbWFpbmRlcjogbnVsbCxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEluZGV4OiBudWxsLFxuICAgICAgICAgICAgfSB9XTtcbiAgICBkZWJ1Z01hY2hpbmUobWFjaGluZSwgeyBwcmVmaXg6IGAgIGAgfSk7XG4gICAgY29uc3QgdG9rZW5zID0gW1NUQVJUX09GX0lOUFVULCAuLi5pbnB1dF07XG4gICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0b2tlbnMubGVuZ3RoOyArK3QpIHtcbiAgICAgICAgY29uc3Qgc2VnbWVudCA9IHRva2Vuc1t0XTtcbiAgICAgICAgZGVidWcoYCAgUHJvY2Vzc2luZyAke0pTT04uc3RyaW5naWZ5KHNlZ21lbnQpfWApO1xuICAgICAgICBjb25zdCBuZXh0QnJhbmNoZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB7IG5vZGUsIHN0YXRlIH0gb2YgYnJhbmNoZXMpIHtcbiAgICAgICAgICAgIGRlYnVnKGAgICAgQ3VycmVudCBub2RlIGlzICR7bm9kZX1gKTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVEZWYgPSBtYWNoaW5lLm5vZGVzW25vZGVdO1xuICAgICAgICAgICAgaWYgKG5vZGUgPT09IE5PREVfRVJST1JFRCkge1xuICAgICAgICAgICAgICAgIG5leHRCcmFuY2hlcy5wdXNoKHsgbm9kZSwgc3RhdGUgfSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmFzc2VydChub2RlRGVmLnNob3J0Y3V0cy5sZW5ndGggPT09IDAsIGBTaG9ydGN1dHMgc2hvdWxkIGhhdmUgYmVlbiBlbGltaW5hdGVkIGJ5IG5vd2ApO1xuICAgICAgICAgICAgY29uc3QgaGFzRXhhY3RNYXRjaCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlRGVmLnN0YXRpY3MsIHNlZ21lbnQpO1xuICAgICAgICAgICAgaWYgKCFwYXJ0aWFsIHx8IHQgPCB0b2tlbnMubGVuZ3RoIC0gMSB8fCBoYXNFeGFjdE1hdGNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0V4YWN0TWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNpdGlvbnMgPSBub2RlRGVmLnN0YXRpY3Nbc2VnbWVudF07XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgeyB0bywgcmVkdWNlciB9IG9mIHRyYW5zaXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0QnJhbmNoZXMucHVzaCh7IG5vZGU6IHRvLCBzdGF0ZTogdHlwZW9mIHJlZHVjZXIgIT09IGB1bmRlZmluZWRgID8gZXhlY3V0ZShyZWR1Y2VycywgcmVkdWNlciwgc3RhdGUsIHNlZ21lbnQpIDogc3RhdGUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhgICAgICAgU3RhdGljIHRyYW5zaXRpb24gdG8gJHt0b30gZm91bmRgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoYCAgICAgIE5vIHN0YXRpYyB0cmFuc2l0aW9uIGZvdW5kYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGhhc01hdGNoZXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBPYmplY3Qua2V5cyhub2RlRGVmLnN0YXRpY3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlLnN0YXJ0c1dpdGgoc2VnbWVudCkpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQgPT09IGNhbmRpZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB7IHRvLCByZWR1Y2VyIH0gb2Ygbm9kZURlZi5zdGF0aWNzW2NhbmRpZGF0ZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0QnJhbmNoZXMucHVzaCh7IG5vZGU6IHRvLCBzdGF0ZTogdHlwZW9mIHJlZHVjZXIgIT09IGB1bmRlZmluZWRgID8gZXhlY3V0ZShyZWR1Y2VycywgcmVkdWNlciwgc3RhdGUsIHNlZ21lbnQpIDogc3RhdGUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoYCAgICAgIFN0YXRpYyB0cmFuc2l0aW9uIHRvICR7dG99IGZvdW5kYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHsgdG8gfSBvZiBub2RlRGVmLnN0YXRpY3NbY2FuZGlkYXRlXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRCcmFuY2hlcy5wdXNoKHsgbm9kZTogdG8sIHN0YXRlOiB7IC4uLnN0YXRlLCByZW1haW5kZXI6IGNhbmRpZGF0ZS5zbGljZShzZWdtZW50Lmxlbmd0aCkgfSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhgICAgICAgU3RhdGljIHRyYW5zaXRpb24gdG8gJHt0b30gZm91bmQgKHBhcnRpYWwgbWF0Y2gpYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaGFzTWF0Y2hlcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghaGFzTWF0Y2hlcykge1xuICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhgICAgICAgTm8gcGFydGlhbCBzdGF0aWMgdHJhbnNpdGlvbiBmb3VuZGApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWdtZW50ICE9PSBFTkRfT0ZfSU5QVVQpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFt0ZXN0LCB7IHRvLCByZWR1Y2VyIH1dIG9mIG5vZGVEZWYuZHluYW1pY3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4ZWN1dGUodGVzdHMsIHRlc3QsIHN0YXRlLCBzZWdtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEJyYW5jaGVzLnB1c2goeyBub2RlOiB0bywgc3RhdGU6IHR5cGVvZiByZWR1Y2VyICE9PSBgdW5kZWZpbmVkYCA/IGV4ZWN1dGUocmVkdWNlcnMsIHJlZHVjZXIsIHN0YXRlLCBzZWdtZW50KSA6IHN0YXRlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoYCAgICAgIER5bmFtaWMgdHJhbnNpdGlvbiB0byAke3RvfSBmb3VuZCAodmlhICR7dGVzdH0pYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5leHRCcmFuY2hlcy5sZW5ndGggPT09IDAgJiYgc2VnbWVudCA9PT0gRU5EX09GX0lOUFVUICYmIGlucHV0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IE5PREVfSU5JVElBTCxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6IGJhc2ljSGVscFN0YXRlLFxuICAgICAgICAgICAgICAgIH1dO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXh0QnJhbmNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVW5rbm93blN5bnRheEVycm9yKGlucHV0LCBicmFuY2hlcy5maWx0ZXIoKHsgbm9kZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUgIT09IE5PREVfRVJST1JFRDtcbiAgICAgICAgICAgIH0pLm1hcCgoeyBzdGF0ZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdXNhZ2U6IHN0YXRlLmNhbmRpZGF0ZVVzYWdlLCByZWFzb246IG51bGwgfTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV4dEJyYW5jaGVzLmV2ZXJ5KCh7IG5vZGUgfSkgPT4gbm9kZSA9PT0gTk9ERV9FUlJPUkVEKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFVua25vd25TeW50YXhFcnJvcihpbnB1dCwgbmV4dEJyYW5jaGVzLm1hcCgoeyBzdGF0ZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdXNhZ2U6IHN0YXRlLmNhbmRpZGF0ZVVzYWdlLCByZWFzb246IHN0YXRlLmVycm9yTWVzc2FnZSB9O1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIGJyYW5jaGVzID0gdHJpbVNtYWxsZXJCcmFuY2hlcyhuZXh0QnJhbmNoZXMpO1xuICAgIH1cbiAgICBpZiAoYnJhbmNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBkZWJ1ZyhgICBSZXN1bHRzOmApO1xuICAgICAgICBmb3IgKGNvbnN0IGJyYW5jaCBvZiBicmFuY2hlcykge1xuICAgICAgICAgICAgZGVidWcoYCAgICAtICR7YnJhbmNoLm5vZGV9IC0+ICR7SlNPTi5zdHJpbmdpZnkoYnJhbmNoLnN0YXRlKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZGVidWcoYCAgTm8gcmVzdWx0c2ApO1xuICAgIH1cbiAgICByZXR1cm4gYnJhbmNoZXM7XG59XG5mdW5jdGlvbiBjaGVja0lmTm9kZUlzRmluaXNoZWQobm9kZSwgc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUuc2VsZWN0ZWRJbmRleCAhPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLnN0YXRpY3MsIEVORF9PRl9JTlBVVCkpXG4gICAgICAgIGZvciAoY29uc3QgeyB0byB9IG9mIG5vZGUuc3RhdGljc1tFTkRfT0ZfSU5QVVRdKVxuICAgICAgICAgICAgaWYgKHRvID09PSBOT0RFX1NVQ0NFU1MpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gc3VnZ2VzdE1hY2hpbmUobWFjaGluZSwgaW5wdXQsIHBhcnRpYWwpIHtcbiAgICAvLyBJZiB3ZSdyZSBhY2NlcHRpbmcgcGFydGlhbCBtYXRjaGVzLCB0aGVuIGV4YWN0IG1hdGNoZXMgbmVlZCB0byBiZVxuICAgIC8vIHByZWZpeGVkIHdpdGggYW4gZXh0cmEgc3BhY2UuXG4gICAgY29uc3QgcHJlZml4ID0gcGFydGlhbCAmJiBpbnB1dC5sZW5ndGggPiAwID8gW2BgXSA6IFtdO1xuICAgIGNvbnN0IGJyYW5jaGVzID0gcnVuTWFjaGluZUludGVybmFsKG1hY2hpbmUsIGlucHV0LCBwYXJ0aWFsKTtcbiAgICBjb25zdCBzdWdnZXN0aW9ucyA9IFtdO1xuICAgIGNvbnN0IHN1Z2dlc3Rpb25zSnNvbiA9IG5ldyBTZXQoKTtcbiAgICBjb25zdCB0cmF2ZXJzZVN1Z2dlc3Rpb24gPSAoc3VnZ2VzdGlvbiwgbm9kZSwgc2tpcEZpcnN0ID0gdHJ1ZSkgPT4ge1xuICAgICAgICBsZXQgbmV4dE5vZGVzID0gW25vZGVdO1xuICAgICAgICB3aGlsZSAobmV4dE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnROb2RlcyA9IG5leHROb2RlcztcbiAgICAgICAgICAgIG5leHROb2RlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIGN1cnJlbnROb2Rlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVEZWYgPSBtYWNoaW5lLm5vZGVzW25vZGVdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlRGVmLnN0YXRpY3MpO1xuICAgICAgICAgICAgICAgIC8vIFRoZSBmYWN0IHRoYXQgYGtleWAgaXMgdW51c2VkIGlzIGxpa2VseSBhIGJ1ZywgYnV0IG5vIG9uZSBoYXMgaW52ZXN0aWdhdGVkIGl0IHlldC5cbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBJbnZlc3RpZ2F0ZSBpdC5cbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobm9kZURlZi5zdGF0aWNzKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWdtZW50ID0ga2V5c1swXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB7IHRvLCByZWR1Y2VyIH0gb2Ygbm9kZURlZi5zdGF0aWNzW3NlZ21lbnRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVkdWNlciAhPT0gYHB1c2hQYXRoYClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2tpcEZpcnN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHVzaChzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2Rlcy5wdXNoKHRvKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNraXBGaXJzdCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShzdWdnZXN0aW9uKTtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb25zSnNvbi5oYXMoanNvbikpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHN1Z2dlc3Rpb25zLnB1c2goc3VnZ2VzdGlvbik7XG4gICAgICAgIHN1Z2dlc3Rpb25zSnNvbi5hZGQoanNvbik7XG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IHsgbm9kZSwgc3RhdGUgfSBvZiBicmFuY2hlcykge1xuICAgICAgICBpZiAoc3RhdGUucmVtYWluZGVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0cmF2ZXJzZVN1Z2dlc3Rpb24oW3N0YXRlLnJlbWFpbmRlcl0sIG5vZGUpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm9kZURlZiA9IG1hY2hpbmUubm9kZXNbbm9kZV07XG4gICAgICAgIGNvbnN0IGlzRmluaXNoZWQgPSBjaGVja0lmTm9kZUlzRmluaXNoZWQobm9kZURlZiwgc3RhdGUpO1xuICAgICAgICBmb3IgKGNvbnN0IFtjYW5kaWRhdGUsIHRyYW5zaXRpb25zXSBvZiBPYmplY3QuZW50cmllcyhub2RlRGVmLnN0YXRpY3MpKVxuICAgICAgICAgICAgaWYgKChpc0ZpbmlzaGVkICYmIGNhbmRpZGF0ZSAhPT0gRU5EX09GX0lOUFVUKSB8fCAoIWNhbmRpZGF0ZS5zdGFydHNXaXRoKGAtYCkgJiYgdHJhbnNpdGlvbnMuc29tZSgoeyByZWR1Y2VyIH0pID0+IHJlZHVjZXIgPT09IGBwdXNoUGF0aGApKSlcbiAgICAgICAgICAgICAgICB0cmF2ZXJzZVN1Z2dlc3Rpb24oWy4uLnByZWZpeCwgY2FuZGlkYXRlXSwgbm9kZSk7XG4gICAgICAgIGlmICghaXNGaW5pc2hlZClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBmb3IgKGNvbnN0IFt0ZXN0LCB7IHRvIH1dIG9mIG5vZGVEZWYuZHluYW1pY3MpIHtcbiAgICAgICAgICAgIGlmICh0byA9PT0gTk9ERV9FUlJPUkVEKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgdG9rZW5zID0gc3VnZ2VzdCh0ZXN0LCBzdGF0ZSk7XG4gICAgICAgICAgICBpZiAodG9rZW5zID09PSBudWxsKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICAgICAgICAgICAgICB0cmF2ZXJzZVN1Z2dlc3Rpb24oWy4uLnByZWZpeCwgdG9rZW5dLCBub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gWy4uLnN1Z2dlc3Rpb25zXS5zb3J0KCk7XG59XG5mdW5jdGlvbiBydW5NYWNoaW5lKG1hY2hpbmUsIGlucHV0KSB7XG4gICAgY29uc3QgYnJhbmNoZXMgPSBydW5NYWNoaW5lSW50ZXJuYWwobWFjaGluZSwgWy4uLmlucHV0LCBFTkRfT0ZfSU5QVVRdKTtcbiAgICByZXR1cm4gc2VsZWN0QmVzdFN0YXRlKGlucHV0LCBicmFuY2hlcy5tYXAoKHsgc3RhdGUgfSkgPT4ge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfSkpO1xufVxuZnVuY3Rpb24gdHJpbVNtYWxsZXJCcmFuY2hlcyhicmFuY2hlcykge1xuICAgIGxldCBtYXhQYXRoU2l6ZSA9IDA7XG4gICAgZm9yIChjb25zdCB7IHN0YXRlIH0gb2YgYnJhbmNoZXMpXG4gICAgICAgIGlmIChzdGF0ZS5wYXRoLmxlbmd0aCA+IG1heFBhdGhTaXplKVxuICAgICAgICAgICAgbWF4UGF0aFNpemUgPSBzdGF0ZS5wYXRoLmxlbmd0aDtcbiAgICByZXR1cm4gYnJhbmNoZXMuZmlsdGVyKCh7IHN0YXRlIH0pID0+IHtcbiAgICAgICAgcmV0dXJuIHN0YXRlLnBhdGgubGVuZ3RoID09PSBtYXhQYXRoU2l6ZTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHNlbGVjdEJlc3RTdGF0ZShpbnB1dCwgc3RhdGVzKSB7XG4gICAgY29uc3QgdGVybWluYWxTdGF0ZXMgPSBzdGF0ZXMuZmlsdGVyKHN0YXRlID0+IHtcbiAgICAgICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkSW5kZXggIT09IG51bGw7XG4gICAgfSk7XG4gICAgaWYgKHRlcm1pbmFsU3RhdGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgY29uc3QgcmVxdWlyZWRPcHRpb25zU2V0U3RhdGVzID0gdGVybWluYWxTdGF0ZXMuZmlsdGVyKHN0YXRlID0+IHN0YXRlLnNlbGVjdGVkSW5kZXggPT09IEhFTFBfQ09NTUFORF9JTkRFWCB8fCBzdGF0ZS5yZXF1aXJlZE9wdGlvbnMuZXZlcnkobmFtZXMgPT4gbmFtZXMuc29tZShuYW1lID0+IHN0YXRlLm9wdGlvbnMuZmluZChvcHQgPT4gb3B0Lm5hbWUgPT09IG5hbWUpKSkpO1xuICAgIGlmIChyZXF1aXJlZE9wdGlvbnNTZXRTdGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBVbmtub3duU3ludGF4RXJyb3IoaW5wdXQsIHRlcm1pbmFsU3RhdGVzLm1hcChzdGF0ZSA9PiAoe1xuICAgICAgICAgICAgdXNhZ2U6IHN0YXRlLmNhbmRpZGF0ZVVzYWdlLFxuICAgICAgICAgICAgcmVhc29uOiBudWxsLFxuICAgICAgICB9KSkpO1xuICAgIH1cbiAgICBsZXQgbWF4UGF0aFNpemUgPSAwO1xuICAgIGZvciAoY29uc3Qgc3RhdGUgb2YgcmVxdWlyZWRPcHRpb25zU2V0U3RhdGVzKVxuICAgICAgICBpZiAoc3RhdGUucGF0aC5sZW5ndGggPiBtYXhQYXRoU2l6ZSlcbiAgICAgICAgICAgIG1heFBhdGhTaXplID0gc3RhdGUucGF0aC5sZW5ndGg7XG4gICAgY29uc3QgYmVzdFBhdGhCcmFuY2hlcyA9IHJlcXVpcmVkT3B0aW9uc1NldFN0YXRlcy5maWx0ZXIoc3RhdGUgPT4ge1xuICAgICAgICByZXR1cm4gc3RhdGUucGF0aC5sZW5ndGggPT09IG1heFBhdGhTaXplO1xuICAgIH0pO1xuICAgIGNvbnN0IGdldFBvc2l0aW9uYWxDb3VudCA9IChzdGF0ZSkgPT4gc3RhdGUucG9zaXRpb25hbHMuZmlsdGVyKCh7IGV4dHJhIH0pID0+IHtcbiAgICAgICAgcmV0dXJuICFleHRyYTtcbiAgICB9KS5sZW5ndGggKyBzdGF0ZS5vcHRpb25zLmxlbmd0aDtcbiAgICBjb25zdCBzdGF0ZXNXaXRoUG9zaXRpb25hbENvdW50ID0gYmVzdFBhdGhCcmFuY2hlcy5tYXAoc3RhdGUgPT4ge1xuICAgICAgICByZXR1cm4geyBzdGF0ZSwgcG9zaXRpb25hbENvdW50OiBnZXRQb3NpdGlvbmFsQ291bnQoc3RhdGUpIH07XG4gICAgfSk7XG4gICAgbGV0IG1heFBvc2l0aW9uYWxDb3VudCA9IDA7XG4gICAgZm9yIChjb25zdCB7IHBvc2l0aW9uYWxDb3VudCB9IG9mIHN0YXRlc1dpdGhQb3NpdGlvbmFsQ291bnQpXG4gICAgICAgIGlmIChwb3NpdGlvbmFsQ291bnQgPiBtYXhQb3NpdGlvbmFsQ291bnQpXG4gICAgICAgICAgICBtYXhQb3NpdGlvbmFsQ291bnQgPSBwb3NpdGlvbmFsQ291bnQ7XG4gICAgY29uc3QgYmVzdFBvc2l0aW9uYWxTdGF0ZXMgPSBzdGF0ZXNXaXRoUG9zaXRpb25hbENvdW50LmZpbHRlcigoeyBwb3NpdGlvbmFsQ291bnQgfSkgPT4ge1xuICAgICAgICByZXR1cm4gcG9zaXRpb25hbENvdW50ID09PSBtYXhQb3NpdGlvbmFsQ291bnQ7XG4gICAgfSkubWFwKCh7IHN0YXRlIH0pID0+IHtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH0pO1xuICAgIGNvbnN0IGZpeGVkU3RhdGVzID0gYWdncmVnYXRlSGVscFN0YXRlcyhiZXN0UG9zaXRpb25hbFN0YXRlcyk7XG4gICAgaWYgKGZpeGVkU3RhdGVzLmxlbmd0aCA+IDEpXG4gICAgICAgIHRocm93IG5ldyBBbWJpZ3VvdXNTeW50YXhFcnJvcihpbnB1dCwgZml4ZWRTdGF0ZXMubWFwKHN0YXRlID0+IHN0YXRlLmNhbmRpZGF0ZVVzYWdlKSk7XG4gICAgcmV0dXJuIGZpeGVkU3RhdGVzWzBdO1xufVxuZnVuY3Rpb24gYWdncmVnYXRlSGVscFN0YXRlcyhzdGF0ZXMpIHtcbiAgICBjb25zdCBub3RIZWxwcyA9IFtdO1xuICAgIGNvbnN0IGhlbHBzID0gW107XG4gICAgZm9yIChjb25zdCBzdGF0ZSBvZiBzdGF0ZXMpIHtcbiAgICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkSW5kZXggPT09IEhFTFBfQ09NTUFORF9JTkRFWCkge1xuICAgICAgICAgICAgaGVscHMucHVzaChzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBub3RIZWxwcy5wdXNoKHN0YXRlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGVscHMubGVuZ3RoID4gMCkge1xuICAgICAgICBub3RIZWxwcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLmJhc2ljSGVscFN0YXRlLFxuICAgICAgICAgICAgcGF0aDogZmluZENvbW1vblByZWZpeCguLi5oZWxwcy5tYXAoc3RhdGUgPT4gc3RhdGUucGF0aCkpLFxuICAgICAgICAgICAgb3B0aW9uczogaGVscHMucmVkdWNlKChvcHRpb25zLCBzdGF0ZSkgPT4gb3B0aW9ucy5jb25jYXQoc3RhdGUub3B0aW9ucyksIFtdKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBub3RIZWxwcztcbn1cbmZ1bmN0aW9uIGZpbmRDb21tb25QcmVmaXgoZmlyc3RQYXRoLCBzZWNvbmRQYXRoLCAuLi5yZXN0KSB7XG4gICAgaWYgKHNlY29uZFBhdGggPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZmlyc3RQYXRoKTtcbiAgICByZXR1cm4gZmluZENvbW1vblByZWZpeChmaXJzdFBhdGguZmlsdGVyKChzZWdtZW50LCBpKSA9PiBzZWdtZW50ID09PSBzZWNvbmRQYXRoW2ldKSwgLi4ucmVzdCk7XG59XG5mdW5jdGlvbiBtYWtlTm9kZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBkeW5hbWljczogW10sXG4gICAgICAgIHNob3J0Y3V0czogW10sXG4gICAgICAgIHN0YXRpY3M6IHt9LFxuICAgIH07XG59XG5mdW5jdGlvbiBpc1Rlcm1pbmFsTm9kZShub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUgPT09IE5PREVfU1VDQ0VTUyB8fCBub2RlID09PSBOT0RFX0VSUk9SRUQ7XG59XG5mdW5jdGlvbiBjbG9uZVRyYW5zaXRpb24oaW5wdXQsIG9mZnNldCA9IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0bzogIWlzVGVybWluYWxOb2RlKGlucHV0LnRvKSA/IGlucHV0LnRvID4gMiA/IGlucHV0LnRvICsgb2Zmc2V0IC0gMiA6IGlucHV0LnRvICsgb2Zmc2V0IDogaW5wdXQudG8sXG4gICAgICAgIHJlZHVjZXI6IGlucHV0LnJlZHVjZXIsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNsb25lTm9kZShpbnB1dCwgb2Zmc2V0ID0gMCkge1xuICAgIGNvbnN0IG91dHB1dCA9IG1ha2VOb2RlKCk7XG4gICAgZm9yIChjb25zdCBbdGVzdCwgdHJhbnNpdGlvbl0gb2YgaW5wdXQuZHluYW1pY3MpXG4gICAgICAgIG91dHB1dC5keW5hbWljcy5wdXNoKFt0ZXN0LCBjbG9uZVRyYW5zaXRpb24odHJhbnNpdGlvbiwgb2Zmc2V0KV0pO1xuICAgIGZvciAoY29uc3QgdHJhbnNpdGlvbiBvZiBpbnB1dC5zaG9ydGN1dHMpXG4gICAgICAgIG91dHB1dC5zaG9ydGN1dHMucHVzaChjbG9uZVRyYW5zaXRpb24odHJhbnNpdGlvbiwgb2Zmc2V0KSk7XG4gICAgZm9yIChjb25zdCBbc2VnbWVudCwgdHJhbnNpdGlvbnNdIG9mIE9iamVjdC5lbnRyaWVzKGlucHV0LnN0YXRpY3MpKVxuICAgICAgICBvdXRwdXQuc3RhdGljc1tzZWdtZW50XSA9IHRyYW5zaXRpb25zLm1hcCh0cmFuc2l0aW9uID0+IGNsb25lVHJhbnNpdGlvbih0cmFuc2l0aW9uLCBvZmZzZXQpKTtcbiAgICByZXR1cm4gb3V0cHV0O1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJEeW5hbWljKG1hY2hpbmUsIGZyb20sIHRlc3QsIHRvLCByZWR1Y2VyKSB7XG4gICAgbWFjaGluZS5ub2Rlc1tmcm9tXS5keW5hbWljcy5wdXNoKFtcbiAgICAgICAgdGVzdCxcbiAgICAgICAgeyB0bywgcmVkdWNlcjogcmVkdWNlciB9LFxuICAgIF0pO1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJTaG9ydGN1dChtYWNoaW5lLCBmcm9tLCB0bywgcmVkdWNlcikge1xuICAgIG1hY2hpbmUubm9kZXNbZnJvbV0uc2hvcnRjdXRzLnB1c2goeyB0bywgcmVkdWNlcjogcmVkdWNlciB9KTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyU3RhdGljKG1hY2hpbmUsIGZyb20sIHRlc3QsIHRvLCByZWR1Y2VyKSB7XG4gICAgY29uc3Qgc3RvcmUgPSAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hY2hpbmUubm9kZXNbZnJvbV0uc3RhdGljcywgdGVzdClcbiAgICAgICAgPyBtYWNoaW5lLm5vZGVzW2Zyb21dLnN0YXRpY3NbdGVzdF0gPSBbXVxuICAgICAgICA6IG1hY2hpbmUubm9kZXNbZnJvbV0uc3RhdGljc1t0ZXN0XTtcbiAgICBzdG9yZS5wdXNoKHsgdG8sIHJlZHVjZXI6IHJlZHVjZXIgfSk7XG59XG5mdW5jdGlvbiBleGVjdXRlKHN0b3JlLCBjYWxsYmFjaywgc3RhdGUsIHNlZ21lbnQpIHtcbiAgICAvLyBUeXBlU2NyaXB0J3MgY29udHJvbCBmbG93IGNhbid0IHByb3Blcmx5IG5hcnJvd1xuICAgIC8vIGdlbmVyaWMgY29uZGl0aW9uYWxzIGZvciBzb21lIG15c3RlcmlvdXMgcmVhc29uXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2FsbGJhY2spKSB7XG4gICAgICAgIGNvbnN0IFtuYW1lLCAuLi5hcmdzXSA9IGNhbGxiYWNrO1xuICAgICAgICByZXR1cm4gc3RvcmVbbmFtZV0oc3RhdGUsIHNlZ21lbnQsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHN0b3JlW2NhbGxiYWNrXShzdGF0ZSwgc2VnbWVudCk7XG4gICAgfVxufVxuZnVuY3Rpb24gc3VnZ2VzdChjYWxsYmFjaywgc3RhdGUpIHtcbiAgICBjb25zdCBmbiA9IEFycmF5LmlzQXJyYXkoY2FsbGJhY2spXG4gICAgICAgID8gdGVzdHNbY2FsbGJhY2tbMF1dXG4gICAgICAgIDogdGVzdHNbY2FsbGJhY2tdO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAodHlwZW9mIGZuLnN1Z2dlc3QgPT09IGB1bmRlZmluZWRgKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBhcmdzID0gQXJyYXkuaXNBcnJheShjYWxsYmFjaylcbiAgICAgICAgPyBjYWxsYmFjay5zbGljZSgxKVxuICAgICAgICA6IFtdO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gZm4uc3VnZ2VzdChzdGF0ZSwgLi4uYXJncyk7XG59XG5jb25zdCB0ZXN0cyA9IHtcbiAgICBhbHdheXM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBpc09wdGlvbkxpa2U6IChzdGF0ZSwgc2VnbWVudCkgPT4ge1xuICAgICAgICByZXR1cm4gIXN0YXRlLmlnbm9yZU9wdGlvbnMgJiYgKHNlZ21lbnQgIT09IGAtYCAmJiBzZWdtZW50LnN0YXJ0c1dpdGgoYC1gKSk7XG4gICAgfSxcbiAgICBpc05vdE9wdGlvbkxpa2U6IChzdGF0ZSwgc2VnbWVudCkgPT4ge1xuICAgICAgICByZXR1cm4gc3RhdGUuaWdub3JlT3B0aW9ucyB8fCBzZWdtZW50ID09PSBgLWAgfHwgIXNlZ21lbnQuc3RhcnRzV2l0aChgLWApO1xuICAgIH0sXG4gICAgaXNPcHRpb246IChzdGF0ZSwgc2VnbWVudCwgbmFtZSwgaGlkZGVuKSA9PiB7XG4gICAgICAgIHJldHVybiAhc3RhdGUuaWdub3JlT3B0aW9ucyAmJiBzZWdtZW50ID09PSBuYW1lO1xuICAgIH0sXG4gICAgaXNCYXRjaE9wdGlvbjogKHN0YXRlLCBzZWdtZW50LCBuYW1lcykgPT4ge1xuICAgICAgICByZXR1cm4gIXN0YXRlLmlnbm9yZU9wdGlvbnMgJiYgQkFUQ0hfUkVHRVgudGVzdChzZWdtZW50KSAmJiBbLi4uc2VnbWVudC5zbGljZSgxKV0uZXZlcnkobmFtZSA9PiBuYW1lcy5pbmNsdWRlcyhgLSR7bmFtZX1gKSk7XG4gICAgfSxcbiAgICBpc0JvdW5kT3B0aW9uOiAoc3RhdGUsIHNlZ21lbnQsIG5hbWVzLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdGlvblBhcnNpbmcgPSBzZWdtZW50Lm1hdGNoKEJJTkRJTkdfUkVHRVgpO1xuICAgICAgICByZXR1cm4gIXN0YXRlLmlnbm9yZU9wdGlvbnMgJiYgISFvcHRpb25QYXJzaW5nICYmIE9QVElPTl9SRUdFWC50ZXN0KG9wdGlvblBhcnNpbmdbMV0pICYmIG5hbWVzLmluY2x1ZGVzKG9wdGlvblBhcnNpbmdbMV0pXG4gICAgICAgICAgICAvLyBEaXNhbGxvdyBib3VuZCBvcHRpb25zIHdpdGggbm8gYXJndW1lbnRzIChpLmUuIGJvb2xlYW5zKVxuICAgICAgICAgICAgJiYgb3B0aW9ucy5maWx0ZXIob3B0ID0+IG9wdC5uYW1lcy5pbmNsdWRlcyhvcHRpb25QYXJzaW5nWzFdKSkuZXZlcnkob3B0ID0+IG9wdC5hbGxvd0JpbmRpbmcpO1xuICAgIH0sXG4gICAgaXNOZWdhdGVkT3B0aW9uOiAoc3RhdGUsIHNlZ21lbnQsIG5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuICFzdGF0ZS5pZ25vcmVPcHRpb25zICYmIHNlZ21lbnQgPT09IGAtLW5vLSR7bmFtZS5zbGljZSgyKX1gO1xuICAgIH0sXG4gICAgaXNIZWxwOiAoc3RhdGUsIHNlZ21lbnQpID0+IHtcbiAgICAgICAgcmV0dXJuICFzdGF0ZS5pZ25vcmVPcHRpb25zICYmIEhFTFBfUkVHRVgudGVzdChzZWdtZW50KTtcbiAgICB9LFxuICAgIGlzVW5zdXBwb3J0ZWRPcHRpb246IChzdGF0ZSwgc2VnbWVudCwgbmFtZXMpID0+IHtcbiAgICAgICAgcmV0dXJuICFzdGF0ZS5pZ25vcmVPcHRpb25zICYmIHNlZ21lbnQuc3RhcnRzV2l0aChgLWApICYmIE9QVElPTl9SRUdFWC50ZXN0KHNlZ21lbnQpICYmICFuYW1lcy5pbmNsdWRlcyhzZWdtZW50KTtcbiAgICB9LFxuICAgIGlzSW52YWxpZE9wdGlvbjogKHN0YXRlLCBzZWdtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiAhc3RhdGUuaWdub3JlT3B0aW9ucyAmJiBzZWdtZW50LnN0YXJ0c1dpdGgoYC1gKSAmJiAhT1BUSU9OX1JFR0VYLnRlc3Qoc2VnbWVudCk7XG4gICAgfSxcbn07XG4vLyBAdHMtaWdub3JlXG50ZXN0cy5pc09wdGlvbi5zdWdnZXN0ID0gKHN0YXRlLCBuYW1lLCBoaWRkZW4gPSB0cnVlKSA9PiB7XG4gICAgcmV0dXJuICFoaWRkZW4gPyBbbmFtZV0gOiBudWxsO1xufTtcbmNvbnN0IHJlZHVjZXJzID0ge1xuICAgIHNldENhbmRpZGF0ZVN0YXRlOiAoc3RhdGUsIHNlZ21lbnQsIGNhbmRpZGF0ZVN0YXRlKSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLnN0YXRlLCAuLi5jYW5kaWRhdGVTdGF0ZSB9O1xuICAgIH0sXG4gICAgc2V0U2VsZWN0ZWRJbmRleDogKHN0YXRlLCBzZWdtZW50LCBpbmRleCkgPT4ge1xuICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSwgc2VsZWN0ZWRJbmRleDogaW5kZXggfTtcbiAgICB9LFxuICAgIHB1c2hCYXRjaDogKHN0YXRlLCBzZWdtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBvcHRpb25zOiBzdGF0ZS5vcHRpb25zLmNvbmNhdChbLi4uc2VnbWVudC5zbGljZSgxKV0ubWFwKG5hbWUgPT4gKHsgbmFtZTogYC0ke25hbWV9YCwgdmFsdWU6IHRydWUgfSkpKSB9O1xuICAgIH0sXG4gICAgcHVzaEJvdW5kOiAoc3RhdGUsIHNlZ21lbnQpID0+IHtcbiAgICAgICAgY29uc3QgWywgbmFtZSwgdmFsdWVdID0gc2VnbWVudC5tYXRjaChCSU5ESU5HX1JFR0VYKTtcbiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIG9wdGlvbnM6IHN0YXRlLm9wdGlvbnMuY29uY2F0KHsgbmFtZSwgdmFsdWUgfSkgfTtcbiAgICB9LFxuICAgIHB1c2hQYXRoOiAoc3RhdGUsIHNlZ21lbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHBhdGg6IHN0YXRlLnBhdGguY29uY2F0KHNlZ21lbnQpIH07XG4gICAgfSxcbiAgICBwdXNoUG9zaXRpb25hbDogKHN0YXRlLCBzZWdtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBwb3NpdGlvbmFsczogc3RhdGUucG9zaXRpb25hbHMuY29uY2F0KHsgdmFsdWU6IHNlZ21lbnQsIGV4dHJhOiBmYWxzZSB9KSB9O1xuICAgIH0sXG4gICAgcHVzaEV4dHJhOiAoc3RhdGUsIHNlZ21lbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHBvc2l0aW9uYWxzOiBzdGF0ZS5wb3NpdGlvbmFscy5jb25jYXQoeyB2YWx1ZTogc2VnbWVudCwgZXh0cmE6IHRydWUgfSkgfTtcbiAgICB9LFxuICAgIHB1c2hFeHRyYU5vTGltaXRzOiAoc3RhdGUsIHNlZ21lbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHBvc2l0aW9uYWxzOiBzdGF0ZS5wb3NpdGlvbmFscy5jb25jYXQoeyB2YWx1ZTogc2VnbWVudCwgZXh0cmE6IE5vTGltaXRzIH0pIH07XG4gICAgfSxcbiAgICBwdXNoVHJ1ZTogKHN0YXRlLCBzZWdtZW50LCBuYW1lID0gc2VnbWVudCkgPT4ge1xuICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSwgb3B0aW9uczogc3RhdGUub3B0aW9ucy5jb25jYXQoeyBuYW1lOiBzZWdtZW50LCB2YWx1ZTogdHJ1ZSB9KSB9O1xuICAgIH0sXG4gICAgcHVzaEZhbHNlOiAoc3RhdGUsIHNlZ21lbnQsIG5hbWUgPSBzZWdtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBvcHRpb25zOiBzdGF0ZS5vcHRpb25zLmNvbmNhdCh7IG5hbWUsIHZhbHVlOiBmYWxzZSB9KSB9O1xuICAgIH0sXG4gICAgcHVzaFVuZGVmaW5lZDogKHN0YXRlLCBzZWdtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBvcHRpb25zOiBzdGF0ZS5vcHRpb25zLmNvbmNhdCh7IG5hbWU6IHNlZ21lbnQsIHZhbHVlOiB1bmRlZmluZWQgfSkgfTtcbiAgICB9LFxuICAgIHB1c2hTdHJpbmdWYWx1ZTogKHN0YXRlLCBzZWdtZW50KSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgY29weSA9IHsgLi4uc3RhdGUsIG9wdGlvbnM6IFsuLi5zdGF0ZS5vcHRpb25zXSB9O1xuICAgICAgICBjb25zdCBsYXN0T3B0aW9uID0gc3RhdGUub3B0aW9uc1tzdGF0ZS5vcHRpb25zLmxlbmd0aCAtIDFdO1xuICAgICAgICBsYXN0T3B0aW9uLnZhbHVlID0gKChfYSA9IGxhc3RPcHRpb24udmFsdWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdKS5jb25jYXQoW3NlZ21lbnRdKTtcbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfSxcbiAgICBzZXRTdHJpbmdWYWx1ZTogKHN0YXRlLCBzZWdtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvcHkgPSB7IC4uLnN0YXRlLCBvcHRpb25zOiBbLi4uc3RhdGUub3B0aW9uc10gfTtcbiAgICAgICAgY29uc3QgbGFzdE9wdGlvbiA9IHN0YXRlLm9wdGlvbnNbc3RhdGUub3B0aW9ucy5sZW5ndGggLSAxXTtcbiAgICAgICAgbGFzdE9wdGlvbi52YWx1ZSA9IHNlZ21lbnQ7XG4gICAgICAgIHJldHVybiBjb3B5O1xuICAgIH0sXG4gICAgaW5oaWJhdGVPcHRpb25zOiAoc3RhdGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGlnbm9yZU9wdGlvbnM6IHRydWUgfTtcbiAgICB9LFxuICAgIHVzZUhlbHA6IChzdGF0ZSwgc2VnbWVudCwgY29tbWFuZCkgPT4ge1xuICAgICAgICBjb25zdCBbLCAvKiBuYW1lICovICwgaW5kZXhdID0gc2VnbWVudC5tYXRjaChIRUxQX1JFR0VYKTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbmRleCAhPT0gYHVuZGVmaW5lZGApIHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBvcHRpb25zOiBbeyBuYW1lOiBgLWNgLCB2YWx1ZTogU3RyaW5nKGNvbW1hbmQpIH0sIHsgbmFtZTogYC1pYCwgdmFsdWU6IGluZGV4IH1dIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSwgb3B0aW9uczogW3sgbmFtZTogYC1jYCwgdmFsdWU6IFN0cmluZyhjb21tYW5kKSB9XSB9O1xuICAgICAgICB9XG4gICAgfSxcbiAgICBzZXRFcnJvcjogKHN0YXRlLCBzZWdtZW50LCBlcnJvck1lc3NhZ2UpID0+IHtcbiAgICAgICAgaWYgKHNlZ21lbnQgPT09IEVORF9PRl9JTlBVVCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGVycm9yTWVzc2FnZTogYCR7ZXJyb3JNZXNzYWdlfS5gIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSwgZXJyb3JNZXNzYWdlOiBgJHtlcnJvck1lc3NhZ2V9IChcIiR7c2VnbWVudH1cIikuYCB9O1xuICAgICAgICB9XG4gICAgfSxcbiAgICBzZXRPcHRpb25Bcml0eUVycm9yOiAoc3RhdGUsIHNlZ21lbnQpID0+IHtcbiAgICAgICAgY29uc3QgbGFzdE9wdGlvbiA9IHN0YXRlLm9wdGlvbnNbc3RhdGUub3B0aW9ucy5sZW5ndGggLSAxXTtcbiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGVycm9yTWVzc2FnZTogYE5vdCBlbm91Z2ggYXJndW1lbnRzIHRvIG9wdGlvbiAke2xhc3RPcHRpb24ubmFtZX0uYCB9O1xuICAgIH0sXG59O1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5jb25zdCBOb0xpbWl0cyA9IFN5bWJvbCgpO1xuY2xhc3MgQ29tbWFuZEJ1aWxkZXIge1xuICAgIGNvbnN0cnVjdG9yKGNsaUluZGV4LCBjbGlPcHRzKSB7XG4gICAgICAgIHRoaXMuYWxsT3B0aW9uTmFtZXMgPSBbXTtcbiAgICAgICAgdGhpcy5hcml0eSA9IHsgbGVhZGluZzogW10sIHRyYWlsaW5nOiBbXSwgZXh0cmE6IFtdLCBwcm94eTogZmFsc2UgfTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gW107XG4gICAgICAgIHRoaXMucGF0aHMgPSBbXTtcbiAgICAgICAgdGhpcy5jbGlJbmRleCA9IGNsaUluZGV4O1xuICAgICAgICB0aGlzLmNsaU9wdHMgPSBjbGlPcHRzO1xuICAgIH1cbiAgICBhZGRQYXRoKHBhdGgpIHtcbiAgICAgICAgdGhpcy5wYXRocy5wdXNoKHBhdGgpO1xuICAgIH1cbiAgICBzZXRBcml0eSh7IGxlYWRpbmcgPSB0aGlzLmFyaXR5LmxlYWRpbmcsIHRyYWlsaW5nID0gdGhpcy5hcml0eS50cmFpbGluZywgZXh0cmEgPSB0aGlzLmFyaXR5LmV4dHJhLCBwcm94eSA9IHRoaXMuYXJpdHkucHJveHkgfSkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuYXJpdHksIHsgbGVhZGluZywgdHJhaWxpbmcsIGV4dHJhLCBwcm94eSB9KTtcbiAgICB9XG4gICAgYWRkUG9zaXRpb25hbCh7IG5hbWUgPSBgYXJnYCwgcmVxdWlyZWQgPSB0cnVlIH0gPSB7fSkge1xuICAgICAgICBpZiAoIXJlcXVpcmVkICYmIHRoaXMuYXJpdHkuZXh0cmEgPT09IE5vTGltaXRzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcHRpb25hbCBwYXJhbWV0ZXJzIGNhbm5vdCBiZSBkZWNsYXJlZCB3aGVuIHVzaW5nIC5yZXN0KCkgb3IgLnByb3h5KClgKTtcbiAgICAgICAgaWYgKCFyZXF1aXJlZCAmJiB0aGlzLmFyaXR5LnRyYWlsaW5nLmxlbmd0aCA+IDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wdGlvbmFsIHBhcmFtZXRlcnMgY2Fubm90IGJlIGRlY2xhcmVkIGFmdGVyIHRoZSByZXF1aXJlZCB0cmFpbGluZyBwb3NpdGlvbmFsIGFyZ3VtZW50c2ApO1xuICAgICAgICBpZiAoIXJlcXVpcmVkICYmIHRoaXMuYXJpdHkuZXh0cmEgIT09IE5vTGltaXRzKSB7XG4gICAgICAgICAgICB0aGlzLmFyaXR5LmV4dHJhLnB1c2gobmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5hcml0eS5leHRyYSAhPT0gTm9MaW1pdHMgJiYgdGhpcy5hcml0eS5leHRyYS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuYXJpdHkubGVhZGluZy5wdXNoKG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hcml0eS50cmFpbGluZy5wdXNoKG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZFJlc3QoeyBuYW1lID0gYGFyZ2AsIHJlcXVpcmVkID0gMCB9ID0ge30pIHtcbiAgICAgICAgaWYgKHRoaXMuYXJpdHkuZXh0cmEgPT09IE5vTGltaXRzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbmZpbml0ZSBsaXN0cyBjYW5ub3QgYmUgZGVjbGFyZWQgbXVsdGlwbGUgdGltZXMgaW4gdGhlIHNhbWUgY29tbWFuZGApO1xuICAgICAgICBpZiAodGhpcy5hcml0eS50cmFpbGluZy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbmZpbml0ZSBsaXN0cyBjYW5ub3QgYmUgZGVjbGFyZWQgYWZ0ZXIgdGhlIHJlcXVpcmVkIHRyYWlsaW5nIHBvc2l0aW9uYWwgYXJndW1lbnRzYCk7XG4gICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgcmVxdWlyZWQ7ICsrdClcbiAgICAgICAgICAgIHRoaXMuYWRkUG9zaXRpb25hbCh7IG5hbWUgfSk7XG4gICAgICAgIHRoaXMuYXJpdHkuZXh0cmEgPSBOb0xpbWl0cztcbiAgICB9XG4gICAgYWRkUHJveHkoeyByZXF1aXJlZCA9IDAgfSA9IHt9KSB7XG4gICAgICAgIHRoaXMuYWRkUmVzdCh7IHJlcXVpcmVkIH0pO1xuICAgICAgICB0aGlzLmFyaXR5LnByb3h5ID0gdHJ1ZTtcbiAgICB9XG4gICAgYWRkT3B0aW9uKHsgbmFtZXMsIGRlc2NyaXB0aW9uLCBhcml0eSA9IDAsIGhpZGRlbiA9IGZhbHNlLCByZXF1aXJlZCA9IGZhbHNlLCBhbGxvd0JpbmRpbmcgPSB0cnVlIH0pIHtcbiAgICAgICAgaWYgKCFhbGxvd0JpbmRpbmcgJiYgYXJpdHkgPiAxKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgYXJpdHkgY2Fubm90IGJlIGhpZ2hlciB0aGFuIDEgd2hlbiB0aGUgb3B0aW9uIG9ubHkgc3VwcG9ydHMgdGhlIC0tYXJnPXZhbHVlIHN5bnRheGApO1xuICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYXJpdHkpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgYXJpdHkgbXVzdCBiZSBhbiBpbnRlZ2VyLCBnb3QgJHthcml0eX1gKTtcbiAgICAgICAgaWYgKGFyaXR5IDwgMClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGFyaXR5IG11c3QgYmUgcG9zaXRpdmUsIGdvdCAke2FyaXR5fWApO1xuICAgICAgICB0aGlzLmFsbE9wdGlvbk5hbWVzLnB1c2goLi4ubmFtZXMpO1xuICAgICAgICB0aGlzLm9wdGlvbnMucHVzaCh7IG5hbWVzLCBkZXNjcmlwdGlvbiwgYXJpdHksIGhpZGRlbiwgcmVxdWlyZWQsIGFsbG93QmluZGluZyB9KTtcbiAgICB9XG4gICAgc2V0Q29udGV4dChjb250ZXh0KSB7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgfVxuICAgIHVzYWdlKHsgZGV0YWlsZWQgPSB0cnVlLCBpbmxpbmVPcHRpb25zID0gdHJ1ZSB9ID0ge30pIHtcbiAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBbdGhpcy5jbGlPcHRzLmJpbmFyeU5hbWVdO1xuICAgICAgICBjb25zdCBkZXRhaWxlZE9wdGlvbkxpc3QgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMucGF0aHMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHNlZ21lbnRzLnB1c2goLi4udGhpcy5wYXRoc1swXSk7XG4gICAgICAgIGlmIChkZXRhaWxlZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB7IG5hbWVzLCBhcml0eSwgaGlkZGVuLCBkZXNjcmlwdGlvbiwgcmVxdWlyZWQgfSBvZiB0aGlzLm9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGlkZGVuKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBhcmdzID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCBhcml0eTsgKyt0KVxuICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goYCAjJHt0fWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBgJHtuYW1lcy5qb2luKGAsYCl9JHthcmdzLmpvaW4oYGApfWA7XG4gICAgICAgICAgICAgICAgaWYgKCFpbmxpbmVPcHRpb25zICYmIGRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGRldGFpbGVkT3B0aW9uTGlzdC5wdXNoKHsgZGVmaW5pdGlvbiwgZGVzY3JpcHRpb24sIHJlcXVpcmVkIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VnbWVudHMucHVzaChyZXF1aXJlZCA/IGA8JHtkZWZpbml0aW9ufT5gIDogYFske2RlZmluaXRpb259XWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlZ21lbnRzLnB1c2goLi4udGhpcy5hcml0eS5sZWFkaW5nLm1hcChuYW1lID0+IGA8JHtuYW1lfT5gKSk7XG4gICAgICAgICAgICBpZiAodGhpcy5hcml0eS5leHRyYSA9PT0gTm9MaW1pdHMpXG4gICAgICAgICAgICAgICAgc2VnbWVudHMucHVzaChgLi4uYCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgc2VnbWVudHMucHVzaCguLi50aGlzLmFyaXR5LmV4dHJhLm1hcChuYW1lID0+IGBbJHtuYW1lfV1gKSk7XG4gICAgICAgICAgICBzZWdtZW50cy5wdXNoKC4uLnRoaXMuYXJpdHkudHJhaWxpbmcubWFwKG5hbWUgPT4gYDwke25hbWV9PmApKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1c2FnZSA9IHNlZ21lbnRzLmpvaW4oYCBgKTtcbiAgICAgICAgcmV0dXJuIHsgdXNhZ2UsIG9wdGlvbnM6IGRldGFpbGVkT3B0aW9uTGlzdCB9O1xuICAgIH1cbiAgICBjb21waWxlKCkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udGV4dCA9PT0gYHVuZGVmaW5lZGApXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFzc2VydGlvbiBmYWlsZWQ6IE5vIGNvbnRleHQgYXR0YWNoZWRgKTtcbiAgICAgICAgY29uc3QgbWFjaGluZSA9IG1ha2VTdGF0ZU1hY2hpbmUoKTtcbiAgICAgICAgbGV0IGZpcnN0Tm9kZSA9IE5PREVfSU5JVElBTDtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlVXNhZ2UgPSB0aGlzLnVzYWdlKCkudXNhZ2U7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9uc1xuICAgICAgICAgICAgLmZpbHRlcihvcHQgPT4gb3B0LnJlcXVpcmVkKVxuICAgICAgICAgICAgLm1hcChvcHQgPT4gb3B0Lm5hbWVzKTtcbiAgICAgICAgZmlyc3ROb2RlID0gaW5qZWN0Tm9kZShtYWNoaW5lLCBtYWtlTm9kZSgpKTtcbiAgICAgICAgcmVnaXN0ZXJTdGF0aWMobWFjaGluZSwgTk9ERV9JTklUSUFMLCBTVEFSVF9PRl9JTlBVVCwgZmlyc3ROb2RlLCBbYHNldENhbmRpZGF0ZVN0YXRlYCwgeyBjYW5kaWRhdGVVc2FnZSwgcmVxdWlyZWRPcHRpb25zIH1dKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25hbEFyZ3VtZW50ID0gdGhpcy5hcml0eS5wcm94eVxuICAgICAgICAgICAgPyBgYWx3YXlzYFxuICAgICAgICAgICAgOiBgaXNOb3RPcHRpb25MaWtlYDtcbiAgICAgICAgY29uc3QgcGF0aHMgPSB0aGlzLnBhdGhzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdGhpcy5wYXRoc1xuICAgICAgICAgICAgOiBbW11dO1xuICAgICAgICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICAgICAgICAgIGxldCBsYXN0UGF0aE5vZGUgPSBmaXJzdE5vZGU7XG4gICAgICAgICAgICAvLyBXZSBhbGxvdyBvcHRpb25zIHRvIGJlIHNwZWNpZmllZCBiZWZvcmUgdGhlIHBhdGguIE5vdGUgdGhhdCB3ZVxuICAgICAgICAgICAgLy8gb25seSBkbyB0aGlzIHdoZW4gdGhlcmUgaXMgYSBwYXRoLCBvdGhlcndpc2UgdGhlcmUgd291bGQgYmVcbiAgICAgICAgICAgIC8vIHNvbWUgcmVkdW5kYW5jeSB3aXRoIHRoZSBvcHRpb25zIGF0dGFjaGVkIGxhdGVyLlxuICAgICAgICAgICAgaWYgKHBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvblBhdGhOb2RlID0gaW5qZWN0Tm9kZShtYWNoaW5lLCBtYWtlTm9kZSgpKTtcbiAgICAgICAgICAgICAgICByZWdpc3RlclNob3J0Y3V0KG1hY2hpbmUsIGxhc3RQYXRoTm9kZSwgb3B0aW9uUGF0aE5vZGUpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJPcHRpb25zKG1hY2hpbmUsIG9wdGlvblBhdGhOb2RlKTtcbiAgICAgICAgICAgICAgICBsYXN0UGF0aE5vZGUgPSBvcHRpb25QYXRoTm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgcGF0aC5sZW5ndGg7ICsrdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRQYXRoTm9kZSA9IGluamVjdE5vZGUobWFjaGluZSwgbWFrZU5vZGUoKSk7XG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJTdGF0aWMobWFjaGluZSwgbGFzdFBhdGhOb2RlLCBwYXRoW3RdLCBuZXh0UGF0aE5vZGUsIGBwdXNoUGF0aGApO1xuICAgICAgICAgICAgICAgIGxhc3RQYXRoTm9kZSA9IG5leHRQYXRoTm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmFyaXR5LmxlYWRpbmcubGVuZ3RoID4gMCB8fCAhdGhpcy5hcml0eS5wcm94eSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlbHBOb2RlID0gaW5qZWN0Tm9kZShtYWNoaW5lLCBtYWtlTm9kZSgpKTtcbiAgICAgICAgICAgICAgICByZWdpc3RlckR5bmFtaWMobWFjaGluZSwgbGFzdFBhdGhOb2RlLCBgaXNIZWxwYCwgaGVscE5vZGUsIFtgdXNlSGVscGAsIHRoaXMuY2xpSW5kZXhdKTtcbiAgICAgICAgICAgICAgICByZWdpc3RlckR5bmFtaWMobWFjaGluZSwgaGVscE5vZGUsIGBhbHdheXNgLCBoZWxwTm9kZSwgYHB1c2hFeHRyYWApO1xuICAgICAgICAgICAgICAgIHJlZ2lzdGVyU3RhdGljKG1hY2hpbmUsIGhlbHBOb2RlLCBFTkRfT0ZfSU5QVVQsIE5PREVfU1VDQ0VTUywgW2BzZXRTZWxlY3RlZEluZGV4YCwgSEVMUF9DT01NQU5EX0lOREVYXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWdpc3Rlck9wdGlvbnMobWFjaGluZSwgbGFzdFBhdGhOb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmFyaXR5LmxlYWRpbmcubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICByZWdpc3RlclN0YXRpYyhtYWNoaW5lLCBsYXN0UGF0aE5vZGUsIEVORF9PRl9JTlBVVCwgTk9ERV9FUlJPUkVELCBbYHNldEVycm9yYCwgYE5vdCBlbm91Z2ggcG9zaXRpb25hbCBhcmd1bWVudHNgXSk7XG4gICAgICAgICAgICBsZXQgbGFzdExlYWRpbmdOb2RlID0gbGFzdFBhdGhOb2RlO1xuICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0aGlzLmFyaXR5LmxlYWRpbmcubGVuZ3RoOyArK3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0TGVhZGluZ05vZGUgPSBpbmplY3ROb2RlKG1hY2hpbmUsIG1ha2VOb2RlKCkpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hcml0eS5wcm94eSB8fCB0ICsgMSAhPT0gdGhpcy5hcml0eS5sZWFkaW5nLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWdpc3Rlck9wdGlvbnMobWFjaGluZSwgbmV4dExlYWRpbmdOb2RlKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hcml0eS50cmFpbGluZy5sZW5ndGggPiAwIHx8IHQgKyAxICE9PSB0aGlzLmFyaXR5LmxlYWRpbmcubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICByZWdpc3RlclN0YXRpYyhtYWNoaW5lLCBuZXh0TGVhZGluZ05vZGUsIEVORF9PRl9JTlBVVCwgTk9ERV9FUlJPUkVELCBbYHNldEVycm9yYCwgYE5vdCBlbm91Z2ggcG9zaXRpb25hbCBhcmd1bWVudHNgXSk7XG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJEeW5hbWljKG1hY2hpbmUsIGxhc3RMZWFkaW5nTm9kZSwgYGlzTm90T3B0aW9uTGlrZWAsIG5leHRMZWFkaW5nTm9kZSwgYHB1c2hQb3NpdGlvbmFsYCk7XG4gICAgICAgICAgICAgICAgbGFzdExlYWRpbmdOb2RlID0gbmV4dExlYWRpbmdOb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGxhc3RFeHRyYU5vZGUgPSBsYXN0TGVhZGluZ05vZGU7XG4gICAgICAgICAgICBpZiAodGhpcy5hcml0eS5leHRyYSA9PT0gTm9MaW1pdHMgfHwgdGhpcy5hcml0eS5leHRyYS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXh0cmFTaG9ydGN1dE5vZGUgPSBpbmplY3ROb2RlKG1hY2hpbmUsIG1ha2VOb2RlKCkpO1xuICAgICAgICAgICAgICAgIHJlZ2lzdGVyU2hvcnRjdXQobWFjaGluZSwgbGFzdExlYWRpbmdOb2RlLCBleHRyYVNob3J0Y3V0Tm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXJpdHkuZXh0cmEgPT09IE5vTGltaXRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dHJhTm9kZSA9IGluamVjdE5vZGUobWFjaGluZSwgbWFrZU5vZGUoKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hcml0eS5wcm94eSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJPcHRpb25zKG1hY2hpbmUsIGV4dHJhTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyRHluYW1pYyhtYWNoaW5lLCBsYXN0TGVhZGluZ05vZGUsIHBvc2l0aW9uYWxBcmd1bWVudCwgZXh0cmFOb2RlLCBgcHVzaEV4dHJhTm9MaW1pdHNgKTtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJEeW5hbWljKG1hY2hpbmUsIGV4dHJhTm9kZSwgcG9zaXRpb25hbEFyZ3VtZW50LCBleHRyYU5vZGUsIGBwdXNoRXh0cmFOb0xpbWl0c2ApO1xuICAgICAgICAgICAgICAgICAgICByZWdpc3RlclNob3J0Y3V0KG1hY2hpbmUsIGV4dHJhTm9kZSwgZXh0cmFTaG9ydGN1dE5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0aGlzLmFyaXR5LmV4dHJhLmxlbmd0aDsgKyt0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0RXh0cmFOb2RlID0gaW5qZWN0Tm9kZShtYWNoaW5lLCBtYWtlTm9kZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hcml0eS5wcm94eSB8fCB0ID4gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyT3B0aW9ucyhtYWNoaW5lLCBuZXh0RXh0cmFOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyRHluYW1pYyhtYWNoaW5lLCBsYXN0RXh0cmFOb2RlLCBwb3NpdGlvbmFsQXJndW1lbnQsIG5leHRFeHRyYU5vZGUsIGBwdXNoRXh0cmFgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU2hvcnRjdXQobWFjaGluZSwgbmV4dEV4dHJhTm9kZSwgZXh0cmFTaG9ydGN1dE5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEV4dHJhTm9kZSA9IG5leHRFeHRyYU5vZGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGFzdEV4dHJhTm9kZSA9IGV4dHJhU2hvcnRjdXROb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuYXJpdHkudHJhaWxpbmcubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICByZWdpc3RlclN0YXRpYyhtYWNoaW5lLCBsYXN0RXh0cmFOb2RlLCBFTkRfT0ZfSU5QVVQsIE5PREVfRVJST1JFRCwgW2BzZXRFcnJvcmAsIGBOb3QgZW5vdWdoIHBvc2l0aW9uYWwgYXJndW1lbnRzYF0pO1xuICAgICAgICAgICAgbGV0IGxhc3RUcmFpbGluZ05vZGUgPSBsYXN0RXh0cmFOb2RlO1xuICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0aGlzLmFyaXR5LnRyYWlsaW5nLmxlbmd0aDsgKyt0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFRyYWlsaW5nTm9kZSA9IGluamVjdE5vZGUobWFjaGluZSwgbWFrZU5vZGUoKSk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFyaXR5LnByb3h5KVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyT3B0aW9ucyhtYWNoaW5lLCBuZXh0VHJhaWxpbmdOb2RlKTtcbiAgICAgICAgICAgICAgICBpZiAodCArIDEgPCB0aGlzLmFyaXR5LnRyYWlsaW5nLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJTdGF0aWMobWFjaGluZSwgbmV4dFRyYWlsaW5nTm9kZSwgRU5EX09GX0lOUFVULCBOT0RFX0VSUk9SRUQsIFtgc2V0RXJyb3JgLCBgTm90IGVub3VnaCBwb3NpdGlvbmFsIGFyZ3VtZW50c2BdKTtcbiAgICAgICAgICAgICAgICByZWdpc3RlckR5bmFtaWMobWFjaGluZSwgbGFzdFRyYWlsaW5nTm9kZSwgYGlzTm90T3B0aW9uTGlrZWAsIG5leHRUcmFpbGluZ05vZGUsIGBwdXNoUG9zaXRpb25hbGApO1xuICAgICAgICAgICAgICAgIGxhc3RUcmFpbGluZ05vZGUgPSBuZXh0VHJhaWxpbmdOb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVnaXN0ZXJEeW5hbWljKG1hY2hpbmUsIGxhc3RUcmFpbGluZ05vZGUsIHBvc2l0aW9uYWxBcmd1bWVudCwgTk9ERV9FUlJPUkVELCBbYHNldEVycm9yYCwgYEV4dHJhbmVvdXMgcG9zaXRpb25hbCBhcmd1bWVudGBdKTtcbiAgICAgICAgICAgIHJlZ2lzdGVyU3RhdGljKG1hY2hpbmUsIGxhc3RUcmFpbGluZ05vZGUsIEVORF9PRl9JTlBVVCwgTk9ERV9TVUNDRVNTLCBbYHNldFNlbGVjdGVkSW5kZXhgLCB0aGlzLmNsaUluZGV4XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1hY2hpbmUsXG4gICAgICAgICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJlZ2lzdGVyT3B0aW9ucyhtYWNoaW5lLCBub2RlKSB7XG4gICAgICAgIHJlZ2lzdGVyRHluYW1pYyhtYWNoaW5lLCBub2RlLCBbYGlzT3B0aW9uYCwgYC0tYF0sIG5vZGUsIGBpbmhpYmF0ZU9wdGlvbnNgKTtcbiAgICAgICAgcmVnaXN0ZXJEeW5hbWljKG1hY2hpbmUsIG5vZGUsIFtgaXNCYXRjaE9wdGlvbmAsIHRoaXMuYWxsT3B0aW9uTmFtZXNdLCBub2RlLCBgcHVzaEJhdGNoYCk7XG4gICAgICAgIHJlZ2lzdGVyRHluYW1pYyhtYWNoaW5lLCBub2RlLCBbYGlzQm91bmRPcHRpb25gLCB0aGlzLmFsbE9wdGlvbk5hbWVzLCB0aGlzLm9wdGlvbnNdLCBub2RlLCBgcHVzaEJvdW5kYCk7XG4gICAgICAgIHJlZ2lzdGVyRHluYW1pYyhtYWNoaW5lLCBub2RlLCBbYGlzVW5zdXBwb3J0ZWRPcHRpb25gLCB0aGlzLmFsbE9wdGlvbk5hbWVzXSwgTk9ERV9FUlJPUkVELCBbYHNldEVycm9yYCwgYFVuc3VwcG9ydGVkIG9wdGlvbiBuYW1lYF0pO1xuICAgICAgICByZWdpc3RlckR5bmFtaWMobWFjaGluZSwgbm9kZSwgW2Bpc0ludmFsaWRPcHRpb25gXSwgTk9ERV9FUlJPUkVELCBbYHNldEVycm9yYCwgYEludmFsaWQgb3B0aW9uIG5hbWVgXSk7XG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHRoaXMub3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgbG9uZ2VzdE5hbWUgPSBvcHRpb24ubmFtZXMucmVkdWNlKChsb25nZXN0TmFtZSwgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lLmxlbmd0aCA+IGxvbmdlc3ROYW1lLmxlbmd0aCA/IG5hbWUgOiBsb25nZXN0TmFtZTtcbiAgICAgICAgICAgIH0sIGBgKTtcbiAgICAgICAgICAgIGlmIChvcHRpb24uYXJpdHkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2Ygb3B0aW9uLm5hbWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyRHluYW1pYyhtYWNoaW5lLCBub2RlLCBbYGlzT3B0aW9uYCwgbmFtZSwgb3B0aW9uLmhpZGRlbiB8fCBuYW1lICE9PSBsb25nZXN0TmFtZV0sIG5vZGUsIGBwdXNoVHJ1ZWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRoKGAtLWApICYmICFuYW1lLnN0YXJ0c1dpdGgoYC0tbm8tYCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyRHluYW1pYyhtYWNoaW5lLCBub2RlLCBbYGlzTmVnYXRlZE9wdGlvbmAsIG5hbWVdLCBub2RlLCBbYHB1c2hGYWxzZWAsIG5hbWVdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFdlIGluamVjdCBhIG5ldyBub2RlIGF0IHRoZSBlbmQgb2YgdGhlIHN0YXRlIG1hY2hpbmVcbiAgICAgICAgICAgICAgICBsZXQgbGFzdE5vZGUgPSBpbmplY3ROb2RlKG1hY2hpbmUsIG1ha2VOb2RlKCkpO1xuICAgICAgICAgICAgICAgIC8vIFdlIHJlZ2lzdGVyIHRyYW5zaXRpb25zIGZyb20gdGhlIHN0YXJ0aW5nIG5vZGUgdG8gdGhpcyBuZXcgbm9kZVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBvcHRpb24ubmFtZXMpXG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyRHluYW1pYyhtYWNoaW5lLCBub2RlLCBbYGlzT3B0aW9uYCwgbmFtZSwgb3B0aW9uLmhpZGRlbiB8fCBuYW1lICE9PSBsb25nZXN0TmFtZV0sIGxhc3ROb2RlLCBgcHVzaFVuZGVmaW5lZGApO1xuICAgICAgICAgICAgICAgIC8vIEZvciBlYWNoIGFyZ3VtZW50LCB3ZSBpbmplY3QgYSBuZXcgbm9kZSBhdCB0aGUgZW5kIGFuZCB3ZVxuICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIGEgdHJhbnNpdGlvbiBmcm9tIHRoZSBjdXJyZW50IG5vZGUgdG8gdGhpcyBuZXcgbm9kZVxuICAgICAgICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgb3B0aW9uLmFyaXR5OyArK3QpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dE5vZGUgPSBpbmplY3ROb2RlKG1hY2hpbmUsIG1ha2VOb2RlKCkpO1xuICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4gcHJvdmlkZSBiZXR0ZXIgZXJyb3JzIHdoZW4gYW5vdGhlciBvcHRpb24gb3IgRU5EX09GX0lOUFVUIGlzIGVuY291bnRlcmVkXG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU3RhdGljKG1hY2hpbmUsIGxhc3ROb2RlLCBFTkRfT0ZfSU5QVVQsIE5PREVfRVJST1JFRCwgYHNldE9wdGlvbkFyaXR5RXJyb3JgKTtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJEeW5hbWljKG1hY2hpbmUsIGxhc3ROb2RlLCBgaXNPcHRpb25MaWtlYCwgTk9ERV9FUlJPUkVELCBgc2V0T3B0aW9uQXJpdHlFcnJvcmApO1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgb3B0aW9uIGhhcyBhIHNpbmdsZSBhcmd1bWVudCwgbm8gbmVlZCB0byBzdG9yZSBpdCBpbiBhbiBhcnJheVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBvcHRpb24uYXJpdHkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYHNldFN0cmluZ1ZhbHVlYFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBgcHVzaFN0cmluZ1ZhbHVlYDtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJEeW5hbWljKG1hY2hpbmUsIGxhc3ROb2RlLCBgaXNOb3RPcHRpb25MaWtlYCwgbmV4dE5vZGUsIGFjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGxhc3ROb2RlID0gbmV4dE5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEluIHRoZSBlbmQsIHdlIHJlZ2lzdGVyIGEgc2hvcnRjdXQgZnJvbVxuICAgICAgICAgICAgICAgIC8vIHRoZSBsYXN0IG5vZGUgYmFjayB0byB0aGUgc3RhcnRpbmcgbm9kZVxuICAgICAgICAgICAgICAgIHJlZ2lzdGVyU2hvcnRjdXQobWFjaGluZSwgbGFzdE5vZGUsIG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuY2xhc3MgQ2xpQnVpbGRlciB7XG4gICAgY29uc3RydWN0b3IoeyBiaW5hcnlOYW1lID0gYC4uLmAgfSA9IHt9KSB7XG4gICAgICAgIHRoaXMuYnVpbGRlcnMgPSBbXTtcbiAgICAgICAgdGhpcy5vcHRzID0geyBiaW5hcnlOYW1lIH07XG4gICAgfVxuICAgIHN0YXRpYyBidWlsZChjYnMsIG9wdHMgPSB7fSkge1xuICAgICAgICByZXR1cm4gbmV3IENsaUJ1aWxkZXIob3B0cykuY29tbWFuZHMoY2JzKS5jb21waWxlKCk7XG4gICAgfVxuICAgIGdldEJ1aWxkZXJCeUluZGV4KG4pIHtcbiAgICAgICAgaWYgKCEobiA+PSAwICYmIG4gPCB0aGlzLmJ1aWxkZXJzLmxlbmd0aCkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFzc2VydGlvbiBmYWlsZWQ6IE91dC1vZi1ib3VuZCBjb21tYW5kIGluZGV4ICgke259KWApO1xuICAgICAgICByZXR1cm4gdGhpcy5idWlsZGVyc1tuXTtcbiAgICB9XG4gICAgY29tbWFuZHMoY2JzKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2Igb2YgY2JzKVxuICAgICAgICAgICAgY2IodGhpcy5jb21tYW5kKCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY29tbWFuZCgpIHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBDb21tYW5kQnVpbGRlcih0aGlzLmJ1aWxkZXJzLmxlbmd0aCwgdGhpcy5vcHRzKTtcbiAgICAgICAgdGhpcy5idWlsZGVycy5wdXNoKGJ1aWxkZXIpO1xuICAgICAgICByZXR1cm4gYnVpbGRlcjtcbiAgICB9XG4gICAgY29tcGlsZSgpIHtcbiAgICAgICAgY29uc3QgbWFjaGluZXMgPSBbXTtcbiAgICAgICAgY29uc3QgY29udGV4dHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBidWlsZGVyIG9mIHRoaXMuYnVpbGRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbWFjaGluZSwgY29udGV4dCB9ID0gYnVpbGRlci5jb21waWxlKCk7XG4gICAgICAgICAgICBtYWNoaW5lcy5wdXNoKG1hY2hpbmUpO1xuICAgICAgICAgICAgY29udGV4dHMucHVzaChjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYWNoaW5lID0gbWFrZUFueU9mTWFjaGluZShtYWNoaW5lcyk7XG4gICAgICAgIHNpbXBsaWZ5TWFjaGluZShtYWNoaW5lKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1hY2hpbmUsXG4gICAgICAgICAgICBjb250ZXh0cyxcbiAgICAgICAgICAgIHByb2Nlc3M6IChpbnB1dCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5NYWNoaW5lKG1hY2hpbmUsIGlucHV0KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdWdnZXN0OiAoaW5wdXQsIHBhcnRpYWwpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VnZ2VzdE1hY2hpbmUobWFjaGluZSwgaW5wdXQsIHBhcnRpYWwpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IENsaUJ1aWxkZXIsIENvbW1hbmRCdWlsZGVyLCBOb0xpbWl0cywgYWdncmVnYXRlSGVscFN0YXRlcywgY2xvbmVOb2RlLCBjbG9uZVRyYW5zaXRpb24sIGRlYnVnLCBkZWJ1Z01hY2hpbmUsIGV4ZWN1dGUsIGluamVjdE5vZGUsIGlzVGVybWluYWxOb2RlLCBtYWtlQW55T2ZNYWNoaW5lLCBtYWtlTm9kZSwgbWFrZVN0YXRlTWFjaGluZSwgcmVkdWNlcnMsIHJlZ2lzdGVyRHluYW1pYywgcmVnaXN0ZXJTaG9ydGN1dCwgcmVnaXN0ZXJTdGF0aWMsIHJ1bk1hY2hpbmVJbnRlcm5hbCwgc2VsZWN0QmVzdFN0YXRlLCBzaW1wbGlmeU1hY2hpbmUsIHN1Z2dlc3QsIHRlc3RzLCB0cmltU21hbGxlckJyYW5jaGVzIH07XG4iLCJpbXBvcnQgdHR5IGZyb20gJ3R0eSc7XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRDb2xvckRlcHRoKCkge1xuICAgIGlmICh0dHkgJiYgYGdldENvbG9yRGVwdGhgIGluIHR0eS5Xcml0ZVN0cmVhbS5wcm90b3R5cGUpXG4gICAgICAgIHJldHVybiB0dHkuV3JpdGVTdHJlYW0ucHJvdG90eXBlLmdldENvbG9yRGVwdGgoKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuRk9SQ0VfQ09MT1IgPT09IGAwYClcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgaWYgKHByb2Nlc3MuZW52LkZPUkNFX0NPTE9SID09PSBgMWApXG4gICAgICAgIHJldHVybiA4O1xuICAgIGlmICh0eXBlb2YgcHJvY2Vzcy5zdGRvdXQgIT09IGB1bmRlZmluZWRgICYmIHByb2Nlc3Muc3Rkb3V0LmlzVFRZKVxuICAgICAgICByZXR1cm4gODtcbiAgICByZXR1cm4gMTtcbn1cbmxldCBnQ29udGV4dFN0b3JhZ2U7XG5mdW5jdGlvbiBnZXRDYXB0dXJlQWN0aXZhdG9yKGNvbnRleHQpIHtcbiAgICBsZXQgY29udGV4dFN0b3JhZ2UgPSBnQ29udGV4dFN0b3JhZ2U7XG4gICAgaWYgKHR5cGVvZiBjb250ZXh0U3RvcmFnZSA9PT0gYHVuZGVmaW5lZGApIHtcbiAgICAgICAgaWYgKGNvbnRleHQuc3Rkb3V0ID09PSBwcm9jZXNzLnN0ZG91dCAmJiBjb250ZXh0LnN0ZGVyciA9PT0gcHJvY2Vzcy5zdGRlcnIpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgeyBBc3luY0xvY2FsU3RvcmFnZTogTGF6eUFzeW5jTG9jYWxTdG9yYWdlIH0gPSByZXF1aXJlKGBhc3luY19ob29rc2ApO1xuICAgICAgICBjb250ZXh0U3RvcmFnZSA9IGdDb250ZXh0U3RvcmFnZSA9IG5ldyBMYXp5QXN5bmNMb2NhbFN0b3JhZ2UoKTtcbiAgICAgICAgY29uc3Qgb3JpZ1N0ZG91dFdyaXRlID0gcHJvY2Vzcy5zdGRvdXQuX3dyaXRlO1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IGNvbnRleHRTdG9yYWdlLmdldFN0b3JlKCk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRleHQgPT09IGB1bmRlZmluZWRgKVxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnU3Rkb3V0V3JpdGUuY2FsbCh0aGlzLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnN0ZG91dC53cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb3JpZ1N0ZGVycldyaXRlID0gcHJvY2Vzcy5zdGRlcnIuX3dyaXRlO1xuICAgICAgICBwcm9jZXNzLnN0ZGVyci5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IGNvbnRleHRTdG9yYWdlLmdldFN0b3JlKCk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRleHQgPT09IGB1bmRlZmluZWRgKVxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnU3RkZXJyV3JpdGUuY2FsbCh0aGlzLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnN0ZGVyci53cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIChmbikgPT4ge1xuICAgICAgICByZXR1cm4gY29udGV4dFN0b3JhZ2UucnVuKGNvbnRleHQsIGZuKTtcbiAgICB9O1xufVxuXG5leHBvcnQgeyBnZXRDYXB0dXJlQWN0aXZhdG9yLCBnZXREZWZhdWx0Q29sb3JEZXB0aCB9O1xuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJy4vQ29tbWFuZC5tanMnO1xuXG5jbGFzcyBIZWxwQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIGNvbnN0cnVjdG9yKGNvbnRleHRzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY29udGV4dHMgPSBjb250ZXh0cztcbiAgICAgICAgdGhpcy5jb21tYW5kcyA9IFtdO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbShzdGF0ZSwgY29udGV4dHMpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZCA9IG5ldyBIZWxwQ29tbWFuZChjb250ZXh0cyk7XG4gICAgICAgIGNvbW1hbmQucGF0aCA9IHN0YXRlLnBhdGg7XG4gICAgICAgIGZvciAoY29uc3Qgb3B0IG9mIHN0YXRlLm9wdGlvbnMpIHtcbiAgICAgICAgICAgIHN3aXRjaCAob3B0Lm5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIGAtY2A6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQuY29tbWFuZHMucHVzaChOdW1iZXIob3B0LnZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBgLWlgOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLmluZGV4ID0gTnVtYmVyKG9wdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbW1hbmQ7XG4gICAgfVxuICAgIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgICAgIGxldCBjb21tYW5kcyA9IHRoaXMuY29tbWFuZHM7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbmRleCAhPT0gYHVuZGVmaW5lZGAgJiYgdGhpcy5pbmRleCA+PSAwICYmIHRoaXMuaW5kZXggPCBjb21tYW5kcy5sZW5ndGgpXG4gICAgICAgICAgICBjb21tYW5kcyA9IFtjb21tYW5kc1t0aGlzLmluZGV4XV07XG4gICAgICAgIGlmIChjb21tYW5kcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdGRvdXQud3JpdGUodGhpcy5jbGkudXNhZ2UoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29tbWFuZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc3Rkb3V0LndyaXRlKHRoaXMuY2xpLnVzYWdlKHRoaXMuY29udGV4dHNbY29tbWFuZHNbMF1dLmNvbW1hbmRDbGFzcywgeyBkZXRhaWxlZDogdHJ1ZSB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29tbWFuZHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN0ZG91dC53cml0ZShgTXVsdGlwbGUgY29tbWFuZHMgbWF0Y2ggeW91ciBzZWxlY3Rpb246XFxuYCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc3Rkb3V0LndyaXRlKGBcXG5gKTtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbW1hbmQgb2YgdGhpcy5jb21tYW5kcylcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuc3Rkb3V0LndyaXRlKHRoaXMuY2xpLnVzYWdlKHRoaXMuY29udGV4dHNbY29tbWFuZF0uY29tbWFuZENsYXNzLCB7IHByZWZpeDogYCR7aW5kZXgrK30uIGAucGFkU3RhcnQoNSkgfSkpO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN0ZG91dC53cml0ZShgXFxuYCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuc3Rkb3V0LndyaXRlKGBSdW4gYWdhaW4gd2l0aCAtaD08aW5kZXg+IHRvIHNlZSB0aGUgbG9uZ2VyIGRldGFpbHMgb2YgYW55IG9mIHRob3NlIGNvbW1hbmRzLlxcbmApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgeyBIZWxwQ29tbWFuZCB9O1xuIiwiaW1wb3J0IHsgSEVMUF9DT01NQU5EX0lOREVYIH0gZnJvbSAnLi4vY29uc3RhbnRzLm1qcyc7XG5pbXBvcnQgeyBDbGlCdWlsZGVyIH0gZnJvbSAnLi4vY29yZS5tanMnO1xuaW1wb3J0IHsgZm9ybWF0TWFya2Rvd25pc2gsIHJpY2hGb3JtYXQsIHRleHRGb3JtYXQgfSBmcm9tICcuLi9mb3JtYXQubWpzJztcbmltcG9ydCB7IGdldENhcHR1cmVBY3RpdmF0b3IsIGdldERlZmF1bHRDb2xvckRlcHRoIH0gZnJvbSAnLi4vcGxhdGZvcm0nO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJy4vQ29tbWFuZC5tanMnO1xuaW1wb3J0IHsgSGVscENvbW1hbmQgfSBmcm9tICcuL0hlbHBDb21tYW5kLm1qcyc7XG5cbmNvbnN0IGVycm9yQ29tbWFuZFN5bWJvbCA9IFN5bWJvbChgY2xpcGFuaW9uL2Vycm9yQ29tbWFuZGApO1xuYXN5bmMgZnVuY3Rpb24gcnVuRXhpdCguLi5hcmdzKSB7XG4gICAgY29uc3QgeyByZXNvbHZlZE9wdGlvbnMsIHJlc29sdmVkQ29tbWFuZENsYXNzZXMsIHJlc29sdmVkQXJndiwgcmVzb2x2ZWRDb250ZXh0LCB9ID0gcmVzb2x2ZVJ1blBhcmFtZXRlcnMoYXJncyk7XG4gICAgY29uc3QgY2xpID0gQ2xpLmZyb20ocmVzb2x2ZWRDb21tYW5kQ2xhc3NlcywgcmVzb2x2ZWRPcHRpb25zKTtcbiAgICByZXR1cm4gY2xpLnJ1bkV4aXQocmVzb2x2ZWRBcmd2LCByZXNvbHZlZENvbnRleHQpO1xufVxuYXN5bmMgZnVuY3Rpb24gcnVuKC4uLmFyZ3MpIHtcbiAgICBjb25zdCB7IHJlc29sdmVkT3B0aW9ucywgcmVzb2x2ZWRDb21tYW5kQ2xhc3NlcywgcmVzb2x2ZWRBcmd2LCByZXNvbHZlZENvbnRleHQsIH0gPSByZXNvbHZlUnVuUGFyYW1ldGVycyhhcmdzKTtcbiAgICBjb25zdCBjbGkgPSBDbGkuZnJvbShyZXNvbHZlZENvbW1hbmRDbGFzc2VzLCByZXNvbHZlZE9wdGlvbnMpO1xuICAgIHJldHVybiBjbGkucnVuKHJlc29sdmVkQXJndiwgcmVzb2x2ZWRDb250ZXh0KTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVSdW5QYXJhbWV0ZXJzKGFyZ3MpIHtcbiAgICBsZXQgcmVzb2x2ZWRPcHRpb25zO1xuICAgIGxldCByZXNvbHZlZENvbW1hbmRDbGFzc2VzO1xuICAgIGxldCByZXNvbHZlZEFyZ3Y7XG4gICAgbGV0IHJlc29sdmVkQ29udGV4dDtcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09IGB1bmRlZmluZWRgICYmIHR5cGVvZiBwcm9jZXNzLmFyZ3YgIT09IGB1bmRlZmluZWRgKVxuICAgICAgICByZXNvbHZlZEFyZ3YgPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRDb21tYW5kQ2xhc3NlcyA9IGFyZ3NbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzWzBdICYmIChhcmdzWzBdLnByb3RvdHlwZSBpbnN0YW5jZW9mIENvbW1hbmQpIHx8IEFycmF5LmlzQXJyYXkoYXJnc1swXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRDb21tYW5kQ2xhc3NlcyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3NbMV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZEFyZ3YgPSBhcmdzWzFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRDb250ZXh0ID0gYXJnc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRPcHRpb25zID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRDb21tYW5kQ2xhc3NlcyA9IGFyZ3NbMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmdzWzJdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZE9wdGlvbnMgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZENvbW1hbmRDbGFzc2VzID0gYXJnc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRBcmd2ID0gYXJnc1syXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJnc1swXSAmJiAoYXJnc1swXS5wcm90b3R5cGUgaW5zdGFuY2VvZiBDb21tYW5kKSB8fCBBcnJheS5pc0FycmF5KGFyZ3NbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVkQ29tbWFuZENsYXNzZXMgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZEFyZ3YgPSBhcmdzWzFdO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZENvbnRleHQgPSBhcmdzWzJdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRPcHRpb25zID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRDb21tYW5kQ2xhc3NlcyA9IGFyZ3NbMV07XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVkQ29udGV4dCA9IGFyZ3NbMl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRPcHRpb25zID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICByZXNvbHZlZENvbW1hbmRDbGFzc2VzID0gYXJnc1sxXTtcbiAgICAgICAgICAgICAgICByZXNvbHZlZEFyZ3YgPSBhcmdzWzJdO1xuICAgICAgICAgICAgICAgIHJlc29sdmVkQ29udGV4dCA9IGFyZ3NbM107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXNvbHZlZEFyZ3YgPT09IGB1bmRlZmluZWRgKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBhcmd2IHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gcnVubmluZyBDbGlwYW5pb24gb3V0c2lkZSBvZiBhIE5vZGUgY29udGV4dGApO1xuICAgIHJldHVybiB7XG4gICAgICAgIHJlc29sdmVkT3B0aW9ucyxcbiAgICAgICAgcmVzb2x2ZWRDb21tYW5kQ2xhc3NlcyxcbiAgICAgICAgcmVzb2x2ZWRBcmd2LFxuICAgICAgICByZXNvbHZlZENvbnRleHQsXG4gICAgfTtcbn1cbi8qKlxuICogQHRlbXBsYXRlIENvbnRleHQgVGhlIGNvbnRleHQgc2hhcmVkIGJ5IGFsbCBjb21tYW5kcy4gQ29udGV4dHMgYXJlIGEgc2V0IG9mIHZhbHVlcywgZGVmaW5lZCB3aGVuIGNhbGxpbmcgdGhlIGBydW5gL2BydW5FeGl0YCBmdW5jdGlvbnMgZnJvbSB0aGUgQ0xJIGluc3RhbmNlLCB0aGF0IHdpbGwgYmUgbWFkZSBhdmFpbGFibGUgdG8gdGhlIGNvbW1hbmRzIHZpYSBgdGhpcy5jb250ZXh0YC5cbiAqL1xuY2xhc3MgQ2xpIHtcbiAgICBjb25zdHJ1Y3Rvcih7IGJpbmFyeUxhYmVsLCBiaW5hcnlOYW1lOiBiaW5hcnlOYW1lT3B0ID0gYC4uLmAsIGJpbmFyeVZlcnNpb24sIGVuYWJsZUNhcHR1cmUgPSBmYWxzZSwgZW5hYmxlQ29sb3JzIH0gPSB7fSkge1xuICAgICAgICB0aGlzLnJlZ2lzdHJhdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuYnVpbGRlciA9IG5ldyBDbGlCdWlsZGVyKHsgYmluYXJ5TmFtZTogYmluYXJ5TmFtZU9wdCB9KTtcbiAgICAgICAgdGhpcy5iaW5hcnlMYWJlbCA9IGJpbmFyeUxhYmVsO1xuICAgICAgICB0aGlzLmJpbmFyeU5hbWUgPSBiaW5hcnlOYW1lT3B0O1xuICAgICAgICB0aGlzLmJpbmFyeVZlcnNpb24gPSBiaW5hcnlWZXJzaW9uO1xuICAgICAgICB0aGlzLmVuYWJsZUNhcHR1cmUgPSBlbmFibGVDYXB0dXJlO1xuICAgICAgICB0aGlzLmVuYWJsZUNvbG9ycyA9IGVuYWJsZUNvbG9ycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBDbGkgYW5kIHJlZ2lzdGVycyBhbGwgY29tbWFuZHMgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29tbWFuZENsYXNzZXMgVGhlIENvbW1hbmRzIHRvIHJlZ2lzdGVyXG4gICAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgYENsaWAgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbShjb21tYW5kQ2xhc3Nlcywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGNsaSA9IG5ldyBDbGkob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkQ29tbWFuZENsYXNzZXMgPSBBcnJheS5pc0FycmF5KGNvbW1hbmRDbGFzc2VzKVxuICAgICAgICAgICAgPyBjb21tYW5kQ2xhc3Nlc1xuICAgICAgICAgICAgOiBbY29tbWFuZENsYXNzZXNdO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbW1hbmRDbGFzcyBvZiByZXNvbHZlZENvbW1hbmRDbGFzc2VzKVxuICAgICAgICAgICAgY2xpLnJlZ2lzdGVyKGNvbW1hbmRDbGFzcyk7XG4gICAgICAgIHJldHVybiBjbGk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVycyBhIGNvbW1hbmQgaW5zaWRlIHRoZSBDTEkuXG4gICAgICovXG4gICAgcmVnaXN0ZXIoY29tbWFuZENsYXNzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3Qgc3BlY3MgPSBuZXcgTWFwKCk7XG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgY29tbWFuZENsYXNzKCk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbW1hbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29tbWFuZFtrZXldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gYG9iamVjdGAgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWVbQ29tbWFuZC5pc09wdGlvbl0pIHtcbiAgICAgICAgICAgICAgICBzcGVjcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVpbGRlciA9IHRoaXMuYnVpbGRlci5jb21tYW5kKCk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gYnVpbGRlci5jbGlJbmRleDtcbiAgICAgICAgY29uc3QgcGF0aHMgPSAoX2EgPSBjb21tYW5kQ2xhc3MucGF0aHMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGNvbW1hbmQucGF0aHM7XG4gICAgICAgIGlmICh0eXBlb2YgcGF0aHMgIT09IGB1bmRlZmluZWRgKVxuICAgICAgICAgICAgZm9yIChjb25zdCBwYXRoIG9mIHBhdGhzKVxuICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkUGF0aChwYXRoKTtcbiAgICAgICAgdGhpcy5yZWdpc3RyYXRpb25zLnNldChjb21tYW5kQ2xhc3MsIHsgc3BlY3MsIGJ1aWxkZXIsIGluZGV4IH0pO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHsgZGVmaW5pdGlvbiB9XSBvZiBzcGVjcy5lbnRyaWVzKCkpXG4gICAgICAgICAgICBkZWZpbml0aW9uKGJ1aWxkZXIsIGtleSk7XG4gICAgICAgIGJ1aWxkZXIuc2V0Q29udGV4dCh7XG4gICAgICAgICAgICBjb21tYW5kQ2xhc3MsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcm9jZXNzKGlucHV0LCB1c2VyQ29udGV4dCkge1xuICAgICAgICBjb25zdCB7IGNvbnRleHRzLCBwcm9jZXNzIH0gPSB0aGlzLmJ1aWxkZXIuY29tcGlsZSgpO1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHByb2Nlc3MoaW5wdXQpO1xuICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgLi4uQ2xpLmRlZmF1bHRDb250ZXh0LFxuICAgICAgICAgICAgLi4udXNlckNvbnRleHQsXG4gICAgICAgIH07XG4gICAgICAgIHN3aXRjaCAoc3RhdGUuc2VsZWN0ZWRJbmRleCkge1xuICAgICAgICAgICAgY2FzZSBIRUxQX0NPTU1BTkRfSU5ERVg6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kID0gSGVscENvbW1hbmQuZnJvbShzdGF0ZSwgY29udGV4dHMpO1xuICAgICAgICAgICAgICAgICAgICBjb21tYW5kLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBjb21tYW5kQ2xhc3MgfSA9IGNvbnRleHRzW3N0YXRlLnNlbGVjdGVkSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNvcmQgPSB0aGlzLnJlZ2lzdHJhdGlvbnMuZ2V0KGNvbW1hbmRDbGFzcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVjb3JkID09PSBgdW5kZWZpbmVkYClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQXNzZXJ0aW9uIGZhaWxlZDogRXhwZWN0ZWQgdGhlIGNvbW1hbmQgY2xhc3MgdG8gaGF2ZSBiZWVuIHJlZ2lzdGVyZWQuYCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgY29tbWFuZENsYXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQucGF0aCA9IHN0YXRlLnBhdGg7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHsgdHJhbnNmb3JtZXIgfV0gb2YgcmVjb3JkLnNwZWNzLmVudHJpZXMoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kW2tleV0gPSB0cmFuc2Zvcm1lcihyZWNvcmQuYnVpbGRlciwga2V5LCBzdGF0ZSwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yW2Vycm9yQ29tbWFuZFN5bWJvbF0gPSBjb21tYW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgcnVuKGlucHV0LCB1c2VyQ29udGV4dCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBsZXQgY29tbWFuZDtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgIC4uLkNsaS5kZWZhdWx0Q29udGV4dCxcbiAgICAgICAgICAgIC4uLnVzZXJDb250ZXh0LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjb2xvcmVkID0gKF9hID0gdGhpcy5lbmFibGVDb2xvcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGNvbnRleHQuY29sb3JEZXB0aCA+IDE7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBpbnB1dDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29tbWFuZCA9IHRoaXMucHJvY2VzcyhpbnB1dCwgY29udGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0ZG91dC53cml0ZSh0aGlzLmVycm9yKGVycm9yLCB7IGNvbG9yZWQgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb21tYW5kLmhlbHApIHtcbiAgICAgICAgICAgIGNvbnRleHQuc3Rkb3V0LndyaXRlKHRoaXMudXNhZ2UoY29tbWFuZCwgeyBjb2xvcmVkLCBkZXRhaWxlZDogdHJ1ZSB9KSk7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBjb21tYW5kLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICBjb21tYW5kLmNsaSA9IHtcbiAgICAgICAgICAgIGJpbmFyeUxhYmVsOiB0aGlzLmJpbmFyeUxhYmVsLFxuICAgICAgICAgICAgYmluYXJ5TmFtZTogdGhpcy5iaW5hcnlOYW1lLFxuICAgICAgICAgICAgYmluYXJ5VmVyc2lvbjogdGhpcy5iaW5hcnlWZXJzaW9uLFxuICAgICAgICAgICAgZW5hYmxlQ2FwdHVyZTogdGhpcy5lbmFibGVDYXB0dXJlLFxuICAgICAgICAgICAgZW5hYmxlQ29sb3JzOiB0aGlzLmVuYWJsZUNvbG9ycyxcbiAgICAgICAgICAgIGRlZmluaXRpb25zOiAoKSA9PiB0aGlzLmRlZmluaXRpb25zKCksXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yLCBvcHRzKSA9PiB0aGlzLmVycm9yKGVycm9yLCBvcHRzKSxcbiAgICAgICAgICAgIGZvcm1hdDogY29sb3JlZCA9PiB0aGlzLmZvcm1hdChjb2xvcmVkKSxcbiAgICAgICAgICAgIHByb2Nlc3M6IChpbnB1dCwgc3ViQ29udGV4dCkgPT4gdGhpcy5wcm9jZXNzKGlucHV0LCB7IC4uLmNvbnRleHQsIC4uLnN1YkNvbnRleHQgfSksXG4gICAgICAgICAgICBydW46IChpbnB1dCwgc3ViQ29udGV4dCkgPT4gdGhpcy5ydW4oaW5wdXQsIHsgLi4uY29udGV4dCwgLi4uc3ViQ29udGV4dCB9KSxcbiAgICAgICAgICAgIHVzYWdlOiAoY29tbWFuZCwgb3B0cykgPT4gdGhpcy51c2FnZShjb21tYW5kLCBvcHRzKSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWN0aXZhdGUgPSB0aGlzLmVuYWJsZUNhcHR1cmVcbiAgICAgICAgICAgID8gKF9iID0gZ2V0Q2FwdHVyZUFjdGl2YXRvcihjb250ZXh0KSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogbm9vcENhcHR1cmVBY3RpdmF0b3JcbiAgICAgICAgICAgIDogbm9vcENhcHR1cmVBY3RpdmF0b3I7XG4gICAgICAgIGxldCBleGl0Q29kZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGV4aXRDb2RlID0gYXdhaXQgYWN0aXZhdGUoKCkgPT4gY29tbWFuZC52YWxpZGF0ZUFuZEV4ZWN1dGUoKS5jYXRjaChlcnJvciA9PiBjb21tYW5kLmNhdGNoKGVycm9yKS50aGVuKCgpID0+IDApKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb250ZXh0LnN0ZG91dC53cml0ZSh0aGlzLmVycm9yKGVycm9yLCB7IGNvbG9yZWQsIGNvbW1hbmQgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV4aXRDb2RlO1xuICAgIH1cbiAgICBhc3luYyBydW5FeGl0KGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSBhd2FpdCB0aGlzLnJ1bihpbnB1dCwgY29udGV4dCk7XG4gICAgfVxuICAgIHN1Z2dlc3QoaW5wdXQsIHBhcnRpYWwpIHtcbiAgICAgICAgY29uc3QgeyBzdWdnZXN0IH0gPSB0aGlzLmJ1aWxkZXIuY29tcGlsZSgpO1xuICAgICAgICByZXR1cm4gc3VnZ2VzdChpbnB1dCwgcGFydGlhbCk7XG4gICAgfVxuICAgIGRlZmluaXRpb25zKHsgY29sb3JlZCA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgICBjb25zdCBkYXRhID0gW107XG4gICAgICAgIGZvciAoY29uc3QgW2NvbW1hbmRDbGFzcywgeyBpbmRleCB9XSBvZiB0aGlzLnJlZ2lzdHJhdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29tbWFuZENsYXNzLnVzYWdlID09PSBgdW5kZWZpbmVkYClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IHsgdXNhZ2U6IHBhdGggfSA9IHRoaXMuZ2V0VXNhZ2VCeUluZGV4KGluZGV4LCB7IGRldGFpbGVkOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIGNvbnN0IHsgdXNhZ2UsIG9wdGlvbnMgfSA9IHRoaXMuZ2V0VXNhZ2VCeUluZGV4KGluZGV4LCB7IGRldGFpbGVkOiB0cnVlLCBpbmxpbmVPcHRpb25zOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gdHlwZW9mIGNvbW1hbmRDbGFzcy51c2FnZS5jYXRlZ29yeSAhPT0gYHVuZGVmaW5lZGBcbiAgICAgICAgICAgICAgICA/IGZvcm1hdE1hcmtkb3duaXNoKGNvbW1hbmRDbGFzcy51c2FnZS5jYXRlZ29yeSwgeyBmb3JtYXQ6IHRoaXMuZm9ybWF0KGNvbG9yZWQpLCBwYXJhZ3JhcGhzOiBmYWxzZSB9KVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0eXBlb2YgY29tbWFuZENsYXNzLnVzYWdlLmRlc2NyaXB0aW9uICE9PSBgdW5kZWZpbmVkYFxuICAgICAgICAgICAgICAgID8gZm9ybWF0TWFya2Rvd25pc2goY29tbWFuZENsYXNzLnVzYWdlLmRlc2NyaXB0aW9uLCB7IGZvcm1hdDogdGhpcy5mb3JtYXQoY29sb3JlZCksIHBhcmFncmFwaHM6IGZhbHNlIH0pXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBkZXRhaWxzID0gdHlwZW9mIGNvbW1hbmRDbGFzcy51c2FnZS5kZXRhaWxzICE9PSBgdW5kZWZpbmVkYFxuICAgICAgICAgICAgICAgID8gZm9ybWF0TWFya2Rvd25pc2goY29tbWFuZENsYXNzLnVzYWdlLmRldGFpbHMsIHsgZm9ybWF0OiB0aGlzLmZvcm1hdChjb2xvcmVkKSwgcGFyYWdyYXBoczogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgZXhhbXBsZXMgPSB0eXBlb2YgY29tbWFuZENsYXNzLnVzYWdlLmV4YW1wbGVzICE9PSBgdW5kZWZpbmVkYFxuICAgICAgICAgICAgICAgID8gY29tbWFuZENsYXNzLnVzYWdlLmV4YW1wbGVzLm1hcCgoW2xhYmVsLCBjbGldKSA9PiBbZm9ybWF0TWFya2Rvd25pc2gobGFiZWwsIHsgZm9ybWF0OiB0aGlzLmZvcm1hdChjb2xvcmVkKSwgcGFyYWdyYXBoczogZmFsc2UgfSksIGNsaS5yZXBsYWNlKC9cXCQwL2csIHRoaXMuYmluYXJ5TmFtZSldKVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgZGF0YS5wdXNoKHsgcGF0aCwgdXNhZ2UsIGNhdGVnb3J5LCBkZXNjcmlwdGlvbiwgZGV0YWlscywgZXhhbXBsZXMsIG9wdGlvbnMgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHVzYWdlKGNvbW1hbmQgPSBudWxsLCB7IGNvbG9yZWQsIGRldGFpbGVkID0gZmFsc2UsIHByZWZpeCA9IGAkIGAgfSA9IHt9KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgLy8gSW4gY2FzZSB0aGUgZGVmYXVsdCBjb21tYW5kIGlzIHRoZSBvbmx5IG9uZSwgd2UgY2FuIGp1c3Qgc2hvdyB0aGUgY29tbWFuZCBoZWxwIHJhdGhlciB0aGFuIHRoZSBnZW5lcmFsIG9uZVxuICAgICAgICBpZiAoY29tbWFuZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb21tYW5kQ2xhc3Mgb2YgdGhpcy5yZWdpc3RyYXRpb25zLmtleXMoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhzID0gY29tbWFuZENsYXNzLnBhdGhzO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRG9jdW1lbnRlZCA9IHR5cGVvZiBjb21tYW5kQ2xhc3MudXNhZ2UgIT09IGB1bmRlZmluZWRgO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRXhjbHVzaXZlbHlEZWZhdWx0ID0gIXBhdGhzIHx8IHBhdGhzLmxlbmd0aCA9PT0gMCB8fCAocGF0aHMubGVuZ3RoID09PSAxICYmIHBhdGhzWzBdLmxlbmd0aCA9PT0gMCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNEZWZhdWx0ID0gaXNFeGNsdXNpdmVseURlZmF1bHQgfHwgKChfYSA9IHBhdGhzID09PSBudWxsIHx8IHBhdGhzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXRocy5zb21lKHBhdGggPT4gcGF0aC5sZW5ndGggPT09IDApKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmYXVsdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBjb21tYW5kQ2xhc3M7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0RvY3VtZW50ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgICAgIGRldGFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGNvbnN0IGNvbW1hbmRDbGFzcyA9IGNvbW1hbmQgIT09IG51bGwgJiYgY29tbWFuZCBpbnN0YW5jZW9mIENvbW1hbmRcbiAgICAgICAgICAgID8gY29tbWFuZC5jb25zdHJ1Y3RvclxuICAgICAgICAgICAgOiBjb21tYW5kO1xuICAgICAgICBsZXQgcmVzdWx0ID0gYGA7XG4gICAgICAgIGlmICghY29tbWFuZENsYXNzKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kc0J5Q2F0ZWdvcmllcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2NvbW1hbmRDbGFzcywgeyBpbmRleCB9XSBvZiB0aGlzLnJlZ2lzdHJhdGlvbnMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb21tYW5kQ2xhc3MudXNhZ2UgPT09IGB1bmRlZmluZWRgKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBjYXRlZ29yeSA9IHR5cGVvZiBjb21tYW5kQ2xhc3MudXNhZ2UuY2F0ZWdvcnkgIT09IGB1bmRlZmluZWRgXG4gICAgICAgICAgICAgICAgICAgID8gZm9ybWF0TWFya2Rvd25pc2goY29tbWFuZENsYXNzLnVzYWdlLmNhdGVnb3J5LCB7IGZvcm1hdDogdGhpcy5mb3JtYXQoY29sb3JlZCksIHBhcmFncmFwaHM6IGZhbHNlIH0pXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgY2F0ZWdvcnlDb21tYW5kcyA9IGNvbW1hbmRzQnlDYXRlZ29yaWVzLmdldChjYXRlZ29yeSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYXRlZ29yeUNvbW1hbmRzID09PSBgdW5kZWZpbmVkYClcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZHNCeUNhdGVnb3JpZXMuc2V0KGNhdGVnb3J5LCBjYXRlZ29yeUNvbW1hbmRzID0gW10pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgdXNhZ2UgfSA9IHRoaXMuZ2V0VXNhZ2VCeUluZGV4KGluZGV4KTtcbiAgICAgICAgICAgICAgICBjYXRlZ29yeUNvbW1hbmRzLnB1c2goeyBjb21tYW5kQ2xhc3MsIHVzYWdlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnlOYW1lcyA9IEFycmF5LmZyb20oY29tbWFuZHNCeUNhdGVnb3JpZXMua2V5cygpKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGEgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICBpZiAoYiA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICsxO1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmxvY2FsZUNvbXBhcmUoYiwgYGVuYCwgeyB1c2FnZTogYHNvcnRgLCBjYXNlRmlyc3Q6IGB1cHBlcmAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGhhc0xhYmVsID0gdHlwZW9mIHRoaXMuYmluYXJ5TGFiZWwgIT09IGB1bmRlZmluZWRgO1xuICAgICAgICAgICAgY29uc3QgaGFzVmVyc2lvbiA9IHR5cGVvZiB0aGlzLmJpbmFyeVZlcnNpb24gIT09IGB1bmRlZmluZWRgO1xuICAgICAgICAgICAgaWYgKGhhc0xhYmVsIHx8IGhhc1ZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzTGFiZWwgJiYgaGFzVmVyc2lvbilcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGAke3RoaXMuZm9ybWF0KGNvbG9yZWQpLmhlYWRlcihgJHt0aGlzLmJpbmFyeUxhYmVsfSAtICR7dGhpcy5iaW5hcnlWZXJzaW9ufWApfVxcblxcbmA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaGFzTGFiZWwpXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgJHt0aGlzLmZvcm1hdChjb2xvcmVkKS5oZWFkZXIoYCR7dGhpcy5iaW5hcnlMYWJlbH1gKX1cXG5gO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGAke3RoaXMuZm9ybWF0KGNvbG9yZWQpLmhlYWRlcihgJHt0aGlzLmJpbmFyeVZlcnNpb259YCl9XFxuYDtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gYCAgJHt0aGlzLmZvcm1hdChjb2xvcmVkKS5ib2xkKHByZWZpeCl9JHt0aGlzLmJpbmFyeU5hbWV9IDxjb21tYW5kPlxcbmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gYCR7dGhpcy5mb3JtYXQoY29sb3JlZCkuYm9sZChwcmVmaXgpfSR7dGhpcy5iaW5hcnlOYW1lfSA8Y29tbWFuZD5cXG5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yeU5hbWUgb2YgY2F0ZWdvcnlOYW1lcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRzID0gY29tbWFuZHNCeUNhdGVnb3JpZXMuZ2V0KGNhdGVnb3J5TmFtZSkuc2xpY2UoKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLnVzYWdlLmxvY2FsZUNvbXBhcmUoYi51c2FnZSwgYGVuYCwgeyB1c2FnZTogYHNvcnRgLCBjYXNlRmlyc3Q6IGB1cHBlcmAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyID0gY2F0ZWdvcnlOYW1lICE9PSBudWxsXG4gICAgICAgICAgICAgICAgICAgID8gY2F0ZWdvcnlOYW1lLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgICA6IGBHZW5lcmFsIGNvbW1hbmRzYDtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gYFxcbmA7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGAke3RoaXMuZm9ybWF0KGNvbG9yZWQpLmhlYWRlcihgJHtoZWFkZXJ9YCl9XFxuYDtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHsgY29tbWFuZENsYXNzLCB1c2FnZSB9IG9mIGNvbW1hbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvYyA9IGNvbW1hbmRDbGFzcy51c2FnZS5kZXNjcmlwdGlvbiB8fCBgdW5kb2N1bWVudGVkYDtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGBcXG5gO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gYCAgJHt0aGlzLmZvcm1hdChjb2xvcmVkKS5ib2xkKHVzYWdlKX1cXG5gO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gYCAgICAke2Zvcm1hdE1hcmtkb3duaXNoKGRvYywgeyBmb3JtYXQ6IHRoaXMuZm9ybWF0KGNvbG9yZWQpLCBwYXJhZ3JhcGhzOiBmYWxzZSB9KX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCArPSBgXFxuYDtcbiAgICAgICAgICAgIHJlc3VsdCArPSBmb3JtYXRNYXJrZG93bmlzaChgWW91IGNhbiBhbHNvIHByaW50IG1vcmUgZGV0YWlscyBhYm91dCBhbnkgb2YgdGhlc2UgY29tbWFuZHMgYnkgY2FsbGluZyB0aGVtIHdpdGggdGhlIFxcYC1oLC0taGVscFxcYCBmbGFnIHJpZ2h0IGFmdGVyIHRoZSBjb21tYW5kIG5hbWUuYCwgeyBmb3JtYXQ6IHRoaXMuZm9ybWF0KGNvbG9yZWQpLCBwYXJhZ3JhcGhzOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFkZXRhaWxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgdXNhZ2UgfSA9IHRoaXMuZ2V0VXNhZ2VCeVJlZ2lzdHJhdGlvbihjb21tYW5kQ2xhc3MpO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgJHt0aGlzLmZvcm1hdChjb2xvcmVkKS5ib2xkKHByZWZpeCl9JHt1c2FnZX1cXG5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBkZXNjcmlwdGlvbiA9IGBgLCBkZXRhaWxzID0gYGAsIGV4YW1wbGVzID0gW10sIH0gPSBjb21tYW5kQ2xhc3MudXNhZ2UgfHwge307XG4gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uICE9PSBgYCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gZm9ybWF0TWFya2Rvd25pc2goZGVzY3JpcHRpb24sIHsgZm9ybWF0OiB0aGlzLmZvcm1hdChjb2xvcmVkKSwgcGFyYWdyYXBoczogZmFsc2UgfSkucmVwbGFjZSgvXi4vLCAkMCA9PiAkMC50b1VwcGVyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGBcXG5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGV0YWlscyAhPT0gYGAgfHwgZXhhbXBsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gYCR7dGhpcy5mb3JtYXQoY29sb3JlZCkuaGVhZGVyKGBVc2FnZWApfVxcbmA7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgXFxuYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeyB1c2FnZSwgb3B0aW9ucyB9ID0gdGhpcy5nZXRVc2FnZUJ5UmVnaXN0cmF0aW9uKGNvbW1hbmRDbGFzcywgeyBpbmxpbmVPcHRpb25zOiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gYCR7dGhpcy5mb3JtYXQoY29sb3JlZCkuYm9sZChwcmVmaXgpfSR7dXNhZ2V9XFxuYDtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgXFxuYDtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGAke3RoaXMuZm9ybWF0KGNvbG9yZWQpLmhlYWRlcihgT3B0aW9uc2ApfVxcbmA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heERlZmluaXRpb25MZW5ndGggPSBvcHRpb25zLnJlZHVjZSgobGVuZ3RoLCBvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heChsZW5ndGgsIG9wdGlvbi5kZWZpbml0aW9uLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gYFxcbmA7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgeyBkZWZpbml0aW9uLCBkZXNjcmlwdGlvbiB9IG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgICAke3RoaXMuZm9ybWF0KGNvbG9yZWQpLmJvbGQoZGVmaW5pdGlvbi5wYWRFbmQobWF4RGVmaW5pdGlvbkxlbmd0aCkpfSAgICAke2Zvcm1hdE1hcmtkb3duaXNoKGRlc2NyaXB0aW9uLCB7IGZvcm1hdDogdGhpcy5mb3JtYXQoY29sb3JlZCksIHBhcmFncmFwaHM6IGZhbHNlIH0pfWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRldGFpbHMgIT09IGBgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgXFxuYDtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGAke3RoaXMuZm9ybWF0KGNvbG9yZWQpLmhlYWRlcihgRGV0YWlsc2ApfVxcbmA7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgXFxuYDtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZvcm1hdE1hcmtkb3duaXNoKGRldGFpbHMsIHsgZm9ybWF0OiB0aGlzLmZvcm1hdChjb2xvcmVkKSwgcGFyYWdyYXBoczogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGV4YW1wbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGBcXG5gO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gYCR7dGhpcy5mb3JtYXQoY29sb3JlZCkuaGVhZGVyKGBFeGFtcGxlc2ApfVxcbmA7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2Rlc2NyaXB0aW9uLCBleGFtcGxlXSBvZiBleGFtcGxlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGBcXG5gO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZvcm1hdE1hcmtkb3duaXNoKGRlc2NyaXB0aW9uLCB7IGZvcm1hdDogdGhpcy5mb3JtYXQoY29sb3JlZCksIHBhcmFncmFwaHM6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGAke2V4YW1wbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXi9tLCBgICAke3RoaXMuZm9ybWF0KGNvbG9yZWQpLmJvbGQocHJlZml4KX1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXCQwL2csIHRoaXMuYmluYXJ5TmFtZSl9XFxuYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBlcnJvcihlcnJvciwgX2EpIHtcbiAgICAgICAgdmFyIF9iO1xuICAgICAgICB2YXIgeyBjb2xvcmVkLCBjb21tYW5kID0gKF9iID0gZXJyb3JbZXJyb3JDb21tYW5kU3ltYm9sXSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogbnVsbCB9ID0gX2EgPT09IHZvaWQgMCA/IHt9IDogX2E7XG4gICAgICAgIGlmICghZXJyb3IgfHwgdHlwZW9mIGVycm9yICE9PSBgb2JqZWN0YCB8fCAhKGBzdGFja2AgaW4gZXJyb3IpKVxuICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoYEV4ZWN1dGlvbiBmYWlsZWQgd2l0aCBhIG5vbi1lcnJvciByZWplY3Rpb24gKHJlamVjdGVkIHZhbHVlOiAke0pTT04uc3RyaW5naWZ5KGVycm9yKX0pYCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBgYDtcbiAgICAgICAgbGV0IG5hbWUgPSBlcnJvci5uYW1lLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIGAkMSAkMmApO1xuICAgICAgICBpZiAobmFtZSA9PT0gYEVycm9yYClcbiAgICAgICAgICAgIG5hbWUgPSBgSW50ZXJuYWwgRXJyb3JgO1xuICAgICAgICByZXN1bHQgKz0gYCR7dGhpcy5mb3JtYXQoY29sb3JlZCkuZXJyb3IobmFtZSl9OiAke2Vycm9yLm1lc3NhZ2V9XFxuYDtcbiAgICAgICAgY29uc3QgbWV0YSA9IGVycm9yLmNsaXBhbmlvbjtcbiAgICAgICAgaWYgKHR5cGVvZiBtZXRhICE9PSBgdW5kZWZpbmVkYCkge1xuICAgICAgICAgICAgaWYgKG1ldGEudHlwZSA9PT0gYHVzYWdlYCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgXFxuYDtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gdGhpcy51c2FnZShjb21tYW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChlcnJvci5zdGFjaykge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgJHtlcnJvci5zdGFjay5yZXBsYWNlKC9eLipcXG4vLCBgYCl9XFxuYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBmb3JtYXQoY29sb3JlZCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoKF9hID0gY29sb3JlZCAhPT0gbnVsbCAmJiBjb2xvcmVkICE9PSB2b2lkIDAgPyBjb2xvcmVkIDogdGhpcy5lbmFibGVDb2xvcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IENsaS5kZWZhdWx0Q29udGV4dC5jb2xvckRlcHRoID4gMSkgPyByaWNoRm9ybWF0IDogdGV4dEZvcm1hdDtcbiAgICB9XG4gICAgZ2V0VXNhZ2VCeVJlZ2lzdHJhdGlvbihrbGFzcywgb3B0cykge1xuICAgICAgICBjb25zdCByZWNvcmQgPSB0aGlzLnJlZ2lzdHJhdGlvbnMuZ2V0KGtsYXNzKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZWNvcmQgPT09IGB1bmRlZmluZWRgKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBc3NlcnRpb24gZmFpbGVkOiBVbnJlZ2lzdGVyZWQgY29tbWFuZGApO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRVc2FnZUJ5SW5kZXgocmVjb3JkLmluZGV4LCBvcHRzKTtcbiAgICB9XG4gICAgZ2V0VXNhZ2VCeUluZGV4KG4sIG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRlci5nZXRCdWlsZGVyQnlJbmRleChuKS51c2FnZShvcHRzKTtcbiAgICB9XG59XG4vKipcbiAqIFRoZSBkZWZhdWx0IGNvbnRleHQgb2YgdGhlIENMSS5cbiAqXG4gKiBDb250YWlucyB0aGUgc3RkaW8gb2YgdGhlIGN1cnJlbnQgYHByb2Nlc3NgLlxuICovXG5DbGkuZGVmYXVsdENvbnRleHQgPSB7XG4gICAgZW52OiBwcm9jZXNzLmVudixcbiAgICBzdGRpbjogcHJvY2Vzcy5zdGRpbixcbiAgICBzdGRvdXQ6IHByb2Nlc3Muc3Rkb3V0LFxuICAgIHN0ZGVycjogcHJvY2Vzcy5zdGRlcnIsXG4gICAgY29sb3JEZXB0aDogZ2V0RGVmYXVsdENvbG9yRGVwdGgoKSxcbn07XG5mdW5jdGlvbiBub29wQ2FwdHVyZUFjdGl2YXRvcihmbikge1xuICAgIHJldHVybiBmbigpO1xufVxuXG5leHBvcnQgeyBDbGksIHJ1biwgcnVuRXhpdCB9O1xuIiwiaW1wb3J0IHsgbWFrZUNvbW1hbmRPcHRpb24sIGFwcGx5VmFsaWRhdG9yLCByZXJvdXRlQXJndW1lbnRzIH0gZnJvbSAnLi91dGlscy5tanMnO1xuXG5mdW5jdGlvbiBBcnJheShkZXNjcmlwdG9yLCBpbml0aWFsVmFsdWVCYXNlLCBvcHRzQmFzZSkge1xuICAgIGNvbnN0IFtpbml0aWFsVmFsdWUsIG9wdHNdID0gcmVyb3V0ZUFyZ3VtZW50cyhpbml0aWFsVmFsdWVCYXNlLCBvcHRzQmFzZSAhPT0gbnVsbCAmJiBvcHRzQmFzZSAhPT0gdm9pZCAwID8gb3B0c0Jhc2UgOiB7fSk7XG4gICAgY29uc3QgeyBhcml0eSA9IDEgfSA9IG9wdHM7XG4gICAgY29uc3Qgb3B0TmFtZXMgPSBkZXNjcmlwdG9yLnNwbGl0KGAsYCk7XG4gICAgY29uc3QgbmFtZVNldCA9IG5ldyBTZXQob3B0TmFtZXMpO1xuICAgIHJldHVybiBtYWtlQ29tbWFuZE9wdGlvbih7XG4gICAgICAgIGRlZmluaXRpb24oYnVpbGRlcikge1xuICAgICAgICAgICAgYnVpbGRlci5hZGRPcHRpb24oe1xuICAgICAgICAgICAgICAgIG5hbWVzOiBvcHROYW1lcyxcbiAgICAgICAgICAgICAgICBhcml0eSxcbiAgICAgICAgICAgICAgICBoaWRkZW46IG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0cy5oaWRkZW4sXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0cy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogb3B0cy5yZXF1aXJlZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2Zvcm1lcihidWlsZGVyLCBrZXksIHN0YXRlKSB7XG4gICAgICAgICAgICBsZXQgdXNlZE5hbWU7XG4gICAgICAgICAgICBsZXQgY3VycmVudFZhbHVlID0gdHlwZW9mIGluaXRpYWxWYWx1ZSAhPT0gYHVuZGVmaW5lZGBcbiAgICAgICAgICAgICAgICA/IFsuLi5pbml0aWFsVmFsdWVdXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiBzdGF0ZS5vcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFuYW1lU2V0LmhhcyhuYW1lKSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgdXNlZE5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZSAhPT0gbnVsbCAmJiBjdXJyZW50VmFsdWUgIT09IHZvaWQgMCA/IGN1cnJlbnRWYWx1ZSA6IFtdO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudFZhbHVlICE9PSBgdW5kZWZpbmVkYCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcHBseVZhbGlkYXRvcih1c2VkTmFtZSAhPT0gbnVsbCAmJiB1c2VkTmFtZSAhPT0gdm9pZCAwID8gdXNlZE5hbWUgOiBrZXksIGN1cnJlbnRWYWx1ZSwgb3B0cy52YWxpZGF0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9KTtcbn1cblxuZXhwb3J0IHsgQXJyYXkgfTtcbiIsImltcG9ydCB7IG1ha2VDb21tYW5kT3B0aW9uLCByZXJvdXRlQXJndW1lbnRzIH0gZnJvbSAnLi91dGlscy5tanMnO1xuXG5mdW5jdGlvbiBCb29sZWFuKGRlc2NyaXB0b3IsIGluaXRpYWxWYWx1ZUJhc2UsIG9wdHNCYXNlKSB7XG4gICAgY29uc3QgW2luaXRpYWxWYWx1ZSwgb3B0c10gPSByZXJvdXRlQXJndW1lbnRzKGluaXRpYWxWYWx1ZUJhc2UsIG9wdHNCYXNlICE9PSBudWxsICYmIG9wdHNCYXNlICE9PSB2b2lkIDAgPyBvcHRzQmFzZSA6IHt9KTtcbiAgICBjb25zdCBvcHROYW1lcyA9IGRlc2NyaXB0b3Iuc3BsaXQoYCxgKTtcbiAgICBjb25zdCBuYW1lU2V0ID0gbmV3IFNldChvcHROYW1lcyk7XG4gICAgcmV0dXJuIG1ha2VDb21tYW5kT3B0aW9uKHtcbiAgICAgICAgZGVmaW5pdGlvbihidWlsZGVyKSB7XG4gICAgICAgICAgICBidWlsZGVyLmFkZE9wdGlvbih7XG4gICAgICAgICAgICAgICAgbmFtZXM6IG9wdE5hbWVzLFxuICAgICAgICAgICAgICAgIGFsbG93QmluZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgYXJpdHk6IDAsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiBvcHRzLmhpZGRlbixcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogb3B0cy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogb3B0cy5yZXF1aXJlZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2Zvcm1lcihidWlsZXIsIGtleSwgc3RhdGUpIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50VmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiBzdGF0ZS5vcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFuYW1lU2V0LmhhcyhuYW1lKSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuXG5leHBvcnQgeyBCb29sZWFuIH07XG4iLCJpbXBvcnQgeyBOb0xpbWl0cyB9IGZyb20gJy4uLy4uL2NvcmUubWpzJztcbmltcG9ydCB7IG1ha2VDb21tYW5kT3B0aW9uLCBhcHBseVZhbGlkYXRvciwgcmVyb3V0ZUFyZ3VtZW50cyB9IGZyb20gJy4vdXRpbHMubWpzJztcblxuZnVuY3Rpb24gU3RyaW5nT3B0aW9uKGRlc2NyaXB0b3IsIGluaXRpYWxWYWx1ZUJhc2UsIG9wdHNCYXNlKSB7XG4gICAgY29uc3QgW2luaXRpYWxWYWx1ZSwgb3B0c10gPSByZXJvdXRlQXJndW1lbnRzKGluaXRpYWxWYWx1ZUJhc2UsIG9wdHNCYXNlICE9PSBudWxsICYmIG9wdHNCYXNlICE9PSB2b2lkIDAgPyBvcHRzQmFzZSA6IHt9KTtcbiAgICBjb25zdCB7IGFyaXR5ID0gMSB9ID0gb3B0cztcbiAgICBjb25zdCBvcHROYW1lcyA9IGRlc2NyaXB0b3Iuc3BsaXQoYCxgKTtcbiAgICBjb25zdCBuYW1lU2V0ID0gbmV3IFNldChvcHROYW1lcyk7XG4gICAgcmV0dXJuIG1ha2VDb21tYW5kT3B0aW9uKHtcbiAgICAgICAgZGVmaW5pdGlvbihidWlsZGVyKSB7XG4gICAgICAgICAgICBidWlsZGVyLmFkZE9wdGlvbih7XG4gICAgICAgICAgICAgICAgbmFtZXM6IG9wdE5hbWVzLFxuICAgICAgICAgICAgICAgIGFyaXR5OiBvcHRzLnRvbGVyYXRlQm9vbGVhbiA/IDAgOiBhcml0eSxcbiAgICAgICAgICAgICAgICBoaWRkZW46IG9wdHMuaGlkZGVuLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBvcHRzLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBvcHRzLnJlcXVpcmVkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zZm9ybWVyKGJ1aWxkZXIsIGtleSwgc3RhdGUsIGNvbnRleHQpIHtcbiAgICAgICAgICAgIGxldCB1c2VkTmFtZTtcbiAgICAgICAgICAgIGxldCBjdXJyZW50VmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMuZW52ICE9PSBgdW5kZWZpbmVkYCAmJiBjb250ZXh0LmVudltvcHRzLmVudl0pIHtcbiAgICAgICAgICAgICAgICB1c2VkTmFtZSA9IG9wdHMuZW52O1xuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGNvbnRleHQuZW52W29wdHMuZW52XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIHN0YXRlLm9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW5hbWVTZXQuaGFzKG5hbWUpKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB1c2VkTmFtZSA9IG5hbWU7XG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRWYWx1ZSA9PT0gYHN0cmluZ2ApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBwbHlWYWxpZGF0b3IodXNlZE5hbWUgIT09IG51bGwgJiYgdXNlZE5hbWUgIT09IHZvaWQgMCA/IHVzZWROYW1lIDoga2V5LCBjdXJyZW50VmFsdWUsIG9wdHMudmFsaWRhdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG5mdW5jdGlvbiBTdHJpbmdQb3NpdGlvbmFsKG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHsgcmVxdWlyZWQgPSB0cnVlIH0gPSBvcHRzO1xuICAgIHJldHVybiBtYWtlQ29tbWFuZE9wdGlvbih7XG4gICAgICAgIGRlZmluaXRpb24oYnVpbGRlciwga2V5KSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBidWlsZGVyLmFkZFBvc2l0aW9uYWwoe1xuICAgICAgICAgICAgICAgIG5hbWU6IChfYSA9IG9wdHMubmFtZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoga2V5LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBvcHRzLnJlcXVpcmVkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zZm9ybWVyKGJ1aWxkZXIsIGtleSwgc3RhdGUpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhdGUucG9zaXRpb25hbHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSBza2lwIE5vTGltaXRzIGV4dHJhcy4gV2Ugb25seSBjYXJlIGFib3V0XG4gICAgICAgICAgICAgICAgLy8gcmVxdWlyZWQgYW5kIG9wdGlvbmFsIGZpbml0ZSBwb3NpdGlvbmFscy5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUucG9zaXRpb25hbHNbaV0uZXh0cmEgPT09IE5vTGltaXRzKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAvLyBXZSBza2lwIG9wdGlvbmFsIHBvc2l0aW9uYWxzIHdoZW4gd2Ugb25seVxuICAgICAgICAgICAgICAgIC8vIGNhcmUgYWJvdXQgcmVxdWlyZWQgcG9zaXRpb25hbHMuXG4gICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVkICYmIHN0YXRlLnBvc2l0aW9uYWxzW2ldLmV4dHJhID09PSB0cnVlKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAvLyBXZSBza2lwIHJlcXVpcmVkIHBvc2l0aW9uYWxzIHdoZW4gd2Ugb25seVxuICAgICAgICAgICAgICAgIC8vIGNhcmUgYWJvdXQgb3B0aW9uYWwgcG9zaXRpb25hbHMuXG4gICAgICAgICAgICAgICAgaWYgKCFyZXF1aXJlZCAmJiBzdGF0ZS5wb3NpdGlvbmFsc1tpXS5leHRyYSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIC8vIFdlIHJlbW92ZSB0aGUgcG9zaXRpb25hbCBmcm9tIHRoZSBsaXN0XG4gICAgICAgICAgICAgICAgY29uc3QgW3Bvc2l0aW9uYWxdID0gc3RhdGUucG9zaXRpb25hbHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhcHBseVZhbGlkYXRvcigoX2EgPSBvcHRzLm5hbWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGtleSwgcG9zaXRpb25hbC52YWx1ZSwgb3B0cy52YWxpZGF0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbi8vIFRoaXMgZnVuY3Rpb24gaXMgYmFkbHkgdHlwZWQsIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciBiZWNhdXNlIHRoZSBvdmVybG9hZHMgcHJvdmlkZSB0aGUgdHJ1ZSBwdWJsaWMgdHlwaW5nc1xuZnVuY3Rpb24gU3RyaW5nKGRlc2NyaXB0b3IsIC4uLmFyZ3MpIHtcbiAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IgPT09IGBzdHJpbmdgKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmdPcHRpb24oZGVzY3JpcHRvciwgLi4uYXJncyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gU3RyaW5nUG9zaXRpb25hbChkZXNjcmlwdG9yKTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IFN0cmluZyB9O1xuIiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XG4gIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XG4gICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdDtcbiAgfVxuICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgdFtwXSA9IHNbcF07XG4gIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgfVxuICByZXR1cm4gdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19lc0RlY29yYXRlKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XG4gIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxuICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xuICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcbiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XG4gIHZhciBfLCBkb25lID0gZmFsc2U7XG4gIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHt9O1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcbiAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XG4gICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcbiAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xuICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcbiAgICAgIH1cbiAgfVxuICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XG4gIGRvbmUgPSB0cnVlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcbiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XG4gIH1cbiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19wcm9wS2V5KHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xuICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcbiAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XG4gIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcbiAgdmFyIGksIHA7XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XG4gIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XG4gIHJldHVybiBjb29rZWQ7XG59O1xuXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xuICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcbiAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xuICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcbiAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlKGVudiwgdmFsdWUsIGFzeW5jKSB7XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZC5cIik7XG4gICAgdmFyIGRpc3Bvc2UsIGlubmVyO1xuICAgIGlmIChhc3luYykge1xuICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jRGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XG4gICAgfVxuICAgIGlmIChkaXNwb3NlID09PSB2b2lkIDApIHtcbiAgICAgIGlmICghU3ltYm9sLmRpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuZGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmRpc3Bvc2VdO1xuICAgICAgaWYgKGFzeW5jKSBpbm5lciA9IGRpc3Bvc2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGlzcG9zZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IG5vdCBkaXNwb3NhYmxlLlwiKTtcbiAgICBpZiAoaW5uZXIpIGRpc3Bvc2UgPSBmdW5jdGlvbigpIHsgdHJ5IHsgaW5uZXIuY2FsbCh0aGlzKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7IH0gfTtcbiAgICBlbnYuc3RhY2sucHVzaCh7IHZhbHVlOiB2YWx1ZSwgZGlzcG9zZTogZGlzcG9zZSwgYXN5bmM6IGFzeW5jIH0pO1xuICB9XG4gIGVsc2UgaWYgKGFzeW5jKSB7XG4gICAgZW52LnN0YWNrLnB1c2goeyBhc3luYzogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbnZhciBfU3VwcHJlc3NlZEVycm9yID0gdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGlzcG9zZVJlc291cmNlcyhlbnYpIHtcbiAgZnVuY3Rpb24gZmFpbChlKSB7XG4gICAgZW52LmVycm9yID0gZW52Lmhhc0Vycm9yID8gbmV3IF9TdXBwcmVzc2VkRXJyb3IoZSwgZW52LmVycm9yLCBcIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC5cIikgOiBlO1xuICAgIGVudi5oYXNFcnJvciA9IHRydWU7XG4gIH1cbiAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICB3aGlsZSAoZW52LnN0YWNrLmxlbmd0aCkge1xuICAgICAgdmFyIHJlYyA9IGVudi5zdGFjay5wb3AoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWMuZGlzcG9zZSAmJiByZWMuZGlzcG9zZS5jYWxsKHJlYy52YWx1ZSk7XG4gICAgICAgIGlmIChyZWMuYXN5bmMpIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzdWx0KS50aGVuKG5leHQsIGZ1bmN0aW9uKGUpIHsgZmFpbChlKTsgcmV0dXJuIG5leHQoKTsgfSk7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgIGZhaWwoZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbnYuaGFzRXJyb3IpIHRocm93IGVudi5lcnJvcjtcbiAgfVxuICByZXR1cm4gbmV4dCgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZXh0ZW5kcyxcbiAgX19hc3NpZ24sXG4gIF9fcmVzdCxcbiAgX19kZWNvcmF0ZSxcbiAgX19wYXJhbSxcbiAgX19tZXRhZGF0YSxcbiAgX19hd2FpdGVyLFxuICBfX2dlbmVyYXRvcixcbiAgX19jcmVhdGVCaW5kaW5nLFxuICBfX2V4cG9ydFN0YXIsXG4gIF9fdmFsdWVzLFxuICBfX3JlYWQsXG4gIF9fc3ByZWFkLFxuICBfX3NwcmVhZEFycmF5cyxcbiAgX19zcHJlYWRBcnJheSxcbiAgX19hd2FpdCxcbiAgX19hc3luY0dlbmVyYXRvcixcbiAgX19hc3luY0RlbGVnYXRvcixcbiAgX19hc3luY1ZhbHVlcyxcbiAgX19tYWtlVGVtcGxhdGVPYmplY3QsXG4gIF9faW1wb3J0U3RhcixcbiAgX19pbXBvcnREZWZhdWx0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4sXG4gIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlLFxuICBfX2Rpc3Bvc2VSZXNvdXJjZXMsXG59O1xuIiwiaW1wb3J0ICogYXMgdHR5IGZyb20gXCJ0dHlcIlxuXG5jb25zdCB7XG4gIGVudiA9IHt9LFxuICBhcmd2ID0gW10sXG4gIHBsYXRmb3JtID0gXCJcIixcbn0gPSB0eXBlb2YgcHJvY2VzcyA9PT0gXCJ1bmRlZmluZWRcIiA/IHt9IDogcHJvY2Vzc1xuXG5jb25zdCBpc0Rpc2FibGVkID0gXCJOT19DT0xPUlwiIGluIGVudiB8fCBhcmd2LmluY2x1ZGVzKFwiLS1uby1jb2xvclwiKVxuY29uc3QgaXNGb3JjZWQgPSBcIkZPUkNFX0NPTE9SXCIgaW4gZW52IHx8IGFyZ3YuaW5jbHVkZXMoXCItLWNvbG9yXCIpXG5jb25zdCBpc1dpbmRvd3MgPSBwbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiXG5jb25zdCBpc0R1bWJUZXJtaW5hbCA9IGVudi5URVJNID09PSBcImR1bWJcIlxuXG5jb25zdCBpc0NvbXBhdGlibGVUZXJtaW5hbCA9XG4gIHR0eSAmJiB0dHkuaXNhdHR5ICYmIHR0eS5pc2F0dHkoMSkgJiYgZW52LlRFUk0gJiYgIWlzRHVtYlRlcm1pbmFsXG5cbmNvbnN0IGlzQ0kgPVxuICBcIkNJXCIgaW4gZW52ICYmXG4gIChcIkdJVEhVQl9BQ1RJT05TXCIgaW4gZW52IHx8IFwiR0lUTEFCX0NJXCIgaW4gZW52IHx8IFwiQ0lSQ0xFQ0lcIiBpbiBlbnYpXG5cbmV4cG9ydCBjb25zdCBpc0NvbG9yU3VwcG9ydGVkID1cbiAgIWlzRGlzYWJsZWQgJiZcbiAgKGlzRm9yY2VkIHx8IChpc1dpbmRvd3MgJiYgIWlzRHVtYlRlcm1pbmFsKSB8fCBpc0NvbXBhdGlibGVUZXJtaW5hbCB8fCBpc0NJKVxuXG5jb25zdCByZXBsYWNlQ2xvc2UgPSAoXG4gIGluZGV4LFxuICBzdHJpbmcsXG4gIGNsb3NlLFxuICByZXBsYWNlLFxuICBoZWFkID0gc3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyByZXBsYWNlLFxuICB0YWlsID0gc3RyaW5nLnN1YnN0cmluZyhpbmRleCArIGNsb3NlLmxlbmd0aCksXG4gIG5leHQgPSB0YWlsLmluZGV4T2YoY2xvc2UpXG4pID0+IGhlYWQgKyAobmV4dCA8IDAgPyB0YWlsIDogcmVwbGFjZUNsb3NlKG5leHQsIHRhaWwsIGNsb3NlLCByZXBsYWNlKSlcblxuY29uc3QgY2xlYXJCbGVlZCA9IChpbmRleCwgc3RyaW5nLCBvcGVuLCBjbG9zZSwgcmVwbGFjZSkgPT5cbiAgaW5kZXggPCAwXG4gICAgPyBvcGVuICsgc3RyaW5nICsgY2xvc2VcbiAgICA6IG9wZW4gKyByZXBsYWNlQ2xvc2UoaW5kZXgsIHN0cmluZywgY2xvc2UsIHJlcGxhY2UpICsgY2xvc2VcblxuY29uc3QgZmlsdGVyRW1wdHkgPVxuICAob3BlbiwgY2xvc2UsIHJlcGxhY2UgPSBvcGVuLCBhdCA9IG9wZW4ubGVuZ3RoICsgMSkgPT5cbiAgKHN0cmluZykgPT5cbiAgICBzdHJpbmcgfHwgIShzdHJpbmcgPT09IFwiXCIgfHwgc3RyaW5nID09PSB1bmRlZmluZWQpXG4gICAgICA/IGNsZWFyQmxlZWQoXG4gICAgICAgICAgKFwiXCIgKyBzdHJpbmcpLmluZGV4T2YoY2xvc2UsIGF0KSxcbiAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgb3BlbixcbiAgICAgICAgICBjbG9zZSxcbiAgICAgICAgICByZXBsYWNlXG4gICAgICAgIClcbiAgICAgIDogXCJcIlxuXG5jb25zdCBpbml0ID0gKG9wZW4sIGNsb3NlLCByZXBsYWNlKSA9PlxuICBmaWx0ZXJFbXB0eShgXFx4MWJbJHtvcGVufW1gLCBgXFx4MWJbJHtjbG9zZX1tYCwgcmVwbGFjZSlcblxuY29uc3QgY29sb3JzID0ge1xuICByZXNldDogaW5pdCgwLCAwKSxcbiAgYm9sZDogaW5pdCgxLCAyMiwgXCJcXHgxYlsyMm1cXHgxYlsxbVwiKSxcbiAgZGltOiBpbml0KDIsIDIyLCBcIlxceDFiWzIybVxceDFiWzJtXCIpLFxuICBpdGFsaWM6IGluaXQoMywgMjMpLFxuICB1bmRlcmxpbmU6IGluaXQoNCwgMjQpLFxuICBpbnZlcnNlOiBpbml0KDcsIDI3KSxcbiAgaGlkZGVuOiBpbml0KDgsIDI4KSxcbiAgc3RyaWtldGhyb3VnaDogaW5pdCg5LCAyOSksXG4gIGJsYWNrOiBpbml0KDMwLCAzOSksXG4gIHJlZDogaW5pdCgzMSwgMzkpLFxuICBncmVlbjogaW5pdCgzMiwgMzkpLFxuICB5ZWxsb3c6IGluaXQoMzMsIDM5KSxcbiAgYmx1ZTogaW5pdCgzNCwgMzkpLFxuICBtYWdlbnRhOiBpbml0KDM1LCAzOSksXG4gIGN5YW46IGluaXQoMzYsIDM5KSxcbiAgd2hpdGU6IGluaXQoMzcsIDM5KSxcbiAgZ3JheTogaW5pdCg5MCwgMzkpLFxuICBiZ0JsYWNrOiBpbml0KDQwLCA0OSksXG4gIGJnUmVkOiBpbml0KDQxLCA0OSksXG4gIGJnR3JlZW46IGluaXQoNDIsIDQ5KSxcbiAgYmdZZWxsb3c6IGluaXQoNDMsIDQ5KSxcbiAgYmdCbHVlOiBpbml0KDQ0LCA0OSksXG4gIGJnTWFnZW50YTogaW5pdCg0NSwgNDkpLFxuICBiZ0N5YW46IGluaXQoNDYsIDQ5KSxcbiAgYmdXaGl0ZTogaW5pdCg0NywgNDkpLFxuICBibGFja0JyaWdodDogaW5pdCg5MCwgMzkpLFxuICByZWRCcmlnaHQ6IGluaXQoOTEsIDM5KSxcbiAgZ3JlZW5CcmlnaHQ6IGluaXQoOTIsIDM5KSxcbiAgeWVsbG93QnJpZ2h0OiBpbml0KDkzLCAzOSksXG4gIGJsdWVCcmlnaHQ6IGluaXQoOTQsIDM5KSxcbiAgbWFnZW50YUJyaWdodDogaW5pdCg5NSwgMzkpLFxuICBjeWFuQnJpZ2h0OiBpbml0KDk2LCAzOSksXG4gIHdoaXRlQnJpZ2h0OiBpbml0KDk3LCAzOSksXG4gIGJnQmxhY2tCcmlnaHQ6IGluaXQoMTAwLCA0OSksXG4gIGJnUmVkQnJpZ2h0OiBpbml0KDEwMSwgNDkpLFxuICBiZ0dyZWVuQnJpZ2h0OiBpbml0KDEwMiwgNDkpLFxuICBiZ1llbGxvd0JyaWdodDogaW5pdCgxMDMsIDQ5KSxcbiAgYmdCbHVlQnJpZ2h0OiBpbml0KDEwNCwgNDkpLFxuICBiZ01hZ2VudGFCcmlnaHQ6IGluaXQoMTA1LCA0OSksXG4gIGJnQ3lhbkJyaWdodDogaW5pdCgxMDYsIDQ5KSxcbiAgYmdXaGl0ZUJyaWdodDogaW5pdCgxMDcsIDQ5KSxcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbG9ycyA9ICh7IHVzZUNvbG9yID0gaXNDb2xvclN1cHBvcnRlZCB9ID0ge30pID0+XG4gIHVzZUNvbG9yXG4gICAgPyBjb2xvcnNcbiAgICA6IE9iamVjdC5rZXlzKGNvbG9ycykucmVkdWNlKFxuICAgICAgICAoY29sb3JzLCBrZXkpID0+ICh7IC4uLmNvbG9ycywgW2tleV06IFN0cmluZyB9KSxcbiAgICAgICAge31cbiAgICAgIClcblxuZXhwb3J0IGNvbnN0IHtcbiAgcmVzZXQsXG4gIGJvbGQsXG4gIGRpbSxcbiAgaXRhbGljLFxuICB1bmRlcmxpbmUsXG4gIGludmVyc2UsXG4gIGhpZGRlbixcbiAgc3RyaWtldGhyb3VnaCxcbiAgYmxhY2ssXG4gIHJlZCxcbiAgZ3JlZW4sXG4gIHllbGxvdyxcbiAgYmx1ZSxcbiAgbWFnZW50YSxcbiAgY3lhbixcbiAgd2hpdGUsXG4gIGdyYXksXG4gIGJnQmxhY2ssXG4gIGJnUmVkLFxuICBiZ0dyZWVuLFxuICBiZ1llbGxvdyxcbiAgYmdCbHVlLFxuICBiZ01hZ2VudGEsXG4gIGJnQ3lhbixcbiAgYmdXaGl0ZSxcbiAgYmxhY2tCcmlnaHQsXG4gIHJlZEJyaWdodCxcbiAgZ3JlZW5CcmlnaHQsXG4gIHllbGxvd0JyaWdodCxcbiAgYmx1ZUJyaWdodCxcbiAgbWFnZW50YUJyaWdodCxcbiAgY3lhbkJyaWdodCxcbiAgd2hpdGVCcmlnaHQsXG4gIGJnQmxhY2tCcmlnaHQsXG4gIGJnUmVkQnJpZ2h0LFxuICBiZ0dyZWVuQnJpZ2h0LFxuICBiZ1llbGxvd0JyaWdodCxcbiAgYmdCbHVlQnJpZ2h0LFxuICBiZ01hZ2VudGFCcmlnaHQsXG4gIGJnQ3lhbkJyaWdodCxcbiAgYmdXaGl0ZUJyaWdodCxcbn0gPSBjcmVhdGVDb2xvcnMoKVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5jb252ZXJ0U2xhc2hlcyA9IGV4cG9ydHMuY2xlYW5QYXRoID0gdm9pZCAwO1xyXG5jb25zdCBwYXRoXzEgPSByZXF1aXJlKFwicGF0aFwiKTtcclxuZnVuY3Rpb24gY2xlYW5QYXRoKHBhdGgpIHtcclxuICAgIGxldCBub3JtYWxpemVkID0gKDAsIHBhdGhfMS5ub3JtYWxpemUpKHBhdGgpO1xyXG4gICAgLy8gd2UgaGF2ZSB0byByZW1vdmUgdGhlIGxhc3QgcGF0aCBzZXBhcmF0b3JcclxuICAgIC8vIHRvIGFjY291bnQgZm9yIC8gcm9vdCBwYXRoXHJcbiAgICBpZiAobm9ybWFsaXplZC5sZW5ndGggPiAxICYmIG5vcm1hbGl6ZWRbbm9ybWFsaXplZC5sZW5ndGggLSAxXSA9PT0gcGF0aF8xLnNlcClcclxuICAgICAgICBub3JtYWxpemVkID0gbm9ybWFsaXplZC5zdWJzdHJpbmcoMCwgbm9ybWFsaXplZC5sZW5ndGggLSAxKTtcclxuICAgIHJldHVybiBub3JtYWxpemVkO1xyXG59XHJcbmV4cG9ydHMuY2xlYW5QYXRoID0gY2xlYW5QYXRoO1xyXG5jb25zdCBTTEFTSEVTX1JFR0VYID0gL1tcXFxcL10vZztcclxuZnVuY3Rpb24gY29udmVydFNsYXNoZXMocGF0aCwgc2VwYXJhdG9yKSB7XHJcbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKFNMQVNIRVNfUkVHRVgsIHNlcGFyYXRvcik7XHJcbn1cclxuZXhwb3J0cy5jb252ZXJ0U2xhc2hlcyA9IGNvbnZlcnRTbGFzaGVzO1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5leHBvcnRzLmJ1aWxkID0gZXhwb3J0cy5qb2luRGlyZWN0b3J5UGF0aCA9IHZvaWQgMDtcclxuZnVuY3Rpb24gam9pblBhdGhXaXRoQmFzZVBhdGgoZmlsZW5hbWUsIGRpcmVjdG9yeVBhdGgpIHtcclxuICAgIHJldHVybiBkaXJlY3RvcnlQYXRoICsgZmlsZW5hbWU7XHJcbn1cclxuZnVuY3Rpb24gam9pblBhdGhXaXRoUmVsYXRpdmVQYXRoKHJvb3QpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZmlsZW5hbWUsIGRpcmVjdG9yeVBhdGgpIHtcclxuICAgICAgICByZXR1cm4gZGlyZWN0b3J5UGF0aC5zdWJzdHJpbmcocm9vdC5sZW5ndGgpICsgZmlsZW5hbWU7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGpvaW5QYXRoKGZpbGVuYW1lKSB7XHJcbiAgICByZXR1cm4gZmlsZW5hbWU7XHJcbn1cclxuZnVuY3Rpb24gam9pbkRpcmVjdG9yeVBhdGgoZmlsZW5hbWUsIGRpcmVjdG9yeVBhdGgsIHNlcGFyYXRvcikge1xyXG4gICAgcmV0dXJuIGRpcmVjdG9yeVBhdGggKyBmaWxlbmFtZSArIHNlcGFyYXRvcjtcclxufVxyXG5leHBvcnRzLmpvaW5EaXJlY3RvcnlQYXRoID0gam9pbkRpcmVjdG9yeVBhdGg7XHJcbmZ1bmN0aW9uIGJ1aWxkKHJvb3QsIG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHsgcmVsYXRpdmVQYXRocywgaW5jbHVkZUJhc2VQYXRoIH0gPSBvcHRpb25zO1xyXG4gICAgcmV0dXJuIHJlbGF0aXZlUGF0aHMgJiYgcm9vdFxyXG4gICAgICAgID8gam9pblBhdGhXaXRoUmVsYXRpdmVQYXRoKHJvb3QpXHJcbiAgICAgICAgOiBpbmNsdWRlQmFzZVBhdGhcclxuICAgICAgICAgICAgPyBqb2luUGF0aFdpdGhCYXNlUGF0aFxyXG4gICAgICAgICAgICA6IGpvaW5QYXRoO1xyXG59XHJcbmV4cG9ydHMuYnVpbGQgPSBidWlsZDtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5idWlsZCA9IHZvaWQgMDtcclxuY29uc3QgcHVzaERpcmVjdG9yeSA9IChkaXJlY3RvcnlQYXRoLCBwYXRocykgPT4ge1xyXG4gICAgcGF0aHMucHVzaChkaXJlY3RvcnlQYXRoIHx8IFwiLlwiKTtcclxufTtcclxuY29uc3QgcHVzaERpcmVjdG9yeUZpbHRlciA9IChkaXJlY3RvcnlQYXRoLCBwYXRocywgZmlsdGVycykgPT4ge1xyXG4gICAgaWYgKGZpbHRlcnMuZXZlcnkoKGZpbHRlcikgPT4gZmlsdGVyKGRpcmVjdG9yeVBhdGgsIHRydWUpKSkge1xyXG4gICAgICAgIHBhdGhzLnB1c2goZGlyZWN0b3J5UGF0aCk7XHJcbiAgICB9XHJcbn07XHJcbmNvbnN0IGVtcHR5ID0gKCkgPT4geyB9O1xyXG5mdW5jdGlvbiBidWlsZChvcHRpb25zKSB7XHJcbiAgICBjb25zdCB7IGluY2x1ZGVEaXJzLCBmaWx0ZXJzIH0gPSBvcHRpb25zO1xyXG4gICAgaWYgKCFpbmNsdWRlRGlycylcclxuICAgICAgICByZXR1cm4gZW1wdHk7XHJcbiAgICByZXR1cm4gZmlsdGVycyAmJiBmaWx0ZXJzLmxlbmd0aCA/IHB1c2hEaXJlY3RvcnlGaWx0ZXIgOiBwdXNoRGlyZWN0b3J5O1xyXG59XHJcbmV4cG9ydHMuYnVpbGQgPSBidWlsZDtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5idWlsZCA9IHZvaWQgMDtcclxuY29uc3QgcHVzaEZpbGVGaWx0ZXJBbmRDb3VudCA9IChmaWxlbmFtZSwgX3BhdGhzLCBjb3VudHMsIGZpbHRlcnMpID0+IHtcclxuICAgIGlmIChmaWx0ZXJzLmV2ZXJ5KChmaWx0ZXIpID0+IGZpbHRlcihmaWxlbmFtZSwgZmFsc2UpKSlcclxuICAgICAgICBjb3VudHMuZmlsZXMrKztcclxufTtcclxuY29uc3QgcHVzaEZpbGVGaWx0ZXIgPSAoZmlsZW5hbWUsIHBhdGhzLCBfY291bnRzLCBmaWx0ZXJzKSA9PiB7XHJcbiAgICBpZiAoZmlsdGVycy5ldmVyeSgoZmlsdGVyKSA9PiBmaWx0ZXIoZmlsZW5hbWUsIGZhbHNlKSkpXHJcbiAgICAgICAgcGF0aHMucHVzaChmaWxlbmFtZSk7XHJcbn07XHJcbmNvbnN0IHB1c2hGaWxlQ291bnQgPSAoX2ZpbGVuYW1lLCBfcGF0aHMsIGNvdW50cywgX2ZpbHRlcnMpID0+IHtcclxuICAgIGNvdW50cy5maWxlcysrO1xyXG59O1xyXG5jb25zdCBwdXNoRmlsZSA9IChmaWxlbmFtZSwgcGF0aHMpID0+IHtcclxuICAgIHBhdGhzLnB1c2goZmlsZW5hbWUpO1xyXG59O1xyXG5jb25zdCBlbXB0eSA9ICgpID0+IHsgfTtcclxuZnVuY3Rpb24gYnVpbGQob3B0aW9ucykge1xyXG4gICAgY29uc3QgeyBleGNsdWRlRmlsZXMsIGZpbHRlcnMsIG9ubHlDb3VudHMgfSA9IG9wdGlvbnM7XHJcbiAgICBpZiAoZXhjbHVkZUZpbGVzKVxyXG4gICAgICAgIHJldHVybiBlbXB0eTtcclxuICAgIGlmIChmaWx0ZXJzICYmIGZpbHRlcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIG9ubHlDb3VudHMgPyBwdXNoRmlsZUZpbHRlckFuZENvdW50IDogcHVzaEZpbGVGaWx0ZXI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChvbmx5Q291bnRzKSB7XHJcbiAgICAgICAgcmV0dXJuIHB1c2hGaWxlQ291bnQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gcHVzaEZpbGU7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5idWlsZCA9IGJ1aWxkO1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5leHBvcnRzLmJ1aWxkID0gdm9pZCAwO1xyXG5jb25zdCBnZXRBcnJheSA9IChwYXRocykgPT4ge1xyXG4gICAgcmV0dXJuIHBhdGhzO1xyXG59O1xyXG5jb25zdCBnZXRBcnJheUdyb3VwID0gKCkgPT4ge1xyXG4gICAgcmV0dXJuIFtcIlwiXS5zbGljZSgwLCAwKTtcclxufTtcclxuZnVuY3Rpb24gYnVpbGQob3B0aW9ucykge1xyXG4gICAgcmV0dXJuIG9wdGlvbnMuZ3JvdXAgPyBnZXRBcnJheUdyb3VwIDogZ2V0QXJyYXk7XHJcbn1cclxuZXhwb3J0cy5idWlsZCA9IGJ1aWxkO1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5leHBvcnRzLmJ1aWxkID0gdm9pZCAwO1xyXG5jb25zdCBncm91cEZpbGVzID0gKGdyb3VwcywgZGlyZWN0b3J5LCBmaWxlcykgPT4ge1xyXG4gICAgZ3JvdXBzLnB1c2goeyBkaXJlY3RvcnksIGZpbGVzLCBkaXI6IGRpcmVjdG9yeSB9KTtcclxufTtcclxuY29uc3QgZW1wdHkgPSAoKSA9PiB7IH07XHJcbmZ1bmN0aW9uIGJ1aWxkKG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBvcHRpb25zLmdyb3VwID8gZ3JvdXBGaWxlcyA6IGVtcHR5O1xyXG59XHJcbmV4cG9ydHMuYnVpbGQgPSBidWlsZDtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5idWlsZCA9IHZvaWQgMDtcclxuY29uc3QgZnNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiZnNcIikpO1xyXG5jb25zdCByZXNvbHZlU3ltbGlua3NBc3luYyA9IGZ1bmN0aW9uIChwYXRoLCBzdGF0ZSwgY2FsbGJhY2spIHtcclxuICAgIGNvbnN0IHsgcXVldWUsIG9wdGlvbnM6IHsgc3VwcHJlc3NFcnJvcnMgfSwgfSA9IHN0YXRlO1xyXG4gICAgcXVldWUuZW5xdWV1ZSgpO1xyXG4gICAgZnNfMS5kZWZhdWx0LnJlYWxwYXRoKHBhdGgsIChlcnJvciwgcmVzb2x2ZWRQYXRoKSA9PiB7XHJcbiAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHF1ZXVlLmRlcXVldWUoc3VwcHJlc3NFcnJvcnMgPyBudWxsIDogZXJyb3IsIHN0YXRlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmc18xLmRlZmF1bHQubHN0YXQocmVzb2x2ZWRQYXRoLCAoX2Vycm9yLCBzdGF0KSA9PiB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKHN0YXQsIHJlc29sdmVkUGF0aCk7XHJcbiAgICAgICAgICAgIHF1ZXVlLmRlcXVldWUobnVsbCwgc3RhdGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn07XHJcbmNvbnN0IHJlc29sdmVTeW1saW5rc1N5bmMgPSBmdW5jdGlvbiAocGF0aCwgc3RhdGUsIGNhbGxiYWNrKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IGZzXzEuZGVmYXVsdC5yZWFscGF0aFN5bmMocGF0aCk7XHJcbiAgICAgICAgY29uc3Qgc3RhdCA9IGZzXzEuZGVmYXVsdC5sc3RhdFN5bmMocmVzb2x2ZWRQYXRoKTtcclxuICAgICAgICBjYWxsYmFjayhzdGF0LCByZXNvbHZlZFBhdGgpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICBpZiAoIXN0YXRlLm9wdGlvbnMuc3VwcHJlc3NFcnJvcnMpXHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICB9XHJcbn07XHJcbmZ1bmN0aW9uIGJ1aWxkKG9wdGlvbnMsIGlzU3luY2hyb25vdXMpIHtcclxuICAgIGlmICghb3B0aW9ucy5yZXNvbHZlU3ltbGlua3MpXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gaXNTeW5jaHJvbm91cyA/IHJlc29sdmVTeW1saW5rc1N5bmMgOiByZXNvbHZlU3ltbGlua3NBc3luYztcclxufVxyXG5leHBvcnRzLmJ1aWxkID0gYnVpbGQ7XHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmV4cG9ydHMuYnVpbGQgPSB2b2lkIDA7XHJcbmNvbnN0IG9ubHlDb3VudHNTeW5jID0gKHN0YXRlKSA9PiB7XHJcbiAgICByZXR1cm4gc3RhdGUuY291bnRzO1xyXG59O1xyXG5jb25zdCBncm91cHNTeW5jID0gKHN0YXRlKSA9PiB7XHJcbiAgICByZXR1cm4gc3RhdGUuZ3JvdXBzO1xyXG59O1xyXG5jb25zdCBkZWZhdWx0U3luYyA9IChzdGF0ZSkgPT4ge1xyXG4gICAgcmV0dXJuIHN0YXRlLnBhdGhzO1xyXG59O1xyXG5jb25zdCBsaW1pdEZpbGVzU3luYyA9IChzdGF0ZSkgPT4ge1xyXG4gICAgcmV0dXJuIHN0YXRlLnBhdGhzLnNsaWNlKDAsIHN0YXRlLm9wdGlvbnMubWF4RmlsZXMpO1xyXG59O1xyXG5jb25zdCBvbmx5Q291bnRzQXN5bmMgPSAoc3RhdGUsIGVycm9yLCBjYWxsYmFjaykgPT4ge1xyXG4gICAgcmVwb3J0KGVycm9yLCBjYWxsYmFjaywgc3RhdGUuY291bnRzLCBzdGF0ZS5vcHRpb25zLnN1cHByZXNzRXJyb3JzKTtcclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5jb25zdCBkZWZhdWx0QXN5bmMgPSAoc3RhdGUsIGVycm9yLCBjYWxsYmFjaykgPT4ge1xyXG4gICAgcmVwb3J0KGVycm9yLCBjYWxsYmFjaywgc3RhdGUucGF0aHMsIHN0YXRlLm9wdGlvbnMuc3VwcHJlc3NFcnJvcnMpO1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcbmNvbnN0IGxpbWl0RmlsZXNBc3luYyA9IChzdGF0ZSwgZXJyb3IsIGNhbGxiYWNrKSA9PiB7XHJcbiAgICByZXBvcnQoZXJyb3IsIGNhbGxiYWNrLCBzdGF0ZS5wYXRocy5zbGljZSgwLCBzdGF0ZS5vcHRpb25zLm1heEZpbGVzKSwgc3RhdGUub3B0aW9ucy5zdXBwcmVzc0Vycm9ycyk7XHJcbiAgICByZXR1cm4gbnVsbDtcclxufTtcclxuY29uc3QgZ3JvdXBzQXN5bmMgPSAoc3RhdGUsIGVycm9yLCBjYWxsYmFjaykgPT4ge1xyXG4gICAgcmVwb3J0KGVycm9yLCBjYWxsYmFjaywgc3RhdGUuZ3JvdXBzLCBzdGF0ZS5vcHRpb25zLnN1cHByZXNzRXJyb3JzKTtcclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5mdW5jdGlvbiByZXBvcnQoZXJyb3IsIGNhbGxiYWNrLCBvdXRwdXQsIHN1cHByZXNzRXJyb3JzKSB7XHJcbiAgICBpZiAoZXJyb3IgJiYgIXN1cHByZXNzRXJyb3JzKVxyXG4gICAgICAgIGNhbGxiYWNrKGVycm9yLCBvdXRwdXQpO1xyXG4gICAgZWxzZVxyXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIG91dHB1dCk7XHJcbn1cclxuZnVuY3Rpb24gYnVpbGQob3B0aW9ucywgaXNTeW5jaHJvbm91cykge1xyXG4gICAgY29uc3QgeyBvbmx5Q291bnRzLCBncm91cCwgbWF4RmlsZXMgfSA9IG9wdGlvbnM7XHJcbiAgICBpZiAob25seUNvdW50cylcclxuICAgICAgICByZXR1cm4gaXNTeW5jaHJvbm91c1xyXG4gICAgICAgICAgICA/IG9ubHlDb3VudHNTeW5jXHJcbiAgICAgICAgICAgIDogb25seUNvdW50c0FzeW5jO1xyXG4gICAgZWxzZSBpZiAoZ3JvdXApXHJcbiAgICAgICAgcmV0dXJuIGlzU3luY2hyb25vdXNcclxuICAgICAgICAgICAgPyBncm91cHNTeW5jXHJcbiAgICAgICAgICAgIDogZ3JvdXBzQXN5bmM7XHJcbiAgICBlbHNlIGlmIChtYXhGaWxlcylcclxuICAgICAgICByZXR1cm4gaXNTeW5jaHJvbm91c1xyXG4gICAgICAgICAgICA/IGxpbWl0RmlsZXNTeW5jXHJcbiAgICAgICAgICAgIDogbGltaXRGaWxlc0FzeW5jO1xyXG4gICAgZWxzZVxyXG4gICAgICAgIHJldHVybiBpc1N5bmNocm9ub3VzXHJcbiAgICAgICAgICAgID8gZGVmYXVsdFN5bmNcclxuICAgICAgICAgICAgOiBkZWZhdWx0QXN5bmM7XHJcbn1cclxuZXhwb3J0cy5idWlsZCA9IGJ1aWxkO1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5leHBvcnRzLmJ1aWxkID0gdm9pZCAwO1xyXG5jb25zdCBmc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJmc1wiKSk7XHJcbmNvbnN0IHJlYWRkaXJPcHRzID0geyB3aXRoRmlsZVR5cGVzOiB0cnVlIH07XHJcbmNvbnN0IHdhbGtBc3luYyA9IChzdGF0ZSwgZGlyZWN0b3J5UGF0aCwgY3VycmVudERlcHRoLCBjYWxsYmFjaykgPT4ge1xyXG4gICAgc3RhdGUucXVldWUuZW5xdWV1ZSgpO1xyXG4gICAgaWYgKGN1cnJlbnREZXB0aCA8IDApIHtcclxuICAgICAgICBzdGF0ZS5xdWV1ZS5kZXF1ZXVlKG51bGwsIHN0YXRlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBzdGF0ZS5jb3VudHMuZGlyZWN0b3JpZXMrKztcclxuICAgIC8vIFBlcmY6IE5vZGUgPj0gMTAgaW50cm9kdWNlZCB3aXRoRmlsZVR5cGVzIHRoYXQgaGVscHMgdXNcclxuICAgIC8vIHNraXAgYW4gZXh0cmEgZnMuc3RhdCBjYWxsLlxyXG4gICAgZnNfMS5kZWZhdWx0LnJlYWRkaXIoZGlyZWN0b3J5UGF0aCB8fCBcIi5cIiwgcmVhZGRpck9wdHMsIGZ1bmN0aW9uIHByb2Nlc3MoZXJyb3IsIGVudHJpZXMgPSBbXSkge1xyXG4gICAgICAgIGNhbGxiYWNrKGVudHJpZXMsIGRpcmVjdG9yeVBhdGgsIGN1cnJlbnREZXB0aCk7XHJcbiAgICAgICAgc3RhdGUucXVldWUuZGVxdWV1ZShzdGF0ZS5vcHRpb25zLnN1cHByZXNzRXJyb3JzID8gbnVsbCA6IGVycm9yLCBzdGF0ZSk7XHJcbiAgICB9KTtcclxufTtcclxuY29uc3Qgd2Fsa1N5bmMgPSAoc3RhdGUsIGRpcmVjdG9yeVBhdGgsIGN1cnJlbnREZXB0aCwgY2FsbGJhY2spID0+IHtcclxuICAgIGlmIChjdXJyZW50RGVwdGggPCAwKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgc3RhdGUuY291bnRzLmRpcmVjdG9yaWVzKys7XHJcbiAgICBsZXQgZW50cmllcyA9IFtdO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBlbnRyaWVzID0gZnNfMS5kZWZhdWx0LnJlYWRkaXJTeW5jKGRpcmVjdG9yeVBhdGggfHwgXCIuXCIsIHJlYWRkaXJPcHRzKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgaWYgKCFzdGF0ZS5vcHRpb25zLnN1cHByZXNzRXJyb3JzKVxyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgfVxyXG4gICAgY2FsbGJhY2soZW50cmllcywgZGlyZWN0b3J5UGF0aCwgY3VycmVudERlcHRoKTtcclxufTtcclxuZnVuY3Rpb24gYnVpbGQoaXNTeW5jaHJvbm91cykge1xyXG4gICAgcmV0dXJuIGlzU3luY2hyb25vdXMgPyB3YWxrU3luYyA6IHdhbGtBc3luYztcclxufVxyXG5leHBvcnRzLmJ1aWxkID0gYnVpbGQ7XHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmV4cG9ydHMuUXVldWUgPSB2b2lkIDA7XHJcbi8qKlxyXG4gKiBUaGlzIGlzIGEgY3VzdG9tIHN0YXRlbGVzcyBxdWV1ZSB0byB0cmFjayBjb25jdXJyZW50IGFzeW5jIGZzIGNhbGxzLlxyXG4gKiBJdCBpbmNyZW1lbnRzIGEgY291bnRlciB3aGVuZXZlciBhIGNhbGwgaXMgcXVldWVkIGFuZCBkZWNyZW1lbnRzIGl0XHJcbiAqIGFzIHNvb24gYXMgaXQgY29tcGxldGVzLiBXaGVuIHRoZSBjb3VudGVyIGhpdHMgMCwgaXQgY2FsbHMgb25RdWV1ZUVtcHR5LlxyXG4gKi9cclxuY2xhc3MgUXVldWUge1xyXG4gICAgb25RdWV1ZUVtcHR5O1xyXG4gICAgY291bnQgPSAwO1xyXG4gICAgY29uc3RydWN0b3Iob25RdWV1ZUVtcHR5KSB7XHJcbiAgICAgICAgdGhpcy5vblF1ZXVlRW1wdHkgPSBvblF1ZXVlRW1wdHk7XHJcbiAgICB9XHJcbiAgICBlbnF1ZXVlKCkge1xyXG4gICAgICAgIHRoaXMuY291bnQrKztcclxuICAgIH1cclxuICAgIGRlcXVldWUoZXJyb3IsIG91dHB1dCkge1xyXG4gICAgICAgIGlmICgtLXRoaXMuY291bnQgPT09IDAgfHwgZXJyb3IpXHJcbiAgICAgICAgICAgIHRoaXMub25RdWV1ZUVtcHR5KGVycm9yLCBvdXRwdXQpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuUXVldWUgPSBRdWV1ZTtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5Db3VudGVyID0gdm9pZCAwO1xyXG5jbGFzcyBDb3VudGVyIHtcclxuICAgIF9maWxlcyA9IDA7XHJcbiAgICBfZGlyZWN0b3JpZXMgPSAwO1xyXG4gICAgc2V0IGZpbGVzKG51bSkge1xyXG4gICAgICAgIHRoaXMuX2ZpbGVzID0gbnVtO1xyXG4gICAgfVxyXG4gICAgZ2V0IGZpbGVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9maWxlcztcclxuICAgIH1cclxuICAgIHNldCBkaXJlY3RvcmllcyhudW0pIHtcclxuICAgICAgICB0aGlzLl9kaXJlY3RvcmllcyA9IG51bTtcclxuICAgIH1cclxuICAgIGdldCBkaXJlY3RvcmllcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGlyZWN0b3JpZXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBgZGlyZWN0b3JpZXNgIGluc3RlYWRcclxuICAgICAqL1xyXG4gICAgLyogYzggaWdub3JlIG5leHQgMyAqL1xyXG4gICAgZ2V0IGRpcnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RpcmVjdG9yaWVzO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuQ291bnRlciA9IENvdW50ZXI7XHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xyXG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcclxuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KSk7XHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufSk7XHJcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmV4cG9ydHMuV2Fsa2VyID0gdm9pZCAwO1xyXG5jb25zdCBwYXRoXzEgPSByZXF1aXJlKFwicGF0aFwiKTtcclxuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcclxuY29uc3Qgam9pblBhdGggPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vZnVuY3Rpb25zL2pvaW4tcGF0aFwiKSk7XHJcbmNvbnN0IHB1c2hEaXJlY3RvcnkgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vZnVuY3Rpb25zL3B1c2gtZGlyZWN0b3J5XCIpKTtcclxuY29uc3QgcHVzaEZpbGUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vZnVuY3Rpb25zL3B1c2gtZmlsZVwiKSk7XHJcbmNvbnN0IGdldEFycmF5ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2Z1bmN0aW9ucy9nZXQtYXJyYXlcIikpO1xyXG5jb25zdCBncm91cEZpbGVzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2Z1bmN0aW9ucy9ncm91cC1maWxlc1wiKSk7XHJcbmNvbnN0IHJlc29sdmVTeW1saW5rID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2Z1bmN0aW9ucy9yZXNvbHZlLXN5bWxpbmtcIikpO1xyXG5jb25zdCBpbnZva2VDYWxsYmFjayA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9mdW5jdGlvbnMvaW52b2tlLWNhbGxiYWNrXCIpKTtcclxuY29uc3Qgd2Fsa0RpcmVjdG9yeSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9mdW5jdGlvbnMvd2Fsay1kaXJlY3RvcnlcIikpO1xyXG5jb25zdCBxdWV1ZV8xID0gcmVxdWlyZShcIi4vcXVldWVcIik7XHJcbmNvbnN0IGNvdW50ZXJfMSA9IHJlcXVpcmUoXCIuL2NvdW50ZXJcIik7XHJcbmNsYXNzIFdhbGtlciB7XHJcbiAgICByb290O1xyXG4gICAgaXNTeW5jaHJvbm91cztcclxuICAgIHN0YXRlO1xyXG4gICAgam9pblBhdGg7XHJcbiAgICBwdXNoRGlyZWN0b3J5O1xyXG4gICAgcHVzaEZpbGU7XHJcbiAgICBnZXRBcnJheTtcclxuICAgIGdyb3VwRmlsZXM7XHJcbiAgICByZXNvbHZlU3ltbGluaztcclxuICAgIHdhbGtEaXJlY3Rvcnk7XHJcbiAgICBjYWxsYmFja0ludm9rZXI7XHJcbiAgICBjb25zdHJ1Y3Rvcihyb290LCBvcHRpb25zLCBjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuaXNTeW5jaHJvbm91cyA9ICFjYWxsYmFjaztcclxuICAgICAgICB0aGlzLmNhbGxiYWNrSW52b2tlciA9IGludm9rZUNhbGxiYWNrLmJ1aWxkKG9wdGlvbnMsIHRoaXMuaXNTeW5jaHJvbm91cyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgLy8gUGVyZjogd2UgZXhwbGljaXRseSB0ZWxsIHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSBmb3IgU3RyaW5nIGFycmF5c1xyXG4gICAgICAgICAgICBwYXRoczogW1wiXCJdLnNsaWNlKDAsIDApLFxyXG4gICAgICAgICAgICBncm91cHM6IFtdLFxyXG4gICAgICAgICAgICBjb3VudHM6IG5ldyBjb3VudGVyXzEuQ291bnRlcigpLFxyXG4gICAgICAgICAgICBvcHRpb25zLFxyXG4gICAgICAgICAgICBxdWV1ZTogbmV3IHF1ZXVlXzEuUXVldWUoKGVycm9yLCBzdGF0ZSkgPT4gdGhpcy5jYWxsYmFja0ludm9rZXIoc3RhdGUsIGVycm9yLCBjYWxsYmFjaykpLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5yb290ID0gdGhpcy5ub3JtYWxpemVQYXRoKHJvb3QpO1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICogUGVyZjogV2UgY29uZGl0aW9uYWxseSBjaGFuZ2UgZnVuY3Rpb25zIGFjY29yZGluZyB0byBvcHRpb25zLiBUaGlzIGdpdmVzIGEgc2xpZ2h0XHJcbiAgICAgICAgICogcGVyZm9ybWFuY2UgYm9vc3QuIFNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc28gc21hbGwsIHRoZXkgYXJlIGF1dG9tYXRpY2FsbHkgaW5saW5lZFxyXG4gICAgICAgICAqIGJ5IHRoZSBqYXZhc2NyaXB0IGVuZ2luZSBzbyB0aGVyZSdzIG5vIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQgKGluIG1vc3QgY2FzZXMpLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuam9pblBhdGggPSBqb2luUGF0aC5idWlsZCh0aGlzLnJvb3QsIG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMucHVzaERpcmVjdG9yeSA9IHB1c2hEaXJlY3RvcnkuYnVpbGQob3B0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5wdXNoRmlsZSA9IHB1c2hGaWxlLmJ1aWxkKG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuZ2V0QXJyYXkgPSBnZXRBcnJheS5idWlsZChvcHRpb25zKTtcclxuICAgICAgICB0aGlzLmdyb3VwRmlsZXMgPSBncm91cEZpbGVzLmJ1aWxkKG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMucmVzb2x2ZVN5bWxpbmsgPSByZXNvbHZlU3ltbGluay5idWlsZChvcHRpb25zLCB0aGlzLmlzU3luY2hyb25vdXMpO1xyXG4gICAgICAgIHRoaXMud2Fsa0RpcmVjdG9yeSA9IHdhbGtEaXJlY3RvcnkuYnVpbGQodGhpcy5pc1N5bmNocm9ub3VzKTtcclxuICAgIH1cclxuICAgIHN0YXJ0KCkge1xyXG4gICAgICAgIHRoaXMud2Fsa0RpcmVjdG9yeSh0aGlzLnN0YXRlLCB0aGlzLnJvb3QsIHRoaXMuc3RhdGUub3B0aW9ucy5tYXhEZXB0aCwgdGhpcy53YWxrKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1N5bmNocm9ub3VzID8gdGhpcy5jYWxsYmFja0ludm9rZXIodGhpcy5zdGF0ZSwgbnVsbCkgOiBudWxsO1xyXG4gICAgfVxyXG4gICAgbm9ybWFsaXplUGF0aChwYXRoKSB7XHJcbiAgICAgICAgY29uc3QgeyByZXNvbHZlUGF0aHMsIG5vcm1hbGl6ZVBhdGgsIHBhdGhTZXBhcmF0b3IgfSA9IHRoaXMuc3RhdGUub3B0aW9ucztcclxuICAgICAgICBjb25zdCBwYXRoTmVlZHNDbGVhbmluZyA9IChwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCIgJiYgcGF0aC5pbmNsdWRlcyhcIi9cIikpIHx8XHJcbiAgICAgICAgICAgIHBhdGguc3RhcnRzV2l0aChcIi5cIik7XHJcbiAgICAgICAgaWYgKHJlc29sdmVQYXRocylcclxuICAgICAgICAgICAgcGF0aCA9ICgwLCBwYXRoXzEucmVzb2x2ZSkocGF0aCk7XHJcbiAgICAgICAgaWYgKG5vcm1hbGl6ZVBhdGggfHwgcGF0aE5lZWRzQ2xlYW5pbmcpXHJcbiAgICAgICAgICAgIHBhdGggPSAoMCwgdXRpbHNfMS5jbGVhblBhdGgpKHBhdGgpO1xyXG4gICAgICAgIGlmIChwYXRoID09PSBcIi5cIilcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgY29uc3QgbmVlZHNTZXBlcmF0b3IgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV0gIT09IHBhdGhTZXBhcmF0b3I7XHJcbiAgICAgICAgcmV0dXJuICgwLCB1dGlsc18xLmNvbnZlcnRTbGFzaGVzKShuZWVkc1NlcGVyYXRvciA/IHBhdGggKyBwYXRoU2VwYXJhdG9yIDogcGF0aCwgcGF0aFNlcGFyYXRvcik7XHJcbiAgICB9XHJcbiAgICB3YWxrID0gKGVudHJpZXMsIGRpcmVjdG9yeVBhdGgsIGRlcHRoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBwYXRocywgb3B0aW9uczogeyBmaWx0ZXJzLCByZXNvbHZlU3ltbGlua3MsIGV4Y2x1ZGUsIG1heEZpbGVzLCBzaWduYWwgfSwgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgaWYgKChzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpIHx8IChtYXhGaWxlcyAmJiBwYXRocy5sZW5ndGggPiBtYXhGaWxlcykpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB0aGlzLnB1c2hEaXJlY3RvcnkoZGlyZWN0b3J5UGF0aCwgcGF0aHMsIGZpbHRlcnMpO1xyXG4gICAgICAgIGNvbnN0IGZpbGVzID0gdGhpcy5nZXRBcnJheSh0aGlzLnN0YXRlLnBhdGhzKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzW2ldO1xyXG4gICAgICAgICAgICBpZiAoZW50cnkuaXNGaWxlKCkgfHwgKGVudHJ5LmlzU3ltYm9saWNMaW5rKCkgJiYgIXJlc29sdmVTeW1saW5rcykpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVuYW1lID0gdGhpcy5qb2luUGF0aChlbnRyeS5uYW1lLCBkaXJlY3RvcnlQYXRoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucHVzaEZpbGUoZmlsZW5hbWUsIGZpbGVzLCB0aGlzLnN0YXRlLmNvdW50cywgZmlsdGVycyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBhdGggPSBqb2luUGF0aC5qb2luRGlyZWN0b3J5UGF0aChlbnRyeS5uYW1lLCBkaXJlY3RvcnlQYXRoLCB0aGlzLnN0YXRlLm9wdGlvbnMucGF0aFNlcGFyYXRvcik7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhjbHVkZSAmJiBleGNsdWRlKGVudHJ5Lm5hbWUsIHBhdGgpKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy53YWxrRGlyZWN0b3J5KHRoaXMuc3RhdGUsIHBhdGgsIGRlcHRoIC0gMSwgdGhpcy53YWxrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChlbnRyeS5pc1N5bWJvbGljTGluaygpICYmIHJlc29sdmVTeW1saW5rcykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBhdGggPSBqb2luUGF0aC5qb2luRGlyZWN0b3J5UGF0aChlbnRyeS5uYW1lLCBkaXJlY3RvcnlQYXRoLCB0aGlzLnN0YXRlLm9wdGlvbnMucGF0aFNlcGFyYXRvcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVTeW1saW5rKHBhdGgsIHRoaXMuc3RhdGUsIChzdGF0LCByZXNvbHZlZFBhdGgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkUGF0aCA9IHRoaXMubm9ybWFsaXplUGF0aChyZXNvbHZlZFBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhjbHVkZSAmJiBleGNsdWRlKGVudHJ5Lm5hbWUsIHJlc29sdmVkUGF0aCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2Fsa0RpcmVjdG9yeSh0aGlzLnN0YXRlLCByZXNvbHZlZFBhdGgsIGRlcHRoIC0gMSwgdGhpcy53YWxrKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaEZpbGUocmVzb2x2ZWRQYXRoLCBmaWxlcywgdGhpcy5zdGF0ZS5jb3VudHMsIGZpbHRlcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ3JvdXBGaWxlcyh0aGlzLnN0YXRlLmdyb3VwcywgZGlyZWN0b3J5UGF0aCwgZmlsZXMpO1xyXG4gICAgfTtcclxufVxyXG5leHBvcnRzLldhbGtlciA9IFdhbGtlcjtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5jYWxsYmFjayA9IGV4cG9ydHMucHJvbWlzZSA9IHZvaWQgMDtcclxuY29uc3Qgd2Fsa2VyXzEgPSByZXF1aXJlKFwiLi93YWxrZXJcIik7XHJcbmZ1bmN0aW9uIHByb21pc2Uocm9vdCwgb3B0aW9ucykge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBjYWxsYmFjayhyb290LCBvcHRpb25zLCAoZXJyLCBvdXRwdXQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycilcclxuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgcmVzb2x2ZShvdXRwdXQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuZXhwb3J0cy5wcm9taXNlID0gcHJvbWlzZTtcclxuZnVuY3Rpb24gY2FsbGJhY2socm9vdCwgb3B0aW9ucywgY2FsbGJhY2spIHtcclxuICAgIGxldCB3YWxrZXIgPSBuZXcgd2Fsa2VyXzEuV2Fsa2VyKHJvb3QsIG9wdGlvbnMsIGNhbGxiYWNrKTtcclxuICAgIHdhbGtlci5zdGFydCgpO1xyXG59XHJcbmV4cG9ydHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5zeW5jID0gdm9pZCAwO1xyXG5jb25zdCB3YWxrZXJfMSA9IHJlcXVpcmUoXCIuL3dhbGtlclwiKTtcclxuZnVuY3Rpb24gc3luYyhyb290LCBvcHRpb25zKSB7XHJcbiAgICBjb25zdCB3YWxrZXIgPSBuZXcgd2Fsa2VyXzEuV2Fsa2VyKHJvb3QsIG9wdGlvbnMpO1xyXG4gICAgcmV0dXJuIHdhbGtlci5zdGFydCgpO1xyXG59XHJcbmV4cG9ydHMuc3luYyA9IHN5bmM7XHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmV4cG9ydHMuQVBJQnVpbGRlciA9IHZvaWQgMDtcclxuY29uc3QgYXN5bmNfMSA9IHJlcXVpcmUoXCIuLi9hcGkvYXN5bmNcIik7XHJcbmNvbnN0IHN5bmNfMSA9IHJlcXVpcmUoXCIuLi9hcGkvc3luY1wiKTtcclxuY2xhc3MgQVBJQnVpbGRlciB7XHJcbiAgICByb290O1xyXG4gICAgb3B0aW9ucztcclxuICAgIGNvbnN0cnVjdG9yKHJvb3QsIG9wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLnJvb3QgPSByb290O1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICB9XHJcbiAgICB3aXRoUHJvbWlzZSgpIHtcclxuICAgICAgICByZXR1cm4gKDAsIGFzeW5jXzEucHJvbWlzZSkodGhpcy5yb290LCB0aGlzLm9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgd2l0aENhbGxiYWNrKGNiKSB7XHJcbiAgICAgICAgKDAsIGFzeW5jXzEuY2FsbGJhY2spKHRoaXMucm9vdCwgdGhpcy5vcHRpb25zLCBjYik7XHJcbiAgICB9XHJcbiAgICBzeW5jKCkge1xyXG4gICAgICAgIHJldHVybiAoMCwgc3luY18xLnN5bmMpKHRoaXMucm9vdCwgdGhpcy5vcHRpb25zKTtcclxuICAgIH1cclxufVxyXG5leHBvcnRzLkFQSUJ1aWxkZXIgPSBBUElCdWlsZGVyO1xyXG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5jb25zdCBXSU5fU0xBU0ggPSAnXFxcXFxcXFwvJztcbmNvbnN0IFdJTl9OT19TTEFTSCA9IGBbXiR7V0lOX1NMQVNIfV1gO1xuXG4vKipcbiAqIFBvc2l4IGdsb2IgcmVnZXhcbiAqL1xuXG5jb25zdCBET1RfTElURVJBTCA9ICdcXFxcLic7XG5jb25zdCBQTFVTX0xJVEVSQUwgPSAnXFxcXCsnO1xuY29uc3QgUU1BUktfTElURVJBTCA9ICdcXFxcPyc7XG5jb25zdCBTTEFTSF9MSVRFUkFMID0gJ1xcXFwvJztcbmNvbnN0IE9ORV9DSEFSID0gJyg/PS4pJztcbmNvbnN0IFFNQVJLID0gJ1teL10nO1xuY29uc3QgRU5EX0FOQ0hPUiA9IGAoPzoke1NMQVNIX0xJVEVSQUx9fCQpYDtcbmNvbnN0IFNUQVJUX0FOQ0hPUiA9IGAoPzpefCR7U0xBU0hfTElURVJBTH0pYDtcbmNvbnN0IERPVFNfU0xBU0ggPSBgJHtET1RfTElURVJBTH17MSwyfSR7RU5EX0FOQ0hPUn1gO1xuY29uc3QgTk9fRE9UID0gYCg/ISR7RE9UX0xJVEVSQUx9KWA7XG5jb25zdCBOT19ET1RTID0gYCg/ISR7U1RBUlRfQU5DSE9SfSR7RE9UU19TTEFTSH0pYDtcbmNvbnN0IE5PX0RPVF9TTEFTSCA9IGAoPyEke0RPVF9MSVRFUkFMfXswLDF9JHtFTkRfQU5DSE9SfSlgO1xuY29uc3QgTk9fRE9UU19TTEFTSCA9IGAoPyEke0RPVFNfU0xBU0h9KWA7XG5jb25zdCBRTUFSS19OT19ET1QgPSBgW14uJHtTTEFTSF9MSVRFUkFMfV1gO1xuY29uc3QgU1RBUiA9IGAke1FNQVJLfSo/YDtcblxuY29uc3QgUE9TSVhfQ0hBUlMgPSB7XG4gIERPVF9MSVRFUkFMLFxuICBQTFVTX0xJVEVSQUwsXG4gIFFNQVJLX0xJVEVSQUwsXG4gIFNMQVNIX0xJVEVSQUwsXG4gIE9ORV9DSEFSLFxuICBRTUFSSyxcbiAgRU5EX0FOQ0hPUixcbiAgRE9UU19TTEFTSCxcbiAgTk9fRE9ULFxuICBOT19ET1RTLFxuICBOT19ET1RfU0xBU0gsXG4gIE5PX0RPVFNfU0xBU0gsXG4gIFFNQVJLX05PX0RPVCxcbiAgU1RBUixcbiAgU1RBUlRfQU5DSE9SXG59O1xuXG4vKipcbiAqIFdpbmRvd3MgZ2xvYiByZWdleFxuICovXG5cbmNvbnN0IFdJTkRPV1NfQ0hBUlMgPSB7XG4gIC4uLlBPU0lYX0NIQVJTLFxuXG4gIFNMQVNIX0xJVEVSQUw6IGBbJHtXSU5fU0xBU0h9XWAsXG4gIFFNQVJLOiBXSU5fTk9fU0xBU0gsXG4gIFNUQVI6IGAke1dJTl9OT19TTEFTSH0qP2AsXG4gIERPVFNfU0xBU0g6IGAke0RPVF9MSVRFUkFMfXsxLDJ9KD86WyR7V0lOX1NMQVNIfV18JClgLFxuICBOT19ET1Q6IGAoPyEke0RPVF9MSVRFUkFMfSlgLFxuICBOT19ET1RTOiBgKD8hKD86XnxbJHtXSU5fU0xBU0h9XSkke0RPVF9MSVRFUkFMfXsxLDJ9KD86WyR7V0lOX1NMQVNIfV18JCkpYCxcbiAgTk9fRE9UX1NMQVNIOiBgKD8hJHtET1RfTElURVJBTH17MCwxfSg/Olske1dJTl9TTEFTSH1dfCQpKWAsXG4gIE5PX0RPVFNfU0xBU0g6IGAoPyEke0RPVF9MSVRFUkFMfXsxLDJ9KD86WyR7V0lOX1NMQVNIfV18JCkpYCxcbiAgUU1BUktfTk9fRE9UOiBgW14uJHtXSU5fU0xBU0h9XWAsXG4gIFNUQVJUX0FOQ0hPUjogYCg/Ol58WyR7V0lOX1NMQVNIfV0pYCxcbiAgRU5EX0FOQ0hPUjogYCg/Olske1dJTl9TTEFTSH1dfCQpYFxufTtcblxuLyoqXG4gKiBQT1NJWCBCcmFja2V0IFJlZ2V4XG4gKi9cblxuY29uc3QgUE9TSVhfUkVHRVhfU09VUkNFID0ge1xuICBhbG51bTogJ2EtekEtWjAtOScsXG4gIGFscGhhOiAnYS16QS1aJyxcbiAgYXNjaWk6ICdcXFxceDAwLVxcXFx4N0YnLFxuICBibGFuazogJyBcXFxcdCcsXG4gIGNudHJsOiAnXFxcXHgwMC1cXFxceDFGXFxcXHg3RicsXG4gIGRpZ2l0OiAnMC05JyxcbiAgZ3JhcGg6ICdcXFxceDIxLVxcXFx4N0UnLFxuICBsb3dlcjogJ2EteicsXG4gIHByaW50OiAnXFxcXHgyMC1cXFxceDdFICcsXG4gIHB1bmN0OiAnXFxcXC0hXCIjJCUmXFwnKClcXFxcKissLi86Ozw9Pj9AW1xcXFxdXl9ge3x9ficsXG4gIHNwYWNlOiAnIFxcXFx0XFxcXHJcXFxcblxcXFx2XFxcXGYnLFxuICB1cHBlcjogJ0EtWicsXG4gIHdvcmQ6ICdBLVphLXowLTlfJyxcbiAgeGRpZ2l0OiAnQS1GYS1mMC05J1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIE1BWF9MRU5HVEg6IDEwMjQgKiA2NCxcbiAgUE9TSVhfUkVHRVhfU09VUkNFLFxuXG4gIC8vIHJlZ3VsYXIgZXhwcmVzc2lvbnNcbiAgUkVHRVhfQkFDS1NMQVNIOiAvXFxcXCg/IVsqKz9eJHt9KHwpW1xcXV0pL2csXG4gIFJFR0VYX05PTl9TUEVDSUFMX0NIQVJTOiAvXlteQCFbXFxdLiwkKis/Xnt9KCl8XFxcXC9dKy8sXG4gIFJFR0VYX1NQRUNJQUxfQ0hBUlM6IC9bLSorPy5eJHt9KHwpW1xcXV0vLFxuICBSRUdFWF9TUEVDSUFMX0NIQVJTX0JBQ0tSRUY6IC8oXFxcXD8pKChcXFcpKFxcMyopKS9nLFxuICBSRUdFWF9TUEVDSUFMX0NIQVJTX0dMT0JBTDogLyhbLSorPy5eJHt9KHwpW1xcXV0pL2csXG4gIFJFR0VYX1JFTU9WRV9CQUNLU0xBU0g6IC8oPzpcXFsuKj9bXlxcXFxdXFxdfFxcXFwoPz0uKSkvZyxcblxuICAvLyBSZXBsYWNlIGdsb2JzIHdpdGggZXF1aXZhbGVudCBwYXR0ZXJucyB0byByZWR1Y2UgcGFyc2luZyB0aW1lLlxuICBSRVBMQUNFTUVOVFM6IHtcbiAgICAnKioqJzogJyonLFxuICAgICcqKi8qKic6ICcqKicsXG4gICAgJyoqLyoqLyoqJzogJyoqJ1xuICB9LFxuXG4gIC8vIERpZ2l0c1xuICBDSEFSXzA6IDQ4LCAvKiAwICovXG4gIENIQVJfOTogNTcsIC8qIDkgKi9cblxuICAvLyBBbHBoYWJldCBjaGFycy5cbiAgQ0hBUl9VUFBFUkNBU0VfQTogNjUsIC8qIEEgKi9cbiAgQ0hBUl9MT1dFUkNBU0VfQTogOTcsIC8qIGEgKi9cbiAgQ0hBUl9VUFBFUkNBU0VfWjogOTAsIC8qIFogKi9cbiAgQ0hBUl9MT1dFUkNBU0VfWjogMTIyLCAvKiB6ICovXG5cbiAgQ0hBUl9MRUZUX1BBUkVOVEhFU0VTOiA0MCwgLyogKCAqL1xuICBDSEFSX1JJR0hUX1BBUkVOVEhFU0VTOiA0MSwgLyogKSAqL1xuXG4gIENIQVJfQVNURVJJU0s6IDQyLCAvKiAqICovXG5cbiAgLy8gTm9uLWFscGhhYmV0aWMgY2hhcnMuXG4gIENIQVJfQU1QRVJTQU5EOiAzOCwgLyogJiAqL1xuICBDSEFSX0FUOiA2NCwgLyogQCAqL1xuICBDSEFSX0JBQ0tXQVJEX1NMQVNIOiA5MiwgLyogXFwgKi9cbiAgQ0hBUl9DQVJSSUFHRV9SRVRVUk46IDEzLCAvKiBcXHIgKi9cbiAgQ0hBUl9DSVJDVU1GTEVYX0FDQ0VOVDogOTQsIC8qIF4gKi9cbiAgQ0hBUl9DT0xPTjogNTgsIC8qIDogKi9cbiAgQ0hBUl9DT01NQTogNDQsIC8qICwgKi9cbiAgQ0hBUl9ET1Q6IDQ2LCAvKiAuICovXG4gIENIQVJfRE9VQkxFX1FVT1RFOiAzNCwgLyogXCIgKi9cbiAgQ0hBUl9FUVVBTDogNjEsIC8qID0gKi9cbiAgQ0hBUl9FWENMQU1BVElPTl9NQVJLOiAzMywgLyogISAqL1xuICBDSEFSX0ZPUk1fRkVFRDogMTIsIC8qIFxcZiAqL1xuICBDSEFSX0ZPUldBUkRfU0xBU0g6IDQ3LCAvKiAvICovXG4gIENIQVJfR1JBVkVfQUNDRU5UOiA5NiwgLyogYCAqL1xuICBDSEFSX0hBU0g6IDM1LCAvKiAjICovXG4gIENIQVJfSFlQSEVOX01JTlVTOiA0NSwgLyogLSAqL1xuICBDSEFSX0xFRlRfQU5HTEVfQlJBQ0tFVDogNjAsIC8qIDwgKi9cbiAgQ0hBUl9MRUZUX0NVUkxZX0JSQUNFOiAxMjMsIC8qIHsgKi9cbiAgQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUOiA5MSwgLyogWyAqL1xuICBDSEFSX0xJTkVfRkVFRDogMTAsIC8qIFxcbiAqL1xuICBDSEFSX05PX0JSRUFLX1NQQUNFOiAxNjAsIC8qIFxcdTAwQTAgKi9cbiAgQ0hBUl9QRVJDRU5UOiAzNywgLyogJSAqL1xuICBDSEFSX1BMVVM6IDQzLCAvKiArICovXG4gIENIQVJfUVVFU1RJT05fTUFSSzogNjMsIC8qID8gKi9cbiAgQ0hBUl9SSUdIVF9BTkdMRV9CUkFDS0VUOiA2MiwgLyogPiAqL1xuICBDSEFSX1JJR0hUX0NVUkxZX0JSQUNFOiAxMjUsIC8qIH0gKi9cbiAgQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVDogOTMsIC8qIF0gKi9cbiAgQ0hBUl9TRU1JQ09MT046IDU5LCAvKiA7ICovXG4gIENIQVJfU0lOR0xFX1FVT1RFOiAzOSwgLyogJyAqL1xuICBDSEFSX1NQQUNFOiAzMiwgLyogICAqL1xuICBDSEFSX1RBQjogOSwgLyogXFx0ICovXG4gIENIQVJfVU5ERVJTQ09SRTogOTUsIC8qIF8gKi9cbiAgQ0hBUl9WRVJUSUNBTF9MSU5FOiAxMjQsIC8qIHwgKi9cbiAgQ0hBUl9aRVJPX1dJRFRIX05PQlJFQUtfU1BBQ0U6IDY1Mjc5LCAvKiBcXHVGRUZGICovXG5cbiAgU0VQOiBwYXRoLnNlcCxcblxuICAvKipcbiAgICogQ3JlYXRlIEVYVEdMT0JfQ0hBUlNcbiAgICovXG5cbiAgZXh0Z2xvYkNoYXJzKGNoYXJzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICchJzogeyB0eXBlOiAnbmVnYXRlJywgb3BlbjogJyg/Oig/ISg/OicsIGNsb3NlOiBgKSkke2NoYXJzLlNUQVJ9KWAgfSxcbiAgICAgICc/JzogeyB0eXBlOiAncW1hcmsnLCBvcGVuOiAnKD86JywgY2xvc2U6ICcpPycgfSxcbiAgICAgICcrJzogeyB0eXBlOiAncGx1cycsIG9wZW46ICcoPzonLCBjbG9zZTogJykrJyB9LFxuICAgICAgJyonOiB7IHR5cGU6ICdzdGFyJywgb3BlbjogJyg/OicsIGNsb3NlOiAnKSonIH0sXG4gICAgICAnQCc6IHsgdHlwZTogJ2F0Jywgb3BlbjogJyg/OicsIGNsb3NlOiAnKScgfVxuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBHTE9CX0NIQVJTXG4gICAqL1xuXG4gIGdsb2JDaGFycyh3aW4zMikge1xuICAgIHJldHVybiB3aW4zMiA9PT0gdHJ1ZSA/IFdJTkRPV1NfQ0hBUlMgOiBQT1NJWF9DSEFSUztcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IHdpbjMyID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcbmNvbnN0IHtcbiAgUkVHRVhfQkFDS1NMQVNILFxuICBSRUdFWF9SRU1PVkVfQkFDS1NMQVNILFxuICBSRUdFWF9TUEVDSUFMX0NIQVJTLFxuICBSRUdFWF9TUEVDSUFMX0NIQVJTX0dMT0JBTFxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG5cbmV4cG9ydHMuaXNPYmplY3QgPSB2YWwgPT4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCk7XG5leHBvcnRzLmhhc1JlZ2V4Q2hhcnMgPSBzdHIgPT4gUkVHRVhfU1BFQ0lBTF9DSEFSUy50ZXN0KHN0cik7XG5leHBvcnRzLmlzUmVnZXhDaGFyID0gc3RyID0+IHN0ci5sZW5ndGggPT09IDEgJiYgZXhwb3J0cy5oYXNSZWdleENoYXJzKHN0cik7XG5leHBvcnRzLmVzY2FwZVJlZ2V4ID0gc3RyID0+IHN0ci5yZXBsYWNlKFJFR0VYX1NQRUNJQUxfQ0hBUlNfR0xPQkFMLCAnXFxcXCQxJyk7XG5leHBvcnRzLnRvUG9zaXhTbGFzaGVzID0gc3RyID0+IHN0ci5yZXBsYWNlKFJFR0VYX0JBQ0tTTEFTSCwgJy8nKTtcblxuZXhwb3J0cy5yZW1vdmVCYWNrc2xhc2hlcyA9IHN0ciA9PiB7XG4gIHJldHVybiBzdHIucmVwbGFjZShSRUdFWF9SRU1PVkVfQkFDS1NMQVNILCBtYXRjaCA9PiB7XG4gICAgcmV0dXJuIG1hdGNoID09PSAnXFxcXCcgPyAnJyA6IG1hdGNoO1xuICB9KTtcbn07XG5cbmV4cG9ydHMuc3VwcG9ydHNMb29rYmVoaW5kcyA9ICgpID0+IHtcbiAgY29uc3Qgc2VncyA9IHByb2Nlc3MudmVyc2lvbi5zbGljZSgxKS5zcGxpdCgnLicpLm1hcChOdW1iZXIpO1xuICBpZiAoc2Vncy5sZW5ndGggPT09IDMgJiYgc2Vnc1swXSA+PSA5IHx8IChzZWdzWzBdID09PSA4ICYmIHNlZ3NbMV0gPj0gMTApKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0cy5pc1dpbmRvd3MgPSBvcHRpb25zID0+IHtcbiAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMud2luZG93cyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMud2luZG93cztcbiAgfVxuICByZXR1cm4gd2luMzIgPT09IHRydWUgfHwgcGF0aC5zZXAgPT09ICdcXFxcJztcbn07XG5cbmV4cG9ydHMuZXNjYXBlTGFzdCA9IChpbnB1dCwgY2hhciwgbGFzdElkeCkgPT4ge1xuICBjb25zdCBpZHggPSBpbnB1dC5sYXN0SW5kZXhPZihjaGFyLCBsYXN0SWR4KTtcbiAgaWYgKGlkeCA9PT0gLTEpIHJldHVybiBpbnB1dDtcbiAgaWYgKGlucHV0W2lkeCAtIDFdID09PSAnXFxcXCcpIHJldHVybiBleHBvcnRzLmVzY2FwZUxhc3QoaW5wdXQsIGNoYXIsIGlkeCAtIDEpO1xuICByZXR1cm4gYCR7aW5wdXQuc2xpY2UoMCwgaWR4KX1cXFxcJHtpbnB1dC5zbGljZShpZHgpfWA7XG59O1xuXG5leHBvcnRzLnJlbW92ZVByZWZpeCA9IChpbnB1dCwgc3RhdGUgPSB7fSkgPT4ge1xuICBsZXQgb3V0cHV0ID0gaW5wdXQ7XG4gIGlmIChvdXRwdXQuc3RhcnRzV2l0aCgnLi8nKSkge1xuICAgIG91dHB1dCA9IG91dHB1dC5zbGljZSgyKTtcbiAgICBzdGF0ZS5wcmVmaXggPSAnLi8nO1xuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG5leHBvcnRzLndyYXBPdXRwdXQgPSAoaW5wdXQsIHN0YXRlID0ge30sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBwcmVwZW5kID0gb3B0aW9ucy5jb250YWlucyA/ICcnIDogJ14nO1xuICBjb25zdCBhcHBlbmQgPSBvcHRpb25zLmNvbnRhaW5zID8gJycgOiAnJCc7XG5cbiAgbGV0IG91dHB1dCA9IGAke3ByZXBlbmR9KD86JHtpbnB1dH0pJHthcHBlbmR9YDtcbiAgaWYgKHN0YXRlLm5lZ2F0ZWQgPT09IHRydWUpIHtcbiAgICBvdXRwdXQgPSBgKD86Xig/ISR7b3V0cHV0fSkuKiQpYDtcbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5jb25zdCB7XG4gIENIQVJfQVNURVJJU0ssICAgICAgICAgICAgIC8qICogKi9cbiAgQ0hBUl9BVCwgICAgICAgICAgICAgICAgICAgLyogQCAqL1xuICBDSEFSX0JBQ0tXQVJEX1NMQVNILCAgICAgICAvKiBcXCAqL1xuICBDSEFSX0NPTU1BLCAgICAgICAgICAgICAgICAvKiAsICovXG4gIENIQVJfRE9ULCAgICAgICAgICAgICAgICAgIC8qIC4gKi9cbiAgQ0hBUl9FWENMQU1BVElPTl9NQVJLLCAgICAgLyogISAqL1xuICBDSEFSX0ZPUldBUkRfU0xBU0gsICAgICAgICAvKiAvICovXG4gIENIQVJfTEVGVF9DVVJMWV9CUkFDRSwgICAgIC8qIHsgKi9cbiAgQ0hBUl9MRUZUX1BBUkVOVEhFU0VTLCAgICAgLyogKCAqL1xuICBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQsICAvKiBbICovXG4gIENIQVJfUExVUywgICAgICAgICAgICAgICAgIC8qICsgKi9cbiAgQ0hBUl9RVUVTVElPTl9NQVJLLCAgICAgICAgLyogPyAqL1xuICBDSEFSX1JJR0hUX0NVUkxZX0JSQUNFLCAgICAvKiB9ICovXG4gIENIQVJfUklHSFRfUEFSRU5USEVTRVMsICAgIC8qICkgKi9cbiAgQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCAgLyogXSAqL1xufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG5cbmNvbnN0IGlzUGF0aFNlcGFyYXRvciA9IGNvZGUgPT4ge1xuICByZXR1cm4gY29kZSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIIHx8IGNvZGUgPT09IENIQVJfQkFDS1dBUkRfU0xBU0g7XG59O1xuXG5jb25zdCBkZXB0aCA9IHRva2VuID0+IHtcbiAgaWYgKHRva2VuLmlzUHJlZml4ICE9PSB0cnVlKSB7XG4gICAgdG9rZW4uZGVwdGggPSB0b2tlbi5pc0dsb2JzdGFyID8gSW5maW5pdHkgOiAxO1xuICB9XG59O1xuXG4vKipcbiAqIFF1aWNrbHkgc2NhbnMgYSBnbG9iIHBhdHRlcm4gYW5kIHJldHVybnMgYW4gb2JqZWN0IHdpdGggYSBoYW5kZnVsIG9mXG4gKiB1c2VmdWwgcHJvcGVydGllcywgbGlrZSBgaXNHbG9iYCwgYHBhdGhgICh0aGUgbGVhZGluZyBub24tZ2xvYiwgaWYgaXQgZXhpc3RzKSxcbiAqIGBnbG9iYCAodGhlIGFjdHVhbCBwYXR0ZXJuKSwgYG5lZ2F0ZWRgICh0cnVlIGlmIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIGAhYCBidXQgbm90XG4gKiB3aXRoIGAhKGApIGFuZCBgbmVnYXRlZEV4dGdsb2JgICh0cnVlIGlmIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIGAhKGApLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwbSA9IHJlcXVpcmUoJ3BpY29tYXRjaCcpO1xuICogY29uc29sZS5sb2cocG0uc2NhbignZm9vL2Jhci8qLmpzJykpO1xuICogeyBpc0dsb2I6IHRydWUsIGlucHV0OiAnZm9vL2Jhci8qLmpzJywgYmFzZTogJ2Zvby9iYXInLCBnbG9iOiAnKi5qcycgfVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHN0cmBcbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0b2tlbnMgYW5kIHJlZ2V4IHNvdXJjZSBzdHJpbmcuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmNvbnN0IHNjYW4gPSAoaW5wdXQsIG9wdGlvbnMpID0+IHtcbiAgY29uc3Qgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgY29uc3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoIC0gMTtcbiAgY29uc3Qgc2NhblRvRW5kID0gb3B0cy5wYXJ0cyA9PT0gdHJ1ZSB8fCBvcHRzLnNjYW5Ub0VuZCA9PT0gdHJ1ZTtcbiAgY29uc3Qgc2xhc2hlcyA9IFtdO1xuICBjb25zdCB0b2tlbnMgPSBbXTtcbiAgY29uc3QgcGFydHMgPSBbXTtcblxuICBsZXQgc3RyID0gaW5wdXQ7XG4gIGxldCBpbmRleCA9IC0xO1xuICBsZXQgc3RhcnQgPSAwO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgbGV0IGlzQnJhY2UgPSBmYWxzZTtcbiAgbGV0IGlzQnJhY2tldCA9IGZhbHNlO1xuICBsZXQgaXNHbG9iID0gZmFsc2U7XG4gIGxldCBpc0V4dGdsb2IgPSBmYWxzZTtcbiAgbGV0IGlzR2xvYnN0YXIgPSBmYWxzZTtcbiAgbGV0IGJyYWNlRXNjYXBlZCA9IGZhbHNlO1xuICBsZXQgYmFja3NsYXNoZXMgPSBmYWxzZTtcbiAgbGV0IG5lZ2F0ZWQgPSBmYWxzZTtcbiAgbGV0IG5lZ2F0ZWRFeHRnbG9iID0gZmFsc2U7XG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlO1xuICBsZXQgYnJhY2VzID0gMDtcbiAgbGV0IHByZXY7XG4gIGxldCBjb2RlO1xuICBsZXQgdG9rZW4gPSB7IHZhbHVlOiAnJywgZGVwdGg6IDAsIGlzR2xvYjogZmFsc2UgfTtcblxuICBjb25zdCBlb3MgPSAoKSA9PiBpbmRleCA+PSBsZW5ndGg7XG4gIGNvbnN0IHBlZWsgPSAoKSA9PiBzdHIuY2hhckNvZGVBdChpbmRleCArIDEpO1xuICBjb25zdCBhZHZhbmNlID0gKCkgPT4ge1xuICAgIHByZXYgPSBjb2RlO1xuICAgIHJldHVybiBzdHIuY2hhckNvZGVBdCgrK2luZGV4KTtcbiAgfTtcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBjb2RlID0gYWR2YW5jZSgpO1xuICAgIGxldCBuZXh0O1xuXG4gICAgaWYgKGNvZGUgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHtcbiAgICAgIGJhY2tzbGFzaGVzID0gdG9rZW4uYmFja3NsYXNoZXMgPSB0cnVlO1xuICAgICAgY29kZSA9IGFkdmFuY2UoKTtcblxuICAgICAgaWYgKGNvZGUgPT09IENIQVJfTEVGVF9DVVJMWV9CUkFDRSkge1xuICAgICAgICBicmFjZUVzY2FwZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGJyYWNlRXNjYXBlZCA9PT0gdHJ1ZSB8fCBjb2RlID09PSBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0UpIHtcbiAgICAgIGJyYWNlcysrO1xuXG4gICAgICB3aGlsZSAoZW9zKCkgIT09IHRydWUgJiYgKGNvZGUgPSBhZHZhbmNlKCkpKSB7XG4gICAgICAgIGlmIChjb2RlID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSB7XG4gICAgICAgICAgYmFja3NsYXNoZXMgPSB0b2tlbi5iYWNrc2xhc2hlcyA9IHRydWU7XG4gICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvZGUgPT09IENIQVJfTEVGVF9DVVJMWV9CUkFDRSkge1xuICAgICAgICAgIGJyYWNlcysrO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJyYWNlRXNjYXBlZCAhPT0gdHJ1ZSAmJiBjb2RlID09PSBDSEFSX0RPVCAmJiAoY29kZSA9IGFkdmFuY2UoKSkgPT09IENIQVJfRE9UKSB7XG4gICAgICAgICAgaXNCcmFjZSA9IHRva2VuLmlzQnJhY2UgPSB0cnVlO1xuICAgICAgICAgIGlzR2xvYiA9IHRva2VuLmlzR2xvYiA9IHRydWU7XG4gICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKHNjYW5Ub0VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYnJhY2VFc2NhcGVkICE9PSB0cnVlICYmIGNvZGUgPT09IENIQVJfQ09NTUEpIHtcbiAgICAgICAgICBpc0JyYWNlID0gdG9rZW4uaXNCcmFjZSA9IHRydWU7XG4gICAgICAgICAgaXNHbG9iID0gdG9rZW4uaXNHbG9iID0gdHJ1ZTtcbiAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2RlID09PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNFKSB7XG4gICAgICAgICAgYnJhY2VzLS07XG5cbiAgICAgICAgICBpZiAoYnJhY2VzID09PSAwKSB7XG4gICAgICAgICAgICBicmFjZUVzY2FwZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlzQnJhY2UgPSB0b2tlbi5pc0JyYWNlID0gdHJ1ZTtcbiAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIKSB7XG4gICAgICBzbGFzaGVzLnB1c2goaW5kZXgpO1xuICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgdG9rZW4gPSB7IHZhbHVlOiAnJywgZGVwdGg6IDAsIGlzR2xvYjogZmFsc2UgfTtcblxuICAgICAgaWYgKGZpbmlzaGVkID09PSB0cnVlKSBjb250aW51ZTtcbiAgICAgIGlmIChwcmV2ID09PSBDSEFSX0RPVCAmJiBpbmRleCA9PT0gKHN0YXJ0ICsgMSkpIHtcbiAgICAgICAgc3RhcnQgKz0gMjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGxhc3RJbmRleCA9IGluZGV4ICsgMTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChvcHRzLm5vZXh0ICE9PSB0cnVlKSB7XG4gICAgICBjb25zdCBpc0V4dGdsb2JDaGFyID0gY29kZSA9PT0gQ0hBUl9QTFVTXG4gICAgICAgIHx8IGNvZGUgPT09IENIQVJfQVRcbiAgICAgICAgfHwgY29kZSA9PT0gQ0hBUl9BU1RFUklTS1xuICAgICAgICB8fCBjb2RlID09PSBDSEFSX1FVRVNUSU9OX01BUktcbiAgICAgICAgfHwgY29kZSA9PT0gQ0hBUl9FWENMQU1BVElPTl9NQVJLO1xuXG4gICAgICBpZiAoaXNFeHRnbG9iQ2hhciA9PT0gdHJ1ZSAmJiBwZWVrKCkgPT09IENIQVJfTEVGVF9QQVJFTlRIRVNFUykge1xuICAgICAgICBpc0dsb2IgPSB0b2tlbi5pc0dsb2IgPSB0cnVlO1xuICAgICAgICBpc0V4dGdsb2IgPSB0b2tlbi5pc0V4dGdsb2IgPSB0cnVlO1xuICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgICAgIGlmIChjb2RlID09PSBDSEFSX0VYQ0xBTUFUSU9OX01BUksgJiYgaW5kZXggPT09IHN0YXJ0KSB7XG4gICAgICAgICAgbmVnYXRlZEV4dGdsb2IgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjYW5Ub0VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHdoaWxlIChlb3MoKSAhPT0gdHJ1ZSAmJiAoY29kZSA9IGFkdmFuY2UoKSkpIHtcbiAgICAgICAgICAgIGlmIChjb2RlID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSB7XG4gICAgICAgICAgICAgIGJhY2tzbGFzaGVzID0gdG9rZW4uYmFja3NsYXNoZXMgPSB0cnVlO1xuICAgICAgICAgICAgICBjb2RlID0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvZGUgPT09IENIQVJfUklHSFRfUEFSRU5USEVTRVMpIHtcbiAgICAgICAgICAgICAgaXNHbG9iID0gdG9rZW4uaXNHbG9iID0gdHJ1ZTtcbiAgICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPT09IENIQVJfQVNURVJJU0spIHtcbiAgICAgIGlmIChwcmV2ID09PSBDSEFSX0FTVEVSSVNLKSBpc0dsb2JzdGFyID0gdG9rZW4uaXNHbG9ic3RhciA9IHRydWU7XG4gICAgICBpc0dsb2IgPSB0b2tlbi5pc0dsb2IgPSB0cnVlO1xuICAgICAgZmluaXNoZWQgPSB0cnVlO1xuXG4gICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPT09IENIQVJfUVVFU1RJT05fTUFSSykge1xuICAgICAgaXNHbG9iID0gdG9rZW4uaXNHbG9iID0gdHJ1ZTtcbiAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKHNjYW5Ub0VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChjb2RlID09PSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQpIHtcbiAgICAgIHdoaWxlIChlb3MoKSAhPT0gdHJ1ZSAmJiAobmV4dCA9IGFkdmFuY2UoKSkpIHtcbiAgICAgICAgaWYgKG5leHQgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHtcbiAgICAgICAgICBiYWNrc2xhc2hlcyA9IHRva2VuLmJhY2tzbGFzaGVzID0gdHJ1ZTtcbiAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dCA9PT0gQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCkge1xuICAgICAgICAgIGlzQnJhY2tldCA9IHRva2VuLmlzQnJhY2tldCA9IHRydWU7XG4gICAgICAgICAgaXNHbG9iID0gdG9rZW4uaXNHbG9iID0gdHJ1ZTtcbiAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHNjYW5Ub0VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMubm9uZWdhdGUgIT09IHRydWUgJiYgY29kZSA9PT0gQ0hBUl9FWENMQU1BVElPTl9NQVJLICYmIGluZGV4ID09PSBzdGFydCkge1xuICAgICAgbmVnYXRlZCA9IHRva2VuLm5lZ2F0ZWQgPSB0cnVlO1xuICAgICAgc3RhcnQrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChvcHRzLm5vcGFyZW4gIT09IHRydWUgJiYgY29kZSA9PT0gQ0hBUl9MRUZUX1BBUkVOVEhFU0VTKSB7XG4gICAgICBpc0dsb2IgPSB0b2tlbi5pc0dsb2IgPSB0cnVlO1xuXG4gICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgIHdoaWxlIChlb3MoKSAhPT0gdHJ1ZSAmJiAoY29kZSA9IGFkdmFuY2UoKSkpIHtcbiAgICAgICAgICBpZiAoY29kZSA9PT0gQ0hBUl9MRUZUX1BBUkVOVEhFU0VTKSB7XG4gICAgICAgICAgICBiYWNrc2xhc2hlcyA9IHRva2VuLmJhY2tzbGFzaGVzID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvZGUgPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29kZSA9PT0gQ0hBUl9SSUdIVF9QQVJFTlRIRVNFUykge1xuICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGlzR2xvYiA9PT0gdHJ1ZSkge1xuICAgICAgZmluaXNoZWQgPSB0cnVlO1xuXG4gICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAob3B0cy5ub2V4dCA9PT0gdHJ1ZSkge1xuICAgIGlzRXh0Z2xvYiA9IGZhbHNlO1xuICAgIGlzR2xvYiA9IGZhbHNlO1xuICB9XG5cbiAgbGV0IGJhc2UgPSBzdHI7XG4gIGxldCBwcmVmaXggPSAnJztcbiAgbGV0IGdsb2IgPSAnJztcblxuICBpZiAoc3RhcnQgPiAwKSB7XG4gICAgcHJlZml4ID0gc3RyLnNsaWNlKDAsIHN0YXJ0KTtcbiAgICBzdHIgPSBzdHIuc2xpY2Uoc3RhcnQpO1xuICAgIGxhc3RJbmRleCAtPSBzdGFydDtcbiAgfVxuXG4gIGlmIChiYXNlICYmIGlzR2xvYiA9PT0gdHJ1ZSAmJiBsYXN0SW5kZXggPiAwKSB7XG4gICAgYmFzZSA9IHN0ci5zbGljZSgwLCBsYXN0SW5kZXgpO1xuICAgIGdsb2IgPSBzdHIuc2xpY2UobGFzdEluZGV4KTtcbiAgfSBlbHNlIGlmIChpc0dsb2IgPT09IHRydWUpIHtcbiAgICBiYXNlID0gJyc7XG4gICAgZ2xvYiA9IHN0cjtcbiAgfSBlbHNlIHtcbiAgICBiYXNlID0gc3RyO1xuICB9XG5cbiAgaWYgKGJhc2UgJiYgYmFzZSAhPT0gJycgJiYgYmFzZSAhPT0gJy8nICYmIGJhc2UgIT09IHN0cikge1xuICAgIGlmIChpc1BhdGhTZXBhcmF0b3IoYmFzZS5jaGFyQ29kZUF0KGJhc2UubGVuZ3RoIC0gMSkpKSB7XG4gICAgICBiYXNlID0gYmFzZS5zbGljZSgwLCAtMSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdHMudW5lc2NhcGUgPT09IHRydWUpIHtcbiAgICBpZiAoZ2xvYikgZ2xvYiA9IHV0aWxzLnJlbW92ZUJhY2tzbGFzaGVzKGdsb2IpO1xuXG4gICAgaWYgKGJhc2UgJiYgYmFja3NsYXNoZXMgPT09IHRydWUpIHtcbiAgICAgIGJhc2UgPSB1dGlscy5yZW1vdmVCYWNrc2xhc2hlcyhiYXNlKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdGF0ZSA9IHtcbiAgICBwcmVmaXgsXG4gICAgaW5wdXQsXG4gICAgc3RhcnQsXG4gICAgYmFzZSxcbiAgICBnbG9iLFxuICAgIGlzQnJhY2UsXG4gICAgaXNCcmFja2V0LFxuICAgIGlzR2xvYixcbiAgICBpc0V4dGdsb2IsXG4gICAgaXNHbG9ic3RhcixcbiAgICBuZWdhdGVkLFxuICAgIG5lZ2F0ZWRFeHRnbG9iXG4gIH07XG5cbiAgaWYgKG9wdHMudG9rZW5zID09PSB0cnVlKSB7XG4gICAgc3RhdGUubWF4RGVwdGggPSAwO1xuICAgIGlmICghaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgfVxuICAgIHN0YXRlLnRva2VucyA9IHRva2VucztcbiAgfVxuXG4gIGlmIChvcHRzLnBhcnRzID09PSB0cnVlIHx8IG9wdHMudG9rZW5zID09PSB0cnVlKSB7XG4gICAgbGV0IHByZXZJbmRleDtcblxuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHNsYXNoZXMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgY29uc3QgbiA9IHByZXZJbmRleCA/IHByZXZJbmRleCArIDEgOiBzdGFydDtcbiAgICAgIGNvbnN0IGkgPSBzbGFzaGVzW2lkeF07XG4gICAgICBjb25zdCB2YWx1ZSA9IGlucHV0LnNsaWNlKG4sIGkpO1xuICAgICAgaWYgKG9wdHMudG9rZW5zKSB7XG4gICAgICAgIGlmIChpZHggPT09IDAgJiYgc3RhcnQgIT09IDApIHtcbiAgICAgICAgICB0b2tlbnNbaWR4XS5pc1ByZWZpeCA9IHRydWU7XG4gICAgICAgICAgdG9rZW5zW2lkeF0udmFsdWUgPSBwcmVmaXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9rZW5zW2lkeF0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBkZXB0aCh0b2tlbnNbaWR4XSk7XG4gICAgICAgIHN0YXRlLm1heERlcHRoICs9IHRva2Vuc1tpZHhdLmRlcHRoO1xuICAgICAgfVxuICAgICAgaWYgKGlkeCAhPT0gMCB8fCB2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgcGFydHMucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBwcmV2SW5kZXggPSBpO1xuICAgIH1cblxuICAgIGlmIChwcmV2SW5kZXggJiYgcHJldkluZGV4ICsgMSA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dC5zbGljZShwcmV2SW5kZXggKyAxKTtcbiAgICAgIHBhcnRzLnB1c2godmFsdWUpO1xuXG4gICAgICBpZiAob3B0cy50b2tlbnMpIHtcbiAgICAgICAgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICBkZXB0aCh0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgc3RhdGUubWF4RGVwdGggKz0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS5kZXB0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0ZS5zbGFzaGVzID0gc2xhc2hlcztcbiAgICBzdGF0ZS5wYXJ0cyA9IHBhcnRzO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzY2FuO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2NvbnN0YW50cycpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3Qge1xuICBNQVhfTEVOR1RILFxuICBQT1NJWF9SRUdFWF9TT1VSQ0UsXG4gIFJFR0VYX05PTl9TUEVDSUFMX0NIQVJTLFxuICBSRUdFWF9TUEVDSUFMX0NIQVJTX0JBQ0tSRUYsXG4gIFJFUExBQ0VNRU5UU1xufSA9IGNvbnN0YW50cztcblxuLyoqXG4gKiBIZWxwZXJzXG4gKi9cblxuY29uc3QgZXhwYW5kUmFuZ2UgPSAoYXJncywgb3B0aW9ucykgPT4ge1xuICBpZiAodHlwZW9mIG9wdGlvbnMuZXhwYW5kUmFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5leHBhbmRSYW5nZSguLi5hcmdzLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFyZ3Muc29ydCgpO1xuICBjb25zdCB2YWx1ZSA9IGBbJHthcmdzLmpvaW4oJy0nKX1dYDtcblxuICB0cnkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXcgKi9cbiAgICBuZXcgUmVnRXhwKHZhbHVlKTtcbiAgfSBjYXRjaCAoZXgpIHtcbiAgICByZXR1cm4gYXJncy5tYXAodiA9PiB1dGlscy5lc2NhcGVSZWdleCh2KSkuam9pbignLi4nKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBtZXNzYWdlIGZvciBhIHN5bnRheCBlcnJvclxuICovXG5cbmNvbnN0IHN5bnRheEVycm9yID0gKHR5cGUsIGNoYXIpID0+IHtcbiAgcmV0dXJuIGBNaXNzaW5nICR7dHlwZX06IFwiJHtjaGFyfVwiIC0gdXNlIFwiXFxcXFxcXFwke2NoYXJ9XCIgdG8gbWF0Y2ggbGl0ZXJhbCBjaGFyYWN0ZXJzYDtcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGlucHV0IHN0cmluZy5cbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuXG5jb25zdCBwYXJzZSA9IChpbnB1dCwgb3B0aW9ucykgPT4ge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgc3RyaW5nJyk7XG4gIH1cblxuICBpbnB1dCA9IFJFUExBQ0VNRU5UU1tpbnB1dF0gfHwgaW5wdXQ7XG5cbiAgY29uc3Qgb3B0cyA9IHsgLi4ub3B0aW9ucyB9O1xuICBjb25zdCBtYXggPSB0eXBlb2Ygb3B0cy5tYXhMZW5ndGggPT09ICdudW1iZXInID8gTWF0aC5taW4oTUFYX0xFTkdUSCwgb3B0cy5tYXhMZW5ndGgpIDogTUFYX0xFTkdUSDtcblxuICBsZXQgbGVuID0gaW5wdXQubGVuZ3RoO1xuICBpZiAobGVuID4gbWF4KSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBJbnB1dCBsZW5ndGg6ICR7bGVufSwgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgbGVuZ3RoOiAke21heH1gKTtcbiAgfVxuXG4gIGNvbnN0IGJvcyA9IHsgdHlwZTogJ2JvcycsIHZhbHVlOiAnJywgb3V0cHV0OiBvcHRzLnByZXBlbmQgfHwgJycgfTtcbiAgY29uc3QgdG9rZW5zID0gW2Jvc107XG5cbiAgY29uc3QgY2FwdHVyZSA9IG9wdHMuY2FwdHVyZSA/ICcnIDogJz86JztcbiAgY29uc3Qgd2luMzIgPSB1dGlscy5pc1dpbmRvd3Mob3B0aW9ucyk7XG5cbiAgLy8gY3JlYXRlIGNvbnN0YW50cyBiYXNlZCBvbiBwbGF0Zm9ybSwgZm9yIHdpbmRvd3Mgb3IgcG9zaXhcbiAgY29uc3QgUExBVEZPUk1fQ0hBUlMgPSBjb25zdGFudHMuZ2xvYkNoYXJzKHdpbjMyKTtcbiAgY29uc3QgRVhUR0xPQl9DSEFSUyA9IGNvbnN0YW50cy5leHRnbG9iQ2hhcnMoUExBVEZPUk1fQ0hBUlMpO1xuXG4gIGNvbnN0IHtcbiAgICBET1RfTElURVJBTCxcbiAgICBQTFVTX0xJVEVSQUwsXG4gICAgU0xBU0hfTElURVJBTCxcbiAgICBPTkVfQ0hBUixcbiAgICBET1RTX1NMQVNILFxuICAgIE5PX0RPVCxcbiAgICBOT19ET1RfU0xBU0gsXG4gICAgTk9fRE9UU19TTEFTSCxcbiAgICBRTUFSSyxcbiAgICBRTUFSS19OT19ET1QsXG4gICAgU1RBUixcbiAgICBTVEFSVF9BTkNIT1JcbiAgfSA9IFBMQVRGT1JNX0NIQVJTO1xuXG4gIGNvbnN0IGdsb2JzdGFyID0gb3B0cyA9PiB7XG4gICAgcmV0dXJuIGAoJHtjYXB0dXJlfSg/Oig/ISR7U1RBUlRfQU5DSE9SfSR7b3B0cy5kb3QgPyBET1RTX1NMQVNIIDogRE9UX0xJVEVSQUx9KS4pKj8pYDtcbiAgfTtcblxuICBjb25zdCBub2RvdCA9IG9wdHMuZG90ID8gJycgOiBOT19ET1Q7XG4gIGNvbnN0IHFtYXJrTm9Eb3QgPSBvcHRzLmRvdCA/IFFNQVJLIDogUU1BUktfTk9fRE9UO1xuICBsZXQgc3RhciA9IG9wdHMuYmFzaCA9PT0gdHJ1ZSA/IGdsb2JzdGFyKG9wdHMpIDogU1RBUjtcblxuICBpZiAob3B0cy5jYXB0dXJlKSB7XG4gICAgc3RhciA9IGAoJHtzdGFyfSlgO1xuICB9XG5cbiAgLy8gbWluaW1hdGNoIG9wdGlvbnMgc3VwcG9ydFxuICBpZiAodHlwZW9mIG9wdHMubm9leHQgPT09ICdib29sZWFuJykge1xuICAgIG9wdHMubm9leHRnbG9iID0gb3B0cy5ub2V4dDtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIGlucHV0LFxuICAgIGluZGV4OiAtMSxcbiAgICBzdGFydDogMCxcbiAgICBkb3Q6IG9wdHMuZG90ID09PSB0cnVlLFxuICAgIGNvbnN1bWVkOiAnJyxcbiAgICBvdXRwdXQ6ICcnLFxuICAgIHByZWZpeDogJycsXG4gICAgYmFja3RyYWNrOiBmYWxzZSxcbiAgICBuZWdhdGVkOiBmYWxzZSxcbiAgICBicmFja2V0czogMCxcbiAgICBicmFjZXM6IDAsXG4gICAgcGFyZW5zOiAwLFxuICAgIHF1b3RlczogMCxcbiAgICBnbG9ic3RhcjogZmFsc2UsXG4gICAgdG9rZW5zXG4gIH07XG5cbiAgaW5wdXQgPSB1dGlscy5yZW1vdmVQcmVmaXgoaW5wdXQsIHN0YXRlKTtcbiAgbGVuID0gaW5wdXQubGVuZ3RoO1xuXG4gIGNvbnN0IGV4dGdsb2JzID0gW107XG4gIGNvbnN0IGJyYWNlcyA9IFtdO1xuICBjb25zdCBzdGFjayA9IFtdO1xuICBsZXQgcHJldiA9IGJvcztcbiAgbGV0IHZhbHVlO1xuXG4gIC8qKlxuICAgKiBUb2tlbml6aW5nIGhlbHBlcnNcbiAgICovXG5cbiAgY29uc3QgZW9zID0gKCkgPT4gc3RhdGUuaW5kZXggPT09IGxlbiAtIDE7XG4gIGNvbnN0IHBlZWsgPSBzdGF0ZS5wZWVrID0gKG4gPSAxKSA9PiBpbnB1dFtzdGF0ZS5pbmRleCArIG5dO1xuICBjb25zdCBhZHZhbmNlID0gc3RhdGUuYWR2YW5jZSA9ICgpID0+IGlucHV0Wysrc3RhdGUuaW5kZXhdIHx8ICcnO1xuICBjb25zdCByZW1haW5pbmcgPSAoKSA9PiBpbnB1dC5zbGljZShzdGF0ZS5pbmRleCArIDEpO1xuICBjb25zdCBjb25zdW1lID0gKHZhbHVlID0gJycsIG51bSA9IDApID0+IHtcbiAgICBzdGF0ZS5jb25zdW1lZCArPSB2YWx1ZTtcbiAgICBzdGF0ZS5pbmRleCArPSBudW07XG4gIH07XG5cbiAgY29uc3QgYXBwZW5kID0gdG9rZW4gPT4ge1xuICAgIHN0YXRlLm91dHB1dCArPSB0b2tlbi5vdXRwdXQgIT0gbnVsbCA/IHRva2VuLm91dHB1dCA6IHRva2VuLnZhbHVlO1xuICAgIGNvbnN1bWUodG9rZW4udmFsdWUpO1xuICB9O1xuXG4gIGNvbnN0IG5lZ2F0ZSA9ICgpID0+IHtcbiAgICBsZXQgY291bnQgPSAxO1xuXG4gICAgd2hpbGUgKHBlZWsoKSA9PT0gJyEnICYmIChwZWVrKDIpICE9PSAnKCcgfHwgcGVlaygzKSA9PT0gJz8nKSkge1xuICAgICAgYWR2YW5jZSgpO1xuICAgICAgc3RhdGUuc3RhcnQrKztcbiAgICAgIGNvdW50Kys7XG4gICAgfVxuXG4gICAgaWYgKGNvdW50ICUgMiA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHN0YXRlLm5lZ2F0ZWQgPSB0cnVlO1xuICAgIHN0YXRlLnN0YXJ0Kys7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgY29uc3QgaW5jcmVtZW50ID0gdHlwZSA9PiB7XG4gICAgc3RhdGVbdHlwZV0rKztcbiAgICBzdGFjay5wdXNoKHR5cGUpO1xuICB9O1xuXG4gIGNvbnN0IGRlY3JlbWVudCA9IHR5cGUgPT4ge1xuICAgIHN0YXRlW3R5cGVdLS07XG4gICAgc3RhY2sucG9wKCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFB1c2ggdG9rZW5zIG9udG8gdGhlIHRva2VucyBhcnJheS4gVGhpcyBoZWxwZXIgc3BlZWRzIHVwXG4gICAqIHRva2VuaXppbmcgYnkgMSkgaGVscGluZyB1cyBhdm9pZCBiYWNrdHJhY2tpbmcgYXMgbXVjaCBhcyBwb3NzaWJsZSxcbiAgICogYW5kIDIpIGhlbHBpbmcgdXMgYXZvaWQgY3JlYXRpbmcgZXh0cmEgdG9rZW5zIHdoZW4gY29uc2VjdXRpdmVcbiAgICogY2hhcmFjdGVycyBhcmUgcGxhaW4gdGV4dC4gVGhpcyBpbXByb3ZlcyBwZXJmb3JtYW5jZSBhbmQgc2ltcGxpZmllc1xuICAgKiBsb29rYmVoaW5kcy5cbiAgICovXG5cbiAgY29uc3QgcHVzaCA9IHRvayA9PiB7XG4gICAgaWYgKHByZXYudHlwZSA9PT0gJ2dsb2JzdGFyJykge1xuICAgICAgY29uc3QgaXNCcmFjZSA9IHN0YXRlLmJyYWNlcyA+IDAgJiYgKHRvay50eXBlID09PSAnY29tbWEnIHx8IHRvay50eXBlID09PSAnYnJhY2UnKTtcbiAgICAgIGNvbnN0IGlzRXh0Z2xvYiA9IHRvay5leHRnbG9iID09PSB0cnVlIHx8IChleHRnbG9icy5sZW5ndGggJiYgKHRvay50eXBlID09PSAncGlwZScgfHwgdG9rLnR5cGUgPT09ICdwYXJlbicpKTtcblxuICAgICAgaWYgKHRvay50eXBlICE9PSAnc2xhc2gnICYmIHRvay50eXBlICE9PSAncGFyZW4nICYmICFpc0JyYWNlICYmICFpc0V4dGdsb2IpIHtcbiAgICAgICAgc3RhdGUub3V0cHV0ID0gc3RhdGUub3V0cHV0LnNsaWNlKDAsIC1wcmV2Lm91dHB1dC5sZW5ndGgpO1xuICAgICAgICBwcmV2LnR5cGUgPSAnc3Rhcic7XG4gICAgICAgIHByZXYudmFsdWUgPSAnKic7XG4gICAgICAgIHByZXYub3V0cHV0ID0gc3RhcjtcbiAgICAgICAgc3RhdGUub3V0cHV0ICs9IHByZXYub3V0cHV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChleHRnbG9icy5sZW5ndGggJiYgdG9rLnR5cGUgIT09ICdwYXJlbicpIHtcbiAgICAgIGV4dGdsb2JzW2V4dGdsb2JzLmxlbmd0aCAtIDFdLmlubmVyICs9IHRvay52YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodG9rLnZhbHVlIHx8IHRvay5vdXRwdXQpIGFwcGVuZCh0b2spO1xuICAgIGlmIChwcmV2ICYmIHByZXYudHlwZSA9PT0gJ3RleHQnICYmIHRvay50eXBlID09PSAndGV4dCcpIHtcbiAgICAgIHByZXYudmFsdWUgKz0gdG9rLnZhbHVlO1xuICAgICAgcHJldi5vdXRwdXQgPSAocHJldi5vdXRwdXQgfHwgJycpICsgdG9rLnZhbHVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRvay5wcmV2ID0gcHJldjtcbiAgICB0b2tlbnMucHVzaCh0b2spO1xuICAgIHByZXYgPSB0b2s7XG4gIH07XG5cbiAgY29uc3QgZXh0Z2xvYk9wZW4gPSAodHlwZSwgdmFsdWUpID0+IHtcbiAgICBjb25zdCB0b2tlbiA9IHsgLi4uRVhUR0xPQl9DSEFSU1t2YWx1ZV0sIGNvbmRpdGlvbnM6IDEsIGlubmVyOiAnJyB9O1xuXG4gICAgdG9rZW4ucHJldiA9IHByZXY7XG4gICAgdG9rZW4ucGFyZW5zID0gc3RhdGUucGFyZW5zO1xuICAgIHRva2VuLm91dHB1dCA9IHN0YXRlLm91dHB1dDtcbiAgICBjb25zdCBvdXRwdXQgPSAob3B0cy5jYXB0dXJlID8gJygnIDogJycpICsgdG9rZW4ub3BlbjtcblxuICAgIGluY3JlbWVudCgncGFyZW5zJyk7XG4gICAgcHVzaCh7IHR5cGUsIHZhbHVlLCBvdXRwdXQ6IHN0YXRlLm91dHB1dCA/ICcnIDogT05FX0NIQVIgfSk7XG4gICAgcHVzaCh7IHR5cGU6ICdwYXJlbicsIGV4dGdsb2I6IHRydWUsIHZhbHVlOiBhZHZhbmNlKCksIG91dHB1dCB9KTtcbiAgICBleHRnbG9icy5wdXNoKHRva2VuKTtcbiAgfTtcblxuICBjb25zdCBleHRnbG9iQ2xvc2UgPSB0b2tlbiA9PiB7XG4gICAgbGV0IG91dHB1dCA9IHRva2VuLmNsb3NlICsgKG9wdHMuY2FwdHVyZSA/ICcpJyA6ICcnKTtcbiAgICBsZXQgcmVzdDtcblxuICAgIGlmICh0b2tlbi50eXBlID09PSAnbmVnYXRlJykge1xuICAgICAgbGV0IGV4dGdsb2JTdGFyID0gc3RhcjtcblxuICAgICAgaWYgKHRva2VuLmlubmVyICYmIHRva2VuLmlubmVyLmxlbmd0aCA+IDEgJiYgdG9rZW4uaW5uZXIuaW5jbHVkZXMoJy8nKSkge1xuICAgICAgICBleHRnbG9iU3RhciA9IGdsb2JzdGFyKG9wdHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXh0Z2xvYlN0YXIgIT09IHN0YXIgfHwgZW9zKCkgfHwgL15cXCkrJC8udGVzdChyZW1haW5pbmcoKSkpIHtcbiAgICAgICAgb3V0cHV0ID0gdG9rZW4uY2xvc2UgPSBgKSQpKSR7ZXh0Z2xvYlN0YXJ9YDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRva2VuLmlubmVyLmluY2x1ZGVzKCcqJykgJiYgKHJlc3QgPSByZW1haW5pbmcoKSkgJiYgL15cXC5bXlxcXFwvLl0rJC8udGVzdChyZXN0KSkge1xuICAgICAgICAvLyBBbnkgbm9uLW1hZ2ljYWwgc3RyaW5nIChgLnRzYCkgb3IgZXZlbiBuZXN0ZWQgZXhwcmVzc2lvbiAoYC57dHMsdHN4fWApIGNhbiBmb2xsb3cgYWZ0ZXIgdGhlIGNsb3NpbmcgcGFyZW50aGVzaXMuXG4gICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byBwYXJzZSB0aGUgc3RyaW5nIGFuZCB1c2UgaXQgaW4gdGhlIG91dHB1dCBvZiB0aGUgb3JpZ2luYWwgcGF0dGVybi5cbiAgICAgICAgLy8gU3VpdGFibGUgcGF0dGVybnM6IGAvISgqLmQpLnRzYCwgYC8hKCouZCkue3RzLHRzeH1gLCBgKiovISgqLWRiZykuQChqcylgLlxuICAgICAgICAvL1xuICAgICAgICAvLyBEaXNhYmxpbmcgdGhlIGBmYXN0cGF0aHNgIG9wdGlvbiBkdWUgdG8gYSBwcm9ibGVtIHdpdGggcGFyc2luZyBzdHJpbmdzIGFzIGAudHNgIGluIHRoZSBwYXR0ZXJuIGxpa2UgYCoqLyEoKi5kKS50c2AuXG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBwYXJzZShyZXN0LCB7IC4uLm9wdGlvbnMsIGZhc3RwYXRoczogZmFsc2UgfSkub3V0cHV0O1xuXG4gICAgICAgIG91dHB1dCA9IHRva2VuLmNsb3NlID0gYCkke2V4cHJlc3Npb259KSR7ZXh0Z2xvYlN0YXJ9KWA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0b2tlbi5wcmV2LnR5cGUgPT09ICdib3MnKSB7XG4gICAgICAgIHN0YXRlLm5lZ2F0ZWRFeHRnbG9iID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdXNoKHsgdHlwZTogJ3BhcmVuJywgZXh0Z2xvYjogdHJ1ZSwgdmFsdWUsIG91dHB1dCB9KTtcbiAgICBkZWNyZW1lbnQoJ3BhcmVucycpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBGYXN0IHBhdGhzXG4gICAqL1xuXG4gIGlmIChvcHRzLmZhc3RwYXRocyAhPT0gZmFsc2UgJiYgIS8oXlsqIV18Wy8oKVtcXF17fVwiXSkvLnRlc3QoaW5wdXQpKSB7XG4gICAgbGV0IGJhY2tzbGFzaGVzID0gZmFsc2U7XG5cbiAgICBsZXQgb3V0cHV0ID0gaW5wdXQucmVwbGFjZShSRUdFWF9TUEVDSUFMX0NIQVJTX0JBQ0tSRUYsIChtLCBlc2MsIGNoYXJzLCBmaXJzdCwgcmVzdCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChmaXJzdCA9PT0gJ1xcXFwnKSB7XG4gICAgICAgIGJhY2tzbGFzaGVzID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgICB9XG5cbiAgICAgIGlmIChmaXJzdCA9PT0gJz8nKSB7XG4gICAgICAgIGlmIChlc2MpIHtcbiAgICAgICAgICByZXR1cm4gZXNjICsgZmlyc3QgKyAocmVzdCA/IFFNQVJLLnJlcGVhdChyZXN0Lmxlbmd0aCkgOiAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHFtYXJrTm9Eb3QgKyAocmVzdCA/IFFNQVJLLnJlcGVhdChyZXN0Lmxlbmd0aCkgOiAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFFNQVJLLnJlcGVhdChjaGFycy5sZW5ndGgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlyc3QgPT09ICcuJykge1xuICAgICAgICByZXR1cm4gRE9UX0xJVEVSQUwucmVwZWF0KGNoYXJzLmxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaXJzdCA9PT0gJyonKSB7XG4gICAgICAgIGlmIChlc2MpIHtcbiAgICAgICAgICByZXR1cm4gZXNjICsgZmlyc3QgKyAocmVzdCA/IHN0YXIgOiAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXNjID8gbSA6IGBcXFxcJHttfWA7XG4gICAgfSk7XG5cbiAgICBpZiAoYmFja3NsYXNoZXMgPT09IHRydWUpIHtcbiAgICAgIGlmIChvcHRzLnVuZXNjYXBlID09PSB0cnVlKSB7XG4gICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKC9cXFxcL2csICcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKC9cXFxcKy9nLCBtID0+IHtcbiAgICAgICAgICByZXR1cm4gbS5sZW5ndGggJSAyID09PSAwID8gJ1xcXFxcXFxcJyA6IChtID8gJ1xcXFwnIDogJycpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3V0cHV0ID09PSBpbnB1dCAmJiBvcHRzLmNvbnRhaW5zID09PSB0cnVlKSB7XG4gICAgICBzdGF0ZS5vdXRwdXQgPSBpbnB1dDtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBzdGF0ZS5vdXRwdXQgPSB1dGlscy53cmFwT3V0cHV0KG91dHB1dCwgc3RhdGUsIG9wdGlvbnMpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2tlbml6ZSBpbnB1dCB1bnRpbCB3ZSByZWFjaCBlbmQtb2Ytc3RyaW5nXG4gICAqL1xuXG4gIHdoaWxlICghZW9zKCkpIHtcbiAgICB2YWx1ZSA9IGFkdmFuY2UoKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gJ1xcdTAwMDAnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFc2NhcGVkIGNoYXJhY3RlcnNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJ1xcXFwnKSB7XG4gICAgICBjb25zdCBuZXh0ID0gcGVlaygpO1xuXG4gICAgICBpZiAobmV4dCA9PT0gJy8nICYmIG9wdHMuYmFzaCAhPT0gdHJ1ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5leHQgPT09ICcuJyB8fCBuZXh0ID09PSAnOycpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghbmV4dCkge1xuICAgICAgICB2YWx1ZSArPSAnXFxcXCc7XG4gICAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gY29sbGFwc2Ugc2xhc2hlcyB0byByZWR1Y2UgcG90ZW50aWFsIGZvciBleHBsb2l0c1xuICAgICAgY29uc3QgbWF0Y2ggPSAvXlxcXFwrLy5leGVjKHJlbWFpbmluZygpKTtcbiAgICAgIGxldCBzbGFzaGVzID0gMDtcblxuICAgICAgaWYgKG1hdGNoICYmIG1hdGNoWzBdLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgc2xhc2hlcyA9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgc3RhdGUuaW5kZXggKz0gc2xhc2hlcztcbiAgICAgICAgaWYgKHNsYXNoZXMgJSAyICE9PSAwKSB7XG4gICAgICAgICAgdmFsdWUgKz0gJ1xcXFwnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRzLnVuZXNjYXBlID09PSB0cnVlKSB7XG4gICAgICAgIHZhbHVlID0gYWR2YW5jZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgKz0gYWR2YW5jZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUuYnJhY2tldHMgPT09IDApIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElmIHdlJ3JlIGluc2lkZSBhIHJlZ2V4IGNoYXJhY3RlciBjbGFzcywgY29udGludWVcbiAgICAgKiB1bnRpbCB3ZSByZWFjaCB0aGUgY2xvc2luZyBicmFja2V0LlxuICAgICAqL1xuXG4gICAgaWYgKHN0YXRlLmJyYWNrZXRzID4gMCAmJiAodmFsdWUgIT09ICddJyB8fCBwcmV2LnZhbHVlID09PSAnWycgfHwgcHJldi52YWx1ZSA9PT0gJ1teJykpIHtcbiAgICAgIGlmIChvcHRzLnBvc2l4ICE9PSBmYWxzZSAmJiB2YWx1ZSA9PT0gJzonKSB7XG4gICAgICAgIGNvbnN0IGlubmVyID0gcHJldi52YWx1ZS5zbGljZSgxKTtcbiAgICAgICAgaWYgKGlubmVyLmluY2x1ZGVzKCdbJykpIHtcbiAgICAgICAgICBwcmV2LnBvc2l4ID0gdHJ1ZTtcblxuICAgICAgICAgIGlmIChpbm5lci5pbmNsdWRlcygnOicpKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBwcmV2LnZhbHVlLmxhc3RJbmRleE9mKCdbJyk7XG4gICAgICAgICAgICBjb25zdCBwcmUgPSBwcmV2LnZhbHVlLnNsaWNlKDAsIGlkeCk7XG4gICAgICAgICAgICBjb25zdCByZXN0ID0gcHJldi52YWx1ZS5zbGljZShpZHggKyAyKTtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l4ID0gUE9TSVhfUkVHRVhfU09VUkNFW3Jlc3RdO1xuICAgICAgICAgICAgaWYgKHBvc2l4KSB7XG4gICAgICAgICAgICAgIHByZXYudmFsdWUgPSBwcmUgKyBwb3NpeDtcbiAgICAgICAgICAgICAgc3RhdGUuYmFja3RyYWNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYWR2YW5jZSgpO1xuXG4gICAgICAgICAgICAgIGlmICghYm9zLm91dHB1dCAmJiB0b2tlbnMuaW5kZXhPZihwcmV2KSA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGJvcy5vdXRwdXQgPSBPTkVfQ0hBUjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCh2YWx1ZSA9PT0gJ1snICYmIHBlZWsoKSAhPT0gJzonKSB8fCAodmFsdWUgPT09ICctJyAmJiBwZWVrKCkgPT09ICddJykpIHtcbiAgICAgICAgdmFsdWUgPSBgXFxcXCR7dmFsdWV9YDtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlID09PSAnXScgJiYgKHByZXYudmFsdWUgPT09ICdbJyB8fCBwcmV2LnZhbHVlID09PSAnW14nKSkge1xuICAgICAgICB2YWx1ZSA9IGBcXFxcJHt2YWx1ZX1gO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0cy5wb3NpeCA9PT0gdHJ1ZSAmJiB2YWx1ZSA9PT0gJyEnICYmIHByZXYudmFsdWUgPT09ICdbJykge1xuICAgICAgICB2YWx1ZSA9ICdeJztcbiAgICAgIH1cblxuICAgICAgcHJldi52YWx1ZSArPSB2YWx1ZTtcbiAgICAgIGFwcGVuZCh7IHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgd2UncmUgaW5zaWRlIGEgcXVvdGVkIHN0cmluZywgY29udGludWVcbiAgICAgKiB1bnRpbCB3ZSByZWFjaCB0aGUgY2xvc2luZyBkb3VibGUgcXVvdGUuXG4gICAgICovXG5cbiAgICBpZiAoc3RhdGUucXVvdGVzID09PSAxICYmIHZhbHVlICE9PSAnXCInKSB7XG4gICAgICB2YWx1ZSA9IHV0aWxzLmVzY2FwZVJlZ2V4KHZhbHVlKTtcbiAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG4gICAgICBhcHBlbmQoeyB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERvdWJsZSBxdW90ZXNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJ1wiJykge1xuICAgICAgc3RhdGUucXVvdGVzID0gc3RhdGUucXVvdGVzID09PSAxID8gMCA6IDE7XG4gICAgICBpZiAob3B0cy5rZWVwUXVvdGVzID09PSB0cnVlKSB7XG4gICAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyZW50aGVzZXNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJygnKSB7XG4gICAgICBpbmNyZW1lbnQoJ3BhcmVucycpO1xuICAgICAgcHVzaCh7IHR5cGU6ICdwYXJlbicsIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSAnKScpIHtcbiAgICAgIGlmIChzdGF0ZS5wYXJlbnMgPT09IDAgJiYgb3B0cy5zdHJpY3RCcmFja2V0cyA9PT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ludGF4RXJyb3IoJ29wZW5pbmcnLCAnKCcpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXh0Z2xvYiA9IGV4dGdsb2JzW2V4dGdsb2JzLmxlbmd0aCAtIDFdO1xuICAgICAgaWYgKGV4dGdsb2IgJiYgc3RhdGUucGFyZW5zID09PSBleHRnbG9iLnBhcmVucyArIDEpIHtcbiAgICAgICAgZXh0Z2xvYkNsb3NlKGV4dGdsb2JzLnBvcCgpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAncGFyZW4nLCB2YWx1ZSwgb3V0cHV0OiBzdGF0ZS5wYXJlbnMgPyAnKScgOiAnXFxcXCknIH0pO1xuICAgICAgZGVjcmVtZW50KCdwYXJlbnMnKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNxdWFyZSBicmFja2V0c1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSAnWycpIHtcbiAgICAgIGlmIChvcHRzLm5vYnJhY2tldCA9PT0gdHJ1ZSB8fCAhcmVtYWluaW5nKCkuaW5jbHVkZXMoJ10nKSkge1xuICAgICAgICBpZiAob3B0cy5ub2JyYWNrZXQgIT09IHRydWUgJiYgb3B0cy5zdHJpY3RCcmFja2V0cyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzeW50YXhFcnJvcignY2xvc2luZycsICddJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWUgPSBgXFxcXCR7dmFsdWV9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluY3JlbWVudCgnYnJhY2tldHMnKTtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICdicmFja2V0JywgdmFsdWUgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPT09ICddJykge1xuICAgICAgaWYgKG9wdHMubm9icmFja2V0ID09PSB0cnVlIHx8IChwcmV2ICYmIHByZXYudHlwZSA9PT0gJ2JyYWNrZXQnICYmIHByZXYudmFsdWUubGVuZ3RoID09PSAxKSkge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSwgb3V0cHV0OiBgXFxcXCR7dmFsdWV9YCB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZS5icmFja2V0cyA9PT0gMCkge1xuICAgICAgICBpZiAob3B0cy5zdHJpY3RCcmFja2V0cyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzeW50YXhFcnJvcignb3BlbmluZycsICdbJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUsIG91dHB1dDogYFxcXFwke3ZhbHVlfWAgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBkZWNyZW1lbnQoJ2JyYWNrZXRzJyk7XG5cbiAgICAgIGNvbnN0IHByZXZWYWx1ZSA9IHByZXYudmFsdWUuc2xpY2UoMSk7XG4gICAgICBpZiAocHJldi5wb3NpeCAhPT0gdHJ1ZSAmJiBwcmV2VmFsdWVbMF0gPT09ICdeJyAmJiAhcHJldlZhbHVlLmluY2x1ZGVzKCcvJykpIHtcbiAgICAgICAgdmFsdWUgPSBgLyR7dmFsdWV9YDtcbiAgICAgIH1cblxuICAgICAgcHJldi52YWx1ZSArPSB2YWx1ZTtcbiAgICAgIGFwcGVuZCh7IHZhbHVlIH0pO1xuXG4gICAgICAvLyB3aGVuIGxpdGVyYWwgYnJhY2tldHMgYXJlIGV4cGxpY2l0bHkgZGlzYWJsZWRcbiAgICAgIC8vIGFzc3VtZSB3ZSBzaG91bGQgbWF0Y2ggd2l0aCBhIHJlZ2V4IGNoYXJhY3RlciBjbGFzc1xuICAgICAgaWYgKG9wdHMubGl0ZXJhbEJyYWNrZXRzID09PSBmYWxzZSB8fCB1dGlscy5oYXNSZWdleENoYXJzKHByZXZWYWx1ZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVzY2FwZWQgPSB1dGlscy5lc2NhcGVSZWdleChwcmV2LnZhbHVlKTtcbiAgICAgIHN0YXRlLm91dHB1dCA9IHN0YXRlLm91dHB1dC5zbGljZSgwLCAtcHJldi52YWx1ZS5sZW5ndGgpO1xuXG4gICAgICAvLyB3aGVuIGxpdGVyYWwgYnJhY2tldHMgYXJlIGV4cGxpY2l0bHkgZW5hYmxlZFxuICAgICAgLy8gYXNzdW1lIHdlIHNob3VsZCBlc2NhcGUgdGhlIGJyYWNrZXRzIHRvIG1hdGNoIGxpdGVyYWwgY2hhcmFjdGVyc1xuICAgICAgaWYgKG9wdHMubGl0ZXJhbEJyYWNrZXRzID09PSB0cnVlKSB7XG4gICAgICAgIHN0YXRlLm91dHB1dCArPSBlc2NhcGVkO1xuICAgICAgICBwcmV2LnZhbHVlID0gZXNjYXBlZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIHdoZW4gdGhlIHVzZXIgc3BlY2lmaWVzIG5vdGhpbmcsIHRyeSB0byBtYXRjaCBib3RoXG4gICAgICBwcmV2LnZhbHVlID0gYCgke2NhcHR1cmV9JHtlc2NhcGVkfXwke3ByZXYudmFsdWV9KWA7XG4gICAgICBzdGF0ZS5vdXRwdXQgKz0gcHJldi52YWx1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJyYWNlc1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSAneycgJiYgb3B0cy5ub2JyYWNlICE9PSB0cnVlKSB7XG4gICAgICBpbmNyZW1lbnQoJ2JyYWNlcycpO1xuXG4gICAgICBjb25zdCBvcGVuID0ge1xuICAgICAgICB0eXBlOiAnYnJhY2UnLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgb3V0cHV0OiAnKCcsXG4gICAgICAgIG91dHB1dEluZGV4OiBzdGF0ZS5vdXRwdXQubGVuZ3RoLFxuICAgICAgICB0b2tlbnNJbmRleDogc3RhdGUudG9rZW5zLmxlbmd0aFxuICAgICAgfTtcblxuICAgICAgYnJhY2VzLnB1c2gob3Blbik7XG4gICAgICBwdXNoKG9wZW4pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSAnfScpIHtcbiAgICAgIGNvbnN0IGJyYWNlID0gYnJhY2VzW2JyYWNlcy5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKG9wdHMubm9icmFjZSA9PT0gdHJ1ZSB8fCAhYnJhY2UpIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUsIG91dHB1dDogdmFsdWUgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgb3V0cHV0ID0gJyknO1xuXG4gICAgICBpZiAoYnJhY2UuZG90cyA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBhcnIgPSB0b2tlbnMuc2xpY2UoKTtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gYXJyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdG9rZW5zLnBvcCgpO1xuICAgICAgICAgIGlmIChhcnJbaV0udHlwZSA9PT0gJ2JyYWNlJykge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhcnJbaV0udHlwZSAhPT0gJ2RvdHMnKSB7XG4gICAgICAgICAgICByYW5nZS51bnNoaWZ0KGFycltpXS52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgb3V0cHV0ID0gZXhwYW5kUmFuZ2UocmFuZ2UsIG9wdHMpO1xuICAgICAgICBzdGF0ZS5iYWNrdHJhY2sgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoYnJhY2UuY29tbWEgIT09IHRydWUgJiYgYnJhY2UuZG90cyAhPT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBvdXQgPSBzdGF0ZS5vdXRwdXQuc2xpY2UoMCwgYnJhY2Uub3V0cHV0SW5kZXgpO1xuICAgICAgICBjb25zdCB0b2tzID0gc3RhdGUudG9rZW5zLnNsaWNlKGJyYWNlLnRva2Vuc0luZGV4KTtcbiAgICAgICAgYnJhY2UudmFsdWUgPSBicmFjZS5vdXRwdXQgPSAnXFxcXHsnO1xuICAgICAgICB2YWx1ZSA9IG91dHB1dCA9ICdcXFxcfSc7XG4gICAgICAgIHN0YXRlLm91dHB1dCA9IG91dDtcbiAgICAgICAgZm9yIChjb25zdCB0IG9mIHRva3MpIHtcbiAgICAgICAgICBzdGF0ZS5vdXRwdXQgKz0gKHQub3V0cHV0IHx8IHQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAnYnJhY2UnLCB2YWx1ZSwgb3V0cHV0IH0pO1xuICAgICAgZGVjcmVtZW50KCdicmFjZXMnKTtcbiAgICAgIGJyYWNlcy5wb3AoKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBpcGVzXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICd8Jykge1xuICAgICAgaWYgKGV4dGdsb2JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXh0Z2xvYnNbZXh0Z2xvYnMubGVuZ3RoIC0gMV0uY29uZGl0aW9ucysrO1xuICAgICAgfVxuICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21tYXNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJywnKSB7XG4gICAgICBsZXQgb3V0cHV0ID0gdmFsdWU7XG5cbiAgICAgIGNvbnN0IGJyYWNlID0gYnJhY2VzW2JyYWNlcy5sZW5ndGggLSAxXTtcbiAgICAgIGlmIChicmFjZSAmJiBzdGFja1tzdGFjay5sZW5ndGggLSAxXSA9PT0gJ2JyYWNlcycpIHtcbiAgICAgICAgYnJhY2UuY29tbWEgPSB0cnVlO1xuICAgICAgICBvdXRwdXQgPSAnfCc7XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAnY29tbWEnLCB2YWx1ZSwgb3V0cHV0IH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2xhc2hlc1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSAnLycpIHtcbiAgICAgIC8vIGlmIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGdsb2IgaXMgXCIuL1wiLCBhZHZhbmNlIHRoZSBzdGFydFxuICAgICAgLy8gdG8gdGhlIGN1cnJlbnQgaW5kZXgsIGFuZCBkb24ndCBhZGQgdGhlIFwiLi9cIiBjaGFyYWN0ZXJzXG4gICAgICAvLyB0byB0aGUgc3RhdGUuIFRoaXMgZ3JlYXRseSBzaW1wbGlmaWVzIGxvb2tiZWhpbmRzIHdoZW5cbiAgICAgIC8vIGNoZWNraW5nIGZvciBCT1MgY2hhcmFjdGVycyBsaWtlIFwiIVwiIGFuZCBcIi5cIiAobm90IFwiLi9cIilcbiAgICAgIGlmIChwcmV2LnR5cGUgPT09ICdkb3QnICYmIHN0YXRlLmluZGV4ID09PSBzdGF0ZS5zdGFydCArIDEpIHtcbiAgICAgICAgc3RhdGUuc3RhcnQgPSBzdGF0ZS5pbmRleCArIDE7XG4gICAgICAgIHN0YXRlLmNvbnN1bWVkID0gJyc7XG4gICAgICAgIHN0YXRlLm91dHB1dCA9ICcnO1xuICAgICAgICB0b2tlbnMucG9wKCk7XG4gICAgICAgIHByZXYgPSBib3M7IC8vIHJlc2V0IFwicHJldlwiIHRvIHRoZSBmaXJzdCB0b2tlblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICdzbGFzaCcsIHZhbHVlLCBvdXRwdXQ6IFNMQVNIX0xJVEVSQUwgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEb3RzXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICcuJykge1xuICAgICAgaWYgKHN0YXRlLmJyYWNlcyA+IDAgJiYgcHJldi50eXBlID09PSAnZG90Jykge1xuICAgICAgICBpZiAocHJldi52YWx1ZSA9PT0gJy4nKSBwcmV2Lm91dHB1dCA9IERPVF9MSVRFUkFMO1xuICAgICAgICBjb25zdCBicmFjZSA9IGJyYWNlc1ticmFjZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIHByZXYudHlwZSA9ICdkb3RzJztcbiAgICAgICAgcHJldi5vdXRwdXQgKz0gdmFsdWU7XG4gICAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG4gICAgICAgIGJyYWNlLmRvdHMgPSB0cnVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKChzdGF0ZS5icmFjZXMgKyBzdGF0ZS5wYXJlbnMpID09PSAwICYmIHByZXYudHlwZSAhPT0gJ2JvcycgJiYgcHJldi50eXBlICE9PSAnc2xhc2gnKSB7XG4gICAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlLCBvdXRwdXQ6IERPVF9MSVRFUkFMIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICdkb3QnLCB2YWx1ZSwgb3V0cHV0OiBET1RfTElURVJBTCB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFF1ZXN0aW9uIG1hcmtzXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICc/Jykge1xuICAgICAgY29uc3QgaXNHcm91cCA9IHByZXYgJiYgcHJldi52YWx1ZSA9PT0gJygnO1xuICAgICAgaWYgKCFpc0dyb3VwICYmIG9wdHMubm9leHRnbG9iICE9PSB0cnVlICYmIHBlZWsoKSA9PT0gJygnICYmIHBlZWsoMikgIT09ICc/Jykge1xuICAgICAgICBleHRnbG9iT3BlbigncW1hcmsnLCB2YWx1ZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJldiAmJiBwcmV2LnR5cGUgPT09ICdwYXJlbicpIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHBlZWsoKTtcbiAgICAgICAgbGV0IG91dHB1dCA9IHZhbHVlO1xuXG4gICAgICAgIGlmIChuZXh0ID09PSAnPCcgJiYgIXV0aWxzLnN1cHBvcnRzTG9va2JlaGluZHMoKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm9kZS5qcyB2MTAgb3IgaGlnaGVyIGlzIHJlcXVpcmVkIGZvciByZWdleCBsb29rYmVoaW5kcycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChwcmV2LnZhbHVlID09PSAnKCcgJiYgIS9bIT08Ol0vLnRlc3QobmV4dCkpIHx8IChuZXh0ID09PSAnPCcgJiYgIS88KFshPV18XFx3Kz4pLy50ZXN0KHJlbWFpbmluZygpKSkpIHtcbiAgICAgICAgICBvdXRwdXQgPSBgXFxcXCR7dmFsdWV9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlLCBvdXRwdXQgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0cy5kb3QgIT09IHRydWUgJiYgKHByZXYudHlwZSA9PT0gJ3NsYXNoJyB8fCBwcmV2LnR5cGUgPT09ICdib3MnKSkge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3FtYXJrJywgdmFsdWUsIG91dHB1dDogUU1BUktfTk9fRE9UIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICdxbWFyaycsIHZhbHVlLCBvdXRwdXQ6IFFNQVJLIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhjbGFtYXRpb25cbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJyEnKSB7XG4gICAgICBpZiAob3B0cy5ub2V4dGdsb2IgIT09IHRydWUgJiYgcGVlaygpID09PSAnKCcpIHtcbiAgICAgICAgaWYgKHBlZWsoMikgIT09ICc/JyB8fCAhL1shPTw6XS8udGVzdChwZWVrKDMpKSkge1xuICAgICAgICAgIGV4dGdsb2JPcGVuKCduZWdhdGUnLCB2YWx1ZSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG9wdHMubm9uZWdhdGUgIT09IHRydWUgJiYgc3RhdGUuaW5kZXggPT09IDApIHtcbiAgICAgICAgbmVnYXRlKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBsdXNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJysnKSB7XG4gICAgICBpZiAob3B0cy5ub2V4dGdsb2IgIT09IHRydWUgJiYgcGVlaygpID09PSAnKCcgJiYgcGVlaygyKSAhPT0gJz8nKSB7XG4gICAgICAgIGV4dGdsb2JPcGVuKCdwbHVzJywgdmFsdWUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKChwcmV2ICYmIHByZXYudmFsdWUgPT09ICcoJykgfHwgb3B0cy5yZWdleCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICdwbHVzJywgdmFsdWUsIG91dHB1dDogUExVU19MSVRFUkFMIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKChwcmV2ICYmIChwcmV2LnR5cGUgPT09ICdicmFja2V0JyB8fCBwcmV2LnR5cGUgPT09ICdwYXJlbicgfHwgcHJldi50eXBlID09PSAnYnJhY2UnKSkgfHwgc3RhdGUucGFyZW5zID4gMCkge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3BsdXMnLCB2YWx1ZSB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAncGx1cycsIHZhbHVlOiBQTFVTX0xJVEVSQUwgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQbGFpbiB0ZXh0XG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICdAJykge1xuICAgICAgaWYgKG9wdHMubm9leHRnbG9iICE9PSB0cnVlICYmIHBlZWsoKSA9PT0gJygnICYmIHBlZWsoMikgIT09ICc/Jykge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ2F0JywgZXh0Z2xvYjogdHJ1ZSwgdmFsdWUsIG91dHB1dDogJycgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBsYWluIHRleHRcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSAhPT0gJyonKSB7XG4gICAgICBpZiAodmFsdWUgPT09ICckJyB8fCB2YWx1ZSA9PT0gJ14nKSB7XG4gICAgICAgIHZhbHVlID0gYFxcXFwke3ZhbHVlfWA7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hdGNoID0gUkVHRVhfTk9OX1NQRUNJQUxfQ0hBUlMuZXhlYyhyZW1haW5pbmcoKSk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgdmFsdWUgKz0gbWF0Y2hbMF07XG4gICAgICAgIHN0YXRlLmluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdGFyc1xuICAgICAqL1xuXG4gICAgaWYgKHByZXYgJiYgKHByZXYudHlwZSA9PT0gJ2dsb2JzdGFyJyB8fCBwcmV2LnN0YXIgPT09IHRydWUpKSB7XG4gICAgICBwcmV2LnR5cGUgPSAnc3Rhcic7XG4gICAgICBwcmV2LnN0YXIgPSB0cnVlO1xuICAgICAgcHJldi52YWx1ZSArPSB2YWx1ZTtcbiAgICAgIHByZXYub3V0cHV0ID0gc3RhcjtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayA9IHRydWU7XG4gICAgICBzdGF0ZS5nbG9ic3RhciA9IHRydWU7XG4gICAgICBjb25zdW1lKHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGxldCByZXN0ID0gcmVtYWluaW5nKCk7XG4gICAgaWYgKG9wdHMubm9leHRnbG9iICE9PSB0cnVlICYmIC9eXFwoW14/XS8udGVzdChyZXN0KSkge1xuICAgICAgZXh0Z2xvYk9wZW4oJ3N0YXInLCB2YWx1ZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocHJldi50eXBlID09PSAnc3RhcicpIHtcbiAgICAgIGlmIChvcHRzLm5vZ2xvYnN0YXIgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3VtZSh2YWx1ZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcmlvciA9IHByZXYucHJldjtcbiAgICAgIGNvbnN0IGJlZm9yZSA9IHByaW9yLnByZXY7XG4gICAgICBjb25zdCBpc1N0YXJ0ID0gcHJpb3IudHlwZSA9PT0gJ3NsYXNoJyB8fCBwcmlvci50eXBlID09PSAnYm9zJztcbiAgICAgIGNvbnN0IGFmdGVyU3RhciA9IGJlZm9yZSAmJiAoYmVmb3JlLnR5cGUgPT09ICdzdGFyJyB8fCBiZWZvcmUudHlwZSA9PT0gJ2dsb2JzdGFyJyk7XG5cbiAgICAgIGlmIChvcHRzLmJhc2ggPT09IHRydWUgJiYgKCFpc1N0YXJ0IHx8IChyZXN0WzBdICYmIHJlc3RbMF0gIT09ICcvJykpKSB7XG4gICAgICAgIHB1c2goeyB0eXBlOiAnc3RhcicsIHZhbHVlLCBvdXRwdXQ6ICcnIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNCcmFjZSA9IHN0YXRlLmJyYWNlcyA+IDAgJiYgKHByaW9yLnR5cGUgPT09ICdjb21tYScgfHwgcHJpb3IudHlwZSA9PT0gJ2JyYWNlJyk7XG4gICAgICBjb25zdCBpc0V4dGdsb2IgPSBleHRnbG9icy5sZW5ndGggJiYgKHByaW9yLnR5cGUgPT09ICdwaXBlJyB8fCBwcmlvci50eXBlID09PSAncGFyZW4nKTtcbiAgICAgIGlmICghaXNTdGFydCAmJiBwcmlvci50eXBlICE9PSAncGFyZW4nICYmICFpc0JyYWNlICYmICFpc0V4dGdsb2IpIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICdzdGFyJywgdmFsdWUsIG91dHB1dDogJycgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBzdHJpcCBjb25zZWN1dGl2ZSBgLyoqL2BcbiAgICAgIHdoaWxlIChyZXN0LnNsaWNlKDAsIDMpID09PSAnLyoqJykge1xuICAgICAgICBjb25zdCBhZnRlciA9IGlucHV0W3N0YXRlLmluZGV4ICsgNF07XG4gICAgICAgIGlmIChhZnRlciAmJiBhZnRlciAhPT0gJy8nKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoMyk7XG4gICAgICAgIGNvbnN1bWUoJy8qKicsIDMpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJpb3IudHlwZSA9PT0gJ2JvcycgJiYgZW9zKCkpIHtcbiAgICAgICAgcHJldi50eXBlID0gJ2dsb2JzdGFyJztcbiAgICAgICAgcHJldi52YWx1ZSArPSB2YWx1ZTtcbiAgICAgICAgcHJldi5vdXRwdXQgPSBnbG9ic3RhcihvcHRzKTtcbiAgICAgICAgc3RhdGUub3V0cHV0ID0gcHJldi5vdXRwdXQ7XG4gICAgICAgIHN0YXRlLmdsb2JzdGFyID0gdHJ1ZTtcbiAgICAgICAgY29uc3VtZSh2YWx1ZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJpb3IudHlwZSA9PT0gJ3NsYXNoJyAmJiBwcmlvci5wcmV2LnR5cGUgIT09ICdib3MnICYmICFhZnRlclN0YXIgJiYgZW9zKCkpIHtcbiAgICAgICAgc3RhdGUub3V0cHV0ID0gc3RhdGUub3V0cHV0LnNsaWNlKDAsIC0ocHJpb3Iub3V0cHV0ICsgcHJldi5vdXRwdXQpLmxlbmd0aCk7XG4gICAgICAgIHByaW9yLm91dHB1dCA9IGAoPzoke3ByaW9yLm91dHB1dH1gO1xuXG4gICAgICAgIHByZXYudHlwZSA9ICdnbG9ic3Rhcic7XG4gICAgICAgIHByZXYub3V0cHV0ID0gZ2xvYnN0YXIob3B0cykgKyAob3B0cy5zdHJpY3RTbGFzaGVzID8gJyknIDogJ3wkKScpO1xuICAgICAgICBwcmV2LnZhbHVlICs9IHZhbHVlO1xuICAgICAgICBzdGF0ZS5nbG9ic3RhciA9IHRydWU7XG4gICAgICAgIHN0YXRlLm91dHB1dCArPSBwcmlvci5vdXRwdXQgKyBwcmV2Lm91dHB1dDtcbiAgICAgICAgY29uc3VtZSh2YWx1ZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJpb3IudHlwZSA9PT0gJ3NsYXNoJyAmJiBwcmlvci5wcmV2LnR5cGUgIT09ICdib3MnICYmIHJlc3RbMF0gPT09ICcvJykge1xuICAgICAgICBjb25zdCBlbmQgPSByZXN0WzFdICE9PSB2b2lkIDAgPyAnfCQnIDogJyc7XG5cbiAgICAgICAgc3RhdGUub3V0cHV0ID0gc3RhdGUub3V0cHV0LnNsaWNlKDAsIC0ocHJpb3Iub3V0cHV0ICsgcHJldi5vdXRwdXQpLmxlbmd0aCk7XG4gICAgICAgIHByaW9yLm91dHB1dCA9IGAoPzoke3ByaW9yLm91dHB1dH1gO1xuXG4gICAgICAgIHByZXYudHlwZSA9ICdnbG9ic3Rhcic7XG4gICAgICAgIHByZXYub3V0cHV0ID0gYCR7Z2xvYnN0YXIob3B0cyl9JHtTTEFTSF9MSVRFUkFMfXwke1NMQVNIX0xJVEVSQUx9JHtlbmR9KWA7XG4gICAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG5cbiAgICAgICAgc3RhdGUub3V0cHV0ICs9IHByaW9yLm91dHB1dCArIHByZXYub3V0cHV0O1xuICAgICAgICBzdGF0ZS5nbG9ic3RhciA9IHRydWU7XG5cbiAgICAgICAgY29uc3VtZSh2YWx1ZSArIGFkdmFuY2UoKSk7XG5cbiAgICAgICAgcHVzaCh7IHR5cGU6ICdzbGFzaCcsIHZhbHVlOiAnLycsIG91dHB1dDogJycgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJpb3IudHlwZSA9PT0gJ2JvcycgJiYgcmVzdFswXSA9PT0gJy8nKSB7XG4gICAgICAgIHByZXYudHlwZSA9ICdnbG9ic3Rhcic7XG4gICAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG4gICAgICAgIHByZXYub3V0cHV0ID0gYCg/Ol58JHtTTEFTSF9MSVRFUkFMfXwke2dsb2JzdGFyKG9wdHMpfSR7U0xBU0hfTElURVJBTH0pYDtcbiAgICAgICAgc3RhdGUub3V0cHV0ID0gcHJldi5vdXRwdXQ7XG4gICAgICAgIHN0YXRlLmdsb2JzdGFyID0gdHJ1ZTtcbiAgICAgICAgY29uc3VtZSh2YWx1ZSArIGFkdmFuY2UoKSk7XG4gICAgICAgIHB1c2goeyB0eXBlOiAnc2xhc2gnLCB2YWx1ZTogJy8nLCBvdXRwdXQ6ICcnIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gcmVtb3ZlIHNpbmdsZSBzdGFyIGZyb20gb3V0cHV0XG4gICAgICBzdGF0ZS5vdXRwdXQgPSBzdGF0ZS5vdXRwdXQuc2xpY2UoMCwgLXByZXYub3V0cHV0Lmxlbmd0aCk7XG5cbiAgICAgIC8vIHJlc2V0IHByZXZpb3VzIHRva2VuIHRvIGdsb2JzdGFyXG4gICAgICBwcmV2LnR5cGUgPSAnZ2xvYnN0YXInO1xuICAgICAgcHJldi5vdXRwdXQgPSBnbG9ic3RhcihvcHRzKTtcbiAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG5cbiAgICAgIC8vIHJlc2V0IG91dHB1dCB3aXRoIGdsb2JzdGFyXG4gICAgICBzdGF0ZS5vdXRwdXQgKz0gcHJldi5vdXRwdXQ7XG4gICAgICBzdGF0ZS5nbG9ic3RhciA9IHRydWU7XG4gICAgICBjb25zdW1lKHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHRva2VuID0geyB0eXBlOiAnc3RhcicsIHZhbHVlLCBvdXRwdXQ6IHN0YXIgfTtcblxuICAgIGlmIChvcHRzLmJhc2ggPT09IHRydWUpIHtcbiAgICAgIHRva2VuLm91dHB1dCA9ICcuKj8nO1xuICAgICAgaWYgKHByZXYudHlwZSA9PT0gJ2JvcycgfHwgcHJldi50eXBlID09PSAnc2xhc2gnKSB7XG4gICAgICAgIHRva2VuLm91dHB1dCA9IG5vZG90ICsgdG9rZW4ub3V0cHV0O1xuICAgICAgfVxuICAgICAgcHVzaCh0b2tlbik7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocHJldiAmJiAocHJldi50eXBlID09PSAnYnJhY2tldCcgfHwgcHJldi50eXBlID09PSAncGFyZW4nKSAmJiBvcHRzLnJlZ2V4ID09PSB0cnVlKSB7XG4gICAgICB0b2tlbi5vdXRwdXQgPSB2YWx1ZTtcbiAgICAgIHB1c2godG9rZW4pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmluZGV4ID09PSBzdGF0ZS5zdGFydCB8fCBwcmV2LnR5cGUgPT09ICdzbGFzaCcgfHwgcHJldi50eXBlID09PSAnZG90Jykge1xuICAgICAgaWYgKHByZXYudHlwZSA9PT0gJ2RvdCcpIHtcbiAgICAgICAgc3RhdGUub3V0cHV0ICs9IE5PX0RPVF9TTEFTSDtcbiAgICAgICAgcHJldi5vdXRwdXQgKz0gTk9fRE9UX1NMQVNIO1xuXG4gICAgICB9IGVsc2UgaWYgKG9wdHMuZG90ID09PSB0cnVlKSB7XG4gICAgICAgIHN0YXRlLm91dHB1dCArPSBOT19ET1RTX1NMQVNIO1xuICAgICAgICBwcmV2Lm91dHB1dCArPSBOT19ET1RTX1NMQVNIO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5vdXRwdXQgKz0gbm9kb3Q7XG4gICAgICAgIHByZXYub3V0cHV0ICs9IG5vZG90O1xuICAgICAgfVxuXG4gICAgICBpZiAocGVlaygpICE9PSAnKicpIHtcbiAgICAgICAgc3RhdGUub3V0cHV0ICs9IE9ORV9DSEFSO1xuICAgICAgICBwcmV2Lm91dHB1dCArPSBPTkVfQ0hBUjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdXNoKHRva2VuKTtcbiAgfVxuXG4gIHdoaWxlIChzdGF0ZS5icmFja2V0cyA+IDApIHtcbiAgICBpZiAob3B0cy5zdHJpY3RCcmFja2V0cyA9PT0gdHJ1ZSkgdGhyb3cgbmV3IFN5bnRheEVycm9yKHN5bnRheEVycm9yKCdjbG9zaW5nJywgJ10nKSk7XG4gICAgc3RhdGUub3V0cHV0ID0gdXRpbHMuZXNjYXBlTGFzdChzdGF0ZS5vdXRwdXQsICdbJyk7XG4gICAgZGVjcmVtZW50KCdicmFja2V0cycpO1xuICB9XG5cbiAgd2hpbGUgKHN0YXRlLnBhcmVucyA+IDApIHtcbiAgICBpZiAob3B0cy5zdHJpY3RCcmFja2V0cyA9PT0gdHJ1ZSkgdGhyb3cgbmV3IFN5bnRheEVycm9yKHN5bnRheEVycm9yKCdjbG9zaW5nJywgJyknKSk7XG4gICAgc3RhdGUub3V0cHV0ID0gdXRpbHMuZXNjYXBlTGFzdChzdGF0ZS5vdXRwdXQsICcoJyk7XG4gICAgZGVjcmVtZW50KCdwYXJlbnMnKTtcbiAgfVxuXG4gIHdoaWxlIChzdGF0ZS5icmFjZXMgPiAwKSB7XG4gICAgaWYgKG9wdHMuc3RyaWN0QnJhY2tldHMgPT09IHRydWUpIHRocm93IG5ldyBTeW50YXhFcnJvcihzeW50YXhFcnJvcignY2xvc2luZycsICd9JykpO1xuICAgIHN0YXRlLm91dHB1dCA9IHV0aWxzLmVzY2FwZUxhc3Qoc3RhdGUub3V0cHV0LCAneycpO1xuICAgIGRlY3JlbWVudCgnYnJhY2VzJyk7XG4gIH1cblxuICBpZiAob3B0cy5zdHJpY3RTbGFzaGVzICE9PSB0cnVlICYmIChwcmV2LnR5cGUgPT09ICdzdGFyJyB8fCBwcmV2LnR5cGUgPT09ICdicmFja2V0JykpIHtcbiAgICBwdXNoKHsgdHlwZTogJ21heWJlX3NsYXNoJywgdmFsdWU6ICcnLCBvdXRwdXQ6IGAke1NMQVNIX0xJVEVSQUx9P2AgfSk7XG4gIH1cblxuICAvLyByZWJ1aWxkIHRoZSBvdXRwdXQgaWYgd2UgaGFkIHRvIGJhY2t0cmFjayBhdCBhbnkgcG9pbnRcbiAgaWYgKHN0YXRlLmJhY2t0cmFjayA9PT0gdHJ1ZSkge1xuICAgIHN0YXRlLm91dHB1dCA9ICcnO1xuXG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiBzdGF0ZS50b2tlbnMpIHtcbiAgICAgIHN0YXRlLm91dHB1dCArPSB0b2tlbi5vdXRwdXQgIT0gbnVsbCA/IHRva2VuLm91dHB1dCA6IHRva2VuLnZhbHVlO1xuXG4gICAgICBpZiAodG9rZW4uc3VmZml4KSB7XG4gICAgICAgIHN0YXRlLm91dHB1dCArPSB0b2tlbi5zdWZmaXg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcblxuLyoqXG4gKiBGYXN0IHBhdGhzIGZvciBjcmVhdGluZyByZWd1bGFyIGV4cHJlc3Npb25zIGZvciBjb21tb24gZ2xvYiBwYXR0ZXJucy5cbiAqIFRoaXMgY2FuIHNpZ25pZmljYW50bHkgc3BlZWQgdXAgcHJvY2Vzc2luZyBhbmQgaGFzIHZlcnkgbGl0dGxlIGRvd25zaWRlXG4gKiBpbXBhY3Qgd2hlbiBub25lIG9mIHRoZSBmYXN0IHBhdGhzIG1hdGNoLlxuICovXG5cbnBhcnNlLmZhc3RwYXRocyA9IChpbnB1dCwgb3B0aW9ucykgPT4ge1xuICBjb25zdCBvcHRzID0geyAuLi5vcHRpb25zIH07XG4gIGNvbnN0IG1heCA9IHR5cGVvZiBvcHRzLm1heExlbmd0aCA9PT0gJ251bWJlcicgPyBNYXRoLm1pbihNQVhfTEVOR1RILCBvcHRzLm1heExlbmd0aCkgOiBNQVhfTEVOR1RIO1xuICBjb25zdCBsZW4gPSBpbnB1dC5sZW5ndGg7XG4gIGlmIChsZW4gPiBtYXgpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYElucHV0IGxlbmd0aDogJHtsZW59LCBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBsZW5ndGg6ICR7bWF4fWApO1xuICB9XG5cbiAgaW5wdXQgPSBSRVBMQUNFTUVOVFNbaW5wdXRdIHx8IGlucHV0O1xuICBjb25zdCB3aW4zMiA9IHV0aWxzLmlzV2luZG93cyhvcHRpb25zKTtcblxuICAvLyBjcmVhdGUgY29uc3RhbnRzIGJhc2VkIG9uIHBsYXRmb3JtLCBmb3Igd2luZG93cyBvciBwb3NpeFxuICBjb25zdCB7XG4gICAgRE9UX0xJVEVSQUwsXG4gICAgU0xBU0hfTElURVJBTCxcbiAgICBPTkVfQ0hBUixcbiAgICBET1RTX1NMQVNILFxuICAgIE5PX0RPVCxcbiAgICBOT19ET1RTLFxuICAgIE5PX0RPVFNfU0xBU0gsXG4gICAgU1RBUixcbiAgICBTVEFSVF9BTkNIT1JcbiAgfSA9IGNvbnN0YW50cy5nbG9iQ2hhcnMod2luMzIpO1xuXG4gIGNvbnN0IG5vZG90ID0gb3B0cy5kb3QgPyBOT19ET1RTIDogTk9fRE9UO1xuICBjb25zdCBzbGFzaERvdCA9IG9wdHMuZG90ID8gTk9fRE9UU19TTEFTSCA6IE5PX0RPVDtcbiAgY29uc3QgY2FwdHVyZSA9IG9wdHMuY2FwdHVyZSA/ICcnIDogJz86JztcbiAgY29uc3Qgc3RhdGUgPSB7IG5lZ2F0ZWQ6IGZhbHNlLCBwcmVmaXg6ICcnIH07XG4gIGxldCBzdGFyID0gb3B0cy5iYXNoID09PSB0cnVlID8gJy4qPycgOiBTVEFSO1xuXG4gIGlmIChvcHRzLmNhcHR1cmUpIHtcbiAgICBzdGFyID0gYCgke3N0YXJ9KWA7XG4gIH1cblxuICBjb25zdCBnbG9ic3RhciA9IG9wdHMgPT4ge1xuICAgIGlmIChvcHRzLm5vZ2xvYnN0YXIgPT09IHRydWUpIHJldHVybiBzdGFyO1xuICAgIHJldHVybiBgKCR7Y2FwdHVyZX0oPzooPyEke1NUQVJUX0FOQ0hPUn0ke29wdHMuZG90ID8gRE9UU19TTEFTSCA6IERPVF9MSVRFUkFMfSkuKSo/KWA7XG4gIH07XG5cbiAgY29uc3QgY3JlYXRlID0gc3RyID0+IHtcbiAgICBzd2l0Y2ggKHN0cikge1xuICAgICAgY2FzZSAnKic6XG4gICAgICAgIHJldHVybiBgJHtub2RvdH0ke09ORV9DSEFSfSR7c3Rhcn1gO1xuXG4gICAgICBjYXNlICcuKic6XG4gICAgICAgIHJldHVybiBgJHtET1RfTElURVJBTH0ke09ORV9DSEFSfSR7c3Rhcn1gO1xuXG4gICAgICBjYXNlICcqLionOlxuICAgICAgICByZXR1cm4gYCR7bm9kb3R9JHtzdGFyfSR7RE9UX0xJVEVSQUx9JHtPTkVfQ0hBUn0ke3N0YXJ9YDtcblxuICAgICAgY2FzZSAnKi8qJzpcbiAgICAgICAgcmV0dXJuIGAke25vZG90fSR7c3Rhcn0ke1NMQVNIX0xJVEVSQUx9JHtPTkVfQ0hBUn0ke3NsYXNoRG90fSR7c3Rhcn1gO1xuXG4gICAgICBjYXNlICcqKic6XG4gICAgICAgIHJldHVybiBub2RvdCArIGdsb2JzdGFyKG9wdHMpO1xuXG4gICAgICBjYXNlICcqKi8qJzpcbiAgICAgICAgcmV0dXJuIGAoPzoke25vZG90fSR7Z2xvYnN0YXIob3B0cyl9JHtTTEFTSF9MSVRFUkFMfSk/JHtzbGFzaERvdH0ke09ORV9DSEFSfSR7c3Rhcn1gO1xuXG4gICAgICBjYXNlICcqKi8qLionOlxuICAgICAgICByZXR1cm4gYCg/OiR7bm9kb3R9JHtnbG9ic3RhcihvcHRzKX0ke1NMQVNIX0xJVEVSQUx9KT8ke3NsYXNoRG90fSR7c3Rhcn0ke0RPVF9MSVRFUkFMfSR7T05FX0NIQVJ9JHtzdGFyfWA7XG5cbiAgICAgIGNhc2UgJyoqLy4qJzpcbiAgICAgICAgcmV0dXJuIGAoPzoke25vZG90fSR7Z2xvYnN0YXIob3B0cyl9JHtTTEFTSF9MSVRFUkFMfSk/JHtET1RfTElURVJBTH0ke09ORV9DSEFSfSR7c3Rhcn1gO1xuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gL14oLio/KVxcLihcXHcrKSQvLmV4ZWMoc3RyKTtcbiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGNyZWF0ZShtYXRjaFsxXSk7XG4gICAgICAgIGlmICghc291cmNlKSByZXR1cm47XG5cbiAgICAgICAgcmV0dXJuIHNvdXJjZSArIERPVF9MSVRFUkFMICsgbWF0Y2hbMl07XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG91dHB1dCA9IHV0aWxzLnJlbW92ZVByZWZpeChpbnB1dCwgc3RhdGUpO1xuICBsZXQgc291cmNlID0gY3JlYXRlKG91dHB1dCk7XG5cbiAgaWYgKHNvdXJjZSAmJiBvcHRzLnN0cmljdFNsYXNoZXMgIT09IHRydWUpIHtcbiAgICBzb3VyY2UgKz0gYCR7U0xBU0hfTElURVJBTH0/YDtcbiAgfVxuXG4gIHJldHVybiBzb3VyY2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3Qgc2NhbiA9IHJlcXVpcmUoJy4vc2NhbicpO1xuY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJyk7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG5jb25zdCBpc09iamVjdCA9IHZhbCA9PiB2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWF0Y2hlciBmdW5jdGlvbiBmcm9tIG9uZSBvciBtb3JlIGdsb2IgcGF0dGVybnMuIFRoZVxuICogcmV0dXJuZWQgZnVuY3Rpb24gdGFrZXMgYSBzdHJpbmcgdG8gbWF0Y2ggYXMgaXRzIGZpcnN0IGFyZ3VtZW50LFxuICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgbWF0Y2guIFRoZSByZXR1cm5lZCBtYXRjaGVyXG4gKiBmdW5jdGlvbiBhbHNvIHRha2VzIGEgYm9vbGVhbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRoYXQsIHdoZW4gdHJ1ZSxcbiAqIHJldHVybnMgYW4gb2JqZWN0IHdpdGggYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcGljb21hdGNoID0gcmVxdWlyZSgncGljb21hdGNoJyk7XG4gKiAvLyBwaWNvbWF0Y2goZ2xvYlssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zdCBpc01hdGNoID0gcGljb21hdGNoKCcqLiEoKmEpJyk7XG4gKiBjb25zb2xlLmxvZyhpc01hdGNoKCdhLmEnKSk7IC8vPT4gZmFsc2VcbiAqIGNvbnNvbGUubG9nKGlzTWF0Y2goJ2EuYicpKTsgLy89PiB0cnVlXG4gKiBgYGBcbiAqIEBuYW1lIHBpY29tYXRjaFxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IGBnbG9ic2AgT25lIG9yIG1vcmUgZ2xvYiBwYXR0ZXJucy5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gYG9wdGlvbnNgXG4gKiBAcmV0dXJuIHtGdW5jdGlvbj19IFJldHVybnMgYSBtYXRjaGVyIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5jb25zdCBwaWNvbWF0Y2ggPSAoZ2xvYiwgb3B0aW9ucywgcmV0dXJuU3RhdGUgPSBmYWxzZSkgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShnbG9iKSkge1xuICAgIGNvbnN0IGZucyA9IGdsb2IubWFwKGlucHV0ID0+IHBpY29tYXRjaChpbnB1dCwgb3B0aW9ucywgcmV0dXJuU3RhdGUpKTtcbiAgICBjb25zdCBhcnJheU1hdGNoZXIgPSBzdHIgPT4ge1xuICAgICAgZm9yIChjb25zdCBpc01hdGNoIG9mIGZucykge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IGlzTWF0Y2goc3RyKTtcbiAgICAgICAgaWYgKHN0YXRlKSByZXR1cm4gc3RhdGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlNYXRjaGVyO1xuICB9XG5cbiAgY29uc3QgaXNTdGF0ZSA9IGlzT2JqZWN0KGdsb2IpICYmIGdsb2IudG9rZW5zICYmIGdsb2IuaW5wdXQ7XG5cbiAgaWYgKGdsb2IgPT09ICcnIHx8ICh0eXBlb2YgZ2xvYiAhPT0gJ3N0cmluZycgJiYgIWlzU3RhdGUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgcGF0dGVybiB0byBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgfVxuXG4gIGNvbnN0IG9wdHMgPSBvcHRpb25zIHx8IHt9O1xuICBjb25zdCBwb3NpeCA9IHV0aWxzLmlzV2luZG93cyhvcHRpb25zKTtcbiAgY29uc3QgcmVnZXggPSBpc1N0YXRlXG4gICAgPyBwaWNvbWF0Y2guY29tcGlsZVJlKGdsb2IsIG9wdGlvbnMpXG4gICAgOiBwaWNvbWF0Y2gubWFrZVJlKGdsb2IsIG9wdGlvbnMsIGZhbHNlLCB0cnVlKTtcblxuICBjb25zdCBzdGF0ZSA9IHJlZ2V4LnN0YXRlO1xuICBkZWxldGUgcmVnZXguc3RhdGU7XG5cbiAgbGV0IGlzSWdub3JlZCA9ICgpID0+IGZhbHNlO1xuICBpZiAob3B0cy5pZ25vcmUpIHtcbiAgICBjb25zdCBpZ25vcmVPcHRzID0geyAuLi5vcHRpb25zLCBpZ25vcmU6IG51bGwsIG9uTWF0Y2g6IG51bGwsIG9uUmVzdWx0OiBudWxsIH07XG4gICAgaXNJZ25vcmVkID0gcGljb21hdGNoKG9wdHMuaWdub3JlLCBpZ25vcmVPcHRzLCByZXR1cm5TdGF0ZSk7XG4gIH1cblxuICBjb25zdCBtYXRjaGVyID0gKGlucHV0LCByZXR1cm5PYmplY3QgPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IHsgaXNNYXRjaCwgbWF0Y2gsIG91dHB1dCB9ID0gcGljb21hdGNoLnRlc3QoaW5wdXQsIHJlZ2V4LCBvcHRpb25zLCB7IGdsb2IsIHBvc2l4IH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IHsgZ2xvYiwgc3RhdGUsIHJlZ2V4LCBwb3NpeCwgaW5wdXQsIG91dHB1dCwgbWF0Y2gsIGlzTWF0Y2ggfTtcblxuICAgIGlmICh0eXBlb2Ygb3B0cy5vblJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3B0cy5vblJlc3VsdChyZXN1bHQpO1xuICAgIH1cblxuICAgIGlmIChpc01hdGNoID09PSBmYWxzZSkge1xuICAgICAgcmVzdWx0LmlzTWF0Y2ggPSBmYWxzZTtcbiAgICAgIHJldHVybiByZXR1cm5PYmplY3QgPyByZXN1bHQgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoaXNJZ25vcmVkKGlucHV0KSkge1xuICAgICAgaWYgKHR5cGVvZiBvcHRzLm9uSWdub3JlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9wdHMub25JZ25vcmUocmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5pc01hdGNoID0gZmFsc2U7XG4gICAgICByZXR1cm4gcmV0dXJuT2JqZWN0ID8gcmVzdWx0IDogZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRzLm9uTWF0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9wdHMub25NYXRjaChyZXN1bHQpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuT2JqZWN0ID8gcmVzdWx0IDogdHJ1ZTtcbiAgfTtcblxuICBpZiAocmV0dXJuU3RhdGUpIHtcbiAgICBtYXRjaGVyLnN0YXRlID0gc3RhdGU7XG4gIH1cblxuICByZXR1cm4gbWF0Y2hlcjtcbn07XG5cbi8qKlxuICogVGVzdCBgaW5wdXRgIHdpdGggdGhlIGdpdmVuIGByZWdleGAuIFRoaXMgaXMgdXNlZCBieSB0aGUgbWFpblxuICogYHBpY29tYXRjaCgpYCBmdW5jdGlvbiB0byB0ZXN0IHRoZSBpbnB1dCBzdHJpbmcuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHBpY29tYXRjaCA9IHJlcXVpcmUoJ3BpY29tYXRjaCcpO1xuICogLy8gcGljb21hdGNoLnRlc3QoaW5wdXQsIHJlZ2V4Wywgb3B0aW9uc10pO1xuICpcbiAqIGNvbnNvbGUubG9nKHBpY29tYXRjaC50ZXN0KCdmb28vYmFyJywgL14oPzooW14vXSo/KVxcLyhbXi9dKj8pKSQvKSk7XG4gKiAvLyB7IGlzTWF0Y2g6IHRydWUsIG1hdGNoOiBbICdmb28vJywgJ2ZvbycsICdiYXInIF0sIG91dHB1dDogJ2Zvby9iYXInIH1cbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBpbnB1dGAgU3RyaW5nIHRvIHRlc3QuXG4gKiBAcGFyYW0ge1JlZ0V4cH0gYHJlZ2V4YFxuICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIG1hdGNoaW5nIGluZm8uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnBpY29tYXRjaC50ZXN0ID0gKGlucHV0LCByZWdleCwgb3B0aW9ucywgeyBnbG9iLCBwb3NpeCB9ID0ge30pID0+IHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBpbnB1dCB0byBiZSBhIHN0cmluZycpO1xuICB9XG5cbiAgaWYgKGlucHV0ID09PSAnJykge1xuICAgIHJldHVybiB7IGlzTWF0Y2g6IGZhbHNlLCBvdXRwdXQ6ICcnIH07XG4gIH1cblxuICBjb25zdCBvcHRzID0gb3B0aW9ucyB8fCB7fTtcbiAgY29uc3QgZm9ybWF0ID0gb3B0cy5mb3JtYXQgfHwgKHBvc2l4ID8gdXRpbHMudG9Qb3NpeFNsYXNoZXMgOiBudWxsKTtcbiAgbGV0IG1hdGNoID0gaW5wdXQgPT09IGdsb2I7XG4gIGxldCBvdXRwdXQgPSAobWF0Y2ggJiYgZm9ybWF0KSA/IGZvcm1hdChpbnB1dCkgOiBpbnB1dDtcblxuICBpZiAobWF0Y2ggPT09IGZhbHNlKSB7XG4gICAgb3V0cHV0ID0gZm9ybWF0ID8gZm9ybWF0KGlucHV0KSA6IGlucHV0O1xuICAgIG1hdGNoID0gb3V0cHV0ID09PSBnbG9iO1xuICB9XG5cbiAgaWYgKG1hdGNoID09PSBmYWxzZSB8fCBvcHRzLmNhcHR1cmUgPT09IHRydWUpIHtcbiAgICBpZiAob3B0cy5tYXRjaEJhc2UgPT09IHRydWUgfHwgb3B0cy5iYXNlbmFtZSA9PT0gdHJ1ZSkge1xuICAgICAgbWF0Y2ggPSBwaWNvbWF0Y2gubWF0Y2hCYXNlKGlucHV0LCByZWdleCwgb3B0aW9ucywgcG9zaXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXRjaCA9IHJlZ2V4LmV4ZWMob3V0cHV0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBpc01hdGNoOiBCb29sZWFuKG1hdGNoKSwgbWF0Y2gsIG91dHB1dCB9O1xufTtcblxuLyoqXG4gKiBNYXRjaCB0aGUgYmFzZW5hbWUgb2YgYSBmaWxlcGF0aC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcGljb21hdGNoID0gcmVxdWlyZSgncGljb21hdGNoJyk7XG4gKiAvLyBwaWNvbWF0Y2gubWF0Y2hCYXNlKGlucHV0LCBnbG9iWywgb3B0aW9uc10pO1xuICogY29uc29sZS5sb2cocGljb21hdGNoLm1hdGNoQmFzZSgnZm9vL2Jhci5qcycsICcqLmpzJyk7IC8vIHRydWVcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBpbnB1dGAgU3RyaW5nIHRvIHRlc3QuXG4gKiBAcGFyYW0ge1JlZ0V4cHxTdHJpbmd9IGBnbG9iYCBHbG9iIHBhdHRlcm4gb3IgcmVnZXggY3JlYXRlZCBieSBbLm1ha2VSZV0oI21ha2VSZSkuXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5waWNvbWF0Y2gubWF0Y2hCYXNlID0gKGlucHV0LCBnbG9iLCBvcHRpb25zLCBwb3NpeCA9IHV0aWxzLmlzV2luZG93cyhvcHRpb25zKSkgPT4ge1xuICBjb25zdCByZWdleCA9IGdsb2IgaW5zdGFuY2VvZiBSZWdFeHAgPyBnbG9iIDogcGljb21hdGNoLm1ha2VSZShnbG9iLCBvcHRpb25zKTtcbiAgcmV0dXJuIHJlZ2V4LnRlc3QocGF0aC5iYXNlbmFtZShpbnB1dCkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgKiphbnkqKiBvZiB0aGUgZ2l2ZW4gZ2xvYiBgcGF0dGVybnNgIG1hdGNoIHRoZSBzcGVjaWZpZWQgYHN0cmluZ2AuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHBpY29tYXRjaCA9IHJlcXVpcmUoJ3BpY29tYXRjaCcpO1xuICogLy8gcGljb21hdGNoLmlzTWF0Y2goc3RyaW5nLCBwYXR0ZXJuc1ssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhwaWNvbWF0Y2guaXNNYXRjaCgnYS5hJywgWydiLionLCAnKi5hJ10pKTsgLy89PiB0cnVlXG4gKiBjb25zb2xlLmxvZyhwaWNvbWF0Y2guaXNNYXRjaCgnYS5hJywgJ2IuKicpKTsgLy89PiBmYWxzZVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gc3RyIFRoZSBzdHJpbmcgdG8gdGVzdC5cbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBwYXR0ZXJucyBPbmUgb3IgbW9yZSBnbG9iIHBhdHRlcm5zIHRvIHVzZSBmb3IgbWF0Y2hpbmcuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFNlZSBhdmFpbGFibGUgW29wdGlvbnNdKCNvcHRpb25zKS5cbiAqIEByZXR1cm4ge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBhbnkgcGF0dGVybnMgbWF0Y2ggYHN0cmBcbiAqIEBhcGkgcHVibGljXG4gKi9cblxucGljb21hdGNoLmlzTWF0Y2ggPSAoc3RyLCBwYXR0ZXJucywgb3B0aW9ucykgPT4gcGljb21hdGNoKHBhdHRlcm5zLCBvcHRpb25zKShzdHIpO1xuXG4vKipcbiAqIFBhcnNlIGEgZ2xvYiBwYXR0ZXJuIHRvIGNyZWF0ZSB0aGUgc291cmNlIHN0cmluZyBmb3IgYSByZWd1bGFyXG4gKiBleHByZXNzaW9uLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwaWNvbWF0Y2ggPSByZXF1aXJlKCdwaWNvbWF0Y2gnKTtcbiAqIGNvbnN0IHJlc3VsdCA9IHBpY29tYXRjaC5wYXJzZShwYXR0ZXJuWywgb3B0aW9uc10pO1xuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHBhdHRlcm5gXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgXG4gKiBAcmV0dXJuIHtPYmplY3R9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggdXNlZnVsIHByb3BlcnRpZXMgYW5kIG91dHB1dCB0byBiZSB1c2VkIGFzIGEgcmVnZXggc291cmNlIHN0cmluZy5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxucGljb21hdGNoLnBhcnNlID0gKHBhdHRlcm4sIG9wdGlvbnMpID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocGF0dGVybikpIHJldHVybiBwYXR0ZXJuLm1hcChwID0+IHBpY29tYXRjaC5wYXJzZShwLCBvcHRpb25zKSk7XG4gIHJldHVybiBwYXJzZShwYXR0ZXJuLCB7IC4uLm9wdGlvbnMsIGZhc3RwYXRoczogZmFsc2UgfSk7XG59O1xuXG4vKipcbiAqIFNjYW4gYSBnbG9iIHBhdHRlcm4gdG8gc2VwYXJhdGUgdGhlIHBhdHRlcm4gaW50byBzZWdtZW50cy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcGljb21hdGNoID0gcmVxdWlyZSgncGljb21hdGNoJyk7XG4gKiAvLyBwaWNvbWF0Y2guc2NhbihpbnB1dFssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBwaWNvbWF0Y2guc2NhbignIS4vZm9vLyouanMnKTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gKiB7IHByZWZpeDogJyEuLycsXG4gKiAgIGlucHV0OiAnIS4vZm9vLyouanMnLFxuICogICBzdGFydDogMyxcbiAqICAgYmFzZTogJ2ZvbycsXG4gKiAgIGdsb2I6ICcqLmpzJyxcbiAqICAgaXNCcmFjZTogZmFsc2UsXG4gKiAgIGlzQnJhY2tldDogZmFsc2UsXG4gKiAgIGlzR2xvYjogdHJ1ZSxcbiAqICAgaXNFeHRnbG9iOiBmYWxzZSxcbiAqICAgaXNHbG9ic3RhcjogZmFsc2UsXG4gKiAgIG5lZ2F0ZWQ6IHRydWUgfVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYGlucHV0YCBHbG9iIHBhdHRlcm4gdG8gc2Nhbi5cbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5waWNvbWF0Y2guc2NhbiA9IChpbnB1dCwgb3B0aW9ucykgPT4gc2NhbihpbnB1dCwgb3B0aW9ucyk7XG5cbi8qKlxuICogQ29tcGlsZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBmcm9tIHRoZSBgc3RhdGVgIG9iamVjdCByZXR1cm5lZCBieSB0aGVcbiAqIFtwYXJzZSgpXSgjcGFyc2UpIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYHN0YXRlYFxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYFxuICogQHBhcmFtIHtCb29sZWFufSBgcmV0dXJuT3V0cHV0YCBJbnRlbmRlZCBmb3IgaW1wbGVtZW50b3JzLCB0aGlzIGFyZ3VtZW50IGFsbG93cyB5b3UgdG8gcmV0dXJuIHRoZSByYXcgb3V0cHV0IGZyb20gdGhlIHBhcnNlci5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gYHJldHVyblN0YXRlYCBBZGRzIHRoZSBzdGF0ZSB0byBhIGBzdGF0ZWAgcHJvcGVydHkgb24gdGhlIHJldHVybmVkIHJlZ2V4LiBVc2VmdWwgZm9yIGltcGxlbWVudG9ycyBhbmQgZGVidWdnaW5nLlxuICogQHJldHVybiB7UmVnRXhwfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5waWNvbWF0Y2guY29tcGlsZVJlID0gKHN0YXRlLCBvcHRpb25zLCByZXR1cm5PdXRwdXQgPSBmYWxzZSwgcmV0dXJuU3RhdGUgPSBmYWxzZSkgPT4ge1xuICBpZiAocmV0dXJuT3V0cHV0ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHN0YXRlLm91dHB1dDtcbiAgfVxuXG4gIGNvbnN0IG9wdHMgPSBvcHRpb25zIHx8IHt9O1xuICBjb25zdCBwcmVwZW5kID0gb3B0cy5jb250YWlucyA/ICcnIDogJ14nO1xuICBjb25zdCBhcHBlbmQgPSBvcHRzLmNvbnRhaW5zID8gJycgOiAnJCc7XG5cbiAgbGV0IHNvdXJjZSA9IGAke3ByZXBlbmR9KD86JHtzdGF0ZS5vdXRwdXR9KSR7YXBwZW5kfWA7XG4gIGlmIChzdGF0ZSAmJiBzdGF0ZS5uZWdhdGVkID09PSB0cnVlKSB7XG4gICAgc291cmNlID0gYF4oPyEke3NvdXJjZX0pLiokYDtcbiAgfVxuXG4gIGNvbnN0IHJlZ2V4ID0gcGljb21hdGNoLnRvUmVnZXgoc291cmNlLCBvcHRpb25zKTtcbiAgaWYgKHJldHVyblN0YXRlID09PSB0cnVlKSB7XG4gICAgcmVnZXguc3RhdGUgPSBzdGF0ZTtcbiAgfVxuXG4gIHJldHVybiByZWdleDtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgcmVndWxhciBleHByZXNzaW9uIGZyb20gYSBwYXJzZWQgZ2xvYiBwYXR0ZXJuLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwaWNvbWF0Y2ggPSByZXF1aXJlKCdwaWNvbWF0Y2gnKTtcbiAqIGNvbnN0IHN0YXRlID0gcGljb21hdGNoLnBhcnNlKCcqLmpzJyk7XG4gKiAvLyBwaWNvbWF0Y2guY29tcGlsZVJlKHN0YXRlWywgb3B0aW9uc10pO1xuICpcbiAqIGNvbnNvbGUubG9nKHBpY29tYXRjaC5jb21waWxlUmUoc3RhdGUpKTtcbiAqIC8vPT4gL14oPzooPyFcXC4pKD89LilbXi9dKj9cXC5qcykkL1xuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHN0YXRlYCBUaGUgb2JqZWN0IHJldHVybmVkIGZyb20gdGhlIGAucGFyc2VgIG1ldGhvZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gYHJldHVybk91dHB1dGAgSW1wbGVtZW50b3JzIG1heSB1c2UgdGhpcyBhcmd1bWVudCB0byByZXR1cm4gdGhlIGNvbXBpbGVkIG91dHB1dCwgaW5zdGVhZCBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4gVGhpcyBpcyBub3QgZXhwb3NlZCBvbiB0aGUgb3B0aW9ucyB0byBwcmV2ZW50IGVuZC11c2VycyBmcm9tIG11dGF0aW5nIHRoZSByZXN1bHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGByZXR1cm5TdGF0ZWAgSW1wbGVtZW50b3JzIG1heSB1c2UgdGhpcyBhcmd1bWVudCB0byByZXR1cm4gdGhlIHN0YXRlIGZyb20gdGhlIHBhcnNlZCBnbG9iIHdpdGggdGhlIHJldHVybmVkIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm4ge1JlZ0V4cH0gUmV0dXJucyBhIHJlZ2V4IGNyZWF0ZWQgZnJvbSB0aGUgZ2l2ZW4gcGF0dGVybi5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxucGljb21hdGNoLm1ha2VSZSA9IChpbnB1dCwgb3B0aW9ucyA9IHt9LCByZXR1cm5PdXRwdXQgPSBmYWxzZSwgcmV0dXJuU3RhdGUgPSBmYWxzZSkgPT4ge1xuICBpZiAoIWlucHV0IHx8IHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgfVxuXG4gIGxldCBwYXJzZWQgPSB7IG5lZ2F0ZWQ6IGZhbHNlLCBmYXN0cGF0aHM6IHRydWUgfTtcblxuICBpZiAob3B0aW9ucy5mYXN0cGF0aHMgIT09IGZhbHNlICYmIChpbnB1dFswXSA9PT0gJy4nIHx8IGlucHV0WzBdID09PSAnKicpKSB7XG4gICAgcGFyc2VkLm91dHB1dCA9IHBhcnNlLmZhc3RwYXRocyhpbnB1dCwgb3B0aW9ucyk7XG4gIH1cblxuICBpZiAoIXBhcnNlZC5vdXRwdXQpIHtcbiAgICBwYXJzZWQgPSBwYXJzZShpbnB1dCwgb3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4gcGljb21hdGNoLmNvbXBpbGVSZShwYXJzZWQsIG9wdGlvbnMsIHJldHVybk91dHB1dCwgcmV0dXJuU3RhdGUpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSByZWd1bGFyIGV4cHJlc3Npb24gZnJvbSB0aGUgZ2l2ZW4gcmVnZXggc291cmNlIHN0cmluZy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcGljb21hdGNoID0gcmVxdWlyZSgncGljb21hdGNoJyk7XG4gKiAvLyBwaWNvbWF0Y2gudG9SZWdleChzb3VyY2VbLCBvcHRpb25zXSk7XG4gKlxuICogY29uc3QgeyBvdXRwdXQgfSA9IHBpY29tYXRjaC5wYXJzZSgnKi5qcycpO1xuICogY29uc29sZS5sb2cocGljb21hdGNoLnRvUmVnZXgob3V0cHV0KSk7XG4gKiAvLz0+IC9eKD86KD8hXFwuKSg/PS4pW14vXSo/XFwuanMpJC9cbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBzb3VyY2VgIFJlZ3VsYXIgZXhwcmVzc2lvbiBzb3VyY2Ugc3RyaW5nLlxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYFxuICogQHJldHVybiB7UmVnRXhwfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5waWNvbWF0Y2gudG9SZWdleCA9IChzb3VyY2UsIG9wdGlvbnMpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBvcHRzID0gb3B0aW9ucyB8fCB7fTtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChzb3VyY2UsIG9wdHMuZmxhZ3MgfHwgKG9wdHMubm9jYXNlID8gJ2knIDogJycpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kZWJ1ZyA9PT0gdHJ1ZSkgdGhyb3cgZXJyO1xuICAgIHJldHVybiAvJF4vO1xuICB9XG59O1xuXG4vKipcbiAqIFBpY29tYXRjaCBjb25zdGFudHMuXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cblxucGljb21hdGNoLmNvbnN0YW50cyA9IGNvbnN0YW50cztcblxuLyoqXG4gKiBFeHBvc2UgXCJwaWNvbWF0Y2hcIlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gcGljb21hdGNoO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL3BpY29tYXRjaCcpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5CdWlsZGVyID0gdm9pZCAwO1xyXG5jb25zdCBwYXRoXzEgPSByZXF1aXJlKFwicGF0aFwiKTtcclxuY29uc3QgYXBpX2J1aWxkZXJfMSA9IHJlcXVpcmUoXCIuL2FwaS1idWlsZGVyXCIpO1xyXG52YXIgcG0gPSBudWxsO1xyXG4vKiBjOCBpZ25vcmUgbmV4dCA2ICovXHJcbnRyeSB7XHJcbiAgICByZXF1aXJlLnJlc29sdmUoXCJwaWNvbWF0Y2hcIik7XHJcbiAgICBwbSA9IHJlcXVpcmUoXCJwaWNvbWF0Y2hcIik7XHJcbn1cclxuY2F0Y2ggKF9lKSB7XHJcbiAgICAvLyBkbyBub3RoaW5nXHJcbn1cclxuY2xhc3MgQnVpbGRlciB7XHJcbiAgICBnbG9iQ2FjaGUgPSB7fTtcclxuICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgbWF4RGVwdGg6IEluZmluaXR5LFxyXG4gICAgICAgIHN1cHByZXNzRXJyb3JzOiB0cnVlLFxyXG4gICAgICAgIHBhdGhTZXBhcmF0b3I6IHBhdGhfMS5zZXAsXHJcbiAgICAgICAgZmlsdGVyczogW10sXHJcbiAgICB9O1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHsgLi4udGhpcy5vcHRpb25zLCAuLi5vcHRpb25zIH07XHJcbiAgICB9XHJcbiAgICBncm91cCgpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuZ3JvdXAgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgd2l0aFBhdGhTZXBhcmF0b3Ioc2VwYXJhdG9yKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnBhdGhTZXBhcmF0b3IgPSBzZXBhcmF0b3I7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICB3aXRoQmFzZVBhdGgoKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmluY2x1ZGVCYXNlUGF0aCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICB3aXRoUmVsYXRpdmVQYXRocygpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMucmVsYXRpdmVQYXRocyA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICB3aXRoRGlycygpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuaW5jbHVkZURpcnMgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgd2l0aE1heERlcHRoKGRlcHRoKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLm1heERlcHRoID0gZGVwdGg7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICB3aXRoTWF4RmlsZXMobGltaXQpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMubWF4RmlsZXMgPSBsaW1pdDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHdpdGhGdWxsUGF0aHMoKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnJlc29sdmVQYXRocyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmluY2x1ZGVCYXNlUGF0aCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICB3aXRoRXJyb3JzKCkge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5zdXBwcmVzc0Vycm9ycyA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgd2l0aFN5bWxpbmtzKCkge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5yZXNvbHZlU3ltbGlua3MgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLndpdGhGdWxsUGF0aHMoKTtcclxuICAgIH1cclxuICAgIHdpdGhBYm9ydFNpZ25hbChzaWduYWwpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuc2lnbmFsID0gc2lnbmFsO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgbm9ybWFsaXplKCkge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5ub3JtYWxpemVQYXRoID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGZpbHRlcihwcmVkaWNhdGUpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuZmlsdGVycy5wdXNoKHByZWRpY2F0ZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBvbmx5RGlycygpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuZXhjbHVkZUZpbGVzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuaW5jbHVkZURpcnMgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgZXhjbHVkZShwcmVkaWNhdGUpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuZXhjbHVkZSA9IHByZWRpY2F0ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIG9ubHlDb3VudHMoKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLm9ubHlDb3VudHMgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgY3Jhd2wocm9vdCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgYXBpX2J1aWxkZXJfMS5BUElCdWlsZGVyKHJvb3QgfHwgXCIuXCIsIHRoaXMub3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBkZXByZWNhdGVkIFBhc3Mgb3B0aW9ucyB1c2luZyB0aGUgY29uc3RydWN0b3IgaW5zdGVhZDpcclxuICAgICAqIGBgYHRzXHJcbiAgICAgKiBuZXcgZmRpcihvcHRpb25zKS5jcmF3bChcIi9wYXRoL3RvL3Jvb3RcIik7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiB2Ny4wXHJcbiAgICAgKi9cclxuICAgIC8qIGM4IGlnbm9yZSBuZXh0IDQgKi9cclxuICAgIGNyYXdsV2l0aE9wdGlvbnMocm9vdCwgb3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHsgLi4udGhpcy5vcHRpb25zLCAuLi5vcHRpb25zIH07XHJcbiAgICAgICAgcmV0dXJuIG5ldyBhcGlfYnVpbGRlcl8xLkFQSUJ1aWxkZXIocm9vdCB8fCBcIi5cIiwgdGhpcy5vcHRpb25zKTtcclxuICAgIH1cclxuICAgIGdsb2IoLi4ucGF0dGVybnMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nbG9iV2l0aE9wdGlvbnMocGF0dGVybnMsIHsgZG90OiB0cnVlIH0pO1xyXG4gICAgfVxyXG4gICAgZ2xvYldpdGhPcHRpb25zKHBhdHRlcm5zLCBvcHRpb25zKSB7XHJcbiAgICAgICAgLyogYzggaWdub3JlIG5leHQgNSAqL1xyXG4gICAgICAgIGlmICghcG0pIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQbGVhc2UgaW5zdGFsbCBwaWNvbWF0Y2g6IFwibnBtIGkgcGljb21hdGNoXCIgdG8gdXNlIGdsb2IgbWF0Y2hpbmcuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpc01hdGNoID0gdGhpcy5nbG9iQ2FjaGVbcGF0dGVybnMuam9pbihcIlxcMFwiKV07XHJcbiAgICAgICAgaWYgKCFpc01hdGNoKSB7XHJcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBwbShwYXR0ZXJucywgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2xvYkNhY2hlW3BhdHRlcm5zLmpvaW4oXCJcXDBcIildID0gaXNNYXRjaDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlcnMucHVzaCgocGF0aCkgPT4gaXNNYXRjaChwYXRoKSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5CdWlsZGVyID0gQnVpbGRlcjtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pKTtcclxudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3R5cGVzXCIpLCBleHBvcnRzKTtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pKTtcclxudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5mZGlyID0gdm9pZCAwO1xyXG5jb25zdCBidWlsZGVyXzEgPSByZXF1aXJlKFwiLi9zcmMvYnVpbGRlclwiKTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZmRpclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYnVpbGRlcl8xLkJ1aWxkZXI7IH0gfSk7XHJcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zcmNcIiksIGV4cG9ydHMpO1xyXG4iLCJpbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuY29uc3QgQ3B1VG9Ob2RlQXJjaCA9IHtcbiAgICB4ODZfNjQ6ICd4NjQnLFxuICAgIGFhcmNoNjQ6ICdhcm02NCcsXG4gICAgaTY4NjogJ2lhMzInLFxuICAgIGFybXY3OiAnYXJtJyxcbiAgICByaXNjdjY0Z2M6ICdyaXNjdjY0Jyxcbn07XG5leHBvcnQgY29uc3QgTm9kZUFyY2hUb0NwdSA9IHtcbiAgICB4NjQ6ICd4ODZfNjQnLFxuICAgIGFybTY0OiAnYWFyY2g2NCcsXG4gICAgaWEzMjogJ2k2ODYnLFxuICAgIGFybTogJ2FybXY3JyxcbiAgICByaXNjdjY0OiAncmlzY3Y2NGdjJyxcbn07XG5jb25zdCBTeXNUb05vZGVQbGF0Zm9ybSA9IHtcbiAgICBsaW51eDogJ2xpbnV4JyxcbiAgICBmcmVlYnNkOiAnZnJlZWJzZCcsXG4gICAgZGFyd2luOiAnZGFyd2luJyxcbiAgICB3aW5kb3dzOiAnd2luMzInLFxufTtcbmV4cG9ydCBjb25zdCBVbmlBcmNoc0J5UGxhdGZvcm0gPSB7XG4gICAgZGFyd2luOiBbJ3g2NCcsICdhcm02NCddLFxufTtcbmV4cG9ydCBjb25zdCBEZWZhdWx0UGxhdGZvcm1zID0gW1xuICAgIHtcbiAgICAgICAgcGxhdGZvcm06ICd3aW4zMicsXG4gICAgICAgIGFyY2g6ICd4NjQnLFxuICAgICAgICBhYmk6ICdtc3ZjJyxcbiAgICAgICAgcGxhdGZvcm1BcmNoQUJJOiAnd2luMzIteDY0LW1zdmMnLFxuICAgICAgICByYXc6ICd4ODZfNjQtcGMtd2luZG93cy1tc3ZjJyxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcGxhdGZvcm06ICdkYXJ3aW4nLFxuICAgICAgICBhcmNoOiAneDY0JyxcbiAgICAgICAgYWJpOiBudWxsLFxuICAgICAgICBwbGF0Zm9ybUFyY2hBQkk6ICdkYXJ3aW4teDY0JyxcbiAgICAgICAgcmF3OiAneDg2XzY0LWFwcGxlLWRhcndpbicsXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHBsYXRmb3JtOiAnbGludXgnLFxuICAgICAgICBhcmNoOiAneDY0JyxcbiAgICAgICAgYWJpOiAnZ251JyxcbiAgICAgICAgcGxhdGZvcm1BcmNoQUJJOiAnbGludXgteDY0LWdudScsXG4gICAgICAgIHJhdzogJ3g4Nl82NC11bmtub3duLWxpbnV4LWdudScsXG4gICAgfSxcbl07XG4vKipcbiAqIEEgdHJpcGxlIGlzIGEgc3BlY2lmaWMgZm9ybWF0IGZvciBzcGVjaWZ5aW5nIGEgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cbiAqIFRyaXBsZXMgbWF5IGJlIHJlZmVycmVkIHRvIGFzIGEgdGFyZ2V0IHRyaXBsZSB3aGljaCBpcyB0aGUgYXJjaGl0ZWN0dXJlIGZvciB0aGUgYXJ0aWZhY3QgcHJvZHVjZWQsIGFuZCB0aGUgaG9zdCB0cmlwbGUgd2hpY2ggaXMgdGhlIGFyY2hpdGVjdHVyZSB0aGF0IHRoZSBjb21waWxlciBpcyBydW5uaW5nIG9uLlxuICogVGhlIGdlbmVyYWwgZm9ybWF0IG9mIHRoZSB0cmlwbGUgaXMgYDxhcmNoPjxzdWI+LTx2ZW5kb3I+LTxzeXM+LTxhYmk+YCB3aGVyZTpcbiAqICAgLSBgYXJjaGAgPSBUaGUgYmFzZSBDUFUgYXJjaGl0ZWN0dXJlLCBmb3IgZXhhbXBsZSBgeDg2XzY0YCwgYGk2ODZgLCBgYXJtYCwgYHRodW1iYCwgYG1pcHNgLCBldGMuXG4gKiAgIC0gYHN1YmAgPSBUaGUgQ1BVIHN1Yi1hcmNoaXRlY3R1cmUsIGZvciBleGFtcGxlIGBhcm1gIGhhcyBgdjdgLCBgdjdzYCwgYHY1dGVgLCBldGMuXG4gKiAgIC0gYHZlbmRvcmAgPSBUaGUgdmVuZG9yLCBmb3IgZXhhbXBsZSBgdW5rbm93bmAsIGBhcHBsZWAsIGBwY2AsIGBudmlkaWFgLCBldGMuXG4gKiAgIC0gYHN5c2AgPSBUaGUgc3lzdGVtIG5hbWUsIGZvciBleGFtcGxlIGBsaW51eGAsIGB3aW5kb3dzYCwgYGRhcndpbmAsIGV0Yy4gbm9uZSBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgYmFyZS1tZXRhbCB3aXRob3V0IGFuIE9TLlxuICogICAtIGBhYmlgID0gVGhlIEFCSSwgZm9yIGV4YW1wbGUgYGdudWAsIGBhbmRyb2lkYCwgYGVhYmlgLCBldGMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRyaXBsZShyYXdUcmlwbGUpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHRyaXBsZSA9IHJhd1RyaXBsZS5lbmRzV2l0aCgnZWFiaScpXG4gICAgICAgID8gYCR7cmF3VHJpcGxlLnNsaWNlKDAsIC00KX0tZWFiaWBcbiAgICAgICAgOiByYXdUcmlwbGU7XG4gICAgY29uc3QgdHJpcGxlcyA9IHRyaXBsZS5zcGxpdCgnLScpO1xuICAgIGxldCBjcHU7XG4gICAgbGV0IHN5cztcbiAgICBsZXQgYWJpID0gbnVsbDtcbiAgICBpZiAodHJpcGxlcy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgO1xuICAgICAgICBbY3B1LCAsIHN5cywgYWJpID0gbnVsbF0gPSB0cmlwbGVzO1xuICAgIH1cbiAgICBlbHNlIGlmICh0cmlwbGVzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICA7XG4gICAgICAgIFtjcHUsICwgc3lzXSA9IHRyaXBsZXM7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICA7XG4gICAgICAgIFtjcHUsIHN5c10gPSB0cmlwbGVzO1xuICAgIH1cbiAgICBjb25zdCBwbGF0Zm9ybU5hbWUgPSAoX2EgPSBTeXNUb05vZGVQbGF0Zm9ybVtzeXNdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBzeXM7XG4gICAgY29uc3QgYXJjaCA9IChfYiA9IENwdVRvTm9kZUFyY2hbY3B1XSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogY3B1O1xuICAgIHJldHVybiB7XG4gICAgICAgIHBsYXRmb3JtOiBwbGF0Zm9ybU5hbWUsXG4gICAgICAgIGFyY2gsXG4gICAgICAgIGFiaSxcbiAgICAgICAgcGxhdGZvcm1BcmNoQUJJOiBhYmlcbiAgICAgICAgICAgID8gYCR7cGxhdGZvcm1OYW1lfS0ke2FyY2h9LSR7YWJpfWBcbiAgICAgICAgICAgIDogYCR7cGxhdGZvcm1OYW1lfS0ke2FyY2h9YCxcbiAgICAgICAgcmF3OiByYXdUcmlwbGUsXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRIb3N0VGFyZ2V0VHJpcGxlKCkge1xuICAgIGNvbnN0IGhvc3QgPSBleGVjU3luYyhgcnVzdGMgLXZWYCwge1xuICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgIH0pXG4gICAgICAgIC50b1N0cmluZygndXRmOCcpXG4gICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgLmZpbmQoKGxpbmUpID0+IGxpbmUuc3RhcnRzV2l0aCgnaG9zdDogJykpO1xuICAgIGNvbnN0IHRyaXBsZSA9IGhvc3QgPT09IG51bGwgfHwgaG9zdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaG9zdC5zbGljZSgnaG9zdDogJy5sZW5ndGgpO1xuICAgIGlmICghdHJpcGxlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYENhbiBub3QgcGFyc2UgdGFyZ2V0IHRyaXBsZSBmcm9tIGhvc3RgKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlVHJpcGxlKHRyaXBsZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXJzZS10cmlwbGUuanMubWFwIiwiaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgRGVmYXVsdFBsYXRmb3JtcywgcGFyc2VUcmlwbGUgfSBmcm9tICcuL3BhcnNlLXRyaXBsZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFwaUNvbmZpZyhwYWNrYWdlSnNvbiA9ICdwYWNrYWdlLmpzb24nLCBjd2QgPSBwcm9jZXNzLmN3ZCgpKSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nLCBfaDtcbiAgICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBqb2luKGN3ZCwgcGFja2FnZUpzb24pO1xuICAgIGNvbnN0IHBrZ0pzb24gPSByZXF1aXJlKHBhY2thZ2VKc29uUGF0aCk7XG4gICAgY29uc3QgeyB2ZXJzaW9uOiBwYWNrYWdlVmVyc2lvbiwgbmFwaSwgbmFtZSB9ID0gcGtnSnNvbjtcbiAgICBjb25zdCBhZGRpdGlvblBsYXRmb3JtcyA9ICgoX2IgPSAoX2EgPSBuYXBpID09PSBudWxsIHx8IG5hcGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG5hcGkudHJpcGxlcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFkZGl0aW9uYWwpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFtdKS5tYXAocGFyc2VUcmlwbGUpO1xuICAgIGNvbnN0IGRlZmF1bHRQbGF0Zm9ybXMgPSAoKF9jID0gbmFwaSA9PT0gbnVsbCB8fCBuYXBpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuYXBpLnRyaXBsZXMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5kZWZhdWx0cykgPT09IGZhbHNlID8gW10gOiBbLi4uRGVmYXVsdFBsYXRmb3Jtc107XG4gICAgY29uc3QgdHNDb25zdEVudW0gPSAoX2QgPSBuYXBpID09PSBudWxsIHx8IG5hcGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG5hcGkudHMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5jb25zdEVudW07XG4gICAgY29uc3QgcGxhdGZvcm1zID0gWy4uLmRlZmF1bHRQbGF0Zm9ybXMsIC4uLmFkZGl0aW9uUGxhdGZvcm1zXTtcbiAgICBjb25zdCByZWxlYXNlVmVyc2lvbiA9IHByb2Nlc3MuZW52LlJFTEVBU0VfVkVSU0lPTjtcbiAgICBjb25zdCByZWxlYXNlVmVyc2lvbldpdGhvdXRQcmVmaXggPSAocmVsZWFzZVZlcnNpb24gPT09IG51bGwgfHwgcmVsZWFzZVZlcnNpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlbGVhc2VWZXJzaW9uLnN0YXJ0c1dpdGgoJ3YnKSlcbiAgICAgICAgPyByZWxlYXNlVmVyc2lvbi5zdWJzdHJpbmcoMSlcbiAgICAgICAgOiByZWxlYXNlVmVyc2lvbjtcbiAgICBjb25zdCB2ZXJzaW9uID0gcmVsZWFzZVZlcnNpb25XaXRob3V0UHJlZml4ICE9PSBudWxsICYmIHJlbGVhc2VWZXJzaW9uV2l0aG91dFByZWZpeCAhPT0gdm9pZCAwID8gcmVsZWFzZVZlcnNpb25XaXRob3V0UHJlZml4IDogcGFja2FnZVZlcnNpb247XG4gICAgY29uc3QgcGFja2FnZU5hbWUgPSAoX2YgPSAoX2UgPSBuYXBpID09PSBudWxsIHx8IG5hcGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG5hcGkucGFja2FnZSkgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLm5hbWUpICE9PSBudWxsICYmIF9mICE9PSB2b2lkIDAgPyBfZiA6IG5hbWU7XG4gICAgY29uc3QgbnBtQ2xpZW50ID0gKF9nID0gbmFwaSA9PT0gbnVsbCB8fCBuYXBpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuYXBpLm5wbUNsaWVudCkgIT09IG51bGwgJiYgX2cgIT09IHZvaWQgMCA/IF9nIDogJ25wbSc7XG4gICAgY29uc3QgYmluYXJ5TmFtZSA9IChfaCA9IG5hcGkgPT09IG51bGwgfHwgbmFwaSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbmFwaS5uYW1lKSAhPT0gbnVsbCAmJiBfaCAhPT0gdm9pZCAwID8gX2ggOiAnaW5kZXgnO1xuICAgIHJldHVybiB7XG4gICAgICAgIHBsYXRmb3JtcyxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgcGFja2FnZU5hbWUsXG4gICAgICAgIGJpbmFyeU5hbWUsXG4gICAgICAgIHBhY2thZ2VKc29uUGF0aCxcbiAgICAgICAgY29udGVudDogcGtnSnNvbixcbiAgICAgICAgbnBtQ2xpZW50LFxuICAgICAgICB0c0NvbnN0RW51bSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RzLmpzLm1hcCIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSAoZmxhZywgYXJndiA9IHByb2Nlc3MuYXJndikgPT4ge1xuXHRjb25zdCBwcmVmaXggPSBmbGFnLnN0YXJ0c1dpdGgoJy0nKSA/ICcnIDogKGZsYWcubGVuZ3RoID09PSAxID8gJy0nIDogJy0tJyk7XG5cdGNvbnN0IHBvc2l0aW9uID0gYXJndi5pbmRleE9mKHByZWZpeCArIGZsYWcpO1xuXHRjb25zdCB0ZXJtaW5hdG9yUG9zaXRpb24gPSBhcmd2LmluZGV4T2YoJy0tJyk7XG5cdHJldHVybiBwb3NpdGlvbiAhPT0gLTEgJiYgKHRlcm1pbmF0b3JQb3NpdGlvbiA9PT0gLTEgfHwgcG9zaXRpb24gPCB0ZXJtaW5hdG9yUG9zaXRpb24pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbmNvbnN0IHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xuY29uc3QgaGFzRmxhZyA9IHJlcXVpcmUoJ2hhcy1mbGFnJyk7XG5cbmNvbnN0IHtlbnZ9ID0gcHJvY2VzcztcblxubGV0IGZvcmNlQ29sb3I7XG5pZiAoaGFzRmxhZygnbm8tY29sb3InKSB8fFxuXHRoYXNGbGFnKCduby1jb2xvcnMnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1mYWxzZScpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPW5ldmVyJykpIHtcblx0Zm9yY2VDb2xvciA9IDA7XG59IGVsc2UgaWYgKGhhc0ZsYWcoJ2NvbG9yJykgfHxcblx0aGFzRmxhZygnY29sb3JzJykgfHxcblx0aGFzRmxhZygnY29sb3I9dHJ1ZScpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPWFsd2F5cycpKSB7XG5cdGZvcmNlQ29sb3IgPSAxO1xufVxuXG5pZiAoJ0ZPUkNFX0NPTE9SJyBpbiBlbnYpIHtcblx0aWYgKGVudi5GT1JDRV9DT0xPUiA9PT0gJ3RydWUnKSB7XG5cdFx0Zm9yY2VDb2xvciA9IDE7XG5cdH0gZWxzZSBpZiAoZW52LkZPUkNFX0NPTE9SID09PSAnZmFsc2UnKSB7XG5cdFx0Zm9yY2VDb2xvciA9IDA7XG5cdH0gZWxzZSB7XG5cdFx0Zm9yY2VDb2xvciA9IGVudi5GT1JDRV9DT0xPUi5sZW5ndGggPT09IDAgPyAxIDogTWF0aC5taW4ocGFyc2VJbnQoZW52LkZPUkNFX0NPTE9SLCAxMCksIDMpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUxldmVsKGxldmVsKSB7XG5cdGlmIChsZXZlbCA9PT0gMCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bGV2ZWwsXG5cdFx0aGFzQmFzaWM6IHRydWUsXG5cdFx0aGFzMjU2OiBsZXZlbCA+PSAyLFxuXHRcdGhhczE2bTogbGV2ZWwgPj0gM1xuXHR9O1xufVxuXG5mdW5jdGlvbiBzdXBwb3J0c0NvbG9yKGhhdmVTdHJlYW0sIHN0cmVhbUlzVFRZKSB7XG5cdGlmIChmb3JjZUNvbG9yID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRpZiAoaGFzRmxhZygnY29sb3I9MTZtJykgfHxcblx0XHRoYXNGbGFnKCdjb2xvcj1mdWxsJykgfHxcblx0XHRoYXNGbGFnKCdjb2xvcj10cnVlY29sb3InKSkge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTI1NicpKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoaGF2ZVN0cmVhbSAmJiAhc3RyZWFtSXNUVFkgJiYgZm9yY2VDb2xvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRjb25zdCBtaW4gPSBmb3JjZUNvbG9yIHx8IDA7XG5cblx0aWYgKGVudi5URVJNID09PSAnZHVtYicpIHtcblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcblx0XHQvLyBXaW5kb3dzIDEwIGJ1aWxkIDEwNTg2IGlzIHRoZSBmaXJzdCBXaW5kb3dzIHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAyNTYgY29sb3JzLlxuXHRcdC8vIFdpbmRvd3MgMTAgYnVpbGQgMTQ5MzEgaXMgdGhlIGZpcnN0IHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAxNm0vVHJ1ZUNvbG9yLlxuXHRcdGNvbnN0IG9zUmVsZWFzZSA9IG9zLnJlbGVhc2UoKS5zcGxpdCgnLicpO1xuXHRcdGlmIChcblx0XHRcdE51bWJlcihvc1JlbGVhc2VbMF0pID49IDEwICYmXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxMDU4NlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIE51bWJlcihvc1JlbGVhc2VbMl0pID49IDE0OTMxID8gMyA6IDI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NJJyBpbiBlbnYpIHtcblx0XHRpZiAoWydUUkFWSVMnLCAnQ0lSQ0xFQ0knLCAnQVBQVkVZT1InLCAnR0lUTEFCX0NJJywgJ0dJVEhVQl9BQ1RJT05TJywgJ0JVSUxES0lURSddLnNvbWUoc2lnbiA9PiBzaWduIGluIGVudikgfHwgZW52LkNJX05BTUUgPT09ICdjb2Rlc2hpcCcpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblxuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRpZiAoJ1RFQU1DSVRZX1ZFUlNJT04nIGluIGVudikge1xuXHRcdHJldHVybiAvXig5XFwuKDAqWzEtOV1cXGQqKVxcLnxcXGR7Mix9XFwuKS8udGVzdChlbnYuVEVBTUNJVFlfVkVSU0lPTikgPyAxIDogMDtcblx0fVxuXG5cdGlmIChlbnYuQ09MT1JURVJNID09PSAndHJ1ZWNvbG9yJykge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKCdURVJNX1BST0dSQU0nIGluIGVudikge1xuXHRcdGNvbnN0IHZlcnNpb24gPSBwYXJzZUludCgoZW52LlRFUk1fUFJPR1JBTV9WRVJTSU9OIHx8ICcnKS5zcGxpdCgnLicpWzBdLCAxMCk7XG5cblx0XHRzd2l0Y2ggKGVudi5URVJNX1BST0dSQU0pIHtcblx0XHRcdGNhc2UgJ2lUZXJtLmFwcCc6XG5cdFx0XHRcdHJldHVybiB2ZXJzaW9uID49IDMgPyAzIDogMjtcblx0XHRcdGNhc2UgJ0FwcGxlX1Rlcm1pbmFsJzpcblx0XHRcdFx0cmV0dXJuIDI7XG5cdFx0XHQvLyBObyBkZWZhdWx0XG5cdFx0fVxuXHR9XG5cblx0aWYgKC8tMjU2KGNvbG9yKT8kL2kudGVzdChlbnYuVEVSTSkpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdGlmICgvXnNjcmVlbnxeeHRlcm18XnZ0MTAwfF52dDIyMHxecnh2dHxjb2xvcnxhbnNpfGN5Z3dpbnxsaW51eC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NPTE9SVEVSTScgaW4gZW52KSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRyZXR1cm4gbWluO1xufVxuXG5mdW5jdGlvbiBnZXRTdXBwb3J0TGV2ZWwoc3RyZWFtKSB7XG5cdGNvbnN0IGxldmVsID0gc3VwcG9ydHNDb2xvcihzdHJlYW0sIHN0cmVhbSAmJiBzdHJlYW0uaXNUVFkpO1xuXHRyZXR1cm4gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0c3VwcG9ydHNDb2xvcjogZ2V0U3VwcG9ydExldmVsLFxuXHRzdGRvdXQ6IHRyYW5zbGF0ZUxldmVsKHN1cHBvcnRzQ29sb3IodHJ1ZSwgdHR5LmlzYXR0eSgxKSkpLFxuXHRzdGRlcnI6IHRyYW5zbGF0ZUxldmVsKHN1cHBvcnRzQ29sb3IodHJ1ZSwgdHR5LmlzYXR0eSgyKSkpXG59O1xuIiwiLyoqXG4gKiBIZWxwZXJzLlxuICovXG5cbnZhciBzID0gMTAwMDtcbnZhciBtID0gcyAqIDYwO1xudmFyIGggPSBtICogNjA7XG52YXIgZCA9IGggKiAyNDtcbnZhciB3ID0gZCAqIDc7XG52YXIgeSA9IGQgKiAzNjUuMjU7XG5cbi8qKlxuICogUGFyc2Ugb3IgZm9ybWF0IHRoZSBnaXZlbiBgdmFsYC5cbiAqXG4gKiBPcHRpb25zOlxuICpcbiAqICAtIGBsb25nYCB2ZXJib3NlIGZvcm1hdHRpbmcgW2ZhbHNlXVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gdmFsXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhyb3cgYW4gZXJyb3IgaWYgdmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSBudW1iZXJcbiAqIEByZXR1cm4ge1N0cmluZ3xOdW1iZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odmFsLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiB2YWwubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBwYXJzZSh2YWwpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHZhbCkpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5sb25nID8gZm10TG9uZyh2YWwpIDogZm10U2hvcnQodmFsKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ3ZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgdmFsaWQgbnVtYmVyLiB2YWw9JyArXG4gICAgICBKU09OLnN0cmluZ2lmeSh2YWwpXG4gICk7XG59O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBgc3RyYCBhbmQgcmV0dXJuIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZShzdHIpIHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChzdHIubGVuZ3RoID4gMTAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBtYXRjaCA9IC9eKC0/KD86XFxkKyk/XFwuP1xcZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyhcbiAgICBzdHJcbiAgKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbiA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICB2YXIgdHlwZSA9IChtYXRjaFsyXSB8fCAnbXMnKS50b0xvd2VyQ2FzZSgpO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICd5ZWFycyc6XG4gICAgY2FzZSAneWVhcic6XG4gICAgY2FzZSAneXJzJzpcbiAgICBjYXNlICd5cic6XG4gICAgY2FzZSAneSc6XG4gICAgICByZXR1cm4gbiAqIHk7XG4gICAgY2FzZSAnd2Vla3MnOlxuICAgIGNhc2UgJ3dlZWsnOlxuICAgIGNhc2UgJ3cnOlxuICAgICAgcmV0dXJuIG4gKiB3O1xuICAgIGNhc2UgJ2RheXMnOlxuICAgIGNhc2UgJ2RheSc6XG4gICAgY2FzZSAnZCc6XG4gICAgICByZXR1cm4gbiAqIGQ7XG4gICAgY2FzZSAnaG91cnMnOlxuICAgIGNhc2UgJ2hvdXInOlxuICAgIGNhc2UgJ2hycyc6XG4gICAgY2FzZSAnaHInOlxuICAgIGNhc2UgJ2gnOlxuICAgICAgcmV0dXJuIG4gKiBoO1xuICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgY2FzZSAnbWlucyc6XG4gICAgY2FzZSAnbWluJzpcbiAgICBjYXNlICdtJzpcbiAgICAgIHJldHVybiBuICogbTtcbiAgICBjYXNlICdzZWNvbmRzJzpcbiAgICBjYXNlICdzZWNvbmQnOlxuICAgIGNhc2UgJ3NlY3MnOlxuICAgIGNhc2UgJ3NlYyc6XG4gICAgY2FzZSAncyc6XG4gICAgICByZXR1cm4gbiAqIHM7XG4gICAgY2FzZSAnbWlsbGlzZWNvbmRzJzpcbiAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgY2FzZSAnbXNlY3MnOlxuICAgIGNhc2UgJ21zZWMnOlxuICAgIGNhc2UgJ21zJzpcbiAgICAgIHJldHVybiBuO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogU2hvcnQgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZm10U2hvcnQobXMpIHtcbiAgdmFyIG1zQWJzID0gTWF0aC5hYnMobXMpO1xuICBpZiAobXNBYnMgPj0gZCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gZCkgKyAnZCc7XG4gIH1cbiAgaWYgKG1zQWJzID49IGgpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGgpICsgJ2gnO1xuICB9XG4gIGlmIChtc0FicyA+PSBtKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBtKSArICdtJztcbiAgfVxuICBpZiAobXNBYnMgPj0gcykge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gcykgKyAncyc7XG4gIH1cbiAgcmV0dXJuIG1zICsgJ21zJztcbn1cblxuLyoqXG4gKiBMb25nIGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdExvbmcobXMpIHtcbiAgdmFyIG1zQWJzID0gTWF0aC5hYnMobXMpO1xuICBpZiAobXNBYnMgPj0gZCkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBkLCAnZGF5Jyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IGgpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgaCwgJ2hvdXInKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gbSkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBtLCAnbWludXRlJyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IHMpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgcywgJ3NlY29uZCcpO1xuICB9XG4gIHJldHVybiBtcyArICcgbXMnO1xufVxuXG4vKipcbiAqIFBsdXJhbGl6YXRpb24gaGVscGVyLlxuICovXG5cbmZ1bmN0aW9uIHBsdXJhbChtcywgbXNBYnMsIG4sIG5hbWUpIHtcbiAgdmFyIGlzUGx1cmFsID0gbXNBYnMgPj0gbiAqIDEuNTtcbiAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBuKSArICcgJyArIG5hbWUgKyAoaXNQbHVyYWwgPyAncycgOiAnJyk7XG59XG4iLCJcbi8qKlxuICogVGhpcyBpcyB0aGUgY29tbW9uIGxvZ2ljIGZvciBib3RoIHRoZSBOb2RlLmpzIGFuZCB3ZWIgYnJvd3NlclxuICogaW1wbGVtZW50YXRpb25zIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5mdW5jdGlvbiBzZXR1cChlbnYpIHtcblx0Y3JlYXRlRGVidWcuZGVidWcgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuZGVmYXVsdCA9IGNyZWF0ZURlYnVnO1xuXHRjcmVhdGVEZWJ1Zy5jb2VyY2UgPSBjb2VyY2U7XG5cdGNyZWF0ZURlYnVnLmRpc2FibGUgPSBkaXNhYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGUgPSBlbmFibGU7XG5cdGNyZWF0ZURlYnVnLmVuYWJsZWQgPSBlbmFibGVkO1xuXHRjcmVhdGVEZWJ1Zy5odW1hbml6ZSA9IHJlcXVpcmUoJ21zJyk7XG5cdGNyZWF0ZURlYnVnLmRlc3Ryb3kgPSBkZXN0cm95O1xuXG5cdE9iamVjdC5rZXlzKGVudikuZm9yRWFjaChrZXkgPT4ge1xuXHRcdGNyZWF0ZURlYnVnW2tleV0gPSBlbnZba2V5XTtcblx0fSk7XG5cblx0LyoqXG5cdCogVGhlIGN1cnJlbnRseSBhY3RpdmUgZGVidWcgbW9kZSBuYW1lcywgYW5kIG5hbWVzIHRvIHNraXAuXG5cdCovXG5cblx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0Y3JlYXRlRGVidWcuc2tpcHMgPSBbXTtcblxuXHQvKipcblx0KiBNYXAgb2Ygc3BlY2lhbCBcIiVuXCIgaGFuZGxpbmcgZnVuY3Rpb25zLCBmb3IgdGhlIGRlYnVnIFwiZm9ybWF0XCIgYXJndW1lbnQuXG5cdCpcblx0KiBWYWxpZCBrZXkgbmFtZXMgYXJlIGEgc2luZ2xlLCBsb3dlciBvciB1cHBlci1jYXNlIGxldHRlciwgaS5lLiBcIm5cIiBhbmQgXCJOXCIuXG5cdCovXG5cdGNyZWF0ZURlYnVnLmZvcm1hdHRlcnMgPSB7fTtcblxuXHQvKipcblx0KiBTZWxlY3RzIGEgY29sb3IgZm9yIGEgZGVidWcgbmFtZXNwYWNlXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHN0cmluZyBmb3IgdGhlIGRlYnVnIGluc3RhbmNlIHRvIGJlIGNvbG9yZWRcblx0KiBAcmV0dXJuIHtOdW1iZXJ8U3RyaW5nfSBBbiBBTlNJIGNvbG9yIGNvZGUgZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gc2VsZWN0Q29sb3IobmFtZXNwYWNlKSB7XG5cdFx0bGV0IGhhc2ggPSAwO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lc3BhY2UubGVuZ3RoOyBpKyspIHtcblx0XHRcdGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIG5hbWVzcGFjZS5jaGFyQ29kZUF0KGkpO1xuXHRcdFx0aGFzaCB8PSAwOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcblx0XHR9XG5cblx0XHRyZXR1cm4gY3JlYXRlRGVidWcuY29sb3JzW01hdGguYWJzKGhhc2gpICUgY3JlYXRlRGVidWcuY29sb3JzLmxlbmd0aF07XG5cdH1cblx0Y3JlYXRlRGVidWcuc2VsZWN0Q29sb3IgPSBzZWxlY3RDb2xvcjtcblxuXHQvKipcblx0KiBDcmVhdGUgYSBkZWJ1Z2dlciB3aXRoIHRoZSBnaXZlbiBgbmFtZXNwYWNlYC5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAcmV0dXJuIHtGdW5jdGlvbn1cblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBjcmVhdGVEZWJ1ZyhuYW1lc3BhY2UpIHtcblx0XHRsZXQgcHJldlRpbWU7XG5cdFx0bGV0IGVuYWJsZU92ZXJyaWRlID0gbnVsbDtcblx0XHRsZXQgbmFtZXNwYWNlc0NhY2hlO1xuXHRcdGxldCBlbmFibGVkQ2FjaGU7XG5cblx0XHRmdW5jdGlvbiBkZWJ1ZyguLi5hcmdzKSB7XG5cdFx0XHQvLyBEaXNhYmxlZD9cblx0XHRcdGlmICghZGVidWcuZW5hYmxlZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNlbGYgPSBkZWJ1ZztcblxuXHRcdFx0Ly8gU2V0IGBkaWZmYCB0aW1lc3RhbXBcblx0XHRcdGNvbnN0IGN1cnIgPSBOdW1iZXIobmV3IERhdGUoKSk7XG5cdFx0XHRjb25zdCBtcyA9IGN1cnIgLSAocHJldlRpbWUgfHwgY3Vycik7XG5cdFx0XHRzZWxmLmRpZmYgPSBtcztcblx0XHRcdHNlbGYucHJldiA9IHByZXZUaW1lO1xuXHRcdFx0c2VsZi5jdXJyID0gY3Vycjtcblx0XHRcdHByZXZUaW1lID0gY3VycjtcblxuXHRcdFx0YXJnc1swXSA9IGNyZWF0ZURlYnVnLmNvZXJjZShhcmdzWzBdKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBhcmdzWzBdICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHQvLyBBbnl0aGluZyBlbHNlIGxldCdzIGluc3BlY3Qgd2l0aCAlT1xuXHRcdFx0XHRhcmdzLnVuc2hpZnQoJyVPJyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFwcGx5IGFueSBgZm9ybWF0dGVyc2AgdHJhbnNmb3JtYXRpb25zXG5cdFx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdFx0YXJnc1swXSA9IGFyZ3NbMF0ucmVwbGFjZSgvJShbYS16QS1aJV0pL2csIChtYXRjaCwgZm9ybWF0KSA9PiB7XG5cdFx0XHRcdC8vIElmIHdlIGVuY291bnRlciBhbiBlc2NhcGVkICUgdGhlbiBkb24ndCBpbmNyZWFzZSB0aGUgYXJyYXkgaW5kZXhcblx0XHRcdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRcdFx0cmV0dXJuICclJztcblx0XHRcdFx0fVxuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZXIgPSBjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzW2Zvcm1hdF07XG5cdFx0XHRcdGlmICh0eXBlb2YgZm9ybWF0dGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsID0gYXJnc1tpbmRleF07XG5cdFx0XHRcdFx0bWF0Y2ggPSBmb3JtYXR0ZXIuY2FsbChzZWxmLCB2YWwpO1xuXG5cdFx0XHRcdFx0Ly8gTm93IHdlIG5lZWQgdG8gcmVtb3ZlIGBhcmdzW2luZGV4XWAgc2luY2UgaXQncyBpbmxpbmVkIGluIHRoZSBgZm9ybWF0YFxuXHRcdFx0XHRcdGFyZ3Muc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdFx0XHRpbmRleC0tO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBtYXRjaDtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBBcHBseSBlbnYtc3BlY2lmaWMgZm9ybWF0dGluZyAoY29sb3JzLCBldGMuKVxuXHRcdFx0Y3JlYXRlRGVidWcuZm9ybWF0QXJncy5jYWxsKHNlbGYsIGFyZ3MpO1xuXG5cdFx0XHRjb25zdCBsb2dGbiA9IHNlbGYubG9nIHx8IGNyZWF0ZURlYnVnLmxvZztcblx0XHRcdGxvZ0ZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXHRcdH1cblxuXHRcdGRlYnVnLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcblx0XHRkZWJ1Zy51c2VDb2xvcnMgPSBjcmVhdGVEZWJ1Zy51c2VDb2xvcnMoKTtcblx0XHRkZWJ1Zy5jb2xvciA9IGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yKG5hbWVzcGFjZSk7XG5cdFx0ZGVidWcuZXh0ZW5kID0gZXh0ZW5kO1xuXHRcdGRlYnVnLmRlc3Ryb3kgPSBjcmVhdGVEZWJ1Zy5kZXN0cm95OyAvLyBYWFggVGVtcG9yYXJ5LiBXaWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkZWJ1ZywgJ2VuYWJsZWQnLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcblx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRpZiAoZW5hYmxlT3ZlcnJpZGUgIT09IG51bGwpIHtcblx0XHRcdFx0XHRyZXR1cm4gZW5hYmxlT3ZlcnJpZGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG5hbWVzcGFjZXNDYWNoZSAhPT0gY3JlYXRlRGVidWcubmFtZXNwYWNlcykge1xuXHRcdFx0XHRcdG5hbWVzcGFjZXNDYWNoZSA9IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXM7XG5cdFx0XHRcdFx0ZW5hYmxlZENhY2hlID0gY3JlYXRlRGVidWcuZW5hYmxlZChuYW1lc3BhY2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVuYWJsZWRDYWNoZTtcblx0XHRcdH0sXG5cdFx0XHRzZXQ6IHYgPT4ge1xuXHRcdFx0XHRlbmFibGVPdmVycmlkZSA9IHY7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBFbnYtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbG9naWMgZm9yIGRlYnVnIGluc3RhbmNlc1xuXHRcdGlmICh0eXBlb2YgY3JlYXRlRGVidWcuaW5pdCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Y3JlYXRlRGVidWcuaW5pdChkZWJ1Zyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlYnVnO1xuXHR9XG5cblx0ZnVuY3Rpb24gZXh0ZW5kKG5hbWVzcGFjZSwgZGVsaW1pdGVyKSB7XG5cdFx0Y29uc3QgbmV3RGVidWcgPSBjcmVhdGVEZWJ1Zyh0aGlzLm5hbWVzcGFjZSArICh0eXBlb2YgZGVsaW1pdGVyID09PSAndW5kZWZpbmVkJyA/ICc6JyA6IGRlbGltaXRlcikgKyBuYW1lc3BhY2UpO1xuXHRcdG5ld0RlYnVnLmxvZyA9IHRoaXMubG9nO1xuXHRcdHJldHVybiBuZXdEZWJ1Zztcblx0fVxuXG5cdC8qKlxuXHQqIEVuYWJsZXMgYSBkZWJ1ZyBtb2RlIGJ5IG5hbWVzcGFjZXMuIFRoaXMgY2FuIGluY2x1ZGUgbW9kZXNcblx0KiBzZXBhcmF0ZWQgYnkgYSBjb2xvbiBhbmQgd2lsZGNhcmRzLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBlbmFibGUobmFtZXNwYWNlcykge1xuXHRcdGNyZWF0ZURlYnVnLnNhdmUobmFtZXNwYWNlcyk7XG5cdFx0Y3JlYXRlRGVidWcubmFtZXNwYWNlcyA9IG5hbWVzcGFjZXM7XG5cblx0XHRjcmVhdGVEZWJ1Zy5uYW1lcyA9IFtdO1xuXHRcdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0XHRsZXQgaTtcblx0XHRjb25zdCBzcGxpdCA9ICh0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycgPyBuYW1lc3BhY2VzIDogJycpLnNwbGl0KC9bXFxzLF0rLyk7XG5cdFx0Y29uc3QgbGVuID0gc3BsaXQubGVuZ3RoO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoIXNwbGl0W2ldKSB7XG5cdFx0XHRcdC8vIGlnbm9yZSBlbXB0eSBzdHJpbmdzXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRuYW1lc3BhY2VzID0gc3BsaXRbaV0ucmVwbGFjZSgvXFwqL2csICcuKj8nKTtcblxuXHRcdFx0aWYgKG5hbWVzcGFjZXNbMF0gPT09ICctJykge1xuXHRcdFx0XHRjcmVhdGVEZWJ1Zy5za2lwcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcy5zbGljZSgxKSArICckJykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcubmFtZXMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMgKyAnJCcpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0KiBEaXNhYmxlIGRlYnVnIG91dHB1dC5cblx0KlxuXHQqIEByZXR1cm4ge1N0cmluZ30gbmFtZXNwYWNlc1xuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGRpc2FibGUoKSB7XG5cdFx0Y29uc3QgbmFtZXNwYWNlcyA9IFtcblx0XHRcdC4uLmNyZWF0ZURlYnVnLm5hbWVzLm1hcCh0b05hbWVzcGFjZSksXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5za2lwcy5tYXAodG9OYW1lc3BhY2UpLm1hcChuYW1lc3BhY2UgPT4gJy0nICsgbmFtZXNwYWNlKVxuXHRcdF0uam9pbignLCcpO1xuXHRcdGNyZWF0ZURlYnVnLmVuYWJsZSgnJyk7XG5cdFx0cmV0dXJuIG5hbWVzcGFjZXM7XG5cdH1cblxuXHQvKipcblx0KiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG1vZGUgbmFtZSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuXHQqIEByZXR1cm4ge0Jvb2xlYW59XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlZChuYW1lKSB7XG5cdFx0aWYgKG5hbWVbbmFtZS5sZW5ndGggLSAxXSA9PT0gJyonKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgaTtcblx0XHRsZXQgbGVuO1xuXG5cdFx0Zm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcuc2tpcHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChjcmVhdGVEZWJ1Zy5za2lwc1tpXS50ZXN0KG5hbWUpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjcmVhdGVEZWJ1Zy5uYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKGNyZWF0ZURlYnVnLm5hbWVzW2ldLnRlc3QobmFtZSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCogQ29udmVydCByZWdleHAgdG8gbmFtZXNwYWNlXG5cdCpcblx0KiBAcGFyYW0ge1JlZ0V4cH0gcmVneGVwXG5cdCogQHJldHVybiB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gdG9OYW1lc3BhY2UocmVnZXhwKSB7XG5cdFx0cmV0dXJuIHJlZ2V4cC50b1N0cmluZygpXG5cdFx0XHQuc3Vic3RyaW5nKDIsIHJlZ2V4cC50b1N0cmluZygpLmxlbmd0aCAtIDIpXG5cdFx0XHQucmVwbGFjZSgvXFwuXFwqXFw/JC8sICcqJyk7XG5cdH1cblxuXHQvKipcblx0KiBDb2VyY2UgYHZhbGAuXG5cdCpcblx0KiBAcGFyYW0ge01peGVkfSB2YWxcblx0KiBAcmV0dXJuIHtNaXhlZH1cblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gY29lcmNlKHZhbCkge1xuXHRcdGlmICh2YWwgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdFx0cmV0dXJuIHZhbC5zdGFjayB8fCB2YWwubWVzc2FnZTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbDtcblx0fVxuXG5cdC8qKlxuXHQqIFhYWCBETyBOT1QgVVNFLiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHN0dWIgZnVuY3Rpb24uXG5cdCogWFhYIEl0IFdJTEwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuXHQqL1xuXHRmdW5jdGlvbiBkZXN0cm95KCkge1xuXHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHR9XG5cblx0Y3JlYXRlRGVidWcuZW5hYmxlKGNyZWF0ZURlYnVnLmxvYWQoKSk7XG5cblx0cmV0dXJuIGNyZWF0ZURlYnVnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldHVwO1xuIiwiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbmNvbnN0IHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBOb2RlLmpzIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5leHBvcnRzLmluaXQgPSBpbml0O1xuZXhwb3J0cy5sb2cgPSBsb2c7XG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuZGVzdHJveSA9IHV0aWwuZGVwcmVjYXRlKFxuXHQoKSA9PiB7fSxcblx0J0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nXG4pO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFs2LCAyLCAzLCA0LCA1LCAxXTtcblxudHJ5IHtcblx0Ly8gT3B0aW9uYWwgZGVwZW5kZW5jeSAoYXMgaW4sIGRvZXNuJ3QgbmVlZCB0byBiZSBpbnN0YWxsZWQsIE5PVCBsaWtlIG9wdGlvbmFsRGVwZW5kZW5jaWVzIGluIHBhY2thZ2UuanNvbilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuXHRjb25zdCBzdXBwb3J0c0NvbG9yID0gcmVxdWlyZSgnc3VwcG9ydHMtY29sb3InKTtcblxuXHRpZiAoc3VwcG9ydHNDb2xvciAmJiAoc3VwcG9ydHNDb2xvci5zdGRlcnIgfHwgc3VwcG9ydHNDb2xvcikubGV2ZWwgPj0gMikge1xuXHRcdGV4cG9ydHMuY29sb3JzID0gW1xuXHRcdFx0MjAsXG5cdFx0XHQyMSxcblx0XHRcdDI2LFxuXHRcdFx0MjcsXG5cdFx0XHQzMixcblx0XHRcdDMzLFxuXHRcdFx0MzgsXG5cdFx0XHQzOSxcblx0XHRcdDQwLFxuXHRcdFx0NDEsXG5cdFx0XHQ0Mixcblx0XHRcdDQzLFxuXHRcdFx0NDQsXG5cdFx0XHQ0NSxcblx0XHRcdDU2LFxuXHRcdFx0NTcsXG5cdFx0XHQ2Mixcblx0XHRcdDYzLFxuXHRcdFx0NjgsXG5cdFx0XHQ2OSxcblx0XHRcdDc0LFxuXHRcdFx0NzUsXG5cdFx0XHQ3Nixcblx0XHRcdDc3LFxuXHRcdFx0NzgsXG5cdFx0XHQ3OSxcblx0XHRcdDgwLFxuXHRcdFx0ODEsXG5cdFx0XHQ5Mixcblx0XHRcdDkzLFxuXHRcdFx0OTgsXG5cdFx0XHQ5OSxcblx0XHRcdDExMixcblx0XHRcdDExMyxcblx0XHRcdDEyOCxcblx0XHRcdDEyOSxcblx0XHRcdDEzNCxcblx0XHRcdDEzNSxcblx0XHRcdDE0OCxcblx0XHRcdDE0OSxcblx0XHRcdDE2MCxcblx0XHRcdDE2MSxcblx0XHRcdDE2Mixcblx0XHRcdDE2Myxcblx0XHRcdDE2NCxcblx0XHRcdDE2NSxcblx0XHRcdDE2Nixcblx0XHRcdDE2Nyxcblx0XHRcdDE2OCxcblx0XHRcdDE2OSxcblx0XHRcdDE3MCxcblx0XHRcdDE3MSxcblx0XHRcdDE3Mixcblx0XHRcdDE3Myxcblx0XHRcdDE3OCxcblx0XHRcdDE3OSxcblx0XHRcdDE4NCxcblx0XHRcdDE4NSxcblx0XHRcdDE5Nixcblx0XHRcdDE5Nyxcblx0XHRcdDE5OCxcblx0XHRcdDE5OSxcblx0XHRcdDIwMCxcblx0XHRcdDIwMSxcblx0XHRcdDIwMixcblx0XHRcdDIwMyxcblx0XHRcdDIwNCxcblx0XHRcdDIwNSxcblx0XHRcdDIwNixcblx0XHRcdDIwNyxcblx0XHRcdDIwOCxcblx0XHRcdDIwOSxcblx0XHRcdDIxNCxcblx0XHRcdDIxNSxcblx0XHRcdDIyMCxcblx0XHRcdDIyMVxuXHRcdF07XG5cdH1cbn0gY2F0Y2ggKGVycm9yKSB7XG5cdC8vIFN3YWxsb3cgLSB3ZSBvbmx5IGNhcmUgaWYgYHN1cHBvcnRzLWNvbG9yYCBpcyBhdmFpbGFibGU7IGl0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbn1cblxuLyoqXG4gKiBCdWlsZCB1cCB0aGUgZGVmYXVsdCBgaW5zcGVjdE9wdHNgIG9iamVjdCBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogICAkIERFQlVHX0NPTE9SUz1ubyBERUJVR19ERVBUSD0xMCBERUJVR19TSE9XX0hJRERFTj1lbmFibGVkIG5vZGUgc2NyaXB0LmpzXG4gKi9cblxuZXhwb3J0cy5pbnNwZWN0T3B0cyA9IE9iamVjdC5rZXlzKHByb2Nlc3MuZW52KS5maWx0ZXIoa2V5ID0+IHtcblx0cmV0dXJuIC9eZGVidWdfL2kudGVzdChrZXkpO1xufSkucmVkdWNlKChvYmosIGtleSkgPT4ge1xuXHQvLyBDYW1lbC1jYXNlXG5cdGNvbnN0IHByb3AgPSBrZXlcblx0XHQuc3Vic3RyaW5nKDYpXG5cdFx0LnRvTG93ZXJDYXNlKClcblx0XHQucmVwbGFjZSgvXyhbYS16XSkvZywgKF8sIGspID0+IHtcblx0XHRcdHJldHVybiBrLnRvVXBwZXJDYXNlKCk7XG5cdFx0fSk7XG5cblx0Ly8gQ29lcmNlIHN0cmluZyB2YWx1ZSBpbnRvIEpTIHZhbHVlXG5cdGxldCB2YWwgPSBwcm9jZXNzLmVudltrZXldO1xuXHRpZiAoL14oeWVzfG9ufHRydWV8ZW5hYmxlZCkkL2kudGVzdCh2YWwpKSB7XG5cdFx0dmFsID0gdHJ1ZTtcblx0fSBlbHNlIGlmICgvXihub3xvZmZ8ZmFsc2V8ZGlzYWJsZWQpJC9pLnRlc3QodmFsKSkge1xuXHRcdHZhbCA9IGZhbHNlO1xuXHR9IGVsc2UgaWYgKHZhbCA9PT0gJ251bGwnKSB7XG5cdFx0dmFsID0gbnVsbDtcblx0fSBlbHNlIHtcblx0XHR2YWwgPSBOdW1iZXIodmFsKTtcblx0fVxuXG5cdG9ialtwcm9wXSA9IHZhbDtcblx0cmV0dXJuIG9iajtcbn0sIHt9KTtcblxuLyoqXG4gKiBJcyBzdGRvdXQgYSBUVFk/IENvbG9yZWQgb3V0cHV0IGlzIGVuYWJsZWQgd2hlbiBgdHJ1ZWAuXG4gKi9cblxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuXHRyZXR1cm4gJ2NvbG9ycycgaW4gZXhwb3J0cy5pbnNwZWN0T3B0cyA/XG5cdFx0Qm9vbGVhbihleHBvcnRzLmluc3BlY3RPcHRzLmNvbG9ycykgOlxuXHRcdHR0eS5pc2F0dHkocHJvY2Vzcy5zdGRlcnIuZmQpO1xufVxuXG4vKipcbiAqIEFkZHMgQU5TSSBjb2xvciBlc2NhcGUgY29kZXMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuXHRjb25zdCB7bmFtZXNwYWNlOiBuYW1lLCB1c2VDb2xvcnN9ID0gdGhpcztcblxuXHRpZiAodXNlQ29sb3JzKSB7XG5cdFx0Y29uc3QgYyA9IHRoaXMuY29sb3I7XG5cdFx0Y29uc3QgY29sb3JDb2RlID0gJ1xcdTAwMUJbMycgKyAoYyA8IDggPyBjIDogJzg7NTsnICsgYyk7XG5cdFx0Y29uc3QgcHJlZml4ID0gYCAgJHtjb2xvckNvZGV9OzFtJHtuYW1lfSBcXHUwMDFCWzBtYDtcblxuXHRcdGFyZ3NbMF0gPSBwcmVmaXggKyBhcmdzWzBdLnNwbGl0KCdcXG4nKS5qb2luKCdcXG4nICsgcHJlZml4KTtcblx0XHRhcmdzLnB1c2goY29sb3JDb2RlICsgJ20rJyArIG1vZHVsZS5leHBvcnRzLmh1bWFuaXplKHRoaXMuZGlmZikgKyAnXFx1MDAxQlswbScpO1xuXHR9IGVsc2Uge1xuXHRcdGFyZ3NbMF0gPSBnZXREYXRlKCkgKyBuYW1lICsgJyAnICsgYXJnc1swXTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXREYXRlKCkge1xuXHRpZiAoZXhwb3J0cy5pbnNwZWN0T3B0cy5oaWRlRGF0ZSkge1xuXHRcdHJldHVybiAnJztcblx0fVxuXHRyZXR1cm4gbmV3IERhdGUoKS50b0lTT1N0cmluZygpICsgJyAnO1xufVxuXG4vKipcbiAqIEludm9rZXMgYHV0aWwuZm9ybWF0V2l0aE9wdGlvbnMoKWAgd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cyBhbmQgd3JpdGVzIHRvIHN0ZGVyci5cbiAqL1xuXG5mdW5jdGlvbiBsb2coLi4uYXJncykge1xuXHRyZXR1cm4gcHJvY2Vzcy5zdGRlcnIud3JpdGUodXRpbC5mb3JtYXRXaXRoT3B0aW9ucyhleHBvcnRzLmluc3BlY3RPcHRzLCAuLi5hcmdzKSArICdcXG4nKTtcbn1cblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHRpZiAobmFtZXNwYWNlcykge1xuXHRcdHByb2Nlc3MuZW52LkRFQlVHID0gbmFtZXNwYWNlcztcblx0fSBlbHNlIHtcblx0XHQvLyBJZiB5b3Ugc2V0IGEgcHJvY2Vzcy5lbnYgZmllbGQgdG8gbnVsbCBvciB1bmRlZmluZWQsIGl0IGdldHMgY2FzdCB0byB0aGVcblx0XHQvLyBzdHJpbmcgJ251bGwnIG9yICd1bmRlZmluZWQnLiBKdXN0IGRlbGV0ZSBpbnN0ZWFkLlxuXHRcdGRlbGV0ZSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdHJldHVybiBwcm9jZXNzLmVudi5ERUJVRztcbn1cblxuLyoqXG4gKiBJbml0IGxvZ2ljIGZvciBgZGVidWdgIGluc3RhbmNlcy5cbiAqXG4gKiBDcmVhdGUgYSBuZXcgYGluc3BlY3RPcHRzYCBvYmplY3QgaW4gY2FzZSBgdXNlQ29sb3JzYCBpcyBzZXRcbiAqIGRpZmZlcmVudGx5IGZvciBhIHBhcnRpY3VsYXIgYGRlYnVnYCBpbnN0YW5jZS5cbiAqL1xuXG5mdW5jdGlvbiBpbml0KGRlYnVnKSB7XG5cdGRlYnVnLmluc3BlY3RPcHRzID0ge307XG5cblx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGV4cG9ydHMuaW5zcGVjdE9wdHMpO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRkZWJ1Zy5pbnNwZWN0T3B0c1trZXlzW2ldXSA9IGV4cG9ydHMuaW5zcGVjdE9wdHNba2V5c1tpXV07XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJW8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsIG9uIGEgc2luZ2xlIGxpbmUuXG4gKi9cblxuZm9ybWF0dGVycy5vID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKVxuXHRcdC5zcGxpdCgnXFxuJylcblx0XHQubWFwKHN0ciA9PiBzdHIudHJpbSgpKVxuXHRcdC5qb2luKCcgJyk7XG59O1xuXG4vKipcbiAqIE1hcCAlTyB0byBgdXRpbC5pbnNwZWN0KClgLCBhbGxvd2luZyBtdWx0aXBsZSBsaW5lcyBpZiBuZWVkZWQuXG4gKi9cblxuZm9ybWF0dGVycy5PID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKTtcbn07XG4iLCIvKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSB3ZWIgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLnN0b3JhZ2UgPSBsb2NhbHN0b3JhZ2UoKTtcbmV4cG9ydHMuZGVzdHJveSA9ICgoKSA9PiB7XG5cdGxldCB3YXJuZWQgPSBmYWxzZTtcblxuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGlmICghd2FybmVkKSB7XG5cdFx0XHR3YXJuZWQgPSB0cnVlO1xuXHRcdFx0Y29uc29sZS53YXJuKCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJyk7XG5cdFx0fVxuXHR9O1xufSkoKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbXG5cdCcjMDAwMENDJyxcblx0JyMwMDAwRkYnLFxuXHQnIzAwMzNDQycsXG5cdCcjMDAzM0ZGJyxcblx0JyMwMDY2Q0MnLFxuXHQnIzAwNjZGRicsXG5cdCcjMDA5OUNDJyxcblx0JyMwMDk5RkYnLFxuXHQnIzAwQ0MwMCcsXG5cdCcjMDBDQzMzJyxcblx0JyMwMENDNjYnLFxuXHQnIzAwQ0M5OScsXG5cdCcjMDBDQ0NDJyxcblx0JyMwMENDRkYnLFxuXHQnIzMzMDBDQycsXG5cdCcjMzMwMEZGJyxcblx0JyMzMzMzQ0MnLFxuXHQnIzMzMzNGRicsXG5cdCcjMzM2NkNDJyxcblx0JyMzMzY2RkYnLFxuXHQnIzMzOTlDQycsXG5cdCcjMzM5OUZGJyxcblx0JyMzM0NDMDAnLFxuXHQnIzMzQ0MzMycsXG5cdCcjMzNDQzY2Jyxcblx0JyMzM0NDOTknLFxuXHQnIzMzQ0NDQycsXG5cdCcjMzNDQ0ZGJyxcblx0JyM2NjAwQ0MnLFxuXHQnIzY2MDBGRicsXG5cdCcjNjYzM0NDJyxcblx0JyM2NjMzRkYnLFxuXHQnIzY2Q0MwMCcsXG5cdCcjNjZDQzMzJyxcblx0JyM5OTAwQ0MnLFxuXHQnIzk5MDBGRicsXG5cdCcjOTkzM0NDJyxcblx0JyM5OTMzRkYnLFxuXHQnIzk5Q0MwMCcsXG5cdCcjOTlDQzMzJyxcblx0JyNDQzAwMDAnLFxuXHQnI0NDMDAzMycsXG5cdCcjQ0MwMDY2Jyxcblx0JyNDQzAwOTknLFxuXHQnI0NDMDBDQycsXG5cdCcjQ0MwMEZGJyxcblx0JyNDQzMzMDAnLFxuXHQnI0NDMzMzMycsXG5cdCcjQ0MzMzY2Jyxcblx0JyNDQzMzOTknLFxuXHQnI0NDMzNDQycsXG5cdCcjQ0MzM0ZGJyxcblx0JyNDQzY2MDAnLFxuXHQnI0NDNjYzMycsXG5cdCcjQ0M5OTAwJyxcblx0JyNDQzk5MzMnLFxuXHQnI0NDQ0MwMCcsXG5cdCcjQ0NDQzMzJyxcblx0JyNGRjAwMDAnLFxuXHQnI0ZGMDAzMycsXG5cdCcjRkYwMDY2Jyxcblx0JyNGRjAwOTknLFxuXHQnI0ZGMDBDQycsXG5cdCcjRkYwMEZGJyxcblx0JyNGRjMzMDAnLFxuXHQnI0ZGMzMzMycsXG5cdCcjRkYzMzY2Jyxcblx0JyNGRjMzOTknLFxuXHQnI0ZGMzNDQycsXG5cdCcjRkYzM0ZGJyxcblx0JyNGRjY2MDAnLFxuXHQnI0ZGNjYzMycsXG5cdCcjRkY5OTAwJyxcblx0JyNGRjk5MzMnLFxuXHQnI0ZGQ0MwMCcsXG5cdCcjRkZDQzMzJ1xuXTtcblxuLyoqXG4gKiBDdXJyZW50bHkgb25seSBXZWJLaXQtYmFzZWQgV2ViIEluc3BlY3RvcnMsIEZpcmVmb3ggPj0gdjMxLFxuICogYW5kIHRoZSBGaXJlYnVnIGV4dGVuc2lvbiAoYW55IEZpcmVmb3ggdmVyc2lvbikgYXJlIGtub3duXG4gKiB0byBzdXBwb3J0IFwiJWNcIiBDU1MgY3VzdG9taXphdGlvbnMuXG4gKlxuICogVE9ETzogYWRkIGEgYGxvY2FsU3RvcmFnZWAgdmFyaWFibGUgdG8gZXhwbGljaXRseSBlbmFibGUvZGlzYWJsZSBjb2xvcnNcbiAqL1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuXHQvLyBOQjogSW4gYW4gRWxlY3Ryb24gcHJlbG9hZCBzY3JpcHQsIGRvY3VtZW50IHdpbGwgYmUgZGVmaW5lZCBidXQgbm90IGZ1bGx5XG5cdC8vIGluaXRpYWxpemVkLiBTaW5jZSB3ZSBrbm93IHdlJ3JlIGluIENocm9tZSwgd2UnbGwganVzdCBkZXRlY3QgdGhpcyBjYXNlXG5cdC8vIGV4cGxpY2l0bHlcblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wcm9jZXNzICYmICh3aW5kb3cucHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHdpbmRvdy5wcm9jZXNzLl9fbndqcykpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIEludGVybmV0IEV4cGxvcmVyIGFuZCBFZGdlIGRvIG5vdCBzdXBwb3J0IGNvbG9ycy5cblx0aWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oZWRnZXx0cmlkZW50KVxcLyhcXGQrKS8pKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gSXMgd2Via2l0PyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNjQ1OTYwNi8zNzY3NzNcblx0Ly8gZG9jdW1lbnQgaXMgdW5kZWZpbmVkIGluIHJlYWN0LW5hdGl2ZTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LW5hdGl2ZS9wdWxsLzE2MzJcblx0cmV0dXJuICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2UpIHx8XG5cdFx0Ly8gSXMgZmlyZWJ1Zz8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzk4MTIwLzM3Njc3M1xuXHRcdCh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUuZmlyZWJ1ZyB8fCAod2luZG93LmNvbnNvbGUuZXhjZXB0aW9uICYmIHdpbmRvdy5jb25zb2xlLnRhYmxlKSkpIHx8XG5cdFx0Ly8gSXMgZmlyZWZveCA+PSB2MzE/XG5cdFx0Ly8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Ub29scy9XZWJfQ29uc29sZSNTdHlsaW5nX21lc3NhZ2VzXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLykgJiYgcGFyc2VJbnQoUmVnRXhwLiQxLCAxMCkgPj0gMzEpIHx8XG5cdFx0Ly8gRG91YmxlIGNoZWNrIHdlYmtpdCBpbiB1c2VyQWdlbnQganVzdCBpbiBjYXNlIHdlIGFyZSBpbiBhIHdvcmtlclxuXHRcdCh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXBwbGV3ZWJraXRcXC8oXFxkKykvKSk7XG59XG5cbi8qKlxuICogQ29sb3JpemUgbG9nIGFyZ3VtZW50cyBpZiBlbmFibGVkLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0QXJncyhhcmdzKSB7XG5cdGFyZ3NbMF0gPSAodGhpcy51c2VDb2xvcnMgPyAnJWMnIDogJycpICtcblx0XHR0aGlzLm5hbWVzcGFjZSArXG5cdFx0KHRoaXMudXNlQ29sb3JzID8gJyAlYycgOiAnICcpICtcblx0XHRhcmdzWzBdICtcblx0XHQodGhpcy51c2VDb2xvcnMgPyAnJWMgJyA6ICcgJykgK1xuXHRcdCcrJyArIG1vZHVsZS5leHBvcnRzLmh1bWFuaXplKHRoaXMuZGlmZik7XG5cblx0aWYgKCF0aGlzLnVzZUNvbG9ycykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IGMgPSAnY29sb3I6ICcgKyB0aGlzLmNvbG9yO1xuXHRhcmdzLnNwbGljZSgxLCAwLCBjLCAnY29sb3I6IGluaGVyaXQnKTtcblxuXHQvLyBUaGUgZmluYWwgXCIlY1wiIGlzIHNvbWV3aGF0IHRyaWNreSwgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBvdGhlclxuXHQvLyBhcmd1bWVudHMgcGFzc2VkIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlICVjLCBzbyB3ZSBuZWVkIHRvXG5cdC8vIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QgaW5kZXggdG8gaW5zZXJ0IHRoZSBDU1MgaW50b1xuXHRsZXQgaW5kZXggPSAwO1xuXHRsZXQgbGFzdEMgPSAwO1xuXHRhcmdzWzBdLnJlcGxhY2UoLyVbYS16QS1aJV0vZywgbWF0Y2ggPT4ge1xuXHRcdGlmIChtYXRjaCA9PT0gJyUlJykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpbmRleCsrO1xuXHRcdGlmIChtYXRjaCA9PT0gJyVjJykge1xuXHRcdFx0Ly8gV2Ugb25seSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgKmxhc3QqICVjXG5cdFx0XHQvLyAodGhlIHVzZXIgbWF5IGhhdmUgcHJvdmlkZWQgdGhlaXIgb3duKVxuXHRcdFx0bGFzdEMgPSBpbmRleDtcblx0XHR9XG5cdH0pO1xuXG5cdGFyZ3Muc3BsaWNlKGxhc3RDLCAwLCBjKTtcbn1cblxuLyoqXG4gKiBJbnZva2VzIGBjb25zb2xlLmRlYnVnKClgIHdoZW4gYXZhaWxhYmxlLlxuICogTm8tb3Agd2hlbiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGEgXCJmdW5jdGlvblwiLlxuICogSWYgYGNvbnNvbGUuZGVidWdgIGlzIG5vdCBhdmFpbGFibGUsIGZhbGxzIGJhY2tcbiAqIHRvIGBjb25zb2xlLmxvZ2AuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuZXhwb3J0cy5sb2cgPSBjb25zb2xlLmRlYnVnIHx8IGNvbnNvbGUubG9nIHx8ICgoKSA9PiB7fSk7XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzYXZlKG5hbWVzcGFjZXMpIHtcblx0dHJ5IHtcblx0XHRpZiAobmFtZXNwYWNlcykge1xuXHRcdFx0ZXhwb3J0cy5zdG9yYWdlLnNldEl0ZW0oJ2RlYnVnJywgbmFtZXNwYWNlcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGV4cG9ydHMuc3RvcmFnZS5yZW1vdmVJdGVtKCdkZWJ1ZycpO1xuXHRcdH1cblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbG9hZCgpIHtcblx0bGV0IHI7XG5cdHRyeSB7XG5cdFx0ciA9IGV4cG9ydHMuc3RvcmFnZS5nZXRJdGVtKCdkZWJ1ZycpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxuXG5cdC8vIElmIGRlYnVnIGlzbid0IHNldCBpbiBMUywgYW5kIHdlJ3JlIGluIEVsZWN0cm9uLCB0cnkgdG8gbG9hZCAkREVCVUdcblx0aWYgKCFyICYmIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiAnZW52JyBpbiBwcm9jZXNzKSB7XG5cdFx0ciA9IHByb2Nlc3MuZW52LkRFQlVHO1xuXHR9XG5cblx0cmV0dXJuIHI7XG59XG5cbi8qKlxuICogTG9jYWxzdG9yYWdlIGF0dGVtcHRzIHRvIHJldHVybiB0aGUgbG9jYWxzdG9yYWdlLlxuICpcbiAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugc2FmYXJpIHRocm93c1xuICogd2hlbiBhIHVzZXIgZGlzYWJsZXMgY29va2llcy9sb2NhbHN0b3JhZ2VcbiAqIGFuZCB5b3UgYXR0ZW1wdCB0byBhY2Nlc3MgaXQuXG4gKlxuICogQHJldHVybiB7TG9jYWxTdG9yYWdlfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbG9jYWxzdG9yYWdlKCkge1xuXHR0cnkge1xuXHRcdC8vIFRWTUxLaXQgKEFwcGxlIFRWIEpTIFJ1bnRpbWUpIGRvZXMgbm90IGhhdmUgYSB3aW5kb3cgb2JqZWN0LCBqdXN0IGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHRcblx0XHQvLyBUaGUgQnJvd3NlciBhbHNvIGhhcyBsb2NhbFN0b3JhZ2UgaW4gdGhlIGdsb2JhbCBjb250ZXh0LlxuXHRcdHJldHVybiBsb2NhbFN0b3JhZ2U7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb21tb24nKShleHBvcnRzKTtcblxuY29uc3Qge2Zvcm1hdHRlcnN9ID0gbW9kdWxlLmV4cG9ydHM7XG5cbi8qKlxuICogTWFwICVqIHRvIGBKU09OLnN0cmluZ2lmeSgpYCwgc2luY2Ugbm8gV2ViIEluc3BlY3RvcnMgZG8gdGhhdCBieSBkZWZhdWx0LlxuICovXG5cbmZvcm1hdHRlcnMuaiA9IGZ1bmN0aW9uICh2KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHYpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdHJldHVybiAnW1VuZXhwZWN0ZWRKU09OUGFyc2VFcnJvcl06ICcgKyBlcnJvci5tZXNzYWdlO1xuXHR9XG59O1xuIiwiLyoqXG4gKiBEZXRlY3QgRWxlY3Ryb24gcmVuZGVyZXIgLyBud2pzIHByb2Nlc3MsIHdoaWNoIGlzIG5vZGUsIGJ1dCB3ZSBzaG91bGRcbiAqIHRyZWF0IGFzIGEgYnJvd3Nlci5cbiAqL1xuXG5pZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8IHByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJyB8fCBwcm9jZXNzLmJyb3dzZXIgPT09IHRydWUgfHwgcHJvY2Vzcy5fX253anMpIHtcblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Jyb3dzZXIuanMnKTtcbn0gZWxzZSB7XG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9ub2RlLmpzJyk7XG59XG4iLCJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuZXhwb3J0IGNvbnN0IGRlYnVnRmFjdG9yeSA9IChuYW1lc3BhY2UpID0+IGRlYnVnKGBuYXBpOiR7bmFtZXNwYWNlfWApO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVidWcuanMubWFwIiwiaW1wb3J0IHsgX19hd2FpdGVyIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyByZWFkRmlsZSwgd3JpdGVGaWxlLCBjb3B5RmlsZSwgbWtkaXIsIHVubGluaywgc3RhdCB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnO1xuZXhwb3J0IGNvbnN0IHJlYWRGaWxlQXN5bmMgPSBwcm9taXNpZnkocmVhZEZpbGUpO1xuZXhwb3J0IGNvbnN0IHdyaXRlRmlsZUFzeW5jID0gcHJvbWlzaWZ5KHdyaXRlRmlsZSk7XG5leHBvcnQgY29uc3QgdW5saW5rQXN5bmMgPSBwcm9taXNpZnkodW5saW5rKTtcbmV4cG9ydCBjb25zdCBjb3B5RmlsZUFzeW5jID0gcHJvbWlzaWZ5KGNvcHlGaWxlKTtcbmV4cG9ydCBjb25zdCBta2RpckFzeW5jID0gcHJvbWlzaWZ5KG1rZGlyKTtcbmV4cG9ydCBjb25zdCBzdGF0QXN5bmMgPSBwcm9taXNpZnkoc3RhdCk7XG5leHBvcnQgZnVuY3Rpb24gZmlsZUV4aXN0cyhwYXRoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhpc3RzID0geWllbGQgc3RhdEFzeW5jKHBhdGgpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIGV4aXN0cztcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwaWNrKG8sIC4uLmtleXMpIHtcbiAgICByZXR1cm4ga2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgIGFjY1trZXldID0gb1trZXldO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsImltcG9ydCB7IF9fYXdhaXRlciB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgam9pbiwgcGFyc2UgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gJ2NsaXBhbmlvbic7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjb2xvcmV0dGUnO1xuaW1wb3J0IHsgZmRpciB9IGZyb20gJ2ZkaXInO1xuaW1wb3J0IHsgZ2V0TmFwaUNvbmZpZyB9IGZyb20gJy4vY29uc3RzJztcbmltcG9ydCB7IGRlYnVnRmFjdG9yeSB9IGZyb20gJy4vZGVidWcnO1xuaW1wb3J0IHsgVW5pQXJjaHNCeVBsYXRmb3JtIH0gZnJvbSAnLi9wYXJzZS10cmlwbGUnO1xuaW1wb3J0IHsgcmVhZEZpbGVBc3luYywgd3JpdGVGaWxlQXN5bmMgfSBmcm9tICcuL3V0aWxzJztcbmNvbnN0IGRlYnVnID0gZGVidWdGYWN0b3J5KCdhcnRpZmFjdHMnKTtcbmV4cG9ydCBjbGFzcyBBcnRpZmFjdHNDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuc291cmNlRGlyID0gT3B0aW9uLlN0cmluZygnLWQsLS1kaXInLCAnYXJ0aWZhY3RzJyk7XG4gICAgICAgIHRoaXMuZGlzdERpciA9IE9wdGlvbi5TdHJpbmcoJy0tZGlzdCcsICducG0nKTtcbiAgICAgICAgdGhpcy5jb25maWdGaWxlTmFtZSA9IE9wdGlvbi5TdHJpbmcoJy1jLC0tY29uZmlnJyk7XG4gICAgfVxuICAgIGV4ZWN1dGUoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCB7IHBsYXRmb3JtcywgYmluYXJ5TmFtZSwgcGFja2FnZUpzb25QYXRoIH0gPSBnZXROYXBpQ29uZmlnKHRoaXMuY29uZmlnRmlsZU5hbWUpO1xuICAgICAgICAgICAgY29uc3QgcGFja2FnZUpzb25EaXIgPSBwYXJzZShwYWNrYWdlSnNvblBhdGgpLmRpcjtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUFwaSA9IG5ldyBmZGlyKClcbiAgICAgICAgICAgICAgICAud2l0aEZ1bGxQYXRocygpXG4gICAgICAgICAgICAgICAgLmNyYXdsKGpvaW4ocHJvY2Vzcy5jd2QoKSwgdGhpcy5zb3VyY2VEaXIpKTtcbiAgICAgICAgICAgIGNvbnN0IGRpc3REaXJzID0gcGxhdGZvcm1zLm1hcCgocGxhdGZvcm0pID0+IGpvaW4ocHJvY2Vzcy5jd2QoKSwgdGhpcy5kaXN0RGlyLCBwbGF0Zm9ybS5wbGF0Zm9ybUFyY2hBQkkpKTtcbiAgICAgICAgICAgIGNvbnN0IHVuaXZlcnNhbFNvdXJjZUJpbnMgPSBuZXcgU2V0KHBsYXRmb3Jtc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHBsYXRmb3JtKSA9PiBwbGF0Zm9ybS5hcmNoID09PSAndW5pdmVyc2FsJylcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgocCkgPT4gVW5pQXJjaHNCeVBsYXRmb3JtW3AucGxhdGZvcm1dLm1hcCgoYSkgPT4gYCR7cC5wbGF0Zm9ybX0tJHthfWApKSk7XG4gICAgICAgICAgICB5aWVsZCBzb3VyY2VBcGkud2l0aFByb21pc2UoKS50aGVuKChvdXRwdXQpID0+IFByb21pc2UuYWxsKG91dHB1dC5tYXAoKGZpbGVQYXRoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgZGVidWcoYFJlYWQgWyR7Y2hhbGsueWVsbG93QnJpZ2h0KGZpbGVQYXRoKX1dYCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc291cmNlQ29udGVudCA9IHlpZWxkIHJlYWRGaWxlQXN5bmMoZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZE5hbWUgPSBwYXJzZShmaWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVybXMgPSBwYXJzZWROYW1lLm5hbWUuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwbGF0Zm9ybUFyY2hBQkkgPSB0ZXJtcy5wb3AoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBfYmluYXJ5TmFtZSA9IHRlcm1zLmpvaW4oJy4nKTtcbiAgICAgICAgICAgICAgICBpZiAoX2JpbmFyeU5hbWUgIT09IGJpbmFyeU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoYFske2NoYWxrLnllbGxvd0JyaWdodChfYmluYXJ5TmFtZSl9XSBpcyBub3QgbWF0Y2hlZCB3aXRoIFske2NoYWxrLmdyZWVuQnJpZ2h0KGJpbmFyeU5hbWUpfV0sIHNraXBgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkaXIgPSBkaXN0RGlycy5maW5kKChkaXIpID0+IGRpci5pbmNsdWRlcyhwbGF0Zm9ybUFyY2hBQkkpKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRpciAmJiB1bml2ZXJzYWxTb3VyY2VCaW5zLmhhcyhwbGF0Zm9ybUFyY2hBQkkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnKGBbJHtjaGFsay55ZWxsb3dCcmlnaHQocGxhdGZvcm1BcmNoQUJJKX1dIGhhcyBubyBkaXN0IGRpciBidXQgaXQgaXMgc291cmNlIGJpbiBmb3IgdW5pdmVyc2FsIGFyY2gsIHNraXBgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWRpcikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBkaXN0IGRpciBmb3VuZCBmb3IgJHtmaWxlUGF0aH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdEZpbGVQYXRoID0gam9pbihkaXIsIHBhcnNlZE5hbWUuYmFzZSk7XG4gICAgICAgICAgICAgICAgZGVidWcoYFdyaXRlIGZpbGUgY29udGVudCB0byBbJHtjaGFsay55ZWxsb3dCcmlnaHQoZGlzdEZpbGVQYXRoKX1dYCk7XG4gICAgICAgICAgICAgICAgeWllbGQgd3JpdGVGaWxlQXN5bmMoZGlzdEZpbGVQYXRoLCBzb3VyY2VDb250ZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0RmlsZVBhdGhMb2NhbCA9IGpvaW4ocGFja2FnZUpzb25EaXIsIHBhcnNlZE5hbWUuYmFzZSk7XG4gICAgICAgICAgICAgICAgZGVidWcoYFdyaXRlIGZpbGUgY29udGVudCB0byBbJHtjaGFsay55ZWxsb3dCcmlnaHQoZGlzdEZpbGVQYXRoTG9jYWwpfV1gKTtcbiAgICAgICAgICAgICAgICB5aWVsZCB3cml0ZUZpbGVBc3luYyhkaXN0RmlsZVBhdGhMb2NhbCwgc291cmNlQ29udGVudCk7XG4gICAgICAgICAgICB9KSkpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuQXJ0aWZhY3RzQ29tbWFuZC51c2FnZSA9IENvbW1hbmQuVXNhZ2Uoe1xuICAgIGRlc2NyaXB0aW9uOiAnQ29weSBhcnRpZmFjdHMgZnJvbSBHaXRodWIgQWN0aW9ucyBpbnRvIHNwZWNpZmllZCBkaXInLFxufSk7XG5BcnRpZmFjdHNDb21tYW5kLnBhdGhzID0gW1snYXJ0aWZhY3RzJ11dO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJ0aWZhY3RzLmpzLm1hcCIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgb3MgZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5jb25zdCBob21lZGlyID0gb3MuaG9tZWRpcigpO1xuY29uc3QgdG1wZGlyID0gb3MudG1wZGlyKCk7XG5jb25zdCB7ZW52fSA9IHByb2Nlc3M7XG5cbmNvbnN0IG1hY29zID0gbmFtZSA9PiB7XG5cdGNvbnN0IGxpYnJhcnkgPSBwYXRoLmpvaW4oaG9tZWRpciwgJ0xpYnJhcnknKTtcblxuXHRyZXR1cm4ge1xuXHRcdGRhdGE6IHBhdGguam9pbihsaWJyYXJ5LCAnQXBwbGljYXRpb24gU3VwcG9ydCcsIG5hbWUpLFxuXHRcdGNvbmZpZzogcGF0aC5qb2luKGxpYnJhcnksICdQcmVmZXJlbmNlcycsIG5hbWUpLFxuXHRcdGNhY2hlOiBwYXRoLmpvaW4obGlicmFyeSwgJ0NhY2hlcycsIG5hbWUpLFxuXHRcdGxvZzogcGF0aC5qb2luKGxpYnJhcnksICdMb2dzJywgbmFtZSksXG5cdFx0dGVtcDogcGF0aC5qb2luKHRtcGRpciwgbmFtZSksXG5cdH07XG59O1xuXG5jb25zdCB3aW5kb3dzID0gbmFtZSA9PiB7XG5cdGNvbnN0IGFwcERhdGEgPSBlbnYuQVBQREFUQSB8fCBwYXRoLmpvaW4oaG9tZWRpciwgJ0FwcERhdGEnLCAnUm9hbWluZycpO1xuXHRjb25zdCBsb2NhbEFwcERhdGEgPSBlbnYuTE9DQUxBUFBEQVRBIHx8IHBhdGguam9pbihob21lZGlyLCAnQXBwRGF0YScsICdMb2NhbCcpO1xuXG5cdHJldHVybiB7XG5cdFx0Ly8gRGF0YS9jb25maWcvY2FjaGUvbG9nIGFyZSBpbnZlbnRlZCBieSBtZSBhcyBXaW5kb3dzIGlzbid0IG9waW5pb25hdGVkIGFib3V0IHRoaXNcblx0XHRkYXRhOiBwYXRoLmpvaW4obG9jYWxBcHBEYXRhLCBuYW1lLCAnRGF0YScpLFxuXHRcdGNvbmZpZzogcGF0aC5qb2luKGFwcERhdGEsIG5hbWUsICdDb25maWcnKSxcblx0XHRjYWNoZTogcGF0aC5qb2luKGxvY2FsQXBwRGF0YSwgbmFtZSwgJ0NhY2hlJyksXG5cdFx0bG9nOiBwYXRoLmpvaW4obG9jYWxBcHBEYXRhLCBuYW1lLCAnTG9nJyksXG5cdFx0dGVtcDogcGF0aC5qb2luKHRtcGRpciwgbmFtZSksXG5cdH07XG59O1xuXG4vLyBodHRwczovL3NwZWNpZmljYXRpb25zLmZyZWVkZXNrdG9wLm9yZy9iYXNlZGlyLXNwZWMvYmFzZWRpci1zcGVjLWxhdGVzdC5odG1sXG5jb25zdCBsaW51eCA9IG5hbWUgPT4ge1xuXHRjb25zdCB1c2VybmFtZSA9IHBhdGguYmFzZW5hbWUoaG9tZWRpcik7XG5cblx0cmV0dXJuIHtcblx0XHRkYXRhOiBwYXRoLmpvaW4oZW52LlhER19EQVRBX0hPTUUgfHwgcGF0aC5qb2luKGhvbWVkaXIsICcubG9jYWwnLCAnc2hhcmUnKSwgbmFtZSksXG5cdFx0Y29uZmlnOiBwYXRoLmpvaW4oZW52LlhER19DT05GSUdfSE9NRSB8fCBwYXRoLmpvaW4oaG9tZWRpciwgJy5jb25maWcnKSwgbmFtZSksXG5cdFx0Y2FjaGU6IHBhdGguam9pbihlbnYuWERHX0NBQ0hFX0hPTUUgfHwgcGF0aC5qb2luKGhvbWVkaXIsICcuY2FjaGUnKSwgbmFtZSksXG5cdFx0Ly8gaHR0cHM6Ly93aWtpLmRlYmlhbi5vcmcvWERHQmFzZURpcmVjdG9yeVNwZWNpZmljYXRpb24jc3RhdGVcblx0XHRsb2c6IHBhdGguam9pbihlbnYuWERHX1NUQVRFX0hPTUUgfHwgcGF0aC5qb2luKGhvbWVkaXIsICcubG9jYWwnLCAnc3RhdGUnKSwgbmFtZSksXG5cdFx0dGVtcDogcGF0aC5qb2luKHRtcGRpciwgdXNlcm5hbWUsIG5hbWUpLFxuXHR9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZW52UGF0aHMobmFtZSwge3N1ZmZpeCA9ICdub2RlanMnfSA9IHt9KSB7XG5cdGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBhIHN0cmluZywgZ290ICR7dHlwZW9mIG5hbWV9YCk7XG5cdH1cblxuXHRpZiAoc3VmZml4KSB7XG5cdFx0Ly8gQWRkIHN1ZmZpeCB0byBwcmV2ZW50IHBvc3NpYmxlIGNvbmZsaWN0IHdpdGggbmF0aXZlIGFwcHNcblx0XHRuYW1lICs9IGAtJHtzdWZmaXh9YDtcblx0fVxuXG5cdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuXHRcdHJldHVybiBtYWNvcyhuYW1lKTtcblx0fVxuXG5cdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG5cdFx0cmV0dXJuIHdpbmRvd3MobmFtZSk7XG5cdH1cblxuXHRyZXR1cm4gbGludXgobmFtZSk7XG59XG4iLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5leHBvcnQgZGVmYXVsdCBmcmVlR2xvYmFsO1xuIiwiaW1wb3J0IGZyZWVHbG9iYWwgZnJvbSAnLi9fZnJlZUdsb2JhbC5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuZXhwb3J0IGRlZmF1bHQgcm9vdDtcbiIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxuZXhwb3J0IGRlZmF1bHQgU3ltYm9sO1xuIiwiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldFJhd1RhZztcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBvYmplY3RUb1N0cmluZztcbiIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcbmltcG9ydCBnZXRSYXdUYWcgZnJvbSAnLi9fZ2V0UmF3VGFnLmpzJztcbmltcG9ydCBvYmplY3RUb1N0cmluZyBmcm9tICcuL19vYmplY3RUb1N0cmluZy5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlR2V0VGFnO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzT2JqZWN0TGlrZTtcbiIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNTeW1ib2w7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheU1hcDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5leHBvcnQgZGVmYXVsdCBpc0FycmF5O1xuIiwiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VUb1N0cmluZztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdDtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlkZW50aXR5O1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRnVuY3Rpb247XG4iLCJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxuZXhwb3J0IGRlZmF1bHQgY29yZUpzRGF0YTtcbiIsImltcG9ydCBjb3JlSnNEYXRhIGZyb20gJy4vX2NvcmVKc0RhdGEuanMnO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc01hc2tlZDtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Tb3VyY2U7XG4iLCJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzTWFza2VkIGZyb20gJy4vX2lzTWFza2VkLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCB0b1NvdXJjZSBmcm9tICcuL190b1NvdXJjZS5qcyc7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc05hdGl2ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRWYWx1ZTtcbiIsImltcG9ydCBiYXNlSXNOYXRpdmUgZnJvbSAnLi9fYmFzZUlzTmF0aXZlLmpzJztcbmltcG9ydCBnZXRWYWx1ZSBmcm9tICcuL19nZXRWYWx1ZS5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldE5hdGl2ZTtcbiIsImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcbmltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpO1xuXG5leHBvcnQgZGVmYXVsdCBXZWFrTWFwO1xuIiwiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lUHJvcGVydHk7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzSW5kZXg7XG4iLCJpbXBvcnQgZGVmaW5lUHJvcGVydHkgZnJvbSAnLi9fZGVmaW5lUHJvcGVydHkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlQXNzaWduVmFsdWU7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXE7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTGVuZ3RoO1xuIiwiaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc0xlbmd0aCBmcm9tICcuL2lzTGVuZ3RoLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJyYXlMaWtlO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1Byb3RvdHlwZTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VUaW1lcztcbiIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc0FyZ3VtZW50cztcbiIsImltcG9ydCBiYXNlSXNBcmd1bWVudHMgZnJvbSAnLi9fYmFzZUlzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPyBiYXNlSXNBcmd1bWVudHMgOiBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgJiZcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaXNBcmd1bWVudHM7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0dWJGYWxzZTtcbiIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuaW1wb3J0IHN0dWJGYWxzZSBmcm9tICcuL3N0dWJGYWxzZS5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQgaXNCdWZmZXI7XG4iLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc0xlbmd0aCBmcm9tICcuL2lzTGVuZ3RoLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG52YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xudHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc1R5cGVkQXJyYXk7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VVbmFyeTtcbiIsImltcG9ydCBmcmVlR2xvYmFsIGZyb20gJy4vX2ZyZWVHbG9iYWwuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5leHBvcnQgZGVmYXVsdCBub2RlVXRpbDtcbiIsImltcG9ydCBiYXNlSXNUeXBlZEFycmF5IGZyb20gJy4vX2Jhc2VJc1R5cGVkQXJyYXkuanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IG5vZGVVdGlsIGZyb20gJy4vX25vZGVVdGlsLmpzJztcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IGlzVHlwZWRBcnJheTtcbiIsImltcG9ydCBiYXNlVGltZXMgZnJvbSAnLi9fYmFzZVRpbWVzLmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNJbmRleCBmcm9tICcuL19pc0luZGV4LmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgb3ZlckFyZztcbiIsImltcG9ydCBvdmVyQXJnIGZyb20gJy4vX292ZXJBcmcuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCk7XG5cbmV4cG9ydCBkZWZhdWx0IG5hdGl2ZUtleXM7XG4iLCJpbXBvcnQgaXNQcm90b3R5cGUgZnJvbSAnLi9faXNQcm90b3R5cGUuanMnO1xuaW1wb3J0IG5hdGl2ZUtleXMgZnJvbSAnLi9fbmF0aXZlS2V5cy5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUtleXM7XG4iLCJpbXBvcnQgYXJyYXlMaWtlS2V5cyBmcm9tICcuL19hcnJheUxpa2VLZXlzLmpzJztcbmltcG9ydCBiYXNlS2V5cyBmcm9tICcuL19iYXNlS2V5cy5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBrZXlzO1xuIiwiaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0tleTtcbiIsImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlQ3JlYXRlO1xuIiwiaW1wb3J0IG5hdGl2ZUNyZWF0ZSBmcm9tICcuL19uYXRpdmVDcmVhdGUuanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzaENsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzaERlbGV0ZTtcbiIsImltcG9ydCBuYXRpdmVDcmVhdGUgZnJvbSAnLi9fbmF0aXZlQ3JlYXRlLmpzJztcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXNoR2V0O1xuIiwiaW1wb3J0IG5hdGl2ZUNyZWF0ZSBmcm9tICcuL19uYXRpdmVDcmVhdGUuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhc2hIYXM7XG4iLCJpbXBvcnQgbmF0aXZlQ3JlYXRlIGZyb20gJy4vX25hdGl2ZUNyZWF0ZS5qcyc7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXNoU2V0O1xuIiwiaW1wb3J0IGhhc2hDbGVhciBmcm9tICcuL19oYXNoQ2xlYXIuanMnO1xuaW1wb3J0IGhhc2hEZWxldGUgZnJvbSAnLi9faGFzaERlbGV0ZS5qcyc7XG5pbXBvcnQgaGFzaEdldCBmcm9tICcuL19oYXNoR2V0LmpzJztcbmltcG9ydCBoYXNoSGFzIGZyb20gJy4vX2hhc2hIYXMuanMnO1xuaW1wb3J0IGhhc2hTZXQgZnJvbSAnLi9faGFzaFNldC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5leHBvcnQgZGVmYXVsdCBIYXNoO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBsaXN0Q2FjaGVDbGVhcjtcbiIsImltcG9ydCBlcSBmcm9tICcuL2VxLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzb2NJbmRleE9mO1xuIiwiaW1wb3J0IGFzc29jSW5kZXhPZiBmcm9tICcuL19hc3NvY0luZGV4T2YuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RDYWNoZURlbGV0ZTtcbiIsImltcG9ydCBhc3NvY0luZGV4T2YgZnJvbSAnLi9fYXNzb2NJbmRleE9mLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbGlzdENhY2hlR2V0O1xuIiwiaW1wb3J0IGFzc29jSW5kZXhPZiBmcm9tICcuL19hc3NvY0luZGV4T2YuanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbGlzdENhY2hlSGFzO1xuIiwiaW1wb3J0IGFzc29jSW5kZXhPZiBmcm9tICcuL19hc3NvY0luZGV4T2YuanMnO1xuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RDYWNoZVNldDtcbiIsImltcG9ydCBsaXN0Q2FjaGVDbGVhciBmcm9tICcuL19saXN0Q2FjaGVDbGVhci5qcyc7XG5pbXBvcnQgbGlzdENhY2hlRGVsZXRlIGZyb20gJy4vX2xpc3RDYWNoZURlbGV0ZS5qcyc7XG5pbXBvcnQgbGlzdENhY2hlR2V0IGZyb20gJy4vX2xpc3RDYWNoZUdldC5qcyc7XG5pbXBvcnQgbGlzdENhY2hlSGFzIGZyb20gJy4vX2xpc3RDYWNoZUhhcy5qcyc7XG5pbXBvcnQgbGlzdENhY2hlU2V0IGZyb20gJy4vX2xpc3RDYWNoZVNldC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxuZXhwb3J0IGRlZmF1bHQgTGlzdENhY2hlO1xuIiwiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5leHBvcnQgZGVmYXVsdCBNYXA7XG4iLCJpbXBvcnQgSGFzaCBmcm9tICcuL19IYXNoLmpzJztcbmltcG9ydCBMaXN0Q2FjaGUgZnJvbSAnLi9fTGlzdENhY2hlLmpzJztcbmltcG9ydCBNYXAgZnJvbSAnLi9fTWFwLmpzJztcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBDYWNoZUNsZWFyO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHVuaXF1ZSBvYmplY3Qga2V5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5YWJsZSh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJylcbiAgICA/ICh2YWx1ZSAhPT0gJ19fcHJvdG9fXycpXG4gICAgOiAodmFsdWUgPT09IG51bGwpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0tleWFibGU7XG4iLCJpbXBvcnQgaXNLZXlhYmxlIGZyb20gJy4vX2lzS2V5YWJsZS5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0TWFwRGF0YTtcbiIsImltcG9ydCBnZXRNYXBEYXRhIGZyb20gJy4vX2dldE1hcERhdGEuanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwQ2FjaGVEZWxldGU7XG4iLCJpbXBvcnQgZ2V0TWFwRGF0YSBmcm9tICcuL19nZXRNYXBEYXRhLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBDYWNoZUdldDtcbiIsImltcG9ydCBnZXRNYXBEYXRhIGZyb20gJy4vX2dldE1hcERhdGEuanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBDYWNoZUhhcztcbiIsImltcG9ydCBnZXRNYXBEYXRhIGZyb20gJy4vX2dldE1hcERhdGEuanMnO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcENhY2hlU2V0O1xuIiwiaW1wb3J0IG1hcENhY2hlQ2xlYXIgZnJvbSAnLi9fbWFwQ2FjaGVDbGVhci5qcyc7XG5pbXBvcnQgbWFwQ2FjaGVEZWxldGUgZnJvbSAnLi9fbWFwQ2FjaGVEZWxldGUuanMnO1xuaW1wb3J0IG1hcENhY2hlR2V0IGZyb20gJy4vX21hcENhY2hlR2V0LmpzJztcbmltcG9ydCBtYXBDYWNoZUhhcyBmcm9tICcuL19tYXBDYWNoZUhhcy5qcyc7XG5pbXBvcnQgbWFwQ2FjaGVTZXQgZnJvbSAnLi9fbWFwQ2FjaGVTZXQuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTWFwQ2FjaGVgLlxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBtYXBDYWNoZURlbGV0ZTtcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBtYXBDYWNoZUdldDtcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBtYXBDYWNoZVNldDtcblxuZXhwb3J0IGRlZmF1bHQgTWFwQ2FjaGU7XG4iLCJpbXBvcnQgTWFwQ2FjaGUgZnJvbSAnLi9fTWFwQ2FjaGUuanMnO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXG4gKiBwcm92aWRlZCwgaXQgZGV0ZXJtaW5lcyB0aGUgY2FjaGUga2V5IGZvciBzdG9yaW5nIHRoZSByZXN1bHQgYmFzZWQgb24gdGhlXG4gKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXG4gKiBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBtZW1vaXplZCBmdW5jdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXG4gKiBmdW5jdGlvbi4gSXRzIGNyZWF0aW9uIG1heSBiZSBjdXN0b21pemVkIGJ5IHJlcGxhY2luZyB0aGUgYF8ubWVtb2l6ZS5DYWNoZWBcbiAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICogbWV0aG9kIGludGVyZmFjZSBvZiBgY2xlYXJgLCBgZGVsZXRlYCwgYGdldGAsIGBoYXNgLCBhbmQgYHNldGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2MnOiAzLCAnZCc6IDQgfTtcbiAqXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogdmFsdWVzKG90aGVyKTtcbiAqIC8vID0+IFszLCA0XVxuICpcbiAqIG9iamVjdC5hID0gMjtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsnYScsICdiJ11cbiAqXG4gKiAvLyBSZXBsYWNlIGBfLm1lbW9pemUuQ2FjaGVgLlxuICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZShmdW5jLCByZXNvbHZlcikge1xuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgIT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGtleSA9IHJlc29sdmVyID8gcmVzb2x2ZXIuYXBwbHkodGhpcywgYXJncykgOiBhcmdzWzBdLFxuICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KSB8fCBjYWNoZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBtZW1vaXplZC5jYWNoZSA9IG5ldyAobWVtb2l6ZS5DYWNoZSB8fCBNYXBDYWNoZSk7XG4gIHJldHVybiBtZW1vaXplZDtcbn1cblxuLy8gRXhwb3NlIGBNYXBDYWNoZWAuXG5tZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemU7XG4iLCJpbXBvcnQgbWVtb2l6ZSBmcm9tICcuL21lbW9pemUuanMnO1xuXG4vKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gIHZhciByZXN1bHQgPSBtZW1vaXplKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICBjYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9KTtcblxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemVDYXBwZWQ7XG4iLCJpbXBvcnQgbWVtb2l6ZUNhcHBlZCBmcm9tICcuL19tZW1vaXplQ2FwcGVkLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdUb1BhdGg7XG4iLCJpbXBvcnQgYmFzZVRvU3RyaW5nIGZyb20gJy4vX2Jhc2VUb1N0cmluZy5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b1N0cmluZyhudWxsKTtcbiAqIC8vID0+ICcnXG4gKlxuICogXy50b1N0cmluZygtMCk7XG4gKiAvLyA9PiAnLTAnXG4gKlxuICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xuICogLy8gPT4gJzEsMiwzJ1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogYmFzZVRvU3RyaW5nKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9TdHJpbmc7XG4iLCJpbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzS2V5IGZyb20gJy4vX2lzS2V5LmpzJztcbmltcG9ydCBzdHJpbmdUb1BhdGggZnJvbSAnLi9fc3RyaW5nVG9QYXRoLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2FzdFBhdGg7XG4iLCJpbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cbiAqL1xuZnVuY3Rpb24gdG9LZXkodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b0tleTtcbiIsImltcG9ydCBjYXN0UGF0aCBmcm9tICcuL19jYXN0UGF0aC5qcyc7XG5pbXBvcnQgdG9LZXkgZnJvbSAnLi9fdG9LZXkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gMCxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlR2V0O1xuIiwiaW1wb3J0IGJhc2VHZXQgZnJvbSAnLi9fYmFzZUdldC5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKi9cbmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0O1xuIiwiLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheVB1c2g7XG4iLCJpbXBvcnQgTGlzdENhY2hlIGZyb20gJy4vX0xpc3RDYWNoZS5qcyc7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0YWNrQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0YWNrRGVsZXRlO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBzdGFjayB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmdldChrZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdGFja0dldDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0YWNrSGFzO1xuIiwiaW1wb3J0IExpc3RDYWNoZSBmcm9tICcuL19MaXN0Q2FjaGUuanMnO1xuaW1wb3J0IE1hcCBmcm9tICcuL19NYXAuanMnO1xuaW1wb3J0IE1hcENhY2hlIGZyb20gJy4vX01hcENhY2hlLmpzJztcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7XG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gIH1cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0YWNrU2V0O1xuIiwiaW1wb3J0IExpc3RDYWNoZSBmcm9tICcuL19MaXN0Q2FjaGUuanMnO1xuaW1wb3J0IHN0YWNrQ2xlYXIgZnJvbSAnLi9fc3RhY2tDbGVhci5qcyc7XG5pbXBvcnQgc3RhY2tEZWxldGUgZnJvbSAnLi9fc3RhY2tEZWxldGUuanMnO1xuaW1wb3J0IHN0YWNrR2V0IGZyb20gJy4vX3N0YWNrR2V0LmpzJztcbmltcG9ydCBzdGFja0hhcyBmcm9tICcuL19zdGFja0hhcy5qcyc7XG5pbXBvcnQgc3RhY2tTZXQgZnJvbSAnLi9fc3RhY2tTZXQuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoZW50cmllcyk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7XG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG5TdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7XG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbmV4cG9ydCBkZWZhdWx0IFN0YWNrO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheUZpbHRlcjtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBlbXB0eSBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXlzID0gXy50aW1lcygyLCBfLnN0dWJBcnJheSk7XG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzKTtcbiAqIC8vID0+IFtbXSwgW11dXG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0dWJBcnJheTtcbiIsImltcG9ydCBhcnJheUZpbHRlciBmcm9tICcuL19hcnJheUZpbHRlci5qcyc7XG5pbXBvcnQgc3R1YkFycmF5IGZyb20gJy4vc3R1YkFycmF5LmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHJldHVybiBhcnJheUZpbHRlcihuYXRpdmVHZXRTeW1ib2xzKG9iamVjdCksIGZ1bmN0aW9uKHN5bWJvbCkge1xuICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBnZXRTeW1ib2xzO1xuIiwiaW1wb3J0IGFycmF5UHVzaCBmcm9tICcuL19hcnJheVB1c2guanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0QWxsS2V5c2AgYW5kIGBnZXRBbGxLZXlzSW5gIHdoaWNoIHVzZXNcbiAqIGBrZXlzRnVuY2AgYW5kIGBzeW1ib2xzRnVuY2AgdG8gZ2V0IHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN5bWJvbHNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNGdW5jLCBzeW1ib2xzRnVuYykge1xuICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcbiAgcmV0dXJuIGlzQXJyYXkob2JqZWN0KSA/IHJlc3VsdCA6IGFycmF5UHVzaChyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlR2V0QWxsS2V5cztcbiIsImltcG9ydCBiYXNlR2V0QWxsS2V5cyBmcm9tICcuL19iYXNlR2V0QWxsS2V5cy5qcyc7XG5pbXBvcnQgZ2V0U3ltYm9scyBmcm9tICcuL19nZXRTeW1ib2xzLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldEFsbEtleXM7XG4iLCJpbXBvcnQgZ2V0TmF0aXZlIGZyb20gJy4vX2dldE5hdGl2ZS5qcyc7XG5pbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpO1xuXG5leHBvcnQgZGVmYXVsdCBEYXRhVmlldztcbiIsImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcbmltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgUHJvbWlzZSA9IGdldE5hdGl2ZShyb290LCAnUHJvbWlzZScpO1xuXG5leHBvcnQgZGVmYXVsdCBQcm9taXNlO1xuIiwiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBTZXQgPSBnZXROYXRpdmUocm9vdCwgJ1NldCcpO1xuXG5leHBvcnQgZGVmYXVsdCBTZXQ7XG4iLCJpbXBvcnQgRGF0YVZpZXcgZnJvbSAnLi9fRGF0YVZpZXcuanMnO1xuaW1wb3J0IE1hcCBmcm9tICcuL19NYXAuanMnO1xuaW1wb3J0IFByb21pc2UgZnJvbSAnLi9fUHJvbWlzZS5qcyc7XG5pbXBvcnQgU2V0IGZyb20gJy4vX1NldC5qcyc7XG5pbXBvcnQgV2Vha01hcCBmcm9tICcuL19XZWFrTWFwLmpzJztcbmltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IHRvU291cmNlIGZyb20gJy4vX3RvU291cmNlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cbnZhciBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldyksXG4gICAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSB0b1NvdXJjZShQcm9taXNlKSxcbiAgICBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0KSxcbiAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xuXG4vKipcbiAqIEdldHMgdGhlIGB0b1N0cmluZ1RhZ2Agb2YgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG52YXIgZ2V0VGFnID0gYmFzZUdldFRhZztcblxuLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxuaWYgKChEYXRhVmlldyAmJiBnZXRUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSkpICE9IGRhdGFWaWV3VGFnKSB8fFxuICAgIChNYXAgJiYgZ2V0VGFnKG5ldyBNYXApICE9IG1hcFRhZykgfHxcbiAgICAoUHJvbWlzZSAmJiBnZXRUYWcoUHJvbWlzZS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XG4gICAgKFNldCAmJiBnZXRUYWcobmV3IFNldCkgIT0gc2V0VGFnKSB8fFxuICAgIChXZWFrTWFwICYmIGdldFRhZyhuZXcgV2Vha01hcCkgIT0gd2Vha01hcFRhZykpIHtcbiAgZ2V0VGFnID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUdldFRhZyh2YWx1ZSksXG4gICAgICAgIEN0b3IgPSByZXN1bHQgPT0gb2JqZWN0VGFnID8gdmFsdWUuY29uc3RydWN0b3IgOiB1bmRlZmluZWQsXG4gICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gdG9Tb3VyY2UoQ3RvcikgOiAnJztcblxuICAgIGlmIChjdG9yU3RyaW5nKSB7XG4gICAgICBzd2l0Y2ggKGN0b3JTdHJpbmcpIHtcbiAgICAgICAgY2FzZSBkYXRhVmlld0N0b3JTdHJpbmc6IHJldHVybiBkYXRhVmlld1RhZztcbiAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xuICAgICAgICBjYXNlIHByb21pc2VDdG9yU3RyaW5nOiByZXR1cm4gcHJvbWlzZVRhZztcbiAgICAgICAgY2FzZSBzZXRDdG9yU3RyaW5nOiByZXR1cm4gc2V0VGFnO1xuICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0VGFnO1xuIiwiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IFVpbnQ4QXJyYXk7XG4iLCIvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgYWRkXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBhbGlhcyBwdXNoXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICB0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSwgSEFTSF9VTkRFRklORUQpO1xuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2V0Q2FjaGVBZGQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldENhY2hlSGFzO1xuIiwiaW1wb3J0IE1hcENhY2hlIGZyb20gJy4vX01hcENhY2hlLmpzJztcbmltcG9ydCBzZXRDYWNoZUFkZCBmcm9tICcuL19zZXRDYWNoZUFkZC5qcyc7XG5pbXBvcnQgc2V0Q2FjaGVIYXMgZnJvbSAnLi9fc2V0Q2FjaGVIYXMuanMnO1xuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XG5cbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU2V0Q2FjaGVgLlxuU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gc2V0Q2FjaGVBZGQ7XG5TZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbmV4cG9ydCBkZWZhdWx0IFNldENhY2hlO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc29tZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlTb21lO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNhY2hlSGFzO1xuIiwiaW1wb3J0IFNldENhY2hlIGZyb20gJy4vX1NldENhY2hlLmpzJztcbmltcG9ydCBhcnJheVNvbWUgZnJvbSAnLi9fYXJyYXlTb21lLmpzJztcbmltcG9ydCBjYWNoZUhhcyBmcm9tICcuL19jYWNoZUhhcy5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtBcnJheX0gb3RoZXIgVGhlIG90aGVyIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoO1xuXG4gIGlmIChhcnJMZW5ndGggIT0gb3RoTGVuZ3RoICYmICEoaXNQYXJ0aWFsICYmIG90aExlbmd0aCA+IGFyckxlbmd0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIGFyclN0YWNrZWQgPSBzdGFjay5nZXQoYXJyYXkpO1xuICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gIGlmIChhcnJTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICByZXR1cm4gYXJyU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IGFycmF5O1xuICB9XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gdHJ1ZSxcbiAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IFNldENhY2hlIDogdW5kZWZpbmVkO1xuXG4gIHN0YWNrLnNldChhcnJheSwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIGFycmF5KTtcblxuICAvLyBJZ25vcmUgbm9uLWluZGV4IHByb3BlcnRpZXMuXG4gIHdoaWxlICgrK2luZGV4IDwgYXJyTGVuZ3RoKSB7XG4gICAgdmFyIGFyclZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2luZGV4XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBhcnJWYWx1ZSwgaW5kZXgsIG90aGVyLCBhcnJheSwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4LCBhcnJheSwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgaWYgKGNvbXBhcmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjb21wYXJlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKHNlZW4pIHtcbiAgICAgIGlmICghYXJyYXlTb21lKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcbiAgICAgICAgICAgIGlmICghY2FjaGVIYXMoc2Vlbiwgb3RoSW5kZXgpICYmXG4gICAgICAgICAgICAgICAgKGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBzZWVuLnB1c2gob3RoSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKSB7XG4gICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCEoXG4gICAgICAgICAgYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8XG4gICAgICAgICAgICBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKGFycmF5KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXF1YWxBcnJheXM7XG4iLCIvKipcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gKi9cbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobWFwLnNpemUpO1xuXG4gIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBba2V5LCB2YWx1ZV07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBUb0FycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2V0VG9BcnJheTtcbiIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcbmltcG9ydCBVaW50OEFycmF5IGZyb20gJy4vX1VpbnQ4QXJyYXkuanMnO1xuaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuaW1wb3J0IGVxdWFsQXJyYXlzIGZyb20gJy4vX2VxdWFsQXJyYXlzLmpzJztcbmltcG9ydCBtYXBUb0FycmF5IGZyb20gJy4vX21hcFRvQXJyYXkuanMnO1xuaW1wb3J0IHNldFRvQXJyYXkgZnJvbSAnLi9fc2V0VG9BcnJheS5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGNvbXBhcmluZyBvYmplY3RzIG9mXG4gKiB0aGUgc2FtZSBgdG9TdHJpbmdUYWdgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY29tcGFyaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIG9yIGBTdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3RzIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCB0YWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgIChvYmplY3QuYnl0ZU9mZnNldCAhPSBvdGhlci5ieXRlT2Zmc2V0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBvYmplY3QgPSBvYmplY3QuYnVmZmVyO1xuICAgICAgb3RoZXIgPSBvdGhlci5idWZmZXI7XG5cbiAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgICFlcXVhbEZ1bmMobmV3IFVpbnQ4QXJyYXkob2JqZWN0KSwgbmV3IFVpbnQ4QXJyYXkob3RoZXIpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGNhc2UgYm9vbFRhZzpcbiAgICBjYXNlIGRhdGVUYWc6XG4gICAgY2FzZSBudW1iZXJUYWc6XG4gICAgICAvLyBDb2VyY2UgYm9vbGVhbnMgdG8gYDFgIG9yIGAwYCBhbmQgZGF0ZXMgdG8gbWlsbGlzZWNvbmRzLlxuICAgICAgLy8gSW52YWxpZCBkYXRlcyBhcmUgY29lcmNlZCB0byBgTmFOYC5cbiAgICAgIHJldHVybiBlcSgrb2JqZWN0LCArb3RoZXIpO1xuXG4gICAgY2FzZSBlcnJvclRhZzpcbiAgICAgIHJldHVybiBvYmplY3QubmFtZSA9PSBvdGhlci5uYW1lICYmIG9iamVjdC5tZXNzYWdlID09IG90aGVyLm1lc3NhZ2U7XG5cbiAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgIC8vIENvZXJjZSByZWdleGVzIHRvIHN0cmluZ3MgYW5kIHRyZWF0IHN0cmluZ3MsIHByaW1pdGl2ZXMgYW5kIG9iamVjdHMsXG4gICAgICAvLyBhcyBlcXVhbC4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXG4gICAgICAvLyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuIG9iamVjdCA9PSAob3RoZXIgKyAnJyk7XG5cbiAgICBjYXNlIG1hcFRhZzpcbiAgICAgIHZhciBjb252ZXJ0ID0gbWFwVG9BcnJheTtcblxuICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRztcbiAgICAgIGNvbnZlcnQgfHwgKGNvbnZlcnQgPSBzZXRUb0FycmF5KTtcblxuICAgICAgaWYgKG9iamVjdC5zaXplICE9IG90aGVyLnNpemUgJiYgIWlzUGFydGlhbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gICAgICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICAgICAgaWYgKHN0YWNrZWQpIHtcbiAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gICAgICB9XG4gICAgICBiaXRtYXNrIHw9IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUc7XG5cbiAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICAgICAgdmFyIHJlc3VsdCA9IGVxdWFsQXJyYXlzKGNvbnZlcnQob2JqZWN0KSwgY29udmVydChvdGhlciksIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICAgICAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuXG4gICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICBpZiAoc3ltYm9sVmFsdWVPZikge1xuICAgICAgICByZXR1cm4gc3ltYm9sVmFsdWVPZi5jYWxsKG9iamVjdCkgPT0gc3ltYm9sVmFsdWVPZi5jYWxsKG90aGVyKTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVxdWFsQnlUYWc7XG4iLCJpbXBvcnQgZ2V0QWxsS2V5cyBmcm9tICcuL19nZXRBbGxLZXlzLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3Igb2JqZWN0cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgb2JqUHJvcHMgPSBnZXRBbGxLZXlzKG9iamVjdCksXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXG4gICAgICBvdGhQcm9wcyA9IGdldEFsbEtleXMob3RoZXIpLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xuXG4gIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc1BhcnRpYWwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIHZhciBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgaWYgKCEoaXNQYXJ0aWFsID8ga2V5IGluIG90aGVyIDogaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwga2V5KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIG9ialN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICBpZiAob2JqU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgcmV0dXJuIG9ialN0YWNrZWQgPT0gb3RoZXIgJiYgb3RoU3RhY2tlZCA9PSBvYmplY3Q7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHRydWU7XG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBvYmplY3QpO1xuXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcbiAgd2hpbGUgKCsraW5kZXggPCBvYmpMZW5ndGgpIHtcbiAgICBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJba2V5XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBvYmpWYWx1ZSwga2V5LCBvdGhlciwgb2JqZWN0LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IChvYmpWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKG9ialZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKVxuICAgICAgICAgIDogY29tcGFyZWRcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2tpcEN0b3IgfHwgKHNraXBDdG9yID0ga2V5ID09ICdjb25zdHJ1Y3RvcicpO1xuICB9XG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XG4gICAgdmFyIG9iakN0b3IgPSBvYmplY3QuY29uc3RydWN0b3IsXG4gICAgICAgIG90aEN0b3IgPSBvdGhlci5jb25zdHJ1Y3RvcjtcblxuICAgIC8vIE5vbiBgT2JqZWN0YCBvYmplY3QgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWFsLlxuICAgIGlmIChvYmpDdG9yICE9IG90aEN0b3IgJiZcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXG4gICAgICAgICEodHlwZW9mIG9iakN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvYmpDdG9yIGluc3RhbmNlb2Ygb2JqQ3RvciAmJlxuICAgICAgICAgIHR5cGVvZiBvdGhDdG9yID09ICdmdW5jdGlvbicgJiYgb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVxdWFsT2JqZWN0cztcbiIsImltcG9ydCBTdGFjayBmcm9tICcuL19TdGFjay5qcyc7XG5pbXBvcnQgZXF1YWxBcnJheXMgZnJvbSAnLi9fZXF1YWxBcnJheXMuanMnO1xuaW1wb3J0IGVxdWFsQnlUYWcgZnJvbSAnLi9fZXF1YWxCeVRhZy5qcyc7XG5pbXBvcnQgZXF1YWxPYmplY3RzIGZyb20gJy4vX2VxdWFsT2JqZWN0cy5qcyc7XG5pbXBvcnQgZ2V0VGFnIGZyb20gJy4vX2dldFRhZy5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzQnVmZmVyIGZyb20gJy4vaXNCdWZmZXIuanMnO1xuaW1wb3J0IGlzVHlwZWRBcnJheSBmcm9tICcuL2lzVHlwZWRBcnJheS5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbGAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICogZGVlcCBjb21wYXJpc29ucyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBjb21wYXJlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWxEZWVwKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIG9iaklzQXJyID0gaXNBcnJheShvYmplY3QpLFxuICAgICAgb3RoSXNBcnIgPSBpc0FycmF5KG90aGVyKSxcbiAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob2JqZWN0KSxcbiAgICAgIG90aFRhZyA9IG90aElzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob3RoZXIpO1xuXG4gIG9ialRhZyA9IG9ialRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb2JqVGFnO1xuICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcblxuICB2YXIgb2JqSXNPYmogPSBvYmpUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgaXNTYW1lVGFnID0gb2JqVGFnID09IG90aFRhZztcblxuICBpZiAoaXNTYW1lVGFnICYmIGlzQnVmZmVyKG9iamVjdCkpIHtcbiAgICBpZiAoIWlzQnVmZmVyKG90aGVyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBvYmpJc0FyciA9IHRydWU7XG4gICAgb2JqSXNPYmogPSBmYWxzZTtcbiAgfVxuICBpZiAoaXNTYW1lVGFnICYmICFvYmpJc09iaikge1xuICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgcmV0dXJuIChvYmpJc0FyciB8fCBpc1R5cGVkQXJyYXkob2JqZWN0KSlcbiAgICAgID8gZXF1YWxBcnJheXMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaylcbiAgICAgIDogZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICB9XG4gIGlmICghKGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRykpIHtcbiAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxuICAgICAgICBvdGhJc1dyYXBwZWQgPSBvdGhJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCAnX193cmFwcGVkX18nKTtcblxuICAgIGlmIChvYmpJc1dyYXBwZWQgfHwgb3RoSXNXcmFwcGVkKSB7XG4gICAgICB2YXIgb2JqVW53cmFwcGVkID0gb2JqSXNXcmFwcGVkID8gb2JqZWN0LnZhbHVlKCkgOiBvYmplY3QsXG4gICAgICAgICAgb3RoVW53cmFwcGVkID0gb3RoSXNXcmFwcGVkID8gb3RoZXIudmFsdWUoKSA6IG90aGVyO1xuXG4gICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgICAgcmV0dXJuIGVxdWFsRnVuYyhvYmpVbndyYXBwZWQsIG90aFVud3JhcHBlZCwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzU2FtZVRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICByZXR1cm4gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNFcXVhbERlZXA7XG4iLCJpbXBvcnQgYmFzZUlzRXF1YWxEZWVwIGZyb20gJy4vX2Jhc2VJc0VxdWFsRGVlcC5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc0VxdWFsO1xuIiwiaW1wb3J0IFN0YWNrIGZyb20gJy4vX1N0YWNrLmpzJztcbmltcG9ydCBiYXNlSXNFcXVhbCBmcm9tICcuL19iYXNlSXNFcXVhbC5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hdGNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7QXJyYXl9IG1hdGNoRGF0YSBUaGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3MgdG8gbWF0Y2guXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNoLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGluZGV4ID0gbWF0Y2hEYXRhLmxlbmd0aCxcbiAgICAgIGxlbmd0aCA9IGluZGV4LFxuICAgICAgbm9DdXN0b21pemVyID0gIWN1c3RvbWl6ZXI7XG5cbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuICFsZW5ndGg7XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pXG4gICAgICAgICAgPyBkYXRhWzFdICE9PSBvYmplY3RbZGF0YVswXV1cbiAgICAgICAgICA6ICEoZGF0YVswXSBpbiBvYmplY3QpXG4gICAgICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgIHZhciBrZXkgPSBkYXRhWzBdLFxuICAgICAgICBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBzcmNWYWx1ZSA9IGRhdGFbMV07XG5cbiAgICBpZiAobm9DdXN0b21pemVyICYmIGRhdGFbMl0pIHtcbiAgICAgIGlmIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RhY2sgPSBuZXcgU3RhY2s7XG4gICAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgICB2YXIgcmVzdWx0ID0gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKTtcbiAgICAgIH1cbiAgICAgIGlmICghKHJlc3VsdCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgICAgIDogcmVzdWx0XG4gICAgICAgICAgKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNNYXRjaDtcbiIsImltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcbiAqICBlcXVhbGl0eSBjb21wYXJpc29ucywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSAmJiAhaXNPYmplY3QodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1N0cmljdENvbXBhcmFibGU7XG4iLCJpbXBvcnQgaXNTdHJpY3RDb21wYXJhYmxlIGZyb20gJy4vX2lzU3RyaWN0Q29tcGFyYWJsZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGdldE1hdGNoRGF0YShvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXMob2JqZWN0KSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgdmFyIGtleSA9IHJlc3VsdFtsZW5ndGhdLFxuICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgcmVzdWx0W2xlbmd0aF0gPSBba2V5LCB2YWx1ZSwgaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0TWF0Y2hEYXRhO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYG1hdGNoZXNQcm9wZXJ0eWAgZm9yIHNvdXJjZSB2YWx1ZXMgc3VpdGFibGVcbiAqIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShrZXksIHNyY1ZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFtrZXldID09PSBzcmNWYWx1ZSAmJlxuICAgICAgKHNyY1ZhbHVlICE9PSB1bmRlZmluZWQgfHwgKGtleSBpbiBPYmplY3Qob2JqZWN0KSkpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZTtcbiIsImltcG9ydCBiYXNlSXNNYXRjaCBmcm9tICcuL19iYXNlSXNNYXRjaC5qcyc7XG5pbXBvcnQgZ2V0TWF0Y2hEYXRhIGZyb20gJy4vX2dldE1hdGNoRGF0YS5qcyc7XG5pbXBvcnQgbWF0Y2hlc1N0cmljdENvbXBhcmFibGUgZnJvbSAnLi9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNvdXJjZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2UpIHtcbiAgdmFyIG1hdGNoRGF0YSA9IGdldE1hdGNoRGF0YShzb3VyY2UpO1xuICBpZiAobWF0Y2hEYXRhLmxlbmd0aCA9PSAxICYmIG1hdGNoRGF0YVswXVsyXSkge1xuICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShtYXRjaERhdGFbMF1bMF0sIG1hdGNoRGF0YVswXVsxXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgPT09IHNvdXJjZSB8fCBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZU1hdGNoZXM7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc0luYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSGFzSW4ob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUhhc0luO1xuIiwiaW1wb3J0IGNhc3RQYXRoIGZyb20gJy4vX2Nhc3RQYXRoLmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNJbmRleCBmcm9tICcuL19pc0luZGV4LmpzJztcbmltcG9ydCBpc0xlbmd0aCBmcm9tICcuL2lzTGVuZ3RoLmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBleGlzdHMgb24gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFzRnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2sgcHJvcGVydGllcy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBoYXNGdW5jKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBmYWxzZTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSk7XG4gICAgaWYgKCEocmVzdWx0ID0gb2JqZWN0ICE9IG51bGwgJiYgaGFzRnVuYyhvYmplY3QsIGtleSkpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgb2JqZWN0ID0gb2JqZWN0W2tleV07XG4gIH1cbiAgaWYgKHJlc3VsdCB8fCArK2luZGV4ICE9IGxlbmd0aCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgbGVuZ3RoID0gb2JqZWN0ID09IG51bGwgPyAwIDogb2JqZWN0Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGlzTGVuZ3RoKGxlbmd0aCkgJiYgaXNJbmRleChrZXksIGxlbmd0aCkgJiZcbiAgICAoaXNBcnJheShvYmplY3QpIHx8IGlzQXJndW1lbnRzKG9iamVjdCkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXNQYXRoO1xuIiwiaW1wb3J0IGJhc2VIYXNJbiBmcm9tICcuL19iYXNlSGFzSW4uanMnO1xuaW1wb3J0IGhhc1BhdGggZnJvbSAnLi9faGFzUGF0aC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0gXy5jcmVhdGUoeyAnYSc6IF8uY3JlYXRlKHsgJ2InOiAyIH0pIH0pO1xuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYS5iJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXNJbihvYmplY3QsIFsnYScsICdiJ10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYicpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaGFzSW4ob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgYmFzZUhhc0luKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzSW47XG4iLCJpbXBvcnQgYmFzZUlzRXF1YWwgZnJvbSAnLi9fYmFzZUlzRXF1YWwuanMnO1xuaW1wb3J0IGdldCBmcm9tICcuL2dldC5qcyc7XG5pbXBvcnQgaGFzSW4gZnJvbSAnLi9oYXNJbi5qcyc7XG5pbXBvcnQgaXNLZXkgZnJvbSAnLi9faXNLZXkuanMnO1xuaW1wb3J0IGlzU3RyaWN0Q29tcGFyYWJsZSBmcm9tICcuL19pc1N0cmljdENvbXBhcmFibGUuanMnO1xuaW1wb3J0IG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlIGZyb20gJy4vX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlLmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzUHJvcGVydHlgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNyY1ZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBzcmNWYWx1ZSkge1xuICBpZiAoaXNLZXkocGF0aCkgJiYgaXNTdHJpY3RDb21wYXJhYmxlKHNyY1ZhbHVlKSkge1xuICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSh0b0tleShwYXRoKSwgc3JjVmFsdWUpO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIgb2JqVmFsdWUgPSBnZXQob2JqZWN0LCBwYXRoKTtcbiAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxuICAgICAgPyBoYXNJbihvYmplY3QsIHBhdGgpXG4gICAgICA6IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZU1hdGNoZXNQcm9wZXJ0eTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHJvcGVydHlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5KGtleSkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VQcm9wZXJ0eTtcbiIsImltcG9ydCBiYXNlR2V0IGZyb20gJy4vX2Jhc2VHZXQuanMnO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVByb3BlcnR5YCB3aGljaCBzdXBwb3J0cyBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eURlZXAocGF0aCkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVByb3BlcnR5RGVlcDtcbiIsImltcG9ydCBiYXNlUHJvcGVydHkgZnJvbSAnLi9fYmFzZVByb3BlcnR5LmpzJztcbmltcG9ydCBiYXNlUHJvcGVydHlEZWVwIGZyb20gJy4vX2Jhc2VQcm9wZXJ0eURlZXAuanMnO1xuaW1wb3J0IGlzS2V5IGZyb20gJy4vX2lzS2V5LmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGEgZ2l2ZW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW1xuICogICB7ICdhJzogeyAnYic6IDIgfSB9LFxuICogICB7ICdhJzogeyAnYic6IDEgfSB9XG4gKiBdO1xuICpcbiAqIF8ubWFwKG9iamVjdHMsIF8ucHJvcGVydHkoJ2EuYicpKTtcbiAqIC8vID0+IFsyLCAxXVxuICpcbiAqIF8ubWFwKF8uc29ydEJ5KG9iamVjdHMsIF8ucHJvcGVydHkoWydhJywgJ2InXSkpLCAnYS5iJyk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqL1xuZnVuY3Rpb24gcHJvcGVydHkocGF0aCkge1xuICByZXR1cm4gaXNLZXkocGF0aCkgPyBiYXNlUHJvcGVydHkodG9LZXkocGF0aCkpIDogYmFzZVByb3BlcnR5RGVlcChwYXRoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcHJvcGVydHk7XG4iLCJpbXBvcnQgYmFzZU1hdGNoZXMgZnJvbSAnLi9fYmFzZU1hdGNoZXMuanMnO1xuaW1wb3J0IGJhc2VNYXRjaGVzUHJvcGVydHkgZnJvbSAnLi9fYmFzZU1hdGNoZXNQcm9wZXJ0eS5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IHByb3BlcnR5IGZyb20gJy4vcHJvcGVydHkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLml0ZXJhdGVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSBbdmFsdWU9Xy5pZGVudGl0eV0gVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYW4gaXRlcmF0ZWUuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGl0ZXJhdGVlLlxuICovXG5mdW5jdGlvbiBiYXNlSXRlcmF0ZWUodmFsdWUpIHtcbiAgLy8gRG9uJ3Qgc3RvcmUgdGhlIGB0eXBlb2ZgIHJlc3VsdCBpbiBhIHZhcmlhYmxlIHRvIGF2b2lkIGEgSklUIGJ1ZyBpbiBTYWZhcmkgOS5cbiAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTYwMzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGlkZW50aXR5O1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gaXNBcnJheSh2YWx1ZSlcbiAgICAgID8gYmFzZU1hdGNoZXNQcm9wZXJ0eSh2YWx1ZVswXSwgdmFsdWVbMV0pXG4gICAgICA6IGJhc2VNYXRjaGVzKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gcHJvcGVydHkodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXRlcmF0ZWU7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUFnZ3JlZ2F0b3JgIGZvciBhcnJheXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGBhY2N1bXVsYXRvcmAgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICogQHBhcmFtIHtPYmplY3R9IGFjY3VtdWxhdG9yIFRoZSBpbml0aWFsIGFnZ3JlZ2F0ZWQgb2JqZWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBhY2N1bXVsYXRvcmAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5QWdncmVnYXRvcihhcnJheSwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBzZXR0ZXIoYWNjdW11bGF0b3IsIHZhbHVlLCBpdGVyYXRlZSh2YWx1ZSksIGFycmF5KTtcbiAgfVxuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5QWdncmVnYXRvcjtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIGtleXNGdW5jKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXG4gICAgICAgIHByb3BzID0ga2V5c0Z1bmMob2JqZWN0KSxcbiAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcHNbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF07XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVCYXNlRm9yO1xuIiwiaW1wb3J0IGNyZWF0ZUJhc2VGb3IgZnJvbSAnLi9fY3JlYXRlQmFzZUZvci5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9iamVjdGBcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG52YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxuZXhwb3J0IGRlZmF1bHQgYmFzZUZvcjtcbiIsImltcG9ydCBiYXNlRm9yIGZyb20gJy4vX2Jhc2VGb3IuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlRm9yT3duKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBiYXNlRm9yKG9iamVjdCwgaXRlcmF0ZWUsIGtleXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRm9yT3duO1xuIiwiaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgYmFzZUVhY2hgIG9yIGBiYXNlRWFjaFJpZ2h0YCBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBhIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VFYWNoKGVhY2hGdW5jLCBmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgfVxuICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgIHJldHVybiBlYWNoRnVuYyhjb2xsZWN0aW9uLCBpdGVyYXRlZSk7XG4gICAgfVxuICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMSxcbiAgICAgICAgaXRlcmFibGUgPSBPYmplY3QoY29sbGVjdGlvbik7XG5cbiAgICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2luZGV4XSwgaW5kZXgsIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVCYXNlRWFjaDtcbiIsImltcG9ydCBiYXNlRm9yT3duIGZyb20gJy4vX2Jhc2VGb3JPd24uanMnO1xuaW1wb3J0IGNyZWF0ZUJhc2VFYWNoIGZyb20gJy4vX2NyZWF0ZUJhc2VFYWNoLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JFYWNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAqL1xudmFyIGJhc2VFYWNoID0gY3JlYXRlQmFzZUVhY2goYmFzZUZvck93bik7XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VFYWNoO1xuIiwiaW1wb3J0IGJhc2VFYWNoIGZyb20gJy4vX2Jhc2VFYWNoLmpzJztcblxuLyoqXG4gKiBBZ2dyZWdhdGVzIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCBvbiBgYWNjdW11bGF0b3JgIHdpdGgga2V5cyB0cmFuc2Zvcm1lZFxuICogYnkgYGl0ZXJhdGVlYCBhbmQgdmFsdWVzIHNldCBieSBgc2V0dGVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYGFjY3VtdWxhdG9yYCB2YWx1ZXMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gKiBAcGFyYW0ge09iamVjdH0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgYWdncmVnYXRlZCBvYmplY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGFjY3VtdWxhdG9yYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFnZ3JlZ2F0b3IoY29sbGVjdGlvbiwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgIHNldHRlcihhY2N1bXVsYXRvciwgdmFsdWUsIGl0ZXJhdGVlKHZhbHVlKSwgY29sbGVjdGlvbik7XG4gIH0pO1xuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VBZ2dyZWdhdG9yO1xuIiwiaW1wb3J0IGFycmF5QWdncmVnYXRvciBmcm9tICcuL19hcnJheUFnZ3JlZ2F0b3IuanMnO1xuaW1wb3J0IGJhc2VBZ2dyZWdhdG9yIGZyb20gJy4vX2Jhc2VBZ2dyZWdhdG9yLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uZ3JvdXBCeWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGFjY3VtdWxhdG9yIHZhbHVlcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpbml0aWFsaXplcl0gVGhlIGFjY3VtdWxhdG9yIG9iamVjdCBpbml0aWFsaXplci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFnZ3JlZ2F0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFnZ3JlZ2F0b3Ioc2V0dGVyLCBpbml0aWFsaXplcikge1xuICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUFnZ3JlZ2F0b3IgOiBiYXNlQWdncmVnYXRvcixcbiAgICAgICAgYWNjdW11bGF0b3IgPSBpbml0aWFsaXplciA/IGluaXRpYWxpemVyKCkgOiB7fTtcblxuICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIHNldHRlciwgYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgYWNjdW11bGF0b3IpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVBZ2dyZWdhdG9yO1xuIiwiaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGNyZWF0ZUFnZ3JlZ2F0b3IgZnJvbSAnLi9fY3JlYXRlQWdncmVnYXRvci5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2Yga2V5cyBnZW5lcmF0ZWQgZnJvbSB0aGUgcmVzdWx0cyBvZiBydW5uaW5nXG4gKiBlYWNoIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gIHRocnUgYGl0ZXJhdGVlYC4gVGhlIG9yZGVyIG9mIGdyb3VwZWQgdmFsdWVzXG4gKiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvcmRlciB0aGV5IG9jY3VyIGluIGBjb2xsZWN0aW9uYC4gVGhlIGNvcnJlc3BvbmRpbmdcbiAqIHZhbHVlIG9mIGVhY2gga2V5IGlzIGFuIGFycmF5IG9mIGVsZW1lbnRzIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZVxuICoga2V5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbXBvc2VkIGFnZ3JlZ2F0ZSBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZ3JvdXBCeShbNi4xLCA0LjIsIDYuM10sIE1hdGguZmxvb3IpO1xuICogLy8gPT4geyAnNCc6IFs0LjJdLCAnNic6IFs2LjEsIDYuM10gfVxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5ncm91cEJ5KFsnb25lJywgJ3R3bycsICd0aHJlZSddLCAnbGVuZ3RoJyk7XG4gKiAvLyA9PiB7ICczJzogWydvbmUnLCAndHdvJ10sICc1JzogWyd0aHJlZSddIH1cbiAqL1xudmFyIGdyb3VwQnkgPSBjcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHQsIGtleSkpIHtcbiAgICByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBiYXNlQXNzaWduVmFsdWUocmVzdWx0LCBrZXksIFt2YWx1ZV0pO1xuICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZ3JvdXBCeTtcbiIsImV4cG9ydCBjb25zdCBBUk1fRkVBVFVSRVNfSCA9IGAvKiBNYWNyb3MgdG8gdGVzdCBmb3IgQ1BVIGZlYXR1cmVzIG9uIEFSTS4gIEdlbmVyaWMgQVJNIHZlcnNpb24uXG5Db3B5cmlnaHQgKEMpIDIwMTItMjAyMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cblRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LlxuVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG5tb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG5MaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXJcbnZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG5NRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxuTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbkxpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeS4gIElmIG5vdCwgc2VlXG48aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi9cblxuI2lmbmRlZiBfQVJNX0FSTV9GRUFUVVJFU19IXG4jZGVmaW5lIF9BUk1fQVJNX0ZFQVRVUkVTX0ggMVxuXG4vKiBBbiBPUy1zcGVjaWZpYyBhcm0tZmVhdHVyZXMuaCBmaWxlIHNob3VsZCBkZWZpbmUgQVJNX0hBVkVfVkZQIHRvXG5hbiBhcHByb3ByaWF0ZSBleHByZXNzaW9uIGZvciB0ZXN0aW5nIGF0IHJ1bnRpbWUgd2hldGhlciB0aGUgVkZQXG5oYXJkd2FyZSBpcyBwcmVzZW50LiAgV2UnbGwgdGhlbiByZWRlZmluZSBpdCB0byBhIGNvbnN0YW50IGlmIHdlXG5rbm93IGF0IGNvbXBpbGUgdGltZSB0aGF0IHdlIGNhbiBhc3N1bWUgVkZQLiAgKi9cblxuI2lmbmRlZiBfX1NPRlRGUF9fXG4vKiBUaGUgY29tcGlsZXIgaXMgZ2VuZXJhdGluZyBWRlAgaW5zdHJ1Y3Rpb25zLCBzbyB3ZSdyZSBhbHJlYWR5XG5hc3N1bWluZyB0aGUgaGFyZHdhcmUgZXhpc3RzLiAgKi9cbiMgdW5kZWYgQVJNX0hBVkVfVkZQXG4jIGRlZmluZSBBUk1fSEFWRV9WRlBcdDFcbiNlbmRpZlxuXG4vKiBBbiBPUy1zcGVjaWZpYyBhcm0tZmVhdHVyZXMuaCBmaWxlIG1heSBkZWZpbmUgQVJNX0FTU1VNRV9OT19JV01NWFRcbnRvIGluZGljYXRlIGF0IGNvbXBpbGUgdGltZSB0aGF0IGlXTU1YdCBoYXJkd2FyZSBpcyBuZXZlciBwcmVzZW50XG5hdCBydW50aW1lIChvciB0aGF0IHdlIG5ldmVyIGNhcmUgYWJvdXQgaXRzIHN0YXRlKSBhbmQgc28gbmVlZCBub3RcbmJlIGNoZWNrZWQgZm9yLiAgKi9cblxuLyogQSBtb3JlLXNwZWNpZmljIGFybS1mZWF0dXJlcy5oIGZpbGUgbWF5IGRlZmluZSBBUk1fQUxXQVlTX0JYIHRvIGluZGljYXRlXG50aGF0IGluc3RydWN0aW9ucyB1c2luZyBwYyBhcyBhIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIG11c3QgbmV2ZXIgYmUgdXNlZCxcbnNvIGEgXCJieFwiIChvciBcImJseFwiKSBpbnN0cnVjdGlvbiBpcyBhbHdheXMgcmVxdWlyZWQuICAqL1xuXG4vKiBUaGUgbG9nMiBvZiB0aGUgbWluaW11bSBhbGlnbm1lbnQgcmVxdWlyZWQgZm9yIGFuIGFkZHJlc3MgdGhhdFxuaXMgdGhlIHRhcmdldCBvZiBhIGNvbXB1dGVkIGJyYW5jaCAoaS5lLiBhIFwiYnhcIiBpbnN0cnVjdGlvbikuXG5BIG1vcmUtc3BlY2lmaWMgYXJtLWZlYXR1cmVzLmggZmlsZSBtYXkgZGVmaW5lIHRoaXMgdG8gc2V0IGEgbW9yZVxuc3RyaW5nZW50IHJlcXVpcmVtZW50LlxuVXNpbmcgdGhpcyBvbmx5IG1ha2VzIHNlbnNlIGZvciBjb2RlIGluIEFSTSBtb2RlICh3aGVyZSBpbnN0cnVjdGlvbnNcbmFsd2F5cyBoYXZlIGEgZml4ZWQgc2l6ZSBvZiBmb3VyIGJ5dGVzKSwgb3IgZm9yIFRodW1iLW1vZGUgY29kZSB0aGF0IGlzXG5zcGVjaWZpY2FsbHkgYWxpZ25pbmcgYWxsIHRoZSByZWxhdGVkIGJyYW5jaCB0YXJnZXRzIHRvIG1hdGNoIChzaW5jZVxuVGh1bWIgaW5zdHJ1Y3Rpb25zIG1pZ2h0IGJlIGVpdGhlciB0d28gb3IgZm91ciBieXRlcykuICAqL1xuI2lmbmRlZiBBUk1fQlhfQUxJR05fTE9HMlxuIyBkZWZpbmUgQVJNX0JYX0FMSUdOX0xPRzJcdDJcbiNlbmRpZlxuXG4vKiBBbiBPUy1zcGVjaWZpYyBhcm0tZmVhdHVyZXMuaCBmaWxlIG1heSBkZWZpbmUgQVJNX05PX0lOREVYX1JFR0lTVEVSIHRvXG5pbmRpY2F0ZSB0aGF0IHRoZSB0d28tcmVnaXN0ZXIgYWRkcmVzc2luZyBtb2RlcyBtdXN0IG5ldmVyIGJlIHVzZWQuICAqL1xuXG4jZW5kaWYgIC8qIGFybS1mZWF0dXJlcy5oICovXG5gO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJtLWZlYXR1cmVzLmguanMubWFwIiwiZXhwb3J0IGNvbnN0IGNyZWF0ZUpzQmluZGluZyA9IChsb2NhbE5hbWUsIHBrZ05hbWUpID0+IGAvKiB0c2xpbnQ6ZGlzYWJsZSAqL1xuLyogZXNsaW50LWRpc2FibGUgKi9cbi8qIHByZXR0aWVyLWlnbm9yZSAqL1xuXG4vKiBhdXRvLWdlbmVyYXRlZCBieSBOQVBJLVJTICovXG5cbmNvbnN0IHsgZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jIH0gPSByZXF1aXJlKCdmcycpXG5jb25zdCB7IGpvaW4gfSA9IHJlcXVpcmUoJ3BhdGgnKVxuXG5jb25zdCB7IHBsYXRmb3JtLCBhcmNoIH0gPSBwcm9jZXNzXG5cbmxldCBuYXRpdmVCaW5kaW5nID0gbnVsbFxubGV0IGxvY2FsRmlsZUV4aXN0ZWQgPSBmYWxzZVxubGV0IGxvYWRFcnJvciA9IG51bGxcblxuZnVuY3Rpb24gaXNNdXNsKCkge1xuICAvLyBGb3IgTm9kZSAxMFxuICBpZiAoIXByb2Nlc3MucmVwb3J0IHx8IHR5cGVvZiBwcm9jZXNzLnJlcG9ydC5nZXRSZXBvcnQgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbGRkUGF0aCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjU3luYygnd2hpY2ggbGRkJykudG9TdHJpbmcoKS50cmltKClcbiAgICAgIHJldHVybiByZWFkRmlsZVN5bmMobGRkUGF0aCwgJ3V0ZjgnKS5pbmNsdWRlcygnbXVzbCcpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgeyBnbGliY1ZlcnNpb25SdW50aW1lIH0gPSBwcm9jZXNzLnJlcG9ydC5nZXRSZXBvcnQoKS5oZWFkZXJcbiAgICByZXR1cm4gIWdsaWJjVmVyc2lvblJ1bnRpbWVcbiAgfVxufVxuXG5zd2l0Y2ggKHBsYXRmb3JtKSB7XG4gIGNhc2UgJ2FuZHJvaWQnOlxuICAgIHN3aXRjaCAoYXJjaCkge1xuICAgICAgY2FzZSAnYXJtNjQnOlxuICAgICAgICBsb2NhbEZpbGVFeGlzdGVkID0gZXhpc3RzU3luYyhqb2luKF9fZGlybmFtZSwgJyR7bG9jYWxOYW1lfS5hbmRyb2lkLWFybTY0Lm5vZGUnKSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAobG9jYWxGaWxlRXhpc3RlZCkge1xuICAgICAgICAgICAgbmF0aXZlQmluZGluZyA9IHJlcXVpcmUoJy4vJHtsb2NhbE5hbWV9LmFuZHJvaWQtYXJtNjQubm9kZScpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcke3BrZ05hbWV9LWFuZHJvaWQtYXJtNjQnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvYWRFcnJvciA9IGVcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnYXJtJzpcbiAgICAgICAgbG9jYWxGaWxlRXhpc3RlZCA9IGV4aXN0c1N5bmMoam9pbihfX2Rpcm5hbWUsICcke2xvY2FsTmFtZX0uYW5kcm9pZC1hcm0tZWFiaS5ub2RlJykpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKGxvY2FsRmlsZUV4aXN0ZWQpIHtcbiAgICAgICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcuLyR7bG9jYWxOYW1lfS5hbmRyb2lkLWFybS1lYWJpLm5vZGUnKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnJHtwa2dOYW1lfS1hbmRyb2lkLWFybS1lYWJpJylcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2FkRXJyb3IgPSBlXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcXGBVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUgb24gQW5kcm9pZCBcXCR7YXJjaH1cXGApXG4gICAgfVxuICAgIGJyZWFrXG4gIGNhc2UgJ3dpbjMyJzpcbiAgICBzd2l0Y2ggKGFyY2gpIHtcbiAgICAgIGNhc2UgJ3g2NCc6XG4gICAgICAgIGxvY2FsRmlsZUV4aXN0ZWQgPSBleGlzdHNTeW5jKFxuICAgICAgICAgIGpvaW4oX19kaXJuYW1lLCAnJHtsb2NhbE5hbWV9LndpbjMyLXg2NC1tc3ZjLm5vZGUnKVxuICAgICAgICApXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKGxvY2FsRmlsZUV4aXN0ZWQpIHtcbiAgICAgICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcuLyR7bG9jYWxOYW1lfS53aW4zMi14NjQtbXN2Yy5ub2RlJylcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmF0aXZlQmluZGluZyA9IHJlcXVpcmUoJyR7cGtnTmFtZX0td2luMzIteDY0LW1zdmMnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvYWRFcnJvciA9IGVcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnaWEzMic6XG4gICAgICAgIGxvY2FsRmlsZUV4aXN0ZWQgPSBleGlzdHNTeW5jKFxuICAgICAgICAgIGpvaW4oX19kaXJuYW1lLCAnJHtsb2NhbE5hbWV9LndpbjMyLWlhMzItbXN2Yy5ub2RlJylcbiAgICAgICAgKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChsb2NhbEZpbGVFeGlzdGVkKSB7XG4gICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnLi8ke2xvY2FsTmFtZX0ud2luMzItaWEzMi1tc3ZjLm5vZGUnKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnJHtwa2dOYW1lfS13aW4zMi1pYTMyLW1zdmMnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvYWRFcnJvciA9IGVcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnYXJtNjQnOlxuICAgICAgICBsb2NhbEZpbGVFeGlzdGVkID0gZXhpc3RzU3luYyhcbiAgICAgICAgICBqb2luKF9fZGlybmFtZSwgJyR7bG9jYWxOYW1lfS53aW4zMi1hcm02NC1tc3ZjLm5vZGUnKVxuICAgICAgICApXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKGxvY2FsRmlsZUV4aXN0ZWQpIHtcbiAgICAgICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcuLyR7bG9jYWxOYW1lfS53aW4zMi1hcm02NC1tc3ZjLm5vZGUnKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnJHtwa2dOYW1lfS13aW4zMi1hcm02NC1tc3ZjJylcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2FkRXJyb3IgPSBlXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcXGBVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUgb24gV2luZG93czogXFwke2FyY2h9XFxgKVxuICAgIH1cbiAgICBicmVha1xuICBjYXNlICdkYXJ3aW4nOlxuICAgIGxvY2FsRmlsZUV4aXN0ZWQgPSBleGlzdHNTeW5jKGpvaW4oX19kaXJuYW1lLCAnJHtsb2NhbE5hbWV9LmRhcndpbi11bml2ZXJzYWwubm9kZScpKVxuICAgIHRyeSB7XG4gICAgICBpZiAobG9jYWxGaWxlRXhpc3RlZCkge1xuICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnLi8ke2xvY2FsTmFtZX0uZGFyd2luLXVuaXZlcnNhbC5ub2RlJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcke3BrZ05hbWV9LWRhcndpbi11bml2ZXJzYWwnKVxuICAgICAgfVxuICAgICAgYnJlYWtcbiAgICB9IGNhdGNoIHt9XG4gICAgc3dpdGNoIChhcmNoKSB7XG4gICAgICBjYXNlICd4NjQnOlxuICAgICAgICBsb2NhbEZpbGVFeGlzdGVkID0gZXhpc3RzU3luYyhqb2luKF9fZGlybmFtZSwgJyR7bG9jYWxOYW1lfS5kYXJ3aW4teDY0Lm5vZGUnKSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAobG9jYWxGaWxlRXhpc3RlZCkge1xuICAgICAgICAgICAgbmF0aXZlQmluZGluZyA9IHJlcXVpcmUoJy4vJHtsb2NhbE5hbWV9LmRhcndpbi14NjQubm9kZScpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcke3BrZ05hbWV9LWRhcndpbi14NjQnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvYWRFcnJvciA9IGVcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnYXJtNjQnOlxuICAgICAgICBsb2NhbEZpbGVFeGlzdGVkID0gZXhpc3RzU3luYyhcbiAgICAgICAgICBqb2luKF9fZGlybmFtZSwgJyR7bG9jYWxOYW1lfS5kYXJ3aW4tYXJtNjQubm9kZScpXG4gICAgICAgIClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAobG9jYWxGaWxlRXhpc3RlZCkge1xuICAgICAgICAgICAgbmF0aXZlQmluZGluZyA9IHJlcXVpcmUoJy4vJHtsb2NhbE5hbWV9LmRhcndpbi1hcm02NC5ub2RlJylcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmF0aXZlQmluZGluZyA9IHJlcXVpcmUoJyR7cGtnTmFtZX0tZGFyd2luLWFybTY0JylcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2FkRXJyb3IgPSBlXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcXGBVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUgb24gbWFjT1M6IFxcJHthcmNofVxcYClcbiAgICB9XG4gICAgYnJlYWtcbiAgY2FzZSAnZnJlZWJzZCc6XG4gICAgaWYgKGFyY2ggIT09ICd4NjQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXFxgVW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlIG9uIEZyZWVCU0Q6IFxcJHthcmNofVxcYClcbiAgICB9XG4gICAgbG9jYWxGaWxlRXhpc3RlZCA9IGV4aXN0c1N5bmMoam9pbihfX2Rpcm5hbWUsICcke2xvY2FsTmFtZX0uZnJlZWJzZC14NjQubm9kZScpKVxuICAgIHRyeSB7XG4gICAgICBpZiAobG9jYWxGaWxlRXhpc3RlZCkge1xuICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnLi8ke2xvY2FsTmFtZX0uZnJlZWJzZC14NjQubm9kZScpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnJHtwa2dOYW1lfS1mcmVlYnNkLXg2NCcpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9hZEVycm9yID0gZVxuICAgIH1cbiAgICBicmVha1xuICBjYXNlICdsaW51eCc6XG4gICAgc3dpdGNoIChhcmNoKSB7XG4gICAgICBjYXNlICd4NjQnOlxuICAgICAgICBpZiAoaXNNdXNsKCkpIHtcbiAgICAgICAgICBsb2NhbEZpbGVFeGlzdGVkID0gZXhpc3RzU3luYyhcbiAgICAgICAgICAgIGpvaW4oX19kaXJuYW1lLCAnJHtsb2NhbE5hbWV9LmxpbnV4LXg2NC1tdXNsLm5vZGUnKVxuICAgICAgICAgIClcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGxvY2FsRmlsZUV4aXN0ZWQpIHtcbiAgICAgICAgICAgICAgbmF0aXZlQmluZGluZyA9IHJlcXVpcmUoJy4vJHtsb2NhbE5hbWV9LmxpbnV4LXg2NC1tdXNsLm5vZGUnKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmF0aXZlQmluZGluZyA9IHJlcXVpcmUoJyR7cGtnTmFtZX0tbGludXgteDY0LW11c2wnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvYWRFcnJvciA9IGVcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9jYWxGaWxlRXhpc3RlZCA9IGV4aXN0c1N5bmMoXG4gICAgICAgICAgICBqb2luKF9fZGlybmFtZSwgJyR7bG9jYWxOYW1lfS5saW51eC14NjQtZ251Lm5vZGUnKVxuICAgICAgICAgIClcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGxvY2FsRmlsZUV4aXN0ZWQpIHtcbiAgICAgICAgICAgICAgbmF0aXZlQmluZGluZyA9IHJlcXVpcmUoJy4vJHtsb2NhbE5hbWV9LmxpbnV4LXg2NC1nbnUubm9kZScpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnJHtwa2dOYW1lfS1saW51eC14NjQtZ251JylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBsb2FkRXJyb3IgPSBlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdhcm02NCc6XG4gICAgICAgIGlmIChpc011c2woKSkge1xuICAgICAgICAgIGxvY2FsRmlsZUV4aXN0ZWQgPSBleGlzdHNTeW5jKFxuICAgICAgICAgICAgam9pbihfX2Rpcm5hbWUsICcke2xvY2FsTmFtZX0ubGludXgtYXJtNjQtbXVzbC5ub2RlJylcbiAgICAgICAgICApXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChsb2NhbEZpbGVFeGlzdGVkKSB7XG4gICAgICAgICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcuLyR7bG9jYWxOYW1lfS5saW51eC1hcm02NC1tdXNsLm5vZGUnKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmF0aXZlQmluZGluZyA9IHJlcXVpcmUoJyR7cGtnTmFtZX0tbGludXgtYXJtNjQtbXVzbCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9hZEVycm9yID0gZVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2NhbEZpbGVFeGlzdGVkID0gZXhpc3RzU3luYyhcbiAgICAgICAgICAgIGpvaW4oX19kaXJuYW1lLCAnJHtsb2NhbE5hbWV9LmxpbnV4LWFybTY0LWdudS5ub2RlJylcbiAgICAgICAgICApXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChsb2NhbEZpbGVFeGlzdGVkKSB7XG4gICAgICAgICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcuLyR7bG9jYWxOYW1lfS5saW51eC1hcm02NC1nbnUubm9kZScpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnJHtwa2dOYW1lfS1saW51eC1hcm02NC1nbnUnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvYWRFcnJvciA9IGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2FybSc6XG4gICAgICAgIGlmIChpc011c2woKSkge1xuICAgICAgICAgIGxvY2FsRmlsZUV4aXN0ZWQgPSBleGlzdHNTeW5jKFxuICAgICAgICAgICAgam9pbihfX2Rpcm5hbWUsICcke2xvY2FsTmFtZX0ubGludXgtYXJtLW11c2xlYWJpaGYubm9kZScpXG4gICAgICAgICAgKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAobG9jYWxGaWxlRXhpc3RlZCkge1xuICAgICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnLi8ke2xvY2FsTmFtZX0ubGludXgtYXJtLW11c2xlYWJpaGYubm9kZScpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnJHtwa2dOYW1lfS1saW51eC1hcm0tbXVzbGVhYmloZicpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9hZEVycm9yID0gZVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2NhbEZpbGVFeGlzdGVkID0gZXhpc3RzU3luYyhcbiAgICAgICAgICAgIGpvaW4oX19kaXJuYW1lLCAnJHtsb2NhbE5hbWV9LmxpbnV4LWFybS1nbnVlYWJpaGYubm9kZScpXG4gICAgICAgICAgKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAobG9jYWxGaWxlRXhpc3RlZCkge1xuICAgICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnLi8ke2xvY2FsTmFtZX0ubGludXgtYXJtLWdudWVhYmloZi5ub2RlJylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcke3BrZ05hbWV9LWxpbnV4LWFybS1nbnVlYWJpaGYnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvYWRFcnJvciA9IGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3Jpc2N2NjQnOlxuICAgICAgICBpZiAoaXNNdXNsKCkpIHtcbiAgICAgICAgICBsb2NhbEZpbGVFeGlzdGVkID0gZXhpc3RzU3luYyhcbiAgICAgICAgICAgIGpvaW4oX19kaXJuYW1lLCAnJHtsb2NhbE5hbWV9LmxpbnV4LXJpc2N2NjQtbXVzbC5ub2RlJylcbiAgICAgICAgICApXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChsb2NhbEZpbGVFeGlzdGVkKSB7XG4gICAgICAgICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcuLyR7bG9jYWxOYW1lfS5saW51eC1yaXNjdjY0LW11c2wubm9kZScpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnJHtwa2dOYW1lfS1saW51eC1yaXNjdjY0LW11c2wnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvYWRFcnJvciA9IGVcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9jYWxGaWxlRXhpc3RlZCA9IGV4aXN0c1N5bmMoXG4gICAgICAgICAgICBqb2luKF9fZGlybmFtZSwgJyR7bG9jYWxOYW1lfS5saW51eC1yaXNjdjY0LWdudS5ub2RlJylcbiAgICAgICAgICApXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChsb2NhbEZpbGVFeGlzdGVkKSB7XG4gICAgICAgICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcuLyR7bG9jYWxOYW1lfS5saW51eC1yaXNjdjY0LWdudS5ub2RlJylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5hdGl2ZUJpbmRpbmcgPSByZXF1aXJlKCcke3BrZ05hbWV9LWxpbnV4LXJpc2N2NjQtZ251JylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBsb2FkRXJyb3IgPSBlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzMzkweCc6XG4gICAgICAgIGxvY2FsRmlsZUV4aXN0ZWQgPSBleGlzdHNTeW5jKFxuICAgICAgICAgIGpvaW4oX19kaXJuYW1lLCAnJHtsb2NhbE5hbWV9LmxpbnV4LXMzOTB4LWdudS5ub2RlJylcbiAgICAgICAgKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChsb2NhbEZpbGVFeGlzdGVkKSB7XG4gICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnLi8ke2xvY2FsTmFtZX0ubGludXgtczM5MHgtZ251Lm5vZGUnKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuYXRpdmVCaW5kaW5nID0gcmVxdWlyZSgnJHtwa2dOYW1lfS1saW51eC1zMzkweC1nbnUnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvYWRFcnJvciA9IGVcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcYFVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZSBvbiBMaW51eDogXFwke2FyY2h9XFxgKVxuICAgIH1cbiAgICBicmVha1xuICBkZWZhdWx0OlxuICAgIHRocm93IG5ldyBFcnJvcihcXGBVbnN1cHBvcnRlZCBPUzogXFwke3BsYXRmb3JtfSwgYXJjaGl0ZWN0dXJlOiBcXCR7YXJjaH1cXGApXG59XG5cbmlmICghbmF0aXZlQmluZGluZykge1xuICBpZiAobG9hZEVycm9yKSB7XG4gICAgdGhyb3cgbG9hZEVycm9yXG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxcYEZhaWxlZCB0byBsb2FkIG5hdGl2ZSBiaW5kaW5nXFxgKVxufVxuXG5gO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9anMtYmluZGluZy10ZW1wbGF0ZS5qcy5tYXAiLCJ2YXIgX2E7XG5pbXBvcnQgeyBfX2F3YWl0ZXIgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ29zJztcbmltcG9ydCB7IGpvaW4sIHBhcnNlLCBzZXAgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gJ2NsaXBhbmlvbic7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjb2xvcmV0dGUnO1xuaW1wb3J0IGVudlBhdGhzIGZyb20gJ2Vudi1wYXRocyc7XG5pbXBvcnQgeyBncm91cEJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi9wYWNrYWdlLmpzb24nO1xuaW1wb3J0IHsgQVJNX0ZFQVRVUkVTX0ggfSBmcm9tICcuL2FybS1mZWF0dXJlcy5oJztcbmltcG9ydCB7IGdldE5hcGlDb25maWcgfSBmcm9tICcuL2NvbnN0cyc7XG5pbXBvcnQgeyBkZWJ1Z0ZhY3RvcnkgfSBmcm9tICcuL2RlYnVnJztcbmltcG9ydCB7IGNyZWF0ZUpzQmluZGluZyB9IGZyb20gJy4vanMtYmluZGluZy10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBnZXRIb3N0VGFyZ2V0VHJpcGxlLCBwYXJzZVRyaXBsZSB9IGZyb20gJy4vcGFyc2UtdHJpcGxlJztcbmltcG9ydCB7IGNvcHlGaWxlQXN5bmMsIG1rZGlyQXN5bmMsIHJlYWRGaWxlQXN5bmMsIHVubGlua0FzeW5jLCB3cml0ZUZpbGVBc3luYywgfSBmcm9tICcuL3V0aWxzJztcbmNvbnN0IGRlYnVnID0gZGVidWdGYWN0b3J5KCdidWlsZCcpO1xuY29uc3QgWklHX1BMQVRGT1JNX1RBUkdFVF9NQVAgPSB7XG4gICAgJ3g4Nl82NC11bmtub3duLWxpbnV4LW11c2wnOiAneDg2XzY0LWxpbnV4LW11c2wnLFxuICAgICd4ODZfNjQtdW5rbm93bi1saW51eC1nbnUnOiAneDg2XzY0LWxpbnV4LWdudScsXG4gICAgLy8gRG9lc24ndCBzdXBwb3J0IFdpbmRvd3MgTVNWQyBmb3Igbm93XG4gICAgLy8gJ3g4Nl82NC1wYy13aW5kb3dzLWdudSc6ICd4ODZfNjQtd2luZG93cy1nbnUnLFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96aWdsYW5nL3ppZy9pc3N1ZXMvMTc1OVxuICAgIC8vICd4ODZfNjQtdW5rbm93bi1mcmVlYnNkJzogJ3g4Nl82NC1mcmVlYnNkJyxcbiAgICAneDg2XzY0LWFwcGxlLWRhcndpbic6ICd4ODZfNjQtbWFjb3MnLFxuICAgICdhYXJjaDY0LWFwcGxlLWRhcndpbic6ICdhYXJjaDY0LW1hY29zJyxcbiAgICAnYWFyY2g2NC11bmtub3duLWxpbnV4LWdudSc6ICdhYXJjaDY0LWxpbnV4LWdudScsXG4gICAgJ2FhcmNoNjQtdW5rbm93bi1saW51eC1tdXNsJzogJ2FhcmNoNjQtbGludXgtbXVzbCcsXG4gICAgJ2FybXY3LXVua25vd24tbGludXgtZ251ZWFiaWhmJzogJ2FybS1saW51eC1nbnVlYWJpaGYnLFxuICAgICdhcm12Ny11bmtub3duLWxpbnV4LW11c2xlYWJpaGYnOiAnYXJtLWxpbnV4LW11c2xlYWJpaGYnLFxufTtcbmNvbnN0IERFRkFVTFRfR0xJQkNfVEFSR0VUID0gKF9hID0gcHJvY2Vzcy5lbnYuR0xJQkNfQUJJX1RBUkdFVCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJzIuMTcnO1xuY29uc3QgU0hFQkFOR19OT0RFID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICcnIDogJyMhL3Vzci9iaW4vZW52IG5vZGVcXG4nO1xuY29uc3QgU0hFQkFOR19TSCA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyAnJyA6ICcjIS91c3IvYmluL2VudiBzaFxcbic7XG5mdW5jdGlvbiBwcm9jZXNzWmlnTGlua2VyQXJncyhwbGF0Zm9ybSwgYXJncykge1xuICAgIGlmIChwbGF0Zm9ybS5pbmNsdWRlcygnYXBwbGUnKSkge1xuICAgICAgICBjb25zdCBuZXdBcmdzID0gYXJncy5maWx0ZXIoKGFyZywgaW5kZXgpID0+ICFhcmcuc3RhcnRzV2l0aCgnLVdsLC1leHBvcnRlZF9zeW1ib2xzX2xpc3QnKSAmJlxuICAgICAgICAgICAgYXJnICE9PSAnLVdsLC1keWxpYicgJiZcbiAgICAgICAgICAgIGFyZyAhPT0gJy1saWNvbnYnICYmXG4gICAgICAgICAgICBhcmcgIT09ICctV2wsLWRlYWRfc3RyaXAnICYmXG4gICAgICAgICAgICAhKGFyZyA9PT0gJy1mcmFtZXdvcmsnICYmIGFyZ3NbaW5kZXggKyAxXSA9PT0gJ0NvcmVGb3VuZGF0aW9uJykgJiZcbiAgICAgICAgICAgICEoYXJnID09PSAnQ29yZUZvdW5kYXRpb24nICYmIGFyZ3NbaW5kZXggLSAxXSA9PT0gJy1mcmFtZXdvcmsnKSk7XG4gICAgICAgIG5ld0FyZ3MucHVzaCgnLVdsLFwiLXVuZGVmaW5lZD1keW5hbWljX2xvb2t1cFwiJywgJy1kZWFkX3N0cmlwJywgJy1sdW53aW5kJyk7XG4gICAgICAgIHJldHVybiBuZXdBcmdzO1xuICAgIH1cbiAgICBpZiAocGxhdGZvcm0uaW5jbHVkZXMoJ2xpbnV4JykpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3NcbiAgICAgICAgICAgIC5tYXAoKGFyZykgPT4ge1xuICAgICAgICAgICAgaWYgKGFyZyA9PT0gJy1sZ2NjX3MnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICctbHVud2luZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigoYXJnKSA9PiBhcmcgIT09ICctbWFyY2g9YXJtdjctYScgJiYgYXJnICE9PSAnLVdsLC0tbm8tdW5kZWZpbmVkLXZlcnNpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnQgY2xhc3MgQnVpbGRDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuYXBwZW5kUGxhdGZvcm1Ub0ZpbGVuYW1lID0gT3B0aW9uLkJvb2xlYW4oYC0tcGxhdGZvcm1gLCBmYWxzZSwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBBZGQgcGxhdGZvcm0gdHJpcGxlIHRvIHRoZSAubm9kZSBmaWxlLiAke2NoYWxrLmdyZWVuKCdbbmFtZV0ubGludXgteDY0LWdudS5ub2RlJyl9IGZvciBleGFtcGxlYCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaXNSZWxlYXNlID0gT3B0aW9uLkJvb2xlYW4oYC0tcmVsZWFzZWAsIGZhbHNlLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYEJ5cGFzcyB0byAke2NoYWxrLmdyZWVuKCdjYXJnbyBidWlsZCAtLXJlbGVhc2UnKX1gLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb25maWdGaWxlTmFtZSA9IE9wdGlvbi5TdHJpbmcoJy0tY29uZmlnLC1jJywge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBuYXBpIGNvbmZpZyBwYXRoLCBvbmx5IEpTT04gZm9ybWF0IGFjY2VwdGVkLiBEZWZhdWx0IHRvICR7Y2hhbGsudW5kZXJsaW5lKGNoYWxrLmdyZWVuKCdwYWNrYWdlLmpzb24nKSl9YCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2FyZ29OYW1lID0gT3B0aW9uLlN0cmluZygnLS1jYXJnby1uYW1lJywge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBPdmVycmlkZSB0aGUgJHtjaGFsay5ncmVlbignbmFtZScpfSBmaWVsZCBpbiAke2NoYWxrLnVuZGVybGluZShjaGFsay55ZWxsb3dCcmlnaHQoJ0NhcmdvLnRvbWwnKSl9YCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGFyZ2V0VHJpcGxlRGlyID0gT3B0aW9uLlN0cmluZygnLS10YXJnZXQnLCAoX2IgPSAoX2EgPSBwcm9jZXNzLmVudi5SVVNUX1RBUkdFVCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcHJvY2Vzcy5lbnYuQ0FSR09fQlVJTERfVEFSR0VUKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJywge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBCeXBhc3MgdG8gJHtjaGFsay5ncmVlbignY2FyZ28gYnVpbGQgLS10YXJnZXQnKX1gLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mZWF0dXJlcyA9IE9wdGlvbi5TdHJpbmcoJy0tZmVhdHVyZXMnLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYEJ5cGFzcyB0byAke2NoYWxrLmdyZWVuKCdjYXJnbyBidWlsZCAtLWZlYXR1cmVzJyl9YCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYmluID0gT3B0aW9uLlN0cmluZygnLS1iaW4nLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYEJ5cGFzcyB0byAke2NoYWxrLmdyZWVuKCdjYXJnbyBidWlsZCAtLWJpbicpfWAsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmR0cyA9IE9wdGlvbi5TdHJpbmcoJy0tZHRzJywgJ2luZGV4LmQudHMnLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYFRoZSBmaWxlbmFtZSBhbmQgcGF0aCBvZiAke2NoYWxrLmdyZWVuKCcuZC50cycpfSBmaWxlLCByZWxhdGl2ZSB0byBjd2RgLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb25zdEVudW0gPSBPcHRpb24uQm9vbGVhbignLS1jb25zdC1lbnVtJywge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBHZW5lcmF0ZSAke2NoYWxrLmdyZWVuKCdjb25zdCBlbnVtJyl9IGluIC5kLnRzIGZpbGUgb3Igbm90LCBkZWZhdWx0IGlzICR7Y2hhbGsuZ3JlZW4oJ3RydWUnKX1gLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ub0R0c0hlYWRlciA9IE9wdGlvbi5Cb29sZWFuKCctLW5vLWR0cy1oZWFkZXInLCBmYWxzZSwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBEb24ndCBnZW5lcmF0ZSAke2NoYWxrLmdyZWVuKCcuZC50cycpfSBoZWFkZXJgLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wcm9qZWN0ID0gT3B0aW9uLlN0cmluZygnLXAnLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYEJ5cGFzcyB0byAke2NoYWxrLmdyZWVuKCdjYXJnbyAtcCcpfWAsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByb2ZpbGUgPSBPcHRpb24uU3RyaW5nKCctLXByb2ZpbGUnLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYEJ5cGFzcyB0byAke2NoYWxrLmdyZWVuKCdjYXJnbyAtLXByb2ZpbGUnKX1gLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jYXJnb0ZsYWdzID0gT3B0aW9uLlN0cmluZygnLS1jYXJnby1mbGFncycsICcnLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYEFsbCB0aGUgb3RoZXJzIGZsYWcgcGFzc2VkIHRvICR7Y2hhbGsueWVsbG93KCdjYXJnbyBidWlsZCcpfWAsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmpzQmluZGluZyA9IE9wdGlvbi5TdHJpbmcoJy0tanMnLCAnaW5kZXguanMnLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYFBhdGggdG8gdGhlIEpTIGJpbmRpbmcgZmlsZSwgcGFzcyAke2NoYWxrLnVuZGVybGluZShjaGFsay55ZWxsb3coJ2ZhbHNlJykpfSB0byBkaXNhYmxlIGl0LiBPbmx5IGFmZmVjdCBpZiAke2NoYWxrLmdyZWVuKCctLXRhcmdldCcpfSBpcyBzcGVjaWZpZWQuYCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuanNQYWNrYWdlTmFtZSA9IE9wdGlvbi5TdHJpbmcoJy0tanMtcGFja2FnZS1uYW1lJywge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBQYWNrYWdlIG5hbWUgaW4gZ2VuZXJhdGVkIGpzIGJpbmRpbmcgZmlsZSwgT25seSBhZmZlY3QgaWYgJHtjaGFsay5ncmVlbignLS10YXJnZXQnKX0gc3BlY2lmaWVkIGFuZCAke2NoYWxrLmdyZWVuKCctLWpzJyl9IGlzIG5vdCBmYWxzZS5gLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jYXJnb0N3ZCA9IE9wdGlvbi5TdHJpbmcoJy0tY2FyZ28tY3dkJywge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBUaGUgY3dkIG9mICR7Y2hhbGsudW5kZXJsaW5lKGNoYWxrLnllbGxvdygnQ2FyZ28udG9tbCcpKX0gZmlsZWAsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBpcGUgPSBPcHRpb24uU3RyaW5nKCctLXBpcGUnLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYFBpcGUgWyR7Y2hhbGsuZ3JlZW4oJy5qcy8udHMnKX1dIGZpbGVzIHRvIHRoaXMgY29tbWFuZCwgZWcgJHtjaGFsay5ncmVlbigncHJldHRpZXIgLXcnKX1gLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25hcGktcnMvbmFwaS1ycy9pc3N1ZXMvMjk3XG4gICAgICAgIHRoaXMuZGlzYWJsZVdpbmRvd3NYMzJPcHRpbWl6ZSA9IE9wdGlvbi5Cb29sZWFuKCctLWRpc2FibGUtd2luZG93cy14MzItb3B0aW1pemUnLCBmYWxzZSwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBEaXNhYmxlIHdpbmRvd3MgeDMyICR7Y2hhbGsuZ3JlZW4oJ2x0bycpfSBhbmQgaW5jcmVhc2UgJHtjaGFsay5ncmVlbignY29kZWdlbi11bml0cycpfS4gRGlzYWJsZWQgYnkgZGVmYXVsdC4gU2VlICR7Y2hhbGsudW5kZXJsaW5lKGNoYWxrLmJsdWUoJ2h0dHBzOi8vZ2l0aHViLmNvbS9uYXBpLXJzL25hcGktcnMvaXNzdWVzLzI5NycpKX1gLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kZXN0RGlyID0gT3B0aW9uLlN0cmluZyh7XG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVzZVppZyA9IE9wdGlvbi5Cb29sZWFuKGAtLXppZ2AsIGZhbHNlLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYFVzZSAke2NoYWxrLmdyZWVuKCd6aWcnKX0gYXMgbGlua2VyICR7Y2hhbGsueWVsbG93QnJpZ2h0KCcoRXhwZXJpbWVudGFsKScpfWAsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnppZ0FCSVZlcnNpb24gPSBPcHRpb24uU3RyaW5nKGAtLXppZy1hYmktc3VmZml4YCwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBUaGUgc3VmZml4IG9mIHRoZSAke2NoYWxrLmdyZWVuKCd6aWcgLS10YXJnZXQnKX0gQUJJIHZlcnNpb24uIEVnLiAke2NoYWxrLmN5YW4oJy0tdGFyZ2V0IHg4Nl82NC11bmtub3duLWxpbnV4LWdudScpfSAke2NoYWxrLmdyZWVuKCctLXppZy1hYmktc3VmZml4PTIuMTcnKX1gLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy56aWdMaW5rT25seSA9IE9wdGlvbi5Cb29sZWFuKGAtLXppZy1saW5rLW9ubHlgLCBmYWxzZSwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBPbmx5IGxpbmsgdGhlIGxpYnJhcnkgd2l0aCAke2NoYWxrLmdyZWVuKCd6aWcnKX1gLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pc1N0cmlwID0gT3B0aW9uLkJvb2xlYW4oYC0tc3RyaXBgLCBmYWxzZSwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke2NoYWxrLmdyZWVuKCdTdHJpcCcpfSB0aGUgbGlicmFyeSBmb3IgbWluaW11bSBmaWxlIHNpemVgLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZXhlY3V0ZSgpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nLCBfaCwgX2osIF9rLCBfbDtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGN3ZCA9IHRoaXMuY2FyZ29Dd2RcbiAgICAgICAgICAgICAgICA/IGpvaW4ocHJvY2Vzcy5jd2QoKSwgdGhpcy5jYXJnb0N3ZClcbiAgICAgICAgICAgICAgICA6IHByb2Nlc3MuY3dkKCk7XG4gICAgICAgICAgICBjb25zdCBjYXJnb1RvbWxQYXRoID0gam9pbihjd2QsICdDYXJnby50b21sJyk7XG4gICAgICAgICAgICBsZXQgY2FyZ29NZXRhZGF0YTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZGVidWcoJ1N0YXJ0IHBhcnNlIHRvbWwnKTtcbiAgICAgICAgICAgICAgICBjYXJnb01ldGFkYXRhID0gSlNPTi5wYXJzZShleGVjU3luYyhgY2FyZ28gbWV0YWRhdGEgLS1mb3JtYXQtdmVyc2lvbiAxIC0tbWFuaWZlc3QtcGF0aCBcIiR7Y2FyZ29Ub21sUGF0aH1cImAsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RkaW86ICdwaXBlJyxcbiAgICAgICAgICAgICAgICAgICAgbWF4QnVmZmVyOiAxMDI0ICogMTAyNCAqIDEwLFxuICAgICAgICAgICAgICAgIH0pLnRvU3RyaW5nKCd1dGY4JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDb3VsZCBub3QgcGFyc2UgdGhlIENhcmdvLnRvbWw6ICcgKyBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhY2thZ2VzID0gY2FyZ29NZXRhZGF0YS5wYWNrYWdlcztcbiAgICAgICAgICAgIGxldCBjYXJnb1BhY2thZ2VOYW1lO1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FyZ29OYW1lKSB7XG4gICAgICAgICAgICAgICAgY2FyZ29QYWNrYWdlTmFtZSA9IHRoaXMuY2FyZ29OYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdCA9IGNhcmdvTWV0YWRhdGEucmVzb2x2ZS5yb290O1xuICAgICAgICAgICAgICAgIGlmIChyb290KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvb3RQYWNrYWdlID0gcGFja2FnZXMuZmluZCgocCkgPT4gcC5pZCA9PT0gcm9vdCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvUGFja2FnZU5hbWUgPSByb290UGFja2FnZS5uYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gcGFja2FnZS5uYW1lIGZpZWxkIGluIENhcmdvLnRvbWwnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjYXJnb1BhY2thZ2UgPSBwYWNrYWdlcy5maW5kKChwKSA9PiBwLm5hbWUgPT09IGNhcmdvUGFja2FnZU5hbWUpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmJpbiAmJlxuICAgICAgICAgICAgICAgICgoX2EgPSBjYXJnb1BhY2thZ2UgPT09IG51bGwgfHwgY2FyZ29QYWNrYWdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjYXJnb1BhY2thZ2UudGFyZ2V0cykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPT09IDEgJiZcbiAgICAgICAgICAgICAgICAoY2FyZ29QYWNrYWdlID09PSBudWxsIHx8IGNhcmdvUGFja2FnZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2FyZ29QYWNrYWdlLnRhcmdldHNbMF0ua2luZC5sZW5ndGgpID09PSAxICYmXG4gICAgICAgICAgICAgICAgKGNhcmdvUGFja2FnZSA9PT0gbnVsbCB8fCBjYXJnb1BhY2thZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNhcmdvUGFja2FnZS50YXJnZXRzWzBdLmtpbmRbMF0pID09PSAnYmluJykge1xuICAgICAgICAgICAgICAgIHRoaXMuYmluID0gY2FyZ29QYWNrYWdlTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlbGVhc2VGbGFnID0gdGhpcy5pc1JlbGVhc2UgPyBgLS1yZWxlYXNlYCA6ICcnO1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0RmxhZyA9IHRoaXMudGFyZ2V0VHJpcGxlRGlyXG4gICAgICAgICAgICAgICAgPyBgLS10YXJnZXQgJHt0aGlzLnRhcmdldFRyaXBsZURpcn1gXG4gICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVzRmxhZyA9IHRoaXMuZmVhdHVyZXMgPyBgLS1mZWF0dXJlcyAke3RoaXMuZmVhdHVyZXN9YCA6ICcnO1xuICAgICAgICAgICAgY29uc3QgYmluRmxhZyA9IHRoaXMuYmluID8gYC0tYmluICR7dGhpcy5iaW59YCA6ICcnO1xuICAgICAgICAgICAgY29uc3QgdHJpcGxlID0gdGhpcy50YXJnZXRUcmlwbGVEaXJcbiAgICAgICAgICAgICAgICA/IHBhcnNlVHJpcGxlKHRoaXMudGFyZ2V0VHJpcGxlRGlyKVxuICAgICAgICAgICAgICAgIDogZ2V0SG9zdFRhcmdldFRyaXBsZSgpO1xuICAgICAgICAgICAgY29uc3QgZW52VGFyZ2V0ID0gdHJpcGxlLnJhdy5yZXBsYWNlQWxsKCctJywgJ18nKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgZGVidWcoYEN1cnJlbnQgdHJpcGxlIGlzOiAke2NoYWxrLmdyZWVuKHRyaXBsZS5yYXcpfWApO1xuICAgICAgICAgICAgY29uc3QgcEZsYWcgPSB0aGlzLnByb2plY3QgPyBgLXAgJHt0aGlzLnByb2plY3R9YCA6ICcnO1xuICAgICAgICAgICAgY29uc3QgcHJvZmlsZUZsYWcgPSB0aGlzLnByb2ZpbGUgPyBgLS1wcm9maWxlICR7dGhpcy5wcm9maWxlfWAgOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGV4dGVybmFsRmxhZ3MgPSBbXG4gICAgICAgICAgICAgICAgcmVsZWFzZUZsYWcsXG4gICAgICAgICAgICAgICAgdGFyZ2V0RmxhZyxcbiAgICAgICAgICAgICAgICBmZWF0dXJlc0ZsYWcsXG4gICAgICAgICAgICAgICAgYmluRmxhZyxcbiAgICAgICAgICAgICAgICBwRmxhZyxcbiAgICAgICAgICAgICAgICBwcm9maWxlRmxhZyxcbiAgICAgICAgICAgICAgICB0aGlzLmNhcmdvRmxhZ3MsXG4gICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZmxhZykgPT4gQm9vbGVhbihmbGFnKSlcbiAgICAgICAgICAgICAgICAuam9pbignICcpO1xuICAgICAgICAgICAgY29uc3QgYWRkaXRpb25hbEVudiA9IHt9O1xuICAgICAgICAgICAgY29uc3QgaXNDcm9zc0ZvcldpbiA9IHRyaXBsZS5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJiBwcm9jZXNzLnBsYXRmb3JtICE9PSAnd2luMzInO1xuICAgICAgICAgICAgY29uc3QgaXNDcm9zc0ZvckxpbnV4ID0gdHJpcGxlLnBsYXRmb3JtID09PSAnbGludXgnICYmXG4gICAgICAgICAgICAgICAgKHByb2Nlc3MucGxhdGZvcm0gIT09ICdsaW51eCcgfHxcbiAgICAgICAgICAgICAgICAgICAgdHJpcGxlLmFyY2ggIT09IHByb2Nlc3MuYXJjaCB8fFxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbGliY1ZlcnNpb25SdW50aW1lID0gXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAoX2MgPSAoX2IgPSAoX2EgPSBwcm9jZXNzLnJlcG9ydCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldFJlcG9ydCgpKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaGVhZGVyKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuZ2xpYmNWZXJzaW9uUnVudGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpYmMgPSBnbGliY1ZlcnNpb25SdW50aW1lID8gJ2dudScgOiAnbXVzbCc7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJpcGxlLmFiaSAhPT0gbGliYztcbiAgICAgICAgICAgICAgICAgICAgfSkoKSk7XG4gICAgICAgICAgICBjb25zdCBpc0Nyb3NzRm9yTWFjT1MgPSB0cmlwbGUucGxhdGZvcm0gPT09ICdkYXJ3aW4nICYmIHByb2Nlc3MucGxhdGZvcm0gIT09ICdkYXJ3aW4nO1xuICAgICAgICAgICAgY29uc3QgY2FyZ28gPSAoX2IgPSBwcm9jZXNzLmVudi5DQVJHTykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogKGlzQ3Jvc3NGb3JXaW4gPyAnY2FyZ28teHdpbicgOiAnY2FyZ28nKTtcbiAgICAgICAgICAgIGlmIChpc0Nyb3NzRm9yV2luICYmIHRyaXBsZS5hcmNoID09PSAnaWEzMicpIHtcbiAgICAgICAgICAgICAgICBhZGRpdGlvbmFsRW52WydYV0lOX0FSQ0gnXSA9ICd4ODYnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2FyZ29Db21tYW5kID0gYCR7Y2FyZ299IGJ1aWxkICR7ZXh0ZXJuYWxGbGFnc31gO1xuICAgICAgICAgICAgZGVidWcoYFJ1biAke2NoYWxrLmdyZWVuKGNhcmdvQ29tbWFuZCl9YCk7XG4gICAgICAgICAgICBjb25zdCBydXN0ZmxhZ3MgPSBwcm9jZXNzLmVudi5SVVNURkxBR1NcbiAgICAgICAgICAgICAgICA/IHByb2Nlc3MuZW52LlJVU1RGTEFHUy5zcGxpdCgnICcpXG4gICAgICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICAgIGlmICh0cmlwbGUucmF3LmluY2x1ZGVzKCdtdXNsJykgJiYgIXRoaXMuYmluKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFydXN0ZmxhZ3MuaW5jbHVkZXMoJ3RhcmdldC1mZWF0dXJlPS1jcnQtc3RhdGljJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVzdGZsYWdzLnB1c2goJy1DIHRhcmdldC1mZWF0dXJlPS1jcnQtc3RhdGljJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdHJpcCAmJiAhcnVzdGZsYWdzLmluY2x1ZGVzKCctQyBsaW5rLWFyZz0tcycpKSB7XG4gICAgICAgICAgICAgICAgcnVzdGZsYWdzLnB1c2goJy1DIGxpbmstYXJnPS1zJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdXNlWmlnID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIXRoaXMudXNlWmlnICYmXG4gICAgICAgICAgICAgICAgaXNDcm9zc0ZvckxpbnV4ICYmXG4gICAgICAgICAgICAgICAgdHJpcGxlLnJhdyA9PT0gJ3Jpc2N2NjRnYy11bmtub3duLWxpbnV4LWdudScpIHtcbiAgICAgICAgICAgICAgICAvLyBMaW5raW5nIHdpdGggemlnIGZhaWxzIGZvciByaXNjdjY0LiBEb24ndCBkZWZhdWx0IHRvIHppZyBmb3IgcmlzY3Y2NC5cbiAgICAgICAgICAgICAgICBhZGRpdGlvbmFsRW52W2BDQVJHT19UQVJHRVRfJHtlbnZUYXJnZXR9X0xJTktFUmBdID1cbiAgICAgICAgICAgICAgICAgICAgJ3Jpc2N2NjQtbGludXgtZ251LWdjYyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnVzZVppZyB8fCBpc0Nyb3NzRm9yTGludXggfHwgaXNDcm9zc0Zvck1hY09TKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhlY1N5bmMoJ3ppZyB2ZXJzaW9uJyk7XG4gICAgICAgICAgICAgICAgICAgIHVzZVppZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnVzZVppZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ291bGQgbm90IGZpbmQgJHtjaGFsay5ncmVlbignemlnJyl9IG9uIHRoZSBQQVRIYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhgQ291bGQgbm90IGZpbmQgJHtjaGFsay5ncmVlbignemlnJyl9IG9uIHRoZSBQQVRILCBmYWxsYmFjayB0byBub3JtYWwgbGlua2VyYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXNlWmlnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgemlnQUJJVmVyc2lvbiA9IChfYyA9IHRoaXMuemlnQUJJVmVyc2lvbikgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogKGlzQ3Jvc3NGb3JMaW51eCAmJiB0cmlwbGUuYWJpID09PSAnZ251JyA/IERFRkFVTFRfR0xJQkNfVEFSR0VUIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkWmlnVGFyZ2V0ID0gWklHX1BMQVRGT1JNX1RBUkdFVF9NQVBbdHJpcGxlLnJhd107XG4gICAgICAgICAgICAgICAgY29uc3QgemlnVGFyZ2V0ID0gYCR7bWFwcGVkWmlnVGFyZ2V0fSR7emlnQUJJVmVyc2lvbiA/IGAuJHt6aWdBQklWZXJzaW9ufWAgOiAnJ31gO1xuICAgICAgICAgICAgICAgIGRlYnVnKGBVc2luZyBaaWcgd2l0aCB0YXJnZXQgJHtjaGFsay5ncmVlbih6aWdUYXJnZXQpfWApO1xuICAgICAgICAgICAgICAgIGlmICghbWFwcGVkWmlnVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0cmlwbGUucmF3fSBjYW4gbm90IGJlIGNyb3NzIGNvbXBpbGVkIGJ5IHppZ2ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwYXRocyA9IGVudlBhdGhzKCduYXBpLXJzJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2hlbGxGaWxlRXh0ID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICdjbWQnIDogJ3NoJztcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5rZXJXcmFwcGVyU2hlbGwgPSBqb2luKHBhdGhzLmNhY2hlLCBgemlnLWxpbmtlci0ke3RyaXBsZS5yYXd9LiR7c2hlbGxGaWxlRXh0fWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IENDV3JhcHBlclNoZWxsID0gam9pbihwYXRocy5jYWNoZSwgYHppZy1jYy0ke3RyaXBsZS5yYXd9LiR7c2hlbGxGaWxlRXh0fWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IENYWFdyYXBwZXJTaGVsbCA9IGpvaW4ocGF0aHMuY2FjaGUsIGB6aWctY3h4LSR7dHJpcGxlLnJhd30uJHtzaGVsbEZpbGVFeHR9YCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlua2VyV3JhcHBlciA9IGpvaW4ocGF0aHMuY2FjaGUsIGB6aWctY2MtJHt0cmlwbGUucmF3fS5qc2ApO1xuICAgICAgICAgICAgICAgIG1rZGlyU3luYyhwYXRocy5jYWNoZSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9yd2FyZEFyZ3MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ1wiJSpcIicgOiAnJEAnO1xuICAgICAgICAgICAgICAgIGlmICh0cmlwbGUuYXJjaCA9PT0gJ2FybScpIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgcGF0Y2hBcm1GZWF0dXJlc0hGb3JBcm1UYXJnZXRzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHlpZWxkIHdyaXRlRmlsZUFzeW5jKGxpbmtlcldyYXBwZXJTaGVsbCwgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJ1xuICAgICAgICAgICAgICAgICAgICA/IGBASUYgRVhJU1QgXCIlfmRwMFxcXFxub2RlLmV4ZVwiIChcbiAgXCIlfmRwMFxcXFxub2RlLmV4ZVwiIFwiJHtsaW5rZXJXcmFwcGVyfVwiICUqXG4pIEVMU0UgKFxuICBAU0VUTE9DQUxcbiAgQFNFVCBQQVRIRVhUPSVQQVRIRVhUOjsuSlM7PTslXG4gIG5vZGUgXCIke2xpbmtlcldyYXBwZXJ9XCIgJSpcbilgXG4gICAgICAgICAgICAgICAgICAgIDogYCR7U0hFQkFOR19TSH1ub2RlICR7bGlua2VyV3JhcHBlcn0gJHtmb3J3YXJkQXJnc31gLCB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGU6ICc3NzcnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHlpZWxkIHdyaXRlRmlsZUFzeW5jKENDV3JhcHBlclNoZWxsLCBgJHtTSEVCQU5HX1NIfW5vZGUgJHtsaW5rZXJXcmFwcGVyfSBjYyAke2ZvcndhcmRBcmdzfWAsIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogJzc3NycsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgeWllbGQgd3JpdGVGaWxlQXN5bmMoQ1hYV3JhcHBlclNoZWxsLCBgJHtTSEVCQU5HX1NIfW5vZGUgJHtsaW5rZXJXcmFwcGVyfSBjKysgJHtmb3J3YXJkQXJnc31gLCB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGU6ICc3NzcnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHlpZWxkIHdyaXRlRmlsZUFzeW5jKGxpbmtlcldyYXBwZXIsIGAke1NIRUJBTkdfTk9ERX1jb25zdHt3cml0ZUZpbGVTeW5jfSA9IHJlcXVpcmUoJ2ZzJylcXG4ke3Byb2Nlc3NaaWdMaW5rZXJBcmdzLnRvU3RyaW5nKCl9XFxuY29uc3Qge3N0YXR1c30gPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuc3Bhd25TeW5jKCd6aWcnLCBbcHJvY2Vzcy5hcmd2WzJdID09PSBcImMrK1wiIHx8IHByb2Nlc3MuYXJndlsyXSA9PT0gXCJjY1wiID8gXCJcIiA6IFwiY2NcIiwgLi4ucHJvY2Vzc1ppZ0xpbmtlckFyZ3MoJyR7dHJpcGxlLnJhd30nLCBwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpLCAnLXRhcmdldCcsICcke3ppZ1RhcmdldH0nXSwgeyBzdGRpbzogJ2luaGVyaXQnLCBzaGVsbDogdHJ1ZSB9KVxcbndyaXRlRmlsZVN5bmMoJyR7bGlua2VyV3JhcHBlci5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKX0uYXJncy5sb2cnLCBwcm9jZXNzWmlnTGlua2VyQXJncygnJHt0cmlwbGUucmF3fScsIHByb2Nlc3MuYXJndi5zbGljZSgyKSkuam9pbignICcpKVxcblxcbnByb2Nlc3MuZXhpdChzdGF0dXMgfHwgMClcXG5gLCB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGU6ICc3NzcnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy56aWdMaW5rT25seSkge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGFkZGl0aW9uYWxFbnYsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIENDOiBDQ1dyYXBwZXJTaGVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIENYWDogQ1hYV3JhcHBlclNoZWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgVEFSR0VUX0NDOiBDQ1dyYXBwZXJTaGVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFRBUkdFVF9DWFg6IENYWFdyYXBwZXJTaGVsbCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxFbnZbYENBUkdPX1RBUkdFVF8ke2VudlRhcmdldH1fTElOS0VSYF0gPSBsaW5rZXJXcmFwcGVyU2hlbGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWJ1ZyhgUGxhdGZvcm06ICR7SlNPTi5zdHJpbmdpZnkodHJpcGxlLCBudWxsLCAyKX1gKTtcbiAgICAgICAgICAgIGlmICh0cmlwbGUucGxhdGZvcm0gPT09ICdhbmRyb2lkJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgQU5EUk9JRF9OREtfTEFURVNUX0hPTUUgfSA9IHByb2Nlc3MuZW52O1xuICAgICAgICAgICAgICAgIGlmICghQU5EUk9JRF9OREtfTEFURVNUX0hPTUUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKGAke2NoYWxrLnllbGxvdygnQU5EUk9JRF9OREtfTEFURVNUX0hPTUUnKX0gZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbWlzc2luZ2ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRBcmNoID0gdHJpcGxlLmFyY2ggPT09ICdhcm0nID8gJ2FybXY3YScgOiAnYWFyY2g2NCc7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0UGxhdGZvcm0gPSB0cmlwbGUuYXJjaCA9PT0gJ2FybScgPyAnYW5kcm9pZGVhYmkyNCcgOiAnYW5kcm9pZDI0JztcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGFkZGl0aW9uYWxFbnYsIHtcbiAgICAgICAgICAgICAgICAgICAgQ0FSR09fVEFSR0VUX0FBUkNINjRfTElOVVhfQU5EUk9JRF9MSU5LRVI6IGAke0FORFJPSURfTkRLX0xBVEVTVF9IT01FfS90b29sY2hhaW5zL2xsdm0vcHJlYnVpbHQvbGludXgteDg2XzY0L2Jpbi8ke3RhcmdldEFyY2h9LWxpbnV4LWFuZHJvaWQyNC1jbGFuZ2AsXG4gICAgICAgICAgICAgICAgICAgIENBUkdPX1RBUkdFVF9BUk1WN19MSU5VWF9BTkRST0lERUFCSV9MSU5LRVI6IGAke0FORFJPSURfTkRLX0xBVEVTVF9IT01FfS90b29sY2hhaW5zL2xsdm0vcHJlYnVpbHQvbGludXgteDg2XzY0L2Jpbi8ke3RhcmdldEFyY2h9LWxpbnV4LWFuZHJvaWRlYWJpMjQtY2xhbmdgLFxuICAgICAgICAgICAgICAgICAgICBDQzogYCR7QU5EUk9JRF9OREtfTEFURVNUX0hPTUV9L3Rvb2xjaGFpbnMvbGx2bS9wcmVidWlsdC9saW51eC14ODZfNjQvYmluLyR7dGFyZ2V0QXJjaH0tbGludXgtJHt0YXJnZXRQbGF0Zm9ybX0tY2xhbmdgLFxuICAgICAgICAgICAgICAgICAgICBDWFg6IGAke0FORFJPSURfTkRLX0xBVEVTVF9IT01FfS90b29sY2hhaW5zL2xsdm0vcHJlYnVpbHQvbGludXgteDg2XzY0L2Jpbi8ke3RhcmdldEFyY2h9LWxpbnV4LSR7dGFyZ2V0UGxhdGZvcm19LWNsYW5nKytgLFxuICAgICAgICAgICAgICAgICAgICBBUjogYCR7QU5EUk9JRF9OREtfTEFURVNUX0hPTUV9L3Rvb2xjaGFpbnMvbGx2bS9wcmVidWlsdC9saW51eC14ODZfNjQvYmluL2xsdm0tYXJgLFxuICAgICAgICAgICAgICAgICAgICBSQU5MSUI6IGAke0FORFJPSURfTkRLX0xBVEVTVF9IT01FfS90b29sY2hhaW5zL2xsdm0vcHJlYnVpbHQvbGludXgteDg2XzY0L2Jpbi9sbHZtLXJhbmxpYmAsXG4gICAgICAgICAgICAgICAgICAgIEFORFJPSURfTkRLOiBBTkRST0lEX05ES19MQVRFU1RfSE9NRSxcbiAgICAgICAgICAgICAgICAgICAgUEFUSDogYCR7QU5EUk9JRF9OREtfTEFURVNUX0hPTUV9L3Rvb2xjaGFpbnMvbGx2bS9wcmVidWlsdC9saW51eC14ODZfNjQvYmluOiR7cHJvY2Vzcy5lbnYuUEFUSH1gLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeyBiaW5hcnlOYW1lLCBwYWNrYWdlTmFtZSwgdHNDb25zdEVudW06IHRzQ29uc3RFbnVtRnJvbUNvbmZpZywgfSA9IGdldE5hcGlDb25maWcodGhpcy5jb25maWdGaWxlTmFtZSk7XG4gICAgICAgICAgICBjb25zdCB0c0NvbnN0RW51bSA9IChfZSA9IChfZCA9IHRoaXMuY29uc3RFbnVtKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiB0c0NvbnN0RW51bUZyb21Db25maWcpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IHRydWU7XG4gICAgICAgICAgICBpZiAodHJpcGxlLnBsYXRmb3JtID09PSAnd2FzaScpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbW5hcGlEaXIgPSByZXF1aXJlLnJlc29sdmUoJ2VtbmFwaScpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW5rRGlyID0gam9pbihlbW5hcGlEaXIsICcuLicsICdsaWInLCAnd2FzbTMyLXdhc2knKTtcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEVudlsnRU1OQVBJX0xJTktfRElSJ10gPSBsaW5rRGlyO1xuICAgICAgICAgICAgICAgICAgICBydXN0ZmxhZ3MucHVzaCgnLVogd2FzaS1leGVjLW1vZGVsPXJlYWN0b3InKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBlbW5hcGksIHBsZWFzZSBpbnN0YWxsIGVtbmFwaWApO1xuICAgICAgICAgICAgICAgICAgICBlcnIuY2F1c2UgPSBlO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJ1c3RmbGFncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYWRkaXRpb25hbEVudlsnUlVTVEZMQUdTJ10gPSBydXN0ZmxhZ3Muam9pbignICcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGNhcmdvQXJ0aWZhY3ROYW1lID0gdGhpcy5jYXJnb05hbWU7XG4gICAgICAgICAgICBpZiAoIWNhcmdvQXJ0aWZhY3ROYW1lKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYmluKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvQXJ0aWZhY3ROYW1lID0gY2FyZ29QYWNrYWdlTmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvQXJ0aWZhY3ROYW1lID0gY2FyZ29QYWNrYWdlTmFtZS5yZXBsYWNlKC8tL2csICdfJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5iaW4gJiZcbiAgICAgICAgICAgICAgICAgICAgIWNhcmdvUGFja2FnZS50YXJnZXRzLnNvbWUoKHRhcmdldCkgPT4gdGFyZ2V0LmNyYXRlX3R5cGVzLmluY2x1ZGVzKCdjZHlsaWInKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTWlzc2luZyAke2NoYWxrLmdyZWVuKCdjcmF0ZS10eXBlID0gW1wiY2R5bGliXCJdJyl9IGluICR7Y2hhbGsuZ3JlZW4oJ1tsaWJdJyl9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuYmluKSB7XG4gICAgICAgICAgICAgICAgZGVidWcoYEJpbmFyeSBuYW1lOiAke2NoYWxrLmdyZWVuQnJpZ2h0KGNhcmdvQXJ0aWZhY3ROYW1lKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlYnVnKGBEeWxpYiBuYW1lOiAke2NoYWxrLmdyZWVuQnJpZ2h0KGNhcmdvQXJ0aWZhY3ROYW1lKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGN3ZFNoYSA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpXG4gICAgICAgICAgICAgICAgLnVwZGF0ZShwcm9jZXNzLmN3ZCgpKVxuICAgICAgICAgICAgICAgIC51cGRhdGUodmVyc2lvbilcbiAgICAgICAgICAgICAgICAuZGlnZXN0KCdoZXgnKVxuICAgICAgICAgICAgICAgIC5zdWJzdHJpbmcoMCwgOCk7XG4gICAgICAgICAgICBjb25zdCBpbnRlcm1lZGlhdGVUeXBlRmlsZSA9IGpvaW4odG1wZGlyKCksIGAke2NhcmdvQXJ0aWZhY3ROYW1lfS0ke2N3ZFNoYX0ubmFwaV90eXBlX2RlZi50bXBgKTtcbiAgICAgICAgICAgIGNvbnN0IGludGVybWVkaWF0ZVdhc2lSZWdpc3RlckZpbGUgPSBqb2luKHRtcGRpcigpLCBgJHtjYXJnb0FydGlmYWN0TmFtZX0tJHtjd2RTaGF9Lm5hcGlfd2FzaV9yZWdpc3Rlci50bXBgKTtcbiAgICAgICAgICAgIGRlYnVnKGBpbnRlcm1lZGlhdGUgdHlwZSBkZWYgZmlsZTogJHtpbnRlcm1lZGlhdGVUeXBlRmlsZX1gKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRFbnYgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJvY2Vzcy5lbnYpLCBhZGRpdGlvbmFsRW52KSwgeyBUWVBFX0RFRl9UTVBfUEFUSDogaW50ZXJtZWRpYXRlVHlwZUZpbGUsIFdBU0lfUkVHSVNURVJfVE1QX1BBVEg6IGludGVybWVkaWF0ZVdhc2lSZWdpc3RlckZpbGUsIENBUkdPX0NGR19OQVBJX1JTX0NMSV9WRVJTSU9OOiB2ZXJzaW9uIH0pO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBleGVjU3luYyhjYXJnb0NvbW1hbmQsIHtcbiAgICAgICAgICAgICAgICAgICAgZW52OiBjb21tYW5kRW52LFxuICAgICAgICAgICAgICAgICAgICBzdGRpbzogJ2luaGVyaXQnLFxuICAgICAgICAgICAgICAgICAgICBjd2QsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmIChjYXJnbyA9PT0gJ2NhcmdvLXh3aW4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgWW91IGFyZSBjcm9zcyBjb21waWxpbmcgJHtjaGFsay51bmRlcmxpbmUodHJpcGxlLnJhdyl9IHRhcmdldCBvbiAke2NoYWxrLmdyZWVuKHByb2Nlc3MucGxhdGZvcm0pfSBob3N0YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzQ3Jvc3NGb3JMaW51eCB8fCBpc0Nyb3NzRm9yTWFjT1MpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBZb3UgYXJlIGNyb3NzIGNvbXBpbGluZyAke2NoYWxrLnVuZGVybGluZSh0cmlwbGUucmF3KX0gb24gJHtjaGFsay5ncmVlbihwcm9jZXNzLnBsYXRmb3JtKX0gaG9zdGApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGxhdGZvcm0gPSB0cmlwbGUucGxhdGZvcm07XG4gICAgICAgICAgICBsZXQgbGliRXh0ID0gJyc7XG4gICAgICAgICAgICBkZWJ1ZyhgUGxhdGZvcm06ICR7Y2hhbGsuZ3JlZW5CcmlnaHQocGxhdGZvcm0pfWApO1xuICAgICAgICAgICAgLy8gUGxhdGZvcm0gYmFzZWQgbWFzc2FnaW5nIGZvciBidWlsZCBjb21tYW5kc1xuICAgICAgICAgICAgaWYgKCF0aGlzLmJpbikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGFyd2luJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpYkV4dCA9ICcuZHlsaWInO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ29BcnRpZmFjdE5hbWUgPSBgbGliJHtjYXJnb0FydGlmYWN0TmFtZX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3dpbjMyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpYkV4dCA9ICcuZGxsJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdsaW51eCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ZyZWVic2QnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdvcGVuYnNkJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYW5kcm9pZCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N1bm9zJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcmdvQXJ0aWZhY3ROYW1lID0gYGxpYiR7Y2FyZ29BcnRpZmFjdE5hbWV9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpYkV4dCA9ICcuc28nO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPcGVyYXRpbmcgc3lzdGVtIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIG9yIHJlY29nbml6ZWQgYnkgdGhlIGJ1aWxkIHNjcmlwdCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRhcmdldFJvb3REaXIgPSBcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLW51bGxpc2gtY29hbGVzY2luZ1xuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuQ0FSR09fVEFSR0VUX0RJUiB8fFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLW51bGxpc2gtY29hbGVzY2luZ1xuICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52LkNBUkdPX0JVSUxEX1RBUkdFVF9ESVIgfHxcbiAgICAgICAgICAgICAgICAoeWllbGQgZmluZFVwKGN3ZCkpO1xuICAgICAgICAgICAgaWYgKCF0YXJnZXRSb290RGlyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdGFyZ2V0IGRpciBmb3VuZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0RGlyID0gam9pbih0aGlzLnRhcmdldFRyaXBsZURpciwgKF9mID0gdGhpcy5wcm9maWxlKSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiAodGhpcy5pc1JlbGVhc2UgPyAncmVsZWFzZScgOiAnZGVidWcnKSk7XG4gICAgICAgICAgICBjb25zdCBwbGF0Zm9ybU5hbWUgPSB0aGlzLmFwcGVuZFBsYXRmb3JtVG9GaWxlbmFtZVxuICAgICAgICAgICAgICAgID8gYC4ke3RyaXBsZS5wbGF0Zm9ybUFyY2hBQkl9YFxuICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICBkZWJ1ZyhgUGxhdGZvcm0gbmFtZTogJHtwbGF0Zm9ybU5hbWUgfHwgY2hhbGsuZ3JlZW4oJ1tFbXB0eV0nKX1gKTtcbiAgICAgICAgICAgIGNvbnN0IGRpc3RGaWxlTmFtZSA9IHRoaXMuYmluXG4gICAgICAgICAgICAgICAgPyBjYXJnb0FydGlmYWN0TmFtZVxuICAgICAgICAgICAgICAgIDogYCR7YmluYXJ5TmFtZX0ke3BsYXRmb3JtTmFtZX0ubm9kZWA7XG4gICAgICAgICAgICBjb25zdCBkaXN0TW9kdWxlUGF0aCA9IGpvaW4oKF9nID0gdGhpcy5kZXN0RGlyKSAhPT0gbnVsbCAmJiBfZyAhPT0gdm9pZCAwID8gX2cgOiAnLicsIGRpc3RGaWxlTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWREaXN0ID0gcGFyc2UoZGlzdE1vZHVsZVBhdGgpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZERpc3QuZGlyICYmICFleGlzdHNTeW5jKHBhcnNlZERpc3QuZGlyKSkge1xuICAgICAgICAgICAgICAgIHlpZWxkIG1rZGlyQXN5bmMocGFyc2VkRGlzdC5kaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihjaGFsay5iZ1llbGxvd0JyaWdodChgQ3JlYXRlIGRpciBbJHtwYXJzZWREaXN0LmRpcn1dIGZhaWxlZCwgcmVhc29uOiAke2UubWVzc2FnZX1gKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VQYXRoID0gam9pbih0YXJnZXRSb290RGlyLCB0YXJnZXREaXIsIGAke2NhcmdvQXJ0aWZhY3ROYW1lfSR7bGliRXh0fWApO1xuICAgICAgICAgICAgaWYgKGV4aXN0c1N5bmMoZGlzdE1vZHVsZVBhdGgpKSB7XG4gICAgICAgICAgICAgICAgZGVidWcoYHJlbW92ZSBvbGQgYmluYXJ5IFske2NoYWxrLnllbGxvd0JyaWdodChkaXN0TW9kdWxlUGF0aCl9XWApO1xuICAgICAgICAgICAgICAgIHlpZWxkIHVubGlua0FzeW5jKGRpc3RNb2R1bGVQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlYnVnKGBXcml0ZSBiaW5hcnkgY29udGVudCB0byBbJHtjaGFsay55ZWxsb3dCcmlnaHQoZGlzdE1vZHVsZVBhdGgpfV1gKTtcbiAgICAgICAgICAgIHlpZWxkIGNvcHlGaWxlQXN5bmMoc291cmNlUGF0aCwgZGlzdE1vZHVsZVBhdGgpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmJpbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGR0c0ZpbGVQYXRoID0gam9pbihwcm9jZXNzLmN3ZCgpLCAoX2ggPSB0aGlzLmRlc3REaXIpICE9PSBudWxsICYmIF9oICE9PSB2b2lkIDAgPyBfaCA6ICcuJywgKF9qID0gdGhpcy5kdHMpICE9PSBudWxsICYmIF9qICE9PSB2b2lkIDAgPyBfaiA6ICdpbmRleC5kLnRzJyk7XG4gICAgICAgICAgICAgICAgY29uc3QganNCaW5kaW5nRmlsZVBhdGggPSB0aGlzLmpzQmluZGluZyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmpzQmluZGluZyAhPT0gJ2ZhbHNlJyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZFBsYXRmb3JtVG9GaWxlbmFtZVxuICAgICAgICAgICAgICAgICAgICA/IGpvaW4ocHJvY2Vzcy5jd2QoKSwgKF9rID0gdGhpcy5kZXN0RGlyKSAhPT0gbnVsbCAmJiBfayAhPT0gdm9pZCAwID8gX2sgOiAnLicsIHRoaXMuanNCaW5kaW5nKVxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3QgaWRlbnRzID0geWllbGQgcHJvY2Vzc0ludGVybWVkaWF0ZVR5cGVGaWxlKGludGVybWVkaWF0ZVR5cGVGaWxlLCBkdHNGaWxlUGF0aCwgdGhpcy5ub0R0c0hlYWRlciwgdHNDb25zdEVudW0pO1xuICAgICAgICAgICAgICAgIHlpZWxkIHdyaXRlSnNCaW5kaW5nKGJpbmFyeU5hbWUsIChfbCA9IHRoaXMuanNQYWNrYWdlTmFtZSkgIT09IG51bGwgJiYgX2wgIT09IHZvaWQgMCA/IF9sIDogcGFja2FnZU5hbWUsIGpzQmluZGluZ0ZpbGVQYXRoLCBpZGVudHMpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBpcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzQmluZGluZ0ZpbGVQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwaXBlQ29tbWFuZCA9IGAke3RoaXMucGlwZX0gJHtqc0JpbmRpbmdGaWxlUGF0aH1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKGBSdW4gJHtjaGFsay5ncmVlbihwaXBlQ29tbWFuZCl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNTeW5jKHBpcGVDb21tYW5kLCB7IHN0ZGlvOiAnaW5oZXJpdCcsIGVudjogY29tbWFuZEVudiB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGNoYWxrLmJnWWVsbG93QnJpZ2h0KCdQaXBlIHRoZSBqcyBiaW5kaW5nIGZpbGUgdG8gY29tbWFuZCBmYWlsZWQnKSwgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGlwZUNvbW1hbmQgPSBgJHt0aGlzLnBpcGV9ICR7ZHRzRmlsZVBhdGh9YDtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKGBSdW4gJHtjaGFsay5ncmVlbihwaXBlQ29tbWFuZCl9YCk7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjU3luYyhwaXBlQ29tbWFuZCwgeyBzdGRpbzogJ2luaGVyaXQnLCBlbnY6IGNvbW1hbmRFbnYgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihjaGFsay5iZ1llbGxvd0JyaWdodCgnUGlwZSB0aGUgZHRzIGZpbGUgdG8gY29tbWFuZCBmYWlsZWQnKSwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbkJ1aWxkQ29tbWFuZC51c2FnZSA9IENvbW1hbmQuVXNhZ2Uoe1xuICAgIGRlc2NyaXB0aW9uOiAnQnVpbGQgYW5kIGNvcHkgbmF0aXZlIG1vZHVsZSBpbnRvIHNwZWNpZmllZCBkaXInLFxufSk7XG5CdWlsZENvbW1hbmQucGF0aHMgPSBbWydidWlsZCddXTtcbmZ1bmN0aW9uIGZpbmRVcChkaXIgPSBwcm9jZXNzLmN3ZCgpKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZGlzdCA9IGpvaW4oZGlyLCAndGFyZ2V0Jyk7XG4gICAgICAgIGlmIChleGlzdHNTeW5jKGRpc3QpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGlzdDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXJzID0gZGlyLnNwbGl0KHNlcCk7XG4gICAgICAgIGlmIChkaXJzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGRpcnMucG9wKCk7XG4gICAgICAgIHJldHVybiBmaW5kVXAoZGlycy5qb2luKHNlcCkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gcHJvY2Vzc0ludGVybWVkaWF0ZVR5cGVGaWxlKHNvdXJjZSwgdGFyZ2V0LCBub0R0c0hlYWRlciwgdHNDb25zdEVudW0pIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBpZGVudHMgPSBbXTtcbiAgICAgICAgaWYgKCFleGlzdHNTeW5jKHNvdXJjZSkpIHtcbiAgICAgICAgICAgIGRlYnVnKGBkbyBub3QgZmluZCB0bXAgdHlwZSBmaWxlLiBza2lwIHR5cGUgZ2VuZXJhdGlvbmApO1xuICAgICAgICAgICAgcmV0dXJuIGlkZW50cztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0bXBGaWxlID0geWllbGQgcmVhZEZpbGVBc3luYyhzb3VyY2UsICd1dGY4Jyk7XG4gICAgICAgIGNvbnN0IGxpbmVzID0gdG1wRmlsZVxuICAgICAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAgICAgLm1hcCgobGluZSkgPT4gbGluZS50cmltKCkpXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAubWFwKChsaW5lKSA9PiB7XG4gICAgICAgICAgICAvLyBjb21wYXRpYmxlIHdpdGggb2xkIHZlcnNpb25cbiAgICAgICAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoJ3snKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW19jcmF0ZU5hbWUsIC4uLnJlc3RdID0gbGluZS5zcGxpdCgnOicpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN0LmpvaW4oJzonKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghbGluZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gaWRlbnRzO1xuICAgICAgICB9XG4gICAgICAgIC8vIERlZHVwbGljYXRlIGxpbmVzLCB0byBhY2NvdW50IGZvciBtYWNyb3MgYmVpbmcgcG9zc2libHkgZXZhbHVhdGVkIG1vcmUgdGhhbiBvbmNlOlxuICAgICAgICBjb25zdCB1bmlxdWVMaW5lcyA9IFsuLi5uZXcgU2V0KGxpbmVzKV07XG4gICAgICAgIGNvbnN0IGFsbERlZnMgPSB1bmlxdWVMaW5lcy5tYXAoKGxpbmUpID0+IEpTT04ucGFyc2UobGluZSkpO1xuICAgICAgICBmdW5jdGlvbiBjb252ZXJ0RGVmcyhkZWZzLCBuZXN0ZWQgPSBmYWxzZSkge1xuICAgICAgICAgICAgY29uc3QgY2xhc3NlcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIGNvbnN0IGltcGxzID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgbGV0IGR0cyA9ICcnO1xuICAgICAgICAgICAgY29uc3QgbmVzdCA9IG5lc3RlZCA/IDIgOiAwO1xuICAgICAgICAgICAgZGVmcy5mb3JFYWNoKChkZWYpID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGRlZi5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0cnVjdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5lc3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50cy5wdXNoKGRlZi5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMuc2V0KGRlZi5uYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxfbmFtZTogZGVmLm9yaWdpbmFsX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmOiBkZWYuZGVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzX2RvYzogZGVmLmpzX2RvYyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ltcGwnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RlZCA9IGltcGxzLmdldChkZWYubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbXBscy5zZXQoZGVmLm5hbWUsIGAke2V4aXN0ZWQgPyBleGlzdGVkICsgJ1xcbicgOiAnJ30ke2RlZi5qc19kb2N9JHtkZWYuZGVmfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ludGVyZmFjZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBkdHMgKz1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnRMaW5lcyhgJHtkZWYuanNfZG9jfWV4cG9ydCBpbnRlcmZhY2UgJHtkZWYubmFtZX0ge2AsIG5lc3QpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbic7XG4gICAgICAgICAgICAgICAgICAgICAgICBkdHMgKz0gaW5kZW50TGluZXMoZGVmLmRlZiwgbmVzdCArIDIpICsgJ1xcbic7XG4gICAgICAgICAgICAgICAgICAgICAgICBkdHMgKz0gaW5kZW50TGluZXMoYH1gLCBuZXN0KSArICdcXG4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VudW0nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudHMucHVzaChkZWYubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnVtUHJlZml4ID0gdHNDb25zdEVudW0gPyAnIGNvbnN0JyA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgZHRzICs9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50TGluZXMoYCR7ZGVmLmpzX2RvY31leHBvcnQke2VudW1QcmVmaXh9IGVudW0gJHtkZWYubmFtZX0ge2AsIG5lc3QpICsgJ1xcbic7XG4gICAgICAgICAgICAgICAgICAgICAgICBkdHMgKz0gaW5kZW50TGluZXMoZGVmLmRlZiwgbmVzdCArIDIpICsgJ1xcbic7XG4gICAgICAgICAgICAgICAgICAgICAgICBkdHMgKz0gaW5kZW50TGluZXMoYH1gLCBuZXN0KSArICdcXG4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5lc3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50cy5wdXNoKGRlZi5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGR0cyArPSBpbmRlbnRMaW5lcyhgJHtkZWYuanNfZG9jfSR7ZGVmLmRlZn1gLCBuZXN0KSArICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgeyBqc19kb2MsIGRlZiwgb3JpZ2luYWxfbmFtZSB9XSBvZiBjbGFzc2VzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGltcGxEZWYgPSBpbXBscy5nZXQobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsX25hbWUgJiYgbmFtZSAhPT0gb3JpZ2luYWxfbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBkdHMgKz0gaW5kZW50TGluZXMoYGV4cG9ydCB0eXBlICR7b3JpZ2luYWxfbmFtZX0gPSAke25hbWV9XFxuYCwgbmVzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1heWJlRGVjbGFyZSA9IG5lc3RlZCA/ICcgJyA6ICcgZGVjbGFyZSAnO1xuICAgICAgICAgICAgICAgIGR0cyArPSBpbmRlbnRMaW5lcyhgJHtqc19kb2N9ZXhwb3J0JHttYXliZURlY2xhcmV9Y2xhc3MgJHtuYW1lfSB7YCwgbmVzdCk7XG4gICAgICAgICAgICAgICAgaWYgKGRlZikge1xuICAgICAgICAgICAgICAgICAgICBkdHMgKz0gJ1xcbicgKyBpbmRlbnRMaW5lcyhkZWYsIG5lc3QgKyAyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGltcGxEZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgZHRzICs9ICdcXG4nICsgaW5kZW50TGluZXMoaW1wbERlZiwgbmVzdCArIDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGVmIHx8IGltcGxEZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgZHRzICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZHRzICs9IGAgYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZHRzICs9IGluZGVudExpbmVzKGB9YCwgbmVzdCkgKyAnXFxuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkdHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9wTGV2ZWxEZWYgPSBjb252ZXJ0RGVmcyhhbGxEZWZzLmZpbHRlcigoZGVmKSA9PiAhZGVmLmpzX21vZCkpO1xuICAgICAgICBjb25zdCBuYW1lc3BhY2VEZWZzID0gT2JqZWN0LmVudHJpZXMoZ3JvdXBCeShhbGxEZWZzLmZpbHRlcigoZGVmKSA9PiBkZWYuanNfbW9kKSwgJ2pzX21vZCcpKS5yZWR1Y2UoKGFjYywgW21vZCwgZGVmc10pID0+IHtcbiAgICAgICAgICAgIGlkZW50cy5wdXNoKG1vZCk7XG4gICAgICAgICAgICByZXR1cm4gKGFjYyArIGBleHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgJHttb2R9IHtcXG4ke2NvbnZlcnREZWZzKGRlZnMsIHRydWUpfX1cXG5gKTtcbiAgICAgICAgfSwgJycpO1xuICAgICAgICBjb25zdCBkdHNIZWFkZXIgPSBub0R0c0hlYWRlclxuICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgOiBgLyogdHNsaW50OmRpc2FibGUgKi9cbi8qIGVzbGludC1kaXNhYmxlICovXG5cbi8qIGF1dG8tZ2VuZXJhdGVkIGJ5IE5BUEktUlMgKi9cXG5cbmA7XG4gICAgICAgIGNvbnN0IGV4dGVybmFsRGVmID0gdG9wTGV2ZWxEZWYuaW5kZXhPZignRXh0ZXJuYWxPYmplY3Q8JykgPiAtMSB8fFxuICAgICAgICAgICAgbmFtZXNwYWNlRGVmcy5pbmRleE9mKCdFeHRlcm5hbE9iamVjdDwnKSA+IC0xXG4gICAgICAgICAgICA/IGBleHBvcnQgZGVjbGFyZSBjbGFzcyBFeHRlcm5hbE9iamVjdDxUPiB7XG4gIHJlYWRvbmx5ICcnOiB7XG4gICAgcmVhZG9ubHkgJyc6IHVuaXF1ZSBzeW1ib2xcbiAgICBbSzogc3ltYm9sXTogVFxuICB9XG59XFxuYFxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgeWllbGQgd3JpdGVGaWxlQXN5bmModGFyZ2V0LCBkdHNIZWFkZXIgKyBleHRlcm5hbERlZiArIHRvcExldmVsRGVmICsgbmFtZXNwYWNlRGVmcywgJ3V0ZjgnKTtcbiAgICAgICAgcmV0dXJuIGlkZW50cztcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGluZGVudExpbmVzKGlucHV0LCBzcGFjZXMpIHtcbiAgICByZXR1cm4gaW5wdXRcbiAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAubWFwKChsaW5lKSA9PiAnJy5wYWRFbmQoc3BhY2VzLCAnICcpICtcbiAgICAgICAgKGxpbmUuc3RhcnRzV2l0aCgnIConKSA/IGxpbmUudHJpbUVuZCgpIDogbGluZS50cmltKCkpKVxuICAgICAgICAuam9pbignXFxuJyk7XG59XG5mdW5jdGlvbiB3cml0ZUpzQmluZGluZyhsb2NhbE5hbWUsIHBhY2thZ2VOYW1lLCBkaXN0RmlsZU5hbWUsIGlkZW50cykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmIChkaXN0RmlsZU5hbWUgJiYgaWRlbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBjcmVhdGVKc0JpbmRpbmcobG9jYWxOYW1lLCBwYWNrYWdlTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBkZWNsYXJlQ29kZXMgPSBgY29uc3QgeyAke2lkZW50cy5qb2luKCcsICcpfSB9ID0gbmF0aXZlQmluZGluZ1xcbmA7XG4gICAgICAgICAgICBjb25zdCBleHBvcnRzQ29kZSA9IGlkZW50cy5yZWR1Y2UoKGFjYywgY3VyKSA9PiBgJHthY2N9XFxubW9kdWxlLmV4cG9ydHMuJHtjdXJ9ID0gJHtjdXJ9YCwgJycpO1xuICAgICAgICAgICAgeWllbGQgd3JpdGVGaWxlQXN5bmMoZGlzdEZpbGVOYW1lLCB0ZW1wbGF0ZSArIGRlY2xhcmVDb2RlcyArIGV4cG9ydHNDb2RlICsgJ1xcbicsICd1dGY4Jyk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHBhdGNoQXJtRmVhdHVyZXNIRm9yQXJtVGFyZ2V0cygpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgemlnRXhlUGF0aDtcbiAgICAgICAgbGV0IHppZ0xpYkRpcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHppZ0VudiA9IEpTT04ucGFyc2UoZXhlY1N5bmMoYHppZyBlbnZgLCB7IGVuY29kaW5nOiAndXRmOCcgfSkudHJpbSgpKTtcbiAgICAgICAgICAgIHppZ0V4ZVBhdGggPSB6aWdFbnZbJ3ppZ19leGUnXTtcbiAgICAgICAgICAgIHppZ0xpYkRpciA9IHppZ0VudlsnbGliX2RpciddO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBnZXQgemlnIGVudiBjb3JyZWN0bHksIHBsZWFzZSBlbnN1cmUgdGhlIHppZyBpcyBpbnN0YWxsZWQgY29ycmVjdGx5IG9uIHlvdXIgc3lzdGVtJyk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSB6aWdMaWJEaXJcbiAgICAgICAgICAgICAgICA/IGpvaW4oemlnTGliRGlyLCAnbGliYy9nbGliYy9zeXNkZXBzL2FybS9hcm0tZmVhdHVyZXMuaCcpXG4gICAgICAgICAgICAgICAgOiBqb2luKHppZ0V4ZVBhdGgsICcuLi9saWIvbGliYy9nbGliYy9zeXNkZXBzL2FybS9hcm0tZmVhdHVyZXMuaCcpO1xuICAgICAgICAgICAgaWYgKCFleGlzdHNTeW5jKHApKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgd3JpdGVGaWxlQXN5bmMocCwgQVJNX0ZFQVRVUkVTX0gsIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogMG82NDQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoRXJyb3IoYENhbm5vdCBwYXRjaCBhcm0tZmVhdHVyZXMuaCwgZXJyb3I6ICR7ZS5tZXNzYWdlIHx8IGV9LiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS96aWdsYW5nL3ppZy9pc3N1ZXMvMzI4N2ApKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnVpbGQuanMubWFwIiwidmFyIF9hO1xuaW1wb3J0IHsgX19hd2FpdGVyIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBta2RpclN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBDb21tYW5kLCBPcHRpb24gfSBmcm9tICdjbGlwYW5pb24nO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY29sb3JldHRlJztcbmltcG9ydCB7IGdldE5hcGlDb25maWcgfSBmcm9tICcuL2NvbnN0cyc7XG5pbXBvcnQgeyBkZWJ1Z0ZhY3RvcnkgfSBmcm9tICcuL2RlYnVnJztcbmltcG9ydCB7IHdyaXRlRmlsZUFzeW5jLCBwaWNrIH0gZnJvbSAnLi91dGlscyc7XG5jb25zdCBkZWJ1ZyA9IGRlYnVnRmFjdG9yeSgnY3JlYXRlLW5wbS1kaXInKTtcbmV4cG9ydCBjbGFzcyBDcmVhdGVOcG1EaXJDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudGFyZ2V0RGlyID0gT3B0aW9uLlN0cmluZygnLXQsLS10YXJnZXQnKTtcbiAgICAgICAgdGhpcy5jb25maWcgPSBPcHRpb24uU3RyaW5nKCctYywtLWNvbmZpZycsICdwYWNrYWdlLmpzb24nKTtcbiAgICB9XG4gICAgZXhlY3V0ZSgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHlpZWxkIF9hLmNyZWF0ZSh0aGlzLmNvbmZpZywgam9pbihwcm9jZXNzLmN3ZCgpLCB0aGlzLnRhcmdldERpciksIHByb2Nlc3MuY3dkKCkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5fYSA9IENyZWF0ZU5wbURpckNvbW1hbmQ7XG5DcmVhdGVOcG1EaXJDb21tYW5kLnVzYWdlID0gQ29tbWFuZC5Vc2FnZSh7XG4gICAgZGVzY3JpcHRpb246ICdDcmVhdGUgbnBtIHBhY2thZ2VzIGRpciBmb3IgcGxhdGZvcm1zJyxcbn0pO1xuQ3JlYXRlTnBtRGlyQ29tbWFuZC5wYXRocyA9IFtbJ2NyZWF0ZS1ucG0tZGlyJ11dO1xuQ3JlYXRlTnBtRGlyQ29tbWFuZC5jcmVhdGUgPSAoY29uZmlnLCB0YXJnZXREaXJQYXRoLCBjd2QpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgIGNvbnN0IHBrZ0pzb25EaXIgPSBjb25maWc7XG4gICAgZGVidWcoYFJlYWQgY29udGVudCBmcm9tIFske2NoYWxrLnllbGxvd0JyaWdodChwa2dKc29uRGlyKX1dYCk7XG4gICAgY29uc3QgeyBwbGF0Zm9ybXMsIHBhY2thZ2VOYW1lLCB2ZXJzaW9uLCBiaW5hcnlOYW1lLCBjb250ZW50IH0gPSBnZXROYXBpQ29uZmlnKHBrZ0pzb25EaXIsIGN3ZCk7XG4gICAgZm9yIChjb25zdCBwbGF0Zm9ybURldGFpbCBvZiBwbGF0Zm9ybXMpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGlyID0gam9pbih0YXJnZXREaXJQYXRoLCAnbnBtJywgYCR7cGxhdGZvcm1EZXRhaWwucGxhdGZvcm1BcmNoQUJJfWApO1xuICAgICAgICBta2RpclN5bmModGFyZ2V0RGlyLCB7XG4gICAgICAgICAgICByZWN1cnNpdmU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBiaW5hcnlGaWxlTmFtZSA9IGAke2JpbmFyeU5hbWV9LiR7cGxhdGZvcm1EZXRhaWwucGxhdGZvcm1BcmNoQUJJfS5ub2RlYDtcbiAgICAgICAgY29uc3QgdGFyZ2V0UGFja2FnZUpzb24gPSBqb2luKHRhcmdldERpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgICAgICBkZWJ1ZyhgV3JpdGUgZmlsZSBbJHtjaGFsay55ZWxsb3dCcmlnaHQodGFyZ2V0UGFja2FnZUpzb24pfV1gKTtcbiAgICAgICAgY29uc3QgcGFja2FnZUpzb24gPSBPYmplY3QuYXNzaWduKHsgbmFtZTogYCR7cGFja2FnZU5hbWV9LSR7cGxhdGZvcm1EZXRhaWwucGxhdGZvcm1BcmNoQUJJfWAsIHZlcnNpb24sIG9zOiBbcGxhdGZvcm1EZXRhaWwucGxhdGZvcm1dLCBjcHU6IHBsYXRmb3JtRGV0YWlsLmFyY2ggIT09ICd1bml2ZXJzYWwnXG4gICAgICAgICAgICAgICAgPyBbcGxhdGZvcm1EZXRhaWwuYXJjaF1cbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCwgbWFpbjogYmluYXJ5RmlsZU5hbWUsIGZpbGVzOiBbYmluYXJ5RmlsZU5hbWVdIH0sIHBpY2soY29udGVudCwgJ2Rlc2NyaXB0aW9uJywgJ2tleXdvcmRzJywgJ2F1dGhvcicsICdhdXRob3JzJywgJ2hvbWVwYWdlJywgJ2xpY2Vuc2UnLCAnZW5naW5lcycsICdwdWJsaXNoQ29uZmlnJywgJ3JlcG9zaXRvcnknLCAnYnVncycpKTtcbiAgICAgICAgLy8gT25seSB3b3JrcyB3aXRoIHlhcm4gMy4xK1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20veWFybnBrZy9iZXJyeS9wdWxsLzM5ODFcbiAgICAgICAgaWYgKHBsYXRmb3JtRGV0YWlsLmFiaSA9PT0gJ2dudScpIHtcbiAgICAgICAgICAgIHBhY2thZ2VKc29uLmxpYmMgPSBbJ2dsaWJjJ107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocGxhdGZvcm1EZXRhaWwuYWJpID09PSAnbXVzbCcpIHtcbiAgICAgICAgICAgIHBhY2thZ2VKc29uLmxpYmMgPSBbJ211c2wnXTtcbiAgICAgICAgfVxuICAgICAgICB5aWVsZCB3cml0ZUZpbGVBc3luYyh0YXJnZXRQYWNrYWdlSnNvbiwgSlNPTi5zdHJpbmdpZnkocGFja2FnZUpzb24sIG51bGwsIDIpKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0UmVhZG1lID0gam9pbih0YXJnZXREaXIsICdSRUFETUUubWQnKTtcbiAgICAgICAgZGVidWcoYFdyaXRlIHRhcmdldCBSRUFETUUubWQgWyR7Y2hhbGsueWVsbG93QnJpZ2h0KHRhcmdldFJlYWRtZSl9XWApO1xuICAgICAgICB5aWVsZCB3cml0ZUZpbGVBc3luYyh0YXJnZXRSZWFkbWUsIHJlYWRtZShwYWNrYWdlTmFtZSwgcGxhdGZvcm1EZXRhaWwpKTtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIHJlYWRtZShwYWNrYWdlTmFtZSwgcGxhdGZvcm1EZXRhaWwpIHtcbiAgICByZXR1cm4gYCMgXFxgJHtwYWNrYWdlTmFtZX0tJHtwbGF0Zm9ybURldGFpbC5wbGF0Zm9ybUFyY2hBQkl9XFxgXG5cblRoaXMgaXMgdGhlICoqJHtwbGF0Zm9ybURldGFpbC5yYXd9KiogYmluYXJ5IGZvciBcXGAke3BhY2thZ2VOYW1lfVxcYFxuYDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNyZWF0ZS1ucG0tZGlyLmpzLm1hcCIsImltcG9ydCB7IF9fYXdhaXRlciB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG4vKipcbiAqIEEgY29tbWFuZCB0aGF0IHByaW50cyB0aGUgdXNhZ2Ugb2YgYWxsIGNvbW1hbmRzLlxuICpcbiAqIFBhdGhzOiBgLWhgLCBgLS1oZWxwYFxuICovXG5leHBvcnQgY2xhc3MgSGVscENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBleGVjdXRlKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgeWllbGQgdGhpcy5jb250ZXh0LnN0ZG91dC53cml0ZSh0aGlzLmNsaS51c2FnZSgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuSGVscENvbW1hbmQucGF0aHMgPSBbW2AtaGBdLCBbYC0taGVscGBdXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhlbHAuanMubWFwIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3QgYW5zaUVzY2FwZXMgPSBtb2R1bGUuZXhwb3J0cztcbi8vIFRPRE86IHJlbW92ZSB0aGlzIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb25cbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBhbnNpRXNjYXBlcztcblxuY29uc3QgRVNDID0gJ1xcdTAwMUJbJztcbmNvbnN0IE9TQyA9ICdcXHUwMDFCXSc7XG5jb25zdCBCRUwgPSAnXFx1MDAwNyc7XG5jb25zdCBTRVAgPSAnOyc7XG5jb25zdCBpc1Rlcm1pbmFsQXBwID0gcHJvY2Vzcy5lbnYuVEVSTV9QUk9HUkFNID09PSAnQXBwbGVfVGVybWluYWwnO1xuXG5hbnNpRXNjYXBlcy5jdXJzb3JUbyA9ICh4LCB5KSA9PiB7XG5cdGlmICh0eXBlb2YgeCAhPT0gJ251bWJlcicpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgYHhgIGFyZ3VtZW50IGlzIHJlcXVpcmVkJyk7XG5cdH1cblxuXHRpZiAodHlwZW9mIHkgIT09ICdudW1iZXInKSB7XG5cdFx0cmV0dXJuIEVTQyArICh4ICsgMSkgKyAnRyc7XG5cdH1cblxuXHRyZXR1cm4gRVNDICsgKHkgKyAxKSArICc7JyArICh4ICsgMSkgKyAnSCc7XG59O1xuXG5hbnNpRXNjYXBlcy5jdXJzb3JNb3ZlID0gKHgsIHkpID0+IHtcblx0aWYgKHR5cGVvZiB4ICE9PSAnbnVtYmVyJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBgeGAgYXJndW1lbnQgaXMgcmVxdWlyZWQnKTtcblx0fVxuXG5cdGxldCByZXQgPSAnJztcblxuXHRpZiAoeCA8IDApIHtcblx0XHRyZXQgKz0gRVNDICsgKC14KSArICdEJztcblx0fSBlbHNlIGlmICh4ID4gMCkge1xuXHRcdHJldCArPSBFU0MgKyB4ICsgJ0MnO1xuXHR9XG5cblx0aWYgKHkgPCAwKSB7XG5cdFx0cmV0ICs9IEVTQyArICgteSkgKyAnQSc7XG5cdH0gZWxzZSBpZiAoeSA+IDApIHtcblx0XHRyZXQgKz0gRVNDICsgeSArICdCJztcblx0fVxuXG5cdHJldHVybiByZXQ7XG59O1xuXG5hbnNpRXNjYXBlcy5jdXJzb3JVcCA9IChjb3VudCA9IDEpID0+IEVTQyArIGNvdW50ICsgJ0EnO1xuYW5zaUVzY2FwZXMuY3Vyc29yRG93biA9IChjb3VudCA9IDEpID0+IEVTQyArIGNvdW50ICsgJ0InO1xuYW5zaUVzY2FwZXMuY3Vyc29yRm9yd2FyZCA9IChjb3VudCA9IDEpID0+IEVTQyArIGNvdW50ICsgJ0MnO1xuYW5zaUVzY2FwZXMuY3Vyc29yQmFja3dhcmQgPSAoY291bnQgPSAxKSA9PiBFU0MgKyBjb3VudCArICdEJztcblxuYW5zaUVzY2FwZXMuY3Vyc29yTGVmdCA9IEVTQyArICdHJztcbmFuc2lFc2NhcGVzLmN1cnNvclNhdmVQb3NpdGlvbiA9IGlzVGVybWluYWxBcHAgPyAnXFx1MDAxQjcnIDogRVNDICsgJ3MnO1xuYW5zaUVzY2FwZXMuY3Vyc29yUmVzdG9yZVBvc2l0aW9uID0gaXNUZXJtaW5hbEFwcCA/ICdcXHUwMDFCOCcgOiBFU0MgKyAndSc7XG5hbnNpRXNjYXBlcy5jdXJzb3JHZXRQb3NpdGlvbiA9IEVTQyArICc2bic7XG5hbnNpRXNjYXBlcy5jdXJzb3JOZXh0TGluZSA9IEVTQyArICdFJztcbmFuc2lFc2NhcGVzLmN1cnNvclByZXZMaW5lID0gRVNDICsgJ0YnO1xuYW5zaUVzY2FwZXMuY3Vyc29ySGlkZSA9IEVTQyArICc/MjVsJztcbmFuc2lFc2NhcGVzLmN1cnNvclNob3cgPSBFU0MgKyAnPzI1aCc7XG5cbmFuc2lFc2NhcGVzLmVyYXNlTGluZXMgPSBjb3VudCA9PiB7XG5cdGxldCBjbGVhciA9ICcnO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdGNsZWFyICs9IGFuc2lFc2NhcGVzLmVyYXNlTGluZSArIChpIDwgY291bnQgLSAxID8gYW5zaUVzY2FwZXMuY3Vyc29yVXAoKSA6ICcnKTtcblx0fVxuXG5cdGlmIChjb3VudCkge1xuXHRcdGNsZWFyICs9IGFuc2lFc2NhcGVzLmN1cnNvckxlZnQ7XG5cdH1cblxuXHRyZXR1cm4gY2xlYXI7XG59O1xuXG5hbnNpRXNjYXBlcy5lcmFzZUVuZExpbmUgPSBFU0MgKyAnSyc7XG5hbnNpRXNjYXBlcy5lcmFzZVN0YXJ0TGluZSA9IEVTQyArICcxSyc7XG5hbnNpRXNjYXBlcy5lcmFzZUxpbmUgPSBFU0MgKyAnMksnO1xuYW5zaUVzY2FwZXMuZXJhc2VEb3duID0gRVNDICsgJ0onO1xuYW5zaUVzY2FwZXMuZXJhc2VVcCA9IEVTQyArICcxSic7XG5hbnNpRXNjYXBlcy5lcmFzZVNjcmVlbiA9IEVTQyArICcySic7XG5hbnNpRXNjYXBlcy5zY3JvbGxVcCA9IEVTQyArICdTJztcbmFuc2lFc2NhcGVzLnNjcm9sbERvd24gPSBFU0MgKyAnVCc7XG5cbmFuc2lFc2NhcGVzLmNsZWFyU2NyZWVuID0gJ1xcdTAwMUJjJztcblxuYW5zaUVzY2FwZXMuY2xlYXJUZXJtaW5hbCA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgP1xuXHRgJHthbnNpRXNjYXBlcy5lcmFzZVNjcmVlbn0ke0VTQ30wZmAgOlxuXHQvLyAxLiBFcmFzZXMgdGhlIHNjcmVlbiAoT25seSBkb25lIGluIGNhc2UgYDJgIGlzIG5vdCBzdXBwb3J0ZWQpXG5cdC8vIDIuIEVyYXNlcyB0aGUgd2hvbGUgc2NyZWVuIGluY2x1ZGluZyBzY3JvbGxiYWNrIGJ1ZmZlclxuXHQvLyAzLiBNb3ZlcyBjdXJzb3IgdG8gdGhlIHRvcC1sZWZ0IHBvc2l0aW9uXG5cdC8vIE1vcmUgaW5mbzogaHR0cHM6Ly93d3cucmVhbC13b3JsZC1zeXN0ZW1zLmNvbS9kb2NzL0FOU0ljb2RlLmh0bWxcblx0YCR7YW5zaUVzY2FwZXMuZXJhc2VTY3JlZW59JHtFU0N9M0oke0VTQ31IYDtcblxuYW5zaUVzY2FwZXMuYmVlcCA9IEJFTDtcblxuYW5zaUVzY2FwZXMubGluayA9ICh0ZXh0LCB1cmwpID0+IHtcblx0cmV0dXJuIFtcblx0XHRPU0MsXG5cdFx0JzgnLFxuXHRcdFNFUCxcblx0XHRTRVAsXG5cdFx0dXJsLFxuXHRcdEJFTCxcblx0XHR0ZXh0LFxuXHRcdE9TQyxcblx0XHQnOCcsXG5cdFx0U0VQLFxuXHRcdFNFUCxcblx0XHRCRUxcblx0XS5qb2luKCcnKTtcbn07XG5cbmFuc2lFc2NhcGVzLmltYWdlID0gKGJ1ZmZlciwgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGxldCByZXQgPSBgJHtPU0N9MTMzNztGaWxlPWlubGluZT0xYDtcblxuXHRpZiAob3B0aW9ucy53aWR0aCkge1xuXHRcdHJldCArPSBgO3dpZHRoPSR7b3B0aW9ucy53aWR0aH1gO1xuXHR9XG5cblx0aWYgKG9wdGlvbnMuaGVpZ2h0KSB7XG5cdFx0cmV0ICs9IGA7aGVpZ2h0PSR7b3B0aW9ucy5oZWlnaHR9YDtcblx0fVxuXG5cdGlmIChvcHRpb25zLnByZXNlcnZlQXNwZWN0UmF0aW8gPT09IGZhbHNlKSB7XG5cdFx0cmV0ICs9ICc7cHJlc2VydmVBc3BlY3RSYXRpbz0wJztcblx0fVxuXG5cdHJldHVybiByZXQgKyAnOicgKyBidWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpICsgQkVMO1xufTtcblxuYW5zaUVzY2FwZXMuaVRlcm0gPSB7XG5cdHNldEN3ZDogKGN3ZCA9IHByb2Nlc3MuY3dkKCkpID0+IGAke09TQ301MDtDdXJyZW50RGlyPSR7Y3dkfSR7QkVMfWAsXG5cblx0YW5ub3RhdGlvbjogKG1lc3NhZ2UsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRcdGxldCByZXQgPSBgJHtPU0N9MTMzNztgO1xuXG5cdFx0Y29uc3QgaGFzWCA9IHR5cGVvZiBvcHRpb25zLnggIT09ICd1bmRlZmluZWQnO1xuXHRcdGNvbnN0IGhhc1kgPSB0eXBlb2Ygb3B0aW9ucy55ICE9PSAndW5kZWZpbmVkJztcblx0XHRpZiAoKGhhc1ggfHwgaGFzWSkgJiYgIShoYXNYICYmIGhhc1kgJiYgdHlwZW9mIG9wdGlvbnMubGVuZ3RoICE9PSAndW5kZWZpbmVkJykpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignYHhgLCBgeWAgYW5kIGBsZW5ndGhgIG11c3QgYmUgZGVmaW5lZCB3aGVuIGB4YCBvciBgeWAgaXMgZGVmaW5lZCcpO1xuXHRcdH1cblxuXHRcdG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoL1xcfC9nLCAnJyk7XG5cblx0XHRyZXQgKz0gb3B0aW9ucy5pc0hpZGRlbiA/ICdBZGRIaWRkZW5Bbm5vdGF0aW9uPScgOiAnQWRkQW5ub3RhdGlvbj0nO1xuXG5cdFx0aWYgKG9wdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0ICs9XG5cdFx0XHRcdFx0KGhhc1ggP1xuXHRcdFx0XHRcdFx0W21lc3NhZ2UsIG9wdGlvbnMubGVuZ3RoLCBvcHRpb25zLngsIG9wdGlvbnMueV0gOlxuXHRcdFx0XHRcdFx0W29wdGlvbnMubGVuZ3RoLCBtZXNzYWdlXSkuam9pbignfCcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXQgKz0gbWVzc2FnZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0ICsgQkVMO1xuXHR9XG59O1xuIiwiY29uc3QgdHR5ID0gcmVxdWlyZSgnbm9kZTp0dHknKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXdhcm5pbmctY29tbWVudHNcbi8vIFRPRE86IFVzZSBhIGJldHRlciBtZXRob2Qgd2hlbiBpdCdzIGFkZGVkIHRvIE5vZGUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzQwMjQwKVxuY29uc3QgaGFzQ29sb3JzID0gdHR5LldyaXRlU3RyZWFtLnByb3RvdHlwZS5oYXNDb2xvcnMoKTtcblxuY29uc3QgZm9ybWF0ID0gKG9wZW4sIGNsb3NlKSA9PiB7XG5cdGlmICghaGFzQ29sb3JzKSB7XG5cdFx0cmV0dXJuIGlucHV0ID0+IGlucHV0O1xuXHR9XG5cblx0Y29uc3Qgb3BlbkNvZGUgPSBgXFx1MDAxQlske29wZW59bWA7XG5cdGNvbnN0IGNsb3NlQ29kZSA9IGBcXHUwMDFCWyR7Y2xvc2V9bWA7XG5cblx0cmV0dXJuIGlucHV0ID0+IHtcblx0XHRjb25zdCBzdHJpbmcgPSBpbnB1dCArICcnOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWltcGxpY2l0LWNvZXJjaW9uIC0tIFRoaXMgaXMgZmFzdGVyLlxuXHRcdGxldCBpbmRleCA9IHN0cmluZy5pbmRleE9mKGNsb3NlQ29kZSk7XG5cblx0XHRpZiAoaW5kZXggPT09IC0xKSB7XG5cdFx0XHQvLyBOb3RlOiBJbnRlbnRpb25hbGx5IG5vdCB1c2luZyBzdHJpbmcgaW50ZXJwb2xhdGlvbiBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy5cblx0XHRcdHJldHVybiBvcGVuQ29kZSArIHN0cmluZyArIGNsb3NlQ29kZTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgbmVzdGVkIGNvbG9ycy5cblxuXHRcdC8vIFdlIGNvdWxkIGhhdmUgZG9uZSB0aGlzLCBidXQgaXQncyB0b28gc2xvdyAoYXMgb2YgTm9kZS5qcyAyMikuXG5cdFx0Ly8gcmV0dXJuIG9wZW5Db2RlICsgc3RyaW5nLnJlcGxhY2VBbGwoY2xvc2VDb2RlLCBvcGVuQ29kZSkgKyBjbG9zZUNvZGU7XG5cblx0XHRsZXQgcmVzdWx0ID0gb3BlbkNvZGU7XG5cdFx0bGV0IGxhc3RJbmRleCA9IDA7XG5cblx0XHR3aGlsZSAoaW5kZXggIT09IC0xKSB7XG5cdFx0XHRyZXN1bHQgKz0gc3RyaW5nLnNsaWNlKGxhc3RJbmRleCwgaW5kZXgpICsgb3BlbkNvZGU7XG5cdFx0XHRsYXN0SW5kZXggPSBpbmRleCArIGNsb3NlQ29kZS5sZW5ndGg7XG5cdFx0XHRpbmRleCA9IHN0cmluZy5pbmRleE9mKGNsb3NlQ29kZSwgbGFzdEluZGV4KTtcblx0XHR9XG5cblx0XHRyZXN1bHQgKz0gc3RyaW5nLnNsaWNlKGxhc3RJbmRleCkgKyBjbG9zZUNvZGU7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xufTtcblxuY29uc3QgY29sb3JzID0ge307XG5cbmNvbG9ycy5yZXNldCA9IGZvcm1hdCgwLCAwKTtcbmNvbG9ycy5ib2xkID0gZm9ybWF0KDEsIDIyKTtcbmNvbG9ycy5kaW0gPSBmb3JtYXQoMiwgMjIpO1xuY29sb3JzLml0YWxpYyA9IGZvcm1hdCgzLCAyMyk7XG5jb2xvcnMudW5kZXJsaW5lID0gZm9ybWF0KDQsIDI0KTtcbmNvbG9ycy5vdmVybGluZSA9IGZvcm1hdCg1MywgNTUpO1xuY29sb3JzLmludmVyc2UgPSBmb3JtYXQoNywgMjcpO1xuY29sb3JzLmhpZGRlbiA9IGZvcm1hdCg4LCAyOCk7XG5jb2xvcnMuc3RyaWtldGhyb3VnaCA9IGZvcm1hdCg5LCAyOSk7XG5cbmNvbG9ycy5ibGFjayA9IGZvcm1hdCgzMCwgMzkpO1xuY29sb3JzLnJlZCA9IGZvcm1hdCgzMSwgMzkpO1xuY29sb3JzLmdyZWVuID0gZm9ybWF0KDMyLCAzOSk7XG5jb2xvcnMueWVsbG93ID0gZm9ybWF0KDMzLCAzOSk7XG5jb2xvcnMuYmx1ZSA9IGZvcm1hdCgzNCwgMzkpO1xuY29sb3JzLm1hZ2VudGEgPSBmb3JtYXQoMzUsIDM5KTtcbmNvbG9ycy5jeWFuID0gZm9ybWF0KDM2LCAzOSk7XG5jb2xvcnMud2hpdGUgPSBmb3JtYXQoMzcsIDM5KTtcbmNvbG9ycy5ncmF5ID0gZm9ybWF0KDkwLCAzOSk7XG5cbmNvbG9ycy5iZ0JsYWNrID0gZm9ybWF0KDQwLCA0OSk7XG5jb2xvcnMuYmdSZWQgPSBmb3JtYXQoNDEsIDQ5KTtcbmNvbG9ycy5iZ0dyZWVuID0gZm9ybWF0KDQyLCA0OSk7XG5jb2xvcnMuYmdZZWxsb3cgPSBmb3JtYXQoNDMsIDQ5KTtcbmNvbG9ycy5iZ0JsdWUgPSBmb3JtYXQoNDQsIDQ5KTtcbmNvbG9ycy5iZ01hZ2VudGEgPSBmb3JtYXQoNDUsIDQ5KTtcbmNvbG9ycy5iZ0N5YW4gPSBmb3JtYXQoNDYsIDQ5KTtcbmNvbG9ycy5iZ1doaXRlID0gZm9ybWF0KDQ3LCA0OSk7XG5jb2xvcnMuYmdHcmF5ID0gZm9ybWF0KDEwMCwgNDkpO1xuXG5jb2xvcnMucmVkQnJpZ2h0ID0gZm9ybWF0KDkxLCAzOSk7XG5jb2xvcnMuZ3JlZW5CcmlnaHQgPSBmb3JtYXQoOTIsIDM5KTtcbmNvbG9ycy55ZWxsb3dCcmlnaHQgPSBmb3JtYXQoOTMsIDM5KTtcbmNvbG9ycy5ibHVlQnJpZ2h0ID0gZm9ybWF0KDk0LCAzOSk7XG5jb2xvcnMubWFnZW50YUJyaWdodCA9IGZvcm1hdCg5NSwgMzkpO1xuY29sb3JzLmN5YW5CcmlnaHQgPSBmb3JtYXQoOTYsIDM5KTtcbmNvbG9ycy53aGl0ZUJyaWdodCA9IGZvcm1hdCg5NywgMzkpO1xuXG5jb2xvcnMuYmdSZWRCcmlnaHQgPSBmb3JtYXQoMTAxLCA0OSk7XG5jb2xvcnMuYmdHcmVlbkJyaWdodCA9IGZvcm1hdCgxMDIsIDQ5KTtcbmNvbG9ycy5iZ1llbGxvd0JyaWdodCA9IGZvcm1hdCgxMDMsIDQ5KTtcbmNvbG9ycy5iZ0JsdWVCcmlnaHQgPSBmb3JtYXQoMTA0LCA0OSk7XG5jb2xvcnMuYmdNYWdlbnRhQnJpZ2h0ID0gZm9ybWF0KDEwNSwgNDkpO1xuY29sb3JzLmJnQ3lhbkJyaWdodCA9IGZvcm1hdCgxMDYsIDQ5KTtcbmNvbG9ycy5iZ1doaXRlQnJpZ2h0ID0gZm9ybWF0KDEwNywgNDkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbG9ycztcbiIsIi8vIHByb2Nlc3MuZW52IGRvdC1ub3RhdGlvbiBhY2Nlc3MgcHJpbnRzOlxuLy8gUHJvcGVydHkgJ1RFUk0nIGNvbWVzIGZyb20gYW4gaW5kZXggc2lnbmF0dXJlLCBzbyBpdCBtdXN0IGJlIGFjY2Vzc2VkIHdpdGggWydURVJNJ10udHMoNDExMSlcbi8qIGVzbGludCBkb3Qtbm90YXRpb246IFtcIm9mZlwiXSAqL1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbi8vIFBvcnRlZCBmcm9tIGlzLXVuaWNvZGUtc3VwcG9ydGVkXG5mdW5jdGlvbiBpc1VuaWNvZGVTdXBwb3J0ZWQoKSB7XG4gICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT09ICd3aW4zMicpIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MuZW52WydURVJNJ10gIT09ICdsaW51eCc7IC8vIExpbnV4IGNvbnNvbGUgKGtlcm5lbClcbiAgICB9XG4gICAgcmV0dXJuIChCb29sZWFuKHByb2Nlc3MuZW52WydXVF9TRVNTSU9OJ10pIHx8IC8vIFdpbmRvd3MgVGVybWluYWxcbiAgICAgICAgQm9vbGVhbihwcm9jZXNzLmVudlsnVEVSTUlOVVNfU1VCTElNRSddKSB8fCAvLyBUZXJtaW51cyAoPDAuMi4yNylcbiAgICAgICAgcHJvY2Vzcy5lbnZbJ0NvbkVtdVRhc2snXSA9PT0gJ3tjbWQ6OkNtZGVyfScgfHwgLy8gQ29uRW11IGFuZCBjbWRlclxuICAgICAgICBwcm9jZXNzLmVudlsnVEVSTV9QUk9HUkFNJ10gPT09ICdUZXJtaW51cy1TdWJsaW1lJyB8fFxuICAgICAgICBwcm9jZXNzLmVudlsnVEVSTV9QUk9HUkFNJ10gPT09ICd2c2NvZGUnIHx8XG4gICAgICAgIHByb2Nlc3MuZW52WydURVJNJ10gPT09ICd4dGVybS0yNTZjb2xvcicgfHxcbiAgICAgICAgcHJvY2Vzcy5lbnZbJ1RFUk0nXSA9PT0gJ2FsYWNyaXR0eScgfHxcbiAgICAgICAgcHJvY2Vzcy5lbnZbJ1RFUk1JTkFMX0VNVUxBVE9SJ10gPT09ICdKZXRCcmFpbnMtSmVkaVRlcm0nKTtcbn1cbi8vIFBvcnRlZCBmcm9tIGZpZ3VyZXNcbmNvbnN0IGNvbW1vbiA9IHtcbiAgICBjaXJjbGVRdWVzdGlvbk1hcms6ICcoPyknLFxuICAgIHF1ZXN0aW9uTWFya1ByZWZpeDogJyg/KScsXG4gICAgc3F1YXJlOiAn4paIJyxcbiAgICBzcXVhcmVEYXJrU2hhZGU6ICfilpMnLFxuICAgIHNxdWFyZU1lZGl1bVNoYWRlOiAn4paSJyxcbiAgICBzcXVhcmVMaWdodFNoYWRlOiAn4paRJyxcbiAgICBzcXVhcmVUb3A6ICfiloAnLFxuICAgIHNxdWFyZUJvdHRvbTogJ+KWhCcsXG4gICAgc3F1YXJlTGVmdDogJ+KWjCcsXG4gICAgc3F1YXJlUmlnaHQ6ICfilpAnLFxuICAgIHNxdWFyZUNlbnRlcjogJ+KWoCcsXG4gICAgYnVsbGV0OiAn4pePJyxcbiAgICBkb3Q6ICfigKQnLFxuICAgIGVsbGlwc2lzOiAn4oCmJyxcbiAgICBwb2ludGVyU21hbGw6ICfigLonLFxuICAgIHRyaWFuZ2xlVXA6ICfilrInLFxuICAgIHRyaWFuZ2xlVXBTbWFsbDogJ+KWtCcsXG4gICAgdHJpYW5nbGVEb3duOiAn4pa8JyxcbiAgICB0cmlhbmdsZURvd25TbWFsbDogJ+KWvicsXG4gICAgdHJpYW5nbGVMZWZ0U21hbGw6ICfil4InLFxuICAgIHRyaWFuZ2xlUmlnaHRTbWFsbDogJ+KWuCcsXG4gICAgaG9tZTogJ+KMgicsXG4gICAgaGVhcnQ6ICfimaUnLFxuICAgIG11c2ljTm90ZTogJ+KZqicsXG4gICAgbXVzaWNOb3RlQmVhbWVkOiAn4pmrJyxcbiAgICBhcnJvd1VwOiAn4oaRJyxcbiAgICBhcnJvd0Rvd246ICfihpMnLFxuICAgIGFycm93TGVmdDogJ+KGkCcsXG4gICAgYXJyb3dSaWdodDogJ+KGkicsXG4gICAgYXJyb3dMZWZ0UmlnaHQ6ICfihpQnLFxuICAgIGFycm93VXBEb3duOiAn4oaVJyxcbiAgICBhbG1vc3RFcXVhbDogJ+KJiCcsXG4gICAgbm90RXF1YWw6ICfiiaAnLFxuICAgIGxlc3NPckVxdWFsOiAn4omkJyxcbiAgICBncmVhdGVyT3JFcXVhbDogJ+KJpScsXG4gICAgaWRlbnRpY2FsOiAn4omhJyxcbiAgICBpbmZpbml0eTogJ+KInicsXG4gICAgc3Vic2NyaXB0WmVybzogJ+KCgCcsXG4gICAgc3Vic2NyaXB0T25lOiAn4oKBJyxcbiAgICBzdWJzY3JpcHRUd286ICfigoInLFxuICAgIHN1YnNjcmlwdFRocmVlOiAn4oKDJyxcbiAgICBzdWJzY3JpcHRGb3VyOiAn4oKEJyxcbiAgICBzdWJzY3JpcHRGaXZlOiAn4oKFJyxcbiAgICBzdWJzY3JpcHRTaXg6ICfigoYnLFxuICAgIHN1YnNjcmlwdFNldmVuOiAn4oKHJyxcbiAgICBzdWJzY3JpcHRFaWdodDogJ+KCiCcsXG4gICAgc3Vic2NyaXB0TmluZTogJ+KCiScsXG4gICAgb25lSGFsZjogJ8K9JyxcbiAgICBvbmVUaGlyZDogJ+KFkycsXG4gICAgb25lUXVhcnRlcjogJ8K8JyxcbiAgICBvbmVGaWZ0aDogJ+KFlScsXG4gICAgb25lU2l4dGg6ICfihZknLFxuICAgIG9uZUVpZ2h0aDogJ+KFmycsXG4gICAgdHdvVGhpcmRzOiAn4oWUJyxcbiAgICB0d29GaWZ0aHM6ICfihZYnLFxuICAgIHRocmVlUXVhcnRlcnM6ICfCvicsXG4gICAgdGhyZWVGaWZ0aHM6ICfihZcnLFxuICAgIHRocmVlRWlnaHRoczogJ+KFnCcsXG4gICAgZm91ckZpZnRoczogJ+KFmCcsXG4gICAgZml2ZVNpeHRoczogJ+KFmicsXG4gICAgZml2ZUVpZ2h0aHM6ICfihZ0nLFxuICAgIHNldmVuRWlnaHRoczogJ+KFnicsXG4gICAgbGluZTogJ+KUgCcsXG4gICAgbGluZUJvbGQ6ICfilIEnLFxuICAgIGxpbmVEb3VibGU6ICfilZAnLFxuICAgIGxpbmVEYXNoZWQwOiAn4pSEJyxcbiAgICBsaW5lRGFzaGVkMTogJ+KUhScsXG4gICAgbGluZURhc2hlZDI6ICfilIgnLFxuICAgIGxpbmVEYXNoZWQzOiAn4pSJJyxcbiAgICBsaW5lRGFzaGVkNDogJ+KVjCcsXG4gICAgbGluZURhc2hlZDU6ICfilY0nLFxuICAgIGxpbmVEYXNoZWQ2OiAn4pW0JyxcbiAgICBsaW5lRGFzaGVkNzogJ+KVticsXG4gICAgbGluZURhc2hlZDg6ICfilbgnLFxuICAgIGxpbmVEYXNoZWQ5OiAn4pW6JyxcbiAgICBsaW5lRGFzaGVkMTA6ICfilbwnLFxuICAgIGxpbmVEYXNoZWQxMTogJ+KVvicsXG4gICAgbGluZURhc2hlZDEyOiAn4oiSJyxcbiAgICBsaW5lRGFzaGVkMTM6ICfigJMnLFxuICAgIGxpbmVEYXNoZWQxNDogJ+KAkCcsXG4gICAgbGluZURhc2hlZDE1OiAn4oGDJyxcbiAgICBsaW5lVmVydGljYWw6ICfilIInLFxuICAgIGxpbmVWZXJ0aWNhbEJvbGQ6ICfilIMnLFxuICAgIGxpbmVWZXJ0aWNhbERvdWJsZTogJ+KVkScsXG4gICAgbGluZVZlcnRpY2FsRGFzaGVkMDogJ+KUhicsXG4gICAgbGluZVZlcnRpY2FsRGFzaGVkMTogJ+KUhycsXG4gICAgbGluZVZlcnRpY2FsRGFzaGVkMjogJ+KUiicsXG4gICAgbGluZVZlcnRpY2FsRGFzaGVkMzogJ+KUiycsXG4gICAgbGluZVZlcnRpY2FsRGFzaGVkNDogJ+KVjicsXG4gICAgbGluZVZlcnRpY2FsRGFzaGVkNTogJ+KVjycsXG4gICAgbGluZVZlcnRpY2FsRGFzaGVkNjogJ+KVtScsXG4gICAgbGluZVZlcnRpY2FsRGFzaGVkNzogJ+KVtycsXG4gICAgbGluZVZlcnRpY2FsRGFzaGVkODogJ+KVuScsXG4gICAgbGluZVZlcnRpY2FsRGFzaGVkOTogJ+KVuycsXG4gICAgbGluZVZlcnRpY2FsRGFzaGVkMTA6ICfilb0nLFxuICAgIGxpbmVWZXJ0aWNhbERhc2hlZDExOiAn4pW/JyxcbiAgICBsaW5lRG93bkxlZnQ6ICfilJAnLFxuICAgIGxpbmVEb3duTGVmdEFyYzogJ+KVricsXG4gICAgbGluZURvd25Cb2xkTGVmdEJvbGQ6ICfilJMnLFxuICAgIGxpbmVEb3duQm9sZExlZnQ6ICfilJInLFxuICAgIGxpbmVEb3duTGVmdEJvbGQ6ICfilJEnLFxuICAgIGxpbmVEb3duRG91YmxlTGVmdERvdWJsZTogJ+KVlycsXG4gICAgbGluZURvd25Eb3VibGVMZWZ0OiAn4pWWJyxcbiAgICBsaW5lRG93bkxlZnREb3VibGU6ICfilZUnLFxuICAgIGxpbmVEb3duUmlnaHQ6ICfilIwnLFxuICAgIGxpbmVEb3duUmlnaHRBcmM6ICfila0nLFxuICAgIGxpbmVEb3duQm9sZFJpZ2h0Qm9sZDogJ+KUjycsXG4gICAgbGluZURvd25Cb2xkUmlnaHQ6ICfilI4nLFxuICAgIGxpbmVEb3duUmlnaHRCb2xkOiAn4pSNJyxcbiAgICBsaW5lRG93bkRvdWJsZVJpZ2h0RG91YmxlOiAn4pWUJyxcbiAgICBsaW5lRG93bkRvdWJsZVJpZ2h0OiAn4pWTJyxcbiAgICBsaW5lRG93blJpZ2h0RG91YmxlOiAn4pWSJyxcbiAgICBsaW5lVXBMZWZ0OiAn4pSYJyxcbiAgICBsaW5lVXBMZWZ0QXJjOiAn4pWvJyxcbiAgICBsaW5lVXBCb2xkTGVmdEJvbGQ6ICfilJsnLFxuICAgIGxpbmVVcEJvbGRMZWZ0OiAn4pSaJyxcbiAgICBsaW5lVXBMZWZ0Qm9sZDogJ+KUmScsXG4gICAgbGluZVVwRG91YmxlTGVmdERvdWJsZTogJ+KVnScsXG4gICAgbGluZVVwRG91YmxlTGVmdDogJ+KVnCcsXG4gICAgbGluZVVwTGVmdERvdWJsZTogJ+KVmycsXG4gICAgbGluZVVwUmlnaHQ6ICfilJQnLFxuICAgIGxpbmVVcFJpZ2h0QXJjOiAn4pWwJyxcbiAgICBsaW5lVXBCb2xkUmlnaHRCb2xkOiAn4pSXJyxcbiAgICBsaW5lVXBCb2xkUmlnaHQ6ICfilJYnLFxuICAgIGxpbmVVcFJpZ2h0Qm9sZDogJ+KUlScsXG4gICAgbGluZVVwRG91YmxlUmlnaHREb3VibGU6ICfilZonLFxuICAgIGxpbmVVcERvdWJsZVJpZ2h0OiAn4pWZJyxcbiAgICBsaW5lVXBSaWdodERvdWJsZTogJ+KVmCcsXG4gICAgbGluZVVwRG93bkxlZnQ6ICfilKQnLFxuICAgIGxpbmVVcEJvbGREb3duQm9sZExlZnRCb2xkOiAn4pSrJyxcbiAgICBsaW5lVXBCb2xkRG93bkJvbGRMZWZ0OiAn4pSoJyxcbiAgICBsaW5lVXBEb3duTGVmdEJvbGQ6ICfilKUnLFxuICAgIGxpbmVVcEJvbGREb3duTGVmdEJvbGQ6ICfilKknLFxuICAgIGxpbmVVcERvd25Cb2xkTGVmdEJvbGQ6ICfilKonLFxuICAgIGxpbmVVcERvd25Cb2xkTGVmdDogJ+KUpycsXG4gICAgbGluZVVwQm9sZERvd25MZWZ0OiAn4pSmJyxcbiAgICBsaW5lVXBEb3VibGVEb3duRG91YmxlTGVmdERvdWJsZTogJ+KVoycsXG4gICAgbGluZVVwRG91YmxlRG93bkRvdWJsZUxlZnQ6ICfilaInLFxuICAgIGxpbmVVcERvd25MZWZ0RG91YmxlOiAn4pWhJyxcbiAgICBsaW5lVXBEb3duUmlnaHQ6ICfilJwnLFxuICAgIGxpbmVVcEJvbGREb3duQm9sZFJpZ2h0Qm9sZDogJ+KUoycsXG4gICAgbGluZVVwQm9sZERvd25Cb2xkUmlnaHQ6ICfilKAnLFxuICAgIGxpbmVVcERvd25SaWdodEJvbGQ6ICfilJ0nLFxuICAgIGxpbmVVcEJvbGREb3duUmlnaHRCb2xkOiAn4pShJyxcbiAgICBsaW5lVXBEb3duQm9sZFJpZ2h0Qm9sZDogJ+KUoicsXG4gICAgbGluZVVwRG93bkJvbGRSaWdodDogJ+KUnycsXG4gICAgbGluZVVwQm9sZERvd25SaWdodDogJ+KUnicsXG4gICAgbGluZVVwRG91YmxlRG93bkRvdWJsZVJpZ2h0RG91YmxlOiAn4pWgJyxcbiAgICBsaW5lVXBEb3VibGVEb3duRG91YmxlUmlnaHQ6ICfilZ8nLFxuICAgIGxpbmVVcERvd25SaWdodERvdWJsZTogJ+KVnicsXG4gICAgbGluZURvd25MZWZ0UmlnaHQ6ICfilKwnLFxuICAgIGxpbmVEb3duQm9sZExlZnRCb2xkUmlnaHRCb2xkOiAn4pSzJyxcbiAgICBsaW5lRG93bkxlZnRCb2xkUmlnaHRCb2xkOiAn4pSvJyxcbiAgICBsaW5lRG93bkJvbGRMZWZ0UmlnaHQ6ICfilLAnLFxuICAgIGxpbmVEb3duQm9sZExlZnRCb2xkUmlnaHQ6ICfilLEnLFxuICAgIGxpbmVEb3duQm9sZExlZnRSaWdodEJvbGQ6ICfilLInLFxuICAgIGxpbmVEb3duTGVmdFJpZ2h0Qm9sZDogJ+KUricsXG4gICAgbGluZURvd25MZWZ0Qm9sZFJpZ2h0OiAn4pStJyxcbiAgICBsaW5lRG93bkRvdWJsZUxlZnREb3VibGVSaWdodERvdWJsZTogJ+KVpicsXG4gICAgbGluZURvd25Eb3VibGVMZWZ0UmlnaHQ6ICfilaUnLFxuICAgIGxpbmVEb3duTGVmdERvdWJsZVJpZ2h0RG91YmxlOiAn4pWkJyxcbiAgICBsaW5lVXBMZWZ0UmlnaHQ6ICfilLQnLFxuICAgIGxpbmVVcEJvbGRMZWZ0Qm9sZFJpZ2h0Qm9sZDogJ+KUuycsXG4gICAgbGluZVVwTGVmdEJvbGRSaWdodEJvbGQ6ICfilLcnLFxuICAgIGxpbmVVcEJvbGRMZWZ0UmlnaHQ6ICfilLgnLFxuICAgIGxpbmVVcEJvbGRMZWZ0Qm9sZFJpZ2h0OiAn4pS5JyxcbiAgICBsaW5lVXBCb2xkTGVmdFJpZ2h0Qm9sZDogJ+KUuicsXG4gICAgbGluZVVwTGVmdFJpZ2h0Qm9sZDogJ+KUticsXG4gICAgbGluZVVwTGVmdEJvbGRSaWdodDogJ+KUtScsXG4gICAgbGluZVVwRG91YmxlTGVmdERvdWJsZVJpZ2h0RG91YmxlOiAn4pWpJyxcbiAgICBsaW5lVXBEb3VibGVMZWZ0UmlnaHQ6ICfilagnLFxuICAgIGxpbmVVcExlZnREb3VibGVSaWdodERvdWJsZTogJ+KVpycsXG4gICAgbGluZVVwRG93bkxlZnRSaWdodDogJ+KUvCcsXG4gICAgbGluZVVwQm9sZERvd25Cb2xkTGVmdEJvbGRSaWdodEJvbGQ6ICfilYsnLFxuICAgIGxpbmVVcERvd25Cb2xkTGVmdEJvbGRSaWdodEJvbGQ6ICfilYgnLFxuICAgIGxpbmVVcEJvbGREb3duTGVmdEJvbGRSaWdodEJvbGQ6ICfilYcnLFxuICAgIGxpbmVVcEJvbGREb3duQm9sZExlZnRSaWdodEJvbGQ6ICfilYonLFxuICAgIGxpbmVVcEJvbGREb3duQm9sZExlZnRCb2xkUmlnaHQ6ICfilYknLFxuICAgIGxpbmVVcEJvbGREb3duTGVmdFJpZ2h0OiAn4pWAJyxcbiAgICBsaW5lVXBEb3duQm9sZExlZnRSaWdodDogJ+KVgScsXG4gICAgbGluZVVwRG93bkxlZnRCb2xkUmlnaHQ6ICfilL0nLFxuICAgIGxpbmVVcERvd25MZWZ0UmlnaHRCb2xkOiAn4pS+JyxcbiAgICBsaW5lVXBCb2xkRG93bkJvbGRMZWZ0UmlnaHQ6ICfilYInLFxuICAgIGxpbmVVcERvd25MZWZ0Qm9sZFJpZ2h0Qm9sZDogJ+KUvycsXG4gICAgbGluZVVwQm9sZERvd25MZWZ0Qm9sZFJpZ2h0OiAn4pWDJyxcbiAgICBsaW5lVXBCb2xkRG93bkxlZnRSaWdodEJvbGQ6ICfilYQnLFxuICAgIGxpbmVVcERvd25Cb2xkTGVmdEJvbGRSaWdodDogJ+KVhScsXG4gICAgbGluZVVwRG93bkJvbGRMZWZ0UmlnaHRCb2xkOiAn4pWGJyxcbiAgICBsaW5lVXBEb3VibGVEb3duRG91YmxlTGVmdERvdWJsZVJpZ2h0RG91YmxlOiAn4pWsJyxcbiAgICBsaW5lVXBEb3VibGVEb3duRG91YmxlTGVmdFJpZ2h0OiAn4pWrJyxcbiAgICBsaW5lVXBEb3duTGVmdERvdWJsZVJpZ2h0RG91YmxlOiAn4pWqJyxcbiAgICBsaW5lQ3Jvc3M6ICfilbMnLFxuICAgIGxpbmVCYWNrc2xhc2g6ICfilbInLFxuICAgIGxpbmVTbGFzaDogJ+KVsScsXG59O1xuY29uc3Qgc3BlY2lhbE1haW5TeW1ib2xzID0ge1xuICAgIHRpY2s6ICfinJQnLFxuICAgIGluZm86ICfihLknLFxuICAgIHdhcm5pbmc6ICfimqAnLFxuICAgIGNyb3NzOiAn4pyYJyxcbiAgICBzcXVhcmVTbWFsbDogJ+KXuycsXG4gICAgc3F1YXJlU21hbGxGaWxsZWQ6ICfil7wnLFxuICAgIGNpcmNsZTogJ+KXrycsXG4gICAgY2lyY2xlRmlsbGVkOiAn4peJJyxcbiAgICBjaXJjbGVEb3R0ZWQ6ICfil4wnLFxuICAgIGNpcmNsZURvdWJsZTogJ+KXjicsXG4gICAgY2lyY2xlQ2lyY2xlOiAn4pOeJyxcbiAgICBjaXJjbGVDcm9zczogJ+KTpycsXG4gICAgY2lyY2xlUGlwZTogJ+KSvicsXG4gICAgcmFkaW9PbjogJ+KXiScsXG4gICAgcmFkaW9PZmY6ICfil68nLFxuICAgIGNoZWNrYm94T246ICfimJInLFxuICAgIGNoZWNrYm94T2ZmOiAn4piQJyxcbiAgICBjaGVja2JveENpcmNsZU9uOiAn4pOnJyxcbiAgICBjaGVja2JveENpcmNsZU9mZjogJ+KSvicsXG4gICAgcG9pbnRlcjogJ+KdrycsXG4gICAgdHJpYW5nbGVVcE91dGxpbmU6ICfilrMnLFxuICAgIHRyaWFuZ2xlTGVmdDogJ+KXgCcsXG4gICAgdHJpYW5nbGVSaWdodDogJ+KWticsXG4gICAgbG96ZW5nZTogJ+KXhicsXG4gICAgbG96ZW5nZU91dGxpbmU6ICfil4cnLFxuICAgIGhhbWJ1cmdlcjogJ+KYsCcsXG4gICAgc21pbGV5OiAn44uhJyxcbiAgICBtdXN0YWNoZTogJ+C3tCcsXG4gICAgc3RhcjogJ+KYhScsXG4gICAgcGxheTogJ+KWticsXG4gICAgbm9kZWpzOiAn4qyiJyxcbiAgICBvbmVTZXZlbnRoOiAn4oWQJyxcbiAgICBvbmVOaW50aDogJ+KFkScsXG4gICAgb25lVGVudGg6ICfihZInLFxufTtcbmNvbnN0IHNwZWNpYWxGYWxsYmFja1N5bWJvbHMgPSB7XG4gICAgdGljazogJ+KImicsXG4gICAgaW5mbzogJ2knLFxuICAgIHdhcm5pbmc6ICfigLwnLFxuICAgIGNyb3NzOiAnw5cnLFxuICAgIHNxdWFyZVNtYWxsOiAn4pahJyxcbiAgICBzcXVhcmVTbWFsbEZpbGxlZDogJ+KWoCcsXG4gICAgY2lyY2xlOiAnKCApJyxcbiAgICBjaXJjbGVGaWxsZWQ6ICcoKiknLFxuICAgIGNpcmNsZURvdHRlZDogJyggKScsXG4gICAgY2lyY2xlRG91YmxlOiAnKCApJyxcbiAgICBjaXJjbGVDaXJjbGU6ICco4peLKScsXG4gICAgY2lyY2xlQ3Jvc3M6ICcow5cpJyxcbiAgICBjaXJjbGVQaXBlOiAnKOKUgiknLFxuICAgIHJhZGlvT246ICcoKiknLFxuICAgIHJhZGlvT2ZmOiAnKCApJyxcbiAgICBjaGVja2JveE9uOiAnW8OXXScsXG4gICAgY2hlY2tib3hPZmY6ICdbIF0nLFxuICAgIGNoZWNrYm94Q2lyY2xlT246ICcow5cpJyxcbiAgICBjaGVja2JveENpcmNsZU9mZjogJyggKScsXG4gICAgcG9pbnRlcjogJz4nLFxuICAgIHRyaWFuZ2xlVXBPdXRsaW5lOiAn4oiGJyxcbiAgICB0cmlhbmdsZUxlZnQ6ICfil4QnLFxuICAgIHRyaWFuZ2xlUmlnaHQ6ICfilronLFxuICAgIGxvemVuZ2U6ICfimaYnLFxuICAgIGxvemVuZ2VPdXRsaW5lOiAn4peKJyxcbiAgICBoYW1idXJnZXI6ICfiiaEnLFxuICAgIHNtaWxleTogJ+KYuicsXG4gICAgbXVzdGFjaGU6ICfilIzilIDilJAnLFxuICAgIHN0YXI6ICfinLYnLFxuICAgIHBsYXk6ICfilronLFxuICAgIG5vZGVqczogJ+KZpicsXG4gICAgb25lU2V2ZW50aDogJzEvNycsXG4gICAgb25lTmludGg6ICcxLzknLFxuICAgIG9uZVRlbnRoOiAnMS8xMCcsXG59O1xuZXhwb3J0IGNvbnN0IG1haW5TeW1ib2xzID0geyAuLi5jb21tb24sIC4uLnNwZWNpYWxNYWluU3ltYm9scyB9O1xuZXhwb3J0IGNvbnN0IGZhbGxiYWNrU3ltYm9scyA9IHtcbiAgICAuLi5jb21tb24sXG4gICAgLi4uc3BlY2lhbEZhbGxiYWNrU3ltYm9scyxcbn07XG5jb25zdCBzaG91bGRVc2VNYWluID0gaXNVbmljb2RlU3VwcG9ydGVkKCk7XG5jb25zdCBmaWd1cmVzID0gc2hvdWxkVXNlTWFpbiA/IG1haW5TeW1ib2xzIDogZmFsbGJhY2tTeW1ib2xzO1xuZXhwb3J0IGRlZmF1bHQgZmlndXJlcztcbmNvbnN0IHJlcGxhY2VtZW50cyA9IE9iamVjdC5lbnRyaWVzKHNwZWNpYWxNYWluU3ltYm9scyk7XG4vLyBPbiB0ZXJtaW5hbHMgd2hpY2ggZG8gbm90IHN1cHBvcnQgVW5pY29kZSBzeW1ib2xzLCBzdWJzdGl0dXRlIHRoZW0gdG8gb3RoZXIgc3ltYm9sc1xuZXhwb3J0IGNvbnN0IHJlcGxhY2VTeW1ib2xzID0gKHN0cmluZywgeyB1c2VGYWxsYmFjayA9ICFzaG91bGRVc2VNYWluIH0gPSB7fSkgPT4ge1xuICAgIGlmICh1c2VGYWxsYmFjaykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIG1haW5TeW1ib2xdIG9mIHJlcGxhY2VtZW50cykge1xuICAgICAgICAgICAgY29uc3QgZmFsbGJhY2tTeW1ib2wgPSBmYWxsYmFja1N5bWJvbHNba2V5XTtcbiAgICAgICAgICAgIGlmICghZmFsbGJhY2tTeW1ib2wpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmaW5kIGZhbGxiYWNrIGZvciAke2tleX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlQWxsKG1haW5TeW1ib2wsIGZhbGxiYWNrU3ltYm9sKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RyaW5nO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gaXNQcm9taXNlKG9iaikge1xuICByZXR1cm4gISFvYmogJiYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpICYmIHR5cGVvZiBvYmoudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuIGEgZnVuY3Rpb24gYXN5bmNocm9ub3VzbHkgb3Igc3luY2hyb25vdXNseVxuICpcbiAqIGV4YW1wbGU6XG4gKiBydW5Bc3luYyh3cmFwcGVkRnVuY3Rpb24sIGNhbGxiYWNrKSguLi5hcmdzKTtcbiAqXG4gKiBAcGFyYW0gICB7RnVuY3Rpb259IGZ1bmMgIEZ1bmN0aW9uIHRvIHJ1blxuICogQHBhcmFtICAge0Z1bmN0aW9ufSBbY2JdICAgIENhbGxiYWNrIGZ1bmN0aW9uIHBhc3NlZCB0aGUgYGZ1bmNgIHJldHVybmVkIHZhbHVlXG4gKiBAcGFyYW0gICB7c3RyaW5nfSBbcHJveHlQcm9wZXJ0eV0gYHRoaXNgIHByb3BlcnR5IHRvIGJlIHVzZWQgZm9yIHRoZSBjYWxsYmFjayBmYWN0b3J5XG4gKiBAcmV0dXJuICB7RnVuY3Rpb24oYXJndW1lbnRzKX0gQXJndW1lbnRzIHRvIHBhc3MgdG8gYGZ1bmNgLiBUaGlzIGZ1bmN0aW9uIHdpbGwgaW4gdHVyblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhIFByb21pc2UgKE5vZGUgPj0gMC4xMikgb3IgY2FsbCB0aGUgY2FsbGJhY2tzLlxuICovXG5cbnZhciBydW5Bc3luYyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZ1bmMsIGNiLCBwcm94eVByb3BlcnR5ID0gJ2FzeW5jJykge1xuICBpZiAodHlwZW9mIGNiID09PSAnc3RyaW5nJykge1xuICAgIHByb3h5UHJvcGVydHkgPSBjYjtcbiAgICBjYiA9IHVuZGVmaW5lZDtcbiAgfVxuICBjYiA9IGNiIHx8IGZ1bmN0aW9uICgpIHt9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgb3JpZ2luYWxUaGlzID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlc29sdmVkID0gZmFsc2U7XG4gICAgICBjb25zdCB3cmFwcGVkUmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAocmVzb2x2ZWQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1J1bi1hc3luYyBwcm9taXNlIGFscmVhZHkgcmVzb2x2ZWQuJylcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlZCA9IHRydWU7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVqZWN0ZWQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHdyYXBwZWRSZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdSdW4tYXN5bmMgcHJvbWlzZSBhbHJlYWR5IHJlamVjdGVkLicpXG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0ZWQgPSB0cnVlO1xuICAgICAgICByZWplY3QodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdXNpbmdDYWxsYmFjayA9IGZhbHNlO1xuICAgICAgdmFyIGNhbGxiYWNrQ29uZmxpY3QgPSBmYWxzZTtcbiAgICAgIHZhciBjb250ZXh0RW5kZWQgPSBmYWxzZTtcblxuICAgICAgdmFyIGRvbmVGYWN0b3J5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoY29udGV4dEVuZGVkKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdSdW4tYXN5bmMgYXN5bmMoKSBjYWxsZWQgb3V0c2lkZSBhIHZhbGlkIHJ1bi1hc3luYyBjb250ZXh0LCBjYWxsYmFjayB3aWxsIGJlIGlnbm9yZWQuJyk7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbGxiYWNrQ29uZmxpY3QpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1J1bi1hc3luYyB3cmFwcGVkIGZ1bmN0aW9uIChhc3luYykgcmV0dXJuZWQgYSBwcm9taXNlLlxcbkNhbGxzIHRvIGFzeW5jKCkgY2FsbGJhY2sgY2FuIGhhdmUgdW5leHBlY3RlZCByZXN1bHRzLicpO1xuICAgICAgICB9XG4gICAgICAgIHVzaW5nQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVyciwgdmFsdWUpIHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICB3cmFwcGVkUmVqZWN0KGVycik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdyYXBwZWRSZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9O1xuXG4gICAgICB2YXIgX3RoaXM7XG4gICAgICBpZiAob3JpZ2luYWxUaGlzICYmIHByb3h5UHJvcGVydHkgJiYgUHJveHkpIHtcbiAgICAgICAgX3RoaXMgPSBuZXcgUHJveHkob3JpZ2luYWxUaGlzLCB7XG4gICAgICAgICAgZ2V0KF90YXJnZXQsIHByb3ApIHtcbiAgICAgICAgICAgIGlmIChwcm9wID09PSBwcm94eVByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIGlmIChwcm9wIGluIF90YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYCR7cHJveHlQcm9wZXJ0eX0gcHJvcGVydHkgaXMgYmVlbiBzaGFkb3dlZCBieSBydW4tc3luY2ApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBkb25lRmFjdG9yeTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KC4uLmFyZ3VtZW50cyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcyA9IHsgW3Byb3h5UHJvcGVydHldOiBkb25lRmFjdG9yeSB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgYW5zd2VyID0gZnVuYy5hcHBseShfdGhpcywgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncykpO1xuXG4gICAgICBpZiAodXNpbmdDYWxsYmFjaykge1xuICAgICAgICBpZiAoaXNQcm9taXNlKGFuc3dlcikpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1J1bi1hc3luYyB3cmFwcGVkIGZ1bmN0aW9uIChzeW5jKSByZXR1cm5lZCBhIHByb21pc2UgYnV0IGFzeW5jKCkgY2FsbGJhY2sgbXVzdCBiZSBleGVjdXRlZCB0byByZXNvbHZlLicpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNQcm9taXNlKGFuc3dlcikpIHtcbiAgICAgICAgICBjYWxsYmFja0NvbmZsaWN0ID0gdHJ1ZTtcbiAgICAgICAgICBhbnN3ZXIudGhlbih3cmFwcGVkUmVzb2x2ZSwgd3JhcHBlZFJlamVjdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd3JhcHBlZFJlc29sdmUoYW5zd2VyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29udGV4dEVuZGVkID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHByb21pc2UudGhlbihjYi5iaW5kKG51bGwsIG51bGwpLCBjYik7XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxufTtcblxucnVuQXN5bmMuY2IgPSBmdW5jdGlvbiAoZnVuYywgY2IpIHtcbiAgcmV0dXJuIHJ1bkFzeW5jKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSBmdW5jLmxlbmd0aCAtIDEpIHtcbiAgICAgIGFyZ3MucHVzaCh0aGlzLmFzeW5jKCkpO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfSwgY2IpO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0Z1bmN0aW9uID0gdm9pZCAwO1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNGdW5jdGlvbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlRXJyb3JDbGFzcyA9IHZvaWQgMDtcbmZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2xhc3MoY3JlYXRlSW1wbCkge1xuICAgIHZhciBfc3VwZXIgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgRXJyb3IuY2FsbChpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gICAgfTtcbiAgICB2YXIgY3RvckZ1bmMgPSBjcmVhdGVJbXBsKF9zdXBlcik7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JGdW5jO1xuICAgIHJldHVybiBjdG9yRnVuYztcbn1cbmV4cG9ydHMuY3JlYXRlRXJyb3JDbGFzcyA9IGNyZWF0ZUVycm9yQ2xhc3M7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jcmVhdGVFcnJvckNsYXNzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5VbnN1YnNjcmlwdGlvbkVycm9yID0gdm9pZCAwO1xudmFyIGNyZWF0ZUVycm9yQ2xhc3NfMSA9IHJlcXVpcmUoXCIuL2NyZWF0ZUVycm9yQ2xhc3NcIik7XG5leHBvcnRzLlVuc3Vic2NyaXB0aW9uRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzXzEuY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFVuc3Vic2NyaXB0aW9uRXJyb3JJbXBsKGVycm9ycykge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IGVycm9yc1xuICAgICAgICAgICAgPyBlcnJvcnMubGVuZ3RoICsgXCIgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcXG5cIiArIGVycm9ycy5tYXAoZnVuY3Rpb24gKGVyciwgaSkgeyByZXR1cm4gaSArIDEgKyBcIikgXCIgKyBlcnIudG9TdHJpbmcoKTsgfSkuam9pbignXFxuICAnKVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1Vuc3Vic2NyaXB0aW9uRXJyb3InO1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICB9O1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VbnN1YnNjcmlwdGlvbkVycm9yLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hcnJSZW1vdmUgPSB2b2lkIDA7XG5mdW5jdGlvbiBhcnJSZW1vdmUoYXJyLCBpdGVtKSB7XG4gICAgaWYgKGFycikge1xuICAgICAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgMCA8PSBpbmRleCAmJiBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG59XG5leHBvcnRzLmFyclJlbW92ZSA9IGFyclJlbW92ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFyclJlbW92ZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3ZhbHVlcyA9ICh0aGlzICYmIHRoaXMuX192YWx1ZXMpIHx8IGZ1bmN0aW9uKG8pIHtcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufTtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzU3Vic2NyaXB0aW9uID0gZXhwb3J0cy5FTVBUWV9TVUJTQ1JJUFRJT04gPSBleHBvcnRzLlN1YnNjcmlwdGlvbiA9IHZvaWQgMDtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi91dGlsL2lzRnVuY3Rpb25cIik7XG52YXIgVW5zdWJzY3JpcHRpb25FcnJvcl8xID0gcmVxdWlyZShcIi4vdXRpbC9VbnN1YnNjcmlwdGlvbkVycm9yXCIpO1xudmFyIGFyclJlbW92ZV8xID0gcmVxdWlyZShcIi4vdXRpbC9hcnJSZW1vdmVcIik7XG52YXIgU3Vic2NyaXB0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oaW5pdGlhbFRlYXJkb3duKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICB9XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVfMSwgX2EsIGVfMiwgX2I7XG4gICAgICAgIHZhciBlcnJvcnM7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfcGFyZW50YWdlXzEgPSBfX3ZhbHVlcyhfcGFyZW50YWdlKSwgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpOyAhX3BhcmVudGFnZV8xXzEuZG9uZTsgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudF8xID0gX3BhcmVudGFnZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50XzEucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3BhcmVudGFnZV8xXzEgJiYgIV9wYXJlbnRhZ2VfMV8xLmRvbmUgJiYgKF9hID0gX3BhcmVudGFnZV8xLnJldHVybikpIF9hLmNhbGwoX3BhcmVudGFnZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3BhcmVudGFnZS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGluaXRpYWxGaW5hbGl6ZXIgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbihpbml0aWFsRmluYWxpemVyKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxGaW5hbGl6ZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZSBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3JfMS5VbnN1YnNjcmlwdGlvbkVycm9yID8gZS5lcnJvcnMgOiBbZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgICAgIGlmIChfZmluYWxpemVycykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9maW5hbGl6ZXJzXzEgPSBfX3ZhbHVlcyhfZmluYWxpemVycyksIF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpOyAhX2ZpbmFsaXplcnNfMV8xLmRvbmU7IF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmluYWxpemVyID0gX2ZpbmFsaXplcnNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKGZpbmFsaXplcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICE9PSBudWxsICYmIGVycm9ycyAhPT0gdm9pZCAwID8gZXJyb3JzIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3JfMS5VbnN1YnNjcmlwdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGVycm9ycykpLCBfX3JlYWQoZXJyLmVycm9ycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZmluYWxpemVyc18xXzEgJiYgIV9maW5hbGl6ZXJzXzFfMS5kb25lICYmIChfYiA9IF9maW5hbGl6ZXJzXzEucmV0dXJuKSkgX2IuY2FsbChfZmluYWxpemVyc18xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbnN1YnNjcmlwdGlvbkVycm9yXzEuVW5zdWJzY3JpcHRpb25FcnJvcihlcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0ZWFyZG93biAmJiB0ZWFyZG93biAhPT0gdGhpcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duLmNsb3NlZCB8fCB0ZWFyZG93bi5faGFzUGFyZW50KHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGVhcmRvd24uX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoX2EgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSkucHVzaCh0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHJldHVybiBfcGFyZW50YWdlID09PSBwYXJlbnQgfHwgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgJiYgX3BhcmVudGFnZS5pbmNsdWRlcyhwYXJlbnQpKTtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgPyAoX3BhcmVudGFnZS5wdXNoKHBhcmVudCksIF9wYXJlbnRhZ2UpIDogX3BhcmVudGFnZSA/IFtfcGFyZW50YWdlLCBwYXJlbnRdIDogcGFyZW50O1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgaWYgKF9wYXJlbnRhZ2UgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICBhcnJSZW1vdmVfMS5hcnJSZW1vdmUoX3BhcmVudGFnZSwgcGFyZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgX2ZpbmFsaXplcnMgJiYgYXJyUmVtb3ZlXzEuYXJyUmVtb3ZlKF9maW5hbGl6ZXJzLCB0ZWFyZG93bik7XG4gICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGVhcmRvd24uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLkVNUFRZID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVtcHR5ID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICBlbXB0eS5jbG9zZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZW1wdHk7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uO1xufSgpKTtcbmV4cG9ydHMuU3Vic2NyaXB0aW9uID0gU3Vic2NyaXB0aW9uO1xuZXhwb3J0cy5FTVBUWV9TVUJTQ1JJUFRJT04gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5mdW5jdGlvbiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24gfHxcbiAgICAgICAgKHZhbHVlICYmICdjbG9zZWQnIGluIHZhbHVlICYmIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHZhbHVlLnJlbW92ZSkgJiYgaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24odmFsdWUuYWRkKSAmJiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbih2YWx1ZS51bnN1YnNjcmliZSkpKTtcbn1cbmV4cG9ydHMuaXNTdWJzY3JpcHRpb24gPSBpc1N1YnNjcmlwdGlvbjtcbmZ1bmN0aW9uIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKSB7XG4gICAgaWYgKGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKGZpbmFsaXplcikpIHtcbiAgICAgICAgZmluYWxpemVyKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmaW5hbGl6ZXIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TdWJzY3JpcHRpb24uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbmZpZyA9IHZvaWQgMDtcbmV4cG9ydHMuY29uZmlnID0ge1xuICAgIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gICAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICAgIFByb21pc2U6IHVuZGVmaW5lZCxcbiAgICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiBmYWxzZSxcbiAgICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6IGZhbHNlLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmZpZy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRpbWVvdXRQcm92aWRlciA9IHZvaWQgMDtcbmV4cG9ydHMudGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGV4cG9ydHMudGltZW91dFByb3ZpZGVyLmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLnNldFRpbWVvdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5zZXRUaW1lb3V0LmFwcGx5KGRlbGVnYXRlLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gZXhwb3J0cy50aW1lb3V0UHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhclRpbWVvdXQpIHx8IGNsZWFyVGltZW91dCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZW91dFByb3ZpZGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXBvcnRVbmhhbmRsZWRFcnJvciA9IHZvaWQgMDtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9jb25maWdcIik7XG52YXIgdGltZW91dFByb3ZpZGVyXzEgPSByZXF1aXJlKFwiLi4vc2NoZWR1bGVyL3RpbWVvdXRQcm92aWRlclwiKTtcbmZ1bmN0aW9uIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycikge1xuICAgIHRpbWVvdXRQcm92aWRlcl8xLnRpbWVvdXRQcm92aWRlci5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9uVW5oYW5kbGVkRXJyb3IgPSBjb25maWdfMS5jb25maWcub25VbmhhbmRsZWRFcnJvcjtcbiAgICAgICAgaWYgKG9uVW5oYW5kbGVkRXJyb3IpIHtcbiAgICAgICAgICAgIG9uVW5oYW5kbGVkRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5yZXBvcnRVbmhhbmRsZWRFcnJvciA9IHJlcG9ydFVuaGFuZGxlZEVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVwb3J0VW5oYW5kbGVkRXJyb3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm5vb3AgPSB2b2lkIDA7XG5mdW5jdGlvbiBub29wKCkgeyB9XG5leHBvcnRzLm5vb3AgPSBub29wO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm9vcC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlTm90aWZpY2F0aW9uID0gZXhwb3J0cy5uZXh0Tm90aWZpY2F0aW9uID0gZXhwb3J0cy5lcnJvck5vdGlmaWNhdGlvbiA9IGV4cG9ydHMuQ09NUExFVEVfTk9USUZJQ0FUSU9OID0gdm9pZCAwO1xuZXhwb3J0cy5DT01QTEVURV9OT1RJRklDQVRJT04gPSAoZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlYXRlTm90aWZpY2F0aW9uKCdDJywgdW5kZWZpbmVkLCB1bmRlZmluZWQpOyB9KSgpO1xuZnVuY3Rpb24gZXJyb3JOb3RpZmljYXRpb24oZXJyb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlTm90aWZpY2F0aW9uKCdFJywgdW5kZWZpbmVkLCBlcnJvcik7XG59XG5leHBvcnRzLmVycm9yTm90aWZpY2F0aW9uID0gZXJyb3JOb3RpZmljYXRpb247XG5mdW5jdGlvbiBuZXh0Tm90aWZpY2F0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5vdGlmaWNhdGlvbignTicsIHZhbHVlLCB1bmRlZmluZWQpO1xufVxuZXhwb3J0cy5uZXh0Tm90aWZpY2F0aW9uID0gbmV4dE5vdGlmaWNhdGlvbjtcbmZ1bmN0aW9uIGNyZWF0ZU5vdGlmaWNhdGlvbihraW5kLCB2YWx1ZSwgZXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9O1xufVxuZXhwb3J0cy5jcmVhdGVOb3RpZmljYXRpb24gPSBjcmVhdGVOb3RpZmljYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ob3RpZmljYXRpb25GYWN0b3JpZXMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNhcHR1cmVFcnJvciA9IGV4cG9ydHMuZXJyb3JDb250ZXh0ID0gdm9pZCAwO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL2NvbmZpZ1wiKTtcbnZhciBjb250ZXh0ID0gbnVsbDtcbmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikge1xuICAgIGlmIChjb25maWdfMS5jb25maWcudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZykge1xuICAgICAgICB2YXIgaXNSb290ID0gIWNvbnRleHQ7XG4gICAgICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgICAgICAgIGNvbnRleHQgPSB7IGVycm9yVGhyb3duOiBmYWxzZSwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgfVxuICAgICAgICBjYigpO1xuICAgICAgICBpZiAoaXNSb290KSB7XG4gICAgICAgICAgICB2YXIgX2EgPSBjb250ZXh0LCBlcnJvclRocm93biA9IF9hLmVycm9yVGhyb3duLCBlcnJvciA9IF9hLmVycm9yO1xuICAgICAgICAgICAgY29udGV4dCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5leHBvcnRzLmVycm9yQ29udGV4dCA9IGVycm9yQ29udGV4dDtcbmZ1bmN0aW9uIGNhcHR1cmVFcnJvcihlcnIpIHtcbiAgICBpZiAoY29uZmlnXzEuY29uZmlnLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcgJiYgY29udGV4dCkge1xuICAgICAgICBjb250ZXh0LmVycm9yVGhyb3duID0gdHJ1ZTtcbiAgICAgICAgY29udGV4dC5lcnJvciA9IGVycjtcbiAgICB9XG59XG5leHBvcnRzLmNhcHR1cmVFcnJvciA9IGNhcHR1cmVFcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9yQ29udGV4dC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkVNUFRZX09CU0VSVkVSID0gZXhwb3J0cy5TYWZlU3Vic2NyaWJlciA9IGV4cG9ydHMuU3Vic2NyaWJlciA9IHZvaWQgMDtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi91dGlsL2lzRnVuY3Rpb25cIik7XG52YXIgU3Vic2NyaXB0aW9uXzEgPSByZXF1aXJlKFwiLi9TdWJzY3JpcHRpb25cIik7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi9jb25maWdcIik7XG52YXIgcmVwb3J0VW5oYW5kbGVkRXJyb3JfMSA9IHJlcXVpcmUoXCIuL3V0aWwvcmVwb3J0VW5oYW5kbGVkRXJyb3JcIik7XG52YXIgbm9vcF8xID0gcmVxdWlyZShcIi4vdXRpbC9ub29wXCIpO1xudmFyIE5vdGlmaWNhdGlvbkZhY3Rvcmllc18xID0gcmVxdWlyZShcIi4vTm90aWZpY2F0aW9uRmFjdG9yaWVzXCIpO1xudmFyIHRpbWVvdXRQcm92aWRlcl8xID0gcmVxdWlyZShcIi4vc2NoZWR1bGVyL3RpbWVvdXRQcm92aWRlclwiKTtcbnZhciBlcnJvckNvbnRleHRfMSA9IHJlcXVpcmUoXCIuL3V0aWwvZXJyb3JDb250ZXh0XCIpO1xudmFyIFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YnNjcmliZXIoZGVzdGluYXRpb24pIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbikge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgICAgIGlmIChTdWJzY3JpcHRpb25fMS5pc1N1YnNjcmlwdGlvbihkZXN0aW5hdGlvbikpIHtcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5hZGQoX3RoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBleHBvcnRzLkVNUFRZX09CU0VSVkVSO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3Vic2NyaWJlci5jcmVhdGUgPSBmdW5jdGlvbiAobmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2FmZVN1YnNjcmliZXIobmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wcGVkTm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbkZhY3Rvcmllc18xLm5leHROb3RpZmljYXRpb24odmFsdWUpLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX25leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wcGVkTm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbkZhY3Rvcmllc18xLmVycm9yTm90aWZpY2F0aW9uKGVyciksIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgaGFuZGxlU3RvcHBlZE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb25GYWN0b3JpZXNfMS5DT01QTEVURV9OT1RJRklDQVRJT04sIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBTdWJzY3JpYmVyO1xufShTdWJzY3JpcHRpb25fMS5TdWJzY3JpcHRpb24pKTtcbmV4cG9ydHMuU3Vic2NyaWJlciA9IFN1YnNjcmliZXI7XG52YXIgX2JpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gX2JpbmQuY2FsbChmbiwgdGhpc0FyZyk7XG59XG52YXIgQ29uc3VtZXJPYnNlcnZlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBwYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgfVxuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLm5leHQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmVycm9yKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIENvbnN1bWVyT2JzZXJ2ZXI7XG59KCkpO1xudmFyIFNhZmVTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU2FmZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgIG5leHQ6IChvYnNlcnZlck9yTmV4dCAhPT0gbnVsbCAmJiBvYnNlcnZlck9yTmV4dCAhPT0gdm9pZCAwID8gb2JzZXJ2ZXJPck5leHQgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dF8xO1xuICAgICAgICAgICAgaWYgKF90aGlzICYmIGNvbmZpZ18xLmNvbmZpZy51c2VEZXByZWNhdGVkTmV4dENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEgPSBPYmplY3QuY3JlYXRlKG9ic2VydmVyT3JOZXh0KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogb2JzZXJ2ZXJPck5leHQubmV4dCAmJiBiaW5kKG9ic2VydmVyT3JOZXh0Lm5leHQsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBvYnNlcnZlck9yTmV4dC5lcnJvciAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmVycm9yLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogb2JzZXJ2ZXJPck5leHQuY29tcGxldGUgJiYgYmluZChvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBTYWZlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZXhwb3J0cy5TYWZlU3Vic2NyaWJlciA9IFNhZmVTdWJzY3JpYmVyO1xuZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHtcbiAgICBpZiAoY29uZmlnXzEuY29uZmlnLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpIHtcbiAgICAgICAgZXJyb3JDb250ZXh0XzEuY2FwdHVyZUVycm9yKGVycm9yKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yXzEucmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRlZmF1bHRFcnJvckhhbmRsZXIoZXJyKSB7XG4gICAgdGhyb3cgZXJyO1xufVxuZnVuY3Rpb24gaGFuZGxlU3RvcHBlZE5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIHN1YnNjcmliZXIpIHtcbiAgICB2YXIgb25TdG9wcGVkTm90aWZpY2F0aW9uID0gY29uZmlnXzEuY29uZmlnLm9uU3RvcHBlZE5vdGlmaWNhdGlvbjtcbiAgICBvblN0b3BwZWROb3RpZmljYXRpb24gJiYgdGltZW91dFByb3ZpZGVyXzEudGltZW91dFByb3ZpZGVyLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gb25TdG9wcGVkTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgc3Vic2NyaWJlcik7IH0pO1xufVxuZXhwb3J0cy5FTVBUWV9PQlNFUlZFUiA9IHtcbiAgICBjbG9zZWQ6IHRydWUsXG4gICAgbmV4dDogbm9vcF8xLm5vb3AsXG4gICAgZXJyb3I6IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgY29tcGxldGU6IG5vb3BfMS5ub29wLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVN1YnNjcmliZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm9ic2VydmFibGUgPSB2b2lkIDA7XG5leHBvcnRzLm9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLm9ic2VydmFibGUpIHx8ICdAQG9ic2VydmFibGUnOyB9KSgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b2JzZXJ2YWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaWRlbnRpdHkgPSB2b2lkIDA7XG5mdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gICAgcmV0dXJuIHg7XG59XG5leHBvcnRzLmlkZW50aXR5ID0gaWRlbnRpdHk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pZGVudGl0eS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGlwZUZyb21BcnJheSA9IGV4cG9ydHMucGlwZSA9IHZvaWQgMDtcbnZhciBpZGVudGl0eV8xID0gcmVxdWlyZShcIi4vaWRlbnRpdHlcIik7XG5mdW5jdGlvbiBwaXBlKCkge1xuICAgIHZhciBmbnMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBmbnNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkoZm5zKTtcbn1cbmV4cG9ydHMucGlwZSA9IHBpcGU7XG5mdW5jdGlvbiBwaXBlRnJvbUFycmF5KGZucykge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eV8xLmlkZW50aXR5O1xuICAgIH1cbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZm5zWzBdO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gcGlwZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGZucy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGZuKSB7IHJldHVybiBmbihwcmV2KTsgfSwgaW5wdXQpO1xuICAgIH07XG59XG5leHBvcnRzLnBpcGVGcm9tQXJyYXkgPSBwaXBlRnJvbUFycmF5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGlwZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT2JzZXJ2YWJsZSA9IHZvaWQgMDtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9TdWJzY3JpYmVyXCIpO1xudmFyIFN1YnNjcmlwdGlvbl8xID0gcmVxdWlyZShcIi4vU3Vic2NyaXB0aW9uXCIpO1xudmFyIG9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuL3N5bWJvbC9vYnNlcnZhYmxlXCIpO1xudmFyIHBpcGVfMSA9IHJlcXVpcmUoXCIuL3V0aWwvcGlwZVwiKTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuL2NvbmZpZ1wiKTtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi91dGlsL2lzRnVuY3Rpb25cIik7XG52YXIgZXJyb3JDb250ZXh0XzEgPSByZXF1aXJlKFwiLi91dGlsL2Vycm9yQ29udGV4dFwiKTtcbnZhciBPYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZSkge1xuICAgICAgICBpZiAoc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmUgPSBzdWJzY3JpYmU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgb2JzZXJ2YWJsZS5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIChvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBzdWJzY3JpYmVyID0gaXNTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0KSA/IG9ic2VydmVyT3JOZXh0IDogbmV3IFN1YnNjcmliZXJfMS5TYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgZXJyb3JDb250ZXh0XzEuZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCBvcGVyYXRvciA9IF9hLm9wZXJhdG9yLCBzb3VyY2UgPSBfYS5zb3VyY2U7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvclxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTdWJzY3JpYmVyXzEuU2FmZVN1YnNjcmliZXIoe1xuICAgICAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IHJlc29sdmUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF90aGlzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZVtvYnNlcnZhYmxlXzEub2JzZXJ2YWJsZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbnNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGlwZV8xLnBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiAodmFsdWUgPSB4KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gcmVqZWN0KGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUodmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZTtcbn0oKSk7XG5leHBvcnRzLk9ic2VydmFibGUgPSBPYnNlcnZhYmxlO1xuZnVuY3Rpb24gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IHByb21pc2VDdG9yICE9PSBudWxsICYmIHByb21pc2VDdG9yICE9PSB2b2lkIDAgPyBwcm9taXNlQ3RvciA6IGNvbmZpZ18xLmNvbmZpZy5Qcm9taXNlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gaXNPYnNlcnZlcih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbih2YWx1ZS5uZXh0KSAmJiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbih2YWx1ZS5lcnJvcikgJiYgaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24odmFsdWUuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gaXNTdWJzY3JpYmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmliZXJfMS5TdWJzY3JpYmVyKSB8fCAoaXNPYnNlcnZlcih2YWx1ZSkgJiYgU3Vic2NyaXB0aW9uXzEuaXNTdWJzY3JpcHRpb24odmFsdWUpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9ic2VydmFibGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm9wZXJhdGUgPSBleHBvcnRzLmhhc0xpZnQgPSB2b2lkIDA7XG52YXIgaXNGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4vaXNGdW5jdGlvblwiKTtcbmZ1bmN0aW9uIGhhc0xpZnQoc291cmNlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHNvdXJjZSA9PT0gbnVsbCB8fCBzb3VyY2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNvdXJjZS5saWZ0KTtcbn1cbmV4cG9ydHMuaGFzTGlmdCA9IGhhc0xpZnQ7XG5mdW5jdGlvbiBvcGVyYXRlKGluaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICBpZiAoaGFzTGlmdChzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLmxpZnQoZnVuY3Rpb24gKGxpZnRlZFNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbml0KGxpZnRlZFNvdXJjZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlJyk7XG4gICAgfTtcbn1cbmV4cG9ydHMub3BlcmF0ZSA9IG9wZXJhdGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saWZ0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT3BlcmF0b3JTdWJzY3JpYmVyID0gZXhwb3J0cy5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgPSB2b2lkIDA7XG52YXIgU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4uL1N1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSkge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpO1xufVxuZXhwb3J0cy5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgPSBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXI7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3BlcmF0b3JTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplLCBzaG91bGRVbnN1YnNjcmliZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7XG4gICAgICAgIF90aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7XG4gICAgICAgIF90aGlzLl9uZXh0ID0gb25OZXh0XG4gICAgICAgICAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX25leHQ7XG4gICAgICAgIF90aGlzLl9lcnJvciA9IG9uRXJyb3JcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fZXJyb3I7XG4gICAgICAgIF90aGlzLl9jb21wbGV0ZSA9IG9uQ29tcGxldGVcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3BlcmF0b3JTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICAgICAgICB2YXIgY2xvc2VkXzEgPSB0aGlzLmNsb3NlZDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICFjbG9zZWRfMSAmJiAoKF9hID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPcGVyYXRvclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXJfMS5TdWJzY3JpYmVyKSk7XG5leHBvcnRzLk9wZXJhdG9yU3Vic2NyaWJlciA9IE9wZXJhdG9yU3Vic2NyaWJlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9wZXJhdG9yU3Vic2NyaWJlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVmQ291bnQgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIHJlZkNvdW50KCkge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBjb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgc291cmNlLl9yZWZDb3VudCsrO1xuICAgICAgICB2YXIgcmVmQ291bnRlciA9IE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXNvdXJjZSB8fCBzb3VyY2UuX3JlZkNvdW50IDw9IDAgfHwgMCA8IC0tc291cmNlLl9yZWZDb3VudCkge1xuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBzaGFyZWRDb25uZWN0aW9uID0gc291cmNlLl9jb25uZWN0aW9uO1xuICAgICAgICAgICAgdmFyIGNvbm4gPSBjb25uZWN0aW9uO1xuICAgICAgICAgICAgY29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgICBpZiAoc2hhcmVkQ29ubmVjdGlvbiAmJiAoIWNvbm4gfHwgc2hhcmVkQ29ubmVjdGlvbiA9PT0gY29ubikpIHtcbiAgICAgICAgICAgICAgICBzaGFyZWRDb25uZWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHJlZkNvdW50ZXIpO1xuICAgICAgICBpZiAoIXJlZkNvdW50ZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICBjb25uZWN0aW9uID0gc291cmNlLmNvbm5lY3QoKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5yZWZDb3VudCA9IHJlZkNvdW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVmQ291bnQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db25uZWN0YWJsZU9ic2VydmFibGUgPSB2b2lkIDA7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL09ic2VydmFibGVcIik7XG52YXIgU3Vic2NyaXB0aW9uXzEgPSByZXF1aXJlKFwiLi4vU3Vic2NyaXB0aW9uXCIpO1xudmFyIHJlZkNvdW50XzEgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzL3JlZkNvdW50XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4uL29wZXJhdG9ycy9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBDb25uZWN0YWJsZU9ic2VydmFibGUgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDb25uZWN0YWJsZU9ic2VydmFibGUsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ29ubmVjdGFibGVPYnNlcnZhYmxlKHNvdXJjZSwgc3ViamVjdEZhY3RvcnkpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICBfdGhpcy5zdWJqZWN0RmFjdG9yeSA9IHN1YmplY3RGYWN0b3J5O1xuICAgICAgICBfdGhpcy5fc3ViamVjdCA9IG51bGw7XG4gICAgICAgIF90aGlzLl9yZWZDb3VudCA9IDA7XG4gICAgICAgIF90aGlzLl9jb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgaWYgKGxpZnRfMS5oYXNMaWZ0KHNvdXJjZSkpIHtcbiAgICAgICAgICAgIF90aGlzLmxpZnQgPSBzb3VyY2UubGlmdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBDb25uZWN0YWJsZU9ic2VydmFibGUucHJvdG90eXBlLmdldFN1YmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gdGhpcy5fc3ViamVjdDtcbiAgICAgICAgaWYgKCFzdWJqZWN0IHx8IHN1YmplY3QuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJqZWN0ID0gdGhpcy5zdWJqZWN0RmFjdG9yeSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zdWJqZWN0O1xuICAgIH07XG4gICAgQ29ubmVjdGFibGVPYnNlcnZhYmxlLnByb3RvdHlwZS5fdGVhcmRvd24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX3JlZkNvdW50ID0gMDtcbiAgICAgICAgdmFyIF9jb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvbjtcbiAgICAgICAgdGhpcy5fc3ViamVjdCA9IHRoaXMuX2Nvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICBfY29ubmVjdGlvbiA9PT0gbnVsbCB8fCBfY29ubmVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Nvbm5lY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGNvbm5lY3Rpb24gPSB0aGlzLl9jb25uZWN0aW9uO1xuICAgICAgICBpZiAoIWNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbm5lY3Rpb24gPSB0aGlzLl9jb25uZWN0aW9uID0gbmV3IFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgdmFyIHN1YmplY3RfMSA9IHRoaXMuZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgY29ubmVjdGlvbi5hZGQodGhpcy5zb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJqZWN0XzEsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLl90ZWFyZG93bigpO1xuICAgICAgICAgICAgICAgIHN1YmplY3RfMS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIF90aGlzLl90ZWFyZG93bigpO1xuICAgICAgICAgICAgICAgIHN1YmplY3RfMS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuX3RlYXJkb3duKCk7IH0pKSk7XG4gICAgICAgICAgICBpZiAoY29ubmVjdGlvbi5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uID0gU3Vic2NyaXB0aW9uXzEuU3Vic2NyaXB0aW9uLkVNUFRZO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb25uZWN0aW9uO1xuICAgIH07XG4gICAgQ29ubmVjdGFibGVPYnNlcnZhYmxlLnByb3RvdHlwZS5yZWZDb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHJlZkNvdW50XzEucmVmQ291bnQoKSh0aGlzKTtcbiAgICB9O1xuICAgIHJldHVybiBDb25uZWN0YWJsZU9ic2VydmFibGU7XG59KE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKSk7XG5leHBvcnRzLkNvbm5lY3RhYmxlT2JzZXJ2YWJsZSA9IENvbm5lY3RhYmxlT2JzZXJ2YWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNvbm5lY3RhYmxlT2JzZXJ2YWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlciA9IHZvaWQgMDtcbmV4cG9ydHMucGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlciA9IHtcbiAgICBub3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChleHBvcnRzLnBlcmZvcm1hbmNlVGltZXN0YW1wUHJvdmlkZXIuZGVsZWdhdGUgfHwgcGVyZm9ybWFuY2UpLm5vdygpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxuICAgICAgICB0b1tqXSA9IGZyb21baV07XG4gICAgcmV0dXJuIHRvO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYW5pbWF0aW9uRnJhbWVQcm92aWRlciA9IHZvaWQgMDtcbnZhciBTdWJzY3JpcHRpb25fMSA9IHJlcXVpcmUoXCIuLi9TdWJzY3JpcHRpb25cIik7XG5leHBvcnRzLmFuaW1hdGlvbkZyYW1lUHJvdmlkZXIgPSB7XG4gICAgc2NoZWR1bGU6IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVxdWVzdCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZTtcbiAgICAgICAgdmFyIGNhbmNlbCA9IGNhbmNlbEFuaW1hdGlvbkZyYW1lO1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBleHBvcnRzLmFuaW1hdGlvbkZyYW1lUHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgICAgcmVxdWVzdCA9IGRlbGVnYXRlLnJlcXVlc3RBbmltYXRpb25GcmFtZTtcbiAgICAgICAgICAgIGNhbmNlbCA9IGRlbGVnYXRlLmNhbmNlbEFuaW1hdGlvbkZyYW1lO1xuICAgICAgICB9XG4gICAgICAgIHZhciBoYW5kbGUgPSByZXF1ZXN0KGZ1bmN0aW9uICh0aW1lc3RhbXApIHtcbiAgICAgICAgICAgIGNhbmNlbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNhbGxiYWNrKHRpbWVzdGFtcCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbihmdW5jdGlvbiAoKSB7IHJldHVybiBjYW5jZWwgPT09IG51bGwgfHwgY2FuY2VsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjYW5jZWwoaGFuZGxlKTsgfSk7XG4gICAgfSxcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsZWdhdGUgPSBleHBvcnRzLmFuaW1hdGlvbkZyYW1lUHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHx8IHJlcXVlc3RBbmltYXRpb25GcmFtZSkuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRlbGVnYXRlID0gZXhwb3J0cy5hbmltYXRpb25GcmFtZVByb3ZpZGVyLmRlbGVnYXRlO1xuICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2FuY2VsQW5pbWF0aW9uRnJhbWUpIHx8IGNhbmNlbEFuaW1hdGlvbkZyYW1lKS5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbmltYXRpb25GcmFtZVByb3ZpZGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hbmltYXRpb25GcmFtZXMgPSB2b2lkIDA7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uLy4uL09ic2VydmFibGVcIik7XG52YXIgcGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlcl8xID0gcmVxdWlyZShcIi4uLy4uL3NjaGVkdWxlci9wZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyXCIpO1xudmFyIGFuaW1hdGlvbkZyYW1lUHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuLi8uLi9zY2hlZHVsZXIvYW5pbWF0aW9uRnJhbWVQcm92aWRlclwiKTtcbmZ1bmN0aW9uIGFuaW1hdGlvbkZyYW1lcyh0aW1lc3RhbXBQcm92aWRlcikge1xuICAgIHJldHVybiB0aW1lc3RhbXBQcm92aWRlciA/IGFuaW1hdGlvbkZyYW1lc0ZhY3RvcnkodGltZXN0YW1wUHJvdmlkZXIpIDogREVGQVVMVF9BTklNQVRJT05fRlJBTUVTO1xufVxuZXhwb3J0cy5hbmltYXRpb25GcmFtZXMgPSBhbmltYXRpb25GcmFtZXM7XG5mdW5jdGlvbiBhbmltYXRpb25GcmFtZXNGYWN0b3J5KHRpbWVzdGFtcFByb3ZpZGVyKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgcHJvdmlkZXIgPSB0aW1lc3RhbXBQcm92aWRlciB8fCBwZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyXzEucGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlcjtcbiAgICAgICAgdmFyIHN0YXJ0ID0gcHJvdmlkZXIubm93KCk7XG4gICAgICAgIHZhciBpZCA9IDA7XG4gICAgICAgIHZhciBydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBhbmltYXRpb25GcmFtZVByb3ZpZGVyXzEuYW5pbWF0aW9uRnJhbWVQcm92aWRlci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKHRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICBpZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBub3cgPSBwcm92aWRlci5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wUHJvdmlkZXIgPyBub3cgOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkOiBub3cgLSBzdGFydCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJ1bigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBydW4oKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbkZyYW1lUHJvdmlkZXJfMS5hbmltYXRpb25GcmFtZVByb3ZpZGVyLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbnZhciBERUZBVUxUX0FOSU1BVElPTl9GUkFNRVMgPSBhbmltYXRpb25GcmFtZXNGYWN0b3J5KCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbmltYXRpb25GcmFtZXMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gdm9pZCAwO1xudmFyIGNyZWF0ZUVycm9yQ2xhc3NfMSA9IHJlcXVpcmUoXCIuL2NyZWF0ZUVycm9yQ2xhc3NcIik7XG5leHBvcnRzLk9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzc18xLmNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBPYmplY3RVbnN1YnNjcmliZWRFcnJvckltcGwoKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ09iamVjdFVuc3Vic2NyaWJlZEVycm9yJztcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ29iamVjdCB1bnN1YnNjcmliZWQnO1xuICAgIH07XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9iamVjdFVuc3Vic2NyaWJlZEVycm9yLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX3ZhbHVlcyA9ICh0aGlzICYmIHRoaXMuX192YWx1ZXMpIHx8IGZ1bmN0aW9uKG8pIHtcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQW5vbnltb3VzU3ViamVjdCA9IGV4cG9ydHMuU3ViamVjdCA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi9PYnNlcnZhYmxlXCIpO1xudmFyIFN1YnNjcmlwdGlvbl8xID0gcmVxdWlyZShcIi4vU3Vic2NyaXB0aW9uXCIpO1xudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yXzEgPSByZXF1aXJlKFwiLi91dGlsL09iamVjdFVuc3Vic2NyaWJlZEVycm9yXCIpO1xudmFyIGFyclJlbW92ZV8xID0gcmVxdWlyZShcIi4vdXRpbC9hcnJSZW1vdmVcIik7XG52YXIgZXJyb3JDb250ZXh0XzEgPSByZXF1aXJlKFwiLi91dGlsL2Vycm9yQ29udGV4dFwiKTtcbnZhciBTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJqZWN0KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIF90aGlzLm9ic2VydmVycyA9IFtdO1xuICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YmplY3QucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSBuZXcgQW5vbnltb3VzU3ViamVjdCh0aGlzLCB0aGlzKTtcbiAgICAgICAgc3ViamVjdC5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPYmplY3RVbnN1YnNjcmliZWRFcnJvcl8xLk9iamVjdFVuc3Vic2NyaWJlZEVycm9yKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0XzEuZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKF90aGlzLm9ic2VydmVycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9iID0gX192YWx1ZXMoX3RoaXMuY3VycmVudE9ic2VydmVycyksIF9jID0gX2IubmV4dCgpOyAhX2MuZG9uZTsgX2MgPSBfYi5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlciA9IF9jLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfYyAmJiAhX2MuZG9uZSAmJiAoX2EgPSBfYi5yZXR1cm4pKSBfYS5jYWxsKF9iKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHRfMS5lcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIF90aGlzLnRocm93bkVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dF8xLmVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3ViamVjdC5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5vYnNlcnZlcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZW5ndGgpID4gMDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCBzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbm5lclN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZCwgb2JzZXJ2ZXJzID0gX2Eub2JzZXJ2ZXJzO1xuICAgICAgICBpZiAoaGFzRXJyb3IgfHwgaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gU3Vic2NyaXB0aW9uXzEuRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIG9ic2VydmVycy5wdXNoKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgICAgIGFyclJlbW92ZV8xLmFyclJlbW92ZShvYnNlcnZlcnMsIHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgdGhyb3duRXJyb3IgPSBfYS50aHJvd25FcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkO1xuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IodGhyb3duRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBTdWJqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKTtcbiAgICB9O1xuICAgIHJldHVybiBTdWJqZWN0O1xufShPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZSkpO1xuZXhwb3J0cy5TdWJqZWN0ID0gU3ViamVjdDtcbnZhciBBbm9ueW1vdXNTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQW5vbnltb3VzU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5leHQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZXJyKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29tcGxldGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcikpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFN1YnNjcmlwdGlvbl8xLkVNUFRZX1NVQlNDUklQVElPTjtcbiAgICB9O1xuICAgIHJldHVybiBBbm9ueW1vdXNTdWJqZWN0O1xufShTdWJqZWN0KSk7XG5leHBvcnRzLkFub255bW91c1N1YmplY3QgPSBBbm9ueW1vdXNTdWJqZWN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3ViamVjdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkJlaGF2aW9yU3ViamVjdCA9IHZvaWQgMDtcbnZhciBTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi9TdWJqZWN0XCIpO1xudmFyIEJlaGF2aW9yU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEJlaGF2aW9yU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBCZWhhdmlvclN1YmplY3QoX3ZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLl92YWx1ZSA9IF92YWx1ZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmVoYXZpb3JTdWJqZWN0LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEJlaGF2aW9yU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSBfc3VwZXIucHJvdG90eXBlLl9zdWJzY3JpYmUuY2FsbCh0aGlzLCBzdWJzY3JpYmVyKTtcbiAgICAgICAgIXN1YnNjcmlwdGlvbi5jbG9zZWQgJiYgc3Vic2NyaWJlci5uZXh0KHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgICB9O1xuICAgIEJlaGF2aW9yU3ViamVjdC5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIHRocm93bkVycm9yID0gX2EudGhyb3duRXJyb3IsIF92YWx1ZSA9IF9hLl92YWx1ZTtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyB0aHJvd25FcnJvcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHJldHVybiBfdmFsdWU7XG4gICAgfTtcbiAgICBCZWhhdmlvclN1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcywgKHRoaXMuX3ZhbHVlID0gdmFsdWUpKTtcbiAgICB9O1xuICAgIHJldHVybiBCZWhhdmlvclN1YmplY3Q7XG59KFN1YmplY3RfMS5TdWJqZWN0KSk7XG5leHBvcnRzLkJlaGF2aW9yU3ViamVjdCA9IEJlaGF2aW9yU3ViamVjdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUJlaGF2aW9yU3ViamVjdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGF0ZVRpbWVzdGFtcFByb3ZpZGVyID0gdm9pZCAwO1xuZXhwb3J0cy5kYXRlVGltZXN0YW1wUHJvdmlkZXIgPSB7XG4gICAgbm93OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoZXhwb3J0cy5kYXRlVGltZXN0YW1wUHJvdmlkZXIuZGVsZWdhdGUgfHwgRGF0ZSkubm93KCk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGVUaW1lc3RhbXBQcm92aWRlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlcGxheVN1YmplY3QgPSB2b2lkIDA7XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZShcIi4vU3ViamVjdFwiKTtcbnZhciBkYXRlVGltZXN0YW1wUHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuL3NjaGVkdWxlci9kYXRlVGltZXN0YW1wUHJvdmlkZXJcIik7XG52YXIgUmVwbGF5U3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFJlcGxheVN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUmVwbGF5U3ViamVjdChfYnVmZmVyU2l6ZSwgX3dpbmRvd1RpbWUsIF90aW1lc3RhbXBQcm92aWRlcikge1xuICAgICAgICBpZiAoX2J1ZmZlclNpemUgPT09IHZvaWQgMCkgeyBfYnVmZmVyU2l6ZSA9IEluZmluaXR5OyB9XG4gICAgICAgIGlmIChfd2luZG93VGltZSA9PT0gdm9pZCAwKSB7IF93aW5kb3dUaW1lID0gSW5maW5pdHk7IH1cbiAgICAgICAgaWYgKF90aW1lc3RhbXBQcm92aWRlciA9PT0gdm9pZCAwKSB7IF90aW1lc3RhbXBQcm92aWRlciA9IGRhdGVUaW1lc3RhbXBQcm92aWRlcl8xLmRhdGVUaW1lc3RhbXBQcm92aWRlcjsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5fYnVmZmVyU2l6ZSA9IF9idWZmZXJTaXplO1xuICAgICAgICBfdGhpcy5fd2luZG93VGltZSA9IF93aW5kb3dUaW1lO1xuICAgICAgICBfdGhpcy5fdGltZXN0YW1wUHJvdmlkZXIgPSBfdGltZXN0YW1wUHJvdmlkZXI7XG4gICAgICAgIF90aGlzLl9idWZmZXIgPSBbXTtcbiAgICAgICAgX3RoaXMuX2luZmluaXRlVGltZVdpbmRvdyA9IHRydWU7XG4gICAgICAgIF90aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3cgPSBfd2luZG93VGltZSA9PT0gSW5maW5pdHk7XG4gICAgICAgIF90aGlzLl9idWZmZXJTaXplID0gTWF0aC5tYXgoMSwgX2J1ZmZlclNpemUpO1xuICAgICAgICBfdGhpcy5fd2luZG93VGltZSA9IE1hdGgubWF4KDEsIF93aW5kb3dUaW1lKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBSZXBsYXlTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZCwgX2J1ZmZlciA9IF9hLl9idWZmZXIsIF9pbmZpbml0ZVRpbWVXaW5kb3cgPSBfYS5faW5maW5pdGVUaW1lV2luZG93LCBfdGltZXN0YW1wUHJvdmlkZXIgPSBfYS5fdGltZXN0YW1wUHJvdmlkZXIsIF93aW5kb3dUaW1lID0gX2EuX3dpbmRvd1RpbWU7XG4gICAgICAgIGlmICghaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBfYnVmZmVyLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgIV9pbmZpbml0ZVRpbWVXaW5kb3cgJiYgX2J1ZmZlci5wdXNoKF90aW1lc3RhbXBQcm92aWRlci5ub3coKSArIF93aW5kb3dUaW1lKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90cmltQnVmZmVyKCk7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICB9O1xuICAgIFJlcGxheVN1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHRoaXMuX3RyaW1CdWZmZXIoKTtcbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBfaW5maW5pdGVUaW1lV2luZG93ID0gX2EuX2luZmluaXRlVGltZVdpbmRvdywgX2J1ZmZlciA9IF9hLl9idWZmZXI7XG4gICAgICAgIHZhciBjb3B5ID0gX2J1ZmZlci5zbGljZSgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvcHkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSArPSBfaW5maW5pdGVUaW1lV2luZG93ID8gMSA6IDIpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChjb3B5W2ldKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICAgIH07XG4gICAgUmVwbGF5U3ViamVjdC5wcm90b3R5cGUuX3RyaW1CdWZmZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIF9idWZmZXJTaXplID0gX2EuX2J1ZmZlclNpemUsIF90aW1lc3RhbXBQcm92aWRlciA9IF9hLl90aW1lc3RhbXBQcm92aWRlciwgX2J1ZmZlciA9IF9hLl9idWZmZXIsIF9pbmZpbml0ZVRpbWVXaW5kb3cgPSBfYS5faW5maW5pdGVUaW1lV2luZG93O1xuICAgICAgICB2YXIgYWRqdXN0ZWRCdWZmZXJTaXplID0gKF9pbmZpbml0ZVRpbWVXaW5kb3cgPyAxIDogMikgKiBfYnVmZmVyU2l6ZTtcbiAgICAgICAgX2J1ZmZlclNpemUgPCBJbmZpbml0eSAmJiBhZGp1c3RlZEJ1ZmZlclNpemUgPCBfYnVmZmVyLmxlbmd0aCAmJiBfYnVmZmVyLnNwbGljZSgwLCBfYnVmZmVyLmxlbmd0aCAtIGFkanVzdGVkQnVmZmVyU2l6ZSk7XG4gICAgICAgIGlmICghX2luZmluaXRlVGltZVdpbmRvdykge1xuICAgICAgICAgICAgdmFyIG5vdyA9IF90aW1lc3RhbXBQcm92aWRlci5ub3coKTtcbiAgICAgICAgICAgIHZhciBsYXN0ID0gMDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgX2J1ZmZlci5sZW5ndGggJiYgX2J1ZmZlcltpXSA8PSBub3c7IGkgKz0gMikge1xuICAgICAgICAgICAgICAgIGxhc3QgPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdCAmJiBfYnVmZmVyLnNwbGljZSgwLCBsYXN0ICsgMSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBSZXBsYXlTdWJqZWN0O1xufShTdWJqZWN0XzEuU3ViamVjdCkpO1xuZXhwb3J0cy5SZXBsYXlTdWJqZWN0ID0gUmVwbGF5U3ViamVjdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlcGxheVN1YmplY3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Bc3luY1N1YmplY3QgPSB2b2lkIDA7XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZShcIi4vU3ViamVjdFwiKTtcbnZhciBBc3luY1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY1N1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNTdWJqZWN0KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuX3ZhbHVlID0gbnVsbDtcbiAgICAgICAgX3RoaXMuX2hhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIF90aGlzLl9pc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNTdWJqZWN0LnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIF9oYXNWYWx1ZSA9IF9hLl9oYXNWYWx1ZSwgX3ZhbHVlID0gX2EuX3ZhbHVlLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQsIF9pc0NvbXBsZXRlID0gX2EuX2lzQ29tcGxldGU7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9wcGVkIHx8IF9pc0NvbXBsZXRlKSB7XG4gICAgICAgICAgICBfaGFzVmFsdWUgJiYgc3Vic2NyaWJlci5uZXh0KF92YWx1ZSk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5faGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY1N1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBfaGFzVmFsdWUgPSBfYS5faGFzVmFsdWUsIF92YWx1ZSA9IF9hLl92YWx1ZSwgX2lzQ29tcGxldGUgPSBfYS5faXNDb21wbGV0ZTtcbiAgICAgICAgaWYgKCFfaXNDb21wbGV0ZSkge1xuICAgICAgICAgICAgdGhpcy5faXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICBfaGFzVmFsdWUgJiYgX3N1cGVyLnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcywgX3ZhbHVlKTtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUuY29tcGxldGUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jU3ViamVjdDtcbn0oU3ViamVjdF8xLlN1YmplY3QpKTtcbmV4cG9ydHMuQXN5bmNTdWJqZWN0ID0gQXN5bmNTdWJqZWN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXN5bmNTdWJqZWN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQWN0aW9uID0gdm9pZCAwO1xudmFyIFN1YnNjcmlwdGlvbl8xID0gcmVxdWlyZShcIi4uL1N1YnNjcmlwdGlvblwiKTtcbnZhciBBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICB9XG4gICAgQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEFjdGlvbjtcbn0oU3Vic2NyaXB0aW9uXzEuU3Vic2NyaXB0aW9uKSk7XG5leHBvcnRzLkFjdGlvbiA9IEFjdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFjdGlvbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmludGVydmFsUHJvdmlkZXIgPSB2b2lkIDA7XG5leHBvcnRzLmludGVydmFsUHJvdmlkZXIgPSB7XG4gICAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGV4cG9ydHMuaW50ZXJ2YWxQcm92aWRlci5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5zZXRJbnRlcnZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLnNldEludGVydmFsLmFwcGx5KGRlbGVnYXRlLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBleHBvcnRzLmludGVydmFsUHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhckludGVydmFsKSB8fCBjbGVhckludGVydmFsKShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcnZhbFByb3ZpZGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXN5bmNBY3Rpb24gPSB2b2lkIDA7XG52YXIgQWN0aW9uXzEgPSByZXF1aXJlKFwiLi9BY3Rpb25cIik7XG52YXIgaW50ZXJ2YWxQcm92aWRlcl8xID0gcmVxdWlyZShcIi4vaW50ZXJ2YWxQcm92aWRlclwiKTtcbnZhciBhcnJSZW1vdmVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyclJlbW92ZVwiKTtcbnZhciBBc3luY0FjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgX3RoaXMud29yayA9IHdvcms7XG4gICAgICAgIF90aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB2YXIgaWQgPSB0aGlzLmlkO1xuICAgICAgICB2YXIgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWxheSA9IGRlbGF5O1xuICAgICAgICB0aGlzLmlkID0gKF9hID0gdGhpcy5pZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzY2hlZHVsZXIsIHRoaXMuaWQsIGRlbGF5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBfaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gaW50ZXJ2YWxQcm92aWRlcl8xLmludGVydmFsUHJvdmlkZXIuc2V0SW50ZXJ2YWwoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCB0aGlzKSwgZGVsYXkpO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24gKF9zY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gZGVsYXkgJiYgdGhpcy5wZW5kaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnRlcnZhbFByb3ZpZGVyXzEuaW50ZXJ2YWxQcm92aWRlci5jbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLl9leGVjdXRlKHN0YXRlLCBkZWxheSk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgX2RlbGF5KSB7XG4gICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvclZhbHVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy53b3JrKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICBlcnJvclZhbHVlID0gZSA/IGUgOiBuZXcgRXJyb3IoJ1NjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JlZCkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yVmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcywgaWQgPSBfYS5pZCwgc2NoZWR1bGVyID0gX2Euc2NoZWR1bGVyO1xuICAgICAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGFyclJlbW92ZV8xLmFyclJlbW92ZShhY3Rpb25zLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jQWN0aW9uO1xufShBY3Rpb25fMS5BY3Rpb24pKTtcbmV4cG9ydHMuQXN5bmNBY3Rpb24gPSBBc3luY0FjdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFzeW5jQWN0aW9uLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5UZXN0VG9vbHMgPSBleHBvcnRzLkltbWVkaWF0ZSA9IHZvaWQgMDtcbnZhciBuZXh0SGFuZGxlID0gMTtcbnZhciByZXNvbHZlZDtcbnZhciBhY3RpdmVIYW5kbGVzID0ge307XG5mdW5jdGlvbiBmaW5kQW5kQ2xlYXJIYW5kbGUoaGFuZGxlKSB7XG4gICAgaWYgKGhhbmRsZSBpbiBhY3RpdmVIYW5kbGVzKSB7XG4gICAgICAgIGRlbGV0ZSBhY3RpdmVIYW5kbGVzW2hhbmRsZV07XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLkltbWVkaWF0ZSA9IHtcbiAgICBzZXRJbW1lZGlhdGU6IGZ1bmN0aW9uIChjYikge1xuICAgICAgICB2YXIgaGFuZGxlID0gbmV4dEhhbmRsZSsrO1xuICAgICAgICBhY3RpdmVIYW5kbGVzW2hhbmRsZV0gPSB0cnVlO1xuICAgICAgICBpZiAoIXJlc29sdmVkKSB7XG4gICAgICAgICAgICByZXNvbHZlZCA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmVkLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gZmluZEFuZENsZWFySGFuZGxlKGhhbmRsZSkgJiYgY2IoKTsgfSk7XG4gICAgICAgIHJldHVybiBoYW5kbGU7XG4gICAgfSxcbiAgICBjbGVhckltbWVkaWF0ZTogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICBmaW5kQW5kQ2xlYXJIYW5kbGUoaGFuZGxlKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuVGVzdFRvb2xzID0ge1xuICAgIHBlbmRpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGFjdGl2ZUhhbmRsZXMpLmxlbmd0aDtcbiAgICB9XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SW1tZWRpYXRlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxuICAgICAgICB0b1tqXSA9IGZyb21baV07XG4gICAgcmV0dXJuIHRvO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaW1tZWRpYXRlUHJvdmlkZXIgPSB2b2lkIDA7XG52YXIgSW1tZWRpYXRlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9JbW1lZGlhdGVcIik7XG52YXIgc2V0SW1tZWRpYXRlID0gSW1tZWRpYXRlXzEuSW1tZWRpYXRlLnNldEltbWVkaWF0ZSwgY2xlYXJJbW1lZGlhdGUgPSBJbW1lZGlhdGVfMS5JbW1lZGlhdGUuY2xlYXJJbW1lZGlhdGU7XG5leHBvcnRzLmltbWVkaWF0ZVByb3ZpZGVyID0ge1xuICAgIHNldEltbWVkaWF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGV4cG9ydHMuaW1tZWRpYXRlUHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5zZXRJbW1lZGlhdGUpIHx8IHNldEltbWVkaWF0ZSkuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFySW1tZWRpYXRlOiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGV4cG9ydHMuaW1tZWRpYXRlUHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhckltbWVkaWF0ZSkgfHwgY2xlYXJJbW1lZGlhdGUpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWltbWVkaWF0ZVByb3ZpZGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXNhcEFjdGlvbiA9IHZvaWQgMDtcbnZhciBBc3luY0FjdGlvbl8xID0gcmVxdWlyZShcIi4vQXN5bmNBY3Rpb25cIik7XG52YXIgaW1tZWRpYXRlUHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuL2ltbWVkaWF0ZVByb3ZpZGVyXCIpO1xudmFyIEFzYXBBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc2FwQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzYXBBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc2FwQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9PSBudWxsICYmIGRlbGF5ID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgc2NoZWR1bGVyLmFjdGlvbnMucHVzaCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5fc2NoZWR1bGVkIHx8IChzY2hlZHVsZXIuX3NjaGVkdWxlZCA9IGltbWVkaWF0ZVByb3ZpZGVyXzEuaW1tZWRpYXRlUHJvdmlkZXIuc2V0SW1tZWRpYXRlKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdW5kZWZpbmVkKSkpO1xuICAgIH07XG4gICAgQXNhcEFjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9IG51bGwgPyBkZWxheSA+IDAgOiB0aGlzLmRlbGF5ID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgaWYgKGlkICE9IG51bGwgJiYgKChfYSA9IGFjdGlvbnNbYWN0aW9ucy5sZW5ndGggLSAxXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmlkKSAhPT0gaWQpIHtcbiAgICAgICAgICAgIGltbWVkaWF0ZVByb3ZpZGVyXzEuaW1tZWRpYXRlUHJvdmlkZXIuY2xlYXJJbW1lZGlhdGUoaWQpO1xuICAgICAgICAgICAgaWYgKHNjaGVkdWxlci5fc2NoZWR1bGVkID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlci5fc2NoZWR1bGVkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICByZXR1cm4gQXNhcEFjdGlvbjtcbn0oQXN5bmNBY3Rpb25fMS5Bc3luY0FjdGlvbikpO1xuZXhwb3J0cy5Bc2FwQWN0aW9uID0gQXNhcEFjdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFzYXBBY3Rpb24uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNjaGVkdWxlciA9IHZvaWQgMDtcbnZhciBkYXRlVGltZXN0YW1wUHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuL3NjaGVkdWxlci9kYXRlVGltZXN0YW1wUHJvdmlkZXJcIik7XG52YXIgU2NoZWR1bGVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTY2hlZHVsZXIoc2NoZWR1bGVyQWN0aW9uQ3Rvciwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHNjaGVkdWxlckFjdGlvbkN0b3I7XG4gICAgICAgIHRoaXMubm93ID0gbm93O1xuICAgIH1cbiAgICBTY2hlZHVsZXIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHdvcmssIGRlbGF5LCBzdGF0ZSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgd29yaykuc2NoZWR1bGUoc3RhdGUsIGRlbGF5KTtcbiAgICB9O1xuICAgIFNjaGVkdWxlci5ub3cgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXJfMS5kYXRlVGltZXN0YW1wUHJvdmlkZXIubm93O1xuICAgIHJldHVybiBTY2hlZHVsZXI7XG59KCkpO1xuZXhwb3J0cy5TY2hlZHVsZXIgPSBTY2hlZHVsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TY2hlZHVsZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Bc3luY1NjaGVkdWxlciA9IHZvaWQgMDtcbnZhciBTY2hlZHVsZXJfMSA9IHJlcXVpcmUoXCIuLi9TY2hlZHVsZXJcIik7XG52YXIgQXN5bmNTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY1NjaGVkdWxlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY1NjaGVkdWxlcihTY2hlZHVsZXJBY3Rpb24sIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyXzEuU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBTY2hlZHVsZXJBY3Rpb24sIG5vdykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuYWN0aW9ucyA9IFtdO1xuICAgICAgICBfdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNTY2hlZHVsZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoKGVycm9yID0gYWN0aW9uLmV4ZWN1dGUoYWN0aW9uLnN0YXRlLCBhY3Rpb24uZGVsYXkpKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY1NjaGVkdWxlcjtcbn0oU2NoZWR1bGVyXzEuU2NoZWR1bGVyKSk7XG5leHBvcnRzLkFzeW5jU2NoZWR1bGVyID0gQXN5bmNTY2hlZHVsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Bc3luY1NjaGVkdWxlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFzYXBTY2hlZHVsZXIgPSB2b2lkIDA7XG52YXIgQXN5bmNTY2hlZHVsZXJfMSA9IHJlcXVpcmUoXCIuL0FzeW5jU2NoZWR1bGVyXCIpO1xudmFyIEFzYXBTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc2FwU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzYXBTY2hlZHVsZXIoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgQXNhcFNjaGVkdWxlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgIHZhciBmbHVzaElkID0gdGhpcy5fc2NoZWR1bGVkO1xuICAgICAgICB0aGlzLl9zY2hlZHVsZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIGFjdGlvbiA9IGFjdGlvbiB8fCBhY3Rpb25zLnNoaWZ0KCk7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICgoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zWzBdKSAmJiBhY3Rpb24uaWQgPT09IGZsdXNoSWQgJiYgYWN0aW9ucy5zaGlmdCgpKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zWzBdKSAmJiBhY3Rpb24uaWQgPT09IGZsdXNoSWQgJiYgYWN0aW9ucy5zaGlmdCgpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzYXBTY2hlZHVsZXI7XG59KEFzeW5jU2NoZWR1bGVyXzEuQXN5bmNTY2hlZHVsZXIpKTtcbmV4cG9ydHMuQXNhcFNjaGVkdWxlciA9IEFzYXBTY2hlZHVsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Bc2FwU2NoZWR1bGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hc2FwID0gZXhwb3J0cy5hc2FwU2NoZWR1bGVyID0gdm9pZCAwO1xudmFyIEFzYXBBY3Rpb25fMSA9IHJlcXVpcmUoXCIuL0FzYXBBY3Rpb25cIik7XG52YXIgQXNhcFNjaGVkdWxlcl8xID0gcmVxdWlyZShcIi4vQXNhcFNjaGVkdWxlclwiKTtcbmV4cG9ydHMuYXNhcFNjaGVkdWxlciA9IG5ldyBBc2FwU2NoZWR1bGVyXzEuQXNhcFNjaGVkdWxlcihBc2FwQWN0aW9uXzEuQXNhcEFjdGlvbik7XG5leHBvcnRzLmFzYXAgPSBleHBvcnRzLmFzYXBTY2hlZHVsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hc2FwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hc3luYyA9IGV4cG9ydHMuYXN5bmNTY2hlZHVsZXIgPSB2b2lkIDA7XG52YXIgQXN5bmNBY3Rpb25fMSA9IHJlcXVpcmUoXCIuL0FzeW5jQWN0aW9uXCIpO1xudmFyIEFzeW5jU2NoZWR1bGVyXzEgPSByZXF1aXJlKFwiLi9Bc3luY1NjaGVkdWxlclwiKTtcbmV4cG9ydHMuYXN5bmNTY2hlZHVsZXIgPSBuZXcgQXN5bmNTY2hlZHVsZXJfMS5Bc3luY1NjaGVkdWxlcihBc3luY0FjdGlvbl8xLkFzeW5jQWN0aW9uKTtcbmV4cG9ydHMuYXN5bmMgPSBleHBvcnRzLmFzeW5jU2NoZWR1bGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXN5bmMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5RdWV1ZUFjdGlvbiA9IHZvaWQgMDtcbnZhciBBc3luY0FjdGlvbl8xID0gcmVxdWlyZShcIi4vQXN5bmNBY3Rpb25cIik7XG52YXIgUXVldWVBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhRdWV1ZUFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBRdWV1ZUFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLndvcmsgPSB3b3JrO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFF1ZXVlQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChkZWxheSA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnNjaGVkdWxlLmNhbGwodGhpcywgc3RhdGUsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZXIuZmx1c2godGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgUXVldWVBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHJldHVybiBkZWxheSA+IDAgfHwgdGhpcy5jbG9zZWQgPyBfc3VwZXIucHJvdG90eXBlLmV4ZWN1dGUuY2FsbCh0aGlzLCBzdGF0ZSwgZGVsYXkpIDogdGhpcy5fZXhlY3V0ZShzdGF0ZSwgZGVsYXkpO1xuICAgIH07XG4gICAgUXVldWVBY3Rpb24ucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAoKGRlbGF5ICE9IG51bGwgJiYgZGVsYXkgPiAwKSB8fCAoZGVsYXkgPT0gbnVsbCAmJiB0aGlzLmRlbGF5ID4gMCkpIHtcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkLmNhbGwodGhpcywgc2NoZWR1bGVyLCBpZCwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHNjaGVkdWxlci5mbHVzaCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfTtcbiAgICByZXR1cm4gUXVldWVBY3Rpb247XG59KEFzeW5jQWN0aW9uXzEuQXN5bmNBY3Rpb24pKTtcbmV4cG9ydHMuUXVldWVBY3Rpb24gPSBRdWV1ZUFjdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVF1ZXVlQWN0aW9uLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUXVldWVTY2hlZHVsZXIgPSB2b2lkIDA7XG52YXIgQXN5bmNTY2hlZHVsZXJfMSA9IHJlcXVpcmUoXCIuL0FzeW5jU2NoZWR1bGVyXCIpO1xudmFyIFF1ZXVlU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVldWVTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUXVldWVTY2hlZHVsZXIoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIFF1ZXVlU2NoZWR1bGVyO1xufShBc3luY1NjaGVkdWxlcl8xLkFzeW5jU2NoZWR1bGVyKSk7XG5leHBvcnRzLlF1ZXVlU2NoZWR1bGVyID0gUXVldWVTY2hlZHVsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1RdWV1ZVNjaGVkdWxlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucXVldWUgPSBleHBvcnRzLnF1ZXVlU2NoZWR1bGVyID0gdm9pZCAwO1xudmFyIFF1ZXVlQWN0aW9uXzEgPSByZXF1aXJlKFwiLi9RdWV1ZUFjdGlvblwiKTtcbnZhciBRdWV1ZVNjaGVkdWxlcl8xID0gcmVxdWlyZShcIi4vUXVldWVTY2hlZHVsZXJcIik7XG5leHBvcnRzLnF1ZXVlU2NoZWR1bGVyID0gbmV3IFF1ZXVlU2NoZWR1bGVyXzEuUXVldWVTY2hlZHVsZXIoUXVldWVBY3Rpb25fMS5RdWV1ZUFjdGlvbik7XG5leHBvcnRzLnF1ZXVlID0gZXhwb3J0cy5xdWV1ZVNjaGVkdWxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXF1ZXVlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQW5pbWF0aW9uRnJhbWVBY3Rpb24gPSB2b2lkIDA7XG52YXIgQXN5bmNBY3Rpb25fMSA9IHJlcXVpcmUoXCIuL0FzeW5jQWN0aW9uXCIpO1xudmFyIGFuaW1hdGlvbkZyYW1lUHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuL2FuaW1hdGlvbkZyYW1lUHJvdmlkZXJcIik7XG52YXIgQW5pbWF0aW9uRnJhbWVBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbmltYXRpb25GcmFtZUFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBbmltYXRpb25GcmFtZUFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLndvcmsgPSB3b3JrO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFuaW1hdGlvbkZyYW1lQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9PSBudWxsICYmIGRlbGF5ID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgc2NoZWR1bGVyLmFjdGlvbnMucHVzaCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5fc2NoZWR1bGVkIHx8IChzY2hlZHVsZXIuX3NjaGVkdWxlZCA9IGFuaW1hdGlvbkZyYW1lUHJvdmlkZXJfMS5hbmltYXRpb25GcmFtZVByb3ZpZGVyLnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7IHJldHVybiBzY2hlZHVsZXIuZmx1c2godW5kZWZpbmVkKTsgfSkpO1xuICAgIH07XG4gICAgQW5pbWF0aW9uRnJhbWVBY3Rpb24ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChkZWxheSAhPSBudWxsID8gZGVsYXkgPiAwIDogdGhpcy5kZWxheSA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkLmNhbGwodGhpcywgc2NoZWR1bGVyLCBpZCwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7XG4gICAgICAgIGlmIChpZCAhPSBudWxsICYmICgoX2EgPSBhY3Rpb25zW2FjdGlvbnMubGVuZ3RoIC0gMV0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pZCkgIT09IGlkKSB7XG4gICAgICAgICAgICBhbmltYXRpb25GcmFtZVByb3ZpZGVyXzEuYW5pbWF0aW9uRnJhbWVQcm92aWRlci5jYW5jZWxBbmltYXRpb25GcmFtZShpZCk7XG4gICAgICAgICAgICBzY2hlZHVsZXIuX3NjaGVkdWxlZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgcmV0dXJuIEFuaW1hdGlvbkZyYW1lQWN0aW9uO1xufShBc3luY0FjdGlvbl8xLkFzeW5jQWN0aW9uKSk7XG5leHBvcnRzLkFuaW1hdGlvbkZyYW1lQWN0aW9uID0gQW5pbWF0aW9uRnJhbWVBY3Rpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BbmltYXRpb25GcmFtZUFjdGlvbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyID0gdm9pZCAwO1xudmFyIEFzeW5jU2NoZWR1bGVyXzEgPSByZXF1aXJlKFwiLi9Bc3luY1NjaGVkdWxlclwiKTtcbnZhciBBbmltYXRpb25GcmFtZVNjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdmFyIGZsdXNoSWQgPSB0aGlzLl9zY2hlZHVsZWQ7XG4gICAgICAgIHRoaXMuX3NjaGVkdWxlZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgYWN0aW9uID0gYWN0aW9uIHx8IGFjdGlvbnMuc2hpZnQoKTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnNbMF0pICYmIGFjdGlvbi5pZCA9PT0gZmx1c2hJZCAmJiBhY3Rpb25zLnNoaWZ0KCkpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnNbMF0pICYmIGFjdGlvbi5pZCA9PT0gZmx1c2hJZCAmJiBhY3Rpb25zLnNoaWZ0KCkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXI7XG59KEFzeW5jU2NoZWR1bGVyXzEuQXN5bmNTY2hlZHVsZXIpKTtcbmV4cG9ydHMuQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgPSBBbmltYXRpb25GcmFtZVNjaGVkdWxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hbmltYXRpb25GcmFtZSA9IGV4cG9ydHMuYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgPSB2b2lkIDA7XG52YXIgQW5pbWF0aW9uRnJhbWVBY3Rpb25fMSA9IHJlcXVpcmUoXCIuL0FuaW1hdGlvbkZyYW1lQWN0aW9uXCIpO1xudmFyIEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyXzEgPSByZXF1aXJlKFwiLi9BbmltYXRpb25GcmFtZVNjaGVkdWxlclwiKTtcbmV4cG9ydHMuYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgPSBuZXcgQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXJfMS5BbmltYXRpb25GcmFtZVNjaGVkdWxlcihBbmltYXRpb25GcmFtZUFjdGlvbl8xLkFuaW1hdGlvbkZyYW1lQWN0aW9uKTtcbmV4cG9ydHMuYW5pbWF0aW9uRnJhbWUgPSBleHBvcnRzLmFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YW5pbWF0aW9uRnJhbWUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5WaXJ0dWFsQWN0aW9uID0gZXhwb3J0cy5WaXJ0dWFsVGltZVNjaGVkdWxlciA9IHZvaWQgMDtcbnZhciBBc3luY0FjdGlvbl8xID0gcmVxdWlyZShcIi4vQXN5bmNBY3Rpb25cIik7XG52YXIgU3Vic2NyaXB0aW9uXzEgPSByZXF1aXJlKFwiLi4vU3Vic2NyaXB0aW9uXCIpO1xudmFyIEFzeW5jU2NoZWR1bGVyXzEgPSByZXF1aXJlKFwiLi9Bc3luY1NjaGVkdWxlclwiKTtcbnZhciBWaXJ0dWFsVGltZVNjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFZpcnR1YWxUaW1lU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFZpcnR1YWxUaW1lU2NoZWR1bGVyKHNjaGVkdWxlckFjdGlvbkN0b3IsIG1heEZyYW1lcykge1xuICAgICAgICBpZiAoc2NoZWR1bGVyQWN0aW9uQ3RvciA9PT0gdm9pZCAwKSB7IHNjaGVkdWxlckFjdGlvbkN0b3IgPSBWaXJ0dWFsQWN0aW9uOyB9XG4gICAgICAgIGlmIChtYXhGcmFtZXMgPT09IHZvaWQgMCkgeyBtYXhGcmFtZXMgPSBJbmZpbml0eTsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXJBY3Rpb25DdG9yLCBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5mcmFtZTsgfSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMubWF4RnJhbWVzID0gbWF4RnJhbWVzO1xuICAgICAgICBfdGhpcy5mcmFtZSA9IDA7XG4gICAgICAgIF90aGlzLmluZGV4ID0gLTE7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgVmlydHVhbFRpbWVTY2hlZHVsZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBhY3Rpb25zID0gX2EuYWN0aW9ucywgbWF4RnJhbWVzID0gX2EubWF4RnJhbWVzO1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIHZhciBhY3Rpb247XG4gICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9uc1swXSkgJiYgYWN0aW9uLmRlbGF5IDw9IG1heEZyYW1lcykge1xuICAgICAgICAgICAgYWN0aW9ucy5zaGlmdCgpO1xuICAgICAgICAgICAgdGhpcy5mcmFtZSA9IGFjdGlvbi5kZWxheTtcbiAgICAgICAgICAgIGlmICgoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBWaXJ0dWFsVGltZVNjaGVkdWxlci5mcmFtZVRpbWVGYWN0b3IgPSAxMDtcbiAgICByZXR1cm4gVmlydHVhbFRpbWVTY2hlZHVsZXI7XG59KEFzeW5jU2NoZWR1bGVyXzEuQXN5bmNTY2hlZHVsZXIpKTtcbmV4cG9ydHMuVmlydHVhbFRpbWVTY2hlZHVsZXIgPSBWaXJ0dWFsVGltZVNjaGVkdWxlcjtcbnZhciBWaXJ0dWFsQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVmlydHVhbEFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBWaXJ0dWFsQWN0aW9uKHNjaGVkdWxlciwgd29yaywgaW5kZXgpIHtcbiAgICAgICAgaWYgKGluZGV4ID09PSB2b2lkIDApIHsgaW5kZXggPSAoc2NoZWR1bGVyLmluZGV4ICs9IDEpOyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgX3RoaXMuaW5kZXggPSBpbmRleDtcbiAgICAgICAgX3RoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgX3RoaXMuaW5kZXggPSBzY2hlZHVsZXIuaW5kZXggPSBpbmRleDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBWaXJ0dWFsQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUoZGVsYXkpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5zY2hlZHVsZS5jYWxsKHRoaXMsIHN0YXRlLCBkZWxheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIGFjdGlvbiA9IG5ldyBWaXJ0dWFsQWN0aW9uKHRoaXMuc2NoZWR1bGVyLCB0aGlzLndvcmspO1xuICAgICAgICAgICAgdGhpcy5hZGQoYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb24uc2NoZWR1bGUoc3RhdGUsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBTdWJzY3JpcHRpb25fMS5TdWJzY3JpcHRpb24uRU1QVFk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFZpcnR1YWxBY3Rpb24ucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICB0aGlzLmRlbGF5ID0gc2NoZWR1bGVyLmZyYW1lICsgZGVsYXk7XG4gICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7XG4gICAgICAgIGFjdGlvbnMucHVzaCh0aGlzKTtcbiAgICAgICAgYWN0aW9ucy5zb3J0KFZpcnR1YWxBY3Rpb24uc29ydEFjdGlvbnMpO1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9O1xuICAgIFZpcnR1YWxBY3Rpb24ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgVmlydHVhbEFjdGlvbi5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX2V4ZWN1dGUuY2FsbCh0aGlzLCBzdGF0ZSwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBWaXJ0dWFsQWN0aW9uLnNvcnRBY3Rpb25zID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgaWYgKGEuZGVsYXkgPT09IGIuZGVsYXkpIHtcbiAgICAgICAgICAgIGlmIChhLmluZGV4ID09PSBiLmluZGV4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhLmluZGV4ID4gYi5pbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGEuZGVsYXkgPiBiLmRlbGF5KSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFZpcnR1YWxBY3Rpb247XG59KEFzeW5jQWN0aW9uXzEuQXN5bmNBY3Rpb24pKTtcbmV4cG9ydHMuVmlydHVhbEFjdGlvbiA9IFZpcnR1YWxBY3Rpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WaXJ0dWFsVGltZVNjaGVkdWxlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZW1wdHkgPSBleHBvcnRzLkVNUFRZID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xuZXhwb3J0cy5FTVBUWSA9IG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikgeyByZXR1cm4gc3Vic2NyaWJlci5jb21wbGV0ZSgpOyB9KTtcbmZ1bmN0aW9uIGVtcHR5KHNjaGVkdWxlcikge1xuICAgIHJldHVybiBzY2hlZHVsZXIgPyBlbXB0eVNjaGVkdWxlZChzY2hlZHVsZXIpIDogZXhwb3J0cy5FTVBUWTtcbn1cbmV4cG9ydHMuZW1wdHkgPSBlbXB0eTtcbmZ1bmN0aW9uIGVtcHR5U2NoZWR1bGVkKHNjaGVkdWxlcikge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7IHJldHVybiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7IH0pOyB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVtcHR5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1NjaGVkdWxlciA9IHZvaWQgMDtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi9pc0Z1bmN0aW9uXCIpO1xuZnVuY3Rpb24gaXNTY2hlZHVsZXIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24odmFsdWUuc2NoZWR1bGUpO1xufVxuZXhwb3J0cy5pc1NjaGVkdWxlciA9IGlzU2NoZWR1bGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNTY2hlZHVsZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBvcE51bWJlciA9IGV4cG9ydHMucG9wU2NoZWR1bGVyID0gZXhwb3J0cy5wb3BSZXN1bHRTZWxlY3RvciA9IHZvaWQgMDtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi9pc0Z1bmN0aW9uXCIpO1xudmFyIGlzU2NoZWR1bGVyXzEgPSByZXF1aXJlKFwiLi9pc1NjaGVkdWxlclwiKTtcbmZ1bmN0aW9uIGxhc3QoYXJyKSB7XG4gICAgcmV0dXJuIGFyclthcnIubGVuZ3RoIC0gMV07XG59XG5mdW5jdGlvbiBwb3BSZXN1bHRTZWxlY3RvcihhcmdzKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKGxhc3QoYXJncykpID8gYXJncy5wb3AoKSA6IHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMucG9wUmVzdWx0U2VsZWN0b3IgPSBwb3BSZXN1bHRTZWxlY3RvcjtcbmZ1bmN0aW9uIHBvcFNjaGVkdWxlcihhcmdzKSB7XG4gICAgcmV0dXJuIGlzU2NoZWR1bGVyXzEuaXNTY2hlZHVsZXIobGFzdChhcmdzKSkgPyBhcmdzLnBvcCgpIDogdW5kZWZpbmVkO1xufVxuZXhwb3J0cy5wb3BTY2hlZHVsZXIgPSBwb3BTY2hlZHVsZXI7XG5mdW5jdGlvbiBwb3BOdW1iZXIoYXJncywgZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBsYXN0KGFyZ3MpID09PSAnbnVtYmVyJyA/IGFyZ3MucG9wKCkgOiBkZWZhdWx0VmFsdWU7XG59XG5leHBvcnRzLnBvcE51bWJlciA9IHBvcE51bWJlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFyZ3MuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzQXJyYXlMaWtlID0gdm9pZCAwO1xuZXhwb3J0cy5pc0FycmF5TGlrZSA9IChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCAmJiB0eXBlb2YgeC5sZW5ndGggPT09ICdudW1iZXInICYmIHR5cGVvZiB4ICE9PSAnZnVuY3Rpb24nOyB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzQXJyYXlMaWtlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1Byb21pc2UgPSB2b2lkIDA7XG52YXIgaXNGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4vaXNGdW5jdGlvblwiKTtcbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbih2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmFsdWUudGhlbik7XG59XG5leHBvcnRzLmlzUHJvbWlzZSA9IGlzUHJvbWlzZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzUHJvbWlzZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNJbnRlcm9wT2JzZXJ2YWJsZSA9IHZvaWQgMDtcbnZhciBvYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vc3ltYm9sL29ic2VydmFibGVcIik7XG52YXIgaXNGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4vaXNGdW5jdGlvblwiKTtcbmZ1bmN0aW9uIGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24oaW5wdXRbb2JzZXJ2YWJsZV8xLm9ic2VydmFibGVdKTtcbn1cbmV4cG9ydHMuaXNJbnRlcm9wT2JzZXJ2YWJsZSA9IGlzSW50ZXJvcE9ic2VydmFibGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0ludGVyb3BPYnNlcnZhYmxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0FzeW5jSXRlcmFibGUgPSB2b2lkIDA7XG52YXIgaXNGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4vaXNGdW5jdGlvblwiKTtcbmZ1bmN0aW9uIGlzQXN5bmNJdGVyYWJsZShvYmopIHtcbiAgICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5leHBvcnRzLmlzQXN5bmNJdGVyYWJsZSA9IGlzQXN5bmNJdGVyYWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzQXN5bmNJdGVyYWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IgPSB2b2lkIDA7XG5mdW5jdGlvbiBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgPyAnYW4gaW52YWxpZCBvYmplY3QnIDogXCInXCIgKyBpbnB1dCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuZXhwb3J0cy5jcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvciA9IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhyb3dVbm9ic2VydmFibGVFcnJvci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXRlcmF0b3IgPSBleHBvcnRzLmdldFN5bWJvbEl0ZXJhdG9yID0gdm9pZCAwO1xuZnVuY3Rpb24gZ2V0U3ltYm9sSXRlcmF0b3IoKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgIVN5bWJvbC5pdGVyYXRvcikge1xuICAgICAgICByZXR1cm4gJ0BAaXRlcmF0b3InO1xuICAgIH1cbiAgICByZXR1cm4gU3ltYm9sLml0ZXJhdG9yO1xufVxuZXhwb3J0cy5nZXRTeW1ib2xJdGVyYXRvciA9IGdldFN5bWJvbEl0ZXJhdG9yO1xuZXhwb3J0cy5pdGVyYXRvciA9IGdldFN5bWJvbEl0ZXJhdG9yKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pdGVyYXRvci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNJdGVyYWJsZSA9IHZvaWQgMDtcbnZhciBpdGVyYXRvcl8xID0gcmVxdWlyZShcIi4uL3N5bWJvbC9pdGVyYXRvclwiKTtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi9pc0Z1bmN0aW9uXCIpO1xuZnVuY3Rpb24gaXNJdGVyYWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbihpbnB1dCA9PT0gbnVsbCB8fCBpbnB1dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5wdXRbaXRlcmF0b3JfMS5pdGVyYXRvcl0pO1xufVxuZXhwb3J0cy5pc0l0ZXJhYmxlID0gaXNJdGVyYWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzSXRlcmFibGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2F3YWl0ID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0KSB8fCBmdW5jdGlvbiAodikgeyByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTsgfVxudmFyIF9fYXN5bmNHZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fYXN5bmNHZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzUmVhZGFibGVTdHJlYW1MaWtlID0gZXhwb3J0cy5yZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yID0gdm9pZCAwO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuL2lzRnVuY3Rpb25cIik7XG5mdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yXzEoKSB7XG4gICAgICAgIHZhciByZWFkZXIsIF9hLCB2YWx1ZSwgZG9uZTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDI7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRydWUpIHJldHVybiBbMywgOF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdChyZWFkZXIucmVhZCgpKV07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBfYSA9IF9iLnNlbnQoKSwgdmFsdWUgPSBfYS52YWx1ZSwgZG9uZSA9IF9hLmRvbmU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG9uZSkgcmV0dXJuIFszLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHZvaWQgMCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFs0LCBfX2F3YWl0KHZhbHVlKV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzQsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMl07XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5yZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yID0gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcjtcbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlKG9iaikge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmouZ2V0UmVhZGVyKTtcbn1cbmV4cG9ydHMuaXNSZWFkYWJsZVN0cmVhbUxpa2UgPSBpc1JlYWRhYmxlU3RyZWFtTGlrZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzUmVhZGFibGVTdHJlYW1MaWtlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2FzeW5jVmFsdWVzID0gKHRoaXMgJiYgdGhpcy5fX2FzeW5jVmFsdWVzKSB8fCBmdW5jdGlvbiAobykge1xuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn07XG52YXIgX192YWx1ZXMgPSAodGhpcyAmJiB0aGlzLl9fdmFsdWVzKSB8fCBmdW5jdGlvbihvKSB7XG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZyb21SZWFkYWJsZVN0cmVhbUxpa2UgPSBleHBvcnRzLmZyb21Bc3luY0l0ZXJhYmxlID0gZXhwb3J0cy5mcm9tSXRlcmFibGUgPSBleHBvcnRzLmZyb21Qcm9taXNlID0gZXhwb3J0cy5mcm9tQXJyYXlMaWtlID0gZXhwb3J0cy5mcm9tSW50ZXJvcE9ic2VydmFibGUgPSBleHBvcnRzLmlubmVyRnJvbSA9IHZvaWQgMDtcbnZhciBpc0FycmF5TGlrZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNBcnJheUxpa2VcIik7XG52YXIgaXNQcm9taXNlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc1Byb21pc2VcIik7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL09ic2VydmFibGVcIik7XG52YXIgaXNJbnRlcm9wT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNJbnRlcm9wT2JzZXJ2YWJsZVwiKTtcbnZhciBpc0FzeW5jSXRlcmFibGVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzQXN5bmNJdGVyYWJsZVwiKTtcbnZhciB0aHJvd1Vub2JzZXJ2YWJsZUVycm9yXzEgPSByZXF1aXJlKFwiLi4vdXRpbC90aHJvd1Vub2JzZXJ2YWJsZUVycm9yXCIpO1xudmFyIGlzSXRlcmFibGVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzSXRlcmFibGVcIik7XG52YXIgaXNSZWFkYWJsZVN0cmVhbUxpa2VfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzUmVhZGFibGVTdHJlYW1MaWtlXCIpO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRnVuY3Rpb25cIik7XG52YXIgcmVwb3J0VW5oYW5kbGVkRXJyb3JfMSA9IHJlcXVpcmUoXCIuLi91dGlsL3JlcG9ydFVuaGFuZGxlZEVycm9yXCIpO1xudmFyIG9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9zeW1ib2wvb2JzZXJ2YWJsZVwiKTtcbmZ1bmN0aW9uIGlubmVyRnJvbShpbnB1dCkge1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGlzSW50ZXJvcE9ic2VydmFibGVfMS5pc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlXzEuaXNBcnJheUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFycmF5TGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZV8xLmlzUHJvbWlzZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUHJvbWlzZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXN5bmNJdGVyYWJsZV8xLmlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSXRlcmFibGVfMS5pc0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUmVhZGFibGVTdHJlYW1MaWtlXzEuaXNSZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgdGhyb3dVbm9ic2VydmFibGVFcnJvcl8xLmNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTtcbn1cbmV4cG9ydHMuaW5uZXJGcm9tID0gaW5uZXJGcm9tO1xuZnVuY3Rpb24gZnJvbUludGVyb3BPYnNlcnZhYmxlKG9iaikge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9icyA9IG9ialtvYnNlcnZhYmxlXzEub2JzZXJ2YWJsZV0oKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKG9icy5zdWJzY3JpYmUpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZScpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5mcm9tSW50ZXJvcE9ic2VydmFibGUgPSBmcm9tSW50ZXJvcE9ic2VydmFibGU7XG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aCAmJiAhc3Vic2NyaWJlci5jbG9zZWQ7IGkrKykge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGFycmF5W2ldKTtcbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmZyb21BcnJheUxpa2UgPSBmcm9tQXJyYXlMaWtlO1xuZnVuY3Rpb24gZnJvbVByb21pc2UocHJvbWlzZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSlcbiAgICAgICAgICAgIC50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yXzEucmVwb3J0VW5oYW5kbGVkRXJyb3IpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5mcm9tUHJvbWlzZSA9IGZyb21Qcm9taXNlO1xuZnVuY3Rpb24gZnJvbUl0ZXJhYmxlKGl0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmZyb21JdGVyYWJsZSA9IGZyb21JdGVyYWJsZTtcbmZ1bmN0aW9uIGZyb21Bc3luY0l0ZXJhYmxlKGFzeW5jSXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZnJvbUFzeW5jSXRlcmFibGUgPSBmcm9tQXN5bmNJdGVyYWJsZTtcbmZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUoaXNSZWFkYWJsZVN0cmVhbUxpa2VfMS5yZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSk7XG59XG5leHBvcnRzLmZyb21SZWFkYWJsZVN0cmVhbUxpa2UgPSBmcm9tUmVhZGFibGVTdHJlYW1MaWtlO1xuZnVuY3Rpb24gcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKSB7XG4gICAgdmFyIGFzeW5jSXRlcmFibGVfMSwgYXN5bmNJdGVyYWJsZV8xXzE7XG4gICAgdmFyIGVfMiwgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmFsdWUsIGVfMl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzAsIDUsIDYsIDExXSk7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbNCwgYXN5bmNJdGVyYWJsZV8xLm5leHQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzeW5jSXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAzO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFszLCAxXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xICYmICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfYS5jYWxsKGFzeW5jSXRlcmFibGVfMSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDg7XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbm5lckZyb20uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV4ZWN1dGVTY2hlZHVsZSA9IHZvaWQgMDtcbmZ1bmN0aW9uIGV4ZWN1dGVTY2hlZHVsZShwYXJlbnRTdWJzY3JpcHRpb24sIHNjaGVkdWxlciwgd29yaywgZGVsYXksIHJlcGVhdCkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgIGlmIChyZXBlYXQgPT09IHZvaWQgMCkgeyByZXBlYXQgPSBmYWxzZTsgfVxuICAgIHZhciBzY2hlZHVsZVN1YnNjcmlwdGlvbiA9IHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdvcmsoKTtcbiAgICAgICAgaWYgKHJlcGVhdCkge1xuICAgICAgICAgICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIGRlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9LCBkZWxheSk7XG4gICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZChzY2hlZHVsZVN1YnNjcmlwdGlvbik7XG4gICAgaWYgKCFyZXBlYXQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlU3Vic2NyaXB0aW9uO1xuICAgIH1cbn1cbmV4cG9ydHMuZXhlY3V0ZVNjaGVkdWxlID0gZXhlY3V0ZVNjaGVkdWxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhlY3V0ZVNjaGVkdWxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5vYnNlcnZlT24gPSB2b2lkIDA7XG52YXIgZXhlY3V0ZVNjaGVkdWxlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9leGVjdXRlU2NoZWR1bGVcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIG9ic2VydmVPbihzY2hlZHVsZXIsIGRlbGF5KSB7XG4gICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBleGVjdXRlU2NoZWR1bGVfMS5leGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzdWJzY3JpYmVyLm5leHQodmFsdWUpOyB9LCBkZWxheSk7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGV4ZWN1dGVTY2hlZHVsZV8xLmV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YnNjcmliZXIuY29tcGxldGUoKTsgfSwgZGVsYXkpOyB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBleGVjdXRlU2NoZWR1bGVfMS5leGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0sIGRlbGF5KTsgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5vYnNlcnZlT24gPSBvYnNlcnZlT247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vYnNlcnZlT24uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN1YnNjcmliZU9uID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG5mdW5jdGlvbiBzdWJzY3JpYmVPbihzY2hlZHVsZXIsIGRlbGF5KSB7XG4gICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgc3Vic2NyaWJlci5hZGQoc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7IH0sIGRlbGF5KSk7XG4gICAgfSk7XG59XG5leHBvcnRzLnN1YnNjcmliZU9uID0gc3Vic2NyaWJlT247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdWJzY3JpYmVPbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2NoZWR1bGVPYnNlcnZhYmxlID0gdm9pZCAwO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIG9ic2VydmVPbl8xID0gcmVxdWlyZShcIi4uL29wZXJhdG9ycy9vYnNlcnZlT25cIik7XG52YXIgc3Vic2NyaWJlT25fMSA9IHJlcXVpcmUoXCIuLi9vcGVyYXRvcnMvc3Vic2NyaWJlT25cIik7XG5mdW5jdGlvbiBzY2hlZHVsZU9ic2VydmFibGUoaW5wdXQsIHNjaGVkdWxlcikge1xuICAgIHJldHVybiBpbm5lckZyb21fMS5pbm5lckZyb20oaW5wdXQpLnBpcGUoc3Vic2NyaWJlT25fMS5zdWJzY3JpYmVPbihzY2hlZHVsZXIpLCBvYnNlcnZlT25fMS5vYnNlcnZlT24oc2NoZWR1bGVyKSk7XG59XG5leHBvcnRzLnNjaGVkdWxlT2JzZXJ2YWJsZSA9IHNjaGVkdWxlT2JzZXJ2YWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjaGVkdWxlT2JzZXJ2YWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2NoZWR1bGVQcm9taXNlID0gdm9pZCAwO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIG9ic2VydmVPbl8xID0gcmVxdWlyZShcIi4uL29wZXJhdG9ycy9vYnNlcnZlT25cIik7XG52YXIgc3Vic2NyaWJlT25fMSA9IHJlcXVpcmUoXCIuLi9vcGVyYXRvcnMvc3Vic2NyaWJlT25cIik7XG5mdW5jdGlvbiBzY2hlZHVsZVByb21pc2UoaW5wdXQsIHNjaGVkdWxlcikge1xuICAgIHJldHVybiBpbm5lckZyb21fMS5pbm5lckZyb20oaW5wdXQpLnBpcGUoc3Vic2NyaWJlT25fMS5zdWJzY3JpYmVPbihzY2hlZHVsZXIpLCBvYnNlcnZlT25fMS5vYnNlcnZlT24oc2NoZWR1bGVyKSk7XG59XG5leHBvcnRzLnNjaGVkdWxlUHJvbWlzZSA9IHNjaGVkdWxlUHJvbWlzZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjaGVkdWxlUHJvbWlzZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2NoZWR1bGVBcnJheSA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbmZ1bmN0aW9uIHNjaGVkdWxlQXJyYXkoaW5wdXQsIHNjaGVkdWxlcikge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChpID09PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoaW5wdXRbaSsrXSk7XG4gICAgICAgICAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjaGVkdWxlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuc2NoZWR1bGVBcnJheSA9IHNjaGVkdWxlQXJyYXk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY2hlZHVsZUFycmF5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zY2hlZHVsZUl0ZXJhYmxlID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xudmFyIGl0ZXJhdG9yXzEgPSByZXF1aXJlKFwiLi4vc3ltYm9sL2l0ZXJhdG9yXCIpO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRnVuY3Rpb25cIik7XG52YXIgZXhlY3V0ZVNjaGVkdWxlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9leGVjdXRlU2NoZWR1bGVcIik7XG5mdW5jdGlvbiBzY2hlZHVsZUl0ZXJhYmxlKGlucHV0LCBzY2hlZHVsZXIpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpdGVyYXRvcjtcbiAgICAgICAgZXhlY3V0ZVNjaGVkdWxlXzEuZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBpbnB1dFtpdGVyYXRvcl8xLml0ZXJhdG9yXSgpO1xuICAgICAgICAgICAgZXhlY3V0ZVNjaGVkdWxlXzEuZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICAgICAgdmFyIGRvbmU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgKF9hID0gaXRlcmF0b3IubmV4dCgpLCB2YWx1ZSA9IF9hLnZhbHVlLCBkb25lID0gX2EuZG9uZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMCwgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24oaXRlcmF0b3IgPT09IG51bGwgfHwgaXRlcmF0b3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGl0ZXJhdG9yLnJldHVybikgJiYgaXRlcmF0b3IucmV0dXJuKCk7IH07XG4gICAgfSk7XG59XG5leHBvcnRzLnNjaGVkdWxlSXRlcmFibGUgPSBzY2hlZHVsZUl0ZXJhYmxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NoZWR1bGVJdGVyYWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2NoZWR1bGVBc3luY0l0ZXJhYmxlID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xudmFyIGV4ZWN1dGVTY2hlZHVsZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvZXhlY3V0ZVNjaGVkdWxlXCIpO1xuZnVuY3Rpb24gc2NoZWR1bGVBc3luY0l0ZXJhYmxlKGlucHV0LCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSXRlcmFibGUgY2Fubm90IGJlIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBleGVjdXRlU2NoZWR1bGVfMS5leGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpbnB1dFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcbiAgICAgICAgICAgIGV4ZWN1dGVTY2hlZHVsZV8xLmV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdGVyYXRvci5uZXh0KCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIDAsIHRydWUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuc2NoZWR1bGVBc3luY0l0ZXJhYmxlID0gc2NoZWR1bGVBc3luY0l0ZXJhYmxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NoZWR1bGVBc3luY0l0ZXJhYmxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZSA9IHZvaWQgMDtcbnZhciBzY2hlZHVsZUFzeW5jSXRlcmFibGVfMSA9IHJlcXVpcmUoXCIuL3NjaGVkdWxlQXN5bmNJdGVyYWJsZVwiKTtcbnZhciBpc1JlYWRhYmxlU3RyZWFtTGlrZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNSZWFkYWJsZVN0cmVhbUxpa2VcIik7XG5mdW5jdGlvbiBzY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCwgc2NoZWR1bGVyKSB7XG4gICAgcmV0dXJuIHNjaGVkdWxlQXN5bmNJdGVyYWJsZV8xLnNjaGVkdWxlQXN5bmNJdGVyYWJsZShpc1JlYWRhYmxlU3RyZWFtTGlrZV8xLnJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IoaW5wdXQpLCBzY2hlZHVsZXIpO1xufVxuZXhwb3J0cy5zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZSA9IHNjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2UuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNjaGVkdWxlZCA9IHZvaWQgMDtcbnZhciBzY2hlZHVsZU9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuL3NjaGVkdWxlT2JzZXJ2YWJsZVwiKTtcbnZhciBzY2hlZHVsZVByb21pc2VfMSA9IHJlcXVpcmUoXCIuL3NjaGVkdWxlUHJvbWlzZVwiKTtcbnZhciBzY2hlZHVsZUFycmF5XzEgPSByZXF1aXJlKFwiLi9zY2hlZHVsZUFycmF5XCIpO1xudmFyIHNjaGVkdWxlSXRlcmFibGVfMSA9IHJlcXVpcmUoXCIuL3NjaGVkdWxlSXRlcmFibGVcIik7XG52YXIgc2NoZWR1bGVBc3luY0l0ZXJhYmxlXzEgPSByZXF1aXJlKFwiLi9zY2hlZHVsZUFzeW5jSXRlcmFibGVcIik7XG52YXIgaXNJbnRlcm9wT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNJbnRlcm9wT2JzZXJ2YWJsZVwiKTtcbnZhciBpc1Byb21pc2VfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzUHJvbWlzZVwiKTtcbnZhciBpc0FycmF5TGlrZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNBcnJheUxpa2VcIik7XG52YXIgaXNJdGVyYWJsZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNJdGVyYWJsZVwiKTtcbnZhciBpc0FzeW5jSXRlcmFibGVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzQXN5bmNJdGVyYWJsZVwiKTtcbnZhciB0aHJvd1Vub2JzZXJ2YWJsZUVycm9yXzEgPSByZXF1aXJlKFwiLi4vdXRpbC90aHJvd1Vub2JzZXJ2YWJsZUVycm9yXCIpO1xudmFyIGlzUmVhZGFibGVTdHJlYW1MaWtlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc1JlYWRhYmxlU3RyZWFtTGlrZVwiKTtcbnZhciBzY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZV8xID0gcmVxdWlyZShcIi4vc2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2VcIik7XG5mdW5jdGlvbiBzY2hlZHVsZWQoaW5wdXQsIHNjaGVkdWxlcikge1xuICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChpc0ludGVyb3BPYnNlcnZhYmxlXzEuaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZU9ic2VydmFibGVfMS5zY2hlZHVsZU9ic2VydmFibGUoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlXzEuaXNBcnJheUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NoZWR1bGVBcnJheV8xLnNjaGVkdWxlQXJyYXkoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZV8xLmlzUHJvbWlzZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZVByb21pc2VfMS5zY2hlZHVsZVByb21pc2UoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXN5bmNJdGVyYWJsZV8xLmlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZUFzeW5jSXRlcmFibGVfMS5zY2hlZHVsZUFzeW5jSXRlcmFibGUoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSXRlcmFibGVfMS5pc0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjaGVkdWxlSXRlcmFibGVfMS5zY2hlZHVsZUl0ZXJhYmxlKGlucHV0LCBzY2hlZHVsZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZV8xLmlzUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlXzEuc2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgdGhyb3dVbm9ic2VydmFibGVFcnJvcl8xLmNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTtcbn1cbmV4cG9ydHMuc2NoZWR1bGVkID0gc2NoZWR1bGVkO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NoZWR1bGVkLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tID0gdm9pZCAwO1xudmFyIHNjaGVkdWxlZF8xID0gcmVxdWlyZShcIi4uL3NjaGVkdWxlZC9zY2hlZHVsZWRcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi9pbm5lckZyb21cIik7XG5mdW5jdGlvbiBmcm9tKGlucHV0LCBzY2hlZHVsZXIpIHtcbiAgICByZXR1cm4gc2NoZWR1bGVyID8gc2NoZWR1bGVkXzEuc2NoZWR1bGVkKGlucHV0LCBzY2hlZHVsZXIpIDogaW5uZXJGcm9tXzEuaW5uZXJGcm9tKGlucHV0KTtcbn1cbmV4cG9ydHMuZnJvbSA9IGZyb207XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mcm9tLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5vZiA9IHZvaWQgMDtcbnZhciBhcmdzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcmdzXCIpO1xudmFyIGZyb21fMSA9IHJlcXVpcmUoXCIuL2Zyb21cIik7XG5mdW5jdGlvbiBvZigpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIHNjaGVkdWxlciA9IGFyZ3NfMS5wb3BTY2hlZHVsZXIoYXJncyk7XG4gICAgcmV0dXJuIGZyb21fMS5mcm9tKGFyZ3MsIHNjaGVkdWxlcik7XG59XG5leHBvcnRzLm9mID0gb2Y7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudGhyb3dFcnJvciA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc0Z1bmN0aW9uXCIpO1xuZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24oZXJyb3JPckVycm9yRmFjdG9yeSkgPyBlcnJvck9yRXJyb3JGYWN0b3J5IDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXJyb3JPckVycm9yRmFjdG9yeTsgfTtcbiAgICB2YXIgaW5pdCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycm9yRmFjdG9yeSgpKTsgfTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKHNjaGVkdWxlciA/IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7IHJldHVybiBzY2hlZHVsZXIuc2NoZWR1bGUoaW5pdCwgMCwgc3Vic2NyaWJlcik7IH0gOiBpbml0KTtcbn1cbmV4cG9ydHMudGhyb3dFcnJvciA9IHRocm93RXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aHJvd0Vycm9yLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5vYnNlcnZlTm90aWZpY2F0aW9uID0gZXhwb3J0cy5Ob3RpZmljYXRpb24gPSBleHBvcnRzLk5vdGlmaWNhdGlvbktpbmQgPSB2b2lkIDA7XG52YXIgZW1wdHlfMSA9IHJlcXVpcmUoXCIuL29ic2VydmFibGUvZW1wdHlcIik7XG52YXIgb2ZfMSA9IHJlcXVpcmUoXCIuL29ic2VydmFibGUvb2ZcIik7XG52YXIgdGhyb3dFcnJvcl8xID0gcmVxdWlyZShcIi4vb2JzZXJ2YWJsZS90aHJvd0Vycm9yXCIpO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuL3V0aWwvaXNGdW5jdGlvblwiKTtcbnZhciBOb3RpZmljYXRpb25LaW5kO1xuKGZ1bmN0aW9uIChOb3RpZmljYXRpb25LaW5kKSB7XG4gICAgTm90aWZpY2F0aW9uS2luZFtcIk5FWFRcIl0gPSBcIk5cIjtcbiAgICBOb3RpZmljYXRpb25LaW5kW1wiRVJST1JcIl0gPSBcIkVcIjtcbiAgICBOb3RpZmljYXRpb25LaW5kW1wiQ09NUExFVEVcIl0gPSBcIkNcIjtcbn0pKE5vdGlmaWNhdGlvbktpbmQgPSBleHBvcnRzLk5vdGlmaWNhdGlvbktpbmQgfHwgKGV4cG9ydHMuTm90aWZpY2F0aW9uS2luZCA9IHt9KSk7XG52YXIgTm90aWZpY2F0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb3RpZmljYXRpb24oa2luZCwgdmFsdWUsIGVycm9yKSB7XG4gICAgICAgIHRoaXMua2luZCA9IGtpbmQ7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgICAgICB0aGlzLmhhc1ZhbHVlID0ga2luZCA9PT0gJ04nO1xuICAgIH1cbiAgICBOb3RpZmljYXRpb24ucHJvdG90eXBlLm9ic2VydmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmVOb3RpZmljYXRpb24odGhpcywgb2JzZXJ2ZXIpO1xuICAgIH07XG4gICAgTm90aWZpY2F0aW9uLnByb3RvdHlwZS5kbyA9IGZ1bmN0aW9uIChuZXh0SGFuZGxlciwgZXJyb3JIYW5kbGVyLCBjb21wbGV0ZUhhbmRsZXIpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywga2luZCA9IF9hLmtpbmQsIHZhbHVlID0gX2EudmFsdWUsIGVycm9yID0gX2EuZXJyb3I7XG4gICAgICAgIHJldHVybiBraW5kID09PSAnTicgPyBuZXh0SGFuZGxlciA9PT0gbnVsbCB8fCBuZXh0SGFuZGxlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogbmV4dEhhbmRsZXIodmFsdWUpIDoga2luZCA9PT0gJ0UnID8gZXJyb3JIYW5kbGVyID09PSBudWxsIHx8IGVycm9ySGFuZGxlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3JIYW5kbGVyKGVycm9yKSA6IGNvbXBsZXRlSGFuZGxlciA9PT0gbnVsbCB8fCBjb21wbGV0ZUhhbmRsZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbXBsZXRlSGFuZGxlcigpO1xuICAgIH07XG4gICAgTm90aWZpY2F0aW9uLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiAobmV4dE9yT2JzZXJ2ZXIsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbigoX2EgPSBuZXh0T3JPYnNlcnZlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5leHQpXG4gICAgICAgICAgICA/IHRoaXMub2JzZXJ2ZShuZXh0T3JPYnNlcnZlcilcbiAgICAgICAgICAgIDogdGhpcy5kbyhuZXh0T3JPYnNlcnZlciwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICB9O1xuICAgIE5vdGlmaWNhdGlvbi5wcm90b3R5cGUudG9PYnNlcnZhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBraW5kID0gX2Eua2luZCwgdmFsdWUgPSBfYS52YWx1ZSwgZXJyb3IgPSBfYS5lcnJvcjtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGtpbmQgPT09ICdOJ1xuICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgIG9mXzEub2YodmFsdWUpXG4gICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAga2luZCA9PT0gJ0UnXG4gICAgICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JfMS50aHJvd0Vycm9yKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVycm9yOyB9KVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBraW5kID09PSAnQydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5XzEuRU1QVFlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5leHBlY3RlZCBub3RpZmljYXRpb24ga2luZCBcIiArIGtpbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBOb3RpZmljYXRpb24uY3JlYXRlTmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IE5vdGlmaWNhdGlvbignTicsIHZhbHVlKTtcbiAgICB9O1xuICAgIE5vdGlmaWNhdGlvbi5jcmVhdGVFcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOb3RpZmljYXRpb24oJ0UnLCB1bmRlZmluZWQsIGVycik7XG4gICAgfTtcbiAgICBOb3RpZmljYXRpb24uY3JlYXRlQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBOb3RpZmljYXRpb24uY29tcGxldGVOb3RpZmljYXRpb247XG4gICAgfTtcbiAgICBOb3RpZmljYXRpb24uY29tcGxldGVOb3RpZmljYXRpb24gPSBuZXcgTm90aWZpY2F0aW9uKCdDJyk7XG4gICAgcmV0dXJuIE5vdGlmaWNhdGlvbjtcbn0oKSk7XG5leHBvcnRzLk5vdGlmaWNhdGlvbiA9IE5vdGlmaWNhdGlvbjtcbmZ1bmN0aW9uIG9ic2VydmVOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBvYnNlcnZlcikge1xuICAgIHZhciBfYSwgX2IsIF9jO1xuICAgIHZhciBfZCA9IG5vdGlmaWNhdGlvbiwga2luZCA9IF9kLmtpbmQsIHZhbHVlID0gX2QudmFsdWUsIGVycm9yID0gX2QuZXJyb3I7XG4gICAgaWYgKHR5cGVvZiBraW5kICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vdGlmaWNhdGlvbiwgbWlzc2luZyBcImtpbmRcIicpO1xuICAgIH1cbiAgICBraW5kID09PSAnTicgPyAoX2EgPSBvYnNlcnZlci5uZXh0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChvYnNlcnZlciwgdmFsdWUpIDoga2luZCA9PT0gJ0UnID8gKF9iID0gb2JzZXJ2ZXIuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKG9ic2VydmVyLCBlcnJvcikgOiAoX2MgPSBvYnNlcnZlci5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmNhbGwob2JzZXJ2ZXIpO1xufVxuZXhwb3J0cy5vYnNlcnZlTm90aWZpY2F0aW9uID0gb2JzZXJ2ZU5vdGlmaWNhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5vdGlmaWNhdGlvbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNPYnNlcnZhYmxlID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuL2lzRnVuY3Rpb25cIik7XG5mdW5jdGlvbiBpc09ic2VydmFibGUob2JqKSB7XG4gICAgcmV0dXJuICEhb2JqICYmIChvYmogaW5zdGFuY2VvZiBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZSB8fCAoaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24ob2JqLmxpZnQpICYmIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKG9iai5zdWJzY3JpYmUpKSk7XG59XG5leHBvcnRzLmlzT2JzZXJ2YWJsZSA9IGlzT2JzZXJ2YWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzT2JzZXJ2YWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRW1wdHlFcnJvciA9IHZvaWQgMDtcbnZhciBjcmVhdGVFcnJvckNsYXNzXzEgPSByZXF1aXJlKFwiLi9jcmVhdGVFcnJvckNsYXNzXCIpO1xuZXhwb3J0cy5FbXB0eUVycm9yID0gY3JlYXRlRXJyb3JDbGFzc18xLmNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikgeyByZXR1cm4gZnVuY3Rpb24gRW1wdHlFcnJvckltcGwoKSB7XG4gICAgX3N1cGVyKHRoaXMpO1xuICAgIHRoaXMubmFtZSA9ICdFbXB0eUVycm9yJztcbiAgICB0aGlzLm1lc3NhZ2UgPSAnbm8gZWxlbWVudHMgaW4gc2VxdWVuY2UnO1xufTsgfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FbXB0eUVycm9yLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5sYXN0VmFsdWVGcm9tID0gdm9pZCAwO1xudmFyIEVtcHR5RXJyb3JfMSA9IHJlcXVpcmUoXCIuL3V0aWwvRW1wdHlFcnJvclwiKTtcbmZ1bmN0aW9uIGxhc3RWYWx1ZUZyb20oc291cmNlLCBjb25maWcpIHtcbiAgICB2YXIgaGFzQ29uZmlnID0gdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCc7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIF9oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgX3ZhbHVlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIF9oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9oYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKF92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhhc0NvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNvbmZpZy5kZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFbXB0eUVycm9yXzEuRW1wdHlFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMubGFzdFZhbHVlRnJvbSA9IGxhc3RWYWx1ZUZyb207XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sYXN0VmFsdWVGcm9tLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5maXJzdFZhbHVlRnJvbSA9IHZvaWQgMDtcbnZhciBFbXB0eUVycm9yXzEgPSByZXF1aXJlKFwiLi91dGlsL0VtcHR5RXJyb3JcIik7XG52YXIgU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIGZpcnN0VmFsdWVGcm9tKHNvdXJjZSwgY29uZmlnKSB7XG4gICAgdmFyIGhhc0NvbmZpZyA9IHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBzdWJzY3JpYmVyID0gbmV3IFN1YnNjcmliZXJfMS5TYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0NvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNvbmZpZy5kZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFbXB0eUVycm9yXzEuRW1wdHlFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZmlyc3RWYWx1ZUZyb20gPSBmaXJzdFZhbHVlRnJvbTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpcnN0VmFsdWVGcm9tLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Bcmd1bWVudE91dE9mUmFuZ2VFcnJvciA9IHZvaWQgMDtcbnZhciBjcmVhdGVFcnJvckNsYXNzXzEgPSByZXF1aXJlKFwiLi9jcmVhdGVFcnJvckNsYXNzXCIpO1xuZXhwb3J0cy5Bcmd1bWVudE91dE9mUmFuZ2VFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3NfMS5jcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JJbXBsKCkge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdBcmd1bWVudE91dE9mUmFuZ2VFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdhcmd1bWVudCBvdXQgb2YgcmFuZ2UnO1xuICAgIH07XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Ob3RGb3VuZEVycm9yID0gdm9pZCAwO1xudmFyIGNyZWF0ZUVycm9yQ2xhc3NfMSA9IHJlcXVpcmUoXCIuL2NyZWF0ZUVycm9yQ2xhc3NcIik7XG5leHBvcnRzLk5vdEZvdW5kRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzXzEuY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE5vdEZvdW5kRXJyb3JJbXBsKG1lc3NhZ2UpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnTm90Rm91bmRFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Tm90Rm91bmRFcnJvci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2VxdWVuY2VFcnJvciA9IHZvaWQgMDtcbnZhciBjcmVhdGVFcnJvckNsYXNzXzEgPSByZXF1aXJlKFwiLi9jcmVhdGVFcnJvckNsYXNzXCIpO1xuZXhwb3J0cy5TZXF1ZW5jZUVycm9yID0gY3JlYXRlRXJyb3JDbGFzc18xLmNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBTZXF1ZW5jZUVycm9ySW1wbChtZXNzYWdlKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ1NlcXVlbmNlRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH07XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNlcXVlbmNlRXJyb3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzVmFsaWREYXRlID0gdm9pZCAwO1xuZnVuY3Rpb24gaXNWYWxpZERhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZSk7XG59XG5leHBvcnRzLmlzVmFsaWREYXRlID0gaXNWYWxpZERhdGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0RhdGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRpbWVvdXQgPSBleHBvcnRzLlRpbWVvdXRFcnJvciA9IHZvaWQgMDtcbnZhciBhc3luY18xID0gcmVxdWlyZShcIi4uL3NjaGVkdWxlci9hc3luY1wiKTtcbnZhciBpc0RhdGVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRGF0ZVwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIGNyZWF0ZUVycm9yQ2xhc3NfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2NyZWF0ZUVycm9yQ2xhc3NcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgZXhlY3V0ZVNjaGVkdWxlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9leGVjdXRlU2NoZWR1bGVcIik7XG5leHBvcnRzLlRpbWVvdXRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3NfMS5jcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVGltZW91dEVycm9ySW1wbChpbmZvKSB7XG4gICAgICAgIGlmIChpbmZvID09PSB2b2lkIDApIHsgaW5mbyA9IG51bGw7IH1cbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnVGltZW91dCBoYXMgb2NjdXJyZWQnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVGltZW91dEVycm9yJztcbiAgICAgICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICB9O1xufSk7XG5mdW5jdGlvbiB0aW1lb3V0KGNvbmZpZywgc2NoZWR1bGVyQXJnKSB7XG4gICAgdmFyIF9hID0gKGlzRGF0ZV8xLmlzVmFsaWREYXRlKGNvbmZpZykgPyB7IGZpcnN0OiBjb25maWcgfSA6IHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInID8geyBlYWNoOiBjb25maWcgfSA6IGNvbmZpZyksIGZpcnN0ID0gX2EuZmlyc3QsIGVhY2ggPSBfYS5lYWNoLCBfYiA9IF9hLndpdGgsIF93aXRoID0gX2IgPT09IHZvaWQgMCA/IHRpbWVvdXRFcnJvckZhY3RvcnkgOiBfYiwgX2MgPSBfYS5zY2hlZHVsZXIsIHNjaGVkdWxlciA9IF9jID09PSB2b2lkIDAgPyBzY2hlZHVsZXJBcmcgIT09IG51bGwgJiYgc2NoZWR1bGVyQXJnICE9PSB2b2lkIDAgPyBzY2hlZHVsZXJBcmcgOiBhc3luY18xLmFzeW5jU2NoZWR1bGVyIDogX2MsIF9kID0gX2EubWV0YSwgbWV0YSA9IF9kID09PSB2b2lkIDAgPyBudWxsIDogX2Q7XG4gICAgaWYgKGZpcnN0ID09IG51bGwgJiYgZWFjaCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIHRpbWVvdXQgcHJvdmlkZWQuJyk7XG4gICAgfVxuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIHRpbWVyU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgdmFyIHNlZW4gPSAwO1xuICAgICAgICB2YXIgc3RhcnRUaW1lciA9IGZ1bmN0aW9uIChkZWxheSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSBleGVjdXRlU2NoZWR1bGVfMS5leGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKF93aXRoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGE6IG1ldGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IGxhc3RWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlZW46IHNlZW4sXG4gICAgICAgICAgICAgICAgICAgIH0pKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgfTtcbiAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgc2VlbisrO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KChsYXN0VmFsdWUgPSB2YWx1ZSkpO1xuICAgICAgICAgICAgZWFjaCA+IDAgJiYgc3RhcnRUaW1lcihlYWNoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghKHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi5jbG9zZWQpKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgICAgICFzZWVuICYmIHN0YXJ0VGltZXIoZmlyc3QgIT0gbnVsbCA/ICh0eXBlb2YgZmlyc3QgPT09ICdudW1iZXInID8gZmlyc3QgOiArZmlyc3QgLSBzY2hlZHVsZXIubm93KCkpIDogZWFjaCk7XG4gICAgfSk7XG59XG5leHBvcnRzLnRpbWVvdXQgPSB0aW1lb3V0O1xuZnVuY3Rpb24gdGltZW91dEVycm9yRmFjdG9yeShpbmZvKSB7XG4gICAgdGhyb3cgbmV3IGV4cG9ydHMuVGltZW91dEVycm9yKGluZm8pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZW91dC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubWFwID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBtYXAocHJvamVjdCwgdGhpc0FyZykge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHByb2plY3QuY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaW5kZXgrKykpO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG5leHBvcnRzLm1hcCA9IG1hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1hcC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm1hcE9uZU9yTWFueUFyZ3MgPSB2b2lkIDA7XG52YXIgbWFwXzEgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzL21hcFwiKTtcbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbmZ1bmN0aW9uIGNhbGxPckFwcGx5KGZuLCBhcmdzKSB7XG4gICAgcmV0dXJuIGlzQXJyYXkoYXJncykgPyBmbi5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSkpIDogZm4oYXJncyk7XG59XG5mdW5jdGlvbiBtYXBPbmVPck1hbnlBcmdzKGZuKSB7XG4gICAgcmV0dXJuIG1hcF8xLm1hcChmdW5jdGlvbiAoYXJncykgeyByZXR1cm4gY2FsbE9yQXBwbHkoZm4sIGFyZ3MpOyB9KTtcbn1cbmV4cG9ydHMubWFwT25lT3JNYW55QXJncyA9IG1hcE9uZU9yTWFueUFyZ3M7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYXBPbmVPck1hbnlBcmdzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxuICAgICAgICB0b1tqXSA9IGZyb21baV07XG4gICAgcmV0dXJuIHRvO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYmluZENhbGxiYWNrSW50ZXJuYWxzID0gdm9pZCAwO1xudmFyIGlzU2NoZWR1bGVyXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc1NjaGVkdWxlclwiKTtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBzdWJzY3JpYmVPbl8xID0gcmVxdWlyZShcIi4uL29wZXJhdG9ycy9zdWJzY3JpYmVPblwiKTtcbnZhciBtYXBPbmVPck1hbnlBcmdzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9tYXBPbmVPck1hbnlBcmdzXCIpO1xudmFyIG9ic2VydmVPbl8xID0gcmVxdWlyZShcIi4uL29wZXJhdG9ycy9vYnNlcnZlT25cIik7XG52YXIgQXN5bmNTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi4vQXN5bmNTdWJqZWN0XCIpO1xuZnVuY3Rpb24gYmluZENhbGxiYWNrSW50ZXJuYWxzKGlzTm9kZVN0eWxlLCBjYWxsYmFja0Z1bmMsIHJlc3VsdFNlbGVjdG9yLCBzY2hlZHVsZXIpIHtcbiAgICBpZiAocmVzdWx0U2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKGlzU2NoZWR1bGVyXzEuaXNTY2hlZHVsZXIocmVzdWx0U2VsZWN0b3IpKSB7XG4gICAgICAgICAgICBzY2hlZHVsZXIgPSByZXN1bHRTZWxlY3RvcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBiaW5kQ2FsbGJhY2tJbnRlcm5hbHMoaXNOb2RlU3R5bGUsIGNhbGxiYWNrRnVuYywgc2NoZWR1bGVyKVxuICAgICAgICAgICAgICAgICAgICAuYXBwbHkodGhpcywgYXJncylcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUobWFwT25lT3JNYW55QXJnc18xLm1hcE9uZU9yTWFueUFyZ3MocmVzdWx0U2VsZWN0b3IpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNjaGVkdWxlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJpbmRDYWxsYmFja0ludGVybmFscyhpc05vZGVTdHlsZSwgY2FsbGJhY2tGdW5jKVxuICAgICAgICAgICAgICAgIC5hcHBseSh0aGlzLCBhcmdzKVxuICAgICAgICAgICAgICAgIC5waXBlKHN1YnNjcmliZU9uXzEuc3Vic2NyaWJlT24oc2NoZWR1bGVyKSwgb2JzZXJ2ZU9uXzEub2JzZXJ2ZU9uKHNjaGVkdWxlcikpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFzeW5jU3ViamVjdF8xLkFzeW5jU3ViamVjdCgpO1xuICAgICAgICB2YXIgdW5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIHZhciBzdWJzID0gc3ViamVjdC5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICBpZiAodW5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgIHVuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgaXNBc3luY18xID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdmFyIGlzQ29tcGxldGVfMSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrRnVuYy5hcHBseShfdGhpcywgX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncykpLCBbXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc05vZGVTdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSByZXN1bHRzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QubmV4dCgxIDwgcmVzdWx0cy5sZW5ndGggPyByZXN1bHRzIDogcmVzdWx0c1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NvbXBsZXRlXzEgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXN5bmNfMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdKSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzQ29tcGxldGVfMSkge1xuICAgICAgICAgICAgICAgICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlzQXN5bmNfMSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3VicztcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cbmV4cG9ydHMuYmluZENhbGxiYWNrSW50ZXJuYWxzID0gYmluZENhbGxiYWNrSW50ZXJuYWxzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmluZENhbGxiYWNrSW50ZXJuYWxzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5iaW5kQ2FsbGJhY2sgPSB2b2lkIDA7XG52YXIgYmluZENhbGxiYWNrSW50ZXJuYWxzXzEgPSByZXF1aXJlKFwiLi9iaW5kQ2FsbGJhY2tJbnRlcm5hbHNcIik7XG5mdW5jdGlvbiBiaW5kQ2FsbGJhY2soY2FsbGJhY2tGdW5jLCByZXN1bHRTZWxlY3Rvciwgc2NoZWR1bGVyKSB7XG4gICAgcmV0dXJuIGJpbmRDYWxsYmFja0ludGVybmFsc18xLmJpbmRDYWxsYmFja0ludGVybmFscyhmYWxzZSwgY2FsbGJhY2tGdW5jLCByZXN1bHRTZWxlY3Rvciwgc2NoZWR1bGVyKTtcbn1cbmV4cG9ydHMuYmluZENhbGxiYWNrID0gYmluZENhbGxiYWNrO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmluZENhbGxiYWNrLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5iaW5kTm9kZUNhbGxiYWNrID0gdm9pZCAwO1xudmFyIGJpbmRDYWxsYmFja0ludGVybmFsc18xID0gcmVxdWlyZShcIi4vYmluZENhbGxiYWNrSW50ZXJuYWxzXCIpO1xuZnVuY3Rpb24gYmluZE5vZGVDYWxsYmFjayhjYWxsYmFja0Z1bmMsIHJlc3VsdFNlbGVjdG9yLCBzY2hlZHVsZXIpIHtcbiAgICByZXR1cm4gYmluZENhbGxiYWNrSW50ZXJuYWxzXzEuYmluZENhbGxiYWNrSW50ZXJuYWxzKHRydWUsIGNhbGxiYWNrRnVuYywgcmVzdWx0U2VsZWN0b3IsIHNjaGVkdWxlcik7XG59XG5leHBvcnRzLmJpbmROb2RlQ2FsbGJhY2sgPSBiaW5kTm9kZUNhbGxiYWNrO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmluZE5vZGVDYWxsYmFjay5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXJnc0FyZ0FycmF5T3JPYmplY3QgPSB2b2lkIDA7XG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZSwgZ2V0S2V5cyA9IE9iamVjdC5rZXlzO1xuZnVuY3Rpb24gYXJnc0FyZ0FycmF5T3JPYmplY3QoYXJncykge1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB2YXIgZmlyc3RfMSA9IGFyZ3NbMF07XG4gICAgICAgIGlmIChpc0FycmF5KGZpcnN0XzEpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBhcmdzOiBmaXJzdF8xLCBrZXlzOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUE9KTyhmaXJzdF8xKSkge1xuICAgICAgICAgICAgdmFyIGtleXMgPSBnZXRLZXlzKGZpcnN0XzEpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBhcmdzOiBrZXlzLm1hcChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBmaXJzdF8xW2tleV07IH0pLFxuICAgICAgICAgICAgICAgIGtleXM6IGtleXMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGFyZ3M6IGFyZ3MsIGtleXM6IG51bGwgfTtcbn1cbmV4cG9ydHMuYXJnc0FyZ0FycmF5T3JPYmplY3QgPSBhcmdzQXJnQXJyYXlPck9iamVjdDtcbmZ1bmN0aW9uIGlzUE9KTyhvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIGdldFByb3RvdHlwZU9mKG9iaikgPT09IG9iamVjdFByb3RvO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJnc0FyZ0FycmF5T3JPYmplY3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZU9iamVjdCA9IHZvaWQgMDtcbmZ1bmN0aW9uIGNyZWF0ZU9iamVjdChrZXlzLCB2YWx1ZXMpIHtcbiAgICByZXR1cm4ga2V5cy5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwga2V5LCBpKSB7IHJldHVybiAoKHJlc3VsdFtrZXldID0gdmFsdWVzW2ldKSwgcmVzdWx0KTsgfSwge30pO1xufVxuZXhwb3J0cy5jcmVhdGVPYmplY3QgPSBjcmVhdGVPYmplY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jcmVhdGVPYmplY3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbWJpbmVMYXRlc3RJbml0ID0gZXhwb3J0cy5jb21iaW5lTGF0ZXN0ID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xudmFyIGFyZ3NBcmdBcnJheU9yT2JqZWN0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcmdzQXJnQXJyYXlPck9iamVjdFwiKTtcbnZhciBmcm9tXzEgPSByZXF1aXJlKFwiLi9mcm9tXCIpO1xudmFyIGlkZW50aXR5XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pZGVudGl0eVwiKTtcbnZhciBtYXBPbmVPck1hbnlBcmdzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9tYXBPbmVPck1hbnlBcmdzXCIpO1xudmFyIGFyZ3NfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyZ3NcIik7XG52YXIgY3JlYXRlT2JqZWN0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9jcmVhdGVPYmplY3RcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBleGVjdXRlU2NoZWR1bGVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2V4ZWN1dGVTY2hlZHVsZVwiKTtcbmZ1bmN0aW9uIGNvbWJpbmVMYXRlc3QoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBzY2hlZHVsZXIgPSBhcmdzXzEucG9wU2NoZWR1bGVyKGFyZ3MpO1xuICAgIHZhciByZXN1bHRTZWxlY3RvciA9IGFyZ3NfMS5wb3BSZXN1bHRTZWxlY3RvcihhcmdzKTtcbiAgICB2YXIgX2EgPSBhcmdzQXJnQXJyYXlPck9iamVjdF8xLmFyZ3NBcmdBcnJheU9yT2JqZWN0KGFyZ3MpLCBvYnNlcnZhYmxlcyA9IF9hLmFyZ3MsIGtleXMgPSBfYS5rZXlzO1xuICAgIGlmIChvYnNlcnZhYmxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZyb21fMS5mcm9tKFtdLCBzY2hlZHVsZXIpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKGNvbWJpbmVMYXRlc3RJbml0KG9ic2VydmFibGVzLCBzY2hlZHVsZXIsIGtleXNcbiAgICAgICAgP1xuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlcykgeyByZXR1cm4gY3JlYXRlT2JqZWN0XzEuY3JlYXRlT2JqZWN0KGtleXMsIHZhbHVlcyk7IH1cbiAgICAgICAgOlxuICAgICAgICAgICAgaWRlbnRpdHlfMS5pZGVudGl0eSkpO1xuICAgIHJldHVybiByZXN1bHRTZWxlY3RvciA/IHJlc3VsdC5waXBlKG1hcE9uZU9yTWFueUFyZ3NfMS5tYXBPbmVPck1hbnlBcmdzKHJlc3VsdFNlbGVjdG9yKSkgOiByZXN1bHQ7XG59XG5leHBvcnRzLmNvbWJpbmVMYXRlc3QgPSBjb21iaW5lTGF0ZXN0O1xuZnVuY3Rpb24gY29tYmluZUxhdGVzdEluaXQob2JzZXJ2YWJsZXMsIHNjaGVkdWxlciwgdmFsdWVUcmFuc2Zvcm0pIHtcbiAgICBpZiAodmFsdWVUcmFuc2Zvcm0gPT09IHZvaWQgMCkgeyB2YWx1ZVRyYW5zZm9ybSA9IGlkZW50aXR5XzEuaWRlbnRpdHk7IH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgbWF5YmVTY2hlZHVsZShzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBvYnNlcnZhYmxlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICB2YXIgYWN0aXZlID0gbGVuZ3RoO1xuICAgICAgICAgICAgdmFyIHJlbWFpbmluZ0ZpcnN0VmFsdWVzID0gbGVuZ3RoO1xuICAgICAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICAgIG1heWJlU2NoZWR1bGUoc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBmcm9tXzEuZnJvbShvYnNlcnZhYmxlc1tpXSwgc2NoZWR1bGVyKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhhc0ZpcnN0VmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbaV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzRmlyc3RWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0ZpcnN0VmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0ZpcnN0VmFsdWVzLS07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbWFpbmluZ0ZpcnN0VmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlVHJhbnNmb3JtKHZhbHVlcy5zbGljZSgpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghLS1hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9LCBzdWJzY3JpYmVyKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgX2xvb3BfMShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgc3Vic2NyaWJlcik7XG4gICAgfTtcbn1cbmV4cG9ydHMuY29tYmluZUxhdGVzdEluaXQgPSBjb21iaW5lTGF0ZXN0SW5pdDtcbmZ1bmN0aW9uIG1heWJlU2NoZWR1bGUoc2NoZWR1bGVyLCBleGVjdXRlLCBzdWJzY3JpcHRpb24pIHtcbiAgICBpZiAoc2NoZWR1bGVyKSB7XG4gICAgICAgIGV4ZWN1dGVTY2hlZHVsZV8xLmV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpcHRpb24sIHNjaGVkdWxlciwgZXhlY3V0ZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBleGVjdXRlKCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tYmluZUxhdGVzdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubWVyZ2VJbnRlcm5hbHMgPSB2b2lkIDA7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgZXhlY3V0ZVNjaGVkdWxlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9leGVjdXRlU2NoZWR1bGVcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBtZXJnZUludGVybmFscyhzb3VyY2UsIHN1YnNjcmliZXIsIHByb2plY3QsIGNvbmN1cnJlbnQsIG9uQmVmb3JlTmV4dCwgZXhwYW5kLCBpbm5lclN1YlNjaGVkdWxlciwgYWRkaXRpb25hbEZpbmFsaXplcikge1xuICAgIHZhciBidWZmZXIgPSBbXTtcbiAgICB2YXIgYWN0aXZlID0gMDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBpc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgdmFyIGNoZWNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc0NvbXBsZXRlICYmICFidWZmZXIubGVuZ3RoICYmICFhY3RpdmUpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIG91dGVyTmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gKGFjdGl2ZSA8IGNvbmN1cnJlbnQgPyBkb0lubmVyU3ViKHZhbHVlKSA6IGJ1ZmZlci5wdXNoKHZhbHVlKSk7IH07XG4gICAgdmFyIGRvSW5uZXJTdWIgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgZXhwYW5kICYmIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgIGFjdGl2ZSsrO1xuICAgICAgICB2YXIgaW5uZXJDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICBpbm5lckZyb21fMS5pbm5lckZyb20ocHJvamVjdCh2YWx1ZSwgaW5kZXgrKykpLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKGlubmVyVmFsdWUpIHtcbiAgICAgICAgICAgIG9uQmVmb3JlTmV4dCA9PT0gbnVsbCB8fCBvbkJlZm9yZU5leHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQmVmb3JlTmV4dChpbm5lclZhbHVlKTtcbiAgICAgICAgICAgIGlmIChleHBhbmQpIHtcbiAgICAgICAgICAgICAgICBvdXRlck5leHQoaW5uZXJWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoaW5uZXJWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlubmVyQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICB9LCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChpbm5lckNvbXBsZXRlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlLS07XG4gICAgICAgICAgICAgICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlcmVkVmFsdWUgPSBidWZmZXIuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbm5lclN1YlNjaGVkdWxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVTY2hlZHVsZV8xLmV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBpbm5lclN1YlNjaGVkdWxlciwgZnVuY3Rpb24gKCkgeyByZXR1cm4gZG9Jbm5lclN1YihidWZmZXJlZFZhbHVlKTsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb0lubmVyU3ViKGJ1ZmZlcmVkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYnVmZmVyLmxlbmd0aCAmJiBhY3RpdmUgPCBjb25jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfbG9vcF8xKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2hlY2tDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICB9O1xuICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIG91dGVyTmV4dCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgY2hlY2tDb21wbGV0ZSgpO1xuICAgIH0pKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBhZGRpdGlvbmFsRmluYWxpemVyID09PSBudWxsIHx8IGFkZGl0aW9uYWxGaW5hbGl6ZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFkZGl0aW9uYWxGaW5hbGl6ZXIoKTtcbiAgICB9O1xufVxuZXhwb3J0cy5tZXJnZUludGVybmFscyA9IG1lcmdlSW50ZXJuYWxzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2VJbnRlcm5hbHMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm1lcmdlTWFwID0gdm9pZCAwO1xudmFyIG1hcF8xID0gcmVxdWlyZShcIi4vbWFwXCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgbWVyZ2VJbnRlcm5hbHNfMSA9IHJlcXVpcmUoXCIuL21lcmdlSW50ZXJuYWxzXCIpO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRnVuY3Rpb25cIik7XG5mdW5jdGlvbiBtZXJnZU1hcChwcm9qZWN0LCByZXN1bHRTZWxlY3RvciwgY29uY3VycmVudCkge1xuICAgIGlmIChjb25jdXJyZW50ID09PSB2b2lkIDApIHsgY29uY3VycmVudCA9IEluZmluaXR5OyB9XG4gICAgaWYgKGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHJlc3VsdFNlbGVjdG9yKSkge1xuICAgICAgICByZXR1cm4gbWVyZ2VNYXAoZnVuY3Rpb24gKGEsIGkpIHsgcmV0dXJuIG1hcF8xLm1hcChmdW5jdGlvbiAoYiwgaWkpIHsgcmV0dXJuIHJlc3VsdFNlbGVjdG9yKGEsIGIsIGksIGlpKTsgfSkoaW5uZXJGcm9tXzEuaW5uZXJGcm9tKHByb2plY3QoYSwgaSkpKTsgfSwgY29uY3VycmVudCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiByZXN1bHRTZWxlY3RvciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uY3VycmVudCA9IHJlc3VsdFNlbGVjdG9yO1xuICAgIH1cbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikgeyByZXR1cm4gbWVyZ2VJbnRlcm5hbHNfMS5tZXJnZUludGVybmFscyhzb3VyY2UsIHN1YnNjcmliZXIsIHByb2plY3QsIGNvbmN1cnJlbnQpOyB9KTtcbn1cbmV4cG9ydHMubWVyZ2VNYXAgPSBtZXJnZU1hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lcmdlTWFwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tZXJnZUFsbCA9IHZvaWQgMDtcbnZhciBtZXJnZU1hcF8xID0gcmVxdWlyZShcIi4vbWVyZ2VNYXBcIik7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lkZW50aXR5XCIpO1xuZnVuY3Rpb24gbWVyZ2VBbGwoY29uY3VycmVudCkge1xuICAgIGlmIChjb25jdXJyZW50ID09PSB2b2lkIDApIHsgY29uY3VycmVudCA9IEluZmluaXR5OyB9XG4gICAgcmV0dXJuIG1lcmdlTWFwXzEubWVyZ2VNYXAoaWRlbnRpdHlfMS5pZGVudGl0eSwgY29uY3VycmVudCk7XG59XG5leHBvcnRzLm1lcmdlQWxsID0gbWVyZ2VBbGw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnZUFsbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29uY2F0QWxsID0gdm9pZCAwO1xudmFyIG1lcmdlQWxsXzEgPSByZXF1aXJlKFwiLi9tZXJnZUFsbFwiKTtcbmZ1bmN0aW9uIGNvbmNhdEFsbCgpIHtcbiAgICByZXR1cm4gbWVyZ2VBbGxfMS5tZXJnZUFsbCgxKTtcbn1cbmV4cG9ydHMuY29uY2F0QWxsID0gY29uY2F0QWxsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uY2F0QWxsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb25jYXQgPSB2b2lkIDA7XG52YXIgY29uY2F0QWxsXzEgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzL2NvbmNhdEFsbFwiKTtcbnZhciBhcmdzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcmdzXCIpO1xudmFyIGZyb21fMSA9IHJlcXVpcmUoXCIuL2Zyb21cIik7XG5mdW5jdGlvbiBjb25jYXQoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiBjb25jYXRBbGxfMS5jb25jYXRBbGwoKShmcm9tXzEuZnJvbShhcmdzLCBhcmdzXzEucG9wU2NoZWR1bGVyKGFyZ3MpKSk7XG59XG5leHBvcnRzLmNvbmNhdCA9IGNvbmNhdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmNhdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmZXIgPSB2b2lkIDA7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL09ic2VydmFibGVcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi9pbm5lckZyb21cIik7XG5mdW5jdGlvbiBkZWZlcihvYnNlcnZhYmxlRmFjdG9yeSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKG9ic2VydmFibGVGYWN0b3J5KCkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVmZXIgPSBkZWZlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb25uZWN0YWJsZSA9IHZvaWQgMDtcbnZhciBTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi4vU3ViamVjdFwiKTtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBkZWZlcl8xID0gcmVxdWlyZShcIi4vZGVmZXJcIik7XG52YXIgREVGQVVMVF9DT05GSUcgPSB7XG4gICAgY29ubmVjdG9yOiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgU3ViamVjdF8xLlN1YmplY3QoKTsgfSxcbiAgICByZXNldE9uRGlzY29ubmVjdDogdHJ1ZSxcbn07XG5mdW5jdGlvbiBjb25uZWN0YWJsZShzb3VyY2UsIGNvbmZpZykge1xuICAgIGlmIChjb25maWcgPT09IHZvaWQgMCkgeyBjb25maWcgPSBERUZBVUxUX0NPTkZJRzsgfVxuICAgIHZhciBjb25uZWN0aW9uID0gbnVsbDtcbiAgICB2YXIgY29ubmVjdG9yID0gY29uZmlnLmNvbm5lY3RvciwgX2EgPSBjb25maWcucmVzZXRPbkRpc2Nvbm5lY3QsIHJlc2V0T25EaXNjb25uZWN0ID0gX2EgPT09IHZvaWQgMCA/IHRydWUgOiBfYTtcbiAgICB2YXIgc3ViamVjdCA9IGNvbm5lY3RvcigpO1xuICAgIHZhciByZXN1bHQgPSBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Quc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH0pO1xuICAgIHJlc3VsdC5jb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWNvbm5lY3Rpb24gfHwgY29ubmVjdGlvbi5jbG9zZWQpIHtcbiAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBkZWZlcl8xLmRlZmVyKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNvdXJjZTsgfSkuc3Vic2NyaWJlKHN1YmplY3QpO1xuICAgICAgICAgICAgaWYgKHJlc2V0T25EaXNjb25uZWN0KSB7XG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5hZGQoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHN1YmplY3QgPSBjb25uZWN0b3IoKSk7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb25uZWN0aW9uO1xuICAgIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMuY29ubmVjdGFibGUgPSBjb25uZWN0YWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbm5lY3RhYmxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mb3JrSm9pbiA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBhcmdzQXJnQXJyYXlPck9iamVjdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc0FyZ0FycmF5T3JPYmplY3RcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi9pbm5lckZyb21cIik7XG52YXIgYXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc1wiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuLi9vcGVyYXRvcnMvT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xudmFyIG1hcE9uZU9yTWFueUFyZ3NfMSA9IHJlcXVpcmUoXCIuLi91dGlsL21hcE9uZU9yTWFueUFyZ3NcIik7XG52YXIgY3JlYXRlT2JqZWN0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9jcmVhdGVPYmplY3RcIik7XG5mdW5jdGlvbiBmb3JrSm9pbigpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdFNlbGVjdG9yID0gYXJnc18xLnBvcFJlc3VsdFNlbGVjdG9yKGFyZ3MpO1xuICAgIHZhciBfYSA9IGFyZ3NBcmdBcnJheU9yT2JqZWN0XzEuYXJnc0FyZ0FycmF5T3JPYmplY3QoYXJncyksIHNvdXJjZXMgPSBfYS5hcmdzLCBrZXlzID0gX2Eua2V5cztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgICAgIHZhciByZW1haW5pbmdDb21wbGV0aW9ucyA9IGxlbmd0aDtcbiAgICAgICAgdmFyIHJlbWFpbmluZ0VtaXNzaW9ucyA9IGxlbmd0aDtcbiAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoc291cmNlSW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKHNvdXJjZXNbc291cmNlSW5kZXhdKS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICghaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdFbWlzc2lvbnMtLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsdWVzW3NvdXJjZUluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVtYWluaW5nQ29tcGxldGlvbnMtLTsgfSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdDb21wbGV0aW9ucyB8fCAhaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdFbWlzc2lvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChrZXlzID8gY3JlYXRlT2JqZWN0XzEuY3JlYXRlT2JqZWN0KGtleXMsIHZhbHVlcykgOiB2YWx1ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAodmFyIHNvdXJjZUluZGV4ID0gMDsgc291cmNlSW5kZXggPCBsZW5ndGg7IHNvdXJjZUluZGV4KyspIHtcbiAgICAgICAgICAgIF9sb29wXzEoc291cmNlSW5kZXgpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdFNlbGVjdG9yID8gcmVzdWx0LnBpcGUobWFwT25lT3JNYW55QXJnc18xLm1hcE9uZU9yTWFueUFyZ3MocmVzdWx0U2VsZWN0b3IpKSA6IHJlc3VsdDtcbn1cbmV4cG9ydHMuZm9ya0pvaW4gPSBmb3JrSm9pbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZvcmtKb2luLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tRXZlbnQgPSB2b2lkIDA7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL09ic2VydmFibGVcIik7XG52YXIgbWVyZ2VNYXBfMSA9IHJlcXVpcmUoXCIuLi9vcGVyYXRvcnMvbWVyZ2VNYXBcIik7XG52YXIgaXNBcnJheUxpa2VfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzQXJyYXlMaWtlXCIpO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRnVuY3Rpb25cIik7XG52YXIgbWFwT25lT3JNYW55QXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvbWFwT25lT3JNYW55QXJnc1wiKTtcbnZhciBub2RlRXZlbnRFbWl0dGVyTWV0aG9kcyA9IFsnYWRkTGlzdGVuZXInLCAncmVtb3ZlTGlzdGVuZXInXTtcbnZhciBldmVudFRhcmdldE1ldGhvZHMgPSBbJ2FkZEV2ZW50TGlzdGVuZXInLCAncmVtb3ZlRXZlbnRMaXN0ZW5lciddO1xudmFyIGpxdWVyeU1ldGhvZHMgPSBbJ29uJywgJ29mZiddO1xuZnVuY3Rpb24gZnJvbUV2ZW50KHRhcmdldCwgZXZlbnROYW1lLCBvcHRpb25zLCByZXN1bHRTZWxlY3Rvcikge1xuICAgIGlmIChpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbihvcHRpb25zKSkge1xuICAgICAgICByZXN1bHRTZWxlY3RvciA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChyZXN1bHRTZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gZnJvbUV2ZW50KHRhcmdldCwgZXZlbnROYW1lLCBvcHRpb25zKS5waXBlKG1hcE9uZU9yTWFueUFyZ3NfMS5tYXBPbmVPck1hbnlBcmdzKHJlc3VsdFNlbGVjdG9yKSk7XG4gICAgfVxuICAgIHZhciBfYSA9IF9fcmVhZChpc0V2ZW50VGFyZ2V0KHRhcmdldClcbiAgICAgICAgPyBldmVudFRhcmdldE1ldGhvZHMubWFwKGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7IHJldHVybiBmdW5jdGlvbiAoaGFuZGxlcikgeyByZXR1cm4gdGFyZ2V0W21ldGhvZE5hbWVdKGV2ZW50TmFtZSwgaGFuZGxlciwgb3B0aW9ucyk7IH07IH0pXG4gICAgICAgIDpcbiAgICAgICAgICAgIGlzTm9kZVN0eWxlRXZlbnRFbWl0dGVyKHRhcmdldClcbiAgICAgICAgICAgICAgICA/IG5vZGVFdmVudEVtaXR0ZXJNZXRob2RzLm1hcCh0b0NvbW1vbkhhbmRsZXJSZWdpc3RyeSh0YXJnZXQsIGV2ZW50TmFtZSkpXG4gICAgICAgICAgICAgICAgOiBpc0pRdWVyeVN0eWxlRXZlbnRFbWl0dGVyKHRhcmdldClcbiAgICAgICAgICAgICAgICAgICAgPyBqcXVlcnlNZXRob2RzLm1hcCh0b0NvbW1vbkhhbmRsZXJSZWdpc3RyeSh0YXJnZXQsIGV2ZW50TmFtZSkpXG4gICAgICAgICAgICAgICAgICAgIDogW10sIDIpLCBhZGQgPSBfYVswXSwgcmVtb3ZlID0gX2FbMV07XG4gICAgaWYgKCFhZGQpIHtcbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlXzEuaXNBcnJheUxpa2UodGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG1lcmdlTWFwXzEubWVyZ2VNYXAoZnVuY3Rpb24gKHN1YlRhcmdldCkgeyByZXR1cm4gZnJvbUV2ZW50KHN1YlRhcmdldCwgZXZlbnROYW1lLCBvcHRpb25zKTsgfSkoaW5uZXJGcm9tXzEuaW5uZXJGcm9tKHRhcmdldCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghYWRkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgZXZlbnQgdGFyZ2V0Jyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3Vic2NyaWJlci5uZXh0KDEgPCBhcmdzLmxlbmd0aCA/IGFyZ3MgOiBhcmdzWzBdKTtcbiAgICAgICAgfTtcbiAgICAgICAgYWRkKGhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVtb3ZlKGhhbmRsZXIpOyB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5mcm9tRXZlbnQgPSBmcm9tRXZlbnQ7XG5mdW5jdGlvbiB0b0NvbW1vbkhhbmRsZXJSZWdpc3RyeSh0YXJnZXQsIGV2ZW50TmFtZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAobWV0aG9kTmFtZSkgeyByZXR1cm4gZnVuY3Rpb24gKGhhbmRsZXIpIHsgcmV0dXJuIHRhcmdldFttZXRob2ROYW1lXShldmVudE5hbWUsIGhhbmRsZXIpOyB9OyB9O1xufVxuZnVuY3Rpb24gaXNOb2RlU3R5bGVFdmVudEVtaXR0ZXIodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHRhcmdldC5hZGRMaXN0ZW5lcikgJiYgaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24odGFyZ2V0LnJlbW92ZUxpc3RlbmVyKTtcbn1cbmZ1bmN0aW9uIGlzSlF1ZXJ5U3R5bGVFdmVudEVtaXR0ZXIodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHRhcmdldC5vbikgJiYgaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24odGFyZ2V0Lm9mZik7XG59XG5mdW5jdGlvbiBpc0V2ZW50VGFyZ2V0KHRhcmdldCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbih0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcikgJiYgaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24odGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZnJvbUV2ZW50LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mcm9tRXZlbnRQYXR0ZXJuID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRnVuY3Rpb25cIik7XG52YXIgbWFwT25lT3JNYW55QXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvbWFwT25lT3JNYW55QXJnc1wiKTtcbmZ1bmN0aW9uIGZyb21FdmVudFBhdHRlcm4oYWRkSGFuZGxlciwgcmVtb3ZlSGFuZGxlciwgcmVzdWx0U2VsZWN0b3IpIHtcbiAgICBpZiAocmVzdWx0U2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZyb21FdmVudFBhdHRlcm4oYWRkSGFuZGxlciwgcmVtb3ZlSGFuZGxlcikucGlwZShtYXBPbmVPck1hbnlBcmdzXzEubWFwT25lT3JNYW55QXJncyhyZXN1bHRTZWxlY3RvcikpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGUgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgZVtfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN1YnNjcmliZXIubmV4dChlLmxlbmd0aCA9PT0gMSA/IGVbMF0gOiBlKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJldFZhbHVlID0gYWRkSGFuZGxlcihoYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHJlbW92ZUhhbmRsZXIpID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVtb3ZlSGFuZGxlcihoYW5kbGVyLCByZXRWYWx1ZSk7IH0gOiB1bmRlZmluZWQ7XG4gICAgfSk7XG59XG5leHBvcnRzLmZyb21FdmVudFBhdHRlcm4gPSBmcm9tRXZlbnRQYXR0ZXJuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZnJvbUV2ZW50UGF0dGVybi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZW5lcmF0ZSA9IHZvaWQgMDtcbnZhciBpZGVudGl0eV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaWRlbnRpdHlcIik7XG52YXIgaXNTY2hlZHVsZXJfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzU2NoZWR1bGVyXCIpO1xudmFyIGRlZmVyXzEgPSByZXF1aXJlKFwiLi9kZWZlclwiKTtcbnZhciBzY2hlZHVsZUl0ZXJhYmxlXzEgPSByZXF1aXJlKFwiLi4vc2NoZWR1bGVkL3NjaGVkdWxlSXRlcmFibGVcIik7XG5mdW5jdGlvbiBnZW5lcmF0ZShpbml0aWFsU3RhdGVPck9wdGlvbnMsIGNvbmRpdGlvbiwgaXRlcmF0ZSwgcmVzdWx0U2VsZWN0b3JPclNjaGVkdWxlciwgc2NoZWR1bGVyKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICB2YXIgcmVzdWx0U2VsZWN0b3I7XG4gICAgdmFyIGluaXRpYWxTdGF0ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAoX2EgPSBpbml0aWFsU3RhdGVPck9wdGlvbnMsIGluaXRpYWxTdGF0ZSA9IF9hLmluaXRpYWxTdGF0ZSwgY29uZGl0aW9uID0gX2EuY29uZGl0aW9uLCBpdGVyYXRlID0gX2EuaXRlcmF0ZSwgX2IgPSBfYS5yZXN1bHRTZWxlY3RvciwgcmVzdWx0U2VsZWN0b3IgPSBfYiA9PT0gdm9pZCAwID8gaWRlbnRpdHlfMS5pZGVudGl0eSA6IF9iLCBzY2hlZHVsZXIgPSBfYS5zY2hlZHVsZXIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlT3JPcHRpb25zO1xuICAgICAgICBpZiAoIXJlc3VsdFNlbGVjdG9yT3JTY2hlZHVsZXIgfHwgaXNTY2hlZHVsZXJfMS5pc1NjaGVkdWxlcihyZXN1bHRTZWxlY3Rvck9yU2NoZWR1bGVyKSkge1xuICAgICAgICAgICAgcmVzdWx0U2VsZWN0b3IgPSBpZGVudGl0eV8xLmlkZW50aXR5O1xuICAgICAgICAgICAgc2NoZWR1bGVyID0gcmVzdWx0U2VsZWN0b3JPclNjaGVkdWxlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdFNlbGVjdG9yID0gcmVzdWx0U2VsZWN0b3JPclNjaGVkdWxlcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZW4oKSB7XG4gICAgICAgIHZhciBzdGF0ZTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKCFjb25kaXRpb24gfHwgY29uZGl0aW9uKHN0YXRlKSkpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgcmVzdWx0U2VsZWN0b3Ioc3RhdGUpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSAzO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBpdGVyYXRlKHN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAxXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZGVmZXJfMS5kZWZlcigoc2NoZWR1bGVyXG4gICAgICAgID9cbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjaGVkdWxlSXRlcmFibGVfMS5zY2hlZHVsZUl0ZXJhYmxlKGdlbigpLCBzY2hlZHVsZXIpOyB9XG4gICAgICAgIDpcbiAgICAgICAgICAgIGdlbikpO1xufVxuZXhwb3J0cy5nZW5lcmF0ZSA9IGdlbmVyYXRlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2VuZXJhdGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlpZiA9IHZvaWQgMDtcbnZhciBkZWZlcl8xID0gcmVxdWlyZShcIi4vZGVmZXJcIik7XG5mdW5jdGlvbiBpaWYoY29uZGl0aW9uLCB0cnVlUmVzdWx0LCBmYWxzZVJlc3VsdCkge1xuICAgIHJldHVybiBkZWZlcl8xLmRlZmVyKGZ1bmN0aW9uICgpIHsgcmV0dXJuIChjb25kaXRpb24oKSA/IHRydWVSZXN1bHQgOiBmYWxzZVJlc3VsdCk7IH0pO1xufVxuZXhwb3J0cy5paWYgPSBpaWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1paWYuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRpbWVyID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xudmFyIGFzeW5jXzEgPSByZXF1aXJlKFwiLi4vc2NoZWR1bGVyL2FzeW5jXCIpO1xudmFyIGlzU2NoZWR1bGVyXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc1NjaGVkdWxlclwiKTtcbnZhciBpc0RhdGVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRGF0ZVwiKTtcbmZ1bmN0aW9uIHRpbWVyKGR1ZVRpbWUsIGludGVydmFsT3JTY2hlZHVsZXIsIHNjaGVkdWxlcikge1xuICAgIGlmIChkdWVUaW1lID09PSB2b2lkIDApIHsgZHVlVGltZSA9IDA7IH1cbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsgc2NoZWR1bGVyID0gYXN5bmNfMS5hc3luYzsgfVxuICAgIHZhciBpbnRlcnZhbER1cmF0aW9uID0gLTE7XG4gICAgaWYgKGludGVydmFsT3JTY2hlZHVsZXIgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNTY2hlZHVsZXJfMS5pc1NjaGVkdWxlcihpbnRlcnZhbE9yU2NoZWR1bGVyKSkge1xuICAgICAgICAgICAgc2NoZWR1bGVyID0gaW50ZXJ2YWxPclNjaGVkdWxlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGludGVydmFsRHVyYXRpb24gPSBpbnRlcnZhbE9yU2NoZWR1bGVyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGR1ZSA9IGlzRGF0ZV8xLmlzVmFsaWREYXRlKGR1ZVRpbWUpID8gK2R1ZVRpbWUgLSBzY2hlZHVsZXIubm93KCkgOiBkdWVUaW1lO1xuICAgICAgICBpZiAoZHVlIDwgMCkge1xuICAgICAgICAgICAgZHVlID0gMDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbiA9IDA7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChuKyspO1xuICAgICAgICAgICAgICAgIGlmICgwIDw9IGludGVydmFsRHVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2hlZHVsZSh1bmRlZmluZWQsIGludGVydmFsRHVyYXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZHVlKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMudGltZXIgPSB0aW1lcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pbnRlcnZhbCA9IHZvaWQgMDtcbnZhciBhc3luY18xID0gcmVxdWlyZShcIi4uL3NjaGVkdWxlci9hc3luY1wiKTtcbnZhciB0aW1lcl8xID0gcmVxdWlyZShcIi4vdGltZXJcIik7XG5mdW5jdGlvbiBpbnRlcnZhbChwZXJpb2QsIHNjaGVkdWxlcikge1xuICAgIGlmIChwZXJpb2QgPT09IHZvaWQgMCkgeyBwZXJpb2QgPSAwOyB9XG4gICAgaWYgKHNjaGVkdWxlciA9PT0gdm9pZCAwKSB7IHNjaGVkdWxlciA9IGFzeW5jXzEuYXN5bmNTY2hlZHVsZXI7IH1cbiAgICBpZiAocGVyaW9kIDwgMCkge1xuICAgICAgICBwZXJpb2QgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gdGltZXJfMS50aW1lcihwZXJpb2QsIHBlcmlvZCwgc2NoZWR1bGVyKTtcbn1cbmV4cG9ydHMuaW50ZXJ2YWwgPSBpbnRlcnZhbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVydmFsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tZXJnZSA9IHZvaWQgMDtcbnZhciBtZXJnZUFsbF8xID0gcmVxdWlyZShcIi4uL29wZXJhdG9ycy9tZXJnZUFsbFwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuL2lubmVyRnJvbVwiKTtcbnZhciBlbXB0eV8xID0gcmVxdWlyZShcIi4vZW1wdHlcIik7XG52YXIgYXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc1wiKTtcbnZhciBmcm9tXzEgPSByZXF1aXJlKFwiLi9mcm9tXCIpO1xuZnVuY3Rpb24gbWVyZ2UoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBzY2hlZHVsZXIgPSBhcmdzXzEucG9wU2NoZWR1bGVyKGFyZ3MpO1xuICAgIHZhciBjb25jdXJyZW50ID0gYXJnc18xLnBvcE51bWJlcihhcmdzLCBJbmZpbml0eSk7XG4gICAgdmFyIHNvdXJjZXMgPSBhcmdzO1xuICAgIHJldHVybiAhc291cmNlcy5sZW5ndGhcbiAgICAgICAgP1xuICAgICAgICAgICAgZW1wdHlfMS5FTVBUWVxuICAgICAgICA6IHNvdXJjZXMubGVuZ3RoID09PSAxXG4gICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKHNvdXJjZXNbMF0pXG4gICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgbWVyZ2VBbGxfMS5tZXJnZUFsbChjb25jdXJyZW50KShmcm9tXzEuZnJvbShzb3VyY2VzLCBzY2hlZHVsZXIpKTtcbn1cbmV4cG9ydHMubWVyZ2UgPSBtZXJnZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lcmdlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5uZXZlciA9IGV4cG9ydHMuTkVWRVIgPSB2b2lkIDA7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL09ic2VydmFibGVcIik7XG52YXIgbm9vcF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbm9vcFwiKTtcbmV4cG9ydHMuTkVWRVIgPSBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUobm9vcF8xLm5vb3ApO1xuZnVuY3Rpb24gbmV2ZXIoKSB7XG4gICAgcmV0dXJuIGV4cG9ydHMuTkVWRVI7XG59XG5leHBvcnRzLm5ldmVyID0gbmV2ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1uZXZlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXJnc09yQXJnQXJyYXkgPSB2b2lkIDA7XG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5mdW5jdGlvbiBhcmdzT3JBcmdBcnJheShhcmdzKSB7XG4gICAgcmV0dXJuIGFyZ3MubGVuZ3RoID09PSAxICYmIGlzQXJyYXkoYXJnc1swXSkgPyBhcmdzWzBdIDogYXJncztcbn1cbmV4cG9ydHMuYXJnc09yQXJnQXJyYXkgPSBhcmdzT3JBcmdBcnJheTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFyZ3NPckFyZ0FycmF5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5vbkVycm9yUmVzdW1lTmV4dCA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBhcmdzT3JBcmdBcnJheV8xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc09yQXJnQXJyYXlcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBub29wXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9ub29wXCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4vaW5uZXJGcm9tXCIpO1xuZnVuY3Rpb24gb25FcnJvclJlc3VtZU5leHQoKSB7XG4gICAgdmFyIHNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBzb3VyY2VzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBuZXh0U291cmNlcyA9IGFyZ3NPckFyZ0FycmF5XzEuYXJnc09yQXJnQXJyYXkoc291cmNlcyk7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgc291cmNlSW5kZXggPSAwO1xuICAgICAgICB2YXIgc3Vic2NyaWJlTmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChzb3VyY2VJbmRleCA8IG5leHRTb3VyY2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBuZXh0U291cmNlID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRTb3VyY2UgPSBpbm5lckZyb21fMS5pbm5lckZyb20obmV4dFNvdXJjZXNbc291cmNlSW5kZXgrK10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZU5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJTdWJzY3JpYmVyID0gbmV3IE9wZXJhdG9yU3Vic2NyaWJlcl8xLk9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB1bmRlZmluZWQsIG5vb3BfMS5ub29wLCBub29wXzEubm9vcCk7XG4gICAgICAgICAgICAgICAgbmV4dFNvdXJjZS5zdWJzY3JpYmUoaW5uZXJTdWJzY3JpYmVyKTtcbiAgICAgICAgICAgICAgICBpbm5lclN1YnNjcmliZXIuYWRkKHN1YnNjcmliZU5leHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzdWJzY3JpYmVOZXh0KCk7XG4gICAgfSk7XG59XG5leHBvcnRzLm9uRXJyb3JSZXN1bWVOZXh0ID0gb25FcnJvclJlc3VtZU5leHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vbkVycm9yUmVzdW1lTmV4dC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGFpcnMgPSB2b2lkIDA7XG52YXIgZnJvbV8xID0gcmVxdWlyZShcIi4vZnJvbVwiKTtcbmZ1bmN0aW9uIHBhaXJzKG9iaiwgc2NoZWR1bGVyKSB7XG4gICAgcmV0dXJuIGZyb21fMS5mcm9tKE9iamVjdC5lbnRyaWVzKG9iaiksIHNjaGVkdWxlcik7XG59XG5leHBvcnRzLnBhaXJzID0gcGFpcnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYWlycy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubm90ID0gdm9pZCAwO1xuZnVuY3Rpb24gbm90KHByZWQsIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkgeyByZXR1cm4gIXByZWQuY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaW5kZXgpOyB9O1xufVxuZXhwb3J0cy5ub3QgPSBub3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZpbHRlciA9IHZvaWQgMDtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gZmlsdGVyKHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gcHJlZGljYXRlLmNhbGwodGhpc0FyZywgdmFsdWUsIGluZGV4KyspICYmIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7IH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZmlsdGVyID0gZmlsdGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmlsdGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJ0aXRpb24gPSB2b2lkIDA7XG52YXIgbm90XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9ub3RcIik7XG52YXIgZmlsdGVyXzEgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzL2ZpbHRlclwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuL2lubmVyRnJvbVwiKTtcbmZ1bmN0aW9uIHBhcnRpdGlvbihzb3VyY2UsIHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgIHJldHVybiBbZmlsdGVyXzEuZmlsdGVyKHByZWRpY2F0ZSwgdGhpc0FyZykoaW5uZXJGcm9tXzEuaW5uZXJGcm9tKHNvdXJjZSkpLCBmaWx0ZXJfMS5maWx0ZXIobm90XzEubm90KHByZWRpY2F0ZSwgdGhpc0FyZykpKGlubmVyRnJvbV8xLmlubmVyRnJvbShzb3VyY2UpKV07XG59XG5leHBvcnRzLnBhcnRpdGlvbiA9IHBhcnRpdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhcnRpdGlvbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmFjZUluaXQgPSBleHBvcnRzLnJhY2UgPSB2b2lkIDA7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL09ic2VydmFibGVcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi9pbm5lckZyb21cIik7XG52YXIgYXJnc09yQXJnQXJyYXlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyZ3NPckFyZ0FycmF5XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4uL29wZXJhdG9ycy9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiByYWNlKCkge1xuICAgIHZhciBzb3VyY2VzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgc291cmNlc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICBzb3VyY2VzID0gYXJnc09yQXJnQXJyYXlfMS5hcmdzT3JBcmdBcnJheShzb3VyY2VzKTtcbiAgICByZXR1cm4gc291cmNlcy5sZW5ndGggPT09IDEgPyBpbm5lckZyb21fMS5pbm5lckZyb20oc291cmNlc1swXSkgOiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUocmFjZUluaXQoc291cmNlcykpO1xufVxuZXhwb3J0cy5yYWNlID0gcmFjZTtcbmZ1bmN0aW9uIHJhY2VJbml0KHNvdXJjZXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5wdXNoKGlubmVyRnJvbV8xLmlubmVyRnJvbShzb3VyY2VzW2ldKS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHMgPSAwOyBzIDwgc3Vic2NyaXB0aW9ucy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcyAhPT0gaSAmJiBzdWJzY3JpcHRpb25zW3NdLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICB9O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgc3Vic2NyaXB0aW9ucyAmJiAhc3Vic2NyaWJlci5jbG9zZWQgJiYgaSA8IHNvdXJjZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIF9sb29wXzEoaSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZXhwb3J0cy5yYWNlSW5pdCA9IHJhY2VJbml0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmFjZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmFuZ2UgPSB2b2lkIDA7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL09ic2VydmFibGVcIik7XG52YXIgZW1wdHlfMSA9IHJlcXVpcmUoXCIuL2VtcHR5XCIpO1xuZnVuY3Rpb24gcmFuZ2Uoc3RhcnQsIGNvdW50LCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoY291bnQgPT0gbnVsbCkge1xuICAgICAgICBjb3VudCA9IHN0YXJ0O1xuICAgICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIGlmIChjb3VudCA8PSAwKSB7XG4gICAgICAgIHJldHVybiBlbXB0eV8xLkVNUFRZO1xuICAgIH1cbiAgICB2YXIgZW5kID0gY291bnQgKyBzdGFydDtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKHNjaGVkdWxlclxuICAgICAgICA/XG4gICAgICAgICAgICBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgICAgIHZhciBuID0gc3RhcnQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobisrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NoZWR1bGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICA6XG4gICAgICAgICAgICBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgICAgIHZhciBuID0gc3RhcnQ7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG4gPCBlbmQgJiYgIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChuKyspO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KTtcbn1cbmV4cG9ydHMucmFuZ2UgPSByYW5nZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJhbmdlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51c2luZyA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuL2lubmVyRnJvbVwiKTtcbnZhciBlbXB0eV8xID0gcmVxdWlyZShcIi4vZW1wdHlcIik7XG5mdW5jdGlvbiB1c2luZyhyZXNvdXJjZUZhY3RvcnksIG9ic2VydmFibGVGYWN0b3J5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgcmVzb3VyY2UgPSByZXNvdXJjZUZhY3RvcnkoKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG9ic2VydmFibGVGYWN0b3J5KHJlc291cmNlKTtcbiAgICAgICAgdmFyIHNvdXJjZSA9IHJlc3VsdCA/IGlubmVyRnJvbV8xLmlubmVyRnJvbShyZXN1bHQpIDogZW1wdHlfMS5FTVBUWTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHJlc291cmNlLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLnVzaW5nID0gdXNpbmc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2luZy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnppcCA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuL2lubmVyRnJvbVwiKTtcbnZhciBhcmdzT3JBcmdBcnJheV8xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc09yQXJnQXJyYXlcIik7XG52YXIgZW1wdHlfMSA9IHJlcXVpcmUoXCIuL2VtcHR5XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4uL29wZXJhdG9ycy9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgYXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc1wiKTtcbmZ1bmN0aW9uIHppcCgpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdFNlbGVjdG9yID0gYXJnc18xLnBvcFJlc3VsdFNlbGVjdG9yKGFyZ3MpO1xuICAgIHZhciBzb3VyY2VzID0gYXJnc09yQXJnQXJyYXlfMS5hcmdzT3JBcmdBcnJheShhcmdzKTtcbiAgICByZXR1cm4gc291cmNlcy5sZW5ndGhcbiAgICAgICAgPyBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIHZhciBidWZmZXJzID0gc291cmNlcy5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gW107IH0pO1xuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IHNvdXJjZXMubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZhbHNlOyB9KTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBidWZmZXJzID0gY29tcGxldGVkID0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoc291cmNlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBpbm5lckZyb21fMS5pbm5lckZyb20oc291cmNlc1tzb3VyY2VJbmRleF0pLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnNbc291cmNlSW5kZXhdLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVycy5ldmVyeShmdW5jdGlvbiAoYnVmZmVyKSB7IHJldHVybiBidWZmZXIubGVuZ3RoOyB9KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGJ1ZmZlcnMubWFwKGZ1bmN0aW9uIChidWZmZXIpIHsgcmV0dXJuIGJ1ZmZlci5zaGlmdCgpOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChyZXN1bHRTZWxlY3RvciA/IHJlc3VsdFNlbGVjdG9yLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbXSwgX19yZWFkKHJlc3VsdCkpKSA6IHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVycy5zb21lKGZ1bmN0aW9uIChidWZmZXIsIGkpIHsgcmV0dXJuICFidWZmZXIubGVuZ3RoICYmIGNvbXBsZXRlZFtpXTsgfSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZFtzb3VyY2VJbmRleF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAhYnVmZmVyc1tzb3VyY2VJbmRleF0ubGVuZ3RoICYmIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yICh2YXIgc291cmNlSW5kZXggPSAwOyAhc3Vic2NyaWJlci5jbG9zZWQgJiYgc291cmNlSW5kZXggPCBzb3VyY2VzLmxlbmd0aDsgc291cmNlSW5kZXgrKykge1xuICAgICAgICAgICAgICAgIF9sb29wXzEoc291cmNlSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBidWZmZXJzID0gY29tcGxldGVkID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICAgIDogZW1wdHlfMS5FTVBUWTtcbn1cbmV4cG9ydHMuemlwID0gemlwO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9emlwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmF1ZGl0ID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBhdWRpdChkdXJhdGlvblNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHZhciBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB2YXIgZHVyYXRpb25TdWJzY3JpYmVyID0gbnVsbDtcbiAgICAgICAgdmFyIGlzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVuZER1cmF0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZHVyYXRpb25TdWJzY3JpYmVyID09PSBudWxsIHx8IGR1cmF0aW9uU3Vic2NyaWJlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZHVyYXRpb25TdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGhhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBsYXN0VmFsdWU7XG4gICAgICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXNDb21wbGV0ZSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBjbGVhbnVwRHVyYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsO1xuICAgICAgICAgICAgaXNDb21wbGV0ZSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgbGFzdFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAoIWR1cmF0aW9uU3Vic2NyaWJlcikge1xuICAgICAgICAgICAgICAgIGlubmVyRnJvbV8xLmlubmVyRnJvbShkdXJhdGlvblNlbGVjdG9yKHZhbHVlKSkuc3Vic2NyaWJlKChkdXJhdGlvblN1YnNjcmliZXIgPSBPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZW5kRHVyYXRpb24sIGNsZWFudXBEdXJhdGlvbikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAoIWhhc1ZhbHVlIHx8ICFkdXJhdGlvblN1YnNjcmliZXIgfHwgZHVyYXRpb25TdWJzY3JpYmVyLmNsb3NlZCkgJiYgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmF1ZGl0ID0gYXVkaXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hdWRpdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXVkaXRUaW1lID0gdm9pZCAwO1xudmFyIGFzeW5jXzEgPSByZXF1aXJlKFwiLi4vc2NoZWR1bGVyL2FzeW5jXCIpO1xudmFyIGF1ZGl0XzEgPSByZXF1aXJlKFwiLi9hdWRpdFwiKTtcbnZhciB0aW1lcl8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvdGltZXJcIik7XG5mdW5jdGlvbiBhdWRpdFRpbWUoZHVyYXRpb24sIHNjaGVkdWxlcikge1xuICAgIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkgeyBzY2hlZHVsZXIgPSBhc3luY18xLmFzeW5jU2NoZWR1bGVyOyB9XG4gICAgcmV0dXJuIGF1ZGl0XzEuYXVkaXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGltZXJfMS50aW1lcihkdXJhdGlvbiwgc2NoZWR1bGVyKTsgfSk7XG59XG5leHBvcnRzLmF1ZGl0VGltZSA9IGF1ZGl0VGltZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF1ZGl0VGltZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYnVmZmVyID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgbm9vcF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbm9vcFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbmZ1bmN0aW9uIGJ1ZmZlcihjbG9zaW5nTm90aWZpZXIpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgY3VycmVudEJ1ZmZlciA9IFtdO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIGN1cnJlbnRCdWZmZXIucHVzaCh2YWx1ZSk7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChjdXJyZW50QnVmZmVyKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSkpO1xuICAgICAgICBpbm5lckZyb21fMS5pbm5lckZyb20oY2xvc2luZ05vdGlmaWVyKS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBiID0gY3VycmVudEJ1ZmZlcjtcbiAgICAgICAgICAgIGN1cnJlbnRCdWZmZXIgPSBbXTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChiKTtcbiAgICAgICAgfSwgbm9vcF8xLm5vb3ApKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGN1cnJlbnRCdWZmZXIgPSBudWxsO1xuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy5idWZmZXIgPSBidWZmZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1idWZmZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX192YWx1ZXMgPSAodGhpcyAmJiB0aGlzLl9fdmFsdWVzKSB8fCBmdW5jdGlvbihvKSB7XG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJ1ZmZlckNvdW50ID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgYXJyUmVtb3ZlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcnJSZW1vdmVcIik7XG5mdW5jdGlvbiBidWZmZXJDb3VudChidWZmZXJTaXplLCBzdGFydEJ1ZmZlckV2ZXJ5KSB7XG4gICAgaWYgKHN0YXJ0QnVmZmVyRXZlcnkgPT09IHZvaWQgMCkgeyBzdGFydEJ1ZmZlckV2ZXJ5ID0gbnVsbDsgfVxuICAgIHN0YXJ0QnVmZmVyRXZlcnkgPSBzdGFydEJ1ZmZlckV2ZXJ5ICE9PSBudWxsICYmIHN0YXJ0QnVmZmVyRXZlcnkgIT09IHZvaWQgMCA/IHN0YXJ0QnVmZmVyRXZlcnkgOiBidWZmZXJTaXplO1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBidWZmZXJzID0gW107XG4gICAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2EsIGVfMiwgX2I7XG4gICAgICAgICAgICB2YXIgdG9FbWl0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChjb3VudCsrICUgc3RhcnRCdWZmZXJFdmVyeSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGJ1ZmZlcnNfMSA9IF9fdmFsdWVzKGJ1ZmZlcnMpLCBidWZmZXJzXzFfMSA9IGJ1ZmZlcnNfMS5uZXh0KCk7ICFidWZmZXJzXzFfMS5kb25lOyBidWZmZXJzXzFfMSA9IGJ1ZmZlcnNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGJ1ZmZlcnNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBidWZmZXIucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJTaXplIDw9IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvRW1pdCA9IHRvRW1pdCAhPT0gbnVsbCAmJiB0b0VtaXQgIT09IHZvaWQgMCA/IHRvRW1pdCA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9FbWl0LnB1c2goYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyc18xXzEgJiYgIWJ1ZmZlcnNfMV8xLmRvbmUgJiYgKF9hID0gYnVmZmVyc18xLnJldHVybikpIF9hLmNhbGwoYnVmZmVyc18xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRvRW1pdCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHRvRW1pdF8xID0gX192YWx1ZXModG9FbWl0KSwgdG9FbWl0XzFfMSA9IHRvRW1pdF8xLm5leHQoKTsgIXRvRW1pdF8xXzEuZG9uZTsgdG9FbWl0XzFfMSA9IHRvRW1pdF8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHRvRW1pdF8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJSZW1vdmVfMS5hcnJSZW1vdmUoYnVmZmVycywgYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9FbWl0XzFfMSAmJiAhdG9FbWl0XzFfMS5kb25lICYmIChfYiA9IHRvRW1pdF8xLnJldHVybikpIF9iLmNhbGwodG9FbWl0XzEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBlXzMsIF9hO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBidWZmZXJzXzIgPSBfX3ZhbHVlcyhidWZmZXJzKSwgYnVmZmVyc18yXzEgPSBidWZmZXJzXzIubmV4dCgpOyAhYnVmZmVyc18yXzEuZG9uZTsgYnVmZmVyc18yXzEgPSBidWZmZXJzXzIubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBidWZmZXJzXzJfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfM18xKSB7IGVfMyA9IHsgZXJyb3I6IGVfM18xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJzXzJfMSAmJiAhYnVmZmVyc18yXzEuZG9uZSAmJiAoX2EgPSBidWZmZXJzXzIucmV0dXJuKSkgX2EuY2FsbChidWZmZXJzXzIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMykgdGhyb3cgZV8zLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0sIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYnVmZmVycyA9IG51bGw7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuYnVmZmVyQ291bnQgPSBidWZmZXJDb3VudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1ZmZlckNvdW50LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fdmFsdWVzID0gKHRoaXMgJiYgdGhpcy5fX3ZhbHVlcykgfHwgZnVuY3Rpb24obykge1xuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5idWZmZXJUaW1lID0gdm9pZCAwO1xudmFyIFN1YnNjcmlwdGlvbl8xID0gcmVxdWlyZShcIi4uL1N1YnNjcmlwdGlvblwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xudmFyIGFyclJlbW92ZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJyUmVtb3ZlXCIpO1xudmFyIGFzeW5jXzEgPSByZXF1aXJlKFwiLi4vc2NoZWR1bGVyL2FzeW5jXCIpO1xudmFyIGFyZ3NfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyZ3NcIik7XG52YXIgZXhlY3V0ZVNjaGVkdWxlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9leGVjdXRlU2NoZWR1bGVcIik7XG5mdW5jdGlvbiBidWZmZXJUaW1lKGJ1ZmZlclRpbWVTcGFuKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICB2YXIgb3RoZXJBcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgb3RoZXJBcmdzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgc2NoZWR1bGVyID0gKF9hID0gYXJnc18xLnBvcFNjaGVkdWxlcihvdGhlckFyZ3MpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBhc3luY18xLmFzeW5jU2NoZWR1bGVyO1xuICAgIHZhciBidWZmZXJDcmVhdGlvbkludGVydmFsID0gKF9iID0gb3RoZXJBcmdzWzBdKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBudWxsO1xuICAgIHZhciBtYXhCdWZmZXJTaXplID0gb3RoZXJBcmdzWzFdIHx8IEluZmluaXR5O1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBidWZmZXJSZWNvcmRzID0gW107XG4gICAgICAgIHZhciByZXN0YXJ0T25FbWl0ID0gZmFsc2U7XG4gICAgICAgIHZhciBlbWl0ID0gZnVuY3Rpb24gKHJlY29yZCkge1xuICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHJlY29yZC5idWZmZXIsIHN1YnMgPSByZWNvcmQuc3VicztcbiAgICAgICAgICAgIHN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGFyclJlbW92ZV8xLmFyclJlbW92ZShidWZmZXJSZWNvcmRzLCByZWNvcmQpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGJ1ZmZlcik7XG4gICAgICAgICAgICByZXN0YXJ0T25FbWl0ICYmIHN0YXJ0QnVmZmVyKCk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBzdGFydEJ1ZmZlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChidWZmZXJSZWNvcmRzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN1YnMgPSBuZXcgU3Vic2NyaXB0aW9uXzEuU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5hZGQoc3Vicyk7XG4gICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciByZWNvcmRfMSA9IHtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyOiBidWZmZXIsXG4gICAgICAgICAgICAgICAgICAgIHN1YnM6IHN1YnMsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBidWZmZXJSZWNvcmRzLnB1c2gocmVjb3JkXzEpO1xuICAgICAgICAgICAgICAgIGV4ZWN1dGVTY2hlZHVsZV8xLmV4ZWN1dGVTY2hlZHVsZShzdWJzLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVtaXQocmVjb3JkXzEpOyB9LCBidWZmZXJUaW1lU3Bhbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChidWZmZXJDcmVhdGlvbkludGVydmFsICE9PSBudWxsICYmIGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwgPj0gMCkge1xuICAgICAgICAgICAgZXhlY3V0ZVNjaGVkdWxlXzEuZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgc3RhcnRCdWZmZXIsIGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdGFydE9uRW1pdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnRCdWZmZXIoKTtcbiAgICAgICAgdmFyIGJ1ZmZlclRpbWVTdWJzY3JpYmVyID0gT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICB2YXIgcmVjb3Jkc0NvcHkgPSBidWZmZXJSZWNvcmRzLnNsaWNlKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHJlY29yZHNDb3B5XzEgPSBfX3ZhbHVlcyhyZWNvcmRzQ29weSksIHJlY29yZHNDb3B5XzFfMSA9IHJlY29yZHNDb3B5XzEubmV4dCgpOyAhcmVjb3Jkc0NvcHlfMV8xLmRvbmU7IHJlY29yZHNDb3B5XzFfMSA9IHJlY29yZHNDb3B5XzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZWNvcmQgPSByZWNvcmRzQ29weV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSByZWNvcmQuYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICBidWZmZXIucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1heEJ1ZmZlclNpemUgPD0gYnVmZmVyLmxlbmd0aCAmJiBlbWl0KHJlY29yZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmRzQ29weV8xXzEgJiYgIXJlY29yZHNDb3B5XzFfMS5kb25lICYmIChfYSA9IHJlY29yZHNDb3B5XzEucmV0dXJuKSkgX2EuY2FsbChyZWNvcmRzQ29weV8xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aGlsZSAoYnVmZmVyUmVjb3JkcyA9PT0gbnVsbCB8fCBidWZmZXJSZWNvcmRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBidWZmZXJSZWNvcmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChidWZmZXJSZWNvcmRzLnNoaWZ0KCkuYnVmZmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1ZmZlclRpbWVTdWJzY3JpYmVyID09PSBudWxsIHx8IGJ1ZmZlclRpbWVTdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBidWZmZXJUaW1lU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIChidWZmZXJSZWNvcmRzID0gbnVsbCk7IH0pO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGJ1ZmZlclRpbWVTdWJzY3JpYmVyKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuYnVmZmVyVGltZSA9IGJ1ZmZlclRpbWU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1idWZmZXJUaW1lLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fdmFsdWVzID0gKHRoaXMgJiYgdGhpcy5fX3ZhbHVlcykgfHwgZnVuY3Rpb24obykge1xuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5idWZmZXJUb2dnbGUgPSB2b2lkIDA7XG52YXIgU3Vic2NyaXB0aW9uXzEgPSByZXF1aXJlKFwiLi4vU3Vic2NyaXB0aW9uXCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgbm9vcF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbm9vcFwiKTtcbnZhciBhcnJSZW1vdmVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyclJlbW92ZVwiKTtcbmZ1bmN0aW9uIGJ1ZmZlclRvZ2dsZShvcGVuaW5ncywgY2xvc2luZ1NlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGJ1ZmZlcnMgPSBbXTtcbiAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKG9wZW5pbmdzKS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uIChvcGVuVmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBidWZmZXIgPSBbXTtcbiAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgICAgICAgICAgdmFyIGNsb3NpbmdTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uXzEuU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICB2YXIgZW1pdEJ1ZmZlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBhcnJSZW1vdmVfMS5hcnJSZW1vdmUoYnVmZmVycywgYnVmZmVyKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYnVmZmVyKTtcbiAgICAgICAgICAgICAgICBjbG9zaW5nU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2xvc2luZ1N1YnNjcmlwdGlvbi5hZGQoaW5uZXJGcm9tXzEuaW5uZXJGcm9tKGNsb3NpbmdTZWxlY3RvcihvcGVuVmFsdWUpKS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGVtaXRCdWZmZXIsIG5vb3BfMS5ub29wKSkpO1xuICAgICAgICB9LCBub29wXzEubm9vcCkpO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBidWZmZXJzXzEgPSBfX3ZhbHVlcyhidWZmZXJzKSwgYnVmZmVyc18xXzEgPSBidWZmZXJzXzEubmV4dCgpOyAhYnVmZmVyc18xXzEuZG9uZTsgYnVmZmVyc18xXzEgPSBidWZmZXJzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBidWZmZXJzXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyc18xXzEgJiYgIWJ1ZmZlcnNfMV8xLmRvbmUgJiYgKF9hID0gYnVmZmVyc18xLnJldHVybikpIF9hLmNhbGwoYnVmZmVyc18xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aGlsZSAoYnVmZmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGJ1ZmZlcnMuc2hpZnQoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuYnVmZmVyVG9nZ2xlID0gYnVmZmVyVG9nZ2xlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnVmZmVyVG9nZ2xlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5idWZmZXJXaGVuID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgbm9vcF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbm9vcFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbmZ1bmN0aW9uIGJ1ZmZlcldoZW4oY2xvc2luZ1NlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGJ1ZmZlciA9IG51bGw7XG4gICAgICAgIHZhciBjbG9zaW5nU3Vic2NyaWJlciA9IG51bGw7XG4gICAgICAgIHZhciBvcGVuQnVmZmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2xvc2luZ1N1YnNjcmliZXIgPT09IG51bGwgfHwgY2xvc2luZ1N1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsb3NpbmdTdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB2YXIgYiA9IGJ1ZmZlcjtcbiAgICAgICAgICAgIGJ1ZmZlciA9IFtdO1xuICAgICAgICAgICAgYiAmJiBzdWJzY3JpYmVyLm5leHQoYik7XG4gICAgICAgICAgICBpbm5lckZyb21fMS5pbm5lckZyb20oY2xvc2luZ1NlbGVjdG9yKCkpLnN1YnNjcmliZSgoY2xvc2luZ1N1YnNjcmliZXIgPSBPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgb3BlbkJ1ZmZlciwgbm9vcF8xLm5vb3ApKSk7XG4gICAgICAgIH07XG4gICAgICAgIG9wZW5CdWZmZXIoKTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBidWZmZXIgPT09IG51bGwgfHwgYnVmZmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBidWZmZXIucHVzaCh2YWx1ZSk7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJ1ZmZlciAmJiBzdWJzY3JpYmVyLm5leHQoYnVmZmVyKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7IHJldHVybiAoYnVmZmVyID0gY2xvc2luZ1N1YnNjcmliZXIgPSBudWxsKTsgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5idWZmZXJXaGVuID0gYnVmZmVyV2hlbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1ZmZlcldoZW4uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNhdGNoRXJyb3IgPSB2b2lkIDA7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbmZ1bmN0aW9uIGNhdGNoRXJyb3Ioc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaW5uZXJTdWIgPSBudWxsO1xuICAgICAgICB2YXIgc3luY1Vuc3ViID0gZmFsc2U7XG4gICAgICAgIHZhciBoYW5kbGVkUmVzdWx0O1xuICAgICAgICBpbm5lclN1YiA9IHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBoYW5kbGVkUmVzdWx0ID0gaW5uZXJGcm9tXzEuaW5uZXJGcm9tKHNlbGVjdG9yKGVyciwgY2F0Y2hFcnJvcihzZWxlY3Rvcikoc291cmNlKSkpO1xuICAgICAgICAgICAgaWYgKGlubmVyU3ViKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICBpbm5lclN1YiA9IG51bGw7XG4gICAgICAgICAgICAgICAgaGFuZGxlZFJlc3VsdC5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzeW5jVW5zdWIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIGlmIChzeW5jVW5zdWIpIHtcbiAgICAgICAgICAgIGlubmVyU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBpbm5lclN1YiA9IG51bGw7XG4gICAgICAgICAgICBoYW5kbGVkUmVzdWx0LnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5jYXRjaEVycm9yID0gY2F0Y2hFcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNhdGNoRXJyb3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNjYW5JbnRlcm5hbHMgPSB2b2lkIDA7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBzY2FuSW50ZXJuYWxzKGFjY3VtdWxhdG9yLCBzZWVkLCBoYXNTZWVkLCBlbWl0T25OZXh0LCBlbWl0QmVmb3JlQ29tcGxldGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaGFzU3RhdGUgPSBoYXNTZWVkO1xuICAgICAgICB2YXIgc3RhdGUgPSBzZWVkO1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBpID0gaW5kZXgrKztcbiAgICAgICAgICAgIHN0YXRlID0gaGFzU3RhdGVcbiAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yKHN0YXRlLCB2YWx1ZSwgaSlcbiAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICgoaGFzU3RhdGUgPSB0cnVlKSwgdmFsdWUpO1xuICAgICAgICAgICAgZW1pdE9uTmV4dCAmJiBzdWJzY3JpYmVyLm5leHQoc3RhdGUpO1xuICAgICAgICB9LCBlbWl0QmVmb3JlQ29tcGxldGUgJiZcbiAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaGFzU3RhdGUgJiYgc3Vic2NyaWJlci5uZXh0KHN0YXRlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KSkpO1xuICAgIH07XG59XG5leHBvcnRzLnNjYW5JbnRlcm5hbHMgPSBzY2FuSW50ZXJuYWxzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NhbkludGVybmFscy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVkdWNlID0gdm9pZCAwO1xudmFyIHNjYW5JbnRlcm5hbHNfMSA9IHJlcXVpcmUoXCIuL3NjYW5JbnRlcm5hbHNcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbmZ1bmN0aW9uIHJlZHVjZShhY2N1bXVsYXRvciwgc2VlZCkge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShzY2FuSW50ZXJuYWxzXzEuc2NhbkludGVybmFscyhhY2N1bXVsYXRvciwgc2VlZCwgYXJndW1lbnRzLmxlbmd0aCA+PSAyLCBmYWxzZSwgdHJ1ZSkpO1xufVxuZXhwb3J0cy5yZWR1Y2UgPSByZWR1Y2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWR1Y2UuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRvQXJyYXkgPSB2b2lkIDA7XG52YXIgcmVkdWNlXzEgPSByZXF1aXJlKFwiLi9yZWR1Y2VcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBhcnJSZWR1Y2VyID0gZnVuY3Rpb24gKGFyciwgdmFsdWUpIHsgcmV0dXJuIChhcnIucHVzaCh2YWx1ZSksIGFycik7IH07XG5mdW5jdGlvbiB0b0FycmF5KCkge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHJlZHVjZV8xLnJlZHVjZShhcnJSZWR1Y2VyLCBbXSkoc291cmNlKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfSk7XG59XG5leHBvcnRzLnRvQXJyYXkgPSB0b0FycmF5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dG9BcnJheS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuam9pbkFsbEludGVybmFscyA9IHZvaWQgMDtcbnZhciBpZGVudGl0eV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaWRlbnRpdHlcIik7XG52YXIgbWFwT25lT3JNYW55QXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvbWFwT25lT3JNYW55QXJnc1wiKTtcbnZhciBwaXBlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9waXBlXCIpO1xudmFyIG1lcmdlTWFwXzEgPSByZXF1aXJlKFwiLi9tZXJnZU1hcFwiKTtcbnZhciB0b0FycmF5XzEgPSByZXF1aXJlKFwiLi90b0FycmF5XCIpO1xuZnVuY3Rpb24gam9pbkFsbEludGVybmFscyhqb2luRm4sIHByb2plY3QpIHtcbiAgICByZXR1cm4gcGlwZV8xLnBpcGUodG9BcnJheV8xLnRvQXJyYXkoKSwgbWVyZ2VNYXBfMS5tZXJnZU1hcChmdW5jdGlvbiAoc291cmNlcykgeyByZXR1cm4gam9pbkZuKHNvdXJjZXMpOyB9KSwgcHJvamVjdCA/IG1hcE9uZU9yTWFueUFyZ3NfMS5tYXBPbmVPck1hbnlBcmdzKHByb2plY3QpIDogaWRlbnRpdHlfMS5pZGVudGl0eSk7XG59XG5leHBvcnRzLmpvaW5BbGxJbnRlcm5hbHMgPSBqb2luQWxsSW50ZXJuYWxzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9am9pbkFsbEludGVybmFscy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29tYmluZUxhdGVzdEFsbCA9IHZvaWQgMDtcbnZhciBjb21iaW5lTGF0ZXN0XzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0XCIpO1xudmFyIGpvaW5BbGxJbnRlcm5hbHNfMSA9IHJlcXVpcmUoXCIuL2pvaW5BbGxJbnRlcm5hbHNcIik7XG5mdW5jdGlvbiBjb21iaW5lTGF0ZXN0QWxsKHByb2plY3QpIHtcbiAgICByZXR1cm4gam9pbkFsbEludGVybmFsc18xLmpvaW5BbGxJbnRlcm5hbHMoY29tYmluZUxhdGVzdF8xLmNvbWJpbmVMYXRlc3QsIHByb2plY3QpO1xufVxuZXhwb3J0cy5jb21iaW5lTGF0ZXN0QWxsID0gY29tYmluZUxhdGVzdEFsbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbWJpbmVMYXRlc3RBbGwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbWJpbmVBbGwgPSB2b2lkIDA7XG52YXIgY29tYmluZUxhdGVzdEFsbF8xID0gcmVxdWlyZShcIi4vY29tYmluZUxhdGVzdEFsbFwiKTtcbmV4cG9ydHMuY29tYmluZUFsbCA9IGNvbWJpbmVMYXRlc3RBbGxfMS5jb21iaW5lTGF0ZXN0QWxsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tYmluZUFsbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbWJpbmVMYXRlc3QgPSB2b2lkIDA7XG52YXIgY29tYmluZUxhdGVzdF8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvY29tYmluZUxhdGVzdFwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIGFyZ3NPckFyZ0FycmF5XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcmdzT3JBcmdBcnJheVwiKTtcbnZhciBtYXBPbmVPck1hbnlBcmdzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9tYXBPbmVPck1hbnlBcmdzXCIpO1xudmFyIHBpcGVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL3BpcGVcIik7XG52YXIgYXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc1wiKTtcbmZ1bmN0aW9uIGNvbWJpbmVMYXRlc3QoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciByZXN1bHRTZWxlY3RvciA9IGFyZ3NfMS5wb3BSZXN1bHRTZWxlY3RvcihhcmdzKTtcbiAgICByZXR1cm4gcmVzdWx0U2VsZWN0b3JcbiAgICAgICAgPyBwaXBlXzEucGlwZShjb21iaW5lTGF0ZXN0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGFyZ3MpKSksIG1hcE9uZU9yTWFueUFyZ3NfMS5tYXBPbmVPck1hbnlBcmdzKHJlc3VsdFNlbGVjdG9yKSlcbiAgICAgICAgOiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICBjb21iaW5lTGF0ZXN0XzEuY29tYmluZUxhdGVzdEluaXQoX19zcHJlYWRBcnJheShbc291cmNlXSwgX19yZWFkKGFyZ3NPckFyZ0FycmF5XzEuYXJnc09yQXJnQXJyYXkoYXJncykpKSkoc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xufVxuZXhwb3J0cy5jb21iaW5lTGF0ZXN0ID0gY29tYmluZUxhdGVzdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbWJpbmVMYXRlc3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXG4gICAgICAgIHRvW2pdID0gZnJvbVtpXTtcbiAgICByZXR1cm4gdG87XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb21iaW5lTGF0ZXN0V2l0aCA9IHZvaWQgMDtcbnZhciBjb21iaW5lTGF0ZXN0XzEgPSByZXF1aXJlKFwiLi9jb21iaW5lTGF0ZXN0XCIpO1xuZnVuY3Rpb24gY29tYmluZUxhdGVzdFdpdGgoKSB7XG4gICAgdmFyIG90aGVyU291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIG90aGVyU291cmNlc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gY29tYmluZUxhdGVzdF8xLmNvbWJpbmVMYXRlc3QuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQob3RoZXJTb3VyY2VzKSkpO1xufVxuZXhwb3J0cy5jb21iaW5lTGF0ZXN0V2l0aCA9IGNvbWJpbmVMYXRlc3RXaXRoO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tYmluZUxhdGVzdFdpdGguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbmNhdE1hcCA9IHZvaWQgMDtcbnZhciBtZXJnZU1hcF8xID0gcmVxdWlyZShcIi4vbWVyZ2VNYXBcIik7XG52YXIgaXNGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNGdW5jdGlvblwiKTtcbmZ1bmN0aW9uIGNvbmNhdE1hcChwcm9qZWN0LCByZXN1bHRTZWxlY3Rvcikge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbihyZXN1bHRTZWxlY3RvcikgPyBtZXJnZU1hcF8xLm1lcmdlTWFwKHByb2plY3QsIHJlc3VsdFNlbGVjdG9yLCAxKSA6IG1lcmdlTWFwXzEubWVyZ2VNYXAocHJvamVjdCwgMSk7XG59XG5leHBvcnRzLmNvbmNhdE1hcCA9IGNvbmNhdE1hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmNhdE1hcC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29uY2F0TWFwVG8gPSB2b2lkIDA7XG52YXIgY29uY2F0TWFwXzEgPSByZXF1aXJlKFwiLi9jb25jYXRNYXBcIik7XG52YXIgaXNGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNGdW5jdGlvblwiKTtcbmZ1bmN0aW9uIGNvbmNhdE1hcFRvKGlubmVyT2JzZXJ2YWJsZSwgcmVzdWx0U2VsZWN0b3IpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24ocmVzdWx0U2VsZWN0b3IpID8gY29uY2F0TWFwXzEuY29uY2F0TWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlubmVyT2JzZXJ2YWJsZTsgfSwgcmVzdWx0U2VsZWN0b3IpIDogY29uY2F0TWFwXzEuY29uY2F0TWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlubmVyT2JzZXJ2YWJsZTsgfSk7XG59XG5leHBvcnRzLmNvbmNhdE1hcFRvID0gY29uY2F0TWFwVG87XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25jYXRNYXBUby5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbmNhdCA9IHZvaWQgMDtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIGNvbmNhdEFsbF8xID0gcmVxdWlyZShcIi4vY29uY2F0QWxsXCIpO1xudmFyIGFyZ3NfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyZ3NcIik7XG52YXIgZnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvZnJvbVwiKTtcbmZ1bmN0aW9uIGNvbmNhdCgpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIHNjaGVkdWxlciA9IGFyZ3NfMS5wb3BTY2hlZHVsZXIoYXJncyk7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgY29uY2F0QWxsXzEuY29uY2F0QWxsKCkoZnJvbV8xLmZyb20oX19zcHJlYWRBcnJheShbc291cmNlXSwgX19yZWFkKGFyZ3MpKSwgc2NoZWR1bGVyKSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5jb25jYXQgPSBjb25jYXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25jYXQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXG4gICAgICAgIHRvW2pdID0gZnJvbVtpXTtcbiAgICByZXR1cm4gdG87XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb25jYXRXaXRoID0gdm9pZCAwO1xudmFyIGNvbmNhdF8xID0gcmVxdWlyZShcIi4vY29uY2F0XCIpO1xuZnVuY3Rpb24gY29uY2F0V2l0aCgpIHtcbiAgICB2YXIgb3RoZXJTb3VyY2VzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgb3RoZXJTb3VyY2VzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiBjb25jYXRfMS5jb25jYXQuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQob3RoZXJTb3VyY2VzKSkpO1xufVxuZXhwb3J0cy5jb25jYXRXaXRoID0gY29uY2F0V2l0aDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmNhdFdpdGguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZyb21TdWJzY3JpYmFibGUgPSB2b2lkIDA7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL09ic2VydmFibGVcIik7XG5mdW5jdGlvbiBmcm9tU3Vic2NyaWJhYmxlKHN1YnNjcmliYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHN1YnNjcmliYWJsZS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7IH0pO1xufVxuZXhwb3J0cy5mcm9tU3Vic2NyaWJhYmxlID0gZnJvbVN1YnNjcmliYWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZyb21TdWJzY3JpYmFibGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbm5lY3QgPSB2b2lkIDA7XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZShcIi4uL1N1YmplY3RcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBmcm9tU3Vic2NyaWJhYmxlXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9mcm9tU3Vic2NyaWJhYmxlXCIpO1xudmFyIERFRkFVTFRfQ09ORklHID0ge1xuICAgIGNvbm5lY3RvcjogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFN1YmplY3RfMS5TdWJqZWN0KCk7IH0sXG59O1xuZnVuY3Rpb24gY29ubmVjdChzZWxlY3RvciwgY29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZyA9PT0gdm9pZCAwKSB7IGNvbmZpZyA9IERFRkFVTFRfQ09ORklHOyB9XG4gICAgdmFyIGNvbm5lY3RvciA9IGNvbmZpZy5jb25uZWN0b3I7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSBjb25uZWN0b3IoKTtcbiAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKHNlbGVjdG9yKGZyb21TdWJzY3JpYmFibGVfMS5mcm9tU3Vic2NyaWJhYmxlKHN1YmplY3QpKSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICBzdWJzY3JpYmVyLmFkZChzb3VyY2Uuc3Vic2NyaWJlKHN1YmplY3QpKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuY29ubmVjdCA9IGNvbm5lY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25uZWN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb3VudCA9IHZvaWQgMDtcbnZhciByZWR1Y2VfMSA9IHJlcXVpcmUoXCIuL3JlZHVjZVwiKTtcbmZ1bmN0aW9uIGNvdW50KHByZWRpY2F0ZSkge1xuICAgIHJldHVybiByZWR1Y2VfMS5yZWR1Y2UoZnVuY3Rpb24gKHRvdGFsLCB2YWx1ZSwgaSkgeyByZXR1cm4gKCFwcmVkaWNhdGUgfHwgcHJlZGljYXRlKHZhbHVlLCBpKSA/IHRvdGFsICsgMSA6IHRvdGFsKTsgfSwgMCk7XG59XG5leHBvcnRzLmNvdW50ID0gY291bnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb3VudC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVib3VuY2UgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBub29wXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9ub29wXCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xuZnVuY3Rpb24gZGVib3VuY2UoZHVyYXRpb25TZWxlY3Rvcikge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgdmFyIGR1cmF0aW9uU3Vic2NyaWJlciA9IG51bGw7XG4gICAgICAgIHZhciBlbWl0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZHVyYXRpb25TdWJzY3JpYmVyID09PSBudWxsIHx8IGR1cmF0aW9uU3Vic2NyaWJlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZHVyYXRpb25TdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGhhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBsYXN0VmFsdWU7XG4gICAgICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uU3Vic2NyaWJlciA9PT0gbnVsbCB8fCBkdXJhdGlvblN1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGR1cmF0aW9uU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgbGFzdFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICBkdXJhdGlvblN1YnNjcmliZXIgPSBPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZW1pdCwgbm9vcF8xLm5vb3ApO1xuICAgICAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKGR1cmF0aW9uU2VsZWN0b3IodmFsdWUpKS5zdWJzY3JpYmUoZHVyYXRpb25TdWJzY3JpYmVyKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZW1pdCgpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9LCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RWYWx1ZSA9IGR1cmF0aW9uU3Vic2NyaWJlciA9IG51bGw7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVib3VuY2UgPSBkZWJvdW5jZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlYm91bmNlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWJvdW5jZVRpbWUgPSB2b2lkIDA7XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoXCIuLi9zY2hlZHVsZXIvYXN5bmNcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIGRlYm91bmNlVGltZShkdWVUaW1lLCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsgc2NoZWR1bGVyID0gYXN5bmNfMS5hc3luY1NjaGVkdWxlcjsgfVxuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBhY3RpdmVUYXNrID0gbnVsbDtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBsYXN0VGltZSA9IG51bGw7XG4gICAgICAgIHZhciBlbWl0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGFjdGl2ZVRhc2spIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVUYXNrLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgYWN0aXZlVGFzayA9IG51bGw7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gbGFzdFZhbHVlO1xuICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgZnVuY3Rpb24gZW1pdFdoZW5JZGxlKCkge1xuICAgICAgICAgICAgdmFyIHRhcmdldFRpbWUgPSBsYXN0VGltZSArIGR1ZVRpbWU7XG4gICAgICAgICAgICB2YXIgbm93ID0gc2NoZWR1bGVyLm5vdygpO1xuICAgICAgICAgICAgaWYgKG5vdyA8IHRhcmdldFRpbWUpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVUYXNrID0gdGhpcy5zY2hlZHVsZSh1bmRlZmluZWQsIHRhcmdldFRpbWUgLSBub3cpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKGFjdGl2ZVRhc2spO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVtaXQoKTtcbiAgICAgICAgfVxuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGxhc3RWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBzY2hlZHVsZXIubm93KCk7XG4gICAgICAgICAgICBpZiAoIWFjdGl2ZVRhc2spIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVUYXNrID0gc2NoZWR1bGVyLnNjaGVkdWxlKGVtaXRXaGVuSWRsZSwgZHVlVGltZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5hZGQoYWN0aXZlVGFzayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVtaXQoKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSBhY3RpdmVUYXNrID0gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5kZWJvdW5jZVRpbWUgPSBkZWJvdW5jZVRpbWU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWJvdW5jZVRpbWUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHRJZkVtcHR5ID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBkZWZhdWx0SWZFbXB0eShkZWZhdWx0VmFsdWUpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIWhhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVmYXVsdElmRW1wdHkgPSBkZWZhdWx0SWZFbXB0eTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmF1bHRJZkVtcHR5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50YWtlID0gdm9pZCAwO1xudmFyIGVtcHR5XzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9lbXB0eVwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gdGFrZShjb3VudCkge1xuICAgIHJldHVybiBjb3VudCA8PSAwXG4gICAgICAgID9cbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVtcHR5XzEuRU1QVFk7IH1cbiAgICAgICAgOiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICB2YXIgc2VlbiA9IDA7XG4gICAgICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoKytzZWVuIDw9IGNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA8PSBzZWVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xufVxuZXhwb3J0cy50YWtlID0gdGFrZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRha2UuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlnbm9yZUVsZW1lbnRzID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgbm9vcF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbm9vcFwiKTtcbmZ1bmN0aW9uIGlnbm9yZUVsZW1lbnRzKCkge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIG5vb3BfMS5ub29wKSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmlnbm9yZUVsZW1lbnRzID0gaWdub3JlRWxlbWVudHM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pZ25vcmVFbGVtZW50cy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubWFwVG8gPSB2b2lkIDA7XG52YXIgbWFwXzEgPSByZXF1aXJlKFwiLi9tYXBcIik7XG5mdW5jdGlvbiBtYXBUbyh2YWx1ZSkge1xuICAgIHJldHVybiBtYXBfMS5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0pO1xufVxuZXhwb3J0cy5tYXBUbyA9IG1hcFRvO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFwVG8uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlbGF5V2hlbiA9IHZvaWQgMDtcbnZhciBjb25jYXRfMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2NvbmNhdFwiKTtcbnZhciB0YWtlXzEgPSByZXF1aXJlKFwiLi90YWtlXCIpO1xudmFyIGlnbm9yZUVsZW1lbnRzXzEgPSByZXF1aXJlKFwiLi9pZ25vcmVFbGVtZW50c1wiKTtcbnZhciBtYXBUb18xID0gcmVxdWlyZShcIi4vbWFwVG9cIik7XG52YXIgbWVyZ2VNYXBfMSA9IHJlcXVpcmUoXCIuL21lcmdlTWFwXCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xuZnVuY3Rpb24gZGVsYXlXaGVuKGRlbGF5RHVyYXRpb25TZWxlY3Rvciwgc3Vic2NyaXB0aW9uRGVsYXkpIHtcbiAgICBpZiAoc3Vic2NyaXB0aW9uRGVsYXkpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25jYXRfMS5jb25jYXQoc3Vic2NyaXB0aW9uRGVsYXkucGlwZSh0YWtlXzEudGFrZSgxKSwgaWdub3JlRWxlbWVudHNfMS5pZ25vcmVFbGVtZW50cygpKSwgc291cmNlLnBpcGUoZGVsYXlXaGVuKGRlbGF5RHVyYXRpb25TZWxlY3RvcikpKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlTWFwXzEubWVyZ2VNYXAoZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkgeyByZXR1cm4gaW5uZXJGcm9tXzEuaW5uZXJGcm9tKGRlbGF5RHVyYXRpb25TZWxlY3Rvcih2YWx1ZSwgaW5kZXgpKS5waXBlKHRha2VfMS50YWtlKDEpLCBtYXBUb18xLm1hcFRvKHZhbHVlKSk7IH0pO1xufVxuZXhwb3J0cy5kZWxheVdoZW4gPSBkZWxheVdoZW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWxheVdoZW4uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlbGF5ID0gdm9pZCAwO1xudmFyIGFzeW5jXzEgPSByZXF1aXJlKFwiLi4vc2NoZWR1bGVyL2FzeW5jXCIpO1xudmFyIGRlbGF5V2hlbl8xID0gcmVxdWlyZShcIi4vZGVsYXlXaGVuXCIpO1xudmFyIHRpbWVyXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS90aW1lclwiKTtcbmZ1bmN0aW9uIGRlbGF5KGR1ZSwgc2NoZWR1bGVyKSB7XG4gICAgaWYgKHNjaGVkdWxlciA9PT0gdm9pZCAwKSB7IHNjaGVkdWxlciA9IGFzeW5jXzEuYXN5bmNTY2hlZHVsZXI7IH1cbiAgICB2YXIgZHVyYXRpb24gPSB0aW1lcl8xLnRpbWVyKGR1ZSwgc2NoZWR1bGVyKTtcbiAgICByZXR1cm4gZGVsYXlXaGVuXzEuZGVsYXlXaGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGR1cmF0aW9uOyB9KTtcbn1cbmV4cG9ydHMuZGVsYXkgPSBkZWxheTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlbGF5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZW1hdGVyaWFsaXplID0gdm9pZCAwO1xudmFyIE5vdGlmaWNhdGlvbl8xID0gcmVxdWlyZShcIi4uL05vdGlmaWNhdGlvblwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gZGVtYXRlcmlhbGl6ZSgpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAobm90aWZpY2F0aW9uKSB7IHJldHVybiBOb3RpZmljYXRpb25fMS5vYnNlcnZlTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgc3Vic2NyaWJlcik7IH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVtYXRlcmlhbGl6ZSA9IGRlbWF0ZXJpYWxpemU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZW1hdGVyaWFsaXplLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kaXN0aW5jdCA9IHZvaWQgMDtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xudmFyIG5vb3BfMSA9IHJlcXVpcmUoXCIuLi91dGlsL25vb3BcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG5mdW5jdGlvbiBkaXN0aW5jdChrZXlTZWxlY3RvciwgZmx1c2hlcykge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBkaXN0aW5jdEtleXMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleVNlbGVjdG9yID8ga2V5U2VsZWN0b3IodmFsdWUpIDogdmFsdWU7XG4gICAgICAgICAgICBpZiAoIWRpc3RpbmN0S2V5cy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGRpc3RpbmN0S2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIGZsdXNoZXMgJiYgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKGZsdXNoZXMpLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKCkgeyByZXR1cm4gZGlzdGluY3RLZXlzLmNsZWFyKCk7IH0sIG5vb3BfMS5ub29wKSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmRpc3RpbmN0ID0gZGlzdGluY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kaXN0aW5jdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGlzdGluY3RVbnRpbENoYW5nZWQgPSB2b2lkIDA7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lkZW50aXR5XCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBkaXN0aW5jdFVudGlsQ2hhbmdlZChjb21wYXJhdG9yLCBrZXlTZWxlY3Rvcikge1xuICAgIGlmIChrZXlTZWxlY3RvciA9PT0gdm9pZCAwKSB7IGtleVNlbGVjdG9yID0gaWRlbnRpdHlfMS5pZGVudGl0eTsgfVxuICAgIGNvbXBhcmF0b3IgPSBjb21wYXJhdG9yICE9PSBudWxsICYmIGNvbXBhcmF0b3IgIT09IHZvaWQgMCA/IGNvbXBhcmF0b3IgOiBkZWZhdWx0Q29tcGFyZTtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgcHJldmlvdXNLZXk7XG4gICAgICAgIHZhciBmaXJzdCA9IHRydWU7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlTZWxlY3Rvcih2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZmlyc3QgfHwgIWNvbXBhcmF0b3IocHJldmlvdXNLZXksIGN1cnJlbnRLZXkpKSB7XG4gICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBwcmV2aW91c0tleSA9IGN1cnJlbnRLZXk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5kaXN0aW5jdFVudGlsQ2hhbmdlZCA9IGRpc3RpbmN0VW50aWxDaGFuZ2VkO1xuZnVuY3Rpb24gZGVmYXVsdENvbXBhcmUoYSwgYikge1xuICAgIHJldHVybiBhID09PSBiO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGlzdGluY3RVbnRpbENoYW5nZWQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkID0gdm9pZCAwO1xudmFyIGRpc3RpbmN0VW50aWxDaGFuZ2VkXzEgPSByZXF1aXJlKFwiLi9kaXN0aW5jdFVudGlsQ2hhbmdlZFwiKTtcbmZ1bmN0aW9uIGRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkKGtleSwgY29tcGFyZSkge1xuICAgIHJldHVybiBkaXN0aW5jdFVudGlsQ2hhbmdlZF8xLmRpc3RpbmN0VW50aWxDaGFuZ2VkKGZ1bmN0aW9uICh4LCB5KSB7IHJldHVybiBjb21wYXJlID8gY29tcGFyZSh4W2tleV0sIHlba2V5XSkgOiB4W2tleV0gPT09IHlba2V5XTsgfSk7XG59XG5leHBvcnRzLmRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkID0gZGlzdGluY3RVbnRpbEtleUNoYW5nZWQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudGhyb3dJZkVtcHR5ID0gdm9pZCAwO1xudmFyIEVtcHR5RXJyb3JfMSA9IHJlcXVpcmUoXCIuLi91dGlsL0VtcHR5RXJyb3JcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIHRocm93SWZFbXB0eShlcnJvckZhY3RvcnkpIHtcbiAgICBpZiAoZXJyb3JGYWN0b3J5ID09PSB2b2lkIDApIHsgZXJyb3JGYWN0b3J5ID0gZGVmYXVsdEVycm9yRmFjdG9yeTsgfVxuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIChoYXNWYWx1ZSA/IHN1YnNjcmliZXIuY29tcGxldGUoKSA6IHN1YnNjcmliZXIuZXJyb3IoZXJyb3JGYWN0b3J5KCkpKTsgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy50aHJvd0lmRW1wdHkgPSB0aHJvd0lmRW1wdHk7XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JGYWN0b3J5KCkge1xuICAgIHJldHVybiBuZXcgRW1wdHlFcnJvcl8xLkVtcHR5RXJyb3IoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRocm93SWZFbXB0eS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZWxlbWVudEF0ID0gdm9pZCAwO1xudmFyIEFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9Bcmd1bWVudE91dE9mUmFuZ2VFcnJvclwiKTtcbnZhciBmaWx0ZXJfMSA9IHJlcXVpcmUoXCIuL2ZpbHRlclwiKTtcbnZhciB0aHJvd0lmRW1wdHlfMSA9IHJlcXVpcmUoXCIuL3Rocm93SWZFbXB0eVwiKTtcbnZhciBkZWZhdWx0SWZFbXB0eV8xID0gcmVxdWlyZShcIi4vZGVmYXVsdElmRW1wdHlcIik7XG52YXIgdGFrZV8xID0gcmVxdWlyZShcIi4vdGFrZVwiKTtcbmZ1bmN0aW9uIGVsZW1lbnRBdChpbmRleCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JfMS5Bcmd1bWVudE91dE9mUmFuZ2VFcnJvcigpO1xuICAgIH1cbiAgICB2YXIgaGFzRGVmYXVsdFZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+PSAyO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UucGlwZShmaWx0ZXJfMS5maWx0ZXIoZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGkgPT09IGluZGV4OyB9KSwgdGFrZV8xLnRha2UoMSksIGhhc0RlZmF1bHRWYWx1ZSA/IGRlZmF1bHRJZkVtcHR5XzEuZGVmYXVsdElmRW1wdHkoZGVmYXVsdFZhbHVlKSA6IHRocm93SWZFbXB0eV8xLnRocm93SWZFbXB0eShmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JfMS5Bcmd1bWVudE91dE9mUmFuZ2VFcnJvcigpOyB9KSk7XG4gICAgfTtcbn1cbmV4cG9ydHMuZWxlbWVudEF0ID0gZWxlbWVudEF0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZWxlbWVudEF0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxuICAgICAgICB0b1tqXSA9IGZyb21baV07XG4gICAgcmV0dXJuIHRvO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZW5kV2l0aCA9IHZvaWQgMDtcbnZhciBjb25jYXRfMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2NvbmNhdFwiKTtcbnZhciBvZl8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvb2ZcIik7XG5mdW5jdGlvbiBlbmRXaXRoKCkge1xuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YWx1ZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIGNvbmNhdF8xLmNvbmNhdChzb3VyY2UsIG9mXzEub2YuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQodmFsdWVzKSkpKTsgfTtcbn1cbmV4cG9ydHMuZW5kV2l0aCA9IGVuZFdpdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbmRXaXRoLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ldmVyeSA9IHZvaWQgMDtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gZXZlcnkocHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXByZWRpY2F0ZS5jYWxsKHRoaXNBcmcsIHZhbHVlLCBpbmRleCsrLCBzb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5ldmVyeSA9IGV2ZXJ5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXZlcnkuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV4aGF1c3RNYXAgPSB2b2lkIDA7XG52YXIgbWFwXzEgPSByZXF1aXJlKFwiLi9tYXBcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIGV4aGF1c3RNYXAocHJvamVjdCwgcmVzdWx0U2VsZWN0b3IpIHtcbiAgICBpZiAocmVzdWx0U2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UucGlwZShleGhhdXN0TWFwKGZ1bmN0aW9uIChhLCBpKSB7IHJldHVybiBpbm5lckZyb21fMS5pbm5lckZyb20ocHJvamVjdChhLCBpKSkucGlwZShtYXBfMS5tYXAoZnVuY3Rpb24gKGIsIGlpKSB7IHJldHVybiByZXN1bHRTZWxlY3RvcihhLCBiLCBpLCBpaSk7IH0pKTsgfSkpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICB2YXIgaW5uZXJTdWIgPSBudWxsO1xuICAgICAgICB2YXIgaXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAob3V0ZXJWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFpbm5lclN1Yikge1xuICAgICAgICAgICAgICAgIGlubmVyU3ViID0gT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpbm5lclN1YiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlzQ29tcGxldGUgJiYgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlubmVyRnJvbV8xLmlubmVyRnJvbShwcm9qZWN0KG91dGVyVmFsdWUsIGluZGV4KyspKS5zdWJzY3JpYmUoaW5uZXJTdWIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICFpbm5lclN1YiAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZXhoYXVzdE1hcCA9IGV4aGF1c3RNYXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leGhhdXN0TWFwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leGhhdXN0QWxsID0gdm9pZCAwO1xudmFyIGV4aGF1c3RNYXBfMSA9IHJlcXVpcmUoXCIuL2V4aGF1c3RNYXBcIik7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lkZW50aXR5XCIpO1xuZnVuY3Rpb24gZXhoYXVzdEFsbCgpIHtcbiAgICByZXR1cm4gZXhoYXVzdE1hcF8xLmV4aGF1c3RNYXAoaWRlbnRpdHlfMS5pZGVudGl0eSk7XG59XG5leHBvcnRzLmV4aGF1c3RBbGwgPSBleGhhdXN0QWxsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhoYXVzdEFsbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXhoYXVzdCA9IHZvaWQgMDtcbnZhciBleGhhdXN0QWxsXzEgPSByZXF1aXJlKFwiLi9leGhhdXN0QWxsXCIpO1xuZXhwb3J0cy5leGhhdXN0ID0gZXhoYXVzdEFsbF8xLmV4aGF1c3RBbGw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leGhhdXN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHBhbmQgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBtZXJnZUludGVybmFsc18xID0gcmVxdWlyZShcIi4vbWVyZ2VJbnRlcm5hbHNcIik7XG5mdW5jdGlvbiBleHBhbmQocHJvamVjdCwgY29uY3VycmVudCwgc2NoZWR1bGVyKSB7XG4gICAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkgeyBjb25jdXJyZW50ID0gSW5maW5pdHk7IH1cbiAgICBjb25jdXJyZW50ID0gKGNvbmN1cnJlbnQgfHwgMCkgPCAxID8gSW5maW5pdHkgOiBjb25jdXJyZW50O1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHJldHVybiBtZXJnZUludGVybmFsc18xLm1lcmdlSW50ZXJuYWxzKHNvdXJjZSwgc3Vic2NyaWJlciwgcHJvamVjdCwgY29uY3VycmVudCwgdW5kZWZpbmVkLCB0cnVlLCBzY2hlZHVsZXIpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5leHBhbmQgPSBleHBhbmQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leHBhbmQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZpbmFsaXplID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG5mdW5jdGlvbiBmaW5hbGl6ZShjYWxsYmFjaykge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5hZGQoY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLmZpbmFsaXplID0gZmluYWxpemU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maW5hbGl6ZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlRmluZCA9IGV4cG9ydHMuZmluZCA9IHZvaWQgMDtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gZmluZChwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoY3JlYXRlRmluZChwcmVkaWNhdGUsIHRoaXNBcmcsICd2YWx1ZScpKTtcbn1cbmV4cG9ydHMuZmluZCA9IGZpbmQ7XG5mdW5jdGlvbiBjcmVhdGVGaW5kKHByZWRpY2F0ZSwgdGhpc0FyZywgZW1pdCkge1xuICAgIHZhciBmaW5kSW5kZXggPSBlbWl0ID09PSAnaW5kZXgnO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGkgPSBpbmRleCsrO1xuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZS5jYWxsKHRoaXNBcmcsIHZhbHVlLCBpLCBzb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGZpbmRJbmRleCA/IGkgOiB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoZmluZEluZGV4ID8gLTEgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KSk7XG4gICAgfTtcbn1cbmV4cG9ydHMuY3JlYXRlRmluZCA9IGNyZWF0ZUZpbmQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maW5kLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5maW5kSW5kZXggPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBmaW5kXzEgPSByZXF1aXJlKFwiLi9maW5kXCIpO1xuZnVuY3Rpb24gZmluZEluZGV4KHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmaW5kXzEuY3JlYXRlRmluZChwcmVkaWNhdGUsIHRoaXNBcmcsICdpbmRleCcpKTtcbn1cbmV4cG9ydHMuZmluZEluZGV4ID0gZmluZEluZGV4O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmluZEluZGV4LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5maXJzdCA9IHZvaWQgMDtcbnZhciBFbXB0eUVycm9yXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9FbXB0eUVycm9yXCIpO1xudmFyIGZpbHRlcl8xID0gcmVxdWlyZShcIi4vZmlsdGVyXCIpO1xudmFyIHRha2VfMSA9IHJlcXVpcmUoXCIuL3Rha2VcIik7XG52YXIgZGVmYXVsdElmRW1wdHlfMSA9IHJlcXVpcmUoXCIuL2RlZmF1bHRJZkVtcHR5XCIpO1xudmFyIHRocm93SWZFbXB0eV8xID0gcmVxdWlyZShcIi4vdGhyb3dJZkVtcHR5XCIpO1xudmFyIGlkZW50aXR5XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pZGVudGl0eVwiKTtcbmZ1bmN0aW9uIGZpcnN0KHByZWRpY2F0ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgdmFyIGhhc0RlZmF1bHRWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPj0gMjtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnBpcGUocHJlZGljYXRlID8gZmlsdGVyXzEuZmlsdGVyKGZ1bmN0aW9uICh2LCBpKSB7IHJldHVybiBwcmVkaWNhdGUodiwgaSwgc291cmNlKTsgfSkgOiBpZGVudGl0eV8xLmlkZW50aXR5LCB0YWtlXzEudGFrZSgxKSwgaGFzRGVmYXVsdFZhbHVlID8gZGVmYXVsdElmRW1wdHlfMS5kZWZhdWx0SWZFbXB0eShkZWZhdWx0VmFsdWUpIDogdGhyb3dJZkVtcHR5XzEudGhyb3dJZkVtcHR5KGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBFbXB0eUVycm9yXzEuRW1wdHlFcnJvcigpOyB9KSk7XG4gICAgfTtcbn1cbmV4cG9ydHMuZmlyc3QgPSBmaXJzdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpcnN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ncm91cEJ5ID0gdm9pZCAwO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlXCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIFN1YmplY3RfMSA9IHJlcXVpcmUoXCIuLi9TdWJqZWN0XCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBncm91cEJ5KGtleVNlbGVjdG9yLCBlbGVtZW50T3JPcHRpb25zLCBkdXJhdGlvbiwgY29ubmVjdG9yKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGVsZW1lbnQ7XG4gICAgICAgIGlmICghZWxlbWVudE9yT3B0aW9ucyB8fCB0eXBlb2YgZWxlbWVudE9yT3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnRPck9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAoZHVyYXRpb24gPSBlbGVtZW50T3JPcHRpb25zLmR1cmF0aW9uLCBlbGVtZW50ID0gZWxlbWVudE9yT3B0aW9ucy5lbGVtZW50LCBjb25uZWN0b3IgPSBlbGVtZW50T3JPcHRpb25zLmNvbm5lY3Rvcik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGdyb3VwcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgZ3JvdXBzLmZvckVhY2goY2IpO1xuICAgICAgICAgICAgY2Ioc3Vic2NyaWJlcik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBoYW5kbGVFcnJvciA9IGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIG5vdGlmeShmdW5jdGlvbiAoY29uc3VtZXIpIHsgcmV0dXJuIGNvbnN1bWVyLmVycm9yKGVycik7IH0pOyB9O1xuICAgICAgICB2YXIgYWN0aXZlR3JvdXBzID0gMDtcbiAgICAgICAgdmFyIHRlYXJkb3duQXR0ZW1wdGVkID0gZmFsc2U7XG4gICAgICAgIHZhciBncm91cEJ5U291cmNlU3Vic2NyaWJlciA9IG5ldyBPcGVyYXRvclN1YnNjcmliZXJfMS5PcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHZhciBrZXlfMSA9IGtleVNlbGVjdG9yKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB2YXIgZ3JvdXBfMSA9IGdyb3Vwcy5nZXQoa2V5XzEpO1xuICAgICAgICAgICAgICAgIGlmICghZ3JvdXBfMSkge1xuICAgICAgICAgICAgICAgICAgICBncm91cHMuc2V0KGtleV8xLCAoZ3JvdXBfMSA9IGNvbm5lY3RvciA/IGNvbm5lY3RvcigpIDogbmV3IFN1YmplY3RfMS5TdWJqZWN0KCkpKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGdyb3VwZWQgPSBjcmVhdGVHcm91cGVkT2JzZXJ2YWJsZShrZXlfMSwgZ3JvdXBfMSk7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChncm91cGVkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGR1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZHVyYXRpb25TdWJzY3JpYmVyXzEgPSBPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoZ3JvdXBfMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwXzEuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvblN1YnNjcmliZXJfMSA9PT0gbnVsbCB8fCBkdXJhdGlvblN1YnNjcmliZXJfMSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZHVyYXRpb25TdWJzY3JpYmVyXzEudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7IHJldHVybiBncm91cHMuZGVsZXRlKGtleV8xKTsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cEJ5U291cmNlU3Vic2NyaWJlci5hZGQoaW5uZXJGcm9tXzEuaW5uZXJGcm9tKGR1cmF0aW9uKGdyb3VwZWQpKS5zdWJzY3JpYmUoZHVyYXRpb25TdWJzY3JpYmVyXzEpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBncm91cF8xLm5leHQoZWxlbWVudCA/IGVsZW1lbnQodmFsdWUpIDogdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vdGlmeShmdW5jdGlvbiAoY29uc3VtZXIpIHsgcmV0dXJuIGNvbnN1bWVyLmNvbXBsZXRlKCk7IH0pOyB9LCBoYW5kbGVFcnJvciwgZnVuY3Rpb24gKCkgeyByZXR1cm4gZ3JvdXBzLmNsZWFyKCk7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRlYXJkb3duQXR0ZW1wdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBhY3RpdmVHcm91cHMgPT09IDA7XG4gICAgICAgIH0pO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGdyb3VwQnlTb3VyY2VTdWJzY3JpYmVyKTtcbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlR3JvdXBlZE9ic2VydmFibGUoa2V5LCBncm91cFN1YmplY3QpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoZnVuY3Rpb24gKGdyb3VwU3Vic2NyaWJlcikge1xuICAgICAgICAgICAgICAgIGFjdGl2ZUdyb3VwcysrO1xuICAgICAgICAgICAgICAgIHZhciBpbm5lclN1YiA9IGdyb3VwU3ViamVjdC5zdWJzY3JpYmUoZ3JvdXBTdWJzY3JpYmVyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpbm5lclN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICAtLWFjdGl2ZUdyb3VwcyA9PT0gMCAmJiB0ZWFyZG93bkF0dGVtcHRlZCAmJiBncm91cEJ5U291cmNlU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlc3VsdC5rZXkgPSBrZXk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLmdyb3VwQnkgPSBncm91cEJ5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z3JvdXBCeS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNFbXB0eSA9IHZvaWQgMDtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuaXNFbXB0eSA9IGlzRW1wdHk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0VtcHR5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fdmFsdWVzID0gKHRoaXMgJiYgdGhpcy5fX3ZhbHVlcykgfHwgZnVuY3Rpb24obykge1xuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50YWtlTGFzdCA9IHZvaWQgMDtcbnZhciBlbXB0eV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvZW1wdHlcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIHRha2VMYXN0KGNvdW50KSB7XG4gICAgcmV0dXJuIGNvdW50IDw9IDBcbiAgICAgICAgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBlbXB0eV8xLkVNUFRZOyB9XG4gICAgICAgIDogbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IFtdO1xuICAgICAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgIGNvdW50IDwgYnVmZmVyLmxlbmd0aCAmJiBidWZmZXIuc2hpZnQoKTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBidWZmZXJfMSA9IF9fdmFsdWVzKGJ1ZmZlciksIGJ1ZmZlcl8xXzEgPSBidWZmZXJfMS5uZXh0KCk7ICFidWZmZXJfMV8xLmRvbmU7IGJ1ZmZlcl8xXzEgPSBidWZmZXJfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGJ1ZmZlcl8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyXzFfMSAmJiAhYnVmZmVyXzFfMS5kb25lICYmIChfYSA9IGJ1ZmZlcl8xLnJldHVybikpIF9hLmNhbGwoYnVmZmVyXzEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gbnVsbDtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG59XG5leHBvcnRzLnRha2VMYXN0ID0gdGFrZUxhc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10YWtlTGFzdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubGFzdCA9IHZvaWQgMDtcbnZhciBFbXB0eUVycm9yXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9FbXB0eUVycm9yXCIpO1xudmFyIGZpbHRlcl8xID0gcmVxdWlyZShcIi4vZmlsdGVyXCIpO1xudmFyIHRha2VMYXN0XzEgPSByZXF1aXJlKFwiLi90YWtlTGFzdFwiKTtcbnZhciB0aHJvd0lmRW1wdHlfMSA9IHJlcXVpcmUoXCIuL3Rocm93SWZFbXB0eVwiKTtcbnZhciBkZWZhdWx0SWZFbXB0eV8xID0gcmVxdWlyZShcIi4vZGVmYXVsdElmRW1wdHlcIik7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lkZW50aXR5XCIpO1xuZnVuY3Rpb24gbGFzdChwcmVkaWNhdGUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHZhciBoYXNEZWZhdWx0VmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID49IDI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5waXBlKHByZWRpY2F0ZSA/IGZpbHRlcl8xLmZpbHRlcihmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gcHJlZGljYXRlKHYsIGksIHNvdXJjZSk7IH0pIDogaWRlbnRpdHlfMS5pZGVudGl0eSwgdGFrZUxhc3RfMS50YWtlTGFzdCgxKSwgaGFzRGVmYXVsdFZhbHVlID8gZGVmYXVsdElmRW1wdHlfMS5kZWZhdWx0SWZFbXB0eShkZWZhdWx0VmFsdWUpIDogdGhyb3dJZkVtcHR5XzEudGhyb3dJZkVtcHR5KGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBFbXB0eUVycm9yXzEuRW1wdHlFcnJvcigpOyB9KSk7XG4gICAgfTtcbn1cbmV4cG9ydHMubGFzdCA9IGxhc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sYXN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tYXRlcmlhbGl6ZSA9IHZvaWQgMDtcbnZhciBOb3RpZmljYXRpb25fMSA9IHJlcXVpcmUoXCIuLi9Ob3RpZmljYXRpb25cIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIG1hdGVyaWFsaXplKCkge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KE5vdGlmaWNhdGlvbl8xLk5vdGlmaWNhdGlvbi5jcmVhdGVOZXh0KHZhbHVlKSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChOb3RpZmljYXRpb25fMS5Ob3RpZmljYXRpb24uY3JlYXRlQ29tcGxldGUoKSk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChOb3RpZmljYXRpb25fMS5Ob3RpZmljYXRpb24uY3JlYXRlRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMubWF0ZXJpYWxpemUgPSBtYXRlcmlhbGl6ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1hdGVyaWFsaXplLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tYXggPSB2b2lkIDA7XG52YXIgcmVkdWNlXzEgPSByZXF1aXJlKFwiLi9yZWR1Y2VcIik7XG52YXIgaXNGdW5jdGlvbl8xID0gcmVxdWlyZShcIi4uL3V0aWwvaXNGdW5jdGlvblwiKTtcbmZ1bmN0aW9uIG1heChjb21wYXJlcikge1xuICAgIHJldHVybiByZWR1Y2VfMS5yZWR1Y2UoaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24oY29tcGFyZXIpID8gZnVuY3Rpb24gKHgsIHkpIHsgcmV0dXJuIChjb21wYXJlcih4LCB5KSA+IDAgPyB4IDogeSk7IH0gOiBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4gKHggPiB5ID8geCA6IHkpOyB9KTtcbn1cbmV4cG9ydHMubWF4ID0gbWF4O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWF4LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mbGF0TWFwID0gdm9pZCAwO1xudmFyIG1lcmdlTWFwXzEgPSByZXF1aXJlKFwiLi9tZXJnZU1hcFwiKTtcbmV4cG9ydHMuZmxhdE1hcCA9IG1lcmdlTWFwXzEubWVyZ2VNYXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mbGF0TWFwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tZXJnZU1hcFRvID0gdm9pZCAwO1xudmFyIG1lcmdlTWFwXzEgPSByZXF1aXJlKFwiLi9tZXJnZU1hcFwiKTtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc0Z1bmN0aW9uXCIpO1xuZnVuY3Rpb24gbWVyZ2VNYXBUbyhpbm5lck9ic2VydmFibGUsIHJlc3VsdFNlbGVjdG9yLCBjb25jdXJyZW50KSB7XG4gICAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkgeyBjb25jdXJyZW50ID0gSW5maW5pdHk7IH1cbiAgICBpZiAoaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24ocmVzdWx0U2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBtZXJnZU1hcF8xLm1lcmdlTWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlubmVyT2JzZXJ2YWJsZTsgfSwgcmVzdWx0U2VsZWN0b3IsIGNvbmN1cnJlbnQpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3VsdFNlbGVjdG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25jdXJyZW50ID0gcmVzdWx0U2VsZWN0b3I7XG4gICAgfVxuICAgIHJldHVybiBtZXJnZU1hcF8xLm1lcmdlTWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlubmVyT2JzZXJ2YWJsZTsgfSwgY29uY3VycmVudCk7XG59XG5leHBvcnRzLm1lcmdlTWFwVG8gPSBtZXJnZU1hcFRvO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2VNYXBUby5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubWVyZ2VTY2FuID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgbWVyZ2VJbnRlcm5hbHNfMSA9IHJlcXVpcmUoXCIuL21lcmdlSW50ZXJuYWxzXCIpO1xuZnVuY3Rpb24gbWVyZ2VTY2FuKGFjY3VtdWxhdG9yLCBzZWVkLCBjb25jdXJyZW50KSB7XG4gICAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkgeyBjb25jdXJyZW50ID0gSW5maW5pdHk7IH1cbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgc3RhdGUgPSBzZWVkO1xuICAgICAgICByZXR1cm4gbWVyZ2VJbnRlcm5hbHNfMS5tZXJnZUludGVybmFscyhzb3VyY2UsIHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHsgcmV0dXJuIGFjY3VtdWxhdG9yKHN0YXRlLCB2YWx1ZSwgaW5kZXgpOyB9LCBjb25jdXJyZW50LCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHN0YXRlID0gdmFsdWU7XG4gICAgICAgIH0sIGZhbHNlLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIChzdGF0ZSA9IG51bGwpOyB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMubWVyZ2VTY2FuID0gbWVyZ2VTY2FuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2VTY2FuLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxuICAgICAgICB0b1tqXSA9IGZyb21baV07XG4gICAgcmV0dXJuIHRvO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubWVyZ2UgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBhcmdzT3JBcmdBcnJheV8xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc09yQXJnQXJyYXlcIik7XG52YXIgbWVyZ2VBbGxfMSA9IHJlcXVpcmUoXCIuL21lcmdlQWxsXCIpO1xudmFyIGFyZ3NfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyZ3NcIik7XG52YXIgZnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvZnJvbVwiKTtcbmZ1bmN0aW9uIG1lcmdlKCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgc2NoZWR1bGVyID0gYXJnc18xLnBvcFNjaGVkdWxlcihhcmdzKTtcbiAgICB2YXIgY29uY3VycmVudCA9IGFyZ3NfMS5wb3BOdW1iZXIoYXJncywgSW5maW5pdHkpO1xuICAgIGFyZ3MgPSBhcmdzT3JBcmdBcnJheV8xLmFyZ3NPckFyZ0FycmF5KGFyZ3MpO1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIG1lcmdlQWxsXzEubWVyZ2VBbGwoY29uY3VycmVudCkoZnJvbV8xLmZyb20oX19zcHJlYWRBcnJheShbc291cmNlXSwgX19yZWFkKGFyZ3MpKSwgc2NoZWR1bGVyKSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5tZXJnZSA9IG1lcmdlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2UuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXG4gICAgICAgIHRvW2pdID0gZnJvbVtpXTtcbiAgICByZXR1cm4gdG87XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tZXJnZVdpdGggPSB2b2lkIDA7XG52YXIgbWVyZ2VfMSA9IHJlcXVpcmUoXCIuL21lcmdlXCIpO1xuZnVuY3Rpb24gbWVyZ2VXaXRoKCkge1xuICAgIHZhciBvdGhlclNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBvdGhlclNvdXJjZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlXzEubWVyZ2UuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQob3RoZXJTb3VyY2VzKSkpO1xufVxuZXhwb3J0cy5tZXJnZVdpdGggPSBtZXJnZVdpdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnZVdpdGguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm1pbiA9IHZvaWQgMDtcbnZhciByZWR1Y2VfMSA9IHJlcXVpcmUoXCIuL3JlZHVjZVwiKTtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc0Z1bmN0aW9uXCIpO1xuZnVuY3Rpb24gbWluKGNvbXBhcmVyKSB7XG4gICAgcmV0dXJuIHJlZHVjZV8xLnJlZHVjZShpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbihjb21wYXJlcikgPyBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4gKGNvbXBhcmVyKHgsIHkpIDwgMCA/IHggOiB5KTsgfSA6IGZ1bmN0aW9uICh4LCB5KSB7IHJldHVybiAoeCA8IHkgPyB4IDogeSk7IH0pO1xufVxuZXhwb3J0cy5taW4gPSBtaW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1taW4uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm11bHRpY2FzdCA9IHZvaWQgMDtcbnZhciBDb25uZWN0YWJsZU9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL0Nvbm5lY3RhYmxlT2JzZXJ2YWJsZVwiKTtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc0Z1bmN0aW9uXCIpO1xudmFyIGNvbm5lY3RfMSA9IHJlcXVpcmUoXCIuL2Nvbm5lY3RcIik7XG5mdW5jdGlvbiBtdWx0aWNhc3Qoc3ViamVjdE9yU3ViamVjdEZhY3RvcnksIHNlbGVjdG9yKSB7XG4gICAgdmFyIHN1YmplY3RGYWN0b3J5ID0gaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24oc3ViamVjdE9yU3ViamVjdEZhY3RvcnkpID8gc3ViamVjdE9yU3ViamVjdEZhY3RvcnkgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdWJqZWN0T3JTdWJqZWN0RmFjdG9yeTsgfTtcbiAgICBpZiAoaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24oc2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBjb25uZWN0XzEuY29ubmVjdChzZWxlY3Rvciwge1xuICAgICAgICAgICAgY29ubmVjdG9yOiBzdWJqZWN0RmFjdG9yeSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBuZXcgQ29ubmVjdGFibGVPYnNlcnZhYmxlXzEuQ29ubmVjdGFibGVPYnNlcnZhYmxlKHNvdXJjZSwgc3ViamVjdEZhY3RvcnkpOyB9O1xufVxuZXhwb3J0cy5tdWx0aWNhc3QgPSBtdWx0aWNhc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdWx0aWNhc3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXG4gICAgICAgIHRvW2pdID0gZnJvbVtpXTtcbiAgICByZXR1cm4gdG87XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5vbkVycm9yUmVzdW1lTmV4dCA9IGV4cG9ydHMub25FcnJvclJlc3VtZU5leHRXaXRoID0gdm9pZCAwO1xudmFyIGFyZ3NPckFyZ0FycmF5XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcmdzT3JBcmdBcnJheVwiKTtcbnZhciBvbkVycm9yUmVzdW1lTmV4dF8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvb25FcnJvclJlc3VtZU5leHRcIik7XG5mdW5jdGlvbiBvbkVycm9yUmVzdW1lTmV4dFdpdGgoKSB7XG4gICAgdmFyIHNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBzb3VyY2VzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBuZXh0U291cmNlcyA9IGFyZ3NPckFyZ0FycmF5XzEuYXJnc09yQXJnQXJyYXkoc291cmNlcyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIG9uRXJyb3JSZXN1bWVOZXh0XzEub25FcnJvclJlc3VtZU5leHQuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtzb3VyY2VdLCBfX3JlYWQobmV4dFNvdXJjZXMpKSk7IH07XG59XG5leHBvcnRzLm9uRXJyb3JSZXN1bWVOZXh0V2l0aCA9IG9uRXJyb3JSZXN1bWVOZXh0V2l0aDtcbmV4cG9ydHMub25FcnJvclJlc3VtZU5leHQgPSBvbkVycm9yUmVzdW1lTmV4dFdpdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vbkVycm9yUmVzdW1lTmV4dFdpdGguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhaXJ3aXNlID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBwYWlyd2lzZSgpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgcHJldjtcbiAgICAgICAgdmFyIGhhc1ByZXYgPSBmYWxzZTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgcCA9IHByZXY7XG4gICAgICAgICAgICBwcmV2ID0gdmFsdWU7XG4gICAgICAgICAgICBoYXNQcmV2ICYmIHN1YnNjcmliZXIubmV4dChbcCwgdmFsdWVdKTtcbiAgICAgICAgICAgIGhhc1ByZXYgPSB0cnVlO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG5leHBvcnRzLnBhaXJ3aXNlID0gcGFpcndpc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYWlyd2lzZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGx1Y2sgPSB2b2lkIDA7XG52YXIgbWFwXzEgPSByZXF1aXJlKFwiLi9tYXBcIik7XG5mdW5jdGlvbiBwbHVjaygpIHtcbiAgICB2YXIgcHJvcGVydGllcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHByb3BlcnRpZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIGxlbmd0aCA9IHByb3BlcnRpZXMubGVuZ3RoO1xuICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdsaXN0IG9mIHByb3BlcnRpZXMgY2Fubm90IGJlIGVtcHR5LicpO1xuICAgIH1cbiAgICByZXR1cm4gbWFwXzEubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHZhciBjdXJyZW50UHJvcCA9IHg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBwID0gY3VycmVudFByb3AgPT09IG51bGwgfHwgY3VycmVudFByb3AgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN1cnJlbnRQcm9wW3Byb3BlcnRpZXNbaV1dO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9wID0gcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQcm9wO1xuICAgIH0pO1xufVxuZXhwb3J0cy5wbHVjayA9IHBsdWNrO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGx1Y2suanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnB1Ymxpc2ggPSB2b2lkIDA7XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZShcIi4uL1N1YmplY3RcIik7XG52YXIgbXVsdGljYXN0XzEgPSByZXF1aXJlKFwiLi9tdWx0aWNhc3RcIik7XG52YXIgY29ubmVjdF8xID0gcmVxdWlyZShcIi4vY29ubmVjdFwiKTtcbmZ1bmN0aW9uIHB1Ymxpc2goc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gc2VsZWN0b3IgPyBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBjb25uZWN0XzEuY29ubmVjdChzZWxlY3Rvcikoc291cmNlKTsgfSA6IGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIG11bHRpY2FzdF8xLm11bHRpY2FzdChuZXcgU3ViamVjdF8xLlN1YmplY3QoKSkoc291cmNlKTsgfTtcbn1cbmV4cG9ydHMucHVibGlzaCA9IHB1Ymxpc2g7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wdWJsaXNoLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wdWJsaXNoQmVoYXZpb3IgPSB2b2lkIDA7XG52YXIgQmVoYXZpb3JTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi4vQmVoYXZpb3JTdWJqZWN0XCIpO1xudmFyIENvbm5lY3RhYmxlT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvQ29ubmVjdGFibGVPYnNlcnZhYmxlXCIpO1xuZnVuY3Rpb24gcHVibGlzaEJlaGF2aW9yKGluaXRpYWxWYWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdF8xLkJlaGF2aW9yU3ViamVjdChpbml0aWFsVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IENvbm5lY3RhYmxlT2JzZXJ2YWJsZV8xLkNvbm5lY3RhYmxlT2JzZXJ2YWJsZShzb3VyY2UsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YmplY3Q7IH0pO1xuICAgIH07XG59XG5leHBvcnRzLnB1Ymxpc2hCZWhhdmlvciA9IHB1Ymxpc2hCZWhhdmlvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXB1Ymxpc2hCZWhhdmlvci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucHVibGlzaExhc3QgPSB2b2lkIDA7XG52YXIgQXN5bmNTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi4vQXN5bmNTdWJqZWN0XCIpO1xudmFyIENvbm5lY3RhYmxlT2JzZXJ2YWJsZV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvQ29ubmVjdGFibGVPYnNlcnZhYmxlXCIpO1xuZnVuY3Rpb24gcHVibGlzaExhc3QoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSBuZXcgQXN5bmNTdWJqZWN0XzEuQXN5bmNTdWJqZWN0KCk7XG4gICAgICAgIHJldHVybiBuZXcgQ29ubmVjdGFibGVPYnNlcnZhYmxlXzEuQ29ubmVjdGFibGVPYnNlcnZhYmxlKHNvdXJjZSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gc3ViamVjdDsgfSk7XG4gICAgfTtcbn1cbmV4cG9ydHMucHVibGlzaExhc3QgPSBwdWJsaXNoTGFzdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXB1Ymxpc2hMYXN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wdWJsaXNoUmVwbGF5ID0gdm9pZCAwO1xudmFyIFJlcGxheVN1YmplY3RfMSA9IHJlcXVpcmUoXCIuLi9SZXBsYXlTdWJqZWN0XCIpO1xudmFyIG11bHRpY2FzdF8xID0gcmVxdWlyZShcIi4vbXVsdGljYXN0XCIpO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRnVuY3Rpb25cIik7XG5mdW5jdGlvbiBwdWJsaXNoUmVwbGF5KGJ1ZmZlclNpemUsIHdpbmRvd1RpbWUsIHNlbGVjdG9yT3JTY2hlZHVsZXIsIHRpbWVzdGFtcFByb3ZpZGVyKSB7XG4gICAgaWYgKHNlbGVjdG9yT3JTY2hlZHVsZXIgJiYgIWlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHNlbGVjdG9yT3JTY2hlZHVsZXIpKSB7XG4gICAgICAgIHRpbWVzdGFtcFByb3ZpZGVyID0gc2VsZWN0b3JPclNjaGVkdWxlcjtcbiAgICB9XG4gICAgdmFyIHNlbGVjdG9yID0gaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24oc2VsZWN0b3JPclNjaGVkdWxlcikgPyBzZWxlY3Rvck9yU2NoZWR1bGVyIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBtdWx0aWNhc3RfMS5tdWx0aWNhc3QobmV3IFJlcGxheVN1YmplY3RfMS5SZXBsYXlTdWJqZWN0KGJ1ZmZlclNpemUsIHdpbmRvd1RpbWUsIHRpbWVzdGFtcFByb3ZpZGVyKSwgc2VsZWN0b3IpKHNvdXJjZSk7IH07XG59XG5leHBvcnRzLnB1Ymxpc2hSZXBsYXkgPSBwdWJsaXNoUmVwbGF5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHVibGlzaFJlcGxheS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJhY2VXaXRoID0gdm9pZCAwO1xudmFyIHJhY2VfMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL3JhY2VcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBpZGVudGl0eV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaWRlbnRpdHlcIik7XG5mdW5jdGlvbiByYWNlV2l0aCgpIHtcbiAgICB2YXIgb3RoZXJTb3VyY2VzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgb3RoZXJTb3VyY2VzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiAhb3RoZXJTb3VyY2VzLmxlbmd0aFxuICAgICAgICA/IGlkZW50aXR5XzEuaWRlbnRpdHlcbiAgICAgICAgOiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICByYWNlXzEucmFjZUluaXQoX19zcHJlYWRBcnJheShbc291cmNlXSwgX19yZWFkKG90aGVyU291cmNlcykpKShzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG59XG5leHBvcnRzLnJhY2VXaXRoID0gcmFjZVdpdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yYWNlV2l0aC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVwZWF0ID0gdm9pZCAwO1xudmFyIGVtcHR5XzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9lbXB0eVwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIHRpbWVyXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS90aW1lclwiKTtcbmZ1bmN0aW9uIHJlcGVhdChjb3VudE9yQ29uZmlnKSB7XG4gICAgdmFyIF9hO1xuICAgIHZhciBjb3VudCA9IEluZmluaXR5O1xuICAgIHZhciBkZWxheTtcbiAgICBpZiAoY291bnRPckNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY291bnRPckNvbmZpZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIChfYSA9IGNvdW50T3JDb25maWcuY291bnQsIGNvdW50ID0gX2EgPT09IHZvaWQgMCA/IEluZmluaXR5IDogX2EsIGRlbGF5ID0gY291bnRPckNvbmZpZy5kZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb3VudCA9IGNvdW50T3JDb25maWc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvdW50IDw9IDBcbiAgICAgICAgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBlbXB0eV8xLkVNUFRZOyB9XG4gICAgICAgIDogbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgdmFyIHNvRmFyID0gMDtcbiAgICAgICAgICAgIHZhciBzb3VyY2VTdWI7XG4gICAgICAgICAgICB2YXIgcmVzdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc291cmNlU3ViID09PSBudWxsIHx8IHNvdXJjZVN1YiA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgc291cmNlU3ViID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoZGVsYXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbm90aWZpZXIgPSB0eXBlb2YgZGVsYXkgPT09ICdudW1iZXInID8gdGltZXJfMS50aW1lcihkZWxheSkgOiBpbm5lckZyb21fMS5pbm5lckZyb20oZGVsYXkoc29GYXIpKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5vdGlmaWVyU3Vic2NyaWJlcl8xID0gT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyU3Vic2NyaWJlcl8xLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVUb1NvdXJjZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3Vic2NyaWJlKG5vdGlmaWVyU3Vic2NyaWJlcl8xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZVRvU291cmNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciBzdWJzY3JpYmVUb1NvdXJjZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3luY1Vuc3ViID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc291cmNlU3ViID0gc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgrK3NvRmFyIDwgY291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VTdWIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY1Vuc3ViID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICBpZiAoc3luY1Vuc3ViKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHN1YnNjcmliZVRvU291cmNlKCk7XG4gICAgICAgIH0pO1xufVxuZXhwb3J0cy5yZXBlYXQgPSByZXBlYXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXBlYXQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlcGVhdFdoZW4gPSB2b2lkIDA7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZShcIi4uL1N1YmplY3RcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIHJlcGVhdFdoZW4obm90aWZpZXIpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaW5uZXJTdWI7XG4gICAgICAgIHZhciBzeW5jUmVzdWIgPSBmYWxzZTtcbiAgICAgICAgdmFyIGNvbXBsZXRpb25zJDtcbiAgICAgICAgdmFyIGlzTm90aWZpZXJDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgaXNNYWluQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgdmFyIGNoZWNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBpc01haW5Db21wbGV0ZSAmJiBpc05vdGlmaWVyQ29tcGxldGUgJiYgKHN1YnNjcmliZXIuY29tcGxldGUoKSwgdHJ1ZSk7IH07XG4gICAgICAgIHZhciBnZXRDb21wbGV0aW9uU3ViamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghY29tcGxldGlvbnMkKSB7XG4gICAgICAgICAgICAgICAgY29tcGxldGlvbnMkID0gbmV3IFN1YmplY3RfMS5TdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKG5vdGlmaWVyKGNvbXBsZXRpb25zJCkpLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5uZXJTdWIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZUZvclJlcGVhdFdoZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNSZXN1YiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzTm90aWZpZXJDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbnMkO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgc3Vic2NyaWJlRm9yUmVwZWF0V2hlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlzTWFpbkNvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgICAgICBpbm5lclN1YiA9IHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlzTWFpbkNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAhY2hlY2tDb21wbGV0ZSgpICYmIGdldENvbXBsZXRpb25TdWJqZWN0KCkubmV4dCgpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgaWYgKHN5bmNSZXN1Yikge1xuICAgICAgICAgICAgICAgIGlubmVyU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgaW5uZXJTdWIgPSBudWxsO1xuICAgICAgICAgICAgICAgIHN5bmNSZXN1YiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZUZvclJlcGVhdFdoZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc3Vic2NyaWJlRm9yUmVwZWF0V2hlbigpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5yZXBlYXRXaGVuID0gcmVwZWF0V2hlbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcGVhdFdoZW4uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJldHJ5ID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lkZW50aXR5XCIpO1xudmFyIHRpbWVyXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS90aW1lclwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbmZ1bmN0aW9uIHJldHJ5KGNvbmZpZ09yQ291bnQpIHtcbiAgICBpZiAoY29uZmlnT3JDb3VudCA9PT0gdm9pZCAwKSB7IGNvbmZpZ09yQ291bnQgPSBJbmZpbml0eTsgfVxuICAgIHZhciBjb25maWc7XG4gICAgaWYgKGNvbmZpZ09yQ291bnQgJiYgdHlwZW9mIGNvbmZpZ09yQ291bnQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbmZpZyA9IGNvbmZpZ09yQ291bnQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25maWcgPSB7XG4gICAgICAgICAgICBjb3VudDogY29uZmlnT3JDb3VudCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdmFyIF9hID0gY29uZmlnLmNvdW50LCBjb3VudCA9IF9hID09PSB2b2lkIDAgPyBJbmZpbml0eSA6IF9hLCBkZWxheSA9IGNvbmZpZy5kZWxheSwgX2IgPSBjb25maWcucmVzZXRPblN1Y2Nlc3MsIHJlc2V0T25TdWNjZXNzID0gX2IgPT09IHZvaWQgMCA/IGZhbHNlIDogX2I7XG4gICAgcmV0dXJuIGNvdW50IDw9IDBcbiAgICAgICAgPyBpZGVudGl0eV8xLmlkZW50aXR5XG4gICAgICAgIDogbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgdmFyIHNvRmFyID0gMDtcbiAgICAgICAgICAgIHZhciBpbm5lclN1YjtcbiAgICAgICAgICAgIHZhciBzdWJzY3JpYmVGb3JSZXRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3luY1Vuc3ViID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaW5uZXJTdWIgPSBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc2V0T25TdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb0ZhciA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9LCB1bmRlZmluZWQsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvRmFyKysgPCBjb3VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3ViXzEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubmVyU3ViKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyU3ViID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlRm9yUmV0cnkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNVbnN1YiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWxheSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vdGlmaWVyID0gdHlwZW9mIGRlbGF5ID09PSAnbnVtYmVyJyA/IHRpbWVyXzEudGltZXIoZGVsYXkpIDogaW5uZXJGcm9tXzEuaW5uZXJGcm9tKGRlbGF5KGVyciwgc29GYXIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm90aWZpZXJTdWJzY3JpYmVyXzEgPSBPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllclN1YnNjcmliZXJfMS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1Yl8xKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3Vic2NyaWJlKG5vdGlmaWVyU3Vic2NyaWJlcl8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3ViXzEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICBpZiAoc3luY1Vuc3ViKSB7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyU3ViID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlRm9yUmV0cnkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgc3Vic2NyaWJlRm9yUmV0cnkoKTtcbiAgICAgICAgfSk7XG59XG5leHBvcnRzLnJldHJ5ID0gcmV0cnk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXRyeS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmV0cnlXaGVuID0gdm9pZCAwO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIFN1YmplY3RfMSA9IHJlcXVpcmUoXCIuLi9TdWJqZWN0XCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiByZXRyeVdoZW4obm90aWZpZXIpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaW5uZXJTdWI7XG4gICAgICAgIHZhciBzeW5jUmVzdWIgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9ycyQ7XG4gICAgICAgIHZhciBzdWJzY3JpYmVGb3JSZXRyeVdoZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpbm5lclN1YiA9IHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvcnMkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycyQgPSBuZXcgU3ViamVjdF8xLlN1YmplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKG5vdGlmaWVyKGVycm9ycyQpKS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbm5lclN1YiA/IHN1YnNjcmliZUZvclJldHJ5V2hlbigpIDogKHN5bmNSZXN1YiA9IHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnJvcnMkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycyQubmV4dChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGlmIChzeW5jUmVzdWIpIHtcbiAgICAgICAgICAgICAgICBpbm5lclN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIGlubmVyU3ViID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzeW5jUmVzdWIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVGb3JSZXRyeVdoZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc3Vic2NyaWJlRm9yUmV0cnlXaGVuKCk7XG4gICAgfSk7XG59XG5leHBvcnRzLnJldHJ5V2hlbiA9IHJldHJ5V2hlbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJldHJ5V2hlbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2FtcGxlID0gdm9pZCAwO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgbm9vcF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbm9vcFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIHNhbXBsZShub3RpZmllcikge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfSkpO1xuICAgICAgICBpbm5lckZyb21fMS5pbm5lckZyb20obm90aWZpZXIpLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBsYXN0VmFsdWU7XG4gICAgICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBub29wXzEubm9vcCkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5zYW1wbGUgPSBzYW1wbGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zYW1wbGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNhbXBsZVRpbWUgPSB2b2lkIDA7XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoXCIuLi9zY2hlZHVsZXIvYXN5bmNcIik7XG52YXIgc2FtcGxlXzEgPSByZXF1aXJlKFwiLi9zYW1wbGVcIik7XG52YXIgaW50ZXJ2YWxfMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2ludGVydmFsXCIpO1xuZnVuY3Rpb24gc2FtcGxlVGltZShwZXJpb2QsIHNjaGVkdWxlcikge1xuICAgIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkgeyBzY2hlZHVsZXIgPSBhc3luY18xLmFzeW5jU2NoZWR1bGVyOyB9XG4gICAgcmV0dXJuIHNhbXBsZV8xLnNhbXBsZShpbnRlcnZhbF8xLmludGVydmFsKHBlcmlvZCwgc2NoZWR1bGVyKSk7XG59XG5leHBvcnRzLnNhbXBsZVRpbWUgPSBzYW1wbGVUaW1lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2FtcGxlVGltZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2NhbiA9IHZvaWQgMDtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIHNjYW5JbnRlcm5hbHNfMSA9IHJlcXVpcmUoXCIuL3NjYW5JbnRlcm5hbHNcIik7XG5mdW5jdGlvbiBzY2FuKGFjY3VtdWxhdG9yLCBzZWVkKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKHNjYW5JbnRlcm5hbHNfMS5zY2FuSW50ZXJuYWxzKGFjY3VtdWxhdG9yLCBzZWVkLCBhcmd1bWVudHMubGVuZ3RoID49IDIsIHRydWUpKTtcbn1cbmV4cG9ydHMuc2NhbiA9IHNjYW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY2FuLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZXF1ZW5jZUVxdWFsID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG5mdW5jdGlvbiBzZXF1ZW5jZUVxdWFsKGNvbXBhcmVUbywgY29tcGFyYXRvcikge1xuICAgIGlmIChjb21wYXJhdG9yID09PSB2b2lkIDApIHsgY29tcGFyYXRvciA9IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhID09PSBiOyB9OyB9XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGFTdGF0ZSA9IGNyZWF0ZVN0YXRlKCk7XG4gICAgICAgIHZhciBiU3RhdGUgPSBjcmVhdGVTdGF0ZSgpO1xuICAgICAgICB2YXIgZW1pdCA9IGZ1bmN0aW9uIChpc0VxdWFsKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoaXNFcXVhbCk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBjcmVhdGVTdWJzY3JpYmVyID0gZnVuY3Rpb24gKHNlbGZTdGF0ZSwgb3RoZXJTdGF0ZSkge1xuICAgICAgICAgICAgdmFyIHNlcXVlbmNlRXF1YWxTdWJzY3JpYmVyID0gT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IG90aGVyU3RhdGUuYnVmZmVyLCBjb21wbGV0ZSA9IG90aGVyU3RhdGUuY29tcGxldGU7XG4gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGUgPyBlbWl0KGZhbHNlKSA6IHNlbGZTdGF0ZS5idWZmZXIucHVzaChhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICFjb21wYXJhdG9yKGEsIGJ1ZmZlci5zaGlmdCgpKSAmJiBlbWl0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2VsZlN0YXRlLmNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgY29tcGxldGUgPSBvdGhlclN0YXRlLmNvbXBsZXRlLCBidWZmZXIgPSBvdGhlclN0YXRlLmJ1ZmZlcjtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZSAmJiBlbWl0KGJ1ZmZlci5sZW5ndGggPT09IDApO1xuICAgICAgICAgICAgICAgIHNlcXVlbmNlRXF1YWxTdWJzY3JpYmVyID09PSBudWxsIHx8IHNlcXVlbmNlRXF1YWxTdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZXF1ZW5jZUVxdWFsU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gc2VxdWVuY2VFcXVhbFN1YnNjcmliZXI7XG4gICAgICAgIH07XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlU3Vic2NyaWJlcihhU3RhdGUsIGJTdGF0ZSkpO1xuICAgICAgICBpbm5lckZyb21fMS5pbm5lckZyb20oY29tcGFyZVRvKS5zdWJzY3JpYmUoY3JlYXRlU3Vic2NyaWJlcihiU3RhdGUsIGFTdGF0ZSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5zZXF1ZW5jZUVxdWFsID0gc2VxdWVuY2VFcXVhbDtcbmZ1bmN0aW9uIGNyZWF0ZVN0YXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGJ1ZmZlcjogW10sXG4gICAgICAgIGNvbXBsZXRlOiBmYWxzZSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VxdWVuY2VFcXVhbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNoYXJlID0gdm9pZCAwO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIFN1YmplY3RfMSA9IHJlcXVpcmUoXCIuLi9TdWJqZWN0XCIpO1xudmFyIFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuLi9TdWJzY3JpYmVyXCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG5mdW5jdGlvbiBzaGFyZShvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgX2EgPSBvcHRpb25zLmNvbm5lY3RvciwgY29ubmVjdG9yID0gX2EgPT09IHZvaWQgMCA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBTdWJqZWN0XzEuU3ViamVjdCgpOyB9IDogX2EsIF9iID0gb3B0aW9ucy5yZXNldE9uRXJyb3IsIHJlc2V0T25FcnJvciA9IF9iID09PSB2b2lkIDAgPyB0cnVlIDogX2IsIF9jID0gb3B0aW9ucy5yZXNldE9uQ29tcGxldGUsIHJlc2V0T25Db21wbGV0ZSA9IF9jID09PSB2b2lkIDAgPyB0cnVlIDogX2MsIF9kID0gb3B0aW9ucy5yZXNldE9uUmVmQ291bnRaZXJvLCByZXNldE9uUmVmQ291bnRaZXJvID0gX2QgPT09IHZvaWQgMCA/IHRydWUgOiBfZDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHdyYXBwZXJTb3VyY2UpIHtcbiAgICAgICAgdmFyIGNvbm5lY3Rpb247XG4gICAgICAgIHZhciByZXNldENvbm5lY3Rpb247XG4gICAgICAgIHZhciBzdWJqZWN0O1xuICAgICAgICB2YXIgcmVmQ291bnQgPSAwO1xuICAgICAgICB2YXIgaGFzQ29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgIHZhciBoYXNFcnJvcmVkID0gZmFsc2U7XG4gICAgICAgIHZhciBjYW5jZWxSZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJlc2V0Q29ubmVjdGlvbiA9PT0gbnVsbCB8fCByZXNldENvbm5lY3Rpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc2V0Q29ubmVjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmVzZXRDb25uZWN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgcmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYW5jZWxSZXNldCgpO1xuICAgICAgICAgICAgY29ubmVjdGlvbiA9IHN1YmplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBoYXNDb21wbGV0ZWQgPSBoYXNFcnJvcmVkID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZXNldEFuZFVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGNvbm4gPSBjb25uZWN0aW9uO1xuICAgICAgICAgICAgcmVzZXQoKTtcbiAgICAgICAgICAgIGNvbm4gPT09IG51bGwgfHwgY29ubiA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29ubi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgcmVmQ291bnQrKztcbiAgICAgICAgICAgIGlmICghaGFzRXJyb3JlZCAmJiAhaGFzQ29tcGxldGVkKSB7XG4gICAgICAgICAgICAgICAgY2FuY2VsUmVzZXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBkZXN0ID0gKHN1YmplY3QgPSBzdWJqZWN0ICE9PSBudWxsICYmIHN1YmplY3QgIT09IHZvaWQgMCA/IHN1YmplY3QgOiBjb25uZWN0b3IoKSk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVmQ291bnQtLTtcbiAgICAgICAgICAgICAgICBpZiAocmVmQ291bnQgPT09IDAgJiYgIWhhc0Vycm9yZWQgJiYgIWhhc0NvbXBsZXRlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXNldENvbm5lY3Rpb24gPSBoYW5kbGVSZXNldChyZXNldEFuZFVuc3Vic2NyaWJlLCByZXNldE9uUmVmQ291bnRaZXJvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRlc3Quc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICAgICAgaWYgKCFjb25uZWN0aW9uICYmXG4gICAgICAgICAgICAgICAgcmVmQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbiA9IG5ldyBTdWJzY3JpYmVyXzEuU2FmZVN1YnNjcmliZXIoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIGRlc3QubmV4dCh2YWx1ZSk7IH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldENvbm5lY3Rpb24gPSBoYW5kbGVSZXNldChyZXNldCwgcmVzZXRPbkVycm9yLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldENvbm5lY3Rpb24gPSBoYW5kbGVSZXNldChyZXNldCwgcmVzZXRPbkNvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpbm5lckZyb21fMS5pbm5lckZyb20oc291cmNlKS5zdWJzY3JpYmUoY29ubmVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKHdyYXBwZXJTb3VyY2UpO1xuICAgIH07XG59XG5leHBvcnRzLnNoYXJlID0gc2hhcmU7XG5mdW5jdGlvbiBoYW5kbGVSZXNldChyZXNldCwgb24pIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIGlmIChvbiA9PT0gdHJ1ZSkge1xuICAgICAgICByZXNldCgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChvbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgb25TdWJzY3JpYmVyID0gbmV3IFN1YnNjcmliZXJfMS5TYWZlU3Vic2NyaWJlcih7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG9uU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmVzZXQoKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gaW5uZXJGcm9tXzEuaW5uZXJGcm9tKG9uLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGFyZ3MpKSkpLnN1YnNjcmliZShvblN1YnNjcmliZXIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2hhcmUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNoYXJlUmVwbGF5ID0gdm9pZCAwO1xudmFyIFJlcGxheVN1YmplY3RfMSA9IHJlcXVpcmUoXCIuLi9SZXBsYXlTdWJqZWN0XCIpO1xudmFyIHNoYXJlXzEgPSByZXF1aXJlKFwiLi9zaGFyZVwiKTtcbmZ1bmN0aW9uIHNoYXJlUmVwbGF5KGNvbmZpZ09yQnVmZmVyU2l6ZSwgd2luZG93VGltZSwgc2NoZWR1bGVyKSB7XG4gICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgdmFyIGJ1ZmZlclNpemU7XG4gICAgdmFyIHJlZkNvdW50ID0gZmFsc2U7XG4gICAgaWYgKGNvbmZpZ09yQnVmZmVyU2l6ZSAmJiB0eXBlb2YgY29uZmlnT3JCdWZmZXJTaXplID09PSAnb2JqZWN0Jykge1xuICAgICAgICAoX2EgPSBjb25maWdPckJ1ZmZlclNpemUuYnVmZmVyU2l6ZSwgYnVmZmVyU2l6ZSA9IF9hID09PSB2b2lkIDAgPyBJbmZpbml0eSA6IF9hLCBfYiA9IGNvbmZpZ09yQnVmZmVyU2l6ZS53aW5kb3dUaW1lLCB3aW5kb3dUaW1lID0gX2IgPT09IHZvaWQgMCA/IEluZmluaXR5IDogX2IsIF9jID0gY29uZmlnT3JCdWZmZXJTaXplLnJlZkNvdW50LCByZWZDb3VudCA9IF9jID09PSB2b2lkIDAgPyBmYWxzZSA6IF9jLCBzY2hlZHVsZXIgPSBjb25maWdPckJ1ZmZlclNpemUuc2NoZWR1bGVyKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGJ1ZmZlclNpemUgPSAoY29uZmlnT3JCdWZmZXJTaXplICE9PSBudWxsICYmIGNvbmZpZ09yQnVmZmVyU2l6ZSAhPT0gdm9pZCAwID8gY29uZmlnT3JCdWZmZXJTaXplIDogSW5maW5pdHkpO1xuICAgIH1cbiAgICByZXR1cm4gc2hhcmVfMS5zaGFyZSh7XG4gICAgICAgIGNvbm5lY3RvcjogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFJlcGxheVN1YmplY3RfMS5SZXBsYXlTdWJqZWN0KGJ1ZmZlclNpemUsIHdpbmRvd1RpbWUsIHNjaGVkdWxlcik7IH0sXG4gICAgICAgIHJlc2V0T25FcnJvcjogdHJ1ZSxcbiAgICAgICAgcmVzZXRPbkNvbXBsZXRlOiBmYWxzZSxcbiAgICAgICAgcmVzZXRPblJlZkNvdW50WmVybzogcmVmQ291bnQsXG4gICAgfSk7XG59XG5leHBvcnRzLnNoYXJlUmVwbGF5ID0gc2hhcmVSZXBsYXk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaGFyZVJlcGxheS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2luZ2xlID0gdm9pZCAwO1xudmFyIEVtcHR5RXJyb3JfMSA9IHJlcXVpcmUoXCIuLi91dGlsL0VtcHR5RXJyb3JcIik7XG52YXIgU2VxdWVuY2VFcnJvcl8xID0gcmVxdWlyZShcIi4uL3V0aWwvU2VxdWVuY2VFcnJvclwiKTtcbnZhciBOb3RGb3VuZEVycm9yXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9Ob3RGb3VuZEVycm9yXCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiBzaW5nbGUocHJlZGljYXRlKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHZhciBzaW5nbGVWYWx1ZTtcbiAgICAgICAgdmFyIHNlZW5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHNlZW5WYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAoIXByZWRpY2F0ZSB8fCBwcmVkaWNhdGUodmFsdWUsIGluZGV4KyssIHNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICBoYXNWYWx1ZSAmJiBzdWJzY3JpYmVyLmVycm9yKG5ldyBTZXF1ZW5jZUVycm9yXzEuU2VxdWVuY2VFcnJvcignVG9vIG1hbnkgbWF0Y2hpbmcgdmFsdWVzJykpO1xuICAgICAgICAgICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzaW5nbGVWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoc2luZ2xlVmFsdWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3Ioc2VlblZhbHVlID8gbmV3IE5vdEZvdW5kRXJyb3JfMS5Ob3RGb3VuZEVycm9yKCdObyBtYXRjaGluZyB2YWx1ZXMnKSA6IG5ldyBFbXB0eUVycm9yXzEuRW1wdHlFcnJvcigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5zaW5nbGUgPSBzaW5nbGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaW5nbGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNraXAgPSB2b2lkIDA7XG52YXIgZmlsdGVyXzEgPSByZXF1aXJlKFwiLi9maWx0ZXJcIik7XG5mdW5jdGlvbiBza2lwKGNvdW50KSB7XG4gICAgcmV0dXJuIGZpbHRlcl8xLmZpbHRlcihmdW5jdGlvbiAoXywgaW5kZXgpIHsgcmV0dXJuIGNvdW50IDw9IGluZGV4OyB9KTtcbn1cbmV4cG9ydHMuc2tpcCA9IHNraXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1za2lwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5za2lwTGFzdCA9IHZvaWQgMDtcbnZhciBpZGVudGl0eV8xID0gcmVxdWlyZShcIi4uL3V0aWwvaWRlbnRpdHlcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIHNraXBMYXN0KHNraXBDb3VudCkge1xuICAgIHJldHVybiBza2lwQ291bnQgPD0gMFxuICAgICAgICA/XG4gICAgICAgICAgICBpZGVudGl0eV8xLmlkZW50aXR5XG4gICAgICAgIDogbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgdmFyIHJpbmcgPSBuZXcgQXJyYXkoc2tpcENvdW50KTtcbiAgICAgICAgICAgIHZhciBzZWVuID0gMDtcbiAgICAgICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZUluZGV4ID0gc2VlbisrO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZUluZGV4IDwgc2tpcENvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJpbmdbdmFsdWVJbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHZhbHVlSW5kZXggJSBza2lwQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IHJpbmdbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICByaW5nW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQob2xkVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmluZyA9IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbn1cbmV4cG9ydHMuc2tpcExhc3QgPSBza2lwTGFzdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNraXBMYXN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5za2lwVW50aWwgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbnZhciBub29wXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9ub29wXCIpO1xuZnVuY3Rpb24gc2tpcFVudGlsKG5vdGlmaWVyKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHRha2luZyA9IGZhbHNlO1xuICAgICAgICB2YXIgc2tpcFN1YnNjcmliZXIgPSBPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2tpcFN1YnNjcmliZXIgPT09IG51bGwgfHwgc2tpcFN1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNraXBTdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0YWtpbmcgPSB0cnVlO1xuICAgICAgICB9LCBub29wXzEubm9vcCk7XG4gICAgICAgIGlubmVyRnJvbV8xLmlubmVyRnJvbShub3RpZmllcikuc3Vic2NyaWJlKHNraXBTdWJzY3JpYmVyKTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB0YWtpbmcgJiYgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTsgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5za2lwVW50aWwgPSBza2lwVW50aWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1za2lwVW50aWwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNraXBXaGlsZSA9IHZvaWQgMDtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gc2tpcFdoaWxlKHByZWRpY2F0ZSkge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciB0YWtpbmcgPSBmYWxzZTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiAodGFraW5nIHx8ICh0YWtpbmcgPSAhcHJlZGljYXRlKHZhbHVlLCBpbmRleCsrKSkpICYmIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7IH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuc2tpcFdoaWxlID0gc2tpcFdoaWxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2tpcFdoaWxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zdGFydFdpdGggPSB2b2lkIDA7XG52YXIgY29uY2F0XzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9jb25jYXRcIik7XG52YXIgYXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc1wiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xuZnVuY3Rpb24gc3RhcnRXaXRoKCkge1xuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YWx1ZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIHNjaGVkdWxlciA9IGFyZ3NfMS5wb3BTY2hlZHVsZXIodmFsdWVzKTtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICAoc2NoZWR1bGVyID8gY29uY2F0XzEuY29uY2F0KHZhbHVlcywgc291cmNlLCBzY2hlZHVsZXIpIDogY29uY2F0XzEuY29uY2F0KHZhbHVlcywgc291cmNlKSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5zdGFydFdpdGggPSBzdGFydFdpdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGFydFdpdGguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN3aXRjaE1hcCA9IHZvaWQgMDtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gc3dpdGNoTWFwKHByb2plY3QsIHJlc3VsdFNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGlubmVyU3Vic2NyaWJlciA9IG51bGw7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHZhciBpc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIHZhciBjaGVja0NvbXBsZXRlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXNDb21wbGV0ZSAmJiAhaW5uZXJTdWJzY3JpYmVyICYmIHN1YnNjcmliZXIuY29tcGxldGUoKTsgfTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpbm5lclN1YnNjcmliZXIgPT09IG51bGwgfHwgaW5uZXJTdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbm5lclN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHZhciBpbm5lckluZGV4ID0gMDtcbiAgICAgICAgICAgIHZhciBvdXRlckluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgICAgIGlubmVyRnJvbV8xLmlubmVyRnJvbShwcm9qZWN0KHZhbHVlLCBvdXRlckluZGV4KSkuc3Vic2NyaWJlKChpbm5lclN1YnNjcmliZXIgPSBPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKGlubmVyVmFsdWUpIHsgcmV0dXJuIHN1YnNjcmliZXIubmV4dChyZXN1bHRTZWxlY3RvciA/IHJlc3VsdFNlbGVjdG9yKHZhbHVlLCBpbm5lclZhbHVlLCBvdXRlckluZGV4LCBpbm5lckluZGV4KyspIDogaW5uZXJWYWx1ZSk7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpbm5lclN1YnNjcmliZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIGNoZWNrQ29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pKSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgICAgY2hlY2tDb21wbGV0ZSgpO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG5leHBvcnRzLnN3aXRjaE1hcCA9IHN3aXRjaE1hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN3aXRjaE1hcC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3dpdGNoQWxsID0gdm9pZCAwO1xudmFyIHN3aXRjaE1hcF8xID0gcmVxdWlyZShcIi4vc3dpdGNoTWFwXCIpO1xudmFyIGlkZW50aXR5XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pZGVudGl0eVwiKTtcbmZ1bmN0aW9uIHN3aXRjaEFsbCgpIHtcbiAgICByZXR1cm4gc3dpdGNoTWFwXzEuc3dpdGNoTWFwKGlkZW50aXR5XzEuaWRlbnRpdHkpO1xufVxuZXhwb3J0cy5zd2l0Y2hBbGwgPSBzd2l0Y2hBbGw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zd2l0Y2hBbGwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN3aXRjaE1hcFRvID0gdm9pZCAwO1xudmFyIHN3aXRjaE1hcF8xID0gcmVxdWlyZShcIi4vc3dpdGNoTWFwXCIpO1xudmFyIGlzRnVuY3Rpb25fMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lzRnVuY3Rpb25cIik7XG5mdW5jdGlvbiBzd2l0Y2hNYXBUbyhpbm5lck9ic2VydmFibGUsIHJlc3VsdFNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHJlc3VsdFNlbGVjdG9yKSA/IHN3aXRjaE1hcF8xLnN3aXRjaE1hcChmdW5jdGlvbiAoKSB7IHJldHVybiBpbm5lck9ic2VydmFibGU7IH0sIHJlc3VsdFNlbGVjdG9yKSA6IHN3aXRjaE1hcF8xLnN3aXRjaE1hcChmdW5jdGlvbiAoKSB7IHJldHVybiBpbm5lck9ic2VydmFibGU7IH0pO1xufVxuZXhwb3J0cy5zd2l0Y2hNYXBUbyA9IHN3aXRjaE1hcFRvO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3dpdGNoTWFwVG8uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN3aXRjaFNjYW4gPSB2b2lkIDA7XG52YXIgc3dpdGNoTWFwXzEgPSByZXF1aXJlKFwiLi9zd2l0Y2hNYXBcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbmZ1bmN0aW9uIHN3aXRjaFNjYW4oYWNjdW11bGF0b3IsIHNlZWQpIHtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgc3RhdGUgPSBzZWVkO1xuICAgICAgICBzd2l0Y2hNYXBfMS5zd2l0Y2hNYXAoZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkgeyByZXR1cm4gYWNjdW11bGF0b3Ioc3RhdGUsIHZhbHVlLCBpbmRleCk7IH0sIGZ1bmN0aW9uIChfLCBpbm5lclZhbHVlKSB7IHJldHVybiAoKHN0YXRlID0gaW5uZXJWYWx1ZSksIGlubmVyVmFsdWUpOyB9KShzb3VyY2UpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN0YXRlID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuc3dpdGNoU2NhbiA9IHN3aXRjaFNjYW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zd2l0Y2hTY2FuLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50YWtlVW50aWwgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbnZhciBub29wXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9ub29wXCIpO1xuZnVuY3Rpb24gdGFrZVVudGlsKG5vdGlmaWVyKSB7XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKG5vdGlmaWVyKS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YnNjcmliZXIuY29tcGxldGUoKTsgfSwgbm9vcF8xLm5vb3ApKTtcbiAgICAgICAgIXN1YnNjcmliZXIuY2xvc2VkICYmIHNvdXJjZS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfSk7XG59XG5leHBvcnRzLnRha2VVbnRpbCA9IHRha2VVbnRpbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRha2VVbnRpbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudGFrZVdoaWxlID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG5mdW5jdGlvbiB0YWtlV2hpbGUocHJlZGljYXRlLCBpbmNsdXNpdmUpIHtcbiAgICBpZiAoaW5jbHVzaXZlID09PSB2b2lkIDApIHsgaW5jbHVzaXZlID0gZmFsc2U7IH1cbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBwcmVkaWNhdGUodmFsdWUsIGluZGV4KyspO1xuICAgICAgICAgICAgKHJlc3VsdCB8fCBpbmNsdXNpdmUpICYmIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAhcmVzdWx0ICYmIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy50YWtlV2hpbGUgPSB0YWtlV2hpbGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10YWtlV2hpbGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRhcCA9IHZvaWQgMDtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc0Z1bmN0aW9uXCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lkZW50aXR5XCIpO1xuZnVuY3Rpb24gdGFwKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICB2YXIgdGFwT2JzZXJ2ZXIgPSBpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbihvYnNlcnZlck9yTmV4dCkgfHwgZXJyb3IgfHwgY29tcGxldGVcbiAgICAgICAgP1xuICAgICAgICAgICAgeyBuZXh0OiBvYnNlcnZlck9yTmV4dCwgZXJyb3I6IGVycm9yLCBjb21wbGV0ZTogY29tcGxldGUgfVxuICAgICAgICA6IG9ic2VydmVyT3JOZXh0O1xuICAgIHJldHVybiB0YXBPYnNlcnZlclxuICAgICAgICA/IGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIChfYSA9IHRhcE9ic2VydmVyLnN1YnNjcmliZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGFwT2JzZXJ2ZXIpO1xuICAgICAgICAgICAgdmFyIGlzVW5zdWIgPSB0cnVlO1xuICAgICAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIChfYSA9IHRhcE9ic2VydmVyLm5leHQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRhcE9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgaXNVbnN1YiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIChfYSA9IHRhcE9ic2VydmVyLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0YXBPYnNlcnZlcik7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBpc1Vuc3ViID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgKF9hID0gdGFwT2JzZXJ2ZXIuZXJyb3IpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRhcE9ic2VydmVyLCBlcnIpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgICAgIGlmIChpc1Vuc3ViKSB7XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IHRhcE9ic2VydmVyLnVuc3Vic2NyaWJlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0YXBPYnNlcnZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIChfYiA9IHRhcE9ic2VydmVyLmZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbCh0YXBPYnNlcnZlcik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pXG4gICAgICAgIDpcbiAgICAgICAgICAgIGlkZW50aXR5XzEuaWRlbnRpdHk7XG59XG5leHBvcnRzLnRhcCA9IHRhcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRhcC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudGhyb3R0bGUgPSB2b2lkIDA7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBpbm5lckZyb21fMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL2lubmVyRnJvbVwiKTtcbmZ1bmN0aW9uIHRocm90dGxlKGR1cmF0aW9uU2VsZWN0b3IsIGNvbmZpZykge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSA9IGNvbmZpZyAhPT0gbnVsbCAmJiBjb25maWcgIT09IHZvaWQgMCA/IGNvbmZpZyA6IHt9LCBfYiA9IF9hLmxlYWRpbmcsIGxlYWRpbmcgPSBfYiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9iLCBfYyA9IF9hLnRyYWlsaW5nLCB0cmFpbGluZyA9IF9jID09PSB2b2lkIDAgPyBmYWxzZSA6IF9jO1xuICAgICAgICB2YXIgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdmFyIHNlbmRWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciB0aHJvdHRsZWQgPSBudWxsO1xuICAgICAgICB2YXIgaXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgZW5kVGhyb3R0bGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRocm90dGxlZCA9PT0gbnVsbCB8fCB0aHJvdHRsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRocm90dGxlZC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhyb3R0bGVkID0gbnVsbDtcbiAgICAgICAgICAgIGlmICh0cmFpbGluZykge1xuICAgICAgICAgICAgICAgIHNlbmQoKTtcbiAgICAgICAgICAgICAgICBpc0NvbXBsZXRlICYmIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGNsZWFudXBUaHJvdHRsaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhyb3R0bGVkID0gbnVsbDtcbiAgICAgICAgICAgIGlzQ29tcGxldGUgJiYgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgc3RhcnRUaHJvdHRsZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuICh0aHJvdHRsZWQgPSBpbm5lckZyb21fMS5pbm5lckZyb20oZHVyYXRpb25TZWxlY3Rvcih2YWx1ZSkpLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZW5kVGhyb3R0bGluZywgY2xlYW51cFRocm90dGxpbmcpKSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBzZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBzZW5kVmFsdWU7XG4gICAgICAgICAgICAgICAgc2VuZFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICFpc0NvbXBsZXRlICYmIHN0YXJ0VGhyb3R0bGUodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlbmRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgISh0aHJvdHRsZWQgJiYgIXRocm90dGxlZC5jbG9zZWQpICYmIChsZWFkaW5nID8gc2VuZCgpIDogc3RhcnRUaHJvdHRsZSh2YWx1ZSkpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICEodHJhaWxpbmcgJiYgaGFzVmFsdWUgJiYgdGhyb3R0bGVkICYmICF0aHJvdHRsZWQuY2xvc2VkKSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMudGhyb3R0bGUgPSB0aHJvdHRsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRocm90dGxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50aHJvdHRsZVRpbWUgPSB2b2lkIDA7XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoXCIuLi9zY2hlZHVsZXIvYXN5bmNcIik7XG52YXIgdGhyb3R0bGVfMSA9IHJlcXVpcmUoXCIuL3Rocm90dGxlXCIpO1xudmFyIHRpbWVyXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS90aW1lclwiKTtcbmZ1bmN0aW9uIHRocm90dGxlVGltZShkdXJhdGlvbiwgc2NoZWR1bGVyLCBjb25maWcpIHtcbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsgc2NoZWR1bGVyID0gYXN5bmNfMS5hc3luY1NjaGVkdWxlcjsgfVxuICAgIHZhciBkdXJhdGlvbiQgPSB0aW1lcl8xLnRpbWVyKGR1cmF0aW9uLCBzY2hlZHVsZXIpO1xuICAgIHJldHVybiB0aHJvdHRsZV8xLnRocm90dGxlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGR1cmF0aW9uJDsgfSwgY29uZmlnKTtcbn1cbmV4cG9ydHMudGhyb3R0bGVUaW1lID0gdGhyb3R0bGVUaW1lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhyb3R0bGVUaW1lLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5UaW1lSW50ZXJ2YWwgPSBleHBvcnRzLnRpbWVJbnRlcnZhbCA9IHZvaWQgMDtcbnZhciBhc3luY18xID0gcmVxdWlyZShcIi4uL3NjaGVkdWxlci9hc3luY1wiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xuZnVuY3Rpb24gdGltZUludGVydmFsKHNjaGVkdWxlcikge1xuICAgIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkgeyBzY2hlZHVsZXIgPSBhc3luY18xLmFzeW5jU2NoZWR1bGVyOyB9XG4gICAgcmV0dXJuIGxpZnRfMS5vcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGxhc3QgPSBzY2hlZHVsZXIubm93KCk7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIG5vdyA9IHNjaGVkdWxlci5ub3coKTtcbiAgICAgICAgICAgIHZhciBpbnRlcnZhbCA9IG5vdyAtIGxhc3Q7XG4gICAgICAgICAgICBsYXN0ID0gbm93O1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KG5ldyBUaW1lSW50ZXJ2YWwodmFsdWUsIGludGVydmFsKSk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMudGltZUludGVydmFsID0gdGltZUludGVydmFsO1xudmFyIFRpbWVJbnRlcnZhbCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVGltZUludGVydmFsKHZhbHVlLCBpbnRlcnZhbCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBpbnRlcnZhbDtcbiAgICB9XG4gICAgcmV0dXJuIFRpbWVJbnRlcnZhbDtcbn0oKSk7XG5leHBvcnRzLlRpbWVJbnRlcnZhbCA9IFRpbWVJbnRlcnZhbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVJbnRlcnZhbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudGltZW91dFdpdGggPSB2b2lkIDA7XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoXCIuLi9zY2hlZHVsZXIvYXN5bmNcIik7XG52YXIgaXNEYXRlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9pc0RhdGVcIik7XG52YXIgdGltZW91dF8xID0gcmVxdWlyZShcIi4vdGltZW91dFwiKTtcbmZ1bmN0aW9uIHRpbWVvdXRXaXRoKGR1ZSwgd2l0aE9ic2VydmFibGUsIHNjaGVkdWxlcikge1xuICAgIHZhciBmaXJzdDtcbiAgICB2YXIgZWFjaDtcbiAgICB2YXIgX3dpdGg7XG4gICAgc2NoZWR1bGVyID0gc2NoZWR1bGVyICE9PSBudWxsICYmIHNjaGVkdWxlciAhPT0gdm9pZCAwID8gc2NoZWR1bGVyIDogYXN5bmNfMS5hc3luYztcbiAgICBpZiAoaXNEYXRlXzEuaXNWYWxpZERhdGUoZHVlKSkge1xuICAgICAgICBmaXJzdCA9IGR1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGR1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgZWFjaCA9IGR1ZTtcbiAgICB9XG4gICAgaWYgKHdpdGhPYnNlcnZhYmxlKSB7XG4gICAgICAgIF93aXRoID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gd2l0aE9ic2VydmFibGU7IH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBvYnNlcnZhYmxlIHByb3ZpZGVkIHRvIHN3aXRjaCB0bycpO1xuICAgIH1cbiAgICBpZiAoZmlyc3QgPT0gbnVsbCAmJiBlYWNoID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdGltZW91dCBwcm92aWRlZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRpbWVvdXRfMS50aW1lb3V0KHtcbiAgICAgICAgZmlyc3Q6IGZpcnN0LFxuICAgICAgICBlYWNoOiBlYWNoLFxuICAgICAgICBzY2hlZHVsZXI6IHNjaGVkdWxlcixcbiAgICAgICAgd2l0aDogX3dpdGgsXG4gICAgfSk7XG59XG5leHBvcnRzLnRpbWVvdXRXaXRoID0gdGltZW91dFdpdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aW1lb3V0V2l0aC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudGltZXN0YW1wID0gdm9pZCAwO1xudmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlcl8xID0gcmVxdWlyZShcIi4uL3NjaGVkdWxlci9kYXRlVGltZXN0YW1wUHJvdmlkZXJcIik7XG52YXIgbWFwXzEgPSByZXF1aXJlKFwiLi9tYXBcIik7XG5mdW5jdGlvbiB0aW1lc3RhbXAodGltZXN0YW1wUHJvdmlkZXIpIHtcbiAgICBpZiAodGltZXN0YW1wUHJvdmlkZXIgPT09IHZvaWQgMCkgeyB0aW1lc3RhbXBQcm92aWRlciA9IGRhdGVUaW1lc3RhbXBQcm92aWRlcl8xLmRhdGVUaW1lc3RhbXBQcm92aWRlcjsgfVxuICAgIHJldHVybiBtYXBfMS5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiAoeyB2YWx1ZTogdmFsdWUsIHRpbWVzdGFtcDogdGltZXN0YW1wUHJvdmlkZXIubm93KCkgfSk7IH0pO1xufVxuZXhwb3J0cy50aW1lc3RhbXAgPSB0aW1lc3RhbXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aW1lc3RhbXAuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLndpbmRvdyA9IHZvaWQgMDtcbnZhciBTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi4vU3ViamVjdFwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xudmFyIG5vb3BfMSA9IHJlcXVpcmUoXCIuLi91dGlsL25vb3BcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG5mdW5jdGlvbiB3aW5kb3cod2luZG93Qm91bmRhcmllcykge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciB3aW5kb3dTdWJqZWN0ID0gbmV3IFN1YmplY3RfMS5TdWJqZWN0KCk7XG4gICAgICAgIHN1YnNjcmliZXIubmV4dCh3aW5kb3dTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpKTtcbiAgICAgICAgdmFyIGVycm9ySGFuZGxlciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHdpbmRvd1N1YmplY3QuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgfTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB3aW5kb3dTdWJqZWN0ID09PSBudWxsIHx8IHdpbmRvd1N1YmplY3QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpbmRvd1N1YmplY3QubmV4dCh2YWx1ZSk7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvd1N1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSwgZXJyb3JIYW5kbGVyKSk7XG4gICAgICAgIGlubmVyRnJvbV8xLmlubmVyRnJvbSh3aW5kb3dCb3VuZGFyaWVzKS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvd1N1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgod2luZG93U3ViamVjdCA9IG5ldyBTdWJqZWN0XzEuU3ViamVjdCgpKSk7XG4gICAgICAgIH0sIG5vb3BfMS5ub29wLCBlcnJvckhhbmRsZXIpKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvd1N1YmplY3QgPT09IG51bGwgfHwgd2luZG93U3ViamVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2luZG93U3ViamVjdC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgd2luZG93U3ViamVjdCA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLndpbmRvdyA9IHdpbmRvdztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdpbmRvdy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3ZhbHVlcyA9ICh0aGlzICYmIHRoaXMuX192YWx1ZXMpIHx8IGZ1bmN0aW9uKG8pIHtcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMud2luZG93Q291bnQgPSB2b2lkIDA7XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZShcIi4uL1N1YmplY3RcIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbmZ1bmN0aW9uIHdpbmRvd0NvdW50KHdpbmRvd1NpemUsIHN0YXJ0V2luZG93RXZlcnkpIHtcbiAgICBpZiAoc3RhcnRXaW5kb3dFdmVyeSA9PT0gdm9pZCAwKSB7IHN0YXJ0V2luZG93RXZlcnkgPSAwOyB9XG4gICAgdmFyIHN0YXJ0RXZlcnkgPSBzdGFydFdpbmRvd0V2ZXJ5ID4gMCA/IHN0YXJ0V2luZG93RXZlcnkgOiB3aW5kb3dTaXplO1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciB3aW5kb3dzID0gW25ldyBTdWJqZWN0XzEuU3ViamVjdCgpXTtcbiAgICAgICAgdmFyIHN0YXJ0cyA9IFtdO1xuICAgICAgICB2YXIgY291bnQgPSAwO1xuICAgICAgICBzdWJzY3JpYmVyLm5leHQod2luZG93c1swXS5hc09ic2VydmFibGUoKSk7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHdpbmRvd3NfMSA9IF9fdmFsdWVzKHdpbmRvd3MpLCB3aW5kb3dzXzFfMSA9IHdpbmRvd3NfMS5uZXh0KCk7ICF3aW5kb3dzXzFfMS5kb25lOyB3aW5kb3dzXzFfMSA9IHdpbmRvd3NfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHdpbmRvd18xID0gd2luZG93c18xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvd18xLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93c18xXzEgJiYgIXdpbmRvd3NfMV8xLmRvbmUgJiYgKF9hID0gd2luZG93c18xLnJldHVybikpIF9hLmNhbGwod2luZG93c18xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGMgPSBjb3VudCAtIHdpbmRvd1NpemUgKyAxO1xuICAgICAgICAgICAgaWYgKGMgPj0gMCAmJiBjICUgc3RhcnRFdmVyeSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHdpbmRvd3Muc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCsrY291bnQgJSBzdGFydEV2ZXJ5ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIHdpbmRvd18yID0gbmV3IFN1YmplY3RfMS5TdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgd2luZG93cy5wdXNoKHdpbmRvd18yKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQod2luZG93XzIuYXNPYnNlcnZhYmxlKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aGlsZSAod2luZG93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgd2luZG93cy5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHdoaWxlICh3aW5kb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB3aW5kb3dzLnNoaWZ0KCkuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3RhcnRzID0gbnVsbDtcbiAgICAgICAgICAgIHdpbmRvd3MgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG5leHBvcnRzLndpbmRvd0NvdW50ID0gd2luZG93Q291bnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD13aW5kb3dDb3VudC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMud2luZG93VGltZSA9IHZvaWQgMDtcbnZhciBTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi4vU3ViamVjdFwiKTtcbnZhciBhc3luY18xID0gcmVxdWlyZShcIi4uL3NjaGVkdWxlci9hc3luY1wiKTtcbnZhciBTdWJzY3JpcHRpb25fMSA9IHJlcXVpcmUoXCIuLi9TdWJzY3JpcHRpb25cIik7XG52YXIgbGlmdF8xID0gcmVxdWlyZShcIi4uL3V0aWwvbGlmdFwiKTtcbnZhciBPcGVyYXRvclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoXCIuL09wZXJhdG9yU3Vic2NyaWJlclwiKTtcbnZhciBhcnJSZW1vdmVfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2FyclJlbW92ZVwiKTtcbnZhciBhcmdzXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcmdzXCIpO1xudmFyIGV4ZWN1dGVTY2hlZHVsZV8xID0gcmVxdWlyZShcIi4uL3V0aWwvZXhlY3V0ZVNjaGVkdWxlXCIpO1xuZnVuY3Rpb24gd2luZG93VGltZSh3aW5kb3dUaW1lU3Bhbikge1xuICAgIHZhciBfYSwgX2I7XG4gICAgdmFyIG90aGVyQXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIG90aGVyQXJnc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIHNjaGVkdWxlciA9IChfYSA9IGFyZ3NfMS5wb3BTY2hlZHVsZXIob3RoZXJBcmdzKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogYXN5bmNfMS5hc3luY1NjaGVkdWxlcjtcbiAgICB2YXIgd2luZG93Q3JlYXRpb25JbnRlcnZhbCA9IChfYiA9IG90aGVyQXJnc1swXSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogbnVsbDtcbiAgICB2YXIgbWF4V2luZG93U2l6ZSA9IG90aGVyQXJnc1sxXSB8fCBJbmZpbml0eTtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgd2luZG93UmVjb3JkcyA9IFtdO1xuICAgICAgICB2YXIgcmVzdGFydE9uQ2xvc2UgPSBmYWxzZTtcbiAgICAgICAgdmFyIGNsb3NlV2luZG93ID0gZnVuY3Rpb24gKHJlY29yZCkge1xuICAgICAgICAgICAgdmFyIHdpbmRvdyA9IHJlY29yZC53aW5kb3csIHN1YnMgPSByZWNvcmQuc3VicztcbiAgICAgICAgICAgIHdpbmRvdy5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgc3Vicy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgYXJyUmVtb3ZlXzEuYXJyUmVtb3ZlKHdpbmRvd1JlY29yZHMsIHJlY29yZCk7XG4gICAgICAgICAgICByZXN0YXJ0T25DbG9zZSAmJiBzdGFydFdpbmRvdygpO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgc3RhcnRXaW5kb3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAod2luZG93UmVjb3Jkcykge1xuICAgICAgICAgICAgICAgIHZhciBzdWJzID0gbmV3IFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKHN1YnMpO1xuICAgICAgICAgICAgICAgIHZhciB3aW5kb3dfMSA9IG5ldyBTdWJqZWN0XzEuU3ViamVjdCgpO1xuICAgICAgICAgICAgICAgIHZhciByZWNvcmRfMSA9IHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93OiB3aW5kb3dfMSxcbiAgICAgICAgICAgICAgICAgICAgc3Viczogc3VicyxcbiAgICAgICAgICAgICAgICAgICAgc2VlbjogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHdpbmRvd1JlY29yZHMucHVzaChyZWNvcmRfMSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHdpbmRvd18xLmFzT2JzZXJ2YWJsZSgpKTtcbiAgICAgICAgICAgICAgICBleGVjdXRlU2NoZWR1bGVfMS5leGVjdXRlU2NoZWR1bGUoc3Vicywgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7IHJldHVybiBjbG9zZVdpbmRvdyhyZWNvcmRfMSk7IH0sIHdpbmRvd1RpbWVTcGFuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHdpbmRvd0NyZWF0aW9uSW50ZXJ2YWwgIT09IG51bGwgJiYgd2luZG93Q3JlYXRpb25JbnRlcnZhbCA+PSAwKSB7XG4gICAgICAgICAgICBleGVjdXRlU2NoZWR1bGVfMS5leGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBzdGFydFdpbmRvdywgd2luZG93Q3JlYXRpb25JbnRlcnZhbCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN0YXJ0T25DbG9zZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnRXaW5kb3coKTtcbiAgICAgICAgdmFyIGxvb3AgPSBmdW5jdGlvbiAoY2IpIHsgcmV0dXJuIHdpbmRvd1JlY29yZHMuc2xpY2UoKS5mb3JFYWNoKGNiKTsgfTtcbiAgICAgICAgdmFyIHRlcm1pbmF0ZSA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgbG9vcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICB2YXIgd2luZG93ID0gX2Eud2luZG93O1xuICAgICAgICAgICAgICAgIHJldHVybiBjYih3aW5kb3cpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjYihzdWJzY3JpYmVyKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBsb29wKGZ1bmN0aW9uIChyZWNvcmQpIHtcbiAgICAgICAgICAgICAgICByZWNvcmQud2luZG93Lm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIG1heFdpbmRvd1NpemUgPD0gKytyZWNvcmQuc2VlbiAmJiBjbG9zZVdpbmRvdyhyZWNvcmQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRlcm1pbmF0ZShmdW5jdGlvbiAoY29uc3VtZXIpIHsgcmV0dXJuIGNvbnN1bWVyLmNvbXBsZXRlKCk7IH0pOyB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiB0ZXJtaW5hdGUoZnVuY3Rpb24gKGNvbnN1bWVyKSB7IHJldHVybiBjb25zdW1lci5lcnJvcihlcnIpOyB9KTsgfSkpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2luZG93UmVjb3JkcyA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLndpbmRvd1RpbWUgPSB3aW5kb3dUaW1lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2luZG93VGltZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3ZhbHVlcyA9ICh0aGlzICYmIHRoaXMuX192YWx1ZXMpIHx8IGZ1bmN0aW9uKG8pIHtcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMud2luZG93VG9nZ2xlID0gdm9pZCAwO1xudmFyIFN1YmplY3RfMSA9IHJlcXVpcmUoXCIuLi9TdWJqZWN0XCIpO1xudmFyIFN1YnNjcmlwdGlvbl8xID0gcmVxdWlyZShcIi4uL1N1YnNjcmlwdGlvblwiKTtcbnZhciBsaWZ0XzEgPSByZXF1aXJlKFwiLi4vdXRpbC9saWZ0XCIpO1xudmFyIGlubmVyRnJvbV8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvaW5uZXJGcm9tXCIpO1xudmFyIE9wZXJhdG9yU3Vic2NyaWJlcl8xID0gcmVxdWlyZShcIi4vT3BlcmF0b3JTdWJzY3JpYmVyXCIpO1xudmFyIG5vb3BfMSA9IHJlcXVpcmUoXCIuLi91dGlsL25vb3BcIik7XG52YXIgYXJyUmVtb3ZlXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9hcnJSZW1vdmVcIik7XG5mdW5jdGlvbiB3aW5kb3dUb2dnbGUob3BlbmluZ3MsIGNsb3NpbmdTZWxlY3Rvcikge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciB3aW5kb3dzID0gW107XG4gICAgICAgIHZhciBoYW5kbGVFcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHdoaWxlICgwIDwgd2luZG93cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3dzLnNoaWZ0KCkuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgfTtcbiAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKG9wZW5pbmdzKS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uIChvcGVuVmFsdWUpIHtcbiAgICAgICAgICAgIHZhciB3aW5kb3cgPSBuZXcgU3ViamVjdF8xLlN1YmplY3QoKTtcbiAgICAgICAgICAgIHdpbmRvd3MucHVzaCh3aW5kb3cpO1xuICAgICAgICAgICAgdmFyIGNsb3NpbmdTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uXzEuU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICB2YXIgY2xvc2VXaW5kb3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgYXJyUmVtb3ZlXzEuYXJyUmVtb3ZlKHdpbmRvd3MsIHdpbmRvdyk7XG4gICAgICAgICAgICAgICAgd2luZG93LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgY2xvc2luZ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciBjbG9zaW5nTm90aWZpZXI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNsb3NpbmdOb3RpZmllciA9IGlubmVyRnJvbV8xLmlubmVyRnJvbShjbG9zaW5nU2VsZWN0b3Iob3BlblZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQod2luZG93LmFzT2JzZXJ2YWJsZSgpKTtcbiAgICAgICAgICAgIGNsb3NpbmdTdWJzY3JpcHRpb24uYWRkKGNsb3NpbmdOb3RpZmllci5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGNsb3NlV2luZG93LCBub29wXzEubm9vcCwgaGFuZGxlRXJyb3IpKSk7XG4gICAgICAgIH0sIG5vb3BfMS5ub29wKSk7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoT3BlcmF0b3JTdWJzY3JpYmVyXzEuY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICB2YXIgd2luZG93c0NvcHkgPSB3aW5kb3dzLnNsaWNlKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHdpbmRvd3NDb3B5XzEgPSBfX3ZhbHVlcyh3aW5kb3dzQ29weSksIHdpbmRvd3NDb3B5XzFfMSA9IHdpbmRvd3NDb3B5XzEubmV4dCgpOyAhd2luZG93c0NvcHlfMV8xLmRvbmU7IHdpbmRvd3NDb3B5XzFfMSA9IHdpbmRvd3NDb3B5XzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB3aW5kb3dfMSA9IHdpbmRvd3NDb3B5XzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93XzEubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3dzQ29weV8xXzEgJiYgIXdpbmRvd3NDb3B5XzFfMS5kb25lICYmIChfYSA9IHdpbmRvd3NDb3B5XzEucmV0dXJuKSkgX2EuY2FsbCh3aW5kb3dzQ29weV8xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aGlsZSAoMCA8IHdpbmRvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgd2luZG93cy5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0sIGhhbmRsZUVycm9yLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aGlsZSAoMCA8IHdpbmRvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgd2luZG93cy5zaGlmdCgpLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMud2luZG93VG9nZ2xlID0gd2luZG93VG9nZ2xlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2luZG93VG9nZ2xlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy53aW5kb3dXaGVuID0gdm9pZCAwO1xudmFyIFN1YmplY3RfMSA9IHJlcXVpcmUoXCIuLi9TdWJqZWN0XCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG5mdW5jdGlvbiB3aW5kb3dXaGVuKGNsb3NpbmdTZWxlY3Rvcikge1xuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciB3aW5kb3c7XG4gICAgICAgIHZhciBjbG9zaW5nU3Vic2NyaWJlcjtcbiAgICAgICAgdmFyIGhhbmRsZUVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgd2luZG93LmVycm9yKGVycik7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvcGVuV2luZG93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2xvc2luZ1N1YnNjcmliZXIgPT09IG51bGwgfHwgY2xvc2luZ1N1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsb3NpbmdTdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB3aW5kb3cgPT09IG51bGwgfHwgd2luZG93ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3aW5kb3cuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHdpbmRvdyA9IG5ldyBTdWJqZWN0XzEuU3ViamVjdCgpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHdpbmRvdy5hc09ic2VydmFibGUoKSk7XG4gICAgICAgICAgICB2YXIgY2xvc2luZ05vdGlmaWVyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjbG9zaW5nTm90aWZpZXIgPSBpbm5lckZyb21fMS5pbm5lckZyb20oY2xvc2luZ1NlbGVjdG9yKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2xvc2luZ05vdGlmaWVyLnN1YnNjcmliZSgoY2xvc2luZ1N1YnNjcmliZXIgPSBPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgb3BlbldpbmRvdywgb3BlbldpbmRvdywgaGFuZGxlRXJyb3IpKSk7XG4gICAgICAgIH07XG4gICAgICAgIG9wZW5XaW5kb3coKTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB3aW5kb3cubmV4dCh2YWx1ZSk7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9LCBoYW5kbGVFcnJvciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2xvc2luZ1N1YnNjcmliZXIgPT09IG51bGwgfHwgY2xvc2luZ1N1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsb3NpbmdTdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB3aW5kb3cgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG5leHBvcnRzLndpbmRvd1doZW4gPSB3aW5kb3dXaGVuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2luZG93V2hlbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xuICAgIHJldHVybiB0bztcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLndpdGhMYXRlc3RGcm9tID0gdm9pZCAwO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9PcGVyYXRvclN1YnNjcmliZXJcIik7XG52YXIgaW5uZXJGcm9tXzEgPSByZXF1aXJlKFwiLi4vb2JzZXJ2YWJsZS9pbm5lckZyb21cIik7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2lkZW50aXR5XCIpO1xudmFyIG5vb3BfMSA9IHJlcXVpcmUoXCIuLi91dGlsL25vb3BcIik7XG52YXIgYXJnc18xID0gcmVxdWlyZShcIi4uL3V0aWwvYXJnc1wiKTtcbmZ1bmN0aW9uIHdpdGhMYXRlc3RGcm9tKCkge1xuICAgIHZhciBpbnB1dHMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBpbnB1dHNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIHByb2plY3QgPSBhcmdzXzEucG9wUmVzdWx0U2VsZWN0b3IoaW5wdXRzKTtcbiAgICByZXR1cm4gbGlmdF8xLm9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgbGVuID0gaW5wdXRzLmxlbmd0aDtcbiAgICAgICAgdmFyIG90aGVyVmFsdWVzID0gbmV3IEFycmF5KGxlbik7XG4gICAgICAgIHZhciBoYXNWYWx1ZSA9IGlucHV0cy5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH0pO1xuICAgICAgICB2YXIgcmVhZHkgPSBmYWxzZTtcbiAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgaW5uZXJGcm9tXzEuaW5uZXJGcm9tKGlucHV0c1tpXSkuc3Vic2NyaWJlKE9wZXJhdG9yU3Vic2NyaWJlcl8xLmNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBvdGhlclZhbHVlc1tpXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICghcmVhZHkgJiYgIWhhc1ZhbHVlW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc1ZhbHVlW2ldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgKHJlYWR5ID0gaGFzVmFsdWUuZXZlcnkoaWRlbnRpdHlfMS5pZGVudGl0eSkpICYmIChoYXNWYWx1ZSA9IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIG5vb3BfMS5ub29wKSk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIF9sb29wXzEoaSk7XG4gICAgICAgIH1cbiAgICAgICAgc291cmNlLnN1YnNjcmliZShPcGVyYXRvclN1YnNjcmliZXJfMS5jcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAocmVhZHkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gX19zcHJlYWRBcnJheShbdmFsdWVdLCBfX3JlYWQob3RoZXJWYWx1ZXMpKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQocHJvamVjdCA/IHByb2plY3QuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQodmFsdWVzKSkpIDogdmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy53aXRoTGF0ZXN0RnJvbSA9IHdpdGhMYXRlc3RGcm9tO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2l0aExhdGVzdEZyb20uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnppcEFsbCA9IHZvaWQgMDtcbnZhciB6aXBfMSA9IHJlcXVpcmUoXCIuLi9vYnNlcnZhYmxlL3ppcFwiKTtcbnZhciBqb2luQWxsSW50ZXJuYWxzXzEgPSByZXF1aXJlKFwiLi9qb2luQWxsSW50ZXJuYWxzXCIpO1xuZnVuY3Rpb24gemlwQWxsKHByb2plY3QpIHtcbiAgICByZXR1cm4gam9pbkFsbEludGVybmFsc18xLmpvaW5BbGxJbnRlcm5hbHMoemlwXzEuemlwLCBwcm9qZWN0KTtcbn1cbmV4cG9ydHMuemlwQWxsID0gemlwQWxsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9emlwQWxsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxuICAgICAgICB0b1tqXSA9IGZyb21baV07XG4gICAgcmV0dXJuIHRvO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuemlwID0gdm9pZCAwO1xudmFyIHppcF8xID0gcmVxdWlyZShcIi4uL29ic2VydmFibGUvemlwXCIpO1xudmFyIGxpZnRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xpZnRcIik7XG5mdW5jdGlvbiB6aXAoKSB7XG4gICAgdmFyIHNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBzb3VyY2VzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiBsaWZ0XzEub3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHppcF8xLnppcC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW3NvdXJjZV0sIF9fcmVhZChzb3VyY2VzKSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuemlwID0gemlwO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9emlwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxuICAgICAgICB0b1tqXSA9IGZyb21baV07XG4gICAgcmV0dXJuIHRvO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuemlwV2l0aCA9IHZvaWQgMDtcbnZhciB6aXBfMSA9IHJlcXVpcmUoXCIuL3ppcFwiKTtcbmZ1bmN0aW9uIHppcFdpdGgoKSB7XG4gICAgdmFyIG90aGVySW5wdXRzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgb3RoZXJJbnB1dHNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIHppcF8xLnppcC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChvdGhlcklucHV0cykpKTtcbn1cbmV4cG9ydHMuemlwV2l0aCA9IHppcFdpdGg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD16aXBXaXRoLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmludGVydmFsID0gZXhwb3J0cy5paWYgPSBleHBvcnRzLmdlbmVyYXRlID0gZXhwb3J0cy5mcm9tRXZlbnRQYXR0ZXJuID0gZXhwb3J0cy5mcm9tRXZlbnQgPSBleHBvcnRzLmZyb20gPSBleHBvcnRzLmZvcmtKb2luID0gZXhwb3J0cy5lbXB0eSA9IGV4cG9ydHMuZGVmZXIgPSBleHBvcnRzLmNvbm5lY3RhYmxlID0gZXhwb3J0cy5jb25jYXQgPSBleHBvcnRzLmNvbWJpbmVMYXRlc3QgPSBleHBvcnRzLmJpbmROb2RlQ2FsbGJhY2sgPSBleHBvcnRzLmJpbmRDYWxsYmFjayA9IGV4cG9ydHMuVW5zdWJzY3JpcHRpb25FcnJvciA9IGV4cG9ydHMuVGltZW91dEVycm9yID0gZXhwb3J0cy5TZXF1ZW5jZUVycm9yID0gZXhwb3J0cy5PYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IGV4cG9ydHMuTm90Rm91bmRFcnJvciA9IGV4cG9ydHMuRW1wdHlFcnJvciA9IGV4cG9ydHMuQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IgPSBleHBvcnRzLmZpcnN0VmFsdWVGcm9tID0gZXhwb3J0cy5sYXN0VmFsdWVGcm9tID0gZXhwb3J0cy5pc09ic2VydmFibGUgPSBleHBvcnRzLmlkZW50aXR5ID0gZXhwb3J0cy5ub29wID0gZXhwb3J0cy5waXBlID0gZXhwb3J0cy5Ob3RpZmljYXRpb25LaW5kID0gZXhwb3J0cy5Ob3RpZmljYXRpb24gPSBleHBvcnRzLlN1YnNjcmliZXIgPSBleHBvcnRzLlN1YnNjcmlwdGlvbiA9IGV4cG9ydHMuU2NoZWR1bGVyID0gZXhwb3J0cy5WaXJ0dWFsQWN0aW9uID0gZXhwb3J0cy5WaXJ0dWFsVGltZVNjaGVkdWxlciA9IGV4cG9ydHMuYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgPSBleHBvcnRzLmFuaW1hdGlvbkZyYW1lID0gZXhwb3J0cy5xdWV1ZVNjaGVkdWxlciA9IGV4cG9ydHMucXVldWUgPSBleHBvcnRzLmFzeW5jU2NoZWR1bGVyID0gZXhwb3J0cy5hc3luYyA9IGV4cG9ydHMuYXNhcFNjaGVkdWxlciA9IGV4cG9ydHMuYXNhcCA9IGV4cG9ydHMuQXN5bmNTdWJqZWN0ID0gZXhwb3J0cy5SZXBsYXlTdWJqZWN0ID0gZXhwb3J0cy5CZWhhdmlvclN1YmplY3QgPSBleHBvcnRzLlN1YmplY3QgPSBleHBvcnRzLmFuaW1hdGlvbkZyYW1lcyA9IGV4cG9ydHMub2JzZXJ2YWJsZSA9IGV4cG9ydHMuQ29ubmVjdGFibGVPYnNlcnZhYmxlID0gZXhwb3J0cy5PYnNlcnZhYmxlID0gdm9pZCAwO1xuZXhwb3J0cy5maWx0ZXIgPSBleHBvcnRzLmV4cGFuZCA9IGV4cG9ydHMuZXhoYXVzdE1hcCA9IGV4cG9ydHMuZXhoYXVzdEFsbCA9IGV4cG9ydHMuZXhoYXVzdCA9IGV4cG9ydHMuZXZlcnkgPSBleHBvcnRzLmVuZFdpdGggPSBleHBvcnRzLmVsZW1lbnRBdCA9IGV4cG9ydHMuZGlzdGluY3RVbnRpbEtleUNoYW5nZWQgPSBleHBvcnRzLmRpc3RpbmN0VW50aWxDaGFuZ2VkID0gZXhwb3J0cy5kaXN0aW5jdCA9IGV4cG9ydHMuZGVtYXRlcmlhbGl6ZSA9IGV4cG9ydHMuZGVsYXlXaGVuID0gZXhwb3J0cy5kZWxheSA9IGV4cG9ydHMuZGVmYXVsdElmRW1wdHkgPSBleHBvcnRzLmRlYm91bmNlVGltZSA9IGV4cG9ydHMuZGVib3VuY2UgPSBleHBvcnRzLmNvdW50ID0gZXhwb3J0cy5jb25uZWN0ID0gZXhwb3J0cy5jb25jYXRXaXRoID0gZXhwb3J0cy5jb25jYXRNYXBUbyA9IGV4cG9ydHMuY29uY2F0TWFwID0gZXhwb3J0cy5jb25jYXRBbGwgPSBleHBvcnRzLmNvbWJpbmVMYXRlc3RXaXRoID0gZXhwb3J0cy5jb21iaW5lTGF0ZXN0QWxsID0gZXhwb3J0cy5jb21iaW5lQWxsID0gZXhwb3J0cy5jYXRjaEVycm9yID0gZXhwb3J0cy5idWZmZXJXaGVuID0gZXhwb3J0cy5idWZmZXJUb2dnbGUgPSBleHBvcnRzLmJ1ZmZlclRpbWUgPSBleHBvcnRzLmJ1ZmZlckNvdW50ID0gZXhwb3J0cy5idWZmZXIgPSBleHBvcnRzLmF1ZGl0VGltZSA9IGV4cG9ydHMuYXVkaXQgPSBleHBvcnRzLmNvbmZpZyA9IGV4cG9ydHMuTkVWRVIgPSBleHBvcnRzLkVNUFRZID0gZXhwb3J0cy5zY2hlZHVsZWQgPSBleHBvcnRzLnppcCA9IGV4cG9ydHMudXNpbmcgPSBleHBvcnRzLnRpbWVyID0gZXhwb3J0cy50aHJvd0Vycm9yID0gZXhwb3J0cy5yYW5nZSA9IGV4cG9ydHMucmFjZSA9IGV4cG9ydHMucGFydGl0aW9uID0gZXhwb3J0cy5wYWlycyA9IGV4cG9ydHMub25FcnJvclJlc3VtZU5leHQgPSBleHBvcnRzLm9mID0gZXhwb3J0cy5uZXZlciA9IGV4cG9ydHMubWVyZ2UgPSB2b2lkIDA7XG5leHBvcnRzLnN3aXRjaE1hcCA9IGV4cG9ydHMuc3dpdGNoQWxsID0gZXhwb3J0cy5zdWJzY3JpYmVPbiA9IGV4cG9ydHMuc3RhcnRXaXRoID0gZXhwb3J0cy5za2lwV2hpbGUgPSBleHBvcnRzLnNraXBVbnRpbCA9IGV4cG9ydHMuc2tpcExhc3QgPSBleHBvcnRzLnNraXAgPSBleHBvcnRzLnNpbmdsZSA9IGV4cG9ydHMuc2hhcmVSZXBsYXkgPSBleHBvcnRzLnNoYXJlID0gZXhwb3J0cy5zZXF1ZW5jZUVxdWFsID0gZXhwb3J0cy5zY2FuID0gZXhwb3J0cy5zYW1wbGVUaW1lID0gZXhwb3J0cy5zYW1wbGUgPSBleHBvcnRzLnJlZkNvdW50ID0gZXhwb3J0cy5yZXRyeVdoZW4gPSBleHBvcnRzLnJldHJ5ID0gZXhwb3J0cy5yZXBlYXRXaGVuID0gZXhwb3J0cy5yZXBlYXQgPSBleHBvcnRzLnJlZHVjZSA9IGV4cG9ydHMucmFjZVdpdGggPSBleHBvcnRzLnB1Ymxpc2hSZXBsYXkgPSBleHBvcnRzLnB1Ymxpc2hMYXN0ID0gZXhwb3J0cy5wdWJsaXNoQmVoYXZpb3IgPSBleHBvcnRzLnB1Ymxpc2ggPSBleHBvcnRzLnBsdWNrID0gZXhwb3J0cy5wYWlyd2lzZSA9IGV4cG9ydHMub25FcnJvclJlc3VtZU5leHRXaXRoID0gZXhwb3J0cy5vYnNlcnZlT24gPSBleHBvcnRzLm11bHRpY2FzdCA9IGV4cG9ydHMubWluID0gZXhwb3J0cy5tZXJnZVdpdGggPSBleHBvcnRzLm1lcmdlU2NhbiA9IGV4cG9ydHMubWVyZ2VNYXBUbyA9IGV4cG9ydHMubWVyZ2VNYXAgPSBleHBvcnRzLmZsYXRNYXAgPSBleHBvcnRzLm1lcmdlQWxsID0gZXhwb3J0cy5tYXggPSBleHBvcnRzLm1hdGVyaWFsaXplID0gZXhwb3J0cy5tYXBUbyA9IGV4cG9ydHMubWFwID0gZXhwb3J0cy5sYXN0ID0gZXhwb3J0cy5pc0VtcHR5ID0gZXhwb3J0cy5pZ25vcmVFbGVtZW50cyA9IGV4cG9ydHMuZ3JvdXBCeSA9IGV4cG9ydHMuZmlyc3QgPSBleHBvcnRzLmZpbmRJbmRleCA9IGV4cG9ydHMuZmluZCA9IGV4cG9ydHMuZmluYWxpemUgPSB2b2lkIDA7XG5leHBvcnRzLnppcFdpdGggPSBleHBvcnRzLnppcEFsbCA9IGV4cG9ydHMud2l0aExhdGVzdEZyb20gPSBleHBvcnRzLndpbmRvd1doZW4gPSBleHBvcnRzLndpbmRvd1RvZ2dsZSA9IGV4cG9ydHMud2luZG93VGltZSA9IGV4cG9ydHMud2luZG93Q291bnQgPSBleHBvcnRzLndpbmRvdyA9IGV4cG9ydHMudG9BcnJheSA9IGV4cG9ydHMudGltZXN0YW1wID0gZXhwb3J0cy50aW1lb3V0V2l0aCA9IGV4cG9ydHMudGltZW91dCA9IGV4cG9ydHMudGltZUludGVydmFsID0gZXhwb3J0cy50aHJvd0lmRW1wdHkgPSBleHBvcnRzLnRocm90dGxlVGltZSA9IGV4cG9ydHMudGhyb3R0bGUgPSBleHBvcnRzLnRhcCA9IGV4cG9ydHMudGFrZVdoaWxlID0gZXhwb3J0cy50YWtlVW50aWwgPSBleHBvcnRzLnRha2VMYXN0ID0gZXhwb3J0cy50YWtlID0gZXhwb3J0cy5zd2l0Y2hTY2FuID0gZXhwb3J0cy5zd2l0Y2hNYXBUbyA9IHZvaWQgMDtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9PYnNlcnZhYmxlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT2JzZXJ2YWJsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gT2JzZXJ2YWJsZV8xLk9ic2VydmFibGU7IH0gfSk7XG52YXIgQ29ubmVjdGFibGVPYnNlcnZhYmxlXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL0Nvbm5lY3RhYmxlT2JzZXJ2YWJsZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbm5lY3RhYmxlT2JzZXJ2YWJsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQ29ubmVjdGFibGVPYnNlcnZhYmxlXzEuQ29ubmVjdGFibGVPYnNlcnZhYmxlOyB9IH0pO1xudmFyIG9ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3N5bWJvbC9vYnNlcnZhYmxlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib2JzZXJ2YWJsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb2JzZXJ2YWJsZV8xLm9ic2VydmFibGU7IH0gfSk7XG52YXIgYW5pbWF0aW9uRnJhbWVzXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2RvbS9hbmltYXRpb25GcmFtZXNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhbmltYXRpb25GcmFtZXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFuaW1hdGlvbkZyYW1lc18xLmFuaW1hdGlvbkZyYW1lczsgfSB9KTtcbnZhciBTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9TdWJqZWN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU3ViamVjdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gU3ViamVjdF8xLlN1YmplY3Q7IH0gfSk7XG52YXIgQmVoYXZpb3JTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9CZWhhdmlvclN1YmplY3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCZWhhdmlvclN1YmplY3RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJlaGF2aW9yU3ViamVjdF8xLkJlaGF2aW9yU3ViamVjdDsgfSB9KTtcbnZhciBSZXBsYXlTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9SZXBsYXlTdWJqZWN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVwbGF5U3ViamVjdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUmVwbGF5U3ViamVjdF8xLlJlcGxheVN1YmplY3Q7IH0gfSk7XG52YXIgQXN5bmNTdWJqZWN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9Bc3luY1N1YmplY3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBc3luY1N1YmplY3RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEFzeW5jU3ViamVjdF8xLkFzeW5jU3ViamVjdDsgfSB9KTtcbnZhciBhc2FwXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9zY2hlZHVsZXIvYXNhcFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzYXBcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzYXBfMS5hc2FwOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXNhcFNjaGVkdWxlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXNhcF8xLmFzYXBTY2hlZHVsZXI7IH0gfSk7XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3NjaGVkdWxlci9hc3luY1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzeW5jXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3luY18xLmFzeW5jOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXN5bmNTY2hlZHVsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzeW5jXzEuYXN5bmNTY2hlZHVsZXI7IH0gfSk7XG52YXIgcXVldWVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3NjaGVkdWxlci9xdWV1ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInF1ZXVlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBxdWV1ZV8xLnF1ZXVlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicXVldWVTY2hlZHVsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHF1ZXVlXzEucXVldWVTY2hlZHVsZXI7IH0gfSk7XG52YXIgYW5pbWF0aW9uRnJhbWVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3NjaGVkdWxlci9hbmltYXRpb25GcmFtZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFuaW1hdGlvbkZyYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhbmltYXRpb25GcmFtZV8xLmFuaW1hdGlvbkZyYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFuaW1hdGlvbkZyYW1lXzEuYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXI7IH0gfSk7XG52YXIgVmlydHVhbFRpbWVTY2hlZHVsZXJfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3NjaGVkdWxlci9WaXJ0dWFsVGltZVNjaGVkdWxlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlZpcnR1YWxUaW1lU2NoZWR1bGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBWaXJ0dWFsVGltZVNjaGVkdWxlcl8xLlZpcnR1YWxUaW1lU2NoZWR1bGVyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVmlydHVhbEFjdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gVmlydHVhbFRpbWVTY2hlZHVsZXJfMS5WaXJ0dWFsQWN0aW9uOyB9IH0pO1xudmFyIFNjaGVkdWxlcl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvU2NoZWR1bGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2NoZWR1bGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTY2hlZHVsZXJfMS5TY2hlZHVsZXI7IH0gfSk7XG52YXIgU3Vic2NyaXB0aW9uXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9TdWJzY3JpcHRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTdWJzY3JpcHRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbjsgfSB9KTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9TdWJzY3JpYmVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU3Vic2NyaWJlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gU3Vic2NyaWJlcl8xLlN1YnNjcmliZXI7IH0gfSk7XG52YXIgTm90aWZpY2F0aW9uXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9Ob3RpZmljYXRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOb3RpZmljYXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5vdGlmaWNhdGlvbl8xLk5vdGlmaWNhdGlvbjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5vdGlmaWNhdGlvbktpbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5vdGlmaWNhdGlvbl8xLk5vdGlmaWNhdGlvbktpbmQ7IH0gfSk7XG52YXIgcGlwZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvdXRpbC9waXBlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGlwZV8xLnBpcGU7IH0gfSk7XG52YXIgbm9vcF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvdXRpbC9ub29wXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibm9vcFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9vcF8xLm5vb3A7IH0gfSk7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3V0aWwvaWRlbnRpdHlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpZGVudGl0eVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaWRlbnRpdHlfMS5pZGVudGl0eTsgfSB9KTtcbnZhciBpc09ic2VydmFibGVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3V0aWwvaXNPYnNlcnZhYmxlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNPYnNlcnZhYmxlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpc09ic2VydmFibGVfMS5pc09ic2VydmFibGU7IH0gfSk7XG52YXIgbGFzdFZhbHVlRnJvbV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvbGFzdFZhbHVlRnJvbVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxhc3RWYWx1ZUZyb21cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxhc3RWYWx1ZUZyb21fMS5sYXN0VmFsdWVGcm9tOyB9IH0pO1xudmFyIGZpcnN0VmFsdWVGcm9tXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9maXJzdFZhbHVlRnJvbVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpcnN0VmFsdWVGcm9tXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBmaXJzdFZhbHVlRnJvbV8xLmZpcnN0VmFsdWVGcm9tOyB9IH0pO1xudmFyIEFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC91dGlsL0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yXzEuQXJndW1lbnRPdXRPZlJhbmdlRXJyb3I7IH0gfSk7XG52YXIgRW1wdHlFcnJvcl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvdXRpbC9FbXB0eUVycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRW1wdHlFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gRW1wdHlFcnJvcl8xLkVtcHR5RXJyb3I7IH0gfSk7XG52YXIgTm90Rm91bmRFcnJvcl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvdXRpbC9Ob3RGb3VuZEVycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTm90Rm91bmRFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTm90Rm91bmRFcnJvcl8xLk5vdEZvdW5kRXJyb3I7IH0gfSk7XG52YXIgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3V0aWwvT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPYmplY3RVbnN1YnNjcmliZWRFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JfMS5PYmplY3RVbnN1YnNjcmliZWRFcnJvcjsgfSB9KTtcbnZhciBTZXF1ZW5jZUVycm9yXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC91dGlsL1NlcXVlbmNlRXJyb3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTZXF1ZW5jZUVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTZXF1ZW5jZUVycm9yXzEuU2VxdWVuY2VFcnJvcjsgfSB9KTtcbnZhciB0aW1lb3V0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRpbWVvdXRFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGltZW91dF8xLlRpbWVvdXRFcnJvcjsgfSB9KTtcbnZhciBVbnN1YnNjcmlwdGlvbkVycm9yXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC91dGlsL1Vuc3Vic2NyaXB0aW9uRXJyb3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJVbnN1YnNjcmlwdGlvbkVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBVbnN1YnNjcmlwdGlvbkVycm9yXzEuVW5zdWJzY3JpcHRpb25FcnJvcjsgfSB9KTtcbnZhciBiaW5kQ2FsbGJhY2tfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvYmluZENhbGxiYWNrXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmluZENhbGxiYWNrXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiaW5kQ2FsbGJhY2tfMS5iaW5kQ2FsbGJhY2s7IH0gfSk7XG52YXIgYmluZE5vZGVDYWxsYmFja18xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9iaW5kTm9kZUNhbGxiYWNrXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmluZE5vZGVDYWxsYmFja1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYmluZE5vZGVDYWxsYmFja18xLmJpbmROb2RlQ2FsbGJhY2s7IH0gfSk7XG52YXIgY29tYmluZUxhdGVzdF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tYmluZUxhdGVzdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29tYmluZUxhdGVzdF8xLmNvbWJpbmVMYXRlc3Q7IH0gfSk7XG52YXIgY29uY2F0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2NvbmNhdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbmNhdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uY2F0XzEuY29uY2F0OyB9IH0pO1xudmFyIGNvbm5lY3RhYmxlXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2Nvbm5lY3RhYmxlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29ubmVjdGFibGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbm5lY3RhYmxlXzEuY29ubmVjdGFibGU7IH0gfSk7XG52YXIgZGVmZXJfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvZGVmZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVmZXJfMS5kZWZlcjsgfSB9KTtcbnZhciBlbXB0eV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9lbXB0eVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVtcHR5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlbXB0eV8xLmVtcHR5OyB9IH0pO1xudmFyIGZvcmtKb2luXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2ZvcmtKb2luXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZm9ya0pvaW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZvcmtKb2luXzEuZm9ya0pvaW47IH0gfSk7XG52YXIgZnJvbV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9mcm9tXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZnJvbVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZnJvbV8xLmZyb207IH0gfSk7XG52YXIgZnJvbUV2ZW50XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb21FdmVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZyb21FdmVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZnJvbUV2ZW50XzEuZnJvbUV2ZW50OyB9IH0pO1xudmFyIGZyb21FdmVudFBhdHRlcm5fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvZnJvbUV2ZW50UGF0dGVyblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZyb21FdmVudFBhdHRlcm5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZyb21FdmVudFBhdHRlcm5fMS5mcm9tRXZlbnRQYXR0ZXJuOyB9IH0pO1xudmFyIGdlbmVyYXRlXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2dlbmVyYXRlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2VuZXJhdGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdlbmVyYXRlXzEuZ2VuZXJhdGU7IH0gfSk7XG52YXIgaWlmXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2lpZlwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlpZlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaWlmXzEuaWlmOyB9IH0pO1xudmFyIGludGVydmFsXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL2ludGVydmFsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW50ZXJ2YWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGludGVydmFsXzEuaW50ZXJ2YWw7IH0gfSk7XG52YXIgbWVyZ2VfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvbWVyZ2VcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWVyZ2VfMS5tZXJnZTsgfSB9KTtcbnZhciBuZXZlcl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9uZXZlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5ldmVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXZlcl8xLm5ldmVyOyB9IH0pO1xudmFyIG9mXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL29mXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib2ZcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9mXzEub2Y7IH0gfSk7XG52YXIgb25FcnJvclJlc3VtZU5leHRfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvb25FcnJvclJlc3VtZU5leHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvbkVycm9yUmVzdW1lTmV4dFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb25FcnJvclJlc3VtZU5leHRfMS5vbkVycm9yUmVzdW1lTmV4dDsgfSB9KTtcbnZhciBwYWlyc18xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9wYWlyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBhaXJzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwYWlyc18xLnBhaXJzOyB9IH0pO1xudmFyIHBhcnRpdGlvbl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9wYXJ0aXRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJ0aXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBhcnRpdGlvbl8xLnBhcnRpdGlvbjsgfSB9KTtcbnZhciByYWNlXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL3JhY2VcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyYWNlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByYWNlXzEucmFjZTsgfSB9KTtcbnZhciByYW5nZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9yYW5nZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJhbmdlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByYW5nZV8xLnJhbmdlOyB9IH0pO1xudmFyIHRocm93RXJyb3JfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvdGhyb3dFcnJvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRocm93RXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRocm93RXJyb3JfMS50aHJvd0Vycm9yOyB9IH0pO1xudmFyIHRpbWVyXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vYnNlcnZhYmxlL3RpbWVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGltZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRpbWVyXzEudGltZXI7IH0gfSk7XG52YXIgdXNpbmdfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvdXNpbmdcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1c2luZ1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXNpbmdfMS51c2luZzsgfSB9KTtcbnZhciB6aXBfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvemlwXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiemlwXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB6aXBfMS56aXA7IH0gfSk7XG52YXIgc2NoZWR1bGVkXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVkXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2NoZWR1bGVkXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzY2hlZHVsZWRfMS5zY2hlZHVsZWQ7IH0gfSk7XG52YXIgZW1wdHlfMiA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29ic2VydmFibGUvZW1wdHlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJFTVBUWVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZW1wdHlfMi5FTVBUWTsgfSB9KTtcbnZhciBuZXZlcl8yID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb2JzZXJ2YWJsZS9uZXZlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5FVkVSXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXZlcl8yLk5FVkVSOyB9IH0pO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2ludGVybmFsL3R5cGVzXCIpLCBleHBvcnRzKTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL2NvbmZpZ1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbmZpZ1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uZmlnXzEuY29uZmlnOyB9IH0pO1xudmFyIGF1ZGl0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvYXVkaXRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdWRpdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXVkaXRfMS5hdWRpdDsgfSB9KTtcbnZhciBhdWRpdFRpbWVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9hdWRpdFRpbWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdWRpdFRpbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF1ZGl0VGltZV8xLmF1ZGl0VGltZTsgfSB9KTtcbnZhciBidWZmZXJfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJidWZmZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJ1ZmZlcl8xLmJ1ZmZlcjsgfSB9KTtcbnZhciBidWZmZXJDb3VudF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlckNvdW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYnVmZmVyQ291bnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJ1ZmZlckNvdW50XzEuYnVmZmVyQ291bnQ7IH0gfSk7XG52YXIgYnVmZmVyVGltZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlclRpbWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJidWZmZXJUaW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBidWZmZXJUaW1lXzEuYnVmZmVyVGltZTsgfSB9KTtcbnZhciBidWZmZXJUb2dnbGVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUb2dnbGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJidWZmZXJUb2dnbGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJ1ZmZlclRvZ2dsZV8xLmJ1ZmZlclRvZ2dsZTsgfSB9KTtcbnZhciBidWZmZXJXaGVuXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyV2hlblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJ1ZmZlcldoZW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJ1ZmZlcldoZW5fMS5idWZmZXJXaGVuOyB9IH0pO1xudmFyIGNhdGNoRXJyb3JfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9jYXRjaEVycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY2F0Y2hFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2F0Y2hFcnJvcl8xLmNhdGNoRXJyb3I7IH0gfSk7XG52YXIgY29tYmluZUFsbF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2NvbWJpbmVBbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21iaW5lQWxsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb21iaW5lQWxsXzEuY29tYmluZUFsbDsgfSB9KTtcbnZhciBjb21iaW5lTGF0ZXN0QWxsXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvY29tYmluZUxhdGVzdEFsbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbWJpbmVMYXRlc3RBbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbWJpbmVMYXRlc3RBbGxfMS5jb21iaW5lTGF0ZXN0QWxsOyB9IH0pO1xudmFyIGNvbWJpbmVMYXRlc3RXaXRoXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvY29tYmluZUxhdGVzdFdpdGhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21iaW5lTGF0ZXN0V2l0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29tYmluZUxhdGVzdFdpdGhfMS5jb21iaW5lTGF0ZXN0V2l0aDsgfSB9KTtcbnZhciBjb25jYXRBbGxfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRBbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25jYXRBbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmNhdEFsbF8xLmNvbmNhdEFsbDsgfSB9KTtcbnZhciBjb25jYXRNYXBfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRNYXBcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25jYXRNYXBcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmNhdE1hcF8xLmNvbmNhdE1hcDsgfSB9KTtcbnZhciBjb25jYXRNYXBUb18xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdE1hcFRvXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29uY2F0TWFwVG9cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmNhdE1hcFRvXzEuY29uY2F0TWFwVG87IH0gfSk7XG52YXIgY29uY2F0V2l0aF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdFdpdGhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25jYXRXaXRoXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25jYXRXaXRoXzEuY29uY2F0V2l0aDsgfSB9KTtcbnZhciBjb25uZWN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvY29ubmVjdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbm5lY3RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbm5lY3RfMS5jb25uZWN0OyB9IH0pO1xudmFyIGNvdW50XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvY291bnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb3VudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY291bnRfMS5jb3VudDsgfSB9KTtcbnZhciBkZWJvdW5jZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2RlYm91bmNlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVib3VuY2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlYm91bmNlXzEuZGVib3VuY2U7IH0gfSk7XG52YXIgZGVib3VuY2VUaW1lXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZGVib3VuY2VUaW1lXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVib3VuY2VUaW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWJvdW5jZVRpbWVfMS5kZWJvdW5jZVRpbWU7IH0gfSk7XG52YXIgZGVmYXVsdElmRW1wdHlfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9kZWZhdWx0SWZFbXB0eVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRJZkVtcHR5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWZhdWx0SWZFbXB0eV8xLmRlZmF1bHRJZkVtcHR5OyB9IH0pO1xudmFyIGRlbGF5XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZGVsYXlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWxheVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVsYXlfMS5kZWxheTsgfSB9KTtcbnZhciBkZWxheVdoZW5fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9kZWxheVdoZW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWxheVdoZW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlbGF5V2hlbl8xLmRlbGF5V2hlbjsgfSB9KTtcbnZhciBkZW1hdGVyaWFsaXplXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZGVtYXRlcmlhbGl6ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlbWF0ZXJpYWxpemVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlbWF0ZXJpYWxpemVfMS5kZW1hdGVyaWFsaXplOyB9IH0pO1xudmFyIGRpc3RpbmN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZGlzdGluY3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkaXN0aW5jdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGlzdGluY3RfMS5kaXN0aW5jdDsgfSB9KTtcbnZhciBkaXN0aW5jdFVudGlsQ2hhbmdlZF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2Rpc3RpbmN0VW50aWxDaGFuZ2VkXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGlzdGluY3RVbnRpbENoYW5nZWRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRpc3RpbmN0VW50aWxDaGFuZ2VkXzEuZGlzdGluY3RVbnRpbENoYW5nZWQ7IH0gfSk7XG52YXIgZGlzdGluY3RVbnRpbEtleUNoYW5nZWRfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkaXN0aW5jdFVudGlsS2V5Q2hhbmdlZF8xLmRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkOyB9IH0pO1xudmFyIGVsZW1lbnRBdF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2VsZW1lbnRBdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVsZW1lbnRBdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZWxlbWVudEF0XzEuZWxlbWVudEF0OyB9IH0pO1xudmFyIGVuZFdpdGhfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9lbmRXaXRoXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZW5kV2l0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZW5kV2l0aF8xLmVuZFdpdGg7IH0gfSk7XG52YXIgZXZlcnlfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9ldmVyeVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV2ZXJ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBldmVyeV8xLmV2ZXJ5OyB9IH0pO1xudmFyIGV4aGF1c3RfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXhoYXVzdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXhoYXVzdF8xLmV4aGF1c3Q7IH0gfSk7XG52YXIgZXhoYXVzdEFsbF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2V4aGF1c3RBbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJleGhhdXN0QWxsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBleGhhdXN0QWxsXzEuZXhoYXVzdEFsbDsgfSB9KTtcbnZhciBleGhhdXN0TWFwXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZXhoYXVzdE1hcFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV4aGF1c3RNYXBcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGV4aGF1c3RNYXBfMS5leGhhdXN0TWFwOyB9IH0pO1xudmFyIGV4cGFuZF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2V4cGFuZFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV4cGFuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXhwYW5kXzEuZXhwYW5kOyB9IH0pO1xudmFyIGZpbHRlcl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbHRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbHRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmlsdGVyXzEuZmlsdGVyOyB9IH0pO1xudmFyIGZpbmFsaXplXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZmluYWxpemVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmaW5hbGl6ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmluYWxpemVfMS5maW5hbGl6ZTsgfSB9KTtcbnZhciBmaW5kXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZmluZFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZpbmRfMS5maW5kOyB9IH0pO1xudmFyIGZpbmRJbmRleF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmRJbmRleFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbmRJbmRleFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmluZEluZGV4XzEuZmluZEluZGV4OyB9IH0pO1xudmFyIGZpcnN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZmlyc3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmaXJzdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmlyc3RfMS5maXJzdDsgfSB9KTtcbnZhciBncm91cEJ5XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvZ3JvdXBCeVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdyb3VwQnlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdyb3VwQnlfMS5ncm91cEJ5OyB9IH0pO1xudmFyIGlnbm9yZUVsZW1lbnRzXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvaWdub3JlRWxlbWVudHNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpZ25vcmVFbGVtZW50c1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaWdub3JlRWxlbWVudHNfMS5pZ25vcmVFbGVtZW50czsgfSB9KTtcbnZhciBpc0VtcHR5XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvaXNFbXB0eVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzRW1wdHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlzRW1wdHlfMS5pc0VtcHR5OyB9IH0pO1xudmFyIGxhc3RfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9sYXN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibGFzdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbGFzdF8xLmxhc3Q7IH0gfSk7XG52YXIgbWFwXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvbWFwXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWFwXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtYXBfMS5tYXA7IH0gfSk7XG52YXIgbWFwVG9fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9tYXBUb1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1hcFRvXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtYXBUb18xLm1hcFRvOyB9IH0pO1xudmFyIG1hdGVyaWFsaXplXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvbWF0ZXJpYWxpemVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYXRlcmlhbGl6ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWF0ZXJpYWxpemVfMS5tYXRlcmlhbGl6ZTsgfSB9KTtcbnZhciBtYXhfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9tYXhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYXhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1heF8xLm1heDsgfSB9KTtcbnZhciBtZXJnZUFsbF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlQWxsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWVyZ2VBbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1lcmdlQWxsXzEubWVyZ2VBbGw7IH0gfSk7XG52YXIgZmxhdE1hcF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL2ZsYXRNYXBcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmbGF0TWFwXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBmbGF0TWFwXzEuZmxhdE1hcDsgfSB9KTtcbnZhciBtZXJnZU1hcF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlTWFwXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWVyZ2VNYXBcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1lcmdlTWFwXzEubWVyZ2VNYXA7IH0gfSk7XG52YXIgbWVyZ2VNYXBUb18xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlTWFwVG9cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZU1hcFRvXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXJnZU1hcFRvXzEubWVyZ2VNYXBUbzsgfSB9KTtcbnZhciBtZXJnZVNjYW5fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9tZXJnZVNjYW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZVNjYW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1lcmdlU2Nhbl8xLm1lcmdlU2NhbjsgfSB9KTtcbnZhciBtZXJnZVdpdGhfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9tZXJnZVdpdGhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZVdpdGhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1lcmdlV2l0aF8xLm1lcmdlV2l0aDsgfSB9KTtcbnZhciBtaW5fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9taW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtaW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1pbl8xLm1pbjsgfSB9KTtcbnZhciBtdWx0aWNhc3RfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9tdWx0aWNhc3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtdWx0aWNhc3RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG11bHRpY2FzdF8xLm11bHRpY2FzdDsgfSB9KTtcbnZhciBvYnNlcnZlT25fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9vYnNlcnZlT25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvYnNlcnZlT25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9ic2VydmVPbl8xLm9ic2VydmVPbjsgfSB9KTtcbnZhciBvbkVycm9yUmVzdW1lTmV4dFdpdGhfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9vbkVycm9yUmVzdW1lTmV4dFdpdGhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvbkVycm9yUmVzdW1lTmV4dFdpdGhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uRXJyb3JSZXN1bWVOZXh0V2l0aF8xLm9uRXJyb3JSZXN1bWVOZXh0V2l0aDsgfSB9KTtcbnZhciBwYWlyd2lzZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3BhaXJ3aXNlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGFpcndpc2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBhaXJ3aXNlXzEucGFpcndpc2U7IH0gfSk7XG52YXIgcGx1Y2tfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9wbHVja1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBsdWNrXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwbHVja18xLnBsdWNrOyB9IH0pO1xudmFyIHB1Ymxpc2hfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHVibGlzaFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHVibGlzaF8xLnB1Ymxpc2g7IH0gfSk7XG52YXIgcHVibGlzaEJlaGF2aW9yXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaEJlaGF2aW9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHVibGlzaEJlaGF2aW9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwdWJsaXNoQmVoYXZpb3JfMS5wdWJsaXNoQmVoYXZpb3I7IH0gfSk7XG52YXIgcHVibGlzaExhc3RfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoTGFzdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInB1Ymxpc2hMYXN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwdWJsaXNoTGFzdF8xLnB1Ymxpc2hMYXN0OyB9IH0pO1xudmFyIHB1Ymxpc2hSZXBsYXlfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoUmVwbGF5XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHVibGlzaFJlcGxheVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHVibGlzaFJlcGxheV8xLnB1Ymxpc2hSZXBsYXk7IH0gfSk7XG52YXIgcmFjZVdpdGhfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9yYWNlV2l0aFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJhY2VXaXRoXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByYWNlV2l0aF8xLnJhY2VXaXRoOyB9IH0pO1xudmFyIHJlZHVjZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3JlZHVjZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZHVjZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVkdWNlXzEucmVkdWNlOyB9IH0pO1xudmFyIHJlcGVhdF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3JlcGVhdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlcGVhdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVwZWF0XzEucmVwZWF0OyB9IH0pO1xudmFyIHJlcGVhdFdoZW5fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9yZXBlYXRXaGVuXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVwZWF0V2hlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVwZWF0V2hlbl8xLnJlcGVhdFdoZW47IH0gfSk7XG52YXIgcmV0cnlfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9yZXRyeVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJldHJ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXRyeV8xLnJldHJ5OyB9IH0pO1xudmFyIHJldHJ5V2hlbl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3JldHJ5V2hlblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJldHJ5V2hlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmV0cnlXaGVuXzEucmV0cnlXaGVuOyB9IH0pO1xudmFyIHJlZkNvdW50XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvcmVmQ291bnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWZDb3VudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmQ291bnRfMS5yZWZDb3VudDsgfSB9KTtcbnZhciBzYW1wbGVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9zYW1wbGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzYW1wbGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNhbXBsZV8xLnNhbXBsZTsgfSB9KTtcbnZhciBzYW1wbGVUaW1lXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvc2FtcGxlVGltZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNhbXBsZVRpbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNhbXBsZVRpbWVfMS5zYW1wbGVUaW1lOyB9IH0pO1xudmFyIHNjYW5fMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9zY2FuXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2NhblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2Nhbl8xLnNjYW47IH0gfSk7XG52YXIgc2VxdWVuY2VFcXVhbF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3NlcXVlbmNlRXF1YWxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXF1ZW5jZUVxdWFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXF1ZW5jZUVxdWFsXzEuc2VxdWVuY2VFcXVhbDsgfSB9KTtcbnZhciBzaGFyZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3NoYXJlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2hhcmVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNoYXJlXzEuc2hhcmU7IH0gfSk7XG52YXIgc2hhcmVSZXBsYXlfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9zaGFyZVJlcGxheVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNoYXJlUmVwbGF5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzaGFyZVJlcGxheV8xLnNoYXJlUmVwbGF5OyB9IH0pO1xudmFyIHNpbmdsZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3NpbmdsZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNpbmdsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2luZ2xlXzEuc2luZ2xlOyB9IH0pO1xudmFyIHNraXBfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9za2lwXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2tpcFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2tpcF8xLnNraXA7IH0gfSk7XG52YXIgc2tpcExhc3RfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9za2lwTGFzdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNraXBMYXN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBza2lwTGFzdF8xLnNraXBMYXN0OyB9IH0pO1xudmFyIHNraXBVbnRpbF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBVbnRpbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNraXBVbnRpbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2tpcFVudGlsXzEuc2tpcFVudGlsOyB9IH0pO1xudmFyIHNraXBXaGlsZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBXaGlsZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNraXBXaGlsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2tpcFdoaWxlXzEuc2tpcFdoaWxlOyB9IH0pO1xudmFyIHN0YXJ0V2l0aF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3N0YXJ0V2l0aFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0YXJ0V2l0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RhcnRXaXRoXzEuc3RhcnRXaXRoOyB9IH0pO1xudmFyIHN1YnNjcmliZU9uXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvc3Vic2NyaWJlT25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdWJzY3JpYmVPblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3Vic2NyaWJlT25fMS5zdWJzY3JpYmVPbjsgfSB9KTtcbnZhciBzd2l0Y2hBbGxfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hBbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzd2l0Y2hBbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN3aXRjaEFsbF8xLnN3aXRjaEFsbDsgfSB9KTtcbnZhciBzd2l0Y2hNYXBfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hNYXBcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzd2l0Y2hNYXBcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN3aXRjaE1hcF8xLnN3aXRjaE1hcDsgfSB9KTtcbnZhciBzd2l0Y2hNYXBUb18xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaE1hcFRvXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3dpdGNoTWFwVG9cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN3aXRjaE1hcFRvXzEuc3dpdGNoTWFwVG87IH0gfSk7XG52YXIgc3dpdGNoU2Nhbl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaFNjYW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzd2l0Y2hTY2FuXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzd2l0Y2hTY2FuXzEuc3dpdGNoU2NhbjsgfSB9KTtcbnZhciB0YWtlXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRha2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRha2VfMS50YWtlOyB9IH0pO1xudmFyIHRha2VMYXN0XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZUxhc3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YWtlTGFzdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGFrZUxhc3RfMS50YWtlTGFzdDsgfSB9KTtcbnZhciB0YWtlVW50aWxfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy90YWtlVW50aWxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YWtlVW50aWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRha2VVbnRpbF8xLnRha2VVbnRpbDsgfSB9KTtcbnZhciB0YWtlV2hpbGVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy90YWtlV2hpbGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YWtlV2hpbGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRha2VXaGlsZV8xLnRha2VXaGlsZTsgfSB9KTtcbnZhciB0YXBfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy90YXBcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YXBcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRhcF8xLnRhcDsgfSB9KTtcbnZhciB0aHJvdHRsZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3Rocm90dGxlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGhyb3R0bGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRocm90dGxlXzEudGhyb3R0bGU7IH0gfSk7XG52YXIgdGhyb3R0bGVUaW1lXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3R0bGVUaW1lXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGhyb3R0bGVUaW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aHJvdHRsZVRpbWVfMS50aHJvdHRsZVRpbWU7IH0gfSk7XG52YXIgdGhyb3dJZkVtcHR5XzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3dJZkVtcHR5XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGhyb3dJZkVtcHR5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aHJvd0lmRW1wdHlfMS50aHJvd0lmRW1wdHk7IH0gfSk7XG52YXIgdGltZUludGVydmFsXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZUludGVydmFsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGltZUludGVydmFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lSW50ZXJ2YWxfMS50aW1lSW50ZXJ2YWw7IH0gfSk7XG52YXIgdGltZW91dF8yID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVvdXRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0aW1lb3V0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lb3V0XzIudGltZW91dDsgfSB9KTtcbnZhciB0aW1lb3V0V2l0aF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVvdXRXaXRoXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGltZW91dFdpdGhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRpbWVvdXRXaXRoXzEudGltZW91dFdpdGg7IH0gfSk7XG52YXIgdGltZXN0YW1wXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZXN0YW1wXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGltZXN0YW1wXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lc3RhbXBfMS50aW1lc3RhbXA7IH0gfSk7XG52YXIgdG9BcnJheV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3RvQXJyYXlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0b0FycmF5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0b0FycmF5XzEudG9BcnJheTsgfSB9KTtcbnZhciB3aW5kb3dfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ3aW5kb3dcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHdpbmRvd18xLndpbmRvdzsgfSB9KTtcbnZhciB3aW5kb3dDb3VudF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd0NvdW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwid2luZG93Q291bnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHdpbmRvd0NvdW50XzEud2luZG93Q291bnQ7IH0gfSk7XG52YXIgd2luZG93VGltZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1RpbWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ3aW5kb3dUaW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB3aW5kb3dUaW1lXzEud2luZG93VGltZTsgfSB9KTtcbnZhciB3aW5kb3dUb2dnbGVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dUb2dnbGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ3aW5kb3dUb2dnbGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHdpbmRvd1RvZ2dsZV8xLndpbmRvd1RvZ2dsZTsgfSB9KTtcbnZhciB3aW5kb3dXaGVuXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93V2hlblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIndpbmRvd1doZW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHdpbmRvd1doZW5fMS53aW5kb3dXaGVuOyB9IH0pO1xudmFyIHdpdGhMYXRlc3RGcm9tXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvd2l0aExhdGVzdEZyb21cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ3aXRoTGF0ZXN0RnJvbVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gd2l0aExhdGVzdEZyb21fMS53aXRoTGF0ZXN0RnJvbTsgfSB9KTtcbnZhciB6aXBBbGxfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL29wZXJhdG9ycy96aXBBbGxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ6aXBBbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHppcEFsbF8xLnppcEFsbDsgfSB9KTtcbnZhciB6aXBXaXRoXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9vcGVyYXRvcnMvemlwV2l0aFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInppcFdpdGhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHppcFdpdGhfMS56aXBXaXRoOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgZnJvbUV2ZW50LCBmaWx0ZXIsIG1hcCwgc2hhcmUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuXG5mdW5jdGlvbiBub3JtYWxpemVLZXlwcmVzc0V2ZW50cyh2YWx1ZSwga2V5KSB7XG4gIHJldHVybiB7IHZhbHVlLCBrZXk6IGtleSB8fCB7fSB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvYnNlcnZlKHJsKSB7XG4gIGNvbnN0IGtleXByZXNzID0gZnJvbUV2ZW50KHJsLmlucHV0LCAna2V5cHJlc3MnLCBub3JtYWxpemVLZXlwcmVzc0V2ZW50cylcbiAgICAucGlwZSh0YWtlVW50aWwoZnJvbUV2ZW50KHJsLCAnY2xvc2UnKSkpXG4gICAgLy8gSWdub3JlIGBlbnRlcmAga2V5LiBPbiB0aGUgcmVhZGxpbmUsIHdlIG9ubHkgY2FyZSBhYm91dCB0aGUgYGxpbmVgIGV2ZW50LlxuICAgIC5waXBlKGZpbHRlcigoeyBrZXkgfSkgPT4ga2V5Lm5hbWUgIT09ICdlbnRlcicgJiYga2V5Lm5hbWUgIT09ICdyZXR1cm4nKSk7XG5cbiAgcmV0dXJuIHtcbiAgICBsaW5lOiBmcm9tRXZlbnQocmwsICdsaW5lJyksXG4gICAga2V5cHJlc3MsXG5cbiAgICBub3JtYWxpemVkVXBLZXk6IGtleXByZXNzLnBpcGUoXG4gICAgICBmaWx0ZXIoXG4gICAgICAgICh7IGtleSB9KSA9PlxuICAgICAgICAgIGtleS5uYW1lID09PSAndXAnIHx8IGtleS5uYW1lID09PSAnaycgfHwgKGtleS5uYW1lID09PSAncCcgJiYga2V5LmN0cmwpLFxuICAgICAgKSxcbiAgICAgIHNoYXJlKCksXG4gICAgKSxcblxuICAgIG5vcm1hbGl6ZWREb3duS2V5OiBrZXlwcmVzcy5waXBlKFxuICAgICAgZmlsdGVyKFxuICAgICAgICAoeyBrZXkgfSkgPT5cbiAgICAgICAgICBrZXkubmFtZSA9PT0gJ2Rvd24nIHx8IGtleS5uYW1lID09PSAnaicgfHwgKGtleS5uYW1lID09PSAnbicgJiYga2V5LmN0cmwpLFxuICAgICAgKSxcbiAgICAgIHNoYXJlKCksXG4gICAgKSxcblxuICAgIG51bWJlcktleToga2V5cHJlc3MucGlwZShcbiAgICAgIGZpbHRlcigoZSkgPT4gZS52YWx1ZSAmJiAnMTIzNDU2Nzg5Jy5pbmNsdWRlcyhlLnZhbHVlKSksXG4gICAgICBtYXAoKGUpID0+IE51bWJlcihlLnZhbHVlKSksXG4gICAgICBzaGFyZSgpLFxuICAgICksXG5cbiAgICBzcGFjZUtleToga2V5cHJlc3MucGlwZShcbiAgICAgIGZpbHRlcigoeyBrZXkgfSkgPT4ga2V5ICYmIGtleS5uYW1lID09PSAnc3BhY2UnKSxcbiAgICAgIHNoYXJlKCksXG4gICAgKSxcbiAgICBhS2V5OiBrZXlwcmVzcy5waXBlKFxuICAgICAgZmlsdGVyKCh7IGtleSB9KSA9PiBrZXkgJiYga2V5Lm5hbWUgPT09ICdhJyksXG4gICAgICBzaGFyZSgpLFxuICAgICksXG4gICAgaUtleToga2V5cHJlc3MucGlwZShcbiAgICAgIGZpbHRlcigoeyBrZXkgfSkgPT4ga2V5ICYmIGtleS5uYW1lID09PSAnaScpLFxuICAgICAgc2hhcmUoKSxcbiAgICApLFxuICB9O1xufVxuIiwiaW1wb3J0IGNvbG9ycyBmcm9tICd5b2N0b2NvbG9ycy1janMnO1xuXG4vKipcbiAqIFRoZSBwYWdpbmF0b3IgcmV0dXJucyBhIHN1YnNldCBvZiB0aGUgY2hvaWNlcyBpZiB0aGUgbGlzdCBpcyB0b28gbG9uZy5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYWdpbmF0b3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3NjcmVlbi1tYW5hZ2VyXCIpfSBbc2NyZWVuXVxuICAgKiBAcGFyYW0ge3tpc0luZmluaXRlPzogYm9vbGVhbn19IFtvcHRpb25zXVxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NyZWVuLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7IGlzSW5maW5pdGUgPSB0cnVlIH0gPSBvcHRpb25zO1xuICAgIHRoaXMubGFzdEluZGV4ID0gMDtcbiAgICB0aGlzLnNjcmVlbiA9IHNjcmVlbjtcbiAgICB0aGlzLmlzSW5maW5pdGUgPSBpc0luZmluaXRlO1xuICB9XG5cbiAgcGFnaW5hdGUob3V0cHV0LCBhY3RpdmUsIHBhZ2VTaXplKSB7XG4gICAgcGFnZVNpemUgfHw9IDc7XG4gICAgbGV0IGxpbmVzID0gb3V0cHV0LnNwbGl0KCdcXG4nKTtcblxuICAgIGlmICh0aGlzLnNjcmVlbikge1xuICAgICAgbGluZXMgPSB0aGlzLnNjcmVlbi5icmVha0xpbmVzKGxpbmVzKTtcbiAgICAgIGFjdGl2ZSA9IGxpbmVzXG4gICAgICAgIC5tYXAoKGxpbmVQYXJ0cykgPT4gbGluZVBhcnRzLmxlbmd0aClcbiAgICAgICAgLnNwbGljZSgwLCBhY3RpdmUpXG4gICAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbiAgICAgIGxpbmVzID0gbGluZXMuZmxhdCgpO1xuICAgIH1cblxuICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBsaW5lcyB0byBwYWdpbmF0ZVxuICAgIGlmIChsaW5lcy5sZW5ndGggPD0gcGFnZVNpemUpIHtcbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuICAgIGNvbnN0IHZpc2libGVMaW5lcyA9IHRoaXMuaXNJbmZpbml0ZVxuICAgICAgPyB0aGlzLmdldEluZmluaXRlTGluZXMobGluZXMsIGFjdGl2ZSwgcGFnZVNpemUpXG4gICAgICA6IHRoaXMuZ2V0RmluaXRlTGluZXMobGluZXMsIGFjdGl2ZSwgcGFnZVNpemUpO1xuICAgIHRoaXMubGFzdEluZGV4ID0gYWN0aXZlO1xuICAgIHJldHVybiAoXG4gICAgICB2aXNpYmxlTGluZXMuam9pbignXFxuJykgK1xuICAgICAgJ1xcbicgK1xuICAgICAgY29sb3JzLmRpbSgnKE1vdmUgdXAgYW5kIGRvd24gdG8gcmV2ZWFsIG1vcmUgY2hvaWNlcyknKVxuICAgICk7XG4gIH1cblxuICBnZXRJbmZpbml0ZUxpbmVzKGxpbmVzLCBhY3RpdmUsIHBhZ2VTaXplKSB7XG4gICAgaWYgKHRoaXMucG9pbnRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBvaW50ZXIgPSAwO1xuICAgIH1cbiAgICBjb25zdCBtaWRkbGVPZkxpc3QgPSBNYXRoLmZsb29yKHBhZ2VTaXplIC8gMik7XG4gICAgLy8gTW92ZSB0aGUgcG9pbnRlciBvbmx5IHdoZW4gdGhlIHVzZXIgZ28gZG93biBhbmQgbGltaXQgaXQgdG8gdGhlIG1pZGRsZSBvZiB0aGUgbGlzdFxuICAgIGlmIChcbiAgICAgIHRoaXMucG9pbnRlciA8IG1pZGRsZU9mTGlzdCAmJlxuICAgICAgdGhpcy5sYXN0SW5kZXggPCBhY3RpdmUgJiZcbiAgICAgIGFjdGl2ZSAtIHRoaXMubGFzdEluZGV4IDwgcGFnZVNpemVcbiAgICApIHtcbiAgICAgIHRoaXMucG9pbnRlciA9IE1hdGgubWluKG1pZGRsZU9mTGlzdCwgdGhpcy5wb2ludGVyICsgYWN0aXZlIC0gdGhpcy5sYXN0SW5kZXgpO1xuICAgIH1cblxuICAgIC8vIER1cGxpY2F0ZSB0aGUgbGluZXMgc28gaXQgZ2l2ZSBhbiBpbmZpbml0ZSBsaXN0IGxvb2tcbiAgICBjb25zdCBpbmZpbml0ZSA9IFtsaW5lcywgbGluZXMsIGxpbmVzXS5mbGF0KCk7XG4gICAgY29uc3QgdG9wSW5kZXggPSBNYXRoLm1heCgwLCBhY3RpdmUgKyBsaW5lcy5sZW5ndGggLSB0aGlzLnBvaW50ZXIpO1xuXG4gICAgcmV0dXJuIGluZmluaXRlLnNwbGljZSh0b3BJbmRleCwgcGFnZVNpemUpO1xuICB9XG5cbiAgZ2V0RmluaXRlTGluZXMobGluZXMsIGFjdGl2ZSwgcGFnZVNpemUpIHtcbiAgICBsZXQgdG9wSW5kZXggPSBhY3RpdmUgLSBwYWdlU2l6ZSAvIDI7XG4gICAgaWYgKHRvcEluZGV4IDwgMCkge1xuICAgICAgdG9wSW5kZXggPSAwO1xuICAgIH0gZWxzZSBpZiAodG9wSW5kZXggKyBwYWdlU2l6ZSA+IGxpbmVzLmxlbmd0aCkge1xuICAgICAgdG9wSW5kZXggPSBsaW5lcy5sZW5ndGggLSBwYWdlU2l6ZTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbmVzLnNwbGljZSh0b3BJbmRleCwgcGFnZVNpemUpO1xuICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbmNyZW1lbnRMaXN0SW5kZXgoY3VycmVudCwgZGlyLCBvcHQpIHtcbiAgY29uc3QgbGVuID0gb3B0LmNob2ljZXMucmVhbExlbmd0aDtcbiAgY29uc3Qgc2hvdWxkTG9vcCA9ICdsb29wJyBpbiBvcHQgPyBCb29sZWFuKG9wdC5sb29wKSA6IHRydWU7XG4gIGlmIChkaXIgPT09ICd1cCcpIHtcbiAgICBpZiAoY3VycmVudCA+IDApIHtcbiAgICAgIHJldHVybiBjdXJyZW50IC0gMTtcbiAgICB9XG4gICAgcmV0dXJuIHNob3VsZExvb3AgPyBsZW4gLSAxIDogY3VycmVudDtcbiAgfVxuICBpZiAoZGlyID09PSAnZG93bicpIHtcbiAgICBpZiAoY3VycmVudCA8IGxlbiAtIDEpIHtcbiAgICAgIHJldHVybiBjdXJyZW50ICsgMTtcbiAgICB9XG4gICAgcmV0dXJuIHNob3VsZExvb3AgPyAwIDogY3VycmVudDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ2RpciBtdXN0IGJlIHVwIG9yIGRvd24nKTtcbn1cbiIsImltcG9ydCBjb2xvcnMgZnJvbSAneW9jdG9jb2xvcnMtY2pzJztcbmltcG9ydCBmaWd1cmVzIGZyb20gJ0BpbnF1aXJlci9maWd1cmVzJztcblxuLyoqXG4gKiBTZXBhcmF0b3Igb2JqZWN0XG4gKiBVc2VkIHRvIHNwYWNlL3NlcGFyYXRlIGNob2ljZXMgZ3JvdXBcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtTdHJpbmd9IGxpbmUgICBTZXBhcmF0aW9uIGxpbmUgY29udGVudCAoZmFjdWx0YXRpdmUpXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VwYXJhdG9yIHtcbiAgY29uc3RydWN0b3IobGluZSkge1xuICAgIHRoaXMudHlwZSA9ICdzZXBhcmF0b3InO1xuICAgIHRoaXMubGluZSA9IGNvbG9ycy5kaW0obGluZSB8fCBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxNSB9KS5qb2luKGZpZ3VyZXMubGluZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBmdW5jdGlvbiByZXR1cm5pbmcgZmFsc2UgaWYgb2JqZWN0IGlzIGEgc2VwYXJhdG9yXG4gICAqIEBwYXJhbSAge09iamVjdH0gb2JqIG9iamVjdCB0byB0ZXN0IGFnYWluc3RcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gICAgYGZhbHNlYCBpZiBvYmplY3QgaXMgYSBzZXBhcmF0b3JcbiAgICovXG4gIHN0YXRpYyBleGNsdWRlKG9iaikge1xuICAgIHJldHVybiBvYmoudHlwZSAhPT0gJ3NlcGFyYXRvcic7XG4gIH1cblxuICAvKipcbiAgICogU3RyaW5naWZ5IHNlcGFyYXRvclxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IHRoZSBzZXBhcmF0b3IgZGlzcGxheSBzdHJpbmdcbiAgICovXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLmxpbmU7XG4gIH1cbn1cbiIsIi8qKlxuICogQ2hvaWNlIG9iamVjdFxuICogTm9ybWFsaXplIGlucHV0IGFzIGNob2ljZSBvYmplY3RcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtOdW1iZXJ8U3RyaW5nfE9iamVjdH0gdmFsICBDaG9pY2UgdmFsdWUuIElmIGFuIG9iamVjdCBpcyBwYXNzZWQsIGl0IHNob3VsZCBjb250YWluc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCBsZWFzdCBvbmUgb2YgYHZhbHVlYCBvciBgbmFtZWAgcHJvcGVydHlcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2Uge1xuICBjb25zdHJ1Y3Rvcih2YWwsIGFuc3dlcnMpIHtcbiAgICAvLyBEb24ndCBwcm9jZXNzIENob2ljZSBhbmQgU2VwYXJhdG9yIG9iamVjdFxuICAgIGlmICh2YWwgaW5zdGFuY2VvZiBDaG9pY2UgfHwgdmFsLnR5cGUgPT09ICdzZXBhcmF0b3InKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgICAgdGhpcy5uYW1lID0gU3RyaW5nKHZhbCk7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgICAgdGhpcy5zaG9ydCA9IFN0cmluZyh2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMsIHZhbCwge1xuICAgICAgICBuYW1lOiB2YWwubmFtZSB8fCB2YWwudmFsdWUsXG4gICAgICAgIHZhbHVlOiAndmFsdWUnIGluIHZhbCA/IHZhbC52YWx1ZSA6IHZhbC5uYW1lLFxuICAgICAgICBzaG9ydDogdmFsLnNob3J0IHx8IHZhbC5uYW1lIHx8IHZhbC52YWx1ZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZGlzYWJsZWQgPVxuICAgICAgdHlwZW9mIHZhbC5kaXNhYmxlZCA9PT0gJ2Z1bmN0aW9uJyA/IHZhbC5kaXNhYmxlZChhbnN3ZXJzKSA6IHZhbC5kaXNhYmxlZDtcbiAgfVxufVxuIiwiaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydCc7XG5cbmltcG9ydCBTZXBhcmF0b3IgZnJvbSAnLi9zZXBhcmF0b3IuanMnO1xuaW1wb3J0IENob2ljZSBmcm9tICcuL2Nob2ljZS5qcyc7XG5cbi8qKlxuICogQ2hvaWNlcyBjb2xsZWN0aW9uXG4gKiBDb2xsZWN0aW9uIG9mIG11bHRpcGxlIGBjaG9pY2VgIG9iamVjdFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VzIHtcbiAgLyoqIEBwYXJhbSB7QXJyYXl9IGNob2ljZXMgIEFsbCBgY2hvaWNlYCB0byBrZWVwIGluIHRoZSBjb2xsZWN0aW9uICovXG4gIGNvbnN0cnVjdG9yKGNob2ljZXMsIGFuc3dlcnMpIHtcbiAgICB0aGlzLmNob2ljZXMgPSBjaG9pY2VzLm1hcCgodmFsKSA9PiB7XG4gICAgICBpZiAodmFsLnR5cGUgPT09ICdzZXBhcmF0b3InKSB7XG4gICAgICAgIGlmICghKHZhbCBpbnN0YW5jZW9mIFNlcGFyYXRvcikpIHtcbiAgICAgICAgICB2YWwgPSBuZXcgU2VwYXJhdG9yKHZhbC5saW5lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ2hvaWNlKHZhbCwgYW5zd2Vycyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlYWxDaG9pY2VzID0gdGhpcy5jaG9pY2VzXG4gICAgICAuZmlsdGVyKFNlcGFyYXRvci5leGNsdWRlKVxuICAgICAgLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uZGlzYWJsZWQpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdsZW5ndGgnLCB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNob2ljZXMubGVuZ3RoO1xuICAgICAgfSxcbiAgICAgIHNldCh2YWwpIHtcbiAgICAgICAgdGhpcy5jaG9pY2VzLmxlbmd0aCA9IHZhbDtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3JlYWxMZW5ndGgnLCB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWxDaG9pY2VzLmxlbmd0aDtcbiAgICAgIH0sXG4gICAgICBzZXQoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHNldCBgcmVhbExlbmd0aGAgb2YgYSBDaG9pY2VzIGNvbGxlY3Rpb24nKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5jaG9pY2VzO1xuICAgIGxldCBpbmRleCA9IC0xO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5leHQ6ICgpID0+ICh7IHZhbHVlOiBkYXRhWysraW5kZXhdLCBkb25lOiAhKGluZGV4IGluIGRhdGEpIH0pLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgdmFsaWQgY2hvaWNlIGZyb20gdGhlIGNvbGxlY3Rpb25cbiAgICogQHBhcmFtICB7TnVtYmVyfSBzZWxlY3RvciAgVGhlIHNlbGVjdGVkIGNob2ljZSBpbmRleFxuICAgKiBAcmV0dXJuIHtDaG9pY2V8VW5kZWZpbmVkfSBSZXR1cm4gdGhlIG1hdGNoZWQgY2hvaWNlIG9yIHVuZGVmaW5lZFxuICAgKi9cbiAgZ2V0Q2hvaWNlKHNlbGVjdG9yKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBzZWxlY3RvciA9PT0gJ251bWJlcicpO1xuICAgIHJldHVybiB0aGlzLnJlYWxDaG9pY2VzW3NlbGVjdG9yXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSByYXcgZWxlbWVudCBmcm9tIHRoZSBjb2xsZWN0aW9uXG4gICAqIEBwYXJhbSAge051bWJlcn0gc2VsZWN0b3IgIFRoZSBzZWxlY3RlZCBpbmRleCB2YWx1ZVxuICAgKiBAcmV0dXJuIHtDaG9pY2V8VW5kZWZpbmVkfSBSZXR1cm4gdGhlIG1hdGNoZWQgY2hvaWNlIG9yIHVuZGVmaW5lZFxuICAgKi9cbiAgZ2V0KHNlbGVjdG9yKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBzZWxlY3RvciA9PT0gJ251bWJlcicpO1xuICAgIHJldHVybiB0aGlzLmNob2ljZXNbc2VsZWN0b3JdO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hdGNoIHRoZSB2YWxpZCBjaG9pY2VzIGFnYWluc3QgYSB3aGVyZSBjbGF1c2VcbiAgICogQHBhcmFtICB7RnVuY3Rpb258T2JqZWN0fSB3aGVyZUNsYXVzZSBmaWx0ZXIgZnVuY3Rpb24gb3Iga2V5LXZhbHVlIG9iamVjdCB0byBtYXRjaCBhZ2FpbnN0XG4gICAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgICAgICAgTWF0Y2hpbmcgY2hvaWNlcyBvciBlbXB0eSBhcnJheVxuICAgKi9cbiAgd2hlcmUod2hlcmVDbGF1c2UpIHtcbiAgICBsZXQgZmlsdGVyRm47XG4gICAgaWYgKHR5cGVvZiB3aGVyZUNsYXVzZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZmlsdGVyRm4gPSB3aGVyZUNsYXVzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMod2hlcmVDbGF1c2UpWzBdO1xuICAgICAgZmlsdGVyRm4gPSAoY2hvaWNlKSA9PiBjaG9pY2Vba2V5XSA9PT0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVhbENob2ljZXMuZmlsdGVyKGZpbHRlckZuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQbHVjayBhIHBhcnRpY3VsYXIga2V5IGZyb20gdGhlIGNob2ljZXNcbiAgICogQHBhcmFtICB7U3RyaW5nfSBwcm9wZXJ0eU5hbWUgUHJvcGVydHkgbmFtZSB0byBzZWxlY3RcbiAgICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgICAgICAgU2VsZWN0ZWQgcHJvcGVydGllc1xuICAgKi9cbiAgcGx1Y2socHJvcGVydHlOYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhbENob2ljZXMubWFwKChjaG9pY2UpID0+IGNob2ljZVtwcm9wZXJ0eU5hbWVdKTtcbiAgfVxuXG4gIC8vIEV4cG9zZSB1c3VhbCBBcnJheSBtZXRob2RzXG4gIGluZGV4T2YoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmNob2ljZXMuaW5kZXhPZiguLi5hcmdzKTtcbiAgfVxuXG4gIGZvckVhY2goLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmNob2ljZXMuZm9yRWFjaCguLi5hcmdzKTtcbiAgfVxuXG4gIGZpbHRlciguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hvaWNlcy5maWx0ZXIoLi4uYXJncyk7XG4gIH1cblxuICByZWR1Y2UoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmNob2ljZXMucmVkdWNlKC4uLmFyZ3MpO1xuICB9XG5cbiAgZmluZChmdW5jKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hvaWNlcy5maW5kKGZ1bmMpO1xuICB9XG5cbiAgc29tZShmdW5jKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hvaWNlcy5zb21lKGZ1bmMpO1xuICB9XG5cbiAgcHVzaCguLi5hcmdzKSB7XG4gICAgY29uc3Qgb2JqcyA9IGFyZ3MubWFwKCh2YWwpID0+IG5ldyBDaG9pY2UodmFsKSk7XG4gICAgdGhpcy5jaG9pY2VzLnB1c2goLi4ub2Jqcyk7XG4gICAgdGhpcy5yZWFsQ2hvaWNlcyA9IHRoaXMuY2hvaWNlc1xuICAgICAgLmZpbHRlcihTZXBhcmF0b3IuZXhjbHVkZSlcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLmRpc2FibGVkKTtcbiAgICByZXR1cm4gdGhpcy5jaG9pY2VzO1xuICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gY2xpV2lkdGg7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU9wdHMob3B0aW9ucykge1xuICBjb25zdCBkZWZhdWx0T3B0cyA9IHtcbiAgICBkZWZhdWx0V2lkdGg6IDAsXG4gICAgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcbiAgICB0dHk6IHJlcXVpcmUoJ3R0eScpLFxuICB9O1xuXG4gIGlmICghb3B0aW9ucykge1xuICAgIHJldHVybiBkZWZhdWx0T3B0cztcbiAgfVxuXG4gIE9iamVjdC5rZXlzKGRlZmF1bHRPcHRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIW9wdGlvbnNba2V5XSkge1xuICAgICAgb3B0aW9uc1trZXldID0gZGVmYXVsdE9wdHNba2V5XTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5mdW5jdGlvbiBjbGlXaWR0aChvcHRpb25zKSB7XG4gIGNvbnN0IG9wdHMgPSBub3JtYWxpemVPcHRzKG9wdGlvbnMpO1xuXG4gIGlmIChvcHRzLm91dHB1dC5nZXRXaW5kb3dTaXplKSB7XG4gICAgcmV0dXJuIG9wdHMub3V0cHV0LmdldFdpbmRvd1NpemUoKVswXSB8fCBvcHRzLmRlZmF1bHRXaWR0aDtcbiAgfVxuXG4gIGlmIChvcHRzLnR0eS5nZXRXaW5kb3dTaXplKSB7XG4gICAgcmV0dXJuIG9wdHMudHR5LmdldFdpbmRvd1NpemUoKVsxXSB8fCBvcHRzLmRlZmF1bHRXaWR0aDtcbiAgfVxuXG4gIGlmIChvcHRzLm91dHB1dC5jb2x1bW5zKSB7XG4gICAgcmV0dXJuIG9wdHMub3V0cHV0LmNvbHVtbnM7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuQ0xJX1dJRFRIKSB7XG4gICAgY29uc3Qgd2lkdGggPSBwYXJzZUludChwcm9jZXNzLmVudi5DTElfV0lEVEgsIDEwKTtcblxuICAgIGlmICghaXNOYU4od2lkdGgpICYmIHdpZHRoICE9PSAwKSB7XG4gICAgICByZXR1cm4gd2lkdGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9wdHMuZGVmYXVsdFdpZHRoO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICh7b25seUZpcnN0ID0gZmFsc2V9ID0ge30pID0+IHtcblx0Y29uc3QgcGF0dGVybiA9IFtcblx0XHQnW1xcXFx1MDAxQlxcXFx1MDA5Ql1bW1xcXFxdKCkjOz9dKig/Oig/Oig/Oig/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSspKnxbYS16QS1aXFxcXGRdKyg/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSopKik/XFxcXHUwMDA3KScsXG5cdFx0Jyg/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnRxcnk9Pjx+XSkpJ1xuXHRdLmpvaW4oJ3wnKTtcblxuXHRyZXR1cm4gbmV3IFJlZ0V4cChwYXR0ZXJuLCBvbmx5Rmlyc3QgPyB1bmRlZmluZWQgOiAnZycpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IGFuc2lSZWdleCA9IHJlcXVpcmUoJ2Fuc2ktcmVnZXgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpbmcgPT4gdHlwZW9mIHN0cmluZyA9PT0gJ3N0cmluZycgPyBzdHJpbmcucmVwbGFjZShhbnNpUmVnZXgoKSwgJycpIDogc3RyaW5nO1xuIiwiLyogZXNsaW50LWRpc2FibGUgeW9kYSAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBpc0Z1bGx3aWR0aENvZGVQb2ludCA9IGNvZGVQb2ludCA9PiB7XG5cdGlmIChOdW1iZXIuaXNOYU4oY29kZVBvaW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIENvZGUgcG9pbnRzIGFyZSBkZXJpdmVkIGZyb206XG5cdC8vIGh0dHA6Ly93d3cudW5peC5vcmcvUHVibGljL1VOSURBVEEvRWFzdEFzaWFuV2lkdGgudHh0XG5cdGlmIChcblx0XHRjb2RlUG9pbnQgPj0gMHgxMTAwICYmIChcblx0XHRcdGNvZGVQb2ludCA8PSAweDExNUYgfHwgLy8gSGFuZ3VsIEphbW9cblx0XHRcdGNvZGVQb2ludCA9PT0gMHgyMzI5IHx8IC8vIExFRlQtUE9JTlRJTkcgQU5HTEUgQlJBQ0tFVFxuXHRcdFx0Y29kZVBvaW50ID09PSAweDIzMkEgfHwgLy8gUklHSFQtUE9JTlRJTkcgQU5HTEUgQlJBQ0tFVFxuXHRcdFx0Ly8gQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQgLi4gRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRoc1xuXHRcdFx0KDB4MkU4MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzI0NyAmJiBjb2RlUG9pbnQgIT09IDB4MzAzRikgfHxcblx0XHRcdC8vIEVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMgLi4gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQVxuXHRcdFx0KDB4MzI1MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4NERCRikgfHxcblx0XHRcdC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgLi4gWWkgUmFkaWNhbHNcblx0XHRcdCgweDRFMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEE0QzYpIHx8XG5cdFx0XHQvLyBIYW5ndWwgSmFtbyBFeHRlbmRlZC1BXG5cdFx0XHQoMHhBOTYwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhBOTdDKSB8fFxuXHRcdFx0Ly8gSGFuZ3VsIFN5bGxhYmxlc1xuXHRcdFx0KDB4QUMwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RDdBMykgfHxcblx0XHRcdC8vIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHNcblx0XHRcdCgweEY5MDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZBRkYpIHx8XG5cdFx0XHQvLyBWZXJ0aWNhbCBGb3Jtc1xuXHRcdFx0KDB4RkUxMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkUxOSkgfHxcblx0XHRcdC8vIENKSyBDb21wYXRpYmlsaXR5IEZvcm1zIC4uIFNtYWxsIEZvcm0gVmFyaWFudHNcblx0XHRcdCgweEZFMzAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZFNkIpIHx8XG5cdFx0XHQvLyBIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3Jtc1xuXHRcdFx0KDB4RkYwMSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkY2MCkgfHxcblx0XHRcdCgweEZGRTAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGRTYpIHx8XG5cdFx0XHQvLyBLYW5hIFN1cHBsZW1lbnRcblx0XHRcdCgweDFCMDAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxQjAwMSkgfHxcblx0XHRcdC8vIEVuY2xvc2VkIElkZW9ncmFwaGljIFN1cHBsZW1lbnRcblx0XHRcdCgweDFGMjAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxRjI1MSkgfHxcblx0XHRcdC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEIgLi4gVGVydGlhcnkgSWRlb2dyYXBoaWMgUGxhbmVcblx0XHRcdCgweDIwMDAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgzRkZGRClcblx0XHQpXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bGx3aWR0aENvZGVQb2ludDtcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBpc0Z1bGx3aWR0aENvZGVQb2ludDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gaHR0cHM6Ly9tdGhzLmJlL2Vtb2ppXG4gIHJldHVybiAvXFx1RDgzQ1xcdURGRjRcXHVEQjQwXFx1REM2N1xcdURCNDBcXHVEQzYyKD86XFx1REI0MFxcdURDNjVcXHVEQjQwXFx1REM2RVxcdURCNDBcXHVEQzY3fFxcdURCNDBcXHVEQzczXFx1REI0MFxcdURDNjNcXHVEQjQwXFx1REM3NHxcXHVEQjQwXFx1REM3N1xcdURCNDBcXHVEQzZDXFx1REI0MFxcdURDNzMpXFx1REI0MFxcdURDN0Z8XFx1RDgzRFxcdURDNjgoPzpcXHVEODNDXFx1REZGQ1xcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NcXHVERkZCfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDXFx1REZGRlxcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZFXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkRcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkJcXHVERkZDXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdTIwMEQoPzpcXHUyNzY0XFx1RkUwRlxcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0RcXHVEQzY4fCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdTIwMEQoPzpcXHVEODNEXFx1REM2NlxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2N1xcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSkpfFxcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY3XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKXwoPzpcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pfFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRnxcXHVEODNEW1xcdURDNjZcXHVEQzY3XXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8KD86XFx1RDgzQ1xcdURGRkJcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkZcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkVcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkRcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkNcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF0pXFx1RkUwRnxcXHVEODNDXFx1REZGQlxcdTIwMEQoPzpcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZCXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkNcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjkpXFx1RDgzQ1xcdURGRkJ8XFx1RDgzRVxcdURERDEoPzpcXHVEODNDXFx1REZGRlxcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8XFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZFXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkZcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSl8KD86XFx1RDgzRVxcdURERDFcXHVEODNDXFx1REZGQ1xcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMXxcXHVEODNEXFx1REM2OVxcdUQ4M0NcXHVERkZEXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY5KSg/OlxcdUQ4M0NbXFx1REZGQlxcdURGRkNdKXxcXHVEODNEXFx1REM2OSg/OlxcdUQ4M0NcXHVERkZFXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZDXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZCXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkRcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1MjAwRCg/OlxcdTI3NjRcXHVGRTBGXFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKXxcXHVEODNEW1xcdURDNjhcXHVEQzY5XSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZGXFx1MjAwRCg/OlxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKSl8XFx1RDgzRFxcdURDNjlcXHUyMDBEXFx1RDgzRFxcdURDNjlcXHUyMDBEKD86XFx1RDgzRFxcdURDNjZcXHUyMDBEXFx1RDgzRFxcdURDNjZ8XFx1RDgzRFxcdURDNjdcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZEXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkVcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjkpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRdKXxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2NlxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2OVxcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSl8KD86XFx1RDgzRFxcdURDNDFcXHVGRTBGXFx1MjAwRFxcdUQ4M0RcXHVEREU4fFxcdUQ4M0RcXHVEQzY5KD86XFx1RDgzQ1xcdURGRkZcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkVcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkNcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkJcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkRcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdKXwoPzooPzpcXHUyNkY5fFxcdUQ4M0NbXFx1REZDQlxcdURGQ0NdfFxcdUQ4M0RcXHVERDc1KVxcdUZFMEZ8XFx1RDgzRFxcdURDNkZ8XFx1RDgzRVtcXHVERDNDXFx1RERERVxcdUREREZdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfCg/OlxcdTI2Rjl8XFx1RDgzQ1tcXHVERkNCXFx1REZDQ118XFx1RDgzRFxcdURENzUpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfCg/OlxcdUQ4M0NbXFx1REZDM1xcdURGQzRcXHVERkNBXXxcXHVEODNEW1xcdURDNkVcXHVEQzcxXFx1REM3M1xcdURDNzdcXHVEQzgxXFx1REM4MlxcdURDODZcXHVEQzg3XFx1REU0NS1cXHVERTQ3XFx1REU0QlxcdURFNERcXHVERTRFXFx1REVBM1xcdURFQjQtXFx1REVCNl18XFx1RDgzRVtcXHVERDI2XFx1REQzNy1cXHVERDM5XFx1REQzRFxcdUREM0VcXHVEREI4XFx1RERCOVxcdUREQ0QtXFx1RERDRlxcdURERDYtXFx1RERERF0pKD86KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfFxcdTIwMERbXFx1MjY0MFxcdTI2NDJdKXxcXHVEODNDXFx1REZGNFxcdTIwMERcXHUyNjIwKVxcdUZFMEZ8XFx1RDgzRFxcdURDNjlcXHUyMDBEXFx1RDgzRFxcdURDNjdcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pfFxcdUQ4M0NcXHVERkYzXFx1RkUwRlxcdTIwMERcXHVEODNDXFx1REYwOHxcXHVEODNEXFx1REMxNVxcdTIwMERcXHVEODNFXFx1RERCQXxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2N3xcXHVEODNDXFx1RERGRFxcdUQ4M0NcXHVEREYwfFxcdUQ4M0NcXHVEREY0XFx1RDgzQ1xcdURERjJ8XFx1RDgzQ1xcdURERjZcXHVEODNDXFx1RERFNnxbI1xcKjAtOV1cXHVGRTBGXFx1MjBFM3xcXHVEODNDXFx1RERFNyg/OlxcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUZcXHVEREYxLVxcdURERjRcXHVEREY2LVxcdURERjlcXHVEREZCXFx1RERGQ1xcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERjkoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRFxcdURERUYtXFx1RERGNFxcdURERjdcXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZGXSl8XFx1RDgzQ1xcdURERUEoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQVxcdURERUNcXHVEREVEXFx1RERGNy1cXHVEREZBXSl8XFx1RDgzRVxcdURERDEoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfFxcdUQ4M0NcXHVEREY3KD86XFx1RDgzQ1tcXHVEREVBXFx1RERGNFxcdURERjhcXHVEREZBXFx1RERGQ10pfFxcdUQ4M0RcXHVEQzY5KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXxcXHVEODNDXFx1RERGMig/OlxcdUQ4M0NbXFx1RERFNlxcdURERTgtXFx1RERFRFxcdURERjAtXFx1RERGRl0pfFxcdUQ4M0NcXHVEREU2KD86XFx1RDgzQ1tcXHVEREU4LVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjJcXHVEREY0XFx1RERGNi1cXHVEREZBXFx1RERGQ1xcdURERkRcXHVEREZGXSl8XFx1RDgzQ1xcdURERjAoPzpcXHVEODNDW1xcdURERUFcXHVEREVDLVxcdURERUVcXHVEREYyXFx1RERGM1xcdURERjVcXHVEREY3XFx1RERGQ1xcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERUQoPzpcXHVEODNDW1xcdURERjBcXHVEREYyXFx1RERGM1xcdURERjdcXHVEREY5XFx1RERGQV0pfFxcdUQ4M0NcXHVEREU5KD86XFx1RDgzQ1tcXHVEREVBXFx1RERFQ1xcdURERUZcXHVEREYwXFx1RERGMlxcdURERjRcXHVEREZGXSl8XFx1RDgzQ1xcdURERkUoPzpcXHVEODNDW1xcdURERUFcXHVEREY5XSl8XFx1RDgzQ1xcdURERUMoPzpcXHVEODNDW1xcdURERTZcXHVEREU3XFx1RERFOS1cXHVEREVFXFx1RERGMS1cXHVEREYzXFx1RERGNS1cXHVEREZBXFx1RERGQ1xcdURERkVdKXxcXHVEODNDXFx1RERGOCg/OlxcdUQ4M0NbXFx1RERFNi1cXHVEREVBXFx1RERFQy1cXHVEREY0XFx1RERGNy1cXHVEREY5XFx1RERGQlxcdURERkQtXFx1RERGRl0pfFxcdUQ4M0NcXHVEREVCKD86XFx1RDgzQ1tcXHVEREVFLVxcdURERjBcXHVEREYyXFx1RERGNFxcdURERjddKXxcXHVEODNDXFx1RERGNSg/OlxcdUQ4M0NbXFx1RERFNlxcdURERUEtXFx1RERFRFxcdURERjAtXFx1RERGM1xcdURERjctXFx1RERGOVxcdURERkNcXHVEREZFXSl8XFx1RDgzQ1xcdURERkIoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQVxcdURERUNcXHVEREVFXFx1RERGM1xcdURERkFdKXxcXHVEODNDXFx1RERGMyg/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBLVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjRcXHVEREY1XFx1RERGN1xcdURERkFcXHVEREZGXSl8XFx1RDgzQ1xcdURERTgoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRVxcdURERjAtXFx1RERGNVxcdURERjdcXHVEREZBLVxcdURERkZdKXxcXHVEODNDXFx1RERGMSg/OlxcdUQ4M0NbXFx1RERFNi1cXHVEREU4XFx1RERFRVxcdURERjBcXHVEREY3LVxcdURERkJcXHVEREZFXSl8XFx1RDgzQ1xcdURERkYoPzpcXHVEODNDW1xcdURERTZcXHVEREYyXFx1RERGQ10pfFxcdUQ4M0NcXHVEREZDKD86XFx1RDgzQ1tcXHVEREVCXFx1RERGOF0pfFxcdUQ4M0NcXHVEREZBKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFQ1xcdURERjJcXHVEREYzXFx1RERGOFxcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERUUoPzpcXHVEODNDW1xcdURERTgtXFx1RERFQVxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOV0pfFxcdUQ4M0NcXHVEREVGKD86XFx1RDgzQ1tcXHVEREVBXFx1RERGMlxcdURERjRcXHVEREY1XSl8KD86XFx1RDgzQ1tcXHVERkMzXFx1REZDNFxcdURGQ0FdfFxcdUQ4M0RbXFx1REM2RVxcdURDNzFcXHVEQzczXFx1REM3N1xcdURDODFcXHVEQzgyXFx1REM4NlxcdURDODdcXHVERTQ1LVxcdURFNDdcXHVERTRCXFx1REU0RFxcdURFNEVcXHVERUEzXFx1REVCNC1cXHVERUI2XXxcXHVEODNFW1xcdUREMjZcXHVERDM3LVxcdUREMzlcXHVERDNEXFx1REQzRVxcdUREQjhcXHVEREI5XFx1RERDRC1cXHVERENGXFx1RERENi1cXHVEREREXSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OlxcdTI2Rjl8XFx1RDgzQ1tcXHVERkNCXFx1REZDQ118XFx1RDgzRFxcdURENzUpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXwoPzpbXFx1MjYxRFxcdTI3MEEtXFx1MjcwRF18XFx1RDgzQ1tcXHVERjg1XFx1REZDMlxcdURGQzddfFxcdUQ4M0RbXFx1REM0MlxcdURDNDNcXHVEQzQ2LVxcdURDNTBcXHVEQzY2XFx1REM2N1xcdURDNkItXFx1REM2RFxcdURDNzBcXHVEQzcyXFx1REM3NC1cXHVEQzc2XFx1REM3OFxcdURDN0NcXHVEQzgzXFx1REM4NVxcdURDQUFcXHVERDc0XFx1REQ3QVxcdUREOTBcXHVERDk1XFx1REQ5NlxcdURFNENcXHVERTRGXFx1REVDMFxcdURFQ0NdfFxcdUQ4M0VbXFx1REQwRlxcdUREMTgtXFx1REQxQ1xcdUREMUVcXHVERDFGXFx1REQzMC1cXHVERDM2XFx1RERCNVxcdUREQjZcXHVEREJCXFx1REREMi1cXHVEREQ1XSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OltcXHUyMzFBXFx1MjMxQlxcdTIzRTktXFx1MjNFQ1xcdTIzRjBcXHUyM0YzXFx1MjVGRFxcdTI1RkVcXHUyNjE0XFx1MjYxNVxcdTI2NDgtXFx1MjY1M1xcdTI2N0ZcXHUyNjkzXFx1MjZBMVxcdTI2QUFcXHUyNkFCXFx1MjZCRFxcdTI2QkVcXHUyNkM0XFx1MjZDNVxcdTI2Q0VcXHUyNkQ0XFx1MjZFQVxcdTI2RjJcXHUyNkYzXFx1MjZGNVxcdTI2RkFcXHUyNkZEXFx1MjcwNVxcdTI3MEFcXHUyNzBCXFx1MjcyOFxcdTI3NENcXHUyNzRFXFx1Mjc1My1cXHUyNzU1XFx1Mjc1N1xcdTI3OTUtXFx1Mjc5N1xcdTI3QjBcXHUyN0JGXFx1MkIxQlxcdTJCMUNcXHUyQjUwXFx1MkI1NV18XFx1RDgzQ1tcXHVEQzA0XFx1RENDRlxcdUREOEVcXHVERDkxLVxcdUREOUFcXHVEREU2LVxcdURERkZcXHVERTAxXFx1REUxQVxcdURFMkZcXHVERTMyLVxcdURFMzZcXHVERTM4LVxcdURFM0FcXHVERTUwXFx1REU1MVxcdURGMDAtXFx1REYyMFxcdURGMkQtXFx1REYzNVxcdURGMzctXFx1REY3Q1xcdURGN0UtXFx1REY5M1xcdURGQTAtXFx1REZDQVxcdURGQ0YtXFx1REZEM1xcdURGRTAtXFx1REZGMFxcdURGRjRcXHVERkY4LVxcdURGRkZdfFxcdUQ4M0RbXFx1REMwMC1cXHVEQzNFXFx1REM0MFxcdURDNDItXFx1RENGQ1xcdURDRkYtXFx1REQzRFxcdURENEItXFx1REQ0RVxcdURENTAtXFx1REQ2N1xcdUREN0FcXHVERDk1XFx1REQ5NlxcdUREQTRcXHVEREZCLVxcdURFNEZcXHVERTgwLVxcdURFQzVcXHVERUNDXFx1REVEMC1cXHVERUQyXFx1REVENVxcdURFRUJcXHVERUVDXFx1REVGNC1cXHVERUZBXFx1REZFMC1cXHVERkVCXXxcXHVEODNFW1xcdUREMEQtXFx1REQzQVxcdUREM0MtXFx1REQ0NVxcdURENDctXFx1REQ3MVxcdURENzMtXFx1REQ3NlxcdUREN0EtXFx1RERBMlxcdUREQTUtXFx1RERBQVxcdUREQUUtXFx1RERDQVxcdUREQ0QtXFx1RERGRlxcdURFNzAtXFx1REU3M1xcdURFNzgtXFx1REU3QVxcdURFODAtXFx1REU4MlxcdURFOTAtXFx1REU5NV0pfCg/OlsjXFwqMC05XFx4QTlcXHhBRVxcdTIwM0NcXHUyMDQ5XFx1MjEyMlxcdTIxMzlcXHUyMTk0LVxcdTIxOTlcXHUyMUE5XFx1MjFBQVxcdTIzMUFcXHUyMzFCXFx1MjMyOFxcdTIzQ0ZcXHUyM0U5LVxcdTIzRjNcXHUyM0Y4LVxcdTIzRkFcXHUyNEMyXFx1MjVBQVxcdTI1QUJcXHUyNUI2XFx1MjVDMFxcdTI1RkItXFx1MjVGRVxcdTI2MDAtXFx1MjYwNFxcdTI2MEVcXHUyNjExXFx1MjYxNFxcdTI2MTVcXHUyNjE4XFx1MjYxRFxcdTI2MjBcXHUyNjIyXFx1MjYyM1xcdTI2MjZcXHUyNjJBXFx1MjYyRVxcdTI2MkZcXHUyNjM4LVxcdTI2M0FcXHUyNjQwXFx1MjY0MlxcdTI2NDgtXFx1MjY1M1xcdTI2NUZcXHUyNjYwXFx1MjY2M1xcdTI2NjVcXHUyNjY2XFx1MjY2OFxcdTI2N0JcXHUyNjdFXFx1MjY3RlxcdTI2OTItXFx1MjY5N1xcdTI2OTlcXHUyNjlCXFx1MjY5Q1xcdTI2QTBcXHUyNkExXFx1MjZBQVxcdTI2QUJcXHUyNkIwXFx1MjZCMVxcdTI2QkRcXHUyNkJFXFx1MjZDNFxcdTI2QzVcXHUyNkM4XFx1MjZDRVxcdTI2Q0ZcXHUyNkQxXFx1MjZEM1xcdTI2RDRcXHUyNkU5XFx1MjZFQVxcdTI2RjAtXFx1MjZGNVxcdTI2RjctXFx1MjZGQVxcdTI2RkRcXHUyNzAyXFx1MjcwNVxcdTI3MDgtXFx1MjcwRFxcdTI3MEZcXHUyNzEyXFx1MjcxNFxcdTI3MTZcXHUyNzFEXFx1MjcyMVxcdTI3MjhcXHUyNzMzXFx1MjczNFxcdTI3NDRcXHUyNzQ3XFx1Mjc0Q1xcdTI3NEVcXHUyNzUzLVxcdTI3NTVcXHUyNzU3XFx1Mjc2M1xcdTI3NjRcXHUyNzk1LVxcdTI3OTdcXHUyN0ExXFx1MjdCMFxcdTI3QkZcXHUyOTM0XFx1MjkzNVxcdTJCMDUtXFx1MkIwN1xcdTJCMUJcXHUyQjFDXFx1MkI1MFxcdTJCNTVcXHUzMDMwXFx1MzAzRFxcdTMyOTdcXHUzMjk5XXxcXHVEODNDW1xcdURDMDRcXHVEQ0NGXFx1REQ3MFxcdURENzFcXHVERDdFXFx1REQ3RlxcdUREOEVcXHVERDkxLVxcdUREOUFcXHVEREU2LVxcdURERkZcXHVERTAxXFx1REUwMlxcdURFMUFcXHVERTJGXFx1REUzMi1cXHVERTNBXFx1REU1MFxcdURFNTFcXHVERjAwLVxcdURGMjFcXHVERjI0LVxcdURGOTNcXHVERjk2XFx1REY5N1xcdURGOTktXFx1REY5QlxcdURGOUUtXFx1REZGMFxcdURGRjMtXFx1REZGNVxcdURGRjctXFx1REZGRl18XFx1RDgzRFtcXHVEQzAwLVxcdURDRkRcXHVEQ0ZGLVxcdUREM0RcXHVERDQ5LVxcdURENEVcXHVERDUwLVxcdURENjdcXHVERDZGXFx1REQ3MFxcdURENzMtXFx1REQ3QVxcdUREODdcXHVERDhBLVxcdUREOERcXHVERDkwXFx1REQ5NVxcdUREOTZcXHVEREE0XFx1RERBNVxcdUREQThcXHVEREIxXFx1RERCMlxcdUREQkNcXHVEREMyLVxcdUREQzRcXHVEREQxLVxcdURERDNcXHVERERDLVxcdUREREVcXHVEREUxXFx1RERFM1xcdURERThcXHVEREVGXFx1RERGM1xcdURERkEtXFx1REU0RlxcdURFODAtXFx1REVDNVxcdURFQ0ItXFx1REVEMlxcdURFRDVcXHVERUUwLVxcdURFRTVcXHVERUU5XFx1REVFQlxcdURFRUNcXHVERUYwXFx1REVGMy1cXHVERUZBXFx1REZFMC1cXHVERkVCXXxcXHVEODNFW1xcdUREMEQtXFx1REQzQVxcdUREM0MtXFx1REQ0NVxcdURENDctXFx1REQ3MVxcdURENzMtXFx1REQ3NlxcdUREN0EtXFx1RERBMlxcdUREQTUtXFx1RERBQVxcdUREQUUtXFx1RERDQVxcdUREQ0QtXFx1RERGRlxcdURFNzAtXFx1REU3M1xcdURFNzgtXFx1REU3QVxcdURFODAtXFx1REU4MlxcdURFOTAtXFx1REU5NV0pXFx1RkUwRnwoPzpbXFx1MjYxRFxcdTI2RjlcXHUyNzBBLVxcdTI3MERdfFxcdUQ4M0NbXFx1REY4NVxcdURGQzItXFx1REZDNFxcdURGQzdcXHVERkNBLVxcdURGQ0NdfFxcdUQ4M0RbXFx1REM0MlxcdURDNDNcXHVEQzQ2LVxcdURDNTBcXHVEQzY2LVxcdURDNzhcXHVEQzdDXFx1REM4MS1cXHVEQzgzXFx1REM4NS1cXHVEQzg3XFx1REM4RlxcdURDOTFcXHVEQ0FBXFx1REQ3NFxcdURENzVcXHVERDdBXFx1REQ5MFxcdUREOTVcXHVERDk2XFx1REU0NS1cXHVERTQ3XFx1REU0Qi1cXHVERTRGXFx1REVBM1xcdURFQjQtXFx1REVCNlxcdURFQzBcXHVERUNDXXxcXHVEODNFW1xcdUREMEZcXHVERDE4LVxcdUREMUZcXHVERDI2XFx1REQzMC1cXHVERDM5XFx1REQzQy1cXHVERDNFXFx1RERCNVxcdUREQjZcXHVEREI4XFx1RERCOVxcdUREQkJcXHVERENELVxcdUREQ0ZcXHVEREQxLVxcdURERERdKS9nO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IHN0cmlwQW5zaSA9IHJlcXVpcmUoJ3N0cmlwLWFuc2knKTtcbmNvbnN0IGlzRnVsbHdpZHRoQ29kZVBvaW50ID0gcmVxdWlyZSgnaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQnKTtcbmNvbnN0IGVtb2ppUmVnZXggPSByZXF1aXJlKCdlbW9qaS1yZWdleCcpO1xuXG5jb25zdCBzdHJpbmdXaWR0aCA9IHN0cmluZyA9PiB7XG5cdGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJyB8fCBzdHJpbmcubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRzdHJpbmcgPSBzdHJpcEFuc2koc3RyaW5nKTtcblxuXHRpZiAoc3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoZW1vamlSZWdleCgpLCAnICAnKTtcblxuXHRsZXQgd2lkdGggPSAwO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgY29kZSA9IHN0cmluZy5jb2RlUG9pbnRBdChpKTtcblxuXHRcdC8vIElnbm9yZSBjb250cm9sIGNoYXJhY3RlcnNcblx0XHRpZiAoY29kZSA8PSAweDFGIHx8IChjb2RlID49IDB4N0YgJiYgY29kZSA8PSAweDlGKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gSWdub3JlIGNvbWJpbmluZyBjaGFyYWN0ZXJzXG5cdFx0aWYgKGNvZGUgPj0gMHgzMDAgJiYgY29kZSA8PSAweDM2Rikge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gU3Vycm9nYXRlc1xuXHRcdGlmIChjb2RlID4gMHhGRkZGKSB7XG5cdFx0XHRpKys7XG5cdFx0fVxuXG5cdFx0d2lkdGggKz0gaXNGdWxsd2lkdGhDb2RlUG9pbnQoY29kZSkgPyAyIDogMTtcblx0fVxuXG5cdHJldHVybiB3aWR0aDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nV2lkdGg7XG4vLyBUT0RPOiByZW1vdmUgdGhpcyBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gc3RyaW5nV2lkdGg7XG4iLCIndXNlIHN0cmljdCdcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cdFwiYWxpY2VibHVlXCI6IFsyNDAsIDI0OCwgMjU1XSxcclxuXHRcImFudGlxdWV3aGl0ZVwiOiBbMjUwLCAyMzUsIDIxNV0sXHJcblx0XCJhcXVhXCI6IFswLCAyNTUsIDI1NV0sXHJcblx0XCJhcXVhbWFyaW5lXCI6IFsxMjcsIDI1NSwgMjEyXSxcclxuXHRcImF6dXJlXCI6IFsyNDAsIDI1NSwgMjU1XSxcclxuXHRcImJlaWdlXCI6IFsyNDUsIDI0NSwgMjIwXSxcclxuXHRcImJpc3F1ZVwiOiBbMjU1LCAyMjgsIDE5Nl0sXHJcblx0XCJibGFja1wiOiBbMCwgMCwgMF0sXHJcblx0XCJibGFuY2hlZGFsbW9uZFwiOiBbMjU1LCAyMzUsIDIwNV0sXHJcblx0XCJibHVlXCI6IFswLCAwLCAyNTVdLFxyXG5cdFwiYmx1ZXZpb2xldFwiOiBbMTM4LCA0MywgMjI2XSxcclxuXHRcImJyb3duXCI6IFsxNjUsIDQyLCA0Ml0sXHJcblx0XCJidXJseXdvb2RcIjogWzIyMiwgMTg0LCAxMzVdLFxyXG5cdFwiY2FkZXRibHVlXCI6IFs5NSwgMTU4LCAxNjBdLFxyXG5cdFwiY2hhcnRyZXVzZVwiOiBbMTI3LCAyNTUsIDBdLFxyXG5cdFwiY2hvY29sYXRlXCI6IFsyMTAsIDEwNSwgMzBdLFxyXG5cdFwiY29yYWxcIjogWzI1NSwgMTI3LCA4MF0sXHJcblx0XCJjb3JuZmxvd2VyYmx1ZVwiOiBbMTAwLCAxNDksIDIzN10sXHJcblx0XCJjb3Juc2lsa1wiOiBbMjU1LCAyNDgsIDIyMF0sXHJcblx0XCJjcmltc29uXCI6IFsyMjAsIDIwLCA2MF0sXHJcblx0XCJjeWFuXCI6IFswLCAyNTUsIDI1NV0sXHJcblx0XCJkYXJrYmx1ZVwiOiBbMCwgMCwgMTM5XSxcclxuXHRcImRhcmtjeWFuXCI6IFswLCAxMzksIDEzOV0sXHJcblx0XCJkYXJrZ29sZGVucm9kXCI6IFsxODQsIDEzNCwgMTFdLFxyXG5cdFwiZGFya2dyYXlcIjogWzE2OSwgMTY5LCAxNjldLFxyXG5cdFwiZGFya2dyZWVuXCI6IFswLCAxMDAsIDBdLFxyXG5cdFwiZGFya2dyZXlcIjogWzE2OSwgMTY5LCAxNjldLFxyXG5cdFwiZGFya2toYWtpXCI6IFsxODksIDE4MywgMTA3XSxcclxuXHRcImRhcmttYWdlbnRhXCI6IFsxMzksIDAsIDEzOV0sXHJcblx0XCJkYXJrb2xpdmVncmVlblwiOiBbODUsIDEwNywgNDddLFxyXG5cdFwiZGFya29yYW5nZVwiOiBbMjU1LCAxNDAsIDBdLFxyXG5cdFwiZGFya29yY2hpZFwiOiBbMTUzLCA1MCwgMjA0XSxcclxuXHRcImRhcmtyZWRcIjogWzEzOSwgMCwgMF0sXHJcblx0XCJkYXJrc2FsbW9uXCI6IFsyMzMsIDE1MCwgMTIyXSxcclxuXHRcImRhcmtzZWFncmVlblwiOiBbMTQzLCAxODgsIDE0M10sXHJcblx0XCJkYXJrc2xhdGVibHVlXCI6IFs3MiwgNjEsIDEzOV0sXHJcblx0XCJkYXJrc2xhdGVncmF5XCI6IFs0NywgNzksIDc5XSxcclxuXHRcImRhcmtzbGF0ZWdyZXlcIjogWzQ3LCA3OSwgNzldLFxyXG5cdFwiZGFya3R1cnF1b2lzZVwiOiBbMCwgMjA2LCAyMDldLFxyXG5cdFwiZGFya3Zpb2xldFwiOiBbMTQ4LCAwLCAyMTFdLFxyXG5cdFwiZGVlcHBpbmtcIjogWzI1NSwgMjAsIDE0N10sXHJcblx0XCJkZWVwc2t5Ymx1ZVwiOiBbMCwgMTkxLCAyNTVdLFxyXG5cdFwiZGltZ3JheVwiOiBbMTA1LCAxMDUsIDEwNV0sXHJcblx0XCJkaW1ncmV5XCI6IFsxMDUsIDEwNSwgMTA1XSxcclxuXHRcImRvZGdlcmJsdWVcIjogWzMwLCAxNDQsIDI1NV0sXHJcblx0XCJmaXJlYnJpY2tcIjogWzE3OCwgMzQsIDM0XSxcclxuXHRcImZsb3JhbHdoaXRlXCI6IFsyNTUsIDI1MCwgMjQwXSxcclxuXHRcImZvcmVzdGdyZWVuXCI6IFszNCwgMTM5LCAzNF0sXHJcblx0XCJmdWNoc2lhXCI6IFsyNTUsIDAsIDI1NV0sXHJcblx0XCJnYWluc2Jvcm9cIjogWzIyMCwgMjIwLCAyMjBdLFxyXG5cdFwiZ2hvc3R3aGl0ZVwiOiBbMjQ4LCAyNDgsIDI1NV0sXHJcblx0XCJnb2xkXCI6IFsyNTUsIDIxNSwgMF0sXHJcblx0XCJnb2xkZW5yb2RcIjogWzIxOCwgMTY1LCAzMl0sXHJcblx0XCJncmF5XCI6IFsxMjgsIDEyOCwgMTI4XSxcclxuXHRcImdyZWVuXCI6IFswLCAxMjgsIDBdLFxyXG5cdFwiZ3JlZW55ZWxsb3dcIjogWzE3MywgMjU1LCA0N10sXHJcblx0XCJncmV5XCI6IFsxMjgsIDEyOCwgMTI4XSxcclxuXHRcImhvbmV5ZGV3XCI6IFsyNDAsIDI1NSwgMjQwXSxcclxuXHRcImhvdHBpbmtcIjogWzI1NSwgMTA1LCAxODBdLFxyXG5cdFwiaW5kaWFucmVkXCI6IFsyMDUsIDkyLCA5Ml0sXHJcblx0XCJpbmRpZ29cIjogWzc1LCAwLCAxMzBdLFxyXG5cdFwiaXZvcnlcIjogWzI1NSwgMjU1LCAyNDBdLFxyXG5cdFwia2hha2lcIjogWzI0MCwgMjMwLCAxNDBdLFxyXG5cdFwibGF2ZW5kZXJcIjogWzIzMCwgMjMwLCAyNTBdLFxyXG5cdFwibGF2ZW5kZXJibHVzaFwiOiBbMjU1LCAyNDAsIDI0NV0sXHJcblx0XCJsYXduZ3JlZW5cIjogWzEyNCwgMjUyLCAwXSxcclxuXHRcImxlbW9uY2hpZmZvblwiOiBbMjU1LCAyNTAsIDIwNV0sXHJcblx0XCJsaWdodGJsdWVcIjogWzE3MywgMjE2LCAyMzBdLFxyXG5cdFwibGlnaHRjb3JhbFwiOiBbMjQwLCAxMjgsIDEyOF0sXHJcblx0XCJsaWdodGN5YW5cIjogWzIyNCwgMjU1LCAyNTVdLFxyXG5cdFwibGlnaHRnb2xkZW5yb2R5ZWxsb3dcIjogWzI1MCwgMjUwLCAyMTBdLFxyXG5cdFwibGlnaHRncmF5XCI6IFsyMTEsIDIxMSwgMjExXSxcclxuXHRcImxpZ2h0Z3JlZW5cIjogWzE0NCwgMjM4LCAxNDRdLFxyXG5cdFwibGlnaHRncmV5XCI6IFsyMTEsIDIxMSwgMjExXSxcclxuXHRcImxpZ2h0cGlua1wiOiBbMjU1LCAxODIsIDE5M10sXHJcblx0XCJsaWdodHNhbG1vblwiOiBbMjU1LCAxNjAsIDEyMl0sXHJcblx0XCJsaWdodHNlYWdyZWVuXCI6IFszMiwgMTc4LCAxNzBdLFxyXG5cdFwibGlnaHRza3libHVlXCI6IFsxMzUsIDIwNiwgMjUwXSxcclxuXHRcImxpZ2h0c2xhdGVncmF5XCI6IFsxMTksIDEzNiwgMTUzXSxcclxuXHRcImxpZ2h0c2xhdGVncmV5XCI6IFsxMTksIDEzNiwgMTUzXSxcclxuXHRcImxpZ2h0c3RlZWxibHVlXCI6IFsxNzYsIDE5NiwgMjIyXSxcclxuXHRcImxpZ2h0eWVsbG93XCI6IFsyNTUsIDI1NSwgMjI0XSxcclxuXHRcImxpbWVcIjogWzAsIDI1NSwgMF0sXHJcblx0XCJsaW1lZ3JlZW5cIjogWzUwLCAyMDUsIDUwXSxcclxuXHRcImxpbmVuXCI6IFsyNTAsIDI0MCwgMjMwXSxcclxuXHRcIm1hZ2VudGFcIjogWzI1NSwgMCwgMjU1XSxcclxuXHRcIm1hcm9vblwiOiBbMTI4LCAwLCAwXSxcclxuXHRcIm1lZGl1bWFxdWFtYXJpbmVcIjogWzEwMiwgMjA1LCAxNzBdLFxyXG5cdFwibWVkaXVtYmx1ZVwiOiBbMCwgMCwgMjA1XSxcclxuXHRcIm1lZGl1bW9yY2hpZFwiOiBbMTg2LCA4NSwgMjExXSxcclxuXHRcIm1lZGl1bXB1cnBsZVwiOiBbMTQ3LCAxMTIsIDIxOV0sXHJcblx0XCJtZWRpdW1zZWFncmVlblwiOiBbNjAsIDE3OSwgMTEzXSxcclxuXHRcIm1lZGl1bXNsYXRlYmx1ZVwiOiBbMTIzLCAxMDQsIDIzOF0sXHJcblx0XCJtZWRpdW1zcHJpbmdncmVlblwiOiBbMCwgMjUwLCAxNTRdLFxyXG5cdFwibWVkaXVtdHVycXVvaXNlXCI6IFs3MiwgMjA5LCAyMDRdLFxyXG5cdFwibWVkaXVtdmlvbGV0cmVkXCI6IFsxOTksIDIxLCAxMzNdLFxyXG5cdFwibWlkbmlnaHRibHVlXCI6IFsyNSwgMjUsIDExMl0sXHJcblx0XCJtaW50Y3JlYW1cIjogWzI0NSwgMjU1LCAyNTBdLFxyXG5cdFwibWlzdHlyb3NlXCI6IFsyNTUsIDIyOCwgMjI1XSxcclxuXHRcIm1vY2Nhc2luXCI6IFsyNTUsIDIyOCwgMTgxXSxcclxuXHRcIm5hdmFqb3doaXRlXCI6IFsyNTUsIDIyMiwgMTczXSxcclxuXHRcIm5hdnlcIjogWzAsIDAsIDEyOF0sXHJcblx0XCJvbGRsYWNlXCI6IFsyNTMsIDI0NSwgMjMwXSxcclxuXHRcIm9saXZlXCI6IFsxMjgsIDEyOCwgMF0sXHJcblx0XCJvbGl2ZWRyYWJcIjogWzEwNywgMTQyLCAzNV0sXHJcblx0XCJvcmFuZ2VcIjogWzI1NSwgMTY1LCAwXSxcclxuXHRcIm9yYW5nZXJlZFwiOiBbMjU1LCA2OSwgMF0sXHJcblx0XCJvcmNoaWRcIjogWzIxOCwgMTEyLCAyMTRdLFxyXG5cdFwicGFsZWdvbGRlbnJvZFwiOiBbMjM4LCAyMzIsIDE3MF0sXHJcblx0XCJwYWxlZ3JlZW5cIjogWzE1MiwgMjUxLCAxNTJdLFxyXG5cdFwicGFsZXR1cnF1b2lzZVwiOiBbMTc1LCAyMzgsIDIzOF0sXHJcblx0XCJwYWxldmlvbGV0cmVkXCI6IFsyMTksIDExMiwgMTQ3XSxcclxuXHRcInBhcGF5YXdoaXBcIjogWzI1NSwgMjM5LCAyMTNdLFxyXG5cdFwicGVhY2hwdWZmXCI6IFsyNTUsIDIxOCwgMTg1XSxcclxuXHRcInBlcnVcIjogWzIwNSwgMTMzLCA2M10sXHJcblx0XCJwaW5rXCI6IFsyNTUsIDE5MiwgMjAzXSxcclxuXHRcInBsdW1cIjogWzIyMSwgMTYwLCAyMjFdLFxyXG5cdFwicG93ZGVyYmx1ZVwiOiBbMTc2LCAyMjQsIDIzMF0sXHJcblx0XCJwdXJwbGVcIjogWzEyOCwgMCwgMTI4XSxcclxuXHRcInJlYmVjY2FwdXJwbGVcIjogWzEwMiwgNTEsIDE1M10sXHJcblx0XCJyZWRcIjogWzI1NSwgMCwgMF0sXHJcblx0XCJyb3N5YnJvd25cIjogWzE4OCwgMTQzLCAxNDNdLFxyXG5cdFwicm95YWxibHVlXCI6IFs2NSwgMTA1LCAyMjVdLFxyXG5cdFwic2FkZGxlYnJvd25cIjogWzEzOSwgNjksIDE5XSxcclxuXHRcInNhbG1vblwiOiBbMjUwLCAxMjgsIDExNF0sXHJcblx0XCJzYW5keWJyb3duXCI6IFsyNDQsIDE2NCwgOTZdLFxyXG5cdFwic2VhZ3JlZW5cIjogWzQ2LCAxMzksIDg3XSxcclxuXHRcInNlYXNoZWxsXCI6IFsyNTUsIDI0NSwgMjM4XSxcclxuXHRcInNpZW5uYVwiOiBbMTYwLCA4MiwgNDVdLFxyXG5cdFwic2lsdmVyXCI6IFsxOTIsIDE5MiwgMTkyXSxcclxuXHRcInNreWJsdWVcIjogWzEzNSwgMjA2LCAyMzVdLFxyXG5cdFwic2xhdGVibHVlXCI6IFsxMDYsIDkwLCAyMDVdLFxyXG5cdFwic2xhdGVncmF5XCI6IFsxMTIsIDEyOCwgMTQ0XSxcclxuXHRcInNsYXRlZ3JleVwiOiBbMTEyLCAxMjgsIDE0NF0sXHJcblx0XCJzbm93XCI6IFsyNTUsIDI1MCwgMjUwXSxcclxuXHRcInNwcmluZ2dyZWVuXCI6IFswLCAyNTUsIDEyN10sXHJcblx0XCJzdGVlbGJsdWVcIjogWzcwLCAxMzAsIDE4MF0sXHJcblx0XCJ0YW5cIjogWzIxMCwgMTgwLCAxNDBdLFxyXG5cdFwidGVhbFwiOiBbMCwgMTI4LCAxMjhdLFxyXG5cdFwidGhpc3RsZVwiOiBbMjE2LCAxOTEsIDIxNl0sXHJcblx0XCJ0b21hdG9cIjogWzI1NSwgOTksIDcxXSxcclxuXHRcInR1cnF1b2lzZVwiOiBbNjQsIDIyNCwgMjA4XSxcclxuXHRcInZpb2xldFwiOiBbMjM4LCAxMzAsIDIzOF0sXHJcblx0XCJ3aGVhdFwiOiBbMjQ1LCAyMjIsIDE3OV0sXHJcblx0XCJ3aGl0ZVwiOiBbMjU1LCAyNTUsIDI1NV0sXHJcblx0XCJ3aGl0ZXNtb2tlXCI6IFsyNDUsIDI0NSwgMjQ1XSxcclxuXHRcInllbGxvd1wiOiBbMjU1LCAyNTUsIDBdLFxyXG5cdFwieWVsbG93Z3JlZW5cIjogWzE1NCwgMjA1LCA1MF1cclxufTtcclxuIiwiLyogTUlUIGxpY2Vuc2UgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW1peGVkLW9wZXJhdG9ycyAqL1xuY29uc3QgY3NzS2V5d29yZHMgPSByZXF1aXJlKCdjb2xvci1uYW1lJyk7XG5cbi8vIE5PVEU6IGNvbnZlcnNpb25zIHNob3VsZCBvbmx5IHJldHVybiBwcmltaXRpdmUgdmFsdWVzIChpLmUuIGFycmF5cywgb3Jcbi8vICAgICAgIHZhbHVlcyB0aGF0IGdpdmUgY29ycmVjdCBgdHlwZW9mYCByZXN1bHRzKS5cbi8vICAgICAgIGRvIG5vdCB1c2UgYm94IHZhbHVlcyB0eXBlcyAoaS5lLiBOdW1iZXIoKSwgU3RyaW5nKCksIGV0Yy4pXG5cbmNvbnN0IHJldmVyc2VLZXl3b3JkcyA9IHt9O1xuZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY3NzS2V5d29yZHMpKSB7XG5cdHJldmVyc2VLZXl3b3Jkc1tjc3NLZXl3b3Jkc1trZXldXSA9IGtleTtcbn1cblxuY29uc3QgY29udmVydCA9IHtcblx0cmdiOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ3JnYid9LFxuXHRoc2w6IHtjaGFubmVsczogMywgbGFiZWxzOiAnaHNsJ30sXG5cdGhzdjoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdoc3YnfSxcblx0aHdiOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2h3Yid9LFxuXHRjbXlrOiB7Y2hhbm5lbHM6IDQsIGxhYmVsczogJ2NteWsnfSxcblx0eHl6OiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ3h5eid9LFxuXHRsYWI6IHtjaGFubmVsczogMywgbGFiZWxzOiAnbGFiJ30sXG5cdGxjaDoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdsY2gnfSxcblx0aGV4OiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydoZXgnXX0sXG5cdGtleXdvcmQ6IHtjaGFubmVsczogMSwgbGFiZWxzOiBbJ2tleXdvcmQnXX0sXG5cdGFuc2kxNjoge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsnYW5zaTE2J119LFxuXHRhbnNpMjU2OiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydhbnNpMjU2J119LFxuXHRoY2c6IHtjaGFubmVsczogMywgbGFiZWxzOiBbJ2gnLCAnYycsICdnJ119LFxuXHRhcHBsZToge2NoYW5uZWxzOiAzLCBsYWJlbHM6IFsncjE2JywgJ2cxNicsICdiMTYnXX0sXG5cdGdyYXk6IHtjaGFubmVsczogMSwgbGFiZWxzOiBbJ2dyYXknXX1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29udmVydDtcblxuLy8gSGlkZSAuY2hhbm5lbHMgYW5kIC5sYWJlbHMgcHJvcGVydGllc1xuZm9yIChjb25zdCBtb2RlbCBvZiBPYmplY3Qua2V5cyhjb252ZXJ0KSkge1xuXHRpZiAoISgnY2hhbm5lbHMnIGluIGNvbnZlcnRbbW9kZWxdKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignbWlzc2luZyBjaGFubmVscyBwcm9wZXJ0eTogJyArIG1vZGVsKTtcblx0fVxuXG5cdGlmICghKCdsYWJlbHMnIGluIGNvbnZlcnRbbW9kZWxdKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignbWlzc2luZyBjaGFubmVsIGxhYmVscyBwcm9wZXJ0eTogJyArIG1vZGVsKTtcblx0fVxuXG5cdGlmIChjb252ZXJ0W21vZGVsXS5sYWJlbHMubGVuZ3RoICE9PSBjb252ZXJ0W21vZGVsXS5jaGFubmVscykge1xuXHRcdHRocm93IG5ldyBFcnJvcignY2hhbm5lbCBhbmQgbGFiZWwgY291bnRzIG1pc21hdGNoOiAnICsgbW9kZWwpO1xuXHR9XG5cblx0Y29uc3Qge2NoYW5uZWxzLCBsYWJlbHN9ID0gY29udmVydFttb2RlbF07XG5cdGRlbGV0ZSBjb252ZXJ0W21vZGVsXS5jaGFubmVscztcblx0ZGVsZXRlIGNvbnZlcnRbbW9kZWxdLmxhYmVscztcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnZlcnRbbW9kZWxdLCAnY2hhbm5lbHMnLCB7dmFsdWU6IGNoYW5uZWxzfSk7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W21vZGVsXSwgJ2xhYmVscycsIHt2YWx1ZTogbGFiZWxzfSk7XG59XG5cbmNvbnZlcnQucmdiLmhzbCA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgciA9IHJnYlswXSAvIDI1NTtcblx0Y29uc3QgZyA9IHJnYlsxXSAvIDI1NTtcblx0Y29uc3QgYiA9IHJnYlsyXSAvIDI1NTtcblx0Y29uc3QgbWluID0gTWF0aC5taW4ociwgZywgYik7XG5cdGNvbnN0IG1heCA9IE1hdGgubWF4KHIsIGcsIGIpO1xuXHRjb25zdCBkZWx0YSA9IG1heCAtIG1pbjtcblx0bGV0IGg7XG5cdGxldCBzO1xuXG5cdGlmIChtYXggPT09IG1pbikge1xuXHRcdGggPSAwO1xuXHR9IGVsc2UgaWYgKHIgPT09IG1heCkge1xuXHRcdGggPSAoZyAtIGIpIC8gZGVsdGE7XG5cdH0gZWxzZSBpZiAoZyA9PT0gbWF4KSB7XG5cdFx0aCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XG5cdH0gZWxzZSBpZiAoYiA9PT0gbWF4KSB7XG5cdFx0aCA9IDQgKyAociAtIGcpIC8gZGVsdGE7XG5cdH1cblxuXHRoID0gTWF0aC5taW4oaCAqIDYwLCAzNjApO1xuXG5cdGlmIChoIDwgMCkge1xuXHRcdGggKz0gMzYwO1xuXHR9XG5cblx0Y29uc3QgbCA9IChtaW4gKyBtYXgpIC8gMjtcblxuXHRpZiAobWF4ID09PSBtaW4pIHtcblx0XHRzID0gMDtcblx0fSBlbHNlIGlmIChsIDw9IDAuNSkge1xuXHRcdHMgPSBkZWx0YSAvIChtYXggKyBtaW4pO1xuXHR9IGVsc2Uge1xuXHRcdHMgPSBkZWx0YSAvICgyIC0gbWF4IC0gbWluKTtcblx0fVxuXG5cdHJldHVybiBbaCwgcyAqIDEwMCwgbCAqIDEwMF07XG59O1xuXG5jb252ZXJ0LnJnYi5oc3YgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGxldCByZGlmO1xuXHRsZXQgZ2RpZjtcblx0bGV0IGJkaWY7XG5cdGxldCBoO1xuXHRsZXQgcztcblxuXHRjb25zdCByID0gcmdiWzBdIC8gMjU1O1xuXHRjb25zdCBnID0gcmdiWzFdIC8gMjU1O1xuXHRjb25zdCBiID0gcmdiWzJdIC8gMjU1O1xuXHRjb25zdCB2ID0gTWF0aC5tYXgociwgZywgYik7XG5cdGNvbnN0IGRpZmYgPSB2IC0gTWF0aC5taW4ociwgZywgYik7XG5cdGNvbnN0IGRpZmZjID0gZnVuY3Rpb24gKGMpIHtcblx0XHRyZXR1cm4gKHYgLSBjKSAvIDYgLyBkaWZmICsgMSAvIDI7XG5cdH07XG5cblx0aWYgKGRpZmYgPT09IDApIHtcblx0XHRoID0gMDtcblx0XHRzID0gMDtcblx0fSBlbHNlIHtcblx0XHRzID0gZGlmZiAvIHY7XG5cdFx0cmRpZiA9IGRpZmZjKHIpO1xuXHRcdGdkaWYgPSBkaWZmYyhnKTtcblx0XHRiZGlmID0gZGlmZmMoYik7XG5cblx0XHRpZiAociA9PT0gdikge1xuXHRcdFx0aCA9IGJkaWYgLSBnZGlmO1xuXHRcdH0gZWxzZSBpZiAoZyA9PT0gdikge1xuXHRcdFx0aCA9ICgxIC8gMykgKyByZGlmIC0gYmRpZjtcblx0XHR9IGVsc2UgaWYgKGIgPT09IHYpIHtcblx0XHRcdGggPSAoMiAvIDMpICsgZ2RpZiAtIHJkaWY7XG5cdFx0fVxuXG5cdFx0aWYgKGggPCAwKSB7XG5cdFx0XHRoICs9IDE7XG5cdFx0fSBlbHNlIGlmIChoID4gMSkge1xuXHRcdFx0aCAtPSAxO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBbXG5cdFx0aCAqIDM2MCxcblx0XHRzICogMTAwLFxuXHRcdHYgKiAxMDBcblx0XTtcbn07XG5cbmNvbnZlcnQucmdiLmh3YiA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgciA9IHJnYlswXTtcblx0Y29uc3QgZyA9IHJnYlsxXTtcblx0bGV0IGIgPSByZ2JbMl07XG5cdGNvbnN0IGggPSBjb252ZXJ0LnJnYi5oc2wocmdiKVswXTtcblx0Y29uc3QgdyA9IDEgLyAyNTUgKiBNYXRoLm1pbihyLCBNYXRoLm1pbihnLCBiKSk7XG5cblx0YiA9IDEgLSAxIC8gMjU1ICogTWF0aC5tYXgociwgTWF0aC5tYXgoZywgYikpO1xuXG5cdHJldHVybiBbaCwgdyAqIDEwMCwgYiAqIDEwMF07XG59O1xuXG5jb252ZXJ0LnJnYi5jbXlrID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCByID0gcmdiWzBdIC8gMjU1O1xuXHRjb25zdCBnID0gcmdiWzFdIC8gMjU1O1xuXHRjb25zdCBiID0gcmdiWzJdIC8gMjU1O1xuXG5cdGNvbnN0IGsgPSBNYXRoLm1pbigxIC0gciwgMSAtIGcsIDEgLSBiKTtcblx0Y29uc3QgYyA9ICgxIC0gciAtIGspIC8gKDEgLSBrKSB8fCAwO1xuXHRjb25zdCBtID0gKDEgLSBnIC0gaykgLyAoMSAtIGspIHx8IDA7XG5cdGNvbnN0IHkgPSAoMSAtIGIgLSBrKSAvICgxIC0gaykgfHwgMDtcblxuXHRyZXR1cm4gW2MgKiAxMDAsIG0gKiAxMDAsIHkgKiAxMDAsIGsgKiAxMDBdO1xufTtcblxuZnVuY3Rpb24gY29tcGFyYXRpdmVEaXN0YW5jZSh4LCB5KSB7XG5cdC8qXG5cdFx0U2VlIGh0dHBzOi8vZW4ubS53aWtpcGVkaWEub3JnL3dpa2kvRXVjbGlkZWFuX2Rpc3RhbmNlI1NxdWFyZWRfRXVjbGlkZWFuX2Rpc3RhbmNlXG5cdCovXG5cdHJldHVybiAoXG5cdFx0KCh4WzBdIC0geVswXSkgKiogMikgK1xuXHRcdCgoeFsxXSAtIHlbMV0pICoqIDIpICtcblx0XHQoKHhbMl0gLSB5WzJdKSAqKiAyKVxuXHQpO1xufVxuXG5jb252ZXJ0LnJnYi5rZXl3b3JkID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCByZXZlcnNlZCA9IHJldmVyc2VLZXl3b3Jkc1tyZ2JdO1xuXHRpZiAocmV2ZXJzZWQpIHtcblx0XHRyZXR1cm4gcmV2ZXJzZWQ7XG5cdH1cblxuXHRsZXQgY3VycmVudENsb3Nlc3REaXN0YW5jZSA9IEluZmluaXR5O1xuXHRsZXQgY3VycmVudENsb3Nlc3RLZXl3b3JkO1xuXG5cdGZvciAoY29uc3Qga2V5d29yZCBvZiBPYmplY3Qua2V5cyhjc3NLZXl3b3JkcykpIHtcblx0XHRjb25zdCB2YWx1ZSA9IGNzc0tleXdvcmRzW2tleXdvcmRdO1xuXG5cdFx0Ly8gQ29tcHV0ZSBjb21wYXJhdGl2ZSBkaXN0YW5jZVxuXHRcdGNvbnN0IGRpc3RhbmNlID0gY29tcGFyYXRpdmVEaXN0YW5jZShyZ2IsIHZhbHVlKTtcblxuXHRcdC8vIENoZWNrIGlmIGl0cyBsZXNzLCBpZiBzbyBzZXQgYXMgY2xvc2VzdFxuXHRcdGlmIChkaXN0YW5jZSA8IGN1cnJlbnRDbG9zZXN0RGlzdGFuY2UpIHtcblx0XHRcdGN1cnJlbnRDbG9zZXN0RGlzdGFuY2UgPSBkaXN0YW5jZTtcblx0XHRcdGN1cnJlbnRDbG9zZXN0S2V5d29yZCA9IGtleXdvcmQ7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGN1cnJlbnRDbG9zZXN0S2V5d29yZDtcbn07XG5cbmNvbnZlcnQua2V5d29yZC5yZ2IgPSBmdW5jdGlvbiAoa2V5d29yZCkge1xuXHRyZXR1cm4gY3NzS2V5d29yZHNba2V5d29yZF07XG59O1xuXG5jb252ZXJ0LnJnYi54eXogPSBmdW5jdGlvbiAocmdiKSB7XG5cdGxldCByID0gcmdiWzBdIC8gMjU1O1xuXHRsZXQgZyA9IHJnYlsxXSAvIDI1NTtcblx0bGV0IGIgPSByZ2JbMl0gLyAyNTU7XG5cblx0Ly8gQXNzdW1lIHNSR0Jcblx0ciA9IHIgPiAwLjA0MDQ1ID8gKCgociArIDAuMDU1KSAvIDEuMDU1KSAqKiAyLjQpIDogKHIgLyAxMi45Mik7XG5cdGcgPSBnID4gMC4wNDA0NSA/ICgoKGcgKyAwLjA1NSkgLyAxLjA1NSkgKiogMi40KSA6IChnIC8gMTIuOTIpO1xuXHRiID0gYiA+IDAuMDQwNDUgPyAoKChiICsgMC4wNTUpIC8gMS4wNTUpICoqIDIuNCkgOiAoYiAvIDEyLjkyKTtcblxuXHRjb25zdCB4ID0gKHIgKiAwLjQxMjQpICsgKGcgKiAwLjM1NzYpICsgKGIgKiAwLjE4MDUpO1xuXHRjb25zdCB5ID0gKHIgKiAwLjIxMjYpICsgKGcgKiAwLjcxNTIpICsgKGIgKiAwLjA3MjIpO1xuXHRjb25zdCB6ID0gKHIgKiAwLjAxOTMpICsgKGcgKiAwLjExOTIpICsgKGIgKiAwLjk1MDUpO1xuXG5cdHJldHVybiBbeCAqIDEwMCwgeSAqIDEwMCwgeiAqIDEwMF07XG59O1xuXG5jb252ZXJ0LnJnYi5sYWIgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHh5eiA9IGNvbnZlcnQucmdiLnh5eihyZ2IpO1xuXHRsZXQgeCA9IHh5elswXTtcblx0bGV0IHkgPSB4eXpbMV07XG5cdGxldCB6ID0geHl6WzJdO1xuXG5cdHggLz0gOTUuMDQ3O1xuXHR5IC89IDEwMDtcblx0eiAvPSAxMDguODgzO1xuXG5cdHggPSB4ID4gMC4wMDg4NTYgPyAoeCAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHgpICsgKDE2IC8gMTE2KTtcblx0eSA9IHkgPiAwLjAwODg1NiA/ICh5ICoqICgxIC8gMykpIDogKDcuNzg3ICogeSkgKyAoMTYgLyAxMTYpO1xuXHR6ID0geiA+IDAuMDA4ODU2ID8gKHogKiogKDEgLyAzKSkgOiAoNy43ODcgKiB6KSArICgxNiAvIDExNik7XG5cblx0Y29uc3QgbCA9ICgxMTYgKiB5KSAtIDE2O1xuXHRjb25zdCBhID0gNTAwICogKHggLSB5KTtcblx0Y29uc3QgYiA9IDIwMCAqICh5IC0geik7XG5cblx0cmV0dXJuIFtsLCBhLCBiXTtcbn07XG5cbmNvbnZlcnQuaHNsLnJnYiA9IGZ1bmN0aW9uIChoc2wpIHtcblx0Y29uc3QgaCA9IGhzbFswXSAvIDM2MDtcblx0Y29uc3QgcyA9IGhzbFsxXSAvIDEwMDtcblx0Y29uc3QgbCA9IGhzbFsyXSAvIDEwMDtcblx0bGV0IHQyO1xuXHRsZXQgdDM7XG5cdGxldCB2YWw7XG5cblx0aWYgKHMgPT09IDApIHtcblx0XHR2YWwgPSBsICogMjU1O1xuXHRcdHJldHVybiBbdmFsLCB2YWwsIHZhbF07XG5cdH1cblxuXHRpZiAobCA8IDAuNSkge1xuXHRcdHQyID0gbCAqICgxICsgcyk7XG5cdH0gZWxzZSB7XG5cdFx0dDIgPSBsICsgcyAtIGwgKiBzO1xuXHR9XG5cblx0Y29uc3QgdDEgPSAyICogbCAtIHQyO1xuXG5cdGNvbnN0IHJnYiA9IFswLCAwLCAwXTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcblx0XHR0MyA9IGggKyAxIC8gMyAqIC0oaSAtIDEpO1xuXHRcdGlmICh0MyA8IDApIHtcblx0XHRcdHQzKys7XG5cdFx0fVxuXG5cdFx0aWYgKHQzID4gMSkge1xuXHRcdFx0dDMtLTtcblx0XHR9XG5cblx0XHRpZiAoNiAqIHQzIDwgMSkge1xuXHRcdFx0dmFsID0gdDEgKyAodDIgLSB0MSkgKiA2ICogdDM7XG5cdFx0fSBlbHNlIGlmICgyICogdDMgPCAxKSB7XG5cdFx0XHR2YWwgPSB0Mjtcblx0XHR9IGVsc2UgaWYgKDMgKiB0MyA8IDIpIHtcblx0XHRcdHZhbCA9IHQxICsgKHQyIC0gdDEpICogKDIgLyAzIC0gdDMpICogNjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFsID0gdDE7XG5cdFx0fVxuXG5cdFx0cmdiW2ldID0gdmFsICogMjU1O1xuXHR9XG5cblx0cmV0dXJuIHJnYjtcbn07XG5cbmNvbnZlcnQuaHNsLmhzdiA9IGZ1bmN0aW9uIChoc2wpIHtcblx0Y29uc3QgaCA9IGhzbFswXTtcblx0bGV0IHMgPSBoc2xbMV0gLyAxMDA7XG5cdGxldCBsID0gaHNsWzJdIC8gMTAwO1xuXHRsZXQgc21pbiA9IHM7XG5cdGNvbnN0IGxtaW4gPSBNYXRoLm1heChsLCAwLjAxKTtcblxuXHRsICo9IDI7XG5cdHMgKj0gKGwgPD0gMSkgPyBsIDogMiAtIGw7XG5cdHNtaW4gKj0gbG1pbiA8PSAxID8gbG1pbiA6IDIgLSBsbWluO1xuXHRjb25zdCB2ID0gKGwgKyBzKSAvIDI7XG5cdGNvbnN0IHN2ID0gbCA9PT0gMCA/ICgyICogc21pbikgLyAobG1pbiArIHNtaW4pIDogKDIgKiBzKSAvIChsICsgcyk7XG5cblx0cmV0dXJuIFtoLCBzdiAqIDEwMCwgdiAqIDEwMF07XG59O1xuXG5jb252ZXJ0Lmhzdi5yZ2IgPSBmdW5jdGlvbiAoaHN2KSB7XG5cdGNvbnN0IGggPSBoc3ZbMF0gLyA2MDtcblx0Y29uc3QgcyA9IGhzdlsxXSAvIDEwMDtcblx0bGV0IHYgPSBoc3ZbMl0gLyAxMDA7XG5cdGNvbnN0IGhpID0gTWF0aC5mbG9vcihoKSAlIDY7XG5cblx0Y29uc3QgZiA9IGggLSBNYXRoLmZsb29yKGgpO1xuXHRjb25zdCBwID0gMjU1ICogdiAqICgxIC0gcyk7XG5cdGNvbnN0IHEgPSAyNTUgKiB2ICogKDEgLSAocyAqIGYpKTtcblx0Y29uc3QgdCA9IDI1NSAqIHYgKiAoMSAtIChzICogKDEgLSBmKSkpO1xuXHR2ICo9IDI1NTtcblxuXHRzd2l0Y2ggKGhpKSB7XG5cdFx0Y2FzZSAwOlxuXHRcdFx0cmV0dXJuIFt2LCB0LCBwXTtcblx0XHRjYXNlIDE6XG5cdFx0XHRyZXR1cm4gW3EsIHYsIHBdO1xuXHRcdGNhc2UgMjpcblx0XHRcdHJldHVybiBbcCwgdiwgdF07XG5cdFx0Y2FzZSAzOlxuXHRcdFx0cmV0dXJuIFtwLCBxLCB2XTtcblx0XHRjYXNlIDQ6XG5cdFx0XHRyZXR1cm4gW3QsIHAsIHZdO1xuXHRcdGNhc2UgNTpcblx0XHRcdHJldHVybiBbdiwgcCwgcV07XG5cdH1cbn07XG5cbmNvbnZlcnQuaHN2LmhzbCA9IGZ1bmN0aW9uIChoc3YpIHtcblx0Y29uc3QgaCA9IGhzdlswXTtcblx0Y29uc3QgcyA9IGhzdlsxXSAvIDEwMDtcblx0Y29uc3QgdiA9IGhzdlsyXSAvIDEwMDtcblx0Y29uc3Qgdm1pbiA9IE1hdGgubWF4KHYsIDAuMDEpO1xuXHRsZXQgc2w7XG5cdGxldCBsO1xuXG5cdGwgPSAoMiAtIHMpICogdjtcblx0Y29uc3QgbG1pbiA9ICgyIC0gcykgKiB2bWluO1xuXHRzbCA9IHMgKiB2bWluO1xuXHRzbCAvPSAobG1pbiA8PSAxKSA/IGxtaW4gOiAyIC0gbG1pbjtcblx0c2wgPSBzbCB8fCAwO1xuXHRsIC89IDI7XG5cblx0cmV0dXJuIFtoLCBzbCAqIDEwMCwgbCAqIDEwMF07XG59O1xuXG4vLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MtY29sb3IvI2h3Yi10by1yZ2JcbmNvbnZlcnQuaHdiLnJnYiA9IGZ1bmN0aW9uIChod2IpIHtcblx0Y29uc3QgaCA9IGh3YlswXSAvIDM2MDtcblx0bGV0IHdoID0gaHdiWzFdIC8gMTAwO1xuXHRsZXQgYmwgPSBod2JbMl0gLyAxMDA7XG5cdGNvbnN0IHJhdGlvID0gd2ggKyBibDtcblx0bGV0IGY7XG5cblx0Ly8gV2ggKyBibCBjYW50IGJlID4gMVxuXHRpZiAocmF0aW8gPiAxKSB7XG5cdFx0d2ggLz0gcmF0aW87XG5cdFx0YmwgLz0gcmF0aW87XG5cdH1cblxuXHRjb25zdCBpID0gTWF0aC5mbG9vcig2ICogaCk7XG5cdGNvbnN0IHYgPSAxIC0gYmw7XG5cdGYgPSA2ICogaCAtIGk7XG5cblx0aWYgKChpICYgMHgwMSkgIT09IDApIHtcblx0XHRmID0gMSAtIGY7XG5cdH1cblxuXHRjb25zdCBuID0gd2ggKyBmICogKHYgLSB3aCk7IC8vIExpbmVhciBpbnRlcnBvbGF0aW9uXG5cblx0bGV0IHI7XG5cdGxldCBnO1xuXHRsZXQgYjtcblx0LyogZXNsaW50LWRpc2FibGUgbWF4LXN0YXRlbWVudHMtcGVyLWxpbmUsbm8tbXVsdGktc3BhY2VzICovXG5cdHN3aXRjaCAoaSkge1xuXHRcdGRlZmF1bHQ6XG5cdFx0Y2FzZSA2OlxuXHRcdGNhc2UgMDogciA9IHY7ICBnID0gbjsgIGIgPSB3aDsgYnJlYWs7XG5cdFx0Y2FzZSAxOiByID0gbjsgIGcgPSB2OyAgYiA9IHdoOyBicmVhaztcblx0XHRjYXNlIDI6IHIgPSB3aDsgZyA9IHY7ICBiID0gbjsgYnJlYWs7XG5cdFx0Y2FzZSAzOiByID0gd2g7IGcgPSBuOyAgYiA9IHY7IGJyZWFrO1xuXHRcdGNhc2UgNDogciA9IG47ICBnID0gd2g7IGIgPSB2OyBicmVhaztcblx0XHRjYXNlIDU6IHIgPSB2OyAgZyA9IHdoOyBiID0gbjsgYnJlYWs7XG5cdH1cblx0LyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cy1wZXItbGluZSxuby1tdWx0aS1zcGFjZXMgKi9cblxuXHRyZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTVdO1xufTtcblxuY29udmVydC5jbXlrLnJnYiA9IGZ1bmN0aW9uIChjbXlrKSB7XG5cdGNvbnN0IGMgPSBjbXlrWzBdIC8gMTAwO1xuXHRjb25zdCBtID0gY215a1sxXSAvIDEwMDtcblx0Y29uc3QgeSA9IGNteWtbMl0gLyAxMDA7XG5cdGNvbnN0IGsgPSBjbXlrWzNdIC8gMTAwO1xuXG5cdGNvbnN0IHIgPSAxIC0gTWF0aC5taW4oMSwgYyAqICgxIC0gaykgKyBrKTtcblx0Y29uc3QgZyA9IDEgLSBNYXRoLm1pbigxLCBtICogKDEgLSBrKSArIGspO1xuXHRjb25zdCBiID0gMSAtIE1hdGgubWluKDEsIHkgKiAoMSAtIGspICsgayk7XG5cblx0cmV0dXJuIFtyICogMjU1LCBnICogMjU1LCBiICogMjU1XTtcbn07XG5cbmNvbnZlcnQueHl6LnJnYiA9IGZ1bmN0aW9uICh4eXopIHtcblx0Y29uc3QgeCA9IHh5elswXSAvIDEwMDtcblx0Y29uc3QgeSA9IHh5elsxXSAvIDEwMDtcblx0Y29uc3QgeiA9IHh5elsyXSAvIDEwMDtcblx0bGV0IHI7XG5cdGxldCBnO1xuXHRsZXQgYjtcblxuXHRyID0gKHggKiAzLjI0MDYpICsgKHkgKiAtMS41MzcyKSArICh6ICogLTAuNDk4Nik7XG5cdGcgPSAoeCAqIC0wLjk2ODkpICsgKHkgKiAxLjg3NTgpICsgKHogKiAwLjA0MTUpO1xuXHRiID0gKHggKiAwLjA1NTcpICsgKHkgKiAtMC4yMDQwKSArICh6ICogMS4wNTcwKTtcblxuXHQvLyBBc3N1bWUgc1JHQlxuXHRyID0gciA+IDAuMDAzMTMwOFxuXHRcdD8gKCgxLjA1NSAqIChyICoqICgxLjAgLyAyLjQpKSkgLSAwLjA1NSlcblx0XHQ6IHIgKiAxMi45MjtcblxuXHRnID0gZyA+IDAuMDAzMTMwOFxuXHRcdD8gKCgxLjA1NSAqIChnICoqICgxLjAgLyAyLjQpKSkgLSAwLjA1NSlcblx0XHQ6IGcgKiAxMi45MjtcblxuXHRiID0gYiA+IDAuMDAzMTMwOFxuXHRcdD8gKCgxLjA1NSAqIChiICoqICgxLjAgLyAyLjQpKSkgLSAwLjA1NSlcblx0XHQ6IGIgKiAxMi45MjtcblxuXHRyID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgciksIDEpO1xuXHRnID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZyksIDEpO1xuXHRiID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgYiksIDEpO1xuXG5cdHJldHVybiBbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV07XG59O1xuXG5jb252ZXJ0Lnh5ei5sYWIgPSBmdW5jdGlvbiAoeHl6KSB7XG5cdGxldCB4ID0geHl6WzBdO1xuXHRsZXQgeSA9IHh5elsxXTtcblx0bGV0IHogPSB4eXpbMl07XG5cblx0eCAvPSA5NS4wNDc7XG5cdHkgLz0gMTAwO1xuXHR6IC89IDEwOC44ODM7XG5cblx0eCA9IHggPiAwLjAwODg1NiA/ICh4ICoqICgxIC8gMykpIDogKDcuNzg3ICogeCkgKyAoMTYgLyAxMTYpO1xuXHR5ID0geSA+IDAuMDA4ODU2ID8gKHkgKiogKDEgLyAzKSkgOiAoNy43ODcgKiB5KSArICgxNiAvIDExNik7XG5cdHogPSB6ID4gMC4wMDg4NTYgPyAoeiAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHopICsgKDE2IC8gMTE2KTtcblxuXHRjb25zdCBsID0gKDExNiAqIHkpIC0gMTY7XG5cdGNvbnN0IGEgPSA1MDAgKiAoeCAtIHkpO1xuXHRjb25zdCBiID0gMjAwICogKHkgLSB6KTtcblxuXHRyZXR1cm4gW2wsIGEsIGJdO1xufTtcblxuY29udmVydC5sYWIueHl6ID0gZnVuY3Rpb24gKGxhYikge1xuXHRjb25zdCBsID0gbGFiWzBdO1xuXHRjb25zdCBhID0gbGFiWzFdO1xuXHRjb25zdCBiID0gbGFiWzJdO1xuXHRsZXQgeDtcblx0bGV0IHk7XG5cdGxldCB6O1xuXG5cdHkgPSAobCArIDE2KSAvIDExNjtcblx0eCA9IGEgLyA1MDAgKyB5O1xuXHR6ID0geSAtIGIgLyAyMDA7XG5cblx0Y29uc3QgeTIgPSB5ICoqIDM7XG5cdGNvbnN0IHgyID0geCAqKiAzO1xuXHRjb25zdCB6MiA9IHogKiogMztcblx0eSA9IHkyID4gMC4wMDg4NTYgPyB5MiA6ICh5IC0gMTYgLyAxMTYpIC8gNy43ODc7XG5cdHggPSB4MiA+IDAuMDA4ODU2ID8geDIgOiAoeCAtIDE2IC8gMTE2KSAvIDcuNzg3O1xuXHR6ID0gejIgPiAwLjAwODg1NiA/IHoyIDogKHogLSAxNiAvIDExNikgLyA3Ljc4NztcblxuXHR4ICo9IDk1LjA0Nztcblx0eSAqPSAxMDA7XG5cdHogKj0gMTA4Ljg4MztcblxuXHRyZXR1cm4gW3gsIHksIHpdO1xufTtcblxuY29udmVydC5sYWIubGNoID0gZnVuY3Rpb24gKGxhYikge1xuXHRjb25zdCBsID0gbGFiWzBdO1xuXHRjb25zdCBhID0gbGFiWzFdO1xuXHRjb25zdCBiID0gbGFiWzJdO1xuXHRsZXQgaDtcblxuXHRjb25zdCBociA9IE1hdGguYXRhbjIoYiwgYSk7XG5cdGggPSBociAqIDM2MCAvIDIgLyBNYXRoLlBJO1xuXG5cdGlmIChoIDwgMCkge1xuXHRcdGggKz0gMzYwO1xuXHR9XG5cblx0Y29uc3QgYyA9IE1hdGguc3FydChhICogYSArIGIgKiBiKTtcblxuXHRyZXR1cm4gW2wsIGMsIGhdO1xufTtcblxuY29udmVydC5sY2gubGFiID0gZnVuY3Rpb24gKGxjaCkge1xuXHRjb25zdCBsID0gbGNoWzBdO1xuXHRjb25zdCBjID0gbGNoWzFdO1xuXHRjb25zdCBoID0gbGNoWzJdO1xuXG5cdGNvbnN0IGhyID0gaCAvIDM2MCAqIDIgKiBNYXRoLlBJO1xuXHRjb25zdCBhID0gYyAqIE1hdGguY29zKGhyKTtcblx0Y29uc3QgYiA9IGMgKiBNYXRoLnNpbihocik7XG5cblx0cmV0dXJuIFtsLCBhLCBiXTtcbn07XG5cbmNvbnZlcnQucmdiLmFuc2kxNiA9IGZ1bmN0aW9uIChhcmdzLCBzYXR1cmF0aW9uID0gbnVsbCkge1xuXHRjb25zdCBbciwgZywgYl0gPSBhcmdzO1xuXHRsZXQgdmFsdWUgPSBzYXR1cmF0aW9uID09PSBudWxsID8gY29udmVydC5yZ2IuaHN2KGFyZ3MpWzJdIDogc2F0dXJhdGlvbjsgLy8gSHN2IC0+IGFuc2kxNiBvcHRpbWl6YXRpb25cblxuXHR2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgLyA1MCk7XG5cblx0aWYgKHZhbHVlID09PSAwKSB7XG5cdFx0cmV0dXJuIDMwO1xuXHR9XG5cblx0bGV0IGFuc2kgPSAzMFxuXHRcdCsgKChNYXRoLnJvdW5kKGIgLyAyNTUpIDw8IDIpXG5cdFx0fCAoTWF0aC5yb3VuZChnIC8gMjU1KSA8PCAxKVxuXHRcdHwgTWF0aC5yb3VuZChyIC8gMjU1KSk7XG5cblx0aWYgKHZhbHVlID09PSAyKSB7XG5cdFx0YW5zaSArPSA2MDtcblx0fVxuXG5cdHJldHVybiBhbnNpO1xufTtcblxuY29udmVydC5oc3YuYW5zaTE2ID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0Ly8gT3B0aW1pemF0aW9uIGhlcmU7IHdlIGFscmVhZHkga25vdyB0aGUgdmFsdWUgYW5kIGRvbid0IG5lZWQgdG8gZ2V0XG5cdC8vIGl0IGNvbnZlcnRlZCBmb3IgdXMuXG5cdHJldHVybiBjb252ZXJ0LnJnYi5hbnNpMTYoY29udmVydC5oc3YucmdiKGFyZ3MpLCBhcmdzWzJdKTtcbn07XG5cbmNvbnZlcnQucmdiLmFuc2kyNTYgPSBmdW5jdGlvbiAoYXJncykge1xuXHRjb25zdCByID0gYXJnc1swXTtcblx0Y29uc3QgZyA9IGFyZ3NbMV07XG5cdGNvbnN0IGIgPSBhcmdzWzJdO1xuXG5cdC8vIFdlIHVzZSB0aGUgZXh0ZW5kZWQgZ3JleXNjYWxlIHBhbGV0dGUgaGVyZSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mXG5cdC8vIGJsYWNrIGFuZCB3aGl0ZS4gbm9ybWFsIHBhbGV0dGUgb25seSBoYXMgNCBncmV5c2NhbGUgc2hhZGVzLlxuXHRpZiAociA9PT0gZyAmJiBnID09PSBiKSB7XG5cdFx0aWYgKHIgPCA4KSB7XG5cdFx0XHRyZXR1cm4gMTY7XG5cdFx0fVxuXG5cdFx0aWYgKHIgPiAyNDgpIHtcblx0XHRcdHJldHVybiAyMzE7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIE1hdGgucm91bmQoKChyIC0gOCkgLyAyNDcpICogMjQpICsgMjMyO1xuXHR9XG5cblx0Y29uc3QgYW5zaSA9IDE2XG5cdFx0KyAoMzYgKiBNYXRoLnJvdW5kKHIgLyAyNTUgKiA1KSlcblx0XHQrICg2ICogTWF0aC5yb3VuZChnIC8gMjU1ICogNSkpXG5cdFx0KyBNYXRoLnJvdW5kKGIgLyAyNTUgKiA1KTtcblxuXHRyZXR1cm4gYW5zaTtcbn07XG5cbmNvbnZlcnQuYW5zaTE2LnJnYiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdGxldCBjb2xvciA9IGFyZ3MgJSAxMDtcblxuXHQvLyBIYW5kbGUgZ3JleXNjYWxlXG5cdGlmIChjb2xvciA9PT0gMCB8fCBjb2xvciA9PT0gNykge1xuXHRcdGlmIChhcmdzID4gNTApIHtcblx0XHRcdGNvbG9yICs9IDMuNTtcblx0XHR9XG5cblx0XHRjb2xvciA9IGNvbG9yIC8gMTAuNSAqIDI1NTtcblxuXHRcdHJldHVybiBbY29sb3IsIGNvbG9yLCBjb2xvcl07XG5cdH1cblxuXHRjb25zdCBtdWx0ID0gKH5+KGFyZ3MgPiA1MCkgKyAxKSAqIDAuNTtcblx0Y29uc3QgciA9ICgoY29sb3IgJiAxKSAqIG11bHQpICogMjU1O1xuXHRjb25zdCBnID0gKCgoY29sb3IgPj4gMSkgJiAxKSAqIG11bHQpICogMjU1O1xuXHRjb25zdCBiID0gKCgoY29sb3IgPj4gMikgJiAxKSAqIG11bHQpICogMjU1O1xuXG5cdHJldHVybiBbciwgZywgYl07XG59O1xuXG5jb252ZXJ0LmFuc2kyNTYucmdiID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0Ly8gSGFuZGxlIGdyZXlzY2FsZVxuXHRpZiAoYXJncyA+PSAyMzIpIHtcblx0XHRjb25zdCBjID0gKGFyZ3MgLSAyMzIpICogMTAgKyA4O1xuXHRcdHJldHVybiBbYywgYywgY107XG5cdH1cblxuXHRhcmdzIC09IDE2O1xuXG5cdGxldCByZW07XG5cdGNvbnN0IHIgPSBNYXRoLmZsb29yKGFyZ3MgLyAzNikgLyA1ICogMjU1O1xuXHRjb25zdCBnID0gTWF0aC5mbG9vcigocmVtID0gYXJncyAlIDM2KSAvIDYpIC8gNSAqIDI1NTtcblx0Y29uc3QgYiA9IChyZW0gJSA2KSAvIDUgKiAyNTU7XG5cblx0cmV0dXJuIFtyLCBnLCBiXTtcbn07XG5cbmNvbnZlcnQucmdiLmhleCA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdGNvbnN0IGludGVnZXIgPSAoKE1hdGgucm91bmQoYXJnc1swXSkgJiAweEZGKSA8PCAxNilcblx0XHQrICgoTWF0aC5yb3VuZChhcmdzWzFdKSAmIDB4RkYpIDw8IDgpXG5cdFx0KyAoTWF0aC5yb3VuZChhcmdzWzJdKSAmIDB4RkYpO1xuXG5cdGNvbnN0IHN0cmluZyA9IGludGVnZXIudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cdHJldHVybiAnMDAwMDAwJy5zdWJzdHJpbmcoc3RyaW5nLmxlbmd0aCkgKyBzdHJpbmc7XG59O1xuXG5jb252ZXJ0LmhleC5yZ2IgPSBmdW5jdGlvbiAoYXJncykge1xuXHRjb25zdCBtYXRjaCA9IGFyZ3MudG9TdHJpbmcoMTYpLm1hdGNoKC9bYS1mMC05XXs2fXxbYS1mMC05XXszfS9pKTtcblx0aWYgKCFtYXRjaCkge1xuXHRcdHJldHVybiBbMCwgMCwgMF07XG5cdH1cblxuXHRsZXQgY29sb3JTdHJpbmcgPSBtYXRjaFswXTtcblxuXHRpZiAobWF0Y2hbMF0ubGVuZ3RoID09PSAzKSB7XG5cdFx0Y29sb3JTdHJpbmcgPSBjb2xvclN0cmluZy5zcGxpdCgnJykubWFwKGNoYXIgPT4ge1xuXHRcdFx0cmV0dXJuIGNoYXIgKyBjaGFyO1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0Y29uc3QgaW50ZWdlciA9IHBhcnNlSW50KGNvbG9yU3RyaW5nLCAxNik7XG5cdGNvbnN0IHIgPSAoaW50ZWdlciA+PiAxNikgJiAweEZGO1xuXHRjb25zdCBnID0gKGludGVnZXIgPj4gOCkgJiAweEZGO1xuXHRjb25zdCBiID0gaW50ZWdlciAmIDB4RkY7XG5cblx0cmV0dXJuIFtyLCBnLCBiXTtcbn07XG5cbmNvbnZlcnQucmdiLmhjZyA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgciA9IHJnYlswXSAvIDI1NTtcblx0Y29uc3QgZyA9IHJnYlsxXSAvIDI1NTtcblx0Y29uc3QgYiA9IHJnYlsyXSAvIDI1NTtcblx0Y29uc3QgbWF4ID0gTWF0aC5tYXgoTWF0aC5tYXgociwgZyksIGIpO1xuXHRjb25zdCBtaW4gPSBNYXRoLm1pbihNYXRoLm1pbihyLCBnKSwgYik7XG5cdGNvbnN0IGNocm9tYSA9IChtYXggLSBtaW4pO1xuXHRsZXQgZ3JheXNjYWxlO1xuXHRsZXQgaHVlO1xuXG5cdGlmIChjaHJvbWEgPCAxKSB7XG5cdFx0Z3JheXNjYWxlID0gbWluIC8gKDEgLSBjaHJvbWEpO1xuXHR9IGVsc2Uge1xuXHRcdGdyYXlzY2FsZSA9IDA7XG5cdH1cblxuXHRpZiAoY2hyb21hIDw9IDApIHtcblx0XHRodWUgPSAwO1xuXHR9IGVsc2Vcblx0aWYgKG1heCA9PT0gcikge1xuXHRcdGh1ZSA9ICgoZyAtIGIpIC8gY2hyb21hKSAlIDY7XG5cdH0gZWxzZVxuXHRpZiAobWF4ID09PSBnKSB7XG5cdFx0aHVlID0gMiArIChiIC0gcikgLyBjaHJvbWE7XG5cdH0gZWxzZSB7XG5cdFx0aHVlID0gNCArIChyIC0gZykgLyBjaHJvbWE7XG5cdH1cblxuXHRodWUgLz0gNjtcblx0aHVlICU9IDE7XG5cblx0cmV0dXJuIFtodWUgKiAzNjAsIGNocm9tYSAqIDEwMCwgZ3JheXNjYWxlICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaHNsLmhjZyA9IGZ1bmN0aW9uIChoc2wpIHtcblx0Y29uc3QgcyA9IGhzbFsxXSAvIDEwMDtcblx0Y29uc3QgbCA9IGhzbFsyXSAvIDEwMDtcblxuXHRjb25zdCBjID0gbCA8IDAuNSA/ICgyLjAgKiBzICogbCkgOiAoMi4wICogcyAqICgxLjAgLSBsKSk7XG5cblx0bGV0IGYgPSAwO1xuXHRpZiAoYyA8IDEuMCkge1xuXHRcdGYgPSAobCAtIDAuNSAqIGMpIC8gKDEuMCAtIGMpO1xuXHR9XG5cblx0cmV0dXJuIFtoc2xbMF0sIGMgKiAxMDAsIGYgKiAxMDBdO1xufTtcblxuY29udmVydC5oc3YuaGNnID0gZnVuY3Rpb24gKGhzdikge1xuXHRjb25zdCBzID0gaHN2WzFdIC8gMTAwO1xuXHRjb25zdCB2ID0gaHN2WzJdIC8gMTAwO1xuXG5cdGNvbnN0IGMgPSBzICogdjtcblx0bGV0IGYgPSAwO1xuXG5cdGlmIChjIDwgMS4wKSB7XG5cdFx0ZiA9ICh2IC0gYykgLyAoMSAtIGMpO1xuXHR9XG5cblx0cmV0dXJuIFtoc3ZbMF0sIGMgKiAxMDAsIGYgKiAxMDBdO1xufTtcblxuY29udmVydC5oY2cucmdiID0gZnVuY3Rpb24gKGhjZykge1xuXHRjb25zdCBoID0gaGNnWzBdIC8gMzYwO1xuXHRjb25zdCBjID0gaGNnWzFdIC8gMTAwO1xuXHRjb25zdCBnID0gaGNnWzJdIC8gMTAwO1xuXG5cdGlmIChjID09PSAwLjApIHtcblx0XHRyZXR1cm4gW2cgKiAyNTUsIGcgKiAyNTUsIGcgKiAyNTVdO1xuXHR9XG5cblx0Y29uc3QgcHVyZSA9IFswLCAwLCAwXTtcblx0Y29uc3QgaGkgPSAoaCAlIDEpICogNjtcblx0Y29uc3QgdiA9IGhpICUgMTtcblx0Y29uc3QgdyA9IDEgLSB2O1xuXHRsZXQgbWcgPSAwO1xuXG5cdC8qIGVzbGludC1kaXNhYmxlIG1heC1zdGF0ZW1lbnRzLXBlci1saW5lICovXG5cdHN3aXRjaCAoTWF0aC5mbG9vcihoaSkpIHtcblx0XHRjYXNlIDA6XG5cdFx0XHRwdXJlWzBdID0gMTsgcHVyZVsxXSA9IHY7IHB1cmVbMl0gPSAwOyBicmVhaztcblx0XHRjYXNlIDE6XG5cdFx0XHRwdXJlWzBdID0gdzsgcHVyZVsxXSA9IDE7IHB1cmVbMl0gPSAwOyBicmVhaztcblx0XHRjYXNlIDI6XG5cdFx0XHRwdXJlWzBdID0gMDsgcHVyZVsxXSA9IDE7IHB1cmVbMl0gPSB2OyBicmVhaztcblx0XHRjYXNlIDM6XG5cdFx0XHRwdXJlWzBdID0gMDsgcHVyZVsxXSA9IHc7IHB1cmVbMl0gPSAxOyBicmVhaztcblx0XHRjYXNlIDQ6XG5cdFx0XHRwdXJlWzBdID0gdjsgcHVyZVsxXSA9IDA7IHB1cmVbMl0gPSAxOyBicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0cHVyZVswXSA9IDE7IHB1cmVbMV0gPSAwOyBwdXJlWzJdID0gdztcblx0fVxuXHQvKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzLXBlci1saW5lICovXG5cblx0bWcgPSAoMS4wIC0gYykgKiBnO1xuXG5cdHJldHVybiBbXG5cdFx0KGMgKiBwdXJlWzBdICsgbWcpICogMjU1LFxuXHRcdChjICogcHVyZVsxXSArIG1nKSAqIDI1NSxcblx0XHQoYyAqIHB1cmVbMl0gKyBtZykgKiAyNTVcblx0XTtcbn07XG5cbmNvbnZlcnQuaGNnLmhzdiA9IGZ1bmN0aW9uIChoY2cpIHtcblx0Y29uc3QgYyA9IGhjZ1sxXSAvIDEwMDtcblx0Y29uc3QgZyA9IGhjZ1syXSAvIDEwMDtcblxuXHRjb25zdCB2ID0gYyArIGcgKiAoMS4wIC0gYyk7XG5cdGxldCBmID0gMDtcblxuXHRpZiAodiA+IDAuMCkge1xuXHRcdGYgPSBjIC8gdjtcblx0fVxuXG5cdHJldHVybiBbaGNnWzBdLCBmICogMTAwLCB2ICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaGNnLmhzbCA9IGZ1bmN0aW9uIChoY2cpIHtcblx0Y29uc3QgYyA9IGhjZ1sxXSAvIDEwMDtcblx0Y29uc3QgZyA9IGhjZ1syXSAvIDEwMDtcblxuXHRjb25zdCBsID0gZyAqICgxLjAgLSBjKSArIDAuNSAqIGM7XG5cdGxldCBzID0gMDtcblxuXHRpZiAobCA+IDAuMCAmJiBsIDwgMC41KSB7XG5cdFx0cyA9IGMgLyAoMiAqIGwpO1xuXHR9IGVsc2Vcblx0aWYgKGwgPj0gMC41ICYmIGwgPCAxLjApIHtcblx0XHRzID0gYyAvICgyICogKDEgLSBsKSk7XG5cdH1cblxuXHRyZXR1cm4gW2hjZ1swXSwgcyAqIDEwMCwgbCAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmhjZy5od2IgPSBmdW5jdGlvbiAoaGNnKSB7XG5cdGNvbnN0IGMgPSBoY2dbMV0gLyAxMDA7XG5cdGNvbnN0IGcgPSBoY2dbMl0gLyAxMDA7XG5cdGNvbnN0IHYgPSBjICsgZyAqICgxLjAgLSBjKTtcblx0cmV0dXJuIFtoY2dbMF0sICh2IC0gYykgKiAxMDAsICgxIC0gdikgKiAxMDBdO1xufTtcblxuY29udmVydC5od2IuaGNnID0gZnVuY3Rpb24gKGh3Yikge1xuXHRjb25zdCB3ID0gaHdiWzFdIC8gMTAwO1xuXHRjb25zdCBiID0gaHdiWzJdIC8gMTAwO1xuXHRjb25zdCB2ID0gMSAtIGI7XG5cdGNvbnN0IGMgPSB2IC0gdztcblx0bGV0IGcgPSAwO1xuXG5cdGlmIChjIDwgMSkge1xuXHRcdGcgPSAodiAtIGMpIC8gKDEgLSBjKTtcblx0fVxuXG5cdHJldHVybiBbaHdiWzBdLCBjICogMTAwLCBnICogMTAwXTtcbn07XG5cbmNvbnZlcnQuYXBwbGUucmdiID0gZnVuY3Rpb24gKGFwcGxlKSB7XG5cdHJldHVybiBbKGFwcGxlWzBdIC8gNjU1MzUpICogMjU1LCAoYXBwbGVbMV0gLyA2NTUzNSkgKiAyNTUsIChhcHBsZVsyXSAvIDY1NTM1KSAqIDI1NV07XG59O1xuXG5jb252ZXJ0LnJnYi5hcHBsZSA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0cmV0dXJuIFsocmdiWzBdIC8gMjU1KSAqIDY1NTM1LCAocmdiWzFdIC8gMjU1KSAqIDY1NTM1LCAocmdiWzJdIC8gMjU1KSAqIDY1NTM1XTtcbn07XG5cbmNvbnZlcnQuZ3JheS5yZ2IgPSBmdW5jdGlvbiAoYXJncykge1xuXHRyZXR1cm4gW2FyZ3NbMF0gLyAxMDAgKiAyNTUsIGFyZ3NbMF0gLyAxMDAgKiAyNTUsIGFyZ3NbMF0gLyAxMDAgKiAyNTVdO1xufTtcblxuY29udmVydC5ncmF5LmhzbCA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdHJldHVybiBbMCwgMCwgYXJnc1swXV07XG59O1xuXG5jb252ZXJ0LmdyYXkuaHN2ID0gY29udmVydC5ncmF5LmhzbDtcblxuY29udmVydC5ncmF5Lmh3YiA9IGZ1bmN0aW9uIChncmF5KSB7XG5cdHJldHVybiBbMCwgMTAwLCBncmF5WzBdXTtcbn07XG5cbmNvbnZlcnQuZ3JheS5jbXlrID0gZnVuY3Rpb24gKGdyYXkpIHtcblx0cmV0dXJuIFswLCAwLCAwLCBncmF5WzBdXTtcbn07XG5cbmNvbnZlcnQuZ3JheS5sYWIgPSBmdW5jdGlvbiAoZ3JheSkge1xuXHRyZXR1cm4gW2dyYXlbMF0sIDAsIDBdO1xufTtcblxuY29udmVydC5ncmF5LmhleCA9IGZ1bmN0aW9uIChncmF5KSB7XG5cdGNvbnN0IHZhbCA9IE1hdGgucm91bmQoZ3JheVswXSAvIDEwMCAqIDI1NSkgJiAweEZGO1xuXHRjb25zdCBpbnRlZ2VyID0gKHZhbCA8PCAxNikgKyAodmFsIDw8IDgpICsgdmFsO1xuXG5cdGNvbnN0IHN0cmluZyA9IGludGVnZXIudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cdHJldHVybiAnMDAwMDAwJy5zdWJzdHJpbmcoc3RyaW5nLmxlbmd0aCkgKyBzdHJpbmc7XG59O1xuXG5jb252ZXJ0LnJnYi5ncmF5ID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCB2YWwgPSAocmdiWzBdICsgcmdiWzFdICsgcmdiWzJdKSAvIDM7XG5cdHJldHVybiBbdmFsIC8gMjU1ICogMTAwXTtcbn07XG4iLCJjb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoJy4vY29udmVyc2lvbnMnKTtcblxuLypcblx0VGhpcyBmdW5jdGlvbiByb3V0ZXMgYSBtb2RlbCB0byBhbGwgb3RoZXIgbW9kZWxzLlxuXG5cdGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgcm91dGVkIGhhdmUgYSBwcm9wZXJ0eSBgLmNvbnZlcnNpb25gIGF0dGFjaGVkXG5cdHRvIHRoZSByZXR1cm5lZCBzeW50aGV0aWMgZnVuY3Rpb24uIFRoaXMgcHJvcGVydHkgaXMgYW4gYXJyYXlcblx0b2Ygc3RyaW5ncywgZWFjaCB3aXRoIHRoZSBzdGVwcyBpbiBiZXR3ZWVuIHRoZSAnZnJvbScgYW5kICd0bydcblx0Y29sb3IgbW9kZWxzIChpbmNsdXNpdmUpLlxuXG5cdGNvbnZlcnNpb25zIHRoYXQgYXJlIG5vdCBwb3NzaWJsZSBzaW1wbHkgYXJlIG5vdCBpbmNsdWRlZC5cbiovXG5cbmZ1bmN0aW9uIGJ1aWxkR3JhcGgoKSB7XG5cdGNvbnN0IGdyYXBoID0ge307XG5cdC8vIGh0dHBzOi8vanNwZXJmLmNvbS9vYmplY3Qta2V5cy12cy1mb3ItaW4td2l0aC1jbG9zdXJlLzNcblx0Y29uc3QgbW9kZWxzID0gT2JqZWN0LmtleXMoY29udmVyc2lvbnMpO1xuXG5cdGZvciAobGV0IGxlbiA9IG1vZGVscy5sZW5ndGgsIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRncmFwaFttb2RlbHNbaV1dID0ge1xuXHRcdFx0Ly8gaHR0cDovL2pzcGVyZi5jb20vMS12cy1pbmZpbml0eVxuXHRcdFx0Ly8gbWljcm8tb3B0LCBidXQgdGhpcyBpcyBzaW1wbGUuXG5cdFx0XHRkaXN0YW5jZTogLTEsXG5cdFx0XHRwYXJlbnQ6IG51bGxcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIGdyYXBoO1xufVxuXG4vLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CcmVhZHRoLWZpcnN0X3NlYXJjaFxuZnVuY3Rpb24gZGVyaXZlQkZTKGZyb21Nb2RlbCkge1xuXHRjb25zdCBncmFwaCA9IGJ1aWxkR3JhcGgoKTtcblx0Y29uc3QgcXVldWUgPSBbZnJvbU1vZGVsXTsgLy8gVW5zaGlmdCAtPiBxdWV1ZSAtPiBwb3BcblxuXHRncmFwaFtmcm9tTW9kZWxdLmRpc3RhbmNlID0gMDtcblxuXHR3aGlsZSAocXVldWUubGVuZ3RoKSB7XG5cdFx0Y29uc3QgY3VycmVudCA9IHF1ZXVlLnBvcCgpO1xuXHRcdGNvbnN0IGFkamFjZW50cyA9IE9iamVjdC5rZXlzKGNvbnZlcnNpb25zW2N1cnJlbnRdKTtcblxuXHRcdGZvciAobGV0IGxlbiA9IGFkamFjZW50cy5sZW5ndGgsIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGNvbnN0IGFkamFjZW50ID0gYWRqYWNlbnRzW2ldO1xuXHRcdFx0Y29uc3Qgbm9kZSA9IGdyYXBoW2FkamFjZW50XTtcblxuXHRcdFx0aWYgKG5vZGUuZGlzdGFuY2UgPT09IC0xKSB7XG5cdFx0XHRcdG5vZGUuZGlzdGFuY2UgPSBncmFwaFtjdXJyZW50XS5kaXN0YW5jZSArIDE7XG5cdFx0XHRcdG5vZGUucGFyZW50ID0gY3VycmVudDtcblx0XHRcdFx0cXVldWUudW5zaGlmdChhZGphY2VudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGdyYXBoO1xufVxuXG5mdW5jdGlvbiBsaW5rKGZyb20sIHRvKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoYXJncykge1xuXHRcdHJldHVybiB0byhmcm9tKGFyZ3MpKTtcblx0fTtcbn1cblxuZnVuY3Rpb24gd3JhcENvbnZlcnNpb24odG9Nb2RlbCwgZ3JhcGgpIHtcblx0Y29uc3QgcGF0aCA9IFtncmFwaFt0b01vZGVsXS5wYXJlbnQsIHRvTW9kZWxdO1xuXHRsZXQgZm4gPSBjb252ZXJzaW9uc1tncmFwaFt0b01vZGVsXS5wYXJlbnRdW3RvTW9kZWxdO1xuXG5cdGxldCBjdXIgPSBncmFwaFt0b01vZGVsXS5wYXJlbnQ7XG5cdHdoaWxlIChncmFwaFtjdXJdLnBhcmVudCkge1xuXHRcdHBhdGgudW5zaGlmdChncmFwaFtjdXJdLnBhcmVudCk7XG5cdFx0Zm4gPSBsaW5rKGNvbnZlcnNpb25zW2dyYXBoW2N1cl0ucGFyZW50XVtjdXJdLCBmbik7XG5cdFx0Y3VyID0gZ3JhcGhbY3VyXS5wYXJlbnQ7XG5cdH1cblxuXHRmbi5jb252ZXJzaW9uID0gcGF0aDtcblx0cmV0dXJuIGZuO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmcm9tTW9kZWwpIHtcblx0Y29uc3QgZ3JhcGggPSBkZXJpdmVCRlMoZnJvbU1vZGVsKTtcblx0Y29uc3QgY29udmVyc2lvbiA9IHt9O1xuXG5cdGNvbnN0IG1vZGVscyA9IE9iamVjdC5rZXlzKGdyYXBoKTtcblx0Zm9yIChsZXQgbGVuID0gbW9kZWxzLmxlbmd0aCwgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdGNvbnN0IHRvTW9kZWwgPSBtb2RlbHNbaV07XG5cdFx0Y29uc3Qgbm9kZSA9IGdyYXBoW3RvTW9kZWxdO1xuXG5cdFx0aWYgKG5vZGUucGFyZW50ID09PSBudWxsKSB7XG5cdFx0XHQvLyBObyBwb3NzaWJsZSBjb252ZXJzaW9uLCBvciB0aGlzIG5vZGUgaXMgdGhlIHNvdXJjZSBtb2RlbC5cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvbnZlcnNpb25bdG9Nb2RlbF0gPSB3cmFwQ29udmVyc2lvbih0b01vZGVsLCBncmFwaCk7XG5cdH1cblxuXHRyZXR1cm4gY29udmVyc2lvbjtcbn07XG5cbiIsImNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZSgnLi9jb252ZXJzaW9ucycpO1xuY29uc3Qgcm91dGUgPSByZXF1aXJlKCcuL3JvdXRlJyk7XG5cbmNvbnN0IGNvbnZlcnQgPSB7fTtcblxuY29uc3QgbW9kZWxzID0gT2JqZWN0LmtleXMoY29udmVyc2lvbnMpO1xuXG5mdW5jdGlvbiB3cmFwUmF3KGZuKSB7XG5cdGNvbnN0IHdyYXBwZWRGbiA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG5cdFx0Y29uc3QgYXJnMCA9IGFyZ3NbMF07XG5cdFx0aWYgKGFyZzAgPT09IHVuZGVmaW5lZCB8fCBhcmcwID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gYXJnMDtcblx0XHR9XG5cblx0XHRpZiAoYXJnMC5sZW5ndGggPiAxKSB7XG5cdFx0XHRhcmdzID0gYXJnMDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZm4oYXJncyk7XG5cdH07XG5cblx0Ly8gUHJlc2VydmUgLmNvbnZlcnNpb24gcHJvcGVydHkgaWYgdGhlcmUgaXMgb25lXG5cdGlmICgnY29udmVyc2lvbicgaW4gZm4pIHtcblx0XHR3cmFwcGVkRm4uY29udmVyc2lvbiA9IGZuLmNvbnZlcnNpb247XG5cdH1cblxuXHRyZXR1cm4gd3JhcHBlZEZuO1xufVxuXG5mdW5jdGlvbiB3cmFwUm91bmRlZChmbikge1xuXHRjb25zdCB3cmFwcGVkRm4gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuXHRcdGNvbnN0IGFyZzAgPSBhcmdzWzBdO1xuXG5cdFx0aWYgKGFyZzAgPT09IHVuZGVmaW5lZCB8fCBhcmcwID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gYXJnMDtcblx0XHR9XG5cblx0XHRpZiAoYXJnMC5sZW5ndGggPiAxKSB7XG5cdFx0XHRhcmdzID0gYXJnMDtcblx0XHR9XG5cblx0XHRjb25zdCByZXN1bHQgPSBmbihhcmdzKTtcblxuXHRcdC8vIFdlJ3JlIGFzc3VtaW5nIHRoZSByZXN1bHQgaXMgYW4gYXJyYXkgaGVyZS5cblx0XHQvLyBzZWUgbm90aWNlIGluIGNvbnZlcnNpb25zLmpzOyBkb24ndCB1c2UgYm94IHR5cGVzXG5cdFx0Ly8gaW4gY29udmVyc2lvbiBmdW5jdGlvbnMuXG5cdFx0aWYgKHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRmb3IgKGxldCBsZW4gPSByZXN1bHQubGVuZ3RoLCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRcdHJlc3VsdFtpXSA9IE1hdGgucm91bmQocmVzdWx0W2ldKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xuXG5cdC8vIFByZXNlcnZlIC5jb252ZXJzaW9uIHByb3BlcnR5IGlmIHRoZXJlIGlzIG9uZVxuXHRpZiAoJ2NvbnZlcnNpb24nIGluIGZuKSB7XG5cdFx0d3JhcHBlZEZuLmNvbnZlcnNpb24gPSBmbi5jb252ZXJzaW9uO1xuXHR9XG5cblx0cmV0dXJuIHdyYXBwZWRGbjtcbn1cblxubW9kZWxzLmZvckVhY2goZnJvbU1vZGVsID0+IHtcblx0Y29udmVydFtmcm9tTW9kZWxdID0ge307XG5cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnZlcnRbZnJvbU1vZGVsXSwgJ2NoYW5uZWxzJywge3ZhbHVlOiBjb252ZXJzaW9uc1tmcm9tTW9kZWxdLmNoYW5uZWxzfSk7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W2Zyb21Nb2RlbF0sICdsYWJlbHMnLCB7dmFsdWU6IGNvbnZlcnNpb25zW2Zyb21Nb2RlbF0ubGFiZWxzfSk7XG5cblx0Y29uc3Qgcm91dGVzID0gcm91dGUoZnJvbU1vZGVsKTtcblx0Y29uc3Qgcm91dGVNb2RlbHMgPSBPYmplY3Qua2V5cyhyb3V0ZXMpO1xuXG5cdHJvdXRlTW9kZWxzLmZvckVhY2godG9Nb2RlbCA9PiB7XG5cdFx0Y29uc3QgZm4gPSByb3V0ZXNbdG9Nb2RlbF07XG5cblx0XHRjb252ZXJ0W2Zyb21Nb2RlbF1bdG9Nb2RlbF0gPSB3cmFwUm91bmRlZChmbik7XG5cdFx0Y29udmVydFtmcm9tTW9kZWxdW3RvTW9kZWxdLnJhdyA9IHdyYXBSYXcoZm4pO1xuXHR9KTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHdyYXBBbnNpMTYgPSAoZm4sIG9mZnNldCkgPT4gKC4uLmFyZ3MpID0+IHtcblx0Y29uc3QgY29kZSA9IGZuKC4uLmFyZ3MpO1xuXHRyZXR1cm4gYFxcdTAwMUJbJHtjb2RlICsgb2Zmc2V0fW1gO1xufTtcblxuY29uc3Qgd3JhcEFuc2kyNTYgPSAoZm4sIG9mZnNldCkgPT4gKC4uLmFyZ3MpID0+IHtcblx0Y29uc3QgY29kZSA9IGZuKC4uLmFyZ3MpO1xuXHRyZXR1cm4gYFxcdTAwMUJbJHszOCArIG9mZnNldH07NTske2NvZGV9bWA7XG59O1xuXG5jb25zdCB3cmFwQW5zaTE2bSA9IChmbiwgb2Zmc2V0KSA9PiAoLi4uYXJncykgPT4ge1xuXHRjb25zdCByZ2IgPSBmbiguLi5hcmdzKTtcblx0cmV0dXJuIGBcXHUwMDFCWyR7MzggKyBvZmZzZXR9OzI7JHtyZ2JbMF19OyR7cmdiWzFdfTske3JnYlsyXX1tYDtcbn07XG5cbmNvbnN0IGFuc2kyYW5zaSA9IG4gPT4gbjtcbmNvbnN0IHJnYjJyZ2IgPSAociwgZywgYikgPT4gW3IsIGcsIGJdO1xuXG5jb25zdCBzZXRMYXp5UHJvcGVydHkgPSAob2JqZWN0LCBwcm9wZXJ0eSwgZ2V0KSA9PiB7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCB7XG5cdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IGdldCgpO1xuXG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwge1xuXHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH0sXG5cdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRjb25maWd1cmFibGU6IHRydWVcblx0fSk7XG59O1xuXG4vKiogQHR5cGUge3R5cGVvZiBpbXBvcnQoJ2NvbG9yLWNvbnZlcnQnKX0gKi9cbmxldCBjb2xvckNvbnZlcnQ7XG5jb25zdCBtYWtlRHluYW1pY1N0eWxlcyA9ICh3cmFwLCB0YXJnZXRTcGFjZSwgaWRlbnRpdHksIGlzQmFja2dyb3VuZCkgPT4ge1xuXHRpZiAoY29sb3JDb252ZXJ0ID09PSB1bmRlZmluZWQpIHtcblx0XHRjb2xvckNvbnZlcnQgPSByZXF1aXJlKCdjb2xvci1jb252ZXJ0Jyk7XG5cdH1cblxuXHRjb25zdCBvZmZzZXQgPSBpc0JhY2tncm91bmQgPyAxMCA6IDA7XG5cdGNvbnN0IHN0eWxlcyA9IHt9O1xuXG5cdGZvciAoY29uc3QgW3NvdXJjZVNwYWNlLCBzdWl0ZV0gb2YgT2JqZWN0LmVudHJpZXMoY29sb3JDb252ZXJ0KSkge1xuXHRcdGNvbnN0IG5hbWUgPSBzb3VyY2VTcGFjZSA9PT0gJ2Fuc2kxNicgPyAnYW5zaScgOiBzb3VyY2VTcGFjZTtcblx0XHRpZiAoc291cmNlU3BhY2UgPT09IHRhcmdldFNwYWNlKSB7XG5cdFx0XHRzdHlsZXNbbmFtZV0gPSB3cmFwKGlkZW50aXR5LCBvZmZzZXQpO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHN1aXRlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0c3R5bGVzW25hbWVdID0gd3JhcChzdWl0ZVt0YXJnZXRTcGFjZV0sIG9mZnNldCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHN0eWxlcztcbn07XG5cbmZ1bmN0aW9uIGFzc2VtYmxlU3R5bGVzKCkge1xuXHRjb25zdCBjb2RlcyA9IG5ldyBNYXAoKTtcblx0Y29uc3Qgc3R5bGVzID0ge1xuXHRcdG1vZGlmaWVyOiB7XG5cdFx0XHRyZXNldDogWzAsIDBdLFxuXHRcdFx0Ly8gMjEgaXNuJ3Qgd2lkZWx5IHN1cHBvcnRlZCBhbmQgMjIgZG9lcyB0aGUgc2FtZSB0aGluZ1xuXHRcdFx0Ym9sZDogWzEsIDIyXSxcblx0XHRcdGRpbTogWzIsIDIyXSxcblx0XHRcdGl0YWxpYzogWzMsIDIzXSxcblx0XHRcdHVuZGVybGluZTogWzQsIDI0XSxcblx0XHRcdGludmVyc2U6IFs3LCAyN10sXG5cdFx0XHRoaWRkZW46IFs4LCAyOF0sXG5cdFx0XHRzdHJpa2V0aHJvdWdoOiBbOSwgMjldXG5cdFx0fSxcblx0XHRjb2xvcjoge1xuXHRcdFx0YmxhY2s6IFszMCwgMzldLFxuXHRcdFx0cmVkOiBbMzEsIDM5XSxcblx0XHRcdGdyZWVuOiBbMzIsIDM5XSxcblx0XHRcdHllbGxvdzogWzMzLCAzOV0sXG5cdFx0XHRibHVlOiBbMzQsIDM5XSxcblx0XHRcdG1hZ2VudGE6IFszNSwgMzldLFxuXHRcdFx0Y3lhbjogWzM2LCAzOV0sXG5cdFx0XHR3aGl0ZTogWzM3LCAzOV0sXG5cblx0XHRcdC8vIEJyaWdodCBjb2xvclxuXHRcdFx0YmxhY2tCcmlnaHQ6IFs5MCwgMzldLFxuXHRcdFx0cmVkQnJpZ2h0OiBbOTEsIDM5XSxcblx0XHRcdGdyZWVuQnJpZ2h0OiBbOTIsIDM5XSxcblx0XHRcdHllbGxvd0JyaWdodDogWzkzLCAzOV0sXG5cdFx0XHRibHVlQnJpZ2h0OiBbOTQsIDM5XSxcblx0XHRcdG1hZ2VudGFCcmlnaHQ6IFs5NSwgMzldLFxuXHRcdFx0Y3lhbkJyaWdodDogWzk2LCAzOV0sXG5cdFx0XHR3aGl0ZUJyaWdodDogWzk3LCAzOV1cblx0XHR9LFxuXHRcdGJnQ29sb3I6IHtcblx0XHRcdGJnQmxhY2s6IFs0MCwgNDldLFxuXHRcdFx0YmdSZWQ6IFs0MSwgNDldLFxuXHRcdFx0YmdHcmVlbjogWzQyLCA0OV0sXG5cdFx0XHRiZ1llbGxvdzogWzQzLCA0OV0sXG5cdFx0XHRiZ0JsdWU6IFs0NCwgNDldLFxuXHRcdFx0YmdNYWdlbnRhOiBbNDUsIDQ5XSxcblx0XHRcdGJnQ3lhbjogWzQ2LCA0OV0sXG5cdFx0XHRiZ1doaXRlOiBbNDcsIDQ5XSxcblxuXHRcdFx0Ly8gQnJpZ2h0IGNvbG9yXG5cdFx0XHRiZ0JsYWNrQnJpZ2h0OiBbMTAwLCA0OV0sXG5cdFx0XHRiZ1JlZEJyaWdodDogWzEwMSwgNDldLFxuXHRcdFx0YmdHcmVlbkJyaWdodDogWzEwMiwgNDldLFxuXHRcdFx0YmdZZWxsb3dCcmlnaHQ6IFsxMDMsIDQ5XSxcblx0XHRcdGJnQmx1ZUJyaWdodDogWzEwNCwgNDldLFxuXHRcdFx0YmdNYWdlbnRhQnJpZ2h0OiBbMTA1LCA0OV0sXG5cdFx0XHRiZ0N5YW5CcmlnaHQ6IFsxMDYsIDQ5XSxcblx0XHRcdGJnV2hpdGVCcmlnaHQ6IFsxMDcsIDQ5XVxuXHRcdH1cblx0fTtcblxuXHQvLyBBbGlhcyBicmlnaHQgYmxhY2sgYXMgZ3JheSAoYW5kIGdyZXkpXG5cdHN0eWxlcy5jb2xvci5ncmF5ID0gc3R5bGVzLmNvbG9yLmJsYWNrQnJpZ2h0O1xuXHRzdHlsZXMuYmdDb2xvci5iZ0dyYXkgPSBzdHlsZXMuYmdDb2xvci5iZ0JsYWNrQnJpZ2h0O1xuXHRzdHlsZXMuY29sb3IuZ3JleSA9IHN0eWxlcy5jb2xvci5ibGFja0JyaWdodDtcblx0c3R5bGVzLmJnQ29sb3IuYmdHcmV5ID0gc3R5bGVzLmJnQ29sb3IuYmdCbGFja0JyaWdodDtcblxuXHRmb3IgKGNvbnN0IFtncm91cE5hbWUsIGdyb3VwXSBvZiBPYmplY3QuZW50cmllcyhzdHlsZXMpKSB7XG5cdFx0Zm9yIChjb25zdCBbc3R5bGVOYW1lLCBzdHlsZV0gb2YgT2JqZWN0LmVudHJpZXMoZ3JvdXApKSB7XG5cdFx0XHRzdHlsZXNbc3R5bGVOYW1lXSA9IHtcblx0XHRcdFx0b3BlbjogYFxcdTAwMUJbJHtzdHlsZVswXX1tYCxcblx0XHRcdFx0Y2xvc2U6IGBcXHUwMDFCWyR7c3R5bGVbMV19bWBcblx0XHRcdH07XG5cblx0XHRcdGdyb3VwW3N0eWxlTmFtZV0gPSBzdHlsZXNbc3R5bGVOYW1lXTtcblxuXHRcdFx0Y29kZXMuc2V0KHN0eWxlWzBdLCBzdHlsZVsxXSk7XG5cdFx0fVxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHN0eWxlcywgZ3JvdXBOYW1lLCB7XG5cdFx0XHR2YWx1ZTogZ3JvdXAsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG5cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHN0eWxlcywgJ2NvZGVzJywge1xuXHRcdHZhbHVlOiBjb2Rlcyxcblx0XHRlbnVtZXJhYmxlOiBmYWxzZVxuXHR9KTtcblxuXHRzdHlsZXMuY29sb3IuY2xvc2UgPSAnXFx1MDAxQlszOW0nO1xuXHRzdHlsZXMuYmdDb2xvci5jbG9zZSA9ICdcXHUwMDFCWzQ5bSc7XG5cblx0c2V0TGF6eVByb3BlcnR5KHN0eWxlcy5jb2xvciwgJ2Fuc2knLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTE2LCAnYW5zaTE2JywgYW5zaTJhbnNpLCBmYWxzZSkpO1xuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmNvbG9yLCAnYW5zaTI1NicsICgpID0+IG1ha2VEeW5hbWljU3R5bGVzKHdyYXBBbnNpMjU2LCAnYW5zaTI1NicsIGFuc2kyYW5zaSwgZmFsc2UpKTtcblx0c2V0TGF6eVByb3BlcnR5KHN0eWxlcy5jb2xvciwgJ2Fuc2kxNm0nLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTE2bSwgJ3JnYicsIHJnYjJyZ2IsIGZhbHNlKSk7XG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuYmdDb2xvciwgJ2Fuc2knLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTE2LCAnYW5zaTE2JywgYW5zaTJhbnNpLCB0cnVlKSk7XG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuYmdDb2xvciwgJ2Fuc2kyNTYnLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTI1NiwgJ2Fuc2kyNTYnLCBhbnNpMmFuc2ksIHRydWUpKTtcblx0c2V0TGF6eVByb3BlcnR5KHN0eWxlcy5iZ0NvbG9yLCAnYW5zaTE2bScsICgpID0+IG1ha2VEeW5hbWljU3R5bGVzKHdyYXBBbnNpMTZtLCAncmdiJywgcmdiMnJnYiwgdHJ1ZSkpO1xuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbi8vIE1ha2UgdGhlIGV4cG9ydCBpbW11dGFibGVcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsICdleHBvcnRzJywge1xuXHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRnZXQ6IGFzc2VtYmxlU3R5bGVzXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IHN0cmluZ1dpZHRoID0gcmVxdWlyZSgnc3RyaW5nLXdpZHRoJyk7XG5jb25zdCBzdHJpcEFuc2kgPSByZXF1aXJlKCdzdHJpcC1hbnNpJyk7XG5jb25zdCBhbnNpU3R5bGVzID0gcmVxdWlyZSgnYW5zaS1zdHlsZXMnKTtcblxuY29uc3QgRVNDQVBFUyA9IG5ldyBTZXQoW1xuXHQnXFx1MDAxQicsXG5cdCdcXHUwMDlCJ1xuXSk7XG5cbmNvbnN0IEVORF9DT0RFID0gMzk7XG5cbmNvbnN0IHdyYXBBbnNpID0gY29kZSA9PiBgJHtFU0NBUEVTLnZhbHVlcygpLm5leHQoKS52YWx1ZX1bJHtjb2RlfW1gO1xuXG4vLyBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB3b3JkcyBzcGxpdCBvbiAnICcsIGlnbm9yaW5nXG4vLyB0aGUgZXh0cmEgY2hhcmFjdGVycyBhZGRlZCBieSBhbnNpIGVzY2FwZSBjb2Rlc1xuY29uc3Qgd29yZExlbmd0aHMgPSBzdHJpbmcgPT4gc3RyaW5nLnNwbGl0KCcgJykubWFwKGNoYXJhY3RlciA9PiBzdHJpbmdXaWR0aChjaGFyYWN0ZXIpKTtcblxuLy8gV3JhcCBhIGxvbmcgd29yZCBhY3Jvc3MgbXVsdGlwbGUgcm93c1xuLy8gQW5zaSBlc2NhcGUgY29kZXMgZG8gbm90IGNvdW50IHRvd2FyZHMgbGVuZ3RoXG5jb25zdCB3cmFwV29yZCA9IChyb3dzLCB3b3JkLCBjb2x1bW5zKSA9PiB7XG5cdGNvbnN0IGNoYXJhY3RlcnMgPSBbLi4ud29yZF07XG5cblx0bGV0IGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG5cdGxldCB2aXNpYmxlID0gc3RyaW5nV2lkdGgoc3RyaXBBbnNpKHJvd3Nbcm93cy5sZW5ndGggLSAxXSkpO1xuXG5cdGZvciAoY29uc3QgW2luZGV4LCBjaGFyYWN0ZXJdIG9mIGNoYXJhY3RlcnMuZW50cmllcygpKSB7XG5cdFx0Y29uc3QgY2hhcmFjdGVyTGVuZ3RoID0gc3RyaW5nV2lkdGgoY2hhcmFjdGVyKTtcblxuXHRcdGlmICh2aXNpYmxlICsgY2hhcmFjdGVyTGVuZ3RoIDw9IGNvbHVtbnMpIHtcblx0XHRcdHJvd3Nbcm93cy5sZW5ndGggLSAxXSArPSBjaGFyYWN0ZXI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJvd3MucHVzaChjaGFyYWN0ZXIpO1xuXHRcdFx0dmlzaWJsZSA9IDA7XG5cdFx0fVxuXG5cdFx0aWYgKEVTQ0FQRVMuaGFzKGNoYXJhY3RlcikpIHtcblx0XHRcdGlzSW5zaWRlRXNjYXBlID0gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKGlzSW5zaWRlRXNjYXBlICYmIGNoYXJhY3RlciA9PT0gJ20nKSB7XG5cdFx0XHRpc0luc2lkZUVzY2FwZSA9IGZhbHNlO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGlzSW5zaWRlRXNjYXBlKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHR2aXNpYmxlICs9IGNoYXJhY3Rlckxlbmd0aDtcblxuXHRcdGlmICh2aXNpYmxlID09PSBjb2x1bW5zICYmIGluZGV4IDwgY2hhcmFjdGVycy5sZW5ndGggLSAxKSB7XG5cdFx0XHRyb3dzLnB1c2goJycpO1xuXHRcdFx0dmlzaWJsZSA9IDA7XG5cdFx0fVxuXHR9XG5cblx0Ly8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBsYXN0IHJvdyB3ZSBjb3B5IG92ZXIgaXMgb25seVxuXHQvLyBhbnNpIGVzY2FwZSBjaGFyYWN0ZXJzLCBoYW5kbGUgdGhpcyBlZGdlLWNhc2Vcblx0aWYgKCF2aXNpYmxlICYmIHJvd3Nbcm93cy5sZW5ndGggLSAxXS5sZW5ndGggPiAwICYmIHJvd3MubGVuZ3RoID4gMSkge1xuXHRcdHJvd3Nbcm93cy5sZW5ndGggLSAyXSArPSByb3dzLnBvcCgpO1xuXHR9XG59O1xuXG4vLyBUcmltcyBzcGFjZXMgZnJvbSBhIHN0cmluZyBpZ25vcmluZyBpbnZpc2libGUgc2VxdWVuY2VzXG5jb25zdCBzdHJpbmdWaXNpYmxlVHJpbVNwYWNlc1JpZ2h0ID0gc3RyID0+IHtcblx0Y29uc3Qgd29yZHMgPSBzdHIuc3BsaXQoJyAnKTtcblx0bGV0IGxhc3QgPSB3b3Jkcy5sZW5ndGg7XG5cblx0d2hpbGUgKGxhc3QgPiAwKSB7XG5cdFx0aWYgKHN0cmluZ1dpZHRoKHdvcmRzW2xhc3QgLSAxXSkgPiAwKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRsYXN0LS07XG5cdH1cblxuXHRpZiAobGFzdCA9PT0gd29yZHMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIHN0cjtcblx0fVxuXG5cdHJldHVybiB3b3Jkcy5zbGljZSgwLCBsYXN0KS5qb2luKCcgJykgKyB3b3Jkcy5zbGljZShsYXN0KS5qb2luKCcnKTtcbn07XG5cbi8vIFRoZSB3cmFwLWFuc2kgbW9kdWxlIGNhbiBiZSBpbnZva2VkIGluIGVpdGhlciAnaGFyZCcgb3IgJ3NvZnQnIHdyYXAgbW9kZVxuLy9cbi8vICdoYXJkJyB3aWxsIG5ldmVyIGFsbG93IGEgc3RyaW5nIHRvIHRha2UgdXAgbW9yZSB0aGFuIGNvbHVtbnMgY2hhcmFjdGVyc1xuLy9cbi8vICdzb2Z0JyBhbGxvd3MgbG9uZyB3b3JkcyB0byBleHBhbmQgcGFzdCB0aGUgY29sdW1uIGxlbmd0aFxuY29uc3QgZXhlYyA9IChzdHJpbmcsIGNvbHVtbnMsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRpZiAob3B0aW9ucy50cmltICE9PSBmYWxzZSAmJiBzdHJpbmcudHJpbSgpID09PSAnJykge1xuXHRcdHJldHVybiAnJztcblx0fVxuXG5cdGxldCBwcmUgPSAnJztcblx0bGV0IHJldCA9ICcnO1xuXHRsZXQgZXNjYXBlQ29kZTtcblxuXHRjb25zdCBsZW5ndGhzID0gd29yZExlbmd0aHMoc3RyaW5nKTtcblx0bGV0IHJvd3MgPSBbJyddO1xuXG5cdGZvciAoY29uc3QgW2luZGV4LCB3b3JkXSBvZiBzdHJpbmcuc3BsaXQoJyAnKS5lbnRyaWVzKCkpIHtcblx0XHRpZiAob3B0aW9ucy50cmltICE9PSBmYWxzZSkge1xuXHRcdFx0cm93c1tyb3dzLmxlbmd0aCAtIDFdID0gcm93c1tyb3dzLmxlbmd0aCAtIDFdLnRyaW1MZWZ0KCk7XG5cdFx0fVxuXG5cdFx0bGV0IHJvd0xlbmd0aCA9IHN0cmluZ1dpZHRoKHJvd3Nbcm93cy5sZW5ndGggLSAxXSk7XG5cblx0XHRpZiAoaW5kZXggIT09IDApIHtcblx0XHRcdGlmIChyb3dMZW5ndGggPj0gY29sdW1ucyAmJiAob3B0aW9ucy53b3JkV3JhcCA9PT0gZmFsc2UgfHwgb3B0aW9ucy50cmltID09PSBmYWxzZSkpIHtcblx0XHRcdFx0Ly8gSWYgd2Ugc3RhcnQgd2l0aCBhIG5ldyB3b3JkIGJ1dCB0aGUgY3VycmVudCByb3cgbGVuZ3RoIGVxdWFscyB0aGUgbGVuZ3RoIG9mIHRoZSBjb2x1bW5zLCBhZGQgYSBuZXcgcm93XG5cdFx0XHRcdHJvd3MucHVzaCgnJyk7XG5cdFx0XHRcdHJvd0xlbmd0aCA9IDA7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyb3dMZW5ndGggPiAwIHx8IG9wdGlvbnMudHJpbSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0cm93c1tyb3dzLmxlbmd0aCAtIDFdICs9ICcgJztcblx0XHRcdFx0cm93TGVuZ3RoKys7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSW4gJ2hhcmQnIHdyYXAgbW9kZSwgdGhlIGxlbmd0aCBvZiBhIGxpbmUgaXMgbmV2ZXIgYWxsb3dlZCB0byBleHRlbmQgcGFzdCAnY29sdW1ucydcblx0XHRpZiAob3B0aW9ucy5oYXJkICYmIGxlbmd0aHNbaW5kZXhdID4gY29sdW1ucykge1xuXHRcdFx0Y29uc3QgcmVtYWluaW5nQ29sdW1ucyA9IChjb2x1bW5zIC0gcm93TGVuZ3RoKTtcblx0XHRcdGNvbnN0IGJyZWFrc1N0YXJ0aW5nVGhpc0xpbmUgPSAxICsgTWF0aC5mbG9vcigobGVuZ3Roc1tpbmRleF0gLSByZW1haW5pbmdDb2x1bW5zIC0gMSkgLyBjb2x1bW5zKTtcblx0XHRcdGNvbnN0IGJyZWFrc1N0YXJ0aW5nTmV4dExpbmUgPSBNYXRoLmZsb29yKChsZW5ndGhzW2luZGV4XSAtIDEpIC8gY29sdW1ucyk7XG5cdFx0XHRpZiAoYnJlYWtzU3RhcnRpbmdOZXh0TGluZSA8IGJyZWFrc1N0YXJ0aW5nVGhpc0xpbmUpIHtcblx0XHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHRcdH1cblxuXHRcdFx0d3JhcFdvcmQocm93cywgd29yZCwgY29sdW1ucyk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAocm93TGVuZ3RoICsgbGVuZ3Roc1tpbmRleF0gPiBjb2x1bW5zICYmIHJvd0xlbmd0aCA+IDAgJiYgbGVuZ3Roc1tpbmRleF0gPiAwKSB7XG5cdFx0XHRpZiAob3B0aW9ucy53b3JkV3JhcCA9PT0gZmFsc2UgJiYgcm93TGVuZ3RoIDwgY29sdW1ucykge1xuXHRcdFx0XHR3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHJvd3MucHVzaCgnJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJvd0xlbmd0aCArIGxlbmd0aHNbaW5kZXhdID4gY29sdW1ucyAmJiBvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSkge1xuXHRcdFx0d3JhcFdvcmQocm93cywgd29yZCwgY29sdW1ucyk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gd29yZDtcblx0fVxuXG5cdGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlKSB7XG5cdFx0cm93cyA9IHJvd3MubWFwKHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQpO1xuXHR9XG5cblx0cHJlID0gcm93cy5qb2luKCdcXG4nKTtcblxuXHRmb3IgKGNvbnN0IFtpbmRleCwgY2hhcmFjdGVyXSBvZiBbLi4ucHJlXS5lbnRyaWVzKCkpIHtcblx0XHRyZXQgKz0gY2hhcmFjdGVyO1xuXG5cdFx0aWYgKEVTQ0FQRVMuaGFzKGNoYXJhY3RlcikpIHtcblx0XHRcdGNvbnN0IGNvZGUgPSBwYXJzZUZsb2F0KC9cXGRbXm1dKi8uZXhlYyhwcmUuc2xpY2UoaW5kZXgsIGluZGV4ICsgNCkpKTtcblx0XHRcdGVzY2FwZUNvZGUgPSBjb2RlID09PSBFTkRfQ09ERSA/IG51bGwgOiBjb2RlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvZGUgPSBhbnNpU3R5bGVzLmNvZGVzLmdldChOdW1iZXIoZXNjYXBlQ29kZSkpO1xuXG5cdFx0aWYgKGVzY2FwZUNvZGUgJiYgY29kZSkge1xuXHRcdFx0aWYgKHByZVtpbmRleCArIDFdID09PSAnXFxuJykge1xuXHRcdFx0XHRyZXQgKz0gd3JhcEFuc2koY29kZSk7XG5cdFx0XHR9IGVsc2UgaWYgKGNoYXJhY3RlciA9PT0gJ1xcbicpIHtcblx0XHRcdFx0cmV0ICs9IHdyYXBBbnNpKGVzY2FwZUNvZGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXQ7XG59O1xuXG4vLyBGb3IgZWFjaCBuZXdsaW5lLCBpbnZva2UgdGhlIG1ldGhvZCBzZXBhcmF0ZWx5XG5tb2R1bGUuZXhwb3J0cyA9IChzdHJpbmcsIGNvbHVtbnMsIG9wdGlvbnMpID0+IHtcblx0cmV0dXJuIFN0cmluZyhzdHJpbmcpXG5cdFx0Lm5vcm1hbGl6ZSgpXG5cdFx0LnJlcGxhY2UoL1xcclxcbi9nLCAnXFxuJylcblx0XHQuc3BsaXQoJ1xcbicpXG5cdFx0Lm1hcChsaW5lID0+IGV4ZWMobGluZSwgY29sdW1ucywgb3B0aW9ucykpXG5cdFx0LmpvaW4oJ1xcbicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3Qgc3RyaW5nUmVwbGFjZUFsbCA9IChzdHJpbmcsIHN1YnN0cmluZywgcmVwbGFjZXIpID0+IHtcblx0bGV0IGluZGV4ID0gc3RyaW5nLmluZGV4T2Yoc3Vic3RyaW5nKTtcblx0aWYgKGluZGV4ID09PSAtMSkge1xuXHRcdHJldHVybiBzdHJpbmc7XG5cdH1cblxuXHRjb25zdCBzdWJzdHJpbmdMZW5ndGggPSBzdWJzdHJpbmcubGVuZ3RoO1xuXHRsZXQgZW5kSW5kZXggPSAwO1xuXHRsZXQgcmV0dXJuVmFsdWUgPSAnJztcblx0ZG8ge1xuXHRcdHJldHVyblZhbHVlICs9IHN0cmluZy5zdWJzdHIoZW5kSW5kZXgsIGluZGV4IC0gZW5kSW5kZXgpICsgc3Vic3RyaW5nICsgcmVwbGFjZXI7XG5cdFx0ZW5kSW5kZXggPSBpbmRleCArIHN1YnN0cmluZ0xlbmd0aDtcblx0XHRpbmRleCA9IHN0cmluZy5pbmRleE9mKHN1YnN0cmluZywgZW5kSW5kZXgpO1xuXHR9IHdoaWxlIChpbmRleCAhPT0gLTEpO1xuXG5cdHJldHVyblZhbHVlICs9IHN0cmluZy5zdWJzdHIoZW5kSW5kZXgpO1xuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59O1xuXG5jb25zdCBzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXggPSAoc3RyaW5nLCBwcmVmaXgsIHBvc3RmaXgsIGluZGV4KSA9PiB7XG5cdGxldCBlbmRJbmRleCA9IDA7XG5cdGxldCByZXR1cm5WYWx1ZSA9ICcnO1xuXHRkbyB7XG5cdFx0Y29uc3QgZ290Q1IgPSBzdHJpbmdbaW5kZXggLSAxXSA9PT0gJ1xccic7XG5cdFx0cmV0dXJuVmFsdWUgKz0gc3RyaW5nLnN1YnN0cihlbmRJbmRleCwgKGdvdENSID8gaW5kZXggLSAxIDogaW5kZXgpIC0gZW5kSW5kZXgpICsgcHJlZml4ICsgKGdvdENSID8gJ1xcclxcbicgOiAnXFxuJykgKyBwb3N0Zml4O1xuXHRcdGVuZEluZGV4ID0gaW5kZXggKyAxO1xuXHRcdGluZGV4ID0gc3RyaW5nLmluZGV4T2YoJ1xcbicsIGVuZEluZGV4KTtcblx0fSB3aGlsZSAoaW5kZXggIT09IC0xKTtcblxuXHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc3Vic3RyKGVuZEluZGV4KTtcblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHN0cmluZ1JlcGxhY2VBbGwsXG5cdHN0cmluZ0VuY2FzZUNSTEZXaXRoRmlyc3RJbmRleFxufTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IFRFTVBMQVRFX1JFR0VYID0gLyg/OlxcXFwodSg/OlthLWZcXGRdezR9fFxce1thLWZcXGRdezEsNn1cXH0pfHhbYS1mXFxkXXsyfXwuKSl8KD86XFx7KH4pPyhcXHcrKD86XFwoW14pXSpcXCkpPyg/OlxcLlxcdysoPzpcXChbXildKlxcKSk/KSopKD86WyBcXHRdfCg/PVxccj9cXG4pKSl8KFxcfSl8KCg/Oi58W1xcclxcblxcZl0pKz8pL2dpO1xuY29uc3QgU1RZTEVfUkVHRVggPSAvKD86XnxcXC4pKFxcdyspKD86XFwoKFteKV0qKVxcKSk/L2c7XG5jb25zdCBTVFJJTkdfUkVHRVggPSAvXihbJ1wiXSkoKD86XFxcXC58KD8hXFwxKVteXFxcXF0pKilcXDEkLztcbmNvbnN0IEVTQ0FQRV9SRUdFWCA9IC9cXFxcKHUoPzpbYS1mXFxkXXs0fXx7W2EtZlxcZF17MSw2fX0pfHhbYS1mXFxkXXsyfXwuKXwoW15cXFxcXSkvZ2k7XG5cbmNvbnN0IEVTQ0FQRVMgPSBuZXcgTWFwKFtcblx0WyduJywgJ1xcbiddLFxuXHRbJ3InLCAnXFxyJ10sXG5cdFsndCcsICdcXHQnXSxcblx0WydiJywgJ1xcYiddLFxuXHRbJ2YnLCAnXFxmJ10sXG5cdFsndicsICdcXHYnXSxcblx0WycwJywgJ1xcMCddLFxuXHRbJ1xcXFwnLCAnXFxcXCddLFxuXHRbJ2UnLCAnXFx1MDAxQiddLFxuXHRbJ2EnLCAnXFx1MDAwNyddXG5dKTtcblxuZnVuY3Rpb24gdW5lc2NhcGUoYykge1xuXHRjb25zdCB1ID0gY1swXSA9PT0gJ3UnO1xuXHRjb25zdCBicmFja2V0ID0gY1sxXSA9PT0gJ3snO1xuXG5cdGlmICgodSAmJiAhYnJhY2tldCAmJiBjLmxlbmd0aCA9PT0gNSkgfHwgKGNbMF0gPT09ICd4JyAmJiBjLmxlbmd0aCA9PT0gMykpIHtcblx0XHRyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChjLnNsaWNlKDEpLCAxNikpO1xuXHR9XG5cblx0aWYgKHUgJiYgYnJhY2tldCkge1xuXHRcdHJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludChwYXJzZUludChjLnNsaWNlKDIsIC0xKSwgMTYpKTtcblx0fVxuXG5cdHJldHVybiBFU0NBUEVTLmdldChjKSB8fCBjO1xufVxuXG5mdW5jdGlvbiBwYXJzZUFyZ3VtZW50cyhuYW1lLCBhcmd1bWVudHNfKSB7XG5cdGNvbnN0IHJlc3VsdHMgPSBbXTtcblx0Y29uc3QgY2h1bmtzID0gYXJndW1lbnRzXy50cmltKCkuc3BsaXQoL1xccyosXFxzKi9nKTtcblx0bGV0IG1hdGNoZXM7XG5cblx0Zm9yIChjb25zdCBjaHVuayBvZiBjaHVua3MpIHtcblx0XHRjb25zdCBudW1iZXIgPSBOdW1iZXIoY2h1bmspO1xuXHRcdGlmICghTnVtYmVyLmlzTmFOKG51bWJlcikpIHtcblx0XHRcdHJlc3VsdHMucHVzaChudW1iZXIpO1xuXHRcdH0gZWxzZSBpZiAoKG1hdGNoZXMgPSBjaHVuay5tYXRjaChTVFJJTkdfUkVHRVgpKSkge1xuXHRcdFx0cmVzdWx0cy5wdXNoKG1hdGNoZXNbMl0ucmVwbGFjZShFU0NBUEVfUkVHRVgsIChtLCBlc2NhcGUsIGNoYXJhY3RlcikgPT4gZXNjYXBlID8gdW5lc2NhcGUoZXNjYXBlKSA6IGNoYXJhY3RlcikpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgQ2hhbGsgdGVtcGxhdGUgc3R5bGUgYXJndW1lbnQ6ICR7Y2h1bmt9IChpbiBzdHlsZSAnJHtuYW1lfScpYCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU3R5bGUoc3R5bGUpIHtcblx0U1RZTEVfUkVHRVgubGFzdEluZGV4ID0gMDtcblxuXHRjb25zdCByZXN1bHRzID0gW107XG5cdGxldCBtYXRjaGVzO1xuXG5cdHdoaWxlICgobWF0Y2hlcyA9IFNUWUxFX1JFR0VYLmV4ZWMoc3R5bGUpKSAhPT0gbnVsbCkge1xuXHRcdGNvbnN0IG5hbWUgPSBtYXRjaGVzWzFdO1xuXG5cdFx0aWYgKG1hdGNoZXNbMl0pIHtcblx0XHRcdGNvbnN0IGFyZ3MgPSBwYXJzZUFyZ3VtZW50cyhuYW1lLCBtYXRjaGVzWzJdKTtcblx0XHRcdHJlc3VsdHMucHVzaChbbmFtZV0uY29uY2F0KGFyZ3MpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0cy5wdXNoKFtuYW1lXSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkU3R5bGUoY2hhbGssIHN0eWxlcykge1xuXHRjb25zdCBlbmFibGVkID0ge307XG5cblx0Zm9yIChjb25zdCBsYXllciBvZiBzdHlsZXMpIHtcblx0XHRmb3IgKGNvbnN0IHN0eWxlIG9mIGxheWVyLnN0eWxlcykge1xuXHRcdFx0ZW5hYmxlZFtzdHlsZVswXV0gPSBsYXllci5pbnZlcnNlID8gbnVsbCA6IHN0eWxlLnNsaWNlKDEpO1xuXHRcdH1cblx0fVxuXG5cdGxldCBjdXJyZW50ID0gY2hhbGs7XG5cdGZvciAoY29uc3QgW3N0eWxlTmFtZSwgc3R5bGVzXSBvZiBPYmplY3QuZW50cmllcyhlbmFibGVkKSkge1xuXHRcdGlmICghQXJyYXkuaXNBcnJheShzdHlsZXMpKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoIShzdHlsZU5hbWUgaW4gY3VycmVudCkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgVW5rbm93biBDaGFsayBzdHlsZTogJHtzdHlsZU5hbWV9YCk7XG5cdFx0fVxuXG5cdFx0Y3VycmVudCA9IHN0eWxlcy5sZW5ndGggPiAwID8gY3VycmVudFtzdHlsZU5hbWVdKC4uLnN0eWxlcykgOiBjdXJyZW50W3N0eWxlTmFtZV07XG5cdH1cblxuXHRyZXR1cm4gY3VycmVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSAoY2hhbGssIHRlbXBvcmFyeSkgPT4ge1xuXHRjb25zdCBzdHlsZXMgPSBbXTtcblx0Y29uc3QgY2h1bmtzID0gW107XG5cdGxldCBjaHVuayA9IFtdO1xuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtcGFyYW1zXG5cdHRlbXBvcmFyeS5yZXBsYWNlKFRFTVBMQVRFX1JFR0VYLCAobSwgZXNjYXBlQ2hhcmFjdGVyLCBpbnZlcnNlLCBzdHlsZSwgY2xvc2UsIGNoYXJhY3RlcikgPT4ge1xuXHRcdGlmIChlc2NhcGVDaGFyYWN0ZXIpIHtcblx0XHRcdGNodW5rLnB1c2godW5lc2NhcGUoZXNjYXBlQ2hhcmFjdGVyKSk7XG5cdFx0fSBlbHNlIGlmIChzdHlsZSkge1xuXHRcdFx0Y29uc3Qgc3RyaW5nID0gY2h1bmsuam9pbignJyk7XG5cdFx0XHRjaHVuayA9IFtdO1xuXHRcdFx0Y2h1bmtzLnB1c2goc3R5bGVzLmxlbmd0aCA9PT0gMCA/IHN0cmluZyA6IGJ1aWxkU3R5bGUoY2hhbGssIHN0eWxlcykoc3RyaW5nKSk7XG5cdFx0XHRzdHlsZXMucHVzaCh7aW52ZXJzZSwgc3R5bGVzOiBwYXJzZVN0eWxlKHN0eWxlKX0pO1xuXHRcdH0gZWxzZSBpZiAoY2xvc2UpIHtcblx0XHRcdGlmIChzdHlsZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignRm91bmQgZXh0cmFuZW91cyB9IGluIENoYWxrIHRlbXBsYXRlIGxpdGVyYWwnKTtcblx0XHRcdH1cblxuXHRcdFx0Y2h1bmtzLnB1c2goYnVpbGRTdHlsZShjaGFsaywgc3R5bGVzKShjaHVuay5qb2luKCcnKSkpO1xuXHRcdFx0Y2h1bmsgPSBbXTtcblx0XHRcdHN0eWxlcy5wb3AoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2h1bmsucHVzaChjaGFyYWN0ZXIpO1xuXHRcdH1cblx0fSk7XG5cblx0Y2h1bmtzLnB1c2goY2h1bmsuam9pbignJykpO1xuXG5cdGlmIChzdHlsZXMubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGVyck1lc3NhZ2UgPSBgQ2hhbGsgdGVtcGxhdGUgbGl0ZXJhbCBpcyBtaXNzaW5nICR7c3R5bGVzLmxlbmd0aH0gY2xvc2luZyBicmFja2V0JHtzdHlsZXMubGVuZ3RoID09PSAxID8gJycgOiAncyd9IChcXGB9XFxgKWA7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGVyck1lc3NhZ2UpO1xuXHR9XG5cblx0cmV0dXJuIGNodW5rcy5qb2luKCcnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCBhbnNpU3R5bGVzID0gcmVxdWlyZSgnYW5zaS1zdHlsZXMnKTtcbmNvbnN0IHtzdGRvdXQ6IHN0ZG91dENvbG9yLCBzdGRlcnI6IHN0ZGVyckNvbG9yfSA9IHJlcXVpcmUoJ3N1cHBvcnRzLWNvbG9yJyk7XG5jb25zdCB7XG5cdHN0cmluZ1JlcGxhY2VBbGwsXG5cdHN0cmluZ0VuY2FzZUNSTEZXaXRoRmlyc3RJbmRleFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5jb25zdCB7aXNBcnJheX0gPSBBcnJheTtcblxuLy8gYHN1cHBvcnRzQ29sb3IubGV2ZWxgIOKGkiBgYW5zaVN0eWxlcy5jb2xvcltuYW1lXWAgbWFwcGluZ1xuY29uc3QgbGV2ZWxNYXBwaW5nID0gW1xuXHQnYW5zaScsXG5cdCdhbnNpJyxcblx0J2Fuc2kyNTYnLFxuXHQnYW5zaTE2bSdcbl07XG5cbmNvbnN0IHN0eWxlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmNvbnN0IGFwcGx5T3B0aW9ucyA9IChvYmplY3QsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRpZiAob3B0aW9ucy5sZXZlbCAmJiAhKE51bWJlci5pc0ludGVnZXIob3B0aW9ucy5sZXZlbCkgJiYgb3B0aW9ucy5sZXZlbCA+PSAwICYmIG9wdGlvbnMubGV2ZWwgPD0gMykpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgbGV2ZWxgIG9wdGlvbiBzaG91bGQgYmUgYW4gaW50ZWdlciBmcm9tIDAgdG8gMycpO1xuXHR9XG5cblx0Ly8gRGV0ZWN0IGxldmVsIGlmIG5vdCBzZXQgbWFudWFsbHlcblx0Y29uc3QgY29sb3JMZXZlbCA9IHN0ZG91dENvbG9yID8gc3Rkb3V0Q29sb3IubGV2ZWwgOiAwO1xuXHRvYmplY3QubGV2ZWwgPSBvcHRpb25zLmxldmVsID09PSB1bmRlZmluZWQgPyBjb2xvckxldmVsIDogb3B0aW9ucy5sZXZlbDtcbn07XG5cbmNsYXNzIENoYWxrQ2xhc3Mge1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0cnVjdG9yLXJldHVyblxuXHRcdHJldHVybiBjaGFsa0ZhY3Rvcnkob3B0aW9ucyk7XG5cdH1cbn1cblxuY29uc3QgY2hhbGtGYWN0b3J5ID0gb3B0aW9ucyA9PiB7XG5cdGNvbnN0IGNoYWxrID0ge307XG5cdGFwcGx5T3B0aW9ucyhjaGFsaywgb3B0aW9ucyk7XG5cblx0Y2hhbGsudGVtcGxhdGUgPSAoLi4uYXJndW1lbnRzXykgPT4gY2hhbGtUYWcoY2hhbGsudGVtcGxhdGUsIC4uLmFyZ3VtZW50c18pO1xuXG5cdE9iamVjdC5zZXRQcm90b3R5cGVPZihjaGFsaywgQ2hhbGsucHJvdG90eXBlKTtcblx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGNoYWxrLnRlbXBsYXRlLCBjaGFsayk7XG5cblx0Y2hhbGsudGVtcGxhdGUuY29uc3RydWN0b3IgPSAoKSA9PiB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdgY2hhbGsuY29uc3RydWN0b3IoKWAgaXMgZGVwcmVjYXRlZC4gVXNlIGBuZXcgY2hhbGsuSW5zdGFuY2UoKWAgaW5zdGVhZC4nKTtcblx0fTtcblxuXHRjaGFsay50ZW1wbGF0ZS5JbnN0YW5jZSA9IENoYWxrQ2xhc3M7XG5cblx0cmV0dXJuIGNoYWxrLnRlbXBsYXRlO1xufTtcblxuZnVuY3Rpb24gQ2hhbGsob3B0aW9ucykge1xuXHRyZXR1cm4gY2hhbGtGYWN0b3J5KG9wdGlvbnMpO1xufVxuXG5mb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhhbnNpU3R5bGVzKSkge1xuXHRzdHlsZXNbc3R5bGVOYW1lXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcih0aGlzLCBjcmVhdGVTdHlsZXIoc3R5bGUub3Blbiwgc3R5bGUuY2xvc2UsIHRoaXMuX3N0eWxlciksIHRoaXMuX2lzRW1wdHkpO1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHN0eWxlTmFtZSwge3ZhbHVlOiBidWlsZGVyfSk7XG5cdFx0XHRyZXR1cm4gYnVpbGRlcjtcblx0XHR9XG5cdH07XG59XG5cbnN0eWxlcy52aXNpYmxlID0ge1xuXHRnZXQoKSB7XG5cdFx0Y29uc3QgYnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIodGhpcywgdGhpcy5fc3R5bGVyLCB0cnVlKTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3Zpc2libGUnLCB7dmFsdWU6IGJ1aWxkZXJ9KTtcblx0XHRyZXR1cm4gYnVpbGRlcjtcblx0fVxufTtcblxuY29uc3QgdXNlZE1vZGVscyA9IFsncmdiJywgJ2hleCcsICdrZXl3b3JkJywgJ2hzbCcsICdoc3YnLCAnaHdiJywgJ2Fuc2knLCAnYW5zaTI1NiddO1xuXG5mb3IgKGNvbnN0IG1vZGVsIG9mIHVzZWRNb2RlbHMpIHtcblx0c3R5bGVzW21vZGVsXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCB7bGV2ZWx9ID0gdGhpcztcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoLi4uYXJndW1lbnRzXykge1xuXHRcdFx0XHRjb25zdCBzdHlsZXIgPSBjcmVhdGVTdHlsZXIoYW5zaVN0eWxlcy5jb2xvcltsZXZlbE1hcHBpbmdbbGV2ZWxdXVttb2RlbF0oLi4uYXJndW1lbnRzXyksIGFuc2lTdHlsZXMuY29sb3IuY2xvc2UsIHRoaXMuX3N0eWxlcik7XG5cdFx0XHRcdHJldHVybiBjcmVhdGVCdWlsZGVyKHRoaXMsIHN0eWxlciwgdGhpcy5faXNFbXB0eSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fTtcbn1cblxuZm9yIChjb25zdCBtb2RlbCBvZiB1c2VkTW9kZWxzKSB7XG5cdGNvbnN0IGJnTW9kZWwgPSAnYmcnICsgbW9kZWxbMF0udG9VcHBlckNhc2UoKSArIG1vZGVsLnNsaWNlKDEpO1xuXHRzdHlsZXNbYmdNb2RlbF0gPSB7XG5cdFx0Z2V0KCkge1xuXHRcdFx0Y29uc3Qge2xldmVsfSA9IHRoaXM7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3VtZW50c18pIHtcblx0XHRcdFx0Y29uc3Qgc3R5bGVyID0gY3JlYXRlU3R5bGVyKGFuc2lTdHlsZXMuYmdDb2xvcltsZXZlbE1hcHBpbmdbbGV2ZWxdXVttb2RlbF0oLi4uYXJndW1lbnRzXyksIGFuc2lTdHlsZXMuYmdDb2xvci5jbG9zZSwgdGhpcy5fc3R5bGVyKTtcblx0XHRcdFx0cmV0dXJuIGNyZWF0ZUJ1aWxkZXIodGhpcywgc3R5bGVyLCB0aGlzLl9pc0VtcHR5KTtcblx0XHRcdH07XG5cdFx0fVxuXHR9O1xufVxuXG5jb25zdCBwcm90byA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCgpID0+IHt9LCB7XG5cdC4uLnN0eWxlcyxcblx0bGV2ZWw6IHtcblx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiB0aGlzLl9nZW5lcmF0b3IubGV2ZWw7XG5cdFx0fSxcblx0XHRzZXQobGV2ZWwpIHtcblx0XHRcdHRoaXMuX2dlbmVyYXRvci5sZXZlbCA9IGxldmVsO1xuXHRcdH1cblx0fVxufSk7XG5cbmNvbnN0IGNyZWF0ZVN0eWxlciA9IChvcGVuLCBjbG9zZSwgcGFyZW50KSA9PiB7XG5cdGxldCBvcGVuQWxsO1xuXHRsZXQgY2xvc2VBbGw7XG5cdGlmIChwYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdG9wZW5BbGwgPSBvcGVuO1xuXHRcdGNsb3NlQWxsID0gY2xvc2U7XG5cdH0gZWxzZSB7XG5cdFx0b3BlbkFsbCA9IHBhcmVudC5vcGVuQWxsICsgb3Blbjtcblx0XHRjbG9zZUFsbCA9IGNsb3NlICsgcGFyZW50LmNsb3NlQWxsO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRvcGVuLFxuXHRcdGNsb3NlLFxuXHRcdG9wZW5BbGwsXG5cdFx0Y2xvc2VBbGwsXG5cdFx0cGFyZW50XG5cdH07XG59O1xuXG5jb25zdCBjcmVhdGVCdWlsZGVyID0gKHNlbGYsIF9zdHlsZXIsIF9pc0VtcHR5KSA9PiB7XG5cdGNvbnN0IGJ1aWxkZXIgPSAoLi4uYXJndW1lbnRzXykgPT4ge1xuXHRcdGlmIChpc0FycmF5KGFyZ3VtZW50c19bMF0pICYmIGlzQXJyYXkoYXJndW1lbnRzX1swXS5yYXcpKSB7XG5cdFx0XHQvLyBDYWxsZWQgYXMgYSB0ZW1wbGF0ZSBsaXRlcmFsLCBmb3IgZXhhbXBsZTogY2hhbGsucmVkYDIgKyAzID0ge2JvbGQgJHsyKzN9fWBcblx0XHRcdHJldHVybiBhcHBseVN0eWxlKGJ1aWxkZXIsIGNoYWxrVGFnKGJ1aWxkZXIsIC4uLmFyZ3VtZW50c18pKTtcblx0XHR9XG5cblx0XHQvLyBTaW5nbGUgYXJndW1lbnQgaXMgaG90IHBhdGgsIGltcGxpY2l0IGNvZXJjaW9uIGlzIGZhc3RlciB0aGFuIGFueXRoaW5nXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWltcGxpY2l0LWNvZXJjaW9uXG5cdFx0cmV0dXJuIGFwcGx5U3R5bGUoYnVpbGRlciwgKGFyZ3VtZW50c18ubGVuZ3RoID09PSAxKSA/ICgnJyArIGFyZ3VtZW50c19bMF0pIDogYXJndW1lbnRzXy5qb2luKCcgJykpO1xuXHR9O1xuXG5cdC8vIFdlIGFsdGVyIHRoZSBwcm90b3R5cGUgYmVjYXVzZSB3ZSBtdXN0IHJldHVybiBhIGZ1bmN0aW9uLCBidXQgdGhlcmUgaXNcblx0Ly8gbm8gd2F5IHRvIGNyZWF0ZSBhIGZ1bmN0aW9uIHdpdGggYSBkaWZmZXJlbnQgcHJvdG90eXBlXG5cdE9iamVjdC5zZXRQcm90b3R5cGVPZihidWlsZGVyLCBwcm90byk7XG5cblx0YnVpbGRlci5fZ2VuZXJhdG9yID0gc2VsZjtcblx0YnVpbGRlci5fc3R5bGVyID0gX3N0eWxlcjtcblx0YnVpbGRlci5faXNFbXB0eSA9IF9pc0VtcHR5O1xuXG5cdHJldHVybiBidWlsZGVyO1xufTtcblxuY29uc3QgYXBwbHlTdHlsZSA9IChzZWxmLCBzdHJpbmcpID0+IHtcblx0aWYgKHNlbGYubGV2ZWwgPD0gMCB8fCAhc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHNlbGYuX2lzRW1wdHkgPyAnJyA6IHN0cmluZztcblx0fVxuXG5cdGxldCBzdHlsZXIgPSBzZWxmLl9zdHlsZXI7XG5cblx0aWYgKHN0eWxlciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHN0cmluZztcblx0fVxuXG5cdGNvbnN0IHtvcGVuQWxsLCBjbG9zZUFsbH0gPSBzdHlsZXI7XG5cdGlmIChzdHJpbmcuaW5kZXhPZignXFx1MDAxQicpICE9PSAtMSkge1xuXHRcdHdoaWxlIChzdHlsZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gUmVwbGFjZSBhbnkgaW5zdGFuY2VzIGFscmVhZHkgcHJlc2VudCB3aXRoIGEgcmUtb3BlbmluZyBjb2RlXG5cdFx0XHQvLyBvdGhlcndpc2Ugb25seSB0aGUgcGFydCBvZiB0aGUgc3RyaW5nIHVudGlsIHNhaWQgY2xvc2luZyBjb2RlXG5cdFx0XHQvLyB3aWxsIGJlIGNvbG9yZWQsIGFuZCB0aGUgcmVzdCB3aWxsIHNpbXBseSBiZSAncGxhaW4nLlxuXHRcdFx0c3RyaW5nID0gc3RyaW5nUmVwbGFjZUFsbChzdHJpbmcsIHN0eWxlci5jbG9zZSwgc3R5bGVyLm9wZW4pO1xuXG5cdFx0XHRzdHlsZXIgPSBzdHlsZXIucGFyZW50O1xuXHRcdH1cblx0fVxuXG5cdC8vIFdlIGNhbiBtb3ZlIGJvdGggbmV4dCBhY3Rpb25zIG91dCBvZiBsb29wLCBiZWNhdXNlIHJlbWFpbmluZyBhY3Rpb25zIGluIGxvb3Agd29uJ3QgaGF2ZVxuXHQvLyBhbnkvdmlzaWJsZSBlZmZlY3Qgb24gcGFydHMgd2UgYWRkIGhlcmUuIENsb3NlIHRoZSBzdHlsaW5nIGJlZm9yZSBhIGxpbmVicmVhayBhbmQgcmVvcGVuXG5cdC8vIGFmdGVyIG5leHQgbGluZSB0byBmaXggYSBibGVlZCBpc3N1ZSBvbiBtYWNPUzogaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL2NoYWxrL3B1bGwvOTJcblx0Y29uc3QgbGZJbmRleCA9IHN0cmluZy5pbmRleE9mKCdcXG4nKTtcblx0aWYgKGxmSW5kZXggIT09IC0xKSB7XG5cdFx0c3RyaW5nID0gc3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4KHN0cmluZywgY2xvc2VBbGwsIG9wZW5BbGwsIGxmSW5kZXgpO1xuXHR9XG5cblx0cmV0dXJuIG9wZW5BbGwgKyBzdHJpbmcgKyBjbG9zZUFsbDtcbn07XG5cbmxldCB0ZW1wbGF0ZTtcbmNvbnN0IGNoYWxrVGFnID0gKGNoYWxrLCAuLi5zdHJpbmdzKSA9PiB7XG5cdGNvbnN0IFtmaXJzdFN0cmluZ10gPSBzdHJpbmdzO1xuXG5cdGlmICghaXNBcnJheShmaXJzdFN0cmluZykgfHwgIWlzQXJyYXkoZmlyc3RTdHJpbmcucmF3KSkge1xuXHRcdC8vIElmIGNoYWxrKCkgd2FzIGNhbGxlZCBieSBpdHNlbGYgb3Igd2l0aCBhIHN0cmluZyxcblx0XHQvLyByZXR1cm4gdGhlIHN0cmluZyBpdHNlbGYgYXMgYSBzdHJpbmcuXG5cdFx0cmV0dXJuIHN0cmluZ3Muam9pbignICcpO1xuXHR9XG5cblx0Y29uc3QgYXJndW1lbnRzXyA9IHN0cmluZ3Muc2xpY2UoMSk7XG5cdGNvbnN0IHBhcnRzID0gW2ZpcnN0U3RyaW5nLnJhd1swXV07XG5cblx0Zm9yIChsZXQgaSA9IDE7IGkgPCBmaXJzdFN0cmluZy5sZW5ndGg7IGkrKykge1xuXHRcdHBhcnRzLnB1c2goXG5cdFx0XHRTdHJpbmcoYXJndW1lbnRzX1tpIC0gMV0pLnJlcGxhY2UoL1t7fVxcXFxdL2csICdcXFxcJCYnKSxcblx0XHRcdFN0cmluZyhmaXJzdFN0cmluZy5yYXdbaV0pXG5cdFx0KTtcblx0fVxuXG5cdGlmICh0ZW1wbGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGVtcGxhdGUgPSByZXF1aXJlKCcuL3RlbXBsYXRlcycpO1xuXHR9XG5cblx0cmV0dXJuIHRlbXBsYXRlKGNoYWxrLCBwYXJ0cy5qb2luKCcnKSk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDaGFsay5wcm90b3R5cGUsIHN0eWxlcyk7XG5cbmNvbnN0IGNoYWxrID0gQ2hhbGsoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG5jaGFsay5zdXBwb3J0c0NvbG9yID0gc3Rkb3V0Q29sb3I7XG5jaGFsay5zdGRlcnIgPSBDaGFsayh7bGV2ZWw6IHN0ZGVyckNvbG9yID8gc3RkZXJyQ29sb3IubGV2ZWwgOiAwfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuY2hhbGsuc3RkZXJyLnN1cHBvcnRzQ29sb3IgPSBzdGRlcnJDb2xvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBjaGFsaztcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgbWltaWNGbiA9ICh0bywgZnJvbSkgPT4ge1xuXHRmb3IgKGNvbnN0IHByb3Agb2YgUmVmbGVjdC5vd25LZXlzKGZyb20pKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRvLCBwcm9wLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGZyb20sIHByb3ApKTtcblx0fVxuXG5cdHJldHVybiB0bztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbWltaWNGbjtcbi8vIFRPRE86IFJlbW92ZSB0aGlzIGZvciB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gbWltaWNGbjtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IG1pbWljRm4gPSByZXF1aXJlKCdtaW1pYy1mbicpO1xuXG5jb25zdCBjYWxsZWRGdW5jdGlvbnMgPSBuZXcgV2Vha01hcCgpO1xuXG5jb25zdCBvbmV0aW1lID0gKGZ1bmN0aW9uXywgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGlmICh0eXBlb2YgZnVuY3Rpb25fICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYSBmdW5jdGlvbicpO1xuXHR9XG5cblx0bGV0IHJldHVyblZhbHVlO1xuXHRsZXQgY2FsbENvdW50ID0gMDtcblx0Y29uc3QgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25fLmRpc3BsYXlOYW1lIHx8IGZ1bmN0aW9uXy5uYW1lIHx8ICc8YW5vbnltb3VzPic7XG5cblx0Y29uc3Qgb25ldGltZSA9IGZ1bmN0aW9uICguLi5hcmd1bWVudHNfKSB7XG5cdFx0Y2FsbGVkRnVuY3Rpb25zLnNldChvbmV0aW1lLCArK2NhbGxDb3VudCk7XG5cblx0XHRpZiAoY2FsbENvdW50ID09PSAxKSB7XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IGZ1bmN0aW9uXy5hcHBseSh0aGlzLCBhcmd1bWVudHNfKTtcblx0XHRcdGZ1bmN0aW9uXyA9IG51bGw7XG5cdFx0fSBlbHNlIGlmIChvcHRpb25zLnRocm93ID09PSB0cnVlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEZ1bmN0aW9uIFxcYCR7ZnVuY3Rpb25OYW1lfVxcYCBjYW4gb25seSBiZSBjYWxsZWQgb25jZWApO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXR1cm5WYWx1ZTtcblx0fTtcblxuXHRtaW1pY0ZuKG9uZXRpbWUsIGZ1bmN0aW9uXyk7XG5cdGNhbGxlZEZ1bmN0aW9ucy5zZXQob25ldGltZSwgY2FsbENvdW50KTtcblxuXHRyZXR1cm4gb25ldGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gb25ldGltZTtcbi8vIFRPRE86IFJlbW92ZSB0aGlzIGZvciB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gb25ldGltZTtcblxubW9kdWxlLmV4cG9ydHMuY2FsbENvdW50ID0gZnVuY3Rpb25fID0+IHtcblx0aWYgKCFjYWxsZWRGdW5jdGlvbnMuaGFzKGZ1bmN0aW9uXykpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYFRoZSBnaXZlbiBmdW5jdGlvbiBcXGAke2Z1bmN0aW9uXy5uYW1lfVxcYCBpcyBub3Qgd3JhcHBlZCBieSB0aGUgXFxgb25ldGltZVxcYCBwYWNrYWdlYCk7XG5cdH1cblxuXHRyZXR1cm4gY2FsbGVkRnVuY3Rpb25zLmdldChmdW5jdGlvbl8pO1xufTtcbiIsIi8vIFRoaXMgaXMgbm90IHRoZSBzZXQgb2YgYWxsIHBvc3NpYmxlIHNpZ25hbHMuXG4vL1xuLy8gSXQgSVMsIGhvd2V2ZXIsIHRoZSBzZXQgb2YgYWxsIHNpZ25hbHMgdGhhdCB0cmlnZ2VyXG4vLyBhbiBleGl0IG9uIGVpdGhlciBMaW51eCBvciBCU0Qgc3lzdGVtcy4gIExpbnV4IGlzIGFcbi8vIHN1cGVyc2V0IG9mIHRoZSBzaWduYWwgbmFtZXMgc3VwcG9ydGVkIG9uIEJTRCwgYW5kXG4vLyB0aGUgdW5rbm93biBzaWduYWxzIGp1c3QgZmFpbCB0byByZWdpc3Rlciwgc28gd2UgY2FuXG4vLyBjYXRjaCB0aGF0IGVhc2lseSBlbm91Z2guXG4vL1xuLy8gRG9uJ3QgYm90aGVyIHdpdGggU0lHS0lMTC4gIEl0J3MgdW5jYXRjaGFibGUsIHdoaWNoXG4vLyBtZWFucyB0aGF0IHdlIGNhbid0IGZpcmUgYW55IGNhbGxiYWNrcyBhbnl3YXkuXG4vL1xuLy8gSWYgYSB1c2VyIGRvZXMgaGFwcGVuIHRvIHJlZ2lzdGVyIGEgaGFuZGxlciBvbiBhIG5vbi1cbi8vIGZhdGFsIHNpZ25hbCBsaWtlIFNJR1dJTkNIIG9yIHNvbWV0aGluZywgYW5kIHRoZW5cbi8vIGV4aXQsIGl0J2xsIGVuZCB1cCBmaXJpbmcgYHByb2Nlc3MuZW1pdCgnZXhpdCcpYCwgc29cbi8vIHRoZSBoYW5kbGVyIHdpbGwgYmUgZmlyZWQgYW55d2F5LlxuLy9cbi8vIFNJR0JVUywgU0lHRlBFLCBTSUdTRUdWIGFuZCBTSUdJTEwsIHdoZW4gbm90IHJhaXNlZFxuLy8gYXJ0aWZpY2lhbGx5LCBpbmhlcmVudGx5IGxlYXZlIHRoZSBwcm9jZXNzIGluIGFcbi8vIHN0YXRlIGZyb20gd2hpY2ggaXQgaXMgbm90IHNhZmUgdG8gdHJ5IGFuZCBlbnRlciBKU1xuLy8gbGlzdGVuZXJzLlxubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdTSUdBQlJUJyxcbiAgJ1NJR0FMUk0nLFxuICAnU0lHSFVQJyxcbiAgJ1NJR0lOVCcsXG4gICdTSUdURVJNJ1xuXVxuXG5pZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuICBtb2R1bGUuZXhwb3J0cy5wdXNoKFxuICAgICdTSUdWVEFMUk0nLFxuICAgICdTSUdYQ1BVJyxcbiAgICAnU0lHWEZTWicsXG4gICAgJ1NJR1VTUjInLFxuICAgICdTSUdUUkFQJyxcbiAgICAnU0lHU1lTJyxcbiAgICAnU0lHUVVJVCcsXG4gICAgJ1NJR0lPVCdcbiAgICAvLyBzaG91bGQgZGV0ZWN0IHByb2ZpbGVyIGFuZCBlbmFibGUvZGlzYWJsZSBhY2NvcmRpbmdseS5cbiAgICAvLyBzZWUgIzIxXG4gICAgLy8gJ1NJR1BST0YnXG4gIClcbn1cblxuaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdsaW51eCcpIHtcbiAgbW9kdWxlLmV4cG9ydHMucHVzaChcbiAgICAnU0lHSU8nLFxuICAgICdTSUdQT0xMJyxcbiAgICAnU0lHUFdSJyxcbiAgICAnU0lHU1RLRkxUJyxcbiAgICAnU0lHVU5VU0VEJ1xuICApXG59XG4iLCIvLyBOb3RlOiBzaW5jZSBueWMgdXNlcyB0aGlzIG1vZHVsZSB0byBvdXRwdXQgY292ZXJhZ2UsIGFueSBsaW5lc1xuLy8gdGhhdCBhcmUgaW4gdGhlIGRpcmVjdCBzeW5jIGZsb3cgb2YgbnljJ3Mgb3V0cHV0Q292ZXJhZ2UgYXJlXG4vLyBpZ25vcmVkLCBzaW5jZSB3ZSBjYW4gbmV2ZXIgZ2V0IGNvdmVyYWdlIGZvciB0aGVtLlxuLy8gZ3JhYiBhIHJlZmVyZW5jZSB0byBub2RlJ3MgcmVhbCBwcm9jZXNzIG9iamVjdCByaWdodCBhd2F5XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzXG5cbmNvbnN0IHByb2Nlc3NPayA9IGZ1bmN0aW9uIChwcm9jZXNzKSB7XG4gIHJldHVybiBwcm9jZXNzICYmXG4gICAgdHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIHByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5lbWl0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHByb2Nlc3MucmVhbGx5RXhpdCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLmxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLmtpbGwgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5waWQgPT09ICdudW1iZXInICYmXG4gICAgdHlwZW9mIHByb2Nlc3Mub24gPT09ICdmdW5jdGlvbidcbn1cblxuLy8gc29tZSBraW5kIG9mIG5vbi1ub2RlIGVudmlyb25tZW50LCBqdXN0IG5vLW9wXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmICghcHJvY2Vzc09rKHByb2Nlc3MpKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7fVxuICB9XG59IGVsc2Uge1xuICB2YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbiAgdmFyIHNpZ25hbHMgPSByZXF1aXJlKCcuL3NpZ25hbHMuanMnKVxuICB2YXIgaXNXaW4gPSAvXndpbi9pLnRlc3QocHJvY2Vzcy5wbGF0Zm9ybSlcblxuICB2YXIgRUUgPSByZXF1aXJlKCdldmVudHMnKVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHR5cGVvZiBFRSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIEVFID0gRUUuRXZlbnRFbWl0dGVyXG4gIH1cblxuICB2YXIgZW1pdHRlclxuICBpZiAocHJvY2Vzcy5fX3NpZ25hbF9leGl0X2VtaXR0ZXJfXykge1xuICAgIGVtaXR0ZXIgPSBwcm9jZXNzLl9fc2lnbmFsX2V4aXRfZW1pdHRlcl9fXG4gIH0gZWxzZSB7XG4gICAgZW1pdHRlciA9IHByb2Nlc3MuX19zaWduYWxfZXhpdF9lbWl0dGVyX18gPSBuZXcgRUUoKVxuICAgIGVtaXR0ZXIuY291bnQgPSAwXG4gICAgZW1pdHRlci5lbWl0dGVkID0ge31cbiAgfVxuXG4gIC8vIEJlY2F1c2UgdGhpcyBlbWl0dGVyIGlzIGEgZ2xvYmFsLCB3ZSBoYXZlIHRvIGNoZWNrIHRvIHNlZSBpZiBhXG4gIC8vIHByZXZpb3VzIHZlcnNpb24gb2YgdGhpcyBsaWJyYXJ5IGZhaWxlZCB0byBlbmFibGUgaW5maW5pdGUgbGlzdGVuZXJzLlxuICAvLyBJIGtub3cgd2hhdCB5b3UncmUgYWJvdXQgdG8gc2F5LiAgQnV0IGxpdGVyYWxseSBldmVyeXRoaW5nIGFib3V0XG4gIC8vIHNpZ25hbC1leGl0IGlzIGEgY29tcHJvbWlzZSB3aXRoIGV2aWwuICBHZXQgdXNlZCB0byBpdC5cbiAgaWYgKCFlbWl0dGVyLmluZmluaXRlKSB7XG4gICAgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoSW5maW5pdHkpXG4gICAgZW1pdHRlci5pbmZpbml0ZSA9IHRydWVcbiAgfVxuXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNiLCBvcHRzKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge31cbiAgICB9XG4gICAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBjYiwgJ2Z1bmN0aW9uJywgJ2EgY2FsbGJhY2sgbXVzdCBiZSBwcm92aWRlZCBmb3IgZXhpdCBoYW5kbGVyJylcblxuICAgIGlmIChsb2FkZWQgPT09IGZhbHNlKSB7XG4gICAgICBsb2FkKClcbiAgICB9XG5cbiAgICB2YXIgZXYgPSAnZXhpdCdcbiAgICBpZiAob3B0cyAmJiBvcHRzLmFsd2F5c0xhc3QpIHtcbiAgICAgIGV2ID0gJ2FmdGVyZXhpdCdcbiAgICB9XG5cbiAgICB2YXIgcmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihldiwgY2IpXG4gICAgICBpZiAoZW1pdHRlci5saXN0ZW5lcnMoJ2V4aXQnKS5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICBlbWl0dGVyLmxpc3RlbmVycygnYWZ0ZXJleGl0JykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHVubG9hZCgpXG4gICAgICB9XG4gICAgfVxuICAgIGVtaXR0ZXIub24oZXYsIGNiKVxuXG4gICAgcmV0dXJuIHJlbW92ZVxuICB9XG5cbiAgdmFyIHVubG9hZCA9IGZ1bmN0aW9uIHVubG9hZCAoKSB7XG4gICAgaWYgKCFsb2FkZWQgfHwgIXByb2Nlc3NPayhnbG9iYWwucHJvY2VzcykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBsb2FkZWQgPSBmYWxzZVxuXG4gICAgc2lnbmFscy5mb3JFYWNoKGZ1bmN0aW9uIChzaWcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHByb2Nlc3MucmVtb3ZlTGlzdGVuZXIoc2lnLCBzaWdMaXN0ZW5lcnNbc2lnXSlcbiAgICAgIH0gY2F0Y2ggKGVyKSB7fVxuICAgIH0pXG4gICAgcHJvY2Vzcy5lbWl0ID0gb3JpZ2luYWxQcm9jZXNzRW1pdFxuICAgIHByb2Nlc3MucmVhbGx5RXhpdCA9IG9yaWdpbmFsUHJvY2Vzc1JlYWxseUV4aXRcbiAgICBlbWl0dGVyLmNvdW50IC09IDFcbiAgfVxuICBtb2R1bGUuZXhwb3J0cy51bmxvYWQgPSB1bmxvYWRcblxuICB2YXIgZW1pdCA9IGZ1bmN0aW9uIGVtaXQgKGV2ZW50LCBjb2RlLCBzaWduYWwpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoZW1pdHRlci5lbWl0dGVkW2V2ZW50XSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGVtaXR0ZXIuZW1pdHRlZFtldmVudF0gPSB0cnVlXG4gICAgZW1pdHRlci5lbWl0KGV2ZW50LCBjb2RlLCBzaWduYWwpXG4gIH1cblxuICAvLyB7IDxzaWduYWw+OiA8bGlzdGVuZXIgZm4+LCAuLi4gfVxuICB2YXIgc2lnTGlzdGVuZXJzID0ge31cbiAgc2lnbmFscy5mb3JFYWNoKGZ1bmN0aW9uIChzaWcpIHtcbiAgICBzaWdMaXN0ZW5lcnNbc2lnXSA9IGZ1bmN0aW9uIGxpc3RlbmVyICgpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKCFwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIG90aGVyIGxpc3RlbmVycywgYW4gZXhpdCBpcyBjb21pbmchXG4gICAgICAvLyBTaW1wbGVzdCB3YXk6IHJlbW92ZSB1cyBhbmQgdGhlbiByZS1zZW5kIHRoZSBzaWduYWwuXG4gICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyB3aWxsIGtpbGwgdGhlIHByb2Nlc3MsIHNvIHdlIGNhblxuICAgICAgLy8gc2FmZWx5IGVtaXQgbm93LlxuICAgICAgdmFyIGxpc3RlbmVycyA9IHByb2Nlc3MubGlzdGVuZXJzKHNpZylcbiAgICAgIGlmIChsaXN0ZW5lcnMubGVuZ3RoID09PSBlbWl0dGVyLmNvdW50KSB7XG4gICAgICAgIHVubG9hZCgpXG4gICAgICAgIGVtaXQoJ2V4aXQnLCBudWxsLCBzaWcpXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGVtaXQoJ2FmdGVyZXhpdCcsIG51bGwsIHNpZylcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgaWYgKGlzV2luICYmIHNpZyA9PT0gJ1NJR0hVUCcpIHtcbiAgICAgICAgICAvLyBcIlNJR0hVUFwiIHRocm93cyBhbiBgRU5PU1lTYCBlcnJvciBvbiBXaW5kb3dzLFxuICAgICAgICAgIC8vIHNvIHVzZSBhIHN1cHBvcnRlZCBzaWduYWwgaW5zdGVhZFxuICAgICAgICAgIHNpZyA9ICdTSUdJTlQnXG4gICAgICAgIH1cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcHJvY2Vzcy5raWxsKHByb2Nlc3MucGlkLCBzaWcpXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIG1vZHVsZS5leHBvcnRzLnNpZ25hbHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHNpZ25hbHNcbiAgfVxuXG4gIHZhciBsb2FkZWQgPSBmYWxzZVxuXG4gIHZhciBsb2FkID0gZnVuY3Rpb24gbG9hZCAoKSB7XG4gICAgaWYgKGxvYWRlZCB8fCAhcHJvY2Vzc09rKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGxvYWRlZCA9IHRydWVcblxuICAgIC8vIFRoaXMgaXMgdGhlIG51bWJlciBvZiBvblNpZ25hbEV4aXQncyB0aGF0IGFyZSBpbiBwbGF5LlxuICAgIC8vIEl0J3MgaW1wb3J0YW50IHNvIHRoYXQgd2UgY2FuIGNvdW50IHRoZSBjb3JyZWN0IG51bWJlciBvZlxuICAgIC8vIGxpc3RlbmVycyBvbiBzaWduYWxzLCBhbmQgZG9uJ3Qgd2FpdCBmb3IgdGhlIG90aGVyIG9uZSB0b1xuICAgIC8vIGhhbmRsZSBpdCBpbnN0ZWFkIG9mIHVzLlxuICAgIGVtaXR0ZXIuY291bnQgKz0gMVxuXG4gICAgc2lnbmFscyA9IHNpZ25hbHMuZmlsdGVyKGZ1bmN0aW9uIChzaWcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHByb2Nlc3Mub24oc2lnLCBzaWdMaXN0ZW5lcnNbc2lnXSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBwcm9jZXNzLmVtaXQgPSBwcm9jZXNzRW1pdFxuICAgIHByb2Nlc3MucmVhbGx5RXhpdCA9IHByb2Nlc3NSZWFsbHlFeGl0XG4gIH1cbiAgbW9kdWxlLmV4cG9ydHMubG9hZCA9IGxvYWRcblxuICB2YXIgb3JpZ2luYWxQcm9jZXNzUmVhbGx5RXhpdCA9IHByb2Nlc3MucmVhbGx5RXhpdFxuICB2YXIgcHJvY2Vzc1JlYWxseUV4aXQgPSBmdW5jdGlvbiBwcm9jZXNzUmVhbGx5RXhpdCAoY29kZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghcHJvY2Vzc09rKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHByb2Nlc3MuZXhpdENvZGUgPSBjb2RlIHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIDBcbiAgICBlbWl0KCdleGl0JywgcHJvY2Vzcy5leGl0Q29kZSwgbnVsbClcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGVtaXQoJ2FmdGVyZXhpdCcsIHByb2Nlc3MuZXhpdENvZGUsIG51bGwpXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBvcmlnaW5hbFByb2Nlc3NSZWFsbHlFeGl0LmNhbGwocHJvY2VzcywgcHJvY2Vzcy5leGl0Q29kZSlcbiAgfVxuXG4gIHZhciBvcmlnaW5hbFByb2Nlc3NFbWl0ID0gcHJvY2Vzcy5lbWl0XG4gIHZhciBwcm9jZXNzRW1pdCA9IGZ1bmN0aW9uIHByb2Nlc3NFbWl0IChldiwgYXJnKSB7XG4gICAgaWYgKGV2ID09PSAnZXhpdCcgJiYgcHJvY2Vzc09rKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChhcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gYXJnXG4gICAgICB9XG4gICAgICB2YXIgcmV0ID0gb3JpZ2luYWxQcm9jZXNzRW1pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgZW1pdCgnZXhpdCcsIHByb2Nlc3MuZXhpdENvZGUsIG51bGwpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgZW1pdCgnYWZ0ZXJleGl0JywgcHJvY2Vzcy5leGl0Q29kZSwgbnVsbClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICByZXR1cm4gcmV0XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcmlnaW5hbFByb2Nlc3NFbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICB9XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IG9uZXRpbWUgPSByZXF1aXJlKCdvbmV0aW1lJyk7XG5jb25zdCBzaWduYWxFeGl0ID0gcmVxdWlyZSgnc2lnbmFsLWV4aXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBvbmV0aW1lKCgpID0+IHtcblx0c2lnbmFsRXhpdCgoKSA9PiB7XG5cdFx0cHJvY2Vzcy5zdGRlcnIud3JpdGUoJ1xcdTAwMUJbPzI1aCcpO1xuXHR9LCB7YWx3YXlzTGFzdDogdHJ1ZX0pO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCByZXN0b3JlQ3Vyc29yID0gcmVxdWlyZSgncmVzdG9yZS1jdXJzb3InKTtcblxubGV0IGlzSGlkZGVuID0gZmFsc2U7XG5cbmV4cG9ydHMuc2hvdyA9ICh3cml0YWJsZVN0cmVhbSA9IHByb2Nlc3Muc3RkZXJyKSA9PiB7XG5cdGlmICghd3JpdGFibGVTdHJlYW0uaXNUVFkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpc0hpZGRlbiA9IGZhbHNlO1xuXHR3cml0YWJsZVN0cmVhbS53cml0ZSgnXFx1MDAxQls/MjVoJyk7XG59O1xuXG5leHBvcnRzLmhpZGUgPSAod3JpdGFibGVTdHJlYW0gPSBwcm9jZXNzLnN0ZGVycikgPT4ge1xuXHRpZiAoIXdyaXRhYmxlU3RyZWFtLmlzVFRZKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0cmVzdG9yZUN1cnNvcigpO1xuXHRpc0hpZGRlbiA9IHRydWU7XG5cdHdyaXRhYmxlU3RyZWFtLndyaXRlKCdcXHUwMDFCWz8yNWwnKTtcbn07XG5cbmV4cG9ydHMudG9nZ2xlID0gKGZvcmNlLCB3cml0YWJsZVN0cmVhbSkgPT4ge1xuXHRpZiAoZm9yY2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlzSGlkZGVuID0gZm9yY2U7XG5cdH1cblxuXHRpZiAoaXNIaWRkZW4pIHtcblx0XHRleHBvcnRzLnNob3cod3JpdGFibGVTdHJlYW0pO1xuXHR9IGVsc2Uge1xuXHRcdGV4cG9ydHMuaGlkZSh3cml0YWJsZVN0cmVhbSk7XG5cdH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHNwaW5uZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgcmVxdWlyZSgnLi9zcGlubmVycy5qc29uJykpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9leHRlbnNpb25zXG5cbmNvbnN0IHNwaW5uZXJzTGlzdCA9IE9iamVjdC5rZXlzKHNwaW5uZXJzKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KHNwaW5uZXJzLCAncmFuZG9tJywge1xuXHRnZXQoKSB7XG5cdFx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBzcGlubmVyc0xpc3QubGVuZ3RoKTtcblx0XHRjb25zdCBzcGlubmVyTmFtZSA9IHNwaW5uZXJzTGlzdFtyYW5kb21JbmRleF07XG5cdFx0cmV0dXJuIHNwaW5uZXJzW3NwaW5uZXJOYW1lXTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3Bpbm5lcnM7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gKCkgPT4ge1xuXHRpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIEJvb2xlYW4ocHJvY2Vzcy5lbnYuQ0kpIHx8XG5cdFx0Qm9vbGVhbihwcm9jZXNzLmVudi5XVF9TRVNTSU9OKSB8fCAvLyBXaW5kb3dzIFRlcm1pbmFsXG5cdFx0cHJvY2Vzcy5lbnYuVEVSTV9QUk9HUkFNID09PSAndnNjb2RlJyB8fFxuXHRcdHByb2Nlc3MuZW52LlRFUk0gPT09ICd4dGVybS0yNTZjb2xvcicgfHxcblx0XHRwcm9jZXNzLmVudi5URVJNID09PSAnYWxhY3JpdHR5Jztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCBjaGFsayA9IHJlcXVpcmUoJ2NoYWxrJyk7XG5jb25zdCBpc1VuaWNvZGVTdXBwb3J0ZWQgPSByZXF1aXJlKCdpcy11bmljb2RlLXN1cHBvcnRlZCcpO1xuXG5jb25zdCBtYWluID0ge1xuXHRpbmZvOiBjaGFsay5ibHVlKCfihLknKSxcblx0c3VjY2VzczogY2hhbGsuZ3JlZW4oJ+KclCcpLFxuXHR3YXJuaW5nOiBjaGFsay55ZWxsb3coJ+KaoCcpLFxuXHRlcnJvcjogY2hhbGsucmVkKCfinJYnKVxufTtcblxuY29uc3QgZmFsbGJhY2sgPSB7XG5cdGluZm86IGNoYWxrLmJsdWUoJ2knKSxcblx0c3VjY2VzczogY2hhbGsuZ3JlZW4oJ+KImicpLFxuXHR3YXJuaW5nOiBjaGFsay55ZWxsb3coJ+KAvCcpLFxuXHRlcnJvcjogY2hhbGsucmVkKCfDlycpXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVW5pY29kZVN1cHBvcnRlZCgpID8gbWFpbiA6IGZhbGxiYWNrO1xuIiwidmFyIGNsb25lID0gKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENsb25lcyAoY29waWVzKSBhbiBPYmplY3QgdXNpbmcgZGVlcCBjb3B5aW5nLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgY2lyY3VsYXIgcmVmZXJlbmNlcyBieSBkZWZhdWx0LCBidXQgaWYgeW91IGFyZSBjZXJ0YWluXG4gKiB0aGVyZSBhcmUgbm8gY2lyY3VsYXIgcmVmZXJlbmNlcyBpbiB5b3VyIG9iamVjdCwgeW91IGNhbiBzYXZlIHNvbWUgQ1BVIHRpbWVcbiAqIGJ5IGNhbGxpbmcgY2xvbmUob2JqLCBmYWxzZSkuXG4gKlxuICogQ2F1dGlvbjogaWYgYGNpcmN1bGFyYCBpcyBmYWxzZSBhbmQgYHBhcmVudGAgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlcyxcbiAqIHlvdXIgcHJvZ3JhbSBtYXkgZW50ZXIgYW4gaW5maW5pdGUgbG9vcCBhbmQgY3Jhc2guXG4gKlxuICogQHBhcmFtIGBwYXJlbnRgIC0gdGhlIG9iamVjdCB0byBiZSBjbG9uZWRcbiAqIEBwYXJhbSBgY2lyY3VsYXJgIC0gc2V0IHRvIHRydWUgaWYgdGhlIG9iamVjdCB0byBiZSBjbG9uZWQgbWF5IGNvbnRhaW5cbiAqICAgIGNpcmN1bGFyIHJlZmVyZW5jZXMuIChvcHRpb25hbCAtIHRydWUgYnkgZGVmYXVsdClcbiAqIEBwYXJhbSBgZGVwdGhgIC0gc2V0IHRvIGEgbnVtYmVyIGlmIHRoZSBvYmplY3QgaXMgb25seSB0byBiZSBjbG9uZWQgdG9cbiAqICAgIGEgcGFydGljdWxhciBkZXB0aC4gKG9wdGlvbmFsIC0gZGVmYXVsdHMgdG8gSW5maW5pdHkpXG4gKiBAcGFyYW0gYHByb3RvdHlwZWAgLSBzZXRzIHRoZSBwcm90b3R5cGUgdG8gYmUgdXNlZCB3aGVuIGNsb25pbmcgYW4gb2JqZWN0LlxuICogICAgKG9wdGlvbmFsIC0gZGVmYXVsdHMgdG8gcGFyZW50IHByb3RvdHlwZSkuXG4qL1xuZnVuY3Rpb24gY2xvbmUocGFyZW50LCBjaXJjdWxhciwgZGVwdGgsIHByb3RvdHlwZSkge1xuICB2YXIgZmlsdGVyO1xuICBpZiAodHlwZW9mIGNpcmN1bGFyID09PSAnb2JqZWN0Jykge1xuICAgIGRlcHRoID0gY2lyY3VsYXIuZGVwdGg7XG4gICAgcHJvdG90eXBlID0gY2lyY3VsYXIucHJvdG90eXBlO1xuICAgIGZpbHRlciA9IGNpcmN1bGFyLmZpbHRlcjtcbiAgICBjaXJjdWxhciA9IGNpcmN1bGFyLmNpcmN1bGFyXG4gIH1cbiAgLy8gbWFpbnRhaW4gdHdvIGFycmF5cyBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcywgd2hlcmUgY29ycmVzcG9uZGluZyBwYXJlbnRzXG4gIC8vIGFuZCBjaGlsZHJlbiBoYXZlIHRoZSBzYW1lIGluZGV4XG4gIHZhciBhbGxQYXJlbnRzID0gW107XG4gIHZhciBhbGxDaGlsZHJlbiA9IFtdO1xuXG4gIHZhciB1c2VCdWZmZXIgPSB0eXBlb2YgQnVmZmVyICE9ICd1bmRlZmluZWQnO1xuXG4gIGlmICh0eXBlb2YgY2lyY3VsYXIgPT0gJ3VuZGVmaW5lZCcpXG4gICAgY2lyY3VsYXIgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZGVwdGggPT0gJ3VuZGVmaW5lZCcpXG4gICAgZGVwdGggPSBJbmZpbml0eTtcblxuICAvLyByZWN1cnNlIHRoaXMgZnVuY3Rpb24gc28gd2UgZG9uJ3QgcmVzZXQgYWxsUGFyZW50cyBhbmQgYWxsQ2hpbGRyZW5cbiAgZnVuY3Rpb24gX2Nsb25lKHBhcmVudCwgZGVwdGgpIHtcbiAgICAvLyBjbG9uaW5nIG51bGwgYWx3YXlzIHJldHVybnMgbnVsbFxuICAgIGlmIChwYXJlbnQgPT09IG51bGwpXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGlmIChkZXB0aCA9PSAwKVxuICAgICAgcmV0dXJuIHBhcmVudDtcblxuICAgIHZhciBjaGlsZDtcbiAgICB2YXIgcHJvdG87XG4gICAgaWYgKHR5cGVvZiBwYXJlbnQgIT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuXG4gICAgaWYgKGNsb25lLl9faXNBcnJheShwYXJlbnQpKSB7XG4gICAgICBjaGlsZCA9IFtdO1xuICAgIH0gZWxzZSBpZiAoY2xvbmUuX19pc1JlZ0V4cChwYXJlbnQpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBSZWdFeHAocGFyZW50LnNvdXJjZSwgX19nZXRSZWdFeHBGbGFncyhwYXJlbnQpKTtcbiAgICAgIGlmIChwYXJlbnQubGFzdEluZGV4KSBjaGlsZC5sYXN0SW5kZXggPSBwYXJlbnQubGFzdEluZGV4O1xuICAgIH0gZWxzZSBpZiAoY2xvbmUuX19pc0RhdGUocGFyZW50KSkge1xuICAgICAgY2hpbGQgPSBuZXcgRGF0ZShwYXJlbnQuZ2V0VGltZSgpKTtcbiAgICB9IGVsc2UgaWYgKHVzZUJ1ZmZlciAmJiBCdWZmZXIuaXNCdWZmZXIocGFyZW50KSkge1xuICAgICAgaWYgKEJ1ZmZlci5hbGxvY1Vuc2FmZSkge1xuICAgICAgICAvLyBOb2RlLmpzID49IDQuNS4wXG4gICAgICAgIGNoaWxkID0gQnVmZmVyLmFsbG9jVW5zYWZlKHBhcmVudC5sZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT2xkZXIgTm9kZS5qcyB2ZXJzaW9uc1xuICAgICAgICBjaGlsZCA9IG5ldyBCdWZmZXIocGFyZW50Lmxlbmd0aCk7XG4gICAgICB9XG4gICAgICBwYXJlbnQuY29weShjaGlsZCk7XG4gICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvdG90eXBlID09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHBhcmVudCk7XG4gICAgICAgIGNoaWxkID0gT2JqZWN0LmNyZWF0ZShwcm90byk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY2hpbGQgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XG4gICAgICAgIHByb3RvID0gcHJvdG90eXBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaXJjdWxhcikge1xuICAgICAgdmFyIGluZGV4ID0gYWxsUGFyZW50cy5pbmRleE9mKHBhcmVudCk7XG5cbiAgICAgIGlmIChpbmRleCAhPSAtMSkge1xuICAgICAgICByZXR1cm4gYWxsQ2hpbGRyZW5baW5kZXhdO1xuICAgICAgfVxuICAgICAgYWxsUGFyZW50cy5wdXNoKHBhcmVudCk7XG4gICAgICBhbGxDaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpIGluIHBhcmVudCkge1xuICAgICAgdmFyIGF0dHJzO1xuICAgICAgaWYgKHByb3RvKSB7XG4gICAgICAgIGF0dHJzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgaSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhdHRycyAmJiBhdHRycy5zZXQgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNoaWxkW2ldID0gX2Nsb25lKHBhcmVudFtpXSwgZGVwdGggLSAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cblxuICByZXR1cm4gX2Nsb25lKHBhcmVudCwgZGVwdGgpO1xufVxuXG4vKipcbiAqIFNpbXBsZSBmbGF0IGNsb25lIHVzaW5nIHByb3RvdHlwZSwgYWNjZXB0cyBvbmx5IG9iamVjdHMsIHVzZWZ1bGwgZm9yIHByb3BlcnR5XG4gKiBvdmVycmlkZSBvbiBGTEFUIGNvbmZpZ3VyYXRpb24gb2JqZWN0IChubyBuZXN0ZWQgcHJvcHMpLlxuICpcbiAqIFVTRSBXSVRIIENBVVRJT04hIFRoaXMgbWF5IG5vdCBiZWhhdmUgYXMgeW91IHdpc2ggaWYgeW91IGRvIG5vdCBrbm93IGhvdyB0aGlzXG4gKiB3b3Jrcy5cbiAqL1xuY2xvbmUuY2xvbmVQcm90b3R5cGUgPSBmdW5jdGlvbiBjbG9uZVByb3RvdHlwZShwYXJlbnQpIHtcbiAgaWYgKHBhcmVudCA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcblxuICB2YXIgYyA9IGZ1bmN0aW9uICgpIHt9O1xuICBjLnByb3RvdHlwZSA9IHBhcmVudDtcbiAgcmV0dXJuIG5ldyBjKCk7XG59O1xuXG4vLyBwcml2YXRlIHV0aWxpdHkgZnVuY3Rpb25zXG5cbmZ1bmN0aW9uIF9fb2JqVG9TdHIobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufTtcbmNsb25lLl9fb2JqVG9TdHIgPSBfX29ialRvU3RyO1xuXG5mdW5jdGlvbiBfX2lzRGF0ZShvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX19vYmpUb1N0cihvKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufTtcbmNsb25lLl9faXNEYXRlID0gX19pc0RhdGU7XG5cbmZ1bmN0aW9uIF9faXNBcnJheShvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX19vYmpUb1N0cihvKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG5jbG9uZS5fX2lzQXJyYXkgPSBfX2lzQXJyYXk7XG5cbmZ1bmN0aW9uIF9faXNSZWdFeHAobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufTtcbmNsb25lLl9faXNSZWdFeHAgPSBfX2lzUmVnRXhwO1xuXG5mdW5jdGlvbiBfX2dldFJlZ0V4cEZsYWdzKHJlKSB7XG4gIHZhciBmbGFncyA9ICcnO1xuICBpZiAocmUuZ2xvYmFsKSBmbGFncyArPSAnZyc7XG4gIGlmIChyZS5pZ25vcmVDYXNlKSBmbGFncyArPSAnaSc7XG4gIGlmIChyZS5tdWx0aWxpbmUpIGZsYWdzICs9ICdtJztcbiAgcmV0dXJuIGZsYWdzO1xufTtcbmNsb25lLl9fZ2V0UmVnRXhwRmxhZ3MgPSBfX2dldFJlZ0V4cEZsYWdzO1xuXG5yZXR1cm4gY2xvbmU7XG59KSgpO1xuXG5pZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBjbG9uZTtcbn1cbiIsInZhciBjbG9uZSA9IHJlcXVpcmUoJ2Nsb25lJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3B0aW9ucywgZGVmYXVsdHMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgT2JqZWN0LmtleXMoZGVmYXVsdHMpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zW2tleV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBvcHRpb25zW2tleV0gPSBjbG9uZShkZWZhdWx0c1trZXldKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBvcHRpb25zO1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IFtcbiAgICBbIDB4MDMwMCwgMHgwMzZGIF0sIFsgMHgwNDgzLCAweDA0ODYgXSwgWyAweDA0ODgsIDB4MDQ4OSBdLFxuICAgIFsgMHgwNTkxLCAweDA1QkQgXSwgWyAweDA1QkYsIDB4MDVCRiBdLCBbIDB4MDVDMSwgMHgwNUMyIF0sXG4gICAgWyAweDA1QzQsIDB4MDVDNSBdLCBbIDB4MDVDNywgMHgwNUM3IF0sIFsgMHgwNjAwLCAweDA2MDMgXSxcbiAgICBbIDB4MDYxMCwgMHgwNjE1IF0sIFsgMHgwNjRCLCAweDA2NUUgXSwgWyAweDA2NzAsIDB4MDY3MCBdLFxuICAgIFsgMHgwNkQ2LCAweDA2RTQgXSwgWyAweDA2RTcsIDB4MDZFOCBdLCBbIDB4MDZFQSwgMHgwNkVEIF0sXG4gICAgWyAweDA3MEYsIDB4MDcwRiBdLCBbIDB4MDcxMSwgMHgwNzExIF0sIFsgMHgwNzMwLCAweDA3NEEgXSxcbiAgICBbIDB4MDdBNiwgMHgwN0IwIF0sIFsgMHgwN0VCLCAweDA3RjMgXSwgWyAweDA5MDEsIDB4MDkwMiBdLFxuICAgIFsgMHgwOTNDLCAweDA5M0MgXSwgWyAweDA5NDEsIDB4MDk0OCBdLCBbIDB4MDk0RCwgMHgwOTREIF0sXG4gICAgWyAweDA5NTEsIDB4MDk1NCBdLCBbIDB4MDk2MiwgMHgwOTYzIF0sIFsgMHgwOTgxLCAweDA5ODEgXSxcbiAgICBbIDB4MDlCQywgMHgwOUJDIF0sIFsgMHgwOUMxLCAweDA5QzQgXSwgWyAweDA5Q0QsIDB4MDlDRCBdLFxuICAgIFsgMHgwOUUyLCAweDA5RTMgXSwgWyAweDBBMDEsIDB4MEEwMiBdLCBbIDB4MEEzQywgMHgwQTNDIF0sXG4gICAgWyAweDBBNDEsIDB4MEE0MiBdLCBbIDB4MEE0NywgMHgwQTQ4IF0sIFsgMHgwQTRCLCAweDBBNEQgXSxcbiAgICBbIDB4MEE3MCwgMHgwQTcxIF0sIFsgMHgwQTgxLCAweDBBODIgXSwgWyAweDBBQkMsIDB4MEFCQyBdLFxuICAgIFsgMHgwQUMxLCAweDBBQzUgXSwgWyAweDBBQzcsIDB4MEFDOCBdLCBbIDB4MEFDRCwgMHgwQUNEIF0sXG4gICAgWyAweDBBRTIsIDB4MEFFMyBdLCBbIDB4MEIwMSwgMHgwQjAxIF0sIFsgMHgwQjNDLCAweDBCM0MgXSxcbiAgICBbIDB4MEIzRiwgMHgwQjNGIF0sIFsgMHgwQjQxLCAweDBCNDMgXSwgWyAweDBCNEQsIDB4MEI0RCBdLFxuICAgIFsgMHgwQjU2LCAweDBCNTYgXSwgWyAweDBCODIsIDB4MEI4MiBdLCBbIDB4MEJDMCwgMHgwQkMwIF0sXG4gICAgWyAweDBCQ0QsIDB4MEJDRCBdLCBbIDB4MEMzRSwgMHgwQzQwIF0sIFsgMHgwQzQ2LCAweDBDNDggXSxcbiAgICBbIDB4MEM0QSwgMHgwQzREIF0sIFsgMHgwQzU1LCAweDBDNTYgXSwgWyAweDBDQkMsIDB4MENCQyBdLFxuICAgIFsgMHgwQ0JGLCAweDBDQkYgXSwgWyAweDBDQzYsIDB4MENDNiBdLCBbIDB4MENDQywgMHgwQ0NEIF0sXG4gICAgWyAweDBDRTIsIDB4MENFMyBdLCBbIDB4MEQ0MSwgMHgwRDQzIF0sIFsgMHgwRDRELCAweDBENEQgXSxcbiAgICBbIDB4MERDQSwgMHgwRENBIF0sIFsgMHgwREQyLCAweDBERDQgXSwgWyAweDBERDYsIDB4MERENiBdLFxuICAgIFsgMHgwRTMxLCAweDBFMzEgXSwgWyAweDBFMzQsIDB4MEUzQSBdLCBbIDB4MEU0NywgMHgwRTRFIF0sXG4gICAgWyAweDBFQjEsIDB4MEVCMSBdLCBbIDB4MEVCNCwgMHgwRUI5IF0sIFsgMHgwRUJCLCAweDBFQkMgXSxcbiAgICBbIDB4MEVDOCwgMHgwRUNEIF0sIFsgMHgwRjE4LCAweDBGMTkgXSwgWyAweDBGMzUsIDB4MEYzNSBdLFxuICAgIFsgMHgwRjM3LCAweDBGMzcgXSwgWyAweDBGMzksIDB4MEYzOSBdLCBbIDB4MEY3MSwgMHgwRjdFIF0sXG4gICAgWyAweDBGODAsIDB4MEY4NCBdLCBbIDB4MEY4NiwgMHgwRjg3IF0sIFsgMHgwRjkwLCAweDBGOTcgXSxcbiAgICBbIDB4MEY5OSwgMHgwRkJDIF0sIFsgMHgwRkM2LCAweDBGQzYgXSwgWyAweDEwMkQsIDB4MTAzMCBdLFxuICAgIFsgMHgxMDMyLCAweDEwMzIgXSwgWyAweDEwMzYsIDB4MTAzNyBdLCBbIDB4MTAzOSwgMHgxMDM5IF0sXG4gICAgWyAweDEwNTgsIDB4MTA1OSBdLCBbIDB4MTE2MCwgMHgxMUZGIF0sIFsgMHgxMzVGLCAweDEzNUYgXSxcbiAgICBbIDB4MTcxMiwgMHgxNzE0IF0sIFsgMHgxNzMyLCAweDE3MzQgXSwgWyAweDE3NTIsIDB4MTc1MyBdLFxuICAgIFsgMHgxNzcyLCAweDE3NzMgXSwgWyAweDE3QjQsIDB4MTdCNSBdLCBbIDB4MTdCNywgMHgxN0JEIF0sXG4gICAgWyAweDE3QzYsIDB4MTdDNiBdLCBbIDB4MTdDOSwgMHgxN0QzIF0sIFsgMHgxN0RELCAweDE3REQgXSxcbiAgICBbIDB4MTgwQiwgMHgxODBEIF0sIFsgMHgxOEE5LCAweDE4QTkgXSwgWyAweDE5MjAsIDB4MTkyMiBdLFxuICAgIFsgMHgxOTI3LCAweDE5MjggXSwgWyAweDE5MzIsIDB4MTkzMiBdLCBbIDB4MTkzOSwgMHgxOTNCIF0sXG4gICAgWyAweDFBMTcsIDB4MUExOCBdLCBbIDB4MUIwMCwgMHgxQjAzIF0sIFsgMHgxQjM0LCAweDFCMzQgXSxcbiAgICBbIDB4MUIzNiwgMHgxQjNBIF0sIFsgMHgxQjNDLCAweDFCM0MgXSwgWyAweDFCNDIsIDB4MUI0MiBdLFxuICAgIFsgMHgxQjZCLCAweDFCNzMgXSwgWyAweDFEQzAsIDB4MURDQSBdLCBbIDB4MURGRSwgMHgxREZGIF0sXG4gICAgWyAweDIwMEIsIDB4MjAwRiBdLCBbIDB4MjAyQSwgMHgyMDJFIF0sIFsgMHgyMDYwLCAweDIwNjMgXSxcbiAgICBbIDB4MjA2QSwgMHgyMDZGIF0sIFsgMHgyMEQwLCAweDIwRUYgXSwgWyAweDMwMkEsIDB4MzAyRiBdLFxuICAgIFsgMHgzMDk5LCAweDMwOUEgXSwgWyAweEE4MDYsIDB4QTgwNiBdLCBbIDB4QTgwQiwgMHhBODBCIF0sXG4gICAgWyAweEE4MjUsIDB4QTgyNiBdLCBbIDB4RkIxRSwgMHhGQjFFIF0sIFsgMHhGRTAwLCAweEZFMEYgXSxcbiAgICBbIDB4RkUyMCwgMHhGRTIzIF0sIFsgMHhGRUZGLCAweEZFRkYgXSwgWyAweEZGRjksIDB4RkZGQiBdLFxuICAgIFsgMHgxMEEwMSwgMHgxMEEwMyBdLCBbIDB4MTBBMDUsIDB4MTBBMDYgXSwgWyAweDEwQTBDLCAweDEwQTBGIF0sXG4gICAgWyAweDEwQTM4LCAweDEwQTNBIF0sIFsgMHgxMEEzRiwgMHgxMEEzRiBdLCBbIDB4MUQxNjcsIDB4MUQxNjkgXSxcbiAgICBbIDB4MUQxNzMsIDB4MUQxODIgXSwgWyAweDFEMTg1LCAweDFEMThCIF0sIFsgMHgxRDFBQSwgMHgxRDFBRCBdLFxuICAgIFsgMHgxRDI0MiwgMHgxRDI0NCBdLCBbIDB4RTAwMDEsIDB4RTAwMDEgXSwgWyAweEUwMDIwLCAweEUwMDdGIF0sXG4gICAgWyAweEUwMTAwLCAweEUwMUVGIF1cbl1cbiIsIlwidXNlIHN0cmljdFwiXG5cbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJ2RlZmF1bHRzJylcbnZhciBjb21iaW5pbmcgPSByZXF1aXJlKCcuL2NvbWJpbmluZycpXG5cbnZhciBERUZBVUxUUyA9IHtcbiAgbnVsOiAwLFxuICBjb250cm9sOiAwXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gd2N3aWR0aChzdHIpIHtcbiAgcmV0dXJuIHdjc3dpZHRoKHN0ciwgREVGQVVMVFMpXG59XG5cbm1vZHVsZS5leHBvcnRzLmNvbmZpZyA9IGZ1bmN0aW9uKG9wdHMpIHtcbiAgb3B0cyA9IGRlZmF1bHRzKG9wdHMgfHwge30sIERFRkFVTFRTKVxuICByZXR1cm4gZnVuY3Rpb24gd2N3aWR0aChzdHIpIHtcbiAgICByZXR1cm4gd2Nzd2lkdGgoc3RyLCBvcHRzKVxuICB9XG59XG5cbi8qXG4gKiAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgZGVmaW5lIHRoZSBjb2x1bW4gd2lkdGggb2YgYW4gSVNPIDEwNjQ2XG4gKiAgY2hhcmFjdGVyIGFzIGZvbGxvd3M6XG4gKiAgLSBUaGUgbnVsbCBjaGFyYWN0ZXIgKFUrMDAwMCkgaGFzIGEgY29sdW1uIHdpZHRoIG9mIDAuXG4gKiAgLSBPdGhlciBDMC9DMSBjb250cm9sIGNoYXJhY3RlcnMgYW5kIERFTCB3aWxsIGxlYWQgdG8gYSByZXR1cm4gdmFsdWVcbiAqICAgIG9mIC0xLlxuICogIC0gTm9uLXNwYWNpbmcgYW5kIGVuY2xvc2luZyBjb21iaW5pbmcgY2hhcmFjdGVycyAoZ2VuZXJhbCBjYXRlZ29yeVxuICogICAgY29kZSBNbiBvciBNZSBpbiB0aGVcbiAqICAgIFVuaWNvZGUgZGF0YWJhc2UpIGhhdmUgYSBjb2x1bW4gd2lkdGggb2YgMC5cbiAqICAtIFNPRlQgSFlQSEVOIChVKzAwQUQpIGhhcyBhIGNvbHVtbiB3aWR0aCBvZiAxLlxuICogIC0gT3RoZXIgZm9ybWF0IGNoYXJhY3RlcnMgKGdlbmVyYWwgY2F0ZWdvcnkgY29kZSBDZiBpbiB0aGUgVW5pY29kZVxuICogICAgZGF0YWJhc2UpIGFuZCBaRVJPIFdJRFRIXG4gKiAgICBTUEFDRSAoVSsyMDBCKSBoYXZlIGEgY29sdW1uIHdpZHRoIG9mIDAuXG4gKiAgLSBIYW5ndWwgSmFtbyBtZWRpYWwgdm93ZWxzIGFuZCBmaW5hbCBjb25zb25hbnRzIChVKzExNjAtVSsxMUZGKVxuICogICAgaGF2ZSBhIGNvbHVtbiB3aWR0aCBvZiAwLlxuICogIC0gU3BhY2luZyBjaGFyYWN0ZXJzIGluIHRoZSBFYXN0IEFzaWFuIFdpZGUgKFcpIG9yIEVhc3QgQXNpYW5cbiAqICAgIEZ1bGwtd2lkdGggKEYpIGNhdGVnb3J5IGFzXG4gKiAgICBkZWZpbmVkIGluIFVuaWNvZGUgVGVjaG5pY2FsIFJlcG9ydCAjMTEgaGF2ZSBhIGNvbHVtbiB3aWR0aCBvZiAyLlxuICogIC0gQWxsIHJlbWFpbmluZyBjaGFyYWN0ZXJzIChpbmNsdWRpbmcgYWxsIHByaW50YWJsZSBJU08gODg1OS0xIGFuZFxuICogICAgV0dMNCBjaGFyYWN0ZXJzLCBVbmljb2RlIGNvbnRyb2wgY2hhcmFjdGVycywgZXRjLikgaGF2ZSBhIGNvbHVtblxuICogICAgd2lkdGggb2YgMS5cbiAqICBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCBjaGFyYWN0ZXJzIGFyZSBlbmNvZGVkIGluIElTTyAxMDY0Ni5cbiovXG5cbmZ1bmN0aW9uIHdjc3dpZHRoKHN0ciwgb3B0cykge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHJldHVybiB3Y3dpZHRoKHN0ciwgb3B0cylcblxuICB2YXIgcyA9IDBcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbiA9IHdjd2lkdGgoc3RyLmNoYXJDb2RlQXQoaSksIG9wdHMpXG4gICAgaWYgKG4gPCAwKSByZXR1cm4gLTFcbiAgICBzICs9IG5cbiAgfVxuXG4gIHJldHVybiBzXG59XG5cbmZ1bmN0aW9uIHdjd2lkdGgodWNzLCBvcHRzKSB7XG4gIC8vIHRlc3QgZm9yIDgtYml0IGNvbnRyb2wgY2hhcmFjdGVyc1xuICBpZiAodWNzID09PSAwKSByZXR1cm4gb3B0cy5udWxcbiAgaWYgKHVjcyA8IDMyIHx8ICh1Y3MgPj0gMHg3ZiAmJiB1Y3MgPCAweGEwKSkgcmV0dXJuIG9wdHMuY29udHJvbFxuXG4gIC8vIGJpbmFyeSBzZWFyY2ggaW4gdGFibGUgb2Ygbm9uLXNwYWNpbmcgY2hhcmFjdGVyc1xuICBpZiAoYmlzZWFyY2godWNzKSkgcmV0dXJuIDBcblxuICAvLyBpZiB3ZSBhcnJpdmUgaGVyZSwgdWNzIGlzIG5vdCBhIGNvbWJpbmluZyBvciBDMC9DMSBjb250cm9sIGNoYXJhY3RlclxuICByZXR1cm4gMSArXG4gICAgICAodWNzID49IDB4MTEwMCAmJlxuICAgICAgICh1Y3MgPD0gMHgxMTVmIHx8ICAgICAgICAgICAgICAgICAgICAgICAvLyBIYW5ndWwgSmFtbyBpbml0LiBjb25zb25hbnRzXG4gICAgICAgIHVjcyA9PSAweDIzMjkgfHwgdWNzID09IDB4MjMyYSB8fFxuICAgICAgICAodWNzID49IDB4MmU4MCAmJiB1Y3MgPD0gMHhhNGNmICYmXG4gICAgICAgICB1Y3MgIT0gMHgzMDNmKSB8fCAgICAgICAgICAgICAgICAgICAgIC8vIENKSyAuLi4gWWlcbiAgICAgICAgKHVjcyA+PSAweGFjMDAgJiYgdWNzIDw9IDB4ZDdhMykgfHwgICAgLy8gSGFuZ3VsIFN5bGxhYmxlc1xuICAgICAgICAodWNzID49IDB4ZjkwMCAmJiB1Y3MgPD0gMHhmYWZmKSB8fCAgICAvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzXG4gICAgICAgICh1Y3MgPj0gMHhmZTEwICYmIHVjcyA8PSAweGZlMTkpIHx8ICAgIC8vIFZlcnRpY2FsIGZvcm1zXG4gICAgICAgICh1Y3MgPj0gMHhmZTMwICYmIHVjcyA8PSAweGZlNmYpIHx8ICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IEZvcm1zXG4gICAgICAgICh1Y3MgPj0gMHhmZjAwICYmIHVjcyA8PSAweGZmNjApIHx8ICAgIC8vIEZ1bGx3aWR0aCBGb3Jtc1xuICAgICAgICAodWNzID49IDB4ZmZlMCAmJiB1Y3MgPD0gMHhmZmU2KSB8fFxuICAgICAgICAodWNzID49IDB4MjAwMDAgJiYgdWNzIDw9IDB4MmZmZmQpIHx8XG4gICAgICAgICh1Y3MgPj0gMHgzMDAwMCAmJiB1Y3MgPD0gMHgzZmZmZCkpKTtcbn1cblxuZnVuY3Rpb24gYmlzZWFyY2godWNzKSB7XG4gIHZhciBtaW4gPSAwXG4gIHZhciBtYXggPSBjb21iaW5pbmcubGVuZ3RoIC0gMVxuICB2YXIgbWlkXG5cbiAgaWYgKHVjcyA8IGNvbWJpbmluZ1swXVswXSB8fCB1Y3MgPiBjb21iaW5pbmdbbWF4XVsxXSkgcmV0dXJuIGZhbHNlXG5cbiAgd2hpbGUgKG1heCA+PSBtaW4pIHtcbiAgICBtaWQgPSBNYXRoLmZsb29yKChtaW4gKyBtYXgpIC8gMilcbiAgICBpZiAodWNzID4gY29tYmluaW5nW21pZF1bMV0pIG1pbiA9IG1pZCArIDFcbiAgICBlbHNlIGlmICh1Y3MgPCBjb21iaW5pbmdbbWlkXVswXSkgbWF4ID0gbWlkIC0gMVxuICAgIGVsc2UgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICh7c3RyZWFtID0gcHJvY2Vzcy5zdGRvdXR9ID0ge30pID0+IHtcblx0cmV0dXJuIEJvb2xlYW4oXG5cdFx0c3RyZWFtICYmIHN0cmVhbS5pc1RUWSAmJlxuXHRcdHByb2Nlc3MuZW52LlRFUk0gIT09ICdkdW1iJyAmJlxuXHRcdCEoJ0NJJyBpbiBwcm9jZXNzLmVudilcblx0KTtcbn07XG4iLCJpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgLy8gaW1wbGVtZW50YXRpb24gZnJvbSBzdGFuZGFyZCBub2RlLmpzICd1dGlsJyBtb2R1bGVcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgY3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICB2YWx1ZTogY3RvcixcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGlmIChzdXBlckN0b3IpIHtcbiAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgICB2YXIgVGVtcEN0b3IgPSBmdW5jdGlvbiAoKSB7fVxuICAgICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZVxuICAgICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgICAgY3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yXG4gICAgfVxuICB9XG59XG4iLCJ0cnkge1xuICB2YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHR5cGVvZiB1dGlsLmluaGVyaXRzICE9PSAnZnVuY3Rpb24nKSB0aHJvdyAnJztcbiAgbW9kdWxlLmV4cG9ydHMgPSB1dGlsLmluaGVyaXRzO1xufSBjYXRjaCAoZSkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vaW5oZXJpdHNfYnJvd3Nlci5qcycpO1xufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3Qgc3ltYm9sID0gU3ltYm9sLmZvcignQnVmZmVyTGlzdCcpXG5cbmZ1bmN0aW9uIEJ1ZmZlckxpc3QgKGJ1Zikge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQnVmZmVyTGlzdCkpIHtcbiAgICByZXR1cm4gbmV3IEJ1ZmZlckxpc3QoYnVmKVxuICB9XG5cbiAgQnVmZmVyTGlzdC5faW5pdC5jYWxsKHRoaXMsIGJ1Zilcbn1cblxuQnVmZmVyTGlzdC5faW5pdCA9IGZ1bmN0aW9uIF9pbml0IChidWYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHN5bWJvbCwgeyB2YWx1ZTogdHJ1ZSB9KVxuXG4gIHRoaXMuX2J1ZnMgPSBbXVxuICB0aGlzLmxlbmd0aCA9IDBcblxuICBpZiAoYnVmKSB7XG4gICAgdGhpcy5hcHBlbmQoYnVmKVxuICB9XG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLl9uZXcgPSBmdW5jdGlvbiBfbmV3IChidWYpIHtcbiAgcmV0dXJuIG5ldyBCdWZmZXJMaXN0KGJ1Zilcbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuX29mZnNldCA9IGZ1bmN0aW9uIF9vZmZzZXQgKG9mZnNldCkge1xuICBpZiAob2Zmc2V0ID09PSAwKSB7XG4gICAgcmV0dXJuIFswLCAwXVxuICB9XG5cbiAgbGV0IHRvdCA9IDBcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2J1ZnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBfdCA9IHRvdCArIHRoaXMuX2J1ZnNbaV0ubGVuZ3RoXG4gICAgaWYgKG9mZnNldCA8IF90IHx8IGkgPT09IHRoaXMuX2J1ZnMubGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuIFtpLCBvZmZzZXQgLSB0b3RdXG4gICAgfVxuICAgIHRvdCA9IF90XG4gIH1cbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuX3JldmVyc2VPZmZzZXQgPSBmdW5jdGlvbiAoYmxPZmZzZXQpIHtcbiAgY29uc3QgYnVmZmVySWQgPSBibE9mZnNldFswXVxuICBsZXQgb2Zmc2V0ID0gYmxPZmZzZXRbMV1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1ZmZlcklkOyBpKyspIHtcbiAgICBvZmZzZXQgKz0gdGhpcy5fYnVmc1tpXS5sZW5ndGhcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRcbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0IChpbmRleCkge1xuICBpZiAoaW5kZXggPiB0aGlzLmxlbmd0aCB8fCBpbmRleCA8IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICBjb25zdCBvZmZzZXQgPSB0aGlzLl9vZmZzZXQoaW5kZXgpXG5cbiAgcmV0dXJuIHRoaXMuX2J1ZnNbb2Zmc2V0WzBdXVtvZmZzZXRbMV1dXG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ251bWJlcicgJiYgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmICh0eXBlb2YgZW5kID09PSAnbnVtYmVyJyAmJiBlbmQgPCAwKSB7XG4gICAgZW5kICs9IHRoaXMubGVuZ3RoXG4gIH1cblxuICByZXR1cm4gdGhpcy5jb3B5KG51bGwsIDAsIHN0YXJ0LCBlbmQpXG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5IChkc3QsIGRzdFN0YXJ0LCBzcmNTdGFydCwgc3JjRW5kKSB7XG4gIGlmICh0eXBlb2Ygc3JjU3RhcnQgIT09ICdudW1iZXInIHx8IHNyY1N0YXJ0IDwgMCkge1xuICAgIHNyY1N0YXJ0ID0gMFxuICB9XG5cbiAgaWYgKHR5cGVvZiBzcmNFbmQgIT09ICdudW1iZXInIHx8IHNyY0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgc3JjRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzcmNTdGFydCA+PSB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiBkc3QgfHwgQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICBpZiAoc3JjRW5kIDw9IDApIHtcbiAgICByZXR1cm4gZHN0IHx8IEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgY29uc3QgY29weSA9ICEhZHN0XG4gIGNvbnN0IG9mZiA9IHRoaXMuX29mZnNldChzcmNTdGFydClcbiAgY29uc3QgbGVuID0gc3JjRW5kIC0gc3JjU3RhcnRcbiAgbGV0IGJ5dGVzID0gbGVuXG4gIGxldCBidWZvZmYgPSAoY29weSAmJiBkc3RTdGFydCkgfHwgMFxuICBsZXQgc3RhcnQgPSBvZmZbMV1cblxuICAvLyBjb3B5L3NsaWNlIGV2ZXJ5dGhpbmdcbiAgaWYgKHNyY1N0YXJ0ID09PSAwICYmIHNyY0VuZCA9PT0gdGhpcy5sZW5ndGgpIHtcbiAgICBpZiAoIWNvcHkpIHtcbiAgICAgIC8vIHNsaWNlLCBidXQgZnVsbCBjb25jYXQgaWYgbXVsdGlwbGUgYnVmZmVyc1xuICAgICAgcmV0dXJuIHRoaXMuX2J1ZnMubGVuZ3RoID09PSAxXG4gICAgICAgID8gdGhpcy5fYnVmc1swXVxuICAgICAgICA6IEJ1ZmZlci5jb25jYXQodGhpcy5fYnVmcywgdGhpcy5sZW5ndGgpXG4gICAgfVxuXG4gICAgLy8gY29weSwgbmVlZCB0byBjb3B5IGluZGl2aWR1YWwgYnVmZmVyc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fYnVmcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5fYnVmc1tpXS5jb3B5KGRzdCwgYnVmb2ZmKVxuICAgICAgYnVmb2ZmICs9IHRoaXMuX2J1ZnNbaV0ubGVuZ3RoXG4gICAgfVxuXG4gICAgcmV0dXJuIGRzdFxuICB9XG5cbiAgLy8gZWFzeSwgY2hlYXAgY2FzZSB3aGVyZSBpdCdzIGEgc3Vic2V0IG9mIG9uZSBvZiB0aGUgYnVmZmVyc1xuICBpZiAoYnl0ZXMgPD0gdGhpcy5fYnVmc1tvZmZbMF1dLmxlbmd0aCAtIHN0YXJ0KSB7XG4gICAgcmV0dXJuIGNvcHlcbiAgICAgID8gdGhpcy5fYnVmc1tvZmZbMF1dLmNvcHkoZHN0LCBkc3RTdGFydCwgc3RhcnQsIHN0YXJ0ICsgYnl0ZXMpXG4gICAgICA6IHRoaXMuX2J1ZnNbb2ZmWzBdXS5zbGljZShzdGFydCwgc3RhcnQgKyBieXRlcylcbiAgfVxuXG4gIGlmICghY29weSkge1xuICAgIC8vIGEgc2xpY2UsIHdlIG5lZWQgc29tZXRoaW5nIHRvIGNvcHkgaW4gdG9cbiAgICBkc3QgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuKVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IG9mZlswXTsgaSA8IHRoaXMuX2J1ZnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBsID0gdGhpcy5fYnVmc1tpXS5sZW5ndGggLSBzdGFydFxuXG4gICAgaWYgKGJ5dGVzID4gbCkge1xuICAgICAgdGhpcy5fYnVmc1tpXS5jb3B5KGRzdCwgYnVmb2ZmLCBzdGFydClcbiAgICAgIGJ1Zm9mZiArPSBsXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2J1ZnNbaV0uY29weShkc3QsIGJ1Zm9mZiwgc3RhcnQsIHN0YXJ0ICsgYnl0ZXMpXG4gICAgICBidWZvZmYgKz0gbFxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBieXRlcyAtPSBsXG5cbiAgICBpZiAoc3RhcnQpIHtcbiAgICAgIHN0YXJ0ID0gMFxuICAgIH1cbiAgfVxuXG4gIC8vIHNhZmVndWFyZCBzbyB0aGF0IHdlIGRvbid0IHJldHVybiB1bmluaXRpYWxpemVkIG1lbW9yeVxuICBpZiAoZHN0Lmxlbmd0aCA+IGJ1Zm9mZikgcmV0dXJuIGRzdC5zbGljZSgwLCBidWZvZmYpXG5cbiAgcmV0dXJuIGRzdFxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5zaGFsbG93U2xpY2UgPSBmdW5jdGlvbiBzaGFsbG93U2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgc3RhcnQgPSBzdGFydCB8fCAwXG4gIGVuZCA9IHR5cGVvZiBlbmQgIT09ICdudW1iZXInID8gdGhpcy5sZW5ndGggOiBlbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IGVuZCkge1xuICAgIHJldHVybiB0aGlzLl9uZXcoKVxuICB9XG5cbiAgY29uc3Qgc3RhcnRPZmZzZXQgPSB0aGlzLl9vZmZzZXQoc3RhcnQpXG4gIGNvbnN0IGVuZE9mZnNldCA9IHRoaXMuX29mZnNldChlbmQpXG4gIGNvbnN0IGJ1ZmZlcnMgPSB0aGlzLl9idWZzLnNsaWNlKHN0YXJ0T2Zmc2V0WzBdLCBlbmRPZmZzZXRbMF0gKyAxKVxuXG4gIGlmIChlbmRPZmZzZXRbMV0gPT09IDApIHtcbiAgICBidWZmZXJzLnBvcCgpXG4gIH0gZWxzZSB7XG4gICAgYnVmZmVyc1tidWZmZXJzLmxlbmd0aCAtIDFdID0gYnVmZmVyc1tidWZmZXJzLmxlbmd0aCAtIDFdLnNsaWNlKDAsIGVuZE9mZnNldFsxXSlcbiAgfVxuXG4gIGlmIChzdGFydE9mZnNldFsxXSAhPT0gMCkge1xuICAgIGJ1ZmZlcnNbMF0gPSBidWZmZXJzWzBdLnNsaWNlKHN0YXJ0T2Zmc2V0WzFdKVxuICB9XG5cbiAgcmV0dXJuIHRoaXMuX25ldyhidWZmZXJzKVxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICByZXR1cm4gdGhpcy5zbGljZShzdGFydCwgZW5kKS50b1N0cmluZyhlbmNvZGluZylcbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuY29uc3VtZSA9IGZ1bmN0aW9uIGNvbnN1bWUgKGJ5dGVzKSB7XG4gIC8vIGZpcnN0LCBub3JtYWxpemUgdGhlIGFyZ3VtZW50LCBpbiBhY2NvcmRhbmNlIHdpdGggaG93IEJ1ZmZlciBkb2VzIGl0XG4gIGJ5dGVzID0gTWF0aC50cnVuYyhieXRlcylcbiAgLy8gZG8gbm90aGluZyBpZiBub3QgYSBwb3NpdGl2ZSBudW1iZXJcbiAgaWYgKE51bWJlci5pc05hTihieXRlcykgfHwgYnl0ZXMgPD0gMCkgcmV0dXJuIHRoaXNcblxuICB3aGlsZSAodGhpcy5fYnVmcy5sZW5ndGgpIHtcbiAgICBpZiAoYnl0ZXMgPj0gdGhpcy5fYnVmc1swXS5sZW5ndGgpIHtcbiAgICAgIGJ5dGVzIC09IHRoaXMuX2J1ZnNbMF0ubGVuZ3RoXG4gICAgICB0aGlzLmxlbmd0aCAtPSB0aGlzLl9idWZzWzBdLmxlbmd0aFxuICAgICAgdGhpcy5fYnVmcy5zaGlmdCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2J1ZnNbMF0gPSB0aGlzLl9idWZzWzBdLnNsaWNlKGJ5dGVzKVxuICAgICAgdGhpcy5sZW5ndGggLT0gYnl0ZXNcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuZHVwbGljYXRlID0gZnVuY3Rpb24gZHVwbGljYXRlICgpIHtcbiAgY29uc3QgY29weSA9IHRoaXMuX25ldygpXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9idWZzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29weS5hcHBlbmQodGhpcy5fYnVmc1tpXSlcbiAgfVxuXG4gIHJldHVybiBjb3B5XG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZCAoYnVmKSB7XG4gIGlmIChidWYgPT0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBpZiAoYnVmLmJ1ZmZlcikge1xuICAgIC8vIGFwcGVuZCBhIHZpZXcgb2YgdGhlIHVuZGVybHlpbmcgQXJyYXlCdWZmZXJcbiAgICB0aGlzLl9hcHBlbmRCdWZmZXIoQnVmZmVyLmZyb20oYnVmLmJ1ZmZlciwgYnVmLmJ5dGVPZmZzZXQsIGJ1Zi5ieXRlTGVuZ3RoKSlcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJ1ZikpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5hcHBlbmQoYnVmW2ldKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0aGlzLl9pc0J1ZmZlckxpc3QoYnVmKSkge1xuICAgIC8vIHVud3JhcCBhcmd1bWVudCBpbnRvIGluZGl2aWR1YWwgQnVmZmVyTGlzdHNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5fYnVmcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5hcHBlbmQoYnVmLl9idWZzW2ldKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBjb2VyY2UgbnVtYmVyIGFyZ3VtZW50cyB0byBzdHJpbmdzLCBzaW5jZSBCdWZmZXIobnVtYmVyKSBkb2VzXG4gICAgLy8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvblxuICAgIGlmICh0eXBlb2YgYnVmID09PSAnbnVtYmVyJykge1xuICAgICAgYnVmID0gYnVmLnRvU3RyaW5nKClcbiAgICB9XG5cbiAgICB0aGlzLl9hcHBlbmRCdWZmZXIoQnVmZmVyLmZyb20oYnVmKSlcbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLl9hcHBlbmRCdWZmZXIgPSBmdW5jdGlvbiBhcHBlbmRCdWZmZXIgKGJ1Zikge1xuICB0aGlzLl9idWZzLnB1c2goYnVmKVxuICB0aGlzLmxlbmd0aCArPSBidWYubGVuZ3RoXG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiAoc2VhcmNoLCBvZmZzZXQsIGVuY29kaW5nKSB7XG4gIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBvZmZzZXRcbiAgICBvZmZzZXQgPSB1bmRlZmluZWRcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2VhcmNoID09PSAnZnVuY3Rpb24nIHx8IEFycmF5LmlzQXJyYXkoc2VhcmNoKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQnVmZmVyTGlzdCwgb3IgVWludDhBcnJheS4nKVxuICB9IGVsc2UgaWYgKHR5cGVvZiBzZWFyY2ggPT09ICdudW1iZXInKSB7XG4gICAgc2VhcmNoID0gQnVmZmVyLmZyb20oW3NlYXJjaF0pXG4gIH0gZWxzZSBpZiAodHlwZW9mIHNlYXJjaCA9PT0gJ3N0cmluZycpIHtcbiAgICBzZWFyY2ggPSBCdWZmZXIuZnJvbShzZWFyY2gsIGVuY29kaW5nKVxuICB9IGVsc2UgaWYgKHRoaXMuX2lzQnVmZmVyTGlzdChzZWFyY2gpKSB7XG4gICAgc2VhcmNoID0gc2VhcmNoLnNsaWNlKClcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHNlYXJjaC5idWZmZXIpKSB7XG4gICAgc2VhcmNoID0gQnVmZmVyLmZyb20oc2VhcmNoLmJ1ZmZlciwgc2VhcmNoLmJ5dGVPZmZzZXQsIHNlYXJjaC5ieXRlTGVuZ3RoKVxuICB9IGVsc2UgaWYgKCFCdWZmZXIuaXNCdWZmZXIoc2VhcmNoKSkge1xuICAgIHNlYXJjaCA9IEJ1ZmZlci5mcm9tKHNlYXJjaClcbiAgfVxuXG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQgfHwgMClcblxuICBpZiAoaXNOYU4ob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IDBcbiAgfVxuXG4gIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgb2Zmc2V0ID0gdGhpcy5sZW5ndGggKyBvZmZzZXRcbiAgfVxuXG4gIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgb2Zmc2V0ID0gMFxuICB9XG5cbiAgaWYgKHNlYXJjaC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gb2Zmc2V0ID4gdGhpcy5sZW5ndGggPyB0aGlzLmxlbmd0aCA6IG9mZnNldFxuICB9XG5cbiAgY29uc3QgYmxPZmZzZXQgPSB0aGlzLl9vZmZzZXQob2Zmc2V0KVxuICBsZXQgYmxJbmRleCA9IGJsT2Zmc2V0WzBdIC8vIGluZGV4IG9mIHdoaWNoIGludGVybmFsIGJ1ZmZlciB3ZSdyZSB3b3JraW5nIG9uXG4gIGxldCBidWZmT2Zmc2V0ID0gYmxPZmZzZXRbMV0gLy8gb2Zmc2V0IG9mIHRoZSBpbnRlcm5hbCBidWZmZXIgd2UncmUgd29ya2luZyBvblxuXG4gIC8vIHNjYW4gb3ZlciBlYWNoIGJ1ZmZlclxuICBmb3IgKDsgYmxJbmRleCA8IHRoaXMuX2J1ZnMubGVuZ3RoOyBibEluZGV4KyspIHtcbiAgICBjb25zdCBidWZmID0gdGhpcy5fYnVmc1tibEluZGV4XVxuXG4gICAgd2hpbGUgKGJ1ZmZPZmZzZXQgPCBidWZmLmxlbmd0aCkge1xuICAgICAgY29uc3QgYXZhaWxhYmxlV2luZG93ID0gYnVmZi5sZW5ndGggLSBidWZmT2Zmc2V0XG5cbiAgICAgIGlmIChhdmFpbGFibGVXaW5kb3cgPj0gc2VhcmNoLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBuYXRpdmVTZWFyY2hSZXN1bHQgPSBidWZmLmluZGV4T2Yoc2VhcmNoLCBidWZmT2Zmc2V0KVxuXG4gICAgICAgIGlmIChuYXRpdmVTZWFyY2hSZXN1bHQgIT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3JldmVyc2VPZmZzZXQoW2JsSW5kZXgsIG5hdGl2ZVNlYXJjaFJlc3VsdF0pXG4gICAgICAgIH1cblxuICAgICAgICBidWZmT2Zmc2V0ID0gYnVmZi5sZW5ndGggLSBzZWFyY2gubGVuZ3RoICsgMSAvLyBlbmQgb2YgbmF0aXZlIHNlYXJjaCB3aW5kb3dcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJldk9mZnNldCA9IHRoaXMuX3JldmVyc2VPZmZzZXQoW2JsSW5kZXgsIGJ1ZmZPZmZzZXRdKVxuXG4gICAgICAgIGlmICh0aGlzLl9tYXRjaChyZXZPZmZzZXQsIHNlYXJjaCkpIHtcbiAgICAgICAgICByZXR1cm4gcmV2T2Zmc2V0XG4gICAgICAgIH1cblxuICAgICAgICBidWZmT2Zmc2V0KytcbiAgICAgIH1cbiAgICB9XG5cbiAgICBidWZmT2Zmc2V0ID0gMFxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLl9tYXRjaCA9IGZ1bmN0aW9uIChvZmZzZXQsIHNlYXJjaCkge1xuICBpZiAodGhpcy5sZW5ndGggLSBvZmZzZXQgPCBzZWFyY2gubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKGxldCBzZWFyY2hPZmZzZXQgPSAwOyBzZWFyY2hPZmZzZXQgPCBzZWFyY2gubGVuZ3RoOyBzZWFyY2hPZmZzZXQrKykge1xuICAgIGlmICh0aGlzLmdldChvZmZzZXQgKyBzZWFyY2hPZmZzZXQpICE9PSBzZWFyY2hbc2VhcmNoT2Zmc2V0XSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbjsoZnVuY3Rpb24gKCkge1xuICBjb25zdCBtZXRob2RzID0ge1xuICAgIHJlYWREb3VibGVCRTogOCxcbiAgICByZWFkRG91YmxlTEU6IDgsXG4gICAgcmVhZEZsb2F0QkU6IDQsXG4gICAgcmVhZEZsb2F0TEU6IDQsXG4gICAgcmVhZEludDMyQkU6IDQsXG4gICAgcmVhZEludDMyTEU6IDQsXG4gICAgcmVhZFVJbnQzMkJFOiA0LFxuICAgIHJlYWRVSW50MzJMRTogNCxcbiAgICByZWFkSW50MTZCRTogMixcbiAgICByZWFkSW50MTZMRTogMixcbiAgICByZWFkVUludDE2QkU6IDIsXG4gICAgcmVhZFVJbnQxNkxFOiAyLFxuICAgIHJlYWRJbnQ4OiAxLFxuICAgIHJlYWRVSW50ODogMSxcbiAgICByZWFkSW50QkU6IG51bGwsXG4gICAgcmVhZEludExFOiBudWxsLFxuICAgIHJlYWRVSW50QkU6IG51bGwsXG4gICAgcmVhZFVJbnRMRTogbnVsbFxuICB9XG5cbiAgZm9yIChjb25zdCBtIGluIG1ldGhvZHMpIHtcbiAgICAoZnVuY3Rpb24gKG0pIHtcbiAgICAgIGlmIChtZXRob2RzW21dID09PSBudWxsKSB7XG4gICAgICAgIEJ1ZmZlckxpc3QucHJvdG90eXBlW21dID0gZnVuY3Rpb24gKG9mZnNldCwgYnl0ZUxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgYnl0ZUxlbmd0aClbbV0oMCwgYnl0ZUxlbmd0aClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQnVmZmVyTGlzdC5wcm90b3R5cGVbbV0gPSBmdW5jdGlvbiAob2Zmc2V0ID0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgbWV0aG9kc1ttXSlbbV0oMClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0obSkpXG4gIH1cbn0oKSlcblxuLy8gVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjbGFzcyBhbmQgYWxzbyBhcyBhbiBpbmRpY2F0b3Igb2YgdGhpcyBvYmplY3QgYmVpbmdcbi8vIGEgYEJ1ZmZlckxpc3RgLiBJdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgYGluc3RhbmNlb2YgQnVmZmVyTGlzdGAgaW4gYSBicm93c2VyXG4vLyBlbnZpcm9ubWVudCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIGRpZmZlcmVudCBjb3BpZXMgb2YgdGhlXG4vLyBCdWZmZXJMaXN0IGNsYXNzIGFuZCBzb21lIGBCdWZmZXJMaXN0YHMgbWlnaHQgYmUgYEJ1ZmZlckxpc3Rgcy5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLl9pc0J1ZmZlckxpc3QgPSBmdW5jdGlvbiBfaXNCdWZmZXJMaXN0IChiKSB7XG4gIHJldHVybiBiIGluc3RhbmNlb2YgQnVmZmVyTGlzdCB8fCBCdWZmZXJMaXN0LmlzQnVmZmVyTGlzdChiKVxufVxuXG5CdWZmZXJMaXN0LmlzQnVmZmVyTGlzdCA9IGZ1bmN0aW9uIGlzQnVmZmVyTGlzdCAoYikge1xuICByZXR1cm4gYiAhPSBudWxsICYmIGJbc3ltYm9sXVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlckxpc3RcbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEdXBsZXhTdHJlYW0gPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKS5EdXBsZXhcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuY29uc3QgQnVmZmVyTGlzdCA9IHJlcXVpcmUoJy4vQnVmZmVyTGlzdCcpXG5cbmZ1bmN0aW9uIEJ1ZmZlckxpc3RTdHJlYW0gKGNhbGxiYWNrKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXJMaXN0U3RyZWFtKSkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyTGlzdFN0cmVhbShjYWxsYmFjaylcbiAgfVxuXG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLl9jYWxsYmFjayA9IGNhbGxiYWNrXG5cbiAgICBjb25zdCBwaXBlciA9IGZ1bmN0aW9uIHBpcGVyIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLl9jYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9jYWxsYmFjayhlcnIpXG4gICAgICAgIHRoaXMuX2NhbGxiYWNrID0gbnVsbFxuICAgICAgfVxuICAgIH0uYmluZCh0aGlzKVxuXG4gICAgdGhpcy5vbigncGlwZScsIGZ1bmN0aW9uIG9uUGlwZSAoc3JjKSB7XG4gICAgICBzcmMub24oJ2Vycm9yJywgcGlwZXIpXG4gICAgfSlcbiAgICB0aGlzLm9uKCd1bnBpcGUnLCBmdW5jdGlvbiBvblVucGlwZSAoc3JjKSB7XG4gICAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgcGlwZXIpXG4gICAgfSlcblxuICAgIGNhbGxiYWNrID0gbnVsbFxuICB9XG5cbiAgQnVmZmVyTGlzdC5faW5pdC5jYWxsKHRoaXMsIGNhbGxiYWNrKVxuICBEdXBsZXhTdHJlYW0uY2FsbCh0aGlzKVxufVxuXG5pbmhlcml0cyhCdWZmZXJMaXN0U3RyZWFtLCBEdXBsZXhTdHJlYW0pXG5PYmplY3QuYXNzaWduKEJ1ZmZlckxpc3RTdHJlYW0ucHJvdG90eXBlLCBCdWZmZXJMaXN0LnByb3RvdHlwZSlcblxuQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUuX25ldyA9IGZ1bmN0aW9uIF9uZXcgKGNhbGxiYWNrKSB7XG4gIHJldHVybiBuZXcgQnVmZmVyTGlzdFN0cmVhbShjYWxsYmFjaylcbn1cblxuQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gX3dyaXRlIChidWYsIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICB0aGlzLl9hcHBlbmRCdWZmZXIoYnVmKVxuXG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjaygpXG4gIH1cbn1cblxuQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiBfcmVhZCAoc2l6ZSkge1xuICBpZiAoIXRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRoaXMucHVzaChudWxsKVxuICB9XG5cbiAgc2l6ZSA9IE1hdGgubWluKHNpemUsIHRoaXMubGVuZ3RoKVxuICB0aGlzLnB1c2godGhpcy5zbGljZSgwLCBzaXplKSlcbiAgdGhpcy5jb25zdW1lKHNpemUpXG59XG5cbkJ1ZmZlckxpc3RTdHJlYW0ucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIGVuZCAoY2h1bmspIHtcbiAgRHVwbGV4U3RyZWFtLnByb3RvdHlwZS5lbmQuY2FsbCh0aGlzLCBjaHVuaylcblxuICBpZiAodGhpcy5fY2FsbGJhY2spIHtcbiAgICB0aGlzLl9jYWxsYmFjayhudWxsLCB0aGlzLnNsaWNlKCkpXG4gICAgdGhpcy5fY2FsbGJhY2sgPSBudWxsXG4gIH1cbn1cblxuQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiBfZGVzdHJveSAoZXJyLCBjYikge1xuICB0aGlzLl9idWZzLmxlbmd0aCA9IDBcbiAgdGhpcy5sZW5ndGggPSAwXG4gIGNiKGVycilcbn1cblxuQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUuX2lzQnVmZmVyTGlzdCA9IGZ1bmN0aW9uIF9pc0J1ZmZlckxpc3QgKGIpIHtcbiAgcmV0dXJuIGIgaW5zdGFuY2VvZiBCdWZmZXJMaXN0U3RyZWFtIHx8IGIgaW5zdGFuY2VvZiBCdWZmZXJMaXN0IHx8IEJ1ZmZlckxpc3RTdHJlYW0uaXNCdWZmZXJMaXN0KGIpXG59XG5cbkJ1ZmZlckxpc3RTdHJlYW0uaXNCdWZmZXJMaXN0ID0gQnVmZmVyTGlzdC5pc0J1ZmZlckxpc3RcblxubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXJMaXN0U3RyZWFtXG5tb2R1bGUuZXhwb3J0cy5CdWZmZXJMaXN0U3RyZWFtID0gQnVmZmVyTGlzdFN0cmVhbVxubW9kdWxlLmV4cG9ydHMuQnVmZmVyTGlzdCA9IEJ1ZmZlckxpc3RcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IHJlYWRsaW5lID0gcmVxdWlyZSgncmVhZGxpbmUnKTtcbmNvbnN0IGNoYWxrID0gcmVxdWlyZSgnY2hhbGsnKTtcbmNvbnN0IGNsaUN1cnNvciA9IHJlcXVpcmUoJ2NsaS1jdXJzb3InKTtcbmNvbnN0IGNsaVNwaW5uZXJzID0gcmVxdWlyZSgnY2xpLXNwaW5uZXJzJyk7XG5jb25zdCBsb2dTeW1ib2xzID0gcmVxdWlyZSgnbG9nLXN5bWJvbHMnKTtcbmNvbnN0IHN0cmlwQW5zaSA9IHJlcXVpcmUoJ3N0cmlwLWFuc2knKTtcbmNvbnN0IHdjd2lkdGggPSByZXF1aXJlKCd3Y3dpZHRoJyk7XG5jb25zdCBpc0ludGVyYWN0aXZlID0gcmVxdWlyZSgnaXMtaW50ZXJhY3RpdmUnKTtcbmNvbnN0IGlzVW5pY29kZVN1cHBvcnRlZCA9IHJlcXVpcmUoJ2lzLXVuaWNvZGUtc3VwcG9ydGVkJyk7XG5jb25zdCB7QnVmZmVyTGlzdFN0cmVhbX0gPSByZXF1aXJlKCdibCcpO1xuXG5jb25zdCBURVhUID0gU3ltYm9sKCd0ZXh0Jyk7XG5jb25zdCBQUkVGSVhfVEVYVCA9IFN5bWJvbCgncHJlZml4VGV4dCcpO1xuY29uc3QgQVNDSUlfRVRYX0NPREUgPSAweDAzOyAvLyBDdHJsK0MgZW1pdHMgdGhpcyBjb2RlXG5cbmNsYXNzIFN0ZGluRGlzY2FyZGVyIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5yZXF1ZXN0cyA9IDA7XG5cblx0XHR0aGlzLm11dGVkU3RyZWFtID0gbmV3IEJ1ZmZlckxpc3RTdHJlYW0oKTtcblx0XHR0aGlzLm11dGVkU3RyZWFtLnBpcGUocHJvY2Vzcy5zdGRvdXQpO1xuXG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgdW5pY29ybi9uby10aGlzLWFzc2lnbm1lbnRcblx0XHR0aGlzLm91ckVtaXQgPSBmdW5jdGlvbiAoZXZlbnQsIGRhdGEsIC4uLmFyZ3MpIHtcblx0XHRcdGNvbnN0IHtzdGRpbn0gPSBwcm9jZXNzO1xuXHRcdFx0aWYgKHNlbGYucmVxdWVzdHMgPiAwIHx8IHN0ZGluLmVtaXQgPT09IHNlbGYub3VyRW1pdCkge1xuXHRcdFx0XHRpZiAoZXZlbnQgPT09ICdrZXlwcmVzcycpIHsgLy8gRml4ZXMgcmVhZGxpbmUgYmVoYXZpb3Jcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZXZlbnQgPT09ICdkYXRhJyAmJiBkYXRhLmluY2x1ZGVzKEFTQ0lJX0VUWF9DT0RFKSkge1xuXHRcdFx0XHRcdHByb2Nlc3MuZW1pdCgnU0lHSU5UJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRSZWZsZWN0LmFwcGx5KHNlbGYub2xkRW1pdCwgdGhpcywgW2V2ZW50LCBkYXRhLCAuLi5hcmdzXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRSZWZsZWN0LmFwcGx5KHByb2Nlc3Muc3RkaW4uZW1pdCwgdGhpcywgW2V2ZW50LCBkYXRhLCAuLi5hcmdzXSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdHN0YXJ0KCkge1xuXHRcdHRoaXMucmVxdWVzdHMrKztcblxuXHRcdGlmICh0aGlzLnJlcXVlc3RzID09PSAxKSB7XG5cdFx0XHR0aGlzLnJlYWxTdGFydCgpO1xuXHRcdH1cblx0fVxuXG5cdHN0b3AoKSB7XG5cdFx0aWYgKHRoaXMucmVxdWVzdHMgPD0gMCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdgc3RvcGAgY2FsbGVkIG1vcmUgdGltZXMgdGhhbiBgc3RhcnRgJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5yZXF1ZXN0cy0tO1xuXG5cdFx0aWYgKHRoaXMucmVxdWVzdHMgPT09IDApIHtcblx0XHRcdHRoaXMucmVhbFN0b3AoKTtcblx0XHR9XG5cdH1cblxuXHRyZWFsU3RhcnQoKSB7XG5cdFx0Ly8gTm8ga25vd24gd2F5IHRvIG1ha2UgaXQgd29yayByZWxpYWJseSBvbiBXaW5kb3dzXG5cdFx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHtcblx0XHRcdGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuXHRcdFx0b3V0cHV0OiB0aGlzLm11dGVkU3RyZWFtXG5cdFx0fSk7XG5cblx0XHR0aGlzLnJsLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG5cdFx0XHRpZiAocHJvY2Vzcy5saXN0ZW5lckNvdW50KCdTSUdJTlQnKSA9PT0gMCkge1xuXHRcdFx0XHRwcm9jZXNzLmVtaXQoJ1NJR0lOVCcpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5ybC5jbG9zZSgpO1xuXHRcdFx0XHRwcm9jZXNzLmtpbGwocHJvY2Vzcy5waWQsICdTSUdJTlQnKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJlYWxTdG9wKCkge1xuXHRcdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5ybC5jbG9zZSgpO1xuXHRcdHRoaXMucmwgPSB1bmRlZmluZWQ7XG5cdH1cbn1cblxubGV0IHN0ZGluRGlzY2FyZGVyO1xuXG5jbGFzcyBPcmEge1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0aWYgKCFzdGRpbkRpc2NhcmRlcikge1xuXHRcdFx0c3RkaW5EaXNjYXJkZXIgPSBuZXcgU3RkaW5EaXNjYXJkZXIoKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRvcHRpb25zID0ge1xuXHRcdFx0XHR0ZXh0OiBvcHRpb25zXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHRoaXMub3B0aW9ucyA9IHtcblx0XHRcdHRleHQ6ICcnLFxuXHRcdFx0Y29sb3I6ICdjeWFuJyxcblx0XHRcdHN0cmVhbTogcHJvY2Vzcy5zdGRlcnIsXG5cdFx0XHRkaXNjYXJkU3RkaW46IHRydWUsXG5cdFx0XHQuLi5vcHRpb25zXG5cdFx0fTtcblxuXHRcdHRoaXMuc3Bpbm5lciA9IHRoaXMub3B0aW9ucy5zcGlubmVyO1xuXG5cdFx0dGhpcy5jb2xvciA9IHRoaXMub3B0aW9ucy5jb2xvcjtcblx0XHR0aGlzLmhpZGVDdXJzb3IgPSB0aGlzLm9wdGlvbnMuaGlkZUN1cnNvciAhPT0gZmFsc2U7XG5cdFx0dGhpcy5pbnRlcnZhbCA9IHRoaXMub3B0aW9ucy5pbnRlcnZhbCB8fCB0aGlzLnNwaW5uZXIuaW50ZXJ2YWwgfHwgMTAwO1xuXHRcdHRoaXMuc3RyZWFtID0gdGhpcy5vcHRpb25zLnN0cmVhbTtcblx0XHR0aGlzLmlkID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMuaXNFbmFibGVkID0gdHlwZW9mIHRoaXMub3B0aW9ucy5pc0VuYWJsZWQgPT09ICdib29sZWFuJyA/IHRoaXMub3B0aW9ucy5pc0VuYWJsZWQgOiBpc0ludGVyYWN0aXZlKHtzdHJlYW06IHRoaXMuc3RyZWFtfSk7XG5cdFx0dGhpcy5pc1NpbGVudCA9IHR5cGVvZiB0aGlzLm9wdGlvbnMuaXNTaWxlbnQgPT09ICdib29sZWFuJyA/IHRoaXMub3B0aW9ucy5pc1NpbGVudCA6IGZhbHNlO1xuXG5cdFx0Ly8gU2V0ICphZnRlciogYHRoaXMuc3RyZWFtYFxuXHRcdHRoaXMudGV4dCA9IHRoaXMub3B0aW9ucy50ZXh0O1xuXHRcdHRoaXMucHJlZml4VGV4dCA9IHRoaXMub3B0aW9ucy5wcmVmaXhUZXh0O1xuXHRcdHRoaXMubGluZXNUb0NsZWFyID0gMDtcblx0XHR0aGlzLmluZGVudCA9IHRoaXMub3B0aW9ucy5pbmRlbnQ7XG5cdFx0dGhpcy5kaXNjYXJkU3RkaW4gPSB0aGlzLm9wdGlvbnMuZGlzY2FyZFN0ZGluO1xuXHRcdHRoaXMuaXNEaXNjYXJkaW5nU3RkaW4gPSBmYWxzZTtcblx0fVxuXG5cdGdldCBpbmRlbnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2luZGVudDtcblx0fVxuXG5cdHNldCBpbmRlbnQoaW5kZW50ID0gMCkge1xuXHRcdGlmICghKGluZGVudCA+PSAwICYmIE51bWJlci5pc0ludGVnZXIoaW5kZW50KSkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignVGhlIGBpbmRlbnRgIG9wdGlvbiBtdXN0IGJlIGFuIGludGVnZXIgZnJvbSAwIGFuZCB1cCcpO1xuXHRcdH1cblxuXHRcdHRoaXMuX2luZGVudCA9IGluZGVudDtcblx0fVxuXG5cdF91cGRhdGVJbnRlcnZhbChpbnRlcnZhbCkge1xuXHRcdGlmIChpbnRlcnZhbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLmludGVydmFsID0gaW50ZXJ2YWw7XG5cdFx0fVxuXHR9XG5cblx0Z2V0IHNwaW5uZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3NwaW5uZXI7XG5cdH1cblxuXHRzZXQgc3Bpbm5lcihzcGlubmVyKSB7XG5cdFx0dGhpcy5mcmFtZUluZGV4ID0gMDtcblxuXHRcdGlmICh0eXBlb2Ygc3Bpbm5lciA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGlmIChzcGlubmVyLmZyYW1lcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignVGhlIGdpdmVuIHNwaW5uZXIgbXVzdCBoYXZlIGEgYGZyYW1lc2AgcHJvcGVydHknKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fc3Bpbm5lciA9IHNwaW5uZXI7XG5cdFx0fSBlbHNlIGlmICghaXNVbmljb2RlU3VwcG9ydGVkKCkpIHtcblx0XHRcdHRoaXMuX3NwaW5uZXIgPSBjbGlTcGlubmVycy5saW5lO1xuXHRcdH0gZWxzZSBpZiAoc3Bpbm5lciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBTZXQgZGVmYXVsdCBzcGlubmVyXG5cdFx0XHR0aGlzLl9zcGlubmVyID0gY2xpU3Bpbm5lcnMuZG90cztcblx0XHR9IGVsc2UgaWYgKHNwaW5uZXIgIT09ICdkZWZhdWx0JyAmJiBjbGlTcGlubmVyc1tzcGlubmVyXSkge1xuXHRcdFx0dGhpcy5fc3Bpbm5lciA9IGNsaVNwaW5uZXJzW3NwaW5uZXJdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIGJ1aWx0LWluIHNwaW5uZXIgbmFtZWQgJyR7c3Bpbm5lcn0nLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9jbGktc3Bpbm5lcnMvYmxvYi9tYWluL3NwaW5uZXJzLmpzb24gZm9yIGEgZnVsbCBsaXN0LmApO1xuXHRcdH1cblxuXHRcdHRoaXMuX3VwZGF0ZUludGVydmFsKHRoaXMuX3NwaW5uZXIuaW50ZXJ2YWwpO1xuXHR9XG5cblx0Z2V0IHRleHQoKSB7XG5cdFx0cmV0dXJuIHRoaXNbVEVYVF07XG5cdH1cblxuXHRzZXQgdGV4dCh2YWx1ZSkge1xuXHRcdHRoaXNbVEVYVF0gPSB2YWx1ZTtcblx0XHR0aGlzLnVwZGF0ZUxpbmVDb3VudCgpO1xuXHR9XG5cblx0Z2V0IHByZWZpeFRleHQoKSB7XG5cdFx0cmV0dXJuIHRoaXNbUFJFRklYX1RFWFRdO1xuXHR9XG5cblx0c2V0IHByZWZpeFRleHQodmFsdWUpIHtcblx0XHR0aGlzW1BSRUZJWF9URVhUXSA9IHZhbHVlO1xuXHRcdHRoaXMudXBkYXRlTGluZUNvdW50KCk7XG5cdH1cblxuXHRnZXQgaXNTcGlubmluZygpIHtcblx0XHRyZXR1cm4gdGhpcy5pZCAhPT0gdW5kZWZpbmVkO1xuXHR9XG5cblx0Z2V0RnVsbFByZWZpeFRleHQocHJlZml4VGV4dCA9IHRoaXNbUFJFRklYX1RFWFRdLCBwb3N0Zml4ID0gJyAnKSB7XG5cdFx0aWYgKHR5cGVvZiBwcmVmaXhUZXh0ID09PSAnc3RyaW5nJykge1xuXHRcdFx0cmV0dXJuIHByZWZpeFRleHQgKyBwb3N0Zml4O1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgcHJlZml4VGV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0cmV0dXJuIHByZWZpeFRleHQoKSArIHBvc3RmaXg7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cblx0dXBkYXRlTGluZUNvdW50KCkge1xuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLnN0cmVhbS5jb2x1bW5zIHx8IDgwO1xuXHRcdGNvbnN0IGZ1bGxQcmVmaXhUZXh0ID0gdGhpcy5nZXRGdWxsUHJlZml4VGV4dCh0aGlzLnByZWZpeFRleHQsICctJyk7XG5cdFx0dGhpcy5saW5lQ291bnQgPSAwO1xuXHRcdGZvciAoY29uc3QgbGluZSBvZiBzdHJpcEFuc2koZnVsbFByZWZpeFRleHQgKyAnLS0nICsgdGhpc1tURVhUXSkuc3BsaXQoJ1xcbicpKSB7XG5cdFx0XHR0aGlzLmxpbmVDb3VudCArPSBNYXRoLm1heCgxLCBNYXRoLmNlaWwod2N3aWR0aChsaW5lKSAvIGNvbHVtbnMpKTtcblx0XHR9XG5cdH1cblxuXHRnZXQgaXNFbmFibGVkKCkge1xuXHRcdHJldHVybiB0aGlzLl9pc0VuYWJsZWQgJiYgIXRoaXMuaXNTaWxlbnQ7XG5cdH1cblxuXHRzZXQgaXNFbmFibGVkKHZhbHVlKSB7XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgYGlzRW5hYmxlZGAgb3B0aW9uIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5faXNFbmFibGVkID0gdmFsdWU7XG5cdH1cblxuXHRnZXQgaXNTaWxlbnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2lzU2lsZW50O1xuXHR9XG5cblx0c2V0IGlzU2lsZW50KHZhbHVlKSB7XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgYGlzU2lsZW50YCBvcHRpb24gbXVzdCBiZSBhIGJvb2xlYW4nKTtcblx0XHR9XG5cblx0XHR0aGlzLl9pc1NpbGVudCA9IHZhbHVlO1xuXHR9XG5cblx0ZnJhbWUoKSB7XG5cdFx0Y29uc3Qge2ZyYW1lc30gPSB0aGlzLnNwaW5uZXI7XG5cdFx0bGV0IGZyYW1lID0gZnJhbWVzW3RoaXMuZnJhbWVJbmRleF07XG5cblx0XHRpZiAodGhpcy5jb2xvcikge1xuXHRcdFx0ZnJhbWUgPSBjaGFsa1t0aGlzLmNvbG9yXShmcmFtZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5mcmFtZUluZGV4ID0gKyt0aGlzLmZyYW1lSW5kZXggJSBmcmFtZXMubGVuZ3RoO1xuXHRcdGNvbnN0IGZ1bGxQcmVmaXhUZXh0ID0gKHR5cGVvZiB0aGlzLnByZWZpeFRleHQgPT09ICdzdHJpbmcnICYmIHRoaXMucHJlZml4VGV4dCAhPT0gJycpID8gdGhpcy5wcmVmaXhUZXh0ICsgJyAnIDogJyc7XG5cdFx0Y29uc3QgZnVsbFRleHQgPSB0eXBlb2YgdGhpcy50ZXh0ID09PSAnc3RyaW5nJyA/ICcgJyArIHRoaXMudGV4dCA6ICcnO1xuXG5cdFx0cmV0dXJuIGZ1bGxQcmVmaXhUZXh0ICsgZnJhbWUgKyBmdWxsVGV4dDtcblx0fVxuXG5cdGNsZWFyKCkge1xuXHRcdGlmICghdGhpcy5pc0VuYWJsZWQgfHwgIXRoaXMuc3RyZWFtLmlzVFRZKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGluZXNUb0NsZWFyOyBpKyspIHtcblx0XHRcdGlmIChpID4gMCkge1xuXHRcdFx0XHR0aGlzLnN0cmVhbS5tb3ZlQ3Vyc29yKDAsIC0xKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zdHJlYW0uY2xlYXJMaW5lKCk7XG5cdFx0XHR0aGlzLnN0cmVhbS5jdXJzb3JUbyh0aGlzLmluZGVudCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5saW5lc1RvQ2xlYXIgPSAwO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRyZW5kZXIoKSB7XG5cdFx0aWYgKHRoaXMuaXNTaWxlbnQpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHRoaXMuY2xlYXIoKTtcblx0XHR0aGlzLnN0cmVhbS53cml0ZSh0aGlzLmZyYW1lKCkpO1xuXHRcdHRoaXMubGluZXNUb0NsZWFyID0gdGhpcy5saW5lQ291bnQ7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHN0YXJ0KHRleHQpIHtcblx0XHRpZiAodGV4dCkge1xuXHRcdFx0dGhpcy50ZXh0ID0gdGV4dDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5pc1NpbGVudCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLmlzRW5hYmxlZCkge1xuXHRcdFx0aWYgKHRoaXMudGV4dCkge1xuXHRcdFx0XHR0aGlzLnN0cmVhbS53cml0ZShgLSAke3RoaXMudGV4dH1cXG5gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuaXNTcGlubmluZykge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuaGlkZUN1cnNvcikge1xuXHRcdFx0Y2xpQ3Vyc29yLmhpZGUodGhpcy5zdHJlYW0pO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmRpc2NhcmRTdGRpbiAmJiBwcm9jZXNzLnN0ZGluLmlzVFRZKSB7XG5cdFx0XHR0aGlzLmlzRGlzY2FyZGluZ1N0ZGluID0gdHJ1ZTtcblx0XHRcdHN0ZGluRGlzY2FyZGVyLnN0YXJ0KCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5yZW5kZXIoKTtcblx0XHR0aGlzLmlkID0gc2V0SW50ZXJ2YWwodGhpcy5yZW5kZXIuYmluZCh0aGlzKSwgdGhpcy5pbnRlcnZhbCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHN0b3AoKSB7XG5cdFx0aWYgKCF0aGlzLmlzRW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLmlkKTtcblx0XHR0aGlzLmlkID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMuZnJhbWVJbmRleCA9IDA7XG5cdFx0dGhpcy5jbGVhcigpO1xuXHRcdGlmICh0aGlzLmhpZGVDdXJzb3IpIHtcblx0XHRcdGNsaUN1cnNvci5zaG93KHRoaXMuc3RyZWFtKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5kaXNjYXJkU3RkaW4gJiYgcHJvY2Vzcy5zdGRpbi5pc1RUWSAmJiB0aGlzLmlzRGlzY2FyZGluZ1N0ZGluKSB7XG5cdFx0XHRzdGRpbkRpc2NhcmRlci5zdG9wKCk7XG5cdFx0XHR0aGlzLmlzRGlzY2FyZGluZ1N0ZGluID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzdWNjZWVkKHRleHQpIHtcblx0XHRyZXR1cm4gdGhpcy5zdG9wQW5kUGVyc2lzdCh7c3ltYm9sOiBsb2dTeW1ib2xzLnN1Y2Nlc3MsIHRleHR9KTtcblx0fVxuXG5cdGZhaWwodGV4dCkge1xuXHRcdHJldHVybiB0aGlzLnN0b3BBbmRQZXJzaXN0KHtzeW1ib2w6IGxvZ1N5bWJvbHMuZXJyb3IsIHRleHR9KTtcblx0fVxuXG5cdHdhcm4odGV4dCkge1xuXHRcdHJldHVybiB0aGlzLnN0b3BBbmRQZXJzaXN0KHtzeW1ib2w6IGxvZ1N5bWJvbHMud2FybmluZywgdGV4dH0pO1xuXHR9XG5cblx0aW5mbyh0ZXh0KSB7XG5cdFx0cmV0dXJuIHRoaXMuc3RvcEFuZFBlcnNpc3Qoe3N5bWJvbDogbG9nU3ltYm9scy5pbmZvLCB0ZXh0fSk7XG5cdH1cblxuXHRzdG9wQW5kUGVyc2lzdChvcHRpb25zID0ge30pIHtcblx0XHRpZiAodGhpcy5pc1NpbGVudCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcHJlZml4VGV4dCA9IG9wdGlvbnMucHJlZml4VGV4dCB8fCB0aGlzLnByZWZpeFRleHQ7XG5cdFx0Y29uc3QgdGV4dCA9IG9wdGlvbnMudGV4dCB8fCB0aGlzLnRleHQ7XG5cdFx0Y29uc3QgZnVsbFRleHQgPSAodHlwZW9mIHRleHQgPT09ICdzdHJpbmcnKSA/ICcgJyArIHRleHQgOiAnJztcblxuXHRcdHRoaXMuc3RvcCgpO1xuXHRcdHRoaXMuc3RyZWFtLndyaXRlKGAke3RoaXMuZ2V0RnVsbFByZWZpeFRleHQocHJlZml4VGV4dCwgJyAnKX0ke29wdGlvbnMuc3ltYm9sIHx8ICcgJ30ke2Z1bGxUZXh0fVxcbmApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuY29uc3Qgb3JhRmFjdG9yeSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdHJldHVybiBuZXcgT3JhKG9wdGlvbnMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBvcmFGYWN0b3J5O1xuXG5tb2R1bGUuZXhwb3J0cy5wcm9taXNlID0gKGFjdGlvbiwgb3B0aW9ucykgPT4ge1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tdGhlblxuXHRpZiAodHlwZW9mIGFjdGlvbi50aGVuICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignUGFyYW1ldGVyIGBhY3Rpb25gIG11c3QgYmUgYSBQcm9taXNlJyk7XG5cdH1cblxuXHRjb25zdCBzcGlubmVyID0gbmV3IE9yYShvcHRpb25zKTtcblx0c3Bpbm5lci5zdGFydCgpO1xuXG5cdChhc3luYyAoKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IGFjdGlvbjtcblx0XHRcdHNwaW5uZXIuc3VjY2VlZCgpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0c3Bpbm5lci5mYWlsKCk7XG5cdFx0fVxuXHR9KSgpO1xuXG5cdHJldHVybiBzcGlubmVyO1xufTtcbiIsImltcG9ydCBhbnNpRXNjYXBlcyBmcm9tICdhbnNpLWVzY2FwZXMnO1xuXG4vKipcbiAqIE1vdmUgY3Vyc29yIGxlZnQgYnkgYHhgXG4gKiBAcGFyYW0gIHtSZWFkbGluZX0gcmwgLSBSZWFkbGluZSBpbnN0YW5jZVxuICogQHBhcmFtICB7TnVtYmVyfSAgIHggIC0gSG93IGZhciB0byBnbyBsZWZ0IChkZWZhdWx0IHRvIDEpXG4gKi9cblxuZXhwb3J0IGNvbnN0IGxlZnQgPSBmdW5jdGlvbiAocmwsIHgpIHtcbiAgcmwub3V0cHV0LndyaXRlKGFuc2lFc2NhcGVzLmN1cnNvckJhY2t3YXJkKHgpKTtcbn07XG5cbi8qKlxuICogTW92ZSBjdXJzb3IgcmlnaHQgYnkgYHhgXG4gKiBAcGFyYW0gIHtSZWFkbGluZX0gcmwgLSBSZWFkbGluZSBpbnN0YW5jZVxuICogQHBhcmFtICB7TnVtYmVyfSAgIHggIC0gSG93IGZhciB0byBnbyBsZWZ0IChkZWZhdWx0IHRvIDEpXG4gKi9cblxuZXhwb3J0IGNvbnN0IHJpZ2h0ID0gZnVuY3Rpb24gKHJsLCB4KSB7XG4gIHJsLm91dHB1dC53cml0ZShhbnNpRXNjYXBlcy5jdXJzb3JGb3J3YXJkKHgpKTtcbn07XG5cbi8qKlxuICogTW92ZSBjdXJzb3IgdXAgYnkgYHhgXG4gKiBAcGFyYW0gIHtSZWFkbGluZX0gcmwgLSBSZWFkbGluZSBpbnN0YW5jZVxuICogQHBhcmFtICB7TnVtYmVyfSAgIHggIC0gSG93IGZhciB0byBnbyB1cCAoZGVmYXVsdCB0byAxKVxuICovXG5cbmV4cG9ydCBjb25zdCB1cCA9IGZ1bmN0aW9uIChybCwgeCkge1xuICBybC5vdXRwdXQud3JpdGUoYW5zaUVzY2FwZXMuY3Vyc29yVXAoeCkpO1xufTtcblxuLyoqXG4gKiBNb3ZlIGN1cnNvciBkb3duIGJ5IGB4YFxuICogQHBhcmFtICB7UmVhZGxpbmV9IHJsIC0gUmVhZGxpbmUgaW5zdGFuY2VcbiAqIEBwYXJhbSAge051bWJlcn0gICB4ICAtIEhvdyBmYXIgdG8gZ28gZG93biAoZGVmYXVsdCB0byAxKVxuICovXG5cbmV4cG9ydCBjb25zdCBkb3duID0gZnVuY3Rpb24gKHJsLCB4KSB7XG4gIHJsLm91dHB1dC53cml0ZShhbnNpRXNjYXBlcy5jdXJzb3JEb3duKHgpKTtcbn07XG5cbi8qKlxuICogQ2xlYXIgY3VycmVudCBsaW5lXG4gKiBAcGFyYW0gIHtSZWFkbGluZX0gcmwgIC0gUmVhZGxpbmUgaW5zdGFuY2VcbiAqIEBwYXJhbSAge051bWJlcn0gICBsZW4gLSBudW1iZXIgb2YgbGluZSB0byBkZWxldGVcbiAqL1xuZXhwb3J0IGNvbnN0IGNsZWFyTGluZSA9IGZ1bmN0aW9uIChybCwgbGVuKSB7XG4gIHJsLm91dHB1dC53cml0ZShhbnNpRXNjYXBlcy5lcmFzZUxpbmVzKGxlbikpO1xufTtcbiIsImltcG9ydCBhbnNpRXNjYXBlcyBmcm9tICdhbnNpLWVzY2FwZXMnO1xuaW1wb3J0IGNsaVdpZHRoIGZyb20gJ2NsaS13aWR0aCc7XG5pbXBvcnQgd3JhcEFuc2kgZnJvbSAnd3JhcC1hbnNpJztcbmltcG9ydCBzdHJpcEFuc2kgZnJvbSAnc3RyaXAtYW5zaSc7XG5pbXBvcnQgc3RyaW5nV2lkdGggZnJvbSAnc3RyaW5nLXdpZHRoJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi9yZWFkbGluZS5qcyc7XG5cbmZ1bmN0aW9uIGhlaWdodChjb250ZW50KSB7XG4gIHJldHVybiBjb250ZW50LnNwbGl0KCdcXG4nKS5sZW5ndGg7XG59XG5cbi8qKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCAqL1xuZnVuY3Rpb24gbGFzdExpbmUoY29udGVudCkge1xuICByZXR1cm4gY29udGVudC5zcGxpdCgnXFxuJykucG9wKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjcmVlbk1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcihybCkge1xuICAgIC8vIFRoZXNlIHZhcmlhYmxlcyBhcmUga2VlcGluZyBpbmZvcm1hdGlvbiB0byBhbGxvdyBjb3JyZWN0IHByb21wdCByZS1yZW5kZXJpbmdcbiAgICB0aGlzLmhlaWdodCA9IDA7XG4gICAgdGhpcy5leHRyYUxpbmVzVW5kZXJQcm9tcHQgPSAwO1xuXG4gICAgdGhpcy5ybCA9IHJsO1xuICB9XG5cbiAgcmVuZGVyV2l0aFNwaW5uZXIoY29udGVudCwgYm90dG9tQ29udGVudCkge1xuICAgIGlmICh0aGlzLnNwaW5uZXJJZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnNwaW5uZXJJZCk7XG4gICAgfVxuXG4gICAgbGV0IHNwaW5uZXI7XG4gICAgbGV0IGNvbnRlbnRGdW5jO1xuICAgIGxldCBib3R0b21Db250ZW50RnVuYztcblxuICAgIGlmIChib3R0b21Db250ZW50KSB7XG4gICAgICBzcGlubmVyID0gb3JhKGJvdHRvbUNvbnRlbnQpO1xuICAgICAgY29udGVudEZ1bmMgPSAoKSA9PiBjb250ZW50O1xuICAgICAgYm90dG9tQ29udGVudEZ1bmMgPSAoKSA9PiBzcGlubmVyLmZyYW1lKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNwaW5uZXIgPSBvcmEoY29udGVudCk7XG4gICAgICBjb250ZW50RnVuYyA9ICgpID0+IHNwaW5uZXIuZnJhbWUoKTtcbiAgICAgIGJvdHRvbUNvbnRlbnRGdW5jID0gKCkgPT4gJyc7XG4gICAgfVxuXG4gICAgdGhpcy5zcGlubmVySWQgPSBzZXRJbnRlcnZhbChcbiAgICAgICgpID0+IHRoaXMucmVuZGVyKGNvbnRlbnRGdW5jKCksIGJvdHRvbUNvbnRlbnRGdW5jKCksIHRydWUpLFxuICAgICAgc3Bpbm5lci5pbnRlcnZhbCxcbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKGNvbnRlbnQsIGJvdHRvbUNvbnRlbnQsIHNwaW5uaW5nID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5zcGlubmVySWQgJiYgIXNwaW5uaW5nKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuc3Bpbm5lcklkKTtcbiAgICB9XG5cbiAgICB0aGlzLnJsLm91dHB1dC51bm11dGUoKTtcbiAgICB0aGlzLmNsZWFuKHRoaXMuZXh0cmFMaW5lc1VuZGVyUHJvbXB0KTtcblxuICAgIC8qKlxuICAgICAqIFdyaXRlIG1lc3NhZ2UgdG8gc2NyZWVuIGFuZCBzZXRQcm9tcHQgdG8gY29udHJvbCBiYWNrc3BhY2VcbiAgICAgKi9cblxuICAgIGNvbnN0IHByb21wdExpbmUgPSBsYXN0TGluZShjb250ZW50KTtcbiAgICBjb25zdCByYXdQcm9tcHRMaW5lID0gc3RyaXBBbnNpKHByb21wdExpbmUpO1xuXG4gICAgLy8gUmVtb3ZlIHRoZSBybC5saW5lIGZyb20gb3VyIHByb21wdC4gV2UgY2FuJ3QgcmVseSBvbiB0aGUgY29udGVudCBvZlxuICAgIC8vIHJsLmxpbmUgKG1haW5seSBiZWNhdXNlIG9mIHRoZSBwYXNzd29yZCBwcm9tcHQpLCBzbyBqdXN0IHJlbHkgb24gaXQnc1xuICAgIC8vIGxlbmd0aC5cbiAgICBsZXQgcHJvbXB0ID0gcmF3UHJvbXB0TGluZTtcbiAgICBpZiAodGhpcy5ybC5saW5lLmxlbmd0aCA+IDApIHtcbiAgICAgIHByb21wdCA9IHByb21wdC5zbGljZSgwLCAtdGhpcy5ybC5saW5lLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgdGhpcy5ybC5zZXRQcm9tcHQocHJvbXB0KTtcblxuICAgIC8vIFNldFByb21wdCB3aWxsIGNoYW5nZSBjdXJzb3IgcG9zaXRpb24sIG5vdyB3ZSBjYW4gZ2V0IGNvcnJlY3QgdmFsdWVcbiAgICBjb25zdCBjdXJzb3JQb3MgPSB0aGlzLnJsLl9nZXRDdXJzb3JQb3MoKTtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMubm9ybWFsaXplZENsaVdpZHRoKCk7XG5cbiAgICBjb250ZW50ID0gdGhpcy5mb3JjZUxpbmVSZXR1cm4oY29udGVudCwgd2lkdGgpO1xuICAgIGJvdHRvbUNvbnRlbnQgJiY9IHRoaXMuZm9yY2VMaW5lUmV0dXJuKGJvdHRvbUNvbnRlbnQsIHdpZHRoKTtcblxuICAgIC8vIE1hbnVhbGx5IGluc2VydCBhbiBleHRyYSBsaW5lIGlmIHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUuXG4gICAgLy8gVGhpcyBwcmV2ZW50IHRoZSBjdXJzb3IgZnJvbSBhcHBlYXJpbmcgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGVcbiAgICAvLyBjdXJyZW50IGxpbmUuXG4gICAgaWYgKHJhd1Byb21wdExpbmUubGVuZ3RoICUgd2lkdGggPT09IDApIHtcbiAgICAgIGNvbnRlbnQgKz0gJ1xcbic7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbENvbnRlbnQgPSBjb250ZW50ICsgKGJvdHRvbUNvbnRlbnQgPyAnXFxuJyArIGJvdHRvbUNvbnRlbnQgOiAnJyk7XG4gICAgdGhpcy5ybC5vdXRwdXQud3JpdGUoZnVsbENvbnRlbnQpO1xuXG4gICAgLyoqXG4gICAgICogUmUtYWRqdXN0IHRoZSBjdXJzb3IgYXQgdGhlIGNvcnJlY3QgcG9zaXRpb24uXG4gICAgICovXG5cbiAgICAvLyBXZSBuZWVkIHRvIGNvbnNpZGVyIHBhcnRzIG9mIHRoZSBwcm9tcHQgdW5kZXIgdGhlIGN1cnNvciBhcyBwYXJ0IG9mIHRoZSBib3R0b21cbiAgICAvLyBjb250ZW50IGluIG9yZGVyIHRvIGNvcnJlY3RseSBjbGVhbnVwIGFuZCByZS1yZW5kZXIuXG4gICAgY29uc3QgcHJvbXB0TGluZVVwRGlmZiA9IE1hdGguZmxvb3IocmF3UHJvbXB0TGluZS5sZW5ndGggLyB3aWR0aCkgLSBjdXJzb3JQb3Mucm93cztcbiAgICBjb25zdCBib3R0b21Db250ZW50SGVpZ2h0ID1cbiAgICAgIHByb21wdExpbmVVcERpZmYgKyAoYm90dG9tQ29udGVudCA/IGhlaWdodChib3R0b21Db250ZW50KSA6IDApO1xuICAgIGlmIChib3R0b21Db250ZW50SGVpZ2h0ID4gMCkge1xuICAgICAgdXRpbC51cCh0aGlzLnJsLCBib3R0b21Db250ZW50SGVpZ2h0KTtcbiAgICB9XG5cbiAgICAvLyBSZXNldCBjdXJzb3IgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZVxuICAgIHV0aWwubGVmdCh0aGlzLnJsLCBzdHJpbmdXaWR0aChsYXN0TGluZShmdWxsQ29udGVudCkpKTtcblxuICAgIC8vIEFkanVzdCBjdXJzb3Igb24gdGhlIHJpZ2h0XG4gICAgaWYgKGN1cnNvclBvcy5jb2xzID4gMCkge1xuICAgICAgdXRpbC5yaWdodCh0aGlzLnJsLCBjdXJzb3JQb3MuY29scyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHVwIHN0YXRlIGZvciBuZXh0IHJlLXJlbmRlcmluZ1xuICAgICAqL1xuICAgIHRoaXMuZXh0cmFMaW5lc1VuZGVyUHJvbXB0ID0gYm90dG9tQ29udGVudEhlaWdodDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodChmdWxsQ29udGVudCk7XG5cbiAgICB0aGlzLnJsLm91dHB1dC5tdXRlKCk7XG4gIH1cblxuICBjbGVhbihleHRyYUxpbmVzKSB7XG4gICAgaWYgKGV4dHJhTGluZXMgPiAwKSB7XG4gICAgICB1dGlsLmRvd24odGhpcy5ybCwgZXh0cmFMaW5lcyk7XG4gICAgfVxuXG4gICAgdXRpbC5jbGVhckxpbmUodGhpcy5ybCwgdGhpcy5oZWlnaHQpO1xuICB9XG5cbiAgZG9uZSgpIHtcbiAgICB0aGlzLnJsLnNldFByb21wdCgnJyk7XG4gICAgdGhpcy5ybC5vdXRwdXQudW5tdXRlKCk7XG4gICAgdGhpcy5ybC5vdXRwdXQud3JpdGUoYFxcbiR7YW5zaUVzY2FwZXMuY3Vyc29yU2hvd31gKTtcbiAgfVxuXG4gIHJlbGVhc2VDdXJzb3IoKSB7XG4gICAgaWYgKHRoaXMuZXh0cmFMaW5lc1VuZGVyUHJvbXB0ID4gMCkge1xuICAgICAgdXRpbC5kb3duKHRoaXMucmwsIHRoaXMuZXh0cmFMaW5lc1VuZGVyUHJvbXB0KTtcbiAgICB9XG4gIH1cblxuICBub3JtYWxpemVkQ2xpV2lkdGgoKSB7XG4gICAgY29uc3Qgd2lkdGggPSBjbGlXaWR0aCh7XG4gICAgICBkZWZhdWx0V2lkdGg6IDgwLFxuICAgICAgb3V0cHV0OiB0aGlzLnJsLm91dHB1dCxcbiAgICB9KTtcbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gbGluZXNcbiAgICovXG4gIGJyZWFrTGluZXMobGluZXMsIHdpZHRoID0gdGhpcy5ub3JtYWxpemVkQ2xpV2lkdGgoKSkge1xuICAgIC8vIEJyZWFrIGxpbmVzIHdobydyZSBsb25nZXIgdGhhbiB0aGUgY2xpIHdpZHRoIHNvIHdlIGNhbiBub3JtYWxpemUgdGhlIG5hdHVyYWwgbGluZVxuICAgIC8vIHJldHVybnMgYmVoYXZpb3IgYWNyb3NzIHRlcm1pbmFscy5cbiAgICAvLyByZTogdHJpbTogZmFsc2U7IGJ5IGRlZmF1bHQsIGB3cmFwLWFuc2lgIHRyaW1zIHdoaXRlc3BhY2UsIHdoaWNoXG4gICAgLy8gaXMgbm90IHdoYXQgd2Ugd2FudC5cbiAgICAvLyByZTogaGFyZDogdHJ1ZTsgYnkgZGVmYXVsdCcsIGB3cmFwLWFuc2lgIGRvZXMgc29mdCB3cmFwcGluZ1xuICAgIHJldHVybiBsaW5lcy5tYXAoKGxpbmUpID0+XG4gICAgICB3cmFwQW5zaShsaW5lLCB3aWR0aCwgeyB0cmltOiBmYWxzZSwgaGFyZDogdHJ1ZSB9KS5zcGxpdCgnXFxuJyksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudFxuICAgKi9cbiAgZm9yY2VMaW5lUmV0dXJuKGNvbnRlbnQsIHdpZHRoID0gdGhpcy5ub3JtYWxpemVkQ2xpV2lkdGgoKSkge1xuICAgIHJldHVybiB0aGlzLmJyZWFrTGluZXMoY29udGVudC5zcGxpdCgnXFxuJyksIHdpZHRoKS5mbGF0KCkuam9pbignXFxuJyk7XG4gIH1cbn1cbiIsIi8qKlxuICogQmFzZSBwcm9tcHQgaW1wbGVtZW50YXRpb25cbiAqIFNob3VsZCBiZSBleHRlbmRlZCBieSBwcm9tcHQgdHlwZXMuXG4gKi9cbmltcG9ydCBjb2xvcnMgZnJvbSAneW9jdG9jb2xvcnMtY2pzJztcbmltcG9ydCBydW5Bc3luYyBmcm9tICdydW4tYXN5bmMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtZXJnZU1hcCwgc2hhcmUsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IENob2ljZXMgZnJvbSAnLi4vb2JqZWN0cy9jaG9pY2VzLmpzJztcbmltcG9ydCBTY3JlZW5NYW5hZ2VyIGZyb20gJy4uL3V0aWxzL3NjcmVlbi1tYW5hZ2VyLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvbXB0IHtcbiAgY29uc3RydWN0b3IocXVlc3Rpb24sIHJsLCBhbnN3ZXJzKSB7XG4gICAgLy8gU2V0dXAgaW5zdGFuY2UgZGVmYXVsdHMgcHJvcGVydHlcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIHtcbiAgICAgIGFuc3dlcnMsXG4gICAgICBzdGF0dXM6ICdwZW5kaW5nJyxcbiAgICB9KTtcblxuICAgIC8vIFNldCBkZWZhdWx0cyBwcm9tcHQgb3B0aW9uc1xuICAgIHRoaXMub3B0ID0ge1xuICAgICAgdmFsaWRhdGU6ICgpID0+IHRydWUsXG4gICAgICB2YWxpZGF0aW5nVGV4dDogJycsXG4gICAgICBmaWx0ZXI6ICh2YWwpID0+IHZhbCxcbiAgICAgIGZpbHRlcmluZ1RleHQ6ICcnLFxuICAgICAgd2hlbjogKCkgPT4gdHJ1ZSxcbiAgICAgIHN1ZmZpeDogJycsXG4gICAgICBwcmVmaXg6IGNvbG9ycy5ncmVlbignPycpLFxuICAgICAgdHJhbnNmb3JtZXI6ICh2YWwpID0+IHZhbCxcbiAgICAgIC4uLnF1ZXN0aW9uLFxuICAgIH07XG5cbiAgICAvLyBNYWtlIHN1cmUgbmFtZSBpcyBwcmVzZW50XG4gICAgaWYgKCF0aGlzLm9wdC5uYW1lKSB7XG4gICAgICB0aGlzLnRocm93UGFyYW1FcnJvcignbmFtZScpO1xuICAgIH1cblxuICAgIC8vIFNldCBkZWZhdWx0IG1lc3NhZ2UgaWYgbm8gbWVzc2FnZSBkZWZpbmVkXG4gICAgdGhpcy5vcHQubWVzc2FnZSB8fD0gdGhpcy5vcHQubmFtZSArICc6JztcblxuICAgIC8vIE5vcm1hbGl6ZSBjaG9pY2VzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5vcHQuY2hvaWNlcykpIHtcbiAgICAgIHRoaXMub3B0LmNob2ljZXMgPSBuZXcgQ2hvaWNlcyh0aGlzLm9wdC5jaG9pY2VzLCBhbnN3ZXJzKTtcbiAgICB9XG5cbiAgICB0aGlzLnJsID0gcmw7XG4gICAgdGhpcy5zY3JlZW4gPSBuZXcgU2NyZWVuTWFuYWdlcih0aGlzLnJsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0aGUgSW5xdWlyeSBzZXNzaW9uIGFuZCBtYW5hZ2Ugb3V0cHV0IHZhbHVlIGZpbHRlcmluZ1xuICAgKiBAcmV0dXJuIHtQcm9taXNlfVxuICAgKi9cblxuICBydW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX3J1bihcbiAgICAgICAgKHZhbHVlKSA9PiByZXNvbHZlKHZhbHVlKSxcbiAgICAgICAgKGVycm9yKSA9PiByZWplY3QoZXJyb3IpLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIERlZmF1bHQgbm9vcCAodGhpcyBvbmUgc2hvdWxkIGJlIG92ZXJ3cml0dGVuIGluIHByb21wdHMpXG4gIF9ydW4oY2IpIHtcbiAgICBjYigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93IGFuIGVycm9yIHRlbGxpbmcgYSByZXF1aXJlZCBwYXJhbWV0ZXIgaXMgbWlzc2luZ1xuICAgKiBAcGFyYW0gIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgbWlzc2luZyBwYXJhbVxuICAgKiBAcmV0dXJuIHtUaHJvdyBFcnJvcn1cbiAgICovXG5cbiAgdGhyb3dQYXJhbUVycm9yKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHByb3ZpZGUgYSBgJyArIG5hbWUgKyAnYCBwYXJhbWV0ZXInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgVUkgY2xvc2VzLiBPdmVycmlkZSB0byBkbyBhbnkgc3BlY2lmaWMgY2xlYW51cCBuZWNlc3NhcnlcbiAgICovXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuc2NyZWVuLnJlbGVhc2VDdXJzb3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gdGhlIHByb3ZpZGVkIHZhbGlkYXRpb24gbWV0aG9kIGVhY2ggdGltZSBhIHN1Ym1pdCBldmVudCBvY2N1ci5cbiAgICogQHBhcmFtICB7UnguT2JzZXJ2YWJsZX0gc3VibWl0IC0gc3VibWl0IGV2ZW50IGZsb3dcbiAgICogQHJldHVybiB7T2JqZWN0fSAgICAgICAgT2JqZWN0IGNvbnRhaW5pbmcgdHdvIG9ic2VydmFibGVzOiBgc3VjY2Vzc2AgYW5kIGBlcnJvcmBcbiAgICovXG4gIGhhbmRsZVN1Ym1pdEV2ZW50cyhzdWJtaXQpIHtcbiAgICBjb25zdCB2YWxpZGF0ZSA9IHJ1bkFzeW5jKHRoaXMub3B0LnZhbGlkYXRlKTtcbiAgICBjb25zdCBhc3luY0ZpbHRlciA9IHJ1bkFzeW5jKHRoaXMub3B0LmZpbHRlcik7XG4gICAgY29uc3QgdmFsaWRhdGlvbiA9IHN1Ym1pdC5waXBlKFxuICAgICAgbWVyZ2VNYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgIHRoaXMuc3RhcnRTcGlubmVyKHZhbHVlLCB0aGlzLm9wdC5maWx0ZXJpbmdUZXh0KTtcbiAgICAgICAgcmV0dXJuIGFzeW5jRmlsdGVyKHZhbHVlLCB0aGlzLmFuc3dlcnMpLnRoZW4oXG4gICAgICAgICAgKGZpbHRlcmVkVmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRTcGlubmVyKGZpbHRlcmVkVmFsdWUsIHRoaXMub3B0LnZhbGlkYXRpbmdUZXh0KTtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZShmaWx0ZXJlZFZhbHVlLCB0aGlzLmFuc3dlcnMpLnRoZW4oXG4gICAgICAgICAgICAgIChpc1ZhbGlkKSA9PiAoeyBpc1ZhbGlkLCB2YWx1ZTogZmlsdGVyZWRWYWx1ZSB9KSxcbiAgICAgICAgICAgICAgKGVycm9yXykgPT4gKHsgaXNWYWxpZDogZXJyb3JfLCB2YWx1ZTogZmlsdGVyZWRWYWx1ZSB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3JfKSA9PiAoeyBpc1ZhbGlkOiBlcnJvcl8gfSksXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlKCksXG4gICAgKTtcblxuICAgIGNvbnN0IHN1Y2Nlc3MgPSB2YWxpZGF0aW9uLnBpcGUoXG4gICAgICBmaWx0ZXIoKHN0YXRlKSA9PiBzdGF0ZS5pc1ZhbGlkID09PSB0cnVlKSxcbiAgICAgIHRha2UoMSksXG4gICAgKTtcbiAgICBjb25zdCBlcnJvciA9IHZhbGlkYXRpb24ucGlwZShcbiAgICAgIGZpbHRlcigoc3RhdGUpID0+IHN0YXRlLmlzVmFsaWQgIT09IHRydWUpLFxuICAgICAgdGFrZVVudGlsKHN1Y2Nlc3MpLFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzcyxcbiAgICAgIGVycm9yLFxuICAgIH07XG4gIH1cblxuICBzdGFydFNwaW5uZXIodmFsdWUsIGJvdHRvbUNvbnRlbnQpIHtcbiAgICB2YWx1ZSA9IHRoaXMuZ2V0U3Bpbm5pbmdWYWx1ZSh2YWx1ZSk7XG4gICAgLy8gSWYgdGhlIHF1ZXN0aW9uIHdpbGwgc3BpbiwgY3V0IG9mZiB0aGUgcHJlZml4IChmb3IgbGF5b3V0IHB1cnBvc2VzKVxuICAgIGNvbnN0IGNvbnRlbnQgPSBib3R0b21Db250ZW50XG4gICAgICA/IHRoaXMuZ2V0UXVlc3Rpb24oKSArIHZhbHVlXG4gICAgICA6IHRoaXMuZ2V0UXVlc3Rpb24oKS5zbGljZSh0aGlzLm9wdC5wcmVmaXgubGVuZ3RoICsgMSkgKyB2YWx1ZTtcblxuICAgIHRoaXMuc2NyZWVuLnJlbmRlcldpdGhTcGlubmVyKGNvbnRlbnQsIGJvdHRvbUNvbnRlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IG92ZXJyaWRlLCBlLmcuIGZvciBwYXNzd29yZCBwcm9tcHRzXG4gICAqIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL1NCb3Vkcmlhcy9JbnF1aXJlci5qcy9pc3N1ZXMvMTAyMlxuICAgKlxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IHZhbHVlIHRvIGRpc3BsYXkgd2hpbGUgc3Bpbm5pbmdcbiAgICovXG4gIGdldFNwaW5uaW5nVmFsdWUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgdGhlIHByb21wdCBxdWVzdGlvbiBzdHJpbmdcbiAgICogQHJldHVybiB7U3RyaW5nfSBwcm9tcHQgcXVlc3Rpb24gc3RyaW5nXG4gICAqL1xuICBnZXRRdWVzdGlvbigpIHtcbiAgICBsZXQgbWVzc2FnZSA9XG4gICAgICAodGhpcy5vcHQucHJlZml4ID8gdGhpcy5vcHQucHJlZml4ICsgJyAnIDogJycpICtcbiAgICAgIGNvbG9ycy5ib2xkKHRoaXMub3B0Lm1lc3NhZ2UpICtcbiAgICAgIHRoaXMub3B0LnN1ZmZpeCArXG4gICAgICBjb2xvcnMucmVzZXQoJyAnKTtcblxuICAgIC8vIEFwcGVuZCB0aGUgZGVmYXVsdCBpZiBhdmFpbGFibGUsIGFuZCBpZiBxdWVzdGlvbiBpc24ndCB0b3VjaGVkL2Fuc3dlcmVkXG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHQuZGVmYXVsdCAhPSBudWxsICYmXG4gICAgICB0aGlzLnN0YXR1cyAhPT0gJ3RvdWNoZWQnICYmXG4gICAgICB0aGlzLnN0YXR1cyAhPT0gJ2Fuc3dlcmVkJ1xuICAgICkge1xuICAgICAgLy8gSWYgZGVmYXVsdCBwYXNzd29yZCBpcyBzdXBwbGllZCwgaGlkZSBpdFxuICAgICAgbWVzc2FnZSArPVxuICAgICAgICB0aGlzLm9wdC50eXBlID09PSAncGFzc3dvcmQnXG4gICAgICAgICAgPyBjb2xvcnMuaXRhbGljKGNvbG9ycy5kaW0oJ1toaWRkZW5dICcpKVxuICAgICAgICAgIDogY29sb3JzLmRpbSgnKCcgKyB0aGlzLm9wdC5kZWZhdWx0ICsgJykgJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH1cbn1cbiIsIi8qKlxuICogYGxpc3RgIHR5cGUgcHJvbXB0XG4gKi9cblxuaW1wb3J0IGFuc2lFc2NhcGVzIGZyb20gJ2Fuc2ktZXNjYXBlcyc7XG5pbXBvcnQgY29sb3JzIGZyb20gJ3lvY3RvY29sb3JzLWNqcyc7XG5pbXBvcnQgZmlndXJlcyBmcm9tICdAaW5xdWlyZXIvZmlndXJlcyc7XG5pbXBvcnQgcnVuQXN5bmMgZnJvbSAncnVuLWFzeW5jJztcbmltcG9ydCB7IGZsYXRNYXAsIG1hcCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgb2JzZXJ2ZSBmcm9tICcuLi91dGlscy9ldmVudHMuanMnO1xuaW1wb3J0IFBhZ2luYXRvciBmcm9tICcuLi91dGlscy9wYWdpbmF0b3IuanMnO1xuaW1wb3J0IGluY3JlbWVudExpc3RJbmRleCBmcm9tICcuLi91dGlscy9pbmNyZW1lbnRMaXN0SW5kZXguanMnO1xuaW1wb3J0IEJhc2UgZnJvbSAnLi9iYXNlLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlzdFByb21wdCBleHRlbmRzIEJhc2Uge1xuICBjb25zdHJ1Y3RvcihxdWVzdGlvbnMsIHJsLCBhbnN3ZXJzKSB7XG4gICAgc3VwZXIocXVlc3Rpb25zLCBybCwgYW5zd2Vycyk7XG5cbiAgICBpZiAoIXRoaXMub3B0LmNob2ljZXMpIHtcbiAgICAgIHRoaXMudGhyb3dQYXJhbUVycm9yKCdjaG9pY2VzJyk7XG4gICAgfVxuXG4gICAgdGhpcy5maXJzdFJlbmRlciA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZCA9IDA7XG5cbiAgICBjb25zdCBkZWYgPSB0aGlzLm9wdC5kZWZhdWx0O1xuXG4gICAgLy8gSWYgZGVmIGlzIGEgTnVtYmVyLCB0aGVuIHVzZSBhcyBpbmRleC4gT3RoZXJ3aXNlLCBjaGVjayBmb3IgdmFsdWUuXG4gICAgaWYgKHR5cGVvZiBkZWYgPT09ICdudW1iZXInICYmIGRlZiA+PSAwICYmIGRlZiA8IHRoaXMub3B0LmNob2ljZXMucmVhbExlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZCA9IGRlZjtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZWYgIT09ICdudW1iZXInICYmIGRlZiAhPSBudWxsKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMub3B0LmNob2ljZXMucmVhbENob2ljZXMuZmluZEluZGV4KCh7IHZhbHVlIH0pID0+IHZhbHVlID09PSBkZWYpO1xuICAgICAgdGhpcy5zZWxlY3RlZCA9IE1hdGgubWF4KGluZGV4LCAwKTtcbiAgICB9XG5cbiAgICAvLyBNYWtlIHN1cmUgbm8gZGVmYXVsdCBpcyBzZXQgKHNvIGl0IHdvbid0IGJlIHByaW50ZWQpXG4gICAgdGhpcy5vcHQuZGVmYXVsdCA9IG51bGw7XG5cbiAgICBjb25zdCBzaG91bGRMb29wID0gdGhpcy5vcHQubG9vcCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHRoaXMub3B0Lmxvb3A7XG4gICAgdGhpcy5wYWdpbmF0b3IgPSBuZXcgUGFnaW5hdG9yKHRoaXMuc2NyZWVuLCB7IGlzSW5maW5pdGU6IHNob3VsZExvb3AgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgdGhlIElucXVpcnkgc2Vzc2lvblxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2IgICAgICBDYWxsYmFjayB3aGVuIHByb21wdCBpcyBkb25lXG4gICAqIEByZXR1cm4ge3RoaXN9XG4gICAqL1xuXG4gIF9ydW4oY2IpIHtcbiAgICB0aGlzLmRvbmUgPSBjYjtcblxuICAgIGNvbnN0IGV2ZW50cyA9IG9ic2VydmUodGhpcy5ybCk7XG4gICAgZXZlbnRzLm5vcm1hbGl6ZWRVcEtleS5waXBlKHRha2VVbnRpbChldmVudHMubGluZSkpLmZvckVhY2godGhpcy5vblVwS2V5LmJpbmQodGhpcykpO1xuICAgIGV2ZW50cy5ub3JtYWxpemVkRG93bktleVxuICAgICAgLnBpcGUodGFrZVVudGlsKGV2ZW50cy5saW5lKSlcbiAgICAgIC5mb3JFYWNoKHRoaXMub25Eb3duS2V5LmJpbmQodGhpcykpO1xuICAgIGV2ZW50cy5udW1iZXJLZXkucGlwZSh0YWtlVW50aWwoZXZlbnRzLmxpbmUpKS5mb3JFYWNoKHRoaXMub25OdW1iZXJLZXkuYmluZCh0aGlzKSk7XG4gICAgZXZlbnRzLmxpbmVcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBtYXAodGhpcy5nZXRDdXJyZW50VmFsdWUuYmluZCh0aGlzKSksXG4gICAgICAgIGZsYXRNYXAoKHZhbHVlKSA9PlxuICAgICAgICAgIHJ1bkFzeW5jKHRoaXMub3B0LmZpbHRlcikodmFsdWUsIHRoaXMuYW5zd2VycykuY2F0Y2goKGVycm9yKSA9PiBlcnJvciksXG4gICAgICAgICksXG4gICAgICApXG4gICAgICAuZm9yRWFjaCh0aGlzLm9uU3VibWl0LmJpbmQodGhpcykpO1xuXG4gICAgLy8gSW5pdCB0aGUgcHJvbXB0XG4gICAgdGhpcy5yZW5kZXIoKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgcHJvbXB0IHRvIHNjcmVlblxuICAgKiBAcmV0dXJuIHtMaXN0UHJvbXB0fSBzZWxmXG4gICAqL1xuXG4gIHJlbmRlcigpIHtcbiAgICAvLyBSZW5kZXIgcXVlc3Rpb25cbiAgICBsZXQgbWVzc2FnZSA9IHRoaXMuZ2V0UXVlc3Rpb24oKTtcblxuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB7XG4gICAgICBtZXNzYWdlICs9IGNvbG9ycy5kaW0oJyhVc2UgYXJyb3cga2V5cyknKTtcbiAgICB9XG5cbiAgICAvLyBSZW5kZXIgY2hvaWNlcyBvciBhbnN3ZXIgZGVwZW5kaW5nIG9uIHRoZSBzdGF0ZVxuICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gJ2Fuc3dlcmVkJykge1xuICAgICAgbWVzc2FnZSArPSBjb2xvcnMuY3lhbih0aGlzLm9wdC5jaG9pY2VzLmdldENob2ljZSh0aGlzLnNlbGVjdGVkKS5zaG9ydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNob2ljZXNTdHIgPSBsaXN0UmVuZGVyKHRoaXMub3B0LmNob2ljZXMsIHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgY29uc3QgaW5kZXhQb3NpdGlvbiA9IHRoaXMub3B0LmNob2ljZXMuaW5kZXhPZihcbiAgICAgICAgdGhpcy5vcHQuY2hvaWNlcy5nZXRDaG9pY2UodGhpcy5zZWxlY3RlZCksXG4gICAgICApO1xuICAgICAgY29uc3QgcmVhbEluZGV4UG9zaXRpb24gPVxuICAgICAgICB0aGlzLm9wdC5jaG9pY2VzLnJlZHVjZSgoYWNjLCB2YWx1ZSwgaSkgPT4ge1xuICAgICAgICAgIC8vIERvbnQgY291bnQgbGluZXMgcGFzdCB0aGUgY2hvaWNlIHdlIGFyZSBsb29raW5nIGF0XG4gICAgICAgICAgaWYgKGkgPiBpbmRleFBvc2l0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBBZGQgbGluZSBpZiBpdCdzIGEgc2VwYXJhdG9yXG4gICAgICAgICAgaWYgKHZhbHVlLnR5cGUgPT09ICdzZXBhcmF0b3InKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjICsgMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgbCA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgLy8gTm9uLXN0cmluZ3MgdGFrZSB1cCBvbmUgbGluZVxuICAgICAgICAgIGlmICh0eXBlb2YgbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBhY2MgKyAxO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENhbGN1bGF0ZSBsaW5lcyB0YWtlbiB1cCBieSBzdHJpbmdcbiAgICAgICAgICBsID0gbC5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgcmV0dXJuIGFjYyArIGwubGVuZ3RoO1xuICAgICAgICB9LCAwKSAtIDE7XG4gICAgICBtZXNzYWdlICs9XG4gICAgICAgICdcXG4nICsgdGhpcy5wYWdpbmF0b3IucGFnaW5hdGUoY2hvaWNlc1N0ciwgcmVhbEluZGV4UG9zaXRpb24sIHRoaXMub3B0LnBhZ2VTaXplKTtcbiAgICB9XG5cbiAgICBtZXNzYWdlICs9IGFuc2lFc2NhcGVzLmN1cnNvckhpZGU7XG4gICAgdGhpcy5maXJzdFJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5zY3JlZW4ucmVuZGVyKG1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gdXNlciBwcmVzcyBgZW50ZXJgIGtleVxuICAgKi9cblxuICBvblN1Ym1pdCh2YWx1ZSkge1xuICAgIHRoaXMuc3RhdHVzID0gJ2Fuc3dlcmVkJztcblxuICAgIC8vIFJlcmVuZGVyIHByb21wdFxuICAgIHRoaXMucmVuZGVyKCk7XG5cbiAgICB0aGlzLnNjcmVlbi5kb25lKCk7XG4gICAgdGhpcy5kb25lKHZhbHVlKTtcbiAgfVxuXG4gIGdldEN1cnJlbnRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHQuY2hvaWNlcy5nZXRDaG9pY2UodGhpcy5zZWxlY3RlZCkudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB1c2VyIHByZXNzIGEga2V5XG4gICAqL1xuICBvblVwS2V5KCkge1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBpbmNyZW1lbnRMaXN0SW5kZXgodGhpcy5zZWxlY3RlZCwgJ3VwJywgdGhpcy5vcHQpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBvbkRvd25LZXkoKSB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IGluY3JlbWVudExpc3RJbmRleCh0aGlzLnNlbGVjdGVkLCAnZG93bicsIHRoaXMub3B0KTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgb25OdW1iZXJLZXkoaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgPD0gdGhpcy5vcHQuY2hvaWNlcy5yZWFsTGVuZ3RoKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkID0gaW5wdXQgLSAxO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBGdW5jdGlvbiBmb3IgcmVuZGVyaW5nIGxpc3QgY2hvaWNlc1xuICogQHBhcmFtICB7TnVtYmVyfSBwb2ludGVyIFBvc2l0aW9uIG9mIHRoZSBwb2ludGVyXG4gKiBAcmV0dXJuIHtTdHJpbmd9ICAgICAgICAgUmVuZGVyZWQgY29udGVudFxuICovXG5mdW5jdGlvbiBsaXN0UmVuZGVyKGNob2ljZXMsIHBvaW50ZXIpIHtcbiAgbGV0IG91dHB1dCA9ICcnO1xuICBsZXQgc2VwYXJhdG9yT2Zmc2V0ID0gMDtcblxuICBjaG9pY2VzLmZvckVhY2goKGNob2ljZSwgaSkgPT4ge1xuICAgIGlmIChjaG9pY2UudHlwZSA9PT0gJ3NlcGFyYXRvcicpIHtcbiAgICAgIHNlcGFyYXRvck9mZnNldCsrO1xuICAgICAgb3V0cHV0ICs9ICcgICcgKyBjaG9pY2UgKyAnXFxuJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2hvaWNlLmRpc2FibGVkKSB7XG4gICAgICBzZXBhcmF0b3JPZmZzZXQrKztcbiAgICAgIG91dHB1dCArPSAnICAtICcgKyBjaG9pY2UubmFtZTtcbiAgICAgIG91dHB1dCArPSBgICgke1xuICAgICAgICB0eXBlb2YgY2hvaWNlLmRpc2FibGVkID09PSAnc3RyaW5nJyA/IGNob2ljZS5kaXNhYmxlZCA6ICdEaXNhYmxlZCdcbiAgICAgIH0pYDtcbiAgICAgIG91dHB1dCArPSAnXFxuJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc1NlbGVjdGVkID0gaSAtIHNlcGFyYXRvck9mZnNldCA9PT0gcG9pbnRlcjtcbiAgICBsZXQgbGluZSA9IChpc1NlbGVjdGVkID8gZmlndXJlcy5wb2ludGVyICsgJyAnIDogJyAgJykgKyBjaG9pY2UubmFtZTtcbiAgICBpZiAoaXNTZWxlY3RlZCkge1xuICAgICAgbGluZSA9IGNvbG9ycy5jeWFuKGxpbmUpO1xuICAgIH1cblxuICAgIG91dHB1dCArPSBsaW5lICsgJyBcXG4nO1xuICB9KTtcblxuICByZXR1cm4gb3V0cHV0LnJlcGxhY2VBbGwoL1xcbiQvZywgJycpO1xufVxuIiwiLyoqXG4gKiBgaW5wdXRgIHR5cGUgcHJvbXB0XG4gKi9cblxuaW1wb3J0IGNvbG9ycyBmcm9tICd5b2N0b2NvbG9ycy1janMnO1xuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCBvYnNlcnZlIGZyb20gJy4uL3V0aWxzL2V2ZW50cy5qcyc7XG5pbXBvcnQgQmFzZSBmcm9tICcuL2Jhc2UuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnB1dFByb21wdCBleHRlbmRzIEJhc2Uge1xuICAvKipcbiAgICogU3RhcnQgdGhlIElucXVpcnkgc2Vzc2lvblxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2IgICAgICBDYWxsYmFjayB3aGVuIHByb21wdCBpcyBkb25lXG4gICAqIEByZXR1cm4ge3RoaXN9XG4gICAqL1xuXG4gIF9ydW4oY2IpIHtcbiAgICB0aGlzLmRvbmUgPSBjYjtcblxuICAgIC8vIE9uY2UgdXNlciBjb25maXJtIChlbnRlciBrZXkpXG4gICAgY29uc3QgZXZlbnRzID0gb2JzZXJ2ZSh0aGlzLnJsKTtcbiAgICBjb25zdCBzdWJtaXQgPSBldmVudHMubGluZS5waXBlKG1hcCh0aGlzLmZpbHRlcklucHV0LmJpbmQodGhpcykpKTtcblxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0aGlzLmhhbmRsZVN1Ym1pdEV2ZW50cyhzdWJtaXQpO1xuICAgIHZhbGlkYXRpb24uc3VjY2Vzcy5mb3JFYWNoKHRoaXMub25FbmQuYmluZCh0aGlzKSk7XG4gICAgdmFsaWRhdGlvbi5lcnJvci5mb3JFYWNoKHRoaXMub25FcnJvci5iaW5kKHRoaXMpKTtcblxuICAgIGV2ZW50cy5rZXlwcmVzc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHZhbGlkYXRpb24uc3VjY2VzcykpXG4gICAgICAuZm9yRWFjaCh0aGlzLm9uS2V5cHJlc3MuYmluZCh0aGlzKSk7XG5cbiAgICAvLyBJbml0XG4gICAgdGhpcy5yZW5kZXIoKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgcHJvbXB0IHRvIHNjcmVlblxuICAgKiBAcmV0dXJuIHtJbnB1dFByb21wdH0gc2VsZlxuICAgKi9cblxuICByZW5kZXIoZXJyb3IpIHtcbiAgICBsZXQgYm90dG9tQ29udGVudCA9ICcnO1xuICAgIGxldCBhcHBlbmRDb250ZW50ID0gJyc7XG4gICAgbGV0IG1lc3NhZ2UgPSB0aGlzLmdldFF1ZXN0aW9uKCk7XG4gICAgY29uc3QgeyB0cmFuc2Zvcm1lciB9ID0gdGhpcy5vcHQ7XG4gICAgY29uc3QgaXNGaW5hbCA9IHRoaXMuc3RhdHVzID09PSAnYW5zd2VyZWQnO1xuXG4gICAgYXBwZW5kQ29udGVudCA9IGlzRmluYWwgPyB0aGlzLmFuc3dlciA6IHRoaXMucmwubGluZTtcblxuICAgIGlmICh0cmFuc2Zvcm1lcikge1xuICAgICAgbWVzc2FnZSArPSB0cmFuc2Zvcm1lcihhcHBlbmRDb250ZW50LCB0aGlzLmFuc3dlcnMsIHsgaXNGaW5hbCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVzc2FnZSArPSBpc0ZpbmFsID8gY29sb3JzLmN5YW4oYXBwZW5kQ29udGVudCkgOiBhcHBlbmRDb250ZW50O1xuICAgIH1cblxuICAgIGlmIChlcnJvcikge1xuICAgICAgYm90dG9tQ29udGVudCA9IGNvbG9ycy5yZWQoJz4+ICcpICsgZXJyb3I7XG4gICAgfVxuXG4gICAgdGhpcy5zY3JlZW4ucmVuZGVyKG1lc3NhZ2UsIGJvdHRvbUNvbnRlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gdXNlciBwcmVzcyBgZW50ZXJgIGtleVxuICAgKi9cblxuICBmaWx0ZXJJbnB1dChpbnB1dCkge1xuICAgIGlmICghaW5wdXQpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdC5kZWZhdWx0ID09IG51bGwgPyAnJyA6IHRoaXMub3B0LmRlZmF1bHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG5cbiAgb25FbmQoc3RhdGUpIHtcbiAgICB0aGlzLmFuc3dlciA9IHN0YXRlLnZhbHVlO1xuICAgIHRoaXMuc3RhdHVzID0gJ2Fuc3dlcmVkJztcblxuICAgIC8vIFJlLXJlbmRlciBwcm9tcHRcbiAgICB0aGlzLnJlbmRlcigpO1xuXG4gICAgdGhpcy5zY3JlZW4uZG9uZSgpO1xuICAgIHRoaXMuZG9uZShzdGF0ZS52YWx1ZSk7XG4gIH1cblxuICBvbkVycm9yKHsgdmFsdWUgPSAnJywgaXNWYWxpZCB9KSB7XG4gICAgdGhpcy5ybC5saW5lICs9IHZhbHVlO1xuICAgIHRoaXMucmwuY3Vyc29yICs9IHZhbHVlLmxlbmd0aDtcbiAgICB0aGlzLnJlbmRlcihpc1ZhbGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHVzZXIgcHJlc3MgYSBrZXlcbiAgICovXG5cbiAgb25LZXlwcmVzcygpIHtcbiAgICB0aGlzLnN0YXR1cyA9ICd0b3VjaGVkJztcblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cbn1cbiIsIi8qKlxuICogYGlucHV0YCB0eXBlIHByb21wdFxuICovXG5cbmltcG9ydCBJbnB1dCBmcm9tICcuL2lucHV0LmpzJztcblxuLyoqXG4gKiBFeHRlbnRpb24gb2YgdGhlIElucHV0IHByb21wdCBzcGVjaWZpY2FsbHkgZm9yIHVzZSB3aXRoIG51bWJlciBpbnB1dHMuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTnVtYmVyUHJvbXB0IGV4dGVuZHMgSW5wdXQge1xuICBmaWx0ZXJJbnB1dChpbnB1dCkge1xuICAgIGlmIChpbnB1dCAmJiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpbnB1dCA9IGlucHV0LnRyaW0oKTtcbiAgICAgIC8vIE1hdGNoIGEgbnVtYmVyIGluIHRoZSBpbnB1dFxuICAgICAgY29uc3QgbnVtYmVyTWF0Y2ggPSBpbnB1dC5tYXRjaCgvKF4tP1xcZCt8Xi0/XFxkK1xcLlxcZCp8XlxcZCpcXC5cXGQrKShlXFxkKyk/JC8pO1xuICAgICAgLy8gSWYgYSBudW1iZXIgaXMgZm91bmQsIHJldHVybiB0aGF0IGlucHV0LlxuICAgICAgaWYgKG51bWJlck1hdGNoKSB7XG4gICAgICAgIHJldHVybiBOdW1iZXIobnVtYmVyTWF0Y2hbMF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIHRoZSBpbnB1dCB3YXMgaW52YWxpZCByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUuXG4gICAgcmV0dXJuIHRoaXMub3B0LmRlZmF1bHQgPT0gbnVsbCA/IE51bWJlci5OYU4gOiB0aGlzLm9wdC5kZWZhdWx0O1xuICB9XG59XG4iLCIvKipcbiAqIGBjb25maXJtYCB0eXBlIHByb21wdFxuICovXG5cbmltcG9ydCBjb2xvcnMgZnJvbSAneW9jdG9jb2xvcnMtY2pzJztcbmltcG9ydCB7IHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IG9ic2VydmUgZnJvbSAnLi4vdXRpbHMvZXZlbnRzLmpzJztcbmltcG9ydCBCYXNlIGZyb20gJy4vYmFzZS5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbmZpcm1Qcm9tcHQgZXh0ZW5kcyBCYXNlIHtcbiAgY29uc3RydWN0b3IocXVlc3Rpb25zLCBybCwgYW5zd2Vycykge1xuICAgIHN1cGVyKHF1ZXN0aW9ucywgcmwsIGFuc3dlcnMpO1xuXG4gICAgbGV0IHJhd0RlZmF1bHQgPSB0cnVlO1xuXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdCwge1xuICAgICAgZmlsdGVyKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsICYmIGlucHV0ICE9PSAnJykge1xuICAgICAgICAgIGlmICgvXnkoZXMpPy9pLnRlc3QoaW5wdXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICBpZiAoL15uKG8pPy9pLnRlc3QoaW5wdXQpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJhd0RlZmF1bHQ7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMub3B0LmRlZmF1bHQgIT0gbnVsbCkge1xuICAgICAgcmF3RGVmYXVsdCA9IEJvb2xlYW4odGhpcy5vcHQuZGVmYXVsdCk7XG4gICAgfVxuXG4gICAgdGhpcy5vcHQuZGVmYXVsdCA9IHJhd0RlZmF1bHQgPyAnWS9uJyA6ICd5L04nO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSBJbnF1aXJ5IHNlc3Npb25cbiAgICogQHBhcmFtICB7RnVuY3Rpb259IGNiICAgQ2FsbGJhY2sgd2hlbiBwcm9tcHQgaXMgZG9uZVxuICAgKiBAcmV0dXJuIHt0aGlzfVxuICAgKi9cblxuICBfcnVuKGNiKSB7XG4gICAgdGhpcy5kb25lID0gY2I7XG5cbiAgICAvLyBPbmNlIHVzZXIgY29uZmlybSAoZW50ZXIga2V5KVxuICAgIGNvbnN0IGV2ZW50cyA9IG9ic2VydmUodGhpcy5ybCk7XG4gICAgZXZlbnRzLmtleXByZXNzLnBpcGUodGFrZVVudGlsKGV2ZW50cy5saW5lKSkuZm9yRWFjaCh0aGlzLm9uS2V5cHJlc3MuYmluZCh0aGlzKSk7XG5cbiAgICBldmVudHMubGluZS5waXBlKHRha2UoMSkpLmZvckVhY2godGhpcy5vbkVuZC5iaW5kKHRoaXMpKTtcblxuICAgIC8vIEluaXRcbiAgICB0aGlzLnJlbmRlcigpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBwcm9tcHQgdG8gc2NyZWVuXG4gICAqIEByZXR1cm4ge0NvbmZpcm1Qcm9tcHR9IHNlbGZcbiAgICovXG5cbiAgcmVuZGVyKGFuc3dlcikge1xuICAgIGxldCBtZXNzYWdlID0gdGhpcy5nZXRRdWVzdGlvbigpO1xuXG4gICAgaWYgKHR5cGVvZiBhbnN3ZXIgPT09ICdib29sZWFuJykge1xuICAgICAgbWVzc2FnZSArPSBjb2xvcnMuY3lhbihhbnN3ZXIgPyAnWWVzJyA6ICdObycpO1xuICAgIH0gZWxzZSBpZiAoYW5zd2VyKSB7XG4gICAgICBtZXNzYWdlICs9IGFuc3dlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVzc2FnZSArPSB0aGlzLnJsLmxpbmU7XG4gICAgfVxuXG4gICAgdGhpcy5zY3JlZW4ucmVuZGVyKG1lc3NhZ2UpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB1c2VyIHByZXNzIGBlbnRlcmAga2V5XG4gICAqL1xuXG4gIG9uRW5kKGlucHV0KSB7XG4gICAgdGhpcy5zdGF0dXMgPSAnYW5zd2VyZWQnO1xuXG4gICAgbGV0IG91dHB1dCA9IHRoaXMub3B0LmZpbHRlcihpbnB1dCk7XG4gICAgaWYgKHRoaXMub3B0LnRyYW5zZm9ybWVyKSB7XG4gICAgICBvdXRwdXQgPSB0aGlzLm9wdC50cmFuc2Zvcm1lcihvdXRwdXQpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcihvdXRwdXQpO1xuXG4gICAgdGhpcy5zY3JlZW4uZG9uZSgpO1xuICAgIHRoaXMuZG9uZShvdXRwdXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gdXNlciBwcmVzcyBhIGtleVxuICAgKi9cblxuICBvbktleXByZXNzKCkge1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cbn1cbiIsIi8qKlxuICogYHJhd2xpc3RgIHR5cGUgcHJvbXB0XG4gKi9cblxuaW1wb3J0IGNvbG9ycyBmcm9tICd5b2N0b2NvbG9ycy1janMnO1xuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCBTZXBhcmF0b3IgZnJvbSAnLi4vb2JqZWN0cy9zZXBhcmF0b3IuanMnO1xuaW1wb3J0IG9ic2VydmUgZnJvbSAnLi4vdXRpbHMvZXZlbnRzLmpzJztcbmltcG9ydCBQYWdpbmF0b3IgZnJvbSAnLi4vdXRpbHMvcGFnaW5hdG9yLmpzJztcbmltcG9ydCBpbmNyZW1lbnRMaXN0SW5kZXggZnJvbSAnLi4vdXRpbHMvaW5jcmVtZW50TGlzdEluZGV4LmpzJztcbmltcG9ydCBCYXNlIGZyb20gJy4vYmFzZS5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJhd0xpc3RQcm9tcHQgZXh0ZW5kcyBCYXNlIHtcbiAgY29uc3RydWN0b3IocXVlc3Rpb25zLCBybCwgYW5zd2Vycykge1xuICAgIHN1cGVyKHF1ZXN0aW9ucywgcmwsIGFuc3dlcnMpO1xuXG4gICAgdGhpcy5oaWRkZW5MaW5lID0gJyc7XG4gICAgdGhpcy5sYXN0S2V5ID0gJyc7XG5cbiAgICBpZiAoIXRoaXMub3B0LmNob2ljZXMpIHtcbiAgICAgIHRoaXMudGhyb3dQYXJhbUVycm9yKCdjaG9pY2VzJyk7XG4gICAgfVxuXG4gICAgdGhpcy5vcHQudmFsaWRDaG9pY2VzID0gdGhpcy5vcHQuY2hvaWNlcy5maWx0ZXIoU2VwYXJhdG9yLmV4Y2x1ZGUpO1xuXG4gICAgdGhpcy5zZWxlY3RlZCA9IDA7XG4gICAgdGhpcy5yYXdEZWZhdWx0ID0gMDtcblxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHQsIHtcbiAgICAgIHZhbGlkYXRlKHZhbCkge1xuICAgICAgICByZXR1cm4gdmFsICE9IG51bGw7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVmID0gdGhpcy5vcHQuZGVmYXVsdDtcbiAgICBpZiAodHlwZW9mIGRlZiA9PT0gJ251bWJlcicgJiYgZGVmID49IDAgJiYgZGVmIDwgdGhpcy5vcHQuY2hvaWNlcy5yZWFsTGVuZ3RoKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkID0gZGVmO1xuICAgICAgdGhpcy5yYXdEZWZhdWx0ID0gZGVmO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZiAhPT0gJ251bWJlcicgJiYgZGVmICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5vcHQuY2hvaWNlcy5yZWFsQ2hvaWNlcy5maW5kSW5kZXgoKHsgdmFsdWUgfSkgPT4gdmFsdWUgPT09IGRlZik7XG4gICAgICBjb25zdCBzYWZlSW5kZXggPSBNYXRoLm1heChpbmRleCwgMCk7XG4gICAgICB0aGlzLnNlbGVjdGVkID0gc2FmZUluZGV4O1xuICAgICAgdGhpcy5yYXdEZWZhdWx0ID0gc2FmZUluZGV4O1xuICAgIH1cblxuICAgIC8vIE1ha2Ugc3VyZSBubyBkZWZhdWx0IGlzIHNldCAoc28gaXQgd29uJ3QgYmUgcHJpbnRlZClcbiAgICB0aGlzLm9wdC5kZWZhdWx0ID0gbnVsbDtcblxuICAgIGNvbnN0IHNob3VsZExvb3AgPSB0aGlzLm9wdC5sb29wID09PSB1bmRlZmluZWQgPyB0cnVlIDogdGhpcy5vcHQubG9vcDtcbiAgICB0aGlzLnBhZ2luYXRvciA9IG5ldyBQYWdpbmF0b3IodW5kZWZpbmVkLCB7IGlzSW5maW5pdGU6IHNob3VsZExvb3AgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgdGhlIElucXVpcnkgc2Vzc2lvblxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2IgICAgICBDYWxsYmFjayB3aGVuIHByb21wdCBpcyBkb25lXG4gICAqIEByZXR1cm4ge3RoaXN9XG4gICAqL1xuXG4gIF9ydW4oY2IpIHtcbiAgICB0aGlzLmRvbmUgPSBjYjtcblxuICAgIC8vIE9uY2UgdXNlciBjb25maXJtIChlbnRlciBrZXkpXG4gICAgY29uc3QgZXZlbnRzID0gb2JzZXJ2ZSh0aGlzLnJsKTtcbiAgICBjb25zdCBzdWJtaXQgPSBldmVudHMubGluZS5waXBlKG1hcCh0aGlzLmdldEN1cnJlbnRWYWx1ZS5iaW5kKHRoaXMpKSk7XG5cbiAgICBjb25zdCB2YWxpZGF0aW9uID0gdGhpcy5oYW5kbGVTdWJtaXRFdmVudHMoc3VibWl0KTtcbiAgICB2YWxpZGF0aW9uLnN1Y2Nlc3MuZm9yRWFjaCh0aGlzLm9uRW5kLmJpbmQodGhpcykpO1xuICAgIHZhbGlkYXRpb24uZXJyb3IuZm9yRWFjaCh0aGlzLm9uRXJyb3IuYmluZCh0aGlzKSk7XG5cbiAgICBldmVudHMubm9ybWFsaXplZFVwS2V5XG4gICAgICAucGlwZSh0YWtlVW50aWwodmFsaWRhdGlvbi5zdWNjZXNzKSlcbiAgICAgIC5mb3JFYWNoKHRoaXMub25VcEtleS5iaW5kKHRoaXMpKTtcbiAgICBldmVudHMubm9ybWFsaXplZERvd25LZXlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh2YWxpZGF0aW9uLnN1Y2Nlc3MpKVxuICAgICAgLmZvckVhY2godGhpcy5vbkRvd25LZXkuYmluZCh0aGlzKSk7XG4gICAgZXZlbnRzLmtleXByZXNzXG4gICAgICAucGlwZSh0YWtlVW50aWwodmFsaWRhdGlvbi5zdWNjZXNzKSlcbiAgICAgIC5mb3JFYWNoKHRoaXMub25LZXlwcmVzcy5iaW5kKHRoaXMpKTtcbiAgICAvLyBJbml0IHRoZSBwcm9tcHRcbiAgICB0aGlzLnJlbmRlcigpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBwcm9tcHQgdG8gc2NyZWVuXG4gICAqIEByZXR1cm4ge1Jhd0xpc3RQcm9tcHR9IHNlbGZcbiAgICovXG5cbiAgcmVuZGVyKGVycm9yKSB7XG4gICAgLy8gUmVuZGVyIHF1ZXN0aW9uXG4gICAgbGV0IG1lc3NhZ2UgPSB0aGlzLmdldFF1ZXN0aW9uKCk7XG4gICAgbGV0IGJvdHRvbUNvbnRlbnQgPSAnJztcblxuICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gJ2Fuc3dlcmVkJykge1xuICAgICAgbWVzc2FnZSArPSBjb2xvcnMuY3lhbih0aGlzLm9wdC5jaG9pY2VzLmdldENob2ljZSh0aGlzLnNlbGVjdGVkKS5zaG9ydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNob2ljZXNTdHIgPSByZW5kZXJDaG9pY2VzKHRoaXMub3B0LmNob2ljZXMsIHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgbWVzc2FnZSArPVxuICAgICAgICAnXFxuJyArIHRoaXMucGFnaW5hdG9yLnBhZ2luYXRlKGNob2ljZXNTdHIsIHRoaXMuc2VsZWN0ZWQsIHRoaXMub3B0LnBhZ2VTaXplKTtcbiAgICAgIG1lc3NhZ2UgKz0gJ1xcbiAgQW5zd2VyOiAnO1xuICAgIH1cbiAgICBtZXNzYWdlICs9IHRoaXMucmwubGluZTtcblxuICAgIGlmIChlcnJvcikge1xuICAgICAgYm90dG9tQ29udGVudCA9ICdcXG4nICsgY29sb3JzLnJlZCgnPj4gJykgKyBlcnJvcjtcbiAgICB9XG5cbiAgICB0aGlzLnNjcmVlbi5yZW5kZXIobWVzc2FnZSwgYm90dG9tQ29udGVudCk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB1c2VyIHByZXNzIGBlbnRlcmAga2V5XG4gICAqL1xuXG4gIGdldEN1cnJlbnRWYWx1ZShpbmRleCkge1xuICAgIGlmIChpbmRleCA9PSBudWxsKSB7XG4gICAgICBpbmRleCA9IHRoaXMucmF3RGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKGluZGV4ID09PSAnJykge1xuICAgICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQgPT09IHVuZGVmaW5lZCA/IC0xIDogdGhpcy5zZWxlY3RlZDtcbiAgICAgIGluZGV4ID0gdGhpcy5zZWxlY3RlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5kZXggLT0gMTtcbiAgICB9XG5cbiAgICBjb25zdCBjaG9pY2UgPSB0aGlzLm9wdC5jaG9pY2VzLmdldENob2ljZShpbmRleCk7XG4gICAgcmV0dXJuIGNob2ljZSA/IGNob2ljZS52YWx1ZSA6IG51bGw7XG4gIH1cblxuICBvbkVuZChzdGF0ZSkge1xuICAgIHRoaXMuc3RhdHVzID0gJ2Fuc3dlcmVkJztcbiAgICB0aGlzLmFuc3dlciA9IHN0YXRlLnZhbHVlO1xuXG4gICAgLy8gUmUtcmVuZGVyIHByb21wdFxuICAgIHRoaXMucmVuZGVyKCk7XG5cbiAgICB0aGlzLnNjcmVlbi5kb25lKCk7XG4gICAgdGhpcy5kb25lKHN0YXRlLnZhbHVlKTtcbiAgfVxuXG4gIG9uRXJyb3IoKSB7XG4gICAgdGhpcy5yZW5kZXIoJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGluZGV4Jyk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB1c2VyIHByZXNzIGEga2V5XG4gICAqL1xuXG4gIG9uS2V5cHJlc3MoKSB7XG4gICAgbGV0IGluZGV4O1xuXG4gICAgaWYgKHRoaXMubGFzdEtleSA9PT0gJ2Fycm93Jykge1xuICAgICAgaW5kZXggPSB0aGlzLmhpZGRlbkxpbmUubGVuZ3RoID4gMCA/IE51bWJlcih0aGlzLmhpZGRlbkxpbmUpIC0gMSA6IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4ID0gdGhpcy5ybC5saW5lLmxlbmd0aCA+IDAgPyBOdW1iZXIodGhpcy5ybC5saW5lKSAtIDEgOiAwO1xuICAgIH1cbiAgICB0aGlzLmxhc3RLZXkgPSAnJztcblxuICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLm9wdC5jaG9pY2VzLmdldENob2ljZShpbmRleCkgPyBpbmRleCA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gdXNlciBwcmVzcyB1cCBrZXlcbiAgICovXG5cbiAgb25VcEtleSgpIHtcbiAgICB0aGlzLm9uQXJyb3dLZXkoJ3VwJyk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB1c2VyIHByZXNzIGRvd24ga2V5XG4gICAqL1xuXG4gIG9uRG93bktleSgpIHtcbiAgICB0aGlzLm9uQXJyb3dLZXkoJ2Rvd24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHVzZXIgcHJlc3MgdXAgb3IgZG93biBrZXlcbiAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgQXJyb3cgdHlwZTogdXAgb3IgZG93blxuICAgKi9cblxuICBvbkFycm93S2V5KHR5cGUpIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gaW5jcmVtZW50TGlzdEluZGV4KHRoaXMuc2VsZWN0ZWQsIHR5cGUsIHRoaXMub3B0KSB8fCAwO1xuICAgIHRoaXMuaGlkZGVuTGluZSA9IFN0cmluZyh0aGlzLnNlbGVjdGVkICsgMSk7XG4gICAgdGhpcy5ybC5saW5lID0gJyc7XG4gICAgdGhpcy5sYXN0S2V5ID0gJ2Fycm93JztcbiAgfVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uIGZvciByZW5kZXJpbmcgbGlzdCBjaG9pY2VzXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IHBvaW50ZXIgUG9zaXRpb24gb2YgdGhlIHBvaW50ZXJcbiAqIEByZXR1cm4ge1N0cmluZ30gICAgICAgICBSZW5kZXJlZCBjb250ZW50XG4gKi9cblxuZnVuY3Rpb24gcmVuZGVyQ2hvaWNlcyhjaG9pY2VzLCBwb2ludGVyKSB7XG4gIGxldCBvdXRwdXQgPSAnJztcbiAgbGV0IHNlcGFyYXRvck9mZnNldCA9IDA7XG5cbiAgY2hvaWNlcy5mb3JFYWNoKChjaG9pY2UsIGkpID0+IHtcbiAgICBvdXRwdXQgKz0gb3V0cHV0ID8gJ1xcbiAgJyA6ICcgICc7XG5cbiAgICBpZiAoY2hvaWNlLnR5cGUgPT09ICdzZXBhcmF0b3InKSB7XG4gICAgICBzZXBhcmF0b3JPZmZzZXQrKztcbiAgICAgIG91dHB1dCArPSAnICcgKyBjaG9pY2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSBpIC0gc2VwYXJhdG9yT2Zmc2V0O1xuICAgIGxldCBkaXNwbGF5ID0gaW5kZXggKyAxICsgJykgJyArIGNob2ljZS5uYW1lO1xuICAgIGlmIChpbmRleCA9PT0gcG9pbnRlcikge1xuICAgICAgZGlzcGxheSA9IGNvbG9ycy5jeWFuKGRpc3BsYXkpO1xuICAgIH1cblxuICAgIG91dHB1dCArPSBkaXNwbGF5O1xuICB9KTtcblxuICByZXR1cm4gb3V0cHV0O1xufVxuIiwiLyoqXG4gKiBgcmF3bGlzdGAgdHlwZSBwcm9tcHRcbiAqL1xuXG5pbXBvcnQgY29sb3JzIGZyb20gJ3lvY3RvY29sb3JzLWNqcyc7XG5pbXBvcnQgeyBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IFNlcGFyYXRvciBmcm9tICcuLi9vYmplY3RzL3NlcGFyYXRvci5qcyc7XG5pbXBvcnQgb2JzZXJ2ZSBmcm9tICcuLi91dGlscy9ldmVudHMuanMnO1xuaW1wb3J0IFBhZ2luYXRvciBmcm9tICcuLi91dGlscy9wYWdpbmF0b3IuanMnO1xuaW1wb3J0IEJhc2UgZnJvbSAnLi9iYXNlLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwYW5kUHJvbXB0IGV4dGVuZHMgQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHF1ZXN0aW9ucywgcmwsIGFuc3dlcnMpIHtcbiAgICBzdXBlcihxdWVzdGlvbnMsIHJsLCBhbnN3ZXJzKTtcblxuICAgIGlmICghdGhpcy5vcHQuY2hvaWNlcykge1xuICAgICAgdGhpcy50aHJvd1BhcmFtRXJyb3IoJ2Nob2ljZXMnKTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkYXRlQ2hvaWNlcyh0aGlzLm9wdC5jaG9pY2VzKTtcblxuICAgIC8vIEFkZCB0aGUgZGVmYXVsdCBgaGVscGAgKC9leHBhbmQpIG9wdGlvblxuICAgIHRoaXMub3B0LmNob2ljZXMucHVzaCh7XG4gICAgICBrZXk6ICdoJyxcbiAgICAgIG5hbWU6ICdIZWxwLCBsaXN0IGFsbCBvcHRpb25zJyxcbiAgICAgIHZhbHVlOiAnaGVscCcsXG4gICAgfSk7XG5cbiAgICB0aGlzLm9wdC52YWxpZGF0ZSA9IChjaG9pY2UpID0+IHtcbiAgICAgIGlmIChjaG9pY2UgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGNvbW1hbmQnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2hvaWNlICE9PSAnaGVscCc7XG4gICAgfTtcblxuICAgIC8vIFNldHVwIHRoZSBkZWZhdWx0IHN0cmluZyAoY2FwaXRhbGl6ZSB0aGUgZGVmYXVsdCBrZXkpXG4gICAgdGhpcy5vcHQuZGVmYXVsdCA9IHRoaXMuZ2VuZXJhdGVDaG9pY2VzU3RyaW5nKHRoaXMub3B0LmNob2ljZXMsIHRoaXMub3B0LmRlZmF1bHQpO1xuXG4gICAgdGhpcy5wYWdpbmF0b3IgPSBuZXcgUGFnaW5hdG9yKHRoaXMuc2NyZWVuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0aGUgSW5xdWlyeSBzZXNzaW9uXG4gICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYiAgICAgIENhbGxiYWNrIHdoZW4gcHJvbXB0IGlzIGRvbmVcbiAgICogQHJldHVybiB7dGhpc31cbiAgICovXG5cbiAgX3J1bihjYikge1xuICAgIHRoaXMuZG9uZSA9IGNiO1xuXG4gICAgLy8gU2F2ZSB1c2VyIGFuc3dlciBhbmQgdXBkYXRlIHByb21wdCB0byBzaG93IHNlbGVjdGVkIG9wdGlvbi5cbiAgICBjb25zdCBldmVudHMgPSBvYnNlcnZlKHRoaXMucmwpO1xuICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0aGlzLmhhbmRsZVN1Ym1pdEV2ZW50cyhcbiAgICAgIGV2ZW50cy5saW5lLnBpcGUobWFwKHRoaXMuZ2V0Q3VycmVudFZhbHVlLmJpbmQodGhpcykpKSxcbiAgICApO1xuICAgIHZhbGlkYXRpb24uc3VjY2Vzcy5mb3JFYWNoKHRoaXMub25TdWJtaXQuYmluZCh0aGlzKSk7XG4gICAgdmFsaWRhdGlvbi5lcnJvci5mb3JFYWNoKHRoaXMub25FcnJvci5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmtleXByZXNzT2JzID0gZXZlbnRzLmtleXByZXNzXG4gICAgICAucGlwZSh0YWtlVW50aWwodmFsaWRhdGlvbi5zdWNjZXNzKSlcbiAgICAgIC5mb3JFYWNoKHRoaXMub25LZXlwcmVzcy5iaW5kKHRoaXMpKTtcblxuICAgIC8vIEluaXQgdGhlIHByb21wdFxuICAgIHRoaXMucmVuZGVyKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIHByb21wdCB0byBzY3JlZW5cbiAgICogQHJldHVybiB7RXhwYW5kUHJvbXB0fSBzZWxmXG4gICAqL1xuXG4gIHJlbmRlcihlcnJvciwgaGludCkge1xuICAgIGxldCBtZXNzYWdlID0gdGhpcy5nZXRRdWVzdGlvbigpO1xuICAgIGxldCBib3R0b21Db250ZW50ID0gJyc7XG5cbiAgICBpZiAodGhpcy5zdGF0dXMgPT09ICdhbnN3ZXJlZCcpIHtcbiAgICAgIG1lc3NhZ2UgKz0gY29sb3JzLmN5YW4odGhpcy5hbnN3ZXIpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0dXMgPT09ICdleHBhbmRlZCcpIHtcbiAgICAgIGNvbnN0IGNob2ljZXNTdHIgPSByZW5kZXJDaG9pY2VzKHRoaXMub3B0LmNob2ljZXMsIHRoaXMuc2VsZWN0ZWRLZXkpO1xuICAgICAgbWVzc2FnZSArPSB0aGlzLnBhZ2luYXRvci5wYWdpbmF0ZShjaG9pY2VzU3RyLCB0aGlzLnNlbGVjdGVkS2V5LCB0aGlzLm9wdC5wYWdlU2l6ZSk7XG4gICAgICBtZXNzYWdlICs9ICdcXG4gIEFuc3dlcjogJztcbiAgICB9XG5cbiAgICBtZXNzYWdlICs9IHRoaXMucmwubGluZTtcblxuICAgIGlmIChlcnJvcikge1xuICAgICAgYm90dG9tQ29udGVudCA9IGNvbG9ycy5yZWQoJz4+ICcpICsgZXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKGhpbnQpIHtcbiAgICAgIGJvdHRvbUNvbnRlbnQgPSBjb2xvcnMuY3lhbignPj4gJykgKyBoaW50O1xuICAgIH1cblxuICAgIHRoaXMuc2NyZWVuLnJlbmRlcihtZXNzYWdlLCBib3R0b21Db250ZW50KTtcbiAgfVxuXG4gIGdldEN1cnJlbnRWYWx1ZShpbnB1dCkge1xuICAgIGlucHV0IHx8PSB0aGlzLnJhd0RlZmF1bHQ7XG5cbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMub3B0LmNob2ljZXMud2hlcmUoeyBrZXk6IGlucHV0LnRvTG93ZXJDYXNlKCkudHJpbSgpIH0pWzBdO1xuICAgIGlmICghc2VsZWN0ZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxlY3RlZC52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0aGUgcHJvbXB0IGNob2ljZXMgc3RyaW5nXG4gICAqIEByZXR1cm4ge1N0cmluZ30gIENob2ljZXMgc3RyaW5nXG4gICAqL1xuXG4gIGdldENob2ljZXMoKSB7XG4gICAgbGV0IG91dHB1dCA9ICcnO1xuXG4gICAgdGhpcy5vcHQuY2hvaWNlcy5mb3JFYWNoKChjaG9pY2UpID0+IHtcbiAgICAgIG91dHB1dCArPSAnXFxuICAnO1xuXG4gICAgICBpZiAoY2hvaWNlLnR5cGUgPT09ICdzZXBhcmF0b3InKSB7XG4gICAgICAgIG91dHB1dCArPSAnICcgKyBjaG9pY2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGNob2ljZVN0ciA9IGNob2ljZS5rZXkgKyAnKSAnICsgY2hvaWNlLm5hbWU7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEtleSA9PT0gY2hvaWNlLmtleSkge1xuICAgICAgICBjaG9pY2VTdHIgPSBjb2xvcnMuY3lhbihjaG9pY2VTdHIpO1xuICAgICAgfVxuXG4gICAgICBvdXRwdXQgKz0gY2hvaWNlU3RyO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIG9uRXJyb3Ioc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUudmFsdWUgPT09ICdoZWxwJykge1xuICAgICAgdGhpcy5zZWxlY3RlZEtleSA9ICcnO1xuICAgICAgdGhpcy5zdGF0dXMgPSAnZXhwYW5kZWQnO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcihzdGF0ZS5pc1ZhbGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHVzZXIgcHJlc3MgYGVudGVyYCBrZXlcbiAgICovXG5cbiAgb25TdWJtaXQoc3RhdGUpIHtcbiAgICB0aGlzLnN0YXR1cyA9ICdhbnN3ZXJlZCc7XG4gICAgY29uc3QgY2hvaWNlID0gdGhpcy5vcHQuY2hvaWNlcy53aGVyZSh7IHZhbHVlOiBzdGF0ZS52YWx1ZSB9KVswXTtcbiAgICB0aGlzLmFuc3dlciA9IGNob2ljZS5zaG9ydCB8fCBjaG9pY2UubmFtZTtcblxuICAgIC8vIFJlLXJlbmRlciBwcm9tcHRcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMuc2NyZWVuLmRvbmUoKTtcbiAgICB0aGlzLmRvbmUoc3RhdGUudmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gdXNlciBwcmVzcyBhIGtleVxuICAgKi9cblxuICBvbktleXByZXNzKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRLZXkgPSB0aGlzLnJsLmxpbmUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMub3B0LmNob2ljZXMud2hlcmUoeyBrZXk6IHRoaXMuc2VsZWN0ZWRLZXkgfSlbMF07XG4gICAgaWYgKHRoaXMuc3RhdHVzID09PSAnZXhwYW5kZWQnKSB7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbmRlcihudWxsLCBzZWxlY3RlZCA/IHNlbGVjdGVkLm5hbWUgOiBudWxsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIGNob2ljZXNcbiAgICogQHBhcmFtIHtBcnJheX0gY2hvaWNlc1xuICAgKi9cblxuICB2YWxpZGF0ZUNob2ljZXMoY2hvaWNlcykge1xuICAgIGxldCBmb3JtYXRFcnJvcjtcbiAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICBjb25zdCBrZXltYXAgPSB7fTtcbiAgICBjaG9pY2VzLmZpbHRlcihTZXBhcmF0b3IuZXhjbHVkZSkuZm9yRWFjaCgoY2hvaWNlKSA9PiB7XG4gICAgICBpZiAoIWNob2ljZS5rZXkgfHwgY2hvaWNlLmtleS5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgZm9ybWF0RXJyb3IgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjaG9pY2Uua2V5ID0gU3RyaW5nKGNob2ljZS5rZXkpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmIChrZXltYXBbY2hvaWNlLmtleV0pIHtcbiAgICAgICAgZXJyb3JzLnB1c2goY2hvaWNlLmtleSk7XG4gICAgICB9XG5cbiAgICAgIGtleW1hcFtjaG9pY2Uua2V5XSA9IHRydWU7XG4gICAgfSk7XG5cbiAgICBpZiAoZm9ybWF0RXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0Zvcm1hdCBlcnJvcjogYGtleWAgcGFyYW0gbXVzdCBiZSBhIHNpbmdsZSBsZXR0ZXIgYW5kIGlzIHJlcXVpcmVkLicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChrZXltYXAuaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnUmVzZXJ2ZWQga2V5IGVycm9yOiBga2V5YCBwYXJhbSBjYW5ub3QgYmUgYGhgIC0gdGhpcyB2YWx1ZSBpcyByZXNlcnZlZC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0R1cGxpY2F0ZSBrZXkgZXJyb3I6IGBrZXlgIHBhcmFtIG11c3QgYmUgdW5pcXVlLiBEdXBsaWNhdGVzOiAnICtcbiAgICAgICAgICBbLi4ubmV3IFNldChlcnJvcnMpXS5qb2luKCcsJyksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIHN0cmluZyBvdXQgb2YgdGhlIGNob2ljZXMga2V5c1xuICAgKiBAcGFyYW0gIHtBcnJheX0gIGNob2ljZXNcbiAgICogQHBhcmFtICB7TnVtYmVyfFN0cmluZ30gZGVmYXVsdCAtIHRoZSBjaG9pY2UgaW5kZXggb3IgbmFtZSB0byBjYXBpdGFsaXplXG4gICAqIEByZXR1cm4ge1N0cmluZ30gVGhlIHJlbmRlcmVkIGNob2ljZXMga2V5IHN0cmluZ1xuICAgKi9cbiAgZ2VuZXJhdGVDaG9pY2VzU3RyaW5nKGNob2ljZXMsIGRlZmF1bHRDaG9pY2UpIHtcbiAgICBsZXQgZGVmSW5kZXggPSBjaG9pY2VzLnJlYWxMZW5ndGggLSAxO1xuICAgIGlmICh0eXBlb2YgZGVmYXVsdENob2ljZSA9PT0gJ251bWJlcicgJiYgdGhpcy5vcHQuY2hvaWNlcy5nZXRDaG9pY2UoZGVmYXVsdENob2ljZSkpIHtcbiAgICAgIGRlZkluZGV4ID0gZGVmYXVsdENob2ljZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZhdWx0Q2hvaWNlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgaW5kZXggPSBjaG9pY2VzLnJlYWxDaG9pY2VzLmZpbmRJbmRleCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSA9PT0gZGVmYXVsdENob2ljZSk7XG4gICAgICBkZWZJbmRleCA9IGluZGV4ID09PSAtMSA/IGRlZkluZGV4IDogaW5kZXg7XG4gICAgfVxuXG4gICAgY29uc3QgZGVmU3RyID0gdGhpcy5vcHQuY2hvaWNlcy5wbHVjaygna2V5Jyk7XG4gICAgdGhpcy5yYXdEZWZhdWx0ID0gZGVmU3RyW2RlZkluZGV4XTtcbiAgICBkZWZTdHJbZGVmSW5kZXhdID0gU3RyaW5nKGRlZlN0cltkZWZJbmRleF0pLnRvVXBwZXJDYXNlKCk7XG4gICAgcmV0dXJuIGRlZlN0ci5qb2luKCcnKTtcbiAgfVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uIGZvciByZW5kZXJpbmcgY2hlY2tib3ggY2hvaWNlc1xuICogQHBhcmFtICB7U3RyaW5nfSBwb2ludGVyIFNlbGVjdGVkIGtleVxuICogQHJldHVybiB7U3RyaW5nfSAgICAgICAgIFJlbmRlcmVkIGNvbnRlbnRcbiAqL1xuXG5mdW5jdGlvbiByZW5kZXJDaG9pY2VzKGNob2ljZXMsIHBvaW50ZXIpIHtcbiAgbGV0IG91dHB1dCA9ICcnO1xuXG4gIGNob2ljZXMuZm9yRWFjaCgoY2hvaWNlKSA9PiB7XG4gICAgb3V0cHV0ICs9ICdcXG4gICc7XG5cbiAgICBpZiAoY2hvaWNlLnR5cGUgPT09ICdzZXBhcmF0b3InKSB7XG4gICAgICBvdXRwdXQgKz0gJyAnICsgY2hvaWNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjaG9pY2VTdHIgPSBjaG9pY2Uua2V5ICsgJykgJyArIGNob2ljZS5uYW1lO1xuICAgIGlmIChwb2ludGVyID09PSBjaG9pY2Uua2V5KSB7XG4gICAgICBjaG9pY2VTdHIgPSBjb2xvcnMuY3lhbihjaG9pY2VTdHIpO1xuICAgIH1cblxuICAgIG91dHB1dCArPSBjaG9pY2VTdHI7XG4gIH0pO1xuXG4gIHJldHVybiBvdXRwdXQ7XG59XG4iLCIvKipcbiAqIGBsaXN0YCB0eXBlIHByb21wdFxuICovXG5cbmltcG9ydCBhbnNpRXNjYXBlcyBmcm9tICdhbnNpLWVzY2FwZXMnO1xuaW1wb3J0IGNvbG9ycyBmcm9tICd5b2N0b2NvbG9ycy1janMnO1xuaW1wb3J0IGZpZ3VyZXMgZnJvbSAnQGlucXVpcmVyL2ZpZ3VyZXMnO1xuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCBvYnNlcnZlIGZyb20gJy4uL3V0aWxzL2V2ZW50cy5qcyc7XG5pbXBvcnQgUGFnaW5hdG9yIGZyb20gJy4uL3V0aWxzL3BhZ2luYXRvci5qcyc7XG5pbXBvcnQgaW5jcmVtZW50TGlzdEluZGV4IGZyb20gJy4uL3V0aWxzL2luY3JlbWVudExpc3RJbmRleC5qcyc7XG5pbXBvcnQgQmFzZSBmcm9tICcuL2Jhc2UuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGVja2JveFByb21wdCBleHRlbmRzIEJhc2Uge1xuICBjb25zdHJ1Y3RvcihxdWVzdGlvbnMsIHJsLCBhbnN3ZXJzKSB7XG4gICAgc3VwZXIocXVlc3Rpb25zLCBybCwgYW5zd2Vycyk7XG5cbiAgICBpZiAoIXRoaXMub3B0LmNob2ljZXMpIHtcbiAgICAgIHRoaXMudGhyb3dQYXJhbUVycm9yKCdjaG9pY2VzJyk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5vcHQuZGVmYXVsdCkpIHtcbiAgICAgIGZvciAoY29uc3QgY2hvaWNlIG9mIHRoaXMub3B0LmNob2ljZXMpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0LmRlZmF1bHQuaW5jbHVkZXMoY2hvaWNlLnZhbHVlKSkge1xuICAgICAgICAgIGNob2ljZS5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucG9pbnRlciA9IDA7XG5cbiAgICAvLyBNYWtlIHN1cmUgbm8gZGVmYXVsdCBpcyBzZXQgKHNvIGl0IHdvbid0IGJlIHByaW50ZWQpXG4gICAgdGhpcy5vcHQuZGVmYXVsdCA9IG51bGw7XG5cbiAgICBjb25zdCBzaG91bGRMb29wID0gdGhpcy5vcHQubG9vcCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHRoaXMub3B0Lmxvb3A7XG4gICAgdGhpcy5wYWdpbmF0b3IgPSBuZXcgUGFnaW5hdG9yKHRoaXMuc2NyZWVuLCB7IGlzSW5maW5pdGU6IHNob3VsZExvb3AgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgdGhlIElucXVpcnkgc2Vzc2lvblxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2IgICAgICBDYWxsYmFjayB3aGVuIHByb21wdCBpcyBkb25lXG4gICAqIEByZXR1cm4ge3RoaXN9XG4gICAqL1xuXG4gIF9ydW4oY2IpIHtcbiAgICB0aGlzLmRvbmUgPSBjYjtcblxuICAgIGNvbnN0IGV2ZW50cyA9IG9ic2VydmUodGhpcy5ybCk7XG5cbiAgICBjb25zdCB2YWxpZGF0aW9uID0gdGhpcy5oYW5kbGVTdWJtaXRFdmVudHMoXG4gICAgICBldmVudHMubGluZS5waXBlKG1hcCh0aGlzLmdldEN1cnJlbnRWYWx1ZS5iaW5kKHRoaXMpKSksXG4gICAgKTtcbiAgICB2YWxpZGF0aW9uLnN1Y2Nlc3MuZm9yRWFjaCh0aGlzLm9uRW5kLmJpbmQodGhpcykpO1xuICAgIHZhbGlkYXRpb24uZXJyb3IuZm9yRWFjaCh0aGlzLm9uRXJyb3IuYmluZCh0aGlzKSk7XG5cbiAgICBldmVudHMubm9ybWFsaXplZFVwS2V5XG4gICAgICAucGlwZSh0YWtlVW50aWwodmFsaWRhdGlvbi5zdWNjZXNzKSlcbiAgICAgIC5mb3JFYWNoKHRoaXMub25VcEtleS5iaW5kKHRoaXMpKTtcbiAgICBldmVudHMubm9ybWFsaXplZERvd25LZXlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh2YWxpZGF0aW9uLnN1Y2Nlc3MpKVxuICAgICAgLmZvckVhY2godGhpcy5vbkRvd25LZXkuYmluZCh0aGlzKSk7XG4gICAgZXZlbnRzLm51bWJlcktleVxuICAgICAgLnBpcGUodGFrZVVudGlsKHZhbGlkYXRpb24uc3VjY2VzcykpXG4gICAgICAuZm9yRWFjaCh0aGlzLm9uTnVtYmVyS2V5LmJpbmQodGhpcykpO1xuICAgIGV2ZW50cy5zcGFjZUtleVxuICAgICAgLnBpcGUodGFrZVVudGlsKHZhbGlkYXRpb24uc3VjY2VzcykpXG4gICAgICAuZm9yRWFjaCh0aGlzLm9uU3BhY2VLZXkuYmluZCh0aGlzKSk7XG4gICAgZXZlbnRzLmFLZXkucGlwZSh0YWtlVW50aWwodmFsaWRhdGlvbi5zdWNjZXNzKSkuZm9yRWFjaCh0aGlzLm9uQWxsS2V5LmJpbmQodGhpcykpO1xuICAgIGV2ZW50cy5pS2V5LnBpcGUodGFrZVVudGlsKHZhbGlkYXRpb24uc3VjY2VzcykpLmZvckVhY2godGhpcy5vbkludmVyc2VLZXkuYmluZCh0aGlzKSk7XG5cbiAgICAvLyBJbml0IHRoZSBwcm9tcHRcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMuZmlyc3RSZW5kZXIgPSBmYWxzZTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgcHJvbXB0IHRvIHNjcmVlblxuICAgKiBAcmV0dXJuIHtDaGVja2JveFByb21wdH0gc2VsZlxuICAgKi9cblxuICByZW5kZXIoZXJyb3IpIHtcbiAgICAvLyBSZW5kZXIgcXVlc3Rpb25cbiAgICBsZXQgbWVzc2FnZSA9IHRoaXMuZ2V0UXVlc3Rpb24oKTtcbiAgICBsZXQgYm90dG9tQ29udGVudCA9ICcnO1xuXG4gICAgaWYgKCF0aGlzLmRvbnRTaG93SGludHMpIHtcbiAgICAgIG1lc3NhZ2UgKz1cbiAgICAgICAgJyhQcmVzcyAnICtcbiAgICAgICAgY29sb3JzLmN5YW4oY29sb3JzLmJvbGQoJzxzcGFjZT4nKSkgK1xuICAgICAgICAnIHRvIHNlbGVjdCwgJyArXG4gICAgICAgIGNvbG9ycy5jeWFuKGNvbG9ycy5ib2xkKCc8YT4nKSkgK1xuICAgICAgICAnIHRvIHRvZ2dsZSBhbGwsICcgK1xuICAgICAgICBjb2xvcnMuY3lhbihjb2xvcnMuYm9sZCgnPGk+JykpICtcbiAgICAgICAgJyB0byBpbnZlcnQgc2VsZWN0aW9uLCBhbmQgJyArXG4gICAgICAgIGNvbG9ycy5jeWFuKGNvbG9ycy5ib2xkKCc8ZW50ZXI+JykpICtcbiAgICAgICAgJyB0byBwcm9jZWVkKSc7XG4gICAgfVxuXG4gICAgLy8gUmVuZGVyIGNob2ljZXMgb3IgYW5zd2VyIGRlcGVuZGluZyBvbiB0aGUgc3RhdGVcbiAgICBpZiAodGhpcy5zdGF0dXMgPT09ICdhbnN3ZXJlZCcpIHtcbiAgICAgIG1lc3NhZ2UgKz0gY29sb3JzLmN5YW4odGhpcy5zZWxlY3Rpb24uam9pbignLCAnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNob2ljZXNTdHIgPSByZW5kZXJDaG9pY2VzKHRoaXMub3B0LmNob2ljZXMsIHRoaXMucG9pbnRlcik7XG4gICAgICBjb25zdCBpbmRleFBvc2l0aW9uID0gdGhpcy5vcHQuY2hvaWNlcy5pbmRleE9mKFxuICAgICAgICB0aGlzLm9wdC5jaG9pY2VzLmdldENob2ljZSh0aGlzLnBvaW50ZXIpLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlYWxJbmRleFBvc2l0aW9uID1cbiAgICAgICAgdGhpcy5vcHQuY2hvaWNlcy5yZWR1Y2UoKGFjYywgdmFsdWUsIGkpID0+IHtcbiAgICAgICAgICAvLyBEb250IGNvdW50IGxpbmVzIHBhc3QgdGhlIGNob2ljZSB3ZSBhcmUgbG9va2luZyBhdFxuICAgICAgICAgIGlmIChpID4gaW5kZXhQb3NpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQWRkIGxpbmUgaWYgaXQncyBhIHNlcGFyYXRvclxuICAgICAgICAgIGlmICh2YWx1ZS50eXBlID09PSAnc2VwYXJhdG9yJykge1xuICAgICAgICAgICAgcmV0dXJuIGFjYyArIDE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGwgPSB2YWx1ZS5uYW1lO1xuICAgICAgICAgIC8vIE5vbi1zdHJpbmdzIHRha2UgdXAgb25lIGxpbmVcbiAgICAgICAgICBpZiAodHlwZW9mIGwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjICsgMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDYWxjdWxhdGUgbGluZXMgdGFrZW4gdXAgYnkgc3RyaW5nXG4gICAgICAgICAgbCA9IGwuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgIHJldHVybiBhY2MgKyBsLmxlbmd0aDtcbiAgICAgICAgfSwgMCkgLSAxO1xuICAgICAgbWVzc2FnZSArPVxuICAgICAgICAnXFxuJyArIHRoaXMucGFnaW5hdG9yLnBhZ2luYXRlKGNob2ljZXNTdHIsIHJlYWxJbmRleFBvc2l0aW9uLCB0aGlzLm9wdC5wYWdlU2l6ZSk7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBib3R0b21Db250ZW50ID0gY29sb3JzLnJlZCgnPj4gJykgKyBlcnJvcjtcbiAgICB9XG5cbiAgICBtZXNzYWdlICs9IGFuc2lFc2NhcGVzLmN1cnNvckhpZGU7XG5cbiAgICB0aGlzLnNjcmVlbi5yZW5kZXIobWVzc2FnZSwgYm90dG9tQ29udGVudCk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB1c2VyIHByZXNzIGBlbnRlcmAga2V5XG4gICAqL1xuXG4gIG9uRW5kKHN0YXRlKSB7XG4gICAgdGhpcy5zdGF0dXMgPSAnYW5zd2VyZWQnO1xuICAgIHRoaXMuZG9udFNob3dIaW50cyA9IHRydWU7XG4gICAgLy8gUmVyZW5kZXIgcHJvbXB0IChhbmQgY2xlYW4gc3VibGluZSBlcnJvcilcbiAgICB0aGlzLnJlbmRlcigpO1xuXG4gICAgdGhpcy5zY3JlZW4uZG9uZSgpO1xuICAgIHRoaXMuZG9uZShzdGF0ZS52YWx1ZSk7XG4gIH1cblxuICBvbkVycm9yKHN0YXRlKSB7XG4gICAgdGhpcy5yZW5kZXIoc3RhdGUuaXNWYWxpZCk7XG4gIH1cblxuICBnZXRDdXJyZW50VmFsdWUoKSB7XG4gICAgY29uc3QgY2hvaWNlcyA9IHRoaXMub3B0LmNob2ljZXMuZmlsdGVyKFxuICAgICAgKGNob2ljZSkgPT4gQm9vbGVhbihjaG9pY2UuY2hlY2tlZCkgJiYgIWNob2ljZS5kaXNhYmxlZCxcbiAgICApO1xuXG4gICAgdGhpcy5zZWxlY3Rpb24gPSBjaG9pY2VzLm1hcCgoY2hvaWNlKSA9PiBjaG9pY2Uuc2hvcnQpO1xuICAgIHJldHVybiBjaG9pY2VzLm1hcCgoY2hvaWNlKSA9PiBjaG9pY2UudmFsdWUpO1xuICB9XG5cbiAgb25VcEtleSgpIHtcbiAgICB0aGlzLnBvaW50ZXIgPSBpbmNyZW1lbnRMaXN0SW5kZXgodGhpcy5wb2ludGVyLCAndXAnLCB0aGlzLm9wdCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG9uRG93bktleSgpIHtcbiAgICB0aGlzLnBvaW50ZXIgPSBpbmNyZW1lbnRMaXN0SW5kZXgodGhpcy5wb2ludGVyLCAnZG93bicsIHRoaXMub3B0KTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgb25OdW1iZXJLZXkoaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgPD0gdGhpcy5vcHQuY2hvaWNlcy5yZWFsTGVuZ3RoKSB7XG4gICAgICB0aGlzLnBvaW50ZXIgPSBpbnB1dCAtIDE7XG4gICAgICB0aGlzLnRvZ2dsZUNob2ljZSh0aGlzLnBvaW50ZXIpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBvblNwYWNlS2V5KCkge1xuICAgIHRoaXMudG9nZ2xlQ2hvaWNlKHRoaXMucG9pbnRlcik7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG9uQWxsS2V5KCkge1xuICAgIGNvbnN0IHNob3VsZEJlQ2hlY2tlZCA9IHRoaXMub3B0LmNob2ljZXMuc29tZShcbiAgICAgIChjaG9pY2UpID0+IGNob2ljZS50eXBlICE9PSAnc2VwYXJhdG9yJyAmJiAhY2hvaWNlLmNoZWNrZWQsXG4gICAgKTtcblxuICAgIHRoaXMub3B0LmNob2ljZXMuZm9yRWFjaCgoY2hvaWNlKSA9PiB7XG4gICAgICBpZiAoY2hvaWNlLnR5cGUgIT09ICdzZXBhcmF0b3InKSB7XG4gICAgICAgIGNob2ljZS5jaGVja2VkID0gc2hvdWxkQmVDaGVja2VkO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG9uSW52ZXJzZUtleSgpIHtcbiAgICB0aGlzLm9wdC5jaG9pY2VzLmZvckVhY2goKGNob2ljZSkgPT4ge1xuICAgICAgaWYgKGNob2ljZS50eXBlICE9PSAnc2VwYXJhdG9yJykge1xuICAgICAgICBjaG9pY2UuY2hlY2tlZCA9ICFjaG9pY2UuY2hlY2tlZDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICB0b2dnbGVDaG9pY2UoaW5kZXgpIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5vcHQuY2hvaWNlcy5nZXRDaG9pY2UoaW5kZXgpO1xuICAgIGlmIChpdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub3B0LmNob2ljZXMuZ2V0Q2hvaWNlKGluZGV4KS5jaGVja2VkID0gIWl0ZW0uY2hlY2tlZDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGdW5jdGlvbiBmb3IgcmVuZGVyaW5nIGNoZWNrYm94IGNob2ljZXNcbiAqIEBwYXJhbSAge051bWJlcn0gcG9pbnRlciBQb3NpdGlvbiBvZiB0aGUgcG9pbnRlclxuICogQHJldHVybiB7U3RyaW5nfSAgICAgICAgIFJlbmRlcmVkIGNvbnRlbnRcbiAqL1xuXG5mdW5jdGlvbiByZW5kZXJDaG9pY2VzKGNob2ljZXMsIHBvaW50ZXIpIHtcbiAgbGV0IG91dHB1dCA9ICcnO1xuICBsZXQgc2VwYXJhdG9yT2Zmc2V0ID0gMDtcblxuICBjaG9pY2VzLmZvckVhY2goKGNob2ljZSwgaSkgPT4ge1xuICAgIGlmIChjaG9pY2UudHlwZSA9PT0gJ3NlcGFyYXRvcicpIHtcbiAgICAgIHNlcGFyYXRvck9mZnNldCsrO1xuICAgICAgb3V0cHV0ICs9ICcgJyArIGNob2ljZSArICdcXG4nO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjaG9pY2UuZGlzYWJsZWQpIHtcbiAgICAgIHNlcGFyYXRvck9mZnNldCsrO1xuICAgICAgb3V0cHV0ICs9ICcgLSAnICsgY2hvaWNlLm5hbWU7XG4gICAgICBvdXRwdXQgKz0gYCAoJHtcbiAgICAgICAgdHlwZW9mIGNob2ljZS5kaXNhYmxlZCA9PT0gJ3N0cmluZycgPyBjaG9pY2UuZGlzYWJsZWQgOiAnRGlzYWJsZWQnXG4gICAgICB9KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxpbmUgPSBnZXRDaGVja2JveChjaG9pY2UuY2hlY2tlZCkgKyAnICcgKyBjaG9pY2UubmFtZTtcbiAgICAgIG91dHB1dCArPVxuICAgICAgICBpIC0gc2VwYXJhdG9yT2Zmc2V0ID09PSBwb2ludGVyXG4gICAgICAgICAgPyBjb2xvcnMuY3lhbihmaWd1cmVzLnBvaW50ZXIgKyBsaW5lKVxuICAgICAgICAgIDogJyAnICsgbGluZTtcbiAgICB9XG5cbiAgICBvdXRwdXQgKz0gJ1xcbic7XG4gIH0pO1xuXG4gIHJldHVybiBvdXRwdXQucmVwbGFjZUFsbCgvXFxuJC9nLCAnJyk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBjaGVja2JveFxuICogQHBhcmFtICB7Qm9vbGVhbn0gY2hlY2tlZCAtIGFkZCBhIFggb3Igbm90IHRvIHRoZSBjaGVja2JveFxuICogQHJldHVybiB7U3RyaW5nfSBDb21wb3NpdGVkIGNoZWNrYm94IHN0cmluZ1xuICovXG5cbmZ1bmN0aW9uIGdldENoZWNrYm94KGNoZWNrZWQpIHtcbiAgcmV0dXJuIGNoZWNrZWQgPyBjb2xvcnMuZ3JlZW4oZmlndXJlcy5yYWRpb09uKSA6IGZpZ3VyZXMucmFkaW9PZmY7XG59XG4iLCIvKipcbiAqIGBwYXNzd29yZGAgdHlwZSBwcm9tcHRcbiAqL1xuXG5pbXBvcnQgY29sb3JzIGZyb20gJ3lvY3RvY29sb3JzLWNqcyc7XG5pbXBvcnQgeyBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IG9ic2VydmUgZnJvbSAnLi4vdXRpbHMvZXZlbnRzLmpzJztcbmltcG9ydCBCYXNlIGZyb20gJy4vYmFzZS5qcyc7XG5cbmZ1bmN0aW9uIG1hc2soaW5wdXQsIG1hc2tDaGFyKSB7XG4gIGlucHV0ID0gU3RyaW5nKGlucHV0KTtcbiAgbWFza0NoYXIgPSB0eXBlb2YgbWFza0NoYXIgPT09ICdzdHJpbmcnID8gbWFza0NoYXIgOiAnKic7XG4gIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogaW5wdXQubGVuZ3RoICsgMSB9KS5qb2luKG1hc2tDaGFyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFzc3dvcmRQcm9tcHQgZXh0ZW5kcyBCYXNlIHtcbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSBJbnF1aXJ5IHNlc3Npb25cbiAgICogQHBhcmFtICB7RnVuY3Rpb259IGNiICAgICAgQ2FsbGJhY2sgd2hlbiBwcm9tcHQgaXMgZG9uZVxuICAgKiBAcmV0dXJuIHt0aGlzfVxuICAgKi9cblxuICBfcnVuKGNiKSB7XG4gICAgdGhpcy5kb25lID0gY2I7XG5cbiAgICBjb25zdCBldmVudHMgPSBvYnNlcnZlKHRoaXMucmwpO1xuXG4gICAgLy8gT25jZSB1c2VyIGNvbmZpcm0gKGVudGVyIGtleSlcbiAgICBjb25zdCBzdWJtaXQgPSBldmVudHMubGluZS5waXBlKG1hcCh0aGlzLmZpbHRlcklucHV0LmJpbmQodGhpcykpKTtcblxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0aGlzLmhhbmRsZVN1Ym1pdEV2ZW50cyhzdWJtaXQpO1xuICAgIHZhbGlkYXRpb24uc3VjY2Vzcy5mb3JFYWNoKHRoaXMub25FbmQuYmluZCh0aGlzKSk7XG4gICAgdmFsaWRhdGlvbi5lcnJvci5mb3JFYWNoKHRoaXMub25FcnJvci5iaW5kKHRoaXMpKTtcblxuICAgIGV2ZW50cy5rZXlwcmVzc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHZhbGlkYXRpb24uc3VjY2VzcykpXG4gICAgICAuZm9yRWFjaCh0aGlzLm9uS2V5cHJlc3MuYmluZCh0aGlzKSk7XG5cbiAgICAvLyBJbml0XG4gICAgdGhpcy5yZW5kZXIoKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgcHJvbXB0IHRvIHNjcmVlblxuICAgKiBAcmV0dXJuIHtQYXNzd29yZFByb21wdH0gc2VsZlxuICAgKi9cblxuICByZW5kZXIoZXJyb3IpIHtcbiAgICBsZXQgbWVzc2FnZSA9IHRoaXMuZ2V0UXVlc3Rpb24oKTtcbiAgICBsZXQgYm90dG9tQ29udGVudCA9ICcnO1xuXG4gICAgbWVzc2FnZSArPVxuICAgICAgdGhpcy5zdGF0dXMgPT09ICdhbnN3ZXJlZCdcbiAgICAgICAgPyB0aGlzLmdldE1hc2tlZFZhbHVlKHRoaXMuYW5zd2VyKVxuICAgICAgICA6IHRoaXMuZ2V0TWFza2VkVmFsdWUodGhpcy5ybC5saW5lIHx8ICcnKTtcblxuICAgIGlmIChlcnJvcikge1xuICAgICAgYm90dG9tQ29udGVudCA9ICdcXG4nICsgY29sb3JzLnJlZCgnPj4gJykgKyBlcnJvcjtcbiAgICB9XG5cbiAgICB0aGlzLnNjcmVlbi5yZW5kZXIobWVzc2FnZSwgYm90dG9tQ29udGVudCk7XG4gIH1cblxuICBnZXRNYXNrZWRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gJ2Fuc3dlcmVkJykge1xuICAgICAgcmV0dXJuIHRoaXMub3B0Lm1hc2tcbiAgICAgICAgPyBjb2xvcnMuY3lhbihtYXNrKHZhbHVlLCB0aGlzLm9wdC5tYXNrKSlcbiAgICAgICAgOiBjb2xvcnMuaXRhbGljKGNvbG9ycy5kaW0oJ1toaWRkZW5dJykpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHQubWFza1xuICAgICAgPyBtYXNrKHZhbHVlLCB0aGlzLm9wdC5tYXNrKVxuICAgICAgOiBjb2xvcnMuaXRhbGljKGNvbG9ycy5kaW0oJ1tpbnB1dCBpcyBoaWRkZW5dICcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXNrIHZhbHVlIGR1cmluZyBhc3luYyBmaWx0ZXIvdmFsaWRhdGlvbi5cbiAgICovXG4gIGdldFNwaW5uaW5nVmFsdWUodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRNYXNrZWRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB1c2VyIHByZXNzIGBlbnRlcmAga2V5XG4gICAqL1xuXG4gIGZpbHRlcklucHV0KGlucHV0KSB7XG4gICAgaWYgKCFpbnB1dCkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0LmRlZmF1bHQgPT0gbnVsbCA/ICcnIDogdGhpcy5vcHQuZGVmYXVsdDtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cblxuICBvbkVuZChzdGF0ZSkge1xuICAgIHRoaXMuc3RhdHVzID0gJ2Fuc3dlcmVkJztcbiAgICB0aGlzLmFuc3dlciA9IHN0YXRlLnZhbHVlO1xuXG4gICAgLy8gUmUtcmVuZGVyIHByb21wdFxuICAgIHRoaXMucmVuZGVyKCk7XG5cbiAgICB0aGlzLnNjcmVlbi5kb25lKCk7XG4gICAgdGhpcy5kb25lKHN0YXRlLnZhbHVlKTtcbiAgfVxuXG4gIG9uRXJyb3Ioc3RhdGUpIHtcbiAgICB0aGlzLnJlbmRlcihzdGF0ZS5pc1ZhbGlkKTtcbiAgfVxuXG4gIG9uS2V5cHJlc3MoKSB7XG4gICAgLy8gSWYgdXNlciBwcmVzcyBhIGtleSwganVzdCBjbGVhciB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgIHRoaXMub3B0LmRlZmF1bHQgJiY9IHVuZGVmaW5lZDtcblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cbn1cbiIsIlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihkZXQsIHJlYywgY29uZmlkZW5jZSwgbmFtZSwgbGFuZykge1xuICB0aGlzLmNvbmZpZGVuY2UgPSBjb25maWRlbmNlO1xuICB0aGlzLm5hbWUgPSBuYW1lIHx8IHJlYy5uYW1lKGRldCk7XG4gIHRoaXMubGFuZyA9IGxhbmc7XG59O1xuIiwiXG52YXIgTWF0Y2ggPSByZXF1aXJlICgnLi4vbWF0Y2gnKTtcblxuLyoqXG4gKiBDaGFyc2V0IHJlY29nbml6ZXIgZm9yIFVURi04XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMubmFtZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnVVRGLTgnO1xuICB9O1xuICB0aGlzLm1hdGNoID0gZnVuY3Rpb24oZGV0KSB7XG5cbiAgICB2YXIgaGFzQk9NID0gZmFsc2UsXG4gICAgICBudW1WYWxpZCA9IDAsXG4gICAgICBudW1JbnZhbGlkID0gMCxcbiAgICAgIGlucHV0ID0gZGV0LmZSYXdJbnB1dCxcbiAgICAgIHRyYWlsQnl0ZXMgPSAwLFxuICAgICAgY29uZmlkZW5jZTtcblxuICAgIGlmIChkZXQuZlJhd0xlbmd0aCA+PSAzICYmXG4gICAgICAoaW5wdXRbMF0gJiAweGZmKSA9PSAweGVmICYmIChpbnB1dFsxXSAmIDB4ZmYpID09IDB4YmIgJiYgKGlucHV0WzJdICYgMHhmZikgPT0gMHhiZikge1xuICAgICAgaGFzQk9NID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBTY2FuIGZvciBtdWx0aS1ieXRlIHNlcXVlbmNlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGV0LmZSYXdMZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGIgPSBpbnB1dFtpXTtcbiAgICAgIGlmICgoYiAmIDB4ODApID09IDApXG4gICAgICAgIGNvbnRpbnVlOyAvLyBBU0NJSVxuXG4gICAgICAvLyBIaSBiaXQgb24gY2hhciBmb3VuZC4gIEZpZ3VyZSBvdXQgaG93IGxvbmcgdGhlIHNlcXVlbmNlIHNob3VsZCBiZVxuICAgICAgaWYgKChiICYgMHgwZTApID09IDB4MGMwKSB7XG4gICAgICAgIHRyYWlsQnl0ZXMgPSAxO1xuICAgICAgfSBlbHNlIGlmICgoYiAmIDB4MGYwKSA9PSAweDBlMCkge1xuICAgICAgICB0cmFpbEJ5dGVzID0gMjtcbiAgICAgIH0gZWxzZSBpZiAoKGIgJiAweDBmOCkgPT0gMHhmMCkge1xuICAgICAgICB0cmFpbEJ5dGVzID0gMztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG51bUludmFsaWQrKztcbiAgICAgICAgaWYgKG51bUludmFsaWQgPiA1KVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB0cmFpbEJ5dGVzID0gMDtcbiAgICAgIH1cblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgd2UndmUgZ290IHRoZSByaWdodCBudW1iZXIgb2YgdHJhaWwgYnl0ZXMgaW4gdGhlIHNlcXVlbmNlXG4gICAgICBmb3IgKDs7KSB7XG4gICAgICAgIGkrKztcbiAgICAgICAgaWYgKGkgPj0gZGV0LmZSYXdMZW5ndGgpXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgaWYgKChpbnB1dFtpXSAmIDB4YzApICE9IDB4MDgwKSB7XG4gICAgICAgICAgbnVtSW52YWxpZCsrO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmICgtLXRyYWlsQnl0ZXMgPT0gMCkge1xuICAgICAgICAgIG51bVZhbGlkKys7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDb29rIHVwIHNvbWUgc29ydCBvZiBjb25maWRlbmNlIHNjb3JlLCBiYXNlZCBvbiBwcmVzZW5zZSBvZiBhIEJPTVxuICAgIC8vICAgIGFuZCB0aGUgZXhpc3RlbmNlIG9mIHZhbGlkIGFuZC9vciBpbnZhbGlkIG11bHRpLWJ5dGUgc2VxdWVuY2VzLlxuICAgIGNvbmZpZGVuY2UgPSAwO1xuICAgIGlmIChoYXNCT00gJiYgbnVtSW52YWxpZCA9PSAwKVxuICAgICAgY29uZmlkZW5jZSA9IDEwMDtcbiAgICBlbHNlIGlmIChoYXNCT00gJiYgbnVtVmFsaWQgPiBudW1JbnZhbGlkICogMTApXG4gICAgICBjb25maWRlbmNlID0gODA7XG4gICAgZWxzZSBpZiAobnVtVmFsaWQgPiAzICYmIG51bUludmFsaWQgPT0gMClcbiAgICAgIGNvbmZpZGVuY2UgPSAxMDA7XG4gICAgZWxzZSBpZiAobnVtVmFsaWQgPiAwICYmIG51bUludmFsaWQgPT0gMClcbiAgICAgIGNvbmZpZGVuY2UgPSA4MDtcbiAgICBlbHNlIGlmIChudW1WYWxpZCA9PSAwICYmIG51bUludmFsaWQgPT0gMClcbiAgICAgIC8vIFBsYWluIEFTQ0lJLlxuICAgICAgY29uZmlkZW5jZSA9IDEwO1xuICAgIGVsc2UgaWYgKG51bVZhbGlkID4gbnVtSW52YWxpZCAqIDEwKVxuICAgICAgLy8gUHJvYmFibHkgY29ycnVwdXQgdXRmLTggZGF0YS4gIFZhbGlkIHNlcXVlbmNlcyBhcmVuJ3QgbGlrZWx5IGJ5IGNoYW5jZS5cbiAgICAgIGNvbmZpZGVuY2UgPSAyNTtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gbnVsbFxuXG4gICAgcmV0dXJuIG5ldyBNYXRjaChkZXQsIHRoaXMsIGNvbmZpZGVuY2UpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpLFxuICBNYXRjaCA9IHJlcXVpcmUgKCcuLi9tYXRjaCcpO1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgbWF0Y2hlcyBVVEYtMTYgYW5kIFVURi0zMiwgYm90aCBiaWctIGFuZCBsaXR0bGUtZW5kaWFuLiBUaGVcbiAqIEJPTSB3aWxsIGJlIHVzZWQgaWYgaXQgaXMgcHJlc2VudC5cbiAqL1xubW9kdWxlLmV4cG9ydHMuVVRGXzE2QkUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5uYW1lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICdVVEYtMTZCRSc7XG4gIH07XG4gIHRoaXMubWF0Y2ggPSBmdW5jdGlvbihkZXQpIHtcbiAgICB2YXIgaW5wdXQgPSBkZXQuZlJhd0lucHV0O1xuXG4gICAgaWYgKGlucHV0Lmxlbmd0aCA+PSAyICYmICgoaW5wdXRbMF0gJiAweGZmKSA9PSAweGZlICYmIChpbnB1dFsxXSAmIDB4ZmYpID09IDB4ZmYpKSB7XG4gICAgICByZXR1cm4gbmV3IE1hdGNoKGRldCwgdGhpcywgMTAwKTsgLy8gY29uZmlkZW5jZSA9IDEwMFxuICAgIH1cblxuICAgIC8vIFRPRE86IERvIHNvbWUgc3RhdGlzdGljcyB0byBjaGVjayBmb3IgdW5zaWduZWQgVVRGLTE2QkVcbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLlVURl8xNkxFID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMubmFtZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnVVRGLTE2TEUnO1xuICB9O1xuICB0aGlzLm1hdGNoID0gZnVuY3Rpb24oZGV0KSB7XG4gICAgdmFyIGlucHV0ID0gZGV0LmZSYXdJbnB1dDtcblxuICAgIGlmIChpbnB1dC5sZW5ndGggPj0gMiAmJiAoKGlucHV0WzBdICYgMHhmZikgPT0gMHhmZiAmJiAoaW5wdXRbMV0gJiAweGZmKSA9PSAweGZlKSkge1xuICAgICAgLy8gTEUgQk9NIGlzIHByZXNlbnQuXG4gICAgICBpZiAoaW5wdXQubGVuZ3RoID49IDQgJiYgaW5wdXRbMl0gPT0gMHgwMCAmJiBpbnB1dFszXSA9PSAweDAwKSB7XG4gICAgICAgIC8vIEl0IGlzIHByb2JhYmx5IFVURi0zMiBMRSwgbm90IFVURi0xNlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgTWF0Y2goZGV0LCB0aGlzLCAxMDApOyAvLyBjb25maWRlbmNlID0gMTAwXG4gICAgfVxuXG4gICAgLy8gVE9ETzogRG8gc29tZSBzdGF0aXN0aWNzIHRvIGNoZWNrIGZvciB1bnNpZ25lZCBVVEYtMTZMRVxuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5mdW5jdGlvbiBVVEZfMzIoKSB7fTtcblVURl8zMi5wcm90b3R5cGUubWF0Y2ggPSBmdW5jdGlvbihkZXQpIHtcbiAgdmFyIGlucHV0ICAgICAgPSBkZXQuZlJhd0lucHV0LFxuICAgIGxpbWl0ICAgICAgPSAoZGV0LmZSYXdMZW5ndGggLyA0KSAqIDQsXG4gICAgbnVtVmFsaWQgICA9IDAsXG4gICAgbnVtSW52YWxpZCA9IDAsXG4gICAgaGFzQk9NICAgICA9IGZhbHNlLFxuICAgIGNvbmZpZGVuY2UgPSAwO1xuXG4gIGlmIChsaW1pdCA9PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodGhpcy5nZXRDaGFyKGlucHV0LCAwKSA9PSAweDAwMDBGRUZGKSB7XG4gICAgaGFzQk9NID0gdHJ1ZTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGltaXQ7IGkgKz0gNCkge1xuICAgIHZhciBjaCA9IHRoaXMuZ2V0Q2hhcihpbnB1dCwgaSk7XG5cbiAgICBpZiAoY2ggPCAwIHx8IGNoID49IDB4MTBGRkZGIHx8IChjaCA+PSAweEQ4MDAgJiYgY2ggPD0gMHhERkZGKSkge1xuICAgICAgbnVtSW52YWxpZCArPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1WYWxpZCArPSAxO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvb2sgdXAgc29tZSBzb3J0IG9mIGNvbmZpZGVuY2Ugc2NvcmUsIGJhc2VkIG9uIHByZXNlbmNlIG9mIGEgQk9NXG4gIC8vICAgIGFuZCB0aGUgZXhpc3RlbmNlIG9mIHZhbGlkIGFuZC9vciBpbnZhbGlkIG11bHRpLWJ5dGUgc2VxdWVuY2VzLlxuICBpZiAoaGFzQk9NICYmIG51bUludmFsaWQgPT0gMCkge1xuICAgIGNvbmZpZGVuY2UgPSAxMDA7XG4gIH0gZWxzZSBpZiAoaGFzQk9NICYmIG51bVZhbGlkID4gbnVtSW52YWxpZCAqIDEwKSB7XG4gICAgY29uZmlkZW5jZSA9IDgwO1xuICB9IGVsc2UgaWYgKG51bVZhbGlkID4gMyAmJiBudW1JbnZhbGlkID09IDApIHtcbiAgICBjb25maWRlbmNlID0gMTAwO1xuICB9IGVsc2UgaWYgKG51bVZhbGlkID4gMCAmJiBudW1JbnZhbGlkID09IDApIHtcbiAgICBjb25maWRlbmNlID0gODA7XG4gIH0gZWxzZSBpZiAobnVtVmFsaWQgPiBudW1JbnZhbGlkICogMTApIHtcbiAgICAvLyBQcm9iYWJseSBjb3JydXB0IFVURi0zMkJFIGRhdGEuICBWYWxpZCBzZXF1ZW5jZXMgYXJlbid0IGxpa2VseSBieSBjaGFuY2UuXG4gICAgY29uZmlkZW5jZSA9IDI1O1xuICB9XG5cbiAgLy8gcmV0dXJuIGNvbmZpZGVuY2UgPT0gMCA/IG51bGwgOiBuZXcgQ2hhcnNldE1hdGNoKGRldCwgdGhpcywgY29uZmlkZW5jZSk7XG4gIHJldHVybiBjb25maWRlbmNlID09IDAgPyBudWxsIDogbmV3IE1hdGNoKGRldCwgdGhpcywgY29uZmlkZW5jZSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5VVEZfMzJCRSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLm5hbWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ1VURi0zMkJFJztcbiAgfTtcbiAgdGhpcy5nZXRDaGFyID0gZnVuY3Rpb24oaW5wdXQsIGluZGV4KSB7XG4gICAgcmV0dXJuIChpbnB1dFtpbmRleCArIDBdICYgMHhmZikgPDwgMjQgfCAoaW5wdXRbaW5kZXggKyAxXSAmIDB4ZmYpIDw8IDE2IHxcbiAgICAgICAgIChpbnB1dFtpbmRleCArIDJdICYgMHhmZikgPDwgIDggfCAoaW5wdXRbaW5kZXggKyAzXSAmIDB4ZmYpO1xuICB9O1xufTtcbnV0aWwuaW5oZXJpdHMobW9kdWxlLmV4cG9ydHMuVVRGXzMyQkUsIFVURl8zMik7XG5cbm1vZHVsZS5leHBvcnRzLlVURl8zMkxFID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMubmFtZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnVVRGLTMyTEUnO1xuICB9O1xuICB0aGlzLmdldENoYXIgPSBmdW5jdGlvbihpbnB1dCwgaW5kZXgpIHtcbiAgICByZXR1cm4gKGlucHV0W2luZGV4ICsgM10gJiAweGZmKSA8PCAyNCB8IChpbnB1dFtpbmRleCArIDJdICYgMHhmZikgPDwgMTYgfFxuICAgICAgICAgKGlucHV0W2luZGV4ICsgMV0gJiAweGZmKSA8PCAgOCB8IChpbnB1dFtpbmRleCArIDBdICYgMHhmZik7XG4gIH07XG59O1xudXRpbC5pbmhlcml0cyhtb2R1bGUuZXhwb3J0cy5VVEZfMzJMRSwgVVRGXzMyKTtcbiIsInZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpLFxuICBNYXRjaCA9IHJlcXVpcmUgKCcuLi9tYXRjaCcpO1xuXG4vKipcbiAqIEJpbmFyeSBzZWFyY2ggaW1wbGVtZW50YXRpb24gKHJlY3Vyc2l2ZSlcbiAqL1xuZnVuY3Rpb24gYmluYXJ5U2VhcmNoKGFyciwgc2VhcmNoVmFsdWUpIHtcbiAgZnVuY3Rpb24gZmluZChhcnIsIHNlYXJjaFZhbHVlLCBsZWZ0LCByaWdodCkge1xuICAgIGlmIChyaWdodCA8IGxlZnQpXG4gICAgICByZXR1cm4gLTE7XG5cbiAgICAvKlxuICAgIGludCBtaWQgPSBtaWQgPSAobGVmdCArIHJpZ2h0KSAvIDI7XG4gICAgVGhlcmUgaXMgYSBidWcgaW4gdGhlIGFib3ZlIGxpbmU7XG4gICAgSm9zaHVhIEJsb2NoIHN1Z2dlc3RzIHRoZSBmb2xsb3dpbmcgcmVwbGFjZW1lbnQ6XG4gICAgKi9cbiAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigobGVmdCArIHJpZ2h0KSA+Pj4gMSk7XG4gICAgaWYgKHNlYXJjaFZhbHVlID4gYXJyW21pZF0pXG4gICAgICByZXR1cm4gZmluZChhcnIsIHNlYXJjaFZhbHVlLCBtaWQgKyAxLCByaWdodCk7XG5cbiAgICBpZiAoc2VhcmNoVmFsdWUgPCBhcnJbbWlkXSlcbiAgICAgIHJldHVybiBmaW5kKGFyciwgc2VhcmNoVmFsdWUsIGxlZnQsIG1pZCAtIDEpO1xuXG4gICAgcmV0dXJuIG1pZDtcbiAgfTtcblxuICByZXR1cm4gZmluZChhcnIsIHNlYXJjaFZhbHVlLCAwLCBhcnIubGVuZ3RoIC0gMSk7XG59O1xuXG4vLyAnQ2hhcmFjdGVyJyAgaXRlcmF0ZWQgY2hhcmFjdGVyIGNsYXNzLlxuLy8gICAgUmVjb2duaXplcnMgZm9yIHNwZWNpZmljIG1iY3MgZW5jb2RpbmdzIG1ha2UgdGhlaXIgJ2NoYXJhY3RlcnMnIGF2YWlsYWJsZVxuLy8gICAgYnkgcHJvdmlkaW5nIGEgbmV4dENoYXIoKSBmdW5jdGlvbiB0aGF0IGZpbGxzIGluIGFuIGluc3RhbmNlIG9mIGl0ZXJhdGVkQ2hhclxuLy8gICAgd2l0aCB0aGUgbmV4dCBjaGFyIGZyb20gdGhlIGlucHV0LlxuLy8gICAgVGhlIHJldHVybmVkIGNoYXJhY3RlcnMgYXJlIG5vdCBjb252ZXJ0ZWQgdG8gVW5pY29kZSwgYnV0IHJlbWFpbiBhcyB0aGUgcmF3XG4vLyAgICBieXRlcyAoY29uY2F0ZW5hdGVkIGludG8gYW4gaW50KSBmcm9tIHRoZSBjb2RlcGFnZSBkYXRhLlxuLy9cbi8vICBGb3IgQXNpYW4gY2hhcnNldHMsIHVzZSB0aGUgcmF3IGlucHV0IHJhdGhlciB0aGFuIHRoZSBpbnB1dCB0aGF0IGhhcyBiZWVuXG4vLyAgIHN0cmlwcGVkIG9mIG1hcmt1cC4gIERldGVjdGlvbiBvbmx5IGNvbnNpZGVycyBtdWx0aS1ieXRlIGNoYXJzLCBlZmZlY3RpdmVseVxuLy8gICBzdHJpcHBpbmcgbWFya3VwIGFueXdheSwgYW5kIGRvdWJsZSBieXRlIGNoYXJzIGRvIG9jY3VyIGluIG1hcmt1cCB0b28uXG4vL1xuZnVuY3Rpb24gSXRlcmF0ZWRDaGFyKCkge1xuXG4gIHRoaXMuY2hhclZhbHVlID0gMDsgLy8gMS00IGJ5dGVzIGZyb20gdGhlIHJhdyBpbnB1dCBkYXRhXG4gIHRoaXMuaW5kZXggICAgID0gMDtcbiAgdGhpcy5uZXh0SW5kZXggPSAwO1xuICB0aGlzLmVycm9yICAgICA9IGZhbHNlO1xuICB0aGlzLmRvbmUgICAgICA9IGZhbHNlO1xuXG4gIHRoaXMucmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNoYXJWYWx1ZSA9IDA7XG4gICAgdGhpcy5pbmRleCAgICAgPSAtMTtcbiAgICB0aGlzLm5leHRJbmRleCA9IDA7XG4gICAgdGhpcy5lcnJvciAgICAgPSBmYWxzZTtcbiAgICB0aGlzLmRvbmUgICAgICA9IGZhbHNlO1xuICB9O1xuXG4gIHRoaXMubmV4dEJ5dGUgPSBmdW5jdGlvbihkZXQpIHtcbiAgICBpZiAodGhpcy5uZXh0SW5kZXggPj0gZGV0LmZSYXdMZW5ndGgpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHZhciBieXRlVmFsdWUgPSBkZXQuZlJhd0lucHV0W3RoaXMubmV4dEluZGV4KytdICYgMHgwMGZmO1xuICAgIHJldHVybiBieXRlVmFsdWU7XG4gIH07XG59O1xuXG5cblxuLyoqXG4gKiBBc2lhbiBkb3VibGUgb3IgbXVsdGktYnl0ZSAtIGNoYXJzZXRzLlxuICogTWF0Y2ggaXMgZGV0ZXJtaW5lZCBtb3N0bHkgYnkgdGhlIGlucHV0IGRhdGEgYWRoZXJpbmcgdG8gdGhlXG4gKiBlbmNvZGluZyBzY2hlbWUgZm9yIHRoZSBjaGFyc2V0LCBhbmQsIG9wdGlvbmFsbHksXG4gKiBmcmVxdWVuY3ktb2Ytb2NjdXJlbmNlIG9mIGNoYXJhY3RlcnMuXG4gKi9cblxuZnVuY3Rpb24gbWJjcygpIHt9O1xuXG4vKipcbiAqIFRlc3QgdGhlIG1hdGNoIG9mIHRoaXMgY2hhcnNldCB3aXRoIHRoZSBpbnB1dCB0ZXh0IGRhdGFcbiAqICAgICAgd2hpY2ggaXMgb2J0YWluZWQgdmlhIHRoZSBDaGFyc2V0RGV0ZWN0b3Igb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBkZXQgIFRoZSBDaGFyc2V0RGV0ZWN0b3IsIHdoaWNoIGNvbnRhaW5zIHRoZSBpbnB1dCB0ZXh0XG4gKiAgICAgICAgICAgICB0byBiZSBjaGVja2VkIGZvciBiZWluZyBpbiB0aGlzIGNoYXJzZXQuXG4gKiBAcmV0dXJuICAgICBUd28gdmFsdWVzIHBhY2tlZCBpbnRvIG9uZSBpbnQgIChEYW1uIGphdmEsIGFueWhvdylcbiAqICAgICAgICAgICAgIGJpdHMgMC03OiAgdGhlIG1hdGNoIGNvbmZpZGVuY2UsIHJhbmdpbmcgZnJvbSAwLTEwMFxuICogICAgICAgICAgICAgYml0cyA4LTE1OiBUaGUgbWF0Y2ggcmVhc29uLCBhbiBlbnVtLWxpa2UgdmFsdWUuXG4gKi9cbm1iY3MucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24oZGV0KSB7XG5cbiAgdmFyIHNpbmdsZUJ5dGVDaGFyQ291bnQgPSAwLCAgLy9UT0RPIERvIHdlIHJlYWxseSBuZWVkIHRoaXM/XG4gICAgZG91YmxlQnl0ZUNoYXJDb3VudCA9IDAsXG4gICAgY29tbW9uQ2hhckNvdW50ICAgICA9IDAsXG4gICAgYmFkQ2hhckNvdW50ICAgICAgICA9IDAsXG4gICAgdG90YWxDaGFyQ291bnQgICAgICA9IDAsXG4gICAgY29uZmlkZW5jZSAgICAgICAgICA9IDA7XG5cbiAgdmFyIGl0ZXIgPSBuZXcgSXRlcmF0ZWRDaGFyKCk7XG5cbiAgZGV0ZWN0QmxvY2s6IHtcbiAgICBmb3IgKGl0ZXIucmVzZXQoKTsgdGhpcy5uZXh0Q2hhcihpdGVyLCBkZXQpOykge1xuICAgICAgdG90YWxDaGFyQ291bnQrKztcbiAgICAgIGlmIChpdGVyLmVycm9yKSB7XG4gICAgICAgIGJhZENoYXJDb3VudCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGN2ID0gaXRlci5jaGFyVmFsdWUgJiAweEZGRkZGRkZGO1xuXG4gICAgICAgIGlmIChjdiA8PSAweGZmKSB7XG4gICAgICAgICAgc2luZ2xlQnl0ZUNoYXJDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvdWJsZUJ5dGVDaGFyQ291bnQrKztcbiAgICAgICAgICBpZiAodGhpcy5jb21tb25DaGFycyAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBOT1RFOiBUaGlzIGFzc3VtZXMgdGhhdCB0aGVyZSBhcmUgbm8gNC1ieXRlIGNvbW1vbiBjaGFycy5cbiAgICAgICAgICAgIGlmIChiaW5hcnlTZWFyY2godGhpcy5jb21tb25DaGFycywgY3YpID49IDApIHtcbiAgICAgICAgICAgICAgY29tbW9uQ2hhckNvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYmFkQ2hhckNvdW50ID49IDIgJiYgYmFkQ2hhckNvdW50ICogNSA+PSBkb3VibGVCeXRlQ2hhckNvdW50KSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdpdHMgaGVyZSEnKVxuICAgICAgICAvLyBCYWlsIG91dCBlYXJseSBpZiB0aGUgYnl0ZSBkYXRhIGlzIG5vdCBtYXRjaGluZyB0aGUgZW5jb2Rpbmcgc2NoZW1lLlxuICAgICAgICBicmVhayBkZXRlY3RCbG9jaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZG91YmxlQnl0ZUNoYXJDb3VudCA8PSAxMCAmJiBiYWRDaGFyQ291bnQ9PSAwKSB7XG4gICAgICAvLyBOb3QgbWFueSBtdWx0aS1ieXRlIGNoYXJzLlxuICAgICAgaWYgKGRvdWJsZUJ5dGVDaGFyQ291bnQgPT0gMCAmJiB0b3RhbENoYXJDb3VudCA8IDEwKSB7XG4gICAgICAgIC8vIFRoZXJlIHdlcmVuJ3QgYW55IG11bHRpYnl0ZSBzZXF1ZW5jZXMsIGFuZCB0aGVyZSB3YXMgYSBsb3cgZGVuc2l0eSBvZiBub24tQVNDSUkgc2luZ2xlIGJ5dGVzLlxuICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGVub3VnaCBkYXRhIHRvIGhhdmUgYW55IGNvbmZpZGVuY2UuXG4gICAgICAgIC8vIFN0YXRpc3RpY2FsIGFuYWx5c2lzIG9mIHNpbmdsZSBieXRlIG5vbi1BU0NJSSBjaGFyY3RlcnMgd291bGQgcHJvYmFibHkgaGVscCBoZXJlLlxuICAgICAgICBjb25maWRlbmNlID0gMDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyAgIEFTQ0lJIG9yIElTTyBmaWxlPyAgSXQncyBwcm9iYWJseSBub3Qgb3VyIGVuY29kaW5nLFxuICAgICAgICAvLyAgIGJ1dCBpcyBub3QgaW5jb21wYXRpYmxlIHdpdGggb3VyIGVuY29kaW5nLCBzbyBkb24ndCBnaXZlIGl0IGEgemVyby5cbiAgICAgICAgY29uZmlkZW5jZSA9IDEwO1xuICAgICAgfVxuICAgICAgYnJlYWsgZGV0ZWN0QmxvY2s7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyAgTm8gbWF0Y2ggaWYgdGhlcmUgYXJlIHRvbyBtYW55IGNoYXJhY3RlcnMgdGhhdCBkb24ndCBmaXQgdGhlIGVuY29kaW5nIHNjaGVtZS5cbiAgICAvLyAgICAoc2hvdWxkIHdlIGhhdmUgemVybyB0b2xlcmFuY2UgZm9yIHRoZXNlPylcbiAgICAvL1xuICAgIGlmIChkb3VibGVCeXRlQ2hhckNvdW50IDwgMjAgKiBiYWRDaGFyQ291bnQpIHtcbiAgICAgIGNvbmZpZGVuY2UgPSAwO1xuICAgICAgYnJlYWsgZGV0ZWN0QmxvY2s7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29tbW9uQ2hhcnMgPT0gbnVsbCkge1xuICAgICAgLy8gV2UgaGF2ZSBubyBzdGF0aXN0aWNzIG9uIGZyZXF1ZW50bHkgb2NjdXJpbmcgY2hhcmFjdGVycy5cbiAgICAgIC8vICBBc3Nlc3MgY29uZmlkZW5jZSBwdXJlbHkgb24gaGF2aW5nIGEgcmVhc29uYWJsZSBudW1iZXIgb2ZcbiAgICAgIC8vICBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgKHRoZSBtb3JlIHRoZSBiZXR0ZXJcbiAgICAgIGNvbmZpZGVuY2UgPSAzMCArIGRvdWJsZUJ5dGVDaGFyQ291bnQgLSAyMCAqIGJhZENoYXJDb3VudDtcbiAgICAgIGlmIChjb25maWRlbmNlID4gMTAwKSB7XG4gICAgICAgIGNvbmZpZGVuY2UgPSAxMDA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vXG4gICAgICAvLyBGcmVxdWVuY3kgb2Ygb2NjdXJlbmNlIHN0YXRpc3RpY3MgZXhpc3QuXG4gICAgICAvL1xuICAgICAgdmFyIG1heFZhbCA9IE1hdGgubG9nKHBhcnNlRmxvYXQoZG91YmxlQnl0ZUNoYXJDb3VudCkgLyA0KTtcbiAgICAgIHZhciBzY2FsZUZhY3RvciA9IDkwLjAgLyBtYXhWYWw7XG4gICAgICBjb25maWRlbmNlID0gTWF0aC5mbG9vcihNYXRoLmxvZyhjb21tb25DaGFyQ291bnQgKyAxKSAqIHNjYWxlRmFjdG9yICsgMTApO1xuICAgICAgY29uZmlkZW5jZSA9IE1hdGgubWluKGNvbmZpZGVuY2UsIDEwMCk7XG4gICAgfVxuICB9ICAgLy8gZW5kIG9mIGRldGVjdEJsb2NrOlxuXG4gIHJldHVybiBjb25maWRlbmNlID09IDAgPyBudWxsIDogbmV3IE1hdGNoKGRldCwgdGhpcywgY29uZmlkZW5jZSk7XG59O1xuXG4vKipcbiAqIEdldCB0aGUgbmV4dCBjaGFyYWN0ZXIgKGhvd2V2ZXIgbWFueSBieXRlcyBpdCBpcykgZnJvbSB0aGUgaW5wdXQgZGF0YVxuICogICAgU3ViY2xhc3NlcyBmb3Igc3BlY2lmaWMgY2hhcnNldCBlbmNvZGluZ3MgbXVzdCBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvblxuICogICAgdG8gZ2V0IGNoYXJhY3RlcnMgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGVpciBlbmNvZGluZyBzY2hlbWUuXG4gKlxuICogIFRoaXMgZnVuY3Rpb24gaXMgbm90IGEgbWV0aG9kIG9mIGNsYXNzIGl0ZXJhdGVkQ2hhciBvbmx5IGJlY2F1c2VcbiAqICAgdGhhdCB3b3VsZCByZXF1aXJlIGEgbG90IG9mIGV4dHJhIGRlcml2ZWQgY2xhc3Nlcywgd2hpY2ggaXMgYXdrd2FyZC5cbiAqIEBwYXJhbSBpdCAgVGhlIGl0ZXJhdGVkQ2hhciAnc3RydWN0JyBpbnRvIHdoaWNoIHRoZSByZXR1cm5lZCBjaGFyIGlzIHBsYWNlZC5cbiAqIEBwYXJhbSBkZXQgVGhlIGNoYXJzZXQgZGV0ZWN0b3IsIHdoaWNoIGlzIG5lZWRlZCB0byBnZXQgYXQgdGhlIGlucHV0IGJ5dGUgZGF0YVxuICogICAgICAgICAgICBiZWluZyBpdGVyYXRlZCBvdmVyLlxuICogQHJldHVybiAgICBUcnVlIGlmIGEgY2hhcmFjdGVyIHdhcyByZXR1cm5lZCwgZmFsc2UgYXQgZW5kIG9mIGlucHV0LlxuICovXG5cbm1iY3MucHJvdG90eXBlLm5leHRDaGFyID0gZnVuY3Rpb24oaXRlciwgZGV0KSB7fTtcblxuXG5cbi8qKlxuICogU2hpZnQtSklTIGNoYXJzZXQgcmVjb2duaXplci5cbiAqL1xubW9kdWxlLmV4cG9ydHMuc2ppcyA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLm5hbWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ1NoaWZ0LUpJUyc7XG4gIH07XG4gIHRoaXMubGFuZ3VhZ2UgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ2phJztcbiAgfTtcblxuICAvLyBUT0RPOiAgVGhpcyBzZXQgb2YgZGF0YSBjb21lcyBmcm9tIHRoZSBjaGFyYWN0ZXIgZnJlcXVlbmN5LVxuICAvLyAgICAgICAgb2Ytb2NjdXJlbmNlIGFuYWx5c2lzIHRvb2wuICBUaGUgZGF0YSBuZWVkcyB0byBiZSBtb3ZlZFxuICAvLyAgICAgICAgaW50byBhIHJlc291cmNlIGFuZCBsb2FkZWQgZnJvbSB0aGVyZS5cbiAgdGhpcy5jb21tb25DaGFycyA9IFtcbiAgICAweDgxNDAsIDB4ODE0MSwgMHg4MTQyLCAweDgxNDUsIDB4ODE1YiwgMHg4MTY5LCAweDgxNmEsIDB4ODE3NSwgMHg4MTc2LCAweDgyYTAsXG4gICAgMHg4MmEyLCAweDgyYTQsIDB4ODJhOSwgMHg4MmFhLCAweDgyYWIsIDB4ODJhZCwgMHg4MmFmLCAweDgyYjEsIDB4ODJiMywgMHg4MmI1LFxuICAgIDB4ODJiNywgMHg4MmJkLCAweDgyYmUsIDB4ODJjMSwgMHg4MmM0LCAweDgyYzUsIDB4ODJjNiwgMHg4MmM4LCAweDgyYzksIDB4ODJjYyxcbiAgICAweDgyY2QsIDB4ODJkYywgMHg4MmUwLCAweDgyZTcsIDB4ODJlOCwgMHg4MmU5LCAweDgyZWEsIDB4ODJmMCwgMHg4MmYxLCAweDgzNDEsXG4gICAgMHg4MzQzLCAweDgzNGUsIDB4ODM0ZiwgMHg4MzU4LCAweDgzNWUsIDB4ODM2MiwgMHg4MzY3LCAweDgzNzUsIDB4ODM3NiwgMHg4Mzg5LFxuICAgIDB4ODM4YSwgMHg4MzhiLCAweDgzOGQsIDB4ODM5MywgMHg4ZTk2LCAweDkzZmEsIDB4OTVhYVxuICBdO1xuXG4gIHRoaXMubmV4dENoYXIgPSBmdW5jdGlvbihpdGVyLCBkZXQpIHtcbiAgICBpdGVyLmluZGV4ID0gaXRlci5uZXh0SW5kZXg7XG4gICAgaXRlci5lcnJvciA9IGZhbHNlO1xuXG4gICAgdmFyIGZpcnN0Qnl0ZTtcbiAgICBmaXJzdEJ5dGUgPSBpdGVyLmNoYXJWYWx1ZSA9IGl0ZXIubmV4dEJ5dGUoZGV0KTtcbiAgICBpZiAoZmlyc3RCeXRlIDwgMClcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChmaXJzdEJ5dGUgPD0gMHg3ZiB8fCAoZmlyc3RCeXRlID4gMHhhMCAmJiBmaXJzdEJ5dGUgPD0gMHhkZikpXG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIHZhciBzZWNvbmRCeXRlID0gaXRlci5uZXh0Qnl0ZShkZXQpO1xuICAgIGlmIChzZWNvbmRCeXRlIDwgMClcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGl0ZXIuY2hhclZhbHVlID0gKGZpcnN0Qnl0ZSA8PCA4KSB8IHNlY29uZEJ5dGU7XG4gICAgaWYgKCEgKChzZWNvbmRCeXRlID49IDB4NDAgJiYgc2Vjb25kQnl0ZSA8PSAweDdmKSB8fCAoc2Vjb25kQnl0ZSA+PSAweDgwICYmIHNlY29uZEJ5dGUgPD0gMHhmZikpKSB7XG4gICAgICAvLyBJbGxlZ2FsIHNlY29uZCBieXRlIHZhbHVlLlxuICAgICAgaXRlci5lcnJvciA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xufTtcbnV0aWwuaW5oZXJpdHMobW9kdWxlLmV4cG9ydHMuc2ppcywgbWJjcyk7XG5cblxuXG4vKipcbiAqICAgQmlnNSBjaGFyc2V0IHJlY29nbml6ZXIuXG4gKi9cbm1vZHVsZS5leHBvcnRzLmJpZzUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5uYW1lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICdCaWc1JztcbiAgfTtcbiAgdGhpcy5sYW5ndWFnZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnemgnO1xuICB9O1xuICAvLyBUT0RPOiAgVGhpcyBzZXQgb2YgZGF0YSBjb21lcyBmcm9tIHRoZSBjaGFyYWN0ZXIgZnJlcXVlbmN5LVxuICAvLyAgICAgICAgb2Ytb2NjdXJlbmNlIGFuYWx5c2lzIHRvb2wuICBUaGUgZGF0YSBuZWVkcyB0byBiZSBtb3ZlZFxuICAvLyAgICAgICAgaW50byBhIHJlc291cmNlIGFuZCBsb2FkZWQgZnJvbSB0aGVyZS5cbiAgdGhpcy5jb21tb25DaGFycyA9IFtcbiAgICAweGExNDAsIDB4YTE0MSwgMHhhMTQyLCAweGExNDMsIDB4YTE0NywgMHhhMTQ5LCAweGExNzUsIDB4YTE3NiwgMHhhNDQwLCAweGE0NDYsXG4gICAgMHhhNDQ3LCAweGE0NDgsIDB4YTQ1MSwgMHhhNDU0LCAweGE0NTcsIDB4YTQ2NCwgMHhhNDZhLCAweGE0NmMsIDB4YTQ3NywgMHhhNGEzLFxuICAgIDB4YTRhNCwgMHhhNGE3LCAweGE0YzEsIDB4YTRjZSwgMHhhNGQxLCAweGE0ZGYsIDB4YTRlOCwgMHhhNGZkLCAweGE1NDAsIDB4YTU0OCxcbiAgICAweGE1NTgsIDB4YTU2OSwgMHhhNWNkLCAweGE1ZTcsIDB4YTY1NywgMHhhNjYxLCAweGE2NjIsIDB4YTY2OCwgMHhhNjcwLCAweGE2YTgsXG4gICAgMHhhNmIzLCAweGE2YjksIDB4YTZkMywgMHhhNmRiLCAweGE2ZTYsIDB4YTZmMiwgMHhhNzQwLCAweGE3NTEsIDB4YTc1OSwgMHhhN2RhLFxuICAgIDB4YThhMywgMHhhOGE1LCAweGE4YWQsIDB4YThkMSwgMHhhOGQzLCAweGE4ZTQsIDB4YThmYywgMHhhOWMwLCAweGE5ZDIsIDB4YTlmMyxcbiAgICAweGFhNmIsIDB4YWFiYSwgMHhhYWJlLCAweGFhY2MsIDB4YWFmYywgMHhhYzQ3LCAweGFjNGYsIDB4YWNiMCwgMHhhY2QyLCAweGFkNTksXG4gICAgMHhhZWM5LCAweGFmZTAsIDB4YjBlYSwgMHhiMTZmLCAweGIyYjMsIDB4YjJjNCwgMHhiMzZmLCAweGI0NGMsIDB4YjQ0ZSwgMHhiNTRjLFxuICAgIDB4YjVhNSwgMHhiNWJkLCAweGI1ZDAsIDB4YjVkOCwgMHhiNjcxLCAweGI3ZWQsIDB4Yjg2NywgMHhiOTQ0LCAweGJhZDgsIDB4YmI0NCxcbiAgICAweGJiYTEsIDB4YmRkMSwgMHhjMmM0LCAweGMzYjksIDB4YzQ0MCwgMHhjNDVmXG4gIF07XG4gIHRoaXMubmV4dENoYXIgPSBmdW5jdGlvbihpdGVyLCBkZXQpIHtcbiAgICBpdGVyLmluZGV4ID0gaXRlci5uZXh0SW5kZXg7XG4gICAgaXRlci5lcnJvciA9IGZhbHNlO1xuXG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGl0ZXIuY2hhclZhbHVlID0gaXRlci5uZXh0Qnl0ZShkZXQpO1xuXG4gICAgaWYgKGZpcnN0Qnl0ZSA8IDApXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIuXG4gICAgaWYgKGZpcnN0Qnl0ZSA8PSAweDdmIHx8IGZpcnN0Qnl0ZSA9PSAweGZmKVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICB2YXIgc2Vjb25kQnl0ZSA9IGl0ZXIubmV4dEJ5dGUoZGV0KTtcblxuICAgIGlmIChzZWNvbmRCeXRlIDwgMClcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGl0ZXIuY2hhclZhbHVlID0gKGl0ZXIuY2hhclZhbHVlIDw8IDgpIHwgc2Vjb25kQnl0ZTtcblxuICAgIGlmIChzZWNvbmRCeXRlIDwgMHg0MCB8fCBzZWNvbmRCeXRlID09IDB4N2YgfHwgc2Vjb25kQnl0ZSA9PSAweGZmKVxuICAgICAgaXRlci5lcnJvciA9IHRydWU7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn07XG51dGlsLmluaGVyaXRzKG1vZHVsZS5leHBvcnRzLmJpZzUsIG1iY3MpO1xuXG5cblxuLyoqXG4gKiAgRVVDIGNoYXJzZXQgcmVjb2duaXplcnMuICBPbmUgYWJzdHJhY3QgY2xhc3MgdGhhdCBwcm92aWRlcyB0aGUgY29tbW9uIGZ1bmN0aW9uXG4gKiAgZm9yIGdldHRpbmcgdGhlIG5leHQgY2hhcmFjdGVyIGFjY29yZGluZyB0byB0aGUgRVVDIGVuY29kaW5nIHNjaGVtZSxcbiAqICBhbmQgbmVzdGVkIGRlcml2ZWQgY2xhc3NlcyBmb3IgRVVDX0tSLCBFVUNfSlAsIEVVQ19DTi5cbiAqXG4gKiAgR2V0IHRoZSBuZXh0IGNoYXJhY3RlciB2YWx1ZSBmb3IgRVVDIGJhc2VkIGVuY29kaW5ncy5cbiAqICBDaGFyYWN0ZXIgJ3ZhbHVlJyBpcyBzaW1wbHkgdGhlIHJhdyBieXRlcyB0aGF0IG1ha2UgdXAgdGhlIGNoYXJhY3RlclxuICogICAgIHBhY2tlZCBpbnRvIGFuIGludC5cbiAqL1xuZnVuY3Rpb24gZXVjTmV4dENoYXIoaXRlciwgZGV0KSB7XG4gIGl0ZXIuaW5kZXggPSBpdGVyLm5leHRJbmRleDtcbiAgaXRlci5lcnJvciA9IGZhbHNlO1xuICB2YXIgZmlyc3RCeXRlICA9IDA7XG4gIHZhciBzZWNvbmRCeXRlID0gMDtcbiAgdmFyIHRoaXJkQnl0ZSAgPSAwO1xuICAvL2ludCBmb3VydGhCeXRlID0gMDtcbiAgYnVpbGRDaGFyOiB7XG4gICAgZmlyc3RCeXRlID0gaXRlci5jaGFyVmFsdWUgPSBpdGVyLm5leHRCeXRlKGRldCk7XG4gICAgaWYgKGZpcnN0Qnl0ZSA8IDApIHtcbiAgICAgIC8vIFJhbiBvZmYgdGhlIGVuZCBvZiB0aGUgaW5wdXQgZGF0YVxuICAgICAgaXRlci5kb25lID0gdHJ1ZTtcbiAgICAgIGJyZWFrIGJ1aWxkQ2hhcjtcbiAgICB9XG4gICAgaWYgKGZpcnN0Qnl0ZSA8PSAweDhkKSB7XG4gICAgICAvLyBzaW5nbGUgYnl0ZSBjaGFyXG4gICAgICBicmVhayBidWlsZENoYXI7XG4gICAgfVxuICAgIHNlY29uZEJ5dGUgPSBpdGVyLm5leHRCeXRlKGRldCk7XG4gICAgaXRlci5jaGFyVmFsdWUgPSAoaXRlci5jaGFyVmFsdWUgPDwgOCkgfCBzZWNvbmRCeXRlO1xuICAgIGlmIChmaXJzdEJ5dGUgPj0gMHhBMSAmJiBmaXJzdEJ5dGUgPD0gMHhmZSkge1xuICAgICAgLy8gVHdvIGJ5dGUgQ2hhclxuICAgICAgaWYgKHNlY29uZEJ5dGUgPCAweGExKSB7XG4gICAgICAgIGl0ZXIuZXJyb3IgPSB0cnVlO1xuICAgICAgfVxuICAgICAgYnJlYWsgYnVpbGRDaGFyO1xuICAgIH1cbiAgICBpZiAoZmlyc3RCeXRlID09IDB4OGUpIHtcbiAgICAgIC8vIENvZGUgU2V0IDIuXG4gICAgICAvLyAgIEluIEVVQy1KUCwgdG90YWwgY2hhciBzaXplIGlzIDIgYnl0ZXMsIG9ubHkgb25lIGJ5dGUgb2YgYWN0dWFsIGNoYXIgdmFsdWUuXG4gICAgICAvLyAgIEluIEVVQy1UVywgdG90YWwgY2hhciBzaXplIGlzIDQgYnl0ZXMsIHRocmVlIGJ5dGVzIGNvbnRyaWJ1dGUgdG8gY2hhciB2YWx1ZS5cbiAgICAgIC8vIFdlIGRvbid0IGtub3cgd2hpY2ggd2UndmUgZ290LlxuICAgICAgLy8gVHJlYXQgaXQgbGlrZSBFVUMtSlAuICBJZiB0aGUgZGF0YSByZWFsbHkgd2FzIEVVQy1UVywgdGhlIGZvbGxvd2luZyB0d29cbiAgICAgIC8vICAgYnl0ZXMgd2lsbCBsb29rIGxpa2UgYSB3ZWxsIGZvcm1lZCAyIGJ5dGUgY2hhci5cbiAgICAgIGlmIChzZWNvbmRCeXRlIDwgMHhhMSkge1xuICAgICAgICBpdGVyLmVycm9yID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrIGJ1aWxkQ2hhcjtcbiAgICB9XG4gICAgaWYgKGZpcnN0Qnl0ZSA9PSAweDhmKSB7XG4gICAgICAvLyBDb2RlIHNldCAzLlxuICAgICAgLy8gVGhyZWUgYnl0ZSB0b3RhbCBjaGFyIHNpemUsIHR3byBieXRlcyBvZiBhY3R1YWwgY2hhciB2YWx1ZS5cbiAgICAgIHRoaXJkQnl0ZSA9IGl0ZXIubmV4dEJ5dGUoZGV0KTtcbiAgICAgIGl0ZXIuY2hhclZhbHVlID0gKGl0ZXIuY2hhclZhbHVlIDw8IDgpIHwgdGhpcmRCeXRlO1xuICAgICAgaWYgKHRoaXJkQnl0ZSA8IDB4YTEpIHtcbiAgICAgICAgaXRlci5lcnJvciA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBpdGVyLmRvbmUgPT0gZmFsc2U7XG59O1xuXG5cblxuLyoqXG4gKiBUaGUgY2hhcnNldCByZWNvZ25pemUgZm9yIEVVQy1KUC4gIEEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgY2xhc3NcbiAqICAgIGlzIGNyZWF0ZWQgYW5kIGtlcHQgYnkgdGhlIHB1YmxpYyBDaGFyc2V0RGV0ZWN0b3IgY2xhc3NcbiAqL1xubW9kdWxlLmV4cG9ydHMuZXVjX2pwID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMubmFtZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnRVVDLUpQJztcbiAgfTtcbiAgdGhpcy5sYW5ndWFnZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnamEnO1xuICB9O1xuXG4gIC8vIFRPRE86ICBUaGlzIHNldCBvZiBkYXRhIGNvbWVzIGZyb20gdGhlIGNoYXJhY3RlciBmcmVxdWVuY3ktXG4gIC8vICAgICAgICBvZi1vY2N1cmVuY2UgYW5hbHlzaXMgdG9vbC4gIFRoZSBkYXRhIG5lZWRzIHRvIGJlIG1vdmVkXG4gIC8vICAgICAgICBpbnRvIGEgcmVzb3VyY2UgYW5kIGxvYWRlZCBmcm9tIHRoZXJlLlxuICB0aGlzLmNvbW1vbkNoYXJzID0gW1xuICAgIDB4YTFhMSwgMHhhMWEyLCAweGExYTMsIDB4YTFhNiwgMHhhMWJjLCAweGExY2EsIDB4YTFjYiwgMHhhMWQ2LCAweGExZDcsIDB4YTRhMixcbiAgICAweGE0YTQsIDB4YTRhNiwgMHhhNGE4LCAweGE0YWEsIDB4YTRhYiwgMHhhNGFjLCAweGE0YWQsIDB4YTRhZiwgMHhhNGIxLCAweGE0YjMsXG4gICAgMHhhNGI1LCAweGE0YjcsIDB4YTRiOSwgMHhhNGJiLCAweGE0YmQsIDB4YTRiZiwgMHhhNGMwLCAweGE0YzEsIDB4YTRjMywgMHhhNGM0LFxuICAgIDB4YTRjNiwgMHhhNGM3LCAweGE0YzgsIDB4YTRjOSwgMHhhNGNhLCAweGE0Y2IsIDB4YTRjZSwgMHhhNGNmLCAweGE0ZDAsIDB4YTRkZSxcbiAgICAweGE0ZGYsIDB4YTRlMSwgMHhhNGUyLCAweGE0ZTQsIDB4YTRlOCwgMHhhNGU5LCAweGE0ZWEsIDB4YTRlYiwgMHhhNGVjLCAweGE0ZWYsXG4gICAgMHhhNGYyLCAweGE0ZjMsIDB4YTVhMiwgMHhhNWEzLCAweGE1YTQsIDB4YTVhNiwgMHhhNWE3LCAweGE1YWEsIDB4YTVhZCwgMHhhNWFmLFxuICAgIDB4YTViMCwgMHhhNWIzLCAweGE1YjUsIDB4YTViNywgMHhhNWI4LCAweGE1YjksIDB4YTViZiwgMHhhNWMzLCAweGE1YzYsIDB4YTVjNyxcbiAgICAweGE1YzgsIDB4YTVjOSwgMHhhNWNiLCAweGE1ZDAsIDB4YTVkNSwgMHhhNWQ2LCAweGE1ZDcsIDB4YTVkZSwgMHhhNWUwLCAweGE1ZTEsXG4gICAgMHhhNWU1LCAweGE1ZTksIDB4YTVlYSwgMHhhNWViLCAweGE1ZWMsIDB4YTVlZCwgMHhhNWYzLCAweGI4YTksIDB4YjlkNCwgMHhiYWVlLFxuICAgIDB4YmJjOCwgMHhiZWYwLCAweGJmYjcsIDB4YzRlYSwgMHhjNmZjLCAweGM3YmQsIDB4Y2FiOCwgMHhjYWYzLCAweGNiZGMsIDB4Y2RkMVxuICBdO1xuXG4gIHRoaXMubmV4dENoYXIgPSBldWNOZXh0Q2hhcjtcbn07XG51dGlsLmluaGVyaXRzKG1vZHVsZS5leHBvcnRzLmV1Y19qcCwgbWJjcyk7XG5cblxuXG4vKipcbiAqIFRoZSBjaGFyc2V0IHJlY29nbml6ZSBmb3IgRVVDLUtSLiAgQSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzc1xuICogICAgaXMgY3JlYXRlZCBhbmQga2VwdCBieSB0aGUgcHVibGljIENoYXJzZXREZXRlY3RvciBjbGFzc1xuICovXG5tb2R1bGUuZXhwb3J0cy5ldWNfa3IgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5uYW1lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICdFVUMtS1InO1xuICB9O1xuICB0aGlzLmxhbmd1YWdlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICdrbyc7XG4gIH07XG5cbiAgLy8gVE9ETzogIFRoaXMgc2V0IG9mIGRhdGEgY29tZXMgZnJvbSB0aGUgY2hhcmFjdGVyIGZyZXF1ZW5jeS1cbiAgLy8gICAgICAgIG9mLW9jY3VyZW5jZSBhbmFseXNpcyB0b29sLiAgVGhlIGRhdGEgbmVlZHMgdG8gYmUgbW92ZWRcbiAgLy8gICAgICAgIGludG8gYSByZXNvdXJjZSBhbmQgbG9hZGVkIGZyb20gdGhlcmUuXG4gIHRoaXMuY29tbW9uQ2hhcnMgPSBbXG4gICAgMHhiMGExLCAweGIwYjMsIDB4YjBjNSwgMHhiMGNkLCAweGIwZDQsIDB4YjBlNiwgMHhiMGVkLCAweGIwZjgsIDB4YjBmYSwgMHhiMGZjLFxuICAgIDB4YjFiOCwgMHhiMWI5LCAweGIxYzcsIDB4YjFkNywgMHhiMWUyLCAweGIzYWEsIDB4YjNiYiwgMHhiNGMyLCAweGI0Y2YsIDB4YjRkOSxcbiAgICAweGI0ZWIsIDB4YjVhNSwgMHhiNWI1LCAweGI1YmYsIDB4YjVjNywgMHhiNWU5LCAweGI2ZjMsIDB4YjdhZiwgMHhiN2MyLCAweGI3Y2UsXG4gICAgMHhiOGE2LCAweGI4YWUsIDB4YjhiNiwgMHhiOGI4LCAweGI4YmIsIDB4YjhlOSwgMHhiOWFiLCAweGI5YWUsIDB4YjljYywgMHhiOWNlLFxuICAgIDB4YjlmZCwgMHhiYWI4LCAweGJhY2UsIDB4YmFkMCwgMHhiYWYxLCAweGJiZTcsIDB4YmJmMywgMHhiYmZkLCAweGJjYWQsIDB4YmNiYSxcbiAgICAweGJjZDIsIDB4YmNmNiwgMHhiZGJhLCAweGJkYzAsIDB4YmRjMywgMHhiZGM1LCAweGJlYzYsIDB4YmVjOCwgMHhiZWRmLCAweGJlZWUsXG4gICAgMHhiZWY4LCAweGJlZmEsIDB4YmZhMSwgMHhiZmE5LCAweGJmYzAsIDB4YmZlNCwgMHhiZmViLCAweGJmZWMsIDB4YmZmOCwgMHhjMGE3LFxuICAgIDB4YzBhZiwgMHhjMGI4LCAweGMwYmEsIDB4YzBiYiwgMHhjMGJkLCAweGMwYzcsIDB4YzBjYywgMHhjMGNlLCAweGMwY2YsIDB4YzBkNixcbiAgICAweGMwZGEsIDB4YzBlNSwgMHhjMGZiLCAweGMwZmMsIDB4YzFhNCwgMHhjMWE2LCAweGMxYjYsIDB4YzFkNiwgMHhjMWRmLCAweGMxZjYsXG4gICAgMHhjMWY4LCAweGM0YTEsIDB4YzVjZCwgMHhjNmFlLCAweGM3Y2YsIDB4YzdkMSwgMHhjN2QyLCAweGM3ZDgsIDB4YzdlNSwgMHhjOGFkXG4gIF07XG5cbiAgdGhpcy5uZXh0Q2hhciA9IGV1Y05leHRDaGFyO1xufTtcbnV0aWwuaW5oZXJpdHMobW9kdWxlLmV4cG9ydHMuZXVjX2tyLCBtYmNzKTtcblxuXG5cbi8qKlxuICogICBHQi0xODAzMCByZWNvZ25pemVyLiBVc2VzIHNpbXBsaWZpZWQgQ2hpbmVzZSBzdGF0aXN0aWNzLlxuICovXG5tb2R1bGUuZXhwb3J0cy5nYl8xODAzMCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLm5hbWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ0dCMTgwMzAnO1xuICB9O1xuICB0aGlzLmxhbmd1YWdlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICd6aCc7XG4gIH07XG5cbiAgLypcbiAgICogIEdldCB0aGUgbmV4dCBjaGFyYWN0ZXIgdmFsdWUgZm9yIEVVQyBiYXNlZCBlbmNvZGluZ3MuXG4gICAqICBDaGFyYWN0ZXIgJ3ZhbHVlJyBpcyBzaW1wbHkgdGhlIHJhdyBieXRlcyB0aGF0IG1ha2UgdXAgdGhlIGNoYXJhY3RlclxuICAgKiAgICAgcGFja2VkIGludG8gYW4gaW50LlxuICAgKi9cbiAgdGhpcy5uZXh0Q2hhciA9IGZ1bmN0aW9uKGl0ZXIsIGRldCkge1xuICAgIGl0ZXIuaW5kZXggPSBpdGVyLm5leHRJbmRleDtcbiAgICBpdGVyLmVycm9yID0gZmFsc2U7XG4gICAgdmFyIGZpcnN0Qnl0ZSAgPSAwO1xuICAgIHZhciBzZWNvbmRCeXRlID0gMDtcbiAgICB2YXIgdGhpcmRCeXRlICA9IDA7XG4gICAgdmFyIGZvdXJ0aEJ5dGUgPSAwO1xuICAgIGJ1aWxkQ2hhcjoge1xuICAgICAgZmlyc3RCeXRlID0gaXRlci5jaGFyVmFsdWUgPSBpdGVyLm5leHRCeXRlKGRldCk7XG4gICAgICBpZiAoZmlyc3RCeXRlIDwgMCkge1xuICAgICAgICAvLyBSYW4gb2ZmIHRoZSBlbmQgb2YgdGhlIGlucHV0IGRhdGFcbiAgICAgICAgaXRlci5kb25lID0gdHJ1ZTtcbiAgICAgICAgYnJlYWsgYnVpbGRDaGFyO1xuICAgICAgfVxuICAgICAgaWYgKGZpcnN0Qnl0ZSA8PSAweDgwKSB7XG4gICAgICAgIC8vIHNpbmdsZSBieXRlIGNoYXJcbiAgICAgICAgYnJlYWsgYnVpbGRDaGFyO1xuICAgICAgfVxuICAgICAgc2Vjb25kQnl0ZSA9IGl0ZXIubmV4dEJ5dGUoZGV0KTtcbiAgICAgIGl0ZXIuY2hhclZhbHVlID0gKGl0ZXIuY2hhclZhbHVlIDw8IDgpIHwgc2Vjb25kQnl0ZTtcbiAgICAgIGlmIChmaXJzdEJ5dGUgPj0gMHg4MSAmJiBmaXJzdEJ5dGUgPD0gMHhGRSkge1xuICAgICAgICAvLyBUd28gYnl0ZSBDaGFyXG4gICAgICAgIGlmICgoc2Vjb25kQnl0ZSA+PSAweDQwICYmIHNlY29uZEJ5dGUgPD0gMHg3RSkgfHwgKHNlY29uZEJ5dGUgPj04MCAmJiBzZWNvbmRCeXRlIDw9IDB4RkUpKSB7XG4gICAgICAgICAgYnJlYWsgYnVpbGRDaGFyO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZvdXIgYnl0ZSBjaGFyXG4gICAgICAgIGlmIChzZWNvbmRCeXRlID49IDB4MzAgJiYgc2Vjb25kQnl0ZSA8PSAweDM5KSB7XG4gICAgICAgICAgdGhpcmRCeXRlID0gaXRlci5uZXh0Qnl0ZShkZXQpO1xuICAgICAgICAgIGlmICh0aGlyZEJ5dGUgPj0gMHg4MSAmJiB0aGlyZEJ5dGUgPD0gMHhGRSkge1xuICAgICAgICAgICAgZm91cnRoQnl0ZSA9IGl0ZXIubmV4dEJ5dGUoZGV0KTtcbiAgICAgICAgICAgIGlmIChmb3VydGhCeXRlID49IDB4MzAgJiYgZm91cnRoQnl0ZSA8PSAweDM5KSB7XG4gICAgICAgICAgICAgIGl0ZXIuY2hhclZhbHVlID0gKGl0ZXIuY2hhclZhbHVlIDw8IDE2KSB8ICh0aGlyZEJ5dGUgPDwgOCkgfCBmb3VydGhCeXRlO1xuICAgICAgICAgICAgICBicmVhayBidWlsZENoYXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGl0ZXIuZXJyb3IgPSB0cnVlO1xuICAgICAgICBicmVhayBidWlsZENoYXI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpdGVyLmRvbmUgPT0gZmFsc2U7XG4gIH07XG5cbiAgLy8gVE9ETzogIFRoaXMgc2V0IG9mIGRhdGEgY29tZXMgZnJvbSB0aGUgY2hhcmFjdGVyIGZyZXF1ZW5jeS1cbiAgLy8gICAgICAgIG9mLW9jY3VyZW5jZSBhbmFseXNpcyB0b29sLiAgVGhlIGRhdGEgbmVlZHMgdG8gYmUgbW92ZWRcbiAgLy8gICAgICAgIGludG8gYSByZXNvdXJjZSBhbmQgbG9hZGVkIGZyb20gdGhlcmUuXG4gIHRoaXMuY29tbW9uQ2hhcnMgPSBbXG4gICAgMHhhMWExLCAweGExYTIsIDB4YTFhMywgMHhhMWE0LCAweGExYjAsIDB4YTFiMSwgMHhhMWYxLCAweGExZjMsIDB4YTNhMSwgMHhhM2FjLFxuICAgIDB4YTNiYSwgMHhiMWE4LCAweGIxYjgsIDB4YjFiZSwgMHhiMmJiLCAweGIzYzksIDB4YjNmNiwgMHhiNGYzLCAweGI1YmQsIDB4YjVjNCxcbiAgICAweGI1ZTMsIDB4YjZhZiwgMHhiNmQ0LCAweGI2ZTAsIDB4YjdhMiwgMHhiN2E4LCAweGI3YmQsIDB4YjdkNiwgMHhiN2RkLCAweGI4YjQsXG4gICAgMHhiOGRmLCAweGI4ZjYsIDB4YjlhYiwgMHhiOWM5LCAweGI5ZDgsIDB4YjlmYSwgMHhiOWZkLCAweGJhY2QsIDB4YmJhNywgMHhiYmQ2LFxuICAgIDB4YmJlMSwgMHhiYmZhLCAweGJjYmMsIDB4YmNkYiwgMHhiY2ZlLCAweGJkY2MsIDB4YmVjZCwgMHhiZWRkLCAweGJmYjQsIDB4YmZjNixcbiAgICAweGJmYzksIDB4YzBiNCwgMHhjMGVkLCAweGMxY2IsIDB4YzJkYiwgMHhjM2M3LCAweGM0ZGMsIDB4YzRlYSwgMHhjNWNjLCAweGM2ZjcsXG4gICAgMHhjN2Y4LCAweGM4YWIsIDB4YzhjYiwgMHhjOGQ1LCAweGM4ZTcsIDB4YzljZiwgMHhjOWZhLCAweGNhYjEsIDB4Y2FiNSwgMHhjYWM3LFxuICAgIDB4Y2FkMCwgMHhjYWQ2LCAweGNhZjUsIDB4Y2FmZCwgMHhjY2VjLCAweGNkZjgsIDB4Y2VhYSwgMHhjZWM0LCAweGNlZDIsIDB4Y2VlNSxcbiAgICAweGNmYjUsIDB4Y2ZjMiwgMHhjZmQ2LCAweGQwYzIsIDB4ZDBjNSwgMHhkMGQwLCAweGQwZDQsIDB4ZDFhNywgMHhkMmFhLCAweGQyYjIsXG4gICAgMHhkMmI1LCAweGQyYmIsIDB4ZDJkNCwgMHhkM2MzLCAweGQzZDAsIDB4ZDNmZCwgMHhkNGMyLCAweGQ0ZGEsIDB4ZDVlMiwgMHhkNmQwXG4gIF07XG59O1xudXRpbC5pbmhlcml0cyhtb2R1bGUuZXhwb3J0cy5nYl8xODAzMCwgbWJjcyk7XG4iLCJ2YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKSxcbiAgTWF0Y2ggPSByZXF1aXJlICgnLi4vbWF0Y2gnKTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIHJlY29nbml6ZXMgc2luZ2xlLWJ5dGUgZW5jb2RpbmdzLiBCZWNhdXNlIHRoZSBlbmNvZGluZyBzY2hlbWUgaXMgc29cbiAqIHNpbXBsZSwgbGFuZ3VhZ2Ugc3RhdGlzdGljcyBhcmUgdXNlZCB0byBkbyB0aGUgbWF0Y2hpbmcuXG4gKi9cblxuZnVuY3Rpb24gTkdyYW1QYXJzZXIodGhlTmdyYW1MaXN0LCB0aGVCeXRlTWFwKSB7XG4gIHZhciBOX0dSQU1fTUFTSyA9IDB4RkZGRkZGO1xuXG4gIHRoaXMuYnl0ZUluZGV4ID0gMDtcbiAgdGhpcy5uZ3JhbSA9IDA7XG5cbiAgdGhpcy5uZ3JhbUxpc3QgPSB0aGVOZ3JhbUxpc3Q7XG4gIHRoaXMuYnl0ZU1hcCA9IHRoZUJ5dGVNYXA7XG5cbiAgdGhpcy5uZ3JhbUNvdW50ID0gMDtcbiAgdGhpcy5oaXRDb3VudCA9IDA7XG5cbiAgdGhpcy5zcGFjZUNoYXI7XG5cbiAgLypcbiAgICogQmluYXJ5IHNlYXJjaCBmb3IgdmFsdWUgaW4gdGFibGUsIHdoaWNoIG11c3QgaGF2ZSBleGFjdGx5IDY0IGVudHJpZXMuXG4gICAqL1xuICB0aGlzLnNlYXJjaCA9IGZ1bmN0aW9uKHRhYmxlLCB2YWx1ZSkge1xuICAgIHZhciBpbmRleCA9IDA7XG5cbiAgICBpZiAodGFibGVbaW5kZXggKyAzMl0gPD0gdmFsdWUpIGluZGV4ICs9IDMyO1xuICAgIGlmICh0YWJsZVtpbmRleCArIDE2XSA8PSB2YWx1ZSkgaW5kZXggKz0gMTY7XG4gICAgaWYgKHRhYmxlW2luZGV4ICsgOF0gIDw9IHZhbHVlKSBpbmRleCArPSA4O1xuICAgIGlmICh0YWJsZVtpbmRleCArIDRdICA8PSB2YWx1ZSkgaW5kZXggKz0gNDtcbiAgICBpZiAodGFibGVbaW5kZXggKyAyXSAgPD0gdmFsdWUpIGluZGV4ICs9IDI7XG4gICAgaWYgKHRhYmxlW2luZGV4ICsgMV0gIDw9IHZhbHVlKSBpbmRleCArPSAxO1xuICAgIGlmICh0YWJsZVtpbmRleF0gICAgICA+IHZhbHVlKSAgaW5kZXggLT0gMTtcblxuICAgIGlmIChpbmRleCA8IDAgfHwgdGFibGVbaW5kZXhdICE9IHZhbHVlKVxuICAgICAgcmV0dXJuIC0xO1xuXG4gICAgcmV0dXJuIGluZGV4O1xuICB9O1xuXG4gIHRoaXMubG9va3VwID0gZnVuY3Rpb24odGhpc05ncmFtKSB7XG4gICAgdGhpcy5uZ3JhbUNvdW50ICs9IDE7XG4gICAgaWYgKHRoaXMuc2VhcmNoKHRoaXMubmdyYW1MaXN0LCB0aGlzTmdyYW0pID49IDApIHtcbiAgICAgIHRoaXMuaGl0Q291bnQgKz0gMTtcbiAgICB9XG4gIH07XG5cbiAgdGhpcy5hZGRCeXRlID0gZnVuY3Rpb24oYikge1xuICAgIHRoaXMubmdyYW0gPSAoKHRoaXMubmdyYW0gPDwgOCkgKyAoYiAmIDB4RkYpKSAmIE5fR1JBTV9NQVNLO1xuICAgIHRoaXMubG9va3VwKHRoaXMubmdyYW0pO1xuICB9XG5cbiAgdGhpcy5uZXh0Qnl0ZSA9IGZ1bmN0aW9uKGRldCkge1xuICAgIGlmICh0aGlzLmJ5dGVJbmRleCA+PSBkZXQuZklucHV0TGVuKVxuICAgICAgcmV0dXJuIC0xO1xuXG4gICAgcmV0dXJuIGRldC5mSW5wdXRCeXRlc1t0aGlzLmJ5dGVJbmRleCsrXSAmIDB4RkY7XG4gIH1cblxuICB0aGlzLnBhcnNlID0gZnVuY3Rpb24oZGV0LCBzcGFjZUNoKSB7XG4gICAgdmFyIGIsIGlnbm9yZVNwYWNlID0gZmFsc2U7XG4gICAgdGhpcy5zcGFjZUNoYXIgPSBzcGFjZUNoO1xuXG4gICAgd2hpbGUgKChiID0gdGhpcy5uZXh0Qnl0ZShkZXQpKSA+PSAwKSB7XG4gICAgICB2YXIgbWIgPSB0aGlzLmJ5dGVNYXBbYl07XG5cbiAgICAgIC8vIFRPRE86IDB4MjAgbWlnaHQgbm90IGJlIGEgc3BhY2UgaW4gYWxsIGNoYXJhY3RlciBzZXRzLi4uXG4gICAgICBpZiAobWIgIT0gMCkge1xuICAgICAgICBpZiAoIShtYiA9PSB0aGlzLnNwYWNlQ2hhciAmJiBpZ25vcmVTcGFjZSkpIHtcbiAgICAgICAgICB0aGlzLmFkZEJ5dGUobWIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWdub3JlU3BhY2UgPSAobWIgPT0gdGhpcy5zcGFjZUNoYXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IElzIHRoaXMgT0s/IFRoZSBidWZmZXIgY291bGQgaGF2ZSBlbmRlZCBpbiB0aGUgbWlkZGxlIG9mIGEgd29yZC4uLlxuICAgIHRoaXMuYWRkQnl0ZSh0aGlzLnNwYWNlQ2hhcik7XG5cbiAgICB2YXIgcmF3UGVyY2VudCA9IHRoaXMuaGl0Q291bnQgLyB0aGlzLm5ncmFtQ291bnQ7XG5cbiAgICAvLyBUT0RPIC0gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2sgdG8gdGFrZSBjYXJlIG9mIGEgY2FzZVxuICAgIC8vIHdlcmUgd2Ugd2VyZSBnZXR0aW5nIGEgY29uZmlkZW5jZSBvZiAxMzUuLi5cbiAgICBpZiAocmF3UGVyY2VudCA+IDAuMzMpXG4gICAgICByZXR1cm4gOTg7XG5cbiAgICByZXR1cm4gTWF0aC5mbG9vcihyYXdQZXJjZW50ICogMzAwLjApO1xuICB9O1xufTtcblxuZnVuY3Rpb24gTkdyYW1zUGx1c0xhbmcobGEsIG5nKSB7XG4gIHRoaXMuZkxhbmcgPSBsYTtcbiAgdGhpcy5mTkdyYW1zID0gbmc7XG59O1xuXG5mdW5jdGlvbiBzYmNzKCkge307XG5zYmNzLnByb3RvdHlwZS5zcGFjZUNoYXIgPSAweDIwO1xuc2Jjcy5wcm90b3R5cGUubmdyYW1zID0gZnVuY3Rpb24oKSB7fTtcbnNiY3MucHJvdG90eXBlLmJ5dGVNYXAgPSBmdW5jdGlvbigpIHt9O1xuc2Jjcy5wcm90b3R5cGUubWF0Y2ggPSBmdW5jdGlvbihkZXQpIHtcblxuICB2YXIgbmdyYW1zID0gdGhpcy5uZ3JhbXMoKTtcbiAgdmFyIG11bHRpcGxlID0gKEFycmF5LmlzQXJyYXkobmdyYW1zKSAmJiBuZ3JhbXNbMF0gaW5zdGFuY2VvZiBOR3JhbXNQbHVzTGFuZyk7XG5cbiAgaWYgKCFtdWx0aXBsZSkge1xuICAgIHZhciBwYXJzZXIgPSBuZXcgTkdyYW1QYXJzZXIobmdyYW1zLCB0aGlzLmJ5dGVNYXAoKSk7XG4gICAgdmFyIGNvbmZpZGVuY2UgPSBwYXJzZXIucGFyc2UoZGV0LCB0aGlzLnNwYWNlQ2hhcik7XG4gICAgcmV0dXJuIGNvbmZpZGVuY2UgPD0gMCA/IG51bGwgOiBuZXcgTWF0Y2goZGV0LCB0aGlzLCBjb25maWRlbmNlKTtcbiAgfVxuXG4gIHZhciBiZXN0Q29uZmlkZW5jZVNvRmFyID0gLTE7XG4gIHZhciBsYW5nID0gbnVsbDtcblxuICBmb3IgKHZhciBpID0gbmdyYW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIG5nbCA9IG5ncmFtc1tpXTtcblxuICAgIHZhciBwYXJzZXIgPSBuZXcgTkdyYW1QYXJzZXIobmdsLmZOR3JhbXMsIHRoaXMuYnl0ZU1hcCgpKTtcbiAgICB2YXIgY29uZmlkZW5jZSA9IHBhcnNlci5wYXJzZShkZXQsIHRoaXMuc3BhY2VDaGFyKTtcbiAgICBpZiAoY29uZmlkZW5jZSA+IGJlc3RDb25maWRlbmNlU29GYXIpIHtcbiAgICAgIGJlc3RDb25maWRlbmNlU29GYXIgPSBjb25maWRlbmNlO1xuICAgICAgbGFuZyA9IG5nbC5mTGFuZztcbiAgICB9XG4gIH1cblxuICB2YXIgbmFtZSA9IHRoaXMubmFtZShkZXQpO1xuICByZXR1cm4gYmVzdENvbmZpZGVuY2VTb0ZhciA8PSAwID8gbnVsbCA6IG5ldyBNYXRjaChkZXQsIHRoaXMsIGJlc3RDb25maWRlbmNlU29GYXIsIG5hbWUsIGxhbmcpO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cy5JU09fODg1OV8xID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuYnl0ZU1hcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBbXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgwMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsXG4gICAgICAweDY4LCAweDY5LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLFxuICAgICAgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NyxcbiAgICAgIDB4NzgsIDB4NzksIDB4N0EsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LFxuICAgICAgMHg2OCwgMHg2OSwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwgMHg2RixcbiAgICAgIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsXG4gICAgICAweDc4LCAweDc5LCAweDdBLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweEFBLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHhCNSwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4QkEsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweEUwLCAweEUxLCAweEUyLCAweEUzLCAweEU0LCAweEU1LCAweEU2LCAweEU3LFxuICAgICAgMHhFOCwgMHhFOSwgMHhFQSwgMHhFQiwgMHhFQywgMHhFRCwgMHhFRSwgMHhFRixcbiAgICAgIDB4RjAsIDB4RjEsIDB4RjIsIDB4RjMsIDB4RjQsIDB4RjUsIDB4RjYsIDB4MjAsXG4gICAgICAweEY4LCAweEY5LCAweEZBLCAweEZCLCAweEZDLCAweEZELCAweEZFLCAweERGLFxuICAgICAgMHhFMCwgMHhFMSwgMHhFMiwgMHhFMywgMHhFNCwgMHhFNSwgMHhFNiwgMHhFNyxcbiAgICAgIDB4RTgsIDB4RTksIDB4RUEsIDB4RUIsIDB4RUMsIDB4RUQsIDB4RUUsIDB4RUYsXG4gICAgICAweEYwLCAweEYxLCAweEYyLCAweEYzLCAweEY0LCAweEY1LCAweEY2LCAweDIwLFxuICAgICAgMHhGOCwgMHhGOSwgMHhGQSwgMHhGQiwgMHhGQywgMHhGRCwgMHhGRSwgMHhGRlxuICAgIF07XG4gIH07XG5cbiAgdGhpcy5uZ3JhbXMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gW1xuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdkYScsIFtcbiAgICAgICAgMHgyMDYxNjYsIDB4MjA2MTc0LCAweDIwNjQ2NSwgMHgyMDY1NkUsIDB4MjA2NTcyLCAweDIwNjY2RiwgMHgyMDY4NjEsIDB4MjA2OTIwLFxuICAgICAgICAweDIwNkQ2NSwgMHgyMDZGNjcsIDB4MjA3MEU1LCAweDIwNzM2OSwgMHgyMDczNzQsIDB4MjA3NDY5LCAweDIwNzY2OSwgMHg2MTY2MjAsXG4gICAgICAgIDB4NjE2RTIwLCAweDYxNkU2NCwgMHg2MTcyMjAsIDB4NjE3NDIwLCAweDY0NjUyMCwgMHg2NDY1NkUsIDB4NjQ2NTcyLCAweDY0NjU3NCxcbiAgICAgICAgMHg2NTIwNzMsIDB4NjU2NDIwLCAweDY1NjQ2NSwgMHg2NTZFMjAsIDB4NjU2RTY0LCAweDY1NzIyMCwgMHg2NTcyNjUsIDB4NjU3MzIwLFxuICAgICAgICAweDY1NzQyMCwgMHg2NjZGNzIsIDB4Njc2NTIwLCAweDY3NjU2RSwgMHg2NzY1NzIsIDB4Njk2NzY1LCAweDY5NkMyMCwgMHg2OTZFNjcsXG4gICAgICAgIDB4NkI2NTIwLCAweDZCNkI2NSwgMHg2QzY1NzIsIDB4NkM2OTY3LCAweDZDNkM2NSwgMHg2RDY1NjQsIDB4NkU2NDY1LCAweDZFNjUyMCxcbiAgICAgICAgMHg2RTY3MjAsIDB4NkU2NzY1LCAweDZGNjcyMCwgMHg2RjZEMjAsIDB4NkY3MjIwLCAweDcwRTUyMCwgMHg3MjIwNjQsIDB4NzIyMDY1LFxuICAgICAgICAweDcyMjA3MywgMHg3MjY1MjAsIDB4NzM3NDY1LCAweDc0MjA3MywgMHg3NDY1MjAsIDB4NzQ2NTcyLCAweDc0Njk2QywgMHg3NjY1NzJcbiAgICAgIF0pLFxuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdkZScsIFtcbiAgICAgICAgMHgyMDYxNkUsIDB4MjA2MTc1LCAweDIwNjI2NSwgMHgyMDY0NjEsIDB4MjA2NDY1LCAweDIwNjQ2OSwgMHgyMDY1NjksIDB4MjA2NzY1LFxuICAgICAgICAweDIwNjg2MSwgMHgyMDY5NkUsIDB4MjA2RDY5LCAweDIwNzM2MywgMHgyMDczNjUsIDB4MjA3NTZFLCAweDIwNzY2NSwgMHgyMDc2NkYsXG4gICAgICAgIDB4MjA3NzY1LCAweDIwN0E3NSwgMHg2MjY1NzIsIDB4NjM2ODIwLCAweDYzNjg2NSwgMHg2MzY4NzQsIDB4NjQ2MTczLCAweDY0NjU2RSxcbiAgICAgICAgMHg2NDY1NzIsIDB4NjQ2OTY1LCAweDY1MjA2NCwgMHg2NTIwNzMsIDB4NjU2OTZFLCAweDY1Njk3NCwgMHg2NTZFMjAsIDB4NjU3MjIwLFxuICAgICAgICAweDY1NzMyMCwgMHg2NzY1NkUsIDB4Njg2NTZFLCAweDY4NzQyMCwgMHg2OTYzNjgsIDB4Njk2NTIwLCAweDY5NkUyMCwgMHg2OTZFNjUsXG4gICAgICAgIDB4Njk3NDIwLCAweDZDNjk2MywgMHg2QzZDNjUsIDB4NkUyMDYxLCAweDZFMjA2NCwgMHg2RTIwNzMsIDB4NkU2NDIwLCAweDZFNjQ2NSxcbiAgICAgICAgMHg2RTY1MjAsIDB4NkU2NzIwLCAweDZFNjc2NSwgMHg2RTc0NjUsIDB4NzIyMDY0LCAweDcyNjQ2NSwgMHg3MjY1NjksIDB4NzM2MzY4LFxuICAgICAgICAweDczNzQ2NSwgMHg3NDIwNjQsIDB4NzQ2NTIwLCAweDc0NjU2RSwgMHg3NDY1NzIsIDB4NzU2RTY0LCAweDc1NkU2NywgMHg3NjY1NzJcbiAgICAgIF0pLFxuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdlbicsIFtcbiAgICAgICAgMHgyMDYxMjAsIDB4MjA2MTZFLCAweDIwNjI2NSwgMHgyMDYzNkYsIDB4MjA2NjZGLCAweDIwNjg2MSwgMHgyMDY4NjUsIDB4MjA2OTZFLFxuICAgICAgICAweDIwNkQ2MSwgMHgyMDZGNjYsIDB4MjA3MDcyLCAweDIwNzI2NSwgMHgyMDczNjEsIDB4MjA3Mzc0LCAweDIwNzQ2OCwgMHgyMDc0NkYsXG4gICAgICAgIDB4MjA3NzY4LCAweDYxNjk2NCwgMHg2MTZDMjAsIDB4NjE2RTIwLCAweDYxNkU2NCwgMHg2MTczMjAsIDB4NjE3NDIwLCAweDYxNzQ2NSxcbiAgICAgICAgMHg2MTc0NjksIDB4NjQyMDYxLCAweDY0MjA3NCwgMHg2NTIwNjEsIDB4NjUyMDczLCAweDY1MjA3NCwgMHg2NTY0MjAsIDB4NjU2RTc0LFxuICAgICAgICAweDY1NzIyMCwgMHg2NTczMjAsIDB4NjY2RjcyLCAweDY4NjE3NCwgMHg2ODY1MjAsIDB4Njg2NTcyLCAweDY5NjQyMCwgMHg2OTZFMjAsXG4gICAgICAgIDB4Njk2RTY3LCAweDY5NkY2RSwgMHg2OTczMjAsIDB4NkUyMDYxLCAweDZFMjA3NCwgMHg2RTY0MjAsIDB4NkU2NzIwLCAweDZFNzQyMCxcbiAgICAgICAgMHg2RjY2MjAsIDB4NkY2RTIwLCAweDZGNzIyMCwgMHg3MjY1MjAsIDB4NzI3MzIwLCAweDczMjA2MSwgMHg3MzIwNzQsIDB4NzM2MTY5LFxuICAgICAgICAweDczNzQyMCwgMHg3NDIwNzQsIDB4NzQ2NTcyLCAweDc0Njg2MSwgMHg3NDY4NjUsIDB4NzQ2OTZGLCAweDc0NkYyMCwgMHg3NDczMjBcbiAgICAgIF0pLFxuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdlcycsIFtcbiAgICAgICAgMHgyMDYxMjAsIDB4MjA2MzYxLCAweDIwNjM2RiwgMHgyMDY0NjUsIDB4MjA2NTZDLCAweDIwNjU2RSwgMHgyMDY1NzMsIDB4MjA2OTZFLFxuICAgICAgICAweDIwNkM2MSwgMHgyMDZDNkYsIDB4MjA3MDYxLCAweDIwNzA2RiwgMHgyMDcwNzIsIDB4MjA3MTc1LCAweDIwNzI2NSwgMHgyMDczNjUsXG4gICAgICAgIDB4MjA3NTZFLCAweDIwNzkyMCwgMHg2MTIwNjMsIDB4NjEyMDY0LCAweDYxMjA2NSwgMHg2MTIwNkMsIDB4NjEyMDcwLCAweDYxNjM2OSxcbiAgICAgICAgMHg2MTY0NkYsIDB4NjE2QzIwLCAweDYxNzIyMCwgMHg2MTczMjAsIDB4NjM2OUYzLCAweDYzNkY2RSwgMHg2NDY1MjAsIDB4NjQ2NTZDLFxuICAgICAgICAweDY0NkYyMCwgMHg2NTIwNjQsIDB4NjUyMDY1LCAweDY1MjA2QywgMHg2NTZDMjAsIDB4NjU2RTIwLCAweDY1NkU3NCwgMHg2NTczMjAsXG4gICAgICAgIDB4NjU3Mzc0LCAweDY5NjU2RSwgMHg2OUYzNkUsIDB4NkM2MTIwLCAweDZDNkY3MywgMHg2RTIwNjUsIDB4NkU3NDY1LCAweDZGMjA2NCxcbiAgICAgICAgMHg2RjIwNjUsIDB4NkY2RTIwLCAweDZGNzIyMCwgMHg2RjczMjAsIDB4NzA2MTcyLCAweDcxNzU2NSwgMHg3MjYxMjAsIDB4NzI2NTczLFxuICAgICAgICAweDczMjA2NCwgMHg3MzIwNjUsIDB4NzMyMDcwLCAweDczNjUyMCwgMHg3NDY1MjAsIDB4NzQ2RjIwLCAweDc1NjUyMCwgMHhGMzZFMjBcbiAgICAgIF0pLFxuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdmcicsIFtcbiAgICAgICAgMHgyMDYxNzUsIDB4MjA2MzZGLCAweDIwNjQ2MSwgMHgyMDY0NjUsIDB4MjA2NDc1LCAweDIwNjU2RSwgMHgyMDY1NzQsIDB4MjA2QzYxLFxuICAgICAgICAweDIwNkM2NSwgMHgyMDcwNjEsIDB4MjA3MDZGLCAweDIwNzA3MiwgMHgyMDcxNzUsIDB4MjA3MzY1LCAweDIwNzM2RiwgMHgyMDc1NkUsXG4gICAgICAgIDB4MjBFMDIwLCAweDYxNkU3NCwgMHg2MTc0NjksIDB4NjM2NTIwLCAweDYzNkY2RSwgMHg2NDY1MjAsIDB4NjQ2NTczLCAweDY0NzUyMCxcbiAgICAgICAgMHg2NTIwNjEsIDB4NjUyMDYzLCAweDY1MjA2NCwgMHg2NTIwNjUsIDB4NjUyMDZDLCAweDY1MjA3MCwgMHg2NTIwNzMsIDB4NjU2RTIwLFxuICAgICAgICAweDY1NkU3NCwgMHg2NTcyMjAsIDB4NjU3MzIwLCAweDY1NzQyMCwgMHg2NTc1NzIsIDB4Njk2RjZFLCAweDY5NzMyMCwgMHg2OTc0MjAsXG4gICAgICAgIDB4NkM2MTIwLCAweDZDNjUyMCwgMHg2QzY1NzMsIDB4NkQ2NTZFLCAweDZFMjA2NCwgMHg2RTY1MjAsIDB4NkU3MzIwLCAweDZFNzQyMCxcbiAgICAgICAgMHg2RjZFMjAsIDB4NkY2RTc0LCAweDZGNzU3MiwgMHg3MTc1NjUsIDB4NzIyMDZDLCAweDcyNjUyMCwgMHg3MzIwNjEsIDB4NzMyMDY0LFxuICAgICAgICAweDczMjA2NSwgMHg3MzIwNkMsIDB4NzMyMDcwLCAweDc0MjA2NCwgMHg3NDY1MjAsIDB4NzQ2OTZGLCAweDc1NjUyMCwgMHg3NTcyMjBcbiAgICAgIF0pLFxuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdpdCcsIFtcbiAgICAgICAgMHgyMDYxNkMsIDB4MjA2MzY4LCAweDIwNjM2RiwgMHgyMDY0NjUsIDB4MjA2NDY5LCAweDIwNjUyMCwgMHgyMDY5NkMsIDB4MjA2OTZFLFxuICAgICAgICAweDIwNkM2MSwgMHgyMDcwNjUsIDB4MjA3MDcyLCAweDIwNzU2RSwgMHg2MTIwNjMsIDB4NjEyMDY0LCAweDYxMjA3MCwgMHg2MTIwNzMsXG4gICAgICAgIDB4NjE3NDZGLCAweDYzNjg2NSwgMHg2MzZGNkUsIDB4NjQ2NTZDLCAweDY0NjkyMCwgMHg2NTIwNjEsIDB4NjUyMDYzLCAweDY1MjA2NCxcbiAgICAgICAgMHg2NTIwNjksIDB4NjUyMDZDLCAweDY1MjA3MCwgMHg2NTIwNzMsIDB4NjU2QzIwLCAweDY1NkM2QywgMHg2NTZFNzQsIDB4NjU3MjIwLFxuICAgICAgICAweDY4NjUyMCwgMHg2OTIwNjEsIDB4NjkyMDYzLCAweDY5MjA2NCwgMHg2OTIwNzMsIDB4Njk2MTIwLCAweDY5NkMyMCwgMHg2OTZFMjAsXG4gICAgICAgIDB4Njk2RjZFLCAweDZDNjEyMCwgMHg2QzY1MjAsIDB4NkM2OTIwLCAweDZDNkM2MSwgMHg2RTY1MjAsIDB4NkU2OTIwLCAweDZFNkYyMCxcbiAgICAgICAgMHg2RTc0NjUsIDB4NkYyMDYxLCAweDZGMjA2NCwgMHg2RjIwNjksIDB4NkYyMDczLCAweDZGNkUyMCwgMHg2RjZFNjUsIDB4NzA2NTcyLFxuICAgICAgICAweDcyNjEyMCwgMHg3MjY1MjAsIDB4NzM2OTIwLCAweDc0NjEyMCwgMHg3NDY1MjAsIDB4NzQ2OTIwLCAweDc0NkYyMCwgMHg3QTY5NkZcbiAgICAgIF0pLFxuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdubCcsIFtcbiAgICAgICAgMHgyMDYxNkMsIDB4MjA2MjY1LCAweDIwNjQ2MSwgMHgyMDY0NjUsIDB4MjA2NDY5LCAweDIwNjU2NSwgMHgyMDY1NkUsIDB4MjA2NzY1LFxuICAgICAgICAweDIwNjg2NSwgMHgyMDY5NkUsIDB4MjA2RDYxLCAweDIwNkQ2NSwgMHgyMDZGNzAsIDB4MjA3NDY1LCAweDIwNzY2MSwgMHgyMDc2NjUsXG4gICAgICAgIDB4MjA3NjZGLCAweDIwNzc2NSwgMHgyMDdBNjksIDB4NjE2MTZFLCAweDYxNjE3MiwgMHg2MTZFMjAsIDB4NjE2RTY0LCAweDYxNzIyMCxcbiAgICAgICAgMHg2MTc0MjAsIDB4NjM2ODc0LCAweDY0NjUyMCwgMHg2NDY1NkUsIDB4NjQ2NTcyLCAweDY1MjA2MiwgMHg2NTIwNzYsIDB4NjU2NTZFLFxuICAgICAgICAweDY1NjU3MiwgMHg2NTZFMjAsIDB4NjU3MjIwLCAweDY1NzI3MywgMHg2NTc0MjAsIDB4Njc2NTZFLCAweDY4NjU3NCwgMHg2OTY1MjAsXG4gICAgICAgIDB4Njk2RTIwLCAweDY5NkU2NywgMHg2OTczMjAsIDB4NkUyMDYyLCAweDZFMjA2NCwgMHg2RTIwNjUsIDB4NkUyMDY4LCAweDZFMjA2RixcbiAgICAgICAgMHg2RTIwNzYsIDB4NkU2NDY1LCAweDZFNjcyMCwgMHg2RjZFNjQsIDB4NkY2RjcyLCAweDZGNzAyMCwgMHg2RjcyMjAsIDB4NzM2MzY4LFxuICAgICAgICAweDczNzQ2NSwgMHg3NDIwNjQsIDB4NzQ2NTIwLCAweDc0NjU2RSwgMHg3NDY1NzIsIDB4NzY2MTZFLCAweDc2NjU3MiwgMHg3NjZGNkZcbiAgICAgIF0pLFxuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdubycsIFtcbiAgICAgICAgMHgyMDYxNzQsIDB4MjA2MTc2LCAweDIwNjQ2NSwgMHgyMDY1NkUsIDB4MjA2NTcyLCAweDIwNjY2RiwgMHgyMDY4NjEsIDB4MjA2OTIwLFxuICAgICAgICAweDIwNkQ2NSwgMHgyMDZGNjcsIDB4MjA3MEU1LCAweDIwNzM2NSwgMHgyMDczNkIsIDB4MjA3MzZGLCAweDIwNzM3NCwgMHgyMDc0NjksXG4gICAgICAgIDB4MjA3NjY5LCAweDIwRTUyMCwgMHg2MTZFNjQsIDB4NjE3MjIwLCAweDYxNzQyMCwgMHg2NDY1MjAsIDB4NjQ2NTZFLCAweDY0NjU3NCxcbiAgICAgICAgMHg2NTIwNzMsIDB4NjU2NDIwLCAweDY1NkUyMCwgMHg2NTZFNjUsIDB4NjU3MjIwLCAweDY1NzI2NSwgMHg2NTc0MjAsIDB4NjU3NDc0LFxuICAgICAgICAweDY2NkY3MiwgMHg2NzY1NkUsIDB4Njk2QjZCLCAweDY5NkMyMCwgMHg2OTZFNjcsIDB4NkI2NTIwLCAweDZCNkI2NSwgMHg2QzY1MjAsXG4gICAgICAgIDB4NkM2QzY1LCAweDZENjU2NCwgMHg2RDY1NkUsIDB4NkUyMDczLCAweDZFNjUyMCwgMHg2RTY3MjAsIDB4NkU2NzY1LCAweDZFNkU2NSxcbiAgICAgICAgMHg2RjY3MjAsIDB4NkY2RDIwLCAweDZGNzIyMCwgMHg3MEU1MjAsIDB4NzIyMDczLCAweDcyNjUyMCwgMHg3MzZGNkQsIDB4NzM3NDY1LFxuICAgICAgICAweDc0MjA3MywgMHg3NDY1MjAsIDB4NzQ2NTZFLCAweDc0NjU3MiwgMHg3NDY5NkMsIDB4NzQ3NDIwLCAweDc0NzQ2NSwgMHg3NjY1NzJcbiAgICAgIF0pLFxuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdwdCcsIFtcbiAgICAgICAgMHgyMDYxMjAsIDB4MjA2MzZGLCAweDIwNjQ2MSwgMHgyMDY0NjUsIDB4MjA2NDZGLCAweDIwNjUyMCwgMHgyMDY1NzMsIDB4MjA2RDYxLFxuICAgICAgICAweDIwNkU2RiwgMHgyMDZGMjAsIDB4MjA3MDYxLCAweDIwNzA2RiwgMHgyMDcwNzIsIDB4MjA3MTc1LCAweDIwNzI2NSwgMHgyMDczNjUsXG4gICAgICAgIDB4MjA3NTZELCAweDYxMjA2MSwgMHg2MTIwNjMsIDB4NjEyMDY0LCAweDYxMjA3MCwgMHg2MTY0NjUsIDB4NjE2NDZGLCAweDYxNkMyMCxcbiAgICAgICAgMHg2MTcyMjAsIDB4NjE3MjYxLCAweDYxNzMyMCwgMHg2MzZGNkQsIDB4NjM2RjZFLCAweDY0NjEyMCwgMHg2NDY1MjAsIDB4NjQ2RjIwLFxuICAgICAgICAweDY0NkY3MywgMHg2NTIwNjEsIDB4NjUyMDY0LCAweDY1NkQyMCwgMHg2NTZFNzQsIDB4NjU3MzIwLCAweDY1NzM3NCwgMHg2OTYxMjAsXG4gICAgICAgIDB4Njk2MzYxLCAweDZENjU2RSwgMHg2RTc0NjUsIDB4NkU3NDZGLCAweDZGMjA2MSwgMHg2RjIwNjMsIDB4NkYyMDY0LCAweDZGMjA2NSxcbiAgICAgICAgMHg2RjIwNzAsIDB4NkY3MzIwLCAweDcwNjE3MiwgMHg3MTc1NjUsIDB4NzI2MTIwLCAweDcyNjU3MywgMHg3MzIwNjEsIDB4NzMyMDY0LFxuICAgICAgICAweDczMjA2NSwgMHg3MzIwNzAsIDB4NzM3NDYxLCAweDc0NjUyMCwgMHg3NDZGMjAsIDB4NzU2NTIwLCAweEUzNkYyMCwgMHhFN0UzNkZcbiAgICAgIF0pLFxuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdzdicsIFtcbiAgICAgICAgMHgyMDYxNzQsIDB4MjA2MTc2LCAweDIwNjQ2NSwgMHgyMDY1NkUsIDB4MjA2NkY2LCAweDIwNjg2MSwgMHgyMDY5MjAsIDB4MjA2OTZFLFxuICAgICAgICAweDIwNkI2RiwgMHgyMDZENjUsIDB4MjA2RjYzLCAweDIwNzBFNSwgMHgyMDczNkIsIDB4MjA3MzZGLCAweDIwNzM3NCwgMHgyMDc0NjksXG4gICAgICAgIDB4MjA3NjYxLCAweDIwNzY2OSwgMHgyMEU0NzIsIDB4NjE2NDY1LCAweDYxNkUyMCwgMHg2MTZFNjQsIDB4NjE3MjIwLCAweDYxNzQ3NCxcbiAgICAgICAgMHg2MzY4MjAsIDB4NjQ2NTIwLCAweDY0NjU2RSwgMHg2NDY1NzIsIDB4NjQ2NTc0LCAweDY1NjQyMCwgMHg2NTZFMjAsIDB4NjU3MjIwLFxuICAgICAgICAweDY1NzQyMCwgMHg2NkY2NzIsIDB4Njc2NTZFLCAweDY5NkM2QywgMHg2OTZFNjcsIDB4NkI2MTIwLCAweDZDNkMyMCwgMHg2RDY1NjQsXG4gICAgICAgIDB4NkUyMDczLCAweDZFNjEyMCwgMHg2RTY0NjUsIDB4NkU2NzIwLCAweDZFNjc2NSwgMHg2RTY5NkUsIDB4NkY2MzY4LCAweDZGNkQyMCxcbiAgICAgICAgMHg2RjZFMjAsIDB4NzBFNTIwLCAweDcyMjA2MSwgMHg3MjIwNzMsIDB4NzI2MTIwLCAweDczNkI2MSwgMHg3MzZGNkQsIDB4NzQyMDczLFxuICAgICAgICAweDc0NjEyMCwgMHg3NDY1MjAsIDB4NzQ2NTcyLCAweDc0Njk2QywgMHg3NDc0MjAsIDB4NzY2MTcyLCAweEU0NzIyMCwgMHhGNjcyMjAsXG4gICAgICBdKVxuICAgIF07XG4gIH07XG5cbiAgdGhpcy5uYW1lID0gZnVuY3Rpb24oZGV0KSB7XG4gICAgcmV0dXJuIChkZXQgJiYgZGV0LmZDMUJ5dGVzKSA/ICd3aW5kb3dzLTEyNTInIDogJ0lTTy04ODU5LTEnO1xuICB9O1xufTtcbnV0aWwuaW5oZXJpdHMobW9kdWxlLmV4cG9ydHMuSVNPXzg4NTlfMSwgc2Jjcyk7XG5cblxubW9kdWxlLmV4cG9ydHMuSVNPXzg4NTlfMiA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmJ5dGVNYXAgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gW1xuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MDAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LFxuICAgICAgMHg2OCwgMHg2OSwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwgMHg2RixcbiAgICAgIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsXG4gICAgICAweDc4LCAweDc5LCAweDdBLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NyxcbiAgICAgIDB4NjgsIDB4NjksIDB4NkEsIDB4NkIsIDB4NkMsIDB4NkQsIDB4NkUsIDB4NkYsXG4gICAgICAweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LFxuICAgICAgMHg3OCwgMHg3OSwgMHg3QSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweEIxLCAweDIwLCAweEIzLCAweDIwLCAweEI1LCAweEI2LCAweDIwLFxuICAgICAgMHgyMCwgMHhCOSwgMHhCQSwgMHhCQiwgMHhCQywgMHgyMCwgMHhCRSwgMHhCRixcbiAgICAgIDB4MjAsIDB4QjEsIDB4MjAsIDB4QjMsIDB4MjAsIDB4QjUsIDB4QjYsIDB4QjcsXG4gICAgICAweDIwLCAweEI5LCAweEJBLCAweEJCLCAweEJDLCAweDIwLCAweEJFLCAweEJGLFxuICAgICAgMHhFMCwgMHhFMSwgMHhFMiwgMHhFMywgMHhFNCwgMHhFNSwgMHhFNiwgMHhFNyxcbiAgICAgIDB4RTgsIDB4RTksIDB4RUEsIDB4RUIsIDB4RUMsIDB4RUQsIDB4RUUsIDB4RUYsXG4gICAgICAweEYwLCAweEYxLCAweEYyLCAweEYzLCAweEY0LCAweEY1LCAweEY2LCAweDIwLFxuICAgICAgMHhGOCwgMHhGOSwgMHhGQSwgMHhGQiwgMHhGQywgMHhGRCwgMHhGRSwgMHhERixcbiAgICAgIDB4RTAsIDB4RTEsIDB4RTIsIDB4RTMsIDB4RTQsIDB4RTUsIDB4RTYsIDB4RTcsXG4gICAgICAweEU4LCAweEU5LCAweEVBLCAweEVCLCAweEVDLCAweEVELCAweEVFLCAweEVGLFxuICAgICAgMHhGMCwgMHhGMSwgMHhGMiwgMHhGMywgMHhGNCwgMHhGNSwgMHhGNiwgMHgyMCxcbiAgICAgIDB4RjgsIDB4RjksIDB4RkEsIDB4RkIsIDB4RkMsIDB4RkQsIDB4RkUsIDB4MjBcbiAgICBdO1xuICB9XG5cbiAgdGhpcy5uZ3JhbXMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gW1xuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdjcycsIFtcbiAgICAgICAgMHgyMDYxMjAsIDB4MjA2Mjc5LCAweDIwNjQ2RiwgMHgyMDZBNjUsIDB4MjA2RTYxLCAweDIwNkU2NSwgMHgyMDZGMjAsIDB4MjA2RjY0LFxuICAgICAgICAweDIwNzA2RiwgMHgyMDcwNzIsIDB4MjA3MEY4LCAweDIwNzI2RiwgMHgyMDczNjUsIDB4MjA3MzZGLCAweDIwNzM3NCwgMHgyMDc0NkYsXG4gICAgICAgIDB4MjA3NjIwLCAweDIwNzY3OSwgMHgyMDdBNjEsIDB4NjEyMDcwLCAweDYzNjUyMCwgMHg2MzY4MjAsIDB4NjUyMDcwLCAweDY1MjA3MyxcbiAgICAgICAgMHg2NTIwNzYsIDB4NjU2RDIwLCAweDY1NkVFRCwgMHg2ODZGMjAsIDB4Njg2RjY0LCAweDY5NzM3NCwgMHg2QTY1MjAsIDB4NkI3NDY1LFxuICAgICAgICAweDZDNjUyMCwgMHg2QzY5MjAsIDB4NkU2MTIwLCAweDZFRTkyMCwgMHg2RUVDMjAsIDB4NkVFRDIwLCAweDZGMjA3MCwgMHg2RjY0NkUsXG4gICAgICAgIDB4NkY2QTY5LCAweDZGNzM3NCwgMHg2Rjc1MjAsIDB4NkY3NjYxLCAweDcwNkY2NCwgMHg3MDZGNkEsIDB4NzA3MjZGLCAweDcwRjg2NSxcbiAgICAgICAgMHg3MzY1MjAsIDB4NzM2Rjc1LCAweDczNzQ2MSwgMHg3Mzc0NjksIDB4NzM3NDZFLCAweDc0NjU3MiwgMHg3NDZFRUQsIDB4NzQ2RjIwLFxuICAgICAgICAweDc1MjA3MCwgMHhCRTY1MjAsIDB4RTE2RUVELCAweEU5Njg2RiwgMHhFRDIwNzAsIDB4RUQyMDczLCAweEVENkQyMCwgMHhGODY1NjQsXG4gICAgICBdKSxcbiAgICAgIG5ldyBOR3JhbXNQbHVzTGFuZygnaHUnLCBbXG4gICAgICAgIDB4MjA2MTIwLCAweDIwNjE3QSwgMHgyMDYyNjUsIDB4MjA2NTY3LCAweDIwNjU2QywgMHgyMDY2NjUsIDB4MjA2ODYxLCAweDIwNjg2RixcbiAgICAgICAgMHgyMDY5NzMsIDB4MjA2QjY1LCAweDIwNkI2OSwgMHgyMDZCRjYsIDB4MjA2QzY1LCAweDIwNkQ2MSwgMHgyMDZENjUsIDB4MjA2RDY5LFxuICAgICAgICAweDIwNkU2NSwgMHgyMDczN0EsIDB4MjA3NDY1LCAweDIwRTk3MywgMHg2MTIwNjEsIDB4NjEyMDZCLCAweDYxMjA2RCwgMHg2MTIwNzMsXG4gICAgICAgIDB4NjE2QjIwLCAweDYxNkUyMCwgMHg2MTdBMjAsIDB4NjI2MTZFLCAweDYyNjU2RSwgMHg2NTY3NzksIDB4NjU2QjIwLCAweDY1NkMyMCxcbiAgICAgICAgMHg2NTZDNjUsIDB4NjU2RDIwLCAweDY1NkUyMCwgMHg2NTcyNjUsIDB4NjU3NDIwLCAweDY1NzQ2NSwgMHg2NTc0NzQsIDB4Njc3OTIwLFxuICAgICAgICAweDY4NkY2NywgMHg2OTZFNzQsIDB4Njk3MzIwLCAweDZCMjA2MSwgMHg2QkY2N0EsIDB4NkQ2NTY3LCAweDZENjk2RSwgMHg2RTIwNjEsXG4gICAgICAgIDB4NkU2MTZCLCAweDZFNjU2QiwgMHg2RTY1NkQsIDB4NkU3NDIwLCAweDZGNjc3OSwgMHg3MzIwNjEsIDB4NzM3QTY1LCAweDczN0E3NCxcbiAgICAgICAgMHg3MzdBRTEsIDB4NzNFOTY3LCAweDc0MjA2MSwgMHg3NDc0MjAsIDB4NzRFMTczLCAweDdBNjU3MiwgMHhFMTZFMjAsIDB4RTk3MzIwLFxuICAgICAgXSksXG4gICAgICBuZXcgTkdyYW1zUGx1c0xhbmcoJ3BsJywgW1xuICAgICAgICAweDIwNjM3QSwgMHgyMDY0NkYsIDB4MjA2OTIwLCAweDIwNkE2NSwgMHgyMDZCNkYsIDB4MjA2RDYxLCAweDIwNkQ2OSwgMHgyMDZFNjEsXG4gICAgICAgIDB4MjA2RTY5LCAweDIwNkY2NCwgMHgyMDcwNkYsIDB4MjA3MDcyLCAweDIwNzM2OSwgMHgyMDc3MjAsIDB4MjA3NzY5LCAweDIwNzc3OSxcbiAgICAgICAgMHgyMDdBMjAsIDB4MjA3QTYxLCAweDYxMjA3MCwgMHg2MTIwNzcsIDB4NjE2RTY5LCAweDYzNjgyMCwgMHg2MzdBNjUsIDB4NjM3QTc5LFxuICAgICAgICAweDY0NkYyMCwgMHg2NDdBNjksIDB4NjUyMDcwLCAweDY1MjA3MywgMHg2NTIwNzcsIDB4NjUyMDdBLCAweDY1Njc2RiwgMHg2NTZBMjAsXG4gICAgICAgIDB4NjU2RDIwLCAweDY1NkU2OSwgMHg2NzZGMjAsIDB4Njk2MTIwLCAweDY5NjUyMCwgMHg2OTY1NkEsIDB4NkI2MTIwLCAweDZCNjkyMCxcbiAgICAgICAgMHg2QjY5NjUsIDB4NkQ2OTY1LCAweDZFNjEyMCwgMHg2RTY5NjEsIDB4NkU2OTY1LCAweDZGMjA3MCwgMHg2Rjc3NjEsIDB4NkY3NzY5LFxuICAgICAgICAweDcwNkY2QywgMHg3MDcyNjEsIDB4NzA3MjZGLCAweDcwNzI3QSwgMHg3MjdBNjUsIDB4NzI3QTc5LCAweDczNjlFQSwgMHg3MzZCNjksXG4gICAgICAgIDB4NzM3NDYxLCAweDc3Njk2NSwgMHg3OTYzNjgsIDB4Nzk2RDIwLCAweDdBNjUyMCwgMHg3QTY5NjUsIDB4N0E3OTIwLCAweEYzNzcyMCxcbiAgICAgIF0pLFxuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdybycsIFtcbiAgICAgICAgMHgyMDYxMjAsIDB4MjA2MTYzLCAweDIwNjM2MSwgMHgyMDYzNjUsIDB4MjA2MzZGLCAweDIwNjM3NSwgMHgyMDY0NjUsIDB4MjA2NDY5LFxuICAgICAgICAweDIwNkM2MSwgMHgyMDZENjEsIDB4MjA3MDY1LCAweDIwNzA3MiwgMHgyMDczNjUsIDB4MjA3M0UzLCAweDIwNzU2RSwgMHgyMEJBNjksXG4gICAgICAgIDB4MjBFRTZFLCAweDYxMjA2MywgMHg2MTIwNjQsIDB4NjE3MjY1LCAweDYxNzQyMCwgMHg2MTc0NjUsIDB4NjE3NTIwLCAweDYzNjE3MixcbiAgICAgICAgMHg2MzZGNkUsIDB4NjM3NTIwLCAweDYzRTMyMCwgMHg2NDY1MjAsIDB4NjUyMDYxLCAweDY1MjA2MywgMHg2NTIwNjQsIDB4NjUyMDcwLFxuICAgICAgICAweDY1MjA3MywgMHg2NTYxMjAsIDB4NjU2OTIwLCAweDY1NkM2NSwgMHg2NTZFNzQsIDB4NjU3Mzc0LCAweDY5MjA2MSwgMHg2OTIwNjMsXG4gICAgICAgIDB4NjkyMDY0LCAweDY5MjA3MCwgMHg2OTY1MjAsIDB4Njk2OTIwLCAweDY5NkUyMCwgMHg2QzYxMjAsIDB4NkM2NTIwLCAweDZDNkY3MixcbiAgICAgICAgMHg2Qzc1NjksIDB4NkU2NTIwLCAweDZFNzQ3MiwgMHg2RjcyMjAsIDB4NzA2NTZFLCAweDcyNjUyMCwgMHg3MjY1NjEsIDB4NzI3NTIwLFxuICAgICAgICAweDczRTMyMCwgMHg3NDY1MjAsIDB4NzQ3Mjc1LCAweDc0RTMyMCwgMHg3NTY5MjAsIDB4NzU2QzIwLCAweEJBNjkyMCwgMHhFRTZFMjAsXG4gICAgICBdKVxuICAgIF07XG4gIH07XG5cbiAgdGhpcy5uYW1lID0gZnVuY3Rpb24oZGV0KSB7XG4gICAgcmV0dXJuIChkZXQgJiYgZGV0LmZDMUJ5dGVzKSA/ICd3aW5kb3dzLTEyNTAnIDogJ0lTTy04ODU5LTInO1xuICB9O1xufTtcbnV0aWwuaW5oZXJpdHMobW9kdWxlLmV4cG9ydHMuSVNPXzg4NTlfMiwgc2Jjcyk7XG5cblxubW9kdWxlLmV4cG9ydHMuSVNPXzg4NTlfNSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmJ5dGVNYXAgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gW1xuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MDAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LFxuICAgICAgMHg2OCwgMHg2OSwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwgMHg2RixcbiAgICAgIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsXG4gICAgICAweDc4LCAweDc5LCAweDdBLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NyxcbiAgICAgIDB4NjgsIDB4NjksIDB4NkEsIDB4NkIsIDB4NkMsIDB4NkQsIDB4NkUsIDB4NkYsXG4gICAgICAweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LFxuICAgICAgMHg3OCwgMHg3OSwgMHg3QSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweEYxLCAweEYyLCAweEYzLCAweEY0LCAweEY1LCAweEY2LCAweEY3LFxuICAgICAgMHhGOCwgMHhGOSwgMHhGQSwgMHhGQiwgMHhGQywgMHgyMCwgMHhGRSwgMHhGRixcbiAgICAgIDB4RDAsIDB4RDEsIDB4RDIsIDB4RDMsIDB4RDQsIDB4RDUsIDB4RDYsIDB4RDcsXG4gICAgICAweEQ4LCAweEQ5LCAweERBLCAweERCLCAweERDLCAweERELCAweERFLCAweERGLFxuICAgICAgMHhFMCwgMHhFMSwgMHhFMiwgMHhFMywgMHhFNCwgMHhFNSwgMHhFNiwgMHhFNyxcbiAgICAgIDB4RTgsIDB4RTksIDB4RUEsIDB4RUIsIDB4RUMsIDB4RUQsIDB4RUUsIDB4RUYsXG4gICAgICAweEQwLCAweEQxLCAweEQyLCAweEQzLCAweEQ0LCAweEQ1LCAweEQ2LCAweEQ3LFxuICAgICAgMHhEOCwgMHhEOSwgMHhEQSwgMHhEQiwgMHhEQywgMHhERCwgMHhERSwgMHhERixcbiAgICAgIDB4RTAsIDB4RTEsIDB4RTIsIDB4RTMsIDB4RTQsIDB4RTUsIDB4RTYsIDB4RTcsXG4gICAgICAweEU4LCAweEU5LCAweEVBLCAweEVCLCAweEVDLCAweEVELCAweEVFLCAweEVGLFxuICAgICAgMHgyMCwgMHhGMSwgMHhGMiwgMHhGMywgMHhGNCwgMHhGNSwgMHhGNiwgMHhGNyxcbiAgICAgIDB4RjgsIDB4RjksIDB4RkEsIDB4RkIsIDB4RkMsIDB4MjAsIDB4RkUsIDB4RkZcbiAgICBdO1xuICB9O1xuXG4gIHRoaXMubmdyYW1zID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIDB4MjBEMjIwLCAweDIwRDJERSwgMHgyMEQ0REUsIDB4MjBEN0QwLCAweDIwRDgyMCwgMHgyMERBRDAsIDB4MjBEQURFLCAweDIwREREMCxcbiAgICAgIDB4MjBEREQ1LCAweDIwREVEMSwgMHgyMERGREUsIDB4MjBERkUwLCAweDIwRTBEMCwgMHgyMEUxREUsIDB4MjBFMUUyLCAweDIwRTJERSxcbiAgICAgIDB4MjBFN0UyLCAweDIwRURFMiwgMHhEMERERDgsIDB4RDBFMkVDLCAweEQzREUyMCwgMHhENURCRUMsIDB4RDVEREQ4LCAweEQ1RTFFMixcbiAgICAgIDB4RDVFMjIwLCAweEQ4MjBERiwgMHhEOEQ1MjAsIDB4RDhEODIwLCAweEQ4RUYyMCwgMHhEQkQ1REQsIDB4REJEODIwLCAweERCRUNERCxcbiAgICAgIDB4REREMDIwLCAweERERDUyMCwgMHhEREQ4RDUsIDB4REREOEVGLCAweEREREUyMCwgMHhERERFRDIsIDB4REUyMEQyLCAweERFMjBERixcbiAgICAgIDB4REUyMEUxLCAweERFRDIyMCwgMHhERUQyRDAsIDB4REVEM0RFLCAweERFRDkyMCwgMHhERURCRUMsIDB4REVEQzIwLCAweERFRTFFMixcbiAgICAgIDB4REZERURCLCAweERGRTBENSwgMHhERkUwRDgsIDB4REZFMERFLCAweEUwRDBEMiwgMHhFMEQ1RDQsIDB4RTFFMkQwLCAweEUxRTJEMixcbiAgICAgIDB4RTFFMkQ4LCAweEUxRUYyMCwgMHhFMkQ1REIsIDB4RTJERTIwLCAweEUyREVFMCwgMHhFMkVDMjAsIDB4RTdFMkRFLCAweEVCRTUyMFxuICAgIF07XG4gIH07XG5cbiAgdGhpcy5uYW1lID0gZnVuY3Rpb24oZGV0KSB7XG4gICAgcmV0dXJuICdJU08tODg1OS01JztcbiAgfTtcblxuICB0aGlzLmxhbmd1YWdlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICdydSc7XG4gIH07XG59O1xudXRpbC5pbmhlcml0cyhtb2R1bGUuZXhwb3J0cy5JU09fODg1OV81LCBzYmNzKTtcblxuXG5tb2R1bGUuZXhwb3J0cy5JU09fODg1OV82ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuYnl0ZU1hcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBbXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgwMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsXG4gICAgICAweDY4LCAweDY5LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLFxuICAgICAgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NyxcbiAgICAgIDB4NzgsIDB4NzksIDB4N0EsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LFxuICAgICAgMHg2OCwgMHg2OSwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwgMHg2RixcbiAgICAgIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsXG4gICAgICAweDc4LCAweDc5LCAweDdBLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweEMxLCAweEMyLCAweEMzLCAweEM0LCAweEM1LCAweEM2LCAweEM3LFxuICAgICAgMHhDOCwgMHhDOSwgMHhDQSwgMHhDQiwgMHhDQywgMHhDRCwgMHhDRSwgMHhDRixcbiAgICAgIDB4RDAsIDB4RDEsIDB4RDIsIDB4RDMsIDB4RDQsIDB4RDUsIDB4RDYsIDB4RDcsXG4gICAgICAweEQ4LCAweEQ5LCAweERBLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHhFMCwgMHhFMSwgMHhFMiwgMHhFMywgMHhFNCwgMHhFNSwgMHhFNiwgMHhFNyxcbiAgICAgIDB4RTgsIDB4RTksIDB4RUEsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMFxuICAgIF07XG4gIH07XG5cbiAgdGhpcy5uZ3JhbXMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gW1xuICAgICAgMHgyMEM3RTQsIDB4MjBDN0U2LCAweDIwQzhDNywgMHgyMEQ5RTQsIDB4MjBFMUVBLCAweDIwRTRFNCwgMHgyMEU1RTYsIDB4MjBFOEM3LFxuICAgICAgMHhDNzIwQzcsIDB4QzdDMTIwLCAweEM3Q0EyMCwgMHhDN0QxMjAsIDB4QzdFNDIwLCAweEM3RTRDMywgMHhDN0U0QzcsIDB4QzdFNEM4LFxuICAgICAgMHhDN0U0Q0EsIDB4QzdFNENDLCAweEM3RTRDRCwgMHhDN0U0Q0YsIDB4QzdFNEQzLCAweEM3RTREOSwgMHhDN0U0RTIsIDB4QzdFNEU1LFxuICAgICAgMHhDN0U0RTgsIDB4QzdFNEVBLCAweEM3RTUyMCwgMHhDN0U2MjAsIDB4QzdFNkNBLCAweEM4MjBDNywgMHhDOTIwQzcsIDB4QzkyMEUxLFxuICAgICAgMHhDOTIwRTQsIDB4QzkyMEU1LCAweEM5MjBFOCwgMHhDQTIwQzcsIDB4Q0YyMEM3LCAweENGQzkyMCwgMHhEMTIwQzcsIDB4RDFDOTIwLFxuICAgICAgMHhEMzIwQzcsIDB4RDkyMEM3LCAweEQ5RTRFOSwgMHhFMUVBMjAsIDB4RTQyMEM3LCAweEU0QzkyMCwgMHhFNEU5MjAsIDB4RTRFQTIwLFxuICAgICAgMHhFNTIwQzcsIDB4RTVDNzIwLCAweEU1QzkyMCwgMHhFNUU2MjAsIDB4RTYyMEM3LCAweEU3MjBDNywgMHhFN0M3MjAsIDB4RThDN0U0LFxuICAgICAgMHhFOEU2MjAsIDB4RTkyMEM3LCAweEVBMjBDNywgMHhFQTIwRTUsIDB4RUEyMEU4LCAweEVBQzkyMCwgMHhFQUQxMjAsIDB4RUFFNjIwXG4gICAgXTtcbiAgfTtcblxuICB0aGlzLm5hbWUgPSBmdW5jdGlvbihkZXQpIHtcbiAgICByZXR1cm4gJ0lTTy04ODU5LTYnO1xuICB9O1xuXG4gIHRoaXMubGFuZ3VhZ2UgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ2FyJztcbiAgfTtcbn07XG51dGlsLmluaGVyaXRzKG1vZHVsZS5leHBvcnRzLklTT184ODU5XzYsIHNiY3MpO1xuXG5cbm1vZHVsZS5leHBvcnRzLklTT184ODU5XzcgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5ieXRlTWFwID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDAwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NyxcbiAgICAgIDB4NjgsIDB4NjksIDB4NkEsIDB4NkIsIDB4NkMsIDB4NkQsIDB4NkUsIDB4NkYsXG4gICAgICAweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LFxuICAgICAgMHg3OCwgMHg3OSwgMHg3QSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsXG4gICAgICAweDY4LCAweDY5LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLFxuICAgICAgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NyxcbiAgICAgIDB4NzgsIDB4NzksIDB4N0EsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHhBMSwgMHhBMiwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweERDLCAweDIwLFxuICAgICAgMHhERCwgMHhERSwgMHhERiwgMHgyMCwgMHhGQywgMHgyMCwgMHhGRCwgMHhGRSxcbiAgICAgIDB4QzAsIDB4RTEsIDB4RTIsIDB4RTMsIDB4RTQsIDB4RTUsIDB4RTYsIDB4RTcsXG4gICAgICAweEU4LCAweEU5LCAweEVBLCAweEVCLCAweEVDLCAweEVELCAweEVFLCAweEVGLFxuICAgICAgMHhGMCwgMHhGMSwgMHgyMCwgMHhGMywgMHhGNCwgMHhGNSwgMHhGNiwgMHhGNyxcbiAgICAgIDB4RjgsIDB4RjksIDB4RkEsIDB4RkIsIDB4REMsIDB4REQsIDB4REUsIDB4REYsXG4gICAgICAweEUwLCAweEUxLCAweEUyLCAweEUzLCAweEU0LCAweEU1LCAweEU2LCAweEU3LFxuICAgICAgMHhFOCwgMHhFOSwgMHhFQSwgMHhFQiwgMHhFQywgMHhFRCwgMHhFRSwgMHhFRixcbiAgICAgIDB4RjAsIDB4RjEsIDB4RjIsIDB4RjMsIDB4RjQsIDB4RjUsIDB4RjYsIDB4RjcsXG4gICAgICAweEY4LCAweEY5LCAweEZBLCAweEZCLCAweEZDLCAweEZELCAweEZFLCAweDIwXG4gICAgXTtcbiAgfTtcblxuICB0aGlzLm5ncmFtcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBbXG4gICAgICAweDIwRTFFRCwgMHgyMEUxRjAsIDB4MjBFM0U5LCAweDIwRTRFOSwgMHgyMEU1RjAsIDB4MjBFNzIwLCAweDIwRUFFMSwgMHgyMEVDRTUsXG4gICAgICAweDIwRURFMSwgMHgyMEVGMjAsIDB4MjBGMEUxLCAweDIwRjBFRiwgMHgyMEYwRjEsIDB4MjBGM0Y0LCAweDIwRjNGNSwgMHgyMEY0RTcsXG4gICAgICAweDIwRjRFRiwgMHhERkUxMjAsIDB4RTEyMEUxLCAweEUxMjBGNCwgMHhFMUU5MjAsIDB4RTFFRDIwLCAweEUxRjBGQywgMHhFMUYyMjAsXG4gICAgICAweEUzRTlFMSwgMHhFNUU5MjAsIDB4RTVGMjIwLCAweEU3MjBGNCwgMHhFN0VEMjAsIDB4RTdGMjIwLCAweEU5MjBGNCwgMHhFOUUxMjAsXG4gICAgICAweEU5RUFERSwgMHhFOUYyMjAsIDB4RUFFMUU5LCAweEVBRTFGNCwgMHhFQ0U1MjAsIDB4RUQyMEUxLCAweEVEMjBFNSwgMHhFRDIwRjAsXG4gICAgICAweEVERTEyMCwgMHhFRkYyMjAsIDB4RUZGNTIwLCAweEYwRUZGNSwgMHhGMEYxRUYsIDB4RjBGQzIwLCAweEYyMjBFMSwgMHhGMjIwRTUsXG4gICAgICAweEYyMjBFQSwgMHhGMjIwRjAsIDB4RjIyMEY0LCAweEYzRTUyMCwgMHhGM0U3MjAsIDB4RjNGNEVGLCAweEY0RTEyMCwgMHhGNEUxRTksXG4gICAgICAweEY0RTdFRCwgMHhGNEU3RjIsIDB4RjRFOUVBLCAweEY0RUYyMCwgMHhGNEVGRjUsIDB4RjRGOUVELCAweEY5RUQyMCwgMHhGRUVEMjBcbiAgICBdO1xuICB9O1xuXG4gIHRoaXMubmFtZSA9IGZ1bmN0aW9uKGRldCkge1xuICAgIHJldHVybiAoZGV0ICYmIGRldC5mQzFCeXRlcykgPyAnd2luZG93cy0xMjUzJyA6ICdJU08tODg1OS03JztcbiAgfTtcblxuICB0aGlzLmxhbmd1YWdlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICdlbCc7XG4gIH07XG59O1xudXRpbC5pbmhlcml0cyhtb2R1bGUuZXhwb3J0cy5JU09fODg1OV83LCBzYmNzKTtcblxubW9kdWxlLmV4cG9ydHMuSVNPXzg4NTlfOCA9IGZ1bmN0aW9uKCkge1xuXG4gIHRoaXMuYnl0ZU1hcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBbXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgwMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsXG4gICAgICAweDY4LCAweDY5LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLFxuICAgICAgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NyxcbiAgICAgIDB4NzgsIDB4NzksIDB4N0EsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LFxuICAgICAgMHg2OCwgMHg2OSwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwgMHg2RixcbiAgICAgIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsXG4gICAgICAweDc4LCAweDc5LCAweDdBLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHhCNSwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHhFMCwgMHhFMSwgMHhFMiwgMHhFMywgMHhFNCwgMHhFNSwgMHhFNiwgMHhFNyxcbiAgICAgIDB4RTgsIDB4RTksIDB4RUEsIDB4RUIsIDB4RUMsIDB4RUQsIDB4RUUsIDB4RUYsXG4gICAgICAweEYwLCAweEYxLCAweEYyLCAweEYzLCAweEY0LCAweEY1LCAweEY2LCAweEY3LFxuICAgICAgMHhGOCwgMHhGOSwgMHhGQSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMFxuICAgIF07XG4gIH07XG5cbiAgdGhpcy5uZ3JhbXMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gW1xuICAgICAgbmV3IE5HcmFtc1BsdXNMYW5nKCdoZScsIFtcbiAgICAgICAgMHgyMEUwRTUsIDB4MjBFMEU3LCAweDIwRTBFOSwgMHgyMEUwRkEsIDB4MjBFMUU5LCAweDIwRTFFRSwgMHgyMEU0RTAsIDB4MjBFNEU1LFxuICAgICAgICAweDIwRTRFOSwgMHgyMEU0RUUsIDB4MjBFNEYyLCAweDIwRTRGOSwgMHgyMEU0RkEsIDB4MjBFQ0UwLCAweDIwRUNFNCwgMHgyMEVFRTAsXG4gICAgICAgIDB4MjBGMkVDLCAweDIwRjlFQywgMHhFMEZBMjAsIDB4RTQyMEUwLCAweEU0MjBFMSwgMHhFNDIwRTQsIDB4RTQyMEVDLCAweEU0MjBFRSxcbiAgICAgICAgMHhFNDIwRjksIDB4RTRFNUUwLCAweEU1RTAyMCwgMHhFNUVEMjAsIDB4RTVFRjIwLCAweEU1RjgyMCwgMHhFNUZBMjAsIDB4RTkyMEU0LFxuICAgICAgICAweEU5RTQyMCwgMHhFOUU1RkEsIDB4RTlFOUVELCAweEU5RUQyMCwgMHhFOUVGMjAsIDB4RTlGODIwLCAweEU5RkEyMCwgMHhFQzIwRTAsXG4gICAgICAgIDB4RUMyMEU0LCAweEVDRTAyMCwgMHhFQ0U0MjAsIDB4RUQyMEUwLCAweEVEMjBFMSwgMHhFRDIwRTQsIDB4RUQyMEVDLCAweEVEMjBFRSxcbiAgICAgICAgMHhFRDIwRjksIDB4RUVFNDIwLCAweEVGMjBFNCwgMHhGMEU0MjAsIDB4RjBFOTIwLCAweEYwRTlFRCwgMHhGMkVDMjAsIDB4RjgyMEU0LFxuICAgICAgICAweEY4RTlFRCwgMHhGOUVDMjAsIDB4RkEyMEUwLCAweEZBMjBFMSwgMHhGQTIwRTQsIDB4RkEyMEVDLCAweEZBMjBFRSwgMHhGQTIwRjksXG4gICAgICBdKSxcbiAgICAgIG5ldyBOR3JhbXNQbHVzTGFuZygnaGUnLCBbXG4gICAgICAgIDB4MjBFMEU1LCAweDIwRTBFQywgMHgyMEU0RTksIDB4MjBFNEVDLCAweDIwRTRFRSwgMHgyMEU0RjAsIDB4MjBFOUYwLCAweDIwRUNGMixcbiAgICAgICAgMHgyMEVDRjksIDB4MjBFREU1LCAweDIwRURFOSwgMHgyMEVGRTUsIDB4MjBFRkU5LCAweDIwRjhFNSwgMHgyMEY4RTksIDB4MjBGQUUwLFxuICAgICAgICAweDIwRkFFNSwgMHgyMEZBRTksIDB4RTAyMEU0LCAweEUwMjBFQywgMHhFMDIwRUQsIDB4RTAyMEZBLCAweEUwRTQyMCwgMHhFMEU1RTQsXG4gICAgICAgIDB4RTBFQzIwLCAweEUwRUUyMCwgMHhFMTIwRTQsIDB4RTEyMEVELCAweEUxMjBGQSwgMHhFNDIwRTQsIDB4RTQyMEU5LCAweEU0MjBFQyxcbiAgICAgICAgMHhFNDIwRUQsIDB4RTQyMEVGLCAweEU0MjBGOCwgMHhFNDIwRkEsIDB4RTRFQzIwLCAweEU1RTAyMCwgMHhFNUU0MjAsIDB4RTdFMDIwLFxuICAgICAgICAweEU5RTAyMCwgMHhFOUUxMjAsIDB4RTlFNDIwLCAweEVDMjBFNCwgMHhFQzIwRUQsIDB4RUMyMEZBLCAweEVDRjIyMCwgMHhFQ0Y5MjAsXG4gICAgICAgIDB4RURFOUU5LCAweEVERTlGMCwgMHhFREU5RjgsIDB4RUUyMEU0LCAweEVFMjBFRCwgMHhFRTIwRkEsIDB4RUVFMTIwLCAweEVFRTQyMCxcbiAgICAgICAgMHhGMkU0MjAsIDB4RjkyMEU0LCAweEY5MjBFRCwgMHhGOTIwRkEsIDB4RjlFNDIwLCAweEZBRTAyMCwgMHhGQUU0MjAsIDB4RkFFNUU5LFxuICAgICAgXSlcbiAgICBdO1xuICB9O1xuXG4gIHRoaXMubmFtZSA9IGZ1bmN0aW9uKGRldCkge1xuICAgIHJldHVybiAoZGV0ICYmIGRldC5mQzFCeXRlcykgPyAnd2luZG93cy0xMjU1JyA6ICdJU08tODg1OS04JztcbiAgfTtcblxuICB0aGlzLmxhbmd1YWdlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICdoZSc7XG4gIH07XG5cbn07XG51dGlsLmluaGVyaXRzKG1vZHVsZS5leHBvcnRzLklTT184ODU5XzgsIHNiY3MpO1xuXG5cbm1vZHVsZS5leHBvcnRzLklTT184ODU5XzkgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5ieXRlTWFwID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDAwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NyxcbiAgICAgIDB4NjgsIDB4NjksIDB4NkEsIDB4NkIsIDB4NkMsIDB4NkQsIDB4NkUsIDB4NkYsXG4gICAgICAweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LFxuICAgICAgMHg3OCwgMHg3OSwgMHg3QSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsXG4gICAgICAweDY4LCAweDY5LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLFxuICAgICAgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NyxcbiAgICAgIDB4NzgsIDB4NzksIDB4N0EsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4QUEsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweEI1LCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHhCQSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4RTAsIDB4RTEsIDB4RTIsIDB4RTMsIDB4RTQsIDB4RTUsIDB4RTYsIDB4RTcsXG4gICAgICAweEU4LCAweEU5LCAweEVBLCAweEVCLCAweEVDLCAweEVELCAweEVFLCAweEVGLFxuICAgICAgMHhGMCwgMHhGMSwgMHhGMiwgMHhGMywgMHhGNCwgMHhGNSwgMHhGNiwgMHgyMCxcbiAgICAgIDB4RjgsIDB4RjksIDB4RkEsIDB4RkIsIDB4RkMsIDB4NjksIDB4RkUsIDB4REYsXG4gICAgICAweEUwLCAweEUxLCAweEUyLCAweEUzLCAweEU0LCAweEU1LCAweEU2LCAweEU3LFxuICAgICAgMHhFOCwgMHhFOSwgMHhFQSwgMHhFQiwgMHhFQywgMHhFRCwgMHhFRSwgMHhFRixcbiAgICAgIDB4RjAsIDB4RjEsIDB4RjIsIDB4RjMsIDB4RjQsIDB4RjUsIDB4RjYsIDB4MjAsXG4gICAgICAweEY4LCAweEY5LCAweEZBLCAweEZCLCAweEZDLCAweEZELCAweEZFLCAweEZGXG4gICAgXTtcbiAgfTtcblxuICB0aGlzLm5ncmFtcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBbXG4gICAgICAweDIwNjI2MSwgMHgyMDYyNjksIDB4MjA2Mjc1LCAweDIwNjQ2MSwgMHgyMDY0NjUsIDB4MjA2NzY1LCAweDIwNjg2MSwgMHgyMDY5NkMsXG4gICAgICAweDIwNkI2MSwgMHgyMDZCNkYsIDB4MjA2RDYxLCAweDIwNkY2QywgMHgyMDczNjEsIDB4MjA3NDYxLCAweDIwNzY2NSwgMHgyMDc5NjEsXG4gICAgICAweDYxMjA2MiwgMHg2MTZCMjAsIDB4NjE2QzYxLCAweDYxNkQ2MSwgMHg2MTZFMjAsIDB4NjE2RUZELCAweDYxNzIyMCwgMHg2MTcyNjEsXG4gICAgICAweDYxNzJGRCwgMHg2MTczRkQsIDB4NjE3OTYxLCAweDYyNjk3MiwgMHg2NDYxMjAsIDB4NjQ2NTIwLCAweDY0NjkyMCwgMHg2NTIwNjIsXG4gICAgICAweDY1MjA2QiwgMHg2NTY0NjksIDB4NjU2RTIwLCAweDY1NzIyMCwgMHg2NTcyNjksIDB4NjU3MzY5LCAweDY5NkM2NSwgMHg2OTZFMjAsXG4gICAgICAweDY5NkU2OSwgMHg2OTcyMjAsIDB4NkM2MTZFLCAweDZDNjE3MiwgMHg2QzY1MjAsIDB4NkM2NTcyLCAweDZFMjA2MSwgMHg2RTIwNjIsXG4gICAgICAweDZFMjA2QiwgMHg2RTY0NjEsIDB4NkU2NDY1LCAweDZFNjUyMCwgMHg2RTY5MjAsIDB4NkU2OTZFLCAweDZFRkQyMCwgMHg3MjY5NkUsXG4gICAgICAweDcyRkQ2RSwgMHg3NjY1MjAsIDB4Nzk2MTIwLCAweDc5NkY3MiwgMHhGRDZFMjAsIDB4RkQ2RTY0LCAweEZENkVGRCwgMHhGREYwRkRcbiAgICBdO1xuICB9O1xuXG4gIHRoaXMubmFtZSA9IGZ1bmN0aW9uKGRldCkge1xuICAgIHJldHVybiAoZGV0ICYmIGRldC5mQzFCeXRlcykgPyAnd2luZG93cy0xMjU0JyA6ICdJU08tODg1OS05JztcbiAgfTtcblxuICB0aGlzLmxhbmd1YWdlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICd0cic7XG4gIH07XG59O1xudXRpbC5pbmhlcml0cyhtb2R1bGUuZXhwb3J0cy5JU09fODg1OV85LCBzYmNzKTtcblxuXG5tb2R1bGUuZXhwb3J0cy53aW5kb3dzXzEyNTEgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5ieXRlTWFwID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDAwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NyxcbiAgICAgIDB4NjgsIDB4NjksIDB4NkEsIDB4NkIsIDB4NkMsIDB4NkQsIDB4NkUsIDB4NkYsXG4gICAgICAweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LFxuICAgICAgMHg3OCwgMHg3OSwgMHg3QSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsXG4gICAgICAweDY4LCAweDY5LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLFxuICAgICAgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NyxcbiAgICAgIDB4NzgsIDB4NzksIDB4N0EsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDkwLCAweDgzLCAweDIwLCAweDgzLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHg5QSwgMHgyMCwgMHg5QywgMHg5RCwgMHg5RSwgMHg5RixcbiAgICAgIDB4OTAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDlBLCAweDIwLCAweDlDLCAweDlELCAweDlFLCAweDlGLFxuICAgICAgMHgyMCwgMHhBMiwgMHhBMiwgMHhCQywgMHgyMCwgMHhCNCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4QjgsIDB4MjAsIDB4QkEsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4QkYsXG4gICAgICAweDIwLCAweDIwLCAweEIzLCAweEIzLCAweEI0LCAweEI1LCAweDIwLCAweDIwLFxuICAgICAgMHhCOCwgMHgyMCwgMHhCQSwgMHgyMCwgMHhCQywgMHhCRSwgMHhCRSwgMHhCRixcbiAgICAgIDB4RTAsIDB4RTEsIDB4RTIsIDB4RTMsIDB4RTQsIDB4RTUsIDB4RTYsIDB4RTcsXG4gICAgICAweEU4LCAweEU5LCAweEVBLCAweEVCLCAweEVDLCAweEVELCAweEVFLCAweEVGLFxuICAgICAgMHhGMCwgMHhGMSwgMHhGMiwgMHhGMywgMHhGNCwgMHhGNSwgMHhGNiwgMHhGNyxcbiAgICAgIDB4RjgsIDB4RjksIDB4RkEsIDB4RkIsIDB4RkMsIDB4RkQsIDB4RkUsIDB4RkYsXG4gICAgICAweEUwLCAweEUxLCAweEUyLCAweEUzLCAweEU0LCAweEU1LCAweEU2LCAweEU3LFxuICAgICAgMHhFOCwgMHhFOSwgMHhFQSwgMHhFQiwgMHhFQywgMHhFRCwgMHhFRSwgMHhFRixcbiAgICAgIDB4RjAsIDB4RjEsIDB4RjIsIDB4RjMsIDB4RjQsIDB4RjUsIDB4RjYsIDB4RjcsXG4gICAgICAweEY4LCAweEY5LCAweEZBLCAweEZCLCAweEZDLCAweEZELCAweEZFLCAweEZGXG4gICAgXTtcbiAgfTtcblxuICB0aGlzLm5ncmFtcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBbXG4gICAgICAweDIwRTIyMCwgMHgyMEUyRUUsIDB4MjBFNEVFLCAweDIwRTdFMCwgMHgyMEU4MjAsIDB4MjBFQUUwLCAweDIwRUFFRSwgMHgyMEVERTAsXG4gICAgICAweDIwRURFNSwgMHgyMEVFRTEsIDB4MjBFRkVFLCAweDIwRUZGMCwgMHgyMEYwRTAsIDB4MjBGMUVFLCAweDIwRjFGMiwgMHgyMEYyRUUsXG4gICAgICAweDIwRjdGMiwgMHgyMEZERjIsIDB4RTBFREU4LCAweEUwRjJGQywgMHhFM0VFMjAsIDB4RTVFQkZDLCAweEU1RURFOCwgMHhFNUYxRjIsXG4gICAgICAweEU1RjIyMCwgMHhFODIwRUYsIDB4RThFNTIwLCAweEU4RTgyMCwgMHhFOEZGMjAsIDB4RUJFNUVELCAweEVCRTgyMCwgMHhFQkZDRUQsXG4gICAgICAweEVERTAyMCwgMHhFREU1MjAsIDB4RURFOEU1LCAweEVERThGRiwgMHhFREVFMjAsIDB4RURFRUUyLCAweEVFMjBFMiwgMHhFRTIwRUYsXG4gICAgICAweEVFMjBGMSwgMHhFRUUyMjAsIDB4RUVFMkUwLCAweEVFRTNFRSwgMHhFRUU5MjAsIDB4RUVFQkZDLCAweEVFRUMyMCwgMHhFRUYxRjIsXG4gICAgICAweEVGRUVFQiwgMHhFRkYwRTUsIDB4RUZGMEU4LCAweEVGRjBFRSwgMHhGMEUwRTIsIDB4RjBFNUU0LCAweEYxRjJFMCwgMHhGMUYyRTIsXG4gICAgICAweEYxRjJFOCwgMHhGMUZGMjAsIDB4RjJFNUVCLCAweEYyRUUyMCwgMHhGMkVFRjAsIDB4RjJGQzIwLCAweEY3RjJFRSwgMHhGQkY1MjBcbiAgICBdO1xuICB9O1xuXG4gIHRoaXMubmFtZSA9IGZ1bmN0aW9uKGRldCkge1xuICAgIHJldHVybiAnd2luZG93cy0xMjUxJztcbiAgfTtcblxuICB0aGlzLmxhbmd1YWdlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICdydSc7XG4gIH07XG59O1xudXRpbC5pbmhlcml0cyhtb2R1bGUuZXhwb3J0cy53aW5kb3dzXzEyNTEsIHNiY3MpO1xuXG5cbm1vZHVsZS5leHBvcnRzLndpbmRvd3NfMTI1NiA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmJ5dGVNYXAgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gW1xuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MDAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LFxuICAgICAgMHg2OCwgMHg2OSwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwgMHg2RixcbiAgICAgIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsXG4gICAgICAweDc4LCAweDc5LCAweDdBLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NyxcbiAgICAgIDB4NjgsIDB4NjksIDB4NkEsIDB4NkIsIDB4NkMsIDB4NkQsIDB4NkUsIDB4NkYsXG4gICAgICAweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LFxuICAgICAgMHg3OCwgMHg3OSwgMHg3QSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4ODEsIDB4MjAsIDB4ODMsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDg4LCAweDIwLCAweDhBLCAweDIwLCAweDlDLCAweDhELCAweDhFLCAweDhGLFxuICAgICAgMHg5MCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4OTgsIDB4MjAsIDB4OUEsIDB4MjAsIDB4OUMsIDB4MjAsIDB4MjAsIDB4OUYsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHhBQSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4QjUsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHhDMCwgMHhDMSwgMHhDMiwgMHhDMywgMHhDNCwgMHhDNSwgMHhDNiwgMHhDNyxcbiAgICAgIDB4QzgsIDB4QzksIDB4Q0EsIDB4Q0IsIDB4Q0MsIDB4Q0QsIDB4Q0UsIDB4Q0YsXG4gICAgICAweEQwLCAweEQxLCAweEQyLCAweEQzLCAweEQ0LCAweEQ1LCAweEQ2LCAweDIwLFxuICAgICAgMHhEOCwgMHhEOSwgMHhEQSwgMHhEQiwgMHhEQywgMHhERCwgMHhERSwgMHhERixcbiAgICAgIDB4RTAsIDB4RTEsIDB4RTIsIDB4RTMsIDB4RTQsIDB4RTUsIDB4RTYsIDB4RTcsXG4gICAgICAweEU4LCAweEU5LCAweEVBLCAweEVCLCAweEVDLCAweEVELCAweEVFLCAweEVGLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHhGNCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4RjksIDB4MjAsIDB4RkIsIDB4RkMsIDB4MjAsIDB4MjAsIDB4RkZcbiAgICBdO1xuICB9O1xuXG4gIHRoaXMubmdyYW1zID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIDB4MjBDN0UxLCAweDIwQzdFNCwgMHgyMEM4QzcsIDB4MjBEQUUxLCAweDIwRERFRCwgMHgyMEUxRTEsIDB4MjBFM0U0LCAweDIwRTZDNyxcbiAgICAgIDB4QzcyMEM3LCAweEM3QzEyMCwgMHhDN0NBMjAsIDB4QzdEMTIwLCAweEM3RTEyMCwgMHhDN0UxQzMsIDB4QzdFMUM3LCAweEM3RTFDOCxcbiAgICAgIDB4QzdFMUNBLCAweEM3RTFDQywgMHhDN0UxQ0QsIDB4QzdFMUNGLCAweEM3RTFEMywgMHhDN0UxREEsIDB4QzdFMURFLCAweEM3RTFFMyxcbiAgICAgIDB4QzdFMUU2LCAweEM3RTFFRCwgMHhDN0UzMjAsIDB4QzdFNDIwLCAweEM3RTRDQSwgMHhDODIwQzcsIDB4QzkyMEM3LCAweEM5MjBERCxcbiAgICAgIDB4QzkyMEUxLCAweEM5MjBFMywgMHhDOTIwRTYsIDB4Q0EyMEM3LCAweENGMjBDNywgMHhDRkM5MjAsIDB4RDEyMEM3LCAweEQxQzkyMCxcbiAgICAgIDB4RDMyMEM3LCAweERBMjBDNywgMHhEQUUxRUMsIDB4RERFRDIwLCAweEUxMjBDNywgMHhFMUM5MjAsIDB4RTFFQzIwLCAweEUxRUQyMCxcbiAgICAgIDB4RTMyMEM3LCAweEUzQzcyMCwgMHhFM0M5MjAsIDB4RTNFNDIwLCAweEU0MjBDNywgMHhFNTIwQzcsIDB4RTVDNzIwLCAweEU2QzdFMSxcbiAgICAgIDB4RTZFNDIwLCAweEVDMjBDNywgMHhFRDIwQzcsIDB4RUQyMEUzLCAweEVEMjBFNiwgMHhFREM5MjAsIDB4RUREMTIwLCAweEVERTQyMFxuICAgIF07XG4gIH07XG5cbiAgdGhpcy5uYW1lID0gZnVuY3Rpb24oZGV0KSB7XG4gICAgcmV0dXJuICd3aW5kb3dzLTEyNTYnO1xuICB9O1xuXG4gIHRoaXMubGFuZ3VhZ2UgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ2FyJztcbiAgfTtcbn07XG51dGlsLmluaGVyaXRzKG1vZHVsZS5leHBvcnRzLndpbmRvd3NfMTI1Niwgc2Jjcyk7XG5cblxubW9kdWxlLmV4cG9ydHMuS09JOF9SID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuYnl0ZU1hcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBbXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgwMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsXG4gICAgICAweDY4LCAweDY5LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLFxuICAgICAgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NyxcbiAgICAgIDB4NzgsIDB4NzksIDB4N0EsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LFxuICAgICAgMHg2OCwgMHg2OSwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwgMHg2RixcbiAgICAgIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsXG4gICAgICAweDc4LCAweDc5LCAweDdBLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4QTMsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLFxuICAgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHhBMywgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCxcbiAgICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsXG4gICAgICAweEMwLCAweEMxLCAweEMyLCAweEMzLCAweEM0LCAweEM1LCAweEM2LCAweEM3LFxuICAgICAgMHhDOCwgMHhDOSwgMHhDQSwgMHhDQiwgMHhDQywgMHhDRCwgMHhDRSwgMHhDRixcbiAgICAgIDB4RDAsIDB4RDEsIDB4RDIsIDB4RDMsIDB4RDQsIDB4RDUsIDB4RDYsIDB4RDcsXG4gICAgICAweEQ4LCAweEQ5LCAweERBLCAweERCLCAweERDLCAweERELCAweERFLCAweERGLFxuICAgICAgMHhDMCwgMHhDMSwgMHhDMiwgMHhDMywgMHhDNCwgMHhDNSwgMHhDNiwgMHhDNyxcbiAgICAgIDB4QzgsIDB4QzksIDB4Q0EsIDB4Q0IsIDB4Q0MsIDB4Q0QsIDB4Q0UsIDB4Q0YsXG4gICAgICAweEQwLCAweEQxLCAweEQyLCAweEQzLCAweEQ0LCAweEQ1LCAweEQ2LCAweEQ3LFxuICAgICAgMHhEOCwgMHhEOSwgMHhEQSwgMHhEQiwgMHhEQywgMHhERCwgMHhERSwgMHhERlxuICAgIF07XG4gIH07XG5cbiAgdGhpcy5uZ3JhbXMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gW1xuICAgICAgMHgyMEM0Q0YsIDB4MjBDOTIwLCAweDIwQ0JDMSwgMHgyMENCQ0YsIDB4MjBDRUMxLCAweDIwQ0VDNSwgMHgyMENGQzIsIDB4MjBEMENGLFxuICAgICAgMHgyMEQwRDIsIDB4MjBEMkMxLCAweDIwRDNDRiwgMHgyMEQzRDQsIDB4MjBENENGLCAweDIwRDcyMCwgMHgyMEQ3Q0YsIDB4MjBEQUMxLFxuICAgICAgMHgyMERDRDQsIDB4MjBERUQ0LCAweEMxQ0VDOSwgMHhDMUQ0RDgsIDB4QzVDQ0Q4LCAweEM1Q0VDOSwgMHhDNUQzRDQsIDB4QzVENDIwLFxuICAgICAgMHhDN0NGMjAsIDB4QzkyMEQwLCAweEM5QzUyMCwgMHhDOUM5MjAsIDB4QzlEMTIwLCAweENDQzVDRSwgMHhDQ0M5MjAsIDB4Q0NEOENFLFxuICAgICAgMHhDRUMxMjAsIDB4Q0VDNTIwLCAweENFQzlDNSwgMHhDRUM5RDEsIDB4Q0VDRjIwLCAweENFQ0ZENywgMHhDRjIwRDAsIDB4Q0YyMEQzLFxuICAgICAgMHhDRjIwRDcsIDB4Q0ZDN0NGLCAweENGQ0EyMCwgMHhDRkNDRDgsIDB4Q0ZDRDIwLCAweENGRDNENCwgMHhDRkQ3MjAsIDB4Q0ZEN0MxLFxuICAgICAgMHhEMENGQ0MsIDB4RDBEMkM1LCAweEQwRDJDOSwgMHhEMEQyQ0YsIDB4RDJDMUQ3LCAweEQyQzVDNCwgMHhEM0QxMjAsIDB4RDNENEMxLFxuICAgICAgMHhEM0Q0QzksIDB4RDNENEQ3LCAweEQ0QzVDQywgMHhENENGMjAsIDB4RDRDRkQyLCAweEQ0RDgyMCwgMHhEOUM4MjAsIDB4REVENENGXG4gICAgXTtcbiAgfTtcblxuICB0aGlzLm5hbWUgPSBmdW5jdGlvbihkZXQpIHtcbiAgICByZXR1cm4gJ0tPSTgtUic7XG4gIH07XG5cbiAgdGhpcy5sYW5ndWFnZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAncnUnO1xuICB9O1xufTtcbnV0aWwuaW5oZXJpdHMobW9kdWxlLmV4cG9ydHMuS09JOF9SLCBzYmNzKTtcblxuXG4vKlxubW9kdWxlLmV4cG9ydHMuSVNPXzg4NTlfNyA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmJ5dGVNYXAgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gW1xuXG4gICAgXTtcbiAgfTtcblxuICB0aGlzLm5ncmFtcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBbXG5cbiAgICBdO1xuICB9O1xuXG4gIHRoaXMubmFtZSA9IGZ1bmN0aW9uKGRldCkge1xuICAgIGlmICh0eXBlb2YgZGV0ID09ICd1bmRlZmluZWQnKVxuICAgICAgcmV0dXJuICdJU08tODg1OS03JztcbiAgICByZXR1cm4gZGV0LmZDMUJ5dGVzID8gJ3dpbmRvd3MtMTI1MycgOiAnSVNPLTg4NTktNyc7XG4gIH07XG5cbiAgdGhpcy5sYW5ndWFnZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnZWwnO1xuICB9O1xufTtcbnV0aWwuaW5oZXJpdHMobW9kdWxlLmV4cG9ydHMuSVNPXzg4NTlfNywgc2Jjcyk7XG4qL1xuXG4iLCJ2YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKSxcbiAgTWF0Y2ggPSByZXF1aXJlICgnLi4vbWF0Y2gnKTtcblxuXG4vKipcbiAqIFRoaXMgaXMgYSBzdXBlcmNsYXNzIGZvciB0aGUgaW5kaXZpZHVhbCBkZXRlY3RvcnMgZm9yXG4gKiBlYWNoIG9mIHRoZSBkZXRlY3RhYmxlIG1lbWJlcnMgb2YgdGhlIElTTyAyMDIyIGZhbWlseVxuICogb2YgZW5jb2RpbmdzLlxuICovXG5cbmZ1bmN0aW9uIElTT18yMDIyKCkge31cblxuSVNPXzIwMjIucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24oZGV0KSB7XG5cbiAgLyoqXG4gICAqIE1hdGNoaW5nIGZ1bmN0aW9uIHNoYXJlZCBhbW9uZyB0aGUgMjAyMiBkZXRlY3RvcnMgSlAsIENOIGFuZCBLUlxuICAgKiBDb3VudHMgdXAgdGhlIG51bWJlciBvZiBsZWdhbCBhbiB1bnJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlcyBpblxuICAgKiB0aGUgc2FtcGxlIG9mIHRleHQsIGFuZCBjb21wdXRlcyBhIHNjb3JlIGJhc2VkIG9uIHRoZSB0b3RhbCBudW1iZXIgJlxuICAgKiB0aGUgcHJvcG9ydGlvbiB0aGF0IGZpdCB0aGUgZW5jb2RpbmcuXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB0ZXh0IHRoZSBieXRlIGJ1ZmZlciBjb250YWluaW5nIHRleHQgdG8gYW5hbHlzZVxuICAgKiBAcGFyYW0gdGV4dExlbiAgdGhlIHNpemUgb2YgdGhlIHRleHQgaW4gdGhlIGJ5dGUuXG4gICAqIEBwYXJhbSBlc2NhcGVTZXF1ZW5jZXMgdGhlIGJ5dGUgZXNjYXBlIHNlcXVlbmNlcyB0byB0ZXN0IGZvci5cbiAgICogQHJldHVybiBtYXRjaCBxdWFsaXR5LCBpbiB0aGUgcmFuZ2Ugb2YgMC0xMDAuXG4gICAqL1xuXG4gIHZhciBpLCBqO1xuICB2YXIgZXNjTjtcbiAgdmFyIGhpdHMgICA9IDA7XG4gIHZhciBtaXNzZXMgPSAwO1xuICB2YXIgc2hpZnRzID0gMDtcbiAgdmFyIHF1YWxpdHk7XG5cbiAgLy8gVE9ETzogcmVmYWN0b3IgbWVcbiAgdmFyIHRleHQgPSBkZXQuZklucHV0Qnl0ZXM7XG4gIHZhciB0ZXh0TGVuID0gZGV0LmZJbnB1dExlbjtcblxuICBzY2FuSW5wdXQ6XG4gICAgZm9yIChpID0gMDsgaSA8IHRleHRMZW47IGkrKykge1xuICAgICAgaWYgKHRleHRbaV0gPT0gMHgxYikge1xuICAgICAgICBjaGVja0VzY2FwZXM6XG4gICAgICAgICAgZm9yIChlc2NOID0gMDsgZXNjTiA8IHRoaXMuZXNjYXBlU2VxdWVuY2VzLmxlbmd0aDsgZXNjTisrKSB7XG4gICAgICAgICAgICB2YXIgc2VxID0gdGhpcy5lc2NhcGVTZXF1ZW5jZXNbZXNjTl07XG5cbiAgICAgICAgICAgIGlmICgodGV4dExlbiAtIGkpIDwgc2VxLmxlbmd0aClcbiAgICAgICAgICAgICAgY29udGludWUgY2hlY2tFc2NhcGVzO1xuXG4gICAgICAgICAgICBmb3IgKGogPSAxOyBqIDwgc2VxLmxlbmd0aDsgaisrKVxuICAgICAgICAgICAgICBpZiAoc2VxW2pdICE9IHRleHRbaSArIGpdKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlIGNoZWNrRXNjYXBlcztcblxuXG4gICAgICAgICAgICBoaXRzKys7XG4gICAgICAgICAgICBpICs9IHNlcS5sZW5ndGggLSAxO1xuICAgICAgICAgICAgY29udGludWUgc2NhbklucHV0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1pc3NlcysrO1xuICAgICAgfVxuXG4gICAgICAvLyBTaGlmdCBpbi9vdXRcbiAgICAgIGlmICh0ZXh0W2ldID09IDB4MGUgfHwgdGV4dFtpXSA9PSAweDBmKVxuICAgICAgICBzaGlmdHMrKztcblxuICAgIH1cblxuICBpZiAoaGl0cyA9PSAwKVxuICAgIHJldHVybiBudWxsO1xuXG4gIC8vXG4gIC8vIEluaXRpYWwgcXVhbGl0eSBpcyBiYXNlZCBvbiByZWxhdGl2ZSBwcm9wb3J0aW9uIG9mIHJlY29uZ2l6ZWQgdnMuXG4gIC8vICAgdW5yZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZXMuXG4gIC8vICAgQWxsIGdvb2Q6ICBxdWFsaXR5ID0gMTAwO1xuICAvLyAgIGhhbGYgb3IgbGVzcyBnb29kOiBxdWFsaXR5ID0gMDtcbiAgLy8gICBsaW5lYXIgaW5iZXR3ZWVuLlxuICBxdWFsaXR5ID0gKDEwMCAqIGhpdHMgLSAxMDAgKiBtaXNzZXMpIC8gKGhpdHMgKyBtaXNzZXMpO1xuXG4gIC8vIEJhY2sgb2ZmIHF1YWxpdHkgaWYgdGhlcmUgd2VyZSB0b28gZmV3IGVzY2FwZSBzZXF1ZW5jZXMgc2Vlbi5cbiAgLy8gICBJbmNsdWRlIHNoaWZ0cyBpbiB0aGlzIGNvbXB1dGF0aW9uLCBzbyB0aGF0IEtSIGRvZXMgbm90IGdldCBwZW5hbGl6ZWRcbiAgLy8gICBmb3IgaGF2aW5nIG9ubHkgYSBzaW5nbGUgRXNjYXBlIHNlcXVlbmNlLCBidXQgbWFueSBzaGlmdHMuXG4gIGlmIChoaXRzICsgc2hpZnRzIDwgNSlcbiAgICBxdWFsaXR5IC09ICg1IC0gKGhpdHMgKyBzaGlmdHMpKSAqIDEwO1xuXG4gIHJldHVybiBxdWFsaXR5IDw9IDAgPyBudWxsIDogbmV3IE1hdGNoKGRldCwgdGhpcywgcXVhbGl0eSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5JU09fMjAyMl9KUCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLm5hbWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ0lTTy0yMDIyLUpQJztcbiAgfTtcbiAgdGhpcy5lc2NhcGVTZXF1ZW5jZXMgPSBbXG4gICAgWyAweDFiLCAweDI0LCAweDI4LCAweDQzIF0sICAgLy8gS1MgWCAxMDAxOjE5OTJcbiAgICBbIDB4MWIsIDB4MjQsIDB4MjgsIDB4NDQgXSwgICAvLyBKSVMgWCAyMTItMTk5MFxuICAgIFsgMHgxYiwgMHgyNCwgMHg0MCBdLCAgICAgICAgIC8vIEpJUyBDIDYyMjYtMTk3OFxuICAgIFsgMHgxYiwgMHgyNCwgMHg0MSBdLCAgICAgICAgIC8vIEdCIDIzMTItODBcbiAgICBbIDB4MWIsIDB4MjQsIDB4NDIgXSwgICAgICAgICAvLyBKSVMgWCAyMDgtMTk4M1xuICAgIFsgMHgxYiwgMHgyNiwgMHg0MCBdLCAgICAgICAgIC8vIEpJUyBYIDIwOCAxOTkwLCAxOTk3XG4gICAgWyAweDFiLCAweDI4LCAweDQyIF0sICAgICAgICAgLy8gQVNDSUlcbiAgICBbIDB4MWIsIDB4MjgsIDB4NDggXSwgICAgICAgICAvLyBKSVMtUm9tYW5cbiAgICBbIDB4MWIsIDB4MjgsIDB4NDkgXSwgICAgICAgICAvLyBIYWxmLXdpZHRoIGthdGFrYW5hXG4gICAgWyAweDFiLCAweDI4LCAweDRhIF0sICAgICAgICAgLy8gSklTLVJvbWFuXG4gICAgWyAweDFiLCAweDJlLCAweDQxIF0sICAgICAgICAgLy8gSVNPIDg4NTktMVxuICAgIFsgMHgxYiwgMHgyZSwgMHg0NiBdICAgICAgICAgIC8vIElTTyA4ODU5LTdcbiAgXTtcbn07XG51dGlsLmluaGVyaXRzKG1vZHVsZS5leHBvcnRzLklTT18yMDIyX0pQLCBJU09fMjAyMik7XG5cblxuXG5tb2R1bGUuZXhwb3J0cy5JU09fMjAyMl9LUiA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLm5hbWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ0lTTy0yMDIyLUtSJztcbiAgfTtcbiAgdGhpcy5lc2NhcGVTZXF1ZW5jZXMgPSBbXG4gICAgWyAweDFiLCAweDI0LCAweDI5LCAweDQzIF1cbiAgXTtcbn07XG51dGlsLmluaGVyaXRzKG1vZHVsZS5leHBvcnRzLklTT18yMDIyX0tSLCBJU09fMjAyMik7XG5cblxuXG5tb2R1bGUuZXhwb3J0cy5JU09fMjAyMl9DTiA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLm5hbWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ0lTTy0yMDIyLUNOJztcbiAgfTtcbiAgdGhpcy5lc2NhcGVTZXF1ZW5jZXMgPSBbXG4gICAgWyAweDFiLCAweDI0LCAweDI5LCAweDQxIF0sICAgLy8gR0IgMjMxMi04MFxuICAgIFsgMHgxYiwgMHgyNCwgMHgyOSwgMHg0NyBdLCAgIC8vIENOUyAxMTY0My0xOTkyIFBsYW5lIDFcbiAgICBbIDB4MWIsIDB4MjQsIDB4MkEsIDB4NDggXSwgICAvLyBDTlMgMTE2NDMtMTk5MiBQbGFuZSAyXG4gICAgWyAweDFiLCAweDI0LCAweDI5LCAweDQ1IF0sICAgLy8gSVNPLUlSLTE2NVxuICAgIFsgMHgxYiwgMHgyNCwgMHgyQiwgMHg0OSBdLCAgIC8vIENOUyAxMTY0My0xOTkyIFBsYW5lIDNcbiAgICBbIDB4MWIsIDB4MjQsIDB4MkIsIDB4NEEgXSwgICAvLyBDTlMgMTE2NDMtMTk5MiBQbGFuZSA0XG4gICAgWyAweDFiLCAweDI0LCAweDJCLCAweDRCIF0sICAgLy8gQ05TIDExNjQzLTE5OTIgUGxhbmUgNVxuICAgIFsgMHgxYiwgMHgyNCwgMHgyQiwgMHg0QyBdLCAgIC8vIENOUyAxMTY0My0xOTkyIFBsYW5lIDZcbiAgICBbIDB4MWIsIDB4MjQsIDB4MkIsIDB4NEQgXSwgICAvLyBDTlMgMTE2NDMtMTk5MiBQbGFuZSA3XG4gICAgWyAweDFiLCAweDRlIF0sICAgICAgICAgICAgICAgLy8gU1MyXG4gICAgWyAweDFiLCAweDRmIF0gICAgICAgICAgICAgICAgLy8gU1MzXG4gIF07XG59O1xudXRpbC5pbmhlcml0cyhtb2R1bGUuZXhwb3J0cy5JU09fMjAyMl9DTiwgSVNPXzIwMjIpO1xuIiwiXG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xuXG52YXIgdXRmOCAgPSByZXF1aXJlKCcuL2VuY29kaW5nL3V0ZjgnKSxcbiAgdW5pY29kZSA9IHJlcXVpcmUoJy4vZW5jb2RpbmcvdW5pY29kZScpLFxuICBtYmNzICAgID0gcmVxdWlyZSgnLi9lbmNvZGluZy9tYmNzJyksXG4gIHNiY3MgICAgPSByZXF1aXJlKCcuL2VuY29kaW5nL3NiY3MnKSxcbiAgaXNvMjAyMiA9IHJlcXVpcmUoJy4vZW5jb2RpbmcvaXNvMjAyMicpO1xuXG52YXIgc2VsZiA9IHRoaXM7XG5cbnZhciByZWNvZ25pc2VycyA9IFtcbiAgbmV3IHV0ZjgsXG4gIG5ldyB1bmljb2RlLlVURl8xNkJFLFxuICBuZXcgdW5pY29kZS5VVEZfMTZMRSxcbiAgbmV3IHVuaWNvZGUuVVRGXzMyQkUsXG4gIG5ldyB1bmljb2RlLlVURl8zMkxFLFxuICBuZXcgbWJjcy5zamlzLFxuICBuZXcgbWJjcy5iaWc1LFxuICBuZXcgbWJjcy5ldWNfanAsXG4gIG5ldyBtYmNzLmV1Y19rcixcbiAgbmV3IG1iY3MuZ2JfMTgwMzAsXG4gIG5ldyBpc28yMDIyLklTT18yMDIyX0pQLFxuICBuZXcgaXNvMjAyMi5JU09fMjAyMl9LUixcbiAgbmV3IGlzbzIwMjIuSVNPXzIwMjJfQ04sXG4gIG5ldyBzYmNzLklTT184ODU5XzEsXG4gIG5ldyBzYmNzLklTT184ODU5XzIsXG4gIG5ldyBzYmNzLklTT184ODU5XzUsXG4gIG5ldyBzYmNzLklTT184ODU5XzYsXG4gIG5ldyBzYmNzLklTT184ODU5XzcsXG4gIG5ldyBzYmNzLklTT184ODU5XzgsXG4gIG5ldyBzYmNzLklTT184ODU5XzksXG4gIG5ldyBzYmNzLndpbmRvd3NfMTI1MSxcbiAgbmV3IHNiY3Mud2luZG93c18xMjU2LFxuICBuZXcgc2Jjcy5LT0k4X1Jcbl07XG5cbm1vZHVsZS5leHBvcnRzLmRldGVjdCA9IGZ1bmN0aW9uKGJ1ZmZlciwgb3B0cykge1xuXG4gIC8vIFRhbGx5IHVwIHRoZSBieXRlIG9jY3VyZW5jZSBzdGF0aXN0aWNzLlxuICB2YXIgZkJ5dGVTdGF0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKVxuICAgIGZCeXRlU3RhdHNbaV0gPSAwO1xuXG4gIGZvciAodmFyIGkgPSBidWZmZXIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXG4gICAgZkJ5dGVTdGF0c1tidWZmZXJbaV0gJiAweDAwZmZdKys7XG5cbiAgdmFyIGZDMUJ5dGVzID0gZmFsc2U7XG4gIGZvciAodmFyIGkgPSAweDgwOyBpIDw9IDB4OUY7IGkgKz0gMSkge1xuICAgIGlmIChmQnl0ZVN0YXRzW2ldICE9IDApIHtcbiAgICAgIGZDMUJ5dGVzID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgIGZCeXRlU3RhdHM6ICBmQnl0ZVN0YXRzLFxuICAgIGZDMUJ5dGVzOiAgICBmQzFCeXRlcyxcbiAgICBmUmF3SW5wdXQ6ICAgYnVmZmVyLFxuICAgIGZSYXdMZW5ndGg6ICBidWZmZXIubGVuZ3RoLFxuICAgIGZJbnB1dEJ5dGVzOiBidWZmZXIsXG4gICAgZklucHV0TGVuOiAgIGJ1ZmZlci5sZW5ndGhcbiAgfTtcblxuICB2YXIgbWF0Y2hlcyA9IHJlY29nbmlzZXJzLm1hcChmdW5jdGlvbihyZWMpIHtcbiAgICByZXR1cm4gcmVjLm1hdGNoKGNvbnRleHQpO1xuICB9KS5maWx0ZXIoZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gISFtYXRjaDtcbiAgfSkuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGIuY29uZmlkZW5jZSAtIGEuY29uZmlkZW5jZTtcbiAgfSk7XG5cbiAgaWYgKG9wdHMgJiYgb3B0cy5yZXR1cm5BbGxNYXRjaGVzID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cbiAgZWxzZSB7XG4gICAgcmV0dXJuIG1hdGNoZXMubGVuZ3RoID4gMCA/IG1hdGNoZXNbMF0ubmFtZSA6IG51bGw7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLmRldGVjdEZpbGUgPSBmdW5jdGlvbihmaWxlcGF0aCwgb3B0cywgY2IpIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBvcHRzO1xuICAgIG9wdHMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgZmQ7XG5cbiAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbihlcnIsIGJ1ZmZlcikge1xuICAgIGlmIChmZCkge1xuICAgICAgZnMuY2xvc2VTeW5jKGZkKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyLCBudWxsKTtcbiAgICBjYihudWxsLCBzZWxmLmRldGVjdChidWZmZXIsIG9wdHMpKTtcbiAgfTtcblxuICBpZiAob3B0cyAmJiBvcHRzLnNhbXBsZVNpemUpIHtcbiAgICBmZCA9IGZzLm9wZW5TeW5jKGZpbGVwYXRoLCAncicpLFxuICAgICAgc2FtcGxlID0gQnVmZmVyLmFsbG9jVW5zYWZlKG9wdHMuc2FtcGxlU2l6ZSk7XG5cbiAgICBmcy5yZWFkKGZkLCBzYW1wbGUsIDAsIG9wdHMuc2FtcGxlU2l6ZSwgbnVsbCwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICBoYW5kbGVyKGVyciwgc2FtcGxlKTtcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmcy5yZWFkRmlsZShmaWxlcGF0aCwgaGFuZGxlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5kZXRlY3RGaWxlU3luYyA9IGZ1bmN0aW9uKGZpbGVwYXRoLCBvcHRzKSB7XG4gIGlmIChvcHRzICYmIG9wdHMuc2FtcGxlU2l6ZSkge1xuICAgIHZhciBmZCA9IGZzLm9wZW5TeW5jKGZpbGVwYXRoLCAncicpLFxuICAgICAgc2FtcGxlID0gQnVmZmVyLmFsbG9jVW5zYWZlKG9wdHMuc2FtcGxlU2l6ZSk7XG5cbiAgICBmcy5yZWFkU3luYyhmZCwgc2FtcGxlLCAwLCBvcHRzLnNhbXBsZVNpemUpO1xuICAgIGZzLmNsb3NlU3luYyhmZCk7XG4gICAgcmV0dXJuIHNlbGYuZGV0ZWN0KHNhbXBsZSwgb3B0cyk7XG4gIH1cblxuICByZXR1cm4gc2VsZi5kZXRlY3QoZnMucmVhZEZpbGVTeW5jKGZpbGVwYXRoKSwgb3B0cyk7XG59O1xuXG4vLyBXcmFwcGVycyBmb3IgdGhlIHByZXZpb3VzIGZ1bmN0aW9ucyB0byByZXR1cm4gYWxsIGVuY29kaW5nc1xubW9kdWxlLmV4cG9ydHMuZGV0ZWN0QWxsID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRzKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICBvcHRzID0ge307XG4gIH1cbiAgb3B0cy5yZXR1cm5BbGxNYXRjaGVzID0gdHJ1ZTtcbiAgcmV0dXJuIHNlbGYuZGV0ZWN0KGJ1ZmZlciwgb3B0cyk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmRldGVjdEZpbGVBbGwgPSBmdW5jdGlvbihmaWxlcGF0aCwgb3B0cywgY2IpIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBvcHRzO1xuICAgIG9wdHMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgIG9wdHMgPSB7fTtcbiAgfVxuICBvcHRzLnJldHVybkFsbE1hdGNoZXMgPSB0cnVlO1xuICBzZWxmLmRldGVjdEZpbGUoZmlsZXBhdGgsIG9wdHMsIGNiKTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZGV0ZWN0RmlsZUFsbFN5bmMgPSBmdW5jdGlvbihmaWxlcGF0aCwgb3B0cykge1xuICBpZiAodHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgb3B0cyA9IHt9O1xuICB9XG4gIG9wdHMucmV0dXJuQWxsTWF0Y2hlcyA9IHRydWU7XG4gIHJldHVybiBzZWxmLmRldGVjdEZpbGVTeW5jKGZpbGVwYXRoLCBvcHRzKTtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vZGUvbm8tZGVwcmVjYXRlZC1hcGkgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbnZhciBidWZmZXIgPSByZXF1aXJlKCdidWZmZXInKVxudmFyIEJ1ZmZlciA9IGJ1ZmZlci5CdWZmZXJcblxudmFyIHNhZmVyID0ge31cblxudmFyIGtleVxuXG5mb3IgKGtleSBpbiBidWZmZXIpIHtcbiAgaWYgKCFidWZmZXIuaGFzT3duUHJvcGVydHkoa2V5KSkgY29udGludWVcbiAgaWYgKGtleSA9PT0gJ1Nsb3dCdWZmZXInIHx8IGtleSA9PT0gJ0J1ZmZlcicpIGNvbnRpbnVlXG4gIHNhZmVyW2tleV0gPSBidWZmZXJba2V5XVxufVxuXG52YXIgU2FmZXIgPSBzYWZlci5CdWZmZXIgPSB7fVxuZm9yIChrZXkgaW4gQnVmZmVyKSB7XG4gIGlmICghQnVmZmVyLmhhc093blByb3BlcnR5KGtleSkpIGNvbnRpbnVlXG4gIGlmIChrZXkgPT09ICdhbGxvY1Vuc2FmZScgfHwga2V5ID09PSAnYWxsb2NVbnNhZmVTbG93JykgY29udGludWVcbiAgU2FmZXJba2V5XSA9IEJ1ZmZlcltrZXldXG59XG5cbnNhZmVyLkJ1ZmZlci5wcm90b3R5cGUgPSBCdWZmZXIucHJvdG90eXBlXG5cbmlmICghU2FmZXIuZnJvbSB8fCBTYWZlci5mcm9tID09PSBVaW50OEFycmF5LmZyb20pIHtcbiAgU2FmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiB2YWx1ZSlcbiAgICB9XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gQnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cbn1cblxuaWYgKCFTYWZlci5hbGxvYykge1xuICBTYWZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICAgIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2Ygc2l6ZSlcbiAgICB9XG4gICAgaWYgKHNpemUgPCAwIHx8IHNpemUgPj0gMiAqICgxIDw8IDMwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyBzaXplICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpXG4gICAgfVxuICAgIHZhciBidWYgPSBCdWZmZXIoc2l6ZSlcbiAgICBpZiAoIWZpbGwgfHwgZmlsbC5sZW5ndGggPT09IDApIHtcbiAgICAgIGJ1Zi5maWxsKDApXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICBidWYuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmLmZpbGwoZmlsbClcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZlxuICB9XG59XG5cbmlmICghc2FmZXIua1N0cmluZ01heExlbmd0aCkge1xuICB0cnkge1xuICAgIHNhZmVyLmtTdHJpbmdNYXhMZW5ndGggPSBwcm9jZXNzLmJpbmRpbmcoJ2J1ZmZlcicpLmtTdHJpbmdNYXhMZW5ndGhcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIHdlIGNhbid0IGRldGVybWluZSBrU3RyaW5nTWF4TGVuZ3RoIGluIGVudmlyb25tZW50cyB3aGVyZSBwcm9jZXNzLmJpbmRpbmdcbiAgICAvLyBpcyB1bnN1cHBvcnRlZCwgc28gbGV0J3Mgbm90IHNldCBpdFxuICB9XG59XG5cbmlmICghc2FmZXIuY29uc3RhbnRzKSB7XG4gIHNhZmVyLmNvbnN0YW50cyA9IHtcbiAgICBNQVhfTEVOR1RIOiBzYWZlci5rTWF4TGVuZ3RoXG4gIH1cbiAgaWYgKHNhZmVyLmtTdHJpbmdNYXhMZW5ndGgpIHtcbiAgICBzYWZlci5jb25zdGFudHMuTUFYX1NUUklOR19MRU5HVEggPSBzYWZlci5rU3RyaW5nTWF4TGVuZ3RoXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzYWZlclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBCT01DaGFyID0gJ1xcdUZFRkYnO1xuXG5leHBvcnRzLlByZXBlbmRCT00gPSBQcmVwZW5kQk9NV3JhcHBlclxuZnVuY3Rpb24gUHJlcGVuZEJPTVdyYXBwZXIoZW5jb2Rlciwgb3B0aW9ucykge1xuICAgIHRoaXMuZW5jb2RlciA9IGVuY29kZXI7XG4gICAgdGhpcy5hZGRCT00gPSB0cnVlO1xufVxuXG5QcmVwZW5kQk9NV3JhcHBlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICBpZiAodGhpcy5hZGRCT00pIHtcbiAgICAgICAgc3RyID0gQk9NQ2hhciArIHN0cjtcbiAgICAgICAgdGhpcy5hZGRCT00gPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5lbmNvZGVyLndyaXRlKHN0cik7XG59XG5cblByZXBlbmRCT01XcmFwcGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5lbmNvZGVyLmVuZCgpO1xufVxuXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydHMuU3RyaXBCT00gPSBTdHJpcEJPTVdyYXBwZXI7XG5mdW5jdGlvbiBTdHJpcEJPTVdyYXBwZXIoZGVjb2Rlciwgb3B0aW9ucykge1xuICAgIHRoaXMuZGVjb2RlciA9IGRlY29kZXI7XG4gICAgdGhpcy5wYXNzID0gZmFsc2U7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbn1cblxuU3RyaXBCT01XcmFwcGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1Zikge1xuICAgIHZhciByZXMgPSB0aGlzLmRlY29kZXIud3JpdGUoYnVmKTtcbiAgICBpZiAodGhpcy5wYXNzIHx8ICFyZXMpXG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICBpZiAocmVzWzBdID09PSBCT01DaGFyKSB7XG4gICAgICAgIHJlcyA9IHJlcy5zbGljZSgxKTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuc3RyaXBCT00gPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RyaXBCT00oKTtcbiAgICB9XG5cbiAgICB0aGlzLnBhc3MgPSB0cnVlO1xuICAgIHJldHVybiByZXM7XG59XG5cblN0cmlwQk9NV3JhcHBlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVjb2Rlci5lbmQoKTtcbn1cblxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgQnVmZmVyID0gcmVxdWlyZShcInNhZmVyLWJ1ZmZlclwiKS5CdWZmZXI7XG5cbi8vIEV4cG9ydCBOb2RlLmpzIGludGVybmFsIGVuY29kaW5ncy5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLy8gRW5jb2RpbmdzXG4gICAgdXRmODogICB7IHR5cGU6IFwiX2ludGVybmFsXCIsIGJvbUF3YXJlOiB0cnVlfSxcbiAgICBjZXN1ODogIHsgdHlwZTogXCJfaW50ZXJuYWxcIiwgYm9tQXdhcmU6IHRydWV9LFxuICAgIHVuaWNvZGUxMXV0Zjg6IFwidXRmOFwiLFxuXG4gICAgdWNzMjogICB7IHR5cGU6IFwiX2ludGVybmFsXCIsIGJvbUF3YXJlOiB0cnVlfSxcbiAgICB1dGYxNmxlOiBcInVjczJcIixcblxuICAgIGJpbmFyeTogeyB0eXBlOiBcIl9pbnRlcm5hbFwiIH0sXG4gICAgYmFzZTY0OiB7IHR5cGU6IFwiX2ludGVybmFsXCIgfSxcbiAgICBoZXg6ICAgIHsgdHlwZTogXCJfaW50ZXJuYWxcIiB9LFxuXG4gICAgLy8gQ29kZWMuXG4gICAgX2ludGVybmFsOiBJbnRlcm5hbENvZGVjLFxufTtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gSW50ZXJuYWxDb2RlYyhjb2RlY09wdGlvbnMsIGljb252KSB7XG4gICAgdGhpcy5lbmMgPSBjb2RlY09wdGlvbnMuZW5jb2RpbmdOYW1lO1xuICAgIHRoaXMuYm9tQXdhcmUgPSBjb2RlY09wdGlvbnMuYm9tQXdhcmU7XG5cbiAgICBpZiAodGhpcy5lbmMgPT09IFwiYmFzZTY0XCIpXG4gICAgICAgIHRoaXMuZW5jb2RlciA9IEludGVybmFsRW5jb2RlckJhc2U2NDtcbiAgICBlbHNlIGlmICh0aGlzLmVuYyA9PT0gXCJjZXN1OFwiKSB7XG4gICAgICAgIHRoaXMuZW5jID0gXCJ1dGY4XCI7IC8vIFVzZSB1dGY4IGZvciBkZWNvZGluZy5cbiAgICAgICAgdGhpcy5lbmNvZGVyID0gSW50ZXJuYWxFbmNvZGVyQ2VzdTg7XG5cbiAgICAgICAgLy8gQWRkIGRlY29kZXIgZm9yIHZlcnNpb25zIG9mIE5vZGUgbm90IHN1cHBvcnRpbmcgQ0VTVS04XG4gICAgICAgIGlmIChCdWZmZXIuZnJvbSgnZWRhMGJkZWRiMmE5JywgJ2hleCcpLnRvU3RyaW5nKCkgIT09ICfwn5KpJykge1xuICAgICAgICAgICAgdGhpcy5kZWNvZGVyID0gSW50ZXJuYWxEZWNvZGVyQ2VzdTg7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZSA9IGljb252LmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuSW50ZXJuYWxDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IEludGVybmFsRW5jb2RlcjtcbkludGVybmFsQ29kZWMucHJvdG90eXBlLmRlY29kZXIgPSBJbnRlcm5hbERlY29kZXI7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFdlIHVzZSBub2RlLmpzIGludGVybmFsIGRlY29kZXIuIEl0cyBzaWduYXR1cmUgaXMgdGhlIHNhbWUgYXMgb3Vycy5cbnZhciBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXInKS5TdHJpbmdEZWNvZGVyO1xuXG5pZiAoIVN0cmluZ0RlY29kZXIucHJvdG90eXBlLmVuZCkgLy8gTm9kZSB2MC44IGRvZXNuJ3QgaGF2ZSB0aGlzIG1ldGhvZC5cbiAgICBTdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHt9O1xuXG5cbmZ1bmN0aW9uIEludGVybmFsRGVjb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIFN0cmluZ0RlY29kZXIuY2FsbCh0aGlzLCBjb2RlYy5lbmMpO1xufVxuXG5JbnRlcm5hbERlY29kZXIucHJvdG90eXBlID0gU3RyaW5nRGVjb2Rlci5wcm90b3R5cGU7XG5cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEVuY29kZXIgaXMgbW9zdGx5IHRyaXZpYWxcblxuZnVuY3Rpb24gSW50ZXJuYWxFbmNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5lbmMgPSBjb2RlYy5lbmM7XG59XG5cbkludGVybmFsRW5jb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oc3RyLCB0aGlzLmVuYyk7XG59XG5cbkludGVybmFsRW5jb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG59XG5cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEV4Y2VwdCBiYXNlNjQgZW5jb2Rlciwgd2hpY2ggbXVzdCBrZWVwIGl0cyBzdGF0ZS5cblxuZnVuY3Rpb24gSW50ZXJuYWxFbmNvZGVyQmFzZTY0KG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5wcmV2U3RyID0gJyc7XG59XG5cbkludGVybmFsRW5jb2RlckJhc2U2NC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICBzdHIgPSB0aGlzLnByZXZTdHIgKyBzdHI7XG4gICAgdmFyIGNvbXBsZXRlUXVhZHMgPSBzdHIubGVuZ3RoIC0gKHN0ci5sZW5ndGggJSA0KTtcbiAgICB0aGlzLnByZXZTdHIgPSBzdHIuc2xpY2UoY29tcGxldGVRdWFkcyk7XG4gICAgc3RyID0gc3RyLnNsaWNlKDAsIGNvbXBsZXRlUXVhZHMpO1xuXG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHN0ciwgXCJiYXNlNjRcIik7XG59XG5cbkludGVybmFsRW5jb2RlckJhc2U2NC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMucHJldlN0ciwgXCJiYXNlNjRcIik7XG59XG5cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENFU1UtOCBlbmNvZGVyIGlzIGFsc28gc3BlY2lhbC5cblxuZnVuY3Rpb24gSW50ZXJuYWxFbmNvZGVyQ2VzdTgob3B0aW9ucywgY29kZWMpIHtcbn1cblxuSW50ZXJuYWxFbmNvZGVyQ2VzdTgucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvYyhzdHIubGVuZ3RoICogMyksIGJ1ZklkeCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIE5haXZlIGltcGxlbWVudGF0aW9uLCBidXQgaXQgd29ya3MgYmVjYXVzZSBDRVNVLTggaXMgZXNwZWNpYWxseSBlYXN5XG4gICAgICAgIC8vIHRvIGNvbnZlcnQgZnJvbSBVVEYtMTYgKHdoaWNoIGFsbCBKUyBzdHJpbmdzIGFyZSBlbmNvZGVkIGluKS5cbiAgICAgICAgaWYgKGNoYXJDb2RlIDwgMHg4MClcbiAgICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSBjaGFyQ29kZTtcbiAgICAgICAgZWxzZSBpZiAoY2hhckNvZGUgPCAweDgwMCkge1xuICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IDB4QzAgKyAoY2hhckNvZGUgPj4+IDYpO1xuICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IDB4ODAgKyAoY2hhckNvZGUgJiAweDNmKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHsgLy8gY2hhckNvZGUgd2lsbCBhbHdheXMgYmUgPCAweDEwMDAwIGluIGphdmFzY3JpcHQuXG4gICAgICAgICAgICBidWZbYnVmSWR4KytdID0gMHhFMCArIChjaGFyQ29kZSA+Pj4gMTIpO1xuICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IDB4ODAgKyAoKGNoYXJDb2RlID4+PiA2KSAmIDB4M2YpO1xuICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IDB4ODAgKyAoY2hhckNvZGUgJiAweDNmKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYnVmLnNsaWNlKDAsIGJ1ZklkeCk7XG59XG5cbkludGVybmFsRW5jb2RlckNlc3U4LnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENFU1UtOCBkZWNvZGVyIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBOb2RlIHY0LjArXG5cbmZ1bmN0aW9uIEludGVybmFsRGVjb2RlckNlc3U4KG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5hY2MgPSAwO1xuICAgIHRoaXMuY29udEJ5dGVzID0gMDtcbiAgICB0aGlzLmFjY0J5dGVzID0gMDtcbiAgICB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZSA9IGNvZGVjLmRlZmF1bHRDaGFyVW5pY29kZTtcbn1cblxuSW50ZXJuYWxEZWNvZGVyQ2VzdTgucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgdmFyIGFjYyA9IHRoaXMuYWNjLCBjb250Qnl0ZXMgPSB0aGlzLmNvbnRCeXRlcywgYWNjQnl0ZXMgPSB0aGlzLmFjY0J5dGVzLCBcbiAgICAgICAgcmVzID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGN1ckJ5dGUgPSBidWZbaV07XG4gICAgICAgIGlmICgoY3VyQnl0ZSAmIDB4QzApICE9PSAweDgwKSB7IC8vIExlYWRpbmcgYnl0ZVxuICAgICAgICAgICAgaWYgKGNvbnRCeXRlcyA+IDApIHsgLy8gUHJldmlvdXMgY29kZSBpcyBpbnZhbGlkXG4gICAgICAgICAgICAgICAgcmVzICs9IHRoaXMuZGVmYXVsdENoYXJVbmljb2RlO1xuICAgICAgICAgICAgICAgIGNvbnRCeXRlcyA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjdXJCeXRlIDwgMHg4MCkgeyAvLyBTaW5nbGUtYnl0ZSBjb2RlXG4gICAgICAgICAgICAgICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY3VyQnl0ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1ckJ5dGUgPCAweEUwKSB7IC8vIFR3by1ieXRlIGNvZGVcbiAgICAgICAgICAgICAgICBhY2MgPSBjdXJCeXRlICYgMHgxRjtcbiAgICAgICAgICAgICAgICBjb250Qnl0ZXMgPSAxOyBhY2NCeXRlcyA9IDE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1ckJ5dGUgPCAweEYwKSB7IC8vIFRocmVlLWJ5dGUgY29kZVxuICAgICAgICAgICAgICAgIGFjYyA9IGN1ckJ5dGUgJiAweDBGO1xuICAgICAgICAgICAgICAgIGNvbnRCeXRlcyA9IDI7IGFjY0J5dGVzID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIEZvdXIgb3IgbW9yZSBhcmUgbm90IHN1cHBvcnRlZCBmb3IgQ0VTVS04LlxuICAgICAgICAgICAgICAgIHJlcyArPSB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHsgLy8gQ29udGludWF0aW9uIGJ5dGVcbiAgICAgICAgICAgIGlmIChjb250Qnl0ZXMgPiAwKSB7IC8vIFdlJ3JlIHdhaXRpbmcgZm9yIGl0LlxuICAgICAgICAgICAgICAgIGFjYyA9IChhY2MgPDwgNikgfCAoY3VyQnl0ZSAmIDB4M2YpO1xuICAgICAgICAgICAgICAgIGNvbnRCeXRlcy0tOyBhY2NCeXRlcysrO1xuICAgICAgICAgICAgICAgIGlmIChjb250Qnl0ZXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIG92ZXJsb25nIGVuY29kaW5nLCBidXQgc3VwcG9ydCBNb2RpZmllZCBVVEYtOCAoZW5jb2RpbmcgTlVMTCBhcyBDMCA4MClcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjY0J5dGVzID09PSAyICYmIGFjYyA8IDB4ODAgJiYgYWNjID4gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcyArPSB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYWNjQnl0ZXMgPT09IDMgJiYgYWNjIDwgMHg4MDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXMgKz0gdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFjdHVhbGx5IGFkZCBjaGFyYWN0ZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShhY2MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIFVuZXhwZWN0ZWQgY29udGludWF0aW9uIGJ5dGVcbiAgICAgICAgICAgICAgICByZXMgKz0gdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hY2MgPSBhY2M7IHRoaXMuY29udEJ5dGVzID0gY29udEJ5dGVzOyB0aGlzLmFjY0J5dGVzID0gYWNjQnl0ZXM7XG4gICAgcmV0dXJuIHJlcztcbn1cblxuSW50ZXJuYWxEZWNvZGVyQ2VzdTgucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZXMgPSAwO1xuICAgIGlmICh0aGlzLmNvbnRCeXRlcyA+IDApXG4gICAgICAgIHJlcyArPSB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICByZXR1cm4gcmVzO1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgQnVmZmVyID0gcmVxdWlyZShcInNhZmVyLWJ1ZmZlclwiKS5CdWZmZXI7XG5cbi8vIE5vdGU6IFVURjE2LUxFIChvciBVQ1MyKSBjb2RlYyBpcyBOb2RlLmpzIG5hdGl2ZS4gU2VlIGVuY29kaW5ncy9pbnRlcm5hbC5qc1xuXG4vLyA9PSBVVEYxNi1CRSBjb2RlYy4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnRzLnV0ZjE2YmUgPSBVdGYxNkJFQ29kZWM7XG5mdW5jdGlvbiBVdGYxNkJFQ29kZWMoKSB7XG59XG5cblV0ZjE2QkVDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IFV0ZjE2QkVFbmNvZGVyO1xuVXRmMTZCRUNvZGVjLnByb3RvdHlwZS5kZWNvZGVyID0gVXRmMTZCRURlY29kZXI7XG5VdGYxNkJFQ29kZWMucHJvdG90eXBlLmJvbUF3YXJlID0gdHJ1ZTtcblxuXG4vLyAtLSBFbmNvZGluZ1xuXG5mdW5jdGlvbiBVdGYxNkJFRW5jb2RlcigpIHtcbn1cblxuVXRmMTZCRUVuY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgdmFyIGJ1ZiA9IEJ1ZmZlci5mcm9tKHN0ciwgJ3VjczInKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICB2YXIgdG1wID0gYnVmW2ldOyBidWZbaV0gPSBidWZbaSsxXTsgYnVmW2krMV0gPSB0bXA7XG4gICAgfVxuICAgIHJldHVybiBidWY7XG59XG5cblV0ZjE2QkVFbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbn1cblxuXG4vLyAtLSBEZWNvZGluZ1xuXG5mdW5jdGlvbiBVdGYxNkJFRGVjb2RlcigpIHtcbiAgICB0aGlzLm92ZXJmbG93Qnl0ZSA9IC0xO1xufVxuXG5VdGYxNkJFRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWYpIHtcbiAgICBpZiAoYnVmLmxlbmd0aCA9PSAwKVxuICAgICAgICByZXR1cm4gJyc7XG5cbiAgICB2YXIgYnVmMiA9IEJ1ZmZlci5hbGxvYyhidWYubGVuZ3RoICsgMSksXG4gICAgICAgIGkgPSAwLCBqID0gMDtcblxuICAgIGlmICh0aGlzLm92ZXJmbG93Qnl0ZSAhPT0gLTEpIHtcbiAgICAgICAgYnVmMlswXSA9IGJ1ZlswXTtcbiAgICAgICAgYnVmMlsxXSA9IHRoaXMub3ZlcmZsb3dCeXRlO1xuICAgICAgICBpID0gMTsgaiA9IDI7XG4gICAgfVxuXG4gICAgZm9yICg7IGkgPCBidWYubGVuZ3RoLTE7IGkgKz0gMiwgais9IDIpIHtcbiAgICAgICAgYnVmMltqXSA9IGJ1ZltpKzFdO1xuICAgICAgICBidWYyW2orMV0gPSBidWZbaV07XG4gICAgfVxuXG4gICAgdGhpcy5vdmVyZmxvd0J5dGUgPSAoaSA9PSBidWYubGVuZ3RoLTEpID8gYnVmW2J1Zi5sZW5ndGgtMV0gOiAtMTtcblxuICAgIHJldHVybiBidWYyLnNsaWNlKDAsIGopLnRvU3RyaW5nKCd1Y3MyJyk7XG59XG5cblV0ZjE2QkVEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbn1cblxuXG4vLyA9PSBVVEYtMTYgY29kZWMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGVjb2RlciBjaG9vc2VzIGF1dG9tYXRpY2FsbHkgZnJvbSBVVEYtMTZMRSBhbmQgVVRGLTE2QkUgdXNpbmcgQk9NIGFuZCBzcGFjZS1iYXNlZCBoZXVyaXN0aWMuXG4vLyBEZWZhdWx0cyB0byBVVEYtMTZMRSwgYXMgaXQncyBwcmV2YWxlbnQgYW5kIGRlZmF1bHQgaW4gTm9kZS5cbi8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVVRGLTE2IGFuZCBodHRwOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyN1dGYtMTZsZVxuLy8gRGVjb2RlciBkZWZhdWx0IGNhbiBiZSBjaGFuZ2VkOiBpY29udi5kZWNvZGUoYnVmLCAndXRmMTYnLCB7ZGVmYXVsdEVuY29kaW5nOiAndXRmLTE2YmUnfSk7XG5cbi8vIEVuY29kZXIgdXNlcyBVVEYtMTZMRSBhbmQgcHJlcGVuZHMgQk9NICh3aGljaCBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIGFkZEJPTTogZmFsc2UpLlxuXG5leHBvcnRzLnV0ZjE2ID0gVXRmMTZDb2RlYztcbmZ1bmN0aW9uIFV0ZjE2Q29kZWMoY29kZWNPcHRpb25zLCBpY29udikge1xuICAgIHRoaXMuaWNvbnYgPSBpY29udjtcbn1cblxuVXRmMTZDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IFV0ZjE2RW5jb2RlcjtcblV0ZjE2Q29kZWMucHJvdG90eXBlLmRlY29kZXIgPSBVdGYxNkRlY29kZXI7XG5cblxuLy8gLS0gRW5jb2RpbmcgKHBhc3MtdGhyb3VnaClcblxuZnVuY3Rpb24gVXRmMTZFbmNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKG9wdGlvbnMuYWRkQk9NID09PSB1bmRlZmluZWQpXG4gICAgICAgIG9wdGlvbnMuYWRkQk9NID0gdHJ1ZTtcbiAgICB0aGlzLmVuY29kZXIgPSBjb2RlYy5pY29udi5nZXRFbmNvZGVyKCd1dGYtMTZsZScsIG9wdGlvbnMpO1xufVxuXG5VdGYxNkVuY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5jb2Rlci53cml0ZShzdHIpO1xufVxuXG5VdGYxNkVuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmVuY29kZXIuZW5kKCk7XG59XG5cblxuLy8gLS0gRGVjb2RpbmdcblxuZnVuY3Rpb24gVXRmMTZEZWNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5kZWNvZGVyID0gbnVsbDtcbiAgICB0aGlzLmluaXRpYWxCeXRlcyA9IFtdO1xuICAgIHRoaXMuaW5pdGlhbEJ5dGVzTGVuID0gMDtcblxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGhpcy5pY29udiA9IGNvZGVjLmljb252O1xufVxuXG5VdGYxNkRlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgaWYgKCF0aGlzLmRlY29kZXIpIHtcbiAgICAgICAgLy8gQ29kZWMgaXMgbm90IGNob3NlbiB5ZXQuIEFjY3VtdWxhdGUgaW5pdGlhbCBieXRlcy5cbiAgICAgICAgdGhpcy5pbml0aWFsQnl0ZXMucHVzaChidWYpO1xuICAgICAgICB0aGlzLmluaXRpYWxCeXRlc0xlbiArPSBidWYubGVuZ3RoO1xuICAgICAgICBcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbEJ5dGVzTGVuIDwgMTYpIC8vIFdlIG5lZWQgbW9yZSBieXRlcyB0byB1c2Ugc3BhY2UgaGV1cmlzdGljIChzZWUgYmVsb3cpXG4gICAgICAgICAgICByZXR1cm4gJyc7XG5cbiAgICAgICAgLy8gV2UgaGF2ZSBlbm91Z2ggYnl0ZXMgLT4gZGV0ZWN0IGVuZGlhbm5lc3MuXG4gICAgICAgIHZhciBidWYgPSBCdWZmZXIuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSxcbiAgICAgICAgICAgIGVuY29kaW5nID0gZGV0ZWN0RW5jb2RpbmcoYnVmLCB0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTtcbiAgICAgICAgdGhpcy5kZWNvZGVyID0gdGhpcy5pY29udi5nZXREZWNvZGVyKGVuY29kaW5nLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLmluaXRpYWxCeXRlcy5sZW5ndGggPSB0aGlzLmluaXRpYWxCeXRlc0xlbiA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVjb2Rlci53cml0ZShidWYpO1xufVxuXG5VdGYxNkRlY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5kZWNvZGVyKSB7XG4gICAgICAgIHZhciBidWYgPSBCdWZmZXIuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSxcbiAgICAgICAgICAgIGVuY29kaW5nID0gZGV0ZWN0RW5jb2RpbmcoYnVmLCB0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTtcbiAgICAgICAgdGhpcy5kZWNvZGVyID0gdGhpcy5pY29udi5nZXREZWNvZGVyKGVuY29kaW5nLCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgICAgIHZhciByZXMgPSB0aGlzLmRlY29kZXIud3JpdGUoYnVmKSxcbiAgICAgICAgICAgIHRyYWlsID0gdGhpcy5kZWNvZGVyLmVuZCgpO1xuXG4gICAgICAgIHJldHVybiB0cmFpbCA/IChyZXMgKyB0cmFpbCkgOiByZXM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlY29kZXIuZW5kKCk7XG59XG5cbmZ1bmN0aW9uIGRldGVjdEVuY29kaW5nKGJ1ZiwgZGVmYXVsdEVuY29kaW5nKSB7XG4gICAgdmFyIGVuYyA9IGRlZmF1bHRFbmNvZGluZyB8fCAndXRmLTE2bGUnO1xuXG4gICAgaWYgKGJ1Zi5sZW5ndGggPj0gMikge1xuICAgICAgICAvLyBDaGVjayBCT00uXG4gICAgICAgIGlmIChidWZbMF0gPT0gMHhGRSAmJiBidWZbMV0gPT0gMHhGRikgLy8gVVRGLTE2QkUgQk9NXG4gICAgICAgICAgICBlbmMgPSAndXRmLTE2YmUnO1xuICAgICAgICBlbHNlIGlmIChidWZbMF0gPT0gMHhGRiAmJiBidWZbMV0gPT0gMHhGRSkgLy8gVVRGLTE2TEUgQk9NXG4gICAgICAgICAgICBlbmMgPSAndXRmLTE2bGUnO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vIEJPTSBmb3VuZC4gVHJ5IHRvIGRlZHVjZSBlbmNvZGluZyBmcm9tIGluaXRpYWwgY29udGVudC5cbiAgICAgICAgICAgIC8vIE1vc3Qgb2YgdGhlIHRpbWUsIHRoZSBjb250ZW50IGhhcyBBU0NJSSBjaGFycyAoVSswMCoqKSwgYnV0IHRoZSBvcHBvc2l0ZSAoVSsqKjAwKSBpcyB1bmNvbW1vbi5cbiAgICAgICAgICAgIC8vIFNvLCB3ZSBjb3VudCBBU0NJSSBhcyBpZiBpdCB3YXMgTEUgb3IgQkUsIGFuZCBkZWNpZGUgZnJvbSB0aGF0LlxuICAgICAgICAgICAgdmFyIGFzY2lpQ2hhcnNMRSA9IDAsIGFzY2lpQ2hhcnNCRSA9IDAsIC8vIENvdW50cyBvZiBjaGFycyBpbiBib3RoIHBvc2l0aW9uc1xuICAgICAgICAgICAgICAgIF9sZW4gPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gKGJ1Zi5sZW5ndGggJSAyKSwgNjQpOyAvLyBMZW4gaXMgYWx3YXlzIGV2ZW4uXG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX2xlbjsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJ1ZltpXSA9PT0gMCAmJiBidWZbaSsxXSAhPT0gMCkgYXNjaWlDaGFyc0JFKys7XG4gICAgICAgICAgICAgICAgaWYgKGJ1ZltpXSAhPT0gMCAmJiBidWZbaSsxXSA9PT0gMCkgYXNjaWlDaGFyc0xFKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChhc2NpaUNoYXJzQkUgPiBhc2NpaUNoYXJzTEUpXG4gICAgICAgICAgICAgICAgZW5jID0gJ3V0Zi0xNmJlJztcbiAgICAgICAgICAgIGVsc2UgaWYgKGFzY2lpQ2hhcnNCRSA8IGFzY2lpQ2hhcnNMRSlcbiAgICAgICAgICAgICAgICBlbmMgPSAndXRmLTE2bGUnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuYztcbn1cblxuXG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBCdWZmZXIgPSByZXF1aXJlKFwic2FmZXItYnVmZmVyXCIpLkJ1ZmZlcjtcblxuLy8gVVRGLTcgY29kZWMsIGFjY29yZGluZyB0byBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjE1MlxuLy8gU2VlIGFsc28gYmVsb3cgYSBVVEYtNy1JTUFQIGNvZGVjLCBhY2NvcmRpbmcgdG8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzUwMSNzZWN0aW9uLTUuMS4zXG5cbmV4cG9ydHMudXRmNyA9IFV0ZjdDb2RlYztcbmV4cG9ydHMudW5pY29kZTExdXRmNyA9ICd1dGY3JzsgLy8gQWxpYXMgVU5JQ09ERS0xLTEtVVRGLTdcbmZ1bmN0aW9uIFV0ZjdDb2RlYyhjb2RlY09wdGlvbnMsIGljb252KSB7XG4gICAgdGhpcy5pY29udiA9IGljb252O1xufTtcblxuVXRmN0NvZGVjLnByb3RvdHlwZS5lbmNvZGVyID0gVXRmN0VuY29kZXI7XG5VdGY3Q29kZWMucHJvdG90eXBlLmRlY29kZXIgPSBVdGY3RGVjb2RlcjtcblV0ZjdDb2RlYy5wcm90b3R5cGUuYm9tQXdhcmUgPSB0cnVlO1xuXG5cbi8vIC0tIEVuY29kaW5nXG5cbnZhciBub25EaXJlY3RDaGFycyA9IC9bXkEtWmEtejAtOSdcXChcXCksLVxcLlxcLzpcXD8gXFxuXFxyXFx0XSsvZztcblxuZnVuY3Rpb24gVXRmN0VuY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmljb252ID0gY29kZWMuaWNvbnY7XG59XG5cblV0ZjdFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIC8vIE5haXZlIGltcGxlbWVudGF0aW9uLlxuICAgIC8vIE5vbi1kaXJlY3QgY2hhcnMgYXJlIGVuY29kZWQgYXMgXCIrPGJhc2U2ND4tXCI7IHNpbmdsZSBcIitcIiBjaGFyIGlzIGVuY29kZWQgYXMgXCIrLVwiLlxuICAgIHJldHVybiBCdWZmZXIuZnJvbShzdHIucmVwbGFjZShub25EaXJlY3RDaGFycywgZnVuY3Rpb24oY2h1bmspIHtcbiAgICAgICAgcmV0dXJuIFwiK1wiICsgKGNodW5rID09PSAnKycgPyAnJyA6IFxuICAgICAgICAgICAgdGhpcy5pY29udi5lbmNvZGUoY2h1bmssICd1dGYxNi1iZScpLnRvU3RyaW5nKCdiYXNlNjQnKS5yZXBsYWNlKC89KyQvLCAnJykpIFxuICAgICAgICAgICAgKyBcIi1cIjtcbiAgICB9LmJpbmQodGhpcykpKTtcbn1cblxuVXRmN0VuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xufVxuXG5cbi8vIC0tIERlY29kaW5nXG5cbmZ1bmN0aW9uIFV0ZjdEZWNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5pY29udiA9IGNvZGVjLmljb252O1xuICAgIHRoaXMuaW5CYXNlNjQgPSBmYWxzZTtcbiAgICB0aGlzLmJhc2U2NEFjY3VtID0gJyc7XG59XG5cbnZhciBiYXNlNjRSZWdleCA9IC9bQS1aYS16MC05XFwvK10vO1xudmFyIGJhc2U2NENoYXJzID0gW107XG5mb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKVxuICAgIGJhc2U2NENoYXJzW2ldID0gYmFzZTY0UmVnZXgudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGkpKTtcblxudmFyIHBsdXNDaGFyID0gJysnLmNoYXJDb2RlQXQoMCksIFxuICAgIG1pbnVzQ2hhciA9ICctJy5jaGFyQ29kZUF0KDApLFxuICAgIGFuZENoYXIgPSAnJicuY2hhckNvZGVBdCgwKTtcblxuVXRmN0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgdmFyIHJlcyA9IFwiXCIsIGxhc3RJID0gMCxcbiAgICAgICAgaW5CYXNlNjQgPSB0aGlzLmluQmFzZTY0LFxuICAgICAgICBiYXNlNjRBY2N1bSA9IHRoaXMuYmFzZTY0QWNjdW07XG5cbiAgICAvLyBUaGUgZGVjb2RlciBpcyBtb3JlIGludm9sdmVkIGFzIHdlIG11c3QgaGFuZGxlIGNodW5rcyBpbiBzdHJlYW0uXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWluQmFzZTY0KSB7IC8vIFdlJ3JlIGluIGRpcmVjdCBtb2RlLlxuICAgICAgICAgICAgLy8gV3JpdGUgZGlyZWN0IGNoYXJzIHVudGlsICcrJ1xuICAgICAgICAgICAgaWYgKGJ1ZltpXSA9PSBwbHVzQ2hhcikge1xuICAgICAgICAgICAgICAgIHJlcyArPSB0aGlzLmljb252LmRlY29kZShidWYuc2xpY2UobGFzdEksIGkpLCBcImFzY2lpXCIpOyAvLyBXcml0ZSBkaXJlY3QgY2hhcnMuXG4gICAgICAgICAgICAgICAgbGFzdEkgPSBpKzE7XG4gICAgICAgICAgICAgICAgaW5CYXNlNjQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgeyAvLyBXZSBkZWNvZGUgYmFzZTY0LlxuICAgICAgICAgICAgaWYgKCFiYXNlNjRDaGFyc1tidWZbaV1dKSB7IC8vIEJhc2U2NCBlbmRlZC5cbiAgICAgICAgICAgICAgICBpZiAoaSA9PSBsYXN0SSAmJiBidWZbaV0gPT0gbWludXNDaGFyKSB7Ly8gXCIrLVwiIC0+IFwiK1wiXG4gICAgICAgICAgICAgICAgICAgIHJlcyArPSBcIitcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYjY0c3RyID0gYmFzZTY0QWNjdW0gKyBidWYuc2xpY2UobGFzdEksIGkpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlcyArPSB0aGlzLmljb252LmRlY29kZShCdWZmZXIuZnJvbShiNjRzdHIsICdiYXNlNjQnKSwgXCJ1dGYxNi1iZVwiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoYnVmW2ldICE9IG1pbnVzQ2hhcikgLy8gTWludXMgaXMgYWJzb3JiZWQgYWZ0ZXIgYmFzZTY0LlxuICAgICAgICAgICAgICAgICAgICBpLS07XG5cbiAgICAgICAgICAgICAgICBsYXN0SSA9IGkrMTtcbiAgICAgICAgICAgICAgICBpbkJhc2U2NCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJhc2U2NEFjY3VtID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWluQmFzZTY0KSB7XG4gICAgICAgIHJlcyArPSB0aGlzLmljb252LmRlY29kZShidWYuc2xpY2UobGFzdEkpLCBcImFzY2lpXCIpOyAvLyBXcml0ZSBkaXJlY3QgY2hhcnMuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGI2NHN0ciA9IGJhc2U2NEFjY3VtICsgYnVmLnNsaWNlKGxhc3RJKS50b1N0cmluZygpO1xuXG4gICAgICAgIHZhciBjYW5CZURlY29kZWQgPSBiNjRzdHIubGVuZ3RoIC0gKGI2NHN0ci5sZW5ndGggJSA4KTsgLy8gTWluaW1hbCBjaHVuazogMiBxdWFkcyAtPiAyeDMgYnl0ZXMgLT4gMyBjaGFycy5cbiAgICAgICAgYmFzZTY0QWNjdW0gPSBiNjRzdHIuc2xpY2UoY2FuQmVEZWNvZGVkKTsgLy8gVGhlIHJlc3Qgd2lsbCBiZSBkZWNvZGVkIGluIGZ1dHVyZS5cbiAgICAgICAgYjY0c3RyID0gYjY0c3RyLnNsaWNlKDAsIGNhbkJlRGVjb2RlZCk7XG5cbiAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKEJ1ZmZlci5mcm9tKGI2NHN0ciwgJ2Jhc2U2NCcpLCBcInV0ZjE2LWJlXCIpO1xuICAgIH1cblxuICAgIHRoaXMuaW5CYXNlNjQgPSBpbkJhc2U2NDtcbiAgICB0aGlzLmJhc2U2NEFjY3VtID0gYmFzZTY0QWNjdW07XG5cbiAgICByZXR1cm4gcmVzO1xufVxuXG5VdGY3RGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgaWYgKHRoaXMuaW5CYXNlNjQgJiYgdGhpcy5iYXNlNjRBY2N1bS5sZW5ndGggPiAwKVxuICAgICAgICByZXMgPSB0aGlzLmljb252LmRlY29kZShCdWZmZXIuZnJvbSh0aGlzLmJhc2U2NEFjY3VtLCAnYmFzZTY0JyksIFwidXRmMTYtYmVcIik7XG5cbiAgICB0aGlzLmluQmFzZTY0ID0gZmFsc2U7XG4gICAgdGhpcy5iYXNlNjRBY2N1bSA9ICcnO1xuICAgIHJldHVybiByZXM7XG59XG5cblxuLy8gVVRGLTctSU1BUCBjb2RlYy5cbi8vIFJGQzM1MDEgU2VjLiA1LjEuMyBNb2RpZmllZCBVVEYtNyAoaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzUwMSNzZWN0aW9uLTUuMS4zKVxuLy8gRGlmZmVyZW5jZXM6XG4vLyAgKiBCYXNlNjQgcGFydCBpcyBzdGFydGVkIGJ5IFwiJlwiIGluc3RlYWQgb2YgXCIrXCJcbi8vICAqIERpcmVjdCBjaGFyYWN0ZXJzIGFyZSAweDIwLTB4N0UsIGV4Y2VwdCBcIiZcIiAoMHgyNilcbi8vICAqIEluIEJhc2U2NCwgXCIsXCIgaXMgdXNlZCBpbnN0ZWFkIG9mIFwiL1wiXG4vLyAgKiBCYXNlNjQgbXVzdCBub3QgYmUgdXNlZCB0byByZXByZXNlbnQgZGlyZWN0IGNoYXJhY3RlcnMuXG4vLyAgKiBObyBpbXBsaWNpdCBzaGlmdCBiYWNrIGZyb20gQmFzZTY0IChzaG91bGQgYWx3YXlzIGVuZCB3aXRoICctJylcbi8vICAqIFN0cmluZyBtdXN0IGVuZCBpbiBub24tc2hpZnRlZCBwb3NpdGlvbi5cbi8vICAqIFwiLSZcIiB3aGlsZSBpbiBiYXNlNjQgaXMgbm90IGFsbG93ZWQuXG5cblxuZXhwb3J0cy51dGY3aW1hcCA9IFV0ZjdJTUFQQ29kZWM7XG5mdW5jdGlvbiBVdGY3SU1BUENvZGVjKGNvZGVjT3B0aW9ucywgaWNvbnYpIHtcbiAgICB0aGlzLmljb252ID0gaWNvbnY7XG59O1xuXG5VdGY3SU1BUENvZGVjLnByb3RvdHlwZS5lbmNvZGVyID0gVXRmN0lNQVBFbmNvZGVyO1xuVXRmN0lNQVBDb2RlYy5wcm90b3R5cGUuZGVjb2RlciA9IFV0ZjdJTUFQRGVjb2RlcjtcblV0ZjdJTUFQQ29kZWMucHJvdG90eXBlLmJvbUF3YXJlID0gdHJ1ZTtcblxuXG4vLyAtLSBFbmNvZGluZ1xuXG5mdW5jdGlvbiBVdGY3SU1BUEVuY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmljb252ID0gY29kZWMuaWNvbnY7XG4gICAgdGhpcy5pbkJhc2U2NCA9IGZhbHNlO1xuICAgIHRoaXMuYmFzZTY0QWNjdW0gPSBCdWZmZXIuYWxsb2MoNik7XG4gICAgdGhpcy5iYXNlNjRBY2N1bUlkeCA9IDA7XG59XG5cblV0ZjdJTUFQRW5jb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICB2YXIgaW5CYXNlNjQgPSB0aGlzLmluQmFzZTY0LFxuICAgICAgICBiYXNlNjRBY2N1bSA9IHRoaXMuYmFzZTY0QWNjdW0sXG4gICAgICAgIGJhc2U2NEFjY3VtSWR4ID0gdGhpcy5iYXNlNjRBY2N1bUlkeCxcbiAgICAgICAgYnVmID0gQnVmZmVyLmFsbG9jKHN0ci5sZW5ndGgqNSArIDEwKSwgYnVmSWR4ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB1Q2hhciA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAoMHgyMCA8PSB1Q2hhciAmJiB1Q2hhciA8PSAweDdFKSB7IC8vIERpcmVjdCBjaGFyYWN0ZXIgb3IgJyYnLlxuICAgICAgICAgICAgaWYgKGluQmFzZTY0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGJhc2U2NEFjY3VtSWR4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBidWZJZHggKz0gYnVmLndyaXRlKGJhc2U2NEFjY3VtLnNsaWNlKDAsIGJhc2U2NEFjY3VtSWR4KS50b1N0cmluZygnYmFzZTY0JykucmVwbGFjZSgvXFwvL2csICcsJykucmVwbGFjZSgvPSskLywgJycpLCBidWZJZHgpO1xuICAgICAgICAgICAgICAgICAgICBiYXNlNjRBY2N1bUlkeCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IG1pbnVzQ2hhcjsgLy8gV3JpdGUgJy0nLCB0aGVuIGdvIHRvIGRpcmVjdCBtb2RlLlxuICAgICAgICAgICAgICAgIGluQmFzZTY0ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaW5CYXNlNjQpIHtcbiAgICAgICAgICAgICAgICBidWZbYnVmSWR4KytdID0gdUNoYXI7IC8vIFdyaXRlIGRpcmVjdCBjaGFyYWN0ZXJcblxuICAgICAgICAgICAgICAgIGlmICh1Q2hhciA9PT0gYW5kQ2hhcikgIC8vIEFtcGVyc2FuZCAtPiAnJi0nXG4gICAgICAgICAgICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSBtaW51c0NoYXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHsgLy8gTm9uLWRpcmVjdCBjaGFyYWN0ZXJcbiAgICAgICAgICAgIGlmICghaW5CYXNlNjQpIHtcbiAgICAgICAgICAgICAgICBidWZbYnVmSWR4KytdID0gYW5kQ2hhcjsgLy8gV3JpdGUgJyYnLCB0aGVuIGdvIHRvIGJhc2U2NCBtb2RlLlxuICAgICAgICAgICAgICAgIGluQmFzZTY0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbkJhc2U2NCkge1xuICAgICAgICAgICAgICAgIGJhc2U2NEFjY3VtW2Jhc2U2NEFjY3VtSWR4KytdID0gdUNoYXIgPj4gODtcbiAgICAgICAgICAgICAgICBiYXNlNjRBY2N1bVtiYXNlNjRBY2N1bUlkeCsrXSA9IHVDaGFyICYgMHhGRjtcblxuICAgICAgICAgICAgICAgIGlmIChiYXNlNjRBY2N1bUlkeCA9PSBiYXNlNjRBY2N1bS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmSWR4ICs9IGJ1Zi53cml0ZShiYXNlNjRBY2N1bS50b1N0cmluZygnYmFzZTY0JykucmVwbGFjZSgvXFwvL2csICcsJyksIGJ1ZklkeCk7XG4gICAgICAgICAgICAgICAgICAgIGJhc2U2NEFjY3VtSWR4ID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluQmFzZTY0ID0gaW5CYXNlNjQ7XG4gICAgdGhpcy5iYXNlNjRBY2N1bUlkeCA9IGJhc2U2NEFjY3VtSWR4O1xuXG4gICAgcmV0dXJuIGJ1Zi5zbGljZSgwLCBidWZJZHgpO1xufVxuXG5VdGY3SU1BUEVuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBidWYgPSBCdWZmZXIuYWxsb2MoMTApLCBidWZJZHggPSAwO1xuICAgIGlmICh0aGlzLmluQmFzZTY0KSB7XG4gICAgICAgIGlmICh0aGlzLmJhc2U2NEFjY3VtSWR4ID4gMCkge1xuICAgICAgICAgICAgYnVmSWR4ICs9IGJ1Zi53cml0ZSh0aGlzLmJhc2U2NEFjY3VtLnNsaWNlKDAsIHRoaXMuYmFzZTY0QWNjdW1JZHgpLnRvU3RyaW5nKCdiYXNlNjQnKS5yZXBsYWNlKC9cXC8vZywgJywnKS5yZXBsYWNlKC89KyQvLCAnJyksIGJ1ZklkeCk7XG4gICAgICAgICAgICB0aGlzLmJhc2U2NEFjY3VtSWR4ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1ZltidWZJZHgrK10gPSBtaW51c0NoYXI7IC8vIFdyaXRlICctJywgdGhlbiBnbyB0byBkaXJlY3QgbW9kZS5cbiAgICAgICAgdGhpcy5pbkJhc2U2NCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBidWYuc2xpY2UoMCwgYnVmSWR4KTtcbn1cblxuXG4vLyAtLSBEZWNvZGluZ1xuXG5mdW5jdGlvbiBVdGY3SU1BUERlY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmljb252ID0gY29kZWMuaWNvbnY7XG4gICAgdGhpcy5pbkJhc2U2NCA9IGZhbHNlO1xuICAgIHRoaXMuYmFzZTY0QWNjdW0gPSAnJztcbn1cblxudmFyIGJhc2U2NElNQVBDaGFycyA9IGJhc2U2NENoYXJzLnNsaWNlKCk7XG5iYXNlNjRJTUFQQ2hhcnNbJywnLmNoYXJDb2RlQXQoMCldID0gdHJ1ZTtcblxuVXRmN0lNQVBEZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1Zikge1xuICAgIHZhciByZXMgPSBcIlwiLCBsYXN0SSA9IDAsXG4gICAgICAgIGluQmFzZTY0ID0gdGhpcy5pbkJhc2U2NCxcbiAgICAgICAgYmFzZTY0QWNjdW0gPSB0aGlzLmJhc2U2NEFjY3VtO1xuXG4gICAgLy8gVGhlIGRlY29kZXIgaXMgbW9yZSBpbnZvbHZlZCBhcyB3ZSBtdXN0IGhhbmRsZSBjaHVua3MgaW4gc3RyZWFtLlxuICAgIC8vIEl0IGlzIGZvcmdpdmluZywgY2xvc2VyIHRvIHN0YW5kYXJkIFVURi03IChmb3IgZXhhbXBsZSwgJy0nIGlzIG9wdGlvbmFsIGF0IHRoZSBlbmQpLlxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFpbkJhc2U2NCkgeyAvLyBXZSdyZSBpbiBkaXJlY3QgbW9kZS5cbiAgICAgICAgICAgIC8vIFdyaXRlIGRpcmVjdCBjaGFycyB1bnRpbCAnJidcbiAgICAgICAgICAgIGlmIChidWZbaV0gPT0gYW5kQ2hhcikge1xuICAgICAgICAgICAgICAgIHJlcyArPSB0aGlzLmljb252LmRlY29kZShidWYuc2xpY2UobGFzdEksIGkpLCBcImFzY2lpXCIpOyAvLyBXcml0ZSBkaXJlY3QgY2hhcnMuXG4gICAgICAgICAgICAgICAgbGFzdEkgPSBpKzE7XG4gICAgICAgICAgICAgICAgaW5CYXNlNjQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgeyAvLyBXZSBkZWNvZGUgYmFzZTY0LlxuICAgICAgICAgICAgaWYgKCFiYXNlNjRJTUFQQ2hhcnNbYnVmW2ldXSkgeyAvLyBCYXNlNjQgZW5kZWQuXG4gICAgICAgICAgICAgICAgaWYgKGkgPT0gbGFzdEkgJiYgYnVmW2ldID09IG1pbnVzQ2hhcikgeyAvLyBcIiYtXCIgLT4gXCImXCJcbiAgICAgICAgICAgICAgICAgICAgcmVzICs9IFwiJlwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBiNjRzdHIgPSBiYXNlNjRBY2N1bSArIGJ1Zi5zbGljZShsYXN0SSwgaSkudG9TdHJpbmcoKS5yZXBsYWNlKC8sL2csICcvJyk7XG4gICAgICAgICAgICAgICAgICAgIHJlcyArPSB0aGlzLmljb252LmRlY29kZShCdWZmZXIuZnJvbShiNjRzdHIsICdiYXNlNjQnKSwgXCJ1dGYxNi1iZVwiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoYnVmW2ldICE9IG1pbnVzQ2hhcikgLy8gTWludXMgbWF5IGJlIGFic29yYmVkIGFmdGVyIGJhc2U2NC5cbiAgICAgICAgICAgICAgICAgICAgaS0tO1xuXG4gICAgICAgICAgICAgICAgbGFzdEkgPSBpKzE7XG4gICAgICAgICAgICAgICAgaW5CYXNlNjQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBiYXNlNjRBY2N1bSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpbkJhc2U2NCkge1xuICAgICAgICByZXMgKz0gdGhpcy5pY29udi5kZWNvZGUoYnVmLnNsaWNlKGxhc3RJKSwgXCJhc2NpaVwiKTsgLy8gV3JpdGUgZGlyZWN0IGNoYXJzLlxuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBiNjRzdHIgPSBiYXNlNjRBY2N1bSArIGJ1Zi5zbGljZShsYXN0SSkudG9TdHJpbmcoKS5yZXBsYWNlKC8sL2csICcvJyk7XG5cbiAgICAgICAgdmFyIGNhbkJlRGVjb2RlZCA9IGI2NHN0ci5sZW5ndGggLSAoYjY0c3RyLmxlbmd0aCAlIDgpOyAvLyBNaW5pbWFsIGNodW5rOiAyIHF1YWRzIC0+IDJ4MyBieXRlcyAtPiAzIGNoYXJzLlxuICAgICAgICBiYXNlNjRBY2N1bSA9IGI2NHN0ci5zbGljZShjYW5CZURlY29kZWQpOyAvLyBUaGUgcmVzdCB3aWxsIGJlIGRlY29kZWQgaW4gZnV0dXJlLlxuICAgICAgICBiNjRzdHIgPSBiNjRzdHIuc2xpY2UoMCwgY2FuQmVEZWNvZGVkKTtcblxuICAgICAgICByZXMgKz0gdGhpcy5pY29udi5kZWNvZGUoQnVmZmVyLmZyb20oYjY0c3RyLCAnYmFzZTY0JyksIFwidXRmMTYtYmVcIik7XG4gICAgfVxuXG4gICAgdGhpcy5pbkJhc2U2NCA9IGluQmFzZTY0O1xuICAgIHRoaXMuYmFzZTY0QWNjdW0gPSBiYXNlNjRBY2N1bTtcblxuICAgIHJldHVybiByZXM7XG59XG5cblV0ZjdJTUFQRGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgaWYgKHRoaXMuaW5CYXNlNjQgJiYgdGhpcy5iYXNlNjRBY2N1bS5sZW5ndGggPiAwKVxuICAgICAgICByZXMgPSB0aGlzLmljb252LmRlY29kZShCdWZmZXIuZnJvbSh0aGlzLmJhc2U2NEFjY3VtLCAnYmFzZTY0JyksIFwidXRmMTYtYmVcIik7XG5cbiAgICB0aGlzLmluQmFzZTY0ID0gZmFsc2U7XG4gICAgdGhpcy5iYXNlNjRBY2N1bSA9ICcnO1xuICAgIHJldHVybiByZXM7XG59XG5cblxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgQnVmZmVyID0gcmVxdWlyZShcInNhZmVyLWJ1ZmZlclwiKS5CdWZmZXI7XG5cbi8vIFNpbmdsZS1ieXRlIGNvZGVjLiBOZWVkcyBhICdjaGFycycgc3RyaW5nIHBhcmFtZXRlciB0aGF0IGNvbnRhaW5zIDI1NiBvciAxMjggY2hhcnMgdGhhdFxuLy8gY29ycmVzcG9uZCB0byBlbmNvZGVkIGJ5dGVzIChpZiAxMjggLSB0aGVuIGxvd2VyIGhhbGYgaXMgQVNDSUkpLiBcblxuZXhwb3J0cy5fc2JjcyA9IFNCQ1NDb2RlYztcbmZ1bmN0aW9uIFNCQ1NDb2RlYyhjb2RlY09wdGlvbnMsIGljb252KSB7XG4gICAgaWYgKCFjb2RlY09wdGlvbnMpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNCQ1MgY29kZWMgaXMgY2FsbGVkIHdpdGhvdXQgdGhlIGRhdGEuXCIpXG4gICAgXG4gICAgLy8gUHJlcGFyZSBjaGFyIGJ1ZmZlciBmb3IgZGVjb2RpbmcuXG4gICAgaWYgKCFjb2RlY09wdGlvbnMuY2hhcnMgfHwgKGNvZGVjT3B0aW9ucy5jaGFycy5sZW5ndGggIT09IDEyOCAmJiBjb2RlY09wdGlvbnMuY2hhcnMubGVuZ3RoICE9PSAyNTYpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbmNvZGluZyAnXCIrY29kZWNPcHRpb25zLnR5cGUrXCInIGhhcyBpbmNvcnJlY3QgJ2NoYXJzJyAobXVzdCBiZSBvZiBsZW4gMTI4IG9yIDI1NilcIik7XG4gICAgXG4gICAgaWYgKGNvZGVjT3B0aW9ucy5jaGFycy5sZW5ndGggPT09IDEyOCkge1xuICAgICAgICB2YXIgYXNjaWlTdHJpbmcgPSBcIlwiO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEyODsgaSsrKVxuICAgICAgICAgICAgYXNjaWlTdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShpKTtcbiAgICAgICAgY29kZWNPcHRpb25zLmNoYXJzID0gYXNjaWlTdHJpbmcgKyBjb2RlY09wdGlvbnMuY2hhcnM7XG4gICAgfVxuXG4gICAgdGhpcy5kZWNvZGVCdWYgPSBCdWZmZXIuZnJvbShjb2RlY09wdGlvbnMuY2hhcnMsICd1Y3MyJyk7XG4gICAgXG4gICAgLy8gRW5jb2RpbmcgYnVmZmVyLlxuICAgIHZhciBlbmNvZGVCdWYgPSBCdWZmZXIuYWxsb2MoNjU1MzYsIGljb252LmRlZmF1bHRDaGFyU2luZ2xlQnl0ZS5jaGFyQ29kZUF0KDApKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZWNPcHRpb25zLmNoYXJzLmxlbmd0aDsgaSsrKVxuICAgICAgICBlbmNvZGVCdWZbY29kZWNPcHRpb25zLmNoYXJzLmNoYXJDb2RlQXQoaSldID0gaTtcblxuICAgIHRoaXMuZW5jb2RlQnVmID0gZW5jb2RlQnVmO1xufVxuXG5TQkNTQ29kZWMucHJvdG90eXBlLmVuY29kZXIgPSBTQkNTRW5jb2RlcjtcblNCQ1NDb2RlYy5wcm90b3R5cGUuZGVjb2RlciA9IFNCQ1NEZWNvZGVyO1xuXG5cbmZ1bmN0aW9uIFNCQ1NFbmNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5lbmNvZGVCdWYgPSBjb2RlYy5lbmNvZGVCdWY7XG59XG5cblNCQ1NFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHZhciBidWYgPSBCdWZmZXIuYWxsb2Moc3RyLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspXG4gICAgICAgIGJ1ZltpXSA9IHRoaXMuZW5jb2RlQnVmW3N0ci5jaGFyQ29kZUF0KGkpXTtcbiAgICBcbiAgICByZXR1cm4gYnVmO1xufVxuXG5TQkNTRW5jb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG59XG5cblxuZnVuY3Rpb24gU0JDU0RlY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmRlY29kZUJ1ZiA9IGNvZGVjLmRlY29kZUJ1Zjtcbn1cblxuU0JDU0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgLy8gU3RyaW5ncyBhcmUgaW1tdXRhYmxlIGluIEpTIC0+IHdlIHVzZSB1Y3MyIGJ1ZmZlciB0byBzcGVlZCB1cCBjb21wdXRhdGlvbnMuXG4gICAgdmFyIGRlY29kZUJ1ZiA9IHRoaXMuZGVjb2RlQnVmO1xuICAgIHZhciBuZXdCdWYgPSBCdWZmZXIuYWxsb2MoYnVmLmxlbmd0aCoyKTtcbiAgICB2YXIgaWR4MSA9IDAsIGlkeDIgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlkeDEgPSBidWZbaV0qMjsgaWR4MiA9IGkqMjtcbiAgICAgICAgbmV3QnVmW2lkeDJdID0gZGVjb2RlQnVmW2lkeDFdO1xuICAgICAgICBuZXdCdWZbaWR4MisxXSA9IGRlY29kZUJ1ZltpZHgxKzFdO1xuICAgIH1cbiAgICByZXR1cm4gbmV3QnVmLnRvU3RyaW5nKCd1Y3MyJyk7XG59XG5cblNCQ1NEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vLyBNYW51YWxseSBhZGRlZCBkYXRhIHRvIGJlIHVzZWQgYnkgc2JjcyBjb2RlYyBpbiBhZGRpdGlvbiB0byBnZW5lcmF0ZWQgb25lLlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBOb3Qgc3VwcG9ydGVkIGJ5IGljb252LCBub3Qgc3VyZSB3aHkuXG4gICAgXCIxMDAyOVwiOiBcIm1hY2NlbnRldXJvXCIsXG4gICAgXCJtYWNjZW50ZXVyb1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCLDhMSAxIHDicSEw5bDnMOhxIXEjMOkxI3EhsSHw6nFucW6xI7DrcSPxJLEk8SWw7PEl8O0w7bDtcO6xJrEm8O84oCgwrDEmMKjwqfigKLCtsOfwq7CqeKEosSZwqjiiaDEo8SuxK/EquKJpOKJpcSrxLbiiILiiJHFgsS7xLzEvcS+xLnEusWFxYbFg8Ks4oiaxYTFh+KIhsKrwrvigKbCoMWIxZDDlcWRxYzigJPigJTigJzigJ3igJjigJnDt+KXisWNxZTFlcWY4oC54oC6xZnFlsWXxaDigJrigJ7FocWaxZvDgcWkxaXDjcW9xb7FqsOTw5TFq8Wuw5rFr8WwxbHFssWzw53DvcS3xbvFgcW8xKLLh1wiXG4gICAgfSxcblxuICAgIFwiODA4XCI6IFwiY3A4MDhcIixcbiAgICBcImlibTgwOFwiOiBcImNwODA4XCIsXG4gICAgXCJjcDgwOFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCLQkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/ilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDRgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj9CB0ZHQhNGU0IfRl9CO0Z7CsOKImcK34oia4oSW4oKs4pagwqBcIlxuICAgIH0sXG5cbiAgICBcIm1pa1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCLQkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj+KUlOKUtOKUrOKUnOKUgOKUvOKVo+KVkeKVmuKVlOKVqeKVpuKVoOKVkOKVrOKUkOKWkeKWkuKWk+KUguKUpOKElsKn4pWX4pWd4pSY4pSM4paI4paE4paM4paQ4paAzrHDn86Tz4DOo8+DwrXPhM6mzpjOqc604oiez4bOteKIqeKJocKx4oml4omk4oyg4oyhw7fiiYjCsOKImcK34oia4oG/wrLilqDCoFwiXG4gICAgfSxcblxuICAgIC8vIEFsaWFzZXMgb2YgZ2VuZXJhdGVkIGVuY29kaW5ncy5cbiAgICBcImFzY2lpOGJpdFwiOiBcImFzY2lpXCIsXG4gICAgXCJ1c2FzY2lpXCI6IFwiYXNjaWlcIixcbiAgICBcImFuc2l4MzRcIjogXCJhc2NpaVwiLFxuICAgIFwiYW5zaXgzNDE5NjhcIjogXCJhc2NpaVwiLFxuICAgIFwiYW5zaXgzNDE5ODZcIjogXCJhc2NpaVwiLFxuICAgIFwiY3Nhc2NpaVwiOiBcImFzY2lpXCIsXG4gICAgXCJjcDM2N1wiOiBcImFzY2lpXCIsXG4gICAgXCJpYm0zNjdcIjogXCJhc2NpaVwiLFxuICAgIFwiaXNvaXI2XCI6IFwiYXNjaWlcIixcbiAgICBcImlzbzY0NnVzXCI6IFwiYXNjaWlcIixcbiAgICBcImlzbzY0NmlydlwiOiBcImFzY2lpXCIsXG4gICAgXCJ1c1wiOiBcImFzY2lpXCIsXG5cbiAgICBcImxhdGluMVwiOiBcImlzbzg4NTkxXCIsXG4gICAgXCJsYXRpbjJcIjogXCJpc284ODU5MlwiLFxuICAgIFwibGF0aW4zXCI6IFwiaXNvODg1OTNcIixcbiAgICBcImxhdGluNFwiOiBcImlzbzg4NTk0XCIsXG4gICAgXCJsYXRpbjVcIjogXCJpc284ODU5OVwiLFxuICAgIFwibGF0aW42XCI6IFwiaXNvODg1OTEwXCIsXG4gICAgXCJsYXRpbjdcIjogXCJpc284ODU5MTNcIixcbiAgICBcImxhdGluOFwiOiBcImlzbzg4NTkxNFwiLFxuICAgIFwibGF0aW45XCI6IFwiaXNvODg1OTE1XCIsXG4gICAgXCJsYXRpbjEwXCI6IFwiaXNvODg1OTE2XCIsXG5cbiAgICBcImNzaXNvbGF0aW4xXCI6IFwiaXNvODg1OTFcIixcbiAgICBcImNzaXNvbGF0aW4yXCI6IFwiaXNvODg1OTJcIixcbiAgICBcImNzaXNvbGF0aW4zXCI6IFwiaXNvODg1OTNcIixcbiAgICBcImNzaXNvbGF0aW40XCI6IFwiaXNvODg1OTRcIixcbiAgICBcImNzaXNvbGF0aW5jeXJpbGxpY1wiOiBcImlzbzg4NTk1XCIsXG4gICAgXCJjc2lzb2xhdGluYXJhYmljXCI6IFwiaXNvODg1OTZcIixcbiAgICBcImNzaXNvbGF0aW5ncmVla1wiIDogXCJpc284ODU5N1wiLFxuICAgIFwiY3Npc29sYXRpbmhlYnJld1wiOiBcImlzbzg4NTk4XCIsXG4gICAgXCJjc2lzb2xhdGluNVwiOiBcImlzbzg4NTk5XCIsXG4gICAgXCJjc2lzb2xhdGluNlwiOiBcImlzbzg4NTkxMFwiLFxuXG4gICAgXCJsMVwiOiBcImlzbzg4NTkxXCIsXG4gICAgXCJsMlwiOiBcImlzbzg4NTkyXCIsXG4gICAgXCJsM1wiOiBcImlzbzg4NTkzXCIsXG4gICAgXCJsNFwiOiBcImlzbzg4NTk0XCIsXG4gICAgXCJsNVwiOiBcImlzbzg4NTk5XCIsXG4gICAgXCJsNlwiOiBcImlzbzg4NTkxMFwiLFxuICAgIFwibDdcIjogXCJpc284ODU5MTNcIixcbiAgICBcImw4XCI6IFwiaXNvODg1OTE0XCIsXG4gICAgXCJsOVwiOiBcImlzbzg4NTkxNVwiLFxuICAgIFwibDEwXCI6IFwiaXNvODg1OTE2XCIsXG5cbiAgICBcImlzb2lyMTRcIjogXCJpc282NDZqcFwiLFxuICAgIFwiaXNvaXI1N1wiOiBcImlzbzY0NmNuXCIsXG4gICAgXCJpc29pcjEwMFwiOiBcImlzbzg4NTkxXCIsXG4gICAgXCJpc29pcjEwMVwiOiBcImlzbzg4NTkyXCIsXG4gICAgXCJpc29pcjEwOVwiOiBcImlzbzg4NTkzXCIsXG4gICAgXCJpc29pcjExMFwiOiBcImlzbzg4NTk0XCIsXG4gICAgXCJpc29pcjE0NFwiOiBcImlzbzg4NTk1XCIsXG4gICAgXCJpc29pcjEyN1wiOiBcImlzbzg4NTk2XCIsXG4gICAgXCJpc29pcjEyNlwiOiBcImlzbzg4NTk3XCIsXG4gICAgXCJpc29pcjEzOFwiOiBcImlzbzg4NTk4XCIsXG4gICAgXCJpc29pcjE0OFwiOiBcImlzbzg4NTk5XCIsXG4gICAgXCJpc29pcjE1N1wiOiBcImlzbzg4NTkxMFwiLFxuICAgIFwiaXNvaXIxNjZcIjogXCJ0aXM2MjBcIixcbiAgICBcImlzb2lyMTc5XCI6IFwiaXNvODg1OTEzXCIsXG4gICAgXCJpc29pcjE5OVwiOiBcImlzbzg4NTkxNFwiLFxuICAgIFwiaXNvaXIyMDNcIjogXCJpc284ODU5MTVcIixcbiAgICBcImlzb2lyMjI2XCI6IFwiaXNvODg1OTE2XCIsXG5cbiAgICBcImNwODE5XCI6IFwiaXNvODg1OTFcIixcbiAgICBcImlibTgxOVwiOiBcImlzbzg4NTkxXCIsXG5cbiAgICBcImN5cmlsbGljXCI6IFwiaXNvODg1OTVcIixcblxuICAgIFwiYXJhYmljXCI6IFwiaXNvODg1OTZcIixcbiAgICBcImFyYWJpYzhcIjogXCJpc284ODU5NlwiLFxuICAgIFwiZWNtYTExNFwiOiBcImlzbzg4NTk2XCIsXG4gICAgXCJhc21vNzA4XCI6IFwiaXNvODg1OTZcIixcblxuICAgIFwiZ3JlZWtcIiA6IFwiaXNvODg1OTdcIixcbiAgICBcImdyZWVrOFwiIDogXCJpc284ODU5N1wiLFxuICAgIFwiZWNtYTExOFwiIDogXCJpc284ODU5N1wiLFxuICAgIFwiZWxvdDkyOFwiIDogXCJpc284ODU5N1wiLFxuXG4gICAgXCJoZWJyZXdcIjogXCJpc284ODU5OFwiLFxuICAgIFwiaGVicmV3OFwiOiBcImlzbzg4NTk4XCIsXG5cbiAgICBcInR1cmtpc2hcIjogXCJpc284ODU5OVwiLFxuICAgIFwidHVya2lzaDhcIjogXCJpc284ODU5OVwiLFxuXG4gICAgXCJ0aGFpXCI6IFwiaXNvODg1OTExXCIsXG4gICAgXCJ0aGFpOFwiOiBcImlzbzg4NTkxMVwiLFxuXG4gICAgXCJjZWx0aWNcIjogXCJpc284ODU5MTRcIixcbiAgICBcImNlbHRpYzhcIjogXCJpc284ODU5MTRcIixcbiAgICBcImlzb2NlbHRpY1wiOiBcImlzbzg4NTkxNFwiLFxuXG4gICAgXCJ0aXM2MjAwXCI6IFwidGlzNjIwXCIsXG4gICAgXCJ0aXM2MjAyNTI5MVwiOiBcInRpczYyMFwiLFxuICAgIFwidGlzNjIwMjUzMzBcIjogXCJ0aXM2MjBcIixcblxuICAgIFwiMTAwMDBcIjogXCJtYWNyb21hblwiLFxuICAgIFwiMTAwMDZcIjogXCJtYWNncmVla1wiLFxuICAgIFwiMTAwMDdcIjogXCJtYWNjeXJpbGxpY1wiLFxuICAgIFwiMTAwNzlcIjogXCJtYWNpY2VsYW5kXCIsXG4gICAgXCIxMDA4MVwiOiBcIm1hY3R1cmtpc2hcIixcblxuICAgIFwiY3NwYzhjb2RlcGFnZTQzN1wiOiBcImNwNDM3XCIsXG4gICAgXCJjc3BjNzc1YmFsdGljXCI6IFwiY3A3NzVcIixcbiAgICBcImNzcGM4NTBtdWx0aWxpbmd1YWxcIjogXCJjcDg1MFwiLFxuICAgIFwiY3NwY3A4NTJcIjogXCJjcDg1MlwiLFxuICAgIFwiY3NwYzg2MmxhdGluaGVicmV3XCI6IFwiY3A4NjJcIixcbiAgICBcImNwZ3JcIjogXCJjcDg2OVwiLFxuXG4gICAgXCJtc2VlXCI6IFwiY3AxMjUwXCIsXG4gICAgXCJtc2N5cmxcIjogXCJjcDEyNTFcIixcbiAgICBcIm1zYW5zaVwiOiBcImNwMTI1MlwiLFxuICAgIFwibXNncmVla1wiOiBcImNwMTI1M1wiLFxuICAgIFwibXN0dXJrXCI6IFwiY3AxMjU0XCIsXG4gICAgXCJtc2hlYnJcIjogXCJjcDEyNTVcIixcbiAgICBcIm1zYXJhYlwiOiBcImNwMTI1NlwiLFxuICAgIFwid2luYmFsdHJpbVwiOiBcImNwMTI1N1wiLFxuXG4gICAgXCJjcDIwODY2XCI6IFwia29pOHJcIixcbiAgICBcIjIwODY2XCI6IFwia29pOHJcIixcbiAgICBcImlibTg3OFwiOiBcImtvaThyXCIsXG4gICAgXCJjc2tvaThyXCI6IFwia29pOHJcIixcblxuICAgIFwiY3AyMTg2NlwiOiBcImtvaTh1XCIsXG4gICAgXCIyMTg2NlwiOiBcImtvaTh1XCIsXG4gICAgXCJpYm0xMTY4XCI6IFwia29pOHVcIixcblxuICAgIFwic3RyazEwNDgyMDAyXCI6IFwicmsxMDQ4XCIsXG5cbiAgICBcInRjdm41NzEyXCI6IFwidGN2blwiLFxuICAgIFwidGN2bjU3MTIxXCI6IFwidGN2blwiLFxuXG4gICAgXCJnYjE5ODg4MFwiOiBcImlzbzY0NmNuXCIsXG4gICAgXCJjblwiOiBcImlzbzY0NmNuXCIsXG5cbiAgICBcImNzaXNvMTRqaXNjNjIyMHJvXCI6IFwiaXNvNjQ2anBcIixcbiAgICBcImppc2M2MjIwMTk2OXJvXCI6IFwiaXNvNjQ2anBcIixcbiAgICBcImpwXCI6IFwiaXNvNjQ2anBcIixcblxuICAgIFwiY3NocHJvbWFuOFwiOiBcImhwcm9tYW44XCIsXG4gICAgXCJyOFwiOiBcImhwcm9tYW44XCIsXG4gICAgXCJyb21hbjhcIjogXCJocHJvbWFuOFwiLFxuICAgIFwieHJvbWFuOFwiOiBcImhwcm9tYW44XCIsXG4gICAgXCJpYm0xMDUxXCI6IFwiaHByb21hbjhcIixcblxuICAgIFwibWFjXCI6IFwibWFjaW50b3NoXCIsXG4gICAgXCJjc21hY2ludG9zaFwiOiBcIm1hY2ludG9zaFwiLFxufTtcblxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIEdlbmVyYXRlZCBkYXRhIGZvciBzYmNzIGNvZGVjLiBEb24ndCBlZGl0IG1hbnVhbGx5LiBSZWdlbmVyYXRlIHVzaW5nIGdlbmVyYXRpb24vZ2VuLXNiY3MuanMgc2NyaXB0LlxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFwiNDM3XCI6IFwiY3A0MzdcIixcbiAgXCI3MzdcIjogXCJjcDczN1wiLFxuICBcIjc3NVwiOiBcImNwNzc1XCIsXG4gIFwiODUwXCI6IFwiY3A4NTBcIixcbiAgXCI4NTJcIjogXCJjcDg1MlwiLFxuICBcIjg1NVwiOiBcImNwODU1XCIsXG4gIFwiODU2XCI6IFwiY3A4NTZcIixcbiAgXCI4NTdcIjogXCJjcDg1N1wiLFxuICBcIjg1OFwiOiBcImNwODU4XCIsXG4gIFwiODYwXCI6IFwiY3A4NjBcIixcbiAgXCI4NjFcIjogXCJjcDg2MVwiLFxuICBcIjg2MlwiOiBcImNwODYyXCIsXG4gIFwiODYzXCI6IFwiY3A4NjNcIixcbiAgXCI4NjRcIjogXCJjcDg2NFwiLFxuICBcIjg2NVwiOiBcImNwODY1XCIsXG4gIFwiODY2XCI6IFwiY3A4NjZcIixcbiAgXCI4NjlcIjogXCJjcDg2OVwiLFxuICBcIjg3NFwiOiBcIndpbmRvd3M4NzRcIixcbiAgXCI5MjJcIjogXCJjcDkyMlwiLFxuICBcIjEwNDZcIjogXCJjcDEwNDZcIixcbiAgXCIxMTI0XCI6IFwiY3AxMTI0XCIsXG4gIFwiMTEyNVwiOiBcImNwMTEyNVwiLFxuICBcIjExMjlcIjogXCJjcDExMjlcIixcbiAgXCIxMTMzXCI6IFwiY3AxMTMzXCIsXG4gIFwiMTE2MVwiOiBcImNwMTE2MVwiLFxuICBcIjExNjJcIjogXCJjcDExNjJcIixcbiAgXCIxMTYzXCI6IFwiY3AxMTYzXCIsXG4gIFwiMTI1MFwiOiBcIndpbmRvd3MxMjUwXCIsXG4gIFwiMTI1MVwiOiBcIndpbmRvd3MxMjUxXCIsXG4gIFwiMTI1MlwiOiBcIndpbmRvd3MxMjUyXCIsXG4gIFwiMTI1M1wiOiBcIndpbmRvd3MxMjUzXCIsXG4gIFwiMTI1NFwiOiBcIndpbmRvd3MxMjU0XCIsXG4gIFwiMTI1NVwiOiBcIndpbmRvd3MxMjU1XCIsXG4gIFwiMTI1NlwiOiBcIndpbmRvd3MxMjU2XCIsXG4gIFwiMTI1N1wiOiBcIndpbmRvd3MxMjU3XCIsXG4gIFwiMTI1OFwiOiBcIndpbmRvd3MxMjU4XCIsXG4gIFwiMjg1OTFcIjogXCJpc284ODU5MVwiLFxuICBcIjI4NTkyXCI6IFwiaXNvODg1OTJcIixcbiAgXCIyODU5M1wiOiBcImlzbzg4NTkzXCIsXG4gIFwiMjg1OTRcIjogXCJpc284ODU5NFwiLFxuICBcIjI4NTk1XCI6IFwiaXNvODg1OTVcIixcbiAgXCIyODU5NlwiOiBcImlzbzg4NTk2XCIsXG4gIFwiMjg1OTdcIjogXCJpc284ODU5N1wiLFxuICBcIjI4NTk4XCI6IFwiaXNvODg1OThcIixcbiAgXCIyODU5OVwiOiBcImlzbzg4NTk5XCIsXG4gIFwiMjg2MDBcIjogXCJpc284ODU5MTBcIixcbiAgXCIyODYwMVwiOiBcImlzbzg4NTkxMVwiLFxuICBcIjI4NjAzXCI6IFwiaXNvODg1OTEzXCIsXG4gIFwiMjg2MDRcIjogXCJpc284ODU5MTRcIixcbiAgXCIyODYwNVwiOiBcImlzbzg4NTkxNVwiLFxuICBcIjI4NjA2XCI6IFwiaXNvODg1OTE2XCIsXG4gIFwid2luZG93czg3NFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4oKs77+977+977+977+94oCm77+977+977+977+977+977+977+977+977+977+977+94oCY4oCZ4oCc4oCd4oCi4oCT4oCU77+977+977+977+977+977+977+977+9wqDguIHguILguIPguITguIXguIbguIfguIjguInguIrguIvguIzguI3guI7guI/guJDguJHguJLguJPguJTguJXguJbguJfguJjguJnguJrguJvguJzguJ3guJ7guJ/guKDguKHguKLguKPguKTguKXguKbguKfguKjguKnguKrguKvguKzguK3guK7guK/guLDguLHguLLguLPguLTguLXguLbguLfguLjguLnguLrvv73vv73vv73vv73guL/guYDguYHguYLguYPguYTguYXguYbguYfguYjguYnguYrguYvguYzguY3guY7guY/guZDguZHguZLguZPguZTguZXguZbguZfguZjguZnguZrguZvvv73vv73vv73vv71cIlxuICB9LFxuICBcIndpbjg3NFwiOiBcIndpbmRvd3M4NzRcIixcbiAgXCJjcDg3NFwiOiBcIndpbmRvd3M4NzRcIixcbiAgXCJ3aW5kb3dzMTI1MFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4oKs77+94oCa77+94oCe4oCm4oCg4oCh77+94oCwxaDigLnFmsWkxb3Fue+/veKAmOKAmeKAnOKAneKAouKAk+KAlO+/veKEosWh4oC6xZvFpcW+xbrCoMuHy5jFgcKkxITCpsKnwqjCqcWewqvCrMKtwq7Fu8KwwrHLm8WCwrTCtcK2wrfCuMSFxZ/Cu8S9y53EvsW8xZTDgcOCxILDhMS5xIbDh8SMw4nEmMOLxJrDjcOOxI7EkMWDxYfDk8OUxZDDlsOXxZjFrsOaxbDDnMOdxaLDn8WVw6HDosSDw6TEusSHw6fEjcOpxJnDq8Sbw63DrsSPxJHFhMWIw7PDtMWRw7bDt8WZxa/DusWxw7zDvcWjy5lcIlxuICB9LFxuICBcIndpbjEyNTBcIjogXCJ3aW5kb3dzMTI1MFwiLFxuICBcImNwMTI1MFwiOiBcIndpbmRvd3MxMjUwXCIsXG4gIFwid2luZG93czEyNTFcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcItCC0IPigJrRk+KAnuKApuKAoOKAoeKCrOKAsNCJ4oC50IrQjNCL0I/RkuKAmOKAmeKAnOKAneKAouKAk+KAlO+/veKEotGZ4oC60ZrRnNGb0Z/CoNCO0Z7QiMKk0pDCpsKn0IHCqdCEwqvCrMKtwq7Qh8KwwrHQhtGW0pHCtcK2wrfRkeKEltGUwrvRmNCF0ZXRl9CQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGPXCJcbiAgfSxcbiAgXCJ3aW4xMjUxXCI6IFwid2luZG93czEyNTFcIixcbiAgXCJjcDEyNTFcIjogXCJ3aW5kb3dzMTI1MVwiLFxuICBcIndpbmRvd3MxMjUyXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLigqzvv73igJrGkuKAnuKApuKAoOKAocuG4oCwxaDigLnFku+/vcW977+977+94oCY4oCZ4oCc4oCd4oCi4oCT4oCUy5zihKLFoeKAusWT77+9xb7FuMKgwqHCosKjwqTCpcKmwqfCqMKpwqrCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnCusK7wrzCvcK+wr/DgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8OQw5HDksOTw5TDlcOWw5fDmMOZw5rDm8Ocw53DnsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMO9w77Dv1wiXG4gIH0sXG4gIFwid2luMTI1MlwiOiBcIndpbmRvd3MxMjUyXCIsXG4gIFwiY3AxMjUyXCI6IFwid2luZG93czEyNTJcIixcbiAgXCJ3aW5kb3dzMTI1M1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4oKs77+94oCaxpLigJ7igKbigKDigKHvv73igLDvv73igLnvv73vv73vv73vv73vv73igJjigJnigJzigJ3igKLigJPigJTvv73ihKLvv73igLrvv73vv73vv73vv73CoM6FzobCo8KkwqXCpsKnwqjCqe+/vcKrwqzCrcKu4oCVwrDCscKywrPOhMK1wrbCt86IzonOisK7zozCvc6Ozo/OkM6RzpLOk86UzpXOls6XzpjOmc6azpvOnM6dzp7On86gzqHvv73Oo86kzqXOps6nzqjOqc6qzqvOrM6tzq7Or86wzrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Cz4PPhM+Fz4bPh8+Iz4nPis+Lz4zPjc+O77+9XCJcbiAgfSxcbiAgXCJ3aW4xMjUzXCI6IFwid2luZG93czEyNTNcIixcbiAgXCJjcDEyNTNcIjogXCJ3aW5kb3dzMTI1M1wiLFxuICBcIndpbmRvd3MxMjU0XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLigqzvv73igJrGkuKAnuKApuKAoOKAocuG4oCwxaDigLnFku+/ve+/ve+/ve+/veKAmOKAmeKAnOKAneKAouKAk+KAlMuc4oSixaHigLrFk++/ve+/vcW4wqDCocKiwqPCpMKlwqbCp8KowqnCqsKrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucK6wrvCvMK9wr7Cv8OAw4HDgsODw4TDhcOGw4fDiMOJw4rDi8OMw43DjsOPxJ7DkcOSw5PDlMOVw5bDl8OYw5nDmsObw5zEsMWew5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Sfw7HDssOzw7TDtcO2w7fDuMO5w7rDu8O8xLHFn8O/XCJcbiAgfSxcbiAgXCJ3aW4xMjU0XCI6IFwid2luZG93czEyNTRcIixcbiAgXCJjcDEyNTRcIjogXCJ3aW5kb3dzMTI1NFwiLFxuICBcIndpbmRvd3MxMjU1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLigqzvv73igJrGkuKAnuKApuKAoOKAocuG4oCw77+94oC577+977+977+977+977+94oCY4oCZ4oCc4oCd4oCi4oCT4oCUy5zihKLvv73igLrvv73vv73vv73vv73CoMKhwqLCo+KCqsKlwqbCp8KowqnDl8KrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucO3wrvCvMK9wr7Cv9aw1rHWstaz1rTWtda21rfWuNa51rrWu9a81r3Wvta/14DXgdeC14PXsNex17LXs9e077+977+977+977+977+977+977+915DXkdeS15PXlNeV15bXl9eY15nXmteb15zXndee15/XoNeh16LXo9ek16XXpten16jXqdeq77+977+94oCO4oCP77+9XCJcbiAgfSxcbiAgXCJ3aW4xMjU1XCI6IFwid2luZG93czEyNTVcIixcbiAgXCJjcDEyNTVcIjogXCJ3aW5kb3dzMTI1NVwiLFxuICBcIndpbmRvd3MxMjU2XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLigqzZvuKAmsaS4oCe4oCm4oCg4oChy4bigLDZueKAucWS2obamNqI2q/igJjigJnigJzigJ3igKLigJPigJTaqeKEotqR4oC6xZPigIzigI3ausKg2IzCosKjwqTCpcKmwqfCqMKp2r7Cq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnYm8K7wrzCvcK+2J/bgdih2KLYo9ik2KXYptin2KjYqdiq2KvYrNit2K7Yr9iw2LHYstiz2LTYtdi2w5fYt9i42LnYutmA2YHZgtmDw6DZhMOi2YXZhtmH2YjDp8Oow6nDqsOr2YnZisOuw6/Zi9mM2Y3ZjsO02Y/ZkMO32ZHDudmSw7vDvOKAjuKAj9uSXCJcbiAgfSxcbiAgXCJ3aW4xMjU2XCI6IFwid2luZG93czEyNTZcIixcbiAgXCJjcDEyNTZcIjogXCJ3aW5kb3dzMTI1NlwiLFxuICBcIndpbmRvd3MxMjU3XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLigqzvv73igJrvv73igJ7igKbigKDigKHvv73igLDvv73igLnvv73CqMuHwrjvv73igJjigJnigJzigJ3igKLigJPigJTvv73ihKLvv73igLrvv73Cr8ub77+9wqDvv73CosKjwqTvv73CpsKnw5jCqcWWwqvCrMKtwq7DhsKwwrHCssKzwrTCtcK2wrfDuMK5xZfCu8K8wr3CvsOmxITErsSAxIbDhMOFxJjEksSMw4nFucSWxKLEtsSqxLvFoMWDxYXDk8WMw5XDlsOXxbLFgcWaxarDnMW7xb3Dn8SFxK/EgcSHw6TDpcSZxJPEjcOpxbrEl8SjxLfEq8S8xaHFhMWGw7PFjcO1w7bDt8WzxYLFm8Wrw7zFvMW+y5lcIlxuICB9LFxuICBcIndpbjEyNTdcIjogXCJ3aW5kb3dzMTI1N1wiLFxuICBcImNwMTI1N1wiOiBcIndpbmRvd3MxMjU3XCIsXG4gIFwid2luZG93czEyNThcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIuKCrO+/veKAmsaS4oCe4oCm4oCg4oChy4bigLDvv73igLnFku+/ve+/ve+/ve+/veKAmOKAmeKAnOKAneKAouKAk+KAlMuc4oSi77+94oC6xZPvv73vv73FuMKgwqHCosKjwqTCpcKmwqfCqMKpwqrCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnCusK7wrzCvcK+wr/DgMOBw4LEgsOEw4XDhsOHw4jDicOKw4vMgMONw47Dj8SQw5HMicOTw5TGoMOWw5fDmMOZw5rDm8Ocxq/Mg8Ofw6DDocOixIPDpMOlw6bDp8Oow6nDqsOrzIHDrcOuw6/EkcOxzKPDs8O0xqHDtsO3w7jDucO6w7vDvMaw4oKrw79cIlxuICB9LFxuICBcIndpbjEyNThcIjogXCJ3aW5kb3dzMTI1OFwiLFxuICBcImNwMTI1OFwiOiBcIndpbmRvd3MxMjU4XCIsXG4gIFwiaXNvODg1OTFcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMKhwqLCo8KkwqXCpsKnwqjCqcKqwqvCrMKtwq7Cr8KwwrHCssKzwrTCtcK2wrfCuMK5wrrCu8K8wr3CvsK/w4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/DkMORw5LDk8OUw5XDlsOXw5jDmcOaw5vDnMOdw57Dn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDt8O4w7nDusO7w7zDvcO+w79cIlxuICB9LFxuICBcImNwMjg1OTFcIjogXCJpc284ODU5MVwiLFxuICBcImlzbzg4NTkyXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDEhMuYxYHCpMS9xZrCp8KoxaDFnsWkxbnCrcW9xbvCsMSFy5vFgsK0xL7Fm8uHwrjFocWfxaXFusudxb7FvMWUw4HDgsSCw4TEucSGw4fEjMOJxJjDi8Saw43DjsSOxJDFg8WHw5PDlMWQw5bDl8WYxa7DmsWww5zDncWiw5/FlcOhw6LEg8OkxLrEh8OnxI3DqcSZw6vEm8Otw67Ej8SRxYTFiMOzw7TFkcO2w7fFmcWvw7rFscO8w73Fo8uZXCJcbiAgfSxcbiAgXCJjcDI4NTkyXCI6IFwiaXNvODg1OTJcIixcbiAgXCJpc284ODU5M1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgxKbLmMKjwqTvv73EpMKnwqjEsMWexJ7EtMKt77+9xbvCsMSnwrLCs8K0wrXEpcK3wrjEscWfxJ/EtcK977+9xbzDgMOBw4Lvv73DhMSKxIjDh8OIw4nDisOLw4zDjcOOw4/vv73DkcOSw5PDlMSgw5bDl8Scw5nDmsObw5zFrMWcw5/DoMOhw6Lvv73DpMSLxInDp8Oow6nDqsOrw6zDrcOuw6/vv73DscOyw7PDtMShw7bDt8Sdw7nDusO7w7zFrcWdy5lcIlxuICB9LFxuICBcImNwMjg1OTNcIjogXCJpc284ODU5M1wiLFxuICBcImlzbzg4NTk0XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDEhMS4xZbCpMSoxLvCp8KoxaDEksSixabCrcW9wq/CsMSFy5vFl8K0xKnEvMuHwrjFocSTxKPFp8WKxb7Fi8SAw4HDgsODw4TDhcOGxK7EjMOJxJjDi8SWw43DjsSqxJDFhcWMxLbDlMOVw5bDl8OYxbLDmsObw5zFqMWqw5/EgcOhw6LDo8Okw6XDpsSvxI3DqcSZw6vEl8Otw67Eq8SRxYbFjcS3w7TDtcO2w7fDuMWzw7rDu8O8xanFq8uZXCJcbiAgfSxcbiAgXCJjcDI4NTk0XCI6IFwiaXNvODg1OTRcIixcbiAgXCJpc284ODU5NVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8Kg0IHQgtCD0ITQhdCG0IfQiNCJ0IrQi9CMwq3QjtCP0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y/ihJbRkdGS0ZPRlNGV0ZbRl9GY0ZnRmtGb0ZzCp9Ge0Z9cIlxuICB9LFxuICBcImNwMjg1OTVcIjogXCJpc284ODU5NVwiLFxuICBcImlzbzg4NTk2XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDvv73vv73vv73CpO+/ve+/ve+/ve+/ve+/ve+/ve+/vdiMwq3vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73Ym++/ve+/ve+/vdif77+92KHYotij2KTYpdim2KfYqNip2KrYq9is2K3Yrtiv2LDYsdiy2LPYtNi12LbYt9i42LnYuu+/ve+/ve+/ve+/ve+/vdmA2YHZgtmD2YTZhdmG2YfZiNmJ2YrZi9mM2Y3ZjtmP2ZDZkdmS77+977+977+977+977+977+977+977+977+977+977+977+977+9XCJcbiAgfSxcbiAgXCJjcDI4NTk2XCI6IFwiaXNvODg1OTZcIixcbiAgXCJpc284ODU5N1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8Kg4oCY4oCZwqPigqzigq/CpsKnwqjCqc26wqvCrMKt77+94oCVwrDCscKywrPOhM6FzobCt86IzonOisK7zozCvc6Ozo/OkM6RzpLOk86UzpXOls6XzpjOmc6azpvOnM6dzp7On86gzqHvv73Oo86kzqXOps6nzqjOqc6qzqvOrM6tzq7Or86wzrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Cz4PPhM+Fz4bPh8+Iz4nPis+Lz4zPjc+O77+9XCJcbiAgfSxcbiAgXCJjcDI4NTk3XCI6IFwiaXNvODg1OTdcIixcbiAgXCJpc284ODU5OFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8Kg77+9wqLCo8KkwqXCpsKnwqjCqcOXwqvCrMKtwq7Cr8KwwrHCssKzwrTCtcK2wrfCuMK5w7fCu8K8wr3Cvu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veKAl9eQ15HXkteT15TXldeW15fXmNeZ15rXm9ec153Xntef16DXodei16PXpNel16bXp9eo16nXqu+/ve+/veKAjuKAj++/vVwiXG4gIH0sXG4gIFwiY3AyODU5OFwiOiBcImlzbzg4NTk4XCIsXG4gIFwiaXNvODg1OTlcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMKhwqLCo8KkwqXCpsKnwqjCqcKqwqvCrMKtwq7Cr8KwwrHCssKzwrTCtcK2wrfCuMK5wrrCu8K8wr3CvsK/w4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/EnsORw5LDk8OUw5XDlsOXw5jDmcOaw5vDnMSwxZ7Dn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvxJ/DscOyw7PDtMO1w7bDt8O4w7nDusO7w7zEscWfw79cIlxuICB9LFxuICBcImNwMjg1OTlcIjogXCJpc284ODU5OVwiLFxuICBcImlzbzg4NTkxMFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgxITEksSixKrEqMS2wqfEu8SQxaDFpsW9wq3FqsWKwrDEhcSTxKPEq8SpxLfCt8S8xJHFocWnxb7igJXFq8WLxIDDgcOCw4PDhMOFw4bErsSMw4nEmMOLxJbDjcOOw4/DkMWFxYzDk8OUw5XDlsWow5jFssOaw5vDnMOdw57Dn8SBw6HDosOjw6TDpcOmxK/EjcOpxJnDq8SXw63DrsOvw7DFhsWNw7PDtMO1w7bFqcO4xbPDusO7w7zDvcO+xLhcIlxuICB9LFxuICBcImNwMjg2MDBcIjogXCJpc284ODU5MTBcIixcbiAgXCJpc284ODU5MTFcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoOC4geC4guC4g+C4hOC4heC4huC4h+C4iOC4ieC4iuC4i+C4jOC4jeC4juC4j+C4kOC4keC4kuC4k+C4lOC4leC4luC4l+C4mOC4meC4muC4m+C4nOC4neC4nuC4n+C4oOC4oeC4ouC4o+C4pOC4peC4puC4p+C4qOC4qeC4quC4q+C4rOC4reC4ruC4r+C4sOC4seC4suC4s+C4tOC4teC4tuC4t+C4uOC4ueC4uu+/ve+/ve+/ve+/veC4v+C5gOC5geC5guC5g+C5hOC5heC5huC5h+C5iOC5ieC5iuC5i+C5jOC5jeC5juC5j+C5kOC5keC5kuC5k+C5lOC5leC5luC5l+C5mOC5meC5muC5m++/ve+/ve+/ve+/vVwiXG4gIH0sXG4gIFwiY3AyODYwMVwiOiBcImlzbzg4NTkxMVwiLFxuICBcImlzbzg4NTkxM1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8Kg4oCdwqLCo8Kk4oCewqbCp8OYwqnFlsKrwqzCrcKuw4bCsMKxwrLCs+KAnMK1wrbCt8O4wrnFl8K7wrzCvcK+w6bEhMSuxIDEhsOEw4XEmMSSxIzDicW5xJbEosS2xKrEu8WgxYPFhcOTxYzDlcOWw5fFssWBxZrFqsOcxbvFvcOfxIXEr8SBxIfDpMOlxJnEk8SNw6nFusSXxKPEt8SrxLzFocWExYbDs8WNw7XDtsO3xbPFgsWbxavDvMW8xb7igJlcIlxuICB9LFxuICBcImNwMjg2MDNcIjogXCJpc284ODU5MTNcIixcbiAgXCJpc284ODU5MTRcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoOG4guG4g8KjxIrEi+G4isKn4bqAwqnhuoLhuIvhu7LCrcKuxbjhuJ7huJ/EoMSh4bmA4bmBwrbhuZbhuoHhuZfhuoPhuaDhu7PhuoThuoXhuaHDgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8W0w5HDksOTw5TDlcOW4bmqw5jDmcOaw5vDnMOdxbbDn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvxbXDscOyw7PDtMO1w7bhuavDuMO5w7rDu8O8w73Ft8O/XCJcbiAgfSxcbiAgXCJjcDI4NjA0XCI6IFwiaXNvODg1OTE0XCIsXG4gIFwiaXNvODg1OTE1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDCocKiwqPigqzCpcWgwqfFocKpwqrCq8Kswq3CrsKvwrDCscKywrPFvcK1wrbCt8W+wrnCusK7xZLFk8W4wr/DgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8OQw5HDksOTw5TDlcOWw5fDmMOZw5rDm8Ocw53DnsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMO9w77Dv1wiXG4gIH0sXG4gIFwiY3AyODYwNVwiOiBcImlzbzg4NTkxNVwiLFxuICBcImlzbzg4NTkxNlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgxITEhcWB4oKs4oCexaDCp8WhwqnImMKrxbnCrcW6xbvCsMKxxIzFgsW94oCdwrbCt8W+xI3ImcK7xZLFk8W4xbzDgMOBw4LEgsOExIbDhsOHw4jDicOKw4vDjMONw47Dj8SQxYPDksOTw5TFkMOWxZrFsMOZw5rDm8OcxJjImsOfw6DDocOixIPDpMSHw6bDp8Oow6nDqsOrw6zDrcOuw6/EkcWEw7LDs8O0xZHDtsWbxbHDucO6w7vDvMSZyJvDv1wiXG4gIH0sXG4gIFwiY3AyODYwNlwiOiBcImlzbzg4NTkxNlwiLFxuICBcImNwNDM3XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDh8O8w6nDosOkw6DDpcOnw6rDq8Oow6/DrsOsw4TDhcOJw6bDhsO0w7bDssO7w7nDv8OWw5zCosKjwqXigqfGksOhw63Ds8O6w7HDkcKqwrrCv+KMkMKswr3CvMKhwqvCu+KWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgM6xw5/Ok8+AzqPPg8K1z4TOps6YzqnOtOKIns+GzrXiiKniiaHCseKJpeKJpOKMoOKMocO34omIwrDiiJnCt+KImuKBv8Ky4pagwqBcIlxuICB9LFxuICBcImlibTQzN1wiOiBcImNwNDM3XCIsXG4gIFwiY3NpYm00MzdcIjogXCJjcDQzN1wiLFxuICBcImNwNzM3XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLOkc6SzpPOlM6VzpbOl86YzpnOms6bzpzOnc6ezp/OoM6hzqPOpM6lzqbOp86ozqnOsc6yzrPOtM61zrbOt864zrnOus67zrzOvc6+zr/PgM+Bz4PPgs+Ez4XPhs+Hz4jilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDPic6szq3Ors+Kzq/PjM+Nz4vPjs6GzojOic6KzozOjs6PwrHiiaXiiaTOqs6rw7fiiYjCsOKImcK34oia4oG/wrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtNzM3XCI6IFwiY3A3MzdcIixcbiAgXCJjc2libTczN1wiOiBcImNwNzM3XCIsXG4gIFwiY3A3NzVcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsSGw7zDqcSBw6TEo8OlxIfFgsSTxZbFl8SrxbnDhMOFw4nDpsOGxY3DtsSiwqLFmsWbw5bDnMO4wqPDmMOXwqTEgMSqw7PFu8W8xbrigJ3CpsKpwq7CrMK9wrzFgcKrwrvilpHilpLilpPilILilKTEhMSMxJjEluKVo+KVkeKVl+KVncSuxaDilJDilJTilLTilKzilJzilIDilLzFssWq4pWa4pWU4pWp4pWm4pWg4pWQ4pWsxb3EhcSNxJnEl8SvxaHFs8Wrxb7ilJjilIzilojiloTilozilpDiloDDk8OfxYzFg8O1w5XCtcWExLbEt8S7xLzFhsSSxYXigJnCrcKx4oCcwr7CtsKnw7figJ7CsOKImcK3wrnCs8Ky4pagwqBcIlxuICB9LFxuICBcImlibTc3NVwiOiBcImNwNzc1XCIsXG4gIFwiY3NpYm03NzVcIjogXCJjcDc3NVwiLFxuICBcImNwODUwXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDh8O8w6nDosOkw6DDpcOnw6rDq8Oow6/DrsOsw4TDhcOJw6bDhsO0w7bDssO7w7nDv8OWw5zDuMKjw5jDl8aSw6HDrcOzw7rDscORwqrCusK/wq7CrMK9wrzCocKrwrvilpHilpLilpPilILilKTDgcOCw4DCqeKVo+KVkeKVl+KVncKiwqXilJDilJTilLTilKzilJzilIDilLzDo8OD4pWa4pWU4pWp4pWm4pWg4pWQ4pWswqTDsMOQw4rDi8OIxLHDjcOOw4/ilJjilIzilojiloTCpsOM4paAw5PDn8OUw5LDtcOVwrXDvsOew5rDm8OZw73DncKvwrTCrcKx4oCXwr7CtsKnw7fCuMKwwqjCt8K5wrPCsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NTBcIjogXCJjcDg1MFwiLFxuICBcImNzaWJtODUwXCI6IFwiY3A4NTBcIixcbiAgXCJjcDg1MlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4fDvMOpw6LDpMWvxIfDp8WCw6vFkMWRw67FucOExIbDicS5xLrDtMO2xL3EvsWaxZvDlsOcxaTFpcWBw5fEjcOhw63Ds8O6xITEhcW9xb7EmMSZwqzFusSMxZ/Cq8K74paR4paS4paT4pSC4pSkw4HDgsSaxZ7ilaPilZHilZfilZ3Fu8W84pSQ4pSU4pS04pSs4pSc4pSA4pS8xILEg+KVmuKVlOKVqeKVpuKVoOKVkOKVrMKkxJHEkMSOw4vEj8WHw43DjsSb4pSY4pSM4paI4paExaLFruKWgMOTw5/DlMWDxYTFiMWgxaHFlMOaxZXFsMO9w53Fo8K0wq3Lncuby4fLmMKnw7fCuMKwwqjLmcWxxZjFmeKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NTJcIjogXCJjcDg1MlwiLFxuICBcImNzaWJtODUyXCI6IFwiY3A4NTJcIixcbiAgXCJjcDg1NVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi0ZLQgtGT0IPRkdCB0ZTQhNGV0IXRltCG0ZfQh9GY0IjRmdCJ0ZrQitGb0IvRnNCM0Z7QjtGf0I/RjtCu0YrQqtCw0JDQsdCR0YbQptC00JTQtdCV0YTQpNCz0JPCq8K74paR4paS4paT4pSC4pSk0YXQpdC40JjilaPilZHilZfilZ3QudCZ4pSQ4pSU4pS04pSs4pSc4pSA4pS80LrQmuKVmuKVlOKVqeKVpuKVoOKVkOKVrMKk0LvQm9C80JzQvdCd0L7QntC/4pSY4pSM4paI4paE0J/Rj+KWgNCv0YDQoNGB0KHRgtCi0YPQo9C20JbQstCS0YzQrOKElsKt0YvQq9C30JfRiNCo0Y3QrdGJ0KnRh9CnwqfilqDCoFwiXG4gIH0sXG4gIFwiaWJtODU1XCI6IFwiY3A4NTVcIixcbiAgXCJjc2libTg1NVwiOiBcImNwODU1XCIsXG4gIFwiY3A4NTZcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIteQ15HXkteT15TXldeW15fXmNeZ15rXm9ec153Xntef16DXodei16PXpNel16bXp9eo16nXqu+/vcKj77+9w5fvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73CrsKswr3CvO+/vcKrwrvilpHilpLilpPilILilKTvv73vv73vv73CqeKVo+KVkeKVl+KVncKiwqXilJDilJTilLTilKzilJzilIDilLzvv73vv73ilZrilZTilanilabilaDilZDilazCpO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veKUmOKUjOKWiOKWhMKm77+94paA77+977+977+977+977+977+9wrXvv73vv73vv73vv73vv73vv73vv73Cr8K0wq3CseKAl8K+wrbCp8O3wrjCsMKowrfCucKzwrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtODU2XCI6IFwiY3A4NTZcIixcbiAgXCJjc2libTg1NlwiOiBcImNwODU2XCIsXG4gIFwiY3A4NTdcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOHw7zDqcOiw6TDoMOlw6fDqsOrw6jDr8OuxLHDhMOFw4nDpsOGw7TDtsOyw7vDucSww5bDnMO4wqPDmMWexZ/DocOtw7PDusOxw5HEnsSfwr/CrsKswr3CvMKhwqvCu+KWkeKWkuKWk+KUguKUpMOBw4LDgMKp4pWj4pWR4pWX4pWdwqLCpeKUkOKUlOKUtOKUrOKUnOKUgOKUvMOjw4PilZrilZTilanilabilaDilZDilazCpMK6wqrDisOLw4jvv73DjcOOw4/ilJjilIzilojiloTCpsOM4paAw5PDn8OUw5LDtcOVwrXvv73Dl8Oaw5vDmcOsw7/Cr8K0wq3Cse+/vcK+wrbCp8O3wrjCsMKowrfCucKzwrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtODU3XCI6IFwiY3A4NTdcIixcbiAgXCJjc2libTg1N1wiOiBcImNwODU3XCIsXG4gIFwiY3A4NThcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOHw7zDqcOiw6TDoMOlw6fDqsOrw6jDr8Ouw6zDhMOFw4nDpsOGw7TDtsOyw7vDucO/w5bDnMO4wqPDmMOXxpLDocOtw7PDusOxw5HCqsK6wr/CrsKswr3CvMKhwqvCu+KWkeKWkuKWk+KUguKUpMOBw4LDgMKp4pWj4pWR4pWX4pWdwqLCpeKUkOKUlOKUtOKUrOKUnOKUgOKUvMOjw4PilZrilZTilanilabilaDilZDilazCpMOww5DDisOLw4jigqzDjcOOw4/ilJjilIzilojiloTCpsOM4paAw5PDn8OUw5LDtcOVwrXDvsOew5rDm8OZw73DncKvwrTCrcKx4oCXwr7CtsKnw7fCuMKwwqjCt8K5wrPCsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NThcIjogXCJjcDg1OFwiLFxuICBcImNzaWJtODU4XCI6IFwiY3A4NThcIixcbiAgXCJjcDg2MFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4fDvMOpw6LDo8Ogw4HDp8Oqw4rDqMONw5TDrMODw4LDicOAw4jDtMO1w7LDmsO5w4zDlcOcwqLCo8OZ4oKnw5PDocOtw7PDusOxw5HCqsK6wr/DksKswr3CvMKhwqvCu+KWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgM6xw5/Ok8+AzqPPg8K1z4TOps6YzqnOtOKIns+GzrXiiKniiaHCseKJpeKJpOKMoOKMocO34omIwrDiiJnCt+KImuKBv8Ky4pagwqBcIlxuICB9LFxuICBcImlibTg2MFwiOiBcImNwODYwXCIsXG4gIFwiY3NpYm04NjBcIjogXCJjcDg2MFwiLFxuICBcImNwODYxXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDh8O8w6nDosOkw6DDpcOnw6rDq8Oow5DDsMOew4TDhcOJw6bDhsO0w7bDvsO7w53DvcOWw5zDuMKjw5jigqfGksOhw63Ds8O6w4HDjcOTw5rCv+KMkMKswr3CvMKhwqvCu+KWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgM6xw5/Ok8+AzqPPg8K1z4TOps6YzqnOtOKIns+GzrXiiKniiaHCseKJpeKJpOKMoOKMocO34omIwrDiiJnCt+KImuKBv8Ky4pagwqBcIlxuICB9LFxuICBcImlibTg2MVwiOiBcImNwODYxXCIsXG4gIFwiY3NpYm04NjFcIjogXCJjcDg2MVwiLFxuICBcImNwODYyXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLXkNeR15LXk9eU15XXlteX15jXmdea15vXnNed157Xn9eg16HXotej16TXpdem16fXqNep16rCosKjwqXigqfGksOhw63Ds8O6w7HDkcKqwrrCv+KMkMKswr3CvMKhwqvCu+KWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgM6xw5/Ok8+AzqPPg8K1z4TOps6YzqnOtOKIns+GzrXiiKniiaHCseKJpeKJpOKMoOKMocO34omIwrDiiJnCt+KImuKBv8Ky4pagwqBcIlxuICB9LFxuICBcImlibTg2MlwiOiBcImNwODYyXCIsXG4gIFwiY3NpYm04NjJcIjogXCJjcDg2MlwiLFxuICBcImNwODYzXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDh8O8w6nDosOCw6DCtsOnw6rDq8Oow6/DruKAl8OAwqfDicOIw4rDtMOLw4/Du8O5wqTDlMOcwqLCo8OZw5vGksKmwrTDs8O6wqjCuMKzwq/DjuKMkMKswr3CvMK+wqvCu+KWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgM6xw5/Ok8+AzqPPg8K1z4TOps6YzqnOtOKIns+GzrXiiKniiaHCseKJpeKJpOKMoOKMocO34omIwrDiiJnCt+KImuKBv8Ky4pagwqBcIlxuICB9LFxuICBcImlibTg2M1wiOiBcImNwODYzXCIsXG4gIFwiY3NpYm04NjNcIjogXCJjcDg2M1wiLFxuICBcImNwODY0XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcXHUwMDAwXFx1MDAwMVxcdTAwMDJcXHUwMDAzXFx1MDAwNFxcdTAwMDVcXHUwMDA2XFx1MDAwN1xcYlxcdFxcblxcdTAwMGJcXGZcXHJcXHUwMDBlXFx1MDAwZlxcdTAwMTBcXHUwMDExXFx1MDAxMlxcdTAwMTNcXHUwMDE0XFx1MDAxNVxcdTAwMTZcXHUwMDE3XFx1MDAxOFxcdTAwMTlcXHUwMDFhXFx1MDAxYlxcdTAwMWNcXHUwMDFkXFx1MDAxZVxcdTAwMWYgIVxcXCIjJNmqJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/wrDCt+KImeKImuKWkuKUgOKUguKUvOKUpOKUrOKUnOKUtOKUkOKUjOKUlOKUmM6y4oiez4bCscK9wrziiYjCq8K777u377u477+977+977u777u877+9wqDCre+6gsKjwqTvuoTvv73vv73vuo7vuo/vupXvupnYjO+6ne+6oe+6pdmg2aHZotmj2aTZpdmm2afZqNmp77uR2JvvurHvurXvurnYn8Ki77qA77qB77qD77qF77uK77qL77qN77qR77qT77qX77qb77qf77qj77qn77qp77qr77qt77qv77qz77q377q777q/77uB77uF77uL77uPwqbCrMO3w5fvu4nZgO+7k++7l++7m++7n++7o++7p++7q++7re+7r++7s++6ve+7jO+7ju+7je+7oe+5vdmR77ul77up77us77uw77uy77uQ77uV77u177u277ud77uZ77ux4pag77+9XCJcbiAgfSxcbiAgXCJpYm04NjRcIjogXCJjcDg2NFwiLFxuICBcImNzaWJtODY0XCI6IFwiY3A4NjRcIixcbiAgXCJjcDg2NVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4fDvMOpw6LDpMOgw6XDp8Oqw6vDqMOvw67DrMOEw4XDicOmw4bDtMO2w7LDu8O5w7/DlsOcw7jCo8OY4oKnxpLDocOtw7PDusOxw5HCqsK6wr/ijJDCrMK9wrzCocKrwqTilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDOscOfzpPPgM6jz4PCtc+EzqbOmM6pzrTiiJ7Phs614oip4omhwrHiiaXiiaTijKDijKHDt+KJiMKw4oiZwrfiiJrigb/CsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NjVcIjogXCJjcDg2NVwiLFxuICBcImNzaWJtODY1XCI6IFwiY3A4NjVcIixcbiAgXCJjcDg2NlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/4paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paA0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y/QgdGR0ITRlNCH0ZfQjtGewrDiiJnCt+KImuKElsKk4pagwqBcIlxuICB9LFxuICBcImlibTg2NlwiOiBcImNwODY2XCIsXG4gIFwiY3NpYm04NjZcIjogXCJjcDg2NlwiLFxuICBcImNwODY5XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLvv73vv73vv73vv73vv73vv73Ohu+/vcK3wqzCpuKAmOKAmc6I4oCVzonOis6qzozvv73vv73Ojs6rwqnOj8KywrPOrMKjzq3Ors6vz4rOkM+Mz43Okc6SzpPOlM6VzpbOl8K9zpjOmcKrwrvilpHilpLilpPilILilKTOms6bzpzOneKVo+KVkeKVl+KVnc6ezp/ilJDilJTilLTilKzilJzilIDilLzOoM6h4pWa4pWU4pWp4pWm4pWg4pWQ4pWszqPOpM6lzqbOp86ozqnOsc6yzrPilJjilIzilojiloTOtM614paAzrbOt864zrnOus67zrzOvc6+zr/PgM+Bz4PPgs+EzoTCrcKxz4XPhs+HwqfPiM6FwrDCqM+Jz4vOsM+O4pagwqBcIlxuICB9LFxuICBcImlibTg2OVwiOiBcImNwODY5XCIsXG4gIFwiY3NpYm04NjlcIjogXCJjcDg2OVwiLFxuICBcImNwOTIyXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDCocKiwqPCpMKlwqbCp8KowqnCqsKrwqzCrcKu4oC+wrDCscKywrPCtMK1wrbCt8K4wrnCusK7wrzCvcK+wr/DgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8Wgw5HDksOTw5TDlcOWw5fDmMOZw5rDm8Ocw53FvcOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/FocOxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMO9xb7Dv1wiXG4gIH0sXG4gIFwiaWJtOTIyXCI6IFwiY3A5MjJcIixcbiAgXCJjc2libTkyMlwiOiBcImNwOTIyXCIsXG4gIFwiY3AxMDQ2XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLvuojDl8O376O276O176O076O377mxwojilqDilILilIDilJDilIzilJTilJjvubnvubvvub3vub/vubfvuorvu7Dvu7Pvu7Lvu47vu4/vu5Dvu7bvu7jvu7rvu7zCoO+juu+jue+juMKk76O777qL77qR77qX77qb77qf77qj2IzCre+6p++6s9mg2aHZotmj2aTZpdmm2afZqNmp77q32Jvvurvvur/vu4rYn++7i9ih2KLYo9ik2KXYptin2KjYqdiq2KvYrNit2K7Yr9iw2LHYstiz2LTYtdi22Lfvu4fYudi677uM77qC77qE77qO77uT2YDZgdmC2YPZhNmF2YbZh9mI2YnZitmL2YzZjdmO2Y/ZkNmR2ZLvu5fvu5vvu5/vo7zvu7Xvu7fvu7nvu7vvu6Pvu6fvu6zvu6nvv71cIlxuICB9LFxuICBcImlibTEwNDZcIjogXCJjcDEwNDZcIixcbiAgXCJjc2libTEwNDZcIjogXCJjcDEwNDZcIixcbiAgXCJjcDExMjRcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoNCB0ILSkNCE0IXQhtCH0IjQidCK0IvQjMKt0I7Qj9CQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGP4oSW0ZHRktKR0ZTRldGW0ZfRmNGZ0ZrRm9GcwqfRntGfXCJcbiAgfSxcbiAgXCJpYm0xMTI0XCI6IFwiY3AxMTI0XCIsXG4gIFwiY3NpYm0xMTI0XCI6IFwiY3AxMTI0XCIsXG4gIFwiY3AxMTI1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLQkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/ilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDRgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj9CB0ZHSkNKR0ITRlNCG0ZbQh9GXwrfiiJrihJbCpOKWoMKgXCJcbiAgfSxcbiAgXCJpYm0xMTI1XCI6IFwiY3AxMTI1XCIsXG4gIFwiY3NpYm0xMTI1XCI6IFwiY3AxMTI1XCIsXG4gIFwiY3AxMTI5XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDCocKiwqPCpMKlwqbCp8WTwqnCqsKrwqzCrcKuwq/CsMKxwrLCs8W4wrXCtsK3xZLCucK6wrvCvMK9wr7Cv8OAw4HDgsSCw4TDhcOGw4fDiMOJw4rDi8yAw43DjsOPxJDDkcyJw5PDlMagw5bDl8OYw5nDmsObw5zGr8yDw5/DoMOhw6LEg8Okw6XDpsOnw6jDqcOqw6vMgcOtw67Dr8SRw7HMo8Ozw7TGocO2w7fDuMO5w7rDu8O8xrDigqvDv1wiXG4gIH0sXG4gIFwiaWJtMTEyOVwiOiBcImNwMTEyOVwiLFxuICBcImNzaWJtMTEyOVwiOiBcImNwMTEyOVwiLFxuICBcImNwMTEzM1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8Kg4LqB4LqC4LqE4LqH4LqI4Lqq4LqK4LqN4LqU4LqV4LqW4LqX4LqZ4Lqa4Lqb4Lqc4Lqd4Lqe4Lqf4Lqh4Lqi4Lqj4Lql4Lqn4Lqr4Lqt4Lqu77+977+977+94Lqv4Lqw4Lqy4Lqz4Lq04Lq14Lq24Lq34Lq44Lq54Lq84Lqx4Lq74Lq977+977+977+94LuA4LuB4LuC4LuD4LuE4LuI4LuJ4LuK4LuL4LuM4LuN4LuG77+94Luc4Lud4oKt77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+94LuQ4LuR4LuS4LuT4LuU4LuV4LuW4LuX4LuY4LuZ77+977+9wqLCrMKm77+9XCJcbiAgfSxcbiAgXCJpYm0xMTMzXCI6IFwiY3AxMTMzXCIsXG4gIFwiY3NpYm0xMTMzXCI6IFwiY3AxMTMzXCIsXG4gIFwiY3AxMTYxXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73guYjguIHguILguIPguITguIXguIbguIfguIjguInguIrguIvguIzguI3guI7guI/guJDguJHguJLguJPguJTguJXguJbguJfguJjguJnguJrguJvguJzguJ3guJ7guJ/guKDguKHguKLguKPguKTguKXguKbguKfguKjguKnguKrguKvguKzguK3guK7guK/guLDguLHguLLguLPguLTguLXguLbguLfguLjguLnguLrguYnguYrguYvigqzguL/guYDguYHguYLguYPguYTguYXguYbguYfguYjguYnguYrguYvguYzguY3guY7guY/guZDguZHguZLguZPguZTguZXguZbguZfguZjguZnguZrguZvCosKswqbCoFwiXG4gIH0sXG4gIFwiaWJtMTE2MVwiOiBcImNwMTE2MVwiLFxuICBcImNzaWJtMTE2MVwiOiBcImNwMTE2MVwiLFxuICBcImNwMTE2MlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4oKswoHCgsKDwoTigKbChsKHwojCicKKwovCjMKNwo7Cj8KQ4oCY4oCZ4oCc4oCd4oCi4oCT4oCUwpjCmcKawpvCnMKdwp7Cn8Kg4LiB4LiC4LiD4LiE4LiF4LiG4LiH4LiI4LiJ4LiK4LiL4LiM4LiN4LiO4LiP4LiQ4LiR4LiS4LiT4LiU4LiV4LiW4LiX4LiY4LiZ4Lia4Lib4Lic4Lid4Lie4Lif4Lig4Lih4Lii4Lij4Lik4Lil4Lim4Lin4Lio4Lip4Liq4Lir4Lis4Lit4Liu4Liv4Liw4Lix4Liy4Liz4Li04Li14Li24Li34Li44Li54Li677+977+977+977+94Li/4LmA4LmB4LmC4LmD4LmE4LmF4LmG4LmH4LmI4LmJ4LmK4LmL4LmM4LmN4LmO4LmP4LmQ4LmR4LmS4LmT4LmU4LmV4LmW4LmX4LmY4LmZ4Lma4Lmb77+977+977+977+9XCJcbiAgfSxcbiAgXCJpYm0xMTYyXCI6IFwiY3AxMTYyXCIsXG4gIFwiY3NpYm0xMTYyXCI6IFwiY3AxMTYyXCIsXG4gIFwiY3AxMTYzXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDCocKiwqPigqzCpcKmwqfFk8KpwqrCq8Kswq3CrsKvwrDCscKywrPFuMK1wrbCt8WSwrnCusK7wrzCvcK+wr/DgMOBw4LEgsOEw4XDhsOHw4jDicOKw4vMgMONw47Dj8SQw5HMicOTw5TGoMOWw5fDmMOZw5rDm8Ocxq/Mg8Ofw6DDocOixIPDpMOlw6bDp8Oow6nDqsOrzIHDrcOuw6/EkcOxzKPDs8O0xqHDtsO3w7jDucO6w7vDvMaw4oKrw79cIlxuICB9LFxuICBcImlibTExNjNcIjogXCJjcDExNjNcIixcbiAgXCJjc2libTExNjNcIjogXCJjcDExNjNcIixcbiAgXCJtYWNjcm9hdGlhblwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuxaDihKLCtMKo4omgxb3DmOKInsKx4omk4oml4oiGwrXiiILiiJHiiI/FoeKIq8KqwrrihKbFvsO4wr/CocKs4oiaxpLiiYjEhsKrxIzigKbCoMOAw4PDlcWSxZPEkOKAlOKAnOKAneKAmOKAmcO34peK77+9wqnigYTCpOKAueKAusOGwrvigJPCt+KAmuKAnuKAsMOCxIfDgcSNw4jDjcOOw4/DjMOTw5TEkcOSw5rDm8OZxLHLhsucwq/PgMOLy5rCuMOKw6bLh1wiXG4gIH0sXG4gIFwibWFjY3lyaWxsaWNcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcItCQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/igKDCsMKiwqPCp+KAosK20IbCrsKp4oSi0ILRkuKJoNCD0ZPiiJ7CseKJpOKJpdGWwrXiiILQiNCE0ZTQh9GX0InRmdCK0ZrRmNCFwqziiJrGkuKJiOKIhsKrwrvigKbCoNCL0ZvQjNGc0ZXigJPigJTigJzigJ3igJjigJnDt+KAntCO0Z7Qj9Gf4oSW0IHRkdGP0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7CpFwiXG4gIH0sXG4gIFwibWFjZ3JlZWtcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOEwrnCssOJwrPDlsOczoXDoMOiw6TOhMKow6fDqcOow6rDq8Kj4oSiw67Dr+KAosK94oCww7TDtsKmwq3DucO7w7zigKDOk86UzpjOm86ezqDDn8KuwqnOo86qwqfiiaDCsM6HzpHCseKJpOKJpcKlzpLOlc6WzpfOmc6azpzOps6rzqjOqc6szp3CrM6fzqHiiYjOpMKrwrvigKbCoM6lzqfOhs6IxZPigJPigJXigJzigJ3igJjigJnDt86JzorOjM6Ozq3Ors6vz4zOj8+NzrHOss+IzrTOtc+GzrPOt865zr7Ous67zrzOvc6/z4DPjs+Bz4PPhM64z4nPgs+Hz4XOts+Kz4vOkM6w77+9XCJcbiAgfSxcbiAgXCJtYWNpY2VsYW5kXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O8w53CsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrihKbDpsO4wr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W44oGEwqTDkMOww57DvsO9wrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU77+9w5LDmsObw5nEscuGy5zCr8uYy5nLmsK4y53Lm8uHXCJcbiAgfSxcbiAgXCJtYWNyb21hblwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgw4bDmOKInsKx4omk4omlwqXCteKIguKIkeKIj8+A4oirwqrCuuKEpsOmw7jCv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjigYTCpOKAueKAuu+sge+sguKAocK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+/vcOSw5rDm8OZxLHLhsucwq/LmMuZy5rCuMudy5vLh1wiXG4gIH0sXG4gIFwibWFjcm9tYW5pYVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgxILFnuKInsKx4omk4omlwqXCteKIguKIkeKIj8+A4oirwqrCuuKEpsSDxZ/Cv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjigYTCpOKAueKAusWixaPigKHCt+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvv73DksOaw5vDmcSxy4bLnMKvy5jLmcuawrjLncuby4dcIlxuICB9LFxuICBcIm1hY3RoYWlcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKrwrvigKbvoozvoo/vopLvopXvopjvoovvoo7vopHvopTvopfigJzigJ3vopnvv73igKLvooTvoonvooXvoobvoofvoojvoorvoo3vopDvopPvopbigJjigJnvv73CoOC4geC4guC4g+C4hOC4heC4huC4h+C4iOC4ieC4iuC4i+C4jOC4jeC4juC4j+C4kOC4keC4kuC4k+C4lOC4leC4luC4l+C4mOC4meC4muC4m+C4nOC4neC4nuC4n+C4oOC4oeC4ouC4o+C4pOC4peC4puC4p+C4qOC4qeC4quC4q+C4rOC4reC4ruC4r+C4sOC4seC4suC4s+C4tOC4teC4tuC4t+C4uOC4ueC4uu+7v+KAi+KAk+KAlOC4v+C5gOC5geC5guC5g+C5hOC5heC5huC5h+C5iOC5ieC5iuC5i+C5jOC5jeKEouC5j+C5kOC5keC5kuC5k+C5lOC5leC5luC5l+C5mOC5mcKuwqnvv73vv73vv73vv71cIlxuICB9LFxuICBcIm1hY3R1cmtpc2hcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrihKbDpsO4wr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W4xJ7En8SwxLHFnsWf4oChwrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU77+9w5LDmsObw5nvv73Lhsucwq/LmMuZy5rCuMudy5vLh1wiXG4gIH0sXG4gIFwibWFjdWtyYWluZVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr+KAoMKw0pDCo8Kn4oCiwrbQhsKuwqnihKLQgtGS4omg0IPRk+KInsKx4omk4oml0ZbCtdKR0IjQhNGU0IfRl9CJ0ZnQitGa0ZjQhcKs4oiaxpLiiYjiiIbCq8K74oCmwqDQi9Gb0IzRnNGV4oCT4oCU4oCc4oCd4oCY4oCZw7figJ7QjtGe0I/Rn+KEltCB0ZHRj9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGOwqRcIlxuICB9LFxuICBcImtvaThyXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLilIDilILilIzilJDilJTilJjilJzilKTilKzilLTilLziloDiloTilojilozilpDilpHilpLilpPijKDilqDiiJniiJriiYjiiaTiiaXCoOKMocKwwrLCt8O34pWQ4pWR4pWS0ZHilZPilZTilZXilZbilZfilZjilZnilZrilZvilZzilZ3ilZ7ilZ/ilaDilaHQgeKVouKVo+KVpOKVpeKVpuKVp+KVqOKVqeKVquKVq+KVrMKp0Y7QsNCx0YbQtNC10YTQs9GF0LjQudC60LvQvNC90L7Qv9GP0YDRgdGC0YPQttCy0YzRi9C30YjRjdGJ0YfRitCu0JDQkdCm0JTQldCk0JPQpdCY0JnQmtCb0JzQndCe0J/Qr9Cg0KHQotCj0JbQktCs0KvQl9Co0K3QqdCn0KpcIlxuICB9LFxuICBcImtvaTh1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLilIDilILilIzilJDilJTilJjilJzilKTilKzilLTilLziloDiloTilojilozilpDilpHilpLilpPijKDilqDiiJniiJriiYjiiaTiiaXCoOKMocKwwrLCt8O34pWQ4pWR4pWS0ZHRlOKVlNGW0ZfilZfilZjilZnilZrilZvSkeKVneKVnuKVn+KVoOKVodCB0ITilaPQhtCH4pWm4pWn4pWo4pWp4pWq0pDilazCqdGO0LDQsdGG0LTQtdGE0LPRhdC40LnQutC70LzQvdC+0L/Rj9GA0YHRgtGD0LbQstGM0YvQt9GI0Y3RidGH0YrQrtCQ0JHQptCU0JXQpNCT0KXQmNCZ0JrQm9Cc0J3QntCf0K/QoNCh0KLQo9CW0JLQrNCr0JfQqNCt0KnQp9CqXCJcbiAgfSxcbiAgXCJrb2k4cnVcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIuKUgOKUguKUjOKUkOKUlOKUmOKUnOKUpOKUrOKUtOKUvOKWgOKWhOKWiOKWjOKWkOKWkeKWkuKWk+KMoOKWoOKImeKImuKJiOKJpOKJpcKg4oyhwrDCssK3w7filZDilZHilZLRkdGU4pWU0ZbRl+KVl+KVmOKVmeKVmuKVm9KR0Z7ilZ7ilZ/ilaDilaHQgdCE4pWj0IbQh+KVpuKVp+KVqOKVqeKVqtKQ0I7CqdGO0LDQsdGG0LTQtdGE0LPRhdC40LnQutC70LzQvdC+0L/Rj9GA0YHRgtGD0LbQstGM0YvQt9GI0Y3RidGH0YrQrtCQ0JHQptCU0JXQpNCT0KXQmNCZ0JrQm9Cc0J3QntCf0K/QoNCh0KLQo9CW0JLQrNCr0JfQqNCt0KnQp9CqXCJcbiAgfSxcbiAgXCJrb2k4dFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi0pvSk+KAmtKS4oCe4oCm4oCg4oCh77+94oCw0rPigLnSstK30rbvv73SmuKAmOKAmeKAnOKAneKAouKAk+KAlO+/veKEou+/veKAuu+/ve+/ve+/ve+/ve+/vdOv067RkcKk06PCpsKn77+977+977+9wqvCrMKtwq7vv73CsMKxwrLQge+/vdOiwrbCt++/veKElu+/vcK777+977+977+9wqnRjtCw0LHRhtC00LXRhNCz0YXQuNC50LrQu9C80L3QvtC/0Y/RgNGB0YLRg9C20LLRjNGL0LfRiNGN0YnRh9GK0K7QkNCR0KbQlNCV0KTQk9Cl0JjQmdCa0JvQnNCd0J7Qn9Cv0KDQodCi0KPQltCS0KzQq9CX0KjQrdCp0KfQqlwiXG4gIH0sXG4gIFwiYXJtc2NpaThcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoO+/vdaH1okpKMK7wqvigJQu1Z0sLdaK4oCm1ZzVm9We1LHVodSy1aLUs9Wj1LTVpNS11aXUttWm1LfVp9S41ajUudWp1LrVqtS71avUvNWs1L3VrdS+1a7Uv9Wv1YDVsNWB1bHVgtWy1YPVs9WE1bTVhdW11YbVttWH1bfViNW41YnVudWK1brVi9W71YzVvNWN1b3VjtW+1Y/Vv9WQ1oDVkdaB1ZLWgtWT1oPVlNaE1ZXWhdWW1obVmu+/vVwiXG4gIH0sXG4gIFwicmsxMDQ4XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLQgtCD4oCa0ZPigJ7igKbigKDigKHigqzigLDQieKAudCK0prSutCP0ZLigJjigJnigJzigJ3igKLigJPigJTvv73ihKLRmeKAutGa0pvSu9GfwqDSsNKx05jCpNOowqbCp9CBwqnSksKrwqzCrcKu0q7CsMKx0IbRltOpwrXCtsK30ZHihJbSk8K705nSotKj0q/QkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj1wiXG4gIH0sXG4gIFwidGN2blwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXFx1MDAwMMOa4bukXFx1MDAwM+G7quG7rOG7rlxcdTAwMDdcXGJcXHRcXG5cXHUwMDBiXFxmXFxyXFx1MDAwZVxcdTAwMGZcXHUwMDEw4buo4buw4buy4bu24bu4w53hu7RcXHUwMDE4XFx1MDAxOVxcdTAwMWFcXHUwMDFiXFx1MDAxY1xcdTAwMWRcXHUwMDFlXFx1MDAxZiAhXFxcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f8OA4bqiw4PDgeG6oOG6tuG6rMOI4bq64bq8w4nhurjhu4bDjOG7iMSow43hu4rDkuG7jsOVw5Phu4zhu5jhu5zhu57hu6Dhu5rhu6LDmeG7psWowqDEgsOCw4rDlMagxq/EkMSDw6LDqsO0xqHGsMSR4bqwzIDMicyDzIHMo8Og4bqjw6PDoeG6oeG6suG6seG6s+G6teG6r+G6tOG6ruG6puG6qOG6quG6pOG7gOG6t+G6p+G6qeG6q+G6peG6rcOo4buC4bq74bq9w6nhurnhu4Hhu4Phu4Xhur/hu4fDrOG7ieG7hOG6vuG7ksSpw63hu4vDsuG7lOG7j8O1w7Phu43hu5Phu5Xhu5fhu5Hhu5nhu53hu5/hu6Hhu5vhu6PDueG7luG7p8Wpw7rhu6Xhu6vhu63hu6/hu6nhu7Hhu7Phu7fhu7nDveG7teG7kFwiXG4gIH0sXG4gIFwiZ2VvcmdpYW5hY2FkZW15XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKB4oCaxpLigJ7igKbigKDigKHLhuKAsMWg4oC5xZLCjcKOwo/CkOKAmOKAmeKAnOKAneKAouKAk+KAlMuc4oSixaHigLrFk8Kdwp7FuMKgwqHCosKjwqTCpcKmwqfCqMKpwqrCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnCusK7wrzCvcK+wr/hg5Dhg5Hhg5Lhg5Phg5Thg5Xhg5bhg5fhg5jhg5nhg5rhg5vhg5zhg53hg57hg5/hg6Dhg6Hhg6Lhg6Phg6Thg6Xhg6bhg6fhg6jhg6nhg6rhg6vhg6zhg63hg67hg6/hg7Dhg7Hhg7Lhg7Phg7Thg7Xhg7bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMO9w77Dv1wiXG4gIH0sXG4gIFwiZ2VvcmdpYW5wc1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgeKAmsaS4oCe4oCm4oCg4oChy4bigLDFoOKAucWSwo3CjsKPwpDigJjigJnigJzigJ3igKLigJPigJTLnOKEosWh4oC6xZPCncKexbjCoMKhwqLCo8KkwqXCpsKnwqjCqcKqwqvCrMKtwq7Cr8KwwrHCssKzwrTCtcK2wrfCuMK5wrrCu8K8wr3CvsK/4YOQ4YOR4YOS4YOT4YOU4YOV4YOW4YOx4YOX4YOY4YOZ4YOa4YOb4YOc4YOy4YOd4YOe4YOf4YOg4YOh4YOi4YOz4YOj4YOk4YOl4YOm4YOn4YOo4YOp4YOq4YOr4YOs4YOt4YOu4YO04YOv4YOw4YO1w6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMO9w77Dv1wiXG4gIH0sXG4gIFwicHQxNTRcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcItKW0pLTrtKT4oCe4oCm0rbSrtKy0q/SoNOi0qLSmtK60rjSl+KAmOKAmeKAnOKAneKAouKAk+KAlNKz0rfSodOj0qPSm9K70rnCoNCO0Z7QiNOo0pjSsMKn0IHCqdOYwqvCrNOvwq7SnMKw0rHQhtGW0pnTqcK2wrfRkeKEltOZwrvRmNKq0qvSndCQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGPXCJcbiAgfSxcbiAgXCJ2aXNjaWlcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlxcdTAwMDBcXHUwMDAx4bqyXFx1MDAwM1xcdTAwMDThurThuqpcXHUwMDA3XFxiXFx0XFxuXFx1MDAwYlxcZlxcclxcdTAwMGVcXHUwMDBmXFx1MDAxMFxcdTAwMTFcXHUwMDEyXFx1MDAxM+G7tlxcdTAwMTVcXHUwMDE2XFx1MDAxN1xcdTAwMTjhu7hcXHUwMDFhXFx1MDAxYlxcdTAwMWNcXHUwMDFk4bu0XFx1MDAxZiAhXFxcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f+G6oOG6ruG6sOG6tuG6pOG6puG6qOG6rOG6vOG6uOG6vuG7gOG7guG7hOG7huG7kOG7kuG7lOG7luG7mOG7ouG7muG7nOG7nuG7iuG7juG7jOG7iOG7psWo4buk4buyw5Xhuq/hurHhurfhuqXhuqfhuqnhuq3hur3hurnhur/hu4Hhu4Phu4Xhu4fhu5Hhu5Phu5Xhu5fhu6DGoOG7meG7neG7n+G7i+G7sOG7qOG7quG7rMah4bubxq/DgMOBw4LDg+G6osSC4bqz4bq1w4jDicOK4bq6w4zDjcSo4buzxJDhu6nDksOTw5ThuqHhu7fhu6vhu63DmcOa4bu54bu1w53hu6HGsMOgw6HDosOj4bqjxIPhu6/huqvDqMOpw6rhurvDrMOtxKnhu4nEkeG7scOyw7PDtMO14buP4buN4bulw7nDusWp4bunw73hu6Phu65cIlxuICB9LFxuICBcImlzbzY0NmNuXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcXHUwMDAwXFx1MDAwMVxcdTAwMDJcXHUwMDAzXFx1MDAwNFxcdTAwMDVcXHUwMDA2XFx1MDAwN1xcYlxcdFxcblxcdTAwMGJcXGZcXHJcXHUwMDBlXFx1MDAwZlxcdTAwMTBcXHUwMDExXFx1MDAxMlxcdTAwMTNcXHUwMDE0XFx1MDAxNVxcdTAwMTZcXHUwMDE3XFx1MDAxOFxcdTAwMTlcXHUwMDFhXFx1MDAxYlxcdTAwMWNcXHUwMDFkXFx1MDAxZVxcdTAwMWYgIVxcXCIjwqUlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8feKAvn/vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv71cIlxuICB9LFxuICBcImlzbzY0NmpwXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcXHUwMDAwXFx1MDAwMVxcdTAwMDJcXHUwMDAzXFx1MDAwNFxcdTAwMDVcXHUwMDA2XFx1MDAwN1xcYlxcdFxcblxcdTAwMGJcXGZcXHJcXHUwMDBlXFx1MDAwZlxcdTAwMTBcXHUwMDExXFx1MDAxMlxcdTAwMTNcXHUwMDE0XFx1MDAxNVxcdTAwMTZcXHUwMDE3XFx1MDAxOFxcdTAwMTlcXHUwMDFhXFx1MDAxYlxcdTAwMWNcXHUwMDFkXFx1MDAxZVxcdTAwMWYgIVxcXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWlvCpV1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8feKAvn/vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv71cIlxuICB9LFxuICBcImhwcm9tYW44XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDDgMOCw4jDisOLw47Dj8K0y4vLhsKoy5zDmcOb4oKkwq/DncO9wrDDh8Onw5HDscKhwr/CpMKjwqXCp8aSwqLDosOqw7TDu8Ohw6nDs8O6w6DDqMOyw7nDpMOrw7bDvMOFw67DmMOGw6XDrcO4w6bDhMOsw5bDnMOJw6/Dn8OUw4HDg8Ojw5DDsMONw4zDk8OSw5XDtcWgxaHDmsW4w7/DnsO+wrfCtcK2wr7igJTCvMK9wqrCusKr4pagwrvCse+/vVwiXG4gIH0sXG4gIFwibWFjaW50b3NoXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDDhsOY4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK64oSmw6bDuMK/wqHCrOKImsaS4omI4oiGwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmcO34peKw7/FuOKBhMKk4oC54oC676yB76yC4oChwrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU77+9w5LDmsObw5nEscuGy5zCr8uYy5nLmsK4y53Lm8uHXCJcbiAgfSxcbiAgXCJhc2NpaVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+9XCJcbiAgfSxcbiAgXCJ0aXM2MjBcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veC4geC4guC4g+C4hOC4heC4huC4h+C4iOC4ieC4iuC4i+C4jOC4jeC4juC4j+C4kOC4keC4kuC4k+C4lOC4leC4luC4l+C4mOC4meC4muC4m+C4nOC4neC4nuC4n+C4oOC4oeC4ouC4o+C4pOC4peC4puC4p+C4qOC4qeC4quC4q+C4rOC4reC4ruC4r+C4sOC4seC4suC4s+C4tOC4teC4tuC4t+C4uOC4ueC4uu+/ve+/ve+/ve+/veC4v+C5gOC5geC5guC5g+C5hOC5heC5huC5h+C5iOC5ieC5iuC5i+C5jOC5jeC5juC5j+C5kOC5keC5kuC5k+C5lOC5leC5luC5l+C5mOC5meC5muC5m++/ve+/ve+/ve+/vVwiXG4gIH1cbn0iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBCdWZmZXIgPSByZXF1aXJlKFwic2FmZXItYnVmZmVyXCIpLkJ1ZmZlcjtcblxuLy8gTXVsdGlieXRlIGNvZGVjLiBJbiB0aGlzIHNjaGVtZSwgYSBjaGFyYWN0ZXIgaXMgcmVwcmVzZW50ZWQgYnkgMSBvciBtb3JlIGJ5dGVzLlxuLy8gT3VyIGNvZGVjIHN1cHBvcnRzIFVURi0xNiBzdXJyb2dhdGVzLCBleHRlbnNpb25zIGZvciBHQjE4MDMwIGFuZCB1bmljb2RlIHNlcXVlbmNlcy5cbi8vIFRvIHNhdmUgbWVtb3J5IGFuZCBsb2FkaW5nIHRpbWUsIHdlIHJlYWQgdGFibGUgZmlsZXMgb25seSB3aGVuIHJlcXVlc3RlZC5cblxuZXhwb3J0cy5fZGJjcyA9IERCQ1NDb2RlYztcblxudmFyIFVOQVNTSUdORUQgPSAtMSxcbiAgICBHQjE4MDMwX0NPREUgPSAtMixcbiAgICBTRVFfU1RBUlQgID0gLTEwLFxuICAgIE5PREVfU1RBUlQgPSAtMTAwMCxcbiAgICBVTkFTU0lHTkVEX05PREUgPSBuZXcgQXJyYXkoMHgxMDApLFxuICAgIERFRl9DSEFSID0gLTE7XG5cbmZvciAodmFyIGkgPSAwOyBpIDwgMHgxMDA7IGkrKylcbiAgICBVTkFTU0lHTkVEX05PREVbaV0gPSBVTkFTU0lHTkVEO1xuXG5cbi8vIENsYXNzIERCQ1NDb2RlYyByZWFkcyBhbmQgaW5pdGlhbGl6ZXMgbWFwcGluZyB0YWJsZXMuXG5mdW5jdGlvbiBEQkNTQ29kZWMoY29kZWNPcHRpb25zLCBpY29udikge1xuICAgIHRoaXMuZW5jb2RpbmdOYW1lID0gY29kZWNPcHRpb25zLmVuY29kaW5nTmFtZTtcbiAgICBpZiAoIWNvZGVjT3B0aW9ucylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiREJDUyBjb2RlYyBpcyBjYWxsZWQgd2l0aG91dCB0aGUgZGF0YS5cIilcbiAgICBpZiAoIWNvZGVjT3B0aW9ucy50YWJsZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW5jb2RpbmcgJ1wiICsgdGhpcy5lbmNvZGluZ05hbWUgKyBcIicgaGFzIG5vIGRhdGEuXCIpO1xuXG4gICAgLy8gTG9hZCB0YWJsZXMuXG4gICAgdmFyIG1hcHBpbmdUYWJsZSA9IGNvZGVjT3B0aW9ucy50YWJsZSgpO1xuXG5cbiAgICAvLyBEZWNvZGUgdGFibGVzOiBNQkNTIC0+IFVuaWNvZGUuXG5cbiAgICAvLyBkZWNvZGVUYWJsZXMgaXMgYSB0cmllLCBlbmNvZGVkIGFzIGFuIGFycmF5IG9mIGFycmF5cyBvZiBpbnRlZ2Vycy4gSW50ZXJuYWwgYXJyYXlzIGFyZSB0cmllIG5vZGVzIGFuZCBhbGwgaGF2ZSBsZW4gPSAyNTYuXG4gICAgLy8gVHJpZSByb290IGlzIGRlY29kZVRhYmxlc1swXS5cbiAgICAvLyBWYWx1ZXM6ID49ICAwIC0+IHVuaWNvZGUgY2hhcmFjdGVyIGNvZGUuIGNhbiBiZSA+IDB4RkZGRlxuICAgIC8vICAgICAgICAgPT0gVU5BU1NJR05FRCAtPiB1bmtub3duL3VuYXNzaWduZWQgc2VxdWVuY2UuXG4gICAgLy8gICAgICAgICA9PSBHQjE4MDMwX0NPREUgLT4gdGhpcyBpcyB0aGUgZW5kIG9mIGEgR0IxODAzMCA0LWJ5dGUgc2VxdWVuY2UuXG4gICAgLy8gICAgICAgICA8PSBOT0RFX1NUQVJUIC0+IGluZGV4IG9mIHRoZSBuZXh0IG5vZGUgaW4gb3VyIHRyaWUgdG8gcHJvY2VzcyBuZXh0IGJ5dGUuXG4gICAgLy8gICAgICAgICA8PSBTRVFfU1RBUlQgIC0+IGluZGV4IG9mIHRoZSBzdGFydCBvZiBhIGNoYXJhY3RlciBjb2RlIHNlcXVlbmNlLCBpbiBkZWNvZGVUYWJsZVNlcS5cbiAgICB0aGlzLmRlY29kZVRhYmxlcyA9IFtdO1xuICAgIHRoaXMuZGVjb2RlVGFibGVzWzBdID0gVU5BU1NJR05FRF9OT0RFLnNsaWNlKDApOyAvLyBDcmVhdGUgcm9vdCBub2RlLlxuXG4gICAgLy8gU29tZXRpbWVzIGEgTUJDUyBjaGFyIGNvcnJlc3BvbmRzIHRvIGEgc2VxdWVuY2Ugb2YgdW5pY29kZSBjaGFycy4gV2Ugc3RvcmUgdGhlbSBhcyBhcnJheXMgb2YgaW50ZWdlcnMgaGVyZS4gXG4gICAgdGhpcy5kZWNvZGVUYWJsZVNlcSA9IFtdO1xuXG4gICAgLy8gQWN0dWFsIG1hcHBpbmcgdGFibGVzIGNvbnNpc3Qgb2YgY2h1bmtzLiBVc2UgdGhlbSB0byBmaWxsIHVwIGRlY29kZSB0YWJsZXMuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXBwaW5nVGFibGUubGVuZ3RoOyBpKyspXG4gICAgICAgIHRoaXMuX2FkZERlY29kZUNodW5rKG1hcHBpbmdUYWJsZVtpXSk7XG5cbiAgICB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZSA9IGljb252LmRlZmF1bHRDaGFyVW5pY29kZTtcblxuICAgIFxuICAgIC8vIEVuY29kZSB0YWJsZXM6IFVuaWNvZGUgLT4gREJDUy5cblxuICAgIC8vIGBlbmNvZGVUYWJsZWAgaXMgYXJyYXkgbWFwcGluZyBmcm9tIHVuaWNvZGUgY2hhciB0byBlbmNvZGVkIGNoYXIuIEFsbCBpdHMgdmFsdWVzIGFyZSBpbnRlZ2VycyBmb3IgcGVyZm9ybWFuY2UuXG4gICAgLy8gQmVjYXVzZSBpdCBjYW4gYmUgc3BhcnNlLCBpdCBpcyByZXByZXNlbnRlZCBhcyBhcnJheSBvZiBidWNrZXRzIGJ5IDI1NiBjaGFycyBlYWNoLiBCdWNrZXQgY2FuIGJlIG51bGwuXG4gICAgLy8gVmFsdWVzOiA+PSAgMCAtPiBpdCBpcyBhIG5vcm1hbCBjaGFyLiBXcml0ZSB0aGUgdmFsdWUgKGlmIDw9MjU2IHRoZW4gMSBieXRlLCBpZiA8PTY1NTM2IHRoZW4gMiBieXRlcywgZXRjLikuXG4gICAgLy8gICAgICAgICA9PSBVTkFTU0lHTkVEIC0+IG5vIGNvbnZlcnNpb24gZm91bmQuIE91dHB1dCBhIGRlZmF1bHQgY2hhci5cbiAgICAvLyAgICAgICAgIDw9IFNFUV9TVEFSVCAgLT4gaXQncyBhbiBpbmRleCBpbiBlbmNvZGVUYWJsZVNlcSwgc2VlIGJlbG93LiBUaGUgY2hhcmFjdGVyIHN0YXJ0cyBhIHNlcXVlbmNlLlxuICAgIHRoaXMuZW5jb2RlVGFibGUgPSBbXTtcbiAgICBcbiAgICAvLyBgZW5jb2RlVGFibGVTZXFgIGlzIHVzZWQgd2hlbiBhIHNlcXVlbmNlIG9mIHVuaWNvZGUgY2hhcmFjdGVycyBpcyBlbmNvZGVkIGFzIGEgc2luZ2xlIGNvZGUuIFdlIHVzZSBhIHRyZWUgb2ZcbiAgICAvLyBvYmplY3RzIHdoZXJlIGtleXMgY29ycmVzcG9uZCB0byBjaGFyYWN0ZXJzIGluIHNlcXVlbmNlIGFuZCBsZWFmcyBhcmUgdGhlIGVuY29kZWQgZGJjcyB2YWx1ZXMuIEEgc3BlY2lhbCBERUZfQ0hBUiBrZXlcbiAgICAvLyBtZWFucyBlbmQgb2Ygc2VxdWVuY2UgKG5lZWRlZCB3aGVuIG9uZSBzZXF1ZW5jZSBpcyBhIHN0cmljdCBzdWJzZXF1ZW5jZSBvZiBhbm90aGVyKS5cbiAgICAvLyBPYmplY3RzIGFyZSBrZXB0IHNlcGFyYXRlbHkgZnJvbSBlbmNvZGVUYWJsZSB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZS5cbiAgICB0aGlzLmVuY29kZVRhYmxlU2VxID0gW107XG5cbiAgICAvLyBTb21lIGNoYXJzIGNhbiBiZSBkZWNvZGVkLCBidXQgbmVlZCBub3QgYmUgZW5jb2RlZC5cbiAgICB2YXIgc2tpcEVuY29kZUNoYXJzID0ge307XG4gICAgaWYgKGNvZGVjT3B0aW9ucy5lbmNvZGVTa2lwVmFscylcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2RlY09wdGlvbnMuZW5jb2RlU2tpcFZhbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSBjb2RlY09wdGlvbnMuZW5jb2RlU2tpcFZhbHNbaV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICAgICAgc2tpcEVuY29kZUNoYXJzW3ZhbF0gPSB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSB2YWwuZnJvbTsgaiA8PSB2YWwudG87IGorKylcbiAgICAgICAgICAgICAgICAgICAgc2tpcEVuY29kZUNoYXJzW2pdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAvLyBVc2UgZGVjb2RlIHRyaWUgdG8gcmVjdXJzaXZlbHkgZmlsbCBvdXQgZW5jb2RlIHRhYmxlcy5cbiAgICB0aGlzLl9maWxsRW5jb2RlVGFibGUoMCwgMCwgc2tpcEVuY29kZUNoYXJzKTtcblxuICAgIC8vIEFkZCBtb3JlIGVuY29kaW5nIHBhaXJzIHdoZW4gbmVlZGVkLlxuICAgIGlmIChjb2RlY09wdGlvbnMuZW5jb2RlQWRkKSB7XG4gICAgICAgIGZvciAodmFyIHVDaGFyIGluIGNvZGVjT3B0aW9ucy5lbmNvZGVBZGQpXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvZGVjT3B0aW9ucy5lbmNvZGVBZGQsIHVDaGFyKSlcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRFbmNvZGVDaGFyKHVDaGFyLmNoYXJDb2RlQXQoMCksIGNvZGVjT3B0aW9ucy5lbmNvZGVBZGRbdUNoYXJdKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlZkNoYXJTQiAgPSB0aGlzLmVuY29kZVRhYmxlWzBdW2ljb252LmRlZmF1bHRDaGFyU2luZ2xlQnl0ZS5jaGFyQ29kZUF0KDApXTtcbiAgICBpZiAodGhpcy5kZWZDaGFyU0IgPT09IFVOQVNTSUdORUQpIHRoaXMuZGVmQ2hhclNCID0gdGhpcy5lbmNvZGVUYWJsZVswXVsnPyddO1xuICAgIGlmICh0aGlzLmRlZkNoYXJTQiA9PT0gVU5BU1NJR05FRCkgdGhpcy5kZWZDaGFyU0IgPSBcIj9cIi5jaGFyQ29kZUF0KDApO1xuXG5cbiAgICAvLyBMb2FkICYgY3JlYXRlIEdCMTgwMzAgdGFibGVzIHdoZW4gbmVlZGVkLlxuICAgIGlmICh0eXBlb2YgY29kZWNPcHRpb25zLmdiMTgwMzAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5nYjE4MDMwID0gY29kZWNPcHRpb25zLmdiMTgwMzAoKTsgLy8gTG9hZCBHQjE4MDMwIHJhbmdlcy5cblxuICAgICAgICAvLyBBZGQgR0IxODAzMCBkZWNvZGUgdGFibGVzLlxuICAgICAgICB2YXIgdGhpcmRCeXRlTm9kZUlkeCA9IHRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aDtcbiAgICAgICAgdmFyIHRoaXJkQnl0ZU5vZGUgPSB0aGlzLmRlY29kZVRhYmxlc1t0aGlyZEJ5dGVOb2RlSWR4XSA9IFVOQVNTSUdORURfTk9ERS5zbGljZSgwKTtcblxuICAgICAgICB2YXIgZm91cnRoQnl0ZU5vZGVJZHggPSB0aGlzLmRlY29kZVRhYmxlcy5sZW5ndGg7XG4gICAgICAgIHZhciBmb3VydGhCeXRlTm9kZSA9IHRoaXMuZGVjb2RlVGFibGVzW2ZvdXJ0aEJ5dGVOb2RlSWR4XSA9IFVOQVNTSUdORURfTk9ERS5zbGljZSgwKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMHg4MTsgaSA8PSAweEZFOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBzZWNvbmRCeXRlTm9kZUlkeCA9IE5PREVfU1RBUlQgLSB0aGlzLmRlY29kZVRhYmxlc1swXVtpXTtcbiAgICAgICAgICAgIHZhciBzZWNvbmRCeXRlTm9kZSA9IHRoaXMuZGVjb2RlVGFibGVzW3NlY29uZEJ5dGVOb2RlSWR4XTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAweDMwOyBqIDw9IDB4Mzk7IGorKylcbiAgICAgICAgICAgICAgICBzZWNvbmRCeXRlTm9kZVtqXSA9IE5PREVfU1RBUlQgLSB0aGlyZEJ5dGVOb2RlSWR4O1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAweDgxOyBpIDw9IDB4RkU7IGkrKylcbiAgICAgICAgICAgIHRoaXJkQnl0ZU5vZGVbaV0gPSBOT0RFX1NUQVJUIC0gZm91cnRoQnl0ZU5vZGVJZHg7XG4gICAgICAgIGZvciAodmFyIGkgPSAweDMwOyBpIDw9IDB4Mzk7IGkrKylcbiAgICAgICAgICAgIGZvdXJ0aEJ5dGVOb2RlW2ldID0gR0IxODAzMF9DT0RFXG4gICAgfSAgICAgICAgXG59XG5cbkRCQ1NDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IERCQ1NFbmNvZGVyO1xuREJDU0NvZGVjLnByb3RvdHlwZS5kZWNvZGVyID0gREJDU0RlY29kZXI7XG5cbi8vIERlY29kZXIgaGVscGVyc1xuREJDU0NvZGVjLnByb3RvdHlwZS5fZ2V0RGVjb2RlVHJpZU5vZGUgPSBmdW5jdGlvbihhZGRyKSB7XG4gICAgdmFyIGJ5dGVzID0gW107XG4gICAgZm9yICg7IGFkZHIgPiAwOyBhZGRyID4+PSA4KVxuICAgICAgICBieXRlcy5wdXNoKGFkZHIgJiAweEZGKTtcbiAgICBpZiAoYnl0ZXMubGVuZ3RoID09IDApXG4gICAgICAgIGJ5dGVzLnB1c2goMCk7XG5cbiAgICB2YXIgbm9kZSA9IHRoaXMuZGVjb2RlVGFibGVzWzBdO1xuICAgIGZvciAodmFyIGkgPSBieXRlcy5sZW5ndGgtMTsgaSA+IDA7IGktLSkgeyAvLyBUcmF2ZXJzZSBub2RlcyBkZWVwZXIgaW50byB0aGUgdHJpZS5cbiAgICAgICAgdmFyIHZhbCA9IG5vZGVbYnl0ZXNbaV1dO1xuXG4gICAgICAgIGlmICh2YWwgPT0gVU5BU1NJR05FRCkgeyAvLyBDcmVhdGUgbmV3IG5vZGUuXG4gICAgICAgICAgICBub2RlW2J5dGVzW2ldXSA9IE5PREVfU1RBUlQgLSB0aGlzLmRlY29kZVRhYmxlcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmRlY29kZVRhYmxlcy5wdXNoKG5vZGUgPSBVTkFTU0lHTkVEX05PREUuc2xpY2UoMCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbCA8PSBOT0RFX1NUQVJUKSB7IC8vIEV4aXN0aW5nIG5vZGUuXG4gICAgICAgICAgICBub2RlID0gdGhpcy5kZWNvZGVUYWJsZXNbTk9ERV9TVEFSVCAtIHZhbF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT3ZlcndyaXRlIGJ5dGUgaW4gXCIgKyB0aGlzLmVuY29kaW5nTmFtZSArIFwiLCBhZGRyOiBcIiArIGFkZHIudG9TdHJpbmcoMTYpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG59XG5cblxuREJDU0NvZGVjLnByb3RvdHlwZS5fYWRkRGVjb2RlQ2h1bmsgPSBmdW5jdGlvbihjaHVuaykge1xuICAgIC8vIEZpcnN0IGVsZW1lbnQgb2YgY2h1bmsgaXMgdGhlIGhleCBtYmNzIGNvZGUgd2hlcmUgd2Ugc3RhcnQuXG4gICAgdmFyIGN1ckFkZHIgPSBwYXJzZUludChjaHVua1swXSwgMTYpO1xuXG4gICAgLy8gQ2hvb3NlIHRoZSBkZWNvZGluZyBub2RlIHdoZXJlIHdlJ2xsIHdyaXRlIG91ciBjaGFycy5cbiAgICB2YXIgd3JpdGVUYWJsZSA9IHRoaXMuX2dldERlY29kZVRyaWVOb2RlKGN1ckFkZHIpO1xuICAgIGN1ckFkZHIgPSBjdXJBZGRyICYgMHhGRjtcblxuICAgIC8vIFdyaXRlIGFsbCBvdGhlciBlbGVtZW50cyBvZiB0aGUgY2h1bmsgdG8gdGhlIHRhYmxlLlxuICAgIGZvciAodmFyIGsgPSAxOyBrIDwgY2h1bmsubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBjaHVua1trXTtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ID09PSBcInN0cmluZ1wiKSB7IC8vIFN0cmluZywgd3JpdGUgYXMtaXMuXG4gICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IHBhcnQubGVuZ3RoOykge1xuICAgICAgICAgICAgICAgIHZhciBjb2RlID0gcGFydC5jaGFyQ29kZUF0KGwrKyk7XG4gICAgICAgICAgICAgICAgaWYgKDB4RDgwMCA8PSBjb2RlICYmIGNvZGUgPCAweERDMDApIHsgLy8gRGVjb2RlIHN1cnJvZ2F0ZVxuICAgICAgICAgICAgICAgICAgICB2YXIgY29kZVRyYWlsID0gcGFydC5jaGFyQ29kZUF0KGwrKyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgweERDMDAgPD0gY29kZVRyYWlsICYmIGNvZGVUcmFpbCA8IDB4RTAwMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlVGFibGVbY3VyQWRkcisrXSA9IDB4MTAwMDAgKyAoY29kZSAtIDB4RDgwMCkgKiAweDQwMCArIChjb2RlVHJhaWwgLSAweERDMDApO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbmNvcnJlY3Qgc3Vycm9nYXRlIHBhaXIgaW4gXCIgICsgdGhpcy5lbmNvZGluZ05hbWUgKyBcIiBhdCBjaHVuayBcIiArIGNodW5rWzBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoMHgwRkYwIDwgY29kZSAmJiBjb2RlIDw9IDB4MEZGRikgeyAvLyBDaGFyYWN0ZXIgc2VxdWVuY2UgKG91ciBvd24gZW5jb2RpbmcgdXNlZClcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbiA9IDB4RkZGIC0gY29kZSArIDI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZXEgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCBsZW47IG0rKylcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcS5wdXNoKHBhcnQuY2hhckNvZGVBdChsKyspKTsgLy8gU2ltcGxlIHZhcmlhdGlvbjogZG9uJ3Qgc3VwcG9ydCBzdXJyb2dhdGVzIG9yIHN1YnNlcXVlbmNlcyBpbiBzZXEuXG5cbiAgICAgICAgICAgICAgICAgICAgd3JpdGVUYWJsZVtjdXJBZGRyKytdID0gU0VRX1NUQVJUIC0gdGhpcy5kZWNvZGVUYWJsZVNlcS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjb2RlVGFibGVTZXEucHVzaChzZXEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlVGFibGVbY3VyQWRkcisrXSA9IGNvZGU7IC8vIEJhc2ljIGNoYXJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHBhcnQgPT09IFwibnVtYmVyXCIpIHsgLy8gSW50ZWdlciwgbWVhbmluZyBpbmNyZWFzaW5nIHNlcXVlbmNlIHN0YXJ0aW5nIHdpdGggcHJldiBjaGFyYWN0ZXIuXG4gICAgICAgICAgICB2YXIgY2hhckNvZGUgPSB3cml0ZVRhYmxlW2N1ckFkZHIgLSAxXSArIDE7XG4gICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IHBhcnQ7IGwrKylcbiAgICAgICAgICAgICAgICB3cml0ZVRhYmxlW2N1ckFkZHIrK10gPSBjaGFyQ29kZSsrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluY29ycmVjdCB0eXBlICdcIiArIHR5cGVvZiBwYXJ0ICsgXCInIGdpdmVuIGluIFwiICArIHRoaXMuZW5jb2RpbmdOYW1lICsgXCIgYXQgY2h1bmsgXCIgKyBjaHVua1swXSk7XG4gICAgfVxuICAgIGlmIChjdXJBZGRyID4gMHhGRilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW5jb3JyZWN0IGNodW5rIGluIFwiICArIHRoaXMuZW5jb2RpbmdOYW1lICsgXCIgYXQgYWRkciBcIiArIGNodW5rWzBdICsgXCI6IHRvbyBsb25nXCIgKyBjdXJBZGRyKTtcbn1cblxuLy8gRW5jb2RlciBoZWxwZXJzXG5EQkNTQ29kZWMucHJvdG90eXBlLl9nZXRFbmNvZGVCdWNrZXQgPSBmdW5jdGlvbih1Q29kZSkge1xuICAgIHZhciBoaWdoID0gdUNvZGUgPj4gODsgLy8gVGhpcyBjb3VsZCBiZSA+IDB4RkYgYmVjYXVzZSBvZiBhc3RyYWwgY2hhcmFjdGVycy5cbiAgICBpZiAodGhpcy5lbmNvZGVUYWJsZVtoaWdoXSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB0aGlzLmVuY29kZVRhYmxlW2hpZ2hdID0gVU5BU1NJR05FRF9OT0RFLnNsaWNlKDApOyAvLyBDcmVhdGUgYnVja2V0IG9uIGRlbWFuZC5cbiAgICByZXR1cm4gdGhpcy5lbmNvZGVUYWJsZVtoaWdoXTtcbn1cblxuREJDU0NvZGVjLnByb3RvdHlwZS5fc2V0RW5jb2RlQ2hhciA9IGZ1bmN0aW9uKHVDb2RlLCBkYmNzQ29kZSkge1xuICAgIHZhciBidWNrZXQgPSB0aGlzLl9nZXRFbmNvZGVCdWNrZXQodUNvZGUpO1xuICAgIHZhciBsb3cgPSB1Q29kZSAmIDB4RkY7XG4gICAgaWYgKGJ1Y2tldFtsb3ddIDw9IFNFUV9TVEFSVClcbiAgICAgICAgdGhpcy5lbmNvZGVUYWJsZVNlcVtTRVFfU1RBUlQtYnVja2V0W2xvd11dW0RFRl9DSEFSXSA9IGRiY3NDb2RlOyAvLyBUaGVyZSdzIGFscmVhZHkgYSBzZXF1ZW5jZSwgc2V0IGEgc2luZ2xlLWNoYXIgc3Vic2VxdWVuY2Ugb2YgaXQuXG4gICAgZWxzZSBpZiAoYnVja2V0W2xvd10gPT0gVU5BU1NJR05FRClcbiAgICAgICAgYnVja2V0W2xvd10gPSBkYmNzQ29kZTtcbn1cblxuREJDU0NvZGVjLnByb3RvdHlwZS5fc2V0RW5jb2RlU2VxdWVuY2UgPSBmdW5jdGlvbihzZXEsIGRiY3NDb2RlKSB7XG4gICAgXG4gICAgLy8gR2V0IHRoZSByb290IG9mIGNoYXJhY3RlciB0cmVlIGFjY29yZGluZyB0byBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHNlcXVlbmNlLlxuICAgIHZhciB1Q29kZSA9IHNlcVswXTtcbiAgICB2YXIgYnVja2V0ID0gdGhpcy5fZ2V0RW5jb2RlQnVja2V0KHVDb2RlKTtcbiAgICB2YXIgbG93ID0gdUNvZGUgJiAweEZGO1xuXG4gICAgdmFyIG5vZGU7XG4gICAgaWYgKGJ1Y2tldFtsb3ddIDw9IFNFUV9TVEFSVCkge1xuICAgICAgICAvLyBUaGVyZSdzIGFscmVhZHkgYSBzZXF1ZW5jZSB3aXRoICAtIHVzZSBpdC5cbiAgICAgICAgbm9kZSA9IHRoaXMuZW5jb2RlVGFibGVTZXFbU0VRX1NUQVJULWJ1Y2tldFtsb3ddXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIFRoZXJlIHdhcyBubyBzZXF1ZW5jZSBvYmplY3QgLSBhbGxvY2F0ZSBhIG5ldyBvbmUuXG4gICAgICAgIG5vZGUgPSB7fTtcbiAgICAgICAgaWYgKGJ1Y2tldFtsb3ddICE9PSBVTkFTU0lHTkVEKSBub2RlW0RFRl9DSEFSXSA9IGJ1Y2tldFtsb3ddOyAvLyBJZiBhIGNoYXIgd2FzIHNldCBiZWZvcmUgLSBtYWtlIGl0IGEgc2luZ2xlLWNoYXIgc3Vic2VxdWVuY2UuXG4gICAgICAgIGJ1Y2tldFtsb3ddID0gU0VRX1NUQVJUIC0gdGhpcy5lbmNvZGVUYWJsZVNlcS5sZW5ndGg7XG4gICAgICAgIHRoaXMuZW5jb2RlVGFibGVTZXEucHVzaChub2RlKTtcbiAgICB9XG5cbiAgICAvLyBUcmF2ZXJzZSB0aGUgY2hhcmFjdGVyIHRyZWUsIGFsbG9jYXRpbmcgbmV3IG5vZGVzIGFzIG5lZWRlZC5cbiAgICBmb3IgKHZhciBqID0gMTsgaiA8IHNlcS5sZW5ndGgtMTsgaisrKSB7XG4gICAgICAgIHZhciBvbGRWYWwgPSBub2RlW3VDb2RlXTtcbiAgICAgICAgaWYgKHR5cGVvZiBvbGRWYWwgPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgbm9kZSA9IG9sZFZhbDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBub2RlID0gbm9kZVt1Q29kZV0gPSB7fVxuICAgICAgICAgICAgaWYgKG9sZFZhbCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIG5vZGVbREVGX0NIQVJdID0gb2xkVmFsXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIGxlYWYgdG8gZ2l2ZW4gZGJjc0NvZGUuXG4gICAgdUNvZGUgPSBzZXFbc2VxLmxlbmd0aC0xXTtcbiAgICBub2RlW3VDb2RlXSA9IGRiY3NDb2RlO1xufVxuXG5EQkNTQ29kZWMucHJvdG90eXBlLl9maWxsRW5jb2RlVGFibGUgPSBmdW5jdGlvbihub2RlSWR4LCBwcmVmaXgsIHNraXBFbmNvZGVDaGFycykge1xuICAgIHZhciBub2RlID0gdGhpcy5kZWNvZGVUYWJsZXNbbm9kZUlkeF07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAweDEwMDsgaSsrKSB7XG4gICAgICAgIHZhciB1Q29kZSA9IG5vZGVbaV07XG4gICAgICAgIHZhciBtYkNvZGUgPSBwcmVmaXggKyBpO1xuICAgICAgICBpZiAoc2tpcEVuY29kZUNoYXJzW21iQ29kZV0pXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICBpZiAodUNvZGUgPj0gMClcbiAgICAgICAgICAgIHRoaXMuX3NldEVuY29kZUNoYXIodUNvZGUsIG1iQ29kZSk7XG4gICAgICAgIGVsc2UgaWYgKHVDb2RlIDw9IE5PREVfU1RBUlQpXG4gICAgICAgICAgICB0aGlzLl9maWxsRW5jb2RlVGFibGUoTk9ERV9TVEFSVCAtIHVDb2RlLCBtYkNvZGUgPDwgOCwgc2tpcEVuY29kZUNoYXJzKTtcbiAgICAgICAgZWxzZSBpZiAodUNvZGUgPD0gU0VRX1NUQVJUKVxuICAgICAgICAgICAgdGhpcy5fc2V0RW5jb2RlU2VxdWVuY2UodGhpcy5kZWNvZGVUYWJsZVNlcVtTRVFfU1RBUlQgLSB1Q29kZV0sIG1iQ29kZSk7XG4gICAgfVxufVxuXG5cblxuLy8gPT0gRW5jb2RlciA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gREJDU0VuY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICAvLyBFbmNvZGVyIHN0YXRlXG4gICAgdGhpcy5sZWFkU3Vycm9nYXRlID0gLTE7XG4gICAgdGhpcy5zZXFPYmogPSB1bmRlZmluZWQ7XG4gICAgXG4gICAgLy8gU3RhdGljIGRhdGFcbiAgICB0aGlzLmVuY29kZVRhYmxlID0gY29kZWMuZW5jb2RlVGFibGU7XG4gICAgdGhpcy5lbmNvZGVUYWJsZVNlcSA9IGNvZGVjLmVuY29kZVRhYmxlU2VxO1xuICAgIHRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlID0gY29kZWMuZGVmQ2hhclNCO1xuICAgIHRoaXMuZ2IxODAzMCA9IGNvZGVjLmdiMTgwMzA7XG59XG5cbkRCQ1NFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHZhciBuZXdCdWYgPSBCdWZmZXIuYWxsb2Moc3RyLmxlbmd0aCAqICh0aGlzLmdiMTgwMzAgPyA0IDogMykpLFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gdGhpcy5sZWFkU3Vycm9nYXRlLFxuICAgICAgICBzZXFPYmogPSB0aGlzLnNlcU9iaiwgbmV4dENoYXIgPSAtMSxcbiAgICAgICAgaSA9IDAsIGogPSAwO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgLy8gMC4gR2V0IG5leHQgY2hhcmFjdGVyLlxuICAgICAgICBpZiAobmV4dENoYXIgPT09IC0xKSB7XG4gICAgICAgICAgICBpZiAoaSA9PSBzdHIubGVuZ3RoKSBicmVhaztcbiAgICAgICAgICAgIHZhciB1Q29kZSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgdUNvZGUgPSBuZXh0Q2hhcjtcbiAgICAgICAgICAgIG5leHRDaGFyID0gLTE7ICAgIFxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMS4gSGFuZGxlIHN1cnJvZ2F0ZXMuXG4gICAgICAgIGlmICgweEQ4MDAgPD0gdUNvZGUgJiYgdUNvZGUgPCAweEUwMDApIHsgLy8gQ2hhciBpcyBvbmUgb2Ygc3Vycm9nYXRlcy5cbiAgICAgICAgICAgIGlmICh1Q29kZSA8IDB4REMwMCkgeyAvLyBXZSd2ZSBnb3QgbGVhZCBzdXJyb2dhdGUuXG4gICAgICAgICAgICAgICAgaWYgKGxlYWRTdXJyb2dhdGUgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGxlYWRTdXJyb2dhdGUgPSB1Q29kZTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IHVDb2RlO1xuICAgICAgICAgICAgICAgICAgICAvLyBEb3VibGUgbGVhZCBzdXJyb2dhdGUgZm91bmQuXG4gICAgICAgICAgICAgICAgICAgIHVDb2RlID0gVU5BU1NJR05FRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBXZSd2ZSBnb3QgdHJhaWwgc3Vycm9nYXRlLlxuICAgICAgICAgICAgICAgIGlmIChsZWFkU3Vycm9nYXRlICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB1Q29kZSA9IDB4MTAwMDAgKyAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCkgKiAweDQwMCArICh1Q29kZSAtIDB4REMwMCk7XG4gICAgICAgICAgICAgICAgICAgIGxlYWRTdXJyb2dhdGUgPSAtMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBJbmNvbXBsZXRlIHN1cnJvZ2F0ZSBwYWlyIC0gb25seSB0cmFpbCBzdXJyb2dhdGUgZm91bmQuXG4gICAgICAgICAgICAgICAgICAgIHVDb2RlID0gVU5BU1NJR05FRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSAhPT0gLTEpIHtcbiAgICAgICAgICAgIC8vIEluY29tcGxldGUgc3Vycm9nYXRlIHBhaXIgLSBvbmx5IGxlYWQgc3Vycm9nYXRlIGZvdW5kLlxuICAgICAgICAgICAgbmV4dENoYXIgPSB1Q29kZTsgdUNvZGUgPSBVTkFTU0lHTkVEOyAvLyBXcml0ZSBhbiBlcnJvciwgdGhlbiBjdXJyZW50IGNoYXIuXG4gICAgICAgICAgICBsZWFkU3Vycm9nYXRlID0gLTE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBDb252ZXJ0IHVDb2RlIGNoYXJhY3Rlci5cbiAgICAgICAgdmFyIGRiY3NDb2RlID0gVU5BU1NJR05FRDtcbiAgICAgICAgaWYgKHNlcU9iaiAhPT0gdW5kZWZpbmVkICYmIHVDb2RlICE9IFVOQVNTSUdORUQpIHsgLy8gV2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgdGhlIHNlcXVlbmNlXG4gICAgICAgICAgICB2YXIgcmVzQ29kZSA9IHNlcU9ialt1Q29kZV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlc0NvZGUgPT09ICdvYmplY3QnKSB7IC8vIFNlcXVlbmNlIGNvbnRpbnVlcy5cbiAgICAgICAgICAgICAgICBzZXFPYmogPSByZXNDb2RlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXNDb2RlID09ICdudW1iZXInKSB7IC8vIFNlcXVlbmNlIGZpbmlzaGVkLiBXcml0ZSBpdC5cbiAgICAgICAgICAgICAgICBkYmNzQ29kZSA9IHJlc0NvZGU7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzQ29kZSA9PSB1bmRlZmluZWQpIHsgLy8gQ3VycmVudCBjaGFyYWN0ZXIgaXMgbm90IHBhcnQgb2YgdGhlIHNlcXVlbmNlLlxuXG4gICAgICAgICAgICAgICAgLy8gVHJ5IGRlZmF1bHQgY2hhcmFjdGVyIGZvciB0aGlzIHNlcXVlbmNlXG4gICAgICAgICAgICAgICAgcmVzQ29kZSA9IHNlcU9ialtERUZfQ0hBUl07XG4gICAgICAgICAgICAgICAgaWYgKHJlc0NvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBkYmNzQ29kZSA9IHJlc0NvZGU7IC8vIEZvdW5kLiBXcml0ZSBpdC5cbiAgICAgICAgICAgICAgICAgICAgbmV4dENoYXIgPSB1Q29kZTsgLy8gQ3VycmVudCBjaGFyYWN0ZXIgd2lsbCBiZSB3cml0dGVuIHRvbyBpbiB0aGUgbmV4dCBpdGVyYXRpb24uXG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBXaGF0IGlmIHdlIGhhdmUgbm8gZGVmYXVsdD8gKHJlc0NvZGUgPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAvLyBUaGVuLCB3ZSBzaG91bGQgd3JpdGUgZmlyc3QgY2hhciBvZiB0aGUgc2VxdWVuY2UgYXMtaXMgYW5kIHRyeSB0aGUgcmVzdCByZWN1cnNpdmVseS5cbiAgICAgICAgICAgICAgICAgICAgLy8gRGlkbid0IGRvIGl0IGZvciBub3cgYmVjYXVzZSBubyBlbmNvZGluZyBoYXMgdGhpcyBzaXR1YXRpb24geWV0LlxuICAgICAgICAgICAgICAgICAgICAvLyBDdXJyZW50bHksIGp1c3Qgc2tpcCB0aGUgc2VxdWVuY2UgYW5kIHdyaXRlIGN1cnJlbnQgY2hhci5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXFPYmogPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodUNvZGUgPj0gMCkgeyAgLy8gUmVndWxhciBjaGFyYWN0ZXJcbiAgICAgICAgICAgIHZhciBzdWJ0YWJsZSA9IHRoaXMuZW5jb2RlVGFibGVbdUNvZGUgPj4gOF07XG4gICAgICAgICAgICBpZiAoc3VidGFibGUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBkYmNzQ29kZSA9IHN1YnRhYmxlW3VDb2RlICYgMHhGRl07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChkYmNzQ29kZSA8PSBTRVFfU1RBUlQpIHsgLy8gU2VxdWVuY2Ugc3RhcnRcbiAgICAgICAgICAgICAgICBzZXFPYmogPSB0aGlzLmVuY29kZVRhYmxlU2VxW1NFUV9TVEFSVC1kYmNzQ29kZV07XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYmNzQ29kZSA9PSBVTkFTU0lHTkVEICYmIHRoaXMuZ2IxODAzMCkge1xuICAgICAgICAgICAgICAgIC8vIFVzZSBHQjE4MDMwIGFsZ29yaXRobSB0byBmaW5kIGNoYXJhY3RlcihzKSB0byB3cml0ZS5cbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gZmluZElkeCh0aGlzLmdiMTgwMzAudUNoYXJzLCB1Q29kZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlkeCAhPSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGJjc0NvZGUgPSB0aGlzLmdiMTgwMzAuZ2JDaGFyc1tpZHhdICsgKHVDb2RlIC0gdGhpcy5nYjE4MDMwLnVDaGFyc1tpZHhdKTtcbiAgICAgICAgICAgICAgICAgICAgbmV3QnVmW2orK10gPSAweDgxICsgTWF0aC5mbG9vcihkYmNzQ29kZSAvIDEyNjAwKTsgZGJjc0NvZGUgPSBkYmNzQ29kZSAlIDEyNjAwO1xuICAgICAgICAgICAgICAgICAgICBuZXdCdWZbaisrXSA9IDB4MzAgKyBNYXRoLmZsb29yKGRiY3NDb2RlIC8gMTI2MCk7IGRiY3NDb2RlID0gZGJjc0NvZGUgJSAxMjYwO1xuICAgICAgICAgICAgICAgICAgICBuZXdCdWZbaisrXSA9IDB4ODEgKyBNYXRoLmZsb29yKGRiY3NDb2RlIC8gMTApOyBkYmNzQ29kZSA9IGRiY3NDb2RlICUgMTA7XG4gICAgICAgICAgICAgICAgICAgIG5ld0J1ZltqKytdID0gMHgzMCArIGRiY3NDb2RlO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBXcml0ZSBkYmNzQ29kZSBjaGFyYWN0ZXIuXG4gICAgICAgIGlmIChkYmNzQ29kZSA9PT0gVU5BU1NJR05FRClcbiAgICAgICAgICAgIGRiY3NDb2RlID0gdGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGU7XG4gICAgICAgIFxuICAgICAgICBpZiAoZGJjc0NvZGUgPCAweDEwMCkge1xuICAgICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYmNzQ29kZSA8IDB4MTAwMDApIHtcbiAgICAgICAgICAgIG5ld0J1ZltqKytdID0gZGJjc0NvZGUgPj4gODsgICAvLyBoaWdoIGJ5dGVcbiAgICAgICAgICAgIG5ld0J1ZltqKytdID0gZGJjc0NvZGUgJiAweEZGOyAvLyBsb3cgYnl0ZVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZSA+PiAxNjtcbiAgICAgICAgICAgIG5ld0J1ZltqKytdID0gKGRiY3NDb2RlID4+IDgpICYgMHhGRjtcbiAgICAgICAgICAgIG5ld0J1ZltqKytdID0gZGJjc0NvZGUgJiAweEZGO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZXFPYmogPSBzZXFPYmo7XG4gICAgdGhpcy5sZWFkU3Vycm9nYXRlID0gbGVhZFN1cnJvZ2F0ZTtcbiAgICByZXR1cm4gbmV3QnVmLnNsaWNlKDAsIGopO1xufVxuXG5EQkNTRW5jb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMubGVhZFN1cnJvZ2F0ZSA9PT0gLTEgJiYgdGhpcy5zZXFPYmogPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuOyAvLyBBbGwgY2xlYW4uIE1vc3Qgb2Z0ZW4gY2FzZS5cblxuICAgIHZhciBuZXdCdWYgPSBCdWZmZXIuYWxsb2MoMTApLCBqID0gMDtcblxuICAgIGlmICh0aGlzLnNlcU9iaikgeyAvLyBXZSdyZSBpbiB0aGUgc2VxdWVuY2UuXG4gICAgICAgIHZhciBkYmNzQ29kZSA9IHRoaXMuc2VxT2JqW0RFRl9DSEFSXTtcbiAgICAgICAgaWYgKGRiY3NDb2RlICE9PSB1bmRlZmluZWQpIHsgLy8gV3JpdGUgYmVnaW5uaW5nIG9mIHRoZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgIGlmIChkYmNzQ29kZSA8IDB4MTAwKSB7XG4gICAgICAgICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld0J1ZltqKytdID0gZGJjc0NvZGUgPj4gODsgICAvLyBoaWdoIGJ5dGVcbiAgICAgICAgICAgICAgICBuZXdCdWZbaisrXSA9IGRiY3NDb2RlICYgMHhGRjsgLy8gbG93IGJ5dGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFNlZSB0b2RvIGFib3ZlLlxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VxT2JqID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxlYWRTdXJyb2dhdGUgIT09IC0xKSB7XG4gICAgICAgIC8vIEluY29tcGxldGUgc3Vycm9nYXRlIHBhaXIgLSBvbmx5IGxlYWQgc3Vycm9nYXRlIGZvdW5kLlxuICAgICAgICBuZXdCdWZbaisrXSA9IHRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlO1xuICAgICAgICB0aGlzLmxlYWRTdXJyb2dhdGUgPSAtMTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIG5ld0J1Zi5zbGljZSgwLCBqKTtcbn1cblxuLy8gRXhwb3J0IGZvciB0ZXN0aW5nXG5EQkNTRW5jb2Rlci5wcm90b3R5cGUuZmluZElkeCA9IGZpbmRJZHg7XG5cblxuLy8gPT0gRGVjb2RlciA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gREJDU0RlY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICAvLyBEZWNvZGVyIHN0YXRlXG4gICAgdGhpcy5ub2RlSWR4ID0gMDtcbiAgICB0aGlzLnByZXZCdWYgPSBCdWZmZXIuYWxsb2MoMCk7XG5cbiAgICAvLyBTdGF0aWMgZGF0YVxuICAgIHRoaXMuZGVjb2RlVGFibGVzID0gY29kZWMuZGVjb2RlVGFibGVzO1xuICAgIHRoaXMuZGVjb2RlVGFibGVTZXEgPSBjb2RlYy5kZWNvZGVUYWJsZVNlcTtcbiAgICB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZSA9IGNvZGVjLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICB0aGlzLmdiMTgwMzAgPSBjb2RlYy5nYjE4MDMwO1xufVxuXG5EQkNTRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWYpIHtcbiAgICB2YXIgbmV3QnVmID0gQnVmZmVyLmFsbG9jKGJ1Zi5sZW5ndGgqMiksXG4gICAgICAgIG5vZGVJZHggPSB0aGlzLm5vZGVJZHgsIFxuICAgICAgICBwcmV2QnVmID0gdGhpcy5wcmV2QnVmLCBwcmV2QnVmT2Zmc2V0ID0gdGhpcy5wcmV2QnVmLmxlbmd0aCxcbiAgICAgICAgc2VxU3RhcnQgPSAtdGhpcy5wcmV2QnVmLmxlbmd0aCwgLy8gaWR4IG9mIHRoZSBzdGFydCBvZiBjdXJyZW50IHBhcnNlZCBzZXF1ZW5jZS5cbiAgICAgICAgdUNvZGU7XG5cbiAgICBpZiAocHJldkJ1Zk9mZnNldCA+IDApIC8vIE1ha2UgcHJldiBidWYgb3ZlcmxhcCBhIGxpdHRsZSB0byBtYWtlIGl0IGVhc2llciB0byBzbGljZSBsYXRlci5cbiAgICAgICAgcHJldkJ1ZiA9IEJ1ZmZlci5jb25jYXQoW3ByZXZCdWYsIGJ1Zi5zbGljZSgwLCAxMCldKTtcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGN1ckJ5dGUgPSAoaSA+PSAwKSA/IGJ1ZltpXSA6IHByZXZCdWZbaSArIHByZXZCdWZPZmZzZXRdO1xuXG4gICAgICAgIC8vIExvb2t1cCBpbiBjdXJyZW50IHRyaWUgbm9kZS5cbiAgICAgICAgdmFyIHVDb2RlID0gdGhpcy5kZWNvZGVUYWJsZXNbbm9kZUlkeF1bY3VyQnl0ZV07XG5cbiAgICAgICAgaWYgKHVDb2RlID49IDApIHsgXG4gICAgICAgICAgICAvLyBOb3JtYWwgY2hhcmFjdGVyLCBqdXN0IHVzZSBpdC5cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1Q29kZSA9PT0gVU5BU1NJR05FRCkgeyAvLyBVbmtub3duIGNoYXIuXG4gICAgICAgICAgICAvLyBUT0RPOiBDYWxsYmFjayB3aXRoIHNlcS5cbiAgICAgICAgICAgIC8vdmFyIGN1clNlcSA9IChzZXFTdGFydCA+PSAwKSA/IGJ1Zi5zbGljZShzZXFTdGFydCwgaSsxKSA6IHByZXZCdWYuc2xpY2Uoc2VxU3RhcnQgKyBwcmV2QnVmT2Zmc2V0LCBpKzEgKyBwcmV2QnVmT2Zmc2V0KTtcbiAgICAgICAgICAgIGkgPSBzZXFTdGFydDsgLy8gVHJ5IHRvIHBhcnNlIGFnYWluLCBhZnRlciBza2lwcGluZyBmaXJzdCBieXRlIG9mIHRoZSBzZXF1ZW5jZSAoJ2knIHdpbGwgYmUgaW5jcmVtZW50ZWQgYnkgJ2ZvcicgY3ljbGUpLlxuICAgICAgICAgICAgdUNvZGUgPSB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZS5jaGFyQ29kZUF0KDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVDb2RlID09PSBHQjE4MDMwX0NPREUpIHtcbiAgICAgICAgICAgIHZhciBjdXJTZXEgPSAoc2VxU3RhcnQgPj0gMCkgPyBidWYuc2xpY2Uoc2VxU3RhcnQsIGkrMSkgOiBwcmV2QnVmLnNsaWNlKHNlcVN0YXJ0ICsgcHJldkJ1Zk9mZnNldCwgaSsxICsgcHJldkJ1Zk9mZnNldCk7XG4gICAgICAgICAgICB2YXIgcHRyID0gKGN1clNlcVswXS0weDgxKSoxMjYwMCArIChjdXJTZXFbMV0tMHgzMCkqMTI2MCArIChjdXJTZXFbMl0tMHg4MSkqMTAgKyAoY3VyU2VxWzNdLTB4MzApO1xuICAgICAgICAgICAgdmFyIGlkeCA9IGZpbmRJZHgodGhpcy5nYjE4MDMwLmdiQ2hhcnMsIHB0cik7XG4gICAgICAgICAgICB1Q29kZSA9IHRoaXMuZ2IxODAzMC51Q2hhcnNbaWR4XSArIHB0ciAtIHRoaXMuZ2IxODAzMC5nYkNoYXJzW2lkeF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodUNvZGUgPD0gTk9ERV9TVEFSVCkgeyAvLyBHbyB0byBuZXh0IHRyaWUgbm9kZS5cbiAgICAgICAgICAgIG5vZGVJZHggPSBOT0RFX1NUQVJUIC0gdUNvZGU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1Q29kZSA8PSBTRVFfU1RBUlQpIHsgLy8gT3V0cHV0IGEgc2VxdWVuY2Ugb2YgY2hhcnMuXG4gICAgICAgICAgICB2YXIgc2VxID0gdGhpcy5kZWNvZGVUYWJsZVNlcVtTRVFfU1RBUlQgLSB1Q29kZV07XG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHNlcS5sZW5ndGggLSAxOyBrKyspIHtcbiAgICAgICAgICAgICAgICB1Q29kZSA9IHNlcVtrXTtcbiAgICAgICAgICAgICAgICBuZXdCdWZbaisrXSA9IHVDb2RlICYgMHhGRjtcbiAgICAgICAgICAgICAgICBuZXdCdWZbaisrXSA9IHVDb2RlID4+IDg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1Q29kZSA9IHNlcVtzZXEubGVuZ3RoLTFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImljb252LWxpdGUgaW50ZXJuYWwgZXJyb3I6IGludmFsaWQgZGVjb2RpbmcgdGFibGUgdmFsdWUgXCIgKyB1Q29kZSArIFwiIGF0IFwiICsgbm9kZUlkeCArIFwiL1wiICsgY3VyQnl0ZSk7XG5cbiAgICAgICAgLy8gV3JpdGUgdGhlIGNoYXJhY3RlciB0byBidWZmZXIsIGhhbmRsaW5nIGhpZ2hlciBwbGFuZXMgdXNpbmcgc3Vycm9nYXRlIHBhaXIuXG4gICAgICAgIGlmICh1Q29kZSA+IDB4RkZGRikgeyBcbiAgICAgICAgICAgIHVDb2RlIC09IDB4MTAwMDA7XG4gICAgICAgICAgICB2YXIgdUNvZGVMZWFkID0gMHhEODAwICsgTWF0aC5mbG9vcih1Q29kZSAvIDB4NDAwKTtcbiAgICAgICAgICAgIG5ld0J1ZltqKytdID0gdUNvZGVMZWFkICYgMHhGRjtcbiAgICAgICAgICAgIG5ld0J1ZltqKytdID0gdUNvZGVMZWFkID4+IDg7XG5cbiAgICAgICAgICAgIHVDb2RlID0gMHhEQzAwICsgdUNvZGUgJSAweDQwMDtcbiAgICAgICAgfVxuICAgICAgICBuZXdCdWZbaisrXSA9IHVDb2RlICYgMHhGRjtcbiAgICAgICAgbmV3QnVmW2orK10gPSB1Q29kZSA+PiA4O1xuXG4gICAgICAgIC8vIFJlc2V0IHRyaWUgbm9kZS5cbiAgICAgICAgbm9kZUlkeCA9IDA7IHNlcVN0YXJ0ID0gaSsxO1xuICAgIH1cblxuICAgIHRoaXMubm9kZUlkeCA9IG5vZGVJZHg7XG4gICAgdGhpcy5wcmV2QnVmID0gKHNlcVN0YXJ0ID49IDApID8gYnVmLnNsaWNlKHNlcVN0YXJ0KSA6IHByZXZCdWYuc2xpY2Uoc2VxU3RhcnQgKyBwcmV2QnVmT2Zmc2V0KTtcbiAgICByZXR1cm4gbmV3QnVmLnNsaWNlKDAsIGopLnRvU3RyaW5nKCd1Y3MyJyk7XG59XG5cbkRCQ1NEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmV0ID0gJyc7XG5cbiAgICAvLyBUcnkgdG8gcGFyc2UgYWxsIHJlbWFpbmluZyBjaGFycy5cbiAgICB3aGlsZSAodGhpcy5wcmV2QnVmLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gU2tpcCAxIGNoYXJhY3RlciBpbiB0aGUgYnVmZmVyLlxuICAgICAgICByZXQgKz0gdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgICAgIHZhciBidWYgPSB0aGlzLnByZXZCdWYuc2xpY2UoMSk7XG5cbiAgICAgICAgLy8gUGFyc2UgcmVtYWluaW5nIGFzIHVzdWFsLlxuICAgICAgICB0aGlzLnByZXZCdWYgPSBCdWZmZXIuYWxsb2MoMCk7XG4gICAgICAgIHRoaXMubm9kZUlkeCA9IDA7XG4gICAgICAgIGlmIChidWYubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldCArPSB0aGlzLndyaXRlKGJ1Zik7XG4gICAgfVxuXG4gICAgdGhpcy5ub2RlSWR4ID0gMDtcbiAgICByZXR1cm4gcmV0O1xufVxuXG4vLyBCaW5hcnkgc2VhcmNoIGZvciBHQjE4MDMwLiBSZXR1cm5zIGxhcmdlc3QgaSBzdWNoIHRoYXQgdGFibGVbaV0gPD0gdmFsLlxuZnVuY3Rpb24gZmluZElkeCh0YWJsZSwgdmFsKSB7XG4gICAgaWYgKHRhYmxlWzBdID4gdmFsKVxuICAgICAgICByZXR1cm4gLTE7XG5cbiAgICB2YXIgbCA9IDAsIHIgPSB0YWJsZS5sZW5ndGg7XG4gICAgd2hpbGUgKGwgPCByLTEpIHsgLy8gYWx3YXlzIHRhYmxlW2xdIDw9IHZhbCA8IHRhYmxlW3JdXG4gICAgICAgIHZhciBtaWQgPSBsICsgTWF0aC5mbG9vcigoci1sKzEpLzIpO1xuICAgICAgICBpZiAodGFibGVbbWlkXSA8PSB2YWwpXG4gICAgICAgICAgICBsID0gbWlkO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByID0gbWlkO1xuICAgIH1cbiAgICByZXR1cm4gbDtcbn1cblxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIERlc2NyaXB0aW9uIG9mIHN1cHBvcnRlZCBkb3VibGUgYnl0ZSBlbmNvZGluZ3MgYW5kIGFsaWFzZXMuXG4vLyBUYWJsZXMgYXJlIG5vdCByZXF1aXJlKCktZCB1bnRpbCB0aGV5IGFyZSBuZWVkZWQgdG8gc3BlZWQgdXAgbGlicmFyeSBsb2FkLlxuLy8gcmVxdWlyZSgpLXMgYXJlIGRpcmVjdCB0byBzdXBwb3J0IEJyb3dzZXJpZnkuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIFxuICAgIC8vID09IEphcGFuZXNlL1NoaWZ0SklTID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBBbGwgamFwYW5lc2UgZW5jb2RpbmdzIGFyZSBiYXNlZCBvbiBKSVMgWCBzZXQgb2Ygc3RhbmRhcmRzOlxuICAgIC8vIEpJUyBYIDAyMDEgLSBTaW5nbGUtYnl0ZSBlbmNvZGluZyBvZiBBU0NJSSArIMKlICsgS2FuYSBjaGFycyBhdCAweEExLTB4REYuXG4gICAgLy8gSklTIFggMDIwOCAtIE1haW4gc2V0IG9mIDY4NzkgY2hhcmFjdGVycywgcGxhY2VkIGluIDk0eDk0IHBsYW5lLCB0byBiZSBlbmNvZGVkIGJ5IDIgYnl0ZXMuIFxuICAgIC8vICAgICAgICAgICAgICBIYXMgc2V2ZXJhbCB2YXJpYXRpb25zIGluIDE5NzgsIDE5ODMsIDE5OTAgYW5kIDE5OTcuXG4gICAgLy8gSklTIFggMDIxMiAtIFN1cHBsZW1lbnRhcnkgcGxhbmUgb2YgNjA2NyBjaGFycyBpbiA5NHg5NCBwbGFuZS4gMTk5MC4gRWZmZWN0aXZlbHkgZGVhZC5cbiAgICAvLyBKSVMgWCAwMjEzIC0gRXh0ZW5zaW9uIGFuZCBtb2Rlcm4gcmVwbGFjZW1lbnQgb2YgMDIwOCBhbmQgMDIxMi4gVG90YWwgY2hhcnM6IDExMjMzLlxuICAgIC8vICAgICAgICAgICAgICAyIHBsYW5lcywgZmlyc3QgaXMgc3VwZXJzZXQgb2YgMDIwOCwgc2Vjb25kIC0gcmV2aXNlZCAwMjEyLlxuICAgIC8vICAgICAgICAgICAgICBJbnRyb2R1Y2VkIGluIDIwMDAsIHJldmlzZWQgMjAwNC4gU29tZSBjaGFyYWN0ZXJzIGFyZSBpbiBVbmljb2RlIFBsYW5lIDIgKDB4Mnh4eHgpXG5cbiAgICAvLyBCeXRlIGVuY29kaW5ncyBhcmU6XG4gICAgLy8gICogU2hpZnRfSklTOiBDb21wYXRpYmxlIHdpdGggMDIwMSwgdXNlcyBub3QgZGVmaW5lZCBjaGFycyBpbiB0b3AgaGFsZiBhcyBsZWFkIGJ5dGVzIGZvciBkb3VibGUtYnl0ZVxuICAgIC8vICAgICAgICAgICAgICAgZW5jb2Rpbmcgb2YgMDIwOC4gTGVhZCBieXRlIHJhbmdlczogMHg4MS0weDlGLCAweEUwLTB4RUY7IFRyYWlsIGJ5dGUgcmFuZ2VzOiAweDQwLTB4N0UsIDB4ODAtMHg5RSwgMHg5Ri0weEZDLlxuICAgIC8vICAgICAgICAgICAgICAgV2luZG93cyBDUDkzMiBpcyBhIHN1cGVyc2V0IG9mIFNoaWZ0X0pJUy4gU29tZSBjb21wYW5pZXMgYWRkZWQgbW9yZSBjaGFycywgbm90YWJseSBLRERJLlxuICAgIC8vICAqIEVVQy1KUDogICAgVXAgdG8gMyBieXRlcyBwZXIgY2hhcmFjdGVyLiBVc2VkIG1vc3RseSBvbiAqbml4ZXMuXG4gICAgLy8gICAgICAgICAgICAgICAweDAwLTB4N0YgICAgICAgLSBsb3dlciBwYXJ0IG9mIDAyMDFcbiAgICAvLyAgICAgICAgICAgICAgIDB4OEUsIDB4QTEtMHhERiAtIHVwcGVyIHBhcnQgb2YgMDIwMVxuICAgIC8vICAgICAgICAgICAgICAgKDB4QTEtMHhGRSl4MiAgIC0gMDIwOCBwbGFuZSAoOTR4OTQpLlxuICAgIC8vICAgICAgICAgICAgICAgMHg4RiwgKDB4QTEtMHhGRSl4MiAtIDAyMTIgcGxhbmUgKDk0eDk0KS5cbiAgICAvLyAgKiBKSVMgWCAyMDg6IDctYml0LCBkaXJlY3QgZW5jb2Rpbmcgb2YgMDIwOC4gQnl0ZSByYW5nZXM6IDB4MjEtMHg3RSAoOTQgdmFsdWVzKS4gVW5jb21tb24uXG4gICAgLy8gICAgICAgICAgICAgICBVc2VkIGFzLWlzIGluIElTTzIwMjIgZmFtaWx5LlxuICAgIC8vICAqIElTTzIwMjItSlA6IFN0YXRlZnVsIGVuY29kaW5nLCB3aXRoIGVzY2FwZSBzZXF1ZW5jZXMgdG8gc3dpdGNoIGJldHdlZW4gQVNDSUksIFxuICAgIC8vICAgICAgICAgICAgICAgIDAyMDEtMTk3NiBSb21hbiwgMDIwOC0xOTc4LCAwMjA4LTE5ODMuXG4gICAgLy8gICogSVNPMjAyMi1KUC0xOiBBZGRzIGVzYyBzZXEgZm9yIDAyMTItMTk5MC5cbiAgICAvLyAgKiBJU08yMDIyLUpQLTI6IEFkZHMgZXNjIHNlcSBmb3IgR0IyMzEzLTE5ODAsIEtTWDEwMDEtMTk5MiwgSVNPODg1OS0xLCBJU084ODU5LTcuXG4gICAgLy8gICogSVNPMjAyMi1KUC0zOiBBZGRzIGVzYyBzZXEgZm9yIDAyMDEtMTk3NiBLYW5hIHNldCwgMDIxMy0yMDAwIFBsYW5lcyAxLCAyLlxuICAgIC8vICAqIElTTzIwMjItSlAtMjAwNDogQWRkcyAwMjEzLTIwMDQgUGxhbmUgMS5cbiAgICAvL1xuICAgIC8vIEFmdGVyIEpJUyBYIDAyMTMgYXBwZWFyZWQsIFNoaWZ0X0pJUy0yMDA0LCBFVUMtSklTWDAyMTMgYW5kIElTTzIwMjItSlAtMjAwNCBmb2xsb3dlZCwgd2l0aCBqdXN0IGNoYW5naW5nIHRoZSBwbGFuZXMuXG4gICAgLy9cbiAgICAvLyBPdmVyYWxsLCBpdCBzZWVtcyB0aGF0IGl0J3MgYSBtZXNzIDooIGh0dHA6Ly93d3c4LnBsYWxhLm9yLmpwL3RrdWJvdGExL3VuaWNvZGUtc3ltYm9scy1tYXAyLmh0bWxcblxuICAgICdzaGlmdGppcyc6IHtcbiAgICAgICAgdHlwZTogJ19kYmNzJyxcbiAgICAgICAgdGFibGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVxdWlyZSgnLi90YWJsZXMvc2hpZnRqaXMuanNvbicpIH0sXG4gICAgICAgIGVuY29kZUFkZDogeydcXHUwMGE1JzogMHg1QywgJ1xcdTIwM0UnOiAweDdFfSxcbiAgICAgICAgZW5jb2RlU2tpcFZhbHM6IFt7ZnJvbTogMHhFRDQwLCB0bzogMHhGOTQwfV0sXG4gICAgfSxcbiAgICAnY3NzaGlmdGppcyc6ICdzaGlmdGppcycsXG4gICAgJ21za2FuamknOiAnc2hpZnRqaXMnLFxuICAgICdzamlzJzogJ3NoaWZ0amlzJyxcbiAgICAnd2luZG93czMxaic6ICdzaGlmdGppcycsXG4gICAgJ21zMzFqJzogJ3NoaWZ0amlzJyxcbiAgICAneHNqaXMnOiAnc2hpZnRqaXMnLFxuICAgICd3aW5kb3dzOTMyJzogJ3NoaWZ0amlzJyxcbiAgICAnbXM5MzInOiAnc2hpZnRqaXMnLFxuICAgICc5MzInOiAnc2hpZnRqaXMnLFxuICAgICdjcDkzMic6ICdzaGlmdGppcycsXG5cbiAgICAnZXVjanAnOiB7XG4gICAgICAgIHR5cGU6ICdfZGJjcycsXG4gICAgICAgIHRhYmxlOiBmdW5jdGlvbigpIHsgcmV0dXJuIHJlcXVpcmUoJy4vdGFibGVzL2V1Y2pwLmpzb24nKSB9LFxuICAgICAgICBlbmNvZGVBZGQ6IHsnXFx1MDBhNSc6IDB4NUMsICdcXHUyMDNFJzogMHg3RX0sXG4gICAgfSxcblxuICAgIC8vIFRPRE86IEtEREkgZXh0ZW5zaW9uIHRvIFNoaWZ0X0pJU1xuICAgIC8vIFRPRE86IElCTSBDQ1NJRCA5NDIgPSBDUDkzMiwgYnV0IEYwLUY5IGN1c3RvbSBjaGFycyBhbmQgb3RoZXIgY2hhciBjaGFuZ2VzLlxuICAgIC8vIFRPRE86IElCTSBDQ1NJRCA5NDMgPSBTaGlmdF9KSVMgPSBDUDkzMiB3aXRoIG9yaWdpbmFsIFNoaWZ0X0pJUyBsb3dlciAxMjggY2hhcnMuXG5cblxuICAgIC8vID09IENoaW5lc2UvR0JLID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dCS1xuICAgIC8vIFdlIG1vc3RseSBpbXBsZW1lbnQgVzNDIHJlY29tbWVuZGF0aW9uOiBodHRwczovL3d3dy53My5vcmcvVFIvZW5jb2RpbmcvI2diay1lbmNvZGVyXG5cbiAgICAvLyBPbGRlc3QgR0IyMzEyICgxOTgxLCB+NzYwMCBjaGFycykgaXMgYSBzdWJzZXQgb2YgQ1A5MzZcbiAgICAnZ2IyMzEyJzogJ2NwOTM2JyxcbiAgICAnZ2IyMzEyODAnOiAnY3A5MzYnLFxuICAgICdnYjIzMTIxOTgwJzogJ2NwOTM2JyxcbiAgICAnY3NnYjIzMTInOiAnY3A5MzYnLFxuICAgICdjc2lzbzU4Z2IyMzEyODAnOiAnY3A5MzYnLFxuICAgICdldWNjbic6ICdjcDkzNicsXG5cbiAgICAvLyBNaWNyb3NvZnQncyBDUDkzNiBpcyBhIHN1YnNldCBhbmQgYXBwcm94aW1hdGlvbiBvZiBHQksuXG4gICAgJ3dpbmRvd3M5MzYnOiAnY3A5MzYnLFxuICAgICdtczkzNic6ICdjcDkzNicsXG4gICAgJzkzNic6ICdjcDkzNicsXG4gICAgJ2NwOTM2Jzoge1xuICAgICAgICB0eXBlOiAnX2RiY3MnLFxuICAgICAgICB0YWJsZTogZnVuY3Rpb24oKSB7IHJldHVybiByZXF1aXJlKCcuL3RhYmxlcy9jcDkzNi5qc29uJykgfSxcbiAgICB9LFxuXG4gICAgLy8gR0JLICh+MjIwMDAgY2hhcnMpIGlzIGFuIGV4dGVuc2lvbiBvZiBDUDkzNiB0aGF0IGFkZGVkIHVzZXItbWFwcGVkIGNoYXJzIGFuZCBzb21lIG90aGVyLlxuICAgICdnYmsnOiB7XG4gICAgICAgIHR5cGU6ICdfZGJjcycsXG4gICAgICAgIHRhYmxlOiBmdW5jdGlvbigpIHsgcmV0dXJuIHJlcXVpcmUoJy4vdGFibGVzL2NwOTM2Lmpzb24nKS5jb25jYXQocmVxdWlyZSgnLi90YWJsZXMvZ2JrLWFkZGVkLmpzb24nKSkgfSxcbiAgICB9LFxuICAgICd4Z2JrJzogJ2diaycsXG4gICAgJ2lzb2lyNTgnOiAnZ2JrJyxcblxuICAgIC8vIEdCMTgwMzAgaXMgYW4gYWxnb3JpdGhtaWMgZXh0ZW5zaW9uIG9mIEdCSy5cbiAgICAvLyBNYWluIHNvdXJjZTogaHR0cHM6Ly93d3cudzMub3JnL1RSL2VuY29kaW5nLyNnYmstZW5jb2RlclxuICAgIC8vIGh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZG9jcy9wYXBlcnMvZ2IxODAzMC5odG1sXG4gICAgLy8gaHR0cDovL3NvdXJjZS5pY3UtcHJvamVjdC5vcmcvcmVwb3MvaWN1L2RhdGEvdHJ1bmsvY2hhcnNldC9kYXRhL3htbC9nYi0xODAzMC0yMDAwLnhtbFxuICAgIC8vIGh0dHA6Ly93d3cua2huZ2FpLmNvbS9jaGluZXNlL2NoYXJtYXAvdGJsZ2JrLnBocD9wYWdlPTBcbiAgICAnZ2IxODAzMCc6IHtcbiAgICAgICAgdHlwZTogJ19kYmNzJyxcbiAgICAgICAgdGFibGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVxdWlyZSgnLi90YWJsZXMvY3A5MzYuanNvbicpLmNvbmNhdChyZXF1aXJlKCcuL3RhYmxlcy9nYmstYWRkZWQuanNvbicpKSB9LFxuICAgICAgICBnYjE4MDMwOiBmdW5jdGlvbigpIHsgcmV0dXJuIHJlcXVpcmUoJy4vdGFibGVzL2diMTgwMzAtcmFuZ2VzLmpzb24nKSB9LFxuICAgICAgICBlbmNvZGVTa2lwVmFsczogWzB4ODBdLFxuICAgICAgICBlbmNvZGVBZGQ6IHsn4oKsJzogMHhBMkUzfSxcbiAgICB9LFxuXG4gICAgJ2NoaW5lc2UnOiAnZ2IxODAzMCcsXG5cblxuICAgIC8vID09IEtvcmVhbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBFVUMtS1IsIEtTX0NfNTYwMSBhbmQgS1MgWCAxMDAxIGFyZSBleGFjdGx5IHRoZSBzYW1lLlxuICAgICd3aW5kb3dzOTQ5JzogJ2NwOTQ5JyxcbiAgICAnbXM5NDknOiAnY3A5NDknLFxuICAgICc5NDknOiAnY3A5NDknLFxuICAgICdjcDk0OSc6IHtcbiAgICAgICAgdHlwZTogJ19kYmNzJyxcbiAgICAgICAgdGFibGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVxdWlyZSgnLi90YWJsZXMvY3A5NDkuanNvbicpIH0sXG4gICAgfSxcblxuICAgICdjc2V1Y2tyJzogJ2NwOTQ5JyxcbiAgICAnY3Nrc2M1NjAxMTk4Nyc6ICdjcDk0OScsXG4gICAgJ2V1Y2tyJzogJ2NwOTQ5JyxcbiAgICAnaXNvaXIxNDknOiAnY3A5NDknLFxuICAgICdrb3JlYW4nOiAnY3A5NDknLFxuICAgICdrc2M1NjAxMTk4Nyc6ICdjcDk0OScsXG4gICAgJ2tzYzU2MDExOTg5JzogJ2NwOTQ5JyxcbiAgICAna3NjNTYwMSc6ICdjcDk0OScsXG5cblxuICAgIC8vID09IEJpZzUvVGFpd2FuL0hvbmcgS29uZyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBUaGVyZSBhcmUgbG90cyBvZiB0YWJsZXMgZm9yIEJpZzUgYW5kIGNwOTUwLiBQbGVhc2Ugc2VlIHRoZSBmb2xsb3dpbmcgbGlua3MgZm9yIGhpc3Rvcnk6XG4gICAgLy8gaHR0cDovL21venR3Lm9yZy9kb2NzL2JpZzUvICBodHRwOi8vd3d3LmhhaWJsZS5kZS9icnVuby9jaGFyc2V0cy9jb252ZXJzaW9uLXRhYmxlcy9CaWc1Lmh0bWxcbiAgICAvLyBWYXJpYXRpb25zLCBpbiByb3VnaGx5IG51bWJlciBvZiBkZWZpbmVkIGNoYXJzOlxuICAgIC8vICAqIFdpbmRvd3MgQ1AgOTUwOiBNaWNyb3NvZnQgdmFyaWFudCBvZiBCaWc1LiBDYW5vbmljYWw6IGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL01BUFBJTkdTL1ZFTkRPUlMvTUlDU0ZUL1dJTkRPV1MvQ1A5NTAuVFhUXG4gICAgLy8gICogV2luZG93cyBDUCA5NTE6IE1pY3Jvc29mdCB2YXJpYW50IG9mIEJpZzUtSEtTQ1MtMjAwMS4gU2VlbXMgdG8gYmUgbmV2ZXIgcHVibGljLiBodHRwOi8vbWUuYWJlbGNoZXVuZy5vcmcvYXJ0aWNsZXMvcmVzZWFyY2gvd2hhdC1pcy1jcDk1MS9cbiAgICAvLyAgKiBCaWc1LTIwMDMgKFRhaXdhbiBzdGFuZGFyZCkgYWxtb3N0IHN1cGVyc2V0IG9mIGNwOTUwLlxuICAgIC8vICAqIFVuaWNvZGUtYXQtb24gKFVBTykgLyBNb3ppbGxhIDEuOC4gRmFsbGluZyBvdXQgb2YgdXNlIG9uIHRoZSBXZWIuIE5vdCBzdXBwb3J0ZWQgYnkgb3RoZXIgYnJvd3NlcnMuXG4gICAgLy8gICogQmlnNS1IS1NDUyAoLTIwMDEsIC0yMDA0LCAtMjAwOCkuIEhvbmcgS29uZyBzdGFuZGFyZC4gXG4gICAgLy8gICAgbWFueSB1bmljb2RlIGNvZGUgcG9pbnRzIG1vdmVkIGZyb20gUFVBIHRvIFN1cHBsZW1lbnRhcnkgcGxhbmUgKFUrMlhYWFgpIG92ZXIgdGhlIHllYXJzLlxuICAgIC8vICAgIFBsdXMsIGl0IGhhcyA0IGNvbWJpbmluZyBzZXF1ZW5jZXMuXG4gICAgLy8gICAgU2VlbXMgdGhhdCBNb3ppbGxhIHJlZnVzZWQgdG8gc3VwcG9ydCBpdCBmb3IgMTAgeXJzLiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI0MzEgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzEwMjk5XG4gICAgLy8gICAgYmVjYXVzZSBiaWc1LWhrc2NzIGlzIHRoZSBvbmx5IGVuY29kaW5nIHRvIGluY2x1ZGUgYXN0cmFsIGNoYXJhY3RlcnMgaW4gbm9uLWFsZ29yaXRobWljIHdheS5cbiAgICAvLyAgICBJbXBsZW1lbnRhdGlvbnMgYXJlIG5vdCBjb25zaXN0ZW50IHdpdGhpbiBicm93c2Vyczsgc29tZXRpbWVzIGxhYmVsZWQgYXMganVzdCBiaWc1LlxuICAgIC8vICAgIE1TIEludGVybmV0IEV4cGxvcmVyIHN3aXRjaGVzIGZyb20gYmlnNSB0byBiaWc1LWhrc2NzIHdoZW4gYSBwYXRjaCBhcHBsaWVkLlxuICAgIC8vICAgIEdyZWF0IGRpc2N1c3Npb24gJiByZWNhcCBvZiB3aGF0J3MgZ29pbmcgb24gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEyNDcwI2MzMVxuICAgIC8vICAgIEluIHRoZSBlbmNvZGVyLCBpdCBtaWdodCBtYWtlIHNlbnNlIHRvIHN1cHBvcnQgZW5jb2Rpbmcgb2xkIFBVQSBtYXBwaW5ncyB0byBCaWc1IGJ5dGVzIHNlcS1zLlxuICAgIC8vICAgIE9mZmljaWFsIHNwZWM6IGh0dHA6Ly93d3cub2djaW8uZ292LmhrL2VuL2J1c2luZXNzL3RlY2hfcHJvbW90aW9uL2NjbGkvdGVybXMvZG9jLzIwMDNjbXBfMjAwOC50eHRcbiAgICAvLyAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm9nY2lvLmdvdi5oay90Yy9idXNpbmVzcy90ZWNoX3Byb21vdGlvbi9jY2xpL3Rlcm1zL2RvYy9oa3Njcy0yMDA4LWJpZzUtaXNvLnR4dFxuICAgIC8vIFxuICAgIC8vIEN1cnJlbnQgdW5kZXJzdGFuZGluZyBvZiBob3cgdG8gZGVhbCB3aXRoIEJpZzUoLUhLU0NTKSBpcyBpbiB0aGUgRW5jb2RpbmcgU3RhbmRhcmQsIGh0dHA6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2JpZzUtZW5jb2RlclxuICAgIC8vIFVuaWNvZGUgbWFwcGluZyAoaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvTUFQUElOR1MvT0JTT0xFVEUvRUFTVEFTSUEvT1RIRVIvQklHNS5UWFQpIGlzIHNhaWQgdG8gYmUgd3JvbmcuXG5cbiAgICAnd2luZG93czk1MCc6ICdjcDk1MCcsXG4gICAgJ21zOTUwJzogJ2NwOTUwJyxcbiAgICAnOTUwJzogJ2NwOTUwJyxcbiAgICAnY3A5NTAnOiB7XG4gICAgICAgIHR5cGU6ICdfZGJjcycsXG4gICAgICAgIHRhYmxlOiBmdW5jdGlvbigpIHsgcmV0dXJuIHJlcXVpcmUoJy4vdGFibGVzL2NwOTUwLmpzb24nKSB9LFxuICAgIH0sXG5cbiAgICAvLyBCaWc1IGhhcyBtYW55IHZhcmlhdGlvbnMgYW5kIGlzIGFuIGV4dGVuc2lvbiBvZiBjcDk1MC4gV2UgdXNlIEVuY29kaW5nIFN0YW5kYXJkJ3MgYXMgYSBjb25zZW5zdXMuXG4gICAgJ2JpZzUnOiAnYmlnNWhrc2NzJyxcbiAgICAnYmlnNWhrc2NzJzoge1xuICAgICAgICB0eXBlOiAnX2RiY3MnLFxuICAgICAgICB0YWJsZTogZnVuY3Rpb24oKSB7IHJldHVybiByZXF1aXJlKCcuL3RhYmxlcy9jcDk1MC5qc29uJykuY29uY2F0KHJlcXVpcmUoJy4vdGFibGVzL2JpZzUtYWRkZWQuanNvbicpKSB9LFxuICAgICAgICBlbmNvZGVTa2lwVmFsczogWzB4YTJjY10sXG4gICAgfSxcblxuICAgICdjbmJpZzUnOiAnYmlnNWhrc2NzJyxcbiAgICAnY3NiaWc1JzogJ2JpZzVoa3NjcycsXG4gICAgJ3h4YmlnNSc6ICdiaWc1aGtzY3MnLFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vLyBVcGRhdGUgdGhpcyBhcnJheSBpZiB5b3UgYWRkL3JlbmFtZS9yZW1vdmUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuXG4vLyBXZSBzdXBwb3J0IEJyb3dzZXJpZnkgYnkgc2tpcHBpbmcgYXV0b21hdGljIG1vZHVsZSBkaXNjb3ZlcnkgYW5kIHJlcXVpcmluZyBtb2R1bGVzIGRpcmVjdGx5LlxudmFyIG1vZHVsZXMgPSBbXG4gICAgcmVxdWlyZShcIi4vaW50ZXJuYWxcIiksXG4gICAgcmVxdWlyZShcIi4vdXRmMTZcIiksXG4gICAgcmVxdWlyZShcIi4vdXRmN1wiKSxcbiAgICByZXF1aXJlKFwiLi9zYmNzLWNvZGVjXCIpLFxuICAgIHJlcXVpcmUoXCIuL3NiY3MtZGF0YVwiKSxcbiAgICByZXF1aXJlKFwiLi9zYmNzLWRhdGEtZ2VuZXJhdGVkXCIpLFxuICAgIHJlcXVpcmUoXCIuL2RiY3MtY29kZWNcIiksXG4gICAgcmVxdWlyZShcIi4vZGJjcy1kYXRhXCIpLFxuXTtcblxuLy8gUHV0IGFsbCBlbmNvZGluZy9hbGlhcy9jb2RlYyBkZWZpbml0aW9ucyB0byBzaW5nbGUgb2JqZWN0IGFuZCBleHBvcnQgaXQuIFxuZm9yICh2YXIgaSA9IDA7IGkgPCBtb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG1vZHVsZSA9IG1vZHVsZXNbaV07XG4gICAgZm9yICh2YXIgZW5jIGluIG1vZHVsZSlcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2R1bGUsIGVuYykpXG4gICAgICAgICAgICBleHBvcnRzW2VuY10gPSBtb2R1bGVbZW5jXTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZShcImJ1ZmZlclwiKS5CdWZmZXIsXG4gICAgVHJhbnNmb3JtID0gcmVxdWlyZShcInN0cmVhbVwiKS5UcmFuc2Zvcm07XG5cblxuLy8gPT0gRXhwb3J0cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaWNvbnYpIHtcbiAgICBcbiAgICAvLyBBZGRpdGlvbmFsIFB1YmxpYyBBUEkuXG4gICAgaWNvbnYuZW5jb2RlU3RyZWFtID0gZnVuY3Rpb24gZW5jb2RlU3RyZWFtKGVuY29kaW5nLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgSWNvbnZMaXRlRW5jb2RlclN0cmVhbShpY29udi5nZXRFbmNvZGVyKGVuY29kaW5nLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWNvbnYuZGVjb2RlU3RyZWFtID0gZnVuY3Rpb24gZGVjb2RlU3RyZWFtKGVuY29kaW5nLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgSWNvbnZMaXRlRGVjb2RlclN0cmVhbShpY29udi5nZXREZWNvZGVyKGVuY29kaW5nLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWNvbnYuc3VwcG9ydHNTdHJlYW1zID0gdHJ1ZTtcblxuXG4gICAgLy8gTm90IHB1Ymxpc2hlZCB5ZXQuXG4gICAgaWNvbnYuSWNvbnZMaXRlRW5jb2RlclN0cmVhbSA9IEljb252TGl0ZUVuY29kZXJTdHJlYW07XG4gICAgaWNvbnYuSWNvbnZMaXRlRGVjb2RlclN0cmVhbSA9IEljb252TGl0ZURlY29kZXJTdHJlYW07XG4gICAgaWNvbnYuX2NvbGxlY3QgPSBJY29udkxpdGVEZWNvZGVyU3RyZWFtLnByb3RvdHlwZS5jb2xsZWN0O1xufTtcblxuXG4vLyA9PSBFbmNvZGVyIHN0cmVhbSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5mdW5jdGlvbiBJY29udkxpdGVFbmNvZGVyU3RyZWFtKGNvbnYsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmNvbnYgPSBjb252O1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIG9wdGlvbnMuZGVjb2RlU3RyaW5ncyA9IGZhbHNlOyAvLyBXZSBhY2NlcHQgb25seSBzdHJpbmdzLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRlY29kZSB0aGVtLlxuICAgIFRyYW5zZm9ybS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuXG5JY29udkxpdGVFbmNvZGVyU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNmb3JtLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBJY29udkxpdGVFbmNvZGVyU3RyZWFtIH1cbn0pO1xuXG5JY29udkxpdGVFbmNvZGVyU3RyZWFtLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nLCBkb25lKSB7XG4gICAgaWYgKHR5cGVvZiBjaHVuayAhPSAnc3RyaW5nJylcbiAgICAgICAgcmV0dXJuIGRvbmUobmV3IEVycm9yKFwiSWNvbnYgZW5jb2Rpbmcgc3RyZWFtIG5lZWRzIHN0cmluZ3MgYXMgaXRzIGlucHV0LlwiKSk7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuY29udi53cml0ZShjaHVuayk7XG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmxlbmd0aCkgdGhpcy5wdXNoKHJlcyk7XG4gICAgICAgIGRvbmUoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZG9uZShlKTtcbiAgICB9XG59XG5cbkljb252TGl0ZUVuY29kZXJTdHJlYW0ucHJvdG90eXBlLl9mbHVzaCA9IGZ1bmN0aW9uKGRvbmUpIHtcbiAgICB0cnkge1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5jb252LmVuZCgpO1xuICAgICAgICBpZiAocmVzICYmIHJlcy5sZW5ndGgpIHRoaXMucHVzaChyZXMpO1xuICAgICAgICBkb25lKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGRvbmUoZSk7XG4gICAgfVxufVxuXG5JY29udkxpdGVFbmNvZGVyU3RyZWFtLnByb3RvdHlwZS5jb2xsZWN0ID0gZnVuY3Rpb24oY2IpIHtcbiAgICB2YXIgY2h1bmtzID0gW107XG4gICAgdGhpcy5vbignZXJyb3InLCBjYik7XG4gICAgdGhpcy5vbignZGF0YScsIGZ1bmN0aW9uKGNodW5rKSB7IGNodW5rcy5wdXNoKGNodW5rKTsgfSk7XG4gICAgdGhpcy5vbignZW5kJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGNiKG51bGwsIEJ1ZmZlci5jb25jYXQoY2h1bmtzKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblxuLy8gPT0gRGVjb2RlciBzdHJlYW0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuZnVuY3Rpb24gSWNvbnZMaXRlRGVjb2RlclN0cmVhbShjb252LCBvcHRpb25zKSB7XG4gICAgdGhpcy5jb252ID0gY29udjtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBvcHRpb25zLmVuY29kaW5nID0gdGhpcy5lbmNvZGluZyA9ICd1dGY4JzsgLy8gV2Ugb3V0cHV0IHN0cmluZ3MuXG4gICAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucyk7XG59XG5cbkljb252TGl0ZURlY29kZXJTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUcmFuc2Zvcm0ucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHsgdmFsdWU6IEljb252TGl0ZURlY29kZXJTdHJlYW0gfVxufSk7XG5cbkljb252TGl0ZURlY29kZXJTdHJlYW0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGRvbmUpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpXG4gICAgICAgIHJldHVybiBkb25lKG5ldyBFcnJvcihcIkljb252IGRlY29kaW5nIHN0cmVhbSBuZWVkcyBidWZmZXJzIGFzIGl0cyBpbnB1dC5cIikpO1xuICAgIHRyeSB7XG4gICAgICAgIHZhciByZXMgPSB0aGlzLmNvbnYud3JpdGUoY2h1bmspO1xuICAgICAgICBpZiAocmVzICYmIHJlcy5sZW5ndGgpIHRoaXMucHVzaChyZXMsIHRoaXMuZW5jb2RpbmcpO1xuICAgICAgICBkb25lKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGRvbmUoZSk7XG4gICAgfVxufVxuXG5JY29udkxpdGVEZWNvZGVyU3RyZWFtLnByb3RvdHlwZS5fZmx1c2ggPSBmdW5jdGlvbihkb25lKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuY29udi5lbmQoKTtcbiAgICAgICAgaWYgKHJlcyAmJiByZXMubGVuZ3RoKSB0aGlzLnB1c2gocmVzLCB0aGlzLmVuY29kaW5nKTsgICAgICAgICAgICAgICAgXG4gICAgICAgIGRvbmUoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZG9uZShlKTtcbiAgICB9XG59XG5cbkljb252TGl0ZURlY29kZXJTdHJlYW0ucHJvdG90eXBlLmNvbGxlY3QgPSBmdW5jdGlvbihjYikge1xuICAgIHZhciByZXMgPSAnJztcbiAgICB0aGlzLm9uKCdlcnJvcicsIGNiKTtcbiAgICB0aGlzLm9uKCdkYXRhJywgZnVuY3Rpb24oY2h1bmspIHsgcmVzICs9IGNodW5rOyB9KTtcbiAgICB0aGlzLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgY2IobnVsbCwgcmVzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgQnVmZmVyID0gcmVxdWlyZShcImJ1ZmZlclwiKS5CdWZmZXI7XG4vLyBOb3RlOiBub3QgcG9seWZpbGxlZCB3aXRoIHNhZmVyLWJ1ZmZlciBvbiBhIHB1cnBvc2UsIGFzIG92ZXJyaWRlcyBCdWZmZXJcblxuLy8gPT0gRXh0ZW5kIE5vZGUgcHJpbWl0aXZlcyB0byB1c2UgaWNvbnYtbGl0ZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaWNvbnYpIHtcbiAgICB2YXIgb3JpZ2luYWwgPSB1bmRlZmluZWQ7IC8vIFBsYWNlIHRvIGtlZXAgb3JpZ2luYWwgbWV0aG9kcy5cblxuICAgIC8vIE5vZGUgYXV0aG9ycyByZXdyb3RlIEJ1ZmZlciBpbnRlcm5hbHMgdG8gbWFrZSBpdCBjb21wYXRpYmxlIHdpdGhcbiAgICAvLyBVaW50OEFycmF5IGFuZCB3ZSBjYW5ub3QgcGF0Y2gga2V5IGZ1bmN0aW9ucyBzaW5jZSB0aGVuLlxuICAgIC8vIE5vdGU6IHRoaXMgZG9lcyB1c2Ugb2xkZXIgQnVmZmVyIEFQSSBvbiBhIHB1cnBvc2VcbiAgICBpY29udi5zdXBwb3J0c05vZGVFbmNvZGluZ3NFeHRlbnNpb24gPSAhKEJ1ZmZlci5mcm9tIHx8IG5ldyBCdWZmZXIoMCkgaW5zdGFuY2VvZiBVaW50OEFycmF5KTtcblxuICAgIGljb252LmV4dGVuZE5vZGVFbmNvZGluZ3MgPSBmdW5jdGlvbiBleHRlbmROb2RlRW5jb2RpbmdzKCkge1xuICAgICAgICBpZiAob3JpZ2luYWwpIHJldHVybjtcbiAgICAgICAgb3JpZ2luYWwgPSB7fTtcblxuICAgICAgICBpZiAoIWljb252LnN1cHBvcnRzTm9kZUVuY29kaW5nc0V4dGVuc2lvbikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkFDVElPTiBORUVERUQ6IHJlcXVpcmUoJ2ljb252LWxpdGUnKS5leHRlbmROb2RlRW5jb2RpbmdzKCkgaXMgbm90IHN1cHBvcnRlZCBpbiB5b3VyIHZlcnNpb24gb2YgTm9kZVwiKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJTZWUgbW9yZSBpbmZvIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9hc2h0dWNoa2luL2ljb252LWxpdGUvd2lraS9Ob2RlLXY0LWNvbXBhdGliaWxpdHlcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbm9kZU5hdGl2ZUVuY29kaW5ncyA9IHtcbiAgICAgICAgICAgICdoZXgnOiB0cnVlLCAndXRmOCc6IHRydWUsICd1dGYtOCc6IHRydWUsICdhc2NpaSc6IHRydWUsICdiaW5hcnknOiB0cnVlLCBcbiAgICAgICAgICAgICdiYXNlNjQnOiB0cnVlLCAndWNzMic6IHRydWUsICd1Y3MtMic6IHRydWUsICd1dGYxNmxlJzogdHJ1ZSwgJ3V0Zi0xNmxlJzogdHJ1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICBCdWZmZXIuaXNOYXRpdmVFbmNvZGluZyA9IGZ1bmN0aW9uKGVuYykge1xuICAgICAgICAgICAgcmV0dXJuIGVuYyAmJiBub2RlTmF0aXZlRW5jb2RpbmdzW2VuYy50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tIFNsb3dCdWZmZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgdmFyIFNsb3dCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5TbG93QnVmZmVyO1xuXG4gICAgICAgIG9yaWdpbmFsLlNsb3dCdWZmZXJUb1N0cmluZyA9IFNsb3dCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nO1xuICAgICAgICBTbG93QnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZyB8fCAndXRmOCcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIC8vIFVzZSBuYXRpdmUgY29udmVyc2lvbiB3aGVuIHBvc3NpYmxlXG4gICAgICAgICAgICBpZiAoQnVmZmVyLmlzTmF0aXZlRW5jb2RpbmcoZW5jb2RpbmcpKVxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5TbG93QnVmZmVyVG9TdHJpbmcuY2FsbCh0aGlzLCBlbmNvZGluZywgc3RhcnQsIGVuZCk7XG5cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgdXNlIG91ciBkZWNvZGluZyBtZXRob2QuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0YXJ0ID09ICd1bmRlZmluZWQnKSBzdGFydCA9IDA7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVuZCA9PSAndW5kZWZpbmVkJykgZW5kID0gdGhpcy5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gaWNvbnYuZGVjb2RlKHRoaXMuc2xpY2Uoc3RhcnQsIGVuZCksIGVuY29kaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9yaWdpbmFsLlNsb3dCdWZmZXJXcml0ZSA9IFNsb3dCdWZmZXIucHJvdG90eXBlLndyaXRlO1xuICAgICAgICBTbG93QnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gICAgICAgICAgICAvLyBTdXBwb3J0IGJvdGggKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKVxuICAgICAgICAgICAgLy8gYW5kIHRoZSBsZWdhY3kgKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldCwgbGVuZ3RoKVxuICAgICAgICAgICAgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBsZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgeyAgLy8gbGVnYWN5XG4gICAgICAgICAgICAgICAgdmFyIHN3YXAgPSBlbmNvZGluZztcbiAgICAgICAgICAgICAgICBlbmNvZGluZyA9IG9mZnNldDtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBsZW5ndGg7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gc3dhcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb2Zmc2V0ID0gK29mZnNldCB8fCAwO1xuICAgICAgICAgICAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0O1xuICAgICAgICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBsZW5ndGggPSByZW1haW5pbmc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9ICtsZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSByZW1haW5pbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcgfHwgJ3V0ZjgnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgICAvLyBVc2UgbmF0aXZlIGNvbnZlcnNpb24gd2hlbiBwb3NzaWJsZVxuICAgICAgICAgICAgaWYgKEJ1ZmZlci5pc05hdGl2ZUVuY29kaW5nKGVuY29kaW5nKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuU2xvd0J1ZmZlcldyaXRlLmNhbGwodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpO1xuXG4gICAgICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2F0dGVtcHQgdG8gd3JpdGUgYmV5b25kIGJ1ZmZlciBib3VuZHMnKTtcblxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB1c2Ugb3VyIGVuY29kaW5nIG1ldGhvZC5cbiAgICAgICAgICAgIHZhciBidWYgPSBpY29udi5lbmNvZGUoc3RyaW5nLCBlbmNvZGluZyk7XG4gICAgICAgICAgICBpZiAoYnVmLmxlbmd0aCA8IGxlbmd0aCkgbGVuZ3RoID0gYnVmLmxlbmd0aDtcbiAgICAgICAgICAgIGJ1Zi5jb3B5KHRoaXMsIG9mZnNldCwgMCwgbGVuZ3RoKTtcbiAgICAgICAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAtLSBCdWZmZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAgICAgb3JpZ2luYWwuQnVmZmVySXNFbmNvZGluZyA9IEJ1ZmZlci5pc0VuY29kaW5nO1xuICAgICAgICBCdWZmZXIuaXNFbmNvZGluZyA9IGZ1bmN0aW9uKGVuY29kaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gQnVmZmVyLmlzTmF0aXZlRW5jb2RpbmcoZW5jb2RpbmcpIHx8IGljb252LmVuY29kaW5nRXhpc3RzKGVuY29kaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9yaWdpbmFsLkJ1ZmZlckJ5dGVMZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aDtcbiAgICAgICAgQnVmZmVyLmJ5dGVMZW5ndGggPSBTbG93QnVmZmVyLmJ5dGVMZW5ndGggPSBmdW5jdGlvbihzdHIsIGVuY29kaW5nKSB7XG4gICAgICAgICAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZyB8fCAndXRmOCcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIC8vIFVzZSBuYXRpdmUgY29udmVyc2lvbiB3aGVuIHBvc3NpYmxlXG4gICAgICAgICAgICBpZiAoQnVmZmVyLmlzTmF0aXZlRW5jb2RpbmcoZW5jb2RpbmcpKVxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5CdWZmZXJCeXRlTGVuZ3RoLmNhbGwodGhpcywgc3RyLCBlbmNvZGluZyk7XG5cbiAgICAgICAgICAgIC8vIFNsb3csIEkga25vdywgYnV0IHdlIGRvbid0IGhhdmUgYSBiZXR0ZXIgd2F5IHlldC5cbiAgICAgICAgICAgIHJldHVybiBpY29udi5lbmNvZGUoc3RyLCBlbmNvZGluZykubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgb3JpZ2luYWwuQnVmZmVyVG9TdHJpbmcgPSBCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nO1xuICAgICAgICBCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nIHx8ICd1dGY4JykudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgLy8gVXNlIG5hdGl2ZSBjb252ZXJzaW9uIHdoZW4gcG9zc2libGVcbiAgICAgICAgICAgIGlmIChCdWZmZXIuaXNOYXRpdmVFbmNvZGluZyhlbmNvZGluZykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLkJ1ZmZlclRvU3RyaW5nLmNhbGwodGhpcywgZW5jb2RpbmcsIHN0YXJ0LCBlbmQpO1xuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UsIHVzZSBvdXIgZGVjb2RpbmcgbWV0aG9kLlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdGFydCA9PSAndW5kZWZpbmVkJykgc3RhcnQgPSAwO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlbmQgPT0gJ3VuZGVmaW5lZCcpIGVuZCA9IHRoaXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGljb252LmRlY29kZSh0aGlzLnNsaWNlKHN0YXJ0LCBlbmQpLCBlbmNvZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBvcmlnaW5hbC5CdWZmZXJXcml0ZSA9IEJ1ZmZlci5wcm90b3R5cGUud3JpdGU7XG4gICAgICAgIEJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAgICAgICAgICAgdmFyIF9vZmZzZXQgPSBvZmZzZXQsIF9sZW5ndGggPSBsZW5ndGgsIF9lbmNvZGluZyA9IGVuY29kaW5nO1xuICAgICAgICAgICAgLy8gU3VwcG9ydCBib3RoIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZylcbiAgICAgICAgICAgIC8vIGFuZCB0aGUgbGVnYWN5IChzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXQsIGxlbmd0aClcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShvZmZzZXQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nID0gbGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHsgIC8vIGxlZ2FjeVxuICAgICAgICAgICAgICAgIHZhciBzd2FwID0gZW5jb2Rpbmc7XG4gICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gbGVuZ3RoO1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHN3YXA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nIHx8ICd1dGY4JykudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgLy8gVXNlIG5hdGl2ZSBjb252ZXJzaW9uIHdoZW4gcG9zc2libGVcbiAgICAgICAgICAgIGlmIChCdWZmZXIuaXNOYXRpdmVFbmNvZGluZyhlbmNvZGluZykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLkJ1ZmZlcldyaXRlLmNhbGwodGhpcywgc3RyaW5nLCBfb2Zmc2V0LCBfbGVuZ3RoLCBfZW5jb2RpbmcpO1xuXG4gICAgICAgICAgICBvZmZzZXQgPSArb2Zmc2V0IHx8IDA7XG4gICAgICAgICAgICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXQ7XG4gICAgICAgICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHJlbWFpbmluZztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gK2xlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHJlbWFpbmluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignYXR0ZW1wdCB0byB3cml0ZSBiZXlvbmQgYnVmZmVyIGJvdW5kcycpO1xuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UsIHVzZSBvdXIgZW5jb2RpbmcgbWV0aG9kLlxuICAgICAgICAgICAgdmFyIGJ1ZiA9IGljb252LmVuY29kZShzdHJpbmcsIGVuY29kaW5nKTtcbiAgICAgICAgICAgIGlmIChidWYubGVuZ3RoIDwgbGVuZ3RoKSBsZW5ndGggPSBidWYubGVuZ3RoO1xuICAgICAgICAgICAgYnVmLmNvcHkodGhpcywgb2Zmc2V0LCAwLCBsZW5ndGgpO1xuICAgICAgICAgICAgcmV0dXJuIGxlbmd0aDtcblxuICAgICAgICAgICAgLy8gVE9ETzogU2V0IF9jaGFyc1dyaXR0ZW4uXG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIC0tIFJlYWRhYmxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgaWYgKGljb252LnN1cHBvcnRzU3RyZWFtcykge1xuICAgICAgICAgICAgdmFyIFJlYWRhYmxlID0gcmVxdWlyZSgnc3RyZWFtJykuUmVhZGFibGU7XG5cbiAgICAgICAgICAgIG9yaWdpbmFsLlJlYWRhYmxlU2V0RW5jb2RpbmcgPSBSZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2Rpbmc7XG4gICAgICAgICAgICBSZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2RpbmcgPSBmdW5jdGlvbiBzZXRFbmNvZGluZyhlbmMsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAvLyBVc2Ugb3VyIG93biBkZWNvZGVyLCBpdCBoYXMgdGhlIHNhbWUgaW50ZXJmYWNlLlxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbm5vdCB1c2Ugb3JpZ2luYWwgZnVuY3Rpb24gYXMgaXQgZG9lc24ndCBoYW5kbGUgQk9NLXMuXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyID0gaWNvbnYuZ2V0RGVjb2RlcihlbmMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2RpbmcgPSBlbmM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIFJlYWRhYmxlLnByb3RvdHlwZS5jb2xsZWN0ID0gaWNvbnYuX2NvbGxlY3Q7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgaWNvbnYtbGl0ZSBOb2RlIHByaW1pdGl2ZSBleHRlbnNpb25zLlxuICAgIGljb252LnVuZG9FeHRlbmROb2RlRW5jb2RpbmdzID0gZnVuY3Rpb24gdW5kb0V4dGVuZE5vZGVFbmNvZGluZ3MoKSB7XG4gICAgICAgIGlmICghaWNvbnYuc3VwcG9ydHNOb2RlRW5jb2RpbmdzRXh0ZW5zaW9uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIW9yaWdpbmFsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVxdWlyZSgnaWNvbnYtbGl0ZScpLnVuZG9FeHRlbmROb2RlRW5jb2RpbmdzKCk6IE5vdGhpbmcgdG8gdW5kbzsgZXh0ZW5kTm9kZUVuY29kaW5ncygpIGlzIG5vdCBjYWxsZWQuXCIpXG5cbiAgICAgICAgZGVsZXRlIEJ1ZmZlci5pc05hdGl2ZUVuY29kaW5nO1xuXG4gICAgICAgIHZhciBTbG93QnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuU2xvd0J1ZmZlcjtcblxuICAgICAgICBTbG93QnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IG9yaWdpbmFsLlNsb3dCdWZmZXJUb1N0cmluZztcbiAgICAgICAgU2xvd0J1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBvcmlnaW5hbC5TbG93QnVmZmVyV3JpdGU7XG5cbiAgICAgICAgQnVmZmVyLmlzRW5jb2RpbmcgPSBvcmlnaW5hbC5CdWZmZXJJc0VuY29kaW5nO1xuICAgICAgICBCdWZmZXIuYnl0ZUxlbmd0aCA9IG9yaWdpbmFsLkJ1ZmZlckJ5dGVMZW5ndGg7XG4gICAgICAgIEJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBvcmlnaW5hbC5CdWZmZXJUb1N0cmluZztcbiAgICAgICAgQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IG9yaWdpbmFsLkJ1ZmZlcldyaXRlO1xuXG4gICAgICAgIGlmIChpY29udi5zdXBwb3J0c1N0cmVhbXMpIHtcbiAgICAgICAgICAgIHZhciBSZWFkYWJsZSA9IHJlcXVpcmUoJ3N0cmVhbScpLlJlYWRhYmxlO1xuXG4gICAgICAgICAgICBSZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2RpbmcgPSBvcmlnaW5hbC5SZWFkYWJsZVNldEVuY29kaW5nO1xuICAgICAgICAgICAgZGVsZXRlIFJlYWRhYmxlLnByb3RvdHlwZS5jb2xsZWN0O1xuICAgICAgICB9XG5cbiAgICAgICAgb3JpZ2luYWwgPSB1bmRlZmluZWQ7XG4gICAgfVxufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIFNvbWUgZW52aXJvbm1lbnRzIGRvbid0IGhhdmUgZ2xvYmFsIEJ1ZmZlciAoZS5nLiBSZWFjdCBOYXRpdmUpLlxuLy8gU29sdXRpb24gd291bGQgYmUgaW5zdGFsbGluZyBucG0gbW9kdWxlcyBcImJ1ZmZlclwiIGFuZCBcInN0cmVhbVwiIGV4cGxpY2l0bHkuXG52YXIgQnVmZmVyID0gcmVxdWlyZShcInNhZmVyLWJ1ZmZlclwiKS5CdWZmZXI7XG5cbnZhciBib21IYW5kbGluZyA9IHJlcXVpcmUoXCIuL2JvbS1oYW5kbGluZ1wiKSxcbiAgICBpY29udiA9IG1vZHVsZS5leHBvcnRzO1xuXG4vLyBBbGwgY29kZWNzIGFuZCBhbGlhc2VzIGFyZSBrZXB0IGhlcmUsIGtleWVkIGJ5IGVuY29kaW5nIG5hbWUvYWxpYXMuXG4vLyBUaGV5IGFyZSBsYXp5IGxvYWRlZCBpbiBgaWNvbnYuZ2V0Q29kZWNgIGZyb20gYGVuY29kaW5ncy9pbmRleC5qc2AuXG5pY29udi5lbmNvZGluZ3MgPSBudWxsO1xuXG4vLyBDaGFyYWN0ZXJzIGVtaXR0ZWQgaW4gY2FzZSBvZiBlcnJvci5cbmljb252LmRlZmF1bHRDaGFyVW5pY29kZSA9ICfvv70nO1xuaWNvbnYuZGVmYXVsdENoYXJTaW5nbGVCeXRlID0gJz8nO1xuXG4vLyBQdWJsaWMgQVBJLlxuaWNvbnYuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKHN0ciwgZW5jb2RpbmcsIG9wdGlvbnMpIHtcbiAgICBzdHIgPSBcIlwiICsgKHN0ciB8fCBcIlwiKTsgLy8gRW5zdXJlIHN0cmluZy5cblxuICAgIHZhciBlbmNvZGVyID0gaWNvbnYuZ2V0RW5jb2RlcihlbmNvZGluZywgb3B0aW9ucyk7XG5cbiAgICB2YXIgcmVzID0gZW5jb2Rlci53cml0ZShzdHIpO1xuICAgIHZhciB0cmFpbCA9IGVuY29kZXIuZW5kKCk7XG4gICAgXG4gICAgcmV0dXJuICh0cmFpbCAmJiB0cmFpbC5sZW5ndGggPiAwKSA/IEJ1ZmZlci5jb25jYXQoW3JlcywgdHJhaWxdKSA6IHJlcztcbn1cblxuaWNvbnYuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKGJ1ZiwgZW5jb2RpbmcsIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIGJ1ZiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKCFpY29udi5za2lwRGVjb2RlV2FybmluZykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignSWNvbnYtbGl0ZSB3YXJuaW5nOiBkZWNvZGUoKS1pbmcgc3RyaW5ncyBpcyBkZXByZWNhdGVkLiBSZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vYXNodHVjaGtpbi9pY29udi1saXRlL3dpa2kvVXNlLUJ1ZmZlcnMtd2hlbi1kZWNvZGluZycpO1xuICAgICAgICAgICAgaWNvbnYuc2tpcERlY29kZVdhcm5pbmcgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVmID0gQnVmZmVyLmZyb20oXCJcIiArIChidWYgfHwgXCJcIiksIFwiYmluYXJ5XCIpOyAvLyBFbnN1cmUgYnVmZmVyLlxuICAgIH1cblxuICAgIHZhciBkZWNvZGVyID0gaWNvbnYuZ2V0RGVjb2RlcihlbmNvZGluZywgb3B0aW9ucyk7XG5cbiAgICB2YXIgcmVzID0gZGVjb2Rlci53cml0ZShidWYpO1xuICAgIHZhciB0cmFpbCA9IGRlY29kZXIuZW5kKCk7XG5cbiAgICByZXR1cm4gdHJhaWwgPyAocmVzICsgdHJhaWwpIDogcmVzO1xufVxuXG5pY29udi5lbmNvZGluZ0V4aXN0cyA9IGZ1bmN0aW9uIGVuY29kaW5nRXhpc3RzKGVuYykge1xuICAgIHRyeSB7XG4gICAgICAgIGljb252LmdldENvZGVjKGVuYyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuLy8gTGVnYWN5IGFsaWFzZXMgdG8gY29udmVydCBmdW5jdGlvbnNcbmljb252LnRvRW5jb2RpbmcgPSBpY29udi5lbmNvZGU7XG5pY29udi5mcm9tRW5jb2RpbmcgPSBpY29udi5kZWNvZGU7XG5cbi8vIFNlYXJjaCBmb3IgYSBjb2RlYyBpbiBpY29udi5lbmNvZGluZ3MuIENhY2hlIGNvZGVjIGRhdGEgaW4gaWNvbnYuX2NvZGVjRGF0YUNhY2hlLlxuaWNvbnYuX2NvZGVjRGF0YUNhY2hlID0ge307XG5pY29udi5nZXRDb2RlYyA9IGZ1bmN0aW9uIGdldENvZGVjKGVuY29kaW5nKSB7XG4gICAgaWYgKCFpY29udi5lbmNvZGluZ3MpXG4gICAgICAgIGljb252LmVuY29kaW5ncyA9IHJlcXVpcmUoXCIuLi9lbmNvZGluZ3NcIik7IC8vIExhenkgbG9hZCBhbGwgZW5jb2RpbmcgZGVmaW5pdGlvbnMuXG4gICAgXG4gICAgLy8gQ2Fub25pY2FsaXplIGVuY29kaW5nIG5hbWU6IHN0cmlwIGFsbCBub24tYWxwaGFudW1lcmljIGNoYXJzIGFuZCBhcHBlbmRlZCB5ZWFyLlxuICAgIHZhciBlbmMgPSBpY29udi5fY2Fub25pY2FsaXplRW5jb2RpbmcoZW5jb2RpbmcpO1xuXG4gICAgLy8gVHJhdmVyc2UgaWNvbnYuZW5jb2RpbmdzIHRvIGZpbmQgYWN0dWFsIGNvZGVjLlxuICAgIHZhciBjb2RlY09wdGlvbnMgPSB7fTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgY29kZWMgPSBpY29udi5fY29kZWNEYXRhQ2FjaGVbZW5jXTtcbiAgICAgICAgaWYgKGNvZGVjKVxuICAgICAgICAgICAgcmV0dXJuIGNvZGVjO1xuXG4gICAgICAgIHZhciBjb2RlY0RlZiA9IGljb252LmVuY29kaW5nc1tlbmNdO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIGNvZGVjRGVmKSB7XG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6IC8vIERpcmVjdCBhbGlhcyB0byBvdGhlciBlbmNvZGluZy5cbiAgICAgICAgICAgICAgICBlbmMgPSBjb2RlY0RlZjtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOiAvLyBBbGlhcyB3aXRoIG9wdGlvbnMuIENhbiBiZSBsYXllcmVkLlxuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBjb2RlY0RlZilcbiAgICAgICAgICAgICAgICAgICAgY29kZWNPcHRpb25zW2tleV0gPSBjb2RlY0RlZltrZXldO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFjb2RlY09wdGlvbnMuZW5jb2RpbmdOYW1lKVxuICAgICAgICAgICAgICAgICAgICBjb2RlY09wdGlvbnMuZW5jb2RpbmdOYW1lID0gZW5jO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGVuYyA9IGNvZGVjRGVmLnR5cGU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOiAvLyBDb2RlYyBpdHNlbGYuXG4gICAgICAgICAgICAgICAgaWYgKCFjb2RlY09wdGlvbnMuZW5jb2RpbmdOYW1lKVxuICAgICAgICAgICAgICAgICAgICBjb2RlY09wdGlvbnMuZW5jb2RpbmdOYW1lID0gZW5jO1xuXG4gICAgICAgICAgICAgICAgLy8gVGhlIGNvZGVjIGZ1bmN0aW9uIG11c3QgbG9hZCBhbGwgdGFibGVzIGFuZCByZXR1cm4gb2JqZWN0IHdpdGggLmVuY29kZXIgYW5kIC5kZWNvZGVyIG1ldGhvZHMuXG4gICAgICAgICAgICAgICAgLy8gSXQnbGwgYmUgY2FsbGVkIG9ubHkgb25jZSAoZm9yIGVhY2ggZGlmZmVyZW50IG9wdGlvbnMgb2JqZWN0KS5cbiAgICAgICAgICAgICAgICBjb2RlYyA9IG5ldyBjb2RlY0RlZihjb2RlY09wdGlvbnMsIGljb252KTtcblxuICAgICAgICAgICAgICAgIGljb252Ll9jb2RlY0RhdGFDYWNoZVtjb2RlY09wdGlvbnMuZW5jb2RpbmdOYW1lXSA9IGNvZGVjOyAvLyBTYXZlIGl0IHRvIGJlIHJldXNlZCBsYXRlci5cbiAgICAgICAgICAgICAgICByZXR1cm4gY29kZWM7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW5jb2Rpbmcgbm90IHJlY29nbml6ZWQ6ICdcIiArIGVuY29kaW5nICsgXCInIChzZWFyY2hlZCBhczogJ1wiK2VuYytcIicpXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5pY29udi5fY2Fub25pY2FsaXplRW5jb2RpbmcgPSBmdW5jdGlvbihlbmNvZGluZykge1xuICAgIC8vIENhbm9uaWNhbGl6ZSBlbmNvZGluZyBuYW1lOiBzdHJpcCBhbGwgbm9uLWFscGhhbnVtZXJpYyBjaGFycyBhbmQgYXBwZW5kZWQgeWVhci5cbiAgICByZXR1cm4gKCcnK2VuY29kaW5nKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLzpcXGR7NH0kfFteMC05YS16XS9nLCBcIlwiKTtcbn1cblxuaWNvbnYuZ2V0RW5jb2RlciA9IGZ1bmN0aW9uIGdldEVuY29kZXIoZW5jb2RpbmcsIG9wdGlvbnMpIHtcbiAgICB2YXIgY29kZWMgPSBpY29udi5nZXRDb2RlYyhlbmNvZGluZyksXG4gICAgICAgIGVuY29kZXIgPSBuZXcgY29kZWMuZW5jb2RlcihvcHRpb25zLCBjb2RlYyk7XG5cbiAgICBpZiAoY29kZWMuYm9tQXdhcmUgJiYgb3B0aW9ucyAmJiBvcHRpb25zLmFkZEJPTSlcbiAgICAgICAgZW5jb2RlciA9IG5ldyBib21IYW5kbGluZy5QcmVwZW5kQk9NKGVuY29kZXIsIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGVuY29kZXI7XG59XG5cbmljb252LmdldERlY29kZXIgPSBmdW5jdGlvbiBnZXREZWNvZGVyKGVuY29kaW5nLCBvcHRpb25zKSB7XG4gICAgdmFyIGNvZGVjID0gaWNvbnYuZ2V0Q29kZWMoZW5jb2RpbmcpLFxuICAgICAgICBkZWNvZGVyID0gbmV3IGNvZGVjLmRlY29kZXIob3B0aW9ucywgY29kZWMpO1xuXG4gICAgaWYgKGNvZGVjLmJvbUF3YXJlICYmICEob3B0aW9ucyAmJiBvcHRpb25zLnN0cmlwQk9NID09PSBmYWxzZSkpXG4gICAgICAgIGRlY29kZXIgPSBuZXcgYm9tSGFuZGxpbmcuU3RyaXBCT00oZGVjb2Rlciwgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4gZGVjb2Rlcjtcbn1cblxuXG4vLyBMb2FkIGV4dGVuc2lvbnMgaW4gTm9kZS4gQWxsIG9mIHRoZW0gYXJlIG9taXR0ZWQgaW4gQnJvd3NlcmlmeSBidWlsZCB2aWEgJ2Jyb3dzZXInIGZpZWxkIGluIHBhY2thZ2UuanNvbi5cbnZhciBub2RlVmVyID0gdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MudmVyc2lvbnMgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlO1xuaWYgKG5vZGVWZXIpIHtcblxuICAgIC8vIExvYWQgc3RyZWFtaW5nIHN1cHBvcnQgaW4gTm9kZSB2MC4xMCtcbiAgICB2YXIgbm9kZVZlckFyciA9IG5vZGVWZXIuc3BsaXQoXCIuXCIpLm1hcChOdW1iZXIpO1xuICAgIGlmIChub2RlVmVyQXJyWzBdID4gMCB8fCBub2RlVmVyQXJyWzFdID49IDEwKSB7XG4gICAgICAgIHJlcXVpcmUoXCIuL3N0cmVhbXNcIikoaWNvbnYpO1xuICAgIH1cblxuICAgIC8vIExvYWQgTm9kZSBwcmltaXRpdmUgZXh0ZW5zaW9ucy5cbiAgICByZXF1aXJlKFwiLi9leHRlbmQtbm9kZVwiKShpY29udik7XG59XG5cbmlmIChcIsSAXCIgIT0gXCJcXHUwMTAwXCIpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiaWNvbnYtbGl0ZSB3YXJuaW5nOiBqYXZhc2NyaXB0IGZpbGVzIHVzZSBlbmNvZGluZyBkaWZmZXJlbnQgZnJvbSB1dGYtOC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2h0dWNoa2luL2ljb252LWxpdGUvd2lraS9KYXZhc2NyaXB0LXNvdXJjZS1maWxlLWVuY29kaW5ncyBmb3IgbW9yZSBpbmZvLlwiKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc1dpbmRvd3MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xudmFyIHRyYWlsaW5nU2xhc2hSZSA9IGlzV2luZG93cyA/IC9bXjpdXFxcXCQvIDogLy5cXC8kLztcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvM2U3YTE0MzgxNDk3YTNiNzNkZGE2OGQwNWI1MTMwNTYzY2RhYjQyMC9saWIvb3MuanMjTDI1LUw0M1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBwYXRoO1xuXG5cdGlmIChpc1dpbmRvd3MpIHtcblx0XHRwYXRoID0gcHJvY2Vzcy5lbnYuVEVNUCB8fFxuXHRcdFx0cHJvY2Vzcy5lbnYuVE1QIHx8XG5cdFx0XHQocHJvY2Vzcy5lbnYuU3lzdGVtUm9vdCB8fCBwcm9jZXNzLmVudi53aW5kaXIpICsgJ1xcXFx0ZW1wJztcblx0fSBlbHNlIHtcblx0XHRwYXRoID0gcHJvY2Vzcy5lbnYuVE1QRElSIHx8XG5cdFx0XHRwcm9jZXNzLmVudi5UTVAgfHxcblx0XHRcdHByb2Nlc3MuZW52LlRFTVAgfHxcblx0XHRcdCcvdG1wJztcblx0fVxuXG5cdGlmICh0cmFpbGluZ1NsYXNoUmUudGVzdChwYXRoKSkge1xuXHRcdHBhdGggPSBwYXRoLnNsaWNlKDAsIC0xKTtcblx0fVxuXG5cdHJldHVybiBwYXRoO1xufTtcbiIsIi8qIVxuICogVG1wXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTcgS0FSQVNaSSBJc3R2YW4gPGdpdGh1YkBzcGFtLnJhc3ppLmh1PlxuICpcbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5jb25zdCBvc1RtcERpciA9IHJlcXVpcmUoJ29zLXRtcGRpcicpO1xuY29uc3QgX2MgPSBwcm9jZXNzLmJpbmRpbmcoJ2NvbnN0YW50cycpO1xuXG4vKlxuICogVGhlIHdvcmtpbmcgaW5uZXIgdmFyaWFibGVzLlxuICovXG5jb25zdFxuICAvKipcbiAgICogVGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICB0bXBEaXIgPSBvc1RtcERpcigpLFxuXG4gIC8vIHRoZSByYW5kb20gY2hhcmFjdGVycyB0byBjaG9vc2UgZnJvbVxuICBSQU5ET01fQ0hBUlMgPSAnMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonLFxuXG4gIFRFTVBMQVRFX1BBVFRFUk4gPSAvWFhYWFhYLyxcblxuICBERUZBVUxUX1RSSUVTID0gMyxcblxuICBDUkVBVEVfRkxBR1MgPSAoX2MuT19DUkVBVCB8fCBfYy5mcy5PX0NSRUFUKSB8IChfYy5PX0VYQ0wgfHwgX2MuZnMuT19FWENMKSB8IChfYy5PX1JEV1IgfHwgX2MuZnMuT19SRFdSKSxcblxuICBFQkFERiA9IF9jLkVCQURGIHx8IF9jLm9zLmVycm5vLkVCQURGLFxuICBFTk9FTlQgPSBfYy5FTk9FTlQgfHwgX2Mub3MuZXJybm8uRU5PRU5ULFxuXG4gIERJUl9NT0RFID0gNDQ4IC8qIDBvNzAwICovLFxuICBGSUxFX01PREUgPSAzODQgLyogMG82MDAgKi8sXG5cbiAgLy8gdGhpcyB3aWxsIGhvbGQgdGhlIG9iamVjdHMgbmVlZCB0byBiZSByZW1vdmVkIG9uIGV4aXRcbiAgX3JlbW92ZU9iamVjdHMgPSBbXTtcblxudmFyXG4gIF9ncmFjZWZ1bENsZWFudXAgPSBmYWxzZSxcbiAgX3VuY2F1Z2h0RXhjZXB0aW9uID0gZmFsc2U7XG5cbi8qKlxuICogUmFuZG9tIG5hbWUgZ2VuZXJhdG9yIGJhc2VkIG9uIGNyeXB0by5cbiAqIEFkYXB0ZWQgZnJvbSBodHRwOi8vYmxvZy50b21wYXdsYWsub3JnL2hvdy10by1nZW5lcmF0ZS1yYW5kb20tdmFsdWVzLW5vZGVqcy1qYXZhc2NyaXB0XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGhvd01hbnlcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBnZW5lcmF0ZWQgcmFuZG9tIG5hbWVcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9yYW5kb21DaGFycyhob3dNYW55KSB7XG4gIHZhclxuICAgIHZhbHVlID0gW10sXG4gICAgcm5kID0gbnVsbDtcblxuICAvLyBtYWtlIHN1cmUgdGhhdCB3ZSBkbyBub3QgZmFpbCBiZWNhdXNlIHdlIHJhbiBvdXQgb2YgZW50cm9weVxuICB0cnkge1xuICAgIHJuZCA9IGNyeXB0by5yYW5kb21CeXRlcyhob3dNYW55KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJuZCA9IGNyeXB0by5wc2V1ZG9SYW5kb21CeXRlcyhob3dNYW55KTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaG93TWFueTsgaSsrKSB7XG4gICAgdmFsdWUucHVzaChSQU5ET01fQ0hBUlNbcm5kW2ldICUgUkFORE9NX0NIQVJTLmxlbmd0aF0pO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlLmpvaW4oJycpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBgb2JqYCBwYXJhbWV0ZXIgaXMgZGVmaW5lZCBvciBub3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIG9iamVjdCBpcyB1bmRlZmluZWRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9pc1VuZGVmaW5lZChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnO1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgZnVuY3Rpb24gYXJndW1lbnRzLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaGVscHMgdG8gaGF2ZSBvcHRpb25hbCBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIHsoT3B0aW9uc3xGdW5jdGlvbil9IG9wdGlvbnNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7QXJyYXl9IHBhcnNlZCBhcmd1bWVudHNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9wYXJzZUFyZ3VtZW50cyhvcHRpb25zLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBbY2FsbGJhY2sgfHwge30sIG9wdGlvbnNdO1xuICB9XG5cbiAgaWYgKF9pc1VuZGVmaW5lZChvcHRpb25zKSkge1xuICAgIHJldHVybiBbe30sIGNhbGxiYWNrXTtcbiAgfVxuXG4gIHJldHVybiBbb3B0aW9ucywgY2FsbGJhY2tdO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIG5ldyB0ZW1wb3JhcnkgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICogQHJldHVybnMge3N0cmluZ30gdGhlIG5ldyByYW5kb20gbmFtZSBhY2NvcmRpbmcgdG8gb3B0c1xuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX2dlbmVyYXRlVG1wTmFtZShvcHRzKSB7XG4gIGlmIChvcHRzLm5hbWUpIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKG9wdHMuZGlyIHx8IHRtcERpciwgb3B0cy5uYW1lKTtcbiAgfVxuXG4gIC8vIG1rc3RlbXBzIGxpa2UgdGVtcGxhdGVcbiAgaWYgKG9wdHMudGVtcGxhdGUpIHtcbiAgICByZXR1cm4gb3B0cy50ZW1wbGF0ZS5yZXBsYWNlKFRFTVBMQVRFX1BBVFRFUk4sIF9yYW5kb21DaGFycyg2KSk7XG4gIH1cblxuICAvLyBwcmVmaXggYW5kIHBvc3RmaXhcbiAgY29uc3QgbmFtZSA9IFtcbiAgICBvcHRzLnByZWZpeCB8fCAndG1wLScsXG4gICAgcHJvY2Vzcy5waWQsXG4gICAgX3JhbmRvbUNoYXJzKDEyKSxcbiAgICBvcHRzLnBvc3RmaXggfHwgJydcbiAgXS5qb2luKCcnKTtcblxuICByZXR1cm4gcGF0aC5qb2luKG9wdHMuZGlyIHx8IHRtcERpciwgbmFtZSk7XG59XG5cbi8qKlxuICogR2V0cyBhIHRlbXBvcmFyeSBmaWxlIG5hbWUuXG4gKlxuICogQHBhcmFtIHsoT3B0aW9uc3x0bXBOYW1lQ2FsbGJhY2spfSBvcHRpb25zIG9wdGlvbnMgb3IgY2FsbGJhY2tcbiAqIEBwYXJhbSB7P3RtcE5hbWVDYWxsYmFja30gY2FsbGJhY2sgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIHRtcE5hbWUob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgdmFyXG4gICAgYXJncyA9IF9wYXJzZUFyZ3VtZW50cyhvcHRpb25zLCBjYWxsYmFjayksXG4gICAgb3B0cyA9IGFyZ3NbMF0sXG4gICAgY2IgPSBhcmdzWzFdLFxuICAgIHRyaWVzID0gb3B0cy5uYW1lID8gMSA6IG9wdHMudHJpZXMgfHwgREVGQVVMVF9UUklFUztcblxuICBpZiAoaXNOYU4odHJpZXMpIHx8IHRyaWVzIDwgMClcbiAgICByZXR1cm4gY2IobmV3IEVycm9yKCdJbnZhbGlkIHRyaWVzJykpO1xuXG4gIGlmIChvcHRzLnRlbXBsYXRlICYmICFvcHRzLnRlbXBsYXRlLm1hdGNoKFRFTVBMQVRFX1BBVFRFUk4pKVxuICAgIHJldHVybiBjYihuZXcgRXJyb3IoJ0ludmFsaWQgdGVtcGxhdGUgcHJvdmlkZWQnKSk7XG5cbiAgKGZ1bmN0aW9uIF9nZXRVbmlxdWVOYW1lKCkge1xuICAgIGNvbnN0IG5hbWUgPSBfZ2VuZXJhdGVUbXBOYW1lKG9wdHMpO1xuXG4gICAgLy8gY2hlY2sgd2hldGhlciB0aGUgcGF0aCBleGlzdHMgdGhlbiByZXRyeSBpZiBuZWVkZWRcbiAgICBmcy5zdGF0KG5hbWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmICghZXJyKSB7XG4gICAgICAgIGlmICh0cmllcy0tID4gMCkgcmV0dXJuIF9nZXRVbmlxdWVOYW1lKCk7XG5cbiAgICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcignQ291bGQgbm90IGdldCBhIHVuaXF1ZSB0bXAgZmlsZW5hbWUsIG1heCB0cmllcyByZWFjaGVkICcgKyBuYW1lKSk7XG4gICAgICB9XG5cbiAgICAgIGNiKG51bGwsIG5hbWUpO1xuICAgIH0pO1xuICB9KCkpO1xufVxuXG4vKipcbiAqIFN5bmNocm9ub3VzIHZlcnNpb24gb2YgdG1wTmFtZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybnMge3N0cmluZ30gdGhlIGdlbmVyYXRlZCByYW5kb20gbmFtZVxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBvcHRpb25zIGFyZSBpbnZhbGlkIG9yIGNvdWxkIG5vdCBnZW5lcmF0ZSBhIGZpbGVuYW1lXG4gKi9cbmZ1bmN0aW9uIHRtcE5hbWVTeW5jKG9wdGlvbnMpIHtcbiAgdmFyXG4gICAgYXJncyA9IF9wYXJzZUFyZ3VtZW50cyhvcHRpb25zKSxcbiAgICBvcHRzID0gYXJnc1swXSxcbiAgICB0cmllcyA9IG9wdHMubmFtZSA/IDEgOiBvcHRzLnRyaWVzIHx8IERFRkFVTFRfVFJJRVM7XG5cbiAgaWYgKGlzTmFOKHRyaWVzKSB8fCB0cmllcyA8IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRyaWVzJyk7XG5cbiAgaWYgKG9wdHMudGVtcGxhdGUgJiYgIW9wdHMudGVtcGxhdGUubWF0Y2goVEVNUExBVEVfUEFUVEVSTikpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRlbXBsYXRlIHByb3ZpZGVkJyk7XG5cbiAgZG8ge1xuICAgIGNvbnN0IG5hbWUgPSBfZ2VuZXJhdGVUbXBOYW1lKG9wdHMpO1xuICAgIHRyeSB7XG4gICAgICBmcy5zdGF0U3luYyhuYW1lKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gIH0gd2hpbGUgKHRyaWVzLS0gPiAwKTtcblxuICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBnZXQgYSB1bmlxdWUgdG1wIGZpbGVuYW1lLCBtYXggdHJpZXMgcmVhY2hlZCcpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW5kIG9wZW5zIGEgdGVtcG9yYXJ5IGZpbGUuXG4gKlxuICogQHBhcmFtIHsoT3B0aW9uc3xmaWxlQ2FsbGJhY2spfSBvcHRpb25zIHRoZSBjb25maWcgb3B0aW9ucyBvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEBwYXJhbSB7P2ZpbGVDYWxsYmFja30gY2FsbGJhY2tcbiAqL1xuZnVuY3Rpb24gZmlsZShvcHRpb25zLCBjYWxsYmFjaykge1xuICB2YXJcbiAgICBhcmdzID0gX3BhcnNlQXJndW1lbnRzKG9wdGlvbnMsIGNhbGxiYWNrKSxcbiAgICBvcHRzID0gYXJnc1swXSxcbiAgICBjYiA9IGFyZ3NbMV07XG5cbiAgb3B0cy5wb3N0Zml4ID0gKF9pc1VuZGVmaW5lZChvcHRzLnBvc3RmaXgpKSA/ICcudG1wJyA6IG9wdHMucG9zdGZpeDtcblxuICAvLyBnZXRzIGEgdGVtcG9yYXJ5IGZpbGVuYW1lXG4gIHRtcE5hbWUob3B0cywgZnVuY3Rpb24gX3RtcE5hbWVDcmVhdGVkKGVyciwgbmFtZSkge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpO1xuXG4gICAgLy8gY3JlYXRlIGFuZCBvcGVuIHRoZSBmaWxlXG4gICAgZnMub3BlbihuYW1lLCBDUkVBVEVfRkxBR1MsIG9wdHMubW9kZSB8fCBGSUxFX01PREUsIGZ1bmN0aW9uIF9maWxlQ3JlYXRlZChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKTtcblxuICAgICAgaWYgKG9wdHMuZGlzY2FyZERlc2NyaXB0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZzLmNsb3NlKGZkLCBmdW5jdGlvbiBfZGlzY2FyZENhbGxiYWNrKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIC8vIExvdyBwcm9iYWJpbGl0eSwgYW5kIHRoZSBmaWxlIGV4aXN0cywgc28gdGhpcyBjb3VsZCBiZVxuICAgICAgICAgICAgLy8gaWdub3JlZC4gIElmIGl0IGlzbid0IHdlIGNlcnRhaW5seSBuZWVkIHRvIHVubGluayB0aGVcbiAgICAgICAgICAgIC8vIGZpbGUsIGFuZCBpZiB0aGF0IGZhaWxzIHRvbyBpdHMgZXJyb3IgaXMgbW9yZVxuICAgICAgICAgICAgLy8gaW1wb3J0YW50LlxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZnMudW5saW5rU3luYyhuYW1lKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgaWYgKCFpc0VOT0VOVChlKSkge1xuICAgICAgICAgICAgICAgIGVyciA9IGU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYihudWxsLCBuYW1lLCB1bmRlZmluZWQsIF9wcmVwYXJlVG1wRmlsZVJlbW92ZUNhbGxiYWNrKG5hbWUsIC0xLCBvcHRzKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKG9wdHMuZGV0YWNoRGVzY3JpcHRvcikge1xuICAgICAgICByZXR1cm4gY2IobnVsbCwgbmFtZSwgZmQsIF9wcmVwYXJlVG1wRmlsZVJlbW92ZUNhbGxiYWNrKG5hbWUsIC0xLCBvcHRzKSk7XG4gICAgICB9XG4gICAgICBjYihudWxsLCBuYW1lLCBmZCwgX3ByZXBhcmVUbXBGaWxlUmVtb3ZlQ2FsbGJhY2sobmFtZSwgZmQsIG9wdHMpKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogU3luY2hyb25vdXMgdmVyc2lvbiBvZiBmaWxlLlxuICpcbiAqIEBwYXJhbSB7T3B0aW9uc30gb3B0aW9uc1xuICogQHJldHVybnMge0ZpbGVTeW5jT2JqZWN0fSBvYmplY3QgY29uc2lzdHMgb2YgbmFtZSwgZmQgYW5kIHJlbW92ZUNhbGxiYWNrXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgY2Fubm90IGNyZWF0ZSBhIGZpbGVcbiAqL1xuZnVuY3Rpb24gZmlsZVN5bmMob3B0aW9ucykge1xuICB2YXJcbiAgICBhcmdzID0gX3BhcnNlQXJndW1lbnRzKG9wdGlvbnMpLFxuICAgIG9wdHMgPSBhcmdzWzBdO1xuXG4gIG9wdHMucG9zdGZpeCA9IG9wdHMucG9zdGZpeCB8fCAnLnRtcCc7XG5cbiAgY29uc3QgZGlzY2FyZE9yRGV0YWNoRGVzY3JpcHRvciA9IG9wdHMuZGlzY2FyZERlc2NyaXB0b3IgfHwgb3B0cy5kZXRhY2hEZXNjcmlwdG9yO1xuICBjb25zdCBuYW1lID0gdG1wTmFtZVN5bmMob3B0cyk7XG4gIHZhciBmZCA9IGZzLm9wZW5TeW5jKG5hbWUsIENSRUFURV9GTEFHUywgb3B0cy5tb2RlIHx8IEZJTEVfTU9ERSk7XG4gIGlmIChvcHRzLmRpc2NhcmREZXNjcmlwdG9yKSB7XG4gICAgZnMuY2xvc2VTeW5jKGZkKTsgXG4gICAgZmQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgZmQ6IGZkLFxuICAgIHJlbW92ZUNhbGxiYWNrOiBfcHJlcGFyZVRtcEZpbGVSZW1vdmVDYWxsYmFjayhuYW1lLCBkaXNjYXJkT3JEZXRhY2hEZXNjcmlwdG9yID8gLTEgOiBmZCwgb3B0cylcbiAgfTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGZpbGVzIGFuZCBmb2xkZXJzIGluIGEgZGlyZWN0b3J5IHJlY3Vyc2l2ZWx5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByb290XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfcm1kaXJSZWN1cnNpdmVTeW5jKHJvb3QpIHtcbiAgY29uc3QgZGlycyA9IFtyb290XTtcblxuICBkbyB7XG4gICAgdmFyXG4gICAgICBkaXIgPSBkaXJzLnBvcCgpLFxuICAgICAgZGVmZXJyZWQgPSBmYWxzZSxcbiAgICAgIGZpbGVzID0gZnMucmVhZGRpclN5bmMoZGlyKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBmaWxlcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyXG4gICAgICAgIGZpbGUgPSBwYXRoLmpvaW4oZGlyLCBmaWxlc1tpXSksXG4gICAgICAgIHN0YXQgPSBmcy5sc3RhdFN5bmMoZmlsZSk7IC8vIGxzdGF0IHNvIHdlIGRvbid0IHJlY3Vyc2UgaW50byBzeW1saW5rZWQgZGlyZWN0b3JpZXNcblxuICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBpZiAoIWRlZmVycmVkKSB7XG4gICAgICAgICAgZGVmZXJyZWQgPSB0cnVlO1xuICAgICAgICAgIGRpcnMucHVzaChkaXIpO1xuICAgICAgICB9XG4gICAgICAgIGRpcnMucHVzaChmaWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZzLnVubGlua1N5bmMoZmlsZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFkZWZlcnJlZCkge1xuICAgICAgZnMucm1kaXJTeW5jKGRpcik7XG4gICAgfVxuICB9IHdoaWxlIChkaXJzLmxlbmd0aCAhPT0gMCk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHRlbXBvcmFyeSBkaXJlY3RvcnkuXG4gKlxuICogQHBhcmFtIHsoT3B0aW9uc3xkaXJDYWxsYmFjayl9IG9wdGlvbnMgdGhlIG9wdGlvbnMgb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKiBAcGFyYW0gez9kaXJDYWxsYmFja30gY2FsbGJhY2tcbiAqL1xuZnVuY3Rpb24gZGlyKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIHZhclxuICAgIGFyZ3MgPSBfcGFyc2VBcmd1bWVudHMob3B0aW9ucywgY2FsbGJhY2spLFxuICAgIG9wdHMgPSBhcmdzWzBdLFxuICAgIGNiID0gYXJnc1sxXTtcblxuICAvLyBnZXRzIGEgdGVtcG9yYXJ5IGZpbGVuYW1lXG4gIHRtcE5hbWUob3B0cywgZnVuY3Rpb24gX3RtcE5hbWVDcmVhdGVkKGVyciwgbmFtZSkge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBkaXJlY3RvcnlcbiAgICBmcy5ta2RpcihuYW1lLCBvcHRzLm1vZGUgfHwgRElSX01PREUsIGZ1bmN0aW9uIF9kaXJDcmVhdGVkKGVycikge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycik7XG5cbiAgICAgIGNiKG51bGwsIG5hbWUsIF9wcmVwYXJlVG1wRGlyUmVtb3ZlQ2FsbGJhY2sobmFtZSwgb3B0cykpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBTeW5jaHJvbm91cyB2ZXJzaW9uIG9mIGRpci5cbiAqXG4gKiBAcGFyYW0ge09wdGlvbnN9IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtEaXJTeW5jT2JqZWN0fSBvYmplY3QgY29uc2lzdHMgb2YgbmFtZSBhbmQgcmVtb3ZlQ2FsbGJhY2tcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBpdCBjYW5ub3QgY3JlYXRlIGEgZGlyZWN0b3J5XG4gKi9cbmZ1bmN0aW9uIGRpclN5bmMob3B0aW9ucykge1xuICB2YXJcbiAgICBhcmdzID0gX3BhcnNlQXJndW1lbnRzKG9wdGlvbnMpLFxuICAgIG9wdHMgPSBhcmdzWzBdO1xuXG4gIGNvbnN0IG5hbWUgPSB0bXBOYW1lU3luYyhvcHRzKTtcbiAgZnMubWtkaXJTeW5jKG5hbWUsIG9wdHMubW9kZSB8fCBESVJfTU9ERSk7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHJlbW92ZUNhbGxiYWNrOiBfcHJlcGFyZVRtcERpclJlbW92ZUNhbGxiYWNrKG5hbWUsIG9wdHMpXG4gIH07XG59XG5cbi8qKlxuICogUHJlcGFyZXMgdGhlIGNhbGxiYWNrIGZvciByZW1vdmFsIG9mIHRoZSB0ZW1wb3JhcnkgZmlsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSB0aGUgcGF0aCBvZiB0aGUgZmlsZVxuICogQHBhcmFtIHtudW1iZXJ9IGZkIGZpbGUgZGVzY3JpcHRvclxuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAqIEByZXR1cm5zIHtmaWxlQ2FsbGJhY2t9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfcHJlcGFyZVRtcEZpbGVSZW1vdmVDYWxsYmFjayhuYW1lLCBmZCwgb3B0cykge1xuICBjb25zdCByZW1vdmVDYWxsYmFjayA9IF9wcmVwYXJlUmVtb3ZlQ2FsbGJhY2soZnVuY3Rpb24gX3JlbW92ZUNhbGxiYWNrKGZkUGF0aCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoMCA8PSBmZFBhdGhbMF0pIHtcbiAgICAgICAgZnMuY2xvc2VTeW5jKGZkUGF0aFswXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAvLyB1bmRlciBzb21lIG5vZGUvd2luZG93cyByZWxhdGVkIGNpcmN1bXN0YW5jZXMsIGEgdGVtcG9yYXJ5IGZpbGVcbiAgICAgIC8vIG1heSBoYXZlIG5vdCBiZSBjcmVhdGVkIGFzIGV4cGVjdGVkIG9yIHRoZSBmaWxlIHdhcyBhbHJlYWR5IGNsb3NlZFxuICAgICAgLy8gYnkgdGhlIHVzZXIsIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbCBzaW1wbHkgaWdub3JlIHRoZSBlcnJvclxuICAgICAgaWYgKCFpc0VCQURGKGUpICYmICFpc0VOT0VOVChlKSkge1xuICAgICAgICAvLyByZXJhaXNlIGFueSB1bmFudGljaXBhdGVkIGVycm9yXG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBmcy51bmxpbmtTeW5jKGZkUGF0aFsxXSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICBpZiAoIWlzRU5PRU5UKGUpKSB7XG4gICAgICAgIC8vIHJlcmFpc2UgYW55IHVuYW50aWNpcGF0ZWQgZXJyb3JcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtmZCwgbmFtZV0pO1xuXG4gIGlmICghb3B0cy5rZWVwKSB7XG4gICAgX3JlbW92ZU9iamVjdHMudW5zaGlmdChyZW1vdmVDYWxsYmFjayk7XG4gIH1cblxuICByZXR1cm4gcmVtb3ZlQ2FsbGJhY2s7XG59XG5cbi8qKlxuICogUHJlcGFyZXMgdGhlIGNhbGxiYWNrIGZvciByZW1vdmFsIG9mIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICogQHJldHVybnMge0Z1bmN0aW9ufSB0aGUgY2FsbGJhY2tcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9wcmVwYXJlVG1wRGlyUmVtb3ZlQ2FsbGJhY2sobmFtZSwgb3B0cykge1xuICBjb25zdCByZW1vdmVGdW5jdGlvbiA9IG9wdHMudW5zYWZlQ2xlYW51cCA/IF9ybWRpclJlY3Vyc2l2ZVN5bmMgOiBmcy5ybWRpclN5bmMuYmluZChmcyk7XG4gIGNvbnN0IHJlbW92ZUNhbGxiYWNrID0gX3ByZXBhcmVSZW1vdmVDYWxsYmFjayhyZW1vdmVGdW5jdGlvbiwgbmFtZSk7XG5cbiAgaWYgKCFvcHRzLmtlZXApIHtcbiAgICBfcmVtb3ZlT2JqZWN0cy51bnNoaWZ0KHJlbW92ZUNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiByZW1vdmVDYWxsYmFjaztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZ3VhcmRlZCBmdW5jdGlvbiB3cmFwcGluZyB0aGUgcmVtb3ZlRnVuY3Rpb24gY2FsbC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZW1vdmVGdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGFyZ1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX3ByZXBhcmVSZW1vdmVDYWxsYmFjayhyZW1vdmVGdW5jdGlvbiwgYXJnKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcblxuICByZXR1cm4gZnVuY3Rpb24gX2NsZWFudXBDYWxsYmFjayhuZXh0KSB7XG4gICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gX3JlbW92ZU9iamVjdHMuaW5kZXhPZihfY2xlYW51cENhbGxiYWNrKTtcbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgIF9yZW1vdmVPYmplY3RzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG5cbiAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICByZW1vdmVGdW5jdGlvbihhcmcpO1xuICAgIH1cblxuICAgIGlmIChuZXh0KSBuZXh0KG51bGwpO1xuICB9O1xufVxuXG4vKipcbiAqIFRoZSBnYXJiYWdlIGNvbGxlY3Rvci5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfZ2FyYmFnZUNvbGxlY3RvcigpIHtcbiAgaWYgKF91bmNhdWdodEV4Y2VwdGlvbiAmJiAhX2dyYWNlZnVsQ2xlYW51cCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHRoZSBmdW5jdGlvbiBiZWluZyBjYWxsZWQgcmVtb3ZlcyBpdHNlbGYgZnJvbSBfcmVtb3ZlT2JqZWN0cyxcbiAgLy8gbG9vcCB1bnRpbCBfcmVtb3ZlT2JqZWN0cyBpcyBlbXB0eVxuICB3aGlsZSAoX3JlbW92ZU9iamVjdHMubGVuZ3RoKSB7XG4gICAgdHJ5IHtcbiAgICAgIF9yZW1vdmVPYmplY3RzWzBdLmNhbGwobnVsbCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gYWxyZWFkeSByZW1vdmVkP1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBmb3IgdGVzdGluZyBhZ2FpbnN0IEVCQURGIHRvIGNvbXBlbnNhdGUgY2hhbmdlcyBtYWRlIHRvIE5vZGUgNy54IHVuZGVyIFdpbmRvd3MuXG4gKi9cbmZ1bmN0aW9uIGlzRUJBREYoZXJyb3IpIHtcbiAgcmV0dXJuIGlzRXhwZWN0ZWRFcnJvcihlcnJvciwgLUVCQURGLCAnRUJBREYnKTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZm9yIHRlc3RpbmcgYWdhaW5zdCBFTk9FTlQgdG8gY29tcGVuc2F0ZSBjaGFuZ2VzIG1hZGUgdG8gTm9kZSA3LnggdW5kZXIgV2luZG93cy5cbiAqL1xuZnVuY3Rpb24gaXNFTk9FTlQoZXJyb3IpIHtcbiAgcmV0dXJuIGlzRXhwZWN0ZWRFcnJvcihlcnJvciwgLUVOT0VOVCwgJ0VOT0VOVCcpO1xufVxuXG4vKipcbiAqIEhlbHBlciB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZXhwZWN0ZWQgZXJyb3IgY29kZSBtYXRjaGVzIHRoZSBhY3R1YWwgY29kZSBhbmQgZXJybm8sXG4gKiB3aGljaCB3aWxsIGRpZmZlciBiZXR3ZWVuIHRoZSBzdXBwb3J0ZWQgbm9kZSB2ZXJzaW9ucy5cbiAqXG4gKiAtIE5vZGUgPj0gNy4wOlxuICogICBlcnJvci5jb2RlIHtTdHJpbmd9XG4gKiAgIGVycm9yLmVycm5vIHtTdHJpbmd8TnVtYmVyfSBhbnkgbnVtZXJpY2FsIHZhbHVlIHdpbGwgYmUgbmVnYXRlZFxuICpcbiAqIC0gTm9kZSA+PSA2LjAgPCA3LjA6XG4gKiAgIGVycm9yLmNvZGUge1N0cmluZ31cbiAqICAgZXJyb3IuZXJybm8ge051bWJlcn0gbmVnYXRlZFxuICpcbiAqIC0gTm9kZSA+PSA0LjAgPCA2LjA6IGludHJvZHVjZXMgU3lzdGVtRXJyb3JcbiAqICAgZXJyb3IuY29kZSB7U3RyaW5nfVxuICogICBlcnJvci5lcnJubyB7TnVtYmVyfSBuZWdhdGVkXG4gKlxuICogLSBOb2RlID49IDAuMTAgPCA0LjA6XG4gKiAgIGVycm9yLmNvZGUge051bWJlcn0gbmVnYXRlZFxuICogICBlcnJvci5lcnJubyBuL2FcbiAqL1xuZnVuY3Rpb24gaXNFeHBlY3RlZEVycm9yKGVycm9yLCBjb2RlLCBlcnJubykge1xuICByZXR1cm4gZXJyb3IuY29kZSA9PSBjb2RlIHx8IGVycm9yLmNvZGUgPT0gZXJybm87XG59XG5cbi8qKlxuICogU2V0cyB0aGUgZ3JhY2VmdWwgY2xlYW51cC5cbiAqXG4gKiBBbHNvIHJlbW92ZXMgdGhlIGNyZWF0ZWQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHdoZW4gYW4gdW5jYXVnaHQgZXhjZXB0aW9uIG9jY3Vycy5cbiAqL1xuZnVuY3Rpb24gc2V0R3JhY2VmdWxDbGVhbnVwKCkge1xuICBfZ3JhY2VmdWxDbGVhbnVwID0gdHJ1ZTtcbn1cblxuY29uc3QgdmVyc2lvbiA9IHByb2Nlc3MudmVyc2lvbnMubm9kZS5zcGxpdCgnLicpLm1hcChmdW5jdGlvbiAodmFsdWUpIHtcbiAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7XG59KTtcblxuaWYgKHZlcnNpb25bMF0gPT09IDAgJiYgKHZlcnNpb25bMV0gPCA5IHx8IHZlcnNpb25bMV0gPT09IDkgJiYgdmVyc2lvblsyXSA8IDUpKSB7XG4gIHByb2Nlc3MuYWRkTGlzdGVuZXIoJ3VuY2F1Z2h0RXhjZXB0aW9uJywgZnVuY3Rpb24gX3VuY2F1Z2h0RXhjZXB0aW9uVGhyb3duKGVycikge1xuICAgIF91bmNhdWdodEV4Y2VwdGlvbiA9IHRydWU7XG4gICAgX2dhcmJhZ2VDb2xsZWN0b3IoKTtcblxuICAgIHRocm93IGVycjtcbiAgfSk7XG59XG5cbnByb2Nlc3MuYWRkTGlzdGVuZXIoJ2V4aXQnLCBmdW5jdGlvbiBfZXhpdChjb2RlKSB7XG4gIGlmIChjb2RlKSBfdW5jYXVnaHRFeGNlcHRpb24gPSB0cnVlO1xuICBfZ2FyYmFnZUNvbGxlY3RvcigpO1xufSk7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gdHJpZXMgdGhlIG51bWJlciBvZiB0cmllcyBiZWZvcmUgZ2l2ZSB1cCB0aGUgbmFtZSBnZW5lcmF0aW9uXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHRlbXBsYXRlIHRoZSBcIm1rc3RlbXBcIiBsaWtlIGZpbGVuYW1lIHRlbXBsYXRlXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IG5hbWUgZml4IG5hbWVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZGlyIHRoZSB0bXAgZGlyZWN0b3J5IHRvIHVzZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBwcmVmaXggcHJlZml4IGZvciB0aGUgZ2VuZXJhdGVkIG5hbWVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcG9zdGZpeCBwb3N0Zml4IGZvciB0aGUgZ2VuZXJhdGVkIG5hbWVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEZpbGVTeW5jT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZmlsZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGZkIHRoZSBmaWxlIGRlc2NyaXB0b3JcbiAqIEBwcm9wZXJ0eSB7ZmlsZUNhbGxiYWNrfSByZW1vdmVDYWxsYmFjayB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcmVtb3ZlIHRoZSBmaWxlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEaXJTeW5jT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5XG4gKiBAcHJvcGVydHkge2ZpbGVDYWxsYmFja30gcmVtb3ZlQ2FsbGJhY2sgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHJlbW92ZSB0aGUgZGlyZWN0b3J5XG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgdG1wTmFtZUNhbGxiYWNrXG4gKiBAcGFyYW0gez9FcnJvcn0gZXJyIHRoZSBlcnJvciBvYmplY3QgaWYgYW55dGhpbmcgZ29lcyB3cm9uZ1xuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgdGhlIHRlbXBvcmFyeSBmaWxlIG5hbWVcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBmaWxlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7P0Vycm9yfSBlcnIgdGhlIGVycm9yIG9iamVjdCBpZiBhbnl0aGluZyBnb2VzIHdyb25nXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSB0aGUgdGVtcG9yYXJ5IGZpbGUgbmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGZkIHRoZSBmaWxlIGRlc2NyaXB0b3JcbiAqIEBwYXJhbSB7Y2xlYW51cENhbGxiYWNrfSBmbiB0aGUgY2xlYW51cCBjYWxsYmFjayBmdW5jdGlvblxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIGRpckNhbGxiYWNrXG4gKiBAcGFyYW0gez9FcnJvcn0gZXJyIHRoZSBlcnJvciBvYmplY3QgaWYgYW55dGhpbmcgZ29lcyB3cm9uZ1xuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgdGhlIHRlbXBvcmFyeSBmaWxlIG5hbWVcbiAqIEBwYXJhbSB7Y2xlYW51cENhbGxiYWNrfSBmbiB0aGUgY2xlYW51cCBjYWxsYmFjayBmdW5jdGlvblxuICovXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgdGVtcG9yYXJ5IGNyZWF0ZWQgZmlsZSBvciBkaXJlY3RvcnkuXG4gKlxuICogQGNhbGxiYWNrIGNsZWFudXBDYWxsYmFja1xuICogQHBhcmFtIHtzaW1wbGVDYWxsYmFja30gW25leHRdIGZ1bmN0aW9uIHRvIGNhbGwgYWZ0ZXIgZW50cnkgd2FzIHJlbW92ZWRcbiAqL1xuXG4vKipcbiAqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBmdW5jdGlvbiBjb21wb3NpdGlvbi5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9yYXN6aS9ub2RlLXRtcC9pc3N1ZXMvNTd8cmFzemkvbm9kZS10bXAjNTd9XG4gKlxuICogQGNhbGxiYWNrIHNpbXBsZUNhbGxiYWNrXG4gKi9cblxuLy8gZXhwb3J0aW5nIGFsbCB0aGUgbmVlZGVkIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzLnRtcGRpciA9IHRtcERpcjtcblxubW9kdWxlLmV4cG9ydHMuZGlyID0gZGlyO1xubW9kdWxlLmV4cG9ydHMuZGlyU3luYyA9IGRpclN5bmM7XG5cbm1vZHVsZS5leHBvcnRzLmZpbGUgPSBmaWxlO1xubW9kdWxlLmV4cG9ydHMuZmlsZVN5bmMgPSBmaWxlU3luYztcblxubW9kdWxlLmV4cG9ydHMudG1wTmFtZSA9IHRtcE5hbWU7XG5tb2R1bGUuZXhwb3J0cy50bXBOYW1lU3luYyA9IHRtcE5hbWVTeW5jO1xuXG5tb2R1bGUuZXhwb3J0cy5zZXRHcmFjZWZ1bENsZWFudXAgPSBzZXRHcmFjZWZ1bENsZWFudXA7XG4iLCJcInVzZSBzdHJpY3RcIjtcbi8qKipcbiAqIE5vZGUgRXh0ZXJuYWwgRWRpdG9yXG4gKlxuICogS2V2aW4gR3JhdmllciA8a2V2aW5AbXJrbWcuY29tPlxuICogTUlUIDIwMThcbiAqL1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgQ3JlYXRlRmlsZUVycm9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDcmVhdGVGaWxlRXJyb3IsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ3JlYXRlRmlsZUVycm9yKG9yaWdpbmFsRXJyb3IpIHtcbiAgICAgICAgdmFyIF9uZXdUYXJnZXQgPSB0aGlzLmNvbnN0cnVjdG9yO1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBcIkZhaWxlZCB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgZm9yIGVkaXRvclwiKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5vcmlnaW5hbEVycm9yID0gb3JpZ2luYWxFcnJvcjtcbiAgICAgICAgdmFyIHByb3RvID0gX25ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihfdGhpcywgcHJvdG8pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMuX19wcm90b19fID0gX25ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gQ3JlYXRlRmlsZUVycm9yO1xufShFcnJvcikpO1xuZXhwb3J0cy5DcmVhdGVGaWxlRXJyb3IgPSBDcmVhdGVGaWxlRXJyb3I7XG4iLCJcInVzZSBzdHJpY3RcIjtcbi8qKipcbiAqIE5vZGUgRXh0ZXJuYWwgRWRpdG9yXG4gKlxuICogS2V2aW4gR3JhdmllciA8a2V2aW5AbXJrbWcuY29tPlxuICogTUlUIDIwMThcbiAqL1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgTGF1bmNoRWRpdG9yRXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKExhdW5jaEVkaXRvckVycm9yLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIExhdW5jaEVkaXRvckVycm9yKG9yaWdpbmFsRXJyb3IpIHtcbiAgICAgICAgdmFyIF9uZXdUYXJnZXQgPSB0aGlzLmNvbnN0cnVjdG9yO1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBcIkZhaWxlZCBsYXVuY2ggZWRpdG9yXCIpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9yaWdpbmFsRXJyb3IgPSBvcmlnaW5hbEVycm9yO1xuICAgICAgICB2YXIgcHJvdG8gPSBfbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKF90aGlzLCBwcm90byk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5fX3Byb3RvX18gPSBfbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBMYXVuY2hFZGl0b3JFcnJvcjtcbn0oRXJyb3IpKTtcbmV4cG9ydHMuTGF1bmNoRWRpdG9yRXJyb3IgPSBMYXVuY2hFZGl0b3JFcnJvcjtcbiIsIlwidXNlIHN0cmljdFwiO1xuLyoqKlxuICogTm9kZSBFeHRlcm5hbCBFZGl0b3JcbiAqXG4gKiBLZXZpbiBHcmF2aWVyIDxrZXZpbkBtcmttZy5jb20+XG4gKiBNSVQgMjAxOFxuICovXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBSZWFkRmlsZUVycm9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhSZWFkRmlsZUVycm9yLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFJlYWRGaWxlRXJyb3Iob3JpZ2luYWxFcnJvcikge1xuICAgICAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIFwiRmFpbGVkIHRvIHJlYWQgdGVtcG9yYXJ5IGZpbGVcIikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub3JpZ2luYWxFcnJvciA9IG9yaWdpbmFsRXJyb3I7XG4gICAgICAgIHZhciBwcm90byA9IF9uZXdUYXJnZXQucHJvdG90eXBlO1xuICAgICAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoX3RoaXMsIHByb3RvKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLl9fcHJvdG9fXyA9IF9uZXdUYXJnZXQucHJvdG90eXBlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIFJlYWRGaWxlRXJyb3I7XG59KEVycm9yKSk7XG5leHBvcnRzLlJlYWRGaWxlRXJyb3IgPSBSZWFkRmlsZUVycm9yO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG4vKioqXG4gKiBOb2RlIEV4dGVybmFsIEVkaXRvclxuICpcbiAqIEtldmluIEdyYXZpZXIgPGtldmluQG1ya21nLmNvbT5cbiAqIE1JVCAyMDE4XG4gKi9cbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIFJlbW92ZUZpbGVFcnJvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUmVtb3ZlRmlsZUVycm9yLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFJlbW92ZUZpbGVFcnJvcihvcmlnaW5hbEVycm9yKSB7XG4gICAgICAgIHZhciBfbmV3VGFyZ2V0ID0gdGhpcy5jb25zdHJ1Y3RvcjtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgXCJGYWlsZWQgdG8gY2xlYW51cCB0ZW1wb3JhcnkgZmlsZVwiKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5vcmlnaW5hbEVycm9yID0gb3JpZ2luYWxFcnJvcjtcbiAgICAgICAgdmFyIHByb3RvID0gX25ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihfdGhpcywgcHJvdG8pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMuX19wcm90b19fID0gX25ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gUmVtb3ZlRmlsZUVycm9yO1xufShFcnJvcikpO1xuZXhwb3J0cy5SZW1vdmVGaWxlRXJyb3IgPSBSZW1vdmVGaWxlRXJyb3I7XG4iLCJcInVzZSBzdHJpY3RcIjtcbi8qKipcbiAqIE5vZGUgRXh0ZXJuYWwgRWRpdG9yXG4gKlxuICogS2V2aW4gR3JhdmllciA8a2V2aW5AbXJrbWcuY29tPlxuICogTUlUIDIwMTlcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNoYXJkZXRfMSA9IHJlcXVpcmUoXCJjaGFyZGV0XCIpO1xudmFyIGNoaWxkX3Byb2Nlc3NfMSA9IHJlcXVpcmUoXCJjaGlsZF9wcm9jZXNzXCIpO1xudmFyIGZzXzEgPSByZXF1aXJlKFwiZnNcIik7XG52YXIgaWNvbnZfbGl0ZV8xID0gcmVxdWlyZShcImljb252LWxpdGVcIik7XG52YXIgdG1wXzEgPSByZXF1aXJlKFwidG1wXCIpO1xudmFyIENyZWF0ZUZpbGVFcnJvcl8xID0gcmVxdWlyZShcIi4vZXJyb3JzL0NyZWF0ZUZpbGVFcnJvclwiKTtcbmV4cG9ydHMuQ3JlYXRlRmlsZUVycm9yID0gQ3JlYXRlRmlsZUVycm9yXzEuQ3JlYXRlRmlsZUVycm9yO1xudmFyIExhdW5jaEVkaXRvckVycm9yXzEgPSByZXF1aXJlKFwiLi9lcnJvcnMvTGF1bmNoRWRpdG9yRXJyb3JcIik7XG5leHBvcnRzLkxhdW5jaEVkaXRvckVycm9yID0gTGF1bmNoRWRpdG9yRXJyb3JfMS5MYXVuY2hFZGl0b3JFcnJvcjtcbnZhciBSZWFkRmlsZUVycm9yXzEgPSByZXF1aXJlKFwiLi9lcnJvcnMvUmVhZEZpbGVFcnJvclwiKTtcbmV4cG9ydHMuUmVhZEZpbGVFcnJvciA9IFJlYWRGaWxlRXJyb3JfMS5SZWFkRmlsZUVycm9yO1xudmFyIFJlbW92ZUZpbGVFcnJvcl8xID0gcmVxdWlyZShcIi4vZXJyb3JzL1JlbW92ZUZpbGVFcnJvclwiKTtcbmV4cG9ydHMuUmVtb3ZlRmlsZUVycm9yID0gUmVtb3ZlRmlsZUVycm9yXzEuUmVtb3ZlRmlsZUVycm9yO1xuZnVuY3Rpb24gZWRpdCh0ZXh0LCBmaWxlT3B0aW9ucykge1xuICAgIGlmICh0ZXh0ID09PSB2b2lkIDApIHsgdGV4dCA9IFwiXCI7IH1cbiAgICB2YXIgZWRpdG9yID0gbmV3IEV4dGVybmFsRWRpdG9yKHRleHQsIGZpbGVPcHRpb25zKTtcbiAgICBlZGl0b3IucnVuKCk7XG4gICAgZWRpdG9yLmNsZWFudXAoKTtcbiAgICByZXR1cm4gZWRpdG9yLnRleHQ7XG59XG5leHBvcnRzLmVkaXQgPSBlZGl0O1xuZnVuY3Rpb24gZWRpdEFzeW5jKHRleHQsIGNhbGxiYWNrLCBmaWxlT3B0aW9ucykge1xuICAgIGlmICh0ZXh0ID09PSB2b2lkIDApIHsgdGV4dCA9IFwiXCI7IH1cbiAgICB2YXIgZWRpdG9yID0gbmV3IEV4dGVybmFsRWRpdG9yKHRleHQsIGZpbGVPcHRpb25zKTtcbiAgICBlZGl0b3IucnVuQXN5bmMoZnVuY3Rpb24gKGVyciwgcmVzdWx0KSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHNldEltbWVkaWF0ZShjYWxsYmFjaywgZXJyLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZWRpdG9yLmNsZWFudXAoKTtcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoY2FsbGJhY2ssIG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoY2xlYW51cEVycm9yKSB7XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGNhbGxiYWNrLCBjbGVhbnVwRXJyb3IsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLmVkaXRBc3luYyA9IGVkaXRBc3luYztcbnZhciBFeHRlcm5hbEVkaXRvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBFeHRlcm5hbEVkaXRvcih0ZXh0LCBmaWxlT3B0aW9ucykge1xuICAgICAgICBpZiAodGV4dCA9PT0gdm9pZCAwKSB7IHRleHQgPSBcIlwiOyB9XG4gICAgICAgIHRoaXMudGV4dCA9IFwiXCI7XG4gICAgICAgIHRoaXMuZmlsZU9wdGlvbnMgPSB7fTtcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICAgICAgaWYgKGZpbGVPcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVPcHRpb25zID0gZmlsZU9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXRlcm1pbmVFZGl0b3IoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVUZW1wb3JhcnlGaWxlKCk7XG4gICAgfVxuICAgIEV4dGVybmFsRWRpdG9yLnNwbGl0U3RyaW5nQnlTcGFjZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgdmFyIHBpZWNlcyA9IFtdO1xuICAgICAgICB2YXIgY3VycmVudFN0cmluZyA9IFwiXCI7XG4gICAgICAgIGZvciAodmFyIHN0ckluZGV4ID0gMDsgc3RySW5kZXggPCBzdHIubGVuZ3RoOyBzdHJJbmRleCsrKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudExldHRlciA9IHN0cltzdHJJbmRleF07XG4gICAgICAgICAgICBpZiAoc3RySW5kZXggPiAwICYmIGN1cnJlbnRMZXR0ZXIgPT09IFwiIFwiICYmIHN0cltzdHJJbmRleCAtIDFdICE9PSBcIlxcXFxcIiAmJiBjdXJyZW50U3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwaWVjZXMucHVzaChjdXJyZW50U3RyaW5nKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50U3RyaW5nID0gXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRTdHJpbmcgKz0gY3VycmVudExldHRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwaWVjZXMucHVzaChjdXJyZW50U3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGllY2VzO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV4dGVybmFsRWRpdG9yLnByb3RvdHlwZSwgXCJ0ZW1wX2ZpbGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiREVQUkVDQVRFRDogdGVtcF9maWxlLiBVc2UgdGVtcEZpbGUgbW92aW5nIGZvcndhcmQuXCIpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGVtcEZpbGU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFeHRlcm5hbEVkaXRvci5wcm90b3R5cGUsIFwibGFzdF9leGl0X3N0YXR1c1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJERVBSRUNBVEVEOiBsYXN0X2V4aXRfc3RhdHVzLiBVc2UgbGFzdEV4aXRTdGF0dXMgbW92aW5nIGZvcndhcmQuXCIpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGFzdEV4aXRTdGF0dXM7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEV4dGVybmFsRWRpdG9yLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubGF1bmNoRWRpdG9yKCk7XG4gICAgICAgIHRoaXMucmVhZFRlbXBvcmFyeUZpbGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dDtcbiAgICB9O1xuICAgIEV4dGVybmFsRWRpdG9yLnByb3RvdHlwZS5ydW5Bc3luYyA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5sYXVuY2hFZGl0b3JBc3luYyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMucmVhZFRlbXBvcmFyeUZpbGUoKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGNhbGxiYWNrLCBudWxsLCBfdGhpcy50ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKHJlYWRFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoY2FsbGJhY2ssIHJlYWRFcnJvciwgbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGxhdW5jaEVycm9yKSB7XG4gICAgICAgICAgICBzZXRJbW1lZGlhdGUoY2FsbGJhY2ssIGxhdW5jaEVycm9yLCBudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRXh0ZXJuYWxFZGl0b3IucHJvdG90eXBlLmNsZWFudXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlVGVtcG9yYXJ5RmlsZSgpO1xuICAgIH07XG4gICAgRXh0ZXJuYWxFZGl0b3IucHJvdG90eXBlLmRldGVybWluZUVkaXRvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVkaXRvciA9IHByb2Nlc3MuZW52LlZJU1VBTCA/IHByb2Nlc3MuZW52LlZJU1VBTCA6XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5FRElUT1IgPyBwcm9jZXNzLmVudi5FRElUT1IgOlxuICAgICAgICAgICAgICAgIC9ed2luLy50ZXN0KHByb2Nlc3MucGxhdGZvcm0pID8gXCJub3RlcGFkXCIgOlxuICAgICAgICAgICAgICAgICAgICBcInZpbVwiO1xuICAgICAgICB2YXIgZWRpdG9yT3B0cyA9IEV4dGVybmFsRWRpdG9yLnNwbGl0U3RyaW5nQnlTcGFjZShlZGl0b3IpLm1hcChmdW5jdGlvbiAocGllY2UpIHsgcmV0dXJuIHBpZWNlLnJlcGxhY2UoXCJcXFxcIFwiLCBcIiBcIik7IH0pO1xuICAgICAgICB2YXIgYmluID0gZWRpdG9yT3B0cy5zaGlmdCgpO1xuICAgICAgICB0aGlzLmVkaXRvciA9IHsgYXJnczogZWRpdG9yT3B0cywgYmluOiBiaW4gfTtcbiAgICB9O1xuICAgIEV4dGVybmFsRWRpdG9yLnByb3RvdHlwZS5jcmVhdGVUZW1wb3JhcnlGaWxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy50ZW1wRmlsZSA9IHRtcF8xLnRtcE5hbWVTeW5jKHRoaXMuZmlsZU9wdGlvbnMpO1xuICAgICAgICAgICAgdmFyIG9wdCA9IHsgZW5jb2Rpbmc6IFwidXRmOFwiIH07XG4gICAgICAgICAgICBpZiAodGhpcy5maWxlT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShcIm1vZGVcIikpIHtcbiAgICAgICAgICAgICAgICBvcHQubW9kZSA9IHRoaXMuZmlsZU9wdGlvbnMubW9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZzXzEud3JpdGVGaWxlU3luYyh0aGlzLnRlbXBGaWxlLCB0aGlzLnRleHQsIG9wdCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGNyZWF0ZUZpbGVFcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENyZWF0ZUZpbGVFcnJvcl8xLkNyZWF0ZUZpbGVFcnJvcihjcmVhdGVGaWxlRXJyb3IpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBFeHRlcm5hbEVkaXRvci5wcm90b3R5cGUucmVhZFRlbXBvcmFyeUZpbGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgdGVtcEZpbGVCdWZmZXIgPSBmc18xLnJlYWRGaWxlU3luYyh0aGlzLnRlbXBGaWxlKTtcbiAgICAgICAgICAgIGlmICh0ZW1wRmlsZUJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHQgPSBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGVuY29kaW5nID0gY2hhcmRldF8xLmRldGVjdCh0ZW1wRmlsZUJ1ZmZlcikudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWljb252X2xpdGVfMS5lbmNvZGluZ0V4aXN0cyhlbmNvZGluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUHJvYmFibHkgYSBiYWQgaWRlYSwgYnV0IHdpbGwgYXQgbGVhc3QgcHJldmVudCBjcmFzaGluZ1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZyA9IFwidXRmOFwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRleHQgPSBpY29udl9saXRlXzEuZGVjb2RlKHRlbXBGaWxlQnVmZmVyLCBlbmNvZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKHJlYWRGaWxlRXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSZWFkRmlsZUVycm9yXzEuUmVhZEZpbGVFcnJvcihyZWFkRmlsZUVycm9yKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRXh0ZXJuYWxFZGl0b3IucHJvdG90eXBlLnJlbW92ZVRlbXBvcmFyeUZpbGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmc18xLnVubGlua1N5bmModGhpcy50ZW1wRmlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKHJlbW92ZUZpbGVFcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJlbW92ZUZpbGVFcnJvcl8xLlJlbW92ZUZpbGVFcnJvcihyZW1vdmVGaWxlRXJyb3IpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBFeHRlcm5hbEVkaXRvci5wcm90b3R5cGUubGF1bmNoRWRpdG9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGVkaXRvclByb2Nlc3MgPSBjaGlsZF9wcm9jZXNzXzEuc3Bhd25TeW5jKHRoaXMuZWRpdG9yLmJpbiwgdGhpcy5lZGl0b3IuYXJncy5jb25jYXQoW3RoaXMudGVtcEZpbGVdKSwgeyBzdGRpbzogXCJpbmhlcml0XCIgfSk7XG4gICAgICAgICAgICB0aGlzLmxhc3RFeGl0U3RhdHVzID0gZWRpdG9yUHJvY2Vzcy5zdGF0dXM7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGxhdW5jaEVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTGF1bmNoRWRpdG9yRXJyb3JfMS5MYXVuY2hFZGl0b3JFcnJvcihsYXVuY2hFcnJvcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEV4dGVybmFsRWRpdG9yLnByb3RvdHlwZS5sYXVuY2hFZGl0b3JBc3luYyA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGVkaXRvclByb2Nlc3MgPSBjaGlsZF9wcm9jZXNzXzEuc3Bhd24odGhpcy5lZGl0b3IuYmluLCB0aGlzLmVkaXRvci5hcmdzLmNvbmNhdChbdGhpcy50ZW1wRmlsZV0pLCB7IHN0ZGlvOiBcImluaGVyaXRcIiB9KTtcbiAgICAgICAgICAgIGVkaXRvclByb2Nlc3Mub24oXCJleGl0XCIsIGZ1bmN0aW9uIChjb2RlKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMubGFzdEV4aXRTdGF0dXMgPSBjb2RlO1xuICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZShjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAobGF1bmNoRXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBMYXVuY2hFZGl0b3JFcnJvcl8xLkxhdW5jaEVkaXRvckVycm9yKGxhdW5jaEVycm9yKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEV4dGVybmFsRWRpdG9yO1xufSgpKTtcbmV4cG9ydHMuRXh0ZXJuYWxFZGl0b3IgPSBFeHRlcm5hbEVkaXRvcjtcbiIsIi8qKlxuICogYGVkaXRvcmAgdHlwZSBwcm9tcHRcbiAqL1xuXG5pbXBvcnQgY29sb3JzIGZyb20gJ3lvY3RvY29sb3JzLWNqcyc7XG5pbXBvcnQgeyBlZGl0QXN5bmMgfSBmcm9tICdleHRlcm5hbC1lZGl0b3InO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IG9ic2VydmUgZnJvbSAnLi4vdXRpbHMvZXZlbnRzLmpzJztcbmltcG9ydCBCYXNlIGZyb20gJy4vYmFzZS5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXRvclByb21wdCBleHRlbmRzIEJhc2Uge1xuICAvKipcbiAgICogU3RhcnQgdGhlIElucXVpcnkgc2Vzc2lvblxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2IgICAgICBDYWxsYmFjayB3aGVuIHByb21wdCBpcyBkb25lXG4gICAqIEByZXR1cm4ge3RoaXN9XG4gICAqL1xuXG4gIF9ydW4oY2IpIHtcbiAgICB0aGlzLmRvbmUgPSBjYjtcblxuICAgIHRoaXMuZWRpdG9yUmVzdWx0ID0gbmV3IFN1YmplY3QoKTtcblxuICAgIC8vIE9wZW4gRWRpdG9yIG9uIFwibGluZVwiIChFbnRlciBLZXkpXG4gICAgY29uc3QgZXZlbnRzID0gb2JzZXJ2ZSh0aGlzLnJsKTtcbiAgICB0aGlzLmxpbmVTdWJzY3JpcHRpb24gPSBldmVudHMubGluZS5zdWJzY3JpYmUodGhpcy5zdGFydEV4dGVybmFsRWRpdG9yLmJpbmQodGhpcykpO1xuICAgIGNvbnN0IHdhaXRVc2VySW5wdXQgPVxuICAgICAgdGhpcy5vcHQud2FpdFVzZXJJbnB1dCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHRoaXMub3B0LndhaXRVc2VySW5wdXQ7XG5cbiAgICAvLyBUcmlnZ2VyIFZhbGlkYXRpb24gd2hlbiBlZGl0b3IgY2xvc2VzXG4gICAgY29uc3QgdmFsaWRhdGlvbiA9IHRoaXMuaGFuZGxlU3VibWl0RXZlbnRzKHRoaXMuZWRpdG9yUmVzdWx0KTtcbiAgICB2YWxpZGF0aW9uLnN1Y2Nlc3MuZm9yRWFjaCh0aGlzLm9uRW5kLmJpbmQodGhpcykpO1xuICAgIHZhbGlkYXRpb24uZXJyb3IuZm9yRWFjaCh0aGlzLm9uRXJyb3IuYmluZCh0aGlzKSk7XG5cbiAgICAvLyBQcmV2ZW50cyBkZWZhdWx0IGZyb20gYmVpbmcgcHJpbnRlZCBvbiBzY3JlZW4gKGNhbiBsb29rIHdlaXJkIHdpdGggbXVsdGlwbGUgbGluZXMpXG4gICAgdGhpcy5jdXJyZW50VGV4dCA9IHRoaXMub3B0LmRlZmF1bHQ7XG4gICAgdGhpcy5vcHQuZGVmYXVsdCA9IG51bGw7XG5cbiAgICAvLyBJbml0XG4gICAgaWYgKHdhaXRVc2VySW5wdXQpIHtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhcnRFeHRlcm5hbEVkaXRvcigpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgcHJvbXB0IHRvIHNjcmVlblxuICAgKiBAcmV0dXJuIHtFZGl0b3JQcm9tcHR9IHNlbGZcbiAgICovXG5cbiAgcmVuZGVyKGVycm9yKSB7XG4gICAgbGV0IGJvdHRvbUNvbnRlbnQgPSAnJztcbiAgICBsZXQgbWVzc2FnZSA9IHRoaXMuZ2V0UXVlc3Rpb24oKTtcblxuICAgIG1lc3NhZ2UgKz1cbiAgICAgIHRoaXMuc3RhdHVzID09PSAnYW5zd2VyZWQnXG4gICAgICAgID8gY29sb3JzLmRpbSgnUmVjZWl2ZWQnKVxuICAgICAgICA6IGNvbG9ycy5kaW0oJ1ByZXNzIDxlbnRlcj4gdG8gbGF1bmNoIHlvdXIgcHJlZmVycmVkIGVkaXRvci4nKTtcblxuICAgIGlmIChlcnJvcikge1xuICAgICAgYm90dG9tQ29udGVudCA9IGNvbG9ycy5yZWQoJz4+ICcpICsgZXJyb3I7XG4gICAgfVxuXG4gICAgdGhpcy5zY3JlZW4ucmVuZGVyKG1lc3NhZ2UsIGJvdHRvbUNvbnRlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIExhdW5jaCAkRURJVE9SIG9uIHVzZXIgcHJlc3MgZW50ZXJcbiAgICovXG5cbiAgc3RhcnRFeHRlcm5hbEVkaXRvcigpIHtcbiAgICAvLyBQYXVzZSBSZWFkbGluZSB0byBwcmV2ZW50IHN0ZGluIGFuZCBzdGRvdXQgZnJvbSBiZWluZyBtb2RpZmllZCB3aGlsZSB0aGUgZWRpdG9yIGlzIHNob3dpbmdcbiAgICB0aGlzLnJsLnBhdXNlKCk7XG4gICAgZWRpdEFzeW5jKHRoaXMuY3VycmVudFRleHQsIHRoaXMuZW5kRXh0ZXJuYWxFZGl0b3IuYmluZCh0aGlzKSwge1xuICAgICAgcG9zdGZpeDogdGhpcy5vcHQucG9zdGZpeCA/PyAnLnR4dCcsXG4gICAgfSk7XG4gIH1cblxuICBlbmRFeHRlcm5hbEVkaXRvcihlcnJvciwgcmVzdWx0KSB7XG4gICAgdGhpcy5ybC5yZXN1bWUoKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHRoaXMuZWRpdG9yUmVzdWx0LmVycm9yKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lZGl0b3JSZXN1bHQubmV4dChyZXN1bHQpO1xuICAgIH1cbiAgfVxuXG4gIG9uRW5kKHN0YXRlKSB7XG4gICAgdGhpcy5lZGl0b3JSZXN1bHQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmxpbmVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmFuc3dlciA9IHN0YXRlLnZhbHVlO1xuICAgIHRoaXMuc3RhdHVzID0gJ2Fuc3dlcmVkJztcbiAgICAvLyBSZS1yZW5kZXIgcHJvbXB0XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLnNjcmVlbi5kb25lKCk7XG4gICAgdGhpcy5kb25lKHRoaXMuYW5zd2VyKTtcbiAgfVxuXG4gIG9uRXJyb3Ioc3RhdGUpIHtcbiAgICB0aGlzLnJlbmRlcihzdGF0ZS5pc1ZhbGlkKTtcbiAgfVxufVxuIiwidmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5cbm1vZHVsZS5leHBvcnRzID0gTXV0ZVN0cmVhbVxuXG4vLyB2YXIgb3V0ID0gbmV3IE11dGVTdHJlYW0ocHJvY2Vzcy5zdGRvdXQpXG4vLyBhcmd1bWVudCBhdXRvLXBpcGVzXG5mdW5jdGlvbiBNdXRlU3RyZWFtIChvcHRzKSB7XG4gIFN0cmVhbS5hcHBseSh0aGlzKVxuICBvcHRzID0gb3B0cyB8fCB7fVxuICB0aGlzLndyaXRhYmxlID0gdGhpcy5yZWFkYWJsZSA9IHRydWVcbiAgdGhpcy5tdXRlZCA9IGZhbHNlXG4gIHRoaXMub24oJ3BpcGUnLCB0aGlzLl9vbnBpcGUpXG4gIHRoaXMucmVwbGFjZSA9IG9wdHMucmVwbGFjZVxuXG4gIC8vIEZvciByZWFkbGluZS10eXBlIHNpdHVhdGlvbnNcbiAgLy8gVGhpcyBtdWNoIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUgYmVpbmcgcmVkcmF3biBhZnRlciBhIGN0cmwgY2hhclxuICAvLyBpcyBzZWVuIChzdWNoIGFzIGJhY2tzcGFjZSkgd29uJ3QgYmUgcmVkcmF3biBhcyB0aGUgcmVwbGFjZW1lbnRcbiAgdGhpcy5fcHJvbXB0ID0gb3B0cy5wcm9tcHQgfHwgbnVsbFxuICB0aGlzLl9oYWRDb250cm9sID0gZmFsc2Vcbn1cblxuTXV0ZVN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN0cmVhbS5wcm90b3R5cGUpXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNdXRlU3RyZWFtLnByb3RvdHlwZSwgJ2NvbnN0cnVjdG9yJywge1xuICB2YWx1ZTogTXV0ZVN0cmVhbSxcbiAgZW51bWVyYWJsZTogZmFsc2Vcbn0pXG5cbk11dGVTdHJlYW0ucHJvdG90eXBlLm11dGUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMubXV0ZWQgPSB0cnVlXG59XG5cbk11dGVTdHJlYW0ucHJvdG90eXBlLnVubXV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5tdXRlZCA9IGZhbHNlXG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNdXRlU3RyZWFtLnByb3RvdHlwZSwgJ19vbnBpcGUnLCB7XG4gIHZhbHVlOiBvblBpcGUsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICB3cml0YWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KVxuXG5mdW5jdGlvbiBvblBpcGUgKHNyYykge1xuICB0aGlzLl9zcmMgPSBzcmNcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE11dGVTdHJlYW0ucHJvdG90eXBlLCAnaXNUVFknLCB7XG4gIGdldDogZ2V0SXNUVFksXG4gIHNldDogc2V0SXNUVFksXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSlcblxuZnVuY3Rpb24gZ2V0SXNUVFkgKCkge1xuICByZXR1cm4oICh0aGlzLl9kZXN0KSA/IHRoaXMuX2Rlc3QuaXNUVFlcbiAgICAgICAgOiAodGhpcy5fc3JjKSA/IHRoaXMuX3NyYy5pc1RUWVxuICAgICAgICA6IGZhbHNlXG4gICAgICAgIClcbn1cblxuLy8gYmFzaWNhbGx5IGp1c3QgZ2V0IHJlcGxhY2UgdGhlIGdldHRlci9zZXR0ZXIgd2l0aCBhIHJlZ3VsYXIgdmFsdWVcbmZ1bmN0aW9uIHNldElzVFRZIChpc1RUWSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2lzVFRZJywge1xuICAgIHZhbHVlOiBpc1RUWSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTXV0ZVN0cmVhbS5wcm90b3R5cGUsICdyb3dzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4oIHRoaXMuX2Rlc3QgPyB0aGlzLl9kZXN0LnJvd3NcbiAgICAgICAgICA6IHRoaXMuX3NyYyA/IHRoaXMuX3NyYy5yb3dzXG4gICAgICAgICAgOiB1bmRlZmluZWQgKVxuICB9LCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE11dGVTdHJlYW0ucHJvdG90eXBlLCAnY29sdW1ucycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuKCB0aGlzLl9kZXN0ID8gdGhpcy5fZGVzdC5jb2x1bW5zXG4gICAgICAgICAgOiB0aGlzLl9zcmMgPyB0aGlzLl9zcmMuY29sdW1uc1xuICAgICAgICAgIDogdW5kZWZpbmVkIClcbiAgfSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pXG5cblxuTXV0ZVN0cmVhbS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uIChkZXN0LCBvcHRpb25zKSB7XG4gIHRoaXMuX2Rlc3QgPSBkZXN0XG4gIHJldHVybiBTdHJlYW0ucHJvdG90eXBlLnBpcGUuY2FsbCh0aGlzLCBkZXN0LCBvcHRpb25zKVxufVxuXG5NdXRlU3RyZWFtLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuX3NyYykgcmV0dXJuIHRoaXMuX3NyYy5wYXVzZSgpXG59XG5cbk11dGVTdHJlYW0ucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuX3NyYykgcmV0dXJuIHRoaXMuX3NyYy5yZXN1bWUoKVxufVxuXG5NdXRlU3RyZWFtLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChjKSB7XG4gIGlmICh0aGlzLm11dGVkKSB7XG4gICAgaWYgKCF0aGlzLnJlcGxhY2UpIHJldHVybiB0cnVlXG4gICAgaWYgKGMubWF0Y2goL15cXHUwMDFiLykpIHtcbiAgICAgIGlmKGMuaW5kZXhPZih0aGlzLl9wcm9tcHQpID09PSAwKSB7XG4gICAgICAgIGMgPSBjLnN1YnN0cih0aGlzLl9wcm9tcHQubGVuZ3RoKTtcbiAgICAgICAgYyA9IGMucmVwbGFjZSgvLi9nLCB0aGlzLnJlcGxhY2UpO1xuICAgICAgICBjID0gdGhpcy5fcHJvbXB0ICsgYztcbiAgICAgIH1cbiAgICAgIHRoaXMuX2hhZENvbnRyb2wgPSB0cnVlXG4gICAgICByZXR1cm4gdGhpcy5lbWl0KCdkYXRhJywgYylcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuX3Byb21wdCAmJiB0aGlzLl9oYWRDb250cm9sICYmXG4gICAgICAgICAgYy5pbmRleE9mKHRoaXMuX3Byb21wdCkgPT09IDApIHtcbiAgICAgICAgdGhpcy5faGFkQ29udHJvbCA9IGZhbHNlXG4gICAgICAgIHRoaXMuZW1pdCgnZGF0YScsIHRoaXMuX3Byb21wdClcbiAgICAgICAgYyA9IGMuc3Vic3RyKHRoaXMuX3Byb21wdC5sZW5ndGgpXG4gICAgICB9XG4gICAgICBjID0gYy50b1N0cmluZygpLnJlcGxhY2UoLy4vZywgdGhpcy5yZXBsYWNlKVxuICAgIH1cbiAgfVxuICB0aGlzLmVtaXQoJ2RhdGEnLCBjKVxufVxuXG5NdXRlU3RyZWFtLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoYykge1xuICBpZiAodGhpcy5tdXRlZCkge1xuICAgIGlmIChjICYmIHRoaXMucmVwbGFjZSkge1xuICAgICAgYyA9IGMudG9TdHJpbmcoKS5yZXBsYWNlKC8uL2csIHRoaXMucmVwbGFjZSlcbiAgICB9IGVsc2Uge1xuICAgICAgYyA9IG51bGxcbiAgICB9XG4gIH1cbiAgaWYgKGMpIHRoaXMuZW1pdCgnZGF0YScsIGMpXG4gIHRoaXMuZW1pdCgnZW5kJylcbn1cblxuZnVuY3Rpb24gcHJveHkgKGZuKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7XG4gIHZhciBkID0gdGhpcy5fZGVzdFxuICB2YXIgcyA9IHRoaXMuX3NyY1xuICBpZiAoZCAmJiBkW2ZuXSkgZFtmbl0uYXBwbHkoZCwgYXJndW1lbnRzKVxuICBpZiAocyAmJiBzW2ZuXSkgc1tmbl0uYXBwbHkocywgYXJndW1lbnRzKVxufX1cblxuTXV0ZVN0cmVhbS5wcm90b3R5cGUuZGVzdHJveSA9IHByb3h5KCdkZXN0cm95Jylcbk11dGVTdHJlYW0ucHJvdG90eXBlLmRlc3Ryb3lTb29uID0gcHJveHkoJ2Rlc3Ryb3lTb29uJylcbk11dGVTdHJlYW0ucHJvdG90eXBlLmNsb3NlID0gcHJveHkoJ2Nsb3NlJylcbiIsImltcG9ydCByZWFkbGluZSBmcm9tICdub2RlOnJlYWRsaW5lJztcbmltcG9ydCBNdXRlU3RyZWFtIGZyb20gJ211dGUtc3RyZWFtJztcblxuLyoqXG4gKiBCYXNlIGludGVyZmFjZSBjbGFzcyBvdGhlciBjYW4gaW5oZXJpdHMgZnJvbVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVJIHtcbiAgY29uc3RydWN0b3Iob3B0KSB7XG4gICAgLy8gSW5zdGFudGlhdGUgdGhlIFJlYWRsaW5lIGludGVyZmFjZVxuICAgIC8vIEBOb3RlOiBEb24ndCByZWFzc2lnbiBpZiBhbHJlYWR5IHByZXNlbnQgKGFsbG93IHRlc3QgdG8gb3ZlcnJpZGUgdGhlIFN0cmVhbSlcbiAgICB0aGlzLnJsIHx8PSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoc2V0dXBSZWFkbGluZU9wdGlvbnMob3B0KSk7XG5cbiAgICB0aGlzLnJsLnJlc3VtZSgpO1xuXG4gICAgdGhpcy5vbkZvcmNlQ2xvc2UgPSB0aGlzLm9uRm9yY2VDbG9zZS5iaW5kKHRoaXMpO1xuXG4gICAgLy8gTWFrZSBzdXJlIG5ldyBwcm9tcHQgc3RhcnQgb24gYSBuZXdsaW5lIHdoZW4gY2xvc2luZ1xuICAgIHByb2Nlc3Mub24oJ2V4aXQnLCB0aGlzLm9uRm9yY2VDbG9zZSk7XG5cbiAgICAvLyBUZXJtaW5hdGUgcHJvY2VzcyBvbiBTSUdJTlQgKHdoaWNoIHdpbGwgY2FsbCBwcm9jZXNzLm9uKCdleGl0JykgaW4gcmV0dXJuKVxuICAgIHRoaXMucmwub24oJ1NJR0lOVCcsIHRoaXMub25Gb3JjZUNsb3NlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgdGhlIF5DIGV4aXRcbiAgICogQHJldHVybiB7bnVsbH1cbiAgICovXG5cbiAgb25Gb3JjZUNsb3NlKCkge1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICBwcm9jZXNzLmtpbGwocHJvY2Vzcy5waWQsICdTSUdJTlQnKTtcbiAgICBjb25zb2xlLmxvZygnJyk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgdGhlIGludGVyZmFjZSBhbmQgY2xlYW51cCBsaXN0ZW5lcnNcbiAgICovXG5cbiAgY2xvc2UoKSB7XG4gICAgLy8gUmVtb3ZlIGV2ZW50cyBsaXN0ZW5lcnNcbiAgICB0aGlzLnJsLnJlbW92ZUxpc3RlbmVyKCdTSUdJTlQnLCB0aGlzLm9uRm9yY2VDbG9zZSk7XG4gICAgcHJvY2Vzcy5yZW1vdmVMaXN0ZW5lcignZXhpdCcsIHRoaXMub25Gb3JjZUNsb3NlKTtcblxuICAgIHRoaXMucmwub3V0cHV0LnVubXV0ZSgpO1xuXG4gICAgaWYgKHRoaXMuYWN0aXZlUHJvbXB0ICYmIHR5cGVvZiB0aGlzLmFjdGl2ZVByb21wdC5jbG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5hY3RpdmVQcm9tcHQuY2xvc2UoKTtcbiAgICB9XG5cbiAgICAvLyBDbG9zZSB0aGUgcmVhZGxpbmVcbiAgICB0aGlzLnJsLm91dHB1dC5lbmQoKTtcbiAgICB0aGlzLnJsLnBhdXNlKCk7XG4gICAgdGhpcy5ybC5jbG9zZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldHVwUmVhZGxpbmVPcHRpb25zKG9wdCA9IHt9KSB7XG4gIC8vIElucXVpcmVyIDgueDpcbiAgLy8gb3B0LnNraXBUVFlDaGVja3MgPSBvcHQuc2tpcFRUWUNoZWNrcyA9PT0gdW5kZWZpbmVkID8gb3B0LmlucHV0ICE9PSB1bmRlZmluZWQgOiBvcHQuc2tpcFRUWUNoZWNrcztcbiAgb3B0LnNraXBUVFlDaGVja3MgPSBvcHQuc2tpcFRUWUNoZWNrcyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdC5za2lwVFRZQ2hlY2tzO1xuXG4gIC8vIERlZmF1bHQgYGlucHV0YCB0byBzdGRpblxuICBjb25zdCBpbnB1dCA9IG9wdC5pbnB1dCB8fCBwcm9jZXNzLnN0ZGluO1xuXG4gIC8vIENoZWNrIGlmIHByb21wdCBpcyBiZWluZyBjYWxsZWQgaW4gVFRZIGVudmlyb25tZW50XG4gIC8vIElmIGl0IGlzbid0IHJldHVybiBhIGZhaWxlZCBwcm9taXNlXG4gIGlmICghb3B0LnNraXBUVFlDaGVja3MgJiYgIWlucHV0LmlzVFRZKSB7XG4gICAgY29uc3Qgbm9uVHR5RXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAnUHJvbXB0cyBjYW4gbm90IGJlIG1lYW5pbmdmdWxseSByZW5kZXJlZCBpbiBub24tVFRZIGVudmlyb25tZW50cycsXG4gICAgKTtcbiAgICBub25UdHlFcnJvci5pc1R0eUVycm9yID0gdHJ1ZTtcbiAgICB0aHJvdyBub25UdHlFcnJvcjtcbiAgfVxuXG4gIC8vIEFkZCBtdXRlIGNhcGFiaWxpdGllcyB0byB0aGUgb3V0cHV0XG4gIGNvbnN0IG1zID0gbmV3IE11dGVTdHJlYW0oKTtcbiAgbXMucGlwZShvcHQub3V0cHV0IHx8IHByb2Nlc3Muc3Rkb3V0KTtcbiAgY29uc3Qgb3V0cHV0ID0gbXM7XG5cbiAgcmV0dXJuIHtcbiAgICB0ZXJtaW5hbDogdHJ1ZSxcbiAgICAuLi5vcHQsXG4gICAgaW5wdXQsXG4gICAgb3V0cHV0LFxuICB9O1xufVxuIiwiLyoqXG4gKiBTdGlja3kgYm90dG9tIGJhciB1c2VyIGludGVyZmFjZVxuICovXG5cbmltcG9ydCB7IFdyaXRhYmxlIH0gZnJvbSAnbm9kZTpzdHJlYW0nO1xuaW1wb3J0ICogYXMgcmxVdGlscyBmcm9tICcuLi91dGlscy9yZWFkbGluZS5qcyc7XG5pbXBvcnQgQmFzZSBmcm9tICcuL2Jhc2VVSS5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJvdHRvbUJhciBleHRlbmRzIEJhc2Uge1xuICBjb25zdHJ1Y3RvcihvcHQgPSB7fSkge1xuICAgIHN1cGVyKG9wdCk7XG5cbiAgICB0aGlzLmxvZyA9IG5ldyBXcml0YWJsZSh7XG4gICAgICB3cml0ZTogKGNodW5rLCBlbmNvZGluZywgY2IpID0+IHtcbiAgICAgICAgdGhpcy53cml0ZUxvZyhjaHVuayk7XG4gICAgICAgIGNiKCk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5ib3R0b21CYXIgPSBvcHQuYm90dG9tQmFyIHx8ICcnO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBwcm9tcHQgdG8gc2NyZWVuXG4gICAqIEByZXR1cm4ge0JvdHRvbUJhcn0gc2VsZlxuICAgKi9cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy53cml0ZSh0aGlzLmJvdHRvbUJhcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjbGVhbigpIHtcbiAgICBybFV0aWxzLmNsZWFyTGluZSh0aGlzLnJsLCB0aGlzLmJvdHRvbUJhci5zcGxpdCgnXFxuJykubGVuZ3RoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGJvdHRvbSBiYXIgY29udGVudCBhbmQgcmVyZW5kZXJcbiAgICogQHBhcmFtICB7U3RyaW5nfSBib3R0b21CYXIgQm90dG9tIGJhciBjb250ZW50XG4gICAqIEByZXR1cm4ge0JvdHRvbUJhcn0gICAgICAgICAgIHNlbGZcbiAgICovXG5cbiAgdXBkYXRlQm90dG9tQmFyKGJvdHRvbUJhcikge1xuICAgIHJsVXRpbHMuY2xlYXJMaW5lKHRoaXMucmwsIDEpO1xuICAgIHRoaXMucmwub3V0cHV0LnVubXV0ZSgpO1xuICAgIHRoaXMuY2xlYW4oKTtcbiAgICB0aGlzLmJvdHRvbUJhciA9IGJvdHRvbUJhcjtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMucmwub3V0cHV0Lm11dGUoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSBvdXQgbG9nIGRhdGFcbiAgICogQHBhcmFtIHtTdHJpbmd9IGRhdGEgLSBUaGUgbG9nIGRhdGEgdG8gYmUgb3V0cHV0XG4gICAqIEByZXR1cm4ge0JvdHRvbUJhcn0gc2VsZlxuICAgKi9cblxuICB3cml0ZUxvZyhkYXRhKSB7XG4gICAgdGhpcy5ybC5vdXRwdXQudW5tdXRlKCk7XG4gICAgdGhpcy5jbGVhbigpO1xuICAgIHRoaXMucmwub3V0cHV0LndyaXRlKHRoaXMuZW5mb3JjZUxGKGRhdGEudG9TdHJpbmcoKSkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5ybC5vdXRwdXQubXV0ZSgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2Ugc3VyZSBsaW5lIGVuZCBvbiBhIGxpbmUgZmVlZFxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IHN0ciBJbnB1dCBzdHJpbmdcbiAgICogQHJldHVybiB7U3RyaW5nfSAgICAgVGhlIGlucHV0IHN0cmluZyB3aXRoIGEgZmluYWwgbGluZSBmZWVkXG4gICAqL1xuXG4gIGVuZm9yY2VMRihzdHIpIHtcbiAgICByZXR1cm4gL1tcXG5cXHJdJC8udGVzdChzdHIpID8gc3RyIDogc3RyICsgJ1xcbic7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIGZvciB3cml0aW5nIG1lc3NhZ2UgaW4gUHJvbXB0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gYmUgb3V0cHV0XG4gICAqL1xuICB3cml0ZShtZXNzYWdlKSB7XG4gICAgY29uc3QgbXNnTGluZXMgPSBtZXNzYWdlLnNwbGl0KC9cXG4vKTtcbiAgICB0aGlzLmhlaWdodCA9IG1zZ0xpbmVzLmxlbmd0aDtcblxuICAgIC8vIFdyaXRlIG1lc3NhZ2UgdG8gc2NyZWVuIGFuZCBzZXRQcm9tcHQgdG8gY29udHJvbCBiYWNrc3BhY2VcbiAgICB0aGlzLnJsLnNldFByb21wdChtc2dMaW5lcy5hdCgtMSkpO1xuXG4gICAgaWYgKHRoaXMucmwub3V0cHV0LnJvd3MgPT09IDAgJiYgdGhpcy5ybC5vdXRwdXQuY29sdW1ucyA9PT0gMCkge1xuICAgICAgLyogV2hlbiBpdCdzIGEgdHR5IHRocm91Z2ggc2VyaWFsIHBvcnQgdGhlcmUncyBubyB0ZXJtaW5hbCBpbmZvIGFuZCB0aGUgcmVuZGVyIHdpbGwgbWFsZnVuY3Rpb24sXG4gICAgICAgICBzbyB3ZSBuZWVkIGVuZm9yY2UgdGhlIGN1cnNvciB0byBsb2NhdGUgdG8gdGhlIGxlZnRtb3N0IHBvc2l0aW9uIGZvciByZW5kZXJpbmcuICovXG4gICAgICBybFV0aWxzLmxlZnQodGhpcy5ybCwgbWVzc2FnZS5sZW5ndGggKyB0aGlzLnJsLmxpbmUubGVuZ3RoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJsLm91dHB1dC53cml0ZShtZXNzYWdlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgZnJvbSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCBydW5Bc3luYyBmcm9tICdydW4tYXN5bmMnO1xuXG4vKipcbiAqIFJlc29sdmUgYSBxdWVzdGlvbiBwcm9wZXJ0eSB2YWx1ZSBpZiBpdCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbi5cbiAqIFRoaXMgbWV0aG9kIHdpbGwgb3ZlcndyaXRlIHRoZSBwcm9wZXJ0eSBvbiB0aGUgcXVlc3Rpb24gb2JqZWN0IHdpdGggdGhlIHJlY2VpdmVkIHZhbHVlLlxuICogQHBhcmFtICB7T2JqZWN0fSBxdWVzdGlvbiAtIFF1ZXN0aW9uIG9iamVjdFxuICogQHBhcmFtICB7U3RyaW5nfSBwcm9wICAgICAtIFByb3BlcnR5IHRvIGZldGNoIG5hbWVcbiAqIEBwYXJhbSAge09iamVjdH0gYW5zd2VycyAgLSBBbnN3ZXJzIG9iamVjdFxuICogQHJldHVybiB7UnguT2JzZXJ2YWJsZX0gICAtIE9ic2VydmFibGUgZW1pdHRpbmcgb25jZSB2YWx1ZSBpcyBrbm93blxuICovXG5cbmV4cG9ydCBjb25zdCBmZXRjaEFzeW5jUXVlc3Rpb25Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChxdWVzdGlvbiwgcHJvcCwgYW5zd2Vycykge1xuICBpZiAodHlwZW9mIHF1ZXN0aW9uW3Byb3BdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG9mKHF1ZXN0aW9uKTtcbiAgfVxuXG4gIHJldHVybiBmcm9tKFxuICAgIHJ1bkFzeW5jKHF1ZXN0aW9uW3Byb3BdKShhbnN3ZXJzKS50aGVuKCh2YWx1ZSkgPT4ge1xuICAgICAgcXVlc3Rpb25bcHJvcF0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiBxdWVzdGlvbjtcbiAgICB9KSxcbiAgKTtcbn07XG4iLCJjb25zdCBfID0ge1xuICBzZXQ6IChvYmosIHBhdGggPSAnJywgdmFsdWUpID0+IHtcbiAgICBsZXQgcG9pbnRlciA9IG9iajtcbiAgICBwYXRoLnNwbGl0KCcuJykuZm9yRWFjaCgoa2V5LCBpbmRleCwgYXJyKSA9PiB7XG4gICAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJyB8fCBrZXkgPT09ICdjb25zdHJ1Y3RvcicpIHJldHVybjtcblxuICAgICAgaWYgKGluZGV4ID09PSBhcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICBwb2ludGVyW2tleV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoIShrZXkgaW4gcG9pbnRlcikpIHtcbiAgICAgICAgcG9pbnRlcltrZXldID0ge307XG4gICAgICB9XG5cbiAgICAgIHBvaW50ZXIgPSBwb2ludGVyW2tleV07XG4gICAgfSk7XG4gIH0sXG4gIGdldDogKG9iaiwgcGF0aCA9ICcnLCBkZWZhdWx0VmFsdWUpID0+IHtcbiAgICBjb25zdCB0cmF2ZWwgPSAocmVnZXhwKSA9PlxuICAgICAgU3RyaW5nLnByb3RvdHlwZS5zcGxpdFxuICAgICAgICAuY2FsbChwYXRoLCByZWdleHApXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLnJlZHVjZSgocmVzLCBrZXkpID0+IChyZXMgIT09IG51bGwgJiYgcmVzICE9PSB1bmRlZmluZWQgPyByZXNba2V5XSA6IHJlcyksIG9iaik7XG4gICAgY29uc3QgcmVzdWx0ID0gdHJhdmVsKC9bLFtcXF1dKz8vKSB8fCB0cmF2ZWwoL1ssLltcXF1dKz8vKTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgfHwgcmVzdWx0ID09PSBvYmogPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XG4gIH0sXG59O1xuXG5pbXBvcnQge1xuICBkZWZlcixcbiAgRU1QVFksXG4gIGZyb20sXG4gIG9mLFxuICBjb25jYXRNYXAsXG4gIGZpbHRlcixcbiAgcHVibGlzaCxcbiAgcmVkdWNlLFxuICBpc09ic2VydmFibGUsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHJ1bkFzeW5jIGZyb20gJ3J1bi1hc3luYyc7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuLi91dGlscy91dGlscy5qcyc7XG5pbXBvcnQgQmFzZSBmcm9tICcuL2Jhc2VVSS5qcyc7XG5cbi8qKlxuICogQmFzZSBpbnRlcmZhY2UgY2xhc3Mgb3RoZXIgY2FuIGluaGVyaXRzIGZyb21cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvbXB0VUkgZXh0ZW5kcyBCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvbXB0cywgb3B0KSB7XG4gICAgc3VwZXIob3B0KTtcbiAgICB0aGlzLnByb21wdHMgPSBwcm9tcHRzO1xuICB9XG5cbiAgcnVuKHF1ZXN0aW9ucywgYW5zd2Vycykge1xuICAgIC8vIEtlZXAgZ2xvYmFsIHJlZmVyZW5jZSB0byB0aGUgYW5zd2Vyc1xuICAgIHRoaXMuYW5zd2VycyA9IHR5cGVvZiBhbnN3ZXJzID09PSAnb2JqZWN0JyA/IHsgLi4uYW5zd2VycyB9IDoge307XG5cbiAgICBsZXQgb2JzO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHF1ZXN0aW9ucykpIHtcbiAgICAgIG9icyA9IGZyb20ocXVlc3Rpb25zKTtcbiAgICB9IGVsc2UgaWYgKGlzT2JzZXJ2YWJsZShxdWVzdGlvbnMpKSB7XG4gICAgICBvYnMgPSBxdWVzdGlvbnM7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIE9iamVjdC52YWx1ZXMocXVlc3Rpb25zKS5ldmVyeShcbiAgICAgICAgKG1heWJlUXVlc3Rpb24pID0+XG4gICAgICAgICAgdHlwZW9mIG1heWJlUXVlc3Rpb24gPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgIUFycmF5LmlzQXJyYXkobWF5YmVRdWVzdGlvbikgJiZcbiAgICAgICAgICBtYXliZVF1ZXN0aW9uICE9IG51bGwsXG4gICAgICApXG4gICAgKSB7XG4gICAgICAvLyBDYXNlOiBDYWxsZWQgd2l0aCBhIHNldCBvZiB7IG5hbWU6IHF1ZXN0aW9uIH1cbiAgICAgIG9icyA9IGZyb20oXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHF1ZXN0aW9ucykubWFwKChbbmFtZSwgcXVlc3Rpb25dKSA9PiAoe1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgLi4ucXVlc3Rpb24sXG4gICAgICAgIH0pKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENhc2U6IENhbGxlZCB3aXRoIGEgc2luZ2xlIHF1ZXN0aW9uIGNvbmZpZ1xuICAgICAgb2JzID0gZnJvbShbcXVlc3Rpb25zXSk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzID0gb2JzLnBpcGUoXG4gICAgICBjb25jYXRNYXAodGhpcy5wcm9jZXNzUXVlc3Rpb24uYmluZCh0aGlzKSksXG4gICAgICBwdWJsaXNoKCksIC8vIENyZWF0ZXMgYSBob3QgT2JzZXJ2YWJsZS4gSXQgcHJldmVudHMgZHVwbGljYXRpbmcgcHJvbXB0cy5cbiAgICApO1xuXG4gICAgdGhpcy5wcm9jZXNzLmNvbm5lY3QoKTtcblxuICAgIHJldHVybiB0aGlzLnByb2Nlc3NcbiAgICAgIC5waXBlKFxuICAgICAgICByZWR1Y2UoKGFuc3dlcnNPYmosIGFuc3dlcikgPT4ge1xuICAgICAgICAgIF8uc2V0KGFuc3dlcnNPYmosIGFuc3dlci5uYW1lLCBhbnN3ZXIuYW5zd2VyKTtcbiAgICAgICAgICByZXR1cm4gYW5zd2Vyc09iajtcbiAgICAgICAgfSwgdGhpcy5hbnN3ZXJzKSxcbiAgICAgIClcbiAgICAgIC50b1Byb21pc2UoUHJvbWlzZSlcbiAgICAgIC50aGVuKHRoaXMub25Db21wbGV0aW9uLmJpbmQodGhpcyksIHRoaXMub25FcnJvci5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbmNlIGFsbCBwcm9tcHQgYXJlIG92ZXJcbiAgICovXG4gIG9uQ29tcGxldGlvbigpIHtcbiAgICB0aGlzLmNsb3NlKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hbnN3ZXJzO1xuICB9XG5cbiAgb25FcnJvcihlcnJvcikge1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICB9XG5cbiAgcHJvY2Vzc1F1ZXN0aW9uKHF1ZXN0aW9uKSB7XG4gICAgcXVlc3Rpb24gPSB7IC4uLnF1ZXN0aW9uIH07XG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IHtcbiAgICAgIGNvbnN0IG9icyA9IG9mKHF1ZXN0aW9uKTtcblxuICAgICAgcmV0dXJuIG9icy5waXBlKFxuICAgICAgICBjb25jYXRNYXAodGhpcy5zZXREZWZhdWx0VHlwZS5iaW5kKHRoaXMpKSxcbiAgICAgICAgY29uY2F0TWFwKHRoaXMuZmlsdGVySWZSdW5uYWJsZS5iaW5kKHRoaXMpKSxcbiAgICAgICAgY29uY2F0TWFwKCgpID0+XG4gICAgICAgICAgdXRpbHMuZmV0Y2hBc3luY1F1ZXN0aW9uUHJvcGVydHkocXVlc3Rpb24sICdtZXNzYWdlJywgdGhpcy5hbnN3ZXJzKSxcbiAgICAgICAgKSxcbiAgICAgICAgY29uY2F0TWFwKCgpID0+XG4gICAgICAgICAgdXRpbHMuZmV0Y2hBc3luY1F1ZXN0aW9uUHJvcGVydHkocXVlc3Rpb24sICdkZWZhdWx0JywgdGhpcy5hbnN3ZXJzKSxcbiAgICAgICAgKSxcbiAgICAgICAgY29uY2F0TWFwKCgpID0+XG4gICAgICAgICAgdXRpbHMuZmV0Y2hBc3luY1F1ZXN0aW9uUHJvcGVydHkocXVlc3Rpb24sICdjaG9pY2VzJywgdGhpcy5hbnN3ZXJzKSxcbiAgICAgICAgKSxcbiAgICAgICAgY29uY2F0TWFwKHRoaXMuZmV0Y2hBbnN3ZXIuYmluZCh0aGlzKSksXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgZmV0Y2hBbnN3ZXIocXVlc3Rpb24pIHtcbiAgICBjb25zdCBQcm9tcHQgPSB0aGlzLnByb21wdHNbcXVlc3Rpb24udHlwZV07XG4gICAgdGhpcy5hY3RpdmVQcm9tcHQgPSBuZXcgUHJvbXB0KHF1ZXN0aW9uLCB0aGlzLnJsLCB0aGlzLmFuc3dlcnMpO1xuICAgIHJldHVybiBkZWZlcigoKSA9PlxuICAgICAgZnJvbSh0aGlzLmFjdGl2ZVByb21wdC5ydW4oKS50aGVuKChhbnN3ZXIpID0+ICh7IG5hbWU6IHF1ZXN0aW9uLm5hbWUsIGFuc3dlciB9KSkpLFxuICAgICk7XG4gIH1cblxuICBzZXREZWZhdWx0VHlwZShxdWVzdGlvbikge1xuICAgIC8vIERlZmF1bHQgdHlwZSB0byBpbnB1dFxuICAgIGlmICghdGhpcy5wcm9tcHRzW3F1ZXN0aW9uLnR5cGVdKSB7XG4gICAgICBxdWVzdGlvbi50eXBlID0gJ2lucHV0JztcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmZXIoKCkgPT4gb2YocXVlc3Rpb24pKTtcbiAgfVxuXG4gIGZpbHRlcklmUnVubmFibGUocXVlc3Rpb24pIHtcbiAgICBpZiAoXG4gICAgICBxdWVzdGlvbi5hc2tBbnN3ZXJlZCAhPT0gdHJ1ZSAmJlxuICAgICAgXy5nZXQodGhpcy5hbnN3ZXJzLCBxdWVzdGlvbi5uYW1lKSAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICByZXR1cm4gRU1QVFk7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXN0aW9uLndoZW4gPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gRU1QVFk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBxdWVzdGlvbi53aGVuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gb2YocXVlc3Rpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IHsgYW5zd2VycyB9ID0gdGhpcztcbiAgICByZXR1cm4gZGVmZXIoKCkgPT5cbiAgICAgIGZyb20oXG4gICAgICAgIHJ1bkFzeW5jKHF1ZXN0aW9uLndoZW4pKGFuc3dlcnMpLnRoZW4oKHNob3VsZFJ1bikgPT4ge1xuICAgICAgICAgIGlmIChzaG91bGRSdW4pIHtcbiAgICAgICAgICAgIHJldHVybiBxdWVzdGlvbjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgKS5waXBlKGZpbHRlcigodmFsKSA9PiB2YWwgIT0gbnVsbCkpLFxuICAgICk7XG4gIH1cbn1cbiIsIi8qKlxuICogSW5xdWlyZXIuanNcbiAqIEEgY29sbGVjdGlvbiBvZiBjb21tb24gaW50ZXJhY3RpdmUgY29tbWFuZCBsaW5lIHVzZXIgaW50ZXJmYWNlcy5cbiAqL1xuXG5pbXBvcnQgeyBkZWZhdWx0IGFzIExpc3QgfSBmcm9tICcuL3Byb21wdHMvbGlzdC5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIElucHV0IH0gZnJvbSAnLi9wcm9tcHRzL2lucHV0LmpzJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgTnVtYmVyIH0gZnJvbSAnLi9wcm9tcHRzL251bWJlci5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIENvbmZpcm0gfSBmcm9tICcuL3Byb21wdHMvY29uZmlybS5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFJhd0xpc3QgfSBmcm9tICcuL3Byb21wdHMvcmF3bGlzdC5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIEV4cGFuZCB9IGZyb20gJy4vcHJvbXB0cy9leHBhbmQuanMnO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBDaGVja2JveCB9IGZyb20gJy4vcHJvbXB0cy9jaGVja2JveC5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFBhc3N3b3JkIH0gZnJvbSAnLi9wcm9tcHRzL3Bhc3N3b3JkLmpzJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgRWRpdG9yIH0gZnJvbSAnLi9wcm9tcHRzL2VkaXRvci5qcyc7XG5cbmltcG9ydCB7IGRlZmF1bHQgYXMgQm90dG9tQmFyIH0gZnJvbSAnLi91aS9ib3R0b20tYmFyLmpzJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgUHJvbXB0IH0gZnJvbSAnLi91aS9wcm9tcHQuanMnO1xuXG5pbXBvcnQgeyBkZWZhdWx0IGFzIFNlcGFyYXRvciB9IGZyb20gJy4vb2JqZWN0cy9zZXBhcmF0b3IuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBzZWxmLWNvbnRhaW5lZCBwcm9tcHQgbW9kdWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvbXB0TW9kdWxlKG9wdCkge1xuICBjb25zdCBwcm9tcHRNb2R1bGUgPSBmdW5jdGlvbiAocXVlc3Rpb25zLCBhbnN3ZXJzKSB7XG4gICAgbGV0IHVpSW5zdGFuY2U7XG4gICAgdHJ5IHtcbiAgICAgIHVpSW5zdGFuY2UgPSBuZXcgUHJvbXB0KHByb21wdE1vZHVsZS5wcm9tcHRzLCBvcHQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgICBjb25zdCBwcm9taXNlID0gdWlJbnN0YW5jZS5ydW4ocXVlc3Rpb25zLCBhbnN3ZXJzKTtcblxuICAgIC8vIE1vbmtleSBwYXRjaCB0aGUgVUkgb24gdGhlIHByb21pc2Ugb2JqZWN0IHNvXG4gICAgLy8gdGhhdCBpdCByZW1haW5zIHB1YmxpY2x5IGFjY2Vzc2libGUuXG4gICAgcHJvbWlzZS51aSA9IHVpSW5zdGFuY2U7XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcblxuICBwcm9tcHRNb2R1bGUucHJvbXB0cyA9IHt9O1xuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIHByb21wdCB0eXBlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lICAgICBQcm9tcHQgdHlwZSBuYW1lXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHByb21wdCBQcm9tcHQgY29uc3RydWN0b3JcbiAgICogQHJldHVybiB7aW5xdWlyZXJ9XG4gICAqL1xuXG4gIHByb21wdE1vZHVsZS5yZWdpc3RlclByb21wdCA9IGZ1bmN0aW9uIChuYW1lLCBwcm9tcHQpIHtcbiAgICBwcm9tcHRNb2R1bGUucHJvbXB0c1tuYW1lXSA9IHByb21wdDtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvKipcbiAgICogUmVnaXN0ZXIgdGhlIGRlZmF1bHRzIHByb3ZpZGVyIHByb21wdHNcbiAgICovXG5cbiAgcHJvbXB0TW9kdWxlLnJlc3RvcmVEZWZhdWx0UHJvbXB0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnJlZ2lzdGVyUHJvbXB0KCdsaXN0JywgTGlzdCk7XG4gICAgdGhpcy5yZWdpc3RlclByb21wdCgnaW5wdXQnLCBJbnB1dCk7XG4gICAgdGhpcy5yZWdpc3RlclByb21wdCgnbnVtYmVyJywgTnVtYmVyKTtcbiAgICB0aGlzLnJlZ2lzdGVyUHJvbXB0KCdjb25maXJtJywgQ29uZmlybSk7XG4gICAgdGhpcy5yZWdpc3RlclByb21wdCgncmF3bGlzdCcsIFJhd0xpc3QpO1xuICAgIHRoaXMucmVnaXN0ZXJQcm9tcHQoJ2V4cGFuZCcsIEV4cGFuZCk7XG4gICAgdGhpcy5yZWdpc3RlclByb21wdCgnY2hlY2tib3gnLCBDaGVja2JveCk7XG4gICAgdGhpcy5yZWdpc3RlclByb21wdCgncGFzc3dvcmQnLCBQYXNzd29yZCk7XG4gICAgdGhpcy5yZWdpc3RlclByb21wdCgnZWRpdG9yJywgRWRpdG9yKTtcbiAgfTtcblxuICBwcm9tcHRNb2R1bGUucmVzdG9yZURlZmF1bHRQcm9tcHRzKCk7XG5cbiAgcmV0dXJuIHByb21wdE1vZHVsZTtcbn1cblxuLyoqXG4gKiBQdWJsaWMgQ0xJIGhlbHBlciBpbnRlcmZhY2VcbiAqIEBwYXJhbSAge0FycmF5fE9iamVjdHxSeC5PYnNlcnZhYmxlfSBxdWVzdGlvbnMgLSBRdWVzdGlvbnMgc2V0dGluZ3MgYXJyYXlcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYiAtIENhbGxiYWNrIGJlaW5nIHBhc3NlZCB0aGUgdXNlciBhbnN3ZXJzXG4gKiBAcmV0dXJuIHt1aS5Qcm9tcHR9XG4gKi9cblxuY29uc3QgcHJvbXB0ID0gY3JlYXRlUHJvbXB0TW9kdWxlKCk7XG5cbi8vIEV4cG9zZSBoZWxwZXIgZnVuY3Rpb25zIG9uIHRoZSB0b3AgbGV2ZWwgZm9yIGVhc2llc3QgdXNhZ2UgYnkgY29tbW9uIHVzZXJzXG5mdW5jdGlvbiByZWdpc3RlclByb21wdChuYW1lLCBuZXdQcm9tcHQpIHtcbiAgcHJvbXB0LnJlZ2lzdGVyUHJvbXB0KG5hbWUsIG5ld1Byb21wdCk7XG59XG5cbmZ1bmN0aW9uIHJlc3RvcmVEZWZhdWx0UHJvbXB0cygpIHtcbiAgcHJvbXB0LnJlc3RvcmVEZWZhdWx0UHJvbXB0cygpO1xufVxuXG5jb25zdCBpbnF1aXJlciA9IHtcbiAgcHJvbXB0LFxuICB1aToge1xuICAgIEJvdHRvbUJhcixcbiAgICBQcm9tcHQsXG4gIH0sXG4gIGNyZWF0ZVByb21wdE1vZHVsZSxcbiAgcmVnaXN0ZXJQcm9tcHQsXG4gIHJlc3RvcmVEZWZhdWx0UHJvbXB0cyxcbiAgU2VwYXJhdG9yLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgaW5xdWlyZXI7XG4iLCJpbXBvcnQgeyBzcGF3biBhcyBfc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGRlYnVnRmFjdG9yeSB9IGZyb20gJy4vZGVidWcnO1xuY29uc3QgZGVidWcgPSBkZWJ1Z0ZhY3RvcnkoJ3NwYXduJyk7XG5leHBvcnQgZnVuY3Rpb24gc3Bhd24oY29tbWFuZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgW2NtZCwgLi4uYXJnc10gPSBjb21tYW5kLnNwbGl0KCcgJykubWFwKChzKSA9PiBzLnRyaW0oKSk7XG4gICAgZGVidWcoYGV4ZWN1dGUgJHtjbWR9ICR7YXJncy5qb2luKCcgJyl9YCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBzcGF3blN0cmVhbSA9IF9zcGF3bihjbWQsIGFyZ3MsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgc2hlbGw6IHRydWUgfSkpO1xuICAgICAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICAgICAgcHJvY2Vzcy5zdGRpbi5waXBlKHNwYXduU3RyZWFtLnN0ZGluKTtcbiAgICAgICAgKF9hID0gc3Bhd25TdHJlYW0uc3Rkb3V0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgICAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNwYXduU3RyZWFtLnN0ZG91dC5waXBlKHByb2Nlc3Muc3Rkb3V0KTtcbiAgICAgICAgc3Bhd25TdHJlYW0uc3RkZXJyLnBpcGUocHJvY2Vzcy5zdGRlcnIpO1xuICAgICAgICBzcGF3blN0cmVhbS5vbignY2xvc2UnLCAoY29kZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChjaHVua3MpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zcGF3bi5qcy5tYXAiLCJleHBvcnQgY29uc3QgY3JlYXRlQ2FyZ29Db250ZW50ID0gKG5hbWUpID0+IGBbcGFja2FnZV1cbmVkaXRpb24gPSBcIjIwMjFcIlxubmFtZSA9IFwiJHtuYW1lLnJlcGxhY2UoJ0AnLCAnJykucmVwbGFjZSgnLycsICdfJykudG9Mb3dlckNhc2UoKX1cIlxudmVyc2lvbiA9IFwiMC4wLjBcIlxuXG5bbGliXVxuY3JhdGUtdHlwZSA9IFtcImNkeWxpYlwiXVxuXG5bZGVwZW5kZW5jaWVzXVxuIyBEZWZhdWx0IGVuYWJsZSBuYXBpNCBmZWF0dXJlLCBzZWUgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9uLWFwaS5odG1sI25vZGUtYXBpLXZlcnNpb24tbWF0cml4XG5uYXBpID0geyB2ZXJzaW9uID0gXCJOQVBJX1ZFUlNJT05cIiwgZGVmYXVsdC1mZWF0dXJlcyA9IGZhbHNlLCBmZWF0dXJlcyA9IFtcIm5hcGk0XCJdIH1cbm5hcGktZGVyaXZlID0gXCJOQVBJX0RFUklWRV9WRVJTSU9OXCJcblxuW2J1aWxkLWRlcGVuZGVuY2llc11cbm5hcGktYnVpbGQgPSBcIk5BUElfQlVJTERfVkVSU0lPTlwiXG5cbltwcm9maWxlLnJlbGVhc2VdXG5sdG8gPSB0cnVlXG5zdHJpcCA9IFwic3ltYm9sc1wiXG5gO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2FyZ28uanMubWFwIiwiZXhwb3J0IGNvbnN0IGNyZWF0ZUNhcmdvQ29uZmlnID0gKGVuYWJsZUxpbnV4QXJtOE11c2wsIGVuYWJsZVdpbmRvd3NYNjQpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBpZiAoZW5hYmxlTGludXhBcm04TXVzbCkge1xuICAgICAgICByZXN1bHQucHVzaChgW3RhcmdldC5hYXJjaDY0LXVua25vd24tbGludXgtbXVzbF1cbmxpbmtlciA9IFwiYWFyY2g2NC1saW51eC1tdXNsLWdjY1wiXG5ydXN0ZmxhZ3MgPSBbXCItQ1wiLCBcInRhcmdldC1mZWF0dXJlPS1jcnQtc3RhdGljXCJdYCk7XG4gICAgfVxuICAgIGlmIChlbmFibGVXaW5kb3dzWDY0KSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGBbdGFyZ2V0Lng4Nl82NC1wYy13aW5kb3dzLW1zdmNdXG5ydXN0ZmxhZ3MgPSBbXCItQ1wiLCBcInRhcmdldC1mZWF0dXJlPStjcnQtc3RhdGljXCJdYCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQuam9pbignXFxuJyk7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2FyZ28tY29uZmlnLmpzLm1hcCIsIlxuLyohIGpzLXlhbWwgNC4xLjAgaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9qcy15YW1sIEBsaWNlbnNlIE1JVCAqL1xuZnVuY3Rpb24gaXNOb3RoaW5nKHN1YmplY3QpIHtcbiAgcmV0dXJuICh0eXBlb2Ygc3ViamVjdCA9PT0gJ3VuZGVmaW5lZCcpIHx8IChzdWJqZWN0ID09PSBudWxsKTtcbn1cblxuXG5mdW5jdGlvbiBpc09iamVjdChzdWJqZWN0KSB7XG4gIHJldHVybiAodHlwZW9mIHN1YmplY3QgPT09ICdvYmplY3QnKSAmJiAoc3ViamVjdCAhPT0gbnVsbCk7XG59XG5cblxuZnVuY3Rpb24gdG9BcnJheShzZXF1ZW5jZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShzZXF1ZW5jZSkpIHJldHVybiBzZXF1ZW5jZTtcbiAgZWxzZSBpZiAoaXNOb3RoaW5nKHNlcXVlbmNlKSkgcmV0dXJuIFtdO1xuXG4gIHJldHVybiBbIHNlcXVlbmNlIF07XG59XG5cblxuZnVuY3Rpb24gZXh0ZW5kKHRhcmdldCwgc291cmNlKSB7XG4gIHZhciBpbmRleCwgbGVuZ3RoLCBrZXksIHNvdXJjZUtleXM7XG5cbiAgaWYgKHNvdXJjZSkge1xuICAgIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuXG4gICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IHNvdXJjZUtleXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAga2V5ID0gc291cmNlS2V5c1tpbmRleF07XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cblxuZnVuY3Rpb24gcmVwZWF0KHN0cmluZywgY291bnQpIHtcbiAgdmFyIHJlc3VsdCA9ICcnLCBjeWNsZTtcblxuICBmb3IgKGN5Y2xlID0gMDsgY3ljbGUgPCBjb3VudDsgY3ljbGUgKz0gMSkge1xuICAgIHJlc3VsdCArPSBzdHJpbmc7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbmZ1bmN0aW9uIGlzTmVnYXRpdmVaZXJvKG51bWJlcikge1xuICByZXR1cm4gKG51bWJlciA9PT0gMCkgJiYgKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSA9PT0gMSAvIG51bWJlcik7XG59XG5cblxudmFyIGlzTm90aGluZ18xICAgICAgPSBpc05vdGhpbmc7XG52YXIgaXNPYmplY3RfMSAgICAgICA9IGlzT2JqZWN0O1xudmFyIHRvQXJyYXlfMSAgICAgICAgPSB0b0FycmF5O1xudmFyIHJlcGVhdF8xICAgICAgICAgPSByZXBlYXQ7XG52YXIgaXNOZWdhdGl2ZVplcm9fMSA9IGlzTmVnYXRpdmVaZXJvO1xudmFyIGV4dGVuZF8xICAgICAgICAgPSBleHRlbmQ7XG5cbnZhciBjb21tb24gPSB7XG5cdGlzTm90aGluZzogaXNOb3RoaW5nXzEsXG5cdGlzT2JqZWN0OiBpc09iamVjdF8xLFxuXHR0b0FycmF5OiB0b0FycmF5XzEsXG5cdHJlcGVhdDogcmVwZWF0XzEsXG5cdGlzTmVnYXRpdmVaZXJvOiBpc05lZ2F0aXZlWmVyb18xLFxuXHRleHRlbmQ6IGV4dGVuZF8xXG59O1xuXG4vLyBZQU1MIGVycm9yIGNsYXNzLiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzg0NTg5ODRcblxuXG5mdW5jdGlvbiBmb3JtYXRFcnJvcihleGNlcHRpb24sIGNvbXBhY3QpIHtcbiAgdmFyIHdoZXJlID0gJycsIG1lc3NhZ2UgPSBleGNlcHRpb24ucmVhc29uIHx8ICcodW5rbm93biByZWFzb24pJztcblxuICBpZiAoIWV4Y2VwdGlvbi5tYXJrKSByZXR1cm4gbWVzc2FnZTtcblxuICBpZiAoZXhjZXB0aW9uLm1hcmsubmFtZSkge1xuICAgIHdoZXJlICs9ICdpbiBcIicgKyBleGNlcHRpb24ubWFyay5uYW1lICsgJ1wiICc7XG4gIH1cblxuICB3aGVyZSArPSAnKCcgKyAoZXhjZXB0aW9uLm1hcmsubGluZSArIDEpICsgJzonICsgKGV4Y2VwdGlvbi5tYXJrLmNvbHVtbiArIDEpICsgJyknO1xuXG4gIGlmICghY29tcGFjdCAmJiBleGNlcHRpb24ubWFyay5zbmlwcGV0KSB7XG4gICAgd2hlcmUgKz0gJ1xcblxcbicgKyBleGNlcHRpb24ubWFyay5zbmlwcGV0O1xuICB9XG5cbiAgcmV0dXJuIG1lc3NhZ2UgKyAnICcgKyB3aGVyZTtcbn1cblxuXG5mdW5jdGlvbiBZQU1MRXhjZXB0aW9uJDEocmVhc29uLCBtYXJrKSB7XG4gIC8vIFN1cGVyIGNvbnN0cnVjdG9yXG4gIEVycm9yLmNhbGwodGhpcyk7XG5cbiAgdGhpcy5uYW1lID0gJ1lBTUxFeGNlcHRpb24nO1xuICB0aGlzLnJlYXNvbiA9IHJlYXNvbjtcbiAgdGhpcy5tYXJrID0gbWFyaztcbiAgdGhpcy5tZXNzYWdlID0gZm9ybWF0RXJyb3IodGhpcywgZmFsc2UpO1xuXG4gIC8vIEluY2x1ZGUgc3RhY2sgdHJhY2UgaW4gZXJyb3Igb2JqZWN0XG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIC8vIENocm9tZSBhbmQgTm9kZUpTXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH0gZWxzZSB7XG4gICAgLy8gRkYsIElFIDEwKyBhbmQgU2FmYXJpIDYrLiBGYWxsYmFjayBmb3Igb3RoZXJzXG4gICAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2sgfHwgJyc7XG4gIH1cbn1cblxuXG4vLyBJbmhlcml0IGZyb20gRXJyb3JcbllBTUxFeGNlcHRpb24kMS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG5ZQU1MRXhjZXB0aW9uJDEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gWUFNTEV4Y2VwdGlvbiQxO1xuXG5cbllBTUxFeGNlcHRpb24kMS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhjb21wYWN0KSB7XG4gIHJldHVybiB0aGlzLm5hbWUgKyAnOiAnICsgZm9ybWF0RXJyb3IodGhpcywgY29tcGFjdCk7XG59O1xuXG5cbnZhciBleGNlcHRpb24gPSBZQU1MRXhjZXB0aW9uJDE7XG5cbi8vIGdldCBzbmlwcGV0IGZvciBhIHNpbmdsZSBsaW5lLCByZXNwZWN0aW5nIG1heExlbmd0aFxuZnVuY3Rpb24gZ2V0TGluZShidWZmZXIsIGxpbmVTdGFydCwgbGluZUVuZCwgcG9zaXRpb24sIG1heExpbmVMZW5ndGgpIHtcbiAgdmFyIGhlYWQgPSAnJztcbiAgdmFyIHRhaWwgPSAnJztcbiAgdmFyIG1heEhhbGZMZW5ndGggPSBNYXRoLmZsb29yKG1heExpbmVMZW5ndGggLyAyKSAtIDE7XG5cbiAgaWYgKHBvc2l0aW9uIC0gbGluZVN0YXJ0ID4gbWF4SGFsZkxlbmd0aCkge1xuICAgIGhlYWQgPSAnIC4uLiAnO1xuICAgIGxpbmVTdGFydCA9IHBvc2l0aW9uIC0gbWF4SGFsZkxlbmd0aCArIGhlYWQubGVuZ3RoO1xuICB9XG5cbiAgaWYgKGxpbmVFbmQgLSBwb3NpdGlvbiA+IG1heEhhbGZMZW5ndGgpIHtcbiAgICB0YWlsID0gJyAuLi4nO1xuICAgIGxpbmVFbmQgPSBwb3NpdGlvbiArIG1heEhhbGZMZW5ndGggLSB0YWlsLmxlbmd0aDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RyOiBoZWFkICsgYnVmZmVyLnNsaWNlKGxpbmVTdGFydCwgbGluZUVuZCkucmVwbGFjZSgvXFx0L2csICfihpInKSArIHRhaWwsXG4gICAgcG9zOiBwb3NpdGlvbiAtIGxpbmVTdGFydCArIGhlYWQubGVuZ3RoIC8vIHJlbGF0aXZlIHBvc2l0aW9uXG4gIH07XG59XG5cblxuZnVuY3Rpb24gcGFkU3RhcnQoc3RyaW5nLCBtYXgpIHtcbiAgcmV0dXJuIGNvbW1vbi5yZXBlYXQoJyAnLCBtYXggLSBzdHJpbmcubGVuZ3RoKSArIHN0cmluZztcbn1cblxuXG5mdW5jdGlvbiBtYWtlU25pcHBldChtYXJrLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBPYmplY3QuY3JlYXRlKG9wdGlvbnMgfHwgbnVsbCk7XG5cbiAgaWYgKCFtYXJrLmJ1ZmZlcikgcmV0dXJuIG51bGw7XG5cbiAgaWYgKCFvcHRpb25zLm1heExlbmd0aCkgb3B0aW9ucy5tYXhMZW5ndGggPSA3OTtcbiAgaWYgKHR5cGVvZiBvcHRpb25zLmluZGVudCAgICAgICE9PSAnbnVtYmVyJykgb3B0aW9ucy5pbmRlbnQgICAgICA9IDE7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5saW5lc0JlZm9yZSAhPT0gJ251bWJlcicpIG9wdGlvbnMubGluZXNCZWZvcmUgPSAzO1xuICBpZiAodHlwZW9mIG9wdGlvbnMubGluZXNBZnRlciAgIT09ICdudW1iZXInKSBvcHRpb25zLmxpbmVzQWZ0ZXIgID0gMjtcblxuICB2YXIgcmUgPSAvXFxyP1xcbnxcXHJ8XFwwL2c7XG4gIHZhciBsaW5lU3RhcnRzID0gWyAwIF07XG4gIHZhciBsaW5lRW5kcyA9IFtdO1xuICB2YXIgbWF0Y2g7XG4gIHZhciBmb3VuZExpbmVObyA9IC0xO1xuXG4gIHdoaWxlICgobWF0Y2ggPSByZS5leGVjKG1hcmsuYnVmZmVyKSkpIHtcbiAgICBsaW5lRW5kcy5wdXNoKG1hdGNoLmluZGV4KTtcbiAgICBsaW5lU3RhcnRzLnB1c2gobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpO1xuXG4gICAgaWYgKG1hcmsucG9zaXRpb24gPD0gbWF0Y2guaW5kZXggJiYgZm91bmRMaW5lTm8gPCAwKSB7XG4gICAgICBmb3VuZExpbmVObyA9IGxpbmVTdGFydHMubGVuZ3RoIC0gMjtcbiAgICB9XG4gIH1cblxuICBpZiAoZm91bmRMaW5lTm8gPCAwKSBmb3VuZExpbmVObyA9IGxpbmVTdGFydHMubGVuZ3RoIC0gMTtcblxuICB2YXIgcmVzdWx0ID0gJycsIGksIGxpbmU7XG4gIHZhciBsaW5lTm9MZW5ndGggPSBNYXRoLm1pbihtYXJrLmxpbmUgKyBvcHRpb25zLmxpbmVzQWZ0ZXIsIGxpbmVFbmRzLmxlbmd0aCkudG9TdHJpbmcoKS5sZW5ndGg7XG4gIHZhciBtYXhMaW5lTGVuZ3RoID0gb3B0aW9ucy5tYXhMZW5ndGggLSAob3B0aW9ucy5pbmRlbnQgKyBsaW5lTm9MZW5ndGggKyAzKTtcblxuICBmb3IgKGkgPSAxOyBpIDw9IG9wdGlvbnMubGluZXNCZWZvcmU7IGkrKykge1xuICAgIGlmIChmb3VuZExpbmVObyAtIGkgPCAwKSBicmVhaztcbiAgICBsaW5lID0gZ2V0TGluZShcbiAgICAgIG1hcmsuYnVmZmVyLFxuICAgICAgbGluZVN0YXJ0c1tmb3VuZExpbmVObyAtIGldLFxuICAgICAgbGluZUVuZHNbZm91bmRMaW5lTm8gLSBpXSxcbiAgICAgIG1hcmsucG9zaXRpb24gLSAobGluZVN0YXJ0c1tmb3VuZExpbmVOb10gLSBsaW5lU3RhcnRzW2ZvdW5kTGluZU5vIC0gaV0pLFxuICAgICAgbWF4TGluZUxlbmd0aFxuICAgICk7XG4gICAgcmVzdWx0ID0gY29tbW9uLnJlcGVhdCgnICcsIG9wdGlvbnMuaW5kZW50KSArIHBhZFN0YXJ0KChtYXJrLmxpbmUgLSBpICsgMSkudG9TdHJpbmcoKSwgbGluZU5vTGVuZ3RoKSArXG4gICAgICAnIHwgJyArIGxpbmUuc3RyICsgJ1xcbicgKyByZXN1bHQ7XG4gIH1cblxuICBsaW5lID0gZ2V0TGluZShtYXJrLmJ1ZmZlciwgbGluZVN0YXJ0c1tmb3VuZExpbmVOb10sIGxpbmVFbmRzW2ZvdW5kTGluZU5vXSwgbWFyay5wb3NpdGlvbiwgbWF4TGluZUxlbmd0aCk7XG4gIHJlc3VsdCArPSBjb21tb24ucmVwZWF0KCcgJywgb3B0aW9ucy5pbmRlbnQpICsgcGFkU3RhcnQoKG1hcmsubGluZSArIDEpLnRvU3RyaW5nKCksIGxpbmVOb0xlbmd0aCkgK1xuICAgICcgfCAnICsgbGluZS5zdHIgKyAnXFxuJztcbiAgcmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoJy0nLCBvcHRpb25zLmluZGVudCArIGxpbmVOb0xlbmd0aCArIDMgKyBsaW5lLnBvcykgKyAnXicgKyAnXFxuJztcblxuICBmb3IgKGkgPSAxOyBpIDw9IG9wdGlvbnMubGluZXNBZnRlcjsgaSsrKSB7XG4gICAgaWYgKGZvdW5kTGluZU5vICsgaSA+PSBsaW5lRW5kcy5sZW5ndGgpIGJyZWFrO1xuICAgIGxpbmUgPSBnZXRMaW5lKFxuICAgICAgbWFyay5idWZmZXIsXG4gICAgICBsaW5lU3RhcnRzW2ZvdW5kTGluZU5vICsgaV0sXG4gICAgICBsaW5lRW5kc1tmb3VuZExpbmVObyArIGldLFxuICAgICAgbWFyay5wb3NpdGlvbiAtIChsaW5lU3RhcnRzW2ZvdW5kTGluZU5vXSAtIGxpbmVTdGFydHNbZm91bmRMaW5lTm8gKyBpXSksXG4gICAgICBtYXhMaW5lTGVuZ3RoXG4gICAgKTtcbiAgICByZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnICcsIG9wdGlvbnMuaW5kZW50KSArIHBhZFN0YXJ0KChtYXJrLmxpbmUgKyBpICsgMSkudG9TdHJpbmcoKSwgbGluZU5vTGVuZ3RoKSArXG4gICAgICAnIHwgJyArIGxpbmUuc3RyICsgJ1xcbic7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0LnJlcGxhY2UoL1xcbiQvLCAnJyk7XG59XG5cblxudmFyIHNuaXBwZXQgPSBtYWtlU25pcHBldDtcblxudmFyIFRZUEVfQ09OU1RSVUNUT1JfT1BUSU9OUyA9IFtcbiAgJ2tpbmQnLFxuICAnbXVsdGknLFxuICAncmVzb2x2ZScsXG4gICdjb25zdHJ1Y3QnLFxuICAnaW5zdGFuY2VPZicsXG4gICdwcmVkaWNhdGUnLFxuICAncmVwcmVzZW50JyxcbiAgJ3JlcHJlc2VudE5hbWUnLFxuICAnZGVmYXVsdFN0eWxlJyxcbiAgJ3N0eWxlQWxpYXNlcydcbl07XG5cbnZhciBZQU1MX05PREVfS0lORFMgPSBbXG4gICdzY2FsYXInLFxuICAnc2VxdWVuY2UnLFxuICAnbWFwcGluZydcbl07XG5cbmZ1bmN0aW9uIGNvbXBpbGVTdHlsZUFsaWFzZXMobWFwKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcblxuICBpZiAobWFwICE9PSBudWxsKSB7XG4gICAgT2JqZWN0LmtleXMobWFwKS5mb3JFYWNoKGZ1bmN0aW9uIChzdHlsZSkge1xuICAgICAgbWFwW3N0eWxlXS5mb3JFYWNoKGZ1bmN0aW9uIChhbGlhcykge1xuICAgICAgICByZXN1bHRbU3RyaW5nKGFsaWFzKV0gPSBzdHlsZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gVHlwZSQxKHRhZywgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKFRZUEVfQ09OU1RSVUNUT1JfT1BUSU9OUy5pbmRleE9mKG5hbWUpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IGV4Y2VwdGlvbignVW5rbm93biBvcHRpb24gXCInICsgbmFtZSArICdcIiBpcyBtZXQgaW4gZGVmaW5pdGlvbiBvZiBcIicgKyB0YWcgKyAnXCIgWUFNTCB0eXBlLicpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gVE9ETzogQWRkIHRhZyBmb3JtYXQgY2hlY2suXG4gIHRoaXMub3B0aW9ucyAgICAgICA9IG9wdGlvbnM7IC8vIGtlZXAgb3JpZ2luYWwgb3B0aW9ucyBpbiBjYXNlIHVzZXIgd2FudHMgdG8gZXh0ZW5kIHRoaXMgdHlwZSBsYXRlclxuICB0aGlzLnRhZyAgICAgICAgICAgPSB0YWc7XG4gIHRoaXMua2luZCAgICAgICAgICA9IG9wdGlvbnNbJ2tpbmQnXSAgICAgICAgICB8fCBudWxsO1xuICB0aGlzLnJlc29sdmUgICAgICAgPSBvcHRpb25zWydyZXNvbHZlJ10gICAgICAgfHwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfTtcbiAgdGhpcy5jb25zdHJ1Y3QgICAgID0gb3B0aW9uc1snY29uc3RydWN0J10gICAgIHx8IGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiBkYXRhOyB9O1xuICB0aGlzLmluc3RhbmNlT2YgICAgPSBvcHRpb25zWydpbnN0YW5jZU9mJ10gICAgfHwgbnVsbDtcbiAgdGhpcy5wcmVkaWNhdGUgICAgID0gb3B0aW9uc1sncHJlZGljYXRlJ10gICAgIHx8IG51bGw7XG4gIHRoaXMucmVwcmVzZW50ICAgICA9IG9wdGlvbnNbJ3JlcHJlc2VudCddICAgICB8fCBudWxsO1xuICB0aGlzLnJlcHJlc2VudE5hbWUgPSBvcHRpb25zWydyZXByZXNlbnROYW1lJ10gfHwgbnVsbDtcbiAgdGhpcy5kZWZhdWx0U3R5bGUgID0gb3B0aW9uc1snZGVmYXVsdFN0eWxlJ10gIHx8IG51bGw7XG4gIHRoaXMubXVsdGkgICAgICAgICA9IG9wdGlvbnNbJ211bHRpJ10gICAgICAgICB8fCBmYWxzZTtcbiAgdGhpcy5zdHlsZUFsaWFzZXMgID0gY29tcGlsZVN0eWxlQWxpYXNlcyhvcHRpb25zWydzdHlsZUFsaWFzZXMnXSB8fCBudWxsKTtcblxuICBpZiAoWUFNTF9OT0RFX0tJTkRTLmluZGV4T2YodGhpcy5raW5kKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKCdVbmtub3duIGtpbmQgXCInICsgdGhpcy5raW5kICsgJ1wiIGlzIHNwZWNpZmllZCBmb3IgXCInICsgdGFnICsgJ1wiIFlBTUwgdHlwZS4nKTtcbiAgfVxufVxuXG52YXIgdHlwZSA9IFR5cGUkMTtcblxuLyplc2xpbnQtZGlzYWJsZSBtYXgtbGVuKi9cblxuXG5cblxuXG5mdW5jdGlvbiBjb21waWxlTGlzdChzY2hlbWEsIG5hbWUpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gIHNjaGVtYVtuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uIChjdXJyZW50VHlwZSkge1xuICAgIHZhciBuZXdJbmRleCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgICByZXN1bHQuZm9yRWFjaChmdW5jdGlvbiAocHJldmlvdXNUeXBlLCBwcmV2aW91c0luZGV4KSB7XG4gICAgICBpZiAocHJldmlvdXNUeXBlLnRhZyA9PT0gY3VycmVudFR5cGUudGFnICYmXG4gICAgICAgICAgcHJldmlvdXNUeXBlLmtpbmQgPT09IGN1cnJlbnRUeXBlLmtpbmQgJiZcbiAgICAgICAgICBwcmV2aW91c1R5cGUubXVsdGkgPT09IGN1cnJlbnRUeXBlLm11bHRpKSB7XG5cbiAgICAgICAgbmV3SW5kZXggPSBwcmV2aW91c0luZGV4O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmVzdWx0W25ld0luZGV4XSA9IGN1cnJlbnRUeXBlO1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbmZ1bmN0aW9uIGNvbXBpbGVNYXAoLyogbGlzdHMuLi4gKi8pIHtcbiAgdmFyIHJlc3VsdCA9IHtcbiAgICAgICAgc2NhbGFyOiB7fSxcbiAgICAgICAgc2VxdWVuY2U6IHt9LFxuICAgICAgICBtYXBwaW5nOiB7fSxcbiAgICAgICAgZmFsbGJhY2s6IHt9LFxuICAgICAgICBtdWx0aToge1xuICAgICAgICAgIHNjYWxhcjogW10sXG4gICAgICAgICAgc2VxdWVuY2U6IFtdLFxuICAgICAgICAgIG1hcHBpbmc6IFtdLFxuICAgICAgICAgIGZhbGxiYWNrOiBbXVxuICAgICAgICB9XG4gICAgICB9LCBpbmRleCwgbGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIGNvbGxlY3RUeXBlKHR5cGUpIHtcbiAgICBpZiAodHlwZS5tdWx0aSkge1xuICAgICAgcmVzdWx0Lm11bHRpW3R5cGUua2luZF0ucHVzaCh0eXBlKTtcbiAgICAgIHJlc3VsdC5tdWx0aVsnZmFsbGJhY2snXS5wdXNoKHR5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbdHlwZS5raW5kXVt0eXBlLnRhZ10gPSByZXN1bHRbJ2ZhbGxiYWNrJ11bdHlwZS50YWddID0gdHlwZTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBhcmd1bWVudHNbaW5kZXhdLmZvckVhY2goY29sbGVjdFR5cGUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cblxuZnVuY3Rpb24gU2NoZW1hJDEoZGVmaW5pdGlvbikge1xuICByZXR1cm4gdGhpcy5leHRlbmQoZGVmaW5pdGlvbik7XG59XG5cblxuU2NoZW1hJDEucHJvdG90eXBlLmV4dGVuZCA9IGZ1bmN0aW9uIGV4dGVuZChkZWZpbml0aW9uKSB7XG4gIHZhciBpbXBsaWNpdCA9IFtdO1xuICB2YXIgZXhwbGljaXQgPSBbXTtcblxuICBpZiAoZGVmaW5pdGlvbiBpbnN0YW5jZW9mIHR5cGUpIHtcbiAgICAvLyBTY2hlbWEuZXh0ZW5kKHR5cGUpXG4gICAgZXhwbGljaXQucHVzaChkZWZpbml0aW9uKTtcblxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbikpIHtcbiAgICAvLyBTY2hlbWEuZXh0ZW5kKFsgdHlwZTEsIHR5cGUyLCAuLi4gXSlcbiAgICBleHBsaWNpdCA9IGV4cGxpY2l0LmNvbmNhdChkZWZpbml0aW9uKTtcblxuICB9IGVsc2UgaWYgKGRlZmluaXRpb24gJiYgKEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbi5pbXBsaWNpdCkgfHwgQXJyYXkuaXNBcnJheShkZWZpbml0aW9uLmV4cGxpY2l0KSkpIHtcbiAgICAvLyBTY2hlbWEuZXh0ZW5kKHsgZXhwbGljaXQ6IFsgdHlwZTEsIHR5cGUyLCAuLi4gXSwgaW1wbGljaXQ6IFsgdHlwZTEsIHR5cGUyLCAuLi4gXSB9KVxuICAgIGlmIChkZWZpbml0aW9uLmltcGxpY2l0KSBpbXBsaWNpdCA9IGltcGxpY2l0LmNvbmNhdChkZWZpbml0aW9uLmltcGxpY2l0KTtcbiAgICBpZiAoZGVmaW5pdGlvbi5leHBsaWNpdCkgZXhwbGljaXQgPSBleHBsaWNpdC5jb25jYXQoZGVmaW5pdGlvbi5leHBsaWNpdCk7XG5cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKCdTY2hlbWEuZXh0ZW5kIGFyZ3VtZW50IHNob3VsZCBiZSBhIFR5cGUsIFsgVHlwZSBdLCAnICtcbiAgICAgICdvciBhIHNjaGVtYSBkZWZpbml0aW9uICh7IGltcGxpY2l0OiBbLi4uXSwgZXhwbGljaXQ6IFsuLi5dIH0pJyk7XG4gIH1cblxuICBpbXBsaWNpdC5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlJDEpIHtcbiAgICBpZiAoISh0eXBlJDEgaW5zdGFuY2VvZiB0eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IGV4Y2VwdGlvbignU3BlY2lmaWVkIGxpc3Qgb2YgWUFNTCB0eXBlcyAob3IgYSBzaW5nbGUgVHlwZSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVR5cGUgb2JqZWN0LicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlJDEubG9hZEtpbmQgJiYgdHlwZSQxLmxvYWRLaW5kICE9PSAnc2NhbGFyJykge1xuICAgICAgdGhyb3cgbmV3IGV4Y2VwdGlvbignVGhlcmUgaXMgYSBub24tc2NhbGFyIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIEltcGxpY2l0IHJlc29sdmluZyBvZiBzdWNoIHR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUkMS5tdWx0aSkge1xuICAgICAgdGhyb3cgbmV3IGV4Y2VwdGlvbignVGhlcmUgaXMgYSBtdWx0aSB0eXBlIGluIHRoZSBpbXBsaWNpdCBsaXN0IG9mIGEgc2NoZW1hLiBNdWx0aSB0YWdzIGNhbiBvbmx5IGJlIGxpc3RlZCBhcyBleHBsaWNpdC4nKTtcbiAgICB9XG4gIH0pO1xuXG4gIGV4cGxpY2l0LmZvckVhY2goZnVuY3Rpb24gKHR5cGUkMSkge1xuICAgIGlmICghKHR5cGUkMSBpbnN0YW5jZW9mIHR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKCdTcGVjaWZpZWQgbGlzdCBvZiBZQU1MIHR5cGVzIChvciBhIHNpbmdsZSBUeXBlIG9iamVjdCkgY29udGFpbnMgYSBub24tVHlwZSBvYmplY3QuJyk7XG4gICAgfVxuICB9KTtcblxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShTY2hlbWEkMS5wcm90b3R5cGUpO1xuXG4gIHJlc3VsdC5pbXBsaWNpdCA9ICh0aGlzLmltcGxpY2l0IHx8IFtdKS5jb25jYXQoaW1wbGljaXQpO1xuICByZXN1bHQuZXhwbGljaXQgPSAodGhpcy5leHBsaWNpdCB8fCBbXSkuY29uY2F0KGV4cGxpY2l0KTtcblxuICByZXN1bHQuY29tcGlsZWRJbXBsaWNpdCA9IGNvbXBpbGVMaXN0KHJlc3VsdCwgJ2ltcGxpY2l0Jyk7XG4gIHJlc3VsdC5jb21waWxlZEV4cGxpY2l0ID0gY29tcGlsZUxpc3QocmVzdWx0LCAnZXhwbGljaXQnKTtcbiAgcmVzdWx0LmNvbXBpbGVkVHlwZU1hcCAgPSBjb21waWxlTWFwKHJlc3VsdC5jb21waWxlZEltcGxpY2l0LCByZXN1bHQuY29tcGlsZWRFeHBsaWNpdCk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblxudmFyIHNjaGVtYSA9IFNjaGVtYSQxO1xuXG52YXIgc3RyID0gbmV3IHR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOnN0cicsIHtcbiAga2luZDogJ3NjYWxhcicsXG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gKGRhdGEpIHsgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDogJyc7IH1cbn0pO1xuXG52YXIgc2VxID0gbmV3IHR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOnNlcScsIHtcbiAga2luZDogJ3NlcXVlbmNlJyxcbiAgY29uc3RydWN0OiBmdW5jdGlvbiAoZGF0YSkgeyByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiBbXTsgfVxufSk7XG5cbnZhciBtYXAgPSBuZXcgdHlwZSgndGFnOnlhbWwub3JnLDIwMDI6bWFwJywge1xuICBraW5kOiAnbWFwcGluZycsXG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gKGRhdGEpIHsgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDoge307IH1cbn0pO1xuXG52YXIgZmFpbHNhZmUgPSBuZXcgc2NoZW1hKHtcbiAgZXhwbGljaXQ6IFtcbiAgICBzdHIsXG4gICAgc2VxLFxuICAgIG1hcFxuICBdXG59KTtcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxOdWxsKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiB0cnVlO1xuXG4gIHZhciBtYXggPSBkYXRhLmxlbmd0aDtcblxuICByZXR1cm4gKG1heCA9PT0gMSAmJiBkYXRhID09PSAnficpIHx8XG4gICAgICAgICAobWF4ID09PSA0ICYmIChkYXRhID09PSAnbnVsbCcgfHwgZGF0YSA9PT0gJ051bGwnIHx8IGRhdGEgPT09ICdOVUxMJykpO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sTnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCA9PT0gbnVsbDtcbn1cblxudmFyIF9udWxsID0gbmV3IHR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOm51bGwnLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbE51bGwsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbE51bGwsXG4gIHByZWRpY2F0ZTogaXNOdWxsLFxuICByZXByZXNlbnQ6IHtcbiAgICBjYW5vbmljYWw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICd+JzsgICAgfSxcbiAgICBsb3dlcmNhc2U6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICdudWxsJzsgfSxcbiAgICB1cHBlcmNhc2U6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICdOVUxMJzsgfSxcbiAgICBjYW1lbGNhc2U6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICdOdWxsJzsgfSxcbiAgICBlbXB0eTogICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuICcnOyAgICAgfVxuICB9LFxuICBkZWZhdWx0U3R5bGU6ICdsb3dlcmNhc2UnXG59KTtcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxCb29sZWFuKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICB2YXIgbWF4ID0gZGF0YS5sZW5ndGg7XG5cbiAgcmV0dXJuIChtYXggPT09IDQgJiYgKGRhdGEgPT09ICd0cnVlJyB8fCBkYXRhID09PSAnVHJ1ZScgfHwgZGF0YSA9PT0gJ1RSVUUnKSkgfHxcbiAgICAgICAgIChtYXggPT09IDUgJiYgKGRhdGEgPT09ICdmYWxzZScgfHwgZGF0YSA9PT0gJ0ZhbHNlJyB8fCBkYXRhID09PSAnRkFMU0UnKSk7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxCb29sZWFuKGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEgPT09ICd0cnVlJyB8fFxuICAgICAgICAgZGF0YSA9PT0gJ1RydWUnIHx8XG4gICAgICAgICBkYXRhID09PSAnVFJVRSc7XG59XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbihvYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBCb29sZWFuXSc7XG59XG5cbnZhciBib29sID0gbmV3IHR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOmJvb2wnLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbEJvb2xlYW4sXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEJvb2xlYW4sXG4gIHByZWRpY2F0ZTogaXNCb29sZWFuLFxuICByZXByZXNlbnQ6IHtcbiAgICBsb3dlcmNhc2U6IGZ1bmN0aW9uIChvYmplY3QpIHsgcmV0dXJuIG9iamVjdCA/ICd0cnVlJyA6ICdmYWxzZSc7IH0sXG4gICAgdXBwZXJjYXNlOiBmdW5jdGlvbiAob2JqZWN0KSB7IHJldHVybiBvYmplY3QgPyAnVFJVRScgOiAnRkFMU0UnOyB9LFxuICAgIGNhbWVsY2FzZTogZnVuY3Rpb24gKG9iamVjdCkgeyByZXR1cm4gb2JqZWN0ID8gJ1RydWUnIDogJ0ZhbHNlJzsgfVxuICB9LFxuICBkZWZhdWx0U3R5bGU6ICdsb3dlcmNhc2UnXG59KTtcblxuZnVuY3Rpb24gaXNIZXhDb2RlKGMpIHtcbiAgcmV0dXJuICgoMHgzMC8qIDAgKi8gPD0gYykgJiYgKGMgPD0gMHgzOS8qIDkgKi8pKSB8fFxuICAgICAgICAgKCgweDQxLyogQSAqLyA8PSBjKSAmJiAoYyA8PSAweDQ2LyogRiAqLykpIHx8XG4gICAgICAgICAoKDB4NjEvKiBhICovIDw9IGMpICYmIChjIDw9IDB4NjYvKiBmICovKSk7XG59XG5cbmZ1bmN0aW9uIGlzT2N0Q29kZShjKSB7XG4gIHJldHVybiAoKDB4MzAvKiAwICovIDw9IGMpICYmIChjIDw9IDB4MzcvKiA3ICovKSk7XG59XG5cbmZ1bmN0aW9uIGlzRGVjQ29kZShjKSB7XG4gIHJldHVybiAoKDB4MzAvKiAwICovIDw9IGMpICYmIChjIDw9IDB4MzkvKiA5ICovKSk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sSW50ZWdlcihkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIG1heCA9IGRhdGEubGVuZ3RoLFxuICAgICAgaW5kZXggPSAwLFxuICAgICAgaGFzRGlnaXRzID0gZmFsc2UsXG4gICAgICBjaDtcblxuICBpZiAoIW1heCkgcmV0dXJuIGZhbHNlO1xuXG4gIGNoID0gZGF0YVtpbmRleF07XG5cbiAgLy8gc2lnblxuICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnKSB7XG4gICAgY2ggPSBkYXRhWysraW5kZXhdO1xuICB9XG5cbiAgaWYgKGNoID09PSAnMCcpIHtcbiAgICAvLyAwXG4gICAgaWYgKGluZGV4ICsgMSA9PT0gbWF4KSByZXR1cm4gdHJ1ZTtcbiAgICBjaCA9IGRhdGFbKytpbmRleF07XG5cbiAgICAvLyBiYXNlIDIsIGJhc2UgOCwgYmFzZSAxNlxuXG4gICAgaWYgKGNoID09PSAnYicpIHtcbiAgICAgIC8vIGJhc2UgMlxuICAgICAgaW5kZXgrKztcblxuICAgICAgZm9yICg7IGluZGV4IDwgbWF4OyBpbmRleCsrKSB7XG4gICAgICAgIGNoID0gZGF0YVtpbmRleF07XG4gICAgICAgIGlmIChjaCA9PT0gJ18nKSBjb250aW51ZTtcbiAgICAgICAgaWYgKGNoICE9PSAnMCcgJiYgY2ggIT09ICcxJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICBoYXNEaWdpdHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0RpZ2l0cyAmJiBjaCAhPT0gJ18nO1xuICAgIH1cblxuXG4gICAgaWYgKGNoID09PSAneCcpIHtcbiAgICAgIC8vIGJhc2UgMTZcbiAgICAgIGluZGV4Kys7XG5cbiAgICAgIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykge1xuICAgICAgICBjaCA9IGRhdGFbaW5kZXhdO1xuICAgICAgICBpZiAoY2ggPT09ICdfJykgY29udGludWU7XG4gICAgICAgIGlmICghaXNIZXhDb2RlKGRhdGEuY2hhckNvZGVBdChpbmRleCkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGhhc0RpZ2l0cyA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzRGlnaXRzICYmIGNoICE9PSAnXyc7XG4gICAgfVxuXG5cbiAgICBpZiAoY2ggPT09ICdvJykge1xuICAgICAgLy8gYmFzZSA4XG4gICAgICBpbmRleCsrO1xuXG4gICAgICBmb3IgKDsgaW5kZXggPCBtYXg7IGluZGV4KyspIHtcbiAgICAgICAgY2ggPSBkYXRhW2luZGV4XTtcbiAgICAgICAgaWYgKGNoID09PSAnXycpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIWlzT2N0Q29kZShkYXRhLmNoYXJDb2RlQXQoaW5kZXgpKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBoYXNEaWdpdHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0RpZ2l0cyAmJiBjaCAhPT0gJ18nO1xuICAgIH1cbiAgfVxuXG4gIC8vIGJhc2UgMTAgKGV4Y2VwdCAwKVxuXG4gIC8vIHZhbHVlIHNob3VsZCBub3Qgc3RhcnQgd2l0aCBgX2A7XG4gIGlmIChjaCA9PT0gJ18nKSByZXR1cm4gZmFsc2U7XG5cbiAgZm9yICg7IGluZGV4IDwgbWF4OyBpbmRleCsrKSB7XG4gICAgY2ggPSBkYXRhW2luZGV4XTtcbiAgICBpZiAoY2ggPT09ICdfJykgY29udGludWU7XG4gICAgaWYgKCFpc0RlY0NvZGUoZGF0YS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaGFzRGlnaXRzID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIFNob3VsZCBoYXZlIGRpZ2l0cyBhbmQgc2hvdWxkIG5vdCBlbmQgd2l0aCBgX2BcbiAgaWYgKCFoYXNEaWdpdHMgfHwgY2ggPT09ICdfJykgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sSW50ZWdlcihkYXRhKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGEsIHNpZ24gPSAxLCBjaDtcblxuICBpZiAodmFsdWUuaW5kZXhPZignXycpICE9PSAtMSkge1xuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXy9nLCAnJyk7XG4gIH1cblxuICBjaCA9IHZhbHVlWzBdO1xuXG4gIGlmIChjaCA9PT0gJy0nIHx8IGNoID09PSAnKycpIHtcbiAgICBpZiAoY2ggPT09ICctJykgc2lnbiA9IC0xO1xuICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSk7XG4gICAgY2ggPSB2YWx1ZVswXTtcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PT0gJzAnKSByZXR1cm4gMDtcblxuICBpZiAoY2ggPT09ICcwJykge1xuICAgIGlmICh2YWx1ZVsxXSA9PT0gJ2InKSByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCAyKTtcbiAgICBpZiAodmFsdWVbMV0gPT09ICd4JykgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgMTYpO1xuICAgIGlmICh2YWx1ZVsxXSA9PT0gJ28nKSByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCA4KTtcbiAgfVxuXG4gIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUsIDEwKTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlZ2VyKG9iamVjdCkge1xuICByZXR1cm4gKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiZcbiAgICAgICAgIChvYmplY3QgJSAxID09PSAwICYmICFjb21tb24uaXNOZWdhdGl2ZVplcm8ob2JqZWN0KSk7XG59XG5cbnZhciBpbnQgPSBuZXcgdHlwZSgndGFnOnlhbWwub3JnLDIwMDI6aW50Jywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxJbnRlZ2VyLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxJbnRlZ2VyLFxuICBwcmVkaWNhdGU6IGlzSW50ZWdlcixcbiAgcmVwcmVzZW50OiB7XG4gICAgYmluYXJ5OiAgICAgIGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiA+PSAwID8gJzBiJyArIG9iai50b1N0cmluZygyKSA6ICctMGInICsgb2JqLnRvU3RyaW5nKDIpLnNsaWNlKDEpOyB9LFxuICAgIG9jdGFsOiAgICAgICBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogPj0gMCA/ICcwbycgICsgb2JqLnRvU3RyaW5nKDgpIDogJy0wbycgICsgb2JqLnRvU3RyaW5nKDgpLnNsaWNlKDEpOyB9LFxuICAgIGRlY2ltYWw6ICAgICBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmoudG9TdHJpbmcoMTApOyB9LFxuICAgIC8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbiAgICBoZXhhZGVjaW1hbDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqID49IDAgPyAnMHgnICsgb2JqLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpIDogICctMHgnICsgb2JqLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnNsaWNlKDEpOyB9XG4gIH0sXG4gIGRlZmF1bHRTdHlsZTogJ2RlY2ltYWwnLFxuICBzdHlsZUFsaWFzZXM6IHtcbiAgICBiaW5hcnk6ICAgICAgWyAyLCAgJ2JpbicgXSxcbiAgICBvY3RhbDogICAgICAgWyA4LCAgJ29jdCcgXSxcbiAgICBkZWNpbWFsOiAgICAgWyAxMCwgJ2RlYycgXSxcbiAgICBoZXhhZGVjaW1hbDogWyAxNiwgJ2hleCcgXVxuICB9XG59KTtcblxudmFyIFlBTUxfRkxPQVRfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXG4gIC8vIDIuNWU0LCAyLjUgYW5kIGludGVnZXJzXG4gICdeKD86Wy0rXT8oPzpbMC05XVswLTlfXSopKD86XFxcXC5bMC05X10qKT8oPzpbZUVdWy0rXT9bMC05XSspPycgK1xuICAvLyAuMmU0LCAuMlxuICAvLyBzcGVjaWFsIGNhc2UsIHNlZW1zIG5vdCBmcm9tIHNwZWNcbiAgJ3xcXFxcLlswLTlfXSsoPzpbZUVdWy0rXT9bMC05XSspPycgK1xuICAvLyAuaW5mXG4gICd8Wy0rXT9cXFxcLig/OmluZnxJbmZ8SU5GKScgK1xuICAvLyAubmFuXG4gICd8XFxcXC4oPzpuYW58TmFOfE5BTikpJCcpO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbEZsb2F0KGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICBpZiAoIVlBTUxfRkxPQVRfUEFUVEVSTi50ZXN0KGRhdGEpIHx8XG4gICAgICAvLyBRdWljayBoYWNrIHRvIG5vdCBhbGxvdyBpbnRlZ2VycyBlbmQgd2l0aCBgX2BcbiAgICAgIC8vIFByb2JhYmx5IHNob3VsZCB1cGRhdGUgcmVnZXhwICYgY2hlY2sgc3BlZWRcbiAgICAgIGRhdGFbZGF0YS5sZW5ndGggLSAxXSA9PT0gJ18nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxGbG9hdChkYXRhKSB7XG4gIHZhciB2YWx1ZSwgc2lnbjtcblxuICB2YWx1ZSAgPSBkYXRhLnJlcGxhY2UoL18vZywgJycpLnRvTG93ZXJDYXNlKCk7XG4gIHNpZ24gICA9IHZhbHVlWzBdID09PSAnLScgPyAtMSA6IDE7XG5cbiAgaWYgKCcrLScuaW5kZXhPZih2YWx1ZVswXSkgPj0gMCkge1xuICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSk7XG4gIH1cblxuICBpZiAodmFsdWUgPT09ICcuaW5mJykge1xuICAgIHJldHVybiAoc2lnbiA9PT0gMSkgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgOiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5cbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJy5uYW4nKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICByZXR1cm4gc2lnbiAqIHBhcnNlRmxvYXQodmFsdWUsIDEwKTtcbn1cblxuXG52YXIgU0NJRU5USUZJQ19XSVRIT1VUX0RPVCA9IC9eWy0rXT9bMC05XStlLztcblxuZnVuY3Rpb24gcmVwcmVzZW50WWFtbEZsb2F0KG9iamVjdCwgc3R5bGUpIHtcbiAgdmFyIHJlcztcblxuICBpZiAoaXNOYU4ob2JqZWN0KSkge1xuICAgIHN3aXRjaCAoc3R5bGUpIHtcbiAgICAgIGNhc2UgJ2xvd2VyY2FzZSc6IHJldHVybiAnLm5hbic7XG4gICAgICBjYXNlICd1cHBlcmNhc2UnOiByZXR1cm4gJy5OQU4nO1xuICAgICAgY2FzZSAnY2FtZWxjYXNlJzogcmV0dXJuICcuTmFOJztcbiAgICB9XG4gIH0gZWxzZSBpZiAoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZID09PSBvYmplY3QpIHtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlICdsb3dlcmNhc2UnOiByZXR1cm4gJy5pbmYnO1xuICAgICAgY2FzZSAndXBwZXJjYXNlJzogcmV0dXJuICcuSU5GJztcbiAgICAgIGNhc2UgJ2NhbWVsY2FzZSc6IHJldHVybiAnLkluZic7XG4gICAgfVxuICB9IGVsc2UgaWYgKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSA9PT0gb2JqZWN0KSB7XG4gICAgc3dpdGNoIChzdHlsZSkge1xuICAgICAgY2FzZSAnbG93ZXJjYXNlJzogcmV0dXJuICctLmluZic7XG4gICAgICBjYXNlICd1cHBlcmNhc2UnOiByZXR1cm4gJy0uSU5GJztcbiAgICAgIGNhc2UgJ2NhbWVsY2FzZSc6IHJldHVybiAnLS5JbmYnO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjb21tb24uaXNOZWdhdGl2ZVplcm8ob2JqZWN0KSkge1xuICAgIHJldHVybiAnLTAuMCc7XG4gIH1cblxuICByZXMgPSBvYmplY3QudG9TdHJpbmcoMTApO1xuXG4gIC8vIEpTIHN0cmluZ2lmaWVyIGNhbiBidWlsZCBzY2llbnRpZmljIGZvcm1hdCB3aXRob3V0IGRvdHM6IDVlLTEwMCxcbiAgLy8gd2hpbGUgWUFNTCByZXF1cmVzIGRvdDogNS5lLTEwMC4gRml4IGl0IHdpdGggc2ltcGxlIGhhY2tcblxuICByZXR1cm4gU0NJRU5USUZJQ19XSVRIT1VUX0RPVC50ZXN0KHJlcykgPyByZXMucmVwbGFjZSgnZScsICcuZScpIDogcmVzO1xufVxuXG5mdW5jdGlvbiBpc0Zsb2F0KG9iamVjdCkge1xuICByZXR1cm4gKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBOdW1iZXJdJykgJiZcbiAgICAgICAgIChvYmplY3QgJSAxICE9PSAwIHx8IGNvbW1vbi5pc05lZ2F0aXZlWmVybyhvYmplY3QpKTtcbn1cblxudmFyIGZsb2F0ID0gbmV3IHR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOmZsb2F0Jywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxGbG9hdCxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sRmxvYXQsXG4gIHByZWRpY2F0ZTogaXNGbG9hdCxcbiAgcmVwcmVzZW50OiByZXByZXNlbnRZYW1sRmxvYXQsXG4gIGRlZmF1bHRTdHlsZTogJ2xvd2VyY2FzZSdcbn0pO1xuXG52YXIganNvbiA9IGZhaWxzYWZlLmV4dGVuZCh7XG4gIGltcGxpY2l0OiBbXG4gICAgX251bGwsXG4gICAgYm9vbCxcbiAgICBpbnQsXG4gICAgZmxvYXRcbiAgXVxufSk7XG5cbnZhciBjb3JlID0ganNvbjtcblxudmFyIFlBTUxfREFURV9SRUdFWFAgPSBuZXcgUmVnRXhwKFxuICAnXihbMC05XVswLTldWzAtOV1bMC05XSknICAgICAgICAgICsgLy8gWzFdIHllYXJcbiAgJy0oWzAtOV1bMC05XSknICAgICAgICAgICAgICAgICAgICArIC8vIFsyXSBtb250aFxuICAnLShbMC05XVswLTldKSQnKTsgICAgICAgICAgICAgICAgICAgLy8gWzNdIGRheVxuXG52YXIgWUFNTF9USU1FU1RBTVBfUkVHRVhQID0gbmV3IFJlZ0V4cChcbiAgJ14oWzAtOV1bMC05XVswLTldWzAtOV0pJyAgICAgICAgICArIC8vIFsxXSB5ZWFyXG4gICctKFswLTldWzAtOV0/KScgICAgICAgICAgICAgICAgICAgKyAvLyBbMl0gbW9udGhcbiAgJy0oWzAtOV1bMC05XT8pJyAgICAgICAgICAgICAgICAgICArIC8vIFszXSBkYXlcbiAgJyg/OltUdF18WyBcXFxcdF0rKScgICAgICAgICAgICAgICAgICsgLy8gLi4uXG4gICcoWzAtOV1bMC05XT8pJyAgICAgICAgICAgICAgICAgICAgKyAvLyBbNF0gaG91clxuICAnOihbMC05XVswLTldKScgICAgICAgICAgICAgICAgICAgICsgLy8gWzVdIG1pbnV0ZVxuICAnOihbMC05XVswLTldKScgICAgICAgICAgICAgICAgICAgICsgLy8gWzZdIHNlY29uZFxuICAnKD86XFxcXC4oWzAtOV0qKSk/JyAgICAgICAgICAgICAgICAgKyAvLyBbN10gZnJhY3Rpb25cbiAgJyg/OlsgXFxcXHRdKihafChbLStdKShbMC05XVswLTldPyknICsgLy8gWzhdIHR6IFs5XSB0el9zaWduIFsxMF0gdHpfaG91clxuICAnKD86OihbMC05XVswLTldKSk/KSk/JCcpOyAgICAgICAgICAgLy8gWzExXSB0el9taW51dGVcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxUaW1lc3RhbXAoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoWUFNTF9EQVRFX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKFlBTUxfVElNRVNUQU1QX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sVGltZXN0YW1wKGRhdGEpIHtcbiAgdmFyIG1hdGNoLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhY3Rpb24gPSAwLFxuICAgICAgZGVsdGEgPSBudWxsLCB0el9ob3VyLCB0el9taW51dGUsIGRhdGU7XG5cbiAgbWF0Y2ggPSBZQU1MX0RBVEVfUkVHRVhQLmV4ZWMoZGF0YSk7XG4gIGlmIChtYXRjaCA9PT0gbnVsbCkgbWF0Y2ggPSBZQU1MX1RJTUVTVEFNUF9SRUdFWFAuZXhlYyhkYXRhKTtcblxuICBpZiAobWF0Y2ggPT09IG51bGwpIHRocm93IG5ldyBFcnJvcignRGF0ZSByZXNvbHZlIGVycm9yJyk7XG5cbiAgLy8gbWF0Y2g6IFsxXSB5ZWFyIFsyXSBtb250aCBbM10gZGF5XG5cbiAgeWVhciA9ICsobWF0Y2hbMV0pO1xuICBtb250aCA9ICsobWF0Y2hbMl0pIC0gMTsgLy8gSlMgbW9udGggc3RhcnRzIHdpdGggMFxuICBkYXkgPSArKG1hdGNoWzNdKTtcblxuICBpZiAoIW1hdGNoWzRdKSB7IC8vIG5vIGhvdXJcbiAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSkpO1xuICB9XG5cbiAgLy8gbWF0Y2g6IFs0XSBob3VyIFs1XSBtaW51dGUgWzZdIHNlY29uZCBbN10gZnJhY3Rpb25cblxuICBob3VyID0gKyhtYXRjaFs0XSk7XG4gIG1pbnV0ZSA9ICsobWF0Y2hbNV0pO1xuICBzZWNvbmQgPSArKG1hdGNoWzZdKTtcblxuICBpZiAobWF0Y2hbN10pIHtcbiAgICBmcmFjdGlvbiA9IG1hdGNoWzddLnNsaWNlKDAsIDMpO1xuICAgIHdoaWxlIChmcmFjdGlvbi5sZW5ndGggPCAzKSB7IC8vIG1pbGxpLXNlY29uZHNcbiAgICAgIGZyYWN0aW9uICs9ICcwJztcbiAgICB9XG4gICAgZnJhY3Rpb24gPSArZnJhY3Rpb247XG4gIH1cblxuICAvLyBtYXRjaDogWzhdIHR6IFs5XSB0el9zaWduIFsxMF0gdHpfaG91ciBbMTFdIHR6X21pbnV0ZVxuXG4gIGlmIChtYXRjaFs5XSkge1xuICAgIHR6X2hvdXIgPSArKG1hdGNoWzEwXSk7XG4gICAgdHpfbWludXRlID0gKyhtYXRjaFsxMV0gfHwgMCk7XG4gICAgZGVsdGEgPSAodHpfaG91ciAqIDYwICsgdHpfbWludXRlKSAqIDYwMDAwOyAvLyBkZWx0YSBpbiBtaWxpLXNlY29uZHNcbiAgICBpZiAobWF0Y2hbOV0gPT09ICctJykgZGVsdGEgPSAtZGVsdGE7XG4gIH1cblxuICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZyYWN0aW9uKSk7XG5cbiAgaWYgKGRlbHRhKSBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgLSBkZWx0YSk7XG5cbiAgcmV0dXJuIGRhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcHJlc2VudFlhbWxUaW1lc3RhbXAob2JqZWN0IC8qLCBzdHlsZSovKSB7XG4gIHJldHVybiBvYmplY3QudG9JU09TdHJpbmcoKTtcbn1cblxudmFyIHRpbWVzdGFtcCA9IG5ldyB0eXBlKCd0YWc6eWFtbC5vcmcsMjAwMjp0aW1lc3RhbXAnLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbFRpbWVzdGFtcCxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sVGltZXN0YW1wLFxuICBpbnN0YW5jZU9mOiBEYXRlLFxuICByZXByZXNlbnQ6IHJlcHJlc2VudFlhbWxUaW1lc3RhbXBcbn0pO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbE1lcmdlKGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEgPT09ICc8PCcgfHwgZGF0YSA9PT0gbnVsbDtcbn1cblxudmFyIG1lcmdlID0gbmV3IHR5cGUoJ3RhZzp5YW1sLm9yZywyMDAyOm1lcmdlJywge1xuICBraW5kOiAnc2NhbGFyJyxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxNZXJnZVxufSk7XG5cbi8qZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSovXG5cblxuXG5cblxuLy8gWyA2NCwgNjUsIDY2IF0gLT4gWyBwYWRkaW5nLCBDUiwgTEYgXVxudmFyIEJBU0U2NF9NQVAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cXG5cXHInO1xuXG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sQmluYXJ5KGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICB2YXIgY29kZSwgaWR4LCBiaXRsZW4gPSAwLCBtYXggPSBkYXRhLmxlbmd0aCwgbWFwID0gQkFTRTY0X01BUDtcblxuICAvLyBDb252ZXJ0IG9uZSBieSBvbmUuXG4gIGZvciAoaWR4ID0gMDsgaWR4IDwgbWF4OyBpZHgrKykge1xuICAgIGNvZGUgPSBtYXAuaW5kZXhPZihkYXRhLmNoYXJBdChpZHgpKTtcblxuICAgIC8vIFNraXAgQ1IvTEZcbiAgICBpZiAoY29kZSA+IDY0KSBjb250aW51ZTtcblxuICAgIC8vIEZhaWwgb24gaWxsZWdhbCBjaGFyYWN0ZXJzXG4gICAgaWYgKGNvZGUgPCAwKSByZXR1cm4gZmFsc2U7XG5cbiAgICBiaXRsZW4gKz0gNjtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhbnkgYml0cyBsZWZ0LCBzb3VyY2Ugd2FzIGNvcnJ1cHRlZFxuICByZXR1cm4gKGJpdGxlbiAlIDgpID09PSAwO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sQmluYXJ5KGRhdGEpIHtcbiAgdmFyIGlkeCwgdGFpbGJpdHMsXG4gICAgICBpbnB1dCA9IGRhdGEucmVwbGFjZSgvW1xcclxcbj1dL2csICcnKSwgLy8gcmVtb3ZlIENSL0xGICYgcGFkZGluZyB0byBzaW1wbGlmeSBzY2FuXG4gICAgICBtYXggPSBpbnB1dC5sZW5ndGgsXG4gICAgICBtYXAgPSBCQVNFNjRfTUFQLFxuICAgICAgYml0cyA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICAvLyBDb2xsZWN0IGJ5IDYqNCBiaXRzICgzIGJ5dGVzKVxuXG4gIGZvciAoaWR4ID0gMDsgaWR4IDwgbWF4OyBpZHgrKykge1xuICAgIGlmICgoaWR4ICUgNCA9PT0gMCkgJiYgaWR4KSB7XG4gICAgICByZXN1bHQucHVzaCgoYml0cyA+PiAxNikgJiAweEZGKTtcbiAgICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDgpICYgMHhGRik7XG4gICAgICByZXN1bHQucHVzaChiaXRzICYgMHhGRik7XG4gICAgfVxuXG4gICAgYml0cyA9IChiaXRzIDw8IDYpIHwgbWFwLmluZGV4T2YoaW5wdXQuY2hhckF0KGlkeCkpO1xuICB9XG5cbiAgLy8gRHVtcCB0YWlsXG5cbiAgdGFpbGJpdHMgPSAobWF4ICUgNCkgKiA2O1xuXG4gIGlmICh0YWlsYml0cyA9PT0gMCkge1xuICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDE2KSAmIDB4RkYpO1xuICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDgpICYgMHhGRik7XG4gICAgcmVzdWx0LnB1c2goYml0cyAmIDB4RkYpO1xuICB9IGVsc2UgaWYgKHRhaWxiaXRzID09PSAxOCkge1xuICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDEwKSAmIDB4RkYpO1xuICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDIpICYgMHhGRik7XG4gIH0gZWxzZSBpZiAodGFpbGJpdHMgPT09IDEyKSB7XG4gICAgcmVzdWx0LnB1c2goKGJpdHMgPj4gNCkgJiAweEZGKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgVWludDhBcnJheShyZXN1bHQpO1xufVxuXG5mdW5jdGlvbiByZXByZXNlbnRZYW1sQmluYXJ5KG9iamVjdCAvKiwgc3R5bGUqLykge1xuICB2YXIgcmVzdWx0ID0gJycsIGJpdHMgPSAwLCBpZHgsIHRhaWwsXG4gICAgICBtYXggPSBvYmplY3QubGVuZ3RoLFxuICAgICAgbWFwID0gQkFTRTY0X01BUDtcblxuICAvLyBDb252ZXJ0IGV2ZXJ5IHRocmVlIGJ5dGVzIHRvIDQgQVNDSUkgY2hhcmFjdGVycy5cblxuICBmb3IgKGlkeCA9IDA7IGlkeCA8IG1heDsgaWR4KyspIHtcbiAgICBpZiAoKGlkeCAlIDMgPT09IDApICYmIGlkeCkge1xuICAgICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAxOCkgJiAweDNGXTtcbiAgICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gMTIpICYgMHgzRl07XG4gICAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDYpICYgMHgzRl07XG4gICAgICByZXN1bHQgKz0gbWFwW2JpdHMgJiAweDNGXTtcbiAgICB9XG5cbiAgICBiaXRzID0gKGJpdHMgPDwgOCkgKyBvYmplY3RbaWR4XTtcbiAgfVxuXG4gIC8vIER1bXAgdGFpbFxuXG4gIHRhaWwgPSBtYXggJSAzO1xuXG4gIGlmICh0YWlsID09PSAwKSB7XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAxOCkgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDEyKSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gNikgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwW2JpdHMgJiAweDNGXTtcbiAgfSBlbHNlIGlmICh0YWlsID09PSAyKSB7XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAxMCkgJiAweDNGXTtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDQpICYgMHgzRl07XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA8PCAyKSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbNjRdO1xuICB9IGVsc2UgaWYgKHRhaWwgPT09IDEpIHtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDIpICYgMHgzRl07XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA8PCA0KSAmIDB4M0ZdO1xuICAgIHJlc3VsdCArPSBtYXBbNjRdO1xuICAgIHJlc3VsdCArPSBtYXBbNjRdO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXNCaW5hcnkob2JqKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gICdbb2JqZWN0IFVpbnQ4QXJyYXldJztcbn1cblxudmFyIGJpbmFyeSA9IG5ldyB0eXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpiaW5hcnknLCB7XG4gIGtpbmQ6ICdzY2FsYXInLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbEJpbmFyeSxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sQmluYXJ5LFxuICBwcmVkaWNhdGU6IGlzQmluYXJ5LFxuICByZXByZXNlbnQ6IHJlcHJlc2VudFlhbWxCaW5hcnlcbn0pO1xuXG52YXIgX2hhc093blByb3BlcnR5JDMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF90b1N0cmluZyQyICAgICAgID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxPbWFwKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiB0cnVlO1xuXG4gIHZhciBvYmplY3RLZXlzID0gW10sIGluZGV4LCBsZW5ndGgsIHBhaXIsIHBhaXJLZXksIHBhaXJIYXNLZXksXG4gICAgICBvYmplY3QgPSBkYXRhO1xuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHBhaXIgPSBvYmplY3RbaW5kZXhdO1xuICAgIHBhaXJIYXNLZXkgPSBmYWxzZTtcblxuICAgIGlmIChfdG9TdHJpbmckMi5jYWxsKHBhaXIpICE9PSAnW29iamVjdCBPYmplY3RdJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChwYWlyS2V5IGluIHBhaXIpIHtcbiAgICAgIGlmIChfaGFzT3duUHJvcGVydHkkMy5jYWxsKHBhaXIsIHBhaXJLZXkpKSB7XG4gICAgICAgIGlmICghcGFpckhhc0tleSkgcGFpckhhc0tleSA9IHRydWU7XG4gICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFpckhhc0tleSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKG9iamVjdEtleXMuaW5kZXhPZihwYWlyS2V5KSA9PT0gLTEpIG9iamVjdEtleXMucHVzaChwYWlyS2V5KTtcbiAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sT21hcChkYXRhKSB7XG4gIHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6IFtdO1xufVxuXG52YXIgb21hcCA9IG5ldyB0eXBlKCd0YWc6eWFtbC5vcmcsMjAwMjpvbWFwJywge1xuICBraW5kOiAnc2VxdWVuY2UnLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbE9tYXAsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbE9tYXBcbn0pO1xuXG52YXIgX3RvU3RyaW5nJDEgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbFBhaXJzKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiB0cnVlO1xuXG4gIHZhciBpbmRleCwgbGVuZ3RoLCBwYWlyLCBrZXlzLCByZXN1bHQsXG4gICAgICBvYmplY3QgPSBkYXRhO1xuXG4gIHJlc3VsdCA9IG5ldyBBcnJheShvYmplY3QubGVuZ3RoKTtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBwYWlyID0gb2JqZWN0W2luZGV4XTtcblxuICAgIGlmIChfdG9TdHJpbmckMS5jYWxsKHBhaXIpICE9PSAnW29iamVjdCBPYmplY3RdJykgcmV0dXJuIGZhbHNlO1xuXG4gICAga2V5cyA9IE9iamVjdC5rZXlzKHBhaXIpO1xuXG4gICAgaWYgKGtleXMubGVuZ3RoICE9PSAxKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXN1bHRbaW5kZXhdID0gWyBrZXlzWzBdLCBwYWlyW2tleXNbMF1dIF07XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbFBhaXJzKGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBbXTtcblxuICB2YXIgaW5kZXgsIGxlbmd0aCwgcGFpciwga2V5cywgcmVzdWx0LFxuICAgICAgb2JqZWN0ID0gZGF0YTtcblxuICByZXN1bHQgPSBuZXcgQXJyYXkob2JqZWN0Lmxlbmd0aCk7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgcGFpciA9IG9iamVjdFtpbmRleF07XG5cbiAgICBrZXlzID0gT2JqZWN0LmtleXMocGFpcik7XG5cbiAgICByZXN1bHRbaW5kZXhdID0gWyBrZXlzWzBdLCBwYWlyW2tleXNbMF1dIF07XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG52YXIgcGFpcnMgPSBuZXcgdHlwZSgndGFnOnlhbWwub3JnLDIwMDI6cGFpcnMnLCB7XG4gIGtpbmQ6ICdzZXF1ZW5jZScsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sUGFpcnMsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFBhaXJzXG59KTtcblxudmFyIF9oYXNPd25Qcm9wZXJ0eSQyID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxTZXQoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG5cbiAgdmFyIGtleSwgb2JqZWN0ID0gZGF0YTtcblxuICBmb3IgKGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoX2hhc093blByb3BlcnR5JDIuY2FsbChvYmplY3QsIGtleSkpIHtcbiAgICAgIGlmIChvYmplY3Rba2V5XSAhPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sU2V0KGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDoge307XG59XG5cbnZhciBzZXQgPSBuZXcgdHlwZSgndGFnOnlhbWwub3JnLDIwMDI6c2V0Jywge1xuICBraW5kOiAnbWFwcGluZycsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sU2V0LFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxTZXRcbn0pO1xuXG52YXIgX2RlZmF1bHQgPSBjb3JlLmV4dGVuZCh7XG4gIGltcGxpY2l0OiBbXG4gICAgdGltZXN0YW1wLFxuICAgIG1lcmdlXG4gIF0sXG4gIGV4cGxpY2l0OiBbXG4gICAgYmluYXJ5LFxuICAgIG9tYXAsXG4gICAgcGFpcnMsXG4gICAgc2V0XG4gIF1cbn0pO1xuXG4vKmVzbGludC1kaXNhYmxlIG1heC1sZW4sbm8tdXNlLWJlZm9yZS1kZWZpbmUqL1xuXG5cblxuXG5cblxuXG52YXIgX2hhc093blByb3BlcnR5JDEgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5cbnZhciBDT05URVhUX0ZMT1dfSU4gICA9IDE7XG52YXIgQ09OVEVYVF9GTE9XX09VVCAgPSAyO1xudmFyIENPTlRFWFRfQkxPQ0tfSU4gID0gMztcbnZhciBDT05URVhUX0JMT0NLX09VVCA9IDQ7XG5cblxudmFyIENIT01QSU5HX0NMSVAgID0gMTtcbnZhciBDSE9NUElOR19TVFJJUCA9IDI7XG52YXIgQ0hPTVBJTkdfS0VFUCAgPSAzO1xuXG5cbnZhciBQQVRURVJOX05PTl9QUklOVEFCTEUgICAgICAgICA9IC9bXFx4MDAtXFx4MDhcXHgwQlxceDBDXFx4MEUtXFx4MUZcXHg3Ri1cXHg4NFxceDg2LVxceDlGXFx1RkZGRVxcdUZGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdLztcbnZhciBQQVRURVJOX05PTl9BU0NJSV9MSU5FX0JSRUFLUyA9IC9bXFx4ODVcXHUyMDI4XFx1MjAyOV0vO1xudmFyIFBBVFRFUk5fRkxPV19JTkRJQ0FUT1JTICAgICAgID0gL1ssXFxbXFxdXFx7XFx9XS87XG52YXIgUEFUVEVSTl9UQUdfSEFORExFICAgICAgICAgICAgPSAvXig/OiF8ISF8IVthLXpcXC1dKyEpJC9pO1xudmFyIFBBVFRFUk5fVEFHX1VSSSAgICAgICAgICAgICAgID0gL14oPzohfFteLFxcW1xcXVxce1xcfV0pKD86JVswLTlhLWZdezJ9fFswLTlhLXpcXC0jO1xcL1xcPzpAJj1cXCtcXCQsX1xcLiF+XFwqJ1xcKFxcKVxcW1xcXV0pKiQvaTtcblxuXG5mdW5jdGlvbiBfY2xhc3Mob2JqKSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKTsgfVxuXG5mdW5jdGlvbiBpc19FT0woYykge1xuICByZXR1cm4gKGMgPT09IDB4MEEvKiBMRiAqLykgfHwgKGMgPT09IDB4MEQvKiBDUiAqLyk7XG59XG5cbmZ1bmN0aW9uIGlzX1dISVRFX1NQQUNFKGMpIHtcbiAgcmV0dXJuIChjID09PSAweDA5LyogVGFiICovKSB8fCAoYyA9PT0gMHgyMC8qIFNwYWNlICovKTtcbn1cblxuZnVuY3Rpb24gaXNfV1NfT1JfRU9MKGMpIHtcbiAgcmV0dXJuIChjID09PSAweDA5LyogVGFiICovKSB8fFxuICAgICAgICAgKGMgPT09IDB4MjAvKiBTcGFjZSAqLykgfHxcbiAgICAgICAgIChjID09PSAweDBBLyogTEYgKi8pIHx8XG4gICAgICAgICAoYyA9PT0gMHgwRC8qIENSICovKTtcbn1cblxuZnVuY3Rpb24gaXNfRkxPV19JTkRJQ0FUT1IoYykge1xuICByZXR1cm4gYyA9PT0gMHgyQy8qICwgKi8gfHxcbiAgICAgICAgIGMgPT09IDB4NUIvKiBbICovIHx8XG4gICAgICAgICBjID09PSAweDVELyogXSAqLyB8fFxuICAgICAgICAgYyA9PT0gMHg3Qi8qIHsgKi8gfHxcbiAgICAgICAgIGMgPT09IDB4N0QvKiB9ICovO1xufVxuXG5mdW5jdGlvbiBmcm9tSGV4Q29kZShjKSB7XG4gIHZhciBsYztcblxuICBpZiAoKDB4MzAvKiAwICovIDw9IGMpICYmIChjIDw9IDB4MzkvKiA5ICovKSkge1xuICAgIHJldHVybiBjIC0gMHgzMDtcbiAgfVxuXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSovXG4gIGxjID0gYyB8IDB4MjA7XG5cbiAgaWYgKCgweDYxLyogYSAqLyA8PSBsYykgJiYgKGxjIDw9IDB4NjYvKiBmICovKSkge1xuICAgIHJldHVybiBsYyAtIDB4NjEgKyAxMDtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlZEhleExlbihjKSB7XG4gIGlmIChjID09PSAweDc4LyogeCAqLykgeyByZXR1cm4gMjsgfVxuICBpZiAoYyA9PT0gMHg3NS8qIHUgKi8pIHsgcmV0dXJuIDQ7IH1cbiAgaWYgKGMgPT09IDB4NTUvKiBVICovKSB7IHJldHVybiA4OyB9XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBmcm9tRGVjaW1hbENvZGUoYykge1xuICBpZiAoKDB4MzAvKiAwICovIDw9IGMpICYmIChjIDw9IDB4MzkvKiA5ICovKSkge1xuICAgIHJldHVybiBjIC0gMHgzMDtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gc2ltcGxlRXNjYXBlU2VxdWVuY2UoYykge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBpbmRlbnQgKi9cbiAgcmV0dXJuIChjID09PSAweDMwLyogMCAqLykgPyAnXFx4MDAnIDpcbiAgICAgICAgKGMgPT09IDB4NjEvKiBhICovKSA/ICdcXHgwNycgOlxuICAgICAgICAoYyA9PT0gMHg2Mi8qIGIgKi8pID8gJ1xceDA4JyA6XG4gICAgICAgIChjID09PSAweDc0LyogdCAqLykgPyAnXFx4MDknIDpcbiAgICAgICAgKGMgPT09IDB4MDkvKiBUYWIgKi8pID8gJ1xceDA5JyA6XG4gICAgICAgIChjID09PSAweDZFLyogbiAqLykgPyAnXFx4MEEnIDpcbiAgICAgICAgKGMgPT09IDB4NzYvKiB2ICovKSA/ICdcXHgwQicgOlxuICAgICAgICAoYyA9PT0gMHg2Ni8qIGYgKi8pID8gJ1xceDBDJyA6XG4gICAgICAgIChjID09PSAweDcyLyogciAqLykgPyAnXFx4MEQnIDpcbiAgICAgICAgKGMgPT09IDB4NjUvKiBlICovKSA/ICdcXHgxQicgOlxuICAgICAgICAoYyA9PT0gMHgyMC8qIFNwYWNlICovKSA/ICcgJyA6XG4gICAgICAgIChjID09PSAweDIyLyogXCIgKi8pID8gJ1xceDIyJyA6XG4gICAgICAgIChjID09PSAweDJGLyogLyAqLykgPyAnLycgOlxuICAgICAgICAoYyA9PT0gMHg1Qy8qIFxcICovKSA/ICdcXHg1QycgOlxuICAgICAgICAoYyA9PT0gMHg0RS8qIE4gKi8pID8gJ1xceDg1JyA6XG4gICAgICAgIChjID09PSAweDVGLyogXyAqLykgPyAnXFx4QTAnIDpcbiAgICAgICAgKGMgPT09IDB4NEMvKiBMICovKSA/ICdcXHUyMDI4JyA6XG4gICAgICAgIChjID09PSAweDUwLyogUCAqLykgPyAnXFx1MjAyOScgOiAnJztcbn1cblxuZnVuY3Rpb24gY2hhckZyb21Db2RlcG9pbnQoYykge1xuICBpZiAoYyA8PSAweEZGRkYpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgfVxuICAvLyBFbmNvZGUgVVRGLTE2IHN1cnJvZ2F0ZSBwYWlyXG4gIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VURi0xNiNDb2RlX3BvaW50c19VLjJCMDEwMDAwX3RvX1UuMkIxMEZGRkZcbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoXG4gICAgKChjIC0gMHgwMTAwMDApID4+IDEwKSArIDB4RDgwMCxcbiAgICAoKGMgLSAweDAxMDAwMCkgJiAweDAzRkYpICsgMHhEQzAwXG4gICk7XG59XG5cbnZhciBzaW1wbGVFc2NhcGVDaGVjayA9IG5ldyBBcnJheSgyNTYpOyAvLyBpbnRlZ2VyLCBmb3IgZmFzdCBhY2Nlc3NcbnZhciBzaW1wbGVFc2NhcGVNYXAgPSBuZXcgQXJyYXkoMjU2KTtcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgc2ltcGxlRXNjYXBlQ2hlY2tbaV0gPSBzaW1wbGVFc2NhcGVTZXF1ZW5jZShpKSA/IDEgOiAwO1xuICBzaW1wbGVFc2NhcGVNYXBbaV0gPSBzaW1wbGVFc2NhcGVTZXF1ZW5jZShpKTtcbn1cblxuXG5mdW5jdGlvbiBTdGF0ZSQxKGlucHV0LCBvcHRpb25zKSB7XG4gIHRoaXMuaW5wdXQgPSBpbnB1dDtcblxuICB0aGlzLmZpbGVuYW1lICA9IG9wdGlvbnNbJ2ZpbGVuYW1lJ10gIHx8IG51bGw7XG4gIHRoaXMuc2NoZW1hICAgID0gb3B0aW9uc1snc2NoZW1hJ10gICAgfHwgX2RlZmF1bHQ7XG4gIHRoaXMub25XYXJuaW5nID0gb3B0aW9uc1snb25XYXJuaW5nJ10gfHwgbnVsbDtcbiAgLy8gKEhpZGRlbikgUmVtb3ZlPyBtYWtlcyB0aGUgbG9hZGVyIHRvIGV4cGVjdCBZQU1MIDEuMSBkb2N1bWVudHNcbiAgLy8gaWYgc3VjaCBkb2N1bWVudHMgaGF2ZSBubyBleHBsaWNpdCAlWUFNTCBkaXJlY3RpdmVcbiAgdGhpcy5sZWdhY3kgICAgPSBvcHRpb25zWydsZWdhY3knXSAgICB8fCBmYWxzZTtcblxuICB0aGlzLmpzb24gICAgICA9IG9wdGlvbnNbJ2pzb24nXSAgICAgIHx8IGZhbHNlO1xuICB0aGlzLmxpc3RlbmVyICA9IG9wdGlvbnNbJ2xpc3RlbmVyJ10gIHx8IG51bGw7XG5cbiAgdGhpcy5pbXBsaWNpdFR5cGVzID0gdGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdDtcbiAgdGhpcy50eXBlTWFwICAgICAgID0gdGhpcy5zY2hlbWEuY29tcGlsZWRUeXBlTWFwO1xuXG4gIHRoaXMubGVuZ3RoICAgICA9IGlucHV0Lmxlbmd0aDtcbiAgdGhpcy5wb3NpdGlvbiAgID0gMDtcbiAgdGhpcy5saW5lICAgICAgID0gMDtcbiAgdGhpcy5saW5lU3RhcnQgID0gMDtcbiAgdGhpcy5saW5lSW5kZW50ID0gMDtcblxuICAvLyBwb3NpdGlvbiBvZiBmaXJzdCBsZWFkaW5nIHRhYiBpbiB0aGUgY3VycmVudCBsaW5lLFxuICAvLyB1c2VkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdGFicyBpbiB0aGUgaW5kZW50YXRpb25cbiAgdGhpcy5maXJzdFRhYkluTGluZSA9IC0xO1xuXG4gIHRoaXMuZG9jdW1lbnRzID0gW107XG5cbiAgLypcbiAgdGhpcy52ZXJzaW9uO1xuICB0aGlzLmNoZWNrTGluZUJyZWFrcztcbiAgdGhpcy50YWdNYXA7XG4gIHRoaXMuYW5jaG9yTWFwO1xuICB0aGlzLnRhZztcbiAgdGhpcy5hbmNob3I7XG4gIHRoaXMua2luZDtcbiAgdGhpcy5yZXN1bHQ7Ki9cblxufVxuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlRXJyb3Ioc3RhdGUsIG1lc3NhZ2UpIHtcbiAgdmFyIG1hcmsgPSB7XG4gICAgbmFtZTogICAgIHN0YXRlLmZpbGVuYW1lLFxuICAgIGJ1ZmZlcjogICBzdGF0ZS5pbnB1dC5zbGljZSgwLCAtMSksIC8vIG9taXQgdHJhaWxpbmcgXFwwXG4gICAgcG9zaXRpb246IHN0YXRlLnBvc2l0aW9uLFxuICAgIGxpbmU6ICAgICBzdGF0ZS5saW5lLFxuICAgIGNvbHVtbjogICBzdGF0ZS5wb3NpdGlvbiAtIHN0YXRlLmxpbmVTdGFydFxuICB9O1xuXG4gIG1hcmsuc25pcHBldCA9IHNuaXBwZXQobWFyayk7XG5cbiAgcmV0dXJuIG5ldyBleGNlcHRpb24obWVzc2FnZSwgbWFyayk7XG59XG5cbmZ1bmN0aW9uIHRocm93RXJyb3Ioc3RhdGUsIG1lc3NhZ2UpIHtcbiAgdGhyb3cgZ2VuZXJhdGVFcnJvcihzdGF0ZSwgbWVzc2FnZSk7XG59XG5cbmZ1bmN0aW9uIHRocm93V2FybmluZyhzdGF0ZSwgbWVzc2FnZSkge1xuICBpZiAoc3RhdGUub25XYXJuaW5nKSB7XG4gICAgc3RhdGUub25XYXJuaW5nLmNhbGwobnVsbCwgZ2VuZXJhdGVFcnJvcihzdGF0ZSwgbWVzc2FnZSkpO1xuICB9XG59XG5cblxudmFyIGRpcmVjdGl2ZUhhbmRsZXJzID0ge1xuXG4gIFlBTUw6IGZ1bmN0aW9uIGhhbmRsZVlhbWxEaXJlY3RpdmUoc3RhdGUsIG5hbWUsIGFyZ3MpIHtcblxuICAgIHZhciBtYXRjaCwgbWFqb3IsIG1pbm9yO1xuXG4gICAgaWYgKHN0YXRlLnZlcnNpb24gIT09IG51bGwpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdkdXBsaWNhdGlvbiBvZiAlWUFNTCBkaXJlY3RpdmUnKTtcbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdZQU1MIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuXG4gICAgbWF0Y2ggPSAvXihbMC05XSspXFwuKFswLTldKykkLy5leGVjKGFyZ3NbMF0pO1xuXG4gICAgaWYgKG1hdGNoID09PSBudWxsKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnaWxsLWZvcm1lZCBhcmd1bWVudCBvZiB0aGUgWUFNTCBkaXJlY3RpdmUnKTtcbiAgICB9XG5cbiAgICBtYWpvciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7XG4gICAgbWlub3IgPSBwYXJzZUludChtYXRjaFsyXSwgMTApO1xuXG4gICAgaWYgKG1ham9yICE9PSAxKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5hY2NlcHRhYmxlIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQnKTtcbiAgICB9XG5cbiAgICBzdGF0ZS52ZXJzaW9uID0gYXJnc1swXTtcbiAgICBzdGF0ZS5jaGVja0xpbmVCcmVha3MgPSAobWlub3IgPCAyKTtcblxuICAgIGlmIChtaW5vciAhPT0gMSAmJiBtaW5vciAhPT0gMikge1xuICAgICAgdGhyb3dXYXJuaW5nKHN0YXRlLCAndW5zdXBwb3J0ZWQgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCcpO1xuICAgIH1cbiAgfSxcblxuICBUQUc6IGZ1bmN0aW9uIGhhbmRsZVRhZ0RpcmVjdGl2ZShzdGF0ZSwgbmFtZSwgYXJncykge1xuXG4gICAgdmFyIGhhbmRsZSwgcHJlZml4O1xuXG4gICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnVEFHIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgdHdvIGFyZ3VtZW50cycpO1xuICAgIH1cblxuICAgIGhhbmRsZSA9IGFyZ3NbMF07XG4gICAgcHJlZml4ID0gYXJnc1sxXTtcblxuICAgIGlmICghUEFUVEVSTl9UQUdfSEFORExFLnRlc3QoaGFuZGxlKSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2lsbC1mb3JtZWQgdGFnIGhhbmRsZSAoZmlyc3QgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlJyk7XG4gICAgfVxuXG4gICAgaWYgKF9oYXNPd25Qcm9wZXJ0eSQxLmNhbGwoc3RhdGUudGFnTWFwLCBoYW5kbGUpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGhlcmUgaXMgYSBwcmV2aW91c2x5IGRlY2xhcmVkIHN1ZmZpeCBmb3IgXCInICsgaGFuZGxlICsgJ1wiIHRhZyBoYW5kbGUnKTtcbiAgICB9XG5cbiAgICBpZiAoIVBBVFRFUk5fVEFHX1VSSS50ZXN0KHByZWZpeCkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdpbGwtZm9ybWVkIHRhZyBwcmVmaXggKHNlY29uZCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmUnKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcHJlZml4ID0gZGVjb2RlVVJJQ29tcG9uZW50KHByZWZpeCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGFnIHByZWZpeCBpcyBtYWxmb3JtZWQ6ICcgKyBwcmVmaXgpO1xuICAgIH1cblxuICAgIHN0YXRlLnRhZ01hcFtoYW5kbGVdID0gcHJlZml4O1xuICB9XG59O1xuXG5cbmZ1bmN0aW9uIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBzdGFydCwgZW5kLCBjaGVja0pzb24pIHtcbiAgdmFyIF9wb3NpdGlvbiwgX2xlbmd0aCwgX2NoYXJhY3RlciwgX3Jlc3VsdDtcblxuICBpZiAoc3RhcnQgPCBlbmQpIHtcbiAgICBfcmVzdWx0ID0gc3RhdGUuaW5wdXQuc2xpY2Uoc3RhcnQsIGVuZCk7XG5cbiAgICBpZiAoY2hlY2tKc29uKSB7XG4gICAgICBmb3IgKF9wb3NpdGlvbiA9IDAsIF9sZW5ndGggPSBfcmVzdWx0Lmxlbmd0aDsgX3Bvc2l0aW9uIDwgX2xlbmd0aDsgX3Bvc2l0aW9uICs9IDEpIHtcbiAgICAgICAgX2NoYXJhY3RlciA9IF9yZXN1bHQuY2hhckNvZGVBdChfcG9zaXRpb24pO1xuICAgICAgICBpZiAoIShfY2hhcmFjdGVyID09PSAweDA5IHx8XG4gICAgICAgICAgICAgICgweDIwIDw9IF9jaGFyYWN0ZXIgJiYgX2NoYXJhY3RlciA8PSAweDEwRkZGRikpKSB7XG4gICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2V4cGVjdGVkIHZhbGlkIEpTT04gY2hhcmFjdGVyJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFBBVFRFUk5fTk9OX1BSSU5UQUJMRS50ZXN0KF9yZXN1bHQpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGhlIHN0cmVhbSBjb250YWlucyBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMnKTtcbiAgICB9XG5cbiAgICBzdGF0ZS5yZXN1bHQgKz0gX3Jlc3VsdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZU1hcHBpbmdzKHN0YXRlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvdmVycmlkYWJsZUtleXMpIHtcbiAgdmFyIHNvdXJjZUtleXMsIGtleSwgaW5kZXgsIHF1YW50aXR5O1xuXG4gIGlmICghY29tbW9uLmlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnY2Fubm90IG1lcmdlIG1hcHBpbmdzOyB0aGUgcHJvdmlkZWQgc291cmNlIG9iamVjdCBpcyB1bmFjY2VwdGFibGUnKTtcbiAgfVxuXG4gIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuXG4gIGZvciAoaW5kZXggPSAwLCBxdWFudGl0eSA9IHNvdXJjZUtleXMubGVuZ3RoOyBpbmRleCA8IHF1YW50aXR5OyBpbmRleCArPSAxKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpbmRleF07XG5cbiAgICBpZiAoIV9oYXNPd25Qcm9wZXJ0eSQxLmNhbGwoZGVzdGluYXRpb24sIGtleSkpIHtcbiAgICAgIGRlc3RpbmF0aW9uW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIG92ZXJyaWRhYmxlS2V5c1trZXldID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSxcbiAgc3RhcnRMaW5lLCBzdGFydExpbmVTdGFydCwgc3RhcnRQb3MpIHtcblxuICB2YXIgaW5kZXgsIHF1YW50aXR5O1xuXG4gIC8vIFRoZSBvdXRwdXQgaXMgYSBwbGFpbiBvYmplY3QgaGVyZSwgc28ga2V5cyBjYW4gb25seSBiZSBzdHJpbmdzLlxuICAvLyBXZSBuZWVkIHRvIGNvbnZlcnQga2V5Tm9kZSB0byBhIHN0cmluZywgYnV0IGRvaW5nIHNvIGNhbiBoYW5nIHRoZSBwcm9jZXNzXG4gIC8vIChkZWVwbHkgbmVzdGVkIGFycmF5cyB0aGF0IGV4cGxvZGUgZXhwb25lbnRpYWxseSB1c2luZyBhbGlhc2VzKS5cbiAgaWYgKEFycmF5LmlzQXJyYXkoa2V5Tm9kZSkpIHtcbiAgICBrZXlOb2RlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoa2V5Tm9kZSk7XG5cbiAgICBmb3IgKGluZGV4ID0gMCwgcXVhbnRpdHkgPSBrZXlOb2RlLmxlbmd0aDsgaW5kZXggPCBxdWFudGl0eTsgaW5kZXggKz0gMSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5Tm9kZVtpbmRleF0pKSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICduZXN0ZWQgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBrZXlzJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Yga2V5Tm9kZSA9PT0gJ29iamVjdCcgJiYgX2NsYXNzKGtleU5vZGVbaW5kZXhdKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgICAga2V5Tm9kZVtpbmRleF0gPSAnW29iamVjdCBPYmplY3RdJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBdm9pZCBjb2RlIGV4ZWN1dGlvbiBpbiBsb2FkKCkgdmlhIHRvU3RyaW5nIHByb3BlcnR5XG4gIC8vIChzdGlsbCB1c2UgaXRzIG93biB0b1N0cmluZyBmb3IgYXJyYXlzLCB0aW1lc3RhbXBzLFxuICAvLyBhbmQgd2hhdGV2ZXIgdXNlciBzY2hlbWEgZXh0ZW5zaW9ucyBoYXBwZW4gdG8gaGF2ZSBAQHRvU3RyaW5nVGFnKVxuICBpZiAodHlwZW9mIGtleU5vZGUgPT09ICdvYmplY3QnICYmIF9jbGFzcyhrZXlOb2RlKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICBrZXlOb2RlID0gJ1tvYmplY3QgT2JqZWN0XSc7XG4gIH1cblxuXG4gIGtleU5vZGUgPSBTdHJpbmcoa2V5Tm9kZSk7XG5cbiAgaWYgKF9yZXN1bHQgPT09IG51bGwpIHtcbiAgICBfcmVzdWx0ID0ge307XG4gIH1cblxuICBpZiAoa2V5VGFnID09PSAndGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UnKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVOb2RlKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIHF1YW50aXR5ID0gdmFsdWVOb2RlLmxlbmd0aDsgaW5kZXggPCBxdWFudGl0eTsgaW5kZXggKz0gMSkge1xuICAgICAgICBtZXJnZU1hcHBpbmdzKHN0YXRlLCBfcmVzdWx0LCB2YWx1ZU5vZGVbaW5kZXhdLCBvdmVycmlkYWJsZUtleXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBtZXJnZU1hcHBpbmdzKHN0YXRlLCBfcmVzdWx0LCB2YWx1ZU5vZGUsIG92ZXJyaWRhYmxlS2V5cyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICghc3RhdGUuanNvbiAmJlxuICAgICAgICAhX2hhc093blByb3BlcnR5JDEuY2FsbChvdmVycmlkYWJsZUtleXMsIGtleU5vZGUpICYmXG4gICAgICAgIF9oYXNPd25Qcm9wZXJ0eSQxLmNhbGwoX3Jlc3VsdCwga2V5Tm9kZSkpIHtcbiAgICAgIHN0YXRlLmxpbmUgPSBzdGFydExpbmUgfHwgc3RhdGUubGluZTtcbiAgICAgIHN0YXRlLmxpbmVTdGFydCA9IHN0YXJ0TGluZVN0YXJ0IHx8IHN0YXRlLmxpbmVTdGFydDtcbiAgICAgIHN0YXRlLnBvc2l0aW9uID0gc3RhcnRQb3MgfHwgc3RhdGUucG9zaXRpb247XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZHVwbGljYXRlZCBtYXBwaW5nIGtleScpO1xuICAgIH1cblxuICAgIC8vIHVzZWQgZm9yIHRoaXMgc3BlY2lmaWMga2V5IG9ubHkgYmVjYXVzZSBPYmplY3QuZGVmaW5lUHJvcGVydHkgaXMgc2xvd1xuICAgIGlmIChrZXlOb2RlID09PSAnX19wcm90b19fJykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9yZXN1bHQsIGtleU5vZGUsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IHZhbHVlTm9kZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9yZXN1bHRba2V5Tm9kZV0gPSB2YWx1ZU5vZGU7XG4gICAgfVxuICAgIGRlbGV0ZSBvdmVycmlkYWJsZUtleXNba2V5Tm9kZV07XG4gIH1cblxuICByZXR1cm4gX3Jlc3VsdDtcbn1cblxuZnVuY3Rpb24gcmVhZExpbmVCcmVhayhzdGF0ZSkge1xuICB2YXIgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggPT09IDB4MEEvKiBMRiAqLykge1xuICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gIH0gZWxzZSBpZiAoY2ggPT09IDB4MEQvKiBDUiAqLykge1xuICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgaWYgKHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pID09PSAweDBBLyogTEYgKi8pIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICdhIGxpbmUgYnJlYWsgaXMgZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIHN0YXRlLmxpbmUgKz0gMTtcbiAgc3RhdGUubGluZVN0YXJ0ID0gc3RhdGUucG9zaXRpb247XG4gIHN0YXRlLmZpcnN0VGFiSW5MaW5lID0gLTE7XG59XG5cbmZ1bmN0aW9uIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGFsbG93Q29tbWVudHMsIGNoZWNrSW5kZW50KSB7XG4gIHZhciBsaW5lQnJlYWtzID0gMCxcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgaWYgKGNoID09PSAweDA5LyogVGFiICovICYmIHN0YXRlLmZpcnN0VGFiSW5MaW5lID09PSAtMSkge1xuICAgICAgICBzdGF0ZS5maXJzdFRhYkluTGluZSA9IHN0YXRlLnBvc2l0aW9uO1xuICAgICAgfVxuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIGlmIChhbGxvd0NvbW1lbnRzICYmIGNoID09PSAweDIzLyogIyAqLykge1xuICAgICAgZG8ge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9IHdoaWxlIChjaCAhPT0gMHgwQS8qIExGICovICYmIGNoICE9PSAweDBELyogQ1IgKi8gJiYgY2ggIT09IDApO1xuICAgIH1cblxuICAgIGlmIChpc19FT0woY2gpKSB7XG4gICAgICByZWFkTGluZUJyZWFrKHN0YXRlKTtcblxuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgIGxpbmVCcmVha3MrKztcbiAgICAgIHN0YXRlLmxpbmVJbmRlbnQgPSAwO1xuXG4gICAgICB3aGlsZSAoY2ggPT09IDB4MjAvKiBTcGFjZSAqLykge1xuICAgICAgICBzdGF0ZS5saW5lSW5kZW50Kys7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNoZWNrSW5kZW50ICE9PSAtMSAmJiBsaW5lQnJlYWtzICE9PSAwICYmIHN0YXRlLmxpbmVJbmRlbnQgPCBjaGVja0luZGVudCkge1xuICAgIHRocm93V2FybmluZyhzdGF0ZSwgJ2RlZmljaWVudCBpbmRlbnRhdGlvbicpO1xuICB9XG5cbiAgcmV0dXJuIGxpbmVCcmVha3M7XG59XG5cbmZ1bmN0aW9uIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkge1xuICB2YXIgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb24sXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uKTtcblxuICAvLyBDb25kaXRpb24gc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCBpcyB0ZXN0ZWRcbiAgLy8gaW4gcGFyZW50IG9uIGVhY2ggY2FsbCwgZm9yIGVmZmljaWVuY3kuIE5vIG5lZWRzIHRvIHRlc3QgaGVyZSBhZ2Fpbi5cbiAgaWYgKChjaCA9PT0gMHgyRC8qIC0gKi8gfHwgY2ggPT09IDB4MkUvKiAuICovKSAmJlxuICAgICAgY2ggPT09IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uICsgMSkgJiZcbiAgICAgIGNoID09PSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KF9wb3NpdGlvbiArIDIpKSB7XG5cbiAgICBfcG9zaXRpb24gKz0gMztcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24pO1xuXG4gICAgaWYgKGNoID09PSAwIHx8IGlzX1dTX09SX0VPTChjaCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZSwgY291bnQpIHtcbiAgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgc3RhdGUucmVzdWx0ICs9ICcgJztcbiAgfSBlbHNlIGlmIChjb3VudCA+IDEpIHtcbiAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnXFxuJywgY291bnQgLSAxKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHJlYWRQbGFpblNjYWxhcihzdGF0ZSwgbm9kZUluZGVudCwgd2l0aGluRmxvd0NvbGxlY3Rpb24pIHtcbiAgdmFyIHByZWNlZGluZyxcbiAgICAgIGZvbGxvd2luZyxcbiAgICAgIGNhcHR1cmVTdGFydCxcbiAgICAgIGNhcHR1cmVFbmQsXG4gICAgICBoYXNQZW5kaW5nQ29udGVudCxcbiAgICAgIF9saW5lLFxuICAgICAgX2xpbmVTdGFydCxcbiAgICAgIF9saW5lSW5kZW50LFxuICAgICAgX2tpbmQgPSBzdGF0ZS5raW5kLFxuICAgICAgX3Jlc3VsdCA9IHN0YXRlLnJlc3VsdCxcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGlzX1dTX09SX0VPTChjaCkgICAgICB8fFxuICAgICAgaXNfRkxPV19JTkRJQ0FUT1IoY2gpIHx8XG4gICAgICBjaCA9PT0gMHgyMy8qICMgKi8gICAgfHxcbiAgICAgIGNoID09PSAweDI2LyogJiAqLyAgICB8fFxuICAgICAgY2ggPT09IDB4MkEvKiAqICovICAgIHx8XG4gICAgICBjaCA9PT0gMHgyMS8qICEgKi8gICAgfHxcbiAgICAgIGNoID09PSAweDdDLyogfCAqLyAgICB8fFxuICAgICAgY2ggPT09IDB4M0UvKiA+ICovICAgIHx8XG4gICAgICBjaCA9PT0gMHgyNy8qICcgKi8gICAgfHxcbiAgICAgIGNoID09PSAweDIyLyogXCIgKi8gICAgfHxcbiAgICAgIGNoID09PSAweDI1LyogJSAqLyAgICB8fFxuICAgICAgY2ggPT09IDB4NDAvKiBAICovICAgIHx8XG4gICAgICBjaCA9PT0gMHg2MC8qIGAgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoY2ggPT09IDB4M0YvKiA/ICovIHx8IGNoID09PSAweDJELyogLSAqLykge1xuICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgIGlmIChpc19XU19PUl9FT0woZm9sbG93aW5nKSB8fFxuICAgICAgICB3aXRoaW5GbG93Q29sbGVjdGlvbiAmJiBpc19GTE9XX0lORElDQVRPUihmb2xsb3dpbmcpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc3RhdGUua2luZCA9ICdzY2FsYXInO1xuICBzdGF0ZS5yZXN1bHQgPSAnJztcbiAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICBoYXNQZW5kaW5nQ29udGVudCA9IGZhbHNlO1xuXG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIGlmIChjaCA9PT0gMHgzQS8qIDogKi8pIHtcbiAgICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgICAgaWYgKGlzX1dTX09SX0VPTChmb2xsb3dpbmcpIHx8XG4gICAgICAgICAgd2l0aGluRmxvd0NvbGxlY3Rpb24gJiYgaXNfRkxPV19JTkRJQ0FUT1IoZm9sbG93aW5nKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MjMvKiAjICovKSB7XG4gICAgICBwcmVjZWRpbmcgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uIC0gMSk7XG5cbiAgICAgIGlmIChpc19XU19PUl9FT0wocHJlY2VkaW5nKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoKHN0YXRlLnBvc2l0aW9uID09PSBzdGF0ZS5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlKSkgfHxcbiAgICAgICAgICAgICAgIHdpdGhpbkZsb3dDb2xsZWN0aW9uICYmIGlzX0ZMT1dfSU5ESUNBVE9SKGNoKSkge1xuICAgICAgYnJlYWs7XG5cbiAgICB9IGVsc2UgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgIF9saW5lID0gc3RhdGUubGluZTtcbiAgICAgIF9saW5lU3RhcnQgPSBzdGF0ZS5saW5lU3RhcnQ7XG4gICAgICBfbGluZUluZGVudCA9IHN0YXRlLmxpbmVJbmRlbnQ7XG4gICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCBmYWxzZSwgLTEpO1xuXG4gICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+PSBub2RlSW5kZW50KSB7XG4gICAgICAgIGhhc1BlbmRpbmdDb250ZW50ID0gdHJ1ZTtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5wb3NpdGlvbiA9IGNhcHR1cmVFbmQ7XG4gICAgICAgIHN0YXRlLmxpbmUgPSBfbGluZTtcbiAgICAgICAgc3RhdGUubGluZVN0YXJ0ID0gX2xpbmVTdGFydDtcbiAgICAgICAgc3RhdGUubGluZUluZGVudCA9IF9saW5lSW5kZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzUGVuZGluZ0NvbnRlbnQpIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIGZhbHNlKTtcbiAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUsIHN0YXRlLmxpbmUgLSBfbGluZSk7XG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gICAgICBoYXNQZW5kaW5nQ29udGVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgICBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb24gKyAxO1xuICAgIH1cblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgfVxuXG4gIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIGZhbHNlKTtcblxuICBpZiAoc3RhdGUucmVzdWx0KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzdGF0ZS5raW5kID0gX2tpbmQ7XG4gIHN0YXRlLnJlc3VsdCA9IF9yZXN1bHQ7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcmVhZFNpbmdsZVF1b3RlZFNjYWxhcihzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgY2gsXG4gICAgICBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQ7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggIT09IDB4MjcvKiAnICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGUua2luZCA9ICdzY2FsYXInO1xuICBzdGF0ZS5yZXN1bHQgPSAnJztcbiAgc3RhdGUucG9zaXRpb24rKztcbiAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gIHdoaWxlICgoY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSkgIT09IDApIHtcbiAgICBpZiAoY2ggPT09IDB4MjcvKiAnICovKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBzdGF0ZS5wb3NpdGlvbiwgdHJ1ZSk7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICAgIGlmIChjaCA9PT0gMHgyNy8qICcgKi8pIHtcbiAgICAgICAgY2FwdHVyZVN0YXJ0ID0gc3RhdGUucG9zaXRpb247XG4gICAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmIChpc19FT0woY2gpKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCB0cnVlKTtcbiAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUsIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGZhbHNlLCBub2RlSW5kZW50KSk7XG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG5cbiAgICB9IGVsc2UgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBzdGF0ZS5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlKSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhcicpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gICAgfVxuICB9XG5cbiAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXInKTtcbn1cblxuZnVuY3Rpb24gcmVhZERvdWJsZVF1b3RlZFNjYWxhcihzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgY2FwdHVyZVN0YXJ0LFxuICAgICAgY2FwdHVyZUVuZCxcbiAgICAgIGhleExlbmd0aCxcbiAgICAgIGhleFJlc3VsdCxcbiAgICAgIHRtcCxcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGNoICE9PSAweDIyLyogXCIgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0ZS5raW5kID0gJ3NjYWxhcic7XG4gIHN0YXRlLnJlc3VsdCA9ICcnO1xuICBzdGF0ZS5wb3NpdGlvbisrO1xuICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG5cbiAgd2hpbGUgKChjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pKSAhPT0gMCkge1xuICAgIGlmIChjaCA9PT0gMHgyMi8qIFwiICovKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBzdGF0ZS5wb3NpdGlvbiwgdHJ1ZSk7XG4gICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICB9IGVsc2UgaWYgKGNoID09PSAweDVDLyogXFwgKi8pIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIHN0YXRlLnBvc2l0aW9uLCB0cnVlKTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICAgICAgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgZmFsc2UsIG5vZGVJbmRlbnQpO1xuXG4gICAgICAgIC8vIFRPRE86IHJld29yayB0byBpbmxpbmUgZm4gd2l0aCBubyB0eXBlIGNhc3Q/XG4gICAgICB9IGVsc2UgaWYgKGNoIDwgMjU2ICYmIHNpbXBsZUVzY2FwZUNoZWNrW2NoXSkge1xuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gc2ltcGxlRXNjYXBlTWFwW2NoXTtcbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcblxuICAgICAgfSBlbHNlIGlmICgodG1wID0gZXNjYXBlZEhleExlbihjaCkpID4gMCkge1xuICAgICAgICBoZXhMZW5ndGggPSB0bXA7XG4gICAgICAgIGhleFJlc3VsdCA9IDA7XG5cbiAgICAgICAgZm9yICg7IGhleExlbmd0aCA+IDA7IGhleExlbmd0aC0tKSB7XG4gICAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gICAgICAgICAgaWYgKCh0bXAgPSBmcm9tSGV4Q29kZShjaCkpID49IDApIHtcbiAgICAgICAgICAgIGhleFJlc3VsdCA9IChoZXhSZXN1bHQgPDwgNCkgKyB0bXA7XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2V4cGVjdGVkIGhleGFkZWNpbWFsIGNoYXJhY3RlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjaGFyRnJvbUNvZGVwb2ludChoZXhSZXN1bHQpO1xuXG4gICAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmtub3duIGVzY2FwZSBzZXF1ZW5jZScpO1xuICAgICAgfVxuXG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG5cbiAgICB9IGVsc2UgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIHRydWUpO1xuICAgICAgd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZSwgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgZmFsc2UsIG5vZGVJbmRlbnQpKTtcbiAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcblxuICAgIH0gZWxzZSBpZiAoc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyJyk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICB9XG4gIH1cblxuICB0aHJvd0Vycm9yKHN0YXRlLCAndW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhcicpO1xufVxuXG5mdW5jdGlvbiByZWFkRmxvd0NvbGxlY3Rpb24oc3RhdGUsIG5vZGVJbmRlbnQpIHtcbiAgdmFyIHJlYWROZXh0ID0gdHJ1ZSxcbiAgICAgIF9saW5lLFxuICAgICAgX2xpbmVTdGFydCxcbiAgICAgIF9wb3MsXG4gICAgICBfdGFnICAgICA9IHN0YXRlLnRhZyxcbiAgICAgIF9yZXN1bHQsXG4gICAgICBfYW5jaG9yICA9IHN0YXRlLmFuY2hvcixcbiAgICAgIGZvbGxvd2luZyxcbiAgICAgIHRlcm1pbmF0b3IsXG4gICAgICBpc1BhaXIsXG4gICAgICBpc0V4cGxpY2l0UGFpcixcbiAgICAgIGlzTWFwcGluZyxcbiAgICAgIG92ZXJyaWRhYmxlS2V5cyA9IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICBrZXlOb2RlLFxuICAgICAga2V5VGFnLFxuICAgICAgdmFsdWVOb2RlLFxuICAgICAgY2g7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggPT09IDB4NUIvKiBbICovKSB7XG4gICAgdGVybWluYXRvciA9IDB4NUQ7LyogXSAqL1xuICAgIGlzTWFwcGluZyA9IGZhbHNlO1xuICAgIF9yZXN1bHQgPSBbXTtcbiAgfSBlbHNlIGlmIChjaCA9PT0gMHg3Qi8qIHsgKi8pIHtcbiAgICB0ZXJtaW5hdG9yID0gMHg3RDsvKiB9ICovXG4gICAgaXNNYXBwaW5nID0gdHJ1ZTtcbiAgICBfcmVzdWx0ID0ge307XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCkge1xuICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gX3Jlc3VsdDtcbiAgfVxuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoY2ggPT09IHRlcm1pbmF0b3IpIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgICAgc3RhdGUuYW5jaG9yID0gX2FuY2hvcjtcbiAgICAgIHN0YXRlLmtpbmQgPSBpc01hcHBpbmcgPyAnbWFwcGluZycgOiAnc2VxdWVuY2UnO1xuICAgICAgc3RhdGUucmVzdWx0ID0gX3Jlc3VsdDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIXJlYWROZXh0KSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbWlzc2VkIGNvbW1hIGJldHdlZW4gZmxvdyBjb2xsZWN0aW9uIGVudHJpZXMnKTtcbiAgICB9IGVsc2UgaWYgKGNoID09PSAweDJDLyogLCAqLykge1xuICAgICAgLy8gXCJmbG93IGNvbGxlY3Rpb24gZW50cmllcyBjYW4gbmV2ZXIgYmUgY29tcGxldGVseSBlbXB0eVwiLCBhcyBwZXIgWUFNTCAxLjIsIHNlY3Rpb24gNy40XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImV4cGVjdGVkIHRoZSBub2RlIGNvbnRlbnQsIGJ1dCBmb3VuZCAnLCdcIik7XG4gICAgfVxuXG4gICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7XG4gICAgaXNQYWlyID0gaXNFeHBsaWNpdFBhaXIgPSBmYWxzZTtcblxuICAgIGlmIChjaCA9PT0gMHgzRi8qID8gKi8pIHtcbiAgICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgICAgaWYgKGlzX1dTX09SX0VPTChmb2xsb3dpbmcpKSB7XG4gICAgICAgIGlzUGFpciA9IGlzRXhwbGljaXRQYWlyID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgbm9kZUluZGVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2xpbmUgPSBzdGF0ZS5saW5lOyAvLyBTYXZlIHRoZSBjdXJyZW50IGxpbmUuXG4gICAgX2xpbmVTdGFydCA9IHN0YXRlLmxpbmVTdGFydDtcbiAgICBfcG9zID0gc3RhdGUucG9zaXRpb247XG4gICAgY29tcG9zZU5vZGUoc3RhdGUsIG5vZGVJbmRlbnQsIENPTlRFWFRfRkxPV19JTiwgZmFsc2UsIHRydWUpO1xuICAgIGtleVRhZyA9IHN0YXRlLnRhZztcbiAgICBrZXlOb2RlID0gc3RhdGUucmVzdWx0O1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIG5vZGVJbmRlbnQpO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmICgoaXNFeHBsaWNpdFBhaXIgfHwgc3RhdGUubGluZSA9PT0gX2xpbmUpICYmIGNoID09PSAweDNBLyogOiAqLykge1xuICAgICAgaXNQYWlyID0gdHJ1ZTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIG5vZGVJbmRlbnQpO1xuICAgICAgY29tcG9zZU5vZGUoc3RhdGUsIG5vZGVJbmRlbnQsIENPTlRFWFRfRkxPV19JTiwgZmFsc2UsIHRydWUpO1xuICAgICAgdmFsdWVOb2RlID0gc3RhdGUucmVzdWx0O1xuICAgIH1cblxuICAgIGlmIChpc01hcHBpbmcpIHtcbiAgICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUsIF9saW5lLCBfbGluZVN0YXJ0LCBfcG9zKTtcbiAgICB9IGVsc2UgaWYgKGlzUGFpcikge1xuICAgICAgX3Jlc3VsdC5wdXNoKHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIG51bGwsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUsIF9saW5lLCBfbGluZVN0YXJ0LCBfcG9zKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9yZXN1bHQucHVzaChrZXlOb2RlKTtcbiAgICB9XG5cbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoY2ggPT09IDB4MkMvKiAsICovKSB7XG4gICAgICByZWFkTmV4dCA9IHRydWU7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlYWROZXh0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZmxvdyBjb2xsZWN0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9ja1NjYWxhcihzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgY2FwdHVyZVN0YXJ0LFxuICAgICAgZm9sZGluZyxcbiAgICAgIGNob21waW5nICAgICAgID0gQ0hPTVBJTkdfQ0xJUCxcbiAgICAgIGRpZFJlYWRDb250ZW50ID0gZmFsc2UsXG4gICAgICBkZXRlY3RlZEluZGVudCA9IGZhbHNlLFxuICAgICAgdGV4dEluZGVudCAgICAgPSBub2RlSW5kZW50LFxuICAgICAgZW1wdHlMaW5lcyAgICAgPSAwLFxuICAgICAgYXRNb3JlSW5kZW50ZWQgPSBmYWxzZSxcbiAgICAgIHRtcCxcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGNoID09PSAweDdDLyogfCAqLykge1xuICAgIGZvbGRpbmcgPSBmYWxzZTtcbiAgfSBlbHNlIGlmIChjaCA9PT0gMHgzRS8qID4gKi8pIHtcbiAgICBmb2xkaW5nID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0ZS5raW5kID0gJ3NjYWxhcic7XG4gIHN0YXRlLnJlc3VsdCA9ICcnO1xuXG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmIChjaCA9PT0gMHgyQi8qICsgKi8gfHwgY2ggPT09IDB4MkQvKiAtICovKSB7XG4gICAgICBpZiAoQ0hPTVBJTkdfQ0xJUCA9PT0gY2hvbXBpbmcpIHtcbiAgICAgICAgY2hvbXBpbmcgPSAoY2ggPT09IDB4MkIvKiArICovKSA/IENIT01QSU5HX0tFRVAgOiBDSE9NUElOR19TVFJJUDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsICdyZXBlYXQgb2YgYSBjaG9tcGluZyBtb2RlIGlkZW50aWZpZXInKTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoKHRtcCA9IGZyb21EZWNpbWFsQ29kZShjaCkpID49IDApIHtcbiAgICAgIGlmICh0bXAgPT09IDApIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2JhZCBleHBsaWNpdCBpbmRlbnRhdGlvbiB3aWR0aCBvZiBhIGJsb2NrIHNjYWxhcjsgaXQgY2Fubm90IGJlIGxlc3MgdGhhbiBvbmUnKTtcbiAgICAgIH0gZWxzZSBpZiAoIWRldGVjdGVkSW5kZW50KSB7XG4gICAgICAgIHRleHRJbmRlbnQgPSBub2RlSW5kZW50ICsgdG1wIC0gMTtcbiAgICAgICAgZGV0ZWN0ZWRJbmRlbnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3JlcGVhdCBvZiBhbiBpbmRlbnRhdGlvbiB3aWR0aCBpZGVudGlmaWVyJyk7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgIGRvIHsgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOyB9XG4gICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSk7XG5cbiAgICBpZiAoY2ggPT09IDB4MjMvKiAjICovKSB7XG4gICAgICBkbyB7IGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsgfVxuICAgICAgd2hpbGUgKCFpc19FT0woY2gpICYmIChjaCAhPT0gMCkpO1xuICAgIH1cbiAgfVxuXG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIHJlYWRMaW5lQnJlYWsoc3RhdGUpO1xuICAgIHN0YXRlLmxpbmVJbmRlbnQgPSAwO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIHdoaWxlICgoIWRldGVjdGVkSW5kZW50IHx8IHN0YXRlLmxpbmVJbmRlbnQgPCB0ZXh0SW5kZW50KSAmJlxuICAgICAgICAgICAoY2ggPT09IDB4MjAvKiBTcGFjZSAqLykpIHtcbiAgICAgIHN0YXRlLmxpbmVJbmRlbnQrKztcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAoIWRldGVjdGVkSW5kZW50ICYmIHN0YXRlLmxpbmVJbmRlbnQgPiB0ZXh0SW5kZW50KSB7XG4gICAgICB0ZXh0SW5kZW50ID0gc3RhdGUubGluZUluZGVudDtcbiAgICB9XG5cbiAgICBpZiAoaXNfRU9MKGNoKSkge1xuICAgICAgZW1wdHlMaW5lcysrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gRW5kIG9mIHRoZSBzY2FsYXIuXG4gICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCB0ZXh0SW5kZW50KSB7XG5cbiAgICAgIC8vIFBlcmZvcm0gdGhlIGNob21waW5nLlxuICAgICAgaWYgKGNob21waW5nID09PSBDSE9NUElOR19LRUVQKSB7XG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCdcXG4nLCBkaWRSZWFkQ29udGVudCA/IDEgKyBlbXB0eUxpbmVzIDogZW1wdHlMaW5lcyk7XG4gICAgICB9IGVsc2UgaWYgKGNob21waW5nID09PSBDSE9NUElOR19DTElQKSB7XG4gICAgICAgIGlmIChkaWRSZWFkQ29udGVudCkgeyAvLyBpLmUuIG9ubHkgaWYgdGhlIHNjYWxhciBpcyBub3QgZW1wdHkuXG4gICAgICAgICAgc3RhdGUucmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEJyZWFrIHRoaXMgYHdoaWxlYCBjeWNsZSBhbmQgZ28gdG8gdGhlIGZ1bmNpdG9uJ3MgZXBpbG9ndWUuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBGb2xkZWQgc3R5bGU6IHVzZSBmYW5jeSBydWxlcyB0byBoYW5kbGUgbGluZSBicmVha3MuXG4gICAgaWYgKGZvbGRpbmcpIHtcblxuICAgICAgLy8gTGluZXMgc3RhcnRpbmcgd2l0aCB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXJzIChtb3JlLWluZGVudGVkIGxpbmVzKSBhcmUgbm90IGZvbGRlZC5cbiAgICAgIGlmIChpc19XSElURV9TUEFDRShjaCkpIHtcbiAgICAgICAgYXRNb3JlSW5kZW50ZWQgPSB0cnVlO1xuICAgICAgICAvLyBleGNlcHQgZm9yIHRoZSBmaXJzdCBjb250ZW50IGxpbmUgKGNmLiBFeGFtcGxlIDguMSlcbiAgICAgICAgc3RhdGUucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoJ1xcbicsIGRpZFJlYWRDb250ZW50ID8gMSArIGVtcHR5TGluZXMgOiBlbXB0eUxpbmVzKTtcblxuICAgICAgLy8gRW5kIG9mIG1vcmUtaW5kZW50ZWQgYmxvY2suXG4gICAgICB9IGVsc2UgaWYgKGF0TW9yZUluZGVudGVkKSB7XG4gICAgICAgIGF0TW9yZUluZGVudGVkID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCdcXG4nLCBlbXB0eUxpbmVzICsgMSk7XG5cbiAgICAgIC8vIEp1c3Qgb25lIGxpbmUgYnJlYWsgLSBwZXJjZWl2ZSBhcyB0aGUgc2FtZSBsaW5lLlxuICAgICAgfSBlbHNlIGlmIChlbXB0eUxpbmVzID09PSAwKSB7XG4gICAgICAgIGlmIChkaWRSZWFkQ29udGVudCkgeyAvLyBpLmUuIG9ubHkgaWYgd2UgaGF2ZSBhbHJlYWR5IHJlYWQgc29tZSBzY2FsYXIgY29udGVudC5cbiAgICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gJyAnO1xuICAgICAgICB9XG5cbiAgICAgIC8vIFNldmVyYWwgbGluZSBicmVha3MgLSBwZXJjZWl2ZSBhcyBkaWZmZXJlbnQgbGluZXMuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgnXFxuJywgZW1wdHlMaW5lcyk7XG4gICAgICB9XG5cbiAgICAvLyBMaXRlcmFsIHN0eWxlOiBqdXN0IGFkZCBleGFjdCBudW1iZXIgb2YgbGluZSBicmVha3MgYmV0d2VlbiBjb250ZW50IGxpbmVzLlxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBLZWVwIGFsbCBsaW5lIGJyZWFrcyBleGNlcHQgdGhlIGhlYWRlciBsaW5lIGJyZWFrLlxuICAgICAgc3RhdGUucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoJ1xcbicsIGRpZFJlYWRDb250ZW50ID8gMSArIGVtcHR5TGluZXMgOiBlbXB0eUxpbmVzKTtcbiAgICB9XG5cbiAgICBkaWRSZWFkQ29udGVudCA9IHRydWU7XG4gICAgZGV0ZWN0ZWRJbmRlbnQgPSB0cnVlO1xuICAgIGVtcHR5TGluZXMgPSAwO1xuICAgIGNhcHR1cmVTdGFydCA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gICAgd2hpbGUgKCFpc19FT0woY2gpICYmIChjaCAhPT0gMCkpIHtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBzdGF0ZS5wb3NpdGlvbiwgZmFsc2UpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9ja1NlcXVlbmNlKHN0YXRlLCBub2RlSW5kZW50KSB7XG4gIHZhciBfbGluZSxcbiAgICAgIF90YWcgICAgICA9IHN0YXRlLnRhZyxcbiAgICAgIF9hbmNob3IgICA9IHN0YXRlLmFuY2hvcixcbiAgICAgIF9yZXN1bHQgICA9IFtdLFxuICAgICAgZm9sbG93aW5nLFxuICAgICAgZGV0ZWN0ZWQgID0gZmFsc2UsXG4gICAgICBjaDtcblxuICAvLyB0aGVyZSBpcyBhIGxlYWRpbmcgdGFiIGJlZm9yZSB0aGlzIHRva2VuLCBzbyBpdCBjYW4ndCBiZSBhIGJsb2NrIHNlcXVlbmNlL21hcHBpbmc7XG4gIC8vIGl0IGNhbiBzdGlsbCBiZSBmbG93IHNlcXVlbmNlL21hcHBpbmcgb3IgYSBzY2FsYXJcbiAgaWYgKHN0YXRlLmZpcnN0VGFiSW5MaW5lICE9PSAtMSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IF9yZXN1bHQ7XG4gIH1cblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIGlmIChzdGF0ZS5maXJzdFRhYkluTGluZSAhPT0gLTEpIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uID0gc3RhdGUuZmlyc3RUYWJJbkxpbmU7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGFiIGNoYXJhY3RlcnMgbXVzdCBub3QgYmUgdXNlZCBpbiBpbmRlbnRhdGlvbicpO1xuICAgIH1cblxuICAgIGlmIChjaCAhPT0gMHgyRC8qIC0gKi8pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgIGlmICghaXNfV1NfT1JfRU9MKGZvbGxvd2luZykpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGRldGVjdGVkID0gdHJ1ZTtcbiAgICBzdGF0ZS5wb3NpdGlvbisrO1xuXG4gICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKSkge1xuICAgICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPD0gbm9kZUluZGVudCkge1xuICAgICAgICBfcmVzdWx0LnB1c2gobnVsbCk7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIF9saW5lID0gc3RhdGUubGluZTtcbiAgICBjb21wb3NlTm9kZShzdGF0ZSwgbm9kZUluZGVudCwgQ09OVEVYVF9CTE9DS19JTiwgZmFsc2UsIHRydWUpO1xuICAgIF9yZXN1bHQucHVzaChzdGF0ZS5yZXN1bHQpO1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoKHN0YXRlLmxpbmUgPT09IF9saW5lIHx8IHN0YXRlLmxpbmVJbmRlbnQgPiBub2RlSW5kZW50KSAmJiAoY2ggIT09IDApKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnYmFkIGluZGVudGF0aW9uIG9mIGEgc2VxdWVuY2UgZW50cnknKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCBub2RlSW5kZW50KSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoZGV0ZWN0ZWQpIHtcbiAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7XG4gICAgc3RhdGUua2luZCA9ICdzZXF1ZW5jZSc7XG4gICAgc3RhdGUucmVzdWx0ID0gX3Jlc3VsdDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9ja01hcHBpbmcoc3RhdGUsIG5vZGVJbmRlbnQsIGZsb3dJbmRlbnQpIHtcbiAgdmFyIGZvbGxvd2luZyxcbiAgICAgIGFsbG93Q29tcGFjdCxcbiAgICAgIF9saW5lLFxuICAgICAgX2tleUxpbmUsXG4gICAgICBfa2V5TGluZVN0YXJ0LFxuICAgICAgX2tleVBvcyxcbiAgICAgIF90YWcgICAgICAgICAgPSBzdGF0ZS50YWcsXG4gICAgICBfYW5jaG9yICAgICAgID0gc3RhdGUuYW5jaG9yLFxuICAgICAgX3Jlc3VsdCAgICAgICA9IHt9LFxuICAgICAgb3ZlcnJpZGFibGVLZXlzID0gT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgIGtleVRhZyAgICAgICAgPSBudWxsLFxuICAgICAga2V5Tm9kZSAgICAgICA9IG51bGwsXG4gICAgICB2YWx1ZU5vZGUgICAgID0gbnVsbCxcbiAgICAgIGF0RXhwbGljaXRLZXkgPSBmYWxzZSxcbiAgICAgIGRldGVjdGVkICAgICAgPSBmYWxzZSxcbiAgICAgIGNoO1xuXG4gIC8vIHRoZXJlIGlzIGEgbGVhZGluZyB0YWIgYmVmb3JlIHRoaXMgdG9rZW4sIHNvIGl0IGNhbid0IGJlIGEgYmxvY2sgc2VxdWVuY2UvbWFwcGluZztcbiAgLy8gaXQgY2FuIHN0aWxsIGJlIGZsb3cgc2VxdWVuY2UvbWFwcGluZyBvciBhIHNjYWxhclxuICBpZiAoc3RhdGUuZmlyc3RUYWJJbkxpbmUgIT09IC0xKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCkge1xuICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gX3Jlc3VsdDtcbiAgfVxuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgaWYgKCFhdEV4cGxpY2l0S2V5ICYmIHN0YXRlLmZpcnN0VGFiSW5MaW5lICE9PSAtMSkge1xuICAgICAgc3RhdGUucG9zaXRpb24gPSBzdGF0ZS5maXJzdFRhYkluTGluZTtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd0YWIgY2hhcmFjdGVycyBtdXN0IG5vdCBiZSB1c2VkIGluIGluZGVudGF0aW9uJyk7XG4gICAgfVxuXG4gICAgZm9sbG93aW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpO1xuICAgIF9saW5lID0gc3RhdGUubGluZTsgLy8gU2F2ZSB0aGUgY3VycmVudCBsaW5lLlxuXG4gICAgLy9cbiAgICAvLyBFeHBsaWNpdCBub3RhdGlvbiBjYXNlLiBUaGVyZSBhcmUgdHdvIHNlcGFyYXRlIGJsb2NrczpcbiAgICAvLyBmaXJzdCBmb3IgdGhlIGtleSAoZGVub3RlZCBieSBcIj9cIikgYW5kIHNlY29uZCBmb3IgdGhlIHZhbHVlIChkZW5vdGVkIGJ5IFwiOlwiKVxuICAgIC8vXG4gICAgaWYgKChjaCA9PT0gMHgzRi8qID8gKi8gfHwgY2ggPT09IDB4M0EvKiA6ICovKSAmJiBpc19XU19PUl9FT0woZm9sbG93aW5nKSkge1xuXG4gICAgICBpZiAoY2ggPT09IDB4M0YvKiA/ICovKSB7XG4gICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIG51bGwsIF9rZXlMaW5lLCBfa2V5TGluZVN0YXJ0LCBfa2V5UG9zKTtcbiAgICAgICAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGRldGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgYXRFeHBsaWNpdEtleSA9IHRydWU7XG4gICAgICAgIGFsbG93Q29tcGFjdCA9IHRydWU7XG5cbiAgICAgIH0gZWxzZSBpZiAoYXRFeHBsaWNpdEtleSkge1xuICAgICAgICAvLyBpLmUuIDB4M0EvKiA6ICovID09PSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGV4cGxpY2l0IGtleS5cbiAgICAgICAgYXRFeHBsaWNpdEtleSA9IGZhbHNlO1xuICAgICAgICBhbGxvd0NvbXBhY3QgPSB0cnVlO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnaW5jb21wbGV0ZSBleHBsaWNpdCBtYXBwaW5nIHBhaXI7IGEga2V5IG5vZGUgaXMgbWlzc2VkOyBvciBmb2xsb3dlZCBieSBhIG5vbi10YWJ1bGF0ZWQgZW1wdHkgbGluZScpO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZS5wb3NpdGlvbiArPSAxO1xuICAgICAgY2ggPSBmb2xsb3dpbmc7XG5cbiAgICAvL1xuICAgIC8vIEltcGxpY2l0IG5vdGF0aW9uIGNhc2UuIEZsb3ctc3R5bGUgbm9kZSBhcyB0aGUga2V5IGZpcnN0LCB0aGVuIFwiOlwiLCBhbmQgdGhlIHZhbHVlLlxuICAgIC8vXG4gICAgfSBlbHNlIHtcbiAgICAgIF9rZXlMaW5lID0gc3RhdGUubGluZTtcbiAgICAgIF9rZXlMaW5lU3RhcnQgPSBzdGF0ZS5saW5lU3RhcnQ7XG4gICAgICBfa2V5UG9zID0gc3RhdGUucG9zaXRpb247XG5cbiAgICAgIGlmICghY29tcG9zZU5vZGUoc3RhdGUsIGZsb3dJbmRlbnQsIENPTlRFWFRfRkxPV19PVVQsIGZhbHNlLCB0cnVlKSkge1xuICAgICAgICAvLyBOZWl0aGVyIGltcGxpY2l0IG5vciBleHBsaWNpdCBub3RhdGlvbi5cbiAgICAgICAgLy8gUmVhZGluZyBpcyBkb25lLiBHbyB0byB0aGUgZXBpbG9ndWUuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUubGluZSA9PT0gX2xpbmUpIHtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgICAgICB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoID09PSAweDNBLyogOiAqLykge1xuICAgICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICAgICAgICAgIGlmICghaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2Egd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgZXhwZWN0ZWQgYWZ0ZXIgdGhlIGtleS12YWx1ZSBzZXBhcmF0b3Igd2l0aGluIGEgYmxvY2sgbWFwcGluZycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlLCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgbnVsbCwgX2tleUxpbmUsIF9rZXlMaW5lU3RhcnQsIF9rZXlQb3MpO1xuICAgICAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIGF0RXhwbGljaXRLZXkgPSBmYWxzZTtcbiAgICAgICAgICBhbGxvd0NvbXBhY3QgPSBmYWxzZTtcbiAgICAgICAgICBrZXlUYWcgPSBzdGF0ZS50YWc7XG4gICAgICAgICAga2V5Tm9kZSA9IHN0YXRlLnJlc3VsdDtcblxuICAgICAgICB9IGVsc2UgaWYgKGRldGVjdGVkKSB7XG4gICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2NhbiBub3QgcmVhZCBhbiBpbXBsaWNpdCBtYXBwaW5nIHBhaXI7IGEgY29sb24gaXMgbWlzc2VkJyk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgICAgICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7XG4gICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEtlZXAgdGhlIHJlc3VsdCBvZiBgY29tcG9zZU5vZGVgLlxuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSBpZiAoZGV0ZWN0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2NhbiBub3QgcmVhZCBhIGJsb2NrIG1hcHBpbmcgZW50cnk7IGEgbXVsdGlsaW5lIGtleSBtYXkgbm90IGJlIGFuIGltcGxpY2l0IGtleScpO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgICAgICBzdGF0ZS5hbmNob3IgPSBfYW5jaG9yO1xuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gS2VlcCB0aGUgcmVzdWx0IG9mIGBjb21wb3NlTm9kZWAuXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBDb21tb24gcmVhZGluZyBjb2RlIGZvciBib3RoIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBub3RhdGlvbnMuXG4gICAgLy9cbiAgICBpZiAoc3RhdGUubGluZSA9PT0gX2xpbmUgfHwgc3RhdGUubGluZUluZGVudCA+IG5vZGVJbmRlbnQpIHtcbiAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgIF9rZXlMaW5lID0gc3RhdGUubGluZTtcbiAgICAgICAgX2tleUxpbmVTdGFydCA9IHN0YXRlLmxpbmVTdGFydDtcbiAgICAgICAgX2tleVBvcyA9IHN0YXRlLnBvc2l0aW9uO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29tcG9zZU5vZGUoc3RhdGUsIG5vZGVJbmRlbnQsIENPTlRFWFRfQkxPQ0tfT1VULCB0cnVlLCBhbGxvd0NvbXBhY3QpKSB7XG4gICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAga2V5Tm9kZSA9IHN0YXRlLnJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUsIF9rZXlMaW5lLCBfa2V5TGluZVN0YXJ0LCBfa2V5UG9zKTtcbiAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKChzdGF0ZS5saW5lID09PSBfbGluZSB8fCBzdGF0ZS5saW5lSW5kZW50ID4gbm9kZUluZGVudCkgJiYgKGNoICE9PSAwKSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2JhZCBpbmRlbnRhdGlvbiBvZiBhIG1hcHBpbmcgZW50cnknKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCBub2RlSW5kZW50KSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBFcGlsb2d1ZS5cbiAgLy9cblxuICAvLyBTcGVjaWFsIGNhc2U6IGxhc3QgbWFwcGluZydzIG5vZGUgY29udGFpbnMgb25seSB0aGUga2V5IGluIGV4cGxpY2l0IG5vdGF0aW9uLlxuICBpZiAoYXRFeHBsaWNpdEtleSkge1xuICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCBudWxsLCBfa2V5TGluZSwgX2tleUxpbmVTdGFydCwgX2tleVBvcyk7XG4gIH1cblxuICAvLyBFeHBvc2UgdGhlIHJlc3VsdGluZyBtYXBwaW5nLlxuICBpZiAoZGV0ZWN0ZWQpIHtcbiAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7XG4gICAgc3RhdGUua2luZCA9ICdtYXBwaW5nJztcbiAgICBzdGF0ZS5yZXN1bHQgPSBfcmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIGRldGVjdGVkO1xufVxuXG5mdW5jdGlvbiByZWFkVGFnUHJvcGVydHkoc3RhdGUpIHtcbiAgdmFyIF9wb3NpdGlvbixcbiAgICAgIGlzVmVyYmF0aW0gPSBmYWxzZSxcbiAgICAgIGlzTmFtZWQgICAgPSBmYWxzZSxcbiAgICAgIHRhZ0hhbmRsZSxcbiAgICAgIHRhZ05hbWUsXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCAhPT0gMHgyMS8qICEgKi8pIHJldHVybiBmYWxzZTtcblxuICBpZiAoc3RhdGUudGFnICE9PSBudWxsKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2R1cGxpY2F0aW9uIG9mIGEgdGFnIHByb3BlcnR5Jyk7XG4gIH1cblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGNoID09PSAweDNDLyogPCAqLykge1xuICAgIGlzVmVyYmF0aW0gPSB0cnVlO1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICB9IGVsc2UgaWYgKGNoID09PSAweDIxLyogISAqLykge1xuICAgIGlzTmFtZWQgPSB0cnVlO1xuICAgIHRhZ0hhbmRsZSA9ICchISc7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gIH0gZWxzZSB7XG4gICAgdGFnSGFuZGxlID0gJyEnO1xuICB9XG5cbiAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG5cbiAgaWYgKGlzVmVyYmF0aW0pIHtcbiAgICBkbyB7IGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsgfVxuICAgIHdoaWxlIChjaCAhPT0gMCAmJiBjaCAhPT0gMHgzRS8qID4gKi8pO1xuXG4gICAgaWYgKHN0YXRlLnBvc2l0aW9uIDwgc3RhdGUubGVuZ3RoKSB7XG4gICAgICB0YWdOYW1lID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHZlcmJhdGltIHRhZycpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX1dTX09SX0VPTChjaCkpIHtcblxuICAgICAgaWYgKGNoID09PSAweDIxLyogISAqLykge1xuICAgICAgICBpZiAoIWlzTmFtZWQpIHtcbiAgICAgICAgICB0YWdIYW5kbGUgPSBzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24gLSAxLCBzdGF0ZS5wb3NpdGlvbiArIDEpO1xuXG4gICAgICAgICAgaWYgKCFQQVRURVJOX1RBR19IQU5ETEUudGVzdCh0YWdIYW5kbGUpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbmFtZWQgdGFnIGhhbmRsZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnMnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpc05hbWVkID0gdHJ1ZTtcbiAgICAgICAgICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbiArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3RhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZXhjbGFtYXRpb24gbWFya3MnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgdGFnTmFtZSA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pO1xuXG4gICAgaWYgKFBBVFRFUk5fRkxPV19JTkRJQ0FUT1JTLnRlc3QodGFnTmFtZSkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGZsb3cgaW5kaWNhdG9yIGNoYXJhY3RlcnMnKTtcbiAgICB9XG4gIH1cblxuICBpZiAodGFnTmFtZSAmJiAhUEFUVEVSTl9UQUdfVVJJLnRlc3QodGFnTmFtZSkpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAndGFnIG5hbWUgY2Fubm90IGNvbnRhaW4gc3VjaCBjaGFyYWN0ZXJzOiAnICsgdGFnTmFtZSk7XG4gIH1cblxuICB0cnkge1xuICAgIHRhZ05hbWUgPSBkZWNvZGVVUklDb21wb25lbnQodGFnTmFtZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICd0YWcgbmFtZSBpcyBtYWxmb3JtZWQ6ICcgKyB0YWdOYW1lKTtcbiAgfVxuXG4gIGlmIChpc1ZlcmJhdGltKSB7XG4gICAgc3RhdGUudGFnID0gdGFnTmFtZTtcblxuICB9IGVsc2UgaWYgKF9oYXNPd25Qcm9wZXJ0eSQxLmNhbGwoc3RhdGUudGFnTWFwLCB0YWdIYW5kbGUpKSB7XG4gICAgc3RhdGUudGFnID0gc3RhdGUudGFnTWFwW3RhZ0hhbmRsZV0gKyB0YWdOYW1lO1xuXG4gIH0gZWxzZSBpZiAodGFnSGFuZGxlID09PSAnIScpIHtcbiAgICBzdGF0ZS50YWcgPSAnIScgKyB0YWdOYW1lO1xuXG4gIH0gZWxzZSBpZiAodGFnSGFuZGxlID09PSAnISEnKSB7XG4gICAgc3RhdGUudGFnID0gJ3RhZzp5YW1sLm9yZywyMDAyOicgKyB0YWdOYW1lO1xuXG4gIH0gZWxzZSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuZGVjbGFyZWQgdGFnIGhhbmRsZSBcIicgKyB0YWdIYW5kbGUgKyAnXCInKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZWFkQW5jaG9yUHJvcGVydHkoc3RhdGUpIHtcbiAgdmFyIF9wb3NpdGlvbixcbiAgICAgIGNoO1xuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKGNoICE9PSAweDI2LyogJiAqLykgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZHVwbGljYXRpb24gb2YgYW4gYW5jaG9yIHByb3BlcnR5Jyk7XG4gIH1cblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIF9wb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSAmJiAhaXNfRkxPV19JTkRJQ0FUT1IoY2gpKSB7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICB9XG5cbiAgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBfcG9zaXRpb24pIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbmFtZSBvZiBhbiBhbmNob3Igbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlcicpO1xuICB9XG5cbiAgc3RhdGUuYW5jaG9yID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZWFkQWxpYXMoc3RhdGUpIHtcbiAgdmFyIF9wb3NpdGlvbiwgYWxpYXMsXG4gICAgICBjaDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCAhPT0gMHgyQS8qICogKi8pIHJldHVybiBmYWxzZTtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIF9wb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSAmJiAhaXNfRkxPV19JTkRJQ0FUT1IoY2gpKSB7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICB9XG5cbiAgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBfcG9zaXRpb24pIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbmFtZSBvZiBhbiBhbGlhcyBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyJyk7XG4gIH1cblxuICBhbGlhcyA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmICghX2hhc093blByb3BlcnR5JDEuY2FsbChzdGF0ZS5hbmNob3JNYXAsIGFsaWFzKSkge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmlkZW50aWZpZWQgYWxpYXMgXCInICsgYWxpYXMgKyAnXCInKTtcbiAgfVxuXG4gIHN0YXRlLnJlc3VsdCA9IHN0YXRlLmFuY2hvck1hcFthbGlhc107XG4gIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbXBvc2VOb2RlKHN0YXRlLCBwYXJlbnRJbmRlbnQsIG5vZGVDb250ZXh0LCBhbGxvd1RvU2VlaywgYWxsb3dDb21wYWN0KSB7XG4gIHZhciBhbGxvd0Jsb2NrU3R5bGVzLFxuICAgICAgYWxsb3dCbG9ja1NjYWxhcnMsXG4gICAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMsXG4gICAgICBpbmRlbnRTdGF0dXMgPSAxLCAvLyAxOiB0aGlzPnBhcmVudCwgMDogdGhpcz1wYXJlbnQsIC0xOiB0aGlzPHBhcmVudFxuICAgICAgYXROZXdMaW5lICA9IGZhbHNlLFxuICAgICAgaGFzQ29udGVudCA9IGZhbHNlLFxuICAgICAgdHlwZUluZGV4LFxuICAgICAgdHlwZVF1YW50aXR5LFxuICAgICAgdHlwZUxpc3QsXG4gICAgICB0eXBlLFxuICAgICAgZmxvd0luZGVudCxcbiAgICAgIGJsb2NrSW5kZW50O1xuXG4gIGlmIChzdGF0ZS5saXN0ZW5lciAhPT0gbnVsbCkge1xuICAgIHN0YXRlLmxpc3RlbmVyKCdvcGVuJywgc3RhdGUpO1xuICB9XG5cbiAgc3RhdGUudGFnICAgID0gbnVsbDtcbiAgc3RhdGUuYW5jaG9yID0gbnVsbDtcbiAgc3RhdGUua2luZCAgID0gbnVsbDtcbiAgc3RhdGUucmVzdWx0ID0gbnVsbDtcblxuICBhbGxvd0Jsb2NrU3R5bGVzID0gYWxsb3dCbG9ja1NjYWxhcnMgPSBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPVxuICAgIENPTlRFWFRfQkxPQ0tfT1VUID09PSBub2RlQ29udGV4dCB8fFxuICAgIENPTlRFWFRfQkxPQ0tfSU4gID09PSBub2RlQ29udGV4dDtcblxuICBpZiAoYWxsb3dUb1NlZWspIHtcbiAgICBpZiAoc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpKSB7XG4gICAgICBhdE5ld0xpbmUgPSB0cnVlO1xuXG4gICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+IHBhcmVudEluZGVudCkge1xuICAgICAgICBpbmRlbnRTdGF0dXMgPSAxO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50ID09PSBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgaW5kZW50U3RhdHVzID0gMDtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGluZUluZGVudCA8IHBhcmVudEluZGVudCkge1xuICAgICAgICBpbmRlbnRTdGF0dXMgPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoaW5kZW50U3RhdHVzID09PSAxKSB7XG4gICAgd2hpbGUgKHJlYWRUYWdQcm9wZXJ0eShzdGF0ZSkgfHwgcmVhZEFuY2hvclByb3BlcnR5KHN0YXRlKSkge1xuICAgICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKSkge1xuICAgICAgICBhdE5ld0xpbmUgPSB0cnVlO1xuICAgICAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPSBhbGxvd0Jsb2NrU3R5bGVzO1xuXG4gICAgICAgIGlmIChzdGF0ZS5saW5lSW5kZW50ID4gcGFyZW50SW5kZW50KSB7XG4gICAgICAgICAgaW5kZW50U3RhdHVzID0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50ID09PSBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAtMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxsb3dCbG9ja0NvbGxlY3Rpb25zID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGFsbG93QmxvY2tDb2xsZWN0aW9ucykge1xuICAgIGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IGF0TmV3TGluZSB8fCBhbGxvd0NvbXBhY3Q7XG4gIH1cblxuICBpZiAoaW5kZW50U3RhdHVzID09PSAxIHx8IENPTlRFWFRfQkxPQ0tfT1VUID09PSBub2RlQ29udGV4dCkge1xuICAgIGlmIChDT05URVhUX0ZMT1dfSU4gPT09IG5vZGVDb250ZXh0IHx8IENPTlRFWFRfRkxPV19PVVQgPT09IG5vZGVDb250ZXh0KSB7XG4gICAgICBmbG93SW5kZW50ID0gcGFyZW50SW5kZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBmbG93SW5kZW50ID0gcGFyZW50SW5kZW50ICsgMTtcbiAgICB9XG5cbiAgICBibG9ja0luZGVudCA9IHN0YXRlLnBvc2l0aW9uIC0gc3RhdGUubGluZVN0YXJ0O1xuXG4gICAgaWYgKGluZGVudFN0YXR1cyA9PT0gMSkge1xuICAgICAgaWYgKGFsbG93QmxvY2tDb2xsZWN0aW9ucyAmJlxuICAgICAgICAgIChyZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZSwgYmxvY2tJbmRlbnQpIHx8XG4gICAgICAgICAgIHJlYWRCbG9ja01hcHBpbmcoc3RhdGUsIGJsb2NrSW5kZW50LCBmbG93SW5kZW50KSkgfHxcbiAgICAgICAgICByZWFkRmxvd0NvbGxlY3Rpb24oc3RhdGUsIGZsb3dJbmRlbnQpKSB7XG4gICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKChhbGxvd0Jsb2NrU2NhbGFycyAmJiByZWFkQmxvY2tTY2FsYXIoc3RhdGUsIGZsb3dJbmRlbnQpKSB8fFxuICAgICAgICAgICAgcmVhZFNpbmdsZVF1b3RlZFNjYWxhcihzdGF0ZSwgZmxvd0luZGVudCkgfHxcbiAgICAgICAgICAgIHJlYWREb3VibGVRdW90ZWRTY2FsYXIoc3RhdGUsIGZsb3dJbmRlbnQpKSB7XG4gICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWFkQWxpYXMoc3RhdGUpKSB7XG4gICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoc3RhdGUudGFnICE9PSBudWxsIHx8IHN0YXRlLmFuY2hvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2FsaWFzIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFueSBwcm9wZXJ0aWVzJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSBpZiAocmVhZFBsYWluU2NhbGFyKHN0YXRlLCBmbG93SW5kZW50LCBDT05URVhUX0ZMT1dfSU4gPT09IG5vZGVDb250ZXh0KSkge1xuICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLnRhZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgc3RhdGUudGFnID0gJz8nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICAgICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHN0YXRlLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW5kZW50U3RhdHVzID09PSAwKSB7XG4gICAgICAvLyBTcGVjaWFsIGNhc2U6IGJsb2NrIHNlcXVlbmNlcyBhcmUgYWxsb3dlZCB0byBoYXZlIHNhbWUgaW5kZW50YXRpb24gbGV2ZWwgYXMgdGhlIHBhcmVudC5cbiAgICAgIC8vIGh0dHA6Ly93d3cueWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjc5OTc4NFxuICAgICAgaGFzQ29udGVudCA9IGFsbG93QmxvY2tDb2xsZWN0aW9ucyAmJiByZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZSwgYmxvY2tJbmRlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0ZS50YWcgPT09IG51bGwpIHtcbiAgICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHN0YXRlLnJlc3VsdDtcbiAgICB9XG5cbiAgfSBlbHNlIGlmIChzdGF0ZS50YWcgPT09ICc/Jykge1xuICAgIC8vIEltcGxpY2l0IHJlc29sdmluZyBpcyBub3QgYWxsb3dlZCBmb3Igbm9uLXNjYWxhciB0eXBlcywgYW5kICc/J1xuICAgIC8vIG5vbi1zcGVjaWZpYyB0YWcgaXMgb25seSBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkIHRvIHBsYWluIHNjYWxhcnMuXG4gICAgLy9cbiAgICAvLyBXZSBvbmx5IG5lZWQgdG8gY2hlY2sga2luZCBjb25mb3JtaXR5IGluIGNhc2UgdXNlciBleHBsaWNpdGx5IGFzc2lnbnMgJz8nXG4gICAgLy8gdGFnLCBmb3IgZXhhbXBsZSBsaWtlIHRoaXM6IFwiITw/PiBbMF1cIlxuICAgIC8vXG4gICAgaWYgKHN0YXRlLnJlc3VsdCAhPT0gbnVsbCAmJiBzdGF0ZS5raW5kICE9PSAnc2NhbGFyJykge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8Pz4gdGFnOyBpdCBzaG91bGQgYmUgXCJzY2FsYXJcIiwgbm90IFwiJyArIHN0YXRlLmtpbmQgKyAnXCInKTtcbiAgICB9XG5cbiAgICBmb3IgKHR5cGVJbmRleCA9IDAsIHR5cGVRdWFudGl0eSA9IHN0YXRlLmltcGxpY2l0VHlwZXMubGVuZ3RoOyB0eXBlSW5kZXggPCB0eXBlUXVhbnRpdHk7IHR5cGVJbmRleCArPSAxKSB7XG4gICAgICB0eXBlID0gc3RhdGUuaW1wbGljaXRUeXBlc1t0eXBlSW5kZXhdO1xuXG4gICAgICBpZiAodHlwZS5yZXNvbHZlKHN0YXRlLnJlc3VsdCkpIHsgLy8gYHN0YXRlLnJlc3VsdGAgdXBkYXRlZCBpbiByZXNvbHZlciBpZiBtYXRjaGVkXG4gICAgICAgIHN0YXRlLnJlc3VsdCA9IHR5cGUuY29uc3RydWN0KHN0YXRlLnJlc3VsdCk7XG4gICAgICAgIHN0YXRlLnRhZyA9IHR5cGUudGFnO1xuICAgICAgICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICAgICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSBzdGF0ZS5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHN0YXRlLnRhZyAhPT0gJyEnKSB7XG4gICAgaWYgKF9oYXNPd25Qcm9wZXJ0eSQxLmNhbGwoc3RhdGUudHlwZU1hcFtzdGF0ZS5raW5kIHx8ICdmYWxsYmFjayddLCBzdGF0ZS50YWcpKSB7XG4gICAgICB0eXBlID0gc3RhdGUudHlwZU1hcFtzdGF0ZS5raW5kIHx8ICdmYWxsYmFjayddW3N0YXRlLnRhZ107XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGxvb2tpbmcgZm9yIG11bHRpIHR5cGVcbiAgICAgIHR5cGUgPSBudWxsO1xuICAgICAgdHlwZUxpc3QgPSBzdGF0ZS50eXBlTWFwLm11bHRpW3N0YXRlLmtpbmQgfHwgJ2ZhbGxiYWNrJ107XG5cbiAgICAgIGZvciAodHlwZUluZGV4ID0gMCwgdHlwZVF1YW50aXR5ID0gdHlwZUxpc3QubGVuZ3RoOyB0eXBlSW5kZXggPCB0eXBlUXVhbnRpdHk7IHR5cGVJbmRleCArPSAxKSB7XG4gICAgICAgIGlmIChzdGF0ZS50YWcuc2xpY2UoMCwgdHlwZUxpc3RbdHlwZUluZGV4XS50YWcubGVuZ3RoKSA9PT0gdHlwZUxpc3RbdHlwZUluZGV4XS50YWcpIHtcbiAgICAgICAgICB0eXBlID0gdHlwZUxpc3RbdHlwZUluZGV4XTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdHlwZSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3Vua25vd24gdGFnICE8JyArIHN0YXRlLnRhZyArICc+Jyk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnJlc3VsdCAhPT0gbnVsbCAmJiB0eXBlLmtpbmQgIT09IHN0YXRlLmtpbmQpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmFjY2VwdGFibGUgbm9kZSBraW5kIGZvciAhPCcgKyBzdGF0ZS50YWcgKyAnPiB0YWc7IGl0IHNob3VsZCBiZSBcIicgKyB0eXBlLmtpbmQgKyAnXCIsIG5vdCBcIicgKyBzdGF0ZS5raW5kICsgJ1wiJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0eXBlLnJlc29sdmUoc3RhdGUucmVzdWx0LCBzdGF0ZS50YWcpKSB7IC8vIGBzdGF0ZS5yZXN1bHRgIHVwZGF0ZWQgaW4gcmVzb2x2ZXIgaWYgbWF0Y2hlZFxuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2Nhbm5vdCByZXNvbHZlIGEgbm9kZSB3aXRoICE8JyArIHN0YXRlLnRhZyArICc+IGV4cGxpY2l0IHRhZycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5yZXN1bHQgPSB0eXBlLmNvbnN0cnVjdChzdGF0ZS5yZXN1bHQsIHN0YXRlLnRhZyk7XG4gICAgICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gc3RhdGUucmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0ZS5saXN0ZW5lciAhPT0gbnVsbCkge1xuICAgIHN0YXRlLmxpc3RlbmVyKCdjbG9zZScsIHN0YXRlKTtcbiAgfVxuICByZXR1cm4gc3RhdGUudGFnICE9PSBudWxsIHx8ICBzdGF0ZS5hbmNob3IgIT09IG51bGwgfHwgaGFzQ29udGVudDtcbn1cblxuZnVuY3Rpb24gcmVhZERvY3VtZW50KHN0YXRlKSB7XG4gIHZhciBkb2N1bWVudFN0YXJ0ID0gc3RhdGUucG9zaXRpb24sXG4gICAgICBfcG9zaXRpb24sXG4gICAgICBkaXJlY3RpdmVOYW1lLFxuICAgICAgZGlyZWN0aXZlQXJncyxcbiAgICAgIGhhc0RpcmVjdGl2ZXMgPSBmYWxzZSxcbiAgICAgIGNoO1xuXG4gIHN0YXRlLnZlcnNpb24gPSBudWxsO1xuICBzdGF0ZS5jaGVja0xpbmVCcmVha3MgPSBzdGF0ZS5sZWdhY3k7XG4gIHN0YXRlLnRhZ01hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHN0YXRlLmFuY2hvck1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgd2hpbGUgKChjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pKSAhPT0gMCkge1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoc3RhdGUubGluZUluZGVudCA+IDAgfHwgY2ggIT09IDB4MjUvKiAlICovKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBoYXNEaXJlY3RpdmVzID0gdHJ1ZTtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG5cbiAgICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX1dTX09SX0VPTChjaCkpIHtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBkaXJlY3RpdmVOYW1lID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG4gICAgZGlyZWN0aXZlQXJncyA9IFtdO1xuXG4gICAgaWYgKGRpcmVjdGl2ZU5hbWUubGVuZ3RoIDwgMSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2RpcmVjdGl2ZSBuYW1lIG11c3Qgbm90IGJlIGxlc3MgdGhhbiBvbmUgY2hhcmFjdGVyIGluIGxlbmd0aCcpO1xuICAgIH1cblxuICAgIHdoaWxlIChjaCAhPT0gMCkge1xuICAgICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaCA9PT0gMHgyMy8qICMgKi8pIHtcbiAgICAgICAgZG8geyBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7IH1cbiAgICAgICAgd2hpbGUgKGNoICE9PSAwICYmICFpc19FT0woY2gpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc19FT0woY2gpKSBicmVhaztcblxuICAgICAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG5cbiAgICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGRpcmVjdGl2ZUFyZ3MucHVzaChzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKSk7XG4gICAgfVxuXG4gICAgaWYgKGNoICE9PSAwKSByZWFkTGluZUJyZWFrKHN0YXRlKTtcblxuICAgIGlmIChfaGFzT3duUHJvcGVydHkkMS5jYWxsKGRpcmVjdGl2ZUhhbmRsZXJzLCBkaXJlY3RpdmVOYW1lKSkge1xuICAgICAgZGlyZWN0aXZlSGFuZGxlcnNbZGlyZWN0aXZlTmFtZV0oc3RhdGUsIGRpcmVjdGl2ZU5hbWUsIGRpcmVjdGl2ZUFyZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvd1dhcm5pbmcoc3RhdGUsICd1bmtub3duIGRvY3VtZW50IGRpcmVjdGl2ZSBcIicgKyBkaXJlY3RpdmVOYW1lICsgJ1wiJyk7XG4gICAgfVxuICB9XG5cbiAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuXG4gIGlmIChzdGF0ZS5saW5lSW5kZW50ID09PSAwICYmXG4gICAgICBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSAgICAgPT09IDB4MkQvKiAtICovICYmXG4gICAgICBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMSkgPT09IDB4MkQvKiAtICovICYmXG4gICAgICBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMikgPT09IDB4MkQvKiAtICovKSB7XG4gICAgc3RhdGUucG9zaXRpb24gKz0gMztcbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7XG5cbiAgfSBlbHNlIGlmIChoYXNEaXJlY3RpdmVzKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgJ2RpcmVjdGl2ZXMgZW5kIG1hcmsgaXMgZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIGNvbXBvc2VOb2RlKHN0YXRlLCBzdGF0ZS5saW5lSW5kZW50IC0gMSwgQ09OVEVYVF9CTE9DS19PVVQsIGZhbHNlLCB0cnVlKTtcbiAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuXG4gIGlmIChzdGF0ZS5jaGVja0xpbmVCcmVha3MgJiZcbiAgICAgIFBBVFRFUk5fTk9OX0FTQ0lJX0xJTkVfQlJFQUtTLnRlc3Qoc3RhdGUuaW5wdXQuc2xpY2UoZG9jdW1lbnRTdGFydCwgc3RhdGUucG9zaXRpb24pKSkge1xuICAgIHRocm93V2FybmluZyhzdGF0ZSwgJ25vbi1BU0NJSSBsaW5lIGJyZWFrcyBhcmUgaW50ZXJwcmV0ZWQgYXMgY29udGVudCcpO1xuICB9XG5cbiAgc3RhdGUuZG9jdW1lbnRzLnB1c2goc3RhdGUucmVzdWx0KTtcblxuICBpZiAoc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUpKSB7XG5cbiAgICBpZiAoc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikgPT09IDB4MkUvKiAuICovKSB7XG4gICAgICBzdGF0ZS5wb3NpdGlvbiArPSAzO1xuICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoc3RhdGUucG9zaXRpb24gPCAoc3RhdGUubGVuZ3RoIC0gMSkpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnZW5kIG9mIHRoZSBzdHJlYW0gb3IgYSBkb2N1bWVudCBzZXBhcmF0b3IgaXMgZXhwZWN0ZWQnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm47XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKSB7XG4gIGlucHV0ID0gU3RyaW5nKGlucHV0KTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgaWYgKGlucHV0Lmxlbmd0aCAhPT0gMCkge1xuXG4gICAgLy8gQWRkIHRhaWxpbmcgYFxcbmAgaWYgbm90IGV4aXN0c1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KGlucHV0Lmxlbmd0aCAtIDEpICE9PSAweDBBLyogTEYgKi8gJiZcbiAgICAgICAgaW5wdXQuY2hhckNvZGVBdChpbnB1dC5sZW5ndGggLSAxKSAhPT0gMHgwRC8qIENSICovKSB7XG4gICAgICBpbnB1dCArPSAnXFxuJztcbiAgICB9XG5cbiAgICAvLyBTdHJpcCBCT01cbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDEpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdGF0ZSA9IG5ldyBTdGF0ZSQxKGlucHV0LCBvcHRpb25zKTtcblxuICB2YXIgbnVsbHBvcyA9IGlucHV0LmluZGV4T2YoJ1xcMCcpO1xuXG4gIGlmIChudWxscG9zICE9PSAtMSkge1xuICAgIHN0YXRlLnBvc2l0aW9uID0gbnVsbHBvcztcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAnbnVsbCBieXRlIGlzIG5vdCBhbGxvd2VkIGluIGlucHV0Jyk7XG4gIH1cblxuICAvLyBVc2UgMCBhcyBzdHJpbmcgdGVybWluYXRvci4gVGhhdCBzaWduaWZpY2FudGx5IHNpbXBsaWZpZXMgYm91bmRzIGNoZWNrLlxuICBzdGF0ZS5pbnB1dCArPSAnXFwwJztcblxuICB3aGlsZSAoc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikgPT09IDB4MjAvKiBTcGFjZSAqLykge1xuICAgIHN0YXRlLmxpbmVJbmRlbnQgKz0gMTtcbiAgICBzdGF0ZS5wb3NpdGlvbiArPSAxO1xuICB9XG5cbiAgd2hpbGUgKHN0YXRlLnBvc2l0aW9uIDwgKHN0YXRlLmxlbmd0aCAtIDEpKSB7XG4gICAgcmVhZERvY3VtZW50KHN0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZS5kb2N1bWVudHM7XG59XG5cblxuZnVuY3Rpb24gbG9hZEFsbCQxKGlucHV0LCBpdGVyYXRvciwgb3B0aW9ucykge1xuICBpZiAoaXRlcmF0b3IgIT09IG51bGwgJiYgdHlwZW9mIGl0ZXJhdG9yID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb3B0aW9ucyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBvcHRpb25zID0gaXRlcmF0b3I7XG4gICAgaXRlcmF0b3IgPSBudWxsO1xuICB9XG5cbiAgdmFyIGRvY3VtZW50cyA9IGxvYWREb2N1bWVudHMoaW5wdXQsIG9wdGlvbnMpO1xuXG4gIGlmICh0eXBlb2YgaXRlcmF0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZG9jdW1lbnRzO1xuICB9XG5cbiAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBkb2N1bWVudHMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGl0ZXJhdG9yKGRvY3VtZW50c1tpbmRleF0pO1xuICB9XG59XG5cblxuZnVuY3Rpb24gbG9hZCQxKGlucHV0LCBvcHRpb25zKSB7XG4gIHZhciBkb2N1bWVudHMgPSBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKTtcblxuICBpZiAoZG9jdW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIC8qZXNsaW50LWRpc2FibGUgbm8tdW5kZWZpbmVkKi9cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IGVsc2UgaWYgKGRvY3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZG9jdW1lbnRzWzBdO1xuICB9XG4gIHRocm93IG5ldyBleGNlcHRpb24oJ2V4cGVjdGVkIGEgc2luZ2xlIGRvY3VtZW50IGluIHRoZSBzdHJlYW0sIGJ1dCBmb3VuZCBtb3JlJyk7XG59XG5cblxudmFyIGxvYWRBbGxfMSA9IGxvYWRBbGwkMTtcbnZhciBsb2FkXzEgICAgPSBsb2FkJDE7XG5cbnZhciBsb2FkZXIgPSB7XG5cdGxvYWRBbGw6IGxvYWRBbGxfMSxcblx0bG9hZDogbG9hZF8xXG59O1xuXG4vKmVzbGludC1kaXNhYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lKi9cblxuXG5cblxuXG52YXIgX3RvU3RyaW5nICAgICAgID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgQ0hBUl9CT00gICAgICAgICAgICAgICAgICA9IDB4RkVGRjtcbnZhciBDSEFSX1RBQiAgICAgICAgICAgICAgICAgID0gMHgwOTsgLyogVGFiICovXG52YXIgQ0hBUl9MSU5FX0ZFRUQgICAgICAgICAgICA9IDB4MEE7IC8qIExGICovXG52YXIgQ0hBUl9DQVJSSUFHRV9SRVRVUk4gICAgICA9IDB4MEQ7IC8qIENSICovXG52YXIgQ0hBUl9TUEFDRSAgICAgICAgICAgICAgICA9IDB4MjA7IC8qIFNwYWNlICovXG52YXIgQ0hBUl9FWENMQU1BVElPTiAgICAgICAgICA9IDB4MjE7IC8qICEgKi9cbnZhciBDSEFSX0RPVUJMRV9RVU9URSAgICAgICAgID0gMHgyMjsgLyogXCIgKi9cbnZhciBDSEFSX1NIQVJQICAgICAgICAgICAgICAgID0gMHgyMzsgLyogIyAqL1xudmFyIENIQVJfUEVSQ0VOVCAgICAgICAgICAgICAgPSAweDI1OyAvKiAlICovXG52YXIgQ0hBUl9BTVBFUlNBTkQgICAgICAgICAgICA9IDB4MjY7IC8qICYgKi9cbnZhciBDSEFSX1NJTkdMRV9RVU9URSAgICAgICAgID0gMHgyNzsgLyogJyAqL1xudmFyIENIQVJfQVNURVJJU0sgICAgICAgICAgICAgPSAweDJBOyAvKiAqICovXG52YXIgQ0hBUl9DT01NQSAgICAgICAgICAgICAgICA9IDB4MkM7IC8qICwgKi9cbnZhciBDSEFSX01JTlVTICAgICAgICAgICAgICAgID0gMHgyRDsgLyogLSAqL1xudmFyIENIQVJfQ09MT04gICAgICAgICAgICAgICAgPSAweDNBOyAvKiA6ICovXG52YXIgQ0hBUl9FUVVBTFMgICAgICAgICAgICAgICA9IDB4M0Q7IC8qID0gKi9cbnZhciBDSEFSX0dSRUFURVJfVEhBTiAgICAgICAgID0gMHgzRTsgLyogPiAqL1xudmFyIENIQVJfUVVFU1RJT04gICAgICAgICAgICAgPSAweDNGOyAvKiA/ICovXG52YXIgQ0hBUl9DT01NRVJDSUFMX0FUICAgICAgICA9IDB4NDA7IC8qIEAgKi9cbnZhciBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQgID0gMHg1QjsgLyogWyAqL1xudmFyIENIQVJfUklHSFRfU1FVQVJFX0JSQUNLRVQgPSAweDVEOyAvKiBdICovXG52YXIgQ0hBUl9HUkFWRV9BQ0NFTlQgICAgICAgICA9IDB4NjA7IC8qIGAgKi9cbnZhciBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVCAgID0gMHg3QjsgLyogeyAqL1xudmFyIENIQVJfVkVSVElDQUxfTElORSAgICAgICAgPSAweDdDOyAvKiB8ICovXG52YXIgQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VUICA9IDB4N0Q7IC8qIH0gKi9cblxudmFyIEVTQ0FQRV9TRVFVRU5DRVMgPSB7fTtcblxuRVNDQVBFX1NFUVVFTkNFU1sweDAwXSAgID0gJ1xcXFwwJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgwN10gICA9ICdcXFxcYSc7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MDhdICAgPSAnXFxcXGInO1xuRVNDQVBFX1NFUVVFTkNFU1sweDA5XSAgID0gJ1xcXFx0JztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgwQV0gICA9ICdcXFxcbic7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MEJdICAgPSAnXFxcXHYnO1xuRVNDQVBFX1NFUVVFTkNFU1sweDBDXSAgID0gJ1xcXFxmJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHgwRF0gICA9ICdcXFxccic7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MUJdICAgPSAnXFxcXGUnO1xuRVNDQVBFX1NFUVVFTkNFU1sweDIyXSAgID0gJ1xcXFxcIic7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4NUNdICAgPSAnXFxcXFxcXFwnO1xuRVNDQVBFX1NFUVVFTkNFU1sweDg1XSAgID0gJ1xcXFxOJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHhBMF0gICA9ICdcXFxcXyc7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MjAyOF0gPSAnXFxcXEwnO1xuRVNDQVBFX1NFUVVFTkNFU1sweDIwMjldID0gJ1xcXFxQJztcblxudmFyIERFUFJFQ0FURURfQk9PTEVBTlNfU1lOVEFYID0gW1xuICAneScsICdZJywgJ3llcycsICdZZXMnLCAnWUVTJywgJ29uJywgJ09uJywgJ09OJyxcbiAgJ24nLCAnTicsICdubycsICdObycsICdOTycsICdvZmYnLCAnT2ZmJywgJ09GRidcbl07XG5cbnZhciBERVBSRUNBVEVEX0JBU0U2MF9TWU5UQVggPSAvXlstK10/WzAtOV9dKyg/OjpbMC05X10rKSsoPzpcXC5bMC05X10qKT8kLztcblxuZnVuY3Rpb24gY29tcGlsZVN0eWxlTWFwKHNjaGVtYSwgbWFwKSB7XG4gIHZhciByZXN1bHQsIGtleXMsIGluZGV4LCBsZW5ndGgsIHRhZywgc3R5bGUsIHR5cGU7XG5cbiAgaWYgKG1hcCA9PT0gbnVsbCkgcmV0dXJuIHt9O1xuXG4gIHJlc3VsdCA9IHt9O1xuICBrZXlzID0gT2JqZWN0LmtleXMobWFwKTtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgdGFnID0ga2V5c1tpbmRleF07XG4gICAgc3R5bGUgPSBTdHJpbmcobWFwW3RhZ10pO1xuXG4gICAgaWYgKHRhZy5zbGljZSgwLCAyKSA9PT0gJyEhJykge1xuICAgICAgdGFnID0gJ3RhZzp5YW1sLm9yZywyMDAyOicgKyB0YWcuc2xpY2UoMik7XG4gICAgfVxuICAgIHR5cGUgPSBzY2hlbWEuY29tcGlsZWRUeXBlTWFwWydmYWxsYmFjayddW3RhZ107XG5cbiAgICBpZiAodHlwZSAmJiBfaGFzT3duUHJvcGVydHkuY2FsbCh0eXBlLnN0eWxlQWxpYXNlcywgc3R5bGUpKSB7XG4gICAgICBzdHlsZSA9IHR5cGUuc3R5bGVBbGlhc2VzW3N0eWxlXTtcbiAgICB9XG5cbiAgICByZXN1bHRbdGFnXSA9IHN0eWxlO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZW5jb2RlSGV4KGNoYXJhY3Rlcikge1xuICB2YXIgc3RyaW5nLCBoYW5kbGUsIGxlbmd0aDtcblxuICBzdHJpbmcgPSBjaGFyYWN0ZXIudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cbiAgaWYgKGNoYXJhY3RlciA8PSAweEZGKSB7XG4gICAgaGFuZGxlID0gJ3gnO1xuICAgIGxlbmd0aCA9IDI7XG4gIH0gZWxzZSBpZiAoY2hhcmFjdGVyIDw9IDB4RkZGRikge1xuICAgIGhhbmRsZSA9ICd1JztcbiAgICBsZW5ndGggPSA0O1xuICB9IGVsc2UgaWYgKGNoYXJhY3RlciA8PSAweEZGRkZGRkZGKSB7XG4gICAgaGFuZGxlID0gJ1UnO1xuICAgIGxlbmd0aCA9IDg7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IGV4Y2VwdGlvbignY29kZSBwb2ludCB3aXRoaW4gYSBzdHJpbmcgbWF5IG5vdCBiZSBncmVhdGVyIHRoYW4gMHhGRkZGRkZGRicpO1xuICB9XG5cbiAgcmV0dXJuICdcXFxcJyArIGhhbmRsZSArIGNvbW1vbi5yZXBlYXQoJzAnLCBsZW5ndGggLSBzdHJpbmcubGVuZ3RoKSArIHN0cmluZztcbn1cblxuXG52YXIgUVVPVElOR19UWVBFX1NJTkdMRSA9IDEsXG4gICAgUVVPVElOR19UWVBFX0RPVUJMRSA9IDI7XG5cbmZ1bmN0aW9uIFN0YXRlKG9wdGlvbnMpIHtcbiAgdGhpcy5zY2hlbWEgICAgICAgID0gb3B0aW9uc1snc2NoZW1hJ10gfHwgX2RlZmF1bHQ7XG4gIHRoaXMuaW5kZW50ICAgICAgICA9IE1hdGgubWF4KDEsIChvcHRpb25zWydpbmRlbnQnXSB8fCAyKSk7XG4gIHRoaXMubm9BcnJheUluZGVudCA9IG9wdGlvbnNbJ25vQXJyYXlJbmRlbnQnXSB8fCBmYWxzZTtcbiAgdGhpcy5za2lwSW52YWxpZCAgID0gb3B0aW9uc1snc2tpcEludmFsaWQnXSB8fCBmYWxzZTtcbiAgdGhpcy5mbG93TGV2ZWwgICAgID0gKGNvbW1vbi5pc05vdGhpbmcob3B0aW9uc1snZmxvd0xldmVsJ10pID8gLTEgOiBvcHRpb25zWydmbG93TGV2ZWwnXSk7XG4gIHRoaXMuc3R5bGVNYXAgICAgICA9IGNvbXBpbGVTdHlsZU1hcCh0aGlzLnNjaGVtYSwgb3B0aW9uc1snc3R5bGVzJ10gfHwgbnVsbCk7XG4gIHRoaXMuc29ydEtleXMgICAgICA9IG9wdGlvbnNbJ3NvcnRLZXlzJ10gfHwgZmFsc2U7XG4gIHRoaXMubGluZVdpZHRoICAgICA9IG9wdGlvbnNbJ2xpbmVXaWR0aCddIHx8IDgwO1xuICB0aGlzLm5vUmVmcyAgICAgICAgPSBvcHRpb25zWydub1JlZnMnXSB8fCBmYWxzZTtcbiAgdGhpcy5ub0NvbXBhdE1vZGUgID0gb3B0aW9uc1snbm9Db21wYXRNb2RlJ10gfHwgZmFsc2U7XG4gIHRoaXMuY29uZGVuc2VGbG93ICA9IG9wdGlvbnNbJ2NvbmRlbnNlRmxvdyddIHx8IGZhbHNlO1xuICB0aGlzLnF1b3RpbmdUeXBlICAgPSBvcHRpb25zWydxdW90aW5nVHlwZSddID09PSAnXCInID8gUVVPVElOR19UWVBFX0RPVUJMRSA6IFFVT1RJTkdfVFlQRV9TSU5HTEU7XG4gIHRoaXMuZm9yY2VRdW90ZXMgICA9IG9wdGlvbnNbJ2ZvcmNlUXVvdGVzJ10gfHwgZmFsc2U7XG4gIHRoaXMucmVwbGFjZXIgICAgICA9IHR5cGVvZiBvcHRpb25zWydyZXBsYWNlciddID09PSAnZnVuY3Rpb24nID8gb3B0aW9uc1sncmVwbGFjZXInXSA6IG51bGw7XG5cbiAgdGhpcy5pbXBsaWNpdFR5cGVzID0gdGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdDtcbiAgdGhpcy5leHBsaWNpdFR5cGVzID0gdGhpcy5zY2hlbWEuY29tcGlsZWRFeHBsaWNpdDtcblxuICB0aGlzLnRhZyA9IG51bGw7XG4gIHRoaXMucmVzdWx0ID0gJyc7XG5cbiAgdGhpcy5kdXBsaWNhdGVzID0gW107XG4gIHRoaXMudXNlZER1cGxpY2F0ZXMgPSBudWxsO1xufVxuXG4vLyBJbmRlbnRzIGV2ZXJ5IGxpbmUgaW4gYSBzdHJpbmcuIEVtcHR5IGxpbmVzIChcXG4gb25seSkgYXJlIG5vdCBpbmRlbnRlZC5cbmZ1bmN0aW9uIGluZGVudFN0cmluZyhzdHJpbmcsIHNwYWNlcykge1xuICB2YXIgaW5kID0gY29tbW9uLnJlcGVhdCgnICcsIHNwYWNlcyksXG4gICAgICBwb3NpdGlvbiA9IDAsXG4gICAgICBuZXh0ID0gLTEsXG4gICAgICByZXN1bHQgPSAnJyxcbiAgICAgIGxpbmUsXG4gICAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuXG4gIHdoaWxlIChwb3NpdGlvbiA8IGxlbmd0aCkge1xuICAgIG5leHQgPSBzdHJpbmcuaW5kZXhPZignXFxuJywgcG9zaXRpb24pO1xuICAgIGlmIChuZXh0ID09PSAtMSkge1xuICAgICAgbGluZSA9IHN0cmluZy5zbGljZShwb3NpdGlvbik7XG4gICAgICBwb3NpdGlvbiA9IGxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGluZSA9IHN0cmluZy5zbGljZShwb3NpdGlvbiwgbmV4dCArIDEpO1xuICAgICAgcG9zaXRpb24gPSBuZXh0ICsgMTtcbiAgICB9XG5cbiAgICBpZiAobGluZS5sZW5ndGggJiYgbGluZSAhPT0gJ1xcbicpIHJlc3VsdCArPSBpbmQ7XG5cbiAgICByZXN1bHQgKz0gbGluZTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlTmV4dExpbmUoc3RhdGUsIGxldmVsKSB7XG4gIHJldHVybiAnXFxuJyArIGNvbW1vbi5yZXBlYXQoJyAnLCBzdGF0ZS5pbmRlbnQgKiBsZXZlbCk7XG59XG5cbmZ1bmN0aW9uIHRlc3RJbXBsaWNpdFJlc29sdmluZyhzdGF0ZSwgc3RyKSB7XG4gIHZhciBpbmRleCwgbGVuZ3RoLCB0eXBlO1xuXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBzdGF0ZS5pbXBsaWNpdFR5cGVzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICB0eXBlID0gc3RhdGUuaW1wbGljaXRUeXBlc1tpbmRleF07XG5cbiAgICBpZiAodHlwZS5yZXNvbHZlKHN0cikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gWzMzXSBzLXdoaXRlIDo6PSBzLXNwYWNlIHwgcy10YWJcbmZ1bmN0aW9uIGlzV2hpdGVzcGFjZShjKSB7XG4gIHJldHVybiBjID09PSBDSEFSX1NQQUNFIHx8IGMgPT09IENIQVJfVEFCO1xufVxuXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNoYXJhY3RlciBjYW4gYmUgcHJpbnRlZCB3aXRob3V0IGVzY2FwaW5nLlxuLy8gRnJvbSBZQU1MIDEuMjogXCJhbnkgYWxsb3dlZCBjaGFyYWN0ZXJzIGtub3duIHRvIGJlIG5vbi1wcmludGFibGVcbi8vIHNob3VsZCBhbHNvIGJlIGVzY2FwZWQuIFtIb3dldmVyLF0gVGhpcyBpc27igJl0IG1hbmRhdG9yeVwiXG4vLyBEZXJpdmVkIGZyb20gbmItY2hhciAtIFxcdCAtICN4ODUgLSAjeEEwIC0gI3gyMDI4IC0gI3gyMDI5LlxuZnVuY3Rpb24gaXNQcmludGFibGUoYykge1xuICByZXR1cm4gICgweDAwMDIwIDw9IGMgJiYgYyA8PSAweDAwMDA3RSlcbiAgICAgIHx8ICgoMHgwMDBBMSA8PSBjICYmIGMgPD0gMHgwMEQ3RkYpICYmIGMgIT09IDB4MjAyOCAmJiBjICE9PSAweDIwMjkpXG4gICAgICB8fCAoKDB4MEUwMDAgPD0gYyAmJiBjIDw9IDB4MDBGRkZEKSAmJiBjICE9PSBDSEFSX0JPTSlcbiAgICAgIHx8ICAoMHgxMDAwMCA8PSBjICYmIGMgPD0gMHgxMEZGRkYpO1xufVxuXG4vLyBbMzRdIG5zLWNoYXIgOjo9IG5iLWNoYXIgLSBzLXdoaXRlXG4vLyBbMjddIG5iLWNoYXIgOjo9IGMtcHJpbnRhYmxlIC0gYi1jaGFyIC0gYy1ieXRlLW9yZGVyLW1hcmtcbi8vIFsyNl0gYi1jaGFyICA6Oj0gYi1saW5lLWZlZWQgfCBiLWNhcnJpYWdlLXJldHVyblxuLy8gSW5jbHVkaW5nIHMtd2hpdGUgKGZvciBzb21lIHJlYXNvbiwgZXhhbXBsZXMgZG9lc24ndCBtYXRjaCBzcGVjcyBpbiB0aGlzIGFzcGVjdClcbi8vIG5zLWNoYXIgOjo9IGMtcHJpbnRhYmxlIC0gYi1saW5lLWZlZWQgLSBiLWNhcnJpYWdlLXJldHVybiAtIGMtYnl0ZS1vcmRlci1tYXJrXG5mdW5jdGlvbiBpc05zQ2hhck9yV2hpdGVzcGFjZShjKSB7XG4gIHJldHVybiBpc1ByaW50YWJsZShjKVxuICAgICYmIGMgIT09IENIQVJfQk9NXG4gICAgLy8gLSBiLWNoYXJcbiAgICAmJiBjICE9PSBDSEFSX0NBUlJJQUdFX1JFVFVSTlxuICAgICYmIGMgIT09IENIQVJfTElORV9GRUVEO1xufVxuXG4vLyBbMTI3XSAgbnMtcGxhaW4tc2FmZShjKSA6Oj0gYyA9IGZsb3ctb3V0ICDih5IgbnMtcGxhaW4tc2FmZS1vdXRcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gZmxvdy1pbiAgIOKHkiBucy1wbGFpbi1zYWZlLWluXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGJsb2NrLWtleSDih5IgbnMtcGxhaW4tc2FmZS1vdXRcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gZmxvdy1rZXkgIOKHkiBucy1wbGFpbi1zYWZlLWluXG4vLyBbMTI4XSBucy1wbGFpbi1zYWZlLW91dCA6Oj0gbnMtY2hhclxuLy8gWzEyOV0gIG5zLXBsYWluLXNhZmUtaW4gOjo9IG5zLWNoYXIgLSBjLWZsb3ctaW5kaWNhdG9yXG4vLyBbMTMwXSAgbnMtcGxhaW4tY2hhcihjKSA6Oj0gICggbnMtcGxhaW4tc2FmZShjKSAtIOKAnDrigJ0gLSDigJwj4oCdIClcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCAvKiBBbiBucy1jaGFyIHByZWNlZGluZyAqLyDigJwj4oCdIClcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCDigJw64oCdIC8qIEZvbGxvd2VkIGJ5IGFuIG5zLXBsYWluLXNhZmUoYykgKi8gKVxuZnVuY3Rpb24gaXNQbGFpblNhZmUoYywgcHJldiwgaW5ibG9jaykge1xuICB2YXIgY0lzTnNDaGFyT3JXaGl0ZXNwYWNlID0gaXNOc0NoYXJPcldoaXRlc3BhY2UoYyk7XG4gIHZhciBjSXNOc0NoYXIgPSBjSXNOc0NoYXJPcldoaXRlc3BhY2UgJiYgIWlzV2hpdGVzcGFjZShjKTtcbiAgcmV0dXJuIChcbiAgICAvLyBucy1wbGFpbi1zYWZlXG4gICAgaW5ibG9jayA/IC8vIGMgPSBmbG93LWluXG4gICAgICBjSXNOc0NoYXJPcldoaXRlc3BhY2VcbiAgICAgIDogY0lzTnNDaGFyT3JXaGl0ZXNwYWNlXG4gICAgICAgIC8vIC0gYy1mbG93LWluZGljYXRvclxuICAgICAgICAmJiBjICE9PSBDSEFSX0NPTU1BXG4gICAgICAgICYmIGMgIT09IENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVFxuICAgICAgICAmJiBjICE9PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUXG4gICAgICAgICYmIGMgIT09IENIQVJfTEVGVF9DVVJMWV9CUkFDS0VUXG4gICAgICAgICYmIGMgIT09IENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVFxuICApXG4gICAgLy8gbnMtcGxhaW4tY2hhclxuICAgICYmIGMgIT09IENIQVJfU0hBUlAgLy8gZmFsc2Ugb24gJyMnXG4gICAgJiYgIShwcmV2ID09PSBDSEFSX0NPTE9OICYmICFjSXNOc0NoYXIpIC8vIGZhbHNlIG9uICc6ICdcbiAgICB8fCAoaXNOc0NoYXJPcldoaXRlc3BhY2UocHJldikgJiYgIWlzV2hpdGVzcGFjZShwcmV2KSAmJiBjID09PSBDSEFSX1NIQVJQKSAvLyBjaGFuZ2UgdG8gdHJ1ZSBvbiAnW14gXSMnXG4gICAgfHwgKHByZXYgPT09IENIQVJfQ09MT04gJiYgY0lzTnNDaGFyKTsgLy8gY2hhbmdlIHRvIHRydWUgb24gJzpbXiBdJ1xufVxuXG4vLyBTaW1wbGlmaWVkIHRlc3QgZm9yIHZhbHVlcyBhbGxvd2VkIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gcGxhaW4gc3R5bGUuXG5mdW5jdGlvbiBpc1BsYWluU2FmZUZpcnN0KGMpIHtcbiAgLy8gVXNlcyBhIHN1YnNldCBvZiBucy1jaGFyIC0gYy1pbmRpY2F0b3JcbiAgLy8gd2hlcmUgbnMtY2hhciA9IG5iLWNoYXIgLSBzLXdoaXRlLlxuICAvLyBObyBzdXBwb3J0IG9mICggKCDigJw/4oCdIHwg4oCcOuKAnSB8IOKAnC3igJ0gKSAvKiBGb2xsb3dlZCBieSBhbiBucy1wbGFpbi1zYWZlKGMpKSAqLyApIHBhcnRcbiAgcmV0dXJuIGlzUHJpbnRhYmxlKGMpICYmIGMgIT09IENIQVJfQk9NXG4gICAgJiYgIWlzV2hpdGVzcGFjZShjKSAvLyAtIHMtd2hpdGVcbiAgICAvLyAtIChjLWluZGljYXRvciA6Oj1cbiAgICAvLyDigJwt4oCdIHwg4oCcP+KAnSB8IOKAnDrigJ0gfCDigJws4oCdIHwg4oCcW+KAnSB8IOKAnF3igJ0gfCDigJx74oCdIHwg4oCcfeKAnVxuICAgICYmIGMgIT09IENIQVJfTUlOVVNcbiAgICAmJiBjICE9PSBDSEFSX1FVRVNUSU9OXG4gICAgJiYgYyAhPT0gQ0hBUl9DT0xPTlxuICAgICYmIGMgIT09IENIQVJfQ09NTUFcbiAgICAmJiBjICE9PSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVRcbiAgICAmJiBjICE9PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUXG4gICAgJiYgYyAhPT0gQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVRcbiAgICAmJiBjICE9PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVRcbiAgICAvLyB8IOKAnCPigJ0gfCDigJwm4oCdIHwg4oCcKuKAnSB8IOKAnCHigJ0gfCDigJx84oCdIHwg4oCcPeKAnSB8IOKAnD7igJ0gfCDigJwn4oCdIHwg4oCcXCLigJ1cbiAgICAmJiBjICE9PSBDSEFSX1NIQVJQXG4gICAgJiYgYyAhPT0gQ0hBUl9BTVBFUlNBTkRcbiAgICAmJiBjICE9PSBDSEFSX0FTVEVSSVNLXG4gICAgJiYgYyAhPT0gQ0hBUl9FWENMQU1BVElPTlxuICAgICYmIGMgIT09IENIQVJfVkVSVElDQUxfTElORVxuICAgICYmIGMgIT09IENIQVJfRVFVQUxTXG4gICAgJiYgYyAhPT0gQ0hBUl9HUkVBVEVSX1RIQU5cbiAgICAmJiBjICE9PSBDSEFSX1NJTkdMRV9RVU9URVxuICAgICYmIGMgIT09IENIQVJfRE9VQkxFX1FVT1RFXG4gICAgLy8gfCDigJwl4oCdIHwg4oCcQOKAnSB8IOKAnGDigJ0pXG4gICAgJiYgYyAhPT0gQ0hBUl9QRVJDRU5UXG4gICAgJiYgYyAhPT0gQ0hBUl9DT01NRVJDSUFMX0FUXG4gICAgJiYgYyAhPT0gQ0hBUl9HUkFWRV9BQ0NFTlQ7XG59XG5cbi8vIFNpbXBsaWZpZWQgdGVzdCBmb3IgdmFsdWVzIGFsbG93ZWQgYXMgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHBsYWluIHN0eWxlLlxuZnVuY3Rpb24gaXNQbGFpblNhZmVMYXN0KGMpIHtcbiAgLy8ganVzdCBub3Qgd2hpdGVzcGFjZSBvciBjb2xvbiwgaXQgd2lsbCBiZSBjaGVja2VkIHRvIGJlIHBsYWluIGNoYXJhY3RlciBsYXRlclxuICByZXR1cm4gIWlzV2hpdGVzcGFjZShjKSAmJiBjICE9PSBDSEFSX0NPTE9OO1xufVxuXG4vLyBTYW1lIGFzICdzdHJpbmcnLmNvZGVQb2ludEF0KHBvcyksIGJ1dCB3b3JrcyBpbiBvbGRlciBicm93c2Vycy5cbmZ1bmN0aW9uIGNvZGVQb2ludEF0KHN0cmluZywgcG9zKSB7XG4gIHZhciBmaXJzdCA9IHN0cmluZy5jaGFyQ29kZUF0KHBvcyksIHNlY29uZDtcbiAgaWYgKGZpcnN0ID49IDB4RDgwMCAmJiBmaXJzdCA8PSAweERCRkYgJiYgcG9zICsgMSA8IHN0cmluZy5sZW5ndGgpIHtcbiAgICBzZWNvbmQgPSBzdHJpbmcuY2hhckNvZGVBdChwb3MgKyAxKTtcbiAgICBpZiAoc2Vjb25kID49IDB4REMwMCAmJiBzZWNvbmQgPD0gMHhERkZGKSB7XG4gICAgICAvLyBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZyNzdXJyb2dhdGUtZm9ybXVsYWVcbiAgICAgIHJldHVybiAoZmlyc3QgLSAweEQ4MDApICogMHg0MDAgKyBzZWNvbmQgLSAweERDMDAgKyAweDEwMDAwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmlyc3Q7XG59XG5cbi8vIERldGVybWluZXMgd2hldGhlciBibG9jayBpbmRlbnRhdGlvbiBpbmRpY2F0b3IgaXMgcmVxdWlyZWQuXG5mdW5jdGlvbiBuZWVkSW5kZW50SW5kaWNhdG9yKHN0cmluZykge1xuICB2YXIgbGVhZGluZ1NwYWNlUmUgPSAvXlxcbiogLztcbiAgcmV0dXJuIGxlYWRpbmdTcGFjZVJlLnRlc3Qoc3RyaW5nKTtcbn1cblxudmFyIFNUWUxFX1BMQUlOICAgPSAxLFxuICAgIFNUWUxFX1NJTkdMRSAgPSAyLFxuICAgIFNUWUxFX0xJVEVSQUwgPSAzLFxuICAgIFNUWUxFX0ZPTERFRCAgPSA0LFxuICAgIFNUWUxFX0RPVUJMRSAgPSA1O1xuXG4vLyBEZXRlcm1pbmVzIHdoaWNoIHNjYWxhciBzdHlsZXMgYXJlIHBvc3NpYmxlIGFuZCByZXR1cm5zIHRoZSBwcmVmZXJyZWQgc3R5bGUuXG4vLyBsaW5lV2lkdGggPSAtMSA9PiBubyBsaW1pdC5cbi8vIFByZS1jb25kaXRpb25zOiBzdHIubGVuZ3RoID4gMC5cbi8vIFBvc3QtY29uZGl0aW9uczpcbi8vICAgIFNUWUxFX1BMQUlOIG9yIFNUWUxFX1NJTkdMRSA9PiBubyBcXG4gYXJlIGluIHRoZSBzdHJpbmcuXG4vLyAgICBTVFlMRV9MSVRFUkFMID0+IG5vIGxpbmVzIGFyZSBzdWl0YWJsZSBmb3IgZm9sZGluZyAob3IgbGluZVdpZHRoIGlzIC0xKS5cbi8vICAgIFNUWUxFX0ZPTERFRCA9PiBhIGxpbmUgPiBsaW5lV2lkdGggYW5kIGNhbiBiZSBmb2xkZWQgKGFuZCBsaW5lV2lkdGggIT0gLTEpLlxuZnVuY3Rpb24gY2hvb3NlU2NhbGFyU3R5bGUoc3RyaW5nLCBzaW5nbGVMaW5lT25seSwgaW5kZW50UGVyTGV2ZWwsIGxpbmVXaWR0aCxcbiAgdGVzdEFtYmlndW91c1R5cGUsIHF1b3RpbmdUeXBlLCBmb3JjZVF1b3RlcywgaW5ibG9jaykge1xuXG4gIHZhciBpO1xuICB2YXIgY2hhciA9IDA7XG4gIHZhciBwcmV2Q2hhciA9IG51bGw7XG4gIHZhciBoYXNMaW5lQnJlYWsgPSBmYWxzZTtcbiAgdmFyIGhhc0ZvbGRhYmxlTGluZSA9IGZhbHNlOyAvLyBvbmx5IGNoZWNrZWQgaWYgc2hvdWxkVHJhY2tXaWR0aFxuICB2YXIgc2hvdWxkVHJhY2tXaWR0aCA9IGxpbmVXaWR0aCAhPT0gLTE7XG4gIHZhciBwcmV2aW91c0xpbmVCcmVhayA9IC0xOyAvLyBjb3VudCB0aGUgZmlyc3QgbGluZSBjb3JyZWN0bHlcbiAgdmFyIHBsYWluID0gaXNQbGFpblNhZmVGaXJzdChjb2RlUG9pbnRBdChzdHJpbmcsIDApKVxuICAgICAgICAgICYmIGlzUGxhaW5TYWZlTGFzdChjb2RlUG9pbnRBdChzdHJpbmcsIHN0cmluZy5sZW5ndGggLSAxKSk7XG5cbiAgaWYgKHNpbmdsZUxpbmVPbmx5IHx8IGZvcmNlUXVvdGVzKSB7XG4gICAgLy8gQ2FzZTogbm8gYmxvY2sgc3R5bGVzLlxuICAgIC8vIENoZWNrIGZvciBkaXNhbGxvd2VkIGNoYXJhY3RlcnMgdG8gcnVsZSBvdXQgcGxhaW4gYW5kIHNpbmdsZS5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgY2hhciA+PSAweDEwMDAwID8gaSArPSAyIDogaSsrKSB7XG4gICAgICBjaGFyID0gY29kZVBvaW50QXQoc3RyaW5nLCBpKTtcbiAgICAgIGlmICghaXNQcmludGFibGUoY2hhcikpIHtcbiAgICAgICAgcmV0dXJuIFNUWUxFX0RPVUJMRTtcbiAgICAgIH1cbiAgICAgIHBsYWluID0gcGxhaW4gJiYgaXNQbGFpblNhZmUoY2hhciwgcHJldkNoYXIsIGluYmxvY2spO1xuICAgICAgcHJldkNoYXIgPSBjaGFyO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBDYXNlOiBibG9jayBzdHlsZXMgcGVybWl0dGVkLlxuICAgIGZvciAoaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBjaGFyID49IDB4MTAwMDAgPyBpICs9IDIgOiBpKyspIHtcbiAgICAgIGNoYXIgPSBjb2RlUG9pbnRBdChzdHJpbmcsIGkpO1xuICAgICAgaWYgKGNoYXIgPT09IENIQVJfTElORV9GRUVEKSB7XG4gICAgICAgIGhhc0xpbmVCcmVhayA9IHRydWU7XG4gICAgICAgIC8vIENoZWNrIGlmIGFueSBsaW5lIGNhbiBiZSBmb2xkZWQuXG4gICAgICAgIGlmIChzaG91bGRUcmFja1dpZHRoKSB7XG4gICAgICAgICAgaGFzRm9sZGFibGVMaW5lID0gaGFzRm9sZGFibGVMaW5lIHx8XG4gICAgICAgICAgICAvLyBGb2xkYWJsZSBsaW5lID0gdG9vIGxvbmcsIGFuZCBub3QgbW9yZS1pbmRlbnRlZC5cbiAgICAgICAgICAgIChpIC0gcHJldmlvdXNMaW5lQnJlYWsgLSAxID4gbGluZVdpZHRoICYmXG4gICAgICAgICAgICAgc3RyaW5nW3ByZXZpb3VzTGluZUJyZWFrICsgMV0gIT09ICcgJyk7XG4gICAgICAgICAgcHJldmlvdXNMaW5lQnJlYWsgPSBpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFpc1ByaW50YWJsZShjaGFyKSkge1xuICAgICAgICByZXR1cm4gU1RZTEVfRE9VQkxFO1xuICAgICAgfVxuICAgICAgcGxhaW4gPSBwbGFpbiAmJiBpc1BsYWluU2FmZShjaGFyLCBwcmV2Q2hhciwgaW5ibG9jayk7XG4gICAgICBwcmV2Q2hhciA9IGNoYXI7XG4gICAgfVxuICAgIC8vIGluIGNhc2UgdGhlIGVuZCBpcyBtaXNzaW5nIGEgXFxuXG4gICAgaGFzRm9sZGFibGVMaW5lID0gaGFzRm9sZGFibGVMaW5lIHx8IChzaG91bGRUcmFja1dpZHRoICYmXG4gICAgICAoaSAtIHByZXZpb3VzTGluZUJyZWFrIC0gMSA+IGxpbmVXaWR0aCAmJlxuICAgICAgIHN0cmluZ1twcmV2aW91c0xpbmVCcmVhayArIDFdICE9PSAnICcpKTtcbiAgfVxuICAvLyBBbHRob3VnaCBldmVyeSBzdHlsZSBjYW4gcmVwcmVzZW50IFxcbiB3aXRob3V0IGVzY2FwaW5nLCBwcmVmZXIgYmxvY2sgc3R5bGVzXG4gIC8vIGZvciBtdWx0aWxpbmUsIHNpbmNlIHRoZXkncmUgbW9yZSByZWFkYWJsZSBhbmQgdGhleSBkb24ndCBhZGQgZW1wdHkgbGluZXMuXG4gIC8vIEFsc28gcHJlZmVyIGZvbGRpbmcgYSBzdXBlci1sb25nIGxpbmUuXG4gIGlmICghaGFzTGluZUJyZWFrICYmICFoYXNGb2xkYWJsZUxpbmUpIHtcbiAgICAvLyBTdHJpbmdzIGludGVycHJldGFibGUgYXMgYW5vdGhlciB0eXBlIGhhdmUgdG8gYmUgcXVvdGVkO1xuICAgIC8vIGUuZy4gdGhlIHN0cmluZyAndHJ1ZScgdnMuIHRoZSBib29sZWFuIHRydWUuXG4gICAgaWYgKHBsYWluICYmICFmb3JjZVF1b3RlcyAmJiAhdGVzdEFtYmlndW91c1R5cGUoc3RyaW5nKSkge1xuICAgICAgcmV0dXJuIFNUWUxFX1BMQUlOO1xuICAgIH1cbiAgICByZXR1cm4gcXVvdGluZ1R5cGUgPT09IFFVT1RJTkdfVFlQRV9ET1VCTEUgPyBTVFlMRV9ET1VCTEUgOiBTVFlMRV9TSU5HTEU7XG4gIH1cbiAgLy8gRWRnZSBjYXNlOiBibG9jayBpbmRlbnRhdGlvbiBpbmRpY2F0b3IgY2FuIG9ubHkgaGF2ZSBvbmUgZGlnaXQuXG4gIGlmIChpbmRlbnRQZXJMZXZlbCA+IDkgJiYgbmVlZEluZGVudEluZGljYXRvcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIFNUWUxFX0RPVUJMRTtcbiAgfVxuICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgYmxvY2sgc3R5bGVzIGFyZSB2YWxpZC5cbiAgLy8gUHJlZmVyIGxpdGVyYWwgc3R5bGUgdW5sZXNzIHdlIHdhbnQgdG8gZm9sZC5cbiAgaWYgKCFmb3JjZVF1b3Rlcykge1xuICAgIHJldHVybiBoYXNGb2xkYWJsZUxpbmUgPyBTVFlMRV9GT0xERUQgOiBTVFlMRV9MSVRFUkFMO1xuICB9XG4gIHJldHVybiBxdW90aW5nVHlwZSA9PT0gUVVPVElOR19UWVBFX0RPVUJMRSA/IFNUWUxFX0RPVUJMRSA6IFNUWUxFX1NJTkdMRTtcbn1cblxuLy8gTm90ZTogbGluZSBicmVha2luZy9mb2xkaW5nIGlzIGltcGxlbWVudGVkIGZvciBvbmx5IHRoZSBmb2xkZWQgc3R5bGUuXG4vLyBOQi4gV2UgZHJvcCB0aGUgbGFzdCB0cmFpbGluZyBuZXdsaW5lIChpZiBhbnkpIG9mIGEgcmV0dXJuZWQgYmxvY2sgc2NhbGFyXG4vLyAgc2luY2UgdGhlIGR1bXBlciBhZGRzIGl0cyBvd24gbmV3bGluZS4gVGhpcyBhbHdheXMgd29ya3M6XG4vLyAgICDigKIgTm8gZW5kaW5nIG5ld2xpbmUgPT4gdW5hZmZlY3RlZDsgYWxyZWFkeSB1c2luZyBzdHJpcCBcIi1cIiBjaG9tcGluZy5cbi8vICAgIOKAoiBFbmRpbmcgbmV3bGluZSAgICA9PiByZW1vdmVkIHRoZW4gcmVzdG9yZWQuXG4vLyAgSW1wb3J0YW50bHksIHRoaXMga2VlcHMgdGhlIFwiK1wiIGNob21wIGluZGljYXRvciBmcm9tIGdhaW5pbmcgYW4gZXh0cmEgbGluZS5cbmZ1bmN0aW9uIHdyaXRlU2NhbGFyKHN0YXRlLCBzdHJpbmcsIGxldmVsLCBpc2tleSwgaW5ibG9jaykge1xuICBzdGF0ZS5kdW1wID0gKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHN0YXRlLnF1b3RpbmdUeXBlID09PSBRVU9USU5HX1RZUEVfRE9VQkxFID8gJ1wiXCInIDogXCInJ1wiO1xuICAgIH1cbiAgICBpZiAoIXN0YXRlLm5vQ29tcGF0TW9kZSkge1xuICAgICAgaWYgKERFUFJFQ0FURURfQk9PTEVBTlNfU1lOVEFYLmluZGV4T2Yoc3RyaW5nKSAhPT0gLTEgfHwgREVQUkVDQVRFRF9CQVNFNjBfU1lOVEFYLnRlc3Qoc3RyaW5nKSkge1xuICAgICAgICByZXR1cm4gc3RhdGUucXVvdGluZ1R5cGUgPT09IFFVT1RJTkdfVFlQRV9ET1VCTEUgPyAoJ1wiJyArIHN0cmluZyArICdcIicpIDogKFwiJ1wiICsgc3RyaW5nICsgXCInXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBpbmRlbnQgPSBzdGF0ZS5pbmRlbnQgKiBNYXRoLm1heCgxLCBsZXZlbCk7IC8vIG5vIDAtaW5kZW50IHNjYWxhcnNcbiAgICAvLyBBcyBpbmRlbnRhdGlvbiBnZXRzIGRlZXBlciwgbGV0IHRoZSB3aWR0aCBkZWNyZWFzZSBtb25vdG9uaWNhbGx5XG4gICAgLy8gdG8gdGhlIGxvd2VyIGJvdW5kIG1pbihzdGF0ZS5saW5lV2lkdGgsIDQwKS5cbiAgICAvLyBOb3RlIHRoYXQgdGhpcyBpbXBsaWVzXG4gICAgLy8gIHN0YXRlLmxpbmVXaWR0aCDiiaQgNDAgKyBzdGF0ZS5pbmRlbnQ6IHdpZHRoIGlzIGZpeGVkIGF0IHRoZSBsb3dlciBib3VuZC5cbiAgICAvLyAgc3RhdGUubGluZVdpZHRoID4gNDAgKyBzdGF0ZS5pbmRlbnQ6IHdpZHRoIGRlY3JlYXNlcyB1bnRpbCB0aGUgbG93ZXIgYm91bmQuXG4gICAgLy8gVGhpcyBiZWhhdmVzIGJldHRlciB0aGFuIGEgY29uc3RhbnQgbWluaW11bSB3aWR0aCB3aGljaCBkaXNhbGxvd3MgbmFycm93ZXIgb3B0aW9ucyxcbiAgICAvLyBvciBhbiBpbmRlbnQgdGhyZXNob2xkIHdoaWNoIGNhdXNlcyB0aGUgd2lkdGggdG8gc3VkZGVubHkgaW5jcmVhc2UuXG4gICAgdmFyIGxpbmVXaWR0aCA9IHN0YXRlLmxpbmVXaWR0aCA9PT0gLTFcbiAgICAgID8gLTEgOiBNYXRoLm1heChNYXRoLm1pbihzdGF0ZS5saW5lV2lkdGgsIDQwKSwgc3RhdGUubGluZVdpZHRoIC0gaW5kZW50KTtcblxuICAgIC8vIFdpdGhvdXQga25vd2luZyBpZiBrZXlzIGFyZSBpbXBsaWNpdC9leHBsaWNpdCwgYXNzdW1lIGltcGxpY2l0IGZvciBzYWZldHkuXG4gICAgdmFyIHNpbmdsZUxpbmVPbmx5ID0gaXNrZXlcbiAgICAgIC8vIE5vIGJsb2NrIHN0eWxlcyBpbiBmbG93IG1vZGUuXG4gICAgICB8fCAoc3RhdGUuZmxvd0xldmVsID4gLTEgJiYgbGV2ZWwgPj0gc3RhdGUuZmxvd0xldmVsKTtcbiAgICBmdW5jdGlvbiB0ZXN0QW1iaWd1aXR5KHN0cmluZykge1xuICAgICAgcmV0dXJuIHRlc3RJbXBsaWNpdFJlc29sdmluZyhzdGF0ZSwgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNob29zZVNjYWxhclN0eWxlKHN0cmluZywgc2luZ2xlTGluZU9ubHksIHN0YXRlLmluZGVudCwgbGluZVdpZHRoLFxuICAgICAgdGVzdEFtYmlndWl0eSwgc3RhdGUucXVvdGluZ1R5cGUsIHN0YXRlLmZvcmNlUXVvdGVzICYmICFpc2tleSwgaW5ibG9jaykpIHtcblxuICAgICAgY2FzZSBTVFlMRV9QTEFJTjpcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgIGNhc2UgU1RZTEVfU0lOR0xFOlxuICAgICAgICByZXR1cm4gXCInXCIgKyBzdHJpbmcucmVwbGFjZSgvJy9nLCBcIicnXCIpICsgXCInXCI7XG4gICAgICBjYXNlIFNUWUxFX0xJVEVSQUw6XG4gICAgICAgIHJldHVybiAnfCcgKyBibG9ja0hlYWRlcihzdHJpbmcsIHN0YXRlLmluZGVudClcbiAgICAgICAgICArIGRyb3BFbmRpbmdOZXdsaW5lKGluZGVudFN0cmluZyhzdHJpbmcsIGluZGVudCkpO1xuICAgICAgY2FzZSBTVFlMRV9GT0xERUQ6XG4gICAgICAgIHJldHVybiAnPicgKyBibG9ja0hlYWRlcihzdHJpbmcsIHN0YXRlLmluZGVudClcbiAgICAgICAgICArIGRyb3BFbmRpbmdOZXdsaW5lKGluZGVudFN0cmluZyhmb2xkU3RyaW5nKHN0cmluZywgbGluZVdpZHRoKSwgaW5kZW50KSk7XG4gICAgICBjYXNlIFNUWUxFX0RPVUJMRTpcbiAgICAgICAgcmV0dXJuICdcIicgKyBlc2NhcGVTdHJpbmcoc3RyaW5nKSArICdcIic7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKCdpbXBvc3NpYmxlIGVycm9yOiBpbnZhbGlkIHNjYWxhciBzdHlsZScpO1xuICAgIH1cbiAgfSgpKTtcbn1cblxuLy8gUHJlLWNvbmRpdGlvbnM6IHN0cmluZyBpcyB2YWxpZCBmb3IgYSBibG9jayBzY2FsYXIsIDEgPD0gaW5kZW50UGVyTGV2ZWwgPD0gOS5cbmZ1bmN0aW9uIGJsb2NrSGVhZGVyKHN0cmluZywgaW5kZW50UGVyTGV2ZWwpIHtcbiAgdmFyIGluZGVudEluZGljYXRvciA9IG5lZWRJbmRlbnRJbmRpY2F0b3Ioc3RyaW5nKSA/IFN0cmluZyhpbmRlbnRQZXJMZXZlbCkgOiAnJztcblxuICAvLyBub3RlIHRoZSBzcGVjaWFsIGNhc2U6IHRoZSBzdHJpbmcgJ1xcbicgY291bnRzIGFzIGEgXCJ0cmFpbGluZ1wiIGVtcHR5IGxpbmUuXG4gIHZhciBjbGlwID0gICAgICAgICAgc3RyaW5nW3N0cmluZy5sZW5ndGggLSAxXSA9PT0gJ1xcbic7XG4gIHZhciBrZWVwID0gY2xpcCAmJiAoc3RyaW5nW3N0cmluZy5sZW5ndGggLSAyXSA9PT0gJ1xcbicgfHwgc3RyaW5nID09PSAnXFxuJyk7XG4gIHZhciBjaG9tcCA9IGtlZXAgPyAnKycgOiAoY2xpcCA/ICcnIDogJy0nKTtcblxuICByZXR1cm4gaW5kZW50SW5kaWNhdG9yICsgY2hvbXAgKyAnXFxuJztcbn1cblxuLy8gKFNlZSB0aGUgbm90ZSBmb3Igd3JpdGVTY2FsYXIuKVxuZnVuY3Rpb24gZHJvcEVuZGluZ05ld2xpbmUoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmdbc3RyaW5nLmxlbmd0aCAtIDFdID09PSAnXFxuJyA/IHN0cmluZy5zbGljZSgwLCAtMSkgOiBzdHJpbmc7XG59XG5cbi8vIE5vdGU6IGEgbG9uZyBsaW5lIHdpdGhvdXQgYSBzdWl0YWJsZSBicmVhayBwb2ludCB3aWxsIGV4Y2VlZCB0aGUgd2lkdGggbGltaXQuXG4vLyBQcmUtY29uZGl0aW9uczogZXZlcnkgY2hhciBpbiBzdHIgaXNQcmludGFibGUsIHN0ci5sZW5ndGggPiAwLCB3aWR0aCA+IDAuXG5mdW5jdGlvbiBmb2xkU3RyaW5nKHN0cmluZywgd2lkdGgpIHtcbiAgLy8gSW4gZm9sZGVkIHN0eWxlLCAkayQgY29uc2VjdXRpdmUgbmV3bGluZXMgb3V0cHV0IGFzICRrKzEkIG5ld2xpbmVz4oCUXG4gIC8vIHVubGVzcyB0aGV5J3JlIGJlZm9yZSBvciBhZnRlciBhIG1vcmUtaW5kZW50ZWQgbGluZSwgb3IgYXQgdGhlIHZlcnlcbiAgLy8gYmVnaW5uaW5nIG9yIGVuZCwgaW4gd2hpY2ggY2FzZSAkayQgbWFwcyB0byAkayQuXG4gIC8vIFRoZXJlZm9yZSwgcGFyc2UgZWFjaCBjaHVuayBhcyBuZXdsaW5lKHMpIGZvbGxvd2VkIGJ5IGEgY29udGVudCBsaW5lLlxuICB2YXIgbGluZVJlID0gLyhcXG4rKShbXlxcbl0qKS9nO1xuXG4gIC8vIGZpcnN0IGxpbmUgKHBvc3NpYmx5IGFuIGVtcHR5IGxpbmUpXG4gIHZhciByZXN1bHQgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBuZXh0TEYgPSBzdHJpbmcuaW5kZXhPZignXFxuJyk7XG4gICAgbmV4dExGID0gbmV4dExGICE9PSAtMSA/IG5leHRMRiA6IHN0cmluZy5sZW5ndGg7XG4gICAgbGluZVJlLmxhc3RJbmRleCA9IG5leHRMRjtcbiAgICByZXR1cm4gZm9sZExpbmUoc3RyaW5nLnNsaWNlKDAsIG5leHRMRiksIHdpZHRoKTtcbiAgfSgpKTtcbiAgLy8gSWYgd2UgaGF2ZW4ndCByZWFjaGVkIHRoZSBmaXJzdCBjb250ZW50IGxpbmUgeWV0LCBkb24ndCBhZGQgYW4gZXh0cmEgXFxuLlxuICB2YXIgcHJldk1vcmVJbmRlbnRlZCA9IHN0cmluZ1swXSA9PT0gJ1xcbicgfHwgc3RyaW5nWzBdID09PSAnICc7XG4gIHZhciBtb3JlSW5kZW50ZWQ7XG5cbiAgLy8gcmVzdCBvZiB0aGUgbGluZXNcbiAgdmFyIG1hdGNoO1xuICB3aGlsZSAoKG1hdGNoID0gbGluZVJlLmV4ZWMoc3RyaW5nKSkpIHtcbiAgICB2YXIgcHJlZml4ID0gbWF0Y2hbMV0sIGxpbmUgPSBtYXRjaFsyXTtcbiAgICBtb3JlSW5kZW50ZWQgPSAobGluZVswXSA9PT0gJyAnKTtcbiAgICByZXN1bHQgKz0gcHJlZml4XG4gICAgICArICghcHJldk1vcmVJbmRlbnRlZCAmJiAhbW9yZUluZGVudGVkICYmIGxpbmUgIT09ICcnXG4gICAgICAgID8gJ1xcbicgOiAnJylcbiAgICAgICsgZm9sZExpbmUobGluZSwgd2lkdGgpO1xuICAgIHByZXZNb3JlSW5kZW50ZWQgPSBtb3JlSW5kZW50ZWQ7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBHcmVlZHkgbGluZSBicmVha2luZy5cbi8vIFBpY2tzIHRoZSBsb25nZXN0IGxpbmUgdW5kZXIgdGhlIGxpbWl0IGVhY2ggdGltZSxcbi8vIG90aGVyd2lzZSBzZXR0bGVzIGZvciB0aGUgc2hvcnRlc3QgbGluZSBvdmVyIHRoZSBsaW1pdC5cbi8vIE5CLiBNb3JlLWluZGVudGVkIGxpbmVzICpjYW5ub3QqIGJlIGZvbGRlZCwgYXMgdGhhdCB3b3VsZCBhZGQgYW4gZXh0cmEgXFxuLlxuZnVuY3Rpb24gZm9sZExpbmUobGluZSwgd2lkdGgpIHtcbiAgaWYgKGxpbmUgPT09ICcnIHx8IGxpbmVbMF0gPT09ICcgJykgcmV0dXJuIGxpbmU7XG5cbiAgLy8gU2luY2UgYSBtb3JlLWluZGVudGVkIGxpbmUgYWRkcyBhIFxcbiwgYnJlYWtzIGNhbid0IGJlIGZvbGxvd2VkIGJ5IGEgc3BhY2UuXG4gIHZhciBicmVha1JlID0gLyBbXiBdL2c7IC8vIG5vdGU6IHRoZSBtYXRjaCBpbmRleCB3aWxsIGFsd2F5cyBiZSA8PSBsZW5ndGgtMi5cbiAgdmFyIG1hdGNoO1xuICAvLyBzdGFydCBpcyBhbiBpbmNsdXNpdmUgaW5kZXguIGVuZCwgY3VyciwgYW5kIG5leHQgYXJlIGV4Y2x1c2l2ZS5cbiAgdmFyIHN0YXJ0ID0gMCwgZW5kLCBjdXJyID0gMCwgbmV4dCA9IDA7XG4gIHZhciByZXN1bHQgPSAnJztcblxuICAvLyBJbnZhcmlhbnRzOiAwIDw9IHN0YXJ0IDw9IGxlbmd0aC0xLlxuICAvLyAgIDAgPD0gY3VyciA8PSBuZXh0IDw9IG1heCgwLCBsZW5ndGgtMikuIGN1cnIgLSBzdGFydCA8PSB3aWR0aC5cbiAgLy8gSW5zaWRlIHRoZSBsb29wOlxuICAvLyAgIEEgbWF0Y2ggaW1wbGllcyBsZW5ndGggPj0gMiwgc28gY3VyciBhbmQgbmV4dCBhcmUgPD0gbGVuZ3RoLTIuXG4gIHdoaWxlICgobWF0Y2ggPSBicmVha1JlLmV4ZWMobGluZSkpKSB7XG4gICAgbmV4dCA9IG1hdGNoLmluZGV4O1xuICAgIC8vIG1haW50YWluIGludmFyaWFudDogY3VyciAtIHN0YXJ0IDw9IHdpZHRoXG4gICAgaWYgKG5leHQgLSBzdGFydCA+IHdpZHRoKSB7XG4gICAgICBlbmQgPSAoY3VyciA+IHN0YXJ0KSA/IGN1cnIgOiBuZXh0OyAvLyBkZXJpdmUgZW5kIDw9IGxlbmd0aC0yXG4gICAgICByZXN1bHQgKz0gJ1xcbicgKyBsaW5lLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgICAgLy8gc2tpcCB0aGUgc3BhY2UgdGhhdCB3YXMgb3V0cHV0IGFzIFxcblxuICAgICAgc3RhcnQgPSBlbmQgKyAxOyAgICAgICAgICAgICAgICAgICAgLy8gZGVyaXZlIHN0YXJ0IDw9IGxlbmd0aC0xXG4gICAgfVxuICAgIGN1cnIgPSBuZXh0O1xuICB9XG5cbiAgLy8gQnkgdGhlIGludmFyaWFudHMsIHN0YXJ0IDw9IGxlbmd0aC0xLCBzbyB0aGVyZSBpcyBzb21ldGhpbmcgbGVmdCBvdmVyLlxuICAvLyBJdCBpcyBlaXRoZXIgdGhlIHdob2xlIHN0cmluZyBvciBhIHBhcnQgc3RhcnRpbmcgZnJvbSBub24td2hpdGVzcGFjZS5cbiAgcmVzdWx0ICs9ICdcXG4nO1xuICAvLyBJbnNlcnQgYSBicmVhayBpZiB0aGUgcmVtYWluZGVyIGlzIHRvbyBsb25nIGFuZCB0aGVyZSBpcyBhIGJyZWFrIGF2YWlsYWJsZS5cbiAgaWYgKGxpbmUubGVuZ3RoIC0gc3RhcnQgPiB3aWR0aCAmJiBjdXJyID4gc3RhcnQpIHtcbiAgICByZXN1bHQgKz0gbGluZS5zbGljZShzdGFydCwgY3VycikgKyAnXFxuJyArIGxpbmUuc2xpY2UoY3VyciArIDEpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCArPSBsaW5lLnNsaWNlKHN0YXJ0KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQuc2xpY2UoMSk7IC8vIGRyb3AgZXh0cmEgXFxuIGpvaW5lclxufVxuXG4vLyBFc2NhcGVzIGEgZG91YmxlLXF1b3RlZCBzdHJpbmcuXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcoc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIGNoYXIgPSAwO1xuICB2YXIgZXNjYXBlU2VxO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgY2hhciA+PSAweDEwMDAwID8gaSArPSAyIDogaSsrKSB7XG4gICAgY2hhciA9IGNvZGVQb2ludEF0KHN0cmluZywgaSk7XG4gICAgZXNjYXBlU2VxID0gRVNDQVBFX1NFUVVFTkNFU1tjaGFyXTtcblxuICAgIGlmICghZXNjYXBlU2VxICYmIGlzUHJpbnRhYmxlKGNoYXIpKSB7XG4gICAgICByZXN1bHQgKz0gc3RyaW5nW2ldO1xuICAgICAgaWYgKGNoYXIgPj0gMHgxMDAwMCkgcmVzdWx0ICs9IHN0cmluZ1tpICsgMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCArPSBlc2NhcGVTZXEgfHwgZW5jb2RlSGV4KGNoYXIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvd1NlcXVlbmNlKHN0YXRlLCBsZXZlbCwgb2JqZWN0KSB7XG4gIHZhciBfcmVzdWx0ID0gJycsXG4gICAgICBfdGFnICAgID0gc3RhdGUudGFnLFxuICAgICAgaW5kZXgsXG4gICAgICBsZW5ndGgsXG4gICAgICB2YWx1ZTtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICB2YWx1ZSA9IG9iamVjdFtpbmRleF07XG5cbiAgICBpZiAoc3RhdGUucmVwbGFjZXIpIHtcbiAgICAgIHZhbHVlID0gc3RhdGUucmVwbGFjZXIuY2FsbChvYmplY3QsIFN0cmluZyhpbmRleCksIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSBvbmx5IHZhbGlkIGVsZW1lbnRzLCBwdXQgbnVsbCBpbnN0ZWFkIG9mIGludmFsaWQgZWxlbWVudHMuXG4gICAgaWYgKHdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIHZhbHVlLCBmYWxzZSwgZmFsc2UpIHx8XG4gICAgICAgICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICB3cml0ZU5vZGUoc3RhdGUsIGxldmVsLCBudWxsLCBmYWxzZSwgZmFsc2UpKSkge1xuXG4gICAgICBpZiAoX3Jlc3VsdCAhPT0gJycpIF9yZXN1bHQgKz0gJywnICsgKCFzdGF0ZS5jb25kZW5zZUZsb3cgPyAnICcgOiAnJyk7XG4gICAgICBfcmVzdWx0ICs9IHN0YXRlLmR1bXA7XG4gICAgfVxuICB9XG5cbiAgc3RhdGUudGFnID0gX3RhZztcbiAgc3RhdGUuZHVtcCA9ICdbJyArIF9yZXN1bHQgKyAnXSc7XG59XG5cbmZ1bmN0aW9uIHdyaXRlQmxvY2tTZXF1ZW5jZShzdGF0ZSwgbGV2ZWwsIG9iamVjdCwgY29tcGFjdCkge1xuICB2YXIgX3Jlc3VsdCA9ICcnLFxuICAgICAgX3RhZyAgICA9IHN0YXRlLnRhZyxcbiAgICAgIGluZGV4LFxuICAgICAgbGVuZ3RoLFxuICAgICAgdmFsdWU7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgdmFsdWUgPSBvYmplY3RbaW5kZXhdO1xuXG4gICAgaWYgKHN0YXRlLnJlcGxhY2VyKSB7XG4gICAgICB2YWx1ZSA9IHN0YXRlLnJlcGxhY2VyLmNhbGwob2JqZWN0LCBTdHJpbmcoaW5kZXgpLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gV3JpdGUgb25seSB2YWxpZCBlbGVtZW50cywgcHV0IG51bGwgaW5zdGVhZCBvZiBpbnZhbGlkIGVsZW1lbnRzLlxuICAgIGlmICh3cml0ZU5vZGUoc3RhdGUsIGxldmVsICsgMSwgdmFsdWUsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlKSB8fFxuICAgICAgICAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgd3JpdGVOb2RlKHN0YXRlLCBsZXZlbCArIDEsIG51bGwsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlKSkpIHtcblxuICAgICAgaWYgKCFjb21wYWN0IHx8IF9yZXN1bHQgIT09ICcnKSB7XG4gICAgICAgIF9yZXN1bHQgKz0gZ2VuZXJhdGVOZXh0TGluZShzdGF0ZSwgbGV2ZWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUuZHVtcCAmJiBDSEFSX0xJTkVfRkVFRCA9PT0gc3RhdGUuZHVtcC5jaGFyQ29kZUF0KDApKSB7XG4gICAgICAgIF9yZXN1bHQgKz0gJy0nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3Jlc3VsdCArPSAnLSAnO1xuICAgICAgfVxuXG4gICAgICBfcmVzdWx0ICs9IHN0YXRlLmR1bXA7XG4gICAgfVxuICB9XG5cbiAgc3RhdGUudGFnID0gX3RhZztcbiAgc3RhdGUuZHVtcCA9IF9yZXN1bHQgfHwgJ1tdJzsgLy8gRW1wdHkgc2VxdWVuY2UgaWYgbm8gdmFsaWQgdmFsdWVzLlxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb3dNYXBwaW5nKHN0YXRlLCBsZXZlbCwgb2JqZWN0KSB7XG4gIHZhciBfcmVzdWx0ICAgICAgID0gJycsXG4gICAgICBfdGFnICAgICAgICAgID0gc3RhdGUudGFnLFxuICAgICAgb2JqZWN0S2V5TGlzdCA9IE9iamVjdC5rZXlzKG9iamVjdCksXG4gICAgICBpbmRleCxcbiAgICAgIGxlbmd0aCxcbiAgICAgIG9iamVjdEtleSxcbiAgICAgIG9iamVjdFZhbHVlLFxuICAgICAgcGFpckJ1ZmZlcjtcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0S2V5TGlzdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG5cbiAgICBwYWlyQnVmZmVyID0gJyc7XG4gICAgaWYgKF9yZXN1bHQgIT09ICcnKSBwYWlyQnVmZmVyICs9ICcsICc7XG5cbiAgICBpZiAoc3RhdGUuY29uZGVuc2VGbG93KSBwYWlyQnVmZmVyICs9ICdcIic7XG5cbiAgICBvYmplY3RLZXkgPSBvYmplY3RLZXlMaXN0W2luZGV4XTtcbiAgICBvYmplY3RWYWx1ZSA9IG9iamVjdFtvYmplY3RLZXldO1xuXG4gICAgaWYgKHN0YXRlLnJlcGxhY2VyKSB7XG4gICAgICBvYmplY3RWYWx1ZSA9IHN0YXRlLnJlcGxhY2VyLmNhbGwob2JqZWN0LCBvYmplY3RLZXksIG9iamVjdFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIG9iamVjdEtleSwgZmFsc2UsIGZhbHNlKSkge1xuICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBwYWlyIGJlY2F1c2Ugb2YgaW52YWxpZCBrZXk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmR1bXAubGVuZ3RoID4gMTAyNCkgcGFpckJ1ZmZlciArPSAnPyAnO1xuXG4gICAgcGFpckJ1ZmZlciArPSBzdGF0ZS5kdW1wICsgKHN0YXRlLmNvbmRlbnNlRmxvdyA/ICdcIicgOiAnJykgKyAnOicgKyAoc3RhdGUuY29uZGVuc2VGbG93ID8gJycgOiAnICcpO1xuXG4gICAgaWYgKCF3cml0ZU5vZGUoc3RhdGUsIGxldmVsLCBvYmplY3RWYWx1ZSwgZmFsc2UsIGZhbHNlKSkge1xuICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBwYWlyIGJlY2F1c2Ugb2YgaW52YWxpZCB2YWx1ZS5cbiAgICB9XG5cbiAgICBwYWlyQnVmZmVyICs9IHN0YXRlLmR1bXA7XG5cbiAgICAvLyBCb3RoIGtleSBhbmQgdmFsdWUgYXJlIHZhbGlkLlxuICAgIF9yZXN1bHQgKz0gcGFpckJ1ZmZlcjtcbiAgfVxuXG4gIHN0YXRlLnRhZyA9IF90YWc7XG4gIHN0YXRlLmR1bXAgPSAneycgKyBfcmVzdWx0ICsgJ30nO1xufVxuXG5mdW5jdGlvbiB3cml0ZUJsb2NrTWFwcGluZyhzdGF0ZSwgbGV2ZWwsIG9iamVjdCwgY29tcGFjdCkge1xuICB2YXIgX3Jlc3VsdCAgICAgICA9ICcnLFxuICAgICAgX3RhZyAgICAgICAgICA9IHN0YXRlLnRhZyxcbiAgICAgIG9iamVjdEtleUxpc3QgPSBPYmplY3Qua2V5cyhvYmplY3QpLFxuICAgICAgaW5kZXgsXG4gICAgICBsZW5ndGgsXG4gICAgICBvYmplY3RLZXksXG4gICAgICBvYmplY3RWYWx1ZSxcbiAgICAgIGV4cGxpY2l0UGFpcixcbiAgICAgIHBhaXJCdWZmZXI7XG5cbiAgLy8gQWxsb3cgc29ydGluZyBrZXlzIHNvIHRoYXQgdGhlIG91dHB1dCBmaWxlIGlzIGRldGVybWluaXN0aWNcbiAgaWYgKHN0YXRlLnNvcnRLZXlzID09PSB0cnVlKSB7XG4gICAgLy8gRGVmYXVsdCBzb3J0aW5nXG4gICAgb2JqZWN0S2V5TGlzdC5zb3J0KCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHN0YXRlLnNvcnRLZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gQ3VzdG9tIHNvcnQgZnVuY3Rpb25cbiAgICBvYmplY3RLZXlMaXN0LnNvcnQoc3RhdGUuc29ydEtleXMpO1xuICB9IGVsc2UgaWYgKHN0YXRlLnNvcnRLZXlzKSB7XG4gICAgLy8gU29tZXRoaW5nIGlzIHdyb25nXG4gICAgdGhyb3cgbmV3IGV4Y2VwdGlvbignc29ydEtleXMgbXVzdCBiZSBhIGJvb2xlYW4gb3IgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdEtleUxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHBhaXJCdWZmZXIgPSAnJztcblxuICAgIGlmICghY29tcGFjdCB8fCBfcmVzdWx0ICE9PSAnJykge1xuICAgICAgcGFpckJ1ZmZlciArPSBnZW5lcmF0ZU5leHRMaW5lKHN0YXRlLCBsZXZlbCk7XG4gICAgfVxuXG4gICAgb2JqZWN0S2V5ID0gb2JqZWN0S2V5TGlzdFtpbmRleF07XG4gICAgb2JqZWN0VmFsdWUgPSBvYmplY3Rbb2JqZWN0S2V5XTtcblxuICAgIGlmIChzdGF0ZS5yZXBsYWNlcikge1xuICAgICAgb2JqZWN0VmFsdWUgPSBzdGF0ZS5yZXBsYWNlci5jYWxsKG9iamVjdCwgb2JqZWN0S2V5LCBvYmplY3RWYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKCF3cml0ZU5vZGUoc3RhdGUsIGxldmVsICsgMSwgb2JqZWN0S2V5LCB0cnVlLCB0cnVlLCB0cnVlKSkge1xuICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBwYWlyIGJlY2F1c2Ugb2YgaW52YWxpZCBrZXkuXG4gICAgfVxuXG4gICAgZXhwbGljaXRQYWlyID0gKHN0YXRlLnRhZyAhPT0gbnVsbCAmJiBzdGF0ZS50YWcgIT09ICc/JykgfHxcbiAgICAgICAgICAgICAgICAgICAoc3RhdGUuZHVtcCAmJiBzdGF0ZS5kdW1wLmxlbmd0aCA+IDEwMjQpO1xuXG4gICAgaWYgKGV4cGxpY2l0UGFpcikge1xuICAgICAgaWYgKHN0YXRlLmR1bXAgJiYgQ0hBUl9MSU5FX0ZFRUQgPT09IHN0YXRlLmR1bXAuY2hhckNvZGVBdCgwKSkge1xuICAgICAgICBwYWlyQnVmZmVyICs9ICc/JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhaXJCdWZmZXIgKz0gJz8gJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYWlyQnVmZmVyICs9IHN0YXRlLmR1bXA7XG5cbiAgICBpZiAoZXhwbGljaXRQYWlyKSB7XG4gICAgICBwYWlyQnVmZmVyICs9IGdlbmVyYXRlTmV4dExpbmUoc3RhdGUsIGxldmVsKTtcbiAgICB9XG5cbiAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwgKyAxLCBvYmplY3RWYWx1ZSwgdHJ1ZSwgZXhwbGljaXRQYWlyKSkge1xuICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBwYWlyIGJlY2F1c2Ugb2YgaW52YWxpZCB2YWx1ZS5cbiAgICB9XG5cbiAgICBpZiAoc3RhdGUuZHVtcCAmJiBDSEFSX0xJTkVfRkVFRCA9PT0gc3RhdGUuZHVtcC5jaGFyQ29kZUF0KDApKSB7XG4gICAgICBwYWlyQnVmZmVyICs9ICc6JztcbiAgICB9IGVsc2Uge1xuICAgICAgcGFpckJ1ZmZlciArPSAnOiAnO1xuICAgIH1cblxuICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUuZHVtcDtcblxuICAgIC8vIEJvdGgga2V5IGFuZCB2YWx1ZSBhcmUgdmFsaWQuXG4gICAgX3Jlc3VsdCArPSBwYWlyQnVmZmVyO1xuICB9XG5cbiAgc3RhdGUudGFnID0gX3RhZztcbiAgc3RhdGUuZHVtcCA9IF9yZXN1bHQgfHwgJ3t9JzsgLy8gRW1wdHkgbWFwcGluZyBpZiBubyB2YWxpZCBwYWlycy5cbn1cblxuZnVuY3Rpb24gZGV0ZWN0VHlwZShzdGF0ZSwgb2JqZWN0LCBleHBsaWNpdCkge1xuICB2YXIgX3Jlc3VsdCwgdHlwZUxpc3QsIGluZGV4LCBsZW5ndGgsIHR5cGUsIHN0eWxlO1xuXG4gIHR5cGVMaXN0ID0gZXhwbGljaXQgPyBzdGF0ZS5leHBsaWNpdFR5cGVzIDogc3RhdGUuaW1wbGljaXRUeXBlcztcblxuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gdHlwZUxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHR5cGUgPSB0eXBlTGlzdFtpbmRleF07XG5cbiAgICBpZiAoKHR5cGUuaW5zdGFuY2VPZiAgfHwgdHlwZS5wcmVkaWNhdGUpICYmXG4gICAgICAgICghdHlwZS5pbnN0YW5jZU9mIHx8ICgodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcpICYmIChvYmplY3QgaW5zdGFuY2VvZiB0eXBlLmluc3RhbmNlT2YpKSkgJiZcbiAgICAgICAgKCF0eXBlLnByZWRpY2F0ZSAgfHwgdHlwZS5wcmVkaWNhdGUob2JqZWN0KSkpIHtcblxuICAgICAgaWYgKGV4cGxpY2l0KSB7XG4gICAgICAgIGlmICh0eXBlLm11bHRpICYmIHR5cGUucmVwcmVzZW50TmFtZSkge1xuICAgICAgICAgIHN0YXRlLnRhZyA9IHR5cGUucmVwcmVzZW50TmFtZShvYmplY3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLnRhZyA9IHR5cGUudGFnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS50YWcgPSAnPyc7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlLnJlcHJlc2VudCkge1xuICAgICAgICBzdHlsZSA9IHN0YXRlLnN0eWxlTWFwW3R5cGUudGFnXSB8fCB0eXBlLmRlZmF1bHRTdHlsZTtcblxuICAgICAgICBpZiAoX3RvU3RyaW5nLmNhbGwodHlwZS5yZXByZXNlbnQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nKSB7XG4gICAgICAgICAgX3Jlc3VsdCA9IHR5cGUucmVwcmVzZW50KG9iamVjdCwgc3R5bGUpO1xuICAgICAgICB9IGVsc2UgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHR5cGUucmVwcmVzZW50LCBzdHlsZSkpIHtcbiAgICAgICAgICBfcmVzdWx0ID0gdHlwZS5yZXByZXNlbnRbc3R5bGVdKG9iamVjdCwgc3R5bGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBleGNlcHRpb24oJyE8JyArIHR5cGUudGFnICsgJz4gdGFnIHJlc29sdmVyIGFjY2VwdHMgbm90IFwiJyArIHN0eWxlICsgJ1wiIHN0eWxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZS5kdW1wID0gX3Jlc3VsdDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBTZXJpYWxpemVzIGBvYmplY3RgIGFuZCB3cml0ZXMgaXQgdG8gZ2xvYmFsIGByZXN1bHRgLlxuLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIG9yIGZhbHNlIG9uIGludmFsaWQgb2JqZWN0LlxuLy9cbmZ1bmN0aW9uIHdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIG9iamVjdCwgYmxvY2ssIGNvbXBhY3QsIGlza2V5LCBpc2Jsb2Nrc2VxKSB7XG4gIHN0YXRlLnRhZyA9IG51bGw7XG4gIHN0YXRlLmR1bXAgPSBvYmplY3Q7XG5cbiAgaWYgKCFkZXRlY3RUeXBlKHN0YXRlLCBvYmplY3QsIGZhbHNlKSkge1xuICAgIGRldGVjdFR5cGUoc3RhdGUsIG9iamVjdCwgdHJ1ZSk7XG4gIH1cblxuICB2YXIgdHlwZSA9IF90b1N0cmluZy5jYWxsKHN0YXRlLmR1bXApO1xuICB2YXIgaW5ibG9jayA9IGJsb2NrO1xuICB2YXIgdGFnU3RyO1xuXG4gIGlmIChibG9jaykge1xuICAgIGJsb2NrID0gKHN0YXRlLmZsb3dMZXZlbCA8IDAgfHwgc3RhdGUuZmxvd0xldmVsID4gbGV2ZWwpO1xuICB9XG5cbiAgdmFyIG9iamVjdE9yQXJyYXkgPSB0eXBlID09PSAnW29iamVjdCBPYmplY3RdJyB8fCB0eXBlID09PSAnW29iamVjdCBBcnJheV0nLFxuICAgICAgZHVwbGljYXRlSW5kZXgsXG4gICAgICBkdXBsaWNhdGU7XG5cbiAgaWYgKG9iamVjdE9yQXJyYXkpIHtcbiAgICBkdXBsaWNhdGVJbmRleCA9IHN0YXRlLmR1cGxpY2F0ZXMuaW5kZXhPZihvYmplY3QpO1xuICAgIGR1cGxpY2F0ZSA9IGR1cGxpY2F0ZUluZGV4ICE9PSAtMTtcbiAgfVxuXG4gIGlmICgoc3RhdGUudGFnICE9PSBudWxsICYmIHN0YXRlLnRhZyAhPT0gJz8nKSB8fCBkdXBsaWNhdGUgfHwgKHN0YXRlLmluZGVudCAhPT0gMiAmJiBsZXZlbCA+IDApKSB7XG4gICAgY29tcGFjdCA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGR1cGxpY2F0ZSAmJiBzdGF0ZS51c2VkRHVwbGljYXRlc1tkdXBsaWNhdGVJbmRleF0pIHtcbiAgICBzdGF0ZS5kdW1wID0gJypyZWZfJyArIGR1cGxpY2F0ZUluZGV4O1xuICB9IGVsc2Uge1xuICAgIGlmIChvYmplY3RPckFycmF5ICYmIGR1cGxpY2F0ZSAmJiAhc3RhdGUudXNlZER1cGxpY2F0ZXNbZHVwbGljYXRlSW5kZXhdKSB7XG4gICAgICBzdGF0ZS51c2VkRHVwbGljYXRlc1tkdXBsaWNhdGVJbmRleF0gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgIGlmIChibG9jayAmJiAoT2JqZWN0LmtleXMoc3RhdGUuZHVtcCkubGVuZ3RoICE9PSAwKSkge1xuICAgICAgICB3cml0ZUJsb2NrTWFwcGluZyhzdGF0ZSwgbGV2ZWwsIHN0YXRlLmR1bXAsIGNvbXBhY3QpO1xuICAgICAgICBpZiAoZHVwbGljYXRlKSB7XG4gICAgICAgICAgc3RhdGUuZHVtcCA9ICcmcmVmXycgKyBkdXBsaWNhdGVJbmRleCArIHN0YXRlLmR1bXA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlRmxvd01hcHBpbmcoc3RhdGUsIGxldmVsLCBzdGF0ZS5kdW1wKTtcbiAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgIHN0YXRlLmR1bXAgPSAnJnJlZl8nICsgZHVwbGljYXRlSW5kZXggKyAnICcgKyBzdGF0ZS5kdW1wO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICBpZiAoYmxvY2sgJiYgKHN0YXRlLmR1bXAubGVuZ3RoICE9PSAwKSkge1xuICAgICAgICBpZiAoc3RhdGUubm9BcnJheUluZGVudCAmJiAhaXNibG9ja3NlcSAmJiBsZXZlbCA+IDApIHtcbiAgICAgICAgICB3cml0ZUJsb2NrU2VxdWVuY2Uoc3RhdGUsIGxldmVsIC0gMSwgc3RhdGUuZHVtcCwgY29tcGFjdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd3JpdGVCbG9ja1NlcXVlbmNlKHN0YXRlLCBsZXZlbCwgc3RhdGUuZHVtcCwgY29tcGFjdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgIHN0YXRlLmR1bXAgPSAnJnJlZl8nICsgZHVwbGljYXRlSW5kZXggKyBzdGF0ZS5kdW1wO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3cml0ZUZsb3dTZXF1ZW5jZShzdGF0ZSwgbGV2ZWwsIHN0YXRlLmR1bXApO1xuICAgICAgICBpZiAoZHVwbGljYXRlKSB7XG4gICAgICAgICAgc3RhdGUuZHVtcCA9ICcmcmVmXycgKyBkdXBsaWNhdGVJbmRleCArICcgJyArIHN0YXRlLmR1bXA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdbb2JqZWN0IFN0cmluZ10nKSB7XG4gICAgICBpZiAoc3RhdGUudGFnICE9PSAnPycpIHtcbiAgICAgICAgd3JpdGVTY2FsYXIoc3RhdGUsIHN0YXRlLmR1bXAsIGxldmVsLCBpc2tleSwgaW5ibG9jayk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnW29iamVjdCBVbmRlZmluZWRdJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3RhdGUuc2tpcEludmFsaWQpIHJldHVybiBmYWxzZTtcbiAgICAgIHRocm93IG5ldyBleGNlcHRpb24oJ3VuYWNjZXB0YWJsZSBraW5kIG9mIGFuIG9iamVjdCB0byBkdW1wICcgKyB0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUudGFnICE9PSBudWxsICYmIHN0YXRlLnRhZyAhPT0gJz8nKSB7XG4gICAgICAvLyBOZWVkIHRvIGVuY29kZSBhbGwgY2hhcmFjdGVycyBleGNlcHQgdGhvc2UgYWxsb3dlZCBieSB0aGUgc3BlYzpcbiAgICAgIC8vXG4gICAgICAvLyBbMzVdIG5zLWRlYy1kaWdpdCAgICA6Oj0gIFsjeDMwLSN4MzldIC8qIDAtOSAqL1xuICAgICAgLy8gWzM2XSBucy1oZXgtZGlnaXQgICAgOjo9ICBucy1kZWMtZGlnaXRcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHwgWyN4NDEtI3g0Nl0gLyogQS1GICovIHwgWyN4NjEtI3g2Nl0gLyogYS1mICovXG4gICAgICAvLyBbMzddIG5zLWFzY2lpLWxldHRlciA6Oj0gIFsjeDQxLSN4NUFdIC8qIEEtWiAqLyB8IFsjeDYxLSN4N0FdIC8qIGEteiAqL1xuICAgICAgLy8gWzM4XSBucy13b3JkLWNoYXIgICAgOjo9ICBucy1kZWMtZGlnaXQgfCBucy1hc2NpaS1sZXR0ZXIgfCDigJwt4oCdXG4gICAgICAvLyBbMzldIG5zLXVyaS1jaGFyICAgICA6Oj0gIOKAnCXigJ0gbnMtaGV4LWRpZ2l0IG5zLWhleC1kaWdpdCB8IG5zLXdvcmQtY2hhciB8IOKAnCPigJ1cbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHwg4oCcO+KAnSB8IOKAnC/igJ0gfCDigJw/4oCdIHwg4oCcOuKAnSB8IOKAnEDigJ0gfCDigJwm4oCdIHwg4oCcPeKAnSB8IOKAnCvigJ0gfCDigJwk4oCdIHwg4oCcLOKAnVxuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfCDigJxf4oCdIHwg4oCcLuKAnSB8IOKAnCHigJ0gfCDigJx+4oCdIHwg4oCcKuKAnSB8IOKAnCfigJ0gfCDigJwo4oCdIHwg4oCcKeKAnSB8IOKAnFvigJ0gfCDigJxd4oCdXG4gICAgICAvL1xuICAgICAgLy8gQWxzbyBuZWVkIHRvIGVuY29kZSAnIScgYmVjYXVzZSBpdCBoYXMgc3BlY2lhbCBtZWFuaW5nIChlbmQgb2YgdGFnIHByZWZpeCkuXG4gICAgICAvL1xuICAgICAgdGFnU3RyID0gZW5jb2RlVVJJKFxuICAgICAgICBzdGF0ZS50YWdbMF0gPT09ICchJyA/IHN0YXRlLnRhZy5zbGljZSgxKSA6IHN0YXRlLnRhZ1xuICAgICAgKS5yZXBsYWNlKC8hL2csICclMjEnKTtcblxuICAgICAgaWYgKHN0YXRlLnRhZ1swXSA9PT0gJyEnKSB7XG4gICAgICAgIHRhZ1N0ciA9ICchJyArIHRhZ1N0cjtcbiAgICAgIH0gZWxzZSBpZiAodGFnU3RyLnNsaWNlKDAsIDE4KSA9PT0gJ3RhZzp5YW1sLm9yZywyMDAyOicpIHtcbiAgICAgICAgdGFnU3RyID0gJyEhJyArIHRhZ1N0ci5zbGljZSgxOCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YWdTdHIgPSAnITwnICsgdGFnU3RyICsgJz4nO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZS5kdW1wID0gdGFnU3RyICsgJyAnICsgc3RhdGUuZHVtcDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0RHVwbGljYXRlUmVmZXJlbmNlcyhvYmplY3QsIHN0YXRlKSB7XG4gIHZhciBvYmplY3RzID0gW10sXG4gICAgICBkdXBsaWNhdGVzSW5kZXhlcyA9IFtdLFxuICAgICAgaW5kZXgsXG4gICAgICBsZW5ndGg7XG5cbiAgaW5zcGVjdE5vZGUob2JqZWN0LCBvYmplY3RzLCBkdXBsaWNhdGVzSW5kZXhlcyk7XG5cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGR1cGxpY2F0ZXNJbmRleGVzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBzdGF0ZS5kdXBsaWNhdGVzLnB1c2gob2JqZWN0c1tkdXBsaWNhdGVzSW5kZXhlc1tpbmRleF1dKTtcbiAgfVxuICBzdGF0ZS51c2VkRHVwbGljYXRlcyA9IG5ldyBBcnJheShsZW5ndGgpO1xufVxuXG5mdW5jdGlvbiBpbnNwZWN0Tm9kZShvYmplY3QsIG9iamVjdHMsIGR1cGxpY2F0ZXNJbmRleGVzKSB7XG4gIHZhciBvYmplY3RLZXlMaXN0LFxuICAgICAgaW5kZXgsXG4gICAgICBsZW5ndGg7XG5cbiAgaWYgKG9iamVjdCAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0Jykge1xuICAgIGluZGV4ID0gb2JqZWN0cy5pbmRleE9mKG9iamVjdCk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgaWYgKGR1cGxpY2F0ZXNJbmRleGVzLmluZGV4T2YoaW5kZXgpID09PSAtMSkge1xuICAgICAgICBkdXBsaWNhdGVzSW5kZXhlcy5wdXNoKGluZGV4KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb2JqZWN0cy5wdXNoKG9iamVjdCk7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICAgICAgaW5zcGVjdE5vZGUob2JqZWN0W2luZGV4XSwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmplY3RLZXlMaXN0ID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICAgICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0S2V5TGlzdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICAgICAgaW5zcGVjdE5vZGUob2JqZWN0W29iamVjdEtleUxpc3RbaW5kZXhdXSwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGR1bXAkMShpbnB1dCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICB2YXIgc3RhdGUgPSBuZXcgU3RhdGUob3B0aW9ucyk7XG5cbiAgaWYgKCFzdGF0ZS5ub1JlZnMpIGdldER1cGxpY2F0ZVJlZmVyZW5jZXMoaW5wdXQsIHN0YXRlKTtcblxuICB2YXIgdmFsdWUgPSBpbnB1dDtcblxuICBpZiAoc3RhdGUucmVwbGFjZXIpIHtcbiAgICB2YWx1ZSA9IHN0YXRlLnJlcGxhY2VyLmNhbGwoeyAnJzogdmFsdWUgfSwgJycsIHZhbHVlKTtcbiAgfVxuXG4gIGlmICh3cml0ZU5vZGUoc3RhdGUsIDAsIHZhbHVlLCB0cnVlLCB0cnVlKSkgcmV0dXJuIHN0YXRlLmR1bXAgKyAnXFxuJztcblxuICByZXR1cm4gJyc7XG59XG5cbnZhciBkdW1wXzEgPSBkdW1wJDE7XG5cbnZhciBkdW1wZXIgPSB7XG5cdGR1bXA6IGR1bXBfMVxufTtcblxuZnVuY3Rpb24gcmVuYW1lZChmcm9tLCB0bykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24geWFtbC4nICsgZnJvbSArICcgaXMgcmVtb3ZlZCBpbiBqcy15YW1sIDQuICcgK1xuICAgICAgJ1VzZSB5YW1sLicgKyB0byArICcgaW5zdGVhZCwgd2hpY2ggaXMgbm93IHNhZmUgYnkgZGVmYXVsdC4nKTtcbiAgfTtcbn1cblxuXG52YXIgVHlwZSAgICAgICAgICAgICAgICA9IHR5cGU7XG52YXIgU2NoZW1hICAgICAgICAgICAgICA9IHNjaGVtYTtcbnZhciBGQUlMU0FGRV9TQ0hFTUEgICAgID0gZmFpbHNhZmU7XG52YXIgSlNPTl9TQ0hFTUEgICAgICAgICA9IGpzb247XG52YXIgQ09SRV9TQ0hFTUEgICAgICAgICA9IGNvcmU7XG52YXIgREVGQVVMVF9TQ0hFTUEgICAgICA9IF9kZWZhdWx0O1xudmFyIGxvYWQgICAgICAgICAgICAgICAgPSBsb2FkZXIubG9hZDtcbnZhciBsb2FkQWxsICAgICAgICAgICAgID0gbG9hZGVyLmxvYWRBbGw7XG52YXIgZHVtcCAgICAgICAgICAgICAgICA9IGR1bXBlci5kdW1wO1xudmFyIFlBTUxFeGNlcHRpb24gICAgICAgPSBleGNlcHRpb247XG5cbi8vIFJlLWV4cG9ydCBhbGwgdHlwZXMgaW4gY2FzZSB1c2VyIHdhbnRzIHRvIGNyZWF0ZSBjdXN0b20gc2NoZW1hXG52YXIgdHlwZXMgPSB7XG4gIGJpbmFyeTogICAgYmluYXJ5LFxuICBmbG9hdDogICAgIGZsb2F0LFxuICBtYXA6ICAgICAgIG1hcCxcbiAgbnVsbDogICAgICBfbnVsbCxcbiAgcGFpcnM6ICAgICBwYWlycyxcbiAgc2V0OiAgICAgICBzZXQsXG4gIHRpbWVzdGFtcDogdGltZXN0YW1wLFxuICBib29sOiAgICAgIGJvb2wsXG4gIGludDogICAgICAgaW50LFxuICBtZXJnZTogICAgIG1lcmdlLFxuICBvbWFwOiAgICAgIG9tYXAsXG4gIHNlcTogICAgICAgc2VxLFxuICBzdHI6ICAgICAgIHN0clxufTtcblxuLy8gUmVtb3ZlZCBmdW5jdGlvbnMgZnJvbSBKUy1ZQU1MIDMuMC54XG52YXIgc2FmZUxvYWQgICAgICAgICAgICA9IHJlbmFtZWQoJ3NhZmVMb2FkJywgJ2xvYWQnKTtcbnZhciBzYWZlTG9hZEFsbCAgICAgICAgID0gcmVuYW1lZCgnc2FmZUxvYWRBbGwnLCAnbG9hZEFsbCcpO1xudmFyIHNhZmVEdW1wICAgICAgICAgICAgPSByZW5hbWVkKCdzYWZlRHVtcCcsICdkdW1wJyk7XG5cbnZhciBqc1lhbWwgPSB7XG5cdFR5cGU6IFR5cGUsXG5cdFNjaGVtYTogU2NoZW1hLFxuXHRGQUlMU0FGRV9TQ0hFTUE6IEZBSUxTQUZFX1NDSEVNQSxcblx0SlNPTl9TQ0hFTUE6IEpTT05fU0NIRU1BLFxuXHRDT1JFX1NDSEVNQTogQ09SRV9TQ0hFTUEsXG5cdERFRkFVTFRfU0NIRU1BOiBERUZBVUxUX1NDSEVNQSxcblx0bG9hZDogbG9hZCxcblx0bG9hZEFsbDogbG9hZEFsbCxcblx0ZHVtcDogZHVtcCxcblx0WUFNTEV4Y2VwdGlvbjogWUFNTEV4Y2VwdGlvbixcblx0dHlwZXM6IHR5cGVzLFxuXHRzYWZlTG9hZDogc2FmZUxvYWQsXG5cdHNhZmVMb2FkQWxsOiBzYWZlTG9hZEFsbCxcblx0c2FmZUR1bXA6IHNhZmVEdW1wXG59O1xuXG5leHBvcnQgZGVmYXVsdCBqc1lhbWw7XG5leHBvcnQgeyBDT1JFX1NDSEVNQSwgREVGQVVMVF9TQ0hFTUEsIEZBSUxTQUZFX1NDSEVNQSwgSlNPTl9TQ0hFTUEsIFNjaGVtYSwgVHlwZSwgWUFNTEV4Y2VwdGlvbiwgZHVtcCwgbG9hZCwgbG9hZEFsbCwgc2FmZUR1bXAsIHNhZmVMb2FkLCBzYWZlTG9hZEFsbCwgdHlwZXMgfTtcbiIsImV4cG9ydCBjb25zdCBZQU1MID0gKGFwcCkgPT4gYFxubmFtZTogQ0lcblxuZW52OlxuICBERUJVRzogJ25hcGk6KidcbiAgQVBQX05BTUU6ICcke2FwcH0nXG4gIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVDogJzEwLjEzJ1xuXG5wZXJtaXNzaW9uczpcbiAgY29udGVudHM6IHdyaXRlXG4gIGlkLXRva2VuOiB3cml0ZVxuXG5vbjpcbiAgcHVzaDpcbiAgICBicmFuY2hlczpcbiAgICAgIC0gbWFpblxuICAgIHRhZ3MtaWdub3JlOlxuICAgICAgLSAnKionXG4gICAgcGF0aHMtaWdub3JlOlxuICAgICAgLSAnKiovKi5tZCdcbiAgICAgIC0gJ0xJQ0VOU0UnXG4gICAgICAtICcqKi8qLmdpdGlnbm9yZSdcbiAgICAgIC0gJy5lZGl0b3Jjb25maWcnXG4gICAgICAtICdkb2NzLyoqJ1xuICBwdWxsX3JlcXVlc3Q6XG5cbmpvYnM6XG4gIGJ1aWxkOlxuXG4gICAgc3RyYXRlZ3k6XG4gICAgICBmYWlsLWZhc3Q6IGZhbHNlXG4gICAgICBtYXRyaXg6XG4gICAgICAgIHNldHRpbmdzOlxuICAgICAgICAgIC0gaG9zdDogbWFjb3MtbGF0ZXN0XG4gICAgICAgICAgICB0YXJnZXQ6ICd4ODZfNjQtYXBwbGUtZGFyd2luJ1xuICAgICAgICAgICAgYnVpbGQ6IHlhcm4gYnVpbGQgLS10YXJnZXQgeDg2XzY0LWFwcGxlLWRhcndpblxuICAgICAgICAgIC0gaG9zdDogd2luZG93cy1sYXRlc3RcbiAgICAgICAgICAgIGJ1aWxkOiB5YXJuIGJ1aWxkIC0tdGFyZ2V0IHg4Nl82NC1wYy13aW5kb3dzLW1zdmNcbiAgICAgICAgICAgIHRhcmdldDogJ3g4Nl82NC1wYy13aW5kb3dzLW1zdmMnXG4gICAgICAgICAgLSBob3N0OiB3aW5kb3dzLWxhdGVzdFxuICAgICAgICAgICAgYnVpbGQ6IHxcbiAgICAgICAgICAgICAgeWFybiBidWlsZCAtLXRhcmdldCBpNjg2LXBjLXdpbmRvd3MtbXN2Y1xuICAgICAgICAgICAgICB5YXJuIHRlc3RcbiAgICAgICAgICAgIHRhcmdldDogJ2k2ODYtcGMtd2luZG93cy1tc3ZjJ1xuICAgICAgICAgIC0gaG9zdDogdWJ1bnR1LWxhdGVzdFxuICAgICAgICAgICAgdGFyZ2V0OiAneDg2XzY0LXVua25vd24tbGludXgtZ251J1xuICAgICAgICAgICAgZG9ja2VyOiBnaGNyLmlvL25hcGktcnMvbmFwaS1ycy9ub2RlanMtcnVzdDpsdHMtZGViaWFuXG4gICAgICAgICAgICBidWlsZDogeWFybiBidWlsZCAtLXRhcmdldCB4ODZfNjQtdW5rbm93bi1saW51eC1nbnVcbiAgICAgICAgICAtIGhvc3Q6IHVidW50dS1sYXRlc3RcbiAgICAgICAgICAgIHRhcmdldDogJ3g4Nl82NC11bmtub3duLWxpbnV4LW11c2wnXG4gICAgICAgICAgICBkb2NrZXI6IGdoY3IuaW8vbmFwaS1ycy9uYXBpLXJzL25vZGVqcy1ydXN0Omx0cy1hbHBpbmVcbiAgICAgICAgICAgIGJ1aWxkOiB5YXJuIGJ1aWxkIC0tdGFyZ2V0IHg4Nl82NC11bmtub3duLWxpbnV4LW11c2xcbiAgICAgICAgICAtIGhvc3Q6IG1hY29zLWxhdGVzdFxuICAgICAgICAgICAgdGFyZ2V0OiAnYWFyY2g2NC1hcHBsZS1kYXJ3aW4nXG4gICAgICAgICAgICBidWlsZDogeWFybiBidWlsZCAtLXRhcmdldCBhYXJjaDY0LWFwcGxlLWRhcndpblxuICAgICAgICAgIC0gaG9zdDogdWJ1bnR1LWxhdGVzdFxuICAgICAgICAgICAgdGFyZ2V0OiAnYWFyY2g2NC11bmtub3duLWxpbnV4LWdudSdcbiAgICAgICAgICAgIGRvY2tlcjogZ2hjci5pby9uYXBpLXJzL25hcGktcnMvbm9kZWpzLXJ1c3Q6bHRzLWRlYmlhbi1hYXJjaDY0XG4gICAgICAgICAgICBidWlsZDogeWFybiBidWlsZCAtLXRhcmdldCBhYXJjaDY0LXVua25vd24tbGludXgtZ251XG4gICAgICAgICAgLSBob3N0OiB1YnVudHUtbGF0ZXN0XG4gICAgICAgICAgICB0YXJnZXQ6ICdhcm12Ny11bmtub3duLWxpbnV4LWdudWVhYmloZidcbiAgICAgICAgICAgIHNldHVwOiB8XG4gICAgICAgICAgICAgIHN1ZG8gYXB0LWdldCB1cGRhdGVcbiAgICAgICAgICAgICAgc3VkbyBhcHQtZ2V0IGluc3RhbGwgZ2NjLWFybS1saW51eC1nbnVlYWJpaGYgLXlcbiAgICAgICAgICAgIGJ1aWxkOiB5YXJuIGJ1aWxkIC0tdGFyZ2V0IGFybXY3LXVua25vd24tbGludXgtZ251ZWFiaWhmXG4gICAgICAgICAgLSBob3N0OiB1YnVudHUtbGF0ZXN0XG4gICAgICAgICAgICB0YXJnZXQ6ICdhcm12Ny11bmtub3duLWxpbnV4LW11c2xlYWJpaGYnXG4gICAgICAgICAgICBidWlsZDogeWFybiBidWlsZCAtLXRhcmdldCBhcm12Ny11bmtub3duLWxpbnV4LW11c2xlYWJpaGZcbiAgICAgICAgICAtIGhvc3Q6IHVidW50dS1sYXRlc3RcbiAgICAgICAgICAgIHRhcmdldDogJ2FhcmNoNjQtbGludXgtYW5kcm9pZCdcbiAgICAgICAgICAgIGJ1aWxkOiB5YXJuIGJ1aWxkIC0tdGFyZ2V0IGFhcmNoNjQtbGludXgtYW5kcm9pZFxuICAgICAgICAgIC0gaG9zdDogdWJ1bnR1LWxhdGVzdFxuICAgICAgICAgICAgdGFyZ2V0OiAnYXJtdjctbGludXgtYW5kcm9pZGVhYmknXG4gICAgICAgICAgICBidWlsZDogeWFybiBidWlsZCAtLXRhcmdldCBhcm12Ny1saW51eC1hbmRyb2lkZWFiaVxuICAgICAgICAgIC0gaG9zdDogdWJ1bnR1LWxhdGVzdFxuICAgICAgICAgICAgdGFyZ2V0OiAnYWFyY2g2NC11bmtub3duLWxpbnV4LW11c2wnXG4gICAgICAgICAgICBkb2NrZXI6IGdoY3IuaW8vbmFwaS1ycy9uYXBpLXJzL25vZGVqcy1ydXN0Omx0cy1hbHBpbmVcbiAgICAgICAgICAgIGJ1aWxkOiA+LVxuICAgICAgICAgICAgICBzZXQgLWUgJiZcXG5cbiAgICAgICAgICAgICAgcnVzdHVwIHRhcmdldCBhZGQgYWFyY2g2NC11bmtub3duLWxpbnV4LW11c2wgJiZcXG5cbiAgICAgICAgICAgICAgeWFybiBidWlsZCAtLXRhcmdldCBhYXJjaDY0LXVua25vd24tbGludXgtbXVzbFxuICAgICAgICAgIC0gaG9zdDogd2luZG93cy1sYXRlc3RcbiAgICAgICAgICAgIHRhcmdldDogJ2FhcmNoNjQtcGMtd2luZG93cy1tc3ZjJ1xuICAgICAgICAgICAgYnVpbGQ6IHlhcm4gYnVpbGQgLS10YXJnZXQgYWFyY2g2NC1wYy13aW5kb3dzLW1zdmNcbiAgICAgICAgICAtIGhvc3Q6IHVidW50dS1sYXRlc3RcbiAgICAgICAgICAgIHRhcmdldDogJ3Jpc2N2NjRnYy11bmtub3duLWxpbnV4LWdudSdcbiAgICAgICAgICAgIHNldHVwOiB8XG4gICAgICAgICAgICAgIHN1ZG8gYXB0LWdldCB1cGRhdGVcbiAgICAgICAgICAgICAgc3VkbyBhcHQtZ2V0IGluc3RhbGwgZ2NjLXJpc2N2NjQtbGludXgtZ251IC15XG4gICAgICAgICAgICBidWlsZDogeWFybiBidWlsZCAtLXRhcmdldCByaXNjdjY0Z2MtdW5rbm93bi1saW51eC1nbnVcblxuICAgIG5hbWU6IHN0YWJsZSAtIFxcJHt7IG1hdHJpeC5zZXR0aW5ncy50YXJnZXQgfX0gLSBub2RlQDIwXG4gICAgcnVucy1vbjogXFwke3sgbWF0cml4LnNldHRpbmdzLmhvc3QgfX1cblxuICAgIHN0ZXBzOlxuICAgICAgLSB1c2VzOiBhY3Rpb25zL2NoZWNrb3V0QHY0XG5cbiAgICAgIC0gbmFtZTogU2V0dXAgbm9kZVxuICAgICAgICB1c2VzOiBhY3Rpb25zL3NldHVwLW5vZGVAdjRcbiAgICAgICAgaWY6IFxcJHt7ICFtYXRyaXguc2V0dGluZ3MuZG9ja2VyIH19XG4gICAgICAgIHdpdGg6XG4gICAgICAgICAgbm9kZS12ZXJzaW9uOiAyMFxuICAgICAgICAgIGNhY2hlOiB5YXJuXG5cbiAgICAgIC0gbmFtZTogSW5zdGFsbFxuICAgICAgICB1c2VzOiBkdG9sbmF5L3J1c3QtdG9vbGNoYWluQHN0YWJsZVxuICAgICAgICBpZjogXFwke3sgIW1hdHJpeC5zZXR0aW5ncy5kb2NrZXIgfX1cbiAgICAgICAgd2l0aDpcbiAgICAgICAgICB0b29sY2hhaW46IHN0YWJsZVxuICAgICAgICAgIHRhcmdldHM6IFxcJHt7IG1hdHJpeC5zZXR0aW5ncy50YXJnZXQgfX1cblxuICAgICAgLSBuYW1lOiBDYWNoZSBjYXJnb1xuICAgICAgICB1c2VzOiBhY3Rpb25zL2NhY2hlQHY0XG4gICAgICAgIHdpdGg6XG4gICAgICAgICAgcGF0aDogfFxuICAgICAgICAgICAgfi8uY2FyZ28vcmVnaXN0cnkvaW5kZXgvXG4gICAgICAgICAgICB+Ly5jYXJnby9yZWdpc3RyeS9jYWNoZS9cbiAgICAgICAgICAgIH4vLmNhcmdvL2dpdC9kYi9cbiAgICAgICAgICAgIC5jYXJnby1jYWNoZVxuICAgICAgICAgICAgdGFyZ2V0L1xuICAgICAgICAgIGtleTogXFwke3sgbWF0cml4LnNldHRpbmdzLnRhcmdldCB9fS1jYXJnby1cXCR7eyBtYXRyaXguc2V0dGluZ3MuaG9zdCB9fVxuXG4gICAgICAtIHVzZXM6IGdvdG8tYnVzLXN0b3Avc2V0dXAtemlnQHYyXG4gICAgICAgIGlmOiBcXCR7eyBtYXRyaXguc2V0dGluZ3MudGFyZ2V0ID09ICdhcm12Ny11bmtub3duLWxpbnV4LWdudWVhYmloZicgfHwgbWF0cml4LnNldHRpbmdzLnRhcmdldCA9PSAnYXJtdjctdW5rbm93bi1saW51eC1tdXNsZWFiaWhmJyB9fVxuICAgICAgICB3aXRoOlxuICAgICAgICAgIHZlcnNpb246IDAuMTMuMFxuXG4gICAgICAtIG5hbWU6IFNldHVwIHRvb2xjaGFpblxuICAgICAgICBydW46IFxcJHt7IG1hdHJpeC5zZXR0aW5ncy5zZXR1cCB9fVxuICAgICAgICBpZjogXFwke3sgbWF0cml4LnNldHRpbmdzLnNldHVwIH19XG4gICAgICAgIHNoZWxsOiBiYXNoXG5cbiAgICAgIC0gbmFtZTogU2V0dXAgbm9kZSB4ODZcbiAgICAgICAgaWY6IG1hdHJpeC5zZXR0aW5ncy50YXJnZXQgPT0gJ2k2ODYtcGMtd2luZG93cy1tc3ZjJ1xuICAgICAgICBydW46IHlhcm4gY29uZmlnIHNldCBzdXBwb3J0ZWRBcmNoaXRlY3R1cmVzLmNwdSBcImlhMzJcIlxuICAgICAgICBzaGVsbDogYmFzaFxuXG4gICAgICAtIG5hbWU6ICdJbnN0YWxsIGRlcGVuZGVuY2llcydcbiAgICAgICAgcnVuOiB5YXJuIGluc3RhbGxcblxuICAgICAgLSBuYW1lOiBTZXR1cCBub2RlIHg4NlxuICAgICAgICB1c2VzOiBhY3Rpb25zL3NldHVwLW5vZGVAdjRcbiAgICAgICAgaWY6IG1hdHJpeC5zZXR0aW5ncy50YXJnZXQgPT0gJ2k2ODYtcGMtd2luZG93cy1tc3ZjJ1xuICAgICAgICB3aXRoOlxuICAgICAgICAgIG5vZGUtdmVyc2lvbjogMjBcbiAgICAgICAgICBjYWNoZTogeWFyblxuICAgICAgICAgIGFyY2hpdGVjdHVyZTogeDg2XG5cbiAgICAgIC0gbmFtZTogQnVpbGQgaW4gZG9ja2VyXG4gICAgICAgIHVzZXM6IGFkZG5hYi9kb2NrZXItcnVuLWFjdGlvbkB2M1xuICAgICAgICBpZjogXFwke3sgbWF0cml4LnNldHRpbmdzLmRvY2tlciB9fVxuICAgICAgICB3aXRoOlxuICAgICAgICAgIGltYWdlOiBcXCR7eyBtYXRyaXguc2V0dGluZ3MuZG9ja2VyIH19XG4gICAgICAgICAgb3B0aW9uczogLS11c2VyIDA6MCAtdiBcXCR7eyBnaXRodWIud29ya3NwYWNlIH19Ly5jYXJnby1jYWNoZS9naXQvZGI6L3Vzci9sb2NhbC9jYXJnby9naXQvZGIgLXYgXFwke3sgZ2l0aHViLndvcmtzcGFjZSB9fS8uY2FyZ28vcmVnaXN0cnkvY2FjaGU6L3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9jYWNoZSAtdiBcXCR7eyBnaXRodWIud29ya3NwYWNlIH19Ly5jYXJnby9yZWdpc3RyeS9pbmRleDovdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L2luZGV4IC12IFxcJHt7IGdpdGh1Yi53b3Jrc3BhY2UgfX06L2J1aWxkIC13IC9idWlsZFxuICAgICAgICAgIHJ1bjogXFwke3sgbWF0cml4LnNldHRpbmdzLmJ1aWxkIH19XG5cbiAgICAgIC0gbmFtZTogJ0J1aWxkJ1xuICAgICAgICBydW46IFxcJHt7IG1hdHJpeC5zZXR0aW5ncy5idWlsZCB9fVxuICAgICAgICBpZjogXFwke3sgIW1hdHJpeC5zZXR0aW5ncy5kb2NrZXIgfX1cbiAgICAgICAgc2hlbGw6IGJhc2hcblxuICAgICAgLSBuYW1lOiBVcGxvYWQgYXJ0aWZhY3RcbiAgICAgICAgdXNlczogYWN0aW9ucy91cGxvYWQtYXJ0aWZhY3RAdjRcbiAgICAgICAgd2l0aDpcbiAgICAgICAgICBuYW1lOiBiaW5kaW5ncy1cXCR7eyBtYXRyaXguc2V0dGluZ3MudGFyZ2V0IH19XG4gICAgICAgICAgcGF0aDogXFwke3sgZW52LkFQUF9OQU1FIH19Lioubm9kZVxuICAgICAgICAgIGlmLW5vLWZpbGVzLWZvdW5kOiBlcnJvclxuXG4gIGJ1aWxkLWZyZWVic2Q6XG4gICAgcnVucy1vbjogbWFjb3MtMTNcbiAgICBuYW1lOiBCdWlsZCBGcmVlQlNEXG4gICAgc3RlcHM6XG4gICAgICAtIHVzZXM6IGFjdGlvbnMvY2hlY2tvdXRAdjRcbiAgICAgIC0gbmFtZTogQnVpbGRcbiAgICAgICAgaWQ6IGJ1aWxkXG4gICAgICAgIHVzZXM6IGNyb3NzLXBsYXRmb3JtLWFjdGlvbnMvYWN0aW9uQHYwLjI0LjBcbiAgICAgICAgZW52OlxuICAgICAgICAgIERFQlVHOiAnbmFwaToqJ1xuICAgICAgICAgIFJVU1RVUF9JT19USFJFQURTOiAxXG4gICAgICAgIHdpdGg6XG4gICAgICAgICAgb3BlcmF0aW5nX3N5c3RlbTogZnJlZWJzZFxuICAgICAgICAgIHZlcnNpb246ICcxMy4yJ1xuICAgICAgICAgIG1lbW9yeTogOEdcbiAgICAgICAgICBjcHVfY291bnQ6IDNcbiAgICAgICAgICBlbnZpcm9ubWVudF92YXJpYWJsZXM6ICdERUJVRyBSVVNUVVBfSU9fVEhSRUFEUydcbiAgICAgICAgICBzaGVsbDogYmFzaFxuICAgICAgICAgIHJ1bjogfFxuICAgICAgICAgICAgc3VkbyBwa2cgaW5zdGFsbCAteSAtZiBjdXJsIG5vZGUgbGlibmdodHRwMiBucG1cbiAgICAgICAgICAgIHN1ZG8gbnBtIGluc3RhbGwgLWcgeWFybiAtLWlnbm9yZS1zY3JpcHRzXG4gICAgICAgICAgICBjdXJsIGh0dHBzOi8vc2gucnVzdHVwLnJzIC1zU2YgLS1vdXRwdXQgcnVzdHVwLnNoXG4gICAgICAgICAgICBzaCBydXN0dXAuc2ggLXkgLS1wcm9maWxlIG1pbmltYWwgLS1kZWZhdWx0LXRvb2xjaGFpbiBzdGFibGVcbiAgICAgICAgICAgIHNvdXJjZSBcIiRIT01FLy5jYXJnby9lbnZcIlxuICAgICAgICAgICAgZWNobyBcIn5+fn4gcnVzdGMgLS12ZXJzaW9uIH5+fn5cIlxuICAgICAgICAgICAgcnVzdGMgLS12ZXJzaW9uXG4gICAgICAgICAgICBlY2hvIFwifn5+fiBub2RlIC12IH5+fn5cIlxuICAgICAgICAgICAgbm9kZSAtdlxuICAgICAgICAgICAgZWNobyBcIn5+fn4geWFybiAtLXZlcnNpb24gfn5+flwiXG4gICAgICAgICAgICB5YXJuIC0tdmVyc2lvblxuICAgICAgICAgICAgcHdkXG4gICAgICAgICAgICBscyAtbGFoXG4gICAgICAgICAgICB3aG9hbWlcbiAgICAgICAgICAgIGVudlxuICAgICAgICAgICAgZnJlZWJzZC12ZXJzaW9uXG4gICAgICAgICAgICB5YXJuIGluc3RhbGxcbiAgICAgICAgICAgIHlhcm4gYnVpbGRcbiAgICAgICAgICAgIHlhcm4gdGVzdFxuICAgICAgICAgICAgcm0gLXJmIG5vZGVfbW9kdWxlc1xuICAgICAgICAgICAgcm0gLXJmIHRhcmdldFxuICAgICAgICAgICAgcm0gLXJmIC55YXJuL2NhY2hlXG4gICAgICAtIG5hbWU6IFVwbG9hZCBhcnRpZmFjdFxuICAgICAgICB1c2VzOiBhY3Rpb25zL3VwbG9hZC1hcnRpZmFjdEB2NFxuICAgICAgICB3aXRoOlxuICAgICAgICAgIG5hbWU6IGJpbmRpbmdzLWZyZWVic2RcbiAgICAgICAgICBwYXRoOiBcXCR7eyBlbnYuQVBQX05BTUUgfX0uKi5ub2RlXG4gICAgICAgICAgaWYtbm8tZmlsZXMtZm91bmQ6IGVycm9yXG5cbiAgdGVzdC1tYWNPUy13aW5kb3dzLWJpbmRpbmc6XG4gICAgbmFtZTogVGVzdCBiaW5kaW5ncyBvbiBcXCR7eyBtYXRyaXguc2V0dGluZ3MudGFyZ2V0IH19IC0gbm9kZUBcXCR7eyBtYXRyaXgubm9kZSB9fVxuICAgIG5lZWRzOlxuICAgICAgLSBidWlsZFxuICAgIHN0cmF0ZWd5OlxuICAgICAgZmFpbC1mYXN0OiBmYWxzZVxuICAgICAgbWF0cml4OlxuICAgICAgICBzZXR0aW5nczpcbiAgICAgICAgICAtIGhvc3Q6IG1hY29zLWxhdGVzdFxuICAgICAgICAgICAgdGFyZ2V0OiAneDg2XzY0LWFwcGxlLWRhcndpbidcbiAgICAgICAgICAtIGhvc3Q6IHdpbmRvd3MtbGF0ZXN0XG4gICAgICAgICAgICB0YXJnZXQ6ICd4ODZfNjQtcGMtd2luZG93cy1tc3ZjJ1xuICAgICAgICBub2RlOiBbJzE4JywgJzIwJ11cbiAgICBydW5zLW9uOiBcXCR7eyBtYXRyaXguc2V0dGluZ3MuaG9zdCB9fVxuXG4gICAgc3RlcHM6XG4gICAgICAtIHVzZXM6IGFjdGlvbnMvY2hlY2tvdXRAdjRcblxuICAgICAgLSBuYW1lOiBTZXR1cCBub2RlXG4gICAgICAgIHVzZXM6IGFjdGlvbnMvc2V0dXAtbm9kZUB2NFxuICAgICAgICB3aXRoOlxuICAgICAgICAgIG5vZGUtdmVyc2lvbjogXFwke3sgbWF0cml4Lm5vZGUgfX1cbiAgICAgICAgICBjYWNoZTogJ3lhcm4nXG4gICAgICAgICAgYXJjaGl0ZWN0dXJlOiB4NjRcblxuICAgICAgLSBuYW1lOiAnSW5zdGFsbCBkZXBlbmRlbmNpZXMnXG4gICAgICAgIHJ1bjogeWFybiBpbnN0YWxsXG5cbiAgICAgIC0gbmFtZTogRG93bmxvYWQgYXJ0aWZhY3RzXG4gICAgICAgIHVzZXM6IGFjdGlvbnMvZG93bmxvYWQtYXJ0aWZhY3RAdjRcbiAgICAgICAgd2l0aDpcbiAgICAgICAgICBuYW1lOiBiaW5kaW5ncy1cXCR7eyBtYXRyaXguc2V0dGluZ3MudGFyZ2V0IH19XG4gICAgICAgICAgcGF0aDogLlxuXG4gICAgICAtIG5hbWU6IExpc3QgcGFja2FnZXNcbiAgICAgICAgcnVuOiBscyAtUiAuXG4gICAgICAgIHNoZWxsOiBiYXNoXG5cbiAgICAgIC0gbmFtZTogVGVzdCBiaW5kaW5nc1xuICAgICAgICBydW46IHlhcm4gdGVzdFxuXG4gIHRlc3QtbGludXgteDY0LWdudS1iaW5kaW5nOlxuICAgIG5hbWU6IFRlc3QgYmluZGluZ3Mgb24gTGludXgteDY0LWdudSAtIG5vZGVAXFwke3sgbWF0cml4Lm5vZGUgfX1cbiAgICBuZWVkczpcbiAgICAgIC0gYnVpbGRcbiAgICBzdHJhdGVneTpcbiAgICAgIGZhaWwtZmFzdDogZmFsc2VcbiAgICAgIG1hdHJpeDpcbiAgICAgICAgbm9kZTogWycxOCcsICcyMCddXG4gICAgcnVucy1vbjogdWJ1bnR1LWxhdGVzdFxuXG4gICAgc3RlcHM6XG4gICAgICAtIHVzZXM6IGFjdGlvbnMvY2hlY2tvdXRAdjRcblxuICAgICAgLSBuYW1lOiBTZXR1cCBub2RlXG4gICAgICAgIHVzZXM6IGFjdGlvbnMvc2V0dXAtbm9kZUB2NFxuICAgICAgICB3aXRoOlxuICAgICAgICAgIG5vZGUtdmVyc2lvbjogXFwke3sgbWF0cml4Lm5vZGUgfX1cbiAgICAgICAgICBjYWNoZTogJ3lhcm4nXG5cbiAgICAgIC0gbmFtZTogJ0luc3RhbGwgZGVwZW5kZW5jaWVzJ1xuICAgICAgICBydW46IHlhcm4gaW5zdGFsbFxuXG4gICAgICAtIG5hbWU6IERvd25sb2FkIGFydGlmYWN0c1xuICAgICAgICB1c2VzOiBhY3Rpb25zL2Rvd25sb2FkLWFydGlmYWN0QHY0XG4gICAgICAgIHdpdGg6XG4gICAgICAgICAgbmFtZTogYmluZGluZ3MteDg2XzY0LXVua25vd24tbGludXgtZ251XG4gICAgICAgICAgcGF0aDogLlxuXG4gICAgICAtIG5hbWU6IExpc3QgcGFja2FnZXNcbiAgICAgICAgcnVuOiBscyAtUiAuXG4gICAgICAgIHNoZWxsOiBiYXNoXG5cbiAgICAgIC0gbmFtZTogVGVzdCBiaW5kaW5nc1xuICAgICAgICBydW46IGRvY2tlciBydW4gLS1ybSAtdiAkKHB3ZCk6L2J1aWxkIC13IC9idWlsZCBub2RlOlxcJHt7IG1hdHJpeC5ub2RlIH19LXNsaW0geWFybiB0ZXN0XG5cbiAgdGVzdC1saW51eC14NjQtbXVzbC1iaW5kaW5nOlxuICAgIG5hbWU6IFRlc3QgYmluZGluZ3Mgb24geDg2XzY0LXVua25vd24tbGludXgtbXVzbCAtIG5vZGVAXFwke3sgbWF0cml4Lm5vZGUgfX1cbiAgICBuZWVkczpcbiAgICAgIC0gYnVpbGRcbiAgICBzdHJhdGVneTpcbiAgICAgIGZhaWwtZmFzdDogZmFsc2VcbiAgICAgIG1hdHJpeDpcbiAgICAgICAgbm9kZTogWycxOCcsICcyMCddXG4gICAgcnVucy1vbjogdWJ1bnR1LWxhdGVzdFxuXG4gICAgc3RlcHM6XG4gICAgICAtIHVzZXM6IGFjdGlvbnMvY2hlY2tvdXRAdjRcblxuICAgICAgLSBuYW1lOiBTZXR1cCBub2RlXG4gICAgICAgIHVzZXM6IGFjdGlvbnMvc2V0dXAtbm9kZUB2NFxuICAgICAgICB3aXRoOlxuICAgICAgICAgIG5vZGUtdmVyc2lvbjogXFwke3sgbWF0cml4Lm5vZGUgfX1cbiAgICAgICAgICBjYWNoZTogJ3lhcm4nXG5cbiAgICAgIC0gbmFtZTogJ0luc3RhbGwgZGVwZW5kZW5jaWVzJ1xuICAgICAgICBydW46IHxcbiAgICAgICAgICB5YXJuIGNvbmZpZyBzZXQgc3VwcG9ydGVkQXJjaGl0ZWN0dXJlcy5saWJjIFwibXVzbFwiXG4gICAgICAgICAgeWFybiBpbnN0YWxsXG5cbiAgICAgIC0gbmFtZTogRG93bmxvYWQgYXJ0aWZhY3RzXG4gICAgICAgIHVzZXM6IGFjdGlvbnMvZG93bmxvYWQtYXJ0aWZhY3RAdjRcbiAgICAgICAgd2l0aDpcbiAgICAgICAgICBuYW1lOiBiaW5kaW5ncy14ODZfNjQtdW5rbm93bi1saW51eC1tdXNsXG4gICAgICAgICAgcGF0aDogLlxuXG4gICAgICAtIG5hbWU6IExpc3QgcGFja2FnZXNcbiAgICAgICAgcnVuOiBscyAtUiAuXG4gICAgICAgIHNoZWxsOiBiYXNoXG5cbiAgICAgIC0gbmFtZTogVGVzdCBiaW5kaW5nc1xuICAgICAgICBydW46IGRvY2tlciBydW4gLS1ybSAtdiAkKHB3ZCk6L2J1aWxkIC13IC9idWlsZCBub2RlOlxcJHt7IG1hdHJpeC5ub2RlIH19LWFscGluZSB5YXJuIHRlc3RcblxuICB0ZXN0LWxpbnV4LWFhcmNoNjQtZ251LWJpbmRpbmc6XG4gICAgbmFtZTogVGVzdCBiaW5kaW5ncyBvbiBhYXJjaDY0LXVua25vd24tbGludXgtZ251IC0gbm9kZUBcXCR7eyBtYXRyaXgubm9kZSB9fVxuICAgIG5lZWRzOlxuICAgICAgLSBidWlsZFxuICAgIHN0cmF0ZWd5OlxuICAgICAgZmFpbC1mYXN0OiBmYWxzZVxuICAgICAgbWF0cml4OlxuICAgICAgICBub2RlOiBbJzE4JywgJzIwJ11cbiAgICBydW5zLW9uOiB1YnVudHUtbGF0ZXN0XG5cbiAgICBzdGVwczpcbiAgICAgIC0gdXNlczogYWN0aW9ucy9jaGVja291dEB2NFxuXG4gICAgICAtIG5hbWU6IERvd25sb2FkIGFydGlmYWN0c1xuICAgICAgICB1c2VzOiBhY3Rpb25zL2Rvd25sb2FkLWFydGlmYWN0QHY0XG4gICAgICAgIHdpdGg6XG4gICAgICAgICAgbmFtZTogYmluZGluZ3MtYWFyY2g2NC11bmtub3duLWxpbnV4LWdudVxuICAgICAgICAgIHBhdGg6IC5cblxuICAgICAgLSBuYW1lOiBMaXN0IHBhY2thZ2VzXG4gICAgICAgIHJ1bjogbHMgLVIgLlxuICAgICAgICBzaGVsbDogYmFzaFxuXG4gICAgICAtIG5hbWU6IEluc3RhbGwgZGVwZW5kZW5jaWVzXG4gICAgICAgIHJ1bjogfFxuICAgICAgICAgIHlhcm4gY29uZmlnIHNldCBzdXBwb3J0ZWRBcmNoaXRlY3R1cmVzLmNwdSBcImFybTY0XCJcbiAgICAgICAgICB5YXJuIGNvbmZpZyBzZXQgc3VwcG9ydGVkQXJjaGl0ZWN0dXJlcy5saWJjIFwiZ2xpYmNcIlxuICAgICAgICAgIHlhcm4gaW5zdGFsbFxuXG4gICAgICAtIG5hbWU6IFNldCB1cCBRRU1VXG4gICAgICAgIHVzZXM6IGRvY2tlci9zZXR1cC1xZW11LWFjdGlvbkB2M1xuICAgICAgICB3aXRoOlxuICAgICAgICAgIHBsYXRmb3JtczogYXJtNjRcbiAgICAgIC0gcnVuOiBkb2NrZXIgcnVuIC0tcm0gLS1wcml2aWxlZ2VkIG11bHRpYXJjaC9xZW11LXVzZXItc3RhdGljIC0tcmVzZXQgLXAgeWVzXG5cbiAgICAgIC0gbmFtZTogU2V0dXAgYW5kIHJ1biB0ZXN0c1xuICAgICAgICB1c2VzOiBhZGRuYWIvZG9ja2VyLXJ1bi1hY3Rpb25AdjNcbiAgICAgICAgd2l0aDpcbiAgICAgICAgICBpbWFnZTogbm9kZTpcXCR7eyBtYXRyaXgubm9kZSB9fS1zbGltXG4gICAgICAgICAgb3B0aW9uczogLS1wbGF0Zm9ybSBsaW51eC9hcm02NCAtdiBcXCR7eyBnaXRodWIud29ya3NwYWNlIH19Oi9idWlsZCAtdyAvYnVpbGRcbiAgICAgICAgICBydW46IHxcbiAgICAgICAgICAgIHNldCAtZVxuICAgICAgICAgICAgeWFybiB0ZXN0XG4gICAgICAgICAgICBscyAtbGFcblxuICB0ZXN0LWxpbnV4LWFhcmNoNjQtbXVzbC1iaW5kaW5nOlxuICAgIG5hbWU6IFRlc3QgYmluZGluZ3Mgb24gYWFyY2g2NC11bmtub3duLWxpbnV4LW11c2wgLSBub2RlQFxcJHt7IG1hdHJpeC5ub2RlIH19XG4gICAgbmVlZHM6XG4gICAgICAtIGJ1aWxkXG5cbiAgICBydW5zLW9uOiB1YnVudHUtbGF0ZXN0XG5cbiAgICBzdGVwczpcbiAgICAgIC0gdXNlczogYWN0aW9ucy9jaGVja291dEB2NFxuXG4gICAgICAtIG5hbWU6IERvd25sb2FkIGFydGlmYWN0c1xuICAgICAgICB1c2VzOiBhY3Rpb25zL2Rvd25sb2FkLWFydGlmYWN0QHY0XG4gICAgICAgIHdpdGg6XG4gICAgICAgICAgbmFtZTogYmluZGluZ3MtYWFyY2g2NC11bmtub3duLWxpbnV4LW11c2xcbiAgICAgICAgICBwYXRoOiAuXG5cbiAgICAgIC0gbmFtZTogTGlzdCBwYWNrYWdlc1xuICAgICAgICBydW46IGxzIC1SIC5cbiAgICAgICAgc2hlbGw6IGJhc2hcblxuICAgICAgLSBuYW1lOiBJbnN0YWxsIGRlcGVuZGVuY2llc1xuICAgICAgICBydW46IHxcbiAgICAgICAgICB5YXJuIGNvbmZpZyBzZXQgc3VwcG9ydGVkQXJjaGl0ZWN0dXJlcy5jcHUgXCJhcm02NFwiXG4gICAgICAgICAgeWFybiBjb25maWcgc2V0IHN1cHBvcnRlZEFyY2hpdGVjdHVyZXMubGliYyBcIm11c2xcIlxuICAgICAgICAgIHlhcm4gaW5zdGFsbFxuXG4gICAgICAtIG5hbWU6IFNldCB1cCBRRU1VXG4gICAgICAgIHVzZXM6IGRvY2tlci9zZXR1cC1xZW11LWFjdGlvbkB2M1xuICAgICAgICB3aXRoOlxuICAgICAgICAgIHBsYXRmb3JtczogYXJtNjRcbiAgICAgIC0gcnVuOiBkb2NrZXIgcnVuIC0tcm0gLS1wcml2aWxlZ2VkIG11bHRpYXJjaC9xZW11LXVzZXItc3RhdGljIC0tcmVzZXQgLXAgeWVzXG5cbiAgICAgIC0gbmFtZTogU2V0dXAgYW5kIHJ1biB0ZXN0c1xuICAgICAgICB1c2VzOiBhZGRuYWIvZG9ja2VyLXJ1bi1hY3Rpb25AdjNcbiAgICAgICAgd2l0aDpcbiAgICAgICAgICBpbWFnZTogbm9kZTpsdHMtYWxwaW5lXG4gICAgICAgICAgb3B0aW9uczogLS1wbGF0Zm9ybSBsaW51eC9hcm02NCAtdiBcXCR7eyBnaXRodWIud29ya3NwYWNlIH19Oi9idWlsZCAtdyAvYnVpbGRcbiAgICAgICAgICBydW46IHxcbiAgICAgICAgICAgIHNldCAtZVxuICAgICAgICAgICAgeWFybiB0ZXN0XG5cbiAgdGVzdC1saW51eC1hcm0tZ251ZWFiaWhmLWJpbmRpbmc6XG4gICAgbmFtZTogVGVzdCBiaW5kaW5ncyBvbiBhcm12Ny11bmtub3duLWxpbnV4LWdudWVhYmloZiAtIG5vZGVAXFwke3sgbWF0cml4Lm5vZGUgfX1cbiAgICBuZWVkczpcbiAgICAgIC0gYnVpbGRcbiAgICBzdHJhdGVneTpcbiAgICAgIGZhaWwtZmFzdDogZmFsc2VcbiAgICAgIG1hdHJpeDpcbiAgICAgICAgbm9kZTogWycxOCcsICcyMCddXG4gICAgcnVucy1vbjogdWJ1bnR1LWxhdGVzdFxuXG4gICAgc3RlcHM6XG4gICAgICAtIHVzZXM6IGFjdGlvbnMvY2hlY2tvdXRAdjRcblxuICAgICAgLSBuYW1lOiBEb3dubG9hZCBhcnRpZmFjdHNcbiAgICAgICAgdXNlczogYWN0aW9ucy9kb3dubG9hZC1hcnRpZmFjdEB2NFxuICAgICAgICB3aXRoOlxuICAgICAgICAgIG5hbWU6IGJpbmRpbmdzLWFybXY3LXVua25vd24tbGludXgtZ251ZWFiaWhmXG4gICAgICAgICAgcGF0aDogLlxuXG4gICAgICAtIG5hbWU6IExpc3QgcGFja2FnZXNcbiAgICAgICAgcnVuOiBscyAtUiAuXG4gICAgICAgIHNoZWxsOiBiYXNoXG5cbiAgICAgIC0gbmFtZTogSW5zdGFsbCBkZXBlbmRlbmNpZXNcbiAgICAgICAgcnVuOiB8XG4gICAgICAgICAgeWFybiBjb25maWcgc2V0IHN1cHBvcnRlZEFyY2hpdGVjdHVyZXMuY3B1IFwiYXJtXCJcbiAgICAgICAgICB5YXJuIGluc3RhbGxcblxuICAgICAgLSBuYW1lOiBTZXQgdXAgUUVNVVxuICAgICAgICB1c2VzOiBkb2NrZXIvc2V0dXAtcWVtdS1hY3Rpb25AdjNcbiAgICAgICAgd2l0aDpcbiAgICAgICAgICBwbGF0Zm9ybXM6IGFybVxuICAgICAgLSBydW46IGRvY2tlciBydW4gLS1ybSAtLXByaXZpbGVnZWQgbXVsdGlhcmNoL3FlbXUtdXNlci1zdGF0aWMgLS1yZXNldCAtcCB5ZXNcblxuICAgICAgLSBuYW1lOiBTZXR1cCBhbmQgcnVuIHRlc3RzXG4gICAgICAgIHVzZXM6IGFkZG5hYi9kb2NrZXItcnVuLWFjdGlvbkB2M1xuICAgICAgICB3aXRoOlxuICAgICAgICAgIGltYWdlOiBub2RlOlxcJHt7IG1hdHJpeC5ub2RlIH19LWJ1bGxzZXllLXNsaW1cbiAgICAgICAgICBvcHRpb25zOiAtLXBsYXRmb3JtIGxpbnV4L2FybS92NyAtdiBcXCR7eyBnaXRodWIud29ya3NwYWNlIH19Oi9idWlsZCAtdyAvYnVpbGRcbiAgICAgICAgICBydW46IHxcbiAgICAgICAgICAgIHNldCAtZVxuICAgICAgICAgICAgeWFybiB0ZXN0XG4gICAgICAgICAgICBscyAtbGFcblxuICB1bml2ZXJzYWwtbWFjT1M6XG4gICAgbmFtZTogQnVpbGQgdW5pdmVyc2FsIG1hY09TIGJpbmFyeVxuICAgIG5lZWRzOlxuICAgICAgLSBidWlsZFxuICAgIHJ1bnMtb246IG1hY29zLWxhdGVzdFxuXG4gICAgc3RlcHM6XG4gICAgICAtIHVzZXM6IGFjdGlvbnMvY2hlY2tvdXRAdjRcblxuICAgICAgLSBuYW1lOiBTZXR1cCBub2RlXG4gICAgICAgIHVzZXM6IGFjdGlvbnMvc2V0dXAtbm9kZUB2NFxuICAgICAgICB3aXRoOlxuICAgICAgICAgIG5vZGUtdmVyc2lvbjogMjBcbiAgICAgICAgICBjYWNoZTogeWFyblxuXG4gICAgICAtIG5hbWU6ICdJbnN0YWxsIGRlcGVuZGVuY2llcydcbiAgICAgICAgcnVuOiB5YXJuIGluc3RhbGxcblxuICAgICAgLSBuYW1lOiBEb3dubG9hZCBtYWNPUyB4NjQgYXJ0aWZhY3RcbiAgICAgICAgdXNlczogYWN0aW9ucy9kb3dubG9hZC1hcnRpZmFjdEB2NFxuICAgICAgICB3aXRoOlxuICAgICAgICAgIG5hbWU6IGJpbmRpbmdzLXg4Nl82NC1hcHBsZS1kYXJ3aW5cbiAgICAgICAgICBwYXRoOiBhcnRpZmFjdHNcbiAgICAgIC0gbmFtZTogRG93bmxvYWQgbWFjT1MgYXJtNjQgYXJ0aWZhY3RcbiAgICAgICAgdXNlczogYWN0aW9ucy9kb3dubG9hZC1hcnRpZmFjdEB2NFxuICAgICAgICB3aXRoOlxuICAgICAgICAgIG5hbWU6IGJpbmRpbmdzLWFhcmNoNjQtYXBwbGUtZGFyd2luXG4gICAgICAgICAgcGF0aDogYXJ0aWZhY3RzXG5cbiAgICAgIC0gbmFtZTogQ29tYmluZSBiaW5hcmllc1xuICAgICAgICBydW46IHlhcm4gdW5pdmVyc2FsXG5cbiAgICAgIC0gbmFtZTogVXBsb2FkIGFydGlmYWN0XG4gICAgICAgIHVzZXM6IGFjdGlvbnMvdXBsb2FkLWFydGlmYWN0QHY0XG4gICAgICAgIHdpdGg6XG4gICAgICAgICAgbmFtZTogYmluZGluZ3MtdW5pdmVyc2FsLWFwcGxlLWRhcndpblxuICAgICAgICAgIHBhdGg6IFxcJHt7IGVudi5BUFBfTkFNRSB9fS4qLm5vZGVcbiAgICAgICAgICBpZi1uby1maWxlcy1mb3VuZDogZXJyb3JcblxuICBwdWJsaXNoOlxuICAgIG5hbWU6IFB1Ymxpc2hcbiAgICBydW5zLW9uOiB1YnVudHUtbGF0ZXN0XG4gICAgbmVlZHM6XG4gICAgICAtIHRlc3QtbGludXgteDY0LWdudS1iaW5kaW5nXG4gICAgICAtIHRlc3QtbGludXgteDY0LW11c2wtYmluZGluZ1xuICAgICAgLSB0ZXN0LWxpbnV4LWFhcmNoNjQtZ251LWJpbmRpbmdcbiAgICAgIC0gdGVzdC1saW51eC1hcm0tZ251ZWFiaWhmLWJpbmRpbmdcbiAgICAgIC0gdGVzdC1tYWNPUy13aW5kb3dzLWJpbmRpbmdcbiAgICAgIC0gdGVzdC1saW51eC1hYXJjaDY0LW11c2wtYmluZGluZ1xuICAgICAgLSBidWlsZC1mcmVlYnNkXG5cbiAgICBzdGVwczpcbiAgICAgIC0gdXNlczogYWN0aW9ucy9jaGVja291dEB2NFxuXG4gICAgICAtIG5hbWU6IFNldHVwIG5vZGVcbiAgICAgICAgdXNlczogYWN0aW9ucy9zZXR1cC1ub2RlQHY0XG4gICAgICAgIHdpdGg6XG4gICAgICAgICAgbm9kZS12ZXJzaW9uOiAyMFxuICAgICAgICAgIGNhY2hlOiAneWFybidcblxuICAgICAgLSBuYW1lOiAnSW5zdGFsbCBkZXBlbmRlbmNpZXMnXG4gICAgICAgIHJ1bjogeWFybiBpbnN0YWxsXG5cbiAgICAgIC0gbmFtZTogRG93bmxvYWQgYWxsIGFydGlmYWN0c1xuICAgICAgICB1c2VzOiBhY3Rpb25zL2Rvd25sb2FkLWFydGlmYWN0QHY0XG4gICAgICAgIHdpdGg6XG4gICAgICAgICAgcGF0aDogYXJ0aWZhY3RzXG5cbiAgICAgIC0gbmFtZTogTW92ZSBhcnRpZmFjdHNcbiAgICAgICAgcnVuOiB5YXJuIGFydGlmYWN0c1xuXG4gICAgICAtIG5hbWU6IExpc3QgcGFja2FnZXNcbiAgICAgICAgcnVuOiBscyAtUiAuL25wbVxuICAgICAgICBzaGVsbDogYmFzaFxuXG4gICAgICAtIG5hbWU6IFB1Ymxpc2hcbiAgICAgICAgcnVuOiB8XG4gICAgICAgICAgbnBtIGNvbmZpZyBzZXQgcHJvdmVuYW5jZSB0cnVlXG4gICAgICAgICAgaWYgZ2l0IGxvZyAtMSAtLXByZXR0eT0lQiB8IGdyZXAgXCJeWzAtOV1cXFxcK1xcXFwuWzAtOV1cXFxcK1xcXFwuWzAtOV1cXFxcKyRcIjtcbiAgICAgICAgICB0aGVuXG4gICAgICAgICAgICBlY2hvIFwiLy9yZWdpc3RyeS5ucG1qcy5vcmcvOl9hdXRoVG9rZW49JE5QTV9UT0tFTlwiID4+IH4vLm5wbXJjXG4gICAgICAgICAgICBucG0gcHVibGlzaCAtLWFjY2VzcyBwdWJsaWNcbiAgICAgICAgICBlbGlmIGdpdCBsb2cgLTEgLS1wcmV0dHk9JUIgfCBncmVwIFwiXlswLTldXFxcXCtcXFxcLlswLTldXFxcXCtcXFxcLlswLTldXFxcXCtcIjtcbiAgICAgICAgICB0aGVuXG4gICAgICAgICAgICBlY2hvIFwiLy9yZWdpc3RyeS5ucG1qcy5vcmcvOl9hdXRoVG9rZW49JE5QTV9UT0tFTlwiID4+IH4vLm5wbXJjXG4gICAgICAgICAgICBucG0gcHVibGlzaCAtLXRhZyBuZXh0IC0tYWNjZXNzIHB1YmxpY1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGVjaG8gXCJOb3QgYSByZWxlYXNlLCBza2lwcGluZyBwdWJsaXNoXCJcbiAgICAgICAgICBmaVxuICAgICAgICBlbnY6XG4gICAgICAgICAgR0lUSFVCX1RPS0VOOiBcXCR7eyBzZWNyZXRzLkdJVEhVQl9UT0tFTiB9fVxuICAgICAgICAgIE5QTV9UT0tFTjogXFwke3sgc2VjcmV0cy5OUE1fVE9LRU4gfX1cbmA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaS10ZW1wbGF0ZS5qcy5tYXAiLCJpbXBvcnQgeyBsb2FkLCBkdW1wIH0gZnJvbSAnanMteWFtbCc7XG5pbXBvcnQgeyBOb2RlQXJjaFRvQ3B1LCBVbmlBcmNoc0J5UGxhdGZvcm0sIHBhcnNlVHJpcGxlIH0gZnJvbSAnLi4vcGFyc2UtdHJpcGxlJztcbmltcG9ydCB7IFlBTUwgfSBmcm9tICcuL2NpLXRlbXBsYXRlJztcbmNvbnN0IEJVSUxEX0ZSRUVCU0QgPSAnYnVpbGQtZnJlZWJzZCc7XG5jb25zdCBURVNUX01BQ09TX1dJTkRPV1MgPSAndGVzdC1tYWNPUy13aW5kb3dzLWJpbmRpbmcnO1xuY29uc3QgVEVTVF9MSU5VWF9YNjRfR05VID0gJ3Rlc3QtbGludXgteDY0LWdudS1iaW5kaW5nJztcbmNvbnN0IFRFU1RfTElOVVhfWDY0X01VU0wgPSAndGVzdC1saW51eC14NjQtbXVzbC1iaW5kaW5nJztcbmNvbnN0IFRFU1RfTElOVVhfQUFSQ0g2NF9HTlUgPSAndGVzdC1saW51eC1hYXJjaDY0LWdudS1iaW5kaW5nJztcbmNvbnN0IFRFU1RfTElOVVhfQUFSQ0g2NF9NVVNMID0gJ3Rlc3QtbGludXgtYWFyY2g2NC1tdXNsLWJpbmRpbmcnO1xuY29uc3QgVEVTVF9MSU5VWF9BUk1fR05VRUFCSUhGID0gJ3Rlc3QtbGludXgtYXJtLWdudWVhYmloZi1iaW5kaW5nJztcbmNvbnN0IFVOSVZFUlNBTF9NQUNPUyA9ICd1bml2ZXJzYWwtbWFjT1MnO1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUdpdGh1YkFjdGlvbnNDSVltbCA9IChiaW5hcnlOYW1lLCB0YXJnZXRzKSA9PiB7XG4gICAgY29uc3QgYWxsVGFyZ2V0cyA9IG5ldyBTZXQodGFyZ2V0cy5mbGF0TWFwKCh0KSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgcGxhdGZvcm0gPSBwYXJzZVRyaXBsZSh0KTtcbiAgICAgICAgaWYgKHBsYXRmb3JtLmFyY2ggPT09ICd1bml2ZXJzYWwnKSB7XG4gICAgICAgICAgICBjb25zdCBzcmNUcmlwbGVzID0gKF9hID0gVW5pQXJjaHNCeVBsYXRmb3JtW3BsYXRmb3JtLnBsYXRmb3JtXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1hcCgoYXJjaCkgPT4gdC5yZXBsYWNlKCd1bml2ZXJzYWwnLCBOb2RlQXJjaFRvQ3B1W2FyY2hdKSk7XG4gICAgICAgICAgICByZXR1cm4gW3QsIC4uLihzcmNUcmlwbGVzICE9PSBudWxsICYmIHNyY1RyaXBsZXMgIT09IHZvaWQgMCA/IHNyY1RyaXBsZXMgOiBbXSldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbdF07XG4gICAgfSkpO1xuICAgIGNvbnN0IGZ1bGxUZW1wbGF0ZSA9IGxvYWQoWUFNTChiaW5hcnlOYW1lKSk7XG4gICAgY29uc3QgcmVxdWlyZWRTdGVwcyA9IFtdO1xuICAgIGNvbnN0IGVuYWJsZVdpbmRvd3NYODYgPSBhbGxUYXJnZXRzLmhhcygneDg2XzY0LXBjLXdpbmRvd3MtbXN2YycpO1xuICAgIGNvbnN0IGVuYWJsZU1hY09TWDg2ID0gYWxsVGFyZ2V0cy5oYXMoJ3g4Nl82NC1hcHBsZS1kYXJ3aW4nKTtcbiAgICBjb25zdCBlbmFibGVMaW51eFg4NkdudSA9IGFsbFRhcmdldHMuaGFzKCd4ODZfNjQtdW5rbm93bi1saW51eC1nbnUnKTtcbiAgICBjb25zdCBlbmFibGVMaW51eFg4Nk11c2wgPSBhbGxUYXJnZXRzLmhhcygneDg2XzY0LXVua25vd24tbGludXgtbXVzbCcpO1xuICAgIGNvbnN0IGVuYWJsZUxpbnV4QXJtOEdudSA9IGFsbFRhcmdldHMuaGFzKCdhYXJjaDY0LXVua25vd24tbGludXgtZ251Jyk7XG4gICAgY29uc3QgZW5hYmxlTGludXhBcm04TXVzbCA9IGFsbFRhcmdldHMuaGFzKCdhYXJjaDY0LXVua25vd24tbGludXgtbXVzbCcpO1xuICAgIGNvbnN0IGVuYWJsZUxpbnV4QXJtNyA9IGFsbFRhcmdldHMuaGFzKCdhcm12Ny11bmtub3duLWxpbnV4LWdudWVhYmloZicpO1xuICAgIGNvbnN0IGVuYWJsZUZyZWVCU0QgPSBhbGxUYXJnZXRzLmhhcygneDg2XzY0LXVua25vd24tZnJlZWJzZCcpO1xuICAgIGNvbnN0IGVuYWJsZU1hY09TVW5pID0gYWxsVGFyZ2V0cy5oYXMoJ3VuaXZlcnNhbC1hcHBsZS1kYXJ3aW4nKTtcbiAgICBmdWxsVGVtcGxhdGUuZW52LkFQUF9OQU1FID0gYmluYXJ5TmFtZTtcbiAgICBmdWxsVGVtcGxhdGUuam9icy5idWlsZC5zdHJhdGVneS5tYXRyaXguc2V0dGluZ3MgPVxuICAgICAgICBmdWxsVGVtcGxhdGUuam9icy5idWlsZC5zdHJhdGVneS5tYXRyaXguc2V0dGluZ3MuZmlsdGVyKCh7IHRhcmdldCB9KSA9PiBhbGxUYXJnZXRzLmhhcyh0YXJnZXQpKTtcbiAgICBpZiAoIWZ1bGxUZW1wbGF0ZS5qb2JzLmJ1aWxkLnN0cmF0ZWd5Lm1hdHJpeC5zZXR0aW5ncy5sZW5ndGgpIHtcbiAgICAgICAgZGVsZXRlIGZ1bGxUZW1wbGF0ZS5qb2JzLmJ1aWxkLnN0cmF0ZWd5Lm1hdHJpeDtcbiAgICB9XG4gICAgaWYgKCFlbmFibGVGcmVlQlNEKSB7XG4gICAgICAgIGRlbGV0ZSBmdWxsVGVtcGxhdGUuam9ic1tCVUlMRF9GUkVFQlNEXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlcXVpcmVkU3RlcHMucHVzaChCVUlMRF9GUkVFQlNEKTtcbiAgICB9XG4gICAgaWYgKCFlbmFibGVXaW5kb3dzWDg2ICYmICFlbmFibGVNYWNPU1g4Nikge1xuICAgICAgICBkZWxldGUgZnVsbFRlbXBsYXRlLmpvYnNbVEVTVF9NQUNPU19XSU5ET1dTXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGZpbHRlclRhcmdldHMgPSBuZXcgU2V0KCk7XG4gICAgICAgIGlmIChlbmFibGVXaW5kb3dzWDg2KSB7XG4gICAgICAgICAgICBmaWx0ZXJUYXJnZXRzLmFkZCgnd2luZG93cy1sYXRlc3QnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5hYmxlTWFjT1NYODYgfHwgZW5hYmxlTWFjT1NVbmkpIHtcbiAgICAgICAgICAgIGZpbHRlclRhcmdldHMuYWRkKCdtYWNvcy1sYXRlc3QnKTtcbiAgICAgICAgfVxuICAgICAgICBmdWxsVGVtcGxhdGUuam9ic1tURVNUX01BQ09TX1dJTkRPV1NdLnN0cmF0ZWd5Lm1hdHJpeC5zZXR0aW5ncyA9XG4gICAgICAgICAgICBmdWxsVGVtcGxhdGUuam9ic1tURVNUX01BQ09TX1dJTkRPV1NdLnN0cmF0ZWd5Lm1hdHJpeC5zZXR0aW5ncy5maWx0ZXIoKHsgaG9zdCB9KSA9PiBmaWx0ZXJUYXJnZXRzLmhhcyhob3N0KSk7XG4gICAgICAgIHJlcXVpcmVkU3RlcHMucHVzaChURVNUX01BQ09TX1dJTkRPV1MpO1xuICAgIH1cbiAgICBpZiAoIWVuYWJsZUxpbnV4WDg2R251KSB7XG4gICAgICAgIGRlbGV0ZSBmdWxsVGVtcGxhdGUuam9ic1tURVNUX0xJTlVYX1g2NF9HTlVdO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVxdWlyZWRTdGVwcy5wdXNoKFRFU1RfTElOVVhfWDY0X0dOVSk7XG4gICAgfVxuICAgIGlmICghZW5hYmxlTGludXhYODZNdXNsKSB7XG4gICAgICAgIGRlbGV0ZSBmdWxsVGVtcGxhdGUuam9ic1tURVNUX0xJTlVYX1g2NF9NVVNMXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlcXVpcmVkU3RlcHMucHVzaChURVNUX0xJTlVYX1g2NF9NVVNMKTtcbiAgICB9XG4gICAgaWYgKCFlbmFibGVMaW51eEFybThHbnUpIHtcbiAgICAgICAgZGVsZXRlIGZ1bGxUZW1wbGF0ZS5qb2JzW1RFU1RfTElOVVhfQUFSQ0g2NF9HTlVdO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVxdWlyZWRTdGVwcy5wdXNoKFRFU1RfTElOVVhfQUFSQ0g2NF9HTlUpO1xuICAgIH1cbiAgICBpZiAoIWVuYWJsZUxpbnV4QXJtOE11c2wpIHtcbiAgICAgICAgZGVsZXRlIGZ1bGxUZW1wbGF0ZS5qb2JzW1RFU1RfTElOVVhfQUFSQ0g2NF9NVVNMXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlcXVpcmVkU3RlcHMucHVzaChURVNUX0xJTlVYX0FBUkNINjRfTVVTTCk7XG4gICAgfVxuICAgIGlmICghZW5hYmxlTGludXhBcm03KSB7XG4gICAgICAgIGRlbGV0ZSBmdWxsVGVtcGxhdGUuam9ic1tURVNUX0xJTlVYX0FSTV9HTlVFQUJJSEZdO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVxdWlyZWRTdGVwcy5wdXNoKFRFU1RfTElOVVhfQVJNX0dOVUVBQklIRik7XG4gICAgfVxuICAgIGlmICghZW5hYmxlTWFjT1NVbmkpIHtcbiAgICAgICAgZGVsZXRlIGZ1bGxUZW1wbGF0ZS5qb2JzW1VOSVZFUlNBTF9NQUNPU107XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXF1aXJlZFN0ZXBzLnB1c2goVU5JVkVSU0FMX01BQ09TKTtcbiAgICB9XG4gICAgZnVsbFRlbXBsYXRlLmpvYnMucHVibGlzaC5uZWVkcyA9IHJlcXVpcmVkU3RlcHM7XG4gICAgcmV0dXJuIGR1bXAoZnVsbFRlbXBsYXRlLCB7XG4gICAgICAgIGxpbmVXaWR0aDogMTAwMCxcbiAgICB9KTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaS15bWwuanMubWFwIiwiZXhwb3J0IGNvbnN0IEdpdElnbm9yZSA9IGAjIENyZWF0ZWQgYnkgaHR0cHM6Ly93d3cudG9wdGFsLmNvbS9kZXZlbG9wZXJzL2dpdGlnbm9yZS9hcGkvbm9kZVxuIyBFZGl0IGF0IGh0dHBzOi8vd3d3LnRvcHRhbC5jb20vZGV2ZWxvcGVycy9naXRpZ25vcmU/dGVtcGxhdGVzPW5vZGVcblxuIyMjIE5vZGUgIyMjXG4jIExvZ3NcbmxvZ3NcbioubG9nXG5ucG0tZGVidWcubG9nKlxueWFybi1kZWJ1Zy5sb2cqXG55YXJuLWVycm9yLmxvZypcbmxlcm5hLWRlYnVnLmxvZypcblxuIyBEaWFnbm9zdGljIHJlcG9ydHMgKGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcmVwb3J0Lmh0bWwpXG5yZXBvcnQuWzAtOV0qLlswLTldKi5bMC05XSouWzAtOV0qLmpzb25cblxuIyBSdW50aW1lIGRhdGFcbnBpZHNcbioucGlkXG4qLnNlZWRcbioucGlkLmxvY2tcblxuIyBEaXJlY3RvcnkgZm9yIGluc3RydW1lbnRlZCBsaWJzIGdlbmVyYXRlZCBieSBqc2NvdmVyYWdlL0pTQ292ZXJcbmxpYi1jb3ZcblxuIyBDb3ZlcmFnZSBkaXJlY3RvcnkgdXNlZCBieSB0b29scyBsaWtlIGlzdGFuYnVsXG5jb3ZlcmFnZVxuKi5sY292XG5cbiMgbnljIHRlc3QgY292ZXJhZ2Vcbi5ueWNfb3V0cHV0XG5cbiMgR3J1bnQgaW50ZXJtZWRpYXRlIHN0b3JhZ2UgKGh0dHBzOi8vZ3J1bnRqcy5jb20vY3JlYXRpbmctcGx1Z2lucyNzdG9yaW5nLXRhc2stZmlsZXMpXG4uZ3J1bnRcblxuIyBCb3dlciBkZXBlbmRlbmN5IGRpcmVjdG9yeSAoaHR0cHM6Ly9ib3dlci5pby8pXG5ib3dlcl9jb21wb25lbnRzXG5cbiMgbm9kZS13YWYgY29uZmlndXJhdGlvblxuLmxvY2std3NjcmlwdFxuXG4jIENvbXBpbGVkIGJpbmFyeSBhZGRvbnMgKGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvYWRkb25zLmh0bWwpXG5idWlsZC9SZWxlYXNlXG5cbiMgRGVwZW5kZW5jeSBkaXJlY3Rvcmllc1xubm9kZV9tb2R1bGVzL1xuanNwbV9wYWNrYWdlcy9cblxuIyBUeXBlU2NyaXB0IHYxIGRlY2xhcmF0aW9uIGZpbGVzXG50eXBpbmdzL1xuXG4jIFR5cGVTY3JpcHQgY2FjaGVcbioudHNidWlsZGluZm9cblxuIyBPcHRpb25hbCBucG0gY2FjaGUgZGlyZWN0b3J5XG4ubnBtXG5cbiMgT3B0aW9uYWwgZXNsaW50IGNhY2hlXG4uZXNsaW50Y2FjaGVcblxuIyBNaWNyb2J1bmRsZSBjYWNoZVxuLnJwdDJfY2FjaGUvXG4ucnRzMl9jYWNoZV9janMvXG4ucnRzMl9jYWNoZV9lcy9cbi5ydHMyX2NhY2hlX3VtZC9cblxuIyBPcHRpb25hbCBSRVBMIGhpc3Rvcnlcbi5ub2RlX3JlcGxfaGlzdG9yeVxuXG4jIE91dHB1dCBvZiAnbnBtIHBhY2snXG4qLnRnelxuXG4jIFlhcm4gSW50ZWdyaXR5IGZpbGVcbi55YXJuLWludGVncml0eVxuXG4jIGRvdGVudiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZmlsZVxuLmVudlxuLmVudi50ZXN0XG5cbiMgcGFyY2VsLWJ1bmRsZXIgY2FjaGUgKGh0dHBzOi8vcGFyY2VsanMub3JnLylcbi5jYWNoZVxuXG4jIE5leHQuanMgYnVpbGQgb3V0cHV0XG4ubmV4dFxuXG4jIE51eHQuanMgYnVpbGQgLyBnZW5lcmF0ZSBvdXRwdXRcbi5udXh0XG5kaXN0XG5cbiMgR2F0c2J5IGZpbGVzXG4uY2FjaGUvXG4jIENvbW1lbnQgaW4gdGhlIHB1YmxpYyBsaW5lIGluIGlmIHlvdXIgcHJvamVjdCB1c2VzIEdhdHNieSBhbmQgbm90IE5leHQuanNcbiMgaHR0cHM6Ly9uZXh0anMub3JnL2Jsb2cvbmV4dC05LTEjcHVibGljLWRpcmVjdG9yeS1zdXBwb3J0XG4jIHB1YmxpY1xuXG4jIHZ1ZXByZXNzIGJ1aWxkIG91dHB1dFxuLnZ1ZXByZXNzL2Rpc3RcblxuIyBTZXJ2ZXJsZXNzIGRpcmVjdG9yaWVzXG4uc2VydmVybGVzcy9cblxuIyBGdXNlQm94IGNhY2hlXG4uZnVzZWJveC9cblxuIyBEeW5hbW9EQiBMb2NhbCBmaWxlc1xuLmR5bmFtb2RiL1xuXG4jIFRlcm5KUyBwb3J0IGZpbGVcbi50ZXJuLXBvcnRcblxuIyBTdG9yZXMgVlNDb2RlIHZlcnNpb25zIHVzZWQgZm9yIHRlc3RpbmcgVlNDb2RlIGV4dGVuc2lvbnNcbi52c2NvZGUtdGVzdFxuXG4jIEVuZCBvZiBodHRwczovL3d3dy50b3B0YWwuY29tL2RldmVsb3BlcnMvZ2l0aWdub3JlL2FwaS9ub2RlXG5cbiMgQ3JlYXRlZCBieSBodHRwczovL3d3dy50b3B0YWwuY29tL2RldmVsb3BlcnMvZ2l0aWdub3JlL2FwaS9tYWNvc1xuIyBFZGl0IGF0IGh0dHBzOi8vd3d3LnRvcHRhbC5jb20vZGV2ZWxvcGVycy9naXRpZ25vcmU/dGVtcGxhdGVzPW1hY29zXG5cbiMjIyBtYWNPUyAjIyNcbiMgR2VuZXJhbFxuLkRTX1N0b3JlXG4uQXBwbGVEb3VibGVcbi5MU092ZXJyaWRlXG5cbiMgSWNvbiBtdXN0IGVuZCB3aXRoIHR3byBcXHJcbkljb25cblxuXG4jIFRodW1ibmFpbHNcbi5fKlxuXG4jIEZpbGVzIHRoYXQgbWlnaHQgYXBwZWFyIGluIHRoZSByb290IG9mIGEgdm9sdW1lXG4uRG9jdW1lbnRSZXZpc2lvbnMtVjEwMFxuLmZzZXZlbnRzZFxuLlNwb3RsaWdodC1WMTAwXG4uVGVtcG9yYXJ5SXRlbXNcbi5UcmFzaGVzXG4uVm9sdW1lSWNvbi5pY25zXG4uY29tLmFwcGxlLnRpbWVtYWNoaW5lLmRvbm90cHJlc2VudFxuXG4jIERpcmVjdG9yaWVzIHBvdGVudGlhbGx5IGNyZWF0ZWQgb24gcmVtb3RlIEFGUCBzaGFyZVxuLkFwcGxlREJcbi5BcHBsZURlc2t0b3Bcbk5ldHdvcmsgVHJhc2ggRm9sZGVyXG5UZW1wb3JhcnkgSXRlbXNcbi5hcGRpc2tcblxuIyMjIG1hY09TIFBhdGNoICMjI1xuIyBpQ2xvdWQgZ2VuZXJhdGVkIGZpbGVzXG4qLmljbG91ZFxuXG4jIEVuZCBvZiBodHRwczovL3d3dy50b3B0YWwuY29tL2RldmVsb3BlcnMvZ2l0aWdub3JlL2FwaS9tYWNvc1xuXG4jIENyZWF0ZWQgYnkgaHR0cHM6Ly93d3cudG9wdGFsLmNvbS9kZXZlbG9wZXJzL2dpdGlnbm9yZS9hcGkvd2luZG93c1xuIyBFZGl0IGF0IGh0dHBzOi8vd3d3LnRvcHRhbC5jb20vZGV2ZWxvcGVycy9naXRpZ25vcmU/dGVtcGxhdGVzPXdpbmRvd3NcblxuIyMjIFdpbmRvd3MgIyMjXG4jIFdpbmRvd3MgdGh1bWJuYWlsIGNhY2hlIGZpbGVzXG5UaHVtYnMuZGJcblRodW1icy5kYjplbmNyeXB0YWJsZVxuZWh0aHVtYnMuZGJcbmVodGh1bWJzX3Zpc3RhLmRiXG5cbiMgRHVtcCBmaWxlXG4qLnN0YWNrZHVtcFxuXG4jIEZvbGRlciBjb25maWcgZmlsZVxuW0RkXWVza3RvcC5pbmlcblxuIyBSZWN5Y2xlIEJpbiB1c2VkIG9uIGZpbGUgc2hhcmVzXG4kUkVDWUNMRS5CSU4vXG5cbiMgV2luZG93cyBJbnN0YWxsZXIgZmlsZXNcbiouY2FiXG4qLm1zaVxuKi5tc2l4XG4qLm1zbVxuKi5tc3BcblxuIyBXaW5kb3dzIHNob3J0Y3V0c1xuKi5sbmtcblxuIyBFbmQgb2YgaHR0cHM6Ly93d3cudG9wdGFsLmNvbS9kZXZlbG9wZXJzL2dpdGlnbm9yZS9hcGkvd2luZG93c1xuXG4jQWRkZWQgYnkgY2FyZ29cblxuL3RhcmdldFxuQ2FyZ28ubG9ja1xuXG4ucG5wLipcbi55YXJuLypcbiEueWFybi9wYXRjaGVzXG4hLnlhcm4vcGx1Z2luc1xuIS55YXJuL3JlbGVhc2VzXG4hLnlhcm4vc2Rrc1xuIS55YXJuL3ZlcnNpb25zXG5cbioubm9kZVxuYDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdpdGlnbm9yZS10ZW1wbGF0ZS5qcy5tYXAiLCJleHBvcnQgY29uc3QgTGliUnMgPSBgIyFbZGVueShjbGlwcHk6OmFsbCldXG5cbiNbbWFjcm9fdXNlXVxuZXh0ZXJuIGNyYXRlIG5hcGlfZGVyaXZlO1xuXG4jW25hcGldXG5wdWIgZm4gc3VtKGE6IGkzMiwgYjogaTMyKSAtPiBpMzIge1xuICBhICsgYlxufVxuYDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxpYi1ycy5qcy5tYXAiLCJleHBvcnQgY29uc3QgTlBNSWdub3JlRmlsZXMgPSBgdGFyZ2V0XG5DYXJnby5sb2NrXG4uY2FyZ29cbi5naXRodWJcbm5wbVxuLmVzbGludHJjXG4ucHJldHRpZXJpZ25vcmVcbnJ1c3RmbXQudG9tbFxueWFybi5sb2NrXG4qLm5vZGVcbi55YXJuXG5fX3Rlc3RfX1xucmVub3ZhdGUuanNvblxuYDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5wbWlnbm9yZS5qcy5tYXAiLCJpbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJztcbmltcG9ydCB7IERlZmF1bHRQbGF0Zm9ybXMgfSBmcm9tICcuLi9wYXJzZS10cmlwbGUnO1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVBhY2thZ2VKc29uID0gKG5hbWUsIGJpbmFyeU5hbWUsIHRhcmdldHMpID0+IHtcbiAgICBjb25zdCBwa2dDb250ZW50ID0ge1xuICAgICAgICBuYW1lLFxuICAgICAgICB2ZXJzaW9uOiAnMC4wLjAnLFxuICAgICAgICBtYWluOiAnaW5kZXguanMnLFxuICAgICAgICB0eXBlczogJ2luZGV4LmQudHMnLFxuICAgICAgICBuYXBpOiB7XG4gICAgICAgICAgICBuYW1lOiBiaW5hcnlOYW1lLFxuICAgICAgICB9LFxuICAgICAgICBsaWNlbnNlOiAnTUlUJyxcbiAgICAgICAgZGV2RGVwZW5kZW5jaWVzOiB7XG4gICAgICAgICAgICAnQG5hcGktcnMvY2xpJzogYF4ke3ZlcnNpb259YCxcbiAgICAgICAgICAgIGF2YTogJ142LjAuMScsXG4gICAgICAgIH0sXG4gICAgICAgIGF2YToge1xuICAgICAgICAgICAgdGltZW91dDogJzNtJyxcbiAgICAgICAgfSxcbiAgICAgICAgZW5naW5lczoge1xuICAgICAgICAgICAgbm9kZTogJz49IDEwJyxcbiAgICAgICAgfSxcbiAgICAgICAgc2NyaXB0czoge1xuICAgICAgICAgICAgYXJ0aWZhY3RzOiAnbmFwaSBhcnRpZmFjdHMnLFxuICAgICAgICAgICAgYnVpbGQ6ICduYXBpIGJ1aWxkIC0tcGxhdGZvcm0gLS1yZWxlYXNlJyxcbiAgICAgICAgICAgICdidWlsZDpkZWJ1Zyc6ICduYXBpIGJ1aWxkIC0tcGxhdGZvcm0nLFxuICAgICAgICAgICAgcHJlcHVibGlzaE9ubHk6ICduYXBpIHByZXB1Ymxpc2ggLXQgbnBtJyxcbiAgICAgICAgICAgIHRlc3Q6ICdhdmEnLFxuICAgICAgICAgICAgdW5pdmVyc2FsOiAnbmFwaSB1bml2ZXJzYWwnLFxuICAgICAgICAgICAgdmVyc2lvbjogJ25hcGkgdmVyc2lvbicsXG4gICAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCB0cmlwbGVzID0ge307XG4gICAgY29uc3QgZGVmYXVsdFRhcmdldHNTdXBwb3J0ZWQgPSBEZWZhdWx0UGxhdGZvcm1zLmV2ZXJ5KChwKSA9PiB0YXJnZXRzLmluY2x1ZGVzKHAucmF3KSk7XG4gICAgY29uc3QgaXNPbmx5RGVmYXVsdFRhcmdldHMgPSB0YXJnZXRzLmxlbmd0aCA9PT0gMyAmJlxuICAgICAgICBEZWZhdWx0UGxhdGZvcm1zLmV2ZXJ5KChwKSA9PiB0YXJnZXRzLmluY2x1ZGVzKHAucmF3KSk7XG4gICAgaWYgKCFpc09ubHlEZWZhdWx0VGFyZ2V0cykge1xuICAgICAgICBpZiAoIWRlZmF1bHRUYXJnZXRzU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICB0cmlwbGVzLmRlZmF1bHRzID0gZmFsc2U7XG4gICAgICAgICAgICB0cmlwbGVzLmFkZGl0aW9uYWwgPSB0YXJnZXRzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdHJpcGxlcy5hZGRpdGlvbmFsID0gdGFyZ2V0cy5maWx0ZXIoKHQpID0+ICFEZWZhdWx0UGxhdGZvcm1zLm1hcCgocCkgPT4gcC5yYXcpLmluY2x1ZGVzKHQpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgcGtnQ29udGVudC5uYXBpLnRyaXBsZXMgPSB0cmlwbGVzO1xuICAgIHJldHVybiBwa2dDb250ZW50O1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhY2thZ2UuanMubWFwIiwiaW1wb3J0IHsgX19hd2FpdGVyIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB3cml0ZUZpbGVTeW5jLCBta2RpclN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBDb21tYW5kLCBPcHRpb24gfSBmcm9tICdjbGlwYW5pb24nO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY29sb3JldHRlJztcbmltcG9ydCBpbnF1aXJlciBmcm9tICdpbnF1aXJlcic7XG5pbXBvcnQgeyBDcmVhdGVOcG1EaXJDb21tYW5kIH0gZnJvbSAnLi4vY3JlYXRlLW5wbS1kaXInO1xuaW1wb3J0IHsgZGVidWdGYWN0b3J5IH0gZnJvbSAnLi4vZGVidWcnO1xuaW1wb3J0IHsgRGVmYXVsdFBsYXRmb3JtcyB9IGZyb20gJy4uL3BhcnNlLXRyaXBsZSc7XG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJy4uL3NwYXduJztcbmltcG9ydCB7IGNyZWF0ZUNhcmdvQ29udGVudCB9IGZyb20gJy4vY2FyZ28nO1xuaW1wb3J0IHsgY3JlYXRlQ2FyZ29Db25maWcgfSBmcm9tICcuL2NhcmdvLWNvbmZpZyc7XG5pbXBvcnQgeyBjcmVhdGVHaXRodWJBY3Rpb25zQ0lZbWwgfSBmcm9tICcuL2NpLXltbCc7XG5pbXBvcnQgeyBHaXRJZ25vcmUgfSBmcm9tICcuL2dpdGlnbm9yZS10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBMaWJScyB9IGZyb20gJy4vbGliLXJzJztcbmltcG9ydCB7IE5QTUlnbm9yZUZpbGVzIH0gZnJvbSAnLi9ucG1pZ25vcmUnO1xuaW1wb3J0IHsgY3JlYXRlUGFja2FnZUpzb24gfSBmcm9tICcuL3BhY2thZ2UnO1xuY29uc3QgTkFNRV9QUk9NT1RFX05BTUUgPSAnUGFja2FnZSBuYW1lJztcbmNvbnN0IERJUl9QUk9NT1RFX05BTUUgPSAnRGlyIG5hbWUnO1xuY29uc3QgRU5BQkxFX0dJVEhVQl9BQ1RJT05TX1BST01PVEVfTkFNRSA9ICdFbmFibGUgZ2l0aHViIGFjdGlvbnMnO1xuY29uc3QgZGVidWcgPSBkZWJ1Z0ZhY3RvcnkoJ2NyZWF0ZScpO1xuY29uc3QgQlVJTERfUlMgPSBgZXh0ZXJuIGNyYXRlIG5hcGlfYnVpbGQ7XG5cbmZuIG1haW4oKSB7XG4gIG5hcGlfYnVpbGQ6OnNldHVwKCk7XG59XG5gO1xuY29uc3QgU3VwcG9ydGVkUGxhdGZvcm1zID0gW1xuICAgICdhYXJjaDY0LWFwcGxlLWRhcndpbicsXG4gICAgJ2FhcmNoNjQtbGludXgtYW5kcm9pZCcsXG4gICAgJ2FhcmNoNjQtdW5rbm93bi1saW51eC1nbnUnLFxuICAgICdhYXJjaDY0LXVua25vd24tbGludXgtbXVzbCcsXG4gICAgJ2FhcmNoNjQtcGMtd2luZG93cy1tc3ZjJyxcbiAgICAnYXJtdjctdW5rbm93bi1saW51eC1nbnVlYWJpaGYnLFxuICAgICdhcm12Ny11bmtub3duLWxpbnV4LW11c2xlYWJpaGYnLFxuICAgICd4ODZfNjQtYXBwbGUtZGFyd2luJyxcbiAgICAneDg2XzY0LXBjLXdpbmRvd3MtbXN2YycsXG4gICAgJ3g4Nl82NC11bmtub3duLWxpbnV4LWdudScsXG4gICAgJ3g4Nl82NC11bmtub3duLWxpbnV4LW11c2wnLFxuICAgICd4ODZfNjQtdW5rbm93bi1mcmVlYnNkJyxcbiAgICAnaTY4Ni1wYy13aW5kb3dzLW1zdmMnLFxuICAgICdhcm12Ny1saW51eC1hbmRyb2lkZWFiaScsXG4gICAgJ3VuaXZlcnNhbC1hcHBsZS1kYXJ3aW4nLFxuICAgICdyaXNjdjY0Z2MtdW5rbm93bi1saW51eC1nbnUnLFxuXTtcbmV4cG9ydCBjbGFzcyBOZXdQcm9qZWN0Q29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBPcHRpb24uU3RyaW5nKHtcbiAgICAgICAgICAgIG5hbWU6ICctbiwtLW5hbWUnLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kaXJuYW1lID0gT3B0aW9uLlN0cmluZyh7XG4gICAgICAgICAgICBuYW1lOiAnLWQsLS1kaXJuYW1lJyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGFyZ2V0cyA9IE9wdGlvbi5BcnJheSgnLS10YXJnZXRzLC10Jyk7XG4gICAgICAgIHRoaXMuZHJ5UnVuID0gT3B0aW9uLkJvb2xlYW4oYC0tZHJ5LXJ1bmAsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5lbmFibGVHaXRodWJBY3Rpb25zID0gT3B0aW9uLkJvb2xlYW4oYC0tZW5hYmxlLWdpdGh1Yi1hY3Rpb25zYCk7XG4gICAgfVxuICAgIGV4ZWN1dGUoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB5aWVsZCB0aGlzLmdldE5hbWUoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5kaXJuYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW3Njb3BlLCBuYW1lXSA9IChfYiA9IChfYSA9IHRoaXMubmFtZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNwbGl0KCcvJykpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRQcm9qZWN0RGlyID0gbmFtZSAhPT0gbnVsbCAmJiBuYW1lICE9PSB2b2lkIDAgPyBuYW1lIDogc2NvcGU7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlyQW5zd2VyID0geWllbGQgaW5xdWlyZXIucHJvbXB0KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogRElSX1BST01PVEVfTkFNRSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogZGVmYXVsdFByb2plY3REaXIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXJuYW1lID0gZGlyQW5zd2VyW0RJUl9QUk9NT1RFX05BTUVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLnRhcmdldHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRhcmdldHMgfSA9IHlpZWxkIGlucXVpcmVyLnByb21wdChbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjaGVja2JveCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAndGFyZ2V0cycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnQ2hvb3NlIHRhcmdldHMgeW91IHdhbnQgdG8gc3VwcG9ydCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBEZWZhdWx0UGxhdGZvcm1zLm1hcCgocCkgPT4gcC5yYXcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogU3VwcG9ydGVkUGxhdGZvcm1zLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXQgbGVhc3QgY2hvb3NlIG9uZSB0YXJnZXQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy50YXJnZXRzID0gdGFyZ2V0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmVuYWJsZUdpdGh1YkFjdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IHlpZWxkIGlucXVpcmVyLnByb21wdChbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IEVOQUJMRV9HSVRIVUJfQUNUSU9OU19QUk9NT1RFX05BTUUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRW5hYmxlIGdpdGh1YiBhY3Rpb25zPycsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogU3VwcG9ydGVkUGxhdGZvcm1zLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlR2l0aHViQWN0aW9ucyA9IGFuc3dlcltFTkFCTEVfR0lUSFVCX0FDVElPTlNfUFJPTU9URV9OQU1FXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlYnVnKGBSdW5uaW5nIGNvbW1hbmQ6ICR7Y2hhbGsuZ3JlZW4oJ1ske2NvbW1hbmR9XScpfWApO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRyeVJ1bikge1xuICAgICAgICAgICAgICAgIG1rZGlyU3luYyhqb2luKHByb2Nlc3MuY3dkKCksIHRoaXMuZGlybmFtZSksIHtcbiAgICAgICAgICAgICAgICAgICAgcmVjdXJzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG1rZGlyU3luYyhqb2luKHByb2Nlc3MuY3dkKCksIHRoaXMuZGlybmFtZSwgJ3NyYycpLCB7XG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IFtzLCBwa2dOYW1lXSA9IHRoaXMubmFtZS5zcGxpdCgnLycpO1xuICAgICAgICAgICAgY29uc3QgYmluYXJ5TmFtZSA9IHBrZ05hbWUgIT09IG51bGwgJiYgcGtnTmFtZSAhPT0gdm9pZCAwID8gcGtnTmFtZSA6IHM7XG4gICAgICAgICAgICB0aGlzLndyaXRlRmlsZSgnQ2FyZ28udG9tbCcsIGNyZWF0ZUNhcmdvQ29udGVudCh0aGlzLm5hbWUpKTtcbiAgICAgICAgICAgIHRoaXMud3JpdGVGaWxlKCcubnBtaWdub3JlJywgTlBNSWdub3JlRmlsZXMpO1xuICAgICAgICAgICAgdGhpcy53cml0ZUZpbGUoJ2J1aWxkLnJzJywgQlVJTERfUlMpO1xuICAgICAgICAgICAgdGhpcy53cml0ZUZpbGUoJ3BhY2thZ2UuanNvbicsIEpTT04uc3RyaW5naWZ5KGNyZWF0ZVBhY2thZ2VKc29uKHRoaXMubmFtZSwgYmluYXJ5TmFtZSwgdGhpcy50YXJnZXRzKSwgbnVsbCwgMikpO1xuICAgICAgICAgICAgdGhpcy53cml0ZUZpbGUoJ3NyYy9saWIucnMnLCBMaWJScyk7XG4gICAgICAgICAgICBta2RpclN5bmMoam9pbihwcm9jZXNzLmN3ZCgpLCB0aGlzLmRpcm5hbWUsICdfX3Rlc3RfXycpLCB7XG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLndyaXRlRmlsZSgnX190ZXN0X18vaW5kZXguc3BlYy5tanMnLCBgaW1wb3J0IHRlc3QgZnJvbSAnYXZhJ1xuXG5pbXBvcnQgeyBzdW0gfSBmcm9tICcuLi9pbmRleC5qcydcblxudGVzdCgnc3VtIGZyb20gbmF0aXZlJywgKHQpID0+IHtcbiAgdC5pcyhzdW0oMSwgMiksIDMpXG59KVxuYCk7XG4gICAgICAgICAgICBpZiAodGhpcy5lbmFibGVHaXRodWJBY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2l0aHViRGlyID0gam9pbihwcm9jZXNzLmN3ZCgpLCB0aGlzLmRpcm5hbWUsICcuZ2l0aHViJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgd29ya2Zsb3dzRGlyID0gam9pbihnaXRodWJEaXIsICd3b3JrZmxvd3MnKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZHJ5UnVuKSB7XG4gICAgICAgICAgICAgICAgICAgIG1rZGlyU3luYyhnaXRodWJEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICBta2RpclN5bmMod29ya2Zsb3dzRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy53cml0ZUZpbGUoam9pbignLmdpdGh1YicsICd3b3JrZmxvd3MnLCAnQ0kueW1sJyksIGNyZWF0ZUdpdGh1YkFjdGlvbnNDSVltbChiaW5hcnlOYW1lLCB0aGlzLnRhcmdldHMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHlpZWxkIENyZWF0ZU5wbURpckNvbW1hbmQuY3JlYXRlKCdwYWNrYWdlLmpzb24nLCBqb2luKHByb2Nlc3MuY3dkKCksIHRoaXMuZGlybmFtZSksIGpvaW4ocHJvY2Vzcy5jd2QoKSwgdGhpcy5kaXJuYW1lKSk7XG4gICAgICAgICAgICBjb25zdCBlbmFibGVMaW51eEFybThNdXNsID0gdGhpcy50YXJnZXRzLmluY2x1ZGVzKCdhYXJjaDY0LXVua25vd24tbGludXgtbXVzbCcpO1xuICAgICAgICAgICAgY29uc3QgZW5hYmxlV2luZG93c1g2NCA9IHRoaXMudGFyZ2V0cy5pbmNsdWRlcygneDg2XzY0LXBjLXdpbmRvd3MtbXN2YycpO1xuICAgICAgICAgICAgY29uc3QgY2FyZ29Db25maWcgPSBjcmVhdGVDYXJnb0NvbmZpZyhlbmFibGVMaW51eEFybThNdXNsLCBlbmFibGVXaW5kb3dzWDY0KTtcbiAgICAgICAgICAgIGlmIChjYXJnb0NvbmZpZy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWdEaXIgPSBqb2luKHByb2Nlc3MuY3dkKCksIHRoaXMuZGlybmFtZSwgJy5jYXJnbycpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5kcnlSdW4pIHtcbiAgICAgICAgICAgICAgICAgICAgbWtkaXJTeW5jKGNvbmZpZ0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVGaWxlKGpvaW4oJy5jYXJnbycsICdjb25maWcudG9tbCcpLCBjYXJnb0NvbmZpZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy53cml0ZUZpbGUoJ3J1c3RmbXQudG9tbCcsIGB0YWJfc3BhY2VzID0gMlxuZWRpdGlvbiA9IFwiMjAyMVwiXG5gKTtcbiAgICAgICAgICAgIHRoaXMud3JpdGVGaWxlKCcuZ2l0aWdub3JlJywgR2l0SWdub3JlKTtcbiAgICAgICAgICAgIHRoaXMud3JpdGVGaWxlKCcueWFybnJjLnltbCcsICdub2RlTGlua2VyOiBub2RlLW1vZHVsZXMnKTtcbiAgICAgICAgICAgIHlpZWxkIHNwYXduKGB5YXJuIHNldCB2ZXJzaW9uIHN0YWJsZSAtLXlhcm4tcGF0aGAsIHtcbiAgICAgICAgICAgICAgICBjd2Q6IGpvaW4ocHJvY2Vzcy5jd2QoKSwgdGhpcy5kaXJuYW1lKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgeWllbGQgc3Bhd24oYHlhcm4gaW5zdGFsbGAsIHtcbiAgICAgICAgICAgICAgICBjd2Q6IGpvaW4ocHJvY2Vzcy5jd2QoKSwgdGhpcy5kaXJuYW1lKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgd3JpdGVGaWxlKHBhdGgsIGNvbnRlbnQpIHtcbiAgICAgICAgY29uc3QgZGlzdERpciA9IGpvaW4ocHJvY2Vzcy5jd2QoKSwgdGhpcy5kaXJuYW1lKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnN0ZG91dC53cml0ZShjaGFsay5ncmVlbihgV3JpdGluZyAke2NoYWxrLmJsdWUocGF0aCl9XFxuYCkpO1xuICAgICAgICBpZiAoIXRoaXMuZHJ5UnVuKSB7XG4gICAgICAgICAgICB3cml0ZUZpbGVTeW5jKGpvaW4oZGlzdERpciwgcGF0aCksIGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldE5hbWUoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVBbnN3ZXIgPSB5aWVsZCBpbnF1aXJlci5wcm9tcHQoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBOQU1FX1BST01PVEVfTkFNRSxcbiAgICAgICAgICAgICAgICAgICAgc3VmZml4OiAnIChUaGUgbmFtZSBmaWxlZCBpbiB5b3VyIHBhY2thZ2UuanNvbiknLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBuYW1lQW5zd2VyW05BTUVfUFJPTU9URV9OQU1FXTtcbiAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdGhpcy5nZXROYW1lKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuTmV3UHJvamVjdENvbW1hbmQudXNhZ2UgPSBDb21tYW5kLlVzYWdlKHtcbiAgICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIG5ldyBwcm9qZWN0IGZyb20gc2NyYXRjaCcsXG59KTtcbk5ld1Byb2plY3RDb21tYW5kLnBhdGhzID0gW1snbmV3J11dO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiZXhwb3J0IGZ1bmN0aW9uIGdldFVzZXJBZ2VudCgpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09IFwib2JqZWN0XCIgJiYgXCJ1c2VyQWdlbnRcIiBpbiBuYXZpZ2F0b3IpIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzLnZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBgTm9kZS5qcy8ke3Byb2Nlc3MudmVyc2lvbi5zdWJzdHIoMSl9ICgke3Byb2Nlc3MucGxhdGZvcm19OyAke1xuICAgICAgcHJvY2Vzcy5hcmNoXG4gICAgfSlgO1xuICB9XG5cbiAgcmV0dXJuIFwiPGVudmlyb25tZW50IHVuZGV0ZWN0YWJsZT5cIjtcbn1cbiIsIi8vIEB0cy1jaGVja1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXIoc3RhdGUsIG5hbWUsIG1ldGhvZCwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIG1ldGhvZCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibWV0aG9kIGZvciBiZWZvcmUgaG9vayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShuYW1lKSkge1xuICAgIHJldHVybiBuYW1lLnJldmVyc2UoKS5yZWR1Y2UoKGNhbGxiYWNrLCBuYW1lKSA9PiB7XG4gICAgICByZXR1cm4gcmVnaXN0ZXIuYmluZChudWxsLCBzdGF0ZSwgbmFtZSwgY2FsbGJhY2ssIG9wdGlvbnMpO1xuICAgIH0sIG1ldGhvZCkoKTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICBpZiAoIXN0YXRlLnJlZ2lzdHJ5W25hbWVdKSB7XG4gICAgICByZXR1cm4gbWV0aG9kKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZS5yZWdpc3RyeVtuYW1lXS5yZWR1Y2UoKG1ldGhvZCwgcmVnaXN0ZXJlZCkgPT4ge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyZWQuaG9vay5iaW5kKG51bGwsIG1ldGhvZCwgb3B0aW9ucyk7XG4gICAgfSwgbWV0aG9kKSgpO1xuICB9KTtcbn1cbiIsIi8vIEB0cy1jaGVja1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkSG9vayhzdGF0ZSwga2luZCwgbmFtZSwgaG9vaykge1xuICBjb25zdCBvcmlnID0gaG9vaztcbiAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgIHN0YXRlLnJlZ2lzdHJ5W25hbWVdID0gW107XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJiZWZvcmVcIikge1xuICAgIGhvb2sgPSAobWV0aG9kLCBvcHRpb25zKSA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4ob3JpZy5iaW5kKG51bGwsIG9wdGlvbnMpKVxuICAgICAgICAudGhlbihtZXRob2QuYmluZChudWxsLCBvcHRpb25zKSk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcImFmdGVyXCIpIHtcbiAgICBob29rID0gKG1ldGhvZCwgb3B0aW9ucykgPT4ge1xuICAgICAgbGV0IHJlc3VsdDtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihtZXRob2QuYmluZChudWxsLCBvcHRpb25zKSlcbiAgICAgICAgLnRoZW4oKHJlc3VsdF8pID0+IHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHRfO1xuICAgICAgICAgIHJldHVybiBvcmlnKHJlc3VsdCwgb3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwiZXJyb3JcIikge1xuICAgIGhvb2sgPSAobWV0aG9kLCBvcHRpb25zKSA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4obWV0aG9kLmJpbmQobnVsbCwgb3B0aW9ucykpXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICByZXR1cm4gb3JpZyhlcnJvciwgb3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBzdGF0ZS5yZWdpc3RyeVtuYW1lXS5wdXNoKHtcbiAgICBob29rOiBob29rLFxuICAgIG9yaWc6IG9yaWcsXG4gIH0pO1xufVxuIiwiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVIb29rKHN0YXRlLCBuYW1lLCBtZXRob2QpIHtcbiAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gc3RhdGUucmVnaXN0cnlbbmFtZV1cbiAgICAubWFwKChyZWdpc3RlcmVkKSA9PiB7XG4gICAgICByZXR1cm4gcmVnaXN0ZXJlZC5vcmlnO1xuICAgIH0pXG4gICAgLmluZGV4T2YobWV0aG9kKTtcblxuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUucmVnaXN0cnlbbmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcbn1cbiIsIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgeyByZWdpc3RlciB9IGZyb20gXCIuL2xpYi9yZWdpc3Rlci5qc1wiO1xuaW1wb3J0IHsgYWRkSG9vayB9IGZyb20gXCIuL2xpYi9hZGQuanNcIjtcbmltcG9ydCB7IHJlbW92ZUhvb2sgfSBmcm9tIFwiLi9saWIvcmVtb3ZlLmpzXCI7XG5cbi8vIGJpbmQgd2l0aCBhcnJheSBvZiBhcmd1bWVudHM6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMTc5MjkxM1xuY29uc3QgYmluZCA9IEZ1bmN0aW9uLmJpbmQ7XG5jb25zdCBiaW5kYWJsZSA9IGJpbmQuYmluZChiaW5kKTtcblxuZnVuY3Rpb24gYmluZEFwaShob29rLCBzdGF0ZSwgbmFtZSkge1xuICBjb25zdCByZW1vdmVIb29rUmVmID0gYmluZGFibGUocmVtb3ZlSG9vaywgbnVsbCkuYXBwbHkoXG4gICAgbnVsbCxcbiAgICBuYW1lID8gW3N0YXRlLCBuYW1lXSA6IFtzdGF0ZV1cbiAgKTtcbiAgaG9vay5hcGkgPSB7IHJlbW92ZTogcmVtb3ZlSG9va1JlZiB9O1xuICBob29rLnJlbW92ZSA9IHJlbW92ZUhvb2tSZWY7XG4gIFtcImJlZm9yZVwiLCBcImVycm9yXCIsIFwiYWZ0ZXJcIiwgXCJ3cmFwXCJdLmZvckVhY2goKGtpbmQpID0+IHtcbiAgICBjb25zdCBhcmdzID0gbmFtZSA/IFtzdGF0ZSwga2luZCwgbmFtZV0gOiBbc3RhdGUsIGtpbmRdO1xuICAgIGhvb2tba2luZF0gPSBob29rLmFwaVtraW5kXSA9IGJpbmRhYmxlKGFkZEhvb2ssIG51bGwpLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gU2luZ3VsYXIoKSB7XG4gIGNvbnN0IHNpbmd1bGFySG9va05hbWUgPSBTeW1ib2woXCJTaW5ndWxhclwiKTtcbiAgY29uc3Qgc2luZ3VsYXJIb29rU3RhdGUgPSB7XG4gICAgcmVnaXN0cnk6IHt9LFxuICB9O1xuICBjb25zdCBzaW5ndWxhckhvb2sgPSByZWdpc3Rlci5iaW5kKG51bGwsIHNpbmd1bGFySG9va1N0YXRlLCBzaW5ndWxhckhvb2tOYW1lKTtcbiAgYmluZEFwaShzaW5ndWxhckhvb2ssIHNpbmd1bGFySG9va1N0YXRlLCBzaW5ndWxhckhvb2tOYW1lKTtcbiAgcmV0dXJuIHNpbmd1bGFySG9vaztcbn1cblxuZnVuY3Rpb24gQ29sbGVjdGlvbigpIHtcbiAgY29uc3Qgc3RhdGUgPSB7XG4gICAgcmVnaXN0cnk6IHt9LFxuICB9O1xuXG4gIGNvbnN0IGhvb2sgPSByZWdpc3Rlci5iaW5kKG51bGwsIHN0YXRlKTtcbiAgYmluZEFwaShob29rLCBzdGF0ZSk7XG5cbiAgcmV0dXJuIGhvb2s7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHsgU2luZ3VsYXIsIENvbGxlY3Rpb24gfTtcbiIsIi8vIHBrZy9kaXN0LXNyYy9kZWZhdWx0cy5qc1xuaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMC4wLjAtZGV2ZWxvcG1lbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG52YXIgdXNlckFnZW50ID0gYG9jdG9raXQtZW5kcG9pbnQuanMvJHtWRVJTSU9OfSAke2dldFVzZXJBZ2VudCgpfWA7XG52YXIgREVGQVVMVFMgPSB7XG4gIG1ldGhvZDogXCJHRVRcIixcbiAgYmFzZVVybDogXCJodHRwczovL2FwaS5naXRodWIuY29tXCIsXG4gIGhlYWRlcnM6IHtcbiAgICBhY2NlcHQ6IFwiYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytqc29uXCIsXG4gICAgXCJ1c2VyLWFnZW50XCI6IHVzZXJBZ2VudFxuICB9LFxuICBtZWRpYVR5cGU6IHtcbiAgICBmb3JtYXQ6IFwiXCJcbiAgfVxufTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvbG93ZXJjYXNlLWtleXMuanNcbmZ1bmN0aW9uIGxvd2VyY2FzZUtleXMob2JqZWN0KSB7XG4gIGlmICghb2JqZWN0KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLnJlZHVjZSgobmV3T2JqLCBrZXkpID0+IHtcbiAgICBuZXdPYmpba2V5LnRvTG93ZXJDYXNlKCldID0gb2JqZWN0W2tleV07XG4gICAgcmV0dXJuIG5ld09iajtcbiAgfSwge30pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9pcy1wbGFpbi1vYmplY3QuanNcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbClcbiAgICByZXR1cm4gZmFsc2U7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiKVxuICAgIHJldHVybiBmYWxzZTtcbiAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpXG4gICAgcmV0dXJuIHRydWU7XG4gIGNvbnN0IEN0b3IgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvdG8sIFwiY29uc3RydWN0b3JcIikgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmIEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKEN0b3IpID09PSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCh2YWx1ZSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL21lcmdlLWRlZXAuanNcbmZ1bmN0aW9uIG1lcmdlRGVlcChkZWZhdWx0cywgb3B0aW9ucykge1xuICBjb25zdCByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cyk7XG4gIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG9wdGlvbnNba2V5XSkpIHtcbiAgICAgIGlmICghKGtleSBpbiBkZWZhdWx0cykpXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtrZXldOiBvcHRpb25zW2tleV0gfSk7XG4gICAgICBlbHNlXG4gICAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2VEZWVwKGRlZmF1bHRzW2tleV0sIG9wdGlvbnNba2V5XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtrZXldOiBvcHRpb25zW2tleV0gfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvcmVtb3ZlLXVuZGVmaW5lZC1wcm9wZXJ0aWVzLmpzXG5mdW5jdGlvbiByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9iaikge1xuICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICBpZiAob2JqW2tleV0gPT09IHZvaWQgMCkge1xuICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvbWVyZ2UuanNcbmZ1bmN0aW9uIG1lcmdlKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHJvdXRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgbGV0IFttZXRob2QsIHVybF0gPSByb3V0ZS5zcGxpdChcIiBcIik7XG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24odXJsID8geyBtZXRob2QsIHVybCB9IDogeyB1cmw6IG1ldGhvZCB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcm91dGUpO1xuICB9XG4gIG9wdGlvbnMuaGVhZGVycyA9IGxvd2VyY2FzZUtleXMob3B0aW9ucy5oZWFkZXJzKTtcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zKTtcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zLmhlYWRlcnMpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0gbWVyZ2VEZWVwKGRlZmF1bHRzIHx8IHt9LCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMudXJsID09PSBcIi9ncmFwaHFsXCIpIHtcbiAgICBpZiAoZGVmYXVsdHMgJiYgZGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzPy5sZW5ndGgpIHtcbiAgICAgIG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzID0gZGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzLmZpbHRlcihcbiAgICAgICAgKHByZXZpZXcpID0+ICFtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cy5pbmNsdWRlcyhwcmV2aWV3KVxuICAgICAgKS5jb25jYXQobWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MpO1xuICAgIH1cbiAgICBtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyA9IChtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyB8fCBbXSkubWFwKChwcmV2aWV3KSA9PiBwcmV2aWV3LnJlcGxhY2UoLy1wcmV2aWV3LywgXCJcIikpO1xuICB9XG4gIHJldHVybiBtZXJnZWRPcHRpb25zO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9hZGQtcXVlcnktcGFyYW1ldGVycy5qc1xuZnVuY3Rpb24gYWRkUXVlcnlQYXJhbWV0ZXJzKHVybCwgcGFyYW1ldGVycykge1xuICBjb25zdCBzZXBhcmF0b3IgPSAvXFw/Ly50ZXN0KHVybCkgPyBcIiZcIiA6IFwiP1wiO1xuICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpO1xuICBpZiAobmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICByZXR1cm4gdXJsICsgc2VwYXJhdG9yICsgbmFtZXMubWFwKChuYW1lKSA9PiB7XG4gICAgaWYgKG5hbWUgPT09IFwicVwiKSB7XG4gICAgICByZXR1cm4gXCJxPVwiICsgcGFyYW1ldGVycy5xLnNwbGl0KFwiK1wiKS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKFwiK1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIGAke25hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlcnNbbmFtZV0pfWA7XG4gIH0pLmpvaW4oXCImXCIpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9leHRyYWN0LXVybC12YXJpYWJsZS1uYW1lcy5qc1xudmFyIHVybFZhcmlhYmxlUmVnZXggPSAvXFx7W159XStcXH0vZztcbmZ1bmN0aW9uIHJlbW92ZU5vbkNoYXJzKHZhcmlhYmxlTmFtZSkge1xuICByZXR1cm4gdmFyaWFibGVOYW1lLnJlcGxhY2UoL15cXFcrfFxcVyskL2csIFwiXCIpLnNwbGl0KC8sLyk7XG59XG5mdW5jdGlvbiBleHRyYWN0VXJsVmFyaWFibGVOYW1lcyh1cmwpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHVybC5tYXRjaCh1cmxWYXJpYWJsZVJlZ2V4KTtcbiAgaWYgKCFtYXRjaGVzKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBtYXRjaGVzLm1hcChyZW1vdmVOb25DaGFycykucmVkdWNlKChhLCBiKSA9PiBhLmNvbmNhdChiKSwgW10pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9vbWl0LmpzXG5mdW5jdGlvbiBvbWl0KG9iamVjdCwga2V5c1RvT21pdCkge1xuICBjb25zdCByZXN1bHQgPSB7IF9fcHJvdG9fXzogbnVsbCB9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmplY3QpKSB7XG4gICAgaWYgKGtleXNUb09taXQuaW5kZXhPZihrZXkpID09PSAtMSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvdXJsLXRlbXBsYXRlLmpzXG5mdW5jdGlvbiBlbmNvZGVSZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgvKCVbMC05QS1GYS1mXXsyfSkvZykubWFwKGZ1bmN0aW9uKHBhcnQpIHtcbiAgICBpZiAoIS8lWzAtOUEtRmEtZl0vLnRlc3QocGFydCkpIHtcbiAgICAgIHBhcnQgPSBlbmNvZGVVUkkocGFydCkucmVwbGFjZSgvJTVCL2csIFwiW1wiKS5yZXBsYWNlKC8lNUQvZywgXCJdXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcGFydDtcbiAgfSkuam9pbihcIlwiKTtcbn1cbmZ1bmN0aW9uIGVuY29kZVVucmVzZXJ2ZWQoc3RyKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKSpdL2csIGZ1bmN0aW9uKGMpIHtcbiAgICByZXR1cm4gXCIlXCIgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlLCBrZXkpIHtcbiAgdmFsdWUgPSBvcGVyYXRvciA9PT0gXCIrXCIgfHwgb3BlcmF0b3IgPT09IFwiI1wiID8gZW5jb2RlUmVzZXJ2ZWQodmFsdWUpIDogZW5jb2RlVW5yZXNlcnZlZCh2YWx1ZSk7XG4gIGlmIChrZXkpIHtcbiAgICByZXR1cm4gZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIgKyB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZvaWQgMCAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpIHtcbiAgcmV0dXJuIG9wZXJhdG9yID09PSBcIjtcIiB8fCBvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiO1xufVxuZnVuY3Rpb24gZ2V0VmFsdWVzKGNvbnRleHQsIG9wZXJhdG9yLCBrZXksIG1vZGlmaWVyKSB7XG4gIHZhciB2YWx1ZSA9IGNvbnRleHRba2V5XSwgcmVzdWx0ID0gW107XG4gIGlmIChpc0RlZmluZWQodmFsdWUpICYmIHZhbHVlICE9PSBcIlwiKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgaWYgKG1vZGlmaWVyICYmIG1vZGlmaWVyICE9PSBcIipcIikge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBwYXJzZUludChtb2RpZmllciwgMTApKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIilcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtb2RpZmllciA9PT0gXCIqXCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUyLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IFwiXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodmFsdWVba10pKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZVtrXSwgaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0bXAgPSBbXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZTIpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlW2tdKSkge1xuICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVVbnJlc2VydmVkKGspKTtcbiAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNLZXlPcGVyYXRvcihvcGVyYXRvcikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodG1wLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKG9wZXJhdG9yID09PSBcIjtcIikge1xuICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIlwiICYmIChvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiKSkge1xuICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFwiXCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gcGFyc2VVcmwodGVtcGxhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICBleHBhbmQ6IGV4cGFuZC5iaW5kKG51bGwsIHRlbXBsYXRlKVxuICB9O1xufVxuZnVuY3Rpb24gZXhwYW5kKHRlbXBsYXRlLCBjb250ZXh0KSB7XG4gIHZhciBvcGVyYXRvcnMgPSBbXCIrXCIsIFwiI1wiLCBcIi5cIiwgXCIvXCIsIFwiO1wiLCBcIj9cIiwgXCImXCJdO1xuICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoXG4gICAgL1xceyhbXlxce1xcfV0rKVxcfXwoW15cXHtcXH1dKykvZyxcbiAgICBmdW5jdGlvbihfLCBleHByZXNzaW9uLCBsaXRlcmFsKSB7XG4gICAgICBpZiAoZXhwcmVzc2lvbikge1xuICAgICAgICBsZXQgb3BlcmF0b3IgPSBcIlwiO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKG9wZXJhdG9ycy5pbmRleE9mKGV4cHJlc3Npb24uY2hhckF0KDApKSAhPT0gLTEpIHtcbiAgICAgICAgICBvcGVyYXRvciA9IGV4cHJlc3Npb24uY2hhckF0KDApO1xuICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgICAgICBleHByZXNzaW9uLnNwbGl0KC8sL2cpLmZvckVhY2goZnVuY3Rpb24odmFyaWFibGUpIHtcbiAgICAgICAgICB2YXIgdG1wID0gLyhbXjpcXCpdKikoPzo6KFxcZCspfChcXCopKT8vLmV4ZWModmFyaWFibGUpO1xuICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwgdG1wWzFdLCB0bXBbMl0gfHwgdG1wWzNdKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3BlcmF0b3IgJiYgb3BlcmF0b3IgIT09IFwiK1wiKSB7XG4gICAgICAgICAgdmFyIHNlcGFyYXRvciA9IFwiLFwiO1xuICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9IFwiJlwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgIT09IFwiI1wiKSB7XG4gICAgICAgICAgICBzZXBhcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICh2YWx1ZXMubGVuZ3RoICE9PSAwID8gb3BlcmF0b3IgOiBcIlwiKSArIHZhbHVlcy5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlcy5qb2luKFwiLFwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZVJlc2VydmVkKGxpdGVyYWwpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbiAgaWYgKHRlbXBsYXRlID09PSBcIi9cIikge1xuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuICB9XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9wYXJzZS5qc1xuZnVuY3Rpb24gcGFyc2Uob3B0aW9ucykge1xuICBsZXQgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QudG9VcHBlckNhc2UoKTtcbiAgbGV0IHVybCA9IChvcHRpb25zLnVybCB8fCBcIi9cIikucmVwbGFjZSgvOihbYS16XVxcdyspL2csIFwieyQxfVwiKTtcbiAgbGV0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmhlYWRlcnMpO1xuICBsZXQgYm9keTtcbiAgbGV0IHBhcmFtZXRlcnMgPSBvbWl0KG9wdGlvbnMsIFtcbiAgICBcIm1ldGhvZFwiLFxuICAgIFwiYmFzZVVybFwiLFxuICAgIFwidXJsXCIsXG4gICAgXCJoZWFkZXJzXCIsXG4gICAgXCJyZXF1ZXN0XCIsXG4gICAgXCJtZWRpYVR5cGVcIlxuICBdKTtcbiAgY29uc3QgdXJsVmFyaWFibGVOYW1lcyA9IGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCk7XG4gIHVybCA9IHBhcnNlVXJsKHVybCkuZXhwYW5kKHBhcmFtZXRlcnMpO1xuICBpZiAoIS9eaHR0cC8udGVzdCh1cmwpKSB7XG4gICAgdXJsID0gb3B0aW9ucy5iYXNlVXJsICsgdXJsO1xuICB9XG4gIGNvbnN0IG9taXR0ZWRQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob3B0aW9ucykuZmlsdGVyKChvcHRpb24pID0+IHVybFZhcmlhYmxlTmFtZXMuaW5jbHVkZXMob3B0aW9uKSkuY29uY2F0KFwiYmFzZVVybFwiKTtcbiAgY29uc3QgcmVtYWluaW5nUGFyYW1ldGVycyA9IG9taXQocGFyYW1ldGVycywgb21pdHRlZFBhcmFtZXRlcnMpO1xuICBjb25zdCBpc0JpbmFyeVJlcXVlc3QgPSAvYXBwbGljYXRpb25cXC9vY3RldC1zdHJlYW0vaS50ZXN0KGhlYWRlcnMuYWNjZXB0KTtcbiAgaWYgKCFpc0JpbmFyeVJlcXVlc3QpIHtcbiAgICBpZiAob3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0KSB7XG4gICAgICBoZWFkZXJzLmFjY2VwdCA9IGhlYWRlcnMuYWNjZXB0LnNwbGl0KC8sLykubWFwKFxuICAgICAgICAoZm9ybWF0KSA9PiBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAvYXBwbGljYXRpb25cXC92bmQoXFwuXFx3KykoXFwudjMpPyhcXC5cXHcrKT8oXFwranNvbik/JC8sXG4gICAgICAgICAgYGFwcGxpY2F0aW9uL3ZuZCQxJDIuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YFxuICAgICAgICApXG4gICAgICApLmpvaW4oXCIsXCIpO1xuICAgIH1cbiAgICBpZiAodXJsLmVuZHNXaXRoKFwiL2dyYXBocWxcIikpIHtcbiAgICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHByZXZpZXdzRnJvbUFjY2VwdEhlYWRlciA9IGhlYWRlcnMuYWNjZXB0Lm1hdGNoKC9bXFx3LV0rKD89LXByZXZpZXcpL2cpIHx8IFtdO1xuICAgICAgICBoZWFkZXJzLmFjY2VwdCA9IHByZXZpZXdzRnJvbUFjY2VwdEhlYWRlci5jb25jYXQob3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MpLm1hcCgocHJldmlldykgPT4ge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IG9wdGlvbnMubWVkaWFUeXBlLmZvcm1hdCA/IGAuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YCA6IFwiK2pzb25cIjtcbiAgICAgICAgICByZXR1cm4gYGFwcGxpY2F0aW9uL3ZuZC5naXRodWIuJHtwcmV2aWV3fS1wcmV2aWV3JHtmb3JtYXR9YDtcbiAgICAgICAgfSkuam9pbihcIixcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChbXCJHRVRcIiwgXCJIRUFEXCJdLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICB1cmwgPSBhZGRRdWVyeVBhcmFtZXRlcnModXJsLCByZW1haW5pbmdQYXJhbWV0ZXJzKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoXCJkYXRhXCIgaW4gcmVtYWluaW5nUGFyYW1ldGVycykge1xuICAgICAgYm9keSA9IHJlbWFpbmluZ1BhcmFtZXRlcnMuZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHJlbWFpbmluZ1BhcmFtZXRlcnMpLmxlbmd0aCkge1xuICAgICAgICBib2R5ID0gcmVtYWluaW5nUGFyYW1ldGVycztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCFoZWFkZXJzW1wiY29udGVudC10eXBlXCJdICYmIHR5cGVvZiBib2R5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiO1xuICB9XG4gIGlmIChbXCJQQVRDSFwiLCBcIlBVVFwiXS5pbmNsdWRlcyhtZXRob2QpICYmIHR5cGVvZiBib2R5ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgYm9keSA9IFwiXCI7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAgeyBtZXRob2QsIHVybCwgaGVhZGVycyB9LFxuICAgIHR5cGVvZiBib2R5ICE9PSBcInVuZGVmaW5lZFwiID8geyBib2R5IH0gOiBudWxsLFxuICAgIG9wdGlvbnMucmVxdWVzdCA/IHsgcmVxdWVzdDogb3B0aW9ucy5yZXF1ZXN0IH0gOiBudWxsXG4gICk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9lbmRwb2ludC13aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiBlbmRwb2ludFdpdGhEZWZhdWx0cyhkZWZhdWx0cywgcm91dGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHBhcnNlKG1lcmdlKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuZnVuY3Rpb24gd2l0aERlZmF1bHRzKG9sZERlZmF1bHRzLCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBERUZBVUxUUzIgPSBtZXJnZShvbGREZWZhdWx0cywgbmV3RGVmYXVsdHMpO1xuICBjb25zdCBlbmRwb2ludDIgPSBlbmRwb2ludFdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIERFRkFVTFRTMik7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKGVuZHBvaW50Miwge1xuICAgIERFRkFVTFRTOiBERUZBVUxUUzIsXG4gICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIERFRkFVTFRTMiksXG4gICAgbWVyZ2U6IG1lcmdlLmJpbmQobnVsbCwgREVGQVVMVFMyKSxcbiAgICBwYXJzZVxuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZW5kcG9pbnQgPSB3aXRoRGVmYXVsdHMobnVsbCwgREVGQVVMVFMpO1xuZXhwb3J0IHtcbiAgZW5kcG9pbnRcbn07XG4iLCJjbGFzcyBSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIG5hbWU7XG4gIC8qKlxuICAgKiBodHRwIHN0YXR1cyBjb2RlXG4gICAqL1xuICBzdGF0dXM7XG4gIC8qKlxuICAgKiBSZXF1ZXN0IG9wdGlvbnMgdGhhdCBsZWFkIHRvIHRoZSBlcnJvci5cbiAgICovXG4gIHJlcXVlc3Q7XG4gIC8qKlxuICAgKiBSZXNwb25zZSBvYmplY3QgaWYgYSByZXNwb25zZSB3YXMgcmVjZWl2ZWRcbiAgICovXG4gIHJlc3BvbnNlO1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBzdGF0dXNDb2RlLCBvcHRpb25zKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9XG4gICAgdGhpcy5uYW1lID0gXCJIdHRwRXJyb3JcIjtcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1c0NvZGU7XG4gICAgaWYgKFwicmVzcG9uc2VcIiBpbiBvcHRpb25zKSB7XG4gICAgICB0aGlzLnJlc3BvbnNlID0gb3B0aW9ucy5yZXNwb25zZTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdENvcHkgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnJlcXVlc3QpO1xuICAgIGlmIChvcHRpb25zLnJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICByZXF1ZXN0Q29weS5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMsIHtcbiAgICAgICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbi5yZXBsYWNlKFxuICAgICAgICAgIC8gLiokLyxcbiAgICAgICAgICBcIiBbUkVEQUNURURdXCJcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJlcXVlc3RDb3B5LnVybCA9IHJlcXVlc3RDb3B5LnVybC5yZXBsYWNlKC9cXGJjbGllbnRfc2VjcmV0PVxcdysvZywgXCJjbGllbnRfc2VjcmV0PVtSRURBQ1RFRF1cIikucmVwbGFjZSgvXFxiYWNjZXNzX3Rva2VuPVxcdysvZywgXCJhY2Nlc3NfdG9rZW49W1JFREFDVEVEXVwiKTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0Q29weTtcbiAgfVxufVxuZXhwb3J0IHtcbiAgUmVxdWVzdEVycm9yXG59O1xuIiwiLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG5pbXBvcnQgeyBlbmRwb2ludCB9IGZyb20gXCJAb2N0b2tpdC9lbmRwb2ludFwiO1xuaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMC4wLjAtZGV2ZWxvcG1lbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2lzLXBsYWluLW9iamVjdC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgIT09IFwiW29iamVjdCBPYmplY3RdXCIpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbClcbiAgICByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgQ3RvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwoQ3RvcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKHZhbHVlKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbmltcG9ydCB7IFJlcXVlc3RFcnJvciB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9nZXQtYnVmZmVyLXJlc3BvbnNlLmpzXG5mdW5jdGlvbiBnZXRCdWZmZXJSZXNwb25zZShyZXNwb25zZSkge1xuICByZXR1cm4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbmZ1bmN0aW9uIGZldGNoV3JhcHBlcihyZXF1ZXN0T3B0aW9ucykge1xuICBjb25zdCBsb2cgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0ICYmIHJlcXVlc3RPcHRpb25zLnJlcXVlc3QubG9nID8gcmVxdWVzdE9wdGlvbnMucmVxdWVzdC5sb2cgOiBjb25zb2xlO1xuICBjb25zdCBwYXJzZVN1Y2Nlc3NSZXNwb25zZUJvZHkgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5wYXJzZVN1Y2Nlc3NSZXNwb25zZUJvZHkgIT09IGZhbHNlO1xuICBpZiAoaXNQbGFpbk9iamVjdChyZXF1ZXN0T3B0aW9ucy5ib2R5KSB8fCBBcnJheS5pc0FycmF5KHJlcXVlc3RPcHRpb25zLmJvZHkpKSB7XG4gICAgcmVxdWVzdE9wdGlvbnMuYm9keSA9IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RPcHRpb25zLmJvZHkpO1xuICB9XG4gIGxldCBoZWFkZXJzID0ge307XG4gIGxldCBzdGF0dXM7XG4gIGxldCB1cmw7XG4gIGxldCB7IGZldGNoIH0gPSBnbG9iYWxUaGlzO1xuICBpZiAocmVxdWVzdE9wdGlvbnMucmVxdWVzdD8uZmV0Y2gpIHtcbiAgICBmZXRjaCA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3QuZmV0Y2g7XG4gIH1cbiAgaWYgKCFmZXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiZmV0Y2ggaXMgbm90IHNldC4gUGxlYXNlIHBhc3MgYSBmZXRjaCBpbXBsZW1lbnRhdGlvbiBhcyBuZXcgT2N0b2tpdCh7IHJlcXVlc3Q6IHsgZmV0Y2ggfX0pLiBMZWFybiBtb3JlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9vY3Rva2l0L29jdG9raXQuanMvI2ZldGNoLW1pc3NpbmdcIlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGZldGNoKHJlcXVlc3RPcHRpb25zLnVybCwge1xuICAgIG1ldGhvZDogcmVxdWVzdE9wdGlvbnMubWV0aG9kLFxuICAgIGJvZHk6IHJlcXVlc3RPcHRpb25zLmJvZHksXG4gICAgcmVkaXJlY3Q6IHJlcXVlc3RPcHRpb25zLnJlcXVlc3Q/LnJlZGlyZWN0LFxuICAgIC8vIEhlYWRlciB2YWx1ZXMgbXVzdCBiZSBgc3RyaW5nYFxuICAgIGhlYWRlcnM6IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJlcXVlc3RPcHRpb25zLmhlYWRlcnMpLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gW1xuICAgICAgICBuYW1lLFxuICAgICAgICBTdHJpbmcodmFsdWUpXG4gICAgICBdKVxuICAgICksXG4gICAgc2lnbmFsOiByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5zaWduYWwsXG4gICAgLy8gZHVwbGV4IG11c3QgYmUgc2V0IGlmIHJlcXVlc3QuYm9keSBpcyBSZWFkYWJsZVN0cmVhbSBvciBBc3luYyBJdGVyYWJsZXMuXG4gICAgLy8gU2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdGluaXQtZHVwbGV4LlxuICAgIC4uLnJlcXVlc3RPcHRpb25zLmJvZHkgJiYgeyBkdXBsZXg6IFwiaGFsZlwiIH1cbiAgfSkudGhlbihhc3luYyAocmVzcG9uc2UpID0+IHtcbiAgICB1cmwgPSByZXNwb25zZS51cmw7XG4gICAgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIGZvciAoY29uc3Qga2V5QW5kVmFsdWUgb2YgcmVzcG9uc2UuaGVhZGVycykge1xuICAgICAgaGVhZGVyc1trZXlBbmRWYWx1ZVswXV0gPSBrZXlBbmRWYWx1ZVsxXTtcbiAgICB9XG4gICAgaWYgKFwiZGVwcmVjYXRpb25cIiBpbiBoZWFkZXJzKSB7XG4gICAgICBjb25zdCBtYXRjaGVzID0gaGVhZGVycy5saW5rICYmIGhlYWRlcnMubGluay5tYXRjaCgvPChbXj5dKyk+OyByZWw9XCJkZXByZWNhdGlvblwiLyk7XG4gICAgICBjb25zdCBkZXByZWNhdGlvbkxpbmsgPSBtYXRjaGVzICYmIG1hdGNoZXMucG9wKCk7XG4gICAgICBsb2cud2FybihcbiAgICAgICAgYFtAb2N0b2tpdC9yZXF1ZXN0XSBcIiR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3JlcXVlc3RPcHRpb25zLnVybH1cIiBpcyBkZXByZWNhdGVkLiBJdCBpcyBzY2hlZHVsZWQgdG8gYmUgcmVtb3ZlZCBvbiAke2hlYWRlcnMuc3Vuc2V0fSR7ZGVwcmVjYXRpb25MaW5rID8gYC4gU2VlICR7ZGVwcmVjYXRpb25MaW5rfWAgOiBcIlwifWBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGF0dXMgPT09IDIwNCB8fCBzdGF0dXMgPT09IDIwNSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdE9wdGlvbnMubWV0aG9kID09PSBcIkhFQURcIikge1xuICAgICAgaWYgKHN0YXR1cyA8IDQwMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEVycm9yKHJlc3BvbnNlLnN0YXR1c1RleHQsIHN0YXR1cywge1xuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBkYXRhOiB2b2lkIDBcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzID09PSAzMDQpIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IoXCJOb3QgbW9kaWZpZWRcIiwgc3RhdHVzLCB7XG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIGRhdGE6IGF3YWl0IGdldFJlc3BvbnNlRGF0YShyZXNwb25zZSlcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzID49IDQwMCkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdldFJlc3BvbnNlRGF0YShyZXNwb25zZSk7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBSZXF1ZXN0RXJyb3IodG9FcnJvck1lc3NhZ2UoZGF0YSksIHN0YXR1cywge1xuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBkYXRhXG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ID8gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKSA6IHJlc3BvbnNlLmJvZHk7XG4gIH0pLnRoZW4oKGRhdGEpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzLFxuICAgICAgdXJsLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGRhdGFcbiAgICB9O1xuICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBSZXF1ZXN0RXJyb3IpXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICBlbHNlIGlmIChlcnJvci5uYW1lID09PSBcIkFib3J0RXJyb3JcIilcbiAgICAgIHRocm93IGVycm9yO1xuICAgIGxldCBtZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcbiAgICBpZiAoZXJyb3IubmFtZSA9PT0gXCJUeXBlRXJyb3JcIiAmJiBcImNhdXNlXCIgaW4gZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5jYXVzZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIG1lc3NhZ2UgPSBlcnJvci5jYXVzZS5tZXNzYWdlO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IuY2F1c2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgbWVzc2FnZSA9IGVycm9yLmNhdXNlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgUmVxdWVzdEVycm9yKG1lc3NhZ2UsIDUwMCwge1xuICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICB9KTtcbiAgfSk7XG59XG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpIHtcbiAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcbiAgaWYgKC9hcHBsaWNhdGlvblxcL2pzb24vLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiByZXNwb25zZS50ZXh0KCkpLmNhdGNoKCgpID0+IFwiXCIpO1xuICB9XG4gIGlmICghY29udGVudFR5cGUgfHwgL150ZXh0XFwvfGNoYXJzZXQ9dXRmLTgkLy50ZXN0KGNvbnRlbnRUeXBlKSkge1xuICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gIH1cbiAgcmV0dXJuIGdldEJ1ZmZlclJlc3BvbnNlKHJlc3BvbnNlKTtcbn1cbmZ1bmN0aW9uIHRvRXJyb3JNZXNzYWdlKGRhdGEpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKVxuICAgIHJldHVybiBkYXRhO1xuICBsZXQgc3VmZml4O1xuICBpZiAoXCJkb2N1bWVudGF0aW9uX3VybFwiIGluIGRhdGEpIHtcbiAgICBzdWZmaXggPSBgIC0gJHtkYXRhLmRvY3VtZW50YXRpb25fdXJsfWA7XG4gIH0gZWxzZSB7XG4gICAgc3VmZml4ID0gXCJcIjtcbiAgfVxuICBpZiAoXCJtZXNzYWdlXCIgaW4gZGF0YSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEuZXJyb3JzKSkge1xuICAgICAgcmV0dXJuIGAke2RhdGEubWVzc2FnZX06ICR7ZGF0YS5lcnJvcnMubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKFwiLCBcIil9JHtzdWZmaXh9YDtcbiAgICB9XG4gICAgcmV0dXJuIGAke2RhdGEubWVzc2FnZX0ke3N1ZmZpeH1gO1xuICB9XG4gIHJldHVybiBgVW5rbm93biBlcnJvcjogJHtKU09OLnN0cmluZ2lmeShkYXRhKX1gO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuZnVuY3Rpb24gd2l0aERlZmF1bHRzKG9sZEVuZHBvaW50LCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBlbmRwb2ludDIgPSBvbGRFbmRwb2ludC5kZWZhdWx0cyhuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IG5ld0FwaSA9IGZ1bmN0aW9uKHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgZW5kcG9pbnRPcHRpb25zID0gZW5kcG9pbnQyLm1lcmdlKHJvdXRlLCBwYXJhbWV0ZXJzKTtcbiAgICBpZiAoIWVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0IHx8ICFlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKSB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKGVuZHBvaW50Mi5wYXJzZShlbmRwb2ludE9wdGlvbnMpKTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdDIgPSAocm91dGUyLCBwYXJhbWV0ZXJzMikgPT4ge1xuICAgICAgcmV0dXJuIGZldGNoV3JhcHBlcihcbiAgICAgICAgZW5kcG9pbnQyLnBhcnNlKGVuZHBvaW50Mi5tZXJnZShyb3V0ZTIsIHBhcmFtZXRlcnMyKSlcbiAgICAgICk7XG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHJlcXVlc3QyLCB7XG4gICAgICBlbmRwb2ludDogZW5kcG9pbnQyLFxuICAgICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIGVuZHBvaW50MilcbiAgICB9KTtcbiAgICByZXR1cm4gZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QuaG9vayhyZXF1ZXN0MiwgZW5kcG9pbnRPcHRpb25zKTtcbiAgfTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3QXBpLCB7XG4gICAgZW5kcG9pbnQ6IGVuZHBvaW50MixcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQyKVxuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgcmVxdWVzdCA9IHdpdGhEZWZhdWx0cyhlbmRwb2ludCwge1xuICBoZWFkZXJzOiB7XG4gICAgXCJ1c2VyLWFnZW50XCI6IGBvY3Rva2l0LXJlcXVlc3QuanMvJHtWRVJTSU9OfSAke2dldFVzZXJBZ2VudCgpfWBcbiAgfVxufSk7XG5leHBvcnQge1xuICByZXF1ZXN0XG59O1xuIiwiLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG5pbXBvcnQgeyByZXF1ZXN0IH0gZnJvbSBcIkBvY3Rva2l0L3JlcXVlc3RcIjtcbmltcG9ydCB7IGdldFVzZXJBZ2VudCB9IGZyb20gXCJ1bml2ZXJzYWwtdXNlci1hZ2VudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvdmVyc2lvbi5qc1xudmFyIFZFUlNJT04gPSBcIjAuMC4wLWRldmVsb3BtZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5pbXBvcnQgeyByZXF1ZXN0IGFzIFJlcXVlc3QyIH0gZnJvbSBcIkBvY3Rva2l0L3JlcXVlc3RcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2dyYXBocWwuanNcbmltcG9ydCB7IHJlcXVlc3QgYXMgUmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9lcnJvci5qc1xuZnVuY3Rpb24gX2J1aWxkTWVzc2FnZUZvclJlc3BvbnNlRXJyb3JzKGRhdGEpIHtcbiAgcmV0dXJuIGBSZXF1ZXN0IGZhaWxlZCBkdWUgdG8gZm9sbG93aW5nIHJlc3BvbnNlIGVycm9yczpcbmAgKyBkYXRhLmVycm9ycy5tYXAoKGUpID0+IGAgLSAke2UubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xufVxudmFyIEdyYXBocWxSZXNwb25zZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlcXVlc3QyLCBoZWFkZXJzLCByZXNwb25zZSkge1xuICAgIHN1cGVyKF9idWlsZE1lc3NhZ2VGb3JSZXNwb25zZUVycm9ycyhyZXNwb25zZSkpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3QyO1xuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgIHRoaXMuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzO1xuICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9XG4gIH1cbiAgbmFtZSA9IFwiR3JhcGhxbFJlc3BvbnNlRXJyb3JcIjtcbiAgZXJyb3JzO1xuICBkYXRhO1xufTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2dyYXBocWwuanNcbnZhciBOT05fVkFSSUFCTEVfT1BUSU9OUyA9IFtcbiAgXCJtZXRob2RcIixcbiAgXCJiYXNlVXJsXCIsXG4gIFwidXJsXCIsXG4gIFwiaGVhZGVyc1wiLFxuICBcInJlcXVlc3RcIixcbiAgXCJxdWVyeVwiLFxuICBcIm1lZGlhVHlwZVwiXG5dO1xudmFyIEZPUkJJRERFTl9WQVJJQUJMRV9PUFRJT05TID0gW1wicXVlcnlcIiwgXCJtZXRob2RcIiwgXCJ1cmxcIl07XG52YXIgR0hFU19WM19TVUZGSVhfUkVHRVggPSAvXFwvYXBpXFwvdjNcXC8/JC87XG5mdW5jdGlvbiBncmFwaHFsKHJlcXVlc3QyLCBxdWVyeSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCIgJiYgXCJxdWVyeVwiIGluIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgbmV3IEVycm9yKGBbQG9jdG9raXQvZ3JhcGhxbF0gXCJxdWVyeVwiIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmlhYmxlIG5hbWVgKVxuICAgICAgKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucykge1xuICAgICAgaWYgKCFGT1JCSURERU5fVkFSSUFCTEVfT1BUSU9OUy5pbmNsdWRlcyhrZXkpKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgIGBbQG9jdG9raXQvZ3JhcGhxbF0gXCIke2tleX1cIiBjYW5ub3QgYmUgdXNlZCBhcyB2YXJpYWJsZSBuYW1lYFxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBjb25zdCBwYXJzZWRPcHRpb25zID0gdHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiID8gT2JqZWN0LmFzc2lnbih7IHF1ZXJ5IH0sIG9wdGlvbnMpIDogcXVlcnk7XG4gIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gT2JqZWN0LmtleXMoXG4gICAgcGFyc2VkT3B0aW9uc1xuICApLnJlZHVjZSgocmVzdWx0LCBrZXkpID0+IHtcbiAgICBpZiAoTk9OX1ZBUklBQkxFX09QVElPTlMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBwYXJzZWRPcHRpb25zW2tleV07XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBpZiAoIXJlc3VsdC52YXJpYWJsZXMpIHtcbiAgICAgIHJlc3VsdC52YXJpYWJsZXMgPSB7fTtcbiAgICB9XG4gICAgcmVzdWx0LnZhcmlhYmxlc1trZXldID0gcGFyc2VkT3B0aW9uc1trZXldO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIHt9KTtcbiAgY29uc3QgYmFzZVVybCA9IHBhcnNlZE9wdGlvbnMuYmFzZVVybCB8fCByZXF1ZXN0Mi5lbmRwb2ludC5ERUZBVUxUUy5iYXNlVXJsO1xuICBpZiAoR0hFU19WM19TVUZGSVhfUkVHRVgudGVzdChiYXNlVXJsKSkge1xuICAgIHJlcXVlc3RPcHRpb25zLnVybCA9IGJhc2VVcmwucmVwbGFjZShHSEVTX1YzX1NVRkZJWF9SRUdFWCwgXCIvYXBpL2dyYXBocWxcIik7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3QyKHJlcXVlc3RPcHRpb25zKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5kYXRhLmVycm9ycykge1xuICAgICAgY29uc3QgaGVhZGVycyA9IHt9O1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVyc1trZXldO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEdyYXBocWxSZXNwb25zZUVycm9yKFxuICAgICAgICByZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgcmVzcG9uc2UuZGF0YVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YTtcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMocmVxdWVzdDIsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IG5ld1JlcXVlc3QgPSByZXF1ZXN0Mi5kZWZhdWx0cyhuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IG5ld0FwaSA9IChxdWVyeSwgb3B0aW9ucykgPT4ge1xuICAgIHJldHVybiBncmFwaHFsKG5ld1JlcXVlc3QsIHF1ZXJ5LCBvcHRpb25zKTtcbiAgfTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3QXBpLCB7XG4gICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIG5ld1JlcXVlc3QpLFxuICAgIGVuZHBvaW50OiBuZXdSZXF1ZXN0LmVuZHBvaW50XG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBncmFwaHFsMiA9IHdpdGhEZWZhdWx0cyhyZXF1ZXN0LCB7XG4gIGhlYWRlcnM6IHtcbiAgICBcInVzZXItYWdlbnRcIjogYG9jdG9raXQtZ3JhcGhxbC5qcy8ke1ZFUlNJT059ICR7Z2V0VXNlckFnZW50KCl9YFxuICB9LFxuICBtZXRob2Q6IFwiUE9TVFwiLFxuICB1cmw6IFwiL2dyYXBocWxcIlxufSk7XG5mdW5jdGlvbiB3aXRoQ3VzdG9tUmVxdWVzdChjdXN0b21SZXF1ZXN0KSB7XG4gIHJldHVybiB3aXRoRGVmYXVsdHMoY3VzdG9tUmVxdWVzdCwge1xuICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgdXJsOiBcIi9ncmFwaHFsXCJcbiAgfSk7XG59XG5leHBvcnQge1xuICBHcmFwaHFsUmVzcG9uc2VFcnJvcixcbiAgZ3JhcGhxbDIgYXMgZ3JhcGhxbCxcbiAgd2l0aEN1c3RvbVJlcXVlc3Rcbn07XG4iLCIvLyBwa2cvZGlzdC1zcmMvYXV0aC5qc1xudmFyIFJFR0VYX0lTX0lOU1RBTExBVElPTl9MRUdBQ1kgPSAvXnYxXFwuLztcbnZhciBSRUdFWF9JU19JTlNUQUxMQVRJT04gPSAvXmdoc18vO1xudmFyIFJFR0VYX0lTX1VTRVJfVE9fU0VSVkVSID0gL15naHVfLztcbmFzeW5jIGZ1bmN0aW9uIGF1dGgodG9rZW4pIHtcbiAgY29uc3QgaXNBcHAgPSB0b2tlbi5zcGxpdCgvXFwuLykubGVuZ3RoID09PSAzO1xuICBjb25zdCBpc0luc3RhbGxhdGlvbiA9IFJFR0VYX0lTX0lOU1RBTExBVElPTl9MRUdBQ1kudGVzdCh0b2tlbikgfHwgUkVHRVhfSVNfSU5TVEFMTEFUSU9OLnRlc3QodG9rZW4pO1xuICBjb25zdCBpc1VzZXJUb1NlcnZlciA9IFJFR0VYX0lTX1VTRVJfVE9fU0VSVkVSLnRlc3QodG9rZW4pO1xuICBjb25zdCB0b2tlblR5cGUgPSBpc0FwcCA/IFwiYXBwXCIgOiBpc0luc3RhbGxhdGlvbiA/IFwiaW5zdGFsbGF0aW9uXCIgOiBpc1VzZXJUb1NlcnZlciA/IFwidXNlci10by1zZXJ2ZXJcIiA6IFwib2F1dGhcIjtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcInRva2VuXCIsXG4gICAgdG9rZW4sXG4gICAgdG9rZW5UeXBlXG4gIH07XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWF1dGhvcml6YXRpb24tcHJlZml4LmpzXG5mdW5jdGlvbiB3aXRoQXV0aG9yaXphdGlvblByZWZpeCh0b2tlbikge1xuICBpZiAodG9rZW4uc3BsaXQoL1xcLi8pLmxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiBgYmVhcmVyICR7dG9rZW59YDtcbiAgfVxuICByZXR1cm4gYHRva2VuICR7dG9rZW59YDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2hvb2suanNcbmFzeW5jIGZ1bmN0aW9uIGhvb2sodG9rZW4sIHJlcXVlc3QsIHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IGVuZHBvaW50ID0gcmVxdWVzdC5lbmRwb2ludC5tZXJnZShcbiAgICByb3V0ZSxcbiAgICBwYXJhbWV0ZXJzXG4gICk7XG4gIGVuZHBvaW50LmhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IHdpdGhBdXRob3JpemF0aW9uUHJlZml4KHRva2VuKTtcbiAgcmV0dXJuIHJlcXVlc3QoZW5kcG9pbnQpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBjcmVhdGVUb2tlbkF1dGggPSBmdW5jdGlvbiBjcmVhdGVUb2tlbkF1dGgyKHRva2VuKSB7XG4gIGlmICghdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gTm8gdG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aFwiKTtcbiAgfVxuICBpZiAodHlwZW9mIHRva2VuICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gVG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aCBpcyBub3QgYSBzdHJpbmdcIlxuICAgICk7XG4gIH1cbiAgdG9rZW4gPSB0b2tlbi5yZXBsYWNlKC9eKHRva2VufGJlYXJlcikgKy9pLCBcIlwiKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYXV0aC5iaW5kKG51bGwsIHRva2VuKSwge1xuICAgIGhvb2s6IGhvb2suYmluZChudWxsLCB0b2tlbilcbiAgfSk7XG59O1xuZXhwb3J0IHtcbiAgY3JlYXRlVG9rZW5BdXRoXG59O1xuIiwiY29uc3QgVkVSU0lPTiA9IFwiNi4xLjJcIjtcbmV4cG9ydCB7XG4gIFZFUlNJT05cbn07XG4iLCJpbXBvcnQgeyBnZXRVc2VyQWdlbnQgfSBmcm9tIFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIjtcbmltcG9ydCBIb29rIGZyb20gXCJiZWZvcmUtYWZ0ZXItaG9va1wiO1xuaW1wb3J0IHsgcmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0XCI7XG5pbXBvcnQgeyB3aXRoQ3VzdG9tUmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9ncmFwaHFsXCI7XG5pbXBvcnQgeyBjcmVhdGVUb2tlbkF1dGggfSBmcm9tIFwiQG9jdG9raXQvYXV0aC10b2tlblwiO1xuaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmNvbnN0IG5vb3AgPSAoKSA9PiB7XG59O1xuY29uc3QgY29uc29sZVdhcm4gPSBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtcbmNvbnN0IGNvbnNvbGVFcnJvciA9IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtcbmNvbnN0IHVzZXJBZ2VudFRyYWlsID0gYG9jdG9raXQtY29yZS5qcy8ke1ZFUlNJT059ICR7Z2V0VXNlckFnZW50KCl9YDtcbmNsYXNzIE9jdG9raXQge1xuICBzdGF0aWMgVkVSU0lPTiA9IFZFUlNJT047XG4gIHN0YXRpYyBkZWZhdWx0cyhkZWZhdWx0cykge1xuICAgIGNvbnN0IE9jdG9raXRXaXRoRGVmYXVsdHMgPSBjbGFzcyBleHRlbmRzIHRoaXMge1xuICAgICAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gYXJnc1swXSB8fCB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0cyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgc3VwZXIoZGVmYXVsdHMob3B0aW9ucykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcihcbiAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zLnVzZXJBZ2VudCAmJiBkZWZhdWx0cy51c2VyQWdlbnQgPyB7XG4gICAgICAgICAgICAgIHVzZXJBZ2VudDogYCR7b3B0aW9ucy51c2VyQWdlbnR9ICR7ZGVmYXVsdHMudXNlckFnZW50fWBcbiAgICAgICAgICAgIH0gOiBudWxsXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE9jdG9raXRXaXRoRGVmYXVsdHM7XG4gIH1cbiAgc3RhdGljIHBsdWdpbnMgPSBbXTtcbiAgLyoqXG4gICAqIEF0dGFjaCBhIHBsdWdpbiAob3IgbWFueSkgdG8geW91ciBPY3Rva2l0IGluc3RhbmNlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBBUEkgPSBPY3Rva2l0LnBsdWdpbihwbHVnaW4xLCBwbHVnaW4yLCBwbHVnaW4zLCAuLi4pXG4gICAqL1xuICBzdGF0aWMgcGx1Z2luKC4uLm5ld1BsdWdpbnMpIHtcbiAgICBjb25zdCBjdXJyZW50UGx1Z2lucyA9IHRoaXMucGx1Z2lucztcbiAgICBjb25zdCBOZXdPY3Rva2l0ID0gY2xhc3MgZXh0ZW5kcyB0aGlzIHtcbiAgICAgIHN0YXRpYyBwbHVnaW5zID0gY3VycmVudFBsdWdpbnMuY29uY2F0KFxuICAgICAgICBuZXdQbHVnaW5zLmZpbHRlcigocGx1Z2luKSA9PiAhY3VycmVudFBsdWdpbnMuaW5jbHVkZXMocGx1Z2luKSlcbiAgICAgICk7XG4gICAgfTtcbiAgICByZXR1cm4gTmV3T2N0b2tpdDtcbiAgfVxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBob29rID0gbmV3IEhvb2suQ29sbGVjdGlvbigpO1xuICAgIGNvbnN0IHJlcXVlc3REZWZhdWx0cyA9IHtcbiAgICAgIGJhc2VVcmw6IHJlcXVlc3QuZW5kcG9pbnQuREVGQVVMVFMuYmFzZVVybCxcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgcmVxdWVzdDogT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0LCB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgaW50ZXJuYWwgdXNhZ2Ugb25seSwgbm8gbmVlZCB0byB0eXBlXG4gICAgICAgIGhvb2s6IGhvb2suYmluZChudWxsLCBcInJlcXVlc3RcIilcbiAgICAgIH0pLFxuICAgICAgbWVkaWFUeXBlOiB7XG4gICAgICAgIHByZXZpZXdzOiBbXSxcbiAgICAgICAgZm9ybWF0OiBcIlwiXG4gICAgICB9XG4gICAgfTtcbiAgICByZXF1ZXN0RGVmYXVsdHMuaGVhZGVyc1tcInVzZXItYWdlbnRcIl0gPSBvcHRpb25zLnVzZXJBZ2VudCA/IGAke29wdGlvbnMudXNlckFnZW50fSAke3VzZXJBZ2VudFRyYWlsfWAgOiB1c2VyQWdlbnRUcmFpbDtcbiAgICBpZiAob3B0aW9ucy5iYXNlVXJsKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMuYmFzZVVybCA9IG9wdGlvbnMuYmFzZVVybDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMucHJldmlld3MpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3MgPSBvcHRpb25zLnByZXZpZXdzO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50aW1lWm9uZSkge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLmhlYWRlcnNbXCJ0aW1lLXpvbmVcIl0gPSBvcHRpb25zLnRpbWVab25lO1xuICAgIH1cbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0LmRlZmF1bHRzKHJlcXVlc3REZWZhdWx0cyk7XG4gICAgdGhpcy5ncmFwaHFsID0gd2l0aEN1c3RvbVJlcXVlc3QodGhpcy5yZXF1ZXN0KS5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMubG9nID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgZGVidWc6IG5vb3AsXG4gICAgICAgIGluZm86IG5vb3AsXG4gICAgICAgIHdhcm46IGNvbnNvbGVXYXJuLFxuICAgICAgICBlcnJvcjogY29uc29sZUVycm9yXG4gICAgICB9LFxuICAgICAgb3B0aW9ucy5sb2dcbiAgICApO1xuICAgIHRoaXMuaG9vayA9IGhvb2s7XG4gICAgaWYgKCFvcHRpb25zLmF1dGhTdHJhdGVneSkge1xuICAgICAgaWYgKCFvcHRpb25zLmF1dGgpIHtcbiAgICAgICAgdGhpcy5hdXRoID0gYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgICB0eXBlOiBcInVuYXV0aGVudGljYXRlZFwiXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXV0aCA9IGNyZWF0ZVRva2VuQXV0aChvcHRpb25zLmF1dGgpO1xuICAgICAgICBob29rLndyYXAoXCJyZXF1ZXN0XCIsIGF1dGguaG9vayk7XG4gICAgICAgIHRoaXMuYXV0aCA9IGF1dGg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHsgYXV0aFN0cmF0ZWd5LCAuLi5vdGhlck9wdGlvbnMgfSA9IG9wdGlvbnM7XG4gICAgICBjb25zdCBhdXRoID0gYXV0aFN0cmF0ZWd5KFxuICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlcXVlc3Q6IHRoaXMucmVxdWVzdCxcbiAgICAgICAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICAgICAgICAvLyB3ZSBwYXNzIHRoZSBjdXJyZW50IG9jdG9raXQgaW5zdGFuY2UgYXMgd2VsbCBhcyBpdHMgY29uc3RydWN0b3Igb3B0aW9uc1xuICAgICAgICAgICAgLy8gdG8gYWxsb3cgZm9yIGF1dGhlbnRpY2F0aW9uIHN0cmF0ZWdpZXMgdGhhdCByZXR1cm4gYSBuZXcgb2N0b2tpdCBpbnN0YW5jZVxuICAgICAgICAgICAgLy8gdGhhdCBzaGFyZXMgdGhlIHNhbWUgaW50ZXJuYWwgc3RhdGUgYXMgdGhlIGN1cnJlbnQgb25lLiBUaGUgb3JpZ2luYWxcbiAgICAgICAgICAgIC8vIHJlcXVpcmVtZW50IGZvciB0aGlzIHdhcyB0aGUgXCJldmVudC1vY3Rva2l0XCIgYXV0aGVudGljYXRpb24gc3RyYXRlZ3lcbiAgICAgICAgICAgIC8vIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9ib3Qvb2N0b2tpdC1hdXRoLXByb2JvdC5cbiAgICAgICAgICAgIG9jdG9raXQ6IHRoaXMsXG4gICAgICAgICAgICBvY3Rva2l0T3B0aW9uczogb3RoZXJPcHRpb25zXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcHRpb25zLmF1dGhcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIGhvb2sud3JhcChcInJlcXVlc3RcIiwgYXV0aC5ob29rKTtcbiAgICAgIHRoaXMuYXV0aCA9IGF1dGg7XG4gICAgfVxuICAgIGNvbnN0IGNsYXNzQ29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xhc3NDb25zdHJ1Y3Rvci5wbHVnaW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGNsYXNzQ29uc3RydWN0b3IucGx1Z2luc1tpXSh0aGlzLCBvcHRpb25zKSk7XG4gICAgfVxuICB9XG4gIC8vIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3RvclxuICByZXF1ZXN0O1xuICBncmFwaHFsO1xuICBsb2c7XG4gIGhvb2s7XG4gIC8vIFRPRE86IHR5cGUgYG9jdG9raXQuYXV0aGAgYmFzZWQgb24gcGFzc2VkIG9wdGlvbnMuYXV0aFN0cmF0ZWd5XG4gIGF1dGg7XG59XG5leHBvcnQge1xuICBPY3Rva2l0XG59O1xuIiwiY29uc3QgVkVSU0lPTiA9IFwiNS4zLjBcIjtcbmV4cG9ydCB7XG4gIFZFUlNJT05cbn07XG4iLCJpbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSBcIi4vdmVyc2lvbi5qc1wiO1xuZnVuY3Rpb24gcmVxdWVzdExvZyhvY3Rva2l0KSB7XG4gIG9jdG9raXQuaG9vay53cmFwKFwicmVxdWVzdFwiLCAocmVxdWVzdCwgb3B0aW9ucykgPT4ge1xuICAgIG9jdG9raXQubG9nLmRlYnVnKFwicmVxdWVzdFwiLCBvcHRpb25zKTtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBvY3Rva2l0LnJlcXVlc3QuZW5kcG9pbnQucGFyc2Uob3B0aW9ucyk7XG4gICAgY29uc3QgcGF0aCA9IHJlcXVlc3RPcHRpb25zLnVybC5yZXBsYWNlKG9wdGlvbnMuYmFzZVVybCwgXCJcIik7XG4gICAgcmV0dXJuIHJlcXVlc3Qob3B0aW9ucykudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IHJlc3BvbnNlLmhlYWRlcnNbXCJ4LWdpdGh1Yi1yZXF1ZXN0LWlkXCJdO1xuICAgICAgb2N0b2tpdC5sb2cuaW5mbyhcbiAgICAgICAgYCR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3BhdGh9IC0gJHtyZXNwb25zZS5zdGF0dXN9IHdpdGggaWQgJHtyZXF1ZXN0SWR9IGluICR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYFxuICAgICAgKTtcbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnNbXCJ4LWdpdGh1Yi1yZXF1ZXN0LWlkXCJdIHx8IFwiVU5LTk9XTlwiO1xuICAgICAgb2N0b2tpdC5sb2cuZXJyb3IoXG4gICAgICAgIGAke3JlcXVlc3RPcHRpb25zLm1ldGhvZH0gJHtwYXRofSAtICR7ZXJyb3Iuc3RhdHVzfSB3aXRoIGlkICR7cmVxdWVzdElkfSBpbiAke0RhdGUubm93KCkgLSBzdGFydH1tc2BcbiAgICAgICk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbiAgfSk7XG59XG5yZXF1ZXN0TG9nLlZFUlNJT04gPSBWRVJTSU9OO1xuZXhwb3J0IHtcbiAgcmVxdWVzdExvZ1xufTtcbiIsIi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMTEuMy4xXCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9ub3JtYWxpemUtcGFnaW5hdGVkLWxpc3QtcmVzcG9uc2UuanNcbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhZ2luYXRlZExpc3RSZXNwb25zZShyZXNwb25zZSkge1xuICBpZiAoIXJlc3BvbnNlLmRhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVzcG9uc2UsXG4gICAgICBkYXRhOiBbXVxuICAgIH07XG4gIH1cbiAgY29uc3QgcmVzcG9uc2VOZWVkc05vcm1hbGl6YXRpb24gPSBcInRvdGFsX2NvdW50XCIgaW4gcmVzcG9uc2UuZGF0YSAmJiAhKFwidXJsXCIgaW4gcmVzcG9uc2UuZGF0YSk7XG4gIGlmICghcmVzcG9uc2VOZWVkc05vcm1hbGl6YXRpb24pXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICBjb25zdCBpbmNvbXBsZXRlUmVzdWx0cyA9IHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBjb25zdCByZXBvc2l0b3J5U2VsZWN0aW9uID0gcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgY29uc3QgdG90YWxDb3VudCA9IHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cztcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEucmVwb3NpdG9yeV9zZWxlY3Rpb247XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLnRvdGFsX2NvdW50O1xuICBjb25zdCBuYW1lc3BhY2VLZXkgPSBPYmplY3Qua2V5cyhyZXNwb25zZS5kYXRhKVswXTtcbiAgY29uc3QgZGF0YSA9IHJlc3BvbnNlLmRhdGFbbmFtZXNwYWNlS2V5XTtcbiAgcmVzcG9uc2UuZGF0YSA9IGRhdGE7XG4gIGlmICh0eXBlb2YgaW5jb21wbGV0ZVJlc3VsdHMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cyA9IGluY29tcGxldGVSZXN1bHRzO1xuICB9XG4gIGlmICh0eXBlb2YgcmVwb3NpdG9yeVNlbGVjdGlvbiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJlc3BvbnNlLmRhdGEucmVwb3NpdG9yeV9zZWxlY3Rpb24gPSByZXBvc2l0b3J5U2VsZWN0aW9uO1xuICB9XG4gIHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQgPSB0b3RhbENvdW50O1xuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pdGVyYXRvci5qc1xuZnVuY3Rpb24gaXRlcmF0b3Iob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHR5cGVvZiByb3V0ZSA9PT0gXCJmdW5jdGlvblwiID8gcm91dGUuZW5kcG9pbnQocGFyYW1ldGVycykgOiBvY3Rva2l0LnJlcXVlc3QuZW5kcG9pbnQocm91dGUsIHBhcmFtZXRlcnMpO1xuICBjb25zdCByZXF1ZXN0TWV0aG9kID0gdHlwZW9mIHJvdXRlID09PSBcImZ1bmN0aW9uXCIgPyByb3V0ZSA6IG9jdG9raXQucmVxdWVzdDtcbiAgY29uc3QgbWV0aG9kID0gb3B0aW9ucy5tZXRob2Q7XG4gIGNvbnN0IGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnM7XG4gIGxldCB1cmwgPSBvcHRpb25zLnVybDtcbiAgcmV0dXJuIHtcbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdOiAoKSA9PiAoe1xuICAgICAgYXN5bmMgbmV4dCgpIHtcbiAgICAgICAgaWYgKCF1cmwpXG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdE1ldGhvZCh7IG1ldGhvZCwgdXJsLCBoZWFkZXJzIH0pO1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRSZXNwb25zZSA9IG5vcm1hbGl6ZVBhZ2luYXRlZExpc3RSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgdXJsID0gKChub3JtYWxpemVkUmVzcG9uc2UuaGVhZGVycy5saW5rIHx8IFwiXCIpLm1hdGNoKFxuICAgICAgICAgICAgLzwoW14+XSspPjtcXHMqcmVsPVwibmV4dFwiL1xuICAgICAgICAgICkgfHwgW10pWzFdO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBub3JtYWxpemVkUmVzcG9uc2UgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzICE9PSA0MDkpXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB1cmwgPSBcIlwiO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgICAgIGRhdGE6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH07XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9wYWdpbmF0ZS5qc1xuZnVuY3Rpb24gcGFnaW5hdGUob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMsIG1hcEZuKSB7XG4gIGlmICh0eXBlb2YgcGFyYW1ldGVycyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbWFwRm4gPSBwYXJhbWV0ZXJzO1xuICAgIHBhcmFtZXRlcnMgPSB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIGdhdGhlcihcbiAgICBvY3Rva2l0LFxuICAgIFtdLFxuICAgIGl0ZXJhdG9yKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSxcbiAgICBtYXBGblxuICApO1xufVxuZnVuY3Rpb24gZ2F0aGVyKG9jdG9raXQsIHJlc3VsdHMsIGl0ZXJhdG9yMiwgbWFwRm4pIHtcbiAgcmV0dXJuIGl0ZXJhdG9yMi5uZXh0KCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgbGV0IGVhcmx5RXhpdCA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBlYXJseUV4aXQgPSB0cnVlO1xuICAgIH1cbiAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQoXG4gICAgICBtYXBGbiA/IG1hcEZuKHJlc3VsdC52YWx1ZSwgZG9uZSkgOiByZXN1bHQudmFsdWUuZGF0YVxuICAgICk7XG4gICAgaWYgKGVhcmx5RXhpdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHJldHVybiBnYXRoZXIob2N0b2tpdCwgcmVzdWx0cywgaXRlcmF0b3IyLCBtYXBGbik7XG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvY29tcG9zZS1wYWdpbmF0ZS5qc1xudmFyIGNvbXBvc2VQYWdpbmF0ZVJlc3QgPSBPYmplY3QuYXNzaWduKHBhZ2luYXRlLCB7XG4gIGl0ZXJhdG9yXG59KTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2dlbmVyYXRlZC9wYWdpbmF0aW5nLWVuZHBvaW50cy5qc1xudmFyIHBhZ2luYXRpbmdFbmRwb2ludHMgPSBbXG4gIFwiR0VUIC9hZHZpc29yaWVzXCIsXG4gIFwiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzXCIsXG4gIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uLXJlcXVlc3RzXCIsXG4gIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uc1wiLFxuICBcIkdFVCAvYXNzaWdubWVudHMve2Fzc2lnbm1lbnRfaWR9L2FjY2VwdGVkX2Fzc2lnbm1lbnRzXCIsXG4gIFwiR0VUIC9jbGFzc3Jvb21zXCIsXG4gIFwiR0VUIC9jbGFzc3Jvb21zL3tjbGFzc3Jvb21faWR9L2Fzc2lnbm1lbnRzXCIsXG4gIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29waWxvdC91c2FnZVwiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvZXZlbnRzXCIsXG4gIFwiR0VUIC9naXN0c1wiLFxuICBcIkdFVCAvZ2lzdHMvcHVibGljXCIsXG4gIFwiR0VUIC9naXN0cy9zdGFycmVkXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIixcbiAgXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21taXRzXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIixcbiAgXCJHRVQgL2luc3RhbGxhdGlvbi9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL2lzc3Vlc1wiLFxuICBcIkdFVCAvbGljZW5zZXNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIixcbiAgXCJHRVQgL25ldHdvcmtzL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiLFxuICBcIkdFVCAvbm90aWZpY2F0aW9uc1wiLFxuICBcIkdFVCAvb3JnYW5pemF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWF0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L3VzYWdlXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZXZlbnRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2ZhaWxlZF9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ob29rc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfS90ZWFtc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH0vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS91c2Vyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0cy97cGF0X3JlcXVlc3RfaWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3JlcG9zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vc2VjdXJpdHktYWR2aXNvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtL3t0ZWFtX3NsdWd9L2NvcGlsb3QvdXNhZ2VcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIixcbiAgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIixcbiAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi1zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi12YXJpYWJsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9qb2JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vam9ic1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aXZpdHlcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vYW5ub3RhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L2NoZWNrLXJ1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvZGV2Y29udGFpbmVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L3B1bGxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXJ1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udHJpYnV0b3JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL2FwcHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vZXZlbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn0vbGFiZWxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWl0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9maWxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2xvY2F0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhcmdhemVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaWJlcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RlYW1zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIixcbiAgXCJHRVQgL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvc2VhcmNoL2NvZGVcIixcbiAgXCJHRVQgL3NlYXJjaC9jb21taXRzXCIsXG4gIFwiR0VUIC9zZWFyY2gvaXNzdWVzXCIsXG4gIFwiR0VUIC9zZWFyY2gvbGFiZWxzXCIsXG4gIFwiR0VUIC9zZWFyY2gvcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9zZWFyY2gvdG9waWNzXCIsXG4gIFwiR0VUIC9zZWFyY2gvdXNlcnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L21lbWJlcnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3JlcG9zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vdGVhbXNcIixcbiAgXCJHRVQgL3VzZXIvYmxvY2tzXCIsXG4gIFwiR0VUIC91c2VyL2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzXCIsXG4gIFwiR0VUIC91c2VyL2VtYWlsc1wiLFxuICBcIkdFVCAvdXNlci9mb2xsb3dlcnNcIixcbiAgXCJHRVQgL3VzZXIvZm9sbG93aW5nXCIsXG4gIFwiR0VUIC91c2VyL2dwZ19rZXlzXCIsXG4gIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3VzZXIvaXNzdWVzXCIsXG4gIFwiR0VUIC91c2VyL2tleXNcIixcbiAgXCJHRVQgL3VzZXIvbWFya2V0cGxhY2VfcHVyY2hhc2VzXCIsXG4gIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlcy9zdHViYmVkXCIsXG4gIFwiR0VUIC91c2VyL21lbWJlcnNoaXBzL29yZ3NcIixcbiAgXCJHRVQgL3VzZXIvbWlncmF0aW9uc1wiLFxuICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvdXNlci9vcmdzXCIsXG4gIFwiR0VUIC91c2VyL3BhY2thZ2VzXCIsXG4gIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gIFwiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIixcbiAgXCJHRVQgL3VzZXIvcmVwb3NcIixcbiAgXCJHRVQgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvdXNlci9zb2NpYWxfYWNjb3VudHNcIixcbiAgXCJHRVQgL3VzZXIvc3NoX3NpZ25pbmdfa2V5c1wiLFxuICBcIkdFVCAvdXNlci9zdGFycmVkXCIsXG4gIFwiR0VUIC91c2VyL3N1YnNjcmlwdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvdGVhbXNcIixcbiAgXCJHRVQgL3VzZXJzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHMvb3Jncy97b3JnfVwiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHMvcHVibGljXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2Vyc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmdcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ2lzdHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ3BnX2tleXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0va2V5c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9vcmdzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3Byb2plY3RzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHMvcHVibGljXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlcG9zXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NvY2lhbF9hY2NvdW50c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zc2hfc2lnbmluZ19rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N0YXJyZWRcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3Vic2NyaXB0aW9uc1wiXG5dO1xuXG4vLyBwa2cvZGlzdC1zcmMvcGFnaW5hdGluZy1lbmRwb2ludHMuanNcbmZ1bmN0aW9uIGlzUGFnaW5hdGluZ0VuZHBvaW50KGFyZykge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBwYWdpbmF0aW5nRW5kcG9pbnRzLmluY2x1ZGVzKGFyZyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xuZnVuY3Rpb24gcGFnaW5hdGVSZXN0KG9jdG9raXQpIHtcbiAgcmV0dXJuIHtcbiAgICBwYWdpbmF0ZTogT2JqZWN0LmFzc2lnbihwYWdpbmF0ZS5iaW5kKG51bGwsIG9jdG9raXQpLCB7XG4gICAgICBpdGVyYXRvcjogaXRlcmF0b3IuYmluZChudWxsLCBvY3Rva2l0KVxuICAgIH0pXG4gIH07XG59XG5wYWdpbmF0ZVJlc3QuVkVSU0lPTiA9IFZFUlNJT047XG5leHBvcnQge1xuICBjb21wb3NlUGFnaW5hdGVSZXN0LFxuICBpc1BhZ2luYXRpbmdFbmRwb2ludCxcbiAgcGFnaW5hdGVSZXN0LFxuICBwYWdpbmF0aW5nRW5kcG9pbnRzXG59O1xuIiwiY29uc3QgVkVSU0lPTiA9IFwiMTMuMi4yXCI7XG5leHBvcnQge1xuICBWRVJTSU9OXG59O1xuIiwiY29uc3QgRW5kcG9pbnRzID0ge1xuICBhY3Rpb25zOiB7XG4gICAgYWRkQ3VzdG9tTGFiZWxzVG9TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBhZGRDdXN0b21MYWJlbHNUb1NlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgYXBwcm92ZVdvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcHByb3ZlXCJcbiAgICBdLFxuICAgIGNhbmNlbFdvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9jYW5jZWxcIlxuICAgIF0sXG4gICAgY3JlYXRlRW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZUVudmlyb25tZW50U2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVPcmdTZWNyZXQ6IFtcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVPcmdWYXJpYWJsZTogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9yZWdpc3RyYXRpb24tdG9rZW5cIlxuICAgIF0sXG4gICAgY3JlYXRlUmVnaXN0cmF0aW9uVG9rZW5Gb3JSZXBvOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9yZWdpc3RyYXRpb24tdG9rZW5cIlxuICAgIF0sXG4gICAgY3JlYXRlUmVtb3ZlVG9rZW5Gb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3JlbW92ZS10b2tlblwiXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3JlbW92ZS10b2tlblwiXG4gICAgXSxcbiAgICBjcmVhdGVSZXBvVmFyaWFibGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvdmFyaWFibGVzXCJdLFxuICAgIGNyZWF0ZVdvcmtmbG93RGlzcGF0Y2g6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9kaXNwYXRjaGVzXCJcbiAgICBdLFxuICAgIGRlbGV0ZUFjdGlvbnNDYWNoZUJ5SWQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlcy97Y2FjaGVfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUFjdGlvbnNDYWNoZUJ5S2V5OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXN7P2tleSxyZWZ9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUFydGlmYWN0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVFbnZpcm9ubWVudFNlY3JldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlcy97bmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlT3JnVmFyaWFibGU6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVJlcG9WYXJpYWJsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVTZWxmSG9zdGVkUnVubmVyRnJvbU9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVNlbGZIb3N0ZWRSdW5uZXJGcm9tUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVXb3JrZmxvd1J1bjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH1cIl0sXG4gICAgZGVsZXRlV29ya2Zsb3dSdW5Mb2dzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2xvZ3NcIlxuICAgIF0sXG4gICAgZGlzYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBkaXNhYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2Rpc2FibGVcIlxuICAgIF0sXG4gICAgZG93bmxvYWRBcnRpZmFjdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH0ve2FyY2hpdmVfZm9ybWF0fVwiXG4gICAgXSxcbiAgICBkb3dubG9hZEpvYkxvZ3NGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfS9sb2dzXCJcbiAgICBdLFxuICAgIGRvd25sb2FkV29ya2Zsb3dSdW5BdHRlbXB0TG9nczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2xvZ3NcIlxuICAgIF0sXG4gICAgZG93bmxvYWRXb3JrZmxvd1J1bkxvZ3M6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vbG9nc1wiXG4gICAgXSxcbiAgICBlbmFibGVTZWxlY3RlZFJlcG9zaXRvcnlHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgZW5hYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2VuYWJsZVwiXG4gICAgXSxcbiAgICBmb3JjZUNhbmNlbFdvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9mb3JjZS1jYW5jZWxcIlxuICAgIF0sXG4gICAgZ2VuZXJhdGVSdW5uZXJKaXRjb25maWdGb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCJcbiAgICBdLFxuICAgIGdlbmVyYXRlUnVubmVySml0Y29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCJcbiAgICBdLFxuICAgIGdldEFjdGlvbnNDYWNoZUxpc3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXNcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2U6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZS91c2FnZVwiXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVVc2FnZUJ5UmVwb0Zvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZS1ieS1yZXBvc2l0b3J5XCJcbiAgICBdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZVwiXSxcbiAgICBnZXRBbGxvd2VkQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJcbiAgICBdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXG4gICAgXSxcbiAgICBnZXRBcnRpZmFjdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0cy97YXJ0aWZhY3RfaWR9XCJdLFxuICAgIGdldEN1c3RvbU9pZGNTdWJDbGFpbUZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIlxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRQdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMvcHVibGljLWtleVwiXG4gICAgXSxcbiAgICBnZXRFbnZpcm9ubWVudFNlY3JldDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGdldEVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlcy97bmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCJcbiAgICBdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCJcbiAgICBdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiXG4gICAgXSxcbiAgICBnZXRKb2JGb3JXb3JrZmxvd1J1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0T3JnVmFyaWFibGU6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZ2V0UGVuZGluZ0RlcGxveW1lbnRzRm9yUnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIlxuICAgIF0sXG4gICAgZ2V0UmVwb1Blcm1pc3Npb25zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImFjdGlvbnNcIiwgXCJnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5XCJdIH1cbiAgICBdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXBvVmFyaWFibGU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFJldmlld3NGb3JSdW46IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92YWxzXCJcbiAgICBdLFxuICAgIGdldFNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIl0sXG4gICAgZ2V0U2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIlxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3c6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd0FjY2Vzc1RvUmVwb3NpdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvYWNjZXNzXCJcbiAgICBdLFxuICAgIGdldFdvcmtmbG93UnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd1J1bkF0dGVtcHQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvd1J1blVzYWdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3RpbWluZ1wiXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvd1VzYWdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS90aW1pbmdcIlxuICAgIF0sXG4gICAgbGlzdEFydGlmYWN0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIl0sXG4gICAgbGlzdEVudmlyb25tZW50U2VjcmV0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0c1wiXG4gICAgXSxcbiAgICBsaXN0RW52aXJvbm1lbnRWYXJpYWJsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiXG4gICAgXSxcbiAgICBsaXN0Sm9ic0ZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2pvYnNcIlxuICAgIF0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bkF0dGVtcHQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9qb2JzXCJcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHNcIl0sXG4gICAgbGlzdE9yZ1ZhcmlhYmxlczogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzXCJdLFxuICAgIGxpc3RSZXBvT3JnYW5pemF0aW9uU2VjcmV0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb3JnYW5pemF0aW9uLXNlY3JldHNcIlxuICAgIF0sXG4gICAgbGlzdFJlcG9Pcmdhbml6YXRpb25WYXJpYWJsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi12YXJpYWJsZXNcIlxuICAgIF0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1ZhcmlhYmxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBsaXN0UmVwb1dvcmtmbG93czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93c1wiXSxcbiAgICBsaXN0UnVubmVyQXBwbGljYXRpb25zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL2Rvd25sb2Fkc1wiXSxcbiAgICBsaXN0UnVubmVyQXBwbGljYXRpb25zRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIlxuICAgIF0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zaXRvcmllc0VuYWJsZWRHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0U2VsZkhvc3RlZFJ1bm5lcnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnNcIl0sXG4gICAgbGlzdFNlbGZIb3N0ZWRSdW5uZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnNcIl0sXG4gICAgbGlzdFdvcmtmbG93UnVuQXJ0aWZhY3RzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2FydGlmYWN0c1wiXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCJcbiAgICBdLFxuICAgIGxpc3RXb3JrZmxvd1J1bnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc1wiXSxcbiAgICByZVJ1bkpvYkZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfS9yZXJ1blwiXG4gICAgXSxcbiAgICByZVJ1bldvcmtmbG93OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcmVydW5cIl0sXG4gICAgcmVSdW5Xb3JrZmxvd0ZhaWxlZEpvYnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3JlcnVuLWZhaWxlZC1qb2JzXCJcbiAgICBdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVscy97bmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIHJlbW92ZVNlbGVjdGVkUmVwb0Zyb21PcmdWYXJpYWJsZTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgcmV2aWV3Q3VzdG9tR2F0ZXNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlXCJcbiAgICBdLFxuICAgIHJldmlld1BlbmRpbmdEZXBsb3ltZW50c0ZvclJ1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcGVuZGluZ19kZXBsb3ltZW50c1wiXG4gICAgXSxcbiAgICBzZXRBbGxvd2VkQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCJcbiAgICBdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiXG4gICAgXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCJcbiAgICBdLFxuICAgIHNldEN1c3RvbUxhYmVsc0ZvclNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBzZXRDdXN0b21PaWRjU3ViQ2xhaW1Gb3JSZXBvOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCJcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnNcIlxuICAgIF0sXG4gICAgc2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnNcIlxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zaXRvcmllc0VuYWJsZWRHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBzZXRXb3JrZmxvd0FjY2Vzc1RvUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvYWNjZXNzXCJcbiAgICBdLFxuICAgIHVwZGF0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiXG4gICAgXSxcbiAgICB1cGRhdGVPcmdWYXJpYWJsZTogW1wiUEFUQ0ggL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIHVwZGF0ZVJlcG9WYXJpYWJsZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJcbiAgICBdXG4gIH0sXG4gIGFjdGl2aXR5OiB7XG4gICAgY2hlY2tSZXBvSXNTdGFycmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgZGVsZXRlUmVwb1N1YnNjcmlwdGlvbjogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgZGVsZXRlVGhyZWFkU3Vic2NyaXB0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiXG4gICAgXSxcbiAgICBnZXRGZWVkczogW1wiR0VUIC9mZWVkc1wiXSxcbiAgICBnZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBnZXRUaHJlYWQ6IFtcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIGdldFRocmVhZFN1YnNjcmlwdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiXG4gICAgXSxcbiAgICBsaXN0RXZlbnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIl0sXG4gICAgbGlzdE5vdGlmaWNhdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC9ub3RpZmljYXRpb25zXCJdLFxuICAgIGxpc3RPcmdFdmVudHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIlxuICAgIF0sXG4gICAgbGlzdFB1YmxpY0V2ZW50czogW1wiR0VUIC9ldmVudHNcIl0sXG4gICAgbGlzdFB1YmxpY0V2ZW50c0ZvclJlcG9OZXR3b3JrOiBbXCJHRVQgL25ldHdvcmtzL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9wdWJsaWNcIl0sXG4gICAgbGlzdFB1YmxpY09yZ0V2ZW50czogW1wiR0VUIC9vcmdzL3tvcmd9L2V2ZW50c1wiXSxcbiAgICBsaXN0UmVjZWl2ZWRFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZFB1YmxpY0V2ZW50c0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50cy9wdWJsaWNcIlxuICAgIF0sXG4gICAgbGlzdFJlcG9FdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZXBvTm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0UmVwb3NTdGFycmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N0YXJyZWRcIl0sXG4gICAgbGlzdFJlcG9zU3RhcnJlZEJ5VXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N0YXJyZWRcIl0sXG4gICAgbGlzdFJlcG9zV2F0Y2hlZEJ5VXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N1YnNjcmlwdGlvbnNcIl0sXG4gICAgbGlzdFN0YXJnYXplcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIl0sXG4gICAgbGlzdFdhdGNoZWRSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3Vic2NyaXB0aW9uc1wiXSxcbiAgICBsaXN0V2F0Y2hlcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCJdLFxuICAgIG1hcmtOb3RpZmljYXRpb25zQXNSZWFkOiBbXCJQVVQgL25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbWFya1JlcG9Ob3RpZmljYXRpb25zQXNSZWFkOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbWFya1RocmVhZEFzRG9uZTogW1wiREVMRVRFIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgbWFya1RocmVhZEFzUmVhZDogW1wiUEFUQ0ggL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfVwiXSxcbiAgICBzZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBzZXRUaHJlYWRTdWJzY3JpcHRpb246IFtcbiAgICAgIFwiUFVUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCJcbiAgICBdLFxuICAgIHN0YXJSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9zdGFycmVkL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIHVuc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl1cbiAgfSxcbiAgYXBwczoge1xuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcImFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgY2hlY2tUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGNyZWF0ZUZyb21NYW5pZmVzdDogW1wiUE9TVCAvYXBwLW1hbmlmZXN0cy97Y29kZX0vY29udmVyc2lvbnNcIl0sXG4gICAgY3JlYXRlSW5zdGFsbGF0aW9uQWNjZXNzVG9rZW46IFtcbiAgICAgIFwiUE9TVCAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vYWNjZXNzX3Rva2Vuc1wiXG4gICAgXSxcbiAgICBkZWxldGVBdXRob3JpemF0aW9uOiBbXCJERUxFVEUgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS9ncmFudFwiXSxcbiAgICBkZWxldGVJbnN0YWxsYXRpb246IFtcIkRFTEVURSAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlVG9rZW46IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGdldEF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvYXBwXCJdLFxuICAgIGdldEJ5U2x1ZzogW1wiR0VUIC9hcHBzL3thcHBfc2x1Z31cIl0sXG4gICAgZ2V0SW5zdGFsbGF0aW9uOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9XCJdLFxuICAgIGdldE9yZ0luc3RhbGxhdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRSZXBvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvYWNjb3VudHMve2FjY291bnRfaWR9XCJcbiAgICBdLFxuICAgIGdldFN1YnNjcmlwdGlvblBsYW5Gb3JBY2NvdW50U3R1YmJlZDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9hY2NvdW50cy97YWNjb3VudF9pZH1cIlxuICAgIF0sXG4gICAgZ2V0VXNlckluc3RhbGxhdGlvbjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yQXBwOiBbXCJHRVQgL2FwcC9ob29rL2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCJdLFxuICAgIGxpc3RBY2NvdW50c0ZvclBsYW46IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhblN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCJcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25SZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uUmVxdWVzdHNGb3JBdXRoZW50aWNhdGVkQXBwOiBbXG4gICAgICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbi1yZXF1ZXN0c1wiXG4gICAgXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uczogW1wiR0VUIC9hcHAvaW5zdGFsbGF0aW9uc1wiXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaW5zdGFsbGF0aW9uc1wiXSxcbiAgICBsaXN0UGxhbnM6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9wbGFuc1wiXSxcbiAgICBsaXN0UGxhbnNTdHViYmVkOiBbXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFuc1wiXSxcbiAgICBsaXN0UmVwb3NBY2Nlc3NpYmxlVG9JbnN0YWxsYXRpb246IFtcIkdFVCAvaW5zdGFsbGF0aW9uL3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0U3Vic2NyaXB0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWFya2V0cGxhY2VfcHVyY2hhc2VzXCJdLFxuICAgIGxpc3RTdWJzY3JpcHRpb25zRm9yQXV0aGVudGljYXRlZFVzZXJTdHViYmVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJhcHBzXCIsIFwicmVtb3ZlUmVwb0Zyb21JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICByZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgcmVzZXRUb2tlbjogW1wiUEFUQ0ggL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICByZXZva2VJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1wiREVMRVRFIC9pbnN0YWxsYXRpb24vdG9rZW5cIl0sXG4gICAgc2NvcGVUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuL3Njb3BlZFwiXSxcbiAgICBzdXNwZW5kSW5zdGFsbGF0aW9uOiBbXCJQVVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXSxcbiAgICB1bnN1c3BlbmRJbnN0YWxsYXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9zdXNwZW5kZWRcIlxuICAgIF0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0ZvckFwcDogW1wiUEFUQ0ggL2FwcC9ob29rL2NvbmZpZ1wiXVxuICB9LFxuICBiaWxsaW5nOiB7XG4gICAgZ2V0R2l0aHViQWN0aW9uc0JpbGxpbmdPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL2FjdGlvbnNcIl0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0JpbGxpbmdVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zZXR0aW5ncy9iaWxsaW5nL2FjdGlvbnNcIlxuICAgIF0sXG4gICAgZ2V0R2l0aHViUGFja2FnZXNCaWxsaW5nT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvYmlsbGluZy9wYWNrYWdlc1wiXSxcbiAgICBnZXRHaXRodWJQYWNrYWdlc0JpbGxpbmdVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zZXR0aW5ncy9iaWxsaW5nL3BhY2thZ2VzXCJcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3NoYXJlZC1zdG9yYWdlXCJcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9zaGFyZWQtc3RvcmFnZVwiXG4gICAgXVxuICB9LFxuICBjaGVja3M6IHtcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnNcIl0sXG4gICAgY3JlYXRlU3VpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXSxcbiAgICBnZXRTdWl0ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfVwiXSxcbiAgICBsaXN0QW5ub3RhdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCJcbiAgICBdLFxuICAgIGxpc3RGb3JSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1ydW5zXCJdLFxuICAgIGxpc3RGb3JTdWl0ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L2NoZWNrLXJ1bnNcIlxuICAgIF0sXG4gICAgbGlzdFN1aXRlc0ZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXN1aXRlc1wiXSxcbiAgICByZXJlcXVlc3RSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfS9yZXJlcXVlc3RcIlxuICAgIF0sXG4gICAgcmVyZXF1ZXN0U3VpdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vcmVyZXF1ZXN0XCJcbiAgICBdLFxuICAgIHNldFN1aXRlc1ByZWZlcmVuY2VzOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMvcHJlZmVyZW5jZXNcIlxuICAgIF0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXVxuICB9LFxuICBjb2RlU2Nhbm5pbmc6IHtcbiAgICBkZWxldGVBbmFseXNpczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXMve2FuYWx5c2lzX2lkfXs/Y29uZmlybV9kZWxldGV9XCJcbiAgICBdLFxuICAgIGdldEFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkUGFyYW1ldGVyczogeyBhbGVydF9pZDogXCJhbGVydF9udW1iZXJcIiB9IH1cbiAgICBdLFxuICAgIGdldEFuYWx5c2lzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlcy97YW5hbHlzaXNfaWR9XCJcbiAgICBdLFxuICAgIGdldENvZGVxbERhdGFiYXNlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvZGF0YWJhc2VzL3tsYW5ndWFnZX1cIlxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdFNldHVwOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvZGVmYXVsdC1zZXR1cFwiXSxcbiAgICBnZXRTYXJpZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmcy97c2FyaWZfaWR9XCJdLFxuICAgIGxpc3RBbGVydEluc3RhbmNlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0luc3RhbmNlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImNvZGVTY2FubmluZ1wiLCBcImxpc3RBbGVydEluc3RhbmNlc1wiXSB9XG4gICAgXSxcbiAgICBsaXN0Q29kZXFsRGF0YWJhc2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvZGF0YWJhc2VzXCJcbiAgICBdLFxuICAgIGxpc3RSZWNlbnRBbmFseXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzXCJdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICB1cGRhdGVEZWZhdWx0U2V0dXA6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvZGVmYXVsdC1zZXR1cFwiXG4gICAgXSxcbiAgICB1cGxvYWRTYXJpZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9zYXJpZnNcIl1cbiAgfSxcbiAgY29kZXNPZkNvbmR1Y3Q6IHtcbiAgICBnZXRBbGxDb2Rlc09mQ29uZHVjdDogW1wiR0VUIC9jb2Rlc19vZl9jb25kdWN0XCJdLFxuICAgIGdldENvbmR1Y3RDb2RlOiBbXCJHRVQgL2NvZGVzX29mX2NvbmR1Y3Qve2tleX1cIl1cbiAgfSxcbiAgY29kZXNwYWNlczoge1xuICAgIGFkZFJlcG9zaXRvcnlGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiXG4gICAgXSxcbiAgICBjaGVja1Blcm1pc3Npb25zRm9yRGV2Y29udGFpbmVyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9wZXJtaXNzaW9uc19jaGVja1wiXG4gICAgXSxcbiAgICBjb2Rlc3BhY2VNYWNoaW5lc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vbWFjaGluZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlV2l0aFByRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb2Rlc3BhY2VzXCJcbiAgICBdLFxuICAgIGNyZWF0ZVdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiXG4gICAgXSxcbiAgICBkZWxldGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXSxcbiAgICBkZWxldGVGcm9tT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgZXhwb3J0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vZXhwb3J0c1wiXG4gICAgXSxcbiAgICBnZXRDb2Rlc3BhY2VzRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiXG4gICAgXSxcbiAgICBnZXRFeHBvcnREZXRhaWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzL3tleHBvcnRfaWR9XCJcbiAgICBdLFxuICAgIGdldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldE9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldFB1YmxpY0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMvcHVibGljLWtleVwiXG4gICAgXSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIlxuICAgIF0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJcbiAgICBdLFxuICAgIGdldFNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBsaXN0RGV2Y29udGFpbmVyc0luUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCJcbiAgICBdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXNcIl0sXG4gICAgbGlzdEluT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZFBhcmFtZXRlcnM6IHsgb3JnX2lkOiBcIm9yZ1wiIH0gfVxuICAgIF0sXG4gICAgbGlzdEluUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIGxpc3RTZWNyZXRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHNcIl0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBwcmVGbGlnaHRXaXRoUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9uZXdcIlxuICAgIF0sXG4gICAgcHVibGlzaEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3B1Ymxpc2hcIlxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIHJlbW92ZVNlbGVjdGVkUmVwb0Zyb21PcmdTZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgcmVwb01hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL21hY2hpbmVzXCJcbiAgICBdLFxuICAgIHNldFJlcG9zaXRvcmllc0ZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHN0YXJ0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0YXJ0XCJdLFxuICAgIHN0b3BGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiXSxcbiAgICBzdG9wSW5Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0b3BcIlxuICAgIF0sXG4gICAgdXBkYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBBVENIIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXVxuICB9LFxuICBjb3BpbG90OiB7XG4gICAgYWRkQ29waWxvdFNlYXRzRm9yVGVhbXM6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdGVhbXNcIlxuICAgIF0sXG4gICAgYWRkQ29waWxvdFNlYXRzRm9yVXNlcnM6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIlxuICAgIF0sXG4gICAgY2FuY2VsQ29waWxvdFNlYXRBc3NpZ25tZW50Rm9yVGVhbXM6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF90ZWFtc1wiXG4gICAgXSxcbiAgICBjYW5jZWxDb3BpbG90U2VhdEFzc2lnbm1lbnRGb3JVc2VyczogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlbGVjdGVkX3VzZXJzXCJcbiAgICBdLFxuICAgIGdldENvcGlsb3RPcmdhbml6YXRpb25EZXRhaWxzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nXCJdLFxuICAgIGdldENvcGlsb3RTZWF0RGV0YWlsc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb3BpbG90XCJcbiAgICBdLFxuICAgIGxpc3RDb3BpbG90U2VhdHM6IFtcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VhdHNcIl0sXG4gICAgdXNhZ2VNZXRyaWNzRm9yRW50ZXJwcmlzZTogW1wiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29waWxvdC91c2FnZVwiXSxcbiAgICB1c2FnZU1ldHJpY3NGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L3VzYWdlXCJdLFxuICAgIHVzYWdlTWV0cmljc0ZvclRlYW06IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtL3t0ZWFtX3NsdWd9L2NvcGlsb3QvdXNhZ2VcIl1cbiAgfSxcbiAgZGVwZW5kYWJvdDoge1xuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCJcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBkZWxldGVPcmdTZWNyZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBkZWxldGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHMve2FsZXJ0X251bWJlcn1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy9wdWJsaWMta2V5XCJcbiAgICBdLFxuICAgIGdldFJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9kZXBlbmRhYm90L2FsZXJ0c1wiXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHJlbW92ZVNlbGVjdGVkUmVwb0Zyb21PcmdTZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIlxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCJcbiAgICBdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXG4gICAgXVxuICB9LFxuICBkZXBlbmRlbmN5R3JhcGg6IHtcbiAgICBjcmVhdGVSZXBvc2l0b3J5U25hcHNob3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9zbmFwc2hvdHNcIlxuICAgIF0sXG4gICAgZGlmZlJhbmdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9jb21wYXJlL3tiYXNlaGVhZH1cIlxuICAgIF0sXG4gICAgZXhwb3J0U2JvbTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRlbmN5LWdyYXBoL3Nib21cIl1cbiAgfSxcbiAgZW1vamlzOiB7IGdldDogW1wiR0VUIC9lbW9qaXNcIl0gfSxcbiAgZ2lzdHM6IHtcbiAgICBjaGVja0lzU3RhcnJlZDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL2dpc3RzXCJdLFxuICAgIGNyZWF0ZUNvbW1lbnQ6IFtcIlBPU1QgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1lbnQ6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBmb3JrOiBbXCJQT1NUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgZ2V0OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICBnZXRDb21tZW50OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZ2V0UmV2aXNpb246IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L3tzaGF9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvZ2lzdHNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9naXN0cy9wdWJsaWNcIl0sXG4gICAgbGlzdFN0YXJyZWQ6IFtcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiXSxcbiAgICBzdGFyOiBbXCJQVVQgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIHVuc3RhcjogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgdXBkYXRlQ29tbWVudDogW1wiUEFUQ0ggL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl1cbiAgfSxcbiAgZ2l0OiB7XG4gICAgY3JlYXRlQmxvYjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2Jsb2JzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHNcIl0sXG4gICAgY3JlYXRlUmVmOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmc1wiXSxcbiAgICBjcmVhdGVUYWc6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90YWdzXCJdLFxuICAgIGNyZWF0ZVRyZWU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90cmVlc1wiXSxcbiAgICBkZWxldGVSZWY6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnMve3JlZn1cIl0sXG4gICAgZ2V0QmxvYjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvYmxvYnMve2ZpbGVfc2hhfVwiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHMve2NvbW1pdF9zaGF9XCJdLFxuICAgIGdldFJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmL3tyZWZ9XCJdLFxuICAgIGdldFRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdGFncy97dGFnX3NoYX1cIl0sXG4gICAgZ2V0VHJlZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdHJlZXMve3RyZWVfc2hhfVwiXSxcbiAgICBsaXN0TWF0Y2hpbmdSZWZzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9tYXRjaGluZy1yZWZzL3tyZWZ9XCJdLFxuICAgIHVwZGF0ZVJlZjogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzL3tyZWZ9XCJdXG4gIH0sXG4gIGdpdGlnbm9yZToge1xuICAgIGdldEFsbFRlbXBsYXRlczogW1wiR0VUIC9naXRpZ25vcmUvdGVtcGxhdGVzXCJdLFxuICAgIGdldFRlbXBsYXRlOiBbXCJHRVQgL2dpdGlnbm9yZS90ZW1wbGF0ZXMve25hbWV9XCJdXG4gIH0sXG4gIGludGVyYWN0aW9uczoge1xuICAgIGdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcbiAgICAgIFwiR0VUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcImdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0Zvck9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JSZXBvOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJcbiAgICBdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwicmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvclJlcG86IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJQVVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwic2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF1cbiAgfSxcbiAgaXNzdWVzOiB7XG4gICAgYWRkQXNzaWduZWVzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIlxuICAgIF0sXG4gICAgYWRkTGFiZWxzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIGNoZWNrVXNlckNhbkJlQXNzaWduZWQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXNzaWduZWVzL3thc3NpZ25lZX1cIl0sXG4gICAgY2hlY2tVc2VyQ2FuQmVBc3NpZ25lZFRvSXNzdWU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vYXNzaWduZWVzL3thc3NpZ25lZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIl0sXG4gICAgY3JlYXRlQ29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgY3JlYXRlTGFiZWw6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBjcmVhdGVNaWxlc3RvbmU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgZGVsZXRlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlTGFiZWw6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBkZWxldGVNaWxlc3RvbmU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9XCJdLFxuICAgIGdldENvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRFdmVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzL3tldmVudF9pZH1cIl0sXG4gICAgZ2V0TGFiZWw6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBnZXRNaWxlc3RvbmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9pc3N1ZXNcIl0sXG4gICAgbGlzdEFzc2lnbmVlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIl0sXG4gICAgbGlzdEV2ZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yVGltZWxpbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIlxuICAgIF0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JNaWxlc3RvbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfS9sYWJlbHNcIlxuICAgIF0sXG4gICAgbGlzdExhYmVsc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzXCJdLFxuICAgIGxpc3RMYWJlbHNPbklzc3VlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXG4gICAgXSxcbiAgICBsaXN0TWlsZXN0b25lczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCJdLFxuICAgIGxvY2s6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xvY2tcIl0sXG4gICAgcmVtb3ZlQWxsTGFiZWxzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXG4gICAgXSxcbiAgICByZW1vdmVBc3NpZ25lZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vYXNzaWduZWVzXCJcbiAgICBdLFxuICAgIHJlbW92ZUxhYmVsOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVscy97bmFtZX1cIlxuICAgIF0sXG4gICAgc2V0TGFiZWxzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIl0sXG4gICAgdW5sb2NrOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sb2NrXCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVDb21tZW50OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVMYWJlbDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgdXBkYXRlTWlsZXN0b25lOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXG4gICAgXVxuICB9LFxuICBsaWNlbnNlczoge1xuICAgIGdldDogW1wiR0VUIC9saWNlbnNlcy97bGljZW5zZX1cIl0sXG4gICAgZ2V0QWxsQ29tbW9ubHlVc2VkOiBbXCJHRVQgL2xpY2Vuc2VzXCJdLFxuICAgIGdldEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGljZW5zZVwiXVxuICB9LFxuICBtYXJrZG93bjoge1xuICAgIHJlbmRlcjogW1wiUE9TVCAvbWFya2Rvd25cIl0sXG4gICAgcmVuZGVyUmF3OiBbXG4gICAgICBcIlBPU1QgL21hcmtkb3duL3Jhd1wiLFxuICAgICAgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFwiIH0gfVxuICAgIF1cbiAgfSxcbiAgbWV0YToge1xuICAgIGdldDogW1wiR0VUIC9tZXRhXCJdLFxuICAgIGdldEFsbFZlcnNpb25zOiBbXCJHRVQgL3ZlcnNpb25zXCJdLFxuICAgIGdldE9jdG9jYXQ6IFtcIkdFVCAvb2N0b2NhdFwiXSxcbiAgICBnZXRaZW46IFtcIkdFVCAvemVuXCJdLFxuICAgIHJvb3Q6IFtcIkdFVCAvXCJdXG4gIH0sXG4gIG1pZ3JhdGlvbnM6IHtcbiAgICBkZWxldGVBcmNoaXZlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiXG4gICAgXSxcbiAgICBkZWxldGVBcmNoaXZlRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIlxuICAgIF0sXG4gICAgZG93bmxvYWRBcmNoaXZlRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIlxuICAgIF0sXG4gICAgZ2V0QXJjaGl2ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIlxuICAgIF0sXG4gICAgZ2V0U3RhdHVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9XCJdLFxuICAgIGdldFN0YXR1c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH1cIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWlncmF0aW9uc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiXSxcbiAgICBsaXN0UmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgbGlzdFJlcG9zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFJlcG9zRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJtaWdyYXRpb25zXCIsIFwibGlzdFJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgc3RhcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9taWdyYXRpb25zXCJdLFxuICAgIHN0YXJ0Rm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnNcIl0sXG4gICAgdW5sb2NrUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zL3tyZXBvX25hbWV9L2xvY2tcIlxuICAgIF0sXG4gICAgdW5sb2NrUmVwb0Zvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvcy97cmVwb19uYW1lfS9sb2NrXCJcbiAgICBdXG4gIH0sXG4gIG9pZGM6IHtcbiAgICBnZXRPaWRjQ3VzdG9tU3ViVGVtcGxhdGVGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiXG4gICAgXSxcbiAgICB1cGRhdGVPaWRjQ3VzdG9tU3ViVGVtcGxhdGVGb3JPcmc6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiXG4gICAgXVxuICB9LFxuICBvcmdzOiB7XG4gICAgYWRkU2VjdXJpdHlNYW5hZ2VyVGVhbTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnMvdGVhbXMve3RlYW1fc2x1Z31cIlxuICAgIF0sXG4gICAgYXNzaWduVGVhbVRvT3JnUm9sZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9L3tyb2xlX2lkfVwiXG4gICAgXSxcbiAgICBhc3NpZ25Vc2VyVG9PcmdSb2xlOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdXNlcnMve3VzZXJuYW1lfS97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgYmxvY2tVc2VyOiBbXCJQVVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2FuY2VsSW52aXRhdGlvbjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXSxcbiAgICBjaGVja0Jsb2NrZWRVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja1B1YmxpY01lbWJlcnNoaXBGb3JVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjb252ZXJ0TWVtYmVyVG9PdXRzaWRlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVDdXN0b21Pcmdhbml6YXRpb25Sb2xlOiBbXCJQT1NUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlc1wiXSxcbiAgICBjcmVhdGVJbnZpdGF0aW9uOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllczogW1wiUEFUQ0ggL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzRm9yUmVwb3M6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVDdXN0b21Qcm9wZXJ0eTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWEve2N1c3RvbV9wcm9wZXJ0eV9uYW1lfVwiXG4gICAgXSxcbiAgICBjcmVhdGVXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9vcmdzL3tvcmd9XCJdLFxuICAgIGRlbGV0ZUN1c3RvbU9yZ2FuaXphdGlvblJvbGU6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlV2ViaG9vazogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBlbmFibGVPckRpc2FibGVTZWN1cml0eVByb2R1Y3RPbkFsbE9yZ1JlcG9zOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30ve3NlY3VyaXR5X3Byb2R1Y3R9L3tlbmFibGVtZW50fVwiXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRBbGxDdXN0b21Qcm9wZXJ0aWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIl0sXG4gICAgZ2V0Q3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIlxuICAgIF0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0T3JnUm9sZTogW1wiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH1cIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIlxuICAgIF0sXG4gICAgbGlzdDogW1wiR0VUIC9vcmdhbml6YXRpb25zXCJdLFxuICAgIGxpc3RBcHBJbnN0YWxsYXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uc1wiXSxcbiAgICBsaXN0QmxvY2tlZFVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCJdLFxuICAgIGxpc3RDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzRm9yUmVwb3M6IFtcIkdFVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3ZhbHVlc1wiXSxcbiAgICBsaXN0RmFpbGVkSW52aXRhdGlvbnM6IFtcIkdFVCAvb3Jncy97b3JnfS9mYWlsZWRfaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvb3Jnc1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L29yZ3NcIl0sXG4gICAgbGlzdEludml0YXRpb25UZWFtczogW1wiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfS90ZWFtc1wiXSxcbiAgICBsaXN0TWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNcIl0sXG4gICAgbGlzdE1lbWJlcnNoaXBzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCJdLFxuICAgIGxpc3RPcmdSb2xlVGVhbXM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3RlYW1zXCJdLFxuICAgIGxpc3RPcmdSb2xlVXNlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3VzZXJzXCJdLFxuICAgIGxpc3RPcmdSb2xlczogW1wiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlc1wiXSxcbiAgICBsaXN0T3JnYW5pemF0aW9uRmluZUdyYWluZWRQZXJtaXNzaW9uczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLWZpbmUtZ3JhaW5lZC1wZXJtaXNzaW9uc1wiXG4gICAgXSxcbiAgICBsaXN0T3V0c2lkZUNvbGxhYm9yYXRvcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnNcIl0sXG4gICAgbGlzdFBhdEdyYW50UmVwb3NpdG9yaWVzOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zL3twYXRfaWR9L3JlcG9zaXRvcmllc1wiXG4gICAgXSxcbiAgICBsaXN0UGF0R3JhbnRSZXF1ZXN0UmVwb3NpdG9yaWVzOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfS9yZXBvc2l0b3JpZXNcIlxuICAgIF0sXG4gICAgbGlzdFBhdEdyYW50UmVxdWVzdHM6IFtcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHNcIl0sXG4gICAgbGlzdFBhdEdyYW50czogW1wiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnNcIl0sXG4gICAgbGlzdFBlbmRpbmdJbnZpdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RQdWJsaWNNZW1iZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnNcIl0sXG4gICAgbGlzdFNlY3VyaXR5TWFuYWdlclRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnNcIl0sXG4gICAgbGlzdFdlYmhvb2tEZWxpdmVyaWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIl0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3NcIl0sXG4gICAgcGF0Y2hDdXN0b21Pcmdhbml6YXRpb25Sb2xlOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L3BpbmdzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH0vYXR0ZW1wdHNcIlxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlTWVtYmVyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIHJlbW92ZU1lbWJlcnNoaXBGb3JVc2VyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVPdXRzaWRlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICByZW1vdmVQdWJsaWNNZW1iZXJzaGlwRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIlxuICAgIF0sXG4gICAgcmVtb3ZlU2VjdXJpdHlNYW5hZ2VyVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnMvdGVhbXMve3RlYW1fc2x1Z31cIlxuICAgIF0sXG4gICAgcmV2aWV3UGF0R3JhbnRSZXF1ZXN0OiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzL3twYXRfcmVxdWVzdF9pZH1cIlxuICAgIF0sXG4gICAgcmV2aWV3UGF0R3JhbnRSZXF1ZXN0c0luQnVsazogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0c1wiXG4gICAgXSxcbiAgICByZXZva2VBbGxPcmdSb2xlc1RlYW06IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy90ZWFtcy97dGVhbV9zbHVnfVwiXG4gICAgXSxcbiAgICByZXZva2VBbGxPcmdSb2xlc1VzZXI6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy91c2Vycy97dXNlcm5hbWV9XCJcbiAgICBdLFxuICAgIHJldm9rZU9yZ1JvbGVUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z30ve3JvbGVfaWR9XCJcbiAgICBdLFxuICAgIHJldm9rZU9yZ1JvbGVVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdXNlcnMve3VzZXJuYW1lfS97cm9sZV9pZH1cIlxuICAgIF0sXG4gICAgc2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIlBVVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIHNldFB1YmxpY01lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICB1bmJsb2NrVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL29yZ3Mve29yZ31cIl0sXG4gICAgdXBkYXRlTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL21lbWJlcnNoaXBzL29yZ3Mve29yZ31cIlxuICAgIF0sXG4gICAgdXBkYXRlUGF0QWNjZXNzOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH1cIl0sXG4gICAgdXBkYXRlUGF0QWNjZXNzZXM6IFtcIlBPU1QgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vuc1wiXSxcbiAgICB1cGRhdGVXZWJob29rOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0Zvck9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXVxuICB9LFxuICBwYWNrYWdlczoge1xuICAgIGRlbGV0ZVBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZUZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZUZvclVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCJcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvckFQYWNrYWdlT3duZWRCeUFuT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInBhY2thZ2VzXCIsIFwiZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlPcmdcIl0gfVxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yQVBhY2thZ2VPd25lZEJ5VGhlQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgcmVuYW1lZDogW1xuICAgICAgICAgIFwicGFja2FnZXNcIixcbiAgICAgICAgICBcImdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5QXV0aGVudGljYXRlZFVzZXJcIlxuICAgICAgICBdXG4gICAgICB9XG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeU9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIlxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJcbiAgICBdLFxuICAgIGdldFBhY2thZ2VGb3JPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCJcbiAgICBdLFxuICAgIGdldFBhY2thZ2VGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvck9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIlxuICAgIF0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9kb2NrZXIvY29uZmxpY3RzXCJcbiAgICBdLFxuICAgIGxpc3REb2NrZXJNaWdyYXRpb25Db25mbGljdGluZ1BhY2thZ2VzRm9yT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9kb2NrZXIvY29uZmxpY3RzXCJcbiAgICBdLFxuICAgIGxpc3REb2NrZXJNaWdyYXRpb25Db25mbGljdGluZ1BhY2thZ2VzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZG9ja2VyL2NvbmZsaWN0c1wiXG4gICAgXSxcbiAgICBsaXN0UGFja2FnZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0Zvck9yZ2FuaXphdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzXCJdLFxuICAgIGxpc3RQYWNrYWdlc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiXSxcbiAgICByZXN0b3JlUGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCJcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCJcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIlxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiXG4gICAgXVxuICB9LFxuICBwcm9qZWN0czoge1xuICAgIGFkZENvbGxhYm9yYXRvcjogW1wiUFVUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGNyZWF0ZUNhcmQ6IFtcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIl0sXG4gICAgY3JlYXRlQ29sdW1uOiBbXCJQT1NUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9wcm9qZWN0c1wiXSxcbiAgICBjcmVhdGVGb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vcHJvamVjdHNcIl0sXG4gICAgY3JlYXRlRm9yUmVwbzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIl0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXSxcbiAgICBkZWxldGVDYXJkOiBbXCJERUxFVEUgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbHVtbjogW1wiREVMRVRFIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9XCJdLFxuICAgIGdldDogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIl0sXG4gICAgZ2V0Q2FyZDogW1wiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiXSxcbiAgICBnZXRDb2x1bW46IFtcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiXSxcbiAgICBnZXRQZXJtaXNzaW9uRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiXG4gICAgXSxcbiAgICBsaXN0Q2FyZHM6IFtcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9jYXJkc1wiXSxcbiAgICBsaXN0Q29sbGFib3JhdG9yczogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29sdW1uczogW1wiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiXSxcbiAgICBtb3ZlQ2FyZDogW1wiUE9TVCAvcHJvamVjdHMvY29sdW1ucy9jYXJkcy97Y2FyZF9pZH0vbW92ZXNcIl0sXG4gICAgbW92ZUNvbHVtbjogW1wiUE9TVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9tb3Zlc1wiXSxcbiAgICByZW1vdmVDb2xsYWJvcmF0b3I6IFtcbiAgICAgIFwiREVMRVRFIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJcbiAgICBdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiXSxcbiAgICB1cGRhdGVDYXJkOiBbXCJQQVRDSCAvcHJvamVjdHMvY29sdW1ucy9jYXJkcy97Y2FyZF9pZH1cIl0sXG4gICAgdXBkYXRlQ29sdW1uOiBbXCJQQVRDSCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiXVxuICB9LFxuICBwdWxsczoge1xuICAgIGNoZWNrSWZNZXJnZWQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9tZXJnZVwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzXCJdLFxuICAgIGNyZWF0ZVJlcGx5Rm9yUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZXBsaWVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZVJldmlldzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCJdLFxuICAgIGNyZWF0ZVJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBkZWxldGVQZW5kaW5nUmV2aWV3OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZVJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIlxuICAgIF0sXG4gICAgZGlzbWlzc1JldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9kaXNtaXNzYWxzXCJcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9XCJdLFxuICAgIGdldFJldmlldzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiXG4gICAgXSxcbiAgICBnZXRSZXZpZXdDb21tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzXCJdLFxuICAgIGxpc3RDb21tZW50c0ZvclJldmlldzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZpbGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIl0sXG4gICAgbGlzdFJlcXVlc3RlZFJldmlld2VyczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiXG4gICAgXSxcbiAgICBsaXN0UmV2aWV3Q29tbWVudHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzXCJcbiAgICBdLFxuICAgIGxpc3RSZXZpZXdDb21tZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHNcIl0sXG4gICAgbGlzdFJldmlld3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCJdLFxuICAgIG1lcmdlOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vbWVyZ2VcIl0sXG4gICAgcmVtb3ZlUmVxdWVzdGVkUmV2aWV3ZXJzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCJcbiAgICBdLFxuICAgIHJlcXVlc3RSZXZpZXdlcnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCJcbiAgICBdLFxuICAgIHN1Ym1pdFJldmlldzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vZXZlbnRzXCJcbiAgICBdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn1cIl0sXG4gICAgdXBkYXRlQnJhbmNoOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS91cGRhdGUtYnJhbmNoXCJcbiAgICBdLFxuICAgIHVwZGF0ZVJldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiXG4gICAgXSxcbiAgICB1cGRhdGVSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIlxuICAgIF1cbiAgfSxcbiAgcmF0ZUxpbWl0OiB7IGdldDogW1wiR0VUIC9yYXRlX2xpbWl0XCJdIH0sXG4gIHJlYWN0aW9uczoge1xuICAgIGNyZWF0ZUZvckNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JJc3N1ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGNyZWF0ZUZvcklzc3VlQ29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JQdWxsUmVxdWVzdFJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBjcmVhdGVGb3JSZWxlYXNlOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgY3JlYXRlRm9yVGVhbURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBkZWxldGVGb3JDb21taXRDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvcklzc3VlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvcklzc3VlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlRm9yUHVsbFJlcXVlc3RDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZUZvclJlbGVhc2U6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb25Db21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgbGlzdEZvckNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGxpc3RGb3JJc3N1ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0Rm9yUHVsbFJlcXVlc3RSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiXG4gICAgXSxcbiAgICBsaXN0Rm9yUmVsZWFzZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnNcIlxuICAgIF0sXG4gICAgbGlzdEZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCJcbiAgICBdLFxuICAgIGxpc3RGb3JUZWFtRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiXG4gICAgXVxuICB9LFxuICByZXBvczoge1xuICAgIGFjY2VwdEludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImFjY2VwdEludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBhY2NlcHRJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgYWRkQXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiYXBwc1wiIH1cbiAgICBdLFxuICAgIGFkZENvbGxhYm9yYXRvcjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgYWRkU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9XG4gICAgXSxcbiAgICBhZGRUZWFtQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInRlYW1zXCIgfVxuICAgIF0sXG4gICAgYWRkVXNlckFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH1cbiAgICBdLFxuICAgIGNhbmNlbFBhZ2VzRGVwbG95bWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH0vY2FuY2VsXCJcbiAgICBdLFxuICAgIGNoZWNrQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiXG4gICAgXSxcbiAgICBjaGVja0NvbGxhYm9yYXRvcjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tQcml2YXRlVnVsbmVyYWJpbGl0eVJlcG9ydGluZzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ByaXZhdGUtdnVsbmVyYWJpbGl0eS1yZXBvcnRpbmdcIlxuICAgIF0sXG4gICAgY2hlY2tWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIlxuICAgIF0sXG4gICAgY29kZW93bmVyc0Vycm9yczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlb3duZXJzL2Vycm9yc1wiXSxcbiAgICBjb21wYXJlQ29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlfS4uLntoZWFkfVwiXSxcbiAgICBjb21wYXJlQ29tbWl0c1dpdGhCYXNlaGVhZDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbXBhcmUve2Jhc2VoZWFkfVwiXG4gICAgXSxcbiAgICBjcmVhdGVBdXRvbGluazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgY3JlYXRlQ29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlQ29tbWl0U3RhdHVzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0dXNlcy97c2hhfVwiXSxcbiAgICBjcmVhdGVEZXBsb3lLZXk6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCJcbiAgICBdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlc1wiXG4gICAgXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50U3RhdHVzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiXG4gICAgXSxcbiAgICBjcmVhdGVEaXNwYXRjaEV2ZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kaXNwYXRjaGVzXCJdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3JlcG9zXCJdLFxuICAgIGNyZWF0ZUZvcms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCJdLFxuICAgIGNyZWF0ZUluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3JlcG9zXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllc1ZhbHVlczogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvcGVydGllcy92YWx1ZXNcIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVFbnZpcm9ubWVudDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIlxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVGaWxlQ29udGVudHM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udGVudHMve3BhdGh9XCJdLFxuICAgIGNyZWF0ZU9yZ1J1bGVzZXQ6IFtcIlBPU1QgL29yZ3Mve29yZ30vcnVsZXNldHNcIl0sXG4gICAgY3JlYXRlUGFnZXNEZXBsb3ltZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50c1wiXSxcbiAgICBjcmVhdGVQYWdlc1NpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIGNyZWF0ZVJlbGVhc2U6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCJdLFxuICAgIGNyZWF0ZVJlcG9SdWxlc2V0OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0c1wiXSxcbiAgICBjcmVhdGVUYWdQcm90ZWN0aW9uOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzL3Byb3RlY3Rpb25cIl0sXG4gICAgY3JlYXRlVXNpbmdUZW1wbGF0ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97dGVtcGxhdGVfb3duZXJ9L3t0ZW1wbGF0ZV9yZXBvfS9nZW5lcmF0ZVwiXG4gICAgXSxcbiAgICBjcmVhdGVXZWJob29rOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rc1wiXSxcbiAgICBkZWNsaW5lSW52aXRhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImRlY2xpbmVJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgZGVjbGluZUludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGRlbGV0ZUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCJcbiAgICBdLFxuICAgIGRlbGV0ZUFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vZW5mb3JjZV9hZG1pbnNcIlxuICAgIF0sXG4gICAgZGVsZXRlQW5FbnZpcm9ubWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIlxuICAgIF0sXG4gICAgZGVsZXRlQXV0b2xpbms6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzL3thdXRvbGlua19pZH1cIl0sXG4gICAgZGVsZXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIlxuICAgIF0sXG4gICAgZGVsZXRlQ29tbWl0Q29tbWVudDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZGVsZXRlQ29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiXG4gICAgXSxcbiAgICBkZWxldGVEZXBsb3lLZXk6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30va2V5cy97a2V5X2lkfVwiXSxcbiAgICBkZWxldGVEZXBsb3ltZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZURlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVGaWxlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBkZWxldGVJbnZpdGF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1J1bGVzZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgZGVsZXRlUGFnZXNTaXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIGRlbGV0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIlxuICAgIF0sXG4gICAgZGVsZXRlUmVsZWFzZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZGVsZXRlUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvYXNzZXRzL3thc3NldF9pZH1cIlxuICAgIF0sXG4gICAgZGVsZXRlUmVwb1J1bGVzZXQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGRlbGV0ZVRhZ1Byb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzL3Byb3RlY3Rpb24ve3RhZ19wcm90ZWN0aW9uX2lkfVwiXG4gICAgXSxcbiAgICBkZWxldGVXZWJob29rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBkaXNhYmxlQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiXG4gICAgXSxcbiAgICBkaXNhYmxlRGVwbG95bWVudFByb3RlY3Rpb25SdWxlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMve3Byb3RlY3Rpb25fcnVsZV9pZH1cIlxuICAgIF0sXG4gICAgZGlzYWJsZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiXG4gICAgXSxcbiAgICBkaXNhYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCJcbiAgICBdLFxuICAgIGRvd25sb2FkQXJjaGl2ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ppcGJhbGwve3JlZn1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImRvd25sb2FkWmlwYmFsbEFyY2hpdmVcIl0gfVxuICAgIF0sXG4gICAgZG93bmxvYWRUYXJiYWxsQXJjaGl2ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YXJiYWxsL3tyZWZ9XCJdLFxuICAgIGRvd25sb2FkWmlwYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vemlwYmFsbC97cmVmfVwiXSxcbiAgICBlbmFibGVBdXRvbWF0ZWRTZWN1cml0eUZpeGVzOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b21hdGVkLXNlY3VyaXR5LWZpeGVzXCJcbiAgICBdLFxuICAgIGVuYWJsZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiXG4gICAgXSxcbiAgICBlbmFibGVWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIlxuICAgIF0sXG4gICAgZ2VuZXJhdGVSZWxlYXNlTm90ZXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvZ2VuZXJhdGUtbm90ZXNcIlxuICAgIF0sXG4gICAgZ2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGdldEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCJcbiAgICBdLFxuICAgIGdldEFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vZW5mb3JjZV9hZG1pbnNcIlxuICAgIF0sXG4gICAgZ2V0QWxsRGVwbG95bWVudFByb3RlY3Rpb25SdWxlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzXCJcbiAgICBdLFxuICAgIGdldEFsbEVudmlyb25tZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIl0sXG4gICAgZ2V0QWxsU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiXG4gICAgXSxcbiAgICBnZXRBbGxUb3BpY3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCJdLFxuICAgIGdldEFwcHNXaXRoQWNjZXNzVG9Qcm90ZWN0ZWRCcmFuY2g6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCJcbiAgICBdLFxuICAgIGdldEF1dG9saW5rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGdldEJyYW5jaDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRCcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiXG4gICAgXSxcbiAgICBnZXRCcmFuY2hSdWxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRDbG9uZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9jbG9uZXNcIl0sXG4gICAgZ2V0Q29kZUZyZXF1ZW5jeVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvZGVfZnJlcXVlbmN5XCJdLFxuICAgIGdldENvbGxhYm9yYXRvclBlcm1pc3Npb25MZXZlbDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfS9wZXJtaXNzaW9uXCJcbiAgICBdLFxuICAgIGdldENvbWJpbmVkU3RhdHVzRm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzXCJdLFxuICAgIGdldENvbW1pdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9XCJdLFxuICAgIGdldENvbW1pdEFjdGl2aXR5U3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvY29tbWl0X2FjdGl2aXR5XCJdLFxuICAgIGdldENvbW1pdENvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldENvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIlxuICAgIF0sXG4gICAgZ2V0Q29tbXVuaXR5UHJvZmlsZU1ldHJpY3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbXVuaXR5L3Byb2ZpbGVcIl0sXG4gICAgZ2V0Q29udGVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZ2V0Q29udHJpYnV0b3JzU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvY29udHJpYnV0b3JzXCJdLFxuICAgIGdldEN1c3RvbURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL3twcm90ZWN0aW9uX3J1bGVfaWR9XCJcbiAgICBdLFxuICAgIGdldEN1c3RvbVByb3BlcnRpZXNWYWx1ZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvcGVydGllcy92YWx1ZXNcIl0sXG4gICAgZ2V0RGVwbG95S2V5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXMve2tleV9pZH1cIl0sXG4gICAgZ2V0RGVwbG95bWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH1cIl0sXG4gICAgZ2V0RGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXMve2JyYW5jaF9wb2xpY3lfaWR9XCJcbiAgICBdLFxuICAgIGdldERlcGxveW1lbnRTdGF0dXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXMve3N0YXR1c19pZH1cIlxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCJcbiAgICBdLFxuICAgIGdldExhdGVzdFBhZ2VzQnVpbGQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzL2xhdGVzdFwiXSxcbiAgICBnZXRMYXRlc3RSZWxlYXNlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2xhdGVzdFwiXSxcbiAgICBnZXRPcmdSdWxlU3VpdGU6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlcy97cnVsZV9zdWl0ZV9pZH1cIl0sXG4gICAgZ2V0T3JnUnVsZVN1aXRlczogW1wiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCJdLFxuICAgIGdldE9yZ1J1bGVzZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgZ2V0T3JnUnVsZXNldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0c1wiXSxcbiAgICBnZXRQYWdlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICBnZXRQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy97YnVpbGRfaWR9XCJdLFxuICAgIGdldFBhZ2VzRGVwbG95bWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2RlcGxveW1lbnRzL3twYWdlc19kZXBsb3ltZW50X2lkfVwiXG4gICAgXSxcbiAgICBnZXRQYWdlc0hlYWx0aENoZWNrOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2hlYWx0aFwiXSxcbiAgICBnZXRQYXJ0aWNpcGF0aW9uU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvcGFydGljaXBhdGlvblwiXSxcbiAgICBnZXRQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3B1bGxfcmVxdWVzdF9yZXZpZXdzXCJcbiAgICBdLFxuICAgIGdldFB1bmNoQ2FyZFN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3B1bmNoX2NhcmRcIl0sXG4gICAgZ2V0UmVhZG1lOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlYWRtZVwiXSxcbiAgICBnZXRSZWFkbWVJbkRpcmVjdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWFkbWUve2Rpcn1cIl0sXG4gICAgZ2V0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZ2V0UmVsZWFzZUFzc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJdLFxuICAgIGdldFJlbGVhc2VCeVRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy90YWdzL3t0YWd9XCJdLFxuICAgIGdldFJlcG9SdWxlU3VpdGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy9ydWxlLXN1aXRlcy97cnVsZV9zdWl0ZV9pZH1cIlxuICAgIF0sXG4gICAgZ2V0UmVwb1J1bGVTdWl0ZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMvcnVsZS1zdWl0ZXNcIl0sXG4gICAgZ2V0UmVwb1J1bGVzZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGdldFJlcG9SdWxlc2V0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0c1wiXSxcbiAgICBnZXRTdGF0dXNDaGVja3NQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzXCJcbiAgICBdLFxuICAgIGdldFRlYW1zV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIlxuICAgIF0sXG4gICAgZ2V0VG9wUGF0aHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9wb3B1bGFyL3BhdGhzXCJdLFxuICAgIGdldFRvcFJlZmVycmVyczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFmZmljL3BvcHVsYXIvcmVmZXJyZXJzXCJdLFxuICAgIGdldFVzZXJzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIlxuICAgIF0sXG4gICAgZ2V0Vmlld3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy92aWV3c1wiXSxcbiAgICBnZXRXZWJob29rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9jb25maWdcIlxuICAgIF0sXG4gICAgZ2V0V2ViaG9va0RlbGl2ZXJ5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfVwiXG4gICAgXSxcbiAgICBsaXN0QWN0aXZpdGllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpdml0eVwiXSxcbiAgICBsaXN0QXV0b2xpbmtzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rc1wiXSxcbiAgICBsaXN0QnJhbmNoZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXNcIl0sXG4gICAgbGlzdEJyYW5jaGVzRm9ySGVhZENvbW1pdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2JyYW5jaGVzLXdoZXJlLWhlYWRcIlxuICAgIF0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21taXRTdGF0dXNlc0ZvclJlZjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzZXNcIlxuICAgIF0sXG4gICAgbGlzdENvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0c1wiXSxcbiAgICBsaXN0Q29udHJpYnV0b3JzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRyaWJ1dG9yc1wiXSxcbiAgICBsaXN0Q3VzdG9tRGVwbG95bWVudFJ1bGVJbnRlZ3JhdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlcy9hcHBzXCJcbiAgICBdLFxuICAgIGxpc3REZXBsb3lLZXlzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgbGlzdERlcGxveW1lbnRCcmFuY2hQb2xpY2llczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIlxuICAgIF0sXG4gICAgbGlzdERlcGxveW1lbnRTdGF0dXNlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiXG4gICAgXSxcbiAgICBsaXN0RGVwbG95bWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcmVwb3NcIl0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3JlcG9zXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVwb3NcIl0sXG4gICAgbGlzdEZvcmtzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdExhbmd1YWdlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYW5ndWFnZXNcIl0sXG4gICAgbGlzdFBhZ2VzQnVpbGRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkc1wiXSxcbiAgICBsaXN0UHVibGljOiBbXCJHRVQgL3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0UHVsbFJlcXVlc3RzQXNzb2NpYXRlZFdpdGhDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9wdWxsc1wiXG4gICAgXSxcbiAgICBsaXN0UmVsZWFzZUFzc2V0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHNcIlxuICAgIF0sXG4gICAgbGlzdFJlbGVhc2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCJdLFxuICAgIGxpc3RUYWdQcm90ZWN0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3MvcHJvdGVjdGlvblwiXSxcbiAgICBsaXN0VGFnczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCJdLFxuICAgIGxpc3RUZWFtczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIl0sXG4gICAgbWVyZ2U6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21lcmdlc1wiXSxcbiAgICBtZXJnZVVwc3RyZWFtOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZS11cHN0cmVhbVwiXSxcbiAgICBwaW5nV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L3BpbmdzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCJcbiAgICBdLFxuICAgIHJlbW92ZUFwcEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiYXBwc1wiIH1cbiAgICBdLFxuICAgIHJlbW92ZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICByZW1vdmVTdGF0dXNDaGVja0NvbnRleHRzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzL2NvbnRleHRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImNvbnRleHRzXCIgfVxuICAgIF0sXG4gICAgcmVtb3ZlU3RhdHVzQ2hlY2tQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzXCJcbiAgICBdLFxuICAgIHJlbW92ZVRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH1cbiAgICBdLFxuICAgIHJlbW92ZVVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH1cbiAgICBdLFxuICAgIHJlbmFtZUJyYW5jaDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcmVuYW1lXCJdLFxuICAgIHJlcGxhY2VBbGxUb3BpY3M6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCJdLFxuICAgIHJlcXVlc3RQYWdlc0J1aWxkOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIl0sXG4gICAgc2V0QWRtaW5CcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vZW5mb3JjZV9hZG1pbnNcIlxuICAgIF0sXG4gICAgc2V0QXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfVxuICAgIF0sXG4gICAgc2V0U3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH1cbiAgICBdLFxuICAgIHNldFRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH1cbiAgICBdLFxuICAgIHNldFVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH1cbiAgICBdLFxuICAgIHRlc3RQdXNoV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L3Rlc3RzXCJdLFxuICAgIHRyYW5zZmVyOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFuc2ZlclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICB1cGRhdGVCcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiXG4gICAgXSxcbiAgICB1cGRhdGVDb21taXRDb21tZW50OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIHVwZGF0ZURlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiXG4gICAgXSxcbiAgICB1cGRhdGVJbmZvcm1hdGlvbkFib3V0UGFnZXNTaXRlOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIHVwZGF0ZUludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiXG4gICAgXSxcbiAgICB1cGRhdGVPcmdSdWxlc2V0OiBbXCJQVVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiXG4gICAgXSxcbiAgICB1cGRhdGVSZWxlYXNlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIHVwZGF0ZVJlbGVhc2VBc3NldDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvYXNzZXRzL3thc3NldF9pZH1cIlxuICAgIF0sXG4gICAgdXBkYXRlUmVwb1J1bGVzZXQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVN0YXR1c0NoZWNrUG90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcInVwZGF0ZVN0YXR1c0NoZWNrUHJvdGVjdGlvblwiXSB9XG4gICAgXSxcbiAgICB1cGRhdGVTdGF0dXNDaGVja1Byb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiXG4gICAgXSxcbiAgICB1cGRhdGVXZWJob29rOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JSZXBvOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJcbiAgICBdLFxuICAgIHVwbG9hZFJlbGVhc2VBc3NldDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzez9uYW1lLGxhYmVsfVwiLFxuICAgICAgeyBiYXNlVXJsOiBcImh0dHBzOi8vdXBsb2Fkcy5naXRodWIuY29tXCIgfVxuICAgIF1cbiAgfSxcbiAgc2VhcmNoOiB7XG4gICAgY29kZTogW1wiR0VUIC9zZWFyY2gvY29kZVwiXSxcbiAgICBjb21taXRzOiBbXCJHRVQgL3NlYXJjaC9jb21taXRzXCJdLFxuICAgIGlzc3Vlc0FuZFB1bGxSZXF1ZXN0czogW1wiR0VUIC9zZWFyY2gvaXNzdWVzXCJdLFxuICAgIGxhYmVsczogW1wiR0VUIC9zZWFyY2gvbGFiZWxzXCJdLFxuICAgIHJlcG9zOiBbXCJHRVQgL3NlYXJjaC9yZXBvc2l0b3JpZXNcIl0sXG4gICAgdG9waWNzOiBbXCJHRVQgL3NlYXJjaC90b3BpY3NcIl0sXG4gICAgdXNlcnM6IFtcIkdFVCAvc2VhcmNoL3VzZXJzXCJdXG4gIH0sXG4gIHNlY3JldFNjYW5uaW5nOiB7XG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIlxuICAgIF0sXG4gICAgbGlzdEFsZXJ0c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0TG9jYXRpb25zRm9yQWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2xvY2F0aW9uc1wiXG4gICAgXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiXG4gICAgXVxuICB9LFxuICBzZWN1cml0eUFkdmlzb3JpZXM6IHtcbiAgICBjcmVhdGVGb3JrOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMve2doc2FfaWR9L2ZvcmtzXCJcbiAgICBdLFxuICAgIGNyZWF0ZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMvcmVwb3J0c1wiXG4gICAgXSxcbiAgICBjcmVhdGVSZXBvc2l0b3J5QWR2aXNvcnk6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllc1wiXG4gICAgXSxcbiAgICBjcmVhdGVSZXBvc2l0b3J5QWR2aXNvcnlDdmVSZXF1ZXN0OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMve2doc2FfaWR9L2N2ZVwiXG4gICAgXSxcbiAgICBnZXRHbG9iYWxBZHZpc29yeTogW1wiR0VUIC9hZHZpc29yaWVzL3tnaHNhX2lkfVwiXSxcbiAgICBnZXRSZXBvc2l0b3J5QWR2aXNvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfVwiXG4gICAgXSxcbiAgICBsaXN0R2xvYmFsQWR2aXNvcmllczogW1wiR0VUIC9hZHZpc29yaWVzXCJdLFxuICAgIGxpc3RPcmdSZXBvc2l0b3J5QWR2aXNvcmllczogW1wiR0VUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LWFkdmlzb3JpZXNcIl0sXG4gICAgbGlzdFJlcG9zaXRvcnlBZHZpc29yaWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIl0sXG4gICAgdXBkYXRlUmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfVwiXG4gICAgXVxuICB9LFxuICB0ZWFtczoge1xuICAgIGFkZE9yVXBkYXRlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICBhZGRPclVwZGF0ZVByb2plY3RQZXJtaXNzaW9uc0luT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9wcm9qZWN0cy97cHJvamVjdF9pZH1cIlxuICAgIF0sXG4gICAgYWRkT3JVcGRhdGVSZXBvUGVybWlzc2lvbnNJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIlxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCJcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JSZXBvSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zL3tvd25lcn0ve3JlcG99XCJcbiAgICBdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvb3Jncy97b3JnfS90ZWFtc1wiXSxcbiAgICBjcmVhdGVEaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiXG4gICAgXSxcbiAgICBjcmVhdGVEaXNjdXNzaW9uSW5Pcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIl0sXG4gICAgZGVsZXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCJcbiAgICBdLFxuICAgIGRlbGV0ZURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfVwiXG4gICAgXSxcbiAgICBkZWxldGVJbk9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdLFxuICAgIGdldEJ5TmFtZTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdLFxuICAgIGdldERpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiXG4gICAgXSxcbiAgICBnZXREaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIlxuICAgIF0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXG4gICAgXSxcbiAgICBsaXN0OiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIl0sXG4gICAgbGlzdENoaWxkSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS90ZWFtc1wiXSxcbiAgICBsaXN0RGlzY3Vzc2lvbkNvbW1lbnRzSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIlxuICAgIF0sXG4gICAgbGlzdERpc2N1c3Npb25zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9uc1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci90ZWFtc1wiXSxcbiAgICBsaXN0TWVtYmVyc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc1wiXSxcbiAgICBsaXN0UGVuZGluZ0ludml0YXRpb25zSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCJcbiAgICBdLFxuICAgIGxpc3RQcm9qZWN0c0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIl0sXG4gICAgbGlzdFJlcG9zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvc1wiXSxcbiAgICByZW1vdmVNZW1iZXJzaGlwRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJcbiAgICBdLFxuICAgIHJlbW92ZVByb2plY3RJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCJcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Jbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIlxuICAgIF0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIlxuICAgIF0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIlxuICAgIF0sXG4gICAgdXBkYXRlSW5Pcmc6IFtcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdXG4gIH0sXG4gIHVzZXJzOiB7XG4gICAgYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGFkZEVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvZW1haWxzXCJdLFxuICAgIGFkZFNvY2lhbEFjY291bnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgYmxvY2s6IFtcIlBVVCAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0Jsb2NrZWQ6IFtcIkdFVCAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0ZvbGxvd2luZ0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmcve3RhcmdldF91c2VyfVwiXSxcbiAgICBjaGVja1BlcnNvbklzRm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICBjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvZ3BnX2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImNyZWF0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGNyZWF0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2dwZ19rZXlzXCJdLFxuICAgIGNyZWF0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9rZXlzXCJdLFxuICAgIGNyZWF0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9lbWFpbHNcIl0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBkZWxldGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiXSxcbiAgICBkZWxldGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9rZXlzL3trZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBkZWxldGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2tleXMve2tleV9pZH1cIl0sXG4gICAgZGVsZXRlU29jaWFsQWNjb3VudEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGRlbGV0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvc3NoX3NpZ25pbmdfa2V5cy97c3NoX3NpZ25pbmdfa2V5X2lkfVwiXG4gICAgXSxcbiAgICBmb2xsb3c6IFtcIlBVVCAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICBnZXRBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXJcIl0sXG4gICAgZ2V0QnlVc2VybmFtZTogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9XCJdLFxuICAgIGdldENvbnRleHRGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaG92ZXJjYXJkXCJdLFxuICAgIGdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIva2V5cy97a2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGdldFNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvc3NoX3NpZ25pbmdfa2V5cy97c3NoX3NpZ25pbmdfa2V5X2lkfVwiXG4gICAgXSxcbiAgICBsaXN0OiBbXCJHRVQgL3VzZXJzXCJdLFxuICAgIGxpc3RCbG9ja2VkQnlBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9ibG9ja3NcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RCbG9ja2VkQnlBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ibG9ja3NcIl0sXG4gICAgbGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlclwiXSB9XG4gICAgXSxcbiAgICBsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZm9sbG93aW5nXCJdLFxuICAgIGxpc3RGb2xsb3dlcnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ZvbGxvd2Vyc1wiXSxcbiAgICBsaXN0Rm9sbG93ZXJzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2Vyc1wiXSxcbiAgICBsaXN0Rm9sbG93aW5nRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2luZ1wiXSxcbiAgICBsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2dwZ19rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGxpc3RHcGdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5c1wiXSxcbiAgICBsaXN0R3BnS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ncGdfa2V5c1wiXSxcbiAgICBsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvcHVibGljX2VtYWlsc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIGxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIl0sXG4gICAgbGlzdFB1YmxpY0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0va2V5c1wiXSxcbiAgICBsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfVxuICAgIF0sXG4gICAgbGlzdFB1YmxpY1NzaEtleXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2tleXNcIl0sXG4gICAgbGlzdFNvY2lhbEFjY291bnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgbGlzdFNvY2lhbEFjY291bnRzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NvY2lhbF9hY2NvdW50c1wiXSxcbiAgICBsaXN0U3NoU2lnbmluZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXNcIl0sXG4gICAgbGlzdFNzaFNpZ25pbmdLZXlzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NzaF9zaWduaW5nX2tleXNcIl0sXG4gICAgc2V0UHJpbWFyeUVtYWlsVmlzaWJpbGl0eUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvZW1haWwvdmlzaWJpbGl0eVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwic2V0UHJpbWFyeUVtYWlsVmlzaWJpbGl0eUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH1cbiAgICBdLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQQVRDSCAvdXNlci9lbWFpbC92aXNpYmlsaXR5XCJcbiAgICBdLFxuICAgIHVuYmxvY2s6IFtcIkRFTEVURSAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICB1bmZvbGxvdzogW1wiREVMRVRFIC91c2VyL2ZvbGxvd2luZy97dXNlcm5hbWV9XCJdLFxuICAgIHVwZGF0ZUF1dGhlbnRpY2F0ZWQ6IFtcIlBBVENIIC91c2VyXCJdXG4gIH1cbn07XG52YXIgZW5kcG9pbnRzX2RlZmF1bHQgPSBFbmRwb2ludHM7XG5leHBvcnQge1xuICBlbmRwb2ludHNfZGVmYXVsdCBhcyBkZWZhdWx0XG59O1xuIiwiaW1wb3J0IEVORFBPSU5UUyBmcm9tIFwiLi9nZW5lcmF0ZWQvZW5kcG9pbnRzLmpzXCI7XG5jb25zdCBlbmRwb2ludE1ldGhvZHNNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuZm9yIChjb25zdCBbc2NvcGUsIGVuZHBvaW50c10gb2YgT2JqZWN0LmVudHJpZXMoRU5EUE9JTlRTKSkge1xuICBmb3IgKGNvbnN0IFttZXRob2ROYW1lLCBlbmRwb2ludF0gb2YgT2JqZWN0LmVudHJpZXMoZW5kcG9pbnRzKSkge1xuICAgIGNvbnN0IFtyb3V0ZSwgZGVmYXVsdHMsIGRlY29yYXRpb25zXSA9IGVuZHBvaW50O1xuICAgIGNvbnN0IFttZXRob2QsIHVybF0gPSByb3V0ZS5zcGxpdCgvIC8pO1xuICAgIGNvbnN0IGVuZHBvaW50RGVmYXVsdHMgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIHVybFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRzXG4gICAgKTtcbiAgICBpZiAoIWVuZHBvaW50TWV0aG9kc01hcC5oYXMoc2NvcGUpKSB7XG4gICAgICBlbmRwb2ludE1ldGhvZHNNYXAuc2V0KHNjb3BlLCAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpKTtcbiAgICB9XG4gICAgZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkuc2V0KG1ldGhvZE5hbWUsIHtcbiAgICAgIHNjb3BlLFxuICAgICAgbWV0aG9kTmFtZSxcbiAgICAgIGVuZHBvaW50RGVmYXVsdHMsXG4gICAgICBkZWNvcmF0aW9uc1xuICAgIH0pO1xuICB9XG59XG5jb25zdCBoYW5kbGVyID0ge1xuICBoYXMoeyBzY29wZSB9LCBtZXRob2ROYW1lKSB7XG4gICAgcmV0dXJuIGVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLmhhcyhtZXRob2ROYW1lKTtcbiAgfSxcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgbWV0aG9kTmFtZSkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdGhpcy5nZXQodGFyZ2V0LCBtZXRob2ROYW1lKSxcbiAgICAgIC8vIGVuc3VyZXMgbWV0aG9kIGlzIGluIHRoZSBjYWNoZVxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgfTtcbiAgfSxcbiAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBtZXRob2ROYW1lLCBkZXNjcmlwdG9yKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldC5jYWNoZSwgbWV0aG9kTmFtZSwgZGVzY3JpcHRvcik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgbWV0aG9kTmFtZSkge1xuICAgIGRlbGV0ZSB0YXJnZXQuY2FjaGVbbWV0aG9kTmFtZV07XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIG93bktleXMoeyBzY29wZSB9KSB7XG4gICAgcmV0dXJuIFsuLi5lbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5rZXlzKCldO1xuICB9LFxuICBzZXQodGFyZ2V0LCBtZXRob2ROYW1lLCB2YWx1ZSkge1xuICAgIHJldHVybiB0YXJnZXQuY2FjaGVbbWV0aG9kTmFtZV0gPSB2YWx1ZTtcbiAgfSxcbiAgZ2V0KHsgb2N0b2tpdCwgc2NvcGUsIGNhY2hlIH0sIG1ldGhvZE5hbWUpIHtcbiAgICBpZiAoY2FjaGVbbWV0aG9kTmFtZV0pIHtcbiAgICAgIHJldHVybiBjYWNoZVttZXRob2ROYW1lXTtcbiAgICB9XG4gICAgY29uc3QgbWV0aG9kID0gZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkuZ2V0KG1ldGhvZE5hbWUpO1xuICAgIGlmICghbWV0aG9kKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgICBjb25zdCB7IGVuZHBvaW50RGVmYXVsdHMsIGRlY29yYXRpb25zIH0gPSBtZXRob2Q7XG4gICAgaWYgKGRlY29yYXRpb25zKSB7XG4gICAgICBjYWNoZVttZXRob2ROYW1lXSA9IGRlY29yYXRlKFxuICAgICAgICBvY3Rva2l0LFxuICAgICAgICBzY29wZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgZW5kcG9pbnREZWZhdWx0cyxcbiAgICAgICAgZGVjb3JhdGlvbnNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhY2hlW21ldGhvZE5hbWVdID0gb2N0b2tpdC5yZXF1ZXN0LmRlZmF1bHRzKGVuZHBvaW50RGVmYXVsdHMpO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVbbWV0aG9kTmFtZV07XG4gIH1cbn07XG5mdW5jdGlvbiBlbmRwb2ludHNUb01ldGhvZHMob2N0b2tpdCkge1xuICBjb25zdCBuZXdNZXRob2RzID0ge307XG4gIGZvciAoY29uc3Qgc2NvcGUgb2YgZW5kcG9pbnRNZXRob2RzTWFwLmtleXMoKSkge1xuICAgIG5ld01ldGhvZHNbc2NvcGVdID0gbmV3IFByb3h5KHsgb2N0b2tpdCwgc2NvcGUsIGNhY2hlOiB7fSB9LCBoYW5kbGVyKTtcbiAgfVxuICByZXR1cm4gbmV3TWV0aG9kcztcbn1cbmZ1bmN0aW9uIGRlY29yYXRlKG9jdG9raXQsIHNjb3BlLCBtZXRob2ROYW1lLCBkZWZhdWx0cywgZGVjb3JhdGlvbnMpIHtcbiAgY29uc3QgcmVxdWVzdFdpdGhEZWZhdWx0cyA9IG9jdG9raXQucmVxdWVzdC5kZWZhdWx0cyhkZWZhdWx0cyk7XG4gIGZ1bmN0aW9uIHdpdGhEZWNvcmF0aW9ucyguLi5hcmdzKSB7XG4gICAgbGV0IG9wdGlvbnMgPSByZXF1ZXN0V2l0aERlZmF1bHRzLmVuZHBvaW50Lm1lcmdlKC4uLmFyZ3MpO1xuICAgIGlmIChkZWNvcmF0aW9ucy5tYXBUb0RhdGEpIHtcbiAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgIGRhdGE6IG9wdGlvbnNbZGVjb3JhdGlvbnMubWFwVG9EYXRhXSxcbiAgICAgICAgW2RlY29yYXRpb25zLm1hcFRvRGF0YV06IHZvaWQgMFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyhvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGRlY29yYXRpb25zLnJlbmFtZWQpIHtcbiAgICAgIGNvbnN0IFtuZXdTY29wZSwgbmV3TWV0aG9kTmFtZV0gPSBkZWNvcmF0aW9ucy5yZW5hbWVkO1xuICAgICAgb2N0b2tpdC5sb2cud2FybihcbiAgICAgICAgYG9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gb2N0b2tpdC4ke25ld1Njb3BlfS4ke25ld01ldGhvZE5hbWV9KClgXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGVjb3JhdGlvbnMuZGVwcmVjYXRlZCkge1xuICAgICAgb2N0b2tpdC5sb2cud2FybihkZWNvcmF0aW9ucy5kZXByZWNhdGVkKTtcbiAgICB9XG4gICAgaWYgKGRlY29yYXRpb25zLnJlbmFtZWRQYXJhbWV0ZXJzKSB7XG4gICAgICBjb25zdCBvcHRpb25zMiA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBhbGlhc10gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICAgIGRlY29yYXRpb25zLnJlbmFtZWRQYXJhbWV0ZXJzXG4gICAgICApKSB7XG4gICAgICAgIGlmIChuYW1lIGluIG9wdGlvbnMyKSB7XG4gICAgICAgICAgb2N0b2tpdC5sb2cud2FybihcbiAgICAgICAgICAgIGBcIiR7bmFtZX1cIiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBmb3IgXCJvY3Rva2l0LiR7c2NvcGV9LiR7bWV0aG9kTmFtZX0oKVwiLiBVc2UgXCIke2FsaWFzfVwiIGluc3RlYWRgXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIShhbGlhcyBpbiBvcHRpb25zMikpIHtcbiAgICAgICAgICAgIG9wdGlvbnMyW2FsaWFzXSA9IG9wdGlvbnMyW25hbWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgb3B0aW9uczJbbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXF1ZXN0V2l0aERlZmF1bHRzKG9wdGlvbnMyKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMoLi4uYXJncyk7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24od2l0aERlY29yYXRpb25zLCByZXF1ZXN0V2l0aERlZmF1bHRzKTtcbn1cbmV4cG9ydCB7XG4gIGVuZHBvaW50c1RvTWV0aG9kc1xufTtcbiIsImltcG9ydCB7IFZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uLmpzXCI7XG5pbXBvcnQgeyBlbmRwb2ludHNUb01ldGhvZHMgfSBmcm9tIFwiLi9lbmRwb2ludHMtdG8tbWV0aG9kcy5qc1wiO1xuZnVuY3Rpb24gcmVzdEVuZHBvaW50TWV0aG9kcyhvY3Rva2l0KSB7XG4gIGNvbnN0IGFwaSA9IGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0KTtcbiAgcmV0dXJuIHtcbiAgICByZXN0OiBhcGlcbiAgfTtcbn1cbnJlc3RFbmRwb2ludE1ldGhvZHMuVkVSU0lPTiA9IFZFUlNJT047XG5mdW5jdGlvbiBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzKG9jdG9raXQpIHtcbiAgY29uc3QgYXBpID0gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQpO1xuICByZXR1cm4ge1xuICAgIC4uLmFwaSxcbiAgICByZXN0OiBhcGlcbiAgfTtcbn1cbmxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMuVkVSU0lPTiA9IFZFUlNJT047XG5leHBvcnQge1xuICBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzLFxuICByZXN0RW5kcG9pbnRNZXRob2RzXG59O1xuIiwiY29uc3QgVkVSU0lPTiA9IFwiMjEuMC4wXCI7XG5leHBvcnQge1xuICBWRVJTSU9OXG59O1xuIiwiaW1wb3J0IHsgT2N0b2tpdCBhcyBDb3JlIH0gZnJvbSBcIkBvY3Rva2l0L2NvcmVcIjtcbmltcG9ydCB7IHJlcXVlc3RMb2cgfSBmcm9tIFwiQG9jdG9raXQvcGx1Z2luLXJlcXVlc3QtbG9nXCI7XG5pbXBvcnQge1xuICBwYWdpbmF0ZVJlc3Rcbn0gZnJvbSBcIkBvY3Rva2l0L3BsdWdpbi1wYWdpbmF0ZS1yZXN0XCI7XG5pbXBvcnQgeyBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzIH0gZnJvbSBcIkBvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNcIjtcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uLmpzXCI7XG5jb25zdCBPY3Rva2l0ID0gQ29yZS5wbHVnaW4ocmVxdWVzdExvZywgbGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcywgcGFnaW5hdGVSZXN0KS5kZWZhdWx0cyhcbiAge1xuICAgIHVzZXJBZ2VudDogYG9jdG9raXQtcmVzdC5qcy8ke1ZFUlNJT059YFxuICB9XG4pO1xuZXhwb3J0IHtcbiAgT2N0b2tpdFxufTtcbiIsImltcG9ydCB7IF9fYXdhaXRlciB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgZGVidWdGYWN0b3J5IH0gZnJvbSAnLi9kZWJ1Zyc7XG5pbXBvcnQgeyB3cml0ZUZpbGVBc3luYywgZmlsZUV4aXN0cyB9IGZyb20gJy4vdXRpbHMnO1xuY29uc3QgZGVidWcgPSBkZWJ1Z0ZhY3RvcnkoJ3VwZGF0ZS1wYWNrYWdlJyk7XG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlUGFja2FnZUpzb24ocGF0aCwgcGFydGlhbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0cyA9IHlpZWxkIGZpbGVFeGlzdHMocGF0aCk7XG4gICAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgICAgICBkZWJ1ZyhgRmlsZSBub3QgZXhpc3RzICR7cGF0aH1gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvbGQgPSByZXF1aXJlKHBhdGgpO1xuICAgICAgICB5aWVsZCB3cml0ZUZpbGVBc3luYyhwYXRoLCBKU09OLnN0cmluZ2lmeShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9sZCksIHBhcnRpYWwpLCBudWxsLCAyKSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cGRhdGUtcGFja2FnZS5qcy5tYXAiLCJpbXBvcnQgeyBfX2F3YWl0ZXIgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gJ2NsaXBhbmlvbic7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjb2xvcmV0dGUnO1xuaW1wb3J0IHsgZ2V0TmFwaUNvbmZpZyB9IGZyb20gJy4vY29uc3RzJztcbmltcG9ydCB7IGRlYnVnRmFjdG9yeSB9IGZyb20gJy4vZGVidWcnO1xuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICcuL3NwYXduJztcbmltcG9ydCB7IHVwZGF0ZVBhY2thZ2VKc29uIH0gZnJvbSAnLi91cGRhdGUtcGFja2FnZSc7XG5jb25zdCBkZWJ1ZyA9IGRlYnVnRmFjdG9yeSgndmVyc2lvbicpO1xuZXhwb3J0IGNsYXNzIFZlcnNpb25Db21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMucHJlZml4ID0gT3B0aW9uLlN0cmluZyhgLXAsLS1wcmVmaXhgLCAnbnBtJyk7XG4gICAgICAgIHRoaXMuY29uZmlnRmlsZU5hbWUgPSBPcHRpb24uU3RyaW5nKCctYywtLWNvbmZpZycpO1xuICAgIH1cbiAgICBzdGF0aWMgdXBkYXRlUGFja2FnZUpzb24ocHJlZml4LCBjb25maWdGaWxlTmFtZSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgeyB2ZXJzaW9uLCBwbGF0Zm9ybXMgfSA9IGdldE5hcGlDb25maWcoY29uZmlnRmlsZU5hbWUpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwbGF0Zm9ybURldGFpbCBvZiBwbGF0Zm9ybXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwa2dEaXIgPSBqb2luKHByb2Nlc3MuY3dkKCksIHByZWZpeCwgcGxhdGZvcm1EZXRhaWwucGxhdGZvcm1BcmNoQUJJKTtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhgVXBkYXRlIHZlcnNpb24gdG8gJHtjaGFsay5ncmVlbkJyaWdodCh2ZXJzaW9uKX0gaW4gWyR7Y2hhbGsueWVsbG93QnJpZ2h0KHBrZ0Rpcil9XWApO1xuICAgICAgICAgICAgICAgIHlpZWxkIHVwZGF0ZVBhY2thZ2VKc29uKGpvaW4ocGtnRGlyLCAncGFja2FnZS5qc29uJyksIHtcbiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGV4ZWN1dGUoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB5aWVsZCBWZXJzaW9uQ29tbWFuZC51cGRhdGVQYWNrYWdlSnNvbih0aGlzLnByZWZpeCwgdGhpcy5jb25maWdGaWxlTmFtZSk7XG4gICAgICAgICAgICB5aWVsZCBzcGF3bignZ2l0IGFkZCAuJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblZlcnNpb25Db21tYW5kLnVzYWdlID0gQ29tbWFuZC5Vc2FnZSh7XG4gICAgZGVzY3JpcHRpb246ICdVcGRhdGUgdmVyc2lvbnMgaW4gY3JlYXRlZCBucG0gZGlyJyxcbn0pO1xuVmVyc2lvbkNvbW1hbmQucGF0aHMgPSBbWyd2ZXJzaW9uJ11dO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiLCJpbXBvcnQgeyBfX2F3YWl0ZXIgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHN0YXRTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgT2N0b2tpdCB9IGZyb20gJ0BvY3Rva2l0L3Jlc3QnO1xuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY2xpcGFuaW9uJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NvbG9yZXR0ZSc7XG5pbXBvcnQgeyBnZXROYXBpQ29uZmlnIH0gZnJvbSAnLi9jb25zdHMnO1xuaW1wb3J0IHsgZGVidWdGYWN0b3J5IH0gZnJvbSAnLi9kZWJ1Zyc7XG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJy4vc3Bhd24nO1xuaW1wb3J0IHsgdXBkYXRlUGFja2FnZUpzb24gfSBmcm9tICcuL3VwZGF0ZS1wYWNrYWdlJztcbmltcG9ydCB7IHJlYWRGaWxlQXN5bmMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFZlcnNpb25Db21tYW5kIH0gZnJvbSAnLi92ZXJzaW9uJztcbmNvbnN0IGRlYnVnID0gZGVidWdGYWN0b3J5KCdwcmVwdWJsaXNoJyk7XG5leHBvcnQgY2xhc3MgUHJlUHVibGlzaENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5wcmVmaXggPSBPcHRpb24uU3RyaW5nKGAtcCwtLXByZWZpeGAsICducG0nKTtcbiAgICAgICAgdGhpcy50YWdTdHlsZSA9IE9wdGlvbi5TdHJpbmcoJy0tdGFnc3R5bGUsLXQnLCAnbGVybmEnKTtcbiAgICAgICAgdGhpcy5jb25maWdGaWxlTmFtZSA9IE9wdGlvbi5TdHJpbmcoJy1jLC0tY29uZmlnJyk7XG4gICAgICAgIHRoaXMuaXNEcnlSdW4gPSBPcHRpb24uQm9vbGVhbignLS1kcnktcnVuJywgZmFsc2UpO1xuICAgICAgICB0aGlzLnNraXBHSFJlbGVhc2UgPSBPcHRpb24uQm9vbGVhbignLS1za2lwLWdoLXJlbGVhc2UnLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuZ2hSZWxlYXNlTmFtZSA9IE9wdGlvbi5TdHJpbmcoJy0tZ2gtcmVsZWFzZS1uYW1lJyk7XG4gICAgICAgIHRoaXMuZXhpc3RpbmdSZWxlYXNlSWQgPSBPcHRpb24uU3RyaW5nKCctLWdoLXJlbGVhc2UtaWQnKTtcbiAgICB9XG4gICAgZXhlY3V0ZSgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgcGFja2FnZUpzb25QYXRoLCBwbGF0Zm9ybXMsIHZlcnNpb24sIHBhY2thZ2VOYW1lLCBiaW5hcnlOYW1lLCBucG1DbGllbnQsIH0gPSBnZXROYXBpQ29uZmlnKHRoaXMuY29uZmlnRmlsZU5hbWUpO1xuICAgICAgICAgICAgZGVidWcoYFVwZGF0ZSBvcHRpb25hbERlcGVuZGVuY2llcyBpbiBbJHtwYWNrYWdlSnNvblBhdGh9XWApO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzRHJ5UnVuKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgVmVyc2lvbkNvbW1hbmQudXBkYXRlUGFja2FnZUpzb24odGhpcy5wcmVmaXgsIHRoaXMuY29uZmlnRmlsZU5hbWUpO1xuICAgICAgICAgICAgICAgIHlpZWxkIHVwZGF0ZVBhY2thZ2VKc29uKHBhY2thZ2VKc29uUGF0aCwge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25hbERlcGVuZGVuY2llczogcGxhdGZvcm1zLnJlZHVjZSgoYWNjLCBjdXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY1tgJHtwYWNrYWdlTmFtZX0tJHtjdXIucGxhdGZvcm1BcmNoQUJJfWBdID0gYCR7dmVyc2lvbn1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgICAgICAgICAgfSwge30pLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeyBvd25lciwgcmVwbywgcGtnSW5mbywgb2N0b2tpdCB9ID0gdGhpcy5leGlzdGluZ1JlbGVhc2VJZFxuICAgICAgICAgICAgICAgID8geWllbGQgdGhpcy5nZXRSZXBvSW5mbyhwYWNrYWdlTmFtZSwgdmVyc2lvbilcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHRoaXMuY3JlYXRlR2hSZWxlYXNlKHBhY2thZ2VOYW1lLCB2ZXJzaW9uKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGxhdGZvcm1EZXRhaWwgb2YgcGxhdGZvcm1zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGtnRGlyID0gam9pbihwcm9jZXNzLmN3ZCgpLCB0aGlzLnByZWZpeCwgYCR7cGxhdGZvcm1EZXRhaWwucGxhdGZvcm1BcmNoQUJJfWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVuYW1lID0gYCR7YmluYXJ5TmFtZX0uJHtwbGF0Zm9ybURldGFpbC5wbGF0Zm9ybUFyY2hBQkl9Lm5vZGVgO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRzdFBhdGggPSBqb2luKHBrZ0RpciwgZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0RyeVJ1bikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWV4aXN0c1N5bmMoZHN0UGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgWyR7Y2hhbGsueWVsbG93QnJpZ2h0KGRzdFBhdGgpfV0gZG9lc24ndCBleGlzdGApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeWllbGQgc3Bhd24oYCR7bnBtQ2xpZW50fSBwdWJsaXNoYCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3dkOiBwa2dEaXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNraXBHSFJlbGVhc2UgJiYgcmVwbyAmJiBvd25lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoYFN0YXJ0IHVwbG9hZCBbJHtjaGFsay5ncmVlbkJyaWdodChkc3RQYXRoKX1dIHRvIEdpdGh1YiByZWxlYXNlLCBbJHtjaGFsay5ncmVlbkJyaWdodChwa2dJbmZvLnRhZyl9XWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWxlYXNlSWQgPSB0aGlzLmV4aXN0aW5nUmVsZWFzZUlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTnVtYmVyKHRoaXMuZXhpc3RpbmdSZWxlYXNlSWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHlpZWxkIG9jdG9raXQucmVwb3MuZ2V0UmVsZWFzZUJ5VGFnKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG86IHJlcG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcjogb3duZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWc6IHBrZ0luZm8udGFnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSkuZGF0YS5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkc3RGaWxlU3RhdHMgPSBzdGF0U3luYyhkc3RQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhc3NldEluZm8gPSB5aWVsZCBvY3Rva2l0LnJlcG9zLnVwbG9hZFJlbGVhc2VBc3NldCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyOiBvd25lcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbzogcmVwbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZmlsZW5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VfaWQ6IHJlbGVhc2VJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFUeXBlOiB7IGZvcm1hdDogJ3JhdycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQtbGVuZ3RoJzogZHN0RmlsZVN0YXRzLnNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogeWllbGQgcmVhZEZpbGVBc3luYyhkc3RQYXRoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oYCR7Y2hhbGsuZ3JlZW4oZHN0UGF0aCl9IHVwbG9hZCBzdWNjZXNzYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKGBEb3dubG9hZCB1cmw6ICR7Y2hhbGsuYmx1ZUJyaWdodChhc3NldEluZm8uZGF0YS5icm93c2VyX2Rvd25sb2FkX3VybCl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKGBQYXJhbTogJHtKU09OLnN0cmluZ2lmeSh7IG93bmVyLCByZXBvLCB0YWc6IHBrZ0luZm8udGFnLCBmaWxlbmFtZTogZHN0UGF0aCB9LCBudWxsLCAyKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY3JlYXRlR2hSZWxlYXNlKHBhY2thZ2VOYW1lLCB2ZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5za2lwR0hSZWxlYXNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgb3duZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHJlcG86IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHBrZ0luZm86IHsgbmFtZTogbnVsbCwgdmVyc2lvbjogbnVsbCwgdGFnOiBudWxsIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgcmVwbywgb3duZXIsIHBrZ0luZm8sIG9jdG9raXQgfSA9IHlpZWxkIHRoaXMuZ2V0UmVwb0luZm8ocGFja2FnZU5hbWUsIHZlcnNpb24pO1xuICAgICAgICAgICAgaWYgKCFyZXBvIHx8ICFvd25lcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG93bmVyOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICByZXBvOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBwa2dJbmZvOiB7IG5hbWU6IG51bGwsIHZlcnNpb246IG51bGwsIHRhZzogbnVsbCB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNEcnlSdW4pIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBvY3Rva2l0LnJlcG9zLmNyZWF0ZVJlbGVhc2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnX25hbWU6IHBrZ0luZm8udGFnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5naFJlbGVhc2VOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlcmVsZWFzZTogdmVyc2lvbi5pbmNsdWRlcygnYWxwaGEnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24uaW5jbHVkZXMoJ2JldGEnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24uaW5jbHVkZXMoJ3JjJyksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhgUGFyYW1zOiAke0pTT04uc3RyaW5naWZ5KHsgb3duZXIsIHJlcG8sIHRhZ19uYW1lOiBwa2dJbmZvLnRhZyB9LCBudWxsLCAyKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBvd25lciwgcmVwbywgcGtnSW5mbywgb2N0b2tpdCB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0UmVwb0luZm8ocGFja2FnZU5hbWUsIHZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRDb21taXQgPSAoeWllbGQgc3Bhd24oJ2dpdCBsb2cgLTEgLS1wcmV0dHk9JUInKSlcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoJ3V0ZjgnKVxuICAgICAgICAgICAgICAgIC50cmltKCk7XG4gICAgICAgICAgICBjb25zdCB7IEdJVEhVQl9SRVBPU0lUT1JZIH0gPSBwcm9jZXNzLmVudjtcbiAgICAgICAgICAgIGlmICghR0lUSFVCX1JFUE9TSVRPUlkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBvd25lcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcmVwbzogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcGtnSW5mbzogeyBuYW1lOiBudWxsLCB2ZXJzaW9uOiBudWxsLCB0YWc6IG51bGwgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVidWcoYEdpdGh1YiByZXBvc2l0b3J5OiAke0dJVEhVQl9SRVBPU0lUT1JZfWApO1xuICAgICAgICAgICAgY29uc3QgW293bmVyLCByZXBvXSA9IEdJVEhVQl9SRVBPU0lUT1JZLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICBjb25zdCBvY3Rva2l0ID0gbmV3IE9jdG9raXQoe1xuICAgICAgICAgICAgICAgIGF1dGg6IHByb2Nlc3MuZW52LkdJVEhVQl9UT0tFTixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IHBrZ0luZm87XG4gICAgICAgICAgICBpZiAodGhpcy50YWdTdHlsZSA9PT0gJ2xlcm5hJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhY2thZ2VzVG9QdWJsaXNoID0gaGVhZENvbW1pdFxuICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGxpbmUpID0+IGxpbmUudHJpbSgpKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChsaW5lLCBpbmRleCkgPT4gbGluZS5sZW5ndGggJiYgaW5kZXgpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGxpbmUpID0+IGxpbmUuc3Vic3RyaW5nKDIpKVxuICAgICAgICAgICAgICAgICAgICAubWFwKHRoaXMucGFyc2VUYWcpO1xuICAgICAgICAgICAgICAgIHBrZ0luZm8gPSBwYWNrYWdlc1RvUHVibGlzaC5maW5kKChwa2dJbmZvKSA9PiBwa2dJbmZvLm5hbWUgPT09IHBhY2thZ2VOYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoIXBrZ0luZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gcmVsZWFzZSBjb21taXQgZm91bmQgd2l0aCAke3BhY2thZ2VOYW1lfSwgb3JpZ2luYWwgY29tbWl0IGluZm86ICR7aGVhZENvbW1pdH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwa2dJbmZvID0ge1xuICAgICAgICAgICAgICAgICAgICB0YWc6IGB2JHt2ZXJzaW9ufWAsXG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhY2thZ2VOYW1lLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBvd25lciwgcmVwbywgcGtnSW5mbywgb2N0b2tpdCB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcGFyc2VUYWcodGFnKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRzID0gdGFnLnNwbGl0KCdAJyk7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBzZWdtZW50cy5wb3AoKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHNlZ21lbnRzLmpvaW4oJ0AnKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgICAgdGFnLFxuICAgICAgICB9O1xuICAgIH1cbn1cblByZVB1Ymxpc2hDb21tYW5kLnVzYWdlID0gQ29tbWFuZC5Vc2FnZSh7XG4gICAgZGVzY3JpcHRpb246ICdVcGRhdGUgcGFja2FnZS5qc29uIGFuZCBjb3B5IGFkZG9ucyBpbnRvIHBlciBwbGF0Zm9ybSBwYWNrYWdlcycsXG59KTtcblByZVB1Ymxpc2hDb21tYW5kLnBhdGhzID0gW1sncHJlcHVibGlzaCddXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByZS1wdWJsaXNoLmpzLm1hcCIsImltcG9ydCB7IF9fYXdhaXRlciB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY2xpcGFuaW9uJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NvbG9yZXR0ZSc7XG5pbXBvcnQgaW5xdWlyZXIgZnJvbSAnaW5xdWlyZXInO1xuaW1wb3J0IHsgbG9hZCwgZHVtcCB9IGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IHsgZGVidWdGYWN0b3J5IH0gZnJvbSAnLi9kZWJ1Zyc7XG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJy4vc3Bhd24nO1xuaW1wb3J0IHsgcmVhZEZpbGVBc3luYywgd3JpdGVGaWxlQXN5bmMgfSBmcm9tICcuL3V0aWxzJztcbmNvbnN0IGRlYnVnID0gZGVidWdGYWN0b3J5KCdyZW5hbWUnKTtcbmV4cG9ydCBjbGFzcyBSZW5hbWVDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IE9wdGlvbi5TdHJpbmcoJy1uJywge1xuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgbmV3IG5hbWUgb2YgdGhlIHByb2plY3QnLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYXBpTmFtZSA9IE9wdGlvbi5TdHJpbmcoJy0tbmFwaS1uYW1lJywge1xuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgbmV3IG5hcGkgYWRkb24gbmFtZScsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlcG9zaXRvcnkgPSBPcHRpb24uU3RyaW5nKCctLXJlcG9zaXRvcnknLCB7XG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSByZXBvc2l0b3J5IG9mIHRoZSBwYWNrYWdlJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBPcHRpb24uU3RyaW5nKCctZCwtLWRlc2NyaXB0aW9uJywge1xuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgZGVzY3JpcHRpb24gb2YgdGhlIHBhY2thZ2UnLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jd2QgPSBPcHRpb24uU3RyaW5nKHtcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGV4ZWN1dGUoKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjd2QgPSAoX2EgPSB0aGlzLmN3ZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcHJvY2Vzcy5jd2QoKTtcbiAgICAgICAgICAgIGNvbnN0IHBhY2thZ2VKc29uID0geWllbGQgcmVhZEZpbGVBc3luYyhqb2luKGN3ZCwgJ3BhY2thZ2UuanNvbicpLCAndXRmOCcpO1xuICAgICAgICAgICAgY29uc3QgcGFja2FnZUpzb25EYXRhID0gSlNPTi5wYXJzZShwYWNrYWdlSnNvbik7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gKF9iID0gdGhpcy5uYW1lKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAoeWllbGQgaW5xdWlyZXIucHJvbXB0KHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgICAgICAgICBzdWZmaXg6IGNoYWxrLmRpbSgnIG5hbWUgZmllbGQgaW4gcGFja2FnZS5qc29uJyksXG4gICAgICAgICAgICB9KSkubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IG5hcGlOYW1lID0gKF9jID0gdGhpcy5uYXBpTmFtZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogKHlpZWxkIGlucXVpcmVyLnByb21wdCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ25hcGkgbmFtZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBuYW1lLnNwbGl0KCcvJylbMV0sXG4gICAgICAgICAgICB9KSlbJ25hcGkgbmFtZSddO1xuICAgICAgICAgICAgZGVidWcoJ25hbWU6ICVzLCBuYXBpIG5hbWU6ICVzJywgbmFtZSwgbmFwaU5hbWUpO1xuICAgICAgICAgICAgcGFja2FnZUpzb25EYXRhLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgcGFja2FnZUpzb25EYXRhLm5hcGkubmFtZSA9IG5hcGlOYW1lO1xuICAgICAgICAgICAgY29uc3QgcmVwb3NpdG9yeSA9IChfZCA9IHRoaXMucmVwb3NpdG9yeSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogKHlpZWxkIGlucXVpcmVyLnByb21wdCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3JlcG9zaXRvcnknLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgICAgICAgICAgc3VmZml4OiBjaGFsay5kaW0oJyBMZWF2ZSBlbXB0eSB0byBza2lwJyksXG4gICAgICAgICAgICB9KSkucmVwb3NpdG9yeTtcbiAgICAgICAgICAgIGlmIChyZXBvc2l0b3J5KSB7XG4gICAgICAgICAgICAgICAgcGFja2FnZUpzb25EYXRhLnJlcG9zaXRvcnkgPSByZXBvc2l0b3J5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSAoX2UgPSB0aGlzLmRlc2NyaXB0aW9uKSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiAoeWllbGQgaW5xdWlyZXIucHJvbXB0KHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgICAgICAgICAgc3VmZml4OiBjaGFsay5kaW0oJyBMZWF2ZSBlbXB0eSB0byBza2lwJyksXG4gICAgICAgICAgICB9KSkuZGVzY3JpcHRpb247XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICBwYWNrYWdlSnNvbkRhdGEuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHlpZWxkIHdyaXRlRmlsZUFzeW5jKGpvaW4oY3dkLCAncGFja2FnZS5qc29uJyksIEpTT04uc3RyaW5naWZ5KHBhY2thZ2VKc29uRGF0YSwgbnVsbCwgMikpO1xuICAgICAgICAgICAgY29uc3QgQ0kgPSB5aWVsZCByZWFkRmlsZUFzeW5jKGpvaW4oY3dkLCAnLmdpdGh1YicsICd3b3JrZmxvd3MnLCAnQ0kueW1sJyksICd1dGY4Jyk7XG4gICAgICAgICAgICBjb25zdCBDSU9iamVjdCA9IGxvYWQoQ0kpO1xuICAgICAgICAgICAgQ0lPYmplY3QuZW52LkFQUF9OQU1FID0gbmFwaU5hbWU7XG4gICAgICAgICAgICB5aWVsZCB3cml0ZUZpbGVBc3luYyhqb2luKGN3ZCwgJy5naXRodWInLCAnd29ya2Zsb3dzJywgJ0NJLnltbCcpLCBkdW1wKENJT2JqZWN0LCB7XG4gICAgICAgICAgICAgICAgbGluZVdpZHRoOiAxMDAwLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgbGV0IHRvbWxDb250ZW50ID0geWllbGQgcmVhZEZpbGVBc3luYyhqb2luKGN3ZCwgJ0NhcmdvLnRvbWwnKSwgJ3V0ZjgnKTtcbiAgICAgICAgICAgIHRvbWxDb250ZW50ID0gdG9tbENvbnRlbnQucmVwbGFjZSgnbmFtZSA9IFwibmFwaS1wYWNrYWdlLXRlbXBsYXRlXCInLCBgbmFtZSA9IFwiJHtuYXBpTmFtZX1cImApO1xuICAgICAgICAgICAgeWllbGQgd3JpdGVGaWxlQXN5bmMoam9pbihjd2QsICdDYXJnby50b21sJyksIHRvbWxDb250ZW50KTtcbiAgICAgICAgICAgIHlpZWxkIHNwYXduKCduYXBpIGNyZWF0ZS1ucG0tZGlyIC10IC4nKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuUmVuYW1lQ29tbWFuZC5wYXRocyA9IFtbJ3JlbmFtZSddXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlbmFtZS5qcy5tYXAiLCJpbXBvcnQgeyBfX2F3YWl0ZXIgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHNwYXduU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY2xpcGFuaW9uJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NvbG9yZXR0ZSc7XG5pbXBvcnQgeyBnZXROYXBpQ29uZmlnIH0gZnJvbSAnLi9jb25zdHMnO1xuaW1wb3J0IHsgZGVidWdGYWN0b3J5IH0gZnJvbSAnLi9kZWJ1Zyc7XG5pbXBvcnQgeyBVbmlBcmNoc0J5UGxhdGZvcm0gfSBmcm9tICcuL3BhcnNlLXRyaXBsZSc7XG5pbXBvcnQgeyBmaWxlRXhpc3RzIH0gZnJvbSAnLi91dGlscyc7XG5jb25zdCBkZWJ1ZyA9IGRlYnVnRmFjdG9yeSgndW5pdmVyc2FsJyk7XG5leHBvcnQgY2xhc3MgVW5pdmVyc2FsQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnNvdXJjZURpciA9IE9wdGlvbi5TdHJpbmcoJy1kLC0tZGlyJywgJ2FydGlmYWN0cycpO1xuICAgICAgICB0aGlzLmRpc3REaXIgPSBPcHRpb24uU3RyaW5nKCctLWRpc3QnLCAnLicpO1xuICAgICAgICB0aGlzLmNvbmZpZ0ZpbGVOYW1lID0gT3B0aW9uLlN0cmluZygnLWMsLS1jb25maWcnKTtcbiAgICAgICAgdGhpcy5idWlsZFVuaXZlcnNhbCA9IHtcbiAgICAgICAgICAgIGRhcndpbjogKGJpbk5hbWUsIHNyY0ZpbGVzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0UGF0aCA9IGpvaW4odGhpcy5kaXN0RGlyLCBgJHtiaW5OYW1lfS4ke3Byb2Nlc3MucGxhdGZvcm19LXVuaXZlcnNhbC5ub2RlYCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3JjUGF0aHMgPSBzcmNGaWxlcy5tYXAoKGYpID0+IGpvaW4odGhpcy5zb3VyY2VEaXIsIGYpKTtcbiAgICAgICAgICAgICAgICBzcGF3blN5bmMoJ2xpcG8nLCBbJy1jcmVhdGUnLCAnLW91dHB1dCcsIG91dFBhdGgsIC4uLnNyY1BhdGhzXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dFBhdGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBleGVjdXRlKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCB7IHBsYXRmb3JtcywgYmluYXJ5TmFtZSB9ID0gZ2V0TmFwaUNvbmZpZyh0aGlzLmNvbmZpZ0ZpbGVOYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldFBsYXRmb3JtID0gcGxhdGZvcm1zLmZpbmQoKHApID0+IHAucGxhdGZvcm0gPT09IHByb2Nlc3MucGxhdGZvcm0gJiYgcC5hcmNoID09PSAndW5pdmVyc2FsJyk7XG4gICAgICAgICAgICBpZiAoIXRhcmdldFBsYXRmb3JtKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJ3VuaXZlcnNhbCcgYXJjaCBmb3IgcGxhdGZvcm0gJyR7cHJvY2Vzcy5wbGF0Zm9ybX0nIG5vdCBmb3VuZCBpbiBjb25maWchYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzcmNGaWxlcyA9IChfYSA9IFVuaUFyY2hzQnlQbGF0Zm9ybVtwcm9jZXNzLnBsYXRmb3JtXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1hcCgoYSkgPT4gYCR7YmluYXJ5TmFtZX0uJHtwcm9jZXNzLnBsYXRmb3JtfS0ke2F9Lm5vZGVgKTtcbiAgICAgICAgICAgIGlmICghc3JjRmlsZXMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAndW5pdmVyc2FsJyBhcmNoIGZvciBwbGF0Zm9ybSAnJHtwcm9jZXNzLnBsYXRmb3JtfScgbm90IHN1cHBvcnRlZC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlYnVnKGBMb29raW5nIHVwIHNvdXJjZSBiaW5hcmllcyB0byBjb21iaW5lOiAke2NoYWxrLnllbGxvd0JyaWdodChzcmNGaWxlcy5qb2luKCcsICcpKX1gKTtcbiAgICAgICAgICAgIGNvbnN0IHNyY0ZpbGVMb29rdXAgPSB5aWVsZCBQcm9taXNlLmFsbChzcmNGaWxlcy5tYXAoKGYpID0+IGZpbGVFeGlzdHMoam9pbih0aGlzLnNvdXJjZURpciwgZikpKSk7XG4gICAgICAgICAgICBjb25zdCBub3RGb3VuZEZpbGVzID0gc3JjRmlsZXMuZmlsdGVyKChfZiwgaSkgPT4gIXNyY0ZpbGVMb29rdXBbaV0pO1xuICAgICAgICAgICAgaWYgKG5vdEZvdW5kRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFNvbWUgYmluYXJ5IGZpbGVzIHdlcmUgbm90IGZvdW5kOiAke0pTT04uc3RyaW5naWZ5KG5vdEZvdW5kRmlsZXMpfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb3V0UGF0aCA9IHRoaXMuYnVpbGRVbml2ZXJzYWxbcHJvY2Vzcy5wbGF0Zm9ybV0oYmluYXJ5TmFtZSwgc3JjRmlsZXMpO1xuICAgICAgICAgICAgZGVidWcoYFByb2R1Y2VkIHVuaXZlcnNhbCBiaW5hcnk6ICR7b3V0UGF0aH1gKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuVW5pdmVyc2FsQ29tbWFuZC51c2FnZSA9IENvbW1hbmQuVXNhZ2Uoe1xuICAgIGRlc2NyaXB0aW9uOiAnQ29tYmluZSBidWlsdCBiaW5hcmllcyB0byB1bml2ZXJzYWwgYmluYXJpZXMnLFxufSk7XG5Vbml2ZXJzYWxDb21tYW5kLnBhdGhzID0gW1sndW5pdmVyc2FsJ11dO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dW5pdmVyc2FsLmpzLm1hcCIsImltcG9ydCAnY29yZS1qcy9lcy9zdHJpbmcvcmVwbGFjZS1hbGwnO1xuaW1wb3J0IHsgQ2xpIH0gZnJvbSAnY2xpcGFuaW9uJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi9wYWNrYWdlLmpzb24nO1xuaW1wb3J0IHsgQXJ0aWZhY3RzQ29tbWFuZCB9IGZyb20gJy4vYXJ0aWZhY3RzJztcbmltcG9ydCB7IEJ1aWxkQ29tbWFuZCB9IGZyb20gJy4vYnVpbGQnO1xuaW1wb3J0IHsgQ3JlYXRlTnBtRGlyQ29tbWFuZCB9IGZyb20gJy4vY3JlYXRlLW5wbS1kaXInO1xuaW1wb3J0IHsgSGVscENvbW1hbmQgfSBmcm9tICcuL2hlbHAnO1xuaW1wb3J0IHsgTmV3UHJvamVjdENvbW1hbmQgfSBmcm9tICcuL25ldyc7XG5pbXBvcnQgeyBQcmVQdWJsaXNoQ29tbWFuZCB9IGZyb20gJy4vcHJlLXB1Ymxpc2gnO1xuaW1wb3J0IHsgUmVuYW1lQ29tbWFuZCB9IGZyb20gJy4vcmVuYW1lJztcbmltcG9ydCB7IFVuaXZlcnNhbENvbW1hbmQgfSBmcm9tICcuL3VuaXZlcnNhbCc7XG5pbXBvcnQgeyBWZXJzaW9uQ29tbWFuZCB9IGZyb20gJy4vdmVyc2lvbic7XG5jb25zdCBjbGkgPSBuZXcgQ2xpKHtcbiAgICBiaW5hcnlOYW1lOiAnbmFwaScsXG4gICAgYmluYXJ5VmVyc2lvbjogdmVyc2lvbixcbn0pO1xuY2xpLnJlZ2lzdGVyKEFydGlmYWN0c0NvbW1hbmQpO1xuY2xpLnJlZ2lzdGVyKEJ1aWxkQ29tbWFuZCk7XG5jbGkucmVnaXN0ZXIoQ3JlYXRlTnBtRGlyQ29tbWFuZCk7XG5jbGkucmVnaXN0ZXIoUHJlUHVibGlzaENvbW1hbmQpO1xuY2xpLnJlZ2lzdGVyKFZlcnNpb25Db21tYW5kKTtcbmNsaS5yZWdpc3RlcihVbml2ZXJzYWxDb21tYW5kKTtcbmNsaS5yZWdpc3RlcihOZXdQcm9qZWN0Q29tbWFuZCk7XG5jbGkucmVnaXN0ZXIoUmVuYW1lQ29tbWFuZCk7XG5jbGkucmVnaXN0ZXIoSGVscENvbW1hbmQpO1xuY2xpXG4gICAgLnJ1bihwcm9jZXNzLmFyZ3Yuc2xpY2UoMiksIE9iamVjdC5hc3NpZ24oe30sIENsaS5kZWZhdWx0Q29udGV4dCkpXG4gICAgLnRoZW4oKHN0YXR1cykgPT4ge1xuICAgIHByb2Nlc3MuZXhpdChzdGF0dXMpO1xufSlcbiAgICAuY2F0Y2goKGUpID0+IHtcbiAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiY29uc3Qgc2ltcGxlS2V5UmVnRXhwID0gL15bYS16QS1aX11bYS16QS1aMC05X10qJC87XG5mdW5jdGlvbiBnZXRQcmludGFibGUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpXG4gICAgICAgIHJldHVybiBgbnVsbGA7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBgdW5kZWZpbmVkYDtcbiAgICBpZiAodmFsdWUgPT09IGBgKVxuICAgICAgICByZXR1cm4gYGFuIGVtcHR5IHN0cmluZ2A7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcpXG4gICAgICAgIHJldHVybiBgPCR7dmFsdWUudG9TdHJpbmcoKX0+YDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICAgIHJldHVybiBgYW4gYXJyYXlgO1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG59XG5mdW5jdGlvbiBnZXRQcmludGFibGVBcnJheSh2YWx1ZSwgY29uanVuY3Rpb24pIHtcbiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gYG5vdGhpbmdgO1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpXG4gICAgICAgIHJldHVybiBnZXRQcmludGFibGUodmFsdWVbMF0pO1xuICAgIGNvbnN0IHJlc3QgPSB2YWx1ZS5zbGljZSgwLCAtMSk7XG4gICAgY29uc3QgdHJhaWxpbmcgPSB2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBzZXBhcmF0b3IgPSB2YWx1ZS5sZW5ndGggPiAyXG4gICAgICAgID8gYCwgJHtjb25qdW5jdGlvbn0gYFxuICAgICAgICA6IGAgJHtjb25qdW5jdGlvbn0gYDtcbiAgICByZXR1cm4gYCR7cmVzdC5tYXAodmFsdWUgPT4gZ2V0UHJpbnRhYmxlKHZhbHVlKSkuam9pbihgLCBgKX0ke3NlcGFyYXRvcn0ke2dldFByaW50YWJsZSh0cmFpbGluZyl9YDtcbn1cbmZ1bmN0aW9uIGNvbXB1dGVLZXkoc3RhdGUsIGtleSkge1xuICAgIHZhciBfYSwgX2IsIF9jO1xuICAgIGlmICh0eXBlb2Yga2V5ID09PSBgbnVtYmVyYCkge1xuICAgICAgICByZXR1cm4gYCR7KF9hID0gc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLnApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGAuYH1bJHtrZXl9XWA7XG4gICAgfVxuICAgIGVsc2UgaWYgKHNpbXBsZUtleVJlZ0V4cC50ZXN0KGtleSkpIHtcbiAgICAgICAgcmV0dXJuIGAkeyhfYiA9IHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5wKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBgYH0uJHtrZXl9YDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBgJHsoX2MgPSBzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUucCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogYC5gfVske0pTT04uc3RyaW5naWZ5KGtleSl9XWA7XG4gICAgfVxufVxuZnVuY3Rpb24gcGx1cmFsKG4sIHNpbmd1bGFyLCBwbHVyYWwpIHtcbiAgICByZXR1cm4gbiA9PT0gMSA/IHNpbmd1bGFyIDogcGx1cmFsO1xufVxuXG5jb25zdCBjb2xvclN0cmluZ1JlZ0V4cCA9IC9eI1swLTlhLWZdezZ9JC9pO1xuY29uc3QgY29sb3JTdHJpbmdBbHBoYVJlZ0V4cCA9IC9eI1swLTlhLWZdezZ9KFswLTlhLWZdezJ9KT8kL2k7XG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDc1MjE3Lzg4MDcwM1xuY29uc3QgYmFzZTY0UmVnRXhwID0gL14oPzpbQS1aYS16MC05Ky9dezR9KSooPzpbQS1aYS16MC05Ky9dezJ9PT18W0EtWmEtejAtOSsvXXszfT0pPyQvO1xuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE0MTY2MTk0Lzg4MDcwM1xuY29uc3QgdXVpZDRSZWdFeHAgPSAvXlthLWYwLTldezh9LVthLWYwLTldezR9LTRbYS1mMC05XXszfS1bODlhQWJCXVthLWYwLTldezN9LVthLWYwLTldezEyfSQvaTtcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yODAyMjkwMS84ODA3MDMgKyBodHRwczovL3d3dy5kZWJ1Z2dleC5jb20vci9ibDhKMzV3TUtrNDhhN3VfXG5jb25zdCBpc284NjAxUmVnRXhwID0gL14oPzpbMS05XVxcZHszfSgtPykoPzooPzowWzEtOV18MVswLTJdKVxcMSg/OjBbMS05XXwxXFxkfDJbMC04XSl8KD86MFsxMy05XXwxWzAtMl0pXFwxKD86Mjl8MzApfCg/OjBbMTM1NzhdfDFbMDJdKSg/OlxcMSkzMXwwMFsxLTldfDBbMS05XVxcZHxbMTJdXFxkezJ9fDMoPzpbMC01XVxcZHw2WzAtNV0pKXwoPzpbMS05XVxcZCg/OjBbNDhdfFsyNDY4XVswNDhdfFsxMzU3OV1bMjZdKXwoPzpbMjQ2OF1bMDQ4XXxbMTM1NzldWzI2XSkwMCkoPzooLT8pMDIoPzpcXDIpMjl8LT8zNjYpKVQoPzpbMDFdXFxkfDJbMC0zXSkoOj8pWzAtNV1cXGQoPzpcXDNbMC01XVxcZCk/KD86WnxbKy1dWzAxXVxcZCg/OlxcM1swLTVdXFxkKT8pJC87XG5cbmZ1bmN0aW9uIHB1c2hFcnJvcih7IGVycm9ycywgcCB9ID0ge30sIG1lc3NhZ2UpIHtcbiAgICBlcnJvcnMgPT09IG51bGwgfHwgZXJyb3JzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvcnMucHVzaChgJHtwICE9PSBudWxsICYmIHAgIT09IHZvaWQgMCA/IHAgOiBgLmB9OiAke21lc3NhZ2V9YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gbWFrZVNldHRlcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiAodikgPT4ge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHY7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIG1ha2VDb2VyY2lvbkZuKHRhcmdldCwga2V5KSB7XG4gICAgcmV0dXJuICh2KSA9PiB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gdGFyZ2V0W2tleV07XG4gICAgICAgIHRhcmdldFtrZXldID0gdjtcbiAgICAgICAgcmV0dXJuIG1ha2VDb2VyY2lvbkZuKHRhcmdldCwga2V5KS5iaW5kKG51bGwsIHByZXZpb3VzKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gbWFrZUxhenlDb2VyY2lvbkZuKGZuLCBvcmlnLCBnZW5lcmF0b3IpIHtcbiAgICBjb25zdCBjb21taXQgPSAoKSA9PiB7XG4gICAgICAgIGZuKGdlbmVyYXRvcigpKTtcbiAgICAgICAgcmV0dXJuIHJldmVydDtcbiAgICB9O1xuICAgIGNvbnN0IHJldmVydCA9ICgpID0+IHtcbiAgICAgICAgZm4ob3JpZyk7XG4gICAgICAgIHJldHVybiBjb21taXQ7XG4gICAgfTtcbiAgICByZXR1cm4gY29tbWl0O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHZhbGlkYXRvciB0aGF0IGFsd2F5cyByZXR1cm5zIHRydWUgYW5kIG5ldmVyIHJlZmluZXMgdGhlIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGlzVW5rbm93bigpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNMaXRlcmFsKGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IGV4cGVjdGVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBFeHBlY3RlZCAke2dldFByaW50YWJsZShleHBlY3RlZCl9IChnb3QgJHtnZXRQcmludGFibGUodmFsdWUpfSlgKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBvbmx5IHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB0ZXN0ZWQgdmFsdWUgaXMgYSBzdHJpbmcuXG4gKiBSZWZpbmVzIHRoZSB0eXBlIHRvIGBzdHJpbmdgLlxuICovXG5mdW5jdGlvbiBpc1N0cmluZygpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IGBzdHJpbmdgKVxuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBFeHBlY3RlZCBhIHN0cmluZyAoZ290ICR7Z2V0UHJpbnRhYmxlKHZhbHVlKX0pYCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGlzRW51bShlbnVtU3BlYykge1xuICAgIGNvbnN0IHZhbHVlc0FycmF5ID0gQXJyYXkuaXNBcnJheShlbnVtU3BlYykgPyBlbnVtU3BlYyA6IE9iamVjdC52YWx1ZXMoZW51bVNwZWMpO1xuICAgIGNvbnN0IGlzQWxwaGFOdW0gPSB2YWx1ZXNBcnJheS5ldmVyeShpdGVtID0+IHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicpO1xuICAgIGNvbnN0IHZhbHVlcyA9IG5ldyBTZXQodmFsdWVzQXJyYXkpO1xuICAgIGlmICh2YWx1ZXMuc2l6ZSA9PT0gMSlcbiAgICAgICAgcmV0dXJuIGlzTGl0ZXJhbChbLi4udmFsdWVzXVswXSk7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlcy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQWxwaGFOdW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYEV4cGVjdGVkIG9uZSBvZiAke2dldFByaW50YWJsZUFycmF5KHZhbHVlc0FycmF5LCBgb3JgKX0gKGdvdCAke2dldFByaW50YWJsZSh2YWx1ZSl9KWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYEV4cGVjdGVkIGEgdmFsaWQgZW51bWVyYXRpb24gdmFsdWUgKGdvdCAke2dldFByaW50YWJsZSh2YWx1ZSl9KWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuY29uc3QgQk9PTEVBTl9DT0VSQ0lPTlMgPSBuZXcgTWFwKFtcbiAgICBbYHRydWVgLCB0cnVlXSxcbiAgICBbYFRydWVgLCB0cnVlXSxcbiAgICBbYDFgLCB0cnVlXSxcbiAgICBbMSwgdHJ1ZV0sXG4gICAgW2BmYWxzZWAsIGZhbHNlXSxcbiAgICBbYEZhbHNlYCwgZmFsc2VdLFxuICAgIFtgMGAsIGZhbHNlXSxcbiAgICBbMCwgZmFsc2VdLFxuXSk7XG4vKipcbiAqIENyZWF0ZSBhIHZhbGlkYXRvciB0aGF0IG9ubHkgcmV0dXJucyB0cnVlIHdoZW4gdGhlIHRlc3RlZCB2YWx1ZSBpcyBhXG4gKiBib29sZWFuLiBSZWZpbmVzIHRoZSB0eXBlIHRvIGBib29sZWFuYC5cbiAqXG4gKiBTdXBwb3J0cyBjb2VyY2lvbjpcbiAqIC0gJ3RydWUnIC8gJ1RydWUnIC8gJzEnIC8gMSB3aWxsIHR1cm4gdG8gYHRydWVgXG4gKiAtICdmYWxzZScgLyAnRmFsc2UnIC8gJzAnIC8gMCB3aWxsIHR1cm4gdG8gYGZhbHNlYFxuICovXG5mdW5jdGlvbiBpc0Jvb2xlYW4oKSB7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBgYm9vbGVhbmApIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuY29lcmNpb25zKSAhPT0gYHVuZGVmaW5lZGApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmNvZXJjaW9uKSA9PT0gYHVuZGVmaW5lZGApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgVW5ib3VuZCBjb2VyY2lvbiByZXN1bHRgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29lcmNpb24gPSBCT09MRUFOX0NPRVJDSU9OUy5nZXQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvZXJjaW9uICE9PSBgdW5kZWZpbmVkYCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuY29lcmNpb25zLnB1c2goWyhfYSA9IHN0YXRlLnApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGAuYCwgc3RhdGUuY29lcmNpb24uYmluZChudWxsLCBjb2VyY2lvbildKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBFeHBlY3RlZCBhIGJvb2xlYW4gKGdvdCAke2dldFByaW50YWJsZSh2YWx1ZSl9KWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4vKipcbiAqIENyZWF0ZSBhIHZhbGlkYXRvciB0aGF0IG9ubHkgcmV0dXJucyB0cnVlIHdoZW4gdGhlIHRlc3RlZCB2YWx1ZSBpcyBhXG4gKiBudW1iZXIgKGluY2x1ZGluZyBmbG9hdGluZyBudW1iZXJzOyB1c2UgYGNhc2NhZGVgIGFuZCBgaXNJbnRlZ2VyYCB0b1xuICogcmVzdHJpY3QgdGhlIHJhbmdlIGZ1cnRoZXIpLiBSZWZpbmVzIHRoZSB0eXBlIHRvIGBudW1iZXJgLlxuICpcbiAqIFN1cHBvcnRzIGNvZXJjaW9uLlxuICovXG5mdW5jdGlvbiBpc051bWJlcigpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IGBudW1iZXJgKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmNvZXJjaW9ucykgIT09IGB1bmRlZmluZWRgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5jb2VyY2lvbikgPT09IGB1bmRlZmluZWRgKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYFVuYm91bmQgY29lcmNpb24gcmVzdWx0YCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb2VyY2lvbjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gYHN0cmluZ2ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKF9iKSB7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNoZWNrIGFnYWluc3QgSlNPTi5zdHJpbmdpZnkgdGhhdCB0aGUgb3V0cHV0IGlzIHRoZSBzYW1lIHRvIGVuc3VyZSB0aGF0IHRoZSBudW1iZXIgY2FuIGJlIHNhZmVseSByZXByZXNlbnRlZCBpbiBKU1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09IGBudW1iZXJgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHZhbCkgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZXJjaW9uID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYFJlY2VpdmVkIGEgbnVtYmVyIHRoYXQgY2FuJ3QgYmUgc2FmZWx5IHJlcHJlc2VudGVkIGJ5IHRoZSBydW50aW1lICgke3ZhbHVlfSlgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2VyY2lvbiAhPT0gYHVuZGVmaW5lZGApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNvZXJjaW9ucy5wdXNoKFsoX2EgPSBzdGF0ZS5wKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBgLmAsIHN0YXRlLmNvZXJjaW9uLmJpbmQobnVsbCwgY29lcmNpb24pXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgYSBudW1iZXIgKGdvdCAke2dldFByaW50YWJsZSh2YWx1ZSl9KWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4vKipcbiAqIEltcG9ydGFudDogVGhpcyB2YWxpZGF0b3Igb25seSBtYWtlcyBzZW5zZSB3aGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aFxuICogY29lcmNpb24hIEl0IHdpbGwgYWx3YXlzIGVycm9yIHdoZW4gdXNlZCB3aXRob3V0LlxuICpcbiAqIENyZWF0ZSBhIHZhbGlkYXRvciB0aGF0IG9ubHkgcmV0dXJucyB0cnVlIHdoZW4gdGhlIHRlc3RlZCB2YWx1ZSBpcyBhXG4gKiBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBleHBlY3RlZCB0eXBlLiBSZWZpbmVzIHRoZSB0eXBlIHRvIHRoZVxuICogZXhwZWN0ZWQgdHlwZSwgYW5kIGNhc3RzIHRoZSB2YWx1ZSBpbnRvIGl0cyBpbm5lciB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaXNQYXlsb2FkKHNwZWMpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgKHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5jb2VyY2lvbnMpID09PSBgdW5kZWZpbmVkYClcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgVGhlIGlzUGF5bG9hZCBwcmVkaWNhdGUgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGNvZXJjaW9uIGVuYWJsZWRgKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RhdGUuY29lcmNpb24gPT09IGB1bmRlZmluZWRgKVxuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBVbmJvdW5kIGNvZXJjaW9uIHJlc3VsdGApO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gYHN0cmluZ2ApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYEV4cGVjdGVkIGEgc3RyaW5nIChnb3QgJHtnZXRQcmludGFibGUodmFsdWUpfSlgKTtcbiAgICAgICAgICAgIGxldCBpbm5lcjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaW5uZXIgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBFeHBlY3RlZCBhIEpTT04gc3RyaW5nIChnb3QgJHtnZXRQcmludGFibGUodmFsdWUpfSlgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZXIgPSB7IHZhbHVlOiBpbm5lciB9O1xuICAgICAgICAgICAgaWYgKCFzcGVjKGlubmVyLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKSwgeyBjb2VyY2lvbjogbWFrZUNvZXJjaW9uRm4od3JhcHBlciwgYHZhbHVlYCkgfSkpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHN0YXRlLmNvZXJjaW9ucy5wdXNoKFsoX2EgPSBzdGF0ZS5wKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBgLmAsIHN0YXRlLmNvZXJjaW9uLmJpbmQobnVsbCwgd3JhcHBlci52YWx1ZSldKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBvbmx5IHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB0ZXN0ZWQgdmFsdWUgaXMgYVxuICogdmFsaWQgZGF0ZS4gUmVmaW5lcyB0aGUgdHlwZSB0byBgRGF0ZWAuXG4gKlxuICogU3VwcG9ydHMgY29lcmNpb24gdmlhIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdHM6XG4gKiAtIElTTzg2MDAxIHN0cmluZ3NcbiAqIC0gVW5peCB0aW1lc3RhbXBzXG4gKi9cbmZ1bmN0aW9uIGlzRGF0ZSgpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuY29lcmNpb25zKSAhPT0gYHVuZGVmaW5lZGApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmNvZXJjaW9uKSA9PT0gYHVuZGVmaW5lZGApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgVW5ib3VuZCBjb2VyY2lvbiByZXN1bHRgKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvZXJjaW9uO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBgc3RyaW5nYCAmJiBpc284NjAxUmVnRXhwLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2VyY2lvbiA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBgc3RyaW5nYCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYikgeyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09IGBudW1iZXJgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcCA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IGBudW1iZXJgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRpbWVzdGFtcCAhPT0gYHVuZGVmaW5lZGApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzU2FmZUludGVnZXIodGltZXN0YW1wKSB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIodGltZXN0YW1wICogMTAwMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lcmNpb24gPSBuZXcgRGF0ZSh0aW1lc3RhbXAgKiAxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBSZWNlaXZlZCBhIHRpbWVzdGFtcCB0aGF0IGNhbid0IGJlIHNhZmVseSByZXByZXNlbnRlZCBieSB0aGUgcnVudGltZSAoJHt2YWx1ZX0pYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29lcmNpb24gIT09IGB1bmRlZmluZWRgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jb2VyY2lvbnMucHVzaChbKF9hID0gc3RhdGUucCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogYC5gLCBzdGF0ZS5jb2VyY2lvbi5iaW5kKG51bGwsIGNvZXJjaW9uKV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYEV4cGVjdGVkIGEgZGF0ZSAoZ290ICR7Z2V0UHJpbnRhYmxlKHZhbHVlKX0pYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgb25seSByZXR1cm5zIHRydWUgd2hlbiB0aGUgdGVzdGVkIHZhbHVlIGlzIGFuXG4gKiBhcnJheSB3aG9zZSBhbGwgdmFsdWVzIG1hdGNoIHRoZSBwcm92aWRlZCBzdWJzcGVjLiBSZWZpbmVzIHRoZSB0eXBlIHRvXG4gKiBgQXJyYXk8VD5gLCB3aXRoIGBUYCBiZWluZyB0aGUgc3Vic3BlYyBpbmZlcnJlZCB0eXBlLlxuICpcbiAqIFN1cHBvcnRzIGNvZXJjaW9uIGlmIHRoZSBgZGVsaW1pdGVyYCBvcHRpb24gaXMgc2V0LCBpbiB3aGljaCBjYXNlIHN0cmluZ3NcbiAqIHdpbGwgYmUgc3BsaXQgYWNjb3JkaW5nbHkuXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkoc3BlYywgeyBkZWxpbWl0ZXIgfSA9IHt9KSB7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBgc3RyaW5nYCAmJiB0eXBlb2YgZGVsaW1pdGVyICE9PSBgdW5kZWZpbmVkYCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5jb2VyY2lvbnMpICE9PSBgdW5kZWZpbmVkYCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuY29lcmNpb24pID09PSBgdW5kZWZpbmVkYClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBVbmJvdW5kIGNvZXJjaW9uIHJlc3VsdGApO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KGRlbGltaXRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgYW4gYXJyYXkgKGdvdCAke2dldFByaW50YWJsZSh2YWx1ZSl9KWApO1xuICAgICAgICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSAwLCBUID0gdmFsdWUubGVuZ3RoOyB0IDwgVDsgKyt0KSB7XG4gICAgICAgICAgICAgICAgdmFsaWQgPSBzcGVjKHZhbHVlW3RdLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKSwgeyBwOiBjb21wdXRlS2V5KHN0YXRlLCB0KSwgY29lcmNpb246IG1ha2VDb2VyY2lvbkZuKHZhbHVlLCB0KSB9KSkgJiYgdmFsaWQ7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWxpZCAmJiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmVycm9ycykgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IG9yaWdpbmFsVmFsdWUpXG4gICAgICAgICAgICAgICAgc3RhdGUuY29lcmNpb25zLnB1c2goWyhfYSA9IHN0YXRlLnApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGAuYCwgc3RhdGUuY29lcmNpb24uYmluZChudWxsLCB2YWx1ZSldKTtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZDtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgb25seSByZXR1cm5zIHRydWUgd2hlbiB0aGUgdGVzdGVkIHZhbHVlIGlzIGFuXG4gKiBzZXQgd2hvc2UgYWxsIHZhbHVlcyBtYXRjaCB0aGUgcHJvdmlkZWQgc3Vic3BlYy4gUmVmaW5lcyB0aGUgdHlwZSB0b1xuICogYFNldDxUPmAsIHdpdGggYFRgIGJlaW5nIHRoZSBzdWJzcGVjIGluZmVycmVkIHR5cGUuXG4gKlxuICogU3VwcG9ydHMgY29lcmNpb24gZnJvbSBhcnJheXMgKG9yIGFueXRoaW5nIHRoYXQgY2FuIGJlIGNvZXJjZWQgaW50byBhblxuICogYXJyYXkpLlxuICovXG5mdW5jdGlvbiBpc1NldChzcGVjLCB7IGRlbGltaXRlciB9ID0ge30pIHtcbiAgICBjb25zdCBpc0FycmF5VmFsaWRhdG9yID0gaXNBcnJheShzcGVjLCB7IGRlbGltaXRlciB9KTtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKS50b1N0cmluZygpID09PSBgW29iamVjdCBTZXRdYCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5jb2VyY2lvbnMpICE9PSBgdW5kZWZpbmVkYCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuY29lcmNpb24pID09PSBgdW5kZWZpbmVkYClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBVbmJvdW5kIGNvZXJjaW9uIHJlc3VsdGApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbFZhbHVlcyA9IFsuLi52YWx1ZV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvZXJjZWRWYWx1ZXMgPSBbLi4udmFsdWVdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQXJyYXlWYWxpZGF0b3IoY29lcmNlZFZhbHVlcywgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSksIHsgY29lcmNpb246IHVuZGVmaW5lZCB9KSkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZVZhbHVlID0gKCkgPT4gY29lcmNlZFZhbHVlcy5zb21lKCh2YWwsIHQpID0+IHZhbCAhPT0gb3JpZ2luYWxWYWx1ZXNbdF0pXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBTZXQoY29lcmNlZFZhbHVlcylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmNvZXJjaW9ucy5wdXNoKFsoX2EgPSBzdGF0ZS5wKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBgLmAsIG1ha2VMYXp5Q29lcmNpb25GbihzdGF0ZS5jb2VyY2lvbiwgdmFsdWUsIHVwZGF0ZVZhbHVlKV0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViVmFsdWUgb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkID0gc3BlYyhzdWJWYWx1ZSwgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUpKSAmJiB2YWxpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsaWQgJiYgKHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5lcnJvcnMpID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmNvZXJjaW9ucykgIT09IGB1bmRlZmluZWRgKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmNvZXJjaW9uKSA9PT0gYHVuZGVmaW5lZGApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBVbmJvdW5kIGNvZXJjaW9uIHJlc3VsdGApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JlID0geyB2YWx1ZSB9O1xuICAgICAgICAgICAgICAgIGlmICghaXNBcnJheVZhbGlkYXRvcih2YWx1ZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSksIHsgY29lcmNpb246IG1ha2VDb2VyY2lvbkZuKHN0b3JlLCBgdmFsdWVgKSB9KSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5jb2VyY2lvbnMucHVzaChbKF9iID0gc3RhdGUucCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogYC5gLCBtYWtlTGF6eUNvZXJjaW9uRm4oc3RhdGUuY29lcmNpb24sIHZhbHVlLCAoKSA9PiBuZXcgU2V0KHN0b3JlLnZhbHVlKSldKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBFeHBlY3RlZCBhIHNldCAoZ290ICR7Z2V0UHJpbnRhYmxlKHZhbHVlKX0pYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgb25seSByZXR1cm5zIHRydWUgd2hlbiB0aGUgdGVzdGVkIHZhbHVlIGlzIGFuXG4gKiBtYXAgd2hvc2UgYWxsIHZhbHVlcyBtYXRjaCB0aGUgcHJvdmlkZWQgc3Vic3BlY3MuIFJlZmluZXMgdGhlIHR5cGUgdG9cbiAqIGBNYXA8VSwgVj5gLCB3aXRoIGBVYCBiZWluZyB0aGUga2V5IHN1YnNwZWMgaW5mZXJyZWQgdHlwZSBhbmQgYFZgIGJlaW5nXG4gKiB0aGUgdmFsdWUgc3Vic3BlYyBpbmZlcnJlZCB0eXBlLlxuICpcbiAqIFN1cHBvcnRzIGNvZXJjaW9uIGZyb20gYXJyYXkgb2YgdHVwbGVzIChvciBhbnl0aGluZyB0aGF0IGNhbiBiZSBjb2VyY2VkIGludG9cbiAqIGFuIGFycmF5IG9mIHR1cGxlcykuXG4gKi9cbmZ1bmN0aW9uIGlzTWFwKGtleVNwZWMsIHZhbHVlU3BlYykge1xuICAgIGNvbnN0IGlzQXJyYXlWYWxpZGF0b3IgPSBpc0FycmF5KGlzVHVwbGUoW2tleVNwZWMsIHZhbHVlU3BlY10pKTtcbiAgICBjb25zdCBpc1JlY29yZFZhbGlkYXRvciA9IGlzUmVjb3JkKHZhbHVlU3BlYywgeyBrZXlzOiBrZXlTcGVjIH0pO1xuICAgIHJldHVybiBtYWtlVmFsaWRhdG9yKHtcbiAgICAgICAgdGVzdDogKHZhbHVlLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKS50b1N0cmluZygpID09PSBgW29iamVjdCBNYXBdYCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5jb2VyY2lvbnMpICE9PSBgdW5kZWZpbmVkYCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuY29lcmNpb24pID09PSBgdW5kZWZpbmVkYClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBVbmJvdW5kIGNvZXJjaW9uIHJlc3VsdGApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbFZhbHVlcyA9IFsuLi52YWx1ZV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvZXJjZWRWYWx1ZXMgPSBbLi4udmFsdWVdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQXJyYXlWYWxpZGF0b3IoY29lcmNlZFZhbHVlcywgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSksIHsgY29lcmNpb246IHVuZGVmaW5lZCB9KSkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZVZhbHVlID0gKCkgPT4gY29lcmNlZFZhbHVlcy5zb21lKCh2YWwsIHQpID0+IHZhbFswXSAhPT0gb3JpZ2luYWxWYWx1ZXNbdF1bMF0gfHwgdmFsWzFdICE9PSBvcmlnaW5hbFZhbHVlc1t0XVsxXSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IE1hcChjb2VyY2VkVmFsdWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY29lcmNpb25zLnB1c2goWyhfYSA9IHN0YXRlLnApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGAuYCwgbWFrZUxhenlDb2VyY2lvbkZuKHN0YXRlLmNvZXJjaW9uLCB2YWx1ZSwgdXBkYXRlVmFsdWUpXSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBzdWJWYWx1ZV0gb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkID0ga2V5U3BlYyhrZXksIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKSkgJiYgdmFsaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkICYmIChzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuZXJyb3JzKSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IHZhbHVlU3BlYyhzdWJWYWx1ZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSksIHsgcDogY29tcHV0ZUtleShzdGF0ZSwga2V5KSB9KSkgJiYgdmFsaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkICYmIChzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuZXJyb3JzKSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgKHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5jb2VyY2lvbnMpICE9PSBgdW5kZWZpbmVkYCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5jb2VyY2lvbikgPT09IGB1bmRlZmluZWRgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgVW5ib3VuZCBjb2VyY2lvbiByZXN1bHRgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdG9yZSA9IHsgdmFsdWUgfTtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FycmF5VmFsaWRhdG9yKHZhbHVlLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKSwgeyBjb2VyY2lvbjogdW5kZWZpbmVkIH0pKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY29lcmNpb25zLnB1c2goWyhfYiA9IHN0YXRlLnApICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGAuYCwgbWFrZUxhenlDb2VyY2lvbkZuKHN0YXRlLmNvZXJjaW9uLCB2YWx1ZSwgKCkgPT4gbmV3IE1hcChzdG9yZS52YWx1ZSkpXSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1JlY29yZFZhbGlkYXRvcih2YWx1ZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSksIHsgY29lcmNpb246IG1ha2VDb2VyY2lvbkZuKHN0b3JlLCBgdmFsdWVgKSB9KSkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmNvZXJjaW9ucy5wdXNoKFsoX2MgPSBzdGF0ZS5wKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBgLmAsIG1ha2VMYXp5Q29lcmNpb25GbihzdGF0ZS5jb2VyY2lvbiwgdmFsdWUsICgpID0+IG5ldyBNYXAoT2JqZWN0LmVudHJpZXMoc3RvcmUudmFsdWUpKSldKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYEV4cGVjdGVkIGEgbWFwIChnb3QgJHtnZXRQcmludGFibGUodmFsdWUpfSlgKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBvbmx5IHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB0ZXN0ZWQgdmFsdWUgaXMgYVxuICogdHVwbGUgd2hvc2UgZWFjaCB2YWx1ZSBtYXRjaGVzIHRoZSBjb3JyZXNwb25kaW5nIHN1YnNwZWMuIFJlZmluZXMgdGhlIHR5cGVcbiAqIGludG8gYSB0dXBsZSB3aG9zZSBlYWNoIGl0ZW0gaGFzIHRoZSB0eXBlIGluZmVycmVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nXG4gKiB0dXBsZS5cbiAqXG4gKiBTdXBwb3J0cyBjb2VyY2lvbiBpZiB0aGUgYGRlbGltaXRlcmAgb3B0aW9uIGlzIHNldCwgaW4gd2hpY2ggY2FzZSBzdHJpbmdzXG4gKiB3aWxsIGJlIHNwbGl0IGFjY29yZGluZ2x5LlxuICovXG5mdW5jdGlvbiBpc1R1cGxlKHNwZWMsIHsgZGVsaW1pdGVyIH0gPSB7fSkge1xuICAgIGNvbnN0IGxlbmd0aFZhbGlkYXRvciA9IGhhc0V4YWN0TGVuZ3RoKHNwZWMubGVuZ3RoKTtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IGBzdHJpbmdgICYmIHR5cGVvZiBkZWxpbWl0ZXIgIT09IGB1bmRlZmluZWRgKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmNvZXJjaW9ucykgIT09IGB1bmRlZmluZWRgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5jb2VyY2lvbikgPT09IGB1bmRlZmluZWRgKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYFVuYm91bmQgY29lcmNpb24gcmVzdWx0YCk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoZGVsaW1pdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY29lcmNpb25zLnB1c2goWyhfYSA9IHN0YXRlLnApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGAuYCwgc3RhdGUuY29lcmNpb24uYmluZChudWxsLCB2YWx1ZSldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKVxuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBFeHBlY3RlZCBhIHR1cGxlIChnb3QgJHtnZXRQcmludGFibGUodmFsdWUpfSlgKTtcbiAgICAgICAgICAgIGxldCB2YWxpZCA9IGxlbmd0aFZhbGlkYXRvcih2YWx1ZSwgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUpKTtcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSAwLCBUID0gdmFsdWUubGVuZ3RoOyB0IDwgVCAmJiB0IDwgc3BlYy5sZW5ndGg7ICsrdCkge1xuICAgICAgICAgICAgICAgIHZhbGlkID0gc3BlY1t0XSh2YWx1ZVt0XSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSksIHsgcDogY29tcHV0ZUtleShzdGF0ZSwgdCksIGNvZXJjaW9uOiBtYWtlQ29lcmNpb25Gbih2YWx1ZSwgdCkgfSkpICYmIHZhbGlkO1xuICAgICAgICAgICAgICAgIGlmICghdmFsaWQgJiYgKHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5lcnJvcnMpID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBvbmx5IHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB0ZXN0ZWQgdmFsdWUgaXMgYW5cbiAqIG9iamVjdCB3aXRoIGFueSBhbW91bnQgb2YgcHJvcGVydGllcyB0aGF0IG11c3QgYWxsIG1hdGNoIHRoZSBwcm92aWRlZFxuICogc3Vic3BlYy4gUmVmaW5lcyB0aGUgdHlwZSB0byBgUmVjb3JkPHN0cmluZywgVD5gLCB3aXRoIGBUYCBiZWluZyB0aGVcbiAqIHN1YnNwZWMgaW5mZXJyZWQgdHlwZS5cbiAqXG4gKiBLZXlzIGNhbiBiZSBvcHRpb25hbGx5IHZhbGlkYXRlZCBhcyB3ZWxsIGJ5IHVzaW5nIHRoZSBga2V5c2Agb3B0aW9uYWxcbiAqIHN1YnNwZWMgcGFyYW1ldGVyLlxuICovXG5mdW5jdGlvbiBpc1JlY29yZChzcGVjLCB7IGtleXM6IGtleVNwZWMgPSBudWxsLCB9ID0ge30pIHtcbiAgICBjb25zdCBpc0FycmF5VmFsaWRhdG9yID0gaXNBcnJheShpc1R1cGxlKFtrZXlTcGVjICE9PSBudWxsICYmIGtleVNwZWMgIT09IHZvaWQgMCA/IGtleVNwZWMgOiBpc1N0cmluZygpLCBzcGVjXSkpO1xuICAgIHJldHVybiBtYWtlVmFsaWRhdG9yKHtcbiAgICAgICAgdGVzdDogKHZhbHVlLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmNvZXJjaW9ucykgIT09IGB1bmRlZmluZWRgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5jb2VyY2lvbikgPT09IGB1bmRlZmluZWRgKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYFVuYm91bmQgY29lcmNpb24gcmVzdWx0YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNBcnJheVZhbGlkYXRvcih2YWx1ZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSksIHsgY29lcmNpb246IHVuZGVmaW5lZCB9KSkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gT2JqZWN0LmZyb21FbnRyaWVzKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY29lcmNpb25zLnB1c2goWyhfYSA9IHN0YXRlLnApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGAuYCwgc3RhdGUuY29lcmNpb24uYmluZChudWxsLCB2YWx1ZSldKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gYG9iamVjdGAgfHwgdmFsdWUgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYEV4cGVjdGVkIGFuIG9iamVjdCAoZ290ICR7Z2V0UHJpbnRhYmxlKHZhbHVlKX0pYCk7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpO1xuICAgICAgICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSAwLCBUID0ga2V5cy5sZW5ndGg7IHQgPCBUICYmICh2YWxpZCB8fCAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmVycm9ycykgIT0gbnVsbCk7ICsrdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXNbdF07XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViID0gdmFsdWVba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBgX19wcm90b19fYCB8fCBrZXkgPT09IGBjb25zdHJ1Y3RvcmApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBwdXNoRXJyb3IoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSksIHsgcDogY29tcHV0ZUtleShzdGF0ZSwga2V5KSB9KSwgYFVuc2FmZSBwcm9wZXJ0eSBuYW1lYCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoa2V5U3BlYyAhPT0gbnVsbCAmJiAha2V5U3BlYyhrZXksIHN0YXRlKSkge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFzcGVjKHN1YiwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSksIHsgcDogY29tcHV0ZUtleShzdGF0ZSwga2V5KSwgY29lcmNpb246IG1ha2VDb2VyY2lvbkZuKHZhbHVlLCBrZXkpIH0pKSkge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4vKipcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2UgYGlzRGljdGAgYnkgYGlzUmVjb3JkYFxuICovXG5mdW5jdGlvbiBpc0RpY3Qoc3BlYywgb3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIGlzUmVjb3JkKHNwZWMsIG9wdHMpO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBvbmx5IHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB0ZXN0ZWQgdmFsdWUgaXMgYW5cbiAqIG9iamVjdCB3aG9zZSBhbGwgcHJvcGVydGllcyBtYXRjaCB0aGVpciBjb3JyZXNwb25kaW5nIHN1YnNwZWMuIFJlZmluZXNcbiAqIHRoZSB0eXBlIGludG8gYW4gb2JqZWN0IHdob3NlIGVhY2ggcHJvcGVydHkgaGFzIHRoZSB0eXBlIGluZmVycmVkIGJ5IHRoZVxuICogY29ycmVzcG9uZGluZyBzdWJzcGVjLlxuICpcbiAqIFVubGlrZSBgdC5pc1BhcnRpYWxgLCBgdC5pc09iamVjdGAgZG9lc24ndCBhbGxvdyBleHRyYW5lb3VzIHByb3BlcnRpZXMgYnlcbiAqIGRlZmF1bHQuIFRoaXMgYmVoYXZpb3VyIGNhbiBiZSBhbHRlcmVkIGJ5IHVzaW5nIHRoZSBgZXh0cmFgIG9wdGlvbmFsXG4gKiBzdWJzcGVjIHBhcmFtZXRlciwgd2hpY2ggd2lsbCBiZSBjYWxsZWQgdG8gdmFsaWRhdGUgYW4gb2JqZWN0IG9ubHlcbiAqIGNvbnRhaW5pbmcgdGhlIGV4dHJhbmVvdXMgcHJvcGVydGllcy5cbiAqXG4gKiBDYWxsaW5nIGB0LmlzT2JqZWN0KC4uLiwge2V4dHJhOiB0LmlzUmVjb3JkKHQuaXNVbmtub3duKCkpfSlgIGlzXG4gKiBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBjYWxsaW5nIGB0LmlzUGFydGlhbCguLi4pYC5cbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QocHJvcHMsIHsgZXh0cmE6IGV4dHJhU3BlYyA9IG51bGwsIH0gPSB7fSkge1xuICAgIGNvbnN0IHNwZWNLZXlzID0gT2JqZWN0LmtleXMocHJvcHMpO1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBgb2JqZWN0YCB8fCB2YWx1ZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgYW4gb2JqZWN0IChnb3QgJHtnZXRQcmludGFibGUodmFsdWUpfSlgKTtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBuZXcgU2V0KFsuLi5zcGVjS2V5cywgLi4uT2JqZWN0LmtleXModmFsdWUpXSk7XG4gICAgICAgICAgICBjb25zdCBleHRyYSA9IHt9O1xuICAgICAgICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBgY29uc3RydWN0b3JgIHx8IGtleSA9PT0gYF9fcHJvdG9fX2ApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBwdXNoRXJyb3IoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSksIHsgcDogY29tcHV0ZUtleShzdGF0ZSwga2V5KSB9KSwgYFVuc2FmZSBwcm9wZXJ0eSBuYW1lYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGVjID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCBrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHByb3BzW2tleV1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWIgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdmFsdWVba2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3BlYyAhPT0gYHVuZGVmaW5lZGApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkID0gc3BlYyhzdWIsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUpLCB7IHA6IGNvbXB1dGVLZXkoc3RhdGUsIGtleSksIGNvZXJjaW9uOiBtYWtlQ29lcmNpb25Gbih2YWx1ZSwga2V5KSB9KSkgJiYgdmFsaWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXh0cmFTcGVjID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IHB1c2hFcnJvcihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKSwgeyBwOiBjb21wdXRlS2V5KHN0YXRlLCBrZXkpIH0pLCBgRXh0cmFuZW91cyBwcm9wZXJ0eSAoZ290ICR7Z2V0UHJpbnRhYmxlKHN1Yil9KWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4dHJhLCBrZXksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogKCkgPT4gc3ViLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldDogbWFrZVNldHRlcih2YWx1ZSwga2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF2YWxpZCAmJiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmVycm9ycykgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXh0cmFTcGVjICE9PSBudWxsICYmICh2YWxpZCB8fCAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmVycm9ycykgIT0gbnVsbCkpXG4gICAgICAgICAgICAgICAgdmFsaWQgPSBleHRyYVNwZWMoZXh0cmEsIHN0YXRlKSAmJiB2YWxpZDtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZDtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih2YWxpZGF0b3IsIHtcbiAgICAgICAgcHJvcGVydGllczogcHJvcHMsXG4gICAgfSk7XG59XG4vKipcbiAqIENyZWF0ZSBhIHZhbGlkYXRvciB0aGF0IG9ubHkgcmV0dXJucyB0cnVlIHdoZW4gdGhlIHRlc3RlZCB2YWx1ZSBpcyBhblxuICogb2JqZWN0IHdob3NlIGFsbCBwcm9wZXJ0aWVzIG1hdGNoIHRoZWlyIGNvcnJlc3BvbmRpbmcgc3Vic3BlYy4gUmVmaW5lc1xuICogdGhlIHR5cGUgaW50byBhbiBvYmplY3Qgd2hvc2UgZWFjaCBwcm9wZXJ0eSBoYXMgdGhlIHR5cGUgaW5mZXJyZWQgYnkgdGhlXG4gKiBjb3JyZXNwb25kaW5nIHN1YnNwZWMuXG4gKlxuICogVW5saWtlIGB0LmlzT2JqZWN0YCwgYHQuaXNQYXJ0aWFsYCBhbGxvd3MgZXh0cmFuZW91cyBwcm9wZXJ0aWVzLiBUaGVcbiAqIHJlc3VsdGluZyB0eXBlIHdpbGwgcmVmbGVjdCB0aGlzIGJlaGF2aW91ciBieSBpbmNsdWRpbmcgYW4gaW5kZXhcbiAqIHNpZ25hdHVyZSAoZWFjaCBleHRyYW5lb3VzIHByb3BlcnR5IGJlaW5nIHR5cGVkIGB1bmtub3duYCkuXG4gKlxuICogQ2FsbGluZyBgdC5pc1BhcnRpYWwoLi4uKWAgaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgY2FsbGluZ1xuICogYHQuaXNPYmplY3QoLi4uLCB7ZXh0cmE6IHQuaXNSZWNvcmQodC5pc1Vua25vd24oKSl9KWAuXG4gKi9cbmZ1bmN0aW9uIGlzUGFydGlhbChwcm9wcykge1xuICAgIHJldHVybiBpc09iamVjdChwcm9wcywgeyBleHRyYTogaXNSZWNvcmQoaXNVbmtub3duKCkpIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBvbmx5IHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB0ZXN0ZWQgdmFsdWUgaXMgYW5cbiAqIG9iamVjdCB3aG9zZSBwcm90b3R5cGUgaXMgZGVyaXZlZCBmcm9tIHRoZSBnaXZlbiBjbGFzcy4gUmVmaW5lcyB0aGUgdHlwZVxuICogaW50byBhIGNsYXNzIGluc3RhbmNlLlxuICovXG5jb25zdCBpc0luc3RhbmNlT2YgPSAoY29uc3RydWN0b3IpID0+IG1ha2VWYWxpZGF0b3Ioe1xuICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBjb25zdHJ1Y3RvcikpXG4gICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgJHtjb25zdHJ1Y3Rvci5uYW1lfSAoZ290ICR7Z2V0UHJpbnRhYmxlKHZhbHVlKX0pYCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG59KTtcbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgb25seSByZXR1cm5zIHRydWUgd2hlbiB0aGUgdGVzdGVkIHZhbHVlIGlzIGFuXG4gKiBvYmplY3QgbWF0Y2hpbmcgYW55IG9mIHRoZSBwcm92aWRlZCBzdWJzcGVjcy4gSWYgdGhlIG9wdGlvbmFsIGBleGNsdXNpdmVgXG4gKiBwYXJhbWV0ZXIgaXMgc2V0IHRvIGB0cnVlYCwgdGhlIGJlaGF2aW91ciBjaGFuZ2VzIHNvIHRoYXQgdGhlIHZhbGlkYXRvclxuICogb25seSByZXR1cm5zIHRydWUgd2hlbiBleGFjdGx5IG9uZSBzdWJzcGVjIG1hdGNoZXMuXG4gKi9cbmNvbnN0IGlzT25lT2YgPSAoc3BlY3MsIHsgZXhjbHVzaXZlID0gZmFsc2UsIH0gPSB7fSkgPT4gbWFrZVZhbGlkYXRvcih7XG4gICAgdGVzdDogKHZhbHVlLCBzdGF0ZSkgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IFtdO1xuICAgICAgICBjb25zdCBlcnJvckJ1ZmZlciA9IHR5cGVvZiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmVycm9ycykgIT09IGB1bmRlZmluZWRgXG4gICAgICAgICAgICA/IFtdIDogdW5kZWZpbmVkO1xuICAgICAgICBmb3IgKGxldCB0ID0gMCwgVCA9IHNwZWNzLmxlbmd0aDsgdCA8IFQ7ICsrdCkge1xuICAgICAgICAgICAgY29uc3Qgc3ViRXJyb3JzID0gdHlwZW9mIChzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuZXJyb3JzKSAhPT0gYHVuZGVmaW5lZGBcbiAgICAgICAgICAgICAgICA/IFtdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3Qgc3ViQ29lcmNpb25zID0gdHlwZW9mIChzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuY29lcmNpb25zKSAhPT0gYHVuZGVmaW5lZGBcbiAgICAgICAgICAgICAgICA/IFtdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHNwZWNzW3RdKHZhbHVlLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKSwgeyBlcnJvcnM6IHN1YkVycm9ycywgY29lcmNpb25zOiBzdWJDb2VyY2lvbnMsIHA6IGAkeyhfYSA9IHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5wKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBgLmB9IyR7dCArIDF9YCB9KSkpIHtcbiAgICAgICAgICAgICAgICBtYXRjaGVzLnB1c2goW2AjJHt0ICsgMX1gLCBzdWJDb2VyY2lvbnNdKTtcbiAgICAgICAgICAgICAgICBpZiAoIWV4Y2x1c2l2ZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBlcnJvckJ1ZmZlciA9PT0gbnVsbCB8fCBlcnJvckJ1ZmZlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3JCdWZmZXIucHVzaChzdWJFcnJvcnNbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgWywgc3ViQ29lcmNpb25zXSA9IG1hdGNoZXNbMF07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHN1YkNvZXJjaW9ucyAhPT0gYHVuZGVmaW5lZGApXG4gICAgICAgICAgICAgICAgKF9iID0gc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmNvZXJjaW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnB1c2goLi4uc3ViQ29lcmNpb25zKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICBwdXNoRXJyb3Ioc3RhdGUsIGBFeHBlY3RlZCB0byBtYXRjaCBleGFjdGx5IGEgc2luZ2xlIHByZWRpY2F0ZSAobWF0Y2hlZCAke21hdGNoZXMuam9pbihgLCBgKX0pYCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIChfYyA9IHN0YXRlID09PSBudWxsIHx8IHN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdGF0ZS5lcnJvcnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5wdXNoKC4uLmVycm9yQnVmZmVyKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG59KTtcblxuZnVuY3Rpb24gbWFrZVRyYWl0KHZhbHVlKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG59XG5mdW5jdGlvbiBtYWtlVmFsaWRhdG9yKHsgdGVzdCB9KSB7XG4gICAgcmV0dXJuIG1ha2VUcmFpdCh0ZXN0KSgpO1xufVxuY2xhc3MgVHlwZUFzc2VydGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHsgZXJyb3JzIH0gPSB7fSkge1xuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYFR5cGUgbWlzbWF0Y2hgO1xuICAgICAgICBpZiAoZXJyb3JzICYmIGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYFxcbmA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVycm9yIG9mIGVycm9ycykge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSArPSBgXFxuLSAke2Vycm9yfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIoZXJyb3JNZXNzYWdlKTtcbiAgICB9XG59XG4vKipcbiAqIENoZWNrIHRoYXQgdGhlIHNwZWNpZmllZCB2YWx1ZSBtYXRjaGVzIHRoZSBnaXZlbiB2YWxpZGF0b3IsIGFuZCB0aHJvd3MgYW5cbiAqIGV4Y2VwdGlvbiBpZiBpdCBkb2Vzbid0LiBSZWZpbmUgdGhlIHR5cGUgaWYgaXQgcGFzc2VzLlxuICovXG5mdW5jdGlvbiBhc3NlcnQodmFsLCB2YWxpZGF0b3IpIHtcbiAgICBpZiAoIXZhbGlkYXRvcih2YWwpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlQXNzZXJ0aW9uRXJyb3IoKTtcbiAgICB9XG59XG4vKipcbiAqIENoZWNrIHRoYXQgdGhlIHNwZWNpZmllZCB2YWx1ZSBtYXRjaGVzIHRoZSBnaXZlbiB2YWxpZGF0b3IsIGFuZCB0aHJvd3MgYW5cbiAqIGV4Y2VwdGlvbiBpZiBpdCBkb2Vzbid0LiBSZWZpbmUgdGhlIHR5cGUgaWYgaXQgcGFzc2VzLlxuICpcbiAqIFRocm93biBleGNlcHRpb25zIGluY2x1ZGUgZGV0YWlscyBhYm91dCB3aGF0IGV4YWN0bHkgbG9va3MgaW52YWxpZCBpbiB0aGVcbiAqIHRlc3RlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0V2l0aEVycm9ycyh2YWwsIHZhbGlkYXRvcikge1xuICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgIGlmICghdmFsaWRhdG9yKHZhbCwgeyBlcnJvcnMgfSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVBc3NlcnRpb25FcnJvcih7IGVycm9ycyB9KTtcbiAgICB9XG59XG4vKipcbiAqIENvbXBpbGUtdGltZSBvbmx5LiBSZWZpbmUgdGhlIHR5cGUgYXMgaWYgdGhlIHZhbGlkYXRvciB3YXMgbWF0Y2hpbmcgdGhlXG4gKiB0ZXN0ZWQgdmFsdWUsIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IHJ1biBpdC4gU2ltaWxhciB0byB0aGUgY2xhc3NpYyBgYXNgXG4gKiBvcGVyYXRvciBpbiBUeXBlU2NyaXB0LlxuICovXG5mdW5jdGlvbiBzb2Z0QXNzZXJ0KHZhbCwgdmFsaWRhdG9yKSB7XG4gICAgLy8gSXQncyBhIHNvZnQgYXNzZXJ0OyB3ZSB0ZWxsIFR5cGVTY3JpcHQgYWJvdXQgdGhlIHR5cGUsIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGl0XG59XG5mdW5jdGlvbiBhcyh2YWx1ZSwgdmFsaWRhdG9yLCB7IGNvZXJjZSA9IGZhbHNlLCBlcnJvcnM6IHN0b3JlRXJyb3JzLCB0aHJvdzogdGhyb3dzIH0gPSB7fSkge1xuICAgIGNvbnN0IGVycm9ycyA9IHN0b3JlRXJyb3JzID8gW10gOiB1bmRlZmluZWQ7XG4gICAgaWYgKCFjb2VyY2UpIHtcbiAgICAgICAgaWYgKHZhbGlkYXRvcih2YWx1ZSwgeyBlcnJvcnMgfSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd3MgPyB2YWx1ZSA6IHsgdmFsdWUsIGVycm9yczogdW5kZWZpbmVkIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXRocm93cykge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZXJyb3JzOiBlcnJvcnMgIT09IG51bGwgJiYgZXJyb3JzICE9PSB2b2lkIDAgPyBlcnJvcnMgOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUFzc2VydGlvbkVycm9yKHsgZXJyb3JzIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXRlID0geyB2YWx1ZSB9O1xuICAgIGNvbnN0IGNvZXJjaW9uID0gbWFrZUNvZXJjaW9uRm4oc3RhdGUsIGB2YWx1ZWApO1xuICAgIGNvbnN0IGNvZXJjaW9ucyA9IFtdO1xuICAgIGlmICghdmFsaWRhdG9yKHZhbHVlLCB7IGVycm9ycywgY29lcmNpb24sIGNvZXJjaW9ucyB9KSkge1xuICAgICAgICBpZiAoIXRocm93cykge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZXJyb3JzOiBlcnJvcnMgIT09IG51bGwgJiYgZXJyb3JzICE9PSB2b2lkIDAgPyBlcnJvcnMgOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUFzc2VydGlvbkVycm9yKHsgZXJyb3JzIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgWywgYXBwbHldIG9mIGNvZXJjaW9ucylcbiAgICAgICAgYXBwbHkoKTtcbiAgICBpZiAodGhyb3dzKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZS52YWx1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB7IHZhbHVlOiBzdGF0ZS52YWx1ZSwgZXJyb3JzOiB1bmRlZmluZWQgfTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IGZ1bmN0aW9uIHRoYXQgYXBwbHkgdGhlIGdpdmVuIHZhbGlkYXRvcnMgdG8gZWFjaFxuICogY29ycmVzcG9uZGluZyBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGFuZCB0aHJvd3MgYW4gZXhjZXB0aW9uIGluXG4gKiBjYXNlIG9mIGEgbWlzbWF0Y2guXG4gKi9cbmZ1bmN0aW9uIGZuKHZhbGlkYXRvcnMsIGZuKSB7XG4gICAgY29uc3QgaXNWYWxpZEFyZ0xpc3QgPSBpc1R1cGxlKHZhbGlkYXRvcnMpO1xuICAgIHJldHVybiAoKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgY29uc3QgY2hlY2sgPSBpc1ZhbGlkQXJnTGlzdChhcmdzKTtcbiAgICAgICAgaWYgKCFjaGVjaylcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlQXNzZXJ0aW9uRXJyb3IoKTtcbiAgICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHZhbGlkYXRvciB0aGF0IGNoZWNrcyB0aGF0IHRoZSB0ZXN0ZWQgYXJyYXkgb3Igc3RyaW5nIGhhcyBhdCBsZWFzdFxuICogdGhlIHNwZWNpZmllZCBsZW5ndGguXG4gKi9cbmZ1bmN0aW9uIGhhc01pbkxlbmd0aChsZW5ndGgpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGlmICghKHZhbHVlLmxlbmd0aCA+PSBsZW5ndGgpKVxuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBFeHBlY3RlZCB0byBoYXZlIGEgbGVuZ3RoIG9mIGF0IGxlYXN0ICR7bGVuZ3RofSBlbGVtZW50cyAoZ290ICR7dmFsdWUubGVuZ3RofSlgKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBjaGVja3MgdGhhdCB0aGUgdGVzdGVkIGFycmF5IG9yIHN0cmluZyBoYXMgYXQgbW9zdFxuICogdGhlIHNwZWNpZmllZCBsZW5ndGguXG4gKi9cbmZ1bmN0aW9uIGhhc01heExlbmd0aChsZW5ndGgpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGlmICghKHZhbHVlLmxlbmd0aCA8PSBsZW5ndGgpKVxuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBFeHBlY3RlZCB0byBoYXZlIGEgbGVuZ3RoIG9mIGF0IG1vc3QgJHtsZW5ndGh9IGVsZW1lbnRzIChnb3QgJHt2YWx1ZS5sZW5ndGh9KWApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4vKipcbiAqIENyZWF0ZSBhIHZhbGlkYXRvciB0aGF0IGNoZWNrcyB0aGF0IHRoZSB0ZXN0ZWQgYXJyYXkgb3Igc3RyaW5nIGhhcyBleGFjdGx5XG4gKiB0aGUgc3BlY2lmaWVkIGxlbmd0aC5cbiAqL1xuZnVuY3Rpb24gaGFzRXhhY3RMZW5ndGgobGVuZ3RoKSB7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAoISh2YWx1ZS5sZW5ndGggPT09IGxlbmd0aCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYEV4cGVjdGVkIHRvIGhhdmUgYSBsZW5ndGggb2YgZXhhY3RseSAke2xlbmd0aH0gZWxlbWVudHMgKGdvdCAke3ZhbHVlLmxlbmd0aH0pYCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgY2hlY2tzIHRoYXQgdGhlIHRlc3RlZCBhcnJheSBvbmx5IGNvbnRhaW5zIHVuaXF1ZVxuICogZWxlbWVudHMuIFRoZSBvcHRpb25hbCBgbWFwYCBwYXJhbWV0ZXIgbGV0cyB5b3UgZGVmaW5lIGEgdHJhbnNmb3JtIHRvXG4gKiBhcHBseSBiZWZvcmUgbWFraW5nIHRoZSBjaGVjayAodGhlIHJlc3VsdCBvZiB0aGlzIHRyYW5zZm9ybSB3aWxsIGJlXG4gKiBkaXNjYXJkZWQgYWZ0ZXJ3YXJkcykuXG4gKi9cbmZ1bmN0aW9uIGhhc1VuaXF1ZUl0ZW1zKHsgbWFwLCB9ID0ge30pIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIGNvbnN0IGR1cCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSAwLCBUID0gdmFsdWUubGVuZ3RoOyB0IDwgVDsgKyt0KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViID0gdmFsdWVbdF07XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gdHlwZW9mIG1hcCAhPT0gYHVuZGVmaW5lZGBcbiAgICAgICAgICAgICAgICAgICAgPyBtYXAoc3ViKVxuICAgICAgICAgICAgICAgICAgICA6IHN1YjtcbiAgICAgICAgICAgICAgICBpZiAoc2V0LmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkdXAuaGFzKGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gY29udGFpbiB1bmlxdWUgZWxlbWVudHM7IGdvdCBhIGR1cGxpY2F0ZSB3aXRoICR7Z2V0UHJpbnRhYmxlKHZhbHVlKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgZHVwLmFkZChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0LmFkZChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkdXAuc2l6ZSA9PT0gMDtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgY2hlY2tzIHRoYXQgdGhlIHRlc3RlZCBudW1iZXIgaXMgc3RyaWN0bHkgbGVzcyB0aGFuIDAuXG4gKi9cbmZ1bmN0aW9uIGlzTmVnYXRpdmUoKSB7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAoISh2YWx1ZSA8PSAwKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gYmUgbmVnYXRpdmUgKGdvdCAke3ZhbHVlfSlgKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBjaGVja3MgdGhhdCB0aGUgdGVzdGVkIG51bWJlciBpcyBlcXVhbCBvciBncmVhdGVyXG4gKiB0aGFuIDAuXG4gKi9cbmZ1bmN0aW9uIGlzUG9zaXRpdmUoKSB7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAoISh2YWx1ZSA+PSAwKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gYmUgcG9zaXRpdmUgKGdvdCAke3ZhbHVlfSlgKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBjaGVja3MgdGhhdCB0aGUgdGVzdGVkIG51bWJlciBpcyBlcXVhbCBvciBncmVhdGVyXG4gKiB0aGFuIHRoZSBzcGVjaWZpZWQgcmVmZXJlbmNlLlxuICovXG5mdW5jdGlvbiBpc0F0TGVhc3Qobikge1xuICAgIHJldHVybiBtYWtlVmFsaWRhdG9yKHtcbiAgICAgICAgdGVzdDogKHZhbHVlLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCEodmFsdWUgPj0gbikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYEV4cGVjdGVkIHRvIGJlIGF0IGxlYXN0ICR7bn0gKGdvdCAke3ZhbHVlfSlgKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBjaGVja3MgdGhhdCB0aGUgdGVzdGVkIG51bWJlciBpcyBlcXVhbCBvciBzbWFsbGVyXG4gKiB0aGFuIHRoZSBzcGVjaWZpZWQgcmVmZXJlbmNlLlxuICovXG5mdW5jdGlvbiBpc0F0TW9zdChuKSB7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAoISh2YWx1ZSA8PSBuKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gYmUgYXQgbW9zdCAke259IChnb3QgJHt2YWx1ZX0pYCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgY2hlY2tzIHRoYXQgdGhlIHRlc3RlZCBudW1iZXIgaXMgYmV0d2VlbiB0aGVcbiAqIHNwZWNpZmllZCByZWZlcmVuY2VzIChpbmNsdWRpbmcgdGhlIHVwcGVyIGJvdW5kYXJ5KS5cbiAqL1xuZnVuY3Rpb24gaXNJbkluY2x1c2l2ZVJhbmdlKGEsIGIpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGlmICghKHZhbHVlID49IGEgJiYgdmFsdWUgPD0gYikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYEV4cGVjdGVkIHRvIGJlIGluIHRoZSBbJHthfTsgJHtifV0gcmFuZ2UgKGdvdCAke3ZhbHVlfSlgKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBjaGVja3MgdGhhdCB0aGUgdGVzdGVkIG51bWJlciBpcyBiZXR3ZWVuIHRoZVxuICogc3BlY2lmaWVkIHJlZmVyZW5jZXMgKGV4Y2x1ZGluZyB0aGUgdXBwZXIgYm91bmRhcnkpLlxuICovXG5mdW5jdGlvbiBpc0luRXhjbHVzaXZlUmFuZ2UoYSwgYikge1xuICAgIHJldHVybiBtYWtlVmFsaWRhdG9yKHtcbiAgICAgICAgdGVzdDogKHZhbHVlLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCEodmFsdWUgPj0gYSAmJiB2YWx1ZSA8IGIpKVxuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBFeHBlY3RlZCB0byBiZSBpbiB0aGUgWyR7YX07ICR7Yn1bIHJhbmdlIChnb3QgJHt2YWx1ZX0pYCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgY2hlY2tzIHRoYXQgdGhlIHRlc3RlZCBudW1iZXIgaXMgYW4gaW50ZWdlci5cbiAqXG4gKiBCeSBkZWZhdWx0IFR5cGFuaW9uIHdpbGwgYWxzbyBjaGVjayB0aGF0IGl0J3MgYSAqc2FmZSogaW50ZWdlci4gRm9yIGV4YW1wbGUsXG4gKiAyXjUzIHdvdWxkbid0IGJlIGEgc2FmZSBpbnRlZ2VyIGJlY2F1c2UgMl41MysxIHdvdWxkIGJlIHJvdW5kZWQgdG8gMl41MyxcbiAqIHdoaWNoIGNvdWxkIHB1dCB5b3VyIGFwcGxpY2F0aW9ucyBhdCByaXNrIHdoZW4gdXNlZCBpbiBsb29wcy5cbiAqL1xuZnVuY3Rpb24gaXNJbnRlZ2VyKHsgdW5zYWZlID0gZmFsc2UsIH0gPSB7fSkge1xuICAgIHJldHVybiBtYWtlVmFsaWRhdG9yKHtcbiAgICAgICAgdGVzdDogKHZhbHVlLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBNYXRoLnJvdW5kKHZhbHVlKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gYmUgYW4gaW50ZWdlciAoZ290ICR7dmFsdWV9KWApO1xuICAgICAgICAgICAgaWYgKCF1bnNhZmUgJiYgIU51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gYmUgYSBzYWZlIGludGVnZXIgKGdvdCAke3ZhbHVlfSlgKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBjaGVja3MgdGhhdCB0aGUgdGVzdGVkIHN0cmluZyBtYXRjaGVzIHRoZSBnaXZlblxuICogcmVndWxhciBleHByZXNzaW9uLlxuICovXG5mdW5jdGlvbiBtYXRjaGVzUmVnRXhwKHJlZ0V4cCkge1xuICAgIHJldHVybiBtYWtlVmFsaWRhdG9yKHtcbiAgICAgICAgdGVzdDogKHZhbHVlLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZWdFeHAudGVzdCh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYEV4cGVjdGVkIHRvIG1hdGNoIHRoZSBwYXR0ZXJuICR7cmVnRXhwLnRvU3RyaW5nKCl9IChnb3QgJHtnZXRQcmludGFibGUodmFsdWUpfSlgKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBjaGVja3MgdGhhdCB0aGUgdGVzdGVkIHN0cmluZyBvbmx5IGNvbnRhaW4gbG93ZXJjYXNlXG4gKiBjaGFyYWN0ZXJzLlxuICovXG5mdW5jdGlvbiBpc0xvd2VyQ2FzZSgpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gYmUgYWxsLWxvd2VyY2FzZSAoZ290ICR7dmFsdWV9KWApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4vKipcbiAqIENyZWF0ZSBhIHZhbGlkYXRvciB0aGF0IGNoZWNrcyB0aGF0IHRoZSB0ZXN0ZWQgc3RyaW5nIG9ubHkgY29udGFpbiB1cHBlcmNhc2VcbiAqIGNoYXJhY3RlcnMuXG4gKi9cbmZ1bmN0aW9uIGlzVXBwZXJDYXNlKCkge1xuICAgIHJldHVybiBtYWtlVmFsaWRhdG9yKHtcbiAgICAgICAgdGVzdDogKHZhbHVlLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZS50b1VwcGVyQ2FzZSgpKVxuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBFeHBlY3RlZCB0byBiZSBhbGwtdXBwZXJjYXNlIChnb3QgJHt2YWx1ZX0pYCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgY2hlY2tzIHRoYXQgdGhlIHRlc3RlZCBzdHJpbmcgaXMgYSB2YWxpZCBVVUlEIHY0LlxuICovXG5mdW5jdGlvbiBpc1VVSUQ0KCkge1xuICAgIHJldHVybiBtYWtlVmFsaWRhdG9yKHtcbiAgICAgICAgdGVzdDogKHZhbHVlLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF1dWlkNFJlZ0V4cC50ZXN0KHZhbHVlKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBVVUlEIHY0IChnb3QgJHtnZXRQcmludGFibGUodmFsdWUpfSlgKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBjaGVja3MgdGhhdCB0aGUgdGVzdGVkIHN0cmluZyBpcyBhIHZhbGlkIElTTzg2MDFcbiAqIGRhdGUuXG4gKi9cbmZ1bmN0aW9uIGlzSVNPODYwMSgpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGlmICghaXNvODYwMVJlZ0V4cC50ZXN0KHZhbHVlKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBJU08gODYwMSBkYXRlIHN0cmluZyAoZ290ICR7Z2V0UHJpbnRhYmxlKHZhbHVlKX0pYCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgY2hlY2tzIHRoYXQgdGhlIHRlc3RlZCBzdHJpbmcgaXMgYSB2YWxpZCBoZXhhZGVjaW1hbFxuICogY29sb3IuIFNldHRpbmcgdGhlIG9wdGlvbmFsIGBhbHBoYWAgcGFyYW1ldGVyIHRvIGB0cnVlYCBhbGxvd3MgYW4gYWRkaXRpb25hbFxuICogdHJhbnNwYXJlbmN5IGNoYW5uZWwgdG8gYmUgaW5jbHVkZWQuXG4gKi9cbmZ1bmN0aW9uIGlzSGV4Q29sb3IoeyBhbHBoYSA9IGZhbHNlLCB9KSB7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhbHBoYVxuICAgICAgICAgICAgICAgID8gY29sb3JTdHJpbmdSZWdFeHAudGVzdCh2YWx1ZSlcbiAgICAgICAgICAgICAgICA6IGNvbG9yU3RyaW5nQWxwaGFSZWdFeHAudGVzdCh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIXJlcylcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBoZXhhZGVjaW1hbCBjb2xvciBzdHJpbmcgKGdvdCAke2dldFByaW50YWJsZSh2YWx1ZSl9KWApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4vKipcbiAqIENyZWF0ZSBhIHZhbGlkYXRvciB0aGF0IGNoZWNrcyB0aGF0IHRoZSB0ZXN0ZWQgc3RyaW5nIGlzIHZhbGlkIGJhc2U2NC5cbiAqL1xuZnVuY3Rpb24gaXNCYXNlNjQoKSB7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWJhc2U2NFJlZ0V4cC50ZXN0KHZhbHVlKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBiYXNlIDY0IHN0cmluZyAoZ290ICR7Z2V0UHJpbnRhYmxlKHZhbHVlKX0pYCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgY2hlY2tzIHRoYXQgdGhlIHRlc3RlZCBzdHJpbmcgaXMgdmFsaWQgSlNPTi4gQVxuICogb3B0aW9uYWwgc3BlYyBjYW4gYmUgcGFzc2VkIGFzIHBhcmFtZXRlciwgaW4gd2hpY2ggY2FzZSB0aGUgZGF0YSB3aWxsIGJlXG4gKiBkZXNlcmlhbGl6ZWQgYW5kIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBzcGVjIChjb2VyY2lvbiB3aWxsIGJlIGRpc2FibGVkXG4gKiBmb3IgdGhpcyBjaGVjaywgYW5kIGV2ZW4gaWYgc3VjY2Vzc2Z1bCB0aGUgcmV0dXJuZWQgdmFsdWUgd2lsbCBzdGlsbCBiZVxuICogdGhlIG9yaWdpbmFsIHN0cmluZykuXG4gKi9cbmZ1bmN0aW9uIGlzSlNPTihzcGVjID0gaXNVbmtub3duKCkpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGxldCBkYXRhO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgRXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBKU09OIHN0cmluZyAoZ290ICR7Z2V0UHJpbnRhYmxlKHZhbHVlKX0pYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3BlYyhkYXRhLCBzdGF0ZSk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGNhc2NhZGUoc3BlYywgLi4uZm9sbG93dXBzKSB7XG4gICAgY29uc3QgcmVzb2x2ZWRGb2xsb3d1cHMgPSBBcnJheS5pc0FycmF5KGZvbGxvd3Vwc1swXSlcbiAgICAgICAgPyBmb2xsb3d1cHNbMF1cbiAgICAgICAgOiBmb2xsb3d1cHM7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHsgdmFsdWU6IHZhbHVlIH07XG4gICAgICAgICAgICBjb25zdCBzdWJDb2VyY2lvbiA9IHR5cGVvZiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmNvZXJjaW9ucykgIT09IGB1bmRlZmluZWRgXG4gICAgICAgICAgICAgICAgPyBtYWtlQ29lcmNpb25Gbihjb250ZXh0LCBgdmFsdWVgKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IHN1YkNvZXJjaW9ucyA9IHR5cGVvZiAoc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLmNvZXJjaW9ucykgIT09IGB1bmRlZmluZWRgXG4gICAgICAgICAgICAgICAgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICghc3BlYyh2YWx1ZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSksIHsgY29lcmNpb246IHN1YkNvZXJjaW9uLCBjb2VyY2lvbnM6IHN1YkNvZXJjaW9ucyB9KSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgcmV2ZXJ0cyA9IFtdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdWJDb2VyY2lvbnMgIT09IGB1bmRlZmluZWRgKVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgWywgY29lcmNpb25dIG9mIHN1YkNvZXJjaW9ucylcbiAgICAgICAgICAgICAgICAgICAgcmV2ZXJ0cy5wdXNoKGNvZXJjaW9uKCkpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuY29lcmNpb25zKSAhPT0gYHVuZGVmaW5lZGApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQudmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuY29lcmNpb24pID09PSBgdW5kZWZpbmVkYClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgVW5ib3VuZCBjb2VyY2lvbiByZXN1bHRgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNvZXJjaW9ucy5wdXNoKFsoX2EgPSBzdGF0ZS5wKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBgLmAsIHN0YXRlLmNvZXJjaW9uLmJpbmQobnVsbCwgY29udGV4dC52YWx1ZSldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAoX2IgPSBzdGF0ZSA9PT0gbnVsbCB8fCBzdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGUuY29lcmNpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucHVzaCguLi5zdWJDb2VyY2lvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRGb2xsb3d1cHMuZXZlcnkoc3BlYyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzcGVjKGNvbnRleHQudmFsdWUsIHN0YXRlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcmV2ZXJ0IG9mIHJldmVydHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV2ZXJ0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xufVxuZnVuY3Rpb24gYXBwbHlDYXNjYWRlKHNwZWMsIC4uLmZvbGxvd3Vwcykge1xuICAgIGNvbnN0IHJlc29sdmVkRm9sbG93dXBzID0gQXJyYXkuaXNBcnJheShmb2xsb3d1cHNbMF0pXG4gICAgICAgID8gZm9sbG93dXBzWzBdXG4gICAgICAgIDogZm9sbG93dXBzO1xuICAgIHJldHVybiBjYXNjYWRlKHNwZWMsIHJlc29sdmVkRm9sbG93dXBzKTtcbn1cbi8qKlxuICogV3JhcHMgdGhlIGdpdmVuIHNwZWMgdG8gYWxzbyBhbGxvdyBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gaXNPcHRpb25hbChzcGVjKSB7XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBgdW5kZWZpbmVkYClcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBzcGVjKHZhbHVlLCBzdGF0ZSk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4vKipcbiAqIFdyYXBzIHRoZSBnaXZlbiBzcGVjIHRvIGFsc28gYWxsb3cgYG51bGxgLlxuICovXG5mdW5jdGlvbiBpc051bGxhYmxlKHNwZWMpIHtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBzcGVjKHZhbHVlLCBzdGF0ZSk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG5jb25zdCBjaGVja3MgPSB7XG4gICAgbWlzc2luZzogKGtleXMsIGtleSkgPT4ga2V5cy5oYXMoa2V5KSxcbiAgICB1bmRlZmluZWQ6IChrZXlzLCBrZXksIHZhbHVlKSA9PiBrZXlzLmhhcyhrZXkpICYmIHR5cGVvZiB2YWx1ZVtrZXldICE9PSBgdW5kZWZpbmVkYCxcbiAgICBuaWw6IChrZXlzLCBrZXksIHZhbHVlKSA9PiBrZXlzLmhhcyhrZXkpICYmIHZhbHVlW2tleV0gIT0gbnVsbCxcbiAgICBmYWxzeTogKGtleXMsIGtleSwgdmFsdWUpID0+IGtleXMuaGFzKGtleSkgJiYgISF2YWx1ZVtrZXldLFxufTtcbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgY2hlY2tzIHRoYXQgdGhlIHRlc3RlZCBvYmplY3QgY29udGFpbnMgdGhlIHNwZWNpZmllZFxuICoga2V5cy5cbiovXG5mdW5jdGlvbiBoYXNSZXF1aXJlZEtleXMocmVxdWlyZWRLZXlzLCBvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHJlcXVpcmVkU2V0ID0gbmV3IFNldChyZXF1aXJlZEtleXMpO1xuICAgIGNvbnN0IGNoZWNrID0gY2hlY2tzWyhfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5taXNzaW5nSWYpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdtaXNzaW5nJ107XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyh2YWx1ZSkpO1xuICAgICAgICAgICAgY29uc3QgcHJvYmxlbXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHJlcXVpcmVkU2V0KVxuICAgICAgICAgICAgICAgIGlmICghY2hlY2soa2V5cywga2V5LCB2YWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgIHByb2JsZW1zLnB1c2goa2V5KTtcbiAgICAgICAgICAgIGlmIChwcm9ibGVtcy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBNaXNzaW5nIHJlcXVpcmVkICR7cGx1cmFsKHByb2JsZW1zLmxlbmd0aCwgYHByb3BlcnR5YCwgYHByb3BlcnRpZXNgKX0gJHtnZXRQcmludGFibGVBcnJheShwcm9ibGVtcywgYGFuZGApfWApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4vKipcbiogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgY2hlY2tzIHRoYXQgdGhlIHRlc3RlZCBvYmplY3QgY29udGFpbnMgYXQgbGVhc3Qgb25lXG4qIG9mIHRoZSBzcGVjaWZpZWQga2V5cy5cbiovXG5mdW5jdGlvbiBoYXNBdExlYXN0T25lS2V5KHJlcXVpcmVkS2V5cywgb3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCByZXF1aXJlZFNldCA9IG5ldyBTZXQocmVxdWlyZWRLZXlzKTtcbiAgICBjb25zdCBjaGVjayA9IGNoZWNrc1soX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubWlzc2luZ0lmKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnbWlzc2luZyddO1xuICAgIHJldHVybiBtYWtlVmFsaWRhdG9yKHtcbiAgICAgICAgdGVzdDogKHZhbHVlLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0ga2V5cy5zb21lKGtleSA9PiBjaGVjayhyZXF1aXJlZFNldCwga2V5LCB2YWx1ZSkpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZClcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEVycm9yKHN0YXRlLCBgTWlzc2luZyBhdCBsZWFzdCBvbmUgcHJvcGVydHkgZnJvbSAke2dldFByaW50YWJsZUFycmF5KEFycmF5LmZyb20ocmVxdWlyZWRTZXQpLCBgb3JgKX1gKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBjaGVja3MgdGhhdCB0aGUgdGVzdGVkIG9iamVjdCBjb250YWlucyBub25lIG9mIHRoZVxuICogc3BlY2lmaWVkIGtleXMuXG4qL1xuZnVuY3Rpb24gaGFzRm9yYmlkZGVuS2V5cyhmb3JiaWRkZW5LZXlzLCBvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGZvcmJpZGRlblNldCA9IG5ldyBTZXQoZm9yYmlkZGVuS2V5cyk7XG4gICAgY29uc3QgY2hlY2sgPSBjaGVja3NbKF9hID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm1pc3NpbmdJZikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ21pc3NpbmcnXTtcbiAgICByZXR1cm4gbWFrZVZhbGlkYXRvcih7XG4gICAgICAgIHRlc3Q6ICh2YWx1ZSwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKHZhbHVlKSk7XG4gICAgICAgICAgICBjb25zdCBwcm9ibGVtcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgZm9yYmlkZGVuU2V0KVxuICAgICAgICAgICAgICAgIGlmIChjaGVjayhrZXlzLCBrZXksIHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgcHJvYmxlbXMucHVzaChrZXkpO1xuICAgICAgICAgICAgaWYgKHByb2JsZW1zLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYEZvcmJpZGRlbiAke3BsdXJhbChwcm9ibGVtcy5sZW5ndGgsIGBwcm9wZXJ0eWAsIGBwcm9wZXJ0aWVzYCl9ICR7Z2V0UHJpbnRhYmxlQXJyYXkocHJvYmxlbXMsIGBhbmRgKX1gKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB2YWxpZGF0b3IgdGhhdCBjaGVja3MgdGhhdCB0aGUgdGVzdGVkIG9iamVjdCBjb250YWlucyBhdCBtb3N0IG9uZVxuICogb2YgdGhlIHNwZWNpZmllZCBrZXlzLlxuICovXG5mdW5jdGlvbiBoYXNNdXR1YWxseUV4Y2x1c2l2ZUtleXMoZXhjbHVzaXZlS2V5cywgb3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBleGNsdXNpdmVTZXQgPSBuZXcgU2V0KGV4Y2x1c2l2ZUtleXMpO1xuICAgIGNvbnN0IGNoZWNrID0gY2hlY2tzWyhfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5taXNzaW5nSWYpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdtaXNzaW5nJ107XG4gICAgcmV0dXJuIG1ha2VWYWxpZGF0b3Ioe1xuICAgICAgICB0ZXN0OiAodmFsdWUsIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyh2YWx1ZSkpO1xuICAgICAgICAgICAgY29uc3QgdXNlZCA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgZXhjbHVzaXZlU2V0KVxuICAgICAgICAgICAgICAgIGlmIChjaGVjayhrZXlzLCBrZXksIHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgdXNlZC5wdXNoKGtleSk7XG4gICAgICAgICAgICBpZiAodXNlZC5sZW5ndGggPiAxKVxuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoRXJyb3Ioc3RhdGUsIGBNdXR1YWxseSBleGNsdXNpdmUgcHJvcGVydGllcyAke2dldFByaW50YWJsZUFycmF5KHVzZWQsIGBhbmRgKX1gKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxudmFyIEtleVJlbGF0aW9uc2hpcDtcbihmdW5jdGlvbiAoS2V5UmVsYXRpb25zaGlwKSB7XG4gICAgS2V5UmVsYXRpb25zaGlwW1wiRm9yYmlkc1wiXSA9IFwiRm9yYmlkc1wiO1xuICAgIEtleVJlbGF0aW9uc2hpcFtcIlJlcXVpcmVzXCJdID0gXCJSZXF1aXJlc1wiO1xufSkoS2V5UmVsYXRpb25zaGlwIHx8IChLZXlSZWxhdGlvbnNoaXAgPSB7fSkpO1xuY29uc3Qga2V5UmVsYXRpb25zaGlwcyA9IHtcbiAgICBbS2V5UmVsYXRpb25zaGlwLkZvcmJpZHNdOiB7XG4gICAgICAgIGV4cGVjdDogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IGBmb3JiaWRzIHVzaW5nYCxcbiAgICB9LFxuICAgIFtLZXlSZWxhdGlvbnNoaXAuUmVxdWlyZXNdOiB7XG4gICAgICAgIGV4cGVjdDogdHJ1ZSxcbiAgICAgICAgbWVzc2FnZTogYHJlcXVpcmVzIHVzaW5nYCxcbiAgICB9LFxufTtcbi8qKlxuICogQ3JlYXRlIGEgdmFsaWRhdG9yIHRoYXQgY2hlY2tzIHRoYXQsIHdoZW4gdGhlIHNwZWNpZmllZCBzdWJqZWN0IHByb3BlcnR5IGlzXG4gKiBzZXQsIHRoZSByZWxhdGlvbnNoaXAgaXMgc2F0aXNmaWVkLlxuICovXG5mdW5jdGlvbiBoYXNLZXlSZWxhdGlvbnNoaXAoc3ViamVjdCwgcmVsYXRpb25zaGlwLCBvdGhlcnMsIG9wdGlvbnMpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHNraXBwZWQgPSBuZXcgU2V0KChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5pZ25vcmUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdKTtcbiAgICBjb25zdCBjaGVjayA9IGNoZWNrc1soX2IgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubWlzc2luZ0lmKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnbWlzc2luZyddO1xuICAgIGNvbnN0IG90aGVyU2V0ID0gbmV3IFNldChvdGhlcnMpO1xuICAgIGNvbnN0IHNwZWMgPSBrZXlSZWxhdGlvbnNoaXBzW3JlbGF0aW9uc2hpcF07XG4gICAgY29uc3QgY29uanVuY3Rpb24gPSByZWxhdGlvbnNoaXAgPT09IEtleVJlbGF0aW9uc2hpcC5Gb3JiaWRzXG4gICAgICAgID8gYG9yYFxuICAgICAgICA6IGBhbmRgO1xuICAgIHJldHVybiBtYWtlVmFsaWRhdG9yKHtcbiAgICAgICAgdGVzdDogKHZhbHVlLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXModmFsdWUpKTtcbiAgICAgICAgICAgIGlmICghY2hlY2soa2V5cywgc3ViamVjdCwgdmFsdWUpIHx8IHNraXBwZWQuaGFzKHZhbHVlW3N1YmplY3RdKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IHByb2JsZW1zID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBvdGhlclNldClcbiAgICAgICAgICAgICAgICBpZiAoKGNoZWNrKGtleXMsIGtleSwgdmFsdWUpICYmICFza2lwcGVkLmhhcyh2YWx1ZVtrZXldKSkgIT09IHNwZWMuZXhwZWN0KVxuICAgICAgICAgICAgICAgICAgICBwcm9ibGVtcy5wdXNoKGtleSk7XG4gICAgICAgICAgICBpZiAocHJvYmxlbXMubGVuZ3RoID49IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hFcnJvcihzdGF0ZSwgYFByb3BlcnR5IFwiJHtzdWJqZWN0fVwiICR7c3BlYy5tZXNzYWdlfSAke3BsdXJhbChwcm9ibGVtcy5sZW5ndGgsIGBwcm9wZXJ0eWAsIGBwcm9wZXJ0aWVzYCl9ICR7Z2V0UHJpbnRhYmxlQXJyYXkocHJvYmxlbXMsIGNvbmp1bmN0aW9uKX1gKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuXG5leHBvcnQgeyBLZXlSZWxhdGlvbnNoaXAsIFR5cGVBc3NlcnRpb25FcnJvciwgYXBwbHlDYXNjYWRlLCBhcywgYXNzZXJ0LCBhc3NlcnRXaXRoRXJyb3JzLCBjYXNjYWRlLCBmbiwgaGFzQXRMZWFzdE9uZUtleSwgaGFzRXhhY3RMZW5ndGgsIGhhc0ZvcmJpZGRlbktleXMsIGhhc0tleVJlbGF0aW9uc2hpcCwgaGFzTWF4TGVuZ3RoLCBoYXNNaW5MZW5ndGgsIGhhc011dHVhbGx5RXhjbHVzaXZlS2V5cywgaGFzUmVxdWlyZWRLZXlzLCBoYXNVbmlxdWVJdGVtcywgaXNBcnJheSwgaXNBdExlYXN0LCBpc0F0TW9zdCwgaXNCYXNlNjQsIGlzQm9vbGVhbiwgaXNEYXRlLCBpc0RpY3QsIGlzRW51bSwgaXNIZXhDb2xvciwgaXNJU084NjAxLCBpc0luRXhjbHVzaXZlUmFuZ2UsIGlzSW5JbmNsdXNpdmVSYW5nZSwgaXNJbnN0YW5jZU9mLCBpc0ludGVnZXIsIGlzSlNPTiwgaXNMaXRlcmFsLCBpc0xvd2VyQ2FzZSwgaXNNYXAsIGlzTmVnYXRpdmUsIGlzTnVsbGFibGUsIGlzTnVtYmVyLCBpc09iamVjdCwgaXNPbmVPZiwgaXNPcHRpb25hbCwgaXNQYXJ0aWFsLCBpc1BheWxvYWQsIGlzUG9zaXRpdmUsIGlzUmVjb3JkLCBpc1NldCwgaXNTdHJpbmcsIGlzVHVwbGUsIGlzVVVJRDQsIGlzVW5rbm93biwgaXNVcHBlckNhc2UsIG1ha2VUcmFpdCwgbWFrZVZhbGlkYXRvciwgbWF0Y2hlc1JlZ0V4cCwgc29mdEFzc2VydCB9O1xuIl0sIm5hbWVzIjpbImdsb2JhbCIsInRoaXMiLCJmYWlscyIsInJlcXVpcmUkJDAiLCJOQVRJVkVfQklORCIsImNhbGwiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IiLCJGdW5jdGlvblByb3RvdHlwZSIsInVuY3VycnlUaGlzIiwidG9TdHJpbmciLCJzdHJpbmdTbGljZSIsImNsYXNzb2ZSYXciLCJyZXF1aXJlJCQxIiwiY2xhc3NvZiIsInJlcXVpcmUkJDIiLCIkT2JqZWN0IiwiaXNOdWxsT3JVbmRlZmluZWQiLCIkVHlwZUVycm9yIiwicmVxdWlyZU9iamVjdENvZXJjaWJsZSIsInRvSW5kZXhlZE9iamVjdCIsImlzQ2FsbGFibGUiLCJpc09iamVjdCIsImdldEJ1aWx0SW4iLCJ1c2VyQWdlbnQiLCJwcm9jZXNzIiwibWF0Y2giLCJ2ZXJzaW9uIiwiJFN0cmluZyIsIk5BVElWRV9TWU1CT0wiLCJpc1Byb3RvdHlwZU9mIiwiVVNFX1NZTUJPTF9BU19VSUQiLCJyZXF1aXJlJCQzIiwiaXNTeW1ib2wiLCJ0cnlUb1N0cmluZyIsImFDYWxsYWJsZSIsImdldE1ldGhvZCIsIm9yZGluYXJ5VG9QcmltaXRpdmUiLCJkZWZpbmVQcm9wZXJ0eSIsImRlZmluZUdsb2JhbFByb3BlcnR5IiwiZ2xvYmFsVGhpcyIsInN0b3JlIiwic2hhcmVkU3RvcmVNb2R1bGUiLCJzaGFyZWQiLCJ0b09iamVjdCIsImhhc093blByb3BlcnR5IiwidWlkIiwiaGFzT3duIiwicmVxdWlyZSQkNCIsInJlcXVpcmUkJDUiLCJTeW1ib2wiLCJ3ZWxsS25vd25TeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsInRvUHJvcGVydHlLZXkiLCJkb2N1bWVudCIsIkVYSVNUUyIsImRvY3VtZW50Q3JlYXRlRWxlbWVudCIsIkRFU0NSSVBUT1JTIiwicmVxdWlyZSQkNiIsIklFOF9ET01fREVGSU5FIiwicmVxdWlyZSQkNyIsIiRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJhbk9iamVjdCIsIlY4X1BST1RPVFlQRV9ERUZJTkVfQlVHIiwiQ09ORklHVVJBQkxFIiwiZGVmaW5lUHJvcGVydHlNb2R1bGUiLCJjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkiLCJpbnNwZWN0U291cmNlIiwiV2Vha01hcCIsImtleXMiLCJzaGFyZWRLZXkiLCJoaWRkZW5LZXlzIiwiVHlwZUVycm9yIiwic2V0IiwiZ2V0IiwiZ2V0SW50ZXJuYWxTdGF0ZSIsInJlcGxhY2UiLCJtYWtlQnVpbHRJbiIsIm1ha2VCdWlsdEluTW9kdWxlIiwiZGVmaW5lQnVpbHRJbiIsImZsb29yIiwidG9JbnRlZ2VyT3JJbmZpbml0eSIsIm1heCIsIm1pbiIsInRvQWJzb2x1dGVJbmRleCIsInRvTGVuZ3RoIiwibGVuZ3RoT2ZBcnJheUxpa2UiLCJjcmVhdGVNZXRob2QiLCJpbmRleE9mIiwicHVzaCIsImVudW1CdWdLZXlzIiwiaW50ZXJuYWxPYmplY3RLZXlzIiwiY29uY2F0Iiwib3duS2V5cyIsImNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMiLCJpc0ZvcmNlZCIsIlRPX1NUUklOR19UQUciLCJyZWdleHBGbGFncyIsIiRSZWdFeHAiLCJVTlNVUFBPUlRFRF9ZIiwib2JqZWN0S2V5cyIsImh0bWwiLCJyZXF1aXJlJCQ4IiwicmVxdWlyZSQkOSIsImNoYXJBdCIsInJlZ2V4cEV4ZWMiLCIkIiwiZXhlYyIsImFwcGx5IiwiUmVnRXhwUHJvdG90eXBlIiwiYWR2YW5jZVN0cmluZ0luZGV4IiwiZ2V0U3Vic3RpdHV0aW9uIiwicmVxdWlyZSQkMTAiLCJyZXF1aXJlJCQxMSIsInJlcXVpcmUkJDEyIiwicmVxdWlyZSQkMTMiLCJyZXF1aXJlJCQxNCIsInJlcXVpcmUkJDE1IiwicmVxdWlyZSQkMTYiLCJSRVBMQUNFIiwiZW50cnlVbmJpbmQiLCJmb3JtYXRFcnJvciIsImRlYnVnIiwidHR5IiwiSGVscENvbW1hbmQiLCJBcnJheSIsIkJvb2xlYW4iLCJTdHJpbmciLCJfX2F3YWl0ZXIiLCJlbnYiLCJpc1dpbmRvd3MiLCJjb2xvcnMiLCJ1dGlscyIsInBhdGhfMSIsImpvaW5QYXRoXzEiLCJqb2luUGF0aCIsImJ1aWxkIiwicHVzaERpcmVjdG9yeV8xIiwicHVzaERpcmVjdG9yeSIsImVtcHR5IiwicHVzaEZpbGVfMSIsInB1c2hGaWxlIiwiZ2V0QXJyYXlfMSIsImdldEFycmF5IiwiZ3JvdXBGaWxlc18xIiwiZ3JvdXBGaWxlcyIsIl9faW1wb3J0RGVmYXVsdCIsInJlc29sdmVTeW1saW5rIiwiZnNfMSIsImludm9rZUNhbGxiYWNrIiwid2Fsa0RpcmVjdG9yeSIsInF1ZXVlIiwiYXN5bmMiLCJ3YWxrZXJfMSIsInN5bmNfMSIsImFzeW5jXzEiLCJ0eXBlcyIsImV4ZWNTeW5jIiwiam9pbiIsIm9zIiwiY29tbW9uIiwic3JjTW9kdWxlIiwicHJvbWlzaWZ5IiwicmVhZEZpbGUiLCJ3cml0ZUZpbGUiLCJ1bmxpbmsiLCJjb3B5RmlsZSIsIm1rZGlyIiwic3RhdCIsIk9wdGlvbi5TdHJpbmciLCJwYXJzZSIsImZkaXIiLCJjaGFsay55ZWxsb3dCcmlnaHQiLCJjaGFsay5ncmVlbkJyaWdodCIsInBhdGgiLCJvYmplY3RQcm90byIsIm5hdGl2ZU9iamVjdFRvU3RyaW5nIiwic3ltVG9TdHJpbmdUYWciLCJzeW1ib2xUYWciLCJpc0FycmF5IiwiSU5GSU5JVFkiLCJzeW1ib2xQcm90byIsImlkZW50aXR5IiwiZnVuY1RhZyIsImlzRnVuY3Rpb24iLCJmdW5jUHJvdG8iLCJmdW5jVG9TdHJpbmciLCJNQVhfU0FGRV9JTlRFR0VSIiwiaXNBcnJheUxpa2UiLCJhcmdzVGFnIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJmcmVlRXhwb3J0cyIsImZyZWVNb2R1bGUiLCJtb2R1bGVFeHBvcnRzIiwiQnVmZmVyIiwiYXJyYXlUYWciLCJib29sVGFnIiwiZGF0ZVRhZyIsImVycm9yVGFnIiwibWFwVGFnIiwibnVtYmVyVGFnIiwib2JqZWN0VGFnIiwicmVnZXhwVGFnIiwic2V0VGFnIiwic3RyaW5nVGFnIiwid2Vha01hcFRhZyIsImFycmF5QnVmZmVyVGFnIiwiZGF0YVZpZXdUYWciLCJIQVNIX1VOREVGSU5FRCIsIk1hcCIsImdldFN5bWJvbHMiLCJQcm9taXNlIiwiU2V0IiwiRGF0YVZpZXciLCJVaW50OEFycmF5IiwiQ09NUEFSRV9QQVJUSUFMX0ZMQUciLCJDT01QQVJFX1VOT1JERVJFRF9GTEFHIiwiZ2V0VGFnIiwiYmFzZUZvciIsImdyb3VwQnkiLCJfYSIsIk9wdGlvbi5Cb29sZWFuIiwiY2hhbGsuZ3JlZW4iLCJjaGFsay51bmRlcmxpbmUiLCJjaGFsay55ZWxsb3ciLCJjaGFsay5ibHVlIiwiY2hhbGsuY3lhbiIsIm1rZGlyU3luYyIsImNyZWF0ZUhhc2giLCJ0bXBkaXIiLCJleGlzdHNTeW5jIiwiY2hhbGsuYmdZZWxsb3dCcmlnaHQiLCJzZXAiLCJpc1VuaWNvZGVTdXBwb3J0ZWQiLCJpc1Byb21pc2UiLCJydW5Bc3luY01vZHVsZSIsImlzRnVuY3Rpb25fMSIsImNyZWF0ZUVycm9yQ2xhc3NfMSIsImFyclJlbW92ZV8xIiwiX192YWx1ZXMiLCJfX3JlYWQiLCJfX3NwcmVhZEFycmF5IiwiU3Vic2NyaXB0aW9uXzEiLCJyZXBvcnRVbmhhbmRsZWRFcnJvcl8xIiwiY29uZmlnXzEiLCJub29wXzEiLCJub29wIiwiZXJyb3JDb250ZXh0XzEiLCJpZGVudGl0eV8xIiwicGlwZV8xIiwicGlwZSIsIk9ic2VydmFibGVfMSIsIlN1YnNjcmliZXJfMSIsIm9ic2VydmFibGVfMSIsIl9fZXh0ZW5kcyIsIk9wZXJhdG9yU3Vic2NyaWJlcl8xIiwicmVmQ291bnRfMSIsImxpZnRfMSIsIkNvbm5lY3RhYmxlT2JzZXJ2YWJsZV8xIiwiYW5pbWF0aW9uRnJhbWVzXzEiLCJhbmltYXRpb25GcmFtZVByb3ZpZGVyXzEiLCJTdWJqZWN0XzEiLCJCZWhhdmlvclN1YmplY3RfMSIsIlJlcGxheVN1YmplY3RfMSIsImRhdGVUaW1lc3RhbXBQcm92aWRlcl8xIiwiQXN5bmNTdWJqZWN0XzEiLCJBY3Rpb25fMSIsIkFzeW5jQWN0aW9uXzEiLCJBc2FwQWN0aW9uXzEiLCJTY2hlZHVsZXJfMSIsIkFzeW5jU2NoZWR1bGVyXzEiLCJBc2FwU2NoZWR1bGVyXzEiLCJRdWV1ZUFjdGlvbl8xIiwiUXVldWVTY2hlZHVsZXJfMSIsIkFuaW1hdGlvbkZyYW1lQWN0aW9uXzEiLCJBbmltYXRpb25GcmFtZVNjaGVkdWxlcl8xIiwiVmlydHVhbFRpbWVTY2hlZHVsZXJfMSIsImlzU2NoZWR1bGVyXzEiLCJsYXN0IiwiaXNQcm9taXNlXzEiLCJpc0ludGVyb3BPYnNlcnZhYmxlXzEiLCJpc0FzeW5jSXRlcmFibGVfMSIsIml0ZXJhdG9yIiwiaXNJdGVyYWJsZV8xIiwiaXRlcmF0b3JfMSIsIl9fZ2VuZXJhdG9yIiwiaXNSZWFkYWJsZVN0cmVhbUxpa2VfMSIsImlubmVyRnJvbV8xIiwiaXNBcnJheUxpa2VfMSIsInRocm93VW5vYnNlcnZhYmxlRXJyb3JfMSIsImV4ZWN1dGVTY2hlZHVsZV8xIiwib2JzZXJ2ZU9uXzEiLCJzdWJzY3JpYmVPbl8xIiwic2NoZWR1bGVPYnNlcnZhYmxlXzEiLCJzY2hlZHVsZVByb21pc2VfMSIsInNjaGVkdWxlQXJyYXlfMSIsInNjaGVkdWxlSXRlcmFibGVfMSIsInNjaGVkdWxlQXN5bmNJdGVyYWJsZV8xIiwic2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2VfMSIsInNjaGVkdWxlZF8xIiwiZnJvbV8xIiwib2ZfMSIsImFyZ3NfMSIsInRocm93RXJyb3JfMSIsInRocm93RXJyb3IiLCJpc09ic2VydmFibGVfMSIsImxhc3RWYWx1ZUZyb21fMSIsIkVtcHR5RXJyb3JfMSIsImZpcnN0VmFsdWVGcm9tXzEiLCJtYXBfMSIsIm1hcCIsIm1hcE9uZU9yTWFueUFyZ3NfMSIsImJpbmRDYWxsYmFja0ludGVybmFsc18xIiwiYmluZENhbGxiYWNrXzEiLCJiaW5kTm9kZUNhbGxiYWNrXzEiLCJhcmdzQXJnQXJyYXlPck9iamVjdF8xIiwiY3JlYXRlT2JqZWN0XzEiLCJjb21iaW5lTGF0ZXN0XzEiLCJjb21iaW5lTGF0ZXN0IiwibWVyZ2VJbnRlcm5hbHNfMSIsIm1lcmdlTWFwXzEiLCJtZXJnZUFsbF8xIiwiY29uY2F0QWxsXzEiLCJjb25jYXRfMSIsImRlZmVyXzEiLCJjb25uZWN0YWJsZV8xIiwiREVGQVVMVF9DT05GSUciLCJmb3JrSm9pbl8xIiwiZnJvbUV2ZW50XzEiLCJmcm9tRXZlbnRQYXR0ZXJuXzEiLCJnZW5lcmF0ZV8xIiwiaWlmXzEiLCJ0aW1lcl8xIiwiaXNEYXRlXzEiLCJpbnRlcnZhbF8xIiwibWVyZ2VfMSIsImVtcHR5XzEiLCJtZXJnZSIsImFyZ3NPckFyZ0FycmF5XzEiLCJvbkVycm9yUmVzdW1lTmV4dF8xIiwicGFpcnNfMSIsInBhaXJzIiwibm90XzEiLCJmaWx0ZXJfMSIsInBhcnRpdGlvbl8xIiwicmFjZV8xIiwicmFuZ2VfMSIsInVzaW5nXzEiLCJ6aXBfMSIsInppcCIsImF1ZGl0XzEiLCJhdWRpdFRpbWVfMSIsImJ1ZmZlcl8xIiwiYnVmZmVyIiwiYnVmZmVyQ291bnRfMSIsImJ1ZmZlclRpbWVfMSIsImJ1ZmZlclRvZ2dsZV8xIiwiYnVmZmVyV2hlbl8xIiwiY2F0Y2hFcnJvcl8xIiwic2NhbkludGVybmFsc18xIiwicmVkdWNlXzEiLCJ0b0FycmF5XzEiLCJ0b0FycmF5Iiwiam9pbkFsbEludGVybmFsc18xIiwiY29tYmluZUxhdGVzdEFsbF8xIiwiY29tYmluZUxhdGVzdF8yIiwiY29tYmluZUxhdGVzdFdpdGhfMSIsImNvbmNhdE1hcF8xIiwiY29uY2F0TWFwVG9fMSIsImNvbmNhdFdpdGhfMSIsImZyb21TdWJzY3JpYmFibGVfMSIsImNvbm5lY3RfMSIsImNvdW50XzEiLCJkZWJvdW5jZV8xIiwiZGVib3VuY2VUaW1lXzEiLCJkZWZhdWx0SWZFbXB0eV8xIiwidGFrZV8xIiwiaWdub3JlRWxlbWVudHNfMSIsIm1hcFRvXzEiLCJkZWxheVdoZW5fMSIsImRlbGF5XzEiLCJkZW1hdGVyaWFsaXplXzEiLCJOb3RpZmljYXRpb25fMSIsImRpc3RpbmN0XzEiLCJkaXN0aW5jdFVudGlsQ2hhbmdlZF8xIiwiZGlzdGluY3RVbnRpbEtleUNoYW5nZWRfMSIsInRocm93SWZFbXB0eV8xIiwiZWxlbWVudEF0XzEiLCJlbmRXaXRoXzEiLCJldmVyeV8xIiwiZXhoYXVzdE1hcF8xIiwiZXhoYXVzdEFsbF8xIiwiZXhwYW5kXzEiLCJleHBhbmQiLCJmaW5hbGl6ZV8xIiwiZmluZF8xIiwiZmluZEluZGV4XzEiLCJmaXJzdF8xIiwiZ3JvdXBCeV8xIiwiaXNFbXB0eV8xIiwidGFrZUxhc3RfMSIsImxhc3RfMSIsIm1hdGVyaWFsaXplXzEiLCJtYXhfMSIsIm1lcmdlTWFwVG9fMSIsIm1lcmdlU2Nhbl8xIiwibWVyZ2VXaXRoXzEiLCJtaW5fMSIsIm11bHRpY2FzdF8xIiwib25FcnJvclJlc3VtZU5leHRXaXRoXzEiLCJwYWlyd2lzZV8xIiwicGx1Y2tfMSIsInB1Ymxpc2hfMSIsInB1Ymxpc2hCZWhhdmlvcl8xIiwicHVibGlzaExhc3RfMSIsInB1Ymxpc2hSZXBsYXlfMSIsInJhY2VXaXRoXzEiLCJyZXBlYXRfMSIsInJlcGVhdCIsInJlcGVhdFdoZW5fMSIsInJldHJ5XzEiLCJyZXRyeVdoZW5fMSIsInNhbXBsZV8xIiwic2FtcGxlIiwic2FtcGxlVGltZV8xIiwic2Nhbl8xIiwic2VxdWVuY2VFcXVhbF8xIiwic2hhcmVfMSIsInNoYXJlUmVwbGF5XzEiLCJzaW5nbGVfMSIsInNraXBfMSIsInNraXBMYXN0XzEiLCJza2lwVW50aWxfMSIsInNraXBXaGlsZV8xIiwic3RhcnRXaXRoXzEiLCJzd2l0Y2hNYXBfMSIsInN3aXRjaEFsbF8xIiwic3dpdGNoTWFwVG9fMSIsInN3aXRjaFNjYW5fMSIsInRha2VVbnRpbF8xIiwidGFrZVdoaWxlXzEiLCJ0YXBfMSIsInRocm90dGxlXzEiLCJ0aHJvdHRsZVRpbWVfMSIsInRpbWVJbnRlcnZhbF8xIiwidGltZW91dFdpdGhfMSIsInRpbWVzdGFtcF8xIiwidGltZXN0YW1wIiwid2luZG93XzEiLCJ3aW5kb3ciLCJ3aW5kb3dDb3VudF8xIiwid2luZG93VGltZV8xIiwid2luZG93VG9nZ2xlXzEiLCJ3aW5kb3dXaGVuXzEiLCJ3aXRoTGF0ZXN0RnJvbV8xIiwiemlwQWxsXzEiLCJ6aXBfMiIsInppcFdpdGhfMSIsInJlcXVpcmUkJDE3IiwicmVxdWlyZSQkMTgiLCJyZXF1aXJlJCQxOSIsInJlcXVpcmUkJDIwIiwicmVxdWlyZSQkMjEiLCJyZXF1aXJlJCQyMiIsInJlcXVpcmUkJDIzIiwicmVxdWlyZSQkMjQiLCJyZXF1aXJlJCQyNSIsInJlcXVpcmUkJDI2IiwicmVxdWlyZSQkMjciLCJyZXF1aXJlJCQyOCIsInJlcXVpcmUkJDI5IiwicmVxdWlyZSQkMzAiLCJyZXF1aXJlJCQzMSIsInJlcXVpcmUkJDMyIiwicmVxdWlyZSQkMzMiLCJyZXF1aXJlJCQzNCIsInJlcXVpcmUkJDM1IiwicmVxdWlyZSQkMzYiLCJyZXF1aXJlJCQzNyIsInJlcXVpcmUkJDM4IiwicmVxdWlyZSQkMzkiLCJyZXF1aXJlJCQ0MCIsInJlcXVpcmUkJDQxIiwicmVxdWlyZSQkNDIiLCJyZXF1aXJlJCQ0MyIsInJlcXVpcmUkJDQ0IiwicmVxdWlyZSQkNDUiLCJyZXF1aXJlJCQ0NiIsInJlcXVpcmUkJDQ3IiwicmVxdWlyZSQkNDgiLCJyZXF1aXJlJCQ0OSIsInJlcXVpcmUkJDUwIiwicmVxdWlyZSQkNTEiLCJyZXF1aXJlJCQ1MiIsInJlcXVpcmUkJDUzIiwicmVxdWlyZSQkNTQiLCJyZXF1aXJlJCQ1NSIsInJlcXVpcmUkJDU2IiwicmVxdWlyZSQkNTciLCJyZXF1aXJlJCQ1OCIsInJlcXVpcmUkJDU5IiwicmVxdWlyZSQkNjAiLCJyZXF1aXJlJCQ2MSIsInJlcXVpcmUkJDYyIiwicmVxdWlyZSQkNjMiLCJyZXF1aXJlJCQ2NCIsInJlcXVpcmUkJDY1IiwicmVxdWlyZSQkNjYiLCJyZXF1aXJlJCQ2NyIsInJlcXVpcmUkJDY4IiwicmVxdWlyZSQkNjkiLCJyZXF1aXJlJCQ3MCIsInJlcXVpcmUkJDcxIiwicmVxdWlyZSQkNzIiLCJyZXF1aXJlJCQ3MyIsInJlcXVpcmUkJDc0IiwicmVxdWlyZSQkNzUiLCJyZXF1aXJlJCQ3NiIsInJlcXVpcmUkJDc3IiwicmVxdWlyZSQkNzgiLCJyZXF1aXJlJCQ3OSIsInJlcXVpcmUkJDgwIiwicmVxdWlyZSQkODEiLCJyZXF1aXJlJCQ4MiIsInJlcXVpcmUkJDgzIiwicmVxdWlyZSQkODQiLCJyZXF1aXJlJCQ4NSIsInJlcXVpcmUkJDg2IiwicmVxdWlyZSQkODciLCJyZXF1aXJlJCQ4OCIsInJlcXVpcmUkJDg5IiwicmVxdWlyZSQkOTAiLCJyZXF1aXJlJCQ5MSIsInJlcXVpcmUkJDkyIiwicmVxdWlyZSQkOTMiLCJyZXF1aXJlJCQ5NCIsInJlcXVpcmUkJDk1IiwicmVxdWlyZSQkOTYiLCJyZXF1aXJlJCQ5NyIsInJlcXVpcmUkJDk4IiwicmVxdWlyZSQkOTkiLCJyZXF1aXJlJCQxMDAiLCJyZXF1aXJlJCQxMDEiLCJyZXF1aXJlJCQxMDIiLCJyZXF1aXJlJCQxMDMiLCJyZXF1aXJlJCQxMDQiLCJyZXF1aXJlJCQxMDUiLCJyZXF1aXJlJCQxMDYiLCJyZXF1aXJlJCQxMDciLCJyZXF1aXJlJCQxMDgiLCJyZXF1aXJlJCQxMDkiLCJyZXF1aXJlJCQxMTAiLCJyZXF1aXJlJCQxMTEiLCJyZXF1aXJlJCQxMTIiLCJyZXF1aXJlJCQxMTMiLCJyZXF1aXJlJCQxMTQiLCJyZXF1aXJlJCQxMTUiLCJyZXF1aXJlJCQxMTYiLCJyZXF1aXJlJCQxMTciLCJyZXF1aXJlJCQxMTgiLCJyZXF1aXJlJCQxMTkiLCJyZXF1aXJlJCQxMjAiLCJyZXF1aXJlJCQxMjEiLCJyZXF1aXJlJCQxMjIiLCJyZXF1aXJlJCQxMjMiLCJyZXF1aXJlJCQxMjQiLCJyZXF1aXJlJCQxMjUiLCJyZXF1aXJlJCQxMjYiLCJyZXF1aXJlJCQxMjciLCJyZXF1aXJlJCQxMjgiLCJyZXF1aXJlJCQxMjkiLCJyZXF1aXJlJCQxMzAiLCJyZXF1aXJlJCQxMzEiLCJyZXF1aXJlJCQxMzIiLCJyZXF1aXJlJCQxMzMiLCJyZXF1aXJlJCQxMzQiLCJyZXF1aXJlJCQxMzUiLCJyZXF1aXJlJCQxMzYiLCJyZXF1aXJlJCQxMzciLCJyZXF1aXJlJCQxMzgiLCJyZXF1aXJlJCQxMzkiLCJyZXF1aXJlJCQxNDAiLCJyZXF1aXJlJCQxNDEiLCJyZXF1aXJlJCQxNDIiLCJyZXF1aXJlJCQxNDMiLCJyZXF1aXJlJCQxNDQiLCJyZXF1aXJlJCQxNDUiLCJyZXF1aXJlJCQxNDYiLCJyZXF1aXJlJCQxNDciLCJyZXF1aXJlJCQxNDgiLCJyZXF1aXJlJCQxNDkiLCJyZXF1aXJlJCQxNTAiLCJyZXF1aXJlJCQxNTEiLCJyZXF1aXJlJCQxNTIiLCJyZXF1aXJlJCQxNTMiLCJyZXF1aXJlJCQxNTQiLCJyZXF1aXJlJCQxNTUiLCJyZXF1aXJlJCQxNTYiLCJyZXF1aXJlJCQxNTciLCJyZXF1aXJlJCQxNTgiLCJyZXF1aXJlJCQxNTkiLCJyZXF1aXJlJCQxNjAiLCJyZXF1aXJlJCQxNjEiLCJyZXF1aXJlJCQxNjIiLCJyZXF1aXJlJCQxNjMiLCJyZXF1aXJlJCQxNjQiLCJmcm9tRXZlbnQiLCJ0YWtlVW50aWwiLCJmaWx0ZXIiLCJzaGFyZSIsImFzc2VydCIsImFuc2lSZWdleCIsInN0cmlwQW5zaSIsImlzRnVsbHdpZHRoQ29kZVBvaW50IiwiaXNGdWxsd2lkdGhDb2RlUG9pbnRNb2R1bGUiLCJlbW9qaVJlZ2V4Iiwic3RyaW5nV2lkdGgiLCJzdHJpbmdXaWR0aE1vZHVsZSIsImFuc2lTdHlsZXMiLCJzdHJpbmdSZXBsYWNlQWxsIiwic3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4IiwidXRpbCIsImNoYWxrIiwibWltaWNGbiIsIm1pbWljRm5Nb2R1bGUiLCJvbmV0aW1lIiwib25ldGltZU1vZHVsZSIsInNpZ25hbEV4aXRNb2R1bGUiLCJsb2FkIiwicmVzdG9yZUN1cnNvciIsImNsaVNwaW5uZXJzIiwibWFpbiIsImxvZ1N5bWJvbHMiLCJkZWZhdWx0cyIsImNvbWJpbmluZyIsIkRFRkFVTFRTIiwid2N3aWR0aE1vZHVsZSIsIndjd2lkdGgiLCJpc0ludGVyYWN0aXZlIiwiaW5oZXJpdHNfYnJvd3Nlck1vZHVsZSIsImluaGVyaXRzTW9kdWxlIiwiQnVmZmVyTGlzdCIsIkJ1ZmZlckxpc3RTdHJlYW0iLCJibE1vZHVsZSIsIm9yYU1vZHVsZSIsInV0aWwudXAiLCJ1dGlsLmxlZnQiLCJ1dGlsLnJpZ2h0IiwidXRpbC5kb3duIiwidXRpbC5jbGVhckxpbmUiLCJjbGlXaWR0aCIsIndyYXBBbnNpIiwicnVuQXN5bmMiLCJtZXJnZU1hcCIsInRha2UiLCJCYXNlIiwiZmxhdE1hcCIsIklucHV0IiwicmVuZGVyQ2hvaWNlcyIsInV0ZjgiLCJmcyIsInNlbGYiLCJib21IYW5kbGluZyIsIkNyZWF0ZUZpbGVFcnJvcl8xIiwiTGF1bmNoRWRpdG9yRXJyb3JfMSIsIlJlYWRGaWxlRXJyb3JfMSIsIlJlbW92ZUZpbGVFcnJvcl8xIiwiU3ViamVjdCIsImVkaXRBc3luYyIsInJlYWRsaW5lIiwiTXV0ZVN0cmVhbSIsIldyaXRhYmxlIiwicmxVdGlscy5jbGVhckxpbmUiLCJybFV0aWxzLmxlZnQiLCJvZiIsImZyb20iLCJpc09ic2VydmFibGUiLCJjb25jYXRNYXAiLCJwdWJsaXNoIiwicmVkdWNlIiwiZGVmZXIiLCJ1dGlscy5mZXRjaEFzeW5jUXVlc3Rpb25Qcm9wZXJ0eSIsIkVNUFRZIiwiUHJvbXB0IiwiTGlzdCIsIk51bWJlciIsIkNvbmZpcm0iLCJSYXdMaXN0IiwiRXhwYW5kIiwiQ2hlY2tib3giLCJQYXNzd29yZCIsIkVkaXRvciIsIl9zcGF3biIsIk9wdGlvbi5BcnJheSIsIndyaXRlRmlsZVN5bmMiLCJWRVJTSU9OIiwiaXNQbGFpbk9iamVjdCIsIndpdGhEZWZhdWx0cyIsIkVORFBPSU5UUyIsIkNvcmUiLCJzdGF0U3luYyIsImNoYWxrLmJsdWVCcmlnaHQiLCJjaGFsay5kaW0iLCJzcGF3blN5bmMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsSUFBSSxLQUFLLEdBQUcsVUFBVSxFQUFFLEVBQUU7QUFDMUIsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7QUFDdEMsQ0FBQyxDQUFDO0FBQ0Y7QUFDQTtJQUNBQSxRQUFjO0FBQ2Q7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TyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDaEQsVUFBVSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUNELFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUNsRDtBQUNBO0FBQ0EsSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDakMsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3pDLFFBQVEsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3BELEtBQUs7QUFDTCxTQUFTO0FBQ1QsUUFBUSxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDL0MsS0FBSztBQUNMLENBQUM7QUFDRCxTQUFTLE9BQU8sQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFO0FBQ2xDLElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDdEMsVUFBVSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFVBQVUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQztBQUN6QyxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLElBQUksTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDeEMsVUFBVSxRQUFRLENBQUMsS0FB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QUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sS0FBSyxZQUFZLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsVUFBVSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUM5RyxFQUFFLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLFVBQVUsT0FBTyxFQUFFLE1BQU0sRUFBRTtBQUM3RCxNQUFNLFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDakcsTUFBTSxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDcEcsTUFBTSxTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7QUFDcEgsTUFBTSxJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDNUUsR0FBRyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBbU1EO0FBQ3VCLE9BQU8sZUFBZSxLQUFLLFVBQVUsR0FB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QUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNyQixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN0QixFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNwQixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN2QixFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNwQixFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNyQixFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNwQixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN2QixFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNyQixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN2QixFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN4QixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN0QixFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN6QixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN0QixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN2QixFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMzQixFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN6QixFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMzQixFQUFF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QUUsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDcEcsU0FBUyxDQUFDO0FBQ1YsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDM0QsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUQsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDaEQsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDaEQsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNoRixRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDckUsS0FBSztBQUNMLElBQUksS0FBSyxHQUFHO0FBQ1osUUFBUSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFGLFFB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QUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ25GLFNBQVEsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUM1QztBQUNBLFNBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7QUFDL0IsU0FBUSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUMxRSxTQUFRLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0FBQzVCLFNBQVEsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDdEIsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDbkQsU0FBUSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkIsU0FBUSxTQUFTO1FBQ1Y7QUFDUDtPQUNNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDbEYsU0FBUSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNuRDtTQUNRLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkYsU0FBUSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMs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R0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNoRixHQUFFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDMUMsRUFBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQSxTQUFTLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLEtBQUssU0FBUyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFBLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxLQUFLO0dBQ3RDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDbkYsR0FBRSxPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUMxRCxFQUFDLENBQUM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUEsU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFP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LEtBQUcsRUFBRTtBQUNMLEtBQUcsRUFBRTtBQUNMLEtBQUcsRUFBRTtBQUNMLEtBQUcsRUFBRTtBQUNMLEtBQUcsRUFBRTtBQUNMLEtBQUcsRUFBRTtBQUNMLEtBQUcsRUFBRTtBQUNMLEtBQUcsRUFBRTtBQUNMLEtBQUcsRUFBRTtBQUNMLEtBQUcsRUFBRTtBQUNMLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsR0FBRztBQUNOLEtBQUcsQ0FBQztJQUNGO0dBQ0QsQ0FBQyxPQUFPLEtBQUssRUFBRTtBQUNoQjtHQUNDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsU0FBUztBQUNWLEdBQUMsQ0FBQztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQSxTQUFTLFNBQVMsR0FBRztBQUNyQjtBQUNBO0FBQ0E7R0FDQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxNQUFNLENBQUMs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QUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRTtBQUMzQixFQUFFLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRO0FBQzFCLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEM7QUFDQSxFQUFFLE9BQU8sS0FBSyxHQUFHLENBQUMsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hEOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRTtBQUMzQixFQUFFLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0M7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLFlBQVksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFO0FBQ2xDLEVBQUUsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVE7QUFDMUIsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0QztBQUNBLEVBQUUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2hCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzVCLEdBQUcsTUFBTTtBQUNULElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMzQixHQUFHO0FBQ0gsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsU0FBUyxDQUFD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LE9BQU8sVUFBVSxJQUFJLEtBQUssSUFBSSxVQUFVLElBQUksS0FBSyxDQUFDO0FBQ3RELEdBQUc7QUFDSCxFQUFFLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNoQixNQUFNLE1BQU0sR0FBRyxJQUFJO0FBQ25CLE1BQU0sSUFBSSxHQUFHLENBQUMsT0FBTyxHQUFHQyx3QkFBc0IsSUFBSSxJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUM7QUFDM0U7QUFDQSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFCLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUI7QUFDQTtBQUNBLEVBQUUsT0FBTyxFQUFFLEtBQUssR0FBRyxTQUFTLEVBQUU7QUFDOUIsSUFBSSxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQy9CLFFBQVEsUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxVQUFVLEVBQUU7QUFDcEIsTUFBTSxJQUFJLFFBQVEsR0FBRyxTQUFTO0FBQzlCLFVBQVUsVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO0FBQ3BFLFVBQVUsVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDckUsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQ2hDLE1BQU0sSUFBSSxRQUFRLEVBQUU7QUFDcEIsUUFBUSxTQUFTO0FBQ2pCLE9BQU87QUFDUCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDckIsTUFBTSxNQUFNO0FBQ1osS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksRUFBRTtBQUNkLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFL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LENBQUM7QUFDaEM7QUFDQSxNQUFNLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbEMsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNyQyxNQUFNLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkMsTUFBTSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNuQyxNQUFNLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDcEM7QUFDQSxNQUFNLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDckMsTUFBTSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN4QyxNQUFNLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdEMsTUFBTSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN0QyxNQUFNLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdkM7QUFDQSxJQUFBLGNBQWMsR0FBRyxNQUFN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QUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0RSxJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUUsRUFBRTtBQUN0QixRQUFRLElBQUksQ0FBQyxFQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUN0RSxRQUFRLE9BQU8sQ0FBQyxFQUFFLElBQUk7QUFDdEIsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6SyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQsWUFBWSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekIsZ0JBQWdCLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU07QUFDOUMsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUN4RSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztBQUNqRSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsU0FBUztBQUNqRSxnQkFBZ0I7QUFDaEIsb0JBQW9CLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUU7QUFDaEksb0JBQW9CLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDMUcsb0JBQW9CLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFH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QUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM5SSxJQUFJLFNBQVMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ3RGLElBQUksU0FBUyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssWUFBWSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzVILElBQUksU0FBUyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ3RELElBQUksU0FBUyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ3RELElBQUksU0FBUyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtB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LENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3hFLGdCQUFnQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO0FBQ2pFLGdCQUFnQixLQUFLLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxTQUFTO0FBQ2pFLGdCQUFnQjtBQUNoQixvQkFBb0IsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRTtBQUNoSSxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUMxRyxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxD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LENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JILElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sTUFBTSxLQUFLLFVBQVUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFdBQVcsRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0osSUFBSSxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLFVBQVUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0RSxJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUUsRUFBRTtBQUN0QixRQUFRLElBQUksQ0FBQyxFQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUN0RSxRQUFRLE9BQU8sQ0FBQyxFQUFFLElBQUk7QUFDdEIsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6SyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQsWUFBWSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekIsZ0JBQWdCLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU07QUFDOUMsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUN4RSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztBQUNqRSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsU0FBUztBQUNqRSxnQkFBZ0I7QUFDaEIsb0JBQW9CLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUU7QUFDaEksb0JBQW9CLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDMUcsb0JBQW9CLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN6RixvQkFBb0IsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3ZGLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsU0FBUztBQUMzQyxhQUFhO0FBQ2IsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQ2xFLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN6RixLQUFLO0FBQ0wsQ0FBQyxDQUFDO0FBQ0YsTUFBTSxDQUFDLGNBQWMsQ0FBQ3lVLFVBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM5Q0EsVUFBQSxDQUFBLFFBQUEsR0FBRyxLQUFLLEVBQUU7QUFDMUIsSUFBSWxGLFlBQVUsR0FBR3JQLFVBQTJCLENBQUM7QUFDN0MsSUFBSWtSLGVBQWEsR0FBR3hRLGFBQThCLENBQUM7QUFDbkQsSUFBSXVULFNBQU8sR0FBR3JULE9BQWtCLENBQUM7QUFDakMsSUFBSSxrQkFBa0IsR0FBR2lCLGtCQUF3QyxDQUFDO0FBQ2xFLFNBQVMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsU0FBUyxFQUFFO0FBQ25HLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2YsSUFBSSxJQUFJLGNBQWMsQ0FBQztBQUN2QixJQUFJLElBQUksWUFBWSxDQUFDO0FBQ3JCLElBQUksSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUNoQyxRQUFRLENBQUMsRUFBRSxHQUFHLHFCQUFxQixFQUFFLFlBQVksR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLE9BQU8sR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsY0FBYyxFQUFFLGNBQWMsR0FBRyxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUd3TixZQUFVLENBQUMsUUFBUSxHQUFHLEVBQUUsRUFBRSxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRTtBQUNsTyxLQUFLO0FBQ0wsU0FBUztBQUNULFFBQVEsWUFBWSxHQUFHLHFCQUFxQixDQUFDO0FBQzdDLFFBQVEsSUFBSSxDQUFDLHlCQUF5QixJQUFJNkIsZUFBYSxDQUFDLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFO0FBQ2hHLFlBQVksY0FBYyxHQUFHN0IsWUFBVSxDQUFDLFFBQVEsQ0FBQztBQUNqRCxZQUFZLFNBQVMsR0FBRyx5QkFBeUIsQ0FBQztBQUNsRCxTQUFTO0FBQ1QsYUFBYTtBQUNiLFlBQVksY0FBYyxHQUFHLHlCQUF5QixDQUFDO0FBQ3ZELFNBQVM7QUFDVCxLQUFLO0FBQ0wsSUFBSSxTQUFTLEdBQUcsR0FBRztBQUNuQixRQUFRLElBQUksS0FBSyxDQUFDO0FBQ2xCLFFBQVEsT0FBTyxXQUFXLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFO0FBQy9DLFlBQVksUUFBUSxFQUFFLENBQUMsS0FBSztBQUM1QixnQkFBZ0IsS0FBSyxDQUFDO0FBQ3RCLG9CQUFvQixLQUFLLEdBQUcsWUFBWSxDQUFDO0FBQ3pDLG9CQUFvQixFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNqQyxnQkFBZ0IsS0FBSyxDQUFDO0FBQ3RCLG9CQUFvQixJQUFJLEVBQUUsQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6RSxvQkFBb0IsT0FBTyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN0RCxnQkFBZ0IsS0FBSyxDQUFDO0FBQ3RCLG9CQUFvQixFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDOUIsb0JBQW9CLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLGdCQUFnQixLQUFLLENBQUM7QUFDdEIsb0JBQW9CLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0Msb0JBQW9CLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEMsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxhQUFhO0FBQ2IsU0FBUyxDQUFDLENBQUM7QUFDWCxLQUFLO0FBQ0wsSUFBSSxPQUFPNEUsU0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTO0FBQ25DO0FBQ0EsWUFBWSxZQUFZLEVBQUUsT0FBTyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFO0FBQ3pGO0FBQ0EsWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUNsQixDQUFDO0FBQ2VNLFVBQUEsQ0FBQSxRQUFBLEdBQUcsUUFBUTs7OztBQzVFM0IsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsS0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ25EQSxLQUFBLENBQUEsR0FBQSxHQUFHLEtBQUssRUFBRTtBQUNyQixJQUFJLE9BQU8sR0FBR3hVLE9BQWtCLENBQUM7QUFDakMsU0FBUyxHQUFHLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUU7QUFDakQsSUFBSSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLFFBQVEsU0FBUyxFQUFFLEdBQUcsVUFBVSxHQUFHLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMzRixDQUFDO0FBQ1V3VSxLQUFBLENBQUEsR0FBQSxHQUFHLEdBQUc7Ozs7OztBQ05qQixNQUFNLENBQUMsY0FBYyxDQUFDQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDakRBLE9BQUEsQ0FBQSxLQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ3ZCLElBQUlqRixjQUFZLEdBQUd4UCxZQUF3QixDQUFDO0FBQzVDLElBQUl3SixTQUFPLEdBQUc5SSxLQUE2QixDQUFDO0FBQzVDLElBQUksYUFBYSxHQUFHRSxhQUE4QixDQUFDO0FBQ25ELElBQUk4VCxVQUFRLEdBQUc3UyxNQUF5QixDQUFDO0FBQ3pDLFNBQVMsS0FBSyxDQUFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxTQUFTLEVBQUU7QUFDeEQsSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRTtBQUM1QyxJQUFJLElBQUksU0FBUyxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsU0FBUyxHQUFHMkgsU0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzVELElBQUksSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5QixJQUFJLElBQUksbUJBQW1CLElBQUksSUFBSSxFQUFFO0FBQ3JDLFFBQVEsSUFBSSxhQUFhLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLEVBQUU7QUFDNUQsWUFBWSxTQUFTLEdBQUcsbUJBQW1CLENBQUM7QUFDNUMsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDO0FBQ25ELFNBQVM7QUFDVCxLQUFLO0FBQ0wsSUFBSSxPQUFPLElBQUlnRyxjQUFZLENBQUMsVUFBVSxDQUFDLFVBQVUsVUFBVSxFQUFFO0FBQzdELFFBQVEsSUFBSSxHQUFHLEdBQUdrRixVQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUM7QUFDdkYsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7QUFDckIsWUFBWSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLFNBQVM7QUFDVCxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQixRQUFRLE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQyxZQUFZO0FBQzlDLFlBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDcEMsZ0JBQWdCLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQyxnQkFBZ0IsSUFBSSxDQUFDLElBQUksZ0JBQWdCLEVBQUU7QUFDM0Msb0JBQW9CLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDL0QsaUJBQWlCO0FBQ2pCLHFCQUFxQjtBQUNyQixvQkFBb0IsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzFDLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNZRCxPQUFBLENBQUEsS0FBQSxHQUFHLEtBQUs7O0FDckNyQixNQUFNLENBQUMsY0FBYyxDQUFDRSxVQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDOUNBLFVBQUEsQ0FBQSxRQUFBLEdBQUcsS0FBSyxFQUFFO0FBQzFCLElBQUluTCxTQUFPLEdBQUd4SixLQUE2QixDQUFDO0FBQzVDLElBQUl5VSxTQUFPLEdBQUcvVCxPQUFrQixDQUFDO0FBQ2pDLFNBQVMsUUFBUSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUU7QUFDckMsSUFBSSxJQUFJLE1BQU0sS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRTtBQUMxQyxJQUFJLElBQUksU0FBUyxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsU0FBUyxHQUFHOEksU0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFO0FBQ3JFLElBQUksSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3BCLFFBQVEsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNuQixLQUFLO0FBQ0wsSUFBSSxPQUFPaUwsU0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFDZUUsVUFBQSxDQUFBLFFBQUEsR0FBRyxRQUFROzs7O0FDWjNCLE1BQU0sQ0FBQyxjQUFjLENBQUNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNqREEsT0FBQSxDQUFBLEtBQUEsR0FBRyxLQUFLLEVBQUU7QUFDdkIsSUFBSWQsWUFBVSxHQUFHOVQsVUFBZ0MsQ0FBQztBQUNsRCxJQUFJNFIsYUFBVyxHQUFHbFIsV0FBc0IsQ0FBQztBQUN6QyxJQUFJbVUsU0FBTyxHQUFHalUsS0FBa0IsQ0FBQztBQUNqQyxJQUFJK1IsUUFBTSxHQUFHOVEsSUFBdUIsQ0FBQztBQUNyQyxJQUFJNFEsUUFBTSxHQUFHNVAsTUFBaUIsQ0FBQztBQUMvQixTQUFTaVMsT0FBSyxHQUFHO0FBQ2pCLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLElBQUksS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDbEQsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLEtBQUs7QUFDTCxJQUFJLElBQUksU0FBUyxHQUFHbkMsUUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QyxJQUFJLElBQUksVUFBVSxHQUFHQSxRQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN0RCxJQUFJLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztBQUN2QixJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTTtBQUMxQjtBQUNBLFlBQVlrQyxTQUFPLENBQUMsS0FBSztBQUN6QixVQUFVLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQztBQUM5QjtBQUNBLGdCQUFnQmpELGFBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0FBQ0EsZ0JBQWdCa0MsWUFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQ3JCLFFBQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDakYsQ0FBQztBQUNZbUMsT0FBQSxDQUFBLEtBQUEsR0FBR0UsT0FBSzs7Ozs7Q0N4QnJCLE1BQU0sQ0FBQyxjQUFjLENBQUEsT0FBQSxFQUFVLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0NBQzlELE9BQWdCLENBQUEsS0FBQSxHQUFBLE9BQUEsQ0FBQSxLQUFBLEdBQWdCLEtBQUssQ0FBQyxDQUFDO0NBQ3ZDLElBQUksWUFBWSxHQUFHOVUsWUFBd0IsQ0FBQztDQUM1QyxJQUFJLE1BQU0sR0FBR1UsTUFBdUIsQ0FBQztDQUNyQyxPQUFnQixDQUFBLEtBQUEsR0FBQSxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELENBQUEsU0FBUyxLQUFLLEdBQUc7QUFDakIsS0FBSSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7RUFDeEI7QUFDRCxDQUFBLE9BQUEsQ0FBQSxLQUFBLEdBQWdCLEtBQUssQ0FBQztBQUN0QixDQUFBOzs7Ozs7O0FDVEEsTUFBTSxDQUFDLGNBQWMsQ0FBQ3FVLGdCQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDeENBLGdCQUFBLENBQUEsY0FBQSxHQUFHLEtBQUssRUFBRTtBQUNoQyxJQUFJL0osU0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7QUFDNUIsU0FBUyxjQUFjLENBQUMsSUFBSSxFQUFFO0FBQzlCLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSUEsU0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEUsQ0FBQztBQUNxQitKLGdCQUFBLENBQUEsY0FBQSxHQUFHLGNBQWM7O0FDTnZDLE1BQU0sQ0FBQyxjQUFjLENBQUNDLG1CQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDckNBLG1CQUFBLENBQUEsaUJBQUEsR0FBRyxLQUFLLEVBQUU7QUFDbkMsSUFBSXhGLGNBQVksR0FBR3hQLFlBQXdCLENBQUM7QUFDNUMsSUFBSStVLGtCQUFnQixHQUFHclUsZ0JBQWlDLENBQUM7QUFDekQsSUFBSWtQLHNCQUFvQixHQUFHaFAsb0JBQTBDLENBQUM7QUFDdEUsSUFBSXNPLFFBQU0sR0FBR3JOLE1BQXVCLENBQUM7QUFDckMsSUFBSStQLGFBQVcsR0FBRy9PLFdBQXNCLENBQUM7QUFDekMsU0FBUyxpQkFBaUIsR0FBRztBQUM3QixJQUFJLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUNyQixJQUFJLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ2xELFFBQVEsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQyxLQUFLO0FBQ0wsSUFBSSxJQUFJLFdBQVcsR0FBR2tTLGtCQUFnQixDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMvRCxJQUFJLE9BQU8sSUFBSXZGLGNBQVksQ0FBQyxVQUFVLENBQUMsVUFBVSxVQUFVLEVBQUU7QUFDN0QsUUFBUSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDNUIsUUFBUSxJQUFJLGFBQWEsR0FBRyxZQUFZO0FBQ3hDLFlBQVksSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRTtBQUNsRCxnQkFBZ0IsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDeEMsZ0JBQWdCLElBQUk7QUFDcEIsb0JBQW9CLFVBQVUsR0FBR29DLGFBQVcsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuRixpQkFBaUI7QUFDakIsZ0JBQWdCLE9BQU8sR0FBRyxFQUFFO0FBQzVCLG9CQUFvQixhQUFhLEVBQUUsQ0FBQztBQUNwQyxvQkFBb0IsT0FBTztBQUMzQixpQkFBaUI7QUFDakIsZ0JBQWdCLElBQUksZUFBZSxHQUFHLElBQUloQyxzQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFVixRQUFNLENBQUMsSUFBSSxFQUFFQSxRQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkksZ0JBQWdCLFVBQVUsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDdEQsZ0JBQWdCLGVBQWUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDbkQsYUFBYTtBQUNiLGlCQUFpQjtBQUNqQixnQkFBZ0IsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3RDLGFBQWE7QUFDYixTQUFTLENBQUM7QUFDVixRQUFRLGFBQWEsRUFBRSxDQUFDO0FBQ3hCLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUN3QjhGLG1CQUFBLENBQUEsaUJBQUEsR0FBRyxpQkFBaUI7Ozs7QUNwQzdDLE1BQU0sQ0FBQyxjQUFjLENBQUNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNqREEsT0FBQSxDQUFBLEtBQUEsR0FBRyxLQUFLLEVBQUU7QUFDdkIsSUFBSXhDLFFBQU0sR0FBR3pTLE1BQWlCLENBQUM7QUFDL0IsU0FBU2tWLE9BQUssQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFO0FBQy9CLElBQUksT0FBT3pDLFFBQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBQ1l3QyxPQUFBLENBQUEsS0FBQSxHQUFHQyxPQUFLOzs7Ozs7QUNOckIsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsS0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ25EQSxLQUFBLENBQUEsR0FBQSxHQUFHLEtBQUssRUFBRTtBQUNyQixTQUFTLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQzVCLElBQUksT0FBTyxVQUFVLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqRixDQUFDO0FBQ1VBLEtBQUEsQ0FBQSxHQUFBLEdBQUcsR0FBRzs7OztBQ0xqQixNQUFNLENBQUMsY0FBYyxDQUFDQyxRQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDaERBLFFBQUEsQ0FBQSxNQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ3hCLElBQUl0RixRQUFNLEdBQUc5UCxJQUF1QixDQUFDO0FBQ3JDLElBQUk0UCxzQkFBb0IsR0FBR2xQLG9CQUErQixDQUFDO0FBQzNELFNBQVMsTUFBTSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUU7QUFDcEMsSUFBSSxPQUFPb1AsUUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDeEQsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdEIsUUFBUSxNQUFNLENBQUMsU0FBUyxDQUFDRixzQkFBb0IsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsVUFBVSxLQUFLLEVBQUUsRUFBRSxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwTCxLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDYXdGLFFBQUEsQ0FBQSxNQUFBLEdBQUcsTUFBTTs7QUNWdkIsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsV0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzdDQSxXQUFBLENBQUEsU0FBQSxHQUFHLEtBQUssRUFBRTtBQUMzQixJQUFJLEtBQUssR0FBR3JWLEtBQXNCLENBQUM7QUFDbkMsSUFBSW9WLFVBQVEsR0FBRzFVLFFBQThCLENBQUM7QUFDOUMsSUFBSWtSLGFBQVcsR0FBR2hSLFdBQXNCLENBQUM7QUFDekMsU0FBUyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUU7QUFDL0MsSUFBSSxPQUFPLENBQUN3VSxVQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQ3hELGFBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRXdELFVBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQ3hELGFBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9KLENBQUM7QUFDZ0J5RCxXQUFBLENBQUEsU0FBQSxHQUFHLFNBQVM7Ozs7QUNSN0IsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsTUFBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzlEQSxNQUFBLENBQUEsUUFBZ0IsR0FBR0EsTUFBQSxDQUFBLElBQVksR0FBRyxLQUFLLEVBQUU7QUFDekMsSUFBSTlGLGNBQVksR0FBR3hQLFlBQXdCLENBQUM7QUFDNUMsSUFBSTRSLGFBQVcsR0FBR2xSLFdBQXNCLENBQUM7QUFDekMsSUFBSXFVLGtCQUFnQixHQUFHblUsZ0JBQWlDLENBQUM7QUFDekQsSUFBSWdQLHNCQUFvQixHQUFHL04sb0JBQTBDLENBQUM7QUFDdEUsU0FBUyxJQUFJLEdBQUc7QUFDaEIsSUFBSSxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDckIsSUFBSSxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNsRCxRQUFRLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEMsS0FBSztBQUNMLElBQUksT0FBTyxHQUFHa1Qsa0JBQWdCLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZELElBQUksT0FBTyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsR0FBR25ELGFBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSXBDLGNBQVksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDckgsQ0FBQztBQUNXOEYsTUFBQSxDQUFBLElBQUEsR0FBRyxLQUFLO0FBQ3BCLFNBQVMsUUFBUSxDQUFDLE9BQU8sRUFBRTtBQUMzQixJQUFJLE9BQU8sVUFBVSxVQUFVLEVBQUU7QUFDakMsUUFBUSxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDL0IsUUFBUSxJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMsRUFBRTtBQUNuQyxZQUFZLGFBQWEsQ0FBQyxJQUFJLENBQUMxRCxhQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQ2hDLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxVQUFVLEtBQUssRUFBRTtBQUN0SixnQkFBZ0IsSUFBSSxhQUFhLEVBQUU7QUFDbkMsb0JBQW9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ25FLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNsRSxxQkFBcUI7QUFDckIsb0JBQW9CLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFDekMsaUJBQWlCO0FBQ2pCLGdCQUFnQixVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixTQUFTLENBQUM7QUFDVixRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGFBQWEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEYsWUFBWSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsU0FBUztBQUNULEtBQUssQ0FBQztBQUNOLENBQUM7QUFDZTBGLE1BQUEsQ0FBQSxRQUFBLEdBQUcsUUFBUTs7OztBQ2xDM0IsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2pEQSxPQUFBLENBQUEsS0FBQSxHQUFHLEtBQUssRUFBRTtBQUN2QixJQUFJL0YsY0FBWSxHQUFHeFAsWUFBd0IsQ0FBQztBQUM1QyxJQUFJNlUsU0FBTyxHQUFHblUsS0FBa0IsQ0FBQztBQUNqQyxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtBQUN4QyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtBQUN2QixRQUFRLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDdEIsUUFBUSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLEtBQUs7QUFDTCxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRTtBQUNwQixRQUFRLE9BQU9tVSxTQUFPLENBQUMsS0FBSyxDQUFDO0FBQzdCLEtBQUs7QUFDTCxJQUFJLElBQUksR0FBRyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDNUIsSUFBSSxPQUFPLElBQUlyRixjQUFZLENBQUMsVUFBVSxDQUFDLFNBQVM7QUFDaEQ7QUFDQSxZQUFZLFVBQVUsVUFBVSxFQUFFO0FBQ2xDLGdCQUFnQixJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDOUIsZ0JBQWdCLE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQyxZQUFZO0FBQ3RELG9CQUFvQixJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUU7QUFDakMsd0JBQXdCLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3Qyx3QkFBd0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3hDLHFCQUFxQjtBQUNyQix5QkFBeUI7QUFDekIsd0JBQXdCLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUM5QyxxQkFBcUI7QUFDckIsaUJBQWlCLENBQUMsQ0FBQztBQUNuQixhQUFhO0FBQ2I7QUFDQSxZQUFZLFVBQVUsVUFBVSxFQUFFO0FBQ2xDLGdCQUFnQixJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDOUIsZ0JBQWdCLE9BQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDdEQsb0JBQW9CLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QyxpQkFBaUI7QUFDakIsZ0JBQWdCLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN0QyxhQUFhLENBQUMsQ0FBQztBQUNmLENBQUM7QUFDWStGLE9BQUEsQ0FBQSxLQUFBLEdBQUcsS0FBSzs7OztBQ3BDckIsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2pEQSxPQUFBLENBQUEsS0FBQSxHQUFHLEtBQUssRUFBRTtBQUN2QixJQUFJaEcsY0FBWSxHQUFHeFAsWUFBd0IsQ0FBQztBQUM1QyxJQUFJNFIsYUFBVyxHQUFHbFIsV0FBc0IsQ0FBQztBQUN6QyxJQUFJbVUsU0FBTyxHQUFHalUsS0FBa0IsQ0FBQztBQUNqQyxTQUFTLEtBQUssQ0FBQyxlQUFlLEVBQUUsaUJBQWlCLEVBQUU7QUFDbkQsSUFBSSxPQUFPLElBQUk0TyxjQUFZLENBQUMsVUFBVSxDQUFDLFVBQVUsVUFBVSxFQUFFO0FBQzdELFFBQVEsSUFBSSxRQUFRLEdBQUcsZUFBZSxFQUFFLENBQUM7QUFDekMsUUFBUSxJQUFJLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNqRCxRQUFRLElBQUksTUFBTSxHQUFHLE1BQU0sR0FBR29DLGFBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUdpRCxTQUFPLENBQUMsS0FBSyxDQUFDO0FBQzVFLFFBQVEsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNyQyxRQUFRLE9BQU8sWUFBWTtBQUMzQixZQUFZLElBQUksUUFBUSxFQUFFO0FBQzFCLGdCQUFnQixRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDdkMsYUFBYTtBQUNiLFNBQVMsQ0FBQztBQUNWLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNZVyxPQUFBLENBQUEsS0FBQSxHQUFHLEtBQUs7Ozs7QUNsQnJCLElBQUkzRyxRQUFNLEdBQUcsQ0FBQy9PLGNBQUksSUFBSUEsY0FBSSxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDdEQsSUFBSSxJQUFJLENBQUMsR0FBRyxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMvRCxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNyQyxJQUFJLElBQUk7QUFDUixRQUFRLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuRixLQUFLO0FBQ0wsSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO0FBQzNDLFlBQVk7QUFDWixRQUFRLElBQUk7QUFDWixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RCxTQUFTO0FBQ1QsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDekMsS0FBSztBQUNMLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxDQUFDLENBQUM7QUFDRixJQUFJZ1AsZUFBYSxHQUFHLENBQUNoUCxjQUFJLElBQUlBLGNBQUksQ0FBQyxhQUFhLEtBQUssVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFO0FBQ3hFLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDckUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxDQUFDLENBQUM7QUFDRixNQUFNLENBQUMsY0FBYyxDQUFDMlYsS0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ25EQSxLQUFBLENBQUEsR0FBQSxHQUFHLEtBQUssRUFBRTtBQUNyQixJQUFJakcsY0FBWSxHQUFHeFAsWUFBd0IsQ0FBQztBQUM1QyxJQUFJNFIsYUFBVyxHQUFHbFIsV0FBc0IsQ0FBQztBQUN6QyxJQUFJcVUsa0JBQWdCLEdBQUduVSxnQkFBaUMsQ0FBQztBQUN6RCxJQUFJaVUsU0FBTyxHQUFHaFQsS0FBa0IsQ0FBQztBQUNqQyxJQUFJK04sc0JBQW9CLEdBQUcvTSxvQkFBMEMsQ0FBQztBQUN0RSxJQUFJOFAsUUFBTSxHQUFHN1AsSUFBdUIsQ0FBQztBQUNyQyxTQUFTNFMsS0FBRyxHQUFHO0FBQ2YsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7QUFDbEIsSUFBSSxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNsRCxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakMsS0FBSztBQUNMLElBQUksSUFBSSxjQUFjLEdBQUcvQyxRQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEQsSUFBSSxJQUFJLE9BQU8sR0FBR29DLGtCQUFnQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4RCxJQUFJLE9BQU8sT0FBTyxDQUFDLE1BQU07QUFDekIsVUFBVSxJQUFJdkYsY0FBWSxDQUFDLFVBQVUsQ0FBQyxVQUFVLFVBQVUsRUFBRTtBQUM1RCxZQUFZLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLFlBQVksSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkUsWUFBWSxVQUFVLENBQUMsR0FBRyxDQUFDLFlBQVk7QUFDdkMsZ0JBQWdCLE9BQU8sR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzNDLGFBQWEsQ0FBQyxDQUFDO0FBQ2YsWUFBWSxJQUFJLE9BQU8sR0FBRyxVQUFVLFdBQVcsRUFBRTtBQUNqRCxnQkFBZ0JvQyxhQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQ2hDLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxVQUFVLEtBQUssRUFBRTtBQUNqSixvQkFBb0IsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyRCxvQkFBb0IsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsTUFBTSxFQUFFLEVBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3BGLHdCQUF3QixJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsTUFBTSxFQUFFLEVBQUUsT0FBTyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0Ysd0JBQXdCLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUVkLGVBQWEsQ0FBQyxFQUFFLEVBQUVELFFBQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDbkksd0JBQXdCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDM0csNEJBQTRCLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsRCx5QkFBeUI7QUFDekIscUJBQXFCO0FBQ3JCLGlCQUFpQixFQUFFLFlBQVk7QUFDL0Isb0JBQW9CLFNBQVMsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEQsb0JBQW9CLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDMUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLGFBQWEsQ0FBQztBQUNkLFlBQVksS0FBSyxJQUFJLFdBQVcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxFQUFFO0FBQ3pHLGdCQUFnQixPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDckMsYUFBYTtBQUNiLFlBQVksT0FBTyxZQUFZO0FBQy9CLGdCQUFnQixPQUFPLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQztBQUMzQyxhQUFhLENBQUM7QUFDZCxTQUFTLENBQUM7QUFDVixVQUFVZ0csU0FBTyxDQUFDLEtBQUssQ0FBQztBQUN4QixDQUFDO0FBQ1VZLEtBQUEsQ0FBQSxHQUFBLEdBQUdDLEtBQUc7Ozs7QUNuRWpCLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQzs7OztBQ0E3RCxNQUFNLENBQUMsY0FBYyxDQUFDQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDakRBLE9BQUEsQ0FBQSxLQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ3ZCLElBQUk3RixRQUFNLEdBQUc5UCxJQUF1QixDQUFDO0FBQ3JDLElBQUk0UixhQUFXLEdBQUdsUixXQUFrQyxDQUFDO0FBQ3JELElBQUlrUCxzQkFBb0IsR0FBR2hQLG9CQUErQixDQUFDO0FBQzNELFNBQVMsS0FBSyxDQUFDLGdCQUFnQixFQUFFO0FBQ2pDLElBQUksT0FBT2tQLFFBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ3hELFFBQVEsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzdCLFFBQVEsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFFBQVEsSUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFDdEMsUUFBUSxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDL0IsUUFBUSxJQUFJLFdBQVcsR0FBRyxZQUFZO0FBQ3RDLFlBQVksa0JBQWtCLEtBQUssSUFBSSxJQUFJLGtCQUFrQixLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3JILFlBQVksa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLFlBQVksSUFBSSxRQUFRLEVBQUU7QUFDMUIsZ0JBQWdCLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDakMsZ0JBQWdCLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQztBQUN0QyxnQkFBZ0IsU0FBUyxHQUFHLElBQUksQ0FBQztBQUNqQyxnQkFBZ0IsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2QyxhQUFhO0FBQ2IsWUFBWSxVQUFVLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2hELFNBQVMsQ0FBQztBQUNWLFFBQVEsSUFBSSxlQUFlLEdBQUcsWUFBWTtBQUMxQyxZQUFZLGtCQUFrQixHQUFHLElBQUksQ0FBQztBQUN0QyxZQUFZLFVBQVUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEQsU0FBUyxDQUFDO0FBQ1YsUUFBUSxNQUFNLENBQUMsU0FBUyxDQUFDRixzQkFBb0IsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsVUFBVSxLQUFLLEVBQUU7QUFDcEcsWUFBWSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzVCLFlBQVksU0FBUyxHQUFHLEtBQUssQ0FBQztBQUM5QixZQUFZLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtBQUNyQyxnQkFBZ0JnQyxhQUFXLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLGtCQUFrQixHQUFHaEMsc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxlQUFlLENBQUMsRUFBRSxDQUFDO0FBQ3pMLGFBQWE7QUFDYixTQUFTLEVBQUUsWUFBWTtBQUN2QixZQUFZLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDOUIsWUFBWSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsa0JBQWtCLElBQUksa0JBQWtCLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNyRyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ1osS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ1krRixPQUFBLENBQUEsS0FBQSxHQUFHLEtBQUs7Ozs7QUN0Q3JCLE1BQU0sQ0FBQyxjQUFjLENBQUNDLFdBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM3Q0EsV0FBQSxDQUFBLFNBQUEsR0FBRyxLQUFLLEVBQUU7QUFDM0IsSUFBSXBNLFNBQU8sR0FBR3hKLEtBQTZCLENBQUM7QUFDNUMsSUFBSSxPQUFPLEdBQUdVLE9BQWtCLENBQUM7QUFDakMsSUFBSStULFNBQU8sR0FBRzdULE9BQThCLENBQUM7QUFDN0MsU0FBUyxTQUFTLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRTtBQUN4QyxJQUFJLElBQUksU0FBUyxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsU0FBUyxHQUFHNEksU0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFO0FBQ3JFLElBQUksT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxPQUFPaUwsU0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckYsQ0FBQztBQUNnQm1CLFdBQUEsQ0FBQSxTQUFBLEdBQUcsU0FBUzs7OztBQ1Q3QixNQUFNLENBQUMsY0FBYyxDQUFDQyxRQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDaERBLFFBQUEsQ0FBQSxNQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ3hCLElBQUkvRixRQUFNLEdBQUc5UCxJQUF1QixDQUFDO0FBQ3JDLElBQUlrUCxRQUFNLEdBQUd4TyxNQUF1QixDQUFDO0FBQ3JDLElBQUlrUCxzQkFBb0IsR0FBR2hQLG9CQUErQixDQUFDO0FBQzNELElBQUlnUixhQUFXLEdBQUcvUCxXQUFrQyxDQUFDO0FBQ3JELFNBQVNpVSxRQUFNLENBQUMsZUFBZSxFQUFFO0FBQ2pDLElBQUksT0FBT2hHLFFBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ3hELFFBQVEsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQy9CLFFBQVEsTUFBTSxDQUFDLFNBQVMsQ0FBQ0Ysc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFVBQVUsS0FBSyxFQUFFLEVBQUUsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxZQUFZO0FBQ3ZKLFlBQVksVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMzQyxZQUFZLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ1osUUFBUWdDLGFBQVcsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsU0FBUyxDQUFDaEMsc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFlBQVk7QUFDL0gsWUFBWSxJQUFJLENBQUMsR0FBRyxhQUFhLENBQUM7QUFDbEMsWUFBWSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQy9CLFlBQVksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixTQUFTLEVBQUVWLFFBQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsT0FBTyxZQUFZO0FBQzNCLFlBQVksYUFBYSxHQUFHLElBQUksQ0FBQztBQUNqQyxTQUFTLENBQUM7QUFDVixLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDYTJHLFFBQUEsQ0FBQSxNQUFBLEdBQUdDLFFBQU07Ozs7QUN2QnZCLElBQUlsSCxVQUFRLEdBQUcsQ0FBQzlPLGNBQUksSUFBSUEsY0FBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsRUFBRTtBQUN0RCxJQUFJLElBQUksQ0FBQyxHQUFHLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEYsSUFBSSxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLE9BQU87QUFDbEQsUUFBUSxJQUFJLEVBQUUsWUFBWTtBQUMxQixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUMvQyxZQUFZLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3BELFNBQVM7QUFDVCxLQUFLLENBQUM7QUFDTixJQUFJLE1BQU0sSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLHlCQUF5QixHQUFHLGlDQUFpQyxDQUFDLENBQUM7QUFDM0YsQ0FBQyxDQUFDO0FBQ0YsTUFBTSxDQUFDLGNBQWMsQ0FBQ2lXLGFBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMzQ0EsYUFBQSxDQUFBLFdBQUEsR0FBRyxLQUFLLEVBQUU7QUFDN0IsSUFBSWpHLFFBQU0sR0FBRzlQLElBQXVCLENBQUM7QUFDckMsSUFBSTRQLHNCQUFvQixHQUFHbFAsb0JBQStCLENBQUM7QUFDM0QsSUFBSWlPLGFBQVcsR0FBRy9OLFdBQTRCLENBQUM7QUFDL0MsU0FBUyxXQUFXLENBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFFO0FBQ25ELElBQUksSUFBSSxnQkFBZ0IsS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFLGdCQUFnQixHQUFHLElBQUksQ0FBQyxFQUFFO0FBQ2pFLElBQUksZ0JBQWdCLEdBQUcsZ0JBQWdCLEtBQUssSUFBSSxJQUFJLGdCQUFnQixLQUFLLEtBQUssQ0FBQyxHQUFHLGdCQUFnQixHQUFHLFVBQVUsQ0FBQztBQUNoSCxJQUFJLE9BQU9rUCxRQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUN4RCxRQUFRLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUN6QixRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN0QixRQUFRLE1BQU0sQ0FBQyxTQUFTLENBQUNGLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxVQUFVLEtBQUssRUFBRTtBQUNwRyxZQUFZLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ2pDLFlBQVksSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFlBQVksSUFBSSxLQUFLLEVBQUUsR0FBRyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUU7QUFDbEQsZ0JBQWdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakMsYUFBYTtBQUNiLFlBQVksSUFBSTtBQUNoQixnQkFBZ0IsS0FBSyxJQUFJLFNBQVMsR0FBR2hCLFVBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFO0FBQzNJLG9CQUFvQixJQUFJLE1BQU0sR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO0FBQ25ELG9CQUFvQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLG9CQUFvQixJQUFJLFVBQVUsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQ3JELHdCQUF3QixNQUFNLEdBQUcsTUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssS0FBSyxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNwRix3QkFBd0IsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1QyxxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixZQUFZLE9BQU8sS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFDckQsb0JBQW9CO0FBQ3BCLGdCQUFnQixJQUFJO0FBQ3BCLG9CQUFvQixJQUFJLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3hHLGlCQUFpQjtBQUNqQix3QkFBd0IsRUFBRSxJQUFJLEdBQUcsRUFBRSxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNyRCxhQUFhO0FBQ2IsWUFBWSxJQUFJLE1BQU0sRUFBRTtBQUN4QixnQkFBZ0IsSUFBSTtBQUNwQixvQkFBb0IsS0FBSyxJQUFJLFFBQVEsR0FBR0EsVUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUU7QUFDeEksd0JBQXdCLElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7QUFDdEQsd0JBQXdCRCxhQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMvRCx3QkFBd0IsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRCxxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCLGdCQUFnQixPQUFPLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO0FBQ3pELHdCQUF3QjtBQUN4QixvQkFBb0IsSUFBSTtBQUN4Qix3QkFBd0IsSUFBSSxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4RyxxQkFBcUI7QUFDckIsNEJBQTRCLEVBQUUsSUFBSSxHQUFHLEVBQUUsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDekQsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixTQUFTLEVBQUUsWUFBWTtBQUN2QixZQUFZLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN4QixZQUFZLElBQUk7QUFDaEIsZ0JBQWdCLEtBQUssSUFBSSxTQUFTLEdBQUdDLFVBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFO0FBQzNJLG9CQUFvQixJQUFJLE1BQU0sR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO0FBQ25ELG9CQUFvQixVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsWUFBWSxPQUFPLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO0FBQ3JELG9CQUFvQjtBQUNwQixnQkFBZ0IsSUFBSTtBQUNwQixvQkFBb0IsSUFBSSxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN4RyxpQkFBaUI7QUFDakIsd0JBQXdCLEVBQUUsSUFBSSxHQUFHLEVBQUUsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDckQsYUFBYTtBQUNiLFlBQVksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xDLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWTtBQUNsQyxZQUFZLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDM0IsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNaLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNrQm1ILGFBQUEsQ0FBQSxXQUFBLEdBQUcsV0FBVzs7OztBQ2xGakMsSUFBSW5ILFVBQVEsR0FBRyxDQUFDOU8sY0FBSSxJQUFJQSxjQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxFQUFFO0FBQ3RELElBQUksSUFBSSxDQUFDLEdBQUcsT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRixJQUFJLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixJQUFJLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsT0FBTztBQUNsRCxRQUFRLElBQUksRUFBRSxZQUFZO0FBQzFCLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQy9DLFlBQVksT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDcEQsU0FBUztBQUNULEtBQUssQ0FBQztBQUNOLElBQUksTUFBTSxJQUFJLFNBQVMsQ0FBQyxDQUFDLEdBQUcseUJBQXlCLEdBQUcsaUNBQWlDLENBQUMsQ0FBQztBQUMzRixDQUFDLENBQUM7QUFDRixNQUFNLENBQUMsY0FBYyxDQUFDa1csWUFBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzVDQSxZQUFBLENBQUEsVUFBQSxHQUFHLEtBQUssRUFBRTtBQUM1QixJQUFJakgsZ0JBQWMsR0FBRy9PLGNBQTBCLENBQUM7QUFDaEQsSUFBSThQLFFBQU0sR0FBR3BQLElBQXVCLENBQUM7QUFDckMsSUFBSWtQLHNCQUFvQixHQUFHaFAsb0JBQStCLENBQUM7QUFDM0QsSUFBSStOLGFBQVcsR0FBRzlNLFdBQTRCLENBQUM7QUFDL0MsSUFBSTJILFNBQU8sR0FBRzNHLEtBQTZCLENBQUM7QUFDNUMsSUFBSThQLFFBQU0sR0FBRzdQLElBQXVCLENBQUM7QUFDckMsSUFBSWlQLG1CQUFpQixHQUFHeE8saUJBQWtDLENBQUM7QUFDM0QsU0FBUyxVQUFVLENBQUMsY0FBYyxFQUFFO0FBQ3BDLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2YsSUFBSSxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDdkIsSUFBSSxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNsRCxRQUFRLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFDLEtBQUs7QUFDTCxJQUFJLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxHQUFHb1AsUUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBR25KLFNBQU8sQ0FBQyxjQUFjLENBQUM7QUFDbEgsSUFBSSxJQUFJLHNCQUFzQixHQUFHLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDM0YsSUFBSSxJQUFJLGFBQWEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDO0FBQ2pELElBQUksT0FBT3NHLFFBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ3hELFFBQVEsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQy9CLFFBQVEsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxJQUFJLEdBQUcsVUFBVSxNQUFNLEVBQUU7QUFDckMsWUFBWSxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQzNELFlBQVksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQy9CLFlBQVluQixhQUFXLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN6RCxZQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEMsWUFBWSxhQUFhLElBQUksV0FBVyxFQUFFLENBQUM7QUFDM0MsU0FBUyxDQUFDO0FBQ1YsUUFBUSxJQUFJLFdBQVcsR0FBRyxZQUFZO0FBQ3RDLFlBQVksSUFBSSxhQUFhLEVBQUU7QUFDL0IsZ0JBQWdCLElBQUksSUFBSSxHQUFHLElBQUlJLGdCQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDN0QsZ0JBQWdCLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsZ0JBQWdCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNoQyxnQkFBZ0IsSUFBSSxRQUFRLEdBQUc7QUFDL0Isb0JBQW9CLE1BQU0sRUFBRSxNQUFNO0FBQ2xDLG9CQUFvQixJQUFJLEVBQUUsSUFBSTtBQUM5QixpQkFBaUIsQ0FBQztBQUNsQixnQkFBZ0IsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0JnRCxtQkFBaUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQzNILGFBQWE7QUFDYixTQUFTLENBQUM7QUFDVixRQUFRLElBQUksc0JBQXNCLEtBQUssSUFBSSxJQUFJLHNCQUFzQixJQUFJLENBQUMsRUFBRTtBQUM1RSxZQUFZQSxtQkFBaUIsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEgsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFDakMsU0FBUztBQUNULFFBQVEsV0FBVyxFQUFFLENBQUM7QUFDdEIsUUFBUSxJQUFJLG9CQUFvQixHQUFHbkMsc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFVBQVUsS0FBSyxFQUFFO0FBQzlHLFlBQVksSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3hCLFlBQVksSUFBSSxXQUFXLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3BELFlBQVksSUFBSTtBQUNoQixnQkFBZ0IsS0FBSyxJQUFJLGFBQWEsR0FBR2hCLFVBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxlQUFlLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxlQUFlLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxFQUFFO0FBQ3ZLLG9CQUFvQixJQUFJLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDO0FBQ3ZELG9CQUFvQixJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLG9CQUFvQixhQUFhLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbkUsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixZQUFZLE9BQU8sS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFDckQsb0JBQW9CO0FBQ3BCLGdCQUFnQixJQUFJO0FBQ3BCLG9CQUFvQixJQUFJLGVBQWUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3hILGlCQUFpQjtBQUNqQix3QkFBd0IsRUFBRSxJQUFJLEdBQUcsRUFBRSxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNyRCxhQUFhO0FBQ2IsU0FBUyxFQUFFLFlBQVk7QUFDdkIsWUFBWSxPQUFPLGFBQWEsS0FBSyxJQUFJLElBQUksYUFBYSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUU7QUFDdkcsZ0JBQWdCLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlELGFBQWE7QUFDYixZQUFZLG9CQUFvQixLQUFLLElBQUksSUFBSSxvQkFBb0IsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUMzSCxZQUFZLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsQyxZQUFZLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNyQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLGFBQWEsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdEUsUUFBUSxNQUFNLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDL0MsS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ2lCb0gsWUFBQSxDQUFBLFVBQUEsR0FBRyxVQUFVOzs7O0FDeEYvQixJQUFJcEgsVUFBUSxHQUFHLENBQUM5TyxjQUFJLElBQUlBLGNBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLEVBQUU7QUFDdEQsSUFBSSxJQUFJLENBQUMsR0FBRyxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xGLElBQUksSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLElBQUksSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxPQUFPO0FBQ2xELFFBQVEsSUFBSSxFQUFFLFlBQVk7QUFDMUIsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDL0MsWUFBWSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNwRCxTQUFTO0FBQ1QsS0FBSyxDQUFDO0FBQ04sSUFBSSxNQUFNLElBQUksU0FBUyxDQUFDLENBQUMsR0FBRyx5QkFBeUIsR0FBRyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQzNGLENBQUMsQ0FBQztBQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUNtVyxjQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDMUNBLGNBQUEsQ0FBQSxZQUFBLEdBQUcsS0FBSyxFQUFFO0FBQzlCLElBQUlsSCxnQkFBYyxHQUFHL08sY0FBMEIsQ0FBQztBQUNoRCxJQUFJOFAsUUFBTSxHQUFHcFAsSUFBdUIsQ0FBQztBQUNyQyxJQUFJa1IsYUFBVyxHQUFHaFIsV0FBa0MsQ0FBQztBQUNyRCxJQUFJZ1Asc0JBQW9CLEdBQUcvTixvQkFBK0IsQ0FBQztBQUMzRCxJQUFJcU4sUUFBTSxHQUFHck0sTUFBdUIsQ0FBQztBQUNyQyxJQUFJOEwsYUFBVyxHQUFHN0wsV0FBNEIsQ0FBQztBQUMvQyxTQUFTLFlBQVksQ0FBQyxRQUFRLEVBQUUsZUFBZSxFQUFFO0FBQ2pELElBQUksT0FBT2dOLFFBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ3hELFFBQVEsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLFFBQVE4QixhQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQ2hDLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxVQUFVLFNBQVMsRUFBRTtBQUNqSSxZQUFZLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUM1QixZQUFZLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakMsWUFBWSxJQUFJLG1CQUFtQixHQUFHLElBQUliLGdCQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDeEUsWUFBWSxJQUFJLFVBQVUsR0FBRyxZQUFZO0FBQ3pDLGdCQUFnQkosYUFBVyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkQsZ0JBQWdCLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEMsZ0JBQWdCLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2xELGFBQWEsQ0FBQztBQUNkLFlBQVksbUJBQW1CLENBQUMsR0FBRyxDQUFDaUQsYUFBVyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUNoQyxzQkFBb0IsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFVixRQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JMLFNBQVMsRUFBRUEsUUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekIsUUFBUSxNQUFNLENBQUMsU0FBUyxDQUFDVSxzQkFBb0IsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsVUFBVSxLQUFLLEVBQUU7QUFDcEcsWUFBWSxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDeEIsWUFBWSxJQUFJO0FBQ2hCLGdCQUFnQixLQUFLLElBQUksU0FBUyxHQUFHaEIsVUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFdBQVcsR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFdBQVcsR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUU7QUFDM0ksb0JBQW9CLElBQUksTUFBTSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7QUFDbkQsb0JBQW9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkMsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixZQUFZLE9BQU8sS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFDckQsb0JBQW9CO0FBQ3BCLGdCQUFnQixJQUFJO0FBQ3BCLG9CQUFvQixJQUFJLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3hHLGlCQUFpQjtBQUNqQix3QkFBd0IsRUFBRSxJQUFJLEdBQUcsRUFBRSxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNyRCxhQUFhO0FBQ2IsU0FBUyxFQUFFLFlBQVk7QUFDdkIsWUFBWSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZDLGdCQUFnQixVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2pELGFBQWE7QUFDYixZQUFZLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ1osS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ21CcUgsY0FBQSxDQUFBLFlBQUEsR0FBRyxZQUFZOzs7O0FDeERuQyxNQUFNLENBQUMsY0FBYyxDQUFDQyxZQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDNUNBLFlBQUEsQ0FBQSxVQUFBLEdBQUcsS0FBSyxFQUFFO0FBQzVCLElBQUlwRyxRQUFNLEdBQUc5UCxJQUF1QixDQUFDO0FBQ3JDLElBQUlrUCxRQUFNLEdBQUd4TyxNQUF1QixDQUFDO0FBQ3JDLElBQUlrUCxzQkFBb0IsR0FBR2hQLG9CQUErQixDQUFDO0FBQzNELElBQUlnUixhQUFXLEdBQUcvUCxXQUFrQyxDQUFDO0FBQ3JELFNBQVMsVUFBVSxDQUFDLGVBQWUsRUFBRTtBQUNyQyxJQUFJLE9BQU9pTyxRQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUN4RCxRQUFRLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQixRQUFRLElBQUksaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLFFBQVEsSUFBSSxVQUFVLEdBQUcsWUFBWTtBQUNyQyxZQUFZLGlCQUFpQixLQUFLLElBQUksSUFBSSxpQkFBaUIsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNsSCxZQUFZLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQixZQUFZLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDeEIsWUFBWSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyxZQUFZOEIsYUFBVyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsR0FBR2hDLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUVWLFFBQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3pLLFNBQVMsQ0FBQztBQUNWLFFBQVEsVUFBVSxFQUFFLENBQUM7QUFDckIsUUFBUSxNQUFNLENBQUMsU0FBUyxDQUFDVSxzQkFBb0IsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsVUFBVSxLQUFLLEVBQUUsRUFBRSxPQUFPLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVk7QUFDaE0sWUFBWSxNQUFNLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QyxZQUFZLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLE1BQU0sR0FBRyxpQkFBaUIsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRixLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDaUJzRyxZQUFBLENBQUEsVUFBQSxHQUFHLFVBQVU7Ozs7QUN4Qi9CLE1BQU0sQ0FBQyxjQUFjLENBQUNDLFlBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM1Q0EsWUFBQSxDQUFBLFVBQUEsR0FBRyxLQUFLLEVBQUU7QUFDNUIsSUFBSXZFLGFBQVcsR0FBRzVSLFdBQWtDLENBQUM7QUFDckQsSUFBSTRQLHNCQUFvQixHQUFHbFAsb0JBQStCLENBQUM7QUFDM0QsSUFBSW9QLFFBQU0sR0FBR2xQLElBQXVCLENBQUM7QUFDckMsU0FBUyxVQUFVLENBQUMsUUFBUSxFQUFFO0FBQzlCLElBQUksT0FBT2tQLFFBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ3hELFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzVCLFFBQVEsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQzlCLFFBQVEsSUFBSSxhQUFhLENBQUM7QUFDMUIsUUFBUSxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQ0Ysc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxHQUFHLEVBQUU7QUFDbkksWUFBWSxhQUFhLEdBQUdnQyxhQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRixZQUFZLElBQUksUUFBUSxFQUFFO0FBQzFCLGdCQUFnQixRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDdkMsZ0JBQWdCLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDaEMsZ0JBQWdCLGFBQWEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDcEQsYUFBYTtBQUNiLGlCQUFpQjtBQUNqQixnQkFBZ0IsU0FBUyxHQUFHLElBQUksQ0FBQztBQUNqQyxhQUFhO0FBQ2IsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNaLFFBQVEsSUFBSSxTQUFTLEVBQUU7QUFDdkIsWUFBWSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbkMsWUFBWSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzVCLFlBQVksYUFBYSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNoRCxTQUFTO0FBQ1QsS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ2lCdUUsWUFBQSxDQUFBLFVBQUEsR0FBRyxVQUFVOzs7Ozs7Ozs7Ozs7OztBQzVCL0IsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsZUFBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDQSxlQUFBLENBQUEsYUFBQSxHQUFHLEtBQUssRUFBRTtBQUMvQixJQUFJeEcsc0JBQW9CLEdBQUc1UCxvQkFBK0IsQ0FBQztBQUMzRCxTQUFTLGFBQWEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUU7QUFDbkYsSUFBSSxPQUFPLFVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUN6QyxRQUFRLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQztBQUMvQixRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztBQUN6QixRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN0QixRQUFRLE1BQU0sQ0FBQyxTQUFTLENBQUM0UCxzQkFBb0IsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsVUFBVSxLQUFLLEVBQUU7QUFDcEcsWUFBWSxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUM1QixZQUFZLEtBQUssR0FBRyxRQUFRO0FBQzVCO0FBQ0Esb0JBQW9CLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNoRDtBQUNBLHFCQUFxQixDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDL0MsWUFBWSxVQUFVLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqRCxTQUFTLEVBQUUsa0JBQWtCO0FBQzdCLGFBQWEsWUFBWTtBQUN6QixnQkFBZ0IsUUFBUSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkQsZ0JBQWdCLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN0QyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsS0FBSyxDQUFDO0FBQ04sQ0FBQztBQUNvQndHLGVBQUEsQ0FBQSxhQUFBLEdBQUcsYUFBYTs7QUN2QnJDLE1BQU0sQ0FBQyxjQUFjLENBQUNDLFFBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNoREEsUUFBQSxDQUFBLE1BQUEsR0FBRyxLQUFLLEVBQUU7QUFDeEIsSUFBSUQsaUJBQWUsR0FBR3BXLGVBQTBCLENBQUM7QUFDakQsSUFBSThQLFFBQU0sR0FBR3BQLElBQXVCLENBQUM7QUFDckMsU0FBUyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRTtBQUNuQyxJQUFJLE9BQU9vUCxRQUFNLENBQUMsT0FBTyxDQUFDc0csaUJBQWUsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoSCxDQUFDO0FBQ2FDLFFBQUEsQ0FBQSxNQUFBLEdBQUcsTUFBTTs7QUNQdkIsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsU0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQy9DQSxTQUFBLENBQUEsT0FBQSxHQUFHLEtBQUssRUFBRTtBQUN6QixJQUFJRCxVQUFRLEdBQUdyVyxRQUFtQixDQUFDO0FBQ25DLElBQUk4UCxRQUFNLEdBQUdwUCxJQUF1QixDQUFDO0FBQ3JDLElBQUksVUFBVSxHQUFHLFVBQVUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQzFFLFNBQVM2VixTQUFPLEdBQUc7QUFDbkIsSUFBSSxPQUFPekcsUUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDeEQsUUFBUXVHLFVBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN0RSxLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDY0MsU0FBQSxDQUFBLE9BQUEsR0FBR0MsU0FBTzs7QUNWekIsTUFBTSxDQUFDLGNBQWMsQ0FBQ0Msa0JBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN0Q0Esa0JBQUEsQ0FBQSxnQkFBQSxHQUFHLEtBQUssRUFBRTtBQUNsQyxJQUFJbkgsWUFBVSxHQUFHclAsVUFBMkIsQ0FBQztBQUM3QyxJQUFJb1Qsb0JBQWtCLEdBQUcxUyxrQkFBbUMsQ0FBQztBQUM3RCxJQUFJNE8sUUFBTSxHQUFHMU8sTUFBdUIsQ0FBQztBQUNyQyxJQUFJaVQsWUFBVSxHQUFHaFMsVUFBcUIsQ0FBQztBQUN2QyxJQUFJeVUsV0FBUyxHQUFHelQsU0FBb0IsQ0FBQztBQUNyQyxTQUFTLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUU7QUFDM0MsSUFBSSxPQUFPeU0sUUFBTSxDQUFDLElBQUksQ0FBQ2dILFdBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRXpDLFlBQVUsQ0FBQyxRQUFRLENBQUMsVUFBVSxPQUFPLEVBQUUsRUFBRSxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEdBQUdULG9CQUFrQixDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxHQUFHL0QsWUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9MLENBQUM7QUFDdUJtSCxrQkFBQSxDQUFBLGdCQUFBLEdBQUcsZ0JBQWdCOztBQ1YzQyxNQUFNLENBQUMsY0FBYyxDQUFDQyxrQkFBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDQSxrQkFBQSxDQUFBLGdCQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ2xDLElBQUkvQyxpQkFBZSxHQUFHMVQsZUFBc0MsQ0FBQztBQUM3RCxJQUFJd1csb0JBQWtCLEdBQUc5VixrQkFBNkIsQ0FBQztBQUN2RCxTQUFTLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtBQUNuQyxJQUFJLE9BQU84VixvQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQzlDLGlCQUFlLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZGLENBQUM7QUFDdUIrQyxrQkFBQSxDQUFBLGdCQUFBLEdBQUcsZ0JBQWdCOztBQ1AzQyxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM1QyxVQUFBLENBQUEsVUFBQSxHQUFHLEtBQUssRUFBRTtBQUM1QixJQUFJLGtCQUFrQixHQUFHelcsa0JBQTZCLENBQUM7QUFDdkQsVUFBQSxDQUFBLFVBQWtCLEdBQUcsa0JBQWtCLENBQUMsZ0JBQWdCOzs7Ozs7QUNIeEQsSUFBSTZPLFFBQU0sR0FBRyxDQUFDL08sY0FBSSxJQUFJQSxjQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0RCxJQUFJLElBQUksQ0FBQyxHQUFHLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9ELElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLElBQUksSUFBSTtBQUNSLFFBQVEsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25GLEtBQUs7QUFDTCxJQUFJLE9BQU8sS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFDM0MsWUFBWTtBQUNaLFFBQVEsSUFBSTtBQUNaLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELFNBQVM7QUFDVCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN6QyxLQUFLO0FBQ0wsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUMsQ0FBQztBQUNGLElBQUlnUCxlQUFhLEdBQUcsQ0FBQ2hQLGNBQUksSUFBSUEsY0FBSSxDQUFDLGFBQWEsS0FBSyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUU7QUFDeEUsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNyRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUMsQ0FBQztBQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUM0VyxlQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDekNBLGVBQUEsQ0FBQSxhQUFBLEdBQUcsS0FBSyxFQUFFO0FBQy9CLElBQUloRCxpQkFBZSxHQUFHMVQsZUFBc0MsQ0FBQztBQUM3RCxJQUFJOFAsUUFBTSxHQUFHcFAsSUFBdUIsQ0FBQztBQUNyQyxJQUFJcVUsa0JBQWdCLEdBQUduVSxnQkFBaUMsQ0FBQztBQUN6RCxJQUFJLGtCQUFrQixHQUFHaUIsa0JBQW1DLENBQUM7QUFDN0QsSUFBSSxNQUFNLEdBQUdnQixNQUF1QixDQUFDO0FBQ3JDLElBQUk4UCxRQUFNLEdBQUc3UCxJQUF1QixDQUFDO0FBQ3JDLFNBQVMsYUFBYSxHQUFHO0FBQ3pCLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLElBQUksS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDbEQsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLEtBQUs7QUFDTCxJQUFJLElBQUksY0FBYyxHQUFHNlAsUUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hELElBQUksT0FBTyxjQUFjO0FBQ3pCLFVBQVUsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFN0QsZUFBYSxDQUFDLEVBQUUsRUFBRUQsUUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUN4SSxVQUFVaUIsUUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDdkQsWUFBWTRELGlCQUFlLENBQUMsaUJBQWlCLENBQUM1RSxlQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRUQsUUFBTSxDQUFDa0csa0JBQWdCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2xJLFNBQVMsQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUNvQjJCLGVBQUEsQ0FBQSxhQUFBLEdBQUcsYUFBYTs7QUN6Q3JDLElBQUk3SCxRQUFNLEdBQUcsQ0FBQy9PLGNBQUksSUFBSUEsY0FBSSxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDdEQsSUFBSSxJQUFJLENBQUMsR0FBRyxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMvRCxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNyQyxJQUFJLElBQUk7QUFDUixRQUFRLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuRixLQUFLO0FBQ0wsSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO0FBQzNDLFlBQVk7QUFDWixRQUFRLElBQUk7QUFDWixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RCxTQUFTO0FBQ1QsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDekMsS0FBSztBQUNMLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxDQUFDLENBQUM7QUFDRixJQUFJZ1AsZUFBYSxHQUFHLENBQUNoUCxjQUFJLElBQUlBLGNBQUksQ0FBQyxhQUFhLEtBQUssVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFO0FBQ3hFLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDckUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxDQUFDLENBQUM7QUFDRixNQUFNLENBQUMsY0FBYyxDQUFDNlcsbUJBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNyQ0EsbUJBQUEsQ0FBQSxpQkFBQSxHQUFHLEtBQUssRUFBRTtBQUNuQyxJQUFJLGVBQWUsR0FBRzNXLGVBQTBCLENBQUM7QUFDakQsU0FBUyxpQkFBaUIsR0FBRztBQUM3QixJQUFJLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUMxQixJQUFJLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ2xELFFBQVEsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QyxLQUFLO0FBQ0wsSUFBSSxPQUFPLGVBQWUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFOE8sZUFBYSxDQUFDLEVBQUUsRUFBRUQsUUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRyxDQUFDO0FBQ3dCOEgsbUJBQUEsQ0FBQSxpQkFBQSxHQUFHLGlCQUFpQjs7OztBQy9CN0MsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsV0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzdDQSxXQUFBLENBQUEsU0FBQSxHQUFHLEtBQUssRUFBRTtBQUMzQixJQUFJL0MsWUFBVSxHQUFHN1QsVUFBcUIsQ0FBQztBQUN2QyxJQUFJeU8sY0FBWSxHQUFHL04sWUFBNkIsQ0FBQztBQUNqRCxTQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFO0FBQzVDLElBQUksT0FBTytOLGNBQVksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEdBQUdvRixZQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDLEdBQUdBLFlBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZJLENBQUM7QUFDZ0IrQyxXQUFBLENBQUEsU0FBQSxHQUFHLFNBQVM7Ozs7QUNQN0IsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsYUFBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzNDQSxhQUFBLENBQUEsV0FBQSxHQUFHLEtBQUssRUFBRTtBQUM3QixJQUFJLFdBQVcsR0FBRzdXLFdBQXNCLENBQUM7QUFDekMsSUFBSXlPLGNBQVksR0FBRy9OLFlBQTZCLENBQUM7QUFDakQsU0FBUyxXQUFXLENBQUMsZUFBZSxFQUFFLGNBQWMsRUFBRTtBQUN0RCxJQUFJLE9BQU8rTixjQUFZLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLE9BQU8sZUFBZSxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxPQUFPLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyTSxDQUFDO0FBQ2tCb0ksYUFBQSxDQUFBLFdBQUEsR0FBRyxXQUFXOzs7Ozs7QUNQakMsSUFBSWhJLFFBQU0sR0FBRyxDQUFDL08sY0FBSSxJQUFJQSxjQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0RCxJQUFJLElBQUksQ0FBQyxHQUFHLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9ELElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLElBQUksSUFBSTtBQUNSLFFBQVEsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25GLEtBQUs7QUFDTCxJQUFJLE9BQU8sS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFDM0MsWUFBWTtBQUNaLFFBQVEsSUFBSTtBQUNaLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELFNBQVM7QUFDVCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN6QyxLQUFLO0FBQ0wsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUMsQ0FBQztBQUNGLElBQUlnUCxlQUFhLEdBQUcsQ0FBQ2hQLGNBQUksSUFBSUEsY0FBSSxDQUFDLGFBQWEsS0FBSyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUU7QUFDeEUsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNyRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUMsQ0FBQztBQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUNrVSxRQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDaERBLFFBQUEsQ0FBQSxNQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ3hCLElBQUlsRSxRQUFNLEdBQUc5UCxJQUF1QixDQUFDO0FBQ3JDLElBQUksV0FBVyxHQUFHVSxXQUFzQixDQUFDO0FBQ3pDLElBQUlpUyxRQUFNLEdBQUcvUixJQUF1QixDQUFDO0FBQ3JDLElBQUk2UixRQUFNLEdBQUc1USxNQUE2QixDQUFDO0FBQzNDLFNBQVMsTUFBTSxHQUFHO0FBQ2xCLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLElBQUksS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDbEQsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLEtBQUs7QUFDTCxJQUFJLElBQUksU0FBUyxHQUFHOFEsUUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QyxJQUFJLE9BQU83QyxRQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUN4RCxRQUFRLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQzJDLFFBQU0sQ0FBQyxJQUFJLENBQUMzRCxlQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRUQsUUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDckgsS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ2FtRixRQUFBLENBQUEsTUFBQSxHQUFHLE1BQU07O0FDckN2QixJQUFJbkYsUUFBTSxHQUFHLENBQUMvTyxjQUFJLElBQUlBLGNBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RELElBQUksSUFBSSxDQUFDLEdBQUcsT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDL0QsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDckMsSUFBSSxJQUFJO0FBQ1IsUUFBUSxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkYsS0FBSztBQUNMLElBQUksT0FBTyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtBQUMzQyxZQUFZO0FBQ1osUUFBUSxJQUFJO0FBQ1osWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0QsU0FBUztBQUNULGdCQUFnQixFQUFFLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3pDLEtBQUs7QUFDTCxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBQ0YsSUFBSWdQLGVBQWEsR0FBRyxDQUFDaFAsY0FBSSxJQUFJQSxjQUFJLENBQUMsYUFBYSxLQUFLLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRTtBQUN4RSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3JFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBQ0YsTUFBTSxDQUFDLGNBQWMsQ0FBQ2dYLFlBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM1Q0EsWUFBQSxDQUFBLFVBQUEsR0FBRyxLQUFLLEVBQUU7QUFDNUIsSUFBSTlDLFVBQVEsR0FBR2hVLFFBQW1CLENBQUM7QUFDbkMsU0FBUyxVQUFVLEdBQUc7QUFDdEIsSUFBSSxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDMUIsSUFBSSxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNsRCxRQUFRLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekMsS0FBSztBQUNMLElBQUksT0FBT2dVLFVBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFbEYsZUFBYSxDQUFDLEVBQUUsRUFBRUQsUUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRixDQUFDO0FBQ2lCaUksWUFBQSxDQUFBLFVBQUEsR0FBRyxVQUFVOzs7Ozs7QUMvQi9CLE1BQU0sQ0FBQyxjQUFjLENBQUNDLGtCQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDdENBLGtCQUFBLENBQUEsZ0JBQUEsR0FBRyxLQUFLLEVBQUU7QUFDbEMsSUFBSXZILGNBQVksR0FBR3hQLFlBQXdCLENBQUM7QUFDNUMsU0FBUyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUU7QUFDeEMsSUFBSSxPQUFPLElBQUl3UCxjQUFZLENBQUMsVUFBVSxDQUFDLFVBQVUsVUFBVSxFQUFFLEVBQUUsT0FBTyxZQUFZLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdHLENBQUM7QUFDdUJ1SCxrQkFBQSxDQUFBLGdCQUFBLEdBQUcsZ0JBQWdCOztBQ04zQyxNQUFNLENBQUMsY0FBYyxDQUFDQyxTQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDL0NBLFNBQUEsQ0FBQSxPQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ3pCLElBQUk5RyxXQUFTLEdBQUdsUSxTQUFxQixDQUFDO0FBQ3RDLElBQUk0UixhQUFXLEdBQUdsUixXQUFrQyxDQUFDO0FBQ3JELElBQUlvUCxRQUFNLEdBQUdsUCxJQUF1QixDQUFDO0FBQ3JDLElBQUksa0JBQWtCLEdBQUdpQixrQkFBeUMsQ0FBQztBQUNuRSxJQUFJLGNBQWMsR0FBRztBQUNyQixJQUFJLFNBQVMsRUFBRSxZQUFZLEVBQUUsT0FBTyxJQUFJcU8sV0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUU7QUFDOUQsQ0FBQyxDQUFDO0FBQ0YsU0FBUyxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRTtBQUNuQyxJQUFJLElBQUksTUFBTSxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTSxHQUFHLGNBQWMsQ0FBQyxFQUFFO0FBQ3ZELElBQUksSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztBQUNyQyxJQUFJLE9BQU9KLFFBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ3hELFFBQVEsSUFBSSxPQUFPLEdBQUcsU0FBUyxFQUFFLENBQUM7QUFDbEMsUUFBUThCLGFBQVcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDNUcsUUFBUSxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNsRCxLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDY29GLFNBQUEsQ0FBQSxPQUFBLEdBQUcsT0FBTzs7OztBQ2xCekIsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2pEQSxPQUFBLENBQUEsS0FBQSxHQUFHLEtBQUssRUFBRTtBQUN2QixJQUFJWixVQUFRLEdBQUdyVyxRQUFtQixDQUFDO0FBQ25DLFNBQVMsS0FBSyxDQUFDLFNBQVMsRUFBRTtBQUMxQixJQUFJLE9BQU9xVyxVQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlILENBQUM7QUFDWVksT0FBQSxDQUFBLEtBQUEsR0FBRyxLQUFLOzs7O0FDTnJCLE1BQU0sQ0FBQyxjQUFjLENBQUNDLFVBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM5Q0EsVUFBQSxDQUFBLFFBQUEsR0FBRyxLQUFLLEVBQUU7QUFDMUIsSUFBSXBILFFBQU0sR0FBRzlQLElBQXVCLENBQUM7QUFDckMsSUFBSWtQLFFBQU0sR0FBR3hPLE1BQXVCLENBQUM7QUFDckMsSUFBSWtQLHNCQUFvQixHQUFHaFAsb0JBQStCLENBQUM7QUFDM0QsSUFBSWdSLGFBQVcsR0FBRy9QLFdBQWtDLENBQUM7QUFDckQsU0FBUyxRQUFRLENBQUMsZ0JBQWdCLEVBQUU7QUFDcEMsSUFBSSxPQUFPaU8sUUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDeEQsUUFBUSxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDN0IsUUFBUSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDN0IsUUFBUSxJQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQztBQUN0QyxRQUFRLElBQUksSUFBSSxHQUFHLFlBQVk7QUFDL0IsWUFBWSxrQkFBa0IsS0FBSyxJQUFJLElBQUksa0JBQWtCLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDckgsWUFBWSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFDdEMsWUFBWSxJQUFJLFFBQVEsRUFBRTtBQUMxQixnQkFBZ0IsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUNqQyxnQkFBZ0IsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDO0FBQ3RDLGdCQUFnQixTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLGdCQUFnQixVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLGFBQWE7QUFDYixTQUFTLENBQUM7QUFDVixRQUFRLE1BQU0sQ0FBQyxTQUFTLENBQUNGLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxVQUFVLEtBQUssRUFBRTtBQUNwRyxZQUFZLGtCQUFrQixLQUFLLElBQUksSUFBSSxrQkFBa0IsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNySCxZQUFZLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDNUIsWUFBWSxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQzlCLFlBQVksa0JBQWtCLEdBQUdBLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUVWLFFBQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5RyxZQUFZMEMsYUFBVyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3pGLFNBQVMsRUFBRSxZQUFZO0FBQ3ZCLFlBQVksSUFBSSxFQUFFLENBQUM7QUFDbkIsWUFBWSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEMsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZO0FBQ2xDLFlBQVksU0FBUyxHQUFHLGtCQUFrQixHQUFHLElBQUksQ0FBQztBQUNsRCxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ1osS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ2VzRixVQUFBLENBQUEsUUFBQSxHQUFHLFFBQVE7Ozs7QUNuQzNCLE1BQU0sQ0FBQyxjQUFjLENBQUNDLGNBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMxQ0EsY0FBQSxDQUFBLFlBQUEsR0FBRyxLQUFLLEVBQUU7QUFDOUIsSUFBSTNOLFNBQU8sR0FBR3hKLEtBQTZCLENBQUM7QUFDNUMsSUFBSThQLFFBQU0sR0FBR3BQLElBQXVCLENBQUM7QUFDckMsSUFBSWtQLHNCQUFvQixHQUFHaFAsb0JBQStCLENBQUM7QUFDM0QsU0FBUyxZQUFZLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRTtBQUMxQyxJQUFJLElBQUksU0FBUyxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsU0FBUyxHQUFHNEksU0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFO0FBQ3JFLElBQUksT0FBT3NHLFFBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ3hELFFBQVEsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFFBQVEsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzVCLFFBQVEsSUFBSSxJQUFJLEdBQUcsWUFBWTtBQUMvQixZQUFZLElBQUksVUFBVSxFQUFFO0FBQzVCLGdCQUFnQixVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDekMsZ0JBQWdCLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDbEMsZ0JBQWdCLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQztBQUN0QyxnQkFBZ0IsU0FBUyxHQUFHLElBQUksQ0FBQztBQUNqQyxnQkFBZ0IsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2QyxhQUFhO0FBQ2IsU0FBUyxDQUFDO0FBQ1YsUUFBUSxTQUFTLFlBQVksR0FBRztBQUNoQyxZQUFZLElBQUksVUFBVSxHQUFHLFFBQVEsR0FBRyxPQUFPLENBQUM7QUFDaEQsWUFBWSxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDdEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxVQUFVLEVBQUU7QUFDbEMsZ0JBQWdCLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDeEUsZ0JBQWdCLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDM0MsZ0JBQWdCLE9BQU87QUFDdkIsYUFBYTtBQUNiLFlBQVksSUFBSSxFQUFFLENBQUM7QUFDbkIsU0FBUztBQUNULFFBQVEsTUFBTSxDQUFDLFNBQVMsQ0FBQ0Ysc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFVBQVUsS0FBSyxFQUFFO0FBQ3BHLFlBQVksU0FBUyxHQUFHLEtBQUssQ0FBQztBQUM5QixZQUFZLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDdkMsWUFBWSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQzdCLGdCQUFnQixVQUFVLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdkUsZ0JBQWdCLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDM0MsYUFBYTtBQUNiLFNBQVMsRUFBRSxZQUFZO0FBQ3ZCLFlBQVksSUFBSSxFQUFFLENBQUM7QUFDbkIsWUFBWSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEMsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZO0FBQ2xDLFlBQVksU0FBUyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDMUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNaLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNtQnVILGNBQUEsQ0FBQSxZQUFBLEdBQUcsWUFBWTs7OztBQzdDbkMsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsZ0JBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN4Q0EsZ0JBQUEsQ0FBQSxjQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ2hDLElBQUl0SCxRQUFNLEdBQUc5UCxJQUF1QixDQUFDO0FBQ3JDLElBQUk0UCxzQkFBb0IsR0FBR2xQLG9CQUErQixDQUFDO0FBQzNELFNBQVMsY0FBYyxDQUFDLFlBQVksRUFBRTtBQUN0QyxJQUFJLE9BQU9vUCxRQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUN4RCxRQUFRLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztBQUM3QixRQUFRLE1BQU0sQ0FBQyxTQUFTLENBQUNGLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxVQUFVLEtBQUssRUFBRTtBQUNwRyxZQUFZLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDNUIsWUFBWSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLFNBQVMsRUFBRSxZQUFZO0FBQ3ZCLFlBQVksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUMzQixnQkFBZ0IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM5QyxhQUFhO0FBQ2IsWUFBWSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNaLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNxQndILGdCQUFBLENBQUEsY0FBQSxHQUFHLGNBQWM7Ozs7Ozs7O0FDbEJ2QyxNQUFNLENBQUMsY0FBYyxDQUFDQyxNQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDbERBLE1BQUEsQ0FBQSxJQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ3RCLElBQUl4QyxTQUFPLEdBQUc3VSxLQUE4QixDQUFDO0FBQzdDLElBQUk4UCxRQUFNLEdBQUdwUCxJQUF1QixDQUFDO0FBQ3JDLElBQUlrUCxzQkFBb0IsR0FBR2hQLG9CQUErQixDQUFDO0FBQzNELFNBQVMsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNyQixJQUFJLE9BQU8sS0FBSyxJQUFJLENBQUM7QUFDckI7QUFDQSxZQUFZLFlBQVksRUFBRSxPQUFPaVUsU0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2pELFVBQVUvRSxRQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUN2RCxZQUFZLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN6QixZQUFZLE1BQU0sQ0FBQyxTQUFTLENBQUNGLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxVQUFVLEtBQUssRUFBRTtBQUN4RyxnQkFBZ0IsSUFBSSxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUU7QUFDckMsb0JBQW9CLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0Msb0JBQW9CLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtBQUN2Qyx3QkFBd0IsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzlDLHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakIsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUNoQixTQUFTLENBQUMsQ0FBQztBQUNYLENBQUM7QUFDV3lILE1BQUEsQ0FBQSxJQUFBLEdBQUcsSUFBSTs7OztBQ3JCbkIsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsZ0JBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN4Q0EsZ0JBQUEsQ0FBQSxjQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ2hDLElBQUl4SCxRQUFNLEdBQUc5UCxJQUF1QixDQUFDO0FBQ3JDLElBQUk0UCxzQkFBb0IsR0FBR2xQLG9CQUErQixDQUFDO0FBQzNELElBQUl3TyxRQUFNLEdBQUd0TyxNQUF1QixDQUFDO0FBQ3JDLFNBQVMsY0FBYyxHQUFHO0FBQzFCLElBQUksT0FBT2tQLFFBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ3hELFFBQVEsTUFBTSxDQUFDLFNBQVMsQ0FBQ0Ysc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFVixRQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqRyxLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDcUJvSSxnQkFBQSxDQUFBLGNBQUEsR0FBRyxjQUFjOzs7O0FDVnZDLE1BQU0sQ0FBQyxjQUFjLENBQUNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNqREEsT0FBQSxDQUFBLEtBQUEsR0FBRyxLQUFLLEVBQUU7QUFDdkIsSUFBSXJFLE9BQUssR0FBR2xULEtBQWdCLENBQUM7QUFDN0IsU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFO0FBQ3RCLElBQUksT0FBT2tULE9BQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFDWXFFLE9BQUEsQ0FBQSxLQUFBLEdBQUcsS0FBSzs7QUNOckIsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsV0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzdDQSxXQUFBLENBQUEsU0FBQSxHQUFHLEtBQUssRUFBRTtBQUMzQixJQUFJeEQsVUFBUSxHQUFHaFUsUUFBK0IsQ0FBQztBQUMvQyxJQUFJcVgsUUFBTSxHQUFHM1csTUFBaUIsQ0FBQztBQUMvQixJQUFJLGdCQUFnQixHQUFHRSxnQkFBMkIsQ0FBQztBQUNuRCxJQUFJLE9BQU8sR0FBR2lCLE9BQWtCLENBQUM7QUFDakMsSUFBSWdTLFlBQVUsR0FBR2hSLFVBQXFCLENBQUM7QUFDdkMsSUFBSStPLGFBQVcsR0FBRzlPLFdBQWtDLENBQUM7QUFDckQsU0FBUyxTQUFTLENBQUMscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUU7QUFDN0QsSUFBSSxJQUFJLGlCQUFpQixFQUFFO0FBQzNCLFFBQVEsT0FBTyxVQUFVLE1BQU0sRUFBRTtBQUNqQyxZQUFZLE9BQU9rUixVQUFRLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQ3FELFFBQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3SixTQUFTLENBQUM7QUFDVixLQUFLO0FBQ0wsSUFBSSxPQUFPeEQsWUFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUFPakMsYUFBVyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUN5RixRQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxSyxDQUFDO0FBQ2dCRyxXQUFBLENBQUEsU0FBQSxHQUFHLFNBQVM7O0FDaEI3QixNQUFNLENBQUMsY0FBYyxDQUFDQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDakRBLE9BQUEsQ0FBQSxLQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ3ZCLElBQUlqTyxTQUFPLEdBQUd4SixLQUE2QixDQUFDO0FBQzVDLElBQUksV0FBVyxHQUFHVSxXQUFzQixDQUFDO0FBQ3pDLElBQUkrVCxTQUFPLEdBQUc3VCxPQUE4QixDQUFDO0FBQzdDLFNBQVMsS0FBSyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUU7QUFDL0IsSUFBSSxJQUFJLFNBQVMsS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFLFNBQVMsR0FBRzRJLFNBQU8sQ0FBQyxjQUFjLENBQUMsRUFBRTtBQUNyRSxJQUFJLElBQUksUUFBUSxHQUFHaUwsU0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDakQsSUFBSSxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLE9BQU8sUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFDWWdELE9BQUEsQ0FBQSxLQUFBLEdBQUcsS0FBSzs7OztBQ1ZyQixNQUFNLENBQUMsY0FBYyxDQUFDQyxlQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDekNBLGVBQUEsQ0FBQSxhQUFBLEdBQUcsS0FBSyxFQUFFO0FBQy9CLElBQUlDLGdCQUFjLEdBQUczWCxZQUEwQixDQUFDO0FBQ2hELElBQUk4UCxRQUFNLEdBQUdwUCxJQUF1QixDQUFDO0FBQ3JDLElBQUlrUCxzQkFBb0IsR0FBR2hQLG9CQUErQixDQUFDO0FBQzNELFNBQVMsYUFBYSxHQUFHO0FBQ3pCLElBQUksT0FBT2tQLFFBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ3hELFFBQVEsTUFBTSxDQUFDLFNBQVMsQ0FBQ0Ysc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFVBQVUsWUFBWSxFQUFFLEVBQUUsT0FBTytILGdCQUFjLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEwsS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ29CRCxlQUFBLENBQUEsYUFBQSxHQUFHLGFBQWE7Ozs7QUNWckMsTUFBTSxDQUFDLGNBQWMsQ0FBQ0UsVUFBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzlDQSxVQUFBLENBQUEsUUFBQSxHQUFHLEtBQUssRUFBRTtBQUMxQixJQUFJOUgsUUFBTSxHQUFHOVAsSUFBdUIsQ0FBQztBQUNyQyxJQUFJNFAsc0JBQW9CLEdBQUdsUCxvQkFBK0IsQ0FBQztBQUMzRCxJQUFJd08sUUFBTSxHQUFHdE8sTUFBdUIsQ0FBQztBQUNyQyxJQUFJZ1IsYUFBVyxHQUFHL1AsV0FBa0MsQ0FBQztBQUNyRCxTQUFTLFFBQVEsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQ3hDLElBQUksT0FBT2lPLFFBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ3hELFFBQVEsSUFBSSxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNyQyxRQUFRLE1BQU0sQ0FBQyxTQUFTLENBQUNGLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxVQUFVLEtBQUssRUFBRTtBQUNwRyxZQUFZLElBQUksR0FBRyxHQUFHLFdBQVcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQy9ELFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDeEMsZ0JBQWdCLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsZ0JBQWdCLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkMsYUFBYTtBQUNiLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDWixRQUFRLE9BQU8sSUFBSWdDLGFBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDaEMsc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxPQUFPLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUVWLFFBQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xMLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNlMEksVUFBQSxDQUFBLFFBQUEsR0FBRyxRQUFROzs7O0FDbkIzQixNQUFNLENBQUMsY0FBYyxDQUFDQyxzQkFBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDQSxzQkFBQSxDQUFBLG9CQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ3RDLElBQUl4SSxZQUFVLEdBQUdyUCxVQUEyQixDQUFDO0FBQzdDLElBQUk4UCxRQUFNLEdBQUdwUCxJQUF1QixDQUFDO0FBQ3JDLElBQUlrUCxzQkFBb0IsR0FBR2hQLG9CQUErQixDQUFDO0FBQzNELFNBQVMsb0JBQW9CLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRTtBQUN2RCxJQUFJLElBQUksV0FBVyxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsV0FBVyxHQUFHeU8sWUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQ3RFLElBQUksVUFBVSxHQUFHLFVBQVUsS0FBSyxJQUFJLElBQUksVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLFVBQVUsR0FBRyxjQUFjLENBQUM7QUFDNUYsSUFBSSxPQUFPUyxRQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUN4RCxRQUFRLElBQUksV0FBVyxDQUFDO0FBQ3hCLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLFFBQVEsTUFBTSxDQUFDLFNBQVMsQ0FBQ0Ysc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFVBQVUsS0FBSyxFQUFFO0FBQ3BHLFlBQVksSUFBSSxVQUFVLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hELFlBQVksSUFBSSxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQy9ELGdCQUFnQixLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzlCLGdCQUFnQixXQUFXLEdBQUcsVUFBVSxDQUFDO0FBQ3pDLGdCQUFnQixVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLGFBQWE7QUFDYixTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ1osS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQzJCaUksc0JBQUEsQ0FBQSxvQkFBQSxHQUFHLG9CQUFvQixDQUFDO0FBQ3BELFNBQVMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDOUIsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkI7Ozs7QUN4QkEsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MseUJBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMvQkEseUJBQUEsQ0FBQSx1QkFBQSxHQUFHLEtBQUssRUFBRTtBQUN6QyxJQUFJLHNCQUFzQixHQUFHOVgsc0JBQWlDLENBQUM7QUFDL0QsU0FBUyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFO0FBQy9DLElBQUksT0FBTyxzQkFBc0IsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUksQ0FBQztBQUM4QjhYLHlCQUFBLENBQUEsdUJBQUEsR0FBRyx1QkFBdUI7Ozs7OztBQ056RCxNQUFNLENBQUMsY0FBYyxDQUFDQyxjQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDMUNBLGNBQUEsQ0FBQSxZQUFBLEdBQUcsS0FBSyxFQUFFO0FBQzlCLElBQUkvRSxjQUFZLEdBQUdoVCxVQUE2QixDQUFDO0FBQ2pELElBQUk4UCxRQUFNLEdBQUdwUCxJQUF1QixDQUFDO0FBQ3JDLElBQUlrUCxzQkFBb0IsR0FBR2hQLG9CQUErQixDQUFDO0FBQzNELFNBQVMsWUFBWSxDQUFDLFlBQVksRUFBRTtBQUNwQyxJQUFJLElBQUksWUFBWSxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsWUFBWSxHQUFHLG1CQUFtQixDQUFDLEVBQUU7QUFDeEUsSUFBSSxPQUFPa1AsUUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDeEQsUUFBUSxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDN0IsUUFBUSxNQUFNLENBQUMsU0FBUyxDQUFDRixzQkFBb0IsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsVUFBVSxLQUFLLEVBQUU7QUFDcEcsWUFBWSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzVCLFlBQVksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFFBQVEsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRyxLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDbUJtSSxjQUFBLENBQUEsWUFBQSxHQUFHLFlBQVksQ0FBQztBQUNwQyxTQUFTLG1CQUFtQixHQUFHO0FBQy9CLElBQUksT0FBTyxJQUFJL0UsY0FBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ3pDOztBQ2xCQSxNQUFNLENBQUMsY0FBYyxDQUFDZ0YsV0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzdDQSxXQUFBLENBQUEsU0FBQSxHQUFHLEtBQUssRUFBRTtBQUMzQixJQUFJLHlCQUF5QixHQUFHaFksdUJBQTBDLENBQUM7QUFDM0UsSUFBSW9WLFVBQVEsR0FBRzFVLFFBQW1CLENBQUM7QUFDbkMsSUFBSXFYLGdCQUFjLEdBQUduWCxjQUF5QixDQUFDO0FBQy9DLElBQUl3VyxrQkFBZ0IsR0FBR3ZWLGdCQUEyQixDQUFDO0FBQ25ELElBQUl3VixRQUFNLEdBQUd4VSxNQUFpQixDQUFDO0FBQy9CLFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUU7QUFDeEMsSUFBSSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDbkIsUUFBUSxNQUFNLElBQUkseUJBQXlCLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztBQUN0RSxLQUFLO0FBQ0wsSUFBSSxJQUFJLGVBQWUsR0FBRyxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNoRCxJQUFJLE9BQU8sVUFBVSxNQUFNLEVBQUU7QUFDN0IsUUFBUSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUN1UyxVQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRWlDLFFBQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxHQUFHRCxrQkFBZ0IsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEdBQUdXLGdCQUFjLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxPQUFPLElBQUkseUJBQXlCLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JSLEtBQUssQ0FBQztBQUNOLENBQUM7QUFDZ0JDLFdBQUEsQ0FBQSxTQUFBLEdBQUcsU0FBUzs7OztBQ2hCN0IsSUFBSW5KLFFBQU0sR0FBRyxDQUFDL08sY0FBSSxJQUFJQSxjQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0RCxJQUFJLElBQUksQ0FBQyxHQUFHLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9ELElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLElBQUksSUFBSTtBQUNSLFFBQVEsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25GLEtBQUs7QUFDTCxJQUFJLE9BQU8sS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFDM0MsWUFBWTtBQUNaLFFBQVEsSUFBSTtBQUNaLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELFNBQVM7QUFDVCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN6QyxLQUFLO0FBQ0wsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUMsQ0FBQztBQUNGLElBQUlnUCxlQUFhLEdBQUcsQ0FBQ2hQLGNBQUksSUFBSUEsY0FBSSxDQUFDLGFBQWEsS0FBSyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUU7QUFDeEUsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNyRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUMsQ0FBQztBQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUNtWSxTQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDL0NBLFNBQUEsQ0FBQSxPQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ3pCLElBQUlqRSxVQUFRLEdBQUdoVSxRQUErQixDQUFDO0FBQy9DLElBQUksSUFBSSxHQUFHVSxJQUEyQixDQUFDO0FBQ3ZDLFNBQVMsT0FBTyxHQUFHO0FBQ25CLElBQUksSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLElBQUksS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDbEQsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25DLEtBQUs7QUFDTCxJQUFJLE9BQU8sVUFBVSxNQUFNLEVBQUUsRUFBRSxPQUFPc1QsVUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUVsRixlQUFhLENBQUMsRUFBRSxFQUFFRCxRQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNILENBQUM7QUFDY29KLFNBQUEsQ0FBQSxPQUFBLEdBQUcsT0FBTzs7OztBQ2hDekIsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2pEQSxPQUFBLENBQUEsS0FBQSxHQUFHLEtBQUssRUFBRTtBQUN2QixJQUFJcEksUUFBTSxHQUFHOVAsSUFBdUIsQ0FBQztBQUNyQyxJQUFJNFAsc0JBQW9CLEdBQUdsUCxvQkFBK0IsQ0FBQztBQUMzRCxTQUFTLEtBQUssQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQ25DLElBQUksT0FBT29QLFFBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ3hELFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLFFBQVEsTUFBTSxDQUFDLFNBQVMsQ0FBQ0Ysc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFVBQVUsS0FBSyxFQUFFO0FBQ3BHLFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRTtBQUNsRSxnQkFBZ0IsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2QyxnQkFBZ0IsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3RDLGFBQWE7QUFDYixTQUFTLEVBQUUsWUFBWTtBQUN2QixZQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEMsWUFBWSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNaLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNZc0ksT0FBQSxDQUFBLEtBQUEsR0FBRyxLQUFLOzs7Ozs7OztBQ2xCckIsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsWUFBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzVDQSxZQUFBLENBQUEsVUFBQSxHQUFHLEtBQUssRUFBRTtBQUM1QixJQUFJakYsT0FBSyxHQUFHbFQsS0FBZ0IsQ0FBQztBQUM3QixJQUFJNFIsYUFBVyxHQUFHbFIsV0FBa0MsQ0FBQztBQUNyRCxJQUFJb1AsUUFBTSxHQUFHbFAsSUFBdUIsQ0FBQztBQUNyQyxJQUFJZ1Asc0JBQW9CLEdBQUcvTixvQkFBK0IsQ0FBQztBQUMzRCxTQUFTLFVBQVUsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFO0FBQzdDLElBQUksSUFBSSxjQUFjLEVBQUU7QUFDeEIsUUFBUSxPQUFPLFVBQVUsTUFBTSxFQUFFO0FBQ2pDLFlBQVksT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPK1AsYUFBVyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDc0IsT0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkwsU0FBUyxDQUFDO0FBQ1YsS0FBSztBQUNMLElBQUksT0FBT3BELFFBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ3hELFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzVCLFFBQVEsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQy9CLFFBQVEsTUFBTSxDQUFDLFNBQVMsQ0FBQ0Ysc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFVBQVUsVUFBVSxFQUFFO0FBQ3pHLFlBQVksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUMzQixnQkFBZ0IsUUFBUSxHQUFHQSxzQkFBb0IsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLFlBQVk7QUFDNUcsb0JBQW9CLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDcEMsb0JBQW9CLFVBQVUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDeEQsaUJBQWlCLENBQUMsQ0FBQztBQUNuQixnQkFBZ0JnQyxhQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4RixhQUFhO0FBQ2IsU0FBUyxFQUFFLFlBQVk7QUFDdkIsWUFBWSxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFlBQVksQ0FBQyxRQUFRLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQy9DLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDWixLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDaUJ1RyxZQUFBLENBQUEsVUFBQSxHQUFHLFVBQVU7O0FDOUIvQixNQUFNLENBQUMsY0FBYyxDQUFDQyxZQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDNUNBLFlBQUEsQ0FBQSxVQUFBLEdBQUcsS0FBSyxFQUFFO0FBQzVCLElBQUksWUFBWSxHQUFHcFksWUFBdUIsQ0FBQztBQUMzQyxJQUFJcVAsWUFBVSxHQUFHM08sVUFBMkIsQ0FBQztBQUM3QyxTQUFTLFVBQVUsR0FBRztBQUN0QixJQUFJLE9BQU8sWUFBWSxDQUFDLFVBQVUsQ0FBQzJPLFlBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBQ2lCK0ksWUFBQSxDQUFBLFVBQUEsR0FBRyxVQUFVOztBQ1AvQixNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMvQyxPQUFBLENBQUEsT0FBQSxHQUFHLEtBQUssRUFBRTtBQUN6QixJQUFJLFlBQVksR0FBR3BZLFlBQXVCLENBQUM7QUFDM0MsT0FBQSxDQUFBLE9BQWUsR0FBRyxZQUFZLENBQUMsVUFBVTs7OztBQ0h6QyxNQUFNLENBQUMsY0FBYyxDQUFDcVksUUFBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2hEQSxRQUFBLENBQUEsTUFBQSxHQUFHLEtBQUssRUFBRTtBQUN4QixJQUFJdkksUUFBTSxHQUFHOVAsSUFBdUIsQ0FBQztBQUNyQyxJQUFJNFQsa0JBQWdCLEdBQUdsVCxnQkFBMkIsQ0FBQztBQUNuRCxTQUFTNFgsUUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFO0FBQ2hELElBQUksSUFBSSxVQUFVLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBRSxVQUFVLEdBQUcsUUFBUSxDQUFDLEVBQUU7QUFDekQsSUFBSSxVQUFVLEdBQUcsQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLEdBQUcsVUFBVSxDQUFDO0FBQy9ELElBQUksT0FBT3hJLFFBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ3hELFFBQVEsT0FBTzhELGtCQUFnQixDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNwSCxLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDYXlFLFFBQUEsQ0FBQSxNQUFBLEdBQUdDLFFBQU07Ozs7QUNYdkIsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsVUFBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzlDQSxVQUFBLENBQUEsUUFBQSxHQUFHLEtBQUssRUFBRTtBQUMxQixJQUFJekksUUFBTSxHQUFHOVAsSUFBdUIsQ0FBQztBQUNyQyxTQUFTLFFBQVEsQ0FBQyxRQUFRLEVBQUU7QUFDNUIsSUFBSSxPQUFPOFAsUUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDeEQsUUFBUSxJQUFJO0FBQ1osWUFBWSxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3pDLFNBQVM7QUFDVCxnQkFBZ0I7QUFDaEIsWUFBWSxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3JDLFNBQVM7QUFDVCxLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDZXlJLFVBQUEsQ0FBQSxRQUFBLEdBQUcsUUFBUTs7OztBQ2IzQixNQUFNLENBQUMsY0FBYyxDQUFDQyxNQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDOURBLE1BQUEsQ0FBQSxVQUFrQixHQUFHQSxNQUFBLENBQUEsSUFBWSxHQUFHLEtBQUssRUFBRTtBQUMzQyxJQUFJMUksUUFBTSxHQUFHOVAsSUFBdUIsQ0FBQztBQUNyQyxJQUFJNFAsc0JBQW9CLEdBQUdsUCxvQkFBK0IsQ0FBQztBQUMzRCxTQUFTLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQ2xDLElBQUksT0FBT29QLFFBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBQ1cwSSxNQUFBLENBQUEsSUFBQSxHQUFHLEtBQUs7QUFDcEIsU0FBUyxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7QUFDOUMsSUFBSSxJQUFJLFNBQVMsR0FBRyxJQUFJLEtBQUssT0FBTyxDQUFDO0FBQ3JDLElBQUksT0FBTyxVQUFVLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDekMsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdEIsUUFBUSxNQUFNLENBQUMsU0FBUyxDQUFDNUksc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFVBQVUsS0FBSyxFQUFFO0FBQ3BHLFlBQVksSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFDNUIsWUFBWSxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUU7QUFDM0QsZ0JBQWdCLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUN2RCxnQkFBZ0IsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3RDLGFBQWE7QUFDYixTQUFTLEVBQUUsWUFBWTtBQUN2QixZQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0FBQ3hELFlBQVksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDWixLQUFLLENBQUM7QUFDTixDQUFDO0FBQ2lCNEksTUFBQSxDQUFBLFVBQUEsR0FBRyxVQUFVOzs7O0FDeEIvQixNQUFNLENBQUMsY0FBYyxDQUFDQyxXQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDN0NBLFdBQUEsQ0FBQSxTQUFBLEdBQUcsS0FBSyxFQUFFO0FBQzNCLElBQUkzSSxRQUFNLEdBQUc5UCxJQUF1QixDQUFDO0FBQ3JDLElBQUksTUFBTSxHQUFHVSxNQUFpQixDQUFDO0FBQy9CLFNBQVMsU0FBUyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUU7QUFDdkMsSUFBSSxPQUFPb1AsUUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBQ2dCMkksV0FBQSxDQUFBLFNBQUEsR0FBRyxTQUFTOzs7O0FDUDdCLE1BQU0sQ0FBQyxjQUFjLENBQUNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNqREEsT0FBQSxDQUFBLEtBQUEsR0FBRyxLQUFLLEVBQUU7QUFDdkIsSUFBSTFGLGNBQVksR0FBR2hULFVBQTZCLENBQUM7QUFDakQsSUFBSW9WLFVBQVEsR0FBRzFVLFFBQW1CLENBQUM7QUFDbkMsSUFBSSxNQUFNLEdBQUdFLE1BQWlCLENBQUM7QUFDL0IsSUFBSXdXLGtCQUFnQixHQUFHdlYsZ0JBQTJCLENBQUM7QUFDbkQsSUFBSWtXLGdCQUFjLEdBQUdsVixjQUF5QixDQUFDO0FBQy9DLElBQUl3TSxZQUFVLEdBQUd2TSxVQUEyQixDQUFDO0FBQzdDLFNBQVMsS0FBSyxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUU7QUFDeEMsSUFBSSxJQUFJLGVBQWUsR0FBRyxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNoRCxJQUFJLE9BQU8sVUFBVSxNQUFNLEVBQUU7QUFDN0IsUUFBUSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHc1MsVUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHL0YsWUFBVSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsR0FBRytILGtCQUFnQixDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsR0FBR1csZ0JBQWMsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLE9BQU8sSUFBSS9FLGNBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pTLEtBQUssQ0FBQztBQUNOLENBQUM7QUFDWTBGLE9BQUEsQ0FBQSxLQUFBLEdBQUcsS0FBSzs7OztBQ2RyQixNQUFNLENBQUMsY0FBYyxDQUFDQyxTQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDL0NBLFNBQUEsQ0FBQSxPQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ3pCLElBQUksWUFBWSxHQUFHM1ksWUFBd0IsQ0FBQztBQUM1QyxJQUFJNFIsYUFBVyxHQUFHbFIsV0FBa0MsQ0FBQztBQUNyRCxJQUFJd1AsV0FBUyxHQUFHdFAsU0FBcUIsQ0FBQztBQUN0QyxJQUFJa1AsUUFBTSxHQUFHak8sSUFBdUIsQ0FBQztBQUNyQyxJQUFJK04sc0JBQW9CLEdBQUcvTSxvQkFBK0IsQ0FBQztBQUMzRCxTQUFTLE9BQU8sQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRTtBQUNyRSxJQUFJLE9BQU9pTixRQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUN4RCxRQUFRLElBQUksT0FBTyxDQUFDO0FBQ3BCLFFBQVEsSUFBSSxDQUFDLGdCQUFnQixJQUFJLE9BQU8sZ0JBQWdCLEtBQUssVUFBVSxFQUFFO0FBQ3pFLFlBQVksT0FBTyxHQUFHLGdCQUFnQixDQUFDO0FBQ3ZDLFNBQVM7QUFDVCxhQUFhO0FBQ2IsWUFBWSxDQUFDLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxFQUFFO0FBQy9ILFNBQVM7QUFDVCxRQUFRLElBQUksTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDL0IsUUFBUSxJQUFJLE1BQU0sR0FBRyxVQUFVLEVBQUUsRUFBRTtBQUNuQyxZQUFZLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0IsWUFBWSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDM0IsU0FBUyxDQUFDO0FBQ1YsUUFBUSxJQUFJLFdBQVcsR0FBRyxVQUFVLEdBQUcsRUFBRSxFQUFFLE9BQU8sTUFBTSxDQUFDLFVBQVUsUUFBUSxFQUFFLEVBQUUsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqSCxRQUFRLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztBQUM3QixRQUFRLElBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBQ3RDLFFBQVEsSUFBSSx1QkFBdUIsR0FBRyxJQUFJRixzQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsVUFBVSxLQUFLLEVBQUU7QUFDL0csWUFBWSxJQUFJO0FBQ2hCLGdCQUFnQixJQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0MsZ0JBQWdCLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEQsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDOUIsb0JBQW9CLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLE9BQU8sR0FBRyxTQUFTLEdBQUcsU0FBUyxFQUFFLEdBQUcsSUFBSU0sV0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7QUFDckcsb0JBQW9CLElBQUksT0FBTyxHQUFHLHVCQUF1QixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMxRSxvQkFBb0IsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM3QyxvQkFBb0IsSUFBSSxRQUFRLEVBQUU7QUFDbEMsd0JBQXdCLElBQUksb0JBQW9CLEdBQUdOLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxZQUFZO0FBQ3RILDRCQUE0QixPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDL0MsNEJBQTRCLG9CQUFvQixLQUFLLElBQUksSUFBSSxvQkFBb0IsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUMzSSx5QkFBeUIsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0Ysd0JBQXdCLHVCQUF1QixDQUFDLEdBQUcsQ0FBQ2dDLGFBQVcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztBQUM5SCxxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCLGdCQUFnQixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDL0QsYUFBYTtBQUNiLFlBQVksT0FBTyxHQUFHLEVBQUU7QUFDeEIsZ0JBQWdCLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxhQUFhO0FBQ2IsU0FBUyxFQUFFLFlBQVksRUFBRSxPQUFPLE1BQU0sQ0FBQyxVQUFVLFFBQVEsRUFBRSxFQUFFLE9BQU8sUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE9BQU8sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZO0FBQ2pLLFlBQVksaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLFlBQVksT0FBTyxZQUFZLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLFNBQVMsQ0FBQyxDQUFDO0FBQ1gsUUFBUSxNQUFNLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFDbEQsUUFBUSxTQUFTLHVCQUF1QixDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUU7QUFDNUQsWUFBWSxJQUFJLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsVUFBVSxlQUFlLEVBQUU7QUFDaEYsZ0JBQWdCLFlBQVksRUFBRSxDQUFDO0FBQy9CLGdCQUFnQixJQUFJLFFBQVEsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3ZFLGdCQUFnQixPQUFPLFlBQVk7QUFDbkMsb0JBQW9CLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUMzQyxvQkFBb0IsRUFBRSxZQUFZLEtBQUssQ0FBQyxJQUFJLGlCQUFpQixJQUFJLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3ZHLGlCQUFpQixDQUFDO0FBQ2xCLGFBQWEsQ0FBQyxDQUFDO0FBQ2YsWUFBWSxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUM3QixZQUFZLE9BQU8sTUFBTSxDQUFDO0FBQzFCLFNBQVM7QUFDVCxLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDYytHLFNBQUEsQ0FBQSxPQUFBLEdBQUcsT0FBTzs7OztBQ2hFekIsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsU0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQy9DQSxTQUFBLENBQUEsT0FBQSxHQUFHLEtBQUssRUFBRTtBQUN6QixJQUFJOUksUUFBTSxHQUFHOVAsSUFBdUIsQ0FBQztBQUNyQyxJQUFJNFAsc0JBQW9CLEdBQUdsUCxvQkFBK0IsQ0FBQztBQUMzRCxTQUFTLE9BQU8sR0FBRztBQUNuQixJQUFJLE9BQU9vUCxRQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUN4RCxRQUFRLE1BQU0sQ0FBQyxTQUFTLENBQUNGLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxZQUFZO0FBQy9GLFlBQVksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuQyxZQUFZLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsQyxTQUFTLEVBQUUsWUFBWTtBQUN2QixZQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEMsWUFBWSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNaLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNjZ0osU0FBQSxDQUFBLE9BQUEsR0FBRyxPQUFPOzs7Ozs7QUNmekIsSUFBSWhLLFVBQVEsR0FBRyxDQUFDOU8sY0FBSSxJQUFJQSxjQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxFQUFFO0FBQ3RELElBQUksSUFBSSxDQUFDLEdBQUcsT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRixJQUFJLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixJQUFJLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsT0FBTztBQUNsRCxRQUFRLElBQUksRUFBRSxZQUFZO0FBQzFCLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQy9DLFlBQVksT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDcEQsU0FBUztBQUNULEtBQUssQ0FBQztBQUNOLElBQUksTUFBTSxJQUFJLFNBQVMsQ0FBQyxDQUFDLEdBQUcseUJBQXlCLEdBQUcsaUNBQWlDLENBQUMsQ0FBQztBQUMzRixDQUFDLENBQUM7QUFDRixNQUFNLENBQUMsY0FBYyxDQUFDK1ksVUFBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzlDQSxVQUFBLENBQUEsUUFBQSxHQUFHLEtBQUssRUFBRTtBQUMxQixJQUFJaEUsU0FBTyxHQUFHN1UsS0FBOEIsQ0FBQztBQUM3QyxJQUFJOFAsUUFBTSxHQUFHcFAsSUFBdUIsQ0FBQztBQUNyQyxJQUFJa1Asc0JBQW9CLEdBQUdoUCxvQkFBK0IsQ0FBQztBQUMzRCxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUU7QUFDekIsSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFDO0FBQ3JCLFVBQVUsWUFBWSxFQUFFLE9BQU9pVSxTQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDL0MsVUFBVS9FLFFBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ3ZELFlBQVksSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQzVCLFlBQVksTUFBTSxDQUFDLFNBQVMsQ0FBQ0Ysc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFVBQVUsS0FBSyxFQUFFO0FBQ3hHLGdCQUFnQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLGdCQUFnQixLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDeEQsYUFBYSxFQUFFLFlBQVk7QUFDM0IsZ0JBQWdCLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUM1QixnQkFBZ0IsSUFBSTtBQUNwQixvQkFBb0IsS0FBSyxJQUFJLFFBQVEsR0FBR2hCLFVBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFO0FBQ3hJLHdCQUF3QixJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO0FBQ3JELHdCQUF3QixVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9DLHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakIsZ0JBQWdCLE9BQU8sS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFDekQsd0JBQXdCO0FBQ3hCLG9CQUFvQixJQUFJO0FBQ3hCLHdCQUF3QixJQUFJLFVBQVUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hHLHFCQUFxQjtBQUNyQiw0QkFBNEIsRUFBRSxJQUFJLEdBQUcsRUFBRSxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN6RCxpQkFBaUI7QUFDakIsZ0JBQWdCLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN0QyxhQUFhLEVBQUUsU0FBUyxFQUFFLFlBQVk7QUFDdEMsZ0JBQWdCLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDOUIsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUNoQixTQUFTLENBQUMsQ0FBQztBQUNYLENBQUM7QUFDZWlLLFVBQUEsQ0FBQSxRQUFBLEdBQUcsUUFBUTs7QUM3QzNCLE1BQU0sQ0FBQyxjQUFjLENBQUNDLE1BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNsREEsTUFBQSxDQUFBLElBQUEsR0FBRyxLQUFLLEVBQUU7QUFDdEIsSUFBSTlGLGNBQVksR0FBR2hULFVBQTZCLENBQUM7QUFDakQsSUFBSW9WLFVBQVEsR0FBRzFVLFFBQW1CLENBQUM7QUFDbkMsSUFBSSxVQUFVLEdBQUdFLFVBQXFCLENBQUM7QUFDdkMsSUFBSSxjQUFjLEdBQUdpQixjQUF5QixDQUFDO0FBQy9DLElBQUksZ0JBQWdCLEdBQUdnQixnQkFBMkIsQ0FBQztBQUNuRCxJQUFJd00sWUFBVSxHQUFHdk0sVUFBMkIsQ0FBQztBQUM3QyxTQUFTLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFO0FBQ3ZDLElBQUksSUFBSSxlQUFlLEdBQUcsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDaEQsSUFBSSxPQUFPLFVBQVUsTUFBTSxFQUFFO0FBQzdCLFFBQVEsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBR3NTLFVBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRy9GLFlBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEdBQUcsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxHQUFHLGNBQWMsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLE9BQU8sSUFBSTJELGNBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pULEtBQUssQ0FBQztBQUNOLENBQUM7QUFDVzhGLE1BQUEsQ0FBQSxJQUFBLEdBQUcsSUFBSTs7OztBQ2RuQixNQUFNLENBQUMsY0FBYyxDQUFDQyxhQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDM0NBLGFBQUEsQ0FBQSxXQUFBLEdBQUcsS0FBSyxFQUFFO0FBQzdCLElBQUksY0FBYyxHQUFHL1ksWUFBMEIsQ0FBQztBQUNoRCxJQUFJOFAsUUFBTSxHQUFHcFAsSUFBdUIsQ0FBQztBQUNyQyxJQUFJa1Asc0JBQW9CLEdBQUdoUCxvQkFBK0IsQ0FBQztBQUMzRCxTQUFTLFdBQVcsR0FBRztBQUN2QixJQUFJLE9BQU9rUCxRQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUN4RCxRQUFRLE1BQU0sQ0FBQyxTQUFTLENBQUNGLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxVQUFVLEtBQUssRUFBRTtBQUNwRyxZQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMzRSxTQUFTLEVBQUUsWUFBWTtBQUN2QixZQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0FBQzFFLFlBQVksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xDLFNBQVMsRUFBRSxVQUFVLEdBQUcsRUFBRTtBQUMxQixZQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRSxZQUFZLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ1osS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ2tCbUosYUFBQSxDQUFBLFdBQUEsR0FBRyxXQUFXOzs7O0FDbEJqQyxNQUFNLENBQUMsY0FBYyxDQUFDQyxLQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDbkRBLEtBQUEsQ0FBQSxHQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ3JCLElBQUkzQyxVQUFRLEdBQUdyVyxRQUFtQixDQUFDO0FBQ25DLElBQUl5TyxjQUFZLEdBQUcvTixZQUE2QixDQUFDO0FBQ2pELFNBQVMsR0FBRyxDQUFDLFFBQVEsRUFBRTtBQUN2QixJQUFJLE9BQU8yVixVQUFRLENBQUMsTUFBTSxDQUFDNUgsY0FBWSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxRQUFRLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZLLENBQUM7QUFDVXVLLEtBQUEsQ0FBQSxHQUFBLEdBQUcsR0FBRzs7OztBQ1BqQixNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMvQyxPQUFBLENBQUEsT0FBQSxHQUFHLEtBQUssRUFBRTtBQUN6QixJQUFJbkYsWUFBVSxHQUFHN1QsVUFBcUIsQ0FBQztBQUN2QyxPQUFBLENBQUEsT0FBZSxHQUFHNlQsWUFBVSxDQUFDLFFBQVE7Ozs7QUNIckMsTUFBTSxDQUFDLGNBQWMsQ0FBQ29GLFlBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM1Q0EsWUFBQSxDQUFBLFVBQUEsR0FBRyxLQUFLLEVBQUU7QUFDNUIsSUFBSSxVQUFVLEdBQUdqWixVQUFxQixDQUFDO0FBQ3ZDLElBQUl5TyxjQUFZLEdBQUcvTixZQUE2QixDQUFDO0FBQ2pELFNBQVMsVUFBVSxDQUFDLGVBQWUsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFO0FBQ2pFLElBQUksSUFBSSxVQUFVLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBRSxVQUFVLEdBQUcsUUFBUSxDQUFDLEVBQUU7QUFDekQsSUFBSSxJQUFJK04sY0FBWSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRTtBQUNqRCxRQUFRLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsT0FBTyxlQUFlLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN4RyxLQUFLO0FBQ0wsSUFBSSxJQUFJLE9BQU8sY0FBYyxLQUFLLFFBQVEsRUFBRTtBQUM1QyxRQUFRLFVBQVUsR0FBRyxjQUFjLENBQUM7QUFDcEMsS0FBSztBQUNMLElBQUksT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxPQUFPLGVBQWUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDcEYsQ0FBQztBQUNpQndLLFlBQUEsQ0FBQSxVQUFBLEdBQUcsVUFBVTs7OztBQ2QvQixNQUFNLENBQUMsY0FBYyxDQUFDQyxXQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDN0NBLFdBQUEsQ0FBQSxTQUFBLEdBQUcsS0FBSyxFQUFFO0FBQzNCLElBQUlwSixRQUFNLEdBQUc5UCxJQUF1QixDQUFDO0FBQ3JDLElBQUksZ0JBQWdCLEdBQUdVLGdCQUEyQixDQUFDO0FBQ25ELFNBQVMsU0FBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0FBQ2xELElBQUksSUFBSSxVQUFVLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBRSxVQUFVLEdBQUcsUUFBUSxDQUFDLEVBQUU7QUFDekQsSUFBSSxPQUFPb1AsUUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDeEQsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDekIsUUFBUSxPQUFPLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLE9BQU8sV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxVQUFVLEtBQUssRUFBRTtBQUN0SyxZQUFZLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDMUIsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFFBQVEsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNyRSxLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDZ0JvSixXQUFBLENBQUEsU0FBQSxHQUFHLFNBQVM7Ozs7OztBQ2I3QixJQUFJckssUUFBTSxHQUFHLENBQUMvTyxjQUFJLElBQUlBLGNBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RELElBQUksSUFBSSxDQUFDLEdBQUcsT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDL0QsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDckMsSUFBSSxJQUFJO0FBQ1IsUUFBUSxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkYsS0FBSztBQUNMLElBQUksT0FBTyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtBQUMzQyxZQUFZO0FBQ1osUUFBUSxJQUFJO0FBQ1osWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0QsU0FBUztBQUNULGdCQUFnQixFQUFFLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3pDLEtBQUs7QUFDTCxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBQ0YsSUFBSWdQLGVBQWEsR0FBRyxDQUFDaFAsY0FBSSxJQUFJQSxjQUFJLENBQUMsYUFBYSxLQUFLLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRTtBQUN4RSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3JFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBQ0YsTUFBTSxDQUFDLGNBQWMsQ0FBQzhVLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNqREEsT0FBQSxDQUFBLEtBQUEsR0FBRyxLQUFLLEVBQUU7QUFDdkIsSUFBSTlFLFFBQU0sR0FBRzlQLElBQXVCLENBQUM7QUFDckMsSUFBSStVLGtCQUFnQixHQUFHclUsZ0JBQWlDLENBQUM7QUFDekQsSUFBSSxVQUFVLEdBQUdFLFVBQXFCLENBQUM7QUFDdkMsSUFBSStSLFFBQU0sR0FBRzlRLElBQXVCLENBQUM7QUFDckMsSUFBSSxNQUFNLEdBQUdnQixNQUE2QixDQUFDO0FBQzNDLFNBQVNpUyxPQUFLLEdBQUc7QUFDakIsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7QUFDbEIsSUFBSSxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNsRCxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakMsS0FBSztBQUNMLElBQUksSUFBSSxTQUFTLEdBQUduQyxRQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLElBQUksSUFBSSxVQUFVLEdBQUdBLFFBQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3RELElBQUksSUFBSSxHQUFHb0Msa0JBQWdCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pELElBQUksT0FBT2pGLFFBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ3hELFFBQVEsVUFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDaEIsZUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUVELFFBQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzdILEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNZK0YsT0FBQSxDQUFBLEtBQUEsR0FBR0UsT0FBSzs7QUN4Q3JCLElBQUlqRyxRQUFNLEdBQUcsQ0FBQy9PLGNBQUksSUFBSUEsY0FBSSxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDdEQsSUFBSSxJQUFJLENBQUMsR0FBRyxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMvRCxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNyQyxJQUFJLElBQUk7QUFDUixRQUFRLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuRixLQUFLO0FBQ0wsSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO0FBQzNDLFlBQVk7QUFDWixRQUFRLElBQUk7QUFDWixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RCxTQUFTO0FBQ1QsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDekMsS0FBSztBQUNMLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxDQUFDLENBQUM7QUFDRixJQUFJZ1AsZUFBYSxHQUFHLENBQUNoUCxjQUFJLElBQUlBLGNBQUksQ0FBQyxhQUFhLEtBQUssVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFO0FBQ3hFLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDckUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxDQUFDLENBQUM7QUFDRixNQUFNLENBQUMsY0FBYyxDQUFDcVosV0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzdDQSxXQUFBLENBQUEsU0FBQSxHQUFHLEtBQUssRUFBRTtBQUMzQixJQUFJLE9BQU8sR0FBR25aLE9BQWtCLENBQUM7QUFDakMsU0FBUyxTQUFTLEdBQUc7QUFDckIsSUFBSSxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDMUIsSUFBSSxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNsRCxRQUFRLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekMsS0FBSztBQUNMLElBQUksT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRThPLGVBQWEsQ0FBQyxFQUFFLEVBQUVELFFBQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEYsQ0FBQztBQUNnQnNLLFdBQUEsQ0FBQSxTQUFBLEdBQUcsU0FBUzs7OztBQy9CN0IsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsS0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ25EQSxLQUFBLENBQUEsR0FBQSxHQUFHLEtBQUssRUFBRTtBQUNyQixJQUFJLFFBQVEsR0FBR3BaLFFBQW1CLENBQUM7QUFDbkMsSUFBSXlPLGNBQVksR0FBRy9OLFlBQTZCLENBQUM7QUFDakQsU0FBUyxHQUFHLENBQUMsUUFBUSxFQUFFO0FBQ3ZCLElBQUksT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDK04sY0FBWSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxRQUFRLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZLLENBQUM7QUFDVTJLLEtBQUEsQ0FBQSxHQUFBLEdBQUcsR0FBRzs7OztBQ1BqQixNQUFNLENBQUMsY0FBYyxDQUFDQyxXQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDN0NBLFdBQUEsQ0FBQSxTQUFBLEdBQUcsS0FBSyxFQUFFO0FBQzNCLElBQUl0Six5QkFBdUIsR0FBRy9QLHVCQUE4QyxDQUFDO0FBQzdFLElBQUl5TyxjQUFZLEdBQUcvTixZQUE2QixDQUFDO0FBQ2pELElBQUlzVyxXQUFTLEdBQUdwVyxTQUFvQixDQUFDO0FBQ3JDLFNBQVMsU0FBUyxDQUFDLHVCQUF1QixFQUFFLFFBQVEsRUFBRTtBQUN0RCxJQUFJLElBQUksY0FBYyxHQUFHNk4sY0FBWSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLHVCQUF1QixHQUFHLFlBQVksRUFBRSxPQUFPLHVCQUF1QixDQUFDLEVBQUUsQ0FBQztBQUN0SixJQUFJLElBQUlBLGNBQVksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDM0MsUUFBUSxPQUFPdUksV0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7QUFDM0MsWUFBWSxTQUFTLEVBQUUsY0FBYztBQUNyQyxTQUFTLENBQUMsQ0FBQztBQUNYLEtBQUs7QUFDTCxJQUFJLE9BQU8sVUFBVSxNQUFNLEVBQUUsRUFBRSxPQUFPLElBQUlqSCx5QkFBdUIsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25ILENBQUM7QUFDZ0JzSixXQUFBLENBQUEsU0FBQSxHQUFHLFNBQVM7Ozs7QUNkN0IsSUFBSXhLLFFBQU0sR0FBRyxDQUFDL08sY0FBSSxJQUFJQSxjQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0RCxJQUFJLElBQUksQ0FBQyxHQUFHLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9ELElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLElBQUksSUFBSTtBQUNSLFFBQVEsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25GLEtBQUs7QUFDTCxJQUFJLE9BQU8sS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFDM0MsWUFBWTtBQUNaLFFBQVEsSUFBSTtBQUNaLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELFNBQVM7QUFDVCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN6QyxLQUFLO0FBQ0wsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUMsQ0FBQztBQUNGLElBQUlnUCxlQUFhLEdBQUcsQ0FBQ2hQLGNBQUksSUFBSUEsY0FBSSxDQUFDLGFBQWEsS0FBSyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUU7QUFDeEUsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNyRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUMsQ0FBQztBQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUN3Wix1QkFBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzlEQSx1QkFBQSxDQUFBLGlCQUF5QixHQUFHQSx1QkFBQSxDQUFBLHFCQUE2QixHQUFHLEtBQUssRUFBRTtBQUNuRSxJQUFJLGdCQUFnQixHQUFHdFosZ0JBQWlDLENBQUM7QUFDekQsSUFBSSxtQkFBbUIsR0FBR1UsbUJBQTBDLENBQUM7QUFDckUsU0FBUyxxQkFBcUIsR0FBRztBQUNqQyxJQUFJLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUNyQixJQUFJLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ2xELFFBQVEsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQyxLQUFLO0FBQ0wsSUFBSSxJQUFJLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDL0QsSUFBSSxPQUFPLFVBQVUsTUFBTSxFQUFFLEVBQUUsT0FBTyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUVvTyxlQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRUQsUUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0ksQ0FBQztBQUM0QnlLLHVCQUFBLENBQUEscUJBQUEsR0FBRyxzQkFBc0I7QUFDN0JBLHVCQUFBLENBQUEsaUJBQUEsR0FBRyxxQkFBcUI7Ozs7QUNsQ2pELE1BQU0sQ0FBQyxjQUFjLENBQUNDLFVBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM5Q0EsVUFBQSxDQUFBLFFBQUEsR0FBRyxLQUFLLEVBQUU7QUFDMUIsSUFBSXpKLFFBQU0sR0FBRzlQLElBQXVCLENBQUM7QUFDckMsSUFBSTRQLHNCQUFvQixHQUFHbFAsb0JBQStCLENBQUM7QUFDM0QsU0FBUyxRQUFRLEdBQUc7QUFDcEIsSUFBSSxPQUFPb1AsUUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDeEQsUUFBUSxJQUFJLElBQUksQ0FBQztBQUNqQixRQUFRLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztBQUM1QixRQUFRLE1BQU0sQ0FBQyxTQUFTLENBQUNGLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxVQUFVLEtBQUssRUFBRTtBQUNwRyxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN6QixZQUFZLElBQUksR0FBRyxLQUFLLENBQUM7QUFDekIsWUFBWSxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ25ELFlBQVksT0FBTyxHQUFHLElBQUksQ0FBQztBQUMzQixTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ1osS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ2UySixVQUFBLENBQUEsUUFBQSxHQUFHLFFBQVE7Ozs7QUNoQjNCLE1BQU0sQ0FBQyxjQUFjLENBQUNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNqREEsT0FBQSxDQUFBLEtBQUEsR0FBRyxLQUFLLEVBQUU7QUFDdkIsSUFBSXRHLE9BQUssR0FBR2xULEtBQWdCLENBQUM7QUFDN0IsU0FBUyxLQUFLLEdBQUc7QUFDakIsSUFBSSxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDeEIsSUFBSSxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNsRCxRQUFRLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkMsS0FBSztBQUNMLElBQUksSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztBQUNuQyxJQUFJLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtBQUN0QixRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztBQUMvRCxLQUFLO0FBQ0wsSUFBSSxPQUFPa1QsT0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtBQUNsQyxRQUFRLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztBQUM1QixRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekMsWUFBWSxJQUFJLENBQUMsR0FBRyxXQUFXLEtBQUssSUFBSSxJQUFJLFdBQVcsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekcsWUFBWSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFdBQVcsRUFBRTtBQUMxQyxnQkFBZ0IsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUNoQyxhQUFhO0FBQ2IsaUJBQWlCO0FBQ2pCLGdCQUFnQixPQUFPLFNBQVMsQ0FBQztBQUNqQyxhQUFhO0FBQ2IsU0FBUztBQUNULFFBQVEsT0FBTyxXQUFXLENBQUM7QUFDM0IsS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ1lzRyxPQUFBLENBQUEsS0FBQSxHQUFHLEtBQUs7Ozs7QUMxQnJCLE1BQU0sQ0FBQyxjQUFjLENBQUNDLFNBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMvQ0EsU0FBQSxDQUFBLE9BQUEsR0FBRyxLQUFLLEVBQUU7QUFDekIsSUFBSXZKLFdBQVMsR0FBR2xRLFNBQXFCLENBQUM7QUFDdEMsSUFBSXFaLGFBQVcsR0FBRzNZLFdBQXNCLENBQUM7QUFDekMsSUFBSSxTQUFTLEdBQUdFLFNBQW9CLENBQUM7QUFDckMsU0FBUyxPQUFPLENBQUMsUUFBUSxFQUFFO0FBQzNCLElBQUksT0FBTyxRQUFRLEdBQUcsVUFBVSxNQUFNLEVBQUUsRUFBRSxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLFVBQVUsTUFBTSxFQUFFLEVBQUUsT0FBT3lZLGFBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSW5KLFdBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMvSyxDQUFDO0FBQ2N1SixTQUFBLENBQUEsT0FBQSxHQUFHLE9BQU87Ozs7QUNSekIsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsaUJBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN2Q0EsaUJBQUEsQ0FBQSxlQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ2pDLElBQUksaUJBQWlCLEdBQUcxWixpQkFBNkIsQ0FBQztBQUN0RCxJQUFJK1AseUJBQXVCLEdBQUdyUCx1QkFBOEMsQ0FBQztBQUM3RSxTQUFTLGVBQWUsQ0FBQyxZQUFZLEVBQUU7QUFDdkMsSUFBSSxPQUFPLFVBQVUsTUFBTSxFQUFFO0FBQzdCLFFBQVEsSUFBSSxPQUFPLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDMUUsUUFBUSxPQUFPLElBQUlxUCx5QkFBdUIsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLE9BQU8sT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFHLEtBQUssQ0FBQztBQUNOLENBQUM7QUFDc0IySixpQkFBQSxDQUFBLGVBQUEsR0FBRyxlQUFlOzs7O0FDVnpDLE1BQU0sQ0FBQyxjQUFjLENBQUNDLGFBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMzQ0EsYUFBQSxDQUFBLFdBQUEsR0FBRyxLQUFLLEVBQUU7QUFDN0IsSUFBSSxjQUFjLEdBQUczWixjQUEwQixDQUFDO0FBQ2hELElBQUksdUJBQXVCLEdBQUdVLHVCQUE4QyxDQUFDO0FBQzdFLFNBQVMsV0FBVyxHQUFHO0FBQ3ZCLElBQUksT0FBTyxVQUFVLE1BQU0sRUFBRTtBQUM3QixRQUFRLElBQUksT0FBTyxHQUFHLElBQUksY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3hELFFBQVEsT0FBTyxJQUFJLHVCQUF1QixDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUcsS0FBSyxDQUFDO0FBQ04sQ0FBQztBQUNrQmlaLGFBQUEsQ0FBQSxXQUFBLEdBQUcsV0FBVzs7OztBQ1ZqQyxNQUFNLENBQUMsY0FBYyxDQUFDQyxlQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDekNBLGVBQUEsQ0FBQSxhQUFBLEdBQUcsS0FBSyxFQUFFO0FBQy9CLElBQUl4SixpQkFBZSxHQUFHcFEsZUFBMkIsQ0FBQztBQUNsRCxJQUFJLFdBQVcsR0FBR1UsV0FBc0IsQ0FBQztBQUN6QyxJQUFJK04sY0FBWSxHQUFHN04sWUFBNkIsQ0FBQztBQUNqRCxTQUFTLGFBQWEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFO0FBQ3ZGLElBQUksSUFBSSxtQkFBbUIsSUFBSSxDQUFDNk4sY0FBWSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO0FBQzlFLFFBQVEsaUJBQWlCLEdBQUcsbUJBQW1CLENBQUM7QUFDaEQsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLEdBQUdBLGNBQVksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsR0FBRyxtQkFBbUIsR0FBRyxTQUFTLENBQUM7QUFDbEcsSUFBSSxPQUFPLFVBQVUsTUFBTSxFQUFFLEVBQUUsT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUkyQixpQkFBZSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9KLENBQUM7QUFDb0J3SixlQUFBLENBQUEsYUFBQSxHQUFHLGFBQWE7Ozs7QUNackMsSUFBSS9LLFFBQU0sR0FBRyxDQUFDL08sY0FBSSxJQUFJQSxjQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0RCxJQUFJLElBQUksQ0FBQyxHQUFHLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9ELElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLElBQUksSUFBSTtBQUNSLFFBQVEsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25GLEtBQUs7QUFDTCxJQUFJLE9BQU8sS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFDM0MsWUFBWTtBQUNaLFFBQVEsSUFBSTtBQUNaLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELFNBQVM7QUFDVCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN6QyxLQUFLO0FBQ0wsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUMsQ0FBQztBQUNGLElBQUlnUCxlQUFhLEdBQUcsQ0FBQ2hQLGNBQUksSUFBSUEsY0FBSSxDQUFDLGFBQWEsS0FBSyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUU7QUFDeEUsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNyRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUMsQ0FBQztBQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUMrWixVQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDOUNBLFVBQUEsQ0FBQSxRQUFBLEdBQUcsS0FBSyxFQUFFO0FBQzFCLElBQUksTUFBTSxHQUFHN1osTUFBNkIsQ0FBQztBQUMzQyxJQUFJOFAsUUFBTSxHQUFHcFAsSUFBdUIsQ0FBQztBQUNyQyxJQUFJMk8sWUFBVSxHQUFHek8sVUFBMkIsQ0FBQztBQUM3QyxTQUFTLFFBQVEsR0FBRztBQUNwQixJQUFJLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUMxQixJQUFJLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ2xELFFBQVEsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QyxLQUFLO0FBQ0wsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU07QUFDL0IsVUFBVXlPLFlBQVUsQ0FBQyxRQUFRO0FBQzdCLFVBQVVTLFFBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ3ZELFlBQVksTUFBTSxDQUFDLFFBQVEsQ0FBQ2hCLGVBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFRCxRQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZGLFNBQVMsQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUNlZ0wsVUFBQSxDQUFBLFFBQUEsR0FBRyxRQUFROzs7O0FDckMzQixNQUFNLENBQUMsY0FBYyxDQUFDQyxRQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDaERBLFFBQUEsQ0FBQSxNQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ3hCLElBQUksT0FBTyxHQUFHOVosS0FBOEIsQ0FBQztBQUM3QyxJQUFJOFAsUUFBTSxHQUFHcFAsSUFBdUIsQ0FBQztBQUNyQyxJQUFJa1Asc0JBQW9CLEdBQUdoUCxvQkFBK0IsQ0FBQztBQUMzRCxJQUFJZ1IsYUFBVyxHQUFHL1AsV0FBa0MsQ0FBQztBQUNyRCxJQUFJNFMsU0FBTyxHQUFHNVIsT0FBOEIsQ0FBQztBQUM3QyxTQUFTa1gsUUFBTSxDQUFDLGFBQWEsRUFBRTtBQUMvQixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUM7QUFDekIsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUNkLElBQUksSUFBSSxhQUFhLElBQUksSUFBSSxFQUFFO0FBQy9CLFFBQVEsSUFBSSxPQUFPLGFBQWEsS0FBSyxRQUFRLEVBQUU7QUFDL0MsWUFBWSxDQUFDLEVBQUUsR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsUUFBUSxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRTtBQUMzRyxTQUFTO0FBQ1QsYUFBYTtBQUNiLFlBQVksS0FBSyxHQUFHLGFBQWEsQ0FBQztBQUNsQyxTQUFTO0FBQ1QsS0FBSztBQUNMLElBQUksT0FBTyxLQUFLLElBQUksQ0FBQztBQUNyQixVQUFVLFlBQVksRUFBRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUMvQyxVQUFVakssUUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDdkQsWUFBWSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDMUIsWUFBWSxJQUFJLFNBQVMsQ0FBQztBQUMxQixZQUFZLElBQUksV0FBVyxHQUFHLFlBQVk7QUFDMUMsZ0JBQWdCLFNBQVMsS0FBSyxJQUFJLElBQUksU0FBUyxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUM5RixnQkFBZ0IsU0FBUyxHQUFHLElBQUksQ0FBQztBQUNqQyxnQkFBZ0IsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ25DLG9CQUFvQixJQUFJLFFBQVEsR0FBRyxPQUFPLEtBQUssS0FBSyxRQUFRLEdBQUcyRSxTQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHN0MsYUFBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMxSCxvQkFBb0IsSUFBSSxvQkFBb0IsR0FBR2hDLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxZQUFZO0FBQ3JILHdCQUF3QixvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUMzRCx3QkFBd0IsaUJBQWlCLEVBQUUsQ0FBQztBQUM1QyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3ZCLG9CQUFvQixRQUFRLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDN0QsaUJBQWlCO0FBQ2pCLHFCQUFxQjtBQUNyQixvQkFBb0IsaUJBQWlCLEVBQUUsQ0FBQztBQUN4QyxpQkFBaUI7QUFDakIsYUFBYSxDQUFDO0FBQ2QsWUFBWSxJQUFJLGlCQUFpQixHQUFHLFlBQVk7QUFDaEQsZ0JBQWdCLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztBQUN0QyxnQkFBZ0IsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUNBLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsWUFBWTtBQUM5SCxvQkFBb0IsSUFBSSxFQUFFLEtBQUssR0FBRyxLQUFLLEVBQUU7QUFDekMsd0JBQXdCLElBQUksU0FBUyxFQUFFO0FBQ3ZDLDRCQUE0QixXQUFXLEVBQUUsQ0FBQztBQUMxQyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLDRCQUE0QixTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzdDLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckIseUJBQXlCO0FBQ3pCLHdCQUF3QixVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDOUMscUJBQXFCO0FBQ3JCLGlCQUFpQixDQUFDLENBQUMsQ0FBQztBQUNwQixnQkFBZ0IsSUFBSSxTQUFTLEVBQUU7QUFDL0Isb0JBQW9CLFdBQVcsRUFBRSxDQUFDO0FBQ2xDLGlCQUFpQjtBQUNqQixhQUFhLENBQUM7QUFDZCxZQUFZLGlCQUFpQixFQUFFLENBQUM7QUFDaEMsU0FBUyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBQ2FrSyxRQUFBLENBQUEsTUFBQSxHQUFHQyxRQUFNOzs7O0FDN0R2QixNQUFNLENBQUMsY0FBYyxDQUFDQyxZQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDNUNBLFlBQUEsQ0FBQSxVQUFBLEdBQUcsS0FBSyxFQUFFO0FBQzVCLElBQUlwSSxhQUFXLEdBQUc1UixXQUFrQyxDQUFDO0FBQ3JELElBQUlrUSxXQUFTLEdBQUd4UCxTQUFxQixDQUFDO0FBQ3RDLElBQUlvUCxRQUFNLEdBQUdsUCxJQUF1QixDQUFDO0FBQ3JDLElBQUlnUCxzQkFBb0IsR0FBRy9OLG9CQUErQixDQUFDO0FBQzNELFNBQVMsVUFBVSxDQUFDLFFBQVEsRUFBRTtBQUM5QixJQUFJLE9BQU9pTyxRQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUN4RCxRQUFRLElBQUksUUFBUSxDQUFDO0FBQ3JCLFFBQVEsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQzlCLFFBQVEsSUFBSSxZQUFZLENBQUM7QUFDekIsUUFBUSxJQUFJLGtCQUFrQixHQUFHLEtBQUssQ0FBQztBQUN2QyxRQUFRLElBQUksY0FBYyxHQUFHLEtBQUssQ0FBQztBQUNuQyxRQUFRLElBQUksYUFBYSxHQUFHLFlBQVksRUFBRSxPQUFPLGNBQWMsSUFBSSxrQkFBa0IsS0FBSyxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFILFFBQVEsSUFBSSxvQkFBb0IsR0FBRyxZQUFZO0FBQy9DLFlBQVksSUFBSSxDQUFDLFlBQVksRUFBRTtBQUMvQixnQkFBZ0IsWUFBWSxHQUFHLElBQUlJLFdBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN2RCxnQkFBZ0IwQixhQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQ2hDLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxZQUFZO0FBQzlJLG9CQUFvQixJQUFJLFFBQVEsRUFBRTtBQUNsQyx3QkFBd0Isc0JBQXNCLEVBQUUsQ0FBQztBQUNqRCxxQkFBcUI7QUFDckIseUJBQXlCO0FBQ3pCLHdCQUF3QixTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLHFCQUFxQjtBQUNyQixpQkFBaUIsRUFBRSxZQUFZO0FBQy9CLG9CQUFvQixrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFDOUMsb0JBQW9CLGFBQWEsRUFBRSxDQUFDO0FBQ3BDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztBQUNwQixhQUFhO0FBQ2IsWUFBWSxPQUFPLFlBQVksQ0FBQztBQUNoQyxTQUFTLENBQUM7QUFDVixRQUFRLElBQUksc0JBQXNCLEdBQUcsWUFBWTtBQUNqRCxZQUFZLGNBQWMsR0FBRyxLQUFLLENBQUM7QUFDbkMsWUFBWSxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQ0Esc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZO0FBQ3pILGdCQUFnQixjQUFjLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxJQUFJLG9CQUFvQixFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbEUsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUNoQixZQUFZLElBQUksU0FBUyxFQUFFO0FBQzNCLGdCQUFnQixRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDdkMsZ0JBQWdCLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDaEMsZ0JBQWdCLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDbEMsZ0JBQWdCLHNCQUFzQixFQUFFLENBQUM7QUFDekMsYUFBYTtBQUNiLFNBQVMsQ0FBQztBQUNWLFFBQVEsc0JBQXNCLEVBQUUsQ0FBQztBQUNqQyxLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDaUJvSyxZQUFBLENBQUEsVUFBQSxHQUFHLFVBQVU7Ozs7QUMvQy9CLE1BQU0sQ0FBQyxjQUFjLENBQUNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNqREEsT0FBQSxDQUFBLEtBQUEsR0FBRyxLQUFLLEVBQUU7QUFDdkIsSUFBSW5LLFFBQU0sR0FBRzlQLElBQXVCLENBQUM7QUFDckMsSUFBSTRQLHNCQUFvQixHQUFHbFAsb0JBQStCLENBQUM7QUFDM0QsSUFBSTJPLFlBQVUsR0FBR3pPLFVBQTJCLENBQUM7QUFDN0MsSUFBSTZULFNBQU8sR0FBRzVTLE9BQThCLENBQUM7QUFDN0MsSUFBSStQLGFBQVcsR0FBRy9PLFdBQWtDLENBQUM7QUFDckQsU0FBUyxLQUFLLENBQUMsYUFBYSxFQUFFO0FBQzlCLElBQUksSUFBSSxhQUFhLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBRSxhQUFhLEdBQUcsUUFBUSxDQUFDLEVBQUU7QUFDL0QsSUFBSSxJQUFJLE1BQU0sQ0FBQztBQUNmLElBQUksSUFBSSxhQUFhLElBQUksT0FBTyxhQUFhLEtBQUssUUFBUSxFQUFFO0FBQzVELFFBQVEsTUFBTSxHQUFHLGFBQWEsQ0FBQztBQUMvQixLQUFLO0FBQ0wsU0FBUztBQUNULFFBQVEsTUFBTSxHQUFHO0FBQ2pCLFlBQVksS0FBSyxFQUFFLGFBQWE7QUFDaEMsU0FBUyxDQUFDO0FBQ1YsS0FBSztBQUNMLElBQUksSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLFFBQVEsR0FBRyxFQUFFLEVBQUUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxjQUFjLEVBQUUsY0FBYyxHQUFHLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ2hLLElBQUksT0FBTyxLQUFLLElBQUksQ0FBQztBQUNyQixVQUFVd00sWUFBVSxDQUFDLFFBQVE7QUFDN0IsVUFBVVMsUUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDdkQsWUFBWSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDMUIsWUFBWSxJQUFJLFFBQVEsQ0FBQztBQUN6QixZQUFZLElBQUksaUJBQWlCLEdBQUcsWUFBWTtBQUNoRCxnQkFBZ0IsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ3RDLGdCQUFnQixRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQ0Ysc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFVBQVUsS0FBSyxFQUFFO0FBQ3ZILG9CQUFvQixJQUFJLGNBQWMsRUFBRTtBQUN4Qyx3QkFBd0IsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNsQyxxQkFBcUI7QUFDckIsb0JBQW9CLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0MsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsR0FBRyxFQUFFO0FBQzdDLG9CQUFvQixJQUFJLEtBQUssRUFBRSxHQUFHLEtBQUssRUFBRTtBQUN6Qyx3QkFBd0IsSUFBSSxPQUFPLEdBQUcsWUFBWTtBQUNsRCw0QkFBNEIsSUFBSSxRQUFRLEVBQUU7QUFDMUMsZ0NBQWdDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUN2RCxnQ0FBZ0MsUUFBUSxHQUFHLElBQUksQ0FBQztBQUNoRCxnQ0FBZ0MsaUJBQWlCLEVBQUUsQ0FBQztBQUNwRCw2QkFBNkI7QUFDN0IsaUNBQWlDO0FBQ2pDLGdDQUFnQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ2pELDZCQUE2QjtBQUM3Qix5QkFBeUIsQ0FBQztBQUMxQix3QkFBd0IsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO0FBQzNDLDRCQUE0QixJQUFJLFFBQVEsR0FBRyxPQUFPLEtBQUssS0FBSyxRQUFRLEdBQUc2RSxTQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHN0MsYUFBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdkksNEJBQTRCLElBQUksb0JBQW9CLEdBQUdoQyxzQkFBb0IsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsWUFBWTtBQUM3SCxnQ0FBZ0Msb0JBQW9CLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbkUsZ0NBQWdDLE9BQU8sRUFBRSxDQUFDO0FBQzFDLDZCQUE2QixFQUFFLFlBQVk7QUFDM0MsZ0NBQWdDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN0RCw2QkFBNkIsQ0FBQyxDQUFDO0FBQy9CLDRCQUE0QixRQUFRLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDckUseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3Qiw0QkFBNEIsT0FBTyxFQUFFLENBQUM7QUFDdEMseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQix5QkFBeUI7QUFDekIsd0JBQXdCLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUMscUJBQXFCO0FBQ3JCLGlCQUFpQixDQUFDLENBQUMsQ0FBQztBQUNwQixnQkFBZ0IsSUFBSSxTQUFTLEVBQUU7QUFDL0Isb0JBQW9CLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUMzQyxvQkFBb0IsUUFBUSxHQUFHLElBQUksQ0FBQztBQUNwQyxvQkFBb0IsaUJBQWlCLEVBQUUsQ0FBQztBQUN4QyxpQkFBaUI7QUFDakIsYUFBYSxDQUFDO0FBQ2QsWUFBWSxpQkFBaUIsRUFBRSxDQUFDO0FBQ2hDLFNBQVMsQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUNZcUssT0FBQSxDQUFBLEtBQUEsR0FBRyxLQUFLOzs7O0FDdEVyQixNQUFNLENBQUMsY0FBYyxDQUFDQyxXQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDN0NBLFdBQUEsQ0FBQSxTQUFBLEdBQUcsS0FBSyxFQUFFO0FBQzNCLElBQUl0SSxhQUFXLEdBQUc1UixXQUFrQyxDQUFDO0FBQ3JELElBQUlrUSxXQUFTLEdBQUd4UCxTQUFxQixDQUFDO0FBQ3RDLElBQUlvUCxRQUFNLEdBQUdsUCxJQUF1QixDQUFDO0FBQ3JDLElBQUlnUCxzQkFBb0IsR0FBRy9OLG9CQUErQixDQUFDO0FBQzNELFNBQVMsU0FBUyxDQUFDLFFBQVEsRUFBRTtBQUM3QixJQUFJLE9BQU9pTyxRQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUN4RCxRQUFRLElBQUksUUFBUSxDQUFDO0FBQ3JCLFFBQVEsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQzlCLFFBQVEsSUFBSSxPQUFPLENBQUM7QUFDcEIsUUFBUSxJQUFJLHFCQUFxQixHQUFHLFlBQVk7QUFDaEQsWUFBWSxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQ0Ysc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxHQUFHLEVBQUU7QUFDdkksZ0JBQWdCLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDOUIsb0JBQW9CLE9BQU8sR0FBRyxJQUFJTSxXQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDdEQsb0JBQW9CMEIsYUFBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUNoQyxzQkFBb0IsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsWUFBWTtBQUM3SSx3QkFBd0IsT0FBTyxRQUFRLEdBQUcscUJBQXFCLEVBQUUsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDdkYscUJBQXFCLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLGlCQUFpQjtBQUNqQixnQkFBZ0IsSUFBSSxPQUFPLEVBQUU7QUFDN0Isb0JBQW9CLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsaUJBQWlCO0FBQ2pCLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFDaEIsWUFBWSxJQUFJLFNBQVMsRUFBRTtBQUMzQixnQkFBZ0IsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3ZDLGdCQUFnQixRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLGdCQUFnQixTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ2xDLGdCQUFnQixxQkFBcUIsRUFBRSxDQUFDO0FBQ3hDLGFBQWE7QUFDYixTQUFTLENBQUM7QUFDVixRQUFRLHFCQUFxQixFQUFFLENBQUM7QUFDaEMsS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ2dCc0ssV0FBQSxDQUFBLFNBQUEsR0FBRyxTQUFTOzs7O0FDakM3QixNQUFNLENBQUMsY0FBYyxDQUFDQyxRQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDaERBLFFBQUEsQ0FBQSxNQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ3hCLElBQUl2SSxhQUFXLEdBQUc1UixXQUFrQyxDQUFDO0FBQ3JELElBQUk4UCxRQUFNLEdBQUdwUCxJQUF1QixDQUFDO0FBQ3JDLElBQUl3TyxRQUFNLEdBQUd0TyxNQUF1QixDQUFDO0FBQ3JDLElBQUlnUCxzQkFBb0IsR0FBRy9OLG9CQUErQixDQUFDO0FBQzNELFNBQVN1WSxRQUFNLENBQUMsUUFBUSxFQUFFO0FBQzFCLElBQUksT0FBT3RLLFFBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ3hELFFBQVEsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzdCLFFBQVEsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFFBQVEsTUFBTSxDQUFDLFNBQVMsQ0FBQ0Ysc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFVBQVUsS0FBSyxFQUFFO0FBQ3BHLFlBQVksUUFBUSxHQUFHLElBQUksQ0FBQztBQUM1QixZQUFZLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDOUIsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNaLFFBQVFnQyxhQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQ2hDLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxZQUFZO0FBQ3hILFlBQVksSUFBSSxRQUFRLEVBQUU7QUFDMUIsZ0JBQWdCLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDakMsZ0JBQWdCLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQztBQUN0QyxnQkFBZ0IsU0FBUyxHQUFHLElBQUksQ0FBQztBQUNqQyxnQkFBZ0IsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2QyxhQUFhO0FBQ2IsU0FBUyxFQUFFVixRQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6QixLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDYWlMLFFBQUEsQ0FBQSxNQUFBLEdBQUdDLFFBQU07Ozs7QUN4QnZCLE1BQU0sQ0FBQyxjQUFjLENBQUNDLFlBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM1Q0EsWUFBQSxDQUFBLFVBQUEsR0FBRyxLQUFLLEVBQUU7QUFDNUIsSUFBSTdRLFNBQU8sR0FBR3hKLEtBQTZCLENBQUM7QUFDNUMsSUFBSSxRQUFRLEdBQUdVLFFBQW1CLENBQUM7QUFDbkMsSUFBSSxVQUFVLEdBQUdFLFVBQWlDLENBQUM7QUFDbkQsU0FBUyxVQUFVLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRTtBQUN2QyxJQUFJLElBQUksU0FBUyxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsU0FBUyxHQUFHNEksU0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFO0FBQ3JFLElBQUksT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDbkUsQ0FBQztBQUNpQjZRLFlBQUEsQ0FBQSxVQUFBLEdBQUcsVUFBVTs7OztBQ1QvQixNQUFNLENBQUMsY0FBYyxDQUFDQyxNQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDbERBLE1BQUEsQ0FBQSxJQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ3RCLElBQUl4SyxRQUFNLEdBQUc5UCxJQUF1QixDQUFDO0FBQ3JDLElBQUksZUFBZSxHQUFHVSxlQUEwQixDQUFDO0FBQ2pELFNBQVMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUU7QUFDakMsSUFBSSxPQUFPb1AsUUFBTSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RyxDQUFDO0FBQ1d3SyxNQUFBLENBQUEsSUFBQSxHQUFHLElBQUk7Ozs7QUNQbkIsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsZUFBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDQSxlQUFBLENBQUEsYUFBQSxHQUFHLEtBQUssRUFBRTtBQUMvQixJQUFJekssUUFBTSxHQUFHOVAsSUFBdUIsQ0FBQztBQUNyQyxJQUFJNFAsc0JBQW9CLEdBQUdsUCxvQkFBK0IsQ0FBQztBQUMzRCxJQUFJa1IsYUFBVyxHQUFHaFIsV0FBa0MsQ0FBQztBQUNyRCxTQUFTLGFBQWEsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFO0FBQzlDLElBQUksSUFBSSxVQUFVLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBRSxVQUFVLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3BGLElBQUksT0FBT2tQLFFBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ3hELFFBQVEsSUFBSSxNQUFNLEdBQUcsV0FBVyxFQUFFLENBQUM7QUFDbkMsUUFBUSxJQUFJLE1BQU0sR0FBRyxXQUFXLEVBQUUsQ0FBQztBQUNuQyxRQUFRLElBQUksSUFBSSxHQUFHLFVBQVUsT0FBTyxFQUFFO0FBQ3RDLFlBQVksVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyQyxZQUFZLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsQyxTQUFTLENBQUM7QUFDVixRQUFRLElBQUksZ0JBQWdCLEdBQUcsVUFBVSxTQUFTLEVBQUUsVUFBVSxFQUFFO0FBQ2hFLFlBQVksSUFBSSx1QkFBdUIsR0FBR0Ysc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ2pILGdCQUFnQixJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO0FBQy9FLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3pDLG9CQUFvQixRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLGlCQUFpQjtBQUNqQixxQkFBcUI7QUFDckIsb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEUsaUJBQWlCO0FBQ2pCLGFBQWEsRUFBRSxZQUFZO0FBQzNCLGdCQUFnQixTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUMxQyxnQkFBZ0IsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztBQUMvRSxnQkFBZ0IsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3RELGdCQUFnQix1QkFBdUIsS0FBSyxJQUFJLElBQUksdUJBQXVCLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsdUJBQXVCLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDeEksYUFBYSxDQUFDLENBQUM7QUFDZixZQUFZLE9BQU8sdUJBQXVCLENBQUM7QUFDM0MsU0FBUyxDQUFDO0FBQ1YsUUFBUSxNQUFNLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzNELFFBQVFnQyxhQUFXLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNyRixLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDb0IySSxlQUFBLENBQUEsYUFBQSxHQUFHLGFBQWEsQ0FBQztBQUN0QyxTQUFTLFdBQVcsR0FBRztBQUN2QixJQUFJLE9BQU87QUFDWCxRQUFRLE1BQU0sRUFBRSxFQUFFO0FBQ2xCLFFBQVEsUUFBUSxFQUFFLEtBQUs7QUFDdkIsS0FBSyxDQUFDO0FBQ047Ozs7QUN6Q0EsSUFBSTFMLFFBQU0sR0FBRyxDQUFDL08sY0FBSSxJQUFJQSxjQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0RCxJQUFJLElBQUksQ0FBQyxHQUFHLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9ELElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLElBQUksSUFBSTtBQUNSLFFBQVEsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25GLEtBQUs7QUFDTCxJQUFJLE9BQU8sS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFDM0MsWUFBWTtBQUNaLFFBQVEsSUFBSTtBQUNaLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELFNBQVM7QUFDVCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN6QyxLQUFLO0FBQ0wsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUMsQ0FBQztBQUNGLElBQUlnUCxlQUFhLEdBQUcsQ0FBQ2hQLGNBQUksSUFBSUEsY0FBSSxDQUFDLGFBQWEsS0FBSyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUU7QUFDeEUsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNyRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUMsQ0FBQztBQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUMwYSxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDakRBLE9BQUEsQ0FBQSxLQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ3ZCLElBQUk1SSxhQUFXLEdBQUc1UixXQUFrQyxDQUFDO0FBQ3JELElBQUlrUSxXQUFTLEdBQUd4UCxTQUFxQixDQUFDO0FBQ3RDLElBQUksWUFBWSxHQUFHRSxVQUF3QixDQUFDO0FBQzVDLElBQUlrUCxRQUFNLEdBQUdqTyxJQUF1QixDQUFDO0FBQ3JDLFNBQVMsS0FBSyxDQUFDLE9BQU8sRUFBRTtBQUN4QixJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQzdDLElBQUksSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLEdBQUcsRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLFlBQVksRUFBRSxPQUFPLElBQUlxTyxXQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLFlBQVksRUFBRSxZQUFZLEdBQUcsRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxlQUFlLEVBQUUsZUFBZSxHQUFHLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsbUJBQW1CLEdBQUcsRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDcFYsSUFBSSxPQUFPLFVBQVUsYUFBYSxFQUFFO0FBQ3BDLFFBQVEsSUFBSSxVQUFVLENBQUM7QUFDdkIsUUFBUSxJQUFJLGVBQWUsQ0FBQztBQUM1QixRQUFRLElBQUksT0FBTyxDQUFDO0FBQ3BCLFFBQVEsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQy9CLFFBQVEsSUFBSSxXQUFXLEdBQUcsWUFBWTtBQUN0QyxZQUFZLGVBQWUsS0FBSyxJQUFJLElBQUksZUFBZSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUM1RyxZQUFZLGVBQWUsR0FBRyxTQUFTLENBQUM7QUFDeEMsU0FBUyxDQUFDO0FBQ1YsUUFBUSxJQUFJLEtBQUssR0FBRyxZQUFZO0FBQ2hDLFlBQVksV0FBVyxFQUFFLENBQUM7QUFDMUIsWUFBWSxVQUFVLEdBQUcsT0FBTyxHQUFHLFNBQVMsQ0FBQztBQUM3QyxZQUFZLFlBQVksR0FBRyxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQzlDLFNBQVMsQ0FBQztBQUNWLFFBQVEsSUFBSSxtQkFBbUIsR0FBRyxZQUFZO0FBQzlDLFlBQVksSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDO0FBQ2xDLFlBQVksS0FBSyxFQUFFLENBQUM7QUFDcEIsWUFBWSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDM0UsU0FBUyxDQUFDO0FBQ1YsUUFBUSxPQUFPSixRQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUM1RCxZQUFZLFFBQVEsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFlBQVksRUFBRTtBQUM5QyxnQkFBZ0IsV0FBVyxFQUFFLENBQUM7QUFDOUIsYUFBYTtBQUNiLFlBQVksSUFBSSxJQUFJLElBQUksT0FBTyxHQUFHLE9BQU8sS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssQ0FBQyxHQUFHLE9BQU8sR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQ2xHLFlBQVksVUFBVSxDQUFDLEdBQUcsQ0FBQyxZQUFZO0FBQ3ZDLGdCQUFnQixRQUFRLEVBQUUsQ0FBQztBQUMzQixnQkFBZ0IsSUFBSSxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsWUFBWSxFQUFFO0FBQ3BFLG9CQUFvQixlQUFlLEdBQUcsV0FBVyxDQUFDLG1CQUFtQixFQUFFLG1CQUFtQixDQUFDLENBQUM7QUFDNUYsaUJBQWlCO0FBQ2pCLGFBQWEsQ0FBQyxDQUFDO0FBQ2YsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZDLFlBQVksSUFBSSxDQUFDLFVBQVU7QUFDM0IsZ0JBQWdCLFFBQVEsR0FBRyxDQUFDLEVBQUU7QUFDOUIsZ0JBQWdCLFVBQVUsR0FBRyxJQUFJLFlBQVksQ0FBQyxjQUFjLENBQUM7QUFDN0Qsb0JBQW9CLElBQUksRUFBRSxVQUFVLEtBQUssRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ3ZFLG9CQUFvQixLQUFLLEVBQUUsVUFBVSxHQUFHLEVBQUU7QUFDMUMsd0JBQXdCLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDMUMsd0JBQXdCLFdBQVcsRUFBRSxDQUFDO0FBQ3RDLHdCQUF3QixlQUFlLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEYsd0JBQXdCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEMscUJBQXFCO0FBQ3JCLG9CQUFvQixRQUFRLEVBQUUsWUFBWTtBQUMxQyx3QkFBd0IsWUFBWSxHQUFHLElBQUksQ0FBQztBQUM1Qyx3QkFBd0IsV0FBVyxFQUFFLENBQUM7QUFDdEMsd0JBQXdCLGVBQWUsR0FBRyxXQUFXLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzlFLHdCQUF3QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDeEMscUJBQXFCO0FBQ3JCLGlCQUFpQixDQUFDLENBQUM7QUFDbkIsZ0JBQWdCOEIsYUFBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDcEUsYUFBYTtBQUNiLFNBQVMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzFCLEtBQUssQ0FBQztBQUNOLENBQUM7QUFDWTRJLE9BQUEsQ0FBQSxLQUFBLEdBQUcsS0FBSyxDQUFDO0FBQ3RCLFNBQVMsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7QUFDaEMsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7QUFDbEIsSUFBSSxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNsRCxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLEtBQUs7QUFDTCxJQUFJLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtBQUNyQixRQUFRLEtBQUssRUFBRSxDQUFDO0FBQ2hCLFFBQVEsT0FBTztBQUNmLEtBQUs7QUFDTCxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRTtBQUN0QixRQUFRLE9BQU87QUFDZixLQUFLO0FBQ0wsSUFBSSxJQUFJLFlBQVksR0FBRyxJQUFJLFlBQVksQ0FBQyxjQUFjLENBQUM7QUFDdkQsUUFBUSxJQUFJLEVBQUUsWUFBWTtBQUMxQixZQUFZLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUN2QyxZQUFZLEtBQUssRUFBRSxDQUFDO0FBQ3BCLFNBQVM7QUFDVCxLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksT0FBTzVJLGFBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTlDLGVBQWEsQ0FBQyxFQUFFLEVBQUVELFFBQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDNUc7Ozs7QUMxR0EsTUFBTSxDQUFDLGNBQWMsQ0FBQzRMLGFBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMzQ0EsYUFBQSxDQUFBLFdBQUEsR0FBRyxLQUFLLEVBQUU7QUFDN0IsSUFBSSxlQUFlLEdBQUd6YSxlQUEyQixDQUFDO0FBQ2xELElBQUksT0FBTyxHQUFHVSxPQUFrQixDQUFDO0FBQ2pDLFNBQVMsV0FBVyxDQUFDLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUU7QUFDaEUsSUFBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ25CLElBQUksSUFBSSxVQUFVLENBQUM7QUFDbkIsSUFBSSxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDekIsSUFBSSxJQUFJLGtCQUFrQixJQUFJLE9BQU8sa0JBQWtCLEtBQUssUUFBUSxFQUFFO0FBQ3RFLFFBQVEsQ0FBQyxFQUFFLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxFQUFFLFVBQVUsR0FBRyxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsUUFBUSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxFQUFFLFVBQVUsR0FBRyxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsUUFBUSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsa0JBQWtCLENBQUMsUUFBUSxFQUFFLFFBQVEsR0FBRyxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFBRSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxFQUFFO0FBQzVSLEtBQUs7QUFDTCxTQUFTO0FBQ1QsUUFBUSxVQUFVLElBQUksa0JBQWtCLEtBQUssSUFBSSxJQUFJLGtCQUFrQixLQUFLLEtBQUssQ0FBQyxHQUFHLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxDQUFDO0FBQ3BILEtBQUs7QUFDTCxJQUFJLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQztBQUN6QixRQUFRLFNBQVMsRUFBRSxZQUFZLEVBQUUsT0FBTyxJQUFJLGVBQWUsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFO0FBQy9HLFFBQVEsWUFBWSxFQUFFLElBQUk7QUFDMUIsUUFBUSxlQUFlLEVBQUUsS0FBSztBQUM5QixRQUFRLG1CQUFtQixFQUFFLFFBQVE7QUFDckMsS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ2tCK1osYUFBQSxDQUFBLFdBQUEsR0FBRyxXQUFXOzs7O0FDckJqQyxNQUFNLENBQUMsY0FBYyxDQUFDQyxRQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDaERBLFFBQUEsQ0FBQSxNQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ3hCLElBQUksWUFBWSxHQUFHMWEsVUFBNkIsQ0FBQztBQUNqRCxJQUFJLGVBQWUsR0FBR1UsYUFBZ0MsQ0FBQztBQUN2RCxJQUFJLGVBQWUsR0FBR0UsYUFBZ0MsQ0FBQztBQUN2RCxJQUFJa1AsUUFBTSxHQUFHak8sSUFBdUIsQ0FBQztBQUNyQyxJQUFJK04sc0JBQW9CLEdBQUcvTSxvQkFBK0IsQ0FBQztBQUMzRCxTQUFTLE1BQU0sQ0FBQyxTQUFTLEVBQUU7QUFDM0IsSUFBSSxPQUFPaU4sUUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDeEQsUUFBUSxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDN0IsUUFBUSxJQUFJLFdBQVcsQ0FBQztBQUN4QixRQUFRLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztBQUM5QixRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN0QixRQUFRLE1BQU0sQ0FBQyxTQUFTLENBQUNGLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxVQUFVLEtBQUssRUFBRTtBQUNwRyxZQUFZLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDN0IsWUFBWSxJQUFJLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7QUFDakUsZ0JBQWdCLFFBQVEsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksZUFBZSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7QUFDNUcsZ0JBQWdCLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDaEMsZ0JBQWdCLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDcEMsYUFBYTtBQUNiLFNBQVMsRUFBRSxZQUFZO0FBQ3ZCLFlBQVksSUFBSSxRQUFRLEVBQUU7QUFDMUIsZ0JBQWdCLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN0QyxhQUFhO0FBQ2IsaUJBQWlCO0FBQ2pCLGdCQUFnQixVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsR0FBRyxJQUFJLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBQ3RJLGFBQWE7QUFDYixTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ1osS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ2E4SyxRQUFBLENBQUEsTUFBQSxHQUFHLE1BQU07Ozs7QUMvQnZCLE1BQU0sQ0FBQyxjQUFjLENBQUNDLE1BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNsREEsTUFBQSxDQUFBLElBQUEsR0FBRyxLQUFLLEVBQUU7QUFDdEIsSUFBSSxRQUFRLEdBQUczYSxRQUFtQixDQUFDO0FBQ25DLFNBQVMsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNyQixJQUFJLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUFPLEtBQUssSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0UsQ0FBQztBQUNXMmEsTUFBQSxDQUFBLElBQUEsR0FBRyxJQUFJOzs7O0FDTm5CLE1BQU0sQ0FBQyxjQUFjLENBQUNDLFVBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM5Q0EsVUFBQSxDQUFBLFFBQUEsR0FBRyxLQUFLLEVBQUU7QUFDMUIsSUFBSXZMLFlBQVUsR0FBR3JQLFVBQTJCLENBQUM7QUFDN0MsSUFBSThQLFFBQU0sR0FBR3BQLElBQXVCLENBQUM7QUFDckMsSUFBSWtQLHNCQUFvQixHQUFHaFAsb0JBQStCLENBQUM7QUFDM0QsU0FBUyxRQUFRLENBQUMsU0FBUyxFQUFFO0FBQzdCLElBQUksT0FBTyxTQUFTLElBQUksQ0FBQztBQUN6QjtBQUNBLFlBQVl5TyxZQUFVLENBQUMsUUFBUTtBQUMvQixVQUFVUyxRQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUN2RCxZQUFZLElBQUksSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVDLFlBQVksSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFlBQVksTUFBTSxDQUFDLFNBQVMsQ0FBQ0Ysc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFVBQVUsS0FBSyxFQUFFO0FBQ3hHLGdCQUFnQixJQUFJLFVBQVUsR0FBRyxJQUFJLEVBQUUsQ0FBQztBQUN4QyxnQkFBZ0IsSUFBSSxVQUFVLEdBQUcsU0FBUyxFQUFFO0FBQzVDLG9CQUFvQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzdDLGlCQUFpQjtBQUNqQixxQkFBcUI7QUFDckIsb0JBQW9CLElBQUksS0FBSyxHQUFHLFVBQVUsR0FBRyxTQUFTLENBQUM7QUFDdkQsb0JBQW9CLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQyxvQkFBb0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUN4QyxvQkFBb0IsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM5QyxpQkFBaUI7QUFDakIsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUNoQixZQUFZLE9BQU8sWUFBWTtBQUMvQixnQkFBZ0IsSUFBSSxHQUFHLElBQUksQ0FBQztBQUM1QixhQUFhLENBQUM7QUFDZCxTQUFTLENBQUMsQ0FBQztBQUNYLENBQUM7QUFDZWdMLFVBQUEsQ0FBQSxRQUFBLEdBQUcsUUFBUTs7OztBQzdCM0IsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsV0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzdDQSxXQUFBLENBQUEsU0FBQSxHQUFHLEtBQUssRUFBRTtBQUMzQixJQUFJL0ssUUFBTSxHQUFHOVAsSUFBdUIsQ0FBQztBQUNyQyxJQUFJNFAsc0JBQW9CLEdBQUdsUCxvQkFBK0IsQ0FBQztBQUMzRCxJQUFJa1IsYUFBVyxHQUFHaFIsV0FBa0MsQ0FBQztBQUNyRCxJQUFJc08sUUFBTSxHQUFHck4sTUFBdUIsQ0FBQztBQUNyQyxTQUFTLFNBQVMsQ0FBQyxRQUFRLEVBQUU7QUFDN0IsSUFBSSxPQUFPaU8sUUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDeEQsUUFBUSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLGNBQWMsR0FBR0Ysc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFlBQVk7QUFDbkcsWUFBWSxjQUFjLEtBQUssSUFBSSxJQUFJLGNBQWMsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDekcsWUFBWSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFNBQVMsRUFBRVYsUUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hCLFFBQVEwQyxhQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNsRSxRQUFRLE1BQU0sQ0FBQyxTQUFTLENBQUNoQyxzQkFBb0IsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsVUFBVSxLQUFLLEVBQUUsRUFBRSxPQUFPLE1BQU0sSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkosS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ2dCaUwsV0FBQSxDQUFBLFNBQUEsR0FBRyxTQUFTOzs7O0FDakI3QixNQUFNLENBQUMsY0FBYyxDQUFDQyxXQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDN0NBLFdBQUEsQ0FBQSxTQUFBLEdBQUcsS0FBSyxFQUFFO0FBQzNCLElBQUloTCxRQUFNLEdBQUc5UCxJQUF1QixDQUFDO0FBQ3JDLElBQUk0UCxzQkFBb0IsR0FBR2xQLG9CQUErQixDQUFDO0FBQzNELFNBQVMsU0FBUyxDQUFDLFNBQVMsRUFBRTtBQUM5QixJQUFJLE9BQU9vUCxRQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUN4RCxRQUFRLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztBQUMzQixRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN0QixRQUFRLE1BQU0sQ0FBQyxTQUFTLENBQUNGLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxVQUFVLEtBQUssRUFBRSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEtBQUssTUFBTSxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlMLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNnQmtMLFdBQUEsQ0FBQSxTQUFBLEdBQUcsU0FBUzs7OztBQ1g3QixNQUFNLENBQUMsY0FBYyxDQUFDQyxXQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDN0NBLFdBQUEsQ0FBQSxTQUFBLEdBQUcsS0FBSyxFQUFFO0FBQzNCLElBQUksUUFBUSxHQUFHL2EsUUFBK0IsQ0FBQztBQUMvQyxJQUFJMlMsUUFBTSxHQUFHalMsSUFBdUIsQ0FBQztBQUNyQyxJQUFJb1AsUUFBTSxHQUFHbFAsSUFBdUIsQ0FBQztBQUNyQyxTQUFTLFNBQVMsR0FBRztBQUNyQixJQUFJLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNwQixJQUFJLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ2xELFFBQVEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQyxLQUFLO0FBQ0wsSUFBSSxJQUFJLFNBQVMsR0FBRytSLFFBQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEQsSUFBSSxPQUFPN0MsUUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDeEQsUUFBUSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3pILEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNnQmlMLFdBQUEsQ0FBQSxTQUFBLEdBQUcsU0FBUzs7Ozs7O0FDZjdCLE1BQU0sQ0FBQyxjQUFjLENBQUNDLFdBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM3Q0EsV0FBQSxDQUFBLFNBQUEsR0FBRyxLQUFLLEVBQUU7QUFDM0IsSUFBSXBKLGFBQVcsR0FBRzVSLFdBQWtDLENBQUM7QUFDckQsSUFBSThQLFFBQU0sR0FBR3BQLElBQXVCLENBQUM7QUFDckMsSUFBSWtQLHNCQUFvQixHQUFHaFAsb0JBQStCLENBQUM7QUFDM0QsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLGNBQWMsRUFBRTtBQUM1QyxJQUFJLE9BQU9rUCxRQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUN4RCxRQUFRLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQztBQUNuQyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN0QixRQUFRLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztBQUMvQixRQUFRLElBQUksYUFBYSxHQUFHLFlBQVksRUFBRSxPQUFPLFVBQVUsSUFBSSxDQUFDLGVBQWUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVHLFFBQVEsTUFBTSxDQUFDLFNBQVMsQ0FBQ0Ysc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFVBQVUsS0FBSyxFQUFFO0FBQ3BHLFlBQVksZUFBZSxLQUFLLElBQUksSUFBSSxlQUFlLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzVHLFlBQVksSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLFlBQVksSUFBSSxVQUFVLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFDckMsWUFBWWdDLGFBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxlQUFlLEdBQUdoQyxzQkFBb0IsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsVUFBVSxVQUFVLEVBQUUsRUFBRSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxZQUFZO0FBQy9TLGdCQUFnQixlQUFlLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLGdCQUFnQixhQUFhLEVBQUUsQ0FBQztBQUNoQyxhQUFhLENBQUMsRUFBRSxDQUFDO0FBQ2pCLFNBQVMsRUFBRSxZQUFZO0FBQ3ZCLFlBQVksVUFBVSxHQUFHLElBQUksQ0FBQztBQUM5QixZQUFZLGFBQWEsRUFBRSxDQUFDO0FBQzVCLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDWixLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDZ0JvTCxXQUFBLENBQUEsU0FBQSxHQUFHLFNBQVM7O0FDekI3QixNQUFNLENBQUMsY0FBYyxDQUFDQyxXQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDN0NBLFdBQUEsQ0FBQSxTQUFBLEdBQUcsS0FBSyxFQUFFO0FBQzNCLElBQUlELGFBQVcsR0FBR2hiLFdBQXNCLENBQUM7QUFDekMsSUFBSXFQLFlBQVUsR0FBRzNPLFVBQTJCLENBQUM7QUFDN0MsU0FBUyxTQUFTLEdBQUc7QUFDckIsSUFBSSxPQUFPc2EsYUFBVyxDQUFDLFNBQVMsQ0FBQzNMLFlBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBQ2dCNEwsV0FBQSxDQUFBLFNBQUEsR0FBRyxTQUFTOzs7O0FDUDdCLE1BQU0sQ0FBQyxjQUFjLENBQUNDLGFBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMzQ0EsYUFBQSxDQUFBLFdBQUEsR0FBRyxLQUFLLEVBQUU7QUFDN0IsSUFBSUYsYUFBVyxHQUFHaGIsV0FBc0IsQ0FBQztBQUN6QyxJQUFJeU8sY0FBWSxHQUFHL04sWUFBNkIsQ0FBQztBQUNqRCxTQUFTLFdBQVcsQ0FBQyxlQUFlLEVBQUUsY0FBYyxFQUFFO0FBQ3RELElBQUksT0FBTytOLGNBQVksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEdBQUd1TSxhQUFXLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxPQUFPLGVBQWUsQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDLEdBQUdBLGFBQVcsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLE9BQU8sZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JNLENBQUM7QUFDa0JFLGFBQUEsQ0FBQSxXQUFBLEdBQUcsV0FBVzs7OztBQ1BqQyxNQUFNLENBQUMsY0FBYyxDQUFDQyxZQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDNUNBLFlBQUEsQ0FBQSxVQUFBLEdBQUcsS0FBSyxFQUFFO0FBQzVCLElBQUksV0FBVyxHQUFHbmIsV0FBc0IsQ0FBQztBQUN6QyxJQUFJOFAsUUFBTSxHQUFHcFAsSUFBdUIsQ0FBQztBQUNyQyxTQUFTLFVBQVUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFO0FBQ3ZDLElBQUksT0FBT29QLFFBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ3hELFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLFFBQVEsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUFPLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxRQUFRLENBQUMsS0FBSyxHQUFHLFVBQVUsR0FBRyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzNNLFFBQVEsT0FBTyxZQUFZO0FBQzNCLFlBQVksS0FBSyxHQUFHLElBQUksQ0FBQztBQUN6QixTQUFTLENBQUM7QUFDVixLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDaUJxTCxZQUFBLENBQUEsVUFBQSxHQUFHLFVBQVU7Ozs7QUNiL0IsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsV0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzdDQSxXQUFBLENBQUEsU0FBQSxHQUFHLEtBQUssRUFBRTtBQUMzQixJQUFJdEwsUUFBTSxHQUFHOVAsSUFBdUIsQ0FBQztBQUNyQyxJQUFJNFAsc0JBQW9CLEdBQUdsUCxvQkFBK0IsQ0FBQztBQUMzRCxJQUFJa1IsYUFBVyxHQUFHaFIsV0FBa0MsQ0FBQztBQUNyRCxJQUFJc08sUUFBTSxHQUFHck4sTUFBdUIsQ0FBQztBQUNyQyxTQUFTLFNBQVMsQ0FBQyxRQUFRLEVBQUU7QUFDN0IsSUFBSSxPQUFPaU8sUUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDeEQsUUFBUThCLGFBQVcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDaEMsc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxPQUFPLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUVWLFFBQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pLLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDM0QsS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ2dCa00sV0FBQSxDQUFBLFNBQUEsR0FBRyxTQUFTOzs7O0FDWjdCLE1BQU0sQ0FBQyxjQUFjLENBQUNDLFdBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM3Q0EsV0FBQSxDQUFBLFNBQUEsR0FBRyxLQUFLLEVBQUU7QUFDM0IsSUFBSXZMLFFBQU0sR0FBRzlQLElBQXVCLENBQUM7QUFDckMsSUFBSTRQLHNCQUFvQixHQUFHbFAsb0JBQStCLENBQUM7QUFDM0QsU0FBUyxTQUFTLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRTtBQUN6QyxJQUFJLElBQUksU0FBUyxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsU0FBUyxHQUFHLEtBQUssQ0FBQyxFQUFFO0FBQ3BELElBQUksT0FBT29QLFFBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ3hELFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLFFBQVEsTUFBTSxDQUFDLFNBQVMsQ0FBQ0Ysc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFVBQVUsS0FBSyxFQUFFO0FBQ3BHLFlBQVksSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELFlBQVksQ0FBQyxNQUFNLElBQUksU0FBUyxLQUFLLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUQsWUFBWSxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDN0MsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNaLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNnQnlMLFdBQUEsQ0FBQSxTQUFBLEdBQUcsU0FBUzs7OztBQ2Y3QixNQUFNLENBQUMsY0FBYyxDQUFDQyxLQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDbkRBLEtBQUEsQ0FBQSxHQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ3JCLElBQUksWUFBWSxHQUFHdGIsWUFBNkIsQ0FBQztBQUNqRCxJQUFJOFAsUUFBTSxHQUFHcFAsSUFBdUIsQ0FBQztBQUNyQyxJQUFJa1Asc0JBQW9CLEdBQUdoUCxvQkFBK0IsQ0FBQztBQUMzRCxJQUFJeU8sWUFBVSxHQUFHeE4sVUFBMkIsQ0FBQztBQUM3QyxTQUFTLEdBQUcsQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtBQUM5QyxJQUFJLElBQUksV0FBVyxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxJQUFJLFFBQVE7QUFDbEY7QUFDQSxZQUFZLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7QUFDdEUsVUFBVSxjQUFjLENBQUM7QUFDekIsSUFBSSxPQUFPLFdBQVc7QUFDdEIsVUFBVWlPLFFBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ3ZELFlBQVksSUFBSSxFQUFFLENBQUM7QUFDbkIsWUFBWSxDQUFDLEVBQUUsR0FBRyxXQUFXLENBQUMsU0FBUyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNuRyxZQUFZLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztBQUMvQixZQUFZLE1BQU0sQ0FBQyxTQUFTLENBQUNGLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxVQUFVLEtBQUssRUFBRTtBQUN4RyxnQkFBZ0IsSUFBSSxFQUFFLENBQUM7QUFDdkIsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLFdBQVcsQ0FBQyxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN6RyxnQkFBZ0IsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2QyxhQUFhLEVBQUUsWUFBWTtBQUMzQixnQkFBZ0IsSUFBSSxFQUFFLENBQUM7QUFDdkIsZ0JBQWdCLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDaEMsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLFdBQVcsQ0FBQyxRQUFRLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3RHLGdCQUFnQixVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDdEMsYUFBYSxFQUFFLFVBQVUsR0FBRyxFQUFFO0FBQzlCLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztBQUN2QixnQkFBZ0IsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUNoQyxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsV0FBVyxDQUFDLEtBQUssTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hHLGdCQUFnQixVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLGFBQWEsRUFBRSxZQUFZO0FBQzNCLGdCQUFnQixJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDM0IsZ0JBQWdCLElBQUksT0FBTyxFQUFFO0FBQzdCLG9CQUFvQixDQUFDLEVBQUUsR0FBRyxXQUFXLENBQUMsV0FBVyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM3RyxpQkFBaUI7QUFDakIsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLFdBQVcsQ0FBQyxRQUFRLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3RHLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFDaEIsU0FBUyxDQUFDO0FBQ1Y7QUFDQSxZQUFZUCxZQUFVLENBQUMsUUFBUSxDQUFDO0FBQ2hDLENBQUM7QUFDVWlNLEtBQUEsQ0FBQSxHQUFBLEdBQUcsR0FBRzs7OztBQ3pDakIsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsVUFBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzlDQSxVQUFBLENBQUEsUUFBQSxHQUFHLEtBQUssRUFBRTtBQUMxQixJQUFJekwsUUFBTSxHQUFHOVAsSUFBdUIsQ0FBQztBQUNyQyxJQUFJNFAsc0JBQW9CLEdBQUdsUCxvQkFBK0IsQ0FBQztBQUMzRCxJQUFJa1IsYUFBVyxHQUFHaFIsV0FBa0MsQ0FBQztBQUNyRCxTQUFTLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUU7QUFDNUMsSUFBSSxPQUFPa1AsUUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDeEQsUUFBUSxJQUFJLEVBQUUsR0FBRyxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxLQUFLLENBQUMsR0FBRyxNQUFNLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sR0FBRyxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLEdBQUcsRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDbkwsUUFBUSxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDN0IsUUFBUSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDN0IsUUFBUSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDN0IsUUFBUSxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDL0IsUUFBUSxJQUFJLGFBQWEsR0FBRyxZQUFZO0FBQ3hDLFlBQVksU0FBUyxLQUFLLElBQUksSUFBSSxTQUFTLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzFGLFlBQVksU0FBUyxHQUFHLElBQUksQ0FBQztBQUM3QixZQUFZLElBQUksUUFBUSxFQUFFO0FBQzFCLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztBQUN2QixnQkFBZ0IsVUFBVSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNwRCxhQUFhO0FBQ2IsU0FBUyxDQUFDO0FBQ1YsUUFBUSxJQUFJLGlCQUFpQixHQUFHLFlBQVk7QUFDNUMsWUFBWSxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFlBQVksVUFBVSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNoRCxTQUFTLENBQUM7QUFDVixRQUFRLElBQUksYUFBYSxHQUFHLFVBQVUsS0FBSyxFQUFFO0FBQzdDLFlBQVksUUFBUSxTQUFTLEdBQUc4QixhQUFXLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDaEMsc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLEVBQUU7QUFDdkwsU0FBUyxDQUFDO0FBQ1YsUUFBUSxJQUFJLElBQUksR0FBRyxZQUFZO0FBQy9CLFlBQVksSUFBSSxRQUFRLEVBQUU7QUFDMUIsZ0JBQWdCLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDakMsZ0JBQWdCLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQztBQUN0QyxnQkFBZ0IsU0FBUyxHQUFHLElBQUksQ0FBQztBQUNqQyxnQkFBZ0IsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2QyxnQkFBZ0IsQ0FBQyxVQUFVLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BELGFBQWE7QUFDYixTQUFTLENBQUM7QUFDVixRQUFRLE1BQU0sQ0FBQyxTQUFTLENBQUNBLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxVQUFVLEtBQUssRUFBRTtBQUNwRyxZQUFZLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDNUIsWUFBWSxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQzlCLFlBQVksRUFBRSxTQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssT0FBTyxHQUFHLElBQUksRUFBRSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzNGLFNBQVMsRUFBRSxZQUFZO0FBQ3ZCLFlBQVksVUFBVSxHQUFHLElBQUksQ0FBQztBQUM5QixZQUFZLEVBQUUsUUFBUSxJQUFJLFFBQVEsSUFBSSxTQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQy9GLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDWixLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDZTJMLFVBQUEsQ0FBQSxRQUFBLEdBQUcsUUFBUTs7OztBQzlDM0IsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsY0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzFDQSxjQUFBLENBQUEsWUFBQSxHQUFHLEtBQUssRUFBRTtBQUM5QixJQUFJaFMsU0FBTyxHQUFHeEosS0FBNkIsQ0FBQztBQUM1QyxJQUFJLFVBQVUsR0FBR1UsVUFBcUIsQ0FBQztBQUN2QyxJQUFJLE9BQU8sR0FBR0UsT0FBOEIsQ0FBQztBQUM3QyxTQUFTLFlBQVksQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRTtBQUNuRCxJQUFJLElBQUksU0FBUyxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsU0FBUyxHQUFHNEksU0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFO0FBQ3JFLElBQUksSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDdkQsSUFBSSxPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLE9BQU8sU0FBUyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBQ21CZ1MsY0FBQSxDQUFBLFlBQUEsR0FBRyxZQUFZOzs7O0FDVm5DLE1BQU0sQ0FBQyxjQUFjLENBQUNDLGNBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM5REEsY0FBQSxDQUFBLFlBQW9CLEdBQUdBLGNBQUEsQ0FBQSxZQUFvQixHQUFHLEtBQUssRUFBRTtBQUNyRCxJQUFJalMsU0FBTyxHQUFHeEosS0FBNkIsQ0FBQztBQUM1QyxJQUFJOFAsUUFBTSxHQUFHcFAsSUFBdUIsQ0FBQztBQUNyQyxJQUFJa1Asc0JBQW9CLEdBQUdoUCxvQkFBK0IsQ0FBQztBQUMzRCxTQUFTLFlBQVksQ0FBQyxTQUFTLEVBQUU7QUFDakMsSUFBSSxJQUFJLFNBQVMsS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFLFNBQVMsR0FBRzRJLFNBQU8sQ0FBQyxjQUFjLENBQUMsRUFBRTtBQUNyRSxJQUFJLE9BQU9zRyxRQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUN4RCxRQUFRLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQyxRQUFRLE1BQU0sQ0FBQyxTQUFTLENBQUNGLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxVQUFVLEtBQUssRUFBRTtBQUNwRyxZQUFZLElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN0QyxZQUFZLElBQUksUUFBUSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDdEMsWUFBWSxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLFlBQVksVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUMvRCxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ1osS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ21CNkwsY0FBQSxDQUFBLFlBQUEsR0FBRyxhQUFhO0FBQ3BDLElBQUksWUFBWSxJQUFJLFlBQVk7QUFDaEMsSUFBSSxTQUFTLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFO0FBQzNDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUNqQyxLQUFLO0FBQ0wsSUFBSSxPQUFPLFlBQVksQ0FBQztBQUN4QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2VBLGNBQUEsQ0FBQSxZQUFBLEdBQUcsWUFBWTs7OztBQ3pCbkMsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsYUFBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzNDQSxhQUFBLENBQUEsV0FBQSxHQUFHLEtBQUssRUFBRTtBQUM3QixJQUFJbFMsU0FBTyxHQUFHeEosS0FBNkIsQ0FBQztBQUM1QyxJQUFJLFFBQVEsR0FBR1UsTUFBeUIsQ0FBQztBQUN6QyxJQUFJLFNBQVMsR0FBR0UsT0FBb0IsQ0FBQztBQUNyQyxTQUFTLFdBQVcsQ0FBQyxHQUFHLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRTtBQUNyRCxJQUFJLElBQUksS0FBSyxDQUFDO0FBQ2QsSUFBSSxJQUFJLElBQUksQ0FBQztBQUNiLElBQUksSUFBSSxLQUFLLENBQUM7QUFDZCxJQUFJLFNBQVMsR0FBRyxTQUFTLEtBQUssSUFBSSxJQUFJLFNBQVMsS0FBSyxLQUFLLENBQUMsR0FBRyxTQUFTLEdBQUc0SSxTQUFPLENBQUMsS0FBSyxDQUFDO0FBQ3ZGLElBQUksSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ25DLFFBQVEsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNwQixLQUFLO0FBQ0wsU0FBUyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtBQUN0QyxRQUFRLElBQUksR0FBRyxHQUFHLENBQUM7QUFDbkIsS0FBSztBQUNMLElBQUksSUFBSSxjQUFjLEVBQUU7QUFDeEIsUUFBUSxLQUFLLEdBQUcsWUFBWSxFQUFFLE9BQU8sY0FBYyxDQUFDLEVBQUUsQ0FBQztBQUN2RCxLQUFLO0FBQ0wsU0FBUztBQUNULFFBQVEsTUFBTSxJQUFJLFNBQVMsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0FBQ25FLEtBQUs7QUFDTCxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO0FBQ3ZDLFFBQVEsTUFBTSxJQUFJLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBQ3BELEtBQUs7QUFDTCxJQUFJLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQztBQUM3QixRQUFRLEtBQUssRUFBRSxLQUFLO0FBQ3BCLFFBQVEsSUFBSSxFQUFFLElBQUk7QUFDbEIsUUFBUSxTQUFTLEVBQUUsU0FBUztBQUM1QixRQUFRLElBQUksRUFBRSxLQUFLO0FBQ25CLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNrQmtTLGFBQUEsQ0FBQSxXQUFBLEdBQUcsV0FBVzs7OztBQ2hDakMsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsV0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzdDQSxXQUFBLENBQUEsU0FBQSxHQUFHLEtBQUssRUFBRTtBQUMzQixJQUFJLHVCQUF1QixHQUFHM2IscUJBQTZDLENBQUM7QUFDNUUsSUFBSSxLQUFLLEdBQUdVLEtBQWdCLENBQUM7QUFDN0IsU0FBU2tiLFdBQVMsQ0FBQyxpQkFBaUIsRUFBRTtBQUN0QyxJQUFJLElBQUksaUJBQWlCLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBRSxpQkFBaUIsR0FBRyx1QkFBdUIsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO0FBQzVHLElBQUksT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDMUcsQ0FBQztBQUNnQkQsV0FBQSxDQUFBLFNBQUEsR0FBR0MsV0FBUzs7OztBQ1I3QixNQUFNLENBQUMsY0FBYyxDQUFDQyxRQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDaERBLFFBQUEsQ0FBQSxNQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ3hCLElBQUkzTCxXQUFTLEdBQUdsUSxTQUFxQixDQUFDO0FBQ3RDLElBQUk4UCxRQUFNLEdBQUdwUCxJQUF1QixDQUFDO0FBQ3JDLElBQUlrUCxzQkFBb0IsR0FBR2hQLG9CQUErQixDQUFDO0FBQzNELElBQUlzTyxRQUFNLEdBQUdyTixNQUF1QixDQUFDO0FBQ3JDLElBQUkrUCxhQUFXLEdBQUcvTyxXQUFrQyxDQUFDO0FBQ3JELFNBQVNpWixRQUFNLENBQUMsZ0JBQWdCLEVBQUU7QUFDbEMsSUFBSSxPQUFPaE0sUUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDeEQsUUFBUSxJQUFJLGFBQWEsR0FBRyxJQUFJSSxXQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDcEQsUUFBUSxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0FBQ3RELFFBQVEsSUFBSSxZQUFZLEdBQUcsVUFBVSxHQUFHLEVBQUU7QUFDMUMsWUFBWSxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLFlBQVksVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQyxTQUFTLENBQUM7QUFDVixRQUFRLE1BQU0sQ0FBQyxTQUFTLENBQUNOLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxVQUFVLEtBQUssRUFBRSxFQUFFLE9BQU8sYUFBYSxLQUFLLElBQUksSUFBSSxhQUFhLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsWUFBWTtBQUNyTixZQUFZLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNyQyxZQUFZLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFRZ0MsYUFBVyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQ2hDLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxZQUFZO0FBQ2hJLFlBQVksYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3JDLFlBQVksVUFBVSxDQUFDLElBQUksRUFBRSxhQUFhLEdBQUcsSUFBSU0sV0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7QUFDdkUsU0FBUyxFQUFFaEIsUUFBTSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLFFBQVEsT0FBTyxZQUFZO0FBQzNCLFlBQVksYUFBYSxLQUFLLElBQUksSUFBSSxhQUFhLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3RHLFlBQVksYUFBYSxHQUFHLElBQUksQ0FBQztBQUNqQyxTQUFTLENBQUM7QUFDVixLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDYTJNLFFBQUEsQ0FBQSxNQUFBLEdBQUdDLFFBQU07Ozs7QUM3QnZCLElBQUlsTixVQUFRLEdBQUcsQ0FBQzlPLGNBQUksSUFBSUEsY0FBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsRUFBRTtBQUN0RCxJQUFJLElBQUksQ0FBQyxHQUFHLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEYsSUFBSSxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLE9BQU87QUFDbEQsUUFBUSxJQUFJLEVBQUUsWUFBWTtBQUMxQixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUMvQyxZQUFZLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3BELFNBQVM7QUFDVCxLQUFLLENBQUM7QUFDTixJQUFJLE1BQU0sSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLHlCQUF5QixHQUFHLGlDQUFpQyxDQUFDLENBQUM7QUFDM0YsQ0FBQyxDQUFDO0FBQ0YsTUFBTSxDQUFDLGNBQWMsQ0FBQ2ljLGFBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMzQ0EsYUFBQSxDQUFBLFdBQUEsR0FBRyxLQUFLLEVBQUU7QUFDN0IsSUFBSTdMLFdBQVMsR0FBR2xRLFNBQXFCLENBQUM7QUFDdEMsSUFBSThQLFFBQU0sR0FBR3BQLElBQXVCLENBQUM7QUFDckMsSUFBSWtQLHNCQUFvQixHQUFHaFAsb0JBQStCLENBQUM7QUFDM0QsU0FBUyxXQUFXLENBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFFO0FBQ25ELElBQUksSUFBSSxnQkFBZ0IsS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQzlELElBQUksSUFBSSxVQUFVLEdBQUcsZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixHQUFHLFVBQVUsQ0FBQztBQUMxRSxJQUFJLE9BQU9rUCxRQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUN4RCxRQUFRLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSUksV0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFFaEQsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdEIsUUFBUSxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELFFBQVEsTUFBTSxDQUFDLFNBQVMsQ0FBQ04sc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFVBQVUsS0FBSyxFQUFFO0FBQ3BHLFlBQVksSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3hCLFlBQVksSUFBSTtBQUNoQixnQkFBZ0IsS0FBSyxJQUFJLFNBQVMsR0FBR2hCLFVBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFO0FBQzNJLG9CQUFvQixJQUFJLFFBQVEsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO0FBQ3JELG9CQUFvQixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pDLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsWUFBWSxPQUFPLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO0FBQ3JELG9CQUFvQjtBQUNwQixnQkFBZ0IsSUFBSTtBQUNwQixvQkFBb0IsSUFBSSxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN4RyxpQkFBaUI7QUFDakIsd0JBQXdCLEVBQUUsSUFBSSxHQUFHLEVBQUUsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDckQsYUFBYTtBQUNiLFlBQVksSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDM0MsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsS0FBSyxDQUFDLEVBQUU7QUFDaEQsZ0JBQWdCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMzQyxhQUFhO0FBQ2IsWUFBWSxJQUFJLEVBQUUsS0FBSyxHQUFHLFVBQVUsS0FBSyxDQUFDLEVBQUU7QUFDNUMsZ0JBQWdCLElBQUksUUFBUSxHQUFHLElBQUlzQixXQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDdkQsZ0JBQWdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdkMsZ0JBQWdCLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDekQsYUFBYTtBQUNiLFNBQVMsRUFBRSxZQUFZO0FBQ3ZCLFlBQVksT0FBTyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUN2QyxnQkFBZ0IsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzNDLGFBQWE7QUFDYixZQUFZLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsQyxTQUFTLEVBQUUsVUFBVSxHQUFHLEVBQUU7QUFDMUIsWUFBWSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZDLGdCQUFnQixPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLGFBQWE7QUFDYixZQUFZLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEMsU0FBUyxFQUFFLFlBQVk7QUFFdkIsWUFBWSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDWixLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDa0I2TCxhQUFBLENBQUEsV0FBQSxHQUFHLFdBQVc7Ozs7QUNoRWpDLE1BQU0sQ0FBQyxjQUFjLENBQUNDLFlBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM1Q0EsWUFBQSxDQUFBLFVBQUEsR0FBRyxLQUFLLEVBQUU7QUFDNUIsSUFBSTlMLFdBQVMsR0FBR2xRLFNBQXFCLENBQUM7QUFDdEMsSUFBSSxPQUFPLEdBQUdVLEtBQTZCLENBQUM7QUFDNUMsSUFBSXFPLGdCQUFjLEdBQUduTyxjQUEwQixDQUFDO0FBQ2hELElBQUlrUCxRQUFNLEdBQUdqTyxJQUF1QixDQUFDO0FBQ3JDLElBQUkrTixzQkFBb0IsR0FBRy9NLG9CQUErQixDQUFDO0FBQzNELElBQUk4TCxhQUFXLEdBQUc3TCxXQUE0QixDQUFDO0FBQy9DLElBQUk2UCxRQUFNLEdBQUdwUCxJQUF1QixDQUFDO0FBQ3JDLElBQUksaUJBQWlCLEdBQUdFLGlCQUFrQyxDQUFDO0FBQzNELFNBQVMsVUFBVSxDQUFDLGNBQWMsRUFBRTtBQUNwQyxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNmLElBQUksSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLElBQUksS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDbEQsUUFBUSxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQyxLQUFLO0FBQ0wsSUFBSSxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsR0FBR2tQLFFBQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUNsSCxJQUFJLElBQUksc0JBQXNCLEdBQUcsQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMzRixJQUFJLElBQUksYUFBYSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUM7QUFDakQsSUFBSSxPQUFPN0MsUUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDeEQsUUFBUSxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDL0IsUUFBUSxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7QUFDbkMsUUFBUSxJQUFJLFdBQVcsR0FBRyxVQUFVLE1BQU0sRUFBRTtBQUM1QyxZQUFZLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDM0QsWUFBWSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDOUIsWUFBWSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDL0IsWUFBWW5CLGFBQVcsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3pELFlBQVksY0FBYyxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQzVDLFNBQVMsQ0FBQztBQUNWLFFBQVEsSUFBSSxXQUFXLEdBQUcsWUFBWTtBQUN0QyxZQUFZLElBQUksYUFBYSxFQUFFO0FBQy9CLGdCQUFnQixJQUFJLElBQUksR0FBRyxJQUFJSSxnQkFBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzdELGdCQUFnQixVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLGdCQUFnQixJQUFJLFFBQVEsR0FBRyxJQUFJbUIsV0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3ZELGdCQUFnQixJQUFJLFFBQVEsR0FBRztBQUMvQixvQkFBb0IsTUFBTSxFQUFFLFFBQVE7QUFDcEMsb0JBQW9CLElBQUksRUFBRSxJQUFJO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsQ0FBQztBQUMzQixpQkFBaUIsQ0FBQztBQUNsQixnQkFBZ0IsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsaUJBQWlCLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE9BQU8sV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUNsSSxhQUFhO0FBQ2IsU0FBUyxDQUFDO0FBQ1YsUUFBUSxJQUFJLHNCQUFzQixLQUFLLElBQUksSUFBSSxzQkFBc0IsSUFBSSxDQUFDLEVBQUU7QUFDNUUsWUFBWSxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEgsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDbEMsU0FBUztBQUNULFFBQVEsV0FBVyxFQUFFLENBQUM7QUFDdEIsUUFBUSxJQUFJLElBQUksR0FBRyxVQUFVLEVBQUUsRUFBRSxFQUFFLE9BQU8sYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0UsUUFBUSxJQUFJLFNBQVMsR0FBRyxVQUFVLEVBQUUsRUFBRTtBQUN0QyxZQUFZLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRTtBQUMvQixnQkFBZ0IsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztBQUN2QyxnQkFBZ0IsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEMsYUFBYSxDQUFDLENBQUM7QUFDZixZQUFZLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMzQixZQUFZLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNyQyxTQUFTLENBQUM7QUFDVixRQUFRLE1BQU0sQ0FBQyxTQUFTLENBQUNOLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxVQUFVLEtBQUssRUFBRTtBQUNwRyxZQUFZLElBQUksQ0FBQyxVQUFVLE1BQU0sRUFBRTtBQUNuQyxnQkFBZ0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUMsZ0JBQWdCLGFBQWEsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RFLGFBQWEsQ0FBQyxDQUFDO0FBQ2YsU0FBUyxFQUFFLFlBQVksRUFBRSxPQUFPLFNBQVMsQ0FBQyxVQUFVLFFBQVEsRUFBRSxFQUFFLE9BQU8sUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxVQUFVLEdBQUcsRUFBRSxFQUFFLE9BQU8sU0FBUyxDQUFDLFVBQVUsUUFBUSxFQUFFLEVBQUUsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0wsUUFBUSxPQUFPLFlBQVk7QUFDM0IsWUFBWSxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLFNBQVMsQ0FBQztBQUNWLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNpQm9NLFlBQUEsQ0FBQSxVQUFBLEdBQUcsVUFBVTs7OztBQ3ZFL0IsSUFBSSxRQUFRLEdBQUcsQ0FBQ2xjLGNBQUksSUFBSUEsY0FBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsRUFBRTtBQUN0RCxJQUFJLElBQUksQ0FBQyxHQUFHLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEYsSUFBSSxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLE9BQU87QUFDbEQsUUFBUSxJQUFJLEVBQUUsWUFBWTtBQUMxQixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUMvQyxZQUFZLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3BELFNBQVM7QUFDVCxLQUFLLENBQUM7QUFDTixJQUFJLE1BQU0sSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLHlCQUF5QixHQUFHLGlDQUFpQyxDQUFDLENBQUM7QUFDM0YsQ0FBQyxDQUFDO0FBQ0YsTUFBTSxDQUFDLGNBQWMsQ0FBQ21jLGNBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMxQ0EsY0FBQSxDQUFBLFlBQUEsR0FBRyxLQUFLLEVBQUU7QUFDOUIsSUFBSS9MLFdBQVMsR0FBR2xRLFNBQXFCLENBQUM7QUFDdEMsSUFBSSxjQUFjLEdBQUdVLGNBQTBCLENBQUM7QUFDaEQsSUFBSW9QLFFBQU0sR0FBR2xQLElBQXVCLENBQUM7QUFDckMsSUFBSWdSLGFBQVcsR0FBRy9QLFdBQWtDLENBQUM7QUFDckQsSUFBSStOLHNCQUFvQixHQUFHL00sb0JBQStCLENBQUM7QUFDM0QsSUFBSXFNLFFBQU0sR0FBR3BNLE1BQXVCLENBQUM7QUFDckMsSUFBSSxXQUFXLEdBQUdTLFdBQTRCLENBQUM7QUFDL0MsU0FBUyxZQUFZLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRTtBQUNqRCxJQUFJLE9BQU91TSxRQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUN4RCxRQUFRLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUN6QixRQUFRLElBQUksV0FBVyxHQUFHLFVBQVUsR0FBRyxFQUFFO0FBQ3pDLFlBQVksT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRTtBQUN2QyxnQkFBZ0IsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQyxhQUFhO0FBQ2IsWUFBWSxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLFNBQVMsQ0FBQztBQUNWLFFBQVE4QixhQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQ2hDLHNCQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxVQUFVLFNBQVMsRUFBRTtBQUNqSSxZQUFZLElBQUksTUFBTSxHQUFHLElBQUlNLFdBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNqRCxZQUFZLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakMsWUFBWSxJQUFJLG1CQUFtQixHQUFHLElBQUksY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3hFLFlBQVksSUFBSSxXQUFXLEdBQUcsWUFBWTtBQUMxQyxnQkFBZ0IsV0FBVyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkQsZ0JBQWdCLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsQyxnQkFBZ0IsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbEQsYUFBYSxDQUFDO0FBQ2QsWUFBWSxJQUFJLGVBQWUsQ0FBQztBQUNoQyxZQUFZLElBQUk7QUFDaEIsZ0JBQWdCLGVBQWUsR0FBRzBCLGFBQVcsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDcEYsYUFBYTtBQUNiLFlBQVksT0FBTyxHQUFHLEVBQUU7QUFDeEIsZ0JBQWdCLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxnQkFBZ0IsT0FBTztBQUN2QixhQUFhO0FBQ2IsWUFBWSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELFlBQVksbUJBQW1CLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUNoQyxzQkFBb0IsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFVixRQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqSyxTQUFTLEVBQUVBLFFBQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsTUFBTSxDQUFDLFNBQVMsQ0FBQ1Usc0JBQW9CLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFVBQVUsS0FBSyxFQUFFO0FBQ3BHLFlBQVksSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3hCLFlBQVksSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzlDLFlBQVksSUFBSTtBQUNoQixnQkFBZ0IsS0FBSyxJQUFJLGFBQWEsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsZUFBZSxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsZUFBZSxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUN2SyxvQkFBb0IsSUFBSSxRQUFRLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQztBQUN6RCxvQkFBb0IsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6QyxpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFlBQVksT0FBTyxLQUFLLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtBQUNyRCxvQkFBb0I7QUFDcEIsZ0JBQWdCLElBQUk7QUFDcEIsb0JBQW9CLElBQUksZUFBZSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksS0FBSyxFQUFFLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDeEgsaUJBQWlCO0FBQ2pCLHdCQUF3QixFQUFFLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3JELGFBQWE7QUFDYixTQUFTLEVBQUUsWUFBWTtBQUN2QixZQUFZLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUU7QUFDdkMsZ0JBQWdCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMzQyxhQUFhO0FBQ2IsWUFBWSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEMsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZO0FBQ3BDLFlBQVksT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRTtBQUN2QyxnQkFBZ0IsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzlDLGFBQWE7QUFDYixTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ1osS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ21CcU0sY0FBQSxDQUFBLFlBQUEsR0FBRyxZQUFZOzs7O0FDN0VuQyxNQUFNLENBQUMsY0FBYyxDQUFDQyxZQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDNUNBLFlBQUEsQ0FBQSxVQUFBLEdBQUcsS0FBSyxFQUFFO0FBQzVCLElBQUksU0FBUyxHQUFHbGMsU0FBcUIsQ0FBQztBQUN0QyxJQUFJOFAsUUFBTSxHQUFHcFAsSUFBdUIsQ0FBQztBQUNyQyxJQUFJa1Asc0JBQW9CLEdBQUdoUCxvQkFBK0IsQ0FBQztBQUMzRCxJQUFJZ1IsYUFBVyxHQUFHL1AsV0FBa0MsQ0FBQztBQUNyRCxTQUFTLFVBQVUsQ0FBQyxlQUFlLEVBQUU7QUFDckMsSUFBSSxPQUFPaU8sUUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDeEQsUUFBUSxJQUFJLE1BQU0sQ0FBQztBQUNuQixRQUFRLElBQUksaUJBQWlCLENBQUM7QUFDOUIsUUFBUSxJQUFJLFdBQVcsR0FBRyxVQUFVLEdBQUcsRUFBRTtBQUN6QyxZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUIsWUFBWSxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLFNBQVMsQ0FBQztBQUNWLFFBQVEsSUFBSSxVQUFVLEdBQUcsWUFBWTtBQUNyQyxZQUFZLGlCQUFpQixLQUFLLElBQUksSUFBSSxpQkFBaUIsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNsSCxZQUFZLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUM5RSxZQUFZLE1BQU0sR0FBRyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM3QyxZQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDbkQsWUFBWSxJQUFJLGVBQWUsQ0FBQztBQUNoQyxZQUFZLElBQUk7QUFDaEIsZ0JBQWdCLGVBQWUsR0FBRzhCLGFBQVcsQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztBQUMzRSxhQUFhO0FBQ2IsWUFBWSxPQUFPLEdBQUcsRUFBRTtBQUN4QixnQkFBZ0IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLGdCQUFnQixPQUFPO0FBQ3ZCLGFBQWE7QUFDYixZQUFZLGVBQWUsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLEdBQUdoQyxzQkFBb0IsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDO0FBQzVKLFNBQVMsQ0FBQztBQUNWLFFBQVEsVUFBVSxFQUFFLENBQUM7QUFDckIsUUFBUSxNQUFNLENBQUMsU0FBUyxDQUFDQSxzQkFBb0IsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsVUFBVSxLQUFLLEVBQUUsRUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVk7QUFDaEosWUFBWSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDOUIsWUFBWSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEMsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZO0FBQ3BDLFlBQVksaUJBQWlCLEtBQUssSUFBSSxJQUFJLGlCQUFpQixLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2xILFlBQVksTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQixTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ1osS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ2lCc00sWUFBQSxDQUFBLFVBQUEsR0FBRyxVQUFVOzs7O0FDdkMvQixJQUFJck4sUUFBTSxHQUFHLENBQUMvTyxjQUFJLElBQUlBLGNBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RELElBQUksSUFBSSxDQUFDLEdBQUcsT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDL0QsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDckMsSUFBSSxJQUFJO0FBQ1IsUUFBUSxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkYsS0FBSztBQUNMLElBQUksT0FBTyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtBQUMzQyxZQUFZO0FBQ1osUUFBUSxJQUFJO0FBQ1osWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0QsU0FBUztBQUNULGdCQUFnQixFQUFFLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3pDLEtBQUs7QUFDTCxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBQ0YsSUFBSWdQLGVBQWEsR0FBRyxDQUFDaFAsY0FBSSxJQUFJQSxjQUFJLENBQUMsYUFBYSxLQUFLLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRTtBQUN4RSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3JFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBQ0YsTUFBTSxDQUFDLGNBQWMsQ0FBQ3FjLGdCQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDeENBLGdCQUFBLENBQUEsY0FBQSxHQUFHLEtBQUssRUFBRTtBQUNoQyxJQUFJck0sUUFBTSxHQUFHOVAsSUFBdUIsQ0FBQztBQUNyQyxJQUFJLG9CQUFvQixHQUFHVSxvQkFBK0IsQ0FBQztBQUMzRCxJQUFJLFdBQVcsR0FBR0UsV0FBa0MsQ0FBQztBQUNyRCxJQUFJLFVBQVUsR0FBR2lCLFVBQTJCLENBQUM7QUFDN0MsSUFBSSxNQUFNLEdBQUdnQixNQUF1QixDQUFDO0FBQ3JDLElBQUksTUFBTSxHQUFHQyxJQUF1QixDQUFDO0FBQ3JDLFNBQVMsY0FBYyxHQUFHO0FBQzFCLElBQUksSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLElBQUksS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDbEQsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25DLEtBQUs7QUFDTCxJQUFJLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNuRCxJQUFJLE9BQU9nTixRQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUN4RCxRQUFRLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDaEMsUUFBUSxJQUFJLFdBQVcsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QyxRQUFRLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFLFFBQVEsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzFCLFFBQVEsSUFBSSxPQUFPLEdBQUcsVUFBVSxDQUFDLEVBQUU7QUFDbkMsWUFBWSxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsVUFBVSxLQUFLLEVBQUU7QUFDbEksZ0JBQWdCLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDdkMsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDNUMsb0JBQW9CLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkMsb0JBQW9CLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN2RixpQkFBaUI7QUFDakIsYUFBYSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFNBQVMsQ0FBQztBQUNWLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN0QyxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixTQUFTO0FBQ1QsUUFBUSxNQUFNLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxVQUFVLEtBQUssRUFBRTtBQUNwRyxZQUFZLElBQUksS0FBSyxFQUFFO0FBQ3ZCLGdCQUFnQixJQUFJLE1BQU0sR0FBR2hCLGVBQWEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFRCxRQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUN6RSxnQkFBZ0IsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRUMsZUFBYSxDQUFDLEVBQUUsRUFBRUQsUUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUM3RyxhQUFhO0FBQ2IsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNaLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNxQnNOLGdCQUFBLENBQUEsY0FBQSxHQUFHLGNBQWM7Ozs7QUM1RHZDLE1BQU0sQ0FBQyxjQUFjLENBQUNDLFFBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNoREEsUUFBQSxDQUFBLE1BQUEsR0FBRyxLQUFLLEVBQUU7QUFDeEIsSUFBSTNHLE9BQUssR0FBR3pWLEtBQTRCLENBQUM7QUFDekMsSUFBSSxrQkFBa0IsR0FBR1Usa0JBQTZCLENBQUM7QUFDdkQsU0FBUyxNQUFNLENBQUMsT0FBTyxFQUFFO0FBQ3pCLElBQUksT0FBTyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQytVLE9BQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbkUsQ0FBQztBQUNhMkcsUUFBQSxDQUFBLE1BQUEsR0FBRyxNQUFNOzs7Ozs7QUNQdkIsSUFBSXZOLFFBQU0sR0FBRyxDQUFDL08sY0FBSSxJQUFJQSxjQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0RCxJQUFJLElBQUksQ0FBQyxHQUFHLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9ELElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLElBQUksSUFBSTtBQUNSLFFBQVEsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25GLEtBQUs7QUFDTCxJQUFJLE9BQU8sS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFDM0MsWUFBWTtBQUNaLFFBQVEsSUFBSTtBQUNaLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELFNBQVM7QUFDVCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN6QyxLQUFLO0FBQ0wsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUMsQ0FBQztBQUNGLElBQUlnUCxlQUFhLEdBQUcsQ0FBQ2hQLGNBQUksSUFBSUEsY0FBSSxDQUFDLGFBQWEsS0FBSyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUU7QUFDeEUsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNyRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUMsQ0FBQztBQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUN1YyxLQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDbkRBLEtBQUEsQ0FBQSxHQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ3JCLElBQUk1RyxPQUFLLEdBQUd6VixLQUE0QixDQUFDO0FBQ3pDLElBQUksTUFBTSxHQUFHVSxJQUF1QixDQUFDO0FBQ3JDLFNBQVMsR0FBRyxHQUFHO0FBQ2YsSUFBSSxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDckIsSUFBSSxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNsRCxRQUFRLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEMsS0FBSztBQUNMLElBQUksT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUN4RCxRQUFRK1UsT0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUzRyxlQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRUQsUUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDaEcsS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ1V3TixLQUFBLENBQUEsR0FBQSxHQUFHLEdBQUc7O0FDbENqQixJQUFJLE1BQU0sR0FBRyxDQUFDdmMsY0FBSSxJQUFJQSxjQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0RCxJQUFJLElBQUksQ0FBQyxHQUFHLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9ELElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLElBQUksSUFBSTtBQUNSLFFBQVEsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25GLEtBQUs7QUFDTCxJQUFJLE9BQU8sS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFDM0MsWUFBWTtBQUNaLFFBQVEsSUFBSTtBQUNaLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELFNBQVM7QUFDVCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN6QyxLQUFLO0FBQ0wsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUMsQ0FBQztBQUNGLElBQUksYUFBYSxHQUFHLENBQUNBLGNBQUksSUFBSUEsY0FBSSxDQUFDLGFBQWEsS0FBSyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUU7QUFDeEUsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNyRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUMsQ0FBQztBQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUN3YyxTQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDL0NBLFNBQUEsQ0FBQSxPQUFBLEdBQUcsS0FBSyxFQUFFO0FBQ3pCLElBQUksS0FBSyxHQUFHdGMsS0FBZ0IsQ0FBQztBQUM3QixTQUFTLE9BQU8sR0FBRztBQUNuQixJQUFJLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUN6QixJQUFJLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ2xELFFBQVEsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QyxLQUFLO0FBQ0wsSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLGFBQWEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBQ2NzYyxTQUFBLENBQUEsT0FBQSxHQUFHLE9BQU87OztDQy9CekIsSUFBSSxlQUFlLEdBQUcsQ0FBQ3hjLGNBQUksSUFBSUEsY0FBSSxDQUFDLGVBQWUsTUFBTSxNQUFNLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0tBQzVGLElBQUksRUFBRSxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQzdCLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0VBQ3hGLEtBQUssU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7S0FDeEIsSUFBSSxFQUFFLEtBQUssU0FBUyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDN0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNoQixDQUFDLENBQUMsQ0FBQztBQUNKLENBQUEsSUFBSSxZQUFZLEdBQUcsQ0FBQ0EsY0FBSSxJQUFJQSxjQUFJLENBQUMsWUFBWSxLQUFLLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRTtBQUN2RSxLQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUgsRUFBQyxDQUFDO0NBQ0YsTUFBTSxDQUFDLGNBQWMsQ0FBQSxPQUFBLEVBQVUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Q0FDOUQsT0FBbUIsQ0FBQSxRQUFBLEdBQUEsT0FBQSxDQUFBLEdBQUEsR0FBYyxtQkFBbUIsT0FBMkIsQ0FBQSxnQkFBQSxHQUFBLE9BQUEsQ0FBQSxTQUFBLEdBQW9CLGVBQWUsT0FBbUIsQ0FBQSxRQUFBLEdBQUEsT0FBQSxDQUFBLEtBQUEsR0FBZ0IsT0FBZ0IsQ0FBQSxLQUFBLEdBQUEsT0FBQSxDQUFBLFdBQUEsR0FBc0IsT0FBaUIsQ0FBQSxNQUFBLEdBQUEsT0FBQSxDQUFBLGFBQUEsR0FBd0IsMkJBQTJCLE9BQXVCLENBQUEsWUFBQSxHQUFBLE9BQUEsQ0FBQSxtQkFBQSxHQUE4QixPQUF1QixDQUFBLFlBQUEsR0FBQSxPQUFBLENBQUEsYUFBQSxHQUF3QixPQUFrQyxDQUFBLHVCQUFBLEdBQUEsT0FBQSxDQUFBLGFBQUEsR0FBd0IscUJBQXFCLE9BQWtDLENBQUEsdUJBQUEsR0FBQSxPQUFBLENBQUEsY0FBQSxHQUF5QixPQUF3QixDQUFBLGFBQUEsR0FBQSxPQUFBLENBQUEsWUFBQSxHQUF1QixPQUFtQixDQUFBLFFBQUEsR0FBQSxPQUFBLENBQUEsSUFBQSxHQUFlLGVBQWUsT0FBMkIsQ0FBQSxnQkFBQSxHQUFBLE9BQUEsQ0FBQSxZQUFBLEdBQXVCLE9BQXFCLENBQUEsVUFBQSxHQUFBLE9BQUEsQ0FBQSxZQUFBLEdBQXVCLE9BQW9CLENBQUEsU0FBQSxHQUFBLE9BQUEsQ0FBQSxhQUFBLEdBQXdCLCtCQUErQixPQUFrQyxDQUFBLHVCQUFBLEdBQUEsT0FBQSxDQUFBLGNBQUEsR0FBeUIsT0FBeUIsQ0FBQSxjQUFBLEdBQUEsT0FBQSxDQUFBLEtBQUEsR0FBZ0IsT0FBeUIsQ0FBQSxjQUFBLEdBQUEsT0FBQSxDQUFBLEtBQUEsR0FBZ0Isd0JBQXdCLE9BQWUsQ0FBQSxJQUFBLEdBQUEsT0FBQSxDQUFBLFlBQUEsR0FBdUIsT0FBd0IsQ0FBQSxhQUFBLEdBQUEsT0FBQSxDQUFBLGVBQUEsR0FBMEIsT0FBa0IsQ0FBQSxPQUFBLEdBQUEsT0FBQSxDQUFBLGVBQUEsR0FBMEIscUJBQXFCLE9BQWdDLENBQUEscUJBQUEsR0FBQSxPQUFBLENBQUEsVUFBQSxHQUFxQixLQUFLLENBQUMsQ0FBQztDQUNobkMsT0FBaUIsQ0FBQSxNQUFBLEdBQUEsT0FBQSxDQUFBLE1BQUEsR0FBaUIscUJBQXFCLE9BQXFCLENBQUEsVUFBQSxHQUFBLE9BQUEsQ0FBQSxPQUFBLEdBQWtCLGdCQUFnQixPQUFrQixDQUFBLE9BQUEsR0FBQSxPQUFBLENBQUEsU0FBQSxHQUFvQixPQUFrQyxDQUFBLHVCQUFBLEdBQUEsT0FBQSxDQUFBLG9CQUFBLEdBQStCLE9BQW1CLENBQUEsUUFBQSxHQUFBLE9BQUEsQ0FBQSxhQUFBLEdBQXdCLG9CQUFvQixPQUFnQixDQUFBLEtBQUEsR0FBQSxPQUFBLENBQUEsY0FBQSxHQUF5QixPQUF1QixDQUFBLFlBQUEsR0FBQSxPQUFBLENBQUEsUUFBQSxHQUFtQixPQUFnQixDQUFBLEtBQUEsR0FBQSxPQUFBLENBQUEsT0FBQSxHQUFrQixxQkFBcUIsT0FBc0IsQ0FBQSxXQUFBLEdBQUEsT0FBQSxDQUFBLFNBQUEsR0FBb0IsT0FBb0IsQ0FBQSxTQUFBLEdBQUEsT0FBQSxDQUFBLGlCQUFBLEdBQTRCLE9BQTJCLENBQUEsZ0JBQUEsR0FBQSxPQUFBLENBQUEsVUFBQSxHQUFxQixxQkFBcUIsT0FBcUIsQ0FBQSxVQUFBLEdBQUEsT0FBQSxDQUFBLFlBQUEsR0FBdUIsT0FBcUIsQ0FBQSxVQUFBLEdBQUEsT0FBQSxDQUFBLFdBQUEsR0FBc0IsT0FBaUIsQ0FBQSxNQUFBLEdBQUEsT0FBQSxDQUFBLFNBQUEsR0FBb0IsZ0JBQWdCLE9BQWlCLENBQUEsTUFBQSxHQUFBLE9BQUEsQ0FBQSxLQUFBLEdBQWdCLE9BQWdCLENBQUEsS0FBQSxHQUFBLE9BQUEsQ0FBQSxTQUFBLEdBQW9CLE9BQWMsQ0FBQSxHQUFBLEdBQUEsT0FBQSxDQUFBLEtBQUEsR0FBZ0IsZ0JBQWdCLE9BQXFCLENBQUEsVUFBQSxHQUFBLE9BQUEsQ0FBQSxLQUFBLEdBQWdCLE9BQWUsQ0FBQSxJQUFBLEdBQUEsT0FBQSxDQUFBLFNBQUEsR0FBb0IsT0FBZ0IsQ0FBQSxLQUFBLEdBQUEsT0FBQSxDQUFBLGlCQUFBLEdBQTRCLGFBQWEsT0FBZ0IsQ0FBQSxLQUFBLEdBQUEsT0FBQSxDQUFBLEtBQUEsR0FBZ0IsS0FBSyxDQUFDLENBQUM7Q0FDcCtCLE9BQW9CLENBQUEsU0FBQSxHQUFBLE9BQUEsQ0FBQSxTQUFBLEdBQW9CLHNCQUFzQixPQUFvQixDQUFBLFNBQUEsR0FBQSxPQUFBLENBQUEsU0FBQSxHQUFvQixvQkFBb0IsT0FBbUIsQ0FBQSxRQUFBLEdBQUEsT0FBQSxDQUFBLElBQUEsR0FBZSxPQUFpQixDQUFBLE1BQUEsR0FBQSxPQUFBLENBQUEsV0FBQSxHQUFzQixPQUFnQixDQUFBLEtBQUEsR0FBQSxPQUFBLENBQUEsYUFBQSxHQUF3QixlQUFlLE9BQXFCLENBQUEsVUFBQSxHQUFBLE9BQUEsQ0FBQSxNQUFBLEdBQWlCLE9BQW1CLENBQUEsUUFBQSxHQUFBLE9BQUEsQ0FBQSxTQUFBLEdBQW9CLE9BQWdCLENBQUEsS0FBQSxHQUFBLE9BQUEsQ0FBQSxVQUFBLEdBQXFCLGlCQUFpQixPQUFpQixDQUFBLE1BQUEsR0FBQSxPQUFBLENBQUEsUUFBQSxHQUFtQixPQUF3QixDQUFBLGFBQUEsR0FBQSxPQUFBLENBQUEsV0FBQSxHQUFzQixPQUEwQixDQUFBLGVBQUEsR0FBQSxPQUFBLENBQUEsT0FBQSxHQUFrQixnQkFBZ0IsT0FBbUIsQ0FBQSxRQUFBLEdBQUEsT0FBQSxDQUFBLHFCQUFBLEdBQWdDLE9BQW9CLENBQUEsU0FBQSxHQUFBLE9BQUEsQ0FBQSxTQUFBLEdBQW9CLE9BQWMsQ0FBQSxHQUFBLEdBQUEsT0FBQSxDQUFBLFNBQUEsR0FBb0Isb0JBQW9CLE9BQXFCLENBQUEsVUFBQSxHQUFBLE9BQUEsQ0FBQSxRQUFBLEdBQW1CLE9BQWtCLENBQUEsT0FBQSxHQUFBLE9BQUEsQ0FBQSxRQUFBLEdBQW1CLE9BQWMsQ0FBQSxHQUFBLEdBQUEsT0FBQSxDQUFBLFdBQUEsR0FBc0IsZ0JBQWdCLE9BQWMsQ0FBQSxHQUFBLEdBQUEsT0FBQSxDQUFBLElBQUEsR0FBZSxPQUFrQixDQUFBLE9BQUEsR0FBQSxPQUFBLENBQUEsY0FBQSxHQUF5QixPQUFrQixDQUFBLE9BQUEsR0FBQSxPQUFBLENBQUEsS0FBQSxHQUFnQixvQkFBb0IsT0FBZSxDQUFBLElBQUEsR0FBQSxPQUFBLENBQUEsUUFBQSxHQUFtQixLQUFLLENBQUMsQ0FBQztDQUNwOEIsT0FBa0IsQ0FBQSxPQUFBLEdBQUEsT0FBQSxDQUFBLE1BQUEsR0FBaUIsT0FBeUIsQ0FBQSxjQUFBLEdBQUEsT0FBQSxDQUFBLFVBQUEsR0FBcUIsT0FBdUIsQ0FBQSxZQUFBLEdBQUEsT0FBQSxDQUFBLFVBQUEsR0FBcUIsc0JBQXNCLE9BQWlCLENBQUEsTUFBQSxHQUFBLE9BQUEsQ0FBQSxPQUFBLEdBQWtCLE9BQW9CLENBQUEsU0FBQSxHQUFBLE9BQUEsQ0FBQSxXQUFBLEdBQXNCLE9BQWtCLENBQUEsT0FBQSxHQUFBLE9BQUEsQ0FBQSxZQUFBLEdBQXVCLHVCQUF1QixPQUF1QixDQUFBLFlBQUEsR0FBQSxPQUFBLENBQUEsUUFBQSxHQUFtQixPQUFjLENBQUEsR0FBQSxHQUFBLE9BQUEsQ0FBQSxTQUFBLEdBQW9CLE9BQW9CLENBQUEsU0FBQSxHQUFBLE9BQUEsQ0FBQSxRQUFBLEdBQW1CLGVBQWUsT0FBcUIsQ0FBQSxVQUFBLEdBQUEsT0FBQSxDQUFBLFdBQUEsR0FBc0IsS0FBSyxDQUFDLENBQUM7Q0FDcGQsSUFBSSxZQUFZLEdBQUdFLFlBQWdDLENBQUM7Q0FDcEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sWUFBWSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3pILElBQUksdUJBQXVCLEdBQUdVLHVCQUFzRCxDQUFDO0NBQ3JGLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sdUJBQXVCLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUMxSixJQUFJLFlBQVksR0FBR0UsVUFBdUMsQ0FBQztDQUMzRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDekgsSUFBSSxpQkFBaUIsR0FBR2lCLGlCQUFvRCxDQUFDO0NBQzdFLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8saUJBQWlCLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDeEksSUFBSSxTQUFTLEdBQUdnQixTQUE2QixDQUFDO0NBQzlDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUNoSCxJQUFJLGlCQUFpQixHQUFHQyxpQkFBcUMsQ0FBQztDQUM5RCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3hJLElBQUksZUFBZSxHQUFHUyxlQUFtQyxDQUFDO0NBQzFELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLGVBQWUsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUNsSSxJQUFJLGNBQWMsR0FBR0UsY0FBa0MsQ0FBQztDQUN4RCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDL0gsSUFBSSxNQUFNLEdBQUcwQyxJQUFvQyxDQUFDO0NBQ2xELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN2RyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDekgsSUFBSSxPQUFPLEdBQUdDLEtBQXFDLENBQUM7Q0FDcEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzVILElBQUksT0FBTyxHQUFHUyxLQUFxQyxDQUFDO0NBQ3BELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUMxRyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUM1SCxJQUFJLGdCQUFnQixHQUFHQyxjQUE4QyxDQUFDO0NBQ3RFLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDckksTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3ZKLElBQUksc0JBQXNCLEdBQUdDLHNCQUFvRCxDQUFDO0NBQ2xGLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sc0JBQXNCLENBQUMsb0JBQW9CLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN2SixNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN6SSxJQUFJLFdBQVcsR0FBR0MsV0FBK0IsQ0FBQztDQUNsRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDdEgsSUFBSSxjQUFjLEdBQUdDLGNBQWtDLENBQUM7Q0FDeEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sY0FBYyxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQy9ILElBQUksWUFBWSxHQUFHQyxVQUFnQyxDQUFDO0NBQ3BELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN6SCxJQUFJLGNBQWMsR0FBR0MsWUFBa0MsQ0FBQztDQUN4RCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDL0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN2SSxJQUFJLE1BQU0sR0FBR29WLE1BQStCLENBQUM7Q0FDN0MsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3ZHLElBQUksTUFBTSxHQUFHQyxNQUErQixDQUFDO0NBQzdDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN2RyxJQUFJLFVBQVUsR0FBR0MsVUFBbUMsQ0FBQztDQUNyRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDbkgsSUFBSSxjQUFjLEdBQUdDLGNBQXVDLENBQUM7Q0FDN0QsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sY0FBYyxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQy9ILElBQUksZUFBZSxHQUFHQyxlQUFtQyxDQUFDO0NBQzFELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLGVBQWUsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUNsSSxJQUFJLGdCQUFnQixHQUFHQyxnQkFBb0MsQ0FBQztDQUM1RCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3JJLElBQUkseUJBQXlCLEdBQUdDLHVCQUFrRCxDQUFDO0NBQ25GLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8seUJBQXlCLENBQUMsdUJBQXVCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUNoSyxJQUFJLFlBQVksR0FBR0MsVUFBcUMsQ0FBQztDQUN6RCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDekgsSUFBSSxlQUFlLEdBQUdDLGFBQXdDLENBQUM7Q0FDL0QsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsZUFBZSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sZUFBZSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ2xJLElBQUkseUJBQXlCLEdBQUdDLHVCQUFrRCxDQUFDO0NBQ25GLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8seUJBQXlCLENBQUMsdUJBQXVCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUNoSyxJQUFJLGVBQWUsR0FBR0MsYUFBd0MsQ0FBQztDQUMvRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxlQUFlLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDbEksSUFBSSxTQUFTLEdBQUdDLE9BQXVDLENBQUM7Q0FDeEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzFILElBQUkscUJBQXFCLEdBQUdDLG1CQUE4QyxDQUFDO0NBQzNFLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8scUJBQXFCLENBQUMsbUJBQW1CLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUNwSixJQUFJLGNBQWMsR0FBR0MsY0FBNkMsQ0FBQztDQUNuRSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDL0gsSUFBSSxrQkFBa0IsR0FBR0Msa0JBQWlELENBQUM7Q0FDM0UsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzNJLElBQUksZUFBZSxHQUFHQyxlQUE4QyxDQUFDO0NBQ3JFLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLGVBQWUsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUNsSSxJQUFJLFFBQVEsR0FBR0MsUUFBdUMsQ0FBQztDQUN2RCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDN0csSUFBSSxhQUFhLEdBQUdDLGFBQTRDLENBQUM7Q0FDakUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzVILElBQUksT0FBTyxHQUFHQyxPQUFzQyxDQUFDO0NBQ3JELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUMxRyxJQUFJLE9BQU8sR0FBR0MsS0FBc0MsQ0FBQztDQUNyRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDMUcsSUFBSSxVQUFVLEdBQUdDLFVBQXlDLENBQUM7Q0FDM0QsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ25ILElBQUksTUFBTSxHQUFHQyxNQUFxQyxDQUFDO0NBQ25ELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN2RyxJQUFJLFdBQVcsR0FBR0MsV0FBMEMsQ0FBQztDQUM3RCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDdEgsSUFBSSxrQkFBa0IsR0FBR0Msa0JBQWlELENBQUM7Q0FDM0UsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzNJLElBQUksVUFBVSxHQUFHQyxVQUF5QyxDQUFDO0NBQzNELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUNuSCxJQUFJLEtBQUssR0FBR0MsS0FBb0MsQ0FBQztDQUNqRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDcEcsSUFBSSxVQUFVLEdBQUdDLFVBQXlDLENBQUM7Q0FDM0QsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ25ILElBQUksT0FBTyxHQUFHQyxPQUFzQyxDQUFDO0NBQ3JELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUMxRyxJQUFJLE9BQU8sR0FBR0MsS0FBc0MsQ0FBQztDQUNyRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDMUcsSUFBSSxJQUFJLEdBQUdDLElBQW1DLENBQUM7Q0FDL0MsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ2pHLElBQUksbUJBQW1CLEdBQUdDLG1CQUFrRCxDQUFDO0NBQzdFLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUM5SSxJQUFJLE9BQU8sR0FBR0MsT0FBc0MsQ0FBQztDQUNyRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDMUcsSUFBSSxXQUFXLEdBQUdDLFdBQTBDLENBQUM7Q0FDN0QsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3RILElBQUksTUFBTSxHQUFHQyxNQUFxQyxDQUFDO0NBQ25ELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN2RyxJQUFJLE9BQU8sR0FBR0MsT0FBc0MsQ0FBQztDQUNyRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDMUcsSUFBSSxZQUFZLEdBQUdDLFlBQTJDLENBQUM7Q0FDL0QsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sWUFBWSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3pILElBQUksT0FBTyxHQUFHQyxPQUFzQyxDQUFDO0NBQ3JELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUMxRyxJQUFJLE9BQU8sR0FBR0MsT0FBc0MsQ0FBQztDQUNyRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDMUcsSUFBSSxLQUFLLEdBQUdDLEtBQW9DLENBQUM7Q0FDakQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3BHLElBQUksV0FBVyxHQUFHQyxXQUF5QyxDQUFDO0NBQzVELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN0SCxJQUFJLE9BQU8sR0FBR3BCLEtBQXNDLENBQUM7Q0FDckQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzFHLElBQUksT0FBTyxHQUFHUyxLQUFzQyxDQUFDO0NBQ3JELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxRyxDQUFBLFlBQVksQ0FBQ1ksS0FBMkIsRUFBRSxPQUFPLENBQUMsQ0FBQztDQUNuRCxJQUFJLFFBQVEsR0FBR0MsTUFBNEIsQ0FBQztDQUM1QyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDN0csSUFBSSxPQUFPLEdBQUdDLE9BQXFDLENBQUM7Q0FDcEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzFHLElBQUksV0FBVyxHQUFHQyxXQUF5QyxDQUFDO0NBQzVELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN0SCxJQUFJLFFBQVEsR0FBR0MsUUFBc0MsQ0FBQztDQUN0RCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDN0csSUFBSSxhQUFhLEdBQUdDLGFBQTJDLENBQUM7Q0FDaEUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzVILElBQUksWUFBWSxHQUFHQyxZQUEwQyxDQUFDO0NBQzlELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN6SCxJQUFJLGNBQWMsR0FBR0MsY0FBNEMsQ0FBQztDQUNsRSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDL0gsSUFBSSxZQUFZLEdBQUdDLFlBQTBDLENBQUM7Q0FDOUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sWUFBWSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3pILElBQUksWUFBWSxHQUFHQyxZQUEwQyxDQUFDO0NBQzlELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN6SCxJQUFJLFlBQVksR0FBR0MsVUFBMEMsQ0FBQztDQUM5RCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDekgsSUFBSSxrQkFBa0IsR0FBR0Msa0JBQWdELENBQUM7Q0FDMUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzNJLElBQUksbUJBQW1CLEdBQUdDLG1CQUFpRCxDQUFDO0NBQzVFLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUM5SSxJQUFJLFdBQVcsR0FBR0MsV0FBeUMsQ0FBQztDQUM1RCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDdEgsSUFBSSxXQUFXLEdBQUdDLFdBQXlDLENBQUM7Q0FDNUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3RILElBQUksYUFBYSxHQUFHQyxhQUEyQyxDQUFDO0NBQ2hFLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUM1SCxJQUFJLFlBQVksR0FBR0MsWUFBMEMsQ0FBQztDQUM5RCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDekgsSUFBSSxTQUFTLEdBQUdDLFNBQXVDLENBQUM7Q0FDeEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ2hILElBQUksT0FBTyxHQUFHQyxPQUFxQyxDQUFDO0NBQ3BELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUMxRyxJQUFJLFVBQVUsR0FBR0MsVUFBd0MsQ0FBQztDQUMxRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDbkgsSUFBSSxjQUFjLEdBQUdDLGNBQTRDLENBQUM7Q0FDbEUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sY0FBYyxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQy9ILElBQUksZ0JBQWdCLEdBQUdDLGdCQUE4QyxDQUFDO0NBQ3RFLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDckksSUFBSSxPQUFPLEdBQUdDLE9BQXFDLENBQUM7Q0FDcEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzFHLElBQUksV0FBVyxHQUFHQyxXQUF5QyxDQUFDO0NBQzVELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN0SCxJQUFJLGVBQWUsR0FBR0MsZUFBNkMsQ0FBQztDQUNwRSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxlQUFlLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDbEksSUFBSSxVQUFVLEdBQUdDLFVBQXdDLENBQUM7Q0FDMUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ25ILElBQUksc0JBQXNCLEdBQUdDLHNCQUFvRCxDQUFDO0NBQ2xGLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sc0JBQXNCLENBQUMsb0JBQW9CLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN2SixJQUFJLHlCQUF5QixHQUFHQyx5QkFBdUQsQ0FBQztDQUN4RixNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLHlCQUF5QixDQUFDLHVCQUF1QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDaEssSUFBSSxXQUFXLEdBQUdDLFdBQXlDLENBQUM7Q0FDNUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3RILElBQUksU0FBUyxHQUFHQyxTQUF1QyxDQUFDO0NBQ3hELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUNoSCxJQUFJLE9BQU8sR0FBR0MsT0FBcUMsQ0FBQztDQUNwRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDMUcsSUFBSSxTQUFTLEdBQUdDLE9BQXVDLENBQUM7Q0FDeEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ2hILElBQUksWUFBWSxHQUFHQyxZQUEwQyxDQUFDO0NBQzlELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN6SCxJQUFJLFlBQVksR0FBR0MsWUFBMEMsQ0FBQztDQUM5RCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDekgsSUFBSSxRQUFRLEdBQUdDLFFBQXNDLENBQUM7Q0FDdEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzdHLElBQUksUUFBUSxHQUFHQyxRQUFzQyxDQUFDO0NBQ3RELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUM3RyxJQUFJLFVBQVUsR0FBR0MsVUFBd0MsQ0FBQztDQUMxRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDbkgsSUFBSSxNQUFNLEdBQUdDLE1BQW9DLENBQUM7Q0FDbEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3ZHLElBQUksV0FBVyxHQUFHQyxXQUF5QyxDQUFDO0NBQzVELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN0SCxJQUFJLE9BQU8sR0FBR0MsT0FBcUMsQ0FBQztDQUNwRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDMUcsSUFBSSxTQUFTLEdBQUdDLFNBQXVDLENBQUM7Q0FDeEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ2hILElBQUksZ0JBQWdCLEdBQUdDLGdCQUE4QyxDQUFDO0NBQ3RFLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDckksSUFBSSxTQUFTLEdBQUdDLFNBQXVDLENBQUM7Q0FDeEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ2hILElBQUksTUFBTSxHQUFHQyxNQUFvQyxDQUFDO0NBQ2xELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN2RyxJQUFJLEtBQUssR0FBR0MsS0FBbUMsQ0FBQztDQUNoRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDcEcsSUFBSSxPQUFPLEdBQUdDLE9BQXFDLENBQUM7Q0FDcEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzFHLElBQUksYUFBYSxHQUFHQyxhQUEyQyxDQUFDO0NBQ2hFLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUM1SCxJQUFJLEtBQUssR0FBR0MsS0FBbUMsQ0FBQztDQUNoRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDcEcsSUFBSSxVQUFVLEdBQUdDLFVBQXdDLENBQUM7Q0FDMUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ25ILElBQUksU0FBUyxHQUFHQyxPQUF1QyxDQUFDO0NBQ3hELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUNoSCxJQUFJLFVBQVUsR0FBR0MsVUFBd0MsQ0FBQztDQUMxRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDbkgsSUFBSSxZQUFZLEdBQUdDLFlBQTBDLENBQUM7Q0FDOUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sWUFBWSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3pILElBQUksV0FBVyxHQUFHQyxXQUF5QyxDQUFDO0NBQzVELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN0SCxJQUFJLFdBQVcsR0FBR0MsV0FBeUMsQ0FBQztDQUM1RCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDdEgsSUFBSSxLQUFLLEdBQUdDLEtBQW1DLENBQUM7Q0FDaEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3BHLElBQUksV0FBVyxHQUFHQyxXQUF5QyxDQUFDO0NBQzVELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN0SCxJQUFJLFdBQVcsR0FBR0MsV0FBeUMsQ0FBQztDQUM1RCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDdEgsSUFBSSx1QkFBdUIsR0FBR0MsdUJBQXFELENBQUM7Q0FDcEYsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyx1QkFBdUIsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzFKLElBQUksVUFBVSxHQUFHQyxVQUF3QyxDQUFDO0NBQzFELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUNuSCxJQUFJLE9BQU8sR0FBR0MsT0FBcUMsQ0FBQztDQUNwRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDMUcsSUFBSSxTQUFTLEdBQUdDLFNBQXVDLENBQUM7Q0FDeEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ2hILElBQUksaUJBQWlCLEdBQUdDLGlCQUErQyxDQUFDO0NBQ3hFLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8saUJBQWlCLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDeEksSUFBSSxhQUFhLEdBQUdDLGFBQTJDLENBQUM7Q0FDaEUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzVILElBQUksZUFBZSxHQUFHQyxlQUE2QyxDQUFDO0NBQ3BFLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLGVBQWUsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUNsSSxJQUFJLFVBQVUsR0FBR0MsVUFBd0MsQ0FBQztDQUMxRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDbkgsSUFBSSxRQUFRLEdBQUdDLFFBQXNDLENBQUM7Q0FDdEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzdHLElBQUksUUFBUSxHQUFHQyxRQUFzQyxDQUFDO0NBQ3RELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUM3RyxJQUFJLFlBQVksR0FBR0MsWUFBMEMsQ0FBQztDQUM5RCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDekgsSUFBSSxPQUFPLEdBQUdDLE9BQXFDLENBQUM7Q0FDcEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzFHLElBQUksV0FBVyxHQUFHQyxXQUF5QyxDQUFDO0NBQzVELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN0SCxJQUFJLFVBQVUsR0FBR0MsVUFBd0MsQ0FBQztDQUMxRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDbkgsSUFBSSxRQUFRLEdBQUdDLFFBQXNDLENBQUM7Q0FDdEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzdHLElBQUksWUFBWSxHQUFHQyxZQUEwQyxDQUFDO0NBQzlELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN6SCxJQUFJLE1BQU0sR0FBR0MsTUFBb0MsQ0FBQztDQUNsRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDdkcsSUFBSSxlQUFlLEdBQUdDLGVBQTZDLENBQUM7Q0FDcEUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsZUFBZSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sZUFBZSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ2xJLElBQUksT0FBTyxHQUFHQyxPQUFxQyxDQUFDO0NBQ3BELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUMxRyxJQUFJLGFBQWEsR0FBR0MsYUFBMkMsQ0FBQztDQUNoRSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDNUgsSUFBSSxRQUFRLEdBQUdDLFFBQXNDLENBQUM7Q0FDdEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzdHLElBQUksTUFBTSxHQUFHQyxNQUFvQyxDQUFDO0NBQ2xELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN2RyxJQUFJLFVBQVUsR0FBR0MsVUFBd0MsQ0FBQztDQUMxRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDbkgsSUFBSSxXQUFXLEdBQUdDLFdBQXlDLENBQUM7Q0FDNUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3RILElBQUksV0FBVyxHQUFHQyxXQUF5QyxDQUFDO0NBQzVELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN0SCxJQUFJLFdBQVcsR0FBR0MsV0FBeUMsQ0FBQztDQUM1RCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDdEgsSUFBSSxhQUFhLEdBQUdDLGFBQTJDLENBQUM7Q0FDaEUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzVILElBQUksV0FBVyxHQUFHQyxXQUF5QyxDQUFDO0NBQzVELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN0SCxJQUFJLFdBQVcsR0FBR0MsV0FBeUMsQ0FBQztDQUM1RCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDdEgsSUFBSSxhQUFhLEdBQUdDLGFBQTJDLENBQUM7Q0FDaEUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzVILElBQUksWUFBWSxHQUFHQyxZQUEwQyxDQUFDO0NBQzlELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN6SCxJQUFJLE1BQU0sR0FBR0MsTUFBb0MsQ0FBQztDQUNsRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDdkcsSUFBSSxVQUFVLEdBQUdDLFVBQXdDLENBQUM7Q0FDMUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ25ILElBQUksV0FBVyxHQUFHQyxXQUF5QyxDQUFDO0NBQzVELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN0SCxJQUFJLFdBQVcsR0FBR0MsV0FBeUMsQ0FBQztDQUM1RCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDdEgsSUFBSSxLQUFLLEdBQUdDLEtBQW1DLENBQUM7Q0FDaEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3BHLElBQUksVUFBVSxHQUFHQyxVQUF3QyxDQUFDO0NBQzFELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUNuSCxJQUFJLGNBQWMsR0FBR0MsY0FBNEMsQ0FBQztDQUNsRSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDL0gsSUFBSSxjQUFjLEdBQUdDLGNBQTRDLENBQUM7Q0FDbEUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sY0FBYyxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQy9ILElBQUksY0FBYyxHQUFHQyxjQUE0QyxDQUFDO0NBQ2xFLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLGNBQWMsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUMvSCxJQUFJLFNBQVMsR0FBRzdILE9BQXVDLENBQUM7Q0FDeEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ2hILElBQUksYUFBYSxHQUFHOEgsYUFBMkMsQ0FBQztDQUNoRSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDNUgsSUFBSSxXQUFXLEdBQUdDLFdBQXlDLENBQUM7Q0FDNUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3RILElBQUksU0FBUyxHQUFHQyxTQUF1QyxDQUFDO0NBQ3hELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUNoSCxJQUFJLFFBQVEsR0FBR0MsUUFBc0MsQ0FBQztDQUN0RCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDN0csSUFBSSxhQUFhLEdBQUdDLGFBQTJDLENBQUM7Q0FDaEUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzVILElBQUksWUFBWSxHQUFHQyxZQUEwQyxDQUFDO0NBQzlELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN6SCxJQUFJLGNBQWMsR0FBR0MsY0FBNEMsQ0FBQztDQUNsRSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDL0gsSUFBSSxZQUFZLEdBQUdDLFlBQTBDLENBQUM7Q0FDOUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sWUFBWSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ3pILElBQUksZ0JBQWdCLEdBQUdDLGdCQUE4QyxDQUFDO0NBQ3RFLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDckksSUFBSSxRQUFRLEdBQUdDLFFBQXNDLENBQUM7Q0FDdEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQzdHLElBQUksU0FBUyxHQUFHQyxTQUF1QyxDQUFDO0NBQ3hELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNoSCxDQUFBOzs7QUNuV0EsU0FBUyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO0FBQzdDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ25DLENBQUM7QUFDRDtBQUNlLFNBQVMsT0FBTyxDQUFDLEVBQUUsRUFBRTtBQUNwQyxFQUFFLE1BQU0sUUFBUSxHQUFHQyxhQUFTLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsdUJBQXVCLENBQUM7QUFDM0UsS0FBSyxJQUFJLENBQUNDLGFBQVMsQ0FBQ0QsYUFBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQzVDO0FBQ0EsS0FBSyxJQUFJLENBQUNFLFVBQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQzlFO0FBQ0EsRUFBRSxPQUFPO0FBQ1QsSUFBSSxJQUFJLEVBQUVGLGFBQVMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDO0FBQy9CLElBQUksUUFBUTtBQUNaO0FBQ0EsSUFBSSxlQUFlLEVBQUUsUUFBUSxDQUFDLElBQUk7QUFDbEMsTUFBTUUsVUFBTTtBQUNaLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUNoQixVQUFVLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDakYsT0FBTztBQUNQLE1BQU1DLFNBQUssRUFBRTtBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksaUJBQWlCLEVBQUUsUUFBUSxDQUFDLElBQUk7QUFDcEMsTUFBTUQsVUFBTTtBQUNaLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUNoQixVQUFVLEdBQUcsQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDbkYsT0FBTztBQUNQLE1BQU1DLFNBQUssRUFBRTtBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxFQUFFLFFBQVEsQ0FBQyxJQUFJO0FBQzVCLE1BQU1ELFVBQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdELE1BQU0xUyxPQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqQyxNQUFNMlMsU0FBSyxFQUFFO0FBQ2IsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUk7QUFDM0IsTUFBTUQsVUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUM7QUFDdEQsTUFBTUMsU0FBSyxFQUFFO0FBQ2IsS0FBSztBQUNMLElBQUksSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO0FBQ3ZCLE1BQU1ELFVBQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDO0FBQ2xELE1BQU1DLFNBQUssRUFBRTtBQUNiLEtBQUs7QUFDTCxJQUFJLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtBQUN2QixNQUFNRCxVQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQztBQUNsRCxNQUFNQyxTQUFLLEVBQUU7QUFDYixLQUFLO0FBQ0wsR0FBRyxDQUFDO0FBQ0o7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ2UsTUFBTSxTQUFTLENBQUM7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRTtBQUNwQyxJQUFJLE1BQU0sRUFBRSxVQUFVLEdBQUcsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDO0FBQzFDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDdkIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN6QixJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ2pDLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO0FBQ3JDLElBQUksUUFBUSxLQUFLLENBQUMsQ0FBQztBQUNuQixJQUFJLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkM7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNyQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QyxNQUFNLE1BQU0sR0FBRyxLQUFLO0FBQ3BCLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDN0MsU0FBUyxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztBQUMxQixTQUFTLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0IsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxRQUFRLEVBQUU7QUFDbEMsTUFBTSxPQUFPLE1BQU0sQ0FBQztBQUNwQixLQUFLO0FBQ0wsSUFBSSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVTtBQUN4QyxRQUFRLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQztBQUN0RCxRQUFRLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNyRCxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQzVCLElBQUk7QUFDSixNQUFNLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzdCLE1BQU0sSUFBSTtBQUNWLE1BQU05ZCxRQUFNLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxDQUFDO0FBQzdELE1BQU07QUFDTixHQUFHO0FBQ0g7QUFDQSxFQUFFLGdCQUFnQixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO0FBQzVDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtBQUNwQyxNQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsSUFBSTtBQUNKLE1BQU0sSUFBSSxDQUFDLE9BQU8sR0FBRyxZQUFZO0FBQ2pDLE1BQU0sSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNO0FBQzdCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUTtBQUN4QyxNQUFNO0FBQ04sTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNwRixLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUksTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2xELElBQUksTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZFO0FBQ0EsSUFBSSxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQy9DLEdBQUc7QUFDSDtBQUNBLEVBQUUsY0FBYyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO0FBQzFDLElBQUksSUFBSSxRQUFRLEdBQUcsTUFBTSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDekMsSUFBSSxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUU7QUFDdEIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLEtBQUssTUFBTSxJQUFJLFFBQVEsR0FBRyxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRTtBQUNuRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUN6QyxLQUFLO0FBQ0wsSUFBSSxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzVDLEdBQUc7QUFDSDs7QUM1RWUsU0FBUyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUM5RCxFQUFFLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO0FBQ3JDLEVBQUUsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5RCxFQUFFLElBQUksR0FBRyxLQUFLLElBQUksRUFBRTtBQUNwQixJQUFJLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRTtBQUNyQixNQUFNLE9BQU8sT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN6QixLQUFLO0FBQ0wsSUFBSSxPQUFPLFVBQVUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUMxQyxHQUFHO0FBQ0gsRUFBRSxJQUFJLEdBQUcsS0FBSyxNQUFNLEVBQUU7QUFDdEIsSUFBSSxJQUFJLE9BQU8sR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFO0FBQzNCLE1BQU0sT0FBTyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLEtBQUs7QUFDTCxJQUFJLE9BQU8sVUFBVSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDcEMsR0FBRztBQUNILEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBQzVDOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2UsTUFBTSxTQUFTLENBQUM7QUFDL0IsRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFO0FBQ3BCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUM7QUFDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHQSxRQUFNLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLE9BQU8sT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUN0QixJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUM7QUFDcEMsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFFBQVEsR0FBRztBQUNiLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3JCLEdBQUc7QUFDSDs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNlLE1BQU0sTUFBTSxDQUFDO0FBQzVCLEVBQUUsV0FBVyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUU7QUFDNUI7QUFDQSxJQUFJLElBQUksR0FBRyxZQUFZLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtBQUMzRCxNQUFNLE9BQU8sR0FBRyxDQUFDO0FBQ2pCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO0FBQzVELE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUIsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUN2QixNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLEtBQUssTUFBTTtBQUNYLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO0FBQy9CLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUs7QUFDbkMsUUFBUSxLQUFLLEVBQUUsT0FBTyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJO0FBQ3BELFFBQVEsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsS0FBSztBQUNqRCxPQUFPLENBQUMsQ0FBQztBQUNULEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLFFBQVE7QUFDakIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxRQUFRLEtBQUssVUFBVSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztBQUNoRixHQUFHO0FBQ0g7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ2UsTUFBTSxPQUFPLENBQUM7QUFDN0I7QUFDQSxFQUFFLFdBQVcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ2hDLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLO0FBQ3hDLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtBQUNwQyxRQUFRLElBQUksRUFBRSxHQUFHLFlBQVksU0FBUyxDQUFDLEVBQUU7QUFDekMsVUFBVSxHQUFHLEdBQUcsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hDLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxHQUFHLENBQUM7QUFDbkIsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN0QyxLQUFLLENBQUMsQ0FBQztBQUNQO0FBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPO0FBQ25DLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7QUFDaEMsT0FBTyxNQUFNLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDeEM7QUFDQSxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtBQUMxQyxNQUFNLEdBQUcsR0FBRztBQUNaLFFBQVEsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUNuQyxPQUFPO0FBQ1AsTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFO0FBQ2YsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbEMsT0FBTztBQUNQLEtBQUssQ0FBQyxDQUFDO0FBQ1A7QUFDQSxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtBQUM5QyxNQUFNLEdBQUcsR0FBRztBQUNaLFFBQVEsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztBQUN2QyxPQUFPO0FBQ1AsTUFBTSxHQUFHLEdBQUc7QUFDWixRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztBQUMzRSxPQUFPO0FBQ1AsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0g7QUFDQSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHO0FBQ3RCLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUM5QixJQUFJLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0FBQ0EsSUFBSSxPQUFPO0FBQ1gsTUFBTSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNwRSxLQUFLLENBQUM7QUFDTixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFO0FBQ3RCLElBQUkrZCxRQUFNLENBQUMsT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUM7QUFDekMsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdEMsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRTtBQUNoQixJQUFJQSxRQUFNLENBQUMsT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUM7QUFDekMsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbEMsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRTtBQUNyQixJQUFJLElBQUksUUFBUSxDQUFDO0FBQ2pCLElBQUksSUFBSSxPQUFPLFdBQVcsS0FBSyxVQUFVLEVBQUU7QUFDM0MsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDO0FBQzdCLEtBQUssTUFBTTtBQUNYLE1BQU0sTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUM7QUFDbkQsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzdDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLEtBQUssQ0FBQyxZQUFZLEVBQUU7QUFDdEIsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRSxPQUFPLENBQUMsR0FBRyxJQUFJLEVBQUU7QUFDbkIsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDekMsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLENBQUMsR0FBRyxJQUFJLEVBQUU7QUFDbkIsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDekMsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsR0FBRyxJQUFJLEVBQUU7QUFDbEIsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDeEMsR0FBRztBQUNI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akMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7RUFDbkIsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7RUFDNUIsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDdEIsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDNUIsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDM0IsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDM0IsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDM0IsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDdkIsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUNqQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUMzQixTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztFQUN4QixNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUNyQixVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQztFQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUN6QixlQUFlLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztFQUMvQixVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUMzQixXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztFQUN4QixVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUMzQixXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUM1QixhQUFhLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQztFQUM1QixnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQy9CLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0VBQzNCLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0VBQzVCLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3RCLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQzdCLGNBQWMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQy9CLGVBQWUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0VBQzlCLGVBQWUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQzdCLGVBQWUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQzdCLGVBQWUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQzlCLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0VBQzNCLFVBQVUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0VBQzFCLGFBQWEsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQzVCLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQzFCLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQzFCLFlBQVksRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQzVCLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQzFCLGFBQWEsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQzlCLGFBQWEsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQzVCLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0VBQ3hCLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQzVCLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQzdCLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0VBQ3JCLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQzNCLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQ3ZCLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0VBQ3BCLGFBQWEsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0VBQzdCLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQ3ZCLFVBQVUsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQzNCLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQzFCLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQzFCLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0VBQ3RCLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxD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QUFHLENBQUM7RUFDN0IsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDNUIsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDNUIsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDM0IsYUFBYSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDOUIsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7RUFDbkIsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDMUIsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDdEIsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDM0IsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDdkIsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDekIsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDekIsZUFBZSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDaEMsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDNUIsZUFBZSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDaEMsZUFBZSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDaEMsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDN0IsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDNUIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDdEIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDdkIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDdkIsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDN0IsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7RUFDdkIsZUFBZSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7RUFDL0IsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDbEIsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDNUIsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDM0IsYUFBYSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDNUIsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDekIsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDNUIsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDekIsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDM0IsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDdkIsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDekIsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDMUIsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7RUFDM0IsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDNUIsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDNUIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDdkIsYUFBYSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDNUIsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDM0IsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDdEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDckIsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDMUIsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDdkIsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDM0IsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDekIsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDeEIsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDeEIsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7RUFDN0IsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFDdkIsYUFBYSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDN0IsQ0FBQTs7Ozs7Ozs7Ozs7O0FDdEpEO0NBQ0EsTUFBTSxXQUFXLEdBQUdybUIsZ0JBQUEsRUFBcUIsQ0FBQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0NBQ0EsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO0NBQzNCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtFQUMzQyxlQUFlLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3hDO0FBQ0Q7QUFDQSxDQUFBLE1BQU0sT0FBTyxHQUFHO0VBQ2YsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO0VBQ2pDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQztFQUNqQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7RUFDakMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO0VBQ2pDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztFQUNuQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7RUFDakMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO0VBQ2pDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQztBQUNsQyxFQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEMsRUFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVDLEVBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxQyxFQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUMsRUFBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDNUMsRUFBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDcEQsRUFBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLEVBQUMsQ0FBQztBQUNGO0FBQ0EsQ0FBYyxXQUFBLEdBQUcsT0FBTyxDQUFDO0FBQ3pCO0FBQ0E7Q0FDQSxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7RUFDekMsSUFBSSxFQUFFLFVBQVUsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtHQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixHQUFHLEtBQUssQ0FBQyxDQUFDO0dBQ3ZEO0FBQ0Y7RUFDQyxJQUFJLEVBQUUsUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0dBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLEdBQUcsS0FBSyxDQUFDLENBQUM7R0FDN0Q7QUFDRjtBQUNBLEVBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFO0dBQzdELE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLEdBQUcsS0FBSyxDQUFDLENBQUM7R0FDL0Q7QUFDRjtFQUNDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNDLEVBQUMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ2hDLEVBQUMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzlCLEVBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDdEUsRUFBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztFQUNqRTtBQUNEO0FBQ0EsQ0FBQSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRTtFQUNoQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3ZCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDdkIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4QixFQUFDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQixFQUFDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQixFQUFDLE1BQU0sS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDeEIsSUFBSSxDQUFDLENBQUM7RUFDTixJQUFJLENBQUMsQ0FBQztBQUNQO0FBQ0EsRUFBQyxJQUFJLEdBQUcsS0FBSyxHQUFHLEVBQUU7R0FDaEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNSLEdBQUUsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7R0FDckIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDdEIsR0FBRSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtHQUNyQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDMUIsR0FBRSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtHQUNyQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUM7R0FDeEI7QUFDRjtBQUNBLEVBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzQjtBQUNBLEVBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0dBQ1YsQ0FBQyxJQUFJLEdBQUcsQ0FBQztHQUNUO0FBQ0Y7RUFDQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsRUFBQyxJQUFJLEdBQUcsS0FBSyxHQUFHLEVBQUU7R0FDaEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNSLEdBQUUsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUU7R0FDcEIsQ0FBQyxHQUFHLEtBQUssSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDMUIsR0FBRSxNQUFNO0dBQ04sQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0dBQzVCO0FBQ0Y7QUFDQSxFQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDOUIsRUFBQyxDQUFDO0FBQ0Y7QUFDQSxDQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLFVBQVUsR0FBRyxFQUFFO0VBQ2hDLElBQUksSUFBSSxDQUFDO0VBQ1QsSUFBSSxJQUFJLENBQUM7RUFDVCxJQUFJLElBQUksQ0FBQztFQUNULElBQUksQ0FBQyxDQUFDO0VBQ04sSUFBSSxDQUFDLENBQUM7QUFDUDtFQUNDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDdkIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUN2QixNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLEVBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdCLEVBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwQyxFQUFDLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzVCLEdBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEdBQUUsQ0FBQztBQUNIO0FBQ0EsRUFBQyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7R0FDZixDQUFDLEdBQUcsQ0FBQyxDQUFDO0dBQ04sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNSLEdBQUUsTUFBTTtBQUNSLEdBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFDZixHQUFFLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsR0FBRSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLEdBQUUsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQjtBQUNBLEdBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2YsSUFBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNuQixJQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQ25CLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztBQUM3QixJQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQ25CLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztJQUMxQjtBQUNIO0FBQ0EsR0FBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFDVixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ1YsSUFBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtJQUNqQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ1A7R0FDRDtBQUNGO0FBQ0EsRUFBQyxPQUFPO0dBQ04sQ0FBQyxHQUFHLEdBQUc7R0FDUCxDQUFDLEdBQUcsR0FBRztHQUNQLENBQUMsR0FBRyxHQUFHO0FBQ1QsR0FBRSxDQUFDO0FBQ0gsRUFBQyxDQUFDO0FBQ0Y7QUFDQSxDQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLFVBQVUsR0FBRyxFQUFFO0FBQ2pDLEVBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLEVBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLEVBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0VBQ0MsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0M7QUFDQSxFQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDOUIsRUFBQyxDQUFDO0FBQ0Y7QUFDQSxDQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLFVBQVUsR0FBRyxFQUFFO0VBQ2pDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDdkIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUN2QixNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hCO0FBQ0EsRUFBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekMsRUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEMsRUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEMsRUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEM7QUFDQSxFQUFDLE9BQU8s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QUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDdEQsRUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUN0RDtBQUNBLEVBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDcEMsRUFBQyxDQUFDO0FBQ0Y7QUFDQSxDQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLFVBQVUsR0FBRyxFQUFFO0VBQ2hDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLEVBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCO0VBQ0MsQ0FBQyxJQUFJLE1BQU0sQ0FBQztFQUNaLENBQUMsSUFBSSxHQUFHLENBQUM7RUFDVCxDQUFDLElBQUksT0FBTyxDQUFDO0FBQ2Q7RUFDQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDN0QsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQzdELENB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QUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU07QUFDeEMsR0FBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNO0FBQ3hDLEdBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUN2QyxHQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDdkMsR0FBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ3ZDLEdBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTTtHQUNyQztBQUNGO0FBQ0E7QUFDQSxFQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEVBQUMsQ0FBQztBQUNGO0FBQ0EsQ0FBQSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLElBQUksRUFBRTtFQUNsQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3hCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDeEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUN4QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pCO0VBQ0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDM0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDM0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUM7QUFDQSxFQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEVBQUMsQ0FBQztBQUNGO0FBQ0EsQ0FBQSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRTtFQUNoQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3ZCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7RUFDdkIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztFQUN2QixJQUFJLENBQUMsQ0FBQztFQUNOLElBQUksQ0FBQyxDQUFDO0VBQ04sSUFBSSxDQUFDLENBQUM7QUFDUDtBQUNBLEVBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsRCxFQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQ2pELEVBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDakQ7QUFDQTtBQUNBLEVBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTO01BQ2IsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUs7S0FDckMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNkO0FBQ0EsRUFBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVM7TUFDYixDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSztLQUNyQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2Q7QUFDQSxFQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUztNQUNiLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLO0tBQ3JDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDZDtBQUNBLEVBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakMsRUFBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqQyxFQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFF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QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxHQUFHLENBQUM7QUFDN0MsRUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDO0FBQzdDO0VBQ0MsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEIsRUFBQyxDQUFDO0FBQ0Y7QUFDQSxDQUFBLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLFVBQVUsSUFBSSxFQUFFO0FBQ3RDO0FBQ0EsRUFBQyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7R0FDaEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7R0FDaEMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7R0FDakI7QUFDRjtFQUNDLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWjtFQUNDLElBQUksR0FBRyxDQUFDO0FBQ1QsRUFBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQzFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ3RELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9CO0VBQ0MsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEIsRUFBQyxDQUFDO0FBQ0Y7QUFDQSxDQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLFVB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QUMsQ0FBQztHQUN0QjtBQUNGO0FBQ0EsRUFBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLEVBQUMsQ0FBQztBQUNGO0FBQ0EsQ0FBQSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxVQUFVLEtBQUssRUFBRTtBQUNyQyxFQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZGLEVBQUMsQ0FBQztBQUNGO0FBQ0EsQ0FBQSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxVQUFVLEdBQUcsRUFBRTtBQUNuQyxFQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ2pGLEVBQUMsQ0FBQztBQUNGO0FBQ0EsQ0FBQSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLElBQUksRUFBRTtBQUNuQyxFQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3hFLEVBQUMsQ0FBQztBQUNGO0FBQ0EsQ0FBQSxPQUFPLENBQUMsSUFBSSxDQUFD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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2hDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRWxuQixZQUEwQixDQUFDLENBQUM7QUFDL0Q7QUFDQSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzNDO0FBQ0EsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFO0FBQzFDLENBQUMsR0FBRyxHQUFHO0FBQ1As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QUFPLENBQUMsU0FBUyxHQUFHLEVBQUU7QUFDOUMsSUFBSSxJQUFJLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFdBQVcsRUFBRTtBQUM3QyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUMsS0FBSztBQUNMLEdBQUcsQ0FBQyxDQUFDO0FBQ0w7QUFDQSxFQUFFLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7O0FDWkQsSUFBQUMsV0FBYyxHQUFHO0FBQ2pCLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3BFLElBQUksRUFBRSxPQUFPLEVBQUUs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QU07QUFDdkMsU0FBUyxHQUFHLElBQUksTUFBTSxDQUFDO0FBQ3ZCLFNBQVMsR0FBRyxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDO0FBQ3hDLFNBQVMsR0FBRyxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDO0FBQ3hDLFNBQVMsR0FBRyxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDO0FBQ3hDLFNBQVMsR0FBRyxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDO0FBQ3hDLFNBQVMsR0FBRyxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDO0FBQ3hDLFNBQVMsR0FBRyxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDO0FBQ3hDLFNBQVMsR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDO0FBQzFDLFNBQVMsR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFDRDtBQUNBLFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRTtBQUN2QixFQUFFLElBQUksR0FBRyxHQUFHLEVBQUM7QUFDYixFQUFFLElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsRUFBQztBQUNoQyxFQUFFLElBQUksSUFBRztBQUNUO0FBQ0EsRUFBRSxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEtBQUs7QUFDcEU7QUFDQSxFQUFFLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBRTtBQUNyQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUM7QUFDckMsSUFBSSxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENB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LElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLEdBQUc7QUFDWixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztBQUM5QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsVUFBVSxHQUFHO0FBQ2YsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUNkO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssT0FBTyxFQUFFO0FBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0UsS0FBSyxNQUFNO0FBQ1gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFLEtBQUs7QUFDTCxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsU0FBUyxDQUFDO0FBQzFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2xCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxPQUFPLEdBQUc7QUFDWixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFNBQVMsR0FBRztBQUNkLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1QixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFO0FBQ25CLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNFLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQzNCLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTK2dCLGVBQWEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pDLEVBQUUsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSztBQUNqQyxJQUFJLE1BQU0sSUFBSSxNQUFNLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNyQztBQUNBLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtBQUNyQyxNQUFNLGVBQWUsRUFBRSxDQUFDO0FBQ3hCLE1BQU0sTUFBTSxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDN0IsTUFBTSxPQUFPO0FBQ2IsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsZUFBZSxDQUFDO0FBQ3RDLElBQUksSUFBSSxPQUFPLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztBQUNqRCxJQUFJLElBQUksS0FBSyxLQUFLLE9BQU8sRUFBRTtBQUMzQixNQUFNLE9BQU8sR0FBRy9nQixRQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3JDLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxJQUFJLE9BQU8sQ0FBQztBQUN0QixHQUFHLENBQUMsQ0FBQztBQUNMO0FBQ0EsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUNoQjs7QUM1TkE7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNlLE1BQU0sWUFBWSxTQUFTNGdCLE1BQUksQ0FBQztBQUMvQyxFQUFFLFdBQVcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRTtBQUN0QyxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUU7QUFDM0IsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3RDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztBQUMxQixNQUFNLEdBQUcsRUFBRSxHQUFHO0FBQ2QsTUFBTSxJQUFJLEVBQUUsd0JBQXdCO0FBQ3BDLE1BQU0sS0FBSyxFQUFFLE1BQU07QUFDbkIsS0FBSyxDQUFDLENBQUM7QUFDUDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxNQUFNLEtBQUs7QUFDcEMsTUFBTSxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7QUFDMUIsUUFBUSxPQUFPLDhCQUE4QixDQUFDO0FBQzlDLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxNQUFNLEtBQUssTUFBTSxDQUFDO0FBQy9CLEtBQUssQ0FBQztBQUNOO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3RGO0FBQ0EsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7QUFDWCxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ25CO0FBQ0E7QUFDQSxJQUFJLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEMsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCO0FBQzlDLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUN6VixPQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM1RCxLQUFLLENBQUM7QUFDTixJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RELElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUTtBQUN0QyxPQUFPLElBQUksQ0FBQ3lTLGFBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUMsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbEI7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3RCLElBQUksSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3JDLElBQUksSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQzNCO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFO0FBQ3BDLE1BQU0sT0FBTyxJQUFJNWQsUUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUMsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUU7QUFDM0MsTUFBTSxNQUFNLFVBQVUsR0FBRytnQixlQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzNFLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDMUYsTUFBTSxPQUFPLElBQUksY0FBYyxDQUFDO0FBQ2hDLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzVCO0FBQ0EsSUFBSSxJQUFJLEtBQUssRUFBRTtBQUNmLE1BQU0sYUFBYSxHQUFHL2dCLFFBQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2hELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDZCxNQUFNLGFBQWEsR0FBR0EsUUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDL0MsR0FBRztBQUNIO0FBQ0EsRUFBRSxlQUFlLENBQUMsS0FBSyxFQUFFO0FBQ3pCLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDOUI7QUFDQSxJQUFJLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BGLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNuQixNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQzFCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFVBQVUsR0FBRztBQUNmLElBQUksSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUs7QUFDekMsTUFBTSxNQUFNLElBQUksTUFBTSxDQUFDO0FBQ3ZCO0FBQ0EsTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO0FBQ3ZDLFFBQVEsTUFBTSxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDL0IsUUFBUSxPQUFPO0FBQ2YsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ3RELE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUU7QUFDM0MsUUFBUSxTQUFTLEdBQUdBLFFBQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0MsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLElBQUksU0FBUyxDQUFDO0FBQzFCLEtBQUssQ0FBQyxDQUFDO0FBQ1A7QUFDQSxJQUFJLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRTtBQUNqQixJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxNQUFNLEVBQUU7QUFDaEMsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUM1QixNQUFNLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDO0FBQy9CLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDL0IsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUU7QUFDbEIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztBQUM3QixJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyRSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQzlDO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNsQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENB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TSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU07QUFDbEYsS0FBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNO0FBQ2xGLEtBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTTtBQUNsRixLQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU07QUFDbEYsS0FBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNO0FBQ2xGLEtBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTTtBQUNsRixLQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU07S0FDOUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNO0FBQ2xELElBQUcsQ0FBQztHQUNGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxJQUFJLEVBQUUsR0FBRyxFQUFFO0FBQ3RDLEtBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ2hDLEtBQUksSUFB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QUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTTtBQUNsRixLQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU07QUFDbEYsS0FBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNO0FBQ2xGLEtBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTTtBQUNsRixLQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU07QUFDbEYsS0FBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNO0FBQ2xGLEtBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTTtBQUNsRixJQUFHLENBQUM7QUFDSjtBQUNBLEdBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUM7QUFDOUIsRUFBQyxDQUFDO0NBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUEsTUFBQSxDQUFBLE9BQUEsQ0FBQSxNQUFBLEdBQXdCLFdBQVc7QUFDbkMsR0FBRSxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVc7S0FDckIsT0FBTyxRQUFRLENBQUM7QUFDcEIsSUFBRyxDQUFDO0FBQ0osR0FBRSxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVc7S0FDekIsT0FBTyxJQUFJLENBQUM7QUFDaEIsSUFBRyxDQUFDO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7R0FDRSxJQUFJLENBQUMsV0FBVyxHQUFHO0FBQ3JCLEtBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTTtBQUNsRixLQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU07QUFDbEYsS0FBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNO0FBQ2xGLEtBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTTtBQUNsRixLQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU07QUFDbEYsS0FBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNO0FBQ2xGLEtBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUs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QUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBLEdBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUM7QUFDaEMsR0FBRSxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQztBQUM1QjtBQUNBLEdBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDdEIsR0FBRSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNwQjtHQUNFLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDakI7QUFDQTtBQUNBO0FBQ0E7R0FDRSxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsS0FBSyxFQUFFLEtBQUssRUFBRTtBQUN2QyxLQUFJLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNsQjtBQUNBLEtBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO0FBQ2hELEtBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO0FBQ2hELEtBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQy9DLEtBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQy9DLEtBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQy9DLEtBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO0tBQzNDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQy9DO0tB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SSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE1BQUssQ0FBQztBQUNOLElBQUcsQ0FBQztBQUNKO0FBQ0EsR0FBRSxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVc7QUFDM0IsS0FBSSxPQUFPO0FBQ1gsT0FBTSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUU7QUFDL0IsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFFBQU8sQ0FBQztBQUNSLE9BQU0sSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFO0FBQy9CLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixRQUFPLENBQUM7QUFDUixPQUFNLElBQUksY0FBYyxDQUFDLElBQUksRUFBRTtBQUMvQixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsUUFBTyxDQUFDO0FBQ1IsT0FBTSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUU7QUFDL0IsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFFBQU8sQ0FBQztBQUNSLE9BQU0sSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFO0FBQy9CLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixRQUFPLENBQUM7QUFDUixPQUFNLElBQUksY0FBYyxDQUFDLElBQUksRUFBRTtBQUMvQixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsUUFBTyxDQUFDO0FBQ1IsT0FBTSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUU7QUFDL0IsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFFBQU8sQ0FBQztBQUNSLE9BQU0sSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFO0FBQy9CLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixRQUFPLENBQUM7QUFDUixPQUFNLElBQUksY0FBYyxDQUFDLElBQUksRUFBRTtBQUMvQixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsUUFBTyxDQUFDO0FBQ1IsT0FBTSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUU7QUFDL0IsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFFBQU8sQ0FBQztBQUNSLE1BQUssQ0FBQztBQUNOLElBQUcsQ0FBQztBQUNKO0FBQ0EsR0FBRSxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFO0tBQ3hCLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFFBQVEsSUFBSSxjQUFjLEdBQUcsWUFBWSxDQUFDO0FBQ2pFLElBQUcsQ0FBQztBQUNKLEVBQUMsQ0FBQztDQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDL0M7QUFDQTtBQUNBLENBQUEsTUFBQSxDQUFBLE9BQUEsQ0FBQSxVQUFBLEdBQTRCLFdBQVc7QUFDdkMsR0FBRSxJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVc7QUFDNUIsS0FBSSxPQUFPO0FBQ1gsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE1BQUssQ0FBQztLQUNIO0FBQ0g7QUFDQSxHQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVztBQUMzQixLQUFJLE9BQU87QUFDWCxPQUFNLElBQUksY0FBYyxDQUFDLElBQUksRUFBRTtBQUMvQixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsUUFBTyxDQUFDO0FBQ1IsT0FBTSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUU7QUFDL0IsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFFBQU8sQ0FBQztBQUNSLE9BQU0sSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFO0FBQy9CLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixRQUFPLENBQUM7QUFDUixPQUFNLElBQUksY0FBYyxDQUFDLElBQUksRUFBRTtBQUMvQixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsUUFBTyxDQUFDO0FBQ1IsTUFBSyxDQUFDO0FBQ04sSUFBRyxDQUFDO0FBQ0o7QUFDQSxHQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUU7S0FDeEIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxJQUFJLGNBQWMsR0FBRyxZQUFZLENBQUM7QUFDakUsSUFBRyxDQUFDO0FBQ0osRUFBQyxDQUFDO0NBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvQztBQUNBO0FBQ0EsQ0FBQSxNQUFBLENBQUEsT0FBQSxDQUFBLFVBQUEsR0FBNEIsV0FBVztBQUN2QyxHQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsV0FBVztBQUM1QixLQUFJLE9BQU87QUFDWCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsTUFBSyxDQUFDO0FBQ04sSUFBRyxDQUFDO0FBQ0o7QUFDQSxHQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVztBQUMzQixLQUFJLE9BQU87QUFDWCxPQUFNLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3BGLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsT0FBTSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUNwRixPQUFNLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3BGLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsT0FBTSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUNwRixPQUFNLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3BGLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsTUFBSyxDQUFDO0FBQ04sSUFBRyxDQUFDO0FBQ0o7QUFDQSxHQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUU7S0FDeEIsT0FBTyxZQUFZLENBQUM7QUFDeEIsSUFBRyxDQUFDO0FBQ0o7QUFDQSxHQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVztLQUN6QixPQUFPLElBQUksQ0FBQztBQUNoQixJQUFHLENBQUM7QUFDSixFQUFDLENBQUM7Q0FDRixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQy9DO0FBQ0E7QUFDQSxDQUFBLE1BQUEsQ0FBQSxPQUFBLENBQUEsVUFBQSxHQUE0QixXQUFXO0FBQ3ZDLEdBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXO0FBQzVCLEtBQUksT0FBTztBQUNYLE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxNQUFLLENBQUM7QUFDTixJQUFHLENBQUM7QUFDSjtBQUNBLEdBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXO0FBQzNCLEtBQUksT0FBTztBQUNYLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsT0FBTSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUNwRixPQUFNLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3BGLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsT0FBTSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUNwRixPQUFNLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3BGLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsT0FBTSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUNwRixNQUFLLENBQUM7QUFDTixJQUFHLENBQUM7QUFDSjtBQUNBLEdBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsRUFBRTtLQUN4QixPQUFPLFlBQVksQ0FBQztBQUN4QixJQUFHLENBQUM7QUFDSjtBQUNBLEdBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXO0tBQ3pCLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLElBQUcsQ0FBQztBQUNKLEVBQUMsQ0FBQztDQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDL0M7QUFDQTtBQUNBLENBQUEsTUFBQSxDQUFBLE9BQUEsQ0FBQSxVQUFBLEdBQTRCLFdBQVc7QUFDdkMsR0FBRSxJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVc7QUFDNUIsS0FBSSxPQUFPO0FBQ1gsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE1BQUssQ0FBQztBQUNOLElBQUcsQ0FBQztBQUNKO0FBQ0EsR0FBRSxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVc7QUFD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LEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsTUFBSyxDQUFDO0FBQ04sSUFBRyxDQUFDO0FBQ0o7QUFDQSxHQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVztBQUMzQixLQUFJLE9BQU87QUFDWCxPQUFNLElBQUksY0FBYyxDQUFDLElBQUksRUFBRTtBQUMvQixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsUUFBTyxDQUFDO0FBQ1IsT0FBTSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUU7QUFDL0IsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFNBQVEsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDdEYsU0FBUSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUN0RixTQUFRLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3RGLFFBQU8sQ0FBQztBQUNSLE1BQUssQ0FBQztBQUNOLElBQUcsQ0FBQztBQUNKO0FBQ0EsR0FBRSxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFO0tBQ3hCLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFFBQVEsSUFBSSxjQUFjLEdBQUcsWUFBWSxDQUFDO0FBQ2pFLElBQUcsQ0FBQztBQUNKO0FBQ0EsR0FBRSxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVc7S0FDekIsT0FBTyxJQUFJLENBQUM7QUFDaEIsSUFBRyxDQUFDO0FBQ0o7QUFDQSxFQUFDLENBQUM7Q0FDRixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQy9DO0FBQ0E7QUFDQSxDQUFBLE1BQUEsQ0FBQSxPQUFBLENBQUEsVUFBQSxHQUE0QixXQUFXO0FBQ3ZDLEdBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXO0FBQzVCLEtBQUksT0FBTztBQUNYLE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxNQUFLLENBQUM7QUFDTixJQUFHLENBQUM7QUFDSjtBQUNBLEdBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXO0FBQzNCLEtBQUksT0FBTztBQUNYLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsT0FBTSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUNwRixPQUFNLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3BGLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsT0FBTSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUNwRixPQUFNLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3BGLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsT0FBTSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUNwRixNQUFLLENBQUM7QUFDTixJQUFHLENBQUM7QUFDSjtBQUNBLEdBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsRUFBRTtLQUN4QixPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLElBQUksY0FBYyxHQUFHLFlBQVksQ0FBQztBQUNqRSxJQUFHLENBQUM7QUFDSjtBQUNBLEdBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXO0tBQ3pCLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLElBQUcsQ0FBQztBQUNKLEVBQUMsQ0FBQztDQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDL0M7QUFDQTtBQUNBLENBQUEsTUFBQSxDQUFBLE9BQUEsQ0FBQSxZQUFBLEdBQThCLFdBQVc7QUFDekMsR0FBRSxJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVc7QUFDNUIsS0FBSSxPQUFPO0FBQ1gsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FB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QUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsTUFBSyxDQUFDO0FBQ04sSUFBRyxDQUFDO0FBQ0o7QUFDQSxHQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVztBQUMzQixLQUFJLE9BQU87QUFDWCxPQUFNLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3BGLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsT0FBTSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUNwRixPQUFNLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3BGLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsT0FBTSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUNwRixPQUFNLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO0FBQ3BGLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsTUFBSyxDQUFDO0FBQ04sSUFBRyxDQUFDO0FBQ0o7QUFDQSxHQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUU7S0FDeEIsT0FBTyxjQUFjLENBQUM7QUFDMUIsSUFBRyxDQUFDO0FBQ0o7QUFDQSxHQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVztLQUN6QixPQUFPLElBQUksQ0FBQztBQUNoQixJQUFHLENBQUM7QUFDSixFQUFDLENBQUM7Q0FDRixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2pEO0FBQ0E7QUFDQSxDQUFBLE1BQUEsQ0FBQSxPQUFBLENBQUEsTUFBQSxHQUF3QixXQUFXO0FBQ25DLEdBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXO0FBQzVCLEtBQUksT0FBTztBQUNYLE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxPQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBQ3BELE9BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDcEQsT0FBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUNwRCxNQUFLLENBQUM7QUFDTixJQUFHLENBQUM7QUFDSjtBQUNBLEdBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXO0FBQzNCLEtBQUksT0FBTztBQUNYLE9BQU0sUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVE7QUFDcEYsT0FBTSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUTtBQUNwRixPQUFNLFFBQVEs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QUNBLENBQUEsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsV0FBVztHQUN0QztBQUNEO0FBQ0E7QUFDQSxDQUFBLFNBQVMsV0FBVyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDckMsS0FBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7RUFDcEM7QUFDRDtBQUNBLENBQUEsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUU7QUFDNUM7QUFDQSxLQUFJLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDbkMsS0FBSSxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDeEMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUM7QUFDM0IsS0FBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxTQUFRLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QyxTQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUN0QztBQUNMLEtBQUksT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0dBQ2xDO0FBQ0Q7QUFDQSxDQUFBLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLFdBQVc7QUFDdkMsR0FBQTs7Ozs7Ozs7OztBQ3RFQTtBQUNBO0FBQ0E7QUFDQSxDQUFBLFFBQWMsR0FBRztBQUNqQjtLQUNJLE9B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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDeGlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQSxRQUFjLEdBQUc7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSSxVQUFVLEVBQUU7U0FDUixJQUFJLEVBQUUsT0FBTztBQUNyQixTQUFRLEtBQUssRUFBRSxXQUFXLEVBQUUsT0FBTyxVQUFpQyxFQUFFO1NBQzlELFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQztBQUNuRCxTQUFRLGNBQWMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7TUFDL0M7S0FDRCxZQUFZLEVBQUUsVUFBVTtLQUN4QixTQUFTLEVBQUUsVUFBVTtLQUNyQixNQUFNLEVBQUUsVUFBVTtLQUNsQixZQUFZLEVBQUUsVUFBVTtLQUN4QixPQUFPLEVBQUUsVUFBVTtLQUNuQixPQUFPLEVBQUUsVUFBVTtLQUNuQixZQUFZLEVBQUUsVUFBVTtLQUN4QixPQUFPLEVBQUUsVUFBVTtLQUNuQixLQUFLLEVBQUUsVUFBVTtLQUNqQixPQUFPLEVBQUUsVUFBVTtBQUN2QjtBQUNBLEtBQUksT0FBTyxFQUFFO1NBQ0wsSUFBSSxFQUFFLE9BQU87QUFDckIsU0FBUSxLQUFLLEVBQUUsV0FBVyxFQUFFLE9BQU8sVUFBOEIsRUFBRTtTQUMzRCxTQUFTLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUM7TUFDOUM7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0tBQ0ksUUFBUSxFQUFFLE9BQU87S0FDakIsVUFBVSxFQUFFLE9BQU87S0FDbkIsWUFBWSxFQUFFLE9BQU87S0FDckIsVUFBVSxFQUFFLE9BQU87S0FDbkIsaUJBQWlCLEVBQUUsT0FBTztLQUMxQixPQUFPLEVBQUUsT0FBTztBQUNwQjtBQUNBO0tBQ0ksWUFBWSxFQUFFLE9BQU87S0FDckIsT0FBTyxFQUFFLE9BQU87S0FDaEIsS0FBSyxFQUFFLE9BQU87QUFDbEIsS0FBSSxPQUFPLEVBQUU7U0FDTCxJQUFJLEVBQUUsT0FBTztBQUNyQixTQUFRLEtBQUssRUFBRSxXQUFXLEVBQUUsT0FBTyxVQUE4QixFQUFFO01BQzlEO0FBQ0w7QUFDQTtBQUNBLEtBQUksS0FBSyxFQUFFO1NBQ0gsSUFBSSxFQUFFLE9BQU87U0FDYixLQUFLLEVBQUUsV0FBVyxFQUFFLE9BQU8sVUFBOEIsQ0FBQyxNQUFNLENBQUMsVUFBa0MsQ0FBQyxFQUFFO01BQ3pHO0tBQ0QsTUFBTSxFQUFFLEtBQUs7S0FDYixTQUFTLEVBQUUsS0FBSztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFJLFNBQVMsRUFBRTtTQUNQLElBQUksRUFBRSxPQUFPO1NBQ2IsS0FBSyxFQUFFLFdBQVcsRUFBRSxPQUFPLFVBQThCLENBQUMsTUFBTSxDQUFDLFVBQWtDLENBQUMsRUFBRTtBQUM5RyxTQUFRLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxVQUF1QyxFQUFFO0FBQzlFLFNBQVEsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzlCLFNBQVEsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQztNQUMzQjtBQUNMO0tBQ0ksU0FBUyxFQUFFLFNBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7S0FDSSxZQUFZLEVBQUUsT0FBTztLQUNyQixPQUFPLEVBQUUsT0FBTztLQUNoQixLQUFLLEVBQUUsT0FBTztBQUNsQixLQUFJLE9BQU8sRUFBRTtTQUNMLElBQUksRUFBRSxPQUFPO0FBQ3JCLFNBQVEsS0FBSyxFQUFFLFdBQVcsRUFBRSxPQUFPLFVBQThCLEVBQUU7TUFDOUQ7QUFDTDtLQUNJLFNBQVMsRUFBRSxPQUFPO0tBQ2xCLGVBQWUsRUFBRSxPQUFPO0tBQ3hCLE9BQU8sRUFBRSxPQUFPO0tBQ2hCLFVBQVUsRUFBRSxPQUFPO0tBQ25CLFFBQVEsRUFBRSxPQUFPO0tBQ2pCLGFBQWEsRUFBRSxPQUFPO0tBQ3RCLGFBQWEsRUFBRSxPQUFPO0tBQ3RCLFNBQVMsRUFBRSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0tBQ0ksWUFBWSxFQUFFLE9BQU87S0FDckIsT0FBTyxFQUFFLE9BQU87S0FDaEIsS0FBSyxFQUFFLE9BQU87QUFDbEIsS0FBSSxPQUFPLEVBQUU7U0FDTCxJQUFJLEVBQUUsT0FBTztBQUNyQixTQUFRLEtBQUssRUFBRSxXQUFXLEVBQUUsT0FBTyxVQUE4QixFQUFFO01BQzlEO0FBQ0w7QUFDQTtLQUNJLE1BQU0sRUFBRSxXQUFXO0FBQ3ZCLEtBQUksV0FBVyxFQUFFO1NBQ1QsSUFBSSxFQUFFLE9BQU87U0FDYixLQUFLLEVBQUUsV0FBVyxFQUFFLE9BQU8sVUFBOEIsQ0FBQyxNQUFNLENBQUMsVUFBbUMsQ0FBQyxFQUFFO0FBQy9HLFNBQVEsY0FBYyxFQUFFLENBQUMsTUFBTSxDQUFDO01BQzNCO0FBQ0w7S0FDSSxRQUFRLEVBQUUsV0FBVztLQUNyQixRQUFRLEVBQUUsV0FBVztLQUNyQixRQUFRLEVBQUUsV0FBVztFQUN4QixDQUFBOzs7Ozs7Ozs7O0FDOUtEO0FBQ0E7QUFDQTtBQUNBLEVBQUEsSUFBSSxPQUFPLEdBQUc7QUFDZCxNQUFJQSxlQUFxQixFQUFBO0FBQ3pCLE1BQUlVLFlBQWtCLEVBQUE7QUFDdEIsTUFBSUUsV0FBaUIsRUFBQTtBQUNyQixNQUFJaUIsZ0JBQXVCLEVBQUE7QUFDM0IsTUFBSWdCLGVBQXNCLEVBQUE7QUFDMUIsTUFBSUMsd0JBQWdDLEVBQUE7QUFDcEMsTUFBSVMsZ0JBQXVCLEVBQUE7QUFDM0IsTUFBSUUsZUFBc0IsRUFBQTtBQUMxQixHQUFDLENBQUM7QUFDRjtBQUNBO0FBQ0EsRUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxNQUFJLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixNQUFJLEtBQUssSUFBSSxHQUFHLElBQUksTUFBTTtBQUMxQixVQUFRLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7Y0FDakQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QyxHQUFBOzs7Ozs7Ozs7OztBQ3BCQTtBQUNBLENBQUEsSUFBSSxNQUFNLEdBQUd6RCxZQUFpQixDQUFDLE1BQU07QUFDckMsS0FBSSxTQUFTLEdBQUdVLFlBQWlCLENBQUMsU0FBUyxDQUFDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLENBQWMsT0FBQSxHQUFHLFNBQVMsS0FBSyxFQUFFO0FBQ2pDO0FBQ0E7S0FDSSxLQUFLLENBQUMsWUFBWSxHQUFHLFNBQVMsWUFBWSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUU7QUFDbEUsU0FBUSxPQUFPLElBQUksc0JBQXNCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7T0FDbkY7QUFDTDtLQUNJLEtBQUssQ0FBQyxZQUFZLEdBQUcsU0FBUyxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRTtBQUNsRSxTQUFRLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztPQUNuRjtBQUNMO0FBQ0EsS0FBSSxLQUFLLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztBQUNqQztBQUNBO0FBQ0E7QUFDQSxLQUFJLEtBQUssQ0FBQyxzQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztBQUMxRCxLQUFJLEtBQUssQ0FBQyxzQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztLQUN0RCxLQUFLLENBQUMsUUFBUSxHQUFHLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7QUFDOUQsRUFBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsQ0FBQSxTQUFTLHNCQUFzQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDL0MsS0FBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNyQixLQUFJLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0FBQzVCLEtBQUksT0FBTyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7S0FDOUIsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7RUFDakM7QUFDRDtDQUNBLHNCQUFzQixDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUU7QUFDdEUsS0FBSSxXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUU7QUFDbEQsRUFBQyxDQUFDLENBQUM7QUFDSDtDQUNBLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtBQUM5RSxLQUFJLElBQUksT0FBTyxLQUFLLElBQUksUUFBUTtTQUN4QixPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDLENBQUM7QUFDcEYsS0FBSSxJQUFJO1NBQ0EsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekMsU0FBUSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdEMsSUFBSSxFQUFFLENBQUM7TUFDVjtLQUNELE9BQU8sQ0FBQyxFQUFFO0FBQ2QsU0FBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDWDtHQUNKO0FBQ0Q7QUFDQSxDQUFBLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxJQUFJLEVBQUU7QUFDekQsS0FBSSxJQUFJO1NBQ0EsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQyxTQUFRLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN0QyxJQUFJLEVBQUUsQ0FBQztNQUNWO0tBQ0QsT0FBTyxDQUFDLEVBQUU7QUFDZCxTQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNYO0dBQ0o7QUFDRDtBQUNBLENBQUEsc0JBQXNCLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxTQUFTLEVBQUUsRUFBRTtBQUN4RCxLQUFJLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNoQixJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6QixLQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3RCxLQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLFdBQVc7U0FDdEIsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDeEMsTUFBSyxDQUFDLENBQUM7S0FDSCxPQUFPLElBQUksQ0FBQztHQUNmO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQSxTQUFTLHNCQUFzQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDL0MsS0FBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNyQixLQUFJLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0tBQ3hCLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7S0FDMUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7RUFDakM7QUFDRDtDQUNBLHNCQUFzQixDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUU7QUFDdEUsS0FBSSxXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUU7QUFDbEQsRUFBQyxDQUFDLENBQUM7QUFDSDtDQUNBLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtBQUM5RSxLQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztTQUN2QixPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDLENBQUM7QUFDcEYsS0FBSSxJQUFJO1NBQ0EsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekMsU0FBUSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNyRCxJQUFJLEVBQUUsQ0FBQztNQUNWO0tBQ0QsT0FBTyxDQUFDLEVBQUU7QUFDZCxTQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNYO0dBQ0o7QUFDRDtBQUNBLENBQUEsc0JBQXNCLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxTQUFTLElBQUksRUFBRTtBQUN6RCxLQUFJLElBQUk7U0FDQSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLFNBQVEsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDckQsSUFBSSxFQUFFLENBQUM7TUFDVjtLQUNELE9BQU8sQ0FBQyxFQUFFO0FBQ2QsU0FBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDWDtHQUNKO0FBQ0Q7QUFDQSxDQUFBLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsU0FBUyxFQUFFLEVBQUU7QUFDeEQsS0FBSSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7S0FDYixJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6QixLQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2RCxLQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLFdBQVc7QUFDOUIsU0FBUSxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQUssQ0FBQyxDQUFDO0tBQ0gsT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBQTs7Ozs7Ozs7OztBQ3RIQSxDQUFBLElBQUksTUFBTSxHQUFHVixZQUFpQixDQUFDLE1BQU0sQ0FBQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQWMsVUFBQSxHQUFHLFVBQVUsS0FBSyxFQUFFO0FBQ2xDLEtBQUksSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSSxLQUFLLENBQUMsOEJBQThCLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLFVBQVUsQ0FBQyxDQUFDO0FBQ2pHO0FBQ0EsS0FBSSxLQUFLLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxtQkFBbUIsR0FBRztTQUN2RCxJQUFJLFFBQVEsRUFBRSxPQUFPO1NBQ3JCLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDdEI7QUFDQSxTQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsOEJBQThCLEVBQUU7QUFDbkQsYUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLHFHQUFxRyxDQUFDLENBQUM7QUFDakksYUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLHNGQUFzRixDQUFDLENBQUM7QUFDbEgsYUFBWSxPQUFPO1VBQ1Y7QUFDVDtTQUNRLElBQUksbUJBQW1CLEdBQUc7QUFDbEMsYUFBWSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJO0FBQ25GLGFBQVksUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSTtBQUMxRixVQUFTLENBQUM7QUFDVjtBQUNBLFNBQVEsTUFBTSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsR0FBRyxFQUFFO2FBQ3BDLE9BQU8sR0FBRyxJQUFJLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1dBQ3hEO0FBQ1Q7QUFDQTtBQUNBLFNBQVEsSUFBSSxVQUFVLEdBQUdBLFlBQWlCLENBQUMsVUFBVSxDQUFDO0FBQ3REO1NBQ1EsUUFBUSxDQUFDLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0FBQ3BFLFNBQVEsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsU0FBUyxRQUFRLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTthQUMzRCxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNoRTtBQUNBO0FBQ0EsYUFBWSxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7QUFDakQsaUJBQWdCLE9BQU8sUUFBUSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwRjtBQUNBO2FBQ1ksSUFBSSxPQUFPLEtBQUssSUFBSSxXQUFXLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQzthQUMzQyxJQUFJLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM3RCxhQUFZLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztXQUN6RDtBQUNUO1NBQ1EsUUFBUSxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztBQUM5RCxTQUFRLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQVMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO0FBQ2hGO0FBQ0E7QUFDQSxhQUFZLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ2xDLGlCQUFnQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO3FCQUNuQixRQUFRLEdBQUcsTUFBTSxDQUFDO3FCQUNsQixNQUFNLEdBQUcsU0FBUyxDQUFDO2tCQUN0QjtBQUNqQixjQUFhLE1BQU07QUFDbkIsaUJBQWdCLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQztpQkFDcEIsUUFBUSxHQUFHLE1BQU0sQ0FBQztpQkFDbEIsTUFBTSxHQUFHLE1BQU0sQ0FBQztpQkFDaEIsTUFBTSxHQUFHLElBQUksQ0FBQztjQUNqQjtBQUNiO0FBQ0EsYUFBWSxNQUFNLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO2FBQ3RCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO2FBQ3JDLElBQUksQ0FBQyxNQUFNLEVBQUU7aUJBQ1QsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUNuQyxjQUFhLE1BQU07QUFDbkIsaUJBQWdCLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUNqQyxpQkFBZ0IsSUFBSSxNQUFNLEdBQUcsU0FBUyxFQUFFO3FCQUNwQixNQUFNLEdBQUcsU0FBUyxDQUFDO2tCQUN0QjtjQUNKO2FBQ0QsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDaEU7QUFDQTtBQUNBLGFBQVksSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO0FBQ2pELGlCQUFnQixPQUFPLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM3RjtBQUNBLGFBQVksSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDL0QsaUJBQWdCLE1BQU0sSUFBSSxVQUFVLENBQUMsdUNBQXVDLENBQUMsQ0FBQztBQUM5RTtBQUNBO2FBQ1ksSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDckQsYUFBWSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQ3pELGFBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQzthQUNsQyxPQUFPLE1BQU0sQ0FBQztXQUNqQjtBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVEsUUFBUSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7QUFDdEQsU0FBUSxNQUFNLENBQUMsVUFBVSxHQUFHLFNBQVMsUUFBUSxFQUFFO0FBQy9DLGFBQVksT0FBTyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztXQUM5RTtBQUNUO0FBQ0EsU0FBUSxRQUFRLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUN0RCxTQUFRLE1BQU0sQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsR0FBRyxTQUFTLEdBQUcsRUFBRSxRQUFRLEVBQUU7YUFDaEUsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDaEU7QUFDQTtBQUNBLGFBQVksSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO0FBQ2pELGlCQUFnQixPQUFPLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMzRTtBQUNBO2FBQ1ksT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUM7V0FDN0M7QUFDVDtTQUNRLFFBQVEsQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDNUQsU0FBUSxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxTQUFTLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO2FBQ3ZELFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2hFO0FBQ0E7QUFDQSxhQUFZLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztBQUNqRCxpQkFBZ0IsT0FBTyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoRjtBQUNBO2FBQ1ksSUFBSSxPQUFPLEtBQUssSUFBSSxXQUFXLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQzthQUMzQyxJQUFJLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM3RCxhQUFZLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztXQUN6RDtBQUNUO1NBQ1EsUUFBUSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztBQUN0RCxTQUFRLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQVMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO0FBQzVFLGFBQVksSUFBSSxPQUFPLEdBQUcsTUFBTSxFQUFFLE9BQU8sR0FBRyxNQUFNLEVBQUUsU0FBUyxHQUFHLFFBQVEsQ0FBQztBQUN6RTtBQUNBO0FBQ0EsYUFBWSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNsQyxpQkFBZ0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtxQkFDbkIsUUFBUSxHQUFHLE1BQU0sQ0FBQztxQkFDbEIsTUFBTSxHQUFHLFNBQVMsQ0FBQztrQkFDdEI7QUFDakIsY0FBYSxNQUFNO0FBQ25CLGlCQUFnQixJQUFJLElBQUksR0FBRyxRQUFRLENBQUM7aUJBQ3BCLFFBQVEsR0FBRyxNQUFNLENBQUM7aUJBQ2xCLE1BQU0sR0FBRyxNQUFNLENBQUM7aUJBQ2hCLE1BQU0sR0FBRyxJQUFJLENBQUM7Y0FDakI7QUFDYjthQUNZLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2hFO0FBQ0E7QUFDQSxhQUFZLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztBQUNqRCxpQkFBZ0IsT0FBTyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDNUY7QUFDQSxhQUFZLE1BQU0sR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7YUFDdEIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7YUFDckMsSUFBSSxDQUFDLE1BQU0sRUFBRTtpQkFDVCxNQUFNLEdBQUcsU0FBUyxDQUFDO0FBQ25DLGNBQWEsTUFBTTtBQUNuQixpQkFBZ0IsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQ2pDLGlCQUFnQixJQUFJLE1BQU0sR0FBRyxTQUFTLEVBQUU7cUJBQ3BCLE1BQU0sR0FBRyxTQUFTLENBQUM7a0JBQ3RCO2NBQ0o7QUFDYjtBQUNBLGFBQVksSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDL0QsaUJBQWdCLE1BQU0sSUFBSSxVQUFVLENBQUMsdUNBQXVDLENBQUMsQ0FBQztBQUM5RTtBQUNBO2FBQ1ksSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDckQsYUFBWSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQ3pELGFBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQzthQUNsQyxPQUFPLE1BQU0sQ0FBQztBQUMxQjtBQUNBO1dBQ1M7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFRLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRTtBQUNuQyxhQUFZLElBQUksUUFBUSxHQUFHVSxZQUFpQixDQUFDLFFBQVEsQ0FBQztBQUN0RDthQUNZLFFBQVEsQ0FBQyxtQkFBbUIsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQztBQUMxRSxhQUFZLFFBQVEsQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLFNBQVMsV0FBVyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUU7QUFDaEY7QUFDQTtBQUNBLGlCQUFnQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM3RSxpQkFBZ0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO2VBQ3RDO0FBQ2I7YUFDWSxRQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1VBQy9DO09BQ0o7QUFDTDtBQUNBO0FBQ0EsS0FBSSxLQUFLLENBQUMsdUJBQXVCLEdBQUcsU0FBUyx1QkFBdUIsR0FBRztBQUN2RSxTQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsOEJBQThCO0FBQ2pELGFBQVksT0FBTztTQUNYLElBQUksQ0FBQyxRQUFRO0FBQ3JCLGFBQVksTUFBTSxJQUFJLEtBQUssQ0FBQyx3R0FBd0csQ0FBQztBQUNySTtBQUNBLFNBQVEsT0FBTyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7QUFDdkM7QUFDQSxTQUFRLElBQUksVUFBVSxHQUFHVixZQUFpQixDQUFDLFVBQVUsQ0FBQztBQUN0RDtTQUNRLFVBQVUsQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztTQUM1RCxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO0FBQzlEO0FBQ0EsU0FBUSxNQUFNLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztBQUN0RCxTQUFRLE1BQU0sQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1NBQzlDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUM7U0FDcEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztBQUN0RDtBQUNBLFNBQVEsSUFBSSxLQUFLLENBQUMsZUFBZSxFQUFFO0FBQ25DLGFBQVksSUFBSSxRQUFRLEdBQUdVLFlBQWlCLENBQUMsUUFBUSxDQUFDO0FBQ3REO2FBQ1ksUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLG1CQUFtQixDQUFDO0FBQzFFLGFBQVksT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztVQUNyQztBQUNUO1NBQ1EsUUFBUSxHQUFHLFNBQVMsQ0FBQztPQUN4QjtBQUNMLEdBQUE7Ozs7O0FDdk5BO0FBQ0E7QUFDQTtBQUNBLENBQUEsSUFBSSxNQUFNLEdBQUdWLE9BQXVCLENBQUMsTUFBTSxDQUFDO0FBQzVDO0NBQ0EsSUFBSW1wQixhQUFXLEdBQUd6b0IsV0FBeUI7QUFDM0MsS0FBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztBQUMzQjtBQUNBO0FBQ0E7QUFDQSxDQUFBLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCO0FBQ0E7QUFDQSxDQUFBLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLENBQUM7QUFDL0IsQ0FBQSxLQUFLLENBQUMscUJBQXFCLEdBQUcsR0FBRyxDQUFDO0FBQ2xDO0FBQ0E7Q0FDQSxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsTUFBTSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO0tBQ25ELEdBQUcsR0FBRyxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzNCO0tBQ0ksSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdEQ7S0FDSSxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLEtBQUksSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0tBQ0ksT0FBTyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0dBQzFFO0FBQ0Q7Q0FDQSxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsTUFBTSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO0FBQ3ZELEtBQUksSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7QUFDakMsU0FBUSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFO0FBQ3RDLGFBQVksT0FBTyxDQUFDLEtBQUssQ0FBQywwSUFBMEksQ0FBQyxDQUFDO0FBQ3RLLGFBQVksS0FBSyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztVQUNsQztBQUNUO0FBQ0EsU0FBUSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO01BQ2pEO0FBQ0w7S0FDSSxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN0RDtLQUNJLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakMsS0FBSSxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUI7S0FDSSxPQUFPLEtBQUssSUFBSSxHQUFHLEdBQUcsS0FBSyxJQUFJLEdBQUcsQ0FBQztHQUN0QztBQUNEO0FBQ0EsQ0FBQSxLQUFLLENBQUMsY0FBYyxHQUFHLFNBQVMsY0FBYyxDQUFDLEdBQUcsRUFBRTtBQUNwRCxLQUFJLElBQUk7QUFDUixTQUFRLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDcEIsT0FBTyxJQUFJLENBQUM7TUFDZixDQUFDLE9BQU8sQ0FBQyxFQUFFO1NBQ1IsT0FBTyxLQUFLLENBQUM7TUFDaEI7R0FDSjtBQUNEO0FBQ0E7QUFDQSxDQUFBLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUNoQyxDQUFBLEtBQUssQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUNsQztBQUNBO0FBQ0EsQ0FBQSxLQUFLLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUMzQixDQUFBLEtBQUssQ0FBQyxRQUFRLEdBQUcsU0FBUyxRQUFRLENBQUMsUUFBUSxFQUFFO0FBQzdDLEtBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTO0FBQ3hCLFNBQVEsS0FBSyxDQUFDLFNBQVMsR0FBR0Usa0JBQXVCLENBQUM7QUFDbEQ7QUFDQTtLQUNJLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNwRDtBQUNBO0FBQ0EsS0FBSSxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7S0FDdEIsT0FBTyxJQUFJLEVBQUU7U0FDVCxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLFNBQVEsSUFBSSxLQUFLO2FBQ0wsT0FBTyxLQUFLLENBQUM7QUFDekI7U0FDUSxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVDO1NBQ1EsUUFBUSxPQUFPLFFBQVE7QUFDL0IsYUFBWSxLQUFLLFFBQVE7aUJBQ1QsR0FBRyxHQUFHLFFBQVEsQ0FBQztBQUMvQixpQkFBZ0IsTUFBTTtBQUN0QjtBQUNBLGFBQVksS0FBSyxRQUFRO0FBQ3pCLGlCQUFnQixLQUFLLElBQUksR0FBRyxJQUFJLFFBQVE7cUJBQ3BCLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEQ7QUFDQSxpQkFBZ0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZO0FBQzlDLHFCQUFvQixZQUFZLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUNwRDtBQUNBLGlCQUFnQixHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztBQUNwQyxpQkFBZ0IsTUFBTTtBQUN0QjtBQUNBLGFBQVksS0FBSyxVQUFVO0FBQzNCLGlCQUFnQixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVk7QUFDOUMscUJBQW9CLFlBQVksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3BEO0FBQ0E7QUFDQTtpQkFDZ0IsS0FBSyxHQUFHLElBQUksUUFBUSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxRDtpQkFDZ0IsS0FBSyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDO2lCQUN6RCxPQUFPLEtBQUssQ0FBQztBQUM3QjthQUNZO0FBQ1osaUJBQWdCLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLEdBQUcsUUFBUSxHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUMvRjtNQUNKO0dBQ0o7QUFDRDtBQUNBLENBQUEsS0FBSyxDQUFDLHFCQUFxQixHQUFHLFNBQVMsUUFBUSxFQUFFO0FBQ2pEO0FBQ0EsS0FBSSxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDeEU7QUFDRDtDQUNBLEtBQUssQ0FBQyxVQUFVLEdBQUcsU0FBUyxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRTtLQUN0RCxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztTQUNoQyxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNwRDtLQUNJLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU07U0FDM0MsT0FBTyxHQUFHLElBQUl1b0IsYUFBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDL0Q7S0FDSSxPQUFPLE9BQU8sQ0FBQztHQUNsQjtBQUNEO0NBQ0EsS0FBSyxDQUFDLFVBQVUsR0FBRyxTQUFTLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFO0tBQ3RELElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1NBQ2hDLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0FBQ0EsS0FBSSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksRUFBRSxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUM7U0FDMUQsT0FBTyxHQUFHLElBQUlBLGFBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzdEO0tBQ0ksT0FBTyxPQUFPLENBQUM7R0FDbEI7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFBLElBQUksT0FBTyxHQUFHLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0FBQzFGLENBQUEsSUFBSSxPQUFPLEVBQUU7QUFDYjtBQUNBO0FBQ0EsS0FBSSxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRCxLQUFJLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO0FBQ2xELFNBQVF0bkIsY0FBb0IsRUFBQSxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQy9CO0FBQ0w7QUFDQTtBQUNBLEtBQUlnQixpQkFBd0IsRUFBQSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQ25DOzs7Ozs7O0FDbkpELElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEtBQUssT0FBTyxDQUFDO0FBQzdDLElBQUksZUFBZSxHQUFHLFNBQVMsR0FBRyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3JEO0FBQ0E7QUFDQSxJQUFBLFFBQWMsR0FBRyxZQUFZO0FBQzdCLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDVjtBQUNBLENBQUMsSUFBSSxTQUFTLEVBQUU7QUFDaEIsRUFBRSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJO0FBQ3pCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHO0FBQ2xCLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUM7QUFDN0QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNO0FBQzNCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHO0FBQ2xCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJO0FBQ25CLEdBQUcsTUFBTSxDQUFDO0FBQ1YsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDakMsRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixFQUFFO0FBQ0Y7QUFDQSxDQUFDLE9BQU8sSUFBSSxDQUFDO0FBQ2IsQ0FBQzs7Ozs7Ozs7OztBQ2hCRDtBQUNBO0FBQ0E7QUFDQSxNQUFNLEVBQUUsR0FBRzdDLFlBQWEsQ0FBQztBQUN6QixNQUFNLElBQUksR0FBR1UsTUFBZSxDQUFDO0FBQzdCLE1BQU0sTUFBTSxHQUFHRSxZQUFpQixDQUFDO0FBQ2pDLE1BQU0sUUFBUSxHQUFHaUIsUUFBb0IsQ0FBQztBQUN0QyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsTUFBTSxHQUFHLFFBQVEsRUFBRTtBQUNyQjtBQUNBO0FBQ0EsRUFBRSxZQUFZLEdBQUcsZ0VBQWdFO0FBQ2pGO0FBQ0EsRUFBRSxnQkFBZ0IsR0FBRyxRQUFRO0FBQzdCO0FBQ0EsRUFBRSxhQUFhLEdBQUcsQ0FBQztBQUNuQjtBQUNBLEVBQUUsWUFBWSxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxFQUFFLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQztBQUMxRztBQUNBLEVBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSztBQUN2QyxFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU07QUFDMUM7QUFDQSxFQUFFLFFBQVEsR0FBRyxHQUFHO0FBQ2hCLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDakI7QUFDQTtBQUNBLEVBQUUsY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUN0QjtBQUNBO0FBQ0EsRUFBRSxnQkFBZ0IsR0FBRyxLQUFLO0FBQzFCLEVBQUUsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUMvQixFQUFFO0FBQ0YsSUFBSSxLQUFLLEdBQUcsRUFBRTtBQUNkLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQztBQUNmO0FBQ0E7QUFDQSxFQUFFLElBQUk7QUFDTixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3RDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNkLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM1QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDcEMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDM0QsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLFlBQVksQ0FBQyxHQUFHLEVBQUU7QUFDM0IsRUFBRSxPQUFPLE9BQU8sR0FBRyxLQUFLLFdBQVcsQ0FBQztBQUNwQyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsZUFBZSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUU7QUFDNUMsRUFBRSxJQUFJLE9BQU8sT0FBTyxJQUFJLFVBQVUsRUFBRTtBQUNwQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3JDLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDN0IsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzFCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFO0FBQ2hDLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ2pCLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwRCxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ3JCLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUUsTUFBTSxJQUFJLEdBQUc7QUFDZixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTTtBQUN6QixJQUFJLE9BQU8sQ0FBQyxHQUFHO0FBQ2YsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDO0FBQ3BCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFO0FBQ3RCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDYjtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsT0FBTyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUU7QUFDcEMsRUFBRTtBQUNGLElBQUksSUFBSSxHQUFHLGVBQWUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDO0FBQzdDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLGFBQWEsQ0FBQztBQUN4RDtBQUNBLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUM7QUFDL0IsSUFBSSxPQUFPLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBQzFDO0FBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztBQUM3RCxJQUFJLE9BQU8sRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQztBQUN0RDtBQUNBLEVBQUUsQ0FBQyxTQUFTLGNBQWMsR0FBRztBQUM3QixJQUFJLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hDO0FBQ0E7QUFDQSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxFQUFFO0FBQ2pDLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNoQixRQUFRLElBQUksS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLE9BQU8sY0FBYyxFQUFFLENBQUM7QUFDakQ7QUFDQSxRQUFRLE9BQU8sRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLHlEQUF5RCxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0YsT0FBTztBQUNQO0FBQ0EsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3JCLEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRyxFQUFFLEVBQUU7QUFDUCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsV0FBVyxDQUFDLE9BQU8sRUFBRTtBQUM5QixFQUFFO0FBQ0YsSUFBSSxJQUFJLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQztBQUNuQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksYUFBYSxDQUFDO0FBQ3hEO0FBQ0EsRUFBRSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQztBQUMvQixJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDckM7QUFDQSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDO0FBQzdELElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBQ2pEO0FBQ0EsRUFBRSxHQUFHO0FBQ0wsSUFBSSxNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4QyxJQUFJLElBQUk7QUFDUixNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ2hCLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMLEdBQUcsUUFBUSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDeEI7QUFDQSxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztBQUM1RSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFO0FBQ2pDLEVBQUU7QUFDRixJQUFJLElBQUksR0FBRyxlQUFlLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQztBQUM3QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQjtBQUNBLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDdEU7QUFDQTtBQUNBLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLGVBQWUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFO0FBQ3BELElBQUksSUFBSSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUI7QUFDQTtBQUNBLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksU0FBUyxFQUFFLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUU7QUFDdkYsTUFBTSxJQUFJLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QjtBQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7QUFDbEMsUUFBUSxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLFNBQVMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFO0FBQzNELFVBQVUsSUFBSSxHQUFHLEVBQUU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLElBQUk7QUFDaEIsY0FBYyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUN4QixjQUFjLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDaEMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDeEIsZUFBZTtBQUNmLGFBQWE7QUFDYixZQUFZLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLFdBQVc7QUFDWCxVQUFVLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSw2QkFBNkIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuRixTQUFTLENBQUMsQ0FBQztBQUNYLE9BQU87QUFDUCxNQUFNLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO0FBQ2pDLFFBQVEsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsNkJBQTZCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakYsT0FBTztBQUNQLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLDZCQUE2QixDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN4RSxLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLFFBQVEsQ0FBQyxPQUFPLEVBQUU7QUFDM0IsRUFBRTtBQUNGLElBQUksSUFBSSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUM7QUFDbkMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0FBQ0EsRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDO0FBQ3hDO0FBQ0EsRUFBRSxNQUFNLHlCQUF5QixHQUFHLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUM7QUFDcEYsRUFBRSxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQztBQUNuRSxFQUFFLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO0FBQzlCLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixJQUFJLEVBQUUsR0FBRyxTQUFTLENBQUM7QUFDbkIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPO0FBQ1QsSUFBSSxJQUFJLEVBQUUsSUFBSTtBQUNkLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDVixJQUFJLGNBQWMsRUFBRSw2QkFBNkIsQ0FBQyxJQUFJLEVBQUUseUJBQXlCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQztBQUNsRyxHQUFHLENBQUM7QUFDSixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLG1CQUFtQixDQUFDLElBQUksRUFBRTtBQUNuQyxFQUFFLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEI7QUFDQSxFQUFFLEdBQUc7QUFDTCxJQUFJO0FBQ0osTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUN0QixNQUFNLFFBQVEsR0FBRyxLQUFLO0FBQ3RCLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEM7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUQsTUFBTTtBQUNOLFFBQVEsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QyxRQUFRLElBQUksR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtBQUM5QixRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDdkIsVUFBVSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hCLE9BQU8sTUFBTTtBQUNiLFFBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QixPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ25CLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixLQUFLO0FBQ0wsR0FBRyxRQUFRLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzlCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUU7QUFDaEMsRUFBRTtBQUNGLElBQUksSUFBSSxHQUFHLGVBQWUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDO0FBQzdDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxlQUFlLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRTtBQUNwRCxJQUFJLElBQUksR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVCO0FBQ0E7QUFDQSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksUUFBUSxFQUFFLFNBQVMsV0FBVyxDQUFDLEdBQUcsRUFBRTtBQUNwRSxNQUFNLElBQUksR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSw0QkFBNEIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvRCxLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLE9BQU8sQ0FBQyxPQUFPLEVBQUU7QUFDMUIsRUFBRTtBQUNGLElBQUksSUFBSSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUM7QUFDbkMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25CO0FBQ0EsRUFBRSxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxDQUFDO0FBQzVDO0FBQ0EsRUFBRSxPQUFPO0FBQ1QsSUFBSSxJQUFJLEVBQUUsSUFBSTtBQUNkLElBQUksY0FBYyxFQUFFLDRCQUE0QixDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7QUFDNUQsR0FBRyxDQUFDO0FBQ0osQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyw2QkFBNkIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRTtBQUN2RCxFQUFFLE1BQU0sY0FBYyxHQUFHLHNCQUFzQixDQUFDLFNBQVMsZUFBZSxDQUFDLE1BQU0sRUFBRTtBQUNqRixJQUFJLElBQUk7QUFDUixNQUFNLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUMxQixRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsT0FBTztBQUNQLEtBQUs7QUFDTCxJQUFJLE9BQU8sQ0FBQyxFQUFFO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3ZDO0FBQ0EsUUFBUSxNQUFNLENBQUMsQ0FBQztBQUNoQixPQUFPO0FBQ1AsS0FBSztBQUNMLElBQUksSUFBSTtBQUNSLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixLQUFLO0FBQ0wsSUFBSSxPQUFPLENBQUMsRUFBRTtBQUNkLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN4QjtBQUNBLFFBQVEsTUFBTSxDQUFDLENBQUM7QUFDaEIsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQjtBQUNBLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDbEIsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzNDLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsNEJBQTRCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtBQUNsRCxFQUFFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsbUJBQW1CLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUYsRUFBRSxNQUFNLGNBQWMsR0FBRyxzQkFBc0IsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEU7QUFDQSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ2xCLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUMzQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLHNCQUFzQixDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7QUFDckQsRUFBRSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDckI7QUFDQSxFQUFFLE9BQU8sU0FBUyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7QUFDekMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCLE1BQU0sTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzdELE1BQU0sSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO0FBQ3RCLFFBQVEsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEMsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLE1BQU0sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pCLEdBQUcsQ0FBQztBQUNKLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLGlCQUFpQixHQUFHO0FBQzdCLEVBQUUsSUFBSSxrQkFBa0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFO0FBQy9DLElBQUksT0FBTztBQUNYLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFLE9BQU8sY0FBYyxDQUFDLE1BQU0sRUFBRTtBQUNoQyxJQUFJLElBQUk7QUFDUixNQUFNLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ2hCO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDeEIsRUFBRSxPQUFPLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFO0FBQ3pCLEVBQUUsT0FBTyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUM3QyxFQUFFLE9BQU8sS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUM7QUFDbkQsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsa0JBQWtCLEdBQUc7QUFDOUIsRUFBRSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFDMUIsQ0FBQztBQUNEO0FBQ0EsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEtBQUssRUFBRTtBQUN0RSxFQUFFLE9BQU8sUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM3QixDQUFDLENBQUMsQ0FBQztBQUNIO0FBQ0EsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDaEYsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFLFNBQVMsd0JBQXdCLENBQUMsR0FBRyxFQUFFO0FBQ2xGLElBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0FBQzlCLElBQUksaUJBQWlCLEVBQUUsQ0FBQztBQUN4QjtBQUNBLElBQUksTUFBTSxHQUFHLENBQUM7QUFDZCxHQUFHLENBQUMsQ0FBQztBQUNMLENBQUM7QUFDRDtBQUNBLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFNBQVMsS0FBSyxDQUFDLElBQUksRUFBRTtBQUNqRCxFQUFFLElBQUksSUFBSSxFQUFFLGtCQUFrQixHQUFHLElBQUksQ0FBQztBQUN0QyxFQUFFLGlCQUFpQixFQUFFLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUM7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ3FCLEdBQUEsQ0FBQSxNQUFBLEdBQUcsT0FBTztBQUMvQjtBQUNrQixHQUFBLENBQUEsR0FBQSxHQUFHLElBQUk7QUFDSCxHQUFBLENBQUEsT0FBQSxHQUFHLFFBQVE7QUFDakM7QUFDbUIsR0FBQSxDQUFBLElBQUEsR0FBRyxLQUFLO0FBQ0osR0FBQSxDQUFBLFFBQUEsR0FBRyxTQUFTO0FBQ25DO0FBQ3NCLEdBQUEsQ0FBQSxPQUFBLEdBQUcsUUFBUTtBQUNQLEdBQUEsQ0FBQSxXQUFBLEdBQUcsWUFBWTtBQUN6QztBQUNBLEdBQUEsQ0FBQSxrQkFBaUMsR0FBRzs7OztBQ2ptQnBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk4TixXQUFTLEdBQUcsQ0FBQzdQLGNBQUksSUFBSUEsY0FBSSxDQUFDLFNBQVMsS0FBSyxDQUFDLFlBQVk7QUFDekQsSUFBSSxJQUFJLGFBQWEsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDeEMsUUFBUSxhQUFhLEdBQUcsTUFBTSxDQUFDLGNBQWM7QUFDN0MsYUFBYSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsWUFBWSxLQUFLLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3hGLFlBQVksVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3ZGLFFBQVEsT0FBTyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25DLEtBQUssQ0FBQztBQUNOLElBQUksT0FBTyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDM0IsUUFBUSxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFFBQVEsU0FBUyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQy9DLFFBQVEsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM3RixLQUFLLENBQUM7QUFDTixDQUFDLEdBQUcsQ0FBQztBQUNMLE1BQU0sQ0FBQyxjQUFjLENBQUNzcEIsaUJBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM5RCxJQUFJLGVBQWUsa0JBQWtCLFVBQVUsTUFBTSxFQUFFO0FBQ3ZELElBQUl6WixXQUFTLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZDLElBQUksU0FBUyxlQUFlLENBQUMsYUFBYSxFQUFFO0FBQzVDLFFBQVEsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUMxQyxRQUFRLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLDRDQUE0QyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQzVGLFFBQVEsS0FBSyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFDNUMsUUFBUSxJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO0FBQ3pDLFFBQVEsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFO0FBQ25DLFlBQVksTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEQsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLEtBQUssQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztBQUNuRCxTQUFTO0FBQ1QsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQixLQUFLO0FBQ0wsSUFBSSxPQUFPLGVBQWUsQ0FBQztBQUMzQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNWeVosaUJBQUEsQ0FBQSxlQUF1QixHQUFHOzs7O0FDckMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJelosV0FBUyxHQUFHLENBQUM3UCxjQUFJLElBQUlBLGNBQUksQ0FBQyxTQUFTLEtBQUssQ0FBQyxZQUFZO0FBQ3pELElBQUksSUFBSSxhQUFhLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3hDLFFBQVEsYUFBYSxHQUFHLE1BQU0sQ0FBQyxjQUFjO0FBQzdDLGFBQWEsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFlBQVksS0FBSyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN4RixZQUFZLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN2RixRQUFRLE9BQU8sYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuQyxLQUFLLENBQUM7QUFDTixJQUFJLE9BQU8sVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzNCLFFBQVEsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1QixRQUFRLFNBQVMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUMvQyxRQUFRLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDN0YsS0FBSyxDQUFDO0FBQ04sQ0FBQyxHQUFHLENBQUM7QUFDTCxNQUFNLENBQUMsY0FBYyxDQUFDdXBCLG1CQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDOUQsSUFBSSxpQkFBaUIsa0JBQWtCLFVBQVUsTUFBTSxFQUFFO0FBQ3pELElBQUkxWixXQUFTLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDekMsSUFBSSxTQUFTLGlCQUFpQixDQUFDLGFBQWEsRUFBRTtBQUM5QyxRQUFRLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDMUMsUUFBUSxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxzQkFBc0IsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUN0RSxRQUFRLEtBQUssQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0FBQzVDLFFBQVEsSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztBQUN6QyxRQUFRLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUNuQyxZQUFZLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hELFNBQVM7QUFDVCxhQUFhO0FBQ2IsWUFBWSxLQUFLLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7QUFDbkQsU0FBUztBQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckIsS0FBSztBQUNMLElBQUksT0FBTyxpQkFBaUIsQ0FBQztBQUM3QixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNWMFosbUJBQUEsQ0FBQSxpQkFBeUIsR0FBRzs7OztBQ3JDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTFaLFdBQVMsR0FBRyxDQUFDN1AsY0FBSSxJQUFJQSxjQUFJLENBQUMsU0FBUyxLQUFLLENBQUMsWUFBWTtBQUN6RCxJQUFJLElBQUksYUFBYSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN4QyxRQUFRLGFBQWEsR0FBRyxNQUFNLENBQUMsY0FBYztBQUM3QyxhQUFhLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxZQUFZLEtBQUssSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDeEYsWUFBWSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdkYsUUFBUSxPQUFPLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkMsS0FBSyxDQUFDO0FBQ04sSUFBSSxPQUFPLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMzQixRQUFRLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBUSxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDL0MsUUFBUSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzdGLEtBQUssQ0FBQztBQUNOLENBQUMsR0FBRyxDQUFDO0FBQ0wsTUFBTSxDQUFDLGNBQWMsQ0FBQ3dwQixlQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDOUQsSUFBSSxhQUFhLGtCQUFrQixVQUFVLE1BQU0sRUFBRTtBQUNyRCxJQUFJM1osV0FBUyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyQyxJQUFJLFNBQVMsYUFBYSxDQUFDLGFBQWEsRUFBRTtBQUMxQyxRQUFRLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDMUMsUUFBUSxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSwrQkFBK0IsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUMvRSxRQUFRLEtBQUssQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0FBQzVDLFFBQVEsSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztBQUN6QyxRQUFRLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUNuQyxZQUFZLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hELFNBQVM7QUFDVCxhQUFhO0FBQ2IsWUFBWSxLQUFLLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7QUFDbkQsU0FBUztBQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckIsS0FBSztBQUNMLElBQUksT0FBTyxhQUFhLENBQUM7QUFDekIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDVjJaLGVBQUEsQ0FBQSxhQUFxQixHQUFHOzs7O0FDckN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsR0FBRyxDQUFDeHBCLGNBQUksSUFBSUEsY0FBSSxDQUFDLFNBQVMsS0FBSyxDQUFDLFlBQVk7QUFDekQsSUFBSSxJQUFJLGFBQWEsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDeEMsUUFBUSxhQUFhLEdBQUcsTUFBTSxDQUFDLGNBQWM7QUFDN0MsYUFBYSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsWUFBWSxLQUFLLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3hGLFlBQVksVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3ZGLFFBQVEsT0FBTyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25DLEtBQUssQ0FBQztBQUNOLElBQUksT0FBTyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDM0IsUUFBUSxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFFBQVEsU0FBUyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQy9DLFFBQVEsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM3RixLQUFLLENBQUM7QUFDTixDQUFDLEdBQUcsQ0FBQztBQUNMLE1BQU0sQ0FBQyxjQUFjLENBQUN5cEIsaUJBQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM5RCxJQUFJLGVBQWUsa0JBQWtCLFVBQVUsTUFBTSxFQUFFO0FBQ3ZELElBQUksU0FBUyxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN2QyxJQUFJLFNBQVMsZUFBZSxDQUFDLGFBQWEsRUFBRTtBQUM1QyxRQUFRLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDMUMsUUFBUSxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxrQ0FBa0MsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUNsRixRQUFRLEtBQUssQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0FBQzVDLFFBQVEsSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztBQUN6QyxRQUFRLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUNuQyxZQUFZLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hELFNBQVM7QUFDVCxhQUFhO0FBQ2IsWUFBWSxLQUFLLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7QUFDbkQsU0FBUztBQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckIsS0FBSztBQUNMLElBQUksT0FBTyxlQUFlLENBQUM7QUFDM0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDVkEsaUJBQUEsQ0FBQSxlQUF1QixHQUFHOztBQ3JDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDOUQsSUFBSSxTQUFTLEdBQUd2cEIsT0FBa0IsQ0FBQztBQUNuQyxJQUFJLGVBQWUsR0FBR1UsWUFBd0IsQ0FBQztBQUMvQyxJQUFJLElBQUksR0FBR0UsWUFBYSxDQUFDO0FBQ3pCLElBQUksWUFBWSxHQUFHaUIsVUFBcUIsQ0FBQztBQUN6QyxJQUFJLEtBQUssR0FBR2dCLEdBQWMsQ0FBQztBQUMzQixJQUFJLGlCQUFpQixHQUFHQyxpQkFBbUMsQ0FBQztBQUM1RCxJQUFBLENBQUEsZUFBdUIsR0FBRyxpQkFBaUIsQ0FBQyxnQkFBZ0I7QUFDNUQsSUFBSSxtQkFBbUIsR0FBR1MsbUJBQXFDLENBQUM7QUFDaEUsSUFBQSxDQUFBLGlCQUF5QixHQUFHLG1CQUFtQixDQUFDLGtCQUFrQjtBQUNsRSxJQUFJLGVBQWUsR0FBR0UsZUFBaUMsQ0FBQztBQUN4RCxJQUFBLENBQUEsYUFBcUIsR0FBRyxlQUFlLENBQUMsY0FBYztBQUN0RCxJQUFJLGlCQUFpQixHQUFHMEMsaUJBQW1DLENBQUM7QUFDNUQsSUFBQSxDQUFBLGVBQXVCLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCO0FBQzVELFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUU7QUFDakMsSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRTtBQUN2QyxJQUFJLElBQUksTUFBTSxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN2RCxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQixJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNyQixJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQztBQUN2QixDQUFDO0FBQ1csSUFBQSxDQUFBLElBQUEsR0FBRyxLQUFLO0FBQ3BCLFNBQVMsU0FBUyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFO0FBQ2hELElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDdkMsSUFBSSxJQUFJLE1BQU0sR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDdkQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxFQUFFLE1BQU0sRUFBRTtBQUMzQyxRQUFRLElBQUksR0FBRyxFQUFFO0FBQ2pCLFlBQVksWUFBWSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUMsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLElBQUk7QUFDaEIsZ0JBQWdCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNqQyxnQkFBZ0IsWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckQsYUFBYTtBQUNiLFlBQVksT0FBTyxZQUFZLEVBQUU7QUFDakMsZ0JBQWdCLFlBQVksQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNELGFBQWE7QUFDYixTQUFTO0FBQ1QsS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ0QsSUFBaUIsV0FBQSxHQUFBLElBQUEsQ0FBQSxTQUFBLEdBQUcsU0FBUyxDQUFDO0FBQzlCLElBQUksY0FBYyxrQkFBa0IsWUFBWTtBQUNoRCxJQUFJLFNBQVMsY0FBYyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUU7QUFDL0MsUUFBUSxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRTtBQUMzQyxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN6QixRQUFRLElBQUksV0FBVyxFQUFFO0FBQ3pCLFlBQVksSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDM0MsU0FBUztBQUNULFFBQVEsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQy9CLFFBQVEsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7QUFDbkMsS0FBSztBQUNMLElBQUksY0FBYyxDQUFDLGtCQUFrQixHQUFHLFVBQVUsR0FBRyxFQUFFO0FBQ3ZELFFBQVEsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLFFBQVEsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQy9CLFFBQVEsS0FBSyxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUUsUUFBUSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUU7QUFDbEUsWUFBWSxJQUFJLGFBQWEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDOUMsWUFBWSxJQUFJLFFBQVEsR0FBRyxDQUFDLElBQUksYUFBYSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNqSCxnQkFBZ0IsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMzQyxnQkFBZ0IsYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUNuQyxhQUFhO0FBQ2IsaUJBQWlCO0FBQ2pCLGdCQUFnQixhQUFhLElBQUksYUFBYSxDQUFDO0FBQy9DLGFBQWE7QUFDYixTQUFTO0FBQ1QsUUFBUSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RDLFlBQVksTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN2QyxTQUFTO0FBQ1QsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QixLQUFLLENBQUM7QUFDTixJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUU7QUFDakUsUUFBUSxHQUFHLEVBQUUsWUFBWTtBQUN6QixZQUFZLE9BQU8sQ0FBQyxHQUFHLENBQUMscURBQXFELENBQUMsQ0FBQztBQUMvRSxZQUFZLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNqQyxTQUFTO0FBQ1QsUUFBUSxVQUFVLEVBQUUsSUFBSTtBQUN4QixRQUFRLFlBQVksRUFBRSxJQUFJO0FBQzFCLEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLEVBQUU7QUFDeEUsUUFBUSxHQUFHLEVBQUUsWUFBWTtBQUN6QixZQUFZLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0VBQWtFLENBQUMsQ0FBQztBQUM1RixZQUFZLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztBQUN2QyxTQUFTO0FBQ1QsUUFBUSxVQUFVLEVBQUUsSUFBSTtBQUN4QixRQUFRLFlBQVksRUFBRSxJQUFJO0FBQzFCLEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxZQUFZO0FBQy9DLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzVCLFFBQVEsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7QUFDakMsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDekIsS0FBSyxDQUFDO0FBQ04sSUFBSSxjQUFjLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxVQUFVLFFBQVEsRUFBRTtBQUM1RCxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztBQUN6QixRQUFRLElBQUk7QUFDWixZQUFZLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZO0FBQy9DLGdCQUFnQixJQUFJO0FBQ3BCLG9CQUFvQixLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztBQUM5QyxvQkFBb0IsWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdELGlCQUFpQjtBQUNqQixnQkFBZ0IsT0FBTyxTQUFTLEVBQUU7QUFDbEMsb0JBQW9CLFlBQVksQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzVELGlCQUFpQjtBQUNqQixhQUFhLENBQUMsQ0FBQztBQUNmLFNBQVM7QUFDVCxRQUFRLE9BQU8sV0FBVyxFQUFFO0FBQzVCLFlBQVksWUFBWSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEQsU0FBUztBQUNULEtBQUssQ0FBQztBQUNOLElBQUksY0FBYyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsWUFBWTtBQUNuRCxRQUFRLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0FBQ25DLEtBQUssQ0FBQztBQUNOLElBQUksY0FBYyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEdBQUcsWUFBWTtBQUMzRCxRQUFRLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTTtBQUM1RCxZQUFZLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTTtBQUNuRCxnQkFBZ0IsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsU0FBUztBQUN6RCxvQkFBb0IsS0FBSyxDQUFDO0FBQzFCLFFBQVEsSUFBSSxVQUFVLEdBQUcsY0FBYyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEtBQUssRUFBRSxFQUFFLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0gsUUFBUSxJQUFJLEdBQUcsR0FBRyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckMsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckQsS0FBSyxDQUFDO0FBQ04sSUFBSSxjQUFjLENBQUMsU0FBUyxDQUFDLG1CQUFtQixHQUFHLFlBQVk7QUFDL0QsUUFBUSxJQUFJO0FBQ1osWUFBWSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2hFLFlBQVksSUFBSSxHQUFHLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDM0MsWUFBWSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ3pELGdCQUFnQixHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0FBQ2pELGFBQWE7QUFDYixZQUFZLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlELFNBQVM7QUFDVCxRQUFRLE9BQU8sZUFBZSxFQUFFO0FBQ2hDLFlBQVksTUFBTSxJQUFJLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUN6RSxTQUFTO0FBQ1QsS0FBSyxDQUFDO0FBQ04sSUFBSSxjQUFjLENBQUMsU0FBUyxDQUFDLGlCQUFpQixHQUFHLFlBQVk7QUFDN0QsUUFBUSxJQUFJO0FBQ1osWUFBWSxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNsRSxZQUFZLElBQUksY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDN0MsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQy9CLGFBQWE7QUFDYixpQkFBaUI7QUFDakIsZ0JBQWdCLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDM0UsZ0JBQWdCLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQzVEO0FBQ0Esb0JBQW9CLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDdEMsaUJBQWlCO0FBQ2pCLGdCQUFnQixJQUFJLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzFFLGFBQWE7QUFDYixTQUFTO0FBQ1QsUUFBUSxPQUFPLGFBQWEsRUFBRTtBQUM5QixZQUFZLE1BQU0sSUFBSSxlQUFlLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ25FLFNBQVM7QUFDVCxLQUFLLENBQUM7QUFDTixJQUFJLGNBQWMsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEdBQUcsWUFBWTtBQUMvRCxRQUFRLElBQUk7QUFDWixZQUFZLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzNDLFNBQVM7QUFDVCxRQUFRLE9BQU8sZUFBZSxFQUFFO0FBQ2hDLFlBQVksTUFBTSxJQUFJLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUN6RSxTQUFTO0FBQ1QsS0FBSyxDQUFDO0FBQ04sSUFBSSxjQUFjLENBQUMsU0FBUyxDQUFDLFlBQVksR0FBRyxZQUFZO0FBQ3hELFFBQVEsSUFBSTtBQUNaLFlBQVksSUFBSSxhQUFhLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQzNJLFlBQVksSUFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO0FBQ3ZELFNBQVM7QUFDVCxRQUFRLE9BQU8sV0FBVyxFQUFFO0FBQzVCLFlBQVksTUFBTSxJQUFJLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3pFLFNBQVM7QUFDVCxLQUFLLENBQUM7QUFDTixJQUFJLGNBQWMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxRQUFRLEVBQUU7QUFDckUsUUFBUSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDekIsUUFBUSxJQUFJO0FBQ1osWUFBWSxJQUFJLGFBQWEsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDdkksWUFBWSxhQUFhLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFVLElBQUksRUFBRTtBQUNyRCxnQkFBZ0IsS0FBSyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDNUMsZ0JBQWdCLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN2QyxhQUFhLENBQUMsQ0FBQztBQUNmLFNBQVM7QUFDVCxRQUFRLE9BQU8sV0FBVyxFQUFFO0FBQzVCLFlBQVksTUFBTSxJQUFJLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3pFLFNBQVM7QUFDVCxLQUFLLENBQUM7QUFDTixJQUFJLE9BQU8sY0FBYyxDQUFDO0FBQzFCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDTCxJQUFBLENBQUEsY0FBc0IsR0FBRzs7QUNoTXpCO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDZSxNQUFNLFlBQVksU0FBU3lpQixNQUFJLENBQUM7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO0FBQ1gsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNuQjtBQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJWSxXQUFPLEVBQUUsQ0FBQztBQUN0QztBQUNBO0FBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDLElBQUksSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2RixJQUFJLE1BQU0sYUFBYTtBQUN2QixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUM7QUFDM0U7QUFDQTtBQUNBLElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNsRSxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDeEMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDNUI7QUFDQTtBQUNBLElBQUksSUFBSSxhQUFhLEVBQUU7QUFDdkIsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDcEIsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztBQUNqQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUU7QUFDaEIsSUFBSSxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDM0IsSUFBSSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDckM7QUFDQSxJQUFJLE9BQU87QUFDWCxNQUFNLElBQUksQ0FBQyxNQUFNLEtBQUssVUFBVTtBQUNoQyxVQUFVeGhCLFFBQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO0FBQ2hDLFVBQVVBLFFBQU0sQ0FBQyxHQUFHLENBQUMsZ0RBQWdELENBQUMsQ0FBQztBQUN2RTtBQUNBLElBQUksSUFBSSxLQUFLLEVBQUU7QUFDZixNQUFNLGFBQWEsR0FBR0EsUUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDaEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDL0MsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFtQixHQUFHO0FBQ3hCO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3BCLElBQUl5aEIsV0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNuRSxNQUFNLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxNQUFNO0FBQ3pDLEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRztBQUNIO0FBQ0EsRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO0FBQ25DLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNyQixJQUFJLElBQUksS0FBSyxFQUFFO0FBQ2YsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyQyxLQUFLLE1BQU07QUFDWCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JDLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUU7QUFDZixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDcEMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDeEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFDOUIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztBQUM3QjtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2xCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRTtBQUNqQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLEdBQUc7QUFDSDs7QUN2R0EsSUFBSSxNQUFNLEdBQUd6cEIsYUFBaUI7QUFDOUI7QUFDQSxJQUFBLElBQWMsR0FBRyxXQUFVO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFNBQVMsVUFBVSxFQUFFLElBQUksRUFBRTtBQUMzQixFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFDO0FBQ3BCLEVBQUUsSUFBSSxHQUFHLElBQUksSUFBSSxHQUFFO0FBQ25CLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUk7QUFDdEMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQUs7QUFDcEIsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFDO0FBQy9CLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBTztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUk7QUFDcEMsRUFBRSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQUs7QUFDMUIsQ0FBQztBQUNEO0FBQ0EsVUFBVSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUM7QUFDdEQ7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFO0FBQzNELEVBQUUsS0FBSyxFQUFFLFVBQVU7QUFDbkIsRUFBRSxVQUFVLEVBQUUsS0FBSztBQUNuQixDQUFDLEVBQUM7QUFDRjtBQUNBLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLFlBQVk7QUFDeEMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7QUFDbkIsRUFBQztBQUNEO0FBQ0EsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBWTtBQUMxQyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBSztBQUNwQixFQUFDO0FBQ0Q7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQ3ZELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLFVBQVUsRUFBRSxLQUFLO0FBQ25CLEVBQUUsUUFBUSxFQUFFLElBQUk7QUFDaEIsRUFBRSxZQUFZLEVBQUUsSUFBSTtBQUNwQixDQUFDLEVBQUM7QUFDRjtBQUNBLFNBQVMsTUFBTSxFQUFFLEdBQUcsRUFBRTtBQUN0QixFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBRztBQUNqQixDQUFDO0FBQ0Q7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQ3JELEVBQUUsR0FBRyxFQUFFLFFBQVE7QUFDZixFQUFFLEdBQUcsRUFBRSxRQUFRO0FBQ2YsRUFBRSxVQUFVLEVBQUUsSUFBSTtBQUNsQixFQUFFLFlBQVksRUFBRSxJQUFJO0FBQ3BCLENBQUMsRUFBQztBQUNGO0FBQ0EsU0FBUyxRQUFRLElBQUk7QUFDckIsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUs7QUFDekMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO0FBQ3ZDLFVBQVUsS0FBSztBQUNmLFNBQVM7QUFDVCxDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsUUFBUSxFQUFFLEtBQUssRUFBRTtBQUMxQixFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUN2QyxJQUFJLEtBQUssRUFBRSxLQUFLO0FBQ2hCLElBQUksVUFBVSxFQUFFLElBQUk7QUFDcEIsSUFBSSxRQUFRLEVBQUUsSUFBSTtBQUNsQixJQUFJLFlBQVksRUFBRSxJQUFJO0FBQ3RCLEdBQUcsRUFBQztBQUNKLENBQUM7QUFDRDtBQUNBLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUU7QUFDcEQsRUFBRSxHQUFHLEVBQUUsWUFBWTtBQUNuQixJQUFJLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUk7QUFDeEMsWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtBQUN0QyxZQUFZLFNBQVMsRUFBRTtBQUN2QixHQUFHLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLEVBQUM7QUFDNUM7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQ3ZELEVBQUUsR0FBRyxFQUFFLFlBQVk7QUFDbkIsSUFBSSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO0FBQzNDLFlBQVksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87QUFDekMsWUFBWSxTQUFTLEVBQUU7QUFDdkIsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxFQUFDO0FBQzVDO0FBQ0E7QUFDQSxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxVQUFVLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDckQsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUk7QUFDbkIsRUFBRSxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQztBQUN4RCxFQUFDO0FBQ0Q7QUFDQSxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxZQUFZO0FBQ3pDLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDekMsRUFBQztBQUNEO0FBQ0EsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBWTtBQUMxQyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQzFDLEVBQUM7QUFDRDtBQUNBLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQzFDLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2xCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxJQUFJO0FBQ2xDLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFO0FBQzVCLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDeEMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMxQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUM3QixPQUFPO0FBQ1AsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUk7QUFDN0IsTUFBTSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNqQyxLQUFLLE1BQU07QUFDWCxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVztBQUMxQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN6QyxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBSztBQUNoQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUM7QUFDdkMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBQztBQUN6QyxPQUFPO0FBQ1AsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBQztBQUNsRCxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFDO0FBQ3RCLEVBQUM7QUFDRDtBQUNBLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxFQUFFO0FBQ3hDLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2xCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUMzQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFDO0FBQ2xELEtBQUssTUFBTTtBQUNYLE1BQU0sQ0FBQyxHQUFHLEtBQUk7QUFDZCxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFDO0FBQzdCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUM7QUFDbEIsRUFBQztBQUNEO0FBQ0EsU0FBUyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxZQUFZO0FBQ3pDLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQUs7QUFDcEIsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSTtBQUNuQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUM7QUFDM0MsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFDO0FBQzNDLENBQUMsQ0FBQztBQUNGO0FBQ0EsVUFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBQztBQUMvQyxVQUFVLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFDO0FBQ3ZELFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUE7Ozs7QUM3STFDO0FBQ0E7QUFDQTtBQUNBO0FBQ2UsTUFBTSxFQUFFLENBQUM7QUFDeEIsRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFO0FBQ25CO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUswcEIsWUFBUSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BFO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3JCO0FBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JEO0FBQ0E7QUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUMxQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzVDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFlBQVksR0FBRztBQUNqQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqQixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN4QyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLEtBQUssR0FBRztBQUNWO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3hELElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3REO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUM1QjtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFO0FBQzVFLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNoQyxLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDekIsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3BCLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNwQixHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0EsU0FBUyxvQkFBb0IsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFO0FBQ3hDO0FBQ0E7QUFDQSxFQUFFLEdBQUcsQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLGFBQWEsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUM7QUFDakY7QUFDQTtBQUNBLEVBQUUsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO0FBQzFDLElBQUksTUFBTSxXQUFXLEdBQUcsSUFBSSxLQUFLO0FBQ2pDLE1BQU0sa0VBQWtFO0FBQ3hFLEtBQUssQ0FBQztBQUNOLElBQUksV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDbEMsSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUN0QixHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSUMsWUFBVSxFQUFFLENBQUM7QUFDOUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEVBQUUsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsRUFBRSxPQUFPO0FBQ1QsSUFBSSxRQUFRLEVBQUUsSUFBSTtBQUNsQixJQUFJLEdBQUcsR0FBRztBQUNWLElBQUksS0FBSztBQUNULElBQUksTUFBTTtBQUNWLEdBQUcsQ0FBQztBQUNKOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ2UsTUFBTSxTQUFTLFNBQVNmLEVBQUksQ0FBQztBQUM1QyxFQUFFLFdBQVcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFO0FBQ3hCLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2Y7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSWdCLG9CQUFRLENBQUM7QUFDNUIsTUFBTSxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsS0FBSztBQUN0QyxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0IsUUFBUSxFQUFFLEVBQUUsQ0FBQztBQUNiLE9BQU87QUFDUCxLQUFLLENBQUMsQ0FBQztBQUNQO0FBQ0EsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO0FBQ3pDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2xCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLE1BQU0sR0FBRztBQUNYLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0IsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssR0FBRztBQUNWLElBQUlDLFNBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsRSxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsZUFBZSxDQUFDLFNBQVMsRUFBRTtBQUM3QixJQUFJQSxTQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUM1QixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqQixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQy9CLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2xCLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUIsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUU7QUFDakIsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUM1QixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqQixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbEIsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMxQixJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRTtBQUNqQixJQUFJLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztBQUNsRCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRTtBQUNqQixJQUFJLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDbEM7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkM7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFO0FBQ25FO0FBQ0E7QUFDQSxNQUFNQyxJQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xFLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLEdBQUc7QUFDSDs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTSwwQkFBMEIsR0FBRyxVQUFVLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQzdFLEVBQUUsSUFBSSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDNUMsSUFBSSxPQUFPQyxNQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDeEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPQyxRQUFJO0FBQ2IsSUFBSXZCLFVBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUs7QUFDdEQsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzdCLE1BQU0sT0FBTyxRQUFRLENBQUM7QUFDdEIsS0FBSyxDQUFDO0FBQ04sR0FBRyxDQUFDO0FBQ0osQ0FBQzs7QUN2QkQsTUFBTSxDQUFDLEdBQUc7QUFDVixFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEtBQUssS0FBSztBQUNsQyxJQUFJLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUs7QUFDakQsTUFBTSxJQUFJLEdBQUcsS0FBSyxXQUFXLElBQUksR0FBRyxLQUFLLGFBQWEsRUFBRSxPQUFPO0FBQy9EO0FBQ0EsTUFBTSxJQUFJLEtBQUssS0FBSyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNwQyxRQUFRLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDN0IsT0FBTyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksT0FBTyxDQUFDLEVBQUU7QUFDcEMsUUFBUSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSCxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLFlBQVksS0FBSztBQUN6QyxJQUFJLE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBTTtBQUMxQixNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSztBQUM1QixTQUFTLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO0FBQzNCLFNBQVMsTUFBTSxDQUFDLE9BQU8sQ0FBQztBQUN4QixTQUFTLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssU0FBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6RixJQUFJLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDN0QsSUFBSSxPQUFPLE1BQU0sS0FBSyxTQUFTLElBQUksTUFBTSxLQUFLLEdBQUcsR0FBRyxZQUFZLEdBQUcsTUFBTSxDQUFDO0FBQzFFLEdBQUc7QUFDSCxDQUFDLENBQUM7QUFnQkY7QUFDQTtBQUNBO0FBQ0E7QUFDZSxNQUFNLFFBQVEsU0FBU0csRUFBSSxDQUFDO0FBQzNDLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7QUFDNUIsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQzNCLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUU7QUFDMUI7QUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxPQUFPLEtBQUssUUFBUSxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckU7QUFDQSxJQUFJLElBQUksR0FBRyxDQUFDO0FBQ1osSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDbEMsTUFBTSxHQUFHLEdBQUdvQixRQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUIsS0FBSyxNQUFNLElBQUlDLGdCQUFZLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDeEMsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDO0FBQ3RCLEtBQUssTUFBTTtBQUNYLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLO0FBQ3BDLFFBQVEsQ0FBQyxhQUFhO0FBQ3RCLFVBQVUsT0FBTyxhQUFhLEtBQUssUUFBUTtBQUMzQyxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7QUFDdkMsVUFBVSxhQUFhLElBQUksSUFBSTtBQUMvQixPQUFPO0FBQ1AsTUFBTTtBQUNOO0FBQ0EsTUFBTSxHQUFHLEdBQUdELFFBQUk7QUFDaEIsUUFBUSxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxNQUFNO0FBQzdELFVBQVUsSUFBSTtBQUNkLFVBQVUsR0FBRyxRQUFRO0FBQ3JCLFNBQVMsQ0FBQyxDQUFDO0FBQ1gsT0FBTyxDQUFDO0FBQ1IsS0FBSyxNQUFNO0FBQ1g7QUFDQSxNQUFNLEdBQUcsR0FBR0EsUUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUM5QixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUk7QUFDM0IsTUFBTUUsYUFBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hELE1BQU1DLFdBQU8sRUFBRTtBQUNmLEtBQUssQ0FBQztBQUNOO0FBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzNCO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPO0FBQ3ZCLE9BQU8sSUFBSTtBQUNYLFFBQVFDLFVBQU0sQ0FBQyxDQUFDLFVBQVUsRUFBRSxNQUFNLEtBQUs7QUFDdkMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4RCxVQUFVLE9BQU8sVUFBVSxDQUFDO0FBQzVCLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLE9BQU87QUFDUCxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUM7QUFDekIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuRSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFlBQVksR0FBRztBQUNqQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqQjtBQUNBLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRTtBQUNqQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqQixJQUFJLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUU7QUFDNUIsSUFBSSxRQUFRLEdBQUcsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDO0FBQy9CLElBQUksT0FBT0MsU0FBSyxDQUFDLE1BQU07QUFDdkIsTUFBTSxNQUFNLEdBQUcsR0FBR04sTUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9CO0FBQ0EsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFJO0FBQ3JCLFFBQVFHLGFBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRCxRQUFRQSxhQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuRCxRQUFRQSxhQUFTLENBQUM7QUFDbEIsVUFBVUksMEJBQWdDLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQzdFLFNBQVM7QUFDVCxRQUFRSixhQUFTLENBQUM7QUFDbEIsVUFBVUksMEJBQWdDLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQzdFLFNBQVM7QUFDVCxRQUFRSixhQUFTLENBQUM7QUFDbEIsVUFBVUksMEJBQWdDLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQzdFLFNBQVM7QUFDVCxRQUFRSixhQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUMsT0FBTyxDQUFDO0FBQ1IsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQUU7QUFDeEIsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQyxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3BFLElBQUksT0FBT0csU0FBSyxDQUFDO0FBQ2pCLE1BQU1MLFFBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2RixLQUFLLENBQUM7QUFDTixHQUFHO0FBQ0g7QUFDQSxFQUFFLGNBQWMsQ0FBQyxRQUFRLEVBQUU7QUFDM0I7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN0QyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO0FBQzlCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBT0ssU0FBSyxDQUFDLE1BQU1OLE1BQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLEdBQUc7QUFDSDtBQUNBLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxFQUFFO0FBQzdCLElBQUk7QUFDSixNQUFNLFFBQVEsQ0FBQyxXQUFXLEtBQUssSUFBSTtBQUNuQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUztBQUN0RCxNQUFNO0FBQ04sTUFBTSxPQUFPUSxTQUFLLENBQUM7QUFDbkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO0FBQ2pDLE1BQU0sT0FBT0EsU0FBSyxDQUFDO0FBQ25CLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxPQUFPLFFBQVEsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO0FBQzdDLE1BQU0sT0FBT1IsTUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzFCLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztBQUM3QixJQUFJLE9BQU9NLFNBQUssQ0FBQztBQUNqQixNQUFNTCxRQUFJO0FBQ1YsUUFBUXZCLFVBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxLQUFLO0FBQzdELFVBQVUsSUFBSSxTQUFTLEVBQUU7QUFDekIsWUFBWSxPQUFPLFFBQVEsQ0FBQztBQUM1QixXQUFXO0FBQ1gsU0FBUyxDQUFDO0FBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQzVDLFVBQU0sQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFDMUMsS0FBSyxDQUFDO0FBQ04sR0FBRztBQUNIOztBQ2pMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLGtCQUFrQixDQUFDLEdBQUcsRUFBRTtBQUN4QyxFQUFFLE1BQU0sWUFBWSxHQUFHLFVBQVUsU0FBUyxFQUFFLE9BQU8sRUFBRTtBQUNyRCxJQUFJLElBQUksVUFBVSxDQUFDO0FBQ25CLElBQUksSUFBSTtBQUNSLE1BQU0sVUFBVSxHQUFHLElBQUkyRSxRQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6RCxLQUFLLENBQUMsT0FBTyxLQUFLLEVBQUU7QUFDcEIsTUFBTSxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsS0FBSztBQUNMLElBQUksTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdkQ7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQztBQUM1QjtBQUNBLElBQUksT0FBTyxPQUFPLENBQUM7QUFDbkIsR0FBRyxDQUFDO0FBQ0o7QUFDQSxFQUFFLFlBQVksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFlBQVksQ0FBQyxjQUFjLEdBQUcsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQ3hELElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDeEMsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHLENBQUM7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxZQUFZLENBQUMscUJBQXFCLEdBQUcsWUFBWTtBQUNuRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFQyxVQUFJLENBQUMsQ0FBQztBQUN0QyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFM0IsV0FBSyxDQUFDLENBQUM7QUFDeEMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRTRCLFlBQU0sQ0FBQyxDQUFDO0FBQzFDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUVDLGFBQU8sQ0FBQyxDQUFDO0FBQzVDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUVDLGFBQU8sQ0FBQyxDQUFDO0FBQzVDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUVDLFlBQU0sQ0FBQyxDQUFDO0FBQzFDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUVDLGNBQVEsQ0FBQyxDQUFDO0FBQzlDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUVDLGNBQVEsQ0FBQyxDQUFDO0FBQzlDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUVDLFlBQU0sQ0FBQyxDQUFDO0FBQzFDLEdBQUcsQ0FBQztBQUNKO0FBQ0EsRUFBRSxZQUFZLENBQUMscUJBQXFCLEVBQUUsQ0FBQztBQUN2QztBQUNBLEVBQUUsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLE1BQU0sR0FBRyxrQkFBa0IsRUFBRSxDQUFDO0FBQ3BDO0FBQ0E7QUFDQSxTQUFTLGNBQWMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO0FBQ3pDLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUNEO0FBQ0EsU0FBUyxxQkFBcUIsR0FBRztBQUNqQyxFQUFFLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0FBQ2pDLENBQUM7QUFDRDtBQUNBLE1BQU0sUUFBUSxHQUFHO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsRUFBRSxFQUFFO0FBQ04sSUFBSSxTQUFTO0FBQ2IsWUFBSVIsUUFBTTtBQUNWLEdBQUc7QUFDSCxFQUFFLGtCQUFrQjtBQUNwQixFQUFFLGNBQWM7QUFDaEIsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxTQUFTO0FBQ1gsQ0FBQzs7QUNyR0QsTUFBTWpqQixPQUFLLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdCLFNBQVMsS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFO0FBQzdDLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLElBQUlBLE9BQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sS0FBSztBQUM1QyxRQUFRLElBQUksRUFBRSxDQUFDO0FBQ2YsUUFBUSxNQUFNLFdBQVcsR0FBRzBqQixrQkFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUcsUUFBUSxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDMUIsUUFBUSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxXQUFXLENBQUMsTUFBTSxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEtBQUs7QUFDaEcsWUFBWSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9CLFNBQVMsQ0FBQyxDQUFDO0FBQ1gsUUFBUSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEQsUUFBUSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEQsUUFBUSxXQUFXLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksS0FBSztBQUMxQyxZQUFZLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtBQUM1QixnQkFBZ0IsTUFBTSxFQUFFLENBQUM7QUFDekIsYUFBYTtBQUNiLGlCQUFpQjtBQUNqQixnQkFBZ0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUMvQyxhQUFhO0FBQ2IsU0FBUyxDQUFDLENBQUM7QUFDWCxLQUFLLENBQUMsQ0FBQztBQUNQOztBQ3pCTyxNQUFNLGtCQUFrQixHQUFHLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDN0M7QUFDQSxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FDbkJNLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxnQkFBZ0IsS0FBSztBQUM1RSxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN0QixJQUFJLElBQUksbUJBQW1CLEVBQUU7QUFDN0IsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckI7QUFDQSxnREFBZ0QsQ0FBQyxDQUFDLENBQUM7QUFDbkQsS0FBSztBQUNMLElBQUksSUFBSSxnQkFBZ0IsRUFBRTtBQUMxQixRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQixnREFBZ0QsQ0FBQyxDQUFDLENBQUM7QUFDbkQsS0FBSztBQUNMLElBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdCLENBQUM7O0FDWEQ7QUFDQSxTQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUU7QUFDNUIsRUFBRSxPQUFPLENBQUMsT0FBTyxPQUFPLEtBQUssV0FBVyxNQUFNLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsUUFBUSxDQUFDLE9BQU8sRUFBRTtBQUMzQixFQUFFLE9BQU8sQ0FBQyxPQUFPLE9BQU8sS0FBSyxRQUFRLE1BQU0sT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFDRDtBQUNBO0FBQ0EsU0FBUyxPQUFPLENBQUMsUUFBUSxFQUFFO0FBQzNCLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE9BQU8sUUFBUSxDQUFDO0FBQy9DLE9BQU8sSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDMUM7QUFDQSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUN0QixDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUU7QUFDaEMsRUFBRSxJQUFJLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQztBQUNyQztBQUNBLEVBQUUsSUFBSSxNQUFNLEVBQUU7QUFDZCxJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JDO0FBQ0EsSUFBSSxLQUFLLEtBQUssR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFO0FBQzVFLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QixNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEMsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUNEO0FBQ0E7QUFDQSxTQUFTLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQy9CLEVBQUUsSUFBSSxNQUFNLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQztBQUN6QjtBQUNBLEVBQUUsS0FBSyxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRTtBQUM3QyxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUM7QUFDckIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsY0FBYyxDQUFDLE1BQU0sRUFBRTtBQUNoQyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxNQUFNLE1BQU0sQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUNEO0FBQ0E7QUFDQSxJQUFJLFdBQVcsUUFBUSxTQUFTLENBQUM7QUFDakMsSUFBSSxVQUFVLFNBQVMsUUFBUSxDQUFDO0FBQ2hDLElBQUksU0FBUyxVQUFVLE9BQU8sQ0FBQztBQUMvQixJQUFJLFFBQVEsV0FBVyxNQUFNLENBQUM7QUFDOUIsSUFBSSxnQkFBZ0IsR0FBRyxjQUFjLENBQUM7QUFDdEMsSUFBSSxRQUFRLFdBQVcsTUFBTSxDQUFDO0FBQzlCO0FBQ0EsSUFBSSxNQUFNLEdBQUc7QUFDYixDQUFDLFNBQVMsRUFBRSxXQUFXO0FBQ3ZCLENBQUMsUUFBUSxFQUFFLFVBQVU7QUFDckIsQ0FBQyxPQUFPLEVBQUUsU0FBUztBQUNuQixDQUFDLE1BQU0sRUFBRSxRQUFRO0FBQ2pCLENBQUMsY0FBYyxFQUFFLGdCQUFnQjtBQUNqQyxDQUFDLE1BQU0sRUFBRSxRQUFRO0FBQ2pCLENBQUMsQ0FBQztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxXQUFXLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRTtBQUN6QyxFQUFFLElBQUksS0FBSyxHQUFHLEVBQUUsRUFBRSxPQUFPLEdBQUcsU0FBUyxDQUFDLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQztBQUNuRTtBQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxPQUFPLENBQUM7QUFDdEM7QUFDQSxFQUFFLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDM0IsSUFBSSxLQUFLLElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyRjtBQUNBLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUMxQyxJQUFJLEtBQUssSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDN0MsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLE9BQU8sR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQy9CLENBQUM7QUFDRDtBQUNBO0FBQ0EsU0FBUyxlQUFlLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRTtBQUN2QztBQUNBLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQjtBQUNBLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7QUFDOUIsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN2QixFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ25CLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFDO0FBQ0E7QUFDQSxFQUFFLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFO0FBQy9CO0FBQ0EsSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNwRCxHQUFHLE1BQU07QUFDVDtBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztBQUMzQyxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLGVBQWUsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0QsZUFBZSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsZUFBZSxDQUFDO0FBQ3hEO0FBQ0E7QUFDQSxlQUFlLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxTQUFTLFFBQVEsQ0FBQyxPQUFPLEVBQUU7QUFDaEUsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdkQsQ0FBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBLElBQUksU0FBUyxHQUFHLGVBQWUsQ0FBQztBQUNoQztBQUNBO0FBQ0EsU0FBUyxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRTtBQUN0RSxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNoQixFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNoQixFQUFFLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4RDtBQUNBLEVBQUUsSUFBSSxRQUFRLEdBQUcsU0FBUyxHQUFHLGFBQWEsRUFBRTtBQUM1QyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUM7QUFDbkIsSUFBSSxTQUFTLEdBQUcsUUFBUSxHQUFHLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3ZELEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxPQUFPLEdBQUcsUUFBUSxHQUFHLGFBQWEsRUFBRTtBQUMxQyxJQUFJLElBQUksR0FBRyxNQUFNLENBQUM7QUFDbEIsSUFBSSxPQUFPLEdBQUcsUUFBUSxHQUFHLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3JELEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTztBQUNULElBQUksR0FBRyxFQUFFLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUk7QUFDM0UsSUFBSSxHQUFHLEVBQUUsUUFBUSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTTtBQUMzQyxHQUFHLENBQUM7QUFDSixDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7QUFDL0IsRUFBRSxPQUFPLE1BQU0s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SSxDQUFDLENBQUM7QUFDekMsTUFBTSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUN4QyxNQUFNLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2pDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckMsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDakI7QUFDQSxFQUFFLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtBQUNsQixJQUFJLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLElBQUksTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUM7QUFDdkMsSUFBSSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUN0QyxJQUFJLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQy9CLEdBQUcsTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7QUFDekIsSUFBSSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUN2QyxJQUFJLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ3RDLElBQUksTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7QUFDdEMsSUFBSSxNQUFNLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFD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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQ3JNTSxNQUFNLEtBQUssR0FBRyxDQUFDO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQ1RNLE1BQU0sY0FBYyxHQUFHLENBQUM7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUNYTSxNQUFNLGlCQUFpQixHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEtBQUs7QUFDaEUsSUFBSSxNQUFNLFVBQVUsR0FBRztBQUN2QixRQUFRLElBQUk7QUFDWixRQUFRLE9BQU8sRUFBRSxPQUFPO0FBQ3hCLFFBQVEsSUFBSSxFQUFFLFVBQVU7QUFDeEIsUUFBUSxLQUFLLEVBQUUsWUFBWTtBQUMzQixRQUFRLElBQUksRUFBRTtBQUNkLFlBQVksSUFBSSxFQUFFLFVBQVU7QUFDNUIsU0FBUztBQUNULFFBQVEsT0FBTyxFQUFFLEtBQUs7QUFDdEIsUUFBUSxlQUFlLEVBQUU7QUFDekIsWUFBWSxjQUFjLEVBQUUsQ0FBQyxDQUFDLEVBQUV0VCxTQUFPLENBQUMsQ0FBQztBQUN6QyxZQUFZLEdBQUcsRUFBRSxRQUFRO0FBQ3pCLFNBQVM7QUFDVCxRQUFRLEdBQUcsRUFBRTtBQUNiLFlBQVksT0FBTyxFQUFFLElBQUk7QUFDekIsU0FBUztBQUNULFFBQVEsT0FBTyxFQUFFO0FBQ2pCLFlBQVksSUFBSSxFQUFFLE9BQU87QUFDekIsU0FBUztBQUNULFFBQVEsT0FBTyxFQUFFO0FBQ2pCLFlBQVksU0FBUyxFQUFFLGdCQUFnQjtBQUN2QyxZQUFZLEtBQUssRUFBRSxpQ0FBaUM7QUFDcEQsWUFBWSxhQUFhLEVBQUUsdUJBQXVCO0FBQ2xELFlBQVksY0FBYyxFQUFFLHdCQUF3QjtBQUNwRCxZQUFZLElBQUksRUFBRSxLQUFLO0FBQ3ZCLFlBQVksU0FBUyxFQUFFLGdCQUFnQjtBQUN2QyxZQUFZLE9BQU8sRUFBRSxjQUFjO0FBQ25DLFNBQVM7QUFDVCxLQUFLLENBQUM7QUFDTixJQUFJLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUN2QixJQUFJLE1BQU0sdUJBQXVCLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0YsSUFBSSxNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQztBQUNyRCxRQUFRLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9ELElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO0FBQy9CLFFBQVEsSUFBSSxDQUFDLHVCQUF1QixFQUFFO0FBQ3RDLFlBQVksT0FBTyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDckMsWUFBWSxPQUFPLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztBQUN6QyxTQUFTO0FBQ1QsYUFBYTtBQUNiLFlBQVksT0FBTyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RyxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0EsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDdEMsSUFBSSxPQUFPLFVBQVUsQ0FBQztBQUN0QixDQUFDOztBQy9CRCxNQUFNLGlCQUFpQixHQUFHLGNBQWMsQ0FBQztBQUN6QyxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQztBQUNwQyxNQUFNLGtDQUFrQyxHQUFHLHVCQUF1QixDQUFDO0FBQ25FLE1BQU0rRixPQUFLLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3JDLE1BQU0sUUFBUSxHQUFHLENBQUM7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLENBQUM7QUFDRixNQUFNLGtCQUFrQixHQUFHO0FBQzNCLElBQUksc0JBQXNCO0FBQzFCLElBQUksdUJBQXVCO0FBQzNCLElBQUksMkJBQTJCO0FBQy9CLElBQUksNEJBQTRCO0FBQ2hDLElBQUkseUJBQXlCO0FBQzdCLElBQUksK0JBQStCO0FBQ25DLElBQUksZ0NBQWdDO0FBQ3BDLElBQUkscUJBQXFCO0FBQ3pCLElBQUksd0JBQXdCO0FBQzVCLElBQUksMEJBQTBCO0FBQzlCLElBQUksMkJBQTJCO0FBQy9CLElBQUksd0JBQXdCO0FBQzVCLElBQUksc0JBQXNCO0FBQzFCLElBQUkseUJBQXlCO0FBQzdCLElBQUksd0JBQXdCO0FBQzVCLElBQUksNkJBQTZCO0FBQ2pDLENBQUMsQ0FBQztBQUNLLE1BQU0saUJBQWlCLFNBQVMsT0FBTyxDQUFDO0FBQy9DLElBQUksV0FBVyxHQUFHO0FBQ2xCLFFBQVEsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHK0MsUUFBYSxDQUFDO0FBQ2xDLFlBQVksSUFBSSxFQUFFLFdBQVc7QUFDN0IsWUFBWSxRQUFRLEVBQUUsS0FBSztBQUMzQixTQUFTLENBQUMsQ0FBQztBQUNYLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBR0EsUUFBYSxDQUFDO0FBQ3JDLFlBQVksSUFBSSxFQUFFLGNBQWM7QUFDaEMsWUFBWSxRQUFRLEVBQUUsS0FBSztBQUMzQixTQUFTLENBQUMsQ0FBQztBQUNYLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRzRnQixPQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHeGQsU0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDekQsUUFBUSxJQUFJLENBQUMsbUJBQW1CLEdBQUdBLFNBQWMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQztBQUM3RSxLQUFLO0FBQ0wsSUFBSSxPQUFPLEdBQUc7QUFDZCxRQUFRLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNuQixRQUFRLE9BQU83RixXQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLGFBQWE7QUFDNUQsWUFBWSxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNqQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQy9CLGdCQUFnQixNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNySixnQkFBZ0IsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzFGLGdCQUFnQixNQUFNLFNBQVMsR0FBRyxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDeEQsb0JBQW9CLElBQUksRUFBRSxPQUFPO0FBQ2pDLG9CQUFvQixJQUFJLEVBQUUsZ0JBQWdCO0FBQzFDLG9CQUFvQixPQUFPLEVBQUUsaUJBQWlCO0FBQzlDLGlCQUFpQixDQUFDLENBQUM7QUFDbkIsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDM0QsYUFBYTtBQUNiLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDL0IsZ0JBQWdCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDMUQsb0JBQW9CO0FBQ3BCLHdCQUF3QixJQUFJLEVBQUUsVUFBVTtBQUN4Qyx3QkFBd0IsSUFBSSxFQUFFLFNBQVM7QUFDdkMsd0JBQXdCLE9BQU8sRUFBRSxvQ0FBb0M7QUFDckUsd0JBQXdCLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNuRSx3QkFBd0IsT0FBTyxFQUFFLGtCQUFrQjtBQUNuRCxxQkFBcUI7QUFDckIsaUJBQWlCLENBQUMsQ0FBQztBQUNuQixnQkFBZ0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7QUFDckMsb0JBQW9CLE1BQU0sSUFBSSxTQUFTLENBQUMsNEJBQTRCLENBQUMsQ0FBQztBQUN0RSxpQkFBaUI7QUFDakIsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLGFBQWE7QUFDYixZQUFZLElBQUksSUFBSSxDQUFDLG1CQUFtQixLQUFLLFNBQVMsRUFBRTtBQUN4RCxnQkFBZ0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQ3JELG9CQUFvQjtBQUNwQix3QkFBd0IsSUFBSSxFQUFFLFNBQVM7QUFDdkMsd0JBQXdCLElBQUksRUFBRSxrQ0FBa0M7QUFDaEUsd0JBQXdCLE9BQU8sRUFBRSx3QkFBd0I7QUFDekQsd0JBQXdCLE9BQU8sRUFBRSxJQUFJO0FBQ3JDLHdCQUF3QixPQUFPLEVBQUUsa0JBQWtCO0FBQ25ELHFCQUFxQjtBQUNyQixpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CLGdCQUFnQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7QUFDdEYsYUFBYTtBQUNiLFlBQVlOLE9BQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFb0csS0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUIsZ0JBQWdCSyxzQkFBUyxDQUFDckUsV0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDN0Qsb0JBQW9CLFNBQVMsRUFBRSxJQUFJO0FBQ25DLGlCQUFpQixDQUFDLENBQUM7QUFDbkIsZ0JBQWdCcUUsc0JBQVMsQ0FBQ3JFLFdBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRTtBQUNwRSxvQkFBb0IsU0FBUyxFQUFFLElBQUk7QUFDbkMsaUJBQWlCLENBQUMsQ0FBQztBQUNuQixhQUFhO0FBQ2IsWUFBWSxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELFlBQVksTUFBTSxVQUFVLEdBQUcsT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNwRixZQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDekQsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNqRCxZQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVILFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEQsWUFBWXFFLHNCQUFTLENBQUNyRSxXQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDckUsZ0JBQWdCLFNBQVMsRUFBRSxJQUFJO0FBQy9CLGFBQWEsQ0FBQyxDQUFDO0FBQ2YsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLHlCQUF5QixFQUFFLENBQUM7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxDQUFDLENBQUM7QUFDSCxZQUFZLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO0FBQzFDLGdCQUFnQixNQUFNLFNBQVMsR0FBR0EsV0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQy9FLGdCQUFnQixNQUFNLFlBQVksR0FBR0EsV0FBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNsRSxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDbEMsb0JBQW9CcUUsc0JBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM5RCxvQkFBb0JBLHNCQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDakUsaUJBQWlCO0FBQ2pCLGdCQUFnQixJQUFJLENBQUMsU0FBUyxDQUFDckUsV0FBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUUsd0JBQXdCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQzNILGFBQWE7QUFDYixZQUFZLE1BQU0sbUJBQW1CLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRUEsV0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUVBLFdBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDbkksWUFBWSxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLDRCQUE0QixDQUFDLENBQUM7QUFDNUYsWUFBWSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFDckYsWUFBWSxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3pGLFlBQVksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ3BDLGdCQUFnQixNQUFNLFNBQVMsR0FBR0EsV0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzlFLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNsQyxvQkFBb0JxRSxzQkFBUyxDQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzlELG9CQUFvQixJQUFJLENBQUMsU0FBUyxDQUFDckUsV0FBSSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMvRSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUM1QztBQUNBLENBQUMsQ0FBQyxDQUFDO0FBQ0gsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNwRCxZQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLDBCQUEwQixDQUFDLENBQUM7QUFDdEUsWUFBWSxNQUFNLEtBQUssQ0FBQyxDQUFDLG1DQUFtQyxDQUFDLEVBQUU7QUFDL0QsZ0JBQWdCLEdBQUcsRUFBRUEsV0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3RELGFBQWEsQ0FBQyxDQUFDO0FBQ2YsWUFBWSxNQUFNLEtBQUssQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFO0FBQ3hDLGdCQUFnQixHQUFHLEVBQUVBLFdBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUN0RCxhQUFhLENBQUMsQ0FBQztBQUNmLFNBQVMsQ0FBQyxDQUFDO0FBQ1gsS0FBSztBQUNMLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDN0IsUUFBUSxNQUFNLE9BQU8sR0FBR0EsV0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUQsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUNnRSxLQUFXLENBQUMsQ0FBQyxRQUFRLEVBQUVHLElBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEYsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUMxQixZQUFZcWQsMEJBQWEsQ0FBQ3hoQixXQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3hELFNBQVM7QUFDVCxLQUFLO0FBQ0wsSUFBSSxPQUFPLEdBQUc7QUFDZCxRQUFRLE9BQU85QixXQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLGFBQWE7QUFDNUQsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtBQUM1QixnQkFBZ0IsTUFBTSxVQUFVLEdBQUcsTUFBTSxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQ3pELG9CQUFvQixJQUFJLEVBQUUsT0FBTztBQUNqQyxvQkFBb0IsSUFBSSxFQUFFLGlCQUFpQjtBQUMzQyxvQkFBb0IsTUFBTSxFQUFFLHdDQUF3QztBQUNwRSxpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CLGdCQUFnQixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUMzRCxnQkFBZ0IsSUFBSSxDQUFDLElBQUksRUFBRTtBQUMzQixvQkFBb0IsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDekMsaUJBQWlCO0FBQ2pCLHFCQUFxQjtBQUNyQixvQkFBb0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDckMsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixTQUFTLENBQUMsQ0FBQztBQUNYLEtBQUs7QUFDTCxDQUFDO0FBQ0QsaUJBQWlCLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDeEMsSUFBSSxXQUFXLEVBQUUsbUNBQW1DO0FBQ3BELENBQUMsQ0FBQyxDQUFDO0FBQ0gsaUJBQWlCLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUM5TDVCLFNBQVMsWUFBWSxHQUFHO0FBQy9CLEVBQUUsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLElBQUksV0FBVyxJQUFJLFNBQVMsRUFBRTtBQUNqRSxJQUFJLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQztBQUMvQixHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFO0FBQ3BFLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQ3ZFLE1BQU0sT0FBTyxDQUFDLElBQUk7QUFDbEIsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNSLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyw0QkFBNEIsQ0FBQztBQUN0Qzs7QUNaQTtBQUNBO0FBQ08sU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFO0FBQ3ZELEVBQUUsSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7QUFDcEMsSUFBSSxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7QUFDakUsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ2hCLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUNqQixHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUMzQixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEtBQUs7QUFDckQsTUFBTSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2pFLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ2pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU07QUFDdEMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUMvQixNQUFNLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxVQUFVLEtBQUs7QUFDL0QsTUFBTSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekQsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDakIsR0FBRyxDQUFDLENBQUM7QUFDTDs7QUMxQkE7QUFDQTtBQUNPLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtBQUNqRCxFQUFFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztBQUNwQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzdCLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7QUFDekIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxLQUFLO0FBQ2hDLE1BQU0sT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFO0FBQzlCLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZDLFNBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDMUMsS0FBSyxDQUFDO0FBQ04sR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7QUFDeEIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxLQUFLO0FBQ2hDLE1BQU0sSUFBSSxNQUFNLENBQUM7QUFDakIsTUFBTSxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUU7QUFDOUIsU0FBUyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekMsU0FBUyxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUs7QUFDM0IsVUFBVSxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBQzNCLFVBQVUsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZDLFNBQVMsQ0FBQztBQUNWLFNBQVMsSUFBSSxDQUFDLE1BQU07QUFDcEIsVUFBVSxPQUFPLE1BQU0sQ0FBQztBQUN4QixTQUFTLENBQUMsQ0FBQztBQUNYLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFO0FBQ3hCLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sS0FBSztBQUNoQyxNQUFNLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRTtBQUM5QixTQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6QyxTQUFTLEtBQUssQ0FBQyxDQUFDLEtBQUssS0FBSztBQUMxQixVQUFVLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN0QyxTQUFTLENBQUMsQ0FBQztBQUNYLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDNUIsSUFBSSxJQUFJLEVBQUUsSUFBSTtBQUNkLElBQUksSUFBSSxFQUFFLElBQUk7QUFDZCxHQUFHLENBQUMsQ0FBQztBQUNMOztBQzdDQTtBQUNBO0FBQ08sU0FBUyxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7QUFDaEQsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUM3QixJQUFJLE9BQU87QUFDWCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0FBQ3BDLEtBQUssR0FBRyxDQUFDLENBQUMsVUFBVSxLQUFLO0FBQ3pCLE1BQU0sT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQzdCLEtBQUssQ0FBQztBQUNOLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JCO0FBQ0EsRUFBRSxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtBQUNwQixJQUFJLE9BQU87QUFDWCxHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4Qzs7QUNsQkE7QUFDQTtBQUlBO0FBQ0E7QUFDQSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0FBQzNCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakM7QUFDQSxTQUFTLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtBQUNwQyxFQUFFLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSztBQUN4RCxJQUFJLElBQUk7QUFDUixJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztBQUNsQyxHQUFHLENBQUM7QUFDSixFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUM7QUFDdkMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQztBQUM5QixFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxLQUFLO0FBQ3pELElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1RCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1RSxHQUFHLENBQUMsQ0FBQztBQUNMLENBQUM7QUFDRDtBQUNBLFNBQVMsUUFBUSxHQUFHO0FBQ3BCLEVBQUUsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDOUMsRUFBRSxNQUFNLGlCQUFpQixHQUFHO0FBQzVCLElBQUksUUFBUSxFQUFFLEVBQUU7QUFDaEIsR0FBRyxDQUFDO0FBQ0osRUFBRSxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2hGLEVBQUUsT0FBTyxDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzdELEVBQUUsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxVQUFVLEdBQUc7QUFDdEIsRUFBRSxNQUFNLEtBQUssR0FBRztBQUNoQixJQUFJLFFBQVEsRUFBRSxFQUFFO0FBQ2hCLEdBQUcsQ0FBQztBQUNKO0FBQ0EsRUFBRSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdkI7QUFDQSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUNEO0FBQ0EsV0FBZSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUU7O0FDNUN2QztBQUVBO0FBQ0E7QUFDQSxJQUFJdWpCLFNBQU8sR0FBRyxtQkFBbUIsQ0FBQztBQUNsQztBQUNBO0FBQ0EsSUFBSSxTQUFTLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRUEsU0FBTyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkUsSUFBSSxRQUFRLEdBQUc7QUFDZixFQUFFLE1BQU0sRUFBRSxLQUFLO0FBQ2YsRUFBRSxPQUFPLEVBQUUsd0JBQXdCO0FBQ25DLEVBQUUsT0FBTyxFQUFFO0FBQ1gsSUFBSSxNQUFNLEVBQUUsZ0NBQWdDO0FBQzVDLElBQUksWUFBWSxFQUFFLFNBQVM7QUFDM0IsR0FBRztBQUNILEVBQUUsU0FBUyxFQUFFO0FBQ2IsSUFBSSxNQUFNLEVBQUUsRUFBRTtBQUNkLEdBQUc7QUFDSCxDQUFDLENBQUM7QUFDRjtBQUNBO0FBQ0EsU0FBUyxhQUFhLENBQUMsTUFBTSxFQUFFO0FBQy9CLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNmLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxHQUFHO0FBQ0gsRUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSztBQUNyRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUMsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDVCxDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVNDLGVBQWEsQ0FBQyxLQUFLLEVBQUU7QUFDOUIsRUFBRSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSTtBQUNqRCxJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssaUJBQWlCO0FBQ2pFLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsRUFBRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdDLEVBQUUsSUFBSSxLQUFLLEtBQUssSUFBSTtBQUNwQixJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEVBQUUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDO0FBQy9GLEVBQUUsT0FBTyxPQUFPLElBQUksS0FBSyxVQUFVLElBQUksSUFBSSxZQUFZLElBQUksSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoSSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsU0FBUyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUU7QUFDdEMsRUFBRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM3QyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLO0FBQ3hDLElBQUksSUFBSUEsZUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQ3JDLE1BQU0sSUFBSSxFQUFFLEdBQUcsSUFBSSxRQUFRLENBQUM7QUFDNUIsUUFBUSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkQ7QUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdELEtBQUssTUFBTTtBQUNYLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELEtBQUs7QUFDTCxHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUNEO0FBQ0E7QUFDQSxTQUFTLHlCQUF5QixDQUFDLEdBQUcsRUFBRTtBQUN4QyxFQUFFLEtBQUssTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFO0FBQ3pCLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDN0IsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3pDLEVBQUUsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFDakMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekMsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDOUUsR0FBRyxNQUFNO0FBQ1QsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdkMsR0FBRztBQUNILEVBQUUsT0FBTyxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25ELEVBQUUseUJBQXlCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckMsRUFBRSx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0MsRUFBRSxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMzRCxFQUFFLElBQUksT0FBTyxDQUFDLEdBQUcsS0FBSyxVQUFVLEVBQUU7QUFDbEMsSUFBSSxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUU7QUFDekQsTUFBTSxhQUFhLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQzNFLFFBQVEsQ0FBQyxPQUFPLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO0FBQ3hFLE9BQU8sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNqRCxLQUFLO0FBQ0wsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsSSxHQUFHO0FBQ0gsRUFBRSxPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRTtBQUM3QyxFQUFFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUMvQyxFQUFFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDeEMsRUFBRSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzFCLElBQUksT0FBTyxHQUFHLENBQUM7QUFDZixHQUFHO0FBQ0gsRUFBRSxPQUFPLEdBQUcsR0FBRyxTQUFTLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSztBQUMvQyxJQUFJLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRTtBQUN0QixNQUFNLE9BQU8sSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5RSxLQUFLO0FBQ0wsSUFBSSxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RCxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixDQUFDO0FBQ0Q7QUFDQTtBQUNBLElBQUksZ0JBQWdCLEdBQUcsWUFBWSxDQUFDO0FBQ3BDLFNBQVMsY0FBYyxDQUFDLFlBQVksRUFBRTtBQUN0QyxFQUFFLE9BQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFDRCxTQUFTLHVCQUF1QixDQUFDLEdBQUcsRUFBRTtBQUN0QyxFQUFFLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUM5QyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDaEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLEdBQUc7QUFDSCxFQUFFLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdkUsQ0FBQztBQUNEO0FBQ0E7QUFDQSxTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ2xDLEVBQUUsTUFBTSxNQUFNLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDckMsRUFBRSxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDekMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDeEMsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsY0FBYyxDQUFDLEdBQUcsRUFBRTtBQUM3QixFQUFFLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLElBQUksRUFBRTtBQUM1RCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3BDLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkUsS0FBSztBQUNMLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2QsQ0FBQztBQUNELFNBQVMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFO0FBQy9CLEVBQUUsT0FBTyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFFO0FBQ2pFLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDNUQsR0FBRyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBQ0QsU0FBUyxXQUFXLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7QUFDM0MsRUFBRSxLQUFLLEdBQUcsUUFBUSxLQUFLLEdBQUcsSUFBSSxRQUFRLEtBQUssR0FBRyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqRyxFQUFFLElBQUksR0FBRyxFQUFFO0FBQ1gsSUFBSSxPQUFPLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDL0MsR0FBRyxNQUFNO0FBQ1QsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0gsQ0FBQztBQUNELFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRTtBQUMxQixFQUFFLE9BQU8sS0FBSyxLQUFLLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUM7QUFDNUMsQ0FBQztBQUNELFNBQVMsYUFBYSxDQUFDLFFBQVEsRUFBRTtBQUNqQyxFQUFFLE9BQU8sUUFBUSxLQUFLLEdBQUcsSUFBSSxRQUFRLEtBQUssR0FBRyxJQUFJLFFBQVEsS0FBSyxHQUFHLENBQUM7QUFDbEUsQ0FBQztBQUNELFNBQVMsU0FBUyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRTtBQUNyRCxFQUFFLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3hDLEVBQUUsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRTtBQUN4QyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLEVBQUU7QUFDOUYsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQy9CLE1BQU0sSUFBSSxRQUFRLElBQUksUUFBUSxLQUFLLEdBQUcsRUFBRTtBQUN4QyxRQUFRLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsT0FBTztBQUNQLE1BQU0sTUFBTSxDQUFDLElBQUk7QUFDakIsUUFBUSxXQUFXLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUN4RSxPQUFPLENBQUM7QUFDUixLQUFLLE1BQU07QUFDWCxNQUFNLElBQUksUUFBUSxLQUFLLEdBQUcsRUFBRTtBQUM1QixRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNsQyxVQUFVLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsTUFBTSxFQUFFO0FBQzNELFlBQVksTUFBTSxDQUFDLElBQUk7QUFDdkIsY0FBYyxXQUFXLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUMvRSxhQUFhLENBQUM7QUFDZCxXQUFXLENBQUMsQ0FBQztBQUNiLFNBQVMsTUFBTTtBQUNmLFVBQVUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDakQsWUFBWSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNyQyxjQUFjLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RCxhQUFhO0FBQ2IsV0FBVyxDQUFDLENBQUM7QUFDYixTQUFTO0FBQ1QsT0FBTyxNQUFNO0FBQ2IsUUFBUSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDdkIsUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDbEMsVUFBVSxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLE1BQU0sRUFBRTtBQUMzRCxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3BELFdBQVcsQ0FBQyxDQUFDO0FBQ2IsU0FBUyxNQUFNO0FBQ2YsVUFBVSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUNqRCxZQUFZLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3JDLGNBQWMsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLGNBQWMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkUsYUFBYTtBQUNiLFdBQVcsQ0FBQyxDQUFDO0FBQ2IsU0FBUztBQUNULFFBQVEsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDckMsVUFBVSxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkUsU0FBUyxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDckMsVUFBVSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyQyxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHLE1BQU07QUFDVCxJQUFJLElBQUksUUFBUSxLQUFLLEdBQUcsRUFBRTtBQUMxQixNQUFNLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzVCLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNDLE9BQU87QUFDUCxLQUFLLE1BQU0sSUFBSSxLQUFLLEtBQUssRUFBRSxLQUFLLFFBQVEsS0FBSyxHQUFHLElBQUksUUFBUSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZFLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUMvQyxLQUFLLE1BQU0sSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFO0FBQzdCLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUNELFNBQVMsUUFBUSxDQUFDLFFBQVEsRUFBRTtBQUM1QixFQUFFLE9BQU87QUFDVCxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUM7QUFDdkMsR0FBRyxDQUFDO0FBQ0osQ0FBQztBQUNELFNBQVMsTUFBTSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUU7QUFDbkMsRUFBRSxJQUFJLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELEVBQUUsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPO0FBQzdCLElBQUksNEJBQTRCO0FBQ2hDLElBQUksU0FBUyxDQUFDLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRTtBQUNyQyxNQUFNLElBQUksVUFBVSxFQUFFO0FBQ3RCLFFBQVEsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFFBQVEsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFFBQVEsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUM1RCxVQUFVLFFBQVEsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDLFVBQVUsVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUMsU0FBUztBQUNULFFBQVEsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxRQUFRLEVBQUU7QUFDMUQsVUFBVSxJQUFJLEdBQUcsR0FBRywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDL0QsVUFBVSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RSxTQUFTLENBQUMsQ0FBQztBQUNYLFFBQVEsSUFBSSxRQUFRLElBQUksUUFBUSxLQUFLLEdBQUcsRUFBRTtBQUMxQyxVQUFVLElBQUksU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUM5QixVQUFVLElBQUksUUFBUSxLQUFLLEdBQUcsRUFBRTtBQUNoQyxZQUFZLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDNUIsV0FBVyxNQUFNLElBQUksUUFBUSxLQUFLLEdBQUcsRUFBRTtBQUN2QyxZQUFZLFNBQVMsR0FBRyxRQUFRLENBQUM7QUFDakMsV0FBVztBQUNYLFVBQVUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxHQUFHLFFBQVEsR0FBRyxFQUFFLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNoRixTQUFTLE1BQU07QUFDZixVQUFVLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQyxTQUFTO0FBQ1QsT0FBTyxNQUFNO0FBQ2IsUUFBUSxPQUFPLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN2QyxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUcsQ0FBQztBQUNKLEVBQUUsSUFBSSxRQUFRLEtBQUssR0FBRyxFQUFFO0FBQ3hCLElBQUksT0FBTyxRQUFRLENBQUM7QUFDcEIsR0FBRyxNQUFNO0FBQ1QsSUFBSSxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZDLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsS0FBSyxDQUFDLE9BQU8sRUFBRTtBQUN4QixFQUFFLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDNUMsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLE9BQU8sQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakUsRUFBRSxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkQsRUFBRSxJQUFJLElBQUksQ0FBQztBQUNYLEVBQUUsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNqQyxJQUFJLFFBQVE7QUFDWixJQUFJLFNBQVM7QUFDYixJQUFJLEtBQUs7QUFDVCxJQUFJLFNBQVM7QUFDYixJQUFJLFNBQVM7QUFDYixJQUFJLFdBQVc7QUFDZixHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsTUFBTSxnQkFBZ0IsR0FBRyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4RCxFQUFFLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3pDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDMUIsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDaEMsR0FBRztBQUNILEVBQUUsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sS0FBSyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDekgsRUFBRSxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUNsRSxFQUFFLE1BQU0sZUFBZSxHQUFHLDRCQUE0QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUUsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFO0FBQ3hCLElBQUksSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtBQUNsQyxNQUFNLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRztBQUNwRCxRQUFRLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxPQUFPO0FBQ2xDLFVBQVUsa0RBQWtEO0FBQzVELFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNELFNBQVM7QUFDVCxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLEtBQUs7QUFDTCxJQUFJLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtBQUNsQyxNQUFNLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFO0FBQzlDLFFBQVEsTUFBTSx3QkFBd0IsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMzRixRQUFRLE9BQU8sQ0FBQyxNQUFNLEdBQUcsd0JBQXdCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxLQUFLO0FBQ3RHLFVBQVUsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUM3RixVQUFVLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdEUsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDeEMsSUFBSSxHQUFHLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxFQUFFLG1CQUFtQixDQUFDLENBQUM7QUFDdkQsR0FBRyxNQUFNO0FBQ1QsSUFBSSxJQUFJLE1BQU0sSUFBSSxtQkFBbUIsRUFBRTtBQUN2QyxNQUFNLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7QUFDdEMsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDbkQsUUFBUSxJQUFJLEdBQUcsbUJBQW1CLENBQUM7QUFDbkMsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLE9BQU8sSUFBSSxLQUFLLFdBQVcsRUFBRTtBQUMvRCxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxpQ0FBaUMsQ0FBQztBQUNoRSxHQUFHO0FBQ0gsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLElBQUksS0FBSyxXQUFXLEVBQUU7QUFDeEUsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2QsR0FBRztBQUNILEVBQUUsT0FBTyxNQUFNLENBQUMsTUFBTTtBQUN0QixJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUU7QUFDNUIsSUFBSSxPQUFPLElBQUksS0FBSyxXQUFXLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJO0FBQ2pELElBQUksT0FBTyxDQUFDLE9BQU8sR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSTtBQUN6RCxHQUFHLENBQUM7QUFDSixDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7QUFDeEQsRUFBRSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFDRDtBQUNBO0FBQ0EsU0FBU0MsY0FBWSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUU7QUFDaEQsRUFBRSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3BELEVBQUUsTUFBTSxTQUFTLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMvRCxFQUFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7QUFDbEMsSUFBSSxRQUFRLEVBQUUsU0FBUztBQUN2QixJQUFJLFFBQVEsRUFBRUEsY0FBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO0FBQ2hELElBQUksS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQztBQUN0QyxJQUFJLEtBQUs7QUFDVCxHQUFHLENBQUMsQ0FBQztBQUNMLENBQUM7QUFDRDtBQUNBO0FBQ0EsSUFBSSxRQUFRLEdBQUdBLGNBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDOztBQzNWM0MsTUFBTSxZQUFZLFNBQVMsS0FBSyxDQUFDO0FBQ2pDLEVBQUUsSUFBSSxDQUFDO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsRUFBRSxNQUFNLENBQUM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxFQUFFLE9BQU8sQ0FBQztBQUNWO0FBQ0E7QUFDQTtBQUNBLEVBQUUsUUFBUSxDQUFDO0FBQ1gsRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUU7QUFDNUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkIsSUFBSSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtBQUNqQyxNQUFNLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3RELEtBQUs7QUFDTCxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDO0FBQzVCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7QUFDN0IsSUFBSSxJQUFJLFVBQVUsSUFBSSxPQUFPLEVBQUU7QUFDL0IsTUFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDdkMsS0FBSztBQUNMLElBQUksTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNELElBQUksSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7QUFDL0MsTUFBTSxXQUFXLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO0FBQ3ZFLFFBQVEsYUFBYSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPO0FBQ3BFLFVBQVUsTUFBTTtBQUNoQixVQUFVLGFBQWE7QUFDdkIsU0FBUztBQUNULE9BQU8sQ0FBQyxDQUFDO0FBQ1QsS0FBSztBQUNMLElBQUksV0FBVyxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO0FBQzVKLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUM7QUFDL0IsR0FBRztBQUNIOztBQ3BDQTtBQUdBO0FBQ0E7QUFDQSxJQUFJRixTQUFPLEdBQUcsbUJBQW1CLENBQUM7QUFDbEM7QUFDQTtBQUNBLFNBQVMsYUFBYSxDQUFDLEtBQUssRUFBRTtBQUM5QixFQUFFLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJO0FBQ2pELElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsRUFBRSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxpQkFBaUI7QUFDakUsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixFQUFFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0MsRUFBRSxJQUFJLEtBQUssS0FBSyxJQUFJO0FBQ3BCLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsRUFBRSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUM7QUFDL0YsRUFBRSxPQUFPLE9BQU8sSUFBSSxLQUFLLFVBQVUsSUFBSSxJQUFJLFlBQVksSUFBSSxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hJLENBQUM7QUFJRDtBQUNBO0FBQ0EsU0FBUyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUU7QUFDckMsRUFBRSxPQUFPLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNoQyxDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsWUFBWSxDQUFDLGNBQWMsRUFBRTtBQUN0QyxFQUFFLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxPQUFPLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDO0FBQzFHLEVBQUUsTUFBTSx3QkFBd0IsR0FBRyxjQUFjLENBQUMsT0FBTyxFQUFFLHdCQUF3QixLQUFLLEtBQUssQ0FBQztBQUM5RixFQUFFLElBQUksYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNoRixJQUFJLGNBQWMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUQsR0FBRztBQUNILEVBQUUsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ25CLEVBQUUsSUFBSSxNQUFNLENBQUM7QUFDYixFQUFFLElBQUksR0FBRyxDQUFDO0FBQ1YsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsVUFBVSxDQUFDO0FBQzdCLEVBQUUsSUFBSSxjQUFjLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNyQyxJQUFJLEtBQUssR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUN6QyxHQUFHO0FBQ0gsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2QsSUFBSSxNQUFNLElBQUksS0FBSztBQUNuQixNQUFNLGdLQUFnSztBQUN0SyxLQUFLLENBQUM7QUFDTixHQUFHO0FBQ0gsRUFBRSxPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFO0FBQ25DLElBQUksTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNO0FBQ2pDLElBQUksSUFBSSxFQUFFLGNBQWMsQ0FBQyxJQUFJO0FBQzdCLElBQUksUUFBUSxFQUFFLGNBQWMsQ0FBQyxPQUFPLEVBQUUsUUFBUTtBQUM5QztBQUNBLElBQUksT0FBTyxFQUFFLE1BQU0sQ0FBQyxXQUFXO0FBQy9CLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUs7QUFDcEUsUUFBUSxJQUFJO0FBQ1osUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ3JCLE9BQU8sQ0FBQztBQUNSLEtBQUs7QUFDTCxJQUFJLE1BQU0sRUFBRSxjQUFjLENBQUMsT0FBTyxFQUFFLE1BQU07QUFDMUM7QUFDQTtBQUNBLElBQUksR0FBRyxjQUFjLENBQUMsSUFBSSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRTtBQUNoRCxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxRQUFRLEtBQUs7QUFDOUIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQztBQUN2QixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQzdCLElBQUksS0FBSyxNQUFNLFdBQVcsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFO0FBQ2hELE1BQU0sT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxLQUFLO0FBQ0wsSUFBSSxJQUFJLGFBQWEsSUFBSSxPQUFPLEVBQUU7QUFDbEMsTUFBTSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7QUFDekYsTUFBTSxNQUFNLGVBQWUsR0FBRyxPQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3ZELE1BQU0sR0FBRyxDQUFDLElBQUk7QUFDZCxRQUFRLENBQUMsb0JBQW9CLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxrREFBa0QsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsZUFBZSxHQUFHLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDbk0sT0FBTyxDQUFDO0FBQ1IsS0FBSztBQUNMLElBQUksSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sS0FBSyxHQUFHLEVBQUU7QUFDMUMsTUFBTSxPQUFPO0FBQ2IsS0FBSztBQUNMLElBQUksSUFBSSxjQUFjLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRTtBQUMxQyxNQUFNLElBQUksTUFBTSxHQUFHLEdBQUcsRUFBRTtBQUN4QixRQUFRLE9BQU87QUFDZixPQUFPO0FBQ1AsTUFBTSxNQUFNLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFO0FBQzFELFFBQVEsUUFBUSxFQUFFO0FBQ2xCLFVBQVUsR0FBRztBQUNiLFVBQVUsTUFBTTtBQUNoQixVQUFVLE9BQU87QUFDakIsVUFBVSxJQUFJLEVBQUUsS0FBSyxDQUFDO0FBQ3RCLFNBQVM7QUFDVCxRQUFRLE9BQU8sRUFBRSxjQUFjO0FBQy9CLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsS0FBSztBQUNMLElBQUksSUFBSSxNQUFNLEtBQUssR0FBRyxFQUFFO0FBQ3hCLE1BQU0sTUFBTSxJQUFJLFlBQVksQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFO0FBQ3JELFFBQVEsUUFBUSxFQUFFO0FBQ2xCLFVBQVUsR0FBRztBQUNiLFVBQVUsTUFBTTtBQUNoQixVQUFVLE9BQU87QUFDakIsVUFBVSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUMsUUFBUSxDQUFDO0FBQy9DLFNBQVM7QUFDVCxRQUFRLE9BQU8sRUFBRSxjQUFjO0FBQy9CLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsS0FBSztBQUNMLElBQUksSUFBSSxNQUFNLElBQUksR0FBRyxFQUFFO0FBQ3ZCLE1BQU0sTUFBTSxJQUFJLEdBQUcsTUFBTSxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbkQsTUFBTSxNQUFNLEtBQUssR0FBRyxJQUFJLFlBQVksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFO0FBQ25FLFFBQVEsUUFBUSxFQUFFO0FBQ2xCLFVBQVUsR0FBRztBQUNiLFVBQVUsTUFBTTtBQUNoQixVQUFVLE9BQU87QUFDakIsVUFBVSxJQUFJO0FBQ2QsU0FBUztBQUNULFFBQVEsT0FBTyxFQUFFLGNBQWM7QUFDL0IsT0FBTyxDQUFDLENBQUM7QUFDVCxNQUFNLE1BQU0sS0FBSyxDQUFDO0FBQ2xCLEtBQUs7QUFDTCxJQUFJLE9BQU8sd0JBQXdCLEdBQUcsTUFBTSxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztBQUN0RixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUs7QUFDcEIsSUFBSSxPQUFPO0FBQ1gsTUFBTSxNQUFNO0FBQ1osTUFBTSxHQUFHO0FBQ1QsTUFBTSxPQUFPO0FBQ2IsTUFBTSxJQUFJO0FBQ1YsS0FBSyxDQUFDO0FBQ04sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxLQUFLO0FBQ3RCLElBQUksSUFBSSxLQUFLLFlBQVksWUFBWTtBQUNyQyxNQUFNLE1BQU0sS0FBSyxDQUFDO0FBQ2xCLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFlBQVk7QUFDeEMsTUFBTSxNQUFNLEtBQUssQ0FBQztBQUNsQixJQUFJLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7QUFDaEMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLE9BQU8sSUFBSSxLQUFLLEVBQUU7QUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLFlBQVksS0FBSyxFQUFFO0FBQ3hDLFFBQVEsT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ3RDLE9BQU8sTUFBTSxJQUFJLE9BQU8sS0FBSyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFDbEQsUUFBUSxPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztBQUM5QixPQUFPO0FBQ1AsS0FBSztBQUNMLElBQUksTUFBTSxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO0FBQ3pDLE1BQU0sT0FBTyxFQUFFLGNBQWM7QUFDN0IsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHLENBQUMsQ0FBQztBQUNMLENBQUM7QUFDRCxlQUFlLGVBQWUsQ0FBQyxRQUFRLEVBQUU7QUFDekMsRUFBRSxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUMzRCxFQUFFLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFO0FBQzdDLElBQUksT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDeEUsR0FBRztBQUNILEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7QUFDbEUsSUFBSSxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMzQixHQUFHO0FBQ0gsRUFBRSxPQUFPLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFDRCxTQUFTLGNBQWMsQ0FBQyxJQUFJLEVBQUU7QUFDOUIsRUFBRSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7QUFDOUIsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixFQUFFLElBQUksTUFBTSxDQUFDO0FBQ2IsRUFBRSxJQUFJLG1CQUFtQixJQUFJLElBQUksRUFBRTtBQUNuQyxJQUFJLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQzVDLEdBQUcsTUFBTTtBQUNULElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNoQixHQUFHO0FBQ0gsRUFBRSxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUU7QUFDekIsSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ3BDLE1BQU0sT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdkYsS0FBSztBQUNMLElBQUksT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdEMsR0FBRztBQUNILEVBQUUsT0FBTyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVNFLGNBQVksQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFO0FBQ2hELEVBQUUsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN0RCxFQUFFLE1BQU0sTUFBTSxHQUFHLFNBQVMsS0FBSyxFQUFFLFVBQVUsRUFBRTtBQUM3QyxJQUFJLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQy9ELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtBQUNuRSxNQUFNLE9BQU8sWUFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztBQUM1RCxLQUFLO0FBQ0wsSUFBSSxNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQU0sRUFBRSxXQUFXLEtBQUs7QUFDOUMsTUFBTSxPQUFPLFlBQVk7QUFDekIsUUFBUSxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzdELE9BQU8sQ0FBQztBQUNSLEtBQUssQ0FBQztBQUNOLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7QUFDNUIsTUFBTSxRQUFRLEVBQUUsU0FBUztBQUN6QixNQUFNLFFBQVEsRUFBRUEsY0FBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO0FBQ2xELEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxPQUFPLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUNuRSxHQUFHLENBQUM7QUFDSixFQUFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7QUFDL0IsSUFBSSxRQUFRLEVBQUUsU0FBUztBQUN2QixJQUFJLFFBQVEsRUFBRUEsY0FBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO0FBQ2hELEdBQUcsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUNEO0FBQ0E7QUFDQSxJQUFJLE9BQU8sR0FBR0EsY0FBWSxDQUFDLFFBQVEsRUFBRTtBQUNyQyxFQUFFLE9BQU8sRUFBRTtBQUNYLElBQUksWUFBWSxFQUFFLENBQUMsbUJBQW1CLEVBQUVGLFNBQU8sQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztBQUNuRSxHQUFHO0FBQ0gsQ0FBQyxDQUFDOztBQ3hNRjtBQUdBO0FBQ0E7QUFDQSxJQUFJQSxTQUFPLEdBQUcsbUJBQW1CLENBQUM7QUFPbEM7QUFDQTtBQUNBLFNBQVMsOEJBQThCLENBQUMsSUFBSSxFQUFFO0FBQzlDLEVBQUUsT0FBTyxDQUFDO0FBQ1YsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFDRCxJQUFJLG9CQUFvQixHQUFHLGNBQWMsS0FBSyxDQUFDO0FBQy9DLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFO0FBQzNDLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDcEQsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQztBQUM1QixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQzNCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDN0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDbEMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFDOUIsSUFBSSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtBQUNqQyxNQUFNLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3RELEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxJQUFJLEdBQUcsc0JBQXNCLENBQUM7QUFDaEMsRUFBRSxNQUFNLENBQUM7QUFDVCxFQUFFLElBQUksQ0FBQztBQUNQLENBQUMsQ0FBQztBQUNGO0FBQ0E7QUFDQSxJQUFJLG9CQUFvQixHQUFHO0FBQzNCLEVBQUUsUUFBUTtBQUNWLEVBQUUsU0FBUztBQUNYLEVBQUUsS0FBSztBQUNQLEVBQUUsU0FBUztBQUNYLEVBQUUsU0FBUztBQUNYLEVBQUUsT0FBTztBQUNULEVBQUUsV0FBVztBQUNiLENBQUMsQ0FBQztBQUNGLElBQUksMEJBQTBCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVELElBQUksb0JBQW9CLEdBQUcsZUFBZSxDQUFDO0FBQzNDLFNBQVMsT0FBTyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQzNDLEVBQUUsSUFBSSxPQUFPLEVBQUU7QUFDZixJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sSUFBSSxPQUFPLEVBQUU7QUFDekQsTUFBTSxPQUFPLE9BQU8sQ0FBQyxNQUFNO0FBQzNCLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQywwREFBMEQsQ0FBQyxDQUFDO0FBQy9FLE9BQU8sQ0FBQztBQUNSLEtBQUs7QUFDTCxJQUFJLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFO0FBQy9CLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7QUFDbkQsUUFBUSxTQUFTO0FBQ2pCLE1BQU0sT0FBTyxPQUFPLENBQUMsTUFBTTtBQUMzQixRQUFRLElBQUksS0FBSztBQUNqQixVQUFVLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxDQUFDLGlDQUFpQyxDQUFDO0FBQ3ZFLFNBQVM7QUFDVCxPQUFPLENBQUM7QUFDUixLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsTUFBTSxhQUFhLEdBQUcsT0FBTyxLQUFLLEtBQUssUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDOUYsRUFBRSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSTtBQUNwQyxJQUFJLGFBQWE7QUFDakIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEtBQUs7QUFDNUIsSUFBSSxJQUFJLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUM1QyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkMsTUFBTSxPQUFPLE1BQU0sQ0FBQztBQUNwQixLQUFLO0FBQ0wsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtBQUMzQixNQUFNLE1BQU0sQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQzVCLEtBQUs7QUFDTCxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsRUFBRSxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztBQUM5RSxFQUFFLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQzFDLElBQUksY0FBYyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQy9FLEdBQUc7QUFDSCxFQUFFLE9BQU8sUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSztBQUNyRCxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDOUIsTUFBTSxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDekIsTUFBTSxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ3ZELFFBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0MsT0FBTztBQUNQLE1BQU0sTUFBTSxJQUFJLG9CQUFvQjtBQUNwQyxRQUFRLGNBQWM7QUFDdEIsUUFBUSxPQUFPO0FBQ2YsUUFBUSxRQUFRLENBQUMsSUFBSTtBQUNyQixPQUFPLENBQUM7QUFDUixLQUFLO0FBQ0wsSUFBSSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzlCLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUNEO0FBQ0E7QUFDQSxTQUFTLFlBQVksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFO0FBQzdDLEVBQUUsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNwRCxFQUFFLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sS0FBSztBQUNyQyxJQUFJLE9BQU8sT0FBTyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDL0MsR0FBRyxDQUFDO0FBQ0osRUFBRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQy9CLElBQUksUUFBUSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztBQUNqRCxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtBQUNqQyxHQUFHLENBQUMsQ0FBQztBQUNMLENBQUM7QUFDRDtBQUNBO0FBQ2UsWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUNyQyxFQUFFLE9BQU8sRUFBRTtBQUNYLElBQUksWUFBWSxFQUFFLENBQUMsbUJBQW1CLEVBQUVBLFNBQU8sQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztBQUNuRSxHQUFHO0FBQ0gsRUFBRSxNQUFNLEVBQUUsTUFBTTtBQUNoQixFQUFFLEdBQUcsRUFBRSxVQUFVO0FBQ2pCLENBQUMsRUFBRTtBQUNILFNBQVMsaUJBQWlCLENBQUMsYUFBYSxFQUFFO0FBQzFDLEVBQUUsT0FBTyxZQUFZLENBQUMsYUFBYSxFQUFFO0FBQ3JDLElBQUksTUFBTSxFQUFFLE1BQU07QUFDbEIsSUFBSSxHQUFHLEVBQUUsVUFBVTtBQUNuQixHQUFHLENBQUMsQ0FBQztBQUNMOztBQzNIQTtBQUNBLElBQUksNEJBQTRCLEdBQUcsT0FBTyxDQUFDO0FBQzNDLElBQUkscUJBQXFCLEdBQUcsT0FBTyxDQUFDO0FBQ3BDLElBQUksdUJBQXVCLEdBQUcsT0FBTyxDQUFDO0FBQ3RDLGVBQWUsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUMzQixFQUFFLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztBQUMvQyxFQUFFLE1BQU0sY0FBYyxHQUFHLDRCQUE0QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkcsRUFBRSxNQUFNLGNBQWMsR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0QsRUFBRSxNQUFNLFNBQVMsR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLGNBQWMsR0FBRyxjQUFjLEdBQUcsY0FBYyxHQUFHLGdCQUFnQixHQUFHLE9BQU8sQ0FBQztBQUNsSCxFQUFFLE9BQU87QUFDVCxJQUFJLElBQUksRUFBRSxPQUFPO0FBQ2pCLElBQUksS0FBSztBQUNULElBQUksU0FBUztBQUNiLEdBQUcsQ0FBQztBQUNKLENBQUM7QUFDRDtBQUNBO0FBQ0EsU0FBUyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUU7QUFDeEMsRUFBRSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUN0QyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM3QixHQUFHO0FBQ0gsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUNEO0FBQ0E7QUFDQSxlQUFlLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7QUFDdkQsRUFBRSxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUs7QUFDekMsSUFBSSxLQUFLO0FBQ1QsSUFBSSxVQUFVO0FBQ2QsR0FBRyxDQUFDO0FBQ0osRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLGFBQWEsR0FBRyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsRSxFQUFFLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFDRDtBQUNBO0FBQ0EsSUFBSSxlQUFlLEdBQUcsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUU7QUFDdkQsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2QsSUFBSSxNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7QUFDaEYsR0FBRztBQUNILEVBQUUsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFDakMsSUFBSSxNQUFNLElBQUksS0FBSztBQUNuQixNQUFNLHVFQUF1RTtBQUM3RSxLQUFLLENBQUM7QUFDTixHQUFHO0FBQ0gsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsRCxFQUFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRTtBQUMvQyxJQUFJLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7QUFDaEMsR0FBRyxDQUFDLENBQUM7QUFDTCxDQUFDOztBQ2hERCxNQUFNQSxTQUFPLEdBQUcsT0FBTzs7QUNNdkIsTUFBTSxJQUFJLEdBQUcsTUFBTTtBQUNuQixDQUFDLENBQUM7QUFDRixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMvQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqRCxNQUFNLGNBQWMsR0FBRyxDQUFDLGdCQUFnQixFQUFFQSxTQUFPLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdEUsTUFBTSxPQUFPLENBQUM7QUFDZCxFQUFFLE9BQU8sT0FBTyxHQUFHQSxTQUFPLENBQUM7QUFDM0IsRUFBRSxPQUFPLFFBQVEsQ0FBQyxRQUFRLEVBQUU7QUFDNUIsSUFBSSxNQUFNLG1CQUFtQixHQUFHLGNBQWMsSUFBSSxDQUFDO0FBQ25ELE1BQU0sV0FBVyxDQUFDLEdBQUcsSUFBSSxFQUFFO0FBQzNCLFFBQVEsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0QyxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssVUFBVSxFQUFFO0FBQzVDLFVBQVUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ25DLFVBQVUsT0FBTztBQUNqQixTQUFTO0FBQ1QsUUFBUSxLQUFLO0FBQ2IsVUFBVSxNQUFNLENBQUMsTUFBTTtBQUN2QixZQUFZLEVBQUU7QUFDZCxZQUFZLFFBQVE7QUFDcEIsWUFBWSxPQUFPO0FBQ25CLFlBQVksT0FBTyxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUMsU0FBUyxHQUFHO0FBQ3RELGNBQWMsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDckUsYUFBYSxHQUFHLElBQUk7QUFDcEIsV0FBVztBQUNYLFNBQVMsQ0FBQztBQUNWLE9BQU87QUFDUCxLQUFLLENBQUM7QUFDTixJQUFJLE9BQU8sbUJBQW1CLENBQUM7QUFDL0IsR0FBRztBQUNILEVBQUUsT0FBTyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsT0FBTyxNQUFNLENBQUMsR0FBRyxVQUFVLEVBQUU7QUFDL0IsSUFBSSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hDLElBQUksTUFBTSxVQUFVLEdBQUcsY0FBYyxJQUFJLENBQUM7QUFDMUMsTUFBTSxPQUFPLE9BQU8sR0FBRyxjQUFjLENBQUMsTUFBTTtBQUM1QyxRQUFRLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZFLE9BQU8sQ0FBQztBQUNSLEtBQUssQ0FBQztBQUNOLElBQUksT0FBTyxVQUFVLENBQUM7QUFDdEIsR0FBRztBQUNILEVBQUUsV0FBVyxDQUFDLE9BQU8sR0FBRyxFQUFFLEVBQUU7QUFDNUIsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUN2QyxJQUFJLE1BQU0sZUFBZSxHQUFHO0FBQzVCLE1BQU0sT0FBTyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU87QUFDaEQsTUFBTSxPQUFPLEVBQUUsRUFBRTtBQUNqQixNQUFNLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFO0FBQ2xEO0FBQ0EsUUFBUSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO0FBQ3hDLE9BQU8sQ0FBQztBQUNSLE1BQU0sU0FBUyxFQUFFO0FBQ2pCLFFBQVEsUUFBUSxFQUFFLEVBQUU7QUFDcEIsUUFBUSxNQUFNLEVBQUUsRUFBRTtBQUNsQixPQUFPO0FBQ1AsS0FBSyxDQUFDO0FBQ04sSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzFILElBQUksSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO0FBQ3pCLE1BQU0sZUFBZSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQ2hELEtBQUs7QUFDTCxJQUFJLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRTtBQUMxQixNQUFNLGVBQWUsQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDNUQsS0FBSztBQUNMLElBQUksSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO0FBQzFCLE1BQU0sZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO0FBQzlELEtBQUs7QUFDTCxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUNyRCxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUM3RSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU07QUFDNUIsTUFBTTtBQUNOLFFBQVEsS0FBSyxFQUFFLElBQUk7QUFDbkIsUUFBUSxJQUFJLEVBQUUsSUFBSTtBQUNsQixRQUFRLElBQUksRUFBRSxXQUFXO0FBQ3pCLFFBQVEsS0FBSyxFQUFFLFlBQVk7QUFDM0IsT0FBTztBQUNQLE1BQU0sT0FBTyxDQUFDLEdBQUc7QUFDakIsS0FBSyxDQUFDO0FBQ04sSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO0FBQy9CLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFDekIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLGFBQWE7QUFDakMsVUFBVSxJQUFJLEVBQUUsaUJBQWlCO0FBQ2pDLFNBQVMsQ0FBQyxDQUFDO0FBQ1gsT0FBTyxNQUFNO0FBQ2IsUUFBUSxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25ELFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDekIsT0FBTztBQUNQLEtBQUssTUFBTTtBQUNYLE1BQU0sTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLFlBQVksRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUN4RCxNQUFNLE1BQU0sSUFBSSxHQUFHLFlBQVk7QUFDL0IsUUFBUSxNQUFNLENBQUMsTUFBTTtBQUNyQixVQUFVO0FBQ1YsWUFBWSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87QUFDakMsWUFBWSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksT0FBTyxFQUFFLElBQUk7QUFDekIsWUFBWSxjQUFjLEVBQUUsWUFBWTtBQUN4QyxXQUFXO0FBQ1gsVUFBVSxPQUFPLENBQUMsSUFBSTtBQUN0QixTQUFTO0FBQ1QsT0FBTyxDQUFDO0FBQ1IsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEMsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN2QixLQUFLO0FBQ0wsSUFBSSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDOUMsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtBQUM5RCxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN0RSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLENBQUM7QUFDVixFQUFFLE9BQU8sQ0FBQztBQUNWLEVBQUUsR0FBRyxDQUFDO0FBQ04sRUFBRSxJQUFJLENBQUM7QUFDUDtBQUNBLEVBQUUsSUFBSSxDQUFDO0FBQ1A7O0FDbElBLE1BQU1BLFNBQU8sR0FBRyxPQUFPOztBQ0N2QixTQUFTLFVBQVUsQ0FBQyxPQUFPLEVBQUU7QUFDN0IsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxLQUFLO0FBQ3JELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzFDLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzdCLElBQUksTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25FLElBQUksTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNqRSxJQUFJLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSztBQUMvQyxNQUFNLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUNoRSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSTtBQUN0QixRQUFRLENBQUMsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDL0csT0FBTyxDQUFDO0FBQ1IsTUFBTSxPQUFPLFFBQVEsQ0FBQztBQUN0QixLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEtBQUs7QUFDeEIsTUFBTSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLFNBQVMsQ0FBQztBQUNuRixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSztBQUN2QixRQUFRLENBQUMsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDNUcsT0FBTyxDQUFDO0FBQ1IsTUFBTSxNQUFNLEtBQUssQ0FBQztBQUNsQixLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUNELFVBQVUsQ0FBQyxPQUFPLEdBQUdBLFNBQU87O0FDdEI1QjtBQUNBLElBQUlBLFNBQU8sR0FBRyxRQUFRLENBQUM7QUFDdkI7QUFDQTtBQUNBLFNBQVMsOEJBQThCLENBQUMsUUFBUSxFQUFFO0FBQ2xELEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUU7QUFDdEIsSUFBSSxPQUFPO0FBQ1gsTUFBTSxHQUFHLFFBQVE7QUFDakIsTUFBTSxJQUFJLEVBQUUsRUFBRTtBQUNkLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSCxFQUFFLE1BQU0sMEJBQTBCLEdBQUcsYUFBYSxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksRUFBRSxLQUFLLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pHLEVBQUUsSUFBSSxDQUFDLDBCQUEwQjtBQUNqQyxJQUFJLE9BQU8sUUFBUSxDQUFDO0FBQ3BCLEVBQUUsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0FBQzdELEVBQUUsTUFBTSxtQkFBbUIsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDO0FBQ2pFLEVBQUUsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDL0MsRUFBRSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7QUFDMUMsRUFBRSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUM7QUFDNUMsRUFBRSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQ25DLEVBQUUsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckQsRUFBRSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzNDLEVBQUUsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdkIsRUFBRSxJQUFJLE9BQU8saUJBQWlCLEtBQUssV0FBVyxFQUFFO0FBQ2hELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQztBQUN6RCxHQUFHO0FBQ0gsRUFBRSxJQUFJLE9BQU8sbUJBQW1CLEtBQUssV0FBVyxFQUFFO0FBQ2xELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxtQkFBbUIsQ0FBQztBQUM3RCxHQUFHO0FBQ0gsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7QUFDekMsRUFBRSxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsUUFBUSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFO0FBQzlDLEVBQUUsTUFBTSxPQUFPLEdBQUcsT0FBTyxLQUFLLEtBQUssVUFBVSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3pILEVBQUUsTUFBTSxhQUFhLEdBQUcsT0FBTyxLQUFLLEtBQUssVUFBVSxHQUFHLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQzlFLEVBQUUsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUNoQyxFQUFFLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQ3hCLEVBQUUsT0FBTztBQUNULElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLE9BQU87QUFDbkMsTUFBTSxNQUFNLElBQUksR0FBRztBQUNuQixRQUFRLElBQUksQ0FBQyxHQUFHO0FBQ2hCLFVBQVUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoQyxRQUFRLElBQUk7QUFDWixVQUFVLE1BQU0sUUFBUSxHQUFHLE1BQU0sYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLFVBQVUsTUFBTSxrQkFBa0IsR0FBRyw4QkFBOEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM5RSxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsS0FBSztBQUM5RCxZQUFZLHlCQUF5QjtBQUNyQyxXQUFXLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFVBQVUsT0FBTyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxDQUFDO0FBQy9DLFNBQVMsQ0FBQyxPQUFPLEtBQUssRUFBRTtBQUN4QixVQUFVLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxHQUFHO0FBQ2xDLFlBQVksTUFBTSxLQUFLLENBQUM7QUFDeEIsVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ25CLFVBQVUsT0FBTztBQUNqQixZQUFZLEtBQUssRUFBRTtBQUNuQixjQUFjLE1BQU0sRUFBRSxHQUFHO0FBQ3pCLGNBQWMsT0FBTyxFQUFFLEVBQUU7QUFDekIsY0FBYyxJQUFJLEVBQUUsRUFBRTtBQUN0QixhQUFhO0FBQ2IsV0FBVyxDQUFDO0FBQ1osU0FBUztBQUNULE9BQU87QUFDUCxLQUFLLENBQUM7QUFDTixHQUFHLENBQUM7QUFDSixDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsUUFBUSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRTtBQUNyRCxFQUFFLElBQUksT0FBTyxVQUFVLEtBQUssVUFBVSxFQUFFO0FBQ3hDLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQztBQUN2QixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUN4QixHQUFHO0FBQ0gsRUFBRSxPQUFPLE1BQU07QUFDZixJQUFJLE9BQU87QUFDWCxJQUFJLEVBQUU7QUFDTixJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRTtBQUNoRSxJQUFJLEtBQUs7QUFDVCxHQUFHLENBQUM7QUFDSixDQUFDO0FBQ0QsU0FBUyxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFO0FBQ3BELEVBQUUsT0FBTyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLO0FBQzNDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFO0FBQ3JCLE1BQU0sT0FBTyxPQUFPLENBQUM7QUFDckIsS0FBSztBQUNMLElBQUksSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQzFCLElBQUksU0FBUyxJQUFJLEdBQUc7QUFDcEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTTtBQUM1QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUk7QUFDM0QsS0FBSyxDQUFDO0FBQ04sSUFBSSxJQUFJLFNBQVMsRUFBRTtBQUNuQixNQUFNLE9BQU8sT0FBTyxDQUFDO0FBQ3JCLEtBQUs7QUFDTCxJQUFJLE9BQU8sTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3RELEdBQUcsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUNEO0FBQ0E7QUFDMEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7QUFDbEQsRUFBRSxRQUFRO0FBQ1YsQ0FBQyxFQUFFO0FBMlBIO0FBQ0E7QUFDQSxTQUFTLFlBQVksQ0FBQyxPQUFPLEVBQUU7QUFDL0IsRUFBRSxPQUFPO0FBQ1QsSUFBSSxRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRTtBQUMxRCxNQUFNLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7QUFDNUMsS0FBSyxDQUFDO0FBQ04sR0FBRyxDQUFDO0FBQ0osQ0FBQztBQUNELFlBQVksQ0FBQyxPQUFPLEdBQUdBLFNBQU87O0FDNVc5QixNQUFNQSxTQUFPLEdBQUcsUUFBUTs7QUNBeEIsTUFBTSxTQUFTLEdBQUc7QUFDbEIsRUFBRSxPQUFPLEVBQUU7QUFDWCxJQUFJLHVDQUF1QyxFQUFFO0FBQzdDLE1BQU0scURBQXFEO0FBQzNELEtBQUs7QUFDTCxJQUFJLHdDQUF3QyxFQUFFO0FBQzlDLE1BQU0sK0RBQStEO0FBQ3JFLEtBQUs7QUFDTCxJQUFJLDBCQUEwQixFQUFFO0FBQ2hDLE1BQU0sNEVBQTRFO0FBQ2xGLEtBQUs7QUFDTCxJQUFJLDRCQUE0QixFQUFFO0FBQ2xDLE1BQU0sdUVBQXVFO0FBQzdFLEtBQUs7QUFDTCxJQUFJLGtCQUFrQixFQUFFO0FBQ3hCLE1BQU0sMERBQTBEO0FBQ2hFLEtBQUs7QUFDTCxJQUFJLGlCQUFpQixFQUFFO0FBQ3ZCLE1BQU0seURBQXlEO0FBQy9ELEtBQUs7QUFDTCxJQUFJLHlCQUF5QixFQUFFO0FBQy9CLE1BQU0sc0VBQXNFO0FBQzVFLEtBQUs7QUFDTCxJQUFJLCtCQUErQixFQUFFO0FBQ3JDLE1BQU0saUZBQWlGO0FBQ3ZGLEtBQUs7QUFDTCxJQUFJLHVCQUF1QixFQUFFLENBQUMsK0NBQStDLENBQUM7QUFDOUUsSUFBSSx3QkFBd0IsRUFBRTtBQUM5QixNQUFNLHlEQUF5RDtBQUMvRCxLQUFLO0FBQ0wsSUFBSSxpQkFBaUIsRUFBRSxDQUFDLG9DQUFvQyxDQUFDO0FBQzdELElBQUksNkJBQTZCLEVBQUU7QUFDbkMsTUFBTSxxREFBcUQ7QUFDM0QsS0FBSztBQUNMLElBQUksOEJBQThCLEVBQUU7QUFDcEMsTUFBTSwrREFBK0Q7QUFDckUsS0FBSztBQUNMLElBQUksdUJBQXVCLEVBQUUsQ0FBQywrQ0FBK0MsQ0FBQztBQUM5RSxJQUFJLHdCQUF3QixFQUFFO0FBQzlCLE1BQU0seURBQXlEO0FBQy9ELEtBQUs7QUFDTCxJQUFJLGtCQUFrQixFQUFFLENBQUMsOENBQThDLENBQUM7QUFDeEUsSUFBSSxzQkFBc0IsRUFBRTtBQUM1QixNQUFNLHVFQUF1RTtBQUM3RSxLQUFLO0FBQ0wsSUFBSSxzQkFBc0IsRUFBRTtBQUM1QixNQUFNLHdEQUF3RDtBQUM5RCxLQUFLO0FBQ0wsSUFBSSx1QkFBdUIsRUFBRTtBQUM3QixNQUFNLHVEQUF1RDtBQUM3RCxLQUFLO0FBQ0wsSUFBSSxjQUFjLEVBQUU7QUFDcEIsTUFBTSw4REFBOEQ7QUFDcEUsS0FBSztBQUNMLElBQUksdUJBQXVCLEVBQUU7QUFDN0IsTUFBTSxvRkFBb0Y7QUFDMUYsS0FBSztBQUNMLElBQUkseUJBQXlCLEVBQUU7QUFDL0IsTUFBTSwrRUFBK0U7QUFDckYsS0FBSztBQUNMLElBQUksZUFBZSxFQUFFLENBQUMsa0RBQWtELENBQUM7QUFDekUsSUFBSSxpQkFBaUIsRUFBRSxDQUFDLDZDQUE2QyxDQUFDO0FBQ3RFLElBQUksZ0JBQWdCLEVBQUU7QUFDdEIsTUFBTSw0REFBNEQ7QUFDbEUsS0FBSztBQUNMLElBQUksa0JBQWtCLEVBQUU7QUFDeEIsTUFBTSx1REFBdUQ7QUFDN0QsS0FBSztBQUNMLElBQUksNkJBQTZCLEVBQUU7QUFDbkMsTUFBTSxnREFBZ0Q7QUFDdEQsS0FBSztBQUNMLElBQUksOEJBQThCLEVBQUU7QUFDcEMsTUFBTSwwREFBMEQ7QUFDaEUsS0FBSztBQUNMLElBQUksaUJBQWlCLEVBQUUsQ0FBQyxvREFBb0QsQ0FBQztBQUM3RSxJQUFJLHFCQUFxQixFQUFFO0FBQzNCLE1BQU0seURBQXlEO0FBQy9ELEtBQUs7QUFDTCxJQUFJLGtEQUFrRCxFQUFFO0FBQ3hELE1BQU0scUVBQXFFO0FBQzNFLEtBQUs7QUFDTCxJQUFJLGVBQWUsRUFBRTtBQUNyQixNQUFNLG1FQUFtRTtBQUN6RSxLQUFLO0FBQ0wsSUFBSSxnQkFBZ0IsRUFBRTtBQUN0QixNQUFNLDRFQUE0RTtBQUNsRixLQUFLO0FBQ0wsSUFBSSw2QkFBNkIsRUFBRTtBQUNuQyxNQUFNLHNEQUFzRDtBQUM1RCxLQUFLO0FBQ0wsSUFBSSw4QkFBOEIsRUFBRTtBQUNwQyxNQUFNLGdGQUFnRjtBQUN0RixLQUFLO0FBQ0wsSUFBSSx1QkFBdUIsRUFBRTtBQUM3QixNQUFNLHNEQUFzRDtBQUM1RCxLQUFLO0FBQ0wsSUFBSSxpREFBaUQsRUFBRTtBQUN2RCxNQUFNLGtFQUFrRTtBQUN4RSxLQUFLO0FBQ0wsSUFBSSxjQUFjLEVBQUU7QUFDcEIsTUFBTSxrRUFBa0U7QUFDeEUsS0FBSztBQUNMLElBQUksc0JBQXNCLEVBQUU7QUFDNUIsTUFBTSwrREFBK0Q7QUFDckUsS0FBSztBQUNMLElBQUksNkJBQTZCLEVBQUU7QUFDbkMsTUFBTSxxREFBcUQ7QUFDM0QsS0FBSztBQUNMLElBQUksOEJBQThCLEVBQUU7QUFDcEMsTUFBTSwrREFBK0Q7QUFDckUsS0FBSztBQUNMLElBQUksbUJBQW1CLEVBQUUsQ0FBQywwQ0FBMEMsQ0FBQztBQUNyRSxJQUFJLG9CQUFvQixFQUFFLENBQUMsK0NBQStDLENBQUM7QUFDM0UsSUFBSSxnQ0FBZ0MsRUFBRTtBQUN0QyxNQUFNLG1EQUFtRDtBQUN6RCxLQUFLO0FBQ0wsSUFBSSwwQkFBMEIsRUFBRSxDQUFDLHFDQUFxQyxDQUFDO0FBQ3ZFLElBQUksNkJBQTZCLEVBQUU7QUFDbkMsTUFBTSxzREFBc0Q7QUFDNUQsS0FBSztBQUNMLElBQUksMkJBQTJCLEVBQUU7QUFDakMsTUFBTSxnRUFBZ0U7QUFDdEUsS0FBSztBQUNMLElBQUksV0FBVyxFQUFFLENBQUMsMkRBQTJELENBQUM7QUFDOUUsSUFBSSw0QkFBNEIsRUFBRTtBQUNsQyxNQUFNLDBEQUEwRDtBQUNoRSxLQUFLO0FBQ0wsSUFBSSx1QkFBdUIsRUFBRTtBQUM3QixNQUFNLDhFQUE4RTtBQUNwRixLQUFLO0FBQ0wsSUFBSSxvQkFBb0IsRUFBRTtBQUMxQixNQUFNLGlGQUFpRjtBQUN2RixLQUFLO0FBQ0wsSUFBSSxzQkFBc0IsRUFBRTtBQUM1QixNQUFNLDRFQUE0RTtBQUNsRixLQUFLO0FBQ0wsSUFBSSxzREFBc0QsRUFBRTtBQUM1RCxNQUFNLDhDQUE4QztBQUNwRCxLQUFLO0FBQ0wsSUFBSSxvREFBb0QsRUFBRTtBQUMxRCxNQUFNLHdEQUF3RDtBQUM5RCxLQUFLO0FBQ0wsSUFBSSx1Q0FBdUMsRUFBRTtBQUM3QyxNQUFNLHFDQUFxQztBQUMzQyxLQUFLO0FBQ0wsSUFBSSxxQ0FBcUMsRUFBRTtBQUMzQyxNQUFNLCtDQUErQztBQUNyRCxLQUFLO0FBQ0wsSUFBSSxvQkFBb0IsRUFBRSxDQUFDLGlEQUFpRCxDQUFDO0FBQzdFLElBQUksZUFBZSxFQUFFLENBQUMsNENBQTRDLENBQUM7QUFDbkUsSUFBSSxZQUFZLEVBQUUsQ0FBQywrQ0FBK0MsQ0FBQztBQUNuRSxJQUFJLGNBQWMsRUFBRSxDQUFDLDBDQUEwQyxDQUFDO0FBQ2hFLElBQUksMkJBQTJCLEVBQUU7QUFDakMsTUFBTSxxRUFBcUU7QUFDM0UsS0FBSztBQUNMLElBQUksa0JBQWtCLEVBQUU7QUFDeEIsTUFBTSwrQ0FBK0M7QUFDckQsTUFBTSxFQUFFO0FBQ1IsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSx1Q0FBdUMsQ0FBQyxFQUFFO0FBQ3ZFLEtBQUs7QUFDTCxJQUFJLGdCQUFnQixFQUFFLENBQUMsc0RBQXNELENBQUM7QUFDOUUsSUFBSSxhQUFhLEVBQUUsQ0FBQyx5REFBeUQsQ0FBQztBQUM5RSxJQUFJLGVBQWUsRUFBRSxDQUFDLG9EQUFvRCxDQUFDO0FBQzNFLElBQUksZ0JBQWdCLEVBQUU7QUFDdEIsTUFBTSwyREFBMkQ7QUFDakUsS0FBSztBQUNMLElBQUkseUJBQXlCLEVBQUUsQ0FBQyw2Q0FBNkMsQ0FBQztBQUM5RSxJQUFJLDBCQUEwQixFQUFFO0FBQ2hDLE1BQU0sdURBQXVEO0FBQzdELEtBQUs7QUFDTCxJQUFJLFdBQVcsRUFBRSxDQUFDLDJEQUEyRCxDQUFDO0FBQzlFLElBQUksNkJBQTZCLEVBQUU7QUFDbkMsTUFBTSxzREFBc0Q7QUFDNUQsS0FBSztBQUNMLElBQUksY0FBYyxFQUFFLENBQUMsaURBQWlELENBQUM7QUFDdkUsSUFBSSxxQkFBcUIsRUFBRTtBQUMzQixNQUFNLDJFQUEyRTtBQUNqRixLQUFLO0FBQ0wsSUFBSSxtQkFBbUIsRUFBRTtBQUN6QixNQUFNLHdEQUF3RDtBQUM5RCxLQUFLO0FBQ0wsSUFBSSxnQkFBZ0IsRUFBRTtBQUN0QixNQUFNLGtFQUFrRTtBQUN4RSxLQUFLO0FBQ0wsSUFBSSxvQkFBb0IsRUFBRSxDQUFDLDZDQUE2QyxDQUFDO0FBQ3pFLElBQUksc0JBQXNCLEVBQUU7QUFDNUIsTUFBTSxtRUFBbUU7QUFDekUsS0FBSztBQUNMLElBQUksd0JBQXdCLEVBQUU7QUFDOUIsTUFBTSxxRUFBcUU7QUFDM0UsS0FBSztBQUNMLElBQUksc0JBQXNCLEVBQUU7QUFDNUIsTUFBTSxzREFBc0Q7QUFDNUQsS0FBSztBQUNMLElBQUksNkJBQTZCLEVBQUU7QUFDbkMsTUFBTSxnRkFBZ0Y7QUFDdEYsS0FBSztBQUNMLElBQUksbUNBQW1DLEVBQUU7QUFDekMsTUFBTSxvREFBb0Q7QUFDMUQsS0FBSztBQUNMLElBQUksb0NBQW9DLEVBQUU7QUFDMUMsTUFBTSw4REFBOEQ7QUFDcEUsS0FBSztBQUNMLElBQUksY0FBYyxFQUFFLENBQUMsaUNBQWlDLENBQUM7QUFDdkQsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLG1DQUFtQyxDQUFDO0FBQzNELElBQUksMkJBQTJCLEVBQUU7QUFDakMsTUFBTSx3REFBd0Q7QUFDOUQsS0FBSztBQUNMLElBQUksNkJBQTZCLEVBQUU7QUFDbkMsTUFBTSwwREFBMEQ7QUFDaEUsS0FBSztBQUNMLElBQUksZUFBZSxFQUFFLENBQUMsMkNBQTJDLENBQUM7QUFDbEUsSUFBSSxpQkFBaUIsRUFBRSxDQUFDLDZDQUE2QyxDQUFDO0FBQ3RFLElBQUksaUJBQWlCLEVBQUUsQ0FBQyw2Q0FBNkMsQ0FBQztBQUN0RSxJQUFJLDRCQUE0QixFQUFFLENBQUMsMkNBQTJDLENBQUM7QUFDL0UsSUFBSSw2QkFBNkIsRUFBRTtBQUNuQyxNQUFNLHFEQUFxRDtBQUMzRCxLQUFLO0FBQ0wsSUFBSSw2QkFBNkIsRUFBRTtBQUNuQyxNQUFNLDREQUE0RDtBQUNsRSxLQUFLO0FBQ0wsSUFBSSwrQkFBK0IsRUFBRTtBQUNyQyxNQUFNLHVEQUF1RDtBQUM3RCxLQUFLO0FBQ0wsSUFBSSx3REFBd0QsRUFBRTtBQUM5RCxNQUFNLGtEQUFrRDtBQUN4RCxLQUFLO0FBQ0wsSUFBSSwyQkFBMkIsRUFBRSxDQUFDLGlDQUFpQyxDQUFDO0FBQ3BFLElBQUksNEJBQTRCLEVBQUUsQ0FBQywyQ0FBMkMsQ0FBQztBQUMvRSxJQUFJLHdCQUF3QixFQUFFO0FBQzlCLE1BQU0sMkRBQTJEO0FBQ2pFLEtBQUs7QUFDTCxJQUFJLGdCQUFnQixFQUFFO0FBQ3RCLE1BQU0sZ0VBQWdFO0FBQ3RFLEtBQUs7QUFDTCxJQUFJLHVCQUF1QixFQUFFLENBQUMsd0NBQXdDLENBQUM7QUFDdkUsSUFBSSxzQkFBc0IsRUFBRTtBQUM1QixNQUFNLHdEQUF3RDtBQUM5RCxLQUFLO0FBQ0wsSUFBSSxhQUFhLEVBQUUsQ0FBQyx3REFBd0QsQ0FBQztBQUM3RSxJQUFJLHVCQUF1QixFQUFFO0FBQzdCLE1BQU0sb0VBQW9FO0FBQzFFLEtBQUs7QUFDTCxJQUFJLCtDQUErQyxFQUFFO0FBQ3JELE1BQU0sdURBQXVEO0FBQzdELEtBQUs7QUFDTCxJQUFJLGdEQUFnRCxFQUFFO0FBQ3RELE1BQU0saUVBQWlFO0FBQ3ZFLEtBQUs7QUFDTCxJQUFJLDJDQUEyQyxFQUFFO0FBQ2pELE1BQU0sOERBQThEO0FBQ3BFLEtBQUs7QUFDTCxJQUFJLDRDQUE0QyxFQUFFO0FBQ2xELE1BQU0sd0VBQXdFO0FBQzlFLEtBQUs7QUFDTCxJQUFJLCtCQUErQixFQUFFO0FBQ3JDLE1BQU0sK0VBQStFO0FBQ3JGLEtBQUs7QUFDTCxJQUFJLGlDQUFpQyxFQUFFO0FBQ3ZDLE1BQU0sMEVBQTBFO0FBQ2hGLEtBQUs7QUFDTCxJQUFJLHVCQUF1QixFQUFFO0FBQzdCLE1BQU0sNkVBQTZFO0FBQ25GLEtBQUs7QUFDTCxJQUFJLDhCQUE4QixFQUFFO0FBQ3BDLE1BQU0sc0VBQXNFO0FBQzVFLEtBQUs7QUFDTCxJQUFJLDZCQUE2QixFQUFFO0FBQ25DLE1BQU0sc0RBQXNEO0FBQzVELEtBQUs7QUFDTCxJQUFJLDJCQUEyQixFQUFFO0FBQ2pDLE1BQU0sZ0VBQWdFO0FBQ3RFLEtBQUs7QUFDTCxJQUFJLHdDQUF3QyxFQUFFO0FBQzlDLE1BQU0sb0RBQW9EO0FBQzFELEtBQUs7QUFDTCxJQUFJLHlDQUF5QyxFQUFFO0FBQy9DLE1BQU0sOERBQThEO0FBQ3BFLEtBQUs7QUFDTCxJQUFJLDRCQUE0QixFQUFFO0FBQ2xDLE1BQU0sMERBQTBEO0FBQ2hFLEtBQUs7QUFDTCxJQUFJLHNEQUFzRCxFQUFFO0FBQzVELE1BQU0sOENBQThDO0FBQ3BELEtBQUs7QUFDTCxJQUFJLG9EQUFvRCxFQUFFO0FBQzFELE1BQU0sd0RBQXdEO0FBQzlELEtBQUs7QUFDTCxJQUFJLHVDQUF1QyxFQUFFO0FBQzdDLE1BQU0scUNBQXFDO0FBQzNDLEtBQUs7QUFDTCxJQUFJLHFDQUFxQyxFQUFFO0FBQzNDLE1BQU0sK0NBQStDO0FBQ3JELEtBQUs7QUFDTCxJQUFJLDRCQUE0QixFQUFFO0FBQ2xDLE1BQU0sNERBQTREO0FBQ2xFLEtBQUs7QUFDTCxJQUFJLDhCQUE4QixFQUFFO0FBQ3BDLE1BQU0sdURBQXVEO0FBQzdELEtBQUs7QUFDTCxJQUFJLHVEQUF1RCxFQUFFO0FBQzdELE1BQU0sa0RBQWtEO0FBQ3hELEtBQUs7QUFDTCxJQUFJLDZCQUE2QixFQUFFO0FBQ25DLE1BQU0sc0RBQXNEO0FBQzVELEtBQUs7QUFDTCxJQUFJLHlCQUF5QixFQUFFO0FBQy9CLE1BQU0sOEVBQThFO0FBQ3BGLEtBQUs7QUFDTCxJQUFJLGlCQUFpQixFQUFFLENBQUMsNENBQTRDLENBQUM7QUFDckUsSUFBSSxrQkFBa0IsRUFBRTtBQUN4QixNQUFNLHNEQUFzRDtBQUM1RCxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsUUFBUSxFQUFFO0FBQ1osSUFBSSxxQ0FBcUMsRUFBRSxDQUFDLGtDQUFrQyxDQUFDO0FBQy9FLElBQUksc0JBQXNCLEVBQUUsQ0FBQywyQ0FBMkMsQ0FBQztBQUN6RSxJQUFJLHdCQUF3QixFQUFFO0FBQzlCLE1BQU0sd0RBQXdEO0FBQzlELEtBQUs7QUFDTCxJQUFJLFFBQVEsRUFBRSxDQUFDLFlBQVksQ0FBQztBQUM1QixJQUFJLG1CQUFtQixFQUFFLENBQUMsd0NBQXdDLENBQUM7QUFDbkUsSUFBSSxTQUFTLEVBQUUsQ0FBQyx3Q0FBd0MsQ0FBQztBQUN6RCxJQUFJLHlDQUF5QyxFQUFFO0FBQy9DLE1BQU0scURBQXFEO0FBQzNELEtBQUs7QUFDTCxJQUFJLDhCQUE4QixFQUFFLENBQUMsOEJBQThCLENBQUM7QUFDcEUsSUFBSSxxQ0FBcUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDO0FBQ2pFLElBQUksaUNBQWlDLEVBQUU7QUFDdkMsTUFBTSx5Q0FBeUM7QUFDL0MsS0FBSztBQUNMLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyxhQUFhLENBQUM7QUFDckMsSUFBSSw4QkFBOEIsRUFBRSxDQUFDLHFDQUFxQyxDQUFDO0FBQzNFLElBQUksdUJBQXVCLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQztBQUNwRSxJQUFJLG1CQUFtQixFQUFFLENBQUMsd0JBQXdCLENBQUM7QUFDbkQsSUFBSSx5QkFBeUIsRUFBRSxDQUFDLHVDQUF1QyxDQUFDO0FBQ3hFLElBQUksK0JBQStCLEVBQUU7QUFDckMsTUFBTSw4Q0FBOEM7QUFDcEQsS0FBSztBQUNMLElBQUksY0FBYyxFQUFFLENBQUMsa0NBQWtDLENBQUM7QUFDeEQsSUFBSSx5Q0FBeUMsRUFBRTtBQUMvQyxNQUFNLHlDQUF5QztBQUMvQyxLQUFLO0FBQ0wsSUFBSSxtQ0FBbUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDO0FBQzlELElBQUksc0JBQXNCLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztBQUM3RCxJQUFJLHNCQUFzQixFQUFFLENBQUMscUNBQXFDLENBQUM7QUFDbkUsSUFBSSxxQkFBcUIsRUFBRSxDQUFDLHNDQUFzQyxDQUFDO0FBQ25FLElBQUksb0NBQW9DLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQztBQUNyRSxJQUFJLG1CQUFtQixFQUFFLENBQUMsdUNBQXVDLENBQUM7QUFDbEUsSUFBSSx1QkFBdUIsRUFBRSxDQUFDLG9CQUFvQixDQUFDO0FBQ25ELElBQUksMkJBQTJCLEVBQUUsQ0FBQyx5Q0FBeUMsQ0FBQztBQUM1RSxJQUFJLGdCQUFnQixFQUFFLENBQUMsMkNBQTJDLENBQUM7QUFDbkUsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLDBDQUEwQyxDQUFDO0FBQ2xFLElBQUksbUJBQW1CLEVBQUUsQ0FBQyx3Q0FBd0MsQ0FBQztBQUNuRSxJQUFJLHFCQUFxQixFQUFFO0FBQzNCLE1BQU0scURBQXFEO0FBQzNELEtBQUs7QUFDTCxJQUFJLDRCQUE0QixFQUFFLENBQUMsa0NBQWtDLENBQUM7QUFDdEUsSUFBSSw4QkFBOEIsRUFBRSxDQUFDLHFDQUFxQyxDQUFDO0FBQzNFLEdBQUc7QUFDSCxFQUFFLElBQUksRUFBRTtBQUNSLElBQUkscUJBQXFCLEVBQUU7QUFDM0IsTUFBTSx3RUFBd0U7QUFDOUUsTUFBTSxFQUFFO0FBQ1IsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRSwyQ0FBMkMsQ0FBQyxFQUFFO0FBQ3hFLEtBQUs7QUFDTCxJQUFJLHlDQUF5QyxFQUFFO0FBQy9DLE1BQU0sd0VBQXdFO0FBQzlFLEtBQUs7QUFDTCxJQUFJLFVBQVUsRUFBRSxDQUFDLHNDQUFzQyxDQUFDO0FBQ3hELElBQUksa0JBQWtCLEVBQUUsQ0FBQyx3Q0FBd0MsQ0FBQztBQUNsRSxJQUFJLDZCQUE2QixFQUFFO0FBQ25DLE1BQU0seURBQXlEO0FBQy9ELEtBQUs7QUFDTCxJQUFJLG1CQUFtQixFQUFFLENBQUMsd0NBQXdDLENBQUM7QUFDbkUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLDZDQUE2QyxDQUFDO0FBQ3ZFLElBQUksV0FBVyxFQUFFLENBQUMsd0NBQXdDLENBQUM7QUFDM0QsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLFVBQVUsQ0FBQztBQUNsQyxJQUFJLFNBQVMsRUFBRSxDQUFDLHNCQUFzQixDQUFDO0FBQ3ZDLElBQUksZUFBZSxFQUFFLENBQUMsMENBQTBDLENBQUM7QUFDakUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLDhCQUE4QixDQUFDO0FBQ3hELElBQUksbUJBQW1CLEVBQUUsQ0FBQyx3Q0FBd0MsQ0FBQztBQUNuRSxJQUFJLDZCQUE2QixFQUFFO0FBQ25DLE1BQU0sZ0RBQWdEO0FBQ3RELEtBQUs7QUFDTCxJQUFJLG9DQUFvQyxFQUFFO0FBQzFDLE1BQU0sd0RBQXdEO0FBQzlELEtBQUs7QUFDTCxJQUFJLG1CQUFtQixFQUFFLENBQUMsb0NBQW9DLENBQUM7QUFDL0QsSUFBSSxzQkFBc0IsRUFBRSxDQUFDLHNCQUFzQixDQUFDO0FBQ3BELElBQUksa0JBQWtCLEVBQUUsQ0FBQyx3Q0FBd0MsQ0FBQztBQUNsRSxJQUFJLG1CQUFtQixFQUFFLENBQUMsbURBQW1ELENBQUM7QUFDOUUsSUFBSSwwQkFBMEIsRUFBRTtBQUNoQyxNQUFNLDJEQUEyRDtBQUNqRSxLQUFLO0FBQ0wsSUFBSSx5Q0FBeUMsRUFBRTtBQUMvQyxNQUFNLHdEQUF3RDtBQUM5RCxLQUFLO0FBQ0wsSUFBSSwyQ0FBMkMsRUFBRTtBQUNqRCxNQUFNLGdDQUFnQztBQUN0QyxLQUFLO0FBQ0wsSUFBSSxpQkFBaUIsRUFBRSxDQUFDLHdCQUF3QixDQUFDO0FBQ2pELElBQUkscUNBQXFDLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQztBQUN0RSxJQUFJLFNBQVMsRUFBRSxDQUFDLGdDQUFnQyxDQUFDO0FBQ2pELElBQUksZ0JBQWdCLEVBQUUsQ0FBQyx3Q0FBd0MsQ0FBQztBQUNoRSxJQUFJLGlDQUFpQyxFQUFFLENBQUMsZ0NBQWdDLENBQUM7QUFDekUsSUFBSSxxQ0FBcUMsRUFBRSxDQUFDLGlDQUFpQyxDQUFDO0FBQzlFLElBQUksNENBQTRDLEVBQUU7QUFDbEQsTUFBTSx5Q0FBeUM7QUFDL0MsS0FBSztBQUNMLElBQUkscUJBQXFCLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztBQUN2RCxJQUFJLHdCQUF3QixFQUFFO0FBQzlCLE1BQU0sa0RBQWtEO0FBQ3hELEtBQUs7QUFDTCxJQUFJLDBCQUEwQixFQUFFO0FBQ2hDLE1BQU0sMkVBQTJFO0FBQ2pGLE1BQU0sRUFBRTtBQUNSLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsZ0RBQWdELENBQUMsRUFBRTtBQUM3RSxLQUFLO0FBQ0wsSUFBSSw4Q0FBOEMsRUFBRTtBQUNwRCxNQUFNLDJFQUEyRTtBQUNqRixLQUFLO0FBQ0wsSUFBSSxVQUFVLEVBQUUsQ0FBQyx1Q0FBdUMsQ0FBQztBQUN6RCxJQUFJLDZCQUE2QixFQUFFLENBQUMsNEJBQTRCLENBQUM7QUFDakUsSUFBSSxVQUFVLEVBQUUsQ0FBQyw2Q0FBNkMsQ0FBQztBQUMvRCxJQUFJLG1CQUFtQixFQUFFLENBQUMsb0RBQW9ELENBQUM7QUFDL0UsSUFBSSxxQkFBcUIsRUFBRTtBQUMzQixNQUFNLHVEQUF1RDtBQUM3RCxLQUFLO0FBQ0wsSUFBSSx5QkFBeUIsRUFBRSxDQUFDLHdCQUF3QixDQUFDO0FBQ3pELEdBQUc7QUFDSCxFQUFFLE9BQU8sRUFBRTtBQUNYLElBQUksMEJBQTBCLEVBQUUsQ0FBQywwQ0FBMEMsQ0FBQztBQUM1RSxJQUFJLDJCQUEyQixFQUFFO0FBQ2pDLE1BQU0sZ0RBQWdEO0FBQ3RELEtBQUs7QUFDTCxJQUFJLDJCQUEyQixFQUFFLENBQUMsMkNBQTJDLENBQUM7QUFDOUUsSUFBSSw0QkFBNEIsRUFBRTtBQUNsQyxNQUFNLGlEQUFpRDtBQUN2RCxLQUFLO0FBQ0wsSUFBSSwwQkFBMEIsRUFBRTtBQUNoQyxNQUFNLGlEQUFpRDtBQUN2RCxLQUFLO0FBQ0wsSUFBSSwyQkFBMkIsRUFBRTtBQUNqQyxNQUFNLHVEQUF1RDtBQUM3RCxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsTUFBTSxFQUFFO0FBQ1YsSUFBSSxNQUFNLEVBQUUsQ0FBQyx1Q0FBdUMsQ0FBQztBQUNyRCxJQUFJLFdBQVcsRUFBRSxDQUFDLHlDQUF5QyxDQUFDO0FBQzVELElBQUksR0FBRyxFQUFFLENBQUMscURBQXFELENBQUM7QUFDaEUsSUFBSSxRQUFRLEVBQUUsQ0FBQyx5REFBeUQsQ0FBQztBQUN6RSxJQUFJLGVBQWUsRUFBRTtBQUNyQixNQUFNLGlFQUFpRTtBQUN2RSxLQUFLO0FBQ0wsSUFBSSxVQUFVLEVBQUUsQ0FBQyxvREFBb0QsQ0FBQztBQUN0RSxJQUFJLFlBQVksRUFBRTtBQUNsQixNQUFNLG9FQUFvRTtBQUMxRSxLQUFLO0FBQ0wsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLHNEQUFzRCxDQUFDO0FBQzlFLElBQUksWUFBWSxFQUFFO0FBQ2xCLE1BQU0sZ0VBQWdFO0FBQ3RFLEtBQUs7QUFDTCxJQUFJLGNBQWMsRUFBRTtBQUNwQixNQUFNLG9FQUFvRTtBQUMxRSxLQUFLO0FBQ0wsSUFBSSxvQkFBb0IsRUFBRTtBQUMxQixNQUFNLHNEQUFzRDtBQUM1RCxLQUFLO0FBQ0wsSUFBSSxNQUFNLEVBQUUsQ0FBQyx1REFBdUQsQ0FBQztBQUNyRSxHQUFHO0FBQ0gsRUFBRSxZQUFZLEVBQUU7QUFDaEIsSUFBSSxjQUFjLEVBQUU7QUFDcEIsTUFBTSxvRkFBb0Y7QUFDMUYsS0FBSztBQUNMLElBQUksUUFBUSxFQUFFO0FBQ2QsTUFBTSwrREFBK0Q7QUFDckUsTUFBTSxFQUFFO0FBQ1IsTUFBTSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxFQUFFO0FBQ3pELEtBQUs7QUFDTCxJQUFJLFdBQVcsRUFBRTtBQUNqQixNQUFNLGdFQUFnRTtBQUN0RSxLQUFLO0FBQ0wsSUFBSSxpQkFBaUIsRUFBRTtBQUN2QixNQUFNLHFFQUFxRTtBQUMzRSxLQUFLO0FBQ0wsSUFBSSxlQUFlLEVBQUUsQ0FBQyx1REFBdUQsQ0FBQztBQUM5RSxJQUFJLFFBQVEsRUFBRSxDQUFDLDJEQUEyRCxDQUFDO0FBQzNFLElBQUksa0JBQWtCLEVBQUU7QUFDeEIsTUFBTSx5RUFBeUU7QUFDL0UsS0FBSztBQUNMLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyxzQ0FBc0MsQ0FBQztBQUM5RCxJQUFJLGlCQUFpQixFQUFFLENBQUMsZ0RBQWdELENBQUM7QUFDekUsSUFBSSxtQkFBbUIsRUFBRTtBQUN6QixNQUFNLHlFQUF5RTtBQUMvRSxNQUFNLEVBQUU7QUFDUixNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsY0FBYyxFQUFFLG9CQUFvQixDQUFDLEVBQUU7QUFDekQsS0FBSztBQUNMLElBQUksbUJBQW1CLEVBQUU7QUFDekIsTUFBTSwwREFBMEQ7QUFDaEUsS0FBSztBQUNMLElBQUksa0JBQWtCLEVBQUUsQ0FBQyxrREFBa0QsQ0FBQztBQUM1RSxJQUFJLFdBQVcsRUFBRTtBQUNqQixNQUFNLGlFQUFpRTtBQUN2RSxLQUFLO0FBQ0wsSUFBSSxrQkFBa0IsRUFBRTtBQUN4QixNQUFNLHlEQUF5RDtBQUMvRCxLQUFLO0FBQ0wsSUFBSSxXQUFXLEVBQUUsQ0FBQyxpREFBaUQsQ0FBQztBQUNwRSxHQUFHO0FBQ0gsRUFBRSxjQUFjLEVBQUU7QUFDbEIsSUFBSSxvQkFBb0IsRUFBRSxDQUFDLHVCQUF1QixDQUFDO0FBQ25ELElBQUksY0FBYyxFQUFFLENBQUMsNkJBQTZCLENBQUM7QUFDbkQsR0FBRztBQUNILEVBQUUsVUFBVSxFQUFFO0FBQ2QsSUFBSSwwQ0FBMEMsRUFBRTtBQUNoRCxNQUFNLHlFQUF5RTtBQUMvRSxLQUFLO0FBQ0wsSUFBSSwwQkFBMEIsRUFBRTtBQUNoQyxNQUFNLCtFQUErRTtBQUNyRixLQUFLO0FBQ0wsSUFBSSwrQkFBK0IsRUFBRTtBQUNyQyxNQUFNLHdEQUF3RDtBQUM5RCxLQUFLO0FBQ0wsSUFBSSxxQ0FBcUMsRUFBRTtBQUMzQyxNQUFNLGdEQUFnRDtBQUN0RCxLQUFLO0FBQ0wsSUFBSSwwQkFBMEIsRUFBRSxDQUFDLHVCQUF1QixDQUFDO0FBQ3pELElBQUksdUJBQXVCLEVBQUU7QUFDN0IsTUFBTSxrREFBa0Q7QUFDeEQsS0FBSztBQUNMLElBQUksd0JBQXdCLEVBQUU7QUFDOUIsTUFBTSw0REFBNEQ7QUFDbEUsS0FBSztBQUNMLElBQUksd0NBQXdDLEVBQUU7QUFDOUMsTUFBTSw0Q0FBNEM7QUFDbEQsS0FBSztBQUNMLElBQUksZ0NBQWdDLEVBQUU7QUFDdEMsTUFBTSwyREFBMkQ7QUFDakUsS0FBSztBQUNMLElBQUksa0NBQWtDLEVBQUU7QUFDeEMsTUFBTSx1Q0FBdUM7QUFDN0MsS0FBSztBQUNMLElBQUksMEJBQTBCLEVBQUUsQ0FBQywwQ0FBMEMsQ0FBQztBQUM1RSxJQUFJLHNCQUFzQixFQUFFO0FBQzVCLE1BQU0sbUVBQW1FO0FBQ3pFLEtBQUs7QUFDTCxJQUFJLGVBQWUsRUFBRSxDQUFDLHFEQUFxRCxDQUFDO0FBQzVFLElBQUksZ0JBQWdCLEVBQUU7QUFDdEIsTUFBTSwrREFBK0Q7QUFDckUsS0FBSztBQUNMLElBQUksZ0NBQWdDLEVBQUU7QUFDdEMsTUFBTSwrQ0FBK0M7QUFDckQsS0FBSztBQUNMLElBQUksMEJBQTBCLEVBQUU7QUFDaEMsTUFBTSxnREFBZ0Q7QUFDdEQsS0FBSztBQUNMLElBQUkseUJBQXlCLEVBQUU7QUFDL0IsTUFBTSwrQ0FBK0M7QUFDckQsS0FBSztBQUNMLElBQUksb0NBQW9DLEVBQUU7QUFDMUMsTUFBTSwyREFBMkQ7QUFDakUsS0FBSztBQUNMLElBQUksdUJBQXVCLEVBQUUsQ0FBQyx1Q0FBdUMsQ0FBQztBQUN0RSxJQUFJLGVBQWUsRUFBRSxDQUFDLCtDQUErQyxDQUFDO0FBQ3RFLElBQUksWUFBWSxFQUFFLENBQUMsa0RBQWtELENBQUM7QUFDdEUsSUFBSSxnQ0FBZ0MsRUFBRTtBQUN0QyxNQUFNLHlDQUF5QztBQUMvQyxLQUFLO0FBQ0wsSUFBSSxnQkFBZ0IsRUFBRTtBQUN0QixNQUFNLHlEQUF5RDtBQUMvRCxLQUFLO0FBQ0wsSUFBSSxhQUFhLEVBQUU7QUFDbkIsTUFBTSw0REFBNEQ7QUFDbEUsS0FBSztBQUNMLElBQUksNkJBQTZCLEVBQUU7QUFDbkMsTUFBTSw0Q0FBNEM7QUFDbEQsS0FBSztBQUNMLElBQUksaURBQWlELEVBQUU7QUFDdkQsTUFBTSxvREFBb0Q7QUFDMUQsS0FBSztBQUNMLElBQUksd0JBQXdCLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztBQUN0RCxJQUFJLGtCQUFrQixFQUFFO0FBQ3hCLE1BQU0sNEJBQTRCO0FBQ2xDLE1BQU0sRUFBRTtBQUNSLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtBQUM5QyxLQUFLO0FBQ0wsSUFBSSxvQ0FBb0MsRUFBRTtBQUMxQyxNQUFNLHNDQUFzQztBQUM1QyxLQUFLO0FBQ0wsSUFBSSxjQUFjLEVBQUUsQ0FBQyxvQ0FBb0MsQ0FBQztBQUMxRCxJQUFJLGVBQWUsRUFBRSxDQUFDLDhDQUE4QyxDQUFDO0FBQ3JFLElBQUksNkNBQTZDLEVBQUU7QUFDbkQsTUFBTSx5REFBeUQ7QUFDL0QsS0FBSztBQUNMLElBQUksK0JBQStCLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztBQUNyRSxJQUFJLDZCQUE2QixFQUFFO0FBQ25DLE1BQU0sK0RBQStEO0FBQ3JFLEtBQUs7QUFDTCxJQUFJLHFDQUFxQyxFQUFFO0FBQzNDLE1BQU0sMENBQTBDO0FBQ2hELEtBQUs7QUFDTCxJQUFJLDJCQUEyQixFQUFFO0FBQ2pDLE1BQU0sZ0RBQWdEO0FBQ3RELEtBQUs7QUFDTCxJQUFJLDZDQUE2QyxFQUFFO0FBQ25ELE1BQU0sNEVBQTRFO0FBQ2xGLEtBQUs7QUFDTCxJQUFJLCtCQUErQixFQUFFO0FBQ3JDLE1BQU0sa0ZBQWtGO0FBQ3hGLEtBQUs7QUFDTCxJQUFJLGdDQUFnQyxFQUFFO0FBQ3RDLE1BQU0sK0NBQStDO0FBQ3JELEtBQUs7QUFDTCxJQUFJLDRDQUE0QyxFQUFFO0FBQ2xELE1BQU0seURBQXlEO0FBQy9ELEtBQUs7QUFDTCxJQUFJLDRCQUE0QixFQUFFO0FBQ2xDLE1BQU0sK0RBQStEO0FBQ3JFLEtBQUs7QUFDTCxJQUFJLHlCQUF5QixFQUFFLENBQUMsOENBQThDLENBQUM7QUFDL0UsSUFBSSx3QkFBd0IsRUFBRSxDQUFDLDZDQUE2QyxDQUFDO0FBQzdFLElBQUksa0JBQWtCLEVBQUU7QUFDeEIsTUFBTSxzRUFBc0U7QUFDNUUsS0FBSztBQUNMLElBQUksMEJBQTBCLEVBQUUsQ0FBQyx5Q0FBeUMsQ0FBQztBQUMzRSxHQUFHO0FBQ0gsRUFBRSxPQUFPLEVBQUU7QUFDWCxJQUFJLHVCQUF1QixFQUFFO0FBQzdCLE1BQU0saURBQWlEO0FBQ3ZELEtBQUs7QUFDTCxJQUFJLHVCQUF1QixFQUFFO0FBQzdCLE1BQU0saURBQWlEO0FBQ3ZELEtBQUs7QUFDTCxJQUFJLG1DQUFtQyxFQUFFO0FBQ3pDLE1BQU0sbURBQW1EO0FBQ3pELEtBQUs7QUFDTCxJQUFJLG1DQUFtQyxFQUFFO0FBQ3pDLE1BQU0sbURBQW1EO0FBQ3pELEtBQUs7QUFDTCxJQUFJLDZCQUE2QixFQUFFLENBQUMsaUNBQWlDLENBQUM7QUFDdEUsSUFBSSw0QkFBNEIsRUFBRTtBQUNsQyxNQUFNLDRDQUE0QztBQUNsRCxLQUFLO0FBQ0wsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLHVDQUF1QyxDQUFDO0FBQy9ELElBQUkseUJBQXlCLEVBQUUsQ0FBQyw2Q0FBNkMsQ0FBQztBQUM5RSxJQUFJLGtCQUFrQixFQUFFLENBQUMsK0JBQStCLENBQUM7QUFDekQsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLGdEQUFnRCxDQUFDO0FBQzNFLEdBQUc7QUFDSCxFQUFFLFVBQVUsRUFBRTtBQUNkLElBQUksMEJBQTBCLEVBQUU7QUFDaEMsTUFBTSwrRUFBK0U7QUFDckYsS0FBSztBQUNMLElBQUksdUJBQXVCLEVBQUU7QUFDN0IsTUFBTSxrREFBa0Q7QUFDeEQsS0FBSztBQUNMLElBQUksd0JBQXdCLEVBQUU7QUFDOUIsTUFBTSw0REFBNEQ7QUFDbEUsS0FBSztBQUNMLElBQUksZUFBZSxFQUFFLENBQUMscURBQXFELENBQUM7QUFDNUUsSUFBSSxnQkFBZ0IsRUFBRTtBQUN0QixNQUFNLCtEQUErRDtBQUNyRSxLQUFLO0FBQ0wsSUFBSSxRQUFRLEVBQUUsQ0FBQyw0REFBNEQsQ0FBQztBQUM1RSxJQUFJLGVBQWUsRUFBRSxDQUFDLCtDQUErQyxDQUFDO0FBQ3RFLElBQUksWUFBWSxFQUFFLENBQUMsa0RBQWtELENBQUM7QUFDdEUsSUFBSSxnQkFBZ0IsRUFBRTtBQUN0QixNQUFNLHlEQUF5RDtBQUMvRCxLQUFLO0FBQ0wsSUFBSSxhQUFhLEVBQUU7QUFDbkIsTUFBTSw0REFBNEQ7QUFDbEUsS0FBSztBQUNMLElBQUksdUJBQXVCLEVBQUU7QUFDN0IsTUFBTSxpREFBaUQ7QUFDdkQsS0FBSztBQUNMLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyxtQ0FBbUMsQ0FBQztBQUMzRCxJQUFJLGlCQUFpQixFQUFFLENBQUMsNkNBQTZDLENBQUM7QUFDdEUsSUFBSSxjQUFjLEVBQUUsQ0FBQyxvQ0FBb0MsQ0FBQztBQUMxRCxJQUFJLGVBQWUsRUFBRSxDQUFDLDhDQUE4QyxDQUFDO0FBQ3JFLElBQUksNkJBQTZCLEVBQUU7QUFDbkMsTUFBTSwrREFBK0Q7QUFDckUsS0FBSztBQUNMLElBQUksK0JBQStCLEVBQUU7QUFDckMsTUFBTSxrRkFBa0Y7QUFDeEYsS0FBSztBQUNMLElBQUksNEJBQTRCLEVBQUU7QUFDbEMsTUFBTSwrREFBK0Q7QUFDckUsS0FBSztBQUNMLElBQUksV0FBVyxFQUFFO0FBQ2pCLE1BQU0sOERBQThEO0FBQ3BFLEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxlQUFlLEVBQUU7QUFDbkIsSUFBSSx3QkFBd0IsRUFBRTtBQUM5QixNQUFNLHVEQUF1RDtBQUM3RCxLQUFLO0FBQ0wsSUFBSSxTQUFTLEVBQUU7QUFDZixNQUFNLCtEQUErRDtBQUNyRSxLQUFLO0FBQ0wsSUFBSSxVQUFVLEVBQUUsQ0FBQyxpREFBaUQsQ0FBQztBQUNuRSxHQUFHO0FBQ0gsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRTtBQUNsQyxFQUFFLEtBQUssRUFBRTtBQUNULElBQUksY0FBYyxFQUFFLENBQUMsMkJBQTJCLENBQUM7QUFDakQsSUFBSSxNQUFNLEVBQUUsQ0FBQyxhQUFhLENBQUM7QUFDM0IsSUFBSSxhQUFhLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQztBQUNyRCxJQUFJLE1BQU0sRUFBRSxDQUFDLHlCQUF5QixDQUFDO0FBQ3ZDLElBQUksYUFBYSxFQUFFLENBQUMsK0NBQStDLENBQUM7QUFDcEUsSUFBSSxJQUFJLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztBQUN6QyxJQUFJLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixDQUFDO0FBQ2pDLElBQUksVUFBVSxFQUFFLENBQUMsNENBQTRDLENBQUM7QUFDOUQsSUFBSSxXQUFXLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQztBQUMvQyxJQUFJLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQztBQUN4QixJQUFJLFlBQVksRUFBRSxDQUFDLCtCQUErQixDQUFDO0FBQ25ELElBQUksV0FBVyxFQUFFLENBQUMsOEJBQThCLENBQUM7QUFDakQsSUFBSSxXQUFXLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztBQUNoRCxJQUFJLFNBQVMsRUFBRSxDQUFDLDRCQUE0QixDQUFDO0FBQzdDLElBQUksVUFBVSxFQUFFLENBQUMsbUJBQW1CLENBQUM7QUFDckMsSUFBSSxXQUFXLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztBQUN2QyxJQUFJLElBQUksRUFBRSxDQUFDLDJCQUEyQixDQUFDO0FBQ3ZDLElBQUksTUFBTSxFQUFFLENBQUMsOEJBQThCLENBQUM7QUFDNUMsSUFBSSxNQUFNLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztBQUN0QyxJQUFJLGFBQWEsRUFBRSxDQUFDLDhDQUE4QyxDQUFDO0FBQ25FLEdBQUc7QUFDSCxFQUFFLEdBQUcsRUFBRTtBQUNQLElBQUksVUFBVSxFQUFFLENBQUMsc0NBQXNDLENBQUM7QUFDeEQsSUFBSSxZQUFZLEVBQUUsQ0FBQyx3Q0FBd0MsQ0FBQztBQUM1RCxJQUFJLFNBQVMsRUFBRSxDQUFDLHFDQUFxQyxDQUFDO0FBQ3RELElBQUksU0FBUyxFQUFFLENBQUMscUNBQXFDLENBQUM7QUFDdEQsSUFBSSxVQUFVLEVBQUUsQ0FBQyxzQ0FBc0MsQ0FBQztBQUN4RCxJQUFJLFNBQVMsRUFBRSxDQUFDLDZDQUE2QyxDQUFDO0FBQzlELElBQUksT0FBTyxFQUFFLENBQUMsZ0RBQWdELENBQUM7QUFDL0QsSUFBSSxTQUFTLEVBQUUsQ0FBQyxvREFBb0QsQ0FBQztBQUNyRSxJQUFJLE1BQU0sRUFBRSxDQUFDLHlDQUF5QyxDQUFDO0FBQ3ZELElBQUksTUFBTSxFQUFFLENBQUMsOENBQThDLENBQUM7QUFDNUQsSUFBSSxPQUFPLEVBQUUsQ0FBQyxnREFBZ0QsQ0FBQztBQUMvRCxJQUFJLGdCQUFnQixFQUFFLENBQUMsbURBQW1ELENBQUM7QUFDM0UsSUFBSSxTQUFTLEVBQUUsQ0FBQyw0Q0FBNEMsQ0FBQztBQUM3RCxHQUFHO0FBQ0gsRUFBRSxTQUFTLEVBQUU7QUFDYixJQUFJLGVBQWUsRUFBRSxDQUFDLDBCQUEwQixDQUFDO0FBQ2pELElBQUksV0FBVyxFQUFFLENBQUMsaUNBQWlDLENBQUM7QUFDcEQsR0FBRztBQUNILEVBQUUsWUFBWSxFQUFFO0FBQ2hCLElBQUksbUNBQW1DLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztBQUN6RSxJQUFJLHFCQUFxQixFQUFFLENBQUMsb0NBQW9DLENBQUM7QUFDakUsSUFBSSxzQkFBc0IsRUFBRSxDQUFDLDhDQUE4QyxDQUFDO0FBQzVFLElBQUksaUNBQWlDLEVBQUU7QUFDdkMsTUFBTSw4QkFBOEI7QUFDcEMsTUFBTSxFQUFFO0FBQ1IsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLGNBQWMsRUFBRSxxQ0FBcUMsQ0FBQyxFQUFFO0FBQzFFLEtBQUs7QUFDTCxJQUFJLHNDQUFzQyxFQUFFLENBQUMsaUNBQWlDLENBQUM7QUFDL0UsSUFBSSx3QkFBd0IsRUFBRSxDQUFDLHVDQUF1QyxDQUFDO0FBQ3ZFLElBQUkseUJBQXlCLEVBQUU7QUFDL0IsTUFBTSxpREFBaUQ7QUFDdkQsS0FBSztBQUNMLElBQUksb0NBQW9DLEVBQUU7QUFDMUMsTUFBTSxpQ0FBaUM7QUFDdkMsTUFBTSxFQUFFO0FBQ1IsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLGNBQWMsRUFBRSx3Q0FBd0MsQ0FBQyxFQUFFO0FBQzdFLEtBQUs7QUFDTCxJQUFJLG1DQUFtQyxFQUFFLENBQUMsOEJBQThCLENBQUM7QUFDekUsSUFBSSxxQkFBcUIsRUFBRSxDQUFDLG9DQUFvQyxDQUFDO0FBQ2pFLElBQUksc0JBQXNCLEVBQUUsQ0FBQyw4Q0FBOEMsQ0FBQztBQUM1RSxJQUFJLGlDQUFpQyxFQUFFO0FBQ3ZDLE1BQU0sOEJBQThCO0FBQ3BDLE1BQU0sRUFBRTtBQUNSLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxjQUFjLEVBQUUscUNBQXFDLENBQUMsRUFBRTtBQUMxRSxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsTUFBTSxFQUFFO0FBQ1YsSUFBSSxZQUFZLEVBQUU7QUFDbEIsTUFBTSw0REFBNEQ7QUFDbEUsS0FBSztBQUNMLElBQUksU0FBUyxFQUFFLENBQUMseURBQXlELENBQUM7QUFDMUUsSUFBSSxzQkFBc0IsRUFBRSxDQUFDLGdEQUFnRCxDQUFDO0FBQzlFLElBQUksNkJBQTZCLEVBQUU7QUFDbkMsTUFBTSxzRUFBc0U7QUFDNUUsS0FBSztBQUNMLElBQUksTUFBTSxFQUFFLENBQUMsbUNBQW1DLENBQUM7QUFDakQsSUFBSSxhQUFhLEVBQUU7QUFDbkIsTUFBTSwyREFBMkQ7QUFDakUsS0FBSztBQUNMLElBQUksV0FBVyxFQUFFLENBQUMsbUNBQW1DLENBQUM7QUFDdEQsSUFBSSxlQUFlLEVBQUUsQ0FBQyx1Q0FBdUMsQ0FBQztBQUM5RCxJQUFJLGFBQWEsRUFBRTtBQUNuQixNQUFNLDJEQUEyRDtBQUNqRSxLQUFLO0FBQ0wsSUFBSSxXQUFXLEVBQUUsQ0FBQyw0Q0FBNEMsQ0FBQztBQUMvRCxJQUFJLGVBQWUsRUFBRTtBQUNyQixNQUFNLDREQUE0RDtBQUNsRSxLQUFLO0FBQ0wsSUFBSSxHQUFHLEVBQUUsQ0FBQyxpREFBaUQsQ0FBQztBQUM1RCxJQUFJLFVBQVUsRUFBRSxDQUFDLHdEQUF3RCxDQUFDO0FBQzFFLElBQUksUUFBUSxFQUFFLENBQUMsb0RBQW9ELENBQUM7QUFDcEUsSUFBSSxRQUFRLEVBQUUsQ0FBQyx5Q0FBeUMsQ0FBQztBQUN6RCxJQUFJLFlBQVksRUFBRSxDQUFDLHlEQUF5RCxDQUFDO0FBQzdFLElBQUksSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDO0FBQ3pCLElBQUksYUFBYSxFQUFFLENBQUMscUNBQXFDLENBQUM7QUFDMUQsSUFBSSxZQUFZLEVBQUUsQ0FBQywwREFBMEQsQ0FBQztBQUM5RSxJQUFJLG1CQUFtQixFQUFFLENBQUMsMkNBQTJDLENBQUM7QUFDdEUsSUFBSSxVQUFVLEVBQUUsQ0FBQyx3REFBd0QsQ0FBQztBQUMxRSxJQUFJLGlCQUFpQixFQUFFLENBQUMseUNBQXlDLENBQUM7QUFDbEUsSUFBSSxxQkFBcUIsRUFBRTtBQUMzQixNQUFNLDBEQUEwRDtBQUNoRSxLQUFLO0FBQ0wsSUFBSSx3QkFBd0IsRUFBRSxDQUFDLGtCQUFrQixDQUFDO0FBQ2xELElBQUksVUFBVSxFQUFFLENBQUMsd0JBQXdCLENBQUM7QUFDMUMsSUFBSSxXQUFXLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQztBQUNyRCxJQUFJLHNCQUFzQixFQUFFO0FBQzVCLE1BQU0sZ0VBQWdFO0FBQ3RFLEtBQUs7QUFDTCxJQUFJLGlCQUFpQixFQUFFLENBQUMsa0NBQWtDLENBQUM7QUFDM0QsSUFBSSxpQkFBaUIsRUFBRTtBQUN2QixNQUFNLHdEQUF3RDtBQUM5RCxLQUFLO0FBQ0wsSUFBSSxjQUFjLEVBQUUsQ0FBQyxzQ0FBc0MsQ0FBQztBQUM1RCxJQUFJLElBQUksRUFBRSxDQUFDLHNEQUFzRCxDQUFDO0FBQ2xFLElBQUksZUFBZSxFQUFFO0FBQ3JCLE1BQU0sMkRBQTJEO0FBQ2pFLEtBQUs7QUFDTCxJQUFJLGVBQWUsRUFBRTtBQUNyQixNQUFNLDhEQUE4RDtBQUNwRSxLQUFLO0FBQ0wsSUFBSSxXQUFXLEVBQUU7QUFDakIsTUFBTSxrRUFBa0U7QUFDeEUsS0FBSztBQUNMLElBQUksU0FBUyxFQUFFLENBQUMsd0RBQXdELENBQUM7QUFDekUsSUFBSSxNQUFNLEVBQUUsQ0FBQyx5REFBeUQsQ0FBQztBQUN2RSxJQUFJLE1BQU0sRUFBRSxDQUFDLG1EQUFtRCxDQUFDO0FBQ2pFLElBQUksYUFBYSxFQUFFLENBQUMsMERBQTBELENBQUM7QUFDL0UsSUFBSSxXQUFXLEVBQUUsQ0FBQywyQ0FBMkMsQ0FBQztBQUM5RCxJQUFJLGVBQWUsRUFBRTtBQUNyQixNQUFNLDJEQUEyRDtBQUNqRSxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsUUFBUSxFQUFFO0FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQztBQUNwQyxJQUFJLGtCQUFrQixFQUFFLENBQUMsZUFBZSxDQUFDO0FBQ3pDLElBQUksVUFBVSxFQUFFLENBQUMsbUNBQW1DLENBQUM7QUFDckQsR0FBRztBQUNILEVBQUUsUUFBUSxFQUFFO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztBQUM5QixJQUFJLFNBQVMsRUFBRTtBQUNmLE1BQU0sb0JBQW9CO0FBQzFCLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsMkJBQTJCLEVBQUUsRUFBRTtBQUNsRSxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsSUFBSSxFQUFFO0FBQ1IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUM7QUFDdEIsSUFBSSxjQUFjLEVBQUUsQ0FBQyxlQUFlLENBQUM7QUFDckMsSUFBSSxVQUFVLEVBQUUsQ0FBQyxjQUFjLENBQUM7QUFDaEMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUM7QUFDeEIsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUM7QUFDbkIsR0FBRztBQUNILEVBQUUsVUFBVSxFQUFFO0FBQ2QsSUFBSSxpQ0FBaUMsRUFBRTtBQUN2QyxNQUFNLGdEQUFnRDtBQUN0RCxLQUFLO0FBQ0wsSUFBSSxtQkFBbUIsRUFBRTtBQUN6QixNQUFNLHNEQUFzRDtBQUM1RCxLQUFLO0FBQ0wsSUFBSSxxQkFBcUIsRUFBRTtBQUMzQixNQUFNLG1EQUFtRDtBQUN6RCxLQUFLO0FBQ0wsSUFBSSw4QkFBOEIsRUFBRTtBQUNwQyxNQUFNLDZDQUE2QztBQUNuRCxLQUFLO0FBQ0wsSUFBSSw2QkFBNkIsRUFBRSxDQUFDLHFDQUFxQyxDQUFDO0FBQzFFLElBQUksZUFBZSxFQUFFLENBQUMsMkNBQTJDLENBQUM7QUFDbEUsSUFBSSx3QkFBd0IsRUFBRSxDQUFDLHNCQUFzQixDQUFDO0FBQ3RELElBQUksVUFBVSxFQUFFLENBQUMsNEJBQTRCLENBQUM7QUFDOUMsSUFBSSw2QkFBNkIsRUFBRTtBQUNuQyxNQUFNLGtEQUFrRDtBQUN4RCxLQUFLO0FBQ0wsSUFBSSxlQUFlLEVBQUUsQ0FBQyx3REFBd0QsQ0FBQztBQUMvRSxJQUFJLGdCQUFnQixFQUFFO0FBQ3RCLE1BQU0sa0RBQWtEO0FBQ3hELE1BQU0sRUFBRTtBQUNSLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsK0JBQStCLENBQUMsRUFBRTtBQUNsRSxLQUFLO0FBQ0wsSUFBSSx5QkFBeUIsRUFBRSxDQUFDLHVCQUF1QixDQUFDO0FBQ3hELElBQUksV0FBVyxFQUFFLENBQUMsNkJBQTZCLENBQUM7QUFDaEQsSUFBSSw4QkFBOEIsRUFBRTtBQUNwQyxNQUFNLCtEQUErRDtBQUNyRSxLQUFLO0FBQ0wsSUFBSSxnQkFBZ0IsRUFBRTtBQUN0QixNQUFNLHFFQUFxRTtBQUMzRSxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsSUFBSSxFQUFFO0FBQ1IsSUFBSSw4QkFBOEIsRUFBRTtBQUNwQyxNQUFNLGdEQUFnRDtBQUN0RCxLQUFLO0FBQ0wsSUFBSSxpQ0FBaUMsRUFBRTtBQUN2QyxNQUFNLGdEQUFnRDtBQUN0RCxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsSUFBSSxFQUFFO0FBQ1IsSUFBSSxzQkFBc0IsRUFBRTtBQUM1QixNQUFNLHFEQUFxRDtBQUMzRCxLQUFLO0FBQ0wsSUFBSSxtQkFBbUIsRUFBRTtBQUN6QixNQUFNLGdFQUFnRTtBQUN0RSxLQUFLO0FBQ0wsSUFBSSxtQkFBbUIsRUFBRTtBQUN6QixNQUFNLCtEQUErRDtBQUNyRSxLQUFLO0FBQ0wsSUFBSSxTQUFTLEVBQUUsQ0FBQyxtQ0FBbUMsQ0FBQztBQUNwRCxJQUFJLGdCQUFnQixFQUFFLENBQUMsZ0RBQWdELENBQUM7QUFDeEUsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLG1DQUFtQyxDQUFDO0FBQzNELElBQUksc0JBQXNCLEVBQUUsQ0FBQyxvQ0FBb0MsQ0FBQztBQUNsRSxJQUFJLDRCQUE0QixFQUFFLENBQUMsMkNBQTJDLENBQUM7QUFDL0UsSUFBSSxrQ0FBa0MsRUFBRTtBQUN4QyxNQUFNLGtEQUFrRDtBQUN4RCxLQUFLO0FBQ0wsSUFBSSw0QkFBNEIsRUFBRSxDQUFDLHFDQUFxQyxDQUFDO0FBQ3pFLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztBQUN0RCxJQUFJLDhCQUE4QixFQUFFLENBQUMscUNBQXFDLENBQUM7QUFDM0UsSUFBSSw0Q0FBNEMsRUFBRTtBQUNsRCxNQUFNLHFDQUFxQztBQUMzQyxLQUFLO0FBQ0wsSUFBSSw0QkFBNEIsRUFBRTtBQUNsQyxNQUFNLDBEQUEwRDtBQUNoRSxLQUFLO0FBQ0wsSUFBSSxhQUFhLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztBQUM3QyxJQUFJLE1BQU0sRUFBRSxDQUFDLG9CQUFvQixDQUFDO0FBQ2xDLElBQUksNEJBQTRCLEVBQUU7QUFDbEMsTUFBTSxpREFBaUQ7QUFDdkQsS0FBSztBQUNMLElBQUksYUFBYSxFQUFFLENBQUMsb0NBQW9DLENBQUM7QUFDekQsSUFBSSwyQ0FBMkMsRUFBRTtBQUNqRCxNQUFNLGtEQUFrRDtBQUN4RCxLQUFLO0FBQ0wsSUFBSSxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztBQUM1QixJQUFJLHNCQUFzQixFQUFFLENBQUMsbUNBQW1DLENBQUM7QUFDakUsSUFBSSxpQkFBaUIsRUFBRTtBQUN2QixNQUFNLDBEQUEwRDtBQUNoRSxLQUFLO0FBQ0wsSUFBSSxpQ0FBaUMsRUFBRSxDQUFDLGtDQUFrQyxDQUFDO0FBQzNFLElBQUksb0JBQW9CLEVBQUUsQ0FBQyx3Q0FBd0MsQ0FBQztBQUNwRSxJQUFJLFVBQVUsRUFBRSxDQUFDLDhDQUE4QyxDQUFDO0FBQ2hFLElBQUksVUFBVSxFQUFFLENBQUMsaUNBQWlDLENBQUM7QUFDbkQsSUFBSSxzQkFBc0IsRUFBRSxDQUFDLHdDQUF3QyxDQUFDO0FBQ3RFLElBQUksa0JBQWtCLEVBQUU7QUFDeEIsTUFBTSwwREFBMEQ7QUFDaEUsS0FBSztBQUNMLElBQUksSUFBSSxFQUFFLENBQUMsb0JBQW9CLENBQUM7QUFDaEMsSUFBSSxvQkFBb0IsRUFBRSxDQUFDLCtCQUErQixDQUFDO0FBQzNELElBQUksZ0JBQWdCLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztBQUNoRCxJQUFJLGtDQUFrQyxFQUFFLENBQUMsbUNBQW1DLENBQUM7QUFDN0UsSUFBSSxxQkFBcUIsRUFBRSxDQUFDLG9DQUFvQyxDQUFDO0FBQ2pFLElBQUksd0JBQXdCLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztBQUNoRCxJQUFJLFdBQVcsRUFBRSxDQUFDLDRCQUE0QixDQUFDO0FBQy9DLElBQUksbUJBQW1CLEVBQUUsQ0FBQyxtREFBbUQsQ0FBQztBQUM5RSxJQUFJLFdBQVcsRUFBRSxDQUFDLHlCQUF5QixDQUFDO0FBQzVDLElBQUksbUNBQW1DLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQztBQUN2RSxJQUFJLGdCQUFnQixFQUFFLENBQUMsb0RBQW9ELENBQUM7QUFDNUUsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLG9EQUFvRCxDQUFDO0FBQzVFLElBQUksWUFBWSxFQUFFLENBQUMsb0NBQW9DLENBQUM7QUFDeEQsSUFBSSxzQ0FBc0MsRUFBRTtBQUM1QyxNQUFNLHVEQUF1RDtBQUM3RCxLQUFLO0FBQ0wsSUFBSSx3QkFBd0IsRUFBRSxDQUFDLHVDQUF1QyxDQUFDO0FBQ3ZFLElBQUksd0JBQXdCLEVBQUU7QUFDOUIsTUFBTSw4REFBOEQ7QUFDcEUsS0FBSztBQUNMLElBQUksK0JBQStCLEVBQUU7QUFDckMsTUFBTSw4RUFBOEU7QUFDcEYsS0FBSztBQUNMLElBQUksb0JBQW9CLEVBQUUsQ0FBQyxnREFBZ0QsQ0FBQztBQUM1RSxJQUFJLGFBQWEsRUFBRSxDQUFDLHdDQUF3QyxDQUFDO0FBQzdELElBQUksc0JBQXNCLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztBQUMzRCxJQUFJLGlCQUFpQixFQUFFLENBQUMsZ0NBQWdDLENBQUM7QUFDekQsSUFBSSx3QkFBd0IsRUFBRSxDQUFDLG1DQUFtQyxDQUFDO0FBQ25FLElBQUkscUJBQXFCLEVBQUUsQ0FBQyw0Q0FBNEMsQ0FBQztBQUN6RSxJQUFJLFlBQVksRUFBRSxDQUFDLHVCQUF1QixDQUFDO0FBQzNDLElBQUksMkJBQTJCLEVBQUU7QUFDakMsTUFBTSxnREFBZ0Q7QUFDdEQsS0FBSztBQUNMLElBQUksV0FBVyxFQUFFLENBQUMsd0NBQXdDLENBQUM7QUFDM0QsSUFBSSx3QkFBd0IsRUFBRTtBQUM5QixNQUFNLG9FQUFvRTtBQUMxRSxLQUFLO0FBQ0wsSUFBSSxvQkFBb0IsRUFBRTtBQUMxQixNQUFNLDZEQUE2RDtBQUNuRSxLQUFLO0FBQ0wsSUFBSSxZQUFZLEVBQUUsQ0FBQyx1Q0FBdUMsQ0FBQztBQUMzRCxJQUFJLHVCQUF1QixFQUFFLENBQUMsMkNBQTJDLENBQUM7QUFDMUUsSUFBSSx5QkFBeUIsRUFBRTtBQUMvQixNQUFNLHFEQUFxRDtBQUMzRCxLQUFLO0FBQ0wsSUFBSSwwQ0FBMEMsRUFBRTtBQUNoRCxNQUFNLDhDQUE4QztBQUNwRCxLQUFLO0FBQ0wsSUFBSSx5QkFBeUIsRUFBRTtBQUMvQixNQUFNLHdEQUF3RDtBQUM5RCxLQUFLO0FBQ0wsSUFBSSxxQkFBcUIsRUFBRTtBQUMzQixNQUFNLGtFQUFrRTtBQUN4RSxLQUFLO0FBQ0wsSUFBSSw0QkFBNEIsRUFBRTtBQUNsQyxNQUFNLGlEQUFpRDtBQUN2RCxLQUFLO0FBQ0wsSUFBSSxxQkFBcUIsRUFBRTtBQUMzQixNQUFNLHlEQUF5RDtBQUMvRCxLQUFLO0FBQ0wsSUFBSSxxQkFBcUIsRUFBRTtBQUMzQixNQUFNLHdEQUF3RDtBQUM5RCxLQUFLO0FBQ0wsSUFBSSxpQkFBaUIsRUFBRTtBQUN2QixNQUFNLG1FQUFtRTtBQUN6RSxLQUFLO0FBQ0wsSUFBSSxpQkFBaUIsRUFBRTtBQUN2QixNQUFNLGtFQUFrRTtBQUN4RSxLQUFLO0FBQ0wsSUFBSSxvQkFBb0IsRUFBRSxDQUFDLHdDQUF3QyxDQUFDO0FBQ3BFLElBQUksdUNBQXVDLEVBQUU7QUFDN0MsTUFBTSwyQ0FBMkM7QUFDakQsS0FBSztBQUNMLElBQUksV0FBVyxFQUFFLENBQUMsc0NBQXNDLENBQUM7QUFDekQsSUFBSSxNQUFNLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztBQUNqQyxJQUFJLG9DQUFvQyxFQUFFO0FBQzFDLE1BQU0sb0NBQW9DO0FBQzFDLEtBQUs7QUFDTCxJQUFJLGVBQWUsRUFBRSxDQUFDLGtEQUFrRCxDQUFDO0FBQ3pFLElBQUksaUJBQWlCLEVBQUUsQ0FBQyx5Q0FBeUMsQ0FBQztBQUNsRSxJQUFJLGFBQWEsRUFBRSxDQUFDLG1DQUFtQyxDQUFDO0FBQ3hELElBQUkseUJBQXlCLEVBQUUsQ0FBQywwQ0FBMEMsQ0FBQztBQUMzRSxHQUFHO0FBQ0gsRUFBRSxRQUFRLEVBQUU7QUFDWixJQUFJLGlDQUFpQyxFQUFFO0FBQ3ZDLE1BQU0scURBQXFEO0FBQzNELEtBQUs7QUFDTCxJQUFJLG1CQUFtQixFQUFFO0FBQ3pCLE1BQU0sMkRBQTJEO0FBQ2pFLEtBQUs7QUFDTCxJQUFJLG9CQUFvQixFQUFFO0FBQzFCLE1BQU0saUVBQWlFO0FBQ3ZFLEtBQUs7QUFDTCxJQUFJLHdDQUF3QyxFQUFFO0FBQzlDLE1BQU0sbUZBQW1GO0FBQ3pGLEtBQUs7QUFDTCxJQUFJLDBCQUEwQixFQUFFO0FBQ2hDLE1BQU0seUZBQXlGO0FBQy9GLEtBQUs7QUFDTCxJQUFJLDJCQUEyQixFQUFFO0FBQ2pDLE1BQU0sK0ZBQStGO0FBQ3JHLEtBQUs7QUFDTCxJQUFJLDRDQUE0QyxFQUFFO0FBQ2xELE1BQU0saUVBQWlFO0FBQ3ZFLE1BQU0sRUFBRTtBQUNSLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxVQUFVLEVBQUUsMkNBQTJDLENBQUMsRUFBRTtBQUM1RSxLQUFLO0FBQ0wsSUFBSSwyREFBMkQsRUFBRTtBQUNqRSxNQUFNLDJEQUEyRDtBQUNqRSxNQUFNLEVBQUU7QUFDUixNQUFNO0FBQ04sUUFBUSxPQUFPLEVBQUU7QUFDakIsVUFBVSxVQUFVO0FBQ3BCLFVBQVUseURBQXlEO0FBQ25FLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMLElBQUksdURBQXVELEVBQUU7QUFDN0QsTUFBTSwyREFBMkQ7QUFDakUsS0FBSztBQUNMLElBQUkseUNBQXlDLEVBQUU7QUFDL0MsTUFBTSxpRUFBaUU7QUFDdkUsS0FBSztBQUNMLElBQUksMENBQTBDLEVBQUU7QUFDaEQsTUFBTSx1RUFBdUU7QUFDN0UsS0FBSztBQUNMLElBQUksOEJBQThCLEVBQUU7QUFDcEMsTUFBTSxrREFBa0Q7QUFDeEQsS0FBSztBQUNMLElBQUkseUJBQXlCLEVBQUU7QUFDL0IsTUFBTSx3REFBd0Q7QUFDOUQsS0FBSztBQUNMLElBQUksaUJBQWlCLEVBQUU7QUFDdkIsTUFBTSw4REFBOEQ7QUFDcEUsS0FBSztBQUNMLElBQUkscUNBQXFDLEVBQUU7QUFDM0MsTUFBTSxnRkFBZ0Y7QUFDdEYsS0FBSztBQUNMLElBQUksZ0NBQWdDLEVBQUU7QUFDdEMsTUFBTSxzRkFBc0Y7QUFDNUYsS0FBSztBQUNMLElBQUksd0JBQXdCLEVBQUU7QUFDOUIsTUFBTSw0RkFBNEY7QUFDbEcsS0FBSztBQUNMLElBQUksMERBQTBELEVBQUU7QUFDaEUsTUFBTSw0QkFBNEI7QUFDbEMsS0FBSztBQUNMLElBQUkscURBQXFELEVBQUU7QUFDM0QsTUFBTSxrQ0FBa0M7QUFDeEMsS0FBSztBQUNMLElBQUksNkNBQTZDLEVBQUU7QUFDbkQsTUFBTSx3Q0FBd0M7QUFDOUMsS0FBSztBQUNMLElBQUksZ0NBQWdDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztBQUM1RCxJQUFJLDJCQUEyQixFQUFFLENBQUMsMEJBQTBCLENBQUM7QUFDN0QsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLGdDQUFnQyxDQUFDO0FBQzNELElBQUksa0NBQWtDLEVBQUU7QUFDeEMsTUFBTSxtRUFBbUU7QUFDekUsS0FBSztBQUNMLElBQUksb0JBQW9CLEVBQUU7QUFDMUIsTUFBTSx5RUFBeUU7QUFDL0UsS0FBSztBQUNMLElBQUkscUJBQXFCLEVBQUU7QUFDM0IsTUFBTSwrRUFBK0U7QUFDckYsS0FBSztBQUNMLElBQUkseUNBQXlDLEVBQUU7QUFDL0MsTUFBTSx5RkFBeUY7QUFDL0YsS0FBSztBQUNMLElBQUksMkJBQTJCLEVBQUU7QUFDakMsTUFBTSwrRkFBK0Y7QUFDckcsS0FBSztBQUNMLElBQUksNEJBQTRCLEVBQUU7QUFDbEMsTUFBTSxxR0FBcUc7QUFDM0csS0FBSztBQUNMLEdBQUc7QUFDSCxFQUFFLFFBQVEsRUFBRTtBQUNaLElBQUksZUFBZSxFQUFFLENBQUMscURBQXFELENBQUM7QUFDNUUsSUFBSSxVQUFVLEVBQUUsQ0FBQywwQ0FBMEMsQ0FBQztBQUM1RCxJQUFJLFlBQVksRUFBRSxDQUFDLHFDQUFxQyxDQUFDO0FBQ3pELElBQUksMEJBQTBCLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztBQUN2RCxJQUFJLFlBQVksRUFBRSxDQUFDLDJCQUEyQixDQUFDO0FBQy9DLElBQUksYUFBYSxFQUFFLENBQUMscUNBQXFDLENBQUM7QUFDMUQsSUFBSSxNQUFNLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztBQUM3QyxJQUFJLFVBQVUsRUFBRSxDQUFDLDBDQUEwQyxDQUFDO0FBQzVELElBQUksWUFBWSxFQUFFLENBQUMsc0NBQXNDLENBQUM7QUFDMUQsSUFBSSxHQUFHLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQztBQUN2QyxJQUFJLE9BQU8sRUFBRSxDQUFDLHVDQUF1QyxDQUFDO0FBQ3RELElBQUksU0FBUyxFQUFFLENBQUMsbUNBQW1DLENBQUM7QUFDcEQsSUFBSSxvQkFBb0IsRUFBRTtBQUMxQixNQUFNLGdFQUFnRTtBQUN0RSxLQUFLO0FBQ0wsSUFBSSxTQUFTLEVBQUUsQ0FBQyx5Q0FBeUMsQ0FBQztBQUMxRCxJQUFJLGlCQUFpQixFQUFFLENBQUMsMENBQTBDLENBQUM7QUFDbkUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxvQ0FBb0MsQ0FBQztBQUN2RCxJQUFJLFVBQVUsRUFBRSxDQUFDLDBCQUEwQixDQUFDO0FBQzVDLElBQUksV0FBVyxFQUFFLENBQUMsb0NBQW9DLENBQUM7QUFDdkQsSUFBSSxXQUFXLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQztBQUNuRCxJQUFJLFFBQVEsRUFBRSxDQUFDLDhDQUE4QyxDQUFDO0FBQzlELElBQUksVUFBVSxFQUFFLENBQUMsMENBQTBDLENBQUM7QUFDNUQsSUFBSSxrQkFBa0IsRUFBRTtBQUN4QixNQUFNLHdEQUF3RDtBQUM5RCxLQUFLO0FBQ0wsSUFBSSxNQUFNLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztBQUM1QyxJQUFJLFVBQVUsRUFBRSxDQUFDLHlDQUF5QyxDQUFDO0FBQzNELElBQUksWUFBWSxFQUFFLENBQUMscUNBQXFDLENBQUM7QUFDekQsR0FBRztBQUNILEVBQUUsS0FBSyxFQUFFO0FBQ1QsSUFBSSxhQUFhLEVBQUUsQ0FBQyxxREFBcUQsQ0FBQztBQUMxRSxJQUFJLE1BQU0sRUFBRSxDQUFDLGtDQUFrQyxDQUFDO0FBQ2hELElBQUksMkJBQTJCLEVBQUU7QUFDakMsTUFBTSw4RUFBOEU7QUFDcEYsS0FBSztBQUNMLElBQUksWUFBWSxFQUFFLENBQUMsd0RBQXdELENBQUM7QUFDNUUsSUFBSSxtQkFBbUIsRUFBRTtBQUN6QixNQUFNLHlEQUF5RDtBQUMvRCxLQUFLO0FBQ0wsSUFBSSxtQkFBbUIsRUFBRTtBQUN6QixNQUFNLHNFQUFzRTtBQUM1RSxLQUFLO0FBQ0wsSUFBSSxtQkFBbUIsRUFBRTtBQUN6QixNQUFNLDBEQUEwRDtBQUNoRSxLQUFLO0FBQ0wsSUFBSSxhQUFhLEVBQUU7QUFDbkIsTUFBTSw4RUFBOEU7QUFDcEYsS0FBSztBQUNMLElBQUksR0FBRyxFQUFFLENBQUMsK0NBQStDLENBQUM7QUFDMUQsSUFBSSxTQUFTLEVBQUU7QUFDZixNQUFNLG1FQUFtRTtBQUN6RSxLQUFLO0FBQ0wsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLHVEQUF1RCxDQUFDO0FBQy9FLElBQUksSUFBSSxFQUFFLENBQUMsaUNBQWlDLENBQUM7QUFDN0MsSUFBSSxxQkFBcUIsRUFBRTtBQUMzQixNQUFNLDRFQUE0RTtBQUNsRixLQUFLO0FBQ0wsSUFBSSxXQUFXLEVBQUUsQ0FBQyx1REFBdUQsQ0FBQztBQUMxRSxJQUFJLFNBQVMsRUFBRSxDQUFDLHFEQUFxRCxDQUFDO0FBQ3RFLElBQUksc0JBQXNCLEVBQUU7QUFDNUIsTUFBTSxtRUFBbUU7QUFDekUsS0FBSztBQUNMLElBQUksa0JBQWtCLEVBQUU7QUFDeEIsTUFBTSx3REFBd0Q7QUFDOUQsS0FBSztBQUNMLElBQUkseUJBQXlCLEVBQUUsQ0FBQywwQ0FBMEMsQ0FBQztBQUMzRSxJQUFJLFdBQVcsRUFBRSxDQUFDLHVEQUF1RCxDQUFDO0FBQzFFLElBQUksS0FBSyxFQUFFLENBQUMscURBQXFELENBQUM7QUFDbEUsSUFBSSx3QkFBd0IsRUFBRTtBQUM5QixNQUFNLHNFQUFzRTtBQUM1RSxLQUFLO0FBQ0wsSUFBSSxnQkFBZ0IsRUFBRTtBQUN0QixNQUFNLG9FQUFvRTtBQUMxRSxLQUFLO0FBQ0wsSUFBSSxZQUFZLEVBQUU7QUFDbEIsTUFBTSwyRUFBMkU7QUFDakYsS0FBSztBQUNMLElBQUksTUFBTSxFQUFFLENBQUMsaURBQWlELENBQUM7QUFDL0QsSUFBSSxZQUFZLEVBQUU7QUFDbEIsTUFBTSw2REFBNkQ7QUFDbkUsS0FBSztBQUNMLElBQUksWUFBWSxFQUFFO0FBQ2xCLE1BQU0sbUVBQW1FO0FBQ3pFLEtBQUs7QUFDTCxJQUFJLG1CQUFtQixFQUFFO0FBQ3pCLE1BQU0seURBQXlEO0FBQy9ELEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO0FBQ3pDLEVBQUUsU0FBUyxFQUFFO0FBQ2IsSUFBSSxzQkFBc0IsRUFBRTtBQUM1QixNQUFNLDREQUE0RDtBQUNsRSxLQUFLO0FBQ0wsSUFBSSxjQUFjLEVBQUU7QUFDcEIsTUFBTSw0REFBNEQ7QUFDbEUsS0FBSztBQUNMLElBQUkscUJBQXFCLEVBQUU7QUFDM0IsTUFBTSxtRUFBbUU7QUFDekUsS0FBSztBQUNMLElBQUksaUNBQWlDLEVBQUU7QUFDdkMsTUFBTSxrRUFBa0U7QUFDeEUsS0FBSztBQUNMLElBQUksZ0JBQWdCLEVBQUU7QUFDdEIsTUFBTSw0REFBNEQ7QUFDbEUsS0FBSztBQUNMLElBQUksbUNBQW1DLEVBQUU7QUFDekMsTUFBTSx3R0FBd0c7QUFDOUcsS0FBSztBQUNMLElBQUksNEJBQTRCLEVBQUU7QUFDbEMsTUFBTSw4RUFBOEU7QUFDcEYsS0FBSztBQUNMLElBQUksc0JBQXNCLEVBQUU7QUFDNUIsTUFBTSw0RUFBNEU7QUFDbEYsS0FBSztBQUNMLElBQUksY0FBYyxFQUFFO0FBQ3BCLE1BQU0sNEVBQTRFO0FBQ2xGLEtBQUs7QUFDTCxJQUFJLHFCQUFxQixFQUFFO0FBQzNCLE1BQU0sbUZBQW1GO0FBQ3pGLEtBQUs7QUFDTCxJQUFJLDJCQUEyQixFQUFFO0FBQ2pDLE1BQU0sa0ZBQWtGO0FBQ3hGLEtBQUs7QUFDTCxJQUFJLGdCQUFnQixFQUFFO0FBQ3RCLE1BQU0sNEVBQTRFO0FBQ2xGLEtBQUs7QUFDTCxJQUFJLHVCQUF1QixFQUFFO0FBQzdCLE1BQU0sOEZBQThGO0FBQ3BHLEtBQUs7QUFDTCxJQUFJLDhCQUE4QixFQUFFO0FBQ3BDLE1BQU0sd0hBQXdIO0FBQzlILEtBQUs7QUFDTCxJQUFJLG9CQUFvQixFQUFFO0FBQzFCLE1BQU0sMkRBQTJEO0FBQ2pFLEtBQUs7QUFDTCxJQUFJLFlBQVksRUFBRSxDQUFDLDJEQUEyRCxDQUFDO0FBQy9FLElBQUksbUJBQW1CLEVBQUU7QUFDekIsTUFBTSxrRUFBa0U7QUFDeEUsS0FBSztBQUNMLElBQUksK0JBQStCLEVBQUU7QUFDckMsTUFBTSxpRUFBaUU7QUFDdkUsS0FBSztBQUNMLElBQUksY0FBYyxFQUFFO0FBQ3BCLE1BQU0sMkRBQTJEO0FBQ2pFLEtBQUs7QUFDTCxJQUFJLGlDQUFpQyxFQUFFO0FBQ3ZDLE1BQU0sdUdBQXVHO0FBQzdHLEtBQUs7QUFDTCxJQUFJLDBCQUEwQixFQUFFO0FBQ2hDLE1BQU0sNkVBQTZFO0FBQ25GLEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxLQUFLLEVBQUU7QUFDVCxJQUFJLGdCQUFnQixFQUFFO0FBQ3RCLE1BQU0sb0RBQW9EO0FBQzFELE1BQU0sRUFBRTtBQUNSLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsc0NBQXNDLENBQUMsRUFBRTtBQUNwRSxLQUFLO0FBQ0wsSUFBSSxvQ0FBb0MsRUFBRTtBQUMxQyxNQUFNLG9EQUFvRDtBQUMxRCxLQUFLO0FBQ0wsSUFBSSx3QkFBd0IsRUFBRTtBQUM5QixNQUFNLDJFQUEyRTtBQUNqRixNQUFNLEVBQUU7QUFDUixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRTtBQUMzQixLQUFLO0FBQ0wsSUFBSSxlQUFlLEVBQUUsQ0FBQyxvREFBb0QsQ0FBQztBQUMzRSxJQUFJLHNCQUFzQixFQUFFO0FBQzVCLE1BQU0seUZBQXlGO0FBQy9GLE1BQU0sRUFBRTtBQUNSLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFO0FBQy9CLEtBQUs7QUFDTCxJQUFJLHlCQUF5QixFQUFFO0FBQy9CLE1BQU0sNEVBQTRFO0FBQ2xGLE1BQU0sRUFBRTtBQUNSLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzVCLEtBQUs7QUFDTCxJQUFJLHlCQUF5QixFQUFFO0FBQy9CLE1BQU0sNEVBQTRFO0FBQ2xGLE1BQU0sRUFBRTtBQUNSLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzVCLEtBQUs7QUFDTCxJQUFJLHFCQUFxQixFQUFFO0FBQzNCLE1BQU0sMkVBQTJFO0FBQ2pGLEtBQUs7QUFDTCxJQUFJLDJCQUEyQixFQUFFO0FBQ2pDLE1BQU0sb0RBQW9EO0FBQzFELEtBQUs7QUFDTCxJQUFJLGlCQUFpQixFQUFFLENBQUMsb0RBQW9ELENBQUM7QUFDN0UsSUFBSSxrQ0FBa0MsRUFBRTtBQUN4QyxNQUFNLDJEQUEyRDtBQUNqRSxLQUFLO0FBQ0wsSUFBSSx3QkFBd0IsRUFBRTtBQUM5QixNQUFNLGdEQUFnRDtBQUN0RCxLQUFLO0FBQ0wsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLDZDQUE2QyxDQUFDO0FBQ3JFLElBQUksY0FBYyxFQUFFLENBQUMsbURBQW1ELENBQUM7QUFDekUsSUFBSSwwQkFBMEIsRUFBRTtBQUNoQyxNQUFNLDhDQUE4QztBQUNwRCxLQUFLO0FBQ0wsSUFBSSxjQUFjLEVBQUUsQ0FBQyxzQ0FBc0MsQ0FBQztBQUM1RCxJQUFJLG1CQUFtQixFQUFFO0FBQ3pCLE1BQU0sMERBQTBEO0FBQ2hFLEtBQUs7QUFDTCxJQUFJLCtCQUErQixFQUFFO0FBQ3JDLE1BQU0sNkVBQTZFO0FBQ25GLEtBQUs7QUFDTCxJQUFJLGtCQUFrQixFQUFFLENBQUMsMkNBQTJDLENBQUM7QUFDckUsSUFBSSxlQUFlLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQztBQUN4RCxJQUFJLGdCQUFnQixFQUFFLENBQUMsd0NBQXdDLENBQUM7QUFDaEUsSUFBSSw0QkFBNEIsRUFBRTtBQUNsQyxNQUFNLHVGQUF1RjtBQUM3RixLQUFLO0FBQ0wsSUFBSSw4QkFBOEIsRUFBRTtBQUNwQyxNQUFNLHdGQUF3RjtBQUM5RixLQUFLO0FBQ0wsSUFBSSxzQkFBc0IsRUFBRTtBQUM1QixNQUFNLGlFQUFpRTtBQUN2RSxLQUFLO0FBQ0wsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLHVDQUF1QyxDQUFDO0FBQ2xFLElBQUksMEJBQTBCLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztBQUNwRCxJQUFJLFVBQVUsRUFBRSxDQUFDLGtDQUFrQyxDQUFDO0FBQ3BELElBQUksV0FBVyxFQUFFLENBQUMsd0JBQXdCLENBQUM7QUFDM0MsSUFBSSxvQ0FBb0MsRUFBRTtBQUMxQyxNQUFNLCtDQUErQztBQUNyRCxLQUFLO0FBQ0wsSUFBSSx5QkFBeUIsRUFBRTtBQUMvQixNQUFNLDJEQUEyRDtBQUNqRSxLQUFLO0FBQ0wsSUFBSSwwQkFBMEIsRUFBRSxDQUFDLDJDQUEyQyxDQUFDO0FBQzdFLElBQUksZ0JBQWdCLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztBQUNuRCxJQUFJLHFCQUFxQixFQUFFLENBQUMsOENBQThDLENBQUM7QUFDM0UsSUFBSSxlQUFlLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQztBQUN6RCxJQUFJLGFBQWEsRUFBRSxDQUFDLHFDQUFxQyxDQUFDO0FBQzFELElBQUksaUJBQWlCLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQztBQUM5RCxJQUFJLG1CQUFtQixFQUFFLENBQUMsNENBQTRDLENBQUM7QUFDdkUsSUFBSSxtQkFBbUIsRUFBRTtBQUN6QixNQUFNLHVEQUF1RDtBQUM3RCxLQUFLO0FBQ0wsSUFBSSxhQUFhLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQztBQUN2RCxJQUFJLGlCQUFpQixFQUFFO0FBQ3ZCLE1BQU0scURBQXFEO0FBQzNELE1BQU0sRUFBRTtBQUNSLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsdUNBQXVDLENBQUMsRUFBRTtBQUNyRSxLQUFLO0FBQ0wsSUFBSSxxQ0FBcUMsRUFBRTtBQUMzQyxNQUFNLHFEQUFxRDtBQUMzRCxLQUFLO0FBQ0wsSUFBSSxNQUFNLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztBQUM1QyxJQUFJLHdCQUF3QixFQUFFO0FBQzlCLE1BQU0sd0VBQXdFO0FBQzlFLEtBQUs7QUFDTCxJQUFJLDJCQUEyQixFQUFFO0FBQ2pDLE1BQU0sMEVBQTBFO0FBQ2hGLEtBQUs7QUFDTCxJQUFJLG1CQUFtQixFQUFFO0FBQ3pCLE1BQU0sOERBQThEO0FBQ3BFLEtBQUs7QUFDTCxJQUFJLGNBQWMsRUFBRSxDQUFDLHNEQUFzRCxDQUFDO0FBQzVFLElBQUksc0JBQXNCLEVBQUU7QUFDNUIsTUFBTSwyREFBMkQ7QUFDakUsS0FBSztBQUNMLElBQUksbUJBQW1CLEVBQUUsQ0FBQyxvREFBb0QsQ0FBQztBQUMvRSxJQUFJLCtCQUErQixFQUFFO0FBQ3JDLE1BQU0sK0VBQStFO0FBQ3JGLEtBQUs7QUFDTCxJQUFJLGVBQWUsRUFBRSxDQUFDLDRDQUE0QyxDQUFDO0FBQ25FLElBQUksZ0JBQWdCLEVBQUU7QUFDdEIsTUFBTSwwREFBMEQ7QUFDaEUsS0FBSztBQUNMLElBQUksNEJBQTRCLEVBQUU7QUFDbEMsTUFBTSw0R0FBNEc7QUFDbEgsS0FBSztBQUNMLElBQUksVUFBVSxFQUFFLENBQUMsOENBQThDLENBQUM7QUFDaEUsSUFBSSxnQkFBZ0IsRUFBRTtBQUN0QixNQUFNLDBEQUEwRDtBQUNoRSxLQUFLO0FBQ0wsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLDBDQUEwQyxDQUFDO0FBQ2xFLElBQUksZUFBZSxFQUFFLENBQUMsb0NBQW9DLENBQUM7QUFDM0QsSUFBSSxpQ0FBaUMsRUFBRTtBQUN2QyxNQUFNLHlGQUF5RjtBQUMvRixLQUFLO0FBQ0wsSUFBSSxhQUFhLEVBQUUsQ0FBQyxvREFBb0QsQ0FBQztBQUN6RSxJQUFJLGtCQUFrQixFQUFFO0FBQ3hCLE1BQU0seURBQXlEO0FBQy9ELEtBQUs7QUFDTCxJQUFJLGlCQUFpQixFQUFFLENBQUMsb0RBQW9ELENBQUM7QUFDN0UsSUFBSSxtQkFBbUIsRUFBRTtBQUN6QixNQUFNLGtFQUFrRTtBQUN4RSxLQUFLO0FBQ0wsSUFBSSxhQUFhLEVBQUUsQ0FBQyw4Q0FBOEMsQ0FBQztBQUNuRSxJQUFJLDZCQUE2QixFQUFFO0FBQ25DLE1BQU0sdURBQXVEO0FBQzdELEtBQUs7QUFDTCxJQUFJLCtCQUErQixFQUFFO0FBQ3JDLE1BQU0sK0dBQStHO0FBQ3JILEtBQUs7QUFDTCxJQUFJLG9DQUFvQyxFQUFFO0FBQzFDLE1BQU0sOERBQThEO0FBQ3BFLEtBQUs7QUFDTCxJQUFJLDBCQUEwQixFQUFFO0FBQ2hDLE1BQU0sbURBQW1EO0FBQ3pELEtBQUs7QUFDTCxJQUFJLGVBQWUsRUFBRTtBQUNyQixNQUFNLHlDQUF5QztBQUMvQyxNQUFNLEVBQUU7QUFDUixNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLHdCQUF3QixDQUFDLEVBQUU7QUFDdEQsS0FBSztBQUNMLElBQUksc0JBQXNCLEVBQUUsQ0FBQyx5Q0FBeUMsQ0FBQztBQUN2RSxJQUFJLHNCQUFzQixFQUFFLENBQUMseUNBQXlDLENBQUM7QUFDdkUsSUFBSSw0QkFBNEIsRUFBRTtBQUNsQyxNQUFNLG9EQUFvRDtBQUMxRCxLQUFLO0FBQ0wsSUFBSSxtQ0FBbUMsRUFBRTtBQUN6QyxNQUFNLDJEQUEyRDtBQUNqRSxLQUFLO0FBQ0wsSUFBSSx5QkFBeUIsRUFBRTtBQUMvQixNQUFNLGdEQUFnRDtBQUN0RCxLQUFLO0FBQ0wsSUFBSSxvQkFBb0IsRUFBRTtBQUMxQixNQUFNLG9EQUFvRDtBQUMxRCxLQUFLO0FBQ0wsSUFBSSxHQUFHLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztBQUN0QyxJQUFJLHFCQUFxQixFQUFFO0FBQzNCLE1BQU0scUVBQXFFO0FBQzNFLEtBQUs7QUFDTCxJQUFJLHdCQUF3QixFQUFFO0FBQzlCLE1BQU0sdUVBQXVFO0FBQzdFLEtBQUs7QUFDTCxJQUFJLCtCQUErQixFQUFFO0FBQ3JDLE1BQU0sdUZBQXVGO0FBQzdGLEtBQUs7QUFDTCxJQUFJLGtCQUFrQixFQUFFLENBQUMsd0NBQXdDLENBQUM7QUFDbEUsSUFBSSx5QkFBeUIsRUFBRTtBQUMvQixNQUFNLHdGQUF3RjtBQUM5RixLQUFLO0FBQ0wsSUFBSSxZQUFZLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQztBQUN0RCxJQUFJLGtDQUFrQyxFQUFFO0FBQ3hDLE1BQU0sMEVBQTBFO0FBQ2hGLEtBQUs7QUFDTCxJQUFJLFdBQVcsRUFBRSxDQUFDLG1EQUFtRCxDQUFDO0FBQ3RFLElBQUksU0FBUyxFQUFFLENBQUMsNkNBQTZDLENBQUM7QUFDOUQsSUFBSSxtQkFBbUIsRUFBRTtBQUN6QixNQUFNLHdEQUF3RDtBQUM5RCxLQUFLO0FBQ0wsSUFBSSxjQUFjLEVBQUUsQ0FBQyxtREFBbUQsQ0FBQztBQUN6RSxJQUFJLFNBQVMsRUFBRSxDQUFDLDBDQUEwQyxDQUFDO0FBQzNELElBQUkscUJBQXFCLEVBQUUsQ0FBQyxnREFBZ0QsQ0FBQztBQUM3RSxJQUFJLDhCQUE4QixFQUFFO0FBQ3BDLE1BQU0sK0RBQStEO0FBQ3JFLEtBQUs7QUFDTCxJQUFJLHVCQUF1QixFQUFFLENBQUMsZ0RBQWdELENBQUM7QUFDL0UsSUFBSSxTQUFTLEVBQUUsQ0FBQyx5Q0FBeUMsQ0FBQztBQUMxRCxJQUFJLHNCQUFzQixFQUFFLENBQUMsaURBQWlELENBQUM7QUFDL0UsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLGlEQUFpRCxDQUFDO0FBQ3pFLElBQUksNEJBQTRCLEVBQUU7QUFDbEMsTUFBTSw0RUFBNEU7QUFDbEYsS0FBSztBQUNMLElBQUksMEJBQTBCLEVBQUUsQ0FBQyw2Q0FBNkMsQ0FBQztBQUMvRSxJQUFJLFVBQVUsRUFBRSxDQUFDLDJDQUEyQyxDQUFDO0FBQzdELElBQUksb0JBQW9CLEVBQUUsQ0FBQyw4Q0FBOEMsQ0FBQztBQUMxRSxJQUFJLGlDQUFpQyxFQUFFO0FBQ3ZDLE1BQU0sNEdBQTRHO0FBQ2xILEtBQUs7QUFDTCxJQUFJLHlCQUF5QixFQUFFLENBQUMsNkNBQTZDLENBQUM7QUFDOUUsSUFBSSxZQUFZLEVBQUUsQ0FBQyx5Q0FBeUMsQ0FBQztBQUM3RCxJQUFJLGFBQWEsRUFBRSxDQUFDLHVEQUF1RCxDQUFDO0FBQzVFLElBQUkseUJBQXlCLEVBQUU7QUFDL0IsTUFBTSx5R0FBeUc7QUFDL0csS0FBSztBQUNMLElBQUksbUJBQW1CLEVBQUU7QUFDekIsTUFBTSw0RUFBNEU7QUFDbEYsS0FBSztBQUNMLElBQUksY0FBYyxFQUFFO0FBQ3BCLE1BQU0sMkRBQTJEO0FBQ2pFLEtBQUs7QUFDTCxJQUFJLG1CQUFtQixFQUFFLENBQUMsK0NBQStDLENBQUM7QUFDMUUsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLDJDQUEyQyxDQUFDO0FBQ25FLElBQUksZUFBZSxFQUFFLENBQUMsc0RBQXNELENBQUM7QUFDN0UsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLHNDQUFzQyxDQUFDO0FBQzlELElBQUksYUFBYSxFQUFFLENBQUMsdUNBQXVDLENBQUM7QUFDNUQsSUFBSSxjQUFjLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztBQUNoRCxJQUFJLFFBQVEsRUFBRSxDQUFDLGlDQUFpQyxDQUFDO0FBQ2pELElBQUksYUFBYSxFQUFFLENBQUMsbURBQW1ELENBQUM7QUFDeEUsSUFBSSxrQkFBa0IsRUFBRTtBQUN4QixNQUFNLG1FQUFtRTtBQUN6RSxLQUFLO0FBQ0wsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLHdDQUF3QyxDQUFDO0FBQ25FLElBQUkscUJBQXFCLEVBQUUsQ0FBQywrQ0FBK0MsQ0FBQztBQUM1RSxJQUFJLDhCQUE4QixFQUFFO0FBQ3BDLE1BQU0sc0ZBQXNGO0FBQzVGLEtBQUs7QUFDTCxJQUFJLGlCQUFpQixFQUFFLENBQUMsNENBQTRDLENBQUM7QUFDckUsSUFBSSxTQUFTLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQztBQUNuRCxJQUFJLG9CQUFvQixFQUFFLENBQUMsd0NBQXdDLENBQUM7QUFDcEUsSUFBSSxVQUFVLEVBQUUsQ0FBQyxpREFBaUQsQ0FBQztBQUNuRSxJQUFJLGVBQWUsRUFBRSxDQUFDLHNEQUFzRCxDQUFDO0FBQzdFLElBQUksZUFBZSxFQUFFLENBQUMsK0NBQStDLENBQUM7QUFDdEUsSUFBSSxnQkFBZ0IsRUFBRTtBQUN0QixNQUFNLGdFQUFnRTtBQUN0RSxLQUFLO0FBQ0wsSUFBSSxpQkFBaUIsRUFBRSxDQUFDLGdEQUFnRCxDQUFDO0FBQ3pFLElBQUksY0FBYyxFQUFFLENBQUMsaURBQWlELENBQUM7QUFDdkUsSUFBSSxlQUFlLEVBQUUsQ0FBQyxvQ0FBb0MsQ0FBQztBQUMzRCxJQUFJLHlCQUF5QixFQUFFO0FBQy9CLE1BQU0sK0VBQStFO0FBQ3JGLEtBQUs7QUFDTCxJQUFJLG1DQUFtQyxFQUFFO0FBQ3pDLE1BQU0sMkVBQTJFO0FBQ2pGLEtBQUs7QUFDTCxJQUFJLFdBQVcsRUFBRSxDQUFDLGlEQUFpRCxDQUFDO0FBQ3BFLElBQUksZUFBZSxFQUFFLENBQUMscURBQXFELENBQUM7QUFDNUUsSUFBSSxtQ0FBbUMsRUFBRTtBQUN6QyxNQUFNLDJFQUEyRTtBQUNqRixLQUFLO0FBQ0wsSUFBSSxRQUFRLEVBQUUsQ0FBQyx5Q0FBeUMsQ0FBQztBQUN6RCxJQUFJLFVBQVUsRUFBRSxDQUFDLDJDQUEyQyxDQUFDO0FBQzdELElBQUksdUJBQXVCLEVBQUU7QUFDN0IsTUFBTSxrREFBa0Q7QUFDeEQsS0FBSztBQUNMLElBQUksa0JBQWtCLEVBQUU7QUFDeEIsTUFBTSxvRUFBb0U7QUFDMUUsS0FBSztBQUNMLElBQUksY0FBYyxFQUFFLENBQUMsb0NBQW9DLENBQUM7QUFDMUQsSUFBSSxhQUFhLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQztBQUMxRCxJQUFJLFlBQVksRUFBRSxDQUFDLG9DQUFvQyxDQUFDO0FBQ3hELElBQUkseUJBQXlCLEVBQUU7QUFDL0IsTUFBTSxvRUFBb0U7QUFDMUUsS0FBSztBQUNMLElBQUksaUJBQWlCLEVBQUUsQ0FBQyx5Q0FBeUMsQ0FBQztBQUNsRSxJQUFJLHFCQUFxQixFQUFFO0FBQzNCLE1BQU0seURBQXlEO0FBQy9ELEtBQUs7QUFDTCxJQUFJLHlCQUF5QixFQUFFLENBQUMsb0NBQW9DLENBQUM7QUFDckUsSUFBSSx3QkFBd0IsRUFBRTtBQUM5QixNQUFNLGtEQUFrRDtBQUN4RCxLQUFLO0FBQ0wsSUFBSSxXQUFXLEVBQUUsQ0FBQyxtQ0FBbUMsQ0FBQztBQUN0RCxJQUFJLGdCQUFnQixFQUFFLENBQUMsd0NBQXdDLENBQUM7QUFDaEUsSUFBSSxvQ0FBb0MsRUFBRTtBQUMxQyxNQUFNLDRGQUE0RjtBQUNsRyxLQUFLO0FBQ0wsSUFBSSxjQUFjLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQztBQUN0RCxJQUFJLDRCQUE0QixFQUFFO0FBQ2xDLE1BQU0sc0ZBQXNGO0FBQzVGLEtBQUs7QUFDTCxJQUFJLHNCQUFzQixFQUFFO0FBQzVCLE1BQU0sZ0VBQWdFO0FBQ3RFLEtBQUs7QUFDTCxJQUFJLGVBQWUsRUFBRSxDQUFDLHVDQUF1QyxDQUFDO0FBQzlELElBQUksd0JBQXdCLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztBQUNqRCxJQUFJLFVBQVUsRUFBRSxDQUFDLHVCQUF1QixDQUFDO0FBQ3pDLElBQUksV0FBVyxFQUFFLENBQUMsNkJBQTZCLENBQUM7QUFDaEQsSUFBSSxTQUFTLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQztBQUNsRCxJQUFJLGVBQWUsRUFBRSxDQUFDLHVDQUF1QyxDQUFDO0FBQzlELElBQUksbUNBQW1DLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQztBQUM3RSxJQUFJLGFBQWEsRUFBRSxDQUFDLHFDQUFxQyxDQUFDO0FBQzFELElBQUksZUFBZSxFQUFFLENBQUMsd0NBQXdDLENBQUM7QUFDL0QsSUFBSSxVQUFVLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztBQUNyQyxJQUFJLG9DQUFvQyxFQUFFO0FBQzFDLE1BQU0sc0RBQXNEO0FBQzVELEtBQUs7QUFDTCxJQUFJLGlCQUFpQixFQUFFO0FBQ3ZCLE1BQU0sd0RBQXdEO0FBQzlELEtBQUs7QUFDTCxJQUFJLFlBQVksRUFBRSxDQUFDLG9DQUFvQyxDQUFDO0FBQ3hELElBQUksaUJBQWlCLEVBQUUsQ0FBQywyQ0FBMkMsQ0FBQztBQUNwRSxJQUFJLFFBQVEsRUFBRSxDQUFDLGdDQUFnQyxDQUFDO0FBQ2hELElBQUksU0FBUyxFQUFFLENBQUMsaUNBQWlDLENBQUM7QUFDbEQsSUFBSSxxQkFBcUIsRUFBRTtBQUMzQixNQUFNLHNEQUFzRDtBQUM1RCxLQUFLO0FBQ0wsSUFBSSxZQUFZLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQztBQUNyRCxJQUFJLEtBQUssRUFBRSxDQUFDLG1DQUFtQyxDQUFDO0FBQ2hELElBQUksYUFBYSxFQUFFLENBQUMsMkNBQTJDLENBQUM7QUFDaEUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxrREFBa0QsQ0FBQztBQUNyRSxJQUFJLHdCQUF3QixFQUFFO0FBQzlCLE1BQU0sOEVBQThFO0FBQ3BGLEtBQUs7QUFDTCxJQUFJLDJCQUEyQixFQUFFO0FBQ2pDLE1BQU0sNkVBQTZFO0FBQ25GLE1BQU0sRUFBRTtBQUNSLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFO0FBQzNCLEtBQUs7QUFDTCxJQUFJLGtCQUFrQixFQUFFO0FBQ3hCLE1BQU0sdURBQXVEO0FBQzdELEtBQUs7QUFDTCxJQUFJLHlCQUF5QixFQUFFO0FBQy9CLE1BQU0sMkZBQTJGO0FBQ2pHLE1BQU0sRUFBRTtBQUNSLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFO0FBQy9CLEtBQUs7QUFDTCxJQUFJLDJCQUEyQixFQUFFO0FBQ2pDLE1BQU0sa0ZBQWtGO0FBQ3hGLEtBQUs7QUFDTCxJQUFJLDRCQUE0QixFQUFFO0FBQ2xDLE1BQU0sOEVBQThFO0FBQ3BGLE1BQU0sRUFBRTtBQUNSLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzVCLEtBQUs7QUFDTCxJQUFJLDRCQUE0QixFQUFFO0FBQ2xDLE1BQU0sOEVBQThFO0FBQ3BGLE1BQU0sRUFBRTtBQUNSLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzVCLEtBQUs7QUFDTCxJQUFJLFlBQVksRUFBRSxDQUFDLHFEQUFxRCxDQUFDO0FBQ3pFLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQztBQUMxRCxJQUFJLGlCQUFpQixFQUFFLENBQUMseUNBQXlDLENBQUM7QUFDbEUsSUFBSSx3QkFBd0IsRUFBRTtBQUM5QixNQUFNLHdFQUF3RTtBQUM5RSxLQUFLO0FBQ0wsSUFBSSx3QkFBd0IsRUFBRTtBQUM5QixNQUFNLDBFQUEwRTtBQUNoRixNQUFNLEVBQUU7QUFDUixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRTtBQUMzQixLQUFLO0FBQ0wsSUFBSSxzQkFBc0IsRUFBRTtBQUM1QixNQUFNLHdGQUF3RjtBQUM5RixNQUFNLEVBQUU7QUFDUixNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRTtBQUMvQixLQUFLO0FBQ0wsSUFBSSx5QkFBeUIsRUFBRTtBQUMvQixNQUFNLDJFQUEyRTtBQUNqRixNQUFNLEVBQUU7QUFDUixNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRTtBQUM1QixLQUFLO0FBQ0wsSUFBSSx5QkFBeUIsRUFBRTtBQUMvQixNQUFNLDJFQUEyRTtBQUNqRixNQUFNLEVBQUU7QUFDUixNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRTtBQUM1QixLQUFLO0FBQ0wsSUFBSSxlQUFlLEVBQUUsQ0FBQyxrREFBa0QsQ0FBQztBQUN6RSxJQUFJLFFBQVEsRUFBRSxDQUFDLHFDQUFxQyxDQUFDO0FBQ3JELElBQUksTUFBTSxFQUFFLENBQUMsNkJBQTZCLENBQUM7QUFDM0MsSUFBSSxzQkFBc0IsRUFBRTtBQUM1QixNQUFNLHdEQUF3RDtBQUM5RCxLQUFLO0FBQ0wsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLG1EQUFtRCxDQUFDO0FBQzlFLElBQUksNEJBQTRCLEVBQUU7QUFDbEMsTUFBTSx5R0FBeUc7QUFDL0csS0FBSztBQUNMLElBQUksK0JBQStCLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQztBQUN4RSxJQUFJLGdCQUFnQixFQUFFO0FBQ3RCLE1BQU0seURBQXlEO0FBQy9ELEtBQUs7QUFDTCxJQUFJLGdCQUFnQixFQUFFLENBQUMsdUNBQXVDLENBQUM7QUFDL0QsSUFBSSxpQ0FBaUMsRUFBRTtBQUN2QyxNQUFNLHdGQUF3RjtBQUM5RixLQUFLO0FBQ0wsSUFBSSxhQUFhLEVBQUUsQ0FBQyxtREFBbUQsQ0FBQztBQUN4RSxJQUFJLGtCQUFrQixFQUFFO0FBQ3hCLE1BQU0sd0RBQXdEO0FBQzlELEtBQUs7QUFDTCxJQUFJLGlCQUFpQixFQUFFLENBQUMsaURBQWlELENBQUM7QUFDMUUsSUFBSSwwQkFBMEIsRUFBRTtBQUNoQyxNQUFNLGlGQUFpRjtBQUN2RixNQUFNLEVBQUU7QUFDUixNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLDZCQUE2QixDQUFDLEVBQUU7QUFDM0QsS0FBSztBQUNMLElBQUksMkJBQTJCLEVBQUU7QUFDakMsTUFBTSxpRkFBaUY7QUFDdkYsS0FBSztBQUNMLElBQUksYUFBYSxFQUFFLENBQUMsNkNBQTZDLENBQUM7QUFDbEUsSUFBSSwwQkFBMEIsRUFBRTtBQUNoQyxNQUFNLG9EQUFvRDtBQUMxRCxLQUFLO0FBQ0wsSUFBSSxrQkFBa0IsRUFBRTtBQUN4QixNQUFNLHNFQUFzRTtBQUM1RSxNQUFNLEVBQUUsT0FBTyxFQUFFLDRCQUE0QixFQUFFO0FBQy9DLEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxNQUFNLEVBQUU7QUFDVixJQUFJLElBQUksRUFBRSxDQUFDLGtCQUFrQixDQUFDO0FBQzlCLElBQUksT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUM7QUFDcEMsSUFBSSxxQkFBcUIsRUFBRSxDQUFDLG9CQUFvQixDQUFDO0FBQ2pELElBQUksTUFBTSxFQUFFLENBQUMsb0JBQW9CLENBQUM7QUFDbEMsSUFBSSxLQUFLLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztBQUN2QyxJQUFJLE1BQU0sRUFBRSxDQUFDLG9CQUFvQixDQUFDO0FBQ2xDLElBQUksS0FBSyxFQUFFLENBQUMsbUJBQW1CLENBQUM7QUFDaEMsR0FBRztBQUNILEVBQUUsY0FBYyxFQUFFO0FBQ2xCLElBQUksUUFBUSxFQUFFO0FBQ2QsTUFBTSxpRUFBaUU7QUFDdkUsS0FBSztBQUNMLElBQUksdUJBQXVCLEVBQUU7QUFDN0IsTUFBTSxzREFBc0Q7QUFDNUQsS0FBSztBQUNMLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyx3Q0FBd0MsQ0FBQztBQUNoRSxJQUFJLGlCQUFpQixFQUFFLENBQUMsa0RBQWtELENBQUM7QUFDM0UsSUFBSSxxQkFBcUIsRUFBRTtBQUMzQixNQUFNLDJFQUEyRTtBQUNqRixLQUFLO0FBQ0wsSUFBSSxXQUFXLEVBQUU7QUFDakIsTUFBTSxtRUFBbUU7QUFDekUsS0FBSztBQUNMLEdBQUc7QUFDSCxFQUFFLGtCQUFrQixFQUFFO0FBQ3RCLElBQUksVUFBVSxFQUFFO0FBQ2hCLE1BQU0sZ0VBQWdFO0FBQ3RFLEtBQUs7QUFDTCxJQUFJLGdDQUFnQyxFQUFFO0FBQ3RDLE1BQU0sd0RBQXdEO0FBQzlELEtBQUs7QUFDTCxJQUFJLHdCQUF3QixFQUFFO0FBQzlCLE1BQU0sZ0RBQWdEO0FBQ3RELEtBQUs7QUFDTCxJQUFJLGtDQUFrQyxFQUFFO0FBQ3hDLE1BQU0sOERBQThEO0FBQ3BFLEtBQUs7QUFDTCxJQUFJLGlCQUFpQixFQUFFLENBQUMsMkJBQTJCLENBQUM7QUFDcEQsSUFBSSxxQkFBcUIsRUFBRTtBQUMzQixNQUFNLHlEQUF5RDtBQUMvRCxLQUFLO0FBQ0wsSUFBSSxvQkFBb0IsRUFBRSxDQUFDLGlCQUFpQixDQUFDO0FBQzdDLElBQUksMkJBQTJCLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQztBQUN4RSxJQUFJLHdCQUF3QixFQUFFLENBQUMsK0NBQStDLENBQUM7QUFDL0UsSUFBSSx3QkFBd0IsRUFBRTtBQUM5QixNQUFNLDJEQUEyRDtBQUNqRSxLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsS0FBSyxFQUFFO0FBQ1QsSUFBSSxpQ0FBaUMsRUFBRTtBQUN2QyxNQUFNLDBEQUEwRDtBQUNoRSxLQUFLO0FBQ0wsSUFBSSxrQ0FBa0MsRUFBRTtBQUN4QyxNQUFNLHlEQUF5RDtBQUMvRCxLQUFLO0FBQ0wsSUFBSSwrQkFBK0IsRUFBRTtBQUNyQyxNQUFNLHdEQUF3RDtBQUM5RCxLQUFLO0FBQ0wsSUFBSSwrQkFBK0IsRUFBRTtBQUNyQyxNQUFNLHlEQUF5RDtBQUMvRCxLQUFLO0FBQ0wsSUFBSSw0QkFBNEIsRUFBRTtBQUNsQyxNQUFNLHdEQUF3RDtBQUM5RCxLQUFLO0FBQ0wsSUFBSSxNQUFNLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztBQUN0QyxJQUFJLDRCQUE0QixFQUFFO0FBQ2xDLE1BQU0sNkVBQTZFO0FBQ25GLEtBQUs7QUFDTCxJQUFJLHFCQUFxQixFQUFFLENBQUMsZ0RBQWdELENBQUM7QUFDN0UsSUFBSSw0QkFBNEIsRUFBRTtBQUNsQyxNQUFNLGdHQUFnRztBQUN0RyxLQUFLO0FBQ0wsSUFBSSxxQkFBcUIsRUFBRTtBQUMzQixNQUFNLHNFQUFzRTtBQUM1RSxLQUFLO0FBQ0wsSUFBSSxXQUFXLEVBQUUsQ0FBQyxzQ0FBc0MsQ0FBQztBQUN6RCxJQUFJLFNBQVMsRUFBRSxDQUFDLG1DQUFtQyxDQUFDO0FBQ3BELElBQUkseUJBQXlCLEVBQUU7QUFDL0IsTUFBTSw2RkFBNkY7QUFDbkcsS0FBSztBQUNMLElBQUksa0JBQWtCLEVBQUU7QUFDeEIsTUFBTSxtRUFBbUU7QUFDekUsS0FBSztBQUNMLElBQUkseUJBQXlCLEVBQUU7QUFDL0IsTUFBTSwwREFBMEQ7QUFDaEUsS0FBSztBQUNMLElBQUksSUFBSSxFQUFFLENBQUMsdUJBQXVCLENBQUM7QUFDbkMsSUFBSSxjQUFjLEVBQUUsQ0FBQyx5Q0FBeUMsQ0FBQztBQUMvRCxJQUFJLDJCQUEyQixFQUFFO0FBQ2pDLE1BQU0sNEVBQTRFO0FBQ2xGLEtBQUs7QUFDTCxJQUFJLG9CQUFvQixFQUFFLENBQUMsK0NBQStDLENBQUM7QUFDM0UsSUFBSSx3QkFBd0IsRUFBRSxDQUFDLGlCQUFpQixDQUFDO0FBQ2pELElBQUksZ0JBQWdCLEVBQUUsQ0FBQywyQ0FBMkMsQ0FBQztBQUNuRSxJQUFJLDJCQUEyQixFQUFFO0FBQ2pDLE1BQU0sK0NBQStDO0FBQ3JELEtBQUs7QUFDTCxJQUFJLGlCQUFpQixFQUFFLENBQUMsNENBQTRDLENBQUM7QUFDckUsSUFBSSxjQUFjLEVBQUUsQ0FBQyx5Q0FBeUMsQ0FBQztBQUMvRCxJQUFJLDRCQUE0QixFQUFFO0FBQ2xDLE1BQU0sNkRBQTZEO0FBQ25FLEtBQUs7QUFDTCxJQUFJLGtCQUFrQixFQUFFO0FBQ3hCLE1BQU0sNERBQTREO0FBQ2xFLEtBQUs7QUFDTCxJQUFJLGVBQWUsRUFBRTtBQUNyQixNQUFNLDJEQUEyRDtBQUNqRSxLQUFLO0FBQ0wsSUFBSSw0QkFBNEIsRUFBRTtBQUNsQyxNQUFNLCtGQUErRjtBQUNyRyxLQUFLO0FBQ0wsSUFBSSxxQkFBcUIsRUFBRTtBQUMzQixNQUFNLHFFQUFxRTtBQUMzRSxLQUFLO0FBQ0wsSUFBSSxXQUFXLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQztBQUN4RCxHQUFHO0FBQ0gsRUFBRSxLQUFLLEVBQUU7QUFDVCxJQUFJLHdCQUF3QixFQUFFO0FBQzlCLE1BQU0sbUJBQW1CO0FBQ3pCLE1BQU0sRUFBRTtBQUNSLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsOEJBQThCLENBQUMsRUFBRTtBQUM1RCxLQUFLO0FBQ0wsSUFBSSw0QkFBNEIsRUFBRSxDQUFDLG1CQUFtQixDQUFDO0FBQ3ZELElBQUksb0NBQW9DLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQztBQUN4RSxJQUFJLEtBQUssRUFBRSxDQUFDLDZCQUE2QixDQUFDO0FBQzFDLElBQUksWUFBWSxFQUFFLENBQUMsNkJBQTZCLENBQUM7QUFDakQsSUFBSSxxQkFBcUIsRUFBRSxDQUFDLCtDQUErQyxDQUFDO0FBQzVFLElBQUksb0NBQW9DLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQztBQUM1RSxJQUFJLDRCQUE0QixFQUFFO0FBQ2xDLE1BQU0scUJBQXFCO0FBQzNCLE1BQU0sRUFBRTtBQUNSLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsa0NBQWtDLENBQUMsRUFBRTtBQUNoRSxLQUFLO0FBQ0wsSUFBSSxnQ0FBZ0MsRUFBRSxDQUFDLHFCQUFxQixDQUFDO0FBQzdELElBQUksa0NBQWtDLEVBQUU7QUFDeEMsTUFBTSxpQkFBaUI7QUFDdkIsTUFBTSxFQUFFO0FBQ1IsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSx3Q0FBd0MsQ0FBQyxFQUFFO0FBQ3RFLEtBQUs7QUFDTCxJQUFJLHNDQUFzQyxFQUFFLENBQUMsaUJBQWlCLENBQUM7QUFDL0QsSUFBSSx1Q0FBdUMsRUFBRSxDQUFDLDZCQUE2QixDQUFDO0FBQzVFLElBQUksMkJBQTJCLEVBQUU7QUFDakMsTUFBTSxxQkFBcUI7QUFDM0IsTUFBTSxFQUFFO0FBQ1IsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxpQ0FBaUMsQ0FBQyxFQUFFO0FBQy9ELEtBQUs7QUFDTCxJQUFJLCtCQUErQixFQUFFLENBQUMscUJBQXFCLENBQUM7QUFDNUQsSUFBSSw0QkFBNEIsRUFBRTtBQUNsQyxNQUFNLG9DQUFvQztBQUMxQyxNQUFNLEVBQUU7QUFDUixNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLGtDQUFrQyxDQUFDLEVBQUU7QUFDaEUsS0FBSztBQUNMLElBQUksZ0NBQWdDLEVBQUUsQ0FBQyxvQ0FBb0MsQ0FBQztBQUM1RSxJQUFJLGtDQUFrQyxFQUFFO0FBQ3hDLE1BQU0sNEJBQTRCO0FBQ2xDLE1BQU0sRUFBRTtBQUNSLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsd0NBQXdDLENBQUMsRUFBRTtBQUN0RSxLQUFLO0FBQ0wsSUFBSSxzQ0FBc0MsRUFBRSxDQUFDLDRCQUE0QixDQUFDO0FBQzFFLElBQUksdUNBQXVDLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztBQUM3RSxJQUFJLHVDQUF1QyxFQUFFO0FBQzdDLE1BQU0sb0RBQW9EO0FBQzFELEtBQUs7QUFDTCxJQUFJLE1BQU0sRUFBRSxDQUFDLGdDQUFnQyxDQUFDO0FBQzlDLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyxXQUFXLENBQUM7QUFDbkMsSUFBSSxhQUFhLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztBQUM1QyxJQUFJLGlCQUFpQixFQUFFLENBQUMsaUNBQWlDLENBQUM7QUFDMUQsSUFBSSx5QkFBeUIsRUFBRTtBQUMvQixNQUFNLGlDQUFpQztBQUN2QyxNQUFNLEVBQUU7QUFDUixNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLCtCQUErQixDQUFDLEVBQUU7QUFDN0QsS0FBSztBQUNMLElBQUksNkJBQTZCLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQztBQUN0RSxJQUFJLCtCQUErQixFQUFFO0FBQ3JDLE1BQU0seUJBQXlCO0FBQy9CLE1BQU0sRUFBRTtBQUNSLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUscUNBQXFDLENBQUMsRUFBRTtBQUNuRSxLQUFLO0FBQ0wsSUFBSSxtQ0FBbUMsRUFBRSxDQUFDLHlCQUF5QixDQUFDO0FBQ3BFLElBQUksb0NBQW9DLEVBQUU7QUFDMUMsTUFBTSxpREFBaUQ7QUFDdkQsS0FBSztBQUNMLElBQUksSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDO0FBQ3hCLElBQUksMEJBQTBCLEVBQUU7QUFDaEMsTUFBTSxrQkFBa0I7QUFDeEIsTUFBTSxFQUFFO0FBQ1IsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxnQ0FBZ0MsQ0FBQyxFQUFFO0FBQzlELEtBQUs7QUFDTCxJQUFJLDhCQUE4QixFQUFFLENBQUMsa0JBQWtCLENBQUM7QUFDeEQsSUFBSSwwQkFBMEIsRUFBRTtBQUNoQyxNQUFNLGtCQUFrQjtBQUN4QixNQUFNLEVBQUU7QUFDUixNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLGdDQUFnQyxDQUFDLEVBQUU7QUFDOUQsS0FBSztBQUNMLElBQUksOEJBQThCLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztBQUN4RCxJQUFJLDJCQUEyQixFQUFFO0FBQ2pDLE1BQU0scUJBQXFCO0FBQzNCLE1BQU0sRUFBRTtBQUNSLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsaUNBQWlDLENBQUMsRUFBRTtBQUMvRCxLQUFLO0FBQ0wsSUFBSSwrQkFBK0IsRUFBRSxDQUFDLHFCQUFxQixDQUFDO0FBQzVELElBQUksaUNBQWlDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztBQUM5RCxJQUFJLG9CQUFvQixFQUFFLENBQUMsaUNBQWlDLENBQUM7QUFDN0QsSUFBSSxvQkFBb0IsRUFBRSxDQUFDLGlDQUFpQyxDQUFDO0FBQzdELElBQUksMkJBQTJCLEVBQUU7QUFDakMsTUFBTSxvQkFBb0I7QUFDMUIsTUFBTSxFQUFFO0FBQ1IsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxpQ0FBaUMsQ0FBQyxFQUFFO0FBQy9ELEtBQUs7QUFDTCxJQUFJLCtCQUErQixFQUFFLENBQUMsb0JBQW9CLENBQUM7QUFDM0QsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLGdDQUFnQyxDQUFDO0FBQzFELElBQUksZ0NBQWdDLEVBQUU7QUFDdEMsTUFBTSx5QkFBeUI7QUFDL0IsTUFBTSxFQUFFO0FBQ1IsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxzQ0FBc0MsQ0FBQyxFQUFFO0FBQ3BFLEtBQUs7QUFDTCxJQUFJLG9DQUFvQyxFQUFFLENBQUMseUJBQXlCLENBQUM7QUFDckUsSUFBSSxxQkFBcUIsRUFBRSxDQUFDLDRCQUE0QixDQUFDO0FBQ3pELElBQUksaUNBQWlDLEVBQUU7QUFDdkMsTUFBTSxnQkFBZ0I7QUFDdEIsTUFBTSxFQUFFO0FBQ1IsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSx1Q0FBdUMsQ0FBQyxFQUFFO0FBQ3JFLEtBQUs7QUFDTCxJQUFJLHFDQUFxQyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7QUFDN0QsSUFBSSxzQ0FBc0MsRUFBRSxDQUFDLDJCQUEyQixDQUFDO0FBQ3pFLElBQUkseUJBQXlCLEVBQUUsQ0FBQyx1Q0FBdUMsQ0FBQztBQUN4RSxJQUFJLHNDQUFzQyxFQUFFLENBQUMsNEJBQTRCLENBQUM7QUFDMUUsSUFBSSx5QkFBeUIsRUFBRSxDQUFDLHdDQUF3QyxDQUFDO0FBQ3pFLElBQUkseUNBQXlDLEVBQUU7QUFDL0MsTUFBTSw4QkFBOEI7QUFDcEMsTUFBTSxFQUFFO0FBQ1IsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSwrQ0FBK0MsQ0FBQyxFQUFFO0FBQzdFLEtBQUs7QUFDTCxJQUFJLDZDQUE2QyxFQUFFO0FBQ25ELE1BQU0sOEJBQThCO0FBQ3BDLEtBQUs7QUFDTCxJQUFJLE9BQU8sRUFBRSxDQUFDLGdDQUFnQyxDQUFDO0FBQy9DLElBQUksUUFBUSxFQUFFLENBQUMsbUNBQW1DLENBQUM7QUFDbkQsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLGFBQWEsQ0FBQztBQUN4QyxHQUFHO0FBQ0gsQ0FBQyxDQUFDO0FBQ0YsSUFBSSxpQkFBaUIsR0FBRyxTQUFTOztBQ2o1RGpDLE1BQU0sa0JBQWtCLG1CQUFtQixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3JELEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDRyxpQkFBUyxDQUFDLEVBQUU7QUFDNUQsRUFBRSxLQUFLLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUNsRSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUNwRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQyxJQUFJLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU07QUFDMUMsTUFBTTtBQUNOLFFBQVEsTUFBTTtBQUNkLFFBQVEsR0FBRztBQUNYLE9BQU87QUFDUCxNQUFNLFFBQVE7QUFDZCxLQUFLLENBQUM7QUFDTixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDeEMsTUFBTSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxrQkFBa0IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQy9ELEtBQUs7QUFDTCxJQUFJLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFO0FBQ2xELE1BQU0sS0FBSztBQUNYLE1BQU0sVUFBVTtBQUNoQixNQUFNLGdCQUFnQjtBQUN0QixNQUFNLFdBQVc7QUFDakIsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0gsQ0FBQztBQUNELE1BQU0sT0FBTyxHQUFHO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFO0FBQzdCLElBQUksT0FBTyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3pELEdBQUc7QUFDSCxFQUFFLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDL0MsSUFBSSxPQUFPO0FBQ1gsTUFBTSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDO0FBQ3pDO0FBQ0EsTUFBTSxZQUFZLEVBQUUsSUFBSTtBQUN4QixNQUFNLFFBQVEsRUFBRSxJQUFJO0FBQ3BCLE1BQU0sVUFBVSxFQUFFLElBQUk7QUFDdEIsS0FBSyxDQUFDO0FBQ04sR0FBRztBQUNILEVBQUUsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFO0FBQ2pELElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNoRSxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSCxFQUFFLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQ3JDLElBQUksT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3BDLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNILEVBQUUsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDckIsSUFBSSxPQUFPLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNyRCxHQUFHO0FBQ0gsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7QUFDakMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzVDLEdBQUc7QUFDSCxFQUFFLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFO0FBQzdDLElBQUksSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDM0IsTUFBTSxPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMvQixLQUFLO0FBQ0wsSUFBSSxNQUFNLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2pFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQixNQUFNLE9BQU8sS0FBSyxDQUFDLENBQUM7QUFDcEIsS0FBSztBQUNMLElBQUksTUFBTSxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUNyRCxJQUFJLElBQUksV0FBVyxFQUFFO0FBQ3JCLE1BQU0sS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLFFBQVE7QUFDbEMsUUFBUSxPQUFPO0FBQ2YsUUFBUSxLQUFLO0FBQ2IsUUFBUSxVQUFVO0FBQ2xCLFFBQVEsZ0JBQWdCO0FBQ3hCLFFBQVEsV0FBVztBQUNuQixPQUFPLENBQUM7QUFDUixLQUFLLE1BQU07QUFDWCxNQUFNLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3JFLEtBQUs7QUFDTCxJQUFJLE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzdCLEdBQUc7QUFDSCxDQUFDLENBQUM7QUFDRixTQUFTLGtCQUFrQixDQUFDLE9BQU8sRUFBRTtBQUNyQyxFQUFFLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUN4QixFQUFFLEtBQUssTUFBTSxLQUFLLElBQUksa0JBQWtCLENBQUMsSUFBSSxFQUFFLEVBQUU7QUFDakQsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMxRSxHQUFHO0FBQ0gsRUFBRSxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBQ0QsU0FBUyxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRTtBQUNyRSxFQUFFLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakUsRUFBRSxTQUFTLGVBQWUsQ0FBQyxHQUFHLElBQUksRUFBRTtBQUNwQyxJQUFJLElBQUksT0FBTyxHQUFHLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM5RCxJQUFJLElBQUksV0FBVyxDQUFDLFNBQVMsRUFBRTtBQUMvQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUU7QUFDM0MsUUFBUSxJQUFJLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7QUFDNUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ3ZDLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsTUFBTSxPQUFPLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzFDLEtBQUs7QUFDTCxJQUFJLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRTtBQUM3QixNQUFNLE1BQU0sQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztBQUM1RCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSTtBQUN0QixRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLCtCQUErQixFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLEVBQUUsQ0FBQztBQUNyRyxPQUFPLENBQUM7QUFDUixLQUFLO0FBQ0wsSUFBSSxJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDaEMsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDL0MsS0FBSztBQUNMLElBQUksSUFBSSxXQUFXLENBQUMsaUJBQWlCLEVBQUU7QUFDdkMsTUFBTSxNQUFNLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDbkUsTUFBTSxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU87QUFDaEQsUUFBUSxXQUFXLENBQUMsaUJBQWlCO0FBQ3JDLE9BQU8sRUFBRTtBQUNULFFBQVEsSUFBSSxJQUFJLElBQUksUUFBUSxFQUFFO0FBQzlCLFVBQVUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJO0FBQzFCLFlBQVksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLHVDQUF1QyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDO0FBQzlHLFdBQVcsQ0FBQztBQUNaLFVBQVUsSUFBSSxFQUFFLEtBQUssSUFBSSxRQUFRLENBQUMsRUFBRTtBQUNwQyxZQUFZLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0MsV0FBVztBQUNYLFVBQVUsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEMsU0FBUztBQUNULE9BQU87QUFDUCxNQUFNLE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0MsS0FBSztBQUNMLElBQUksT0FBTyxtQkFBbUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3hDLEdBQUc7QUFDSCxFQUFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUM3RDs7QUNoSEEsU0FBUyx5QkFBeUIsQ0FBQyxPQUFPLEVBQUU7QUFDNUMsRUFBRSxNQUFNLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMxQyxFQUFFLE9BQU87QUFDVCxJQUFJLEdBQUcsR0FBRztBQUNWLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixHQUFHLENBQUM7QUFDSixDQUFDO0FBQ0QseUJBQXlCLENBQUMsT0FBTyxHQUFHSCxTQUFPOztBQ2hCM0MsTUFBTSxPQUFPLEdBQUcsUUFBUTs7QUNPeEIsTUFBTSxPQUFPLEdBQUdJLFNBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLHlCQUF5QixFQUFFLFlBQVksQ0FBQyxDQUFDLFFBQVE7QUFDekYsRUFBRTtBQUNGLElBQUksU0FBUyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDM0MsR0FBRztBQUNILENBQUM7O0FDUkQsTUFBTWprQixPQUFLLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDdEMsU0FBUyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQ2pELElBQUksT0FBT00sV0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxhQUFhO0FBQ3hELFFBQVEsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3JCLFlBQVlOLE9BQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxZQUFZLE9BQU87QUFDbkIsU0FBUztBQUNULFFBQVEsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsTUFBTSxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RyxLQUFLLENBQUMsQ0FBQztBQUNQOztBQ05BLE1BQU1BLE9BQUssR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0IsTUFBTSxjQUFjLFNBQVMsT0FBTyxDQUFDO0FBQzVDLElBQUksV0FBVyxHQUFHO0FBQ2xCLFFBQVEsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHK0MsUUFBYSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUQsUUFBUSxJQUFJLENBQUMsY0FBYyxHQUFHQSxRQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDM0QsS0FBSztBQUNMLElBQUksT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFO0FBQ3JELFFBQVEsT0FBT3pDLFdBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsYUFBYTtBQUM1RCxZQUFZLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3pFLFlBQVksS0FBSyxNQUFNLGNBQWMsSUFBSSxTQUFTLEVBQUU7QUFDcEQsZ0JBQWdCLE1BQU0sTUFBTSxHQUFHOEIsV0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQzNGLGdCQUFnQnBDLE9BQUssQ0FBQyxDQUFDLGtCQUFrQixFQUFFbUQsV0FBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUVELFlBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RyxnQkFBZ0IsTUFBTSxpQkFBaUIsQ0FBQ2QsV0FBSSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsRUFBRTtBQUN0RSxvQkFBb0IsT0FBTztBQUMzQixpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CLGFBQWE7QUFDYixTQUFTLENBQUMsQ0FBQztBQUNYLEtBQUs7QUFDTCxJQUFJLE9BQU8sR0FBRztBQUNkLFFBQVEsT0FBTzlCLFdBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsYUFBYTtBQUM1RCxZQUFZLE1BQU0sY0FBYyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3JGLFlBQVksTUFBTSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDckMsU0FBUyxDQUFDLENBQUM7QUFDWCxLQUFLO0FBQ0wsQ0FBQztBQUNELGNBQWMsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUNyQyxJQUFJLFdBQVcsRUFBRSxvQ0FBb0M7QUFDckQsQ0FBQyxDQUFDLENBQUM7QUFDSCxjQUFjLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQzs7QUN6QnBDLE1BQU1OLE9BQUssR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDbEMsTUFBTSxpQkFBaUIsU0FBUyxPQUFPLENBQUM7QUFDL0MsSUFBSSxXQUFXLEdBQUc7QUFDbEIsUUFBUSxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcrQyxRQUFhLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxRCxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUdBLFFBQWEsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDaEUsUUFBUSxJQUFJLENBQUMsY0FBYyxHQUFHQSxRQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDM0QsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHb0QsU0FBYyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzRCxRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUdBLFNBQWMsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN4RSxRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUdwRCxRQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUNoRSxRQUFRLElBQUksQ0FBQyxpQkFBaUIsR0FBR0EsUUFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDbEUsS0FBSztBQUNMLElBQUksT0FBTyxHQUFHO0FBQ2QsUUFBUSxPQUFPekMsV0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxhQUFhO0FBQzVELFlBQVksTUFBTSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxHQUFHLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNwSSxZQUFZTixPQUFLLENBQUMsQ0FBQyxnQ0FBZ0MsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RSxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ2hDLGdCQUFnQixNQUFNLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUN6RixnQkFBZ0IsTUFBTSxpQkFBaUIsQ0FBQyxlQUFlLEVBQUU7QUFDekQsb0JBQW9CLG9CQUFvQixFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLO0FBQ3pFLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNwRix3QkFBd0IsT0FBTyxHQUFHLENBQUM7QUFDbkMscUJBQXFCLEVBQUUsRUFBRSxDQUFDO0FBQzFCLGlCQUFpQixDQUFDLENBQUM7QUFDbkIsYUFBYTtBQUNiLFlBQVksTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUI7QUFDNUUsa0JBQWtCLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDO0FBQzlELGtCQUFrQixNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ25FLFlBQVksS0FBSyxNQUFNLGNBQWMsSUFBSSxTQUFTLEVBQUU7QUFDcEQsZ0JBQWdCLE1BQU0sTUFBTSxHQUFHb0MsV0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JHLGdCQUFnQixNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hGLGdCQUFnQixNQUFNLE9BQU8sR0FBR0EsV0FBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN2RCxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDcEMsb0JBQW9CLElBQUksQ0FBQ3dFLHVCQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDOUMsd0JBQXdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUxRCxZQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7QUFDdkYsd0JBQXdCLFNBQVM7QUFDakMscUJBQXFCO0FBQ3JCLG9CQUFvQixNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQ3hELHdCQUF3QixHQUFHLEVBQUUsTUFBTTtBQUNuQyx3QkFBd0IsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO0FBQ3hDLHFCQUFxQixDQUFDLENBQUM7QUFDdkIsb0JBQW9CLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUU7QUFDOUQsd0JBQXdCbEQsT0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFbUQsV0FBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxzQkFBc0IsRUFBRUEsV0FBaUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNySSx3QkFBd0IsSUFBSTtBQUM1Qiw0QkFBNEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQjtBQUNwRSxrQ0FBa0MsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztBQUNoRSxrQ0FBa0MsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO0FBQ3ZFLG9DQUFvQyxJQUFJLEVBQUUsSUFBSTtBQUM5QyxvQ0FBb0MsS0FBSyxFQUFFLEtBQUs7QUFDaEQsb0NBQW9DLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztBQUNwRCxpQ0FBaUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDNUMsNEJBQTRCLE1BQU0sWUFBWSxHQUFHK2dCLHFCQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkUsNEJBQTRCLE1BQU0sU0FBUyxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztBQUNyRixnQ0FBZ0MsS0FBSyxFQUFFLEtBQUs7QUFDNUMsZ0NBQWdDLElBQUksRUFBRSxJQUFJO0FBQzFDLGdDQUFnQyxJQUFJLEVBQUUsUUFBUTtBQUM5QyxnQ0FBZ0MsVUFBVSxFQUFFLFNBQVM7QUFDckQsZ0NBQWdDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDNUQsZ0NBQWdDLE9BQU8sRUFBRTtBQUN6QyxvQ0FBb0MsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLElBQUk7QUFDdkUsb0NBQW9DLGNBQWMsRUFBRSwwQkFBMEI7QUFDOUUsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQyxPQUFPLENBQUM7QUFDbEUsNkJBQTZCLENBQUMsQ0FBQztBQUMvQiw0QkFBNEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU5ZCxLQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztBQUNuRiw0QkFBNEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsRUFBRStkLFVBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25ILHlCQUF5QjtBQUN6Qix3QkFBd0IsT0FBTyxDQUFDLEVBQUU7QUFDbEMsNEJBQTRCbmtCLE9BQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdILDRCQUE0QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixTQUFTLENBQUMsQ0FBQztBQUNYLEtBQUs7QUFDTCxJQUFJLGVBQWUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQzFDLFFBQVEsT0FBT00sV0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxhQUFhO0FBQzVELFlBQVksSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO0FBQ3BDLGdCQUFnQixPQUFPO0FBQ3ZCLG9CQUFvQixLQUFLLEVBQUUsSUFBSTtBQUMvQixvQkFBb0IsSUFBSSxFQUFFLElBQUk7QUFDOUIsb0JBQW9CLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFO0FBQ3JFLGlCQUFpQixDQUFDO0FBQ2xCLGFBQWE7QUFDYixZQUFZLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ25HLFlBQVksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNqQyxnQkFBZ0IsT0FBTztBQUN2QixvQkFBb0IsS0FBSyxFQUFFLElBQUk7QUFDL0Isb0JBQW9CLElBQUksRUFBRSxJQUFJO0FBQzlCLG9CQUFvQixPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtBQUNyRSxpQkFBaUIsQ0FBQztBQUNsQixhQUFhO0FBQ2IsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNoQyxnQkFBZ0IsSUFBSTtBQUNwQixvQkFBb0IsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztBQUN0RCx3QkFBd0IsS0FBSztBQUM3Qix3QkFBd0IsSUFBSTtBQUM1Qix3QkFBd0IsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHO0FBQzdDLHdCQUF3QixJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWE7QUFDaEQsd0JBQXdCLFVBQVUsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztBQUM3RCw0QkFBNEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDcEQsNEJBQTRCLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0FBQ2xELHFCQUFxQixDQUFDLENBQUM7QUFDdkIsaUJBQWlCO0FBQ2pCLGdCQUFnQixPQUFPLENBQUMsRUFBRTtBQUMxQixvQkFBb0JOLE9BQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RyxvQkFBb0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQyxpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFlBQVksT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQ3JELFNBQVMsQ0FBQyxDQUFDO0FBQ1gsS0FBSztBQUNMLElBQUksV0FBVyxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUU7QUFDdEMsUUFBUSxPQUFPTSxXQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLGFBQWE7QUFDNUQsWUFBWSxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLHdCQUF3QixDQUFDO0FBQ3JFLGlCQUFpQixRQUFRLENBQUMsTUFBTSxDQUFDO0FBQ2pDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQztBQUN4QixZQUFZLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDdEQsWUFBWSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7QUFDcEMsZ0JBQWdCLE9BQU87QUFDdkIsb0JBQW9CLEtBQUssRUFBRSxJQUFJO0FBQy9CLG9CQUFvQixJQUFJLEVBQUUsSUFBSTtBQUM5QixvQkFBb0IsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFDckUsaUJBQWlCLENBQUM7QUFDbEIsYUFBYTtBQUNiLFlBQVlOLE9BQUssQ0FBQyxDQUFDLG1CQUFtQixFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELFlBQVksTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0QsWUFBWSxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQztBQUN4QyxnQkFBZ0IsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWTtBQUM5QyxhQUFhLENBQUMsQ0FBQztBQUNmLFlBQVksSUFBSSxPQUFPLENBQUM7QUFDeEIsWUFBWSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssT0FBTyxFQUFFO0FBQzNDLGdCQUFnQixNQUFNLGlCQUFpQixHQUFHLFVBQVU7QUFDcEQscUJBQXFCLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDaEMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0MscUJBQXFCLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEtBQUssSUFBSSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7QUFDbEUscUJBQXFCLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JELHFCQUFxQixHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hDLGdCQUFnQixPQUFPLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUM7QUFDNUYsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDOUIsb0JBQW9CLE1BQU0sSUFBSSxTQUFTLENBQUMsQ0FBQyw2QkFBNkIsRUFBRSxXQUFXLENBQUMsd0JBQXdCLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVILGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsaUJBQWlCO0FBQ2pCLGdCQUFnQixPQUFPLEdBQUc7QUFDMUIsb0JBQW9CLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN0QyxvQkFBb0IsT0FBTztBQUMzQixvQkFBb0IsSUFBSSxFQUFFLFdBQVc7QUFDckMsaUJBQWlCLENBQUM7QUFDbEIsYUFBYTtBQUNiLFlBQVksT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQ3JELFNBQVMsQ0FBQyxDQUFDO0FBQ1gsS0FBSztBQUNMLElBQUksUUFBUSxDQUFDLEdBQUcsRUFBRTtBQUNsQixRQUFRLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEMsUUFBUSxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDdkMsUUFBUSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLFFBQVEsT0FBTztBQUNmLFlBQVksSUFBSTtBQUNoQixZQUFZLE9BQU87QUFDbkIsWUFBWSxHQUFHO0FBQ2YsU0FBUyxDQUFDO0FBQ1YsS0FBSztBQUNMLENBQUM7QUFDRCxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUN4QyxJQUFJLFdBQVcsRUFBRSxnRUFBZ0U7QUFDakYsQ0FBQyxDQUFDLENBQUM7QUFDSCxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDOztBQzVLMUMsTUFBTUEsT0FBSyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM5QixNQUFNLGFBQWEsU0FBUyxPQUFPLENBQUM7QUFDM0MsSUFBSSxXQUFXLEdBQUc7QUFDbEIsUUFBUSxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcrQyxRQUFhLENBQUMsSUFBSSxFQUFFO0FBQ3hDLFlBQVksUUFBUSxFQUFFLEtBQUs7QUFDM0IsWUFBWSxXQUFXLEVBQUUsNkJBQTZCO0FBQ3RELFNBQVMsQ0FBQyxDQUFDO0FBQ1gsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHQSxRQUFhLENBQUMsYUFBYSxFQUFFO0FBQ3JELFlBQVksUUFBUSxFQUFFLEtBQUs7QUFDM0IsWUFBWSxXQUFXLEVBQUUseUJBQXlCO0FBQ2xELFNBQVMsQ0FBQyxDQUFDO0FBQ1gsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHQSxRQUFhLENBQUMsY0FBYyxFQUFFO0FBQ3hELFlBQVksUUFBUSxFQUFFLEtBQUs7QUFDM0IsWUFBWSxXQUFXLEVBQUUsK0JBQStCO0FBQ3hELFNBQVMsQ0FBQyxDQUFDO0FBQ1gsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHQSxRQUFhLENBQUMsa0JBQWtCLEVBQUU7QUFDN0QsWUFBWSxRQUFRLEVBQUUsS0FBSztBQUMzQixZQUFZLFdBQVcsRUFBRSxnQ0FBZ0M7QUFDekQsU0FBUyxDQUFDLENBQUM7QUFDWCxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUdBLFFBQWEsQ0FBQztBQUNqQyxZQUFZLFFBQVEsRUFBRSxLQUFLO0FBQzNCLFNBQVMsQ0FBQyxDQUFDO0FBQ1gsS0FBSztBQUNMLElBQUksT0FBTyxHQUFHO0FBQ2QsUUFBUSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDL0IsUUFBUSxPQUFPekMsV0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxhQUFhO0FBQzVELFlBQVksTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDdkYsWUFBWSxNQUFNLFdBQVcsR0FBRyxNQUFNLGFBQWEsQ0FBQzhCLFdBQUksQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkYsWUFBWSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzVELFlBQVksTUFBTSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUNsRyxnQkFBZ0IsSUFBSSxFQUFFLE1BQU07QUFDNUIsZ0JBQWdCLElBQUksRUFBRSxPQUFPO0FBQzdCLGdCQUFnQixNQUFNLEVBQUVnaUIsR0FBUyxDQUFDLDZCQUE2QixDQUFDO0FBQ2hFLGFBQWEsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUNyQixZQUFZLE1BQU0sUUFBUSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDMUcsZ0JBQWdCLElBQUksRUFBRSxXQUFXO0FBQ2pDLGdCQUFnQixJQUFJLEVBQUUsT0FBTztBQUM3QixnQkFBZ0IsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLGFBQWEsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzdCLFlBQVlwa0IsT0FBSyxDQUFDLHlCQUF5QixFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM3RCxZQUFZLGVBQWUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLFlBQVksZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO0FBQ2pELFlBQVksTUFBTSxVQUFVLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUM5RyxnQkFBZ0IsSUFBSSxFQUFFLFlBQVk7QUFDbEMsZ0JBQWdCLElBQUksRUFBRSxPQUFPO0FBQzdCLGdCQUFnQixNQUFNLEVBQUVva0IsR0FBUyxDQUFDLHNCQUFzQixDQUFDO0FBQ3pELGFBQWEsQ0FBQyxFQUFFLFVBQVUsQ0FBQztBQUMzQixZQUFZLElBQUksVUFBVSxFQUFFO0FBQzVCLGdCQUFnQixlQUFlLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUN4RCxhQUFhO0FBQ2IsWUFBWSxNQUFNLFdBQVcsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsTUFBTSxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQ2hILGdCQUFnQixJQUFJLEVBQUUsYUFBYTtBQUNuQyxnQkFBZ0IsSUFBSSxFQUFFLE9BQU87QUFDN0IsZ0JBQWdCLE1BQU0sRUFBRUEsR0FBUyxDQUFDLHNCQUFzQixDQUFDO0FBQ3pELGFBQWEsQ0FBQyxFQUFFLFdBQVcsQ0FBQztBQUM1QixZQUFZLElBQUksV0FBVyxFQUFFO0FBQzdCLGdCQUFnQixlQUFlLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUMxRCxhQUFhO0FBQ2IsWUFBWSxNQUFNLGNBQWMsQ0FBQ2hpQixXQUFJLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RHLFlBQVksTUFBTSxFQUFFLEdBQUcsTUFBTSxhQUFhLENBQUNBLFdBQUksQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNoRyxZQUFZLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QyxZQUFZLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM3QyxZQUFZLE1BQU0sY0FBYyxDQUFDQSxXQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUM3RixnQkFBZ0IsU0FBUyxFQUFFLElBQUk7QUFDL0IsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUNoQixZQUFZLElBQUksV0FBVyxHQUFHLE1BQU0sYUFBYSxDQUFDQSxXQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ25GLFlBQVksV0FBVyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEcsWUFBWSxNQUFNLGNBQWMsQ0FBQ0EsV0FBSSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN2RSxZQUFZLE1BQU0sS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDcEQsU0FBUyxDQUFDLENBQUM7QUFDWCxLQUFLO0FBQ0wsQ0FBQztBQUNELGFBQWEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDOztBQ3pFbEMsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pDLE1BQU0sZ0JBQWdCLFNBQVMsT0FBTyxDQUFDO0FBQzlDLElBQUksV0FBVyxHQUFHO0FBQ2xCLFFBQVEsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHVyxRQUFhLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ2hFLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBR0EsUUFBYSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwRCxRQUFRLElBQUksQ0FBQyxjQUFjLEdBQUdBLFFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMzRCxRQUFRLElBQUksQ0FBQyxjQUFjLEdBQUc7QUFDOUIsWUFBWSxNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxLQUFLO0FBQzNDLGdCQUFnQixNQUFNLE9BQU8sR0FBR1gsV0FBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBQ3BHLGdCQUFnQixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLQSxXQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlFLGdCQUFnQmlpQixzQkFBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNoRixnQkFBZ0IsT0FBTyxPQUFPLENBQUM7QUFDL0IsYUFBYTtBQUNiLFNBQVMsQ0FBQztBQUNWLEtBQUs7QUFDTCxJQUFJLE9BQU8sR0FBRztBQUNkLFFBQVEsSUFBSSxFQUFFLENBQUM7QUFDZixRQUFRLE9BQU8vakIsV0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxhQUFhO0FBQzVELFlBQVksTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ2pGLFlBQVksTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsQ0FBQztBQUNwSCxZQUFZLElBQUksQ0FBQyxjQUFjLEVBQUU7QUFDakMsZ0JBQWdCLE1BQU0sSUFBSSxTQUFTLENBQUMsQ0FBQywrQkFBK0IsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztBQUNoSCxhQUFhO0FBQ2IsWUFBWSxNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzNLLFlBQVksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUMzQixnQkFBZ0IsTUFBTSxJQUFJLFNBQVMsQ0FBQyxDQUFDLCtCQUErQixFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBQzFHLGFBQWE7QUFDYixZQUFZLEtBQUssQ0FBQyxDQUFDLHVDQUF1QyxFQUFFNEMsWUFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkcsWUFBWSxNQUFNLGFBQWEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUNkLFdBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlHLFlBQVksTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRixZQUFZLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDMUMsZ0JBQWdCLE1BQU0sSUFBSSxTQUFTLENBQUMsQ0FBQyxrQ0FBa0MsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFHLGFBQWE7QUFDYixZQUFZLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN4RixZQUFZLEtBQUssQ0FBQyxDQUFDLDJCQUEyQixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCxTQUFTLENBQUMsQ0FBQztBQUNYLEtBQUs7QUFDTCxDQUFDO0FBQ0QsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDdkMsSUFBSSxXQUFXLEVBQUUsOENBQThDO0FBQy9ELENBQUMsQ0FBQyxDQUFDO0FBQ0gsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQzs7QUN2Q3hDLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3BCLElBQUksVUFBVSxFQUFFLE1BQU07QUFDdEIsSUFBSSxhQUFhLEVBQUVuSSxTQUFPO0FBQzFCLENBQUMsQ0FBQyxDQUFDO0FBQ0gsR0FBRyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQy9CLEdBQUcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDM0IsR0FBRyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ2xDLEdBQUcsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUNoQyxHQUFHLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzdCLEdBQUcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUMvQixHQUFHLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDaEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM1QixHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzFCLEdBQUc7QUFDSCxLQUFLLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDdEUsS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUs7QUFDdEIsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pCLENBQUMsQ0FBQztBQUNGLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLO0FBQ2xCLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsQ0FBQyxDQUFDOztBQ2pDRixNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUNuRCxTQUFTLFlBQVksQ0FBQyxLQUFLLEVBQUU7QUFDN0IsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJO0FBQ3RCLFFBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RCLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUztBQUMzQixRQUFRLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMzQixJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztBQUNwQixRQUFRLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUNqQyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtBQUNqQyxRQUFRLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUM1QixRQUFRLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxQixJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBYUQsU0FBUyxVQUFVLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtBQUNoQyxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbkIsSUFBSSxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDakMsUUFBUSxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5SCxLQUFLO0FBQ0wsU0FBUyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDeEMsUUFBUSxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVILEtBQUs7QUFDTCxTQUFTO0FBQ1QsUUFBUSxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUksS0FBSztBQUNMLENBQUM7QUFhRDtBQUNBLFNBQVMsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUU7QUFDaEQsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZILElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQU1ELFNBQVMsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7QUFDckMsSUFBSSxPQUFPLENBQUMsQ0FBQyxLQUFLO0FBQ2xCLFFBQVEsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixRQUFRLE9BQU8sY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2hFLEtBQUssQ0FBQztBQUNOLENBQUM7QUFZRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsU0FBUyxHQUFHO0FBQ3JCLElBQUksT0FBTyxhQUFhLENBQUM7QUFDekIsUUFBUSxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxLQUFLO0FBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQVVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxRQUFRLEdBQUc7QUFDcEIsSUFBSSxPQUFPLGFBQWEsQ0FBQztBQUN6QixRQUFRLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEtBQUs7QUFDaEMsWUFBWSxJQUFJLE9BQU8sS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3pDLGdCQUFnQixPQUFPLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRixZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUE4TEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUMzQyxJQUFJLE9BQU8sYUFBYSxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssS0FBSztBQUNoQyxZQUFZLElBQUksRUFBRSxDQUFDO0FBQ25CLFlBQVksTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBQ3hDLFlBQVksSUFBSSxPQUFPLEtBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE9BQU8sU0FBUyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDL0UsZ0JBQWdCLElBQUksUUFBUSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUM1RyxvQkFBb0IsSUFBSSxRQUFRLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztBQUM3Ryx3QkFBd0IsT0FBTyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO0FBQzNFLG9CQUFvQixLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNuRCxpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ3JDLGdCQUFnQixPQUFPLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRixZQUFZLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztBQUM3QixZQUFZLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDMUQsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDMUosZ0JBQWdCLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRTtBQUNwRyxvQkFBb0IsTUFBTTtBQUMxQixpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFlBQVksSUFBSSxLQUFLLEtBQUssYUFBYTtBQUN2QyxnQkFBZ0IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5SCxZQUFZLE9BQU8sS0FBSyxDQUFDO0FBQ3pCLFNBQVM7QUFDVCxLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFxSEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxFQUFFO0FBQzNDLElBQUksTUFBTSxlQUFlLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4RCxJQUFJLE9BQU8sYUFBYSxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssS0FBSztBQUNoQyxZQUFZLElBQUksRUFBRSxDQUFDO0FBQ25CLFlBQVksSUFBSSxPQUFPLEtBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE9BQU8sU0FBUyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDL0UsZ0JBQWdCLElBQUksUUFBUSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUM1RyxvQkFBb0IsSUFBSSxRQUFRLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztBQUM3Ryx3QkFBd0IsT0FBTyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO0FBQzNFLG9CQUFvQixLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNuRCxvQkFBb0IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsSSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ3JDLGdCQUFnQixPQUFPLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RixZQUFZLElBQUksS0FBSyxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN6RSxZQUFZLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDN0UsZ0JBQWdCLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDN0osZ0JBQWdCLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRTtBQUNwRyxvQkFBb0IsTUFBTTtBQUMxQixpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFlBQVksT0FBTyxLQUFLLENBQUM7QUFDekIsU0FBUztBQUNULEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEdBQUcsSUFBSSxHQUFHLEdBQUcsRUFBRSxFQUFFO0FBQ3hELElBQUksTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxDQUFDLEdBQUcsT0FBTyxHQUFHLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNySCxJQUFJLE9BQU8sYUFBYSxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssS0FBSztBQUNoQyxZQUFZLElBQUksRUFBRSxDQUFDO0FBQ25CLFlBQVksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3RDLGdCQUFnQixJQUFJLFFBQVEsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDNUcsb0JBQW9CLElBQUksUUFBUSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDN0csd0JBQXdCLE9BQU8sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQztBQUMzRSxvQkFBb0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDbEgsd0JBQXdCLE9BQU8sS0FBSyxDQUFDO0FBQ3JDLG9CQUFvQixLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0RCxvQkFBb0IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsSSxvQkFBb0IsT0FBTyxJQUFJLENBQUM7QUFDaEMsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixZQUFZLElBQUksT0FBTyxLQUFLLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSTtBQUMzRCxnQkFBZ0IsT0FBTyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsd0JBQXdCLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0YsWUFBWSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDLFlBQVksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFlBQVksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQzVJLGdCQUFnQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsZ0JBQWdCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QyxnQkFBZ0IsSUFBSSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRTtBQUNsRSxvQkFBb0IsS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0FBQ3RJLG9CQUFvQixTQUFTO0FBQzdCLGlCQUFpQjtBQUNqQixnQkFBZ0IsSUFBSSxPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRTtBQUM5RCxvQkFBb0IsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNsQyxvQkFBb0IsU0FBUztBQUM3QixpQkFBaUI7QUFDakIsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUM5SSxvQkFBb0IsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNsQyxvQkFBb0IsU0FBUztBQUM3QixpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFlBQVksT0FBTyxLQUFLLENBQUM7QUFDekIsU0FBUztBQUNULEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLFNBQVMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFO0FBQ2pDLElBQUksT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFrSUQ7QUFDQSxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUU7QUFDMUIsSUFBSSxPQUFPLE1BQU07QUFDakIsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQixLQUFLLENBQUM7QUFDTixDQUFDO0FBQ0QsU0FBUyxhQUFhLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNqQyxJQUFJLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDN0IsQ0FBQztBQXFIRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsY0FBYyxDQUFDLE1BQU0sRUFBRTtBQUNoQyxJQUFJLE9BQU8sYUFBYSxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssS0FBSztBQUNoQyxZQUFZLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQztBQUMxQyxnQkFBZ0IsT0FBTyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMscUNBQXFDLEVBQUUsTUFBTSxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekgsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixTQUFTO0FBQ1QsS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBZ1BEO0FBQ0EsU0FBUyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsU0FBUyxFQUFFO0FBQ3JDLElBQUksTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RCxVQUFVLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsVUFBVSxTQUFTLENBQUM7QUFDcEIsSUFBSSxPQUFPLGFBQWEsQ0FBQztBQUN6QixRQUFRLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEtBQUs7QUFDaEMsWUFBWSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxNQUFNLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUM3QyxZQUFZLE1BQU0sV0FBVyxHQUFHLFFBQVEsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO0FBQ3RILGtCQUFrQixjQUFjLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDL0QsWUFBWSxNQUFNLFlBQVksR0FBRyxRQUFRLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztBQUN2SCxrQkFBa0IsRUFBRSxHQUFHLFNBQVMsQ0FBQztBQUNqQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0FBQ3pILGdCQUFnQixPQUFPLEtBQUssQ0FBQztBQUM3QixZQUFZLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUMvQixZQUFZLElBQUksT0FBTyxZQUFZLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDbkQsZ0JBQWdCLEtBQUssTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLFlBQVk7QUFDdkQsb0JBQW9CLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUM3QyxZQUFZLElBQUk7QUFDaEIsZ0JBQWdCLElBQUksUUFBUSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUM1RyxvQkFBb0IsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRTtBQUNqRCx3QkFBd0IsSUFBSSxRQUFRLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztBQUNqSCw0QkFBNEIsT0FBTyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO0FBQy9FLHdCQUF3QixLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5SSxxQkFBcUI7QUFDckIsb0JBQW9CLENBQUMsRUFBRSxHQUFHLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7QUFDdkosaUJBQWlCO0FBQ2pCLGdCQUFnQixPQUFPLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUk7QUFDdkQsb0JBQW9CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdEQsaUJBQWlCLENBQUMsQ0FBQztBQUNuQixhQUFhO0FBQ2Isb0JBQW9CO0FBQ3BCLGdCQUFnQixLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRTtBQUM5QyxvQkFBb0IsTUFBTSxFQUFFLENBQUM7QUFDN0IsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixTQUFTO0FBQ1QsS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ0QsU0FBUyxZQUFZLENBQUMsSUFBSSxFQUFFLEdBQUcsU0FBUyxFQUFFO0FBQzFDLElBQUksTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RCxVQUFVLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsVUFBVSxTQUFTLENBQUM7QUFDcEIsSUFBSSxPQUFPLE9BQU8sQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBZ0hELElBQUksZUFBZSxDQUFDO0FBQ3BCLENBQUMsVUFBVSxlQUFlLEVBQUU7QUFDNUIsSUFBSSxlQUFlLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQzNDLElBQUksZUFBZSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUM3QyxDQUFDLEVBQUUsZUFBZSxLQUFLLGVBQWUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3JCO0FBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxHQUFHO0FBQy9CLFFBQVEsTUFBTSxFQUFFLEtBQUs7QUFDckIsUUFBUSxPQUFPLEVBQUUsQ0FBQyxhQUFhLENBQUM7QUFDaEMsS0FBSztBQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxHQUFHO0FBQ2hDLFFBQVEsTUFBTSxFQUFFLElBQUk7QUFDcEIsUUFBUSxPQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUM7QUFDakMsS0FBSztBQUNMOzs7Ozs7Ozs7Ozs7Ozs7Ozs7IiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTI3LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDI1NiwyNTcsMjU4LDI1OSwyNjAsMjYxLDI2MiwyNjMsMjY0LDI2NSwyNzEsMjcyLDI3MywyNzQsMjc1LDI3NiwyNzcsMjc4LDI3OSwyODAsMjgxLDI4MiwyODMsMjg0LDI4NSwyODYsMjg3LDI4OCwyODksMjkwLDI5MSwyOTIsMjkzLDI5NCwyOTUsMjk2LDI5NywyOTgsMjk5LDMwMCwzMDEsMzAyLDMwMywzMDQsMzA1LDMwNiwzMDcsMzA4LDMwOSwzMTAsMzExLDMxMiwzMTMsMzE0LDMxNSwzMTYsMzE3LDMxOCwzMTksMzIwLDMyMSwzMjIsMzIzLDMyNCwzMjUsMzI2LDMyNywzMjgsMzI5LDMzMCwzMzEsMzMyLDMzMywzMzQsMzM1LDMzNiwzMzcsMzM4LDMzOSwzNDAsMzQxLDM0MiwzNDMsMzQ0LDM0NSwzNDYsMzQ3LDM0OCwzNDksMzUwLDM1MSwzNTIsMzUzLDM1NCwzNTUsMzU2LDM1NywzNTgsMzU5LDM2MCwzNjEsMzYyLDM2MywzNjQsMzY1LDM2NiwzNjcsMzY4LDM2OSwzNzAsMzcxLDM3MiwzNzMsMzc0LDM3NSwzNzYsMzc3LDM3OCwzNzksMzgwLDM4MSwzODIsMzgzLDM4NCwzODUsMzg2LDM4NywzODgsMzg5LDM5MCwzOTEsMzkyLDM5MywzOTQsMzk1LDM5NiwzOTcsMzk4LDM5OSw0MDAsNDAxLDQwMiw0MDMsNDA0LDQwNSw0MDYsNDA3LDQwOCw0MDksNDEwLDQxMSw0MTIsNDEzLDQxNCw0MTUsNDE2LDQxNyw0MTgsNDE5LDQyMCw0MjEsNDIyLDQyMyw0MjQsNDI1LDQyNiw0MjcsNDI4LDQyOSw0MzAsNDMxLDQzMiw0MzMsNDM0LDQzNSw0MzYsNDM3LDQzOCw0MzksNDQwLDQ0MSw0NDIsNDQzLDQ0NCw0NDUsNDQ2LDQ0Nyw0NDgsNDQ5LDQ1MCw0NTEsNDUyLDQ1Myw0NTQsNDU1LDQ1Niw0NTcsNDU4LDQ1OSw0NjAsNDYxLDQ2Miw0NjMsNDY0LDQ2NSw0NjYsNDY3LDQ2OCw0NjksNDcwLDQ3MSw0NzIsNDczLDQ3NCw0NzUsNDc2LDQ3Nyw0NzgsNDc5LDQ4MCw0ODEsNDgyLDQ4Myw0ODQsNDg1LDQ4Niw0ODcsNDg4LDQ4OSw0OTAsNDkxLDQ5Miw0OTMsNDk0LDQ5NSw0OTYsNDk3LDQ5OCw0OTksNTAwLDUwMSw1MDIsNTAzLDUwNCw1MDUsNTA2LDUwNyw1MDgsNTA5LDUxMCw1MTEsNTEyLDUxMyw1MTQsNTE1LDUxNiw1MTcsNTE4LDUxOSw1MjAsNTIxLDUyMiw1MjMsNTI0LDUyNSw1MjYsNTI3LDUyOCw1MjksNTMwLDUzMSw1MzIsNTMzLDUzNCw1MzUsNTM2LDUzNyw1MzgsNTM5LDU0MCw1NDEsNTQyLDU0Myw1NDQsNTQ1LDU0Niw1NDcsNTQ4LDU0OSw1NTAsNTUxLDU1Miw1NTMsNTU0LDU1NSw1NTYsNTU3LDU1OCw1NTksNTYwLDU2MSw1NjIsNTYzLDU2NCw1NjUsNTY2LDU2Nyw1NjgsNTY5LDU3MCw1NzEsNTcyLDU3Myw1NzQsNTc1LDU3Niw1NzcsNTc4LDU3OSw1ODAsNTgxLDU4Miw1ODMsNTg3LDU5NSw1OTYsNTk3LDU5OCw1OTksNjAwLDYwMSw2MDIsNjAzLDYwNCw2MDUsNjA2LDYwNyw2MDgsNjA5LDYxMCw2MTEsNjEyLDYxMyw2MTQsNjE1LDYyMl19 diff --git a/package.json b/package.json index 30b86d3..670686c 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.4.0", "main": "index.js", "napi": { - "name": "ctflags" + "binaryName": "ctflags" }, "scripts": { "build": "napi build --release --features node", @@ -11,6 +11,6 @@ "test": "node test.js" }, "devDependencies": { - "@napi-rs/cli": "^2.18.0" + "@napi-rs/cli": "^3.5.1" } }