@@ -14,9 +14,7 @@
var _promist = require("promist");
-var _envManager = _interopRequireDefault(require("../utils/env-manager"));
-
-var _mergeOptions = _interopRequireWildcard(require("./merge-options"));
+var _mergeOptions = _interopRequireDefault(require("./merge-options"));
var _scope = require("./scope");
@@ -30,7 +28,7 @@
var _constants = require("../constants");
-function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
+var _StateManager = _interopRequireDefault(require("./StateManager"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -38,72 +36,92 @@
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
-const lazy = fn => (0, _promist.lazy)((resolve, reject) => fn().then(resolve).catch(reject));
-
async function contain(options = {}, fn) {
- const core = getCore(options);
- let res;
+ const manager = new _StateManager.default();
try {
- await core.initialize();
- res = await fn(core);
- core.restore();
+ const core = await getCore(manager, options);
+ options = core.options;
+ const response = await fn(core);
+ manager.restore();
+ return response;
} catch (err) {
- core.restore();
- const opts = await core.options.catch(() => options);
- throw opts.silent ? new _errors.SilentError(undefined, err) : err;
+ manager.restore();
+ throw options.silent ? new _errors.SilentError(undefined, err) : err;
}
-
- return res;
}
-function getCore(options, parent) {
- const manager = parent ? parent.manager : new _envManager.default(process.env);
+async function getCore(manager, options) {
const cli = (0, _mergeOptions.default)(manager, options);
- const restoreLogger = (0, _mergeOptions.setLogger)(manager, cli);
- const cwd = process.cwd();
- const promise = lazy(async () => {
+ if (cli.log) manager.setLogger(cli.log);
const paths = await (0, _paths.getSelfPaths)({
- cwd,
+ cwd: process.cwd(),
directory: options.directory || undefined,
file: options.file || undefined
- });
+ }); // Load should be called with directory as cwd (for js files)
+
+ manager.setCwd(paths.directory);
const loaded = await (0, _load.default)(paths);
- const scope = (0, _mergeOptions.default)(manager, options, loaded.options);
- (0, _mergeOptions.setLogger)(manager, scope);
+
+ const scope = _objectSpread({}, (0, _mergeOptions.default)(manager, options, loaded.options), {
+ cwd: loaded.options.cwd || paths.directory
+ });
+
+ manager.setCwd(scope.cwd);
+ const root = await (0, _paths.getRootPaths)({
+ cwd: scope.cwd,
+ root: scope.root
+ });
+ const bin = root ? await (0, _paths2.default)(scope.cwd, root.directory) : await (0, _paths2.default)(scope.cwd);
+ const tasks = (0, _tasks.getAllTasks)(loaded.kpo || undefined, loaded.pkg || undefined);
return {
paths,
loaded,
- options: scope
- };
- });
- const root = lazy(() => promise.then(data => (0, _paths.getRootPaths)({
- cwd: data.paths.directory,
- root: data.options.root
- })));
- return {
- manager,
+ options: scope,
+ tasks,
+ bin,
root,
- paths: lazy(() => promise.then(data => data.paths)),
- loaded: lazy(() => promise.then(data => data.loaded)),
- options: lazy(() => promise.then(data => data.options)),
- children: lazy(() => promise.then(data => (0, _scope.getChildren)({
- cwd: data.paths.directory,
- pkg: data.paths.pkg ? _path.default.parse(data.paths.pkg).dir : data.paths.directory
- }, data.options.children))),
- bin: lazy(() => Promise.all([promise, root]).then(([data, root]) => root ? (0, _paths2.default)(data.paths.directory, root.directory) : (0, _paths2.default)(data.paths.directory))),
- tasks: lazy(() => promise.then(data => (0, _tasks.getAllTasks)(data.loaded.kpo || undefined, data.loaded.pkg || undefined))),
+ children: _promist.lazy.fn(() => {
+ return (0, _scope.getChildren)({
+ cwd: scope.cwd,
+ pkg: paths.pkg ? _path.default.parse(paths.pkg).dir : scope.cwd
+ }, scope.children);
+ }),
- async task(path) {
- const loaded = await this.loaded;
+ task(path) {
return (0, _tasks.getTask)(path, loaded.kpo || undefined, loaded.pkg || undefined);
},
+ initialize() {
+ this.restore();
+
+ _logger.default.debug(`Initializing scope with path: ${paths.directory}`); // Use cli options to set hard logging level
+
+
+ if (scope.log) {
+ manager.setLogger(scope.log);
+ manager.set(_constants.KPO_LOG_ENV, scope.log);
+ } // Set cwd
+
+
+ manager.setCwd(scope.cwd || paths.directory); // Set environmentals
+
+ if (scope.env) manager.assign(scope.env);
+ if (bin.length) manager.addPaths(bin);
+ },
+
+ restore() {
+ return manager.restore();
+ },
+
+ async reset() {
+ Object.assign(this, (await getCore(manager, options)));
+ this.initialize();
+ },
+
async scope(names = []) {
if (!names.length) return this;
const name = names[0];
- const paths = await this.paths;
- const root = await this.root;
const children = await this.children;
const scope = (0, _scope.getScope)(name, children, {
self: paths.directory,
@@ -111,49 +129,19 @@
});
if (scope) {
- const core = await getCore(_objectSpread({}, options, {
+ this.restore();
+ const core = await getCore(manager, _objectSpread({}, options, {
file: null,
directory: scope.directory
- }), this).scope(names.slice(1));
- await core.initialize();
+ })).then(core => core.scope(names.slice(1)));
+ core.initialize();
return core;
}
if (!root) throw Error(`Scope not found: ${name}`);
return this.scope(['root'].concat(names));
- },
-
- async initialize() {
- this.restore();
- const {
- paths,
- options: opts
- } = await promise;
- const bin = await this.bin;
-
- _logger.default.debug(`Initializing scope with path: ${paths.directory}`); // Use cli options to set hard logging level
-
-
- if (options.log) manager.set(_constants.KPO_LOG_ENV, options.log); // Set environmentals
-
- (0, _mergeOptions.setLogger)(manager, opts);
- process.chdir(paths.directory);
- if (opts.env) manager.assign(opts.env);
- if (bin.length) manager.addPaths(bin);
- },
-
- restore() {
- if (parent) return parent.restore();
- restoreLogger();
- manager.restore();
- process.chdir(cwd);
- },
-
- async reset() {
- Object.assign(this, getCore(options, parent));
- await this.initialize();
}
};
}
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL2luZGV4LnRzIl0sIm5hbWVzIjpbImxhenkiLCJmbiIsInJlc29sdmUiLCJyZWplY3QiLCJ0aGVuIiwiY2F0Y2giLCJjb250YWluIiwib3B0aW9ucyIsImNvcmUiLCJnZXRDb3JlIiwicmVzIiwiaW5pdGlhbGl6ZSIsInJlc3RvcmUiLCJlcnIiLCJvcHRzIiwic2lsZW50IiwiU2lsZW50RXJyb3IiLCJ1bmRlZmluZWQiLCJwYXJlbnQiLCJtYW5hZ2VyIiwiRW52TWFuYWdlciIsInByb2Nlc3MiLCJlbnYiLCJjbGkiLCJyZXN0b3JlTG9nZ2VyIiwiY3dkIiwicHJvbWlzZSIsInBhdGhzIiwiZGlyZWN0b3J5IiwiZmlsZSIsImxvYWRlZCIsInNjb3BlIiwicm9vdCIsImRhdGEiLCJjaGlsZHJlbiIsInBrZyIsInBhdGgiLCJwYXJzZSIsImRpciIsImJpbiIsIlByb21pc2UiLCJhbGwiLCJ0YXNrcyIsImtwbyIsInRhc2siLCJuYW1lcyIsImxlbmd0aCIsIm5hbWUiLCJzZWxmIiwic2xpY2UiLCJFcnJvciIsImNvbmNhdCIsImxvZ2dlciIsImRlYnVnIiwibG9nIiwic2V0IiwiS1BPX0xPR19FTlYiLCJjaGRpciIsImFzc2lnbiIsImFkZFBhdGhzIiwicmVzZXQiLCJPYmplY3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxJQUFJLEdBQU9DLEVBQUosSUFDWCxtQkFBTSxDQUFDQyxPQUFELEVBQVVDLE1BQVYsS0FDSkYsRUFBRSxHQUNDRyxJQURILENBQ1FGLE9BRFIsRUFFR0csS0FGSCxDQUVTRixNQUZULENBREYsQ0FERjs7QUF1QmUsZUFBZUcsT0FBZixDQUNiQyxPQUFvQixHQUFHLEVBRFYsRUFFYk4sRUFGYSxFQUdEO0FBQ1osUUFBTU8sSUFBSSxHQUFHQyxPQUFPLENBQUNGLE9BQUQsQ0FBcEI7QUFDQSxNQUFJRyxHQUFKOztBQUNBLE1BQUk7QUFDRixVQUFNRixJQUFJLENBQUNHLFVBQUwsRUFBTjtBQUNBRCxJQUFBQSxHQUFHLEdBQUcsTUFBTVQsRUFBRSxDQUFDTyxJQUFELENBQWQ7QUFDQUEsSUFBQUEsSUFBSSxDQUFDSSxPQUFMO0FBQ0QsR0FKRCxDQUlFLE9BQU9DLEdBQVAsRUFBWTtBQUNaTCxJQUFBQSxJQUFJLENBQUNJLE9BQUw7QUFDQSxVQUFNRSxJQUFJLEdBQUcsTUFBTU4sSUFBSSxDQUFDRCxPQUFMLENBQWFGLEtBQWIsQ0FBbUIsTUFBTUUsT0FBekIsQ0FBbkI7QUFDQSxVQUFNTyxJQUFJLENBQUNDLE1BQUwsR0FBYyxJQUFJQyxtQkFBSixDQUFnQkMsU0FBaEIsRUFBMkJKLEdBQTNCLENBQWQsR0FBZ0RBLEdBQXREO0FBQ0Q7O0FBQ0QsU0FBT0gsR0FBUDtBQUNEOztBQUVNLFNBQVNELE9BQVQsQ0FBaUJGLE9BQWpCLEVBQXVDVyxNQUF2QyxFQUE4RDtBQUNuRSxRQUFNQyxPQUFPLEdBQUdELE1BQU0sR0FBR0EsTUFBTSxDQUFDQyxPQUFWLEdBQW9CLElBQUlDLG1CQUFKLENBQWVDLE9BQU8sQ0FBQ0MsR0FBdkIsQ0FBMUM7QUFDQSxRQUFNQyxHQUFHLEdBQUcsMkJBQU1KLE9BQU4sRUFBZVosT0FBZixDQUFaO0FBQ0EsUUFBTWlCLGFBQWEsR0FBRyw2QkFBVUwsT0FBVixFQUFtQkksR0FBbkIsQ0FBdEI7QUFDQSxRQUFNRSxHQUFHLEdBQUdKLE9BQU8sQ0FBQ0ksR0FBUixFQUFaO0FBRUEsUUFBTUMsT0FBTyxHQUFHMUIsSUFBSSxDQUFDLFlBQVk7QUFDL0IsVUFBTTJCLEtBQUssR0FBRyxNQUFNLHlCQUFhO0FBQy9CRixNQUFBQSxHQUQrQjtBQUUvQkcsTUFBQUEsU0FBUyxFQUFFckIsT0FBTyxDQUFDcUIsU0FBUixJQUFxQlgsU0FGRDtBQUcvQlksTUFBQUEsSUFBSSxFQUFFdEIsT0FBTyxDQUFDc0IsSUFBUixJQUFnQlo7QUFIUyxLQUFiLENBQXBCO0FBTUEsVUFBTWEsTUFBTSxHQUFHLE1BQU0sbUJBQUtILEtBQUwsQ0FBckI7QUFDQSxVQUFNSSxLQUFLLEdBQUcsMkJBQU1aLE9BQU4sRUFBZVosT0FBZixFQUF3QnVCLE1BQU0sQ0FBQ3ZCLE9BQS9CLENBQWQ7QUFDQSxpQ0FBVVksT0FBVixFQUFtQlksS0FBbkI7QUFFQSxXQUFPO0FBQUVKLE1BQUFBLEtBQUY7QUFBU0csTUFBQUEsTUFBVDtBQUFpQnZCLE1BQUFBLE9BQU8sRUFBRXdCO0FBQTFCLEtBQVA7QUFDRCxHQVptQixDQUFwQjtBQWNBLFFBQU1DLElBQUksR0FBR2hDLElBQUksQ0FBQyxNQUNoQjBCLE9BQU8sQ0FBQ3RCLElBQVIsQ0FBYzZCLElBQUQsSUFDWCx5QkFBYTtBQUFFUixJQUFBQSxHQUFHLEVBQUVRLElBQUksQ0FBQ04sS0FBTCxDQUFXQyxTQUFsQjtBQUE2QkksSUFBQUEsSUFBSSxFQUFFQyxJQUFJLENBQUMxQixPQUFMLENBQWF5QjtBQUFoRCxHQUFiLENBREYsQ0FEZSxDQUFqQjtBQU1BLFNBQU87QUFDTGIsSUFBQUEsT0FESztBQUVMYSxJQUFBQSxJQUZLO0FBR0xMLElBQUFBLEtBQUssRUFBRTNCLElBQUksQ0FBQyxNQUFNMEIsT0FBTyxDQUFDdEIsSUFBUixDQUFjNkIsSUFBRCxJQUFVQSxJQUFJLENBQUNOLEtBQTVCLENBQVAsQ0FITjtBQUlMRyxJQUFBQSxNQUFNLEVBQUU5QixJQUFJLENBQUMsTUFBTTBCLE9BQU8sQ0FBQ3RCLElBQVIsQ0FBYzZCLElBQUQsSUFBVUEsSUFBSSxDQUFDSCxNQUE1QixDQUFQLENBSlA7QUFLTHZCLElBQUFBLE9BQU8sRUFBRVAsSUFBSSxDQUFDLE1BQU0wQixPQUFPLENBQUN0QixJQUFSLENBQWM2QixJQUFELElBQVVBLElBQUksQ0FBQzFCLE9BQTVCLENBQVAsQ0FMUjtBQU1MMkIsSUFBQUEsUUFBUSxFQUFFbEMsSUFBSSxDQUFDLE1BQ2IwQixPQUFPLENBQUN0QixJQUFSLENBQWM2QixJQUFELElBQ1gsd0JBQ0U7QUFDRVIsTUFBQUEsR0FBRyxFQUFFUSxJQUFJLENBQUNOLEtBQUwsQ0FBV0MsU0FEbEI7QUFFRU8sTUFBQUEsR0FBRyxFQUFFRixJQUFJLENBQUNOLEtBQUwsQ0FBV1EsR0FBWCxHQUNEQyxjQUFLQyxLQUFMLENBQVdKLElBQUksQ0FBQ04sS0FBTCxDQUFXUSxHQUF0QixFQUEyQkcsR0FEMUIsR0FFREwsSUFBSSxDQUFDTixLQUFMLENBQVdDO0FBSmpCLEtBREYsRUFPRUssSUFBSSxDQUFDMUIsT0FBTCxDQUFhMkIsUUFQZixDQURGLENBRFksQ0FOVDtBQW1CTEssSUFBQUEsR0FBRyxFQUFFdkMsSUFBSSxDQUFDLE1BQ1J3QyxPQUFPLENBQUNDLEdBQVIsQ0FBWSxDQUFDZixPQUFELEVBQVVNLElBQVYsQ0FBWixFQUE2QjVCLElBQTdCLENBQWtDLENBQUMsQ0FBQzZCLElBQUQsRUFBT0QsSUFBUCxDQUFELEtBQ2hDQSxJQUFJLEdBQ0EscUJBQVlDLElBQUksQ0FBQ04sS0FBTCxDQUFXQyxTQUF2QixFQUFrQ0ksSUFBSSxDQUFDSixTQUF2QyxDQURBLEdBRUEscUJBQVlLLElBQUksQ0FBQ04sS0FBTCxDQUFXQyxTQUF2QixDQUhOLENBRE8sQ0FuQko7QUEwQkxjLElBQUFBLEtBQUssRUFBRTFDLElBQUksQ0FBQyxNQUNWMEIsT0FBTyxDQUFDdEIsSUFBUixDQUFjNkIsSUFBRCxJQUNYLHdCQUFZQSxJQUFJLENBQUNILE1BQUwsQ0FBWWEsR0FBWixJQUFtQjFCLFNBQS9CLEVBQTBDZ0IsSUFBSSxDQUFDSCxNQUFMLENBQVlLLEdBQVosSUFBbUJsQixTQUE3RCxDQURGLENBRFMsQ0ExQk47O0FBK0JMLFVBQU0yQixJQUFOLENBQVdSLElBQVgsRUFBeUM7QUFDdkMsWUFBTU4sTUFBTSxHQUFHLE1BQU0sS0FBS0EsTUFBMUI7QUFDQSxhQUFPLG9CQUFRTSxJQUFSLEVBQWNOLE1BQU0sQ0FBQ2EsR0FBUCxJQUFjMUIsU0FBNUIsRUFBdUNhLE1BQU0sQ0FBQ0ssR0FBUCxJQUFjbEIsU0FBckQsQ0FBUDtBQUNELEtBbENJOztBQW1DTCxVQUFNYyxLQUFOLENBQVljLEtBQWUsR0FBRyxFQUE5QixFQUFrRDtBQUNoRCxVQUFJLENBQUNBLEtBQUssQ0FBQ0MsTUFBWCxFQUFtQixPQUFPLElBQVA7QUFDbkIsWUFBTUMsSUFBSSxHQUFHRixLQUFLLENBQUMsQ0FBRCxDQUFsQjtBQUVBLFlBQU1sQixLQUFLLEdBQUcsTUFBTSxLQUFLQSxLQUF6QjtBQUNBLFlBQU1LLElBQUksR0FBRyxNQUFNLEtBQUtBLElBQXhCO0FBQ0EsWUFBTUUsUUFBUSxHQUFHLE1BQU0sS0FBS0EsUUFBNUI7QUFDQSxZQUFNSCxLQUFLLEdBQUcscUJBQVNnQixJQUFULEVBQWViLFFBQWYsRUFBeUI7QUFDckNjLFFBQUFBLElBQUksRUFBRXJCLEtBQUssQ0FBQ0MsU0FEeUI7QUFFckNJLFFBQUFBLElBQUksRUFBRUEsSUFBSSxHQUFHQSxJQUFJLENBQUNKLFNBQVIsR0FBb0JYO0FBRk8sT0FBekIsQ0FBZDs7QUFLQSxVQUFJYyxLQUFKLEVBQVc7QUFDVCxjQUFNdkIsSUFBSSxHQUFHLE1BQU1DLE9BQU8sbUJBQ25CRixPQURtQjtBQUNWc0IsVUFBQUEsSUFBSSxFQUFFLElBREk7QUFDRUQsVUFBQUEsU0FBUyxFQUFFRyxLQUFLLENBQUNIO0FBRG5CLFlBRXhCLElBRndCLENBQVAsQ0FHakJHLEtBSGlCLENBR1hjLEtBQUssQ0FBQ0ksS0FBTixDQUFZLENBQVosQ0FIVyxDQUFuQjtBQUlBLGNBQU16QyxJQUFJLENBQUNHLFVBQUwsRUFBTjtBQUNBLGVBQU9ILElBQVA7QUFDRDs7QUFFRCxVQUFJLENBQUN3QixJQUFMLEVBQVcsTUFBTWtCLEtBQUssQ0FBRSxvQkFBbUJILElBQUssRUFBMUIsQ0FBWDtBQUNYLGFBQU8sS0FBS2hCLEtBQUwsQ0FBVyxDQUFDLE1BQUQsRUFBU29CLE1BQVQsQ0FBZ0JOLEtBQWhCLENBQVgsQ0FBUDtBQUNELEtBMURJOztBQTJETCxVQUFNbEMsVUFBTixHQUFrQztBQUNoQyxXQUFLQyxPQUFMO0FBRUEsWUFBTTtBQUFFZSxRQUFBQSxLQUFGO0FBQVNwQixRQUFBQSxPQUFPLEVBQUVPO0FBQWxCLFVBQTJCLE1BQU1ZLE9BQXZDO0FBQ0EsWUFBTWEsR0FBRyxHQUFHLE1BQU0sS0FBS0EsR0FBdkI7O0FBQ0FhLHNCQUFPQyxLQUFQLENBQWMsaUNBQWdDMUIsS0FBSyxDQUFDQyxTQUFVLEVBQTlELEVBTGdDLENBT2hDOzs7QUFDQSxVQUFJckIsT0FBTyxDQUFDK0MsR0FBWixFQUFpQm5DLE9BQU8sQ0FBQ29DLEdBQVIsQ0FBWUMsc0JBQVosRUFBeUJqRCxPQUFPLENBQUMrQyxHQUFqQyxFQVJlLENBVWhDOztBQUNBLG1DQUFVbkMsT0FBVixFQUFtQkwsSUFBbkI7QUFDQU8sTUFBQUEsT0FBTyxDQUFDb0MsS0FBUixDQUFjOUIsS0FBSyxDQUFDQyxTQUFwQjtBQUNBLFVBQUlkLElBQUksQ0FBQ1EsR0FBVCxFQUFjSCxPQUFPLENBQUN1QyxNQUFSLENBQWU1QyxJQUFJLENBQUNRLEdBQXBCO0FBQ2QsVUFBSWlCLEdBQUcsQ0FBQ08sTUFBUixFQUFnQjNCLE9BQU8sQ0FBQ3dDLFFBQVIsQ0FBaUJwQixHQUFqQjtBQUNqQixLQTFFSTs7QUEyRUwzQixJQUFBQSxPQUFPLEdBQVM7QUFDZCxVQUFJTSxNQUFKLEVBQVksT0FBT0EsTUFBTSxDQUFDTixPQUFQLEVBQVA7QUFFWlksTUFBQUEsYUFBYTtBQUNiTCxNQUFBQSxPQUFPLENBQUNQLE9BQVI7QUFDQVMsTUFBQUEsT0FBTyxDQUFDb0MsS0FBUixDQUFjaEMsR0FBZDtBQUNELEtBakZJOztBQWtGTCxVQUFNbUMsS0FBTixHQUE2QjtBQUMzQkMsTUFBQUEsTUFBTSxDQUFDSCxNQUFQLENBQWMsSUFBZCxFQUFvQmpELE9BQU8sQ0FBQ0YsT0FBRCxFQUFVVyxNQUFWLENBQTNCO0FBQ0EsWUFBTSxLQUFLUCxVQUFMLEVBQU47QUFDRDs7QUFyRkksR0FBUDtBQXVGRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZ2V0U2VsZlBhdGhzLCBnZXRSb290UGF0aHMgfSBmcm9tICcuL3BhdGhzJztcbmltcG9ydCBsb2FkIGZyb20gJy4vbG9hZCc7XG5pbXBvcnQgeyBsYXp5IGFzIF9sYXp5IH0gZnJvbSAncHJvbWlzdCc7XG5pbXBvcnQgeyBJQ2xpT3B0aW9ucywgVENvcmVPcHRpb25zIH0gZnJvbSAnfi90eXBlcyc7XG5pbXBvcnQgRW52TWFuYWdlciBmcm9tICd+L3V0aWxzL2Vudi1tYW5hZ2VyJztcbmltcG9ydCBtZXJnZSwgeyBzZXRMb2dnZXIgfSBmcm9tICcuL21lcmdlLW9wdGlvbnMnO1xuaW1wb3J0IHsgZ2V0Q2hpbGRyZW4sIGdldFNjb3BlIH0gZnJvbSAnLi9zY29wZSc7XG5pbXBvcnQgeyBnZXRBbGxUYXNrcywgZ2V0VGFzayB9IGZyb20gJy4vdGFza3MnO1xuaW1wb3J0IHsgSVBhdGhzLCBJTG9hZGVkLCBJQ2hpbGQsIElUYXNrcywgSVRhc2sgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCBnZXRCaW5QYXRocyBmcm9tICd+L3V0aWxzL3BhdGhzJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnfi91dGlscy9sb2dnZXInO1xuaW1wb3J0IHsgU2lsZW50RXJyb3IgfSBmcm9tICd+L3V0aWxzL2Vycm9ycyc7XG5pbXBvcnQgeyBLUE9fTE9HX0VOViB9IGZyb20gJ34vY29uc3RhbnRzJztcblxuY29uc3QgbGF6eSA9IDxUPihmbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4gPT5cbiAgX2xhenkoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICBmbigpXG4gICAgICAudGhlbihyZXNvbHZlKVxuICAgICAgLmNhdGNoKHJlamVjdClcbiAgKTtcblxuZXhwb3J0IGludGVyZmFjZSBJQ29yZSB7XG4gIG1hbmFnZXI6IEVudk1hbmFnZXI7XG4gIHBhdGhzOiBQcm9taXNlPElQYXRocz47XG4gIGxvYWRlZDogUHJvbWlzZTxJTG9hZGVkPjtcbiAgb3B0aW9uczogUHJvbWlzZTxUQ29yZU9wdGlvbnM+O1xuICByb290OiBQcm9taXNlPElQYXRocyB8IG51bGw+O1xuICBjaGlsZHJlbjogUHJvbWlzZTxJQ2hpbGRbXT47XG4gIGJpbjogUHJvbWlzZTxzdHJpbmdbXT47XG4gIHRhc2tzOiBQcm9taXNlPElUYXNrcz47XG4gIHRhc2socGF0aDogc3RyaW5nKTogUHJvbWlzZTxJVGFzaz47XG4gIHNjb3BlKG5hbWVzPzogc3RyaW5nW10pOiBQcm9taXNlPElDb3JlPjtcbiAgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPHZvaWQ+O1xuICByZXN0b3JlKCk6IHZvaWQ7XG4gIHJlc2V0KCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGNvbnRhaW48VD4oXG4gIG9wdGlvbnM6IElDbGlPcHRpb25zID0ge30sXG4gIGZuOiAoY29yZTogSUNvcmUpID0+IFByb21pc2U8VD5cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBjb3JlID0gZ2V0Q29yZShvcHRpb25zKTtcbiAgbGV0IHJlczogVDtcbiAgdHJ5IHtcbiAgICBhd2FpdCBjb3JlLmluaXRpYWxpemUoKTtcbiAgICByZXMgPSBhd2FpdCBmbihjb3JlKTtcbiAgICBjb3JlLnJlc3RvcmUoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29yZS5yZXN0b3JlKCk7XG4gICAgY29uc3Qgb3B0cyA9IGF3YWl0IGNvcmUub3B0aW9ucy5jYXRjaCgoKSA9PiBvcHRpb25zKTtcbiAgICB0aHJvdyBvcHRzLnNpbGVudCA/IG5ldyBTaWxlbnRFcnJvcih1bmRlZmluZWQsIGVycikgOiBlcnI7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvcmUob3B0aW9uczogSUNsaU9wdGlvbnMsIHBhcmVudD86IElDb3JlKTogSUNvcmUge1xuICBjb25zdCBtYW5hZ2VyID0gcGFyZW50ID8gcGFyZW50Lm1hbmFnZXIgOiBuZXcgRW52TWFuYWdlcihwcm9jZXNzLmVudik7XG4gIGNvbnN0IGNsaSA9IG1lcmdlKG1hbmFnZXIsIG9wdGlvbnMpO1xuICBjb25zdCByZXN0b3JlTG9nZ2VyID0gc2V0TG9nZ2VyKG1hbmFnZXIsIGNsaSk7XG4gIGNvbnN0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgY29uc3QgcHJvbWlzZSA9IGxhenkoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHBhdGhzID0gYXdhaXQgZ2V0U2VsZlBhdGhzKHtcbiAgICAgIGN3ZCxcbiAgICAgIGRpcmVjdG9yeTogb3B0aW9ucy5kaXJlY3RvcnkgfHwgdW5kZWZpbmVkLFxuICAgICAgZmlsZTogb3B0aW9ucy5maWxlIHx8IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgY29uc3QgbG9hZGVkID0gYXdhaXQgbG9hZChwYXRocyk7XG4gICAgY29uc3Qgc2NvcGUgPSBtZXJnZShtYW5hZ2VyLCBvcHRpb25zLCBsb2FkZWQub3B0aW9ucyk7XG4gICAgc2V0TG9nZ2VyKG1hbmFnZXIsIHNjb3BlKTtcblxuICAgIHJldHVybiB7IHBhdGhzLCBsb2FkZWQsIG9wdGlvbnM6IHNjb3BlIH07XG4gIH0pO1xuXG4gIGNvbnN0IHJvb3QgPSBsYXp5KCgpID0+XG4gICAgcHJvbWlzZS50aGVuKChkYXRhKSA9PlxuICAgICAgZ2V0Um9vdFBhdGhzKHsgY3dkOiBkYXRhLnBhdGhzLmRpcmVjdG9yeSwgcm9vdDogZGF0YS5vcHRpb25zLnJvb3QgfSlcbiAgICApXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICBtYW5hZ2VyLFxuICAgIHJvb3QsXG4gICAgcGF0aHM6IGxhenkoKCkgPT4gcHJvbWlzZS50aGVuKChkYXRhKSA9PiBkYXRhLnBhdGhzKSksXG4gICAgbG9hZGVkOiBsYXp5KCgpID0+IHByb21pc2UudGhlbigoZGF0YSkgPT4gZGF0YS5sb2FkZWQpKSxcbiAgICBvcHRpb25zOiBsYXp5KCgpID0+IHByb21pc2UudGhlbigoZGF0YSkgPT4gZGF0YS5vcHRpb25zKSksXG4gICAgY2hpbGRyZW46IGxhenkoKCkgPT5cbiAgICAgIHByb21pc2UudGhlbigoZGF0YSkgPT5cbiAgICAgICAgZ2V0Q2hpbGRyZW4oXG4gICAgICAgICAge1xuICAgICAgICAgICAgY3dkOiBkYXRhLnBhdGhzLmRpcmVjdG9yeSxcbiAgICAgICAgICAgIHBrZzogZGF0YS5wYXRocy5wa2dcbiAgICAgICAgICAgICAgPyBwYXRoLnBhcnNlKGRhdGEucGF0aHMucGtnKS5kaXJcbiAgICAgICAgICAgICAgOiBkYXRhLnBhdGhzLmRpcmVjdG9yeVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGF0YS5vcHRpb25zLmNoaWxkcmVuXG4gICAgICAgIClcbiAgICAgIClcbiAgICApLFxuICAgIGJpbjogbGF6eSgoKSA9PlxuICAgICAgUHJvbWlzZS5hbGwoW3Byb21pc2UsIHJvb3RdKS50aGVuKChbZGF0YSwgcm9vdF0pID0+XG4gICAgICAgIHJvb3RcbiAgICAgICAgICA/IGdldEJpblBhdGhzKGRhdGEucGF0aHMuZGlyZWN0b3J5LCByb290LmRpcmVjdG9yeSlcbiAgICAgICAgICA6IGdldEJpblBhdGhzKGRhdGEucGF0aHMuZGlyZWN0b3J5KVxuICAgICAgKVxuICAgICksXG4gICAgdGFza3M6IGxhenkoKCkgPT5cbiAgICAgIHByb21pc2UudGhlbigoZGF0YSkgPT5cbiAgICAgICAgZ2V0QWxsVGFza3MoZGF0YS5sb2FkZWQua3BvIHx8IHVuZGVmaW5lZCwgZGF0YS5sb2FkZWQucGtnIHx8IHVuZGVmaW5lZClcbiAgICAgIClcbiAgICApLFxuICAgIGFzeW5jIHRhc2socGF0aDogc3RyaW5nKTogUHJvbWlzZTxJVGFzaz4ge1xuICAgICAgY29uc3QgbG9hZGVkID0gYXdhaXQgdGhpcy5sb2FkZWQ7XG4gICAgICByZXR1cm4gZ2V0VGFzayhwYXRoLCBsb2FkZWQua3BvIHx8IHVuZGVmaW5lZCwgbG9hZGVkLnBrZyB8fCB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgYXN5bmMgc2NvcGUobmFtZXM6IHN0cmluZ1tdID0gW10pOiBQcm9taXNlPElDb3JlPiB7XG4gICAgICBpZiAoIW5hbWVzLmxlbmd0aCkgcmV0dXJuIHRoaXM7XG4gICAgICBjb25zdCBuYW1lID0gbmFtZXNbMF07XG5cbiAgICAgIGNvbnN0IHBhdGhzID0gYXdhaXQgdGhpcy5wYXRocztcbiAgICAgIGNvbnN0IHJvb3QgPSBhd2FpdCB0aGlzLnJvb3Q7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGF3YWl0IHRoaXMuY2hpbGRyZW47XG4gICAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKG5hbWUsIGNoaWxkcmVuLCB7XG4gICAgICAgIHNlbGY6IHBhdGhzLmRpcmVjdG9yeSxcbiAgICAgICAgcm9vdDogcm9vdCA/IHJvb3QuZGlyZWN0b3J5IDogdW5kZWZpbmVkXG4gICAgICB9KTtcblxuICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgIGNvbnN0IGNvcmUgPSBhd2FpdCBnZXRDb3JlKFxuICAgICAgICAgIHsgLi4ub3B0aW9ucywgZmlsZTogbnVsbCwgZGlyZWN0b3J5OiBzY29wZS5kaXJlY3RvcnkgfSxcbiAgICAgICAgICB0aGlzXG4gICAgICAgICkuc2NvcGUobmFtZXMuc2xpY2UoMSkpO1xuICAgICAgICBhd2FpdCBjb3JlLmluaXRpYWxpemUoKTtcbiAgICAgICAgcmV0dXJuIGNvcmU7XG4gICAgICB9XG5cbiAgICAgIGlmICghcm9vdCkgdGhyb3cgRXJyb3IoYFNjb3BlIG5vdCBmb3VuZDogJHtuYW1lfWApO1xuICAgICAgcmV0dXJuIHRoaXMuc2NvcGUoWydyb290J10uY29uY2F0KG5hbWVzKSk7XG4gICAgfSxcbiAgICBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgdGhpcy5yZXN0b3JlKCk7XG5cbiAgICAgIGNvbnN0IHsgcGF0aHMsIG9wdGlvbnM6IG9wdHMgfSA9IGF3YWl0IHByb21pc2U7XG4gICAgICBjb25zdCBiaW4gPSBhd2FpdCB0aGlzLmJpbjtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgSW5pdGlhbGl6aW5nIHNjb3BlIHdpdGggcGF0aDogJHtwYXRocy5kaXJlY3Rvcnl9YCk7XG5cbiAgICAgIC8vIFVzZSBjbGkgb3B0aW9ucyB0byBzZXQgaGFyZCBsb2dnaW5nIGxldmVsXG4gICAgICBpZiAob3B0aW9ucy5sb2cpIG1hbmFnZXIuc2V0KEtQT19MT0dfRU5WLCBvcHRpb25zLmxvZyk7XG5cbiAgICAgIC8vIFNldCBlbnZpcm9ubWVudGFsc1xuICAgICAgc2V0TG9nZ2VyKG1hbmFnZXIsIG9wdHMpO1xuICAgICAgcHJvY2Vzcy5jaGRpcihwYXRocy5kaXJlY3RvcnkpO1xuICAgICAgaWYgKG9wdHMuZW52KSBtYW5hZ2VyLmFzc2lnbihvcHRzLmVudik7XG4gICAgICBpZiAoYmluLmxlbmd0aCkgbWFuYWdlci5hZGRQYXRocyhiaW4pO1xuICAgIH0sXG4gICAgcmVzdG9yZSgpOiB2b2lkIHtcbiAgICAgIGlmIChwYXJlbnQpIHJldHVybiBwYXJlbnQucmVzdG9yZSgpO1xuXG4gICAgICByZXN0b3JlTG9nZ2VyKCk7XG4gICAgICBtYW5hZ2VyLnJlc3RvcmUoKTtcbiAgICAgIHByb2Nlc3MuY2hkaXIoY3dkKTtcbiAgICB9LFxuICAgIGFzeW5jIHJlc2V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBnZXRDb3JlKG9wdGlvbnMsIHBhcmVudCkpO1xuICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgfVxuICB9O1xufVxuIl19
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL2luZGV4LnRzIl0sIm5hbWVzIjpbImNvbnRhaW4iLCJvcHRpb25zIiwiZm4iLCJtYW5hZ2VyIiwiU3RhdGVNYW5hZ2VyIiwiY29yZSIsImdldENvcmUiLCJyZXNwb25zZSIsInJlc3RvcmUiLCJlcnIiLCJzaWxlbnQiLCJTaWxlbnRFcnJvciIsInVuZGVmaW5lZCIsImNsaSIsImxvZyIsInNldExvZ2dlciIsInBhdGhzIiwiY3dkIiwicHJvY2VzcyIsImRpcmVjdG9yeSIsImZpbGUiLCJzZXRDd2QiLCJsb2FkZWQiLCJzY29wZSIsInJvb3QiLCJiaW4iLCJ0YXNrcyIsImtwbyIsInBrZyIsImNoaWxkcmVuIiwibGF6eSIsInBhdGgiLCJwYXJzZSIsImRpciIsInRhc2siLCJpbml0aWFsaXplIiwibG9nZ2VyIiwiZGVidWciLCJzZXQiLCJLUE9fTE9HX0VOViIsImVudiIsImFzc2lnbiIsImxlbmd0aCIsImFkZFBhdGhzIiwicmVzZXQiLCJPYmplY3QiLCJuYW1lcyIsIm5hbWUiLCJzZWxmIiwidGhlbiIsInNsaWNlIiwiRXJyb3IiLCJjb25jYXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBaUJlLGVBQWVBLE9BQWYsQ0FDYkMsT0FBb0IsR0FBRyxFQURWLEVBRWJDLEVBRmEsRUFHRDtBQUNaLFFBQU1DLE9BQU8sR0FBRyxJQUFJQyxxQkFBSixFQUFoQjs7QUFDQSxNQUFJO0FBQ0YsVUFBTUMsSUFBSSxHQUFHLE1BQU1DLE9BQU8sQ0FBQ0gsT0FBRCxFQUFVRixPQUFWLENBQTFCO0FBQ0FBLElBQUFBLE9BQU8sR0FBR0ksSUFBSSxDQUFDSixPQUFmO0FBRUEsVUFBTU0sUUFBUSxHQUFHLE1BQU1MLEVBQUUsQ0FBQ0csSUFBRCxDQUF6QjtBQUNBRixJQUFBQSxPQUFPLENBQUNLLE9BQVI7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ZixFQUF5QjtBQUNyQ21CLFFBQUFBLElBQUksRUFBRWhDLEtBQUssQ0FBQ0csU0FEeUI7QUFFckNLLFFBQUFBLElBQUksRUFBRUEsSUFBSSxHQUFHQSxJQUFJLENBQUNMLFNBQVIsR0FBb0JQO0FBRk8sT0FBekIsQ0FBZDs7QUFLQSxVQUFJVyxLQUFKLEVBQVc7QUFDVCxhQUFLZixPQUFMO0FBQ0EsY0FBTUgsSUFBSSxHQUFHLE1BQU1DLE9BQU8sQ0FBQ0gsT0FBRCxvQkFDckJGLE9BRHFCO0FBRXhCbUIsVUFBQUEsSUFBSSxFQUFFLElBRmtCO0FBR3hCRCxVQUFBQSxTQUFTLEVBQUVJLEtBQUssQ0FBQ0o7QUFITyxXQUFQLENBSWhCOEIsSUFKZ0IsQ0FJVjVDLElBQUQsSUFBVUEsSUFBSSxDQUFDa0IsS0FBTCxDQUFXdUIsS0FBSyxDQUFDSSxLQUFOLENBQVksQ0FBWixDQUFYLENBSkMsQ0FBbkI7QUFLQTdDLFFBQUFBLElBQUksQ0FBQzhCLFVBQUw7QUFDQSxlQUFPOUIsSUFBUDtBQUNEOztBQUVELFVBQUksQ0FBQ21CLElBQUwsRUFBVyxNQUFNMkIsS0FBSyxDQUFFLG9CQUFtQkosSUFBSyxFQUExQixDQUFYO0FBQ1gsYUFBTyxLQUFLeEIsS0FBTCxDQUFXLENBQUMsTUFBRCxFQUFTNkIsTUFBVCxDQUFnQk4sS0FBaEIsQ0FBWCxDQUFQO0FBQ0Q7O0FBbkVJLEdBQVA7QUFxRUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGdldFNlbGZQYXRocywgZ2V0Um9vdFBhdGhzIH0gZnJvbSAnLi9wYXRocyc7XG5pbXBvcnQgbG9hZCBmcm9tICcuL2xvYWQnO1xuaW1wb3J0IHsgbGF6eSB9IGZyb20gJ3Byb21pc3QnO1xuaW1wb3J0IHsgSUNsaU9wdGlvbnMsIFRDb3JlT3B0aW9ucyB9IGZyb20gJ34vdHlwZXMnO1xuaW1wb3J0IG1lcmdlIGZyb20gJy4vbWVyZ2Utb3B0aW9ucyc7XG5pbXBvcnQgeyBnZXRDaGlsZHJlbiwgZ2V0U2NvcGUgfSBmcm9tICcuL3Njb3BlJztcbmltcG9ydCB7IGdldEFsbFRhc2tzLCBnZXRUYXNrIH0gZnJvbSAnLi90YXNrcyc7XG5pbXBvcnQgeyBJUGF0aHMsIElMb2FkZWQsIElDaGlsZCwgSVRhc2tzLCBJVGFzayB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IGdldEJpblBhdGhzIGZyb20gJ34vdXRpbHMvcGF0aHMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICd+L3V0aWxzL2xvZ2dlcic7XG5pbXBvcnQgeyBTaWxlbnRFcnJvciB9IGZyb20gJ34vdXRpbHMvZXJyb3JzJztcbmltcG9ydCB7IEtQT19MT0dfRU5WIH0gZnJvbSAnfi9jb25zdGFudHMnO1xuaW1wb3J0IFN0YXRlTWFuYWdlciBmcm9tICcuL1N0YXRlTWFuYWdlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmUge1xuICBwYXRoczogSVBhdGhzO1xuICBsb2FkZWQ6IElMb2FkZWQ7XG4gIG9wdGlvbnM6IFRDb3JlT3B0aW9ucztcbiAgdGFza3M6IElUYXNrcztcbiAgYmluOiBzdHJpbmdbXTtcbiAgcm9vdDogSVBhdGhzIHwgbnVsbDtcbiAgY2hpbGRyZW46IFByb21pc2U8SUNoaWxkW10+O1xuICB0YXNrKHBhdGg6IHN0cmluZyk6IElUYXNrO1xuICBpbml0aWFsaXplKCk6IHZvaWQ7XG4gIHJlc3RvcmUoKTogdm9pZDtcbiAgcmVzZXQoKTogUHJvbWlzZTx2b2lkPjtcbiAgc2NvcGUobmFtZXM/OiBzdHJpbmdbXSk6IFByb21pc2U8SUNvcmU+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBjb250YWluPFQ+KFxuICBvcHRpb25zOiBJQ2xpT3B0aW9ucyA9IHt9LFxuICBmbjogKGNvcmU6IElDb3JlKSA9PiBQcm9taXNlPFQ+XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgbWFuYWdlciA9IG5ldyBTdGF0ZU1hbmFnZXIoKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb3JlID0gYXdhaXQgZ2V0Q29yZShtYW5hZ2VyLCBvcHRpb25zKTtcbiAgICBvcHRpb25zID0gY29yZS5vcHRpb25zO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmbihjb3JlKTtcbiAgICBtYW5hZ2VyLnJlc3RvcmUoKTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIG1hbmFnZXIucmVzdG9yZSgpO1xuICAgIHRocm93IG9wdGlvbnMuc2lsZW50ID8gbmV3IFNpbGVudEVycm9yKHVuZGVmaW5lZCwgZXJyKSA6IGVycjtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q29yZShcbiAgbWFuYWdlcjogU3RhdGVNYW5hZ2VyLFxuICBvcHRpb25zOiBJQ2xpT3B0aW9uc1xuKTogUHJvbWlzZTxJQ29yZT4ge1xuICBjb25zdCBjbGkgPSBtZXJnZShtYW5hZ2VyLCBvcHRpb25zKTtcbiAgaWYgKGNsaS5sb2cpIG1hbmFnZXIuc2V0TG9nZ2VyKGNsaS5sb2cpO1xuXG4gIGNvbnN0IHBhdGhzID0gYXdhaXQgZ2V0U2VsZlBhdGhzKHtcbiAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgZGlyZWN0b3J5OiBvcHRpb25zLmRpcmVjdG9yeSB8fCB1bmRlZmluZWQsXG4gICAgZmlsZTogb3B0aW9ucy5maWxlIHx8IHVuZGVmaW5lZFxuICB9KTtcblxuICAvLyBMb2FkIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBkaXJlY3RvcnkgYXMgY3dkIChmb3IganMgZmlsZXMpXG4gIG1hbmFnZXIuc2V0Q3dkKHBhdGhzLmRpcmVjdG9yeSk7XG4gIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGxvYWQocGF0aHMpO1xuICBjb25zdCBzY29wZSA9IHtcbiAgICAuLi5tZXJnZShtYW5hZ2VyLCBvcHRpb25zLCBsb2FkZWQub3B0aW9ucyksXG4gICAgY3dkOiBsb2FkZWQub3B0aW9ucy5jd2QgfHwgcGF0aHMuZGlyZWN0b3J5XG4gIH07XG4gIG1hbmFnZXIuc2V0Q3dkKHNjb3BlLmN3ZCk7XG5cbiAgY29uc3Qgcm9vdCA9IGF3YWl0IGdldFJvb3RQYXRocyh7IGN3ZDogc2NvcGUuY3dkLCByb290OiBzY29wZS5yb290IH0pO1xuICBjb25zdCBiaW4gPSByb290XG4gICAgPyBhd2FpdCBnZXRCaW5QYXRocyhzY29wZS5jd2QsIHJvb3QuZGlyZWN0b3J5KVxuICAgIDogYXdhaXQgZ2V0QmluUGF0aHMoc2NvcGUuY3dkKTtcbiAgY29uc3QgdGFza3MgPSBnZXRBbGxUYXNrcyhsb2FkZWQua3BvIHx8IHVuZGVmaW5lZCwgbG9hZGVkLnBrZyB8fCB1bmRlZmluZWQpO1xuXG4gIHJldHVybiB7XG4gICAgcGF0aHMsXG4gICAgbG9hZGVkLFxuICAgIG9wdGlvbnM6IHNjb3BlLFxuICAgIHRhc2tzLFxuICAgIGJpbixcbiAgICByb290LFxuICAgIGNoaWxkcmVuOiBsYXp5LmZuKCgpID0+IHtcbiAgICAgIHJldHVybiBnZXRDaGlsZHJlbihcbiAgICAgICAge1xuICAgICAgICAgIGN3ZDogc2NvcGUuY3dkLFxuICAgICAgICAgIHBrZzogcGF0aHMucGtnID8gcGF0aC5wYXJzZShwYXRocy5wa2cpLmRpciA6IHNjb3BlLmN3ZFxuICAgICAgICB9LFxuICAgICAgICBzY29wZS5jaGlsZHJlblxuICAgICAgKTtcbiAgICB9KSxcbiAgICB0YXNrKHBhdGg6IHN0cmluZyk6IElUYXNrIHtcbiAgICAgIHJldHVybiBnZXRUYXNrKHBhdGgsIGxvYWRlZC5rcG8gfHwgdW5kZWZpbmVkLCBsb2FkZWQucGtnIHx8IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgdGhpcy5yZXN0b3JlKCk7XG5cbiAgICAgIGxvZ2dlci5kZWJ1ZyhgSW5pdGlhbGl6aW5nIHNjb3BlIHdpdGggcGF0aDogJHtwYXRocy5kaXJlY3Rvcnl9YCk7XG5cbiAgICAgIC8vIFVzZSBjbGkgb3B0aW9ucyB0byBzZXQgaGFyZCBsb2dnaW5nIGxldmVsXG4gICAgICBpZiAoc2NvcGUubG9nKSB7XG4gICAgICAgIG1hbmFnZXIuc2V0TG9nZ2VyKHNjb3BlLmxvZyk7XG4gICAgICAgIG1hbmFnZXIuc2V0KEtQT19MT0dfRU5WLCBzY29wZS5sb2cpO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgY3dkXG4gICAgICBtYW5hZ2VyLnNldEN3ZChzY29wZS5jd2QgfHwgcGF0aHMuZGlyZWN0b3J5KTtcblxuICAgICAgLy8gU2V0IGVudmlyb25tZW50YWxzXG4gICAgICBpZiAoc2NvcGUuZW52KSBtYW5hZ2VyLmFzc2lnbihzY29wZS5lbnYpO1xuICAgICAgaWYgKGJpbi5sZW5ndGgpIG1hbmFnZXIuYWRkUGF0aHMoYmluKTtcbiAgICB9LFxuICAgIHJlc3RvcmUoKTogdm9pZCB7XG4gICAgICByZXR1cm4gbWFuYWdlci5yZXN0b3JlKCk7XG4gICAgfSxcbiAgICBhc3luYyByZXNldCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgYXdhaXQgZ2V0Q29yZShtYW5hZ2VyLCBvcHRpb25zKSk7XG4gICAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgICB9LFxuICAgIGFzeW5jIHNjb3BlKG5hbWVzOiBzdHJpbmdbXSA9IFtdKTogUHJvbWlzZTxJQ29yZT4ge1xuICAgICAgaWYgKCFuYW1lcy5sZW5ndGgpIHJldHVybiB0aGlzO1xuICAgICAgY29uc3QgbmFtZSA9IG5hbWVzWzBdO1xuXG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGF3YWl0IHRoaXMuY2hpbGRyZW47XG4gICAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKG5hbWUsIGNoaWxkcmVuLCB7XG4gICAgICAgIHNlbGY6IHBhdGhzLmRpcmVjdG9yeSxcbiAgICAgICAgcm9vdDogcm9vdCA/IHJvb3QuZGlyZWN0b3J5IDogdW5kZWZpbmVkXG4gICAgICB9KTtcblxuICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgIHRoaXMucmVzdG9yZSgpO1xuICAgICAgICBjb25zdCBjb3JlID0gYXdhaXQgZ2V0Q29yZShtYW5hZ2VyLCB7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICBmaWxlOiBudWxsLFxuICAgICAgICAgIGRpcmVjdG9yeTogc2NvcGUuZGlyZWN0b3J5XG4gICAgICAgIH0pLnRoZW4oKGNvcmUpID0+IGNvcmUuc2NvcGUobmFtZXMuc2xpY2UoMSkpKTtcbiAgICAgICAgY29yZS5pbml0aWFsaXplKCk7XG4gICAgICAgIHJldHVybiBjb3JlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJvb3QpIHRocm93IEVycm9yKGBTY29wZSBub3QgZm91bmQ6ICR7bmFtZX1gKTtcbiAgICAgIHJldHVybiB0aGlzLnNjb3BlKFsncm9vdCddLmNvbmNhdChuYW1lcykpO1xuICAgIH1cbiAgfSBhcyBJQ29yZTtcbn1cbiJdfQ==
\ No newline at end of file