config-kit
Advanced tools
Comparing version 1.2.1 to 1.3.0
@@ -0,1 +1,26 @@ | ||
# v1.3.0 (Nov 9, 2020) | ||
* feat(Store): Added `schema` getter and setter. | ||
* feat(Node): Add node class reference to internal metadata for instantiating child nodes. Useful | ||
if a store wants to use an extended `Node` class. | ||
* refactor(Store): Changed `Store.load()` to only take a `file`. Not counting this as a breaking | ||
change as it's an internal API. | ||
* fix(Layer): Move layer namespace handling from store to layer. | ||
* fix(Layer): Allow `has()` to be passed an empty key. | ||
* fix(Layer): Added schema validation when initializing a layer with data. | ||
* fix(LayerList): Moved `Base` layer definition from `Config` into `LayerList` because the layer | ||
schema validator needs the base layer's schema and we need to make sure the base layer exists | ||
and thus needs to own the `Base` symbol. | ||
* fix(LayerList): Validator should only use base layer's schema and current layer's schema to | ||
validate, not all layer's schemas. | ||
* fix(LayerList): Fixed bug where layers were not being inserted into the layer list sequentially. | ||
* fix(JSONStore): Fixed `get()` and `has()` to only iterate over the data object if the `key` has | ||
a length. | ||
* fix(util): In `getSchemaInitialValues()`, only return `env` object if there were environment | ||
variable values found. | ||
* build: Update Babel config from Node 8 to Node 10. | ||
* test: Added several namespace related tests. | ||
* test: Fixed several bad tests. | ||
* chore: Migrated from `@hapi/joi` to `joi`. | ||
# v1.2.1 (Jul 3, 2020) | ||
@@ -2,0 +27,0 @@ |
@@ -52,3 +52,3 @@ "use strict"; | ||
var _joi = _interopRequireDefault(require("@hapi/joi")); | ||
var _joi = _interopRequireDefault(require("joi")); | ||
@@ -74,2 +74,2 @@ var _jsStore = _interopRequireDefault(require("./stores/js-store")); | ||
exports.default = _default; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbIkVycm9yIiwicHJlcGFyZVN0YWNrVHJhY2UiLCJyZXF1aXJlIiwiQ29uZmlnIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBS0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFYQTtBQUNBLElBQUksQ0FBQ0EsS0FBSyxDQUFDQyxpQkFBWCxFQUE4QjtBQUM3QkMsRUFBQUEsT0FBTyxDQUFDLDZCQUFELENBQVA7QUFDQTs7ZUFVY0MsZSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKCFFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSkge1xuXHRyZXF1aXJlKCdzb3VyY2UtbWFwLXN1cHBvcnQvcmVnaXN0ZXInKTtcbn1cblxuaW1wb3J0IENvbmZpZyBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgSm9pIGZyb20gJ0BoYXBpL2pvaSc7XG5pbXBvcnQgSlNTdG9yZSBmcm9tICcuL3N0b3Jlcy9qcy1zdG9yZSc7XG5pbXBvcnQgSlNPTlN0b3JlIGZyb20gJy4vc3RvcmVzL2pzb24tc3RvcmUnO1xuaW1wb3J0IExheWVyIGZyb20gJy4vbGF5ZXInO1xuaW1wb3J0IE5vZGUgZnJvbSAnLi9ub2RlJztcbmltcG9ydCBTdG9yZSBmcm9tICcuL3N0b3JlJztcblxuZXhwb3J0IGRlZmF1bHQgQ29uZmlnO1xuZXhwb3J0IHtcblx0Q29uZmlnLFxuXHRKb2ksXG5cdEpTU3RvcmUsXG5cdEpTT05TdG9yZSxcblx0TGF5ZXIsXG5cdE5vZGUsXG5cdFN0b3JlXG59O1xuIl0sImZpbGUiOiJpbmRleC5qcyJ9 | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbIkVycm9yIiwicHJlcGFyZVN0YWNrVHJhY2UiLCJyZXF1aXJlIiwiQ29uZmlnIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBS0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFYQTtBQUNBLElBQUksQ0FBQ0EsS0FBSyxDQUFDQyxpQkFBWCxFQUE4QjtBQUM3QkMsRUFBQUEsT0FBTyxDQUFDLDZCQUFELENBQVA7QUFDQTs7ZUFVY0MsZSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKCFFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSkge1xuXHRyZXF1aXJlKCdzb3VyY2UtbWFwLXN1cHBvcnQvcmVnaXN0ZXInKTtcbn1cblxuaW1wb3J0IENvbmZpZyBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgSm9pIGZyb20gJ2pvaSc7XG5pbXBvcnQgSlNTdG9yZSBmcm9tICcuL3N0b3Jlcy9qcy1zdG9yZSc7XG5pbXBvcnQgSlNPTlN0b3JlIGZyb20gJy4vc3RvcmVzL2pzb24tc3RvcmUnO1xuaW1wb3J0IExheWVyIGZyb20gJy4vbGF5ZXInO1xuaW1wb3J0IE5vZGUgZnJvbSAnLi9ub2RlJztcbmltcG9ydCBTdG9yZSBmcm9tICcuL3N0b3JlJztcblxuZXhwb3J0IGRlZmF1bHQgQ29uZmlnO1xuZXhwb3J0IHtcblx0Q29uZmlnLFxuXHRKb2ksXG5cdEpTU3RvcmUsXG5cdEpTT05TdG9yZSxcblx0TGF5ZXIsXG5cdE5vZGUsXG5cdFN0b3JlXG59O1xuIl0sImZpbGUiOiJpbmRleC5qcyJ9 |
@@ -6,3 +6,3 @@ "use strict"; | ||
}); | ||
exports.default = exports.All = void 0; | ||
exports.default = exports.Base = exports.All = void 0; | ||
@@ -38,6 +38,13 @@ var _layer = _interopRequireDefault(require("./layer")); | ||
/** | ||
* The id for the base layer. | ||
* @type {Symbol} | ||
*/ | ||
exports.All = All; | ||
const Base = Symbol('base'); | ||
/** | ||
* An indexed list of elements. | ||
*/ | ||
exports.All = All; | ||
exports.Base = Base; | ||
_Symbol$iterator = Symbol.iterator; | ||
@@ -77,2 +84,7 @@ | ||
* @param {Boolean} [opts.allowUnknown=true] - Allows object values to contain unknown keys. | ||
* @param {Object} [opts.data] - Datwa to initialize the base config layer with. | ||
* @param {String} [opts.file] - The file to associate with the base layer. | ||
* @param {Object} [opts.schema] - A Joi schema for the base layer. | ||
* @param {Store|Function} [opts.store] - A store instance or store class to use for the base | ||
* layer. | ||
* @access public | ||
@@ -108,2 +120,18 @@ */ | ||
this.allowUnknown = opts.allowUnknown !== false; | ||
this.layers.push(this.map[Base] = new _layer.default({ | ||
allowNulls: opts.allowNulls, | ||
data: opts.data, | ||
file: opts.file, | ||
id: Base, | ||
order: -Infinity, | ||
readonly: false, | ||
schema: opts.schema, | ||
static: true, | ||
store: opts.store, | ||
validate: args => (0, _util.validate)(_objectSpread(_objectSpread({}, args), {}, { | ||
validateOptions: _objectSpread({ | ||
allowUnknown: this.allowUnknown | ||
}, args.validateOptions) | ||
})) | ||
})); | ||
} | ||
@@ -134,7 +162,11 @@ /** | ||
if (!layer.id) { | ||
const { | ||
id | ||
} = layer; | ||
if (!id) { | ||
throw new Error('Expected layer to have an id'); | ||
} | ||
const existing = this.map[layer.id]; | ||
const existing = this.map[id]; | ||
@@ -152,8 +184,25 @@ if (existing) { | ||
if (isLayer || !layer.validate) { | ||
layer.validate = args => (0, _util.validate)(_objectSpread(_objectSpread({}, args), {}, { | ||
schemas: this.layers.map(layer => layer.schema), | ||
validateOptions: { | ||
allowUnknown: this.allowUnknown | ||
layer.validate = args => { | ||
var _this$layers$find; | ||
const schemas = new Set(); | ||
const base = (_this$layers$find = this.layers.find(layer => layer.id === Base)) === null || _this$layers$find === void 0 ? void 0 : _this$layers$find.schema; | ||
if (base) { | ||
schemas.add(base); | ||
} | ||
})); | ||
if (args.schemas) { | ||
for (const schema of args.schemas) { | ||
schemas.add(schema); | ||
} | ||
} | ||
return (0, _util.validate)(_objectSpread(_objectSpread({}, args), {}, { | ||
schemas: Array.from(schemas), | ||
validateOptions: { | ||
allowUnknown: this.allowUnknown | ||
} | ||
})); | ||
}; | ||
} | ||
@@ -164,3 +213,3 @@ | ||
if (!isLayer) { | ||
log(`Creating new layer: ${highlight(String(layer.id))}`); | ||
log(`Creating new layer: ${highlight(String(id))}`); | ||
layer = new _layer.default(layer); | ||
@@ -171,6 +220,6 @@ } else if (existing && Object.prototype.hasOwnProperty.call(existing, 'file')) { | ||
this.map[layer.id] = layer; | ||
this.map[id] = layer; | ||
if (existing) { | ||
const p = this.layers.findIndex(existing => existing.id === layer.id); | ||
const p = this.layers.findIndex(existing => existing.id === id); | ||
@@ -185,3 +234,3 @@ if (p !== -1) { | ||
for (let i = this.layers.length - 1; i >= 0; i--) { | ||
if (layer.order > this.layers[i].order) { | ||
if (layer.order >= this.layers[i].order) { | ||
inserted = !!this.layers.splice(i + 1, 0, layer); | ||
@@ -396,2 +445,2 @@ break; | ||
exports.default = LayerList; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxheWVyLWxpc3QuanMiXSwibmFtZXMiOlsibG9nIiwiaGlnaGxpZ2h0Iiwic25vb3Bsb2dnIiwic3R5bGVzIiwiQWxsIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJMYXllckxpc3QiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJpIiwibGF5ZXJzIiwibGVuZ3RoIiwibmV4dCIsImRvbmUiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsImFsbG93TnVsbHMiLCJhbGxvd1Vua25vd24iLCJhZGQiLCJsYXllciIsIlR5cGVFcnJvciIsImlkIiwiQXJyYXkiLCJpc0FycmF5IiwiRXJyb3IiLCJleGlzdGluZyIsIm1hcCIsInByb3AiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpc0xheWVyIiwiTGF5ZXIiLCJ2YWxpZGF0ZSIsImFyZ3MiLCJzY2hlbWFzIiwic2NoZW1hIiwidmFsaWRhdGVPcHRpb25zIiwiU3RyaW5nIiwiZmlsZSIsInAiLCJmaW5kSW5kZXgiLCJzcGxpY2UiLCJpbnNlcnRlZCIsIm9yZGVyIiwicHVzaCIsImZpbHRlciIsImhhbmRsZXIiLCJ3YXRjaGVycyIsIndhdGNoIiwiZ2V0IiwicXVlcnkiLCJyZXZlcnNlIiwiaWRzIiwicmVtb3ZlIiwiaWRPckxheWVyIiwidW5sb2FkIiwic2V0IiwidG9TdHJpbmciLCJpbmRlbnRhdGlvbiIsIm9iaiIsImNmZyIsInN0b3JlIiwiSlNPTiIsInN0cmluZ2lmeSIsIk1hdGgiLCJtYXgiLCJ1bndhdGNoIiwibmFtZSIsImpvaW4iLCJmaWx0ZXJIYXNoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7OztBQUVBLE1BQU07QUFBRUEsRUFBQUE7QUFBRixJQUFVLHdCQUFVLFlBQVYsRUFBd0IsWUFBeEIsQ0FBaEI7QUFDQSxNQUFNO0FBQUVDLEVBQUFBO0FBQUYsSUFBZ0JDLG1CQUFVQyxNQUFoQztBQUVBOzs7OztBQUlPLE1BQU1DLEdBQUcsR0FB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LEtBQUtULE1BQXpCLEVBQWlDO0FBQ2hDUyxNQUFBQSxLQUFLLENBQUMrQixLQUFOLENBQVlILE1BQVosRUFBb0JDLE9BQXBCO0FBQ0E7QUFDRDs7QUF4UzZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExheWVyIGZyb20gJy4vbGF5ZXInO1xuaW1wb3J0IHNub29wbG9nZyBmcm9tICdzbm9vcGxvZ2cnO1xuaW1wb3J0IHsgYXJyYXlpZnksIGhhc2hWYWx1ZSwgdmFsaWRhdGUgfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCB7IGxvZyB9ID0gc25vb3Bsb2dnKCdjb25maWcta2l0JykoJ2xheWVyLWxpc3QnKTtcbmNvbnN0IHsgaGlnaGxpZ2h0IH0gPSBzbm9vcGxvZ2cuc3R5bGVzO1xuXG4vKipcbiAqIEEgdW5pcXVlIHN5bWJvbCB1c2VkIHRvIHF1ZXJ5IGFsbCBsYXllcnMuXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5leHBvcnQgY29uc3QgQWxsID0gU3ltYm9sKCdhbGwnKTtcblxuLyoqXG4gKiBBbiBpbmRleGVkIGxpc3Qgb2YgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExheWVyTGlzdCB7XG5cdC8qKlxuXHQgKiBGb3JjZXMgYWxsIG5vZGVzIG9mIGEgc2NoZW1hIHRvIGFsbG93IG51bGxzLlxuXHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0ICovXG5cdGFsbG93TnVsbHMgPSBmYWxzZTtcblxuXHQvKipcblx0ICogQWxsb3dzIG9iamVjdCB2YWx1ZXMgdG8gY29udGFpbiB1bmtub3duIGtleXMuXG5cdCAqIEB0eXBlIHtCb29sZWFufVxuXHQgKi9cblx0YWxsb3dVbmtub3duID0gdHJ1ZTtcblxuXHQvKipcblx0ICogVGhlIG9yZGVyZWQgbGlzdCBvZiBsYXllcnMuXG5cdCAqIEB0eXBlIHtBcnJheS48TGF5ZXI+fVxuXHQgKi9cblx0bGF5ZXJzID0gW107XG5cblx0LyoqXG5cdCAqIEEgcXVpY2sgbG9va3VwIGJhc2VkIG9uIGlkLlxuXHQgKiBAdHlwZSB7b2JqZWN0fVxuXHQgKi9cblx0bWFwID0ge307XG5cblx0LyoqXG5cdCAqIEEgbGlzdCBvZiBhbGwgYWN0aXZlIHdhdGNoZXJzLlxuXHQgKiBAdHlwZSB7QXJyYXkuPE9iamVjdD59XG5cdCAqL1xuXHR3YXRjaGVycyA9IFtdO1xuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgb3B0aW9ucy5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5hbGxvd051bGxzXSAtIEZvcmNlcyBhbGwgbm9kZXMgb2YgYSBzY2hlbWEgdG8gYWxsb3cgbnVsbHMuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuYWxsb3dVbmtub3duPXRydWVdIC0gQWxsb3dzIG9iamVjdCB2YWx1ZXMgdG8gY29udGFpbiB1bmtub3duIGtleXMuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcblx0XHR0aGlzLmFsbG93TnVsbHMgPSBvcHRzLmFsbG93TnVsbHM7XG5cdFx0dGhpcy5hbGxvd1Vua25vd24gPSBvcHRzLmFsbG93VW5rbm93biAhPT0gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIGxheWVyLiBJZiB0aGUgbGF5ZXIgaWQgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgcmVwbGFjZSBpdC5cblx0ICpcblx0ICogQHBhcmFtIHtMYXllcnxPYmplY3R8U3RyaW5nfSBsYXllciAtIFRoZSBsYXllciwgbGF5ZXIgY29udHJ1Y3RvciBhcmd1bWVudHMsIG9yIGxheWVyIGlkLlxuXHQgKiBAcmV0dXJucyB7TGF5ZXJ9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRhZGQobGF5ZXIpIHtcblx0XHRpZiAoIWxheWVyKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBsYXllciB0byBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGxheWVyID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbGF5ZXIgPT09ICdzeW1ib2wnKSB7XG5cdFx0XHRsYXllciA9IHsgaWQ6IGxheWVyIH07XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBsYXllciAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShsYXllcikpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGxheWVyIHRvIGJlIGFuIG9iamVjdCcpO1xuXHRcdH1cblxuXHRcdGlmICghbGF5ZXIuaWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgbGF5ZXIgdG8gaGF2ZSBhbiBpZCcpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGV4aXN0aW5nID0gdGhpcy5tYXBbbGF5ZXIuaWRdO1xuXHRcdGlmIChleGlzdGluZykge1xuXHRcdFx0Zm9yIChjb25zdCBwcm9wIG9mIFsgJ25hbWVzcGFjZScsICdvcmRlcicsICdyZWFkb25seScsICdzY2hlbWEnLCAnc3RhdGljJyBdKSB7XG5cdFx0XHRcdGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxheWVyLCBwcm9wKSkge1xuXHRcdFx0XHRcdGxheWVyW3Byb3BdID0gZXhpc3RpbmdbcHJvcF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBpc0xheWVyID0gbGF5ZXIgaW5zdGFuY2VvZiBMYXllcjtcblx0XHRpZiAoaXNMYXllciB8fCAhbGF5ZXIudmFsaWRhdGUpIHtcblx0XHRcdGxheWVyLnZhbGlkYXRlID0gYXJncyA9PiB2YWxpZGF0ZSh7XG5cdFx0XHRcdC4uLmFyZ3MsXG5cdFx0XHRcdHNjaGVtYXM6IHRoaXMubGF5ZXJzLm1hcChsYXllciA9PiBsYXllci5zY2hlbWEpLFxuXHRcdFx0XHR2YWxpZGF0ZU9wdGlvbnM6IHtcblx0XHRcdFx0XHRhbGxvd1Vua25vd246IHRoaXMuYWxsb3dVbmtub3duXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGxheWVyLmFsbG93TnVsbHMgPSB0aGlzLmFsbG93TnVsbHM7XG5cblx0XHRpZiAoIWlzTGF5ZXIpIHtcblx0XHRcdGxvZyhgQ3JlYXRpbmcgbmV3IGxheWVyOiAke2hpZ2hsaWdodChTdHJpbmcobGF5ZXIuaWQpKX1gKTtcblx0XHRcdGxheWVyID0gbmV3IExheWVyKGxheWVyKTtcblx0XHR9IGVsc2UgaWYgKGV4aXN0aW5nICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleGlzdGluZywgJ2ZpbGUnKSkge1xuXHRcdFx0bGF5ZXIuZmlsZSA9IGV4aXN0aW5nLmZpbGU7XG5cdFx0fVxuXG5cdFx0dGhpcy5tYXBbbGF5ZXIuaWRdID0gbGF5ZXI7XG5cdFx0aWYgKGV4aXN0aW5nKSB7XG5cdFx0XHRjb25zdCBwID0gdGhpcy5sYXllcnMuZmluZEluZGV4KGV4aXN0aW5nID0+IGV4aXN0aW5nLmlkID09PSBsYXllci5pZCk7XG5cdFx0XHRpZiAocCAhPT0gLTEpIHtcblx0XHRcdFx0dGhpcy5sYXllcnMuc3BsaWNlKHAsIDEpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCBpbnNlcnRlZDtcblx0XHRmb3IgKGxldCBpID0gdGhpcy5sYXllcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdGlmIChsYXllci5vcmRlciA+IHRoaXMubGF5ZXJzW2ldLm9yZGVyKSB7XG5cdFx0XHRcdGluc2VydGVkID0gISF0aGlzLmxheWVycy5zcGxpY2UoaSArIDEsIDAsIGxheWVyKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghaW5zZXJ0ZWQpIHtcblx0XHRcdHRoaXMubGF5ZXJzLnB1c2gobGF5ZXIpO1xuXHRcdH1cblxuXHRcdC8vIGFkZCB0aGUgd2F0Y2hlcnMgdG8gdGhpcyBsYXllclxuXHRcdGZvciAoY29uc3QgeyBmaWx0ZXIsIGhhbmRsZXIgfSBvZiB0aGlzLndhdGNoZXJzKSB7XG5cdFx0XHRsYXllci53YXRjaChmaWx0ZXIsIGhhbmRsZXIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBsYXllcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbGF5ZXIgYnkgaWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfFN5bWJvbH0gaWQgLSBUaGUgbGF5ZXIgaWQuXG5cdCAqIEByZXR1cm5zIHtMYXllcn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGdldChpZCkge1xuXHRcdHJldHVybiB0aGlzLm1hcFtpZF07XG5cdH1cblxuXHQvKipcblx0ICogRmluZHMgYWxsIGxheWVycyB0aGF0IG1hdGNoIGEgc3BlY2lmaWVkIGlkcy5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8U3ltYm9sfEFycmF5LjxTdHJpbmd8U3ltYm9sPn0gaWQgLSBUaGUgbGF5ZXIgaWQgb3IgaWRzLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtyZXZlcnNlXSAtIFdoZW4gYHRydWVgLCB0aGUgcmVzdWx0cyBhcmUgaXRlcmF0ZWQgaW4gcmV2ZXJzZSBvcmRlci5cblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHF1ZXJ5KGlkLCByZXZlcnNlKSB7XG5cdFx0bGV0IGlkcyA9IFtdO1xuXHRcdGlmIChpZCA9PT0gdW5kZWZpbmVkIHx8IGlkID09PSBBbGwpIHtcblx0XHRcdGlkcyA9IHRoaXMubGF5ZXJzLm1hcChsYXllciA9PiBsYXllci5pZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlkcyA9IGFycmF5aWZ5KGlkLCB0cnVlKS5maWx0ZXIoaWQgPT4gdGhpcy5tYXBbaWRdKTtcblx0XHRcdGlmICghaWRzLmxlbmd0aCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYExheWVyIFwiJHtTdHJpbmcoaWQpfVwiIG5vdCBmb3VuZGApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChyZXZlcnNlKSB7XG5cdFx0XHRpZHMucmV2ZXJzZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRbU3ltYm9sLml0ZXJhdG9yXTogKCkgPT4ge1xuXHRcdFx0XHRsZXQgaSA9IDA7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0bmV4dDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgZG9uZSA9IGkgPj0gaWRzLmxlbmd0aDtcblx0XHRcdFx0XHRcdHJldHVybiB7IGRvbmUsIHZhbHVlOiBkb25lID8gdW5kZWZpbmVkIDogdGhpcy5tYXBbaWRzW2krK11dIH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogRGVzdHJveXMgYSBsYXllciBieSBpZCBvciBsYXllciByZWZlcmVuY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfFN5bWJvbHxBcnJheS48U3RyaW5nfFN5bWJvbD59IGlkT3JMYXllciAtIFRoZSBsYXllciBpZCBvciBpZHMuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW3JldmVyc2VdIC0gV2hlbiBgdHJ1ZWAsIHRoZSByZXN1bHRzIGFyZSBpdGVyYXRlZCBpbiByZXZlcnNlIG9yZGVyLlxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0cmVtb3ZlKGlkT3JMYXllcikge1xuXHRcdGNvbnN0IGxheWVyID0gdGhpcy5tYXBbaWRPckxheWVyXTtcblx0XHRjb25zdCBwID0gdGhpcy5sYXllcnMuZmluZEluZGV4KGxheWVyID0+IGxheWVyID09PSBpZE9yTGF5ZXIgfHwgbGF5ZXIuaWQgPT09IGlkT3JMYXllcik7XG5cdFx0aWYgKGxheWVyKSB7XG5cdFx0XHRsb2coYFVubG9hZGluZyBsYXllcjogJHtoaWdobGlnaHQoU3RyaW5nKGlkT3JMYXllcikpfWApO1xuXHRcdFx0dGhpcy5tYXBbaWRPckxheWVyXS51bmxvYWQoKTtcblx0XHRcdGRlbGV0ZSB0aGlzLm1hcFtpZE9yTGF5ZXJdO1xuXHRcdH1cblx0XHRpZiAocCAhPT0gLTEpIHtcblx0XHRcdHRoaXMubGF5ZXJzLnNwbGljZShwLCAxKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQSByZXZlcnNlIGl0ZXJhdG9yLlxuXHQgKlxuXHQgKiBAdHlwZSB7T2JqZWN0fVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0cmV2ZXJzZSA9IHtcblx0XHRbU3ltYm9sLml0ZXJhdG9yXTogKCkgPT4ge1xuXHRcdFx0bGV0IGkgPSB0aGlzLmxheWVycy5sZW5ndGggLSAxO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bmV4dDogKCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGRvbmUgPSBpIDwgMDtcblx0XHRcdFx0XHRyZXR1cm4geyBkb25lLCB2YWx1ZTogZG9uZSA/IHVuZGVmaW5lZCA6IHRoaXMubGF5ZXJzW2ktLV0gfTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEFuIGFsaWFzIGZvciBgYWRkKClgLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0xheWVyfE9iamVjdHxTdHJpbmd9IGxheWVyIC0gVGhlIGxheWVyLCBsYXllciBjb250cnVjdG9yIGFyZ3VtZW50cywgb3IgbGF5ZXIgaWQuXG5cdCAqIEByZXR1cm5zIHtMYXllcn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHNldChsYXllcikge1xuXHRcdHJldHVybiB0aGlzLmFkZChsYXllcik7XG5cdH1cblxuXHQvKipcblx0ICogQSByZXZlcnNlIGl0ZXJhdG9yLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0W1N5bWJvbC5pdGVyYXRvcl0oKSB7XG5cdFx0bGV0IGkgPSAwO1xuXHRcdHJldHVybiB7XG5cdFx0XHRuZXh0OiAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRvbmUgPSBpID49IHRoaXMubGF5ZXJzLmxlbmd0aDtcblx0XHRcdFx0cmV0dXJuIHsgZG9uZSwgdmFsdWU6IGRvbmUgPyB1bmRlZmluZWQgOiB0aGlzLmxheWVyc1tpKytdIH07XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgc3RyaW5nIHByZXByZXNlbnRhdGlvbiBvZiBlYWNoIGxheWVyLlxuXHQgKlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2luZGVudGF0aW9uPTJdIFRoZSBudW1iZXIgb2Ygc3BhY2VzIHRvIGluZGVudCB0aGUgSlNPTiBmb3JtYXR0ZWQgb3V0cHV0LlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0dG9TdHJpbmcoaW5kZW50YXRpb24gPSAyKSB7XG5cdFx0Y29uc3Qgb2JqID0ge307XG5cdFx0Zm9yIChjb25zdCBsYXllciBvZiB0aGlzLmxheWVycykge1xuXHRcdFx0Y29uc3QgY2ZnID0gbGF5ZXIuc3RvcmUuZ2V0KCk7XG5cdFx0XHRvYmpbU3RyaW5nKGxheWVyLmlkKV0gPSBjZmcgPT09IHVuZGVmaW5lZCA/IHt9IDogY2ZnO1xuXHRcdH1cblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLCBudWxsLCBNYXRoLm1heChpbmRlbnRhdGlvbiwgMCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYSB3YXRjaCBoYW5kbGVyIGZyb20gYWxsIGxheWVycy5cblx0ICpcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciAtIEEgY2FsbGJhY2sgdG8gZmlyZSB3aGVuIGEgY2hhbmdlIG9jY3Vycy5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHVud2F0Y2goaGFuZGxlcikge1xuXHRcdGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgaGFuZGxlciB0byBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLndhdGNoZXJzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy53YXRjaGVyc1tpXS5oYW5kbGVyID09PSBoYW5kbGVyKSB7XG5cdFx0XHRcdHRoaXMud2F0Y2hlcnMuc3BsaWNlKGktLSwgMSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBsYXllciBvZiB0aGlzLmxheWVycykge1xuXHRcdFx0bGF5ZXIudW53YXRjaChoYW5kbGVyKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXJzIGEgd2F0Y2ggaGFuZGxlciBvbiBhbGwgbGF5ZXJzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0FycmF5LjxTdHJpbmc+fSBbZmlsdGVyXSAtIEEgcHJvcGVydHkgbmFtZSBvciBhcnJheSBvZiBuZXN0ZWQgcHJvcGVydGllcyB0byB3YXRjaC5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciAtIEEgY2FsbGJhY2sgdG8gZmlyZSB3aGVuIGEgY2hhbmdlIG9jY3Vycy5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHdhdGNoKGZpbHRlciwgaGFuZGxlcikge1xuXHRcdGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgaGFuZGxlciB0byBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXG5cdFx0bG9nKGBSZWdpc3RlcmluZyB3YXRjaGVyOiAke2hpZ2hsaWdodChgJHtoYW5kbGVyLm5hbWV9KClgKX0gJHtmaWx0ZXIubGVuZ3RoID8gZmlsdGVyLmpvaW4oJy4nKSA6ICcnfWApO1xuXG5cdFx0dGhpcy53YXRjaGVycy5wdXNoKHsgZmlsdGVyLCBmaWx0ZXJIYXNoOiBoYXNoVmFsdWUoZmlsdGVyKSwgaGFuZGxlciB9KTtcblxuXHRcdGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy5sYXllcnMpIHtcblx0XHRcdGxheWVyLndhdGNoKGZpbHRlciwgaGFuZGxlcik7XG5cdFx0fVxuXHR9XG59XG4iXSwiZmlsZSI6ImxheWVyLWxpc3QuanMifQ== | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxheWVyLWxpc3QuanMiXSwibmFtZXMiOlsibG9nIiwiaGlnaGxpZ2h0Iiwic25vb3Bsb2dnIiwic3R5bGVzIiwiQWxsIiwiU3ltYm9sIiwiQmFzZSIsIml0ZXJhdG9yIiwiTGF5ZXJMaXN0IiwiY29uc3RydWN0b3IiLCJvcHRzIiwiaSIsImxheWVycyIsImxlbmd0aCIsIm5leHQiLCJkb25lIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJhbGxvd051bGxzIiwiYWxsb3dVbmtub3duIiwicHVzaCIsIm1hcCIsIkxheWVyIiwiZGF0YSIsImZpbGUiLCJpZCIsIm9yZGVyIiwiSW5maW5pdHkiLCJyZWFkb25seSIsInNjaGVtYSIsInN0YXRpYyIsInN0b3JlIiwidmFsaWRhdGUiLCJhcmdzIiwidmFsaWRhdGVPcHRpb25zIiwiYWRkIiwibGF5ZXIiLCJUeXBlRXJyb3IiLCJBcnJheSIsImlzQXJyYXkiLCJFcnJvciIsImV4aXN0aW5nIiwicHJvcCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImlzTGF5ZXIiLCJzY2hlbWFzIiwiU2V0IiwiYmFzZSIsImZpbmQiLCJmcm9tIiwiU3RyaW5nIiwicCIsImZpbmRJbmRleCIsInNwbGljZSIsImluc2VydGVkIiwiZmlsdGVyIiwiaGFuZGxlciIsIndhdGNoZXJzIiwid2F0Y2giLCJnZXQiLCJxdWVyeSIsInJldmVyc2UiLCJpZHMiLCJyZW1vdmUiLCJpZE9yTGF5ZXIiLCJ1bmxvYWQiLCJzZXQiLCJ0b1N0cmluZyIsImluZGVudGF0aW9uIiwib2JqIiwiY2ZnIiwiSlNPTiIsInN0cmluZ2lmeSIsIk1hdGgiLCJtYXgiLCJ1bndhdGNoIiwibmFtZSIsImpvaW4iLCJmaWx0ZXJIYXNoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7OztBQUVBLE1BQU07QUFBRUEsRUFBQUE7QUFBRixJQUFVLHdCQUFVLFlBQVYsRUFBd0IsWUFBeEIsQ0FBaEI7QUFD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O0FBQ0E7QUFDRDtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQ0UsRUFBQUEsS0FBSyxDQUFDSCxNQUFELEVBQVNDLE9BQVQsRUFBa0I7QUFDdEIsUUFBSSxDQUFDQSxPQUFELElBQVksT0FBT0EsT0FBUCxLQUFtQixVQUFuQyxFQUErQztBQUM5QyxZQUFNLElBQUl0QixTQUFKLENBQWMsbUNBQWQsQ0FBTjtBQUNBOztBQUVEckMsSUFBQUEsR0FBRyxDQUFFLHdCQUF1QkMsU0FBUyxDQUFFLEdBQUUwRCxPQUFPLENBQUNvQixJQUFLLElBQWpCLENBQXNCLElBQUdyQixNQUFNLENBQUM3QyxNQUFQLEdBQWdCNkMsTUFBTSxDQUFDc0IsSUFBUCxDQUFZLEdBQVosQ0FBaEIsR0FBbUMsRUFBRyxFQUFqRyxDQUFIO0FBRUEsU0FBS3BCLFFBQUwsQ0FBY3hDLElBQWQsQ0FBbUI7QUFBRXNDLE1BQUFBLE1BQUY7QUFBVXVCLE1BQUFBLFVBQVUsRUFBRSxxQkFBVXZCLE1BQVYsQ0FBdEI7QUFBeUNDLE1BQUFBO0FBQXpDLEtBQW5COztBQUVBLFNBQUssTUFBTXZCLEtBQVgsSUFBb0IsS0FBS3hCLE1BQXpCLEVBQWlDO0FBQ2hDd0IsTUFBQUEsS0FBSyxDQUFDeUIsS0FBTixDQUFZSCxNQUFaLEVBQW9CQyxPQUFwQjtBQUNBO0FBQ0Q7O0FBaFY2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMYXllciBmcm9tICcuL2xheWVyJztcbmltcG9ydCBzbm9vcGxvZ2cgZnJvbSAnc25vb3Bsb2dnJztcbmltcG9ydCB7IGFycmF5aWZ5LCBoYXNoVmFsdWUsIHZhbGlkYXRlIH0gZnJvbSAnLi91dGlsJztcblxuY29uc3QgeyBsb2cgfSA9IHNub29wbG9nZygnY29uZmlnLWtpdCcpKCdsYXllci1saXN0Jyk7XG5jb25zdCB7IGhpZ2hsaWdodCB9ID0gc25vb3Bsb2dnLnN0eWxlcztcblxuLyoqXG4gKiBBIHVuaXF1ZSBzeW1ib2wgdXNlZCB0byBxdWVyeSBhbGwgbGF5ZXJzLlxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuZXhwb3J0IGNvbnN0IEFsbCA9IFN5bWJvbCgnYWxsJyk7XG5cbi8qKlxuICogVGhlIGlkIGZvciB0aGUgYmFzZSBsYXllci5cbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmV4cG9ydCBjb25zdCBCYXNlID0gU3ltYm9sKCdiYXNlJyk7XG5cbi8qKlxuICogQW4gaW5kZXhlZCBsaXN0IG9mIGVsZW1lbnRzLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMYXllckxpc3Qge1xuXHQvKipcblx0ICogRm9yY2VzIGFsbCBub2RlcyBvZiBhIHNjaGVtYSB0byBhbGxvdyBudWxscy5cblx0ICogQHR5cGUge0Jvb2xlYW59XG5cdCAqL1xuXHRhbGxvd051bGxzID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIEFsbG93cyBvYmplY3QgdmFsdWVzIHRvIGNvbnRhaW4gdW5rbm93biBrZXlzLlxuXHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0ICovXG5cdGFsbG93VW5rbm93biA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFRoZSBvcmRlcmVkIGxpc3Qgb2YgbGF5ZXJzLlxuXHQgKiBAdHlwZSB7QXJyYXkuPExheWVyPn1cblx0ICovXG5cdGxheWVycyA9IFtdO1xuXG5cdC8qKlxuXHQgKiBBIHF1aWNrIGxvb2t1cCBiYXNlZCBvbiBpZC5cblx0ICogQHR5cGUge29iamVjdH1cblx0ICovXG5cdG1hcCA9IHt9O1xuXG5cdC8qKlxuXHQgKiBBIGxpc3Qgb2YgYWxsIGFjdGl2ZSB3YXRjaGVycy5cblx0ICogQHR5cGUge0FycmF5LjxPYmplY3Q+fVxuXHQgKi9cblx0d2F0Y2hlcnMgPSBbXTtcblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIG9wdGlvbnMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuYWxsb3dOdWxsc10gLSBGb3JjZXMgYWxsIG5vZGVzIG9mIGEgc2NoZW1hIHRvIGFsbG93IG51bGxzLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRzLmFsbG93VW5rbm93bj10cnVlXSAtIEFsbG93cyBvYmplY3QgdmFsdWVzIHRvIGNvbnRhaW4gdW5rbm93biBrZXlzLlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdHMuZGF0YV0gLSBEYXR3YSB0byBpbml0aWFsaXplIHRoZSBiYXNlIGNvbmZpZyBsYXllciB3aXRoLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuZmlsZV0gLSBUaGUgZmlsZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgYmFzZSBsYXllci5cblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRzLnNjaGVtYV0gLSBBIEpvaSBzY2hlbWEgZm9yIHRoZSBiYXNlIGxheWVyLlxuXHQgKiBAcGFyYW0ge1N0b3JlfEZ1bmN0aW9ufSBbb3B0cy5zdG9yZV0gLSBBIHN0b3JlIGluc3RhbmNlIG9yIHN0b3JlIGNsYXNzIHRvIHVzZSBmb3IgdGhlIGJhc2Vcblx0ICogbGF5ZXIuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcblx0XHR0aGlzLmFsbG93TnVsbHMgPSBvcHRzLmFsbG93TnVsbHM7XG5cdFx0dGhpcy5hbGxvd1Vua25vd24gPSBvcHRzLmFsbG93VW5rbm93biAhPT0gZmFsc2U7XG5cblx0XHR0aGlzLmxheWVycy5wdXNoKHRoaXMubWFwW0Jhc2VdID0gbmV3IExheWVyKHtcblx0XHRcdGFsbG93TnVsbHM6IG9wdHMuYWxsb3dOdWxscyxcblx0XHRcdGRhdGE6ICAgICAgIG9wdHMuZGF0YSxcblx0XHRcdGZpbGU6ICAgICAgIG9wdHMuZmlsZSxcblx0XHRcdGlkOiAgICAgICAgIEJhc2UsXG5cdFx0XHRvcmRlcjogICAgICAtSW5maW5pdHksXG5cdFx0XHRyZWFkb25seTogICBmYWxzZSxcblx0XHRcdHNjaGVtYTogICAgIG9wdHMuc2NoZW1hLFxuXHRcdFx0c3RhdGljOiAgICAgdHJ1ZSxcblx0XHRcdHN0b3JlOiAgICAgIG9wdHMuc3RvcmUsXG5cdFx0XHR2YWxpZGF0ZTogICBhcmdzID0+IHZhbGlkYXRlKHtcblx0XHRcdFx0Li4uYXJncyxcblx0XHRcdFx0dmFsaWRhdGVPcHRpb25zOiB7XG5cdFx0XHRcdFx0YWxsb3dVbmtub3duOiB0aGlzLmFsbG93VW5rbm93bixcblx0XHRcdFx0XHQuLi5hcmdzLnZhbGlkYXRlT3B0aW9uc1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdH0pKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgbGF5ZXIuIElmIHRoZSBsYXllciBpZCBhbHJlYWR5IGV4aXN0cywgaXQgd2lsbCByZXBsYWNlIGl0LlxuXHQgKlxuXHQgKiBAcGFyYW0ge0xheWVyfE9iamVjdHxTdHJpbmd9IGxheWVyIC0gVGhlIGxheWVyLCBsYXllciBjb250cnVjdG9yIGFyZ3VtZW50cywgb3IgbGF5ZXIgaWQuXG5cdCAqIEByZXR1cm5zIHtMYXllcn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFkZChsYXllcikge1xuXHRcdGlmICghbGF5ZXIpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGxheWVyIHRvIGJlIGFuIG9iamVjdCcpO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgbGF5ZXIgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBsYXllciA9PT0gJ3N5bWJvbCcpIHtcblx0XHRcdGxheWVyID0geyBpZDogbGF5ZXIgfTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGxheWVyICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGxheWVyKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbGF5ZXIgdG8gYmUgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgeyBpZCB9ID0gbGF5ZXI7XG5cblx0XHRpZiAoIWlkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGxheWVyIHRvIGhhdmUgYW4gaWQnKTtcblx0XHR9XG5cblx0XHRjb25zdCBleGlzdGluZyA9IHRoaXMubWFwW2lkXTtcblx0XHRpZiAoZXhpc3RpbmcpIHtcblx0XHRcdGZvciAoY29uc3QgcHJvcCBvZiBbICduYW1lc3BhY2UnLCAnb3JkZXInLCAncmVhZG9ubHknLCAnc2NoZW1hJywgJ3N0YXRpYycgXSkge1xuXHRcdFx0XHRpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsYXllciwgcHJvcCkpIHtcblx0XHRcdFx0XHRsYXllcltwcm9wXSA9IGV4aXN0aW5nW3Byb3BdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgaXNMYXllciA9IGxheWVyIGluc3RhbmNlb2YgTGF5ZXI7XG5cdFx0aWYgKGlzTGF5ZXIgfHwgIWxheWVyLnZhbGlkYXRlKSB7XG5cdFx0XHRsYXllci52YWxpZGF0ZSA9IGFyZ3MgPT4ge1xuXHRcdFx0XHRjb25zdCBzY2hlbWFzID0gbmV3IFNldCgpO1xuXHRcdFx0XHRjb25zdCBiYXNlID0gdGhpcy5sYXllcnMuZmluZChsYXllciA9PiBsYXllci5pZCA9PT0gQmFzZSk/LnNjaGVtYTtcblx0XHRcdFx0aWYgKGJhc2UpIHtcblx0XHRcdFx0XHRzY2hlbWFzLmFkZChiYXNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoYXJncy5zY2hlbWFzKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBzY2hlbWEgb2YgYXJncy5zY2hlbWFzKSB7XG5cdFx0XHRcdFx0XHRzY2hlbWFzLmFkZChzY2hlbWEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWxpZGF0ZSh7XG5cdFx0XHRcdFx0Li4uYXJncyxcblx0XHRcdFx0XHRzY2hlbWFzOiBBcnJheS5mcm9tKHNjaGVtYXMpLFxuXHRcdFx0XHRcdHZhbGlkYXRlT3B0aW9uczoge1xuXHRcdFx0XHRcdFx0YWxsb3dVbmtub3duOiB0aGlzLmFsbG93VW5rbm93blxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGxheWVyLmFsbG93TnVsbHMgPSB0aGlzLmFsbG93TnVsbHM7XG5cblx0XHRpZiAoIWlzTGF5ZXIpIHtcblx0XHRcdGxvZyhgQ3JlYXRpbmcgbmV3IGxheWVyOiAke2hpZ2hsaWdodChTdHJpbmcoaWQpKX1gKTtcblx0XHRcdGxheWVyID0gbmV3IExheWVyKGxheWVyKTtcblx0XHR9IGVsc2UgaWYgKGV4aXN0aW5nICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleGlzdGluZywgJ2ZpbGUnKSkge1xuXHRcdFx0bGF5ZXIuZmlsZSA9IGV4aXN0aW5nLmZpbGU7XG5cdFx0fVxuXG5cdFx0dGhpcy5tYXBbaWRdID0gbGF5ZXI7XG5cblx0XHRpZiAoZXhpc3RpbmcpIHtcblx0XHRcdGNvbnN0IHAgPSB0aGlzLmxheWVycy5maW5kSW5kZXgoZXhpc3RpbmcgPT4gZXhpc3RpbmcuaWQgPT09IGlkKTtcblx0XHRcdGlmIChwICE9PSAtMSkge1xuXHRcdFx0XHR0aGlzLmxheWVycy5zcGxpY2UocCwgMSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IGluc2VydGVkO1xuXHRcdGZvciAobGV0IGkgPSB0aGlzLmxheWVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0aWYgKGxheWVyLm9yZGVyID49IHRoaXMubGF5ZXJzW2ldLm9yZGVyKSB7XG5cdFx0XHRcdGluc2VydGVkID0gISF0aGlzLmxheWVycy5zcGxpY2UoaSArIDEsIDAsIGxheWVyKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghaW5zZXJ0ZWQpIHtcblx0XHRcdHRoaXMubGF5ZXJzLnB1c2gobGF5ZXIpO1xuXHRcdH1cblxuXHRcdC8vIGFkZCB0aGUgd2F0Y2hlcnMgdG8gdGhpcyBsYXllclxuXHRcdGZvciAoY29uc3QgeyBmaWx0ZXIsIGhhbmRsZXIgfSBvZiB0aGlzLndhdGNoZXJzKSB7XG5cdFx0XHRsYXllci53YXRjaChmaWx0ZXIsIGhhbmRsZXIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBsYXllcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbGF5ZXIgYnkgaWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfFN5bWJvbH0gaWQgLSBUaGUgbGF5ZXIgaWQuXG5cdCAqIEByZXR1cm5zIHtMYXllcn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGdldChpZCkge1xuXHRcdHJldHVybiB0aGlzLm1hcFtpZF07XG5cdH1cblxuXHQvKipcblx0ICogRmluZHMgYWxsIGxheWVycyB0aGF0IG1hdGNoIGEgc3BlY2lmaWVkIGlkcy5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8U3ltYm9sfEFycmF5LjxTdHJpbmd8U3ltYm9sPn0gaWQgLSBUaGUgbGF5ZXIgaWQgb3IgaWRzLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtyZXZlcnNlXSAtIFdoZW4gYHRydWVgLCB0aGUgcmVzdWx0cyBhcmUgaXRlcmF0ZWQgaW4gcmV2ZXJzZSBvcmRlci5cblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHF1ZXJ5KGlkLCByZXZlcnNlKSB7XG5cdFx0bGV0IGlkcyA9IFtdO1xuXHRcdGlmIChpZCA9PT0gdW5kZWZpbmVkIHx8IGlkID09PSBBbGwpIHtcblx0XHRcdGlkcyA9IHRoaXMubGF5ZXJzLm1hcChsYXllciA9PiBsYXllci5pZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlkcyA9IGFycmF5aWZ5KGlkLCB0cnVlKS5maWx0ZXIoaWQgPT4gdGhpcy5tYXBbaWRdKTtcblx0XHRcdGlmICghaWRzLmxlbmd0aCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYExheWVyIFwiJHtTdHJpbmcoaWQpfVwiIG5vdCBmb3VuZGApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChyZXZlcnNlKSB7XG5cdFx0XHRpZHMucmV2ZXJzZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRbU3ltYm9sLml0ZXJhdG9yXTogKCkgPT4ge1xuXHRcdFx0XHRsZXQgaSA9IDA7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0bmV4dDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgZG9uZSA9IGkgPj0gaWRzLmxlbmd0aDtcblx0XHRcdFx0XHRcdHJldHVybiB7IGRvbmUsIHZhbHVlOiBkb25lID8gdW5kZWZpbmVkIDogdGhpcy5tYXBbaWRzW2krK11dIH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogRGVzdHJveXMgYSBsYXllciBieSBpZCBvciBsYXllciByZWZlcmVuY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfFN5bWJvbHxBcnJheS48U3RyaW5nfFN5bWJvbD59IGlkT3JMYXllciAtIFRoZSBsYXllciBpZCBvciBpZHMuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW3JldmVyc2VdIC0gV2hlbiBgdHJ1ZWAsIHRoZSByZXN1bHRzIGFyZSBpdGVyYXRlZCBpbiByZXZlcnNlIG9yZGVyLlxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0cmVtb3ZlKGlkT3JMYXllcikge1xuXHRcdGNvbnN0IGxheWVyID0gdGhpcy5tYXBbaWRPckxheWVyXTtcblx0XHRjb25zdCBwID0gdGhpcy5sYXllcnMuZmluZEluZGV4KGxheWVyID0+IGxheWVyID09PSBpZE9yTGF5ZXIgfHwgbGF5ZXIuaWQgPT09IGlkT3JMYXllcik7XG5cdFx0aWYgKGxheWVyKSB7XG5cdFx0XHRsb2coYFVubG9hZGluZyBsYXllcjogJHtoaWdobGlnaHQoU3RyaW5nKGlkT3JMYXllcikpfWApO1xuXHRcdFx0dGhpcy5tYXBbaWRPckxheWVyXS51bmxvYWQoKTtcblx0XHRcdGRlbGV0ZSB0aGlzLm1hcFtpZE9yTGF5ZXJdO1xuXHRcdH1cblx0XHRpZiAocCAhPT0gLTEpIHtcblx0XHRcdHRoaXMubGF5ZXJzLnNwbGljZShwLCAxKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQSByZXZlcnNlIGl0ZXJhdG9yLlxuXHQgKlxuXHQgKiBAdHlwZSB7T2JqZWN0fVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0cmV2ZXJzZSA9IHtcblx0XHRbU3ltYm9sLml0ZXJhdG9yXTogKCkgPT4ge1xuXHRcdFx0bGV0IGkgPSB0aGlzLmxheWVycy5sZW5ndGggLSAxO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bmV4dDogKCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGRvbmUgPSBpIDwgMDtcblx0XHRcdFx0XHRyZXR1cm4geyBkb25lLCB2YWx1ZTogZG9uZSA/IHVuZGVmaW5lZCA6IHRoaXMubGF5ZXJzW2ktLV0gfTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEFuIGFsaWFzIGZvciBgYWRkKClgLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0xheWVyfE9iamVjdHxTdHJpbmd9IGxheWVyIC0gVGhlIGxheWVyLCBsYXllciBjb250cnVjdG9yIGFyZ3VtZW50cywgb3IgbGF5ZXIgaWQuXG5cdCAqIEByZXR1cm5zIHtMYXllcn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHNldChsYXllcikge1xuXHRcdHJldHVybiB0aGlzLmFkZChsYXllcik7XG5cdH1cblxuXHQvKipcblx0ICogQSByZXZlcnNlIGl0ZXJhdG9yLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0W1N5bWJvbC5pdGVyYXRvcl0oKSB7XG5cdFx0bGV0IGkgPSAwO1xuXHRcdHJldHVybiB7XG5cdFx0XHRuZXh0OiAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRvbmUgPSBpID49IHRoaXMubGF5ZXJzLmxlbmd0aDtcblx0XHRcdFx0cmV0dXJuIHsgZG9uZSwgdmFsdWU6IGRvbmUgPyB1bmRlZmluZWQgOiB0aGlzLmxheWVyc1tpKytdIH07XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgc3RyaW5nIHByZXByZXNlbnRhdGlvbiBvZiBlYWNoIGxheWVyLlxuXHQgKlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2luZGVudGF0aW9uPTJdIFRoZSBudW1iZXIgb2Ygc3BhY2VzIHRvIGluZGVudCB0aGUgSlNPTiBmb3JtYXR0ZWQgb3V0cHV0LlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0dG9TdHJpbmcoaW5kZW50YXRpb24gPSAyKSB7XG5cdFx0Y29uc3Qgb2JqID0ge307XG5cdFx0Zm9yIChjb25zdCBsYXllciBvZiB0aGlzLmxheWVycykge1xuXHRcdFx0Y29uc3QgY2ZnID0gbGF5ZXIuc3RvcmUuZ2V0KCk7XG5cdFx0XHRvYmpbU3RyaW5nKGxheWVyLmlkKV0gPSBjZmcgPT09IHVuZGVmaW5lZCA/IHt9IDogY2ZnO1xuXHRcdH1cblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLCBudWxsLCBNYXRoLm1heChpbmRlbnRhdGlvbiwgMCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYSB3YXRjaCBoYW5kbGVyIGZyb20gYWxsIGxheWVycy5cblx0ICpcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciAtIEEgY2FsbGJhY2sgdG8gZmlyZSB3aGVuIGEgY2hhbmdlIG9jY3Vycy5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHVud2F0Y2goaGFuZGxlcikge1xuXHRcdGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgaGFuZGxlciB0byBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLndhdGNoZXJzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy53YXRjaGVyc1tpXS5oYW5kbGVyID09PSBoYW5kbGVyKSB7XG5cdFx0XHRcdHRoaXMud2F0Y2hlcnMuc3BsaWNlKGktLSwgMSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBsYXllciBvZiB0aGlzLmxheWVycykge1xuXHRcdFx0bGF5ZXIudW53YXRjaChoYW5kbGVyKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXJzIGEgd2F0Y2ggaGFuZGxlciBvbiBhbGwgbGF5ZXJzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0FycmF5LjxTdHJpbmc+fSBbZmlsdGVyXSAtIEEgcHJvcGVydHkgbmFtZSBvciBhcnJheSBvZiBuZXN0ZWQgcHJvcGVydGllcyB0byB3YXRjaC5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciAtIEEgY2FsbGJhY2sgdG8gZmlyZSB3aGVuIGEgY2hhbmdlIG9jY3Vycy5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHdhdGNoKGZpbHRlciwgaGFuZGxlcikge1xuXHRcdGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgaGFuZGxlciB0byBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXG5cdFx0bG9nKGBSZWdpc3RlcmluZyB3YXRjaGVyOiAke2hpZ2hsaWdodChgJHtoYW5kbGVyLm5hbWV9KClgKX0gJHtmaWx0ZXIubGVuZ3RoID8gZmlsdGVyLmpvaW4oJy4nKSA6ICcnfWApO1xuXG5cdFx0dGhpcy53YXRjaGVycy5wdXNoKHsgZmlsdGVyLCBmaWx0ZXJIYXNoOiBoYXNoVmFsdWUoZmlsdGVyKSwgaGFuZGxlciB9KTtcblxuXHRcdGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy5sYXllcnMpIHtcblx0XHRcdGxheWVyLndhdGNoKGZpbHRlciwgaGFuZGxlcik7XG5cdFx0fVxuXHR9XG59XG4iXSwiZmlsZSI6ImxheWVyLWxpc3QuanMifQ== |
@@ -12,3 +12,3 @@ "use strict"; | ||
var _joi = _interopRequireDefault(require("@hapi/joi")); | ||
var _joi = _interopRequireDefault(require("joi")); | ||
@@ -23,3 +23,3 @@ var _jsonStore = _interopRequireDefault(require("./stores/json-store")); | ||
var _values = _interopRequireDefault(require("@hapi/joi/lib/values")); | ||
var _values = _interopRequireDefault(require("joi/lib/values")); | ||
@@ -191,4 +191,16 @@ var _util = require("./util"); | ||
if (opts.data) { | ||
this.store.merge(opts.data); | ||
let { | ||
data | ||
} = opts; | ||
if (data) { | ||
if (typeof data !== 'object') { | ||
throw new TypeError('Expected layer data to be an object'); | ||
} | ||
if (data && typeof data === 'object') { | ||
this.merge(this.namespace ? { | ||
[this.namespace]: data | ||
} : data); | ||
} | ||
} | ||
@@ -201,2 +213,4 @@ | ||
if (env) { | ||
// we can merge the environment variable values directly into the store since we've | ||
// already done the validation in `getSchemaInitialValues()` | ||
this.store.merge(env); | ||
@@ -209,3 +223,3 @@ } | ||
* @param {Array.<String>} key - The key to set. | ||
* @returns {Layer} | ||
* @returns {Boolean} | ||
*/ | ||
@@ -227,3 +241,8 @@ | ||
}); | ||
return this.store.delete(key); | ||
if (key = this.resolveKey(key)) { | ||
return this.store.delete(key); | ||
} | ||
return false; | ||
} | ||
@@ -241,3 +260,21 @@ /** | ||
get(key) { | ||
return this.store && this.store.get(key); | ||
const nsKey = this.resolveKey(key); | ||
if (nsKey !== null) { | ||
let value = this.store.get(nsKey); | ||
if (!(nsKey === null || nsKey === void 0 ? void 0 : nsKey.length) && value === undefined) { | ||
// set to empty object if value | ||
value = {}; | ||
} | ||
if (key.length && this.namespace && key[0] === this.namespace) { | ||
// return a specific value | ||
return value; | ||
} | ||
return this.namespace ? { | ||
[this.namespace]: value | ||
} : value; | ||
} | ||
} | ||
@@ -254,3 +291,13 @@ /** | ||
has(key) { | ||
return this.store.has(key); | ||
const nsKey = this.resolveKey(key); | ||
if (nsKey !== null) { | ||
if (key.length === 1 && this.namespace && key[0] === this.namespace) { | ||
return true; | ||
} | ||
return this.store.has(nsKey); | ||
} | ||
return false; | ||
} | ||
@@ -282,10 +329,10 @@ /** | ||
if (!graceful || exists) { | ||
this.store.load({ | ||
file, | ||
ns: this.namespace, | ||
validate: value => this.validate({ | ||
action: 'load', | ||
message: 'Failed to load config file', | ||
value | ||
}) | ||
this.store.load(file); | ||
const data = this.store.get(); | ||
this.validate({ | ||
action: 'load', | ||
message: 'Failed to load config file', | ||
value: this.namespace ? { | ||
[this.namespace]: data | ||
} : data | ||
}); | ||
@@ -404,6 +451,9 @@ } | ||
this.schema = schema; | ||
this.schema = schema; // when loadSchema() is called from the constructor, `this.store` will not have been set | ||
// yet, so this is really for the public API | ||
if (this.store) { | ||
this.store.schema = schema; | ||
var _schema$$_terms$keys, _schema$$_terms$keys$; | ||
this.store.schema = this.namespace && ((_schema$$_terms$keys = schema.$_terms.keys) === null || _schema$$_terms$keys === void 0 ? void 0 : (_schema$$_terms$keys$ = _schema$$_terms$keys.find(s => s.key === this.namespace)) === null || _schema$$_terms$keys$ === void 0 ? void 0 : _schema$$_terms$keys$.schema) || schema; | ||
} | ||
@@ -428,9 +478,30 @@ | ||
this.validate({ | ||
value, | ||
action: 'merge' | ||
action: 'merge', | ||
value | ||
}); | ||
this.store.merge(value); | ||
if ((!this.namespace || (value = value[this.namespace])) && typeof value === 'object') { | ||
this.store.merge(value); | ||
} | ||
return this; | ||
} | ||
/** | ||
* Checks if this layer has a namespaces and if the key has the namespace, then returns the | ||
* resolved key. | ||
* | ||
* @param {Array.<String>} key - The key to resolve. | ||
* @returns {Array.<String>} | ||
* @access private | ||
*/ | ||
resolveKey(key) { | ||
if (key.length && this.namespace) { | ||
return key[0] === this.namespace ? key.slice(1) : null; | ||
} | ||
return key; | ||
} | ||
/** | ||
* Saves a specific layer's store to disk. | ||
@@ -473,3 +544,7 @@ * | ||
}); | ||
this.store.set(key, value); | ||
if (key = this.resolveKey(key)) { | ||
this.store.set(key, value); | ||
} | ||
return this; | ||
@@ -534,7 +609,5 @@ } | ||
get validate() { | ||
return args => { | ||
return typeof this.validator === 'function' ? this.validator(args) : (0, _util.validate)(_objectSpread({ | ||
schemas: [this.schema] | ||
}, args)); | ||
}; | ||
return args => (this.validator || _util.validate)(_objectSpread({ | ||
schemas: this.schema ? [this.schema] : [] | ||
}, args)); | ||
} | ||
@@ -570,2 +643,2 @@ | ||
exports.default = Layer; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxheWVyLmpzIl0sIm5hbWVzIjpbImxvZyIsImhpZ2hsaWdodCIsInNub29wbG9nZyIsInN0eWxlcyIsIkxheWVyIiwiY29uc3RydWN0b3IiLCJvcHRzIiwiTWFwIiwiYWxsb3dOdWxscyIsImlkIiwibmFtZXNwYWNlIiwib3JkZXIiLCJyZWFkb25seSIsInN0YXRpYyIsInZhbGlkYXRlIiwidW5kZWZpbmVkIiwiVHlwZUVycm9yIiwiZGVmYXVsdHMiLCJlbnYiLCJzY2hlbWEiLCJsb2FkU2NoZW1hIiwic3RvcmUiLCJTdG9yZSIsImRhdGEiLCJKU09OU3RvcmUiLCJtZXJnZSIsImZpbGUiLCJsb2FkIiwiZ3JhY2VmdWwiLCJkZWxldGUiLCJrZXkiLCJFcnJvciIsIlN0cmluZyIsImxlbmd0aCIsImFjdGlvbiIsImdldCIsImhhcyIsImV4aXN0cyIsImZzIiwiZXhpc3RzU3luYyIsIm5zIiwidmFsdWUiLCJtZXNzYWdlIiwiZXh0IiwicGF0aCIsImV4dG5hbWUiLCJyZWFkSnNvblN5bmMiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJjdHgiLCJKb2kiLCJpc1NjaGVtYSIsInR5cGUiLCJmb3VuZCIsIml0ZW0iLCIkX3Rlcm1zIiwia2V5cyIsIm9iamVjdCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImNvbXBpbGUiLCJ3YWxrIiwiX3ZhbGlkcyIsImFkZCIsIlZhbHVlcyIsInNhdmUiLCJzZXQiLCJ0b1N0cmluZyIsImFyZ3MiLCJ1bmxvYWQiLCJ1bndhdGNoIiwiaGFuZGxlciIsIndyYXBwZWQiLCJ3YXRjaGVyTWFwIiwidmFsaWRhdG9yIiwic2NoZW1hcyIsImZuIiwid2F0Y2giLCJmaWx0ZXIiLCJvYmoiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7OztBQUVBLE1BQU07QUFBRUEsRUFBQUE7QUFBRixJQUFVLHdCQUFVLFlBQVYsRUFBd0IsVUFBeEIsQ0FBaEI7QUFDQSxNQUFNO0FBQUVDLEVBQUFBO0FBQUYsSUFBZ0JDLG1CQUFVQyxNQUFoQztBQUVBOzs7O0FBR2UsTUFBTUMsS0FBTixDQUFZO0FBQzFCOzs7OztBQU1BOzs7Ozs7QUFPQTs7Ozs7QUFNQTs7Ozs7QUFNQTs7Ozs7QUFNQTs7Ozs7QUFNQTs7Ozs7QUFNQTs7Ozs7QUFNQTs7Ozs7QUFNQTs7Ozs7O0FBT0E7Ozs7OztBQU9BOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQUMsRUFBQUEsV0FBVyxDQUFDQyxJQUFJLEdBQUcsRUFBUixFQUFZO0FBQUEsd0NBckZWLEtBcUZVOztBQUFBLGtDQTlFaEIsSUE4RWdCOztBQUFBLGdDQXhFbEIsSUF3RWtCOztBQUFBLHVDQWxFWCxJQWtFVzs7QUFBQSxtQ0E1RGYsQ0E0RGU7O0FBQUEsc0NBdERaLEtBc0RZOztBQUFBLG9DQWhEZCxJQWdEYzs7QUFBQSxvQ0ExQ2QsS0EwQ2M7O0FBQUEsbUNBcENmLElBb0NlOztBQUFBLHVDQTdCWCxJQTZCVzs7QUFBQSx3Q0F0QlYsSUFBSUMsR0FBSixFQXNCVTs7QUFDdEIsU0FBS0MsVUFBTCxHQUFrQkYsSUFBSSxDQUFDRSxVQUF2QjtBQUNBLFNBQUtDLEVBQUwsR0FBa0JILElBQUksQ0FBQ0csRUFBTCxJQUFXLElBQTdCO0FBQ0EsU0FBS0MsU0FBTCxHQUFrQkosSUFBSSxDQUFDSSxTQUF2QjtBQUNBLFNBQUtDLEtBQUwsR0FBa0JMLElBQUksQ0FBQ0ssS0FBTCxJQUFjLENBQWhDO0FBQ0EsU0FBS0MsUUFBTCxHQUFrQixDQUFDLENBQUNOLElBQUksQ0FBQ00sUUFBekI7QUFDQSxTQUFLQyxNQUFMLEdBQWtCLENBQUMsQ0FBQ1AsSUFBSSxDQUFDTyxNQUF6Qjs7QUFFQSxRQUFJUCxJQUFJLENBQUNRLFFBQUwsS0FBa0JDLFNBQXRCLEVBQWlDO0FBQ2hDLFVBQUksT0FBT1QsSUFBSSxDQUFDUSxRQUFaLEtBQXlCLFVBQTdCLEVBQXlDO0FBQ3hDLGNBQU0sSUFBSUUsU0FBSixDQUFjLDZDQUFkLENBQU47QUFDQTs7QUFDRCxXQUFLRixRQUFMLEdBQWdCUixJQUFJLENBQUNRLFFBQXJCO0FBQ0E7O0FBRUQsUUFBSUcsUUFBSixFQUFjQyxHQUFkOztBQUVBLFFBQUlaLElBQUksQ0FBQ2EsTUFBVCxFQUFpQjtBQUNoQixXQUFLQyxVQUFMLENBQWdCZCxJQUFJLENBQUNhLE1BQXJCO0FBQ0EsT0FBQztBQUFFRixRQUFBQSxRQUFGO0FBQVlDLFFBQUFBO0FBQVosVUFBb0Isa0NBQXVCLEtBQUtDLE1BQTVCLENBQXJCO0FBQ0E7O0FBRUQsUUFBSWIsSUFBSSxDQUFDZSxLQUFMLFlBQXNCQyxjQUExQixFQUFpQztBQUNoQyxXQUFLRCxLQUFMLEdBQWFmLElBQUksQ0FBQ2UsS0FBbEI7O0FBQ0EsVUFBSSxLQUFLRixNQUFULEVBQWlCO0FBQ2hCLGFBQUtFLEtBQUwsQ0FBV0YsTUFBWCxHQUFvQixLQUFLQSxNQUF6QjtBQUNBO0FBQ0QsS0FMRCxNQUtPLElBQUksT0FBT2IsSUFBSSxDQUFDZSxLQUFaLEtBQXNCLFVBQTFCLEVBQXNDO0FBQzVDLFdBQUtBLEtBQUwsR0FBYSxJQUFJZixJQUFJLENBQUNlLEtBQVQsQ0FBZTtBQUFFRSxRQUFBQSxJQUFJLEVBQUVOLFFBQVI7QUFBa0JFLFFBQUFBLE1BQU0sRUFBRSxLQUFLQTtBQUEvQixPQUFmLENBQWI7QUFDQSxLQUZNLE1BRUE7QUFDTixXQUFLRSxLQUFMLEdBQWEsSUFBSUcsa0JBQUosQ0FBY2xCLElBQUksQ0FBQ2UsS0FBTCxJQUFjO0FBQUVFLFFBQUFBLElBQUksRUFBRU4sUUFBUjtBQUFrQkUsUUFBQUEsTUFBTSxFQUFFLEtBQUtBO0FBQS9CLE9BQTVCLENBQWI7QUFDQTs7QUFFRCxRQUFJYixJQUFJLENBQUNpQixJQUFULEVBQWU7QUFDZCxXQUFLRixLQUFMLENBQVdJLEtBQVgsQ0FBaUJuQixJQUFJLENBQUNpQixJQUF0QjtBQUNBOztBQUVELFFBQUlqQixJQUFJLENBQUNvQixJQUFULEVBQWU7QUFDZCxXQUFLQyxJQUFMLENBQVVyQixJQUFJLENBQUNvQixJQUFmLEVBQXFCcEIsSUFBSSxDQUFDc0IsUUFBTCxLQUFrQixLQUF2QztBQUNBOztBQUVELFFBQUlWLEdBQUosRUFBUztBQUNSLFdBQUtHLEtBQUwsQ0FBV0ksS0FBWCxDQUFpQlAsR0FBakI7QUFDQTtBQUNEO0FBRUQ7Ozs7Ozs7O0FBTUFXLEVBQUFBLE1BQU0sQ0FBQ0MsR0FBRCxFQUFNO0FBQ1gsUUFBSSxLQUFLbEIsUUFBVCxFQUFtQjtBQUNsQixZQUFNLElBQUltQixLQUFKLENBQVcsVUFBU0MsTUFBTSxDQUFDLEtBQUt2QixFQUFOLENBQVUsZUFBcEMsQ0FBTjtBQUNBOztBQUVELFFBQUksQ0FBQ3FCLEdBQUQsSUFBUSxDQUFDQSxHQUFHLENBQUNHLE1BQWpCLEVBQXlCO0FBQ3hCLFlBQU0sSUFBSUYsS0FBSixDQUFVLDZCQUFWLENBQU47QUFDQTs7QUFFRCxTQUFLakIsUUFBTCxDQUFjO0FBQUVvQixNQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQkosTUFBQUE7QUFBcEIsS0FBZDtBQUNBLFdBQU8sS0FBS1QsS0FBTCxDQUFXUSxNQUFYLENBQWtCQyxHQUFsQixDQUFQO0FBQ0E7QUFFRDs7Ozs7Ozs7OztBQVFBSyxFQUFBQSxHQUFHLENBQUNMLEdBQUQsRUFBTTtBQUNSLFdBQU8sS0FBS1QsS0FBTCxJQUFjLEtBQUtBLEtBQUwsQ0FBV2MsR0FBWCxDQUFlTCxHQUFmLENBQXJCO0FBQ0E7QUFFRDs7Ozs7Ozs7O0FBT0FNLEVBQUFBLEdBQUcsQ0FBQ04sR0FBRCxFQUFNO0FBQ1IsV0FBTyxLQUFLVCxLQUFMLENBQVdlLEdBQVgsQ0FBZU4sR0FBZixDQUFQO0FBQ0E7QUFFRDs7Ozs7Ozs7Ozs7QUFTQUgsRUFBQUEsSUFBSSxDQUFDRCxJQUFELEVBQU9FLFFBQVAsRUFBaUI7QUFDcEIsUUFBSSxDQUFDRixJQUFELElBQVMsT0FBT0EsSUFBUCxLQUFnQixRQUE3QixFQUF1QztBQUN0QyxZQUFNLElBQUlWLFNBQUosQ0FBYywwQ0FBZCxDQUFOO0FBQ0E7O0FBRUQsVUFBTXFCLE1BQU0sR0FBR0MsaUJBQUdDLFVBQUgsQ0FBY2IsSUFBZCxDQUFmOztBQUNBLFNBQUtBLElBQUwsR0FBWUEsSUFBWjs7QUFFQSxRQUFJRSxRQUFRLElBQUksQ0FBQ1MsTUFBakIsRUFBeUI7QUFDeEJyQyxNQUFBQSxHQUFHLENBQUUsR0FBRWdDLE1BQU0sQ0FBQyxLQUFLdkIsRUFBTixDQUFVLGtEQUFpRFIsU0FBUyxDQUFDeUIsSUFBRCxDQUFPLEVBQXJGLENBQUg7QUFDQTs7QUFFRCxRQUFJLENBQUNFLFFBQUQsSUFBYVMsTUFBakIsRUFBeUI7QUFDeEIsV0FBS2hCLEtBQUwsQ0FBV00sSUFBWCxDQUFnQjtBQUNmRCxRQUFBQSxJQURlO0FBRWZjLFFBQUFBLEVBQUUsRUFBRSxLQUFLOUIsU0FGTTtBQUdmSSxRQUFBQSxRQUFRLEVBQUUyQixLQUFLLElBQUksS0FBSzNCLFFBQUwsQ0FBYztBQUFFb0IsVUFBQUEsTUFBTSxFQUFFLE1BQVY7QUFBa0JRLFVBQUFBLE9BQU8sRUFBRSw0QkFBM0I7QUFBeURELFVBQUFBO0FBQXpELFNBQWQ7QUFISixPQUFoQjtBQUtBOztBQUVELFdBQU8sSUFBUDtBQUNBO0FBRUQ7Ozs7Ozs7OztBQU9BckIsRUFBQUEsVUFBVSxDQUFDRCxNQUFELEVBQVM7QUFDbEIsUUFBSSxDQUFDQSxNQUFMLEVBQWE7QUFDWixZQUFNLElBQUlILFNBQUosQ0FBYyx5Q0FBZCxDQUFOO0FBQ0E7O0FBRUQsUUFBSSxPQUFPRyxNQUFQLEtBQWtCLFFBQXRCLEVBQWdDO0FBQy9CLFVBQUksQ0FBQ21CLGlCQUFHQyxVQUFILENBQWNwQixNQUFkLENBQUwsRUFBNEI7QUFDM0IsY0FBTSxJQUFJWSxLQUFKLENBQVcsbUJBQWtCWixNQUFPLEVBQXBDLENBQU47QUFDQTs7QUFFRCxZQUFNd0IsR0FBRyxHQUFHQyxjQUFLQyxPQUFMLENBQWExQixNQUFiLENBQVo7O0FBQ0EsVUFBSXdCLEdBQUcsS0FBSyxLQUFSLElBQWlCQSxHQUFHLEtBQUssT0FBN0IsRUFBc0M7QUFDckMsY0FBTSxJQUFJWixLQUFKLENBQVcsaUNBQWdDWSxHQUFJLEVBQS9DLENBQU47QUFDQTs7QUFFRDNDLE1BQUFBLEdBQUcsQ0FBRSxHQUFFZ0MsTUFBTSxDQUFDLEtBQUt2QixFQUFOLENBQVUsWUFBV1IsU0FBUyxDQUFDa0IsTUFBRCxDQUFTLEVBQWpELENBQUg7O0FBQ0EsVUFBSXdCLEdBQUcsS0FBSyxPQUFaLEVBQXFCO0FBQ3BCLFlBQUk7QUFDSHhCLFVBQUFBLE1BQU0sR0FBR21CLGlCQUFHUSxZQUFILENBQWdCM0IsTUFBaEIsQ0FBVDtBQUNBLFNBRkQsQ0FFRSxPQUFPNEIsQ0FBUCxFQUFVO0FBQ1gsZ0JBQU0sSUFBSWhCLEtBQUosQ0FBVyxxQ0FBb0NnQixDQUFDLENBQUNMLE9BQVEsRUFBekQsQ0FBTjtBQUNBO0FBQ0QsT0FORCxNQU1PLElBQUlDLEdBQUcsS0FBSyxLQUFaLEVBQW1CO0FBQ3pCLFlBQUk7QUFDSHhCLFVBQUFBLE1BQU0sR0FBRywwQkFBWUEsTUFBWixDQUFUO0FBQ0EsU0FGRCxDQUVFLE9BQU80QixDQUFQLEVBQVU7QUFDWCxnQkFBTSxJQUFJaEIsS0FBSixDQUFXLG1DQUFrQ2dCLENBQUMsQ0FBQ0wsT0FBUSxFQUF2RCxDQUFOO0FBQ0EsU0FMd0IsQ0FPekI7OztBQUNBLFlBQUl2QixNQUFNLElBQUksT0FBT0EsTUFBUCxLQUFrQixRQUE1QixJQUF3Q0EsTUFBTSxDQUFDNkIsVUFBL0MsSUFBNkQ3QixNQUFNLENBQUM4QixPQUF4RSxFQUFpRjtBQUNoRjlCLFVBQUFBLE1BQU0sR0FBR0EsTUFBTSxDQUFDOEIsT0FBaEI7QUFDQTs7QUFFRCxZQUFJLE9BQU85QixNQUFQLEtBQWtCLFVBQXRCLEVBQWtDO0FBQ2pDQSxVQUFBQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQztBQUFFK0IsWUFBQUEsR0FBRyxFQUFFLElBQVA7QUFBYUMsWUFBQUEsR0FBRyxFQUFIQTtBQUFiLFdBQUQsQ0FBZjtBQUNBO0FBQ0Q7QUFDRDs7QUFFRCxRQUFJLENBQUNoQyxNQUFELElBQVcsT0FBT0EsTUFBUCxLQUFrQixRQUFqQyxFQUEyQztBQUMxQyxZQUFNLElBQUlILFNBQUosQ0FBYyx5Q0FBZCxDQUFOO0FBQ0E7O0FBRUQsUUFBSW1DLGFBQUlDLFFBQUosQ0FBYWpDLE1BQWIsQ0FBSixFQUEwQjtBQUN6QixVQUFJQSxNQUFNLENBQUNrQyxJQUFQLEtBQWdCLFFBQXBCLEVBQThCO0FBQzdCLGNBQU0sSUFBSXJDLFNBQUosQ0FBYyxzQ0FBZCxDQUFOO0FBQ0E7O0FBRUQsVUFBSSxLQUFLTixTQUFULEVBQW9CO0FBQ25CLFlBQUk0QyxLQUFLLEdBQUcsS0FBWjs7QUFDQSxhQUFLLE1BQU1DLElBQVgsSUFBbUJwQyxNQUFNLENBQUNxQyxPQUFQLENBQWVDLElBQWxDLEVBQXdDO0FBQ3ZDLGNBQUlGLElBQUksQ0FBQ3pCLEdBQUwsS0FBYSxLQUFLcEIsU0FBbEIsSUFBK0I2QyxJQUFJLENBQUNwQyxNQUFMLENBQVlrQyxJQUFaLEtBQXFCLFFBQXhELEVBQWtFO0FBQ2pFQyxZQUFBQSxLQUFLLEdBQUcsSUFBUjtBQUNBO0FBQ0E7QUFDRDs7QUFDRCxZQUFJLENBQUNBLEtBQUwsRUFBWTtBQUNYbkMsVUFBQUEsTUFBTSxHQUFHZ0MsYUFBSU8sTUFBSixDQUFXO0FBQUUsYUFBQyxLQUFLaEQsU0FBTixHQUFrQlM7QUFBcEIsV0FBWCxDQUFUO0FBQ0E7QUFDRDtBQUNELEtBakJELE1BaUJPO0FBQ04sVUFBSSxLQUFLVCxTQUFMLElBQWtCLENBQUNpRCxNQUFNLENBQUNDLFNBQVAsQ0FBaUJDLGNBQWpCLENBQWdDQyxJQUFoQyxDQUFxQzNDLE1BQXJDLEVBQTZDLEtBQUtULFNBQWxELENBQXZCLEVBQXFGO0FBQ3BGUyxRQUFBQSxNQUFNLEdBQUc7QUFBRSxXQUFDLEtBQUtULFNBQU4sR0FBa0JTO0FBQXBCLFNBQVQ7QUFDQTs7QUFDRG5CLE1BQUFBLEdBQUcsQ0FBRSxHQUFFZ0MsTUFBTSxDQUFDLEtBQUt2QixFQUFOLENBQVUsc0JBQXBCLENBQUg7QUFDQVUsTUFBQUEsTUFBTSxHQUFHZ0MsYUFBSVksT0FBSixDQUFZNUMsTUFBWixDQUFUO0FBQ0E7O0FBRUQsUUFBSSxLQUFLWCxVQUFULEVBQXFCO0FBQ3BCUixNQUFBQSxHQUFHLENBQUUsR0FBRWdDLE1BQU0sQ0FBQyxLQUFLdkIsRUFBTixDQUFVLDBCQUFwQixDQUFIOztBQUNDLGdCQUFTdUQsSUFBVCxDQUFjN0MsTUFBZCxFQUFzQjtBQUN0QixZQUFJQSxNQUFNLENBQUM4QyxPQUFYLEVBQW9CO0FBQ25COUMsVUFBQUEsTUFBTSxDQUFDOEMsT0FBUCxDQUFlQyxHQUFmLENBQW1CLElBQW5CO0FBQ0EsU0FGRCxNQUVPO0FBQ04vQyxVQUFBQSxNQUFNLENBQUM4QyxPQUFQLEdBQWlCLElBQUlFLGVBQUosQ0FBVyxDQUFFLElBQUYsQ0FBWCxDQUFqQjtBQUNBOztBQUVELFlBQUloRCxNQUFNLENBQUNrQyxJQUFQLEtBQWdCLFFBQWhCLElBQTRCbEMsTUFBTSxDQUFDcUMsT0FBUCxDQUFlQyxJQUEvQyxFQUFxRDtBQUNwRCxlQUFLLE1BQU1GLElBQVgsSUFBbUJwQyxNQUFNLENBQUNxQyxPQUFQLENBQWVDLElBQWxDLEVBQXdDO0FBQ3ZDTyxZQUFBQSxJQUFJLENBQUNULElBQUksQ0FBQ3BDLE1BQU4sQ0FBSjtBQUNBO0FBQ0Q7QUFDRCxPQVpBLEVBWUNBLE1BWkQsQ0FBRDtBQWFBOztBQUVELFNBQUtBLE1BQUwsR0FBY0EsTUFBZDs7QUFFQSxRQUFJLEtBQUtFLEtBQVQsRUFBZ0I7QUFDZixXQUFLQSxLQUFMLENBQVdGLE1BQVgsR0FBb0JBLE1BQXBCO0FBQ0E7O0FBRUQsV0FBTyxJQUFQO0FBQ0E7QUFFRDs7Ozs7Ozs7O0FBT0FNLEVBQUFBLEtBQUssQ0FBQ2dCLEtBQUQsRUFBUTtBQUNaLFFBQUksS0FBSzdCLFFBQVQsRUFBbUI7QUFDbEIsWUFBTSxJQUFJbUIsS0FBSixDQUFXLFVBQVNDLE1BQU0sQ0FBQyxLQUFLdkIsRUFBTixDQUFVLGVBQXBDLENBQU47QUFDQTs7QUFDRCxTQUFLSyxRQUFMLENBQWM7QUFBRTJCLE1BQUFBLEtBQUY7QUFBU1AsTUFBQUEsTUFBTSxFQUFFO0FBQWpCLEtBQWQ7QUFDQSxTQUFLYixLQUFMLENBQVdJLEtBQVgsQ0FBaUJnQixLQUFqQjtBQUNBLFdBQU8sSUFBUDtBQUNBO0FBRUQ7Ozs7Ozs7OztBQU9BMkIsRUFBQUEsSUFBSSxDQUFDMUMsSUFBRCxFQUFPO0FBQ1YxQixJQUFBQSxHQUFHLENBQUUsR0FBRWdDLE1BQU0sQ0FBQyxLQUFLdkIsRUFBTixDQUFVLG9CQUFtQlIsU0FBUyxDQUFDeUIsSUFBSSxJQUFJLEtBQUtBLElBQWQsQ0FBb0IsRUFBcEUsQ0FBSDtBQUNBLFNBQUtMLEtBQUwsQ0FBVytDLElBQVgsQ0FBZ0IxQyxJQUFJLElBQUksS0FBS0EsSUFBN0I7QUFDQSxXQUFPLElBQVA7QUFDQTtBQUVEOzs7Ozs7Ozs7O0FBUUEyQyxFQUFBQSxHQUFHLENBQUN2QyxHQUFELEVBQU1XLEtBQU4sRUFBYVAsTUFBTSxHQUFHLEtBQXRCLEVBQTZCO0FBQy9CLFFBQUksS0FBS3RCLFFBQVQsRUFBbUI7QUFDbEIsWUFBTSxJQUFJbUIsS0FBSixDQUFXLFVBQVNDLE1BQU0sQ0FBQyxLQUFLdkIsRUFBTixDQUFVLGVBQXBDLENBQU47QUFDQTs7QUFFRCxRQUFJLENBQUNxQixHQUFELElBQVEsQ0FBQ0EsR0FBRyxDQUFDRyxNQUFqQixFQUF5QjtBQUN4QixZQUFNLElBQUlGLEtBQUosQ0FBVSw2QkFBVixDQUFOO0FBQ0E7O0FBRUQsU0FBS2pCLFFBQUwsQ0FBYztBQUFFb0IsTUFBQUEsTUFBRjtBQUFVSixNQUFBQSxHQUFWO0FBQWVXLE1BQUFBO0FBQWYsS0FBZDtBQUNBLFNBQUtwQixLQUFMLENBQVdnRCxHQUFYLENBQWV2QyxHQUFmLEVBQW9CVyxLQUFwQjtBQUNBLFdBQU8sSUFBUDtBQUNBO0FBRUQ7Ozs7Ozs7OztBQU9BNkIsRUFBQUEsUUFBUSxDQUFDLEdBQUdDLElBQUosRUFBVTtBQUFBOztBQUNqQixXQUFPLHFCQUFLbEQsS0FBTCw0REFBWWlELFFBQVosQ0FBcUIsR0FBR0MsSUFBeEIsTUFBaUMsRUFBeEM7QUFDQTtBQUVEOzs7Ozs7OztBQU1BQyxFQUFBQSxNQUFNLEdBQUc7QUFDUixRQUFJLEtBQUszRCxNQUFULEVBQWlCO0FBQ2hCLFlBQU0sSUFBSWtCLEtBQUosQ0FBVSw0QkFBVixDQUFOO0FBQ0E7O0FBQ0QsV0FBTyxJQUFQO0FBQ0E7QUFFRDs7Ozs7Ozs7O0FBT0EwQyxFQUFBQSxPQUFPLENBQUNDLE9BQUQsRUFBVTtBQUNoQixVQUFNQyxPQUFPLEdBQUcsS0FBS0MsVUFBTCxDQUFnQnpDLEdBQWhCLENBQW9CdUMsT0FBcEIsQ0FBaEI7O0FBQ0EsUUFBSUMsT0FBSixFQUFhO0FBQ1osV0FBS3RELEtBQUwsQ0FBV29ELE9BQVgsQ0FBbUJFLE9BQW5CO0FBQ0EsV0FBS0MsVUFBTCxDQUFnQi9DLE1BQWhCLENBQXVCNkMsT0FBdkI7QUFDQTs7QUFDRCxXQUFPLElBQVA7QUFDQTtBQUVEOzs7Ozs7OztBQU1BLE1BQUk1RCxRQUFKLEdBQWU7QUFDZCxXQUFPeUQsSUFBSSxJQUFJO0FBQ2QsYUFBTyxPQUFPLEtBQUtNLFNBQVosS0FBMEIsVUFBMUIsR0FDSixLQUFLQSxTQUFMLENBQWVOLElBQWYsQ0FESSxHQUVKO0FBQVdPLFFBQUFBLE9BQU8sRUFBRSxDQUFFLEtBQUszRCxNQUFQO0FBQXBCLFNBQXdDb0QsSUFBeEMsRUFGSDtBQUdBLEtBSkQ7QUFLQTs7QUFFRCxNQUFJekQsUUFBSixDQUFhaUUsRUFBYixFQUFpQjtBQUNoQixRQUFJLENBQUNBLEVBQUQsSUFBTyxPQUFPQSxFQUFQLEtBQWMsVUFBekIsRUFBcUM7QUFDcEMsWUFBTSxJQUFJL0QsU0FBSixDQUFjLHFDQUFkLENBQU47QUFDQTs7QUFDRCxTQUFLNkQsU0FBTCxHQUFpQkUsRUFBakI7QUFDQTtBQUVEOzs7Ozs7Ozs7O0FBUUFDLEVBQUFBLEtBQUssQ0FBQ0MsTUFBRCxFQUFTUCxPQUFULEVBQWtCO0FBQ3RCLFVBQU1DLE9BQU8sR0FBR08sR0FBRyxJQUFJUixPQUFPLENBQUNRLEdBQUQsRUFBTSxJQUFOLENBQTlCOztBQUNBLFNBQUtOLFVBQUwsQ0FBZ0JQLEdBQWhCLENBQW9CSyxPQUFwQixFQUE2QkMsT0FBN0I7QUFDQSxTQUFLdEQsS0FBTCxDQUFXMkQsS0FBWCxDQUFpQkMsTUFBakIsRUFBeUJOLE9BQXpCO0FBQ0EsV0FBTyxJQUFQO0FBQ0E7O0FBcmJ5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgaW1wb3J0RnJlc2ggZnJvbSAnaW1wb3J0LWZyZXNoJztcbmltcG9ydCBKb2kgZnJvbSAnQGhhcGkvam9pJztcbmltcG9ydCBKU09OU3RvcmUgZnJvbSAnLi9zdG9yZXMvanNvbi1zdG9yZSc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBzbm9vcGxvZ2cgZnJvbSAnc25vb3Bsb2dnJztcbmltcG9ydCBTdG9yZSBmcm9tICcuL3N0b3JlJztcbmltcG9ydCBWYWx1ZXMgZnJvbSAnQGhhcGkvam9pL2xpYi92YWx1ZXMnO1xuaW1wb3J0IHsgZ2V0U2NoZW1hSW5pdGlhbFZhbHVlcywgdmFsaWRhdGUgfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCB7IGxvZyB9ID0gc25vb3Bsb2dnKCdjb25maWcta2l0JykoJ2pzLXN0b3JlJyk7XG5jb25zdCB7IGhpZ2hsaWdodCB9ID0gc25vb3Bsb2dnLnN0eWxlcztcblxuLyoqXG4gKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIGxheWVyLiBUaGUgbGF5ZXIncyBkYXRhIGlzIGxvY2F0ZWQgaW4gdGhlIGxheWVyJ3Mgc3RvcmUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExheWVyIHtcblx0LyoqXG5cdCAqIEZvcmNlcyBhbGwgbm9kZXMgb2YgYSBzY2hlbWEgdG8gYWxsb3cgbnVsbHMuXG5cdCAqIEB0eXBlIHtCb29sZWFufVxuXHQgKi9cblx0YWxsb3dOdWxscyA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBUaGUgcGF0aCB0byB0aGUgZmlsZSB0byB3cml0ZSB0aGUgY29uZmlnIGZpbGUgdG8uIFRoaXMgdmFsdWUgY2FuIGJlIG92ZXJ3cml0dGVuIHdpdGggYSBmaWxlXG5cdCAqIHBhdGggc3BlY2lmaWVkIHBhc3NlZCBpbiB3aGVuIHNhdmluZy5cblx0ICogQHBhcmFtIHtTdHJpbmd9XG5cdCAqL1xuXHRmaWxlID0gbnVsbDtcblxuXHQvKipcblx0ICogVGhlIGxheWVyIGlkZW50aWZpZXIuXG5cdCAqIEB0eXBlIHtTdHJpbmd8U3ltYm9sfVxuXHQgKi9cblx0aWQgPSBudWxsO1xuXG5cdC8qKlxuXHQgKiBBbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBzY29wZSBlbmNvbXBhc3NpbmcgdGhpcyBsYXllcidzIGRhdGEgYW5kIHNjaGVtYS5cblx0ICogQHR5cGUge1N0cmluZ31cblx0ICovXG5cdG5hbWVzcGFjZSA9IG51bGw7XG5cblx0LyoqXG5cdCAqIFRoZSBsYXllciBwcmVjZWRlbmNlIGluIHRoZSBsYXllciBsaXN0LlxuXHQgKiBAdHlwZSB7TnVtYmVyfVxuXHQgKi9cblx0b3JkZXIgPSAwO1xuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgaWYgdGhlIHZhbHVlcyBpbiB0aGUgc3RvcmUgY2FuIGJlIG1vZGlmaWVkLlxuXHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0ICovXG5cdHJlYWRvbmx5ID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFRoZSBKb2kgc2NoZW1hLlxuXHQgKiBAdHlwZSB7T2JqZWN0fVxuXHQgKi9cblx0c2NoZW1hID0gbnVsbDtcblxuXHQvKipcblx0ICogSW5kaWNhdGVzIGlmIHRoaXMgbGF5ZXIgY2FuIGJlIHVubG9hZGVkLlxuXHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0ICovXG5cdHN0YXRpYyA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBBIHJlZmVyZW5jZSB0byB0aGUgbGF5ZXIncyBkYXRhIHN0b3JlIGluc3RhbmNlLlxuXHQgKiBAdHlwZSB7U3RvcmV9XG5cdCAqL1xuXHRzdG9yZSA9IG51bGw7XG5cblx0LyoqXG5cdCAqIEEgY3VzdG9tIHZhbGlkYXRpb24gY2FsbGJhY2suIElmIG5vdCBzZXQsIGRlZmF1bHRzIHRvIHZhbGlkYXRpbmcgYWdhaW5zdCB0aGlzIGxheWVyJ3Ncblx0ICogc2NoZW1hLlxuXHQgKiBAdHlwZSB7RnVuY3Rpb259XG5cdCAqL1xuXHR2YWxpZGF0b3IgPSBudWxsO1xuXG5cdC8qKlxuXHQgKiBBIGxvb2t1cCB0YWJsZSBvZiBvcmlnaW5hbCB3YXRjaCBoYW5kbGVycyB0byB0aGVpciB3cmFwcGVkIGNvdW50ZXJwYXJ0cyBzbyB0aGF0IGl0IGNhblxuXHQgKiBhZGQgYSByZWZlcmVuY2UgdG8gdGhpcyBsYXllciB0byB0aGUgZXZlbnQgaGFuZGxlci5cblx0ICogQHR5cGUge01hcH1cblx0ICovXG5cdHdhdGNoZXJNYXAgPSBuZXcgTWFwKCk7XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBsYXllciwgbG9hZHMgYSBmaWxlLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIHNjaGVtYSBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuYWxsb3dOdWxsc10gLSBGb3JjZXMgYWxsIG5vZGVzIG9mIGEgc2NoZW1hIHRvIGFsbG93IG51bGxzLlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdHMuZGF0YV0gLSBEYXRhIHRvIGluaXRpYWxpemUgdGhlIGJhc2UgY29uZmlnIGxheWVyIHdpdGguXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5maWxlXSAtIFRoZSBmaWxlIGJhY2tpbmcgdGhpcyBsYXllcidzIHN0b3JlLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRzLmdyYWNlZnVsPXRydWVdIC0gVHJ5IHRvIGxvYWQgdGhlIGZpbGUsIGJ1dCBpZiBpdCBkb2Vzbid0IGV4aXN0LCB0aGVuXG5cdCAqIGdyYWNlZnVsbHkgaGFuZGxlIHRoZSBlcnJvci5cblx0ICogQHBhcmFtIHtTdHJpbmd8U3ltYm9sfSBbb3B0cy5pZF0gLSBUaGUgbGF5ZXIgaWQuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5uYW1lc3BhY2VdIC0gVGhlIG5hbWUgb2YgdGhlIHNjb3BlIGVuY29tcGFzc2luZyB0aGlzIGxheWVyJ3MgZGF0YSBhbmRcblx0ICogc2NoZW1hIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5vcmRlcj0wXSAtIFRoZSBsYXllciBwcmVjZWRlbmNlLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRzLnJlYWRvbmx5XSAtIEluZGljYXRlcyBpZiB0aGlzIGxheWVyJ3MgZGF0YSBjYW4gYmUgY2hhbmdlZC5cblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRzLnNjaGVtYV0gLSBBIEpvaSBzY2hlbWEgb3Igb2JqZWN0IHRvIGNvbXBpbGUgaW50byBhIEpvaSBzY2hlbWEuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuc3RhdGljXSAtIEluZGljYXRlcyBpZiB0aGlzIGxheWVyIGNhbiBiZSB1bmxvYWRlZC5cblx0ICogQHBhcmFtIHtTdG9yZX0gW29wdHMuc3RvcmVdIC0gVGhlIGRhdGEgc3RvcmUuIERlZmF1bHRzIHRvIGEgYEpTT05TdG9yZWAgaW5zdGFuY2UuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLnZhbGlkYXRlXSAtIEEgZnVuY3Rpb24gdG8gY2FsbCBhbmQgdmFsaWRhdGUgY2hhbmdlcyBhZ2FpbnN0IGEgc2NoZW1hLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG5cdFx0dGhpcy5hbGxvd051bGxzID0gb3B0cy5hbGxvd051bGxzO1xuXHRcdHRoaXMuaWQgICAgICAgICA9IG9wdHMuaWQgfHwgbnVsbDtcblx0XHR0aGlzLm5hbWVzcGFjZSAgPSBvcHRzLm5hbWVzcGFjZTtcblx0XHR0aGlzLm9yZGVyICAgICAgPSBvcHRzLm9yZGVyIHx8IDA7XG5cdFx0dGhpcy5yZWFkb25seSAgID0gISFvcHRzLnJlYWRvbmx5O1xuXHRcdHRoaXMuc3RhdGljICAgICA9ICEhb3B0cy5zdGF0aWM7XG5cblx0XHRpZiAob3B0cy52YWxpZGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAodHlwZW9mIG9wdHMudmFsaWRhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgdmFsaWRhdGUgY2FsbGJhY2sgdG8gYmUgYSBmdW5jdGlvbicpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy52YWxpZGF0ZSA9IG9wdHMudmFsaWRhdGU7XG5cdFx0fVxuXG5cdFx0bGV0IGRlZmF1bHRzLCBlbnY7XG5cblx0XHRpZiAob3B0cy5zY2hlbWEpIHtcblx0XHRcdHRoaXMubG9hZFNjaGVtYShvcHRzLnNjaGVtYSk7XG5cdFx0XHQoeyBkZWZhdWx0cywgZW52IH0gPSBnZXRTY2hlbWFJbml0aWFsVmFsdWVzKHRoaXMuc2NoZW1hKSk7XG5cdFx0fVxuXG5cdFx0aWYgKG9wdHMuc3RvcmUgaW5zdGFuY2VvZiBTdG9yZSkge1xuXHRcdFx0dGhpcy5zdG9yZSA9IG9wdHMuc3RvcmU7XG5cdFx0XHRpZiAodGhpcy5zY2hlbWEpIHtcblx0XHRcdFx0dGhpcy5zdG9yZS5zY2hlbWEgPSB0aGlzLnNjaGVtYTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBvcHRzLnN0b3JlID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR0aGlzLnN0b3JlID0gbmV3IG9wdHMuc3RvcmUoeyBkYXRhOiBkZWZhdWx0cywgc2NoZW1hOiB0aGlzLnNjaGVtYSB9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zdG9yZSA9IG5ldyBKU09OU3RvcmUob3B0cy5zdG9yZSB8fCB7IGRhdGE6IGRlZmF1bHRzLCBzY2hlbWE6IHRoaXMuc2NoZW1hIH0pO1xuXHRcdH1cblxuXHRcdGlmIChvcHRzLmRhdGEpIHtcblx0XHRcdHRoaXMuc3RvcmUubWVyZ2Uob3B0cy5kYXRhKTtcblx0XHR9XG5cblx0XHRpZiAob3B0cy5maWxlKSB7XG5cdFx0XHR0aGlzLmxvYWQob3B0cy5maWxlLCBvcHRzLmdyYWNlZnVsICE9PSBmYWxzZSk7XG5cdFx0fVxuXG5cdFx0aWYgKGVudikge1xuXHRcdFx0dGhpcy5zdG9yZS5tZXJnZShlbnYpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIGEgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQga2V5LlxuXHQgKlxuXHQgKiBAcGFyYW0ge0FycmF5LjxTdHJpbmc+fSBrZXkgLSBUaGUga2V5IHRvIHNldC5cblx0ICogQHJldHVybnMge0xheWVyfVxuXHQgKi9cblx0ZGVsZXRlKGtleSkge1xuXHRcdGlmICh0aGlzLnJlYWRvbmx5KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYExheWVyIFwiJHtTdHJpbmcodGhpcy5pZCl9XCIgaXMgcmVhZG9ubHlgKTtcblx0XHR9XG5cblx0XHRpZiAoIWtleSB8fCAha2V5Lmxlbmd0aCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIGNvbmZpZyBrZXknKTtcblx0XHR9XG5cblx0XHR0aGlzLnZhbGlkYXRlKHsgYWN0aW9uOiAnZGVsZXRlJywga2V5IH0pO1xuXHRcdHJldHVybiB0aGlzLnN0b3JlLmRlbGV0ZShrZXkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyBhIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIGtleS5cblx0ICpcblx0ICogQHBhcmFtIHtBcnJheS48U3RyaW5nPn0gW2tleV0gLSBUaGUga2V5IHRvIGdldC4gV2hlbiBgdW5kZWZpbmVkYCwgdGhlIGVudGlyZSBjb25maWcgaXNcblx0ICogcmV0dXJuZWQuXG5cdCAqIEByZXR1cm5zIHsqfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Z2V0KGtleSkge1xuXHRcdHJldHVybiB0aGlzLnN0b3JlICYmIHRoaXMuc3RvcmUuZ2V0KGtleSk7XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyBpZiBhIGtleSBpcyBzZXQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7QXJyYXkuPFN0cmluZz59IFtrZXldIC0gVGhlIGtleSB0byBjaGVjay5cblx0ICogQHJldHVybnMge0Jvb2xlYW59XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRoYXMoa2V5KSB7XG5cdFx0cmV0dXJuIHRoaXMuc3RvcmUuaGFzKGtleSk7XG5cdH1cblxuXHQvKipcblx0ICogTG9hZHMgYSBjb25maWcgZmlsZS5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IGZpbGUgLSBUaGUgcGF0aCB0byB0aGUgY29uZmlnIGZpbGUgdG8gbG9hZC5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbZ3JhY2VmdWw9ZmFsc2VdIC0gV2hlbiBgdHJ1ZWAsIGRvZXNuJ3QgZXJyb3IgaWYgdGhlIGNvbmZpZyBmaWxlIGRvZXMgbm90XG5cdCAqIGV4aXN0LlxuXHQgKiBAcmV0dXJucyB7TGF5ZXJ9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRsb2FkKGZpbGUsIGdyYWNlZnVsKSB7XG5cdFx0aWYgKCFmaWxlIHx8IHR5cGVvZiBmaWxlICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgY29uZmlnIGZpbGUgcGF0aCB0byBiZSBhIHN0cmluZycpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoZmlsZSk7XG5cdFx0dGhpcy5maWxlID0gZmlsZTtcblxuXHRcdGlmIChncmFjZWZ1bCAmJiAhZXhpc3RzKSB7XG5cdFx0XHRsb2coYCR7U3RyaW5nKHRoaXMuaWQpfSBHcmFjZWZ1bGx5IGhhbmRsaW5nIG5vbi1leGlzdGVudCBjb25maWcgZmlsZTogJHtoaWdobGlnaHQoZmlsZSl9YCk7XG5cdFx0fVxuXG5cdFx0aWYgKCFncmFjZWZ1bCB8fCBleGlzdHMpIHtcblx0XHRcdHRoaXMuc3RvcmUubG9hZCh7XG5cdFx0XHRcdGZpbGUsXG5cdFx0XHRcdG5zOiB0aGlzLm5hbWVzcGFjZSxcblx0XHRcdFx0dmFsaWRhdGU6IHZhbHVlID0+IHRoaXMudmFsaWRhdGUoeyBhY3Rpb246ICdsb2FkJywgbWVzc2FnZTogJ0ZhaWxlZCB0byBsb2FkIGNvbmZpZyBmaWxlJywgdmFsdWUgfSlcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIExvYWRzIGEgc2NoZW1hIGZyb20gYSBmaWxlIG9yIG9iamVjdC5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBzY2hlbWEgLSBUaGUgcGF0aCB0byB0aGUgY29uZmlnIGZpbGUgdG8gbG9hZCBvciBKb2kgc2NoZW1hLlxuXHQgKiBAcmV0dXJucyB7TGF5ZXJ9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRsb2FkU2NoZW1hKHNjaGVtYSkge1xuXHRcdGlmICghc2NoZW1hKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBzY2hlbWEgdG8gYmUgYW4gb2JqZWN0IG9yIGZpbGUnKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHNjaGVtYSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGlmICghZnMuZXhpc3RzU3luYyhzY2hlbWEpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgRmlsZSBub3QgZm91bmQ6ICR7c2NoZW1hfWApO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBleHQgPSBwYXRoLmV4dG5hbWUoc2NoZW1hKTtcblx0XHRcdGlmIChleHQgIT09ICcuanMnICYmIGV4dCAhPT0gJy5qc29uJykge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHNjaGVtYSBmaWxlIHR5cGU6ICR7ZXh0fWApO1xuXHRcdFx0fVxuXG5cdFx0XHRsb2coYCR7U3RyaW5nKHRoaXMuaWQpfSBMb2FkaW5nICR7aGlnaGxpZ2h0KHNjaGVtYSl9YCk7XG5cdFx0XHRpZiAoZXh0ID09PSAnLmpzb24nKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c2NoZW1hID0gZnMucmVhZEpzb25TeW5jKHNjaGVtYSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBwYXJzZSBzY2hlbWEganNvbiBmaWxlOiAke2UubWVzc2FnZX1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChleHQgPT09ICcuanMnKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c2NoZW1hID0gaW1wb3J0RnJlc2goc2NoZW1hKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlIHNjaGVtYSBqcyBmaWxlOiAke2UubWVzc2FnZX1gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGNoZWNrIGlmIHdlIGhhdmUgYSBiYWJlbCB0cmFuc3BpbGVkIGZpbGVcblx0XHRcdFx0aWYgKHNjaGVtYSAmJiB0eXBlb2Ygc2NoZW1hID09PSAnb2JqZWN0JyAmJiBzY2hlbWEuX19lc01vZHVsZSAmJiBzY2hlbWEuZGVmYXVsdCkge1xuXHRcdFx0XHRcdHNjaGVtYSA9IHNjaGVtYS5kZWZhdWx0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHR5cGVvZiBzY2hlbWEgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRzY2hlbWEgPSBzY2hlbWEoeyBjdHg6IHRoaXMsIEpvaSB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICghc2NoZW1hIHx8IHR5cGVvZiBzY2hlbWEgIT09ICdvYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBzY2hlbWEgdG8gYmUgYW4gb2JqZWN0IG9yIGZpbGUnKTtcblx0XHR9XG5cblx0XHRpZiAoSm9pLmlzU2NoZW1hKHNjaGVtYSkpIHtcblx0XHRcdGlmIChzY2hlbWEudHlwZSAhPT0gJ29iamVjdCcpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgc2NoZW1hIHJvb3QgdG8gYmUgYW4gb2JqZWN0Jyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLm5hbWVzcGFjZSkge1xuXHRcdFx0XHRsZXQgZm91bmQgPSBmYWxzZTtcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIHNjaGVtYS4kX3Rlcm1zLmtleXMpIHtcblx0XHRcdFx0XHRpZiAoaXRlbS5rZXkgPT09IHRoaXMubmFtZXNwYWNlICYmIGl0ZW0uc2NoZW1hLnR5cGUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFmb3VuZCkge1xuXHRcdFx0XHRcdHNjaGVtYSA9IEpvaS5vYmplY3QoeyBbdGhpcy5uYW1lc3BhY2VdOiBzY2hlbWEgfSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHRoaXMubmFtZXNwYWNlICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2NoZW1hLCB0aGlzLm5hbWVzcGFjZSkpIHtcblx0XHRcdFx0c2NoZW1hID0geyBbdGhpcy5uYW1lc3BhY2VdOiBzY2hlbWEgfTtcblx0XHRcdH1cblx0XHRcdGxvZyhgJHtTdHJpbmcodGhpcy5pZCl9IENvbXBpbGluZyBzY2hlbWEuLi5gKTtcblx0XHRcdHNjaGVtYSA9IEpvaS5jb21waWxlKHNjaGVtYSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuYWxsb3dOdWxscykge1xuXHRcdFx0bG9nKGAke1N0cmluZyh0aGlzLmlkKX0gRm9yY2luZyBudWxscyBvbiBzY2hlbWFgKTtcblx0XHRcdChmdW5jdGlvbiB3YWxrKHNjaGVtYSkge1xuXHRcdFx0XHRpZiAoc2NoZW1hLl92YWxpZHMpIHtcblx0XHRcdFx0XHRzY2hlbWEuX3ZhbGlkcy5hZGQobnVsbCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2NoZW1hLl92YWxpZHMgPSBuZXcgVmFsdWVzKFsgbnVsbCBdKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChzY2hlbWEudHlwZSA9PT0gJ29iamVjdCcgJiYgc2NoZW1hLiRfdGVybXMua2V5cykge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBzY2hlbWEuJF90ZXJtcy5rZXlzKSB7XG5cdFx0XHRcdFx0XHR3YWxrKGl0ZW0uc2NoZW1hKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0oc2NoZW1hKSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zY2hlbWEgPSBzY2hlbWE7XG5cblx0XHRpZiAodGhpcy5zdG9yZSkge1xuXHRcdFx0dGhpcy5zdG9yZS5zY2hlbWEgPSBzY2hlbWE7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogRGVlcGx5IG1lcmdlcyBhbiBvYmplY3QgaW50byBhIGxheWVyJ3Mgc3RvcmUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZSAtIFRoZSBkYXRhIHRvIG1lcmdlLlxuXHQgKiBAcmV0dXJucyB7TGF5ZXJ9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRtZXJnZSh2YWx1ZSkge1xuXHRcdGlmICh0aGlzLnJlYWRvbmx5KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYExheWVyIFwiJHtTdHJpbmcodGhpcy5pZCl9XCIgaXMgcmVhZG9ubHlgKTtcblx0XHR9XG5cdFx0dGhpcy52YWxpZGF0ZSh7IHZhbHVlLCBhY3Rpb246ICdtZXJnZScgfSk7XG5cdFx0dGhpcy5zdG9yZS5tZXJnZSh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2F2ZXMgYSBzcGVjaWZpYyBsYXllcidzIHN0b3JlIHRvIGRpc2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbZmlsZV0gLSBUaGUgZmlsZSB0byB3cml0ZSB0aGUgbGF5ZXJzIHN0b3JlIHRvLlxuXHQgKiBAcmV0dXJucyB7TGF5ZXJ9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzYXZlKGZpbGUpIHtcblx0XHRsb2coYCR7U3RyaW5nKHRoaXMuaWQpfSBTYXZpbmcgdG8gZmlsZTogJHtoaWdobGlnaHQoZmlsZSB8fCB0aGlzLmZpbGUpfWApO1xuXHRcdHRoaXMuc3RvcmUuc2F2ZShmaWxlIHx8IHRoaXMuZmlsZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBhIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIGtleS5cblx0ICpcblx0ICogQHBhcmFtIHtBcnJheS48U3RyaW5nPn0ga2V5IC0gVGhlIGtleSB0byBzZXQuXG5cdCAqIEBwYXJhbSB7Kn0gW3ZhbHVlXSAtIFRoZSB2YWx1ZTtcblx0ICogQHBhcmFtIHtTdHJpbmd9IFthY3Rpb249XCJzZXRcIl0gLSBBbiBhY3Rpb24gaGludCBmb3IgdmFsaWRhdGlvbi5cblx0ICogQHJldHVybnMge0xheWVyfVxuXHQgKi9cblx0c2V0KGtleSwgdmFsdWUsIGFjdGlvbiA9ICdzZXQnKSB7XG5cdFx0aWYgKHRoaXMucmVhZG9ubHkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgTGF5ZXIgXCIke1N0cmluZyh0aGlzLmlkKX1cIiBpcyByZWFkb25seWApO1xuXHRcdH1cblxuXHRcdGlmICgha2V5IHx8ICFrZXkubGVuZ3RoKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgY29uZmlnIGtleScpO1xuXHRcdH1cblxuXHRcdHRoaXMudmFsaWRhdGUoeyBhY3Rpb24sIGtleSwgdmFsdWUgfSk7XG5cdFx0dGhpcy5zdG9yZS5zZXQoa2V5LCB2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIHZhbHVlIG9mIHRoZSBzdG9yZSBhcyBhIHN0cmluZy5cblx0ICpcblx0ICogQHBhcmFtIHsqfSBbYXJnc10gLSBWYXJpb3VzIGFyZ3VtZW50cyB0byBwYXNzIGludG8gdGhlIHN0b3JlJ3MgYHRvU3RyaW5nKClgLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0dG9TdHJpbmcoLi4uYXJncykge1xuXHRcdHJldHVybiB0aGlzLnN0b3JlPy50b1N0cmluZyguLi5hcmdzKSB8fCAnJztcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhpcyBsYXllciBjYW4gYmUgdW5sb2FkZWQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtMYXllcn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHVubG9hZCgpIHtcblx0XHRpZiAodGhpcy5zdGF0aWMpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVubG9hZCBzdGF0aWMgbGF5ZXInKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhIHdhdGNoIGhhbmRsZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgLSBBIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiBhIGNoYW5nZSBvY2N1cnMuXG5cdCAqIEByZXR1cm5zIHtMYXllcn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHVud2F0Y2goaGFuZGxlcikge1xuXHRcdGNvbnN0IHdyYXBwZWQgPSB0aGlzLndhdGNoZXJNYXAuZ2V0KGhhbmRsZXIpO1xuXHRcdGlmICh3cmFwcGVkKSB7XG5cdFx0XHR0aGlzLnN0b3JlLnVud2F0Y2god3JhcHBlZCk7XG5cdFx0XHR0aGlzLndhdGNoZXJNYXAuZGVsZXRlKGhhbmRsZXIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgdmFsaWRhdG9yIGZ1bmN0aW9uIHRoYXQgZWl0aGVyIGludm9rZXMgdGhlIGN1c3RvbSB2YWxpZGF0b3Igb3IgdGhlIGRlZmF1bHRcblx0ICogdmFsaWRhdG9yLlxuXHQgKlxuXHQgKiBAdHlwZSB7RnVuY3Rpb259XG5cdCAqL1xuXHRnZXQgdmFsaWRhdGUoKSB7XG5cdFx0cmV0dXJuIGFyZ3MgPT4ge1xuXHRcdFx0cmV0dXJuIHR5cGVvZiB0aGlzLnZhbGlkYXRvciA9PT0gJ2Z1bmN0aW9uJ1xuXHRcdFx0XHQ/IHRoaXMudmFsaWRhdG9yKGFyZ3MpXG5cdFx0XHRcdDogdmFsaWRhdGUoeyBzY2hlbWFzOiBbIHRoaXMuc2NoZW1hIF0sIC4uLmFyZ3MgfSk7XG5cdFx0fTtcblx0fVxuXG5cdHNldCB2YWxpZGF0ZShmbikge1xuXHRcdGlmICghZm4gfHwgdHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCB2YWxpZGF0b3IgdG8gYmUgYSBmdW5jdGlvbicpO1xuXHRcdH1cblx0XHR0aGlzLnZhbGlkYXRvciA9IGZuO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBhIHdhdGNoIGhhbmRsZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSB7QXJyYXkuPFN0cmluZz59IFtmaWx0ZXJdIC0gQSBwcm9wZXJ0eSBuYW1lIG9yIGFycmF5IG9mIG5lc3RlZCBwcm9wZXJ0aWVzIHRvIHdhdGNoLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIC0gQSBjYWxsYmFjayB0byBmaXJlIHdoZW4gYSBjaGFuZ2Ugb2NjdXJzLlxuXHQgKiBAcmV0dXJucyB7TGF5ZXJ9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHR3YXRjaChmaWx0ZXIsIGhhbmRsZXIpIHtcblx0XHRjb25zdCB3cmFwcGVkID0gb2JqID0+IGhhbmRsZXIob2JqLCB0aGlzKTtcblx0XHR0aGlzLndhdGNoZXJNYXAuc2V0KGhhbmRsZXIsIHdyYXBwZWQpO1xuXHRcdHRoaXMuc3RvcmUud2F0Y2goZmlsdGVyLCB3cmFwcGVkKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuIl0sImZpbGUiOiJsYXllci5qcyJ9 | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxheWVyLmpzIl0sIm5hbWVzIjpbImxvZyIsImhpZ2hsaWdodCIsInNub29wbG9nZyIsInN0eWxlcyIsIkxheWVyIiwiY29uc3RydWN0b3IiLCJvcHRzIiwiTWFwIiwiYWxsb3dOdWxscyIsImlkIiwibmFtZXNwYWNlIiwib3JkZXIiLCJyZWFkb25seSIsInN0YXRpYyIsInZhbGlkYXRlIiwidW5kZWZpbmVkIiwiVHlwZUVycm9yIiwiZGVmYXVsdHMiLCJlbnYiLCJzY2hlbWEiLCJsb2FkU2NoZW1hIiwic3RvcmUiLCJTdG9yZSIsImRhdGEiLCJKU09OU3RvcmUiLCJtZXJnZSIsImZpbGUiLCJsb2FkIiwiZ3JhY2VmdWwiLCJkZWxldGUiLCJrZXkiLCJFcnJvciIsIlN0cmluZyIsImxlbmd0aCIsImFjdGlvbiIsInJlc29sdmVLZXkiLCJnZXQiLCJuc0tleSIsInZhbHVlIiwiaGFzIiwiZXhpc3RzIiwiZnMiLCJleGlzdHNTeW5jIiwibWVzc2FnZSIsImV4dCIsInBhdGgiLCJleHRuYW1lIiwicmVhZEpzb25TeW5jIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiY3R4IiwiSm9pIiwiaXNTY2hlbWEiLCJ0eXBlIiwiZm91bmQiLCJpdGVtIiwiJF90ZXJtcyIsImtleXMiLCJvYmplY3QiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJjb21waWxlIiwid2FsayIsIl92YWxpZHMiLCJhZGQiLCJWYWx1ZXMiLCJmaW5kIiwicyIsInNsaWNlIiwic2F2ZSIsInNldCIsInRvU3RyaW5nIiwiYXJncyIsInVubG9hZCIsInVud2F0Y2giLCJoYW5kbGVyIiwid3JhcHBlZCIsIndhdGNoZXJNYXAiLCJ2YWxpZGF0b3IiLCJzY2hlbWFzIiwiZm4iLCJ3YXRjaCIsImZpbHRlciIsIm9iaiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7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VyxFQUFmO0FBSUE7O0FBRUQsTUFBSTdELFFBQUosQ0FBYXFFLEVBQWIsRUFBaUI7QUFDaEIsUUFBSSxDQUFDQSxFQUFELElBQU8sT0FBT0EsRUFBUCxLQUFjLFVBQXpCLEVBQXFDO0FBQ3BDLFlBQU0sSUFBSW5FLFNBQUosQ0FBYyxxQ0FBZCxDQUFOO0FBQ0E7O0FBQ0QsU0FBS2lFLFNBQUwsR0FBaUJFLEVBQWpCO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQ0MsRUFBQUEsS0FBSyxDQUFDQyxNQUFELEVBQVNQLE9BQVQsRUFBa0I7QUFDdEIsVUFBTUMsT0FBTyxHQUFHTyxHQUFHLElBQUlSLE9BQU8sQ0FBQ1EsR0FBRCxFQUFNLElBQU4sQ0FBOUI7O0FBQ0EsU0FBS04sVUFBTCxDQUFnQlAsR0FBaEIsQ0FBb0JLLE9BQXBCLEVBQTZCQyxPQUE3QjtBQUNBLFNBQUsxRCxLQUFMLENBQVcrRCxLQUFYLENBQWlCQyxNQUFqQixFQUF5Qk4sT0FBekI7QUFDQSxXQUFPLElBQVA7QUFDQTs7QUE1ZXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCBpbXBvcnRGcmVzaCBmcm9tICdpbXBvcnQtZnJlc2gnO1xuaW1wb3J0IEpvaSBmcm9tICdqb2knO1xuaW1wb3J0IEpTT05TdG9yZSBmcm9tICcuL3N0b3Jlcy9qc29uLXN0b3JlJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHNub29wbG9nZyBmcm9tICdzbm9vcGxvZ2cnO1xuaW1wb3J0IFN0b3JlIGZyb20gJy4vc3RvcmUnO1xuaW1wb3J0IFZhbHVlcyBmcm9tICdqb2kvbGliL3ZhbHVlcyc7XG5pbXBvcnQgeyBnZXRTY2hlbWFJbml0aWFsVmFsdWVzLCB2YWxpZGF0ZSB9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IHsgbG9nIH0gPSBzbm9vcGxvZ2coJ2NvbmZpZy1raXQnKSgnanMtc3RvcmUnKTtcbmNvbnN0IHsgaGlnaGxpZ2h0IH0gPSBzbm9vcGxvZ2cuc3R5bGVzO1xuXG4vKipcbiAqIENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGEgbGF5ZXIuIFRoZSBsYXllcidzIGRhdGEgaXMgbG9jYXRlZCBpbiB0aGUgbGF5ZXIncyBzdG9yZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGF5ZXIge1xuXHQvKipcblx0ICogRm9yY2VzIGFsbCBub2RlcyBvZiBhIHNjaGVtYSB0byBhbGxvdyBudWxscy5cblx0ICogQHR5cGUge0Jvb2xlYW59XG5cdCAqL1xuXHRhbGxvd051bGxzID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFRoZSBwYXRoIHRvIHRoZSBmaWxlIHRvIHdyaXRlIHRoZSBjb25maWcgZmlsZSB0by4gVGhpcyB2YWx1ZSBjYW4gYmUgb3ZlcndyaXR0ZW4gd2l0aCBhIGZpbGVcblx0ICogcGF0aCBzcGVjaWZpZWQgcGFzc2VkIGluIHdoZW4gc2F2aW5nLlxuXHQgKiBAcGFyYW0ge1N0cmluZ31cblx0ICovXG5cdGZpbGUgPSBudWxsO1xuXG5cdC8qKlxuXHQgKiBUaGUgbGF5ZXIgaWRlbnRpZmllci5cblx0ICogQHR5cGUge1N0cmluZ3xTeW1ib2x9XG5cdCAqL1xuXHRpZCA9IG51bGw7XG5cblx0LyoqXG5cdCAqIEFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIHNjb3BlIGVuY29tcGFzc2luZyB0aGlzIGxheWVyJ3MgZGF0YSBhbmQgc2NoZW1hLlxuXHQgKiBAdHlwZSB7U3RyaW5nfVxuXHQgKi9cblx0bmFtZXNwYWNlID0gbnVsbDtcblxuXHQvKipcblx0ICogVGhlIGxheWVyIHByZWNlZGVuY2UgaW4gdGhlIGxheWVyIGxpc3QuXG5cdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdCAqL1xuXHRvcmRlciA9IDA7XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyBpZiB0aGUgdmFsdWVzIGluIHRoZSBzdG9yZSBjYW4gYmUgbW9kaWZpZWQuXG5cdCAqIEB0eXBlIHtCb29sZWFufVxuXHQgKi9cblx0cmVhZG9ubHkgPSBmYWxzZTtcblxuXHQvKipcblx0ICogVGhlIEpvaSBzY2hlbWEuXG5cdCAqIEB0eXBlIHtPYmplY3R9XG5cdCAqL1xuXHRzY2hlbWEgPSBudWxsO1xuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgaWYgdGhpcyBsYXllciBjYW4gYmUgdW5sb2FkZWQuXG5cdCAqIEB0eXBlIHtCb29sZWFufVxuXHQgKi9cblx0c3RhdGljID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIEEgcmVmZXJlbmNlIHRvIHRoZSBsYXllcidzIGRhdGEgc3RvcmUgaW5zdGFuY2UuXG5cdCAqIEB0eXBlIHtTdG9yZX1cblx0ICovXG5cdHN0b3JlID0gbnVsbDtcblxuXHQvKipcblx0ICogQSBjdXN0b20gdmFsaWRhdGlvbiBjYWxsYmFjay4gSWYgbm90IHNldCwgZGVmYXVsdHMgdG8gdmFsaWRhdGluZyBhZ2FpbnN0IHRoaXMgbGF5ZXInc1xuXHQgKiBzY2hlbWEuXG5cdCAqIEB0eXBlIHtGdW5jdGlvbn1cblx0ICovXG5cdHZhbGlkYXRvciA9IG51bGw7XG5cblx0LyoqXG5cdCAqIEEgbG9va3VwIHRhYmxlIG9mIG9yaWdpbmFsIHdhdGNoIGhhbmRsZXJzIHRvIHRoZWlyIHdyYXBwZWQgY291bnRlcnBhcnRzIHNvIHRoYXQgaXQgY2FuXG5cdCAqIGFkZCBhIHJlZmVyZW5jZSB0byB0aGlzIGxheWVyIHRvIHRoZSBldmVudCBoYW5kbGVyLlxuXHQgKiBAdHlwZSB7TWFwfVxuXHQgKi9cblx0d2F0Y2hlck1hcCA9IG5ldyBNYXAoKTtcblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIGxheWVyLCBsb2FkcyBhIGZpbGUsIGFuZCBpbml0aWFsaXplcyB0aGUgc2NoZW1hIG9iamVjdC5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5hbGxvd051bGxzXSAtIEZvcmNlcyBhbGwgbm9kZXMgb2YgYSBzY2hlbWEgdG8gYWxsb3cgbnVsbHMuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy5kYXRhXSAtIERhdGEgdG8gaW5pdGlhbGl6ZSB0aGUgYmFzZSBjb25maWcgbGF5ZXIgd2l0aC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmZpbGVdIC0gVGhlIGZpbGUgYmFja2luZyB0aGlzIGxheWVyJ3Mgc3RvcmUuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZ3JhY2VmdWw9dHJ1ZV0gLSBUcnkgdG8gbG9hZCB0aGUgZmlsZSwgYnV0IGlmIGl0IGRvZXNuJ3QgZXhpc3QsIHRoZW5cblx0ICogZ3JhY2VmdWxseSBoYW5kbGUgdGhlIGVycm9yLlxuXHQgKiBAcGFyYW0ge1N0cmluZ3xTeW1ib2x9IFtvcHRzLmlkXSAtIFRoZSBsYXllciBpZC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm5hbWVzcGFjZV0gLSBUaGUgbmFtZSBvZiB0aGUgc2NvcGUgZW5jb21wYXNzaW5nIHRoaXMgbGF5ZXIncyBkYXRhIGFuZFxuXHQgKiBzY2hlbWEgaWYgbm90IGFscmVhZHkgZGVmaW5lZC5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm9yZGVyPTBdIC0gVGhlIGxheWVyIHByZWNlZGVuY2UuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMucmVhZG9ubHldIC0gSW5kaWNhdGVzIGlmIHRoaXMgbGF5ZXIncyBkYXRhIGNhbiBiZSBjaGFuZ2VkLlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdHMuc2NoZW1hXSAtIEEgSm9pIHNjaGVtYSBvciBvYmplY3QgdG8gY29tcGlsZSBpbnRvIGEgSm9pIHNjaGVtYS5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5zdGF0aWNdIC0gSW5kaWNhdGVzIGlmIHRoaXMgbGF5ZXIgY2FuIGJlIHVubG9hZGVkLlxuXHQgKiBAcGFyYW0ge1N0b3JlfSBbb3B0cy5zdG9yZV0gLSBUaGUgZGF0YSBzdG9yZS4gRGVmYXVsdHMgdG8gYSBgSlNPTlN0b3JlYCBpbnN0YW5jZS5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMudmFsaWRhdGVdIC0gQSBmdW5jdGlvbiB0byBjYWxsIGFuZCB2YWxpZGF0ZSBjaGFuZ2VzIGFnYWluc3QgYSBzY2hlbWEuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcblx0XHR0aGlzLmFsbG93TnVsbHMgPSBvcHRzLmFsbG93TnVsbHM7XG5cdFx0dGhpcy5pZCAgICAgICAgID0gb3B0cy5pZCB8fCBudWxsO1xuXHRcdHRoaXMubmFtZXNwYWNlICA9IG9wdHMubmFtZXNwYWNlO1xuXHRcdHRoaXMub3JkZXIgICAgICA9IG9wdHMub3JkZXIgfHwgMDtcblx0XHR0aGlzLnJlYWRvbmx5ICAgPSAhIW9wdHMucmVhZG9ubHk7XG5cdFx0dGhpcy5zdGF0aWMgICAgID0gISFvcHRzLnN0YXRpYztcblxuXHRcdGlmIChvcHRzLnZhbGlkYXRlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmICh0eXBlb2Ygb3B0cy52YWxpZGF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCB2YWxpZGF0ZSBjYWxsYmFjayB0byBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnZhbGlkYXRlID0gb3B0cy52YWxpZGF0ZTtcblx0XHR9XG5cblx0XHRsZXQgZGVmYXVsdHMsIGVudjtcblxuXHRcdGlmIChvcHRzLnNjaGVtYSkge1xuXHRcdFx0dGhpcy5sb2FkU2NoZW1hKG9wdHMuc2NoZW1hKTtcblx0XHRcdCh7IGRlZmF1bHRzLCBlbnYgfSA9IGdldFNjaGVtYUluaXRpYWxWYWx1ZXModGhpcy5zY2hlbWEpKTtcblx0XHR9XG5cblx0XHRpZiAob3B0cy5zdG9yZSBpbnN0YW5jZW9mIFN0b3JlKSB7XG5cdFx0XHR0aGlzLnN0b3JlID0gb3B0cy5zdG9yZTtcblx0XHRcdGlmICh0aGlzLnNjaGVtYSkge1xuXHRcdFx0XHR0aGlzLnN0b3JlLnNjaGVtYSA9IHRoaXMuc2NoZW1hO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuc3RvcmUgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHRoaXMuc3RvcmUgPSBuZXcgb3B0cy5zdG9yZSh7IGRhdGE6IGRlZmF1bHRzLCBzY2hlbWE6IHRoaXMuc2NoZW1hIH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnN0b3JlID0gbmV3IEpTT05TdG9yZShvcHRzLnN0b3JlIHx8IHsgZGF0YTogZGVmYXVsdHMsIHNjaGVtYTogdGhpcy5zY2hlbWEgfSk7XG5cdFx0fVxuXG5cdFx0bGV0IHsgZGF0YSB9ID0gb3B0cztcblx0XHRpZiAoZGF0YSkge1xuXHRcdFx0aWYgKHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBsYXllciBkYXRhIHRvIGJlIGFuIG9iamVjdCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0dGhpcy5tZXJnZSh0aGlzLm5hbWVzcGFjZSA/IHsgW3RoaXMubmFtZXNwYWNlXTogZGF0YSB9IDogZGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKG9wdHMuZmlsZSkge1xuXHRcdFx0dGhpcy5sb2FkKG9wdHMuZmlsZSwgb3B0cy5ncmFjZWZ1bCAhPT0gZmFsc2UpO1xuXHRcdH1cblxuXHRcdGlmIChlbnYpIHtcblx0XHRcdC8vIHdlIGNhbiBtZXJnZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdmFsdWVzIGRpcmVjdGx5IGludG8gdGhlIHN0b3JlIHNpbmNlIHdlJ3ZlXG5cdFx0XHQvLyBhbHJlYWR5IGRvbmUgdGhlIHZhbGlkYXRpb24gaW4gYGdldFNjaGVtYUluaXRpYWxWYWx1ZXMoKWBcblx0XHRcdHRoaXMuc3RvcmUubWVyZ2UoZW52KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBhIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIGtleS5cblx0ICpcblx0ICogQHBhcmFtIHtBcnJheS48U3RyaW5nPn0ga2V5IC0gVGhlIGtleSB0byBzZXQuXG5cdCAqIEByZXR1cm5zIHtCb29sZWFufVxuXHQgKi9cblx0ZGVsZXRlKGtleSkge1xuXHRcdGlmICh0aGlzLnJlYWRvbmx5KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYExheWVyIFwiJHtTdHJpbmcodGhpcy5pZCl9XCIgaXMgcmVhZG9ubHlgKTtcblx0XHR9XG5cblx0XHRpZiAoIWtleSB8fCAha2V5Lmxlbmd0aCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIGNvbmZpZyBrZXknKTtcblx0XHR9XG5cblx0XHR0aGlzLnZhbGlkYXRlKHsgYWN0aW9uOiAnZGVsZXRlJywga2V5IH0pO1xuXHRcdGlmIChrZXkgPSB0aGlzLnJlc29sdmVLZXkoa2V5KSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuc3RvcmUuZGVsZXRlKGtleSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyBhIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIGtleS5cblx0ICpcblx0ICogQHBhcmFtIHtBcnJheS48U3RyaW5nPn0gW2tleV0gLSBUaGUga2V5IHRvIGdldC4gV2hlbiBgdW5kZWZpbmVkYCwgdGhlIGVudGlyZSBjb25maWcgaXNcblx0ICogcmV0dXJuZWQuXG5cdCAqIEByZXR1cm5zIHsqfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Z2V0KGtleSkge1xuXHRcdGNvbnN0IG5zS2V5ID0gdGhpcy5yZXNvbHZlS2V5KGtleSk7XG5cdFx0aWYgKG5zS2V5ICE9PSBudWxsKSB7XG5cdFx0XHRsZXQgdmFsdWUgPSB0aGlzLnN0b3JlLmdldChuc0tleSk7XG5cdFx0XHRpZiAoIW5zS2V5Py5sZW5ndGggJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHQvLyBzZXQgdG8gZW1wdHkgb2JqZWN0IGlmIHZhbHVlXG5cdFx0XHRcdHZhbHVlID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoa2V5Lmxlbmd0aCAmJiB0aGlzLm5hbWVzcGFjZSAmJiBrZXlbMF0gPT09IHRoaXMubmFtZXNwYWNlKSB7XG5cdFx0XHRcdC8vIHJldHVybiBhIHNwZWNpZmljIHZhbHVlXG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLm5hbWVzcGFjZSA/IHsgW3RoaXMubmFtZXNwYWNlXTogdmFsdWUgfSA6IHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIGlmIGEga2V5IGlzIHNldC5cblx0ICpcblx0ICogQHBhcmFtIHtBcnJheS48U3RyaW5nPn0gW2tleV0gLSBUaGUga2V5IHRvIGNoZWNrLlxuXHQgKiBAcmV0dXJucyB7Qm9vbGVhbn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGhhcyhrZXkpIHtcblx0XHRjb25zdCBuc0tleSA9IHRoaXMucmVzb2x2ZUtleShrZXkpO1xuXHRcdGlmIChuc0tleSAhPT0gbnVsbCkge1xuXHRcdFx0aWYgKGtleS5sZW5ndGggPT09IDEgJiYgdGhpcy5uYW1lc3BhY2UgJiYga2V5WzBdID09PSB0aGlzLm5hbWVzcGFjZSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLnN0b3JlLmhhcyhuc0tleSk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBMb2FkcyBhIGNvbmZpZyBmaWxlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZmlsZSAtIFRoZSBwYXRoIHRvIHRoZSBjb25maWcgZmlsZSB0byBsb2FkLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtncmFjZWZ1bD1mYWxzZV0gLSBXaGVuIGB0cnVlYCwgZG9lc24ndCBlcnJvciBpZiB0aGUgY29uZmlnIGZpbGUgZG9lcyBub3Rcblx0ICogZXhpc3QuXG5cdCAqIEByZXR1cm5zIHtMYXllcn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGxvYWQoZmlsZSwgZ3JhY2VmdWwpIHtcblx0XHRpZiAoIWZpbGUgfHwgdHlwZW9mIGZpbGUgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBjb25maWcgZmlsZSBwYXRoIHRvIGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZXhpc3RzID0gZnMuZXhpc3RzU3luYyhmaWxlKTtcblx0XHR0aGlzLmZpbGUgPSBmaWxlO1xuXG5cdFx0aWYgKGdyYWNlZnVsICYmICFleGlzdHMpIHtcblx0XHRcdGxvZyhgJHtTdHJpbmcodGhpcy5pZCl9IEdyYWNlZnVsbHkgaGFuZGxpbmcgbm9uLWV4aXN0ZW50IGNvbmZpZyBmaWxlOiAke2hpZ2hsaWdodChmaWxlKX1gKTtcblx0XHR9XG5cblx0XHRpZiAoIWdyYWNlZnVsIHx8IGV4aXN0cykge1xuXHRcdFx0dGhpcy5zdG9yZS5sb2FkKGZpbGUpO1xuXHRcdFx0Y29uc3QgZGF0YSA9IHRoaXMuc3RvcmUuZ2V0KCk7XG5cdFx0XHR0aGlzLnZhbGlkYXRlKHtcblx0XHRcdFx0YWN0aW9uOiAnbG9hZCcsXG5cdFx0XHRcdG1lc3NhZ2U6ICdGYWlsZWQgdG8gbG9hZCBjb25maWcgZmlsZScsXG5cdFx0XHRcdHZhbHVlOiB0aGlzLm5hbWVzcGFjZSA/IHsgW3RoaXMubmFtZXNwYWNlXTogZGF0YSB9IDogZGF0YVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogTG9hZHMgYSBzY2hlbWEgZnJvbSBhIGZpbGUgb3Igb2JqZWN0LlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IHNjaGVtYSAtIFRoZSBwYXRoIHRvIHRoZSBjb25maWcgZmlsZSB0byBsb2FkIG9yIEpvaSBzY2hlbWEuXG5cdCAqIEByZXR1cm5zIHtMYXllcn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGxvYWRTY2hlbWEoc2NoZW1hKSB7XG5cdFx0aWYgKCFzY2hlbWEpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHNjaGVtYSB0byBiZSBhbiBvYmplY3Qgb3IgZmlsZScpO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2Ygc2NoZW1hID09PSAnc3RyaW5nJykge1xuXHRcdFx0aWYgKCFmcy5leGlzdHNTeW5jKHNjaGVtYSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBGaWxlIG5vdCBmb3VuZDogJHtzY2hlbWF9YCk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGV4dCA9IHBhdGguZXh0bmFtZShzY2hlbWEpO1xuXHRcdFx0aWYgKGV4dCAhPT0gJy5qcycgJiYgZXh0ICE9PSAnLmpzb24nKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgc2NoZW1hIGZpbGUgdHlwZTogJHtleHR9YCk7XG5cdFx0XHR9XG5cblx0XHRcdGxvZyhgJHtTdHJpbmcodGhpcy5pZCl9IExvYWRpbmcgJHtoaWdobGlnaHQoc2NoZW1hKX1gKTtcblx0XHRcdGlmIChleHQgPT09ICcuanNvbicpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRzY2hlbWEgPSBmcy5yZWFkSnNvblN5bmMoc2NoZW1hKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlIHNjaGVtYSBqc29uIGZpbGU6ICR7ZS5tZXNzYWdlfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGV4dCA9PT0gJy5qcycpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRzY2hlbWEgPSBpbXBvcnRGcmVzaChzY2hlbWEpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2Ugc2NoZW1hIGpzIGZpbGU6ICR7ZS5tZXNzYWdlfWApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gY2hlY2sgaWYgd2UgaGF2ZSBhIGJhYmVsIHRyYW5zcGlsZWQgZmlsZVxuXHRcdFx0XHRpZiAoc2NoZW1hICYmIHR5cGVvZiBzY2hlbWEgPT09ICdvYmplY3QnICYmIHNjaGVtYS5fX2VzTW9kdWxlICYmIHNjaGVtYS5kZWZhdWx0KSB7XG5cdFx0XHRcdFx0c2NoZW1hID0gc2NoZW1hLmRlZmF1bHQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodHlwZW9mIHNjaGVtYSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHNjaGVtYSA9IHNjaGVtYSh7IGN0eDogdGhpcywgSm9pIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFzY2hlbWEgfHwgdHlwZW9mIHNjaGVtYSAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHNjaGVtYSB0byBiZSBhbiBvYmplY3Qgb3IgZmlsZScpO1xuXHRcdH1cblxuXHRcdGlmIChKb2kuaXNTY2hlbWEoc2NoZW1hKSkge1xuXHRcdFx0aWYgKHNjaGVtYS50eXBlICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBzY2hlbWEgcm9vdCB0byBiZSBhbiBvYmplY3QnKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMubmFtZXNwYWNlKSB7XG5cdFx0XHRcdGxldCBmb3VuZCA9IGZhbHNlO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2Ygc2NoZW1hLiRfdGVybXMua2V5cykge1xuXHRcdFx0XHRcdGlmIChpdGVtLmtleSA9PT0gdGhpcy5uYW1lc3BhY2UgJiYgaXRlbS5zY2hlbWEudHlwZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWZvdW5kKSB7XG5cdFx0XHRcdFx0c2NoZW1hID0gSm9pLm9iamVjdCh7IFt0aGlzLm5hbWVzcGFjZV06IHNjaGVtYSB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAodGhpcy5uYW1lc3BhY2UgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzY2hlbWEsIHRoaXMubmFtZXNwYWNlKSkge1xuXHRcdFx0XHRzY2hlbWEgPSB7IFt0aGlzLm5hbWVzcGFjZV06IHNjaGVtYSB9O1xuXHRcdFx0fVxuXHRcdFx0bG9nKGAke1N0cmluZyh0aGlzLmlkKX0gQ29tcGlsaW5nIHNjaGVtYS4uLmApO1xuXHRcdFx0c2NoZW1hID0gSm9pLmNvbXBpbGUoc2NoZW1hKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5hbGxvd051bGxzKSB7XG5cdFx0XHRsb2coYCR7U3RyaW5nKHRoaXMuaWQpfSBGb3JjaW5nIG51bGxzIG9uIHNjaGVtYWApO1xuXHRcdFx0KGZ1bmN0aW9uIHdhbGsoc2NoZW1hKSB7XG5cdFx0XHRcdGlmIChzY2hlbWEuX3ZhbGlkcykge1xuXHRcdFx0XHRcdHNjaGVtYS5fdmFsaWRzLmFkZChudWxsKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzY2hlbWEuX3ZhbGlkcyA9IG5ldyBWYWx1ZXMoWyBudWxsIF0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHNjaGVtYS50eXBlID09PSAnb2JqZWN0JyAmJiBzY2hlbWEuJF90ZXJtcy5rZXlzKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIHNjaGVtYS4kX3Rlcm1zLmtleXMpIHtcblx0XHRcdFx0XHRcdHdhbGsoaXRlbS5zY2hlbWEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fShzY2hlbWEpKTtcblx0XHR9XG5cblx0XHR0aGlzLnNjaGVtYSA9IHNjaGVtYTtcblxuXHRcdC8vIHdoZW4gbG9hZFNjaGVtYSgpIGlzIGNhbGxlZCBmcm9tIHRoZSBjb25zdHJ1Y3RvciwgYHRoaXMuc3RvcmVgIHdpbGwgbm90IGhhdmUgYmVlbiBzZXRcblx0XHQvLyB5ZXQsIHNvIHRoaXMgaXMgcmVhbGx5IGZvciB0aGUgcHVibGljIEFQSVxuXHRcdGlmICh0aGlzLnN0b3JlKSB7XG5cdFx0XHR0aGlzLnN0b3JlLnNjaGVtYSA9IHRoaXMubmFtZXNwYWNlICYmIHNjaGVtYS4kX3Rlcm1zLmtleXM/LmZpbmQocyA9PiBzLmtleSA9PT0gdGhpcy5uYW1lc3BhY2UpPy5zY2hlbWEgfHwgc2NoZW1hO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZXBseSBtZXJnZXMgYW4gb2JqZWN0IGludG8gYSBsYXllcidzIHN0b3JlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gdmFsdWUgLSBUaGUgZGF0YSB0byBtZXJnZS5cblx0ICogQHJldHVybnMge0xheWVyfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0bWVyZ2UodmFsdWUpIHtcblx0XHRpZiAodGhpcy5yZWFkb25seSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBMYXllciBcIiR7U3RyaW5nKHRoaXMuaWQpfVwiIGlzIHJlYWRvbmx5YCk7XG5cdFx0fVxuXHRcdHRoaXMudmFsaWRhdGUoeyBhY3Rpb246ICdtZXJnZScsIHZhbHVlIH0pO1xuXHRcdGlmICgoIXRoaXMubmFtZXNwYWNlIHx8ICh2YWx1ZSA9IHZhbHVlW3RoaXMubmFtZXNwYWNlXSkpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdHRoaXMuc3RvcmUubWVyZ2UodmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhpcyBsYXllciBoYXMgYSBuYW1lc3BhY2VzIGFuZCBpZiB0aGUga2V5IGhhcyB0aGUgbmFtZXNwYWNlLCB0aGVuIHJldHVybnMgdGhlXG5cdCAqIHJlc29sdmVkIGtleS5cblx0ICpcblx0ICogQHBhcmFtIHtBcnJheS48U3RyaW5nPn0ga2V5IC0gVGhlIGtleSB0byByZXNvbHZlLlxuXHQgKiBAcmV0dXJucyB7QXJyYXkuPFN0cmluZz59XG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0cmVzb2x2ZUtleShrZXkpIHtcblx0XHRpZiAoa2V5Lmxlbmd0aCAmJiB0aGlzLm5hbWVzcGFjZSkge1xuXHRcdFx0cmV0dXJuIGtleVswXSA9PT0gdGhpcy5uYW1lc3BhY2UgPyBrZXkuc2xpY2UoMSkgOiBudWxsO1xuXHRcdH1cblx0XHRyZXR1cm4ga2V5O1xuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmVzIGEgc3BlY2lmaWMgbGF5ZXIncyBzdG9yZSB0byBkaXNrLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW2ZpbGVdIC0gVGhlIGZpbGUgdG8gd3JpdGUgdGhlIGxheWVycyBzdG9yZSB0by5cblx0ICogQHJldHVybnMge0xheWVyfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0c2F2ZShmaWxlKSB7XG5cdFx0bG9nKGAke1N0cmluZyh0aGlzLmlkKX0gU2F2aW5nIHRvIGZpbGU6ICR7aGlnaGxpZ2h0KGZpbGUgfHwgdGhpcy5maWxlKX1gKTtcblx0XHR0aGlzLnN0b3JlLnNhdmUoZmlsZSB8fCB0aGlzLmZpbGUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgYSB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBrZXkuXG5cdCAqXG5cdCAqIEBwYXJhbSB7QXJyYXkuPFN0cmluZz59IGtleSAtIFRoZSBrZXkgdG8gc2V0LlxuXHQgKiBAcGFyYW0geyp9IFt2YWx1ZV0gLSBUaGUgdmFsdWU7XG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbYWN0aW9uPVwic2V0XCJdIC0gQW4gYWN0aW9uIGhpbnQgZm9yIHZhbGlkYXRpb24uXG5cdCAqIEByZXR1cm5zIHtMYXllcn1cblx0ICovXG5cdHNldChrZXksIHZhbHVlLCBhY3Rpb24gPSAnc2V0Jykge1xuXHRcdGlmICh0aGlzLnJlYWRvbmx5KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYExheWVyIFwiJHtTdHJpbmcodGhpcy5pZCl9XCIgaXMgcmVhZG9ubHlgKTtcblx0XHR9XG5cblx0XHRpZiAoIWtleSB8fCAha2V5Lmxlbmd0aCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIGNvbmZpZyBrZXknKTtcblx0XHR9XG5cblx0XHR0aGlzLnZhbGlkYXRlKHsgYWN0aW9uLCBrZXksIHZhbHVlIH0pO1xuXHRcdGlmIChrZXkgPSB0aGlzLnJlc29sdmVLZXkoa2V5KSkge1xuXHRcdFx0dGhpcy5zdG9yZS5zZXQoa2V5LCB2YWx1ZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIHZhbHVlIG9mIHRoZSBzdG9yZSBhcyBhIHN0cmluZy5cblx0ICpcblx0ICogQHBhcmFtIHsqfSBbYXJnc10gLSBWYXJpb3VzIGFyZ3VtZW50cyB0byBwYXNzIGludG8gdGhlIHN0b3JlJ3MgYHRvU3RyaW5nKClgLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0dG9TdHJpbmcoLi4uYXJncykge1xuXHRcdHJldHVybiB0aGlzLnN0b3JlPy50b1N0cmluZyguLi5hcmdzKSB8fCAnJztcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhpcyBsYXllciBjYW4gYmUgdW5sb2FkZWQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtMYXllcn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHVubG9hZCgpIHtcblx0XHRpZiAodGhpcy5zdGF0aWMpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVubG9hZCBzdGF0aWMgbGF5ZXInKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhIHdhdGNoIGhhbmRsZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgLSBBIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiBhIGNoYW5nZSBvY2N1cnMuXG5cdCAqIEByZXR1cm5zIHtMYXllcn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHVud2F0Y2goaGFuZGxlcikge1xuXHRcdGNvbnN0IHdyYXBwZWQgPSB0aGlzLndhdGNoZXJNYXAuZ2V0KGhhbmRsZXIpO1xuXHRcdGlmICh3cmFwcGVkKSB7XG5cdFx0XHR0aGlzLnN0b3JlLnVud2F0Y2god3JhcHBlZCk7XG5cdFx0XHR0aGlzLndhdGNoZXJNYXAuZGVsZXRlKGhhbmRsZXIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgdmFsaWRhdG9yIGZ1bmN0aW9uIHRoYXQgZWl0aGVyIGludm9rZXMgdGhlIGN1c3RvbSB2YWxpZGF0b3Igb3IgdGhlIGRlZmF1bHRcblx0ICogdmFsaWRhdG9yLlxuXHQgKlxuXHQgKiBAdHlwZSB7RnVuY3Rpb259XG5cdCAqL1xuXHRnZXQgdmFsaWRhdGUoKSB7XG5cdFx0cmV0dXJuIGFyZ3MgPT4gKHRoaXMudmFsaWRhdG9yIHx8IHZhbGlkYXRlKSh7XG5cdFx0XHRzY2hlbWFzOiB0aGlzLnNjaGVtYSA/IFsgdGhpcy5zY2hlbWEgXSA6IFtdLFxuXHRcdFx0Li4uYXJnc1xuXHRcdH0pO1xuXHR9XG5cblx0c2V0IHZhbGlkYXRlKGZuKSB7XG5cdFx0aWYgKCFmbiB8fCB0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHZhbGlkYXRvciB0byBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHRoaXMudmFsaWRhdG9yID0gZm47XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXJzIGEgd2F0Y2ggaGFuZGxlci5cblx0ICpcblx0ICogQHBhcmFtIHtBcnJheS48U3RyaW5nPn0gW2ZpbHRlcl0gLSBBIHByb3BlcnR5IG5hbWUgb3IgYXJyYXkgb2YgbmVzdGVkIHByb3BlcnRpZXMgdG8gd2F0Y2guXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgLSBBIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiBhIGNoYW5nZSBvY2N1cnMuXG5cdCAqIEByZXR1cm5zIHtMYXllcn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHdhdGNoKGZpbHRlciwgaGFuZGxlcikge1xuXHRcdGNvbnN0IHdyYXBwZWQgPSBvYmogPT4gaGFuZGxlcihvYmosIHRoaXMpO1xuXHRcdHRoaXMud2F0Y2hlck1hcC5zZXQoaGFuZGxlciwgd3JhcHBlZCk7XG5cdFx0dGhpcy5zdG9yZS53YXRjaChmaWx0ZXIsIHdyYXBwZWQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG4iXSwiZmlsZSI6ImxheWVyLmpzIn0= |
@@ -13,3 +13,4 @@ "use strict"; | ||
/** | ||
* A node in the config tree that represents the union of a XML node and a schema node. | ||
* A node is value in an object. It wraps a the value in a proxy so that we can listen for when the | ||
* node is changed. We can also store arbitrary data in the node's metadata. | ||
*/ | ||
@@ -31,2 +32,3 @@ class Node { | ||
const internal = { | ||
cls: Object.getPrototypeOf(this).constructor, | ||
hash: null, | ||
@@ -121,3 +123,3 @@ hashes: null, | ||
if (!((_node$key = node[key]) === null || _node$key === void 0 ? void 0 : _node$key[Node.Meta])) { | ||
node[key] = new Node(node[key], node); | ||
node[key] = new node[Node.Meta].cls(node[key], node); | ||
} | ||
@@ -325,3 +327,3 @@ | ||
} else { | ||
value = new Node(value, node); | ||
value = new node[Node.Meta].cls(value, node); | ||
} | ||
@@ -530,2 +532,2 @@ | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGUuanMiXSwibmFtZXMiOlsiTm9kZSIsImNvbnN0cnVjdG9yIiwidmFsdWUiLCJwYXJlbnQiLCJpbnRlcm5hbCIsImhhc2giLCJoYXNoZXMiLCJsaXN0ZW5lcnMiLCJwYXJlbnRzIiwiU2V0IiwicHJldmlvdXMiLCJwYXVzZWQiLCJwZW5kaW5nIiwic2NoZW1hIiwibm90aWZ5IiwidGFyZ2V0IiwibGlzdGVuZXIiLCJmaWx0ZXIiLCJmb3VuZCIsImZpbHRlck9iamVjdCIsIm5vZGUiLCJoYXNQcmV2IiwiaGFzIiwiY2hhbmdlZCIsImdldCIsIldlYWtNYXAiLCJzZXQiLCJNZXRhIiwicGF1c2UiLCJyZWhhc2giLCJpc0N0b3IiLCJpc0FycmF5IiwiQXJyYXkiLCJrZXlzIiwiUmVmbGVjdCIsIm93bktleXMiLCJrZXkiLCJyZXN1bWUiLCJNYXRoIiwibWF4IiwidW53YXRjaCIsIlR5cGVFcnJvciIsImRlbGV0ZSIsInNpemUiLCJ3YXRjaCIsIk1hcCIsIlByb3h5IiwiZGVsZXRlUHJvcGVydHkiLCJwcm9wIiwicmVzdWx0IiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiYWRkaXRpdmUiLCJhcmdzIiwiYXBwbHkiLCJsZW5ndGgiLCJzdGFydCIsImRlbGV0ZUNvdW50IiwiaXRlbXMiLCJ1bmRlZmluZWQiLCJhcnIiLCJzcGxpY2UiLCJpdGVtIiwiRXJyb3IiLCJkZXNjIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiRGF0ZSIsInByb2Nlc3MiLCJlbnYiLCJKU09OIiwiYWRkIiwiZGVmaW5lUHJvcGVydHkiLCJtZXJnZSIsIm1peCIsInNyYyIsImRlc3QiLCJzcmNWYWx1ZSIsIlN5bWJvbCIsImkiLCJsZW4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7OztBQUVBOzs7QUFHZSxNQUFNQSxJQUFOLENBQVc7QUFDekI7Ozs7O0FBTUE7Ozs7Ozs7QUFPQUMsRUFBQUEsV0FBVyxDQUFDQyxLQUFELEVBQVFDLE1B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MkQsU0FBUjtBQUNBO0FBQ0E7O0FBQ0R4RCxJQUFBQSxJQUFJLEdBQUdILEtBQUssQ0FBQ0YsSUFBSSxDQUFDMkIsSUFBTixDQUFMLENBQWlCckIsTUFBakIsQ0FBd0I4QixHQUF4QixDQUFQOztBQUNBLFFBQUkvQixJQUFJLEtBQUt3RCxTQUFiLEVBQXdCO0FBQ3ZCeEQsTUFBQUEsSUFBSSxHQUFHLElBQVA7QUFDQTs7QUFDREgsSUFBQUEsS0FBSyxHQUFHQSxLQUFLLENBQUNrQyxHQUFELENBQWI7QUFDQTs7QUFFRCxTQUFPO0FBQUVsQixJQUFBQSxLQUFGO0FBQVNiLElBQUFBLElBQVQ7QUFBZUgsSUFBQUE7QUFBZixHQUFQO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBoYXNoVmFsdWUgfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIEEgbm9kZSBpbiB0aGUgY29uZmlnIHRyZWUgdGhhdCByZXByZXNlbnRzIHRoZSB1bmlvbiBvZiBhIFhNTCBub2RlIGFuZCBhIHNjaGVtYSBub2RlLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb2RlIHtcblx0LyoqXG5cdCAqIFRoZSBrZXkgZm9yIHRoZSBpbnRlcm5hbCBtZXRhZGF0YS5cblx0ICogQHR5cGUge1N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBNZXRhID0gU3ltYm9sKCdtZXRhJyk7XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBub2RlIHByb3h5IGFuZCBtZXRhZGF0YS5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZSAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoaXMgbm9kZS5cblx0ICogQHBhcmFtIHtOb2RlfSBbcGFyZW50XSAtIFRoZSBub2RlIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IG5vZGUuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcih2YWx1ZSwgcGFyZW50KSB7XG5cdFx0Y29uc3QgaW50ZXJuYWwgPSB7XG5cdFx0XHRoYXNoOiAgICAgIG51bGwsXG5cdFx0XHRoYXNoZXM6ICAgIG51bGwsXG5cdFx0XHRsaXN0ZW5lcnM6IG51bGwsXG5cdFx0XHRwYXJlbnRzOiAgIG5ldyBTZXQoKSxcblx0XHRcdHByZXZpb3VzOiAgbnVsbCxcblx0XHRcdHBhdXNlZDogICAgMCxcblx0XHRcdHBlbmRpbmc6ICAgMCxcblx0XHRcdHNjaGVtYTogICAgbnVsbCxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBEaXNwYXRjaGVzIGNoYW5nZSBub3RpZmljYXRpb25zIHRvIHRoZSBsaXN0ZW5lcnMuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHBhcmFtIHtOb2RlfSB0YXJnZXQgLSBUaGUgbm9kZSB0aGF0IGNoYW5nZWQuXG5cdFx0XHQgKi9cblx0XHRcdG5vdGlmeSh0YXJnZXQpIHtcblx0XHRcdFx0Ly8gaWYgd2UncmUgcGF1c2VkLCBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIGxpc3Qgb2Ygb2JqZWN0cyB0aGF0IG1heSBoYXZlIGNoYW5nZWRcblx0XHRcdFx0aWYgKHRoaXMucGF1c2VkKSB7XG5cdFx0XHRcdFx0dGhpcy5wZW5kaW5nKys7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbm90aWZ5IGFsbCBvZiB0aGlzIG9iamVjdCdzIGxpc3RlbmVyc1xuXHRcdFx0XHRpZiAodGhpcy5saXN0ZW5lcnMpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IFsgbGlzdGVuZXIsIGZpbHRlciBdIG9mIHRoaXMubGlzdGVuZXJzKSB7XG5cdFx0XHRcdFx0XHRpZiAoZmlsdGVyKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHsgZm91bmQsIGhhc2gsIHZhbHVlIH0gPSBmaWx0ZXJPYmplY3Qobm9kZSwgZmlsdGVyKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgaGFzUHJldiA9IHRoaXMucHJldmlvdXM/LmhhcyhsaXN0ZW5lcik7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNoYW5nZWQgPSAoZm91bmQgJiYgIWhhc1ByZXYpIHx8IChoYXNQcmV2ICYmIGhhc2ggIT09IHRoaXMucHJldmlvdXMuZ2V0KGxpc3RlbmVyKSk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCF0aGlzLnByZXZpb3VzKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5wcmV2aW91cyA9IG5ldyBXZWFrTWFwKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dGhpcy5wcmV2aW91cy5zZXQobGlzdGVuZXIsIGhhc2gpO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChjaGFuZ2VkKSB7XG5cdFx0XHRcdFx0XHRcdFx0bGlzdGVuZXIodmFsdWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRsaXN0ZW5lcih0YXJnZXQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIG5vdGlmeSBhbGwgb2YgdGhpcyBvYmplY3QncyBwYXJlbnRzXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50IG9mIHRoaXMucGFyZW50cykge1xuXHRcdFx0XHRcdHBhcmVudFtOb2RlLk1ldGFdLm5vdGlmeSh0YXJnZXQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIEluY3JlbWVudHMgdGhlIHBhdXNlIGNvdW50ZXIgdW50aWwgdGhlIGNvdW50ZXIgcmVzZXRzIHRvIHplcm8gYW5kIHJlc3VtZXNcblx0XHRcdCAqIG5vdGlmaWNhdGlvbnMuXG5cdFx0XHQgKi9cblx0XHRcdHBhdXNlKCkge1xuXHRcdFx0XHR0aGlzLnBhdXNlZCsrO1xuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBSZWNvbXB1dGVzIHRoZSBoYXNoIGxvb2t1cCBmb3IgYWxsIHByb3BlcnRpZXMsIHRoZW4gcmVjb21wdXRlcyB0aGlzIG9iamVjdCdzIGhhc2guXG5cdFx0XHQgKiBJZiBhbnkgcHJvcGVydGllcyBhcmUgbm90IGFscmVhZHkgTm9kZXMsIHRoZW4gY3JlYXRlIHRoZW0uXG5cdFx0XHQgKlxuXHRcdFx0ICogQHBhcmFtIHtCb29sZWFufSBbaXNDdG9yPWZhbHNlXSAtIEluZGljYXRlcyB0aGUgcmVoYXNoIGlzIGJlaW5nIGNhbGxlZCBieSB0aGVcblx0XHRcdCAqIGNvbnN0cnVjdG9yIGluIHdoaWNoIGNhc2Ugd2UgZG8gbm90IHdhbnQgdG8gbm90aWZ5IHBhcmVudHMgc2luY2UgdGhlIHBhcmVudCBpc1xuXHRcdFx0ICogbGlrZWx5IHdoYXQgY3JlYXRlZCB0aGlzIGluc3RhbmNlIGluIHRoZSBmaXJzdCBwbGFjZS5cblx0XHRcdCAqL1xuXHRcdFx0cmVoYXNoKGlzQ3Rvcikge1xuXHRcdFx0XHRjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShub2RlKTtcblx0XHRcdFx0Y29uc3Qga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhub2RlKTtcblx0XHRcdFx0Y29uc3QgeyBoYXNoIH0gPSB0aGlzO1xuXG5cdFx0XHRcdHRoaXMuaGFzaGVzID0gaXNBcnJheSA/IFtdIDoge307XG5cblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdFx0XHRcdGlmIChrZXkgPT09IE5vZGUuTWV0YSB8fCAoaXNBcnJheSAmJiBrZXkgPT09ICdsZW5ndGgnKSkge1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKG5vZGVba2V5XSAmJiB0eXBlb2Ygbm9kZVtrZXldID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRcdFx0aWYgKCFub2RlW2tleV0/LltOb2RlLk1ldGFdKSB7XG5cdFx0XHRcdFx0XHRcdG5vZGVba2V5XSA9IG5ldyBOb2RlKG5vZGVba2V5XSwgbm9kZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLmhhc2hlc1trZXldID0gbm9kZVtrZXldW05vZGUuTWV0YV0uaGFzaDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5oYXNoZXNba2V5XSA9IGhhc2hWYWx1ZShub2RlW2tleV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuaGFzaCA9IGhhc2hWYWx1ZSh0aGlzLmhhc2hlcyk7XG5cblx0XHRcdFx0aWYgKCFpc0N0b3IgJiYgaGFzaCAhPT0gdGhpcy5oYXNoKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnQgb2YgdGhpcy5wYXJlbnRzKSB7XG5cdFx0XHRcdFx0XHRwYXJlbnRbTm9kZS5NZXRhXS5yZWhhc2goKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogVW5wYXVzZXMgbm90aWZpY2F0aW9ucyBhbmQgc2VuZHMgb3V0IGFueSBwZW5kaW5nIG5vdGlmaWNhdGlvbnMuXG5cdFx0XHQgKi9cblx0XHRcdHJlc3VtZSgpIHtcblx0XHRcdFx0dGhpcy5wYXVzZWQgPSBNYXRoLm1heCgwLCB0aGlzLnBhdXNlZCAtIDEpO1xuXHRcdFx0XHRpZiAodGhpcy5wYXVzZWQgPT09IDAgJiYgdGhpcy5wZW5kaW5nID4gMCkge1xuXHRcdFx0XHRcdHRoaXMucGVuZGluZyA9IDA7XG5cdFx0XHRcdFx0dGhpcy5ub3RpZnkobm9kZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogUmVtb3ZlcyBhIGxpc3RlbmVyLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtsaXN0ZW5lcl0gLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHNvbWV0aGluZyBjaGFuZ2VzLlxuXHRcdFx0ICovXG5cdFx0XHR1bndhdGNoKGxpc3RlbmVyKSB7XG5cdFx0XHRcdGlmIChsaXN0ZW5lciAmJiB0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIXRoaXMubGlzdGVuZXJzKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGxpc3RlbmVyKSB7XG5cdFx0XHRcdFx0dGhpcy5saXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTtcblx0XHRcdFx0XHRpZiAodGhpcy5wcmV2aW91cykge1xuXHRcdFx0XHRcdFx0dGhpcy5wcmV2aW91cy5kZWxldGUobGlzdGVuZXIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyByZW1vdmUgYWxsIGxpc3RlbmVyc1xuXHRcdFx0XHRcdGZvciAoY29uc3QgWyBsaXN0ZW5lciBdIG9mIHRoaXMubGlzdGVuZXJzKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMucHJldmlvdXMpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5wcmV2aW91cy5kZWxldGUobGlzdGVuZXIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghdGhpcy5saXN0ZW5lcnMuc2l6ZSkge1xuXHRcdFx0XHRcdHRoaXMubGlzdGVuZXJzID0gbnVsbDtcblx0XHRcdFx0XHR0aGlzLnByZXZpb3VzID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBBZGRzIGEgbGlzdGVuZXIgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHNwZWNpZmllZCBvYmplY3Qgb3IgYW55IG9mIGl0c1xuXHRcdFx0ICogcHJvcGVydGllcy9lbGVtZW50cyBhcmUgY2hhbmdlZC5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0ge1N0cmluZ3xBcnJheS48U3RyaW5nPn0gW2ZpbHRlcl0gLSBBIHByb3BlcnR5IG5hbWUgb3IgYXJyYXkgb2YgbmVzdGVkXG5cdFx0XHQgKiBwcm9wZXJ0aWVzIHRvIHdhdGNoLlxuXHRcdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHNvbWV0aGluZyBjaGFuZ2VzLlxuXHRcdFx0ICovXG5cdFx0XHR3YXRjaChmaWx0ZXIsIGxpc3RlbmVyKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0bGlzdGVuZXIgPSBmaWx0ZXI7XG5cdFx0XHRcdFx0ZmlsdGVyID0gbnVsbDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChmaWx0ZXIpIHtcblx0XHRcdFx0XHRpZiAodHlwZW9mIGZpbHRlciA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHRcdGZpbHRlciA9IFsgZmlsdGVyIF07XG5cdFx0XHRcdFx0fSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShmaWx0ZXIpKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBmaWx0ZXIgdG8gYmUgYSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIXRoaXMubGlzdGVuZXJzKSB7XG5cdFx0XHRcdFx0dGhpcy5saXN0ZW5lcnMgPSBuZXcgTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5saXN0ZW5lcnMuc2V0KGxpc3RlbmVyLCBmaWx0ZXIpO1xuXG5cdFx0XHRcdGlmIChmaWx0ZXIpIHtcblx0XHRcdFx0XHRjb25zdCB7IGZvdW5kLCBoYXNoIH0gPSBmaWx0ZXJPYmplY3Qobm9kZSwgZmlsdGVyKTtcblx0XHRcdFx0XHRpZiAoZm91bmQpIHtcblx0XHRcdFx0XHRcdGlmICghdGhpcy5wcmV2aW91cykge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnByZXZpb3VzID0gbmV3IFdlYWtNYXAoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMucHJldmlvdXMuc2V0KGxpc3RlbmVyLCBoYXNoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Y29uc3Qgbm9kZSA9IG5ldyBQcm94eSh2YWx1ZSwge1xuXHRcdFx0ZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wKSB7XG5cdFx0XHRcdGxldCByZXN1bHQgPSB0cnVlO1xuXG5cdFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBwcm9wKSkge1xuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0XHRcdFx0XHR0YXJnZXRbcHJvcF0/LltOb2RlLk1ldGFdPy5wYXJlbnRzLmRlbGV0ZShub2RlKTtcblx0XHRcdFx0XHRyZXN1bHQgPSBkZWxldGUgdGFyZ2V0W3Byb3BdO1xuXG5cdFx0XHRcdFx0ZGVsZXRlIGludGVybmFsLmhhc2hlc1twcm9wXTtcblx0XHRcdFx0XHRpbnRlcm5hbC5oYXNoID0gaGFzaFZhbHVlKGludGVybmFsLmhhc2hlcyk7XG5cblx0XHRcdFx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRpbnRlcm5hbC5ub3RpZnkobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH0sXG5cblx0XHRcdGdldCh0YXJnZXQsIHByb3ApIHtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xuXHRcdFx0XHRcdGNvbnN0IGFkZGl0aXZlID0gcHJvcCA9PT0gJ3B1c2gnIHx8IHByb3AgPT09ICd1bnNoaWZ0JztcblxuXHRcdFx0XHRcdGlmIChhZGRpdGl2ZSB8fCBwcm9wID09PSAncG9wJyB8fCBwcm9wID09PSAnc2hpZnQnKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcblx0XHRcdFx0XHRcdFx0aW50ZXJuYWwucGF1c2UoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlW3Byb3BdLmFwcGx5KHRhcmdldCwgYXJncyk7XG5cblx0XHRcdFx0XHRcdFx0aW50ZXJuYWwucmVoYXNoKCk7XG5cdFx0XHRcdFx0XHRcdGludGVybmFsLnJlc3VtZSgpO1xuXG5cdFx0XHRcdFx0XHRcdGlmICghYWRkaXRpdmUgfHwgYXJncy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5ub3RpZnkobm9kZSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAocHJvcCA9PT0gJ3NwbGljZScpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbiAoc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi5pdGVtcykge1xuXHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5wYXVzZSgpO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChzdGFydCAhPT0gdW5kZWZpbmVkICYmIGRlbGV0ZUNvdW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGVDb3VudCA9IHRoaXMubGVuZ3RoIC0gc3RhcnQ7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRjb25zdCB7IGhhc2ggfSA9IGludGVybmFsO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhcnIgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwodGFyZ2V0LCBzdGFydCwgZGVsZXRlQ291bnQsIC4uLml0ZW1zKTtcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIGFycikge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0XHRcdFx0XHRcdFx0XHRpdGVtPy5bTm9kZS5NZXRhXT8ucGFyZW50cy5kZWxldGUobm9kZSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5yZWhhc2goKTtcblx0XHRcdFx0XHRcdFx0aW50ZXJuYWwucmVzdW1lKCk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKGludGVybmFsLmhhc2ggIT09IGhhc2gpIHtcblx0XHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5ub3RpZnkobm9kZSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYXJyO1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdGFyZ2V0W3Byb3BdO1xuXHRcdFx0fSxcblxuXHRcdFx0c2V0KHRhcmdldCwgcHJvcCwgdmFsdWUpIHtcblx0XHRcdFx0aWYgKHRhcmdldCA9PT0gdmFsdWUpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzZXQgb2JqZWN0IHByb3BlcnR5IHRvIGl0c2VsZicpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IGhhc2ggPSBudWxsO1xuXHRcdFx0XHRjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3ApO1xuXG5cdFx0XHRcdGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSAmJiB2YWx1ZSAhPT0gcHJvY2Vzcy5lbnYgJiYgdmFsdWUgIT09IEpTT04gJiYgdmFsdWUgIT09IE1hdGgpIHtcblx0XHRcdFx0XHRpZiAodmFsdWVbTm9kZS5NZXRhXSkge1xuXHRcdFx0XHRcdFx0dmFsdWVbTm9kZS5NZXRhXS5wYXJlbnRzLmFkZChub2RlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dmFsdWUgPSBuZXcgTm9kZSh2YWx1ZSwgbm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCh7IGhhc2ggfSA9IHZhbHVlW05vZGUuTWV0YV0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGhhc2ggPSBoYXNoVmFsdWUodmFsdWUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IGNoYW5nZWQgPSB0cnVlO1xuXG5cdFx0XHRcdGlmIChkZXNjKSB7XG5cdFx0XHRcdFx0aWYgKGludGVybmFsLmhhc2hlc1twcm9wXSA9PT0gaGFzaCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aW50ZXJuYWwucGFyZW50cy5kZWxldGUobm9kZSk7XG5cblx0XHRcdFx0XHQvLyBpZiB0aGUgZGVzdGluYXRpb24gcHJvcGVydHkgaGFzIGEgc2V0dGVyLCB0aGVuIHdlIGNhbid0IGFzc3VtZSB3ZSBuZWVkIHRvXG5cdFx0XHRcdFx0Ly8gZmlyZSBhIGRlbGV0ZVxuXHRcdFx0XHRcdGlmICh0eXBlb2YgZGVzYy5zZXQgIT09ICdmdW5jdGlvbicgJiYgKCFBcnJheS5pc0FycmF5KHRhcmdldCkgfHwgcHJvcCAhPT0gJ2xlbmd0aCcpKSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgdGFyZ2V0W3Byb3BdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRhcmdldFtwcm9wXSA9IHZhbHVlO1xuXG5cdFx0XHRcdGludGVybmFsLmhhc2hlc1twcm9wXSA9IGhhc2g7XG5cdFx0XHRcdGludGVybmFsLmhhc2ggPSBoYXNoVmFsdWUoaW50ZXJuYWwuaGFzaGVzKTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudCBvZiBpbnRlcm5hbC5wYXJlbnRzKSB7XG5cdFx0XHRcdFx0cGFyZW50W05vZGUuTWV0YV0ucmVoYXNoKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY2hhbmdlZCkge1xuXHRcdFx0XHRcdGludGVybmFsLm5vdGlmeShub2RlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5vZGUsIE5vZGUuTWV0YSwgeyB2YWx1ZTogaW50ZXJuYWwgfSk7XG5cblx0XHRpZiAocGFyZW50ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmICghcGFyZW50Py5bTm9kZS5NZXRhXSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBwYXJlbnQgdG8gYmUgYSBOb2RlJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh2YWx1ZSA9PT0gcGFyZW50IHx8IHZhbHVlID09PSBwYXJlbnRbTm9kZS5NZXRhXS52YWx1ZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBtdXN0IGJlIG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUgbm9kZScpO1xuXHRcdFx0fVxuXG5cdFx0XHRpbnRlcm5hbC5wYXJlbnRzLmFkZChwYXJlbnQpO1xuXHRcdH1cblxuXHRcdGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRpbnRlcm5hbC5yZWhhc2godHJ1ZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5vZGU7XG5cdH1cblxuXHQvKipcblx0ICogUmVjdXJzaXZlbHkgbWVyZ2UgdGhlIHZhbHVlIGludG8gdGhpcyBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIHBhdXNlLlxuXHQgKiBAcGFyYW0ge09iamVjdH0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gbWVyZ2UuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzdGF0aWMgbWVyZ2Uobm9kZSwgdmFsdWUpIHtcblx0XHRpZiAoIW5vZGU/LltOb2RlLk1ldGFdKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBtZXJnZSBkZXN0aW5hdGlvbiB0byBiZSBhIE5vZGUgaW5zdGFuY2UnKTtcblx0XHR9XG5cblx0XHRpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIG1lcmdlIHNvdXJjZSB0byBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cblx0XHRub2RlW05vZGUuTWV0YV0ucGF1c2UoKTtcblxuXHRcdChmdW5jdGlvbiBtaXgoc3JjLCBkZXN0KSB7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMoc3JjKSkge1xuXHRcdFx0XHRpZiAoa2V5ID09PSBOb2RlLk1ldGEpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHNyY1ZhbHVlID0gc3JjW2tleV07XG5cblx0XHRcdFx0aWYgKHNyY1ZhbHVlICE9PSBudWxsICYmIHR5cGVvZiBzcmNWYWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoc3JjVmFsdWUpKSB7XG5cdFx0XHRcdFx0aWYgKCFkZXN0W2tleV0/LltOb2RlLk1ldGFdKSB7XG5cdFx0XHRcdFx0XHRkZXN0W2tleV0gPSB7fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bWl4KHNyY1ZhbHVlLCBkZXN0W2tleV0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGVzdFtrZXldKSAmJiBBcnJheS5pc0FycmF5KHNyY1ZhbHVlKSkge1xuXHRcdFx0XHRcdC8vIG92ZXJ3cml0ZSBkZXN0aW5hdGlvbiB3aXRoIG5ldyB2YWx1ZXNcblx0XHRcdFx0XHRkZXN0W2tleV0uc3BsaWNlKDAsIGRlc3Rba2V5XS5sZW5ndGgsIC4uLnNyY1ZhbHVlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkZXN0W2tleV0gPSBzcmNWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0odmFsdWUsIG5vZGUpKTtcblxuXHRcdG5vZGVbTm9kZS5NZXRhXS5yZXN1bWUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXVzZXMgYWxsIGNoYW5nZSBub3RpZmljYXRpb25zIHVudGlsIHJlc3VtZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIHBhdXNlLlxuXHQgKiBAcmV0dXJucyB7Qm9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgaXQgd2FzIGFscmVhZHkgcGF1c2VkLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0c3RhdGljIHBhdXNlKG5vZGUpIHtcblx0XHRyZXR1cm4gbm9kZVtOb2RlLk1ldGFdLnBhdXNlKCk7XG5cdH1cblxuXHQvKipcblx0ICogVW5wYXVzZXMgbm90aWZpY2F0aW9ucyBhbmQgc2VuZHMgb3V0IGFueSBwZW5kaW5nIG5vdGlmaWNhdGlvbnMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIHJlc3VtZS5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHN0YXRpYyByZXN1bWUobm9kZSkge1xuXHRcdG5vZGVbTm9kZS5NZXRhXS5yZXN1bWUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGEgbGlzdGVuZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIHVud2F0Y2guXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtsaXN0ZW5lcl0gLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHNvbWV0aGluZyBjaGFuZ2VzLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0c3RhdGljIHVud2F0Y2gobm9kZSwgbGlzdGVuZXIpIHtcblx0XHRub2RlW05vZGUuTWV0YV0udW53YXRjaChsaXN0ZW5lcik7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIGxpc3RlbmVyIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBzcGVjaWZpZWQgb2JqZWN0IG9yIGFueSBvZiBpdHMgcHJvcGVydGllcy9lbGVtZW50cyBhcmVcblx0ICogY2hhbmdlZC5cblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIG5vZGUgdG8gd2F0Y2guXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBbZmlsdGVyXSAtIEEgcHJvcGVydHkgbmFtZSBvciBhcnJheSBvZiBuZXN0ZWQgcHJvcGVydGllcyB0b1xuXHQgKiB3YXRjaC5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHNvbWV0aGluZyBjaGFuZ2VzLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0c3RhdGljIHdhdGNoKG5vZGUsIGZpbHRlciwgbGlzdGVuZXIpIHtcblx0XHRub2RlW05vZGUuTWV0YV0ud2F0Y2goZmlsdGVyLCBsaXN0ZW5lcik7XG5cdH1cbn1cblxuLyoqXG4gKiBGaWx0ZXJzIHRoZSBzcGVjaWZpZWQgbm9kZS5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgbm9kZSB0byBmaWx0ZXIuXG4gKiBAcGFyYW0ge0FycmF5LjxTdHJpbmc+fSBmaWx0ZXIgLSBUaGUgZmlsdGVyIHRvIGFwcGx5IHRvIHRoZSBub2RlLlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gZmlsdGVyT2JqZWN0KG5vZGUsIGZpbHRlcikge1xuXHRsZXQgZm91bmQgPSB0cnVlO1xuXHRsZXQgaGFzaCA9IG51bGw7XG5cdGxldCB2YWx1ZSA9IG5vZGU7XG5cblx0Ly8gZmluZCB0aGUgdmFsdWUgd2UncmUgaW50ZXJlc3RlZCBpblxuXHRmb3IgKGxldCBpID0gMCwgbGVuID0gZmlsdGVyLmxlbmd0aDsgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBpIDwgbGVuOyBpKyspIHtcblx0XHRjb25zdCBrZXkgPSBmaWx0ZXJbaV07XG5cdFx0aWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpIHtcblx0XHRcdGZvdW5kID0gZmFsc2U7XG5cdFx0XHR2YWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRoYXNoID0gdmFsdWVbTm9kZS5NZXRhXS5oYXNoZXNba2V5XTtcblx0XHRpZiAoaGFzaCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRoYXNoID0gbnVsbDtcblx0XHR9XG5cdFx0dmFsdWUgPSB2YWx1ZVtrZXldO1xuXHR9XG5cblx0cmV0dXJuIHsgZm91bmQsIGhhc2gsIHZhbHVlIH07XG59XG4iXSwiZmlsZSI6Im5vZGUuanMifQ== | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGUuanMiXSwibmFtZXMiOlsiTm9kZSIsImNvbnN0cnVjdG9yIiwidmFsdWUiLCJwYXJlbnQiLCJpbnRlcm5hbCIsImNscyIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwiaGFzaCIsImhhc2hlcyIsImxpc3RlbmVycyIsInBhcmVudHMiLCJTZXQiLCJwcmV2aW91cyIsInBhdXNlZCIsInBlbmRpbmciLCJzY2hlbWEiLCJub3RpZnkiLCJ0YXJnZXQiLCJsaXN0ZW5lciIsImZpbHRlciIsImZvdW5kIiwiZmlsdGVyT2JqZWN0Iiwibm9kZSIsImhhc1ByZXYiLCJoYXMiLCJjaGFuZ2VkIiwiZ2V0IiwiV2Vha01hcCIsInNldCIsIk1ldGEiLCJwYXVzZSIsInJlaGFzaCIsImlzQ3RvciIsImlzQXJyYXkiLCJBcnJheSIsImtleXMiLCJSZWZsZWN0Iiwib3duS2V5cyIsImtleSIsInJlc3VtZSIsIk1hdGgiLCJtYXgiLCJ1bndhdGNoIiwiVHlwZUVycm9yIiwiZGVsZXRlIiwic2l6ZSIsIndhdGNoIiwiTWFwIiwiUHJveHkiLCJkZWxldGVQcm9wZXJ0eSIsInByb3AiLCJyZXN1bHQiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhZGRpdGl2ZSIsImFyZ3MiLCJhcHBseSIsImxlbmd0aCIsInN0YXJ0IiwiZGVsZXRlQ291bnQiLCJpdGVtcyIsInVuZGVmaW5lZCIsImFyciIsInNwbGljZSIsIml0ZW0iLCJFcnJvciIsImRlc2MiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJEYXRlIiwicHJvY2VzcyIsImVudiIsIkpTT04iLCJhZGQiLCJkZWZpbmVQcm9wZXJ0eSIsIm1lcmdlIiwibWl4Iiwic3JjIiwiZGVzdCIsInNyY1ZhbHVlIiwiU3ltYm9sIiwiaSIsImxlbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOzs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDZSxNQUFNQSxJQUFOLENBQVc7QUFDekI7QUFDRDtBQUNBO0FBQ0E7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U0FBUzNELFlBQVQsQ0FBc0JDLElBQXRCLEVBQTRCSCxNQUE1QixFQUFvQztBQUNuQyxNQUFJQyxLQUFLLEdBQUcsSUFBWjtBQUNBLE1BQUliLElBQUksR0FBRyxJQUFYO0FBQ0EsTUFBSU4sS0FBSyxHQUFHcUIsSUFBWixDQUhtQyxDQUtuQzs7QUFDQSxPQUFLLElBQUkyRCxDQUFDLEdBQUcsQ0FBUixFQUFXQyxHQUFHLEdBQUcvRCxNQUFNLENBQUN1QyxNQUE3QixFQUFxQ3pELEtBQUssSUFBSSxPQUFPQSxLQUFQLEtBQWlCLFFBQTFCLElBQXNDZ0YsQ0FBQyxHQUFHQyxHQUEvRSxFQUFvRkQsQ0FBQyxFQUFyRixFQUF5RjtBQUN4RixVQUFNM0MsR0FBRyxHQUFHbkIsTUFBTSxDQUFDOEQsQ0FBRCxDQUFsQjs7QUFDQSxRQUFJLENBQUM1RSxNQUFNLENBQUMrQyxTQUFQLENBQWlCQyxjQUFqQixDQUFnQ0MsSUFBaEMsQ0FBcUNyRCxLQUFyQyxFQUE0Q3FDLEdBQTVDLENBQUwsRUFBdUQ7QUFDdERsQixNQUFBQSxLQUFLLEdBQUcsS0FBUjtBQUNBbkIsTUFBQUEsS0FBSyxHQUFHNkQsU0FBUjtBQUNBO0FBQ0E7O0FBQ0R2RCxJQUFBQSxJQUFJLEdBQUdOLEtBQUssQ0FBQ0YsSUFBSSxDQUFDOEIsSUFBTixDQUFMLENBQWlCckIsTUFBakIsQ0FBd0I4QixHQUF4QixDQUFQOztBQUNBLFFBQUkvQixJQUFJLEtBQUt1RCxTQUFiLEVBQXdCO0FBQ3ZCdkQsTUFBQUEsSUFBSSxHQUFHLElBQVA7QUFDQTs7QUFDRE4sSUFBQUEsS0FBSyxHQUFHQSxLQUFLLENBQUNxQyxHQUFELENBQWI7QUFDQTs7QUFFRCxTQUFPO0FBQUVsQixJQUFBQSxLQUFGO0FBQVNiLElBQUFBLElBQVQ7QUFBZU4sSUFBQUE7QUFBZixHQUFQO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBoYXNoVmFsdWUgfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIEEgbm9kZSBpcyB2YWx1ZSBpbiBhbiBvYmplY3QuIEl0IHdyYXBzIGEgdGhlIHZhbHVlIGluIGEgcHJveHkgc28gdGhhdCB3ZSBjYW4gbGlzdGVuIGZvciB3aGVuIHRoZVxuICogbm9kZSBpcyBjaGFuZ2VkLiBXZSBjYW4gYWxzbyBzdG9yZSBhcmJpdHJhcnkgZGF0YSBpbiB0aGUgbm9kZSdzIG1ldGFkYXRhLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb2RlIHtcblx0LyoqXG5cdCAqIFRoZSBrZXkgZm9yIHRoZSBpbnRlcm5hbCBtZXRhZGF0YS5cblx0ICogQHR5cGUge1N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBNZXRhID0gU3ltYm9sKCdtZXRhJyk7XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBub2RlIHByb3h5IGFuZCBtZXRhZGF0YS5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZSAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoaXMgbm9kZS5cblx0ICogQHBhcmFtIHtOb2RlfSBbcGFyZW50XSAtIFRoZSBub2RlIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IG5vZGUuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcih2YWx1ZSwgcGFyZW50KSB7XG5cdFx0Y29uc3QgaW50ZXJuYWwgPSB7XG5cdFx0XHRjbHM6ICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3Rvcixcblx0XHRcdGhhc2g6ICAgICAgbnVsbCxcblx0XHRcdGhhc2hlczogICAgbnVsbCxcblx0XHRcdGxpc3RlbmVyczogbnVsbCxcblx0XHRcdHBhcmVudHM6ICAgbmV3IFNldCgpLFxuXHRcdFx0cHJldmlvdXM6ICBudWxsLFxuXHRcdFx0cGF1c2VkOiAgICAwLFxuXHRcdFx0cGVuZGluZzogICAwLFxuXHRcdFx0c2NoZW1hOiAgICBudWxsLFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIERpc3BhdGNoZXMgY2hhbmdlIG5vdGlmaWNhdGlvbnMgdG8gdGhlIGxpc3RlbmVycy5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0ge05vZGV9IHRhcmdldCAtIFRoZSBub2RlIHRoYXQgY2hhbmdlZC5cblx0XHRcdCAqL1xuXHRcdFx0bm90aWZ5KHRhcmdldCkge1xuXHRcdFx0XHQvLyBpZiB3ZSdyZSBwYXVzZWQsIGFkZCB0aGlzIG9iamVjdCB0byB0aGUgbGlzdCBvZiBvYmplY3RzIHRoYXQgbWF5IGhhdmUgY2hhbmdlZFxuXHRcdFx0XHRpZiAodGhpcy5wYXVzZWQpIHtcblx0XHRcdFx0XHR0aGlzLnBlbmRpbmcrKztcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBub3RpZnkgYWxsIG9mIHRoaXMgb2JqZWN0J3MgbGlzdGVuZXJzXG5cdFx0XHRcdGlmICh0aGlzLmxpc3RlbmVycykge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgWyBsaXN0ZW5lciwgZmlsdGVyIF0gb2YgdGhpcy5saXN0ZW5lcnMpIHtcblx0XHRcdFx0XHRcdGlmIChmaWx0ZXIpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgeyBmb3VuZCwgaGFzaCwgdmFsdWUgfSA9IGZpbHRlck9iamVjdChub2RlLCBmaWx0ZXIpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBoYXNQcmV2ID0gdGhpcy5wcmV2aW91cz8uaGFzKGxpc3RlbmVyKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2hhbmdlZCA9IChmb3VuZCAmJiAhaGFzUHJldikgfHwgKGhhc1ByZXYgJiYgaGFzaCAhPT0gdGhpcy5wcmV2aW91cy5nZXQobGlzdGVuZXIpKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIXRoaXMucHJldmlvdXMpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnByZXZpb3VzID0gbmV3IFdlYWtNYXAoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR0aGlzLnByZXZpb3VzLnNldChsaXN0ZW5lciwgaGFzaCk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKGNoYW5nZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRsaXN0ZW5lcih2YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGxpc3RlbmVyKHRhcmdldCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbm90aWZ5IGFsbCBvZiB0aGlzIG9iamVjdCdzIHBhcmVudHNcblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnQgb2YgdGhpcy5wYXJlbnRzKSB7XG5cdFx0XHRcdFx0cGFyZW50W05vZGUuTWV0YV0ubm90aWZ5KHRhcmdldCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogSW5jcmVtZW50cyB0aGUgcGF1c2UgY291bnRlciB1bnRpbCB0aGUgY291bnRlciByZXNldHMgdG8gemVybyBhbmQgcmVzdW1lc1xuXHRcdFx0ICogbm90aWZpY2F0aW9ucy5cblx0XHRcdCAqL1xuXHRcdFx0cGF1c2UoKSB7XG5cdFx0XHRcdHRoaXMucGF1c2VkKys7XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFJlY29tcHV0ZXMgdGhlIGhhc2ggbG9va3VwIGZvciBhbGwgcHJvcGVydGllcywgdGhlbiByZWNvbXB1dGVzIHRoaXMgb2JqZWN0J3MgaGFzaC5cblx0XHRcdCAqIElmIGFueSBwcm9wZXJ0aWVzIGFyZSBub3QgYWxyZWFkeSBOb2RlcywgdGhlbiBjcmVhdGUgdGhlbS5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtpc0N0b3I9ZmFsc2VdIC0gSW5kaWNhdGVzIHRoZSByZWhhc2ggaXMgYmVpbmcgY2FsbGVkIGJ5IHRoZVxuXHRcdFx0ICogY29uc3RydWN0b3IgaW4gd2hpY2ggY2FzZSB3ZSBkbyBub3Qgd2FudCB0byBub3RpZnkgcGFyZW50cyBzaW5jZSB0aGUgcGFyZW50IGlzXG5cdFx0XHQgKiBsaWtlbHkgd2hhdCBjcmVhdGVkIHRoaXMgaW5zdGFuY2UgaW4gdGhlIGZpcnN0IHBsYWNlLlxuXHRcdFx0ICovXG5cdFx0XHRyZWhhc2goaXNDdG9yKSB7XG5cdFx0XHRcdGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KG5vZGUpO1xuXHRcdFx0XHRjb25zdCBrZXlzID0gUmVmbGVjdC5vd25LZXlzKG5vZGUpO1xuXHRcdFx0XHRjb25zdCB7IGhhc2ggfSA9IHRoaXM7XG5cblx0XHRcdFx0dGhpcy5oYXNoZXMgPSBpc0FycmF5ID8gW10gOiB7fTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0XHRcdFx0aWYgKGtleSA9PT0gTm9kZS5NZXRhIHx8IChpc0FycmF5ICYmIGtleSA9PT0gJ2xlbmd0aCcpKSB7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAobm9kZVtrZXldICYmIHR5cGVvZiBub2RlW2tleV0gPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdFx0XHRpZiAoIW5vZGVba2V5XT8uW05vZGUuTWV0YV0pIHtcblx0XHRcdFx0XHRcdFx0bm9kZVtrZXldID0gbmV3IG5vZGVbTm9kZS5NZXRhXS5jbHMobm9kZVtrZXldLCBub2RlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuaGFzaGVzW2tleV0gPSBub2RlW2tleV1bTm9kZS5NZXRhXS5oYXNoO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLmhhc2hlc1trZXldID0gaGFzaFZhbHVlKG5vZGVba2V5XSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5oYXNoID0gaGFzaFZhbHVlKHRoaXMuaGFzaGVzKTtcblxuXHRcdFx0XHRpZiAoIWlzQ3RvciAmJiBoYXNoICE9PSB0aGlzLmhhc2gpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudCBvZiB0aGlzLnBhcmVudHMpIHtcblx0XHRcdFx0XHRcdHBhcmVudFtOb2RlLk1ldGFdLnJlaGFzaCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBVbnBhdXNlcyBub3RpZmljYXRpb25zIGFuZCBzZW5kcyBvdXQgYW55IHBlbmRpbmcgbm90aWZpY2F0aW9ucy5cblx0XHRcdCAqL1xuXHRcdFx0cmVzdW1lKCkge1xuXHRcdFx0XHR0aGlzLnBhdXNlZCA9IE1hdGgubWF4KDAsIHRoaXMucGF1c2VkIC0gMSk7XG5cdFx0XHRcdGlmICh0aGlzLnBhdXNlZCA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPiAwKSB7XG5cdFx0XHRcdFx0dGhpcy5wZW5kaW5nID0gMDtcblx0XHRcdFx0XHR0aGlzLm5vdGlmeShub2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBSZW1vdmVzIGEgbGlzdGVuZXIuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW2xpc3RlbmVyXSAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gc29tZXRoaW5nIGNoYW5nZXMuXG5cdFx0XHQgKi9cblx0XHRcdHVud2F0Y2gobGlzdGVuZXIpIHtcblx0XHRcdFx0aWYgKGxpc3RlbmVyICYmIHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24nKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghdGhpcy5saXN0ZW5lcnMpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAobGlzdGVuZXIpIHtcblx0XHRcdFx0XHR0aGlzLmxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuXHRcdFx0XHRcdGlmICh0aGlzLnByZXZpb3VzKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnByZXZpb3VzLmRlbGV0ZShsaXN0ZW5lcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHJlbW92ZSBhbGwgbGlzdGVuZXJzXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBbIGxpc3RlbmVyIF0gb2YgdGhpcy5saXN0ZW5lcnMpIHtcblx0XHRcdFx0XHRcdHRoaXMubGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcik7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5wcmV2aW91cykge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnByZXZpb3VzLmRlbGV0ZShsaXN0ZW5lcik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCF0aGlzLmxpc3RlbmVycy5zaXplKSB7XG5cdFx0XHRcdFx0dGhpcy5saXN0ZW5lcnMgPSBudWxsO1xuXHRcdFx0XHRcdHRoaXMucHJldmlvdXMgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIEFkZHMgYSBsaXN0ZW5lciB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc3BlY2lmaWVkIG9iamVjdCBvciBhbnkgb2YgaXRzXG5cdFx0XHQgKiBwcm9wZXJ0aWVzL2VsZW1lbnRzIGFyZSBjaGFuZ2VkLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBbZmlsdGVyXSAtIEEgcHJvcGVydHkgbmFtZSBvciBhcnJheSBvZiBuZXN0ZWRcblx0XHRcdCAqIHByb3BlcnRpZXMgdG8gd2F0Y2guXG5cdFx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gc29tZXRoaW5nIGNoYW5nZXMuXG5cdFx0XHQgKi9cblx0XHRcdHdhdGNoKGZpbHRlciwgbGlzdGVuZXIpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRsaXN0ZW5lciA9IGZpbHRlcjtcblx0XHRcdFx0XHRmaWx0ZXIgPSBudWxsO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGZpbHRlcikge1xuXHRcdFx0XHRcdGlmICh0eXBlb2YgZmlsdGVyID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0ZmlsdGVyID0gWyBmaWx0ZXIgXTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KGZpbHRlcikpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGZpbHRlciB0byBiZSBhIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24nKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghdGhpcy5saXN0ZW5lcnMpIHtcblx0XHRcdFx0XHR0aGlzLmxpc3RlbmVycyA9IG5ldyBNYXAoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmxpc3RlbmVycy5zZXQobGlzdGVuZXIsIGZpbHRlcik7XG5cblx0XHRcdFx0aWYgKGZpbHRlcikge1xuXHRcdFx0XHRcdGNvbnN0IHsgZm91bmQsIGhhc2ggfSA9IGZpbHRlck9iamVjdChub2RlLCBmaWx0ZXIpO1xuXHRcdFx0XHRcdGlmIChmb3VuZCkge1xuXHRcdFx0XHRcdFx0aWYgKCF0aGlzLnByZXZpb3VzKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMucHJldmlvdXMgPSBuZXcgV2Vha01hcCgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGhpcy5wcmV2aW91cy5zZXQobGlzdGVuZXIsIGhhc2gpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjb25zdCBub2RlID0gbmV3IFByb3h5KHZhbHVlLCB7XG5cdFx0XHRkZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3ApIHtcblx0XHRcdFx0bGV0IHJlc3VsdCA9IHRydWU7XG5cblx0XHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0YXJnZXQsIHByb3ApKSB7XG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHRcdFx0XHRcdHRhcmdldFtwcm9wXT8uW05vZGUuTWV0YV0/LnBhcmVudHMuZGVsZXRlKG5vZGUpO1xuXHRcdFx0XHRcdHJlc3VsdCA9IGRlbGV0ZSB0YXJnZXRbcHJvcF07XG5cblx0XHRcdFx0XHRkZWxldGUgaW50ZXJuYWwuaGFzaGVzW3Byb3BdO1xuXHRcdFx0XHRcdGludGVybmFsLmhhc2ggPSBoYXNoVmFsdWUoaW50ZXJuYWwuaGFzaGVzKTtcblxuXHRcdFx0XHRcdGlmIChyZXN1bHQpIHtcblx0XHRcdFx0XHRcdGludGVybmFsLm5vdGlmeShub2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fSxcblxuXHRcdFx0Z2V0KHRhcmdldCwgcHJvcCkge1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7XG5cdFx0XHRcdFx0Y29uc3QgYWRkaXRpdmUgPSBwcm9wID09PSAncHVzaCcgfHwgcHJvcCA9PT0gJ3Vuc2hpZnQnO1xuXG5cdFx0XHRcdFx0aWYgKGFkZGl0aXZlIHx8IHByb3AgPT09ICdwb3AnIHx8IHByb3AgPT09ICdzaGlmdCcpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuXHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5wYXVzZSgpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCByZXN1bHQgPSBBcnJheS5wcm90b3R5cGVbcHJvcF0uYXBwbHkodGFyZ2V0LCBhcmdzKTtcblxuXHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5yZWhhc2goKTtcblx0XHRcdFx0XHRcdFx0aW50ZXJuYWwucmVzdW1lKCk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCFhZGRpdGl2ZSB8fCBhcmdzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdGludGVybmFsLm5vdGlmeShub2RlKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChwcm9wID09PSAnc3BsaWNlJykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uIChzdGFydCwgZGVsZXRlQ291bnQsIC4uLml0ZW1zKSB7XG5cdFx0XHRcdFx0XHRcdGludGVybmFsLnBhdXNlKCk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKHN0YXJ0ICE9PSB1bmRlZmluZWQgJiYgZGVsZXRlQ291bnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZUNvdW50ID0gdGhpcy5sZW5ndGggLSBzdGFydDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHsgaGFzaCB9ID0gaW50ZXJuYWw7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFyciA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbCh0YXJnZXQsIHN0YXJ0LCBkZWxldGVDb3VudCwgLi4uaXRlbXMpO1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHRcdFx0XHRcdFx0XHRcdGl0ZW0/LltOb2RlLk1ldGFdPy5wYXJlbnRzLmRlbGV0ZShub2RlKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGludGVybmFsLnJlaGFzaCgpO1xuXHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5yZXN1bWUoKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoaW50ZXJuYWwuaGFzaCAhPT0gaGFzaCkge1xuXHRcdFx0XHRcdFx0XHRcdGludGVybmFsLm5vdGlmeShub2RlKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHJldHVybiBhcnI7XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0YXJnZXRbcHJvcF07XG5cdFx0XHR9LFxuXG5cdFx0XHRzZXQodGFyZ2V0LCBwcm9wLCB2YWx1ZSkge1xuXHRcdFx0XHRpZiAodGFyZ2V0ID09PSB2YWx1ZSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignQ2Fubm90IHNldCBvYmplY3QgcHJvcGVydHkgdG8gaXRzZWxmJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgaGFzaCA9IG51bGw7XG5cdFx0XHRcdGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcCk7XG5cblx0XHRcdFx0aWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpICYmIHZhbHVlICE9PSBwcm9jZXNzLmVudiAmJiB2YWx1ZSAhPT0gSlNPTiAmJiB2YWx1ZSAhPT0gTWF0aCkge1xuXHRcdFx0XHRcdGlmICh2YWx1ZVtOb2RlLk1ldGFdKSB7XG5cdFx0XHRcdFx0XHR2YWx1ZVtOb2RlLk1ldGFdLnBhcmVudHMuYWRkKG5vZGUpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR2YWx1ZSA9IG5ldyBub2RlW05vZGUuTWV0YV0uY2xzKHZhbHVlLCBub2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KHsgaGFzaCB9ID0gdmFsdWVbTm9kZS5NZXRhXSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aGFzaCA9IGhhc2hWYWx1ZSh2YWx1ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgY2hhbmdlZCA9IHRydWU7XG5cblx0XHRcdFx0aWYgKGRlc2MpIHtcblx0XHRcdFx0XHRpZiAoaW50ZXJuYWwuaGFzaGVzW3Byb3BdID09PSBoYXNoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpbnRlcm5hbC5wYXJlbnRzLmRlbGV0ZShub2RlKTtcblxuXHRcdFx0XHRcdC8vIGlmIHRoZSBkZXN0aW5hdGlvbiBwcm9wZXJ0eSBoYXMgYSBzZXR0ZXIsIHRoZW4gd2UgY2FuJ3QgYXNzdW1lIHdlIG5lZWQgdG9cblx0XHRcdFx0XHQvLyBmaXJlIGEgZGVsZXRlXG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBkZXNjLnNldCAhPT0gJ2Z1bmN0aW9uJyAmJiAoIUFycmF5LmlzQXJyYXkodGFyZ2V0KSB8fCBwcm9wICE9PSAnbGVuZ3RoJykpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSB0YXJnZXRbcHJvcF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGFyZ2V0W3Byb3BdID0gdmFsdWU7XG5cblx0XHRcdFx0aW50ZXJuYWwuaGFzaGVzW3Byb3BdID0gaGFzaDtcblx0XHRcdFx0aW50ZXJuYWwuaGFzaCA9IGhhc2hWYWx1ZShpbnRlcm5hbC5oYXNoZXMpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50IG9mIGludGVybmFsLnBhcmVudHMpIHtcblx0XHRcdFx0XHRwYXJlbnRbTm9kZS5NZXRhXS5yZWhhc2goKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjaGFuZ2VkKSB7XG5cdFx0XHRcdFx0aW50ZXJuYWwubm90aWZ5KG5vZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgTm9kZS5NZXRhLCB7IHZhbHVlOiBpbnRlcm5hbCB9KTtcblxuXHRcdGlmIChwYXJlbnQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKCFwYXJlbnQ/LltOb2RlLk1ldGFdKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHBhcmVudCB0byBiZSBhIE5vZGUnKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHZhbHVlID09PSBwYXJlbnQgfHwgdmFsdWUgPT09IHBhcmVudFtOb2RlLk1ldGFdLnZhbHVlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignUGFyZW50IG11c3QgYmUgbm90IGJlIHRoZSBzYW1lIGFzIHRoZSBub2RlJyk7XG5cdFx0XHR9XG5cblx0XHRcdGludGVybmFsLnBhcmVudHMuYWRkKHBhcmVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGludGVybmFsLnJlaGFzaCh0cnVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbm9kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWN1cnNpdmVseSBtZXJnZSB0aGUgdmFsdWUgaW50byB0aGlzIG9iamVjdC5cblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIG5vZGUgdG8gcGF1c2UuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBtZXJnZS5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHN0YXRpYyBtZXJnZShub2RlLCB2YWx1ZSkge1xuXHRcdGlmICghbm9kZT8uW05vZGUuTWV0YV0pIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIG1lcmdlIGRlc3RpbmF0aW9uIHRvIGJlIGEgTm9kZSBpbnN0YW5jZScpO1xuXHRcdH1cblxuXHRcdGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbWVyZ2Ugc291cmNlIHRvIGJlIGFuIG9iamVjdCcpO1xuXHRcdH1cblxuXHRcdG5vZGVbTm9kZS5NZXRhXS5wYXVzZSgpO1xuXG5cdFx0KGZ1bmN0aW9uIG1peChzcmMsIGRlc3QpIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhzcmMpKSB7XG5cdFx0XHRcdGlmIChrZXkgPT09IE5vZGUuTWV0YSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3Qgc3JjVmFsdWUgPSBzcmNba2V5XTtcblxuXHRcdFx0XHRpZiAoc3JjVmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHNyY1ZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShzcmNWYWx1ZSkpIHtcblx0XHRcdFx0XHRpZiAoIWRlc3Rba2V5XT8uW05vZGUuTWV0YV0pIHtcblx0XHRcdFx0XHRcdGRlc3Rba2V5XSA9IHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRtaXgoc3JjVmFsdWUsIGRlc3Rba2V5XSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkZXN0W2tleV0pICYmIEFycmF5LmlzQXJyYXkoc3JjVmFsdWUpKSB7XG5cdFx0XHRcdFx0Ly8gb3ZlcndyaXRlIGRlc3RpbmF0aW9uIHdpdGggbmV3IHZhbHVlc1xuXHRcdFx0XHRcdGRlc3Rba2V5XS5zcGxpY2UoMCwgZGVzdFtrZXldLmxlbmd0aCwgLi4uc3JjVmFsdWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlc3Rba2V5XSA9IHNyY1ZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSh2YWx1ZSwgbm9kZSkpO1xuXG5cdFx0bm9kZVtOb2RlLk1ldGFdLnJlc3VtZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBhdXNlcyBhbGwgY2hhbmdlIG5vdGlmaWNhdGlvbnMgdW50aWwgcmVzdW1lZC5cblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIG5vZGUgdG8gcGF1c2UuXG5cdCAqIEByZXR1cm5zIHtCb29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBpdCB3YXMgYWxyZWFkeSBwYXVzZWQuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzdGF0aWMgcGF1c2Uobm9kZSkge1xuXHRcdHJldHVybiBub2RlW05vZGUuTWV0YV0ucGF1c2UoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVbnBhdXNlcyBub3RpZmljYXRpb25zIGFuZCBzZW5kcyBvdXQgYW55IHBlbmRpbmcgbm90aWZpY2F0aW9ucy5cblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIG5vZGUgdG8gcmVzdW1lLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0c3RhdGljIHJlc3VtZShub2RlKSB7XG5cdFx0bm9kZVtOb2RlLk1ldGFdLnJlc3VtZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYSBsaXN0ZW5lci5cblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIG5vZGUgdG8gdW53YXRjaC5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW2xpc3RlbmVyXSAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gc29tZXRoaW5nIGNoYW5nZXMuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzdGF0aWMgdW53YXRjaChub2RlLCBsaXN0ZW5lcikge1xuXHRcdG5vZGVbTm9kZS5NZXRhXS51bndhdGNoKGxpc3RlbmVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgbGlzdGVuZXIgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHNwZWNpZmllZCBvYmplY3Qgb3IgYW55IG9mIGl0cyBwcm9wZXJ0aWVzL2VsZW1lbnRzIGFyZVxuXHQgKiBjaGFuZ2VkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgbm9kZSB0byB3YXRjaC5cblx0ICogQHBhcmFtIHtTdHJpbmd8QXJyYXkuPFN0cmluZz59IFtmaWx0ZXJdIC0gQSBwcm9wZXJ0eSBuYW1lIG9yIGFycmF5IG9mIG5lc3RlZCBwcm9wZXJ0aWVzIHRvXG5cdCAqIHdhdGNoLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gc29tZXRoaW5nIGNoYW5nZXMuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzdGF0aWMgd2F0Y2gobm9kZSwgZmlsdGVyLCBsaXN0ZW5lcikge1xuXHRcdG5vZGVbTm9kZS5NZXRhXS53YXRjaChmaWx0ZXIsIGxpc3RlbmVyKTtcblx0fVxufVxuXG4vKipcbiAqIEZpbHRlcnMgdGhlIHNwZWNpZmllZCBub2RlLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIGZpbHRlci5cbiAqIEBwYXJhbSB7QXJyYXkuPFN0cmluZz59IGZpbHRlciAtIFRoZSBmaWx0ZXIgdG8gYXBwbHkgdG8gdGhlIG5vZGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBmaWx0ZXJPYmplY3Qobm9kZSwgZmlsdGVyKSB7XG5cdGxldCBmb3VuZCA9IHRydWU7XG5cdGxldCBoYXNoID0gbnVsbDtcblx0bGV0IHZhbHVlID0gbm9kZTtcblxuXHQvLyBmaW5kIHRoZSB2YWx1ZSB3ZSdyZSBpbnRlcmVzdGVkIGluXG5cdGZvciAobGV0IGkgPSAwLCBsZW4gPSBmaWx0ZXIubGVuZ3RoOyB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIGkgPCBsZW47IGkrKykge1xuXHRcdGNvbnN0IGtleSA9IGZpbHRlcltpXTtcblx0XHRpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkge1xuXHRcdFx0Zm91bmQgPSBmYWxzZTtcblx0XHRcdHZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGhhc2ggPSB2YWx1ZVtOb2RlLk1ldGFdLmhhc2hlc1trZXldO1xuXHRcdGlmIChoYXNoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGhhc2ggPSBudWxsO1xuXHRcdH1cblx0XHR2YWx1ZSA9IHZhbHVlW2tleV07XG5cdH1cblxuXHRyZXR1cm4geyBmb3VuZCwgaGFzaCwgdmFsdWUgfTtcbn1cbiJdLCJmaWxlIjoibm9kZS5qcyJ9 |
@@ -109,2 +109,2 @@ "use strict"; | ||
exports.default = StoreRegistry; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0b3JlLXJlZ2lzdHJ5LmpzIl0sIm5hbWVzIjpbImxvZyIsIlN0b3JlUmVnaXN0cnkiLCJhZGQiLCJjbHMiLCJUeXBlRXJyb3IiLCJwcm90b3R5cGUiLCJTdG9yZSIsImV4dGVuc2lvbiIsIm5hbWUiLCJ0eXBlcyIsImdldCIsImV4dCIsInJlbW92ZSIsImV4dE9yQ2xhc3MiLCJmb3VuZCIsIk9iamVjdCIsImVudHJpZXMiLCJFcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOzs7Ozs7QUFFQSxNQUFNO0FBQUVBLEVBQUFBO0FBQUYsSUFBVSx3QkFBVSxZQUFWLEVBQXdCLE9BQXhCLENBQWhCO0FBRUE7Ozs7QUFHZSxNQUFNQyxhQUFOLENBQW9CO0FBQUE7QUFBQSxtQ0FNMUIsRUFOMEI7QUFBQTs7QUFRbEM7Ozs7Ozs7QUFPQUMsRUFBQUEsR0FBRyxDQUFDQyxHQUFELEVBQU07QUFDUixRQUFJLENBQUNBLEdBQUQsSUFBUSxPQUFPQSxHQUFQLEtBQWUsVUFBM0IsRUFBdUM7QUFDdEMsWUFBTSxJQUFJQyxTQUFKLENBQWMsOEJBQWQsQ0FBTjtBQUNBOztBQUVELFFBQUksRUFBRUQsR0FBRyxDQUFDRSxTQUFKLFlBQXlCQyxjQUEzQixDQUFKLEVBQXVDO0FBQ3RDLFlBQU0sSUFBSUYsU0FBSixDQUFjLHNDQUFkLENBQU47QUFDQTs7QUFFRCxRQUFJLENBQUNELEdBQUcsQ0FBQ0ksU0FBTCxJQUFrQixPQUFPSixHQUFHLENBQUNJLFNBQVgsS0FBeUIsUUFBL0MsRUFBeUQ7QUFDeEQsWUFBTSxJQUFJSCxTQUFKLENBQWUsa0JBQWlCRCxHQUFHLENBQUNLLElBQUssMkNBQXpDLENBQU47QUFDQTs7QUFFRCxRQUFJLEtBQUtDLEtBQUwsQ0FBV04sR0FBRyxDQUFDSSxTQUFmLE1BQThCSixHQUFsQyxFQUF1QztBQUN0Q0gsTUFBQUEsR0FBRyxDQUFFLGVBQWNHLEdBQUcsQ0FBQ0ssSUFBSyxzQkFBekIsQ0FBSDtBQUNBLEtBRkQsTUFFTztBQUNOUixNQUFBQSxHQUFHLENBQUUsMkJBQTBCRyxHQUFHLENBQUNLLElBQUssVUFBU0wsR0FBRyxDQUFDSSxTQUFVLFNBQTVELENBQUg7QUFDQSxXQUFLRSxLQUFMLENBQVdOLEdBQUcsQ0FBQ0ksU0FBZixJQUE0QkosR0FBNUI7QUFDQTs7QUFFRCxXQUFPLElBQVA7QUFDQTtBQUVEOzs7Ozs7Ozs7QUFPQU8sRUFBQUEsR0FBRyxDQUFDQyxHQUFELEVBQU07QUFDUixXQUFPLEtBQUtGLEtBQUwsQ0FBV0UsR0FBWCxDQUFQO0FBQ0E7QUFFRDs7Ozs7Ozs7Ozs7QUFTQUMsRUFBQUEsTUFBTSxDQUFDQyxVQUFELEVBQWE7QUFDbEIsUUFBSUMsS0FBSyxHQUFHLEtBQVo7O0FBRUEsUUFBSUQsVUFBVSxJQUFJLE9BQU9BLFVBQVAsS0FBc0IsUUFBeEMsRUFBa0Q7QUFDakQsVUFBSSxLQUFLSixLQUFMLENBQVdJLFVBQVgsQ0FBSixFQUE0QjtBQUMzQmIsUUFBQUEsR0FBRyxDQUFFLDZCQUE0QixLQUFLUyxLQUFMLENBQVdJLFVBQVgsRUFBdUJMLElBQUssVUFBU0ssVUFBVyxTQUE5RSxDQUFIO0FBQ0EsZUFBTyxLQUFLSixLQUFMLENBQVdJLFVBQVgsQ0FBUDtBQUNBQyxRQUFBQSxLQUFLLEdBQUcsSUFBUjtBQUNBO0FBQ0QsS0FORCxNQU1PLElBQUksT0FBT0QsVUFBUCxLQUFzQixVQUF0QixJQUFvQ0EsVUFBVSxDQUFDUixTQUFYLFlBQWdDQyxjQUF4RSxFQUErRTtBQUNyRk4sTUFBQUEsR0FBRyxDQUFFLG1DQUFrQ2EsVUFBVSxDQUFDTCxJQUFLLEdBQXBELENBQUg7O0FBQ0EsV0FBSyxNQUFNLENBQUVHLEdBQUYsRUFBT1IsR0FBUCxDQUFYLElBQTJCWSxNQUFNLENBQUNDLE9BQVAsQ0FBZSxLQUFLUCxLQUFwQixDQUEzQixFQUF1RDtBQUN0RCxZQUFJTixHQUFHLEtBQUtVLFVBQVosRUFBd0I7QUFDdkJiLFVBQUFBLEdBQUcsQ0FBRSw2QkFBNEJHLEdBQUcsQ0FBQ0ssSUFBSyxVQUFTRyxHQUFJLFNBQXBELENBQUg7QUFDQSxpQkFBTyxLQUFLRixLQUFMLENBQVdFLEdBQVgsQ0FBUDtBQUNBRyxVQUFBQSxLQUFLLEdBQUcsSUFBUjtBQUNBO0FBQ0Q7QUFDRCxLQVRNLE1BU0E7QUFDTixZQUFNLElBQUlHLEtBQUosQ0FBVSwwRUFBVixDQUFOO0FBQ0E7O0FBRUQsV0FBT0gsS0FBUDtBQUNBOztBQWpGaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU3RvcmUgZnJvbSAnLi9zdG9yZSc7XG5pbXBvcnQgc25vb3Bsb2dnIGZyb20gJ3Nub29wbG9nZyc7XG5cbmNvbnN0IHsgbG9nIH0gPSBzbm9vcGxvZ2coJ2NvbmZpZy1raXQnKSgndHlwZXMnKTtcblxuLyoqXG4gKiBBIHJlZ2lzdHJ5IGZvciBzdG9yZSB0eXBlIGNsYXNzZXMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0b3JlUmVnaXN0cnkge1xuXHQvKipcblx0ICogQSBtYXAgb2Ygc3RvcmUgdHlwZSBleHRlbnNpb25zIHRvIHRoZSBjbGFzcyBpbXBsZW1lbnRhdGlvbnMuXG5cdCAqXG5cdCAqIEB0eXBlIHtPYmplY3R9XG5cdCAqL1xuXHR0eXBlcyA9IHt9O1xuXG5cdC8qKlxuXHQgKiBWYWxpZGF0ZXMgYW5kIHJlZ2lzdGVycyBhIHN0b3JlIHR5cGUgY2xhc3MgYnkgZXh0ZW5zaW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0b3JlfSBjbHMgLSBUaGUgc3RvcmUgdHlwZSBjbGFzcyB0byBhZGQuXG5cdCAqIEByZXR1cm5zIHtUeXBlc01hcH1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFkZChjbHMpIHtcblx0XHRpZiAoIWNscyB8fCB0eXBlb2YgY2xzICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIGNvbmZpZyB0eXBlIGNsYXNzJyk7XG5cdFx0fVxuXG5cdFx0aWYgKCEoY2xzLnByb3RvdHlwZSBpbnN0YW5jZW9mIFN0b3JlKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignU3RvcmUgdHlwZSBtdXN0IGV4dGVuZCBhIFN0b3JlIGNsYXNzJyk7XG5cdFx0fVxuXG5cdFx0aWYgKCFjbHMuZXh0ZW5zaW9uIHx8IHR5cGVvZiBjbHMuZXh0ZW5zaW9uICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgdHlwZSBcIiR7Y2xzLm5hbWV9XCIgdG8gZGVjbGFyZSBhIG5vbi1lbXB0eSBzdHJpbmcgZXh0ZW5zaW9uYCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMudHlwZXNbY2xzLmV4dGVuc2lvbl0gPT09IGNscykge1xuXHRcdFx0bG9nKGBTdG9yZSB0eXBlIFwiJHtjbHMubmFtZX1cIiBhbHJlYWR5IHJlZ2lzdGVyZWRgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bG9nKGBSZWdpc3RlcmluZyBzdG9yZSB0eXBlIFwiJHtjbHMubmFtZX1cIiBmb3IgXCIke2Nscy5leHRlbnNpb259XCIgZmlsZXNgKTtcblx0XHRcdHRoaXMudHlwZXNbY2xzLmV4dGVuc2lvbl0gPSBjbHM7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBzdG9yZSB0eXBlIGNsYXNzIGJ5IGV4dGVuc2lvbi4gUmV0dXJucyBgdW5kZWZpbmVkYCBpZiBub3QgZm91bmQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBleHQgLSBUaGUgZmlsZSBleHRlbnNpb24gYmVnaW5uaW5nIHdpdGggYSBwZXJpb2QuXG5cdCAqIEByZXR1cm5zIHtTdG9yZX1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGdldChleHQpIHtcblx0XHRyZXR1cm4gdGhpcy50eXBlc1tleHRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVucmVnaXN0ZXJzIGEgc3RvcmUgdHlwZSBjbGFzcyBieSBleHRlbnNpb24gb3IgY2xhc3MgcmVmZXJlbmNlLiBSZXR1cm5zIGB0cnVlYCBpZlxuXHQgKiBzdWNjZXNzZnVsLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ3xTdG9yZX0gZXh0T3JDbGFzcyAtIFRoZSBmaWxlIGV4dGVuc2lvbiBiZWdpbm5pbmcgd2l0aCBhIHBlcmlvZCBvciBhIHJlZmVyZW5jZVxuXHQgKiB0byB0aGUgc3RvcmUgdHlwZSBjbGFzcy5cblx0ICogQHJldHVybnMge0Jvb2xlYW59XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRyZW1vdmUoZXh0T3JDbGFzcykge1xuXHRcdGxldCBmb3VuZCA9IGZhbHNlO1xuXG5cdFx0aWYgKGV4dE9yQ2xhc3MgJiYgdHlwZW9mIGV4dE9yQ2xhc3MgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRpZiAodGhpcy50eXBlc1tleHRPckNsYXNzXSkge1xuXHRcdFx0XHRsb2coYFVucmVnaXN0ZXJpbmcgc3RvcmUgdHlwZSBcIiR7dGhpcy50eXBlc1tleHRPckNsYXNzXS5uYW1lfVwiIGZvciBcIiR7ZXh0T3JDbGFzc31cIiBmaWxlc2ApO1xuXHRcdFx0XHRkZWxldGUgdGhpcy50eXBlc1tleHRPckNsYXNzXTtcblx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIGV4dE9yQ2xhc3MgPT09ICdmdW5jdGlvbicgJiYgZXh0T3JDbGFzcy5wcm90b3R5cGUgaW5zdGFuY2VvZiBTdG9yZSkge1xuXHRcdFx0bG9nKGBTY2FubmluZyBzdG9yZSB0eXBlcyBmb3IgY2xhc3MgXCIke2V4dE9yQ2xhc3MubmFtZX1cImApO1xuXHRcdFx0Zm9yIChjb25zdCBbIGV4dCwgY2xzIF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy50eXBlcykpIHtcblx0XHRcdFx0aWYgKGNscyA9PT0gZXh0T3JDbGFzcykge1xuXHRcdFx0XHRcdGxvZyhgVW5yZWdpc3RlcmluZyBzdG9yZSB0eXBlIFwiJHtjbHMubmFtZX1cIiBmb3IgXCIke2V4dH1cIiBmaWxlc2ApO1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLnR5cGVzW2V4dF07XG5cdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgc3RvcmUgdHlwZSByZWZlcmVuY2UgdG8gYmUgYSBmaWxlIGV4dGVuc2lvbiBvciBzdG9yZSB0eXBlIGNsYXNzJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9XG59XG4iXSwiZmlsZSI6InN0b3JlLXJlZ2lzdHJ5LmpzIn0= | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0b3JlLXJlZ2lzdHJ5LmpzIl0sIm5hbWVzIjpbImxvZyIsIlN0b3JlUmVnaXN0cnkiLCJhZGQiLCJjbHMiLCJUeXBlRXJyb3IiLCJwcm90b3R5cGUiLCJTdG9yZSIsImV4dGVuc2lvbiIsIm5hbWUiLCJ0eXBlcyIsImdldCIsImV4dCIsInJlbW92ZSIsImV4dE9yQ2xhc3MiLCJmb3VuZCIsIk9iamVjdCIsImVudHJpZXMiLCJFcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOzs7Ozs7QUFFQSxNQUFNO0FBQUVBLEVBQUFBO0FBQUYsSUFBVSx3QkFBVSxZQUFWLEVBQXdCLE9BQXhCLENBQWhCO0FBRUE7QUFDQTtBQUNBOztBQUNlLE1BQU1DLGFBQU4sQ0FBb0I7QUFBQTtBQUFBLG1DQU0xQixFQU4wQjtBQUFBOztBQVFsQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNDQyxFQUFBQSxHQUFHLENBQUNDLEdBQUQsRUFBTTtBQUNSLFFBQUksQ0FBQ0EsR0FBRCxJQUFRLE9BQU9BLEdBQVAsS0FBZSxVQUEzQixFQUF1QztBQUN0QyxZQUFNLElBQUlDLFNBQUosQ0FBYyw4QkFBZCxDQUFOO0FBQ0E7O0FBRUQsUUFBSSxFQUFFRCxHQUFHLENBQUNFLFNBQUosWUFBeUJDLGNBQTNCLENBQUosRUFBdUM7QUFDdEMsWUFBTSxJQUFJRixTQUFKLENBQWMsc0NBQWQsQ0FBTjtBQUNBOztBQUVELFFBQUksQ0FBQ0QsR0FBRyxDQUFDSSxTQUFMLElBQWtCLE9BQU9KLEdBQUcsQ0FBQ0ksU0FBWCxLQUF5QixRQUEvQyxFQUF5RDtBQUN4RCxZQUFNLElBQUlILFNBQUosQ0FBZSxrQkFBaUJELEdBQUcsQ0FBQ0ssSUFBSywyQ0FBekMsQ0FBTjtBQUNBOztBQUVELFFBQUksS0FBS0MsS0FBTCxDQUFXTixHQUFHLENBQUNJLFNBQWYsTUFBOEJKLEdBQWxDLEVBQXVDO0FBQ3RDSCxNQUFBQSxHQUFHLENBQUUsZUFBY0csR0FBRyxDQUFDSyxJQUFLLHNCQUF6QixDQUFIO0FBQ0EsS0FGRCxNQUVPO0FBQ05SLE1BQUFBLEdBQUcsQ0FBRSwyQkFBMEJHLEdBQUcsQ0FBQ0ssSUFBSyxVQUFTTCxHQUFHLENBQUNJLFNBQVUsU0FBNUQsQ0FBSDtBQUNBLFdBQUtFLEtBQUwsQ0FBV04sR0FBRyxDQUFDSSxTQUFmLElBQTRCSixHQUE1QjtBQUNBOztBQUVELFdBQU8sSUFBUDtBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNDTyxFQUFBQSxHQUFHLENBQUNDLEdBQUQsRUFBTTtBQUNSLFdBQU8sS0FBS0YsS0FBTCxDQUFXRSxHQUFYLENBQVA7QUFDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0NDLEVBQUFBLE1BQU0sQ0FBQ0MsVUFBRCxFQUFhO0FBQ2xCLFFBQUlDLEtBQUssR0FBRyxLQUFaOztBQUVBLFFBQUlELFVBQVUsSUFBSSxPQUFPQSxVQUFQLEtBQXNCLFFBQXhDLEVBQWtEO0FBQ2pELFVBQUksS0FBS0osS0FBTCxDQUFXSSxVQUFYLENBQUosRUFBNEI7QUFDM0JiLFFBQUFBLEdBQUcsQ0FBRSw2QkFBNEIsS0FBS1MsS0FBTCxDQUFXSSxVQUFYLEVBQXVCTCxJQUFLLFVBQVNLLFVBQVcsU0FBOUUsQ0FBSDtBQUNBLGVBQU8sS0FBS0osS0FBTCxDQUFXSSxVQUFYLENBQVA7QUFDQUMsUUFBQUEsS0FBSyxHQUFHLElBQVI7QUFDQTtBQUNELEtBTkQsTUFNTyxJQUFJLE9BQU9ELFVBQVAsS0FBc0IsVUFBdEIsSUFBb0NBLFVBQVUsQ0FBQ1IsU0FBWCxZQUFnQ0MsY0FBeEUsRUFBK0U7QUFDckZOLE1BQUFBLEdBQUcsQ0FBRSxtQ0FBa0NhLFVBQVUsQ0FBQ0wsSUFBSyxHQUFwRCxDQUFIOztBQUNBLFdBQUssTUFBTSxDQUFFRyxHQUFGLEVBQU9SLEdBQVAsQ0FBWCxJQUEyQlksTUFBTSxDQUFDQyxPQUFQLENBQWUsS0FBS1AsS0FBcEIsQ0FBM0IsRUFBdUQ7QUFDdEQsWUFBSU4sR0FBRyxLQUFLVSxVQUFaLEVBQXdCO0FBQ3ZCYixVQUFBQSxHQUFHLENBQUUsNkJBQTRCRyxHQUFHLENBQUNLLElBQUssVUFBU0csR0FBSSxTQUFwRCxDQUFIO0FBQ0EsaUJBQU8sS0FBS0YsS0FBTCxDQUFXRSxHQUFYLENBQVA7QUFDQUcsVUFBQUEsS0FBSyxHQUFHLElBQVI7QUFDQTtBQUNEO0FBQ0QsS0FUTSxNQVNBO0FBQ04sWUFBTSxJQUFJRyxLQUFKLENBQVUsMEVBQVYsQ0FBTjtBQUNBOztBQUVELFdBQU9ILEtBQVA7QUFDQTs7QUFqRmlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFN0b3JlIGZyb20gJy4vc3RvcmUnO1xuaW1wb3J0IHNub29wbG9nZyBmcm9tICdzbm9vcGxvZ2cnO1xuXG5jb25zdCB7IGxvZyB9ID0gc25vb3Bsb2dnKCdjb25maWcta2l0JykoJ3R5cGVzJyk7XG5cbi8qKlxuICogQSByZWdpc3RyeSBmb3Igc3RvcmUgdHlwZSBjbGFzc2VzLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdG9yZVJlZ2lzdHJ5IHtcblx0LyoqXG5cdCAqIEEgbWFwIG9mIHN0b3JlIHR5cGUgZXh0ZW5zaW9ucyB0byB0aGUgY2xhc3MgaW1wbGVtZW50YXRpb25zLlxuXHQgKlxuXHQgKiBAdHlwZSB7T2JqZWN0fVxuXHQgKi9cblx0dHlwZXMgPSB7fTtcblxuXHQvKipcblx0ICogVmFsaWRhdGVzIGFuZCByZWdpc3RlcnMgYSBzdG9yZSB0eXBlIGNsYXNzIGJ5IGV4dGVuc2lvbi5cblx0ICpcblx0ICogQHBhcmFtIHtTdG9yZX0gY2xzIC0gVGhlIHN0b3JlIHR5cGUgY2xhc3MgdG8gYWRkLlxuXHQgKiBAcmV0dXJucyB7VHlwZXNNYXB9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRhZGQoY2xzKSB7XG5cdFx0aWYgKCFjbHMgfHwgdHlwZW9mIGNscyAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYSBjb25maWcgdHlwZSBjbGFzcycpO1xuXHRcdH1cblxuXHRcdGlmICghKGNscy5wcm90b3R5cGUgaW5zdGFuY2VvZiBTdG9yZSkpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1N0b3JlIHR5cGUgbXVzdCBleHRlbmQgYSBTdG9yZSBjbGFzcycpO1xuXHRcdH1cblxuXHRcdGlmICghY2xzLmV4dGVuc2lvbiB8fCB0eXBlb2YgY2xzLmV4dGVuc2lvbiAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIHR5cGUgXCIke2Nscy5uYW1lfVwiIHRvIGRlY2xhcmUgYSBub24tZW1wdHkgc3RyaW5nIGV4dGVuc2lvbmApO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnR5cGVzW2Nscy5leHRlbnNpb25dID09PSBjbHMpIHtcblx0XHRcdGxvZyhgU3RvcmUgdHlwZSBcIiR7Y2xzLm5hbWV9XCIgYWxyZWFkeSByZWdpc3RlcmVkYCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxvZyhgUmVnaXN0ZXJpbmcgc3RvcmUgdHlwZSBcIiR7Y2xzLm5hbWV9XCIgZm9yIFwiJHtjbHMuZXh0ZW5zaW9ufVwiIGZpbGVzYCk7XG5cdFx0XHR0aGlzLnR5cGVzW2Nscy5leHRlbnNpb25dID0gY2xzO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgc3RvcmUgdHlwZSBjbGFzcyBieSBleHRlbnNpb24uIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgbm90IGZvdW5kLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZXh0IC0gVGhlIGZpbGUgZXh0ZW5zaW9uIGJlZ2lubmluZyB3aXRoIGEgcGVyaW9kLlxuXHQgKiBAcmV0dXJucyB7U3RvcmV9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRnZXQoZXh0KSB7XG5cdFx0cmV0dXJuIHRoaXMudHlwZXNbZXh0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVbnJlZ2lzdGVycyBhIHN0b3JlIHR5cGUgY2xhc3MgYnkgZXh0ZW5zaW9uIG9yIGNsYXNzIHJlZmVyZW5jZS4gUmV0dXJucyBgdHJ1ZWAgaWZcblx0ICogc3VjY2Vzc2Z1bC5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8U3RvcmV9IGV4dE9yQ2xhc3MgLSBUaGUgZmlsZSBleHRlbnNpb24gYmVnaW5uaW5nIHdpdGggYSBwZXJpb2Qgb3IgYSByZWZlcmVuY2Vcblx0ICogdG8gdGhlIHN0b3JlIHR5cGUgY2xhc3MuXG5cdCAqIEByZXR1cm5zIHtCb29sZWFufVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0cmVtb3ZlKGV4dE9yQ2xhc3MpIHtcblx0XHRsZXQgZm91bmQgPSBmYWxzZTtcblxuXHRcdGlmIChleHRPckNsYXNzICYmIHR5cGVvZiBleHRPckNsYXNzID09PSAnc3RyaW5nJykge1xuXHRcdFx0aWYgKHRoaXMudHlwZXNbZXh0T3JDbGFzc10pIHtcblx0XHRcdFx0bG9nKGBVbnJlZ2lzdGVyaW5nIHN0b3JlIHR5cGUgXCIke3RoaXMudHlwZXNbZXh0T3JDbGFzc10ubmFtZX1cIiBmb3IgXCIke2V4dE9yQ2xhc3N9XCIgZmlsZXNgKTtcblx0XHRcdFx0ZGVsZXRlIHRoaXMudHlwZXNbZXh0T3JDbGFzc107XG5cdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBleHRPckNsYXNzID09PSAnZnVuY3Rpb24nICYmIGV4dE9yQ2xhc3MucHJvdG90eXBlIGluc3RhbmNlb2YgU3RvcmUpIHtcblx0XHRcdGxvZyhgU2Nhbm5pbmcgc3RvcmUgdHlwZXMgZm9yIGNsYXNzIFwiJHtleHRPckNsYXNzLm5hbWV9XCJgKTtcblx0XHRcdGZvciAoY29uc3QgWyBleHQsIGNscyBdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMudHlwZXMpKSB7XG5cdFx0XHRcdGlmIChjbHMgPT09IGV4dE9yQ2xhc3MpIHtcblx0XHRcdFx0XHRsb2coYFVucmVnaXN0ZXJpbmcgc3RvcmUgdHlwZSBcIiR7Y2xzLm5hbWV9XCIgZm9yIFwiJHtleHR9XCIgZmlsZXNgKTtcblx0XHRcdFx0XHRkZWxldGUgdGhpcy50eXBlc1tleHRdO1xuXHRcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHN0b3JlIHR5cGUgcmVmZXJlbmNlIHRvIGJlIGEgZmlsZSBleHRlbnNpb24gb3Igc3RvcmUgdHlwZSBjbGFzcycpO1xuXHRcdH1cblxuXHRcdHJldHVybiBmb3VuZDtcblx0fVxufVxuIl0sImZpbGUiOiJzdG9yZS1yZWdpc3RyeS5qcyJ9 |
@@ -8,6 +8,8 @@ "use strict"; | ||
var _joi = _interopRequireDefault(require("joi")); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
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; } | ||
/* eslint no-unused-vars: 0 */ | ||
/** | ||
@@ -23,2 +25,8 @@ * A base class for all store implemntations. | ||
/** | ||
* A Joi schema. The `Layer` will pass in the schema into the `schema` setter during | ||
* construction or when the schema is loaded. | ||
* @type {Object} | ||
*/ | ||
/** | ||
* Initializes the store. | ||
@@ -31,2 +39,4 @@ * | ||
constructor(opts = {}) { | ||
_defineProperty(this, "_schema", null); | ||
if (new.target === Store) { | ||
@@ -77,6 +87,3 @@ throw new TypeError('Cannot create instance of abstract Store class'); | ||
* | ||
* @param {Object} opts - Various options | ||
* @param {String} opts.file - The path to the config file to load. | ||
* @param {String} [opts.ns] - A namespace to wrap around the loaded data. | ||
* @param {Function} [opts.validate] - A function to validate the data against a schema. | ||
* @param {String} file - The path to the config file to load. | ||
* @access public | ||
@@ -86,3 +93,3 @@ */ | ||
load(opts) { | ||
load(file) { | ||
throw new Error('load() not implemented'); | ||
@@ -113,2 +120,20 @@ } | ||
/** | ||
* A Joi schema object. | ||
* @type {Object} | ||
* @access public | ||
*/ | ||
get schema() { | ||
return this._schema; | ||
} | ||
set schema(newSchema) { | ||
if (newSchema && (!_joi.default.isSchema(newSchema) || newSchema.type !== 'object')) { | ||
throw new TypeError('Expected schema root to be an object'); | ||
} | ||
this._schema = newSchema; | ||
} | ||
/** | ||
* Sets the value for a given config key. | ||
@@ -152,2 +177,2 @@ * | ||
_defineProperty(Store, "extension", null); | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0b3JlLmpzIl0sIm5hbWVzIjpbIlN0b3JlIiwiY29uc3RydWN0b3IiLCJvcHRzIiwibmV3IiwidGFyZ2V0IiwiVHlwZUVycm9yIiwiZGVsZXRlIiwia2V5IiwiRXJyb3IiLCJnZXQiLCJoYXMiLCJsb2FkIiwibWVyZ2UiLCJ2YWx1ZSIsInNhdmUiLCJmaWxlIiwic2V0IiwidW53YXRjaCIsImhhbmRsZXIiLCJ3YXRjaCIsImZpbHRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBRUE7OztBQUdlLE1BQU1BLEtBQU4sQ0FBWTtBQUMxQjs7Ozs7QUFNQTs7Ozs7OztBQU9BQyxFQUFBQSxXQUFXLENBQUNDLElBQUksR0FBRyxFQUFSLEVBQVk7QUFDdEIsUUFBSUMsR0FBRyxDQUFDQyxNQUFKLEtBQWVKLEtBQW5CLEVBQTBCO0FBQ3pCLFlBQU0sSUFBSUssU0FBSixDQUFjLGdEQUFkLENBQU47QUFDQTs7QUFFRCxRQUFJLENBQUNILElBQUQsSUFBUyxPQUFPQSxJQUFQLEtBQWdCLFFBQTdCLEVBQXVDO0FBQ3RDLFlBQU0sSUFBSUcsU0FBSixDQUFjLHdDQUFkLENBQU47QUFDQTtBQUNEO0FBRUQ7Ozs7Ozs7O0FBTUFDLEVBQUFBLE1BQU0sQ0FBQ0MsR0FBRCxFQUFNO0FBQ1gsVUFBTSxJQUFJQyxLQUFKLENBQVUsMEJBQVYsQ0FBTjtBQUNBO0FBRUQ7Ozs7Ozs7OztBQU9BQyxFQUFBQSxHQUFHLENBQUNGLEdBQUQsRUFBTTtBQUNSLFVBQU0sSUFBSUMsS0FBSixDQUFVLHVCQUFWLENBQU47QUFDQTtBQUVEOzs7Ozs7OztBQU1BRSxFQUFBQSxHQUFHLENBQUNILEdBQUQsRUFBTTtBQUNSLFVBQU0sSUFBSUMsS0FBSixDQUFVLHVCQUFWLENBQU47QUFDQTtBQUVEOzs7Ozs7Ozs7OztBQVNBRyxFQUFBQSxJQUFJLENBQUNULElBQUQsRUFBTztBQUNWLFVBQU0sSUFBSU0sS0FBSixDQUFVLHdCQUFWLENBQU47QUFDQTtBQUVEOzs7Ozs7OztBQU1BSSxFQUFBQSxLQUFLLENBQUNDLEtBQUQsRUFBUTtBQUNaLFVBQU0sSUFBSUwsS0FBSixDQUFVLHlCQUFWLENBQU47QUFDQTtBQUVEOzs7Ozs7OztBQU1BTSxFQUFBQSxJQUFJLENBQUNDLElBQUQsRUFBTztBQUNWLFVBQU0sSUFBSVAsS0FBSixDQUFVLHdCQUFWLENBQU47QUFDQTtBQUVEOzs7Ozs7Ozs7QUFPQVEsRUFBQUEsR0FBRyxDQUFDVCxHQUFELEVBQU1NLEtBQU4sRUFBYTtBQUNmLFVBQU0sSUFBSUwsS0FBSixDQUFVLHVCQUFWLENBQU47QUFDQTtBQUVEOzs7Ozs7OztBQU1BUyxFQUFBQSxPQUFPLENBQUNDLE9BQUQsRUFBVSxDQUNoQjtBQUNBO0FBRUQ7Ozs7Ozs7OztBQU9BQyxFQUFBQSxLQUFLLENBQUNDLE1BQUQsRUFBU0YsT0FBVCxFQUFrQixDQUN0QjtBQUNBOztBQXRIeUI7Ozs7Z0JBQU5sQixLLGVBS0QsSSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBuby11bnVzZWQtdmFyczogMCAqL1xuXG4vKipcbiAqIEEgYmFzZSBjbGFzcyBmb3IgYWxsIHN0b3JlIGltcGxlbW50YXRpb25zLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdG9yZSB7XG5cdC8qKlxuXHQgKiBUaGUgZmlsZSBleHRlbnNpb24gYXNzb2NpYXRlZCB0byB0aGlzIHR5cGUgb2Ygc3RvcmUuXG5cdCAqIEB0eXBlIHtTdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZXh0ZW5zaW9uID0gbnVsbDtcblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIHN0b3JlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIC0gVmFyaW91cyBvcHRpb25zLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuZmlsZV0gLSBUaGUgZmlsZSBiYWNraW5nIHRoaXMgbGF5ZXIncyBzdG9yZS5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuXHRcdGlmIChuZXcudGFyZ2V0ID09PSBTdG9yZSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNyZWF0ZSBpbnN0YW5jZSBvZiBhYnN0cmFjdCBTdG9yZSBjbGFzcycpO1xuXHRcdH1cblxuXHRcdGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHN0b3JlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgYSBjb25maWcgdmFsdWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7QXJyYXkuPFN0cmluZz59IGtleSAtIFRoZSBrZXkgdG8gZGVsZXRlLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0ZGVsZXRlKGtleSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignZGVsZXRlKCkgbm90IGltcGxlbWVudGVkJyk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGEgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQga2V5LlxuXHQgKlxuXHQgKiBAcGFyYW0ge0FycmF5LjxTdHJpbmc+fSBba2V5XSAtIFRoZSBrZXkgdG8gZ2V0LiBXaGVuIGB1bmRlZmluZWRgLCB0aGUgZW50aXJlIGNvbmZpZyBpc1xuXHQgKiByZXR1cm5lZC5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGdldChrZXkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ2dldCgpIG5vdCBpbXBsZW1lbnRlZCcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgaWYgYSBrZXkgaXMgc2V0LlxuXHQgKlxuXHQgKiBAcGFyYW0ge0FycmF5LjxTdHJpbmc+fSBba2V5XSAtIFRoZSBrZXkgdG8gY2hlY2suXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRoYXMoa2V5KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdoYXMoKSBub3QgaW1wbGVtZW50ZWQnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBMb2FkcyBhIGNvbmZpZyBmaWxlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIFZhcmlvdXMgb3B0aW9uc1xuXHQgKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5maWxlIC0gVGhlIHBhdGggdG8gdGhlIGNvbmZpZyBmaWxlIHRvIGxvYWQuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5uc10gLSBBIG5hbWVzcGFjZSB0byB3cmFwIGFyb3VuZCB0aGUgbG9hZGVkIGRhdGEuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLnZhbGlkYXRlXSAtIEEgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIGRhdGEgYWdhaW5zdCBhIHNjaGVtYS5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGxvYWQob3B0cykge1xuXHRcdHRocm93IG5ldyBFcnJvcignbG9hZCgpIG5vdCBpbXBsZW1lbnRlZCcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZXBseSBtZXJnZXMgYW4gb2JqZWN0IGludG8gYSBsYXllcidzIHN0b3JlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gdmFsdWUgLSBUaGUgZGF0YSB0byBtZXJnZS5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdG1lcmdlKHZhbHVlKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdtZXJnZSgpIG5vdCBpbXBsZW1lbnRlZCcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmVzIHRoZSBkYXRhIHRvIGRpc2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBmaWxlIC0gVGhlIGZpbGVuYW1lIHRvIHNhdmUgdGhlIGRhdGEgdG8uXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzYXZlKGZpbGUpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ3NhdmUoKSBub3QgaW1wbGVtZW50ZWQnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBnaXZlbiBjb25maWcga2V5LlxuXHQgKlxuXHQgKiBAcGFyYW0ge0FycmF5LjxTdHJpbmc+fSBrZXkgLSBUaGUga2V5IHRvIHNldC5cblx0ICogQHBhcmFtIHsqfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzZXQuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzZXQoa2V5LCB2YWx1ZSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignc2V0KCkgbm90IGltcGxlbWVudGVkJyk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhIHdhdGNoIGhhbmRsZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgLSBBIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiBhIGNoYW5nZSBvY2N1cnMuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHR1bndhdGNoKGhhbmRsZXIpIHtcblx0XHQvLyBub3RoaW5nIHRvIGRvXG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXJzIGEgd2F0Y2ggaGFuZGxlci5cblx0ICpcblx0ICogQHBhcmFtIHtBcnJheS48U3RyaW5nPn0gW2ZpbHRlcl0gLSBBIHByb3BlcnR5IG5hbWUgb3IgYXJyYXkgb2YgbmVzdGVkIHByb3BlcnRpZXMgdG8gd2F0Y2guXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgLSBBIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiBhIGNoYW5nZSBvY2N1cnMuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHR3YXRjaChmaWx0ZXIsIGhhbmRsZXIpIHtcblx0XHQvLyBub3RoaW5nIHRvIGRvXG5cdH1cbn1cbiJdLCJmaWxlIjoic3RvcmUuanMifQ== | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0b3JlLmpzIl0sIm5hbWVzIjpbIlN0b3JlIiwiY29uc3RydWN0b3IiLCJvcHRzIiwibmV3IiwidGFyZ2V0IiwiVHlwZUVycm9yIiwiZGVsZXRlIiwia2V5IiwiRXJyb3IiLCJnZXQiLCJoYXMiLCJsb2FkIiwiZmlsZSIsIm1lcmdlIiwidmFsdWUiLCJzYXZlIiwic2NoZW1hIiwiX3NjaGVtYSIsIm5ld1NjaGVtYSIsIkpvaSIsImlzU2NoZW1hIiwidHlwZSIsInNldCIsInVud2F0Y2giLCJoYW5kbGVyIiwid2F0Y2giLCJmaWx0ZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFQTs7Ozs7O0FBRUE7QUFDQTtBQUNBO0FBQ2UsTUFBTUEsS0FBTixDQUFZO0FBQzFCO0FBQ0Q7QUFDQTtBQUNBOztBQUdDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7O0FBR0M7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQ0MsRUFBQUEsV0FBVyxDQUFDQyxJQUFJLEdBQUcsRUFBUixFQUFZO0FBQUEscUNBVGIsSUFTYTs7QUFDdEIsUUFBSUMsR0FBRyxDQUFDQyxNQUFKLEtBQWVKLEtBQW5CLEVBQTBCO0FBQ3pCLFlBQU0sSUFBSUssU0FBSixDQUFjLGdEQUFkLENBQU47QUFDQTs7QUFFRCxRQUFJLENBQUNILElBQUQsSUFBUyxPQUFPQSxJQUFQLEtBQWdCLFFBQTdCLEVBQXVDO0FBQ3RDLFlBQU0sSUFBSUcsU0FBSixDQUFjLHdDQUFkLENBQU47QUFDQTtBQUNEO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQ0MsRUFBQUEsTUFBTSxDQUFDQyxHQUFELEVBQU07QUFDWCxVQUFNLElBQUlDLEtBQUosQ0FBVSwwQkFBVixDQUFOO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0NDLEVBQUFBLEdBQUcsQ0FBQ0YsR0FBRCxFQUFNO0FBQ1IsVUFBTSxJQUFJQyxLQUFKLENBQVUsdUJBQVYsQ0FBTjtBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQ0UsRUFBQUEsR0FBRyxDQUFDSCxHQUFELEVBQU07QUFDUixVQUFNLElBQUlDLEtBQUosQ0FBVSx1QkFBVixDQUFOO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNDRyxFQUFBQSxJQUFJLENBQUNDLElBQUQsRUFBTztBQUNWLFVBQU0sSUFBSUosS0FBSixDQUFVLHdCQUFWLENBQU47QUFDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0NLLEVBQUFBLEtBQUssQ0FBQ0MsS0FBRCxFQUFRO0FBQ1osVUFBTSxJQUFJTixLQUFKLENBQVUseUJBQVYsQ0FBTjtBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQ08sRUFBQUEsSUFBSSxDQUFDSCxJQUFELEVBQU87QUFDVixVQUFNLElBQUlKLEtBQUosQ0FBVSx3QkFBVixDQUFOO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQyxNQUFJUSxNQUFKLEdBQWE7QUFDWixXQUFPLEtBQUtDLE9BQVo7QUFDQTs7QUFFRCxNQUFJRCxNQUFKLENBQVdFLFNBQVgsRUFBc0I7QUFDckIsUUFBSUEsU0FBUyxLQUFLLENBQUNDLGFBQUlDLFFBQUosQ0FBYUYsU0FBYixDQUFELElBQTRCQSxTQUFTLENBQUNHLElBQVYsS0FBbUIsUUFBcEQsQ0FBYixFQUE0RTtBQUMzRSxZQUFNLElBQUloQixTQUFKLENBQWMsc0NBQWQsQ0FBTjtBQUNBOztBQUNELFNBQUtZLE9BQUwsR0FBZUMsU0FBZjtBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNDSSxFQUFBQSxHQUFHLENBQUNmLEdBQUQsRUFBTU8sS0FBTixFQUFhO0FBQ2YsVUFBTSxJQUFJTixLQUFKLENBQVUsdUJBQVYsQ0FBTjtBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQ2UsRUFBQUEsT0FBTyxDQUFDQyxPQUFELEVBQVUsQ0FDaEI7QUFDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQ0MsRUFBQUEsS0FBSyxDQUFDQyxNQUFELEVBQVNGLE9BQVQsRUFBa0IsQ0FDdEI7QUFDQTs7QUExSXlCOzs7O2dCQUFOeEIsSyxlQUtELEkiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQgbm8tdW51c2VkLXZhcnM6IDAgKi9cblxuaW1wb3J0IEpvaSBmcm9tICdqb2knO1xuXG4vKipcbiAqIEEgYmFzZSBjbGFzcyBmb3IgYWxsIHN0b3JlIGltcGxlbW50YXRpb25zLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdG9yZSB7XG5cdC8qKlxuXHQgKiBUaGUgZmlsZSBleHRlbnNpb24gYXNzb2NpYXRlZCB0byB0aGlzIHR5cGUgb2Ygc3RvcmUuXG5cdCAqIEB0eXBlIHtTdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZXh0ZW5zaW9uID0gbnVsbDtcblxuXHQvKipcblx0ICogQSBKb2kgc2NoZW1hLiBUaGUgYExheWVyYCB3aWxsIHBhc3MgaW4gdGhlIHNjaGVtYSBpbnRvIHRoZSBgc2NoZW1hYCBzZXR0ZXIgZHVyaW5nXG5cdCAqIGNvbnN0cnVjdGlvbiBvciB3aGVuIHRoZSBzY2hlbWEgaXMgbG9hZGVkLlxuXHQgKiBAdHlwZSB7T2JqZWN0fVxuXHQgKi9cblx0X3NjaGVtYSA9IG51bGw7XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBzdG9yZS5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmZpbGVdIC0gVGhlIGZpbGUgYmFja2luZyB0aGlzIGxheWVyJ3Mgc3RvcmUuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcblx0XHRpZiAobmV3LnRhcmdldCA9PT0gU3RvcmUpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjcmVhdGUgaW5zdGFuY2Ugb2YgYWJzdHJhY3QgU3RvcmUgY2xhc3MnKTtcblx0XHR9XG5cblx0XHRpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBzdG9yZSBvcHRpb25zIHRvIGJlIGFuIG9iamVjdCcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBEZWxldGVzIGEgY29uZmlnIHZhbHVlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0FycmF5LjxTdHJpbmc+fSBrZXkgLSBUaGUga2V5IHRvIGRlbGV0ZS5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGRlbGV0ZShrZXkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ2RlbGV0ZSgpIG5vdCBpbXBsZW1lbnRlZCcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyBhIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIGtleS5cblx0ICpcblx0ICogQHBhcmFtIHtBcnJheS48U3RyaW5nPn0gW2tleV0gLSBUaGUga2V5IHRvIGdldC4gV2hlbiBgdW5kZWZpbmVkYCwgdGhlIGVudGlyZSBjb25maWcgaXNcblx0ICogcmV0dXJuZWQuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRnZXQoa2V5KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdnZXQoKSBub3QgaW1wbGVtZW50ZWQnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIGlmIGEga2V5IGlzIHNldC5cblx0ICpcblx0ICogQHBhcmFtIHtBcnJheS48U3RyaW5nPn0gW2tleV0gLSBUaGUga2V5IHRvIGNoZWNrLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0aGFzKGtleSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignaGFzKCkgbm90IGltcGxlbWVudGVkJyk7XG5cdH1cblxuXHQvKipcblx0ICogTG9hZHMgYSBjb25maWcgZmlsZS5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IGZpbGUgLSBUaGUgcGF0aCB0byB0aGUgY29uZmlnIGZpbGUgdG8gbG9hZC5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGxvYWQoZmlsZSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignbG9hZCgpIG5vdCBpbXBsZW1lbnRlZCcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZXBseSBtZXJnZXMgYW4gb2JqZWN0IGludG8gYSBsYXllcidzIHN0b3JlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gdmFsdWUgLSBUaGUgZGF0YSB0byBtZXJnZS5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdG1lcmdlKHZhbHVlKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdtZXJnZSgpIG5vdCBpbXBsZW1lbnRlZCcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmVzIHRoZSBkYXRhIHRvIGRpc2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBmaWxlIC0gVGhlIGZpbGVuYW1lIHRvIHNhdmUgdGhlIGRhdGEgdG8uXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzYXZlKGZpbGUpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ3NhdmUoKSBub3QgaW1wbGVtZW50ZWQnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIEpvaSBzY2hlbWEgb2JqZWN0LlxuXHQgKiBAdHlwZSB7T2JqZWN0fVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Z2V0IHNjaGVtYSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fc2NoZW1hO1xuXHR9XG5cblx0c2V0IHNjaGVtYShuZXdTY2hlbWEpIHtcblx0XHRpZiAobmV3U2NoZW1hICYmICghSm9pLmlzU2NoZW1hKG5ld1NjaGVtYSkgfHwgbmV3U2NoZW1hLnR5cGUgIT09ICdvYmplY3QnKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgc2NoZW1hIHJvb3QgdG8gYmUgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXHRcdHRoaXMuX3NjaGVtYSA9IG5ld1NjaGVtYTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBnaXZlbiBjb25maWcga2V5LlxuXHQgKlxuXHQgKiBAcGFyYW0ge0FycmF5LjxTdHJpbmc+fSBrZXkgLSBUaGUga2V5IHRvIHNldC5cblx0ICogQHBhcmFtIHsqfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzZXQuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzZXQoa2V5LCB2YWx1ZSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignc2V0KCkgbm90IGltcGxlbWVudGVkJyk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhIHdhdGNoIGhhbmRsZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgLSBBIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiBhIGNoYW5nZSBvY2N1cnMuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHR1bndhdGNoKGhhbmRsZXIpIHtcblx0XHQvLyBub3RoaW5nIHRvIGRvXG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXJzIGEgd2F0Y2ggaGFuZGxlci5cblx0ICpcblx0ICogQHBhcmFtIHtBcnJheS48U3RyaW5nPn0gW2ZpbHRlcl0gLSBBIHByb3BlcnR5IG5hbWUgb3IgYXJyYXkgb2YgbmVzdGVkIHByb3BlcnRpZXMgdG8gd2F0Y2guXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgLSBBIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiBhIGNoYW5nZSBvY2N1cnMuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHR3YXRjaChmaWx0ZXIsIGhhbmRsZXIpIHtcblx0XHQvLyBub3RoaW5nIHRvIGRvXG5cdH1cbn1cbiJdLCJmaWxlIjoic3RvcmUuanMifQ== |
@@ -41,14 +41,7 @@ "use strict"; | ||
* | ||
* @param {Object} opts - Various options | ||
* @param {String} opts.file - The path to the config file to load. | ||
* @param {String} [opts.ns] - A namespace to wrap around the loaded data. | ||
* @param {Function} [opts.validate] - A function to validate the data against a schema. | ||
* @param {String} file - The path to the config file to load. | ||
* @returns {JSONStore} | ||
* @access public | ||
*/ | ||
load({ | ||
file, | ||
ns, | ||
validate | ||
}) { | ||
load(file) { | ||
if (!_fsExtra.default.existsSync(file)) { | ||
@@ -77,12 +70,2 @@ const err = Error(`File not found: ${file}`); | ||
if (ns && !Object.prototype.hasOwnProperty.call(data, ns)) { | ||
data = { | ||
[ns]: data | ||
}; | ||
} | ||
if (typeof validate === 'function') { | ||
validate(data); | ||
} | ||
this.data = new _node.default(data); | ||
@@ -108,2 +91,2 @@ this.file = file; | ||
_defineProperty(JSStore, "extension", '.js'); | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0b3Jlcy9qcy1zdG9yZS5qcyJdLCJuYW1lcyI6WyJsb2ciLCJoaWdobGlnaHQiLCJzbm9vcGxvZ2ciLCJzdHlsZXMiLCJKU1N0b3JlIiwiSlNPTlN0b3JlIiwibG9hZCIsImZpbGUiLCJucyIsInZhbGlkYXRlIiwiZnMiLCJleGlzdHNTeW5jIiwiZXJyIiwiRXJyb3IiLCJjb2RlIiwiZGF0YSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiY3R4IiwiVHlwZUVycm9yIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiTm9kZSIsInNhdmUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRUEsTUFBTTtBQUFFQSxFQUFBQTtBQUFGLElBQVUsd0JBQVUsWUFBVixFQUF3QixVQUF4QixDQUFoQjtBQUNBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUFnQkMsbUJBQVVDLE1BQWhDO0FBRUE7Ozs7QUFHZSxNQUFNQyxPQUFOLFNBQXNCQyxrQkFBdEIsQ0FBZ0M7QUFDOUM7Ozs7O0FBTUE7Ozs7Ozs7Ozs7QUFVQUMsRUFBQUEsSUFBSSxDQUFDO0FBQUVDLElBQUFBLElBQUY7QUFBUUMsSUFBQUEsRUFBUjtBQUFZQyxJQUFBQTtBQUFaLEdBQUQsRUFBeUI7QUFDNUIsUUFBSSxDQUFDQyxpQkFBR0MsVUFBSCxDQUFjSixJQUFkLENBQUwsRUFBMEI7QUFDekIsWUFBTUssR0FBRyxHQUFHQyxLQUFLLENBQUUsbUJBQWtCTixJQUFLLEVBQXpCLENBQWpCO0FBQ0FLLE1BQUFBLEdBQUcsQ0FBQ0UsSUFBSixHQUFXLFFBQVg7QUFDQSxZQUFNRixHQUFOO0FBQ0E7O0FBRURaLElBQUFBLEdBQUcsQ0FBRSxXQUFVQyxTQUFTLENBQUNNLElBQUQsQ0FBTyxFQUE1QixDQUFIO0FBQ0EsUUFBSVEsSUFBSSxHQUFHLDBCQUFZUixJQUFaLENBQVgsQ0FSNEIsQ0FVNUI7O0FBQ0EsUUFBSVEsSUFBSSxJQUFJLE9BQU9BLElBQVAsS0FBZ0IsUUFBeEIsSUFBb0NBLElBQUksQ0FBQ0MsVUFBekMsSUFBdURELElBQUksQ0FBQ0UsT0FBaEUsRUFBeUU7QUFDeEVGLE1BQUFBLElBQUksR0FBR0EsSUFBSSxDQUFDRSxPQUFaO0FBQ0E7O0FBRUQsUUFBSSxPQUFPRixJQUFQLEtBQWdCLFVBQXBCLEVBQWdDO0FBQy9CQSxNQUFBQSxJQUFJLEdBQUdBLElBQUksQ0FBQztBQUFFRyxRQUFBQSxHQUFHLEVBQUU7QUFBUCxPQUFELENBQVg7QUFDQTs7QUFFRCxRQUFJLENBQUNILElBQUQsSUFBUyxPQUFPQSxJQUFQLEtBQWdCLFFBQTdCLEVBQXVDO0FBQ3RDLFlBQU0sSUFBSUksU0FBSixDQUFjLHNDQUFkLENBQU47QUFDQTs7QUFFRCxRQUFJWCxFQUFFLElBQUksQ0FBQ1ksTUFBTSxDQUFDQyxTQUFQLENBQWlCQyxjQUFqQixDQUFnQ0MsSUFBaEMsQ0FBcUNSLElBQXJDLEVBQTJDUCxFQUEzQyxDQUFYLEVBQTJEO0FBQzFETyxNQUFBQSxJQUFJLEdBQUc7QUFBRSxTQUFDUCxFQUFELEdBQU1PO0FBQVIsT0FBUDtBQUNBOztBQUVELFFBQUksT0FBT04sUUFBUCxLQUFvQixVQUF4QixFQUFvQztBQUNuQ0EsTUFBQUEsUUFBUSxDQUFDTSxJQUFELENBQVI7QUFDQTs7QUFFRCxTQUFLQSxJQUFMLEdBQVksSUFBSVMsYUFBSixDQUFTVCxJQUFULENBQVo7QUFDQSxTQUFLUixJQUFMLEdBQVlBLElBQVo7QUFFQSxXQUFPLElBQVA7QUFDQTtBQUVEOzs7Ozs7O0FBS0FrQixFQUFBQSxJQUFJLEdBQUc7QUFDTixVQUFNLElBQUlaLEtBQUosQ0FBVSwrQ0FBVixDQUFOO0FBQ0E7O0FBN0Q2Qzs7OztnQkFBMUJULE8sZUFLRCxLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCBpbXBvcnRGcmVzaCBmcm9tICdpbXBvcnQtZnJlc2gnO1xuaW1wb3J0IEpTT05TdG9yZSBmcm9tICcuL2pzb24tc3RvcmUnO1xuaW1wb3J0IE5vZGUgZnJvbSAnLi4vbm9kZSc7XG5pbXBvcnQgc25vb3Bsb2dnIGZyb20gJ3Nub29wbG9nZyc7XG5cbmNvbnN0IHsgbG9nIH0gPSBzbm9vcGxvZ2coJ2NvbmZpZy1raXQnKSgnanMtc3RvcmUnKTtcbmNvbnN0IHsgaGlnaGxpZ2h0IH0gPSBzbm9vcGxvZ2cuc3R5bGVzO1xuXG4vKipcbiAqIExvYWRzIGAuanNgIGNvbmZpZyBmaWxlcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlNTdG9yZSBleHRlbmRzIEpTT05TdG9yZSB7XG5cdC8qKlxuXHQgKiBUaGUgZmlsZSBleHRlbnNpb24gYXNzb2NpYXRlZCB0byB0aGlzIHR5cGUgb2Ygc3RvcmUuXG5cdCAqIEB0eXBlIHtTdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZXh0ZW5zaW9uID0gJy5qcyc7XG5cblx0LyoqXG5cdCAqIExvYWRzIGEgY29uZmlnIGZpbGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVmFyaW91cyBvcHRpb25zXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLmZpbGUgLSBUaGUgcGF0aCB0byB0aGUgY29uZmlnIGZpbGUgdG8gbG9hZC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm5zXSAtIEEgbmFtZXNwYWNlIHRvIHdyYXAgYXJvdW5kIHRoZSBsb2FkZWQgZGF0YS5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMudmFsaWRhdGVdIC0gQSBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGUgZGF0YSBhZ2FpbnN0IGEgc2NoZW1hLlxuXHQgKiBAcmV0dXJucyB7SlNPTlN0b3JlfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0bG9hZCh7IGZpbGUsIG5zLCB2YWxpZGF0ZSB9KSB7XG5cdFx0aWYgKCFmcy5leGlzdHNTeW5jKGZpbGUpKSB7XG5cdFx0XHRjb25zdCBlcnIgPSBFcnJvcihgRmlsZSBub3QgZm91bmQ6ICR7ZmlsZX1gKTtcblx0XHRcdGVyci5jb2RlID0gJ0VOT0VOVCc7XG5cdFx0XHR0aHJvdyBlcnI7XG5cdFx0fVxuXG5cdFx0bG9nKGBMb2FkaW5nICR7aGlnaGxpZ2h0KGZpbGUpfWApO1xuXHRcdGxldCBkYXRhID0gaW1wb3J0RnJlc2goZmlsZSk7XG5cblx0XHQvLyBjaGVjayBpZiB3ZSBoYXZlIGEgYmFiZWwgdHJhbnNwaWxlZCBmaWxlXG5cdFx0aWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmIGRhdGEuX19lc01vZHVsZSAmJiBkYXRhLmRlZmF1bHQpIHtcblx0XHRcdGRhdGEgPSBkYXRhLmRlZmF1bHQ7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRkYXRhID0gZGF0YSh7IGN0eDogdGhpcyB9KTtcblx0XHR9XG5cblx0XHRpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBjb25maWcgZmlsZSB0byBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cblx0XHRpZiAobnMgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBucykpIHtcblx0XHRcdGRhdGEgPSB7IFtuc106IGRhdGEgfTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHZhbGlkYXRlID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR2YWxpZGF0ZShkYXRhKTtcblx0XHR9XG5cblx0XHR0aGlzLmRhdGEgPSBuZXcgTm9kZShkYXRhKTtcblx0XHR0aGlzLmZpbGUgPSBmaWxlO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2F2ZXMgdGhlIGRhdGEgdG8gZGlzay5cblx0ICpcblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHNhdmUoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdTYXZpbmcgSmF2YVNjcmlwdCBjb25maWcgZmlsZXMgaXMgdW5zdXBwb3J0ZWQnKTtcblx0fVxufVxuIl0sImZpbGUiOiJzdG9yZXMvanMtc3RvcmUuanMifQ== | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0b3Jlcy9qcy1zdG9yZS5qcyJdLCJuYW1lcyI6WyJsb2ciLCJoaWdobGlnaHQiLCJzbm9vcGxvZ2ciLCJzdHlsZXMiLCJKU1N0b3JlIiwiSlNPTlN0b3JlIiwibG9hZCIsImZpbGUiLCJmcyIsImV4aXN0c1N5bmMiLCJlcnIiLCJFcnJvciIsImNvZGUiLCJkYXRhIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJjdHgiLCJUeXBlRXJyb3IiLCJOb2RlIiwic2F2ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFFQSxNQUFNO0FBQUVBLEVBQUFBO0FBQUYsSUFBVSx3QkFBVSxZQUFWLEVBQXdCLFVBQXhCLENBQWhCO0FBQ0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQWdCQyxtQkFBVUMsTUFBaEM7QUFFQTtBQUNBO0FBQ0E7O0FBQ2UsTUFBTUMsT0FBTixTQUFzQkMsa0JBQXRCLENBQWdDO0FBQzlDO0FBQ0Q7QUFDQTtBQUNBOztBQUdDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0NDLEVBQUFBLElBQUksQ0FBQ0MsSUFBRCxFQUFPO0FBQ1YsUUFBSSxDQUFDQyxpQkFBR0MsVUFBSCxDQUFjRixJQUFkLENBQUwsRUFBMEI7QUFDekIsWUFBTUcsR0FBRyxHQUFHQyxLQUFLLENBQUUsbUJBQWtCSixJQUFLLEVBQXpCLENBQWpCO0FBQ0FHLE1BQUFBLEdBQUcsQ0FBQ0UsSUFBSixHQUFXLFFBQVg7QUFDQSxZQUFNRixHQUFOO0FBQ0E7O0FBRURWLElBQUFBLEdBQUcsQ0FBRSxXQUFVQyxTQUFTLENBQUNNLElBQUQsQ0FBTyxFQUE1QixDQUFIO0FBQ0EsUUFBSU0sSUFBSSxHQUFHLDBCQUFZTixJQUFaLENBQVgsQ0FSVSxDQVVWOztBQUNBLFFBQUlNLElBQUksSUFBSSxPQUFPQSxJQUFQLEtBQWdCLFFBQXhCLElBQW9DQSxJQUFJLENBQUNDLFVBQXpDLElBQXVERCxJQUFJLENBQUNFLE9BQWhFLEVBQXlFO0FBQ3hFRixNQUFBQSxJQUFJLEdBQUdBLElBQUksQ0FBQ0UsT0FBWjtBQUNBOztBQUVELFFBQUksT0FBT0YsSUFBUCxLQUFnQixVQUFwQixFQUFnQztBQUMvQkEsTUFBQUEsSUFBSSxHQUFHQSxJQUFJLENBQUM7QUFBRUcsUUFBQUEsR0FBRyxFQUFFO0FBQVAsT0FBRCxDQUFYO0FBQ0E7O0FBRUQsUUFBSSxDQUFDSCxJQUFELElBQVMsT0FBT0EsSUFBUCxLQUFnQixRQUE3QixFQUF1QztBQUN0QyxZQUFNLElBQUlJLFNBQUosQ0FBYyxzQ0FBZCxDQUFOO0FBQ0E7O0FBRUQsU0FBS0osSUFBTCxHQUFZLElBQUlLLGFBQUosQ0FBU0wsSUFBVCxDQUFaO0FBQ0EsU0FBS04sSUFBTCxHQUFZQSxJQUFaO0FBRUEsV0FBTyxJQUFQO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQ1ksRUFBQUEsSUFBSSxHQUFHO0FBQ04sVUFBTSxJQUFJUixLQUFKLENBQVUsK0NBQVYsQ0FBTjtBQUNBOztBQWxENkM7Ozs7Z0JBQTFCUCxPLGVBS0QsSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgaW1wb3J0RnJlc2ggZnJvbSAnaW1wb3J0LWZyZXNoJztcbmltcG9ydCBKU09OU3RvcmUgZnJvbSAnLi9qc29uLXN0b3JlJztcbmltcG9ydCBOb2RlIGZyb20gJy4uL25vZGUnO1xuaW1wb3J0IHNub29wbG9nZyBmcm9tICdzbm9vcGxvZ2cnO1xuXG5jb25zdCB7IGxvZyB9ID0gc25vb3Bsb2dnKCdjb25maWcta2l0JykoJ2pzLXN0b3JlJyk7XG5jb25zdCB7IGhpZ2hsaWdodCB9ID0gc25vb3Bsb2dnLnN0eWxlcztcblxuLyoqXG4gKiBMb2FkcyBgLmpzYCBjb25maWcgZmlsZXMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEpTU3RvcmUgZXh0ZW5kcyBKU09OU3RvcmUge1xuXHQvKipcblx0ICogVGhlIGZpbGUgZXh0ZW5zaW9uIGFzc29jaWF0ZWQgdG8gdGhpcyB0eXBlIG9mIHN0b3JlLlxuXHQgKiBAdHlwZSB7U3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGV4dGVuc2lvbiA9ICcuanMnO1xuXG5cdC8qKlxuXHQgKiBMb2FkcyBhIGNvbmZpZyBmaWxlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZmlsZSAtIFRoZSBwYXRoIHRvIHRoZSBjb25maWcgZmlsZSB0byBsb2FkLlxuXHQgKiBAcmV0dXJucyB7SlNPTlN0b3JlfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0bG9hZChmaWxlKSB7XG5cdFx0aWYgKCFmcy5leGlzdHNTeW5jKGZpbGUpKSB7XG5cdFx0XHRjb25zdCBlcnIgPSBFcnJvcihgRmlsZSBub3QgZm91bmQ6ICR7ZmlsZX1gKTtcblx0XHRcdGVyci5jb2RlID0gJ0VOT0VOVCc7XG5cdFx0XHR0aHJvdyBlcnI7XG5cdFx0fVxuXG5cdFx0bG9nKGBMb2FkaW5nICR7aGlnaGxpZ2h0KGZpbGUpfWApO1xuXHRcdGxldCBkYXRhID0gaW1wb3J0RnJlc2goZmlsZSk7XG5cblx0XHQvLyBjaGVjayBpZiB3ZSBoYXZlIGEgYmFiZWwgdHJhbnNwaWxlZCBmaWxlXG5cdFx0aWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmIGRhdGEuX19lc01vZHVsZSAmJiBkYXRhLmRlZmF1bHQpIHtcblx0XHRcdGRhdGEgPSBkYXRhLmRlZmF1bHQ7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRkYXRhID0gZGF0YSh7IGN0eDogdGhpcyB9KTtcblx0XHR9XG5cblx0XHRpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBjb25maWcgZmlsZSB0byBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cblx0XHR0aGlzLmRhdGEgPSBuZXcgTm9kZShkYXRhKTtcblx0XHR0aGlzLmZpbGUgPSBmaWxlO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2F2ZXMgdGhlIGRhdGEgdG8gZGlzay5cblx0ICpcblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHNhdmUoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdTYXZpbmcgSmF2YVNjcmlwdCBjb25maWcgZmlsZXMgaXMgdW5zdXBwb3J0ZWQnKTtcblx0fVxufVxuIl0sImZpbGUiOiJzdG9yZXMvanMtc3RvcmUuanMifQ== |
@@ -117,3 +117,3 @@ "use strict"; | ||
if (key) { | ||
if (key === null || key === void 0 ? void 0 : key.length) { | ||
for (let i = 0, prop; data !== undefined && (prop = key[i++]); data = data[prop]) { | ||
@@ -144,3 +144,3 @@ if (typeof data !== 'object') { | ||
if (key) { | ||
if (key === null || key === void 0 ? void 0 : key.length) { | ||
for (let i = 0, prop; data !== undefined && (prop = key[i++]); data = data[prop]) { | ||
@@ -158,6 +158,3 @@ if (typeof data !== 'object') { | ||
* | ||
* @param {Object} opts - Various options | ||
* @param {String} opts.file - The path to the config file to load. | ||
* @param {String} [opts.ns] - A namespace to wrap around the loaded data. | ||
* @param {Function} [opts.validate] - A function to validate the data against a schema. | ||
* @param {String} file - The path to the config file to load. | ||
* @returns {JSONStore} | ||
@@ -168,7 +165,3 @@ * @access public | ||
load({ | ||
file, | ||
ns, | ||
validate | ||
}) { | ||
load(file) { | ||
if (!_fsExtra.default.existsSync(file)) { | ||
@@ -202,12 +195,2 @@ const err = new Error(`File not found: ${file}`); | ||
if (ns && !Object.prototype.hasOwnProperty.call(data, ns)) { | ||
data = { | ||
[ns]: data | ||
}; | ||
} | ||
if (typeof validate === 'function') { | ||
data = validate(data); | ||
} | ||
_node.default.merge(this.data, data); | ||
@@ -344,2 +327,2 @@ | ||
_defineProperty(JSONStore, "extension", '.json'); | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0b3Jlcy9qc29uLXN0b3JlLmpzIl0sIm5hbWVzIjpbImxvZyIsImhpZ2hsaWdodCIsInNub29wbG9nZyIsInN0eWxlcyIsIkpTT05TdG9yZSIsIlN0b3JlIiwiY29uc3RydWN0b3IiLCJvcHRzIiwiZGF0YSIsIlR5cGVFcnJvciIsIk5vZGUiLCJkZWxldGUiLCJrZXkiLCJzdGFjayIsImxlbiIsImxlbmd0aCIsImZvdW5kIiwicHJvcCIsImkiLCJ1bmRlZmluZWQiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJwb3AiLCJrZXlzIiwicHVzaCIsImdldCIsIkFycmF5IiwiaXNBcnJheSIsImhhcyIsImxvYWQiLCJmaWxlIiwibnMiLCJ2YWxpZGF0ZSIsImZzIiwiZXhpc3RzU3luYyIsImVyciIsIkVycm9yIiwiY29kZSIsImNvbnRlbnQiLCJyZWFkRmlsZVN5bmMiLCJlIiwibWVzc2FnZSIsIkpTT04iLCJwYXJzZSIsIm1lcmdlIiwic2F2ZSIsImV4dCIsInBhdGgiLCJleHRuYW1lIiwiZXh0ZW5zaW9uIiwidG1wRmlsZSIsIkRhdGUiLCJub3ciLCJvdXRwdXRKc29uU3luYyIsInNwYWNlcyIsIm1vdmVTeW5jIiwib3ZlcndyaXRlIiwic2V0IiwidmFsdWUiLCJwYXVzZSIsIm9iaiIsInNlZ21lbnQiLCJyZXN1bWUiLCJ0b1N0cmluZyIsImluZGVudGF0aW9uIiwic3RyaW5naWZ5IiwidW53YXRjaCIsImhhbmRsZXIiLCJ3YXRjaCIsImZpbHRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFFQSxNQUFNO0FBQUVBLEVBQUFBO0FBQUYsSUFBVSx3QkFBVSxZQUFWLEVBQXdCLFlBQXhCLENBQWhCO0FBQ0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQWdCQyxtQkFBVUMsTUFBaEM7QUFFQTs7OztBQUdlLE1BQU1DLFNBQU4sU0FBd0JDLGNBQXhCLENBQThCO0FB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QUFHLEdBQUdBLEdBQUcsQ0FBQ0MsT0FBRCxDQUFUO0FBQ0EsT0FMRCxNQUtPO0FBQ05ELFFBQUFBLEdBQUcsQ0FBQ0MsT0FBRCxDQUFILEdBQWVILEtBQWY7QUFDQTtBQUNEOztBQUVEbEQsa0JBQUtzRCxNQUFMLENBQVksS0FBS3hELElBQWpCOztBQUVBLFdBQU8sSUFBUDtBQUNBO0FBRUQ7Ozs7Ozs7OztBQU9BeUQsRUFBQUEsUUFBUSxDQUFDQyxXQUFELEVBQWM7QUFDckIsV0FBT3RCLElBQUksQ0FBQ3VCLFNBQUwsQ0FBZSxLQUFLM0QsSUFBcEIsRUFBMEIsSUFBMUIsRUFBZ0MwRCxXQUFoQyxDQUFQO0FBQ0E7QUFFRDs7Ozs7Ozs7O0FBT0FFLEVBQUFBLE9BQU8sQ0FBQ0MsT0FBRCxFQUFVO0FBQ2hCM0Qsa0JBQUswRCxPQUFMLENBQWEsS0FBSzVELElBQWxCLEVBQXdCNkQsT0FBeEI7O0FBQ0EsV0FBTyxJQUFQO0FBQ0E7QUFFRDs7Ozs7Ozs7OztBQVFBQyxFQUFBQSxLQUFLLENBQUNDLE1BQUQsRUFBU0YsT0FBVCxFQUFrQjtBQUN0QjNELGtCQUFLNEQsS0FBTCxDQUFXLEtBQUs5RCxJQUFoQixFQUFzQixDQUFBK0QsTUFBTSxTQUFOLElBQUFBLE1BQU0sV0FBTixZQUFBQSxNQUFNLENBQUV4RCxNQUFSLElBQWlCd0QsTUFBakIsR0FBMEIsSUFBaEQsRUFBc0RGLE9BQXREOztBQUNBLFdBQU8sSUFBUDtBQUNBOztBQXhRMkM7Ozs7Z0JBQXhCakUsUyxlQUtELE8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IE5vZGUgZnJvbSAnLi4vbm9kZSc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBzbm9vcGxvZ2cgZnJvbSAnc25vb3Bsb2dnJztcbmltcG9ydCBTdG9yZSBmcm9tICcuLi9zdG9yZSc7XG5cbmNvbnN0IHsgbG9nIH0gPSBzbm9vcGxvZ2coJ2NvbmZpZy1raXQnKSgnanNvbi1zdG9yZScpO1xuY29uc3QgeyBoaWdobGlnaHQgfSA9IHNub29wbG9nZy5zdHlsZXM7XG5cbi8qKlxuICogTG9hZHMgYC5qc29uYCBjb25maWcgZmlsZXMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEpTT05TdG9yZSBleHRlbmRzIFN0b3JlIHtcblx0LyoqXG5cdCAqIFRoZSBmaWxlIGV4dGVuc2lvbiBhc3NvY2lhdGVkIHRvIHRoaXMgdHlwZSBvZiBzdG9yZS5cblx0ICogQHR5cGUge1N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBleHRlbnNpb24gPSAnLmpzb24nO1xuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgc3RvcmUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy5kYXRhXSAtIEEgZGF0YSBvYmplY3QgdG8gaW5pdGlhbGl6ZSB0aGUgc3RvcmUgd2l0aC5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuXHRcdHN1cGVyKG9wdHMpO1xuXG5cdFx0Y29uc3QgZGF0YSA9IG9wdHMuZGF0YSB8fCB7fTtcblx0XHRpZiAodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBjb25maWcgZGF0YSB0byBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBUaGUgZGF0YSBpbiB0aGlzIHN0b3JlLlxuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdFx0dGhpcy5kYXRhID0gbmV3IE5vZGUoZGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBhIGNvbmZpZyB2YWx1ZS5cblx0ICpcblx0ICogQHBhcmFtIHtBcnJheS48U3RyaW5nPn0ga2V5IC0gVGhlIGtleSB0byBkZWxldGUuXG5cdCAqIEByZXR1cm5zIHtCb29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWUgd2FzIGRlbGV0ZWQuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRkZWxldGUoa2V5KSB7XG5cdFx0Y29uc3Qgc3RhY2sgPSBbXTtcblx0XHRjb25zdCBsZW4gPSBrZXkubGVuZ3RoO1xuXHRcdGxldCBmb3VuZCA9IGZhbHNlO1xuXHRcdGxldCB7IGRhdGEgfSA9IHRoaXM7XG5cdFx0bGV0IHByb3A7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgZGF0YSAhPT0gdW5kZWZpbmVkICYmIChwcm9wID0ga2V5W2ldKTsgaSsrKSB7XG5cdFx0XHRpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBwcm9wKSkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0aWYgKGkgKyAxID09PSBsZW4pIHtcblx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXHRcdFx0XHRkZWxldGUgZGF0YVtwcm9wXTtcblxuXHRcdFx0XHR3aGlsZSAoZGF0YSA9IHN0YWNrLnBvcCgpKSB7XG5cdFx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKGRhdGFba2V5Wy0taV1dKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkZWxldGUgZGF0YVtrZXlbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdGFjay5wdXNoKGRhdGEpO1xuXHRcdFx0XHRkYXRhID0gZGF0YVtwcm9wXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZm91bmQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGEgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQga2V5LlxuXHQgKlxuXHQgKiBAcGFyYW0ge0FycmF5LjxTdHJpbmc+fSBba2V5XSAtIFRoZSBrZXkgdG8gZ2V0LiBXaGVuIGB1bmRlZmluZWRgLCB0aGUgZW50aXJlIGNvbmZpZyBpc1xuXHQgKiByZXR1cm5lZC5cblx0ICogQHJldHVybnMgeyp9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRnZXQoa2V5KSB7XG5cdFx0bGV0IHsgZGF0YSB9ID0gdGhpcztcblxuXHRcdGlmIChrZXkpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwLCBwcm9wOyBkYXRhICE9PSB1bmRlZmluZWQgJiYgKHByb3AgPSBrZXlbaSsrXSk7IGRhdGEgPSBkYXRhW3Byb3BdKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoZGF0YSkgfHwgT2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyBpZiBhIGtleSBpcyBzZXQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7QXJyYXkuPFN0cmluZz59IFtrZXldIC0gVGhlIGtleSB0byBjaGVjay5cblx0ICogQHJldHVybnMge0Jvb2xlYW59XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRoYXMoa2V5KSB7XG5cdFx0bGV0IHsgZGF0YSB9ID0gdGhpcztcblxuXHRcdGlmIChrZXkpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwLCBwcm9wOyBkYXRhICE9PSB1bmRlZmluZWQgJiYgKHByb3AgPSBrZXlbaSsrXSk7IGRhdGEgPSBkYXRhW3Byb3BdKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YSAhPT0gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIExvYWRzIGEgY29uZmlnIGZpbGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVmFyaW91cyBvcHRpb25zXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLmZpbGUgLSBUaGUgcGF0aCB0byB0aGUgY29uZmlnIGZpbGUgdG8gbG9hZC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm5zXSAtIEEgbmFtZXNwYWNlIHRvIHdyYXAgYXJvdW5kIHRoZSBsb2FkZWQgZGF0YS5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMudmFsaWRhdGVdIC0gQSBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGUgZGF0YSBhZ2FpbnN0IGEgc2NoZW1hLlxuXHQgKiBAcmV0dXJucyB7SlNPTlN0b3JlfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0bG9hZCh7IGZpbGUsIG5zLCB2YWxpZGF0ZSB9KSB7XG5cdFx0aWYgKCFmcy5leGlzdHNTeW5jKGZpbGUpKSB7XG5cdFx0XHRjb25zdCBlcnIgPSBuZXcgRXJyb3IoYEZpbGUgbm90IGZvdW5kOiAke2ZpbGV9YCk7XG5cdFx0XHRlcnIuY29kZSA9ICdFTk9FTlQnO1xuXHRcdFx0dGhyb3cgZXJyO1xuXHRcdH1cblxuXHRcdGxldCBjb250ZW50O1xuXHRcdGxldCBkYXRhO1xuXG5cdFx0bG9nKGBMb2FkaW5nICR7aGlnaGxpZ2h0KGZpbGUpfWApO1xuXHRcdHRyeSB7XG5cdFx0XHRjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGUsICd1dGY4Jyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0ZS5tZXNzYWdlID0gYEZhaWxlZCB0byBsb2FkIGNvbmZpZyBmaWxlOiAke2UubWVzc2FnZX1gO1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0ZGF0YSA9IEpTT04ucGFyc2UoY29udGVudCk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0ZS5tZXNzYWdlID0gYEZhaWxlZCB0byBsb2FkIGNvbmZpZyBmaWxlOiAke2UubWVzc2FnZX1gO1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9XG5cblx0XHRpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBjb25maWcgZmlsZSB0byBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cblx0XHRpZiAobnMgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBucykpIHtcblx0XHRcdGRhdGEgPSB7IFtuc106IGRhdGEgfTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHZhbGlkYXRlID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRkYXRhID0gdmFsaWRhdGUoZGF0YSk7XG5cdFx0fVxuXG5cdFx0Tm9kZS5tZXJnZSh0aGlzLmRhdGEsIGRhdGEpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogRGVlcGx5IG1lcmdlcyBhbiBvYmplY3QgaW50byBhIGxheWVyJ3Mgc3RvcmUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgdG8gbWVyZ2UuXG5cdCAqIEByZXR1cm5zIHtKU09OU3RvcmV9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRtZXJnZShkYXRhKSB7XG5cdFx0Tm9kZS5tZXJnZSh0aGlzLmRhdGEsIGRhdGEpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmVzIHRoZSBkYXRhIHRvIGRpc2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBmaWxlIC0gVGhlIGZpbGVuYW1lIHRvIHNhdmUgdGhlIGRhdGEgdG8uXG5cdCAqIEByZXR1cm5zIHtKU09OU3RvcmV9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzYXZlKGZpbGUpIHtcblx0XHRpZiAoIWZpbGUgfHwgdHlwZW9mIGZpbGUgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBjb25maWcgZmlsZSBwYXRoIHRvIGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZXh0ID0gcGF0aC5leHRuYW1lKGZpbGUpO1xuXHRcdGlmIChleHQgIT09IEpTT05TdG9yZS5leHRlbnNpb24pIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgSlNPTiBjb25maWcgZmlsZSB0byBoYXZlIFwiJHtKU09OU3RvcmUuZXh0ZW5zaW9ufVwiIGV4dGVuc2lvbiwgZm91bmQgXCIke2V4dH1cImApO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRtcEZpbGUgPSBgJHtmaWxlfS4ke0RhdGUubm93KCl9LnRtcGA7XG5cdFx0ZnMub3V0cHV0SnNvblN5bmModG1wRmlsZSwgdGhpcy5kYXRhLCB7IHNwYWNlczogMiB9KTtcblx0XHRmcy5tb3ZlU3luYyh0bXBGaWxlLCBmaWxlLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcblx0XHRsb2coYFdyb3RlIGNvbmZpZyBmaWxlOiAke2hpZ2hsaWdodChmaWxlKX1gKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHZhbHVlIGZvciBhIGdpdmVuIGNvbmZpZyBrZXkuXG5cdCAqXG5cdCAqIEBwYXJhbSB7QXJyYXkuPFN0cmluZz59IGtleSAtIFRoZSBrZXkgdG8gc2V0LlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHNldC5cblx0ICogQHJldHVybnMge0pTT05TdG9yZX1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHNldChrZXksIHZhbHVlKSB7XG5cdFx0Tm9kZS5wYXVzZSh0aGlzLmRhdGEpO1xuXG5cdFx0bGV0IG9iaiA9IHRoaXMuZGF0YTtcblx0XHRmb3IgKGxldCBpID0gMCwgbGVuID0ga2V5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBzZWdtZW50ID0ga2V5W2ldO1xuXHRcdFx0aWYgKGkgKyAxIDwgbGVuKSB7XG5cdFx0XHRcdGlmICh0eXBlb2Ygb2JqW3NlZ21lbnRdICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG9ialtzZWdtZW50XSkpIHtcblx0XHRcdFx0XHRvYmpbc2VnbWVudF0gPSB7fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvYmogPSBvYmpbc2VnbWVudF07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvYmpbc2VnbWVudF0gPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHROb2RlLnJlc3VtZSh0aGlzLmRhdGEpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZGF0YSBhcyBhIEpTT04tZW5jb2RlZCBzdHJpbmcuXG5cdCAqXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbaW5kZW50YXRpb249Ml0gVGhlIG51bWJlciBvZiBzcGFjZXMgdG8gaW5kZW50IHRoZSBKU09OIGZvcm1hdHRlZCBvdXRwdXQuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHR0b1N0cmluZyhpbmRlbnRhdGlvbikge1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEsIG51bGwsIGluZGVudGF0aW9uKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGEgd2F0Y2ggaGFuZGxlci5cblx0ICpcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciAtIEEgY2FsbGJhY2sgdG8gZmlyZSB3aGVuIGEgY2hhbmdlIG9jY3Vycy5cblx0ICogQHJldHVybnMge0pTT05TdG9yZX1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHVud2F0Y2goaGFuZGxlcikge1xuXHRcdE5vZGUudW53YXRjaCh0aGlzLmRhdGEsIGhhbmRsZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBhIHdhdGNoIGhhbmRsZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSB7QXJyYXkuPFN0cmluZz59IFtmaWx0ZXJdIC0gQSBwcm9wZXJ0eSBuYW1lIG9yIGFycmF5IG9mIG5lc3RlZCBwcm9wZXJ0aWVzIHRvIHdhdGNoLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIC0gQSBjYWxsYmFjayB0byBmaXJlIHdoZW4gYSBjaGFuZ2Ugb2NjdXJzLlxuXHQgKiBAcmV0dXJucyB7SlNPTlN0b3JlfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0d2F0Y2goZmlsdGVyLCBoYW5kbGVyKSB7XG5cdFx0Tm9kZS53YXRjaCh0aGlzLmRhdGEsIGZpbHRlcj8ubGVuZ3RoID8gZmlsdGVyIDogbnVsbCwgaGFuZGxlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cbiJdLCJmaWxlIjoic3RvcmVzL2pzb24tc3RvcmUuanMifQ== | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0b3Jlcy9qc29uLXN0b3JlLmpzIl0sIm5hbWVzIjpbImxvZyIsImhpZ2hsaWdodCIsInNub29wbG9nZyIsInN0eWxlcyIsIkpTT05TdG9yZSIsIlN0b3JlIiwiY29uc3RydWN0b3IiLCJvcHRzIiwiZGF0YSIsIlR5cGVFcnJvciIsIk5vZGUiLCJkZWxldGUiLCJrZXkiLCJzdGFjayIsImxlbiIsImxlbmd0aCIsImZvdW5kIiwicHJvcCIsImkiLCJ1bmRlZmluZWQiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJwb3AiLCJrZXlzIiwicHVzaCIsImdldCIsIkFycmF5IiwiaXNBcnJheSIsImhhcyIsImxvYWQiLCJmaWxlIiwiZnMiLCJleGlzdHNTeW5jIiwiZXJyIiwiRXJyb3IiLCJjb2RlIiwiY29udGVudCIsInJlYWRGaWxlU3luYyIsImUiLCJtZXNzYWdlIiwiSlNPTiIsInBhcnNlIiwibWVyZ2UiLCJzYXZlIiwiZXh0IiwicGF0aCIsImV4dG5hbWUiLCJleHRlbnNpb24iLCJ0bXBGaWxlIiwiRGF0ZSIsIm5vdyIsIm91dHB1dEpzb25TeW5jIiwic3BhY2VzIiwibW92ZVN5bmMiLCJvdmVyd3JpdGUiLCJzZXQiLCJ2YWx1ZSIsInBhdXNlIiwib2JqIiwic2VnbWVudCIsInJlc3VtZSIsInRvU3RyaW5nIiwiaW5kZW50YXRpb24iLCJzdHJpbmdpZnkiLCJ1bndhdGNoIiwiaGFuZGxlciIsIndhdGNoIiwiZmlsdGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQUVBLE1BQU07QUFBRUEsRUFBQUE7QUFBRixJQUFVLHdCQUFVLFlBQVYsRUFBd0IsWUFBeEIsQ0FBaEI7QUFDQSxNQUFNO0FBQUVDLEVBQUFBO0FBQUYsSUFBZ0JDLG1CQUFVQyxNQUFoQztBQUVBO0FBQ0E7QUFDQTs7QUFDZSxNQUFNQyxTQUFOLFNBQXdCQyxjQUF4QixDQUE4QjtBQUM1QztBQUNE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QSxPQUxELE1BS087QUFDTkQsUUFBQUEsR0FBRyxDQUFDQyxPQUFELENBQUgsR0FBZUgsS0FBZjtBQUNBO0FBQ0Q7O0FBRURoRCxrQkFBS29ELE1BQUwsQ0FBWSxLQUFLdEQsSUFBakI7O0FBRUEsV0FBTyxJQUFQO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0N1RCxFQUFBQSxRQUFRLENBQUNDLFdBQUQsRUFBYztBQUNyQixXQUFPdEIsSUFBSSxDQUFDdUIsU0FBTCxDQUFlLEtBQUt6RCxJQUFwQixFQUEwQixJQUExQixFQUFnQ3dELFdBQWhDLENBQVA7QUFDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQ0UsRUFBQUEsT0FBTyxDQUFDQyxPQUFELEVBQVU7QUFDaEJ6RCxrQkFBS3dELE9BQUwsQ0FBYSxLQUFLMUQsSUFBbEIsRUFBd0IyRCxPQUF4Qjs7QUFDQSxXQUFPLElBQVA7QUFDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNDQyxFQUFBQSxLQUFLLENBQUNDLE1BQUQsRUFBU0YsT0FBVCxFQUFrQjtBQUN0QnpELGtCQUFLMEQsS0FBTCxDQUFXLEtBQUs1RCxJQUFoQixFQUFzQixDQUFBNkQsTUFBTSxTQUFOLElBQUFBLE1BQU0sV0FBTixZQUFBQSxNQUFNLENBQUV0RCxNQUFSLElBQWlCc0QsTUFBakIsR0FBMEIsSUFBaEQsRUFBc0RGLE9BQXREOztBQUNBLFdBQU8sSUFBUDtBQUNBOztBQTdQMkM7Ozs7Z0JBQXhCL0QsUyxlQUtELE8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IE5vZGUgZnJvbSAnLi4vbm9kZSc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBzbm9vcGxvZ2cgZnJvbSAnc25vb3Bsb2dnJztcbmltcG9ydCBTdG9yZSBmcm9tICcuLi9zdG9yZSc7XG5cbmNvbnN0IHsgbG9nIH0gPSBzbm9vcGxvZ2coJ2NvbmZpZy1raXQnKSgnanNvbi1zdG9yZScpO1xuY29uc3QgeyBoaWdobGlnaHQgfSA9IHNub29wbG9nZy5zdHlsZXM7XG5cbi8qKlxuICogTG9hZHMgYC5qc29uYCBjb25maWcgZmlsZXMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEpTT05TdG9yZSBleHRlbmRzIFN0b3JlIHtcblx0LyoqXG5cdCAqIFRoZSBmaWxlIGV4dGVuc2lvbiBhc3NvY2lhdGVkIHRvIHRoaXMgdHlwZSBvZiBzdG9yZS5cblx0ICogQHR5cGUge1N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBleHRlbnNpb24gPSAnLmpzb24nO1xuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgc3RvcmUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy5kYXRhXSAtIEEgZGF0YSBvYmplY3QgdG8gaW5pdGlhbGl6ZSB0aGUgc3RvcmUgd2l0aC5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuXHRcdHN1cGVyKG9wdHMpO1xuXG5cdFx0Y29uc3QgZGF0YSA9IG9wdHMuZGF0YSB8fCB7fTtcblx0XHRpZiAodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBjb25maWcgZGF0YSB0byBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBUaGUgZGF0YSBpbiB0aGlzIHN0b3JlLlxuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdFx0dGhpcy5kYXRhID0gbmV3IE5vZGUoZGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBhIGNvbmZpZyB2YWx1ZS5cblx0ICpcblx0ICogQHBhcmFtIHtBcnJheS48U3RyaW5nPn0ga2V5IC0gVGhlIGtleSB0byBkZWxldGUuXG5cdCAqIEByZXR1cm5zIHtCb29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWUgd2FzIGRlbGV0ZWQuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRkZWxldGUoa2V5KSB7XG5cdFx0Y29uc3Qgc3RhY2sgPSBbXTtcblx0XHRjb25zdCBsZW4gPSBrZXkubGVuZ3RoO1xuXHRcdGxldCBmb3VuZCA9IGZhbHNlO1xuXHRcdGxldCB7IGRhdGEgfSA9IHRoaXM7XG5cdFx0bGV0IHByb3A7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgZGF0YSAhPT0gdW5kZWZpbmVkICYmIChwcm9wID0ga2V5W2ldKTsgaSsrKSB7XG5cdFx0XHRpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBwcm9wKSkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0aWYgKGkgKyAxID09PSBsZW4pIHtcblx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXHRcdFx0XHRkZWxldGUgZGF0YVtwcm9wXTtcblxuXHRcdFx0XHR3aGlsZSAoZGF0YSA9IHN0YWNrLnBvcCgpKSB7XG5cdFx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKGRhdGFba2V5Wy0taV1dKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkZWxldGUgZGF0YVtrZXlbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdGFjay5wdXNoKGRhdGEpO1xuXHRcdFx0XHRkYXRhID0gZGF0YVtwcm9wXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZm91bmQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGEgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQga2V5LlxuXHQgKlxuXHQgKiBAcGFyYW0ge0FycmF5LjxTdHJpbmc+fSBba2V5XSAtIFRoZSBrZXkgdG8gZ2V0LiBXaGVuIGB1bmRlZmluZWRgLCB0aGUgZW50aXJlIGNvbmZpZyBpc1xuXHQgKiByZXR1cm5lZC5cblx0ICogQHJldHVybnMgeyp9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRnZXQoa2V5KSB7XG5cdFx0bGV0IHsgZGF0YSB9ID0gdGhpcztcblxuXHRcdGlmIChrZXk/Lmxlbmd0aCkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIHByb3A7IGRhdGEgIT09IHVuZGVmaW5lZCAmJiAocHJvcCA9IGtleVtpKytdKTsgZGF0YSA9IGRhdGFbcHJvcF0pIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICghZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShkYXRhKSB8fCBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIGlmIGEga2V5IGlzIHNldC5cblx0ICpcblx0ICogQHBhcmFtIHtBcnJheS48U3RyaW5nPn0gW2tleV0gLSBUaGUga2V5IHRvIGNoZWNrLlxuXHQgKiBAcmV0dXJucyB7Qm9vbGVhbn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGhhcyhrZXkpIHtcblx0XHRsZXQgeyBkYXRhIH0gPSB0aGlzO1xuXG5cdFx0aWYgKGtleT8ubGVuZ3RoKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMCwgcHJvcDsgZGF0YSAhPT0gdW5kZWZpbmVkICYmIChwcm9wID0ga2V5W2krK10pOyBkYXRhID0gZGF0YVtwcm9wXSkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGEgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBMb2FkcyBhIGNvbmZpZyBmaWxlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZmlsZSAtIFRoZSBwYXRoIHRvIHRoZSBjb25maWcgZmlsZSB0byBsb2FkLlxuXHQgKiBAcmV0dXJucyB7SlNPTlN0b3JlfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0bG9hZChmaWxlKSB7XG5cdFx0aWYgKCFmcy5leGlzdHNTeW5jKGZpbGUpKSB7XG5cdFx0XHRjb25zdCBlcnIgPSBuZXcgRXJyb3IoYEZpbGUgbm90IGZvdW5kOiAke2ZpbGV9YCk7XG5cdFx0XHRlcnIuY29kZSA9ICdFTk9FTlQnO1xuXHRcdFx0dGhyb3cgZXJyO1xuXHRcdH1cblxuXHRcdGxldCBjb250ZW50O1xuXHRcdGxldCBkYXRhO1xuXG5cdFx0bG9nKGBMb2FkaW5nICR7aGlnaGxpZ2h0KGZpbGUpfWApO1xuXHRcdHRyeSB7XG5cdFx0XHRjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGUsICd1dGY4Jyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0ZS5tZXNzYWdlID0gYEZhaWxlZCB0byBsb2FkIGNvbmZpZyBmaWxlOiAke2UubWVzc2FnZX1gO1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0ZGF0YSA9IEpTT04ucGFyc2UoY29udGVudCk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0ZS5tZXNzYWdlID0gYEZhaWxlZCB0byBsb2FkIGNvbmZpZyBmaWxlOiAke2UubWVzc2FnZX1gO1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9XG5cblx0XHRpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBjb25maWcgZmlsZSB0byBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cblx0XHROb2RlLm1lcmdlKHRoaXMuZGF0YSwgZGF0YSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWVwbHkgbWVyZ2VzIGFuIG9iamVjdCBpbnRvIGEgbGF5ZXIncyBzdG9yZS5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSB0byBtZXJnZS5cblx0ICogQHJldHVybnMge0pTT05TdG9yZX1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdG1lcmdlKGRhdGEpIHtcblx0XHROb2RlLm1lcmdlKHRoaXMuZGF0YSwgZGF0YSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2F2ZXMgdGhlIGRhdGEgdG8gZGlzay5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IGZpbGUgLSBUaGUgZmlsZW5hbWUgdG8gc2F2ZSB0aGUgZGF0YSB0by5cblx0ICogQHJldHVybnMge0pTT05TdG9yZX1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHNhdmUoZmlsZSkge1xuXHRcdGlmICghZmlsZSB8fCB0eXBlb2YgZmlsZSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGNvbmZpZyBmaWxlIHBhdGggdG8gYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cblx0XHRjb25zdCBleHQgPSBwYXRoLmV4dG5hbWUoZmlsZSk7XG5cdFx0aWYgKGV4dCAhPT0gSlNPTlN0b3JlLmV4dGVuc2lvbikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBKU09OIGNvbmZpZyBmaWxlIHRvIGhhdmUgXCIke0pTT05TdG9yZS5leHRlbnNpb259XCIgZXh0ZW5zaW9uLCBmb3VuZCBcIiR7ZXh0fVwiYCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdG1wRmlsZSA9IGAke2ZpbGV9LiR7RGF0ZS5ub3coKX0udG1wYDtcblx0XHRmcy5vdXRwdXRKc29uU3luYyh0bXBGaWxlLCB0aGlzLmRhdGEsIHsgc3BhY2VzOiAyIH0pO1xuXHRcdGZzLm1vdmVTeW5jKHRtcEZpbGUsIGZpbGUsIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xuXHRcdGxvZyhgV3JvdGUgY29uZmlnIGZpbGU6ICR7aGlnaGxpZ2h0KGZpbGUpfWApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4gY29uZmlnIGtleS5cblx0ICpcblx0ICogQHBhcmFtIHtBcnJheS48U3RyaW5nPn0ga2V5IC0gVGhlIGtleSB0byBzZXQuXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0LlxuXHQgKiBAcmV0dXJucyB7SlNPTlN0b3JlfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0c2V0KGtleSwgdmFsdWUpIHtcblx0XHROb2RlLnBhdXNlKHRoaXMuZGF0YSk7XG5cblx0XHRsZXQgb2JqID0gdGhpcy5kYXRhO1xuXHRcdGZvciAobGV0IGkgPSAwLCBsZW4gPSBrZXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGNvbnN0IHNlZ21lbnQgPSBrZXlbaV07XG5cdFx0XHRpZiAoaSArIDEgPCBsZW4pIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBvYmpbc2VnbWVudF0gIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkob2JqW3NlZ21lbnRdKSkge1xuXHRcdFx0XHRcdG9ialtzZWdtZW50XSA9IHt9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9iaiA9IG9ialtzZWdtZW50XTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9ialtzZWdtZW50XSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdE5vZGUucmVzdW1lKHRoaXMuZGF0YSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBkYXRhIGFzIGEgSlNPTi1lbmNvZGVkIHN0cmluZy5cblx0ICpcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtpbmRlbnRhdGlvbj0yXSBUaGUgbnVtYmVyIG9mIHNwYWNlcyB0byBpbmRlbnQgdGhlIEpTT04gZm9ybWF0dGVkIG91dHB1dC5cblx0ICogQHJldHVybnMge1N0cmluZ31cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHRvU3RyaW5nKGluZGVudGF0aW9uKSB7XG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSwgbnVsbCwgaW5kZW50YXRpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYSB3YXRjaCBoYW5kbGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIC0gQSBjYWxsYmFjayB0byBmaXJlIHdoZW4gYSBjaGFuZ2Ugb2NjdXJzLlxuXHQgKiBAcmV0dXJucyB7SlNPTlN0b3JlfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0dW53YXRjaChoYW5kbGVyKSB7XG5cdFx0Tm9kZS51bndhdGNoKHRoaXMuZGF0YSwgaGFuZGxlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXJzIGEgd2F0Y2ggaGFuZGxlci5cblx0ICpcblx0ICogQHBhcmFtIHtBcnJheS48U3RyaW5nPn0gW2ZpbHRlcl0gLSBBIHByb3BlcnR5IG5hbWUgb3IgYXJyYXkgb2YgbmVzdGVkIHByb3BlcnRpZXMgdG8gd2F0Y2guXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgLSBBIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiBhIGNoYW5nZSBvY2N1cnMuXG5cdCAqIEByZXR1cm5zIHtKU09OU3RvcmV9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHR3YXRjaChmaWx0ZXIsIGhhbmRsZXIpIHtcblx0XHROb2RlLndhdGNoKHRoaXMuZGF0YSwgZmlsdGVyPy5sZW5ndGggPyBmaWx0ZXIgOiBudWxsLCBoYW5kbGVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuIl0sImZpbGUiOiJzdG9yZXMvanNvbi1zdG9yZS5qcyJ9 |
@@ -13,3 +13,3 @@ "use strict"; | ||
var _joi = _interopRequireDefault(require("@hapi/joi")); | ||
var _joi = _interopRequireDefault(require("joi")); | ||
@@ -98,3 +98,3 @@ var _snooplogg = _interopRequireDefault(require("snooplogg")); | ||
defaults, | ||
env | ||
env: Object.keys(env).length ? env : null | ||
}; | ||
@@ -231,2 +231,2 @@ } | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInV0aWwuanMiXSwibmFtZXMiOlsiYXJyYXlpZnkiLCJpdCIsInJlbW92ZUZhbHNleSIsImFyciIsIlNldCIsIkFycmF5IiwiZnJvbSIsImlzQXJyYXkiLCJmaWx0ZXIiLCJ2IiwiaXNOYU4iLCJnZXRTY2hlbWFJbml0aWFsVmFsdWVzIiwic2NoZW1hIiwidHlwZSIsIkVycm9yIiwibG9nIiwiaGlnaGxpZ2h0Iiwic25vb3Bsb2dnIiwic3R5bGVzIiwiZGVmYXVsdHMiLCJlbnYiLCJ3YWxrIiwia2V5Iiwic2VnbWVudHMiLCIkX3Rlcm1zIiwia2V5cyIsImQiLCJlIiwiaXRlbSIsInB1c2giLCJwb3AiLCJPYmplY3QiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJfZmxhZ3MiLCJkZWZhdWx0Iiwiam9pbiIsIm1ldGFzIiwibWV0YSIsInByb2Nlc3MiLCJ2YWx1ZSIsInZhbGlkYXRlIiwiaGFzaFZhbHVlIiwic3RyIiwiSlNPTiIsInN0cmluZ2lmeSIsImhhc2giLCJpIiwiY2hhckNvZGVBdCIsInNwbGl0S2V5IiwiVHlwZUVycm9yIiwic3BsaXQiLCJzZWdtZW50IiwidW5pcXVlIiwicmVkdWNlIiwicHJldiIsImN1ciIsImluZGV4T2YiLCJzY2hlbWFzIiwiYWN0aW9uIiwibWVzc2FnZSIsInZhbGlkYXRlT3B0aW9ucyIsImNoZWNrUmVhZG9ubHkiLCJyZWFkb25seSIsIm9wdHMiLCJub0RlZmF1bHRzIiwic2NvcGUiLCJzaGlmdCIsInNjb3BlU2NoZW1hcyIsIkpvaSIsImF0dGVtcHQiLCJCb29sZWFuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7OztBQUVBOzs7Ozs7O0FBT08sU0FBU0EsUUFBVCxDQUFrQkMsRUFBbEIsRUFBc0JDLFlBQXRCLEVBQW9DO0FBQzFDLFFBQU1DLEdBQUcsR0FBRyxPQUFPRixFQUFQLEtBQWMsV0FBZCxHQUE0QixFQUE1QixHQUFpQ0EsRUFB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RHJELE1BQWpELENBQXdEa0UsT0FBeEQsQ0F2QmIsQ0FBRDs7QUF5QkEsU0FBTy9CLEtBQVA7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBKb2kgZnJvbSAnQGhhcGkvam9pJztcbmltcG9ydCBzbm9vcGxvZ2cgZnJvbSAnc25vb3Bsb2dnJztcblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgYSB2YWx1ZSBpcyBhbiBhcnJheS4gSWYgbm90LCBpdCB3cmFwcyB0aGUgdmFsdWUgaW4gYW4gYXJyYXkuXG4gKlxuICogQHBhcmFtIHsqfSBpdCAtIFRoZSB2YWx1ZSB0byBlbnN1cmUgaXMgYW4gYXJyYXkuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtyZW1vdmVGYWxzZXk9ZmFsc2VdIC0gV2hlbiBgdHJ1ZWAsIGZpbHRlcnMgb3V0IGFsbCBmYWxzZXkgaXRlbXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcnJheWlmeShpdCwgcmVtb3ZlRmFsc2V5KSB7XG5cdGNvbnN0IGFyciA9IHR5cGVvZiBpdCA9PT0gJ3VuZGVmaW5lZCcgPyBbXSA6IGl0IGluc3RhbmNlb2YgU2V0ID8gQXJyYXkuZnJvbShpdCkgOiBBcnJheS5pc0FycmF5KGl0KSA/IGl0IDogWyBpdCBdO1xuXHRyZXR1cm4gcmVtb3ZlRmFsc2V5ID8gYXJyLmZpbHRlcih2ID0+IHR5cGVvZiB2ICE9PSAndW5kZWZpbmVkJyAmJiB2ICE9PSBudWxsICYmIHYgIT09ICcnICYmIHYgIT09IGZhbHNlICYmICh0eXBlb2YgdiAhPT0gJ251bWJlcicgfHwgIWlzTmFOKHYpKSkgOiBhcnI7XG59XG5cbi8qKlxuICogRXhhbWluZXMgYSBzY2hlbWEgYW5kIHJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgYW5kIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hIC0gQSBKb2kgc2NoZW1hIG9yIG9iamVjdCB0byBjb21waWxlIGludG8gYSBKb2kgc2NoZW1hLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgZGVmYXVsdCBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgdmFsdWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hSW5pdGlhbFZhbHVlcyhzY2hlbWEpIHtcblx0aWYgKHNjaGVtYS50eXBlICE9PSAnb2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgc2NoZW1hIHJvb3QgdG8gYmUgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHRjb25zdCB7IGxvZyB9ID0gc25vb3Bsb2dnKCdjb25maWcta2l0OnNjaGVtYScpO1xuXHRjb25zdCB7IGhpZ2hsaWdodCB9ID0gc25vb3Bsb2dnLnN0eWxlcztcblx0Y29uc3QgZGVmYXVsdHMgPSB7fTtcblx0Y29uc3QgZW52ID0ge307XG5cdGNvbnN0IHdhbGsgPSAoc2NoZW1hLCBrZXksIGRlZmF1bHRzLCBlbnYsIHNlZ21lbnRzKSA9PiB7XG5cdFx0aWYgKHNjaGVtYS50eXBlID09PSAnb2JqZWN0JyAmJiBzY2hlbWEuJF90ZXJtcy5rZXlzKSB7XG5cdFx0XHRjb25zdCBkID0ge307XG5cdFx0XHRjb25zdCBlID0ge307XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBzY2hlbWEuJF90ZXJtcy5rZXlzKSB7XG5cdFx0XHRcdHNlZ21lbnRzLnB1c2goaXRlbS5rZXkpO1xuXHRcdFx0XHR3YWxrKGl0ZW0uc2NoZW1hLCBpdGVtLmtleSwgZCwgZSwgc2VnbWVudHMpO1xuXHRcdFx0XHRzZWdtZW50cy5wb3AoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKE9iamVjdC5rZXlzKGQpLmxlbmd0aCkge1xuXHRcdFx0XHRkZWZhdWx0c1trZXldID0gZDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKE9iamVjdC5rZXlzKGUpLmxlbmd0aCkge1xuXHRcdFx0XHRlbnZba2V5XSA9IGU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGRlZmF1bHRzW2tleV0gPT09IHVuZGVmaW5lZCAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2NoZW1hLl9mbGFncywgJ2RlZmF1bHQnKSkge1xuXHRcdFx0ZGVmYXVsdHNba2V5XSA9IHNjaGVtYS5fZmxhZ3MuZGVmYXVsdDtcblx0XHRcdGxvZyhgSW5pdGlhbGl6aW5nICR7aGlnaGxpZ2h0KHNlZ21lbnRzLmpvaW4oJy4nKSl9ID0gJHtoaWdobGlnaHQoZGVmYXVsdHNba2V5XSl9IGZyb20gZGVmYXVsdHNgKTtcblx0XHR9XG5cblx0XHRpZiAoZW52W2tleV0gPT09IHVuZGVmaW5lZCAmJiBzY2hlbWEuJF90ZXJtcy5tZXRhcykge1xuXHRcdFx0Zm9yIChjb25zdCBtZXRhIG9mIHNjaGVtYS4kX3Rlcm1zLm1ldGFzKSB7XG5cdFx0XHRcdGlmIChtZXRhLmVudiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvY2Vzcy5lbnYsIG1ldGEuZW52KSkge1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnZbbWV0YS5lbnZdO1xuXHRcdFx0XHRcdGxvZyhgSW5pdGlhbGl6aW5nICR7aGlnaGxpZ2h0KHNlZ21lbnRzLmpvaW4oJy4nKSl9ID0gJHtoaWdobGlnaHQodmFsdWUpfSBmcm9tIGVudmlyb25tZW50ICR7aGlnaGxpZ2h0KG1ldGEuZW52KX1gKTtcblx0XHRcdFx0XHRlbnZba2V5XSA9IHNjaGVtYS52YWxpZGF0ZSh2YWx1ZSkudmFsdWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0aWYgKHNjaGVtYS4kX3Rlcm1zLmtleXMpIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2Ygc2NoZW1hLiRfdGVybXMua2V5cykge1xuXHRcdFx0d2FsayhpdGVtLnNjaGVtYSwgaXRlbS5rZXksIGRlZmF1bHRzLCBlbnYsIFsgaXRlbS5rZXkgXSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgZGVmYXVsdHMsIGVudiB9O1xufVxuXG4vKipcbiAqIEhhc2hlcyBhIHZhbHVlIHF1aWNrIGFuZCBkaXJ0eS5cbiAqXG4gKiBAcGFyYW0geyp9IGl0IC0gQSB2YWx1ZSB0byBoYXNoLlxuICogQHJldHVybnMge051bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hWYWx1ZShpdCkge1xuXHRjb25zdCBzdHIgPSBKU09OLnN0cmluZ2lmeShpdCkgfHwgJyc7XG5cdGxldCBoYXNoID0gNTM4MTtcblx0bGV0IGkgPSBzdHIubGVuZ3RoO1xuXHR3aGlsZSAoaSkge1xuXHRcdGhhc2ggPSBoYXNoICogMzMgXiBzdHIuY2hhckNvZGVBdCgtLWkpO1xuXHR9XG5cdHJldHVybiBoYXNoID4+PiAwO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhbmQgc3BsaXRzIGEga2V5IGludG8gYW4gYXJyYXkuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXk8U3RyaW5nPn0ga2V5IC0gVGhlIGtleSB0byBzcGxpdC4gSWYgdGhlIGtleSBpcyBhbiBhcnJheSwgdGhlbiBpdCBpcyBzaW1wbHlcbiAqIGNoZWNrIGZvciB2YWxpZGl0eS5cbiAqIEByZXR1cm5zIHtBcnJheTxTdHJpbmc+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRLZXkoa2V5KSB7XG5cdGlmIChrZXkgIT09IHVuZGVmaW5lZCAmJiBrZXkgIT09IG51bGwgJiYgdHlwZW9mIGtleSAhPT0gJ3N0cmluZycgJiYgIUFycmF5LmlzQXJyYXkoa2V5KSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGtleSB0byBiZSBhIHN0cmluZycpO1xuXHR9XG5cblx0Y29uc3Qgc2VnbWVudHMgPSBrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwgPyBbXSA6IEFycmF5LmlzQXJyYXkoa2V5KSA/IGtleSA6IGtleS5zcGxpdCgnLicpO1xuXHRmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygc2VnbWVudHMpIHtcblx0XHRpZiAoIXNlZ21lbnQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBrZXkgJHtrZXl9YCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBzZWdtZW50cztcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGR1cGxpY2F0ZXMgZnJvbSBhbiBhcnJheSBhbmQgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnIgLSBUaGUgYXJyYXkgdG8gcmVtb3ZlIGR1cGxpY2F0ZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmlxdWUoYXJyID0gW10pIHtcblx0aWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcblx0XHRhcnIgPSBbIGFyciBdO1xuXHR9XG5cblx0cmV0dXJuIGFyci5yZWR1Y2UoKHByZXYsIGN1cikgPT4ge1xuXHRcdGlmICh0eXBlb2YgY3VyICE9PSAndW5kZWZpbmVkJyAmJiBjdXIgIT09IG51bGwpIHtcblx0XHRcdGlmIChwcmV2LmluZGV4T2YoY3VyKSA9PT0gLTEpIHtcblx0XHRcdFx0cHJldi5wdXNoKGN1cik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBwcmV2O1xuXHR9LCBbXSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSB2YWx1ZSBiZWluZyBjaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVmFyaW91cyBvcHRpb25zLlxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmFjdGlvbl0gLSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRyaWdnZXJpbmcgdGhlIHZhbGlkYXRpb24uXG4gKiBAcGFyYW0ge0FycmF5LjxTdHJpbmc+fSBbb3B0cy5rZXldIC0gVGhlIGNvbmZpZyBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMubWVzc2FnZV0gLSBBIGN1c3RvbSBlcnJvciBtZXNzYWdlIHRvIHVzZSBpZiB2YWxpZGF0aW9uIGZhaWxzLlxuICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gb3B0cy5zY2hlbWFzIC0gQW4gYXJyYXkgb2YgSm9pIHNjaGVtYXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHMudmFsaWRhdGVPcHRpb25zXSAtIFZhcmlvdXMgb3B0aW9ucyB0byBwYXNzIGludG8gSm9pJ3Mgc2NoZW1hIHZhbGlkYXRpb24uXG4gKiBAcGFyYW0geyp9IFtvcHRzLnZhbHVlXSAtIFRoZSBuZXcgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gVGhlIG9yaWdpbmFsIHZhbHVlIHJlZmVyZW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlKHsgc2NoZW1hcywga2V5ID0gW10sIHZhbHVlLCBhY3Rpb24gPSAnY2hhbmdlJywgbWVzc2FnZSwgdmFsaWRhdGVPcHRpb25zIH0pIHtcblx0Y29uc3QgY2hlY2tSZWFkb25seSA9IHNjaGVtYSA9PiB7XG5cdFx0aWYgKHNjaGVtYS4kX3Rlcm1zLm1ldGFzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG1ldGEgb2Ygc2NoZW1hLiRfdGVybXMubWV0YXMpIHtcblx0XHRcdFx0aWYgKG1ldGEucmVhZG9ubHkpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYE5vdCBhbGxvd2VkIHRvICR7YWN0aW9ufSByZWFkLW9ubHkgcHJvcGVydHlgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvLyBmb3JjZSBubyBkZWZhdWx0cyBzbyB0aGF0IEpvaSBkb2Vzbid0IHBvcHVsYXRlIHRoZSBgdmFsdWVgIHdpdGggZGVmYXVsdHNcblx0Y29uc3Qgb3B0cyA9IHZhbGlkYXRlT3B0aW9ucyB8fCB7fTtcblx0b3B0cy5ub0RlZmF1bHRzID0gdHJ1ZTtcblxuXHQoZnVuY3Rpb24gd2FsayhrZXksIHNjaGVtYXMpIHtcblx0XHRjb25zdCBzY29wZSA9IGtleS5zaGlmdCgpO1xuXHRcdGNvbnN0IHNjb3BlU2NoZW1hcyA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuXHRcdFx0aWYgKGFjdGlvbiAhPT0gJ2xvYWQnKSB7XG5cdFx0XHRcdGNoZWNrUmVhZG9ubHkoc2NoZW1hKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFzY29wZSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHZhbHVlID0gSm9pLmF0dGVtcHQodmFsdWUsIHNjaGVtYSwgYCR7bWVzc2FnZSB8fCBgRmFpbGVkIHRvICR7YWN0aW9ufSBjb25maWcgdmFsdWVgfTpgLCBvcHRzKTtcblx0XHRcdH0gZWxzZSBpZiAoc2NvcGUgJiYgc2NoZW1hLnR5cGUgPT09ICdvYmplY3QnICYmIHNjaGVtYS4kX3Rlcm1zLmtleXMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIHNjaGVtYS4kX3Rlcm1zLmtleXMpIHtcblx0XHRcdFx0XHRpZiAoaXRlbS5rZXkgPT09IHNjb3BlKSB7XG5cdFx0XHRcdFx0XHRzY29wZVNjaGVtYXMucHVzaChpdGVtLnNjaGVtYSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHNjb3BlU2NoZW1hcy5sZW5ndGgpIHtcblx0XHRcdHdhbGsoa2V5LCBzY29wZVNjaGVtYXMpO1xuXHRcdH1cblx0fShbIC4uLmtleSBdLCAoQXJyYXkuaXNBcnJheShzY2hlbWFzKSA/IHNjaGVtYXMgOiBbIHNjaGVtYXMgXSkuZmlsdGVyKEJvb2xlYW4pKSk7XG5cblx0cmV0dXJuIHZhbHVlO1xufVxuIl0sImZpbGUiOiJ1dGlsLmpzIn0= | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInV0aWwuanMiXSwibmFtZXMiOlsiYXJyYXlpZnkiLCJpdCIsInJlbW92ZUZhbHNleSIsImFyciIsIlNldCIsIkFycmF5IiwiZnJvbSIsImlzQXJyYXkiLCJmaWx0ZXIiLCJ2IiwiaXNOYU4iLCJnZXRTY2hlbWFJbml0aWFsVmFsdWVzIiwic2NoZW1hIiwidHlwZSIsIkVycm9yIiwibG9nIiwiaGlnaGxpZ2h0Iiwic25vb3Bsb2dnIiwic3R5bGVzIiwiZGVmYXVsdHMiLCJlbnYiLCJ3YWxrIiwia2V5Iiwic2VnbWVudHMiLCIkX3Rlcm1zIiwia2V5cyIsImQiLCJlIiwiaXRlbSIsInB1c2giLCJwb3AiLCJPYmplY3QiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJfZmxhZ3MiLCJkZWZhdWx0Iiwiam9pbiIsIm1ldGFzIiwibWV0YSIsInByb2Nlc3MiLCJ2YWx1ZSIsInZhbGlkYXRlIiwiaGFzaFZhbHVlIiwic3RyIiwiSlNPTiIsInN0cmluZ2lmeSIsImhhc2giLCJpIiwiY2hhckNvZGVBdCIsInNwbGl0S2V5IiwiVHlwZUVycm9yIiwic3BsaXQiLCJzZWdtZW50IiwidW5pcXVlIiwicmVkdWNlIiwicHJldiIsImN1ciIsImluZGV4T2YiLCJzY2hlbWFzIiwiYWN0aW9uIiwibWVzc2FnZSIsInZhbGlkYXRlT3B0aW9ucyIsImNoZWNrUmVhZG9ubHkiLCJyZWFkb25seSIsIm9wdHMiLCJub0RlZmF1bHRzIiwic2NvcGUiLCJzaGlmdCIsInNjb3BlU2NoZW1hcyIsIkpvaSIsImF0dGVtcHQiLCJCb29sZWFuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0EsUUFBVCxDQUFrQkMsRUFBbEIsRUFBc0JDLFlBQXRCLEVBQW9DO0FBQzFDLFFBQU1DLEdBQUcsR0FBRyxPQUFPRixFQUFQLEtBQWMsV0FBZCxHQUE0QixFQUE1QixHQUFpQ0EsRUFBRSxZQUFZRyxHQUFkLEdBQW9CQyxLQUFLLENBQUNDLElBQU4sQ0FBV0wsRUFBWCxDQUFwQixHQUFxQ0ksS0FBSyxDQUFDRSxPQUFOLENBQWNOLEVBQWQsSUFBb0JBLEVBQXBCLEdBQXlCLENBQUVBLEVBQUYsQ0FBM0c7QUFDQSxTQUFPQyxZQUFZLEdBQUdDLEdBQUcsQ0FBQ0ssTUFBSixDQUFXQyxDQUFDLElBQUksT0FBT0EsQ0FBUCxLQUFhLFdBQWIsSUFBNEJBLENBQUMsS0FBSyxJQUFsQyxJQUEwQ0EsQ0FBQyxLQUFLLEVBQWhELElBQXNEQSxDQUFDLEtBQUssS0FBNUQsS0FBc0UsT0FBT0EsQ0FBUCxLQUFhLFFBQWIsSUFBeUIsQ0FBQ0MsS0FBSyxDQUFDRCxDQUFELENBQXJHLENBQWhCLENBQUgsR0FBZ0lOLEdBQW5KO0FBQ0E7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNRLHNCQUFULENBQWdDQyxNQUFoQyxFQUF3QztBQUM5QyxNQUFJQSxNQUFNLENBQUNDLElBQVAsS0FBZ0IsUUFBcEIsRUFBOEI7QUFDN0IsVUFBTSxJQUFJQyxLQUFKLENBQVUsc0NBQVYsQ0FBTjtBQUNBOztBQUVELFFBQU07QUFBRUMsSUFBQUE7QUFBRixNQUFVLHdCQUFVLG1CQUFWLENBQWhCO0FBQ0EsUUFBTTtBQUFFQyxJQUFBQTtBQUFGLE1BQWdCQyxtQkFBVUMsTUFBaEM7QUFDQSxRQUFNQyxRQUFRLEdBQUcsRUFBakI7QUFDQSxRQUFNQyxHQUFHLEdBQUcsRUFBWjs7QUFDQSxRQUFNQyxJQUFJLEdBQUcsQ0FBQ1QsTUFBRCxFQUFTVSxHQUFULEVBQWNILFFBQWQsRUFBd0JDLEdBQXhCLEVBQTZCRyxRQUE3QixLQUEwQztBQUN0RCxRQUFJWCxNQUFNLENBQUNDLElBQVAsS0FBZ0IsUUFBaEIsSUFBNEJELE1BQU0sQ0FBQ1ksT0FBUCxDQUFlQyxJQUEvQyxFQUFxRDtBQUNwRCxZQUFNQyxDQUFDLEdBQUcsRUFBVjtBQUNBLFlBQU1DLENBQUMsR0FBRyxFQUFWOztBQUVBLFdBQUssTUFBTUMsSUFBWCxJQUFtQmhCLE1BQU0sQ0FBQ1ksT0FBUCxDQUFlQyxJQUFsQyxFQUF3QztBQUN2Q0YsUUFBQUEsUUFBUSxDQUFDTSxJQUFULENBQWNELElBQUksQ0FBQ04sR0FBbkI7QUFDQUQsUUFBQUEsSUFBSSxDQUFDTyxJQUFJLENBQUNoQixNQUFOLEVBQWNnQixJQUFJLENBQUNOLEdBQW5CLEVBQXdCSSxDQUF4QixFQUEyQkMsQ0FBM0IsRUFBOEJKLFFBQTlCLENBQUo7QUFDQUEsUUFBQUEsUUFBUSxDQUFDTyxHQUFUO0FBQ0E7O0FBRUQsVUFBSUMsTUFBTSxDQUFDTixJQUFQLENBQVlDLENBQVosRUFBZU0sTUFBbkIsRUFBMkI7QUFDMUJiLFFBQUFBLFFBQVEsQ0FBQ0csR0FBRCxDQUFSLEdBQWdCSSxDQUFoQjtBQUNBOztBQUVELFVBQUlLLE1BQU0sQ0FBQ04sSUFBUCxDQUFZRSxDQUFaLEVBQWVLLE1BQW5CLEVBQTJCO0FBQzFCWixRQUFBQSxHQUFHLENBQUNFLEdBQUQsQ0FBSCxHQUFXSyxDQUFYO0FBQ0E7QUFDRDs7QUFFRCxRQUFJUixRQUFRLENBQUNHLEdBQUQsQ0FBUixLQUFrQlcsU0FBbEIsSUFBK0JGLE1BQU0sQ0FBQ0csU0FBUCxDQUFpQkMsY0FBakIsQ0FBZ0NDLElBQWhDLENBQXFDeEIsTUFBTSxDQUFDeUIsTUFBNUMsRUFBb0QsU0FBcEQsQ0FBbkMsRUFBbUc7QUFDbEdsQixNQUFBQSxRQUFRLENBQUNHLEdBQUQsQ0FBUixHQUFnQlYsTUFBTSxDQUFDeUIsTUFBUCxDQUFjQyxPQUE5QjtBQUNBdkIsTUFBQUEsR0FBRyxDQUFFLGdCQUFlQyxTQUFTLENBQUNPLFFBQVEsQ0FBQ2dCLElBQVQsQ0FBYyxHQUFkLENBQUQsQ0FBcUIsTUFBS3ZCLFNBQVMsQ0FBQ0csUUFBUSxDQUFDRyxHQUFELENBQVQsQ0FBZ0IsZ0JBQTdFLENBQUg7QUFDQTs7QUFFRCxRQUFJRixHQUFHLENBQUNFLEdBQUQsQ0FBSCxLQUFhVyxTQUFiLElBQTBCckIsTUFBTSxDQUFDWSxPQUFQLENBQWVnQixLQUE3QyxFQUFvRDtBQUNuRCxXQUFLLE1BQU1DLElBQVgsSUFBbUI3QixNQUFNLENBQUNZLE9BQVAsQ0FBZWdCLEtBQWxDLEVBQXlDO0FBQ3hDLFlBQUlDLElBQUksQ0FBQ3JCLEdBQUwsSUFBWVcsTUFBTSxDQUFDRyxTQUFQLENBQWlCQyxjQUFqQixDQUFnQ0MsSUFBaEMsQ0FBcUNNLE9BQU8sQ0FBQ3RCLEdBQTdDLEVBQWtEcUIsSUFBSSxDQUFDckIsR0FBdkQsQ0FBaEIsRUFBNkU7QUFDNUUsZ0JBQU11QixLQUFLLEdBQUdELE9BQU8sQ0FBQ3RCLEdBQVIsQ0FBWXFCLElBQUksQ0FBQ3JCLEdBQWpCLENBQWQ7QUFDQUwsVUFBQUEsR0FBRyxDQUFFLGdCQUFlQyxTQUFTLENBQUNPLFFBQVEsQ0FBQ2dCLElBQVQsQ0FBYyxHQUFkLENBQUQsQ0FBcUIsTUFBS3ZCLFNBQVMsQ0FBQzJCLEtBQUQsQ0FBUSxxQkFBb0IzQixTQUFTLENBQUN5QixJQUFJLENBQUNyQixHQUFOLENBQVcsRUFBN0csQ0FBSDtBQUNBQSxVQUFBQSxHQUFHLENBQUNFLEdBQUQsQ0FBSCxHQUFXVixNQUFNLENBQUNnQyxRQUFQLENBQWdCRCxLQUFoQixFQUF1QkEsS0FBbEM7QUFDQTtBQUNBO0FBQ0Q7QUFDRDtBQUNELEdBbkNEOztBQXFDQSxNQUFJL0IsTUFBTSxDQUFDWSxPQUFQLENBQWVDLElBQW5CLEVBQXlCO0FBQ3hCLFNBQUssTUFBTUcsSUFBWCxJQUFtQmhCLE1BQU0sQ0FBQ1ksT0FBUCxDQUFlQyxJQUFsQyxFQUF3QztBQUN2Q0osTUFBQUEsSUFBSSxDQUFDTyxJQUFJLENBQUNoQixNQUFOLEVBQWNnQixJQUFJLENBQUNOLEdBQW5CLEVBQXdCSCxRQUF4QixFQUFrQ0MsR0FBbEMsRUFBdUMsQ0FBRVEsSUFBSSxDQUFDTixHQUFQLENBQXZDLENBQUo7QUFDQTtBQUNEOztBQUVELFNBQU87QUFBRUgsSUFBQUEsUUFBRjtBQUFZQyxJQUFBQSxHQUFHLEVBQUVXLE1BQU0sQ0FBQ04sSUFBUCxDQUFZTCxHQUFaLEVBQWlCWSxNQUFqQixHQUEwQlosR0FBMUIsR0FBZ0M7QUFBakQsR0FBUDtBQUNBO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTeUIsU0FBVCxDQUFtQjVDLEVBQW5CLEVBQXVCO0FBQzdCLFFBQU02QyxHQUFHLEdBQUdDLElBQUksQ0FBQ0MsU0FBTCxDQUFlL0MsRUFBZixLQUFzQixFQUFsQztBQUNBLE1BQUlnRCxJQUFJLEdBQUcsSUFBWDtBQUNBLE1BQUlDLENBQUMsR0FBR0osR0FBRyxDQUFDZCxNQUFaOztBQUNBLFNBQU9rQixDQUFQLEVBQVU7QUFDVEQsSUFBQUEsSUFBSSxHQUFHQSxJQUFJLEdBQUcsRUFBUCxHQUFZSCxHQUFHLENBQUNLLFVBQUosQ0FBZSxFQUFFRCxDQUFqQixDQUFuQjtBQUNBOztBQUNELFNBQU9ELElBQUksS0FBSyxDQUFoQjtBQUNBO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNHLFFBQVQsQ0FBa0I5QixHQUFsQixFQUF1QjtBQUM3QixNQUFJQSxHQUFHLEtBQUtXLFNBQVIsSUFBcUJYLEdBQUcsS0FBSyxJQUE3QixJQUFxQyxPQUFPQSxHQUFQLEtBQWUsUUFBcEQsSUFBZ0UsQ0FBQ2pCLEtBQUssQ0FBQ0UsT0FBTixDQUFjZSxHQUFkLENBQXJFLEVBQXlGO0FBQ3hGLFVBQU0sSUFBSStCLFNBQUosQ0FBYyw2QkFBZCxDQUFOO0FBQ0E7O0FBRUQsUUFBTTlCLFFBQVEsR0FBR0QsR0FBRyxLQUFLVyxTQUFSLElBQXFCWCxHQUFHLEtBQUssSUFBN0IsR0FBb0MsRUFBcEMsR0FBeUNqQixLQUFLLENBQUNFLE9BQU4sQ0FBY2UsR0FBZCxJQUFxQkEsR0FBckIsR0FBMkJBLEdBQUcsQ0FBQ2dDLEtBQUosQ0FBVSxHQUFWLENBQXJGOztBQUNBLE9BQUssTUFBTUMsT0FBWCxJQUFzQmhDLFFBQXRCLEVBQWdDO0FBQy9CLFFBQUksQ0FBQ2dDLE9BQUwsRUFBYztBQUNiLFlBQU0sSUFBSXpDLEtBQUosQ0FBVyxlQUFjUSxHQUFJLEVBQTdCLENBQU47QUFDQTtBQUNEOztBQUNELFNBQU9DLFFBQVA7QUFDQTtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU2lDLE1BQVQsQ0FBZ0JyRCxHQUFHLEdBQUcsRUFBdEIsRUFBMEI7QUFDaEMsTUFBSSxDQUFDRSxLQUFLLENBQUNFLE9BQU4sQ0FBY0osR0FBZCxDQUFMLEVBQXlCO0FBQ3hCQSxJQUFBQSxHQUFHLEdBQUcsQ0FBRUEsR0FBRixDQUFOO0FBQ0E7O0FBRUQsU0FBT0EsR0FBRyxDQUFDc0QsTUFBSixDQUFXLENBQUNDLElBQUQsRUFBT0MsR0FBUCxLQUFlO0FBQ2hDLFFBQUksT0FBT0EsR0FBUCxLQUFlLFdBQWYsSUFBOEJBLEdBQUcsS0FBSyxJQUExQyxFQUFnRDtBQUMvQyxVQUFJRCxJQUFJLENBQUNFLE9BQUwsQ0FBYUQsR0FBYixNQUFzQixDQUFDLENBQTNCLEVBQThCO0FBQzdCRCxRQUFBQSxJQUFJLENBQUM3QixJQUFMLENBQVU4QixHQUFWO0FBQ0E7QUFDRDs7QUFDRCxXQUFPRCxJQUFQO0FBQ0EsR0FQTSxFQU9KLEVBUEksQ0FBUDtBQVFBO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTZCxRQUFULENBQWtCO0FBQUVpQixFQUFBQSxPQUFGO0FBQVd2QyxFQUFBQSxHQUFHLEdBQUcsRUFBakI7QUFBcUJxQixFQUFBQSxLQUFyQjtBQUE0Qm1CLEVBQUFBLE1BQU0sR0FBRyxRQUFyQztBQUErQ0MsRUFBQUEsT0FBL0M7QUFBd0RDLEVBQUFBO0FBQXhELENBQWxCLEVBQTZGO0FBQ25HLFFBQU1DLGFBQWEsR0FBR3JELE1BQU0sSUFBSTtBQUMvQixRQUFJQSxNQUFNLENBQUNZLE9BQVAsQ0FBZWdCLEtBQW5CLEVBQTBCO0FBQ3pCLFdBQUssTUFBTUMsSUFBWCxJQUFtQjdCLE1BQU0sQ0FBQ1ksT0FBUCxDQUFlZ0IsS0FBbEMsRUFBeUM7QUFDeEMsWUFBSUMsSUFBSSxDQUFDeUIsUUFBVCxFQUFtQjtBQUNsQixnQkFBTSxJQUFJcEQsS0FBSixDQUFXLGtCQUFpQmdELE1BQU8scUJBQW5DLENBQU47QUFDQTtBQUNEO0FBQ0Q7QUFDRCxHQVJELENBRG1HLENBV25HOzs7QUFDQSxRQUFNSyxJQUFJLEdBQUdILGVBQWUsSUFBSSxFQUFoQztBQUNBRyxFQUFBQSxJQUFJLENBQUNDLFVBQUwsR0FBa0IsSUFBbEI7O0FBRUMsWUFBUy9DLElBQVQsQ0FBY0MsR0FBZCxFQUFtQnVDLE9BQW5CLEVBQTRCO0FBQzVCLFVBQU1RLEtBQUssR0FBRy9DLEdBQUcsQ0FBQ2dELEtBQUosRUFBZDtBQUNBLFVBQU1DLFlBQVksR0FBRyxFQUFyQjs7QUFFQSxTQUFLLE1BQU0zRCxNQUFYLElBQXFCaUQsT0FBckIsRUFBOEI7QUFDN0IsVUFBSUMsTUFBTSxLQUFLLE1BQWYsRUFBdUI7QUFDdEJHLFFBQUFBLGFBQWEsQ0FBQ3JELE1BQUQsQ0FBYjtBQUNBOztBQUVELFVBQUksQ0FBQ3lELEtBQUQsSUFBVTFCLEtBQUssS0FBS1YsU0FBeEIsRUFBbUM7QUFDbENVLFFBQUFBLEtBQUssR0FBRzZCLGFBQUlDLE9BQUosQ0FBWTlCLEtBQVosRUFBbUIvQixNQUFuQixFQUE0QixHQUFFbUQsT0FBTyxJQUFLLGFBQVlELE1BQU8sZUFBZSxHQUE1RSxFQUFnRkssSUFBaEYsQ0FBUjtBQUNBLE9BRkQsTUFFTyxJQUFJRSxLQUFLLElBQUl6RCxNQUFNLENBQUNDLElBQVAsS0FBZ0IsUUFBekIsSUFBcUNELE1BQU0sQ0FBQ1ksT0FBUCxDQUFlQyxJQUF4RCxFQUE4RDtBQUNwRSxhQUFLLE1BQU1HLElBQVgsSUFBbUJoQixNQUFNLENBQUNZLE9BQVAsQ0FBZUMsSUFBbEMsRUFBd0M7QUFDdkMsY0FBSUcsSUFBSSxDQUFDTixHQUFMLEtBQWErQyxLQUFqQixFQUF3QjtBQUN2QkUsWUFBQUEsWUFBWSxDQUFDMUMsSUFBYixDQUFrQkQsSUFBSSxDQUFDaEIsTUFBdkI7QUFDQTtBQUNEO0FBQ0Q7QUFDRDs7QUFFRCxRQUFJMkQsWUFBWSxDQUFDdkMsTUFBakIsRUFBeUI7QUFDeEJYLE1BQUFBLElBQUksQ0FBQ0MsR0FBRCxFQUFNaUQsWUFBTixDQUFKO0FBQ0E7QUFDRCxHQXZCQSxFQXVCQyxDQUFFLEdBQUdqRCxHQUFMLENBdkJELEVBdUJhLENBQUNqQixLQUFLLENBQUNFLE9BQU4sQ0FBY3NELE9BQWQsSUFBeUJBLE9BQXpCLEdBQW1DLENBQUVBLE9BQUYsQ0FBcEMsRUFBaURyRCxNQUFqRCxDQUF3RGtFLE9BQXhELENBdkJiLENBQUQ7O0FBeUJBLFNBQU8vQixLQUFQO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSm9pIGZyb20gJ2pvaSc7XG5pbXBvcnQgc25vb3Bsb2dnIGZyb20gJ3Nub29wbG9nZyc7XG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IGEgdmFsdWUgaXMgYW4gYXJyYXkuIElmIG5vdCwgaXQgd3JhcHMgdGhlIHZhbHVlIGluIGFuIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7Kn0gaXQgLSBUaGUgdmFsdWUgdG8gZW5zdXJlIGlzIGFuIGFycmF5LlxuICogQHBhcmFtIHtCb29sZWFufSBbcmVtb3ZlRmFsc2V5PWZhbHNlXSAtIFdoZW4gYHRydWVgLCBmaWx0ZXJzIG91dCBhbGwgZmFsc2V5IGl0ZW1zLlxuICogQHJldHVybnMge0FycmF5fVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlpZnkoaXQsIHJlbW92ZUZhbHNleSkge1xuXHRjb25zdCBhcnIgPSB0eXBlb2YgaXQgPT09ICd1bmRlZmluZWQnID8gW10gOiBpdCBpbnN0YW5jZW9mIFNldCA/IEFycmF5LmZyb20oaXQpIDogQXJyYXkuaXNBcnJheShpdCkgPyBpdCA6IFsgaXQgXTtcblx0cmV0dXJuIHJlbW92ZUZhbHNleSA/IGFyci5maWx0ZXIodiA9PiB0eXBlb2YgdiAhPT0gJ3VuZGVmaW5lZCcgJiYgdiAhPT0gbnVsbCAmJiB2ICE9PSAnJyAmJiB2ICE9PSBmYWxzZSAmJiAodHlwZW9mIHYgIT09ICdudW1iZXInIHx8ICFpc05hTih2KSkpIDogYXJyO1xufVxuXG4vKipcbiAqIEV4YW1pbmVzIGEgc2NoZW1hIGFuZCByZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBkZWZhdWx0IGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZSB2YWx1ZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYSAtIEEgSm9pIHNjaGVtYSBvciBvYmplY3QgdG8gY29tcGlsZSBpbnRvIGEgSm9pIHNjaGVtYS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGRlZmF1bHQgYW5kIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNjaGVtYUluaXRpYWxWYWx1ZXMoc2NoZW1hKSB7XG5cdGlmIChzY2hlbWEudHlwZSAhPT0gJ29iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHNjaGVtYSByb290IHRvIGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cblx0Y29uc3QgeyBsb2cgfSA9IHNub29wbG9nZygnY29uZmlnLWtpdDpzY2hlbWEnKTtcblx0Y29uc3QgeyBoaWdobGlnaHQgfSA9IHNub29wbG9nZy5zdHlsZXM7XG5cdGNvbnN0IGRlZmF1bHRzID0ge307XG5cdGNvbnN0IGVudiA9IHt9O1xuXHRjb25zdCB3YWxrID0gKHNjaGVtYSwga2V5LCBkZWZhdWx0cywgZW52LCBzZWdtZW50cykgPT4ge1xuXHRcdGlmIChzY2hlbWEudHlwZSA9PT0gJ29iamVjdCcgJiYgc2NoZW1hLiRfdGVybXMua2V5cykge1xuXHRcdFx0Y29uc3QgZCA9IHt9O1xuXHRcdFx0Y29uc3QgZSA9IHt9O1xuXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2Ygc2NoZW1hLiRfdGVybXMua2V5cykge1xuXHRcdFx0XHRzZWdtZW50cy5wdXNoKGl0ZW0ua2V5KTtcblx0XHRcdFx0d2FsayhpdGVtLnNjaGVtYSwgaXRlbS5rZXksIGQsIGUsIHNlZ21lbnRzKTtcblx0XHRcdFx0c2VnbWVudHMucG9wKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChPYmplY3Qua2V5cyhkKS5sZW5ndGgpIHtcblx0XHRcdFx0ZGVmYXVsdHNba2V5XSA9IGQ7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChPYmplY3Qua2V5cyhlKS5sZW5ndGgpIHtcblx0XHRcdFx0ZW52W2tleV0gPSBlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChkZWZhdWx0c1trZXldID09PSB1bmRlZmluZWQgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNjaGVtYS5fZmxhZ3MsICdkZWZhdWx0JykpIHtcblx0XHRcdGRlZmF1bHRzW2tleV0gPSBzY2hlbWEuX2ZsYWdzLmRlZmF1bHQ7XG5cdFx0XHRsb2coYEluaXRpYWxpemluZyAke2hpZ2hsaWdodChzZWdtZW50cy5qb2luKCcuJykpfSA9ICR7aGlnaGxpZ2h0KGRlZmF1bHRzW2tleV0pfSBmcm9tIGRlZmF1bHRzYCk7XG5cdFx0fVxuXG5cdFx0aWYgKGVudltrZXldID09PSB1bmRlZmluZWQgJiYgc2NoZW1hLiRfdGVybXMubWV0YXMpIHtcblx0XHRcdGZvciAoY29uc3QgbWV0YSBvZiBzY2hlbWEuJF90ZXJtcy5tZXRhcykge1xuXHRcdFx0XHRpZiAobWV0YS5lbnYgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb2Nlc3MuZW52LCBtZXRhLmVudikpIHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IHByb2Nlc3MuZW52W21ldGEuZW52XTtcblx0XHRcdFx0XHRsb2coYEluaXRpYWxpemluZyAke2hpZ2hsaWdodChzZWdtZW50cy5qb2luKCcuJykpfSA9ICR7aGlnaGxpZ2h0KHZhbHVlKX0gZnJvbSBlbnZpcm9ubWVudCAke2hpZ2hsaWdodChtZXRhLmVudil9YCk7XG5cdFx0XHRcdFx0ZW52W2tleV0gPSBzY2hlbWEudmFsaWRhdGUodmFsdWUpLnZhbHVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGlmIChzY2hlbWEuJF90ZXJtcy5rZXlzKSB7XG5cdFx0Zm9yIChjb25zdCBpdGVtIG9mIHNjaGVtYS4kX3Rlcm1zLmtleXMpIHtcblx0XHRcdHdhbGsoaXRlbS5zY2hlbWEsIGl0ZW0ua2V5LCBkZWZhdWx0cywgZW52LCBbIGl0ZW0ua2V5IF0pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IGRlZmF1bHRzLCBlbnY6IE9iamVjdC5rZXlzKGVudikubGVuZ3RoID8gZW52IDogbnVsbCB9O1xufVxuXG4vKipcbiAqIEhhc2hlcyBhIHZhbHVlIHF1aWNrIGFuZCBkaXJ0eS5cbiAqXG4gKiBAcGFyYW0geyp9IGl0IC0gQSB2YWx1ZSB0byBoYXNoLlxuICogQHJldHVybnMge051bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hWYWx1ZShpdCkge1xuXHRjb25zdCBzdHIgPSBKU09OLnN0cmluZ2lmeShpdCkgfHwgJyc7XG5cdGxldCBoYXNoID0gNTM4MTtcblx0bGV0IGkgPSBzdHIubGVuZ3RoO1xuXHR3aGlsZSAoaSkge1xuXHRcdGhhc2ggPSBoYXNoICogMzMgXiBzdHIuY2hhckNvZGVBdCgtLWkpO1xuXHR9XG5cdHJldHVybiBoYXNoID4+PiAwO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhbmQgc3BsaXRzIGEga2V5IGludG8gYW4gYXJyYXkuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXk8U3RyaW5nPn0ga2V5IC0gVGhlIGtleSB0byBzcGxpdC4gSWYgdGhlIGtleSBpcyBhbiBhcnJheSwgdGhlbiBpdCBpcyBzaW1wbHlcbiAqIGNoZWNrIGZvciB2YWxpZGl0eS5cbiAqIEByZXR1cm5zIHtBcnJheTxTdHJpbmc+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRLZXkoa2V5KSB7XG5cdGlmIChrZXkgIT09IHVuZGVmaW5lZCAmJiBrZXkgIT09IG51bGwgJiYgdHlwZW9mIGtleSAhPT0gJ3N0cmluZycgJiYgIUFycmF5LmlzQXJyYXkoa2V5KSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGtleSB0byBiZSBhIHN0cmluZycpO1xuXHR9XG5cblx0Y29uc3Qgc2VnbWVudHMgPSBrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwgPyBbXSA6IEFycmF5LmlzQXJyYXkoa2V5KSA/IGtleSA6IGtleS5zcGxpdCgnLicpO1xuXHRmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygc2VnbWVudHMpIHtcblx0XHRpZiAoIXNlZ21lbnQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBrZXkgJHtrZXl9YCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBzZWdtZW50cztcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGR1cGxpY2F0ZXMgZnJvbSBhbiBhcnJheSBhbmQgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnIgLSBUaGUgYXJyYXkgdG8gcmVtb3ZlIGR1cGxpY2F0ZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmlxdWUoYXJyID0gW10pIHtcblx0aWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcblx0XHRhcnIgPSBbIGFyciBdO1xuXHR9XG5cblx0cmV0dXJuIGFyci5yZWR1Y2UoKHByZXYsIGN1cikgPT4ge1xuXHRcdGlmICh0eXBlb2YgY3VyICE9PSAndW5kZWZpbmVkJyAmJiBjdXIgIT09IG51bGwpIHtcblx0XHRcdGlmIChwcmV2LmluZGV4T2YoY3VyKSA9PT0gLTEpIHtcblx0XHRcdFx0cHJldi5wdXNoKGN1cik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBwcmV2O1xuXHR9LCBbXSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSB2YWx1ZSBiZWluZyBjaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVmFyaW91cyBvcHRpb25zLlxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmFjdGlvbl0gLSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRyaWdnZXJpbmcgdGhlIHZhbGlkYXRpb24uXG4gKiBAcGFyYW0ge0FycmF5LjxTdHJpbmc+fSBbb3B0cy5rZXldIC0gVGhlIGNvbmZpZyBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMubWVzc2FnZV0gLSBBIGN1c3RvbSBlcnJvciBtZXNzYWdlIHRvIHVzZSBpZiB2YWxpZGF0aW9uIGZhaWxzLlxuICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gb3B0cy5zY2hlbWFzIC0gQW4gYXJyYXkgb2YgSm9pIHNjaGVtYXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHMudmFsaWRhdGVPcHRpb25zXSAtIFZhcmlvdXMgb3B0aW9ucyB0byBwYXNzIGludG8gSm9pJ3Mgc2NoZW1hIHZhbGlkYXRpb24uXG4gKiBAcGFyYW0geyp9IFtvcHRzLnZhbHVlXSAtIFRoZSBuZXcgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gVGhlIG9yaWdpbmFsIHZhbHVlIHJlZmVyZW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlKHsgc2NoZW1hcywga2V5ID0gW10sIHZhbHVlLCBhY3Rpb24gPSAnY2hhbmdlJywgbWVzc2FnZSwgdmFsaWRhdGVPcHRpb25zIH0pIHtcblx0Y29uc3QgY2hlY2tSZWFkb25seSA9IHNjaGVtYSA9PiB7XG5cdFx0aWYgKHNjaGVtYS4kX3Rlcm1zLm1ldGFzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG1ldGEgb2Ygc2NoZW1hLiRfdGVybXMubWV0YXMpIHtcblx0XHRcdFx0aWYgKG1ldGEucmVhZG9ubHkpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYE5vdCBhbGxvd2VkIHRvICR7YWN0aW9ufSByZWFkLW9ubHkgcHJvcGVydHlgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvLyBmb3JjZSBubyBkZWZhdWx0cyBzbyB0aGF0IEpvaSBkb2Vzbid0IHBvcHVsYXRlIHRoZSBgdmFsdWVgIHdpdGggZGVmYXVsdHNcblx0Y29uc3Qgb3B0cyA9IHZhbGlkYXRlT3B0aW9ucyB8fCB7fTtcblx0b3B0cy5ub0RlZmF1bHRzID0gdHJ1ZTtcblxuXHQoZnVuY3Rpb24gd2FsayhrZXksIHNjaGVtYXMpIHtcblx0XHRjb25zdCBzY29wZSA9IGtleS5zaGlmdCgpO1xuXHRcdGNvbnN0IHNjb3BlU2NoZW1hcyA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuXHRcdFx0aWYgKGFjdGlvbiAhPT0gJ2xvYWQnKSB7XG5cdFx0XHRcdGNoZWNrUmVhZG9ubHkoc2NoZW1hKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFzY29wZSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHZhbHVlID0gSm9pLmF0dGVtcHQodmFsdWUsIHNjaGVtYSwgYCR7bWVzc2FnZSB8fCBgRmFpbGVkIHRvICR7YWN0aW9ufSBjb25maWcgdmFsdWVgfTpgLCBvcHRzKTtcblx0XHRcdH0gZWxzZSBpZiAoc2NvcGUgJiYgc2NoZW1hLnR5cGUgPT09ICdvYmplY3QnICYmIHNjaGVtYS4kX3Rlcm1zLmtleXMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIHNjaGVtYS4kX3Rlcm1zLmtleXMpIHtcblx0XHRcdFx0XHRpZiAoaXRlbS5rZXkgPT09IHNjb3BlKSB7XG5cdFx0XHRcdFx0XHRzY29wZVNjaGVtYXMucHVzaChpdGVtLnNjaGVtYSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHNjb3BlU2NoZW1hcy5sZW5ndGgpIHtcblx0XHRcdHdhbGsoa2V5LCBzY29wZVNjaGVtYXMpO1xuXHRcdH1cblx0fShbIC4uLmtleSBdLCAoQXJyYXkuaXNBcnJheShzY2hlbWFzKSA/IHNjaGVtYXMgOiBbIHNjaGVtYXMgXSkuZmlsdGVyKEJvb2xlYW4pKSk7XG5cblx0cmV0dXJuIHZhbHVlO1xufVxuIl0sImZpbGUiOiJ1dGlsLmpzIn0= |
{ | ||
"name": "config-kit", | ||
"version": "1.2.1", | ||
"version": "1.3.0", | ||
"description": "A universal, layered configuration system.", | ||
@@ -25,5 +25,5 @@ "main": "./dist/index.js", | ||
"dependencies": { | ||
"@hapi/joi": "^17.1.1", | ||
"fs-extra": "^9.0.1", | ||
"import-fresh": "^3.2.1", | ||
"import-fresh": "^3.2.2", | ||
"joi": "^17.3.0", | ||
"snooplogg": "^3.0.0", | ||
@@ -30,0 +30,0 @@ "source-map-support": "^0.5.19" |
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
295183
3557
+ Addedjoi@^17.3.0
+ Added@sideway/address@4.1.5(transitive)
+ Added@sideway/formula@3.0.1(transitive)
+ Added@sideway/pinpoint@2.0.0(transitive)
+ Addedjoi@17.13.3(transitive)
- Removed@hapi/joi@^17.1.1
- Removed@hapi/address@4.1.0(transitive)
- Removed@hapi/formula@2.0.0(transitive)
- Removed@hapi/joi@17.1.1(transitive)
- Removed@hapi/pinpoint@2.0.1(transitive)
Updatedimport-fresh@^3.2.2