Comparing version 1.15.0 to 1.16.0
@@ -1,3 +0,9 @@ | ||
# 1.15.0 | ||
# v1.16.0 (Apr 21, 2022) | ||
* feat: Add support for extension CLIs with multiple exported entrypoints that do not use cli-kit. | ||
Fixes [#97](https://github.com/cb1kenobi/cli-kit/issues/97). | ||
* chore: Updated dependencies. | ||
# v1.15.0 (Apr 10, 2022) | ||
* feat: Moved internal `banner` value into state object to allow banner to be modified during | ||
@@ -7,3 +13,3 @@ command execution when `autoHideBanner` is enabled (default). | ||
# 1.14.1 (Aug 23, 2021) | ||
# v1.14.1 (Aug 23, 2021) | ||
@@ -13,3 +19,3 @@ * fix: Fixed bug when adding a command using an absolute path to a js file. | ||
# 1.14.0 (Jul 27, 2021) | ||
# v1.14.0 (Jul 27, 2021) | ||
@@ -28,3 +34,3 @@ * feat: Added `redact` flag to arguments and options so advanced implementations can know if an | ||
# 1.13.0 (Apr 26, 2021) | ||
# v1.13.0 (Apr 26, 2021) | ||
@@ -40,3 +46,3 @@ * feat(help): Added required options to usage on help screen. | ||
# 1.12.0 (Apr 15, 2021) | ||
# v1.12.0 (Apr 15, 2021) | ||
@@ -46,11 +52,11 @@ * feat(extension): Allow extension exports values in its `package.json` to be the `main` path. | ||
# 1.11.4 (Apr 15, 2021) | ||
# v1.11.4 (Apr 15, 2021) | ||
* fix(command): Fixed custom help content for extensions. | ||
# 1.11.3 (Apr 14, 2021) | ||
# v1.11.3 (Apr 14, 2021) | ||
* fix(command): Only consider command name to be a file if it is an absolute path. | ||
# 1.11.2 (Apr 13, 2021) | ||
# v1.11.2 (Apr 13, 2021) | ||
@@ -61,3 +67,3 @@ * fix(cli): Set `json` flag on errors when the executing context or its parent contexts has a | ||
# 1.11.1 (Apr 8, 2021) | ||
# v1.11.1 (Apr 8, 2021) | ||
@@ -67,3 +73,3 @@ * fix: Don't override default value for boolean options. | ||
# 1.11.0 (Mar 26, 2021) | ||
# v1.11.0 (Mar 26, 2021) | ||
@@ -74,3 +80,3 @@ * feat: Mix custom command, argument, option, and extension constructor parameters into each | ||
# 1.10.0 (Mar 25, 2021) | ||
# v1.10.0 (Mar 25, 2021) | ||
@@ -83,3 +89,3 @@ * feat(command): Support command name to be a path to command file. | ||
# 1.9.3 (Jan 8, 2021) | ||
# v1.9.3 (Jan 8, 2021) | ||
@@ -90,11 +96,11 @@ * fix(extension): Strip the package scope name from an extension name, but still add it as a | ||
# 1.9.2 (Jan 5, 2021) | ||
# v1.9.2 (Jan 5, 2021) | ||
* chore: Updated dependencies. | ||
# 1.9.1 (Nov 30, 2020) | ||
# v1.9.1 (Nov 30, 2020) | ||
* chore: Updated dependencies. | ||
# 1.9.0 (Nov 27, 2020) | ||
# v1.9.0 (Nov 27, 2020) | ||
@@ -108,3 +114,3 @@ * feat(extension): Added support actions. | ||
# 1.8.9 (Nov 15, 2020) | ||
# v1.8.9 (Nov 15, 2020) | ||
@@ -114,3 +120,3 @@ * fix(cli): Fixed bug where banner was rendered twice if `autoHideBanner` is enabled and an the | ||
# 1.8.8 (Nov 14, 2020) | ||
# v1.8.8 (Nov 14, 2020) | ||
@@ -120,11 +126,11 @@ * fix(cli): Force banner to be rendered on error. | ||
# 1.8.7 (Nov 14, 2020) | ||
# v1.8.7 (Nov 14, 2020) | ||
* fix(cli): Fixed banner hook from being fired more than once. | ||
# 1.8.6 (Nov 13, 2020) | ||
# v1.8.6 (Nov 13, 2020) | ||
* fix(cli): Fixed banner from being displayed more than once. | ||
# 1.8.5 (Nov 11, 2020) | ||
# v1.8.5 (Nov 11, 2020) | ||
@@ -137,3 +143,3 @@ * fix(extension): Removed node-pty support since it has never worked properly. On Windows, it | ||
# 1.8.4 (Nov 10, 2020) | ||
# v1.8.4 (Nov 10, 2020) | ||
@@ -145,3 +151,3 @@ * fix(cli): Fixed rendering of banner if `autoHideBanner` is disabled. | ||
# 1.8.3 (Nov 6, 2020) | ||
# v1.8.3 (Nov 6, 2020) | ||
@@ -153,3 +159,3 @@ * fix(cli): Unify arguments to the banner event handler. | ||
# 1.8.2 (Aug 26, 2020) | ||
# v1.8.2 (Aug 26, 2020) | ||
@@ -159,3 +165,3 @@ * fix(parser): Fixed bug where context tree rev change was not updating the local rev before | ||
# 1.8.1 (Aug 26, 2020) | ||
# v1.8.1 (Aug 26, 2020) | ||
@@ -165,3 +171,3 @@ * fix(parser): Fixed bug where if the context tree changed, the last argument would never be | ||
# 1.8.0 (Aug 25, 2020) | ||
# v1.8.0 (Aug 25, 2020) | ||
@@ -185,3 +191,3 @@ * feat(parser): Added `finalize` event hook that is emitted before applying defaults and filling | ||
# 1.7.0 (Aug 13, 2020) | ||
# v1.7.0 (Aug 13, 2020) | ||
@@ -192,7 +198,7 @@ * feat(ansi): Added `ansi.split()` to break a string up by ANSI escape sequences. | ||
# 1.6.2 (Aug 11, 2020) | ||
# v1.6.2 (Aug 11, 2020) | ||
* fix(cli): Only show help on errors caused by parsing and validation, not command execution. | ||
# 1.6.1 (Aug 5, 2020) | ||
# v1.6.1 (Aug 5, 2020) | ||
@@ -203,3 +209,3 @@ * fix(cli): Fixed regression introduced in v1.6.0 that broke missing argument validation. | ||
# 1.6.0 (Aug 3, 2020) | ||
# v1.6.0 (Aug 3, 2020) | ||
@@ -213,3 +219,3 @@ * feat(help): Added `CLI` instanced styles to help template rendering. | ||
# 1.5.2 (Jul 24, 2020) | ||
# v1.5.2 (Jul 24, 2020) | ||
@@ -219,3 +225,3 @@ * fix(terminal): Fixed bug where `keypress` event listeners were not properly being wired up to | ||
# 1.5.1 (Jul 23, 2020) | ||
# v1.5.1 (Jul 23, 2020) | ||
@@ -225,3 +231,3 @@ * fix(context): Fixed circular reference introduced when fixing the `generateHelp` hook event in | ||
# 1.5.0 (Jul 23, 2020) | ||
# v1.5.0 (Jul 23, 2020) | ||
@@ -235,3 +241,3 @@ * feat(cli): Added `showHelp` flag on thrown errors to override `showHelpOnError`. Defaults to | ||
# 1.4.0 (Jul 21, 2020) | ||
# v1.4.0 (Jul 21, 2020) | ||
@@ -248,3 +254,3 @@ * feat(cli): Added support for user-defined in `styles` passed into the `CLI` constructor as well | ||
# 1.3.0 (Jul 21, 2020) | ||
# v1.3.0 (Jul 21, 2020) | ||
@@ -259,3 +265,3 @@ * feat(cli): Added `exec` hook event. | ||
# 1.2.4 (Jun 24, 2020) | ||
# v1.2.4 (Jun 24, 2020) | ||
@@ -267,3 +273,3 @@ * fix(cli): Server-side output streams extend TTY `WriteStream` to improve compatibility with | ||
# 1.2.3 (Jun 19, 2020) | ||
# v1.2.3 (Jun 19, 2020) | ||
@@ -274,3 +280,3 @@ * feat(cli): Added `timeout` option to `CLI.connect()` with default of 5 seconds. | ||
# 1.2.2 (Jun 17, 2020) | ||
# v1.2.2 (Jun 17, 2020) | ||
@@ -281,3 +287,3 @@ * fix(cli): Fixed issue where extension banner was not overriding parent context's banner. | ||
# 1.2.1 (Jun 15, 2020) | ||
# v1.2.1 (Jun 15, 2020) | ||
@@ -288,3 +294,3 @@ * fix: Force all options after an extension is found to be an argument. | ||
# 1.2.0 (Jun 3, 2020) | ||
# v1.2.0 (Jun 3, 2020) | ||
@@ -298,3 +304,3 @@ * feat(commands): Added syntactic sugar for declaring commands with aliases and arguments. | ||
# 1.1.1 (May 26, 2020) | ||
# v1.1.1 (May 26, 2020) | ||
@@ -307,3 +313,3 @@ * fix(cli): On error, print the error stack instead of the error object to prevent infinite | ||
# 1.1.0 (May 15, 2020) | ||
# v1.1.0 (May 15, 2020) | ||
@@ -323,3 +329,3 @@ * feat(cli): Added new `keypress` ansi sequence for improved raw input handling in server mode. | ||
# 1.0.1 (May 8, 2020) | ||
# v1.0.1 (May 8, 2020) | ||
@@ -333,3 +339,3 @@ * fix(cli): Added support for 'parentContextNames' when a remote CLI instance is unaware of the | ||
# 1.0.0 (May 1, 2020) | ||
# v1.0.0 (May 1, 2020) | ||
@@ -336,0 +342,0 @@ * BREAKING CHANGE: Require Node.js 10 or newer. |
@@ -160,2 +160,24 @@ "use strict"; | ||
const makeDefaultAction = main => { | ||
return async ({ | ||
__argv, | ||
cmd | ||
}) => { | ||
process.argv = [process.execPath, main]; | ||
const p = __argv.findIndex(arg => arg && arg.type === 'extension' && arg.command === cmd); | ||
if (p !== -1) { | ||
for (let i = p + 1, len = __argv.length; i < len; i++) { | ||
process.argv.push.apply(process.argv, __argv[i].input); | ||
} | ||
} | ||
log(`Requiring ${highlight(main)}`); | ||
log(`Args: ${highlight(process.argv.join(' '))}`); | ||
require(main); | ||
}; | ||
}; | ||
if (!pkg.json.exports && pkg.main) { | ||
@@ -183,7 +205,8 @@ // legacy Node.js extension | ||
if (pkg.json.bin) { | ||
const primary = pkg.json.bin[pkg.json.name]; | ||
if (pkg.json.bin && typeof pkg.json.bin === 'object') { | ||
const bins = Object.keys(pkg.json.bin); | ||
const primary = pkg.json.bin[pkg.json.name] || bins && pkg.json.bin[bins[0]]; | ||
for (const [name, bin] of Object.entries(pkg.json.bin)) { | ||
if (bin === primary && !aliases.includes(name)) { | ||
if (bin !== primary && !aliases.includes(name)) { | ||
aliases.push(name); | ||
@@ -197,21 +220,3 @@ } | ||
}, { | ||
action: async ({ | ||
__argv, | ||
cmd | ||
}) => { | ||
process.argv = [process.execPath, pkg.main]; | ||
const p = __argv.findIndex(arg => arg && arg.type === 'extension' && arg.command === cmd); | ||
if (p !== -1) { | ||
for (let i = p + 1, len = __argv.length; i < len; i++) { | ||
process.argv.push.apply(process.argv, __argv[i].input); | ||
} | ||
} | ||
log(`Requiring ${highlight(pkg.main)}`); | ||
log(`Args: ${highlight(process.argv.join(' '))}`); | ||
require(pkg.main); | ||
}, | ||
action: makeDefaultAction(pkg.main), | ||
aliases, | ||
@@ -243,2 +248,3 @@ desc: pkg.json.description | ||
}, { | ||
action: makeDefaultAction(params.main), | ||
desc: pkg.json.description, | ||
@@ -305,3 +311,3 @@ ...params | ||
registerExtension(name, meta, params) { | ||
var _meta$pkg; | ||
var _meta$pkg, _meta$pkg$json$depend; | ||
@@ -315,97 +321,99 @@ log(`Registering extension command: ${highlight(`${this.name}:${name}`)}`); | ||
cmd.isExtension = true; | ||
cmd.isCLIKitExtension = !!(meta !== null && meta !== void 0 && (_meta$pkg = meta.pkg) !== null && _meta$pkg !== void 0 && _meta$pkg.clikit); | ||
if (meta !== null && meta !== void 0 && (_meta$pkg = meta.pkg) !== null && _meta$pkg !== void 0 && _meta$pkg.clikit) { | ||
cmd.isCLIKitExtension = true; | ||
if (!cmd.isCLIKitExtension || !((_meta$pkg$json$depend = meta.pkg.json.dependencies) !== null && _meta$pkg$json$depend !== void 0 && _meta$pkg$json$depend['cli-kit'])) { | ||
return; | ||
} // we only want to define `cmd.load()` if main exports a cli-kit object | ||
cmd.load = async function load() { | ||
log(`Requiring cli-kit extension: ${highlight(this.name)} -> ${highlight(meta.pkg.main)}`); | ||
let ctx; | ||
try { | ||
ctx = require(meta.pkg.main); | ||
cmd.load = async function load() { | ||
log(`Requiring cli-kit extension: ${highlight(this.name)} -> ${highlight(meta.pkg.main)}`); | ||
let ctx; | ||
if (!ctx || typeof ctx !== 'object' && typeof ctx !== 'function') { | ||
throw new Error('Extension must export an object or function'); | ||
} // if this is an ES6 module, grab the default export | ||
try { | ||
ctx = require(meta.pkg.main); | ||
if (!ctx || typeof ctx !== 'object' && typeof ctx !== 'function') { | ||
throw new Error('Extension must export an object or function'); | ||
} // if this is an ES6 module, grab the default export | ||
if (ctx.__esModule) { | ||
ctx = ctx.default; | ||
} // if the export was a function, call it now to get its CLI definition | ||
if (ctx.__esModule) { | ||
ctx = ctx.default; | ||
} // if the export was a function, call it now to get its CLI definition | ||
if (typeof ctx === 'function') { | ||
ctx = await ctx(this); | ||
} | ||
if (!ctx || typeof ctx !== 'object') { | ||
throw new Error('Extension does not resolve an object'); | ||
} | ||
} catch (err) { | ||
throw _errors.default.INVALID_EXTENSION(`Bad extension "${this.name}": ${err.message}`, { | ||
name: this.name, | ||
scope: 'Extension.load', | ||
value: err | ||
}); | ||
if (typeof ctx === 'function') { | ||
ctx = await ctx(this); | ||
} | ||
this.aliases = ctx.aliases; | ||
this.camelCase = ctx.camelCase; | ||
this.defaultCommand = ctx.defaultCommand; | ||
this.help = ctx.help; | ||
this.remoteHelp = ctx.remoteHelp; | ||
this.treatUnknownOptionsAsArguments = ctx.treatUnknownOptionsAsArguments; | ||
this.version = ctx.version; | ||
this.init({ | ||
args: ctx.args, | ||
banner: ctx.banner, | ||
commands: ctx.commands, | ||
desc: ctx.desc || this.desc, | ||
extensions: ctx.extensions, | ||
name: this.name || ctx.name, | ||
options: ctx.options, | ||
parent: this.parent, | ||
title: ctx.title !== 'Global' && ctx.title || this.name | ||
if (!ctx || typeof ctx !== 'object') { | ||
throw new Error('Extension does not resolve an object'); | ||
} | ||
} catch (err) { | ||
throw _errors.default.INVALID_EXTENSION(`Bad extension "${this.name}": ${err.message}`, { | ||
name: this.name, | ||
scope: 'Extension.load', | ||
value: err | ||
}); | ||
const versionOption = this.version && this.lookup.long.version; | ||
} | ||
if (versionOption && typeof versionOption.callback !== 'function') { | ||
versionOption.callback = async ({ | ||
exitCode, | ||
opts, | ||
next | ||
}) => { | ||
if (await next()) { | ||
let { | ||
version | ||
} = this; | ||
this.aliases = ctx.aliases; | ||
this.camelCase = ctx.camelCase; | ||
this.defaultCommand = ctx.defaultCommand; | ||
this.help = ctx.help; | ||
this.remoteHelp = ctx.remoteHelp; | ||
this.treatUnknownOptionsAsArguments = ctx.treatUnknownOptionsAsArguments; | ||
this.version = ctx.version; | ||
this.init({ | ||
args: ctx.args, | ||
banner: ctx.banner, | ||
commands: ctx.commands, | ||
desc: ctx.desc || this.desc, | ||
extensions: ctx.extensions, | ||
name: this.name || ctx.name, | ||
options: ctx.options, | ||
parent: this.parent, | ||
title: ctx.title !== 'Global' && ctx.title || this.name | ||
}); | ||
const versionOption = this.version && this.lookup.long.version; | ||
if (typeof version === 'function') { | ||
version = await version(opts); | ||
} | ||
if (versionOption && typeof versionOption.callback !== 'function') { | ||
versionOption.callback = async ({ | ||
exitCode, | ||
opts, | ||
next | ||
}) => { | ||
if (await next()) { | ||
let { | ||
version | ||
} = this; | ||
(opts.terminal || this.get('terminal')).stdout.write(`${version}\n`); | ||
exitCode(0); | ||
return false; | ||
if (typeof version === 'function') { | ||
version = await version(opts); | ||
} | ||
}; | ||
} | ||
if (typeof ctx.action === 'function') { | ||
this.action = ctx.action; | ||
} else { | ||
this.action = async parser => { | ||
if (this.defaultCommand !== 'help' || !this.get('help')) { | ||
const defcmd = this.defaultCommand && this.commands[this.defaultCommand]; | ||
(opts.terminal || this.get('terminal')).stdout.write(`${version}\n`); | ||
exitCode(0); | ||
return false; | ||
} | ||
}; | ||
} | ||
if (defcmd) { | ||
return await defcmd.action.call(defcmd, parser); | ||
} | ||
if (typeof ctx.action === 'function') { | ||
this.action = ctx.action; | ||
} else { | ||
this.action = async parser => { | ||
if (this.defaultCommand !== 'help' || !this.get('help')) { | ||
const defcmd = this.defaultCommand && this.commands[this.defaultCommand]; | ||
if (defcmd) { | ||
return await defcmd.action.call(defcmd, parser); | ||
} | ||
} | ||
return await _help.default.action.call(_help.default, parser); | ||
}; | ||
} | ||
}.bind(cmd); | ||
} | ||
return await _help.default.action.call(_help.default, parser); | ||
}; | ||
} | ||
}.bind(cmd); | ||
} | ||
@@ -429,2 +437,2 @@ /** | ||
exports.default = Extension; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBhcnNlci9leHRlbnNpb24uanMiXSwibmFtZXMiOlsibG9nIiwid2FybiIsImhpZ2hsaWdodCIsImRlYnVnIiwic3R5bGVzIiwibmFtZVJlZ0V4cCIsIkV4dGVuc2lvbiIsImNvbnN0cnVjdG9yIiwicGF0aE9yUGFyYW1zIiwicGFyYW1zIiwicGF0aCIsIkUiLCJJTlZBTElEX0FSR1VNRU5UIiwibmFtZSIsInNjb3BlIiwidmFsdWUiLCJleHBvcnRzIiwiZXhlIiwicmVnaXN0ZXJFeHRlbnNpb24iLCJhY3Rpb24iLCJfX2FyZ3YiLCJjbWQiLCJ0ZXJtaW5hbCIsIkFycmF5IiwiaXNBcnJheSIsIk5PX0VYRUNVVEFCTEUiLCJiaW4iLCJhcmdzIiwic2xpY2UiLCJwIiwiZmluZEluZGV4IiwiYXJnIiwidHlwZSIsImNvbW1hbmQiLCJpIiwibGVuIiwibGVuZ3RoIiwicHVzaCIsImFwcGx5IiwiaW5wdXQiLCJqb2luIiwiY2hpbGQiLCJ3aW5kb3dzSGlkZSIsInN0ZG91dCIsIm9uIiwiZGF0YSIsIndyaXRlIiwidG9TdHJpbmciLCJzdGRlcnIiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNvZGUiLCJkZXNjIiwiZSIsInBrZyIsInJvb3QiLCJFcnJvciIsIklOVkFMSURfRVhURU5TSU9OIiwiSlNPTiIsInN0cmluZ2lmeSIsImpzb24iLCJtYWluIiwiYWxpYXNlcyIsIm0iLCJtYXRjaCIsImluY2x1ZGVzIiwicHJpbWFyeSIsIk9iamVjdCIsImVudHJpZXMiLCJwcm9jZXNzIiwiYXJndiIsImV4ZWNQYXRoIiwicmVxdWlyZSIsImRlc2NyaXB0aW9uIiwiX3BhdGgiLCJpc0Fic29sdXRlIiwia2V5cyIsImVyciIsInN0YWNrIiwiaW5kZXhPZiIsInN1YnN0cmluZyIsInRyaW0iLCJsaW5lIiwic3BsaXQiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJtZXRhIiwiQ29tbWFuZCIsInBhcmVudCIsImFzc2lnbiIsImlzRXh0ZW5zaW9uIiwiY2xpa2l0IiwiaXNDTElLaXRFeHRlbnNpb24iLCJsb2FkIiwiY3R4IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJtZXNzYWdlIiwiY2FtZWxDYXNlIiwiZGVmYXVsdENvbW1hbmQiLCJoZWxwIiwicmVtb3RlSGVscCIsInRyZWF0VW5rbm93bk9wdGlvbnNBc0FyZ3VtZW50cyIsInZlcnNpb24iLCJpbml0IiwiYmFubmVyIiwiY29tbWFuZHMiLCJleHRlbnNpb25zIiwib3B0aW9ucyIsInRpdGxlIiwidmVyc2lvbk9wdGlvbiIsImxvb2t1cCIsImxvbmciLCJjYWxsYmFjayIsImV4aXRDb2RlIiwib3B0cyIsIm5leHQiLCJnZXQiLCJwYXJzZXIiLCJkZWZjbWQiLCJoZWxwQ29tbWFuZCIsImJpbmQiLCJzY2hlbWEiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7OztBQUVBLE1BQU07QUFBRUEsRUFBQUEsR0FBRjtBQUFPQyxFQUFBQTtBQUFQLElBQWdCLG9CQUFNLG1CQUFOLENBQXRCO0FBQ0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQWdCQyxlQUFNQyxNQUE1QjtBQUVBLE1BQU1DLFVBQVUsR0FBRyxxQkFBbkI7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNlLE1BQU1DLFNBQU4sQ0FBZ0I7QUFDOUI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0NDLEVBQUFBLFdBQVcsQ0FBQ0MsWUFBRCxFQUFlQyxNQUFmLEVBQXVCO0FBQ2pDLFFBQUlDLElBQUksR0FBR0YsWUFBWDs7QUFFQSxRQUFJLE9BQU9FLElBQVAsS0FBZ0IsUUFBaEIsSUFBNEIsQ0FBQ0QsTUFBakMsRUFBeUM7QUFDeENBLE1BQUFBLE1BQU0sR0FBRyxFQUFUO0FBQ0EsS0FGRCxNQUVPLElBQUlELFlBQVksSUFBSSxPQUFPQSxZQUFQLEtBQXdCLFFBQTVDLEVBQXNEO0FB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QUFDQSxxQkFBTyxLQUFQO0FBQ0E7QUFDRCxXQVZEO0FBV0E7O0FBRUQsWUFBSSxPQUFPcEIsR0FBRyxDQUFDN0UsTUFBWCxLQUFzQixVQUExQixFQUFzQztBQUNyQyxlQUFLQSxNQUFMLEdBQWM2RSxHQUFHLENBQUM3RSxNQUFsQjtBQUNBLFNBRkQsTUFFTztBQUNOLGVBQUtBLE1BQUwsR0FBYyxNQUFNcUcsTUFBTixJQUFnQjtBQUM3QixnQkFBSSxLQUFLbkIsY0FBTCxLQUF3QixNQUF4QixJQUFrQyxDQUFDLEtBQUtrQixHQUFMLENBQVMsTUFBVCxDQUF2QyxFQUF5RDtBQUN4RCxvQkFBTUUsTUFBTSxHQUFHLEtBQUtwQixjQUFMLElBQXVCLEtBQUtPLFFBQUwsQ0FBYyxLQUFLUCxjQUFuQixDQUF0Qzs7QUFDQSxrQkFBSW9CLE1BQUosRUFBWTtBQUNYLHVCQUFPLE1BQU1BLE1BQU0sQ0FBQ3RHLE1BQVAsQ0FBY29FLElBQWQsQ0FBbUJrQyxNQUFuQixFQUEyQkQsTUFBM0IsQ0FBYjtBQUNBO0FBQ0Q7O0FBQ0QsbUJBQU8sTUFBTUUsY0FBWXZHLE1BQVosQ0FBbUJvRSxJQUFuQixDQUF3Qm1DLGFBQXhCLEVBQXFDRixNQUFyQyxDQUFiO0FBQ0EsV0FSRDtBQVNBO0FBQ0QsT0F6RVUsQ0F5RVRHLElBekVTLENBeUVKdEcsR0F6RUksQ0FBWDtBQTBFQTtBQUNEO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQ3VHLEVBQUFBLE1BQU0sR0FBRztBQUNSLFdBQU8sRUFDTixHQUFHLE1BQU1BLE1BREg7QUFFTmxILE1BQUFBLElBQUksRUFBRSxLQUFLQTtBQUZMLEtBQVA7QUFJQTs7QUF4VDZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbW1hbmQgZnJvbSAnLi9jb21tYW5kJztcbmltcG9ydCBkZWJ1ZyBmcm9tICcuLi9saWIvZGVidWcnO1xuaW1wb3J0IEUgZnJvbSAnLi4vbGliL2Vycm9ycyc7XG5pbXBvcnQgaGVscENvbW1hbmQgZnJvbSAnLi4vY29tbWFuZHMvaGVscCc7XG5pbXBvcnQgX3BhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7IGRlY2xhcmVDTElLaXRDbGFzcywgZmlsZW5hbWUsIGZpbmRQYWNrYWdlLCBpc0V4ZWN1dGFibGUgfSBmcm9tICcuLi9saWIvdXRpbCc7XG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuXG5jb25zdCB7IGxvZywgd2FybiB9ID0gZGVidWcoJ2NsaS1raXQ6ZXh0ZW5zaW9uJyk7XG5jb25zdCB7IGhpZ2hsaWdodCB9ID0gZGVidWcuc3R5bGVzO1xuXG5jb25zdCBuYW1lUmVnRXhwID0gL14oPzooQFxcdyspXFwvKT8oLiopJC87XG5cbi8qKlxuICogRGVmaW5lcyBhIG5hbWVzcGFjZSB0aGF0IHdyYXBzIGFuIGV4dGVybmFsIHByb2dyYW0gb3Igc2NyaXB0LlxuICpcbiAqIEBleHRlbmRzIHtDb21tYW5kfVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHRlbnNpb24ge1xuXHQvKipcblx0ICogRGV0ZWN0cyB0aGUgZXh0ZW5zaW9uIGRlZmluZWQgaW4gdGhlIHNwZWNpZmllZCBwYXRoIGFuZCBpbml0aWFsaXplcyBpdC5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBwYXRoT3JQYXJhbXMgLSBUaGUgcGF0aCB0byB0aGUgZXh0ZW5zaW9uIG9yIGEgcGFyYW1zIG9iamVjdC4gSWYgdGhlXG5cdCAqIHBhdGggaXMgYSBOb2RlLmpzIHBhY2thZ2Ugd2l0aCBhIGBwYWNrYWdlLmpzb25gIGNvbnRhaW5pbmcgYSBgXCJjbGkta2l0XCJgIHByb3BlcnR5LCBpdCB3aWxsXG5cdCAqIG1lcmdlIHRoZSBleHRlcm5hbCBjbGkta2l0IGNvbnRleHQgdHJlZSBpbnRvIHRoaXMgbmFtZXNwYWNlLlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gLSBWYXJpb3VzIHBhcmFtZXRlcnMgd2hlbiBgZXh0ZW5zaW9uUGF0aGAgaXMgYSBgU3RyaW5nYC5cblx0ICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMuZXhwb3J0c10gLSBBIG1hcCBvZiBleHBvcnRlZCBjb21tYW5kIG5hbWVzIHRvIGRlc2NyaXB0b3JzIGNvbnRhaW5pbmdcblx0ICogYGFsaWFzZXNgLCBgZGVzY2AsIGBleGVgLCBgbWFpbmAsIGFuZCBgbmFtZWAgcHJvcHMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbcGFyYW1zLm5hbWVdIC0gVGhlIGV4dGVuc2lvbiBuYW1lLiBJZiBub3Qgc2V0LCBpdCB3aWxsIGxvYWQgaXQgZnJvbSB0aGVcblx0ICogZXh0ZW5zaW9uJ3MgYHBhY2thZ2UuanNvbmAgb3IgdGhlIGZpbGVuYW1lLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW3BhcmFtcy5wYXRoXSAtIFRoZSBwYXRoIHRvIGFuIGV4ZWN1dGFibGUsIGEgSmF2YVNjcmlwdCBmaWxlLCBvciBOb2RlLmpzXG5cdCAqIHBhY2thZ2UuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXRoT3JQYXJhbXMsIHBhcmFtcykge1xuXHRcdGxldCBwYXRoID0gcGF0aE9yUGFyYW1zO1xuXG5cdFx0aWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJyAmJiAhcGFyYW1zKSB7XG5cdFx0XHRwYXJhbXMgPSB7fTtcblx0XHR9IGVsc2UgaWYgKHBhdGhPclBhcmFtcyAmJiB0eXBlb2YgcGF0aE9yUGFyYW1zID09PSAnb2JqZWN0Jykge1xuXHRcdFx0KHsgcGF0aCB9ID0gcGFyYW1zID0gcGF0aE9yUGFyYW1zKTtcblx0XHR9XG5cblx0XHRpZiAoIXBhdGggfHwgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBFLklOVkFMSURfQVJHVU1FTlQoJ0V4cGVjdGVkIGFuIGV4dGVuc2lvbiBwYXRoIG9yIHBhcmFtcyBvYmplY3QnLCB7IG5hbWU6ICdwYXRoT3JQYXJhbXMnLCBzY29wZTogJ0V4dGVuc2lvbi5jb25zdHJ1Y3RvcicsIHZhbHVlOiBwYXRoT3JQYXJhbXMgfSk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBwYXJhbXMgIT09ICdvYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBFLklOVkFMSURfQVJHVU1FTlQoJ0V4cGVjdGVkIGV4dGVuc2lvbiBwYXJhbXMgdG8gYmUgYW4gb2JqZWN0IG9yIENvbnRleHQnLCB7IG5hbWU6ICdwYXJhbXMnLCBzY29wZTogJ0V4dGVuc2lvbi5jb25zdHJ1Y3RvcicsIHZhbHVlOiBwYXJhbXMgfSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5leHBvcnRzID0gcGFyYW1zLmV4cG9ydHMgfHwge307XG5cdFx0dGhpcy5uYW1lID0gcGFyYW1zLm5hbWU7XG5cdFx0dGhpcy5wYXRoID0gcGF0aDtcblxuXHRcdGlmICh0eXBlb2YgdGhpcy5leHBvcnRzICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCBleHRlbnNpb24gZXhwb3J0cyB0byBiZSBhbiBvYmplY3QnLCB7IG5hbWU6ICdwYXJhbXMuZXhwb3J0cycsIHNjb3BlOiAnRXh0ZW5zaW9uLmNvbnN0cnVjdG9yJywgdmFsdWU6IHBhcmFtcy5leHBvcnRzIH0pO1xuXHRcdH1cblxuXHRcdC8vIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgZXh0ZW5zaW9uIGlzIGEgYmluYXJ5IG9yIGlmIGl0J3MgYSBOb2RlIHBhY2thZ2Vcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZXhlID0gaXNFeGVjdXRhYmxlKHBhdGgpO1xuXHRcdFx0aWYgKCF0aGlzLm5hbWUpIHtcblx0XHRcdFx0dGhpcy5uYW1lID0gZmlsZW5hbWUoZXhlWzBdKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5yZWdpc3RlckV4dGVuc2lvbih0aGlzLm5hbWUsIHsgZXhlIH0sIHtcblx0XHRcdFx0YWN0aW9uOiBhc3luYyAoeyBfX2FyZ3YsIGNtZCwgdGVybWluYWwgfSkgPT4ge1xuXHRcdFx0XHRcdGlmICghQXJyYXkuaXNBcnJheShleGUpKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBFLk5PX0VYRUNVVEFCTEUoYEV4dGVuc2lvbiBcIiR7dGhpcy5uYW1lfVwiIGhhcyBubyBleGVjdXRhYmxlIWApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGJpbiA9IGV4ZVswXTtcblx0XHRcdFx0XHRjb25zdCBhcmdzID0gZXhlLnNsaWNlKDEpO1xuXHRcdFx0XHRcdGNvbnN0IHAgPSBfX2FyZ3YuZmluZEluZGV4KGFyZyA9PiBhcmcgJiYgYXJnLnR5cGUgPT09ICdleHRlbnNpb24nICYmIGFyZy5jb21tYW5kID09PSBjbWQpO1xuXG5cdFx0XHRcdFx0aWYgKHAgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gcCArIDEsIGxlbiA9IF9fYXJndi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0XHRcdFx0XHRhcmdzLnB1c2guYXBwbHkoYXJncywgX19hcmd2W2ldLmlucHV0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBzcGF3biB0aGUgcHJvY2Vzc1xuXHRcdFx0XHRcdGxvZyhgUnVubmluZzogJHtoaWdobGlnaHQoYCR7YmlufSAke2FyZ3Muam9pbignICcpfWApfWApO1xuXHRcdFx0XHRcdGNvbnN0IGNoaWxkID0gc3Bhd24oYmluLCBhcmdzLCB7IHdpbmRvd3NIaWRlOiB0cnVlIH0pO1xuXHRcdFx0XHRcdGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGRhdGEgPT4gdGVybWluYWwuc3Rkb3V0LndyaXRlKGRhdGEudG9TdHJpbmcoKSkpO1xuXHRcdFx0XHRcdGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGRhdGEgPT4gdGVybWluYWwuc3RkZXJyLndyaXRlKGRhdGEudG9TdHJpbmcoKSkpO1xuXHRcdFx0XHRcdGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gY2hpbGQub24oJ2Nsb3NlJywgKGNvZGUgPSAwKSA9PiByZXNvbHZlKHsgY29kZSB9KSkpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRkZXNjOiBwYXJhbXMuZGVzY1xuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0Ly8gbWF5YmUgYSBOb2RlIHBhY2thZ2U/XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRsZXQgcGtnO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHBrZyA9IGZpbmRQYWNrYWdlKHBhdGgpO1xuXHRcdFx0XHRcdGlmICghcGtnLnJvb3QpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcigpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHRocm93IEUuSU5WQUxJRF9FWFRFTlNJT04oYEludmFsaWQgZXh0ZW5zaW9uOiBVbmFibGUgdG8gZmluZCBleGVjdXRhYmxlLCBzY3JpcHQsIG9yIHBhY2thZ2U6ICR7dHlwZW9mIHBhdGggPT09ICdzdHJpbmcnID8gYFwiJHtwYXRofVwiYCA6IEpTT04uc3RyaW5naWZ5KHBhdGgpfWApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCF0aGlzLm5hbWUpIHtcblx0XHRcdFx0XHR0aGlzLm5hbWUgPSBwa2cuanNvbi5uYW1lO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCF0aGlzLm5hbWUpIHtcblx0XHRcdFx0XHR0aGlzLm5hbWUgPSBmaWxlbmFtZShwYXRoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghcGtnLmpzb24uZXhwb3J0cyAmJiBwa2cubWFpbikge1xuXHRcdFx0XHRcdC8vIGxlZ2FjeSBOb2RlLmpzIGV4dGVuc2lvblxuXHRcdFx0XHRcdGxldCB7IG5hbWUgfSA9IHRoaXM7XG5cdFx0XHRcdFx0Y29uc3QgYWxpYXNlcyA9IEFycmF5LmlzQXJyYXkocGtnLmpzb24uYWxpYXNlcykgPyBwa2cuanNvbi5hbGlhc2VzIDogW107XG5cblx0XHRcdFx0XHQvLyBpZiB0aGUgcGFja2FnZSBuYW1lIGNvbnRhaW5zIGEgc2NvcGUsIGFkZCB0aGUgc2NvcGVkIHBhY2thZ2UgbmFtZSBhcyBhIGhpZGRlblxuXHRcdFx0XHRcdC8vIGFsaWFzIGFuZCBzdHJpcCB0aGUgc2NvcGUgZnJvbSB0aGUgbmFtZVxuXHRcdFx0XHRcdGNvbnN0IG0gPSBuYW1lLm1hdGNoKG5hbWVSZWdFeHApO1xuXHRcdFx0XHRcdGlmIChtKSB7XG5cdFx0XHRcdFx0XHRhbGlhc2VzLnB1c2goYCEke25hbWV9YCk7XG5cdFx0XHRcdFx0XHRuYW1lID0gbVsyXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBpZiB0aGUgbmFtZSBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgb25lIGluIHRoZSBwYWNrYWdlLmpzb24sIGFkZCBpdCB0byB0aGUgYWxpYXNlc1xuXHRcdFx0XHRcdGlmIChuYW1lICYmIG5hbWUgIT09IHBrZy5qc29uLm5hbWUgJiYgIWFsaWFzZXMuaW5jbHVkZXMobmFtZSkpIHtcblx0XHRcdFx0XHRcdGFsaWFzZXMucHVzaChuYW1lKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBpZiB0aGUgcGFja2FnZSBoYXMgYSBiaW4gc2NyaXB0IHRoYXQgbWF0Y2hlcyB0aGUgcGFja2FnZSBuYW1lLCB0aGVuIGFkZCBhbnkgb3RoZXJcblx0XHRcdFx0XHQvLyBiaW4gbmFtZSB0aGF0IGFsaWFzZXMgdGhlIHBhY2thZ2UgbmFtZWQgYmluXG5cdFx0XHRcdFx0aWYgKHBrZy5qc29uLmJpbikge1xuXHRcdFx0XHRcdFx0Y29uc3QgcHJpbWFyeSA9IHBrZy5qc29uLmJpbltwa2cuanNvbi5uYW1lXTtcblx0XHRcdFx0XHRcdGZvciAoY29uc3QgWyBuYW1lLCBiaW4gXSBvZiBPYmplY3QuZW50cmllcyhwa2cuanNvbi5iaW4pKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChiaW4gPT09IHByaW1hcnkgJiYgIWFsaWFzZXMuaW5jbHVkZXMobmFtZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRhbGlhc2VzLnB1c2gobmFtZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLnJlZ2lzdGVyRXh0ZW5zaW9uKG5hbWUsIHsgcGtnIH0sIHtcblx0XHRcdFx0XHRcdGFjdGlvbjogYXN5bmMgKHsgX19hcmd2LCBjbWQgfSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRwcm9jZXNzLmFyZ3YgPSBbXG5cdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5leGVjUGF0aCxcblx0XHRcdFx0XHRcdFx0XHRwa2cubWFpblxuXHRcdFx0XHRcdFx0XHRdO1xuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHAgPSBfX2FyZ3YuZmluZEluZGV4KGFyZyA9PiBhcmcgJiYgYXJnLnR5cGUgPT09ICdleHRlbnNpb24nICYmIGFyZy5jb21tYW5kID09PSBjbWQpO1xuXHRcdFx0XHRcdFx0XHRpZiAocCAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gcCArIDEsIGxlbiA9IF9fYXJndi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5hcmd2LnB1c2guYXBwbHkocHJvY2Vzcy5hcmd2LCBfX2FyZ3ZbaV0uaW5wdXQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGxvZyhgUmVxdWlyaW5nICR7aGlnaGxpZ2h0KHBrZy5tYWluKX1gKTtcblx0XHRcdFx0XHRcdFx0bG9nKGBBcmdzOiAke2hpZ2hsaWdodChwcm9jZXNzLmFyZ3Yuam9pbignICcpKX1gKTtcblx0XHRcdFx0XHRcdFx0cmVxdWlyZShwa2cubWFpbik7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0YWxpYXNlcyxcblx0XHRcdFx0XHRcdGRlc2M6IHBrZy5qc29uLmRlc2NyaXB0aW9uXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIHBrZy5qc29uLmV4cG9ydHMgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdFx0dGhyb3cgRS5JTlZBTElEX0VYVEVOU0lPTignSW52YWxpZCBleHRlbnNpb246IEV4cGVjdGVkIGV4cG9ydHMgdG8gYmUgYW4gb2JqZWN0JywgeyBuYW1lOiAncGtnLmpzb24uZXhwb3J0cycsIHNjb3BlOiAnRXh0ZW5zaW9uLmNvbnN0cnVjdG9yJywgdmFsdWU6IHBrZy5qc29uLmV4cG9ydHMgfSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgWyBuYW1lLCBwYXJhbXMgXSBvZiBPYmplY3QuZW50cmllcyhwa2cuanNvbi5leHBvcnRzKSkge1xuXHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBwYXJhbXMgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0XHRcdHBhcmFtcyA9IHsgbWFpbjogcGFyYW1zIH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAocGFyYW1zLm1haW4gJiYgIV9wYXRoLmlzQWJzb2x1dGUocGFyYW1zLm1haW4pKSB7XG5cdFx0XHRcdFx0XHRcdHBhcmFtcy5tYWluID0gX3BhdGgucmVzb2x2ZShwa2cucm9vdCwgcGFyYW1zLm1haW4pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGhpcy5yZWdpc3RlckV4dGVuc2lvbihuYW1lLCB7XG5cdFx0XHRcdFx0XHRcdHBrZzoge1xuXHRcdFx0XHRcdFx0XHRcdC4uLnBrZyxcblx0XHRcdFx0XHRcdFx0XHQuLi5wYXJhbXNcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSwge1xuXHRcdFx0XHRcdFx0XHRkZXNjOiBwa2cuanNvbi5kZXNjcmlwdGlvbixcblx0XHRcdFx0XHRcdFx0Li4ucGFyYW1zXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIU9iamVjdC5rZXlzKHRoaXMuZXhwb3J0cykubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dGhyb3cgRS5JTlZBTElEX0VYVEVOU0lPTihgSW52YWxpZCBleHRlbnNpb246IFVuYWJsZSB0byBmaW5kIGV4dGVuc2lvbidzIG1haW4gZmlsZTogJHt0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycgPyBgXCIke3BhdGh9XCJgIDogSlNPTi5zdHJpbmdpZnkocGF0aCl9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhpcy5lcnIgPSBlO1xuXHRcdFx0XHR3YXJuKGUpO1xuXHRcdFx0XHR3YXJuKCdGb3VuZCBiYWQgZXh0ZW5zaW9uLCBjcmVhdGluZyBlcnJvciBhY3Rpb24nKTtcblxuXHRcdFx0XHR0aGlzLnJlZ2lzdGVyRXh0ZW5zaW9uKHRoaXMubmFtZSwge30sIHtcblx0XHRcdFx0XHRhY3Rpb246ICh7IHRlcm1pbmFsIH0pID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHsgc3RkZXJyIH0gPSB0ZXJtaW5hbDtcblx0XHRcdFx0XHRcdGlmICh0aGlzLmVycikge1xuXHRcdFx0XHRcdFx0XHRsZXQgeyBzdGFjayB9ID0gZTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcCA9IHN0YWNrLmluZGV4T2YoJ1xcblxcbicpO1xuXHRcdFx0XHRcdFx0XHRpZiAocCAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHRzdGFjayA9IHN0YWNrLnN1YnN0cmluZygwLCBwKS50cmltKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBsaW5lIG9mIHN0YWNrLnNwbGl0KCdcXG4nKSkge1xuXHRcdFx0XHRcdFx0XHRcdHN0ZGVyci53cml0ZShgICAke2xpbmV9XFxuYCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHN0ZGVyci53cml0ZShgSW52YWxpZCBleHRlbnNpb246ICR7dGhpcy5uYW1lfVxcbmApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZGVjbGFyZUNMSUtpdENsYXNzKHRoaXMsICdFeHRlbnNpb24nKTtcblxuXHRcdC8vIG1peCBpbiBhbnkgb3RoZXIgY3VzdG9tIHByb3BzXG5cdFx0Zm9yIChjb25zdCBbIGtleSwgdmFsdWUgXSBvZiBPYmplY3QuZW50cmllcyhwYXJhbXMpKSB7XG5cdFx0XHRpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLCBrZXkpKSB7XG5cdFx0XHRcdHRoaXNba2V5XSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyBhIGNvbW1hbmQgd2l0aCB0aGUgZXh0ZW5zaW9uIGV4cG9ydCBpbmZvLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIFRoZSBjb21tYW5kIG5hbWUuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBtZXRhIC0gTWV0YWRhdGEgdG8gbWl4IGludG8gdGhlIGNvbW1hbmQgaW5zdGFuY2UuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBDb21tYW5kIHNwZWNpZmljIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0cmVnaXN0ZXJFeHRlbnNpb24obmFtZSwgbWV0YSwgcGFyYW1zKSB7XG5cdFx0bG9nKGBSZWdpc3RlcmluZyBleHRlbnNpb24gY29tbWFuZDogJHtoaWdobGlnaHQoYCR7dGhpcy5uYW1lfToke25hbWV9YCl9YCk7XG5cdFx0Y29uc3QgY21kID0gbmV3IENvbW1hbmQobmFtZSwge1xuXHRcdFx0cGFyZW50OiB0aGlzLFxuXHRcdFx0Li4ucGFyYW1zXG5cdFx0fSk7XG5cdFx0dGhpcy5leHBvcnRzW25hbWVdID0gT2JqZWN0LmFzc2lnbihjbWQsIG1ldGEpO1xuXHRcdGNtZC5pc0V4dGVuc2lvbiA9IHRydWU7XG5cblx0XHRpZiAobWV0YT8ucGtnPy5jbGlraXQpIHtcblx0XHRcdGNtZC5pc0NMSUtpdEV4dGVuc2lvbiA9IHRydWU7XG5cblx0XHRcdGNtZC5sb2FkID0gYXN5bmMgZnVuY3Rpb24gbG9hZCgpIHtcblx0XHRcdFx0bG9nKGBSZXF1aXJpbmcgY2xpLWtpdCBleHRlbnNpb246ICR7aGlnaGxpZ2h0KHRoaXMubmFtZSl9IC0+ICR7aGlnaGxpZ2h0KG1ldGEucGtnLm1haW4pfWApO1xuXHRcdFx0XHRsZXQgY3R4O1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGN0eCA9IHJlcXVpcmUobWV0YS5wa2cubWFpbik7XG5cdFx0XHRcdFx0aWYgKCFjdHggfHwgKHR5cGVvZiBjdHggIT09ICdvYmplY3QnICYmIHR5cGVvZiBjdHggIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0V4dGVuc2lvbiBtdXN0IGV4cG9ydCBhbiBvYmplY3Qgb3IgZnVuY3Rpb24nKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBpZiB0aGlzIGlzIGFuIEVTNiBtb2R1bGUsIGdyYWIgdGhlIGRlZmF1bHQgZXhwb3J0XG5cdFx0XHRcdFx0aWYgKGN0eC5fX2VzTW9kdWxlKSB7XG5cdFx0XHRcdFx0XHRjdHggPSBjdHguZGVmYXVsdDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBpZiB0aGUgZXhwb3J0IHdhcyBhIGZ1bmN0aW9uLCBjYWxsIGl0IG5vdyB0byBnZXQgaXRzIENMSSBkZWZpbml0aW9uXG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBjdHggPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRcdGN0eCA9IGF3YWl0IGN0eCh0aGlzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCFjdHggfHwgdHlwZW9mIGN0eCAhPT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignRXh0ZW5zaW9uIGRvZXMgbm90IHJlc29sdmUgYW4gb2JqZWN0Jyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0XHR0aHJvdyBFLklOVkFMSURfRVhURU5TSU9OKGBCYWQgZXh0ZW5zaW9uIFwiJHt0aGlzLm5hbWV9XCI6ICR7ZXJyLm1lc3NhZ2V9YCwgeyBuYW1lOiB0aGlzLm5hbWUsIHNjb3BlOiAnRXh0ZW5zaW9uLmxvYWQnLCB2YWx1ZTogZXJyIH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5hbGlhc2VzICAgICAgICAgICAgICAgICAgICAgICAgPSBjdHguYWxpYXNlcztcblx0XHRcdFx0dGhpcy5jYW1lbENhc2UgICAgICAgICAgICAgICAgICAgICAgPSBjdHguY2FtZWxDYXNlO1xuXHRcdFx0XHR0aGlzLmRlZmF1bHRDb21tYW5kICAgICAgICAgICAgICAgICA9IGN0eC5kZWZhdWx0Q29tbWFuZDtcblx0XHRcdFx0dGhpcy5oZWxwICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBjdHguaGVscDtcblx0XHRcdFx0dGhpcy5yZW1vdGVIZWxwICAgICAgICAgICAgICAgICAgICAgPSBjdHgucmVtb3RlSGVscDtcblx0XHRcdFx0dGhpcy50cmVhdFVua25vd25PcHRpb25zQXNBcmd1bWVudHMgPSBjdHgudHJlYXRVbmtub3duT3B0aW9uc0FzQXJndW1lbnRzO1xuXHRcdFx0XHR0aGlzLnZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICA9IGN0eC52ZXJzaW9uO1xuXG5cdFx0XHRcdHRoaXMuaW5pdCh7XG5cdFx0XHRcdFx0YXJnczogICAgICAgY3R4LmFyZ3MsXG5cdFx0XHRcdFx0YmFubmVyOiAgICAgY3R4LmJhbm5lcixcblx0XHRcdFx0XHRjb21tYW5kczogICBjdHguY29tbWFuZHMsXG5cdFx0XHRcdFx0ZGVzYzogICAgICAgY3R4LmRlc2MgfHwgdGhpcy5kZXNjLFxuXHRcdFx0XHRcdGV4dGVuc2lvbnM6IGN0eC5leHRlbnNpb25zLFxuXHRcdFx0XHRcdG5hbWU6ICAgICAgIHRoaXMubmFtZSB8fCBjdHgubmFtZSxcblx0XHRcdFx0XHRvcHRpb25zOiAgICBjdHgub3B0aW9ucyxcblx0XHRcdFx0XHRwYXJlbnQ6ICAgICB0aGlzLnBhcmVudCxcblx0XHRcdFx0XHR0aXRsZTogICAgICBjdHgudGl0bGUgIT09ICdHbG9iYWwnICYmIGN0eC50aXRsZSB8fCB0aGlzLm5hbWVcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Y29uc3QgdmVyc2lvbk9wdGlvbiA9IHRoaXMudmVyc2lvbiAmJiB0aGlzLmxvb2t1cC5sb25nLnZlcnNpb247XG5cdFx0XHRcdGlmICh2ZXJzaW9uT3B0aW9uICYmIHR5cGVvZiB2ZXJzaW9uT3B0aW9uLmNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0dmVyc2lvbk9wdGlvbi5jYWxsYmFjayA9IGFzeW5jICh7IGV4aXRDb2RlLCBvcHRzLCBuZXh0IH0pID0+IHtcblx0XHRcdFx0XHRcdGlmIChhd2FpdCBuZXh0KCkpIHtcblx0XHRcdFx0XHRcdFx0bGV0IHsgdmVyc2lvbiB9ID0gdGhpcztcblx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiB2ZXJzaW9uID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmVyc2lvbiA9IGF3YWl0IHZlcnNpb24ob3B0cyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0KG9wdHMudGVybWluYWwgfHwgdGhpcy5nZXQoJ3Rlcm1pbmFsJykpLnN0ZG91dC53cml0ZShgJHt2ZXJzaW9ufVxcbmApO1xuXHRcdFx0XHRcdFx0XHRleGl0Q29kZSgwKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodHlwZW9mIGN0eC5hY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHR0aGlzLmFjdGlvbiA9IGN0eC5hY3Rpb247XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb24gPSBhc3luYyBwYXJzZXIgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuZGVmYXVsdENvbW1hbmQgIT09ICdoZWxwJyB8fCAhdGhpcy5nZXQoJ2hlbHAnKSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBkZWZjbWQgPSB0aGlzLmRlZmF1bHRDb21tYW5kICYmIHRoaXMuY29tbWFuZHNbdGhpcy5kZWZhdWx0Q29tbWFuZF07XG5cdFx0XHRcdFx0XHRcdGlmIChkZWZjbWQpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gYXdhaXQgZGVmY21kLmFjdGlvbi5jYWxsKGRlZmNtZCwgcGFyc2VyKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIGF3YWl0IGhlbHBDb21tYW5kLmFjdGlvbi5jYWxsKGhlbHBDb21tYW5kLCBwYXJzZXIpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH0uYmluZChjbWQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBzY2hlbWEgZm9yIHRoaXMgZXh0ZW5zaW9uIGFuZCBhbGwgY2hpbGQgY29udGV4dHMuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzY2hlbWEoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLnN1cGVyLnNjaGVtYSxcblx0XHRcdHBhdGg6IHRoaXMucGF0aFxuXHRcdH07XG5cdH1cbn1cbiJdLCJmaWxlIjoicGFyc2VyL2V4dGVuc2lvbi5qcyJ9 | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBhcnNlci9leHRlbnNpb24uanMiXSwibmFtZXMiOlsibG9nIiwid2FybiIsImhpZ2hsaWdodCIsImRlYnVnIiwic3R5bGVzIiwibmFtZVJlZ0V4cCIsIkV4dGVuc2lvbiIsImNvbnN0cnVjdG9yIiwicGF0aE9yUGFyYW1zIiwicGFyYW1zIiwicGF0aCIsIkUiLCJJTlZBTElEX0FSR1VNRU5UIiwibmFtZSIsInNjb3BlIiwidmFsdWUiLCJleHBvcnRzIiwiZXhlIiwicmVnaXN0ZXJFeHRlbnNpb24iLCJhY3Rpb24iLCJfX2FyZ3YiLCJjbWQiLCJ0ZXJtaW5hbCIsIkFycmF5IiwiaXNBcnJheSIsIk5PX0VYRUNVVEFCTEUiLCJiaW4iLCJhcmdzIiwic2xpY2UiLCJwIiwiZmluZEluZGV4IiwiYXJnIiwidHlwZSIsImNvbW1hbmQiLCJpIiwibGVuIiwibGVuZ3RoIiwicHVzaCIsImFwcGx5IiwiaW5wdXQiLCJqb2luIiwiY2hpbGQiLCJ3aW5kb3dzSGlkZSIsInN0ZG91dCIsIm9uIiwiZGF0YSIsIndyaXRlIiwidG9TdHJpbmciLCJzdGRlcnIiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNvZGUiLCJkZXNjIiwiZSIsInBrZyIsInJvb3QiLCJFcnJvciIsIklOVkFMSURfRVhURU5TSU9OIiwiSlNPTiIsInN0cmluZ2lmeSIsImpzb24iLCJtYWtlRGVmYXVsdEFjdGlvbiIsIm1haW4iLCJwcm9jZXNzIiwiYXJndiIsImV4ZWNQYXRoIiwicmVxdWlyZSIsImFsaWFzZXMiLCJtIiwibWF0Y2giLCJpbmNsdWRlcyIsImJpbnMiLCJPYmplY3QiLCJrZXlzIiwicHJpbWFyeSIsImVudHJpZXMiLCJkZXNjcmlwdGlvbiIsIl9wYXRoIiwiaXNBYnNvbHV0ZSIsImVyciIsInN0YWNrIiwiaW5kZXhPZiIsInN1YnN0cmluZyIsInRyaW0iLCJsaW5lIiwic3BsaXQiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJtZXRhIiwiQ29tbWFuZCIsInBhcmVudCIsImFzc2lnbiIsImlzRXh0ZW5zaW9uIiwiaXNDTElLaXRFeHRlbnNpb24iLCJjbGlraXQiLCJkZXBlbmRlbmNpZXMiLCJsb2FkIiwiY3R4IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJtZXNzYWdlIiwiY2FtZWxDYXNlIiwiZGVmYXVsdENvbW1hbmQiLCJoZWxwIiwicmVtb3RlSGVscCIsInRyZWF0VW5rbm93bk9wdGlvbnNBc0FyZ3VtZW50cyIsInZlcnNpb24iLCJpbml0IiwiYmFubmVyIiwiY29tbWFuZHMiLCJleHRlbnNpb25zIiwib3B0aW9ucyIsInRpdGxlIiwidmVyc2lvbk9wdGlvbiIsImxvb2t1cCIsImxvbmciLCJjYWxsYmFjayIsImV4aXRDb2RlIiwib3B0cyIsIm5leHQiLCJnZXQiLCJwYXJzZXIiLCJkZWZjbWQiLCJoZWxwQ29tbWFuZCIsImJpbmQiLCJzY2hlbWEiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7OztBQUVBLE1BQU07QUFBRUEsRUFBQUEsR0FBRjtBQUFPQyxFQUFBQTtBQUFQLElBQWdCLG9CQUFNLG1CQUFOLENBQXRCO0FBQ0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQWdCQyxlQUFNQyxNQUE1QjtBQUVBLE1BQU1DLFVBQVUsR0FBRyxxQkFBbkI7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNlLE1BQU1DLFNBQU4sQ0FBZ0I7QUFDOUI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0NDLEVBQUFBLFdBQVcsQ0FBQ0MsWUFBRCxFQUFlQyxNQUFmLEVBQXVCO0FBQ2pDLFFBQUlDLElBQUksR0FBR0YsWUFBWDs7QUFFQSxRQUFJLE9BQU9FLElBQVAsS0FBZ0IsUUFBaEIsSUFBNEIsQ0FBQ0QsTUFBakMsRUFBeUM7QUFDeENBLE1BQUFBLE1BQU0sR0FBRyxFQUFUO0FBQ0EsS0FGRCxNQUVPLElBQUlELFlBQVksSUFBSSxPQUFPQSxZQUFQLEtBQXdCLFFBQTVDLEVBQXNEO0FBQzVELE9BQUM7QUFBRUUsUUFBQUE7QUFBRixVQUFXRCxNQUFNLEdBQUdELFlBQXJCO0FBQ0E7O0FBRUQsUUFBSSxDQUFDRSxJQUFELElBQVMsT0FBT0EsSUFBUCxLQUFnQixRQUE3QixFQUF1QztBQUN0QyxZQUFNQyxnQkFBRUMsZ0JBQUYsQ0FBbUIsNkNBQW5CLEVBQWtFO0FBQUVDLFFBQUFBLElBQUksRUFBRSxjQUFSO0FBQXdCQyxRQUFBQSxLQUFLLEVBQUUsdUJBQS9CO0FBQXdEQyxRQUFBQSxLQUFLLEVBQUVQO0FBQS9ELE9BQWxFLENBQU47QUFDQTs7QUFFRCxRQUFJLE9BQU9DLE1BQVAsS0FBa0IsUUFBdEIsRUFBZ0M7QUFDL0IsWUFBTUUsZ0JBQUVDLGdCQUFGLENBQW1CLHNEQUFuQixFQUEyRTtBQUFFQyxRQUFBQSxJQUFJLEVBQUUsUUFBUjtBQUFrQkMsUUFBQUEsS0FBSyxFQUFFLHVCQUF6QjtBQUFrREMsUUFBQUEsS0FBSyxFQUFFTjtBQUF6RCxPQUEzRSxDQUFOO0FBQ0E7O0FBRUQsU0FBS08sT0FBTCxHQUFlUCxNQUFNLENBQUNPLE9BQVAsSUFBa0IsRUFBakM7QUFDQSxTQUFLSCxJQUFMLEdBQVlKLE1BQU0sQ0FBQ0ksSUFBbkI7QUFDQSxTQUFLSCxJQUFMLEdBQVlBLElBQVo7O0FBRUEsUUFBSSxPQUFPLEtBQUtNLE9BQVosS0FBd0IsUUFBNUIsRUFBc0M7QUFDckMsWUFBTUwsZ0JBQUVDLGdCQUFGLENBQW1CLDRDQUFuQixFQUFpRTtBQUFFQyxRQUFBQSxJQUFJLEVBQUUsZ0JBQVI7QUFBMEJDLFFBQUFBLEtBQUssRUFBRSx1QkFBakM7QUFBMERDLFFBQUFBLEtBQUssRUFBRU4sTUFBTSxDQUFDTztBQUF4RSxPQUFqRSxDQUFOO0FBQ0EsS0F2QmdDLENBeUJqQzs7O0FBQ0EsUUFBSTtBQUNILFlBQU1DLEdBQUcsR0FBRyx3QkFBYVAsSUFBYixDQUFaOztBQUNBLFVBQUksQ0FBQyxLQUFLRyxJQUFWLEVBQWdCO0FBQ2YsYUFBS0EsSUFBTCxHQUFZLG9CQUFTSSxHQUFHLENBQUMsQ0FBRCxDQUFaLENBQVo7QUFDQTs7QUFFRCxXQUFLQyxpQkFBTCxDQUF1QixLQUFLTCxJQUE1QixFQUFrQztBQUFFSSxRQUFBQTtBQUFGLE9BQWxDLEVBQTJDO0FBQzFDRSxRQUFBQSxNQUFNLEVBQUUsT0FBTztBQUFFQyxVQUFBQSxNQUFGO0FBQVVDLFVBQUFBLEdBQVY7QUFBZUMsVUFBQUE7QUFBZixTQUFQLEtBQXFDO0FBQzVDLGNBQUksQ0FBQ0MsS0FBSyxDQUFDQyxPQUFOLENBQWNQLEdBQWQsQ0FBTCxFQUF5QjtBQUN4QixrQkFBTU4sZ0JBQUVjLGFBQUYsQ0FBaUIsY0FBYSxLQUFLWixJQUFLLHNCQUF4QyxDQUFOO0FBQ0E7O0FBRUQsZ0JBQU1hLEdBQUcsR0FBR1QsR0FBRyxDQUFDLENBQUQsQ0FBZjtBQUNBLGdCQUFNVSxJQUFJLEdBQUdWLEdBQUcsQ0FBQ1csS0FBSixDQUFVLENBQVYsQ0FBYjs7QUFDQSxnQkFBTUMsQ0FBQyxHQUFHVCxNQUFNLENBQUNVLFNBQVAsQ0FBaUJDLEdBQUcsSUFBSUEsR0FBRyxJQUFJQSxHQUFHLENBQUNDLElBQUosS0FBYSxXQUFwQixJQUFtQ0QsR0FBRyxDQUFDRSxPQUFKLEtBQWdCWixHQUEzRSxDQUFWOztBQUVBLGNBQUlRLENBQUMsS0FBSyxDQUFDLENBQVgsRUFBYztBQUNiLGlCQUFLLElBQUlLLENBQUMsR0FBR0wsQ0FBQyxHQUFHLENBQVosRUFBZU0sR0FBRyxHQUFHZixNQUFNLENBQUNnQixNQUFqQyxFQUF5Q0YsQ0FBQyxHQUFHQyxHQUE3QyxFQUFrREQsQ0FBQyxFQUFuRCxFQUF1RDtBQUN0RFAsY0FBQUEsSUFBSSxDQUFDVSxJQUFMLENBQVVDLEtBQVYsQ0FBZ0JYLElBQWhCLEVBQXNCUCxNQUFNLENBQUNjLENBQUQsQ0FBTixDQUFVSyxLQUFoQztBQUNBO0FBQ0QsV0FiMkMsQ0FlNUM7OztBQUNBdkMsVUFBQUEsR0FBRyxDQUFFLFlBQVdFLFNBQVMsQ0FBRSxHQUFFd0IsR0FBSSxJQUFHQyxJQUFJLENBQUNhLElBQUwsQ0FBVSxHQUFWLENBQWUsRUFBMUIsQ0FBNkIsRUFBbkQsQ0FBSDtBQUNBLGdCQUFNQyxLQUFLLEdBQUcsMEJBQU1mLEdBQU4sRUFBV0MsSUFBWCxFQUFpQjtBQUFFZSxZQUFBQSxXQUFXLEVBQUU7QUFBZixXQUFqQixDQUFkO0FBQ0FELFVBQUFBLEtBQUssQ0FBQ0UsTUFBTixDQUFhQyxFQUFiLENBQWdCLE1BQWhCLEVBQXdCQyxJQUFJLElBQUl2QixRQUFRLENBQUNxQixNQUFULENBQWdCRyxLQUFoQixDQUFzQkQsSUFBSSxDQUFDRSxRQUFMLEVBQXRCLENBQWhDO0FBQ0FOLFVBQUFBLEtBQUssQ0FBQ08sTUFBTixDQUFhSixFQUFiLENBQWdCLE1BQWhCLEVBQXdCQyxJQUFJLElBQUl2QixRQUFRLENBQUMwQixNQUFULENBQWdCRixLQUFoQixDQUFzQkQsSUFBSSxDQUFDRSxRQUFMLEVBQXRCLENBQWhDO0FBQ0EsZ0JBQU0sSUFBSUUsT0FBSixDQUFZQyxPQUFPLElBQUlULEtBQUssQ0FBQ0csRUFBTixDQUFTLE9BQVQsRUFBa0IsQ0FBQ08sSUFBSSxHQUFHLENBQVIsS0FBY0QsT0FBTyxDQUFDO0FBQUVDLFlBQUFBO0FBQUYsV0FBRCxDQUF2QyxDQUF2QixDQUFOO0FBQ0EsU0F0QnlDO0FBdUIxQ0MsUUFBQUEsSUFBSSxFQUFFM0MsTUFBTSxDQUFDMkM7QUF2QjZCLE9BQTNDO0FBeUJBLEtBL0JELENBK0JFLE9BQU9DLENBQVAsRUFBVTtBQUNYO0FBQ0EsVUFBSTtBQUNILFlBQUlDLEdBQUo7O0FBQ0EsWUFBSTtBQUNIQSxVQUFBQSxHQUFHLEdBQUcsdUJBQVk1QyxJQUFaLENBQU47O0FBQ0EsY0FBSSxDQUFDNEMsR0FBRyxDQUFDQyxJQUFULEVBQWU7QUFDZCxrQkFBTSxJQUFJQyxLQUFKLEVBQU47QUFDQTtBQUNELFNBTEQsQ0FLRSxPQUFPSCxDQUFQLEVBQVU7QUFDWCxnQkFBTTFDLGdCQUFFOEMsaUJBQUYsQ0FBcUIscUVBQW9FLE9BQU8vQyxJQUFQLEtBQWdCLFFBQWhCLEdBQTRCLElBQUdBLElBQUssR0FBcEMsR0FBeUNnRCxJQUFJLENBQUNDLFNBQUwsQ0FBZWpELElBQWYsQ0FBcUIsRUFBdkosQ0FBTjtBQUNBOztBQUVELFlBQUksQ0FBQyxLQUFLRyxJQUFWLEVBQWdCO0FBQ2YsZUFBS0EsSUFBTCxHQUFZeUMsR0FBRyxDQUFDTSxJQUFKLENBQVMvQyxJQUFyQjtBQUNBOztBQUVELFlBQUksQ0FBQyxLQUFLQSxJQUFWLEVBQWdCO0FBQ2YsZUFBS0EsSUFBTCxHQUFZLG9CQUFTSCxJQUFULENBQVo7QUFDQTs7QUFFRCxjQUFNbUQsaUJBQWlCLEdBQUdDLElBQUksSUFBSTtBQUNqQyxpQkFBTyxPQUFPO0FBQUUxQyxZQUFBQSxNQUFGO0FBQVVDLFlBQUFBO0FBQVYsV0FBUCxLQUEyQjtBQUNqQzBDLFlBQUFBLE9BQU8sQ0FBQ0MsSUFBUixHQUFlLENBQ2RELE9BQU8sQ0FBQ0UsUUFETSxFQUVkSCxJQUZjLENBQWY7O0FBS0Esa0JBQU1qQyxDQUFDLEdBQUdULE1BQU0sQ0FBQ1UsU0FBUCxDQUFpQkMsR0FBRyxJQUFJQSxHQUFHLElBQUlBLEdBQUcsQ0FBQ0MsSUFBSixLQUFhLFdBQXBCLElBQW1DRCxHQUFHLENBQUNFLE9BQUosS0FBZ0JaLEdBQTNFLENBQVY7O0FBQ0EsZ0JBQUlRLENBQUMsS0FBSyxDQUFDLENBQVgsRUFBYztBQUNiLG1CQUFLLElBQUlLLENBQUMsR0FBR0wsQ0FBQyxHQUFHLENBQVosRUFBZU0sR0FBRyxHQUFHZixNQUFNLENBQUNnQixNQUFqQyxFQUF5Q0YsQ0FBQyxHQUFHQyxHQUE3QyxFQUFrREQsQ0FBQyxFQUFuRCxFQUF1RDtBQUN0RDZCLGdCQUFBQSxPQUFPLENBQUNDLElBQVIsQ0FBYTNCLElBQWIsQ0FBa0JDLEtBQWxCLENBQXdCeUIsT0FBTyxDQUFDQyxJQUFoQyxFQUFzQzVDLE1BQU0sQ0FBQ2MsQ0FBRCxDQUFOLENBQVVLLEtBQWhEO0FBQ0E7QUFDRDs7QUFFRHZDLFlBQUFBLEdBQUcsQ0FBRSxhQUFZRSxTQUFTLENBQUM0RCxJQUFELENBQU8sRUFBOUIsQ0FBSDtBQUNBOUQsWUFBQUEsR0FBRyxDQUFFLFNBQVFFLFNBQVMsQ0FBQzZELE9BQU8sQ0FBQ0MsSUFBUixDQUFheEIsSUFBYixDQUFrQixHQUFsQixDQUFELENBQXlCLEVBQTVDLENBQUg7O0FBQ0EwQixZQUFBQSxPQUFPLENBQUNKLElBQUQsQ0FBUDtBQUNBLFdBaEJEO0FBaUJBLFNBbEJEOztBQW9CQSxZQUFJLENBQUNSLEdBQUcsQ0FBQ00sSUFBSixDQUFTNUMsT0FBVixJQUFxQnNDLEdBQUcsQ0FBQ1EsSUFBN0IsRUFBbUM7QUFDbEM7QUFDQSxjQUFJO0FBQUVqRCxZQUFBQTtBQUFGLGNBQVcsSUFBZjtBQUNBLGdCQUFNc0QsT0FBTyxHQUFHNUMsS0FBSyxDQUFDQyxPQUFOLENBQWM4QixHQUFHLENBQUNNLElBQUosQ0FBU08sT0FBdkIsSUFBa0NiLEdBQUcsQ0FBQ00sSUFBSixDQUFTTyxPQUEzQyxHQUFxRCxFQUFyRSxDQUhrQyxDQUtsQztBQUNBOztBQUNBLGdCQUFNQyxDQUFDLEdBQUd2RCxJQUFJLENBQUN3RCxLQUFMLENBQVdoRSxVQUFYLENBQVY7O0FBQ0EsY0FBSStELENBQUosRUFBTztBQUNORCxZQUFBQSxPQUFPLENBQUM5QixJQUFSLENBQWMsSUFBR3hCLElBQUssRUFBdEI7QUFDQUEsWUFBQUEsSUFBSSxHQUFHdUQsQ0FBQyxDQUFDLENBQUQsQ0FBUjtBQUNBLFdBWGlDLENBYWxDOzs7QUFDQSxjQUFJdkQsSUFBSSxJQUFJQSxJQUFJLEtBQUt5QyxHQUFHLENBQUNNLElBQUosQ0FBUy9DLElBQTFCLElBQWtDLENBQUNzRCxPQUFPLENBQUNHLFFBQVIsQ0FBaUJ6RCxJQUFqQixDQUF2QyxFQUErRDtBQUM5RHNELFlBQUFBLE9BQU8sQ0FBQzlCLElBQVIsQ0FBYXhCLElBQWI7QUFDQSxXQWhCaUMsQ0FrQmxDO0FBQ0E7OztBQUNBLGNBQUl5QyxHQUFHLENBQUNNLElBQUosQ0FBU2xDLEdBQVQsSUFBZ0IsT0FBTzRCLEdBQUcsQ0FBQ00sSUFBSixDQUFTbEMsR0FBaEIsS0FBd0IsUUFBNUMsRUFBc0Q7QUFDckQsa0JBQU02QyxJQUFJLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZbkIsR0FBRyxDQUFDTSxJQUFKLENBQVNsQyxHQUFyQixDQUFiO0FBQ0Esa0JBQU1nRCxPQUFPLEdBQUdwQixHQUFHLENBQUNNLElBQUosQ0FBU2xDLEdBQVQsQ0FBYTRCLEdBQUcsQ0FBQ00sSUFBSixDQUFTL0MsSUFBdEIsS0FBZ0MwRCxJQUFJLElBQUlqQixHQUFHLENBQUNNLElBQUosQ0FBU2xDLEdBQVQsQ0FBYTZDLElBQUksQ0FBQyxDQUFELENBQWpCLENBQXhEOztBQUNBLGlCQUFLLE1BQU0sQ0FBRTFELElBQUYsRUFBUWEsR0FBUixDQUFYLElBQTRCOEMsTUFBTSxDQUFDRyxPQUFQLENBQWVyQixHQUFHLENBQUNNLElBQUosQ0FBU2xDLEdBQXhCLENBQTVCLEVBQTBEO0FBQ3pELGtCQUFJQSxHQUFHLEtBQUtnRCxPQUFSLElBQW1CLENBQUNQLE9BQU8sQ0FBQ0csUUFBUixDQUFpQnpELElBQWpCLENBQXhCLEVBQWdEO0FBQy9Dc0QsZ0JBQUFBLE9BQU8sQ0FBQzlCLElBQVIsQ0FBYXhCLElBQWI7QUFDQTtBQUNEO0FBQ0Q7O0FBRUQsZUFBS0ssaUJBQUwsQ0FBdUJMLElBQXZCLEVBQTZCO0FBQUV5QyxZQUFBQTtBQUFGLFdBQTdCLEVBQXNDO0FBQ3JDbkMsWUFBQUEsTUFBTSxFQUFFMEMsaUJBQWlCLENBQUNQLEdBQUcsQ0FBQ1EsSUFBTCxDQURZO0FBRXJDSyxZQUFBQSxPQUZxQztBQUdyQ2YsWUFBQUEsSUFBSSxFQUFFRSxHQUFHLENBQUNNLElBQUosQ0FBU2dCO0FBSHNCLFdBQXRDO0FBS0EsU0FuQ0QsTUFtQ08sSUFBSSxPQUFPdEIsR0FBRyxDQUFDTSxJQUFKLENBQVM1QyxPQUFoQixLQUE0QixRQUFoQyxFQUEwQztBQUNoRCxnQkFBTUwsZ0JBQUU4QyxpQkFBRixDQUFvQixxREFBcEIsRUFBMkU7QUFBRTVDLFlBQUFBLElBQUksRUFBRSxrQkFBUjtBQUE0QkMsWUFBQUEsS0FBSyxFQUFFLHVCQUFuQztBQUE0REMsWUFBQUEsS0FBSyxFQUFFdUMsR0FBRyxDQUFDTSxJQUFKLENBQVM1QztBQUE1RSxXQUEzRSxDQUFOO0FBQ0EsU0FGTSxNQUVBO0FBQ04sZUFBSyxJQUFJLENBQUVILElBQUYsRUFBUUosTUFBUixDQUFULElBQTZCK0QsTUFBTSxDQUFDRyxPQUFQLENBQWVyQixHQUFHLENBQUNNLElBQUosQ0FBUzVDLE9BQXhCLENBQTdCLEVBQStEO0FBQzlELGdCQUFJLE9BQU9QLE1BQVAsS0FBa0IsUUFBdEIsRUFBZ0M7QUFDL0JBLGNBQUFBLE1BQU0sR0FBRztBQUFFcUQsZ0JBQUFBLElBQUksRUFBRXJEO0FBQVIsZUFBVDtBQUNBOztBQUNELGdCQUFJQSxNQUFNLENBQUNxRCxJQUFQLElBQWUsQ0FBQ2UsZUFBTUMsVUFBTixDQUFpQnJFLE1BQU0sQ0FBQ3FELElBQXhCLENBQXBCLEVBQW1EO0FBQ2xEckQsY0FBQUEsTUFBTSxDQUFDcUQsSUFBUCxHQUFjZSxlQUFNM0IsT0FBTixDQUFjSSxHQUFHLENBQUNDLElBQWxCLEVBQXdCOUMsTUFBTSxDQUFDcUQsSUFBL0IsQ0FBZDtBQUNBOztBQUNELGlCQUFLNUMsaUJBQUwsQ0FBdUJMLElBQXZCLEVBQTZCO0FBQzVCeUMsY0FBQUEsR0FBRyxFQUFFLEVBQ0osR0FBR0EsR0FEQztBQUVKLG1CQUFHN0M7QUFGQztBQUR1QixhQUE3QixFQUtHO0FBQ0ZVLGNBQUFBLE1BQU0sRUFBRTBDLGlCQUFpQixDQUFDcEQsTUFBTSxDQUFDcUQsSUFBUixDQUR2QjtBQUVGVixjQUFBQSxJQUFJLEVBQUVFLEdBQUcsQ0FBQ00sSUFBSixDQUFTZ0IsV0FGYjtBQUdGLGlCQUFHbkU7QUFIRCxhQUxIO0FBVUE7QUFDRDs7QUFFRCxZQUFJLENBQUMrRCxNQUFNLENBQUNDLElBQVAsQ0FBWSxLQUFLekQsT0FBakIsRUFBMEJvQixNQUEvQixFQUF1QztBQUN0QyxnQkFBTXpCLGdCQUFFOEMsaUJBQUYsQ0FBcUIsNERBQTJELE9BQU8vQyxJQUFQLEtBQWdCLFFBQWhCLEdBQTRCLElBQUdBLElBQUssR0FBcEMsR0FBeUNnRCxJQUFJLENBQUNDLFNBQUwsQ0FBZWpELElBQWYsQ0FBcUIsRUFBOUksQ0FBTjtBQUNBO0FBQ0QsT0FwR0QsQ0FvR0UsT0FBTzJDLENBQVAsRUFBVTtBQUNYLGFBQUswQixHQUFMLEdBQVcxQixDQUFYO0FBQ0FwRCxRQUFBQSxJQUFJLENBQUNvRCxDQUFELENBQUo7QUFDQXBELFFBQUFBLElBQUksQ0FBQyw0Q0FBRCxDQUFKO0FBRUEsYUFBS2lCLGlCQUFMLENBQXVCLEtBQUtMLElBQTVCLEVBQWtDLEVBQWxDLEVBQXNDO0FBQ3JDTSxVQUFBQSxNQUFNLEVBQUUsQ0FBQztBQUFFRyxZQUFBQTtBQUFGLFdBQUQsS0FBa0I7QUFDekIsa0JBQU07QUFBRTBCLGNBQUFBO0FBQUYsZ0JBQWExQixRQUFuQjs7QUFDQSxnQkFBSSxLQUFLeUQsR0FBVCxFQUFjO0FBQ2Isa0JBQUk7QUFBRUMsZ0JBQUFBO0FBQUYsa0JBQVkzQixDQUFoQjtBQUNBLG9CQUFNeEIsQ0FBQyxHQUFHbUQsS0FBSyxDQUFDQyxPQUFOLENBQWMsTUFBZCxDQUFWOztBQUNBLGtCQUFJcEQsQ0FBQyxLQUFLLENBQUMsQ0FBWCxFQUFjO0FBQ2JtRCxnQkFBQUEsS0FBSyxHQUFHQSxLQUFLLENBQUNFLFNBQU4sQ0FBZ0IsQ0FBaEIsRUFBbUJyRCxDQUFuQixFQUFzQnNELElBQXRCLEVBQVI7QUFDQTs7QUFDRCxtQkFBSyxNQUFNQyxJQUFYLElBQW1CSixLQUFLLENBQUNLLEtBQU4sQ0FBWSxJQUFaLENBQW5CLEVBQXNDO0FBQ3JDckMsZ0JBQUFBLE1BQU0sQ0FBQ0YsS0FBUCxDQUFjLEtBQUlzQyxJQUFLLElBQXZCO0FBQ0E7QUFDRCxhQVRELE1BU087QUFDTnBDLGNBQUFBLE1BQU0sQ0FBQ0YsS0FBUCxDQUFjLHNCQUFxQixLQUFLakMsSUFBSyxJQUE3QztBQUNBO0FBQ0Q7QUFmb0MsU0FBdEM7QUFpQkE7QUFDRDs7QUFFRCxrQ0FBbUIsSUFBbkIsRUFBeUIsV0FBekIsRUF4TGlDLENBMExqQzs7QUFDQSxTQUFLLE1BQU0sQ0FBRXlFLEdBQUYsRUFBT3ZFLEtBQVAsQ0FBWCxJQUE2QnlELE1BQU0sQ0FBQ0csT0FBUCxDQUFlbEUsTUFBZixDQUE3QixFQUFxRDtBQUNwRCxVQUFJLENBQUMrRCxNQUFNLENBQUNlLFNBQVAsQ0FBaUJDLGNBQWpCLENBQWdDQyxJQUFoQyxDQUFxQyxJQUFyQyxFQUEyQ0gsR0FBM0MsQ0FBTCxFQUFzRDtBQUNyRCxhQUFLQSxHQUFMLElBQVl2RSxLQUFaO0FBQ0E7QUFDRDtBQUNEO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0NHLEVBQUFBLGlCQUFpQixDQUFDTCxJQUFELEVBQU82RSxJQUFQLEVBQWFqRixNQUFiLEVBQXFCO0FBQUE7O0FBQ3JDVCxJQUFBQSxHQUFHLENBQUUsa0NBQWlDRSxTQUFTLENBQUUsR0FBRSxLQUFLVyxJQUFLLElBQUdBLElBQUssRUFBdEIsQ0FBeUIsRUFBckUsQ0FBSDtBQUNBLFVBQU1RLEdBQUcsR0FBRyxJQUFJc0UsZ0JBQUosQ0FBWTlFLElBQVosRUFBa0I7QUFDN0IrRSxNQUFBQSxNQUFNLEVBQUUsSUFEcUI7QUFFN0IsU0FBR25GO0FBRjBCLEtBQWxCLENBQVo7QUFJQSxTQUFLTyxPQUFMLENBQWFILElBQWIsSUFBcUIyRCxNQUFNLENBQUNxQixNQUFQLENBQWN4RSxHQUFkLEVBQW1CcUUsSUFBbkIsQ0FBckI7QUFDQXJFLElBQUFBLEdBQUcsQ0FBQ3lFLFdBQUosR0FBa0IsSUFBbEI7QUFDQXpFLElBQUFBLEdBQUcsQ0FBQzBFLGlCQUFKLEdBQXdCLENBQUMsRUFBQ0wsSUFBRCxhQUFDQSxJQUFELDRCQUFDQSxJQUFJLENBQUVwQyxHQUFQLHNDQUFDLFVBQVcwQyxNQUFaLENBQXpCOztBQUVBLFFBQUksQ0FBQzNFLEdBQUcsQ0FBQzBFLGlCQUFMLElBQTBCLDJCQUFDTCxJQUFJLENBQUNwQyxHQUFMLENBQVNNLElBQVQsQ0FBY3FDLFlBQWYsa0RBQUMsc0JBQTZCLFNBQTdCLENBQUQsQ0FBOUIsRUFBd0U7QUFDdkU7QUFDQSxLQVpvQyxDQWNyQzs7O0FBRUE1RSxJQUFBQSxHQUFHLENBQUM2RSxJQUFKLEdBQVcsZUFBZUEsSUFBZixHQUFzQjtBQUNoQ2xHLE1BQUFBLEdBQUcsQ0FBRSxnQ0FBK0JFLFNBQVMsQ0FBQyxLQUFLVyxJQUFOLENBQVksT0FBTVgsU0FBUyxDQUFDd0YsSUFBSSxDQUFDcEMsR0FBTCxDQUFTUSxJQUFWLENBQWdCLEVBQXJGLENBQUg7QUFDQSxVQUFJcUMsR0FBSjs7QUFDQSxVQUFJO0FBQ0hBLFFBQUFBLEdBQUcsR0FBR2pDLE9BQU8sQ0FBQ3dCLElBQUksQ0FBQ3BDLEdBQUwsQ0FBU1EsSUFBVixDQUFiOztBQUNBLFlBQUksQ0FBQ3FDLEdBQUQsSUFBUyxPQUFPQSxHQUFQLEtBQWUsUUFBZixJQUEyQixPQUFPQSxHQUFQLEtBQWUsVUFBdkQsRUFBb0U7QUFDbkUsZ0JBQU0sSUFBSTNDLEtBQUosQ0FBVSw2Q0FBVixDQUFOO0FBQ0EsU0FKRSxDQU1IOzs7QUFDQSxZQUFJMkMsR0FBRyxDQUFDQyxVQUFSLEVBQW9CO0FBQ25CRCxVQUFBQSxHQUFHLEdBQUdBLEdBQUcsQ0FBQ0UsT0FBVjtBQUNBLFNBVEUsQ0FXSDs7O0FBQ0EsWUFBSSxPQUFPRixHQUFQLEtBQWUsVUFBbkIsRUFBK0I7QUFDOUJBLFVBQUFBLEdBQUcsR0FBRyxNQUFNQSxHQUFHLENBQUMsSUFBRCxDQUFmO0FBQ0E7O0FBQ0QsWUFBSSxDQUFDQSxHQUFELElBQVEsT0FBT0EsR0FBUCxLQUFlLFFBQTNCLEVBQXFDO0FBQ3BDLGdCQUFNLElBQUkzQyxLQUFKLENBQVUsc0NBQVYsQ0FBTjtBQUNBO0FBQ0QsT0FsQkQsQ0FrQkUsT0FBT3VCLEdBQVAsRUFBWTtBQUNiLGNBQU1wRSxnQkFBRThDLGlCQUFGLENBQXFCLGtCQUFpQixLQUFLNUMsSUFBSyxNQUFLa0UsR0FBRyxDQUFDdUIsT0FBUSxFQUFqRSxFQUFvRTtBQUFFekYsVUFBQUEsSUFBSSxFQUFFLEtBQUtBLElBQWI7QUFBbUJDLFVBQUFBLEtBQUssRUFBRSxnQkFBMUI7QUFBNENDLFVBQUFBLEtBQUssRUFBRWdFO0FBQW5ELFNBQXBFLENBQU47QUFDQTs7QUFFRCxXQUFLWixPQUFMLEdBQXNDZ0MsR0FBRyxDQUFDaEMsT0FBMUM7QUFDQSxXQUFLb0MsU0FBTCxHQUFzQ0osR0FBRyxDQUFDSSxTQUExQztBQUNBLFdBQUtDLGNBQUwsR0FBc0NMLEdBQUcsQ0FBQ0ssY0FBMUM7QUFDQSxXQUFLQyxJQUFMLEdBQXNDTixHQUFHLENBQUNNLElBQTFDO0FBQ0EsV0FBS0MsVUFBTCxHQUFzQ1AsR0FBRyxDQUFDTyxVQUExQztBQUNBLFdBQUtDLDhCQUFMLEdBQXNDUixHQUFHLENBQUNRLDhCQUExQztBQUNBLFdBQUtDLE9BQUwsR0FBc0NULEdBQUcsQ0FBQ1MsT0FBMUM7QUFFQSxXQUFLQyxJQUFMLENBQVU7QUFDVGxGLFFBQUFBLElBQUksRUFBUXdFLEdBQUcsQ0FBQ3hFLElBRFA7QUFFVG1GLFFBQUFBLE1BQU0sRUFBTVgsR0FBRyxDQUFDVyxNQUZQO0FBR1RDLFFBQUFBLFFBQVEsRUFBSVosR0FBRyxDQUFDWSxRQUhQO0FBSVQzRCxRQUFBQSxJQUFJLEVBQVErQyxHQUFHLENBQUMvQyxJQUFKLElBQVksS0FBS0EsSUFKcEI7QUFLVDRELFFBQUFBLFVBQVUsRUFBRWIsR0FBRyxDQUFDYSxVQUxQO0FBTVRuRyxRQUFBQSxJQUFJLEVBQVEsS0FBS0EsSUFBTCxJQUFhc0YsR0FBRyxDQUFDdEYsSUFOcEI7QUFPVG9HLFFBQUFBLE9BQU8sRUFBS2QsR0FBRyxDQUFDYyxPQVBQO0FBUVRyQixRQUFBQSxNQUFNLEVBQU0sS0FBS0EsTUFSUjtBQVNUc0IsUUFBQUEsS0FBSyxFQUFPZixHQUFHLENBQUNlLEtBQUosS0FBYyxRQUFkLElBQTBCZixHQUFHLENBQUNlLEtBQTlCLElBQXVDLEtBQUtyRztBQVQvQyxPQUFWO0FBWUEsWUFBTXNHLGFBQWEsR0FBRyxLQUFLUCxPQUFMLElBQWdCLEtBQUtRLE1BQUwsQ0FBWUMsSUFBWixDQUFpQlQsT0FBdkQ7O0FBQ0EsVUFBSU8sYUFBYSxJQUFJLE9BQU9BLGFBQWEsQ0FBQ0csUUFBckIsS0FBa0MsVUFBdkQsRUFBbUU7QUFDbEVILFFBQUFBLGFBQWEsQ0FBQ0csUUFBZCxHQUF5QixPQUFPO0FBQUVDLFVBQUFBLFFBQUY7QUFBWUMsVUFBQUEsSUFBWjtBQUFrQkMsVUFBQUE7QUFBbEIsU0FBUCxLQUFvQztBQUM1RCxjQUFJLE1BQU1BLElBQUksRUFBZCxFQUFrQjtBQUNqQixnQkFBSTtBQUFFYixjQUFBQTtBQUFGLGdCQUFjLElBQWxCOztBQUNBLGdCQUFJLE9BQU9BLE9BQVAsS0FBbUIsVUFBdkIsRUFBbUM7QUFDbENBLGNBQUFBLE9BQU8sR0FBRyxNQUFNQSxPQUFPLENBQUNZLElBQUQsQ0FBdkI7QUFDQTs7QUFDRCxhQUFDQSxJQUFJLENBQUNsRyxRQUFMLElBQWlCLEtBQUtvRyxHQUFMLENBQVMsVUFBVCxDQUFsQixFQUF3Qy9FLE1BQXhDLENBQStDRyxLQUEvQyxDQUFzRCxHQUFFOEQsT0FBUSxJQUFoRTtBQUNBVyxZQUFBQSxRQUFRLENBQUMsQ0FBRCxDQUFSO0FBQ0EsbUJBQU8sS0FBUDtBQUNBO0FBQ0QsU0FWRDtBQVdBOztBQUVELFVBQUksT0FBT3BCLEdBQUcsQ0FBQ2hGLE1BQVgsS0FBc0IsVUFBMUIsRUFBc0M7QUFDckMsYUFBS0EsTUFBTCxHQUFjZ0YsR0FBRyxDQUFDaEYsTUFBbEI7QUFDQSxPQUZELE1BRU87QUFDTixhQUFLQSxNQUFMLEdBQWMsTUFBTXdHLE1BQU4sSUFBZ0I7QUFDN0IsY0FBSSxLQUFLbkIsY0FBTCxLQUF3QixNQUF4QixJQUFrQyxDQUFDLEtBQUtrQixHQUFMLENBQVMsTUFBVCxDQUF2QyxFQUF5RDtBQUN4RCxrQkFBTUUsTUFBTSxHQUFHLEtBQUtwQixjQUFMLElBQXVCLEtBQUtPLFFBQUwsQ0FBYyxLQUFLUCxjQUFuQixDQUF0Qzs7QUFDQSxnQkFBSW9CLE1BQUosRUFBWTtBQUNYLHFCQUFPLE1BQU1BLE1BQU0sQ0FBQ3pHLE1BQVAsQ0FBY3NFLElBQWQsQ0FBbUJtQyxNQUFuQixFQUEyQkQsTUFBM0IsQ0FBYjtBQUNBO0FBQ0Q7O0FBQ0QsaUJBQU8sTUFBTUUsY0FBWTFHLE1BQVosQ0FBbUJzRSxJQUFuQixDQUF3Qm9DLGFBQXhCLEVBQXFDRixNQUFyQyxDQUFiO0FBQ0EsU0FSRDtBQVNBO0FBQ0QsS0F6RVUsQ0F5RVRHLElBekVTLENBeUVKekcsR0F6RUksQ0FBWDtBQTBFQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0MwRyxFQUFBQSxNQUFNLEdBQUc7QUFDUixXQUFPLEVBQ04sR0FBRyxNQUFNQSxNQURIO0FBRU5ySCxNQUFBQSxJQUFJLEVBQUUsS0FBS0E7QUFGTCxLQUFQO0FBSUE7O0FBalU2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb21tYW5kIGZyb20gJy4vY29tbWFuZCc7XG5pbXBvcnQgZGVidWcgZnJvbSAnLi4vbGliL2RlYnVnJztcbmltcG9ydCBFIGZyb20gJy4uL2xpYi9lcnJvcnMnO1xuaW1wb3J0IGhlbHBDb21tYW5kIGZyb20gJy4uL2NvbW1hbmRzL2hlbHAnO1xuaW1wb3J0IF9wYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQgeyBkZWNsYXJlQ0xJS2l0Q2xhc3MsIGZpbGVuYW1lLCBmaW5kUGFja2FnZSwgaXNFeGVjdXRhYmxlIH0gZnJvbSAnLi4vbGliL3V0aWwnO1xuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcblxuY29uc3QgeyBsb2csIHdhcm4gfSA9IGRlYnVnKCdjbGkta2l0OmV4dGVuc2lvbicpO1xuY29uc3QgeyBoaWdobGlnaHQgfSA9IGRlYnVnLnN0eWxlcztcblxuY29uc3QgbmFtZVJlZ0V4cCA9IC9eKD86KEBcXHcrKVxcLyk/KC4qKSQvO1xuXG4vKipcbiAqIERlZmluZXMgYSBuYW1lc3BhY2UgdGhhdCB3cmFwcyBhbiBleHRlcm5hbCBwcm9ncmFtIG9yIHNjcmlwdC5cbiAqXG4gKiBAZXh0ZW5kcyB7Q29tbWFuZH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXh0ZW5zaW9uIHtcblx0LyoqXG5cdCAqIERldGVjdHMgdGhlIGV4dGVuc2lvbiBkZWZpbmVkIGluIHRoZSBzcGVjaWZpZWQgcGF0aCBhbmQgaW5pdGlhbGl6ZXMgaXQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gcGF0aE9yUGFyYW1zIC0gVGhlIHBhdGggdG8gdGhlIGV4dGVuc2lvbiBvciBhIHBhcmFtcyBvYmplY3QuIElmIHRoZVxuXHQgKiBwYXRoIGlzIGEgTm9kZS5qcyBwYWNrYWdlIHdpdGggYSBgcGFja2FnZS5qc29uYCBjb250YWluaW5nIGEgYFwiY2xpLWtpdFwiYCBwcm9wZXJ0eSwgaXQgd2lsbFxuXHQgKiBtZXJnZSB0aGUgZXh0ZXJuYWwgY2xpLWtpdCBjb250ZXh0IHRyZWUgaW50byB0aGlzIG5hbWVzcGFjZS5cblx0ICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIC0gVmFyaW91cyBwYXJhbWV0ZXJzIHdoZW4gYGV4dGVuc2lvblBhdGhgIGlzIGEgYFN0cmluZ2AuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLmV4cG9ydHNdIC0gQSBtYXAgb2YgZXhwb3J0ZWQgY29tbWFuZCBuYW1lcyB0byBkZXNjcmlwdG9ycyBjb250YWluaW5nXG5cdCAqIGBhbGlhc2VzYCwgYGRlc2NgLCBgZXhlYCwgYG1haW5gLCBhbmQgYG5hbWVgIHByb3BzLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW3BhcmFtcy5uYW1lXSAtIFRoZSBleHRlbnNpb24gbmFtZS4gSWYgbm90IHNldCwgaXQgd2lsbCBsb2FkIGl0IGZyb20gdGhlXG5cdCAqIGV4dGVuc2lvbidzIGBwYWNrYWdlLmpzb25gIG9yIHRoZSBmaWxlbmFtZS5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtwYXJhbXMucGF0aF0gLSBUaGUgcGF0aCB0byBhbiBleGVjdXRhYmxlLCBhIEphdmFTY3JpcHQgZmlsZSwgb3IgTm9kZS5qc1xuXHQgKiBwYWNrYWdlLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGF0aE9yUGFyYW1zLCBwYXJhbXMpIHtcblx0XHRsZXQgcGF0aCA9IHBhdGhPclBhcmFtcztcblxuXHRcdGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycgJiYgIXBhcmFtcykge1xuXHRcdFx0cGFyYW1zID0ge307XG5cdFx0fSBlbHNlIGlmIChwYXRoT3JQYXJhbXMgJiYgdHlwZW9mIHBhdGhPclBhcmFtcyA9PT0gJ29iamVjdCcpIHtcblx0XHRcdCh7IHBhdGggfSA9IHBhcmFtcyA9IHBhdGhPclBhcmFtcyk7XG5cdFx0fVxuXG5cdFx0aWYgKCFwYXRoIHx8IHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCBhbiBleHRlbnNpb24gcGF0aCBvciBwYXJhbXMgb2JqZWN0JywgeyBuYW1lOiAncGF0aE9yUGFyYW1zJywgc2NvcGU6ICdFeHRlbnNpb24uY29uc3RydWN0b3InLCB2YWx1ZTogcGF0aE9yUGFyYW1zIH0pO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgcGFyYW1zICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCBleHRlbnNpb24gcGFyYW1zIHRvIGJlIGFuIG9iamVjdCBvciBDb250ZXh0JywgeyBuYW1lOiAncGFyYW1zJywgc2NvcGU6ICdFeHRlbnNpb24uY29uc3RydWN0b3InLCB2YWx1ZTogcGFyYW1zIH0pO1xuXHRcdH1cblxuXHRcdHRoaXMuZXhwb3J0cyA9IHBhcmFtcy5leHBvcnRzIHx8IHt9O1xuXHRcdHRoaXMubmFtZSA9IHBhcmFtcy5uYW1lO1xuXHRcdHRoaXMucGF0aCA9IHBhdGg7XG5cblx0XHRpZiAodHlwZW9mIHRoaXMuZXhwb3J0cyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHRocm93IEUuSU5WQUxJRF9BUkdVTUVOVCgnRXhwZWN0ZWQgZXh0ZW5zaW9uIGV4cG9ydHMgdG8gYmUgYW4gb2JqZWN0JywgeyBuYW1lOiAncGFyYW1zLmV4cG9ydHMnLCBzY29wZTogJ0V4dGVuc2lvbi5jb25zdHJ1Y3RvcicsIHZhbHVlOiBwYXJhbXMuZXhwb3J0cyB9KTtcblx0XHR9XG5cblx0XHQvLyB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGV4dGVuc2lvbiBpcyBhIGJpbmFyeSBvciBpZiBpdCdzIGEgTm9kZSBwYWNrYWdlXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGV4ZSA9IGlzRXhlY3V0YWJsZShwYXRoKTtcblx0XHRcdGlmICghdGhpcy5uYW1lKSB7XG5cdFx0XHRcdHRoaXMubmFtZSA9IGZpbGVuYW1lKGV4ZVswXSk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMucmVnaXN0ZXJFeHRlbnNpb24odGhpcy5uYW1lLCB7IGV4ZSB9LCB7XG5cdFx0XHRcdGFjdGlvbjogYXN5bmMgKHsgX19hcmd2LCBjbWQsIHRlcm1pbmFsIH0pID0+IHtcblx0XHRcdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkoZXhlKSkge1xuXHRcdFx0XHRcdFx0dGhyb3cgRS5OT19FWEVDVVRBQkxFKGBFeHRlbnNpb24gXCIke3RoaXMubmFtZX1cIiBoYXMgbm8gZXhlY3V0YWJsZSFgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBiaW4gPSBleGVbMF07XG5cdFx0XHRcdFx0Y29uc3QgYXJncyA9IGV4ZS5zbGljZSgxKTtcblx0XHRcdFx0XHRjb25zdCBwID0gX19hcmd2LmZpbmRJbmRleChhcmcgPT4gYXJnICYmIGFyZy50eXBlID09PSAnZXh0ZW5zaW9uJyAmJiBhcmcuY29tbWFuZCA9PT0gY21kKTtcblxuXHRcdFx0XHRcdGlmIChwICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IHAgKyAxLCBsZW4gPSBfX2FyZ3YubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0YXJncy5wdXNoLmFwcGx5KGFyZ3MsIF9fYXJndltpXS5pbnB1dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gc3Bhd24gdGhlIHByb2Nlc3Ncblx0XHRcdFx0XHRsb2coYFJ1bm5pbmc6ICR7aGlnaGxpZ2h0KGAke2Jpbn0gJHthcmdzLmpvaW4oJyAnKX1gKX1gKTtcblx0XHRcdFx0XHRjb25zdCBjaGlsZCA9IHNwYXduKGJpbiwgYXJncywgeyB3aW5kb3dzSGlkZTogdHJ1ZSB9KTtcblx0XHRcdFx0XHRjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBkYXRhID0+IHRlcm1pbmFsLnN0ZG91dC53cml0ZShkYXRhLnRvU3RyaW5nKCkpKTtcblx0XHRcdFx0XHRjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBkYXRhID0+IHRlcm1pbmFsLnN0ZGVyci53cml0ZShkYXRhLnRvU3RyaW5nKCkpKTtcblx0XHRcdFx0XHRhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGNoaWxkLm9uKCdjbG9zZScsIChjb2RlID0gMCkgPT4gcmVzb2x2ZSh7IGNvZGUgfSkpKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZGVzYzogcGFyYW1zLmRlc2Ncblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdC8vIG1heWJlIGEgTm9kZSBwYWNrYWdlP1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bGV0IHBrZztcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRwa2cgPSBmaW5kUGFja2FnZShwYXRoKTtcblx0XHRcdFx0XHRpZiAoIXBrZy5yb290KSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHR0aHJvdyBFLklOVkFMSURfRVhURU5TSU9OKGBJbnZhbGlkIGV4dGVuc2lvbjogVW5hYmxlIHRvIGZpbmQgZXhlY3V0YWJsZSwgc2NyaXB0LCBvciBwYWNrYWdlOiAke3R5cGVvZiBwYXRoID09PSAnc3RyaW5nJyA/IGBcIiR7cGF0aH1cImAgOiBKU09OLnN0cmluZ2lmeShwYXRoKX1gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghdGhpcy5uYW1lKSB7XG5cdFx0XHRcdFx0dGhpcy5uYW1lID0gcGtnLmpzb24ubmFtZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghdGhpcy5uYW1lKSB7XG5cdFx0XHRcdFx0dGhpcy5uYW1lID0gZmlsZW5hbWUocGF0aCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBtYWtlRGVmYXVsdEFjdGlvbiA9IG1haW4gPT4ge1xuXHRcdFx0XHRcdHJldHVybiBhc3luYyAoeyBfX2FyZ3YsIGNtZCB9KSA9PiB7XG5cdFx0XHRcdFx0XHRwcm9jZXNzLmFyZ3YgPSBbXG5cdFx0XHRcdFx0XHRcdHByb2Nlc3MuZXhlY1BhdGgsXG5cdFx0XHRcdFx0XHRcdG1haW5cblx0XHRcdFx0XHRcdF07XG5cblx0XHRcdFx0XHRcdGNvbnN0IHAgPSBfX2FyZ3YuZmluZEluZGV4KGFyZyA9PiBhcmcgJiYgYXJnLnR5cGUgPT09ICdleHRlbnNpb24nICYmIGFyZy5jb21tYW5kID09PSBjbWQpO1xuXHRcdFx0XHRcdFx0aWYgKHAgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSBwICsgMSwgbGVuID0gX19hcmd2Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5hcmd2LnB1c2guYXBwbHkocHJvY2Vzcy5hcmd2LCBfX2FyZ3ZbaV0uaW5wdXQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGxvZyhgUmVxdWlyaW5nICR7aGlnaGxpZ2h0KG1haW4pfWApO1xuXHRcdFx0XHRcdFx0bG9nKGBBcmdzOiAke2hpZ2hsaWdodChwcm9jZXNzLmFyZ3Yuam9pbignICcpKX1gKTtcblx0XHRcdFx0XHRcdHJlcXVpcmUobWFpbik7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRpZiAoIXBrZy5qc29uLmV4cG9ydHMgJiYgcGtnLm1haW4pIHtcblx0XHRcdFx0XHQvLyBsZWdhY3kgTm9kZS5qcyBleHRlbnNpb25cblx0XHRcdFx0XHRsZXQgeyBuYW1lIH0gPSB0aGlzO1xuXHRcdFx0XHRcdGNvbnN0IGFsaWFzZXMgPSBBcnJheS5pc0FycmF5KHBrZy5qc29uLmFsaWFzZXMpID8gcGtnLmpzb24uYWxpYXNlcyA6IFtdO1xuXG5cdFx0XHRcdFx0Ly8gaWYgdGhlIHBhY2thZ2UgbmFtZSBjb250YWlucyBhIHNjb3BlLCBhZGQgdGhlIHNjb3BlZCBwYWNrYWdlIG5hbWUgYXMgYSBoaWRkZW5cblx0XHRcdFx0XHQvLyBhbGlhcyBhbmQgc3RyaXAgdGhlIHNjb3BlIGZyb20gdGhlIG5hbWVcblx0XHRcdFx0XHRjb25zdCBtID0gbmFtZS5tYXRjaChuYW1lUmVnRXhwKTtcblx0XHRcdFx0XHRpZiAobSkge1xuXHRcdFx0XHRcdFx0YWxpYXNlcy5wdXNoKGAhJHtuYW1lfWApO1xuXHRcdFx0XHRcdFx0bmFtZSA9IG1bMl07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gaWYgdGhlIG5hbWUgaXMgZGlmZmVyZW50IHRoYW4gdGhlIG9uZSBpbiB0aGUgcGFja2FnZS5qc29uLCBhZGQgaXQgdG8gdGhlIGFsaWFzZXNcblx0XHRcdFx0XHRpZiAobmFtZSAmJiBuYW1lICE9PSBwa2cuanNvbi5uYW1lICYmICFhbGlhc2VzLmluY2x1ZGVzKG5hbWUpKSB7XG5cdFx0XHRcdFx0XHRhbGlhc2VzLnB1c2gobmFtZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gaWYgdGhlIHBhY2thZ2UgaGFzIGEgYmluIHNjcmlwdCB0aGF0IG1hdGNoZXMgdGhlIHBhY2thZ2UgbmFtZSwgdGhlbiBhZGQgYW55IG90aGVyXG5cdFx0XHRcdFx0Ly8gYmluIG5hbWUgdGhhdCBhbGlhc2VzIHRoZSBwYWNrYWdlIG5hbWVkIGJpblxuXHRcdFx0XHRcdGlmIChwa2cuanNvbi5iaW4gJiYgdHlwZW9mIHBrZy5qc29uLmJpbiA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGJpbnMgPSBPYmplY3Qua2V5cyhwa2cuanNvbi5iaW4pO1xuXHRcdFx0XHRcdFx0Y29uc3QgcHJpbWFyeSA9IHBrZy5qc29uLmJpbltwa2cuanNvbi5uYW1lXSB8fCAoYmlucyAmJiBwa2cuanNvbi5iaW5bYmluc1swXV0pO1xuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCBbIG5hbWUsIGJpbiBdIG9mIE9iamVjdC5lbnRyaWVzKHBrZy5qc29uLmJpbikpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGJpbiAhPT0gcHJpbWFyeSAmJiAhYWxpYXNlcy5pbmNsdWRlcyhuYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRcdGFsaWFzZXMucHVzaChuYW1lKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRoaXMucmVnaXN0ZXJFeHRlbnNpb24obmFtZSwgeyBwa2cgfSwge1xuXHRcdFx0XHRcdFx0YWN0aW9uOiBtYWtlRGVmYXVsdEFjdGlvbihwa2cubWFpbiksXG5cdFx0XHRcdFx0XHRhbGlhc2VzLFxuXHRcdFx0XHRcdFx0ZGVzYzogcGtnLmpzb24uZGVzY3JpcHRpb25cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgcGtnLmpzb24uZXhwb3J0cyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0aHJvdyBFLklOVkFMSURfRVhURU5TSU9OKCdJbnZhbGlkIGV4dGVuc2lvbjogRXhwZWN0ZWQgZXhwb3J0cyB0byBiZSBhbiBvYmplY3QnLCB7IG5hbWU6ICdwa2cuanNvbi5leHBvcnRzJywgc2NvcGU6ICdFeHRlbnNpb24uY29uc3RydWN0b3InLCB2YWx1ZTogcGtnLmpzb24uZXhwb3J0cyB9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmb3IgKGxldCBbIG5hbWUsIHBhcmFtcyBdIG9mIE9iamVjdC5lbnRyaWVzKHBrZy5qc29uLmV4cG9ydHMpKSB7XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIHBhcmFtcyA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHRcdFx0cGFyYW1zID0geyBtYWluOiBwYXJhbXMgfTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChwYXJhbXMubWFpbiAmJiAhX3BhdGguaXNBYnNvbHV0ZShwYXJhbXMubWFpbikpIHtcblx0XHRcdFx0XHRcdFx0cGFyYW1zLm1haW4gPSBfcGF0aC5yZXNvbHZlKHBrZy5yb290LCBwYXJhbXMubWFpbik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLnJlZ2lzdGVyRXh0ZW5zaW9uKG5hbWUsIHtcblx0XHRcdFx0XHRcdFx0cGtnOiB7XG5cdFx0XHRcdFx0XHRcdFx0Li4ucGtnLFxuXHRcdFx0XHRcdFx0XHRcdC4uLnBhcmFtc1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LCB7XG5cdFx0XHRcdFx0XHRcdGFjdGlvbjogbWFrZURlZmF1bHRBY3Rpb24ocGFyYW1zLm1haW4pLFxuXHRcdFx0XHRcdFx0XHRkZXNjOiBwa2cuanNvbi5kZXNjcmlwdGlvbixcblx0XHRcdFx0XHRcdFx0Li4ucGFyYW1zXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIU9iamVjdC5rZXlzKHRoaXMuZXhwb3J0cykubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dGhyb3cgRS5JTlZBTElEX0VYVEVOU0lPTihgSW52YWxpZCBleHRlbnNpb246IFVuYWJsZSB0byBmaW5kIGV4dGVuc2lvbidzIG1haW4gZmlsZTogJHt0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycgPyBgXCIke3BhdGh9XCJgIDogSlNPTi5zdHJpbmdpZnkocGF0aCl9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhpcy5lcnIgPSBlO1xuXHRcdFx0XHR3YXJuKGUpO1xuXHRcdFx0XHR3YXJuKCdGb3VuZCBiYWQgZXh0ZW5zaW9uLCBjcmVhdGluZyBlcnJvciBhY3Rpb24nKTtcblxuXHRcdFx0XHR0aGlzLnJlZ2lzdGVyRXh0ZW5zaW9uKHRoaXMubmFtZSwge30sIHtcblx0XHRcdFx0XHRhY3Rpb246ICh7IHRlcm1pbmFsIH0pID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHsgc3RkZXJyIH0gPSB0ZXJtaW5hbDtcblx0XHRcdFx0XHRcdGlmICh0aGlzLmVycikge1xuXHRcdFx0XHRcdFx0XHRsZXQgeyBzdGFjayB9ID0gZTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcCA9IHN0YWNrLmluZGV4T2YoJ1xcblxcbicpO1xuXHRcdFx0XHRcdFx0XHRpZiAocCAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHRzdGFjayA9IHN0YWNrLnN1YnN0cmluZygwLCBwKS50cmltKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBsaW5lIG9mIHN0YWNrLnNwbGl0KCdcXG4nKSkge1xuXHRcdFx0XHRcdFx0XHRcdHN0ZGVyci53cml0ZShgICAke2xpbmV9XFxuYCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHN0ZGVyci53cml0ZShgSW52YWxpZCBleHRlbnNpb246ICR7dGhpcy5uYW1lfVxcbmApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZGVjbGFyZUNMSUtpdENsYXNzKHRoaXMsICdFeHRlbnNpb24nKTtcblxuXHRcdC8vIG1peCBpbiBhbnkgb3RoZXIgY3VzdG9tIHByb3BzXG5cdFx0Zm9yIChjb25zdCBbIGtleSwgdmFsdWUgXSBvZiBPYmplY3QuZW50cmllcyhwYXJhbXMpKSB7XG5cdFx0XHRpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLCBrZXkpKSB7XG5cdFx0XHRcdHRoaXNba2V5XSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyBhIGNvbW1hbmQgd2l0aCB0aGUgZXh0ZW5zaW9uIGV4cG9ydCBpbmZvLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIFRoZSBjb21tYW5kIG5hbWUuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBtZXRhIC0gTWV0YWRhdGEgdG8gbWl4IGludG8gdGhlIGNvbW1hbmQgaW5zdGFuY2UuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBDb21tYW5kIHNwZWNpZmljIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0cmVnaXN0ZXJFeHRlbnNpb24obmFtZSwgbWV0YSwgcGFyYW1zKSB7XG5cdFx0bG9nKGBSZWdpc3RlcmluZyBleHRlbnNpb24gY29tbWFuZDogJHtoaWdobGlnaHQoYCR7dGhpcy5uYW1lfToke25hbWV9YCl9YCk7XG5cdFx0Y29uc3QgY21kID0gbmV3IENvbW1hbmQobmFtZSwge1xuXHRcdFx0cGFyZW50OiB0aGlzLFxuXHRcdFx0Li4ucGFyYW1zXG5cdFx0fSk7XG5cdFx0dGhpcy5leHBvcnRzW25hbWVdID0gT2JqZWN0LmFzc2lnbihjbWQsIG1ldGEpO1xuXHRcdGNtZC5pc0V4dGVuc2lvbiA9IHRydWU7XG5cdFx0Y21kLmlzQ0xJS2l0RXh0ZW5zaW9uID0gISFtZXRhPy5wa2c/LmNsaWtpdDtcblxuXHRcdGlmICghY21kLmlzQ0xJS2l0RXh0ZW5zaW9uIHx8ICFtZXRhLnBrZy5qc29uLmRlcGVuZGVuY2llcz8uWydjbGkta2l0J10pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyB3ZSBvbmx5IHdhbnQgdG8gZGVmaW5lIGBjbWQubG9hZCgpYCBpZiBtYWluIGV4cG9ydHMgYSBjbGkta2l0IG9iamVjdFxuXG5cdFx0Y21kLmxvYWQgPSBhc3luYyBmdW5jdGlvbiBsb2FkKCkge1xuXHRcdFx0bG9nKGBSZXF1aXJpbmcgY2xpLWtpdCBleHRlbnNpb246ICR7aGlnaGxpZ2h0KHRoaXMubmFtZSl9IC0+ICR7aGlnaGxpZ2h0KG1ldGEucGtnLm1haW4pfWApO1xuXHRcdFx0bGV0IGN0eDtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGN0eCA9IHJlcXVpcmUobWV0YS5wa2cubWFpbik7XG5cdFx0XHRcdGlmICghY3R4IHx8ICh0eXBlb2YgY3R4ICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgY3R4ICE9PSAnZnVuY3Rpb24nKSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignRXh0ZW5zaW9uIG11c3QgZXhwb3J0IGFuIG9iamVjdCBvciBmdW5jdGlvbicpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gaWYgdGhpcyBpcyBhbiBFUzYgbW9kdWxlLCBncmFiIHRoZSBkZWZhdWx0IGV4cG9ydFxuXHRcdFx0XHRpZiAoY3R4Ll9fZXNNb2R1bGUpIHtcblx0XHRcdFx0XHRjdHggPSBjdHguZGVmYXVsdDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGlmIHRoZSBleHBvcnQgd2FzIGEgZnVuY3Rpb24sIGNhbGwgaXQgbm93IHRvIGdldCBpdHMgQ0xJIGRlZmluaXRpb25cblx0XHRcdFx0aWYgKHR5cGVvZiBjdHggPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRjdHggPSBhd2FpdCBjdHgodGhpcyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFjdHggfHwgdHlwZW9mIGN0eCAhPT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0V4dGVuc2lvbiBkb2VzIG5vdCByZXNvbHZlIGFuIG9iamVjdCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0dGhyb3cgRS5JTlZBTElEX0VYVEVOU0lPTihgQmFkIGV4dGVuc2lvbiBcIiR7dGhpcy5uYW1lfVwiOiAke2Vyci5tZXNzYWdlfWAsIHsgbmFtZTogdGhpcy5uYW1lLCBzY29wZTogJ0V4dGVuc2lvbi5sb2FkJywgdmFsdWU6IGVyciB9KTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5hbGlhc2VzICAgICAgICAgICAgICAgICAgICAgICAgPSBjdHguYWxpYXNlcztcblx0XHRcdHRoaXMuY2FtZWxDYXNlICAgICAgICAgICAgICAgICAgICAgID0gY3R4LmNhbWVsQ2FzZTtcblx0XHRcdHRoaXMuZGVmYXVsdENvbW1hbmQgICAgICAgICAgICAgICAgID0gY3R4LmRlZmF1bHRDb21tYW5kO1xuXHRcdFx0dGhpcy5oZWxwICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBjdHguaGVscDtcblx0XHRcdHRoaXMucmVtb3RlSGVscCAgICAgICAgICAgICAgICAgICAgID0gY3R4LnJlbW90ZUhlbHA7XG5cdFx0XHR0aGlzLnRyZWF0VW5rbm93bk9wdGlvbnNBc0FyZ3VtZW50cyA9IGN0eC50cmVhdFVua25vd25PcHRpb25zQXNBcmd1bWVudHM7XG5cdFx0XHR0aGlzLnZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICA9IGN0eC52ZXJzaW9uO1xuXG5cdFx0XHR0aGlzLmluaXQoe1xuXHRcdFx0XHRhcmdzOiAgICAgICBjdHguYXJncyxcblx0XHRcdFx0YmFubmVyOiAgICAgY3R4LmJhbm5lcixcblx0XHRcdFx0Y29tbWFuZHM6ICAgY3R4LmNvbW1hbmRzLFxuXHRcdFx0XHRkZXNjOiAgICAgICBjdHguZGVzYyB8fCB0aGlzLmRlc2MsXG5cdFx0XHRcdGV4dGVuc2lvbnM6IGN0eC5leHRlbnNpb25zLFxuXHRcdFx0XHRuYW1lOiAgICAgICB0aGlzLm5hbWUgfHwgY3R4Lm5hbWUsXG5cdFx0XHRcdG9wdGlvbnM6ICAgIGN0eC5vcHRpb25zLFxuXHRcdFx0XHRwYXJlbnQ6ICAgICB0aGlzLnBhcmVudCxcblx0XHRcdFx0dGl0bGU6ICAgICAgY3R4LnRpdGxlICE9PSAnR2xvYmFsJyAmJiBjdHgudGl0bGUgfHwgdGhpcy5uYW1lXG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uc3QgdmVyc2lvbk9wdGlvbiA9IHRoaXMudmVyc2lvbiAmJiB0aGlzLmxvb2t1cC5sb25nLnZlcnNpb247XG5cdFx0XHRpZiAodmVyc2lvbk9wdGlvbiAmJiB0eXBlb2YgdmVyc2lvbk9wdGlvbi5jYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHR2ZXJzaW9uT3B0aW9uLmNhbGxiYWNrID0gYXN5bmMgKHsgZXhpdENvZGUsIG9wdHMsIG5leHQgfSkgPT4ge1xuXHRcdFx0XHRcdGlmIChhd2FpdCBuZXh0KCkpIHtcblx0XHRcdFx0XHRcdGxldCB7IHZlcnNpb24gfSA9IHRoaXM7XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIHZlcnNpb24gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRcdFx0dmVyc2lvbiA9IGF3YWl0IHZlcnNpb24ob3B0cyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQob3B0cy50ZXJtaW5hbCB8fCB0aGlzLmdldCgndGVybWluYWwnKSkuc3Rkb3V0LndyaXRlKGAke3ZlcnNpb259XFxuYCk7XG5cdFx0XHRcdFx0XHRleGl0Q29kZSgwKTtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlb2YgY3R4LmFjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHR0aGlzLmFjdGlvbiA9IGN0eC5hY3Rpb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmFjdGlvbiA9IGFzeW5jIHBhcnNlciA9PiB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuZGVmYXVsdENvbW1hbmQgIT09ICdoZWxwJyB8fCAhdGhpcy5nZXQoJ2hlbHAnKSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZGVmY21kID0gdGhpcy5kZWZhdWx0Q29tbWFuZCAmJiB0aGlzLmNvbW1hbmRzW3RoaXMuZGVmYXVsdENvbW1hbmRdO1xuXHRcdFx0XHRcdFx0aWYgKGRlZmNtZCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYXdhaXQgZGVmY21kLmFjdGlvbi5jYWxsKGRlZmNtZCwgcGFyc2VyKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIGF3YWl0IGhlbHBDb21tYW5kLmFjdGlvbi5jYWxsKGhlbHBDb21tYW5kLCBwYXJzZXIpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH0uYmluZChjbWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHNjaGVtYSBmb3IgdGhpcyBleHRlbnNpb24gYW5kIGFsbCBjaGlsZCBjb250ZXh0cy5cblx0ICpcblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHNjaGVtYSgpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4uc3VwZXIuc2NoZW1hLFxuXHRcdFx0cGF0aDogdGhpcy5wYXRoXG5cdFx0fTtcblx0fVxufVxuIl0sImZpbGUiOiJwYXJzZXIvZXh0ZW5zaW9uLmpzIn0= |
{ | ||
"name": "cli-kit", | ||
"version": "1.15.0", | ||
"version": "1.16.0", | ||
"description": "Everything you need to create awesome command line interfaces", | ||
@@ -49,18 +49,18 @@ "main": "./dist/index.js", | ||
"pluralize": "^8.0.0", | ||
"semver": "^7.3.5", | ||
"semver": "^7.3.7", | ||
"snooplogg": "^3.0.2", | ||
"source-map-support": "^0.5.20", | ||
"source-map-support": "^0.5.21", | ||
"which": "^2.0.2", | ||
"ws": "^7.5.5" | ||
"ws": "^7.5.7" | ||
}, | ||
"devDependencies": { | ||
"@babel/core": "^7.16.0", | ||
"@babel/plugin-proposal-class-properties": "^7.16.0", | ||
"@babel/plugin-proposal-optional-chaining": "^7.16.0", | ||
"@babel/plugin-transform-modules-commonjs": "^7.16.0", | ||
"@babel/register": "^7.16.0", | ||
"@babel/core": "^7.17.9", | ||
"@babel/plugin-proposal-class-properties": "^7.16.7", | ||
"@babel/plugin-proposal-optional-chaining": "^7.16.7", | ||
"@babel/plugin-transform-modules-commonjs": "^7.17.9", | ||
"@babel/register": "^7.17.7", | ||
"babel-eslint": "^10.1.0", | ||
"babel-loader": "^8.2.3", | ||
"babel-loader": "^8.2.5", | ||
"babel-plugin-istanbul": "^6.1.1", | ||
"chai": "^4.3.4", | ||
"chai": "^4.3.6", | ||
"chai-as-promised": "^7.1.1", | ||
@@ -74,4 +74,4 @@ "coveralls": "^3.1.1", | ||
"eslint-plugin-mocha": "^8.2.0", | ||
"eslint-plugin-promise": "^5.1.1", | ||
"eslint-plugin-security": "^1.4.0", | ||
"eslint-plugin-promise": "^5.2.0", | ||
"eslint-plugin-security": "^1.5.0", | ||
"gulp": "^4.0.2", | ||
@@ -78,0 +78,0 @@ "gulp-babel": "^8.0.0", |
Sorry, the diff of this file is too big to display
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
687048
7225
Updatedsemver@^7.3.7
Updatedsource-map-support@^0.5.21
Updatedws@^7.5.7