@mediusinc/mng-commons 3.0.0-rc.6 → 3.0.0-rc.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -126,6 +126,9 @@ export class TableDescriptor {
126
126
  get rowClassNameMapFn() {
127
127
  return this._rowClassNameMapFn;
128
128
  }
129
+ get actionColumnFrozen() {
130
+ return this._actionColumnFrozen;
131
+ }
129
132
  get headerClassName() {
130
133
  return this._headerClassName;
131
134
  }
@@ -287,6 +290,10 @@ export class TableDescriptor {
287
290
  this._columnResizeMode = columnResizeMode;
288
291
  return this;
289
292
  }
293
+ withActionColumnFrozen(frozen) {
294
+ this._actionColumnFrozen = frozen;
295
+ return this;
296
+ }
290
297
  withRowClassName(rowClassName, classNameMapFn) {
291
298
  this._rowClassName = rowClassName;
292
299
  this._rowClassNameMapFn = classNameMapFn;
@@ -321,6 +328,7 @@ export class TableDescriptor {
321
328
  obj._hasGridlines = this._hasGridlines;
322
329
  obj._hasResizableColumns = this._hasResizableColumns;
323
330
  obj._columnResizeMode = this._columnResizeMode;
331
+ obj._actionColumnFrozen = this._actionColumnFrozen;
324
332
  obj._isLocalized = this._isLocalized;
325
333
  obj._localizationLocaleProperty = this._localizationLocaleProperty;
326
334
  obj._paginationMode = this._paginationMode;
@@ -552,4 +560,4 @@ export class TableDynamicDescriptor extends TableDescriptor {
552
560
  return descriptor;
553
561
  }
554
562
  }
555
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGVzY3JpcHRvcnMvdGFibGUvdGFibGUuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUlqRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBd0IsY0FBYyxFQUFFLDJCQUEyQixFQUFFLHNCQUFzQixFQUEyQixhQUFhLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDNUosT0FBTyxFQUFDLGdCQUFnQixFQUFFLHVCQUF1QixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFOUUsTUFBTSxPQUFPLGVBQWU7SUFzQ3hCLFlBQVksU0FBdUIsRUFBRSxVQUFtQixFQUFFLGFBQXNCLEVBQUUsV0FBeUM7UUFsQ25ILG1CQUFjLEdBQTJCLHNCQUFzQixDQUFDLEdBQUcsQ0FBQztRQUVwRSx3QkFBbUIsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDcEMsb0JBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsYUFBUSxHQUFvQyxFQUFFLENBQUM7UUFFakQsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFHcEIsaUJBQVksR0FBa0IsZUFBZSxDQUFDO1FBRTlDLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLHlCQUFvQixHQUFhLEVBQUUsQ0FBQztRQUNwQyxvQkFBZSxHQUFjLEVBQUUsQ0FBQztRQUV4QyxT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QUFDO1FBQzNILElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUIsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtNZWRpdXNRdWVyeVJlc3VsdH0gZnJvbSAnLi4vLi4vYXBpL21vZGVscyc7XG5pbXBvcnQge09iamVjdFNlcmlhbGl6ZXJ9IGZyb20gJy4uLy4uL2FwaS91dGlscyc7XG5pbXBvcnQge0lMb29rdXBEYXRhUHJvdmlkZXJ9IGZyb20gJy4uLy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7SUNvbHVtblZhbHVlQ29tcG9uZW50LCBUYWJsZXZpZXdBdHRyaWJ1dGVEZWZ9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge0NsYXNzVHlwZSwgRW51bVR5cGV9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7TW9kZWxVdGlsfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQge1RhYmxldmlld1V0aWx9IGZyb20gJy4uLy4uL3V0aWxzL3RhYmxldmlldy51dGlsJztcbmltcG9ydCB7RmlsdGVyTG9va3VwRGVzY3JpcHRvcn0gZnJvbSAnLi4vZmlsdGVyJztcbmltcG9ydCB7TW9kZWxEZXNjcmlwdG9yfSBmcm9tICcuLi9tb2RlbC5kZXNjcmlwdG9yJztcbmltcG9ydCB7Q29sdW1uRGlzcGxheVR5cGVFbnVtLCBDb2x1bW5UeXBlRW51bSwgVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLCBUYWJsZUZpbHRlckRpc3BsYXlFbnVtLCBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bSwgVGFibGVTaXplRW51bX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtDb2x1bW5EZXNjcmlwdG9yLCBDb2x1bW5EeW5hbWljRGVzY3JpcHRvcn0gZnJvbSAnLi9jb2x1bW4uZGVzY3JpcHRvcic7XG5cbmV4cG9ydCBjbGFzcyBUYWJsZURlc2NyaXB0b3I8VD4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX21vZGVsOiBNb2RlbERlc2NyaXB0b3I8VD47XG4gICAgcHJpdmF0ZSBfZGF0YUtleT86IHN0cmluZztcbiAgICBwcml2YXRlIF9tb2RlbFR5cGU6IENsYXNzVHlwZTxUPjtcbiAgICBwcml2YXRlIF9maWx0ZXJEaXNwbGF5OiBUYWJsZUZpbHRlckRpc3BsYXlFbnVtID0gVGFibGVGaWx0ZXJEaXNwbGF5RW51bS5Sb3c7XG4gICAgcHJpdmF0ZSBfcGFnaW5hdGlvbk1vZGU/OiBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bTtcbiAgICBwcml2YXRlIF9yb3dzUGVyUGFnZU9wdGlvbnMgPSBbMjUsIDUwLCAxMDBdO1xuICAgIHByaXZhdGUgX2RlZmF1bHROdW1Sb3dzID0gdGhpcy5fcm93c1BlclBhZ2VPcHRpb25zWzBdO1xuICAgIHByb3RlY3RlZCBfY29sdW1uczogQXJyYXk8Q29sdW1uRGVzY3JpcHRvcjxhbnksIFQ+PiA9IFtdO1xuICAgIHByaXZhdGUgX3RpdGxlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2hpZGVIZWFkZXIgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9kYXRhS2V5UHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfbG9hZGluZ1RleHQ/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfbG9hZGluZ0ljb246IHN0cmluZyB8IG51bGwgPSAncGkgcGktc3Bpbm5lcic7XG5cbiAgICBwcml2YXRlIF9oYXNEZWZhdWx0U29ydCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2RlZmF1bHRTb3J0UHJvcGVydHk6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBfZGVmYXVsdFNvcnRBc2M6IGJvb2xlYW5bXSA9IFtdO1xuXG4gICAgLy8gdmlzdWFsXG4gICAgcHJpdmF0ZSBfY2xhc3NOYW1lID0gJyc7XG4gICAgcHJpdmF0ZSBfc2l6ZTogVGFibGVTaXplRW51bSA9IFRhYmxlU2l6ZUVudW0uTGFyZ2U7XG4gICAgcHJpdmF0ZSBfdGFibGVGdWxsSGVpZ2h0T2Zmc2V0PzogbnVtYmVyO1xuICAgIHByaXZhdGUgX3Jvd0hlaWdodD86IG51bWJlcjtcbiAgICBwcml2YXRlIF9oYXNIb3ZlciA9IHRydWU7XG4gICAgcHJpdmF0ZSBfaGFzR3JpZGxpbmVzID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaGFzUmVzaXphYmxlQ29sdW1ucyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2NvbHVtblJlc2l6ZU1vZGU6ICdmaXQnIHwgJ2V4cGFuZCcgPSAnZXhwYW5kJztcblxuICAgIHByaXZhdGUgX2hlYWRlckNsYXNzTmFtZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9yb3dDbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfcm93Q2xhc3NOYW1lTWFwRm4/OiAoY2xhc3NOYW1lPzogc3RyaW5nLCBpdGVtPzogVCkgPT4gc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBfYXV0b0dlbmVyYXRlZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfaXNMb2NhbGl6ZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eT86IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKG1vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+LCBpZFByb3BlcnR5Pzogc3RyaW5nLCB0aXRsZVByb3BlcnR5Pzogc3RyaW5nLCBpMThuQmFzZUtleT86IHN0cmluZyB8IENsYXNzVHlwZTx1bmtub3duPikge1xuICAgICAgICB0aGlzLl9tb2RlbFR5cGUgPSBtb2RlbFR5cGU7XG4gICAgICAgIHRoaXMuX21vZGVsID0gbmV3IE1vZGVsRGVzY3JpcHRvcjxUPihtb2RlbFR5cGUsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHksIGkxOG5CYXNlS2V5KTtcbiAgICAgICAgdGhpcy5fZGF0YUtleVByb3BlcnR5ID0gaWRQcm9wZXJ0eSA/PyBNb2RlbFV0aWwuZmluZElkQXR0cmlidXRlKG1vZGVsVHlwZSkgPz8gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGdlbmVyYXRlcyBkZXNjcmlwdG9yIGJhc2VkIG9uIG1vZGVsVHlwZSBhdHRyaWJ1dGUgZGVmaW5pdGlvblxuICAgICAqIEBwYXJhbSBtb2RlbFR5cGUgY2xhc3MgdHlwZVxuICAgICAqIEBwYXJhbSBpZFByb3BlcnR5XG4gICAgICogQHBhcmFtIHRpdGxlUHJvcGVydHlcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb208VD4obW9kZWxUeXBlOiBDbGFzc1R5cGU8VD4sIGlkUHJvcGVydHk/OiBzdHJpbmcsIHRpdGxlUHJvcGVydHk/OiBzdHJpbmcpOiBUYWJsZURlc2NyaXB0b3I8VD4ge1xuICAgICAgICByZXR1cm4gVGFibGVEZXNjcmlwdG9yLmZyb21Nb2RlbFdpdGhBdHRyaWJ1dGVzKG1vZGVsVHlwZSwgVGFibGV2aWV3VXRpbC5nZXRBdHRyaWJ1dGVEZWZNYXAobW9kZWxUeXBlKSwgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGVzIGRlc2NyaXB0b3IgYmFzZSBvbiBnaXZlbiBhdHRyaWJ1dGUgZGVmaW5pdGlvblxuICAgICAqIEBwYXJhbSBtb2RlbFR5cGUgY2xhc3MgdHlwZVxuICAgICAqIEBwYXJhbSBhdHRyaWJ1dGVzIGF0dHJpYnV0ZXMgZnJvbSB3aGljaCBkZXNjcmlwdG9yIGlzIGdlbmVyYXRlZFxuICAgICAqIEBwYXJhbSBpZFByb3BlcnR5XG4gICAgICogQHBhcmFtIHRpdGxlUHJvcGVydHlcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb21Nb2RlbFdpdGhBdHRyaWJ1dGVzPFQ+KG1vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+LCBhdHRyaWJ1dGVzOiBUYWJsZXZpZXdBdHRyaWJ1dGVEZWZbXSwgaWRQcm9wZXJ0eT86IHN0cmluZywgdGl0bGVQcm9wZXJ0eT86IHN0cmluZyk6IFRhYmxlRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgVGFibGVEZXNjcmlwdG9yKG1vZGVsVHlwZSwgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSk7XG4gICAgICAgIGRlc2NyaXB0b3IuX2F1dG9HZW5lcmF0ZWQgPSB0cnVlO1xuICAgICAgICBhdHRyaWJ1dGVzLmZpbHRlcihhdHRyID0+ICFhdHRyLnR5cGUuaW5jbHVkZXMoJ1NldCcpICYmICFhdHRyLnR5cGUuaW5jbHVkZXMoJ0FycmF5JykpLmZvckVhY2goYXR0ciA9PiBkZXNjcmlwdG9yLnVwc2VydENvbHVtbkZyb21BdHRyaWJ1dGVEZWYoYXR0cikpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGFLZXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhS2V5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmlsdGVyRGlzcGxheSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckRpc3BsYXk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYWdpbmF0aW9uTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2luYXRpb25Nb2RlO1xuICAgIH1cblxuICAgIGdldCByb3dzUGVyUGFnZU9wdGlvbnMoKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93c1BlclBhZ2VPcHRpb25zO1xuICAgIH1cblxuICAgIGdldCBkZWZhdWx0TnVtUm93cygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdE51bVJvd3M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoaWRlSGVhZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlkZUhlYWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGFLZXlQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFLZXlQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvYWRpbmdUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGluZ1RleHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2FkaW5nSWNvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRpbmdJY29uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzRGVmYXVsdFNvcnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNEZWZhdWx0U29ydDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRlZmF1bHRTb3J0UHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0U29ydFByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGVmYXVsdFNvcnRBc2MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0U29ydEFzYztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1vZGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRhYmxlRnVsbEhlaWdodE9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlRnVsbEhlaWdodE9mZnNldDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd0hlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0hlaWdodDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc0hvdmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzSG92ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNHcmlkbGluZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNHcmlkbGluZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNSZXNpemFibGVDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzUmVzaXphYmxlQ29sdW1ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtblJlc2l6ZU1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5SZXNpemVNb2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93Q2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93Q2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93Q2xhc3NOYW1lTWFwRm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dDbGFzc05hbWVNYXBGbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhlYWRlckNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlYWRlckNsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzTG9jYWxpemVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRhdGFLZXkgaXMgdXNlZCBmb3IgdGhlIHB1cnBvc2Ugb2YgY29tYmluZWQgc2F2aW5nIHVzZXIgcHJlZmVyZW5jZXMgaW4gbG9jYWxzdG9yYWdlIGlmIDIgdGFibGVzIGhhdmUgdGhlIHNhbWUgZGF0YUtleSB0aGV5IHdpbGwgc2hhcmUgdGhlIHNhbWUgbG9jYWxzdG9yYWdlIGVudHJ5LlxuICAgICAqIFNpbWlsYXJseSwgdGhpcyBwcm9wZXJ0eSBjYW4gYWxzbyBiZSB1c2VkIHRvIGRpZmZlcmVudGlhdGUgdHdvIHRhYmxlcyBvZiB0aGUgc2FtZSBtb2RlbCBvbiB0aGUgc2FtZSB1cmwgKHNvIHRoYXQgdGhleSBoYXZlIHNlcGFyYXRlIGVudHJpZXMgaW4gbG9jYWxzdG9yYWdlKS5cbiAgICAgKiBAcGFyYW0gZGF0YUtleVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRGF0YUtleShkYXRhS2V5Pzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RhdGFLZXkgPSBkYXRhS2V5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29sdW1uKHByb3BlcnR5OiBzdHJpbmcpOiBDb2x1bW5EZXNjcmlwdG9yPHN0cmluZywgVD4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1ucy5maW5kKGNvbCA9PiBjb2wucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uRGVzY3JpcHRvcjxDVD4oY29sdW1uOiBDb2x1bW5EZXNjcmlwdG9yPENULCBUPik6IFRhYmxlRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uKHByb3BlcnR5OiBzdHJpbmcpOiBDb2x1bW5EZXNjcmlwdG9yPHN0cmluZywgVD4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxzdHJpbmcsIFQ+KHRoaXMsIHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbk51bWJlcihwcm9wZXJ0eTogc3RyaW5nLCBkaXNwbGF5Rm9ybWF0Pzogc3RyaW5nKTogQ29sdW1uRGVzY3JpcHRvcjxudW1iZXIsIFQ+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8bnVtYmVyLCBUPih0aGlzLCBwcm9wZXJ0eSk7XG4gICAgICAgIGNvbHVtbi5hc051bWJlcihkaXNwbGF5Rm9ybWF0KTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbkRhdGUocHJvcGVydHk6IHN0cmluZywgZGlzcGxheUZvcm1hdD86IHN0cmluZyk6IENvbHVtbkRlc2NyaXB0b3I8RGF0ZSwgVD4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxEYXRlLCBUPih0aGlzLCBwcm9wZXJ0eSk7XG4gICAgICAgIGNvbHVtbi5hc0RhdGUoZGlzcGxheUZvcm1hdCk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW5Cb29sZWFuKHByb3BlcnR5OiBzdHJpbmcsIHllcz86IHN0cmluZywgbm8/OiBzdHJpbmcsIGFzSWNvbiA9IGZhbHNlKTogQ29sdW1uRGVzY3JpcHRvcjxib29sZWFuLCBUPiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IG5ldyBDb2x1bW5EZXNjcmlwdG9yPGJvb2xlYW4sIFQ+KHRoaXMsIHByb3BlcnR5KTtcbiAgICAgICAgY29sdW1uLmFzQm9vbGVhbih5ZXMsIG5vLCBhc0ljb24pO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uRW51bShwcm9wZXJ0eTogc3RyaW5nLCBlbnVtVHlwZTogRW51bVR5cGUsIG5hbWVBc1ZhbHVlID0gZmFsc2UsIHRpdGxlUGF0aD86IHN0cmluZyB8IG51bGwpOiBDb2x1bW5EZXNjcmlwdG9yPEVudW1UeXBlLCBUPiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IG5ldyBDb2x1bW5EZXNjcmlwdG9yPEVudW1UeXBlLCBUPih0aGlzLCBwcm9wZXJ0eSk7XG4gICAgICAgIGNvbHVtbi5hc0VudW0oZW51bVR5cGUsIG5hbWVBc1ZhbHVlLCB0aXRsZVBhdGgpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uQ3VzdG9tQ29tcG9uZW50KHByb3BlcnR5OiBzdHJpbmcsIGN1c3RvbUNvbXBvbmVudFR5cGU6IFR5cGU8SUNvbHVtblZhbHVlQ29tcG9uZW50PFQ+Pik6IENvbHVtbkRlc2NyaXB0b3I8YW55LCBUPiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IG5ldyBDb2x1bW5EZXNjcmlwdG9yPGFueSwgVD4odGhpcywgcHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4uYXNDdXN0b21Db21wb25lbnQoY3VzdG9tQ29tcG9uZW50VHlwZSk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVDb2x1bW4ocHJvcGVydHk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb2x1bW5kSWR4ID0gdGhpcy5fY29sdW1ucy5maW5kSW5kZXgoYyA9PiBjLnByb3BlcnR5ID09PSBwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMuc3BsaWNlKGNvbHVtbmRJZHgsIDEpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRmlsdGVyRGlzcGxheShmaWx0ZXJEaXNwbGF5VHlwZTogVGFibGVGaWx0ZXJEaXNwbGF5RW51bSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWx0ZXJEaXNwbGF5ID0gZmlsdGVyRGlzcGxheVR5cGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUGFnaW5hdGlvbk1vZGUocGFnaW5hdGlvbk1vZGU6IFRhYmxlUGFnaW5hdGlvbk1vZGVFbnVtKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3BhZ2luYXRpb25Nb2RlID0gcGFnaW5hdGlvbk1vZGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUm93c1BlclBhZ2Uocm93czogbnVtYmVyLCBvcHRpb25zPzogQXJyYXk8bnVtYmVyPikge1xuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5fcm93c1BlclBhZ2VPcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX3Jvd3NQZXJQYWdlT3B0aW9ucy5pbmNsdWRlcyhyb3dzKSkge1xuICAgICAgICAgICAgdGhpcy5fZGVmYXVsdE51bVJvd3MgPSB0aGlzLl9yb3dzUGVyUGFnZU9wdGlvbnNbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9kZWZhdWx0TnVtUm93cyA9IHJvd3M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUaXRsZSh0aXRsZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhIaWRlSGVhZGVyKGhpZGVIZWFkZXIgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX2hpZGVIZWFkZXIgPSBoaWRlSGVhZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERhdGFLZXlQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RhdGFLZXlQcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvYWRpbmcodGV4dD86IHN0cmluZywgaWNvbj86IHN0cmluZyB8IG51bGwpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbG9hZGluZ1RleHQgPSB0ZXh0O1xuICAgICAgICB0aGlzLl9sb2FkaW5nSWNvbiA9IGljb24gPT09IHVuZGVmaW5lZCA/ICdwaSBwaS1zcGlubmVyJyA6IGljb247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBtZXRob2QgdGhhdCBlbmFibGVzL2Rpc2FibGVzIHJlb3JkZXJhYmxlIHByb3BlcnR5IG9uIGFsbCBjb2x1bW5zIGN1cnJlbnRseSBpbiB0aGUgZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gY29sdW1uc1Jlb3JkZXJhYmxlOiBib29sZWFuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDdXJyZW50Q29sdW1uc1Jlb3JkZXJhYmxlKGNvbHVtbnNSZW9yZGVyYWJsZSA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBjb2wud2l0aFJlb3JkZXJhYmxlKGNvbHVtbnNSZW9yZGVyYWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIG1ldGhvZCB0aGF0IGVuYWJsZXMvZGlzYWJsZXMgdG9nZ2xlYWJsZSBwcm9wZXJ0eSBvbiBhbGwgY29sdW1ucyBjdXJyZW50bHkgaW4gdGhlIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGNvbHVtbnNUb2dnbGVhYmxlOiBib29sZWFuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDdXJyZW50Q29sdW1uc1RvZ2dsZWFibGUoY29sdW1uc1RvZ2dsZWFibGUgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICAgY29sLndpdGhUb2dnbGVhYmxlKGNvbHVtbnNUb2dnbGVhYmxlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERlZmF1bHRTb3J0KHByb3BlcnR5OiBzdHJpbmcsIGFzYyA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzRGVmYXVsdFNvcnQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9kZWZhdWx0U29ydFByb3BlcnR5LnB1c2gocHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9kZWZhdWx0U29ydEFzYy5wdXNoKGFzYyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTaXplKHNpemU6IFRhYmxlU2l6ZUVudW0gPSBUYWJsZVNpemVFbnVtLk5vcm1hbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9zaXplID0gc2l6ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUYWJsZUZ1bGxIZWlnaHRPZmZzZXQodGFibGVGdWxsSGVpZ2h0T2Zmc2V0OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGFibGVGdWxsSGVpZ2h0T2Zmc2V0ID0gdGFibGVGdWxsSGVpZ2h0T2Zmc2V0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJvd0hlaWdodChyb3dIZWlnaHQ6IG51bWJlcik6IHRoaXMge1xuICAgICAgICB0aGlzLl9yb3dIZWlnaHQgPSByb3dIZWlnaHQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSG92ZXIoaG92ZXI6IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzSG92ZXIgPSBob3ZlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhHcmlkbGluZXMoZ3JpZGxpbmVzOiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc0dyaWRsaW5lcyA9IGdyaWRsaW5lcztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHRoYXQgZW5hYmxlcy9kaXNhYmxlZCBjb2x1bW4gcmVzaXplIGZlYXR1cmUgd2l0aCBjb2x1bW5SZXNpemVNb2RlIG9uIGFsbCBjb2x1bW5zLlxuICAgICAqIEBwYXJhbSByZXNpemFibGVDb2x1bW5zOiBib29sZWFuXG4gICAgICogQHBhcmFtIGNvbHVtblJlc2l6ZU1vZGU6ICdmaXQnIHwgJ2V4cGFuZCcgPSAnZml0J1xuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uc1Jlc2l6YWJsZShyZXNpemFibGVDb2x1bW5zID0gdHJ1ZSwgY29sdW1uUmVzaXplTW9kZTogJ2ZpdCcgfCAnZXhwYW5kJyA9ICdmaXQnKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc1Jlc2l6YWJsZUNvbHVtbnMgPSByZXNpemFibGVDb2x1bW5zO1xuICAgICAgICB0aGlzLl9jb2x1bW5SZXNpemVNb2RlID0gY29sdW1uUmVzaXplTW9kZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSb3dDbGFzc05hbWUocm93Q2xhc3NOYW1lPzogc3RyaW5nLCBjbGFzc05hbWVNYXBGbj86IChjbGFzc05hbWU/OiBzdHJpbmcsIGl0ZW0/OiBUKSA9PiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcm93Q2xhc3NOYW1lID0gcm93Q2xhc3NOYW1lO1xuICAgICAgICB0aGlzLl9yb3dDbGFzc05hbWVNYXBGbiA9IGNsYXNzTmFtZU1hcEZuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEhlYWRlckNsYXNzTmFtZShoZWFkZXJDbGFzc05hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oZWFkZXJDbGFzc05hbWUgPSBoZWFkZXJDbGFzc05hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTG9jYWxpemVkKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pc0xvY2FsaXplZCA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkobG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pc0xvY2FsaXplZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5ID0gbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjb3B5RmllbGRzVG8ob2JqOiBUYWJsZURlc2NyaXB0b3I8VD4pIHtcbiAgICAgICAgb2JqLl90aXRsZSA9IHRoaXMuX3RpdGxlO1xuICAgICAgICBvYmouX2hpZGVIZWFkZXIgPSB0aGlzLl9oaWRlSGVhZGVyO1xuICAgICAgICBvYmouX2RhdGFLZXlQcm9wZXJ0eSA9IHRoaXMuX2RhdGFLZXlQcm9wZXJ0eTtcbiAgICAgICAgb2JqLl9oYXNEZWZhdWx0U29ydCA9IHRoaXMuX2hhc0RlZmF1bHRTb3J0O1xuICAgICAgICBvYmouX2RlZmF1bHRTb3J0UHJvcGVydHkgPSB0aGlzLl9kZWZhdWx0U29ydFByb3BlcnR5Lm1hcChwID0+IHApO1xuICAgICAgICBvYmouX2RlZmF1bHRTb3J0QXNjID0gdGhpcy5fZGVmYXVsdFNvcnRBc2MubWFwKHAgPT4gcCk7XG4gICAgICAgIG9iai5fZmlsdGVyRGlzcGxheSA9IHRoaXMuX2ZpbHRlckRpc3BsYXk7XG4gICAgICAgIG9iai5fY2xhc3NOYW1lID0gdGhpcy5fY2xhc3NOYW1lO1xuICAgICAgICBvYmouX3NpemUgPSB0aGlzLl9zaXplO1xuICAgICAgICBvYmouX3RhYmxlRnVsbEhlaWdodE9mZnNldCA9IHRoaXMuX3RhYmxlRnVsbEhlaWdodE9mZnNldDtcbiAgICAgICAgb2JqLl9yb3dIZWlnaHQgPSB0aGlzLl9yb3dIZWlnaHQ7XG4gICAgICAgIG9iai5faGFzSG92ZXIgPSB0aGlzLl9oYXNIb3ZlcjtcbiAgICAgICAgb2JqLl9oYXNHcmlkbGluZXMgPSB0aGlzLl9oYXNHcmlkbGluZXM7XG4gICAgICAgIG9iai5faGFzUmVzaXphYmxlQ29sdW1ucyA9IHRoaXMuX2hhc1Jlc2l6YWJsZUNvbHVtbnM7XG4gICAgICAgIG9iai5fY29sdW1uUmVzaXplTW9kZSA9IHRoaXMuX2NvbHVtblJlc2l6ZU1vZGU7XG4gICAgICAgIG9iai5faXNMb2NhbGl6ZWQgPSB0aGlzLl9pc0xvY2FsaXplZDtcbiAgICAgICAgb2JqLl9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eSA9IHRoaXMuX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5O1xuICAgICAgICBvYmouX3BhZ2luYXRpb25Nb2RlID0gdGhpcy5fcGFnaW5hdGlvbk1vZGU7XG4gICAgICAgIG9iai5fcm93c1BlclBhZ2VPcHRpb25zID0gdGhpcy5fcm93c1BlclBhZ2VPcHRpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IFRhYmxlRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgVGFibGVEZXNjcmlwdG9yKHRoaXMubW9kZWwudHlwZSwgdGhpcy5tb2RlbC5pZFByb3BlcnR5TmFtZSwgdGhpcy5tb2RlbC50aXRsZVByb3BlcnR5TmFtZSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICBkZXNjcmlwdG9yLl9jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjID0+IGMuY29weSgpKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGVzIGNvbHVtbiBiYXNlZCBvbiBhdHRyaWJ1dGVzXG4gICAgICogQHBhcmFtIGF0dHJpYnV0ZSBhdHRyaWJ1dGUgbWFwXG4gICAgICogQHBhcmFtIGNvbHVtbiBpZiBwcm92aWRlZCwgcmVwbGFjZWQgYnkgbmV3LCBvdGhlcndpc2UgbmV3IGlzIGNyZWF0ZWRcbiAgICAgKiBAcGFyYW0gYXJncyBhZGRpdGlvbmFsIHBhcmFtZXRlcnNcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwc2VydENvbHVtbkZyb21BdHRyaWJ1dGVEZWYoYXR0cmlidXRlOiBUYWJsZXZpZXdBdHRyaWJ1dGVEZWYsIGNvbHVtbj86IENvbHVtbkRlc2NyaXB0b3I8c3RyaW5nLCBUPiwgLi4uYXJnczogYW55W10pOiBDb2x1bW5EZXNjcmlwdG9yPHN0cmluZywgVD4ge1xuICAgICAgICBpZiAoY29sdW1uID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuYWRkQ29sdW1uKGF0dHJpYnV0ZS5uYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhdHRyaWJ1dGUuY29sdW1uVHlwZSA9PT0gQ29sdW1uVHlwZUVudW0uRW51bSAmJiBhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgYXJncyA9IFthdHRyaWJ1dGUuZW51bVR5cGVdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29sdW1uID0gY29sdW1uLmFzVHlwZShhdHRyaWJ1dGUuY29sdW1uVHlwZSwgYXR0cmlidXRlLmNvbHVtbkRpc3BsYXlUeXBlLCAuLi5hcmdzKTtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZS5jbGFzc1R5cGUpIHtcbiAgICAgICAgICAgIGNvbHVtbi53aXRoT2JqZWN0UHJvcGVydHkoYXR0cmlidXRlLmNsYXNzVHlwZSkud2l0aFNvcnQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbHVtbi53aXRoU29ydCgpLndpdGhGaWx0ZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGVmaW5lcyBtb2RpZmllZCB0eXBlIG9mIGNvbHVtblxuICAgICAqIERPIE5PVCBVU0Ugd2l0aCBlbnVtICh1c2Ugd2l0aEN1c3RvbUVudW1UeXBlKVxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBjb2x1bW4gbmFtZVxuICAgICAqIEBwYXJhbSBjb2x1bW5UeXBlIG1vZGlmaWVkIHR5cGVcbiAgICAgKiBAcGFyYW0gYXJncyBhZGRpdGlvbmFsIGF0dHJpYnV0ZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbk1vZGlmaWVkVHlwZShwcm9wZXJ0eTogc3RyaW5nLCBjb2x1bW5UeXBlPzogQ29sdW1uVHlwZUVudW0sIGNvbHVtbkRpc3BsYXlUeXBlPzogQ29sdW1uRGlzcGxheVR5cGVFbnVtLCAuLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVEZWYgPSBUYWJsZXZpZXdVdGlsLmdldEF0dHJpYnV0ZURlZk1hcCh0aGlzLl9tb2RlbFR5cGUpLmZpbmQoYXRyaWJ1dGUgPT4gYXRyaWJ1dGUubmFtZSA9PT0gcHJvcGVydHkpO1xuXG4gICAgICAgIGlmIChhdHRyaWJ1dGVEZWYgIT0gbnVsbCkge1xuICAgICAgICAgICAgYXR0cmlidXRlRGVmLmNvbHVtblR5cGUgPSBjb2x1bW5UeXBlID8/IGF0dHJpYnV0ZURlZi5jb2x1bW5UeXBlO1xuICAgICAgICAgICAgYXR0cmlidXRlRGVmLmNvbHVtbkRpc3BsYXlUeXBlID0gY29sdW1uRGlzcGxheVR5cGUgPz8gYXR0cmlidXRlRGVmLmNvbHVtbkRpc3BsYXlUeXBlO1xuICAgICAgICAgICAgdGhpcy51cHNlcnRDb2x1bW5Gcm9tQXR0cmlidXRlRGVmKFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZURlZixcbiAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLnByb3BlcnR5ID09PSBhdHRyaWJ1dGVEZWYubmFtZSksXG4gICAgICAgICAgICAgICAgLi4uYXJnc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRlZmluZXMgY3VzdG9tIGVudW0gdHlwZSBmb3IgY29sdW1uXG4gICAgICogQHBhcmFtIHByb3BlcnR5IGNvbHVtbiBuYW1lXG4gICAgICogQHBhcmFtIGVudW1UeXBlXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5Nb2RpZmllZEVudW0ocHJvcGVydHk6IHN0cmluZywgZW51bVR5cGU/OiBFbnVtVHlwZSk6IHRoaXMge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVEZWYgPSBUYWJsZXZpZXdVdGlsLmdldEF0dHJpYnV0ZURlZk1hcCh0aGlzLl9tb2RlbFR5cGUpLmZpbmQoYXRyaWJ1dGUgPT4gYXRyaWJ1dGUubmFtZSA9PT0gcHJvcGVydHkpO1xuXG4gICAgICAgIGlmIChhdHRyaWJ1dGVEZWYgIT0gbnVsbCkge1xuICAgICAgICAgICAgYXR0cmlidXRlRGVmLmNvbHVtblR5cGUgPSBDb2x1bW5UeXBlRW51bS5FbnVtO1xuICAgICAgICAgICAgdGhpcy51cHNlcnRDb2x1bW5Gcm9tQXR0cmlidXRlRGVmKFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZURlZixcbiAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLnByb3BlcnR5ID09PSBwcm9wZXJ0eSksXG4gICAgICAgICAgICAgICAgZW51bVR5cGUgPz8gKE9iamVjdFNlcmlhbGl6ZXIuZ2V0KCkuZmluZEVudW0oYXR0cmlidXRlRGVmLnR5cGUpIGFzIEVudW1UeXBlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIG1vZGlmaWVzIGNvbHVtbiB3aXRoIGNsYXNzIGFuZCBsb29rdXAgcHJvdmlkZXJcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgY29sdW1uIG5hbWVcbiAgICAgKiBAcGFyYW0gbG9va3VwUHJvdmlkZXIgbG9va3VwUHJvdmlkZXIgZm9yIGNsYXNzXG4gICAgICogQHBhcmFtIGl0ZW1zTGFiZWxQcm9wZXJ0eVxuICAgICAqIEBwYXJhbSBmaWx0ZXJQcm9wZXJ0eVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uTW9kaWZpZWRMb29rdXAocHJvcGVydHk6IHN0cmluZywgbG9va3VwUHJvdmlkZXI6IElMb29rdXBEYXRhUHJvdmlkZXI8YW55LCBhbnk+LCBpdGVtc0xhYmVsUHJvcGVydHk/OiBzdHJpbmcsIGZpbHRlclByb3BlcnR5Pzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgY29sdW1uLndpdGhGaWx0ZXJMb29rdXAoKS53aXRoTG9va3VwRGF0YVByb3ZpZGVyKGxvb2t1cFByb3ZpZGVyKTtcbiAgICAgICAgICAgIGlmIChjb2x1bW4gaW5zdGFuY2VvZiBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1zTGFiZWxQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICAoY29sdW1uIGFzIEZpbHRlckxvb2t1cERlc2NyaXB0b3I8VD4pLndpdGhJdGVtc0xhYmVsUHJvcGVydHkoaXRlbXNMYWJlbFByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgKGNvbHVtbiBhcyBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPFQ+KS53aXRoRmlsdGVyUHJvcGVydHkoZmlsdGVyUHJvcGVydHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjYWxsZWQgb24gZGF0YSByZWNlaXZlZCB0byBjdXN0b21pemUgU3RyaW5nIHByb3BlcnRpZXMgd2l0aCBlaXRoZXIgRGF0YSBvciBOdW1iZXIgdHlwZVxuICAgICAqIEBwYXJhbSBkYXRhIGFwaSByZXNwb25zZVxuICAgICAqL1xuICAgIC8vIHB1YmxpYyBvbkRhdGFSZWNlaXZlZFR5cGVCdWlsZGluZyhkYXRhOiBNZWRpdXNRdWVyeVJlc3VsdDxUPik6IHRoaXMge1xuICAgIC8vICAgICBpZiAoIXRoaXMuX2F1dG9HZW5lcmF0ZWQpIHtcbiAgICAvLyAgICAgICAgIHJldHVybiB0aGlzO1xuICAgIC8vICAgICB9IGVsc2UgaWYgKGRhdGEucGFnZURhdGEgPT0gbnVsbCB8fCBkYXRhLnBhZ2VEYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgLy8gICAgICAgICB0aHJvdyBFcnJvcignUGFnZURhdGEgaXMgZW1wdHksIGNhbm5vdCBnZW5lcmF0ZSBkZXNjcmlwdG9yJyk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgY29uc3Qgb2JqZWN0TW9kZWwgPSBkYXRhLnBhZ2VEYXRhWzBdO1xuICAgIC8vICAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMob2JqZWN0TW9kZWwpO1xuICAgIC8vXG4gICAgLy8gICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGVudHJpZXMpIHtcbiAgICAvLyAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IFRhYmxldmlld1V0aWwuZ2V0QXR0cmlidXRlRGVmTWFwKHRoaXMuX21vZGVsVHlwZSkuZmluZChhID0+IGEubmFtZSA9PT0ga2V5KTtcbiAgICAvLyAgICAgICAgIGlmIChhdHRyaWJ1dGUgJiYgYXR0cmlidXRlLmNvbHVtblR5cGUgPT09IENvbHVtblR5cGVFbnVtLlN0cmluZykge1xuICAgIC8vICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wucHJvcGVydHkgPT09IGF0dHJpYnV0ZS5uYW1lKTtcbiAgICAvL1xuICAgIC8vICAgICAgICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgVGFibGV2aWV3VXRpbC5zdHJpbmdDb2x1bW5Db252ZXJ0ZXIoY29sdW1uLCB2YWx1ZSk7XG4gICAgLy8gICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy9cbiAgICAvLyAgICAgcmV0dXJuIHRoaXM7XG4gICAgLy8gfVxufVxuXG5leHBvcnQgY2xhc3MgVGFibGVEeW5hbWljRGVzY3JpcHRvciBleHRlbmRzIFRhYmxlRGVzY3JpcHRvcjxhbnk+IHtcbiAgICBwcml2YXRlIF9leGNsdWRlZENvbHVtbnM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBwcml2YXRlIF9maWx0ZXJDb2x1bW5zOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgcHJpdmF0ZSBfc29ydENvbHVtbnM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBwcml2YXRlIF9zb3J0Q29sdW1uTW9kZSA9IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5FWENMVURFO1xuICAgIHByaXZhdGUgX2ZpbHRlckNvbHVtbk1vZGUgPSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uRVhDTFVERTtcblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfY29sdW1uczogQ29sdW1uRHluYW1pY0Rlc2NyaXB0b3JbXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoaWRQcm9wZXJ0eT86IHN0cmluZywgdGl0bGVQcm9wZXJ0eT86IHN0cmluZywgaTE4bkJhc2VLZXk/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoe30gYXMgQ2xhc3NUeXBlPGFueT4sIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHksIGkxOG5CYXNlS2V5KTtcblxuICAgICAgICBpZiAodGl0bGVQcm9wZXJ0eSkge1xuICAgICAgICAgICAgdGhpcy53aXRoVGl0bGUodGl0bGVQcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRlZmluZXMgZXhjbHVkZWQgY29sdW1ucyB3aGVuIGdlbmVyYXRpbmcgZGVzY3JpcHRvclxuICAgICAqIEBwYXJhbSBleGNsdWRlZENvbHVtbiBuYW1lcyBvZiBleGNsdWRlZCBjb2x1bW5zXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5zRXhjbHVkZWQoZXhjbHVkZWRDb2x1bW46IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2V4Y2x1ZGVkQ29sdW1ucyA9IGV4Y2x1ZGVkQ29sdW1uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkZWZpbmVzIGNvbHVtbiBwcm9wZXJ0aWVzIG9uIHdoaWNoIHNvcnQgaXMgZGVmaW5lZCBvciBub3QgZGVwZW5kaW5nIG9uIHNvcnRDb2x1bW5Nb2RlXG4gICAgICogQHBhcmFtIHNvcnRPbkNvbHVtbnMgY29sdW1uIG5hbWVzXG4gICAgICogQHBhcmFtIHNvcnRDb2x1bW5Nb2RlIElOQ0xVREVfT05MWSAoZGVmYXVsdCkgb25seSBnaXZlbiBjb2x1bW5zIHdpbGwgaGF2ZSBzb3J0LCBFWENMVURFIGdpdmVuIGNvbHVtbnMgd2lsbCBOT1QgaGF2ZSBzb3J0XG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5zU29ydChzb3J0T25Db2x1bW5zOiBzdHJpbmdbXSwgc29ydENvbHVtbk1vZGUgPSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uSU5DTFVERV9PTkxZKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3NvcnRDb2x1bW5Nb2RlID0gc29ydENvbHVtbk1vZGU7XG4gICAgICAgIHRoaXMuX3NvcnRDb2x1bW5zID0gc29ydE9uQ29sdW1ucztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGVmaW5lcyBjb2x1bW4gcHJvcGVydGllcyBvbiB3aGljaCBmaWx0ZXIgaXMgZGVmaW5lZCBvciBub3QgZGVwZW5kaW5nIG9uIGZpbHRlckNvbHVtbk1vZGVcbiAgICAgKiBAcGFyYW0gZmlsdGVyT25Db2x1bW4gY29sdW1uIG5hbWVzXG4gICAgICogQHBhcmFtIGZpbHRlckNvbHVtbk1vZGUgSU5DTFVERV9PTkxZIChkZWZhdWx0KSBvbmx5IGdpdmVuIGNvbHVtbnMgd2lsbCBoYXZlIGZpbHRlciwgRVhDTFVERSBnaXZlbiBjb2x1bW5zIHdpbGwgTk9UIGhhdmUgZmlsdGVyXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5zRmlsdGVyKGZpbHRlck9uQ29sdW1uOiBzdHJpbmdbXSwgZmlsdGVyQ29sdW1uTW9kZSA9IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5JTkNMVURFX09OTFkpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyQ29sdW1uTW9kZSA9IGZpbHRlckNvbHVtbk1vZGU7XG4gICAgICAgIHRoaXMuX2ZpbHRlckNvbHVtbnMgPSBmaWx0ZXJPbkNvbHVtbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogc2V0cyBnaXZlbiB0eXBlIHRvIGNvbHVtbiB3aXRoIGdpdmVuIHByb3BlcnR5IGFuZCByZXR1cm5zIHRoaXMgdGFibGVcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgY29sdW1uJ3MgcHJvcGVydHlcbiAgICAgKiBAcGFyYW0gdHlwZSBjdXN0b20gdHlwZSBmb3IgY29sdW1uXG4gICAgICogQHBhcmFtIGRpc3BsYXlUeXBlIGN1c3RvbSBjb2x1bW4gdmFsdWUgZGlzcGxheSB0eXBlXG4gICAgICogQHBhcmFtIGFyZ3MgYWRkaXRpb24gYXJndW1lbnRzIGZvciBjb2x1bW5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2l0aENvbHVtbk1vZGlmaWVkVHlwZShwcm9wZXJ0eTogc3RyaW5nLCB0eXBlOiBDb2x1bW5UeXBlRW51bSwgZGlzcGxheVR5cGU/OiBDb2x1bW5EaXNwbGF5VHlwZUVudW0sIC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuX2NvbHVtbnMuZmluZChjb2wgPT4gcHJvcGVydHkgPT09IGNvbC5wcm9wZXJ0eSkgPz8gdGhpcy5hZGRDb2x1bW4ocHJvcGVydHkpLndpdGhUaXRsZShwcm9wZXJ0eSk7XG4gICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgICAgIGNvbHVtbi5hc1R5cGUodHlwZSwgZGlzcGxheVR5cGUsIC4uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldHMgdGl0bGUgdG8gY29sdW1uIHdpdGggZ2l2ZW4gcHJvcGVydHkgYW5kIHJldHVybnMgdGhpcyB0YWJsZVxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBjb2x1bW4ncyBwcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB0aXRsZSBjb2x1bW4ncyB0aXRsZVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uVGl0bGUocHJvcGVydHk6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLl9jb2x1bW5zLmZpbmQoY29sID0+IHByb3BlcnR5ID09PSBjb2wucHJvcGVydHkpID8/IHRoaXMuYWRkQ29sdW1uKHByb3BlcnR5KTtcbiAgICAgICAgY29sdW1uLndpdGhUaXRsZSh0aXRsZSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGdlbmVyYXRlcyBjb2x1bW5zIGRlZmluZWQgb24gdGFibGUgYmFzZWQgb24gZGF0YSBmZXRjaGVkIGZyb20gYXBpXG4gICAgICogQHBhcmFtIGRhdGEgZGF0YSBmcm9tIGFwaVxuICAgICAqL1xuICAgIHB1YmxpYyB0b1RhYmxlRGVzY3JpcHRvckZyb21EYXRhKGRhdGE6IE1lZGl1c1F1ZXJ5UmVzdWx0PGFueT4pOiBUYWJsZURlc2NyaXB0b3I8YW55PiB7XG4gICAgICAgIGNvbnN0IHRhYmxlRGVzY3JpcHRvciA9IHRoaXMudG9UYWJsZURlc2NyaXB0b3IoKTtcblxuICAgICAgICBpZiAoZGF0YS5wYWdlRGF0YSA9PSBudWxsIHx8IGRhdGEucGFnZURhdGEubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0YWJsZURlc2NyaXB0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvYmplY3RNb2RlbCA9IGRhdGEucGFnZURhdGFbMF07XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBUYWJsZXZpZXdVdGlsLmZsYXR0ZW5PYmplY3Qob2JqZWN0TW9kZWwpXG4gICAgICAgICAgICAuZmlsdGVyKChba2V5XSkgPT4gIXRoaXMuX2V4Y2x1ZGVkQ29sdW1ucy5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAgICAgLmZpbHRlcigoWywgdmFsdWVdKSA9PiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpOyAvL2V4Y2x1ZGUgYXJyYXlzIGFuZCBzZXRzXG5cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgZW50cmllcykge1xuICAgICAgICAgICAgY29uc3QgbWV0YUNvbHVtbiA9IHRoaXMuX2NvbHVtbnMuZmluZChjb2wgPT4gY29sLnByb3BlcnR5ID09PSBrZXkpO1xuICAgICAgICAgICAgbGV0IGNvbHVtbjogQ29sdW1uRGVzY3JpcHRvcjxhbnksIGFueT47XG4gICAgICAgICAgICBpZiAobWV0YUNvbHVtbikge1xuICAgICAgICAgICAgICAgIGlmICghbWV0YUNvbHVtbi52aXNpYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb2x1bW4gPSBtZXRhQ29sdW1uLnRvQ29sdW1uRGVzY3JpcHRvcih0YWJsZURlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgIHRhYmxlRGVzY3JpcHRvci5hZGRDb2x1bW5EZXNjcmlwdG9yKGNvbHVtbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IHRhYmxlRGVzY3JpcHRvci5hZGRDb2x1bW4oa2V5KS53aXRoVGl0bGUoa2V5KTtcbiAgICAgICAgICAgICAgICBUYWJsZXZpZXdVdGlsLnN0cmluZ0NvbHVtbkNvbnZlcnRlcihjb2x1bW4sIHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwuaTE4bkJhc2VLZXkgJiYgIWNvbHVtbi5wcm9wZXJ0eS5pbmNsdWRlcygncmV2JykpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4ud2l0aFRpdGxlKFt0aGlzLm1vZGVsLmkxOG5CYXNlS2V5LCAncHJvcGVydGllcycsIGNvbHVtbi5wcm9wZXJ0eV0uam9pbignLicpLnJlcGxhY2UoJ3N0YXRlLicsICcnKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRPZlNvcnRDb2x1bW5zID0gdGhpcy5fc29ydENvbHVtbnMuaW5jbHVkZXMoY29sdW1uLnByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAodGhpcy5fc29ydENvbHVtbk1vZGUgPT09IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5FWENMVURFICYmICFlbGVtZW50T2ZTb3J0Q29sdW1ucykgfHxcbiAgICAgICAgICAgICAgICAodGhpcy5fc29ydENvbHVtbk1vZGUgPT09IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5JTkNMVURFX09OTFkgJiYgZWxlbWVudE9mU29ydENvbHVtbnMpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4ud2l0aFNvcnQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudE9mRmlsdGVyQ29sdW1ucyA9IHRoaXMuX2ZpbHRlckNvbHVtbnMuaW5jbHVkZXMoY29sdW1uLnByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJDb2x1bW5zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAoKHRoaXMuX2ZpbHRlckNvbHVtbk1vZGUgPT09IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5FWENMVURFICYmICFlbGVtZW50T2ZGaWx0ZXJDb2x1bW5zKSB8fFxuICAgICAgICAgICAgICAgICAgICAodGhpcy5fZmlsdGVyQ29sdW1uTW9kZSA9PT0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLklOQ0xVREVfT05MWSAmJiBlbGVtZW50T2ZGaWx0ZXJDb2x1bW5zKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbHVtbi53aXRoRmlsdGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGFibGVEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGFkZHMgQ29sdW1uRHluYW1pY0Rlc2NyaXB0b3IgdG8gdGhpcyB0YWJsZVxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBjb2x1bW4ncyBwcm9wZXJ0eVxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBhZGRDb2x1bW4ocHJvcGVydHk6IHN0cmluZyk6IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yKHRoaXMsIHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHJlbW92ZUNvbHVtbihwcm9wZXJ0eTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wucHJvcGVydHkgPT09IHByb3BlcnR5KSA/PyB0aGlzLmFkZENvbHVtbihwcm9wZXJ0eSk7XG4gICAgICAgIGNvbHVtbi53aXRoVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNyZWF0ZXMgZGVlcCBjb3B5IG9mIHRhYmxlIGR5bmFtaWMgZGVzY3JpcHRvclxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjb3B5KCk6IFRhYmxlRHluYW1pY0Rlc2NyaXB0b3Ige1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IFRhYmxlRHluYW1pY0Rlc2NyaXB0b3IodGhpcy5tb2RlbC5pZFByb3BlcnR5TmFtZSwgdGhpcy5tb2RlbC50aXRsZVByb3BlcnR5TmFtZSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICBkZXNjcmlwdG9yLl9jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjID0+IGMuY29weSgpKTtcbiAgICAgICAgZGVzY3JpcHRvci5fZXhjbHVkZWRDb2x1bW5zID0gWy4uLnRoaXMuX2V4Y2x1ZGVkQ29sdW1uc107XG4gICAgICAgIGRlc2NyaXB0b3IuX2ZpbHRlckNvbHVtbnMgPSBbLi4udGhpcy5fZmlsdGVyQ29sdW1uc107XG4gICAgICAgIGRlc2NyaXB0b3IuX3NvcnRDb2x1bW5zID0gWy4uLnRoaXMuX3NvcnRDb2x1bW5zXTtcbiAgICAgICAgZGVzY3JpcHRvci5fZmlsdGVyQ29sdW1uTW9kZSA9IHRoaXMuX2ZpbHRlckNvbHVtbk1vZGU7XG4gICAgICAgIGRlc2NyaXB0b3IuX3NvcnRDb2x1bW5Nb2RlID0gdGhpcy5fc29ydENvbHVtbk1vZGU7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b1RhYmxlRGVzY3JpcHRvcigpOiBUYWJsZURlc2NyaXB0b3I8YW55PiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgVGFibGVEZXNjcmlwdG9yPGFueT4oe30gYXMgQ2xhc3NUeXBlPGFueT4sIHRoaXMubW9kZWwuaWRQcm9wZXJ0eU5hbWUsIHRoaXMubW9kZWwudGl0bGVQcm9wZXJ0eU5hbWUpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxufVxuIl19
563
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGVzY3JpcHRvcnMvdGFibGUvdGFibGUuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUlqRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBd0IsY0FBYyxFQUFFLDJCQUEyQixFQUFFLHNCQUFzQixFQUEyQixhQUFhLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDNUosT0FBTyxFQUFDLGdCQUFnQixFQUFFLHVCQUF1QixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFOUUsTUFBTSxPQUFPLGVBQWU7SUF5Q3hCLFlBQVksU0FBdUIsRUFBRSxVQUFtQixFQUFFLGFBQXNCLEVBQUUsV0FBeUM7UUFyQ25ILG1CQUFjLEdBQTJCLHNCQUFzQixDQUFDLEdBQUcsQ0FBQztRQUVwRSx3QkFBbUIsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDcEMsb0JBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsYUFBUSxHQUFvQyxFQUFFLENBQUM7UUFFakQsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFHcEIsaUJBQVksR0FBa0IsZUFBZSxDQUFDO1FBRTlDLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLHlCQUFvQixHQUFhLEVBQUUsQ0FBQztRQUNwQyxvQkFBZSxHQUFjLEVBQUUsQ0FBQztRQUV4QyxT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QUM7UUFDdEQsVUFBVSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ2xELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxpQkFBaUI7UUFDcEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxlQUFlLENBQU0sRUFBb0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDM0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge01lZGl1c1F1ZXJ5UmVzdWx0fSBmcm9tICcuLi8uLi9hcGkvbW9kZWxzJztcbmltcG9ydCB7T2JqZWN0U2VyaWFsaXplcn0gZnJvbSAnLi4vLi4vYXBpL3V0aWxzJztcbmltcG9ydCB7SUxvb2t1cERhdGFQcm92aWRlcn0gZnJvbSAnLi4vLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtJQ29sdW1uVmFsdWVDb21wb25lbnQsIFRhYmxldmlld0F0dHJpYnV0ZURlZn0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7Q2xhc3NUeXBlLCBFbnVtVHlwZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtNb2RlbFV0aWx9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7VGFibGV2aWV3VXRpbH0gZnJvbSAnLi4vLi4vdXRpbHMvdGFibGV2aWV3LnV0aWwnO1xuaW1wb3J0IHtGaWx0ZXJMb29rdXBEZXNjcmlwdG9yfSBmcm9tICcuLi9maWx0ZXInO1xuaW1wb3J0IHtNb2RlbERlc2NyaXB0b3J9IGZyb20gJy4uL21vZGVsLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtDb2x1bW5EaXNwbGF5VHlwZUVudW0sIENvbHVtblR5cGVFbnVtLCBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0sIFRhYmxlRmlsdGVyRGlzcGxheUVudW0sIFRhYmxlUGFnaW5hdGlvbk1vZGVFbnVtLCBUYWJsZVNpemVFbnVtfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0NvbHVtbkRlc2NyaXB0b3IsIENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yfSBmcm9tICcuL2NvbHVtbi5kZXNjcmlwdG9yJztcblxuZXhwb3J0IGNsYXNzIFRhYmxlRGVzY3JpcHRvcjxUPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUPjtcbiAgICBwcml2YXRlIF9kYXRhS2V5Pzogc3RyaW5nO1xuICAgIHByaXZhdGUgX21vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+O1xuICAgIHByaXZhdGUgX2ZpbHRlckRpc3BsYXk6IFRhYmxlRmlsdGVyRGlzcGxheUVudW0gPSBUYWJsZUZpbHRlckRpc3BsYXlFbnVtLlJvdztcbiAgICBwcml2YXRlIF9wYWdpbmF0aW9uTW9kZT86IFRhYmxlUGFnaW5hdGlvbk1vZGVFbnVtO1xuICAgIHByaXZhdGUgX3Jvd3NQZXJQYWdlT3B0aW9ucyA9IFsyNSwgNTAsIDEwMF07XG4gICAgcHJpdmF0ZSBfZGVmYXVsdE51bVJvd3MgPSB0aGlzLl9yb3dzUGVyUGFnZU9wdGlvbnNbMF07XG4gICAgcHJvdGVjdGVkIF9jb2x1bW5zOiBBcnJheTxDb2x1bW5EZXNjcmlwdG9yPGFueSwgVD4+ID0gW107XG4gICAgcHJpdmF0ZSBfdGl0bGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfaGlkZUhlYWRlciA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2RhdGFLZXlQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcml2YXRlIF9sb2FkaW5nVGV4dD86IHN0cmluZztcbiAgICBwcml2YXRlIF9sb2FkaW5nSWNvbjogc3RyaW5nIHwgbnVsbCA9ICdwaSBwaS1zcGlubmVyJztcblxuICAgIHByaXZhdGUgX2hhc0RlZmF1bHRTb3J0ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfZGVmYXVsdFNvcnRQcm9wZXJ0eTogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIF9kZWZhdWx0U29ydEFzYzogYm9vbGVhbltdID0gW107XG5cbiAgICAvLyB2aXN1YWxcbiAgICBwcml2YXRlIF9jbGFzc05hbWUgPSAnJztcbiAgICBwcml2YXRlIF9zaXplOiBUYWJsZVNpemVFbnVtID0gVGFibGVTaXplRW51bS5MYXJnZTtcbiAgICBwcml2YXRlIF90YWJsZUZ1bGxIZWlnaHRPZmZzZXQ/OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfcm93SGVpZ2h0PzogbnVtYmVyO1xuICAgIHByaXZhdGUgX2hhc0hvdmVyID0gdHJ1ZTtcbiAgICBwcml2YXRlIF9oYXNHcmlkbGluZXMgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9oYXNSZXNpemFibGVDb2x1bW5zID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfY29sdW1uUmVzaXplTW9kZTogJ2ZpdCcgfCAnZXhwYW5kJyA9ICdleHBhbmQnO1xuXG4gICAgLy8gYWN0aW9uIGNvbHVtblxuICAgIHByaXZhdGUgX2FjdGlvbkNvbHVtbkZyb3plbj86IGJvb2xlYW47XG5cbiAgICBwcml2YXRlIF9oZWFkZXJDbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfcm93Q2xhc3NOYW1lPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3Jvd0NsYXNzTmFtZU1hcEZuPzogKGNsYXNzTmFtZT86IHN0cmluZywgaXRlbT86IFQpID0+IHN0cmluZztcblxuICAgIHByaXZhdGUgX2F1dG9HZW5lcmF0ZWQgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX2lzTG9jYWxpemVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHk/OiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3Rvcihtb2RlbFR5cGU6IENsYXNzVHlwZTxUPiwgaWRQcm9wZXJ0eT86IHN0cmluZywgdGl0bGVQcm9wZXJ0eT86IHN0cmluZywgaTE4bkJhc2VLZXk/OiBzdHJpbmcgfCBDbGFzc1R5cGU8dW5rbm93bj4pIHtcbiAgICAgICAgdGhpcy5fbW9kZWxUeXBlID0gbW9kZWxUeXBlO1xuICAgICAgICB0aGlzLl9tb2RlbCA9IG5ldyBNb2RlbERlc2NyaXB0b3I8VD4obW9kZWxUeXBlLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCBpMThuQmFzZUtleSk7XG4gICAgICAgIHRoaXMuX2RhdGFLZXlQcm9wZXJ0eSA9IGlkUHJvcGVydHkgPz8gTW9kZWxVdGlsLmZpbmRJZEF0dHJpYnV0ZShtb2RlbFR5cGUpID8/IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBnZW5lcmF0ZXMgZGVzY3JpcHRvciBiYXNlZCBvbiBtb2RlbFR5cGUgYXR0cmlidXRlIGRlZmluaXRpb25cbiAgICAgKiBAcGFyYW0gbW9kZWxUeXBlIGNsYXNzIHR5cGVcbiAgICAgKiBAcGFyYW0gaWRQcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB0aXRsZVByb3BlcnR5XG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmcm9tPFQ+KG1vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+LCBpZFByb3BlcnR5Pzogc3RyaW5nLCB0aXRsZVByb3BlcnR5Pzogc3RyaW5nKTogVGFibGVEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgcmV0dXJuIFRhYmxlRGVzY3JpcHRvci5mcm9tTW9kZWxXaXRoQXR0cmlidXRlcyhtb2RlbFR5cGUsIFRhYmxldmlld1V0aWwuZ2V0QXR0cmlidXRlRGVmTWFwKG1vZGVsVHlwZSksIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGdlbmVyYXRlcyBkZXNjcmlwdG9yIGJhc2Ugb24gZ2l2ZW4gYXR0cmlidXRlIGRlZmluaXRpb25cbiAgICAgKiBAcGFyYW0gbW9kZWxUeXBlIGNsYXNzIHR5cGVcbiAgICAgKiBAcGFyYW0gYXR0cmlidXRlcyBhdHRyaWJ1dGVzIGZyb20gd2hpY2ggZGVzY3JpcHRvciBpcyBnZW5lcmF0ZWRcbiAgICAgKiBAcGFyYW0gaWRQcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB0aXRsZVByb3BlcnR5XG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmcm9tTW9kZWxXaXRoQXR0cmlidXRlczxUPihtb2RlbFR5cGU6IENsYXNzVHlwZTxUPiwgYXR0cmlidXRlczogVGFibGV2aWV3QXR0cmlidXRlRGVmW10sIGlkUHJvcGVydHk/OiBzdHJpbmcsIHRpdGxlUHJvcGVydHk/OiBzdHJpbmcpOiBUYWJsZURlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IFRhYmxlRGVzY3JpcHRvcihtb2RlbFR5cGUsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHkpO1xuICAgICAgICBkZXNjcmlwdG9yLl9hdXRvR2VuZXJhdGVkID0gdHJ1ZTtcbiAgICAgICAgYXR0cmlidXRlcy5maWx0ZXIoYXR0ciA9PiAhYXR0ci50eXBlLmluY2x1ZGVzKCdTZXQnKSAmJiAhYXR0ci50eXBlLmluY2x1ZGVzKCdBcnJheScpKS5mb3JFYWNoKGF0dHIgPT4gZGVzY3JpcHRvci51cHNlcnRDb2x1bW5Gcm9tQXR0cmlidXRlRGVmKGF0dHIpKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRhS2V5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YUtleTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpbHRlckRpc3BsYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJEaXNwbGF5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGFnaW5hdGlvbk1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYWdpbmF0aW9uTW9kZTtcbiAgICB9XG5cbiAgICBnZXQgcm93c1BlclBhZ2VPcHRpb25zKCk6IG51bWJlcltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd3NQZXJQYWdlT3B0aW9ucztcbiAgICB9XG5cbiAgICBnZXQgZGVmYXVsdE51bVJvd3MoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHROdW1Sb3dzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpdGxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGlkZUhlYWRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZGVIZWFkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRhS2V5UHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhS2V5UHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2FkaW5nVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRpbmdUZXh0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9hZGluZ0ljb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkaW5nSWNvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc0RlZmF1bHRTb3J0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzRGVmYXVsdFNvcnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkZWZhdWx0U29ydFByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFNvcnRQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRlZmF1bHRTb3J0QXNjKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFNvcnRBc2M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YWJsZUZ1bGxIZWlnaHRPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZUZ1bGxIZWlnaHRPZmZzZXQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dIZWlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dIZWlnaHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNIb3ZlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0hvdmVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzR3JpZGxpbmVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzR3JpZGxpbmVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzUmVzaXphYmxlQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc1Jlc2l6YWJsZUNvbHVtbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2x1bW5SZXNpemVNb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uUmVzaXplTW9kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd0NsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0NsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd0NsYXNzTmFtZU1hcEZuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93Q2xhc3NOYW1lTWFwRm47XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3Rpb25Db2x1bW5Gcm96ZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3Rpb25Db2x1bW5Gcm96ZW47XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoZWFkZXJDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWFkZXJDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc0xvY2FsaXplZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTG9jYWxpemVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkYXRhS2V5IGlzIHVzZWQgZm9yIHRoZSBwdXJwb3NlIG9mIGNvbWJpbmVkIHNhdmluZyB1c2VyIHByZWZlcmVuY2VzIGluIGxvY2Fsc3RvcmFnZSBpZiAyIHRhYmxlcyBoYXZlIHRoZSBzYW1lIGRhdGFLZXkgdGhleSB3aWxsIHNoYXJlIHRoZSBzYW1lIGxvY2Fsc3RvcmFnZSBlbnRyeS5cbiAgICAgKiBTaW1pbGFybHksIHRoaXMgcHJvcGVydHkgY2FuIGFsc28gYmUgdXNlZCB0byBkaWZmZXJlbnRpYXRlIHR3byB0YWJsZXMgb2YgdGhlIHNhbWUgbW9kZWwgb24gdGhlIHNhbWUgdXJsIChzbyB0aGF0IHRoZXkgaGF2ZSBzZXBhcmF0ZSBlbnRyaWVzIGluIGxvY2Fsc3RvcmFnZSkuXG4gICAgICogQHBhcmFtIGRhdGFLZXlcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aERhdGFLZXkoZGF0YUtleT86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9kYXRhS2V5ID0gZGF0YUtleTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbHVtbihwcm9wZXJ0eTogc3RyaW5nKTogQ29sdW1uRGVzY3JpcHRvcjxzdHJpbmcsIFQ+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbnMuZmluZChjb2wgPT4gY29sLnByb3BlcnR5ID09PSBwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbkRlc2NyaXB0b3I8Q1Q+KGNvbHVtbjogQ29sdW1uRGVzY3JpcHRvcjxDVCwgVD4pOiBUYWJsZURlc2NyaXB0b3I8VD4ge1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbihwcm9wZXJ0eTogc3RyaW5nKTogQ29sdW1uRGVzY3JpcHRvcjxzdHJpbmcsIFQ+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8c3RyaW5nLCBUPih0aGlzLCBwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW5OdW1iZXIocHJvcGVydHk6IHN0cmluZywgZGlzcGxheUZvcm1hdD86IHN0cmluZyk6IENvbHVtbkRlc2NyaXB0b3I8bnVtYmVyLCBUPiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IG5ldyBDb2x1bW5EZXNjcmlwdG9yPG51bWJlciwgVD4odGhpcywgcHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4uYXNOdW1iZXIoZGlzcGxheUZvcm1hdCk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW5EYXRlKHByb3BlcnR5OiBzdHJpbmcsIGRpc3BsYXlGb3JtYXQ/OiBzdHJpbmcpOiBDb2x1bW5EZXNjcmlwdG9yPERhdGUsIFQ+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8RGF0ZSwgVD4odGhpcywgcHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4uYXNEYXRlKGRpc3BsYXlGb3JtYXQpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uQm9vbGVhbihwcm9wZXJ0eTogc3RyaW5nLCB5ZXM/OiBzdHJpbmcsIG5vPzogc3RyaW5nLCBhc0ljb24gPSBmYWxzZSk6IENvbHVtbkRlc2NyaXB0b3I8Ym9vbGVhbiwgVD4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxib29sZWFuLCBUPih0aGlzLCBwcm9wZXJ0eSk7XG4gICAgICAgIGNvbHVtbi5hc0Jvb2xlYW4oeWVzLCBubywgYXNJY29uKTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbkVudW0ocHJvcGVydHk6IHN0cmluZywgZW51bVR5cGU6IEVudW1UeXBlLCBuYW1lQXNWYWx1ZSA9IGZhbHNlLCB0aXRsZVBhdGg/OiBzdHJpbmcgfCBudWxsKTogQ29sdW1uRGVzY3JpcHRvcjxFbnVtVHlwZSwgVD4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxFbnVtVHlwZSwgVD4odGhpcywgcHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4uYXNFbnVtKGVudW1UeXBlLCBuYW1lQXNWYWx1ZSwgdGl0bGVQYXRoKTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbkN1c3RvbUNvbXBvbmVudChwcm9wZXJ0eTogc3RyaW5nLCBjdXN0b21Db21wb25lbnRUeXBlOiBUeXBlPElDb2x1bW5WYWx1ZUNvbXBvbmVudDxUPj4pOiBDb2x1bW5EZXNjcmlwdG9yPGFueSwgVD4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxhbnksIFQ+KHRoaXMsIHByb3BlcnR5KTtcbiAgICAgICAgY29sdW1uLmFzQ3VzdG9tQ29tcG9uZW50KGN1c3RvbUNvbXBvbmVudFR5cGUpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlQ29sdW1uKHByb3BlcnR5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29sdW1uZElkeCA9IHRoaXMuX2NvbHVtbnMuZmluZEluZGV4KGMgPT4gYy5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnNwbGljZShjb2x1bW5kSWR4LCAxKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpbHRlckRpc3BsYXkoZmlsdGVyRGlzcGxheVR5cGU6IFRhYmxlRmlsdGVyRGlzcGxheUVudW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyRGlzcGxheSA9IGZpbHRlckRpc3BsYXlUeXBlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFBhZ2luYXRpb25Nb2RlKHBhZ2luYXRpb25Nb2RlOiBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9wYWdpbmF0aW9uTW9kZSA9IHBhZ2luYXRpb25Nb2RlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJvd3NQZXJQYWdlKHJvd3M6IG51bWJlciwgb3B0aW9ucz86IEFycmF5PG51bWJlcj4pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvd3NQZXJQYWdlT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9yb3dzUGVyUGFnZU9wdGlvbnMuaW5jbHVkZXMocm93cykpIHtcbiAgICAgICAgICAgIHRoaXMuX2RlZmF1bHROdW1Sb3dzID0gdGhpcy5fcm93c1BlclBhZ2VPcHRpb25zWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZGVmYXVsdE51bVJvd3MgPSByb3dzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVGl0bGUodGl0bGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSGlkZUhlYWRlcihoaWRlSGVhZGVyID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLl9oaWRlSGVhZGVyID0gaGlkZUhlYWRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEYXRhS2V5UHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9kYXRhS2V5UHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhMb2FkaW5nKHRleHQ/OiBzdHJpbmcsIGljb24/OiBzdHJpbmcgfCBudWxsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xvYWRpbmdUZXh0ID0gdGV4dDtcbiAgICAgICAgdGhpcy5fbG9hZGluZ0ljb24gPSBpY29uID09PSB1bmRlZmluZWQgPyAncGkgcGktc3Bpbm5lcicgOiBpY29uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgbWV0aG9kIHRoYXQgZW5hYmxlcy9kaXNhYmxlcyByZW9yZGVyYWJsZSBwcm9wZXJ0eSBvbiBhbGwgY29sdW1ucyBjdXJyZW50bHkgaW4gdGhlIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGNvbHVtbnNSZW9yZGVyYWJsZTogYm9vbGVhblxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ3VycmVudENvbHVtbnNSZW9yZGVyYWJsZShjb2x1bW5zUmVvcmRlcmFibGUgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICAgY29sLndpdGhSZW9yZGVyYWJsZShjb2x1bW5zUmVvcmRlcmFibGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBtZXRob2QgdGhhdCBlbmFibGVzL2Rpc2FibGVzIHRvZ2dsZWFibGUgcHJvcGVydHkgb24gYWxsIGNvbHVtbnMgY3VycmVudGx5IGluIHRoZSBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBjb2x1bW5zVG9nZ2xlYWJsZTogYm9vbGVhblxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ3VycmVudENvbHVtbnNUb2dnbGVhYmxlKGNvbHVtbnNUb2dnbGVhYmxlID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIGNvbC53aXRoVG9nZ2xlYWJsZShjb2x1bW5zVG9nZ2xlYWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEZWZhdWx0U29ydChwcm9wZXJ0eTogc3RyaW5nLCBhc2MgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc0RlZmF1bHRTb3J0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFNvcnRQcm9wZXJ0eS5wdXNoKHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFNvcnRBc2MucHVzaChhc2MpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU2l6ZShzaXplOiBUYWJsZVNpemVFbnVtID0gVGFibGVTaXplRW51bS5Ob3JtYWwpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fc2l6ZSA9IHNpemU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVGFibGVGdWxsSGVpZ2h0T2Zmc2V0KHRhYmxlRnVsbEhlaWdodE9mZnNldDogbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RhYmxlRnVsbEhlaWdodE9mZnNldCA9IHRhYmxlRnVsbEhlaWdodE9mZnNldDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSb3dIZWlnaHQocm93SGVpZ2h0OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcm93SGVpZ2h0ID0gcm93SGVpZ2h0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEhvdmVyKGhvdmVyOiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc0hvdmVyID0gaG92ZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoR3JpZGxpbmVzKGdyaWRsaW5lczogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNHcmlkbGluZXMgPSBncmlkbGluZXM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB0aGF0IGVuYWJsZXMvZGlzYWJsZWQgY29sdW1uIHJlc2l6ZSBmZWF0dXJlIHdpdGggY29sdW1uUmVzaXplTW9kZSBvbiBhbGwgY29sdW1ucy5cbiAgICAgKiBAcGFyYW0gcmVzaXphYmxlQ29sdW1uczogYm9vbGVhblxuICAgICAqIEBwYXJhbSBjb2x1bW5SZXNpemVNb2RlOiAnZml0JyB8ICdleHBhbmQnID0gJ2ZpdCdcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbnNSZXNpemFibGUocmVzaXphYmxlQ29sdW1ucyA9IHRydWUsIGNvbHVtblJlc2l6ZU1vZGU6ICdmaXQnIHwgJ2V4cGFuZCcgPSAnZml0Jyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNSZXNpemFibGVDb2x1bW5zID0gcmVzaXphYmxlQ29sdW1ucztcbiAgICAgICAgdGhpcy5fY29sdW1uUmVzaXplTW9kZSA9IGNvbHVtblJlc2l6ZU1vZGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQWN0aW9uQ29sdW1uRnJvemVuKGZyb3plbjogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICB0aGlzLl9hY3Rpb25Db2x1bW5Gcm96ZW4gPSBmcm96ZW47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUm93Q2xhc3NOYW1lKHJvd0NsYXNzTmFtZT86IHN0cmluZywgY2xhc3NOYW1lTWFwRm4/OiAoY2xhc3NOYW1lPzogc3RyaW5nLCBpdGVtPzogVCkgPT4gc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3Jvd0NsYXNzTmFtZSA9IHJvd0NsYXNzTmFtZTtcbiAgICAgICAgdGhpcy5fcm93Q2xhc3NOYW1lTWFwRm4gPSBjbGFzc05hbWVNYXBGbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhIZWFkZXJDbGFzc05hbWUoaGVhZGVyQ2xhc3NOYW1lOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGVhZGVyQ2xhc3NOYW1lID0gaGVhZGVyQ2xhc3NOYW1lO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvY2FsaXplZCgpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNMb2NhbGl6ZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5KGxvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNMb2NhbGl6ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eSA9IGxvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29weUZpZWxkc1RvKG9iajogVGFibGVEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIG9iai5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgb2JqLl9oaWRlSGVhZGVyID0gdGhpcy5faGlkZUhlYWRlcjtcbiAgICAgICAgb2JqLl9kYXRhS2V5UHJvcGVydHkgPSB0aGlzLl9kYXRhS2V5UHJvcGVydHk7XG4gICAgICAgIG9iai5faGFzRGVmYXVsdFNvcnQgPSB0aGlzLl9oYXNEZWZhdWx0U29ydDtcbiAgICAgICAgb2JqLl9kZWZhdWx0U29ydFByb3BlcnR5ID0gdGhpcy5fZGVmYXVsdFNvcnRQcm9wZXJ0eS5tYXAocCA9PiBwKTtcbiAgICAgICAgb2JqLl9kZWZhdWx0U29ydEFzYyA9IHRoaXMuX2RlZmF1bHRTb3J0QXNjLm1hcChwID0+IHApO1xuICAgICAgICBvYmouX2ZpbHRlckRpc3BsYXkgPSB0aGlzLl9maWx0ZXJEaXNwbGF5O1xuICAgICAgICBvYmouX2NsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZTtcbiAgICAgICAgb2JqLl9zaXplID0gdGhpcy5fc2l6ZTtcbiAgICAgICAgb2JqLl90YWJsZUZ1bGxIZWlnaHRPZmZzZXQgPSB0aGlzLl90YWJsZUZ1bGxIZWlnaHRPZmZzZXQ7XG4gICAgICAgIG9iai5fcm93SGVpZ2h0ID0gdGhpcy5fcm93SGVpZ2h0O1xuICAgICAgICBvYmouX2hhc0hvdmVyID0gdGhpcy5faGFzSG92ZXI7XG4gICAgICAgIG9iai5faGFzR3JpZGxpbmVzID0gdGhpcy5faGFzR3JpZGxpbmVzO1xuICAgICAgICBvYmouX2hhc1Jlc2l6YWJsZUNvbHVtbnMgPSB0aGlzLl9oYXNSZXNpemFibGVDb2x1bW5zO1xuICAgICAgICBvYmouX2NvbHVtblJlc2l6ZU1vZGUgPSB0aGlzLl9jb2x1bW5SZXNpemVNb2RlO1xuICAgICAgICBvYmouX2FjdGlvbkNvbHVtbkZyb3plbiA9IHRoaXMuX2FjdGlvbkNvbHVtbkZyb3plbjtcbiAgICAgICAgb2JqLl9pc0xvY2FsaXplZCA9IHRoaXMuX2lzTG9jYWxpemVkO1xuICAgICAgICBvYmouX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5ID0gdGhpcy5fbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHk7XG4gICAgICAgIG9iai5fcGFnaW5hdGlvbk1vZGUgPSB0aGlzLl9wYWdpbmF0aW9uTW9kZTtcbiAgICAgICAgb2JqLl9yb3dzUGVyUGFnZU9wdGlvbnMgPSB0aGlzLl9yb3dzUGVyUGFnZU9wdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogVGFibGVEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBUYWJsZURlc2NyaXB0b3IodGhpcy5tb2RlbC50eXBlLCB0aGlzLm1vZGVsLmlkUHJvcGVydHlOYW1lLCB0aGlzLm1vZGVsLnRpdGxlUHJvcGVydHlOYW1lKTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZGVzY3JpcHRvcik7XG4gICAgICAgIGRlc2NyaXB0b3IuX2NvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGMgPT4gYy5jb3B5KCkpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBnZW5lcmF0ZXMgY29sdW1uIGJhc2VkIG9uIGF0dHJpYnV0ZXNcbiAgICAgKiBAcGFyYW0gYXR0cmlidXRlIGF0dHJpYnV0ZSBtYXBcbiAgICAgKiBAcGFyYW0gY29sdW1uIGlmIHByb3ZpZGVkLCByZXBsYWNlZCBieSBuZXcsIG90aGVyd2lzZSBuZXcgaXMgY3JlYXRlZFxuICAgICAqIEBwYXJhbSBhcmdzIGFkZGl0aW9uYWwgcGFyYW1ldGVyc1xuICAgICAqL1xuICAgIHByaXZhdGUgdXBzZXJ0Q29sdW1uRnJvbUF0dHJpYnV0ZURlZihhdHRyaWJ1dGU6IFRhYmxldmlld0F0dHJpYnV0ZURlZiwgY29sdW1uPzogQ29sdW1uRGVzY3JpcHRvcjxzdHJpbmcsIFQ+LCAuLi5hcmdzOiBhbnlbXSk6IENvbHVtbkRlc2NyaXB0b3I8c3RyaW5nLCBUPiB7XG4gICAgICAgIGlmIChjb2x1bW4gPT0gbnVsbCkge1xuICAgICAgICAgICAgY29sdW1uID0gdGhpcy5hZGRDb2x1bW4oYXR0cmlidXRlLm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGF0dHJpYnV0ZS5jb2x1bW5UeXBlID09PSBDb2x1bW5UeXBlRW51bS5FbnVtICYmIGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBhcmdzID0gW2F0dHJpYnV0ZS5lbnVtVHlwZV07XG4gICAgICAgIH1cblxuICAgICAgICBjb2x1bW4gPSBjb2x1bW4uYXNUeXBlKGF0dHJpYnV0ZS5jb2x1bW5UeXBlLCBhdHRyaWJ1dGUuY29sdW1uRGlzcGxheVR5cGUsIC4uLmFyZ3MpO1xuICAgICAgICBpZiAoYXR0cmlidXRlLmNsYXNzVHlwZSkge1xuICAgICAgICAgICAgY29sdW1uLndpdGhPYmplY3RQcm9wZXJ0eShhdHRyaWJ1dGUuY2xhc3NUeXBlKS53aXRoU29ydCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29sdW1uLndpdGhTb3J0KCkud2l0aEZpbHRlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkZWZpbmVzIG1vZGlmaWVkIHR5cGUgb2YgY29sdW1uXG4gICAgICogRE8gTk9UIFVTRSB3aXRoIGVudW0gKHVzZSB3aXRoQ3VzdG9tRW51bVR5cGUpXG4gICAgICogQHBhcmFtIHByb3BlcnR5IGNvbHVtbiBuYW1lXG4gICAgICogQHBhcmFtIGNvbHVtblR5cGUgbW9kaWZpZWQgdHlwZVxuICAgICAqIEBwYXJhbSBhcmdzIGFkZGl0aW9uYWwgYXR0cmlidXRlc1xuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uTW9kaWZpZWRUeXBlKHByb3BlcnR5OiBzdHJpbmcsIGNvbHVtblR5cGU/OiBDb2x1bW5UeXBlRW51bSwgY29sdW1uRGlzcGxheVR5cGU/OiBDb2x1bW5EaXNwbGF5VHlwZUVudW0sIC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZURlZiA9IFRhYmxldmlld1V0aWwuZ2V0QXR0cmlidXRlRGVmTWFwKHRoaXMuX21vZGVsVHlwZSkuZmluZChhdHJpYnV0ZSA9PiBhdHJpYnV0ZS5uYW1lID09PSBwcm9wZXJ0eSk7XG5cbiAgICAgICAgaWYgKGF0dHJpYnV0ZURlZiAhPSBudWxsKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVEZWYuY29sdW1uVHlwZSA9IGNvbHVtblR5cGUgPz8gYXR0cmlidXRlRGVmLmNvbHVtblR5cGU7XG4gICAgICAgICAgICBhdHRyaWJ1dGVEZWYuY29sdW1uRGlzcGxheVR5cGUgPSBjb2x1bW5EaXNwbGF5VHlwZSA/PyBhdHRyaWJ1dGVEZWYuY29sdW1uRGlzcGxheVR5cGU7XG4gICAgICAgICAgICB0aGlzLnVwc2VydENvbHVtbkZyb21BdHRyaWJ1dGVEZWYoXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlRGVmLFxuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wucHJvcGVydHkgPT09IGF0dHJpYnV0ZURlZi5uYW1lKSxcbiAgICAgICAgICAgICAgICAuLi5hcmdzXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGVmaW5lcyBjdXN0b20gZW51bSB0eXBlIGZvciBjb2x1bW5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgY29sdW1uIG5hbWVcbiAgICAgKiBAcGFyYW0gZW51bVR5cGVcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbk1vZGlmaWVkRW51bShwcm9wZXJ0eTogc3RyaW5nLCBlbnVtVHlwZT86IEVudW1UeXBlKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZURlZiA9IFRhYmxldmlld1V0aWwuZ2V0QXR0cmlidXRlRGVmTWFwKHRoaXMuX21vZGVsVHlwZSkuZmluZChhdHJpYnV0ZSA9PiBhdHJpYnV0ZS5uYW1lID09PSBwcm9wZXJ0eSk7XG5cbiAgICAgICAgaWYgKGF0dHJpYnV0ZURlZiAhPSBudWxsKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVEZWYuY29sdW1uVHlwZSA9IENvbHVtblR5cGVFbnVtLkVudW07XG4gICAgICAgICAgICB0aGlzLnVwc2VydENvbHVtbkZyb21BdHRyaWJ1dGVEZWYoXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlRGVmLFxuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wucHJvcGVydHkgPT09IHByb3BlcnR5KSxcbiAgICAgICAgICAgICAgICBlbnVtVHlwZSA/PyAoT2JqZWN0U2VyaWFsaXplci5nZXQoKS5maW5kRW51bShhdHRyaWJ1dGVEZWYudHlwZSkgYXMgRW51bVR5cGUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbW9kaWZpZXMgY29sdW1uIHdpdGggY2xhc3MgYW5kIGxvb2t1cCBwcm92aWRlclxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBjb2x1bW4gbmFtZVxuICAgICAqIEBwYXJhbSBsb29rdXBQcm92aWRlciBsb29rdXBQcm92aWRlciBmb3IgY2xhc3NcbiAgICAgKiBAcGFyYW0gaXRlbXNMYWJlbFByb3BlcnR5XG4gICAgICogQHBhcmFtIGZpbHRlclByb3BlcnR5XG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5Nb2RpZmllZExvb2t1cChwcm9wZXJ0eTogc3RyaW5nLCBsb29rdXBQcm92aWRlcjogSUxvb2t1cERhdGFQcm92aWRlcjxhbnksIGFueT4sIGl0ZW1zTGFiZWxQcm9wZXJ0eT86IHN0cmluZywgZmlsdGVyUHJvcGVydHk/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgICAgICBjb2x1bW4ud2l0aEZpbHRlckxvb2t1cCgpLndpdGhMb29rdXBEYXRhUHJvdmlkZXIobG9va3VwUHJvdmlkZXIpO1xuICAgICAgICAgICAgaWYgKGNvbHVtbiBpbnN0YW5jZW9mIEZpbHRlckxvb2t1cERlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbXNMYWJlbFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgIChjb2x1bW4gYXMgRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxUPikud2l0aEl0ZW1zTGFiZWxQcm9wZXJ0eShpdGVtc0xhYmVsUHJvcGVydHkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICAoY29sdW1uIGFzIEZpbHRlckxvb2t1cERlc2NyaXB0b3I8VD4pLndpdGhGaWx0ZXJQcm9wZXJ0eShmaWx0ZXJQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNhbGxlZCBvbiBkYXRhIHJlY2VpdmVkIHRvIGN1c3RvbWl6ZSBTdHJpbmcgcHJvcGVydGllcyB3aXRoIGVpdGhlciBEYXRhIG9yIE51bWJlciB0eXBlXG4gICAgICogQHBhcmFtIGRhdGEgYXBpIHJlc3BvbnNlXG4gICAgICovXG4gICAgLy8gcHVibGljIG9uRGF0YVJlY2VpdmVkVHlwZUJ1aWxkaW5nKGRhdGE6IE1lZGl1c1F1ZXJ5UmVzdWx0PFQ+KTogdGhpcyB7XG4gICAgLy8gICAgIGlmICghdGhpcy5fYXV0b0dlbmVyYXRlZCkge1xuICAgIC8vICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgLy8gICAgIH0gZWxzZSBpZiAoZGF0YS5wYWdlRGF0YSA9PSBudWxsIHx8IGRhdGEucGFnZURhdGEubGVuZ3RoID09IDApIHtcbiAgICAvLyAgICAgICAgIHRocm93IEVycm9yKCdQYWdlRGF0YSBpcyBlbXB0eSwgY2Fubm90IGdlbmVyYXRlIGRlc2NyaXB0b3InKTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICBjb25zdCBvYmplY3RNb2RlbCA9IGRhdGEucGFnZURhdGFbMF07XG4gICAgLy8gICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhvYmplY3RNb2RlbCk7XG4gICAgLy9cbiAgICAvLyAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgZW50cmllcykge1xuICAgIC8vICAgICAgICAgY29uc3QgYXR0cmlidXRlID0gVGFibGV2aWV3VXRpbC5nZXRBdHRyaWJ1dGVEZWZNYXAodGhpcy5fbW9kZWxUeXBlKS5maW5kKGEgPT4gYS5uYW1lID09PSBrZXkpO1xuICAgIC8vICAgICAgICAgaWYgKGF0dHJpYnV0ZSAmJiBhdHRyaWJ1dGUuY29sdW1uVHlwZSA9PT0gQ29sdW1uVHlwZUVudW0uU3RyaW5nKSB7XG4gICAgLy8gICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5wcm9wZXJ0eSA9PT0gYXR0cmlidXRlLm5hbWUpO1xuICAgIC8vXG4gICAgLy8gICAgICAgICAgICAgaWYgKGNvbHVtbikge1xuICAgIC8vICAgICAgICAgICAgICAgICBUYWJsZXZpZXdVdGlsLnN0cmluZ0NvbHVtbkNvbnZlcnRlcihjb2x1bW4sIHZhbHVlKTtcbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgIH1cbiAgICAvL1xuICAgIC8vICAgICByZXR1cm4gdGhpcztcbiAgICAvLyB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZUR5bmFtaWNEZXNjcmlwdG9yIGV4dGVuZHMgVGFibGVEZXNjcmlwdG9yPGFueT4ge1xuICAgIHByaXZhdGUgX2V4Y2x1ZGVkQ29sdW1uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIHByaXZhdGUgX2ZpbHRlckNvbHVtbnM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBwcml2YXRlIF9zb3J0Q29sdW1uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIHByaXZhdGUgX3NvcnRDb2x1bW5Nb2RlID0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLkVYQ0xVREU7XG4gICAgcHJpdmF0ZSBfZmlsdGVyQ29sdW1uTW9kZSA9IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5FWENMVURFO1xuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIF9jb2x1bW5zOiBDb2x1bW5EeW5hbWljRGVzY3JpcHRvcltdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihpZFByb3BlcnR5Pzogc3RyaW5nLCB0aXRsZVByb3BlcnR5Pzogc3RyaW5nLCBpMThuQmFzZUtleT86IHN0cmluZykge1xuICAgICAgICBzdXBlcih7fSBhcyBDbGFzc1R5cGU8YW55PiwgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSwgaTE4bkJhc2VLZXkpO1xuXG4gICAgICAgIGlmICh0aXRsZVByb3BlcnR5KSB7XG4gICAgICAgICAgICB0aGlzLndpdGhUaXRsZSh0aXRsZVByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgY29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGVmaW5lcyBleGNsdWRlZCBjb2x1bW5zIHdoZW4gZ2VuZXJhdGluZyBkZXNjcmlwdG9yXG4gICAgICogQHBhcmFtIGV4Y2x1ZGVkQ29sdW1uIG5hbWVzIG9mIGV4Y2x1ZGVkIGNvbHVtbnNcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbnNFeGNsdWRlZChleGNsdWRlZENvbHVtbjogc3RyaW5nW10pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZXhjbHVkZWRDb2x1bW5zID0gZXhjbHVkZWRDb2x1bW47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRlZmluZXMgY29sdW1uIHByb3BlcnRpZXMgb24gd2hpY2ggc29ydCBpcyBkZWZpbmVkIG9yIG5vdCBkZXBlbmRpbmcgb24gc29ydENvbHVtbk1vZGVcbiAgICAgKiBAcGFyYW0gc29ydE9uQ29sdW1ucyBjb2x1bW4gbmFtZXNcbiAgICAgKiBAcGFyYW0gc29ydENvbHVtbk1vZGUgSU5DTFVERV9PTkxZIChkZWZhdWx0KSBvbmx5IGdpdmVuIGNvbHVtbnMgd2lsbCBoYXZlIHNvcnQsIEVYQ0xVREUgZ2l2ZW4gY29sdW1ucyB3aWxsIE5PVCBoYXZlIHNvcnRcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbnNTb3J0KHNvcnRPbkNvbHVtbnM6IHN0cmluZ1tdLCBzb3J0Q29sdW1uTW9kZSA9IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5JTkNMVURFX09OTFkpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fc29ydENvbHVtbk1vZGUgPSBzb3J0Q29sdW1uTW9kZTtcbiAgICAgICAgdGhpcy5fc29ydENvbHVtbnMgPSBzb3J0T25Db2x1bW5zO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkZWZpbmVzIGNvbHVtbiBwcm9wZXJ0aWVzIG9uIHdoaWNoIGZpbHRlciBpcyBkZWZpbmVkIG9yIG5vdCBkZXBlbmRpbmcgb24gZmlsdGVyQ29sdW1uTW9kZVxuICAgICAqIEBwYXJhbSBmaWx0ZXJPbkNvbHVtbiBjb2x1bW4gbmFtZXNcbiAgICAgKiBAcGFyYW0gZmlsdGVyQ29sdW1uTW9kZSBJTkNMVURFX09OTFkgKGRlZmF1bHQpIG9ubHkgZ2l2ZW4gY29sdW1ucyB3aWxsIGhhdmUgZmlsdGVyLCBFWENMVURFIGdpdmVuIGNvbHVtbnMgd2lsbCBOT1QgaGF2ZSBmaWx0ZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbnNGaWx0ZXIoZmlsdGVyT25Db2x1bW46IHN0cmluZ1tdLCBmaWx0ZXJDb2x1bW5Nb2RlID0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLklOQ0xVREVfT05MWSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWx0ZXJDb2x1bW5Nb2RlID0gZmlsdGVyQ29sdW1uTW9kZTtcbiAgICAgICAgdGhpcy5fZmlsdGVyQ29sdW1ucyA9IGZpbHRlck9uQ29sdW1uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXRzIGdpdmVuIHR5cGUgdG8gY29sdW1uIHdpdGggZ2l2ZW4gcHJvcGVydHkgYW5kIHJldHVybnMgdGhpcyB0YWJsZVxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBjb2x1bW4ncyBwcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB0eXBlIGN1c3RvbSB0eXBlIGZvciBjb2x1bW5cbiAgICAgKiBAcGFyYW0gZGlzcGxheVR5cGUgY3VzdG9tIGNvbHVtbiB2YWx1ZSBkaXNwbGF5IHR5cGVcbiAgICAgKiBAcGFyYW0gYXJncyBhZGRpdGlvbiBhcmd1bWVudHMgZm9yIGNvbHVtblxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSB3aXRoQ29sdW1uTW9kaWZpZWRUeXBlKHByb3BlcnR5OiBzdHJpbmcsIHR5cGU6IENvbHVtblR5cGVFbnVtLCBkaXNwbGF5VHlwZT86IENvbHVtbkRpc3BsYXlUeXBlRW51bSwgLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5fY29sdW1ucy5maW5kKGNvbCA9PiBwcm9wZXJ0eSA9PT0gY29sLnByb3BlcnR5KSA/PyB0aGlzLmFkZENvbHVtbihwcm9wZXJ0eSkud2l0aFRpdGxlKHByb3BlcnR5KTtcbiAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgY29sdW1uLmFzVHlwZSh0eXBlLCBkaXNwbGF5VHlwZSwgLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogc2V0cyB0aXRsZSB0byBjb2x1bW4gd2l0aCBnaXZlbiBwcm9wZXJ0eSBhbmQgcmV0dXJucyB0aGlzIHRhYmxlXG4gICAgICogQHBhcmFtIHByb3BlcnR5IGNvbHVtbidzIHByb3BlcnR5XG4gICAgICogQHBhcmFtIHRpdGxlIGNvbHVtbidzIHRpdGxlXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5UaXRsZShwcm9wZXJ0eTogc3RyaW5nLCB0aXRsZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuX2NvbHVtbnMuZmluZChjb2wgPT4gcHJvcGVydHkgPT09IGNvbC5wcm9wZXJ0eSkgPz8gdGhpcy5hZGRDb2x1bW4ocHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4ud2l0aFRpdGxlKHRpdGxlLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGVzIGNvbHVtbnMgZGVmaW5lZCBvbiB0YWJsZSBiYXNlZCBvbiBkYXRhIGZldGNoZWQgZnJvbSBhcGlcbiAgICAgKiBAcGFyYW0gZGF0YSBkYXRhIGZyb20gYXBpXG4gICAgICovXG4gICAgcHVibGljIHRvVGFibGVEZXNjcmlwdG9yRnJvbURhdGEoZGF0YTogTWVkaXVzUXVlcnlSZXN1bHQ8YW55Pik6IFRhYmxlRGVzY3JpcHRvcjxhbnk+IHtcbiAgICAgICAgY29uc3QgdGFibGVEZXNjcmlwdG9yID0gdGhpcy50b1RhYmxlRGVzY3JpcHRvcigpO1xuXG4gICAgICAgIGlmIChkYXRhLnBhZ2VEYXRhID09IG51bGwgfHwgZGF0YS5wYWdlRGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhYmxlRGVzY3JpcHRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9iamVjdE1vZGVsID0gZGF0YS5wYWdlRGF0YVswXTtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IFRhYmxldmlld1V0aWwuZmxhdHRlbk9iamVjdChvYmplY3RNb2RlbClcbiAgICAgICAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiAhdGhpcy5fZXhjbHVkZWRDb2x1bW5zLmluY2x1ZGVzKGtleSkpXG4gICAgICAgICAgICAuZmlsdGVyKChbLCB2YWx1ZV0pID0+ICFBcnJheS5pc0FycmF5KHZhbHVlKSk7IC8vZXhjbHVkZSBhcnJheXMgYW5kIHNldHNcblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBtZXRhQ29sdW1uID0gdGhpcy5fY29sdW1ucy5maW5kKGNvbCA9PiBjb2wucHJvcGVydHkgPT09IGtleSk7XG4gICAgICAgICAgICBsZXQgY29sdW1uOiBDb2x1bW5EZXNjcmlwdG9yPGFueSwgYW55PjtcbiAgICAgICAgICAgIGlmIChtZXRhQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFtZXRhQ29sdW1uLnZpc2liaWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbHVtbiA9IG1ldGFDb2x1bW4udG9Db2x1bW5EZXNjcmlwdG9yKHRhYmxlRGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgdGFibGVEZXNjcmlwdG9yLmFkZENvbHVtbkRlc2NyaXB0b3IoY29sdW1uKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29sdW1uID0gdGFibGVEZXNjcmlwdG9yLmFkZENvbHVtbihrZXkpLndpdGhUaXRsZShrZXkpO1xuICAgICAgICAgICAgICAgIFRhYmxldmlld1V0aWwuc3RyaW5nQ29sdW1uQ29udmVydGVyKGNvbHVtbiwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbC5pMThuQmFzZUtleSAmJiAhY29sdW1uLnByb3BlcnR5LmluY2x1ZGVzKCdyZXYnKSkge1xuICAgICAgICAgICAgICAgIGNvbHVtbi53aXRoVGl0bGUoW3RoaXMubW9kZWwuaTE4bkJhc2VLZXksICdwcm9wZXJ0aWVzJywgY29sdW1uLnByb3BlcnR5XS5qb2luKCcuJykucmVwbGFjZSgnc3RhdGUuJywgJycpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudE9mU29ydENvbHVtbnMgPSB0aGlzLl9zb3J0Q29sdW1ucy5pbmNsdWRlcyhjb2x1bW4ucHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICh0aGlzLl9zb3J0Q29sdW1uTW9kZSA9PT0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLkVYQ0xVREUgJiYgIWVsZW1lbnRPZlNvcnRDb2x1bW5zKSB8fFxuICAgICAgICAgICAgICAgICh0aGlzLl9zb3J0Q29sdW1uTW9kZSA9PT0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLklOQ0xVREVfT05MWSAmJiBlbGVtZW50T2ZTb3J0Q29sdW1ucylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbHVtbi53aXRoU29ydCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50T2ZGaWx0ZXJDb2x1bW5zID0gdGhpcy5fZmlsdGVyQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4ucHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlckNvbHVtbnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICgodGhpcy5fZmlsdGVyQ29sdW1uTW9kZSA9PT0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLkVYQ0xVREUgJiYgIWVsZW1lbnRPZkZpbHRlckNvbHVtbnMpIHx8XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLl9maWx0ZXJDb2x1bW5Nb2RlID09PSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uSU5DTFVERV9PTkxZICYmIGVsZW1lbnRPZkZpbHRlckNvbHVtbnMpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uLndpdGhGaWx0ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YWJsZURlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWRkcyBDb2x1bW5EeW5hbWljRGVzY3JpcHRvciB0byB0aGlzIHRhYmxlXG4gICAgICogQHBhcmFtIHByb3BlcnR5IGNvbHVtbidzIHByb3BlcnR5XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGFkZENvbHVtbihwcm9wZXJ0eTogc3RyaW5nKTogQ29sdW1uRHluYW1pY0Rlc2NyaXB0b3Ige1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRHluYW1pY0Rlc2NyaXB0b3IodGhpcywgcHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgcmVtb3ZlQ29sdW1uKHByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpID8/IHRoaXMuYWRkQ29sdW1uKHByb3BlcnR5KTtcbiAgICAgICAgY29sdW1uLndpdGhWaXNpYmlsaXR5KGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY3JlYXRlcyBkZWVwIGNvcHkgb2YgdGFibGUgZHluYW1pYyBkZXNjcmlwdG9yXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGNvcHkoKTogVGFibGVEeW5hbWljRGVzY3JpcHRvciB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgVGFibGVEeW5hbWljRGVzY3JpcHRvcih0aGlzLm1vZGVsLmlkUHJvcGVydHlOYW1lLCB0aGlzLm1vZGVsLnRpdGxlUHJvcGVydHlOYW1lKTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZGVzY3JpcHRvcik7XG4gICAgICAgIGRlc2NyaXB0b3IuX2NvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGMgPT4gYy5jb3B5KCkpO1xuICAgICAgICBkZXNjcmlwdG9yLl9leGNsdWRlZENvbHVtbnMgPSBbLi4udGhpcy5fZXhjbHVkZWRDb2x1bW5zXTtcbiAgICAgICAgZGVzY3JpcHRvci5fZmlsdGVyQ29sdW1ucyA9IFsuLi50aGlzLl9maWx0ZXJDb2x1bW5zXTtcbiAgICAgICAgZGVzY3JpcHRvci5fc29ydENvbHVtbnMgPSBbLi4udGhpcy5fc29ydENvbHVtbnNdO1xuICAgICAgICBkZXNjcmlwdG9yLl9maWx0ZXJDb2x1bW5Nb2RlID0gdGhpcy5fZmlsdGVyQ29sdW1uTW9kZTtcbiAgICAgICAgZGVzY3JpcHRvci5fc29ydENvbHVtbk1vZGUgPSB0aGlzLl9zb3J0Q29sdW1uTW9kZTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHRvVGFibGVEZXNjcmlwdG9yKCk6IFRhYmxlRGVzY3JpcHRvcjxhbnk+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBUYWJsZURlc2NyaXB0b3I8YW55Pih7fSBhcyBDbGFzc1R5cGU8YW55PiwgdGhpcy5tb2RlbC5pZFByb3BlcnR5TmFtZSwgdGhpcy5tb2RlbC50aXRsZVByb3BlcnR5TmFtZSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG59XG4iXX0=
@@ -69,7 +69,7 @@ export class MngLoggerService {
69
69
  }
70
70
  _log(log) {
71
71
  const logConfig = (MngLoggerService._configurationService?.getConfigValue)?.('log');
72
- if ((this.category && log.level < (logConfig?.category?.[this.category]?.level ?? this.defaultLogLevel)) ||
72
+ if ((this.category && log.level < (logConfig?.category?.[this.category]?.level ?? logConfig?.level ?? this.defaultLogLevel)) ||
73
73
  (!this.category && log.level < (logConfig?.level ?? this.defaultLogLevel))) {
74
74
  return;
75
75
  }
@@ -120,4 +120,4 @@ export class MngLoggerService {
120
120
  this._processLog(msg, LogLevelEnum.Error, undefined, data);
121
121
  }
122
122
  }
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFvQixZQUFZLEVBQUUsZ0JBQWdCLEVBQTRCLE1BQU0sV0FBVyxDQUFDO0FBR3ZHLE1BQU0sT0FBTyxnQkFBZ0I7YUFDVixjQUFTLEdBQXFCLElBQUksZ0JBQWdCLEVBQUUsQUFBM0MsQ0FBNEM7YUFDckQsWUFBTyxHQUFHLEtBQUssQUFBUixDQUFTO2FBRWhCLG1CQUFjLEdBQWtCLEVBQUUsQUFBcEIsQ0FBcUI7YUFDbkMsdUJBQWtCLEdBQXFDLEVBQUUsQUFBdkMsQ0FBd0M7YUFDMUQscUJBQWdCLEdBQUcseUJBQXlCLEFBQTVCLENBQTZCO0lBUTVEO1FBSkEsb0VBQW9FO1FBQ25ELG9CQUFlLEdBQWlCLFlBQVksQ0FBQyxJQUFJLENBQUM7UUFDM0QsYUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBR3JDLFFBQVE7SUFDWixDQUFDO0lBRU0sTUFBTSxDQUFDLEdBQUc7UUFDYixPQUFPLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztJQUN0QyxDQUFDO0lBRU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFrQztRQUN0RCxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUU7WUFDeEIsZ0JBQWdCLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQztTQUM5RDtJQUNMLENBQUM7SUFFTSxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUE2QztRQUM1RCxJQUFJLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtZQUMxQixPQUFPO1NBQ1Y7UUFFRCxnQkFBZ0IsQ0FBQyxxQkFBcUIsR0FBRyxvQkFBb0IsQ0FBQztRQUU5RCxn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L1xuaW1wb3J0IHtEYXRlUGlwZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtJTW5nTG9nZ2VyU2VydmljZSwgTG9nTGV2ZWxFbnVtLCBNbmdJbnRlcm5hbEVycm9yLCBNbmdMb2dDb25maWcsIE1uZ0xvZ0VudHJ5fSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuXG5leHBvcnQgY2xhc3MgTW5nTG9nZ2VyU2VydmljZSBpbXBsZW1lbnRzIElNbmdMb2dnZXJTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IE1uZ0xvZ2dlclNlcnZpY2UgPSBuZXcgTW5nTG9nZ2VyU2VydmljZSgpO1xuICAgIHByaXZhdGUgc3RhdGljIF9pc0luaXQgPSBmYWxzZTtcbiAgICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblNlcnZpY2U/OiBNbmdDb25maWd1cmF0aW9uU2VydmljZTtcbiAgICBwcml2YXRlIHN0YXRpYyBfZW50cmllc0J1ZmZlcjogTW5nTG9nRW50cnlbXSA9IFtdO1xuICAgIHByaXZhdGUgc3RhdGljIF9jYXRlZ29yeUluc3RhbmNlczogUmVjb3JkPHN0cmluZywgTW5nTG9nZ2VyU2VydmljZT4gPSB7fTtcbiAgICBwcml2YXRlIHN0YXRpYyBfdGltZXN0YW1wRm9ybWF0ID0gJ3l5eXktTU0tZGQgSEg6bW06c3MuU1NTJztcblxuICAgIHByaXZhdGUgY2F0ZWdvcnk/OiBzdHJpbmc7XG5cbiAgICAvLyBUZW1wb3Jhcnkgc2V0dGluZ3MgdGhhdCBjb3ZlciBsb2dnaW5nIGNhbGxzIGJlZm9yZSBpbml0aWFsaXNhdGlvblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdExvZ0xldmVsOiBMb2dMZXZlbEVudW0gPSBMb2dMZXZlbEVudW0uSW5mbztcbiAgICBwcml2YXRlIGRhdGVQaXBlID0gbmV3IERhdGVQaXBlKCdlbi1VUycpO1xuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLy8gZW1wdHlcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIE1uZ0xvZ2dlclNlcnZpY2UuX2luc3RhbmNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY29uZmlndXJlKGNvbmZpZzoge3RpbWVzdGFtcEZvcm1hdD86IHN0cmluZ30pIHtcbiAgICAgICAgaWYgKGNvbmZpZy50aW1lc3RhbXBGb3JtYXQpIHtcbiAgICAgICAgICAgIE1uZ0xvZ2dlclNlcnZpY2UuX3RpbWVzdGFtcEZvcm1hdCA9IGNvbmZpZy50aW1lc3RhbXBGb3JtYXQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGluaXQoY29uZmlndXJhdGlvblNlcnZpY2U6IE1uZ0NvbmZpZ3VyYXRpb25TZXJ2aWNlKSB7XG4gICAgICAgIGlmIChNbmdMb2dnZXJTZXJ2aWNlLl9pc0luaXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIE1uZ0xvZ2dlclNlcnZpY2UuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlID0gY29uZmlndXJhdGlvblNlcnZpY2U7XG5cbiAgICAgICAgTW5nTG9nZ2VyU2VydmljZS5faXNJbml0ID0gdHJ1ZTtcbiAgICAgICAgTW5nTG9nZ2VyU2VydmljZS5fZmx1c2hCdWZmZXIoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfZmx1c2hCdWZmZXIoKSB7XG4gICAgICAgIE1uZ0xvZ2dlclNlcnZpY2UuX2VudHJpZXNCdWZmZXIuZm9yRWFjaChlID0+IHRoaXMuX2luc3RhbmNlLl9sb2coZSkpO1xuICAgICAgICBNbmdMb2dnZXJTZXJ2aWNlLl9lbnRyaWVzQnVmZmVyID0gW107XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGUoY2F0ZWdvcnk6IHN0cmluZyk6IE1uZ0xvZ2dlclNlcnZpY2Uge1xuICAgICAgICByZXR1cm4gTW5nTG9nZ2VyU2VydmljZS5faW5zdGFuY2UuY3JlYXRlKGNhdGVnb3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlKGNhdGVnb3J5OiBzdHJpbmcpOiBNbmdMb2dnZXJTZXJ2aWNlIHtcbiAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcnkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNbmdJbnRlcm5hbEVycm9yKGBDYW5ub3QgY3JlYXRlIGxvZ2dlciB3aXRoIGNhdGVnb3J5IGluc2lkZSBhbm90aGVyIGNhdGVnb3J5ICgke3RoaXMuY2F0ZWdvcnl9KS4gTXVzdCBjcmVhdGUgbG9nZ2VyIG9uIHJvb3QuYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE1uZ0xvZ2dlclNlcnZpY2UuX2NhdGVnb3J5SW5zdGFuY2VzW2NhdGVnb3J5XSkge1xuICAgICAgICAgICAgcmV0dXJuIE1uZ0xvZ2dlclNlcnZpY2UuX2NhdGVnb3J5SW5zdGFuY2VzW2NhdGVnb3J5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBNbmdMb2dnZXJTZXJ2aWNlKCk7XG4gICAgICAgIGxvZ2dlci5jYXRlZ29yeSA9IGNhdGVnb3J5O1xuXG4gICAgICAgIE1uZ0xvZ2dlclNlcnZpY2UuX2NhdGVnb3J5SW5zdGFuY2VzW2NhdGVnb3J5XSA9IGxvZ2dlcjtcblxuICAgICAgICByZXR1cm4gbG9nZ2VyO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Byb2Nlc3NMb2cobXNnOiBzdHJpbmcsIGxvZ0xldmVsOiBMb2dMZXZlbEVudW0sIGNhdGVnb3J5ID0gdGhpcy5jYXRlZ29yeSwgZGF0YTogYW55W10pIHtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUoKTtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wRm9ybWF0dGVkID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGltZXN0YW1wLCBNbmdMb2dnZXJTZXJ2aWNlLl90aW1lc3RhbXBGb3JtYXQpO1xuICAgICAgICBjb25zdCBsb2cgPSA8TW5nTG9nRW50cnk+e1xuICAgICAgICAgICAgbGV2ZWw6IGxvZ0xldmVsLFxuICAgICAgICAgICAgbWVzc2FnZTogbXNnLFxuICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgIGNhdGVnb3J5OiBjYXRlZ29yeSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLFxuICAgICAgICAgICAgdGltZXN0YW1wRm9ybWF0dGVkOiB0aW1lc3RhbXBGb3JtYXR0ZWQgPz8gdW5kZWZpbmVkXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKCFNbmdMb2dnZXJTZXJ2aWNlLl9pc0luaXQpIHtcbiAgICAgICAgICAgIC8vIGFkZCB0byBidWZmZXJcbiAgICAgICAgICAgIE1uZ0xvZ2dlclNlcnZpY2UuX2VudHJpZXNCdWZmZXIucHVzaChsb2cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbG9nKGxvZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9sb2cobG9nOiBNbmdMb2dFbnRyeSkge1xuICAgICAgICBjb25zdCBsb2dDb25maWcgPSBNbmdMb2dnZXJTZXJ2aWNlLl9jb25maWd1cmF0aW9uU2VydmljZT8uZ2V0Q29uZmlnVmFsdWU8TW5nTG9nQ29uZmlnPj8uKCdsb2cnKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKHRoaXMuY2F0ZWdvcnkgJiYgbG9nLmxldmVsIDwgKGxvZ0NvbmZpZz8uY2F0ZWdvcnk/Llt0aGlzLmNhdGVnb3J5XT8ubGV2ZWwgPz8gdGhpcy5kZWZhdWx0TG9nTGV2ZWwpKSB8fFxuICAgICAgICAgICAgKCF0aGlzLmNhdGVnb3J5ICYmIGxvZy5sZXZlbCA8IChsb2dDb25maWc/LmxldmVsID8/IHRoaXMuZGVmYXVsdExvZ0xldmVsKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobG9nQ29uZmlnPy50aW1lc3RhbXBGb3JtYXQpIHtcbiAgICAgICAgICAgIGxvZy50aW1lc3RhbXBGb3JtYXR0ZWQgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShsb2cudGltZXN0YW1wLCBsb2dDb25maWcudGltZXN0YW1wRm9ybWF0KSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcHJlZml4ID0gYCR7bG9nLnRpbWVzdGFtcEZvcm1hdHRlZH1gO1xuICAgICAgICBpZiAobG9nLmNhdGVnb3J5KSBwcmVmaXggKz0gYCBbJHtsb2cuY2F0ZWdvcnl9XWA7XG4gICAgICAgIHByZWZpeCArPSAnOic7XG5cbiAgICAgICAgc3dpdGNoIChsb2cubGV2ZWwpIHtcbiAgICAgICAgICAgIGNhc2UgTG9nTGV2ZWxFbnVtLlRyYWNlOlxuICAgICAgICAgICAgICAgIGNvbnNvbGUudHJhY2UocHJlZml4LCBsb2cubWVzc2FnZSwgLi4ubG9nLmRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbEVudW0uRGVidWc6XG4gICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhwcmVmaXgsIGxvZy5tZXNzYWdlLCAuLi5sb2cuZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIExvZ0xldmVsRW51bS5Mb2c6XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cocHJlZml4LCBsb2cubWVzc2FnZSwgLi4ubG9nLmRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbEVudW0uSW5mbzpcbiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8ocHJlZml4LCBsb2cubWVzc2FnZSwgLi4ubG9nLmRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbEVudW0uV2FybmluZzpcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4ocHJlZml4LCBsb2cubWVzc2FnZSwgLi4ubG9nLmRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbEVudW0uRXJyb3I6XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihwcmVmaXgsIGxvZy5tZXNzYWdlLCAuLi5sb2cuZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdHJhY2UobXNnOiBzdHJpbmcsIC4uLmRhdGE6IGFueVtdKSB7XG4gICAgICAgIHRoaXMuX3Byb2Nlc3NMb2cobXNnLCBMb2dMZXZlbEVudW0uVHJhY2UsIHVuZGVmaW5lZCwgZGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlYnVnKG1zZzogc3RyaW5nLCAuLi5kYXRhOiBhbnlbXSkge1xuICAgICAgICB0aGlzLl9wcm9jZXNzTG9nKG1zZywgTG9nTGV2ZWxFbnVtLkRlYnVnLCB1bmRlZmluZWQsIGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2cobXNnOiBzdHJpbmcsIGxvZ0xldmVsOiBMb2dMZXZlbEVudW0gPSBMb2dMZXZlbEVudW0uTG9nLCBjYXRlZ29yeTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLCAuLi5kYXRhOiBhbnlbXSkge1xuICAgICAgICB0aGlzLl9wcm9jZXNzTG9nKG1zZywgbG9nTGV2ZWwsIGNhdGVnb3J5LCBkYXRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5mbyhtc2c6IHN0cmluZywgLi4uZGF0YTogYW55W10pIHtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0xvZyhtc2csIExvZ0xldmVsRW51bS5JbmZvLCB1bmRlZmluZWQsIGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3YXJuKG1zZzogc3RyaW5nLCAuLi5kYXRhOiBhbnlbXSkge1xuICAgICAgICB0aGlzLl9wcm9jZXNzTG9nKG1zZywgTG9nTGV2ZWxFbnVtLldhcm5pbmcsIHVuZGVmaW5lZCwgZGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIGVycm9yKG1zZzogc3RyaW5nLCAuLi5kYXRhOiBhbnlbXSkge1xuICAgICAgICB0aGlzLl9wcm9jZXNzTG9nKG1zZywgTG9nTGV2ZWxFbnVtLkVycm9yLCB1bmRlZmluZWQsIGRhdGEpO1xuICAgIH1cbn1cbiJdfQ==
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFvQixZQUFZLEVBQUUsZ0JBQWdCLEVBQTRCLE1BQU0sV0FBVyxDQUFDO0FBR3ZHLE1BQU0sT0FBTyxnQkFBZ0I7YUFDVixjQUFTLEdBQXFCLElBQUksZ0JBQWdCLEVBQUUsQUFBM0MsQ0FBNEM7YUFDckQsWUFBTyxHQUFHLEtBQUssQUFBUixDQUFTO2FBRWhCLG1CQUFjLEdBQWtCLEVBQUUsQUFBcEIsQ0FBcUI7YUFDbkMsdUJBQWtCLEdBQXFDLEVBQUUsQUFBdkMsQ0FBd0M7YUFDMUQscUJBQWdCLEdBQUcseUJBQXlCLEFBQTVCLENBQTZCO0lBUTVEO1FBSkEsb0VBQW9FO1FBQ25ELG9CQUFlLEdBQWlCLFlBQVksQ0FBQyxJQUFJLENBQUM7UUFDM0QsYUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBR3JDLFFBQVE7SUFDWixDQUFDO0lBRU0sTUFBTSxDQUFDLEdBQUc7UUFDYixPQUFPLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztJQUN0QyxDQUFDO0lBRU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFrQztRQUN0RCxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUU7WUFDeEIsZ0JBQWdCLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQztTQUM5RDtJQUNMLENBQUM7SUFFTSxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUE2QztRQUM1RCxJQUFJLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtZQUMxQixPQUFPO1NBQ1Y7UUFFRCxnQkFBZ0IsQ0FBQyxxQkFBcUIsR0FBRyxvQkFBb0IsQ0FBQztRQUU5RCxn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ZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQge0RhdGVQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQge0lNbmdMb2dnZXJTZXJ2aWNlLCBMb2dMZXZlbEVudW0sIE1uZ0ludGVybmFsRXJyb3IsIE1uZ0xvZ0NvbmZpZywgTW5nTG9nRW50cnl9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge01uZ0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5cbmV4cG9ydCBjbGFzcyBNbmdMb2dnZXJTZXJ2aWNlIGltcGxlbWVudHMgSU1uZ0xvZ2dlclNlcnZpY2Uge1xuICAgIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogTW5nTG9nZ2VyU2VydmljZSA9IG5ldyBNbmdMb2dnZXJTZXJ2aWNlKCk7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2lzSW5pdCA9IGZhbHNlO1xuICAgIHByaXZhdGUgc3RhdGljIF9jb25maWd1cmF0aW9uU2VydmljZT86IE1uZ0NvbmZpZ3VyYXRpb25TZXJ2aWNlO1xuICAgIHByaXZhdGUgc3RhdGljIF9lbnRyaWVzQnVmZmVyOiBNbmdMb2dFbnRyeVtdID0gW107XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2NhdGVnb3J5SW5zdGFuY2VzOiBSZWNvcmQ8c3RyaW5nLCBNbmdMb2dnZXJTZXJ2aWNlPiA9IHt9O1xuICAgIHByaXZhdGUgc3RhdGljIF90aW1lc3RhbXBGb3JtYXQgPSAneXl5eS1NTS1kZCBISDptbTpzcy5TU1MnO1xuXG4gICAgcHJpdmF0ZSBjYXRlZ29yeT86IHN0cmluZztcblxuICAgIC8vIFRlbXBvcmFyeSBzZXR0aW5ncyB0aGF0IGNvdmVyIGxvZ2dpbmcgY2FsbHMgYmVmb3JlIGluaXRpYWxpc2F0aW9uXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0TG9nTGV2ZWw6IExvZ0xldmVsRW51bSA9IExvZ0xldmVsRW51bS5JbmZvO1xuICAgIHByaXZhdGUgZGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUoJ2VuLVVTJyk7XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvLyBlbXB0eVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0KCkge1xuICAgICAgICByZXR1cm4gTW5nTG9nZ2VyU2VydmljZS5faW5zdGFuY2U7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjb25maWd1cmUoY29uZmlnOiB7dGltZXN0YW1wRm9ybWF0Pzogc3RyaW5nfSkge1xuICAgICAgICBpZiAoY29uZmlnLnRpbWVzdGFtcEZvcm1hdCkge1xuICAgICAgICAgICAgTW5nTG9nZ2VyU2VydmljZS5fdGltZXN0YW1wRm9ybWF0ID0gY29uZmlnLnRpbWVzdGFtcEZvcm1hdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgaW5pdChjb25maWd1cmF0aW9uU2VydmljZTogTW5nQ29uZmlndXJhdGlvblNlcnZpY2UpIHtcbiAgICAgICAgaWYgKE1uZ0xvZ2dlclNlcnZpY2UuX2lzSW5pdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgTW5nTG9nZ2VyU2VydmljZS5fY29uZmlndXJhdGlvblNlcnZpY2UgPSBjb25maWd1cmF0aW9uU2VydmljZTtcblxuICAgICAgICBNbmdMb2dnZXJTZXJ2aWNlLl9pc0luaXQgPSB0cnVlO1xuICAgICAgICBNbmdMb2dnZXJTZXJ2aWNlLl9mbHVzaEJ1ZmZlcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9mbHVzaEJ1ZmZlcigpIHtcbiAgICAgICAgTW5nTG9nZ2VyU2VydmljZS5fZW50cmllc0J1ZmZlci5mb3JFYWNoKGUgPT4gdGhpcy5faW5zdGFuY2UuX2xvZyhlKSk7XG4gICAgICAgIE1uZ0xvZ2dlclNlcnZpY2UuX2VudHJpZXNCdWZmZXIgPSBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZShjYXRlZ29yeTogc3RyaW5nKTogTW5nTG9nZ2VyU2VydmljZSB7XG4gICAgICAgIHJldHVybiBNbmdMb2dnZXJTZXJ2aWNlLl9pbnN0YW5jZS5jcmVhdGUoY2F0ZWdvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGUoY2F0ZWdvcnk6IHN0cmluZyk6IE1uZ0xvZ2dlclNlcnZpY2Uge1xuICAgICAgICBpZiAodGhpcy5jYXRlZ29yeSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1uZ0ludGVybmFsRXJyb3IoYENhbm5vdCBjcmVhdGUgbG9nZ2VyIHdpdGggY2F0ZWdvcnkgaW5zaWRlIGFub3RoZXIgY2F0ZWdvcnkgKCR7dGhpcy5jYXRlZ29yeX0pLiBNdXN0IGNyZWF0ZSBsb2dnZXIgb24gcm9vdC5gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoTW5nTG9nZ2VyU2VydmljZS5fY2F0ZWdvcnlJbnN0YW5jZXNbY2F0ZWdvcnldKSB7XG4gICAgICAgICAgICByZXR1cm4gTW5nTG9nZ2VyU2VydmljZS5fY2F0ZWdvcnlJbnN0YW5jZXNbY2F0ZWdvcnldO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbG9nZ2VyID0gbmV3IE1uZ0xvZ2dlclNlcnZpY2UoKTtcbiAgICAgICAgbG9nZ2VyLmNhdGVnb3J5ID0gY2F0ZWdvcnk7XG5cbiAgICAgICAgTW5nTG9nZ2VyU2VydmljZS5fY2F0ZWdvcnlJbnN0YW5jZXNbY2F0ZWdvcnldID0gbG9nZ2VyO1xuXG4gICAgICAgIHJldHVybiBsb2dnZXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJvY2Vzc0xvZyhtc2c6IHN0cmluZywgbG9nTGV2ZWw6IExvZ0xldmVsRW51bSwgY2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3J5LCBkYXRhOiBhbnlbXSkge1xuICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBjb25zdCB0aW1lc3RhbXBGb3JtYXR0ZWQgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aW1lc3RhbXAsIE1uZ0xvZ2dlclNlcnZpY2UuX3RpbWVzdGFtcEZvcm1hdCk7XG4gICAgICAgIGNvbnN0IGxvZyA9IDxNbmdMb2dFbnRyeT57XG4gICAgICAgICAgICBsZXZlbDogbG9nTGV2ZWwsXG4gICAgICAgICAgICBtZXNzYWdlOiBtc2csXG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGNhdGVnb3J5LFxuICAgICAgICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICB0aW1lc3RhbXBGb3JtYXR0ZWQ6IHRpbWVzdGFtcEZvcm1hdHRlZCA/PyB1bmRlZmluZWRcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoIU1uZ0xvZ2dlclNlcnZpY2UuX2lzSW5pdCkge1xuICAgICAgICAgICAgLy8gYWRkIHRvIGJ1ZmZlclxuICAgICAgICAgICAgTW5nTG9nZ2VyU2VydmljZS5fZW50cmllc0J1ZmZlci5wdXNoKGxvZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9sb2cobG9nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2xvZyhsb2c6IE1uZ0xvZ0VudHJ5KSB7XG4gICAgICAgIGNvbnN0IGxvZ0NvbmZpZyA9IE1uZ0xvZ2dlclNlcnZpY2UuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlPy5nZXRDb25maWdWYWx1ZTxNbmdMb2dDb25maWc+Py4oJ2xvZycpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAodGhpcy5jYXRlZ29yeSAmJiBsb2cubGV2ZWwgPCAobG9nQ29uZmlnPy5jYXRlZ29yeT8uW3RoaXMuY2F0ZWdvcnldPy5sZXZlbCA/PyBsb2dDb25maWc/LmxldmVsID8/IHRoaXMuZGVmYXVsdExvZ0xldmVsKSkgfHxcbiAgICAgICAgICAgICghdGhpcy5jYXRlZ29yeSAmJiBsb2cubGV2ZWwgPCAobG9nQ29uZmlnPy5sZXZlbCA/PyB0aGlzLmRlZmF1bHRMb2dMZXZlbCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxvZ0NvbmZpZz8udGltZXN0YW1wRm9ybWF0KSB7XG4gICAgICAgICAgICBsb2cudGltZXN0YW1wRm9ybWF0dGVkID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0obG9nLnRpbWVzdGFtcCwgbG9nQ29uZmlnLnRpbWVzdGFtcEZvcm1hdCkgPz8gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByZWZpeCA9IGAke2xvZy50aW1lc3RhbXBGb3JtYXR0ZWR9YDtcbiAgICAgICAgaWYgKGxvZy5jYXRlZ29yeSkgcHJlZml4ICs9IGAgWyR7bG9nLmNhdGVnb3J5fV1gO1xuICAgICAgICBwcmVmaXggKz0gJzonO1xuXG4gICAgICAgIHN3aXRjaCAobG9nLmxldmVsKSB7XG4gICAgICAgICAgICBjYXNlIExvZ0xldmVsRW51bS5UcmFjZTpcbiAgICAgICAgICAgICAgICBjb25zb2xlLnRyYWNlKHByZWZpeCwgbG9nLm1lc3NhZ2UsIC4uLmxvZy5kYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTG9nTGV2ZWxFbnVtLkRlYnVnOlxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcocHJlZml4LCBsb2cubWVzc2FnZSwgLi4ubG9nLmRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbEVudW0uTG9nOlxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHByZWZpeCwgbG9nLm1lc3NhZ2UsIC4uLmxvZy5kYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTG9nTGV2ZWxFbnVtLkluZm86XG4gICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKHByZWZpeCwgbG9nLm1lc3NhZ2UsIC4uLmxvZy5kYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTG9nTGV2ZWxFbnVtLldhcm5pbmc6XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKHByZWZpeCwgbG9nLm1lc3NhZ2UsIC4uLmxvZy5kYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTG9nTGV2ZWxFbnVtLkVycm9yOlxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IocHJlZml4LCBsb2cubWVzc2FnZSwgLi4ubG9nLmRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRyYWNlKG1zZzogc3RyaW5nLCAuLi5kYXRhOiBhbnlbXSkge1xuICAgICAgICB0aGlzLl9wcm9jZXNzTG9nKG1zZywgTG9nTGV2ZWxFbnVtLlRyYWNlLCB1bmRlZmluZWQsIGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWJ1Zyhtc2c6IHN0cmluZywgLi4uZGF0YTogYW55W10pIHtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0xvZyhtc2csIExvZ0xldmVsRW51bS5EZWJ1ZywgdW5kZWZpbmVkLCBkYXRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9nKG1zZzogc3RyaW5nLCBsb2dMZXZlbDogTG9nTGV2ZWxFbnVtID0gTG9nTGV2ZWxFbnVtLkxvZywgY2F0ZWdvcnk6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCwgLi4uZGF0YTogYW55W10pIHtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0xvZyhtc2csIGxvZ0xldmVsLCBjYXRlZ29yeSwgZGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIGluZm8obXNnOiBzdHJpbmcsIC4uLmRhdGE6IGFueVtdKSB7XG4gICAgICAgIHRoaXMuX3Byb2Nlc3NMb2cobXNnLCBMb2dMZXZlbEVudW0uSW5mbywgdW5kZWZpbmVkLCBkYXRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2Fybihtc2c6IHN0cmluZywgLi4uZGF0YTogYW55W10pIHtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0xvZyhtc2csIExvZ0xldmVsRW51bS5XYXJuaW5nLCB1bmRlZmluZWQsIGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlcnJvcihtc2c6IHN0cmluZywgLi4uZGF0YTogYW55W10pIHtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0xvZyhtc2csIExvZ0xldmVsRW51bS5FcnJvciwgdW5kZWZpbmVkLCBkYXRhKTtcbiAgICB9XG59XG4iXX0=
@@ -1,12 +1,15 @@
1
- import { Injectable } from '@angular/core';
1
+ import { Injectable, inject } from '@angular/core';
2
2
  import { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, RouteConfigLoadEnd, RouteConfigLoadStart, Router } from '@angular/router';
3
3
  import { ReplaySubject } from 'rxjs';
4
4
  import { first } from 'rxjs/operators';
5
+ import { MngLoggerService } from './logger.service';
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "@angular/router";
7
8
  export class MngRouterService {
8
9
  constructor(router) {
9
10
  this.router = router;
11
+ this.logger = inject(MngLoggerService).create('MngRouterService');
12
+ this.routesLoadedPropKey = '_loadedRoutes';
10
13
  this.lazyLoadedRoutesConfig = {};
11
14
  }
12
15
  getRouteLoadedChildren(path) {
@@ -38,7 +41,7 @@ export class MngRouterService {
38
41
  }
39
42
  finishNavigation() {
40
43
  if (this.currentNavigationConfigLoaded && this.currentNavigationConfigModule) {
41
- this.getLoadedRoutesFromRoute();
44
+ this.getLoadedRoutesFromRoute(true);
42
45
  }
43
46
  this.currentNavigationPath = undefined;
44
47
  }
@@ -55,23 +58,106 @@ export class MngRouterService {
55
58
  }
56
59
  this.currentNavigationConfigModule = moduleKey;
57
60
  }
61
+ this.logger.trace(`Config load ${isEnd ? 'end' : 'start'} for ${this.currentNavigationConfigModule}`);
58
62
  const config = this.getOrCreateRouteForModule(this.currentNavigationConfigModule);
59
63
  config.route = route;
60
64
  config.isLoadEnd = isEnd;
61
65
  this.getLoadedRoutesFromRoute();
62
66
  }
63
- getLoadedRoutesFromRoute() {
67
+ getLoadedRoutesFromRoute(isFinish = false) {
64
68
  if (!this.currentNavigationConfigModule ||
65
69
  !this.lazyLoadedRoutesConfig[this.currentNavigationConfigModule]?.route ||
66
70
  Array.isArray(this.lazyLoadedRoutesConfig[this.currentNavigationConfigModule].loadedRoutes)) {
67
71
  return;
68
72
  }
69
73
  this.lazyLoadedRoutesConfig[this.currentNavigationConfigModule].loadedRoutes =
70
- this.lazyLoadedRoutesConfig[this.currentNavigationConfigModule].route['_loadedRoutes'];
74
+ this.lazyLoadedRoutesConfig[this.currentNavigationConfigModule].route[this.routesLoadedPropKey];
75
+ if (!Array.isArray(this.lazyLoadedRoutesConfig[this.currentNavigationConfigModule].loadedRoutes) && isFinish) {
76
+ // if is called from finish and no lazy loaded routes are matched from router events, try finding in route config, it should be there!
77
+ this.logger.trace(`Route loadedRoutes for ${this.currentNavigationConfigModule} not found, searching in router config now`);
78
+ const route = this.findRouteInRouteConfig(this.currentNavigationConfigModule);
79
+ if (route) {
80
+ this.lazyLoadedRoutesConfig[this.currentNavigationConfigModule].route = route;
81
+ this.lazyLoadedRoutesConfig[this.currentNavigationConfigModule].loadedRoutes =
82
+ this.lazyLoadedRoutesConfig[this.currentNavigationConfigModule].route[this.routesLoadedPropKey];
83
+ }
84
+ else {
85
+ this.logger.warn(`Route loadedRoutes for ${this.currentNavigationConfigModule} were not found in router config`);
86
+ }
87
+ }
71
88
  if (typeof this.lazyLoadedRoutesConfig[this.currentNavigationConfigModule].loadedRoutes !== 'undefined') {
72
89
  this.lazyLoadedRoutesConfig[this.currentNavigationConfigModule].loadedRoutesSubject.next(this.lazyLoadedRoutesConfig[this.currentNavigationConfigModule].loadedRoutes);
73
90
  this.lazyLoadedRoutesConfig[this.currentNavigationConfigModule].loadedRoutesSubject.complete();
91
+ this.logger.trace(`Config load for ${this.currentNavigationConfigModule} is complete`, this.lazyLoadedRoutesConfig[this.currentNavigationConfigModule]);
92
+ }
93
+ }
94
+ /**
95
+ * Search for route config by module path by recursive scanning of router config tree.
96
+ * @param modulePath Path of module that is searched.
97
+ * @param routes Routes to be scanned. If not provided, it starts on root router config.
98
+ * @private
99
+ */
100
+ findRouteInRouteConfig(modulePath, routes = this.router.config) {
101
+ if (modulePath.startsWith('/')) {
102
+ modulePath = modulePath.substring(1);
103
+ }
104
+ for (const route of routes) {
105
+ if (typeof route.path === 'undefined') {
106
+ continue;
107
+ }
108
+ let routePath = route.path;
109
+ if (routePath.startsWith('/')) {
110
+ routePath = routePath.substring(1);
111
+ }
112
+ const longestPathMatch = this.findLongestPathMatch(modulePath, routePath);
113
+ if (longestPathMatch === null) {
114
+ continue;
115
+ }
116
+ // there is a partial or full match
117
+ if (route.loadChildren && modulePath === longestPathMatch) {
118
+ // it's a hit!
119
+ return route;
120
+ }
121
+ else if (route.loadChildren && Array.isArray(route[this.routesLoadedPropKey])) {
122
+ const result = this.findRouteInRouteConfig(modulePath.substring(longestPathMatch.length, modulePath.length), route[this.routesLoadedPropKey]);
123
+ if (result) {
124
+ return result;
125
+ }
126
+ }
127
+ else if (route.children) {
128
+ const result = this.findRouteInRouteConfig(modulePath.substring(longestPathMatch.length, modulePath.length), route.children);
129
+ if (result) {
130
+ return result;
131
+ }
132
+ }
133
+ }
134
+ return null;
135
+ }
136
+ /**
137
+ * Finds longest path match of source to match string. If match is '', it is considered as a match in Angular routing.
138
+ * @param source Source string from on which comparison is based.
139
+ * @param match Match string to which the source is matched to.
140
+ * @private
141
+ */
142
+ findLongestPathMatch(source, match) {
143
+ const sourceSegments = source.split('/');
144
+ const matchSegments = match.split('/');
145
+ if (matchSegments.length === 1 && matchSegments[0] === '') {
146
+ // it's a hit, because empty route must always be processed (kind of a "abstract" route)
147
+ return '';
148
+ }
149
+ if (sourceSegments[0] === matchSegments[0]) {
150
+ // there is a match, find how long it is
151
+ for (let i = 1; i < sourceSegments.length; i++) {
152
+ if (sourceSegments[i] !== matchSegments[i]) {
153
+ // end of match
154
+ return sourceSegments.slice(0, i).join('/');
155
+ }
156
+ }
157
+ // there is full match
158
+ return sourceSegments.join('/');
74
159
  }
160
+ return null;
75
161
  }
76
162
  getOrCreateRouteForModule(moduleKey) {
77
163
  if (!this.lazyLoadedRoutesConfig[moduleKey]) {
@@ -94,4 +180,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
94
180
  providedIn: 'root'
95
181
  }]
96
182
  }], ctorParameters: function () { return [{ type: i1.Router }]; } });
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL3JvdXRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFTLGtCQUFrQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBUyxNQUFNLGlCQUFpQixDQUFDO0FBRW5LLE9BQU8sRUFBYSxhQUFhLEVBQVUsTUFBTSxNQUFNLENBQUM7QUFDeEQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7QUFLckMsTUFBTSxPQUFPLGdCQUFnQjtJQWN6QixZQUFvQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQVQxQiwyQkFBc0IsR0FPMUIsRUFBRSxDQUFDO0lBRThCLENBQUM7SUFFL0Isc0JBQXNCLENBQUMsSUFBNEI7UUFDdEQsT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQy9GLENBQUM7SUFFTSx1QkFBdUIsQ0FBQyxJQUE0QjtRQUN2RCxPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNuSSxDQUFDO0lBRU0sVUFBVTtRQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQyxJQUFJLEtBQUssWUFBWSxlQUFlLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxD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QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05hdmlnYXRpb25DYW5jZWwsIE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25FcnJvciwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZSwgUm91dGVDb25maWdMb2FkRW5kLCBSb3V0ZUNvbmZpZ0xvYWRTdGFydCwgUm91dGVyLCBSb3V0ZXN9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7T2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpcnN0fSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTW5nUm91dGVyU2VydmljZSB7XG4gICAgcHJpdmF0ZSBjdXJyZW50TmF2aWdhdGlvblBhdGg/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBjdXJyZW50TmF2aWdhdGlvbkNvbmZpZ01vZHVsZT86IHN0cmluZztcbiAgICBwcml2YXRlIGN1cnJlbnROYXZpZ2F0aW9uQ29uZmlnTG9hZGVkPzogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgbGF6eUxvYWRlZFJvdXRlc0NvbmZpZzoge1xuICAgICAgICBbcGF0aDogc3RyaW5nXToge1xuICAgICAgICAgICAgcm91dGU/OiBSb3V0ZTtcbiAgICAgICAgICAgIGlzTG9hZEVuZDogYm9vbGVhbjtcbiAgICAgICAgICAgIGxvYWRlZFJvdXRlcz86IFJvdXRlcztcbiAgICAgICAgICAgIGxvYWRlZFJvdXRlc1N1YmplY3Q6IFN1YmplY3Q8Um91dGVzPjtcbiAgICAgICAgfTtcbiAgICB9ID0ge307XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyKSB7fVxuXG4gICAgcHVibGljIGdldFJvdXRlTG9hZGVkQ2hpbGRyZW4ocGF0aDogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPik6IFJvdXRlcyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9yQ3JlYXRlUm91dGVGb3JNb2R1bGUodGhpcy5nZXRNb2R1bGVQYXRoRnJvbVJvdXRlckxpbmsocGF0aCkpLmxvYWRlZFJvdXRlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Um91dGVMb2FkZWRDaGlsZHJlbiQocGF0aDogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPik6IE9ic2VydmFibGU8Um91dGVzPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9yQ3JlYXRlUm91dGVGb3JNb2R1bGUodGhpcy5nZXRNb2R1bGVQYXRoRnJvbVJvdXRlckxpbmsocGF0aCkpLmxvYWRlZFJvdXRlc1N1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShmaXJzdCgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0TmF2aWdhdGlvbihldmVudC51cmwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIFJvdXRlQ29uZmlnTG9hZFN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXJrTmF2aWdhdGlvbkNvbmZpZ0xvYWQoZXZlbnQucm91dGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIFJvdXRlQ29uZmlnTG9hZEVuZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFya05hdmlnYXRpb25Db25maWdMb2FkKGV2ZW50LnJvdXRlLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kIHx8IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkNhbmNlbCB8fCBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0TmF2aWdhdGlvbih1cmw6IHN0cmluZykge1xuICAgICAgICB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uUGF0aCA9IHVybC5zcGxpdCgnPycpWzBdLnNwbGl0KCcjJylbMF07XG4gICAgICAgIHRoaXMuY3VycmVudE5hdmlnYXRpb25Db25maWdNb2R1bGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuY3VycmVudE5hdmlnYXRpb25Db25maWdMb2FkZWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5pc2hOYXZpZ2F0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50TmF2aWdhdGlvbkNvbmZpZ0xvYWRlZCAmJiB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uQ29uZmlnTW9kdWxlKSB7XG4gICAgICAgICAgICB0aGlzLmdldExvYWRlZFJvdXRlc0Zyb21Sb3V0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudE5hdmlnYXRpb25QYXRoID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFya05hdmlnYXRpb25Db25maWdMb2FkKHJvdXRlOiBSb3V0ZSwgaXNFbmQgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uQ29uZmlnTG9hZGVkID0gaXNFbmQ7XG4gICAgICAgIGxldCByb3V0ZVBhdGggPSByb3V0ZS5wYXRoID8/ICcnO1xuICAgICAgICBpZiAoIXJvdXRlUGF0aC5zdGFydHNXaXRoKCcvJykpIHJvdXRlUGF0aCA9IGAvJHtyb3V0ZVBhdGh9YDtcblxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudE5hdmlnYXRpb25Db25maWdNb2R1bGUpIHtcbiAgICAgICAgICAgIGxldCBtb2R1bGVLZXkgPSByb3V0ZVBhdGg7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TmF2aWdhdGlvblBhdGhSb3V0ZVBhdGhJZHggPSB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uUGF0aD8uaW5kZXhPZihyb3V0ZVBhdGgpID8/IC0xO1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudE5hdmlnYXRpb25QYXRoICYmIGN1cnJlbnROYXZpZ2F0aW9uUGF0aFJvdXRlUGF0aElkeCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgbW9kdWxlS2V5ID0gdGhpcy5jdXJyZW50TmF2aWdhdGlvblBhdGguc3Vic3RyaW5nKDAsIGN1cnJlbnROYXZpZ2F0aW9uUGF0aFJvdXRlUGF0aElkeCArIHJvdXRlUGF0aC5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jdXJyZW50TmF2aWdhdGlvbkNvbmZpZ01vZHVsZSA9IG1vZHVsZUtleTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0T3JDcmVhdGVSb3V0ZUZvck1vZHVsZSh0aGlzLmN1cnJlbnROYXZpZ2F0aW9uQ29uZmlnTW9kdWxlKTtcbiAgICAgICAgY29uZmlnLnJvdXRlID0gcm91dGU7XG4gICAgICAgIGNvbmZpZy5pc0xvYWRFbmQgPSBpc0VuZDtcbiAgICAgICAgdGhpcy5nZXRMb2FkZWRSb3V0ZXNGcm9tUm91dGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldExvYWRlZFJvdXRlc0Zyb21Sb3V0ZSgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuY3VycmVudE5hdmlnYXRpb25Db25maWdNb2R1bGUgfHxcbiAgICAgICAgICAgICF0aGlzLmxhenlMb2FkZWRSb3V0ZXNDb25maWdbdGhpcy5jdXJyZW50TmF2aWdhdGlvbkNvbmZpZ01vZHVsZV0/LnJvdXRlIHx8XG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KHRoaXMubGF6eUxvYWRlZFJvdXRlc0NvbmZpZ1t0aGlzLmN1cnJlbnROYXZpZ2F0aW9uQ29uZmlnTW9kdWxlXS5sb2FkZWRSb3V0ZXMpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sYXp5TG9hZGVkUm91dGVzQ29uZmlnW3RoaXMuY3VycmVudE5hdmlnYXRpb25Db25maWdNb2R1bGVdLmxvYWRlZFJvdXRlcyA9XG4gICAgICAgICAgICB0aGlzLmxhenlMb2FkZWRSb3V0ZXNDb25maWdbdGhpcy5jdXJyZW50TmF2aWdhdGlvbkNvbmZpZ01vZHVsZV0ucm91dGUhWydfbG9hZGVkUm91dGVzJyBhcyBrZXlvZiBvYmplY3RdO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5sYXp5TG9hZGVkUm91dGVzQ29uZmlnW3RoaXMuY3VycmVudE5hdmlnYXRpb25Db25maWdNb2R1bGVdLmxvYWRlZFJvdXRlcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMubGF6eUxvYWRlZFJvdXRlc0NvbmZpZ1t0aGlzLmN1cnJlbnROYXZpZ2F0aW9uQ29uZmlnTW9kdWxlXS5sb2FkZWRSb3V0ZXNTdWJqZWN0Lm5leHQodGhpcy5sYXp5TG9hZGVkUm91dGVzQ29uZmlnW3RoaXMuY3VycmVudE5hdmlnYXRpb25Db25maWdNb2R1bGVdLmxvYWRlZFJvdXRlcyEpO1xuICAgICAgICAgICAgdGhpcy5sYXp5TG9hZGVkUm91dGVzQ29uZmlnW3RoaXMuY3VycmVudE5hdmlnYXRpb25Db25maWdNb2R1bGVdLmxvYWRlZFJvdXRlc1N1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3JDcmVhdGVSb3V0ZUZvck1vZHVsZShtb2R1bGVLZXk6IHN0cmluZykge1xuICAgICAgICBpZiAoIXRoaXMubGF6eUxvYWRlZFJvdXRlc0NvbmZpZ1ttb2R1bGVLZXldKSB7XG4gICAgICAgICAgICB0aGlzLmxhenlMb2FkZWRSb3V0ZXNDb25maWdbbW9kdWxlS2V5XSA9IHtcbiAgICAgICAgICAgICAgICBsb2FkZWRSb3V0ZXNTdWJqZWN0OiBuZXcgUmVwbGF5U3ViamVjdDxSb3V0ZXM+KDEpLFxuICAgICAgICAgICAgICAgIGlzTG9hZEVuZDogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5sYXp5TG9hZGVkUm91dGVzQ29uZmlnW21vZHVsZUtleV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNb2R1bGVQYXRoRnJvbVJvdXRlckxpbmsocGF0aDogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPikge1xuICAgICAgICByZXR1cm4gKCcvJyArIChBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aC5qb2luKCcvJykgOiBwYXRoKSkucmVwbGFjZSgvXFwvXFwvL2csICcvJyk7XG4gICAgfVxufVxuIl19
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL3JvdXRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBUyxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUVuSyxPQUFPLEVBQWEsYUFBYSxFQUFVLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBS2xELE1BQU0sT0FBTyxnQkFBZ0I7SUFpQnpCLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBaEJqQixXQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDN0Qsd0JBQW1CLEdBQUcsZUFBZSxDQUFDO1FBTS9DLDJCQUFzQixHQU8xQixFQUFFLENBQUM7SUFFOEIsQ0FBQztJQUUvQixzQkFBc0IsQ0FBQyxJQUE0QjtRQUN0RCxPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDL0YsQ0FBQztJQUVNLHVCQUF1QixDQUFDLElBQTRCO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUs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LElBQTRCO1FBQzVELE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkYsQ0FBQzs4R0F0TVEsZ0JBQWdCO2tIQUFoQixnQkFBZ0IsY0FGYixNQUFNOzsyRkFFVCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOYXZpZ2F0aW9uQ2FuY2VsLCBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uRXJyb3IsIE5hdmlnYXRpb25TdGFydCwgUm91dGUsIFJvdXRlQ29uZmlnTG9hZEVuZCwgUm91dGVDb25maWdMb2FkU3RhcnQsIFJvdXRlciwgUm91dGVzfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge09ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaXJzdH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge01uZ0xvZ2dlclNlcnZpY2V9IGZyb20gJy4vbG9nZ2VyLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE1uZ1JvdXRlclNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gaW5qZWN0KE1uZ0xvZ2dlclNlcnZpY2UpLmNyZWF0ZSgnTW5nUm91dGVyU2VydmljZScpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVzTG9hZGVkUHJvcEtleSA9ICdfbG9hZGVkUm91dGVzJztcblxuICAgIHByaXZhdGUgY3VycmVudE5hdmlnYXRpb25QYXRoPzogc3RyaW5nO1xuICAgIHByaXZhdGUgY3VycmVudE5hdmlnYXRpb25Db25maWdNb2R1bGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBjdXJyZW50TmF2aWdhdGlvbkNvbmZpZ0xvYWRlZD86IGJvb2xlYW47XG5cbiAgICBwcml2YXRlIGxhenlMb2FkZWRSb3V0ZXNDb25maWc6IHtcbiAgICAgICAgW3BhdGg6IHN0cmluZ106IHtcbiAgICAgICAgICAgIHJvdXRlPzogUm91dGU7XG4gICAgICAgICAgICBpc0xvYWRFbmQ6IGJvb2xlYW47XG4gICAgICAgICAgICBsb2FkZWRSb3V0ZXM/OiBSb3V0ZXM7XG4gICAgICAgICAgICBsb2FkZWRSb3V0ZXNTdWJqZWN0OiBTdWJqZWN0PFJvdXRlcz47XG4gICAgICAgIH07XG4gICAgfSA9IHt9O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge31cblxuICAgIHB1YmxpYyBnZXRSb3V0ZUxvYWRlZENoaWxkcmVuKHBhdGg6IHN0cmluZyB8IEFycmF5PHN0cmluZz4pOiBSb3V0ZXMgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRPckNyZWF0ZVJvdXRlRm9yTW9kdWxlKHRoaXMuZ2V0TW9kdWxlUGF0aEZyb21Sb3V0ZXJMaW5rKHBhdGgpKS5sb2FkZWRSb3V0ZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJvdXRlTG9hZGVkQ2hpbGRyZW4kKHBhdGg6IHN0cmluZyB8IEFycmF5PHN0cmluZz4pOiBPYnNlcnZhYmxlPFJvdXRlcz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRPckNyZWF0ZVJvdXRlRm9yTW9kdWxlKHRoaXMuZ2V0TW9kdWxlUGF0aEZyb21Sb3V0ZXJMaW5rKHBhdGgpKS5sb2FkZWRSb3V0ZXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZmlyc3QoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGluaXRpYWxpemUoKSB7XG4gICAgICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydE5hdmlnYXRpb24oZXZlbnQudXJsKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBSb3V0ZUNvbmZpZ0xvYWRTdGFydCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFya05hdmlnYXRpb25Db25maWdMb2FkKGV2ZW50LnJvdXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBSb3V0ZUNvbmZpZ0xvYWRFbmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hcmtOYXZpZ2F0aW9uQ29uZmlnTG9hZChldmVudC5yb3V0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCB8fCBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25DYW5jZWwgfHwgZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbmlzaE5hdmlnYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGFydE5hdmlnYXRpb24odXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50TmF2aWdhdGlvblBhdGggPSB1cmwuc3BsaXQoJz8nKVswXS5zcGxpdCgnIycpWzBdO1xuICAgICAgICB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uQ29uZmlnTW9kdWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uQ29uZmlnTG9hZGVkID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluaXNoTmF2aWdhdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudE5hdmlnYXRpb25Db25maWdMb2FkZWQgJiYgdGhpcy5jdXJyZW50TmF2aWdhdGlvbkNvbmZpZ01vZHVsZSkge1xuICAgICAgICAgICAgdGhpcy5nZXRMb2FkZWRSb3V0ZXNGcm9tUm91dGUodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50TmF2aWdhdGlvblBhdGggPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXJrTmF2aWdhdGlvbkNvbmZpZ0xvYWQocm91dGU6IFJvdXRlLCBpc0VuZCA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudE5hdmlnYXRpb25Db25maWdMb2FkZWQgPSBpc0VuZDtcbiAgICAgICAgbGV0IHJvdXRlUGF0aCA9IHJvdXRlLnBhdGggPz8gJyc7XG4gICAgICAgIGlmICghcm91dGVQYXRoLnN0YXJ0c1dpdGgoJy8nKSkgcm91dGVQYXRoID0gYC8ke3JvdXRlUGF0aH1gO1xuXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50TmF2aWdhdGlvbkNvbmZpZ01vZHVsZSkge1xuICAgICAgICAgICAgbGV0IG1vZHVsZUtleSA9IHJvdXRlUGF0aDtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnROYXZpZ2F0aW9uUGF0aFJvdXRlUGF0aElkeCA9IHRoaXMuY3VycmVudE5hdmlnYXRpb25QYXRoPy5pbmRleE9mKHJvdXRlUGF0aCkgPz8gLTE7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50TmF2aWdhdGlvblBhdGggJiYgY3VycmVudE5hdmlnYXRpb25QYXRoUm91dGVQYXRoSWR4ID49IDApIHtcbiAgICAgICAgICAgICAgICBtb2R1bGVLZXkgPSB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uUGF0aC5zdWJzdHJpbmcoMCwgY3VycmVudE5hdmlnYXRpb25QYXRoUm91dGVQYXRoSWR4ICsgcm91dGVQYXRoLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnROYXZpZ2F0aW9uQ29uZmlnTW9kdWxlID0gbW9kdWxlS2V5O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYENvbmZpZyBsb2FkICR7aXNFbmQgPyAnZW5kJyA6ICdzdGFydCd9IGZvciAke3RoaXMuY3VycmVudE5hdmlnYXRpb25Db25maWdNb2R1bGV9YCk7XG5cbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5nZXRPckNyZWF0ZVJvdXRlRm9yTW9kdWxlKHRoaXMuY3VycmVudE5hdmlnYXRpb25Db25maWdNb2R1bGUpO1xuICAgICAgICBjb25maWcucm91dGUgPSByb3V0ZTtcbiAgICAgICAgY29uZmlnLmlzTG9hZEVuZCA9IGlzRW5kO1xuICAgICAgICB0aGlzLmdldExvYWRlZFJvdXRlc0Zyb21Sb3V0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TG9hZGVkUm91dGVzRnJvbVJvdXRlKGlzRmluaXNoID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuY3VycmVudE5hdmlnYXRpb25Db25maWdNb2R1bGUgfHxcbiAgICAgICAgICAgICF0aGlzLmxhenlMb2FkZWRSb3V0ZXNDb25maWdbdGhpcy5jdXJyZW50TmF2aWdhdGlvbkNvbmZpZ01vZHVsZV0/LnJvdXRlIHx8XG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KHRoaXMubGF6eUxvYWRlZFJvdXRlc0NvbmZpZ1t0aGlzLmN1cnJlbnROYXZpZ2F0aW9uQ29uZmlnTW9kdWxlXS5sb2FkZWRSb3V0ZXMpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sYXp5TG9hZGVkUm91dGVzQ29uZmlnW3RoaXMuY3VycmVudE5hdmlnYXRpb25Db25maWdNb2R1bGVdLmxvYWRlZFJvdXRlcyA9XG4gICAgICAgICAgICB0aGlzLmxhenlMb2FkZWRSb3V0ZXNDb25maWdbdGhpcy5jdXJyZW50TmF2aWdhdGlvbkNvbmZpZ01vZHVsZV0ucm91dGUhW3RoaXMucm91dGVzTG9hZGVkUHJvcEtleSBhcyBrZXlvZiBvYmplY3RdO1xuXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLmxhenlMb2FkZWRSb3V0ZXNDb25maWdbdGhpcy5jdXJyZW50TmF2aWdhdGlvbkNvbmZpZ01vZHVsZV0ubG9hZGVkUm91dGVzKSAmJiBpc0ZpbmlzaCkge1xuICAgICAgICAgICAgLy8gaWYgaXMgY2FsbGVkIGZyb20gZmluaXNoIGFuZCBubyBsYXp5IGxvYWRlZCByb3V0ZXMgYXJlIG1hdGNoZWQgZnJvbSByb3V0ZXIgZXZlbnRzLCB0cnkgZmluZGluZyBpbiByb3V0ZSBjb25maWcsIGl0IHNob3VsZCBiZSB0aGVyZSFcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKGBSb3V0ZSBsb2FkZWRSb3V0ZXMgZm9yICR7dGhpcy5jdXJyZW50TmF2aWdhdGlvbkNvbmZpZ01vZHVsZX0gbm90IGZvdW5kLCBzZWFyY2hpbmcgaW4gcm91dGVyIGNvbmZpZyBub3dgKTtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlID0gdGhpcy5maW5kUm91dGVJblJvdXRlQ29uZmlnKHRoaXMuY3VycmVudE5hdmlnYXRpb25Db25maWdNb2R1bGUpO1xuICAgICAgICAgICAgaWYgKHJvdXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXp5TG9hZGVkUm91dGVzQ29uZmlnW3RoaXMuY3VycmVudE5hdmlnYXRpb25Db25maWdNb2R1bGVdLnJvdXRlID0gcm91dGU7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXp5TG9hZGVkUm91dGVzQ29uZmlnW3RoaXMuY3VycmVudE5hdmlnYXRpb25Db25maWdNb2R1bGVdLmxvYWRlZFJvdXRlcyA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGF6eUxvYWRlZFJvdXRlc0NvbmZpZ1t0aGlzLmN1cnJlbnROYXZpZ2F0aW9uQ29uZmlnTW9kdWxlXS5yb3V0ZSFbdGhpcy5yb3V0ZXNMb2FkZWRQcm9wS2V5IGFzIGtleW9mIG9iamVjdF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYFJvdXRlIGxvYWRlZFJvdXRlcyBmb3IgJHt0aGlzLmN1cnJlbnROYXZpZ2F0aW9uQ29uZmlnTW9kdWxlfSB3ZXJlIG5vdCBmb3VuZCBpbiByb3V0ZXIgY29uZmlnYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubGF6eUxvYWRlZFJvdXRlc0NvbmZpZ1t0aGlzLmN1cnJlbnROYXZpZ2F0aW9uQ29uZmlnTW9kdWxlXS5sb2FkZWRSb3V0ZXMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLmxhenlMb2FkZWRSb3V0ZXNDb25maWdbdGhpcy5jdXJyZW50TmF2aWdhdGlvbkNvbmZpZ01vZHVsZV0ubG9hZGVkUm91dGVzU3ViamVjdC5uZXh0KHRoaXMubGF6eUxvYWRlZFJvdXRlc0NvbmZpZ1t0aGlzLmN1cnJlbnROYXZpZ2F0aW9uQ29uZmlnTW9kdWxlXS5sb2FkZWRSb3V0ZXMhKTtcbiAgICAgICAgICAgIHRoaXMubGF6eUxvYWRlZFJvdXRlc0NvbmZpZ1t0aGlzLmN1cnJlbnROYXZpZ2F0aW9uQ29uZmlnTW9kdWxlXS5sb2FkZWRSb3V0ZXNTdWJqZWN0LmNvbXBsZXRlKCk7XG5cbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKGBDb25maWcgbG9hZCBmb3IgJHt0aGlzLmN1cnJlbnROYXZpZ2F0aW9uQ29uZmlnTW9kdWxlfSBpcyBjb21wbGV0ZWAsIHRoaXMubGF6eUxvYWRlZFJvdXRlc0NvbmZpZ1t0aGlzLmN1cnJlbnROYXZpZ2F0aW9uQ29uZmlnTW9kdWxlXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWFyY2ggZm9yIHJvdXRlIGNvbmZpZyBieSBtb2R1bGUgcGF0aCBieSByZWN1cnNpdmUgc2Nhbm5pbmcgb2Ygcm91dGVyIGNvbmZpZyB0cmVlLlxuICAgICAqIEBwYXJhbSBtb2R1bGVQYXRoIFBhdGggb2YgbW9kdWxlIHRoYXQgaXMgc2VhcmNoZWQuXG4gICAgICogQHBhcmFtIHJvdXRlcyBSb3V0ZXMgdG8gYmUgc2Nhbm5lZC4gSWYgbm90IHByb3ZpZGVkLCBpdCBzdGFydHMgb24gcm9vdCByb3V0ZXIgY29uZmlnLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBmaW5kUm91dGVJblJvdXRlQ29uZmlnKG1vZHVsZVBhdGg6IHN0cmluZywgcm91dGVzOiBSb3V0ZXMgPSB0aGlzLnJvdXRlci5jb25maWcpOiBSb3V0ZSB8IG51bGwge1xuICAgICAgICBpZiAobW9kdWxlUGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgIG1vZHVsZVBhdGggPSBtb2R1bGVQYXRoLnN1YnN0cmluZygxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgcm91dGUgb2Ygcm91dGVzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJvdXRlLnBhdGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcm91dGVQYXRoID0gcm91dGUucGF0aDtcbiAgICAgICAgICAgIGlmIChyb3V0ZVBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgcm91dGVQYXRoID0gcm91dGVQYXRoLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbG9uZ2VzdFBhdGhNYXRjaCA9IHRoaXMuZmluZExvbmdlc3RQYXRoTWF0Y2gobW9kdWxlUGF0aCwgcm91dGVQYXRoKTtcbiAgICAgICAgICAgIGlmIChsb25nZXN0UGF0aE1hdGNoID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHRoZXJlIGlzIGEgcGFydGlhbCBvciBmdWxsIG1hdGNoXG4gICAgICAgICAgICBpZiAocm91dGUubG9hZENoaWxkcmVuICYmIG1vZHVsZVBhdGggPT09IGxvbmdlc3RQYXRoTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAvLyBpdCdzIGEgaGl0IVxuICAgICAgICAgICAgICAgIHJldHVybiByb3V0ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocm91dGUubG9hZENoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkocm91dGVbdGhpcy5yb3V0ZXNMb2FkZWRQcm9wS2V5IGFzIGtleW9mIG9iamVjdF0pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5maW5kUm91dGVJblJvdXRlQ29uZmlnKG1vZHVsZVBhdGguc3Vic3RyaW5nKGxvbmdlc3RQYXRoTWF0Y2gubGVuZ3RoLCBtb2R1bGVQYXRoLmxlbmd0aCksIHJvdXRlW3RoaXMucm91dGVzTG9hZGVkUHJvcEtleSBhcyBrZXlvZiBvYmplY3RdKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChyb3V0ZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZFJvdXRlSW5Sb3V0ZUNvbmZpZyhtb2R1bGVQYXRoLnN1YnN0cmluZyhsb25nZXN0UGF0aE1hdGNoLmxlbmd0aCwgbW9kdWxlUGF0aC5sZW5ndGgpLCByb3V0ZS5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmRzIGxvbmdlc3QgcGF0aCBtYXRjaCBvZiBzb3VyY2UgdG8gbWF0Y2ggc3RyaW5nLiBJZiBtYXRjaCBpcyAnJywgaXQgaXMgY29uc2lkZXJlZCBhcyBhIG1hdGNoIGluIEFuZ3VsYXIgcm91dGluZy5cbiAgICAgKiBAcGFyYW0gc291cmNlIFNvdXJjZSBzdHJpbmcgZnJvbSBvbiB3aGljaCBjb21wYXJpc29uIGlzIGJhc2VkLlxuICAgICAqIEBwYXJhbSBtYXRjaCBNYXRjaCBzdHJpbmcgdG8gd2hpY2ggdGhlIHNvdXJjZSBpcyBtYXRjaGVkIHRvLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBmaW5kTG9uZ2VzdFBhdGhNYXRjaChzb3VyY2U6IHN0cmluZywgbWF0Y2g6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBjb25zdCBzb3VyY2VTZWdtZW50cyA9IHNvdXJjZS5zcGxpdCgnLycpO1xuICAgICAgICBjb25zdCBtYXRjaFNlZ21lbnRzID0gbWF0Y2guc3BsaXQoJy8nKTtcblxuICAgICAgICBpZiAobWF0Y2hTZWdtZW50cy5sZW5ndGggPT09IDEgJiYgbWF0Y2hTZWdtZW50c1swXSA9PT0gJycpIHtcbiAgICAgICAgICAgIC8vIGl0J3MgYSBoaXQsIGJlY2F1c2UgZW1wdHkgcm91dGUgbXVzdCBhbHdheXMgYmUgcHJvY2Vzc2VkIChraW5kIG9mIGEgXCJhYnN0cmFjdFwiIHJvdXRlKVxuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNvdXJjZVNlZ21lbnRzWzBdID09PSBtYXRjaFNlZ21lbnRzWzBdKSB7XG4gICAgICAgICAgICAvLyB0aGVyZSBpcyBhIG1hdGNoLCBmaW5kIGhvdyBsb25nIGl0IGlzXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHNvdXJjZVNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZVNlZ21lbnRzW2ldICE9PSBtYXRjaFNlZ21lbnRzW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVuZCBvZiBtYXRjaFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlU2VnbWVudHMuc2xpY2UoMCwgaSkuam9pbignLycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdGhlcmUgaXMgZnVsbCBtYXRjaFxuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZVNlZ21lbnRzLmpvaW4oJy8nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3JDcmVhdGVSb3V0ZUZvck1vZHVsZShtb2R1bGVLZXk6IHN0cmluZykge1xuICAgICAgICBpZiAoIXRoaXMubGF6eUxvYWRlZFJvdXRlc0NvbmZpZ1ttb2R1bGVLZXldKSB7XG4gICAgICAgICAgICB0aGlzLmxhenlMb2FkZWRSb3V0ZXNDb25maWdbbW9kdWxlS2V5XSA9IHtcbiAgICAgICAgICAgICAgICBsb2FkZWRSb3V0ZXNTdWJqZWN0OiBuZXcgUmVwbGF5U3ViamVjdDxSb3V0ZXM+KDEpLFxuICAgICAgICAgICAgICAgIGlzTG9hZEVuZDogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5sYXp5TG9hZGVkUm91dGVzQ29uZmlnW21vZHVsZUtleV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNb2R1bGVQYXRoRnJvbVJvdXRlckxpbmsocGF0aDogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPikge1xuICAgICAgICByZXR1cm4gKCcvJyArIChBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aC5qb2luKCcvJykgOiBwYXRoKSkucmVwbGFjZSgvXFwvXFwvL2csICcvJyk7XG4gICAgfVxufVxuIl19