New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

cli-kit

Package Overview
Dependencies
Maintainers
1
Versions
107
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

cli-kit - npm Package Compare versions

Comparing version 1.8.4 to 1.8.5

8

CHANGELOG.md

@@ -0,1 +1,9 @@

# 1.8.5 (Nov 11, 2020)
* fix(extension): Removed node-pty support since it has never worked properly. On Windows, it
would clear the screen and cause the parent to never exit. On macOS, it would not allow
child processes to prompt for input.
* fix(extension): Switched non-cli-kit based extensions to be `required()`'d instead of spawned.
* chore: Updated dependencies.
# 1.8.4 (Nov 10, 2020)

@@ -2,0 +10,0 @@

103

dist/parser/extension.js

@@ -14,8 +14,4 @@ "use strict";

var _fs = _interopRequireDefault(require("fs"));
var _help = _interopRequireDefault(require("../commands/help"));
var _path2 = _interopRequireDefault(require("path"));
var _util = require("../lib/util");

@@ -208,9 +204,4 @@

pkg
} = this; // if we have a JavaScript file or Node package, but not a cli-kit enabled one, then wire
// it up to spawn Node
} = this;
if (pkg && pkg.root && !pkg.clikit) {
exe = this.exe = [process.execPath, pkg.main];
}
if (exe) {

@@ -222,68 +213,54 @@ this.action = async ({

}) => {
if (Array.isArray(this.exe)) {
const exe = this.exe[0];
const args = this.exe.slice(1);
if (!Array.isArray(this.exe)) {
throw _errors.default.NO_EXECUTABLE(`Extension "${this.name}" has no executable!`);
}
const p = __argv.findIndex(arg => arg && arg.type === 'extension' && arg.extension === cmd);
const exe = this.exe[0];
const args = this.exe.slice(1);
if (p !== -1) {
for (let i = p + 1, len = __argv.length; i < len; i++) {
args.push.apply(args, __argv[i].input);
}
const p = __argv.findIndex(arg => arg && arg.type === 'extension' && arg.extension === cmd);
if (p !== -1) {
for (let i = p + 1, len = __argv.length; i < len; i++) {
args.push.apply(args, __argv[i].input);
}
} // spawn the process
let spawnFn = _child_process.spawn; // check if node-pty exists and that it's compiled for this version of Node.js
try {
let cwd = _path2.default.dirname(require.resolve('node-pty-prebuilt-multiarch'));
log(`Running: ${highlight(`${exe} ${args.join(' ')}`)}`);
const child = (0, _child_process.spawn)(exe, args, {
windowsHide: true
});
child.stdout.on('data', data => terminal.stdout.write(data.toString()));
child.stderr.on('data', data => terminal.stderr.write(data.toString()));
await new Promise(resolve => child.on('close', (code = 0) => resolve({
code
})));
};
} else if ((pkg === null || pkg === void 0 ? void 0 : pkg.root) && !pkg.clikit) {
// we have a non-cli-kit enabled Node package
this.action = async ({
__argv,
cmd
}) => {
process.argv = [process.execPath, pkg.main];
for (let last; cwd !== last && !_fs.default.existsSync(_path2.default.join(cwd, 'package.json')); last = cwd, cwd = _path2.default.dirname(cwd)) {}
const p = __argv.findIndex(arg => arg && arg.type === 'extension' && arg.extension === cmd);
const {
status
} = (0, _child_process.spawnSync)(process.execPath, ['-e', 'try { require(\'node-pty-prebuilt-multiarch\') } catch (e) { process.exit(e.message.includes(\'NODE_MODULE_VERSION\') ? 2 : 1) }'], {
cwd
});
if (p !== -1) {
for (let i = p + 1, len = __argv.length; i < len; i++) {
process.argv.push.apply(process.argv, __argv[i].input);
}
}
if (status !== 1) {
// node-pty exists!
if (status === 2) {
// but it's the wrong Node version, rebuild
warn(`node-pty built for different Node version, rebuilding: ${highlight(cwd)}`);
(0, _child_process.spawnSync)('npm', ['rebuild'], {
cwd
});
}
log(`Requiring ${highlight(pkg.main)}`);
spawnFn = require('node-pty-prebuilt-multiarch').spawn;
}
} catch (e) {// not installed
} // spawn the process
log(`Running: ${highlight(`${exe} ${args.join(' ')}`)}`);
const child = spawnFn(exe, args);
if (spawnFn === _child_process.spawn) {
// if we're using the built-in spawn, then we need to manually stream the
// stdio output instead of pipe() because we don't want the child process
// to close the terminal streams
child.stdout.on('data', data => terminal.stdout.write(data.toString()));
child.stderr.on('data', data => terminal.stderr.write(data.toString()));
}
child.on('data', terminal.stdout.write);
await new Promise(resolve => child.on('close', (code = 0) => resolve({
code
})));
} else {
throw _errors.default.NO_EXECUTABLE(`Extension "${this.name}" has no executable!`);
}
require(pkg.main);
};
} else if (pkg && pkg.clikit) {
} else if (pkg === null || pkg === void 0 ? void 0 : pkg.clikit) {
// we have a Node package, so require it and see what we have
log(`Requiring ${highlight(pkg.main)}`);
let ctx;
try {
log(`Requiring ${highlight(pkg.main)}`);
ctx = require(pkg.main);

@@ -400,2 +377,2 @@

exports.default = Extension;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBhcnNlci9leHRlbnNpb24uanMiXSwibmFtZXMiOlsibG9nIiwid2FybiIsImhpZ2hsaWdodCIsImRlYnVnIiwic3R5bGVzIiwiRXh0ZW5zaW9uIiwiQ29tbWFuZCIsImNvbnN0cnVjdG9yIiwicGF0aE9yUGFyYW1zIiwicGFyYW1zIiwicGF0aCIsIkUiLCJJTlZBTElEX0FSR1VNRU5UIiwibmFtZSIsInNjb3BlIiwidmFsdWUiLCJlcnIiLCJleGUiLCJwa2ciLCJhY3Rpb24iLCJlIiwicm9vdCIsIkVycm9yIiwiSU5WQUxJRF9FWFRFTlNJT04iLCJKU09OIiwic3RyaW5naWZ5IiwibWFpbiIsImRlc2MiLCJqc29uIiwiZGVzY3JpcHRpb24iLCJhbGlhc2VzIiwiQXJyYXkiLCJpc0FycmF5IiwiaW5jbHVkZXMiLCJwdXNoIiwiYmluIiwicHJpbWFyeSIsIk9iamVjdCIsImVudHJpZXMiLCJtZXNzYWdlIiwic3RkZXJyIiwiZ2V0Iiwic3RhY2siLCJwIiwiaW5kZXhPZiIsInN1YnN0cmluZyIsInRyaW0iLCJsaW5lIiwic3BsaXQiLCJ3cml0ZSIsImxvYWQiLCJsb2FkZWQiLCJjbGlraXQiLCJwcm9jZXNzIiwiZXhlY1BhdGgiLCJfX2FyZ3YiLCJjbWQiLCJ0ZXJtaW5hbCIsImFyZ3MiLCJzbGljZSIsImZpbmRJbmRleCIsImFyZyIsInR5cGUiLCJleHRlbnNpb24iLCJpIiwibGVuIiwibGVuZ3RoIiwiYXBwbHkiLCJpbnB1dCIsInNwYXduRm4iLCJzcGF3biIsImN3ZCIsIl9wYXRoIiwiZGlybmFtZSIsInJlcXVpcmUiLCJyZXNvbHZlIiwibGFzdCIsImZzIiwiZXhpc3RzU3luYyIsImpvaW4iLCJzdGF0dXMiLCJjaGlsZCIsInN0ZG91dCIsIm9uIiwiZGF0YSIsInRvU3RyaW5nIiwiUHJvbWlzZSIsImNvZGUiLCJOT19FWEVDVVRBQkxFIiwiY3R4IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJpc0NMSUtpdEV4dGVuc2lvbiIsImNhbWVsQ2FzZSIsImRlZmF1bHRDb21tYW5kIiwicmVtb3RlSGVscCIsInRyZWF0VW5rbm93bk9wdGlvbnNBc0FyZ3VtZW50cyIsInZlcnNpb24iLCJpbml0IiwiYmFubmVyIiwiY29tbWFuZHMiLCJleHRlbnNpb25zIiwib3B0aW9ucyIsInBhcmVudCIsInRpdGxlIiwidmVyc2lvbk9wdGlvbiIsImxvb2t1cCIsImxvbmciLCJjYWxsYmFjayIsImV4aXRDb2RlIiwib3B0cyIsIm5leHQiLCJwYXJzZXIiLCJoZWxwQ29tbWFuZCIsInNjaGVtYSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOzs7Ozs7QUFFQSxNQUFNO0FBQUVBLEVBQUFBLEdBQUY7QUFBT0MsRUFBQUE7QUFBUCxJQUFnQixvQkFBTSxtQkFBTixDQUF0QjtBQUNBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUFnQkMsZUFBTUMsTUFBNUI7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNlLE1BQU1DLFNBQU4sU0FBd0JDLGdCQUF4QixDQUFnQztBQUM5QztBQUNEO0FBQ0E7QUFDQTtBQUNBOztBQUdDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0NDLEVBQUFBLFdBQVcsQ0FBQ0MsWUFBRCxFQUFlQyxNQUFmLEVBQXVCO0FBQ2pDLFFBQUlDLElBQUksR0FBRyxJQUFYOztBQUVBLFFBQUksT0FBT0YsWUFBUCxLQUF3QixRQUE1QixFQUFzQztBQUNyQ0UsTUFBQUEsSUFBSSxHQUFHRixZQUFQOztBQUNBLFVBQUksQ0FBQ0MsTUFBTCxFQUFhO0FBQ1pBLFFBQUFBLE1BQU0sR0FBRyxFQUFUO0FBQ0E7QUFDRCxLQUxELE1BS08sSUFBSUQsWUFBWSxJQUFJLE9BQU9BLFlBQVAsS0FBd0IsUUFBNUMsRUFBc0Q7QUFDNUQsT0FBQztBQUFFRSxRQUFBQTtBQUFGLFVBQVdELE1BQU0sR0FBR0QsWUFBckI7QUFDQTs7QUFFRCxR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TyxHQUFHLE1BQU1BLE9BQU8sQ0FBQ2EsSUFBRCxDQUF2QjtBQUNBOztBQUNELGFBQUNBLElBQUksQ0FBQ3JELFFBQUwsSUFBaUIsS0FBS2hCLEdBQUwsQ0FBUyxVQUFULENBQWxCLEVBQXdDeUMsTUFBeEMsQ0FBK0NqQyxLQUEvQyxDQUFzRCxHQUFFZ0QsT0FBUSxJQUFoRTtBQUNBWSxZQUFBQSxRQUFRLENBQUMsQ0FBRCxDQUFSO0FBQ0EsbUJBQU8sS0FBUDtBQUNBO0FBQ0QsU0FWRDtBQVdBOztBQUVELFVBQUksT0FBT3BCLEdBQUcsQ0FBQ3RFLE1BQVgsS0FBc0IsVUFBMUIsRUFBc0M7QUFDckMsYUFBS0EsTUFBTCxHQUFjc0UsR0FBRyxDQUFDdEUsTUFBbEI7QUFDQSxPQUZELE1BRU87QUFDTixhQUFLQSxNQUFMLEdBQWM2RixNQUFNLElBQUk7QUFDdkIsY0FBSSxLQUFLbEIsY0FBTCxLQUF3QixNQUF4QixJQUFrQyxDQUFDLEtBQUtyRCxHQUFMLENBQVMsTUFBVCxDQUF2QyxFQUF5RDtBQUN4RCxrQkFBTWUsR0FBRyxHQUFHLEtBQUtzQyxjQUFMLElBQXVCLEtBQUtNLFFBQUwsQ0FBYyxLQUFLTixjQUFuQixDQUFuQzs7QUFDQSxnQkFBSXRDLEdBQUosRUFBUztBQUNSLHFCQUFPQSxHQUFHLENBQUNyQyxNQUFKLENBQVc2RixNQUFYLENBQVA7QUFDQTtBQUNEOztBQUNELGlCQUFPQyxjQUFZOUYsTUFBWixDQUFtQjZGLE1BQW5CLENBQVA7QUFDQSxTQVJEO0FBU0E7QUFDRDtBQUNEO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQ0UsRUFBQUEsTUFBTSxHQUFHO0FBQ1IsV0FBTyxFQUNOLEdBQUcsTUFBTUEsTUFESDtBQUVOeEcsTUFBQUEsSUFBSSxFQUFFLEtBQUtBO0FBRkwsS0FBUDtBQUlBOztBQTdTNkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29tbWFuZCBmcm9tICcuL2NvbW1hbmQnO1xuaW1wb3J0IGRlYnVnIGZyb20gJy4uL2xpYi9kZWJ1Zyc7XG5pbXBvcnQgRSBmcm9tICcuLi9saWIvZXJyb3JzJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgaGVscENvbW1hbmQgZnJvbSAnLi4vY29tbWFuZHMvaGVscCc7XG5pbXBvcnQgX3BhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7IGRlY2xhcmVDTElLaXRDbGFzcywgZmlsZW5hbWUsIGZpbmRQYWNrYWdlLCBpc0V4ZWN1dGFibGUgfSBmcm9tICcuLi9saWIvdXRpbCc7XG5pbXBvcnQgeyBzcGF3biwgc3Bhd25TeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5cbmNvbnN0IHsgbG9nLCB3YXJuIH0gPSBkZWJ1ZygnY2xpLWtpdDpleHRlbnNpb24nKTtcbmNvbnN0IHsgaGlnaGxpZ2h0IH0gPSBkZWJ1Zy5zdHlsZXM7XG5cbi8qKlxuICogRGVmaW5lcyBhIG5hbWVzcGFjZSB0aGF0IHdyYXBzIGFuIGV4dGVybmFsIHByb2dyYW0gb3Igc2NyaXB0LlxuICpcbiAqIEBleHRlbmRzIHtDb21tYW5kfVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHRlbnNpb24gZXh0ZW5kcyBDb21tYW5kIHtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgaWYgdGhpcyBleHRlbnNpb24gaXMgYSBjbGkta2l0IGV4dGVuc2lvbi4gSXQgc2hhbGwgcmVtYWluIGBmYWxzZWAgZm9yIG5hdGl2ZVxuXHQgKiBiaW5hcmllcyBhbmQgbm9uLWNsaS1raXQgQ0xJJ3MuXG5cdCAqIEB0eXBlIHtCb29sZWFufVxuXHQgKi9cblx0aXNDTElLaXRFeHRlbnNpb24gPSBmYWxzZTtcblxuXHQvKipcblx0ICogRGV0ZWN0cyB0aGUgZXh0ZW5zaW9uIGRlZmluZWQgaW4gdGhlIHNwZWNpZmllZCBwYXRoIGFuZCBpbml0aWFsaXplcyBpdC5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBwYXRoT3JQYXJhbXMgLSBUaGUgcGF0aCB0byB0aGUgZXh0ZW5zaW9uIG9yIGEgcGFyYW1zIG9iamVjdC4gSWYgdGhlXG5cdCAqIHBhdGggaXMgYSBOb2RlLmpzIHBhY2thZ2Ugd2l0aCBhIGBwYWNrYWdlLmpzb25gIGNvbnRhaW5pbmcgYSBgXCJjbGkta2l0XCJgIHByb3BlcnR5LCBpdCB3aWxsXG5cdCAqIG1lcmdlIHRoZSBleHRlcm5hbCBjbGkta2l0IGNvbnRleHQgdHJlZSBpbnRvIHRoaXMgbmFtZXNwYWNlLlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gLSBWYXJpb3VzIHBhcmFtZXRlcnMgd2hlbiBgZXh0ZW5zaW9uUGF0aGAgaXMgYSBgU3RyaW5nYC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtwYXJhbXMubmFtZV0gLSBUaGUgZXh0ZW5zaW9uIG5hbWUuIElmIG5vdCBzZXQsIGl0IHdpbGwgbG9hZCBpdCBmcm9tIHRoZVxuXHQgKiBleHRlbnNpb24ncyBgcGFja2FnZS5qc29uYCBvciB0aGUgZmlsZW5hbWUuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbcGFyYW1zLnBhdGhdIC0gVGhlIHBhdGggdG8gYW4gZXhlY3V0YWJsZSwgYSBKYXZhU2NyaXB0IGZpbGUsIG9yIE5vZGUuanNcblx0ICogcGFja2FnZS5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhdGhPclBhcmFtcywgcGFyYW1zKSB7XG5cdFx0bGV0IHBhdGggPSBudWxsO1xuXG5cdFx0aWYgKHR5cGVvZiBwYXRoT3JQYXJhbXMgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRwYXRoID0gcGF0aE9yUGFyYW1zO1xuXHRcdFx0aWYgKCFwYXJhbXMpIHtcblx0XHRcdFx0cGFyYW1zID0ge307XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChwYXRoT3JQYXJhbXMgJiYgdHlwZW9mIHBhdGhPclBhcmFtcyA9PT0gJ29iamVjdCcpIHtcblx0XHRcdCh7IHBhdGggfSA9IHBhcmFtcyA9IHBhdGhPclBhcmFtcyk7XG5cdFx0fVxuXG5cdFx0aWYgKCFwYXRoIHx8IHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCBhbiBleHRlbnNpb24gcGF0aCBvciBwYXJhbXMgb2JqZWN0JywgeyBuYW1lOiAncGF0aE9yUGFyYW1zJywgc2NvcGU6ICdFeHRlbnNpb24uY29uc3RydWN0b3InLCB2YWx1ZTogcGF0aE9yUGFyYW1zIH0pO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgcGFyYW1zICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCBleHRlbnNpb24gcGFyYW1zIHRvIGJlIGFuIG9iamVjdCBvciBDb250ZXh0JywgeyBuYW1lOiAncGFyYW1zJywgc2NvcGU6ICdFeHRlbnNpb24uY29uc3RydWN0b3InLCB2YWx1ZTogcGFyYW1zIH0pO1xuXHRcdH1cblxuXHRcdGxldCB7IG5hbWUgfSA9IHBhcmFtcztcblx0XHRsZXQgZXJyO1xuXHRcdGxldCBleGU7XG5cdFx0bGV0IHBrZztcblxuXHRcdC8vIHdlIGFsd2F5cyBpbXBsZW1lbnQgb3VyIG93biBhY3Rpb25cblx0XHRkZWxldGUgcGFyYW1zLmFjdGlvbjtcblxuXHRcdC8vIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgZXh0ZW5zaW9uIGlzIGEgYmluYXJ5IG9yIGlmIGl0J3MgYSBOb2RlIHBhY2thZ2Vcblx0XHR0cnkge1xuXHRcdFx0ZXhlID0gaXNFeGVjdXRhYmxlKHBhdGgpO1xuXHRcdFx0aWYgKCFuYW1lKSB7XG5cdFx0XHRcdG5hbWUgPSBmaWxlbmFtZShleGVbMF0pO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdC8vIG1heWJlIGEgTm9kZSBwYWNrYWdlP1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRwa2cgPSBmaW5kUGFja2FnZShwYXRoKTtcblx0XHRcdFx0XHRpZiAoIXBrZy5yb290KSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHR0aHJvdyBFLklOVkFMSURfRVhURU5TSU9OKGBJbnZhbGlkIGV4dGVuc2lvbjogVW5hYmxlIHRvIGZpbmQgZXhlY3V0YWJsZSwgc2NyaXB0LCBvciBwYWNrYWdlOiAke3R5cGVvZiBwYXRoID09PSAnc3RyaW5nJyA/IGBcIiR7cGF0aH1cImAgOiBKU09OLnN0cmluZ2lmeShwYXRoKX1gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghcGtnLm1haW4pIHtcblx0XHRcdFx0XHR0aHJvdyBFLklOVkFMSURfRVhURU5TSU9OKGBJbnZhbGlkIGV4dGVuc2lvbjogVW5hYmxlIHRvIGZpbmQgZXh0ZW5zaW9uJ3MgbWFpbiBmaWxlOiAke3R5cGVvZiBwYXRoID09PSAnc3RyaW5nJyA/IGBcIiR7cGF0aH1cImAgOiBKU09OLnN0cmluZ2lmeShwYXRoKX1gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghcGFyYW1zLmRlc2MpIHtcblx0XHRcdFx0XHRwYXJhbXMuZGVzYyA9IHBrZy5qc29uLmRlc2NyaXB0aW9uO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFuYW1lKSB7XG5cdFx0XHRcdFx0bmFtZSA9IHBrZy5qc29uLm5hbWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBpbml0IHRoZSBhbGlhc2VzIHdpdGggYW55IGFsaWFzZXMgZnJvbSB0aGUgcGFja2FnZS5qc29uXG5cdFx0XHRcdHBhcmFtcy5hbGlhc2VzID0gQXJyYXkuaXNBcnJheShwa2cuanNvbi5hbGlhc2VzKSA/IHBrZy5qc29uLmFsaWFzZXMgOiBbXTtcblxuXHRcdFx0XHQvLyBpZiB0aGUgbmFtZSBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgb25lIGluIHRoZSBwYWNrYWdlLmpzb24sIGFkZCBpdCB0byB0aGUgYWxpYXNlc1xuXHRcdFx0XHRpZiAocGFyYW1zLm5hbWUgJiYgcGFyYW1zLm5hbWUgIT09IHBrZy5qc29uLm5hbWUgJiYgIXBhcmFtcy5hbGlhc2VzLmluY2x1ZGVzKHBhcmFtcy5uYW1lKSkge1xuXHRcdFx0XHRcdHBhcmFtcy5hbGlhc2VzLnB1c2gocGFyYW1zLm5hbWUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gaWYgdGhlIHBhY2thZ2UgaGFzIGEgYmluIHNjcmlwdCB0aGF0IG1hdGNoZXMgdGhlIHBhY2thZ2UgbmFtZSwgdGhlbiBhZGQgYW55IG90aGVyXG5cdFx0XHRcdC8vIGJpbiBuYW1lIHRoYXQgYWxpYXNlcyB0aGUgcGFja2FnZSBuYW1lZCBiaW5cblx0XHRcdFx0aWYgKHBrZy5qc29uLmJpbikge1xuXHRcdFx0XHRcdGNvbnN0IHByaW1hcnkgPSBwa2cuanNvbi5iaW5bcGtnLmpzb24ubmFtZV07XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBbIG5hbWUsIGJpbiBdIG9mIE9iamVjdC5lbnRyaWVzKHBrZy5qc29uLmJpbikpIHtcblx0XHRcdFx0XHRcdGlmIChiaW4gPT09IHByaW1hcnkgJiYgIXBhcmFtcy5hbGlhc2VzLmluY2x1ZGVzKG5hbWUpKSB7XG5cdFx0XHRcdFx0XHRcdHBhcmFtcy5hbGlhc2VzLnB1c2gobmFtZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGVyciA9IGU7XG5cdFx0XHRcdHdhcm4oZXJyLm1lc3NhZ2UpO1xuXHRcdFx0XHR3YXJuKCdGb3VuZCBiYWQgZXh0ZW5zaW9uLCBjcmVhdGluZyBlcnJvciBhY3Rpb24nKTtcblxuXHRcdFx0XHRwYXJhbXMuYWN0aW9uID0gKCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHsgc3RkZXJyIH0gPSB0aGlzLmdldCgndGVybWluYWwnKTtcblx0XHRcdFx0XHRpZiAoZXJyKSB7XG5cdFx0XHRcdFx0XHRsZXQgeyBzdGFjayB9ID0gZXJyO1xuXHRcdFx0XHRcdFx0Y29uc3QgcCA9IHN0YWNrLmluZGV4T2YoJ1xcblxcbicpO1xuXHRcdFx0XHRcdFx0aWYgKHAgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdHN0YWNrID0gc3RhY2suc3Vic3RyaW5nKDAsIHApLnRyaW0oKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGZvciAoY29uc3QgbGluZSBvZiBzdGFjay5zcGxpdCgnXFxuJykpIHtcblx0XHRcdFx0XHRcdFx0c3RkZXJyLndyaXRlKGAgICR7bGluZX1cXG5gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c3RkZXJyLndyaXRlKGBJbnZhbGlkIGV4dGVuc2lvbjogJHtwa2cuanNvbi5uYW1lfVxcbmApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRzdXBlcihuYW1lIHx8IGZpbGVuYW1lKHBhdGgpLCBwYXJhbXMpO1xuXHRcdGRlY2xhcmVDTElLaXRDbGFzcyh0aGlzLCAnRXh0ZW5zaW9uJyk7XG5cblx0XHR0aGlzLmVyciAgICA9IGVycjtcblx0XHR0aGlzLmV4ZSAgICA9IGV4ZTtcblx0XHR0aGlzLnBhdGggICA9IHBhdGg7XG5cdFx0dGhpcy5wa2cgICAgPSBwa2c7XG5cdH1cblxuXHQvKipcblx0ICogTG9hZHMgdGhlIGV4dGVuc2lvbi5cblx0ICpcblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRhc3luYyBsb2FkKCkge1xuXHRcdGlmICh0aGlzLmxvYWRlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmxvYWRlZCA9IHRydWU7XG5cblx0XHRsZXQgeyBleGUsIHBrZyB9ID0gdGhpcztcblxuXHRcdC8vIGlmIHdlIGhhdmUgYSBKYXZhU2NyaXB0IGZpbGUgb3IgTm9kZSBwYWNrYWdlLCBidXQgbm90IGEgY2xpLWtpdCBlbmFibGVkIG9uZSwgdGhlbiB3aXJlXG5cdFx0Ly8gaXQgdXAgdG8gc3Bhd24gTm9kZVxuXHRcdGlmIChwa2cgJiYgcGtnLnJvb3QgJiYgIXBrZy5jbGlraXQpIHtcblx0XHRcdGV4ZSA9IHRoaXMuZXhlID0gWyBwcm9jZXNzLmV4ZWNQYXRoLCBwa2cubWFpbiBdO1xuXHRcdH1cblxuXHRcdGlmIChleGUpIHtcblx0XHRcdHRoaXMuYWN0aW9uID0gYXN5bmMgKHsgX19hcmd2LCBjbWQsIHRlcm1pbmFsIH0pID0+IHtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodGhpcy5leGUpKSB7XG5cdFx0XHRcdFx0Y29uc3QgZXhlID0gdGhpcy5leGVbMF07XG5cdFx0XHRcdFx0Y29uc3QgYXJncyA9IHRoaXMuZXhlLnNsaWNlKDEpO1xuXHRcdFx0XHRcdGNvbnN0IHAgPSBfX2FyZ3YuZmluZEluZGV4KGFyZyA9PiBhcmcgJiYgYXJnLnR5cGUgPT09ICdleHRlbnNpb24nICYmIGFyZy5leHRlbnNpb24gPT09IGNtZCk7XG5cblx0XHRcdFx0XHRpZiAocCAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSBwICsgMSwgbGVuID0gX19hcmd2Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdGFyZ3MucHVzaC5hcHBseShhcmdzLCBfX2FyZ3ZbaV0uaW5wdXQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGxldCBzcGF3bkZuID0gc3Bhd247XG5cblx0XHRcdFx0XHQvLyBjaGVjayBpZiBub2RlLXB0eSBleGlzdHMgYW5kIHRoYXQgaXQncyBjb21waWxlZCBmb3IgdGhpcyB2ZXJzaW9uIG9mIE5vZGUuanNcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0bGV0IGN3ZCA9IF9wYXRoLmRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKCdub2RlLXB0eS1wcmVidWlsdC1tdWx0aWFyY2gnKSk7XG5cdFx0XHRcdFx0XHRmb3IgKGxldCBsYXN0OyBjd2QgIT09IGxhc3QgJiYgIWZzLmV4aXN0c1N5bmMoX3BhdGguam9pbihjd2QsICdwYWNrYWdlLmpzb24nKSk7IGxhc3QgPSBjd2QsIGN3ZCA9IF9wYXRoLmRpcm5hbWUoY3dkKSkge31cblxuXHRcdFx0XHRcdFx0Y29uc3QgeyBzdGF0dXMgfSA9IHNwYXduU3luYyhwcm9jZXNzLmV4ZWNQYXRoLCBbXG5cdFx0XHRcdFx0XHRcdCctZScsXG5cdFx0XHRcdFx0XHRcdCd0cnkgeyByZXF1aXJlKFxcJ25vZGUtcHR5LXByZWJ1aWx0LW11bHRpYXJjaFxcJykgfSBjYXRjaCAoZSkgeyBwcm9jZXNzLmV4aXQoZS5tZXNzYWdlLmluY2x1ZGVzKFxcJ05PREVfTU9EVUxFX1ZFUlNJT05cXCcpID8gMiA6IDEpIH0nXG5cdFx0XHRcdFx0XHRdLCB7IGN3ZCB9KTtcblxuXHRcdFx0XHRcdFx0aWYgKHN0YXR1cyAhPT0gMSkge1xuXHRcdFx0XHRcdFx0XHQvLyBub2RlLXB0eSBleGlzdHMhXG5cdFx0XHRcdFx0XHRcdGlmIChzdGF0dXMgPT09IDIpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBidXQgaXQncyB0aGUgd3JvbmcgTm9kZSB2ZXJzaW9uLCByZWJ1aWxkXG5cdFx0XHRcdFx0XHRcdFx0d2Fybihgbm9kZS1wdHkgYnVpbHQgZm9yIGRpZmZlcmVudCBOb2RlIHZlcnNpb24sIHJlYnVpbGRpbmc6ICR7aGlnaGxpZ2h0KGN3ZCl9YCk7XG5cdFx0XHRcdFx0XHRcdFx0c3Bhd25TeW5jKCducG0nLCBbICdyZWJ1aWxkJyBdLCB7IGN3ZCB9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRzcGF3bkZuID0gcmVxdWlyZSgnbm9kZS1wdHktcHJlYnVpbHQtbXVsdGlhcmNoJykuc3Bhd247XG5cdFx0XHRcdFx0XHR9XG5cblxuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdC8vIG5vdCBpbnN0YWxsZWRcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBzcGF3biB0aGUgcHJvY2Vzc1xuXHRcdFx0XHRcdGxvZyhgUnVubmluZzogJHtoaWdobGlnaHQoYCR7ZXhlfSAke2FyZ3Muam9pbignICcpfWApfWApO1xuXHRcdFx0XHRcdGNvbnN0IGNoaWxkID0gc3Bhd25GbihleGUsIGFyZ3MpO1xuXHRcdFx0XHRcdGlmIChzcGF3bkZuID09PSBzcGF3bikge1xuXHRcdFx0XHRcdFx0Ly8gaWYgd2UncmUgdXNpbmcgdGhlIGJ1aWx0LWluIHNwYXduLCB0aGVuIHdlIG5lZWQgdG8gbWFudWFsbHkgc3RyZWFtIHRoZVxuXHRcdFx0XHRcdFx0Ly8gc3RkaW8gb3V0cHV0IGluc3RlYWQgb2YgcGlwZSgpIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUgY2hpbGQgcHJvY2Vzc1xuXHRcdFx0XHRcdFx0Ly8gdG8gY2xvc2UgdGhlIHRlcm1pbmFsIHN0cmVhbXNcblx0XHRcdFx0XHRcdGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGRhdGEgPT4gdGVybWluYWwuc3Rkb3V0LndyaXRlKGRhdGEudG9TdHJpbmcoKSkpO1xuXHRcdFx0XHRcdFx0Y2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZGF0YSA9PiB0ZXJtaW5hbC5zdGRlcnIud3JpdGUoZGF0YS50b1N0cmluZygpKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNoaWxkLm9uKCdkYXRhJywgdGVybWluYWwuc3Rkb3V0LndyaXRlKTtcblx0XHRcdFx0XHRhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGNoaWxkLm9uKCdjbG9zZScsIChjb2RlID0gMCkgPT4gcmVzb2x2ZSh7IGNvZGUgfSkpKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdyBFLk5PX0VYRUNVVEFCTEUoYEV4dGVuc2lvbiBcIiR7dGhpcy5uYW1lfVwiIGhhcyBubyBleGVjdXRhYmxlIWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0fSBlbHNlIGlmIChwa2cgJiYgcGtnLmNsaWtpdCkge1xuXHRcdFx0Ly8gd2UgaGF2ZSBhIE5vZGUgcGFja2FnZSwgc28gcmVxdWlyZSBpdCBhbmQgc2VlIHdoYXQgd2UgaGF2ZVxuXHRcdFx0bG9nKGBSZXF1aXJpbmcgJHtoaWdobGlnaHQocGtnLm1haW4pfWApO1xuXG5cdFx0XHRsZXQgY3R4O1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y3R4ID0gcmVxdWlyZShwa2cubWFpbik7XG5cdFx0XHRcdGlmICghY3R4IHx8ICh0eXBlb2YgY3R4ICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgY3R4ICE9PSAnZnVuY3Rpb24nKSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignRXh0ZW5zaW9uIG11c3QgZXhwb3J0IGFuIG9iamVjdCBvciBmdW5jdGlvbicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0dGhyb3cgRS5JTlZBTElEX0VYVEVOU0lPTihgQmFkIGV4dGVuc2lvbiBcIiR7dGhpcy5uYW1lfVwiOiAke2Vyci5tZXNzYWdlfWAsIHsgbmFtZTogdGhpcy5uYW1lLCBwYXRoOiB0aGlzLCBzY29wZTogJ0V4dGVuc2lvbi5sb2FkJywgdmFsdWU6IGVyciB9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gaWYgdGhpcyBpcyBhbiBFUzYgbW9kdWxlLCBncmFiIHRoZSBkZWZhdWx0IGV4cG9ydFxuXHRcdFx0aWYgKGN0eC5fX2VzTW9kdWxlKSB7XG5cdFx0XHRcdGN0eCA9IGN0eC5kZWZhdWx0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBpZiB0aGUgZXhwb3J0IHdhcyBhIGZ1bmN0aW9uLCBjYWxsIGl0IG5vdyB0byBnZXQgaXRzIENMSSBkZWZpbml0aW9uXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGN0eCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdGN0eCA9IGF3YWl0IGN0eCh0aGlzKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghY3R4IHx8IHR5cGVvZiBjdHggIT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdFeHRlbnNpb24gZG9lcyBub3QgcmVzb2x2ZSBhbiBvYmplY3QnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdHRocm93IEUuSU5WQUxJRF9FWFRFTlNJT04oYEJhZCBleHRlbnNpb24gXCIke3RoaXMubmFtZX1cIjogJHtlcnIubWVzc2FnZX1gLCB7IG5hbWU6IHRoaXMubmFtZSwgcGF0aDogdGhpcywgc2NvcGU6ICdFeHRlbnNpb24ubG9hZCcsIHZhbHVlOiBlcnIgfSk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuaXNDTElLaXRFeHRlbnNpb24gPSB0cnVlO1xuXG5cdFx0XHR0aGlzLmFsaWFzZXMgICAgICAgID0gY3R4LmFsaWFzZXM7XG5cdFx0XHR0aGlzLmNhbWVsQ2FzZSAgICAgID0gY3R4LmNhbWVsQ2FzZTtcblx0XHRcdHRoaXMuZGVmYXVsdENvbW1hbmQgPSBjdHguZGVmYXVsdENvbW1hbmQ7XG5cdFx0XHR0aGlzLnJlbW90ZUhlbHAgICAgID0gY3R4LnJlbW90ZUhlbHA7XG5cdFx0XHR0aGlzLnRyZWF0VW5rbm93bk9wdGlvbnNBc0FyZ3VtZW50cyA9IGN0eC50cmVhdFVua25vd25PcHRpb25zQXNBcmd1bWVudHM7XG5cdFx0XHR0aGlzLnZlcnNpb24gICAgICAgID0gY3R4LnZlcnNpb247XG5cblx0XHRcdHRoaXMuaW5pdCh7XG5cdFx0XHRcdGFyZ3M6ICAgICAgIGN0eC5hcmdzLFxuXHRcdFx0XHRiYW5uZXI6ICAgICBjdHguYmFubmVyLFxuXHRcdFx0XHRjb21tYW5kczogICBjdHguY29tbWFuZHMsXG5cdFx0XHRcdGRlc2M6ICAgICAgIHRoaXMuZGVzYyB8fCBjdHguZGVzYyxcblx0XHRcdFx0ZXh0ZW5zaW9uczogY3R4LmV4dGVuc2lvbnMsXG5cdFx0XHRcdG5hbWU6ICAgICAgIHRoaXMubmFtZSB8fCBjdHgubmFtZSxcblx0XHRcdFx0b3B0aW9uczogICAgY3R4Lm9wdGlvbnMsXG5cdFx0XHRcdHBhcmVudDogICAgIHRoaXMucGFyZW50LFxuXHRcdFx0XHR0aXRsZTogICAgICBjdHgudGl0bGUgIT09ICdHbG9iYWwnICYmIGN0eC50aXRsZSB8fCB0aGlzLm5hbWVcblx0XHRcdH0pO1xuXG5cdFx0XHRjb25zdCB2ZXJzaW9uT3B0aW9uID0gdGhpcy52ZXJzaW9uICYmIHRoaXMubG9va3VwLmxvbmcudmVyc2lvbjtcblx0XHRcdGlmICh2ZXJzaW9uT3B0aW9uICYmIHR5cGVvZiB2ZXJzaW9uT3B0aW9uLmNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdHZlcnNpb25PcHRpb24uY2FsbGJhY2sgPSBhc3luYyAoeyBleGl0Q29kZSwgb3B0cywgbmV4dCB9KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGF3YWl0IG5leHQoKSkge1xuXHRcdFx0XHRcdFx0bGV0IHZlcnNpb24gPSB0aGlzLnZlcnNpb247XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIHZlcnNpb24gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRcdFx0dmVyc2lvbiA9IGF3YWl0IHZlcnNpb24ob3B0cyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQob3B0cy50ZXJtaW5hbCB8fCB0aGlzLmdldCgndGVybWluYWwnKSkuc3Rkb3V0LndyaXRlKGAke3ZlcnNpb259XFxuYCk7XG5cdFx0XHRcdFx0XHRleGl0Q29kZSgwKTtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlb2YgY3R4LmFjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHR0aGlzLmFjdGlvbiA9IGN0eC5hY3Rpb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmFjdGlvbiA9IHBhcnNlciA9PiB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuZGVmYXVsdENvbW1hbmQgIT09ICdoZWxwJyB8fCAhdGhpcy5nZXQoJ2hlbHAnKSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgY21kID0gdGhpcy5kZWZhdWx0Q29tbWFuZCAmJiB0aGlzLmNvbW1hbmRzW3RoaXMuZGVmYXVsdENvbW1hbmRdO1xuXHRcdFx0XHRcdFx0aWYgKGNtZCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gY21kLmFjdGlvbihwYXJzZXIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gaGVscENvbW1hbmQuYWN0aW9uKHBhcnNlcik7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHNjaGVtYSBmb3IgdGhpcyBleHRlbnNpb24gYW5kIGFsbCBjaGlsZCBjb250ZXh0cy5cblx0ICpcblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHNjaGVtYSgpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4uc3VwZXIuc2NoZW1hLFxuXHRcdFx0cGF0aDogdGhpcy5wYXRoXG5cdFx0fTtcblx0fVxufVxuIl0sImZpbGUiOiJwYXJzZXIvZXh0ZW5zaW9uLmpzIn0=
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBhcnNlci9leHRlbnNpb24uanMiXSwibmFtZXMiOlsibG9nIiwid2FybiIsImhpZ2hsaWdodCIsImRlYnVnIiwic3R5bGVzIiwiRXh0ZW5zaW9uIiwiQ29tbWFuZCIsImNvbnN0cnVjdG9yIiwicGF0aE9yUGFyYW1zIiwicGFyYW1zIiwicGF0aCIsIkUiLCJJTlZBTElEX0FSR1VNRU5UIiwibmFtZSIsInNjb3BlIiwidmFsdWUiLCJlcnIiLCJleGUiLCJwa2ciLCJhY3Rpb24iLCJlIiwicm9vdCIsIkVycm9yIiwiSU5WQUxJRF9FWFRFTlNJT04iLCJKU09OIiwic3RyaW5naWZ5IiwibWFpbiIsImRlc2MiLCJqc29uIiwiZGVzY3JpcHRpb24iLCJhbGlhc2VzIiwiQXJyYXkiLCJpc0FycmF5IiwiaW5jbHVkZXMiLCJwdXNoIiwiYmluIiwicHJpbWFyeSIsIk9iamVjdCIsImVudHJpZXMiLCJtZXNzYWdlIiwic3RkZXJyIiwiZ2V0Iiwic3RhY2siLCJwIiwiaW5kZXhPZiIsInN1YnN0cmluZyIsInRyaW0iLCJsaW5lIiwic3BsaXQiLCJ3cml0ZSIsImxvYWQiLCJsb2FkZWQiLCJfX2FyZ3YiLCJjbWQiLCJ0ZXJtaW5hbCIsIk5PX0VYRUNVVEFCTEUiLCJhcmdzIiwic2xpY2UiLCJmaW5kSW5kZXgiLCJhcmciLCJ0eXBlIiwiZXh0ZW5zaW9uIiwiaSIsImxlbiIsImxlbmd0aCIsImFwcGx5IiwiaW5wdXQiLCJqb2luIiwiY2hpbGQiLCJ3aW5kb3dzSGlkZSIsInN0ZG91dCIsIm9uIiwiZGF0YSIsInRvU3RyaW5nIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjb2RlIiwiY2xpa2l0IiwicHJvY2VzcyIsImFyZ3YiLCJleGVjUGF0aCIsInJlcXVpcmUiLCJjdHgiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImlzQ0xJS2l0RXh0ZW5zaW9uIiwiY2FtZWxDYXNlIiwiZGVmYXVsdENvbW1hbmQiLCJyZW1vdGVIZWxwIiwidHJlYXRVbmtub3duT3B0aW9uc0FzQXJndW1lbnRzIiwidmVyc2lvbiIsImluaXQiLCJiYW5uZXIiLCJjb21tYW5kcyIsImV4dGVuc2lvbnMiLCJvcHRpb25zIiwicGFyZW50IiwidGl0bGUiLCJ2ZXJzaW9uT3B0aW9uIiwibG9va3VwIiwibG9uZyIsImNhbGxiYWNrIiwiZXhpdENvZGUiLCJvcHRzIiwibmV4dCIsInBhcnNlciIsImhlbHBDb21tYW5kIiwic2NoZW1hIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7Ozs7OztBQUVBLE1BQU07QUFBRUEsRUFBQUEsR0FBRjtBQUFPQyxFQUFBQTtBQUFQLElBQWdCLG9CQUFNLG1CQUFOLENBQXRCO0FBQ0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQWdCQyxlQUFNQyxNQUE1QjtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ2UsTUFBTUMsU0FBTixTQUF3QkMsZ0JBQXhCLENBQWdDO0FBQzlDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7O0FBR0M7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQ0MsRUFBQUEsV0FBVyxDQUFDQyxZQUFELEVBQWVDLE1BQWYsRUFBdUI7QUFDakMsUUFBSUMsSUFBSSxHQUFHLElBQVg7O0FBRUEsUUFBSSxPQUFPRixZQUFQLEtBQXdCLFFBQTVCLEVBQXNDO0FBQ3JDRSxNQUFBQSxJQUFJLEdBQUdGLFlBQVA7O0FBQ0EsVUFBSSxDQUFDQyxNQUFMLEVBQWE7QUFDWkEsUUFBQUEsTUFBTSxHQUFHLEVBQVQ7QUFDQTtBQUNELEtBTEQsTUFLTyxJQUFJRCxZQUFZLElBQUksT0FBT0EsWUFBUCxLQUF3QixRQUE1QyxFQUFzRDtBQUM1RCxPQUFDO0FBQUVFLFFBQUFBO0FBQUYsVUFBV0QsTUFBTSxHQUFHRCxZQUFyQjtBQUNBOztBQUVELFFBQUksQ0FBQ0UsSUFBRCxJQUFTLE9BQU9BLElBQVAsS0FBZ0IsUUFBN0IsRUFBdUM7QUFDdEMsWUFBTUMsZ0JBQUVDLGdCQUFGLENBQW1CLDZDQUFuQixFQUFrRTtBQUFFQyxRQUFBQSxJQUFJLEVBQUUsY0FBUjtBQUF3QkMsUUFBQUEsS0FBSyxFQUFFLHVCQUEvQjtBQUF3REMsUUFBQUEsS0FBSyxFQUFFUDtBQUEvRCxPQUFsRSxDQUFOO0FBQ0E7O0FBRUQsUUFBSSxPQUFPQyxNQUFQLEtBQWtCLFFBQXRCLEVBQWdDO0FBQy9CLFlBQU1FLGdCQUFFQyxnQkFBRixDQUFtQixzREFBbkIsRUFBMkU7QUFBRUMsUUFBQUEsSUFBSSxFQUFFLFFBQVI7QUFBa0JDLFFBQUFBLEtBQUssRUFBRSx1QkFBekI7QUFBa0RDLFFBQUFBLEtBQUssRUFBRU47QUFBekQsT0FBM0UsQ0FBTjtBQUNBOztBQUVELFFBQUk7QUFBRUksTUFBQUE7QUFBRixRQUFXSixNQUFmO0FBQ0EsUUFBSU8sR0FBSjtBQUNBLFFBQUlDLEdBQUo7QUFDQSxRQUFJQyxHQUFKLENBdkJpQyxDQXlCakM7O0FBQ0EsV0FBT1QsTUFBTSxDQUFDVSxNQUFkLENBMUJpQyxDQTRCakM7O0FBQ0EsUUFBSTtBQUNIRixNQUFBQSxHQUFHLEdBQUcsd0JBQWFQLElBQWIsQ0FBTjs7QUFDQSxVQUFJLENBQUNHLElBQUwsRUFBVztBQUNWQSxRQUFBQSxJQUFJLEdBQUcsb0JBQVNJLEdBQUcsQ0FBQyxDQUFELENBQVosQ0FBUDtBQUNBO0FBQ0QsS0FMRCxDQUtFLE9BQU9HLENBQVAsRUFBVTtBQUNYO0FBQ0EsVUFBSTtBQUNILFlBQUk7QUFDSEYsVUFBQUEsR0FBRyxHQUFHLHVCQUFZUixJQUFaLENBQU47O0FBQ0EsY0FBSSxDQUFDUSxHQUFHLENBQUNHLElBQVQsRUFBZTtBQUNkLGtCQUFNLElBQUlDLEtBQUosRUFBTjtBQUNBO0FBQ0QsU0FMRCxDQUtFLE9BQU9GLENBQVAsRUFBVTtBQUNYLGdCQUFNVCxnQkFBRVksaUJBQUYsQ0FBcUIscUVBQW9FLE9BQU9iLElBQVAsS0FBZ0IsUUFBaEIsR0FBNEIsSUFBR0EsSUFBSyxHQUFwQyxHQUF5Q2MsSUFBSSxDQUFDQyxTQUFMLENBQWVmLElBQWYsQ0FBcUIsRUFBdkosQ0FBTjtBQUNBOztBQUVELFlBQUksQ0FBQ1EsR0FBRyxDQUFDUSxJQUFULEVBQWU7QUFDZCxnQkFBTWYsZ0JBQUVZLGlCQUFGLENBQXFCLDREQUEyRCxPQUFPYixJQUFQLEtBQWdCLFFBQWhCLEdBQTRCLElBQUdBLElBQUssR0FBcEMsR0FBeUNjLElBQUksQ0FBQ0MsU0FBTCxDQUFlZixJQUFmLENBQXFCLEVBQTlJLENBQU47QUFDQTs7QUFFRCxZQUFJLENBQUNELE1BQU0sQ0FBQ2tCLElBQVosRUFBa0I7QUFDakJsQixVQUFBQSxNQUFNLENBQUNrQixJQUFQLEdBQWNULEdBQUcsQ0FBQ1UsSUFBSixDQUFTQyxXQUF2QjtBQUNBOztBQUVELFlBQUksQ0FBQ2hCLElBQUwsRUFBVztBQUNWQSxVQUFBQSxJQUFJLEdBQUdLLEdBQUcsQ0FBQ1UsSUFBSixDQUFTZixJQUFoQjtBQUNBLFNBcEJFLENBc0JIOzs7QUFDQUosUUFBQUEsTUFBTSxDQUFDcUIsT0FBUCxHQUFpQkMsS0FBSyxDQUFDQyxPQUFOLENBQWNkLEdBQUcsQ0FBQ1UsSUFBSixDQUFTRSxPQUF2QixJQUFrQ1osR0FBRyxDQUFDVSxJQUFKLENBQVNFLE9BQTNDLEdBQXFELEVBQXRFLENBdkJHLENBeUJIOztBQUNBLFlBQUlyQixNQUFNLENBQUNJLElBQVAsSUFBZUosTUFBTSxDQUFDSSxJQUFQLEtBQWdCSyxHQUFHLENBQUNVLElBQUosQ0FBU2YsSUFBeEMsSUFBZ0QsQ0FBQ0osTUFBTSxDQUFDcUIsT0FBUCxDQUFlRyxRQUFmLENBQXdCeEIsTUFBTSxDQUFDSSxJQUEvQixDQUFyRCxFQUEyRjtBQUMxRkosVUFBQUEsTUFBTSxDQUFDcUIsT0FBUCxDQUFlSSxJQUFmLENBQW9CekIsTUFBTSxDQUFDSSxJQUEzQjtBQUNBLFNBNUJFLENBOEJIO0FBQ0E7OztBQUNBLFlBQUlLLEdBQUcsQ0FBQ1UsSUFBSixDQUFTTyxHQUFiLEVBQWtCO0FBQ2pCLGdCQUFNQyxPQUFPLEdBQUdsQixHQUFHLENBQUNVLElBQUosQ0FBU08sR0FBVCxDQUFhakIsR0FBRyxDQUFDVSxJQUFKLENBQVNmLElBQXRCLENBQWhCOztBQUNBLGVBQUssTUFBTSxDQUFFQSxJQUFGLEVBQVFzQixHQUFSLENBQVgsSUFBNEJFLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlcEIsR0FBRyxDQUFDVSxJQUFKLENBQVNPLEdBQXhCLENBQTVCLEVBQTBEO0FBQ3pELGdCQUFJQSxHQUFHLEtBQUtDLE9BQVIsSUFBbUIsQ0FBQzNCLE1BQU0sQ0FBQ3FCLE9BQVAsQ0FBZUcsUUFBZixDQUF3QnBCLElBQXhCLENBQXhCLEVBQXVEO0FBQ3RESixjQUFBQSxNQUFNLENBQUNxQixPQUFQLENBQWVJLElBQWYsQ0FBb0JyQixJQUFwQjtBQUNBO0FBQ0Q7QUFDRDtBQUNELE9BeENELENBd0NFLE9BQU9PLENBQVAsRUFBVTtBQUNYSixRQUFBQSxHQUFHLEdBQUdJLENBQU47QUFDQW5CLFFBQUFBLElBQUksQ0FBQ2UsR0FBRyxDQUFDdUIsT0FBTCxDQUFKO0FBQ0F0QyxRQUFBQSxJQUFJLENBQUMsNENBQUQsQ0FBSjs7QUFFQVEsUUFBQUEsTUFBTSxDQUFDVSxNQUFQLEdBQWdCLE1BQU07QUFDckIsZ0JBQU07QUFBRXFCLFlBQUFBO0FBQUYsY0FBYSxLQUFLQyxHQUFMLENBQVMsVUFBVCxDQUFuQjs7QUFDQSxjQUFJekIsR0FBSixFQUFTO0FBQ1IsZ0JBQUk7QUFBRTBCLGNBQUFBO0FBQUYsZ0JBQVkxQixHQUFoQjtBQUNBLGtCQUFNMkIsQ0FBQyxHQUFHRCxLQUFLLENBQUNFLE9BQU4sQ0FBYyxNQUFkLENBQVY7O0FBQ0EsZ0JBQUlELENBQUMsS0FBSyxDQUFDLENBQVgsRUFBYztBQUNiRCxjQUFBQSxLQUFLLEdBQUdBLEtBQUssQ0FBQ0csU0FBTixDQUFnQixDQUFoQixFQUFtQkYsQ0FBbkIsRUFBc0JHLElBQXRCLEVBQVI7QUFDQTs7QUFDRCxpQkFBSyxNQUFNQyxJQUFYLElBQW1CTCxLQUFLLENBQUNNLEtBQU4sQ0FBWSxJQUFaLENBQW5CLEVBQXNDO0FBQ3JDUixjQUFBQSxNQUFNLENBQUNTLEtBQVAsQ0FBYyxLQUFJRixJQUFLLElBQXZCO0FBQ0E7QUFDRCxXQVRELE1BU087QUFDTlAsWUFBQUEsTUFBTSxDQUFDUyxLQUFQLENBQWMsc0JBQXFCL0IsR0FBRyxDQUFDVSxJQUFKLENBQVNmLElBQUssSUFBakQ7QUFDQTtBQUNELFNBZEQ7QUFlQTtBQUNEOztBQUVELFVBQU1BLElBQUksSUFBSSxvQkFBU0gsSUFBVCxDQUFkLEVBQThCRCxNQUE5Qjs7QUFuR2lDLCtDQWZkLEtBZWM7O0FBb0dqQyxrQ0FBbUIsSUFBbkIsRUFBeUIsV0FBekI7QUFFQSxTQUFLTyxHQUFMLEdBQWNBLEdBQWQ7QUFDQSxTQUFLQyxHQUFMLEdBQWNBLEdBQWQ7QUFDQSxTQUFLUCxJQUFMLEdBQWNBLElBQWQ7QUFDQSxTQUFLUSxHQUFMLEdBQWNBLEdBQWQ7QUFDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0MsUUFBTWdDLElBQU4sR0FBYTtBQUNaLFFBQUksS0FBS0MsTUFBVCxFQUFpQjtBQUNoQjtBQUNBOztBQUNELFNBQUtBLE1BQUwsR0FBYyxJQUFkO0FBRUEsUUFBSTtBQUFFbEMsTUFBQUEsR0FBRjtBQUFPQyxNQUFBQTtBQUFQLFFBQWUsSUFBbkI7O0FBRUEsUUFBSUQsR0FBSixFQUFTO0FBQ1IsV0FBS0UsTUFBTCxHQUFjLE9BQU87QUFBRWlDLFFBQUFBLE1BQUY7QUFBVUMsUUFBQUEsR0FBVjtBQUFlQyxRQUFBQTtBQUFmLE9BQVAsS0FBcUM7QUFDbEQsWUFBSSxDQUFDdkIsS0FBSyxDQUFDQyxPQUFOLENBQWMsS0FBS2YsR0FBbkIsQ0FBTCxFQUE4QjtBQUM3QixnQkFBTU4sZ0JBQUU0QyxhQUFGLENBQWlCLGNBQWEsS0FBSzFDLElBQUssc0JBQXhDLENBQU47QUFDQTs7QUFFRCxjQUFNSSxHQUFHLEdBQUcsS0FBS0EsR0FBTCxDQUFTLENBQVQsQ0FBWjtBQUNBLGNBQU11QyxJQUFJLEdBQUcsS0FBS3ZDLEdBQUwsQ0FBU3dDLEtBQVQsQ0FBZSxDQUFmLENBQWI7O0FBQ0EsY0FBTWQsQ0FBQyxHQUFHUyxNQUFNLENBQUNNLFNBQVAsQ0FBaUJDLEdBQUcsSUFBSUEsR0FBRyxJQUFJQSxHQUFHLENBQUNDLElBQUosS0FBYSxXQUFwQixJQUFtQ0QsR0FBRyxDQUFDRSxTQUFKLEtBQWtCUixHQUE3RSxDQUFWOztBQUVBLFlBQUlWLENBQUMsS0FBSyxDQUFDLENBQVgsRUFBYztBQUNiLGVBQUssSUFBSW1CLENBQUMsR0FBR25CLENBQUMsR0FBRyxDQUFaLEVBQWVvQixHQUFHLEdBQUdYLE1BQU0sQ0FBQ1ksTUFBakMsRUFBeUNGLENBQUMsR0FBR0MsR0FBN0MsRUFBa0RELENBQUMsRUFBbkQsRUFBdUQ7QUFDdEROLFlBQUFBLElBQUksQ0FBQ3RCLElBQUwsQ0FBVStCLEtBQVYsQ0FBZ0JULElBQWhCLEVBQXNCSixNQUFNLENBQUNVLENBQUQsQ0FBTixDQUFVSSxLQUFoQztBQUNBO0FBQ0QsU0FiaUQsQ0FlbEQ7OztBQUNBbEUsUUFBQUEsR0FBRyxDQUFFLFlBQVdFLFNBQVMsQ0FBRSxHQUFFZSxHQUFJLElBQUd1QyxJQUFJLENBQUNXLElBQUwsQ0FBVSxHQUFWLENBQWUsRUFBMUIsQ0FBNkIsRUFBbkQsQ0FBSDtBQUNBLGNBQU1DLEtBQUssR0FBRywwQkFBTW5ELEdBQU4sRUFBV3VDLElBQVgsRUFBaUI7QUFBRWEsVUFBQUEsV0FBVyxFQUFFO0FBQWYsU0FBakIsQ0FBZDtBQUNBRCxRQUFBQSxLQUFLLENBQUNFLE1BQU4sQ0FBYUMsRUFBYixDQUFnQixNQUFoQixFQUF3QkMsSUFBSSxJQUFJbEIsUUFBUSxDQUFDZ0IsTUFBVCxDQUFnQnJCLEtBQWhCLENBQXNCdUIsSUFBSSxDQUFDQyxRQUFMLEVBQXRCLENBQWhDO0FBQ0FMLFFBQUFBLEtBQUssQ0FBQzVCLE1BQU4sQ0FBYStCLEVBQWIsQ0FBZ0IsTUFBaEIsRUFBd0JDLElBQUksSUFBSWxCLFFBQVEsQ0FBQ2QsTUFBVCxDQUFnQlMsS0FBaEIsQ0FBc0J1QixJQUFJLENBQUNDLFFBQUwsRUFBdEIsQ0FBaEM7QUFDQSxjQUFNLElBQUlDLE9BQUosQ0FBWUMsT0FBTyxJQUFJUCxLQUFLLENBQUNHLEVBQU4sQ0FBUyxPQUFULEVBQWtCLENBQUNLLElBQUksR0FBRyxDQUFSLEtBQWNELE9BQU8sQ0FBQztBQUFFQyxVQUFBQTtBQUFGLFNBQUQsQ0FBdkMsQ0FBdkIsQ0FBTjtBQUNBLE9BckJEO0FBdUJBLEtBeEJELE1Bd0JPLElBQUksQ0FBQTFELEdBQUcsU0FBSCxJQUFBQSxHQUFHLFdBQUgsWUFBQUEsR0FBRyxDQUFFRyxJQUFMLEtBQWEsQ0FBQ0gsR0FBRyxDQUFDMkQsTUFBdEIsRUFBOEI7QUFDcEM7QUFDQSxXQUFLMUQsTUFBTCxHQUFjLE9BQU87QUFBRWlDLFFBQUFBLE1BQUY7QUFBVUMsUUFBQUE7QUFBVixPQUFQLEtBQTJCO0FBQ3hDeUIsUUFBQUEsT0FBTyxDQUFDQyxJQUFSLEdBQWUsQ0FDZEQsT0FBTyxDQUFDRSxRQURNLEVBRWQ5RCxHQUFHLENBQUNRLElBRlUsQ0FBZjs7QUFLQSxjQUFNaUIsQ0FBQyxHQUFHUyxNQUFNLENBQUNNLFNBQVAsQ0FBaUJDLEdBQUcsSUFBSUEsR0FBRyxJQUFJQSxHQUFHLENBQUNDLElBQUosS0FBYSxXQUFwQixJQUFtQ0QsR0FBRyxDQUFDRSxTQUFKLEtBQWtCUixHQUE3RSxDQUFWOztBQUNBLFlBQUlWLENBQUMsS0FBSyxDQUFDLENBQVgsRUFBYztBQUNiLGVBQUssSUFBSW1CLENBQUMsR0FBR25CLENBQUMsR0FBRyxDQUFaLEVBQWVvQixHQUFHLEdBQUdYLE1BQU0sQ0FBQ1ksTUFBakMsRUFBeUNGLENBQUMsR0FBR0MsR0FBN0MsRUFBa0RELENBQUMsRUFBbkQsRUFBdUQ7QUFDdERnQixZQUFBQSxPQUFPLENBQUNDLElBQVIsQ0FBYTdDLElBQWIsQ0FBa0IrQixLQUFsQixDQUF3QmEsT0FBTyxDQUFDQyxJQUFoQyxFQUFzQzNCLE1BQU0sQ0FBQ1UsQ0FBRCxDQUFOLENBQVVJLEtBQWhEO0FBQ0E7QUFDRDs7QUFFRGxFLFFBQUFBLEdBQUcsQ0FBRSxhQUFZRSxTQUFTLENBQUNnQixHQUFHLENBQUNRLElBQUwsQ0FBVyxFQUFsQyxDQUFIOztBQUNBdUQsUUFBQUEsT0FBTyxDQUFDL0QsR0FBRyxDQUFDUSxJQUFMLENBQVA7QUFDQSxPQWZEO0FBaUJBLEtBbkJNLE1BbUJBLElBQUlSLEdBQUosYUFBSUEsR0FBSix1QkFBSUEsR0FBRyxDQUFFMkQsTUFBVCxFQUFpQjtBQUN2QjtBQUNBLFVBQUlLLEdBQUo7O0FBQ0EsVUFBSTtBQUNIbEYsUUFBQUEsR0FBRyxDQUFFLGFBQVlFLFNBQVMsQ0FBQ2dCLEdBQUcsQ0FBQ1EsSUFBTCxDQUFXLEVBQWxDLENBQUg7QUFDQXdELFFBQUFBLEdBQUcsR0FBR0QsT0FBTyxDQUFDL0QsR0FBRyxDQUFDUSxJQUFMLENBQWI7O0FBQ0EsWUFBSSxDQUFDd0QsR0FBRCxJQUFTLE9BQU9BLEdBQVAsS0FBZSxRQUFmLElBQTJCLE9BQU9BLEdBQVAsS0FBZSxVQUF2RCxFQUFvRTtBQUNuRSxnQkFBTSxJQUFJNUQsS0FBSixDQUFVLDZDQUFWLENBQU47QUFDQTtBQUNELE9BTkQsQ0FNRSxPQUFPTixHQUFQLEVBQVk7QUFDYixjQUFNTCxnQkFBRVksaUJBQUYsQ0FBcUIsa0JBQWlCLEtBQUtWLElBQUssTUFBS0csR0FBRyxDQUFDdUIsT0FBUSxFQUFqRSxFQUFvRTtBQUFFMUIsVUFBQUEsSUFBSSxFQUFFLEtBQUtBLElBQWI7QUFBbUJILFVBQUFBLElBQUksRUFBRSxJQUF6QjtBQUErQkksVUFBQUEsS0FBSyxFQUFFLGdCQUF0QztBQUF3REMsVUFBQUEsS0FBSyxFQUFFQztBQUEvRCxTQUFwRSxDQUFOO0FBQ0EsT0FYc0IsQ0FhdkI7OztBQUNBLFVBQUlrRSxHQUFHLENBQUNDLFVBQVIsRUFBb0I7QUFDbkJELFFBQUFBLEdBQUcsR0FBR0EsR0FBRyxDQUFDRSxPQUFWO0FBQ0EsT0FoQnNCLENBa0J2Qjs7O0FBQ0EsVUFBSTtBQUNILFlBQUksT0FBT0YsR0FBUCxLQUFlLFVBQW5CLEVBQStCO0FBQzlCQSxVQUFBQSxHQUFHLEdBQUcsTUFBTUEsR0FBRyxDQUFDLElBQUQsQ0FBZjtBQUNBOztBQUVELFlBQUksQ0FBQ0EsR0FBRCxJQUFRLE9BQU9BLEdBQVAsS0FBZSxRQUEzQixFQUFxQztBQUNwQyxnQkFBTSxJQUFJNUQsS0FBSixDQUFVLHNDQUFWLENBQU47QUFDQTtBQUNELE9BUkQsQ0FRRSxPQUFPTixHQUFQLEVBQVk7QUFDYixjQUFNTCxnQkFBRVksaUJBQUYsQ0FBcUIsa0JBQWlCLEtBQUtWLElBQUssTUFBS0csR0FBRyxDQUFDdUIsT0FBUSxFQUFqRSxFQUFvRTtBQUFFMUIsVUFBQUEsSUFBSSxFQUFFLEtBQUtBLElBQWI7QUFBbUJILFVBQUFBLElBQUksRUFBRSxJQUF6QjtBQUErQkksVUFBQUEsS0FBSyxFQUFFLGdCQUF0QztBQUF3REMsVUFBQUEsS0FBSyxFQUFFQztBQUEvRCxTQUFwRSxDQUFOO0FBQ0E7O0FBRUQsV0FBS3FFLGlCQUFMLEdBQXlCLElBQXpCO0FBRUEsV0FBS3ZELE9BQUwsR0FBc0JvRCxHQUFHLENBQUNwRCxPQUExQjtBQUNBLFdBQUt3RCxTQUFMLEdBQXNCSixHQUFHLENBQUNJLFNBQTFCO0FBQ0EsV0FBS0MsY0FBTCxHQUFzQkwsR0FBRyxDQUFDSyxjQUExQjtBQUNBLFdBQUtDLFVBQUwsR0FBc0JOLEdBQUcsQ0FBQ00sVUFBMUI7QUFDQSxXQUFLQyw4QkFBTCxHQUFzQ1AsR0FBRyxDQUFDTyw4QkFBMUM7QUFDQSxXQUFLQyxPQUFMLEdBQXNCUixHQUFHLENBQUNRLE9BQTFCO0FBRUEsV0FBS0MsSUFBTCxDQUFVO0FBQ1RuQyxRQUFBQSxJQUFJLEVBQVEwQixHQUFHLENBQUMxQixJQURQO0FBRVRvQyxRQUFBQSxNQUFNLEVBQU1WLEdBQUcsQ0FBQ1UsTUFGUDtBQUdUQyxRQUFBQSxRQUFRLEVBQUlYLEdBQUcsQ0FBQ1csUUFIUDtBQUlUbEUsUUFBQUEsSUFBSSxFQUFRLEtBQUtBLElBQUwsSUFBYXVELEdBQUcsQ0FBQ3ZELElBSnBCO0FBS1RtRSxRQUFBQSxVQUFVLEVBQUVaLEdBQUcsQ0FBQ1ksVUFMUDtBQU1UakYsUUFBQUEsSUFBSSxFQUFRLEtBQUtBLElBQUwsSUFBYXFFLEdBQUcsQ0FBQ3JFLElBTnBCO0FBT1RrRixRQUFBQSxPQUFPLEVBQUtiLEdBQUcsQ0FBQ2EsT0FQUDtBQVFUQyxRQUFBQSxNQUFNLEVBQU0sS0FBS0EsTUFSUjtBQVNUQyxRQUFBQSxLQUFLLEVBQU9mLEdBQUcsQ0FBQ2UsS0FBSixLQUFjLFFBQWQsSUFBMEJmLEdBQUcsQ0FBQ2UsS0FBOUIsSUFBdUMsS0FBS3BGO0FBVC9DLE9BQVY7QUFZQSxZQUFNcUYsYUFBYSxHQUFHLEtBQUtSLE9BQUwsSUFBZ0IsS0FBS1MsTUFBTCxDQUFZQyxJQUFaLENBQWlCVixPQUF2RDs7QUFDQSxVQUFJUSxhQUFhLElBQUksT0FBT0EsYUFBYSxDQUFDRyxRQUFyQixLQUFrQyxVQUF2RCxFQUFtRTtBQUNsRUgsUUFBQUEsYUFBYSxDQUFDRyxRQUFkLEdBQXlCLE9BQU87QUFBRUMsVUFBQUEsUUFBRjtBQUFZQyxVQUFBQSxJQUFaO0FBQWtCQyxVQUFBQTtBQUFsQixTQUFQLEtBQW9DO0FBQzVELGNBQUksTUFBTUEsSUFBSSxFQUFkLEVBQWtCO0FBQ2pCLGdCQUFJZCxPQUFPLEdBQUcsS0FBS0EsT0FBbkI7O0FBQ0EsZ0JBQUksT0FBT0EsT0FBUCxLQUFtQixVQUF2QixFQUFtQztBQUNsQ0EsY0FBQUEsT0FBTyxHQUFHLE1BQU1BLE9BQU8sQ0FBQ2EsSUFBRCxDQUF2QjtBQUNBOztBQUNELGFBQUNBLElBQUksQ0FBQ2pELFFBQUwsSUFBaUIsS0FBS2IsR0FBTCxDQUFTLFVBQVQsQ0FBbEIsRUFBd0M2QixNQUF4QyxDQUErQ3JCLEtBQS9DLENBQXNELEdBQUV5QyxPQUFRLElBQWhFO0FBQ0FZLFlBQUFBLFFBQVEsQ0FBQyxDQUFELENBQVI7QUFDQSxtQkFBTyxLQUFQO0FBQ0E7QUFDRCxTQVZEO0FBV0E7O0FBRUQsVUFBSSxPQUFPcEIsR0FBRyxDQUFDL0QsTUFBWCxLQUFzQixVQUExQixFQUFzQztBQUNyQyxhQUFLQSxNQUFMLEdBQWMrRCxHQUFHLENBQUMvRCxNQUFsQjtBQUNBLE9BRkQsTUFFTztBQUNOLGFBQUtBLE1BQUwsR0FBY3NGLE1BQU0sSUFBSTtBQUN2QixjQUFJLEtBQUtsQixjQUFMLEtBQXdCLE1BQXhCLElBQWtDLENBQUMsS0FBSzlDLEdBQUwsQ0FBUyxNQUFULENBQXZDLEVBQXlEO0FBQ3hELGtCQUFNWSxHQUFHLEdBQUcsS0FBS2tDLGNBQUwsSUFBdUIsS0FBS00sUUFBTCxDQUFjLEtBQUtOLGNBQW5CLENBQW5DOztBQUNBLGdCQUFJbEMsR0FBSixFQUFTO0FBQ1IscUJBQU9BLEdBQUcsQ0FBQ2xDLE1BQUosQ0FBV3NGLE1BQVgsQ0FBUDtBQUNBO0FBQ0Q7O0FBQ0QsaUJBQU9DLGNBQVl2RixNQUFaLENBQW1Cc0YsTUFBbkIsQ0FBUDtBQUNBLFNBUkQ7QUFTQTtBQUNEO0FBQ0Q7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNDRSxFQUFBQSxNQUFNLEdBQUc7QUFDUixXQUFPLEVBQ04sR0FBRyxNQUFNQSxNQURIO0FBRU5qRyxNQUFBQSxJQUFJLEVBQUUsS0FBS0E7QUFGTCxLQUFQO0FBSUE7O0FBeFI2QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb21tYW5kIGZyb20gJy4vY29tbWFuZCc7XG5pbXBvcnQgZGVidWcgZnJvbSAnLi4vbGliL2RlYnVnJztcbmltcG9ydCBFIGZyb20gJy4uL2xpYi9lcnJvcnMnO1xuaW1wb3J0IGhlbHBDb21tYW5kIGZyb20gJy4uL2NvbW1hbmRzL2hlbHAnO1xuXG5pbXBvcnQgeyBkZWNsYXJlQ0xJS2l0Q2xhc3MsIGZpbGVuYW1lLCBmaW5kUGFja2FnZSwgaXNFeGVjdXRhYmxlIH0gZnJvbSAnLi4vbGliL3V0aWwnO1xuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcblxuY29uc3QgeyBsb2csIHdhcm4gfSA9IGRlYnVnKCdjbGkta2l0OmV4dGVuc2lvbicpO1xuY29uc3QgeyBoaWdobGlnaHQgfSA9IGRlYnVnLnN0eWxlcztcblxuLyoqXG4gKiBEZWZpbmVzIGEgbmFtZXNwYWNlIHRoYXQgd3JhcHMgYW4gZXh0ZXJuYWwgcHJvZ3JhbSBvciBzY3JpcHQuXG4gKlxuICogQGV4dGVuZHMge0NvbW1hbmR9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4dGVuc2lvbiBleHRlbmRzIENvbW1hbmQge1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCBpZiB0aGlzIGV4dGVuc2lvbiBpcyBhIGNsaS1raXQgZXh0ZW5zaW9uLiBJdCBzaGFsbCByZW1haW4gYGZhbHNlYCBmb3IgbmF0aXZlXG5cdCAqIGJpbmFyaWVzIGFuZCBub24tY2xpLWtpdCBDTEkncy5cblx0ICogQHR5cGUge0Jvb2xlYW59XG5cdCAqL1xuXHRpc0NMSUtpdEV4dGVuc2lvbiA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBEZXRlY3RzIHRoZSBleHRlbnNpb24gZGVmaW5lZCBpbiB0aGUgc3BlY2lmaWVkIHBhdGggYW5kIGluaXRpYWxpemVzIGl0LlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IHBhdGhPclBhcmFtcyAtIFRoZSBwYXRoIHRvIHRoZSBleHRlbnNpb24gb3IgYSBwYXJhbXMgb2JqZWN0LiBJZiB0aGVcblx0ICogcGF0aCBpcyBhIE5vZGUuanMgcGFja2FnZSB3aXRoIGEgYHBhY2thZ2UuanNvbmAgY29udGFpbmluZyBhIGBcImNsaS1raXRcImAgcHJvcGVydHksIGl0IHdpbGxcblx0ICogbWVyZ2UgdGhlIGV4dGVybmFsIGNsaS1raXQgY29udGV4dCB0cmVlIGludG8gdGhpcyBuYW1lc3BhY2UuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSAtIFZhcmlvdXMgcGFyYW1ldGVycyB3aGVuIGBleHRlbnNpb25QYXRoYCBpcyBhIGBTdHJpbmdgLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW3BhcmFtcy5uYW1lXSAtIFRoZSBleHRlbnNpb24gbmFtZS4gSWYgbm90IHNldCwgaXQgd2lsbCBsb2FkIGl0IGZyb20gdGhlXG5cdCAqIGV4dGVuc2lvbidzIGBwYWNrYWdlLmpzb25gIG9yIHRoZSBmaWxlbmFtZS5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtwYXJhbXMucGF0aF0gLSBUaGUgcGF0aCB0byBhbiBleGVjdXRhYmxlLCBhIEphdmFTY3JpcHQgZmlsZSwgb3IgTm9kZS5qc1xuXHQgKiBwYWNrYWdlLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGF0aE9yUGFyYW1zLCBwYXJhbXMpIHtcblx0XHRsZXQgcGF0aCA9IG51bGw7XG5cblx0XHRpZiAodHlwZW9mIHBhdGhPclBhcmFtcyA9PT0gJ3N0cmluZycpIHtcblx0XHRcdHBhdGggPSBwYXRoT3JQYXJhbXM7XG5cdFx0XHRpZiAoIXBhcmFtcykge1xuXHRcdFx0XHRwYXJhbXMgPSB7fTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHBhdGhPclBhcmFtcyAmJiB0eXBlb2YgcGF0aE9yUGFyYW1zID09PSAnb2JqZWN0Jykge1xuXHRcdFx0KHsgcGF0aCB9ID0gcGFyYW1zID0gcGF0aE9yUGFyYW1zKTtcblx0XHR9XG5cblx0XHRpZiAoIXBhdGggfHwgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBFLklOVkFMSURfQVJHVU1FTlQoJ0V4cGVjdGVkIGFuIGV4dGVuc2lvbiBwYXRoIG9yIHBhcmFtcyBvYmplY3QnLCB7IG5hbWU6ICdwYXRoT3JQYXJhbXMnLCBzY29wZTogJ0V4dGVuc2lvbi5jb25zdHJ1Y3RvcicsIHZhbHVlOiBwYXRoT3JQYXJhbXMgfSk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBwYXJhbXMgIT09ICdvYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBFLklOVkFMSURfQVJHVU1FTlQoJ0V4cGVjdGVkIGV4dGVuc2lvbiBwYXJhbXMgdG8gYmUgYW4gb2JqZWN0IG9yIENvbnRleHQnLCB7IG5hbWU6ICdwYXJhbXMnLCBzY29wZTogJ0V4dGVuc2lvbi5jb25zdHJ1Y3RvcicsIHZhbHVlOiBwYXJhbXMgfSk7XG5cdFx0fVxuXG5cdFx0bGV0IHsgbmFtZSB9ID0gcGFyYW1zO1xuXHRcdGxldCBlcnI7XG5cdFx0bGV0IGV4ZTtcblx0XHRsZXQgcGtnO1xuXG5cdFx0Ly8gd2UgYWx3YXlzIGltcGxlbWVudCBvdXIgb3duIGFjdGlvblxuXHRcdGRlbGV0ZSBwYXJhbXMuYWN0aW9uO1xuXG5cdFx0Ly8gd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBleHRlbnNpb24gaXMgYSBiaW5hcnkgb3IgaWYgaXQncyBhIE5vZGUgcGFja2FnZVxuXHRcdHRyeSB7XG5cdFx0XHRleGUgPSBpc0V4ZWN1dGFibGUocGF0aCk7XG5cdFx0XHRpZiAoIW5hbWUpIHtcblx0XHRcdFx0bmFtZSA9IGZpbGVuYW1lKGV4ZVswXSk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0Ly8gbWF5YmUgYSBOb2RlIHBhY2thZ2U/XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHBrZyA9IGZpbmRQYWNrYWdlKHBhdGgpO1xuXHRcdFx0XHRcdGlmICghcGtnLnJvb3QpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcigpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHRocm93IEUuSU5WQUxJRF9FWFRFTlNJT04oYEludmFsaWQgZXh0ZW5zaW9uOiBVbmFibGUgdG8gZmluZCBleGVjdXRhYmxlLCBzY3JpcHQsIG9yIHBhY2thZ2U6ICR7dHlwZW9mIHBhdGggPT09ICdzdHJpbmcnID8gYFwiJHtwYXRofVwiYCA6IEpTT04uc3RyaW5naWZ5KHBhdGgpfWApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFwa2cubWFpbikge1xuXHRcdFx0XHRcdHRocm93IEUuSU5WQUxJRF9FWFRFTlNJT04oYEludmFsaWQgZXh0ZW5zaW9uOiBVbmFibGUgdG8gZmluZCBleHRlbnNpb24ncyBtYWluIGZpbGU6ICR7dHlwZW9mIHBhdGggPT09ICdzdHJpbmcnID8gYFwiJHtwYXRofVwiYCA6IEpTT04uc3RyaW5naWZ5KHBhdGgpfWApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFwYXJhbXMuZGVzYykge1xuXHRcdFx0XHRcdHBhcmFtcy5kZXNjID0gcGtnLmpzb24uZGVzY3JpcHRpb247XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIW5hbWUpIHtcblx0XHRcdFx0XHRuYW1lID0gcGtnLmpzb24ubmFtZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGluaXQgdGhlIGFsaWFzZXMgd2l0aCBhbnkgYWxpYXNlcyBmcm9tIHRoZSBwYWNrYWdlLmpzb25cblx0XHRcdFx0cGFyYW1zLmFsaWFzZXMgPSBBcnJheS5pc0FycmF5KHBrZy5qc29uLmFsaWFzZXMpID8gcGtnLmpzb24uYWxpYXNlcyA6IFtdO1xuXG5cdFx0XHRcdC8vIGlmIHRoZSBuYW1lIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBvbmUgaW4gdGhlIHBhY2thZ2UuanNvbiwgYWRkIGl0IHRvIHRoZSBhbGlhc2VzXG5cdFx0XHRcdGlmIChwYXJhbXMubmFtZSAmJiBwYXJhbXMubmFtZSAhPT0gcGtnLmpzb24ubmFtZSAmJiAhcGFyYW1zLmFsaWFzZXMuaW5jbHVkZXMocGFyYW1zLm5hbWUpKSB7XG5cdFx0XHRcdFx0cGFyYW1zLmFsaWFzZXMucHVzaChwYXJhbXMubmFtZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBpZiB0aGUgcGFja2FnZSBoYXMgYSBiaW4gc2NyaXB0IHRoYXQgbWF0Y2hlcyB0aGUgcGFja2FnZSBuYW1lLCB0aGVuIGFkZCBhbnkgb3RoZXJcblx0XHRcdFx0Ly8gYmluIG5hbWUgdGhhdCBhbGlhc2VzIHRoZSBwYWNrYWdlIG5hbWVkIGJpblxuXHRcdFx0XHRpZiAocGtnLmpzb24uYmluKSB7XG5cdFx0XHRcdFx0Y29uc3QgcHJpbWFyeSA9IHBrZy5qc29uLmJpbltwa2cuanNvbi5uYW1lXTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IFsgbmFtZSwgYmluIF0gb2YgT2JqZWN0LmVudHJpZXMocGtnLmpzb24uYmluKSkge1xuXHRcdFx0XHRcdFx0aWYgKGJpbiA9PT0gcHJpbWFyeSAmJiAhcGFyYW1zLmFsaWFzZXMuaW5jbHVkZXMobmFtZSkpIHtcblx0XHRcdFx0XHRcdFx0cGFyYW1zLmFsaWFzZXMucHVzaChuYW1lKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZXJyID0gZTtcblx0XHRcdFx0d2FybihlcnIubWVzc2FnZSk7XG5cdFx0XHRcdHdhcm4oJ0ZvdW5kIGJhZCBleHRlbnNpb24sIGNyZWF0aW5nIGVycm9yIGFjdGlvbicpO1xuXG5cdFx0XHRcdHBhcmFtcy5hY3Rpb24gPSAoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgeyBzdGRlcnIgfSA9IHRoaXMuZ2V0KCd0ZXJtaW5hbCcpO1xuXHRcdFx0XHRcdGlmIChlcnIpIHtcblx0XHRcdFx0XHRcdGxldCB7IHN0YWNrIH0gPSBlcnI7XG5cdFx0XHRcdFx0XHRjb25zdCBwID0gc3RhY2suaW5kZXhPZignXFxuXFxuJyk7XG5cdFx0XHRcdFx0XHRpZiAocCAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0c3RhY2sgPSBzdGFjay5zdWJzdHJpbmcoMCwgcCkudHJpbSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCBsaW5lIG9mIHN0YWNrLnNwbGl0KCdcXG4nKSkge1xuXHRcdFx0XHRcdFx0XHRzdGRlcnIud3JpdGUoYCAgJHtsaW5lfVxcbmApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzdGRlcnIud3JpdGUoYEludmFsaWQgZXh0ZW5zaW9uOiAke3BrZy5qc29uLm5hbWV9XFxuYCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHN1cGVyKG5hbWUgfHwgZmlsZW5hbWUocGF0aCksIHBhcmFtcyk7XG5cdFx0ZGVjbGFyZUNMSUtpdENsYXNzKHRoaXMsICdFeHRlbnNpb24nKTtcblxuXHRcdHRoaXMuZXJyICAgID0gZXJyO1xuXHRcdHRoaXMuZXhlICAgID0gZXhlO1xuXHRcdHRoaXMucGF0aCAgID0gcGF0aDtcblx0XHR0aGlzLnBrZyAgICA9IHBrZztcblx0fVxuXG5cdC8qKlxuXHQgKiBMb2FkcyB0aGUgZXh0ZW5zaW9uLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIGxvYWQoKSB7XG5cdFx0aWYgKHRoaXMubG9hZGVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMubG9hZGVkID0gdHJ1ZTtcblxuXHRcdGxldCB7IGV4ZSwgcGtnIH0gPSB0aGlzO1xuXG5cdFx0aWYgKGV4ZSkge1xuXHRcdFx0dGhpcy5hY3Rpb24gPSBhc3luYyAoeyBfX2FyZ3YsIGNtZCwgdGVybWluYWwgfSkgPT4ge1xuXHRcdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5leGUpKSB7XG5cdFx0XHRcdFx0dGhyb3cgRS5OT19FWEVDVVRBQkxFKGBFeHRlbnNpb24gXCIke3RoaXMubmFtZX1cIiBoYXMgbm8gZXhlY3V0YWJsZSFgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGV4ZSA9IHRoaXMuZXhlWzBdO1xuXHRcdFx0XHRjb25zdCBhcmdzID0gdGhpcy5leGUuc2xpY2UoMSk7XG5cdFx0XHRcdGNvbnN0IHAgPSBfX2FyZ3YuZmluZEluZGV4KGFyZyA9PiBhcmcgJiYgYXJnLnR5cGUgPT09ICdleHRlbnNpb24nICYmIGFyZy5leHRlbnNpb24gPT09IGNtZCk7XG5cblx0XHRcdFx0aWYgKHAgIT09IC0xKSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IHAgKyAxLCBsZW4gPSBfX2FyZ3YubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdFx0XHRcdGFyZ3MucHVzaC5hcHBseShhcmdzLCBfX2FyZ3ZbaV0uaW5wdXQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIHNwYXduIHRoZSBwcm9jZXNzXG5cdFx0XHRcdGxvZyhgUnVubmluZzogJHtoaWdobGlnaHQoYCR7ZXhlfSAke2FyZ3Muam9pbignICcpfWApfWApO1xuXHRcdFx0XHRjb25zdCBjaGlsZCA9IHNwYXduKGV4ZSwgYXJncywgeyB3aW5kb3dzSGlkZTogdHJ1ZSB9KTtcblx0XHRcdFx0Y2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZGF0YSA9PiB0ZXJtaW5hbC5zdGRvdXQud3JpdGUoZGF0YS50b1N0cmluZygpKSk7XG5cdFx0XHRcdGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGRhdGEgPT4gdGVybWluYWwuc3RkZXJyLndyaXRlKGRhdGEudG9TdHJpbmcoKSkpO1xuXHRcdFx0XHRhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGNoaWxkLm9uKCdjbG9zZScsIChjb2RlID0gMCkgPT4gcmVzb2x2ZSh7IGNvZGUgfSkpKTtcblx0XHRcdH07XG5cblx0XHR9IGVsc2UgaWYgKHBrZz8ucm9vdCAmJiAhcGtnLmNsaWtpdCkge1xuXHRcdFx0Ly8gd2UgaGF2ZSBhIG5vbi1jbGkta2l0IGVuYWJsZWQgTm9kZSBwYWNrYWdlXG5cdFx0XHR0aGlzLmFjdGlvbiA9IGFzeW5jICh7IF9fYXJndiwgY21kIH0pID0+IHtcblx0XHRcdFx0cHJvY2Vzcy5hcmd2ID0gW1xuXHRcdFx0XHRcdHByb2Nlc3MuZXhlY1BhdGgsXG5cdFx0XHRcdFx0cGtnLm1haW5cblx0XHRcdFx0XTtcblxuXHRcdFx0XHRjb25zdCBwID0gX19hcmd2LmZpbmRJbmRleChhcmcgPT4gYXJnICYmIGFyZy50eXBlID09PSAnZXh0ZW5zaW9uJyAmJiBhcmcuZXh0ZW5zaW9uID09PSBjbWQpO1xuXHRcdFx0XHRpZiAocCAhPT0gLTEpIHtcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gcCArIDEsIGxlbiA9IF9fYXJndi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0XHRcdFx0cHJvY2Vzcy5hcmd2LnB1c2guYXBwbHkocHJvY2Vzcy5hcmd2LCBfX2FyZ3ZbaV0uaW5wdXQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxvZyhgUmVxdWlyaW5nICR7aGlnaGxpZ2h0KHBrZy5tYWluKX1gKTtcblx0XHRcdFx0cmVxdWlyZShwa2cubWFpbik7XG5cdFx0XHR9O1xuXG5cdFx0fSBlbHNlIGlmIChwa2c/LmNsaWtpdCkge1xuXHRcdFx0Ly8gd2UgaGF2ZSBhIE5vZGUgcGFja2FnZSwgc28gcmVxdWlyZSBpdCBhbmQgc2VlIHdoYXQgd2UgaGF2ZVxuXHRcdFx0bGV0IGN0eDtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvZyhgUmVxdWlyaW5nICR7aGlnaGxpZ2h0KHBrZy5tYWluKX1gKTtcblx0XHRcdFx0Y3R4ID0gcmVxdWlyZShwa2cubWFpbik7XG5cdFx0XHRcdGlmICghY3R4IHx8ICh0eXBlb2YgY3R4ICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgY3R4ICE9PSAnZnVuY3Rpb24nKSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignRXh0ZW5zaW9uIG11c3QgZXhwb3J0IGFuIG9iamVjdCBvciBmdW5jdGlvbicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0dGhyb3cgRS5JTlZBTElEX0VYVEVOU0lPTihgQmFkIGV4dGVuc2lvbiBcIiR7dGhpcy5uYW1lfVwiOiAke2Vyci5tZXNzYWdlfWAsIHsgbmFtZTogdGhpcy5uYW1lLCBwYXRoOiB0aGlzLCBzY29wZTogJ0V4dGVuc2lvbi5sb2FkJywgdmFsdWU6IGVyciB9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gaWYgdGhpcyBpcyBhbiBFUzYgbW9kdWxlLCBncmFiIHRoZSBkZWZhdWx0IGV4cG9ydFxuXHRcdFx0aWYgKGN0eC5fX2VzTW9kdWxlKSB7XG5cdFx0XHRcdGN0eCA9IGN0eC5kZWZhdWx0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBpZiB0aGUgZXhwb3J0IHdhcyBhIGZ1bmN0aW9uLCBjYWxsIGl0IG5vdyB0byBnZXQgaXRzIENMSSBkZWZpbml0aW9uXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGN0eCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdGN0eCA9IGF3YWl0IGN0eCh0aGlzKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghY3R4IHx8IHR5cGVvZiBjdHggIT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdFeHRlbnNpb24gZG9lcyBub3QgcmVzb2x2ZSBhbiBvYmplY3QnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdHRocm93IEUuSU5WQUxJRF9FWFRFTlNJT04oYEJhZCBleHRlbnNpb24gXCIke3RoaXMubmFtZX1cIjogJHtlcnIubWVzc2FnZX1gLCB7IG5hbWU6IHRoaXMubmFtZSwgcGF0aDogdGhpcywgc2NvcGU6ICdFeHRlbnNpb24ubG9hZCcsIHZhbHVlOiBlcnIgfSk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuaXNDTElLaXRFeHRlbnNpb24gPSB0cnVlO1xuXG5cdFx0XHR0aGlzLmFsaWFzZXMgICAgICAgID0gY3R4LmFsaWFzZXM7XG5cdFx0XHR0aGlzLmNhbWVsQ2FzZSAgICAgID0gY3R4LmNhbWVsQ2FzZTtcblx0XHRcdHRoaXMuZGVmYXVsdENvbW1hbmQgPSBjdHguZGVmYXVsdENvbW1hbmQ7XG5cdFx0XHR0aGlzLnJlbW90ZUhlbHAgICAgID0gY3R4LnJlbW90ZUhlbHA7XG5cdFx0XHR0aGlzLnRyZWF0VW5rbm93bk9wdGlvbnNBc0FyZ3VtZW50cyA9IGN0eC50cmVhdFVua25vd25PcHRpb25zQXNBcmd1bWVudHM7XG5cdFx0XHR0aGlzLnZlcnNpb24gICAgICAgID0gY3R4LnZlcnNpb247XG5cblx0XHRcdHRoaXMuaW5pdCh7XG5cdFx0XHRcdGFyZ3M6ICAgICAgIGN0eC5hcmdzLFxuXHRcdFx0XHRiYW5uZXI6ICAgICBjdHguYmFubmVyLFxuXHRcdFx0XHRjb21tYW5kczogICBjdHguY29tbWFuZHMsXG5cdFx0XHRcdGRlc2M6ICAgICAgIHRoaXMuZGVzYyB8fCBjdHguZGVzYyxcblx0XHRcdFx0ZXh0ZW5zaW9uczogY3R4LmV4dGVuc2lvbnMsXG5cdFx0XHRcdG5hbWU6ICAgICAgIHRoaXMubmFtZSB8fCBjdHgubmFtZSxcblx0XHRcdFx0b3B0aW9uczogICAgY3R4Lm9wdGlvbnMsXG5cdFx0XHRcdHBhcmVudDogICAgIHRoaXMucGFyZW50LFxuXHRcdFx0XHR0aXRsZTogICAgICBjdHgudGl0bGUgIT09ICdHbG9iYWwnICYmIGN0eC50aXRsZSB8fCB0aGlzLm5hbWVcblx0XHRcdH0pO1xuXG5cdFx0XHRjb25zdCB2ZXJzaW9uT3B0aW9uID0gdGhpcy52ZXJzaW9uICYmIHRoaXMubG9va3VwLmxvbmcudmVyc2lvbjtcblx0XHRcdGlmICh2ZXJzaW9uT3B0aW9uICYmIHR5cGVvZiB2ZXJzaW9uT3B0aW9uLmNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdHZlcnNpb25PcHRpb24uY2FsbGJhY2sgPSBhc3luYyAoeyBleGl0Q29kZSwgb3B0cywgbmV4dCB9KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGF3YWl0IG5leHQoKSkge1xuXHRcdFx0XHRcdFx0bGV0IHZlcnNpb24gPSB0aGlzLnZlcnNpb247XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIHZlcnNpb24gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRcdFx0dmVyc2lvbiA9IGF3YWl0IHZlcnNpb24ob3B0cyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQob3B0cy50ZXJtaW5hbCB8fCB0aGlzLmdldCgndGVybWluYWwnKSkuc3Rkb3V0LndyaXRlKGAke3ZlcnNpb259XFxuYCk7XG5cdFx0XHRcdFx0XHRleGl0Q29kZSgwKTtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlb2YgY3R4LmFjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHR0aGlzLmFjdGlvbiA9IGN0eC5hY3Rpb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmFjdGlvbiA9IHBhcnNlciA9PiB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuZGVmYXVsdENvbW1hbmQgIT09ICdoZWxwJyB8fCAhdGhpcy5nZXQoJ2hlbHAnKSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgY21kID0gdGhpcy5kZWZhdWx0Q29tbWFuZCAmJiB0aGlzLmNvbW1hbmRzW3RoaXMuZGVmYXVsdENvbW1hbmRdO1xuXHRcdFx0XHRcdFx0aWYgKGNtZCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gY21kLmFjdGlvbihwYXJzZXIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gaGVscENvbW1hbmQuYWN0aW9uKHBhcnNlcik7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHNjaGVtYSBmb3IgdGhpcyBleHRlbnNpb24gYW5kIGFsbCBjaGlsZCBjb250ZXh0cy5cblx0ICpcblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHNjaGVtYSgpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4uc3VwZXIuc2NoZW1hLFxuXHRcdFx0cGF0aDogdGhpcy5wYXRoXG5cdFx0fTtcblx0fVxufVxuIl0sImZpbGUiOiJwYXJzZXIvZXh0ZW5zaW9uLmpzIn0=

@@ -314,7 +314,9 @@ "use strict";

for (const cb of self.outputCallbacks) {
cb(self.outputResolution);
if (self.outputCallbacks) {
for (const cb of self.outputCallbacks) {
cb(self.outputResolution);
}
self.outputCallbacks = null;
}
self.outputCallbacks = [];
}

@@ -332,2 +334,2 @@

exports.default = Terminal;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlcm1pbmFsLmpzIl0sIm5hbWVzIjpbImxvZyIsImhpZ2hsaWdodCIsImRlYnVnIiwic3R5bGVzIiwiZGF0YVJlZ0V4cCIsImVuY29kaW5ncyIsIlNldCIsInByb2Nlc3MiLCJzdGRvdXQiLCJzZXRNYXhMaXN0ZW5lcnMiLCJJbmZpbml0eSIsIlRlcm1pbmFsIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJvcHRzIiwiZGVmYXVsdENvbHVtbnMiLCJ1bmRlZmluZWQiLCJpc05hTiIsIkUiLCJJTlZBTElEX0FSR1VNRU5UIiwiZGVmYXVsdFJvd3MiLCJzdGRpbiIsInJlYWQiLCJuYW1lIiwic2NvcGUiLCJ2YWx1ZSIsInJlYWRsaW5lIiwiZW1pdEtleXByZXNzRXZlbnRzIiwicGF0Y2hTdHJlYW1Xcml0ZSIsInN0ZGVyciIsImRlZmF1bHQiLCJjb25zb2xlIiwiQ29uc29sZSIsInByb21wdFRpbWVvdXQiLCJpc1RUWSIsIm9uIiwiZW1pdCIsImNvbHVtbnMiLCJyb3dzIiwiYmVlcCIsIndyaXRlIiwiYW5zaSIsInNob3dDdXJzb3IiLCJjdXJzb3IiLCJzaG93IiwiaGlkZUN1cnNvciIsImhpZGUiLCJvbkFkZEtleXByZXNzIiwicmwiLCJjcmVhdGVJbnRlcmZhY2UiLCJyYXdNb2RlIiwic2lnaW50SGFuZGxlciIsImNodW5rIiwia2V5IiwiY3RybCIsInNldFJhd01vZGUiLCJvblJlbW92ZUtleXByZXNzIiwicmVtb3ZlTGlzdGVuZXIiLCJjbG9zZSIsImV2ZW50IiwibGlzdGVuZXIiLCJvbmNlIiwib25PdXRwdXQiLCJjYiIsIm91dHB1dENhbGxiYWNrcyIsInB1c2giLCJvdXRwdXRSZXNvbHV0aW9uIiwic3RyZWFtIiwib3JpZ1dyaXRlIiwic2VsZiIsImVuY29kaW5nIiwib3V0cHV0RmlyZWQiLCJoYXMiLCJ0ZXN0IiwiY2FsbCIsImJpbmQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7OztBQUVBLE1BQU07QUFBRUEsRUFBQUE7QUFBRixJQUFVLG9CQUFNLGtCQUFOLENBQWhCO0FBQ0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQWlCQyxlQUFNQyxNQUE3QjtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLE1BQU1DLFVBQVUsR0FBRyxXQUFuQjtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLE1BQU1DLFNBQVMsR0FBRyxJQUFJQyxHQUFKLENBQVEsQ0FBRSxPQUFGLEVBQVcsUUFBWCxFQUFxQixNQUFyQixFQUE2QixNQUE3QixFQUFxQyxTQUFyQyxDQUFSLENBQWxCO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBQ0FDLE9BQU8sQ0FBQ0MsTUFBUixDQUFlQyxlQUFmLENBQStCQyxRQUEvQjtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDZSxNQUFNQyxRQUFOLFNBQXVCQyxvQkFBdkIsQ0FBb0M7QUFDbEQ7QUFDRDtBQUNBO0FBQ0E7O0FBR0M7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFHQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQ0MsRUFBQUEsV0FBVyxDQUFDQyxJQUFJLEdBQUcsRUFBUixFQUFZO0FBQ3RCOztBQURzQiw2Q0F4QkwsRUF3Qks7O0FBQUEscUNBakJiLENBaUJhOztBQUV0QixrQ0FBbUIsSUFBbkIsRUFBeUIsVUFBekI7O0FBRUEsUUFBSUEsSUFBSSxDQUFDQyxjQUFMLEtBQXdCQyxTQUF4QixLQUFzQyxPQUFPRixJQUFJLENBQUNDLGNBQVosS0FBK0IsUUFBL0IsSUFBMkNFLEtBQUssQ0FBQ0gsSUFBSSxDQUFDQyxjQUFOLENBQWhELElBQXlFRCxJQUFJLENBQUNDLGNBQUwsR0FBc0IsQ0FBckksQ0FBSixFQUE2STtBQUM1SSxZQUFNRyxnQkFBRUMsZ0JBQUYsQ0FBbUIsbURBQW5CLENBQU47QUFDQTs7QUFDRCxTQUFLSixjQUFMLEdBQXNCRCxJQUFJLENBQUNDLGNBQUwsSUFBdUIsRUFBN0M7O0FBRUEsUUFBSUQsSUFBSSxDQUFDTSxXQUFMLEtBQXFCSixTQUFyQixLQUFtQyxPQUFPRixJQUFJLENBQUNNLFdBQVosS0FBNEIsUUFBNUIsSUFBd0NILEtBQUssQ0FBQ0gsSUFBSSxDQUFDTSxXQUFOLENBQTdDLElBQW1FTixJQUFJLENBQUNNLFdBQUwsR0FBbUIsQ0FBekgsQ0FBSixFQUFpSTtBQUNoSSxZQUFNRixnQkFBRUMsZ0JBQUYsQ0FBbUIsZ0RBQW5CLENBQU47QUFDQTs7QUFDRCxTQUFLQyxXQUFMLEdBQW1CTixJQUFJLENBQUNNLFdBQUwsSUFBb0IsRUFBdkM7QUFFQSxTQUFLQyxLQUFMLEdBQWFQLElBQUksQ0FBQ08sS0FBTCxJQUFjZCxPQUFPLENBQUNjLEtBQW5DOztBQUNBLFFBQUksQ0FBQyxLQUFLQSxLQUFOLElBQWUsT0FBTyxLQUFLQSxLQUFaLEtBQXNCLFFBQXJDLElBQWlELE9BQU8sS0FBS0EsS0FBTCxDQUFXQyxJQUFsQixLQUEyQixVQUFoRixFQUE0RjtBQUMzRixZQUFNSixnQkFBRUMsZ0JBQUYsQ0FBbUIsbURBQW5CLEVBQXdFO0FBQUVJLFFBQUFBLElBQUksRUFBRSxPQUFSO0FBQWlCQyxRQUFBQSxLQUFLLEVBQUUsc0JBQXhCO0FBQWdEQyxRQUFBQSxLQUFLLEVBQUVYLElBQUksQ0FBQ087QUFBNUQsT0FBeEUsQ0FBTjtBQUNBOztBQUNESyxzQkFBU0Msa0JBQVQsQ0FBNEIsS0FBS04sS0FBakM7O0FBRUEsU0FBS2IsTUFBTCxHQUFjLEtBQUtvQixnQkFBTCxDQUFzQixRQUF0QixFQUFnQ2QsSUFBSSxDQUFDTixNQUFMLElBQWVELE9BQU8sQ0FBQ0MsTUFBdkQsQ0FBZDtBQUNBLFNBQUtxQixNQUFMLEdBQWMsS0FBS0QsZ0JBQUwsQ0FBc0IsUUFBdEIsRUFBZ0NkLElBQUksQ0FBQ2UsTUFBTCxJQUFldEIsT0FBTyxDQUFDc0IsTUFBdkQsQ0FBZDtBQUVBLFNBQUtDLE9BQUwsR0FBZWhCLElBQUksQ0FBQ2dCLE9BQUwsS0FBaUIsUUFBakIsR0FBNEIsS0FBS3RCLE1BQWpDLEdBQTBDLEtBQUtxQixNQUE5RDtBQUVBLFNBQUtFLE9BQUwsR0FBZSxJQUFJQyxnQkFBSixDQUFZLEtBQUt4QixNQUFqQixFQUF5QixLQUFLcUIsTUFBOUIsQ0FBZjs7QUFFQSxRQUFJZixJQUFJLENBQUNtQixhQUFMLEtBQXVCakIsU0FBM0IsRUFBc0M7QUFDckMsVUFBSSxPQUFPRixJQUFJLENBQUNtQixhQUFaLEtBQThCLFFBQTlCLElBQTBDaEIsS0FBSyxDQUFDSCxJQUFJLENBQUNtQixhQUFOLENBQS9DLElBQXVFbkIsSUFBSSxDQUFDbUIsYUFBTCxHQUFxQixDQUFoRyxFQUFtRztBQUNsRyxjQUFNZixnQkFBRUMsZ0JBQUYsQ0FBbUIsa0RBQW5CLEVBQXVFO0FBQUVJLFVBQUFBLElBQUksRUFBRSxlQUFSO0FBQXlCQyxVQUFBQSxLQUFLLEVBQUUsc0JBQWhDO0FBQXdEQyxVQUFBQSxLQUFLLEVBQUVYLElBQUksQ0FBQ21CO0FBQXBFLFNBQXZFLENBQU47QUFDQTtBQUNEOztBQUNELFNBQUtBLGFBQUwsR0FBcUJuQixJQUFJLENBQUNtQixhQUFMLEdBQXFCLENBQTFDOztBQUVBLFFBQUksS0FBS3pCLE1BQUwsQ0FBWTBCLEtBQWhCLEVBQXVCO0FBQ3RCLFdBQUsxQixNQUFMLENBQVkyQixFQUFaLENBQWUsUUFBZixFQUF5QixNQUFNO0FBQzlCLGFBQUtDLElBQUwsQ0FBVSxRQUFWLEVBQW9CO0FBQ25CQyxVQUFBQSxPQUFPLEVBQUUsS0FBSzdCLE1BQUwsQ0FBWTZCLE9BREY7QUFFbkJDLFVBQUFBLElBQUksRUFBSyxLQUFLOUIsTUFBTCxDQUFZOEI7QUFGRixTQUFwQjtBQUlBLE9BTEQ7QUFNQTtBQUNEOztBQUVEQyxFQUFBQSxJQUFJLEdBQUc7QUFDTixTQUFLVixNQUFMLENBQVlXLEtBQVosQ0FBa0JDLElBQUksQ0FBQ0YsSUFBdkI7QUFDQTs7QUFFREcsRUFBQUEsVUFBVSxHQUFHO0FBQ1osU0FBS2IsTUFBTCxDQUFZVyxLQUFaLENBQWtCQyxJQUFJLENBQUNFLE1BQUwsQ0FBWUMsSUFBOUI7QUFDQTs7QUFFREMsRUFBQUEsVUFBVSxHQUFHO0FBQ1osU0FBS2hCLE1BQUwsQ0FBWVcsS0FBWixDQUFrQkMsSUFBSSxDQUFDRSxNQUFMLENBQVlHLElBQTlCO0FBQ0E7O0FBRUQsTUFBSVQsT0FBSixHQUFjO0FBQ2IsV0FBTyxLQUFLN0IsTUFBTCxDQUFZNkIsT0FBWixJQUF1QixLQUFLdEIsY0FBbkM7QUFDQTs7QUFFRCxNQUFJdUIsSUFBSixHQUFXO0FBQ1YsV0FBTyxLQUFLOUIsTUFBTCxDQUFZOEIsSUFBWixJQUFvQixLQUFLbEIsV0FBaEM7QUFDQTs7QUFFRDJCLEVBQUFBLGFBQWEsR0FBRztBQUNmLFFBQUksQ0FBQyxLQUFLQyxFQUFWLEVBQWM7QUFDYixXQUFLQSxFQUFMLEdBQVV0QixrQkFBU3VCLGVBQVQsQ0FBeUIsS0FBSzVCLEtBQTlCLENBQVY7QUFDQTs7QUFFRCxRQUFJLEtBQUtBLEtBQUwsQ0FBV2EsS0FBWCxJQUFvQixFQUFFLEtBQUtnQixPQUFQLEtBQW1CLENBQTNDLEVBQThDO0FBQzdDLFdBQUtDLGFBQUwsR0FBcUIsQ0FBQ0MsS0FBRCxFQUFRQyxHQUFSLEtBQWdCO0FBQ3BDLFlBQUlBLEdBQUcsSUFBSUEsR0FBRyxDQUFDOUIsSUFBSixLQUFhLEdBQXBCLElBQTJCOEIsR0FBRyxDQUFDQyxJQUFuQyxFQUF5QztBQUN4QyxlQUFLbEIsSUFBTCxDQUFVLFFBQVY7QUFDQTtBQUNELE9BSkQ7O0FBTUEsV0FBS2YsS0FBTCxDQUFXa0MsVUFBWCxDQUFzQixJQUF0QjtBQUNBLFdBQUtsQyxLQUFMLENBQVdjLEVBQVgsQ0FBYyxVQUFkLEVBQTBCLEtBQUtnQixhQUEvQjtBQUNBO0FBQ0Q7O0FBRURLLEVBQUFBLGdCQUFnQixHQUFHO0FBQ2xCLFFBQUksS0FBS25DLEtBQUwsQ0FBV2EsS0FBWCxJQUFvQixFQUFFLEtBQUtnQixPQUFQLEtBQW1CLENBQTNDLEVBQThDO0FBQzdDLFdBQUs3QixLQUFMLENBQVdrQyxVQUFYLENBQXNCLEtBQXRCO0FBQ0EsV0FBS2xDLEtBQUwsQ0FBV29DLGNBQVgsQ0FBMEIsVUFBMUIsRUFBc0MsS0FBS04sYUFBM0M7QUFDQSxXQUFLQSxhQUFMLEtBQXVCLE9BQXZCO0FBQ0E7O0FBRUQsUUFBSSxLQUFLSCxFQUFULEVBQWE7QUFDWixXQUFLQSxFQUFMLENBQVFVLEtBQVI7QUFDQSxXQUFLVixFQUFMLEdBQVUsSUFBVjtBQUNBO0FBQ0Q7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNDYixFQUFBQSxFQUFFLENBQUN3QixLQUFELEVBQVFDLFFBQVIsRUFBa0I7QUFDbkIsUUFBSUQsS0FBSyxLQUFLLFVBQWQsRUFBMEI7QUFDekIsV0FBS3RDLEtBQUwsQ0FBV2MsRUFBWCxDQUFjd0IsS0FBZCxFQUFxQkMsUUFBckI7QUFDQSxXQUFLYixhQUFMO0FBQ0EsS0FIRCxNQUdPO0FBQ04sWUFBTVosRUFBTixDQUFTd0IsS0FBVCxFQUFnQkMsUUFBaEI7QUFDQTs7QUFDRCxXQUFPLElBQVA7QUFDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0NDLEVBQUFBLElBQUksQ0FBQ0YsS0FBRCxFQUFRQyxRQUFSLEVBQWtCO0FBQ3JCLFFBQUlELEtBQUssS0FBSyxVQUFkLEVBQTBCO0FBQ3pCLFdBQUt0QyxLQUFMLENBQVd3QyxJQUFYLENBQWdCRixLQUFoQixFQUF1QkMsUUFBdkI7QUFDQSxXQUFLYixhQUFMO0FBQ0EsS0FIRCxNQUdPO0FBQ04sWUFBTWMsSUFBTixDQUFXRixLQUFYLEVBQWtCQyxRQUFsQjtBQUNBOztBQUNELFdBQU8sSUFBUDtBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQ0gsRUFBQUEsY0FBYyxDQUFDRSxLQUFELEVBQVFDLFFBQVIsRUFBa0I7QUFDL0IsUUFBSUQsS0FBSyxLQUFLLFVBQWQsRUFBMEI7QUFDekIsV0FBS3RDLEtBQUwsQ0FBV29DLGNBQVgsQ0FBMEJFLEtBQTFCLEVBQWlDQyxRQUFqQztBQUNBLFdBQUtKLGdCQUFMO0FBQ0EsS0FIRCxNQUdPO0FBQ04sWUFBTUMsY0FBTixDQUFxQkUsS0FBckIsRUFBNEJDLFFBQTVCO0FBQ0E7O0FBQ0QsV0FBTyxJQUFQO0FBRUE7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQ0UsRUFBQUEsUUFBUSxDQUFDQyxFQUFELEVBQUs7QUFDWixRQUFJLEtBQUtDLGVBQVQsRUFBMEI7QUFDekIsV0FBS0EsZUFBTCxDQUFxQkMsSUFBckIsQ0FBMEJGLEVBQTFCO0FBQ0EsS0FGRCxNQUVPO0FBQ05BLE1BQUFBLEVBQUUsQ0FBQyxLQUFLRyxnQkFBTixDQUFGO0FBQ0E7O0FBQ0QsV0FBTyxJQUFQO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNDdEMsRUFBQUEsZ0JBQWdCLENBQUNMLElBQUQsRUFBTzRDLE1BQVAsRUFBZTtBQUM5QixRQUFJLENBQUNBLE1BQUQsSUFBVyxPQUFPQSxNQUFQLEtBQWtCLFFBQTdCLElBQXlDLE9BQU9BLE1BQU0sQ0FBQzNCLEtBQWQsS0FBd0IsVUFBckUsRUFBaUY7QUFDaEYsWUFBTXRCLGdCQUFFQyxnQkFBRixDQUFvQixnQkFBZUksSUFBSyxpQ0FBeEMsRUFBMEU7QUFBRUEsUUFBQUEsSUFBRjtBQUFRQyxRQUFBQSxLQUFLLEVBQUUsMkJBQWY7QUFBNENDLFFBQUFBLEtBQUssRUFBRTBDO0FBQW5ELE9BQTFFLENBQU47QUFDQTs7QUFFRG5FLElBQUFBLEdBQUcsQ0FBRSwyQkFBMEJDLFNBQVMsQ0FBQ3NCLElBQUQsQ0FBTyxFQUE1QyxDQUFIO0FBRUEsVUFBTTZDLFNBQVMsR0FBR0QsTUFBTSxDQUFDM0IsS0FBekI7QUFDQSxVQUFNNkIsSUFBSSxHQUFHLElBQWI7O0FBRUEsVUFBTTdCLEtBQUssR0FBRyxTQUFTQSxLQUFULENBQWVZLEtBQWYsRUFBc0JrQixRQUF0QixFQUFnQ1AsRUFBaEMsRUFBb0M7QUFDakQsVUFBSSxPQUFPTyxRQUFQLEtBQW9CLFVBQXhCLEVBQW9DO0FBQ25DUCxRQUFBQSxFQUFFLEdBQUdPLFFBQUw7QUFDQUEsUUFBQUEsUUFBUSxHQUFHLElBQVg7QUFDQTs7QUFFRCxVQUFJRCxJQUFJLENBQUNFLFdBQUwsS0FBcUJ2RCxTQUFyQixLQUFtQyxDQUFDc0QsUUFBRCxJQUFhakUsU0FBUyxDQUFDbUUsR0FBVixDQUFjRixRQUFkLENBQWhELEtBQTRFLEVBQUVELElBQUksQ0FBQ0UsV0FBTCxHQUFtQm5FLFVBQVUsQ0FBQ3FFLElBQVgsQ0FBZ0JyQixLQUFoQixDQUFyQixDQUFoRixFQUE4SDtBQUM3SGlCLFFBQUFBLElBQUksQ0FBQ0gsZ0JBQUwsR0FBd0I7QUFBRWQsVUFBQUEsS0FBRjtBQUFTa0IsVUFBQUE7QUFBVCxTQUF4Qjs7QUFDQSxhQUFLLE1BQU1QLEVBQVgsSUFBaUJNLElBQUksQ0FBQ0wsZUFBdEIsRUFBdUM7QUFDdENELFVBQUFBLEVBQUUsQ0FBQ00sSUFBSSxDQUFDSCxnQkFBTixDQUFGO0FBQ0E7O0FBQ0RHLFFBQUFBLElBQUksQ0FBQ0wsZUFBTCxHQUF1QixFQUF2QjtBQUNBOztBQUVELGFBQU9JLFNBQVMsQ0FBQ00sSUFBVixDQUFlUCxNQUFmLEVBQXVCZixLQUF2QixFQUE4QmtCLFFBQTlCLEVBQXdDUCxFQUF4QyxDQUFQO0FBQ0EsS0FmRDs7QUFpQkFJLElBQUFBLE1BQU0sQ0FBQzNCLEtBQVAsR0FBZUEsS0FBSyxDQUFDbUMsSUFBTixDQUFXUixNQUFYLENBQWY7QUFFQSxXQUFPQSxNQUFQO0FBQ0E7O0FBN09pRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWJ1ZyBmcm9tICcuL2xpYi9kZWJ1Zyc7XG5pbXBvcnQgRSBmcm9tICcuL2xpYi9lcnJvcnMnO1xuaW1wb3J0IHJlYWRsaW5lIGZyb20gJ3JlYWRsaW5lJztcblxuaW1wb3J0ICogYXMgYW5zaSBmcm9tICcuL2xpYi9hbnNpJztcblxuaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gJ2NvbnNvbGUnO1xuaW1wb3J0IHsgZGVjbGFyZUNMSUtpdENsYXNzIH0gZnJvbSAnLi9saWIvdXRpbCc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuXG5jb25zdCB7IGxvZyB9ID0gZGVidWcoJ2NsaS1raXQ6dGVybWluYWwnKTtcbmNvbnN0IHsgaGlnaGxpZ2h0IH0gID0gZGVidWcuc3R5bGVzO1xuXG4vKipcbiAqIENoZWFwIGNoZWNrIHRvIHNlZSBpZiBvdXRwdXQgbWF5IGJlIFhNTCBvciBKU09OIG9iamVjdCBvdXRwdXQuXG4gKiBAdHlwZSB7UmVnRXhwfVxuICovXG5jb25zdCBkYXRhUmVnRXhwID0gL15cXHMqWzx7W10vO1xuXG4vKipcbiAqIFRoZSBsaXN0IG9mIGVuY29kaW5ncyB0byBjaGVjayB0aGUgY2h1bmsgY29udGVudHMgZm9yIGRhdGEgYW5kIGVtaXQgdGhlICdzdGFydCcgZXZlbnQuXG4gKiBAdHlwZSB7UmVnRXhwfVxuICovXG5jb25zdCBlbmNvZGluZ3MgPSBuZXcgU2V0KFsgJ2FzY2lpJywgJ2xhdGluMScsICd1Y3MyJywgJ3V0ZjgnLCAndXRmMTZsZScgXSk7XG5cbi8qKlxuICogU2luY2UgYHN0ZG91dGAgaXMgZ2xvYmFsLCBlYWNoIFRlcm1pbmFsIGluc3RhbmNlIHdpbGwgbGlzdGVuIHRvIGl0IGFuZCB0aGlzIGNhdXNlcyBhIHdhcm5pbmcsIHNvXG4gKiBieSBzZXR0aW5nIHRoZSBtYXggbGlzdGVuZXJzLCB3ZSBjYW4gc3VwcHJlc3MgdGhlIG1lc3NhZ2UuXG4gKi9cbnByb2Nlc3Muc3Rkb3V0LnNldE1heExpc3RlbmVycyhJbmZpbml0eSk7XG5cbi8qKlxuICogQSBoaWdoLWxldmVsIGludGVyZmFjZSBhcm91bmQgYWxsIHRlcm1pbmFsIG9wcmF0aW9ucy5cbiAqXG4gKiBAZW1pdHMgVGVybWluYWwja2V5cHJlc3NcbiAqIEBlbWl0cyBUZXJtaW5hbCNyZXNpemVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWwgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuXHQvKipcblx0ICogVHJhY2tzIGFsbCBwZW5kaW5nIGNhbGxiYWNrcyB0byBiZSBub3RpZmllZCB3aGVuIG91dHB1dCBmaXJzdCBvY2N1cnMuXG5cdCAqIEB0eXBlIHtBcnJheS48RnVuY3Rpb24+fVxuXHQgKi9cblx0b3V0cHV0Q2FsbGJhY2tzID0gW107XG5cblx0LyoqXG5cdCAqIEEgc2VtaXBob3JlIGNvdW50ZXIgdG8gdHJhY2sgdGhlIG51bWJlciBvZiBrZXlwcmVzcyBsaXN0ZW5lcnMgYW5kIGF1dG9tYXRpY2FsbHlcblx0ICogZW5hYmxlL2Rpc2FibGUgcmF3IG1vZGUgb24gdGhlIHN0ZGluIHN0cmVhbS5cblx0ICogQHR5cGUge051bWJlcn1cblx0ICovXG5cdHJhd01vZGUgPSAwO1xuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgdGVybWluYWwsIHN0cmVhbXMsIGFuZCBhIGNvbnNvbGUgaW5zdGFuY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5kZWZhdWx0Q29sdW1ucz04MF0gLSBUaGUgZGVmYXVsdCBudW1iZXIgb2YgY29sdW1ucyB3aWRlIHRoZSB0ZXJtaW5hbFxuXHQgKiBzaG91bGQgYmUgd2hlbiBgc3Rkb3V0YCBpcyBub3QgYSBUVFkuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5kZWZhdWx0Um93cz0yNF0gLSBUaGUgZGVmYXVsdCBudW1iZXIgb2Ygcm93cyBoaWdoIHRoZSB0ZXJtaW5hbCBzaG91bGRcblx0ICogYmUgd2hlbiBgc3Rkb3V0YCBpcyBub3QgYSBUVFkuXG5cdCAqIEBwYXJhbSB7c3RyZWFtLldyaXRhYmxlfSBbb3B0cy5zdGRlcnI9cHJvY2Vzcy5zdGRlcnJdIC0gQSB3cml0YWJsZSBvdXRwdXQgc3RyZWFtLlxuXHQgKiBAcGFyYW0ge3N0cmVhbS5SZWFkYWJsZX0gW29wdHMuc3RkaW49cHJvY2Vzcy5zdGRpbl0gLSBBIHN0cmVhbSBmb3Igd2hpY2ggdG8gcmVhZCBpbnB1dC5cblx0ICogQHBhcmFtIHtzdHJlYW0uV3JpdGFibGV9IFtvcHRzLnN0ZG91dD1wcm9jZXNzLnN0ZG91dF0gLSBBIHdyaXRhYmxlIG91dHB1dCBzdHJlYW0uXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5wcm9tcHRUaW1lb3V0XSAtIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIG9mIGluYWN0aXZpdHkgYmVmb3JlXG5cdCAqIHRpbWluZyBvdXQuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcblx0XHRzdXBlcigpO1xuXHRcdGRlY2xhcmVDTElLaXRDbGFzcyh0aGlzLCAnVGVybWluYWwnKTtcblxuXHRcdGlmIChvcHRzLmRlZmF1bHRDb2x1bW5zICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBvcHRzLmRlZmF1bHRDb2x1bW5zICE9PSAnbnVtYmVyJyB8fCBpc05hTihvcHRzLmRlZmF1bHRDb2x1bW5zKSB8fCBvcHRzLmRlZmF1bHRDb2x1bW5zIDwgMSkpIHtcblx0XHRcdHRocm93IEUuSU5WQUxJRF9BUkdVTUVOVCgnRXhwZWN0ZWQgZGVmYXVsdCBjb2x1bW5zIHRvIGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuXHRcdH1cblx0XHR0aGlzLmRlZmF1bHRDb2x1bW5zID0gb3B0cy5kZWZhdWx0Q29sdW1ucyB8fCA4MDtcblxuXHRcdGlmIChvcHRzLmRlZmF1bHRSb3dzICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBvcHRzLmRlZmF1bHRSb3dzICE9PSAnbnVtYmVyJyB8fCBpc05hTihvcHRzLmRlZmF1bHRSb3dzKSB8fCBvcHRzLmRlZmF1bHRSb3dzIDwgMSkpIHtcblx0XHRcdHRocm93IEUuSU5WQUxJRF9BUkdVTUVOVCgnRXhwZWN0ZWQgZGVmYXVsdCByb3dzIHRvIGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuXHRcdH1cblx0XHR0aGlzLmRlZmF1bHRSb3dzID0gb3B0cy5kZWZhdWx0Um93cyB8fCAyNDtcblxuXHRcdHRoaXMuc3RkaW4gPSBvcHRzLnN0ZGluIHx8IHByb2Nlc3Muc3RkaW47XG5cdFx0aWYgKCF0aGlzLnN0ZGluIHx8IHR5cGVvZiB0aGlzLnN0ZGluICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgdGhpcy5zdGRpbi5yZWFkICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR0aHJvdyBFLklOVkFMSURfQVJHVU1FTlQoJ0V4cGVjdGVkIHRoZSBzdGRpbiBzdHJlYW0gdG8gYmUgYSByZWFkYWJsZSBzdHJlYW0nLCB7IG5hbWU6ICdzdGRpbicsIHNjb3BlOiAnVGVybWluYWwuY29uc3RydWN0b3InLCB2YWx1ZTogb3B0cy5zdGRpbiB9KTtcblx0XHR9XG5cdFx0cmVhZGxpbmUuZW1pdEtleXByZXNzRXZlbnRzKHRoaXMuc3RkaW4pO1xuXG5cdFx0dGhpcy5zdGRvdXQgPSB0aGlzLnBhdGNoU3RyZWFtV3JpdGUoJ3N0ZG91dCcsIG9wdHMuc3Rkb3V0IHx8IHByb2Nlc3Muc3Rkb3V0KTtcblx0XHR0aGlzLnN0ZGVyciA9IHRoaXMucGF0Y2hTdHJlYW1Xcml0ZSgnc3RkZXJyJywgb3B0cy5zdGRlcnIgfHwgcHJvY2Vzcy5zdGRlcnIpO1xuXG5cdFx0dGhpcy5kZWZhdWx0ID0gb3B0cy5kZWZhdWx0ID09PSAnc3Rkb3V0JyA/IHRoaXMuc3Rkb3V0IDogdGhpcy5zdGRlcnI7XG5cblx0XHR0aGlzLmNvbnNvbGUgPSBuZXcgQ29uc29sZSh0aGlzLnN0ZG91dCwgdGhpcy5zdGRlcnIpO1xuXG5cdFx0aWYgKG9wdHMucHJvbXB0VGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAodHlwZW9mIG9wdHMucHJvbXB0VGltZW91dCAhPT0gJ251bWJlcicgfHwgaXNOYU4ob3B0cy5wcm9tcHRUaW1lb3V0KSB8fCBvcHRzLnByb21wdFRpbWVvdXQgPCAwKSB7XG5cdFx0XHRcdHRocm93IEUuSU5WQUxJRF9BUkdVTUVOVCgnRXhwZWN0ZWQgcHJvbXB0IHRpbWVvdXQgdG8gYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJywgeyBuYW1lOiAncHJvbXB0VGltZW91dCcsIHNjb3BlOiAnVGVybWluYWwuY29uc3RydWN0b3InLCB2YWx1ZTogb3B0cy5wcm9tcHRUaW1lb3V0IH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLnByb21wdFRpbWVvdXQgPSBvcHRzLnByb21wdFRpbWVvdXQgfCAwO1xuXG5cdFx0aWYgKHRoaXMuc3Rkb3V0LmlzVFRZKSB7XG5cdFx0XHR0aGlzLnN0ZG91dC5vbigncmVzaXplJywgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmVtaXQoJ3Jlc2l6ZScsIHtcblx0XHRcdFx0XHRjb2x1bW5zOiB0aGlzLnN0ZG91dC5jb2x1bW5zLFxuXHRcdFx0XHRcdHJvd3M6ICAgIHRoaXMuc3Rkb3V0LnJvd3Ncblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRiZWVwKCkge1xuXHRcdHRoaXMuc3RkZXJyLndyaXRlKGFuc2kuYmVlcCk7XG5cdH1cblxuXHRzaG93Q3Vyc29yKCkge1xuXHRcdHRoaXMuc3RkZXJyLndyaXRlKGFuc2kuY3Vyc29yLnNob3cpO1xuXHR9XG5cblx0aGlkZUN1cnNvcigpIHtcblx0XHR0aGlzLnN0ZGVyci53cml0ZShhbnNpLmN1cnNvci5oaWRlKTtcblx0fVxuXG5cdGdldCBjb2x1bW5zKCkge1xuXHRcdHJldHVybiB0aGlzLnN0ZG91dC5jb2x1bW5zIHx8IHRoaXMuZGVmYXVsdENvbHVtbnM7XG5cdH1cblxuXHRnZXQgcm93cygpIHtcblx0XHRyZXR1cm4gdGhpcy5zdGRvdXQucm93cyB8fCB0aGlzLmRlZmF1bHRSb3dzO1xuXHR9XG5cblx0b25BZGRLZXlwcmVzcygpIHtcblx0XHRpZiAoIXRoaXMucmwpIHtcblx0XHRcdHRoaXMucmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2UodGhpcy5zdGRpbik7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuc3RkaW4uaXNUVFkgJiYgKyt0aGlzLnJhd01vZGUgPT09IDEpIHtcblx0XHRcdHRoaXMuc2lnaW50SGFuZGxlciA9IChjaHVuaywga2V5KSA9PiB7XG5cdFx0XHRcdGlmIChrZXkgJiYga2V5Lm5hbWUgPT09ICdjJyAmJiBrZXkuY3RybCkge1xuXHRcdFx0XHRcdHRoaXMuZW1pdCgnU0lHSU5UJyk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRcdHRoaXMuc3RkaW4uc2V0UmF3TW9kZSh0cnVlKTtcblx0XHRcdHRoaXMuc3RkaW4ub24oJ2tleXByZXNzJywgdGhpcy5zaWdpbnRIYW5kbGVyKTtcblx0XHR9XG5cdH1cblxuXHRvblJlbW92ZUtleXByZXNzKCkge1xuXHRcdGlmICh0aGlzLnN0ZGluLmlzVFRZICYmIC0tdGhpcy5yYXdNb2RlID09PSAwKSB7XG5cdFx0XHR0aGlzLnN0ZGluLnNldFJhd01vZGUoZmFsc2UpO1xuXHRcdFx0dGhpcy5zdGRpbi5yZW1vdmVMaXN0ZW5lcigna2V5cHJlc3MnLCB0aGlzLnNpZ2ludEhhbmRsZXIpO1xuXHRcdFx0dGhpcy5zaWdpbnRIYW5kbGVyID09PSAnZmFsc2UnO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnJsKSB7XG5cdFx0XHR0aGlzLnJsLmNsb3NlKCk7XG5cdFx0XHR0aGlzLnJsID0gbnVsbDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQSB3cmFwcGVyIGFyb3VuZCBgRXZlbnRFbWl0dGVyLm9uKClgLiBJZiB0aGUgYGV2ZW50YCBpcyBga2V5cHJlc3NgLCB0aGVuIHRoZSBldmVudCBpcyByb3V0ZWRcblx0ICogdG8gdGhlIHN0ZGluIGluc3RhbmNlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ3xTeW1ib2x9IGV2ZW50IC0gVGhlIGV2ZW50IG5hbWUuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIC0gVGhlIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24uXG5cdCAqIEByZXR1cm5zIHtUZXJtaW5hbH1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdG9uKGV2ZW50LCBsaXN0ZW5lcikge1xuXHRcdGlmIChldmVudCA9PT0gJ2tleXByZXNzJykge1xuXHRcdFx0dGhpcy5zdGRpbi5vbihldmVudCwgbGlzdGVuZXIpO1xuXHRcdFx0dGhpcy5vbkFkZEtleXByZXNzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN1cGVyLm9uKGV2ZW50LCBsaXN0ZW5lcik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgd3JhcHBlciBhcm91bmQgYEV2ZW50RW1pdHRlci5vbmNlKClgLiBJZiB0aGUgYGV2ZW50YCBpcyBga2V5cHJlc3NgLCB0aGVuIHRoZSBldmVudCBpcyByb3V0ZWRcblx0ICogdG8gdGhlIHN0ZGluIGluc3RhbmNlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ3xTeW1ib2x9IGV2ZW50IC0gVGhlIGV2ZW50IG5hbWUuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIC0gVGhlIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24uXG5cdCAqIEByZXR1cm5zIHtUZXJtaW5hbH1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdG9uY2UoZXZlbnQsIGxpc3RlbmVyKSB7XG5cdFx0aWYgKGV2ZW50ID09PSAna2V5cHJlc3MnKSB7XG5cdFx0XHR0aGlzLnN0ZGluLm9uY2UoZXZlbnQsIGxpc3RlbmVyKTtcblx0XHRcdHRoaXMub25BZGRLZXlwcmVzcygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdXBlci5vbmNlKGV2ZW50LCBsaXN0ZW5lcik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgd3JhcHBlciBhcm91bmQgYEV2ZW50RW1pdHRlci5yZW1vdmVMaXN0ZW5lcigpYC4gSWYgdGhlIGBldmVudGAgaXMgYGtleXByZXNzYCwgdGhlbiB0aGUgZXZlbnQgaXMgcm91dGVkXG5cdCAqIHRvIHRoZSBzdGRpbiBpbnN0YW5jZS5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8U3ltYm9sfSBldmVudCAtIFRoZSBldmVudCBuYW1lLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIFRoZSBldmVudCBoYW5kbGVyIGZ1bmN0aW9uLlxuXHQgKiBAcmV0dXJucyB7VGVybWluYWx9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRyZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIpIHtcblx0XHRpZiAoZXZlbnQgPT09ICdrZXlwcmVzcycpIHtcblx0XHRcdHRoaXMuc3RkaW4ucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyKTtcblx0XHRcdHRoaXMub25SZW1vdmVLZXlwcmVzcygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdXBlci5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSBjYWxsYmFjayB0byBiZSBub3RpZmllZCB3aGVuIG91dHB1dCBmaXJzdCBvY2N1cnMgdW5sZXNzIG91dHB1dCBoYXMgYWxyZWFkeSBvY2N1cnJlZFxuXHQgKiBpbiB3aGljaCBjYXNlIHRoZSBjYWxsYmFjayBpcyBpbW1lZGlhdGVseSBpbnZva2VkLiBUaGlzIGlzIGJhc2ljYWxseSBhIHN5bmNocm9ub3VzIHByb21pc2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGNiIC0gVGhlIGNhbGxiYWNrIHRvIG5vdGlmeSB3aGVuIG91dHB1dCBmaXJzdCBvY2N1cnMuXG5cdCAqIEByZXR1cm5zIHtUZXJtaW5hbH1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdG9uT3V0cHV0KGNiKSB7XG5cdFx0aWYgKHRoaXMub3V0cHV0Q2FsbGJhY2tzKSB7XG5cdFx0XHR0aGlzLm91dHB1dENhbGxiYWNrcy5wdXNoKGNiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2IodGhpcy5vdXRwdXRSZXNvbHV0aW9uKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUGF0Y2hlcyBhIHN0cmVhbSdzIGB3cml0ZSgpYCBtZXRob2QgdG8gZGV0ZWN0IG91dHB1dCBjb250ZW50cyBhbmQgZW1pdCBhbiBgb3V0cHV0YCBldmVudCBmb3Jcblx0ICogdGV4dC1iYXNlZCBvdXRwdXQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIC0gVGhlIHN0cmVhbSBuYW1lLlxuXHQgKiBAcGFyYW0ge3N0cmVhbS5Xcml0YWJsZX0gc3RyZWFtIC0gQSB3cml0YWJsZSBvdXRwdXQgc3RyZWFtLlxuXHQgKiBAcmV0dXJucyB7c3RyZWFtLldyaXRhYmxlfVxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICovXG5cdHBhdGNoU3RyZWFtV3JpdGUobmFtZSwgc3RyZWFtKSB7XG5cdFx0aWYgKCFzdHJlYW0gfHwgdHlwZW9mIHN0cmVhbSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHN0cmVhbS53cml0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKGBFeHBlY3RlZCB0aGUgJHtuYW1lfSBzdHJlYW0gdG8gYmUgYSB3cml0YWJsZSBzdHJlYW1gLCB7IG5hbWUsIHNjb3BlOiAnVGVybWluYWwucGF0Y2hTdHJlYW1Xcml0ZScsIHZhbHVlOiBzdHJlYW0gfSk7XG5cdFx0fVxuXG5cdFx0bG9nKGBQYXRjaGluZyBvdXRwdXQgc3RyZWFtOiAke2hpZ2hsaWdodChuYW1lKX1gKTtcblxuXHRcdGNvbnN0IG9yaWdXcml0ZSA9IHN0cmVhbS53cml0ZTtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdGNvbnN0IHdyaXRlID0gZnVuY3Rpb24gd3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYikge1xuXHRcdFx0aWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRjYiA9IGVuY29kaW5nO1xuXHRcdFx0XHRlbmNvZGluZyA9IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzZWxmLm91dHB1dEZpcmVkID09PSB1bmRlZmluZWQgJiYgKCFlbmNvZGluZyB8fCBlbmNvZGluZ3MuaGFzKGVuY29kaW5nKSkgJiYgIShzZWxmLm91dHB1dEZpcmVkID0gZGF0YVJlZ0V4cC50ZXN0KGNodW5rKSkpIHtcblx0XHRcdFx0c2VsZi5vdXRwdXRSZXNvbHV0aW9uID0geyBjaHVuaywgZW5jb2RpbmcgfTtcblx0XHRcdFx0Zm9yIChjb25zdCBjYiBvZiBzZWxmLm91dHB1dENhbGxiYWNrcykge1xuXHRcdFx0XHRcdGNiKHNlbGYub3V0cHV0UmVzb2x1dGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdFx0c2VsZi5vdXRwdXRDYWxsYmFja3MgPSBbXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9yaWdXcml0ZS5jYWxsKHN0cmVhbSwgY2h1bmssIGVuY29kaW5nLCBjYik7XG5cdFx0fTtcblxuXHRcdHN0cmVhbS53cml0ZSA9IHdyaXRlLmJpbmQoc3RyZWFtKTtcblxuXHRcdHJldHVybiBzdHJlYW07XG5cdH1cbn1cbiJdLCJmaWxlIjoidGVybWluYWwuanMifQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlcm1pbmFsLmpzIl0sIm5hbWVzIjpbImxvZyIsImhpZ2hsaWdodCIsImRlYnVnIiwic3R5bGVzIiwiZGF0YVJlZ0V4cCIsImVuY29kaW5ncyIsIlNldCIsInByb2Nlc3MiLCJzdGRvdXQiLCJzZXRNYXhMaXN0ZW5lcnMiLCJJbmZpbml0eSIsIlRlcm1pbmFsIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJvcHRzIiwiZGVmYXVsdENvbHVtbnMiLCJ1bmRlZmluZWQiLCJpc05hTiIsIkUiLCJJTlZBTElEX0FSR1VNRU5UIiwiZGVmYXVsdFJvd3MiLCJzdGRpbiIsInJlYWQiLCJuYW1lIiwic2NvcGUiLCJ2YWx1ZSIsInJlYWRsaW5lIiwiZW1pdEtleXByZXNzRXZlbnRzIiwicGF0Y2hTdHJlYW1Xcml0ZSIsInN0ZGVyciIsImRlZmF1bHQiLCJjb25zb2xlIiwiQ29uc29sZSIsInByb21wdFRpbWVvdXQiLCJpc1RUWSIsIm9uIiwiZW1pdCIsImNvbHVtbnMiLCJyb3dzIiwiYmVlcCIsIndyaXRlIiwiYW5zaSIsInNob3dDdXJzb3IiLCJjdXJzb3IiLCJzaG93IiwiaGlkZUN1cnNvciIsImhpZGUiLCJvbkFkZEtleXByZXNzIiwicmwiLCJjcmVhdGVJbnRlcmZhY2UiLCJyYXdNb2RlIiwic2lnaW50SGFuZGxlciIsImNodW5rIiwia2V5IiwiY3RybCIsInNldFJhd01vZGUiLCJvblJlbW92ZUtleXByZXNzIiwicmVtb3ZlTGlzdGVuZXIiLCJjbG9zZSIsImV2ZW50IiwibGlzdGVuZXIiLCJvbmNlIiwib25PdXRwdXQiLCJjYiIsIm91dHB1dENhbGxiYWNrcyIsInB1c2giLCJvdXRwdXRSZXNvbHV0aW9uIiwic3RyZWFtIiwib3JpZ1dyaXRlIiwic2VsZiIsImVuY29kaW5nIiwib3V0cHV0RmlyZWQiLCJoYXMiLCJ0ZXN0IiwiY2FsbCIsImJpbmQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFDQTs7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RUFBb0M7QUFDakQsVUFBSSxPQUFPTyxRQUFQLEtBQW9CLFVBQXhCLEVBQW9DO0FBQ25DUCxRQUFBQSxFQUFFLEdBQUdPLFFBQUw7QUFDQUEsUUFBQUEsUUFBUSxHQUFHLElBQVg7QUFDQTs7QUFFRCxVQUFJRCxJQUFJLENBQUNFLFdBQUwsS0FBcUJ2RCxTQUFyQixLQUFtQyxDQUFDc0QsUUFBRCxJQUFhakUsU0FBUyxDQUFDbUUsR0FBVixDQUFjRixRQUFkLENBQWhELEtBQTRFLEVBQUVELElBQUksQ0FBQ0UsV0FBTCxHQUFtQm5FLFVBQVUsQ0FBQ3FFLElBQVgsQ0FBZ0JyQixLQUFoQixDQUFyQixDQUFoRixFQUE4SDtBQUM3SGlCLFFBQUFBLElBQUksQ0FBQ0gsZ0JBQUwsR0FBd0I7QUFBRWQsVUFBQUEsS0FBRjtBQUFTa0IsVUFBQUE7QUFBVCxTQUF4Qjs7QUFDQSxZQUFJRCxJQUFJLENBQUNMLGVBQVQsRUFBMEI7QUFDekIsZUFBSyxNQUFNRCxFQUFYLElBQWlCTSxJQUFJLENBQUNMLGVBQXRCLEVBQXVDO0FBQ3RDRCxZQUFBQSxFQUFFLENBQUNNLElBQUksQ0FBQ0gsZ0JBQU4sQ0FBRjtBQUNBOztBQUNERyxVQUFBQSxJQUFJLENBQUNMLGVBQUwsR0FBdUIsSUFBdkI7QUFDQTtBQUNEOztBQUVELGFBQU9JLFNBQVMsQ0FBQ00sSUFBVixDQUFlUCxNQUFmLEVBQXVCZixLQUF2QixFQUE4QmtCLFFBQTlCLEVBQXdDUCxFQUF4QyxDQUFQO0FBQ0EsS0FqQkQ7O0FBbUJBSSxJQUFBQSxNQUFNLENBQUMzQixLQUFQLEdBQWVBLEtBQUssQ0FBQ21DLElBQU4sQ0FBV1IsTUFBWCxDQUFmO0FBRUEsV0FBT0EsTUFBUDtBQUNBOztBQS9PaUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVidWcgZnJvbSAnLi9saWIvZGVidWcnO1xuaW1wb3J0IEUgZnJvbSAnLi9saWIvZXJyb3JzJztcbmltcG9ydCByZWFkbGluZSBmcm9tICdyZWFkbGluZSc7XG5cbmltcG9ydCAqIGFzIGFuc2kgZnJvbSAnLi9saWIvYW5zaSc7XG5cbmltcG9ydCB7IENvbnNvbGUgfSBmcm9tICdjb25zb2xlJztcbmltcG9ydCB7IGRlY2xhcmVDTElLaXRDbGFzcyB9IGZyb20gJy4vbGliL3V0aWwnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuY29uc3QgeyBsb2cgfSA9IGRlYnVnKCdjbGkta2l0OnRlcm1pbmFsJyk7XG5jb25zdCB7IGhpZ2hsaWdodCB9ICA9IGRlYnVnLnN0eWxlcztcblxuLyoqXG4gKiBDaGVhcCBjaGVjayB0byBzZWUgaWYgb3V0cHV0IG1heSBiZSBYTUwgb3IgSlNPTiBvYmplY3Qgb3V0cHV0LlxuICogQHR5cGUge1JlZ0V4cH1cbiAqL1xuY29uc3QgZGF0YVJlZ0V4cCA9IC9eXFxzKls8e1tdLztcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBlbmNvZGluZ3MgdG8gY2hlY2sgdGhlIGNodW5rIGNvbnRlbnRzIGZvciBkYXRhIGFuZCBlbWl0IHRoZSAnc3RhcnQnIGV2ZW50LlxuICogQHR5cGUge1JlZ0V4cH1cbiAqL1xuY29uc3QgZW5jb2RpbmdzID0gbmV3IFNldChbICdhc2NpaScsICdsYXRpbjEnLCAndWNzMicsICd1dGY4JywgJ3V0ZjE2bGUnIF0pO1xuXG4vKipcbiAqIFNpbmNlIGBzdGRvdXRgIGlzIGdsb2JhbCwgZWFjaCBUZXJtaW5hbCBpbnN0YW5jZSB3aWxsIGxpc3RlbiB0byBpdCBhbmQgdGhpcyBjYXVzZXMgYSB3YXJuaW5nLCBzb1xuICogYnkgc2V0dGluZyB0aGUgbWF4IGxpc3RlbmVycywgd2UgY2FuIHN1cHByZXNzIHRoZSBtZXNzYWdlLlxuICovXG5wcm9jZXNzLnN0ZG91dC5zZXRNYXhMaXN0ZW5lcnMoSW5maW5pdHkpO1xuXG4vKipcbiAqIEEgaGlnaC1sZXZlbCBpbnRlcmZhY2UgYXJvdW5kIGFsbCB0ZXJtaW5hbCBvcHJhdGlvbnMuXG4gKlxuICogQGVtaXRzIFRlcm1pbmFsI2tleXByZXNzXG4gKiBAZW1pdHMgVGVybWluYWwjcmVzaXplXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcblx0LyoqXG5cdCAqIFRyYWNrcyBhbGwgcGVuZGluZyBjYWxsYmFja3MgdG8gYmUgbm90aWZpZWQgd2hlbiBvdXRwdXQgZmlyc3Qgb2NjdXJzLlxuXHQgKiBAdHlwZSB7QXJyYXkuPEZ1bmN0aW9uPn1cblx0ICovXG5cdG91dHB1dENhbGxiYWNrcyA9IFtdO1xuXG5cdC8qKlxuXHQgKiBBIHNlbWlwaG9yZSBjb3VudGVyIHRvIHRyYWNrIHRoZSBudW1iZXIgb2Yga2V5cHJlc3MgbGlzdGVuZXJzIGFuZCBhdXRvbWF0aWNhbGx5XG5cdCAqIGVuYWJsZS9kaXNhYmxlIHJhdyBtb2RlIG9uIHRoZSBzdGRpbiBzdHJlYW0uXG5cdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdCAqL1xuXHRyYXdNb2RlID0gMDtcblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIHRlcm1pbmFsLCBzdHJlYW1zLCBhbmQgYSBjb25zb2xlIGluc3RhbmNlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIC0gVmFyaW91cyBvcHRpb25zLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW29wdHMuZGVmYXVsdENvbHVtbnM9ODBdIC0gVGhlIGRlZmF1bHQgbnVtYmVyIG9mIGNvbHVtbnMgd2lkZSB0aGUgdGVybWluYWxcblx0ICogc2hvdWxkIGJlIHdoZW4gYHN0ZG91dGAgaXMgbm90IGEgVFRZLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW29wdHMuZGVmYXVsdFJvd3M9MjRdIC0gVGhlIGRlZmF1bHQgbnVtYmVyIG9mIHJvd3MgaGlnaCB0aGUgdGVybWluYWwgc2hvdWxkXG5cdCAqIGJlIHdoZW4gYHN0ZG91dGAgaXMgbm90IGEgVFRZLlxuXHQgKiBAcGFyYW0ge3N0cmVhbS5Xcml0YWJsZX0gW29wdHMuc3RkZXJyPXByb2Nlc3Muc3RkZXJyXSAtIEEgd3JpdGFibGUgb3V0cHV0IHN0cmVhbS5cblx0ICogQHBhcmFtIHtzdHJlYW0uUmVhZGFibGV9IFtvcHRzLnN0ZGluPXByb2Nlc3Muc3RkaW5dIC0gQSBzdHJlYW0gZm9yIHdoaWNoIHRvIHJlYWQgaW5wdXQuXG5cdCAqIEBwYXJhbSB7c3RyZWFtLldyaXRhYmxlfSBbb3B0cy5zdGRvdXQ9cHJvY2Vzcy5zdGRvdXRdIC0gQSB3cml0YWJsZSBvdXRwdXQgc3RyZWFtLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW29wdHMucHJvbXB0VGltZW91dF0gLSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBvZiBpbmFjdGl2aXR5IGJlZm9yZVxuXHQgKiB0aW1pbmcgb3V0LlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG5cdFx0c3VwZXIoKTtcblx0XHRkZWNsYXJlQ0xJS2l0Q2xhc3ModGhpcywgJ1Rlcm1pbmFsJyk7XG5cblx0XHRpZiAob3B0cy5kZWZhdWx0Q29sdW1ucyAhPT0gdW5kZWZpbmVkICYmICh0eXBlb2Ygb3B0cy5kZWZhdWx0Q29sdW1ucyAhPT0gJ251bWJlcicgfHwgaXNOYU4ob3B0cy5kZWZhdWx0Q29sdW1ucykgfHwgb3B0cy5kZWZhdWx0Q29sdW1ucyA8IDEpKSB7XG5cdFx0XHR0aHJvdyBFLklOVkFMSURfQVJHVU1FTlQoJ0V4cGVjdGVkIGRlZmF1bHQgY29sdW1ucyB0byBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcblx0XHR9XG5cdFx0dGhpcy5kZWZhdWx0Q29sdW1ucyA9IG9wdHMuZGVmYXVsdENvbHVtbnMgfHwgODA7XG5cblx0XHRpZiAob3B0cy5kZWZhdWx0Um93cyAhPT0gdW5kZWZpbmVkICYmICh0eXBlb2Ygb3B0cy5kZWZhdWx0Um93cyAhPT0gJ251bWJlcicgfHwgaXNOYU4ob3B0cy5kZWZhdWx0Um93cykgfHwgb3B0cy5kZWZhdWx0Um93cyA8IDEpKSB7XG5cdFx0XHR0aHJvdyBFLklOVkFMSURfQVJHVU1FTlQoJ0V4cGVjdGVkIGRlZmF1bHQgcm93cyB0byBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcblx0XHR9XG5cdFx0dGhpcy5kZWZhdWx0Um93cyA9IG9wdHMuZGVmYXVsdFJvd3MgfHwgMjQ7XG5cblx0XHR0aGlzLnN0ZGluID0gb3B0cy5zdGRpbiB8fCBwcm9jZXNzLnN0ZGluO1xuXHRcdGlmICghdGhpcy5zdGRpbiB8fCB0eXBlb2YgdGhpcy5zdGRpbiAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHRoaXMuc3RkaW4ucmVhZCAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCB0aGUgc3RkaW4gc3RyZWFtIHRvIGJlIGEgcmVhZGFibGUgc3RyZWFtJywgeyBuYW1lOiAnc3RkaW4nLCBzY29wZTogJ1Rlcm1pbmFsLmNvbnN0cnVjdG9yJywgdmFsdWU6IG9wdHMuc3RkaW4gfSk7XG5cdFx0fVxuXHRcdHJlYWRsaW5lLmVtaXRLZXlwcmVzc0V2ZW50cyh0aGlzLnN0ZGluKTtcblxuXHRcdHRoaXMuc3Rkb3V0ID0gdGhpcy5wYXRjaFN0cmVhbVdyaXRlKCdzdGRvdXQnLCBvcHRzLnN0ZG91dCB8fCBwcm9jZXNzLnN0ZG91dCk7XG5cdFx0dGhpcy5zdGRlcnIgPSB0aGlzLnBhdGNoU3RyZWFtV3JpdGUoJ3N0ZGVycicsIG9wdHMuc3RkZXJyIHx8IHByb2Nlc3Muc3RkZXJyKTtcblxuXHRcdHRoaXMuZGVmYXVsdCA9IG9wdHMuZGVmYXVsdCA9PT0gJ3N0ZG91dCcgPyB0aGlzLnN0ZG91dCA6IHRoaXMuc3RkZXJyO1xuXG5cdFx0dGhpcy5jb25zb2xlID0gbmV3IENvbnNvbGUodGhpcy5zdGRvdXQsIHRoaXMuc3RkZXJyKTtcblxuXHRcdGlmIChvcHRzLnByb21wdFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKHR5cGVvZiBvcHRzLnByb21wdFRpbWVvdXQgIT09ICdudW1iZXInIHx8IGlzTmFOKG9wdHMucHJvbXB0VGltZW91dCkgfHwgb3B0cy5wcm9tcHRUaW1lb3V0IDwgMCkge1xuXHRcdFx0XHR0aHJvdyBFLklOVkFMSURfQVJHVU1FTlQoJ0V4cGVjdGVkIHByb21wdCB0aW1lb3V0IHRvIGJlIGEgcG9zaXRpdmUgaW50ZWdlcicsIHsgbmFtZTogJ3Byb21wdFRpbWVvdXQnLCBzY29wZTogJ1Rlcm1pbmFsLmNvbnN0cnVjdG9yJywgdmFsdWU6IG9wdHMucHJvbXB0VGltZW91dCB9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5wcm9tcHRUaW1lb3V0ID0gb3B0cy5wcm9tcHRUaW1lb3V0IHwgMDtcblxuXHRcdGlmICh0aGlzLnN0ZG91dC5pc1RUWSkge1xuXHRcdFx0dGhpcy5zdGRvdXQub24oJ3Jlc2l6ZScsICgpID0+IHtcblx0XHRcdFx0dGhpcy5lbWl0KCdyZXNpemUnLCB7XG5cdFx0XHRcdFx0Y29sdW1uczogdGhpcy5zdGRvdXQuY29sdW1ucyxcblx0XHRcdFx0XHRyb3dzOiAgICB0aGlzLnN0ZG91dC5yb3dzXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0YmVlcCgpIHtcblx0XHR0aGlzLnN0ZGVyci53cml0ZShhbnNpLmJlZXApO1xuXHR9XG5cblx0c2hvd0N1cnNvcigpIHtcblx0XHR0aGlzLnN0ZGVyci53cml0ZShhbnNpLmN1cnNvci5zaG93KTtcblx0fVxuXG5cdGhpZGVDdXJzb3IoKSB7XG5cdFx0dGhpcy5zdGRlcnIud3JpdGUoYW5zaS5jdXJzb3IuaGlkZSk7XG5cdH1cblxuXHRnZXQgY29sdW1ucygpIHtcblx0XHRyZXR1cm4gdGhpcy5zdGRvdXQuY29sdW1ucyB8fCB0aGlzLmRlZmF1bHRDb2x1bW5zO1xuXHR9XG5cblx0Z2V0IHJvd3MoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc3Rkb3V0LnJvd3MgfHwgdGhpcy5kZWZhdWx0Um93cztcblx0fVxuXG5cdG9uQWRkS2V5cHJlc3MoKSB7XG5cdFx0aWYgKCF0aGlzLnJsKSB7XG5cdFx0XHR0aGlzLnJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHRoaXMuc3RkaW4pO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnN0ZGluLmlzVFRZICYmICsrdGhpcy5yYXdNb2RlID09PSAxKSB7XG5cdFx0XHR0aGlzLnNpZ2ludEhhbmRsZXIgPSAoY2h1bmssIGtleSkgPT4ge1xuXHRcdFx0XHRpZiAoa2V5ICYmIGtleS5uYW1lID09PSAnYycgJiYga2V5LmN0cmwpIHtcblx0XHRcdFx0XHR0aGlzLmVtaXQoJ1NJR0lOVCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHR0aGlzLnN0ZGluLnNldFJhd01vZGUodHJ1ZSk7XG5cdFx0XHR0aGlzLnN0ZGluLm9uKCdrZXlwcmVzcycsIHRoaXMuc2lnaW50SGFuZGxlcik7XG5cdFx0fVxuXHR9XG5cblx0b25SZW1vdmVLZXlwcmVzcygpIHtcblx0XHRpZiAodGhpcy5zdGRpbi5pc1RUWSAmJiAtLXRoaXMucmF3TW9kZSA9PT0gMCkge1xuXHRcdFx0dGhpcy5zdGRpbi5zZXRSYXdNb2RlKGZhbHNlKTtcblx0XHRcdHRoaXMuc3RkaW4ucmVtb3ZlTGlzdGVuZXIoJ2tleXByZXNzJywgdGhpcy5zaWdpbnRIYW5kbGVyKTtcblx0XHRcdHRoaXMuc2lnaW50SGFuZGxlciA9PT0gJ2ZhbHNlJztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5ybCkge1xuXHRcdFx0dGhpcy5ybC5jbG9zZSgpO1xuXHRcdFx0dGhpcy5ybCA9IG51bGw7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEEgd3JhcHBlciBhcm91bmQgYEV2ZW50RW1pdHRlci5vbigpYC4gSWYgdGhlIGBldmVudGAgaXMgYGtleXByZXNzYCwgdGhlbiB0aGUgZXZlbnQgaXMgcm91dGVkXG5cdCAqIHRvIHRoZSBzdGRpbiBpbnN0YW5jZS5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8U3ltYm9sfSBldmVudCAtIFRoZSBldmVudCBuYW1lLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIFRoZSBldmVudCBoYW5kbGVyIGZ1bmN0aW9uLlxuXHQgKiBAcmV0dXJucyB7VGVybWluYWx9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRvbihldmVudCwgbGlzdGVuZXIpIHtcblx0XHRpZiAoZXZlbnQgPT09ICdrZXlwcmVzcycpIHtcblx0XHRcdHRoaXMuc3RkaW4ub24oZXZlbnQsIGxpc3RlbmVyKTtcblx0XHRcdHRoaXMub25BZGRLZXlwcmVzcygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdXBlci5vbihldmVudCwgbGlzdGVuZXIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHdyYXBwZXIgYXJvdW5kIGBFdmVudEVtaXR0ZXIub25jZSgpYC4gSWYgdGhlIGBldmVudGAgaXMgYGtleXByZXNzYCwgdGhlbiB0aGUgZXZlbnQgaXMgcm91dGVkXG5cdCAqIHRvIHRoZSBzdGRpbiBpbnN0YW5jZS5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8U3ltYm9sfSBldmVudCAtIFRoZSBldmVudCBuYW1lLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIFRoZSBldmVudCBoYW5kbGVyIGZ1bmN0aW9uLlxuXHQgKiBAcmV0dXJucyB7VGVybWluYWx9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRvbmNlKGV2ZW50LCBsaXN0ZW5lcikge1xuXHRcdGlmIChldmVudCA9PT0gJ2tleXByZXNzJykge1xuXHRcdFx0dGhpcy5zdGRpbi5vbmNlKGV2ZW50LCBsaXN0ZW5lcik7XG5cdFx0XHR0aGlzLm9uQWRkS2V5cHJlc3MoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3VwZXIub25jZShldmVudCwgbGlzdGVuZXIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHdyYXBwZXIgYXJvdW5kIGBFdmVudEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoKWAuIElmIHRoZSBgZXZlbnRgIGlzIGBrZXlwcmVzc2AsIHRoZW4gdGhlIGV2ZW50IGlzIHJvdXRlZFxuXHQgKiB0byB0aGUgc3RkaW4gaW5zdGFuY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfFN5bWJvbH0gZXZlbnQgLSBUaGUgZXZlbnQgbmFtZS5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgLSBUaGUgZXZlbnQgaGFuZGxlciBmdW5jdGlvbi5cblx0ICogQHJldHVybnMge1Rlcm1pbmFsfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0cmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyKSB7XG5cdFx0aWYgKGV2ZW50ID09PSAna2V5cHJlc3MnKSB7XG5cdFx0XHR0aGlzLnN0ZGluLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcik7XG5cdFx0XHR0aGlzLm9uUmVtb3ZlS2V5cHJlc3MoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3VwZXIucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgY2FsbGJhY2sgdG8gYmUgbm90aWZpZWQgd2hlbiBvdXRwdXQgZmlyc3Qgb2NjdXJzIHVubGVzcyBvdXRwdXQgaGFzIGFscmVhZHkgb2NjdXJyZWRcblx0ICogaW4gd2hpY2ggY2FzZSB0aGUgY2FsbGJhY2sgaXMgaW1tZWRpYXRlbHkgaW52b2tlZC4gVGhpcyBpcyBiYXNpY2FsbHkgYSBzeW5jaHJvbm91cyBwcm9taXNlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYiAtIFRoZSBjYWxsYmFjayB0byBub3RpZnkgd2hlbiBvdXRwdXQgZmlyc3Qgb2NjdXJzLlxuXHQgKiBAcmV0dXJucyB7VGVybWluYWx9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRvbk91dHB1dChjYikge1xuXHRcdGlmICh0aGlzLm91dHB1dENhbGxiYWNrcykge1xuXHRcdFx0dGhpcy5vdXRwdXRDYWxsYmFja3MucHVzaChjYik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNiKHRoaXMub3V0cHV0UmVzb2x1dGlvbik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBhdGNoZXMgYSBzdHJlYW0ncyBgd3JpdGUoKWAgbWV0aG9kIHRvIGRldGVjdCBvdXRwdXQgY29udGVudHMgYW5kIGVtaXQgYW4gYG91dHB1dGAgZXZlbnQgZm9yXG5cdCAqIHRleHQtYmFzZWQgb3V0cHV0LlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIFRoZSBzdHJlYW0gbmFtZS5cblx0ICogQHBhcmFtIHtzdHJlYW0uV3JpdGFibGV9IHN0cmVhbSAtIEEgd3JpdGFibGUgb3V0cHV0IHN0cmVhbS5cblx0ICogQHJldHVybnMge3N0cmVhbS5Xcml0YWJsZX1cblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqL1xuXHRwYXRjaFN0cmVhbVdyaXRlKG5hbWUsIHN0cmVhbSkge1xuXHRcdGlmICghc3RyZWFtIHx8IHR5cGVvZiBzdHJlYW0gIT09ICdvYmplY3QnIHx8IHR5cGVvZiBzdHJlYW0ud3JpdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHRocm93IEUuSU5WQUxJRF9BUkdVTUVOVChgRXhwZWN0ZWQgdGhlICR7bmFtZX0gc3RyZWFtIHRvIGJlIGEgd3JpdGFibGUgc3RyZWFtYCwgeyBuYW1lLCBzY29wZTogJ1Rlcm1pbmFsLnBhdGNoU3RyZWFtV3JpdGUnLCB2YWx1ZTogc3RyZWFtIH0pO1xuXHRcdH1cblxuXHRcdGxvZyhgUGF0Y2hpbmcgb3V0cHV0IHN0cmVhbTogJHtoaWdobGlnaHQobmFtZSl9YCk7XG5cblx0XHRjb25zdCBvcmlnV3JpdGUgPSBzdHJlYW0ud3JpdGU7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0XHRjb25zdCB3cml0ZSA9IGZ1bmN0aW9uIHdyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpIHtcblx0XHRcdGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0Y2IgPSBlbmNvZGluZztcblx0XHRcdFx0ZW5jb2RpbmcgPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2VsZi5vdXRwdXRGaXJlZCA9PT0gdW5kZWZpbmVkICYmICghZW5jb2RpbmcgfHwgZW5jb2RpbmdzLmhhcyhlbmNvZGluZykpICYmICEoc2VsZi5vdXRwdXRGaXJlZCA9IGRhdGFSZWdFeHAudGVzdChjaHVuaykpKSB7XG5cdFx0XHRcdHNlbGYub3V0cHV0UmVzb2x1dGlvbiA9IHsgY2h1bmssIGVuY29kaW5nIH07XG5cdFx0XHRcdGlmIChzZWxmLm91dHB1dENhbGxiYWNrcykge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgY2Igb2Ygc2VsZi5vdXRwdXRDYWxsYmFja3MpIHtcblx0XHRcdFx0XHRcdGNiKHNlbGYub3V0cHV0UmVzb2x1dGlvbik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNlbGYub3V0cHV0Q2FsbGJhY2tzID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb3JpZ1dyaXRlLmNhbGwoc3RyZWFtLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcblx0XHR9O1xuXG5cdFx0c3RyZWFtLndyaXRlID0gd3JpdGUuYmluZChzdHJlYW0pO1xuXG5cdFx0cmV0dXJuIHN0cmVhbTtcblx0fVxufVxuIl0sImZpbGUiOiJ0ZXJtaW5hbC5qcyJ9
{
"name": "cli-kit",
"version": "1.8.4",
"version": "1.8.5",
"description": "Everything you need to create awesome command line interfaces",

@@ -62,3 +62,3 @@ "main": "./dist/index.js",

"babel-eslint": "^10.1.0",
"babel-loader": "^8.1.0",
"babel-loader": "^8.2.1",
"babel-plugin-istanbul": "^6.0.0",

@@ -65,0 +65,0 @@ "chai": "^4.2.0",

@@ -63,9 +63,5 @@ # cli-kit

cli-kit extensions can be native binary executables or other Node.js scripts. When the extension is
a native executable, then it is executed using Node's `spawn()`. However, Node's `spawn()` does not
expose a TTY to the child process and thus things like prompting may not work or xterm.js support.
a native executable, then it is executed using Node's `spawn()`. Note that spawned child processes
do not have a TTY and thus things like prompting will not work.
To solve this, the executable needs to be run in a pseudo terminal. Add the
[`node-pty-prebuilt-multiarch`][node-pty] dependency to your project and cli-kit will use it to
spawn the native executable.
## API

@@ -301,2 +297,1 @@

[xterm]: https://xtermjs.org/
[node-pty]: https://www.npmjs.com/package/node-pty-prebuilt-multiarch
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc