"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _commander = require("commander"); var _path = _interopRequireDefault(require("path")); var _Deprecator = _interopRequireDefault(require("../../Deprecator/Deprecator")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } /* eslint-disable no-console */ let _definitions; let _reverseDefinitions; let _defaults; _commander.Command.prototype.loadDefinitions = function (definitions) { _definitions = definitions; Object.keys(definitions).reduce((program, opt) => { if (typeof definitions[opt] == 'object') { const additionalOptions = definitions[opt]; if (additionalOptions.required === true) { return program.option(`--${opt} <${opt}>`, additionalOptions.help, additionalOptions.action); } else { return program.option(`--${opt} [${opt}]`, additionalOptions.help, additionalOptions.action); } } return program.option(`--${opt} [${opt}]`); }, this); _reverseDefinitions = Object.keys(definitions).reduce((object, key) => { let value = definitions[key]; if (typeof value == 'object') { value = value.env; } if (value) { object[value] = key; } return object; }, {}); _defaults = Object.keys(definitions).reduce((defs, opt) => { if (_definitions[opt].default !== undefined) { defs[opt] = _definitions[opt].default; } return defs; }, {}); /* istanbul ignore next */ this.on('--help', function () { console.log(' Configure From Environment:'); console.log(''); Object.keys(_reverseDefinitions).forEach(key => { console.log(` $ ${key}='${_reverseDefinitions[key]}'`); }); console.log(''); }); }; function parseEnvironment(env = {}) { return Object.keys(_reverseDefinitions).reduce((options, key) => { if (env[key]) { const originalKey = _reverseDefinitions[key]; let action = option => option; if (typeof _definitions[originalKey] === 'object') { action = _definitions[originalKey].action || action; } options[_reverseDefinitions[key]] = action(env[key]); } return options; }, {}); } function parseConfigFile(program) { let options = {}; if (program.args.length > 0) { let jsonPath = program.args[0]; jsonPath = _path.default.resolve(jsonPath); const jsonConfig = require(jsonPath); if (jsonConfig.apps) { if (jsonConfig.apps.length > 1) { throw 'Multiple apps are not supported'; } options = jsonConfig.apps[0]; } else { options = jsonConfig; } Object.keys(options).forEach(key => { const value = options[key]; if (!_definitions[key]) { throw `error: unknown option ${key}`; } const action = _definitions[key].action; if (action) { options[key] = action(value); } }); console.log(`Configuration loaded from ${jsonPath}`); } return options; } _commander.Command.prototype.setValuesIfNeeded = function (options) { Object.keys(options).forEach(key => { if (!Object.prototype.hasOwnProperty.call(this, key)) { this[key] = options[key]; } }); }; _commander.Command.prototype._parse = _commander.Command.prototype.parse; _commander.Command.prototype.parse = function (args, env) { this._parse(args); // Parse the environment first const envOptions = parseEnvironment(env); const fromFile = parseConfigFile(this); // Load the env if not passed from command line this.setValuesIfNeeded(envOptions); // Load from file to override this.setValuesIfNeeded(fromFile); // Scan for deprecated Parse Server options _Deprecator.default.scanParseServerOptions(this); // Last set the defaults this.setValuesIfNeeded(_defaults); }; _commander.Command.prototype.getOptions = function () { return Object.keys(_definitions).reduce((options, key) => { if (typeof this[key] !== 'undefined') { options[key] = this[key]; } return options; }, {}); }; var _default = exports.default = new _commander.Command().storeOptionsAsProperties(); /* eslint-enable no-console */ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29tbWFuZGVyIiwicmVxdWlyZSIsIl9wYXRoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9EZXByZWNhdG9yIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiX2RlZmluaXRpb25zIiwiX3JldmVyc2VEZWZpbml0aW9ucyIsIl9kZWZhdWx0cyIsIkNvbW1hbmQiLCJwcm90b3R5cGUiLCJsb2FkRGVmaW5pdGlvbnMiLCJkZWZpbml0aW9ucyIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJwcm9ncmFtIiwib3B0IiwiYWRkaXRpb25hbE9wdGlvbnMiLCJyZXF1aXJlZCIsIm9wdGlvbiIsImhlbHAiLCJhY3Rpb24iLCJvYmplY3QiLCJrZXkiLCJ2YWx1ZSIsImVudiIsImRlZnMiLCJ1bmRlZmluZWQiLCJvbiIsImNvbnNvbGUiLCJsb2ciLCJmb3JFYWNoIiwicGFyc2VFbnZpcm9ubWVudCIsIm9wdGlvbnMiLCJvcmlnaW5hbEtleSIsInBhcnNlQ29uZmlnRmlsZSIsImFyZ3MiLCJsZW5ndGgiLCJqc29uUGF0aCIsInBhdGgiLCJyZXNvbHZlIiwianNvbkNvbmZpZyIsImFwcHMiLCJzZXRWYWx1ZXNJZk5lZWRlZCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIl9wYXJzZSIsInBhcnNlIiwiZW52T3B0aW9ucyIsImZyb21GaWxlIiwiRGVwcmVjYXRvciIsInNjYW5QYXJzZVNlcnZlck9wdGlvbnMiLCJnZXRPcHRpb25zIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwic3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS91dGlscy9jb21tYW5kZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBEZXByZWNhdG9yIGZyb20gJy4uLy4uL0RlcHJlY2F0b3IvRGVwcmVjYXRvcic7XG5cbmxldCBfZGVmaW5pdGlvbnM7XG5sZXQgX3JldmVyc2VEZWZpbml0aW9ucztcbmxldCBfZGVmYXVsdHM7XG5cbkNvbW1hbmQucHJvdG90eXBlLmxvYWREZWZpbml0aW9ucyA9IGZ1bmN0aW9uIChkZWZpbml0aW9ucykge1xuICBfZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucztcblxuICBPYmplY3Qua2V5cyhkZWZpbml0aW9ucykucmVkdWNlKChwcm9ncmFtLCBvcHQpID0+IHtcbiAgICBpZiAodHlwZW9mIGRlZmluaXRpb25zW29wdF0gPT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxPcHRpb25zID0gZGVmaW5pdGlvbnNbb3B0XTtcbiAgICAgIGlmIChhZGRpdGlvbmFsT3B0aW9ucy5yZXF1aXJlZCA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gcHJvZ3JhbS5vcHRpb24oXG4gICAgICAgICAgYC0tJHtvcHR9IDwke29wdH0+YCxcbiAgICAgICAgICBhZGRpdGlvbmFsT3B0aW9ucy5oZWxwLFxuICAgICAgICAgIGFkZGl0aW9uYWxPcHRpb25zLmFjdGlvblxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHByb2dyYW0ub3B0aW9uKFxuICAgICAgICAgIGAtLSR7b3B0fSBbJHtvcHR9XWAsXG4gICAgICAgICAgYWRkaXRpb25hbE9wdGlvbnMuaGVscCxcbiAgICAgICAgICBhZGRpdGlvbmFsT3B0aW9ucy5hY3Rpb25cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb2dyYW0ub3B0aW9uKGAtLSR7b3B0fSBbJHtvcHR9XWApO1xuICB9LCB0aGlzKTtcblxuICBfcmV2ZXJzZURlZmluaXRpb25zID0gT2JqZWN0LmtleXMoZGVmaW5pdGlvbnMpLnJlZHVjZSgob2JqZWN0LCBrZXkpID0+IHtcbiAgICBsZXQgdmFsdWUgPSBkZWZpbml0aW9uc1trZXldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUuZW52O1xuICAgIH1cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIG9iamVjdFt2YWx1ZV0gPSBrZXk7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH0sIHt9KTtcblxuICBfZGVmYXVsdHMgPSBPYmplY3Qua2V5cyhkZWZpbml0aW9ucykucmVkdWNlKChkZWZzLCBvcHQpID0+IHtcbiAgICBpZiAoX2RlZmluaXRpb25zW29wdF0uZGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWZzW29wdF0gPSBfZGVmaW5pdGlvbnNbb3B0XS5kZWZhdWx0O1xuICAgIH1cbiAgICByZXR1cm4gZGVmcztcbiAgfSwge30pO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHRoaXMub24oJy0taGVscCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zb2xlLmxvZygnICBDb25maWd1cmUgRnJvbSBFbnZpcm9ubWVudDonKTtcbiAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgT2JqZWN0LmtleXMoX3JldmVyc2VEZWZpbml0aW9ucykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc29sZS5sb2coYCAgICAkICR7a2V5fT0nJHtfcmV2ZXJzZURlZmluaXRpb25zW2tleV19J2ApO1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBwYXJzZUVudmlyb25tZW50KGVudiA9IHt9KSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhfcmV2ZXJzZURlZmluaXRpb25zKS5yZWR1Y2UoKG9wdGlvbnMsIGtleSkgPT4ge1xuICAgIGlmIChlbnZba2V5XSkge1xuICAgICAgY29uc3Qgb3JpZ2luYWxLZXkgPSBfcmV2ZXJzZURlZmluaXRpb25zW2tleV07XG4gICAgICBsZXQgYWN0aW9uID0gb3B0aW9uID0+IG9wdGlvbjtcbiAgICAgIGlmICh0eXBlb2YgX2RlZmluaXRpb25zW29yaWdpbmFsS2V5XSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgYWN0aW9uID0gX2RlZmluaXRpb25zW29yaWdpbmFsS2V5XS5hY3Rpb24gfHwgYWN0aW9uO1xuICAgICAgfVxuICAgICAgb3B0aW9uc1tfcmV2ZXJzZURlZmluaXRpb25zW2tleV1dID0gYWN0aW9uKGVudltrZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH0sIHt9KTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDb25maWdGaWxlKHByb2dyYW0pIHtcbiAgbGV0IG9wdGlvbnMgPSB7fTtcbiAgaWYgKHByb2dyYW0uYXJncy5sZW5ndGggPiAwKSB7XG4gICAgbGV0IGpzb25QYXRoID0gcHJvZ3JhbS5hcmdzWzBdO1xuICAgIGpzb25QYXRoID0gcGF0aC5yZXNvbHZlKGpzb25QYXRoKTtcbiAgICBjb25zdCBqc29uQ29uZmlnID0gcmVxdWlyZShqc29uUGF0aCk7XG4gICAgaWYgKGpzb25Db25maWcuYXBwcykge1xuICAgICAgaWYgKGpzb25Db25maWcuYXBwcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRocm93ICdNdWx0aXBsZSBhcHBzIGFyZSBub3Qgc3VwcG9ydGVkJztcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMgPSBqc29uQ29uZmlnLmFwcHNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMgPSBqc29uQ29uZmlnO1xuICAgIH1cbiAgICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnNba2V5XTtcbiAgICAgIGlmICghX2RlZmluaXRpb25zW2tleV0pIHtcbiAgICAgICAgdGhyb3cgYGVycm9yOiB1bmtub3duIG9wdGlvbiAke2tleX1gO1xuICAgICAgfVxuICAgICAgY29uc3QgYWN0aW9uID0gX2RlZmluaXRpb25zW2tleV0uYWN0aW9uO1xuICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICBvcHRpb25zW2tleV0gPSBhY3Rpb24odmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKGBDb25maWd1cmF0aW9uIGxvYWRlZCBmcm9tICR7anNvblBhdGh9YCk7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbkNvbW1hbmQucHJvdG90eXBlLnNldFZhbHVlc0lmTmVlZGVkID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaChrZXkgPT4ge1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMsIGtleSkpIHtcbiAgICAgIHRoaXNba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICB9XG4gIH0pO1xufTtcblxuQ29tbWFuZC5wcm90b3R5cGUuX3BhcnNlID0gQ29tbWFuZC5wcm90b3R5cGUucGFyc2U7XG5cbkNvbW1hbmQucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gKGFyZ3MsIGVudikge1xuICB0aGlzLl9wYXJzZShhcmdzKTtcbiAgLy8gUGFyc2UgdGhlIGVudmlyb25tZW50IGZpcnN0XG4gIGNvbnN0IGVudk9wdGlvbnMgPSBwYXJzZUVudmlyb25tZW50KGVudik7XG4gIGNvbnN0IGZyb21GaWxlID0gcGFyc2VDb25maWdGaWxlKHRoaXMpO1xuICAvLyBMb2FkIHRoZSBlbnYgaWYgbm90IHBhc3NlZCBmcm9tIGNvbW1hbmQgbGluZVxuICB0aGlzLnNldFZhbHVlc0lmTmVlZGVkKGVudk9wdGlvbnMpO1xuICAvLyBMb2FkIGZyb20gZmlsZSB0byBvdmVycmlkZVxuICB0aGlzLnNldFZhbHVlc0lmTmVlZGVkKGZyb21GaWxlKTtcbiAgLy8gU2NhbiBmb3IgZGVwcmVjYXRlZCBQYXJzZSBTZXJ2ZXIgb3B0aW9uc1xuICBEZXByZWNhdG9yLnNjYW5QYXJzZVNlcnZlck9wdGlvbnModGhpcyk7XG4gIC8vIExhc3Qgc2V0IHRoZSBkZWZhdWx0c1xuICB0aGlzLnNldFZhbHVlc0lmTmVlZGVkKF9kZWZhdWx0cyk7XG59O1xuXG5Db21tYW5kLnByb3RvdHlwZS5nZXRPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmtleXMoX2RlZmluaXRpb25zKS5yZWR1Y2UoKG9wdGlvbnMsIGtleSkgPT4ge1xuICAgIGlmICh0eXBlb2YgdGhpc1trZXldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgb3B0aW9uc1trZXldID0gdGhpc1trZXldO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfSwge30pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbmV3IENvbW1hbmQoKS5zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMoKTtcbi8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxXQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFBcUQsU0FBQUUsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFIckQ7O0FBS0EsSUFBSUcsWUFBWTtBQUNoQixJQUFJQyxtQkFBbUI7QUFDdkIsSUFBSUMsU0FBUztBQUViQyxrQkFBTyxDQUFDQyxTQUFTLENBQUNDLGVBQWUsR0FBRyxVQUFVQyxXQUFXLEVBQUU7RUFDekROLFlBQVksR0FBR00sV0FBVztFQUUxQkMsTUFBTSxDQUFDQyxJQUFJLENBQUNGLFdBQVcsQ0FBQyxDQUFDRyxNQUFNLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxHQUFHLEtBQUs7SUFDaEQsSUFBSSxPQUFPTCxXQUFXLENBQUNLLEdBQUcsQ0FBQyxJQUFJLFFBQVEsRUFBRTtNQUN2QyxNQUFNQyxpQkFBaUIsR0FBR04sV0FBVyxDQUFDSyxHQUFHLENBQUM7TUFDMUMsSUFBSUMsaUJBQWlCLENBQUNDLFFBQVEsS0FBSyxJQUFJLEVBQUU7UUFDdkMsT0FBT0gsT0FBTyxDQUFDSSxNQUFNLENBQ25CLEtBQUtILEdBQUcsS0FBS0EsR0FBRyxHQUFHLEVBQ25CQyxpQkFBaUIsQ0FBQ0csSUFBSSxFQUN0QkgsaUJBQWlCLENBQUNJLE1BQ3BCLENBQUM7TUFDSCxDQUFDLE1BQU07UUFDTCxPQUFPTixPQUFPLENBQUNJLE1BQU0sQ0FDbkIsS0FBS0gsR0FBRyxLQUFLQSxHQUFHLEdBQUcsRUFDbkJDLGlCQUFpQixDQUFDRyxJQUFJLEVBQ3RCSCxpQkFBaUIsQ0FBQ0ksTUFDcEIsQ0FBQztNQUNIO0lBQ0Y7SUFDQSxPQUFPTixPQUFPLENBQUNJLE1BQU0sQ0FBQyxLQUFLSCxHQUFHLEtBQUtBLEdBQUcsR0FBRyxDQUFDO0VBQzVDLENBQUMsRUFBRSxJQUFJLENBQUM7RUFFUlYsbUJBQW1CLEdBQUdNLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDRixXQUFXLENBQUMsQ0FBQ0csTUFBTSxDQUFDLENBQUNRLE1BQU0sRUFBRUMsR0FBRyxLQUFLO0lBQ3JFLElBQUlDLEtBQUssR0FBR2IsV0FBVyxDQUFDWSxHQUFHLENBQUM7SUFDNUIsSUFBSSxPQUFPQyxLQUFLLElBQUksUUFBUSxFQUFFO01BQzVCQSxLQUFLLEdBQUdBLEtBQUssQ0FBQ0MsR0FBRztJQUNuQjtJQUNBLElBQUlELEtBQUssRUFBRTtNQUNURixNQUFNLENBQUNFLEtBQUssQ0FBQyxHQUFHRCxHQUFHO0lBQ3JCO0lBQ0EsT0FBT0QsTUFBTTtFQUNmLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUVOZixTQUFTLEdBQUdLLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDRixXQUFXLENBQUMsQ0FBQ0csTUFBTSxDQUFDLENBQUNZLElBQUksRUFBRVYsR0FBRyxLQUFLO0lBQ3pELElBQUlYLFlBQVksQ0FBQ1csR0FBRyxDQUFDLENBQUNaLE9BQU8sS0FBS3VCLFNBQVMsRUFBRTtNQUMzQ0QsSUFBSSxDQUFDVixHQUFHLENBQUMsR0FBR1gsWUFBWSxDQUFDVyxHQUFHLENBQUMsQ0FBQ1osT0FBTztJQUN2QztJQUNBLE9BQU9zQixJQUFJO0VBQ2IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOztFQUVOO0VBQ0EsSUFBSSxDQUFDRSxFQUFFLENBQUMsUUFBUSxFQUFFLFlBQVk7SUFDNUJDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLCtCQUErQixDQUFDO0lBQzVDRCxPQUFPLENBQUNDLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDZmxCLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDUCxtQkFBbUIsQ0FBQyxDQUFDeUIsT0FBTyxDQUFDUixHQUFHLElBQUk7TUFDOUNNLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLFNBQVNQLEdBQUcsS0FBS2pCLG1CQUFtQixDQUFDaUIsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUMzRCxDQUFDLENBQUM7SUFDRk0sT0FBTyxDQUFDQyxHQUFHLENBQUMsRUFBRSxDQUFDO0VBQ2pCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTRSxnQkFBZ0JBLENBQUNQLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRTtFQUNsQyxPQUFPYixNQUFNLENBQUNDLElBQUksQ0FBQ1AsbUJBQW1CLENBQUMsQ0FBQ1EsTUFBTSxDQUFDLENBQUNtQixPQUFPLEVBQUVWLEdBQUcsS0FBSztJQUMvRCxJQUFJRSxHQUFHLENBQUNGLEdBQUcsQ0FBQyxFQUFFO01BQ1osTUFBTVcsV0FBVyxHQUFHNUIsbUJBQW1CLENBQUNpQixHQUFHLENBQUM7TUFDNUMsSUFBSUYsTUFBTSxHQUFHRixNQUFNLElBQUlBLE1BQU07TUFDN0IsSUFBSSxPQUFPZCxZQUFZLENBQUM2QixXQUFXLENBQUMsS0FBSyxRQUFRLEVBQUU7UUFDakRiLE1BQU0sR0FBR2hCLFlBQVksQ0FBQzZCLFdBQVcsQ0FBQyxDQUFDYixNQUFNLElBQUlBLE1BQU07TUFDckQ7TUFDQVksT0FBTyxDQUFDM0IsbUJBQW1CLENBQUNpQixHQUFHLENBQUMsQ0FBQyxHQUFHRixNQUFNLENBQUNJLEdBQUcsQ0FBQ0YsR0FBRyxDQUFDLENBQUM7SUFDdEQ7SUFDQSxPQUFPVSxPQUFPO0VBQ2hCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNSO0FBRUEsU0FBU0UsZUFBZUEsQ0FBQ3BCLE9BQU8sRUFBRTtFQUNoQyxJQUFJa0IsT0FBTyxHQUFHLENBQUMsQ0FBQztFQUNoQixJQUFJbEIsT0FBTyxDQUFDcUIsSUFBSSxDQUFDQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0lBQzNCLElBQUlDLFFBQVEsR0FBR3ZCLE9BQU8sQ0FBQ3FCLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUJFLFFBQVEsR0FBR0MsYUFBSSxDQUFDQyxPQUFPLENBQUNGLFFBQVEsQ0FBQztJQUNqQyxNQUFNRyxVQUFVLEdBQUczQyxPQUFPLENBQUN3QyxRQUFRLENBQUM7SUFDcEMsSUFBSUcsVUFBVSxDQUFDQyxJQUFJLEVBQUU7TUFDbkIsSUFBSUQsVUFBVSxDQUFDQyxJQUFJLENBQUNMLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDOUIsTUFBTSxpQ0FBaUM7TUFDekM7TUFDQUosT0FBTyxHQUFHUSxVQUFVLENBQUNDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUIsQ0FBQyxNQUFNO01BQ0xULE9BQU8sR0FBR1EsVUFBVTtJQUN0QjtJQUNBN0IsTUFBTSxDQUFDQyxJQUFJLENBQUNvQixPQUFPLENBQUMsQ0FBQ0YsT0FBTyxDQUFDUixHQUFHLElBQUk7TUFDbEMsTUFBTUMsS0FBSyxHQUFHUyxPQUFPLENBQUNWLEdBQUcsQ0FBQztNQUMxQixJQUFJLENBQUNsQixZQUFZLENBQUNrQixHQUFHLENBQUMsRUFBRTtRQUN0QixNQUFNLHlCQUF5QkEsR0FBRyxFQUFFO01BQ3RDO01BQ0EsTUFBTUYsTUFBTSxHQUFHaEIsWUFBWSxDQUFDa0IsR0FBRyxDQUFDLENBQUNGLE1BQU07TUFDdkMsSUFBSUEsTUFBTSxFQUFFO1FBQ1ZZLE9BQU8sQ0FBQ1YsR0FBRyxDQUFDLEdBQUdGLE1BQU0sQ0FBQ0csS0FBSyxDQUFDO01BQzlCO0lBQ0YsQ0FBQyxDQUFDO0lBQ0ZLLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLDZCQUE2QlEsUUFBUSxFQUFFLENBQUM7RUFDdEQ7RUFDQSxPQUFPTCxPQUFPO0FBQ2hCO0FBRUF6QixrQkFBTyxDQUFDQyxTQUFTLENBQUNrQyxpQkFBaUIsR0FBRyxVQUFVVixPQUFPLEVBQUU7RUFDdkRyQixNQUFNLENBQUNDLElBQUksQ0FBQ29CLE9BQU8sQ0FBQyxDQUFDRixPQUFPLENBQUNSLEdBQUcsSUFBSTtJQUNsQyxJQUFJLENBQUNYLE1BQU0sQ0FBQ0gsU0FBUyxDQUFDbUMsY0FBYyxDQUFDQyxJQUFJLENBQUMsSUFBSSxFQUFFdEIsR0FBRyxDQUFDLEVBQUU7TUFDcEQsSUFBSSxDQUFDQSxHQUFHLENBQUMsR0FBR1UsT0FBTyxDQUFDVixHQUFHLENBQUM7SUFDMUI7RUFDRixDQUFDLENBQUM7QUFDSixDQUFDO0FBRURmLGtCQUFPLENBQUNDLFNBQVMsQ0FBQ3FDLE1BQU0sR0FBR3RDLGtCQUFPLENBQUNDLFNBQVMsQ0FBQ3NDLEtBQUs7QUFFbER2QyxrQkFBTyxDQUFDQyxTQUFTLENBQUNzQyxLQUFLLEdBQUcsVUFBVVgsSUFBSSxFQUFFWCxHQUFHLEVBQUU7RUFDN0MsSUFBSSxDQUFDcUIsTUFBTSxDQUFDVixJQUFJLENBQUM7RUFDakI7RUFDQSxNQUFNWSxVQUFVLEdBQUdoQixnQkFBZ0IsQ0FBQ1AsR0FBRyxDQUFDO0VBQ3hDLE1BQU13QixRQUFRLEdBQUdkLGVBQWUsQ0FBQyxJQUFJLENBQUM7RUFDdEM7RUFDQSxJQUFJLENBQUNRLGlCQUFpQixDQUFDSyxVQUFVLENBQUM7RUFDbEM7RUFDQSxJQUFJLENBQUNMLGlCQUFpQixDQUFDTSxRQUFRLENBQUM7RUFDaEM7RUFDQUMsbUJBQVUsQ0FBQ0Msc0JBQXNCLENBQUMsSUFBSSxDQUFDO0VBQ3ZDO0VBQ0EsSUFBSSxDQUFDUixpQkFBaUIsQ0FBQ3BDLFNBQVMsQ0FBQztBQUNuQyxDQUFDO0FBRURDLGtCQUFPLENBQUNDLFNBQVMsQ0FBQzJDLFVBQVUsR0FBRyxZQUFZO0VBQ3pDLE9BQU94QyxNQUFNLENBQUNDLElBQUksQ0FBQ1IsWUFBWSxDQUFDLENBQUNTLE1BQU0sQ0FBQyxDQUFDbUIsT0FBTyxFQUFFVixHQUFHLEtBQUs7SUFDeEQsSUFBSSxPQUFPLElBQUksQ0FBQ0EsR0FBRyxDQUFDLEtBQUssV0FBVyxFQUFFO01BQ3BDVSxPQUFPLENBQUNWLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQ0EsR0FBRyxDQUFDO0lBQzFCO0lBQ0EsT0FBT1UsT0FBTztFQUNoQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDO0FBQUMsSUFBQW9CLFFBQUEsR0FBQUMsT0FBQSxDQUFBbEQsT0FBQSxHQUVhLElBQUlJLGtCQUFPLENBQUMsQ0FBQyxDQUFDK0Msd0JBQXdCLENBQUMsQ0FBQztBQUN2RCIsImlnbm9yZUxpc3QiOltdfQ==