build-ts 21.0.6 → 21.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.js +1 -1
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/WillBooster/build-ts/actions/workflows/test.yml)
|
|
4
4
|
[](https://github.com/semantic-release/semantic-release)
|
|
5
|
-
[](https://github.com/WillBooster/shared/tree/main/packages/wbfy)
|
|
6
6
|
|
|
7
7
|
[](LICENSE)
|
|
8
8
|
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import e from"node:fs";import t from"node:path";import{readAndApplyEnvironmentVariables as n,removeNpmAndYarnEnvironmentVariables as r,yargsOptionsBuilderForEnv as i}from"@willbooster/shared-lib-node";import a from"yargs";import{hideBin as o}from"yargs/helpers";import{styleText as s}from"node:util";import{rolldown as c,watch as l}from"rolldown";import{onExit as u}from"signal-exit";import d from"node:url";import f from"node:process";import{builtinModules as p,createRequire as m}from"node:module";import{parseSync as h,visitorKeys as g}from"oxc-parser";import _ from"magic-string";import*as v from"node:child_process";let y;function b(e,t){return y||(y=n(e,t),e.verbose&&console.info(`Loaded env vars:`,Object.keys(y))),y}function x(e,t){let n={},r=new Set([...(e.inline??[]).flatMap(e=>e.toString().split(`,`)),...e.autoInline?Object.keys(b(e,t)):[]]);for(let e of r)process.env[e]!==void 0&&(n[`process.env.${e}`]=JSON.stringify(process.env[e]));return e.verbose&&console.info(`Inline env vars:`,Object.keys(n)),n}const S=[`app`,`functions`,`lib`];async function C(n){let r=t.join(n,`package.json`);try{let t=await e.promises.readFile(r,`utf8`);return[JSON.parse(t),r]}catch{}return[void 0,r]}function w(){return t.dirname(t.dirname(d.fileURLToPath(import.meta.url)))}function ee(e){return/^@([^/]+)\//.exec(e.name??``)?.[1]}function te(e){return`${e.getFullYear()}-${T(e.getMonth()+1)}-${T(e.getDate())} ${T(e.getHours())}:${T(e.getMinutes())}:${T(e.getSeconds())}`}function T(e){return String(e).padStart(2,`0`)}function E(e){if(e<1e3)return`${Math.round(e)}ms`;let t=e/1e3;if(t<60)return`${Number(t.toFixed(1))}s`;let n=Math.floor(t/60);return`${n}m ${Number((t-n*60).toFixed(1))}s`}const D={...i,silent:{description:`Whether to suppress non-error output or not`,type:`boolean`,alias:`s`}},O={...D,input:{description:`Paths or glob patterns (e.g. "src/**/*.ts") of source code files to be built. The first file is main. If no option is given, "src/index.{ts,tsx,cts,mts}" from package directory is targeted.`,type:`array`,alias:`i`},minify:{description:`Whether or not minification is enabled.`,type:`boolean`,default:!0},sourcemap:{description:`Whether or not sourcemap is enabled.`,type:`boolean`,default:!0},external:{description:`Additional external dependencies.`,type:`array`},outDir:{description:`Output directory. Defaults to "dist" in the package directory.`,type:`string`,alias:`o`},inline:{description:`Environment variables to be inlined.`,type:`array`},"auto-inline":{description:`Inline environment variables defined at env files.`,type:`boolean`,default:!1},watch:{description:`Whether watch mode is enabled or not`,type:`boolean`,alias:`w`}},k={...O,moduleType:{description:`esm, cjs, or either (default).`,type:`string`,alias:`m`}},ne={...k,onlyPackageJson:{description:`Whether to generate only package.json.`,type:`boolean`}},re={...O,moduleType:{description:`esm, cjs, either, or both (default).`,type:`string`,alias:`m`},declarationOnly:{description:`Emit only declaration (.d.ts) files without bundling JavaScript.`,type:`boolean`,default:!1}};function ie(e,t=!1){let n=e.name||e.cause?.name,r=n?`${n}: `:``,i=`${e.plugin?`(plugin ${e.plugin}) `:``}${r}${e.message}`,a=[s([`bold`,`red`],`[!] ${i}`)];e.url&&a.push(s(`cyan`,e.url)),e.loc?a.push(`${e.loc.file||e.id} (${e.loc.line}:${e.loc.column})`):e.id&&a.push(e.id),e.frame&&a.push(s(`dim`,e.frame)),e.stack&&a.push(s(`dim`,e.stack.replace(`${r}${e.message}\n`,``))),a.push(``,``),console.error(a.join(`
|
|
2
2
|
`)),t||f.exit(1)}const ae=new Set(p);function oe(e,t,n,r,i){let a=new Set(ce(e,t,n,i,r));return e=>le(e)||se(e,a)}function se(e,t){if(t.has(e))return!0;for(let n=e.indexOf(`/`);n!==-1;n=e.indexOf(`/`,n+1))if(t.has(e.slice(0,n)))return!0;return!1}function ce(n,r,i,a,o){let s=[...n.external??[]].map(e=>e.toString());i.dependencies?.[`@prisma/client`]&&s.push(`prisma-client`),s.push(...Object.keys(i.dependencies??{}),...Object.keys(i.peerDependencies??{}),...Object.keys(i.optionalDependencies??{}));let c=t.dirname(a);if(e.existsSync(t.join(t.dirname(c),`package.json`))){let n=e.readdirSync(c,{withFileTypes:!0});for(let r of n){if(!r.isDirectory())continue;let n=t.join(c,r.name,`package.json`);if(!e.existsSync(n))continue;let a=JSON.parse(e.readFileSync(n,`utf8`));i.dependencies?.[a.name??``]&&s.push(...Object.keys(a.dependencies??{}),...Object.keys(a.peerDependencies??{}),...Object.keys(a.optionalDependencies??{}))}}let l=(r===`app-node`||r===`functions`)&&o?`@${o}/`:void 0;return l?s.filter(e=>!e.startsWith(l)):s}function le(e){return e.startsWith(`node:`)||ae.has(e)}const ue=[`.cjs`,`.mjs`,`.js`,`.jsx`,`.cts`,`.mts`,`.ts`,`.tsx`];function A(e){return ue.some(t=>e.endsWith(t))&&!e.startsWith(`\0`)&&!de(e)}function de(e){return e.includes(`/node_modules/`)||e.includes(`\\node_modules\\`)}function j(e,t){let n=fe(e),r=pe(e),i=h(e,t,{lang:n,sourceType:r});if(!M(i))return i;if(e.endsWith(`.js`)&&r===`unambiguous`){let r=h(e,t,{lang:n,sourceType:`commonjs`});if(!M(r))return r}}function M(e){return e.errors.some(e=>e.severity===`Error`)}function fe(e){return e.endsWith(`.tsx`)?`tsx`:e.endsWith(`.ts`)||e.endsWith(`.cts`)||e.endsWith(`.mts`)?`ts`:e.endsWith(`.jsx`)?`jsx`:`js`}function pe(e){return e.endsWith(`.cjs`)||e.endsWith(`.cts`)?`commonjs`:`unambiguous`}function N(e){return(g[e.type]??[]).flatMap(t=>{let n=e[t];return Array.isArray(n)?n:[n]}).filter(e=>I(e))}function P(e,t){let n=e[t];return I(n)?n:void 0}function F(e,t){let n=e[t];return Array.isArray(n)?n.filter(e=>I(e)):[]}function I(e){return!!e&&typeof e==`object`&&typeof e.type==`string`}function me(e,t=`file.ts`){if(!e.includes(`@`))return!1;let n=j(t,e);return!n||I(n.program)&&he(n.program)}function he(e){return e.type===`Decorator`||N(e).some(e=>he(e))}function ge(){let{env:e}=process;if(e.NODE_ENV===`production`)return new Set([`error`,`info`,`warn`]);if(e.NODE_ENV===`test`)return new Set([`debug`,`error`,`info`,`warn`])}function _e(e){return{name:`remove-console`,transform(t,n){if(A(n)&&/console|\\u/.test(t))return ve(t,n,e)}}}function ve(e,t,n){let r=j(t,e);if(!r||!I(r.program))return;let i=new _(e),a=[];xe(r.program,[],[],a,n);for(let e of Ne(a))i.overwrite(e.start,e.end,e.value);if(i.hasChanged())return{code:i.toString(),map:i.generateMap({hires:!0})}}const ye=`(function () {})`,be=`(void 0)`;function xe(e,t,n,r,i){let a=Se(e,t.at(-1));a&&n.push(a),!U(n,e)&&e.type===`CallExpression`&&De(e,t,r,i),!U(n,e)&&e.type===`MemberExpression`&&Oe(e,t,r,i);let o=[...t,e];for(let t of N(e))xe(t,o,n,r,i);a&&n.pop()}function Se(e,t){if(e.type===`Program`)return{end:e.end,shadowsConsole:Ce(e),start:e.start};if(H(e))return{end:e.end,shadowsConsole:we(e),start:e.start};if(e.type===`BlockStatement`){let n=t?H(t):!1;return{end:e.end,shadowsConsole:L(e,!1)||n&&R(e),start:e.start}}if(e.type===`CatchClause`)return{end:e.end,shadowsConsole:V(e.param),start:e.start};if(e.type===`StaticBlock`||e.type===`TSModuleBlock`)return{end:e.end,shadowsConsole:L(e,!1)||R(e),start:e.start};if(e.type===`ForStatement`||e.type===`ForInStatement`||e.type===`ForOfStatement`)return{end:e.end,shadowsConsole:Te(e),start:e.start}}function Ce(e){for(let t of F(e,`body`))if(z(t,!0))return!0;return R(e)}function we(e){if(V(e.id))return!0;for(let t of F(e,`params`))if(V(t))return!0;return!1}function L(e,t){for(let n of F(e,`body`))if(z(n,t))return!0;return!1}function Te(e){let t=P(e,e.type===`ForStatement`?`init`:`left`);return!!t&&t.type===`VariableDeclaration`&&t.kind!==`var`&&B(t)}function R(e){if(!e)return!1;for(let t of N(e))if(!(t!==e&&(H(t)||t.type===`StaticBlock`||t.type===`TSModuleBlock`))&&(t.type===`VariableDeclaration`&&t.kind===`var`&&B(t)||R(t)))return!0;return!1}function Ee(e){return e.importKind!==`type`&&F(e,`specifiers`).some(e=>e.importKind!==`type`&&V(e.local))}function z(e,t){let n=Pe(e)??e;return n.declare===!0?!1:n.type===`ImportDeclaration`?Ee(n):n.type===`FunctionDeclaration`||n.type===`ClassDeclaration`?V(n.id):n.type===`VariableDeclaration`&&(t||n.kind!==`var`)&&B(n)}function B(e){return F(e,`declarations`).some(e=>V(P(e,`id`)))}function V(e){return I(e)?e.type===`Identifier`&&e.name===`console`?!0:e.type===`AssignmentPattern`||e.type===`RestElement`?V(e.left??e.argument):e.type===`TSParameterProperty`?V(e.parameter):e.type===`ArrayPattern`?F(e,`elements`).some(e=>V(e)):e.type===`ObjectPattern`&&F(e,`properties`).some(e=>V(e.value??e.argument)):!1}function H(e){return e.type===`FunctionDeclaration`||e.type===`FunctionExpression`||e.type===`ArrowFunctionExpression`}function U(e,t){return e.some(e=>e.shadowsConsole&&e.start<=t.start&&t.end<=e.end)}function De(e,t,n,r){let i=t.at(-1),a=P(e,`callee`);if(e.optional!==!0){if(!a||!K(a,r)){a&&Me(a,r)&&n.push({start:e.start,end:e.end,value:W(e,t)});return}i?.type===`ExpressionStatement`?n.push({start:i.start,end:i.end,value:`;`}):n.push({start:e.start,end:e.end,value:ke(e,t)})}}function Oe(e,t,n,r){let i=t.at(-1),a=t.at(-2);if(!(!K(e,r)||i?.type===`MemberExpression`)&&(i?.type!==`CallExpression`||i.callee!==e||i.optional===!0)&&!je(e,i,a)){if(i?.type===`AssignmentExpression`&&i.left===e){let e=P(i,`right`);e&&n.push({start:e.start,end:e.end,value:W(e,t)});return}n.push({start:e.start,end:e.end,value:W(e,t)})}}function ke(e,t){return G(e,t)?`;${be}`:be}function W(e,t){return G(e,t)?`;${ye}`:ye}function G(e,t){let n=t.findLastIndex(e=>e.type===`ExpressionStatement`);if(n<0)return!1;let r=t[n];if(!r)return!1;let i=t[n-1];return r.start===e.start&&Ae(i)}function Ae(e){return e?.type===`Program`||e?.type===`BlockStatement`||e?.type===`StaticBlock`||e?.type===`SwitchCase`||e?.type===`TSModuleBlock`}function je(e,t,n){return t?.type===`UpdateExpression`&&t.argument===e||(t?.type===`ForInStatement`||t?.type===`ForOfStatement`)&&t.left===e||t?.type===`ArrayPattern`||t?.type===`AssignmentPattern`&&t.left===e||t?.type===`Property`&&t.value===e&&n?.type===`ObjectPattern`}function K(e,t){if(e.type!==`MemberExpression`)return!1;let n=P(e,`object`),r=P(e,`property`);return e.optional===!0||!n||!r||q(e,r,t)?!1:J(n)?!0:n.type===`MemberExpression`&&J(P(n,`object`))&&e.computed!==!0&&r.type===`Identifier`&&(r.name===`call`||r.name===`apply`)}function Me(e,t){if(e.type!==`MemberExpression`)return!1;let n=P(e,`object`),r=P(e,`property`);if(!n||!r||n.type!==`MemberExpression`||e.computed===!0||r.type!==`Identifier`||r.name!==`bind`||!J(P(n,`object`)))return!1;let i=P(n,`property`);return!!i&&!q(n,i,t)}function q(e,t,n){return e.computed!==!0&&t.type===`Identifier`&&n.has(t.name)}function J(e){return e?.type===`Identifier`&&e.name===`console`}function Ne(e){let t=[];for(let n of e.toSorted((e,t)=>e.start-t.start||t.end-e.end))t.some(e=>e.start<=n.start&&n.end<=e.end)||t.push(n);return t.toSorted((e,t)=>t.start-e.start)}function Pe(e){if(e.type===`ExportNamedDeclaration`||e.type===`ExportDefaultDeclaration`)return P(e,`declaration`)}function Fe(){let e=[],t=ge();return t&&e.push(_e(t)),e.push(Ie(),Le()),e}function Ie(){let e=t.join(w(),`babel.config.mjs`);return{name:`babel-decorators`,async transform(t,n){if(!A(n)||!me(t))return;let{transformAsync:r}=await import(`@babel/core`),i=await r(t,{caller:{name:`build-ts`,supportsDynamicImport:!0,supportsExportNamespaceFrom:!0,supportsStaticESM:!0},configFile:e,filename:n,sourceMaps:!0});if(i?.code)return{code:i.code,map:i.map}}}}function Le(){return{name:`text`,async load(t){if(!t.endsWith(`.csv`)&&!t.endsWith(`.txt`))return;let n=await e.promises.readFile(t,`utf8`);return{code:`export default ${JSON.stringify(n)};`,moduleType:`js`}}}}const Re=m(import.meta.url);async function Y(n,r,i,a){let o=X(r);if(!o)throw Error(`Failed to find tsconfig.json in ${r}.`);n.verbose&&console.info(`Found tsconfig.json:`,o);let s=[],c=t.join(i,t.basename(r),`src`);if(e.existsSync(c)){a=void 0;let n=t.dirname(r),o=await e.promises.readdir(n,{withFileTypes:!0});r=t.resolve(r);for(let a of o){if(!a.isDirectory())continue;let o=t.resolve(n,a.name);if(o===r)continue;let c=X(o),l=t.join(i,a.name,`src`);c&&e.existsSync(l)&&s.push([o,c,l,void 0])}}else c=i;s.push([r,o,c,a]);let l=!0;for(let[e,t,r,i]of s)l&&=await ze(n,e,t,r,i);return l}async function ze(n,r,i,a,o){n.verbose&&console.info(`runTsgo()`,r,i,a,o);let s=t.join(r,`.build-ts-tsgo.${process.pid}.json`);try{await e.promises.writeFile(s,JSON.stringify(await Be(r,i,a,o),void 0,2));let t=v.spawnSync(process.execPath,[Ve(),`-p`,s],{cwd:r,stdio:`inherit`});if(t.error)throw t.error;return t.status===0}finally{await e.promises.rm(s,{force:!0})}}async function Be(e,n,r,i){let a={composite:!1,declaration:!0,declarationDir:r,emitDeclarationOnly:!0,incremental:!1,noEmit:!1,noEmitOnError:!0,outDir:r,rootDir:`src`};if(await He(t.join(e,`src`))){let t=Ue(e),n=t?await We(t):[];n.includes(`node`)&&(a.types=n)}return{compilerOptions:a,extends:Ge(e,n),...i?.length?{exclude:[],files:i.map(n=>t.resolve(e,n).replaceAll(t.sep,`/`)),include:[`src/**/*.d.ts`,`src/**/*.d.mts`,`src/**/*.d.cts`]}:{include:[`src/**/*`]}}}function X(n){let r=t.resolve(n);for(;;){let n=t.join(r,`tsconfig.json`);if(e.existsSync(n))return n;let i=t.dirname(r);if(i===r)return;r=i}}function Ve(){let e=Re.resolve(`typescript/package.json`);return t.join(t.dirname(e),`lib`,`tsc.js`)}async function He(n){try{let r=await e.promises.readdir(n,{withFileTypes:!0});for(let i of r){let r=t.join(n,i.name);if(i.isDirectory()){if(await He(r))return!0}else if(/\.[cm]?tsx?$/.test(i.name)&&(await e.promises.readFile(r,`utf8`)).includes(`node:`))return!0}}catch{return!1}return!1}function Ue(n){let r=t.resolve(n);for(;;){let n=t.join(r,`node_modules`,`@types`);if(e.existsSync(n))return n;let i=t.dirname(r);if(i===r)return;r=i}}async function We(t){try{return(await e.promises.readdir(t,{withFileTypes:!0})).filter(e=>e.isDirectory()).map(e=>e.name)}catch{return[]}}function Ge(e,n){let r=t.relative(e,n).replaceAll(t.sep,`/`);return r.startsWith(`.`)?r:`./${r}`}const Ke={extensionAlias:{".cjs":[`.cjs`,`.cts`],".js":[`.js`,`.ts`,`.tsx`],".jsx":[`.jsx`,`.ts`,`.tsx`],".mjs":[`.mjs`,`.mts`]},extensions:[`.cts`,`.mts`,`.ts`,`.tsx`,`.cjs`,`.mjs`,`.js`,`.jsx`,`.json`]},qe={command:`app [package]`,describe:`Build an app`,builder:k,async handler(e){return Z(e,`app`)}},Je={command:`functions [package]`,describe:`Build a GCP/Firebase functions app`,builder:ne,async handler(e){if(e.onlyPackageJson){let n=t.resolve(e.package?.toString()??`.`),[r,i]=await C(n);r||(console.error(`Failed to parse package.json (${i}).`),process.exit(1)),await ot(Qe(e,process.cwd(),n,void 0,`functions`),r,e.moduleType)}else return Z(e,`functions`)}},Ye={command:`lib [package]`,describe:`Build a Node.js / React library`,builder:re,async handler(e){return Z(e,`lib`)}};async function Z(n,r){process.env.NODE_ENV||=`production`;let i=!n.silent&&n.verbose,a=process.cwd(),o=t.resolve(n.package?.toString()??`.`),[l,u]=await C(o);l||(console.error(`Failed to parse package.json (${u}).`),process.exit(1)),b(n,o);let d=tt(n,a,o),f=rt(r,d,o),p=Qe(n,a,o,d,r);i&&(console.info(`argv:`,n),console.info(`packageJsonPath:`,u),console.info(`Target (Category):`,`${f} (${r})`));let m=ee(l),h=l.type===`module`;i&&(process.env.BUILD_TS_VERBOSE=`1`),process.env.BUILD_TS_TARGET_CATEGORY=r,process.env.BUILD_TS_TARGET_DETAIL=f;let g=`declarationOnly`in n&&n.declarationOnly;g&&n.watch&&(console.error(`--declaration-only cannot be used with --watch.`),process.exit(1));let _=st(n,f,p,h,o);i&&console.info(`OutputOptions:`,_),_.length===0&&(console.error(`Failed to detect output files.`),process.exit(1));let v=n.input?.length?d:void 0;if(process.chdir(o),await e.promises.rm(p,{recursive:!0,force:!0}),f===`functions`&&await ot(p,l,n.moduleType),g){n.silent||console.info(s(`cyan`,`Generates declaration files → ${s(`bold`,t.relative(o,p))}\non ${o} ...`)),await Y(n,o,p,v)||process.exit(1);return}let y={checks:{preferBuiltinFeature:!1},external:oe(n,f,l,m,o),input:f===`functions`?$e(d):d,plugins:Fe(),resolve:Ke,transform:Xe(n,o),watch:n.watch?{clearScreen:!1}:void 0},x=e=>(Array.isArray(e)?e:[e]).map(e=>t.relative(o,e)),S=e=>{let t=x(_.map(e=>e.file||e.dir||``));console.info(s(`cyan`,`Bundles ${s(`bold`,x(e).join(`, `))} → ${s(`bold`,t.join(`, `))}\non ${o} ...`))};if(n.watch)Ze(n,f,o,p,v,y,_,x,S);else{n.silent||S(d);let e,t=!1;try{let t=Date.now(),r=await c(y);e=r,await Promise.all(_.map(e=>r.write(e))),n.silent||console.info(s(`green`,`Created ${x(_.map(e=>e.file||e.dir||``)).join(`, `)} in ${s(`bold`,E(Date.now()-t))}`))}catch(e){t=!0,console.error(`Failed to build due to:`,e)}await e?.close(),t&&process.exit(1),f!==`app-node`&&f!==`functions`&&(await Y(n,o,p,v)||process.exit(1))}}function Xe(e,t){return{define:x(e,t),jsx:`react-jsx`,target:`es2022`}}function Ze(e,t,n,r,i,a,o,c,d){let f=l({...a,output:o}),p=async e=>{process.removeListener(`uncaughtException`,m),process.stdin.removeListener(`end`,h),await f.close(),e&&process.exit(e)},m=e=>{console.error(e),p(1)},h=()=>{p()};u(e=>void p(e)),process.on(`uncaughtException`,m),process.stdin.isTTY||(process.stdin.on(`end`,h),process.stdin.resume()),f.on(`event`,async o=>{try{switch(o.code){case`ERROR`:ie(o.error,!0);break;case`BUNDLE_START`:if(e.silent)break;d(et(a.input));break;case`BUNDLE_END`:e.silent||console.info(s(`green`,`Created ${s(`bold`,c(o.output).join(`, `))} in ${s(`bold`,E(o.duration))}`)),t!==`app-node`&&t!==`functions`&&await Y(e,n,r,i);break;case`END`:if(e.silent)break;console.info(`\n[${te(new Date)}] waiting for changes...`)}}catch(e){console.error(`Failed to handle watch event due to:`,e)}finally{`result`in o&&o.result&&o.result.close()}})}function Qe(n,r,i,a,o){let s=n.outDir?.toString();s===``&&(console.error(`--out-dir must not be empty.`),process.exit(1));let c=s?t.resolve(r,s):t.join(i,`dist`),l=Q(c),u=a?.find(e=>$(l,Q(e))||$(c,e));if(u&&(console.error(`The output directory (${l}) must not contain the input file (${u}).`),process.exit(1)),!s)return c;let d=Q(i);($(l,d)||$(c,i))&&(console.error(`--out-dir (${l}) must not contain the package directory (${d}).`),process.exit(1));let f=Q(t.join(d,`src`));return($(f,l)||$(t.join(i,`src`),c))&&(console.error(`--out-dir (${l}) must not be inside the source directory (${f}).`),process.exit(1)),o!==`functions`&&e.existsSync(t.join(l,`package.json`))&&(console.error(`--out-dir (${l}) contains a package.json, so it looks like a package directory.`),process.exit(1)),c}function Q(n){let r=[],i=n;for(;!e.existsSync(i);){r.unshift(t.basename(i));let e=t.dirname(i);if(e===i)break;i=e}try{i=e.realpathSync.native(i)}catch{}return t.join(i,...r)}function $(e,n){let r=t.relative(e,n);return r===``||!t.isAbsolute(r)&&r!==`..`&&!r.startsWith(`..${t.sep}`)}function $e(e){let n=new Map;for(let[r,i]of e.entries()){let e=r===0?`index`:t.basename(i,t.extname(i)),a=n.get(e);a&&(console.error(`Entry names conflict in the functions build: "${e}" (${a} vs ${i}). List --input files explicitly with unique base names, keeping the main entry first.`),process.exit(1)),n.set(e,i)}return Object.fromEntries(n)}function et(e){return e?typeof e==`string`?[e]:Array.isArray(e)?e:Object.values(e):[]}function tt(n,r,i){if(n.input&&n.input.length>0){let i=n.input.flatMap(n=>{let i=n.toString();if(!nt(i))return[t.resolve(r,i)];let a=e.globSync(i.split(t.sep).join(`/`),{cwd:r}).filter(n=>!/\.d\.[cm]?ts$/.test(n)&&e.statSync(t.resolve(r,n),{throwIfNoEntry:!1})?.isFile()).sort().map(e=>t.resolve(r,e));return a.length===0&&(console.error(`No files matched the input pattern: ${i}`),process.exit(1)),a});return[...new Set(i)]}let a=t.join(i,`src`);for(let n of[`ts`,`tsx`,`cts`,`mts`]){let r=t.join(a,`index.${n}`);if(e.existsSync(r))return[r]}console.error(`Failed to detect input file.`),process.exit(1)}function nt(e){return/[*?]|\[[^\]]*\]|\{[^}]*,[^}]*\}/.test(e)}function rt(e,t,n){switch(e){case`app`:return`app-node`;case`functions`:return`functions`;case`lib`:return t.some(e=>e.endsWith(`.tsx`))||it(n)?`lib-react`:`lib`;default:console.error(`target option must be one of: `+S.join(`, `)),process.exit(1)}}function it(e){return at(t.join(e,`src`))}function at(n){try{return e.readdirSync(n,{withFileTypes:!0}).some(e=>{let r=t.join(n,e.name);return e.isDirectory()?at(r):e.isFile()&&e.name.endsWith(`.tsx`)})}catch{return!1}}async function ot(n,r,i){r.name+=`-dist`;let a=r.type===`module`,o=ct(a,i);r.main=a===o?`index.js`:o?`index.mjs`:`index.cjs`,delete r.scripts,delete r.devDependencies,await e.promises.mkdir(n,{recursive:!0}),await e.promises.writeFile(t.join(n,`package.json`),JSON.stringify(r))}function st(e,n,r,i,a){if(n===`app-node`||n===`functions`){let t=ct(i,e.moduleType);return[{dir:r,format:t?`module`:`commonjs`,minify:e.minify,sourcemap:e.sourcemap&&`inline`,strict:!t}]}let o=[],s=e.moduleType||`both`;return(s===`cjs`||s===`both`||s===`either`&&!i)&&o.push({dir:r,entryFileNames:i?`[name].cjs`:`[name].js`,format:`commonjs`,minify:e.minify,preserveModules:!0,preserveModulesRoot:t.join(a,`src`),sourcemap:e.sourcemap,strict:!0}),(s===`esm`||s===`both`||s===`either`&&i)&&o.push({dir:r,entryFileNames:i?`[name].js`:`[name].mjs`,format:`module`,minify:e.minify,preserveModules:!0,preserveModulesRoot:t.join(a,`src`),sourcemap:e.sourcemap}),o}function ct(e,t){return t===`esm`||(!t||t===`either`)&&e}const lt={command:`run <file>`,describe:`Run script`,builder:{...D,watch:{description:`Whether watch mode is enabled or not`,type:`boolean`,alias:`w`}},handler(e){b(e,process.cwd());let t=e.file?.toString()??``,n=process.versions.bun,r=n?`bun`:`node`,i=n?[`--bun`]:[`--no-warnings`,`--import`,`tsx`];e.watch&&i.push(`--watch`),i.push(t);let[,...a]=e._,o=[...i,...a.map(e=>e.toString())];e.verbose&&console.info(`Running '${r} ${o.join(` `)}'`);let s=v.spawnSync(r,o,{stdio:`inherit`,env:{...process.env}});process.exit(s.status??1)}};r(process.env),await a(o(process.argv)).scriptName(`build-ts`).options(D).command(qe).command(Je).command(Ye).command(lt).demandCommand().strict().version(ut()).help().argv;function ut(){return JSON.parse(e.readFileSync(t.join(w(),`package.json`),`utf8`)).version}
|
|
3
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6WyJidWlsZGVyIl0sInNvdXJjZXMiOlsiLi4vc3JjL2Vudi50cyIsIi4uL3NyYy90eXBlcy50cyIsIi4uL3NyYy91dGlscy50cyIsIi4uL3NyYy9zaGFyZWRPcHRpb25zQnVpbGRlci50cyIsIi4uL3NyYy9jb21tYW5kcy9idWlsZC9idWlsZGVyLnRzIiwiLi4vc3JjL2NvbW1hbmRzL2J1aWxkL2J1bmRsZXJMb2dnZXIudHMiLCIuLi9zcmMvY29tbWFuZHMvYnVpbGQvZXh0ZXJuYWxzLnRzIiwiLi4vc3JjL2NvbW1hbmRzL2J1aWxkL3RyYW5zZm9ybVV0aWxzLnRzIiwiLi4vc3JjL2NvbW1hbmRzL2J1aWxkL2RlY29yYXRvckRldGVjdGlvbi50cyIsIi4uL3NyYy9jb21tYW5kcy9idWlsZC9yZW1vdmVDb25zb2xlUGx1Z2luLnRzIiwiLi4vc3JjL2NvbW1hbmRzL2J1aWxkL3BsdWdpbi50cyIsIi4uL3NyYy9jb21tYW5kcy9idWlsZC90eXBlU2NyaXB0LnRzIiwiLi4vc3JjL2NvbW1hbmRzL2J1aWxkL2J1aWxkLnRzIiwiLi4vc3JjL2NvbW1hbmRzL3J1bi50cyIsIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkQW5kQXBwbHlFbnZpcm9ubWVudFZhcmlhYmxlcyB9IGZyb20gJ0B3aWxsYm9vc3Rlci9zaGFyZWQtbGliLW5vZGUnO1xuXG5pbXBvcnQgdHlwZSB7IGJ1aWxkZXIgfSBmcm9tICcuL2NvbW1hbmRzL2J1aWxkL2J1aWxkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBzaGFyZWRPcHRpb25zQnVpbGRlciB9IGZyb20gJy4vc2hhcmVkT3B0aW9uc0J1aWxkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBBcmd1bWVudHNUeXBlIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmxldCBlbnZWYXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gbG9hZHMgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gdGhlIGNvbmZpZ3VyZWQgc291cmNlcy5cbiAqICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEVudmlyb25tZW50VmFyaWFibGVzV2l0aENhY2hlKFxuICBhcmd2OiBBcmd1bWVudHNUeXBlPHR5cGVvZiBzaGFyZWRPcHRpb25zQnVpbGRlcj4sXG4gIGN3ZDogc3RyaW5nXG4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCFlbnZWYXJzKSB7XG4gICAgZW52VmFycyA9IHJlYWRBbmRBcHBseUVudmlyb25tZW50VmFyaWFibGVzKGFyZ3YsIGN3ZCk7XG4gICAgaWYgKGFyZ3YudmVyYm9zZSkge1xuICAgICAgY29uc29sZS5pbmZvKCdMb2FkZWQgZW52IHZhcnM6JywgT2JqZWN0LmtleXMoZW52VmFycykpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZW52VmFycztcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBkZWZpbml0aW9uIG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHdpbGwgYmUgaW5qZWN0ZWQgaW50byB0aGUgYnVpbGQuXG4gKiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVudmlyb25tZW50VmFyaWFibGVzRGVmaW5pdGlvbihcbiAgYXJndjogQXJndW1lbnRzVHlwZTx0eXBlb2YgYnVpbGRlcj4sXG4gIGN3ZDogc3RyaW5nXG4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgZW52VmFyc0RlZjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBjb25zdCBlbnZWYXJOYW1lcyA9IG5ldyBTZXQoW1xuICAgIC4uLihhcmd2LmlubGluZSA/PyBbXSkuZmxhdE1hcCgoZSkgPT4gZS50b1N0cmluZygpLnNwbGl0KCcsJykpLFxuICAgIC4uLihhcmd2LmF1dG9JbmxpbmUgPyBPYmplY3Qua2V5cyhsb2FkRW52aXJvbm1lbnRWYXJpYWJsZXNXaXRoQ2FjaGUoYXJndiwgY3dkKSkgOiBbXSksXG4gIF0pO1xuICBmb3IgKGNvbnN0IG5hbWUgb2YgZW52VmFyTmFtZXMpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnZbbmFtZV0gPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cbiAgICBlbnZWYXJzRGVmW2Bwcm9jZXNzLmVudi4ke25hbWV9YF0gPSBKU09OLnN0cmluZ2lmeShwcm9jZXNzLmVudltuYW1lXSk7XG4gIH1cbiAgaWYgKGFyZ3YudmVyYm9zZSkge1xuICAgIGNvbnNvbGUuaW5mbygnSW5saW5lIGVudiB2YXJzOicsIE9iamVjdC5rZXlzKGVudlZhcnNEZWYpKTtcbiAgfVxuICByZXR1cm4gZW52VmFyc0RlZjtcbn1cbiIsImltcG9ydCB0eXBlIHsgQXJndW1lbnRzQ2FtZWxDYXNlLCBJbmZlcnJlZE9wdGlvblR5cGVzLCBPcHRpb25zIH0gZnJvbSAneWFyZ3MnO1xuXG5leHBvcnQgY29uc3QgYWxsVGFyZ2V0Q2F0ZWdvcmllcyA9IFsnYXBwJywgJ2Z1bmN0aW9ucycsICdsaWInXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgVGFyZ2V0Q2F0ZWdvcnkgPSAodHlwZW9mIGFsbFRhcmdldENhdGVnb3JpZXMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBhbGxUYXJnZXREZXRhaWxzID0gWydhcHAtbm9kZScsICdmdW5jdGlvbnMnLCAnbGliJywgJ2xpYi1yZWFjdCddIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBUYXJnZXREZXRhaWwgPSAodHlwZW9mIGFsbFRhcmdldERldGFpbHMpW251bWJlcl07XG5cbmV4cG9ydCB0eXBlIEFyZ3VtZW50c1R5cGU8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIE9wdGlvbnM+PiA9IEFyZ3VtZW50c0NhbWVsQ2FzZTxJbmZlcnJlZE9wdGlvblR5cGVzPFQ+PjtcbiIsImltcG9ydCBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdXJsIGZyb20gJ25vZGU6dXJsJztcblxuaW1wb3J0IHR5cGUgeyBQYWNrYWdlSnNvbiB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkUGFja2FnZUpzb24oZGlyUGF0aDogc3RyaW5nKTogUHJvbWlzZTxbUGFja2FnZUpzb24gfCB1bmRlZmluZWQsIHN0cmluZ10+IHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKGRpclBhdGgsICdwYWNrYWdlLmpzb24nKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYWNrYWdlSnNvblRleHQgPSBhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShwYWNrYWdlSnNvblBhdGgsICd1dGY4Jyk7XG4gICAgcmV0dXJuIFtKU09OLnBhcnNlKHBhY2thZ2VKc29uVGV4dCkgYXMgUGFja2FnZUpzb24sIHBhY2thZ2VKc29uUGF0aF07XG4gIH0gY2F0Y2gge1xuICAgIC8vIGRvIG5vdGhpbmdcbiAgfVxuICByZXR1cm4gW3VuZGVmaW5lZCwgcGFja2FnZUpzb25QYXRoXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1aWxkVHNSb290UGF0aCgpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aC5kaXJuYW1lKHBhdGguZGlybmFtZSh1cmwuZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKSk7XG59XG5cbi8qKiBSZXR1cm5zIHRoZSBzY29wZSBvZiBhIHBhY2thZ2UgbmFtZSAoZS5nLiBcIndpbGxib29zdGVyXCIgZm9yIFwiQHdpbGxib29zdGVyL3NoYXJlZC1saWJcIikuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlKHBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiAvXkAoW14vXSspXFwvLy5leGVjKHBhY2thZ2VKc29uLm5hbWUgPz8gJycpPy5bMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREYXRlVGltZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke2RhdGUuZ2V0RnVsbFllYXIoKX0tJHtwYWQoZGF0ZS5nZXRNb250aCgpICsgMSl9LSR7cGFkKGRhdGUuZ2V0RGF0ZSgpKX0gJHtwYWQoZGF0ZS5nZXRIb3VycygpKX06JHtwYWQoXG4gICAgZGF0ZS5nZXRNaW51dGVzKClcbiAgKX06JHtwYWQoZGF0ZS5nZXRTZWNvbmRzKCkpfWA7XG59XG5cbmZ1bmN0aW9uIHBhZCh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSkucGFkU3RhcnQoMiwgJzAnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdER1cmF0aW9uKG1pbGxpc2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKG1pbGxpc2Vjb25kcyA8IDEwMDApIHJldHVybiBgJHtNYXRoLnJvdW5kKG1pbGxpc2Vjb25kcyl9bXNgO1xuXG4gIGNvbnN0IHNlY29uZHMgPSBtaWxsaXNlY29uZHMgLyAxMDAwO1xuICBpZiAoc2Vjb25kcyA8IDYwKSByZXR1cm4gYCR7TnVtYmVyKHNlY29uZHMudG9GaXhlZCgxKSl9c2A7XG5cbiAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgcmV0dXJuIGAke21pbnV0ZXN9bSAke051bWJlcigoc2Vjb25kcyAtIG1pbnV0ZXMgKiA2MCkudG9GaXhlZCgxKSl9c2A7XG59XG4iLCJpbXBvcnQgeyB5YXJnc09wdGlvbnNCdWlsZGVyRm9yRW52IH0gZnJvbSAnQHdpbGxib29zdGVyL3NoYXJlZC1saWItbm9kZSc7XG5cbmV4cG9ydCBjb25zdCBzaGFyZWRPcHRpb25zQnVpbGRlciA9IHtcbiAgLi4ueWFyZ3NPcHRpb25zQnVpbGRlckZvckVudixcbiAgc2lsZW50OiB7XG4gICAgZGVzY3JpcHRpb246ICdXaGV0aGVyIHRvIHN1cHByZXNzIG5vbi1lcnJvciBvdXRwdXQgb3Igbm90JyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgYWxpYXM6ICdzJyxcbiAgfSxcbn0gYXMgY29uc3Q7XG4iLCJpbXBvcnQgeyBzaGFyZWRPcHRpb25zQnVpbGRlciB9IGZyb20gJy4uLy4uL3NoYXJlZE9wdGlvbnNCdWlsZGVyLmpzJztcblxuZXhwb3J0IGNvbnN0IGJ1aWxkZXIgPSB7XG4gIC4uLnNoYXJlZE9wdGlvbnNCdWlsZGVyLFxuICBpbnB1dDoge1xuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1BhdGhzIG9yIGdsb2IgcGF0dGVybnMgKGUuZy4gXCJzcmMvKiovKi50c1wiKSBvZiBzb3VyY2UgY29kZSBmaWxlcyB0byBiZSBidWlsdC4gVGhlIGZpcnN0IGZpbGUgaXMgbWFpbi4gSWYgbm8gb3B0aW9uIGlzIGdpdmVuLCBcInNyYy9pbmRleC57dHMsdHN4LGN0cyxtdHN9XCIgZnJvbSBwYWNrYWdlIGRpcmVjdG9yeSBpcyB0YXJnZXRlZC4nLFxuICAgIHR5cGU6ICdhcnJheScsXG4gICAgYWxpYXM6ICdpJyxcbiAgfSxcbiAgbWluaWZ5OiB7XG4gICAgZGVzY3JpcHRpb246ICdXaGV0aGVyIG9yIG5vdCBtaW5pZmljYXRpb24gaXMgZW5hYmxlZC4nLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICBzb3VyY2VtYXA6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1doZXRoZXIgb3Igbm90IHNvdXJjZW1hcCBpcyBlbmFibGVkLicsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIGV4dGVybmFsOiB7XG4gICAgZGVzY3JpcHRpb246ICdBZGRpdGlvbmFsIGV4dGVybmFsIGRlcGVuZGVuY2llcy4nLFxuICAgIHR5cGU6ICdhcnJheScsXG4gIH0sXG4gIG91dERpcjoge1xuICAgIGRlc2NyaXB0aW9uOiAnT3V0cHV0IGRpcmVjdG9yeS4gRGVmYXVsdHMgdG8gXCJkaXN0XCIgaW4gdGhlIHBhY2thZ2UgZGlyZWN0b3J5LicsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgYWxpYXM6ICdvJyxcbiAgfSxcbiAgaW5saW5lOiB7XG4gICAgZGVzY3JpcHRpb246ICdFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gYmUgaW5saW5lZC4nLFxuICAgIHR5cGU6ICdhcnJheScsXG4gIH0sXG4gICdhdXRvLWlubGluZSc6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0lubGluZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZGVmaW5lZCBhdCBlbnYgZmlsZXMuJyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgZGVzY3JpcHRpb246ICdXaGV0aGVyIHdhdGNoIG1vZGUgaXMgZW5hYmxlZCBvciBub3QnLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBhbGlhczogJ3cnLFxuICB9LFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IGFwcEJ1aWxkZXIgPSB7XG4gIC4uLmJ1aWxkZXIsXG4gIG1vZHVsZVR5cGU6IHtcbiAgICBkZXNjcmlwdGlvbjogJ2VzbSwgY2pzLCBvciBlaXRoZXIgKGRlZmF1bHQpLicsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgYWxpYXM6ICdtJyxcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBmdW5jdGlvbnNCdWlsZGVyID0ge1xuICAuLi5hcHBCdWlsZGVyLFxuICBvbmx5UGFja2FnZUpzb246IHtcbiAgICBkZXNjcmlwdGlvbjogJ1doZXRoZXIgdG8gZ2VuZXJhdGUgb25seSBwYWNrYWdlLmpzb24uJyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gIH0sXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgbGliQnVpbGRlciA9IHtcbiAgLi4uYnVpbGRlcixcbiAgbW9kdWxlVHlwZToge1xuICAgIGRlc2NyaXB0aW9uOiAnZXNtLCBjanMsIGVpdGhlciwgb3IgYm90aCAoZGVmYXVsdCkuJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBhbGlhczogJ20nLFxuICB9LFxuICBkZWNsYXJhdGlvbk9ubHk6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0VtaXQgb25seSBkZWNsYXJhdGlvbiAoLmQudHMpIGZpbGVzIHdpdGhvdXQgYnVuZGxpbmcgSmF2YVNjcmlwdC4nLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEFueUJ1aWxkZXJUeXBlID0gdHlwZW9mIGFwcEJ1aWxkZXIgfCB0eXBlb2YgZnVuY3Rpb25zQnVpbGRlciB8IHR5cGVvZiBsaWJCdWlsZGVyO1xuIiwiaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7IHN0eWxlVGV4dCB9IGZyb20gJ25vZGU6dXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVFcnJvcihlcnJvcjogQnVpbGRFcnJvciwgcmVjb3ZlciA9IGZhbHNlKTogdm9pZCB7XG4gIGNvbnN0IG5hbWUgPSBlcnJvci5uYW1lIHx8IChlcnJvci5jYXVzZSBhcyBFcnJvcik/Lm5hbWU7XG4gIGNvbnN0IG5hbWVTZWN0aW9uID0gbmFtZSA/IGAke25hbWV9OiBgIDogJyc7XG4gIGNvbnN0IHBsdWdpblNlY3Rpb24gPSBlcnJvci5wbHVnaW4gPyBgKHBsdWdpbiAke2Vycm9yLnBsdWdpbn0pIGAgOiAnJztcbiAgY29uc3QgbWVzc2FnZSA9IGAke3BsdWdpblNlY3Rpb259JHtuYW1lU2VjdGlvbn0ke2Vycm9yLm1lc3NhZ2V9YDtcblxuICBjb25zdCBvdXRwdXRMaW5lcyA9IFtzdHlsZVRleHQoWydib2xkJywgJ3JlZCddLCBgWyFdICR7bWVzc2FnZX1gKV07XG5cbiAgaWYgKGVycm9yLnVybCkge1xuICAgIG91dHB1dExpbmVzLnB1c2goc3R5bGVUZXh0KCdjeWFuJywgZXJyb3IudXJsKSk7XG4gIH1cblxuICBpZiAoZXJyb3IubG9jKSB7XG4gICAgb3V0cHV0TGluZXMucHVzaChgJHtlcnJvci5sb2MuZmlsZSB8fCBlcnJvci5pZH0gKCR7ZXJyb3IubG9jLmxpbmV9OiR7ZXJyb3IubG9jLmNvbHVtbn0pYCk7XG4gIH0gZWxzZSBpZiAoZXJyb3IuaWQpIHtcbiAgICBvdXRwdXRMaW5lcy5wdXNoKGVycm9yLmlkKTtcbiAgfVxuXG4gIGlmIChlcnJvci5mcmFtZSkge1xuICAgIG91dHB1dExpbmVzLnB1c2goc3R5bGVUZXh0KCdkaW0nLCBlcnJvci5mcmFtZSkpO1xuICB9XG5cbiAgaWYgKGVycm9yLnN0YWNrKSB7XG4gICAgb3V0cHV0TGluZXMucHVzaChzdHlsZVRleHQoJ2RpbScsIGVycm9yLnN0YWNrLnJlcGxhY2UoYCR7bmFtZVNlY3Rpb259JHtlcnJvci5tZXNzYWdlfVxcbmAsICcnKSkpO1xuICB9XG5cbiAgb3V0cHV0TGluZXMucHVzaCgnJywgJycpO1xuICBjb25zb2xlLmVycm9yKG91dHB1dExpbmVzLmpvaW4oJ1xcbicpKTtcblxuICBpZiAoIXJlY292ZXIpIHByb2Nlc3MuZXhpdCgxKTtcbn1cblxuaW50ZXJmYWNlIEJ1aWxkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNhdXNlPzogdW5rbm93bjtcbiAgZnJhbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBsb2M/OiB7XG4gICAgY29sdW1uOiBudW1iZXI7XG4gICAgZmlsZT86IHN0cmluZztcbiAgICBsaW5lOiBudW1iZXI7XG4gIH07XG4gIHBsdWdpbj86IHN0cmluZztcbiAgdXJsPzogc3RyaW5nO1xufVxuIiwiaW1wb3J0IGZzIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgYnVpbHRpbk1vZHVsZXMgfSBmcm9tICdub2RlOm1vZHVsZSc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgdHlwZSB7IFBhY2thZ2VKc29uIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHR5cGUgeyBBcmd1bWVudHNUeXBlLCBUYXJnZXREZXRhaWwgfSBmcm9tICcuLi8uLi90eXBlcy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgYnVpbGRlciB9IGZyb20gJy4vYnVpbGRlci5qcyc7XG5cbmNvbnN0IG5vZGVCdWlsdGluTW9kdWxlcyA9IG5ldyBTZXQoYnVpbHRpbk1vZHVsZXMpO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRXh0ZXJuYWxNYXRjaGVyKFxuICBhcmd2OiBBcmd1bWVudHNUeXBlPHR5cGVvZiBidWlsZGVyPixcbiAgdGFyZ2V0RGV0YWlsOiBUYXJnZXREZXRhaWwsXG4gIHBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbixcbiAgbmFtZXNwYWNlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHBhY2thZ2VEaXJQYXRoOiBzdHJpbmdcbik6IChpZDogc3RyaW5nKSA9PiBib29sZWFuIHtcbiAgY29uc3QgZXh0ZXJuYWxEZXBlbmRlbmN5TmFtZXMgPSBuZXcgU2V0KFxuICAgIGNvbGxlY3RFeHRlcm5hbERlcGVuZGVuY2llcyhhcmd2LCB0YXJnZXREZXRhaWwsIHBhY2thZ2VKc29uLCBwYWNrYWdlRGlyUGF0aCwgbmFtZXNwYWNlKVxuICApO1xuICByZXR1cm4gKGlkKSA9PiBpc05vZGVCdWlsdGluKGlkKSB8fCBtYXRjaGVzTW9kdWxlT3JTdWJwYXRoKGlkLCBleHRlcm5hbERlcGVuZGVuY3lOYW1lcyk7XG59XG5cbi8qKiBDaGVja3Mgd2hldGhlciBgaWRgIGVxdWFscyBhIG5hbWUgaW4gYG5hbWVzYCBvciBpcyBhIHN1YnBhdGggb2YgaXQgKGUuZy4gYGxvZGFzaC5jaHVuay9pbmRleC5qc2ApLiAqL1xuZnVuY3Rpb24gbWF0Y2hlc01vZHVsZU9yU3VicGF0aChpZDogc3RyaW5nLCBuYW1lczogU2V0PHN0cmluZz4pOiBib29sZWFuIHtcbiAgaWYgKG5hbWVzLmhhcyhpZCkpIHJldHVybiB0cnVlO1xuICBmb3IgKGxldCBzbGFzaEluZGV4ID0gaWQuaW5kZXhPZignLycpOyBzbGFzaEluZGV4ICE9PSAtMTsgc2xhc2hJbmRleCA9IGlkLmluZGV4T2YoJy8nLCBzbGFzaEluZGV4ICsgMSkpIHtcbiAgICBpZiAobmFtZXMuaGFzKGlkLnNsaWNlKDAsIHNsYXNoSW5kZXgpKSkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0RXh0ZXJuYWxEZXBlbmRlbmNpZXMoXG4gIGFyZ3Y6IEFyZ3VtZW50c1R5cGU8dHlwZW9mIGJ1aWxkZXI+LFxuICB0YXJnZXREZXRhaWw6IFRhcmdldERldGFpbCxcbiAgcGFja2FnZUpzb246IFBhY2thZ2VKc29uLFxuICBwYWNrYWdlRGlyUGF0aDogc3RyaW5nLFxuICBuYW1lc3BhY2U6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogc3RyaW5nW10ge1xuICBjb25zdCBleHRlcm5hbERlcHMgPSBbLi4uKGFyZ3YuZXh0ZXJuYWwgPz8gW10pXS5tYXAoKGl0ZW0pID0+IGl0ZW0udG9TdHJpbmcoKSk7XG4gIGlmIChwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXM/LlsnQHByaXNtYS9jbGllbnQnXSkge1xuICAgIGV4dGVybmFsRGVwcy5wdXNoKCdwcmlzbWEtY2xpZW50Jyk7XG4gIH1cbiAgLy8gYGRlcHM6IHRydWVgIGRpZCBub3QgaGFuZGxlIGltcG9ydHMgc3VjaCBhcyBgbG9kYXNoLmNodW5rL2luZGV4LmpzYC5cbiAgZXh0ZXJuYWxEZXBzLnB1c2goXG4gICAgLi4uT2JqZWN0LmtleXMocGFja2FnZUpzb24uZGVwZW5kZW5jaWVzID8/IHt9KSxcbiAgICAuLi5PYmplY3Qua2V5cyhwYWNrYWdlSnNvbi5wZWVyRGVwZW5kZW5jaWVzID8/IHt9KSxcbiAgICAuLi5PYmplY3Qua2V5cyhwYWNrYWdlSnNvbi5vcHRpb25hbERlcGVuZGVuY2llcyA/PyB7fSlcbiAgKTtcbiAgLy8gQWRkIGV4dGVybmFsIGRlcGVuZGVuY2llcyBmcm9tIHNpYmxpbmcgcGFja2FnZXNcbiAgY29uc3QgcGFyZW50RGlyUGF0aCA9IHBhdGguZGlybmFtZShwYWNrYWdlRGlyUGF0aCk7XG4gIGlmIChmcy5leGlzdHNTeW5jKHBhdGguam9pbihwYXRoLmRpcm5hbWUocGFyZW50RGlyUGF0aCksICdwYWNrYWdlLmpzb24nKSkpIHtcbiAgICBjb25zdCBwYWNrYWdlRGlycyA9IGZzLnJlYWRkaXJTeW5jKHBhcmVudERpclBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgICBmb3IgKGNvbnN0IHBhY2thZ2VEaXIgb2YgcGFja2FnZURpcnMpIHtcbiAgICAgIGlmICghcGFja2FnZURpci5pc0RpcmVjdG9yeSgpKSBjb250aW51ZTtcblxuICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKHBhcmVudERpclBhdGgsIHBhY2thZ2VEaXIubmFtZSwgJ3BhY2thZ2UuanNvbicpO1xuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHBhY2thZ2VKc29uUGF0aCkpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBvdGhlclBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhY2thZ2VKc29uUGF0aCwgJ3V0ZjgnKSk7XG4gICAgICBpZiAocGFja2FnZUpzb24uZGVwZW5kZW5jaWVzPy5bb3RoZXJQYWNrYWdlSnNvbi5uYW1lID8/ICcnXSkge1xuICAgICAgICBleHRlcm5hbERlcHMucHVzaChcbiAgICAgICAgICAuLi5PYmplY3Qua2V5cyhvdGhlclBhY2thZ2VKc29uLmRlcGVuZGVuY2llcyA/PyB7fSksXG4gICAgICAgICAgLi4uT2JqZWN0LmtleXMob3RoZXJQYWNrYWdlSnNvbi5wZWVyRGVwZW5kZW5jaWVzID8/IHt9KSxcbiAgICAgICAgICAuLi5PYmplY3Qua2V5cyhvdGhlclBhY2thZ2VKc29uLm9wdGlvbmFsRGVwZW5kZW5jaWVzID8/IHt9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFuIGFwcCBidW5kbGVzIGl0cyBvd24gbmFtZXNwYWNlJ3MgcGFja2FnZXMgaW5zdGVhZCBvZiB0cmVhdGluZyB0aGVtIGFzIGV4dGVybmFsIGRlcGVuZGVuY2llcy5cbiAgY29uc3QgYnVuZGxlc093bk5hbWVzcGFjZSA9IHRhcmdldERldGFpbCA9PT0gJ2FwcC1ub2RlJyB8fCB0YXJnZXREZXRhaWwgPT09ICdmdW5jdGlvbnMnO1xuICBjb25zdCBidW5kbGVkUHJlZml4ID0gYnVuZGxlc093bk5hbWVzcGFjZSAmJiBuYW1lc3BhY2UgPyBgQCR7bmFtZXNwYWNlfS9gIDogdW5kZWZpbmVkO1xuICByZXR1cm4gYnVuZGxlZFByZWZpeCA/IGV4dGVybmFsRGVwcy5maWx0ZXIoKG5hbWUpID0+ICFuYW1lLnN0YXJ0c1dpdGgoYnVuZGxlZFByZWZpeCkpIDogZXh0ZXJuYWxEZXBzO1xufVxuXG5mdW5jdGlvbiBpc05vZGVCdWlsdGluKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlkLnN0YXJ0c1dpdGgoJ25vZGU6JykgfHwgbm9kZUJ1aWx0aW5Nb2R1bGVzLmhhcyhpZCk7XG59XG4iLCJpbXBvcnQgeyBwYXJzZVN5bmMsIHZpc2l0b3JLZXlzIH0gZnJvbSAnb3hjLXBhcnNlcic7XG5cbmNvbnN0IHNvdXJjZUZpbGVFeHRlbnNpb25zID0gWycuY2pzJywgJy5tanMnLCAnLmpzJywgJy5qc3gnLCAnLmN0cycsICcubXRzJywgJy50cycsICcudHN4J107XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RyYW5zZm9ybVRhcmdldEZpbGUoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHNvdXJjZUZpbGVFeHRlbnNpb25zLnNvbWUoKGV4dGVuc2lvbikgPT4gaWQuZW5kc1dpdGgoZXh0ZW5zaW9uKSkgJiYgIWlkLnN0YXJ0c1dpdGgoJ1xcMCcpICYmICFpc05vZGVNb2R1bGVzUGF0aChpZClcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNOb2RlTW9kdWxlc1BhdGgoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaWQuaW5jbHVkZXMoJy9ub2RlX21vZHVsZXMvJykgfHwgaWQuaW5jbHVkZXMoJ1xcXFxub2RlX21vZHVsZXNcXFxcJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNvdXJjZUZpbGUoaWQ6IHN0cmluZywgY29kZTogc3RyaW5nKTogUmV0dXJuVHlwZTx0eXBlb2YgcGFyc2VTeW5jPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGxhbmcgPSBnZXRQYXJzZXJMYW5nKGlkKTtcbiAgY29uc3Qgc291cmNlVHlwZSA9IGdldFBhcnNlclNvdXJjZVR5cGUoaWQpO1xuICBjb25zdCBhc3QgPSBwYXJzZVN5bmMoaWQsIGNvZGUsIHsgbGFuZywgc291cmNlVHlwZSB9KTtcbiAgaWYgKCFoYXNQYXJzZUVycm9yKGFzdCkpIHJldHVybiBhc3Q7XG4gIGlmIChpZC5lbmRzV2l0aCgnLmpzJykgJiYgc291cmNlVHlwZSA9PT0gJ3VuYW1iaWd1b3VzJykge1xuICAgIGNvbnN0IGNvbW1vbkpzQXN0ID0gcGFyc2VTeW5jKGlkLCBjb2RlLCB7IGxhbmcsIHNvdXJjZVR5cGU6ICdjb21tb25qcycgfSk7XG4gICAgaWYgKCFoYXNQYXJzZUVycm9yKGNvbW1vbkpzQXN0KSkgcmV0dXJuIGNvbW1vbkpzQXN0O1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhhc1BhcnNlRXJyb3IoYXN0OiBSZXR1cm5UeXBlPHR5cGVvZiBwYXJzZVN5bmM+KTogYm9vbGVhbiB7XG4gIHJldHVybiBhc3QuZXJyb3JzLnNvbWUoKGVycm9yKSA9PiBlcnJvci5zZXZlcml0eSA9PT0gJ0Vycm9yJyk7XG59XG5cbmZ1bmN0aW9uIGdldFBhcnNlckxhbmcoaWQ6IHN0cmluZyk6ICdqcycgfCAnanN4JyB8ICd0cycgfCAndHN4JyB7XG4gIGlmIChpZC5lbmRzV2l0aCgnLnRzeCcpKSByZXR1cm4gJ3RzeCc7XG4gIGlmIChpZC5lbmRzV2l0aCgnLnRzJykgfHwgaWQuZW5kc1dpdGgoJy5jdHMnKSB8fCBpZC5lbmRzV2l0aCgnLm10cycpKSByZXR1cm4gJ3RzJztcbiAgaWYgKGlkLmVuZHNXaXRoKCcuanN4JykpIHJldHVybiAnanN4JztcbiAgcmV0dXJuICdqcyc7XG59XG5cbmZ1bmN0aW9uIGdldFBhcnNlclNvdXJjZVR5cGUoaWQ6IHN0cmluZyk6ICdjb21tb25qcycgfCAndW5hbWJpZ3VvdXMnIHtcbiAgcmV0dXJuIGlkLmVuZHNXaXRoKCcuY2pzJykgfHwgaWQuZW5kc1dpdGgoJy5jdHMnKSA/ICdjb21tb25qcycgOiAndW5hbWJpZ3VvdXMnO1xufVxuXG5leHBvcnQgdHlwZSBBc3ROb2RlID0ge1xuICB0eXBlOiBzdHJpbmc7XG4gIHN0YXJ0OiBudW1iZXI7XG4gIGVuZDogbnVtYmVyO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFzdE5vZGVDaGlsZHJlbihub2RlOiBBc3ROb2RlKTogQXN0Tm9kZVtdIHtcbiAgcmV0dXJuICh2aXNpdG9yS2V5c1tub2RlLnR5cGVdID8/IFtdKVxuICAgIC5mbGF0TWFwKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gbm9kZVtrZXldO1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgIH0pXG4gICAgLmZpbHRlcigodmFsdWUpOiB2YWx1ZSBpcyBBc3ROb2RlID0+IGlzQXN0Tm9kZSh2YWx1ZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXN0Tm9kZVByb3BlcnR5KG5vZGU6IEFzdE5vZGUsIGtleTogc3RyaW5nKTogQXN0Tm9kZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHZhbHVlID0gbm9kZVtrZXldO1xuICByZXR1cm4gaXNBc3ROb2RlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXN0QXJyYXlQcm9wZXJ0eShub2RlOiBBc3ROb2RlLCBrZXk6IHN0cmluZyk6IEFzdE5vZGVbXSB7XG4gIGNvbnN0IHZhbHVlID0gbm9kZVtrZXldO1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIEFzdE5vZGUgPT4gaXNBc3ROb2RlKGl0ZW0pKSA6IFtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBc3ROb2RlKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgQXN0Tm9kZSB7XG4gIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mICh2YWx1ZSBhcyBBc3ROb2RlKS50eXBlID09PSAnc3RyaW5nJztcbn1cbiIsImltcG9ydCB0eXBlIHsgQXN0Tm9kZSB9IGZyb20gJy4vdHJhbnNmb3JtVXRpbHMuanMnO1xuaW1wb3J0IHsgZ2V0QXN0Tm9kZUNoaWxkcmVuLCBpc0FzdE5vZGUsIHBhcnNlU291cmNlRmlsZSB9IGZyb20gJy4vdHJhbnNmb3JtVXRpbHMuanMnO1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBjb2RlIGNvbnRhaW5zIGEgZGVjb3JhdG9yLCBpZ25vcmluZyBgQGAgaW4gY29tbWVudHMsIHN0cmluZ3MsIGFuZCByZWdleGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbnNEZWNvcmF0b3IoY29kZTogc3RyaW5nLCBpZCA9ICdmaWxlLnRzJyk6IGJvb2xlYW4ge1xuICAvLyBBIGRlY29yYXRvciByZXF1aXJlcyBhIGxpdGVyYWwgYEBgIGV2ZW4gd2hlbiBpdHMgaWRlbnRpZmllciB1c2VzIGVzY2FwZXMgc3VjaCBhcyBgXFx1MDA2M3VzdG9tYC5cbiAgaWYgKCFjb2RlLmluY2x1ZGVzKCdAJykpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBhc3QgPSBwYXJzZVNvdXJjZUZpbGUoaWQsIGNvZGUpO1xuICAvLyBJZiB0aGUgY29kZSBmYWlscyB0byBwYXJzZSwgbGV0IEJhYmVsIHRyYW5zZm9ybSBpdCBhbmQgcmVwb3J0IGEgcHJvcGVyIHN5bnRheCBlcnJvci5cbiAgaWYgKCFhc3QpIHJldHVybiB0cnVlO1xuICByZXR1cm4gaXNBc3ROb2RlKGFzdC5wcm9ncmFtKSAmJiBoYXNEZWNvcmF0b3JOb2RlKGFzdC5wcm9ncmFtKTtcbn1cblxuZnVuY3Rpb24gaGFzRGVjb3JhdG9yTm9kZShub2RlOiBBc3ROb2RlKTogYm9vbGVhbiB7XG4gIGlmIChub2RlLnR5cGUgPT09ICdEZWNvcmF0b3InKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGdldEFzdE5vZGVDaGlsZHJlbihub2RlKS5zb21lKChjaGlsZCkgPT4gaGFzRGVjb3JhdG9yTm9kZShjaGlsZCkpO1xufVxuIiwiaW1wb3J0IE1hZ2ljU3RyaW5nIGZyb20gJ21hZ2ljLXN0cmluZyc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbiwgU291cmNlTWFwSW5wdXQgfSBmcm9tICdyb2xsZG93bic7XG5cbmltcG9ydCB0eXBlIHsgQXN0Tm9kZSB9IGZyb20gJy4vdHJhbnNmb3JtVXRpbHMuanMnO1xuaW1wb3J0IHtcbiAgZ2V0QXN0QXJyYXlQcm9wZXJ0eSxcbiAgZ2V0QXN0Tm9kZUNoaWxkcmVuLFxuICBnZXRBc3ROb2RlUHJvcGVydHksXG4gIGlzQXN0Tm9kZSxcbiAgaXNUcmFuc2Zvcm1UYXJnZXRGaWxlLFxuICBwYXJzZVNvdXJjZUZpbGUsXG59IGZyb20gJy4vdHJhbnNmb3JtVXRpbHMuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uc29sZVJlbW92YWxFeGNsdWRlZE1ldGhvZHMoKTogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQge1xuICBjb25zdCB7IGVudiB9ID0gcHJvY2VzcztcbiAgaWYgKGVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSByZXR1cm4gbmV3IFNldChbJ2Vycm9yJywgJ2luZm8nLCAnd2FybiddKTtcbiAgaWYgKGVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnKSByZXR1cm4gbmV3IFNldChbJ2RlYnVnJywgJ2Vycm9yJywgJ2luZm8nLCAnd2FybiddKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUNvbnNvbGVQbHVnaW4oZXhjbHVkZWRNZXRob2RzOiBTZXQ8c3RyaW5nPik6IFBsdWdpbiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3JlbW92ZS1jb25zb2xlJyxcbiAgICB0cmFuc2Zvcm0oY29kZSwgaWQpIHtcbiAgICAgIGlmICghaXNUcmFuc2Zvcm1UYXJnZXRGaWxlKGlkKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIC8vIEEgZ2xvYmFsIGBjb25zb2xlYCBtYXkgYmUgd3JpdHRlbiB3aXRoIFVuaWNvZGUgZXNjYXBlcyAoYFxcdTAwNjNvbnNvbGVgKSwgd2hpY2ggdGhlIHBhcnNlclxuICAgICAgLy8gbm9ybWFsaXplcywgc28gdGhlIGZhc3QgcGF0aCBtdXN0IGxldCBlc2NhcGVkIGlkZW50aWZpZXJzIHRocm91Z2ggdG9vLlxuICAgICAgaWYgKCEvY29uc29sZXxcXFxcdS8udGVzdChjb2RlKSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgcmV0dXJuIHJlbW92ZUNvbnNvbGUoY29kZSwgaWQsIGV4Y2x1ZGVkTWV0aG9kcyk7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ29uc29sZShjb2RlOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGV4Y2x1ZGVkTWV0aG9kczogU2V0PHN0cmluZz4pOiB7IGNvZGU6IHN0cmluZzsgbWFwOiBTb3VyY2VNYXBJbnB1dCB9IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYXN0ID0gcGFyc2VTb3VyY2VGaWxlKGlkLCBjb2RlKTtcbiAgaWYgKCFhc3QgfHwgIWlzQXN0Tm9kZShhc3QucHJvZ3JhbSkpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgbWFnaWNTdHJpbmcgPSBuZXcgTWFnaWNTdHJpbmcoY29kZSk7XG4gIGNvbnN0IHJlcGxhY2VtZW50czogQ29uc29sZVJlcGxhY2VtZW50W10gPSBbXTtcbiAgY29uc3Qgc2NvcGVzOiBDb25zb2xlU2NvcGVbXSA9IFtdO1xuICBjb2xsZWN0Q29uc29sZVJlcGxhY2VtZW50cyhhc3QucHJvZ3JhbSwgW10sIHNjb3BlcywgcmVwbGFjZW1lbnRzLCBleGNsdWRlZE1ldGhvZHMpO1xuICBmb3IgKGNvbnN0IHJlcGxhY2VtZW50IG9mIHNlbGVjdENvbnNvbGVSZXBsYWNlbWVudHMocmVwbGFjZW1lbnRzKSkge1xuICAgIG1hZ2ljU3RyaW5nLm92ZXJ3cml0ZShyZXBsYWNlbWVudC5zdGFydCwgcmVwbGFjZW1lbnQuZW5kLCByZXBsYWNlbWVudC52YWx1ZSk7XG4gIH1cblxuICBpZiAoIW1hZ2ljU3RyaW5nLmhhc0NoYW5nZWQoKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHtcbiAgICBjb2RlOiBtYWdpY1N0cmluZy50b1N0cmluZygpLFxuICAgIG1hcDogbWFnaWNTdHJpbmcuZ2VuZXJhdGVNYXAoeyBoaXJlczogdHJ1ZSB9KSBhcyBTb3VyY2VNYXBJbnB1dCxcbiAgfTtcbn1cblxudHlwZSBDb25zb2xlUmVwbGFjZW1lbnQgPSB7XG4gIHN0YXJ0OiBudW1iZXI7XG4gIGVuZDogbnVtYmVyO1xuICB2YWx1ZTogc3RyaW5nO1xufTtcblxudHlwZSBDb25zb2xlU2NvcGUgPSB7XG4gIGVuZDogbnVtYmVyO1xuICBzaGFkb3dzQ29uc29sZTogYm9vbGVhbjtcbiAgc3RhcnQ6IG51bWJlcjtcbn07XG5cbmNvbnN0IG5vb3BGdW5jdGlvbkV4cHJlc3Npb24gPSAnKGZ1bmN0aW9uICgpIHt9KSc7XG5jb25zdCB1bmRlZmluZWRFeHByZXNzaW9uID0gJyh2b2lkIDApJztcblxuZnVuY3Rpb24gY29sbGVjdENvbnNvbGVSZXBsYWNlbWVudHMoXG4gIG5vZGU6IEFzdE5vZGUsXG4gIGFuY2VzdG9yczogQXN0Tm9kZVtdLFxuICBzY29wZXM6IENvbnNvbGVTY29wZVtdLFxuICByZXBsYWNlbWVudHM6IENvbnNvbGVSZXBsYWNlbWVudFtdLFxuICBleGNsdWRlZE1ldGhvZHM6IFNldDxzdHJpbmc+XG4pOiB2b2lkIHtcbiAgY29uc3QgcGFyZW50ID0gYW5jZXN0b3JzLmF0KC0xKTtcbiAgY29uc3Qgc2NvcGUgPSBnZXRDb25zb2xlU2NvcGUobm9kZSwgcGFyZW50KTtcbiAgaWYgKHNjb3BlKSBzY29wZXMucHVzaChzY29wZSk7XG5cbiAgaWYgKCFpc0NvbnNvbGVTaGFkb3dlZChzY29wZXMsIG5vZGUpICYmIG5vZGUudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJykge1xuICAgIGNvbGxlY3RDb25zb2xlQ2FsbFJlcGxhY2VtZW50KG5vZGUsIGFuY2VzdG9ycywgcmVwbGFjZW1lbnRzLCBleGNsdWRlZE1ldGhvZHMpO1xuICB9XG4gIGlmICghaXNDb25zb2xlU2hhZG93ZWQoc2NvcGVzLCBub2RlKSAmJiBub2RlLnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJykge1xuICAgIGNvbGxlY3RDb25zb2xlTWVtYmVyUmVwbGFjZW1lbnQobm9kZSwgYW5jZXN0b3JzLCByZXBsYWNlbWVudHMsIGV4Y2x1ZGVkTWV0aG9kcyk7XG4gIH1cblxuICBjb25zdCBjaGlsZEFuY2VzdG9ycyA9IFsuLi5hbmNlc3RvcnMsIG5vZGVdO1xuICBmb3IgKGNvbnN0IGNoaWxkIG9mIGdldEFzdE5vZGVDaGlsZHJlbihub2RlKSkge1xuICAgIGNvbGxlY3RDb25zb2xlUmVwbGFjZW1lbnRzKGNoaWxkLCBjaGlsZEFuY2VzdG9ycywgc2NvcGVzLCByZXBsYWNlbWVudHMsIGV4Y2x1ZGVkTWV0aG9kcyk7XG4gIH1cblxuICBpZiAoc2NvcGUpIHNjb3Blcy5wb3AoKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29uc29sZVNjb3BlKG5vZGU6IEFzdE5vZGUsIHBhcmVudDogQXN0Tm9kZSB8IHVuZGVmaW5lZCk6IENvbnNvbGVTY29wZSB8IHVuZGVmaW5lZCB7XG4gIGlmIChub2RlLnR5cGUgPT09ICdQcm9ncmFtJykge1xuICAgIHJldHVybiB7IGVuZDogbm9kZS5lbmQsIHNoYWRvd3NDb25zb2xlOiBoYXNQcm9ncmFtQ29uc29sZUJpbmRpbmcobm9kZSksIHN0YXJ0OiBub2RlLnN0YXJ0IH07XG4gIH1cbiAgaWYgKGlzQ29uc29sZUZ1bmN0aW9uU2NvcGVOb2RlKG5vZGUpKSB7XG4gICAgcmV0dXJuIHsgZW5kOiBub2RlLmVuZCwgc2hhZG93c0NvbnNvbGU6IGhhc0Z1bmN0aW9uQ29uc29sZUJpbmRpbmcobm9kZSksIHN0YXJ0OiBub2RlLnN0YXJ0IH07XG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgIGNvbnN0IGlzRnVuY3Rpb25Cb2R5ID0gcGFyZW50ID8gaXNDb25zb2xlRnVuY3Rpb25TY29wZU5vZGUocGFyZW50KSA6IGZhbHNlO1xuICAgIHJldHVybiB7IGVuZDogbm9kZS5lbmQsIHNoYWRvd3NDb25zb2xlOiBoYXNCbG9ja0NvbnNvbGVCaW5kaW5nKG5vZGUsIGZhbHNlKSB8fCAoaXNGdW5jdGlvbkJvZHkgJiYgaGFzSG9pc3RlZFZhckNvbnNvbGVCaW5kaW5nKG5vZGUpKSwgc3RhcnQ6IG5vZGUuc3RhcnQgfTtcbiAgfVxuICBpZiAobm9kZS50eXBlID09PSAnQ2F0Y2hDbGF1c2UnKSB7XG4gICAgcmV0dXJuIHsgZW5kOiBub2RlLmVuZCwgc2hhZG93c0NvbnNvbGU6IGhhc0NvbnNvbGVCaW5kaW5nUGF0dGVybihub2RlLnBhcmFtKSwgc3RhcnQ6IG5vZGUuc3RhcnQgfTtcbiAgfVxuICAvLyBBIG5hbWVzcGFjZSBib2R5IGhvbGRzIG9yZGluYXJ5IGRlY2xhcmF0aW9ucyB0b28sIHNvIGl0IHNjb3BlcyBhIGBjb25zb2xlYCBiaW5kaW5nIGxpa2UgYSBibG9jay5cbiAgLy8gT25seSB0aGUgbmFtZXNwYWNlJ3Mgb3duIG5hbWUgKGBuYW1lc3BhY2UgY29uc29sZSB7fWApIGlzIGRlbGliZXJhdGVseSBub3QgdHJlYXRlZCBhcyBhIGJpbmRpbmcuXG4gIGlmIChub2RlLnR5cGUgPT09ICdTdGF0aWNCbG9jaycgfHwgbm9kZS50eXBlID09PSAnVFNNb2R1bGVCbG9jaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW5kOiBub2RlLmVuZCxcbiAgICAgIHNoYWRvd3NDb25zb2xlOiBoYXNCbG9ja0NvbnNvbGVCaW5kaW5nKG5vZGUsIGZhbHNlKSB8fCBoYXNIb2lzdGVkVmFyQ29uc29sZUJpbmRpbmcobm9kZSksXG4gICAgICBzdGFydDogbm9kZS5zdGFydCxcbiAgICB9O1xuICB9XG4gIGlmIChub2RlLnR5cGUgPT09ICdGb3JTdGF0ZW1lbnQnIHx8IG5vZGUudHlwZSA9PT0gJ0ZvckluU3RhdGVtZW50JyB8fCBub2RlLnR5cGUgPT09ICdGb3JPZlN0YXRlbWVudCcpIHtcbiAgICByZXR1cm4geyBlbmQ6IG5vZGUuZW5kLCBzaGFkb3dzQ29uc29sZTogaGFzTG9vcENvbnNvbGVCaW5kaW5nKG5vZGUpLCBzdGFydDogbm9kZS5zdGFydCB9O1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhhc1Byb2dyYW1Db25zb2xlQmluZGluZyhub2RlOiBBc3ROb2RlKTogYm9vbGVhbiB7XG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIGdldEFzdEFycmF5UHJvcGVydHkobm9kZSwgJ2JvZHknKSkge1xuICAgIGlmIChoYXNEZWNsYXJhdGlvbkNvbnNvbGVCaW5kaW5nKHN0YXRlbWVudCwgdHJ1ZSkpIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBoYXNIb2lzdGVkVmFyQ29uc29sZUJpbmRpbmcobm9kZSk7XG59XG5cbmZ1bmN0aW9uIGhhc0Z1bmN0aW9uQ29uc29sZUJpbmRpbmcobm9kZTogQXN0Tm9kZSk6IGJvb2xlYW4ge1xuICBpZiAoaGFzQ29uc29sZUJpbmRpbmdQYXR0ZXJuKG5vZGUuaWQpKSByZXR1cm4gdHJ1ZTtcbiAgZm9yIChjb25zdCBwYXJhbSBvZiBnZXRBc3RBcnJheVByb3BlcnR5KG5vZGUsICdwYXJhbXMnKSkge1xuICAgIGlmIChoYXNDb25zb2xlQmluZGluZ1BhdHRlcm4ocGFyYW0pKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGhhc0Jsb2NrQ29uc29sZUJpbmRpbmcobm9kZTogQXN0Tm9kZSwgaW5jbHVkZVZhcjogYm9vbGVhbik6IGJvb2xlYW4ge1xuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBnZXRBc3RBcnJheVByb3BlcnR5KG5vZGUsICdib2R5JykpIHtcbiAgICBpZiAoaGFzRGVjbGFyYXRpb25Db25zb2xlQmluZGluZyhzdGF0ZW1lbnQsIGluY2x1ZGVWYXIpKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGhhc0xvb3BDb25zb2xlQmluZGluZyhub2RlOiBBc3ROb2RlKTogYm9vbGVhbiB7XG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gZ2V0QXN0Tm9kZVByb3BlcnR5KG5vZGUsIG5vZGUudHlwZSA9PT0gJ0ZvclN0YXRlbWVudCcgPyAnaW5pdCcgOiAnbGVmdCcpO1xuICByZXR1cm4gISFkZWNsYXJhdGlvbiAmJiBkZWNsYXJhdGlvbi50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicgJiYgZGVjbGFyYXRpb24ua2luZCAhPT0gJ3ZhcicgJiYgaGFzVmFyaWFibGVEZWNsYXJhdGlvbkNvbnNvbGVCaW5kaW5nKGRlY2xhcmF0aW9uKTtcbn1cblxuZnVuY3Rpb24gaGFzSG9pc3RlZFZhckNvbnNvbGVCaW5kaW5nKHJvb3Q6IEFzdE5vZGUgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgaWYgKCFyb290KSByZXR1cm4gZmFsc2U7XG5cbiAgZm9yIChjb25zdCBjaGlsZCBvZiBnZXRBc3ROb2RlQ2hpbGRyZW4ocm9vdCkpIHtcbiAgICBpZiAoXG4gICAgICBjaGlsZCAhPT0gcm9vdCAmJlxuICAgICAgKGlzQ29uc29sZUZ1bmN0aW9uU2NvcGVOb2RlKGNoaWxkKSB8fCBjaGlsZC50eXBlID09PSAnU3RhdGljQmxvY2snIHx8IGNoaWxkLnR5cGUgPT09ICdUU01vZHVsZUJsb2NrJylcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBjaGlsZC50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicgJiZcbiAgICAgIGNoaWxkLmtpbmQgPT09ICd2YXInICYmXG4gICAgICBoYXNWYXJpYWJsZURlY2xhcmF0aW9uQ29uc29sZUJpbmRpbmcoY2hpbGQpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGhhc0hvaXN0ZWRWYXJDb25zb2xlQmluZGluZyhjaGlsZCkpIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaGFzSW1wb3J0Q29uc29sZUJpbmRpbmcobm9kZTogQXN0Tm9kZSk6IGJvb2xlYW4ge1xuICBpZiAobm9kZS5pbXBvcnRLaW5kID09PSAndHlwZScpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGdldEFzdEFycmF5UHJvcGVydHkobm9kZSwgJ3NwZWNpZmllcnMnKS5zb21lKFxuICAgIChzcGVjaWZpZXIpID0+IHNwZWNpZmllci5pbXBvcnRLaW5kICE9PSAndHlwZScgJiYgaGFzQ29uc29sZUJpbmRpbmdQYXR0ZXJuKHNwZWNpZmllci5sb2NhbClcbiAgKTtcbn1cblxuZnVuY3Rpb24gaGFzRGVjbGFyYXRpb25Db25zb2xlQmluZGluZyhub2RlOiBBc3ROb2RlLCBpbmNsdWRlVmFyOiBib29sZWFuKTogYm9vbGVhbiB7XG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gZ2V0RXhwb3J0RGVjbGFyYXRpb24obm9kZSkgPz8gbm9kZTtcbiAgaWYgKGRlY2xhcmF0aW9uLmRlY2xhcmUgPT09IHRydWUpIHJldHVybiBmYWxzZTtcbiAgaWYgKGRlY2xhcmF0aW9uLnR5cGUgPT09ICdJbXBvcnREZWNsYXJhdGlvbicpIHJldHVybiBoYXNJbXBvcnRDb25zb2xlQmluZGluZyhkZWNsYXJhdGlvbik7XG4gIGlmIChkZWNsYXJhdGlvbi50eXBlID09PSAnRnVuY3Rpb25EZWNsYXJhdGlvbicgfHwgZGVjbGFyYXRpb24udHlwZSA9PT0gJ0NsYXNzRGVjbGFyYXRpb24nKSB7XG4gICAgcmV0dXJuIGhhc0NvbnNvbGVCaW5kaW5nUGF0dGVybihkZWNsYXJhdGlvbi5pZCk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICBkZWNsYXJhdGlvbi50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicgJiZcbiAgICAoaW5jbHVkZVZhciB8fCBkZWNsYXJhdGlvbi5raW5kICE9PSAndmFyJykgJiZcbiAgICBoYXNWYXJpYWJsZURlY2xhcmF0aW9uQ29uc29sZUJpbmRpbmcoZGVjbGFyYXRpb24pXG4gICk7XG59XG5cbmZ1bmN0aW9uIGhhc1ZhcmlhYmxlRGVjbGFyYXRpb25Db25zb2xlQmluZGluZyhub2RlOiBBc3ROb2RlKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRBc3RBcnJheVByb3BlcnR5KG5vZGUsICdkZWNsYXJhdGlvbnMnKS5zb21lKChkZWNsYXJhdGlvbikgPT5cbiAgICBoYXNDb25zb2xlQmluZGluZ1BhdHRlcm4oZ2V0QXN0Tm9kZVByb3BlcnR5KGRlY2xhcmF0aW9uLCAnaWQnKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gaGFzQ29uc29sZUJpbmRpbmdQYXR0ZXJuKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmICghaXNBc3ROb2RlKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmICh2YWx1ZS50eXBlID09PSAnSWRlbnRpZmllcicgJiYgdmFsdWUubmFtZSA9PT0gJ2NvbnNvbGUnKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHZhbHVlLnR5cGUgPT09ICdBc3NpZ25tZW50UGF0dGVybicgfHwgdmFsdWUudHlwZSA9PT0gJ1Jlc3RFbGVtZW50Jykge1xuICAgIHJldHVybiBoYXNDb25zb2xlQmluZGluZ1BhdHRlcm4odmFsdWUubGVmdCA/PyB2YWx1ZS5hcmd1bWVudCk7XG4gIH1cbiAgaWYgKHZhbHVlLnR5cGUgPT09ICdUU1BhcmFtZXRlclByb3BlcnR5Jykge1xuICAgIHJldHVybiBoYXNDb25zb2xlQmluZGluZ1BhdHRlcm4odmFsdWUucGFyYW1ldGVyKTtcbiAgfVxuICBpZiAodmFsdWUudHlwZSA9PT0gJ0FycmF5UGF0dGVybicpIHtcbiAgICByZXR1cm4gZ2V0QXN0QXJyYXlQcm9wZXJ0eSh2YWx1ZSwgJ2VsZW1lbnRzJykuc29tZSgoZWxlbWVudCkgPT4gaGFzQ29uc29sZUJpbmRpbmdQYXR0ZXJuKGVsZW1lbnQpKTtcbiAgfVxuICBpZiAodmFsdWUudHlwZSA9PT0gJ09iamVjdFBhdHRlcm4nKSB7XG4gICAgcmV0dXJuIGdldEFzdEFycmF5UHJvcGVydHkodmFsdWUsICdwcm9wZXJ0aWVzJykuc29tZSgocHJvcGVydHkpID0+XG4gICAgICBoYXNDb25zb2xlQmluZGluZ1BhdHRlcm4ocHJvcGVydHkudmFsdWUgPz8gcHJvcGVydHkuYXJndW1lbnQpXG4gICAgKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzQ29uc29sZUZ1bmN0aW9uU2NvcGVOb2RlKG5vZGU6IEFzdE5vZGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ0Z1bmN0aW9uRGVjbGFyYXRpb24nIHx8IG5vZGUudHlwZSA9PT0gJ0Z1bmN0aW9uRXhwcmVzc2lvbicgfHwgbm9kZS50eXBlID09PSAnQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24nO1xufVxuXG5mdW5jdGlvbiBpc0NvbnNvbGVTaGFkb3dlZChzY29wZXM6IENvbnNvbGVTY29wZVtdLCBub2RlOiBBc3ROb2RlKTogYm9vbGVhbiB7XG4gIHJldHVybiBzY29wZXMuc29tZSgoc2NvcGUpID0+IHNjb3BlLnNoYWRvd3NDb25zb2xlICYmIHNjb3BlLnN0YXJ0IDw9IG5vZGUuc3RhcnQgJiYgbm9kZS5lbmQgPD0gc2NvcGUuZW5kKTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdENvbnNvbGVDYWxsUmVwbGFjZW1lbnQoXG4gIG5vZGU6IEFzdE5vZGUsXG4gIGFuY2VzdG9yczogQXN0Tm9kZVtdLFxuICByZXBsYWNlbWVudHM6IENvbnNvbGVSZXBsYWNlbWVudFtdLFxuICBleGNsdWRlZE1ldGhvZHM6IFNldDxzdHJpbmc+XG4pOiB2b2lkIHtcbiAgY29uc3QgcGFyZW50ID0gYW5jZXN0b3JzLmF0KC0xKTtcbiAgY29uc3QgY2FsbGVlID0gZ2V0QXN0Tm9kZVByb3BlcnR5KG5vZGUsICdjYWxsZWUnKTtcbiAgaWYgKG5vZGUub3B0aW9uYWwgPT09IHRydWUpIHJldHVybjtcbiAgaWYgKCFjYWxsZWUgfHwgIWlzSW5jbHVkZWRDb25zb2xlTWVtYmVyKGNhbGxlZSwgZXhjbHVkZWRNZXRob2RzKSkge1xuICAgIGlmIChjYWxsZWUgJiYgaXNJbmNsdWRlZENvbnNvbGVCaW5kTWVtYmVyKGNhbGxlZSwgZXhjbHVkZWRNZXRob2RzKSkge1xuICAgICAgcmVwbGFjZW1lbnRzLnB1c2goeyBzdGFydDogbm9kZS5zdGFydCwgZW5kOiBub2RlLmVuZCwgdmFsdWU6IGdldE5vb3BGdW5jdGlvblJlcGxhY2VtZW50KG5vZGUsIGFuY2VzdG9ycykgfSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwYXJlbnQ/LnR5cGUgPT09ICdFeHByZXNzaW9uU3RhdGVtZW50Jykge1xuICAgIHJlcGxhY2VtZW50cy5wdXNoKHsgc3RhcnQ6IHBhcmVudC5zdGFydCwgZW5kOiBwYXJlbnQuZW5kLCB2YWx1ZTogJzsnIH0pO1xuICB9IGVsc2Uge1xuICAgIHJlcGxhY2VtZW50cy5wdXNoKHsgc3RhcnQ6IG5vZGUuc3RhcnQsIGVuZDogbm9kZS5lbmQsIHZhbHVlOiBnZXRVbmRlZmluZWRFeHByZXNzaW9uUmVwbGFjZW1lbnQobm9kZSwgYW5jZXN0b3JzKSB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb2xsZWN0Q29uc29sZU1lbWJlclJlcGxhY2VtZW50KFxuICBub2RlOiBBc3ROb2RlLFxuICBhbmNlc3RvcnM6IEFzdE5vZGVbXSxcbiAgcmVwbGFjZW1lbnRzOiBDb25zb2xlUmVwbGFjZW1lbnRbXSxcbiAgZXhjbHVkZWRNZXRob2RzOiBTZXQ8c3RyaW5nPlxuKTogdm9pZCB7XG4gIGNvbnN0IHBhcmVudCA9IGFuY2VzdG9ycy5hdCgtMSk7XG4gIGNvbnN0IGdyYW5kcGFyZW50ID0gYW5jZXN0b3JzLmF0KC0yKTtcbiAgaWYgKCFpc0luY2x1ZGVkQ29uc29sZU1lbWJlcihub2RlLCBleGNsdWRlZE1ldGhvZHMpIHx8IHBhcmVudD8udHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nKSByZXR1cm47XG4gIGlmIChwYXJlbnQ/LnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbicgJiYgcGFyZW50LmNhbGxlZSA9PT0gbm9kZSAmJiBwYXJlbnQub3B0aW9uYWwgIT09IHRydWUpIHJldHVybjtcbiAgaWYgKGlzQ29uc29sZUFzc2lnbm1lbnRUYXJnZXQobm9kZSwgcGFyZW50LCBncmFuZHBhcmVudCkpIHJldHVybjtcblxuICBpZiAocGFyZW50Py50eXBlID09PSAnQXNzaWdubWVudEV4cHJlc3Npb24nICYmIHBhcmVudC5sZWZ0ID09PSBub2RlKSB7XG4gICAgY29uc3QgcmlnaHQgPSBnZXRBc3ROb2RlUHJvcGVydHkocGFyZW50LCAncmlnaHQnKTtcbiAgICBpZiAocmlnaHQpIHtcbiAgICAgIHJlcGxhY2VtZW50cy5wdXNoKHsgc3RhcnQ6IHJpZ2h0LnN0YXJ0LCBlbmQ6IHJpZ2h0LmVuZCwgdmFsdWU6IGdldE5vb3BGdW5jdGlvblJlcGxhY2VtZW50KHJpZ2h0LCBhbmNlc3RvcnMpIH0pO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICByZXBsYWNlbWVudHMucHVzaCh7IHN0YXJ0OiBub2RlLnN0YXJ0LCBlbmQ6IG5vZGUuZW5kLCB2YWx1ZTogZ2V0Tm9vcEZ1bmN0aW9uUmVwbGFjZW1lbnQobm9kZSwgYW5jZXN0b3JzKSB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0VW5kZWZpbmVkRXhwcmVzc2lvblJlcGxhY2VtZW50KG5vZGU6IEFzdE5vZGUsIGFuY2VzdG9yczogQXN0Tm9kZVtdKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5lZWRzTGVhZGluZ1N0YXRlbWVudFNlbWljb2xvbihub2RlLCBhbmNlc3RvcnMpID8gYDske3VuZGVmaW5lZEV4cHJlc3Npb259YCA6IHVuZGVmaW5lZEV4cHJlc3Npb247XG59XG5cbmZ1bmN0aW9uIGdldE5vb3BGdW5jdGlvblJlcGxhY2VtZW50KG5vZGU6IEFzdE5vZGUsIGFuY2VzdG9yczogQXN0Tm9kZVtdKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5lZWRzTGVhZGluZ1N0YXRlbWVudFNlbWljb2xvbihub2RlLCBhbmNlc3RvcnMpID8gYDske25vb3BGdW5jdGlvbkV4cHJlc3Npb259YCA6IG5vb3BGdW5jdGlvbkV4cHJlc3Npb247XG59XG5cbmZ1bmN0aW9uIG5lZWRzTGVhZGluZ1N0YXRlbWVudFNlbWljb2xvbihub2RlOiBBc3ROb2RlLCBhbmNlc3RvcnM6IEFzdE5vZGVbXSk6IGJvb2xlYW4ge1xuICBjb25zdCBzdGF0ZW1lbnRJbmRleCA9IGFuY2VzdG9ycy5maW5kTGFzdEluZGV4KChhbmNlc3RvcikgPT4gYW5jZXN0b3IudHlwZSA9PT0gJ0V4cHJlc3Npb25TdGF0ZW1lbnQnKTtcbiAgaWYgKHN0YXRlbWVudEluZGV4IDwgMCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBzdGF0ZW1lbnQgPSBhbmNlc3RvcnNbc3RhdGVtZW50SW5kZXhdO1xuICBpZiAoIXN0YXRlbWVudCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBzdGF0ZW1lbnRQYXJlbnQgPSBhbmNlc3RvcnNbc3RhdGVtZW50SW5kZXggLSAxXTtcbiAgcmV0dXJuIHN0YXRlbWVudC5zdGFydCA9PT0gbm9kZS5zdGFydCAmJiBpc1N0YXRlbWVudExpc3ROb2RlKHN0YXRlbWVudFBhcmVudCk7XG59XG5cbmZ1bmN0aW9uIGlzU3RhdGVtZW50TGlzdE5vZGUobm9kZTogQXN0Tm9kZSB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAvLyBBIGBjYXNlYCBjbGF1c2UgYW5kIGEgbmFtZXNwYWNlIGJvZHkgYXJlIHN0YXRlbWVudCBsaXN0cyB0b286IGEgcmVwbGFjZW1lbnQgc3RhcnRpbmcgYSBzdGF0ZW1lbnRcbiAgLy8gdGhlcmUgc3RpbGwgbmVlZHMgdGhlIGxlYWRpbmcgc2VtaWNvbG9uIHRoYXQga2VlcHMgaXQgZnJvbSBiaW5kaW5nIHRvIHRoZSBwcmV2aW91cyBleHByZXNzaW9uLlxuICByZXR1cm4gKFxuICAgIG5vZGU/LnR5cGUgPT09ICdQcm9ncmFtJyB8fFxuICAgIG5vZGU/LnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcgfHxcbiAgICBub2RlPy50eXBlID09PSAnU3RhdGljQmxvY2snIHx8XG4gICAgbm9kZT8udHlwZSA9PT0gJ1N3aXRjaENhc2UnIHx8XG4gICAgbm9kZT8udHlwZSA9PT0gJ1RTTW9kdWxlQmxvY2snXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzQ29uc29sZUFzc2lnbm1lbnRUYXJnZXQoXG4gIG5vZGU6IEFzdE5vZGUsXG4gIHBhcmVudDogQXN0Tm9kZSB8IHVuZGVmaW5lZCxcbiAgZ3JhbmRwYXJlbnQ6IEFzdE5vZGUgfCB1bmRlZmluZWRcbik6IGJvb2xlYW4ge1xuICBpZiAocGFyZW50Py50eXBlID09PSAnVXBkYXRlRXhwcmVzc2lvbicgJiYgcGFyZW50LmFyZ3VtZW50ID09PSBub2RlKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKChwYXJlbnQ/LnR5cGUgPT09ICdGb3JJblN0YXRlbWVudCcgfHwgcGFyZW50Py50eXBlID09PSAnRm9yT2ZTdGF0ZW1lbnQnKSAmJiBwYXJlbnQubGVmdCA9PT0gbm9kZSkgcmV0dXJuIHRydWU7XG4gIGlmIChwYXJlbnQ/LnR5cGUgPT09ICdBcnJheVBhdHRlcm4nKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHBhcmVudD8udHlwZSA9PT0gJ0Fzc2lnbm1lbnRQYXR0ZXJuJyAmJiBwYXJlbnQubGVmdCA9PT0gbm9kZSkgcmV0dXJuIHRydWU7XG4gIHJldHVybiBwYXJlbnQ/LnR5cGUgPT09ICdQcm9wZXJ0eScgJiYgcGFyZW50LnZhbHVlID09PSBub2RlICYmIGdyYW5kcGFyZW50Py50eXBlID09PSAnT2JqZWN0UGF0dGVybic7XG59XG5cbmZ1bmN0aW9uIGlzSW5jbHVkZWRDb25zb2xlTWVtYmVyKG5vZGU6IEFzdE5vZGUsIGV4Y2x1ZGVkTWV0aG9kczogU2V0PHN0cmluZz4pOiBib29sZWFuIHtcbiAgaWYgKG5vZGUudHlwZSAhPT0gJ01lbWJlckV4cHJlc3Npb24nKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3Qgb2JqZWN0ID0gZ2V0QXN0Tm9kZVByb3BlcnR5KG5vZGUsICdvYmplY3QnKTtcbiAgY29uc3QgcHJvcGVydHkgPSBnZXRBc3ROb2RlUHJvcGVydHkobm9kZSwgJ3Byb3BlcnR5Jyk7XG4gIGlmIChub2RlLm9wdGlvbmFsID09PSB0cnVlKSByZXR1cm4gZmFsc2U7XG4gIGlmICghb2JqZWN0IHx8ICFwcm9wZXJ0eSB8fCBpc0V4Y2x1ZGVkQ29uc29sZVByb3BlcnR5KG5vZGUsIHByb3BlcnR5LCBleGNsdWRlZE1ldGhvZHMpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChpc0dsb2JhbENvbnNvbGVJZGVudGlmaWVyKG9iamVjdCkpIHJldHVybiB0cnVlO1xuXG4gIHJldHVybiAoXG4gICAgb2JqZWN0LnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJyAmJlxuICAgIGlzR2xvYmFsQ29uc29sZUlkZW50aWZpZXIoZ2V0QXN0Tm9kZVByb3BlcnR5KG9iamVjdCwgJ29iamVjdCcpKSAmJlxuICAgIC8vIE1hdGNoZXMgYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1yZW1vdmUtY29uc29sZTogY2FsbC9hcHBseSBleGNsdXNpb25zIGFyZSBjaGVja2VkIG9uIHRoZSBvdXRlciBwcm9wZXJ0eSBvbmx5LlxuICAgIG5vZGUuY29tcHV0ZWQgIT09IHRydWUgJiZcbiAgICBwcm9wZXJ0eS50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAocHJvcGVydHkubmFtZSA9PT0gJ2NhbGwnIHx8IHByb3BlcnR5Lm5hbWUgPT09ICdhcHBseScpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzSW5jbHVkZWRDb25zb2xlQmluZE1lbWJlcihub2RlOiBBc3ROb2RlLCBleGNsdWRlZE1ldGhvZHM6IFNldDxzdHJpbmc+KTogYm9vbGVhbiB7XG4gIGlmIChub2RlLnR5cGUgIT09ICdNZW1iZXJFeHByZXNzaW9uJykgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IG9iamVjdCA9IGdldEFzdE5vZGVQcm9wZXJ0eShub2RlLCAnb2JqZWN0Jyk7XG4gIGNvbnN0IHByb3BlcnR5ID0gZ2V0QXN0Tm9kZVByb3BlcnR5KG5vZGUsICdwcm9wZXJ0eScpO1xuICBpZiAoIW9iamVjdCB8fCAhcHJvcGVydHkgfHwgb2JqZWN0LnR5cGUgIT09ICdNZW1iZXJFeHByZXNzaW9uJykgcmV0dXJuIGZhbHNlO1xuICBpZiAobm9kZS5jb21wdXRlZCA9PT0gdHJ1ZSB8fCBwcm9wZXJ0eS50eXBlICE9PSAnSWRlbnRpZmllcicgfHwgcHJvcGVydHkubmFtZSAhPT0gJ2JpbmQnKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNHbG9iYWxDb25zb2xlSWRlbnRpZmllcihnZXRBc3ROb2RlUHJvcGVydHkob2JqZWN0LCAnb2JqZWN0JykpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGNvbnNvbGVNZXRob2QgPSBnZXRBc3ROb2RlUHJvcGVydHkob2JqZWN0LCAncHJvcGVydHknKTtcbiAgcmV0dXJuICEhY29uc29sZU1ldGhvZCAmJiAhaXNFeGNsdWRlZENvbnNvbGVQcm9wZXJ0eShvYmplY3QsIGNvbnNvbGVNZXRob2QsIGV4Y2x1ZGVkTWV0aG9kcyk7XG59XG5cbmZ1bmN0aW9uIGlzRXhjbHVkZWRDb25zb2xlUHJvcGVydHkoXG4gIG1lbWJlckV4cHJlc3Npb246IEFzdE5vZGUsXG4gIHByb3BlcnR5OiBBc3ROb2RlLFxuICBleGNsdWRlZE1ldGhvZHM6IFNldDxzdHJpbmc+XG4pOiBib29sZWFuIHtcbiAgLy8gVGhlIHJlc3RvcmVkIGJlaGF2aW9yIG1hdGNoZXMgYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1yZW1vdmUtY29uc29sZSwgd2hvc2UgZXhjbHVzaW9ucyBvbmx5IGFwcGx5IHRvIGlkZW50aWZpZXIgcHJvcGVydGllcy5cbiAgcmV0dXJuIG1lbWJlckV4cHJlc3Npb24uY29tcHV0ZWQgIT09IHRydWUgJiYgcHJvcGVydHkudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmIGV4Y2x1ZGVkTWV0aG9kcy5oYXMocHJvcGVydHkubmFtZSBhcyBzdHJpbmcpO1xufVxuXG5mdW5jdGlvbiBpc0dsb2JhbENvbnNvbGVJZGVudGlmaWVyKG5vZGU6IEFzdE5vZGUgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG5vZGU/LnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJiBub2RlLm5hbWUgPT09ICdjb25zb2xlJztcbn1cblxuZnVuY3Rpb24gc2VsZWN0Q29uc29sZVJlcGxhY2VtZW50cyhyZXBsYWNlbWVudHM6IENvbnNvbGVSZXBsYWNlbWVudFtdKTogQ29uc29sZVJlcGxhY2VtZW50W10ge1xuICBjb25zdCBzZWxlY3RlZDogQ29uc29sZVJlcGxhY2VtZW50W10gPSBbXTtcbiAgZm9yIChjb25zdCByZXBsYWNlbWVudCBvZiByZXBsYWNlbWVudHMudG9Tb3J0ZWQoKGEsIGIpID0+IGEuc3RhcnQgLSBiLnN0YXJ0IHx8IGIuZW5kIC0gYS5lbmQpKSB7XG4gICAgaWYgKHNlbGVjdGVkLnNvbWUoKGl0ZW0pID0+IGl0ZW0uc3RhcnQgPD0gcmVwbGFjZW1lbnQuc3RhcnQgJiYgcmVwbGFjZW1lbnQuZW5kIDw9IGl0ZW0uZW5kKSkgY29udGludWU7XG4gICAgc2VsZWN0ZWQucHVzaChyZXBsYWNlbWVudCk7XG4gIH1cbiAgcmV0dXJuIHNlbGVjdGVkLnRvU29ydGVkKChhLCBiKSA9PiBiLnN0YXJ0IC0gYS5zdGFydCk7XG59XG5cbmZ1bmN0aW9uIGdldEV4cG9ydERlY2xhcmF0aW9uKG5vZGU6IEFzdE5vZGUpOiBBc3ROb2RlIHwgdW5kZWZpbmVkIHtcbiAgaWYgKG5vZGUudHlwZSAhPT0gJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nICYmIG5vZGUudHlwZSAhPT0gJ0V4cG9ydERlZmF1bHREZWNsYXJhdGlvbicpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBnZXRBc3ROb2RlUHJvcGVydHkobm9kZSwgJ2RlY2xhcmF0aW9uJyk7XG59XG4iLCJpbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgdHlwZSB7IElucHV0T3B0aW9ucyB9IGZyb20gJ0BiYWJlbC9jb3JlJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luLCBSb2xsZG93blBsdWdpbk9wdGlvbiwgU291cmNlTWFwSW5wdXQgfSBmcm9tICdyb2xsZG93bic7XG5cbmltcG9ydCB7IGdldEJ1aWxkVHNSb290UGF0aCB9IGZyb20gJy4uLy4uL3V0aWxzLmpzJztcblxuaW1wb3J0IHsgY29udGFpbnNEZWNvcmF0b3IgfSBmcm9tICcuL2RlY29yYXRvckRldGVjdGlvbi5qcyc7XG5pbXBvcnQgeyBnZXRDb25zb2xlUmVtb3ZhbEV4Y2x1ZGVkTWV0aG9kcywgcmVtb3ZlQ29uc29sZVBsdWdpbiB9IGZyb20gJy4vcmVtb3ZlQ29uc29sZVBsdWdpbi5qcyc7XG5pbXBvcnQgeyBpc1RyYW5zZm9ybVRhcmdldEZpbGUgfSBmcm9tICcuL3RyYW5zZm9ybVV0aWxzLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwUGx1Z2lucygpOiBSb2xsZG93blBsdWdpbk9wdGlvbltdIHtcbiAgY29uc3QgcGx1Z2luczogUm9sbGRvd25QbHVnaW5PcHRpb25bXSA9IFtdO1xuICBjb25zdCBleGNsdWRlZENvbnNvbGVNZXRob2RzID0gZ2V0Q29uc29sZVJlbW92YWxFeGNsdWRlZE1ldGhvZHMoKTtcbiAgaWYgKGV4Y2x1ZGVkQ29uc29sZU1ldGhvZHMpIHtcbiAgICBwbHVnaW5zLnB1c2gocmVtb3ZlQ29uc29sZVBsdWdpbihleGNsdWRlZENvbnNvbGVNZXRob2RzKSk7XG4gIH1cbiAgcGx1Z2lucy5wdXNoKGJhYmVsRGVjb3JhdG9yc1BsdWdpbigpLCB0ZXh0UGx1Z2luKCkpO1xuICByZXR1cm4gcGx1Z2lucztcbn1cblxuZnVuY3Rpb24gYmFiZWxEZWNvcmF0b3JzUGx1Z2luKCk6IFBsdWdpbiB7XG4gIGNvbnN0IGJhYmVsQ29uZmlnUGF0aCA9IHBhdGguam9pbihnZXRCdWlsZFRzUm9vdFBhdGgoKSwgJ2JhYmVsLmNvbmZpZy5tanMnKTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnYmFiZWwtZGVjb3JhdG9ycycsXG4gICAgYXN5bmMgdHJhbnNmb3JtKGNvZGUsIGlkKSB7XG4gICAgICBpZiAoIWlzVHJhbnNmb3JtVGFyZ2V0RmlsZShpZCkgfHwgIWNvbnRhaW5zRGVjb3JhdG9yKGNvZGUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgdHJhbnNmb3JtQXN5bmMgfSA9IGF3YWl0IGltcG9ydCgnQGJhYmVsL2NvcmUnKTtcbiAgICAgIGNvbnN0IG9wdGlvbnM6IElucHV0T3B0aW9ucyA9IHtcbiAgICAgICAgY2FsbGVyOiB7XG4gICAgICAgICAgbmFtZTogJ2J1aWxkLXRzJyxcbiAgICAgICAgICBzdXBwb3J0c0R5bmFtaWNJbXBvcnQ6IHRydWUsXG4gICAgICAgICAgc3VwcG9ydHNFeHBvcnROYW1lc3BhY2VGcm9tOiB0cnVlLFxuICAgICAgICAgIHN1cHBvcnRzU3RhdGljRVNNOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBjb25maWdGaWxlOiBiYWJlbENvbmZpZ1BhdGgsXG4gICAgICAgIGZpbGVuYW1lOiBpZCxcbiAgICAgICAgc291cmNlTWFwczogdHJ1ZSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cmFuc2Zvcm1Bc3luYyhjb2RlLCBvcHRpb25zKTtcbiAgICAgIGlmICghcmVzdWx0Py5jb2RlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2RlOiByZXN1bHQuY29kZSxcbiAgICAgICAgbWFwOiByZXN1bHQubWFwIGFzIFNvdXJjZU1hcElucHV0LFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0UGx1Z2luKCk6IFBsdWdpbiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3RleHQnLFxuICAgIGFzeW5jIGxvYWQoaWQpIHtcbiAgICAgIGlmICghaWQuZW5kc1dpdGgoJy5jc3YnKSAmJiAhaWQuZW5kc1dpdGgoJy50eHQnKSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKGlkLCAndXRmOCcpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29kZTogYGV4cG9ydCBkZWZhdWx0ICR7SlNPTi5zdHJpbmdpZnkoY29udGVudCl9O2AsXG4gICAgICAgIG1vZHVsZVR5cGU6ICdqcycsXG4gICAgICB9O1xuICAgIH0sXG4gIH07XG59XG4iLCJpbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSAnbm9kZTptb2R1bGUnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHR5cGUgeyBBcmd1bWVudHNUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMuanMnO1xuXG5pbXBvcnQgdHlwZSB7IEFueUJ1aWxkZXJUeXBlIH0gZnJvbSAnLi9idWlsZGVyLmpzJztcblxuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlRGVjbGFyYXRpb25GaWxlcyhcbiAgYXJndjogQXJndW1lbnRzVHlwZTxBbnlCdWlsZGVyVHlwZT4sXG4gIGNvcmVQcm9qZWN0RGlyUGF0aDogc3RyaW5nLFxuICBvdXREaXJQYXRoOiBzdHJpbmcsXG4gIGlucHV0cz86IHN0cmluZ1tdXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgY29yZUNvbmZpZ0ZpbGUgPSBmaW5kQ29uZmlnRmlsZShjb3JlUHJvamVjdERpclBhdGgpO1xuICBpZiAoIWNvcmVDb25maWdGaWxlKSB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBmaW5kIHRzY29uZmlnLmpzb24gaW4gJHtjb3JlUHJvamVjdERpclBhdGh9LmApO1xuICBpZiAoYXJndi52ZXJib3NlKSB7XG4gICAgY29uc29sZS5pbmZvKCdGb3VuZCB0c2NvbmZpZy5qc29uOicsIGNvcmVDb25maWdGaWxlKTtcbiAgfVxuXG4gIGNvbnN0IHByb2plY3RzOiBbc3RyaW5nLCBzdHJpbmcsIHN0cmluZywgc3RyaW5nW10gfCB1bmRlZmluZWRdW10gPSBbXTtcbiAgbGV0IGNvcmVPdXREaXIgPSBwYXRoLmpvaW4ob3V0RGlyUGF0aCwgcGF0aC5iYXNlbmFtZShjb3JlUHJvamVjdERpclBhdGgpLCAnc3JjJyk7XG4gIGlmIChmcy5leGlzdHNTeW5jKGNvcmVPdXREaXIpKSB7XG4gICAgLy8gVGhlIGJ1bmRsZXIgZW1pdHRlZCBwZXItcHJvamVjdCBkaXJlY3RvcmllcyAobW9ub3JlcG8gYnVpbGQpLCBzbyBlbnRyeS1iYXNlZCByZXN0cmljdGlvbiBpcyB1bnNhZmU6XG4gICAgLy8gZW50cmllcyBtYXkgaW1wb3J0IGZpbGVzIG91dHNpZGUgZWFjaCBwcm9qZWN0J3Mgcm9vdERpci5cbiAgICBpbnB1dHMgPSB1bmRlZmluZWQ7XG4gICAgY29uc3QgcGFyZW50RGlyUGF0aCA9IHBhdGguZGlybmFtZShjb3JlUHJvamVjdERpclBhdGgpO1xuICAgIGNvbnN0IGRpcmVudHMgPSBhd2FpdCBmcy5wcm9taXNlcy5yZWFkZGlyKHBhcmVudERpclBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgICBjb3JlUHJvamVjdERpclBhdGggPSBwYXRoLnJlc29sdmUoY29yZVByb2plY3REaXJQYXRoKTtcbiAgICBmb3IgKGNvbnN0IGRpcmVudCBvZiBkaXJlbnRzKSB7XG4gICAgICBpZiAoIWRpcmVudC5pc0RpcmVjdG9yeSgpKSBjb250aW51ZTtcblxuICAgICAgY29uc3QgcHJvamVjdERpclBhdGggPSBwYXRoLnJlc29sdmUocGFyZW50RGlyUGF0aCwgZGlyZW50Lm5hbWUpO1xuICAgICAgaWYgKHByb2plY3REaXJQYXRoID09PSBjb3JlUHJvamVjdERpclBhdGgpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBjb25maWdGaWxlID0gZmluZENvbmZpZ0ZpbGUocHJvamVjdERpclBhdGgpO1xuICAgICAgY29uc3Qgb3V0RGlyID0gcGF0aC5qb2luKG91dERpclBhdGgsIGRpcmVudC5uYW1lLCAnc3JjJyk7XG4gICAgICBpZiAoY29uZmlnRmlsZSAmJiBmcy5leGlzdHNTeW5jKG91dERpcikpIHtcbiAgICAgICAgcHJvamVjdHMucHVzaChbcHJvamVjdERpclBhdGgsIGNvbmZpZ0ZpbGUsIG91dERpciwgdW5kZWZpbmVkXSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvcmVPdXREaXIgPSBvdXREaXJQYXRoO1xuICB9XG4gIHByb2plY3RzLnB1c2goW2NvcmVQcm9qZWN0RGlyUGF0aCwgY29yZUNvbmZpZ0ZpbGUsIGNvcmVPdXREaXIsIGlucHV0c10pO1xuXG4gIGxldCBhbGxTdWNjZWVkZWQgPSB0cnVlO1xuICBmb3IgKGNvbnN0IFtwcm9qZWN0RGlyUGF0aCwgY29uZmlnRmlsZSwgb3V0RGlyLCBwcm9qZWN0SW5wdXRzXSBvZiBwcm9qZWN0cykge1xuICAgIGFsbFN1Y2NlZWRlZCAmJj0gYXdhaXQgcnVuVHNnbyhhcmd2LCBwcm9qZWN0RGlyUGF0aCwgY29uZmlnRmlsZSwgb3V0RGlyLCBwcm9qZWN0SW5wdXRzKTtcbiAgfVxuICByZXR1cm4gYWxsU3VjY2VlZGVkO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5Uc2dvKFxuICBhcmd2OiBBcmd1bWVudHNUeXBlPEFueUJ1aWxkZXJUeXBlPixcbiAgcHJvamVjdERpclBhdGg6IHN0cmluZyxcbiAgY29uZmlnRmlsZTogc3RyaW5nLFxuICBvdXREaXI6IHN0cmluZyxcbiAgaW5wdXRzPzogc3RyaW5nW11cbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoYXJndi52ZXJib3NlKSB7XG4gICAgY29uc29sZS5pbmZvKCdydW5Uc2dvKCknLCBwcm9qZWN0RGlyUGF0aCwgY29uZmlnRmlsZSwgb3V0RGlyLCBpbnB1dHMpO1xuICB9XG5cbiAgLy8gVGhlIHRlbXBvcmFyeSBjb25maWcgbXVzdCBsaXZlIGluIHRoZSBwcm9qZWN0IGRpcmVjdG9yeSBzbyB0aGF0IGl0cyByZWxhdGl2ZSBgcm9vdERpcmAgYW5kXG4gIC8vIGBpbmNsdWRlYCByZXNvbHZlIGFnYWluc3QgdGhlIHByb2plY3QgZXZlbiB3aGVuIHRoZSBleHRlbmRlZCB0c2NvbmZpZyBpcyBpbiBhbiBhbmNlc3RvciBkaXJlY3RvcnkuXG4gIGNvbnN0IHRlbXBDb25maWdGaWxlID0gcGF0aC5qb2luKHByb2plY3REaXJQYXRoLCBgLmJ1aWxkLXRzLXRzZ28uJHtwcm9jZXNzLnBpZH0uanNvbmApO1xuICB0cnkge1xuICAgIGF3YWl0IGZzLnByb21pc2VzLndyaXRlRmlsZShcbiAgICAgIHRlbXBDb25maWdGaWxlLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoYXdhaXQgY3JlYXRlVHlwZVNjcmlwdE5hdGl2ZUNvbmZpZyhwcm9qZWN0RGlyUGF0aCwgY29uZmlnRmlsZSwgb3V0RGlyLCBpbnB1dHMpLCB1bmRlZmluZWQsIDIpXG4gICAgKTtcbiAgICBjb25zdCByZXQgPSBjaGlsZF9wcm9jZXNzLnNwYXduU3luYyhwcm9jZXNzLmV4ZWNQYXRoLCBbZ2V0VHNnb1BhdGgoKSwgJy1wJywgdGVtcENvbmZpZ0ZpbGVdLCB7XG4gICAgICBjd2Q6IHByb2plY3REaXJQYXRoLFxuICAgICAgc3RkaW86ICdpbmhlcml0JyxcbiAgICB9KTtcbiAgICBpZiAocmV0LmVycm9yKSB0aHJvdyByZXQuZXJyb3I7XG4gICAgcmV0dXJuIHJldC5zdGF0dXMgPT09IDA7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucHJvbWlzZXMucm0odGVtcENvbmZpZ0ZpbGUsIHsgZm9yY2U6IHRydWUgfSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVHlwZVNjcmlwdE5hdGl2ZUNvbmZpZyhcbiAgcHJvamVjdERpclBhdGg6IHN0cmluZyxcbiAgY29uZmlnRmlsZTogc3RyaW5nLFxuICBvdXREaXI6IHN0cmluZyxcbiAgaW5wdXRzPzogc3RyaW5nW11cbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgY29uc3QgY29tcGlsZXJPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAvLyBBbiBpbmhlcml0ZWQgYGNvbXBvc2l0ZWAgd291bGQgcmVxdWlyZSBsaXN0aW5nIGV2ZXJ5IGltcG9ydGVkIGZpbGUgZXhwbGljaXRseSAoVFM2MzA3KSBhbmQsXG4gICAgLy8gbGlrZSBgaW5jcmVtZW50YWxgLCB3b3VsZCB3cml0ZSBuZWVkbGVzcyAudHNidWlsZGluZm8gZmlsZXMgZm9yIHRoaXMgb25lLXNob3QgY29tcGlsYXRpb24uXG4gICAgY29tcG9zaXRlOiBmYWxzZSxcbiAgICBkZWNsYXJhdGlvbjogdHJ1ZSxcbiAgICAvLyBBbiBpbmhlcml0ZWQgYGRlY2xhcmF0aW9uRGlyYCB3b3VsZCBzaWxlbnRseSByZWRpcmVjdCB0aGUgb3V0cHV0IGF3YXkgZnJvbSBgb3V0RGlyYC5cbiAgICBkZWNsYXJhdGlvbkRpcjogb3V0RGlyLFxuICAgIGVtaXREZWNsYXJhdGlvbk9ubHk6IHRydWUsXG4gICAgaW5jcmVtZW50YWw6IGZhbHNlLFxuICAgIG5vRW1pdDogZmFsc2UsXG4gICAgbm9FbWl0T25FcnJvcjogdHJ1ZSxcbiAgICBvdXREaXIsXG4gICAgLy8gVHlwZVNjcmlwdCA3IHJlcXVpcmVzIGFuIGV4cGxpY2l0IGByb290RGlyYCAoVFM1MDExKS4gRW50cmllcyBpbXBvcnRpbmcgZmlsZXMgb3V0c2lkZSBzcmMvXG4gICAgLy8gKGUuZy4gc2libGluZyBwYWNrYWdlcyBpbiBkZWNsYXJhdGlvbi1vbmx5IG1vZGUpIGZhaWwgd2l0aCBUUzYwNTk7IHNlZSB0aGUgUkVBRE1FIGxpbWl0YXRpb24uXG4gICAgcm9vdERpcjogJ3NyYycsXG4gIH07XG4gIGlmIChhd2FpdCB1c2VzTm9kZVByb3RvY29sSW1wb3J0KHBhdGguam9pbihwcm9qZWN0RGlyUGF0aCwgJ3NyYycpKSkge1xuICAgIGNvbnN0IHR5cGVzRGlyUGF0aCA9IGZpbmRUeXBlc0RpclBhdGgocHJvamVjdERpclBhdGgpO1xuICAgIGNvbnN0IHR5cGVzID0gdHlwZXNEaXJQYXRoID8gYXdhaXQgY29sbGVjdFR5cGVQYWNrYWdlcyh0eXBlc0RpclBhdGgpIDogW107XG4gICAgaWYgKHR5cGVzLmluY2x1ZGVzKCdub2RlJykpIHtcbiAgICAgIGNvbXBpbGVyT3B0aW9ucy50eXBlcyA9IHR5cGVzO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGNvbXBpbGVyT3B0aW9ucyxcbiAgICBleHRlbmRzOiB0b1JlbGF0aXZlQ29uZmlnUGF0aChwcm9qZWN0RGlyUGF0aCwgY29uZmlnRmlsZSksXG4gICAgLy8gV2l0aCBgZmlsZXNgLCB0c2MgYWxzbyBlbWl0cyBkZWNsYXJhdGlvbnMgZm9yIGZpbGVzIHRyYW5zaXRpdmVseSBpbXBvcnRlZCBmcm9tIHRoZSBlbnRyaWVzLFxuICAgIC8vIHNvIHRoZSBvdXRwdXQgaXMgcmVzdHJpY3RlZCB0byB3aGF0IHRoZSBidW5kbGVkIEphdmFTY3JpcHQgYWN0dWFsbHkgY29udGFpbnMuIGBpbmNsdWRlYCBtdXN0IGJlXG4gICAgLy8gb3ZlcnJpZGRlbiBzaW5jZSBhbiBpbmhlcml0ZWQgYGluY2x1ZGVgIHdvdWxkIGFkZCBmaWxlcyBiYWNrIHRvIHRoZSBwcm9ncmFtOyBvbmx5IGFtYmllbnRcbiAgICAvLyBkZWNsYXJhdGlvbiBmaWxlcyBhcmUga2VwdCBiZWNhdXNlIGVudHJpZXMgbWF5IHJlbHkgb24gdGhlaXIgZ2xvYmFsIHR5cGVzIHdpdGhvdXQgaW1wb3J0aW5nIHRoZW0uXG4gICAgLi4uKGlucHV0cz8ubGVuZ3RoXG4gICAgICA/IHtcbiAgICAgICAgICBleGNsdWRlOiBbXSxcbiAgICAgICAgICBmaWxlczogaW5wdXRzLm1hcCgoaW5wdXQpID0+IHBhdGgucmVzb2x2ZShwcm9qZWN0RGlyUGF0aCwgaW5wdXQpLnJlcGxhY2VBbGwocGF0aC5zZXAsICcvJykpLFxuICAgICAgICAgIGluY2x1ZGU6IFsnc3JjLyoqLyouZC50cycsICdzcmMvKiovKi5kLm10cycsICdzcmMvKiovKi5kLmN0cyddLFxuICAgICAgICB9XG4gICAgICA6IHsgaW5jbHVkZTogWydzcmMvKiovKiddIH0pLFxuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5kQ29uZmlnRmlsZShkaXJQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBsZXQgY3VycmVudERpclBhdGggPSBwYXRoLnJlc29sdmUoZGlyUGF0aCk7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgY29uZmlnRmlsZSA9IHBhdGguam9pbihjdXJyZW50RGlyUGF0aCwgJ3RzY29uZmlnLmpzb24nKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhjb25maWdGaWxlKSkgcmV0dXJuIGNvbmZpZ0ZpbGU7XG5cbiAgICBjb25zdCBwYXJlbnREaXJQYXRoID0gcGF0aC5kaXJuYW1lKGN1cnJlbnREaXJQYXRoKTtcbiAgICBpZiAocGFyZW50RGlyUGF0aCA9PT0gY3VycmVudERpclBhdGgpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY3VycmVudERpclBhdGggPSBwYXJlbnREaXJQYXRoO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRzZ29QYXRoKCk6IHN0cmluZyB7XG4gIC8vIFR5cGVTY3JpcHQgNyBzaGlwcyB0aGUgbmF0aXZlIGNvbXBpbGVyIChmb3JtZXJseSBgQHR5cGVzY3JpcHQvbmF0aXZlLXByZXZpZXdgKSBhc1xuICAvLyB0aGUgYHR5cGVzY3JpcHRgIHBhY2thZ2UsIHdob3NlIGBsaWIvdHNjLmpzYCB3cmFwcGVyIHNwYXducyB0aGUgcGxhdGZvcm0gYmluYXJ5LlxuICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSByZXF1aXJlLnJlc29sdmUoJ3R5cGVzY3JpcHQvcGFja2FnZS5qc29uJyk7XG4gIHJldHVybiBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKHBhY2thZ2VKc29uUGF0aCksICdsaWInLCAndHNjLmpzJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVzZXNOb2RlUHJvdG9jb2xJbXBvcnQoZGlyUGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZGlyZW50cyA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRkaXIoZGlyUGF0aCwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuICAgIGZvciAoY29uc3QgZGlyZW50IG9mIGRpcmVudHMpIHtcbiAgICAgIGNvbnN0IGNoaWxkUGF0aCA9IHBhdGguam9pbihkaXJQYXRoLCBkaXJlbnQubmFtZSk7XG4gICAgICBpZiAoZGlyZW50LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgaWYgKGF3YWl0IHVzZXNOb2RlUHJvdG9jb2xJbXBvcnQoY2hpbGRQYXRoKSkgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKC9cXC5bY21dP3RzeD8kLy50ZXN0KGRpcmVudC5uYW1lKSAmJiAoYXdhaXQgZnMucHJvbWlzZXMucmVhZEZpbGUoY2hpbGRQYXRoLCAndXRmOCcpKS5pbmNsdWRlcygnbm9kZTonKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGZpbmRUeXBlc0RpclBhdGgoZGlyUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgbGV0IGN1cnJlbnREaXJQYXRoID0gcGF0aC5yZXNvbHZlKGRpclBhdGgpO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHR5cGVzRGlyUGF0aCA9IHBhdGguam9pbihjdXJyZW50RGlyUGF0aCwgJ25vZGVfbW9kdWxlcycsICdAdHlwZXMnKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyh0eXBlc0RpclBhdGgpKSByZXR1cm4gdHlwZXNEaXJQYXRoO1xuXG4gICAgY29uc3QgcGFyZW50RGlyUGF0aCA9IHBhdGguZGlybmFtZShjdXJyZW50RGlyUGF0aCk7XG4gICAgaWYgKHBhcmVudERpclBhdGggPT09IGN1cnJlbnREaXJQYXRoKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGN1cnJlbnREaXJQYXRoID0gcGFyZW50RGlyUGF0aDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0VHlwZVBhY2thZ2VzKHR5cGVSb290c0RpclBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkaXJlbnRzID0gYXdhaXQgZnMucHJvbWlzZXMucmVhZGRpcih0eXBlUm9vdHNEaXJQYXRoLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gICAgcmV0dXJuIGRpcmVudHMuZmlsdGVyKChkaXJlbnQpID0+IGRpcmVudC5pc0RpcmVjdG9yeSgpKS5tYXAoKGRpcmVudCkgPT4gZGlyZW50Lm5hbWUpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuLy8gYHRvRmlsZVBhdGhgIGlzIGFsd2F5cyBhIHRzY29uZmlnIGluIGBmcm9tRGlyUGF0aGAgb3Igb25lIG9mIGl0cyBhbmNlc3RvciBkaXJlY3Rvcmllcywgc28gdGhlXG4vLyByZXN1bHQgaXMgYWx3YXlzIHJlbGF0aXZlIChgLi9gIG9yIGAuLi9gIGNoYWlucyk7IGEgY3Jvc3MtZHJpdmUgYWJzb2x1dGUgcmVzdWx0IGlzIGltcG9zc2libGUuXG5mdW5jdGlvbiB0b1JlbGF0aXZlQ29uZmlnUGF0aChmcm9tRGlyUGF0aDogc3RyaW5nLCB0b0ZpbGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKGZyb21EaXJQYXRoLCB0b0ZpbGVQYXRoKS5yZXBsYWNlQWxsKHBhdGguc2VwLCAnLycpO1xuICByZXR1cm4gcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4nKSA/IHJlbGF0aXZlUGF0aCA6IGAuLyR7cmVsYXRpdmVQYXRofWA7XG59XG4iLCJpbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgc3R5bGVUZXh0IH0gZnJvbSAnbm9kZTp1dGlsJztcblxuaW1wb3J0IHsgcm9sbGRvd24sIHdhdGNoIH0gZnJvbSAncm9sbGRvd24nO1xuaW1wb3J0IHR5cGUgeyBPdXRwdXRPcHRpb25zLCBSb2xsZG93bkJ1aWxkLCBSb2xsZG93bk9wdGlvbnMgfSBmcm9tICdyb2xsZG93bic7XG5pbXBvcnQgeyBvbkV4aXQgfSBmcm9tICdzaWduYWwtZXhpdCc7XG5pbXBvcnQgdHlwZSB7IFBhY2thZ2VKc29uIH0gZnJvbSAndHlwZS1mZXN0JztcbmltcG9ydCB0eXBlIHsgQ29tbWFuZE1vZHVsZSB9IGZyb20gJ3lhcmdzJztcblxuaW1wb3J0IHsgY3JlYXRlRW52aXJvbm1lbnRWYXJpYWJsZXNEZWZpbml0aW9uLCBsb2FkRW52aXJvbm1lbnRWYXJpYWJsZXNXaXRoQ2FjaGUgfSBmcm9tICcuLi8uLi9lbnYuanMnO1xuaW1wb3J0IHR5cGUgeyBBcmd1bWVudHNUeXBlLCBUYXJnZXRDYXRlZ29yeSwgVGFyZ2V0RGV0YWlsIH0gZnJvbSAnLi4vLi4vdHlwZXMuanMnO1xuaW1wb3J0IHsgYWxsVGFyZ2V0Q2F0ZWdvcmllcyB9IGZyb20gJy4uLy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IGZvcm1hdERhdGVUaW1lLCBmb3JtYXREdXJhdGlvbiwgZ2V0TmFtZXNwYWNlLCByZWFkUGFja2FnZUpzb24gfSBmcm9tICcuLi8uLi91dGlscy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgQW55QnVpbGRlclR5cGUsIGJ1aWxkZXIgfSBmcm9tICcuL2J1aWxkZXIuanMnO1xuaW1wb3J0IHsgYXBwQnVpbGRlciwgZnVuY3Rpb25zQnVpbGRlciwgbGliQnVpbGRlciB9IGZyb20gJy4vYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBoYW5kbGVFcnJvciB9IGZyb20gJy4vYnVuZGxlckxvZ2dlci5qcyc7XG5pbXBvcnQgeyBjcmVhdGVFeHRlcm5hbE1hdGNoZXIgfSBmcm9tICcuL2V4dGVybmFscy5qcyc7XG5pbXBvcnQgeyBzZXR1cFBsdWdpbnMgfSBmcm9tICcuL3BsdWdpbi5qcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZURlY2xhcmF0aW9uRmlsZXMgfSBmcm9tICcuL3R5cGVTY3JpcHQuanMnO1xuXG4vLyBPbmx5IHRoZSBvcHRpb25zIHRoZSBidW5kbGVyIGlzIGFjdHVhbGx5IGdpdmVuOiBpdHMgcmVtYWluaW5nIGRlZmF1bHRzIGFyZSBwbGF0Zm9ybS1kZXBlbmRlbnQsIHNvXG4vLyBwaW5uaW5nIHRoZW0gaGVyZSB3b3VsZCBjaGFuZ2Ugd2hpY2ggc291cmNlIGdldHMgYnVuZGxlZC5cbmNvbnN0IGJ1bmRsZXJSZXNvbHZlT3B0aW9ucyA9IHtcbiAgZXh0ZW5zaW9uQWxpYXM6IHtcbiAgICAnLmNqcyc6IFsnLmNqcycsICcuY3RzJ10sXG4gICAgJy5qcyc6IFsnLmpzJywgJy50cycsICcudHN4J10sXG4gICAgJy5qc3gnOiBbJy5qc3gnLCAnLnRzJywgJy50c3gnXSxcbiAgICAnLm1qcyc6IFsnLm1qcycsICcubXRzJ10sXG4gIH0sXG4gIGV4dGVuc2lvbnM6IFsnLmN0cycsICcubXRzJywgJy50cycsICcudHN4JywgJy5janMnLCAnLm1qcycsICcuanMnLCAnLmpzeCcsICcuanNvbiddLFxufTtcblxuZXhwb3J0IGNvbnN0IGFwcDogQ29tbWFuZE1vZHVsZTx1bmtub3duLCBBcmd1bWVudHNUeXBlPHR5cGVvZiBhcHBCdWlsZGVyPj4gPSB7XG4gIGNvbW1hbmQ6ICdhcHAgW3BhY2thZ2VdJyxcbiAgZGVzY3JpYmU6ICdCdWlsZCBhbiBhcHAnLFxuICBidWlsZGVyOiBhcHBCdWlsZGVyLFxuICBhc3luYyBoYW5kbGVyKGFyZ3YpIHtcbiAgICByZXR1cm4gYnVpbGQoYXJndiwgJ2FwcCcpO1xuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uczogQ29tbWFuZE1vZHVsZTx1bmtub3duLCBBcmd1bWVudHNUeXBlPHR5cGVvZiBmdW5jdGlvbnNCdWlsZGVyPj4gPSB7XG4gIGNvbW1hbmQ6ICdmdW5jdGlvbnMgW3BhY2thZ2VdJyxcbiAgZGVzY3JpYmU6ICdCdWlsZCBhIEdDUC9GaXJlYmFzZSBmdW5jdGlvbnMgYXBwJyxcbiAgYnVpbGRlcjogZnVuY3Rpb25zQnVpbGRlcixcbiAgYXN5bmMgaGFuZGxlcihhcmd2KSB7XG4gICAgaWYgKGFyZ3Yub25seVBhY2thZ2VKc29uKSB7XG4gICAgICBjb25zdCBwYWNrYWdlRGlyUGF0aCA9IHBhdGgucmVzb2x2ZShhcmd2LnBhY2thZ2U/LnRvU3RyaW5nKCkgPz8gJy4nKTtcbiAgICAgIGNvbnN0IFtwYWNrYWdlSnNvbiwgcGFja2FnZUpzb25QYXRoXSA9IGF3YWl0IHJlYWRQYWNrYWdlSnNvbihwYWNrYWdlRGlyUGF0aCk7XG4gICAgICBpZiAoIXBhY2thZ2VKc29uKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBwYXJzZSBwYWNrYWdlLmpzb24gKCR7cGFja2FnZUpzb25QYXRofSkuYCk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGdlbmVyYXRlUGFja2FnZUpzb25Gb3JGdW5jdGlvbnMoXG4gICAgICAgIHJlc29sdmVPdXREaXJQYXRoKGFyZ3YsIHByb2Nlc3MuY3dkKCksIHBhY2thZ2VEaXJQYXRoLCB1bmRlZmluZWQsICdmdW5jdGlvbnMnKSxcbiAgICAgICAgcGFja2FnZUpzb24sXG4gICAgICAgIGFyZ3YubW9kdWxlVHlwZVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1aWxkKGFyZ3YsICdmdW5jdGlvbnMnKTtcbiAgICB9XG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgbGliOiBDb21tYW5kTW9kdWxlPHVua25vd24sIEFyZ3VtZW50c1R5cGU8dHlwZW9mIGxpYkJ1aWxkZXI+PiA9IHtcbiAgY29tbWFuZDogJ2xpYiBbcGFja2FnZV0nLFxuICBkZXNjcmliZTogJ0J1aWxkIGEgTm9kZS5qcyAvIFJlYWN0IGxpYnJhcnknLFxuICBidWlsZGVyOiBsaWJCdWlsZGVyLFxuICBhc3luYyBoYW5kbGVyKGFyZ3YpIHtcbiAgICByZXR1cm4gYnVpbGQoYXJndiwgJ2xpYicpO1xuICB9LFxufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkKGFyZ3Y6IEFyZ3VtZW50c1R5cGU8QW55QnVpbGRlclR5cGU+LCB0YXJnZXRDYXRlZ29yeTogVGFyZ2V0Q2F0ZWdvcnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgfHw9ICdwcm9kdWN0aW9uJztcblxuICAvLyBgc2lsZW50YCBpcyBzdHJvbmdlciB0aGFuIGB2ZXJib3NlYC5cbiAgY29uc3QgdmVyYm9zZSA9ICFhcmd2LnNpbGVudCAmJiBhcmd2LnZlcmJvc2U7XG4gIGNvbnN0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgY29uc3QgcGFja2FnZURpclBhdGggPSBwYXRoLnJlc29sdmUoYXJndi5wYWNrYWdlPy50b1N0cmluZygpID8/ICcuJyk7XG4gIGNvbnN0IFtwYWNrYWdlSnNvbiwgcGFja2FnZUpzb25QYXRoXSA9IGF3YWl0IHJlYWRQYWNrYWdlSnNvbihwYWNrYWdlRGlyUGF0aCk7XG4gIGlmICghcGFja2FnZUpzb24pIHtcbiAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gcGFyc2UgcGFja2FnZS5qc29uICgke3BhY2thZ2VKc29uUGF0aH0pLmApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIGxvYWRFbnZpcm9ubWVudFZhcmlhYmxlc1dpdGhDYWNoZShhcmd2LCBwYWNrYWdlRGlyUGF0aCk7XG5cbiAgY29uc3QgaW5wdXRzID0gdmVyaWZ5SW5wdXQoYXJndiwgY3dkLCBwYWNrYWdlRGlyUGF0aCk7XG4gIGNvbnN0IHRhcmdldERldGFpbCA9IGRldGVjdFRhcmdldERldGFpbCh0YXJnZXRDYXRlZ29yeSwgaW5wdXRzLCBwYWNrYWdlRGlyUGF0aCk7XG4gIGNvbnN0IG91dERpclBhdGggPSByZXNvbHZlT3V0RGlyUGF0aChhcmd2LCBjd2QsIHBhY2thZ2VEaXJQYXRoLCBpbnB1dHMsIHRhcmdldENhdGVnb3J5KTtcblxuICBpZiAodmVyYm9zZSkge1xuICAgIGNvbnNvbGUuaW5mbygnYXJndjonLCBhcmd2KTtcbiAgICBjb25zb2xlLmluZm8oJ3BhY2thZ2VKc29uUGF0aDonLCBwYWNrYWdlSnNvblBhdGgpO1xuICAgIGNvbnNvbGUuaW5mbygnVGFyZ2V0IChDYXRlZ29yeSk6JywgYCR7dGFyZ2V0RGV0YWlsfSAoJHt0YXJnZXRDYXRlZ29yeX0pYCk7XG4gIH1cblxuICBjb25zdCBuYW1lc3BhY2UgPSBnZXROYW1lc3BhY2UocGFja2FnZUpzb24pO1xuICBjb25zdCBpc0VzbVBhY2thZ2UgPSBwYWNrYWdlSnNvbi50eXBlID09PSAnbW9kdWxlJztcblxuICBpZiAodmVyYm9zZSkge1xuICAgIHByb2Nlc3MuZW52LkJVSUxEX1RTX1ZFUkJPU0UgPSAnMSc7XG4gIH1cbiAgcHJvY2Vzcy5lbnYuQlVJTERfVFNfVEFSR0VUX0NBVEVHT1JZID0gdGFyZ2V0Q2F0ZWdvcnk7XG4gIHByb2Nlc3MuZW52LkJVSUxEX1RTX1RBUkdFVF9ERVRBSUwgPSB0YXJnZXREZXRhaWw7XG5cbiAgY29uc3QgZGVjbGFyYXRpb25Pbmx5ID0gJ2RlY2xhcmF0aW9uT25seScgaW4gYXJndiAmJiBhcmd2LmRlY2xhcmF0aW9uT25seTtcbiAgaWYgKGRlY2xhcmF0aW9uT25seSAmJiBhcmd2LndhdGNoKSB7XG4gICAgY29uc29sZS5lcnJvcignLS1kZWNsYXJhdGlvbi1vbmx5IGNhbm5vdCBiZSB1c2VkIHdpdGggLS13YXRjaC4nKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBjb25zdCBvdXRwdXRPcHRpb25zTGlzdCA9IGdldE91dHB1dE9wdGlvbnNMaXN0KGFyZ3YsIHRhcmdldERldGFpbCwgb3V0RGlyUGF0aCwgaXNFc21QYWNrYWdlLCBwYWNrYWdlRGlyUGF0aCk7XG4gIGlmICh2ZXJib3NlKSB7XG4gICAgY29uc29sZS5pbmZvKCdPdXRwdXRPcHRpb25zOicsIG91dHB1dE9wdGlvbnNMaXN0KTtcbiAgfVxuICBpZiAob3V0cHV0T3B0aW9uc0xpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRldGVjdCBvdXRwdXQgZmlsZXMuJyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgLy8gUmVzdHJpY3RzIGRlY2xhcmF0aW9ucyB0byB0aGUgZW50cnkgZmlsZXMgKGFuZCB0aGVpciBpbXBvcnRzKSBvbmx5IHdoZW4gaW5wdXRzIGFyZSBleHBsaWNpdCwgc29cbiAgLy8gdGhhdCB0aGUgZGVmYXVsdCBrZWVwcyBlbWl0dGluZyBkZWNsYXJhdGlvbnMgZm9yIGV2ZXJ5IGZpbGUgdW5kZXIgc3JjLy5cbiAgY29uc3QgZGVjbGFyYXRpb25JbnB1dHMgPSBhcmd2LmlucHV0Py5sZW5ndGggPyBpbnB1dHMgOiB1bmRlZmluZWQ7XG5cbiAgcHJvY2Vzcy5jaGRpcihwYWNrYWdlRGlyUGF0aCk7XG4gIGF3YWl0IGZzLnByb21pc2VzLnJtKG91dERpclBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgaWYgKHRhcmdldERldGFpbCA9PT0gJ2Z1bmN0aW9ucycpIHtcbiAgICBhd2FpdCBnZW5lcmF0ZVBhY2thZ2VKc29uRm9yRnVuY3Rpb25zKG91dERpclBhdGgsIHBhY2thZ2VKc29uLCBhcmd2Lm1vZHVsZVR5cGUpO1xuICB9XG5cbiAgaWYgKGRlY2xhcmF0aW9uT25seSkge1xuICAgIGlmICghYXJndi5zaWxlbnQpIHtcbiAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgc3R5bGVUZXh0KFxuICAgICAgICAgICdjeWFuJyxcbiAgICAgICAgICBgR2VuZXJhdGVzIGRlY2xhcmF0aW9uIGZpbGVzIOKGkiAke3N0eWxlVGV4dCgnYm9sZCcsIHBhdGgucmVsYXRpdmUocGFja2FnZURpclBhdGgsIG91dERpclBhdGgpKX1cXG5vbiAke3BhY2thZ2VEaXJQYXRofSAuLi5gXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghKGF3YWl0IGdlbmVyYXRlRGVjbGFyYXRpb25GaWxlcyhhcmd2LCBwYWNrYWdlRGlyUGF0aCwgb3V0RGlyUGF0aCwgZGVjbGFyYXRpb25JbnB1dHMpKSkge1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvcHRpb25zOiBSb2xsZG93bk9wdGlvbnMgPSB7XG4gICAgY2hlY2tzOiB7IHByZWZlckJ1aWx0aW5GZWF0dXJlOiBmYWxzZSB9LFxuICAgIGV4dGVybmFsOiBjcmVhdGVFeHRlcm5hbE1hdGNoZXIoYXJndiwgdGFyZ2V0RGV0YWlsLCBwYWNrYWdlSnNvbiwgbmFtZXNwYWNlLCBwYWNrYWdlRGlyUGF0aCksXG4gICAgaW5wdXQ6XG4gICAgICB0YXJnZXREZXRhaWwgPT09ICdmdW5jdGlvbnMnID8gY3JlYXRlRnVuY3Rpb25zSW5wdXRFbnRyaWVzKGlucHV0cykgOiBpbnB1dHMsXG4gICAgcGx1Z2luczogc2V0dXBQbHVnaW5zKCksXG4gICAgcmVzb2x2ZTogYnVuZGxlclJlc29sdmVPcHRpb25zLFxuICAgIHRyYW5zZm9ybTogZ2V0VHJhbnNmb3JtT3B0aW9ucyhhcmd2LCBwYWNrYWdlRGlyUGF0aCksXG4gICAgd2F0Y2g6IGFyZ3Yud2F0Y2ggPyB7IGNsZWFyU2NyZWVuOiBmYWxzZSB9IDogdW5kZWZpbmVkLFxuICB9O1xuXG4gIGNvbnN0IHBhdGhUb1JlbGF0aXZlUGF0aCA9IChwYXRoczogc3RyaW5nIHwgUmVhZG9ubHk8c3RyaW5nW10+KTogc3RyaW5nW10gPT5cbiAgICAoQXJyYXkuaXNBcnJheShwYXRocykgPyBwYXRocyA6IFtwYXRoc10pLm1hcCgocCkgPT4gcGF0aC5yZWxhdGl2ZShwYWNrYWdlRGlyUGF0aCwgcCkpO1xuICBjb25zdCBwcmludEJ1bmRsaW5nTWVzc2FnZSA9IChpbnB1dFBhdGhzOiBzdHJpbmcgfCBSZWFkb25seTxzdHJpbmdbXT4pOiB2b2lkID0+IHtcbiAgICBjb25zdCBvdXRwdXRQYXRocyA9IHBhdGhUb1JlbGF0aXZlUGF0aChvdXRwdXRPcHRpb25zTGlzdC5tYXAoKG9wdHMpID0+IG9wdHMuZmlsZSB8fCBvcHRzLmRpciB8fCAnJykpO1xuICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgIHN0eWxlVGV4dChcbiAgICAgICAgJ2N5YW4nLFxuICAgICAgICBgQnVuZGxlcyAke3N0eWxlVGV4dCgnYm9sZCcsIHBhdGhUb1JlbGF0aXZlUGF0aChpbnB1dFBhdGhzKS5qb2luKCcsICcpKX0g4oaSICR7c3R5bGVUZXh0KFxuICAgICAgICAgICdib2xkJyxcbiAgICAgICAgICBvdXRwdXRQYXRocy5qb2luKCcsICcpXG4gICAgICAgICl9XFxub24gJHtwYWNrYWdlRGlyUGF0aH0gLi4uYFxuICAgICAgKVxuICAgICk7XG4gIH07XG4gIGlmIChhcmd2LndhdGNoKSB7XG4gICAgd2F0Y2hSb2xsZG93bihcbiAgICAgIGFyZ3YsXG4gICAgICB0YXJnZXREZXRhaWwsXG4gICAgICBwYWNrYWdlRGlyUGF0aCxcbiAgICAgIG91dERpclBhdGgsXG4gICAgICBkZWNsYXJhdGlvbklucHV0cyxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBvdXRwdXRPcHRpb25zTGlzdCxcbiAgICAgIHBhdGhUb1JlbGF0aXZlUGF0aCxcbiAgICAgIHByaW50QnVuZGxpbmdNZXNzYWdlXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWFyZ3Yuc2lsZW50KSB7XG4gICAgICBwcmludEJ1bmRsaW5nTWVzc2FnZShpbnB1dHMpO1xuICAgIH1cblxuICAgIGxldCBidW5kbGU6IFJvbGxkb3duQnVpbGQgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGJ1aWxkRmFpbGVkID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCBfYnVuZGxlID0gYXdhaXQgcm9sbGRvd24ob3B0aW9ucyk7XG4gICAgICBidW5kbGUgPSBfYnVuZGxlO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwob3V0cHV0T3B0aW9uc0xpc3QubWFwKChvcHRzKSA9PiBfYnVuZGxlLndyaXRlKG9wdHMpKSk7XG5cbiAgICAgIGlmICghYXJndi5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgIHN0eWxlVGV4dChcbiAgICAgICAgICAgICdncmVlbicsXG4gICAgICAgICAgICBgQ3JlYXRlZCAke3BhdGhUb1JlbGF0aXZlUGF0aChvdXRwdXRPcHRpb25zTGlzdC5tYXAoKG9wdHMpID0+IG9wdHMuZmlsZSB8fCBvcHRzLmRpciB8fCAnJykpLmpvaW4oXG4gICAgICAgICAgICAgICcsICdcbiAgICAgICAgICAgICl9IGluICR7c3R5bGVUZXh0KCdib2xkJywgZm9ybWF0RHVyYXRpb24oRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSkpfWBcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGJ1aWxkRmFpbGVkID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBidWlsZCBkdWUgdG86JywgZXJyb3IpO1xuICAgIH1cbiAgICBhd2FpdCBidW5kbGU/LmNsb3NlKCk7XG4gICAgaWYgKGJ1aWxkRmFpbGVkKSBwcm9jZXNzLmV4aXQoMSk7XG5cbiAgICBpZiAodGFyZ2V0RGV0YWlsICE9PSAnYXBwLW5vZGUnICYmIHRhcmdldERldGFpbCAhPT0gJ2Z1bmN0aW9ucycpIHtcbiAgICAgIGlmICghKGF3YWl0IGdlbmVyYXRlRGVjbGFyYXRpb25GaWxlcyhhcmd2LCBwYWNrYWdlRGlyUGF0aCwgb3V0RGlyUGF0aCwgZGVjbGFyYXRpb25JbnB1dHMpKSkge1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zZm9ybU9wdGlvbnMoYXJndjogQXJndW1lbnRzVHlwZTxBbnlCdWlsZGVyVHlwZT4sIHBhY2thZ2VEaXJQYXRoOiBzdHJpbmcpOiBSb2xsZG93bk9wdGlvbnNbJ3RyYW5zZm9ybSddIHtcbiAgcmV0dXJuIHtcbiAgICBkZWZpbmU6IGNyZWF0ZUVudmlyb25tZW50VmFyaWFibGVzRGVmaW5pdGlvbihhcmd2LCBwYWNrYWdlRGlyUGF0aCksXG4gICAganN4OiAncmVhY3QtanN4JyxcbiAgICB0YXJnZXQ6ICdlczIwMjInLFxuICB9O1xufVxuXG5mdW5jdGlvbiB3YXRjaFJvbGxkb3duKFxuICBhcmd2OiBBcmd1bWVudHNUeXBlPEFueUJ1aWxkZXJUeXBlPixcbiAgdGFyZ2V0RGV0YWlsOiBzdHJpbmcsXG4gIHBhY2thZ2VEaXJQYXRoOiBzdHJpbmcsXG4gIG91dERpclBhdGg6IHN0cmluZyxcbiAgZGVjbGFyYXRpb25JbnB1dHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICBvcHRpb25zOiBSb2xsZG93bk9wdGlvbnMsXG4gIG91dHB1dE9wdGlvbnNMaXN0OiBPdXRwdXRPcHRpb25zW10sXG4gIHBhdGhUb1JlbGF0aXZlUGF0aDogKHBhdGhzOiBzdHJpbmcgfCBSZWFkb25seTxzdHJpbmdbXT4pID0+IHN0cmluZ1tdLFxuICBwcmludEJ1bmRsaW5nTWVzc2FnZTogKGlucHV0UGF0aHM6IHN0cmluZyB8IFJlYWRvbmx5PHN0cmluZ1tdPikgPT4gdm9pZFxuKTogdm9pZCB7XG4gIGNvbnN0IHdhdGNoZXIgPSB3YXRjaCh7IC4uLm9wdGlvbnMsIG91dHB1dDogb3V0cHV0T3B0aW9uc0xpc3QgfSk7XG5cbiAgY29uc3QgY2xvc2UgPSBhc3luYyAoY29kZT86IG51bWJlciB8IG51bGwpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBwcm9jZXNzLnJlbW92ZUxpc3RlbmVyKCd1bmNhdWdodEV4Y2VwdGlvbicsIGNsb3NlT25VbmNhdWdodEV4Y2VwdGlvbik7XG4gICAgcHJvY2Vzcy5zdGRpbi5yZW1vdmVMaXN0ZW5lcignZW5kJywgY2xvc2VPblN0ZGluRW5kKTtcbiAgICBhd2FpdCB3YXRjaGVyLmNsb3NlKCk7XG4gICAgaWYgKGNvZGUpIHByb2Nlc3MuZXhpdChjb2RlKTtcbiAgfTtcbiAgY29uc3QgY2xvc2VPblVuY2F1Z2h0RXhjZXB0aW9uID0gKGVycm9yOiB1bmtub3duKTogdm9pZCA9PiB7XG4gICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgdm9pZCBjbG9zZSgxKTtcbiAgfTtcbiAgY29uc3QgY2xvc2VPblN0ZGluRW5kID0gKCk6IHZvaWQgPT4ge1xuICAgIHZvaWQgY2xvc2UoKTtcbiAgfTtcbiAgb25FeGl0KChjb2RlKSA9PiB2b2lkIGNsb3NlKGNvZGUpKTtcbiAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBjbG9zZU9uVW5jYXVnaHRFeGNlcHRpb24pO1xuICBpZiAoIXByb2Nlc3Muc3RkaW4uaXNUVFkpIHtcbiAgICBwcm9jZXNzLnN0ZGluLm9uKCdlbmQnLCBjbG9zZU9uU3RkaW5FbmQpO1xuICAgIHByb2Nlc3Muc3RkaW4ucmVzdW1lKCk7XG4gIH1cblxuICB3YXRjaGVyLm9uKCdldmVudCcsIGFzeW5jIChldmVudCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcbiAgICAgICAgY2FzZSAnRVJST1InOiB7XG4gICAgICAgICAgaGFuZGxlRXJyb3IoZXZlbnQuZXJyb3IsIHRydWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0JVTkRMRV9TVEFSVCc6IHtcbiAgICAgICAgICBpZiAoYXJndi5zaWxlbnQpIGJyZWFrO1xuXG4gICAgICAgICAgcHJpbnRCdW5kbGluZ01lc3NhZ2UoZ2V0SW5wdXRGaWxlcyhvcHRpb25zLmlucHV0KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQlVORExFX0VORCc6IHtcbiAgICAgICAgICBpZiAoIWFyZ3Yuc2lsZW50KSB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgICAgICAgIHN0eWxlVGV4dChcbiAgICAgICAgICAgICAgICAnZ3JlZW4nLFxuICAgICAgICAgICAgICAgIGBDcmVhdGVkICR7c3R5bGVUZXh0KCdib2xkJywgcGF0aFRvUmVsYXRpdmVQYXRoKGV2ZW50Lm91dHB1dCkuam9pbignLCAnKSl9IGluICR7c3R5bGVUZXh0KFxuICAgICAgICAgICAgICAgICAgJ2JvbGQnLFxuICAgICAgICAgICAgICAgICAgZm9ybWF0RHVyYXRpb24oZXZlbnQuZHVyYXRpb24pXG4gICAgICAgICAgICAgICAgKX1gXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRhcmdldERldGFpbCAhPT0gJ2FwcC1ub2RlJyAmJiB0YXJnZXREZXRhaWwgIT09ICdmdW5jdGlvbnMnKSB7XG4gICAgICAgICAgICBhd2FpdCBnZW5lcmF0ZURlY2xhcmF0aW9uRmlsZXMoYXJndiwgcGFja2FnZURpclBhdGgsIG91dERpclBhdGgsIGRlY2xhcmF0aW9uSW5wdXRzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnRU5EJzoge1xuICAgICAgICAgIGlmIChhcmd2LnNpbGVudCkgYnJlYWs7XG5cbiAgICAgICAgICBjb25zb2xlLmluZm8oYFxcblske2Zvcm1hdERhdGVUaW1lKG5ldyBEYXRlKCkpfV0gd2FpdGluZyBmb3IgY2hhbmdlcy4uLmApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEtlZXAgdGhlIHdhdGNoZXIgYWxpdmUgZXZlbiBpZiBoYW5kbGluZyBhbiBldmVudCAoZS5nLiBkZWNsYXJhdGlvbiBmaWxlIGdlbmVyYXRpb24pIGZhaWxzLlxuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGhhbmRsZSB3YXRjaCBldmVudCBkdWUgdG86JywgZXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoJ3Jlc3VsdCcgaW4gZXZlbnQgJiYgZXZlbnQucmVzdWx0KSB7XG4gICAgICAgIHZvaWQgZXZlbnQucmVzdWx0LmNsb3NlKCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU91dERpclBhdGgoXG4gIGFyZ3Y6IEFyZ3VtZW50c1R5cGU8QW55QnVpbGRlclR5cGU+LFxuICBjd2Q6IHN0cmluZyxcbiAgcGFja2FnZURpclBhdGg6IHN0cmluZyxcbiAgaW5wdXRzPzogc3RyaW5nW10sXG4gIHRhcmdldENhdGVnb3J5PzogVGFyZ2V0Q2F0ZWdvcnlcbik6IHN0cmluZyB7XG4gIGNvbnN0IG91dERpck9wdGlvbiA9IGFyZ3Yub3V0RGlyPy50b1N0cmluZygpO1xuICBpZiAob3V0RGlyT3B0aW9uID09PSAnJykge1xuICAgIGNvbnNvbGUuZXJyb3IoJy0tb3V0LWRpciBtdXN0IG5vdCBiZSBlbXB0eS4nKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICAvLyBUaGUgb3V0cHV0IGRpcmVjdG9yeSBpcyByZW1vdmVkIGJlZm9yZSBidWlsZGluZywgc28gcmVmdXNlIGxvY2F0aW9ucyB0aGF0IHdvdWxkIGRlbGV0ZSBzb3VyY2VcbiAgLy8gZmlsZXMuIENvbnRhaW5tZW50IGlzIGNoZWNrZWQgb24gYm90aCB0aGUgbGV4aWNhbCBhbmQgdGhlIGNhbm9uaWNhbCAoc3ltbGluay1yZXNvbHZlZCkgZm9ybSwgYW5kXG4gIC8vIGJvdGggYXJlIGxvYWQtYmVhcmluZzogdGhlIGNhbm9uaWNhbCBvbmUgY2F0Y2hlcyBhIHN5bWxpbmtlZCBvciBjYXNlLXZhcmlhbnQgcGFyZW50IGNvbXBvbmVudFxuICAvLyAoYGZzLnJtYCBmb2xsb3dzIHRob3NlKSwgd2hpbGUgdGhlIGxleGljYWwgb25lIGNhdGNoZXMgYW4gb3V0cHV0IHBhdGggdGhhdCBpcyBpdHNlbGYgYSBzeW1saW5rXG4gIC8vIHNpdHRpbmcgaW5zaWRlIGEgcHJvdGVjdGVkIGRpcmVjdG9yeS4gVGhlIGxleGljYWwgcGF0aCBpcyByZXR1cm5lZCBzbyB0aGF0IHJlbW92aW5nIGEgc3ltbGlua2VkXG4gIC8vIG91dHB1dCBkaXJlY3RvcnkgZGVsZXRlcyB0aGUgbGluayBpdHNlbGYgcmF0aGVyIHRoYW4gaXRzIHRhcmdldCdzIGNvbnRlbnRzLlxuICBjb25zdCBsZXhpY2FsT3V0RGlyUGF0aCA9IG91dERpck9wdGlvbiA/IHBhdGgucmVzb2x2ZShjd2QsIG91dERpck9wdGlvbikgOiBwYXRoLmpvaW4ocGFja2FnZURpclBhdGgsICdkaXN0Jyk7XG4gIGNvbnN0IG91dERpclBhdGggPSB0b0Nhbm9uaWNhbFBhdGgobGV4aWNhbE91dERpclBhdGgpO1xuICAvLyBUaGUgZGVmYXVsdCBgZGlzdGAgaXMgY2hlY2tlZCB0b28sIHNpbmNlIGFuIGlucHV0IG1heSBiZSBnaXZlbiBpbnNpZGUgaXQsIGFuZCBhbiBpbnB1dCBtYXkgc2l0XG4gIC8vIG91dHNpZGUgYHNyY2AgKGUuZy4gYC0taW5wdXQgc2NyaXB0cy9tYWluLnRzYCkuXG4gIGNvbnN0IGNvbnRhaW5lZElucHV0ID0gaW5wdXRzPy5maW5kKFxuICAgIChpbnB1dCkgPT4gY29udGFpbnNQYXRoKG91dERpclBhdGgsIHRvQ2Fub25pY2FsUGF0aChpbnB1dCkpIHx8IGNvbnRhaW5zUGF0aChsZXhpY2FsT3V0RGlyUGF0aCwgaW5wdXQpXG4gICk7XG4gIGlmIChjb250YWluZWRJbnB1dCkge1xuICAgIGNvbnNvbGUuZXJyb3IoYFRoZSBvdXRwdXQgZGlyZWN0b3J5ICgke291dERpclBhdGh9KSBtdXN0IG5vdCBjb250YWluIHRoZSBpbnB1dCBmaWxlICgke2NvbnRhaW5lZElucHV0fSkuYCk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG4gIGlmICghb3V0RGlyT3B0aW9uKSByZXR1cm4gbGV4aWNhbE91dERpclBhdGg7XG5cbiAgY29uc3QgY2Fub25pY2FsUGFja2FnZURpclBhdGggPSB0b0Nhbm9uaWNhbFBhdGgocGFja2FnZURpclBhdGgpO1xuICBpZiAoY29udGFpbnNQYXRoKG91dERpclBhdGgsIGNhbm9uaWNhbFBhY2thZ2VEaXJQYXRoKSB8fCBjb250YWluc1BhdGgobGV4aWNhbE91dERpclBhdGgsIHBhY2thZ2VEaXJQYXRoKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYC0tb3V0LWRpciAoJHtvdXREaXJQYXRofSkgbXVzdCBub3QgY29udGFpbiB0aGUgcGFja2FnZSBkaXJlY3RvcnkgKCR7Y2Fub25pY2FsUGFja2FnZURpclBhdGh9KS5gKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbiAgLy8gYHNyY2AgaXRzZWxmIG1heSBiZSBhIHN5bWxpbmssIHNvIGl0IG5lZWRzIGl0cyBvd24gY2Fub25pY2FsaXphdGlvbi5cbiAgY29uc3Qgc3JjRGlyUGF0aCA9IHRvQ2Fub25pY2FsUGF0aChwYXRoLmpvaW4oY2Fub25pY2FsUGFja2FnZURpclBhdGgsICdzcmMnKSk7XG4gIGlmIChjb250YWluc1BhdGgoc3JjRGlyUGF0aCwgb3V0RGlyUGF0aCkgfHwgY29udGFpbnNQYXRoKHBhdGguam9pbihwYWNrYWdlRGlyUGF0aCwgJ3NyYycpLCBsZXhpY2FsT3V0RGlyUGF0aCkpIHtcbiAgICBjb25zb2xlLmVycm9yKGAtLW91dC1kaXIgKCR7b3V0RGlyUGF0aH0pIG11c3Qgbm90IGJlIGluc2lkZSB0aGUgc291cmNlIGRpcmVjdG9yeSAoJHtzcmNEaXJQYXRofSkuYCk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG4gIC8vIEEgcGFja2FnZS5qc29uIGF0IHRoZSBvdXRwdXQgZGlyZWN0b3J5IHJvb3QgaW5kaWNhdGVzIGFub3RoZXIgcGFja2FnZSdzIGRpcmVjdG9yeS4gVGhlIGZ1bmN0aW9uc1xuICAvLyB0YXJnZXQgaXMgZXhlbXB0IGJlY2F1c2UgaXQgZ2VuZXJhdGVzIGEgcGFja2FnZS5qc29uIHRoZXJlIGl0c2VsZi5cbiAgaWYgKHRhcmdldENhdGVnb3J5ICE9PSAnZnVuY3Rpb25zJyAmJiBmcy5leGlzdHNTeW5jKHBhdGguam9pbihvdXREaXJQYXRoLCAncGFja2FnZS5qc29uJykpKSB7XG4gICAgY29uc29sZS5lcnJvcihgLS1vdXQtZGlyICgke291dERpclBhdGh9KSBjb250YWlucyBhIHBhY2thZ2UuanNvbiwgc28gaXQgbG9va3MgbGlrZSBhIHBhY2thZ2UgZGlyZWN0b3J5LmApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuICByZXR1cm4gbGV4aWNhbE91dERpclBhdGg7XG59XG5cbi8vIFJlc29sdmVzIHN5bWxpbmtzIChhbmQgY2FzZSB2YXJpYW50cykgaW4gdGhlIGxvbmdlc3QgZXhpc3RpbmcgYW5jZXN0b3Igb2YgdGhlIGdpdmVuIHBhdGgsIGtlZXBpbmdcbi8vIHRoZSBub24tZXhpc3RlbnQgdGFpbCwgc28gdGhhdCBhIG5vdC15ZXQtY3JlYXRlZCBvdXRwdXQgZGlyZWN0b3J5IGlzIHN0aWxsIGNvbXBhcmVkIGNvcnJlY3RseS5cbmZ1bmN0aW9uIHRvQ2Fub25pY2FsUGF0aCh0YXJnZXRQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzdWZmaXhlczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGN1cnJlbnRQYXRoID0gdGFyZ2V0UGF0aDtcbiAgd2hpbGUgKCFmcy5leGlzdHNTeW5jKGN1cnJlbnRQYXRoKSkge1xuICAgIHN1ZmZpeGVzLnVuc2hpZnQocGF0aC5iYXNlbmFtZShjdXJyZW50UGF0aCkpO1xuICAgIGNvbnN0IHBhcmVudFBhdGggPSBwYXRoLmRpcm5hbWUoY3VycmVudFBhdGgpO1xuICAgIGlmIChwYXJlbnRQYXRoID09PSBjdXJyZW50UGF0aCkgYnJlYWs7XG4gICAgY3VycmVudFBhdGggPSBwYXJlbnRQYXRoO1xuICB9XG4gIHRyeSB7XG4gICAgY3VycmVudFBhdGggPSBmcy5yZWFscGF0aFN5bmMubmF0aXZlKGN1cnJlbnRQYXRoKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gS2VlcCB0aGUgb3JpZ2luYWwgcGF0aCB3aGVuIGl0IGNhbm5vdCBiZSByZXNvbHZlZCAoZS5nLiByZW1vdmVkIGNvbmN1cnJlbnRseSkuXG4gIH1cbiAgcmV0dXJuIHBhdGguam9pbihjdXJyZW50UGF0aCwgLi4uc3VmZml4ZXMpO1xufVxuXG5mdW5jdGlvbiBjb250YWluc1BhdGgocGFyZW50UGF0aDogc3RyaW5nLCBjaGlsZFBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKHBhcmVudFBhdGgsIGNoaWxkUGF0aCk7XG4gIGlmIChyZWxhdGl2ZVBhdGggPT09ICcnKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHBhdGguaXNBYnNvbHV0ZShyZWxhdGl2ZVBhdGgpKSByZXR1cm4gZmFsc2U7XG4gIC8vIE9ubHkgYW4gYWN0dWFsIGAuLmAgc2VnbWVudCBtZWFucyBcIm91dHNpZGVcIjsgYSBjaGlsZCBuYW1lIGxpa2UgYC4uZm9vYCBhbHNvIHN0YXJ0cyB3aXRoIGAuLmAuXG4gIHJldHVybiByZWxhdGl2ZVBhdGggIT09ICcuLicgJiYgIXJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKGAuLiR7cGF0aC5zZXB9YCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uc0lucHV0RW50cmllcyhpbnB1dHM6IHN0cmluZ1tdKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IGVudHJpZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IFtpbmRleCwgaW5wdXRdIG9mIGlucHV0cy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBuYW1lID0gaW5kZXggPT09IDAgPyAnaW5kZXgnIDogcGF0aC5iYXNlbmFtZShpbnB1dCwgcGF0aC5leHRuYW1lKGlucHV0KSk7XG4gICAgY29uc3QgY29uZmxpY3RpbmcgPSBlbnRyaWVzLmdldChuYW1lKTtcbiAgICBpZiAoY29uZmxpY3RpbmcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBFbnRyeSBuYW1lcyBjb25mbGljdCBpbiB0aGUgZnVuY3Rpb25zIGJ1aWxkOiBcIiR7bmFtZX1cIiAoJHtjb25mbGljdGluZ30gdnMgJHtpbnB1dH0pLiBMaXN0IC0taW5wdXQgZmlsZXMgZXhwbGljaXRseSB3aXRoIHVuaXF1ZSBiYXNlIG5hbWVzLCBrZWVwaW5nIHRoZSBtYWluIGVudHJ5IGZpcnN0LmBcbiAgICAgICk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICAgIGVudHJpZXMuc2V0KG5hbWUsIGlucHV0KTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMpO1xufVxuXG5mdW5jdGlvbiBnZXRJbnB1dEZpbGVzKGlucHV0OiBSb2xsZG93bk9wdGlvbnNbJ2lucHV0J10pOiBzdHJpbmdbXSB7XG4gIGlmICghaW5wdXQpIHJldHVybiBbXTtcbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHJldHVybiBbaW5wdXRdO1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShpbnB1dCkgPyBpbnB1dCA6IE9iamVjdC52YWx1ZXMoaW5wdXQpO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlJbnB1dChhcmd2OiBBcmd1bWVudHNUeXBlPHR5cGVvZiBidWlsZGVyPiwgY3dkOiBzdHJpbmcsIHBhY2thZ2VEaXJQYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGlmIChhcmd2LmlucHV0ICYmIGFyZ3YuaW5wdXQubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGlucHV0cyA9IGFyZ3YuaW5wdXQuZmxhdE1hcCgocCkgPT4ge1xuICAgICAgY29uc3QgcmF3ID0gcC50b1N0cmluZygpO1xuICAgICAgaWYgKCFpc0dsb2JQYXR0ZXJuKHJhdykpIHJldHVybiBbcGF0aC5yZXNvbHZlKGN3ZCwgcmF3KV07XG5cbiAgICAgIC8vIGBmcy5nbG9iU3luY2AgcmVxdWlyZXMgXCIvXCIgYXMgdGhlIHNlcGFyYXRvciBldmVuIG9uIFdpbmRvd3MgKGEgbm8tb3Agb24gUE9TSVgpLlxuICAgICAgLy8gQW1iaWVudCBkZWNsYXJhdGlvbiBmaWxlcyBhbHdheXMgcGFydGljaXBhdGUgaW4gdHlwZSBjaGVja2luZywgc28gdGhleSBtdXN0IG5vdCBiZWNvbWUgZW50cmllcy5cbiAgICAgIC8vIGB0aHJvd0lmTm9FbnRyeTogZmFsc2VgIHNraXBzIGEgYnJva2VuIHN5bWxpbmsgaW5zdGVhZCBvZiBjcmFzaGluZy5cbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBmc1xuICAgICAgICAuZ2xvYlN5bmMocmF3LnNwbGl0KHBhdGguc2VwKS5qb2luKCcvJyksIHsgY3dkIH0pXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKG0pID0+ICEvXFwuZFxcLltjbV0/dHMkLy50ZXN0KG0pICYmIGZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShjd2QsIG0pLCB7IHRocm93SWZOb0VudHJ5OiBmYWxzZSB9KT8uaXNGaWxlKClcbiAgICAgICAgKVxuICAgICAgICAuc29ydCgpXG4gICAgICAgIC5tYXAoKG0pID0+IHBhdGgucmVzb2x2ZShjd2QsIG0pKTtcbiAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBObyBmaWxlcyBtYXRjaGVkIHRoZSBpbnB1dCBwYXR0ZXJuOiAke3Jhd31gKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1hdGNoZXM7XG4gICAgfSk7XG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KGlucHV0cyldO1xuICB9XG5cbiAgY29uc3Qgc3JjRGlyUGF0aCA9IHBhdGguam9pbihwYWNrYWdlRGlyUGF0aCwgJ3NyYycpO1xuICBmb3IgKGNvbnN0IGV4dCBvZiBbJ3RzJywgJ3RzeCcsICdjdHMnLCAnbXRzJ10pIHtcbiAgICBjb25zdCBpbnB1dCA9IHBhdGguam9pbihzcmNEaXJQYXRoLCBgaW5kZXguJHtleHR9YCk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoaW5wdXQpKSByZXR1cm4gW2lucHV0XTtcbiAgfVxuXG4gIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkZXRlY3QgaW5wdXQgZmlsZS4nKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufVxuXG4vLyBPbmx5IHJlYWwgZ2xvYiBzeW50YXggY291bnRzIGFzIGEgcGF0dGVybjogXCIqXCIsIFwiP1wiLCBhIFwiWy4uLl1cIiBjbGFzcywgb3IgYSBcInthLGJ9XCIgYWx0ZXJuYXRpb24uXG4vLyBBIGJhcmUgXCIrXCIgb3IgYSBzaW5nbGUtaXRlbSBicmFjZSAoXCJ7ZW50cnl9XCIpIGlzIGFuIG9yZGluYXJ5IGZpbGVuYW1lIGNoYXJhY3Rlci5cbmZ1bmN0aW9uIGlzR2xvYlBhdHRlcm4oaW5wdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL1sqP118XFxbW15cXF1dKlxcXXxcXHtbXn1dKixbXn1dKlxcfS8udGVzdChpbnB1dCk7XG59XG5cbmZ1bmN0aW9uIGRldGVjdFRhcmdldERldGFpbCh0YXJnZXRDYXRlZ29yeTogc3RyaW5nLCBpbnB1dHM6IHN0cmluZ1tdLCBwYWNrYWdlRGlyUGF0aDogc3RyaW5nKTogVGFyZ2V0RGV0YWlsIHtcbiAgc3dpdGNoICh0YXJnZXRDYXRlZ29yeSkge1xuICAgIGNhc2UgJ2FwcCc6IHtcbiAgICAgIHJldHVybiAnYXBwLW5vZGUnO1xuICAgIH1cbiAgICBjYXNlICdmdW5jdGlvbnMnOiB7XG4gICAgICByZXR1cm4gJ2Z1bmN0aW9ucyc7XG4gICAgfVxuICAgIGNhc2UgJ2xpYic6IHtcbiAgICAgIGlmIChpbnB1dHMuc29tZSgoaW5wdXQpID0+IGlucHV0LmVuZHNXaXRoKCcudHN4JykpIHx8IGRvZXNTcmNDb250YWluVHN4KHBhY2thZ2VEaXJQYXRoKSkge1xuICAgICAgICByZXR1cm4gJ2xpYi1yZWFjdCc7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ2xpYic7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3RhcmdldCBvcHRpb24gbXVzdCBiZSBvbmUgb2Y6ICcgKyBhbGxUYXJnZXRDYXRlZ29yaWVzLmpvaW4oJywgJykpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkb2VzU3JjQ29udGFpblRzeChwYWNrYWdlRGlyUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNyY0RpclBhdGggPSBwYXRoLmpvaW4ocGFja2FnZURpclBhdGgsICdzcmMnKTtcbiAgcmV0dXJuIGRvZXNEaXJlY3RvcnlDb250YWluVHN4KHNyY0RpclBhdGgpO1xufVxuXG5mdW5jdGlvbiBkb2VzRGlyZWN0b3J5Q29udGFpblRzeChkaXJQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBlbnRyaWVzID0gZnMucmVhZGRpclN5bmMoZGlyUGF0aCwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuICAgIHJldHVybiBlbnRyaWVzLnNvbWUoKGVudHJ5KSA9PiB7XG4gICAgICBjb25zdCBlbnRyeVBhdGggPSBwYXRoLmpvaW4oZGlyUGF0aCwgZW50cnkubmFtZSk7XG4gICAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIGRvZXNEaXJlY3RvcnlDb250YWluVHN4KGVudHJ5UGF0aCk7XG4gICAgICByZXR1cm4gZW50cnkuaXNGaWxlKCkgJiYgZW50cnkubmFtZS5lbmRzV2l0aCgnLnRzeCcpO1xuICAgIH0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVQYWNrYWdlSnNvbkZvckZ1bmN0aW9ucyhcbiAgb3V0RGlyUGF0aDogc3RyaW5nLFxuICBwYWNrYWdlSnNvbjogUGFja2FnZUpzb24sXG4gIG1vZHVsZVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHBhY2thZ2VKc29uLm5hbWUgKz0gJy1kaXN0JztcbiAgY29uc3QgZXNtUGFja2FnZSA9IHBhY2thZ2VKc29uLnR5cGUgPT09ICdtb2R1bGUnO1xuICBjb25zdCBlc21PdXRwdXQgPSBpc0VzbU91dHB1dChlc21QYWNrYWdlLCBtb2R1bGVUeXBlKTtcbiAgcGFja2FnZUpzb24ubWFpbiA9IGVzbVBhY2thZ2UgPT09IGVzbU91dHB1dCA/ICdpbmRleC5qcycgOiBlc21PdXRwdXQgPyAnaW5kZXgubWpzJyA6ICdpbmRleC5janMnO1xuXG4gIC8vIFByZXZlbnQgRmlyZWJhc2UgRnVuY3Rpb25zIGZyb20gcnVubmluZyBgYnVpbGRgIHNjcmlwdCBzaW5jZSB3ZSBhcmUgYnVpbGRpbmcgY29kZSBiZWZvcmUgZGVwbG95aW5nLlxuICBkZWxldGUgcGFja2FnZUpzb24uc2NyaXB0cztcbiAgLy8gZGV2RGVwZW5kZW5jaWVzIGFyZSBub3QgcmVxdWlyZWQgc2luY2Ugd2UgYXJlIGJ1aWxkaW5nIGNvZGUgYmVmb3JlIGRlcGxveWluZy5cbiAgZGVsZXRlIHBhY2thZ2VKc29uLmRldkRlcGVuZGVuY2llcztcblxuICBhd2FpdCBmcy5wcm9taXNlcy5ta2RpcihvdXREaXJQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgZnMucHJvbWlzZXMud3JpdGVGaWxlKHBhdGguam9pbihvdXREaXJQYXRoLCAncGFja2FnZS5qc29uJyksIEpTT04uc3RyaW5naWZ5KHBhY2thZ2VKc29uKSk7XG59XG5cbmZ1bmN0aW9uIGdldE91dHB1dE9wdGlvbnNMaXN0KFxuICBhcmd2OiBBcmd1bWVudHNUeXBlPEFueUJ1aWxkZXJUeXBlPixcbiAgdGFyZ2V0RGV0YWlsOiBUYXJnZXREZXRhaWwsXG4gIG91dERpclBhdGg6IHN0cmluZyxcbiAgaXNFc21QYWNrYWdlOiBib29sZWFuLFxuICBwYWNrYWdlRGlyUGF0aDogc3RyaW5nXG4pOiBPdXRwdXRPcHRpb25zW10ge1xuICBpZiAodGFyZ2V0RGV0YWlsID09PSAnYXBwLW5vZGUnIHx8IHRhcmdldERldGFpbCA9PT0gJ2Z1bmN0aW9ucycpIHtcbiAgICBjb25zdCBlc21PdXRwdXQgPSBpc0VzbU91dHB1dChpc0VzbVBhY2thZ2UsIGFyZ3YubW9kdWxlVHlwZSk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgZGlyOiBvdXREaXJQYXRoLFxuICAgICAgICBmb3JtYXQ6IGVzbU91dHB1dCA/ICdtb2R1bGUnIDogJ2NvbW1vbmpzJyxcbiAgICAgICAgbWluaWZ5OiBhcmd2Lm1pbmlmeSxcbiAgICAgICAgc291cmNlbWFwOiBhcmd2LnNvdXJjZW1hcCAmJiAnaW5saW5lJyxcbiAgICAgICAgc3RyaWN0OiAhZXNtT3V0cHV0LFxuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgLy8gVGhlIGZvbGxvd2luZyBpbXBvcnQgc3RhdGVtZW50IGluIGFuIGVzbSBtb2R1bGUgY2F1c2VzIHRoZSBmb2xsb3dpbmcgZXJyb3I6XG4gIC8vIFN0YXRlbWVudDpcbiAgLy8gICBpbXBvcnQgeyB1c2VQcmV2aW91cyB9IGZyb20gJ3JlYWN0LXVzZSc7XG4gIC8vIEVycm9yOlxuICAvLyAgIE5hbWVkIGV4cG9ydCAndXNlUHJldmlvdXMnIG5vdCBmb3VuZC4gVGhlIHJlcXVlc3RlZCBtb2R1bGUgJ3JlYWN0LXVzZScgaXMgYSBDb21tb25KUyBtb2R1bGUsXG4gIC8vICAgd2hpY2ggbWF5IG5vdCBzdXBwb3J0IGFsbCBtb2R1bGUuZXhwb3J0cyBhcyBuYW1lZCBleHBvcnRzLlxuICAvLyBXZSBuZWVkIGNqcyBtb2R1bGVzIGZvciB3ZWIgYXBwcyB0byBhdm9pZCB0aGUgZXJyb3IuXG4gIC8vIEFsc28sIHNwbGl0dGluZyBhIGxpYnJhcnkgaXMgdXNlZnVsIGluIGJvdGggbW9kdWxlcywgc28gcHJlc2VydmVNb2R1bGVzIHNob3VsZCBiZSB0cnVlLlxuICBjb25zdCBvdXRwdXRPcHRpb25zTGlzdDogT3V0cHV0T3B0aW9uc1tdID0gW107XG4gIGNvbnN0IG1vZHVsZVR5cGUgPSBhcmd2Lm1vZHVsZVR5cGUgfHwgJ2JvdGgnO1xuICAvLyAuanMgZmlsZXMgaW4gYSBwYWNrYWdlIHdpdGggYFwidHlwZVwiOiBcIm1vZHVsZVwiYCBhcmUgdHJlYXRlZCBhcyBlc20uIFRvIGxldCBhIGNqcyBwcm9qZWN0IGltcG9ydCBhblxuICAvLyBlc20gcGFja2FnZSwgdGhlIGZvcm1hdCB0aGF0IGRvZXMgbm90IG1hdGNoIHRoZSBwYWNrYWdlIHR5cGUgdXNlcyAuY2pzIG9yIC5tanMgaW5zdGVhZCBvZiAuanMuXG4gIGlmIChtb2R1bGVUeXBlID09PSAnY2pzJyB8fCBtb2R1bGVUeXBlID09PSAnYm90aCcgfHwgKG1vZHVsZVR5cGUgPT09ICdlaXRoZXInICYmICFpc0VzbVBhY2thZ2UpKSB7XG4gICAgb3V0cHV0T3B0aW9uc0xpc3QucHVzaCh7XG4gICAgICBkaXI6IG91dERpclBhdGgsXG4gICAgICBlbnRyeUZpbGVOYW1lczogaXNFc21QYWNrYWdlID8gJ1tuYW1lXS5janMnIDogJ1tuYW1lXS5qcycsXG4gICAgICBmb3JtYXQ6ICdjb21tb25qcycsXG4gICAgICBtaW5pZnk6IGFyZ3YubWluaWZ5LFxuICAgICAgcHJlc2VydmVNb2R1bGVzOiB0cnVlLFxuICAgICAgcHJlc2VydmVNb2R1bGVzUm9vdDogcGF0aC5qb2luKHBhY2thZ2VEaXJQYXRoLCAnc3JjJyksXG4gICAgICBzb3VyY2VtYXA6IGFyZ3Yuc291cmNlbWFwLFxuICAgICAgc3RyaWN0OiB0cnVlLFxuICAgIH0pO1xuICB9XG4gIGlmIChtb2R1bGVUeXBlID09PSAnZXNtJyB8fCBtb2R1bGVUeXBlID09PSAnYm90aCcgfHwgKG1vZHVsZVR5cGUgPT09ICdlaXRoZXInICYmIGlzRXNtUGFja2FnZSkpIHtcbiAgICBvdXRwdXRPcHRpb25zTGlzdC5wdXNoKHtcbiAgICAgIGRpcjogb3V0RGlyUGF0aCxcbiAgICAgIGVudHJ5RmlsZU5hbWVzOiBpc0VzbVBhY2thZ2UgPyAnW25hbWVdLmpzJyA6ICdbbmFtZV0ubWpzJyxcbiAgICAgIGZvcm1hdDogJ21vZHVsZScsXG4gICAgICBtaW5pZnk6IGFyZ3YubWluaWZ5LFxuICAgICAgcHJlc2VydmVNb2R1bGVzOiB0cnVlLFxuICAgICAgcHJlc2VydmVNb2R1bGVzUm9vdDogcGF0aC5qb2luKHBhY2thZ2VEaXJQYXRoLCAnc3JjJyksXG4gICAgICBzb3VyY2VtYXA6IGFyZ3Yuc291cmNlbWFwLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBvdXRwdXRPcHRpb25zTGlzdDtcbn1cblxuZnVuY3Rpb24gaXNFc21PdXRwdXQoaXNFc21QYWNrYWdlOiBib29sZWFuLCBtb2R1bGVUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG1vZHVsZVR5cGUgPT09ICdlc20nIHx8ICgoIW1vZHVsZVR5cGUgfHwgbW9kdWxlVHlwZSA9PT0gJ2VpdGhlcicpICYmIGlzRXNtUGFja2FnZSk7XG59XG4iLCJpbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5cbmltcG9ydCB0eXBlIHsgQ29tbWFuZE1vZHVsZSwgSW5mZXJyZWRPcHRpb25UeXBlcyB9IGZyb20gJ3lhcmdzJztcblxuaW1wb3J0IHsgbG9hZEVudmlyb25tZW50VmFyaWFibGVzV2l0aENhY2hlIH0gZnJvbSAnLi4vZW52LmpzJztcbmltcG9ydCB7IHNoYXJlZE9wdGlvbnNCdWlsZGVyIH0gZnJvbSAnLi4vc2hhcmVkT3B0aW9uc0J1aWxkZXIuanMnO1xuXG5jb25zdCBidWlsZGVyID0ge1xuICAuLi5zaGFyZWRPcHRpb25zQnVpbGRlcixcbiAgd2F0Y2g6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1doZXRoZXIgd2F0Y2ggbW9kZSBpcyBlbmFibGVkIG9yIG5vdCcsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGFsaWFzOiAndycsXG4gIH0sXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgcnVuOiBDb21tYW5kTW9kdWxlPHVua25vd24sIEluZmVycmVkT3B0aW9uVHlwZXM8dHlwZW9mIGJ1aWxkZXI+PiA9IHtcbiAgY29tbWFuZDogJ3J1biA8ZmlsZT4nLFxuICBkZXNjcmliZTogJ1J1biBzY3JpcHQnLFxuICBidWlsZGVyLFxuICBoYW5kbGVyKGFyZ3YpIHtcbiAgICBsb2FkRW52aXJvbm1lbnRWYXJpYWJsZXNXaXRoQ2FjaGUoYXJndiwgcHJvY2Vzcy5jd2QoKSk7XG5cbiAgICBjb25zdCBmaWxlID0gYXJndi5maWxlPy50b1N0cmluZygpID8/ICcnO1xuXG4gICAgLy8gY2YuIGh0dHBzOi8vYnVuLnNoL2d1aWRlcy91dGlsL2RldGVjdC1idW5cbiAgICBjb25zdCBpc1J1bm5pbmdPbkJ1biA9IHByb2Nlc3MudmVyc2lvbnMuYnVuO1xuICAgIGNvbnN0IHJ1bnRpbWUgPSBpc1J1bm5pbmdPbkJ1biA/ICdidW4nIDogJ25vZGUnO1xuICAgIGNvbnN0IGFyZ3MgPSBpc1J1bm5pbmdPbkJ1biA/IFsnLS1idW4nXSA6IFsnLS1uby13YXJuaW5ncycsICctLWltcG9ydCcsICd0c3gnXTtcbiAgICBpZiAoYXJndi53YXRjaCkge1xuICAgICAgYXJncy5wdXNoKCctLXdhdGNoJyk7XG4gICAgfVxuICAgIGFyZ3MucHVzaChmaWxlKTtcbiAgICBjb25zdCBbLCAuLi5hZGRpdGlvbmFsQXJndW1lbnRzXSA9IGFyZ3YuXztcbiAgICBjb25zdCBydW50aW1lQXJncyA9IFsuLi5hcmdzLCAuLi5hZGRpdGlvbmFsQXJndW1lbnRzLm1hcCgoYXJnKSA9PiBhcmcudG9TdHJpbmcoKSldO1xuICAgIGlmIChhcmd2LnZlcmJvc2UpIHtcbiAgICAgIGNvbnNvbGUuaW5mbyhgUnVubmluZyAnJHtydW50aW1lfSAke3J1bnRpbWVBcmdzLmpvaW4oJyAnKX0nYCk7XG4gICAgfVxuICAgIGNvbnN0IHJldCA9IGNoaWxkX3Byb2Nlc3Muc3Bhd25TeW5jKHJ1bnRpbWUsIHJ1bnRpbWVBcmdzLCB7XG4gICAgICBzdGRpbzogJ2luaGVyaXQnLFxuICAgICAgZW52OiB7IC4uLnByb2Nlc3MuZW52IH0sXG4gICAgfSk7XG4gICAgcHJvY2Vzcy5leGl0KHJldC5zdGF0dXMgPz8gMSk7XG4gIH0sXG59O1xuIiwiaW1wb3J0IGZzIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgcmVtb3ZlTnBtQW5kWWFybkVudmlyb25tZW50VmFyaWFibGVzIH0gZnJvbSAnQHdpbGxib29zdGVyL3NoYXJlZC1saWItbm9kZSc7XG5pbXBvcnQgeWFyZ3MgZnJvbSAneWFyZ3MnO1xuaW1wb3J0IHsgaGlkZUJpbiB9IGZyb20gJ3lhcmdzL2hlbHBlcnMnO1xuXG5pbXBvcnQgeyBhcHAsIGZ1bmN0aW9ucywgbGliIH0gZnJvbSAnLi9jb21tYW5kcy9idWlsZC9idWlsZC5qcyc7XG5pbXBvcnQgeyBydW4gfSBmcm9tICcuL2NvbW1hbmRzL3J1bi5qcyc7XG5pbXBvcnQgeyBzaGFyZWRPcHRpb25zQnVpbGRlciB9IGZyb20gJy4vc2hhcmVkT3B0aW9uc0J1aWxkZXIuanMnO1xuaW1wb3J0IHsgZ2V0QnVpbGRUc1Jvb3RQYXRoIH0gZnJvbSAnLi91dGlscy5qcyc7XG5cbnJlbW92ZU5wbUFuZFlhcm5FbnZpcm9ubWVudFZhcmlhYmxlcyhwcm9jZXNzLmVudik7XG5cbmF3YWl0IHlhcmdzKGhpZGVCaW4ocHJvY2Vzcy5hcmd2KSlcbiAgLnNjcmlwdE5hbWUoJ2J1aWxkLXRzJylcbiAgLm9wdGlvbnMoc2hhcmVkT3B0aW9uc0J1aWxkZXIpXG4gIC5jb21tYW5kKGFwcClcbiAgLmNvbW1hbmQoZnVuY3Rpb25zKVxuICAuY29tbWFuZChsaWIpXG4gIC5jb21tYW5kKHJ1bilcbiAgLmRlbWFuZENvbW1hbmQoKVxuICAuc3RyaWN0KClcbiAgLnZlcnNpb24oZ2V0VmVyc2lvbigpKVxuICAuaGVscCgpLmFyZ3Y7XG5cbmZ1bmN0aW9uIGdldFZlcnNpb24oKTogc3RyaW5nIHtcbiAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oZ2V0QnVpbGRUc1Jvb3RQYXRoKCksICdwYWNrYWdlLmpzb24nKSwgJ3V0ZjgnKSkgYXMge1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgfTtcbiAgcmV0dXJuIHBhY2thZ2VKc29uLnZlcnNpb247XG59XG4iXSwibWFwcGluZ3MiOiI2bUJBTUEsSUFBSSxFQUtKLFNBQWdCLEVBQ2QsRUFDQSxFQUNvQyxDQU9wQyxPQU5LLElBQ0gsRUFBVSxFQUFpQyxFQUFNLENBQUcsRUFDaEQsRUFBSyxTQUNQLFFBQVEsS0FBSyxtQkFBb0IsT0FBTyxLQUFLLENBQU8sQ0FBQyxHQUdsRCxDQUNULENBS0EsU0FBZ0IsRUFDZCxFQUNBLEVBQ3dCLENBQ3hCLElBQU0sRUFBcUMsQ0FBQyxFQUN0QyxFQUFjLElBQUksSUFBSSxDQUMxQixJQUFJLEVBQUssUUFBVSxDQUFDLEVBQUEsQ0FBRyxRQUFTLEdBQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUM3RCxHQUFJLEVBQUssV0FBYSxPQUFPLEtBQUssRUFBa0MsRUFBTSxDQUFHLENBQUMsRUFBSSxDQUFDLENBQ3JGLENBQUMsRUFDRCxJQUFLLElBQU0sS0FBUSxFQUNiLFFBQVEsSUFBSSxLQUFVLElBQUEsS0FFMUIsRUFBVyxlQUFlLEtBQVUsS0FBSyxVQUFVLFFBQVEsSUFBSSxFQUFLLEdBS3RFLE9BSEksRUFBSyxTQUNQLFFBQVEsS0FBSyxtQkFBb0IsT0FBTyxLQUFLLENBQVUsQ0FBQyxFQUVuRCxDQUNULENDM0NBLE1BQWEsRUFBc0IsQ0FBQyxNQUFPLFlBQWEsS0FBSyxFQ0k3RCxlQUFzQixFQUFnQixFQUE2RCxDQUNqRyxJQUFNLEVBQWtCLEVBQUssS0FBSyxFQUFTLGNBQWMsRUFDekQsR0FBSSxDQUNGLElBQU0sRUFBa0IsTUFBTSxFQUFHLFNBQVMsU0FBUyxFQUFpQixNQUFNLEVBQzFFLE1BQU8sQ0FBQyxLQUFLLE1BQU0sQ0FBZSxFQUFrQixDQUFlLENBQ3JFLE1BQVEsQ0FFUixDQUNBLE1BQU8sQ0FBQyxJQUFBLEdBQVcsQ0FBZSxDQUNwQyxDQUVBLFNBQWdCLEdBQTZCLENBQzNDLE9BQU8sRUFBSyxRQUFRLEVBQUssUUFBUSxFQUFJLGNBQWMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUN0RSxDQUdBLFNBQWdCLEdBQWEsRUFBOEMsQ0FDekUsTUFBTyxjQUFjLEtBQUssRUFBWSxNQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQ3RELENBRUEsU0FBZ0IsR0FBZSxFQUFvQixDQUNqRCxNQUFPLEdBQUcsRUFBSyxZQUFZLEVBQUUsR0FBRyxFQUFJLEVBQUssU0FBUyxFQUFJLENBQUMsRUFBRSxHQUFHLEVBQUksRUFBSyxRQUFRLENBQUMsRUFBRSxHQUFHLEVBQUksRUFBSyxTQUFTLENBQUMsRUFBRSxHQUFHLEVBQ3pHLEVBQUssV0FBVyxDQUNsQixFQUFFLEdBQUcsRUFBSSxFQUFLLFdBQVcsQ0FBQyxHQUM1QixDQUVBLFNBQVMsRUFBSSxFQUF1QixDQUNsQyxPQUFPLE9BQU8sQ0FBSyxDQUFDLENBQUMsU0FBUyxFQUFHLEdBQUcsQ0FDdEMsQ0FFQSxTQUFnQixFQUFlLEVBQThCLENBQzNELEdBQUksRUFBZSxJQUFNLE1BQU8sR0FBRyxLQUFLLE1BQU0sQ0FBWSxFQUFFLElBRTVELElBQU0sRUFBVSxFQUFlLElBQy9CLEdBQUksRUFBVSxHQUFJLE1BQU8sR0FBRyxPQUFPLEVBQVEsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUV2RCxJQUFNLEVBQVUsS0FBSyxNQUFNLEVBQVUsRUFBRSxFQUN2QyxNQUFPLEdBQUcsRUFBUSxJQUFJLFFBQVEsRUFBVSxFQUFVLEdBQUEsQ0FBSSxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQ3BFLENDMUNBLE1BQWEsRUFBdUIsQ0FDbEMsR0FBRyxFQUNILE9BQVEsQ0FDTixZQUFhLDhDQUNiLEtBQU0sVUFDTixNQUFPLEdBQ1QsQ0FDRixFQ1BhQSxFQUFVLENBQ3JCLEdBQUcsRUFDSCxNQUFPLENBQ0wsWUFDRSxnTUFDRixLQUFNLFFBQ04sTUFBTyxHQUNULEVBQ0EsT0FBUSxDQUNOLFlBQWEsMENBQ2IsS0FBTSxVQUNOLFFBQVMsRUFDWCxFQUNBLFVBQVcsQ0FDVCxZQUFhLHVDQUNiLEtBQU0sVUFDTixRQUFTLEVBQ1gsRUFDQSxTQUFVLENBQ1IsWUFBYSxvQ0FDYixLQUFNLE9BQ1IsRUFDQSxPQUFRLENBQ04sWUFBYSxpRUFDYixLQUFNLFNBQ04sTUFBTyxHQUNULEVBQ0EsT0FBUSxDQUNOLFlBQWEsdUNBQ2IsS0FBTSxPQUNSLEVBQ0EsY0FBZSxDQUNiLFlBQWEscURBQ2IsS0FBTSxVQUNOLFFBQVMsRUFDWCxFQUNBLE1BQU8sQ0FDTCxZQUFhLHVDQUNiLEtBQU0sVUFDTixNQUFPLEdBQ1QsQ0FDRixFQUVhLEVBQWEsQ0FDeEIsR0FBR0EsRUFDSCxXQUFZLENBQ1YsWUFBYSxpQ0FDYixLQUFNLFNBQ04sTUFBTyxHQUNULENBQ0YsRUFFYSxHQUFtQixDQUM5QixHQUFHLEVBQ0gsZ0JBQWlCLENBQ2YsWUFBYSx5Q0FDYixLQUFNLFNBQ1IsQ0FDRixFQUVhLEdBQWEsQ0FDeEIsR0FBR0EsRUFDSCxXQUFZLENBQ1YsWUFBYSx1Q0FDYixLQUFNLFNBQ04sTUFBTyxHQUNULEVBQ0EsZ0JBQWlCLENBQ2YsWUFBYSxtRUFDYixLQUFNLFVBQ04sUUFBUyxFQUNYLENBQ0YsRUN2RUEsU0FBZ0IsR0FBWSxFQUFtQixFQUFVLEdBQWEsQ0FDcEUsSUFBTSxFQUFPLEVBQU0sTUFBUyxFQUFNLE9BQWlCLEtBQzdDLEVBQWMsRUFBTyxHQUFHLEVBQUssSUFBTSxHQUVuQyxFQUFVLEdBRE0sRUFBTSxPQUFTLFdBQVcsRUFBTSxPQUFPLElBQU0sS0FDaEMsSUFBYyxFQUFNLFVBRWpELEVBQWMsQ0FBQyxFQUFVLENBQUMsT0FBUSxLQUFLLEVBQUcsT0FBTyxHQUFTLENBQUMsRUFFN0QsRUFBTSxLQUNSLEVBQVksS0FBSyxFQUFVLE9BQVEsRUFBTSxHQUFHLENBQUMsRUFHM0MsRUFBTSxJQUNSLEVBQVksS0FBSyxHQUFHLEVBQU0sSUFBSSxNQUFRLEVBQU0sR0FBRyxJQUFJLEVBQU0sSUFBSSxLQUFLLEdBQUcsRUFBTSxJQUFJLE9BQU8sRUFBRSxFQUMvRSxFQUFNLElBQ2YsRUFBWSxLQUFLLEVBQU0sRUFBRSxFQUd2QixFQUFNLE9BQ1IsRUFBWSxLQUFLLEVBQVUsTUFBTyxFQUFNLEtBQUssQ0FBQyxFQUc1QyxFQUFNLE9BQ1IsRUFBWSxLQUFLLEVBQVUsTUFBTyxFQUFNLE1BQU0sUUFBUSxHQUFHLElBQWMsRUFBTSxRQUFRLElBQUssRUFBRSxDQUFDLENBQUMsRUFHaEcsRUFBWSxLQUFLLEdBQUksRUFBRSxFQUN2QixRQUFRLE1BQU0sRUFBWSxLQUFLO0NBQUksQ0FBQyxFQUUvQixHQUFTLEVBQVEsS0FBSyxDQUFDLENBQzlCLENDdkJBLE1BQU0sR0FBcUIsSUFBSSxJQUFJLENBQWMsRUFFakQsU0FBZ0IsR0FDZCxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ3lCLENBQ3pCLElBQU0sRUFBMEIsSUFBSSxJQUNsQyxHQUE0QixFQUFNLEVBQWMsRUFBYSxFQUFnQixDQUFTLENBQ3hGLEVBQ0EsTUFBUSxJQUFPLEdBQWMsQ0FBRSxHQUFLLEdBQXVCLEVBQUksQ0FBdUIsQ0FDeEYsQ0FHQSxTQUFTLEdBQXVCLEVBQVksRUFBNkIsQ0FDdkUsR0FBSSxFQUFNLElBQUksQ0FBRSxFQUFHLE1BQU8sR0FDMUIsSUFBSyxJQUFJLEVBQWEsRUFBRyxRQUFRLEdBQUcsRUFBRyxJQUFlLEdBQUksRUFBYSxFQUFHLFFBQVEsSUFBSyxFQUFhLENBQUMsRUFDbkcsR0FBSSxFQUFNLElBQUksRUFBRyxNQUFNLEVBQUcsQ0FBVSxDQUFDLEVBQUcsTUFBTyxHQUVqRCxNQUFPLEVBQ1QsQ0FFQSxTQUFTLEdBQ1AsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNVLENBQ1YsSUFBTSxFQUFlLENBQUMsR0FBSSxFQUFLLFVBQVksQ0FBQyxDQUFFLENBQUMsQ0FBQyxJQUFLLEdBQVMsRUFBSyxTQUFTLENBQUMsRUFDekUsRUFBWSxlQUFlLG1CQUM3QixFQUFhLEtBQUssZUFBZSxFQUduQyxFQUFhLEtBQ1gsR0FBRyxPQUFPLEtBQUssRUFBWSxjQUFnQixDQUFDLENBQUMsRUFDN0MsR0FBRyxPQUFPLEtBQUssRUFBWSxrQkFBb0IsQ0FBQyxDQUFDLEVBQ2pELEdBQUcsT0FBTyxLQUFLLEVBQVksc0JBQXdCLENBQUMsQ0FBQyxDQUN2RCxFQUVBLElBQU0sRUFBZ0IsRUFBSyxRQUFRLENBQWMsRUFDakQsR0FBSSxFQUFHLFdBQVcsRUFBSyxLQUFLLEVBQUssUUFBUSxDQUFhLEVBQUcsY0FBYyxDQUFDLEVBQUcsQ0FDekUsSUFBTSxFQUFjLEVBQUcsWUFBWSxFQUFlLENBQUUsY0FBZSxFQUFLLENBQUMsRUFDekUsSUFBSyxJQUFNLEtBQWMsRUFBYSxDQUNwQyxHQUFJLENBQUMsRUFBVyxZQUFZLEVBQUcsU0FFL0IsSUFBTSxFQUFrQixFQUFLLEtBQUssRUFBZSxFQUFXLEtBQU0sY0FBYyxFQUNoRixHQUFJLENBQUMsRUFBRyxXQUFXLENBQWUsRUFBRyxTQUVyQyxJQUFNLEVBQWdDLEtBQUssTUFBTSxFQUFHLGFBQWEsRUFBaUIsTUFBTSxDQUFDLEVBQ3JGLEVBQVksZUFBZSxFQUFpQixNQUFRLEtBQ3RELEVBQWEsS0FDWCxHQUFHLE9BQU8sS0FBSyxFQUFpQixjQUFnQixDQUFDLENBQUMsRUFDbEQsR0FBRyxPQUFPLEtBQUssRUFBaUIsa0JBQW9CLENBQUMsQ0FBQyxFQUN0RCxHQUFHLE9BQU8sS0FBSyxFQUFpQixzQkFBd0IsQ0FBQyxDQUFDLENBQzVELENBRUosQ0FDRixDQUlBLElBQU0sR0FEc0IsSUFBaUIsWUFBYyxJQUFpQixjQUMvQixFQUFZLElBQUksRUFBVSxHQUFLLElBQUEsR0FDNUUsT0FBTyxFQUFnQixFQUFhLE9BQVEsR0FBUyxDQUFDLEVBQUssV0FBVyxDQUFhLENBQUMsRUFBSSxDQUMxRixDQUVBLFNBQVMsR0FBYyxFQUFxQixDQUMxQyxPQUFPLEVBQUcsV0FBVyxPQUFPLEdBQUssR0FBbUIsSUFBSSxDQUFFLENBQzVELENDOUVBLE1BQU0sR0FBdUIsQ0FBQyxPQUFRLE9BQVEsTUFBTyxPQUFRLE9BQVEsT0FBUSxNQUFPLE1BQU0sRUFFMUYsU0FBZ0IsRUFBc0IsRUFBcUIsQ0FDekQsT0FDRSxHQUFxQixLQUFNLEdBQWMsRUFBRyxTQUFTLENBQVMsQ0FBQyxHQUFLLENBQUMsRUFBRyxXQUFXLElBQUksR0FBSyxDQUFDLEdBQWtCLENBQUUsQ0FFckgsQ0FFQSxTQUFTLEdBQWtCLEVBQXFCLENBQzlDLE9BQU8sRUFBRyxTQUFTLGdCQUFnQixHQUFLLEVBQUcsU0FBUyxrQkFBa0IsQ0FDeEUsQ0FFQSxTQUFnQixFQUFnQixFQUFZLEVBQXdELENBQ2xHLElBQU0sRUFBTyxHQUFjLENBQUUsRUFDdkIsRUFBYSxHQUFvQixDQUFFLEVBQ25DLEVBQU0sRUFBVSxFQUFJLEVBQU0sQ0FBRSxPQUFNLFlBQVcsQ0FBQyxFQUNwRCxHQUFJLENBQUMsRUFBYyxDQUFHLEVBQUcsT0FBTyxFQUNoQyxHQUFJLEVBQUcsU0FBUyxLQUFLLEdBQUssSUFBZSxjQUFlLENBQ3RELElBQU0sRUFBYyxFQUFVLEVBQUksRUFBTSxDQUFFLE9BQU0sV0FBWSxVQUFXLENBQUMsRUFDeEUsR0FBSSxDQUFDLEVBQWMsQ0FBVyxFQUFHLE9BQU8sQ0FDMUMsQ0FFRixDQUVBLFNBQVMsRUFBYyxFQUE0QyxDQUNqRSxPQUFPLEVBQUksT0FBTyxLQUFNLEdBQVUsRUFBTSxXQUFhLE9BQU8sQ0FDOUQsQ0FFQSxTQUFTLEdBQWMsRUFBeUMsQ0FJOUQsT0FISSxFQUFHLFNBQVMsTUFBTSxFQUFVLE1BQzVCLEVBQUcsU0FBUyxLQUFLLEdBQUssRUFBRyxTQUFTLE1BQU0sR0FBSyxFQUFHLFNBQVMsTUFBTSxFQUFVLEtBQ3pFLEVBQUcsU0FBUyxNQUFNLEVBQVUsTUFDekIsSUFDVCxDQUVBLFNBQVMsR0FBb0IsRUFBd0MsQ0FDbkUsT0FBTyxFQUFHLFNBQVMsTUFBTSxHQUFLLEVBQUcsU0FBUyxNQUFNLEVBQUksV0FBYSxhQUNuRSxDQVNBLFNBQWdCLEVBQW1CLEVBQTBCLENBQzNELE9BQVEsRUFBWSxFQUFLLE9BQVMsQ0FBQyxFQUFBLENBQ2hDLFFBQVMsR0FBUSxDQUNoQixJQUFNLEVBQVEsRUFBSyxHQUNuQixPQUFPLE1BQU0sUUFBUSxDQUFLLEVBQUksRUFBUSxDQUFDLENBQUssQ0FDOUMsQ0FBQyxDQUFDLENBQ0QsT0FBUSxHQUE0QixFQUFVLENBQUssQ0FBQyxDQUN6RCxDQUVBLFNBQWdCLEVBQW1CLEVBQWUsRUFBa0MsQ0FDbEYsSUFBTSxFQUFRLEVBQUssR0FDbkIsT0FBTyxFQUFVLENBQUssRUFBSSxFQUFRLElBQUEsRUFDcEMsQ0FFQSxTQUFnQixFQUFvQixFQUFlLEVBQXdCLENBQ3pFLElBQU0sRUFBUSxFQUFLLEdBQ25CLE9BQU8sTUFBTSxRQUFRLENBQUssRUFBSSxFQUFNLE9BQVEsR0FBMEIsRUFBVSxDQUFJLENBQUMsRUFBSSxDQUFDLENBQzVGLENBRUEsU0FBZ0IsRUFBVSxFQUFrQyxDQUMxRCxNQUFPLENBQUMsQ0FBQyxHQUFTLE9BQU8sR0FBVSxVQUFZLE9BQVEsRUFBa0IsTUFBUyxRQUNwRixDQy9EQSxTQUFnQixHQUFrQixFQUFjLEVBQUssVUFBb0IsQ0FFdkUsR0FBSSxDQUFDLEVBQUssU0FBUyxHQUFHLEVBQUcsTUFBTyxHQUVoQyxJQUFNLEVBQU0sRUFBZ0IsRUFBSSxDQUFJLEVBR3BDLE1BREEsQ0FBSyxHQUNFLEVBQVUsRUFBSSxPQUFPLEdBQUssR0FBaUIsRUFBSSxPQUFPLENBQy9ELENBRUEsU0FBUyxHQUFpQixFQUF3QixDQUVoRCxPQURJLEVBQUssT0FBUyxhQUNYLEVBQW1CLENBQUksQ0FBQyxDQUFDLEtBQU0sR0FBVSxHQUFpQixDQUFLLENBQUMsQ0FDekUsQ0NOQSxTQUFnQixJQUE0RCxDQUMxRSxHQUFNLENBQUUsT0FBUSxRQUNoQixHQUFJLEVBQUksV0FBYSxhQUFjLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUyxPQUFRLE1BQU0sQ0FBQyxFQUMzRSxHQUFJLEVBQUksV0FBYSxPQUFRLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUyxRQUFTLE9BQVEsTUFBTSxDQUFDLENBRWhGLENBRUEsU0FBZ0IsR0FBb0IsRUFBc0MsQ0FDeEUsTUFBTyxDQUNMLEtBQU0saUJBQ04sVUFBVSxFQUFNLEVBQUksQ0FDYixLQUFzQixDQUFFLEdBR3hCLGNBQWMsS0FBSyxDQUFJLEVBRTVCLE9BQU8sR0FBYyxFQUFNLEVBQUksQ0FBZSxDQUNoRCxDQUNGLENBQ0YsQ0FFQSxTQUFTLEdBQWMsRUFBYyxFQUFZLEVBQWlGLENBQ2hJLElBQU0sRUFBTSxFQUFnQixFQUFJLENBQUksRUFDcEMsR0FBSSxDQUFDLEdBQU8sQ0FBQyxFQUFVLEVBQUksT0FBTyxFQUFHLE9BRXJDLElBQU0sRUFBYyxJQUFJLEVBQVksQ0FBSSxFQUNsQyxFQUFxQyxDQUFDLEVBRTVDLEdBQTJCLEVBQUksUUFBUyxDQUFDLEVBQUcsQ0FBSyxFQUFHLEVBQWMsQ0FBZSxFQUNqRixJQUFLLElBQU0sS0FBZSxHQUEwQixDQUFZLEVBQzlELEVBQVksVUFBVSxFQUFZLE1BQU8sRUFBWSxJQUFLLEVBQVksS0FBSyxFQUd4RSxLQUFZLFdBQVcsRUFDNUIsTUFBTyxDQUNMLEtBQU0sRUFBWSxTQUFTLEVBQzNCLElBQUssRUFBWSxZQUFZLENBQUUsTUFBTyxFQUFLLENBQUMsQ0FDOUMsQ0FDRixDQWNBLE1BQU0sR0FBeUIsbUJBQ3pCLEdBQXNCLFdBRTVCLFNBQVMsR0FDUCxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ00sQ0FFTixJQUFNLEVBQVEsR0FBZ0IsRUFEZixFQUFVLEdBQUcsRUFDYSxDQUFDLEVBQ3RDLEdBQU8sRUFBTyxLQUFLLENBQUssRUFFeEIsQ0FBQyxFQUFrQixFQUFRLENBQUksR0FBSyxFQUFLLE9BQVMsa0JBQ3BELEdBQThCLEVBQU0sRUFBVyxFQUFjLENBQWUsRUFFMUUsQ0FBQyxFQUFrQixFQUFRLENBQUksR0FBSyxFQUFLLE9BQVMsb0JBQ3BELEdBQWdDLEVBQU0sRUFBVyxFQUFjLENBQWUsRUFHaEYsSUFBTSxFQUFpQixDQUFDLEdBQUcsRUFBVyxDQUFJLEVBQzFDLElBQUssSUFBTSxLQUFTLEVBQW1CLENBQUksRUFDekMsR0FBMkIsRUFBTyxFQUFnQixFQUFRLEVBQWMsQ0FBZSxFQUdyRixHQUFPLEVBQU8sSUFBSSxDQUN4QixDQUVBLFNBQVMsR0FBZ0IsRUFBZSxFQUF1RCxDQUM3RixHQUFJLEVBQUssT0FBUyxVQUNoQixNQUFPLENBQUUsSUFBSyxFQUFLLElBQUssZUFBZ0IsR0FBeUIsQ0FBSSxFQUFHLE1BQU8sRUFBSyxLQUFNLEVBRTVGLEdBQUksRUFBMkIsQ0FBSSxFQUNqQyxNQUFPLENBQUUsSUFBSyxFQUFLLElBQUssZUFBZ0IsR0FBMEIsQ0FBSSxFQUFHLE1BQU8sRUFBSyxLQUFNLEVBRTdGLEdBQUksRUFBSyxPQUFTLGlCQUFrQixDQUNsQyxJQUFNLEVBQWlCLEVBQVMsRUFBMkIsQ0FBTSxFQUFJLEdBQ3JFLE1BQU8sQ0FBRSxJQUFLLEVBQUssSUFBSyxlQUFnQixFQUF1QixFQUFNLEVBQUssR0FBTSxHQUFrQixFQUE0QixDQUFJLEVBQUksTUFBTyxFQUFLLEtBQU0sQ0FDMUosQ0FDQSxHQUFJLEVBQUssT0FBUyxjQUNoQixNQUFPLENBQUUsSUFBSyxFQUFLLElBQUssZUFBZ0IsRUFBeUIsRUFBSyxLQUFLLEVBQUcsTUFBTyxFQUFLLEtBQU0sRUFJbEcsR0FBSSxFQUFLLE9BQVMsZUFBaUIsRUFBSyxPQUFTLGdCQUMvQyxNQUFPLENBQ0wsSUFBSyxFQUFLLElBQ1YsZUFBZ0IsRUFBdUIsRUFBTSxFQUFLLEdBQUssRUFBNEIsQ0FBSSxFQUN2RixNQUFPLEVBQUssS0FDZCxFQUVGLEdBQUksRUFBSyxPQUFTLGdCQUFrQixFQUFLLE9BQVMsa0JBQW9CLEVBQUssT0FBUyxpQkFDbEYsTUFBTyxDQUFFLElBQUssRUFBSyxJQUFLLGVBQWdCLEdBQXNCLENBQUksRUFBRyxNQUFPLEVBQUssS0FBTSxDQUczRixDQUVBLFNBQVMsR0FBeUIsRUFBd0IsQ0FDeEQsSUFBSyxJQUFNLEtBQWEsRUFBb0IsRUFBTSxNQUFNLEVBQ3RELEdBQUksRUFBNkIsRUFBVyxFQUFJLEVBQUcsTUFBTyxHQUU1RCxPQUFPLEVBQTRCLENBQUksQ0FDekMsQ0FFQSxTQUFTLEdBQTBCLEVBQXdCLENBQ3pELEdBQUksRUFBeUIsRUFBSyxFQUFFLEVBQUcsTUFBTyxHQUM5QyxJQUFLLElBQU0sS0FBUyxFQUFvQixFQUFNLFFBQVEsRUFDcEQsR0FBSSxFQUF5QixDQUFLLEVBQUcsTUFBTyxHQUU5QyxNQUFPLEVBQ1QsQ0FFQSxTQUFTLEVBQXVCLEVBQWUsRUFBOEIsQ0FDM0UsSUFBSyxJQUFNLEtBQWEsRUFBb0IsRUFBTSxNQUFNLEVBQ3RELEdBQUksRUFBNkIsRUFBVyxDQUFVLEVBQUcsTUFBTyxHQUVsRSxNQUFPLEVBQ1QsQ0FFQSxTQUFTLEdBQXNCLEVBQXdCLENBQ3JELElBQU0sRUFBYyxFQUFtQixFQUFNLEVBQUssT0FBUyxlQUFpQixPQUFTLE1BQU0sRUFDM0YsTUFBTyxDQUFDLENBQUMsR0FBZSxFQUFZLE9BQVMsdUJBQXlCLEVBQVksT0FBUyxPQUFTLEVBQXFDLENBQVcsQ0FDdEosQ0FFQSxTQUFTLEVBQTRCLEVBQW9DLENBQ3ZFLEdBQUksQ0FBQyxFQUFNLE1BQU8sR0FFbEIsSUFBSyxJQUFNLEtBQVMsRUFBbUIsQ0FBSSxFQUV2QyxTQUFVLElBQ1QsRUFBMkIsQ0FBSyxHQUFLLEVBQU0sT0FBUyxlQUFpQixFQUFNLE9BQVMsb0JBS3JGLEVBQU0sT0FBUyx1QkFDZixFQUFNLE9BQVMsT0FDZixFQUFxQyxDQUFLLEdBSXhDLEVBQTRCLENBQUssR0FBRyxNQUFPLEdBRWpELE1BQU8sRUFDVCxDQUVBLFNBQVMsR0FBd0IsRUFBd0IsQ0FFdkQsT0FESSxFQUFLLGFBQWUsUUFDakIsRUFBb0IsRUFBTSxZQUFZLENBQUMsQ0FBQyxLQUM1QyxHQUFjLEVBQVUsYUFBZSxRQUFVLEVBQXlCLEVBQVUsS0FBSyxDQUM1RixDQUNGLENBRUEsU0FBUyxFQUE2QixFQUFlLEVBQThCLENBQ2pGLElBQU0sRUFBYyxHQUFxQixDQUFJLEdBQUssRUFNbEQsT0FMSSxFQUFZLFVBQVksR0FBYSxHQUNyQyxFQUFZLE9BQVMsb0JBQTRCLEdBQXdCLENBQVcsRUFDcEYsRUFBWSxPQUFTLHVCQUF5QixFQUFZLE9BQVMsbUJBQzlELEVBQXlCLEVBQVksRUFBRSxFQUc5QyxFQUFZLE9BQVMsd0JBQ3BCLEdBQWMsRUFBWSxPQUFTLFFBQ3BDLEVBQXFDLENBQVcsQ0FFcEQsQ0FFQSxTQUFTLEVBQXFDLEVBQXdCLENBQ3BFLE9BQU8sRUFBb0IsRUFBTSxjQUFjLENBQUMsQ0FBQyxLQUFNLEdBQ3JELEVBQXlCLEVBQW1CLEVBQWEsSUFBSSxDQUFDLENBQ2hFLENBQ0YsQ0FFQSxTQUFTLEVBQXlCLEVBQXlCLENBa0J6RCxPQWpCSyxFQUFVLENBQUssRUFFaEIsRUFBTSxPQUFTLGNBQWdCLEVBQU0sT0FBUyxVQUFrQixHQUNoRSxFQUFNLE9BQVMscUJBQXVCLEVBQU0sT0FBUyxjQUNoRCxFQUF5QixFQUFNLE1BQVEsRUFBTSxRQUFRLEVBRTFELEVBQU0sT0FBUyxzQkFDVixFQUF5QixFQUFNLFNBQVMsRUFFN0MsRUFBTSxPQUFTLGVBQ1YsRUFBb0IsRUFBTyxVQUFVLENBQUMsQ0FBQyxLQUFNLEdBQVksRUFBeUIsQ0FBTyxDQUFDLEVBRS9GLEVBQU0sT0FBUyxpQkFDVixFQUFvQixFQUFPLFlBQVksQ0FBQyxDQUFDLEtBQU0sR0FDcEQsRUFBeUIsRUFBUyxPQUFTLEVBQVMsUUFBUSxDQUM5RCxFQWY0QixFQWtCaEMsQ0FFQSxTQUFTLEVBQTJCLEVBQXdCLENBQzFELE9BQU8sRUFBSyxPQUFTLHVCQUF5QixFQUFLLE9BQVMsc0JBQXdCLEVBQUssT0FBUyx5QkFDcEcsQ0FFQSxTQUFTLEVBQWtCLEVBQXdCLEVBQXdCLENBQ3pFLE9BQU8sRUFBTyxLQUFNLEdBQVUsRUFBTSxnQkFBa0IsRUFBTSxPQUFTLEVBQUssT0FBUyxFQUFLLEtBQU8sRUFBTSxHQUFHLENBQzFHLENBRUEsU0FBUyxHQUNQLEVBQ0EsRUFDQSxFQUNBLEVBQ00sQ0FDTixJQUFNLEVBQVMsRUFBVSxHQUFHLEVBQUUsRUFDeEIsRUFBUyxFQUFtQixFQUFNLFFBQVEsRUFDNUMsS0FBSyxXQUFhLEdBQ3RCLElBQUksQ0FBQyxHQUFVLENBQUMsRUFBd0IsRUFBUSxDQUFlLEVBQUcsQ0FDNUQsR0FBVSxHQUE0QixFQUFRLENBQWUsR0FDL0QsRUFBYSxLQUFLLENBQUUsTUFBTyxFQUFLLE1BQU8sSUFBSyxFQUFLLElBQUssTUFBTyxFQUEyQixFQUFNLENBQVMsQ0FBRSxDQUFDLEVBRTVHLE1BQ0YsQ0FFSSxHQUFRLE9BQVMsc0JBQ25CLEVBQWEsS0FBSyxDQUFFLE1BQU8sRUFBTyxNQUFPLElBQUssRUFBTyxJQUFLLE1BQU8sR0FBSSxDQUFDLEVBRXRFLEVBQWEsS0FBSyxDQUFFLE1BQU8sRUFBSyxNQUFPLElBQUssRUFBSyxJQUFLLE1BQU8sR0FBa0MsRUFBTSxDQUFTLENBQUUsQ0FBQyxDQUxuSCxDQU9GLENBRUEsU0FBUyxHQUNQLEVBQ0EsRUFDQSxFQUNBLEVBQ00sQ0FDTixJQUFNLEVBQVMsRUFBVSxHQUFHLEVBQUUsRUFDeEIsRUFBYyxFQUFVLEdBQUcsRUFBRSxFQUMvQixNQUFDLEVBQXdCLEVBQU0sQ0FBZSxHQUFLLEdBQVEsT0FBUyxzQkFDcEUsR0FBUSxPQUFTLGtCQUFvQixFQUFPLFNBQVcsR0FBUSxFQUFPLFdBQWEsS0FDbkYsSUFBMEIsRUFBTSxFQUFRLENBQVcsRUFFdkQsSUFBSSxHQUFRLE9BQVMsd0JBQTBCLEVBQU8sT0FBUyxFQUFNLENBQ25FLElBQU0sRUFBUSxFQUFtQixFQUFRLE9BQU8sRUFDNUMsR0FDRixFQUFhLEtBQUssQ0FBRSxNQUFPLEVBQU0sTUFBTyxJQUFLLEVBQU0sSUFBSyxNQUFPLEVBQTJCLEVBQU8sQ0FBUyxDQUFFLENBQUMsRUFFL0csTUFDRixDQUVBLEVBQWEsS0FBSyxDQUFFLE1BQU8sRUFBSyxNQUFPLElBQUssRUFBSyxJQUFLLE1BQU8sRUFBMkIsRUFBTSxDQUFTLENBQUUsQ0FBQyxDQUYxRyxDQUdGLENBRUEsU0FBUyxHQUFrQyxFQUFlLEVBQThCLENBQ3RGLE9BQU8sRUFBK0IsRUFBTSxDQUFTLEVBQUksSUFBSSxLQUF3QixFQUN2RixDQUVBLFNBQVMsRUFBMkIsRUFBZSxFQUE4QixDQUMvRSxPQUFPLEVBQStCLEVBQU0sQ0FBUyxFQUFJLElBQUksS0FBMkIsRUFDMUYsQ0FFQSxTQUFTLEVBQStCLEVBQWUsRUFBK0IsQ0FDcEYsSUFBTSxFQUFpQixFQUFVLGNBQWUsR0FBYSxFQUFTLE9BQVMscUJBQXFCLEVBQ3BHLEdBQUksRUFBaUIsRUFBRyxNQUFPLEdBQy9CLElBQU0sRUFBWSxFQUFVLEdBQzVCLEdBQUksQ0FBQyxFQUFXLE1BQU8sR0FDdkIsSUFBTSxFQUFrQixFQUFVLEVBQWlCLEdBQ25ELE9BQU8sRUFBVSxRQUFVLEVBQUssT0FBUyxHQUFvQixDQUFlLENBQzlFLENBRUEsU0FBUyxHQUFvQixFQUFvQyxDQUcvRCxPQUNFLEdBQU0sT0FBUyxXQUNmLEdBQU0sT0FBUyxrQkFDZixHQUFNLE9BQVMsZUFDZixHQUFNLE9BQVMsY0FDZixHQUFNLE9BQVMsZUFFbkIsQ0FFQSxTQUFTLEdBQ1AsRUFDQSxFQUNBLEVBQ1MsQ0FLVCxPQUpJLEdBQVEsT0FBUyxvQkFBc0IsRUFBTyxXQUFhLElBQzFELEdBQVEsT0FBUyxrQkFBb0IsR0FBUSxPQUFTLG1CQUFxQixFQUFPLE9BQVMsR0FDNUYsR0FBUSxPQUFTLGdCQUNqQixHQUFRLE9BQVMscUJBQXVCLEVBQU8sT0FBUyxHQUNyRCxHQUFRLE9BQVMsWUFBYyxFQUFPLFFBQVUsR0FBUSxHQUFhLE9BQVMsZUFDdkYsQ0FFQSxTQUFTLEVBQXdCLEVBQWUsRUFBdUMsQ0FDckYsR0FBSSxFQUFLLE9BQVMsbUJBQW9CLE1BQU8sR0FFN0MsSUFBTSxFQUFTLEVBQW1CLEVBQU0sUUFBUSxFQUMxQyxFQUFXLEVBQW1CLEVBQU0sVUFBVSxFQUtwRCxPQUpJLEVBQUssV0FBYSxJQUNsQixDQUFDLEdBQVUsQ0FBQyxHQUFZLEVBQTBCLEVBQU0sRUFBVSxDQUFlLEVBQVUsR0FDM0YsRUFBMEIsQ0FBTSxFQUFVLEdBRzVDLEVBQU8sT0FBUyxvQkFDaEIsRUFBMEIsRUFBbUIsRUFBUSxRQUFRLENBQUMsR0FFOUQsRUFBSyxXQUFhLElBQ2xCLEVBQVMsT0FBUyxlQUNqQixFQUFTLE9BQVMsUUFBVSxFQUFTLE9BQVMsUUFFbkQsQ0FFQSxTQUFTLEdBQTRCLEVBQWUsRUFBdUMsQ0FDekYsR0FBSSxFQUFLLE9BQVMsbUJBQW9CLE1BQU8sR0FFN0MsSUFBTSxFQUFTLEVBQW1CLEVBQU0sUUFBUSxFQUMxQyxFQUFXLEVBQW1CLEVBQU0sVUFBVSxFQUdwRCxHQUZJLENBQUMsR0FBVSxDQUFDLEdBQVksRUFBTyxPQUFTLG9CQUN4QyxFQUFLLFdBQWEsSUFBUSxFQUFTLE9BQVMsY0FBZ0IsRUFBUyxPQUFTLFFBQzlFLENBQUMsRUFBMEIsRUFBbUIsRUFBUSxRQUFRLENBQUMsRUFBRyxNQUFPLEdBQzdFLElBQU0sRUFBZ0IsRUFBbUIsRUFBUSxVQUFVLEVBQzNELE1BQU8sQ0FBQyxDQUFDLEdBQWlCLENBQUMsRUFBMEIsRUFBUSxFQUFlLENBQWUsQ0FDN0YsQ0FFQSxTQUFTLEVBQ1AsRUFDQSxFQUNBLEVBQ1MsQ0FFVCxPQUFPLEVBQWlCLFdBQWEsSUFBUSxFQUFTLE9BQVMsY0FBZ0IsRUFBZ0IsSUFBSSxFQUFTLElBQWMsQ0FDNUgsQ0FFQSxTQUFTLEVBQTBCLEVBQW9DLENBQ3JFLE9BQU8sR0FBTSxPQUFTLGNBQWdCLEVBQUssT0FBUyxTQUN0RCxDQUVBLFNBQVMsR0FBMEIsRUFBMEQsQ0FDM0YsSUFBTSxFQUFpQyxDQUFDLEVBQ3hDLElBQUssSUFBTSxLQUFlLEVBQWEsVUFBVSxFQUFHLElBQU0sRUFBRSxNQUFRLEVBQUUsT0FBUyxFQUFFLElBQU0sRUFBRSxHQUFHLEVBQ3RGLEVBQVMsS0FBTSxHQUFTLEVBQUssT0FBUyxFQUFZLE9BQVMsRUFBWSxLQUFPLEVBQUssR0FBRyxHQUMxRixFQUFTLEtBQUssQ0FBVyxFQUUzQixPQUFPLEVBQVMsVUFBVSxFQUFHLElBQU0sRUFBRSxNQUFRLEVBQUUsS0FBSyxDQUN0RCxDQUVBLFNBQVMsR0FBcUIsRUFBb0MsQ0FDNUQsS0FBSyxPQUFTLDBCQUE0QixFQUFLLE9BQVMsMkJBQzVELE9BQU8sRUFBbUIsRUFBTSxhQUFhLENBQy9DLENDdldBLFNBQWdCLElBQXVDLENBQ3JELElBQU0sRUFBa0MsQ0FBQyxFQUNuQyxFQUF5QixHQUFpQyxFQUtoRSxPQUpJLEdBQ0YsRUFBUSxLQUFLLEdBQW9CLENBQXNCLENBQUMsRUFFMUQsRUFBUSxLQUFLLEdBQXNCLEVBQUcsR0FBVyxDQUFDLEVBQzNDLENBQ1QsQ0FFQSxTQUFTLElBQWdDLENBQ3ZDLElBQU0sRUFBa0IsRUFBSyxLQUFLLEVBQW1CLEVBQUcsa0JBQWtCLEVBQzFFLE1BQU8sQ0FDTCxLQUFNLG1CQUNOLE1BQU0sVUFBVSxFQUFNLEVBQUksQ0FDeEIsR0FBSSxDQUFDLEVBQXNCLENBQUUsR0FBSyxDQUFDLEdBQWtCLENBQUksRUFDdkQsT0FHRixHQUFNLENBQUUsa0JBQW1CLE1BQU0sT0FBTyxlQVlsQyxFQUFTLE1BQU0sRUFBZSxFQUFNLENBVnhDLE9BQVEsQ0FDTixLQUFNLFdBQ04sc0JBQXVCLEdBQ3ZCLDRCQUE2QixHQUM3QixrQkFBbUIsRUFDckIsRUFDQSxXQUFZLEVBQ1osU0FBVSxFQUNWLFdBQVksRUFFa0MsQ0FBQyxFQUM1QyxNQUFRLEtBRWIsTUFBTyxDQUNMLEtBQU0sRUFBTyxLQUNiLElBQUssRUFBTyxHQUNkLENBQ0YsQ0FDRixDQUNGLENBRUEsU0FBUyxJQUFxQixDQUM1QixNQUFPLENBQ0wsS0FBTSxPQUNOLE1BQU0sS0FBSyxFQUFJLENBQ2IsR0FBSSxDQUFDLEVBQUcsU0FBUyxNQUFNLEdBQUssQ0FBQyxFQUFHLFNBQVMsTUFBTSxFQUFHLE9BRWxELElBQU0sRUFBVSxNQUFNLEVBQUcsU0FBUyxTQUFTLEVBQUksTUFBTSxFQUNyRCxNQUFPLENBQ0wsS0FBTSxrQkFBa0IsS0FBSyxVQUFVLENBQU8sRUFBRSxHQUNoRCxXQUFZLElBQ2QsQ0FDRixDQUNGLENBQ0YsQ0MxREEsTUFBTSxHQUFVLEVBQWMsWUFBWSxHQUFHLEVBRTdDLGVBQXNCLEVBQ3BCLEVBQ0EsRUFDQSxFQUNBLEVBQ2tCLENBQ2xCLElBQU0sRUFBaUIsRUFBZSxDQUFrQixFQUN4RCxHQUFJLENBQUMsRUFBZ0IsTUFBVSxNQUFNLG1DQUFtQyxFQUFtQixFQUFFLEVBQ3pGLEVBQUssU0FDUCxRQUFRLEtBQUssdUJBQXdCLENBQWMsRUFHckQsSUFBTSxFQUE2RCxDQUFDLEVBQ2hFLEVBQWEsRUFBSyxLQUFLLEVBQVksRUFBSyxTQUFTLENBQWtCLEVBQUcsS0FBSyxFQUMvRSxHQUFJLEVBQUcsV0FBVyxDQUFVLEVBQUcsQ0FHN0IsRUFBUyxJQUFBLEdBQ1QsSUFBTSxFQUFnQixFQUFLLFFBQVEsQ0FBa0IsRUFDL0MsRUFBVSxNQUFNLEVBQUcsU0FBUyxRQUFRLEVBQWUsQ0FBRSxjQUFlLEVBQUssQ0FBQyxFQUNoRixFQUFxQixFQUFLLFFBQVEsQ0FBa0IsRUFDcEQsSUFBSyxJQUFNLEtBQVUsRUFBUyxDQUM1QixHQUFJLENBQUMsRUFBTyxZQUFZLEVBQUcsU0FFM0IsSUFBTSxFQUFpQixFQUFLLFFBQVEsRUFBZSxFQUFPLElBQUksRUFDOUQsR0FBSSxJQUFtQixFQUFvQixTQUUzQyxJQUFNLEVBQWEsRUFBZSxDQUFjLEVBQzFDLEVBQVMsRUFBSyxLQUFLLEVBQVksRUFBTyxLQUFNLEtBQUssRUFDbkQsR0FBYyxFQUFHLFdBQVcsQ0FBTSxHQUNwQyxFQUFTLEtBQUssQ0FBQyxFQUFnQixFQUFZLEVBQVEsSUFBQSxFQUFTLENBQUMsQ0FFakUsQ0FDRixLQUNFLEdBQWEsRUFFZixFQUFTLEtBQUssQ0FBQyxFQUFvQixFQUFnQixFQUFZLENBQU0sQ0FBQyxFQUV0RSxJQUFJLEVBQWUsR0FDbkIsSUFBSyxHQUFNLENBQUMsRUFBZ0IsRUFBWSxFQUFRLEtBQWtCLEVBQ2hFLElBQWlCLE1BQU0sR0FBUSxFQUFNLEVBQWdCLEVBQVksRUFBUSxDQUFhLEVBRXhGLE9BQU8sQ0FDVCxDQUVBLGVBQWUsR0FDYixFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ2tCLENBQ2QsRUFBSyxTQUNQLFFBQVEsS0FBSyxZQUFhLEVBQWdCLEVBQVksRUFBUSxDQUFNLEVBS3RFLElBQU0sRUFBaUIsRUFBSyxLQUFLLEVBQWdCLGtCQUFrQixRQUFRLElBQUksTUFBTSxFQUNyRixHQUFJLENBQ0YsTUFBTSxFQUFHLFNBQVMsVUFDaEIsRUFDQSxLQUFLLFVBQVUsTUFBTSxHQUE2QixFQUFnQixFQUFZLEVBQVEsQ0FBTSxFQUFHLElBQUEsR0FBVyxDQUFDLENBQzdHLEVBQ0EsSUFBTSxFQUFNLEVBQWMsVUFBVSxRQUFRLFNBQVUsQ0FBQyxHQUFZLEVBQUcsS0FBTSxDQUFjLEVBQUcsQ0FDM0YsSUFBSyxFQUNMLE1BQU8sU0FDVCxDQUFDLEVBQ0QsR0FBSSxFQUFJLE1BQU8sTUFBTSxFQUFJLE1BQ3pCLE9BQU8sRUFBSSxTQUFXLENBQ3hCLFFBQVUsQ0FDUixNQUFNLEVBQUcsU0FBUyxHQUFHLEVBQWdCLENBQUUsTUFBTyxFQUFLLENBQUMsQ0FDdEQsQ0FDRixDQUVBLGVBQWUsR0FDYixFQUNBLEVBQ0EsRUFDQSxFQUNrQyxDQUNsQyxJQUFNLEVBQTJDLENBRy9DLFVBQVcsR0FDWCxZQUFhLEdBRWIsZUFBZ0IsRUFDaEIsb0JBQXFCLEdBQ3JCLFlBQWEsR0FDYixPQUFRLEdBQ1IsY0FBZSxHQUNmLFNBR0EsUUFBUyxLQUNYLEVBQ0EsR0FBSSxNQUFNLEdBQXVCLEVBQUssS0FBSyxFQUFnQixLQUFLLENBQUMsRUFBRyxDQUNsRSxJQUFNLEVBQWUsR0FBaUIsQ0FBYyxFQUM5QyxFQUFRLEVBQWUsTUFBTSxHQUFvQixDQUFZLEVBQUksQ0FBQyxFQUNwRSxFQUFNLFNBQVMsTUFBTSxJQUN2QixFQUFnQixNQUFRLEVBRTVCLENBQ0EsTUFBTyxDQUNMLGtCQUNBLFFBQVMsR0FBcUIsRUFBZ0IsQ0FBVSxFQUt4RCxHQUFJLEdBQVEsT0FDUixDQUNFLFFBQVMsQ0FBQyxFQUNWLE1BQU8sRUFBTyxJQUFLLEdBQVUsRUFBSyxRQUFRLEVBQWdCLENBQUssQ0FBQyxDQUFDLFdBQVcsRUFBSyxJQUFLLEdBQUcsQ0FBQyxFQUMxRixRQUFTLENBQUMsZ0JBQWlCLGlCQUFrQixnQkFBZ0IsQ0FDL0QsRUFDQSxDQUFFLFFBQVMsQ0FBQyxVQUFVLENBQUUsQ0FDOUIsQ0FDRixDQUVBLFNBQVMsRUFBZSxFQUFxQyxDQUMzRCxJQUFJLEVBQWlCLEVBQUssUUFBUSxDQUFPLEVBQ3pDLE9BQWEsQ0FDWCxJQUFNLEVBQWEsRUFBSyxLQUFLLEVBQWdCLGVBQWUsRUFDNUQsR0FBSSxFQUFHLFdBQVcsQ0FBVSxFQUFHLE9BQU8sRUFFdEMsSUFBTSxFQUFnQixFQUFLLFFBQVEsQ0FBYyxFQUNqRCxHQUFJLElBQWtCLEVBQWdCLE9BQ3RDLEVBQWlCLENBQ25CLENBQ0YsQ0FFQSxTQUFTLElBQXNCLENBRzdCLElBQU0sRUFBa0IsR0FBUSxRQUFRLHlCQUF5QixFQUNqRSxPQUFPLEVBQUssS0FBSyxFQUFLLFFBQVEsQ0FBZSxFQUFHLE1BQU8sUUFBUSxDQUNqRSxDQUVBLGVBQWUsR0FBdUIsRUFBbUMsQ0FDdkUsR0FBSSxDQUNGLElBQU0sRUFBVSxNQUFNLEVBQUcsU0FBUyxRQUFRLEVBQVMsQ0FBRSxjQUFlLEVBQUssQ0FBQyxFQUMxRSxJQUFLLElBQU0sS0FBVSxFQUFTLENBQzVCLElBQU0sRUFBWSxFQUFLLEtBQUssRUFBUyxFQUFPLElBQUksRUFDaEQsR0FBSSxFQUFPLFlBQVksRUFDakIsSUFBQSxNQUFNLEdBQXVCLENBQVMsRUFBRyxNQUFPLEVBQUEsTUFDL0MsR0FBSSxlQUFlLEtBQUssRUFBTyxJQUFJLElBQU0sTUFBTSxFQUFHLFNBQVMsU0FBUyxFQUFXLE1BQU0sRUFBQSxDQUFHLFNBQVMsT0FBTyxFQUM3RyxNQUFPLEVBRVgsQ0FDRixNQUFRLENBQ04sTUFBTyxFQUNULENBQ0EsTUFBTyxFQUNULENBRUEsU0FBUyxHQUFpQixFQUFxQyxDQUM3RCxJQUFJLEVBQWlCLEVBQUssUUFBUSxDQUFPLEVBQ3pDLE9BQWEsQ0FDWCxJQUFNLEVBQWUsRUFBSyxLQUFLLEVBQWdCLGVBQWdCLFFBQVEsRUFDdkUsR0FBSSxFQUFHLFdBQVcsQ0FBWSxFQUFHLE9BQU8sRUFFeEMsSUFBTSxFQUFnQixFQUFLLFFBQVEsQ0FBYyxFQUNqRCxHQUFJLElBQWtCLEVBQWdCLE9BQ3RDLEVBQWlCLENBQ25CLENBQ0YsQ0FFQSxlQUFlLEdBQW9CLEVBQTZDLENBQzlFLEdBQUksQ0FFRixPQUFPLE1BRGUsRUFBRyxTQUFTLFFBQVEsRUFBa0IsQ0FBRSxjQUFlLEVBQUssQ0FBQyxFQUFBLENBQ3BFLE9BQVEsR0FBVyxFQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSyxHQUFXLEVBQU8sSUFBSSxDQUNyRixNQUFRLENBQ04sTUFBTyxDQUFDLENBQ1YsQ0FDRixDQUlBLFNBQVMsR0FBcUIsRUFBcUIsRUFBNEIsQ0FDN0UsSUFBTSxFQUFlLEVBQUssU0FBUyxFQUFhLENBQVUsQ0FBQyxDQUFDLFdBQVcsRUFBSyxJQUFLLEdBQUcsRUFDcEYsT0FBTyxFQUFhLFdBQVcsR0FBRyxFQUFJLEVBQWUsS0FBSyxHQUM1RCxDQzFLQSxNQUFNLEdBQXdCLENBQzVCLGVBQWdCLENBQ2QsT0FBUSxDQUFDLE9BQVEsTUFBTSxFQUN2QixNQUFPLENBQUMsTUFBTyxNQUFPLE1BQU0sRUFDNUIsT0FBUSxDQUFDLE9BQVEsTUFBTyxNQUFNLEVBQzlCLE9BQVEsQ0FBQyxPQUFRLE1BQU0sQ0FDekIsRUFDQSxXQUFZLENBQUMsT0FBUSxPQUFRLE1BQU8sT0FBUSxPQUFRLE9BQVEsTUFBTyxPQUFRLE9BQU8sQ0FDcEYsRUFFYSxHQUFnRSxDQUMzRSxRQUFTLGdCQUNULFNBQVUsZUFDVixRQUFTLEVBQ1QsTUFBTSxRQUFRLEVBQU0sQ0FDbEIsT0FBTyxFQUFNLEVBQU0sS0FBSyxDQUMxQixDQUNGLEVBRWEsR0FBNEUsQ0FDdkYsUUFBUyxzQkFDVCxTQUFVLHFDQUNWLFFBQVMsR0FDVCxNQUFNLFFBQVEsRUFBTSxDQUNsQixHQUFJLEVBQUssZ0JBQWlCLENBQ3hCLElBQU0sRUFBaUIsRUFBSyxRQUFRLEVBQUssU0FBUyxTQUFTLEdBQUssR0FBRyxFQUM3RCxDQUFDLEVBQWEsR0FBbUIsTUFBTSxFQUFnQixDQUFjLEVBQ3RFLElBQ0gsUUFBUSxNQUFNLGlDQUFpQyxFQUFnQixHQUFHLEVBQ2xFLFFBQVEsS0FBSyxDQUFDLEdBRWhCLE1BQU0sR0FDSixHQUFrQixFQUFNLFFBQVEsSUFBSSxFQUFHLEVBQWdCLElBQUEsR0FBVyxXQUFXLEVBQzdFLEVBQ0EsRUFBSyxVQUNQLENBQ0YsTUFDRSxPQUFPLEVBQU0sRUFBTSxXQUFXLENBRWxDLENBQ0YsRUFFYSxHQUFnRSxDQUMzRSxRQUFTLGdCQUNULFNBQVUsa0NBQ1YsUUFBUyxHQUNULE1BQU0sUUFBUSxFQUFNLENBQ2xCLE9BQU8sRUFBTSxFQUFNLEtBQUssQ0FDMUIsQ0FDRixFQUVBLGVBQXNCLEVBQU0sRUFBcUMsRUFBK0MsQ0FDOUcsUUFBUSxJQUFJLFdBQWEsYUFHekIsSUFBTSxFQUFVLENBQUMsRUFBSyxRQUFVLEVBQUssUUFDL0IsRUFBTSxRQUFRLElBQUksRUFFbEIsRUFBaUIsRUFBSyxRQUFRLEVBQUssU0FBUyxTQUFTLEdBQUssR0FBRyxFQUM3RCxDQUFDLEVBQWEsR0FBbUIsTUFBTSxFQUFnQixDQUFjLEVBQ3RFLElBQ0gsUUFBUSxNQUFNLGlDQUFpQyxFQUFnQixHQUFHLEVBQ2xFLFFBQVEsS0FBSyxDQUFDLEdBR2hCLEVBQWtDLEVBQU0sQ0FBYyxFQUV0RCxJQUFNLEVBQVMsR0FBWSxFQUFNLEVBQUssQ0FBYyxFQUM5QyxFQUFlLEdBQW1CLEVBQWdCLEVBQVEsQ0FBYyxFQUN4RSxFQUFhLEdBQWtCLEVBQU0sRUFBSyxFQUFnQixFQUFRLENBQWMsRUFFbEYsSUFDRixRQUFRLEtBQUssUUFBUyxDQUFJLEVBQzFCLFFBQVEsS0FBSyxtQkFBb0IsQ0FBZSxFQUNoRCxRQUFRLEtBQUsscUJBQXNCLEdBQUcsRUFBYSxJQUFJLEVBQWUsRUFBRSxHQUcxRSxJQUFNLEVBQVksR0FBYSxDQUFXLEVBQ3BDLEVBQWUsRUFBWSxPQUFTLFNBRXRDLElBQ0YsUUFBUSxJQUFJLGlCQUFtQixLQUVqQyxRQUFRLElBQUkseUJBQTJCLEVBQ3ZDLFFBQVEsSUFBSSx1QkFBeUIsRUFFckMsSUFBTSxFQUFrQixvQkFBcUIsR0FBUSxFQUFLLGdCQUN0RCxHQUFtQixFQUFLLFFBQzFCLFFBQVEsTUFBTSxpREFBaUQsRUFDL0QsUUFBUSxLQUFLLENBQUMsR0FHaEIsSUFBTSxFQUFvQixHQUFxQixFQUFNLEVBQWMsRUFBWSxFQUFjLENBQWMsRUFDdkcsR0FDRixRQUFRLEtBQUssaUJBQWtCLENBQWlCLEVBRTlDLEVBQWtCLFNBQVcsSUFDL0IsUUFBUSxNQUFNLGdDQUFnQyxFQUM5QyxRQUFRLEtBQUssQ0FBQyxHQUtoQixJQUFNLEVBQW9CLEVBQUssT0FBTyxPQUFTLEVBQVMsSUFBQSxHQVF4RCxHQU5BLFFBQVEsTUFBTSxDQUFjLEVBQzVCLE1BQU0sRUFBRyxTQUFTLEdBQUcsRUFBWSxDQUFFLFVBQVcsR0FBTSxNQUFPLEVBQUssQ0FBQyxFQUM3RCxJQUFpQixhQUNuQixNQUFNLEdBQWdDLEVBQVksRUFBYSxFQUFLLFVBQVUsRUFHNUUsRUFBaUIsQ0FDZCxFQUFLLFFBQ1IsUUFBUSxLQUNOLEVBQ0UsT0FDQSxpQ0FBaUMsRUFBVSxPQUFRLEVBQUssU0FBUyxFQUFnQixDQUFVLENBQUMsRUFBRSxPQUFPLEVBQWUsS0FDdEgsQ0FDRixFQUVJLE1BQU0sRUFBeUIsRUFBTSxFQUFnQixFQUFZLENBQWlCLEdBQ3RGLFFBQVEsS0FBSyxDQUFDLEVBRWhCLE1BQ0YsQ0FFQSxJQUFNLEVBQTJCLENBQy9CLE9BQVEsQ0FBRSxxQkFBc0IsRUFBTSxFQUN0QyxTQUFVLEdBQXNCLEVBQU0sRUFBYyxFQUFhLEVBQVcsQ0FBYyxFQUMxRixNQUNFLElBQWlCLFlBQWMsR0FBNEIsQ0FBTSxFQUFJLEVBQ3ZFLFFBQVMsR0FBYSxFQUN0QixRQUFTLEdBQ1QsVUFBVyxHQUFvQixFQUFNLENBQWMsRUFDbkQsTUFBTyxFQUFLLE1BQVEsQ0FBRSxZQUFhLEVBQU0sRUFBSSxJQUFBLEVBQy9DLEVBRU0sRUFBc0IsSUFDekIsTUFBTSxRQUFRLENBQUssRUFBSSxFQUFRLENBQUMsQ0FBSyxFQUFBLENBQUcsSUFBSyxHQUFNLEVBQUssU0FBUyxFQUFnQixDQUFDLENBQUMsRUFDaEYsRUFBd0IsR0FBa0QsQ0FDOUUsSUFBTSxFQUFjLEVBQW1CLEVBQWtCLElBQUssR0FBUyxFQUFLLE1BQVEsRUFBSyxLQUFPLEVBQUUsQ0FBQyxFQUNuRyxRQUFRLEtBQ04sRUFDRSxPQUNBLFdBQVcsRUFBVSxPQUFRLEVBQW1CLENBQVUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUMzRSxPQUNBLEVBQVksS0FBSyxJQUFJLENBQ3ZCLEVBQUUsT0FBTyxFQUFlLEtBQzFCLENBQ0YsQ0FDRixFQUNBLEdBQUksRUFBSyxNQUNQLEdBQ0UsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLENBQ0YsTUFDSyxDQUNBLEVBQUssUUFDUixFQUFxQixDQUFNLEVBRzdCLElBQUksRUFDQSxFQUFjLEdBQ2xCLEdBQUksQ0FDRixJQUFNLEVBQVksS0FBSyxJQUFJLEVBQ3JCLEVBQVUsTUFBTSxFQUFTLENBQU8sRUFDdEMsRUFBUyxFQUNULE1BQU0sUUFBUSxJQUFJLEVBQWtCLElBQUssR0FBUyxFQUFRLE1BQU0sQ0FBSSxDQUFDLENBQUMsRUFFakUsRUFBSyxRQUNSLFFBQVEsS0FDTixFQUNFLFFBQ0EsV0FBVyxFQUFtQixFQUFrQixJQUFLLEdBQVMsRUFBSyxNQUFRLEVBQUssS0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQzFGLElBQ0YsRUFBRSxNQUFNLEVBQVUsT0FBUSxFQUFlLEtBQUssSUFBSSxFQUFJLENBQVMsQ0FBQyxHQUNsRSxDQUNGLENBRUosT0FBUyxFQUFPLENBQ2QsRUFBYyxHQUNkLFFBQVEsTUFBTSwwQkFBMkIsQ0FBSyxDQUNoRCxDQUNBLE1BQU0sR0FBUSxNQUFNLEVBQ2hCLEdBQWEsUUFBUSxLQUFLLENBQUMsRUFFM0IsSUFBaUIsWUFBYyxJQUFpQixjQUM1QyxNQUFNLEVBQXlCLEVBQU0sRUFBZ0IsRUFBWSxDQUFpQixHQUN0RixRQUFRLEtBQUssQ0FBQyxFQUdwQixDQUNGLENBRUEsU0FBUyxHQUFvQixFQUFxQyxFQUFzRCxDQUN0SCxNQUFPLENBQ0wsT0FBUSxFQUFxQyxFQUFNLENBQWMsRUFDakUsSUFBSyxZQUNMLE9BQVEsUUFDVixDQUNGLENBRUEsU0FBUyxHQUNQLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNNLENBQ04sSUFBTSxFQUFVLEVBQU0sQ0FBRSxHQUFHLEVBQVMsT0FBUSxDQUFrQixDQUFDLEVBRXpELEVBQVEsS0FBTyxJQUF3QyxDQUMzRCxRQUFRLGVBQWUsb0JBQXFCLENBQXdCLEVBQ3BFLFFBQVEsTUFBTSxlQUFlLE1BQU8sQ0FBZSxFQUNuRCxNQUFNLEVBQVEsTUFBTSxFQUNoQixHQUFNLFFBQVEsS0FBSyxDQUFJLENBQzdCLEVBQ00sRUFBNEIsR0FBeUIsQ0FDekQsUUFBUSxNQUFNLENBQUssRUFDbkIsRUFBVyxDQUFDLENBQ2QsRUFDTSxNQUE4QixDQUNsQyxFQUFXLENBQ2IsRUFDQSxFQUFRLEdBQVMsS0FBSyxFQUFNLENBQUksQ0FBQyxFQUNqQyxRQUFRLEdBQUcsb0JBQXFCLENBQXdCLEVBQ25ELFFBQVEsTUFBTSxRQUNqQixRQUFRLE1BQU0sR0FBRyxNQUFPLENBQWUsRUFDdkMsUUFBUSxNQUFNLE9BQU8sR0FHdkIsRUFBUSxHQUFHLFFBQVMsS0FBTyxJQUFVLENBQ25DLEdBQUksQ0FDRixPQUFRLEVBQU0sS0FBZCxDQUNFLElBQUssUUFDSCxHQUFZLEVBQU0sTUFBTyxFQUFJLEVBQzdCLE1BRUYsSUFBSyxlQUNILEdBQUksRUFBSyxPQUFRLE1BRWpCLEVBQXFCLEdBQWMsRUFBUSxLQUFLLENBQUMsRUFDakQsTUFFRixJQUFLLGFBQ0UsRUFBSyxRQUNSLFFBQVEsS0FDTixFQUNFLFFBQ0EsV0FBVyxFQUFVLE9BQVEsRUFBbUIsRUFBTSxNQUFNLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFDOUUsT0FDQSxFQUFlLEVBQU0sUUFBUSxDQUMvQixHQUNGLENBQ0YsRUFHRSxJQUFpQixZQUFjLElBQWlCLGFBQ2xELE1BQU0sRUFBeUIsRUFBTSxFQUFnQixFQUFZLENBQWlCLEVBRXBGLE1BRUYsSUFBSyxNQUNILEdBQUksRUFBSyxPQUFRLE1BRWpCLFFBQVEsS0FBSyxNQUFNLEdBQWUsSUFBSSxJQUFNLEVBQUUseUJBQXlCLENBRzNFLENBQ0YsT0FBUyxFQUFPLENBRWQsUUFBUSxNQUFNLHVDQUF3QyxDQUFLLENBQzdELFFBQVUsQ0FDSixXQUFZLEdBQVMsRUFBTSxRQUM3QixFQUFXLE9BQU8sTUFBTSxDQUU1QixDQUNGLENBQUMsQ0FDSCxDQUVBLFNBQVMsR0FDUCxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ1EsQ0FDUixJQUFNLEVBQWUsRUFBSyxRQUFRLFNBQVMsRUFDdkMsSUFBaUIsS0FDbkIsUUFBUSxNQUFNLDhCQUE4QixFQUM1QyxRQUFRLEtBQUssQ0FBQyxHQVNoQixJQUFNLEVBQW9CLEVBQWUsRUFBSyxRQUFRLEVBQUssQ0FBWSxFQUFJLEVBQUssS0FBSyxFQUFnQixNQUFNLEVBQ3JHLEVBQWEsRUFBZ0IsQ0FBaUIsRUFHOUMsRUFBaUIsR0FBUSxLQUM1QixHQUFVLEVBQWEsRUFBWSxFQUFnQixDQUFLLENBQUMsR0FBSyxFQUFhLEVBQW1CLENBQUssQ0FDdEcsRUFLQSxHQUpJLElBQ0YsUUFBUSxNQUFNLHlCQUF5QixFQUFXLHFDQUFxQyxFQUFlLEdBQUcsRUFDekcsUUFBUSxLQUFLLENBQUMsR0FFWixDQUFDLEVBQWMsT0FBTyxFQUUxQixJQUFNLEVBQTBCLEVBQWdCLENBQWMsR0FDMUQsRUFBYSxFQUFZLENBQXVCLEdBQUssRUFBYSxFQUFtQixDQUFjLEtBQ3JHLFFBQVEsTUFBTSxjQUFjLEVBQVcsNENBQTRDLEVBQXdCLEdBQUcsRUFDOUcsUUFBUSxLQUFLLENBQUMsR0FHaEIsSUFBTSxFQUFhLEVBQWdCLEVBQUssS0FBSyxFQUF5QixLQUFLLENBQUMsRUFXNUUsT0FWSSxFQUFhLEVBQVksQ0FBVSxHQUFLLEVBQWEsRUFBSyxLQUFLLEVBQWdCLEtBQUssRUFBRyxDQUFpQixLQUMxRyxRQUFRLE1BQU0sY0FBYyxFQUFXLDZDQUE2QyxFQUFXLEdBQUcsRUFDbEcsUUFBUSxLQUFLLENBQUMsR0FJWixJQUFtQixhQUFlLEVBQUcsV0FBVyxFQUFLLEtBQUssRUFBWSxjQUFjLENBQUMsSUFDdkYsUUFBUSxNQUFNLGNBQWMsRUFBVyxpRUFBaUUsRUFDeEcsUUFBUSxLQUFLLENBQUMsR0FFVCxDQUNULENBSUEsU0FBUyxFQUFnQixFQUE0QixDQUNuRCxJQUFNLEVBQXFCLENBQUMsRUFDeEIsRUFBYyxFQUNsQixLQUFPLENBQUMsRUFBRyxXQUFXLENBQVcsR0FBRyxDQUNsQyxFQUFTLFFBQVEsRUFBSyxTQUFTLENBQVcsQ0FBQyxFQUMzQyxJQUFNLEVBQWEsRUFBSyxRQUFRLENBQVcsRUFDM0MsR0FBSSxJQUFlLEVBQWEsTUFDaEMsRUFBYyxDQUNoQixDQUNBLEdBQUksQ0FDRixFQUFjLEVBQUcsYUFBYSxPQUFPLENBQVcsQ0FDbEQsTUFBUSxDQUVSLENBQ0EsT0FBTyxFQUFLLEtBQUssRUFBYSxHQUFHLENBQVEsQ0FDM0MsQ0FFQSxTQUFTLEVBQWEsRUFBb0IsRUFBNEIsQ0FDcEUsSUFBTSxFQUFlLEVBQUssU0FBUyxFQUFZLENBQVMsRUFJeEQsT0FISSxJQUFpQixJQUNyQixDQUFJLEVBQUssV0FBVyxDQUFZLEdBRXpCLElBQWlCLE1BQVEsQ0FBQyxFQUFhLFdBQVcsS0FBSyxFQUFLLEtBQUssQ0FDMUUsQ0FFQSxTQUFTLEdBQTRCLEVBQTBDLENBQzdFLElBQU0sRUFBVSxJQUFJLElBQ3BCLElBQUssR0FBTSxDQUFDLEVBQU8sS0FBVSxFQUFPLFFBQVEsRUFBRyxDQUM3QyxJQUFNLEVBQU8sSUFBVSxFQUFJLFFBQVUsRUFBSyxTQUFTLEVBQU8sRUFBSyxRQUFRLENBQUssQ0FBQyxFQUN2RSxFQUFjLEVBQVEsSUFBSSxDQUFJLEVBQ2hDLElBQ0YsUUFBUSxNQUNOLGlEQUFpRCxFQUFLLEtBQUssRUFBWSxNQUFNLEVBQU0sdUZBQ3JGLEVBQ0EsUUFBUSxLQUFLLENBQUMsR0FFaEIsRUFBUSxJQUFJLEVBQU0sQ0FBSyxDQUN6QixDQUNBLE9BQU8sT0FBTyxZQUFZLENBQU8sQ0FDbkMsQ0FFQSxTQUFTLEdBQWMsRUFBMkMsQ0FHaEUsT0FGSyxFQUNELE9BQU8sR0FBVSxTQUFpQixDQUFDLENBQUssRUFDckMsTUFBTSxRQUFRLENBQUssRUFBSSxFQUFRLE9BQU8sT0FBTyxDQUFLLEVBRnRDLENBQUMsQ0FHdEIsQ0FFQSxTQUFTLEdBQVksRUFBcUMsRUFBYSxFQUFrQyxDQUN2RyxHQUFJLEVBQUssT0FBUyxFQUFLLE1BQU0sT0FBUyxFQUFHLENBQ3ZDLElBQU0sRUFBUyxFQUFLLE1BQU0sUUFBUyxHQUFNLENBQ3ZDLElBQU0sRUFBTSxFQUFFLFNBQVMsRUFDdkIsR0FBSSxDQUFDLEdBQWMsQ0FBRyxFQUFHLE1BQU8sQ0FBQyxFQUFLLFFBQVEsRUFBSyxDQUFHLENBQUMsRUFLdkQsSUFBTSxFQUFVLEVBQ2IsU0FBUyxFQUFJLE1BQU0sRUFBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRyxDQUFFLEtBQUksQ0FBQyxDQUFDLENBQ2hELE9BQ0UsR0FBTSxDQUFDLGdCQUFnQixLQUFLLENBQUMsR0FBSyxFQUFHLFNBQVMsRUFBSyxRQUFRLEVBQUssQ0FBQyxFQUFHLENBQUUsZUFBZ0IsRUFBTSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQzFHLENBQUMsQ0FDQSxLQUFLLENBQUMsQ0FDTixJQUFLLEdBQU0sRUFBSyxRQUFRLEVBQUssQ0FBQyxDQUFDLEVBS2xDLE9BSkksRUFBUSxTQUFXLElBQ3JCLFFBQVEsTUFBTSx1Q0FBdUMsR0FBSyxFQUMxRCxRQUFRLEtBQUssQ0FBQyxHQUVULENBQ1QsQ0FBQyxFQUNELE1BQU8sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFNLENBQUMsQ0FDNUIsQ0FFQSxJQUFNLEVBQWEsRUFBSyxLQUFLLEVBQWdCLEtBQUssRUFDbEQsSUFBSyxJQUFNLElBQU8sQ0FBQyxLQUFNLE1BQU8sTUFBTyxLQUFLLEVBQUcsQ0FDN0MsSUFBTSxFQUFRLEVBQUssS0FBSyxFQUFZLFNBQVMsR0FBSyxFQUNsRCxHQUFJLEVBQUcsV0FBVyxDQUFLLEVBQUcsTUFBTyxDQUFDLENBQUssQ0FDekMsQ0FFQSxRQUFRLE1BQU0sOEJBQThCLEVBQzVDLFFBQVEsS0FBSyxDQUFDLENBQ2hCLENBSUEsU0FBUyxHQUFjLEVBQXdCLENBQzdDLE1BQU8sa0NBQWtDLEtBQUssQ0FBSyxDQUNyRCxDQUVBLFNBQVMsR0FBbUIsRUFBd0IsRUFBa0IsRUFBc0MsQ0FDMUcsT0FBUSxFQUFSLENBQ0UsSUFBSyxNQUNILE1BQU8sV0FFVCxJQUFLLFlBQ0gsTUFBTyxZQUVULElBQUssTUFJSCxPQUhJLEVBQU8sS0FBTSxHQUFVLEVBQU0sU0FBUyxNQUFNLENBQUMsR0FBSyxHQUFrQixDQUFjLEVBQzdFLFlBRUYsTUFFVCxRQUNFLFFBQVEsTUFBTSxpQ0FBbUMsRUFBb0IsS0FBSyxJQUFJLENBQUMsRUFDL0UsUUFBUSxLQUFLLENBQUMsQ0FFbEIsQ0FDRixDQUVBLFNBQVMsR0FBa0IsRUFBaUMsQ0FFMUQsT0FBTyxHQURZLEVBQUssS0FBSyxFQUFnQixLQUNMLENBQUMsQ0FDM0MsQ0FFQSxTQUFTLEdBQXdCLEVBQTBCLENBQ3pELEdBQUksQ0FFRixPQURnQixFQUFHLFlBQVksRUFBUyxDQUFFLGNBQWUsRUFBSyxDQUNqRCxDQUFDLENBQUMsS0FBTSxHQUFVLENBQzdCLElBQU0sRUFBWSxFQUFLLEtBQUssRUFBUyxFQUFNLElBQUksRUFFL0MsT0FESSxFQUFNLFlBQVksRUFBVSxHQUF3QixDQUFTLEVBQzFELEVBQU0sT0FBTyxHQUFLLEVBQU0sS0FBSyxTQUFTLE1BQU0sQ0FDckQsQ0FBQyxDQUNILE1BQVEsQ0FDTixNQUFPLEVBQ1QsQ0FDRixDQUVBLGVBQWUsR0FDYixFQUNBLEVBQ0EsRUFDZSxDQUNmLEVBQVksTUFBUSxRQUNwQixJQUFNLEVBQWEsRUFBWSxPQUFTLFNBQ2xDLEVBQVksR0FBWSxFQUFZLENBQVUsRUFDcEQsRUFBWSxLQUFPLElBQWUsRUFBWSxXQUFhLEVBQVksWUFBYyxZQUdyRixPQUFPLEVBQVksUUFFbkIsT0FBTyxFQUFZLGdCQUVuQixNQUFNLEVBQUcsU0FBUyxNQUFNLEVBQVksQ0FBRSxVQUFXLEVBQUssQ0FBQyxFQUN2RCxNQUFNLEVBQUcsU0FBUyxVQUFVLEVBQUssS0FBSyxFQUFZLGNBQWMsRUFBRyxLQUFLLFVBQVUsQ0FBVyxDQUFDLENBQ2hHLENBRUEsU0FBUyxHQUNQLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDaUIsQ0FDakIsR0FBSSxJQUFpQixZQUFjLElBQWlCLFlBQWEsQ0FDL0QsSUFBTSxFQUFZLEdBQVksRUFBYyxFQUFLLFVBQVUsRUFDM0QsTUFBTyxDQUNMLENBQ0UsSUFBSyxFQUNMLE9BQVEsRUFBWSxTQUFXLFdBQy9CLE9BQVEsRUFBSyxPQUNiLFVBQVcsRUFBSyxXQUFhLFNBQzdCLE9BQVEsQ0FBQyxDQUNYLENBQ0YsQ0FDRixDQVVBLElBQU0sRUFBcUMsQ0FBQyxFQUN0QyxFQUFhLEVBQUssWUFBYyxPQTBCdEMsT0F2QkksSUFBZSxPQUFTLElBQWUsUUFBVyxJQUFlLFVBQVksQ0FBQyxJQUNoRixFQUFrQixLQUFLLENBQ3JCLElBQUssRUFDTCxlQUFnQixFQUFlLGFBQWUsWUFDOUMsT0FBUSxXQUNSLE9BQVEsRUFBSyxPQUNiLGdCQUFpQixHQUNqQixvQkFBcUIsRUFBSyxLQUFLLEVBQWdCLEtBQUssRUFDcEQsVUFBVyxFQUFLLFVBQ2hCLE9BQVEsRUFDVixDQUFDLEdBRUMsSUFBZSxPQUFTLElBQWUsUUFBVyxJQUFlLFVBQVksSUFDL0UsRUFBa0IsS0FBSyxDQUNyQixJQUFLLEVBQ0wsZUFBZ0IsRUFBZSxZQUFjLGFBQzdDLE9BQVEsU0FDUixPQUFRLEVBQUssT0FDYixnQkFBaUIsR0FDakIsb0JBQXFCLEVBQUssS0FBSyxFQUFnQixLQUFLLEVBQ3BELFVBQVcsRUFBSyxTQUNsQixDQUFDLEVBRUksQ0FDVCxDQUVBLFNBQVMsR0FBWSxFQUF1QixFQUF5QyxDQUNuRixPQUFPLElBQWUsUUFBVyxDQUFDLEdBQWMsSUFBZSxXQUFhLENBQzlFLENDL2lCQSxNQUFhLEdBQW1FLENBQzlFLFFBQVMsYUFDVCxTQUFVLGFBQ1YsU0FYQSxHQUFHLEVBQ0gsTUFBTyxDQUNMLFlBQWEsdUNBQ2IsS0FBTSxVQUNOLE1BQU8sR0FDVCxDQU1BLEVBQ0EsUUFBUSxFQUFNLENBQ1osRUFBa0MsRUFBTSxRQUFRLElBQUksQ0FBQyxFQUVyRCxJQUFNLEVBQU8sRUFBSyxNQUFNLFNBQVMsR0FBSyxHQUdoQyxFQUFpQixRQUFRLFNBQVMsSUFDbEMsRUFBVSxFQUFpQixNQUFRLE9BQ25DLEVBQU8sRUFBaUIsQ0FBQyxPQUFPLEVBQUksQ0FBQyxnQkFBaUIsV0FBWSxLQUFLLEVBQ3pFLEVBQUssT0FDUCxFQUFLLEtBQUssU0FBUyxFQUVyQixFQUFLLEtBQUssQ0FBSSxFQUNkLEdBQU0sRUFBRyxHQUFHLEdBQXVCLEVBQUssRUFDbEMsRUFBYyxDQUFDLEdBQUcsRUFBTSxHQUFHLEVBQW9CLElBQUssR0FBUSxFQUFJLFNBQVMsQ0FBQyxDQUFDLEVBQzdFLEVBQUssU0FDUCxRQUFRLEtBQUssWUFBWSxFQUFRLEdBQUcsRUFBWSxLQUFLLEdBQUcsRUFBRSxFQUFFLEVBRTlELElBQU0sRUFBTSxFQUFjLFVBQVUsRUFBUyxFQUFhLENBQ3hELE1BQU8sVUFDUCxJQUFLLENBQUUsR0FBRyxRQUFRLEdBQUksQ0FDeEIsQ0FBQyxFQUNELFFBQVEsS0FBSyxFQUFJLFFBQVUsQ0FBQyxDQUM5QixDQUNGLEVDaENBLEVBQXFDLFFBQVEsR0FBRyxFQUVoRCxNQUFNLEVBQU0sRUFBUSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQy9CLFdBQVcsVUFBVSxDQUFDLENBQ3RCLFFBQVEsQ0FBb0IsQ0FBQyxDQUM3QixRQUFRLEVBQUcsQ0FBQyxDQUNaLFFBQVEsRUFBUyxDQUFDLENBQ2xCLFFBQVEsRUFBRyxDQUFDLENBQ1osUUFBUSxFQUFHLENBQUMsQ0FDWixjQUFjLENBQUMsQ0FDZixPQUFPLENBQUMsQ0FDUixRQUFRLEdBQVcsQ0FBQyxDQUFDLENBQ3JCLEtBQUssQ0FBQyxDQUFDLEtBRVYsU0FBUyxJQUFxQixDQUk1QixPQUhvQixLQUFLLE1BQU0sRUFBRyxhQUFhLEVBQUssS0FBSyxFQUFtQixFQUFHLGNBQWMsRUFBRyxNQUFNLENBR3JGLENBQUMsQ0FBQyxPQUNyQiJ9
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6WyJidWlsZGVyIl0sInNvdXJjZXMiOlsiLi4vc3JjL2Vudi50cyIsIi4uL3NyYy90eXBlcy50cyIsIi4uL3NyYy91dGlscy50cyIsIi4uL3NyYy9zaGFyZWRPcHRpb25zQnVpbGRlci50cyIsIi4uL3NyYy9jb21tYW5kcy9idWlsZC9idWlsZGVyLnRzIiwiLi4vc3JjL2NvbW1hbmRzL2J1aWxkL2J1bmRsZXJMb2dnZXIudHMiLCIuLi9zcmMvY29tbWFuZHMvYnVpbGQvZXh0ZXJuYWxzLnRzIiwiLi4vc3JjL2NvbW1hbmRzL2J1aWxkL3RyYW5zZm9ybVV0aWxzLnRzIiwiLi4vc3JjL2NvbW1hbmRzL2J1aWxkL2RlY29yYXRvckRldGVjdGlvbi50cyIsIi4uL3NyYy9jb21tYW5kcy9idWlsZC9yZW1vdmVDb25zb2xlUGx1Z2luLnRzIiwiLi4vc3JjL2NvbW1hbmRzL2J1aWxkL3BsdWdpbi50cyIsIi4uL3NyYy9jb21tYW5kcy9idWlsZC90eXBlU2NyaXB0LnRzIiwiLi4vc3JjL2NvbW1hbmRzL2J1aWxkL2J1aWxkLnRzIiwiLi4vc3JjL2NvbW1hbmRzL3J1bi50cyIsIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkQW5kQXBwbHlFbnZpcm9ubWVudFZhcmlhYmxlcyB9IGZyb20gJ0B3aWxsYm9vc3Rlci9zaGFyZWQtbGliLW5vZGUnO1xuXG5pbXBvcnQgdHlwZSB7IGJ1aWxkZXIgfSBmcm9tICcuL2NvbW1hbmRzL2J1aWxkL2J1aWxkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBzaGFyZWRPcHRpb25zQnVpbGRlciB9IGZyb20gJy4vc2hhcmVkT3B0aW9uc0J1aWxkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBBcmd1bWVudHNUeXBlIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmxldCBlbnZWYXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gbG9hZHMgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gdGhlIGNvbmZpZ3VyZWQgc291cmNlcy5cbiAqICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEVudmlyb25tZW50VmFyaWFibGVzV2l0aENhY2hlKFxuICBhcmd2OiBBcmd1bWVudHNUeXBlPHR5cGVvZiBzaGFyZWRPcHRpb25zQnVpbGRlcj4sXG4gIGN3ZDogc3RyaW5nXG4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCFlbnZWYXJzKSB7XG4gICAgZW52VmFycyA9IHJlYWRBbmRBcHBseUVudmlyb25tZW50VmFyaWFibGVzKGFyZ3YsIGN3ZCk7XG4gICAgaWYgKGFyZ3YudmVyYm9zZSkge1xuICAgICAgY29uc29sZS5pbmZvKCdMb2FkZWQgZW52IHZhcnM6JywgT2JqZWN0LmtleXMoZW52VmFycykpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZW52VmFycztcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBkZWZpbml0aW9uIG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHdpbGwgYmUgaW5qZWN0ZWQgaW50byB0aGUgYnVpbGQuXG4gKiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVudmlyb25tZW50VmFyaWFibGVzRGVmaW5pdGlvbihcbiAgYXJndjogQXJndW1lbnRzVHlwZTx0eXBlb2YgYnVpbGRlcj4sXG4gIGN3ZDogc3RyaW5nXG4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgZW52VmFyc0RlZjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBjb25zdCBlbnZWYXJOYW1lcyA9IG5ldyBTZXQoW1xuICAgIC4uLihhcmd2LmlubGluZSA/PyBbXSkuZmxhdE1hcCgoZSkgPT4gZS50b1N0cmluZygpLnNwbGl0KCcsJykpLFxuICAgIC4uLihhcmd2LmF1dG9JbmxpbmUgPyBPYmplY3Qua2V5cyhsb2FkRW52aXJvbm1lbnRWYXJpYWJsZXNXaXRoQ2FjaGUoYXJndiwgY3dkKSkgOiBbXSksXG4gIF0pO1xuICBmb3IgKGNvbnN0IG5hbWUgb2YgZW52VmFyTmFtZXMpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnZbbmFtZV0gPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cbiAgICBlbnZWYXJzRGVmW2Bwcm9jZXNzLmVudi4ke25hbWV9YF0gPSBKU09OLnN0cmluZ2lmeShwcm9jZXNzLmVudltuYW1lXSk7XG4gIH1cbiAgaWYgKGFyZ3YudmVyYm9zZSkge1xuICAgIGNvbnNvbGUuaW5mbygnSW5saW5lIGVudiB2YXJzOicsIE9iamVjdC5rZXlzKGVudlZhcnNEZWYpKTtcbiAgfVxuICByZXR1cm4gZW52VmFyc0RlZjtcbn1cbiIsImltcG9ydCB0eXBlIHsgQXJndW1lbnRzQ2FtZWxDYXNlLCBJbmZlcnJlZE9wdGlvblR5cGVzLCBPcHRpb25zIH0gZnJvbSAneWFyZ3MnO1xuXG5leHBvcnQgY29uc3QgYWxsVGFyZ2V0Q2F0ZWdvcmllcyA9IFsnYXBwJywgJ2Z1bmN0aW9ucycsICdsaWInXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgVGFyZ2V0Q2F0ZWdvcnkgPSAodHlwZW9mIGFsbFRhcmdldENhdGVnb3JpZXMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBhbGxUYXJnZXREZXRhaWxzID0gWydhcHAtbm9kZScsICdmdW5jdGlvbnMnLCAnbGliJywgJ2xpYi1yZWFjdCddIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBUYXJnZXREZXRhaWwgPSAodHlwZW9mIGFsbFRhcmdldERldGFpbHMpW251bWJlcl07XG5cbmV4cG9ydCB0eXBlIEFyZ3VtZW50c1R5cGU8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIE9wdGlvbnM+PiA9IEFyZ3VtZW50c0NhbWVsQ2FzZTxJbmZlcnJlZE9wdGlvblR5cGVzPFQ+PjtcbiIsImltcG9ydCBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdXJsIGZyb20gJ25vZGU6dXJsJztcblxuaW1wb3J0IHR5cGUgeyBQYWNrYWdlSnNvbiB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkUGFja2FnZUpzb24oZGlyUGF0aDogc3RyaW5nKTogUHJvbWlzZTxbUGFja2FnZUpzb24gfCB1bmRlZmluZWQsIHN0cmluZ10+IHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKGRpclBhdGgsICdwYWNrYWdlLmpzb24nKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYWNrYWdlSnNvblRleHQgPSBhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShwYWNrYWdlSnNvblBhdGgsICd1dGY4Jyk7XG4gICAgcmV0dXJuIFtKU09OLnBhcnNlKHBhY2thZ2VKc29uVGV4dCkgYXMgUGFja2FnZUpzb24sIHBhY2thZ2VKc29uUGF0aF07XG4gIH0gY2F0Y2gge1xuICAgIC8vIGRvIG5vdGhpbmdcbiAgfVxuICByZXR1cm4gW3VuZGVmaW5lZCwgcGFja2FnZUpzb25QYXRoXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1aWxkVHNSb290UGF0aCgpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aC5kaXJuYW1lKHBhdGguZGlybmFtZSh1cmwuZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKSk7XG59XG5cbi8qKiBSZXR1cm5zIHRoZSBzY29wZSBvZiBhIHBhY2thZ2UgbmFtZSAoZS5nLiBcIndpbGxib29zdGVyXCIgZm9yIFwiQHdpbGxib29zdGVyL3NoYXJlZC1saWJcIikuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlKHBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiAvXkAoW14vXSspXFwvLy5leGVjKHBhY2thZ2VKc29uLm5hbWUgPz8gJycpPy5bMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREYXRlVGltZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke2RhdGUuZ2V0RnVsbFllYXIoKX0tJHtwYWQoZGF0ZS5nZXRNb250aCgpICsgMSl9LSR7cGFkKGRhdGUuZ2V0RGF0ZSgpKX0gJHtwYWQoZGF0ZS5nZXRIb3VycygpKX06JHtwYWQoXG4gICAgZGF0ZS5nZXRNaW51dGVzKClcbiAgKX06JHtwYWQoZGF0ZS5nZXRTZWNvbmRzKCkpfWA7XG59XG5cbmZ1bmN0aW9uIHBhZCh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSkucGFkU3RhcnQoMiwgJzAnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdER1cmF0aW9uKG1pbGxpc2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKG1pbGxpc2Vjb25kcyA8IDEwMDApIHJldHVybiBgJHtNYXRoLnJvdW5kKG1pbGxpc2Vjb25kcyl9bXNgO1xuXG4gIGNvbnN0IHNlY29uZHMgPSBtaWxsaXNlY29uZHMgLyAxMDAwO1xuICBpZiAoc2Vjb25kcyA8IDYwKSByZXR1cm4gYCR7TnVtYmVyKHNlY29uZHMudG9GaXhlZCgxKSl9c2A7XG5cbiAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgcmV0dXJuIGAke21pbnV0ZXN9bSAke051bWJlcigoc2Vjb25kcyAtIG1pbnV0ZXMgKiA2MCkudG9GaXhlZCgxKSl9c2A7XG59XG4iLCJpbXBvcnQgeyB5YXJnc09wdGlvbnNCdWlsZGVyRm9yRW52IH0gZnJvbSAnQHdpbGxib29zdGVyL3NoYXJlZC1saWItbm9kZSc7XG5cbmV4cG9ydCBjb25zdCBzaGFyZWRPcHRpb25zQnVpbGRlciA9IHtcbiAgLi4ueWFyZ3NPcHRpb25zQnVpbGRlckZvckVudixcbiAgc2lsZW50OiB7XG4gICAgZGVzY3JpcHRpb246ICdXaGV0aGVyIHRvIHN1cHByZXNzIG5vbi1lcnJvciBvdXRwdXQgb3Igbm90JyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgYWxpYXM6ICdzJyxcbiAgfSxcbn0gYXMgY29uc3Q7XG4iLCJpbXBvcnQgeyBzaGFyZWRPcHRpb25zQnVpbGRlciB9IGZyb20gJy4uLy4uL3NoYXJlZE9wdGlvbnNCdWlsZGVyLmpzJztcblxuZXhwb3J0IGNvbnN0IGJ1aWxkZXIgPSB7XG4gIC4uLnNoYXJlZE9wdGlvbnNCdWlsZGVyLFxuICBpbnB1dDoge1xuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1BhdGhzIG9yIGdsb2IgcGF0dGVybnMgKGUuZy4gXCJzcmMvKiovKi50c1wiKSBvZiBzb3VyY2UgY29kZSBmaWxlcyB0byBiZSBidWlsdC4gVGhlIGZpcnN0IGZpbGUgaXMgbWFpbi4gSWYgbm8gb3B0aW9uIGlzIGdpdmVuLCBcInNyYy9pbmRleC57dHMsdHN4LGN0cyxtdHN9XCIgZnJvbSBwYWNrYWdlIGRpcmVjdG9yeSBpcyB0YXJnZXRlZC4nLFxuICAgIHR5cGU6ICdhcnJheScsXG4gICAgYWxpYXM6ICdpJyxcbiAgfSxcbiAgbWluaWZ5OiB7XG4gICAgZGVzY3JpcHRpb246ICdXaGV0aGVyIG9yIG5vdCBtaW5pZmljYXRpb24gaXMgZW5hYmxlZC4nLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICBzb3VyY2VtYXA6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1doZXRoZXIgb3Igbm90IHNvdXJjZW1hcCBpcyBlbmFibGVkLicsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIGV4dGVybmFsOiB7XG4gICAgZGVzY3JpcHRpb246ICdBZGRpdGlvbmFsIGV4dGVybmFsIGRlcGVuZGVuY2llcy4nLFxuICAgIHR5cGU6ICdhcnJheScsXG4gIH0sXG4gIG91dERpcjoge1xuICAgIGRlc2NyaXB0aW9uOiAnT3V0cHV0IGRpcmVjdG9yeS4gRGVmYXVsdHMgdG8gXCJkaXN0XCIgaW4gdGhlIHBhY2thZ2UgZGlyZWN0b3J5LicsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgYWxpYXM6ICdvJyxcbiAgfSxcbiAgaW5saW5lOiB7XG4gICAgZGVzY3JpcHRpb246ICdFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gYmUgaW5saW5lZC4nLFxuICAgIHR5cGU6ICdhcnJheScsXG4gIH0sXG4gICdhdXRvLWlubGluZSc6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0lubGluZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZGVmaW5lZCBhdCBlbnYgZmlsZXMuJyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgZGVzY3JpcHRpb246ICdXaGV0aGVyIHdhdGNoIG1vZGUgaXMgZW5hYmxlZCBvciBub3QnLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBhbGlhczogJ3cnLFxuICB9LFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IGFwcEJ1aWxkZXIgPSB7XG4gIC4uLmJ1aWxkZXIsXG4gIG1vZHVsZVR5cGU6IHtcbiAgICBkZXNjcmlwdGlvbjogJ2VzbSwgY2pzLCBvciBlaXRoZXIgKGRlZmF1bHQpLicsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgYWxpYXM6ICdtJyxcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBmdW5jdGlvbnNCdWlsZGVyID0ge1xuICAuLi5hcHBCdWlsZGVyLFxuICBvbmx5UGFja2FnZUpzb246IHtcbiAgICBkZXNjcmlwdGlvbjogJ1doZXRoZXIgdG8gZ2VuZXJhdGUgb25seSBwYWNrYWdlLmpzb24uJyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gIH0sXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgbGliQnVpbGRlciA9IHtcbiAgLi4uYnVpbGRlcixcbiAgbW9kdWxlVHlwZToge1xuICAgIGRlc2NyaXB0aW9uOiAnZXNtLCBjanMsIGVpdGhlciwgb3IgYm90aCAoZGVmYXVsdCkuJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBhbGlhczogJ20nLFxuICB9LFxuICBkZWNsYXJhdGlvbk9ubHk6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0VtaXQgb25seSBkZWNsYXJhdGlvbiAoLmQudHMpIGZpbGVzIHdpdGhvdXQgYnVuZGxpbmcgSmF2YVNjcmlwdC4nLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEFueUJ1aWxkZXJUeXBlID0gdHlwZW9mIGFwcEJ1aWxkZXIgfCB0eXBlb2YgZnVuY3Rpb25zQnVpbGRlciB8IHR5cGVvZiBsaWJCdWlsZGVyO1xuIiwiaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7IHN0eWxlVGV4dCB9IGZyb20gJ25vZGU6dXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVFcnJvcihlcnJvcjogQnVpbGRFcnJvciwgcmVjb3ZlciA9IGZhbHNlKTogdm9pZCB7XG4gIGNvbnN0IG5hbWUgPSBlcnJvci5uYW1lIHx8IChlcnJvci5jYXVzZSBhcyBFcnJvcik/Lm5hbWU7XG4gIGNvbnN0IG5hbWVTZWN0aW9uID0gbmFtZSA/IGAke25hbWV9OiBgIDogJyc7XG4gIGNvbnN0IHBsdWdpblNlY3Rpb24gPSBlcnJvci5wbHVnaW4gPyBgKHBsdWdpbiAke2Vycm9yLnBsdWdpbn0pIGAgOiAnJztcbiAgY29uc3QgbWVzc2FnZSA9IGAke3BsdWdpblNlY3Rpb259JHtuYW1lU2VjdGlvbn0ke2Vycm9yLm1lc3NhZ2V9YDtcblxuICBjb25zdCBvdXRwdXRMaW5lcyA9IFtzdHlsZVRleHQoWydib2xkJywgJ3JlZCddLCBgWyFdICR7bWVzc2FnZX1gKV07XG5cbiAgaWYgKGVycm9yLnVybCkge1xuICAgIG91dHB1dExpbmVzLnB1c2goc3R5bGVUZXh0KCdjeWFuJywgZXJyb3IudXJsKSk7XG4gIH1cblxuICBpZiAoZXJyb3IubG9jKSB7XG4gICAgb3V0cHV0TGluZXMucHVzaChgJHtlcnJvci5sb2MuZmlsZSB8fCBlcnJvci5pZH0gKCR7ZXJyb3IubG9jLmxpbmV9OiR7ZXJyb3IubG9jLmNvbHVtbn0pYCk7XG4gIH0gZWxzZSBpZiAoZXJyb3IuaWQpIHtcbiAgICBvdXRwdXRMaW5lcy5wdXNoKGVycm9yLmlkKTtcbiAgfVxuXG4gIGlmIChlcnJvci5mcmFtZSkge1xuICAgIG91dHB1dExpbmVzLnB1c2goc3R5bGVUZXh0KCdkaW0nLCBlcnJvci5mcmFtZSkpO1xuICB9XG5cbiAgaWYgKGVycm9yLnN0YWNrKSB7XG4gICAgb3V0cHV0TGluZXMucHVzaChzdHlsZVRleHQoJ2RpbScsIGVycm9yLnN0YWNrLnJlcGxhY2UoYCR7bmFtZVNlY3Rpb259JHtlcnJvci5tZXNzYWdlfVxcbmAsICcnKSkpO1xuICB9XG5cbiAgb3V0cHV0TGluZXMucHVzaCgnJywgJycpO1xuICBjb25zb2xlLmVycm9yKG91dHB1dExpbmVzLmpvaW4oJ1xcbicpKTtcblxuICBpZiAoIXJlY292ZXIpIHByb2Nlc3MuZXhpdCgxKTtcbn1cblxuaW50ZXJmYWNlIEJ1aWxkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNhdXNlPzogdW5rbm93bjtcbiAgZnJhbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBsb2M/OiB7XG4gICAgY29sdW1uOiBudW1iZXI7XG4gICAgZmlsZT86IHN0cmluZztcbiAgICBsaW5lOiBudW1iZXI7XG4gIH07XG4gIHBsdWdpbj86IHN0cmluZztcbiAgdXJsPzogc3RyaW5nO1xufVxuIiwiaW1wb3J0IGZzIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgYnVpbHRpbk1vZHVsZXMgfSBmcm9tICdub2RlOm1vZHVsZSc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgdHlwZSB7IFBhY2thZ2VKc29uIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHR5cGUgeyBBcmd1bWVudHNUeXBlLCBUYXJnZXREZXRhaWwgfSBmcm9tICcuLi8uLi90eXBlcy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgYnVpbGRlciB9IGZyb20gJy4vYnVpbGRlci5qcyc7XG5cbmNvbnN0IG5vZGVCdWlsdGluTW9kdWxlcyA9IG5ldyBTZXQoYnVpbHRpbk1vZHVsZXMpO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRXh0ZXJuYWxNYXRjaGVyKFxuICBhcmd2OiBBcmd1bWVudHNUeXBlPHR5cGVvZiBidWlsZGVyPixcbiAgdGFyZ2V0RGV0YWlsOiBUYXJnZXREZXRhaWwsXG4gIHBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbixcbiAgbmFtZXNwYWNlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHBhY2thZ2VEaXJQYXRoOiBzdHJpbmdcbik6IChpZDogc3RyaW5nKSA9PiBib29sZWFuIHtcbiAgY29uc3QgZXh0ZXJuYWxEZXBlbmRlbmN5TmFtZXMgPSBuZXcgU2V0KFxuICAgIGNvbGxlY3RFeHRlcm5hbERlcGVuZGVuY2llcyhhcmd2LCB0YXJnZXREZXRhaWwsIHBhY2thZ2VKc29uLCBwYWNrYWdlRGlyUGF0aCwgbmFtZXNwYWNlKVxuICApO1xuICByZXR1cm4gKGlkKSA9PiBpc05vZGVCdWlsdGluKGlkKSB8fCBtYXRjaGVzTW9kdWxlT3JTdWJwYXRoKGlkLCBleHRlcm5hbERlcGVuZGVuY3lOYW1lcyk7XG59XG5cbi8qKiBDaGVja3Mgd2hldGhlciBgaWRgIGVxdWFscyBhIG5hbWUgaW4gYG5hbWVzYCBvciBpcyBhIHN1YnBhdGggb2YgaXQgKGUuZy4gYGxvZGFzaC5jaHVuay9pbmRleC5qc2ApLiAqL1xuZnVuY3Rpb24gbWF0Y2hlc01vZHVsZU9yU3VicGF0aChpZDogc3RyaW5nLCBuYW1lczogU2V0PHN0cmluZz4pOiBib29sZWFuIHtcbiAgaWYgKG5hbWVzLmhhcyhpZCkpIHJldHVybiB0cnVlO1xuICBmb3IgKGxldCBzbGFzaEluZGV4ID0gaWQuaW5kZXhPZignLycpOyBzbGFzaEluZGV4ICE9PSAtMTsgc2xhc2hJbmRleCA9IGlkLmluZGV4T2YoJy8nLCBzbGFzaEluZGV4ICsgMSkpIHtcbiAgICBpZiAobmFtZXMuaGFzKGlkLnNsaWNlKDAsIHNsYXNoSW5kZXgpKSkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0RXh0ZXJuYWxEZXBlbmRlbmNpZXMoXG4gIGFyZ3Y6IEFyZ3VtZW50c1R5cGU8dHlwZW9mIGJ1aWxkZXI+LFxuICB0YXJnZXREZXRhaWw6IFRhcmdldERldGFpbCxcbiAgcGFja2FnZUpzb246IFBhY2thZ2VKc29uLFxuICBwYWNrYWdlRGlyUGF0aDogc3RyaW5nLFxuICBuYW1lc3BhY2U6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogc3RyaW5nW10ge1xuICBjb25zdCBleHRlcm5hbERlcHMgPSBbLi4uKGFyZ3YuZXh0ZXJuYWwgPz8gW10pXS5tYXAoKGl0ZW0pID0+IGl0ZW0udG9TdHJpbmcoKSk7XG4gIGlmIChwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXM/LlsnQHByaXNtYS9jbGllbnQnXSkge1xuICAgIGV4dGVybmFsRGVwcy5wdXNoKCdwcmlzbWEtY2xpZW50Jyk7XG4gIH1cbiAgLy8gYGRlcHM6IHRydWVgIGRpZCBub3QgaGFuZGxlIGltcG9ydHMgc3VjaCBhcyBgbG9kYXNoLmNodW5rL2luZGV4LmpzYC5cbiAgZXh0ZXJuYWxEZXBzLnB1c2goXG4gICAgLi4uT2JqZWN0LmtleXMocGFja2FnZUpzb24uZGVwZW5kZW5jaWVzID8/IHt9KSxcbiAgICAuLi5PYmplY3Qua2V5cyhwYWNrYWdlSnNvbi5wZWVyRGVwZW5kZW5jaWVzID8/IHt9KSxcbiAgICAuLi5PYmplY3Qua2V5cyhwYWNrYWdlSnNvbi5vcHRpb25hbERlcGVuZGVuY2llcyA/PyB7fSlcbiAgKTtcbiAgY29uc3QgcGFyZW50RGlyUGF0aCA9IHBhdGguZGlybmFtZShwYWNrYWdlRGlyUGF0aCk7XG4gIGlmIChmcy5leGlzdHNTeW5jKHBhdGguam9pbihwYXRoLmRpcm5hbWUocGFyZW50RGlyUGF0aCksICdwYWNrYWdlLmpzb24nKSkpIHtcbiAgICBjb25zdCBwYWNrYWdlRGlycyA9IGZzLnJlYWRkaXJTeW5jKHBhcmVudERpclBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgICBmb3IgKGNvbnN0IHBhY2thZ2VEaXIgb2YgcGFja2FnZURpcnMpIHtcbiAgICAgIGlmICghcGFja2FnZURpci5pc0RpcmVjdG9yeSgpKSBjb250aW51ZTtcblxuICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKHBhcmVudERpclBhdGgsIHBhY2thZ2VEaXIubmFtZSwgJ3BhY2thZ2UuanNvbicpO1xuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHBhY2thZ2VKc29uUGF0aCkpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBvdGhlclBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhY2thZ2VKc29uUGF0aCwgJ3V0ZjgnKSk7XG4gICAgICBpZiAocGFja2FnZUpzb24uZGVwZW5kZW5jaWVzPy5bb3RoZXJQYWNrYWdlSnNvbi5uYW1lID8/ICcnXSkge1xuICAgICAgICBleHRlcm5hbERlcHMucHVzaChcbiAgICAgICAgICAuLi5PYmplY3Qua2V5cyhvdGhlclBhY2thZ2VKc29uLmRlcGVuZGVuY2llcyA/PyB7fSksXG4gICAgICAgICAgLi4uT2JqZWN0LmtleXMob3RoZXJQYWNrYWdlSnNvbi5wZWVyRGVwZW5kZW5jaWVzID8/IHt9KSxcbiAgICAgICAgICAuLi5PYmplY3Qua2V5cyhvdGhlclBhY2thZ2VKc29uLm9wdGlvbmFsRGVwZW5kZW5jaWVzID8/IHt9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFuIGFwcCBidW5kbGVzIGl0cyBvd24gbmFtZXNwYWNlJ3MgcGFja2FnZXMgaW5zdGVhZCBvZiB0cmVhdGluZyB0aGVtIGFzIGV4dGVybmFsIGRlcGVuZGVuY2llcy5cbiAgY29uc3QgYnVuZGxlc093bk5hbWVzcGFjZSA9IHRhcmdldERldGFpbCA9PT0gJ2FwcC1ub2RlJyB8fCB0YXJnZXREZXRhaWwgPT09ICdmdW5jdGlvbnMnO1xuICBjb25zdCBidW5kbGVkUHJlZml4ID0gYnVuZGxlc093bk5hbWVzcGFjZSAmJiBuYW1lc3BhY2UgPyBgQCR7bmFtZXNwYWNlfS9gIDogdW5kZWZpbmVkO1xuICByZXR1cm4gYnVuZGxlZFByZWZpeCA/IGV4dGVybmFsRGVwcy5maWx0ZXIoKG5hbWUpID0+ICFuYW1lLnN0YXJ0c1dpdGgoYnVuZGxlZFByZWZpeCkpIDogZXh0ZXJuYWxEZXBzO1xufVxuXG5mdW5jdGlvbiBpc05vZGVCdWlsdGluKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlkLnN0YXJ0c1dpdGgoJ25vZGU6JykgfHwgbm9kZUJ1aWx0aW5Nb2R1bGVzLmhhcyhpZCk7XG59XG4iLCJpbXBvcnQgeyBwYXJzZVN5bmMsIHZpc2l0b3JLZXlzIH0gZnJvbSAnb3hjLXBhcnNlcic7XG5cbmNvbnN0IHNvdXJjZUZpbGVFeHRlbnNpb25zID0gWycuY2pzJywgJy5tanMnLCAnLmpzJywgJy5qc3gnLCAnLmN0cycsICcubXRzJywgJy50cycsICcudHN4J107XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RyYW5zZm9ybVRhcmdldEZpbGUoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHNvdXJjZUZpbGVFeHRlbnNpb25zLnNvbWUoKGV4dGVuc2lvbikgPT4gaWQuZW5kc1dpdGgoZXh0ZW5zaW9uKSkgJiYgIWlkLnN0YXJ0c1dpdGgoJ1xcMCcpICYmICFpc05vZGVNb2R1bGVzUGF0aChpZClcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNOb2RlTW9kdWxlc1BhdGgoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaWQuaW5jbHVkZXMoJy9ub2RlX21vZHVsZXMvJykgfHwgaWQuaW5jbHVkZXMoJ1xcXFxub2RlX21vZHVsZXNcXFxcJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNvdXJjZUZpbGUoaWQ6IHN0cmluZywgY29kZTogc3RyaW5nKTogUmV0dXJuVHlwZTx0eXBlb2YgcGFyc2VTeW5jPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGxhbmcgPSBnZXRQYXJzZXJMYW5nKGlkKTtcbiAgY29uc3Qgc291cmNlVHlwZSA9IGdldFBhcnNlclNvdXJjZVR5cGUoaWQpO1xuICBjb25zdCBhc3QgPSBwYXJzZVN5bmMoaWQsIGNvZGUsIHsgbGFuZywgc291cmNlVHlwZSB9KTtcbiAgaWYgKCFoYXNQYXJzZUVycm9yKGFzdCkpIHJldHVybiBhc3Q7XG4gIGlmIChpZC5lbmRzV2l0aCgnLmpzJykgJiYgc291cmNlVHlwZSA9PT0gJ3VuYW1iaWd1b3VzJykge1xuICAgIGNvbnN0IGNvbW1vbkpzQXN0ID0gcGFyc2VTeW5jKGlkLCBjb2RlLCB7IGxhbmcsIHNvdXJjZVR5cGU6ICdjb21tb25qcycgfSk7XG4gICAgaWYgKCFoYXNQYXJzZUVycm9yKGNvbW1vbkpzQXN0KSkgcmV0dXJuIGNvbW1vbkpzQXN0O1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhhc1BhcnNlRXJyb3IoYXN0OiBSZXR1cm5UeXBlPHR5cGVvZiBwYXJzZVN5bmM+KTogYm9vbGVhbiB7XG4gIHJldHVybiBhc3QuZXJyb3JzLnNvbWUoKGVycm9yKSA9PiBlcnJvci5zZXZlcml0eSA9PT0gJ0Vycm9yJyk7XG59XG5cbmZ1bmN0aW9uIGdldFBhcnNlckxhbmcoaWQ6IHN0cmluZyk6ICdqcycgfCAnanN4JyB8ICd0cycgfCAndHN4JyB7XG4gIGlmIChpZC5lbmRzV2l0aCgnLnRzeCcpKSByZXR1cm4gJ3RzeCc7XG4gIGlmIChpZC5lbmRzV2l0aCgnLnRzJykgfHwgaWQuZW5kc1dpdGgoJy5jdHMnKSB8fCBpZC5lbmRzV2l0aCgnLm10cycpKSByZXR1cm4gJ3RzJztcbiAgaWYgKGlkLmVuZHNXaXRoKCcuanN4JykpIHJldHVybiAnanN4JztcbiAgcmV0dXJuICdqcyc7XG59XG5cbmZ1bmN0aW9uIGdldFBhcnNlclNvdXJjZVR5cGUoaWQ6IHN0cmluZyk6ICdjb21tb25qcycgfCAndW5hbWJpZ3VvdXMnIHtcbiAgcmV0dXJuIGlkLmVuZHNXaXRoKCcuY2pzJykgfHwgaWQuZW5kc1dpdGgoJy5jdHMnKSA/ICdjb21tb25qcycgOiAndW5hbWJpZ3VvdXMnO1xufVxuXG5leHBvcnQgdHlwZSBBc3ROb2RlID0ge1xuICB0eXBlOiBzdHJpbmc7XG4gIHN0YXJ0OiBudW1iZXI7XG4gIGVuZDogbnVtYmVyO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFzdE5vZGVDaGlsZHJlbihub2RlOiBBc3ROb2RlKTogQXN0Tm9kZVtdIHtcbiAgcmV0dXJuICh2aXNpdG9yS2V5c1tub2RlLnR5cGVdID8/IFtdKVxuICAgIC5mbGF0TWFwKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gbm9kZVtrZXldO1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgIH0pXG4gICAgLmZpbHRlcigodmFsdWUpOiB2YWx1ZSBpcyBBc3ROb2RlID0+IGlzQXN0Tm9kZSh2YWx1ZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXN0Tm9kZVByb3BlcnR5KG5vZGU6IEFzdE5vZGUsIGtleTogc3RyaW5nKTogQXN0Tm9kZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHZhbHVlID0gbm9kZVtrZXldO1xuICByZXR1cm4gaXNBc3ROb2RlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXN0QXJyYXlQcm9wZXJ0eShub2RlOiBBc3ROb2RlLCBrZXk6IHN0cmluZyk6IEFzdE5vZGVbXSB7XG4gIGNvbnN0IHZhbHVlID0gbm9kZVtrZXldO1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIEFzdE5vZGUgPT4gaXNBc3ROb2RlKGl0ZW0pKSA6IFtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBc3ROb2RlKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgQXN0Tm9kZSB7XG4gIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mICh2YWx1ZSBhcyBBc3ROb2RlKS50eXBlID09PSAnc3RyaW5nJztcbn1cbiIsImltcG9ydCB0eXBlIHsgQXN0Tm9kZSB9IGZyb20gJy4vdHJhbnNmb3JtVXRpbHMuanMnO1xuaW1wb3J0IHsgZ2V0QXN0Tm9kZUNoaWxkcmVuLCBpc0FzdE5vZGUsIHBhcnNlU291cmNlRmlsZSB9IGZyb20gJy4vdHJhbnNmb3JtVXRpbHMuanMnO1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBjb2RlIGNvbnRhaW5zIGEgZGVjb3JhdG9yLCBpZ25vcmluZyBgQGAgaW4gY29tbWVudHMsIHN0cmluZ3MsIGFuZCByZWdleGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbnNEZWNvcmF0b3IoY29kZTogc3RyaW5nLCBpZCA9ICdmaWxlLnRzJyk6IGJvb2xlYW4ge1xuICAvLyBBIGRlY29yYXRvciByZXF1aXJlcyBhIGxpdGVyYWwgYEBgIGV2ZW4gd2hlbiBpdHMgaWRlbnRpZmllciB1c2VzIGVzY2FwZXMgc3VjaCBhcyBgXFx1MDA2M3VzdG9tYC5cbiAgaWYgKCFjb2RlLmluY2x1ZGVzKCdAJykpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBhc3QgPSBwYXJzZVNvdXJjZUZpbGUoaWQsIGNvZGUpO1xuICAvLyBJZiB0aGUgY29kZSBmYWlscyB0byBwYXJzZSwgbGV0IEJhYmVsIHRyYW5zZm9ybSBpdCBhbmQgcmVwb3J0IGEgcHJvcGVyIHN5bnRheCBlcnJvci5cbiAgaWYgKCFhc3QpIHJldHVybiB0cnVlO1xuICByZXR1cm4gaXNBc3ROb2RlKGFzdC5wcm9ncmFtKSAmJiBoYXNEZWNvcmF0b3JOb2RlKGFzdC5wcm9ncmFtKTtcbn1cblxuZnVuY3Rpb24gaGFzRGVjb3JhdG9yTm9kZShub2RlOiBBc3ROb2RlKTogYm9vbGVhbiB7XG4gIGlmIChub2RlLnR5cGUgPT09ICdEZWNvcmF0b3InKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGdldEFzdE5vZGVDaGlsZHJlbihub2RlKS5zb21lKChjaGlsZCkgPT4gaGFzRGVjb3JhdG9yTm9kZShjaGlsZCkpO1xufVxuIiwiaW1wb3J0IE1hZ2ljU3RyaW5nIGZyb20gJ21hZ2ljLXN0cmluZyc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbiwgU291cmNlTWFwSW5wdXQgfSBmcm9tICdyb2xsZG93bic7XG5cbmltcG9ydCB0eXBlIHsgQXN0Tm9kZSB9IGZyb20gJy4vdHJhbnNmb3JtVXRpbHMuanMnO1xuaW1wb3J0IHtcbiAgZ2V0QXN0QXJyYXlQcm9wZXJ0eSxcbiAgZ2V0QXN0Tm9kZUNoaWxkcmVuLFxuICBnZXRBc3ROb2RlUHJvcGVydHksXG4gIGlzQXN0Tm9kZSxcbiAgaXNUcmFuc2Zvcm1UYXJnZXRGaWxlLFxuICBwYXJzZVNvdXJjZUZpbGUsXG59IGZyb20gJy4vdHJhbnNmb3JtVXRpbHMuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uc29sZVJlbW92YWxFeGNsdWRlZE1ldGhvZHMoKTogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQge1xuICBjb25zdCB7IGVudiB9ID0gcHJvY2VzcztcbiAgaWYgKGVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSByZXR1cm4gbmV3IFNldChbJ2Vycm9yJywgJ2luZm8nLCAnd2FybiddKTtcbiAgaWYgKGVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnKSByZXR1cm4gbmV3IFNldChbJ2RlYnVnJywgJ2Vycm9yJywgJ2luZm8nLCAnd2FybiddKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUNvbnNvbGVQbHVnaW4oZXhjbHVkZWRNZXRob2RzOiBTZXQ8c3RyaW5nPik6IFBsdWdpbiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3JlbW92ZS1jb25zb2xlJyxcbiAgICB0cmFuc2Zvcm0oY29kZSwgaWQpIHtcbiAgICAgIGlmICghaXNUcmFuc2Zvcm1UYXJnZXRGaWxlKGlkKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIC8vIEEgZ2xvYmFsIGBjb25zb2xlYCBtYXkgYmUgd3JpdHRlbiB3aXRoIFVuaWNvZGUgZXNjYXBlcyAoYFxcdTAwNjNvbnNvbGVgKSwgd2hpY2ggdGhlIHBhcnNlclxuICAgICAgLy8gbm9ybWFsaXplcywgc28gdGhlIGZhc3QgcGF0aCBtdXN0IGxldCBlc2NhcGVkIGlkZW50aWZpZXJzIHRocm91Z2ggdG9vLlxuICAgICAgaWYgKCEvY29uc29sZXxcXFxcdS8udGVzdChjb2RlKSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgcmV0dXJuIHJlbW92ZUNvbnNvbGUoY29kZSwgaWQsIGV4Y2x1ZGVkTWV0aG9kcyk7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ29uc29sZShjb2RlOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGV4Y2x1ZGVkTWV0aG9kczogU2V0PHN0cmluZz4pOiB7IGNvZGU6IHN0cmluZzsgbWFwOiBTb3VyY2VNYXBJbnB1dCB9IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYXN0ID0gcGFyc2VTb3VyY2VGaWxlKGlkLCBjb2RlKTtcbiAgaWYgKCFhc3QgfHwgIWlzQXN0Tm9kZShhc3QucHJvZ3JhbSkpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgbWFnaWNTdHJpbmcgPSBuZXcgTWFnaWNTdHJpbmcoY29kZSk7XG4gIGNvbnN0IHJlcGxhY2VtZW50czogQ29uc29sZVJlcGxhY2VtZW50W10gPSBbXTtcbiAgY29uc3Qgc2NvcGVzOiBDb25zb2xlU2NvcGVbXSA9IFtdO1xuICBjb2xsZWN0Q29uc29sZVJlcGxhY2VtZW50cyhhc3QucHJvZ3JhbSwgW10sIHNjb3BlcywgcmVwbGFjZW1lbnRzLCBleGNsdWRlZE1ldGhvZHMpO1xuICBmb3IgKGNvbnN0IHJlcGxhY2VtZW50IG9mIHNlbGVjdENvbnNvbGVSZXBsYWNlbWVudHMocmVwbGFjZW1lbnRzKSkge1xuICAgIG1hZ2ljU3RyaW5nLm92ZXJ3cml0ZShyZXBsYWNlbWVudC5zdGFydCwgcmVwbGFjZW1lbnQuZW5kLCByZXBsYWNlbWVudC52YWx1ZSk7XG4gIH1cblxuICBpZiAoIW1hZ2ljU3RyaW5nLmhhc0NoYW5nZWQoKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHtcbiAgICBjb2RlOiBtYWdpY1N0cmluZy50b1N0cmluZygpLFxuICAgIG1hcDogbWFnaWNTdHJpbmcuZ2VuZXJhdGVNYXAoeyBoaXJlczogdHJ1ZSB9KSBhcyBTb3VyY2VNYXBJbnB1dCxcbiAgfTtcbn1cblxudHlwZSBDb25zb2xlUmVwbGFjZW1lbnQgPSB7XG4gIHN0YXJ0OiBudW1iZXI7XG4gIGVuZDogbnVtYmVyO1xuICB2YWx1ZTogc3RyaW5nO1xufTtcblxudHlwZSBDb25zb2xlU2NvcGUgPSB7XG4gIGVuZDogbnVtYmVyO1xuICBzaGFkb3dzQ29uc29sZTogYm9vbGVhbjtcbiAgc3RhcnQ6IG51bWJlcjtcbn07XG5cbmNvbnN0IG5vb3BGdW5jdGlvbkV4cHJlc3Npb24gPSAnKGZ1bmN0aW9uICgpIHt9KSc7XG5jb25zdCB1bmRlZmluZWRFeHByZXNzaW9uID0gJyh2b2lkIDApJztcblxuZnVuY3Rpb24gY29sbGVjdENvbnNvbGVSZXBsYWNlbWVudHMoXG4gIG5vZGU6IEFzdE5vZGUsXG4gIGFuY2VzdG9yczogQXN0Tm9kZVtdLFxuICBzY29wZXM6IENvbnNvbGVTY29wZVtdLFxuICByZXBsYWNlbWVudHM6IENvbnNvbGVSZXBsYWNlbWVudFtdLFxuICBleGNsdWRlZE1ldGhvZHM6IFNldDxzdHJpbmc+XG4pOiB2b2lkIHtcbiAgY29uc3QgcGFyZW50ID0gYW5jZXN0b3JzLmF0KC0xKTtcbiAgY29uc3Qgc2NvcGUgPSBnZXRDb25zb2xlU2NvcGUobm9kZSwgcGFyZW50KTtcbiAgaWYgKHNjb3BlKSBzY29wZXMucHVzaChzY29wZSk7XG5cbiAgaWYgKCFpc0NvbnNvbGVTaGFkb3dlZChzY29wZXMsIG5vZGUpICYmIG5vZGUudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJykge1xuICAgIGNvbGxlY3RDb25zb2xlQ2FsbFJlcGxhY2VtZW50KG5vZGUsIGFuY2VzdG9ycywgcmVwbGFjZW1lbnRzLCBleGNsdWRlZE1ldGhvZHMpO1xuICB9XG4gIGlmICghaXNDb25zb2xlU2hhZG93ZWQoc2NvcGVzLCBub2RlKSAmJiBub2RlLnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJykge1xuICAgIGNvbGxlY3RDb25zb2xlTWVtYmVyUmVwbGFjZW1lbnQobm9kZSwgYW5jZXN0b3JzLCByZXBsYWNlbWVudHMsIGV4Y2x1ZGVkTWV0aG9kcyk7XG4gIH1cblxuICBjb25zdCBjaGlsZEFuY2VzdG9ycyA9IFsuLi5hbmNlc3RvcnMsIG5vZGVdO1xuICBmb3IgKGNvbnN0IGNoaWxkIG9mIGdldEFzdE5vZGVDaGlsZHJlbihub2RlKSkge1xuICAgIGNvbGxlY3RDb25zb2xlUmVwbGFjZW1lbnRzKGNoaWxkLCBjaGlsZEFuY2VzdG9ycywgc2NvcGVzLCByZXBsYWNlbWVudHMsIGV4Y2x1ZGVkTWV0aG9kcyk7XG4gIH1cblxuICBpZiAoc2NvcGUpIHNjb3Blcy5wb3AoKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29uc29sZVNjb3BlKG5vZGU6IEFzdE5vZGUsIHBhcmVudDogQXN0Tm9kZSB8IHVuZGVmaW5lZCk6IENvbnNvbGVTY29wZSB8IHVuZGVmaW5lZCB7XG4gIGlmIChub2RlLnR5cGUgPT09ICdQcm9ncmFtJykge1xuICAgIHJldHVybiB7IGVuZDogbm9kZS5lbmQsIHNoYWRvd3NDb25zb2xlOiBoYXNQcm9ncmFtQ29uc29sZUJpbmRpbmcobm9kZSksIHN0YXJ0OiBub2RlLnN0YXJ0IH07XG4gIH1cbiAgaWYgKGlzQ29uc29sZUZ1bmN0aW9uU2NvcGVOb2RlKG5vZGUpKSB7XG4gICAgcmV0dXJuIHsgZW5kOiBub2RlLmVuZCwgc2hhZG93c0NvbnNvbGU6IGhhc0Z1bmN0aW9uQ29uc29sZUJpbmRpbmcobm9kZSksIHN0YXJ0OiBub2RlLnN0YXJ0IH07XG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgIGNvbnN0IGlzRnVuY3Rpb25Cb2R5ID0gcGFyZW50ID8gaXNDb25zb2xlRnVuY3Rpb25TY29wZU5vZGUocGFyZW50KSA6IGZhbHNlO1xuICAgIHJldHVybiB7IGVuZDogbm9kZS5lbmQsIHNoYWRvd3NDb25zb2xlOiBoYXNCbG9ja0NvbnNvbGVCaW5kaW5nKG5vZGUsIGZhbHNlKSB8fCAoaXNGdW5jdGlvbkJvZHkgJiYgaGFzSG9pc3RlZFZhckNvbnNvbGVCaW5kaW5nKG5vZGUpKSwgc3RhcnQ6IG5vZGUuc3RhcnQgfTtcbiAgfVxuICBpZiAobm9kZS50eXBlID09PSAnQ2F0Y2hDbGF1c2UnKSB7XG4gICAgcmV0dXJuIHsgZW5kOiBub2RlLmVuZCwgc2hhZG93c0NvbnNvbGU6IGhhc0NvbnNvbGVCaW5kaW5nUGF0dGVybihub2RlLnBhcmFtKSwgc3RhcnQ6IG5vZGUuc3RhcnQgfTtcbiAgfVxuICAvLyBBIG5hbWVzcGFjZSBib2R5IGhvbGRzIG9yZGluYXJ5IGRlY2xhcmF0aW9ucyB0b28sIHNvIGl0IHNjb3BlcyBhIGBjb25zb2xlYCBiaW5kaW5nIGxpa2UgYSBibG9jay5cbiAgLy8gT25seSB0aGUgbmFtZXNwYWNlJ3Mgb3duIG5hbWUgKGBuYW1lc3BhY2UgY29uc29sZSB7fWApIGlzIGRlbGliZXJhdGVseSBub3QgdHJlYXRlZCBhcyBhIGJpbmRpbmcuXG4gIGlmIChub2RlLnR5cGUgPT09ICdTdGF0aWNCbG9jaycgfHwgbm9kZS50eXBlID09PSAnVFNNb2R1bGVCbG9jaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW5kOiBub2RlLmVuZCxcbiAgICAgIHNoYWRvd3NDb25zb2xlOiBoYXNCbG9ja0NvbnNvbGVCaW5kaW5nKG5vZGUsIGZhbHNlKSB8fCBoYXNIb2lzdGVkVmFyQ29uc29sZUJpbmRpbmcobm9kZSksXG4gICAgICBzdGFydDogbm9kZS5zdGFydCxcbiAgICB9O1xuICB9XG4gIGlmIChub2RlLnR5cGUgPT09ICdGb3JTdGF0ZW1lbnQnIHx8IG5vZGUudHlwZSA9PT0gJ0ZvckluU3RhdGVtZW50JyB8fCBub2RlLnR5cGUgPT09ICdGb3JPZlN0YXRlbWVudCcpIHtcbiAgICByZXR1cm4geyBlbmQ6IG5vZGUuZW5kLCBzaGFkb3dzQ29uc29sZTogaGFzTG9vcENvbnNvbGVCaW5kaW5nKG5vZGUpLCBzdGFydDogbm9kZS5zdGFydCB9O1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhhc1Byb2dyYW1Db25zb2xlQmluZGluZyhub2RlOiBBc3ROb2RlKTogYm9vbGVhbiB7XG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIGdldEFzdEFycmF5UHJvcGVydHkobm9kZSwgJ2JvZHknKSkge1xuICAgIGlmIChoYXNEZWNsYXJhdGlvbkNvbnNvbGVCaW5kaW5nKHN0YXRlbWVudCwgdHJ1ZSkpIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBoYXNIb2lzdGVkVmFyQ29uc29sZUJpbmRpbmcobm9kZSk7XG59XG5cbmZ1bmN0aW9uIGhhc0Z1bmN0aW9uQ29uc29sZUJpbmRpbmcobm9kZTogQXN0Tm9kZSk6IGJvb2xlYW4ge1xuICBpZiAoaGFzQ29uc29sZUJpbmRpbmdQYXR0ZXJuKG5vZGUuaWQpKSByZXR1cm4gdHJ1ZTtcbiAgZm9yIChjb25zdCBwYXJhbSBvZiBnZXRBc3RBcnJheVByb3BlcnR5KG5vZGUsICdwYXJhbXMnKSkge1xuICAgIGlmIChoYXNDb25zb2xlQmluZGluZ1BhdHRlcm4ocGFyYW0pKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGhhc0Jsb2NrQ29uc29sZUJpbmRpbmcobm9kZTogQXN0Tm9kZSwgaW5jbHVkZVZhcjogYm9vbGVhbik6IGJvb2xlYW4ge1xuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBnZXRBc3RBcnJheVByb3BlcnR5KG5vZGUsICdib2R5JykpIHtcbiAgICBpZiAoaGFzRGVjbGFyYXRpb25Db25zb2xlQmluZGluZyhzdGF0ZW1lbnQsIGluY2x1ZGVWYXIpKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGhhc0xvb3BDb25zb2xlQmluZGluZyhub2RlOiBBc3ROb2RlKTogYm9vbGVhbiB7XG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gZ2V0QXN0Tm9kZVByb3BlcnR5KG5vZGUsIG5vZGUudHlwZSA9PT0gJ0ZvclN0YXRlbWVudCcgPyAnaW5pdCcgOiAnbGVmdCcpO1xuICByZXR1cm4gISFkZWNsYXJhdGlvbiAmJiBkZWNsYXJhdGlvbi50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicgJiYgZGVjbGFyYXRpb24ua2luZCAhPT0gJ3ZhcicgJiYgaGFzVmFyaWFibGVEZWNsYXJhdGlvbkNvbnNvbGVCaW5kaW5nKGRlY2xhcmF0aW9uKTtcbn1cblxuZnVuY3Rpb24gaGFzSG9pc3RlZFZhckNvbnNvbGVCaW5kaW5nKHJvb3Q6IEFzdE5vZGUgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgaWYgKCFyb290KSByZXR1cm4gZmFsc2U7XG5cbiAgZm9yIChjb25zdCBjaGlsZCBvZiBnZXRBc3ROb2RlQ2hpbGRyZW4ocm9vdCkpIHtcbiAgICBpZiAoXG4gICAgICBjaGlsZCAhPT0gcm9vdCAmJlxuICAgICAgKGlzQ29uc29sZUZ1bmN0aW9uU2NvcGVOb2RlKGNoaWxkKSB8fCBjaGlsZC50eXBlID09PSAnU3RhdGljQmxvY2snIHx8IGNoaWxkLnR5cGUgPT09ICdUU01vZHVsZUJsb2NrJylcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBjaGlsZC50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicgJiZcbiAgICAgIGNoaWxkLmtpbmQgPT09ICd2YXInICYmXG4gICAgICBoYXNWYXJpYWJsZURlY2xhcmF0aW9uQ29uc29sZUJpbmRpbmcoY2hpbGQpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGhhc0hvaXN0ZWRWYXJDb25zb2xlQmluZGluZyhjaGlsZCkpIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaGFzSW1wb3J0Q29uc29sZUJpbmRpbmcobm9kZTogQXN0Tm9kZSk6IGJvb2xlYW4ge1xuICBpZiAobm9kZS5pbXBvcnRLaW5kID09PSAndHlwZScpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGdldEFzdEFycmF5UHJvcGVydHkobm9kZSwgJ3NwZWNpZmllcnMnKS5zb21lKFxuICAgIChzcGVjaWZpZXIpID0+IHNwZWNpZmllci5pbXBvcnRLaW5kICE9PSAndHlwZScgJiYgaGFzQ29uc29sZUJpbmRpbmdQYXR0ZXJuKHNwZWNpZmllci5sb2NhbClcbiAgKTtcbn1cblxuZnVuY3Rpb24gaGFzRGVjbGFyYXRpb25Db25zb2xlQmluZGluZyhub2RlOiBBc3ROb2RlLCBpbmNsdWRlVmFyOiBib29sZWFuKTogYm9vbGVhbiB7XG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gZ2V0RXhwb3J0RGVjbGFyYXRpb24obm9kZSkgPz8gbm9kZTtcbiAgaWYgKGRlY2xhcmF0aW9uLmRlY2xhcmUgPT09IHRydWUpIHJldHVybiBmYWxzZTtcbiAgaWYgKGRlY2xhcmF0aW9uLnR5cGUgPT09ICdJbXBvcnREZWNsYXJhdGlvbicpIHJldHVybiBoYXNJbXBvcnRDb25zb2xlQmluZGluZyhkZWNsYXJhdGlvbik7XG4gIGlmIChkZWNsYXJhdGlvbi50eXBlID09PSAnRnVuY3Rpb25EZWNsYXJhdGlvbicgfHwgZGVjbGFyYXRpb24udHlwZSA9PT0gJ0NsYXNzRGVjbGFyYXRpb24nKSB7XG4gICAgcmV0dXJuIGhhc0NvbnNvbGVCaW5kaW5nUGF0dGVybihkZWNsYXJhdGlvbi5pZCk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICBkZWNsYXJhdGlvbi50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicgJiZcbiAgICAoaW5jbHVkZVZhciB8fCBkZWNsYXJhdGlvbi5raW5kICE9PSAndmFyJykgJiZcbiAgICBoYXNWYXJpYWJsZURlY2xhcmF0aW9uQ29uc29sZUJpbmRpbmcoZGVjbGFyYXRpb24pXG4gICk7XG59XG5cbmZ1bmN0aW9uIGhhc1ZhcmlhYmxlRGVjbGFyYXRpb25Db25zb2xlQmluZGluZyhub2RlOiBBc3ROb2RlKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRBc3RBcnJheVByb3BlcnR5KG5vZGUsICdkZWNsYXJhdGlvbnMnKS5zb21lKChkZWNsYXJhdGlvbikgPT5cbiAgICBoYXNDb25zb2xlQmluZGluZ1BhdHRlcm4oZ2V0QXN0Tm9kZVByb3BlcnR5KGRlY2xhcmF0aW9uLCAnaWQnKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gaGFzQ29uc29sZUJpbmRpbmdQYXR0ZXJuKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmICghaXNBc3ROb2RlKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmICh2YWx1ZS50eXBlID09PSAnSWRlbnRpZmllcicgJiYgdmFsdWUubmFtZSA9PT0gJ2NvbnNvbGUnKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHZhbHVlLnR5cGUgPT09ICdBc3NpZ25tZW50UGF0dGVybicgfHwgdmFsdWUudHlwZSA9PT0gJ1Jlc3RFbGVtZW50Jykge1xuICAgIHJldHVybiBoYXNDb25zb2xlQmluZGluZ1BhdHRlcm4odmFsdWUubGVmdCA/PyB2YWx1ZS5hcmd1bWVudCk7XG4gIH1cbiAgaWYgKHZhbHVlLnR5cGUgPT09ICdUU1BhcmFtZXRlclByb3BlcnR5Jykge1xuICAgIHJldHVybiBoYXNDb25zb2xlQmluZGluZ1BhdHRlcm4odmFsdWUucGFyYW1ldGVyKTtcbiAgfVxuICBpZiAodmFsdWUudHlwZSA9PT0gJ0FycmF5UGF0dGVybicpIHtcbiAgICByZXR1cm4gZ2V0QXN0QXJyYXlQcm9wZXJ0eSh2YWx1ZSwgJ2VsZW1lbnRzJykuc29tZSgoZWxlbWVudCkgPT4gaGFzQ29uc29sZUJpbmRpbmdQYXR0ZXJuKGVsZW1lbnQpKTtcbiAgfVxuICBpZiAodmFsdWUudHlwZSA9PT0gJ09iamVjdFBhdHRlcm4nKSB7XG4gICAgcmV0dXJuIGdldEFzdEFycmF5UHJvcGVydHkodmFsdWUsICdwcm9wZXJ0aWVzJykuc29tZSgocHJvcGVydHkpID0+XG4gICAgICBoYXNDb25zb2xlQmluZGluZ1BhdHRlcm4ocHJvcGVydHkudmFsdWUgPz8gcHJvcGVydHkuYXJndW1lbnQpXG4gICAgKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzQ29uc29sZUZ1bmN0aW9uU2NvcGVOb2RlKG5vZGU6IEFzdE5vZGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ0Z1bmN0aW9uRGVjbGFyYXRpb24nIHx8IG5vZGUudHlwZSA9PT0gJ0Z1bmN0aW9uRXhwcmVzc2lvbicgfHwgbm9kZS50eXBlID09PSAnQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24nO1xufVxuXG5mdW5jdGlvbiBpc0NvbnNvbGVTaGFkb3dlZChzY29wZXM6IENvbnNvbGVTY29wZVtdLCBub2RlOiBBc3ROb2RlKTogYm9vbGVhbiB7XG4gIHJldHVybiBzY29wZXMuc29tZSgoc2NvcGUpID0+IHNjb3BlLnNoYWRvd3NDb25zb2xlICYmIHNjb3BlLnN0YXJ0IDw9IG5vZGUuc3RhcnQgJiYgbm9kZS5lbmQgPD0gc2NvcGUuZW5kKTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdENvbnNvbGVDYWxsUmVwbGFjZW1lbnQoXG4gIG5vZGU6IEFzdE5vZGUsXG4gIGFuY2VzdG9yczogQXN0Tm9kZVtdLFxuICByZXBsYWNlbWVudHM6IENvbnNvbGVSZXBsYWNlbWVudFtdLFxuICBleGNsdWRlZE1ldGhvZHM6IFNldDxzdHJpbmc+XG4pOiB2b2lkIHtcbiAgY29uc3QgcGFyZW50ID0gYW5jZXN0b3JzLmF0KC0xKTtcbiAgY29uc3QgY2FsbGVlID0gZ2V0QXN0Tm9kZVByb3BlcnR5KG5vZGUsICdjYWxsZWUnKTtcbiAgaWYgKG5vZGUub3B0aW9uYWwgPT09IHRydWUpIHJldHVybjtcbiAgaWYgKCFjYWxsZWUgfHwgIWlzSW5jbHVkZWRDb25zb2xlTWVtYmVyKGNhbGxlZSwgZXhjbHVkZWRNZXRob2RzKSkge1xuICAgIGlmIChjYWxsZWUgJiYgaXNJbmNsdWRlZENvbnNvbGVCaW5kTWVtYmVyKGNhbGxlZSwgZXhjbHVkZWRNZXRob2RzKSkge1xuICAgICAgcmVwbGFjZW1lbnRzLnB1c2goeyBzdGFydDogbm9kZS5zdGFydCwgZW5kOiBub2RlLmVuZCwgdmFsdWU6IGdldE5vb3BGdW5jdGlvblJlcGxhY2VtZW50KG5vZGUsIGFuY2VzdG9ycykgfSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwYXJlbnQ/LnR5cGUgPT09ICdFeHByZXNzaW9uU3RhdGVtZW50Jykge1xuICAgIHJlcGxhY2VtZW50cy5wdXNoKHsgc3RhcnQ6IHBhcmVudC5zdGFydCwgZW5kOiBwYXJlbnQuZW5kLCB2YWx1ZTogJzsnIH0pO1xuICB9IGVsc2Uge1xuICAgIHJlcGxhY2VtZW50cy5wdXNoKHsgc3RhcnQ6IG5vZGUuc3RhcnQsIGVuZDogbm9kZS5lbmQsIHZhbHVlOiBnZXRVbmRlZmluZWRFeHByZXNzaW9uUmVwbGFjZW1lbnQobm9kZSwgYW5jZXN0b3JzKSB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb2xsZWN0Q29uc29sZU1lbWJlclJlcGxhY2VtZW50KFxuICBub2RlOiBBc3ROb2RlLFxuICBhbmNlc3RvcnM6IEFzdE5vZGVbXSxcbiAgcmVwbGFjZW1lbnRzOiBDb25zb2xlUmVwbGFjZW1lbnRbXSxcbiAgZXhjbHVkZWRNZXRob2RzOiBTZXQ8c3RyaW5nPlxuKTogdm9pZCB7XG4gIGNvbnN0IHBhcmVudCA9IGFuY2VzdG9ycy5hdCgtMSk7XG4gIGNvbnN0IGdyYW5kcGFyZW50ID0gYW5jZXN0b3JzLmF0KC0yKTtcbiAgaWYgKCFpc0luY2x1ZGVkQ29uc29sZU1lbWJlcihub2RlLCBleGNsdWRlZE1ldGhvZHMpIHx8IHBhcmVudD8udHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nKSByZXR1cm47XG4gIGlmIChwYXJlbnQ/LnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbicgJiYgcGFyZW50LmNhbGxlZSA9PT0gbm9kZSAmJiBwYXJlbnQub3B0aW9uYWwgIT09IHRydWUpIHJldHVybjtcbiAgaWYgKGlzQ29uc29sZUFzc2lnbm1lbnRUYXJnZXQobm9kZSwgcGFyZW50LCBncmFuZHBhcmVudCkpIHJldHVybjtcblxuICBpZiAocGFyZW50Py50eXBlID09PSAnQXNzaWdubWVudEV4cHJlc3Npb24nICYmIHBhcmVudC5sZWZ0ID09PSBub2RlKSB7XG4gICAgY29uc3QgcmlnaHQgPSBnZXRBc3ROb2RlUHJvcGVydHkocGFyZW50LCAncmlnaHQnKTtcbiAgICBpZiAocmlnaHQpIHtcbiAgICAgIHJlcGxhY2VtZW50cy5wdXNoKHsgc3RhcnQ6IHJpZ2h0LnN0YXJ0LCBlbmQ6IHJpZ2h0LmVuZCwgdmFsdWU6IGdldE5vb3BGdW5jdGlvblJlcGxhY2VtZW50KHJpZ2h0LCBhbmNlc3RvcnMpIH0pO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICByZXBsYWNlbWVudHMucHVzaCh7IHN0YXJ0OiBub2RlLnN0YXJ0LCBlbmQ6IG5vZGUuZW5kLCB2YWx1ZTogZ2V0Tm9vcEZ1bmN0aW9uUmVwbGFjZW1lbnQobm9kZSwgYW5jZXN0b3JzKSB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0VW5kZWZpbmVkRXhwcmVzc2lvblJlcGxhY2VtZW50KG5vZGU6IEFzdE5vZGUsIGFuY2VzdG9yczogQXN0Tm9kZVtdKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5lZWRzTGVhZGluZ1N0YXRlbWVudFNlbWljb2xvbihub2RlLCBhbmNlc3RvcnMpID8gYDske3VuZGVmaW5lZEV4cHJlc3Npb259YCA6IHVuZGVmaW5lZEV4cHJlc3Npb247XG59XG5cbmZ1bmN0aW9uIGdldE5vb3BGdW5jdGlvblJlcGxhY2VtZW50KG5vZGU6IEFzdE5vZGUsIGFuY2VzdG9yczogQXN0Tm9kZVtdKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5lZWRzTGVhZGluZ1N0YXRlbWVudFNlbWljb2xvbihub2RlLCBhbmNlc3RvcnMpID8gYDske25vb3BGdW5jdGlvbkV4cHJlc3Npb259YCA6IG5vb3BGdW5jdGlvbkV4cHJlc3Npb247XG59XG5cbmZ1bmN0aW9uIG5lZWRzTGVhZGluZ1N0YXRlbWVudFNlbWljb2xvbihub2RlOiBBc3ROb2RlLCBhbmNlc3RvcnM6IEFzdE5vZGVbXSk6IGJvb2xlYW4ge1xuICBjb25zdCBzdGF0ZW1lbnRJbmRleCA9IGFuY2VzdG9ycy5maW5kTGFzdEluZGV4KChhbmNlc3RvcikgPT4gYW5jZXN0b3IudHlwZSA9PT0gJ0V4cHJlc3Npb25TdGF0ZW1lbnQnKTtcbiAgaWYgKHN0YXRlbWVudEluZGV4IDwgMCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBzdGF0ZW1lbnQgPSBhbmNlc3RvcnNbc3RhdGVtZW50SW5kZXhdO1xuICBpZiAoIXN0YXRlbWVudCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBzdGF0ZW1lbnRQYXJlbnQgPSBhbmNlc3RvcnNbc3RhdGVtZW50SW5kZXggLSAxXTtcbiAgcmV0dXJuIHN0YXRlbWVudC5zdGFydCA9PT0gbm9kZS5zdGFydCAmJiBpc1N0YXRlbWVudExpc3ROb2RlKHN0YXRlbWVudFBhcmVudCk7XG59XG5cbmZ1bmN0aW9uIGlzU3RhdGVtZW50TGlzdE5vZGUobm9kZTogQXN0Tm9kZSB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAvLyBBIGBjYXNlYCBjbGF1c2UgYW5kIGEgbmFtZXNwYWNlIGJvZHkgYXJlIHN0YXRlbWVudCBsaXN0cyB0b286IGEgcmVwbGFjZW1lbnQgc3RhcnRpbmcgYSBzdGF0ZW1lbnRcbiAgLy8gdGhlcmUgc3RpbGwgbmVlZHMgdGhlIGxlYWRpbmcgc2VtaWNvbG9uIHRoYXQga2VlcHMgaXQgZnJvbSBiaW5kaW5nIHRvIHRoZSBwcmV2aW91cyBleHByZXNzaW9uLlxuICByZXR1cm4gKFxuICAgIG5vZGU/LnR5cGUgPT09ICdQcm9ncmFtJyB8fFxuICAgIG5vZGU/LnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcgfHxcbiAgICBub2RlPy50eXBlID09PSAnU3RhdGljQmxvY2snIHx8XG4gICAgbm9kZT8udHlwZSA9PT0gJ1N3aXRjaENhc2UnIHx8XG4gICAgbm9kZT8udHlwZSA9PT0gJ1RTTW9kdWxlQmxvY2snXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzQ29uc29sZUFzc2lnbm1lbnRUYXJnZXQoXG4gIG5vZGU6IEFzdE5vZGUsXG4gIHBhcmVudDogQXN0Tm9kZSB8IHVuZGVmaW5lZCxcbiAgZ3JhbmRwYXJlbnQ6IEFzdE5vZGUgfCB1bmRlZmluZWRcbik6IGJvb2xlYW4ge1xuICBpZiAocGFyZW50Py50eXBlID09PSAnVXBkYXRlRXhwcmVzc2lvbicgJiYgcGFyZW50LmFyZ3VtZW50ID09PSBub2RlKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKChwYXJlbnQ/LnR5cGUgPT09ICdGb3JJblN0YXRlbWVudCcgfHwgcGFyZW50Py50eXBlID09PSAnRm9yT2ZTdGF0ZW1lbnQnKSAmJiBwYXJlbnQubGVmdCA9PT0gbm9kZSkgcmV0dXJuIHRydWU7XG4gIGlmIChwYXJlbnQ/LnR5cGUgPT09ICdBcnJheVBhdHRlcm4nKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHBhcmVudD8udHlwZSA9PT0gJ0Fzc2lnbm1lbnRQYXR0ZXJuJyAmJiBwYXJlbnQubGVmdCA9PT0gbm9kZSkgcmV0dXJuIHRydWU7XG4gIHJldHVybiBwYXJlbnQ/LnR5cGUgPT09ICdQcm9wZXJ0eScgJiYgcGFyZW50LnZhbHVlID09PSBub2RlICYmIGdyYW5kcGFyZW50Py50eXBlID09PSAnT2JqZWN0UGF0dGVybic7XG59XG5cbmZ1bmN0aW9uIGlzSW5jbHVkZWRDb25zb2xlTWVtYmVyKG5vZGU6IEFzdE5vZGUsIGV4Y2x1ZGVkTWV0aG9kczogU2V0PHN0cmluZz4pOiBib29sZWFuIHtcbiAgaWYgKG5vZGUudHlwZSAhPT0gJ01lbWJlckV4cHJlc3Npb24nKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3Qgb2JqZWN0ID0gZ2V0QXN0Tm9kZVByb3BlcnR5KG5vZGUsICdvYmplY3QnKTtcbiAgY29uc3QgcHJvcGVydHkgPSBnZXRBc3ROb2RlUHJvcGVydHkobm9kZSwgJ3Byb3BlcnR5Jyk7XG4gIGlmIChub2RlLm9wdGlvbmFsID09PSB0cnVlKSByZXR1cm4gZmFsc2U7XG4gIGlmICghb2JqZWN0IHx8ICFwcm9wZXJ0eSB8fCBpc0V4Y2x1ZGVkQ29uc29sZVByb3BlcnR5KG5vZGUsIHByb3BlcnR5LCBleGNsdWRlZE1ldGhvZHMpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChpc0dsb2JhbENvbnNvbGVJZGVudGlmaWVyKG9iamVjdCkpIHJldHVybiB0cnVlO1xuXG4gIHJldHVybiAoXG4gICAgb2JqZWN0LnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJyAmJlxuICAgIGlzR2xvYmFsQ29uc29sZUlkZW50aWZpZXIoZ2V0QXN0Tm9kZVByb3BlcnR5KG9iamVjdCwgJ29iamVjdCcpKSAmJlxuICAgIC8vIE1hdGNoZXMgYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1yZW1vdmUtY29uc29sZTogY2FsbC9hcHBseSBleGNsdXNpb25zIGFyZSBjaGVja2VkIG9uIHRoZSBvdXRlciBwcm9wZXJ0eSBvbmx5LlxuICAgIG5vZGUuY29tcHV0ZWQgIT09IHRydWUgJiZcbiAgICBwcm9wZXJ0eS50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAocHJvcGVydHkubmFtZSA9PT0gJ2NhbGwnIHx8IHByb3BlcnR5Lm5hbWUgPT09ICdhcHBseScpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzSW5jbHVkZWRDb25zb2xlQmluZE1lbWJlcihub2RlOiBBc3ROb2RlLCBleGNsdWRlZE1ldGhvZHM6IFNldDxzdHJpbmc+KTogYm9vbGVhbiB7XG4gIGlmIChub2RlLnR5cGUgIT09ICdNZW1iZXJFeHByZXNzaW9uJykgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IG9iamVjdCA9IGdldEFzdE5vZGVQcm9wZXJ0eShub2RlLCAnb2JqZWN0Jyk7XG4gIGNvbnN0IHByb3BlcnR5ID0gZ2V0QXN0Tm9kZVByb3BlcnR5KG5vZGUsICdwcm9wZXJ0eScpO1xuICBpZiAoIW9iamVjdCB8fCAhcHJvcGVydHkgfHwgb2JqZWN0LnR5cGUgIT09ICdNZW1iZXJFeHByZXNzaW9uJykgcmV0dXJuIGZhbHNlO1xuICBpZiAobm9kZS5jb21wdXRlZCA9PT0gdHJ1ZSB8fCBwcm9wZXJ0eS50eXBlICE9PSAnSWRlbnRpZmllcicgfHwgcHJvcGVydHkubmFtZSAhPT0gJ2JpbmQnKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNHbG9iYWxDb25zb2xlSWRlbnRpZmllcihnZXRBc3ROb2RlUHJvcGVydHkob2JqZWN0LCAnb2JqZWN0JykpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGNvbnNvbGVNZXRob2QgPSBnZXRBc3ROb2RlUHJvcGVydHkob2JqZWN0LCAncHJvcGVydHknKTtcbiAgcmV0dXJuICEhY29uc29sZU1ldGhvZCAmJiAhaXNFeGNsdWRlZENvbnNvbGVQcm9wZXJ0eShvYmplY3QsIGNvbnNvbGVNZXRob2QsIGV4Y2x1ZGVkTWV0aG9kcyk7XG59XG5cbmZ1bmN0aW9uIGlzRXhjbHVkZWRDb25zb2xlUHJvcGVydHkoXG4gIG1lbWJlckV4cHJlc3Npb246IEFzdE5vZGUsXG4gIHByb3BlcnR5OiBBc3ROb2RlLFxuICBleGNsdWRlZE1ldGhvZHM6IFNldDxzdHJpbmc+XG4pOiBib29sZWFuIHtcbiAgLy8gVGhlIHJlc3RvcmVkIGJlaGF2aW9yIG1hdGNoZXMgYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1yZW1vdmUtY29uc29sZSwgd2hvc2UgZXhjbHVzaW9ucyBvbmx5IGFwcGx5IHRvIGlkZW50aWZpZXIgcHJvcGVydGllcy5cbiAgcmV0dXJuIG1lbWJlckV4cHJlc3Npb24uY29tcHV0ZWQgIT09IHRydWUgJiYgcHJvcGVydHkudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmIGV4Y2x1ZGVkTWV0aG9kcy5oYXMocHJvcGVydHkubmFtZSBhcyBzdHJpbmcpO1xufVxuXG5mdW5jdGlvbiBpc0dsb2JhbENvbnNvbGVJZGVudGlmaWVyKG5vZGU6IEFzdE5vZGUgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG5vZGU/LnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJiBub2RlLm5hbWUgPT09ICdjb25zb2xlJztcbn1cblxuZnVuY3Rpb24gc2VsZWN0Q29uc29sZVJlcGxhY2VtZW50cyhyZXBsYWNlbWVudHM6IENvbnNvbGVSZXBsYWNlbWVudFtdKTogQ29uc29sZVJlcGxhY2VtZW50W10ge1xuICBjb25zdCBzZWxlY3RlZDogQ29uc29sZVJlcGxhY2VtZW50W10gPSBbXTtcbiAgZm9yIChjb25zdCByZXBsYWNlbWVudCBvZiByZXBsYWNlbWVudHMudG9Tb3J0ZWQoKGEsIGIpID0+IGEuc3RhcnQgLSBiLnN0YXJ0IHx8IGIuZW5kIC0gYS5lbmQpKSB7XG4gICAgaWYgKHNlbGVjdGVkLnNvbWUoKGl0ZW0pID0+IGl0ZW0uc3RhcnQgPD0gcmVwbGFjZW1lbnQuc3RhcnQgJiYgcmVwbGFjZW1lbnQuZW5kIDw9IGl0ZW0uZW5kKSkgY29udGludWU7XG4gICAgc2VsZWN0ZWQucHVzaChyZXBsYWNlbWVudCk7XG4gIH1cbiAgcmV0dXJuIHNlbGVjdGVkLnRvU29ydGVkKChhLCBiKSA9PiBiLnN0YXJ0IC0gYS5zdGFydCk7XG59XG5cbmZ1bmN0aW9uIGdldEV4cG9ydERlY2xhcmF0aW9uKG5vZGU6IEFzdE5vZGUpOiBBc3ROb2RlIHwgdW5kZWZpbmVkIHtcbiAgaWYgKG5vZGUudHlwZSAhPT0gJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nICYmIG5vZGUudHlwZSAhPT0gJ0V4cG9ydERlZmF1bHREZWNsYXJhdGlvbicpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBnZXRBc3ROb2RlUHJvcGVydHkobm9kZSwgJ2RlY2xhcmF0aW9uJyk7XG59XG4iLCJpbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgdHlwZSB7IElucHV0T3B0aW9ucyB9IGZyb20gJ0BiYWJlbC9jb3JlJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luLCBSb2xsZG93blBsdWdpbk9wdGlvbiwgU291cmNlTWFwSW5wdXQgfSBmcm9tICdyb2xsZG93bic7XG5cbmltcG9ydCB7IGdldEJ1aWxkVHNSb290UGF0aCB9IGZyb20gJy4uLy4uL3V0aWxzLmpzJztcblxuaW1wb3J0IHsgY29udGFpbnNEZWNvcmF0b3IgfSBmcm9tICcuL2RlY29yYXRvckRldGVjdGlvbi5qcyc7XG5pbXBvcnQgeyBnZXRDb25zb2xlUmVtb3ZhbEV4Y2x1ZGVkTWV0aG9kcywgcmVtb3ZlQ29uc29sZVBsdWdpbiB9IGZyb20gJy4vcmVtb3ZlQ29uc29sZVBsdWdpbi5qcyc7XG5pbXBvcnQgeyBpc1RyYW5zZm9ybVRhcmdldEZpbGUgfSBmcm9tICcuL3RyYW5zZm9ybVV0aWxzLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwUGx1Z2lucygpOiBSb2xsZG93blBsdWdpbk9wdGlvbltdIHtcbiAgY29uc3QgcGx1Z2luczogUm9sbGRvd25QbHVnaW5PcHRpb25bXSA9IFtdO1xuICBjb25zdCBleGNsdWRlZENvbnNvbGVNZXRob2RzID0gZ2V0Q29uc29sZVJlbW92YWxFeGNsdWRlZE1ldGhvZHMoKTtcbiAgaWYgKGV4Y2x1ZGVkQ29uc29sZU1ldGhvZHMpIHtcbiAgICBwbHVnaW5zLnB1c2gocmVtb3ZlQ29uc29sZVBsdWdpbihleGNsdWRlZENvbnNvbGVNZXRob2RzKSk7XG4gIH1cbiAgcGx1Z2lucy5wdXNoKGJhYmVsRGVjb3JhdG9yc1BsdWdpbigpLCB0ZXh0UGx1Z2luKCkpO1xuICByZXR1cm4gcGx1Z2lucztcbn1cblxuZnVuY3Rpb24gYmFiZWxEZWNvcmF0b3JzUGx1Z2luKCk6IFBsdWdpbiB7XG4gIGNvbnN0IGJhYmVsQ29uZmlnUGF0aCA9IHBhdGguam9pbihnZXRCdWlsZFRzUm9vdFBhdGgoKSwgJ2JhYmVsLmNvbmZpZy5tanMnKTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnYmFiZWwtZGVjb3JhdG9ycycsXG4gICAgYXN5bmMgdHJhbnNmb3JtKGNvZGUsIGlkKSB7XG4gICAgICBpZiAoIWlzVHJhbnNmb3JtVGFyZ2V0RmlsZShpZCkgfHwgIWNvbnRhaW5zRGVjb3JhdG9yKGNvZGUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgdHJhbnNmb3JtQXN5bmMgfSA9IGF3YWl0IGltcG9ydCgnQGJhYmVsL2NvcmUnKTtcbiAgICAgIGNvbnN0IG9wdGlvbnM6IElucHV0T3B0aW9ucyA9IHtcbiAgICAgICAgY2FsbGVyOiB7XG4gICAgICAgICAgbmFtZTogJ2J1aWxkLXRzJyxcbiAgICAgICAgICBzdXBwb3J0c0R5bmFtaWNJbXBvcnQ6IHRydWUsXG4gICAgICAgICAgc3VwcG9ydHNFeHBvcnROYW1lc3BhY2VGcm9tOiB0cnVlLFxuICAgICAgICAgIHN1cHBvcnRzU3RhdGljRVNNOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBjb25maWdGaWxlOiBiYWJlbENvbmZpZ1BhdGgsXG4gICAgICAgIGZpbGVuYW1lOiBpZCxcbiAgICAgICAgc291cmNlTWFwczogdHJ1ZSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cmFuc2Zvcm1Bc3luYyhjb2RlLCBvcHRpb25zKTtcbiAgICAgIGlmICghcmVzdWx0Py5jb2RlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2RlOiByZXN1bHQuY29kZSxcbiAgICAgICAgbWFwOiByZXN1bHQubWFwIGFzIFNvdXJjZU1hcElucHV0LFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0UGx1Z2luKCk6IFBsdWdpbiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3RleHQnLFxuICAgIGFzeW5jIGxvYWQoaWQpIHtcbiAgICAgIGlmICghaWQuZW5kc1dpdGgoJy5jc3YnKSAmJiAhaWQuZW5kc1dpdGgoJy50eHQnKSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKGlkLCAndXRmOCcpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29kZTogYGV4cG9ydCBkZWZhdWx0ICR7SlNPTi5zdHJpbmdpZnkoY29udGVudCl9O2AsXG4gICAgICAgIG1vZHVsZVR5cGU6ICdqcycsXG4gICAgICB9O1xuICAgIH0sXG4gIH07XG59XG4iLCJpbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSAnbm9kZTptb2R1bGUnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHR5cGUgeyBBcmd1bWVudHNUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMuanMnO1xuXG5pbXBvcnQgdHlwZSB7IEFueUJ1aWxkZXJUeXBlIH0gZnJvbSAnLi9idWlsZGVyLmpzJztcblxuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlRGVjbGFyYXRpb25GaWxlcyhcbiAgYXJndjogQXJndW1lbnRzVHlwZTxBbnlCdWlsZGVyVHlwZT4sXG4gIGNvcmVQcm9qZWN0RGlyUGF0aDogc3RyaW5nLFxuICBvdXREaXJQYXRoOiBzdHJpbmcsXG4gIGlucHV0cz86IHN0cmluZ1tdXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgY29yZUNvbmZpZ0ZpbGUgPSBmaW5kQ29uZmlnRmlsZShjb3JlUHJvamVjdERpclBhdGgpO1xuICBpZiAoIWNvcmVDb25maWdGaWxlKSB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBmaW5kIHRzY29uZmlnLmpzb24gaW4gJHtjb3JlUHJvamVjdERpclBhdGh9LmApO1xuICBpZiAoYXJndi52ZXJib3NlKSB7XG4gICAgY29uc29sZS5pbmZvKCdGb3VuZCB0c2NvbmZpZy5qc29uOicsIGNvcmVDb25maWdGaWxlKTtcbiAgfVxuXG4gIGNvbnN0IHByb2plY3RzOiBbc3RyaW5nLCBzdHJpbmcsIHN0cmluZywgc3RyaW5nW10gfCB1bmRlZmluZWRdW10gPSBbXTtcbiAgbGV0IGNvcmVPdXREaXIgPSBwYXRoLmpvaW4ob3V0RGlyUGF0aCwgcGF0aC5iYXNlbmFtZShjb3JlUHJvamVjdERpclBhdGgpLCAnc3JjJyk7XG4gIGlmIChmcy5leGlzdHNTeW5jKGNvcmVPdXREaXIpKSB7XG4gICAgLy8gVGhlIGJ1bmRsZXIgZW1pdHRlZCBwZXItcHJvamVjdCBkaXJlY3RvcmllcyAobW9ub3JlcG8gYnVpbGQpLCBzbyBlbnRyeS1iYXNlZCByZXN0cmljdGlvbiBpcyB1bnNhZmU6XG4gICAgLy8gZW50cmllcyBtYXkgaW1wb3J0IGZpbGVzIG91dHNpZGUgZWFjaCBwcm9qZWN0J3Mgcm9vdERpci5cbiAgICBpbnB1dHMgPSB1bmRlZmluZWQ7XG4gICAgY29uc3QgcGFyZW50RGlyUGF0aCA9IHBhdGguZGlybmFtZShjb3JlUHJvamVjdERpclBhdGgpO1xuICAgIGNvbnN0IGRpcmVudHMgPSBhd2FpdCBmcy5wcm9taXNlcy5yZWFkZGlyKHBhcmVudERpclBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgICBjb3JlUHJvamVjdERpclBhdGggPSBwYXRoLnJlc29sdmUoY29yZVByb2plY3REaXJQYXRoKTtcbiAgICBmb3IgKGNvbnN0IGRpcmVudCBvZiBkaXJlbnRzKSB7XG4gICAgICBpZiAoIWRpcmVudC5pc0RpcmVjdG9yeSgpKSBjb250aW51ZTtcblxuICAgICAgY29uc3QgcHJvamVjdERpclBhdGggPSBwYXRoLnJlc29sdmUocGFyZW50RGlyUGF0aCwgZGlyZW50Lm5hbWUpO1xuICAgICAgaWYgKHByb2plY3REaXJQYXRoID09PSBjb3JlUHJvamVjdERpclBhdGgpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBjb25maWdGaWxlID0gZmluZENvbmZpZ0ZpbGUocHJvamVjdERpclBhdGgpO1xuICAgICAgY29uc3Qgb3V0RGlyID0gcGF0aC5qb2luKG91dERpclBhdGgsIGRpcmVudC5uYW1lLCAnc3JjJyk7XG4gICAgICBpZiAoY29uZmlnRmlsZSAmJiBmcy5leGlzdHNTeW5jKG91dERpcikpIHtcbiAgICAgICAgcHJvamVjdHMucHVzaChbcHJvamVjdERpclBhdGgsIGNvbmZpZ0ZpbGUsIG91dERpciwgdW5kZWZpbmVkXSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvcmVPdXREaXIgPSBvdXREaXJQYXRoO1xuICB9XG4gIHByb2plY3RzLnB1c2goW2NvcmVQcm9qZWN0RGlyUGF0aCwgY29yZUNvbmZpZ0ZpbGUsIGNvcmVPdXREaXIsIGlucHV0c10pO1xuXG4gIGxldCBhbGxTdWNjZWVkZWQgPSB0cnVlO1xuICBmb3IgKGNvbnN0IFtwcm9qZWN0RGlyUGF0aCwgY29uZmlnRmlsZSwgb3V0RGlyLCBwcm9qZWN0SW5wdXRzXSBvZiBwcm9qZWN0cykge1xuICAgIGFsbFN1Y2NlZWRlZCAmJj0gYXdhaXQgcnVuVHNnbyhhcmd2LCBwcm9qZWN0RGlyUGF0aCwgY29uZmlnRmlsZSwgb3V0RGlyLCBwcm9qZWN0SW5wdXRzKTtcbiAgfVxuICByZXR1cm4gYWxsU3VjY2VlZGVkO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5Uc2dvKFxuICBhcmd2OiBBcmd1bWVudHNUeXBlPEFueUJ1aWxkZXJUeXBlPixcbiAgcHJvamVjdERpclBhdGg6IHN0cmluZyxcbiAgY29uZmlnRmlsZTogc3RyaW5nLFxuICBvdXREaXI6IHN0cmluZyxcbiAgaW5wdXRzPzogc3RyaW5nW11cbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoYXJndi52ZXJib3NlKSB7XG4gICAgY29uc29sZS5pbmZvKCdydW5Uc2dvKCknLCBwcm9qZWN0RGlyUGF0aCwgY29uZmlnRmlsZSwgb3V0RGlyLCBpbnB1dHMpO1xuICB9XG5cbiAgLy8gVGhlIHRlbXBvcmFyeSBjb25maWcgbXVzdCBsaXZlIGluIHRoZSBwcm9qZWN0IGRpcmVjdG9yeSBzbyB0aGF0IGl0cyByZWxhdGl2ZSBgcm9vdERpcmAgYW5kXG4gIC8vIGBpbmNsdWRlYCByZXNvbHZlIGFnYWluc3QgdGhlIHByb2plY3QgZXZlbiB3aGVuIHRoZSBleHRlbmRlZCB0c2NvbmZpZyBpcyBpbiBhbiBhbmNlc3RvciBkaXJlY3RvcnkuXG4gIGNvbnN0IHRlbXBDb25maWdGaWxlID0gcGF0aC5qb2luKHByb2plY3REaXJQYXRoLCBgLmJ1aWxkLXRzLXRzZ28uJHtwcm9jZXNzLnBpZH0uanNvbmApO1xuICB0cnkge1xuICAgIGF3YWl0IGZzLnByb21pc2VzLndyaXRlRmlsZShcbiAgICAgIHRlbXBDb25maWdGaWxlLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoYXdhaXQgY3JlYXRlVHlwZVNjcmlwdE5hdGl2ZUNvbmZpZyhwcm9qZWN0RGlyUGF0aCwgY29uZmlnRmlsZSwgb3V0RGlyLCBpbnB1dHMpLCB1bmRlZmluZWQsIDIpXG4gICAgKTtcbiAgICBjb25zdCByZXQgPSBjaGlsZF9wcm9jZXNzLnNwYXduU3luYyhwcm9jZXNzLmV4ZWNQYXRoLCBbZ2V0VHNnb1BhdGgoKSwgJy1wJywgdGVtcENvbmZpZ0ZpbGVdLCB7XG4gICAgICBjd2Q6IHByb2plY3REaXJQYXRoLFxuICAgICAgc3RkaW86ICdpbmhlcml0JyxcbiAgICB9KTtcbiAgICBpZiAocmV0LmVycm9yKSB0aHJvdyByZXQuZXJyb3I7XG4gICAgcmV0dXJuIHJldC5zdGF0dXMgPT09IDA7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucHJvbWlzZXMucm0odGVtcENvbmZpZ0ZpbGUsIHsgZm9yY2U6IHRydWUgfSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVHlwZVNjcmlwdE5hdGl2ZUNvbmZpZyhcbiAgcHJvamVjdERpclBhdGg6IHN0cmluZyxcbiAgY29uZmlnRmlsZTogc3RyaW5nLFxuICBvdXREaXI6IHN0cmluZyxcbiAgaW5wdXRzPzogc3RyaW5nW11cbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgY29uc3QgY29tcGlsZXJPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAvLyBBbiBpbmhlcml0ZWQgYGNvbXBvc2l0ZWAgd291bGQgcmVxdWlyZSBsaXN0aW5nIGV2ZXJ5IGltcG9ydGVkIGZpbGUgZXhwbGljaXRseSAoVFM2MzA3KSBhbmQsXG4gICAgLy8gbGlrZSBgaW5jcmVtZW50YWxgLCB3b3VsZCB3cml0ZSBuZWVkbGVzcyAudHNidWlsZGluZm8gZmlsZXMgZm9yIHRoaXMgb25lLXNob3QgY29tcGlsYXRpb24uXG4gICAgY29tcG9zaXRlOiBmYWxzZSxcbiAgICBkZWNsYXJhdGlvbjogdHJ1ZSxcbiAgICAvLyBBbiBpbmhlcml0ZWQgYGRlY2xhcmF0aW9uRGlyYCB3b3VsZCBzaWxlbnRseSByZWRpcmVjdCB0aGUgb3V0cHV0IGF3YXkgZnJvbSBgb3V0RGlyYC5cbiAgICBkZWNsYXJhdGlvbkRpcjogb3V0RGlyLFxuICAgIGVtaXREZWNsYXJhdGlvbk9ubHk6IHRydWUsXG4gICAgaW5jcmVtZW50YWw6IGZhbHNlLFxuICAgIG5vRW1pdDogZmFsc2UsXG4gICAgbm9FbWl0T25FcnJvcjogdHJ1ZSxcbiAgICBvdXREaXIsXG4gICAgLy8gVHlwZVNjcmlwdCA3IHJlcXVpcmVzIGFuIGV4cGxpY2l0IGByb290RGlyYCAoVFM1MDExKS4gRW50cmllcyBpbXBvcnRpbmcgZmlsZXMgb3V0c2lkZSBzcmMvXG4gICAgLy8gKGUuZy4gc2libGluZyBwYWNrYWdlcyBpbiBkZWNsYXJhdGlvbi1vbmx5IG1vZGUpIGZhaWwgd2l0aCBUUzYwNTk7IHNlZSB0aGUgUkVBRE1FIGxpbWl0YXRpb24uXG4gICAgcm9vdERpcjogJ3NyYycsXG4gIH07XG4gIGlmIChhd2FpdCB1c2VzTm9kZVByb3RvY29sSW1wb3J0KHBhdGguam9pbihwcm9qZWN0RGlyUGF0aCwgJ3NyYycpKSkge1xuICAgIGNvbnN0IHR5cGVzRGlyUGF0aCA9IGZpbmRUeXBlc0RpclBhdGgocHJvamVjdERpclBhdGgpO1xuICAgIGNvbnN0IHR5cGVzID0gdHlwZXNEaXJQYXRoID8gYXdhaXQgY29sbGVjdFR5cGVQYWNrYWdlcyh0eXBlc0RpclBhdGgpIDogW107XG4gICAgaWYgKHR5cGVzLmluY2x1ZGVzKCdub2RlJykpIHtcbiAgICAgIGNvbXBpbGVyT3B0aW9ucy50eXBlcyA9IHR5cGVzO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGNvbXBpbGVyT3B0aW9ucyxcbiAgICBleHRlbmRzOiB0b1JlbGF0aXZlQ29uZmlnUGF0aChwcm9qZWN0RGlyUGF0aCwgY29uZmlnRmlsZSksXG4gICAgLy8gV2l0aCBgZmlsZXNgLCB0c2MgYWxzbyBlbWl0cyBkZWNsYXJhdGlvbnMgZm9yIGZpbGVzIHRyYW5zaXRpdmVseSBpbXBvcnRlZCBmcm9tIHRoZSBlbnRyaWVzLFxuICAgIC8vIHNvIHRoZSBvdXRwdXQgaXMgcmVzdHJpY3RlZCB0byB3aGF0IHRoZSBidW5kbGVkIEphdmFTY3JpcHQgYWN0dWFsbHkgY29udGFpbnMuIGBpbmNsdWRlYCBtdXN0IGJlXG4gICAgLy8gb3ZlcnJpZGRlbiBzaW5jZSBhbiBpbmhlcml0ZWQgYGluY2x1ZGVgIHdvdWxkIGFkZCBmaWxlcyBiYWNrIHRvIHRoZSBwcm9ncmFtOyBvbmx5IGFtYmllbnRcbiAgICAvLyBkZWNsYXJhdGlvbiBmaWxlcyBhcmUga2VwdCBiZWNhdXNlIGVudHJpZXMgbWF5IHJlbHkgb24gdGhlaXIgZ2xvYmFsIHR5cGVzIHdpdGhvdXQgaW1wb3J0aW5nIHRoZW0uXG4gICAgLi4uKGlucHV0cz8ubGVuZ3RoXG4gICAgICA/IHtcbiAgICAgICAgICBleGNsdWRlOiBbXSxcbiAgICAgICAgICBmaWxlczogaW5wdXRzLm1hcCgoaW5wdXQpID0+IHBhdGgucmVzb2x2ZShwcm9qZWN0RGlyUGF0aCwgaW5wdXQpLnJlcGxhY2VBbGwocGF0aC5zZXAsICcvJykpLFxuICAgICAgICAgIGluY2x1ZGU6IFsnc3JjLyoqLyouZC50cycsICdzcmMvKiovKi5kLm10cycsICdzcmMvKiovKi5kLmN0cyddLFxuICAgICAgICB9XG4gICAgICA6IHsgaW5jbHVkZTogWydzcmMvKiovKiddIH0pLFxuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5kQ29uZmlnRmlsZShkaXJQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBsZXQgY3VycmVudERpclBhdGggPSBwYXRoLnJlc29sdmUoZGlyUGF0aCk7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgY29uZmlnRmlsZSA9IHBhdGguam9pbihjdXJyZW50RGlyUGF0aCwgJ3RzY29uZmlnLmpzb24nKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhjb25maWdGaWxlKSkgcmV0dXJuIGNvbmZpZ0ZpbGU7XG5cbiAgICBjb25zdCBwYXJlbnREaXJQYXRoID0gcGF0aC5kaXJuYW1lKGN1cnJlbnREaXJQYXRoKTtcbiAgICBpZiAocGFyZW50RGlyUGF0aCA9PT0gY3VycmVudERpclBhdGgpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY3VycmVudERpclBhdGggPSBwYXJlbnREaXJQYXRoO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRzZ29QYXRoKCk6IHN0cmluZyB7XG4gIC8vIFR5cGVTY3JpcHQgNyBzaGlwcyB0aGUgbmF0aXZlIGNvbXBpbGVyIChmb3JtZXJseSBgQHR5cGVzY3JpcHQvbmF0aXZlLXByZXZpZXdgKSBhc1xuICAvLyB0aGUgYHR5cGVzY3JpcHRgIHBhY2thZ2UsIHdob3NlIGBsaWIvdHNjLmpzYCB3cmFwcGVyIHNwYXducyB0aGUgcGxhdGZvcm0gYmluYXJ5LlxuICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSByZXF1aXJlLnJlc29sdmUoJ3R5cGVzY3JpcHQvcGFja2FnZS5qc29uJyk7XG4gIHJldHVybiBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKHBhY2thZ2VKc29uUGF0aCksICdsaWInLCAndHNjLmpzJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVzZXNOb2RlUHJvdG9jb2xJbXBvcnQoZGlyUGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZGlyZW50cyA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRkaXIoZGlyUGF0aCwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuICAgIGZvciAoY29uc3QgZGlyZW50IG9mIGRpcmVudHMpIHtcbiAgICAgIGNvbnN0IGNoaWxkUGF0aCA9IHBhdGguam9pbihkaXJQYXRoLCBkaXJlbnQubmFtZSk7XG4gICAgICBpZiAoZGlyZW50LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgaWYgKGF3YWl0IHVzZXNOb2RlUHJvdG9jb2xJbXBvcnQoY2hpbGRQYXRoKSkgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKC9cXC5bY21dP3RzeD8kLy50ZXN0KGRpcmVudC5uYW1lKSAmJiAoYXdhaXQgZnMucHJvbWlzZXMucmVhZEZpbGUoY2hpbGRQYXRoLCAndXRmOCcpKS5pbmNsdWRlcygnbm9kZTonKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGZpbmRUeXBlc0RpclBhdGgoZGlyUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgbGV0IGN1cnJlbnREaXJQYXRoID0gcGF0aC5yZXNvbHZlKGRpclBhdGgpO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHR5cGVzRGlyUGF0aCA9IHBhdGguam9pbihjdXJyZW50RGlyUGF0aCwgJ25vZGVfbW9kdWxlcycsICdAdHlwZXMnKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyh0eXBlc0RpclBhdGgpKSByZXR1cm4gdHlwZXNEaXJQYXRoO1xuXG4gICAgY29uc3QgcGFyZW50RGlyUGF0aCA9IHBhdGguZGlybmFtZShjdXJyZW50RGlyUGF0aCk7XG4gICAgaWYgKHBhcmVudERpclBhdGggPT09IGN1cnJlbnREaXJQYXRoKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGN1cnJlbnREaXJQYXRoID0gcGFyZW50RGlyUGF0aDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0VHlwZVBhY2thZ2VzKHR5cGVSb290c0RpclBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkaXJlbnRzID0gYXdhaXQgZnMucHJvbWlzZXMucmVhZGRpcih0eXBlUm9vdHNEaXJQYXRoLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gICAgcmV0dXJuIGRpcmVudHMuZmlsdGVyKChkaXJlbnQpID0+IGRpcmVudC5pc0RpcmVjdG9yeSgpKS5tYXAoKGRpcmVudCkgPT4gZGlyZW50Lm5hbWUpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuLy8gYHRvRmlsZVBhdGhgIGlzIGFsd2F5cyBhIHRzY29uZmlnIGluIGBmcm9tRGlyUGF0aGAgb3Igb25lIG9mIGl0cyBhbmNlc3RvciBkaXJlY3Rvcmllcywgc28gdGhlXG4vLyByZXN1bHQgaXMgYWx3YXlzIHJlbGF0aXZlIChgLi9gIG9yIGAuLi9gIGNoYWlucyk7IGEgY3Jvc3MtZHJpdmUgYWJzb2x1dGUgcmVzdWx0IGlzIGltcG9zc2libGUuXG5mdW5jdGlvbiB0b1JlbGF0aXZlQ29uZmlnUGF0aChmcm9tRGlyUGF0aDogc3RyaW5nLCB0b0ZpbGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKGZyb21EaXJQYXRoLCB0b0ZpbGVQYXRoKS5yZXBsYWNlQWxsKHBhdGguc2VwLCAnLycpO1xuICByZXR1cm4gcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4nKSA/IHJlbGF0aXZlUGF0aCA6IGAuLyR7cmVsYXRpdmVQYXRofWA7XG59XG4iLCJpbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgc3R5bGVUZXh0IH0gZnJvbSAnbm9kZTp1dGlsJztcblxuaW1wb3J0IHsgcm9sbGRvd24sIHdhdGNoIH0gZnJvbSAncm9sbGRvd24nO1xuaW1wb3J0IHR5cGUgeyBPdXRwdXRPcHRpb25zLCBSb2xsZG93bkJ1aWxkLCBSb2xsZG93bk9wdGlvbnMgfSBmcm9tICdyb2xsZG93bic7XG5pbXBvcnQgeyBvbkV4aXQgfSBmcm9tICdzaWduYWwtZXhpdCc7XG5pbXBvcnQgdHlwZSB7IFBhY2thZ2VKc29uIH0gZnJvbSAndHlwZS1mZXN0JztcbmltcG9ydCB0eXBlIHsgQ29tbWFuZE1vZHVsZSB9IGZyb20gJ3lhcmdzJztcblxuaW1wb3J0IHsgY3JlYXRlRW52aXJvbm1lbnRWYXJpYWJsZXNEZWZpbml0aW9uLCBsb2FkRW52aXJvbm1lbnRWYXJpYWJsZXNXaXRoQ2FjaGUgfSBmcm9tICcuLi8uLi9lbnYuanMnO1xuaW1wb3J0IHR5cGUgeyBBcmd1bWVudHNUeXBlLCBUYXJnZXRDYXRlZ29yeSwgVGFyZ2V0RGV0YWlsIH0gZnJvbSAnLi4vLi4vdHlwZXMuanMnO1xuaW1wb3J0IHsgYWxsVGFyZ2V0Q2F0ZWdvcmllcyB9IGZyb20gJy4uLy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IGZvcm1hdERhdGVUaW1lLCBmb3JtYXREdXJhdGlvbiwgZ2V0TmFtZXNwYWNlLCByZWFkUGFja2FnZUpzb24gfSBmcm9tICcuLi8uLi91dGlscy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgQW55QnVpbGRlclR5cGUsIGJ1aWxkZXIgfSBmcm9tICcuL2J1aWxkZXIuanMnO1xuaW1wb3J0IHsgYXBwQnVpbGRlciwgZnVuY3Rpb25zQnVpbGRlciwgbGliQnVpbGRlciB9IGZyb20gJy4vYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBoYW5kbGVFcnJvciB9IGZyb20gJy4vYnVuZGxlckxvZ2dlci5qcyc7XG5pbXBvcnQgeyBjcmVhdGVFeHRlcm5hbE1hdGNoZXIgfSBmcm9tICcuL2V4dGVybmFscy5qcyc7XG5pbXBvcnQgeyBzZXR1cFBsdWdpbnMgfSBmcm9tICcuL3BsdWdpbi5qcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZURlY2xhcmF0aW9uRmlsZXMgfSBmcm9tICcuL3R5cGVTY3JpcHQuanMnO1xuXG4vLyBPbmx5IHRoZSBvcHRpb25zIHRoZSBidW5kbGVyIGlzIGFjdHVhbGx5IGdpdmVuOiBpdHMgcmVtYWluaW5nIGRlZmF1bHRzIGFyZSBwbGF0Zm9ybS1kZXBlbmRlbnQsIHNvXG4vLyBwaW5uaW5nIHRoZW0gaGVyZSB3b3VsZCBjaGFuZ2Ugd2hpY2ggc291cmNlIGdldHMgYnVuZGxlZC5cbmNvbnN0IGJ1bmRsZXJSZXNvbHZlT3B0aW9ucyA9IHtcbiAgZXh0ZW5zaW9uQWxpYXM6IHtcbiAgICAnLmNqcyc6IFsnLmNqcycsICcuY3RzJ10sXG4gICAgJy5qcyc6IFsnLmpzJywgJy50cycsICcudHN4J10sXG4gICAgJy5qc3gnOiBbJy5qc3gnLCAnLnRzJywgJy50c3gnXSxcbiAgICAnLm1qcyc6IFsnLm1qcycsICcubXRzJ10sXG4gIH0sXG4gIGV4dGVuc2lvbnM6IFsnLmN0cycsICcubXRzJywgJy50cycsICcudHN4JywgJy5janMnLCAnLm1qcycsICcuanMnLCAnLmpzeCcsICcuanNvbiddLFxufTtcblxuZXhwb3J0IGNvbnN0IGFwcDogQ29tbWFuZE1vZHVsZTx1bmtub3duLCBBcmd1bWVudHNUeXBlPHR5cGVvZiBhcHBCdWlsZGVyPj4gPSB7XG4gIGNvbW1hbmQ6ICdhcHAgW3BhY2thZ2VdJyxcbiAgZGVzY3JpYmU6ICdCdWlsZCBhbiBhcHAnLFxuICBidWlsZGVyOiBhcHBCdWlsZGVyLFxuICBhc3luYyBoYW5kbGVyKGFyZ3YpIHtcbiAgICByZXR1cm4gYnVpbGQoYXJndiwgJ2FwcCcpO1xuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uczogQ29tbWFuZE1vZHVsZTx1bmtub3duLCBBcmd1bWVudHNUeXBlPHR5cGVvZiBmdW5jdGlvbnNCdWlsZGVyPj4gPSB7XG4gIGNvbW1hbmQ6ICdmdW5jdGlvbnMgW3BhY2thZ2VdJyxcbiAgZGVzY3JpYmU6ICdCdWlsZCBhIEdDUC9GaXJlYmFzZSBmdW5jdGlvbnMgYXBwJyxcbiAgYnVpbGRlcjogZnVuY3Rpb25zQnVpbGRlcixcbiAgYXN5bmMgaGFuZGxlcihhcmd2KSB7XG4gICAgaWYgKGFyZ3Yub25seVBhY2thZ2VKc29uKSB7XG4gICAgICBjb25zdCBwYWNrYWdlRGlyUGF0aCA9IHBhdGgucmVzb2x2ZShhcmd2LnBhY2thZ2U/LnRvU3RyaW5nKCkgPz8gJy4nKTtcbiAgICAgIGNvbnN0IFtwYWNrYWdlSnNvbiwgcGFja2FnZUpzb25QYXRoXSA9IGF3YWl0IHJlYWRQYWNrYWdlSnNvbihwYWNrYWdlRGlyUGF0aCk7XG4gICAgICBpZiAoIXBhY2thZ2VKc29uKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBwYXJzZSBwYWNrYWdlLmpzb24gKCR7cGFja2FnZUpzb25QYXRofSkuYCk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGdlbmVyYXRlUGFja2FnZUpzb25Gb3JGdW5jdGlvbnMoXG4gICAgICAgIHJlc29sdmVPdXREaXJQYXRoKGFyZ3YsIHByb2Nlc3MuY3dkKCksIHBhY2thZ2VEaXJQYXRoLCB1bmRlZmluZWQsICdmdW5jdGlvbnMnKSxcbiAgICAgICAgcGFja2FnZUpzb24sXG4gICAgICAgIGFyZ3YubW9kdWxlVHlwZVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1aWxkKGFyZ3YsICdmdW5jdGlvbnMnKTtcbiAgICB9XG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgbGliOiBDb21tYW5kTW9kdWxlPHVua25vd24sIEFyZ3VtZW50c1R5cGU8dHlwZW9mIGxpYkJ1aWxkZXI+PiA9IHtcbiAgY29tbWFuZDogJ2xpYiBbcGFja2FnZV0nLFxuICBkZXNjcmliZTogJ0J1aWxkIGEgTm9kZS5qcyAvIFJlYWN0IGxpYnJhcnknLFxuICBidWlsZGVyOiBsaWJCdWlsZGVyLFxuICBhc3luYyBoYW5kbGVyKGFyZ3YpIHtcbiAgICByZXR1cm4gYnVpbGQoYXJndiwgJ2xpYicpO1xuICB9LFxufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkKGFyZ3Y6IEFyZ3VtZW50c1R5cGU8QW55QnVpbGRlclR5cGU+LCB0YXJnZXRDYXRlZ29yeTogVGFyZ2V0Q2F0ZWdvcnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgfHw9ICdwcm9kdWN0aW9uJztcblxuICAvLyBgc2lsZW50YCBpcyBzdHJvbmdlciB0aGFuIGB2ZXJib3NlYC5cbiAgY29uc3QgdmVyYm9zZSA9ICFhcmd2LnNpbGVudCAmJiBhcmd2LnZlcmJvc2U7XG4gIGNvbnN0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgY29uc3QgcGFja2FnZURpclBhdGggPSBwYXRoLnJlc29sdmUoYXJndi5wYWNrYWdlPy50b1N0cmluZygpID8/ICcuJyk7XG4gIGNvbnN0IFtwYWNrYWdlSnNvbiwgcGFja2FnZUpzb25QYXRoXSA9IGF3YWl0IHJlYWRQYWNrYWdlSnNvbihwYWNrYWdlRGlyUGF0aCk7XG4gIGlmICghcGFja2FnZUpzb24pIHtcbiAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gcGFyc2UgcGFja2FnZS5qc29uICgke3BhY2thZ2VKc29uUGF0aH0pLmApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIGxvYWRFbnZpcm9ubWVudFZhcmlhYmxlc1dpdGhDYWNoZShhcmd2LCBwYWNrYWdlRGlyUGF0aCk7XG5cbiAgY29uc3QgaW5wdXRzID0gdmVyaWZ5SW5wdXQoYXJndiwgY3dkLCBwYWNrYWdlRGlyUGF0aCk7XG4gIGNvbnN0IHRhcmdldERldGFpbCA9IGRldGVjdFRhcmdldERldGFpbCh0YXJnZXRDYXRlZ29yeSwgaW5wdXRzLCBwYWNrYWdlRGlyUGF0aCk7XG4gIGNvbnN0IG91dERpclBhdGggPSByZXNvbHZlT3V0RGlyUGF0aChhcmd2LCBjd2QsIHBhY2thZ2VEaXJQYXRoLCBpbnB1dHMsIHRhcmdldENhdGVnb3J5KTtcblxuICBpZiAodmVyYm9zZSkge1xuICAgIGNvbnNvbGUuaW5mbygnYXJndjonLCBhcmd2KTtcbiAgICBjb25zb2xlLmluZm8oJ3BhY2thZ2VKc29uUGF0aDonLCBwYWNrYWdlSnNvblBhdGgpO1xuICAgIGNvbnNvbGUuaW5mbygnVGFyZ2V0IChDYXRlZ29yeSk6JywgYCR7dGFyZ2V0RGV0YWlsfSAoJHt0YXJnZXRDYXRlZ29yeX0pYCk7XG4gIH1cblxuICBjb25zdCBuYW1lc3BhY2UgPSBnZXROYW1lc3BhY2UocGFja2FnZUpzb24pO1xuICBjb25zdCBpc0VzbVBhY2thZ2UgPSBwYWNrYWdlSnNvbi50eXBlID09PSAnbW9kdWxlJztcblxuICBpZiAodmVyYm9zZSkge1xuICAgIHByb2Nlc3MuZW52LkJVSUxEX1RTX1ZFUkJPU0UgPSAnMSc7XG4gIH1cbiAgcHJvY2Vzcy5lbnYuQlVJTERfVFNfVEFSR0VUX0NBVEVHT1JZID0gdGFyZ2V0Q2F0ZWdvcnk7XG4gIHByb2Nlc3MuZW52LkJVSUxEX1RTX1RBUkdFVF9ERVRBSUwgPSB0YXJnZXREZXRhaWw7XG5cbiAgY29uc3QgZGVjbGFyYXRpb25Pbmx5ID0gJ2RlY2xhcmF0aW9uT25seScgaW4gYXJndiAmJiBhcmd2LmRlY2xhcmF0aW9uT25seTtcbiAgaWYgKGRlY2xhcmF0aW9uT25seSAmJiBhcmd2LndhdGNoKSB7XG4gICAgY29uc29sZS5lcnJvcignLS1kZWNsYXJhdGlvbi1vbmx5IGNhbm5vdCBiZSB1c2VkIHdpdGggLS13YXRjaC4nKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBjb25zdCBvdXRwdXRPcHRpb25zTGlzdCA9IGdldE91dHB1dE9wdGlvbnNMaXN0KGFyZ3YsIHRhcmdldERldGFpbCwgb3V0RGlyUGF0aCwgaXNFc21QYWNrYWdlLCBwYWNrYWdlRGlyUGF0aCk7XG4gIGlmICh2ZXJib3NlKSB7XG4gICAgY29uc29sZS5pbmZvKCdPdXRwdXRPcHRpb25zOicsIG91dHB1dE9wdGlvbnNMaXN0KTtcbiAgfVxuICBpZiAob3V0cHV0T3B0aW9uc0xpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRldGVjdCBvdXRwdXQgZmlsZXMuJyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgLy8gUmVzdHJpY3RzIGRlY2xhcmF0aW9ucyB0byB0aGUgZW50cnkgZmlsZXMgKGFuZCB0aGVpciBpbXBvcnRzKSBvbmx5IHdoZW4gaW5wdXRzIGFyZSBleHBsaWNpdCwgc29cbiAgLy8gdGhhdCB0aGUgZGVmYXVsdCBrZWVwcyBlbWl0dGluZyBkZWNsYXJhdGlvbnMgZm9yIGV2ZXJ5IGZpbGUgdW5kZXIgc3JjLy5cbiAgY29uc3QgZGVjbGFyYXRpb25JbnB1dHMgPSBhcmd2LmlucHV0Py5sZW5ndGggPyBpbnB1dHMgOiB1bmRlZmluZWQ7XG5cbiAgcHJvY2Vzcy5jaGRpcihwYWNrYWdlRGlyUGF0aCk7XG4gIGF3YWl0IGZzLnByb21pc2VzLnJtKG91dERpclBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgaWYgKHRhcmdldERldGFpbCA9PT0gJ2Z1bmN0aW9ucycpIHtcbiAgICBhd2FpdCBnZW5lcmF0ZVBhY2thZ2VKc29uRm9yRnVuY3Rpb25zKG91dERpclBhdGgsIHBhY2thZ2VKc29uLCBhcmd2Lm1vZHVsZVR5cGUpO1xuICB9XG5cbiAgaWYgKGRlY2xhcmF0aW9uT25seSkge1xuICAgIGlmICghYXJndi5zaWxlbnQpIHtcbiAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgc3R5bGVUZXh0KFxuICAgICAgICAgICdjeWFuJyxcbiAgICAgICAgICBgR2VuZXJhdGVzIGRlY2xhcmF0aW9uIGZpbGVzIOKGkiAke3N0eWxlVGV4dCgnYm9sZCcsIHBhdGgucmVsYXRpdmUocGFja2FnZURpclBhdGgsIG91dERpclBhdGgpKX1cXG5vbiAke3BhY2thZ2VEaXJQYXRofSAuLi5gXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghKGF3YWl0IGdlbmVyYXRlRGVjbGFyYXRpb25GaWxlcyhhcmd2LCBwYWNrYWdlRGlyUGF0aCwgb3V0RGlyUGF0aCwgZGVjbGFyYXRpb25JbnB1dHMpKSkge1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvcHRpb25zOiBSb2xsZG93bk9wdGlvbnMgPSB7XG4gICAgY2hlY2tzOiB7IHByZWZlckJ1aWx0aW5GZWF0dXJlOiBmYWxzZSB9LFxuICAgIGV4dGVybmFsOiBjcmVhdGVFeHRlcm5hbE1hdGNoZXIoYXJndiwgdGFyZ2V0RGV0YWlsLCBwYWNrYWdlSnNvbiwgbmFtZXNwYWNlLCBwYWNrYWdlRGlyUGF0aCksXG4gICAgaW5wdXQ6XG4gICAgICB0YXJnZXREZXRhaWwgPT09ICdmdW5jdGlvbnMnID8gY3JlYXRlRnVuY3Rpb25zSW5wdXRFbnRyaWVzKGlucHV0cykgOiBpbnB1dHMsXG4gICAgcGx1Z2luczogc2V0dXBQbHVnaW5zKCksXG4gICAgcmVzb2x2ZTogYnVuZGxlclJlc29sdmVPcHRpb25zLFxuICAgIHRyYW5zZm9ybTogZ2V0VHJhbnNmb3JtT3B0aW9ucyhhcmd2LCBwYWNrYWdlRGlyUGF0aCksXG4gICAgd2F0Y2g6IGFyZ3Yud2F0Y2ggPyB7IGNsZWFyU2NyZWVuOiBmYWxzZSB9IDogdW5kZWZpbmVkLFxuICB9O1xuXG4gIGNvbnN0IHBhdGhUb1JlbGF0aXZlUGF0aCA9IChwYXRoczogc3RyaW5nIHwgUmVhZG9ubHk8c3RyaW5nW10+KTogc3RyaW5nW10gPT5cbiAgICAoQXJyYXkuaXNBcnJheShwYXRocykgPyBwYXRocyA6IFtwYXRoc10pLm1hcCgocCkgPT4gcGF0aC5yZWxhdGl2ZShwYWNrYWdlRGlyUGF0aCwgcCkpO1xuICBjb25zdCBwcmludEJ1bmRsaW5nTWVzc2FnZSA9IChpbnB1dFBhdGhzOiBzdHJpbmcgfCBSZWFkb25seTxzdHJpbmdbXT4pOiB2b2lkID0+IHtcbiAgICBjb25zdCBvdXRwdXRQYXRocyA9IHBhdGhUb1JlbGF0aXZlUGF0aChvdXRwdXRPcHRpb25zTGlzdC5tYXAoKG9wdHMpID0+IG9wdHMuZmlsZSB8fCBvcHRzLmRpciB8fCAnJykpO1xuICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgIHN0eWxlVGV4dChcbiAgICAgICAgJ2N5YW4nLFxuICAgICAgICBgQnVuZGxlcyAke3N0eWxlVGV4dCgnYm9sZCcsIHBhdGhUb1JlbGF0aXZlUGF0aChpbnB1dFBhdGhzKS5qb2luKCcsICcpKX0g4oaSICR7c3R5bGVUZXh0KFxuICAgICAgICAgICdib2xkJyxcbiAgICAgICAgICBvdXRwdXRQYXRocy5qb2luKCcsICcpXG4gICAgICAgICl9XFxub24gJHtwYWNrYWdlRGlyUGF0aH0gLi4uYFxuICAgICAgKVxuICAgICk7XG4gIH07XG4gIGlmIChhcmd2LndhdGNoKSB7XG4gICAgd2F0Y2hSb2xsZG93bihcbiAgICAgIGFyZ3YsXG4gICAgICB0YXJnZXREZXRhaWwsXG4gICAgICBwYWNrYWdlRGlyUGF0aCxcbiAgICAgIG91dERpclBhdGgsXG4gICAgICBkZWNsYXJhdGlvbklucHV0cyxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBvdXRwdXRPcHRpb25zTGlzdCxcbiAgICAgIHBhdGhUb1JlbGF0aXZlUGF0aCxcbiAgICAgIHByaW50QnVuZGxpbmdNZXNzYWdlXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWFyZ3Yuc2lsZW50KSB7XG4gICAgICBwcmludEJ1bmRsaW5nTWVzc2FnZShpbnB1dHMpO1xuICAgIH1cblxuICAgIGxldCBidW5kbGU6IFJvbGxkb3duQnVpbGQgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGJ1aWxkRmFpbGVkID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCBfYnVuZGxlID0gYXdhaXQgcm9sbGRvd24ob3B0aW9ucyk7XG4gICAgICBidW5kbGUgPSBfYnVuZGxlO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwob3V0cHV0T3B0aW9uc0xpc3QubWFwKChvcHRzKSA9PiBfYnVuZGxlLndyaXRlKG9wdHMpKSk7XG5cbiAgICAgIGlmICghYXJndi5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgIHN0eWxlVGV4dChcbiAgICAgICAgICAgICdncmVlbicsXG4gICAgICAgICAgICBgQ3JlYXRlZCAke3BhdGhUb1JlbGF0aXZlUGF0aChvdXRwdXRPcHRpb25zTGlzdC5tYXAoKG9wdHMpID0+IG9wdHMuZmlsZSB8fCBvcHRzLmRpciB8fCAnJykpLmpvaW4oXG4gICAgICAgICAgICAgICcsICdcbiAgICAgICAgICAgICl9IGluICR7c3R5bGVUZXh0KCdib2xkJywgZm9ybWF0RHVyYXRpb24oRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSkpfWBcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGJ1aWxkRmFpbGVkID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBidWlsZCBkdWUgdG86JywgZXJyb3IpO1xuICAgIH1cbiAgICBhd2FpdCBidW5kbGU/LmNsb3NlKCk7XG4gICAgaWYgKGJ1aWxkRmFpbGVkKSBwcm9jZXNzLmV4aXQoMSk7XG5cbiAgICBpZiAodGFyZ2V0RGV0YWlsICE9PSAnYXBwLW5vZGUnICYmIHRhcmdldERldGFpbCAhPT0gJ2Z1bmN0aW9ucycpIHtcbiAgICAgIGlmICghKGF3YWl0IGdlbmVyYXRlRGVjbGFyYXRpb25GaWxlcyhhcmd2LCBwYWNrYWdlRGlyUGF0aCwgb3V0RGlyUGF0aCwgZGVjbGFyYXRpb25JbnB1dHMpKSkge1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zZm9ybU9wdGlvbnMoYXJndjogQXJndW1lbnRzVHlwZTxBbnlCdWlsZGVyVHlwZT4sIHBhY2thZ2VEaXJQYXRoOiBzdHJpbmcpOiBSb2xsZG93bk9wdGlvbnNbJ3RyYW5zZm9ybSddIHtcbiAgcmV0dXJuIHtcbiAgICBkZWZpbmU6IGNyZWF0ZUVudmlyb25tZW50VmFyaWFibGVzRGVmaW5pdGlvbihhcmd2LCBwYWNrYWdlRGlyUGF0aCksXG4gICAganN4OiAncmVhY3QtanN4JyxcbiAgICB0YXJnZXQ6ICdlczIwMjInLFxuICB9O1xufVxuXG5mdW5jdGlvbiB3YXRjaFJvbGxkb3duKFxuICBhcmd2OiBBcmd1bWVudHNUeXBlPEFueUJ1aWxkZXJUeXBlPixcbiAgdGFyZ2V0RGV0YWlsOiBzdHJpbmcsXG4gIHBhY2thZ2VEaXJQYXRoOiBzdHJpbmcsXG4gIG91dERpclBhdGg6IHN0cmluZyxcbiAgZGVjbGFyYXRpb25JbnB1dHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICBvcHRpb25zOiBSb2xsZG93bk9wdGlvbnMsXG4gIG91dHB1dE9wdGlvbnNMaXN0OiBPdXRwdXRPcHRpb25zW10sXG4gIHBhdGhUb1JlbGF0aXZlUGF0aDogKHBhdGhzOiBzdHJpbmcgfCBSZWFkb25seTxzdHJpbmdbXT4pID0+IHN0cmluZ1tdLFxuICBwcmludEJ1bmRsaW5nTWVzc2FnZTogKGlucHV0UGF0aHM6IHN0cmluZyB8IFJlYWRvbmx5PHN0cmluZ1tdPikgPT4gdm9pZFxuKTogdm9pZCB7XG4gIGNvbnN0IHdhdGNoZXIgPSB3YXRjaCh7IC4uLm9wdGlvbnMsIG91dHB1dDogb3V0cHV0T3B0aW9uc0xpc3QgfSk7XG5cbiAgY29uc3QgY2xvc2UgPSBhc3luYyAoY29kZT86IG51bWJlciB8IG51bGwpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBwcm9jZXNzLnJlbW92ZUxpc3RlbmVyKCd1bmNhdWdodEV4Y2VwdGlvbicsIGNsb3NlT25VbmNhdWdodEV4Y2VwdGlvbik7XG4gICAgcHJvY2Vzcy5zdGRpbi5yZW1vdmVMaXN0ZW5lcignZW5kJywgY2xvc2VPblN0ZGluRW5kKTtcbiAgICBhd2FpdCB3YXRjaGVyLmNsb3NlKCk7XG4gICAgaWYgKGNvZGUpIHByb2Nlc3MuZXhpdChjb2RlKTtcbiAgfTtcbiAgY29uc3QgY2xvc2VPblVuY2F1Z2h0RXhjZXB0aW9uID0gKGVycm9yOiB1bmtub3duKTogdm9pZCA9PiB7XG4gICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgdm9pZCBjbG9zZSgxKTtcbiAgfTtcbiAgY29uc3QgY2xvc2VPblN0ZGluRW5kID0gKCk6IHZvaWQgPT4ge1xuICAgIHZvaWQgY2xvc2UoKTtcbiAgfTtcbiAgb25FeGl0KChjb2RlKSA9PiB2b2lkIGNsb3NlKGNvZGUpKTtcbiAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBjbG9zZU9uVW5jYXVnaHRFeGNlcHRpb24pO1xuICBpZiAoIXByb2Nlc3Muc3RkaW4uaXNUVFkpIHtcbiAgICBwcm9jZXNzLnN0ZGluLm9uKCdlbmQnLCBjbG9zZU9uU3RkaW5FbmQpO1xuICAgIHByb2Nlc3Muc3RkaW4ucmVzdW1lKCk7XG4gIH1cblxuICB3YXRjaGVyLm9uKCdldmVudCcsIGFzeW5jIChldmVudCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcbiAgICAgICAgY2FzZSAnRVJST1InOiB7XG4gICAgICAgICAgaGFuZGxlRXJyb3IoZXZlbnQuZXJyb3IsIHRydWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0JVTkRMRV9TVEFSVCc6IHtcbiAgICAgICAgICBpZiAoYXJndi5zaWxlbnQpIGJyZWFrO1xuXG4gICAgICAgICAgcHJpbnRCdW5kbGluZ01lc3NhZ2UoZ2V0SW5wdXRGaWxlcyhvcHRpb25zLmlucHV0KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQlVORExFX0VORCc6IHtcbiAgICAgICAgICBpZiAoIWFyZ3Yuc2lsZW50KSB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgICAgICAgIHN0eWxlVGV4dChcbiAgICAgICAgICAgICAgICAnZ3JlZW4nLFxuICAgICAgICAgICAgICAgIGBDcmVhdGVkICR7c3R5bGVUZXh0KCdib2xkJywgcGF0aFRvUmVsYXRpdmVQYXRoKGV2ZW50Lm91dHB1dCkuam9pbignLCAnKSl9IGluICR7c3R5bGVUZXh0KFxuICAgICAgICAgICAgICAgICAgJ2JvbGQnLFxuICAgICAgICAgICAgICAgICAgZm9ybWF0RHVyYXRpb24oZXZlbnQuZHVyYXRpb24pXG4gICAgICAgICAgICAgICAgKX1gXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRhcmdldERldGFpbCAhPT0gJ2FwcC1ub2RlJyAmJiB0YXJnZXREZXRhaWwgIT09ICdmdW5jdGlvbnMnKSB7XG4gICAgICAgICAgICBhd2FpdCBnZW5lcmF0ZURlY2xhcmF0aW9uRmlsZXMoYXJndiwgcGFja2FnZURpclBhdGgsIG91dERpclBhdGgsIGRlY2xhcmF0aW9uSW5wdXRzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnRU5EJzoge1xuICAgICAgICAgIGlmIChhcmd2LnNpbGVudCkgYnJlYWs7XG5cbiAgICAgICAgICBjb25zb2xlLmluZm8oYFxcblske2Zvcm1hdERhdGVUaW1lKG5ldyBEYXRlKCkpfV0gd2FpdGluZyBmb3IgY2hhbmdlcy4uLmApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEtlZXAgdGhlIHdhdGNoZXIgYWxpdmUgZXZlbiBpZiBoYW5kbGluZyBhbiBldmVudCAoZS5nLiBkZWNsYXJhdGlvbiBmaWxlIGdlbmVyYXRpb24pIGZhaWxzLlxuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGhhbmRsZSB3YXRjaCBldmVudCBkdWUgdG86JywgZXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoJ3Jlc3VsdCcgaW4gZXZlbnQgJiYgZXZlbnQucmVzdWx0KSB7XG4gICAgICAgIHZvaWQgZXZlbnQucmVzdWx0LmNsb3NlKCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU91dERpclBhdGgoXG4gIGFyZ3Y6IEFyZ3VtZW50c1R5cGU8QW55QnVpbGRlclR5cGU+LFxuICBjd2Q6IHN0cmluZyxcbiAgcGFja2FnZURpclBhdGg6IHN0cmluZyxcbiAgaW5wdXRzPzogc3RyaW5nW10sXG4gIHRhcmdldENhdGVnb3J5PzogVGFyZ2V0Q2F0ZWdvcnlcbik6IHN0cmluZyB7XG4gIGNvbnN0IG91dERpck9wdGlvbiA9IGFyZ3Yub3V0RGlyPy50b1N0cmluZygpO1xuICBpZiAob3V0RGlyT3B0aW9uID09PSAnJykge1xuICAgIGNvbnNvbGUuZXJyb3IoJy0tb3V0LWRpciBtdXN0IG5vdCBiZSBlbXB0eS4nKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICAvLyBUaGUgb3V0cHV0IGRpcmVjdG9yeSBpcyByZW1vdmVkIGJlZm9yZSBidWlsZGluZywgc28gcmVmdXNlIGxvY2F0aW9ucyB0aGF0IHdvdWxkIGRlbGV0ZSBzb3VyY2VcbiAgLy8gZmlsZXMuIENvbnRhaW5tZW50IGlzIGNoZWNrZWQgb24gYm90aCB0aGUgbGV4aWNhbCBhbmQgdGhlIGNhbm9uaWNhbCAoc3ltbGluay1yZXNvbHZlZCkgZm9ybSwgYW5kXG4gIC8vIGJvdGggYXJlIGxvYWQtYmVhcmluZzogdGhlIGNhbm9uaWNhbCBvbmUgY2F0Y2hlcyBhIHN5bWxpbmtlZCBvciBjYXNlLXZhcmlhbnQgcGFyZW50IGNvbXBvbmVudFxuICAvLyAoYGZzLnJtYCBmb2xsb3dzIHRob3NlKSwgd2hpbGUgdGhlIGxleGljYWwgb25lIGNhdGNoZXMgYW4gb3V0cHV0IHBhdGggdGhhdCBpcyBpdHNlbGYgYSBzeW1saW5rXG4gIC8vIHNpdHRpbmcgaW5zaWRlIGEgcHJvdGVjdGVkIGRpcmVjdG9yeS4gVGhlIGxleGljYWwgcGF0aCBpcyByZXR1cm5lZCBzbyB0aGF0IHJlbW92aW5nIGEgc3ltbGlua2VkXG4gIC8vIG91dHB1dCBkaXJlY3RvcnkgZGVsZXRlcyB0aGUgbGluayBpdHNlbGYgcmF0aGVyIHRoYW4gaXRzIHRhcmdldCdzIGNvbnRlbnRzLlxuICBjb25zdCBsZXhpY2FsT3V0RGlyUGF0aCA9IG91dERpck9wdGlvbiA/IHBhdGgucmVzb2x2ZShjd2QsIG91dERpck9wdGlvbikgOiBwYXRoLmpvaW4ocGFja2FnZURpclBhdGgsICdkaXN0Jyk7XG4gIGNvbnN0IG91dERpclBhdGggPSB0b0Nhbm9uaWNhbFBhdGgobGV4aWNhbE91dERpclBhdGgpO1xuICAvLyBUaGUgZGVmYXVsdCBgZGlzdGAgaXMgY2hlY2tlZCB0b28sIHNpbmNlIGFuIGlucHV0IG1heSBiZSBnaXZlbiBpbnNpZGUgaXQsIGFuZCBhbiBpbnB1dCBtYXkgc2l0XG4gIC8vIG91dHNpZGUgYHNyY2AgKGUuZy4gYC0taW5wdXQgc2NyaXB0cy9tYWluLnRzYCkuXG4gIGNvbnN0IGNvbnRhaW5lZElucHV0ID0gaW5wdXRzPy5maW5kKFxuICAgIChpbnB1dCkgPT4gY29udGFpbnNQYXRoKG91dERpclBhdGgsIHRvQ2Fub25pY2FsUGF0aChpbnB1dCkpIHx8IGNvbnRhaW5zUGF0aChsZXhpY2FsT3V0RGlyUGF0aCwgaW5wdXQpXG4gICk7XG4gIGlmIChjb250YWluZWRJbnB1dCkge1xuICAgIGNvbnNvbGUuZXJyb3IoYFRoZSBvdXRwdXQgZGlyZWN0b3J5ICgke291dERpclBhdGh9KSBtdXN0IG5vdCBjb250YWluIHRoZSBpbnB1dCBmaWxlICgke2NvbnRhaW5lZElucHV0fSkuYCk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG4gIGlmICghb3V0RGlyT3B0aW9uKSByZXR1cm4gbGV4aWNhbE91dERpclBhdGg7XG5cbiAgY29uc3QgY2Fub25pY2FsUGFja2FnZURpclBhdGggPSB0b0Nhbm9uaWNhbFBhdGgocGFja2FnZURpclBhdGgpO1xuICBpZiAoY29udGFpbnNQYXRoKG91dERpclBhdGgsIGNhbm9uaWNhbFBhY2thZ2VEaXJQYXRoKSB8fCBjb250YWluc1BhdGgobGV4aWNhbE91dERpclBhdGgsIHBhY2thZ2VEaXJQYXRoKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYC0tb3V0LWRpciAoJHtvdXREaXJQYXRofSkgbXVzdCBub3QgY29udGFpbiB0aGUgcGFja2FnZSBkaXJlY3RvcnkgKCR7Y2Fub25pY2FsUGFja2FnZURpclBhdGh9KS5gKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbiAgLy8gYHNyY2AgaXRzZWxmIG1heSBiZSBhIHN5bWxpbmssIHNvIGl0IG5lZWRzIGl0cyBvd24gY2Fub25pY2FsaXphdGlvbi5cbiAgY29uc3Qgc3JjRGlyUGF0aCA9IHRvQ2Fub25pY2FsUGF0aChwYXRoLmpvaW4oY2Fub25pY2FsUGFja2FnZURpclBhdGgsICdzcmMnKSk7XG4gIGlmIChjb250YWluc1BhdGgoc3JjRGlyUGF0aCwgb3V0RGlyUGF0aCkgfHwgY29udGFpbnNQYXRoKHBhdGguam9pbihwYWNrYWdlRGlyUGF0aCwgJ3NyYycpLCBsZXhpY2FsT3V0RGlyUGF0aCkpIHtcbiAgICBjb25zb2xlLmVycm9yKGAtLW91dC1kaXIgKCR7b3V0RGlyUGF0aH0pIG11c3Qgbm90IGJlIGluc2lkZSB0aGUgc291cmNlIGRpcmVjdG9yeSAoJHtzcmNEaXJQYXRofSkuYCk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG4gIC8vIEEgcGFja2FnZS5qc29uIGF0IHRoZSBvdXRwdXQgZGlyZWN0b3J5IHJvb3QgaW5kaWNhdGVzIGFub3RoZXIgcGFja2FnZSdzIGRpcmVjdG9yeS4gVGhlIGZ1bmN0aW9uc1xuICAvLyB0YXJnZXQgaXMgZXhlbXB0IGJlY2F1c2UgaXQgZ2VuZXJhdGVzIGEgcGFja2FnZS5qc29uIHRoZXJlIGl0c2VsZi5cbiAgaWYgKHRhcmdldENhdGVnb3J5ICE9PSAnZnVuY3Rpb25zJyAmJiBmcy5leGlzdHNTeW5jKHBhdGguam9pbihvdXREaXJQYXRoLCAncGFja2FnZS5qc29uJykpKSB7XG4gICAgY29uc29sZS5lcnJvcihgLS1vdXQtZGlyICgke291dERpclBhdGh9KSBjb250YWlucyBhIHBhY2thZ2UuanNvbiwgc28gaXQgbG9va3MgbGlrZSBhIHBhY2thZ2UgZGlyZWN0b3J5LmApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuICByZXR1cm4gbGV4aWNhbE91dERpclBhdGg7XG59XG5cbi8vIFJlc29sdmVzIHN5bWxpbmtzIChhbmQgY2FzZSB2YXJpYW50cykgaW4gdGhlIGxvbmdlc3QgZXhpc3RpbmcgYW5jZXN0b3Igb2YgdGhlIGdpdmVuIHBhdGgsIGtlZXBpbmdcbi8vIHRoZSBub24tZXhpc3RlbnQgdGFpbCwgc28gdGhhdCBhIG5vdC15ZXQtY3JlYXRlZCBvdXRwdXQgZGlyZWN0b3J5IGlzIHN0aWxsIGNvbXBhcmVkIGNvcnJlY3RseS5cbmZ1bmN0aW9uIHRvQ2Fub25pY2FsUGF0aCh0YXJnZXRQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzdWZmaXhlczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGN1cnJlbnRQYXRoID0gdGFyZ2V0UGF0aDtcbiAgd2hpbGUgKCFmcy5leGlzdHNTeW5jKGN1cnJlbnRQYXRoKSkge1xuICAgIHN1ZmZpeGVzLnVuc2hpZnQocGF0aC5iYXNlbmFtZShjdXJyZW50UGF0aCkpO1xuICAgIGNvbnN0IHBhcmVudFBhdGggPSBwYXRoLmRpcm5hbWUoY3VycmVudFBhdGgpO1xuICAgIGlmIChwYXJlbnRQYXRoID09PSBjdXJyZW50UGF0aCkgYnJlYWs7XG4gICAgY3VycmVudFBhdGggPSBwYXJlbnRQYXRoO1xuICB9XG4gIHRyeSB7XG4gICAgY3VycmVudFBhdGggPSBmcy5yZWFscGF0aFN5bmMubmF0aXZlKGN1cnJlbnRQYXRoKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gS2VlcCB0aGUgb3JpZ2luYWwgcGF0aCB3aGVuIGl0IGNhbm5vdCBiZSByZXNvbHZlZCAoZS5nLiByZW1vdmVkIGNvbmN1cnJlbnRseSkuXG4gIH1cbiAgcmV0dXJuIHBhdGguam9pbihjdXJyZW50UGF0aCwgLi4uc3VmZml4ZXMpO1xufVxuXG5mdW5jdGlvbiBjb250YWluc1BhdGgocGFyZW50UGF0aDogc3RyaW5nLCBjaGlsZFBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKHBhcmVudFBhdGgsIGNoaWxkUGF0aCk7XG4gIGlmIChyZWxhdGl2ZVBhdGggPT09ICcnKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHBhdGguaXNBYnNvbHV0ZShyZWxhdGl2ZVBhdGgpKSByZXR1cm4gZmFsc2U7XG4gIC8vIE9ubHkgYW4gYWN0dWFsIGAuLmAgc2VnbWVudCBtZWFucyBcIm91dHNpZGVcIjsgYSBjaGlsZCBuYW1lIGxpa2UgYC4uZm9vYCBhbHNvIHN0YXJ0cyB3aXRoIGAuLmAuXG4gIHJldHVybiByZWxhdGl2ZVBhdGggIT09ICcuLicgJiYgIXJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKGAuLiR7cGF0aC5zZXB9YCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uc0lucHV0RW50cmllcyhpbnB1dHM6IHN0cmluZ1tdKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IGVudHJpZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IFtpbmRleCwgaW5wdXRdIG9mIGlucHV0cy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBuYW1lID0gaW5kZXggPT09IDAgPyAnaW5kZXgnIDogcGF0aC5iYXNlbmFtZShpbnB1dCwgcGF0aC5leHRuYW1lKGlucHV0KSk7XG4gICAgY29uc3QgY29uZmxpY3RpbmcgPSBlbnRyaWVzLmdldChuYW1lKTtcbiAgICBpZiAoY29uZmxpY3RpbmcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBFbnRyeSBuYW1lcyBjb25mbGljdCBpbiB0aGUgZnVuY3Rpb25zIGJ1aWxkOiBcIiR7bmFtZX1cIiAoJHtjb25mbGljdGluZ30gdnMgJHtpbnB1dH0pLiBMaXN0IC0taW5wdXQgZmlsZXMgZXhwbGljaXRseSB3aXRoIHVuaXF1ZSBiYXNlIG5hbWVzLCBrZWVwaW5nIHRoZSBtYWluIGVudHJ5IGZpcnN0LmBcbiAgICAgICk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICAgIGVudHJpZXMuc2V0KG5hbWUsIGlucHV0KTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMpO1xufVxuXG5mdW5jdGlvbiBnZXRJbnB1dEZpbGVzKGlucHV0OiBSb2xsZG93bk9wdGlvbnNbJ2lucHV0J10pOiBzdHJpbmdbXSB7XG4gIGlmICghaW5wdXQpIHJldHVybiBbXTtcbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHJldHVybiBbaW5wdXRdO1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShpbnB1dCkgPyBpbnB1dCA6IE9iamVjdC52YWx1ZXMoaW5wdXQpO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlJbnB1dChhcmd2OiBBcmd1bWVudHNUeXBlPHR5cGVvZiBidWlsZGVyPiwgY3dkOiBzdHJpbmcsIHBhY2thZ2VEaXJQYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGlmIChhcmd2LmlucHV0ICYmIGFyZ3YuaW5wdXQubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGlucHV0cyA9IGFyZ3YuaW5wdXQuZmxhdE1hcCgocCkgPT4ge1xuICAgICAgY29uc3QgcmF3ID0gcC50b1N0cmluZygpO1xuICAgICAgaWYgKCFpc0dsb2JQYXR0ZXJuKHJhdykpIHJldHVybiBbcGF0aC5yZXNvbHZlKGN3ZCwgcmF3KV07XG5cbiAgICAgIC8vIGBmcy5nbG9iU3luY2AgcmVxdWlyZXMgXCIvXCIgYXMgdGhlIHNlcGFyYXRvciBldmVuIG9uIFdpbmRvd3MgKGEgbm8tb3Agb24gUE9TSVgpLlxuICAgICAgLy8gQW1iaWVudCBkZWNsYXJhdGlvbiBmaWxlcyBhbHdheXMgcGFydGljaXBhdGUgaW4gdHlwZSBjaGVja2luZywgc28gdGhleSBtdXN0IG5vdCBiZWNvbWUgZW50cmllcy5cbiAgICAgIC8vIGB0aHJvd0lmTm9FbnRyeTogZmFsc2VgIHNraXBzIGEgYnJva2VuIHN5bWxpbmsgaW5zdGVhZCBvZiBjcmFzaGluZy5cbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBmc1xuICAgICAgICAuZ2xvYlN5bmMocmF3LnNwbGl0KHBhdGguc2VwKS5qb2luKCcvJyksIHsgY3dkIH0pXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKG0pID0+ICEvXFwuZFxcLltjbV0/dHMkLy50ZXN0KG0pICYmIGZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShjd2QsIG0pLCB7IHRocm93SWZOb0VudHJ5OiBmYWxzZSB9KT8uaXNGaWxlKClcbiAgICAgICAgKVxuICAgICAgICAuc29ydCgpXG4gICAgICAgIC5tYXAoKG0pID0+IHBhdGgucmVzb2x2ZShjd2QsIG0pKTtcbiAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBObyBmaWxlcyBtYXRjaGVkIHRoZSBpbnB1dCBwYXR0ZXJuOiAke3Jhd31gKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1hdGNoZXM7XG4gICAgfSk7XG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KGlucHV0cyldO1xuICB9XG5cbiAgY29uc3Qgc3JjRGlyUGF0aCA9IHBhdGguam9pbihwYWNrYWdlRGlyUGF0aCwgJ3NyYycpO1xuICBmb3IgKGNvbnN0IGV4dCBvZiBbJ3RzJywgJ3RzeCcsICdjdHMnLCAnbXRzJ10pIHtcbiAgICBjb25zdCBpbnB1dCA9IHBhdGguam9pbihzcmNEaXJQYXRoLCBgaW5kZXguJHtleHR9YCk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoaW5wdXQpKSByZXR1cm4gW2lucHV0XTtcbiAgfVxuXG4gIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkZXRlY3QgaW5wdXQgZmlsZS4nKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufVxuXG4vLyBPbmx5IHJlYWwgZ2xvYiBzeW50YXggY291bnRzIGFzIGEgcGF0dGVybjogXCIqXCIsIFwiP1wiLCBhIFwiWy4uLl1cIiBjbGFzcywgb3IgYSBcInthLGJ9XCIgYWx0ZXJuYXRpb24uXG4vLyBBIGJhcmUgXCIrXCIgb3IgYSBzaW5nbGUtaXRlbSBicmFjZSAoXCJ7ZW50cnl9XCIpIGlzIGFuIG9yZGluYXJ5IGZpbGVuYW1lIGNoYXJhY3Rlci5cbmZ1bmN0aW9uIGlzR2xvYlBhdHRlcm4oaW5wdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL1sqP118XFxbW15cXF1dKlxcXXxcXHtbXn1dKixbXn1dKlxcfS8udGVzdChpbnB1dCk7XG59XG5cbmZ1bmN0aW9uIGRldGVjdFRhcmdldERldGFpbCh0YXJnZXRDYXRlZ29yeTogc3RyaW5nLCBpbnB1dHM6IHN0cmluZ1tdLCBwYWNrYWdlRGlyUGF0aDogc3RyaW5nKTogVGFyZ2V0RGV0YWlsIHtcbiAgc3dpdGNoICh0YXJnZXRDYXRlZ29yeSkge1xuICAgIGNhc2UgJ2FwcCc6IHtcbiAgICAgIHJldHVybiAnYXBwLW5vZGUnO1xuICAgIH1cbiAgICBjYXNlICdmdW5jdGlvbnMnOiB7XG4gICAgICByZXR1cm4gJ2Z1bmN0aW9ucyc7XG4gICAgfVxuICAgIGNhc2UgJ2xpYic6IHtcbiAgICAgIGlmIChpbnB1dHMuc29tZSgoaW5wdXQpID0+IGlucHV0LmVuZHNXaXRoKCcudHN4JykpIHx8IGRvZXNTcmNDb250YWluVHN4KHBhY2thZ2VEaXJQYXRoKSkge1xuICAgICAgICByZXR1cm4gJ2xpYi1yZWFjdCc7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ2xpYic7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3RhcmdldCBvcHRpb24gbXVzdCBiZSBvbmUgb2Y6ICcgKyBhbGxUYXJnZXRDYXRlZ29yaWVzLmpvaW4oJywgJykpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkb2VzU3JjQ29udGFpblRzeChwYWNrYWdlRGlyUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNyY0RpclBhdGggPSBwYXRoLmpvaW4ocGFja2FnZURpclBhdGgsICdzcmMnKTtcbiAgcmV0dXJuIGRvZXNEaXJlY3RvcnlDb250YWluVHN4KHNyY0RpclBhdGgpO1xufVxuXG5mdW5jdGlvbiBkb2VzRGlyZWN0b3J5Q29udGFpblRzeChkaXJQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBlbnRyaWVzID0gZnMucmVhZGRpclN5bmMoZGlyUGF0aCwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuICAgIHJldHVybiBlbnRyaWVzLnNvbWUoKGVudHJ5KSA9PiB7XG4gICAgICBjb25zdCBlbnRyeVBhdGggPSBwYXRoLmpvaW4oZGlyUGF0aCwgZW50cnkubmFtZSk7XG4gICAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIGRvZXNEaXJlY3RvcnlDb250YWluVHN4KGVudHJ5UGF0aCk7XG4gICAgICByZXR1cm4gZW50cnkuaXNGaWxlKCkgJiYgZW50cnkubmFtZS5lbmRzV2l0aCgnLnRzeCcpO1xuICAgIH0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVQYWNrYWdlSnNvbkZvckZ1bmN0aW9ucyhcbiAgb3V0RGlyUGF0aDogc3RyaW5nLFxuICBwYWNrYWdlSnNvbjogUGFja2FnZUpzb24sXG4gIG1vZHVsZVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHBhY2thZ2VKc29uLm5hbWUgKz0gJy1kaXN0JztcbiAgY29uc3QgZXNtUGFja2FnZSA9IHBhY2thZ2VKc29uLnR5cGUgPT09ICdtb2R1bGUnO1xuICBjb25zdCBlc21PdXRwdXQgPSBpc0VzbU91dHB1dChlc21QYWNrYWdlLCBtb2R1bGVUeXBlKTtcbiAgcGFja2FnZUpzb24ubWFpbiA9IGVzbVBhY2thZ2UgPT09IGVzbU91dHB1dCA/ICdpbmRleC5qcycgOiBlc21PdXRwdXQgPyAnaW5kZXgubWpzJyA6ICdpbmRleC5janMnO1xuXG4gIC8vIFByZXZlbnQgRmlyZWJhc2UgRnVuY3Rpb25zIGZyb20gcnVubmluZyBgYnVpbGRgIHNjcmlwdCBzaW5jZSB3ZSBhcmUgYnVpbGRpbmcgY29kZSBiZWZvcmUgZGVwbG95aW5nLlxuICBkZWxldGUgcGFja2FnZUpzb24uc2NyaXB0cztcbiAgLy8gZGV2RGVwZW5kZW5jaWVzIGFyZSBub3QgcmVxdWlyZWQgc2luY2Ugd2UgYXJlIGJ1aWxkaW5nIGNvZGUgYmVmb3JlIGRlcGxveWluZy5cbiAgZGVsZXRlIHBhY2thZ2VKc29uLmRldkRlcGVuZGVuY2llcztcblxuICBhd2FpdCBmcy5wcm9taXNlcy5ta2RpcihvdXREaXJQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgZnMucHJvbWlzZXMud3JpdGVGaWxlKHBhdGguam9pbihvdXREaXJQYXRoLCAncGFja2FnZS5qc29uJyksIEpTT04uc3RyaW5naWZ5KHBhY2thZ2VKc29uKSk7XG59XG5cbmZ1bmN0aW9uIGdldE91dHB1dE9wdGlvbnNMaXN0KFxuICBhcmd2OiBBcmd1bWVudHNUeXBlPEFueUJ1aWxkZXJUeXBlPixcbiAgdGFyZ2V0RGV0YWlsOiBUYXJnZXREZXRhaWwsXG4gIG91dERpclBhdGg6IHN0cmluZyxcbiAgaXNFc21QYWNrYWdlOiBib29sZWFuLFxuICBwYWNrYWdlRGlyUGF0aDogc3RyaW5nXG4pOiBPdXRwdXRPcHRpb25zW10ge1xuICBpZiAodGFyZ2V0RGV0YWlsID09PSAnYXBwLW5vZGUnIHx8IHRhcmdldERldGFpbCA9PT0gJ2Z1bmN0aW9ucycpIHtcbiAgICBjb25zdCBlc21PdXRwdXQgPSBpc0VzbU91dHB1dChpc0VzbVBhY2thZ2UsIGFyZ3YubW9kdWxlVHlwZSk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgZGlyOiBvdXREaXJQYXRoLFxuICAgICAgICBmb3JtYXQ6IGVzbU91dHB1dCA/ICdtb2R1bGUnIDogJ2NvbW1vbmpzJyxcbiAgICAgICAgbWluaWZ5OiBhcmd2Lm1pbmlmeSxcbiAgICAgICAgc291cmNlbWFwOiBhcmd2LnNvdXJjZW1hcCAmJiAnaW5saW5lJyxcbiAgICAgICAgc3RyaWN0OiAhZXNtT3V0cHV0LFxuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgLy8gVGhlIGZvbGxvd2luZyBpbXBvcnQgc3RhdGVtZW50IGluIGFuIGVzbSBtb2R1bGUgY2F1c2VzIHRoZSBmb2xsb3dpbmcgZXJyb3I6XG4gIC8vIFN0YXRlbWVudDpcbiAgLy8gICBpbXBvcnQgeyB1c2VQcmV2aW91cyB9IGZyb20gJ3JlYWN0LXVzZSc7XG4gIC8vIEVycm9yOlxuICAvLyAgIE5hbWVkIGV4cG9ydCAndXNlUHJldmlvdXMnIG5vdCBmb3VuZC4gVGhlIHJlcXVlc3RlZCBtb2R1bGUgJ3JlYWN0LXVzZScgaXMgYSBDb21tb25KUyBtb2R1bGUsXG4gIC8vICAgd2hpY2ggbWF5IG5vdCBzdXBwb3J0IGFsbCBtb2R1bGUuZXhwb3J0cyBhcyBuYW1lZCBleHBvcnRzLlxuICAvLyBXZSBuZWVkIGNqcyBtb2R1bGVzIGZvciB3ZWIgYXBwcyB0byBhdm9pZCB0aGUgZXJyb3IuXG4gIC8vIEFsc28sIHNwbGl0dGluZyBhIGxpYnJhcnkgaXMgdXNlZnVsIGluIGJvdGggbW9kdWxlcywgc28gcHJlc2VydmVNb2R1bGVzIHNob3VsZCBiZSB0cnVlLlxuICBjb25zdCBvdXRwdXRPcHRpb25zTGlzdDogT3V0cHV0T3B0aW9uc1tdID0gW107XG4gIGNvbnN0IG1vZHVsZVR5cGUgPSBhcmd2Lm1vZHVsZVR5cGUgfHwgJ2JvdGgnO1xuICAvLyAuanMgZmlsZXMgaW4gYSBwYWNrYWdlIHdpdGggYFwidHlwZVwiOiBcIm1vZHVsZVwiYCBhcmUgdHJlYXRlZCBhcyBlc20uIFRvIGxldCBhIGNqcyBwcm9qZWN0IGltcG9ydCBhblxuICAvLyBlc20gcGFja2FnZSwgdGhlIGZvcm1hdCB0aGF0IGRvZXMgbm90IG1hdGNoIHRoZSBwYWNrYWdlIHR5cGUgdXNlcyAuY2pzIG9yIC5tanMgaW5zdGVhZCBvZiAuanMuXG4gIGlmIChtb2R1bGVUeXBlID09PSAnY2pzJyB8fCBtb2R1bGVUeXBlID09PSAnYm90aCcgfHwgKG1vZHVsZVR5cGUgPT09ICdlaXRoZXInICYmICFpc0VzbVBhY2thZ2UpKSB7XG4gICAgb3V0cHV0T3B0aW9uc0xpc3QucHVzaCh7XG4gICAgICBkaXI6IG91dERpclBhdGgsXG4gICAgICBlbnRyeUZpbGVOYW1lczogaXNFc21QYWNrYWdlID8gJ1tuYW1lXS5janMnIDogJ1tuYW1lXS5qcycsXG4gICAgICBmb3JtYXQ6ICdjb21tb25qcycsXG4gICAgICBtaW5pZnk6IGFyZ3YubWluaWZ5LFxuICAgICAgcHJlc2VydmVNb2R1bGVzOiB0cnVlLFxuICAgICAgcHJlc2VydmVNb2R1bGVzUm9vdDogcGF0aC5qb2luKHBhY2thZ2VEaXJQYXRoLCAnc3JjJyksXG4gICAgICBzb3VyY2VtYXA6IGFyZ3Yuc291cmNlbWFwLFxuICAgICAgc3RyaWN0OiB0cnVlLFxuICAgIH0pO1xuICB9XG4gIGlmIChtb2R1bGVUeXBlID09PSAnZXNtJyB8fCBtb2R1bGVUeXBlID09PSAnYm90aCcgfHwgKG1vZHVsZVR5cGUgPT09ICdlaXRoZXInICYmIGlzRXNtUGFja2FnZSkpIHtcbiAgICBvdXRwdXRPcHRpb25zTGlzdC5wdXNoKHtcbiAgICAgIGRpcjogb3V0RGlyUGF0aCxcbiAgICAgIGVudHJ5RmlsZU5hbWVzOiBpc0VzbVBhY2thZ2UgPyAnW25hbWVdLmpzJyA6ICdbbmFtZV0ubWpzJyxcbiAgICAgIGZvcm1hdDogJ21vZHVsZScsXG4gICAgICBtaW5pZnk6IGFyZ3YubWluaWZ5LFxuICAgICAgcHJlc2VydmVNb2R1bGVzOiB0cnVlLFxuICAgICAgcHJlc2VydmVNb2R1bGVzUm9vdDogcGF0aC5qb2luKHBhY2thZ2VEaXJQYXRoLCAnc3JjJyksXG4gICAgICBzb3VyY2VtYXA6IGFyZ3Yuc291cmNlbWFwLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBvdXRwdXRPcHRpb25zTGlzdDtcbn1cblxuZnVuY3Rpb24gaXNFc21PdXRwdXQoaXNFc21QYWNrYWdlOiBib29sZWFuLCBtb2R1bGVUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG1vZHVsZVR5cGUgPT09ICdlc20nIHx8ICgoIW1vZHVsZVR5cGUgfHwgbW9kdWxlVHlwZSA9PT0gJ2VpdGhlcicpICYmIGlzRXNtUGFja2FnZSk7XG59XG4iLCJpbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5cbmltcG9ydCB0eXBlIHsgQ29tbWFuZE1vZHVsZSwgSW5mZXJyZWRPcHRpb25UeXBlcyB9IGZyb20gJ3lhcmdzJztcblxuaW1wb3J0IHsgbG9hZEVudmlyb25tZW50VmFyaWFibGVzV2l0aENhY2hlIH0gZnJvbSAnLi4vZW52LmpzJztcbmltcG9ydCB7IHNoYXJlZE9wdGlvbnNCdWlsZGVyIH0gZnJvbSAnLi4vc2hhcmVkT3B0aW9uc0J1aWxkZXIuanMnO1xuXG5jb25zdCBidWlsZGVyID0ge1xuICAuLi5zaGFyZWRPcHRpb25zQnVpbGRlcixcbiAgd2F0Y2g6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1doZXRoZXIgd2F0Y2ggbW9kZSBpcyBlbmFibGVkIG9yIG5vdCcsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGFsaWFzOiAndycsXG4gIH0sXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgcnVuOiBDb21tYW5kTW9kdWxlPHVua25vd24sIEluZmVycmVkT3B0aW9uVHlwZXM8dHlwZW9mIGJ1aWxkZXI+PiA9IHtcbiAgY29tbWFuZDogJ3J1biA8ZmlsZT4nLFxuICBkZXNjcmliZTogJ1J1biBzY3JpcHQnLFxuICBidWlsZGVyLFxuICBoYW5kbGVyKGFyZ3YpIHtcbiAgICBsb2FkRW52aXJvbm1lbnRWYXJpYWJsZXNXaXRoQ2FjaGUoYXJndiwgcHJvY2Vzcy5jd2QoKSk7XG5cbiAgICBjb25zdCBmaWxlID0gYXJndi5maWxlPy50b1N0cmluZygpID8/ICcnO1xuXG4gICAgLy8gY2YuIGh0dHBzOi8vYnVuLnNoL2d1aWRlcy91dGlsL2RldGVjdC1idW5cbiAgICBjb25zdCBpc1J1bm5pbmdPbkJ1biA9IHByb2Nlc3MudmVyc2lvbnMuYnVuO1xuICAgIGNvbnN0IHJ1bnRpbWUgPSBpc1J1bm5pbmdPbkJ1biA/ICdidW4nIDogJ25vZGUnO1xuICAgIGNvbnN0IGFyZ3MgPSBpc1J1bm5pbmdPbkJ1biA/IFsnLS1idW4nXSA6IFsnLS1uby13YXJuaW5ncycsICctLWltcG9ydCcsICd0c3gnXTtcbiAgICBpZiAoYXJndi53YXRjaCkge1xuICAgICAgYXJncy5wdXNoKCctLXdhdGNoJyk7XG4gICAgfVxuICAgIGFyZ3MucHVzaChmaWxlKTtcbiAgICBjb25zdCBbLCAuLi5hZGRpdGlvbmFsQXJndW1lbnRzXSA9IGFyZ3YuXztcbiAgICBjb25zdCBydW50aW1lQXJncyA9IFsuLi5hcmdzLCAuLi5hZGRpdGlvbmFsQXJndW1lbnRzLm1hcCgoYXJnKSA9PiBhcmcudG9TdHJpbmcoKSldO1xuICAgIGlmIChhcmd2LnZlcmJvc2UpIHtcbiAgICAgIGNvbnNvbGUuaW5mbyhgUnVubmluZyAnJHtydW50aW1lfSAke3J1bnRpbWVBcmdzLmpvaW4oJyAnKX0nYCk7XG4gICAgfVxuICAgIGNvbnN0IHJldCA9IGNoaWxkX3Byb2Nlc3Muc3Bhd25TeW5jKHJ1bnRpbWUsIHJ1bnRpbWVBcmdzLCB7XG4gICAgICBzdGRpbzogJ2luaGVyaXQnLFxuICAgICAgZW52OiB7IC4uLnByb2Nlc3MuZW52IH0sXG4gICAgfSk7XG4gICAgcHJvY2Vzcy5leGl0KHJldC5zdGF0dXMgPz8gMSk7XG4gIH0sXG59O1xuIiwiaW1wb3J0IGZzIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgcmVtb3ZlTnBtQW5kWWFybkVudmlyb25tZW50VmFyaWFibGVzIH0gZnJvbSAnQHdpbGxib29zdGVyL3NoYXJlZC1saWItbm9kZSc7XG5pbXBvcnQgeWFyZ3MgZnJvbSAneWFyZ3MnO1xuaW1wb3J0IHsgaGlkZUJpbiB9IGZyb20gJ3lhcmdzL2hlbHBlcnMnO1xuXG5pbXBvcnQgeyBhcHAsIGZ1bmN0aW9ucywgbGliIH0gZnJvbSAnLi9jb21tYW5kcy9idWlsZC9idWlsZC5qcyc7XG5pbXBvcnQgeyBydW4gfSBmcm9tICcuL2NvbW1hbmRzL3J1bi5qcyc7XG5pbXBvcnQgeyBzaGFyZWRPcHRpb25zQnVpbGRlciB9IGZyb20gJy4vc2hhcmVkT3B0aW9uc0J1aWxkZXIuanMnO1xuaW1wb3J0IHsgZ2V0QnVpbGRUc1Jvb3RQYXRoIH0gZnJvbSAnLi91dGlscy5qcyc7XG5cbnJlbW92ZU5wbUFuZFlhcm5FbnZpcm9ubWVudFZhcmlhYmxlcyhwcm9jZXNzLmVudik7XG5cbmF3YWl0IHlhcmdzKGhpZGVCaW4ocHJvY2Vzcy5hcmd2KSlcbiAgLnNjcmlwdE5hbWUoJ2J1aWxkLXRzJylcbiAgLm9wdGlvbnMoc2hhcmVkT3B0aW9uc0J1aWxkZXIpXG4gIC5jb21tYW5kKGFwcClcbiAgLmNvbW1hbmQoZnVuY3Rpb25zKVxuICAuY29tbWFuZChsaWIpXG4gIC5jb21tYW5kKHJ1bilcbiAgLmRlbWFuZENvbW1hbmQoKVxuICAuc3RyaWN0KClcbiAgLnZlcnNpb24oZ2V0VmVyc2lvbigpKVxuICAuaGVscCgpLmFyZ3Y7XG5cbmZ1bmN0aW9uIGdldFZlcnNpb24oKTogc3RyaW5nIHtcbiAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oZ2V0QnVpbGRUc1Jvb3RQYXRoKCksICdwYWNrYWdlLmpzb24nKSwgJ3V0ZjgnKSkgYXMge1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgfTtcbiAgcmV0dXJuIHBhY2thZ2VKc29uLnZlcnNpb247XG59XG4iXSwibWFwcGluZ3MiOiI2bUJBTUEsSUFBSSxFQUtKLFNBQWdCLEVBQ2QsRUFDQSxFQUNvQyxDQU9wQyxPQU5LLElBQ0gsRUFBVSxFQUFpQyxFQUFNLENBQUcsRUFDaEQsRUFBSyxTQUNQLFFBQVEsS0FBSyxtQkFBb0IsT0FBTyxLQUFLLENBQU8sQ0FBQyxHQUdsRCxDQUNULENBS0EsU0FBZ0IsRUFDZCxFQUNBLEVBQ3dCLENBQ3hCLElBQU0sRUFBcUMsQ0FBQyxFQUN0QyxFQUFjLElBQUksSUFBSSxDQUMxQixJQUFJLEVBQUssUUFBVSxDQUFDLEVBQUEsQ0FBRyxRQUFTLEdBQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUM3RCxHQUFJLEVBQUssV0FBYSxPQUFPLEtBQUssRUFBa0MsRUFBTSxDQUFHLENBQUMsRUFBSSxDQUFDLENBQ3JGLENBQUMsRUFDRCxJQUFLLElBQU0sS0FBUSxFQUNiLFFBQVEsSUFBSSxLQUFVLElBQUEsS0FFMUIsRUFBVyxlQUFlLEtBQVUsS0FBSyxVQUFVLFFBQVEsSUFBSSxFQUFLLEdBS3RFLE9BSEksRUFBSyxTQUNQLFFBQVEsS0FBSyxtQkFBb0IsT0FBTyxLQUFLLENBQVUsQ0FBQyxFQUVuRCxDQUNULENDM0NBLE1BQWEsRUFBc0IsQ0FBQyxNQUFPLFlBQWEsS0FBSyxFQ0k3RCxlQUFzQixFQUFnQixFQUE2RCxDQUNqRyxJQUFNLEVBQWtCLEVBQUssS0FBSyxFQUFTLGNBQWMsRUFDekQsR0FBSSxDQUNGLElBQU0sRUFBa0IsTUFBTSxFQUFHLFNBQVMsU0FBUyxFQUFpQixNQUFNLEVBQzFFLE1BQU8sQ0FBQyxLQUFLLE1BQU0sQ0FBZSxFQUFrQixDQUFlLENBQ3JFLE1BQVEsQ0FFUixDQUNBLE1BQU8sQ0FBQyxJQUFBLEdBQVcsQ0FBZSxDQUNwQyxDQUVBLFNBQWdCLEdBQTZCLENBQzNDLE9BQU8sRUFBSyxRQUFRLEVBQUssUUFBUSxFQUFJLGNBQWMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUN0RSxDQUdBLFNBQWdCLEdBQWEsRUFBOEMsQ0FDekUsTUFBTyxjQUFjLEtBQUssRUFBWSxNQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQ3RELENBRUEsU0FBZ0IsR0FBZSxFQUFvQixDQUNqRCxNQUFPLEdBQUcsRUFBSyxZQUFZLEVBQUUsR0FBRyxFQUFJLEVBQUssU0FBUyxFQUFJLENBQUMsRUFBRSxHQUFHLEVBQUksRUFBSyxRQUFRLENBQUMsRUFBRSxHQUFHLEVBQUksRUFBSyxTQUFTLENBQUMsRUFBRSxHQUFHLEVBQ3pHLEVBQUssV0FBVyxDQUNsQixFQUFFLEdBQUcsRUFBSSxFQUFLLFdBQVcsQ0FBQyxHQUM1QixDQUVBLFNBQVMsRUFBSSxFQUF1QixDQUNsQyxPQUFPLE9BQU8sQ0FBSyxDQUFDLENBQUMsU0FBUyxFQUFHLEdBQUcsQ0FDdEMsQ0FFQSxTQUFnQixFQUFlLEVBQThCLENBQzNELEdBQUksRUFBZSxJQUFNLE1BQU8sR0FBRyxLQUFLLE1BQU0sQ0FBWSxFQUFFLElBRTVELElBQU0sRUFBVSxFQUFlLElBQy9CLEdBQUksRUFBVSxHQUFJLE1BQU8sR0FBRyxPQUFPLEVBQVEsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUV2RCxJQUFNLEVBQVUsS0FBSyxNQUFNLEVBQVUsRUFBRSxFQUN2QyxNQUFPLEdBQUcsRUFBUSxJQUFJLFFBQVEsRUFBVSxFQUFVLEdBQUEsQ0FBSSxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQ3BFLENDMUNBLE1BQWEsRUFBdUIsQ0FDbEMsR0FBRyxFQUNILE9BQVEsQ0FDTixZQUFhLDhDQUNiLEtBQU0sVUFDTixNQUFPLEdBQ1QsQ0FDRixFQ1BhQSxFQUFVLENBQ3JCLEdBQUcsRUFDSCxNQUFPLENBQ0wsWUFDRSxnTUFDRixLQUFNLFFBQ04sTUFBTyxHQUNULEVBQ0EsT0FBUSxDQUNOLFlBQWEsMENBQ2IsS0FBTSxVQUNOLFFBQVMsRUFDWCxFQUNBLFVBQVcsQ0FDVCxZQUFhLHVDQUNiLEtBQU0sVUFDTixRQUFTLEVBQ1gsRUFDQSxTQUFVLENBQ1IsWUFBYSxvQ0FDYixLQUFNLE9BQ1IsRUFDQSxPQUFRLENBQ04sWUFBYSxpRUFDYixLQUFNLFNBQ04sTUFBTyxHQUNULEVBQ0EsT0FBUSxDQUNOLFlBQWEsdUNBQ2IsS0FBTSxPQUNSLEVBQ0EsY0FBZSxDQUNiLFlBQWEscURBQ2IsS0FBTSxVQUNOLFFBQVMsRUFDWCxFQUNBLE1BQU8sQ0FDTCxZQUFhLHVDQUNiLEtBQU0sVUFDTixNQUFPLEdBQ1QsQ0FDRixFQUVhLEVBQWEsQ0FDeEIsR0FBR0EsRUFDSCxXQUFZLENBQ1YsWUFBYSxpQ0FDYixLQUFNLFNBQ04sTUFBTyxHQUNULENBQ0YsRUFFYSxHQUFtQixDQUM5QixHQUFHLEVBQ0gsZ0JBQWlCLENBQ2YsWUFBYSx5Q0FDYixLQUFNLFNBQ1IsQ0FDRixFQUVhLEdBQWEsQ0FDeEIsR0FBR0EsRUFDSCxXQUFZLENBQ1YsWUFBYSx1Q0FDYixLQUFNLFNBQ04sTUFBTyxHQUNULEVBQ0EsZ0JBQWlCLENBQ2YsWUFBYSxtRUFDYixLQUFNLFVBQ04sUUFBUyxFQUNYLENBQ0YsRUN2RUEsU0FBZ0IsR0FBWSxFQUFtQixFQUFVLEdBQWEsQ0FDcEUsSUFBTSxFQUFPLEVBQU0sTUFBUyxFQUFNLE9BQWlCLEtBQzdDLEVBQWMsRUFBTyxHQUFHLEVBQUssSUFBTSxHQUVuQyxFQUFVLEdBRE0sRUFBTSxPQUFTLFdBQVcsRUFBTSxPQUFPLElBQU0sS0FDaEMsSUFBYyxFQUFNLFVBRWpELEVBQWMsQ0FBQyxFQUFVLENBQUMsT0FBUSxLQUFLLEVBQUcsT0FBTyxHQUFTLENBQUMsRUFFN0QsRUFBTSxLQUNSLEVBQVksS0FBSyxFQUFVLE9BQVEsRUFBTSxHQUFHLENBQUMsRUFHM0MsRUFBTSxJQUNSLEVBQVksS0FBSyxHQUFHLEVBQU0sSUFBSSxNQUFRLEVBQU0sR0FBRyxJQUFJLEVBQU0sSUFBSSxLQUFLLEdBQUcsRUFBTSxJQUFJLE9BQU8sRUFBRSxFQUMvRSxFQUFNLElBQ2YsRUFBWSxLQUFLLEVBQU0sRUFBRSxFQUd2QixFQUFNLE9BQ1IsRUFBWSxLQUFLLEVBQVUsTUFBTyxFQUFNLEtBQUssQ0FBQyxFQUc1QyxFQUFNLE9BQ1IsRUFBWSxLQUFLLEVBQVUsTUFBTyxFQUFNLE1BQU0sUUFBUSxHQUFHLElBQWMsRUFBTSxRQUFRLElBQUssRUFBRSxDQUFDLENBQUMsRUFHaEcsRUFBWSxLQUFLLEdBQUksRUFBRSxFQUN2QixRQUFRLE1BQU0sRUFBWSxLQUFLO0NBQUksQ0FBQyxFQUUvQixHQUFTLEVBQVEsS0FBSyxDQUFDLENBQzlCLENDdkJBLE1BQU0sR0FBcUIsSUFBSSxJQUFJLENBQWMsRUFFakQsU0FBZ0IsR0FDZCxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ3lCLENBQ3pCLElBQU0sRUFBMEIsSUFBSSxJQUNsQyxHQUE0QixFQUFNLEVBQWMsRUFBYSxFQUFnQixDQUFTLENBQ3hGLEVBQ0EsTUFBUSxJQUFPLEdBQWMsQ0FBRSxHQUFLLEdBQXVCLEVBQUksQ0FBdUIsQ0FDeEYsQ0FHQSxTQUFTLEdBQXVCLEVBQVksRUFBNkIsQ0FDdkUsR0FBSSxFQUFNLElBQUksQ0FBRSxFQUFHLE1BQU8sR0FDMUIsSUFBSyxJQUFJLEVBQWEsRUFBRyxRQUFRLEdBQUcsRUFBRyxJQUFlLEdBQUksRUFBYSxFQUFHLFFBQVEsSUFBSyxFQUFhLENBQUMsRUFDbkcsR0FBSSxFQUFNLElBQUksRUFBRyxNQUFNLEVBQUcsQ0FBVSxDQUFDLEVBQUcsTUFBTyxHQUVqRCxNQUFPLEVBQ1QsQ0FFQSxTQUFTLEdBQ1AsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNVLENBQ1YsSUFBTSxFQUFlLENBQUMsR0FBSSxFQUFLLFVBQVksQ0FBQyxDQUFFLENBQUMsQ0FBQyxJQUFLLEdBQVMsRUFBSyxTQUFTLENBQUMsRUFDekUsRUFBWSxlQUFlLG1CQUM3QixFQUFhLEtBQUssZUFBZSxFQUduQyxFQUFhLEtBQ1gsR0FBRyxPQUFPLEtBQUssRUFBWSxjQUFnQixDQUFDLENBQUMsRUFDN0MsR0FBRyxPQUFPLEtBQUssRUFBWSxrQkFBb0IsQ0FBQyxDQUFDLEVBQ2pELEdBQUcsT0FBTyxLQUFLLEVBQVksc0JBQXdCLENBQUMsQ0FBQyxDQUN2RCxFQUNBLElBQU0sRUFBZ0IsRUFBSyxRQUFRLENBQWMsRUFDakQsR0FBSSxFQUFHLFdBQVcsRUFBSyxLQUFLLEVBQUssUUFBUSxDQUFhLEVBQUcsY0FBYyxDQUFDLEVBQUcsQ0FDekUsSUFBTSxFQUFjLEVBQUcsWUFBWSxFQUFlLENBQUUsY0FBZSxFQUFLLENBQUMsRUFDekUsSUFBSyxJQUFNLEtBQWMsRUFBYSxDQUNwQyxHQUFJLENBQUMsRUFBVyxZQUFZLEVBQUcsU0FFL0IsSUFBTSxFQUFrQixFQUFLLEtBQUssRUFBZSxFQUFXLEtBQU0sY0FBYyxFQUNoRixHQUFJLENBQUMsRUFBRyxXQUFXLENBQWUsRUFBRyxTQUVyQyxJQUFNLEVBQWdDLEtBQUssTUFBTSxFQUFHLGFBQWEsRUFBaUIsTUFBTSxDQUFDLEVBQ3JGLEVBQVksZUFBZSxFQUFpQixNQUFRLEtBQ3RELEVBQWEsS0FDWCxHQUFHLE9BQU8sS0FBSyxFQUFpQixjQUFnQixDQUFDLENBQUMsRUFDbEQsR0FBRyxPQUFPLEtBQUssRUFBaUIsa0JBQW9CLENBQUMsQ0FBQyxFQUN0RCxHQUFHLE9BQU8sS0FBSyxFQUFpQixzQkFBd0IsQ0FBQyxDQUFDLENBQzVELENBRUosQ0FDRixDQUlBLElBQU0sR0FEc0IsSUFBaUIsWUFBYyxJQUFpQixjQUMvQixFQUFZLElBQUksRUFBVSxHQUFLLElBQUEsR0FDNUUsT0FBTyxFQUFnQixFQUFhLE9BQVEsR0FBUyxDQUFDLEVBQUssV0FBVyxDQUFhLENBQUMsRUFBSSxDQUMxRixDQUVBLFNBQVMsR0FBYyxFQUFxQixDQUMxQyxPQUFPLEVBQUcsV0FBVyxPQUFPLEdBQUssR0FBbUIsSUFBSSxDQUFFLENBQzVELENDN0VBLE1BQU0sR0FBdUIsQ0FBQyxPQUFRLE9BQVEsTUFBTyxPQUFRLE9BQVEsT0FBUSxNQUFPLE1BQU0sRUFFMUYsU0FBZ0IsRUFBc0IsRUFBcUIsQ0FDekQsT0FDRSxHQUFxQixLQUFNLEdBQWMsRUFBRyxTQUFTLENBQVMsQ0FBQyxHQUFLLENBQUMsRUFBRyxXQUFXLElBQUksR0FBSyxDQUFDLEdBQWtCLENBQUUsQ0FFckgsQ0FFQSxTQUFTLEdBQWtCLEVBQXFCLENBQzlDLE9BQU8sRUFBRyxTQUFTLGdCQUFnQixHQUFLLEVBQUcsU0FBUyxrQkFBa0IsQ0FDeEUsQ0FFQSxTQUFnQixFQUFnQixFQUFZLEVBQXdELENBQ2xHLElBQU0sRUFBTyxHQUFjLENBQUUsRUFDdkIsRUFBYSxHQUFvQixDQUFFLEVBQ25DLEVBQU0sRUFBVSxFQUFJLEVBQU0sQ0FBRSxPQUFNLFlBQVcsQ0FBQyxFQUNwRCxHQUFJLENBQUMsRUFBYyxDQUFHLEVBQUcsT0FBTyxFQUNoQyxHQUFJLEVBQUcsU0FBUyxLQUFLLEdBQUssSUFBZSxjQUFlLENBQ3RELElBQU0sRUFBYyxFQUFVLEVBQUksRUFBTSxDQUFFLE9BQU0sV0FBWSxVQUFXLENBQUMsRUFDeEUsR0FBSSxDQUFDLEVBQWMsQ0FBVyxFQUFHLE9BQU8sQ0FDMUMsQ0FFRixDQUVBLFNBQVMsRUFBYyxFQUE0QyxDQUNqRSxPQUFPLEVBQUksT0FBTyxLQUFNLEdBQVUsRUFBTSxXQUFhLE9BQU8sQ0FDOUQsQ0FFQSxTQUFTLEdBQWMsRUFBeUMsQ0FJOUQsT0FISSxFQUFHLFNBQVMsTUFBTSxFQUFVLE1BQzVCLEVBQUcsU0FBUyxLQUFLLEdBQUssRUFBRyxTQUFTLE1BQU0sR0FBSyxFQUFHLFNBQVMsTUFBTSxFQUFVLEtBQ3pFLEVBQUcsU0FBUyxNQUFNLEVBQVUsTUFDekIsSUFDVCxDQUVBLFNBQVMsR0FBb0IsRUFBd0MsQ0FDbkUsT0FBTyxFQUFHLFNBQVMsTUFBTSxHQUFLLEVBQUcsU0FBUyxNQUFNLEVBQUksV0FBYSxhQUNuRSxDQVNBLFNBQWdCLEVBQW1CLEVBQTBCLENBQzNELE9BQVEsRUFBWSxFQUFLLE9BQVMsQ0FBQyxFQUFBLENBQ2hDLFFBQVMsR0FBUSxDQUNoQixJQUFNLEVBQVEsRUFBSyxHQUNuQixPQUFPLE1BQU0sUUFBUSxDQUFLLEVBQUksRUFBUSxDQUFDLENBQUssQ0FDOUMsQ0FBQyxDQUFDLENBQ0QsT0FBUSxHQUE0QixFQUFVLENBQUssQ0FBQyxDQUN6RCxDQUVBLFNBQWdCLEVBQW1CLEVBQWUsRUFBa0MsQ0FDbEYsSUFBTSxFQUFRLEVBQUssR0FDbkIsT0FBTyxFQUFVLENBQUssRUFBSSxFQUFRLElBQUEsRUFDcEMsQ0FFQSxTQUFnQixFQUFvQixFQUFlLEVBQXdCLENBQ3pFLElBQU0sRUFBUSxFQUFLLEdBQ25CLE9BQU8sTUFBTSxRQUFRLENBQUssRUFBSSxFQUFNLE9BQVEsR0FBMEIsRUFBVSxDQUFJLENBQUMsRUFBSSxDQUFDLENBQzVGLENBRUEsU0FBZ0IsRUFBVSxFQUFrQyxDQUMxRCxNQUFPLENBQUMsQ0FBQyxHQUFTLE9BQU8sR0FBVSxVQUFZLE9BQVEsRUFBa0IsTUFBUyxRQUNwRixDQy9EQSxTQUFnQixHQUFrQixFQUFjLEVBQUssVUFBb0IsQ0FFdkUsR0FBSSxDQUFDLEVBQUssU0FBUyxHQUFHLEVBQUcsTUFBTyxHQUVoQyxJQUFNLEVBQU0sRUFBZ0IsRUFBSSxDQUFJLEVBR3BDLE1BREEsQ0FBSyxHQUNFLEVBQVUsRUFBSSxPQUFPLEdBQUssR0FBaUIsRUFBSSxPQUFPLENBQy9ELENBRUEsU0FBUyxHQUFpQixFQUF3QixDQUVoRCxPQURJLEVBQUssT0FBUyxhQUNYLEVBQW1CLENBQUksQ0FBQyxDQUFDLEtBQU0sR0FBVSxHQUFpQixDQUFLLENBQUMsQ0FDekUsQ0NOQSxTQUFnQixJQUE0RCxDQUMxRSxHQUFNLENBQUUsT0FBUSxRQUNoQixHQUFJLEVBQUksV0FBYSxhQUFjLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUyxPQUFRLE1BQU0sQ0FBQyxFQUMzRSxHQUFJLEVBQUksV0FBYSxPQUFRLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUyxRQUFTLE9BQVEsTUFBTSxDQUFDLENBRWhGLENBRUEsU0FBZ0IsR0FBb0IsRUFBc0MsQ0FDeEUsTUFBTyxDQUNMLEtBQU0saUJBQ04sVUFBVSxFQUFNLEVBQUksQ0FDYixLQUFzQixDQUFFLEdBR3hCLGNBQWMsS0FBSyxDQUFJLEVBRTVCLE9BQU8sR0FBYyxFQUFNLEVBQUksQ0FBZSxDQUNoRCxDQUNGLENBQ0YsQ0FFQSxTQUFTLEdBQWMsRUFBYyxFQUFZLEVBQWlGLENBQ2hJLElBQU0sRUFBTSxFQUFnQixFQUFJLENBQUksRUFDcEMsR0FBSSxDQUFDLEdBQU8sQ0FBQyxFQUFVLEVBQUksT0FBTyxFQUFHLE9BRXJDLElBQU0sRUFBYyxJQUFJLEVBQVksQ0FBSSxFQUNsQyxFQUFxQyxDQUFDLEVBRTVDLEdBQTJCLEVBQUksUUFBUyxDQUFDLEVBQUcsQ0FBSyxFQUFHLEVBQWMsQ0FBZSxFQUNqRixJQUFLLElBQU0sS0FBZSxHQUEwQixDQUFZLEVBQzlELEVBQVksVUFBVSxFQUFZLE1BQU8sRUFBWSxJQUFLLEVBQVksS0FBSyxFQUd4RSxLQUFZLFdBQVcsRUFDNUIsTUFBTyxDQUNMLEtBQU0sRUFBWSxTQUFTLEVBQzNCLElBQUssRUFBWSxZQUFZLENBQUUsTUFBTyxFQUFLLENBQUMsQ0FDOUMsQ0FDRixDQWNBLE1BQU0sR0FBeUIsbUJBQ3pCLEdBQXNCLFdBRTVCLFNBQVMsR0FDUCxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ00sQ0FFTixJQUFNLEVBQVEsR0FBZ0IsRUFEZixFQUFVLEdBQUcsRUFDYSxDQUFDLEVBQ3RDLEdBQU8sRUFBTyxLQUFLLENBQUssRUFFeEIsQ0FBQyxFQUFrQixFQUFRLENBQUksR0FBSyxFQUFLLE9BQVMsa0JBQ3BELEdBQThCLEVBQU0sRUFBVyxFQUFjLENBQWUsRUFFMUUsQ0FBQyxFQUFrQixFQUFRLENBQUksR0FBSyxFQUFLLE9BQVMsb0JBQ3BELEdBQWdDLEVBQU0sRUFBVyxFQUFjLENBQWUsRUFHaEYsSUFBTSxFQUFpQixDQUFDLEdBQUcsRUFBVyxDQUFJLEVBQzFDLElBQUssSUFBTSxLQUFTLEVBQW1CLENBQUksRUFDekMsR0FBMkIsRUFBTyxFQUFnQixFQUFRLEVBQWMsQ0FBZSxFQUdyRixHQUFPLEVBQU8sSUFBSSxDQUN4QixDQUVBLFNBQVMsR0FBZ0IsRUFBZSxFQUF1RCxDQUM3RixHQUFJLEVBQUssT0FBUyxVQUNoQixNQUFPLENBQUUsSUFBSyxFQUFLLElBQUssZUFBZ0IsR0FBeUIsQ0FBSSxFQUFHLE1BQU8sRUFBSyxLQUFNLEVBRTVGLEdBQUksRUFBMkIsQ0FBSSxFQUNqQyxNQUFPLENBQUUsSUFBSyxFQUFLLElBQUssZUFBZ0IsR0FBMEIsQ0FBSSxFQUFHLE1BQU8sRUFBSyxLQUFNLEVBRTdGLEdBQUksRUFBSyxPQUFTLGlCQUFrQixDQUNsQyxJQUFNLEVBQWlCLEVBQVMsRUFBMkIsQ0FBTSxFQUFJLEdBQ3JFLE1BQU8sQ0FBRSxJQUFLLEVBQUssSUFBSyxlQUFnQixFQUF1QixFQUFNLEVBQUssR0FBTSxHQUFrQixFQUE0QixDQUFJLEVBQUksTUFBTyxFQUFLLEtBQU0sQ0FDMUosQ0FDQSxHQUFJLEVBQUssT0FBUyxjQUNoQixNQUFPLENBQUUsSUFBSyxFQUFLLElBQUssZUFBZ0IsRUFBeUIsRUFBSyxLQUFLLEVBQUcsTUFBTyxFQUFLLEtBQU0sRUFJbEcsR0FBSSxFQUFLLE9BQVMsZUFBaUIsRUFBSyxPQUFTLGdCQUMvQyxNQUFPLENBQ0wsSUFBSyxFQUFLLElBQ1YsZUFBZ0IsRUFBdUIsRUFBTSxFQUFLLEdBQUssRUFBNEIsQ0FBSSxFQUN2RixNQUFPLEVBQUssS0FDZCxFQUVGLEdBQUksRUFBSyxPQUFTLGdCQUFrQixFQUFLLE9BQVMsa0JBQW9CLEVBQUssT0FBUyxpQkFDbEYsTUFBTyxDQUFFLElBQUssRUFBSyxJQUFLLGVBQWdCLEdBQXNCLENBQUksRUFBRyxNQUFPLEVBQUssS0FBTSxDQUczRixDQUVBLFNBQVMsR0FBeUIsRUFBd0IsQ0FDeEQsSUFBSyxJQUFNLEtBQWEsRUFBb0IsRUFBTSxNQUFNLEVBQ3RELEdBQUksRUFBNkIsRUFBVyxFQUFJLEVBQUcsTUFBTyxHQUU1RCxPQUFPLEVBQTRCLENBQUksQ0FDekMsQ0FFQSxTQUFTLEdBQTBCLEVBQXdCLENBQ3pELEdBQUksRUFBeUIsRUFBSyxFQUFFLEVBQUcsTUFBTyxHQUM5QyxJQUFLLElBQU0sS0FBUyxFQUFvQixFQUFNLFFBQVEsRUFDcEQsR0FBSSxFQUF5QixDQUFLLEVBQUcsTUFBTyxHQUU5QyxNQUFPLEVBQ1QsQ0FFQSxTQUFTLEVBQXVCLEVBQWUsRUFBOEIsQ0FDM0UsSUFBSyxJQUFNLEtBQWEsRUFBb0IsRUFBTSxNQUFNLEVBQ3RELEdBQUksRUFBNkIsRUFBVyxDQUFVLEVBQUcsTUFBTyxHQUVsRSxNQUFPLEVBQ1QsQ0FFQSxTQUFTLEdBQXNCLEVBQXdCLENBQ3JELElBQU0sRUFBYyxFQUFtQixFQUFNLEVBQUssT0FBUyxlQUFpQixPQUFTLE1BQU0sRUFDM0YsTUFBTyxDQUFDLENBQUMsR0FBZSxFQUFZLE9BQVMsdUJBQXlCLEVBQVksT0FBUyxPQUFTLEVBQXFDLENBQVcsQ0FDdEosQ0FFQSxTQUFTLEVBQTRCLEVBQW9DLENBQ3ZFLEdBQUksQ0FBQyxFQUFNLE1BQU8sR0FFbEIsSUFBSyxJQUFNLEtBQVMsRUFBbUIsQ0FBSSxFQUV2QyxTQUFVLElBQ1QsRUFBMkIsQ0FBSyxHQUFLLEVBQU0sT0FBUyxlQUFpQixFQUFNLE9BQVMsb0JBS3JGLEVBQU0sT0FBUyx1QkFDZixFQUFNLE9BQVMsT0FDZixFQUFxQyxDQUFLLEdBSXhDLEVBQTRCLENBQUssR0FBRyxNQUFPLEdBRWpELE1BQU8sRUFDVCxDQUVBLFNBQVMsR0FBd0IsRUFBd0IsQ0FFdkQsT0FESSxFQUFLLGFBQWUsUUFDakIsRUFBb0IsRUFBTSxZQUFZLENBQUMsQ0FBQyxLQUM1QyxHQUFjLEVBQVUsYUFBZSxRQUFVLEVBQXlCLEVBQVUsS0FBSyxDQUM1RixDQUNGLENBRUEsU0FBUyxFQUE2QixFQUFlLEVBQThCLENBQ2pGLElBQU0sRUFBYyxHQUFxQixDQUFJLEdBQUssRUFNbEQsT0FMSSxFQUFZLFVBQVksR0FBYSxHQUNyQyxFQUFZLE9BQVMsb0JBQTRCLEdBQXdCLENBQVcsRUFDcEYsRUFBWSxPQUFTLHVCQUF5QixFQUFZLE9BQVMsbUJBQzlELEVBQXlCLEVBQVksRUFBRSxFQUc5QyxFQUFZLE9BQVMsd0JBQ3BCLEdBQWMsRUFBWSxPQUFTLFFBQ3BDLEVBQXFDLENBQVcsQ0FFcEQsQ0FFQSxTQUFTLEVBQXFDLEVBQXdCLENBQ3BFLE9BQU8sRUFBb0IsRUFBTSxjQUFjLENBQUMsQ0FBQyxLQUFNLEdBQ3JELEVBQXlCLEVBQW1CLEVBQWEsSUFBSSxDQUFDLENBQ2hFLENBQ0YsQ0FFQSxTQUFTLEVBQXlCLEVBQXlCLENBa0J6RCxPQWpCSyxFQUFVLENBQUssRUFFaEIsRUFBTSxPQUFTLGNBQWdCLEVBQU0sT0FBUyxVQUFrQixHQUNoRSxFQUFNLE9BQVMscUJBQXVCLEVBQU0sT0FBUyxjQUNoRCxFQUF5QixFQUFNLE1BQVEsRUFBTSxRQUFRLEVBRTFELEVBQU0sT0FBUyxzQkFDVixFQUF5QixFQUFNLFNBQVMsRUFFN0MsRUFBTSxPQUFTLGVBQ1YsRUFBb0IsRUFBTyxVQUFVLENBQUMsQ0FBQyxLQUFNLEdBQVksRUFBeUIsQ0FBTyxDQUFDLEVBRS9GLEVBQU0sT0FBUyxpQkFDVixFQUFvQixFQUFPLFlBQVksQ0FBQyxDQUFDLEtBQU0sR0FDcEQsRUFBeUIsRUFBUyxPQUFTLEVBQVMsUUFBUSxDQUM5RCxFQWY0QixFQWtCaEMsQ0FFQSxTQUFTLEVBQTJCLEVBQXdCLENBQzFELE9BQU8sRUFBSyxPQUFTLHVCQUF5QixFQUFLLE9BQVMsc0JBQXdCLEVBQUssT0FBUyx5QkFDcEcsQ0FFQSxTQUFTLEVBQWtCLEVBQXdCLEVBQXdCLENBQ3pFLE9BQU8sRUFBTyxLQUFNLEdBQVUsRUFBTSxnQkFBa0IsRUFBTSxPQUFTLEVBQUssT0FBUyxFQUFLLEtBQU8sRUFBTSxHQUFHLENBQzFHLENBRUEsU0FBUyxHQUNQLEVBQ0EsRUFDQSxFQUNBLEVBQ00sQ0FDTixJQUFNLEVBQVMsRUFBVSxHQUFHLEVBQUUsRUFDeEIsRUFBUyxFQUFtQixFQUFNLFFBQVEsRUFDNUMsS0FBSyxXQUFhLEdBQ3RCLElBQUksQ0FBQyxHQUFVLENBQUMsRUFBd0IsRUFBUSxDQUFlLEVBQUcsQ0FDNUQsR0FBVSxHQUE0QixFQUFRLENBQWUsR0FDL0QsRUFBYSxLQUFLLENBQUUsTUFBTyxFQUFLLE1BQU8sSUFBSyxFQUFLLElBQUssTUFBTyxFQUEyQixFQUFNLENBQVMsQ0FBRSxDQUFDLEVBRTVHLE1BQ0YsQ0FFSSxHQUFRLE9BQVMsc0JBQ25CLEVBQWEsS0FBSyxDQUFFLE1BQU8sRUFBTyxNQUFPLElBQUssRUFBTyxJQUFLLE1BQU8sR0FBSSxDQUFDLEVBRXRFLEVBQWEsS0FBSyxDQUFFLE1BQU8sRUFBSyxNQUFPLElBQUssRUFBSyxJQUFLLE1BQU8sR0FBa0MsRUFBTSxDQUFTLENBQUUsQ0FBQyxDQUxuSCxDQU9GLENBRUEsU0FBUyxHQUNQLEVBQ0EsRUFDQSxFQUNBLEVBQ00sQ0FDTixJQUFNLEVBQVMsRUFBVSxHQUFHLEVBQUUsRUFDeEIsRUFBYyxFQUFVLEdBQUcsRUFBRSxFQUMvQixNQUFDLEVBQXdCLEVBQU0sQ0FBZSxHQUFLLEdBQVEsT0FBUyxzQkFDcEUsR0FBUSxPQUFTLGtCQUFvQixFQUFPLFNBQVcsR0FBUSxFQUFPLFdBQWEsS0FDbkYsSUFBMEIsRUFBTSxFQUFRLENBQVcsRUFFdkQsSUFBSSxHQUFRLE9BQVMsd0JBQTBCLEVBQU8sT0FBUyxFQUFNLENBQ25FLElBQU0sRUFBUSxFQUFtQixFQUFRLE9BQU8sRUFDNUMsR0FDRixFQUFhLEtBQUssQ0FBRSxNQUFPLEVBQU0sTUFBTyxJQUFLLEVBQU0sSUFBSyxNQUFPLEVBQTJCLEVBQU8sQ0FBUyxDQUFFLENBQUMsRUFFL0csTUFDRixDQUVBLEVBQWEsS0FBSyxDQUFFLE1BQU8sRUFBSyxNQUFPLElBQUssRUFBSyxJQUFLLE1BQU8sRUFBMkIsRUFBTSxDQUFTLENBQUUsQ0FBQyxDQUYxRyxDQUdGLENBRUEsU0FBUyxHQUFrQyxFQUFlLEVBQThCLENBQ3RGLE9BQU8sRUFBK0IsRUFBTSxDQUFTLEVBQUksSUFBSSxLQUF3QixFQUN2RixDQUVBLFNBQVMsRUFBMkIsRUFBZSxFQUE4QixDQUMvRSxPQUFPLEVBQStCLEVBQU0sQ0FBUyxFQUFJLElBQUksS0FBMkIsRUFDMUYsQ0FFQSxTQUFTLEVBQStCLEVBQWUsRUFBK0IsQ0FDcEYsSUFBTSxFQUFpQixFQUFVLGNBQWUsR0FBYSxFQUFTLE9BQVMscUJBQXFCLEVBQ3BHLEdBQUksRUFBaUIsRUFBRyxNQUFPLEdBQy9CLElBQU0sRUFBWSxFQUFVLEdBQzVCLEdBQUksQ0FBQyxFQUFXLE1BQU8sR0FDdkIsSUFBTSxFQUFrQixFQUFVLEVBQWlCLEdBQ25ELE9BQU8sRUFBVSxRQUFVLEVBQUssT0FBUyxHQUFvQixDQUFlLENBQzlFLENBRUEsU0FBUyxHQUFvQixFQUFvQyxDQUcvRCxPQUNFLEdBQU0sT0FBUyxXQUNmLEdBQU0sT0FBUyxrQkFDZixHQUFNLE9BQVMsZUFDZixHQUFNLE9BQVMsY0FDZixHQUFNLE9BQVMsZUFFbkIsQ0FFQSxTQUFTLEdBQ1AsRUFDQSxFQUNBLEVBQ1MsQ0FLVCxPQUpJLEdBQVEsT0FBUyxvQkFBc0IsRUFBTyxXQUFhLElBQzFELEdBQVEsT0FBUyxrQkFBb0IsR0FBUSxPQUFTLG1CQUFxQixFQUFPLE9BQVMsR0FDNUYsR0FBUSxPQUFTLGdCQUNqQixHQUFRLE9BQVMscUJBQXVCLEVBQU8sT0FBUyxHQUNyRCxHQUFRLE9BQVMsWUFBYyxFQUFPLFFBQVUsR0FBUSxHQUFhLE9BQVMsZUFDdkYsQ0FFQSxTQUFTLEVBQXdCLEVBQWUsRUFBdUMsQ0FDckYsR0FBSSxFQUFLLE9BQVMsbUJBQW9CLE1BQU8sR0FFN0MsSUFBTSxFQUFTLEVBQW1CLEVBQU0sUUFBUSxFQUMxQyxFQUFXLEVBQW1CLEVBQU0sVUFBVSxFQUtwRCxPQUpJLEVBQUssV0FBYSxJQUNsQixDQUFDLEdBQVUsQ0FBQyxHQUFZLEVBQTBCLEVBQU0sRUFBVSxDQUFlLEVBQVUsR0FDM0YsRUFBMEIsQ0FBTSxFQUFVLEdBRzVDLEVBQU8sT0FBUyxvQkFDaEIsRUFBMEIsRUFBbUIsRUFBUSxRQUFRLENBQUMsR0FFOUQsRUFBSyxXQUFhLElBQ2xCLEVBQVMsT0FBUyxlQUNqQixFQUFTLE9BQVMsUUFBVSxFQUFTLE9BQVMsUUFFbkQsQ0FFQSxTQUFTLEdBQTRCLEVBQWUsRUFBdUMsQ0FDekYsR0FBSSxFQUFLLE9BQVMsbUJBQW9CLE1BQU8sR0FFN0MsSUFBTSxFQUFTLEVBQW1CLEVBQU0sUUFBUSxFQUMxQyxFQUFXLEVBQW1CLEVBQU0sVUFBVSxFQUdwRCxHQUZJLENBQUMsR0FBVSxDQUFDLEdBQVksRUFBTyxPQUFTLG9CQUN4QyxFQUFLLFdBQWEsSUFBUSxFQUFTLE9BQVMsY0FBZ0IsRUFBUyxPQUFTLFFBQzlFLENBQUMsRUFBMEIsRUFBbUIsRUFBUSxRQUFRLENBQUMsRUFBRyxNQUFPLEdBQzdFLElBQU0sRUFBZ0IsRUFBbUIsRUFBUSxVQUFVLEVBQzNELE1BQU8sQ0FBQyxDQUFDLEdBQWlCLENBQUMsRUFBMEIsRUFBUSxFQUFlLENBQWUsQ0FDN0YsQ0FFQSxTQUFTLEVBQ1AsRUFDQSxFQUNBLEVBQ1MsQ0FFVCxPQUFPLEVBQWlCLFdBQWEsSUFBUSxFQUFTLE9BQVMsY0FBZ0IsRUFBZ0IsSUFBSSxFQUFTLElBQWMsQ0FDNUgsQ0FFQSxTQUFTLEVBQTBCLEVBQW9DLENBQ3JFLE9BQU8sR0FBTSxPQUFTLGNBQWdCLEVBQUssT0FBUyxTQUN0RCxDQUVBLFNBQVMsR0FBMEIsRUFBMEQsQ0FDM0YsSUFBTSxFQUFpQyxDQUFDLEVBQ3hDLElBQUssSUFBTSxLQUFlLEVBQWEsVUFBVSxFQUFHLElBQU0sRUFBRSxNQUFRLEVBQUUsT0FBUyxFQUFFLElBQU0sRUFBRSxHQUFHLEVBQ3RGLEVBQVMsS0FBTSxHQUFTLEVBQUssT0FBUyxFQUFZLE9BQVMsRUFBWSxLQUFPLEVBQUssR0FBRyxHQUMxRixFQUFTLEtBQUssQ0FBVyxFQUUzQixPQUFPLEVBQVMsVUFBVSxFQUFHLElBQU0sRUFBRSxNQUFRLEVBQUUsS0FBSyxDQUN0RCxDQUVBLFNBQVMsR0FBcUIsRUFBb0MsQ0FDNUQsS0FBSyxPQUFTLDBCQUE0QixFQUFLLE9BQVMsMkJBQzVELE9BQU8sRUFBbUIsRUFBTSxhQUFhLENBQy9DLENDdldBLFNBQWdCLElBQXVDLENBQ3JELElBQU0sRUFBa0MsQ0FBQyxFQUNuQyxFQUF5QixHQUFpQyxFQUtoRSxPQUpJLEdBQ0YsRUFBUSxLQUFLLEdBQW9CLENBQXNCLENBQUMsRUFFMUQsRUFBUSxLQUFLLEdBQXNCLEVBQUcsR0FBVyxDQUFDLEVBQzNDLENBQ1QsQ0FFQSxTQUFTLElBQWdDLENBQ3ZDLElBQU0sRUFBa0IsRUFBSyxLQUFLLEVBQW1CLEVBQUcsa0JBQWtCLEVBQzFFLE1BQU8sQ0FDTCxLQUFNLG1CQUNOLE1BQU0sVUFBVSxFQUFNLEVBQUksQ0FDeEIsR0FBSSxDQUFDLEVBQXNCLENBQUUsR0FBSyxDQUFDLEdBQWtCLENBQUksRUFDdkQsT0FHRixHQUFNLENBQUUsa0JBQW1CLE1BQU0sT0FBTyxlQVlsQyxFQUFTLE1BQU0sRUFBZSxFQUFNLENBVnhDLE9BQVEsQ0FDTixLQUFNLFdBQ04sc0JBQXVCLEdBQ3ZCLDRCQUE2QixHQUM3QixrQkFBbUIsRUFDckIsRUFDQSxXQUFZLEVBQ1osU0FBVSxFQUNWLFdBQVksRUFFa0MsQ0FBQyxFQUM1QyxNQUFRLEtBRWIsTUFBTyxDQUNMLEtBQU0sRUFBTyxLQUNiLElBQUssRUFBTyxHQUNkLENBQ0YsQ0FDRixDQUNGLENBRUEsU0FBUyxJQUFxQixDQUM1QixNQUFPLENBQ0wsS0FBTSxPQUNOLE1BQU0sS0FBSyxFQUFJLENBQ2IsR0FBSSxDQUFDLEVBQUcsU0FBUyxNQUFNLEdBQUssQ0FBQyxFQUFHLFNBQVMsTUFBTSxFQUFHLE9BRWxELElBQU0sRUFBVSxNQUFNLEVBQUcsU0FBUyxTQUFTLEVBQUksTUFBTSxFQUNyRCxNQUFPLENBQ0wsS0FBTSxrQkFBa0IsS0FBSyxVQUFVLENBQU8sRUFBRSxHQUNoRCxXQUFZLElBQ2QsQ0FDRixDQUNGLENBQ0YsQ0MxREEsTUFBTSxHQUFVLEVBQWMsWUFBWSxHQUFHLEVBRTdDLGVBQXNCLEVBQ3BCLEVBQ0EsRUFDQSxFQUNBLEVBQ2tCLENBQ2xCLElBQU0sRUFBaUIsRUFBZSxDQUFrQixFQUN4RCxHQUFJLENBQUMsRUFBZ0IsTUFBVSxNQUFNLG1DQUFtQyxFQUFtQixFQUFFLEVBQ3pGLEVBQUssU0FDUCxRQUFRLEtBQUssdUJBQXdCLENBQWMsRUFHckQsSUFBTSxFQUE2RCxDQUFDLEVBQ2hFLEVBQWEsRUFBSyxLQUFLLEVBQVksRUFBSyxTQUFTLENBQWtCLEVBQUcsS0FBSyxFQUMvRSxHQUFJLEVBQUcsV0FBVyxDQUFVLEVBQUcsQ0FHN0IsRUFBUyxJQUFBLEdBQ1QsSUFBTSxFQUFnQixFQUFLLFFBQVEsQ0FBa0IsRUFDL0MsRUFBVSxNQUFNLEVBQUcsU0FBUyxRQUFRLEVBQWUsQ0FBRSxjQUFlLEVBQUssQ0FBQyxFQUNoRixFQUFxQixFQUFLLFFBQVEsQ0FBa0IsRUFDcEQsSUFBSyxJQUFNLEtBQVUsRUFBUyxDQUM1QixHQUFJLENBQUMsRUFBTyxZQUFZLEVBQUcsU0FFM0IsSUFBTSxFQUFpQixFQUFLLFFBQVEsRUFBZSxFQUFPLElBQUksRUFDOUQsR0FBSSxJQUFtQixFQUFvQixTQUUzQyxJQUFNLEVBQWEsRUFBZSxDQUFjLEVBQzFDLEVBQVMsRUFBSyxLQUFLLEVBQVksRUFBTyxLQUFNLEtBQUssRUFDbkQsR0FBYyxFQUFHLFdBQVcsQ0FBTSxHQUNwQyxFQUFTLEtBQUssQ0FBQyxFQUFnQixFQUFZLEVBQVEsSUFBQSxFQUFTLENBQUMsQ0FFakUsQ0FDRixLQUNFLEdBQWEsRUFFZixFQUFTLEtBQUssQ0FBQyxFQUFvQixFQUFnQixFQUFZLENBQU0sQ0FBQyxFQUV0RSxJQUFJLEVBQWUsR0FDbkIsSUFBSyxHQUFNLENBQUMsRUFBZ0IsRUFBWSxFQUFRLEtBQWtCLEVBQ2hFLElBQWlCLE1BQU0sR0FBUSxFQUFNLEVBQWdCLEVBQVksRUFBUSxDQUFhLEVBRXhGLE9BQU8sQ0FDVCxDQUVBLGVBQWUsR0FDYixFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ2tCLENBQ2QsRUFBSyxTQUNQLFFBQVEsS0FBSyxZQUFhLEVBQWdCLEVBQVksRUFBUSxDQUFNLEVBS3RFLElBQU0sRUFBaUIsRUFBSyxLQUFLLEVBQWdCLGtCQUFrQixRQUFRLElBQUksTUFBTSxFQUNyRixHQUFJLENBQ0YsTUFBTSxFQUFHLFNBQVMsVUFDaEIsRUFDQSxLQUFLLFVBQVUsTUFBTSxHQUE2QixFQUFnQixFQUFZLEVBQVEsQ0FBTSxFQUFHLElBQUEsR0FBVyxDQUFDLENBQzdHLEVBQ0EsSUFBTSxFQUFNLEVBQWMsVUFBVSxRQUFRLFNBQVUsQ0FBQyxHQUFZLEVBQUcsS0FBTSxDQUFjLEVBQUcsQ0FDM0YsSUFBSyxFQUNMLE1BQU8sU0FDVCxDQUFDLEVBQ0QsR0FBSSxFQUFJLE1BQU8sTUFBTSxFQUFJLE1BQ3pCLE9BQU8sRUFBSSxTQUFXLENBQ3hCLFFBQVUsQ0FDUixNQUFNLEVBQUcsU0FBUyxHQUFHLEVBQWdCLENBQUUsTUFBTyxFQUFLLENBQUMsQ0FDdEQsQ0FDRixDQUVBLGVBQWUsR0FDYixFQUNBLEVBQ0EsRUFDQSxFQUNrQyxDQUNsQyxJQUFNLEVBQTJDLENBRy9DLFVBQVcsR0FDWCxZQUFhLEdBRWIsZUFBZ0IsRUFDaEIsb0JBQXFCLEdBQ3JCLFlBQWEsR0FDYixPQUFRLEdBQ1IsY0FBZSxHQUNmLFNBR0EsUUFBUyxLQUNYLEVBQ0EsR0FBSSxNQUFNLEdBQXVCLEVBQUssS0FBSyxFQUFnQixLQUFLLENBQUMsRUFBRyxDQUNsRSxJQUFNLEVBQWUsR0FBaUIsQ0FBYyxFQUM5QyxFQUFRLEVBQWUsTUFBTSxHQUFvQixDQUFZLEVBQUksQ0FBQyxFQUNwRSxFQUFNLFNBQVMsTUFBTSxJQUN2QixFQUFnQixNQUFRLEVBRTVCLENBQ0EsTUFBTyxDQUNMLGtCQUNBLFFBQVMsR0FBcUIsRUFBZ0IsQ0FBVSxFQUt4RCxHQUFJLEdBQVEsT0FDUixDQUNFLFFBQVMsQ0FBQyxFQUNWLE1BQU8sRUFBTyxJQUFLLEdBQVUsRUFBSyxRQUFRLEVBQWdCLENBQUssQ0FBQyxDQUFDLFdBQVcsRUFBSyxJQUFLLEdBQUcsQ0FBQyxFQUMxRixRQUFTLENBQUMsZ0JBQWlCLGlCQUFrQixnQkFBZ0IsQ0FDL0QsRUFDQSxDQUFFLFFBQVMsQ0FBQyxVQUFVLENBQUUsQ0FDOUIsQ0FDRixDQUVBLFNBQVMsRUFBZSxFQUFxQyxDQUMzRCxJQUFJLEVBQWlCLEVBQUssUUFBUSxDQUFPLEVBQ3pDLE9BQWEsQ0FDWCxJQUFNLEVBQWEsRUFBSyxLQUFLLEVBQWdCLGVBQWUsRUFDNUQsR0FBSSxFQUFHLFdBQVcsQ0FBVSxFQUFHLE9BQU8sRUFFdEMsSUFBTSxFQUFnQixFQUFLLFFBQVEsQ0FBYyxFQUNqRCxHQUFJLElBQWtCLEVBQWdCLE9BQ3RDLEVBQWlCLENBQ25CLENBQ0YsQ0FFQSxTQUFTLElBQXNCLENBRzdCLElBQU0sRUFBa0IsR0FBUSxRQUFRLHlCQUF5QixFQUNqRSxPQUFPLEVBQUssS0FBSyxFQUFLLFFBQVEsQ0FBZSxFQUFHLE1BQU8sUUFBUSxDQUNqRSxDQUVBLGVBQWUsR0FBdUIsRUFBbUMsQ0FDdkUsR0FBSSxDQUNGLElBQU0sRUFBVSxNQUFNLEVBQUcsU0FBUyxRQUFRLEVBQVMsQ0FBRSxjQUFlLEVBQUssQ0FBQyxFQUMxRSxJQUFLLElBQU0sS0FBVSxFQUFTLENBQzVCLElBQU0sRUFBWSxFQUFLLEtBQUssRUFBUyxFQUFPLElBQUksRUFDaEQsR0FBSSxFQUFPLFlBQVksRUFDakIsSUFBQSxNQUFNLEdBQXVCLENBQVMsRUFBRyxNQUFPLEVBQUEsTUFDL0MsR0FBSSxlQUFlLEtBQUssRUFBTyxJQUFJLElBQU0sTUFBTSxFQUFHLFNBQVMsU0FBUyxFQUFXLE1BQU0sRUFBQSxDQUFHLFNBQVMsT0FBTyxFQUM3RyxNQUFPLEVBRVgsQ0FDRixNQUFRLENBQ04sTUFBTyxFQUNULENBQ0EsTUFBTyxFQUNULENBRUEsU0FBUyxHQUFpQixFQUFxQyxDQUM3RCxJQUFJLEVBQWlCLEVBQUssUUFBUSxDQUFPLEVBQ3pDLE9BQWEsQ0FDWCxJQUFNLEVBQWUsRUFBSyxLQUFLLEVBQWdCLGVBQWdCLFFBQVEsRUFDdkUsR0FBSSxFQUFHLFdBQVcsQ0FBWSxFQUFHLE9BQU8sRUFFeEMsSUFBTSxFQUFnQixFQUFLLFFBQVEsQ0FBYyxFQUNqRCxHQUFJLElBQWtCLEVBQWdCLE9BQ3RDLEVBQWlCLENBQ25CLENBQ0YsQ0FFQSxlQUFlLEdBQW9CLEVBQTZDLENBQzlFLEdBQUksQ0FFRixPQUFPLE1BRGUsRUFBRyxTQUFTLFFBQVEsRUFBa0IsQ0FBRSxjQUFlLEVBQUssQ0FBQyxFQUFBLENBQ3BFLE9BQVEsR0FBVyxFQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSyxHQUFXLEVBQU8sSUFBSSxDQUNyRixNQUFRLENBQ04sTUFBTyxDQUFDLENBQ1YsQ0FDRixDQUlBLFNBQVMsR0FBcUIsRUFBcUIsRUFBNEIsQ0FDN0UsSUFBTSxFQUFlLEVBQUssU0FBUyxFQUFhLENBQVUsQ0FBQyxDQUFDLFdBQVcsRUFBSyxJQUFLLEdBQUcsRUFDcEYsT0FBTyxFQUFhLFdBQVcsR0FBRyxFQUFJLEVBQWUsS0FBSyxHQUM1RCxDQzFLQSxNQUFNLEdBQXdCLENBQzVCLGVBQWdCLENBQ2QsT0FBUSxDQUFDLE9BQVEsTUFBTSxFQUN2QixNQUFPLENBQUMsTUFBTyxNQUFPLE1BQU0sRUFDNUIsT0FBUSxDQUFDLE9BQVEsTUFBTyxNQUFNLEVBQzlCLE9BQVEsQ0FBQyxPQUFRLE1BQU0sQ0FDekIsRUFDQSxXQUFZLENBQUMsT0FBUSxPQUFRLE1BQU8sT0FBUSxPQUFRLE9BQVEsTUFBTyxPQUFRLE9BQU8sQ0FDcEYsRUFFYSxHQUFnRSxDQUMzRSxRQUFTLGdCQUNULFNBQVUsZUFDVixRQUFTLEVBQ1QsTUFBTSxRQUFRLEVBQU0sQ0FDbEIsT0FBTyxFQUFNLEVBQU0sS0FBSyxDQUMxQixDQUNGLEVBRWEsR0FBNEUsQ0FDdkYsUUFBUyxzQkFDVCxTQUFVLHFDQUNWLFFBQVMsR0FDVCxNQUFNLFFBQVEsRUFBTSxDQUNsQixHQUFJLEVBQUssZ0JBQWlCLENBQ3hCLElBQU0sRUFBaUIsRUFBSyxRQUFRLEVBQUssU0FBUyxTQUFTLEdBQUssR0FBRyxFQUM3RCxDQUFDLEVBQWEsR0FBbUIsTUFBTSxFQUFnQixDQUFjLEVBQ3RFLElBQ0gsUUFBUSxNQUFNLGlDQUFpQyxFQUFnQixHQUFHLEVBQ2xFLFFBQVEsS0FBSyxDQUFDLEdBRWhCLE1BQU0sR0FDSixHQUFrQixFQUFNLFFBQVEsSUFBSSxFQUFHLEVBQWdCLElBQUEsR0FBVyxXQUFXLEVBQzdFLEVBQ0EsRUFBSyxVQUNQLENBQ0YsTUFDRSxPQUFPLEVBQU0sRUFBTSxXQUFXLENBRWxDLENBQ0YsRUFFYSxHQUFnRSxDQUMzRSxRQUFTLGdCQUNULFNBQVUsa0NBQ1YsUUFBUyxHQUNULE1BQU0sUUFBUSxFQUFNLENBQ2xCLE9BQU8sRUFBTSxFQUFNLEtBQUssQ0FDMUIsQ0FDRixFQUVBLGVBQXNCLEVBQU0sRUFBcUMsRUFBK0MsQ0FDOUcsUUFBUSxJQUFJLFdBQWEsYUFHekIsSUFBTSxFQUFVLENBQUMsRUFBSyxRQUFVLEVBQUssUUFDL0IsRUFBTSxRQUFRLElBQUksRUFFbEIsRUFBaUIsRUFBSyxRQUFRLEVBQUssU0FBUyxTQUFTLEdBQUssR0FBRyxFQUM3RCxDQUFDLEVBQWEsR0FBbUIsTUFBTSxFQUFnQixDQUFjLEVBQ3RFLElBQ0gsUUFBUSxNQUFNLGlDQUFpQyxFQUFnQixHQUFHLEVBQ2xFLFFBQVEsS0FBSyxDQUFDLEdBR2hCLEVBQWtDLEVBQU0sQ0FBYyxFQUV0RCxJQUFNLEVBQVMsR0FBWSxFQUFNLEVBQUssQ0FBYyxFQUM5QyxFQUFlLEdBQW1CLEVBQWdCLEVBQVEsQ0FBYyxFQUN4RSxFQUFhLEdBQWtCLEVBQU0sRUFBSyxFQUFnQixFQUFRLENBQWMsRUFFbEYsSUFDRixRQUFRLEtBQUssUUFBUyxDQUFJLEVBQzFCLFFBQVEsS0FBSyxtQkFBb0IsQ0FBZSxFQUNoRCxRQUFRLEtBQUsscUJBQXNCLEdBQUcsRUFBYSxJQUFJLEVBQWUsRUFBRSxHQUcxRSxJQUFNLEVBQVksR0FBYSxDQUFXLEVBQ3BDLEVBQWUsRUFBWSxPQUFTLFNBRXRDLElBQ0YsUUFBUSxJQUFJLGlCQUFtQixLQUVqQyxRQUFRLElBQUkseUJBQTJCLEVBQ3ZDLFFBQVEsSUFBSSx1QkFBeUIsRUFFckMsSUFBTSxFQUFrQixvQkFBcUIsR0FBUSxFQUFLLGdCQUN0RCxHQUFtQixFQUFLLFFBQzFCLFFBQVEsTUFBTSxpREFBaUQsRUFDL0QsUUFBUSxLQUFLLENBQUMsR0FHaEIsSUFBTSxFQUFvQixHQUFxQixFQUFNLEVBQWMsRUFBWSxFQUFjLENBQWMsRUFDdkcsR0FDRixRQUFRLEtBQUssaUJBQWtCLENBQWlCLEVBRTlDLEVBQWtCLFNBQVcsSUFDL0IsUUFBUSxNQUFNLGdDQUFnQyxFQUM5QyxRQUFRLEtBQUssQ0FBQyxHQUtoQixJQUFNLEVBQW9CLEVBQUssT0FBTyxPQUFTLEVBQVMsSUFBQSxHQVF4RCxHQU5BLFFBQVEsTUFBTSxDQUFjLEVBQzVCLE1BQU0sRUFBRyxTQUFTLEdBQUcsRUFBWSxDQUFFLFVBQVcsR0FBTSxNQUFPLEVBQUssQ0FBQyxFQUM3RCxJQUFpQixhQUNuQixNQUFNLEdBQWdDLEVBQVksRUFBYSxFQUFLLFVBQVUsRUFHNUUsRUFBaUIsQ0FDZCxFQUFLLFFBQ1IsUUFBUSxLQUNOLEVBQ0UsT0FDQSxpQ0FBaUMsRUFBVSxPQUFRLEVBQUssU0FBUyxFQUFnQixDQUFVLENBQUMsRUFBRSxPQUFPLEVBQWUsS0FDdEgsQ0FDRixFQUVJLE1BQU0sRUFBeUIsRUFBTSxFQUFnQixFQUFZLENBQWlCLEdBQ3RGLFFBQVEsS0FBSyxDQUFDLEVBRWhCLE1BQ0YsQ0FFQSxJQUFNLEVBQTJCLENBQy9CLE9BQVEsQ0FBRSxxQkFBc0IsRUFBTSxFQUN0QyxTQUFVLEdBQXNCLEVBQU0sRUFBYyxFQUFhLEVBQVcsQ0FBYyxFQUMxRixNQUNFLElBQWlCLFlBQWMsR0FBNEIsQ0FBTSxFQUFJLEVBQ3ZFLFFBQVMsR0FBYSxFQUN0QixRQUFTLEdBQ1QsVUFBVyxHQUFvQixFQUFNLENBQWMsRUFDbkQsTUFBTyxFQUFLLE1BQVEsQ0FBRSxZQUFhLEVBQU0sRUFBSSxJQUFBLEVBQy9DLEVBRU0sRUFBc0IsSUFDekIsTUFBTSxRQUFRLENBQUssRUFBSSxFQUFRLENBQUMsQ0FBSyxFQUFBLENBQUcsSUFBSyxHQUFNLEVBQUssU0FBUyxFQUFnQixDQUFDLENBQUMsRUFDaEYsRUFBd0IsR0FBa0QsQ0FDOUUsSUFBTSxFQUFjLEVBQW1CLEVBQWtCLElBQUssR0FBUyxFQUFLLE1BQVEsRUFBSyxLQUFPLEVBQUUsQ0FBQyxFQUNuRyxRQUFRLEtBQ04sRUFDRSxPQUNBLFdBQVcsRUFBVSxPQUFRLEVBQW1CLENBQVUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUMzRSxPQUNBLEVBQVksS0FBSyxJQUFJLENBQ3ZCLEVBQUUsT0FBTyxFQUFlLEtBQzFCLENBQ0YsQ0FDRixFQUNBLEdBQUksRUFBSyxNQUNQLEdBQ0UsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLENBQ0YsTUFDSyxDQUNBLEVBQUssUUFDUixFQUFxQixDQUFNLEVBRzdCLElBQUksRUFDQSxFQUFjLEdBQ2xCLEdBQUksQ0FDRixJQUFNLEVBQVksS0FBSyxJQUFJLEVBQ3JCLEVBQVUsTUFBTSxFQUFTLENBQU8sRUFDdEMsRUFBUyxFQUNULE1BQU0sUUFBUSxJQUFJLEVBQWtCLElBQUssR0FBUyxFQUFRLE1BQU0sQ0FBSSxDQUFDLENBQUMsRUFFakUsRUFBSyxRQUNSLFFBQVEsS0FDTixFQUNFLFFBQ0EsV0FBVyxFQUFtQixFQUFrQixJQUFLLEdBQVMsRUFBSyxNQUFRLEVBQUssS0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQzFGLElBQ0YsRUFBRSxNQUFNLEVBQVUsT0FBUSxFQUFlLEtBQUssSUFBSSxFQUFJLENBQVMsQ0FBQyxHQUNsRSxDQUNGLENBRUosT0FBUyxFQUFPLENBQ2QsRUFBYyxHQUNkLFFBQVEsTUFBTSwwQkFBMkIsQ0FBSyxDQUNoRCxDQUNBLE1BQU0sR0FBUSxNQUFNLEVBQ2hCLEdBQWEsUUFBUSxLQUFLLENBQUMsRUFFM0IsSUFBaUIsWUFBYyxJQUFpQixjQUM1QyxNQUFNLEVBQXlCLEVBQU0sRUFBZ0IsRUFBWSxDQUFpQixHQUN0RixRQUFRLEtBQUssQ0FBQyxFQUdwQixDQUNGLENBRUEsU0FBUyxHQUFvQixFQUFxQyxFQUFzRCxDQUN0SCxNQUFPLENBQ0wsT0FBUSxFQUFxQyxFQUFNLENBQWMsRUFDakUsSUFBSyxZQUNMLE9BQVEsUUFDVixDQUNGLENBRUEsU0FBUyxHQUNQLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNNLENBQ04sSUFBTSxFQUFVLEVBQU0sQ0FBRSxHQUFHLEVBQVMsT0FBUSxDQUFrQixDQUFDLEVBRXpELEVBQVEsS0FBTyxJQUF3QyxDQUMzRCxRQUFRLGVBQWUsb0JBQXFCLENBQXdCLEVBQ3BFLFFBQVEsTUFBTSxlQUFlLE1BQU8sQ0FBZSxFQUNuRCxNQUFNLEVBQVEsTUFBTSxFQUNoQixHQUFNLFFBQVEsS0FBSyxDQUFJLENBQzdCLEVBQ00sRUFBNEIsR0FBeUIsQ0FDekQsUUFBUSxNQUFNLENBQUssRUFDbkIsRUFBVyxDQUFDLENBQ2QsRUFDTSxNQUE4QixDQUNsQyxFQUFXLENBQ2IsRUFDQSxFQUFRLEdBQVMsS0FBSyxFQUFNLENBQUksQ0FBQyxFQUNqQyxRQUFRLEdBQUcsb0JBQXFCLENBQXdCLEVBQ25ELFFBQVEsTUFBTSxRQUNqQixRQUFRLE1BQU0sR0FBRyxNQUFPLENBQWUsRUFDdkMsUUFBUSxNQUFNLE9BQU8sR0FHdkIsRUFBUSxHQUFHLFFBQVMsS0FBTyxJQUFVLENBQ25DLEdBQUksQ0FDRixPQUFRLEVBQU0sS0FBZCxDQUNFLElBQUssUUFDSCxHQUFZLEVBQU0sTUFBTyxFQUFJLEVBQzdCLE1BRUYsSUFBSyxlQUNILEdBQUksRUFBSyxPQUFRLE1BRWpCLEVBQXFCLEdBQWMsRUFBUSxLQUFLLENBQUMsRUFDakQsTUFFRixJQUFLLGFBQ0UsRUFBSyxRQUNSLFFBQVEsS0FDTixFQUNFLFFBQ0EsV0FBVyxFQUFVLE9BQVEsRUFBbUIsRUFBTSxNQUFNLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFDOUUsT0FDQSxFQUFlLEVBQU0sUUFBUSxDQUMvQixHQUNGLENBQ0YsRUFHRSxJQUFpQixZQUFjLElBQWlCLGFBQ2xELE1BQU0sRUFBeUIsRUFBTSxFQUFnQixFQUFZLENBQWlCLEVBRXBGLE1BRUYsSUFBSyxNQUNILEdBQUksRUFBSyxPQUFRLE1BRWpCLFFBQVEsS0FBSyxNQUFNLEdBQWUsSUFBSSxJQUFNLEVBQUUseUJBQXlCLENBRzNFLENBQ0YsT0FBUyxFQUFPLENBRWQsUUFBUSxNQUFNLHVDQUF3QyxDQUFLLENBQzdELFFBQVUsQ0FDSixXQUFZLEdBQVMsRUFBTSxRQUM3QixFQUFXLE9BQU8sTUFBTSxDQUU1QixDQUNGLENBQUMsQ0FDSCxDQUVBLFNBQVMsR0FDUCxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ1EsQ0FDUixJQUFNLEVBQWUsRUFBSyxRQUFRLFNBQVMsRUFDdkMsSUFBaUIsS0FDbkIsUUFBUSxNQUFNLDhCQUE4QixFQUM1QyxRQUFRLEtBQUssQ0FBQyxHQVNoQixJQUFNLEVBQW9CLEVBQWUsRUFBSyxRQUFRLEVBQUssQ0FBWSxFQUFJLEVBQUssS0FBSyxFQUFnQixNQUFNLEVBQ3JHLEVBQWEsRUFBZ0IsQ0FBaUIsRUFHOUMsRUFBaUIsR0FBUSxLQUM1QixHQUFVLEVBQWEsRUFBWSxFQUFnQixDQUFLLENBQUMsR0FBSyxFQUFhLEVBQW1CLENBQUssQ0FDdEcsRUFLQSxHQUpJLElBQ0YsUUFBUSxNQUFNLHlCQUF5QixFQUFXLHFDQUFxQyxFQUFlLEdBQUcsRUFDekcsUUFBUSxLQUFLLENBQUMsR0FFWixDQUFDLEVBQWMsT0FBTyxFQUUxQixJQUFNLEVBQTBCLEVBQWdCLENBQWMsR0FDMUQsRUFBYSxFQUFZLENBQXVCLEdBQUssRUFBYSxFQUFtQixDQUFjLEtBQ3JHLFFBQVEsTUFBTSxjQUFjLEVBQVcsNENBQTRDLEVBQXdCLEdBQUcsRUFDOUcsUUFBUSxLQUFLLENBQUMsR0FHaEIsSUFBTSxFQUFhLEVBQWdCLEVBQUssS0FBSyxFQUF5QixLQUFLLENBQUMsRUFXNUUsT0FWSSxFQUFhLEVBQVksQ0FBVSxHQUFLLEVBQWEsRUFBSyxLQUFLLEVBQWdCLEtBQUssRUFBRyxDQUFpQixLQUMxRyxRQUFRLE1BQU0sY0FBYyxFQUFXLDZDQUE2QyxFQUFXLEdBQUcsRUFDbEcsUUFBUSxLQUFLLENBQUMsR0FJWixJQUFtQixhQUFlLEVBQUcsV0FBVyxFQUFLLEtBQUssRUFBWSxjQUFjLENBQUMsSUFDdkYsUUFBUSxNQUFNLGNBQWMsRUFBVyxpRUFBaUUsRUFDeEcsUUFBUSxLQUFLLENBQUMsR0FFVCxDQUNULENBSUEsU0FBUyxFQUFnQixFQUE0QixDQUNuRCxJQUFNLEVBQXFCLENBQUMsRUFDeEIsRUFBYyxFQUNsQixLQUFPLENBQUMsRUFBRyxXQUFXLENBQVcsR0FBRyxDQUNsQyxFQUFTLFFBQVEsRUFBSyxTQUFTLENBQVcsQ0FBQyxFQUMzQyxJQUFNLEVBQWEsRUFBSyxRQUFRLENBQVcsRUFDM0MsR0FBSSxJQUFlLEVBQWEsTUFDaEMsRUFBYyxDQUNoQixDQUNBLEdBQUksQ0FDRixFQUFjLEVBQUcsYUFBYSxPQUFPLENBQVcsQ0FDbEQsTUFBUSxDQUVSLENBQ0EsT0FBTyxFQUFLLEtBQUssRUFBYSxHQUFHLENBQVEsQ0FDM0MsQ0FFQSxTQUFTLEVBQWEsRUFBb0IsRUFBNEIsQ0FDcEUsSUFBTSxFQUFlLEVBQUssU0FBUyxFQUFZLENBQVMsRUFJeEQsT0FISSxJQUFpQixJQUNyQixDQUFJLEVBQUssV0FBVyxDQUFZLEdBRXpCLElBQWlCLE1BQVEsQ0FBQyxFQUFhLFdBQVcsS0FBSyxFQUFLLEtBQUssQ0FDMUUsQ0FFQSxTQUFTLEdBQTRCLEVBQTBDLENBQzdFLElBQU0sRUFBVSxJQUFJLElBQ3BCLElBQUssR0FBTSxDQUFDLEVBQU8sS0FBVSxFQUFPLFFBQVEsRUFBRyxDQUM3QyxJQUFNLEVBQU8sSUFBVSxFQUFJLFFBQVUsRUFBSyxTQUFTLEVBQU8sRUFBSyxRQUFRLENBQUssQ0FBQyxFQUN2RSxFQUFjLEVBQVEsSUFBSSxDQUFJLEVBQ2hDLElBQ0YsUUFBUSxNQUNOLGlEQUFpRCxFQUFLLEtBQUssRUFBWSxNQUFNLEVBQU0sdUZBQ3JGLEVBQ0EsUUFBUSxLQUFLLENBQUMsR0FFaEIsRUFBUSxJQUFJLEVBQU0sQ0FBSyxDQUN6QixDQUNBLE9BQU8sT0FBTyxZQUFZLENBQU8sQ0FDbkMsQ0FFQSxTQUFTLEdBQWMsRUFBMkMsQ0FHaEUsT0FGSyxFQUNELE9BQU8sR0FBVSxTQUFpQixDQUFDLENBQUssRUFDckMsTUFBTSxRQUFRLENBQUssRUFBSSxFQUFRLE9BQU8sT0FBTyxDQUFLLEVBRnRDLENBQUMsQ0FHdEIsQ0FFQSxTQUFTLEdBQVksRUFBcUMsRUFBYSxFQUFrQyxDQUN2RyxHQUFJLEVBQUssT0FBUyxFQUFLLE1BQU0sT0FBUyxFQUFHLENBQ3ZDLElBQU0sRUFBUyxFQUFLLE1BQU0sUUFBUyxHQUFNLENBQ3ZDLElBQU0sRUFBTSxFQUFFLFNBQVMsRUFDdkIsR0FBSSxDQUFDLEdBQWMsQ0FBRyxFQUFHLE1BQU8sQ0FBQyxFQUFLLFFBQVEsRUFBSyxDQUFHLENBQUMsRUFLdkQsSUFBTSxFQUFVLEVBQ2IsU0FBUyxFQUFJLE1BQU0sRUFBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRyxDQUFFLEtBQUksQ0FBQyxDQUFDLENBQ2hELE9BQ0UsR0FBTSxDQUFDLGdCQUFnQixLQUFLLENBQUMsR0FBSyxFQUFHLFNBQVMsRUFBSyxRQUFRLEVBQUssQ0FBQyxFQUFHLENBQUUsZUFBZ0IsRUFBTSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQzFHLENBQUMsQ0FDQSxLQUFLLENBQUMsQ0FDTixJQUFLLEdBQU0sRUFBSyxRQUFRLEVBQUssQ0FBQyxDQUFDLEVBS2xDLE9BSkksRUFBUSxTQUFXLElBQ3JCLFFBQVEsTUFBTSx1Q0FBdUMsR0FBSyxFQUMxRCxRQUFRLEtBQUssQ0FBQyxHQUVULENBQ1QsQ0FBQyxFQUNELE1BQU8sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFNLENBQUMsQ0FDNUIsQ0FFQSxJQUFNLEVBQWEsRUFBSyxLQUFLLEVBQWdCLEtBQUssRUFDbEQsSUFBSyxJQUFNLElBQU8sQ0FBQyxLQUFNLE1BQU8sTUFBTyxLQUFLLEVBQUcsQ0FDN0MsSUFBTSxFQUFRLEVBQUssS0FBSyxFQUFZLFNBQVMsR0FBSyxFQUNsRCxHQUFJLEVBQUcsV0FBVyxDQUFLLEVBQUcsTUFBTyxDQUFDLENBQUssQ0FDekMsQ0FFQSxRQUFRLE1BQU0sOEJBQThCLEVBQzVDLFFBQVEsS0FBSyxDQUFDLENBQ2hCLENBSUEsU0FBUyxHQUFjLEVBQXdCLENBQzdDLE1BQU8sa0NBQWtDLEtBQUssQ0FBSyxDQUNyRCxDQUVBLFNBQVMsR0FBbUIsRUFBd0IsRUFBa0IsRUFBc0MsQ0FDMUcsT0FBUSxFQUFSLENBQ0UsSUFBSyxNQUNILE1BQU8sV0FFVCxJQUFLLFlBQ0gsTUFBTyxZQUVULElBQUssTUFJSCxPQUhJLEVBQU8sS0FBTSxHQUFVLEVBQU0sU0FBUyxNQUFNLENBQUMsR0FBSyxHQUFrQixDQUFjLEVBQzdFLFlBRUYsTUFFVCxRQUNFLFFBQVEsTUFBTSxpQ0FBbUMsRUFBb0IsS0FBSyxJQUFJLENBQUMsRUFDL0UsUUFBUSxLQUFLLENBQUMsQ0FFbEIsQ0FDRixDQUVBLFNBQVMsR0FBa0IsRUFBaUMsQ0FFMUQsT0FBTyxHQURZLEVBQUssS0FBSyxFQUFnQixLQUNMLENBQUMsQ0FDM0MsQ0FFQSxTQUFTLEdBQXdCLEVBQTBCLENBQ3pELEdBQUksQ0FFRixPQURnQixFQUFHLFlBQVksRUFBUyxDQUFFLGNBQWUsRUFBSyxDQUNqRCxDQUFDLENBQUMsS0FBTSxHQUFVLENBQzdCLElBQU0sRUFBWSxFQUFLLEtBQUssRUFBUyxFQUFNLElBQUksRUFFL0MsT0FESSxFQUFNLFlBQVksRUFBVSxHQUF3QixDQUFTLEVBQzFELEVBQU0sT0FBTyxHQUFLLEVBQU0sS0FBSyxTQUFTLE1BQU0sQ0FDckQsQ0FBQyxDQUNILE1BQVEsQ0FDTixNQUFPLEVBQ1QsQ0FDRixDQUVBLGVBQWUsR0FDYixFQUNBLEVBQ0EsRUFDZSxDQUNmLEVBQVksTUFBUSxRQUNwQixJQUFNLEVBQWEsRUFBWSxPQUFTLFNBQ2xDLEVBQVksR0FBWSxFQUFZLENBQVUsRUFDcEQsRUFBWSxLQUFPLElBQWUsRUFBWSxXQUFhLEVBQVksWUFBYyxZQUdyRixPQUFPLEVBQVksUUFFbkIsT0FBTyxFQUFZLGdCQUVuQixNQUFNLEVBQUcsU0FBUyxNQUFNLEVBQVksQ0FBRSxVQUFXLEVBQUssQ0FBQyxFQUN2RCxNQUFNLEVBQUcsU0FBUyxVQUFVLEVBQUssS0FBSyxFQUFZLGNBQWMsRUFBRyxLQUFLLFVBQVUsQ0FBVyxDQUFDLENBQ2hHLENBRUEsU0FBUyxHQUNQLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDaUIsQ0FDakIsR0FBSSxJQUFpQixZQUFjLElBQWlCLFlBQWEsQ0FDL0QsSUFBTSxFQUFZLEdBQVksRUFBYyxFQUFLLFVBQVUsRUFDM0QsTUFBTyxDQUNMLENBQ0UsSUFBSyxFQUNMLE9BQVEsRUFBWSxTQUFXLFdBQy9CLE9BQVEsRUFBSyxPQUNiLFVBQVcsRUFBSyxXQUFhLFNBQzdCLE9BQVEsQ0FBQyxDQUNYLENBQ0YsQ0FDRixDQVVBLElBQU0sRUFBcUMsQ0FBQyxFQUN0QyxFQUFhLEVBQUssWUFBYyxPQTBCdEMsT0F2QkksSUFBZSxPQUFTLElBQWUsUUFBVyxJQUFlLFVBQVksQ0FBQyxJQUNoRixFQUFrQixLQUFLLENBQ3JCLElBQUssRUFDTCxlQUFnQixFQUFlLGFBQWUsWUFDOUMsT0FBUSxXQUNSLE9BQVEsRUFBSyxPQUNiLGdCQUFpQixHQUNqQixvQkFBcUIsRUFBSyxLQUFLLEVBQWdCLEtBQUssRUFDcEQsVUFBVyxFQUFLLFVBQ2hCLE9BQVEsRUFDVixDQUFDLEdBRUMsSUFBZSxPQUFTLElBQWUsUUFBVyxJQUFlLFVBQVksSUFDL0UsRUFBa0IsS0FBSyxDQUNyQixJQUFLLEVBQ0wsZUFBZ0IsRUFBZSxZQUFjLGFBQzdDLE9BQVEsU0FDUixPQUFRLEVBQUssT0FDYixnQkFBaUIsR0FDakIsb0JBQXFCLEVBQUssS0FBSyxFQUFnQixLQUFLLEVBQ3BELFVBQVcsRUFBSyxTQUNsQixDQUFDLEVBRUksQ0FDVCxDQUVBLFNBQVMsR0FBWSxFQUF1QixFQUF5QyxDQUNuRixPQUFPLElBQWUsUUFBVyxDQUFDLEdBQWMsSUFBZSxXQUFhLENBQzlFLENDL2lCQSxNQUFhLEdBQW1FLENBQzlFLFFBQVMsYUFDVCxTQUFVLGFBQ1YsU0FYQSxHQUFHLEVBQ0gsTUFBTyxDQUNMLFlBQWEsdUNBQ2IsS0FBTSxVQUNOLE1BQU8sR0FDVCxDQU1BLEVBQ0EsUUFBUSxFQUFNLENBQ1osRUFBa0MsRUFBTSxRQUFRLElBQUksQ0FBQyxFQUVyRCxJQUFNLEVBQU8sRUFBSyxNQUFNLFNBQVMsR0FBSyxHQUdoQyxFQUFpQixRQUFRLFNBQVMsSUFDbEMsRUFBVSxFQUFpQixNQUFRLE9BQ25DLEVBQU8sRUFBaUIsQ0FBQyxPQUFPLEVBQUksQ0FBQyxnQkFBaUIsV0FBWSxLQUFLLEVBQ3pFLEVBQUssT0FDUCxFQUFLLEtBQUssU0FBUyxFQUVyQixFQUFLLEtBQUssQ0FBSSxFQUNkLEdBQU0sRUFBRyxHQUFHLEdBQXVCLEVBQUssRUFDbEMsRUFBYyxDQUFDLEdBQUcsRUFBTSxHQUFHLEVBQW9CLElBQUssR0FBUSxFQUFJLFNBQVMsQ0FBQyxDQUFDLEVBQzdFLEVBQUssU0FDUCxRQUFRLEtBQUssWUFBWSxFQUFRLEdBQUcsRUFBWSxLQUFLLEdBQUcsRUFBRSxFQUFFLEVBRTlELElBQU0sRUFBTSxFQUFjLFVBQVUsRUFBUyxFQUFhLENBQ3hELE1BQU8sVUFDUCxJQUFLLENBQUUsR0FBRyxRQUFRLEdBQUksQ0FDeEIsQ0FBQyxFQUNELFFBQVEsS0FBSyxFQUFJLFFBQVUsQ0FBQyxDQUM5QixDQUNGLEVDaENBLEVBQXFDLFFBQVEsR0FBRyxFQUVoRCxNQUFNLEVBQU0sRUFBUSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQy9CLFdBQVcsVUFBVSxDQUFDLENBQ3RCLFFBQVEsQ0FBb0IsQ0FBQyxDQUM3QixRQUFRLEVBQUcsQ0FBQyxDQUNaLFFBQVEsRUFBUyxDQUFDLENBQ2xCLFFBQVEsRUFBRyxDQUFDLENBQ1osUUFBUSxFQUFHLENBQUMsQ0FDWixjQUFjLENBQUMsQ0FDZixPQUFPLENBQUMsQ0FDUixRQUFRLEdBQVcsQ0FBQyxDQUFDLENBQ3JCLEtBQUssQ0FBQyxDQUFDLEtBRVYsU0FBUyxJQUFxQixDQUk1QixPQUhvQixLQUFLLE1BQU0sRUFBRyxhQUFhLEVBQUssS0FBSyxFQUFtQixFQUFHLGNBQWMsRUFBRyxNQUFNLENBR3JGLENBQUMsQ0FBQyxPQUNyQiJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "build-ts",
|
|
3
|
-
"version": "21.0.
|
|
3
|
+
"version": "21.0.8",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/WillBooster/build-ts.git"
|
|
@@ -37,12 +37,12 @@
|
|
|
37
37
|
"@babel/preset-env": "8.0.2",
|
|
38
38
|
"@babel/preset-react": "8.0.1",
|
|
39
39
|
"@babel/preset-typescript": "8.0.1",
|
|
40
|
-
"@willbooster/shared-lib-node": "13.2.
|
|
40
|
+
"@willbooster/shared-lib-node": "13.2.2",
|
|
41
41
|
"magic-string": "1.1.0",
|
|
42
42
|
"oxc-parser": "0.143.0",
|
|
43
|
-
"rolldown": "1.2.
|
|
43
|
+
"rolldown": "1.2.4",
|
|
44
44
|
"signal-exit": "4.1.0",
|
|
45
|
-
"tsx": "4.23.
|
|
45
|
+
"tsx": "4.23.12",
|
|
46
46
|
"typescript": "7.0.2",
|
|
47
47
|
"yargs": "18.1.0"
|
|
48
48
|
},
|
|
@@ -55,11 +55,11 @@
|
|
|
55
55
|
"@types/yargs": "17.0.35",
|
|
56
56
|
"@willbooster/oxfmt-config": "1.2.2",
|
|
57
57
|
"@willbooster/oxlint-config": "1.4.8",
|
|
58
|
-
"@willbooster/wb": "21.
|
|
58
|
+
"@willbooster/wb": "21.7.3",
|
|
59
59
|
"conventional-changelog-conventionalcommits": "10.2.1",
|
|
60
60
|
"lefthook": "2.1.10",
|
|
61
|
-
"oxfmt": "0.
|
|
62
|
-
"oxlint": "1.
|
|
61
|
+
"oxfmt": "0.63.0",
|
|
62
|
+
"oxlint": "1.78.0",
|
|
63
63
|
"oxlint-tsgolint": "7.0.2001",
|
|
64
64
|
"semantic-release": "25.0.9",
|
|
65
65
|
"sort-package-json": "4.0.0",
|