@sumaris-net/ngx-components 1.4.6 → 1.5.2

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.
@@ -19,6 +19,10 @@ export class EntityStore {
19
19
  this._storageKey = ENTITIES_STORAGE_KEY_PREFIX + '#' + name;
20
20
  this._mapToLightEntity = this.createLightEntityMapFn(this.policy);
21
21
  }
22
+ get length() {
23
+ var _a;
24
+ return ((_a = this._cache) === null || _a === void 0 ? void 0 : _a.length) || 0;
25
+ }
22
26
  get cache() {
23
27
  return this._cache;
24
28
  }
@@ -455,4 +459,4 @@ export class EntityStore {
455
459
  this._onChange.next(true);
456
460
  }
457
461
  }
458
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXN0b3JlLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3N0b3JhZ2UvZW50aXR5LXN0b3JlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBRWpELE9BQU8sRUFBQyxHQUFHLEVBQUUsUUFBUSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFTLFdBQVcsRUFBVSxNQUFNLHVCQUF1QixDQUFDO0FBQ25FLE9BQU8sRUFBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVyQyxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxVQUFVLENBQUM7QUFtQnRELE1BQU0sT0FBTyxXQUFXO0lBZ0N0QixZQUNxQixJQUFZLEVBQ1osT0FBZ0IsRUFDbkMsTUFBaUM7UUFGZCxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osWUFBTyxHQUFQLE9BQU8sQ0FBUztRQTVCcEIsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBSy9DLFdBQU0sR0FBRyxLQUFLLENBQUM7UUF5QnJCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRywy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cUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQy9GLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7WUFDdEIsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVYLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM5RixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxTQUFTO1FBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtTdG9yYWdlfSBmcm9tICdAaW9uaWMvc3RvcmFnZSc7XG5pbXBvcnQge21hcCwgbWVyZ2VNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7RW50aXR5LCBFbnRpdHlVdGlscywgSUVudGl0eX0gZnJvbSAnLi4vbW9kZWwvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7aXNFbXB0eUFycmF5LCBpc05pbCwgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge0lFbnRpdGllc1NlcnZpY2UsIExvYWRSZXN1bHR9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge2NoYWluUHJvbWlzZXN9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge0Vycm9yQ29kZXN9IGZyb20gJy4uL2Vycm9ycyc7XG5cbmV4cG9ydCBjb25zdCBFTlRJVElFU19TVE9SQUdFX0tFWV9QUkVGSVggPSAnZW50aXRpZXMnO1xuXG5leHBvcnQgdHlwZSBFbnRpdHlTdG9yZVR5cGVQb2xpY3lNb2RlID0gJ2RlZmF1bHQnIHwgJ2J5LWlkJztcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEVudGl0eVN0b3JlVHlwZVBvbGljeTxUIGV4dGVuZHMgRW50aXR5PFQsIGFueT4gPSBFbnRpdHk8YW55LCBhbnk+LCBLID0ga2V5b2YgVD4gIHtcbiAgbW9kZT86IEVudGl0eVN0b3JlVHlwZVBvbGljeU1vZGU7IC8vICdkZWZhdWx0JyBieSBkZWZhdWx0XG4gIHNraXBOb25Mb2NhbEVudGl0aWVzPzogYm9vbGVhbjsgLy8gRmFsc2UgYnkgZGVmYXVsdFxuICBsaWdodEZpZWxkc0V4Y2x1ZGVzPzogS1tdOyAvLyBub25lIGJ5IGRlZmF1bHRcbn1cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucyB7XG4gIGZ1bGxMb2FkPzogYm9vbGVhbjtcbn1cblxuZGVjbGFyZSBpbnRlcmZhY2UgRW50aXR5U3RhdHVzIHtcbiAgaW5kZXg6IG51bWJlcjtcbiAgZGlydHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgRW50aXR5U3RvcmU8XG4gIFQgZXh0ZW5kcyBJRW50aXR5PFQsIElEPixcbiAgSUQgPSBudW1iZXIsXG4gIE8gZXh0ZW5kcyBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMgPSBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnM+IHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdG9yYWdlS2V5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29uQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0cnVlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFwVG9MaWdodEVudGl0eTogKFQpID0+IFQ7XG4gIHByaXZhdGUgX2NhY2hlOiBUW107XG4gIHByaXZhdGUgX3N0YXR1c0J5SWQ6IE1hcDxJRCwgRW50aXR5U3RhdHVzPjtcbiAgcHJpdmF0ZSBfc2VxdWVuY2U6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZGlydHkgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfbG9hZGVkOiBib29sZWFuO1xuXG4gIHJlYWRvbmx5IHBvbGljeTogRW50aXR5U3RvcmVUeXBlUG9saWN5PFQ+O1xuXG4gIGdldCBjYWNoZSgpOiBUW10ge1xuICAgIHJldHVybiB0aGlzLl9jYWNoZTtcbiAgfVxuXG4gIGdldCBkaXJ0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlydHk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGlzQnlJZE1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucG9saWN5Lm1vZGUgPT09ICdieS1pZCc7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHN0b3JhZ2VLZXlCeUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JhZ2VLZXkgKyAnI2lkcyc7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbmFtZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBzdG9yYWdlOiBTdG9yYWdlLFxuICAgIHBvbGljeT86IEVudGl0eVN0b3JlVHlwZVBvbGljeTxUPikge1xuICAgIHRoaXMucG9saWN5ID0gcG9saWN5IHx8IHt9O1xuICAgIHRoaXMucmVzZXQoe2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xuICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3N0b3JhZ2VLZXkgPSBFTlRJVElFU19TVE9SQUdFX0tFWV9QUkVGSVggKyAnIycgKyBuYW1lO1xuICAgIHRoaXMuX21hcFRvTGlnaHRFbnRpdHkgPSB0aGlzLmNyZWF0ZUxpZ2h0RW50aXR5TWFwRm4odGhpcy5wb2xpY3kpO1xuICB9XG5cbiAgbmV4dFZhbHVlKCk6IElEIHtcbiAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX3NlcXVlbmNlIC0gMTtcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXMuX3NlcXVlbmNlIGFzIHVua25vd24gYXMgSUQ7XG4gIH1cblxuICBjdXJyZW50VmFsdWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc2VxdWVuY2U7XG4gIH1cblxuICBhc3luYyBsb2FkKGlkOiBJRCwgb3B0cz86IEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucyk6IFByb21pc2U8VD4ge1xuICAgIGlmICh0aGlzLl9tYXBUb0xpZ2h0RW50aXR5ICYmICghb3B0cyB8fCBvcHRzLmZ1bGxMb2FkICE9PSBmYWxzZSkpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmxvYWRGdWxsRW50aXR5KGlkLCBvcHRzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubG9hZENhY2hlZEVudGl0eShpZCwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogV2F0Y2ggYSBzZXQgb2YgZW50aXRpZXNcbiAgICpcbiAgICogQHBhcmFtIHZhcmlhYmxlc1xuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgd2F0Y2hBbGwodmFyaWFibGVzOiB7XG4gICAgICAgICAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgICAgICAgICBzaXplPzogbnVtYmVyO1xuICAgICAgICAgICAgc29ydEJ5Pzogc3RyaW5nO1xuICAgICAgICAgICAgc29ydERpcmVjdGlvbj86IHN0cmluZztcbiAgICAgICAgICAgIGZpbHRlcj86IChUKSA9PiBib29sZWFuO1xuICAgICAgICAgIH0sIG9wdHM/OiBPKTogT2JzZXJ2YWJsZTxMb2FkUmVzdWx0PFQ+PiB7XG5cbiAgICAvLyBJZiBuZWVkIGZ1bGwgZW50aXRpZXMsIGJ1dCB1c2UgbGlnaHQgZW50aXRpZXMgaW4gdGhlIGVudGl0aWVzIGFycmF5XG4gICAgaWYgKHRoaXMuX21hcFRvTGlnaHRFbnRpdHkgJiYgKG9wdHMgJiYgb3B0cy5mdWxsTG9hZCA9PT0gdHJ1ZSkpIHtcbiAgICAgIGNvbnNvbGUud2FybignW2VudGl0eS1zdG9yZV0gV0FSTjogV2F0Y2hpbmcgZnVsbCBlbnRpdGllcywgc3BsaXRlZCBieSBpZCBpbiBlbnRpdHkgc3RvcmUuIFRoaXMgY2FuIGJlIGxvbmchIFBsZWFzZSBtYWtlIHN1cmUgeW91IG5lZWQgZnVsbCBlbnRpdGllcyBoZXJlLicpO1xuICAgICAgcmV0dXJuIHRoaXMuX29uQ2hhbmdlXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIC8vIEFwcGx5IGZpbHRlciBvbiBjYWNoZVxuICAgICAgICAgIG1hcCgoXykgPT4gdGhpcy5yZWR1Y2VBbmRTb3J0KHRoaXMuX2NhY2hlLCB2YXJpYWJsZXMpKSxcblxuICAgICAgICAgIC8vIFRoZW4gY29udmVydCBpbnRvIGZ1bGwgZW50aXRpZXMgKHVzaW5nIHBhcmFsbGVsIGpvYnMgLSAvIVxcIGNhbiB1c2UgbG90IG9mIG1lbW9yeSlcbiAgICAgICAgICBtZXJnZU1hcCgocmVzKSA9PiBQcm9taXNlLmFsbCgocmVzLmRhdGEgfHwgW10pXG4gICAgICAgICAgICAubWFwKGUgPT4gdGhpcy5sb2FkRnVsbEVudGl0eShlLmlkLCBvcHRzKSkpLnRoZW4oZGF0YSA9PiAoe1xuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgdG90YWw6IHJlcy50b3RhbFxuICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gTG9hZCB1c2luZyBlbnRpdGllcyBhcnJheVxuICAgIHJldHVybiB0aGlzLl9vbkNoYW5nZVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoXykgPT4gdGhpcy5yZWR1Y2VBbmRTb3J0KHRoaXMuX2NhY2hlLCB2YXJpYWJsZXMpKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXSWxsIGFwcGx5IGEgZmlsdGVyLCB0aGVuIGEgc29ydCwgdGhlbiBhIHBhZ2Ugc2xpY2VcbiAgICpcbiAgICogQHBhcmFtIHZhcmlhYmxlc1xuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgYXN5bmMgbG9hZEFsbCh2YXJpYWJsZXM6IHtcbiAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgc2l6ZT86IG51bWJlcjtcbiAgICBzb3J0Qnk/OiBzdHJpbmc7XG4gICAgc29ydERpcmVjdGlvbj86IHN0cmluZztcbiAgICBmaWx0ZXI/OiAoVCkgPT4gYm9vbGVhbjtcbiAgfSwgb3B0cz86IE8pOiBQcm9taXNlPExvYWRSZXN1bHQ8VD4+IHtcblxuICAgIGNvbnN0IHJlcyA9IHRoaXMucmVkdWNlQW5kU29ydCh0aGlzLl9jYWNoZSwgdmFyaWFibGVzKTtcblxuICAgIC8vIElmIHN0b3JlIGJ5IElEOiBtYWtlIHN1cmUgdG8gZnVsbCB0aGUgZnVsbCBlbnRpdGllc1xuICAgIGlmICh0aGlzLl9tYXBUb0xpZ2h0RW50aXR5ICYmIGlzTm90RW1wdHlBcnJheShyZXMuZGF0YSkgJiYgKG9wdHMgJiYgb3B0cy5mdWxsTG9hZCA9PT0gdHJ1ZSkpIHtcbiAgICAgIC8vIExvYWQgZnVsbCBlbnRpdGllcywgb25lIGJ5IG9uZVxuICAgICAgcmVzLmRhdGEgPSBhd2FpdCBjaGFpblByb21pc2VzKChyZXMuZGF0YSB8fCBbXSkubWFwKGUgPT4gKCkgPT4gdGhpcy5sb2FkKGUuaWQpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcyA7XG4gIH1cblxuICBzYXZlKGVudGl0eTogVCwgb3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFufSk6IFQge1xuICAgIGNvbnN0IHN0YXR1cyA9IGlzTm90TmlsKGVudGl0eS5pZCkgJiYgdGhpcy5fc3RhdHVzQnlJZC5nZXQoZW50aXR5LmlkKSB8fCB7aW5kZXg6IHVuZGVmaW5lZH07XG4gICAgY29uc3QgaXNOZXcgPSBpc05pbChzdGF0dXMuaW5kZXgpO1xuICAgIGlmIChpc05ldykge1xuICAgICAgaWYgKGlzTmlsKGVudGl0eS5pZCkpIHtcbiAgICAgICAgZW50aXR5LmlkID0gdGhpcy5uZXh0VmFsdWUoKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKCtlbnRpdHkuaWQgPCAwICYmICtlbnRpdHkuaWQgPiB0aGlzLl9zZXF1ZW5jZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RyeWluZyB0byBzYXZlIGEgbG9jYWwgZW50aXR5IHdpdGggYW4gaWQgPiBzZXF1ZW5jZS4gV2lsbCByZXBsYWNlIGlkIGJ5IHNlcXVlbmNlIG5leHQgdmFsdWUnKTtcbiAgICAgICAgZW50aXR5LmlkID0gdGhpcy5uZXh0VmFsdWUoKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBPSzogdXNlIGEgdmFsaWQgaWQgOlxuICAgICAgICAvLyAtIGlkID49IDAgKHNob3VsZCBiZSBhIHJlbW90ZSBpZClcbiAgICAgICAgLy8gLSBPUiA8IHNlcXVlbmNlLCBhbmQgbm90IGV4aXN0cyBpbiB0aGUgaW5kZXggbWFwXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3N0YXR1c0J5SWQuc2V0KGVudGl0eS5pZCwgc3RhdHVzKTtcbiAgICAgIHN0YXR1cy5pbmRleCA9IHRoaXMuX2NhY2hlLnB1c2goZW50aXR5KSAtIDE7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5fY2FjaGVbc3RhdHVzLmluZGV4XSA9IGVudGl0eTtcbiAgICB9XG5cbiAgICAvLyBNYXJrIGVudGl0eSBhcyBkaXJ0eVxuICAgIHN0YXR1cy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBNYXJrIHN0b3JhZ2UgYXMgZGlydHlcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudGl0eTtcbiAgfVxuXG4gIHNhdmVBbGwoZW50aXRpZXM6IFRbXSwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgcmVzZXQ/OiBib29sZWFuIH0pOiBUW10ge1xuICAgIGlmIChpc0VtcHR5QXJyYXkoZW50aXRpZXMpICYmICghb3B0cyB8fCBvcHRzLnJlc2V0ICE9PSB0cnVlKSkgcmV0dXJuIGVudGl0aWVzOyAvLyBTa2lwIChOb3RoaW5nIHRvIHNhdmUpXG5cbiAgICBsZXQgcmVzdWx0OiBUW107XG5cbiAgICBjb25zb2xlLmluZm8oYFtlbnRpdHktc3RvcmFnZV0gU2F2aW5nICR7ZW50aXRpZXMubGVuZ3RofSAke3RoaXMubmFtZX0ocylgKTtcblxuICAgIC8vIEZpcnN0IHNhdmUsIG9yIHJlc2V0IHVzaW5nIGdpdmVuIGVudGl0aWVzXG4gICAgaWYgKGlzRW1wdHlBcnJheSh0aGlzLl9jYWNoZSkgfHwgKG9wdHMgJiYgb3B0cy5yZXNldCkpIHtcbiAgICAgIHRoaXMuc2V0RW50aXRpZXMoZW50aXRpZXMsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmVzdWx0ID0gZW50aXRpZXMubWFwKChlbnRpdHkpID0+IHRoaXMuc2F2ZShlbnRpdHksIHtlbWl0RXZlbnQ6IGZhbHNlfSkpO1xuICAgIH1cblxuICAgIC8vIE1hcmsgYXMgZGlydHlcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdCB8fCB0aGlzLl9jYWNoZS5zbGljZSgpO1xuICB9XG5cbiAgZGVsZXRlKGlkOiBJRCwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogVCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3RhdHVzID0gaXNOb3ROaWwoaWQpID8gdGhpcy5fc3RhdHVzQnlJZC5nZXQoaWQpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGluZGV4ID0gc3RhdHVzID8gc3RhdHVzLmluZGV4IDogdW5kZWZpbmVkO1xuICAgIGlmIChpc05pbChpbmRleCkpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBlbnRpdHkgPSB0aGlzLl9jYWNoZVtpbmRleF07XG4gICAgaWYgKCFlbnRpdHkpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAvLyBSZW1vdmUgZnJvbSBjYWNoZVxuICAgIHRoaXMuX2NhY2hlW2luZGV4XSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9zdGF0dXNCeUlkLmRlbGV0ZShlbnRpdHkuaWQpO1xuXG4gICAgLy8gUmVtb3ZlIGZ1bGwgZW50aXR5LCBieSBpZFxuICAgIGlmICh0aGlzLmlzQnlJZE1vZGUpIHtcbiAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUodGhpcy5fc3RvcmFnZUtleSArICcjJyArIGlkKTtcbiAgICB9XG5cbiAgICAvLyBNYXJrIGFzIGRpcnR5XG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRpdHkgYXMgVDtcbiAgfVxuXG4gIGRlbGV0ZU1hbnkoaWRzOiBJRFtdLCBvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW59KTogVFtdIHtcblxuICAgIC8vIERlbGV0ZSBieSBpZCwgYnV0IE5PVCBlbWl0IGV2ZW50IG9uIGVhY2ggZGVsZXRpb25cbiAgICBjb25zdCBkZWxldGVkRW50aXRpZXMgPSAoaWRzIHx8IFtdKVxuICAgICAgLm1hcChpZCA9PiB0aGlzLmRlbGV0ZShpZCwge2VtaXRFdmVudDogZmFsc2V9KSlcbiAgICAgIC5maWx0ZXIoaXNOb3ROaWwpO1xuXG4gICAgLy8gTm8gY2hhbmdlczogZXhpdFxuICAgIGlmICghZGVsZXRlZEVudGl0aWVzLmxlbmd0aCkgcmV0dXJuIFtdO1xuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkRW50aXRpZXM7XG4gIH1cblxuICByZXNldChvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW59KSB7XG4gICAgdGhpcy5fY2FjaGUgPSBbXTtcbiAgICB0aGlzLl9zZXF1ZW5jZSA9IDA7XG4gICAgdGhpcy5fc3RhdHVzQnlJZCA9IG5ldyBNYXA8SUQsIGFueT4oKTtcblxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gb3B0c1xuICAgKiAgb3B0cy5mb3JjZSA6IGZvcmNlIGFsbCBlbnRpdGllcyB0byBiZSBwZXJzaXN0LCBhbmQgbm90IG9ubHkgaWYgZGlydHlcbiAgICovXG4gIGFzeW5jIHBlcnNpc3Qob3B0cz86IHsgc2tpcElmUHJpc3RpbmU/OiBib29sZWFuIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIG9wdHMgPSB7XG4gICAgICBza2lwSWZQcmlzdGluZTogdGhpcy5wb2xpY3kuc2tpcE5vbkxvY2FsRW50aXRpZXMsXG4gICAgICAuLi5vcHRzXG4gICAgfTtcblxuICAgIC8vIFNraXAgaXMgbm90IGRpcnR5XG4gICAgaWYgKG9wdHMuc2tpcElmUHJpc3RpbmUgJiYgIXRoaXMuX2RpcnR5KSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbZW50aXR5LXN0b3JhZ2VdIFBlcnNpc3RpbmcgJHt0aGlzLm5hbWV9IG5vdCBuZWVkLiBTa2lwYCk7XG4gICAgICByZXR1cm4gdGhpcy5fY2FjaGUubGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIENvcHkgc29tZSBkYXRhLCBCRUZPUkUgdG8gY2FsbCBtYXJrQXNQcmlzdGluZSgpIHRvIGFsbG93IHBhcmFsbGVsIGNoYW5nZXNcbiAgICBjb25zdCBkaXJ0eUluZGV4ZXMgPSB0aGlzLmlzQnlJZE1vZGUgJiYgQXJyYXkuZnJvbSh0aGlzLl9zdGF0dXNCeUlkLnZhbHVlcygpKVxuICAgICAgLmZpbHRlcihzID0+ICFvcHRzLnNraXBJZlByaXN0aW5lIHx8IChzICYmIHMuZGlydHkpKVxuICAgICAgLm1hcChzID0+IHMuaW5kZXgpO1xuICAgIGNvbnN0IGVudGl0aWVzID0gdGhpcy5fY2FjaGUuc2xpY2UoKTsgLy8gQ29weSBjYWNoZWQgZW50aXRpZXNcblxuICAgIC8vIE1hcmsgYWxsIChlbnRpdGllcyBhbmQgc3RhdHVzKSBhcyBwcmlzdGluZVxuICAgIHRoaXMubWFya0FzUHJpc3RpbmUoe2VtaXRFdmVudDogZmFsc2V9KTtcblxuICAgIC8vIENvbnZlcnQgZGlydHkgZW50aXRpZXMgaW50byBsaWdodCBlbnRpdGllcyAoLyFcXCBBRlRFUiB0aGUgcHJldmlvdXMgY29weSlcbiAgICAvLyBhbmQgdXBkYXRlIHRoZSBjYWNoZSAoYnV0IE5PVCB0aGUgJ2VudGl0aWVzJyB2YXJpYWJsZSlcbiAgICBpZiAoZGlydHlJbmRleGVzICYmIHRoaXMuX21hcFRvTGlnaHRFbnRpdHkpIHtcbiAgICAgIGRpcnR5SW5kZXhlcy5mb3JFYWNoKGluZGV4ID0+IHRoaXMuX2NhY2hlW2luZGV4XSA9IHRoaXMuX21hcFRvTGlnaHRFbnRpdHkoZW50aXRpZXNbaW5kZXhdKSk7XG4gICAgfVxuXG4gICAgLy8gSWYgbm8gZW50aXR5IGZvdW5kXG4gICAgaWYgKGlzRW1wdHlBcnJheShlbnRpdGllcykpIHtcblxuICAgICAgLy8gQ2xlYW4gdGhlIGxvY2FsIHN0b3JhZ2VcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5yZW1vdmUodGhpcy5fc3RvcmFnZUtleSk7XG4gICAgfVxuICAgIGVsc2Uge1xuXG4gICAgICAvLyBTYXZlIGVhY2ggZW50aXR5IGludG8gYSB1bmlxdWUga2V5IChhZHZhbmNlZCBtb2RlKVxuICAgICAgaWYgKHRoaXMuaXNCeUlkTW9kZSkge1xuICAgICAgICAvLyBTYXZlIGlkc1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KHRoaXMuc3RvcmFnZUtleUJ5SWQsIGVudGl0aWVzLmZpbHRlcihpc05vdE5pbCkubWFwKGUgPT4gZS5pZCkpO1xuXG4gICAgICAgIC8vIFNhdmVkIGRpcnR5IGVudGl0aWVzXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIGRpcnR5SW5kZXhlc1xuICAgICAgICAgICAgLm1hcChpbmRleCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IGVudGl0aWVzW2luZGV4XTtcbiAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgW2VudGl0eS1zdG9yYWdlXSBQZXJzaXN0aW5nICR7dGhpcy5uYW1lfSMke2VudGl0eS5pZH0uLi5gKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5zZXQodGhpcy5fc3RvcmFnZUtleSArICcjJyArIGVudGl0eS5pZCwgZW50aXR5KTtcbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICBjb25zb2xlLmluZm8oYFtlbnRpdHktc3RvcmFnZV0gUGVyc2lzdGluZyAke2RpcnR5SW5kZXhlcy5sZW5ndGh9LyR7ZW50aXRpZXMubGVuZ3RofSAke3RoaXMubmFtZX0ocykuLi5gKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2F2ZSBhbGwgZW50aXRpZXMgaW4gYSBzaW5nbGUga2V5IChkZWZhdWx0KVxuICAgICAgZWxzZSB7XG5cbiAgICAgICAgY29uc29sZS5pbmZvKGBbZW50aXR5LXN0b3JhZ2VdIFBlcnNpc3RpbmcgJHtlbnRpdGllcy5sZW5ndGh9ICR7dGhpcy5uYW1lfShzKS4uLmApO1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KHRoaXMuX3N0b3JhZ2VLZXksIGVudGl0aWVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZW50aXRpZXMubGVuZ3RoO1xuICB9XG5cbiAgYXN5bmMgcmVzdG9yZShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGxldCBlbnRpdGllczogVFtdO1xuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5zdG9yYWdlLmdldCh0aGlzLl9zdG9yYWdlS2V5KSxcbiAgICAgIHRoaXMuc3RvcmFnZS5nZXQodGhpcy5zdG9yYWdlS2V5QnlJZClcbiAgICBdKTtcbiAgICBjb25zdCB2YWx1ZXMgPSByZXNbMF0gJiYgQXJyYXkuaXNBcnJheShyZXNbMF0pID8gcmVzWzBdIDogbnVsbDtcbiAgICBjb25zdCBpZHMgPSByZXNbMV0gJiYgQXJyYXkuaXNBcnJheShyZXNbMV0pID8gcmVzWzFdIDogbnVsbDtcbiAgICBsZXQgbWlncmF0aW9uID0gZmFsc2U7XG4gICAgbGV0IG9sZEtleXNUb0NsZWFuOiBzdHJpbmdbXTtcblxuICAgIC8vIFwiU3BsaXQgYnkgaWRcIiBtb2RlXG4gICAgaWYgKHRoaXMuaXNCeUlkTW9kZSkge1xuICAgICAgaWYgKGlzTm90TmlsKGlkcykpIHtcbiAgICAgICAgLy8gTG9hZCBlbnRpdHkgYnkgaWQgKG9uZSBieSBvbmUpXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VLZXlzID0gaWRzLm1hcChpZCA9PiB0aGlzLl9zdG9yYWdlS2V5ICsgJyMnICsgaWQpO1xuICAgICAgICBlbnRpdGllcyA9IGF3YWl0IGNoYWluUHJvbWlzZXM8VD4oc3RvcmFnZUtleXMubWFwKGtleSA9PiAoKSA9PiB0aGlzLnN0b3JhZ2UuZ2V0KGtleSkpKTtcbiAgICAgIH1cbiAgICAgIC8vIE1pZ3JhdGUgZnJvbSB0aGUgc3RhbmRhcmQgbW9kZVxuICAgICAgZWxzZSBpZiAoaXNOb3ROaWwodmFsdWVzKSkge1xuICAgICAgICBlbnRpdGllcyA9IHZhbHVlcy5maWx0ZXIoZSA9PiBlICYmIGlzTm90TmlsKGUuaWQpKTtcbiAgICAgICAgbWlncmF0aW9uID0gdHJ1ZTtcbiAgICAgICAgb2xkS2V5c1RvQ2xlYW4gPSBbdGhpcy5fc3RvcmFnZUtleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRWxzZSAoZGVmYXVsdCBtb2RlKVxuICAgIGVsc2Uge1xuICAgICAgaWYgKGlzTm90TmlsKHZhbHVlcykpIHtcbiAgICAgICAgZW50aXRpZXMgPSB2YWx1ZXMuZmlsdGVyKGUgPT4gZSAmJiBpc05vdE5pbChlLmlkKSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc05vdE5pbChpZHMpKSB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VLZXlzID0gaWRzLm1hcChpZCA9PiB0aGlzLl9zdG9yYWdlS2V5ICsgJyMnICsgaWQpO1xuICAgICAgICAvLyBMb2FkIGVudGl0eSBieSBpZCAob25lIGJ5IG9uZSlcbiAgICAgICAgZW50aXRpZXMgPSBhd2FpdCBjaGFpblByb21pc2VzPFQ+KHN0b3JhZ2VLZXlzLm1hcChrZXkgPT4gKCkgPT4gdGhpcy5zdG9yYWdlLmdldChrZXkpKSk7XG4gICAgICAgIG1pZ3JhdGlvbiA9IHRydWU7XG4gICAgICAgIG9sZEtleXNUb0NsZWFuID0gWy4uLnN0b3JhZ2VLZXlzLCB0aGlzLnN0b3JhZ2VLZXlCeUlkXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPSywgdGhlcmUgaXMgc29tZXRoaW5nIGluIHN0b3JhZ2UuLi5cbiAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGVudGl0aWVzKSkge1xuICAgICAgaWYgKGVudGl0aWVzLmxlbmd0aCA+PSAxMDAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgW2VudGl0eS1zdG9yYWdlXSAtIFJlc3RvcmluZyAke2VudGl0aWVzLmxlbmd0aH0gJHt0aGlzLm5hbWV9LiBDaGVjayBpZiBub3QgdG9vIG1hbnkgZWxlbWVudHM/IWApO1xuICAgICAgfVxuXG4gICAgICAvLyBNYXAgZW50aXRpZXMgaW50byBsaWdodCBlbGVtZW50IChpZiBpZiBub3QgbmVlZCB0byBwZXJzaXN0LCBiZWNhdXNlIG9mIG1pZ3JhdGlvblxuICAgICAgaWYgKHRoaXMuX21hcFRvTGlnaHRFbnRpdHkgJiYgIW1pZ3JhdGlvbikge1xuICAgICAgICBlbnRpdGllcyA9IGVudGl0aWVzLm1hcCh0aGlzLl9tYXBUb0xpZ2h0RW50aXR5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNldEVudGl0aWVzKGVudGl0aWVzIHx8IFtdLCB7Li4ub3B0cywgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xuXG4gICAgLy8gRmluaXNoIHRoZSBtaWdyYXRpb25cbiAgICBpZiAobWlncmF0aW9uKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zb2xlLndhcm4oYFtlbnRpdHktc3RvcmFnZV0gLSBNaWdyYXRlICR7dGhpcy5uYW1lfSBpbnRvIHttb2RlOiAnJHt0aGlzLnBvbGljeS5tb2RlfSd9Li4uYCk7XG5cbiAgICAgICAgLy8gRm9yY2UgdG8gcGVyc2lzdCwgdXNpbmcgdGhlIG5ldyBtb2RlXG4gICAgICAgIGF3YWl0IHRoaXMucGVyc2lzdCh7c2tpcElmUHJpc3RpbmU6IGZhbHNlIC8qIGZvcmNlIHBlcnNpc3QgdXNpbmcgdGhlIG5ldyBtb2RlICovIH0pO1xuXG4gICAgICAgIC8vIENsZWFuIG9sZCBzdG9yYWdlIGtleXMgKG9uZSBieSBvbmUpXG4gICAgICAgIGlmIChpc05vdEVtcHR5QXJyYXkob2xkS2V5c1RvQ2xlYW4pKSBhd2FpdCBjaGFpblByb21pc2VzKG9sZEtleXNUb0NsZWFuLm1hcChrZXkgPT4gKCkgPT4gdGhpcy5zdG9yYWdlLnJlbW92ZShrZXkpKSk7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhyb3cge2NvZGU6IEVycm9yQ29kZXMuRU5USVRZX1NUT1JBR0VfTUlHUkFUSU9OX0ZBSUxFRCwgbWVzc2FnZTogJ0VSUk9SLkVOVElUWV9TVE9SQUdFX01JR1JBVElPTl9GQUlMRUQnLCBkZXRhaWxzOiBlcnJ9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVtaXQgdXBkYXRlIGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY2FjaGUubGVuZ3RoO1xuICB9XG5cbiAgbWFya0FzRGlydHkob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cbiAgfVxuXG4gIG1hcmtBc1ByaXN0aW5lKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuXG4gICAgZm9yIChjb25zdCBzIG9mIHRoaXMuX3N0YXR1c0J5SWQudmFsdWVzKCkpIHtcbiAgICAgIGlmIChpc05vdE5pbChzKSkge1xuICAgICAgICBzLmRpcnR5ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2RpcnR5ID0gZmFsc2U7XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcml2YXRlIGxvYWRDYWNoZWRFbnRpdHkoaWQ6IElELCBvcHRzPzogRW50aXR5U3RvcmFnZUxvYWRPcHRpb25zKTogVCB7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5fc3RhdHVzQnlJZC5nZXQoaWQpO1xuICAgIGNvbnN0IGluZGV4ID0gc3RhdHVzICYmIHN0YXR1cy5pbmRleDtcbiAgICBpZiAoaXNOaWwoaW5kZXgpKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBub3QgZXhpc3RzXG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUodGhpcy5fY2FjaGVbaW5kZXhdKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZEZ1bGxFbnRpdHkoaWQ6IElELCBvcHRzPzogRW50aXR5U3RvcmFnZUxvYWRPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5fc3RhdHVzQnlJZC5nZXQoaWQpO1xuICAgIGNvbnN0IGluZGV4ID0gc3RhdHVzICYmIHN0YXR1cy5pbmRleDtcbiAgICBpZiAoaXNOaWwoaW5kZXgpKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBub3QgZXhpc3RzXG5cbiAgICAvLyBSZWxvYWQgZnJvbSBzdG9yYWdlLCBpZiBuZWVkIChlLmcuIHNvbWUgYXR0cmlidXRlcyBoYXMgYmVlbiBleGNsdWRlZCBpbiBsaWdodCBlbGVtZW50cylcbiAgICBpZiAoc3RhdHVzLmRpcnR5ID09PSBmYWxzZSkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhgW2VudGl0eS1zdG9yYWdlXSBGdWxsIHJlbG9hZGluZyAke3RoaXMubmFtZX0jJHtpZH0uLi5gKTtcbiAgICAgIGNvbnN0IGZ1bGxEYXRhID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldCh0aGlzLl9zdG9yYWdlS2V5ICsgJyMnICsgaWQpO1xuICAgICAgaWYgKGZ1bGxEYXRhKSByZXR1cm4gZnVsbERhdGE7XG4gICAgICAvLyBOb3QgZm91bmQgYnkgaWQsIGNvbnRpbnVlIGZyb20gY2FjaGUgKHZlcnNpb24gcHJpb3IgdG8gMS41LjMpXG4gICAgfVxuXG4gICAgLy8gTG9hZCBmcm9tIHRoZSBjYWNoZSwgaWYgZGlydHkgT1IgaWYgc3RvcmFnZSBpcyBub3Qgc3BsaXRlZCBieSBpZFxuICAgIHJldHVybiB0aGlzLl9jYWNoZVtpbmRleF07XG4gIH1cblxuICBwcml2YXRlIHNldEVudGl0aWVzKGVudGl0aWVzOiBUW10sIG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgLy8gRmlsdGVyIG5vbiBuaWwgKGFuZCBpZiBuZWVkIG5vbiBsb2NhbCkgZW50aXRpZXNcbiAgICBlbnRpdGllcyA9IChlbnRpdGllcyB8fCBbXSlcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGlzTm90TmlsKGl0ZW0pXG4gICAgICAgICAgJiYgKCF0aGlzLnBvbGljeS5za2lwTm9uTG9jYWxFbnRpdGllcyB8fCAraXRlbS5pZCA8IDApXG4gICAgICAgICk7XG5cbiAgICB0aGlzLl9jYWNoZSA9IGVudGl0aWVzO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBzZXF1ZW5jZSB3aXRoIG1pbihpZCkgb2YgYWxsIHRlbXBvcmFyeSBpZHNcbiAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX2NhY2hlLnJlZHVjZSgocmVzLCBpdGVtKSA9PiAraXRlbS5pZCA8IDAgPyBNYXRoLm1pbihyZXMsICtpdGVtLmlkKSA6IHJlcywgMCk7XG5cbiAgICB0aGlzLl9zdGF0dXNCeUlkLmNsZWFyKCk7XG4gICAgdGhpcy5fY2FjaGUuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMuX3N0YXR1c0J5SWQuc2V0KGl0ZW0uaWQsIDxFbnRpdHlTdGF0dXM+e1xuICAgICAgICBpbmRleCxcbiAgICAgICAgZGlydHk6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICogV0lsbCBhcHBseSBhIGZpbHRlciwgdGhlbiBhIHNvcnQsIHRoZW4gYSBwYWdlIHNsaWNlXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSB2YXJpYWJsZXNcbiAgICovXG4gIHByaXZhdGUgcmVkdWNlQW5kU29ydChkYXRhOiBUW10sXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0Qnk/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnREaXJlY3Rpb24/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcj86IChUKSA9PiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk6IExvYWRSZXN1bHQ8VD4ge1xuICAgIGlmIChpc0VtcHR5QXJyYXkoZGF0YSkpIHtcbiAgICAgIHJldHVybiB7ZGF0YTogW10sIHRvdGFsOiAwfTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgbmlsIHZhbHVlc1xuICAgIGRhdGEgPSBkYXRhLmZpbHRlcihpc05vdE5pbCk7XG5cbiAgICBpZiAoIXZhcmlhYmxlcykge1xuICAgICAgLy8gUmV0dXJuIGFsbCAoYnV0IGFycmF5IGhhcyBiZWVuIGZpbHRlcmVkLCBhbmQgY29waWVkKVxuICAgICAgcmV0dXJuIHtkYXRhLCB0b3RhbDogZGF0YS5sZW5ndGh9O1xuICAgIH1cblxuICAgIC8vIEFwcGx5IHRoZSBmaWx0ZXIsIGlmIGFueVxuICAgIGlmICh2YXJpYWJsZXMuZmlsdGVyKSB7XG4gICAgICBkYXRhID0gZGF0YS5maWx0ZXIodmFyaWFibGVzLmZpbHRlcik7XG4gICAgfVxuXG4gICAgLy8gQ29tcHV0ZSB0aGUgdG90YWwgbGVuZ3RoXG4gICAgY29uc3QgdG90YWwgPSBkYXRhLmxlbmd0aDtcblxuICAgIC8vIElmIHBhZ2Ugc2l6ZT0wIChlLmcuIG9ubHkgbmVlZCB0b3RhbClcbiAgICBpZiAodmFyaWFibGVzLnNpemUgPT09IDApIHJldHVybiB7ZGF0YTogW10sIHRvdGFsfTtcblxuICAgIC8vIFNvcnQgYnlcbiAgICBpZiAoZGF0YS5sZW5ndGggJiYgdmFyaWFibGVzLnNvcnRCeSkge1xuICAgICAgRW50aXR5VXRpbHMuc29ydChkYXRhLCB2YXJpYWJsZXMuc29ydEJ5LCB2YXJpYWJsZXMuc29ydERpcmVjdGlvbik7XG4gICAgfVxuXG4gICAgLy8gU2xpY2UgaW4gYSBwYWdlICh1c2luZyBvZmZzZXQgYW5kIHNpemUpXG4gICAgaWYgKHZhcmlhYmxlcy5vZmZzZXQgPiAwKSB7XG5cbiAgICAgIC8vIE9mZnNldCBhZnRlciB0aGUgZW5kOiBubyByZXN1bHRcbiAgICAgIGlmICh2YXJpYWJsZXMub2Zmc2V0ID49IGRhdGEubGVuZ3RoIHx8IHZhcmlhYmxlcy5zaXplID09PSAwKSB7XG4gICAgICAgIGRhdGEgPSBbXTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBkYXRhID0gKHZhcmlhYmxlcy5zaXplID4gMCAmJiAoKHZhcmlhYmxlcy5vZmZzZXQgKyB2YXJpYWJsZXMuc2l6ZSkgPCBkYXRhLmxlbmd0aCkpID9cbiAgICAgICAgICAvLyBTbGljZSB1c2luZyBsaW1pdCB0byBzaXplXG4gICAgICAgICAgZGF0YS5zbGljZSh2YXJpYWJsZXMub2Zmc2V0LCB2YXJpYWJsZXMub2Zmc2V0ICsgdmFyaWFibGVzLnNpemUpIDpcbiAgICAgICAgICAvLyBTbGljZSB3aXRob3V0IGxpbWl0XG4gICAgICAgICAgZGF0YS5zbGljZSh2YXJpYWJsZXMub2Zmc2V0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBseSBhIGxpbWl0XG4gICAgZWxzZSBpZiAodmFyaWFibGVzLnNpemUgPiAwKXtcbiAgICAgIGRhdGEgPSBkYXRhLnNsaWNlKDAsIHZhcmlhYmxlcy5zaXplKTtcbiAgICB9XG4gICAgLy8gTm8gbGltaXQ6XG4gICAgZWxzZSBpZiAodmFyaWFibGVzLnNpemUgPT09IC0xKXtcbiAgICAgIC8vIEtlZXAgYWxsIGRhdGFcbiAgICB9XG5cbiAgICByZXR1cm4ge2RhdGEsIHRvdGFsfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTGlnaHRFbnRpdHlNYXBGbihwb2xpY3k6IEVudGl0eVN0b3JlVHlwZVBvbGljeTxUPik6IChUKSA9PiBUIHtcbiAgICBpZiAocG9saWN5Lm1vZGUgIT09ICdieS1pZCcpIHJldHVybiB1bmRlZmluZWQ7IC8vIE9ubHkgbmVlZCBmb3IgdGhlICdieS1pZCcgbW9kZVxuICAgIGlmIChpc0VtcHR5QXJyYXkocG9saWN5LmxpZ2h0RmllbGRzRXhjbHVkZXMpKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBza2lwXG5cbiAgICAvLyBDcmVhdGUgYSBpbW11dGFibGUgbWFzayBvYmplY3QsIHVzZSB0byBjbGVhbiBzb21lIHByb3BlcnRpZXNcbiAgICBjb25zdCBleGNsdWRlQXR0cmlidXRlc01hc2sgPSBPYmplY3QuZnJlZXplKHRoaXMucG9saWN5LmxpZ2h0RmllbGRzRXhjbHVkZXMucmVkdWNlKChyZXMsIGF0dHIpID0+IHtcbiAgICAgIHJlc1thdHRyXSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSwgPFQ+e30pKTtcblxuICAgIHJldHVybiAoZW50aXR5KSA9PiBlbnRpdHkgPyBPYmplY3QuYXNzaWduKDxUPnt9LCBlbnRpdHksIGV4Y2x1ZGVBdHRyaWJ1dGVzTWFzaykgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBlbnRpdGllc1N1YmplY3QuXG4gICAqXG4gICAqIEJlZm9yZSB3ZW5kaW5nIGl0ZW1zLCBhIGZpbHRlciBpcyBhcHBseSwgdG8gcmVtb3ZlIG51bGwgdmFsdWUuXG4gICAqIFRoaXMgZmlsdGVyIHdpbGwgY3JlYXRlIGEgYXJyYXkgY29weS5cbiAgICovXG4gIHByaXZhdGUgZW1pdEV2ZW50KCkge1xuICAgIHRoaXMuX29uQ2hhbmdlLm5leHQodHJ1ZSk7XG4gIH1cbn1cbiJdfQ==
462
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXN0b3JlLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3N0b3JhZ2UvZW50aXR5LXN0b3JlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBRWpELE9BQU8sRUFBQyxHQUFHLEVBQUUsUUFBUSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFTLFdBQVcsRUFBVSxNQUFNLHVCQUF1QixDQUFDO0FBQ25FLE9BQU8sRUFBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVyQyxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxVQUFVLENBQUM7QUFtQnRELE1BQU0sT0FBTyxXQUFXO0lBb0N0QixZQUNxQixJQUFZLEVBQ1osT0FBZ0IsRUFDbkMsTUFBaUM7UUFGZCxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osWUFBTyxHQUFQLE9BQU8sQ0FBUztRQWhDcEIsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBSy9DLFdBQU0sR0FBRyxLQUFLLENBQUM7UUE2QnJCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRywyQkFBMkIsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQzVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUE5QkQsSUFBSSxNQUFNOztRQUNSLE9BQU8sT0FBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxNQUFNLEtBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBYyxVQUFVO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFjLGNBQWM7UUFDMUIsT0FBTyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztJQUNuQyxDQUFDO0lBY0QsU0FBUztRQUNQLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUMsU0FBMEIsQ0FBQztJQUN6QyxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUssSUFBSSxDQUFDLEVBQU0sRUFBRSxJQUErQjs7WUFDaEQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssQ0FBQyxFQUFFO2dCQUNoRSxPQUFPLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDNUM7WUFDRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekMsQ0FBQztLQUFBO0lBRUQ7Ozs7O09BS0c7SUFDSCxRQUFRLENBQUMsU0FNQSxFQUFFLElBQVE7UUFFakIsc0VBQXNFO1FBQ3RFLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDOUQsT0FBTyxDQUFDLElBQUksQ0FBQyw2SUFBNkksQ0FBQyxDQUFDO1lBQzVKLE9BQU8sSUFBSSxDQUFDLFNBQVM7aUJBQ2xCLElBQUk7WUFDSCx3QkFBd0I7WUFDeEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFFdEQsb0ZBQW9GO1lBQ3BGLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO2lCQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3RELElBQUk7Z0JBQ0osS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO2FBQ2pCLENBQUMsQ0FBQyxDQUNOLENBQ0YsQ0FBQztTQUNMO1FBRUQsNEJBQTRCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFNBQVM7YUFDbEIsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQ3ZELENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDRyxPQUFPLENBQUMsU0FNYixFQUFFLElBQVE7O1lBRVQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBRXZELHNEQUFzRDtZQUN0RCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLEVBQUU7Z0JBQzNGLGlDQUFpQztnQkFDakMsR0FBRyxDQUFDLElBQUksR0FBRyxNQUFNLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xGO1lBRUQsT0FBTyxHQUFHLENBQUU7UUFDZCxDQUFDO0tBQUE7SUFFRCxJQUFJLENBQUMsTUFBUyxFQUFFLElBQTRCO1FBQzFDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBQyxDQUFDO1FBQzVGLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ3BCLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQzlCO2lCQUNJLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDdEQsT0FBTyxDQUFDLElBQUksQ0FBQyw2RkFBNkYsQ0FBQyxDQUFDO2dCQUM1RyxNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQzthQUM5QjtpQkFDSTtnQkFDSCx1QkFBdUI7Z0JBQ3ZCLG9DQUFvQztnQkFDcEMsbURBQW1EO2FBQ3BEO1lBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN4QyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM3QzthQUNJO1lBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO1NBQ3BDO1FBRUQsdUJBQXVCO1FBQ3ZCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBRXBCLHdCQUF3QjtRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUVuQixvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssRUFBRTtZQUNyQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDbEI7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsT0FBTyxDQUFDLFFBQWEsRUFBRSxJQUErQztRQUNwRSxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDO1lBQUUsT0FBTyxRQUFRLENBQUMsQ0FBQyx5QkFBeUI7UUFFeEcsSUFBSSxNQUFXLENBQUM7UUFFaEIsT0FBTyxDQUFDLElBQUksQ0FBQywyQkFBMkIsUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztRQUUzRSw0Q0FBNEM7UUFDNUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyRCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1NBQ2hEO2FBQ0k7WUFDSCxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFFO1FBRUQsZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBRW5CLG9CQUFvQjtRQUNwQixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNsQjtRQUVELE9BQU8sTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELE1BQU0sQ0FBQyxFQUFNLEVBQUUsSUFBOEI7UUFDM0MsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ25FLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2hELElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sU0FBUyxDQUFDO1FBRW5DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUU5QixvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRW5DLDRCQUE0QjtRQUM1QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDbEQ7UUFFRCxnQkFBZ0I7UUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFFbkIsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUU7WUFDckMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2xCO1FBRUQsT0FBTyxNQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELFVBQVUsQ0FBQyxHQUFTLEVBQUUsSUFBNEI7UUFFaEQsb0RBQW9EO1FBQ3BELE1BQU0sZUFBZSxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQzthQUNoQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO2FBQzlDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVwQixtQkFBbUI7UUFDbkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFdkMsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUU7WUFDckMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2xCO1FBRUQsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUE0QjtRQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksR0FBRyxFQUFXLENBQUM7UUFFdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFcEIsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUU7WUFDckMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDRyxPQUFPLENBQUMsSUFBbUM7O1lBQy9DLElBQUksbUJBQ0YsY0FBYyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLElBQzdDLElBQUksQ0FDUixDQUFDO1lBRUYsb0JBQW9CO1lBQ3BCLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3ZDLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLElBQUksQ0FBQyxJQUFJLGlCQUFpQixDQUFDLENBQUM7Z0JBQ3pFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDM0I7WUFFRCw0RUFBNEU7WUFDNUUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7aUJBQzFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsdUJBQXVCO1lBRTdELDZDQUE2QztZQUM3QyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7WUFFeEMsMkVBQTJFO1lBQzNFLHlEQUF5RDtZQUN6RCxJQUFJLFlBQVksSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzFDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzdGO1lBRUQscUJBQXFCO1lBQ3JCLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUUxQiwwQkFBMEI7Z0JBQzFCLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQzdDO2lCQUNJO2dCQUVILHFEQUFxRDtnQkFDckQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNuQixXQUFXO29CQUNYLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUV0Rix1QkFBdUI7b0JBQ3ZCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixZQUFZO3lCQUNULEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTt3QkFDWCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQy9CLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQzFFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDdEUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFFUixPQUFPLENBQUMsSUFBSSxDQUFDLCtCQUErQixZQUFZLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLENBQUM7aUJBQzFHO2dCQUVELDhDQUE4QztxQkFDekM7b0JBRUgsT0FBTyxDQUFDLElBQUksQ0FBQywrQkFBK0IsUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQztvQkFDbEYsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2lCQUNwRDthQUNGO1lBRUQsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ3pCLENBQUM7S0FBQTtJQUVLLE9BQU8sQ0FBQyxJQUE4Qjs7WUFDMUMsSUFBSSxRQUFhLENBQUM7WUFFbEIsTUFBTSxHQUFHLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO2FBQ3RDLENBQUMsQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMvRCxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDNUQsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLElBQUksY0FBd0IsQ0FBQztZQUU3QixxQkFBcUI7WUFDckIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNuQixJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDakIsaUNBQWlDO29CQUNqQyxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQy9ELFFBQVEsR0FBRyxNQUFNLGFBQWEsQ0FBSSxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN4RjtnQkFDRCxpQ0FBaUM7cUJBQzVCLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUN6QixRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ25ELFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQ2pCLGNBQWMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDckM7YUFDRjtZQUVELHNCQUFzQjtpQkFDakI7Z0JBQ0gsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ3BCLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDcEQ7cUJBQ0ksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ3RCLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDL0QsaUNBQWlDO29CQUNqQyxRQUFRLEdBQUcsTUFBTSxhQUFhLENBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdkYsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDakIsY0FBYyxHQUFHLENBQUMsR0FBRyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2lCQUN4RDthQUNGO1lBRUQsdUNBQXVDO1lBQ3ZDLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUM3QixJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO29CQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxRQUFRLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLG9DQUFvQyxDQUFDLENBQUM7aUJBQ2hIO2dCQUVELG1GQUFtRjtnQkFDbkYsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQ3hDLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2lCQUNqRDthQUNGO1lBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksRUFBRSxrQ0FBTSxJQUFJLEtBQUUsU0FBUyxFQUFFLEtBQUssSUFBRyxDQUFDO1lBQy9ELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBRXBCLHVCQUF1QjtZQUN2QixJQUFJLFNBQVMsRUFBRTtnQkFDYixJQUFJO29CQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsOEJBQThCLElBQUksQ0FBQyxJQUFJLGlCQUFpQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUM7b0JBRTlGLHVDQUF1QztvQkFDdkMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxzQ0FBc0MsRUFBRSxDQUFDLENBQUM7b0JBRXBGLHNDQUFzQztvQkFDdEMsSUFBSSxlQUFlLENBQUMsY0FBYyxDQUFDO3dCQUFFLE1BQU0sYUFBYSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3JIO2dCQUNELE9BQU8sR0FBRyxFQUFFO29CQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ25CLE1BQU0sRUFBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLCtCQUErQixFQUFFLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFDLENBQUM7aUJBQzFIO2FBQ0Y7WUFFRCxvQkFBb0I7WUFDcEIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssRUFBRTtnQkFDckMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQ2xCO1lBRUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM1QixDQUFDO0tBQUE7SUFFRCxXQUFXLENBQUMsSUFBOEI7UUFDeEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFFbkIsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUU7WUFDckMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUE4QjtRQUUzQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDekMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2YsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7YUFDakI7U0FDRjtRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBRXBCLG9CQUFvQjtRQUNwQixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNsQjtJQUNILENBQUM7SUFFRCw2QkFBNkI7SUFFckIsZ0JBQWdCLENBQUMsRUFBTSxFQUFFLElBQStCO1FBQzlELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ3JDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sU0FBUyxDQUFDLENBQUMsYUFBYTtRQUNqRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFYSxjQUFjLENBQUMsRUFBTSxFQUFFLElBQStCOztZQUNsRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4QyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNyQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQUUsT0FBTyxTQUFTLENBQUMsQ0FBQyxhQUFhO1lBRWpELDBGQUEwRjtZQUMxRixJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFO2dCQUMxQixPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZFLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ3JFLElBQUksUUFBUTtvQkFBRSxPQUFPLFFBQVEsQ0FBQztnQkFDOUIsZ0VBQWdFO2FBQ2pFO1lBRUQsbUVBQW1FO1lBQ25FLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDO0tBQUE7SUFFTyxXQUFXLENBQUMsUUFBYSxFQUFFLElBQTZCO1FBQzlELGtEQUFrRDtRQUNsRCxRQUFRLEdBQUcsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO2FBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7ZUFDekIsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUN2RCxDQUFDO1FBRU4sSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFFdkIsd0RBQXdEO1FBQ3hELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXBHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBZ0I7Z0JBQzFDLEtBQUs7Z0JBQ0wsS0FBSyxFQUFFLEtBQUs7YUFDYixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBRXBCLG9CQUFvQjtRQUNwQixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNsQjtJQUNILENBQUM7SUFHRDs7Ozs7T0FLRztJQUNLLGFBQWEsQ0FBQyxJQUFTLEVBQ1QsU0FNQztRQUNyQixJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0QixPQUFPLEVBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFDLENBQUM7U0FDN0I7UUFFRCxvQkFBb0I7UUFDcEIsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFN0IsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLHVEQUF1RDtZQUN2RCxPQUFPLEVBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFDLENBQUM7U0FDbkM7UUFFRCwyQkFBMkI7UUFDM0IsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQ3BCLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN0QztRQUVELDJCQUEyQjtRQUMzQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRTFCLHdDQUF3QztRQUN4QyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQztZQUFFLE9BQU8sRUFBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBQyxDQUFDO1FBRW5ELFVBQVU7UUFDVixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUNuQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNuRTtRQUVELDBDQUEwQztRQUMxQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBRXhCLGtDQUFrQztZQUNsQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtnQkFDM0QsSUFBSSxHQUFHLEVBQUUsQ0FBQzthQUNYO2lCQUNJO2dCQUNILElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNsRiw0QkFBNEI7b0JBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNqRSxzQkFBc0I7b0JBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ2hDO1NBQ0Y7UUFFRCxnQkFBZ0I7YUFDWCxJQUFJLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFDO1lBQzFCLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEM7UUFDRCxZQUFZO2FBQ1AsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFDO1lBQzdCLGdCQUFnQjtTQUNqQjtRQUVELE9BQU8sRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVPLHNCQUFzQixDQUFDLE1BQWdDO1FBQzdELElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPO1lBQUUsT0FBTyxTQUFTLENBQUMsQ0FBQyxpQ0FBaUM7UUFDaEYsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDO1lBQUUsT0FBTyxTQUFTLENBQUMsQ0FBQyxPQUFPO1FBRXZFLCtEQUErRDtRQUMvRCxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDL0YsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUN0QixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRVgsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzlGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLFNBQVM7UUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJ0Bpb25pYy9zdG9yYWdlJztcbmltcG9ydCB7bWFwLCBtZXJnZU1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtFbnRpdHksIEVudGl0eVV0aWxzLCBJRW50aXR5fSBmcm9tICcuLi9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtpc0VtcHR5QXJyYXksIGlzTmlsLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7SUVudGl0aWVzU2VydmljZSwgTG9hZFJlc3VsdH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7Y2hhaW5Qcm9taXNlc30gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcbmltcG9ydCB7RXJyb3JDb2Rlc30gZnJvbSAnLi4vZXJyb3JzJztcblxuZXhwb3J0IGNvbnN0IEVOVElUSUVTX1NUT1JBR0VfS0VZX1BSRUZJWCA9ICdlbnRpdGllcyc7XG5cbmV4cG9ydCB0eXBlIEVudGl0eVN0b3JlVHlwZVBvbGljeU1vZGUgPSAnZGVmYXVsdCcgfCAnYnktaWQnO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRW50aXR5U3RvcmVUeXBlUG9saWN5PFQgZXh0ZW5kcyBFbnRpdHk8VCwgYW55PiA9IEVudGl0eTxhbnksIGFueT4sIEsgPSBrZXlvZiBUPiAge1xuICBtb2RlPzogRW50aXR5U3RvcmVUeXBlUG9saWN5TW9kZTsgLy8gJ2RlZmF1bHQnIGJ5IGRlZmF1bHRcbiAgc2tpcE5vbkxvY2FsRW50aXRpZXM/OiBib29sZWFuOyAvLyBGYWxzZSBieSBkZWZhdWx0XG4gIGxpZ2h0RmllbGRzRXhjbHVkZXM/OiBLW107IC8vIG5vbmUgYnkgZGVmYXVsdFxufVxuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRW50aXR5U3RvcmFnZUxvYWRPcHRpb25zIHtcbiAgZnVsbExvYWQ/OiBib29sZWFuO1xufVxuXG5kZWNsYXJlIGludGVyZmFjZSBFbnRpdHlTdGF0dXMge1xuICBpbmRleDogbnVtYmVyO1xuICBkaXJ0eT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBFbnRpdHlTdG9yZTxcbiAgVCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+LFxuICBJRCA9IG51bWJlcixcbiAgTyBleHRlbmRzIEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucyA9IEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucz4ge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0b3JhZ2VLZXk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb25DaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRydWUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYXBUb0xpZ2h0RW50aXR5OiAoVCkgPT4gVDtcbiAgcHJpdmF0ZSBfY2FjaGU6IFRbXTtcbiAgcHJpdmF0ZSBfc3RhdHVzQnlJZDogTWFwPElELCBFbnRpdHlTdGF0dXM+O1xuICBwcml2YXRlIF9zZXF1ZW5jZTogbnVtYmVyO1xuICBwcml2YXRlIF9kaXJ0eSA9IGZhbHNlO1xuICBwcml2YXRlIF9sb2FkZWQ6IGJvb2xlYW47XG5cbiAgcmVhZG9ubHkgcG9saWN5OiBFbnRpdHlTdG9yZVR5cGVQb2xpY3k8VD47XG5cbiAgZ2V0IGxlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jYWNoZT8ubGVuZ3RoIHx8IDA7XG4gIH1cblxuICBnZXQgY2FjaGUoKTogVFtdIHtcbiAgICByZXR1cm4gdGhpcy5fY2FjaGU7XG4gIH1cblxuICBnZXQgZGlydHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2RpcnR5O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBpc0J5SWRNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBvbGljeS5tb2RlID09PSAnYnktaWQnO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBzdG9yYWdlS2V5QnlJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdG9yYWdlS2V5ICsgJyNpZHMnO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG5hbWU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RvcmFnZTogU3RvcmFnZSxcbiAgICBwb2xpY3k/OiBFbnRpdHlTdG9yZVR5cGVQb2xpY3k8VD4pIHtcbiAgICB0aGlzLnBvbGljeSA9IHBvbGljeSB8fCB7fTtcbiAgICB0aGlzLnJlc2V0KHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgdGhpcy5fZGlydHkgPSBmYWxzZTtcbiAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9zdG9yYWdlS2V5ID0gRU5USVRJRVNfU1RPUkFHRV9LRVlfUFJFRklYICsgJyMnICsgbmFtZTtcbiAgICB0aGlzLl9tYXBUb0xpZ2h0RW50aXR5ID0gdGhpcy5jcmVhdGVMaWdodEVudGl0eU1hcEZuKHRoaXMucG9saWN5KTtcbiAgfVxuXG4gIG5leHRWYWx1ZSgpOiBJRCB7XG4gICAgdGhpcy5fc2VxdWVuY2UgPSB0aGlzLl9zZXF1ZW5jZSAtIDE7XG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzLl9zZXF1ZW5jZSBhcyB1bmtub3duIGFzIElEO1xuICB9XG5cbiAgY3VycmVudFZhbHVlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3NlcXVlbmNlO1xuICB9XG5cbiAgYXN5bmMgbG9hZChpZDogSUQsIG9wdHM/OiBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAodGhpcy5fbWFwVG9MaWdodEVudGl0eSAmJiAoIW9wdHMgfHwgb3B0cy5mdWxsTG9hZCAhPT0gZmFsc2UpKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5sb2FkRnVsbEVudGl0eShpZCwgb3B0cyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxvYWRDYWNoZWRFbnRpdHkoaWQsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhdGNoIGEgc2V0IG9mIGVudGl0aWVzXG4gICAqXG4gICAqIEBwYXJhbSB2YXJpYWJsZXNcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIHdhdGNoQWxsKHZhcmlhYmxlczoge1xuICAgICAgICAgICAgb2Zmc2V0PzogbnVtYmVyO1xuICAgICAgICAgICAgc2l6ZT86IG51bWJlcjtcbiAgICAgICAgICAgIHNvcnRCeT86IHN0cmluZztcbiAgICAgICAgICAgIHNvcnREaXJlY3Rpb24/OiBzdHJpbmc7XG4gICAgICAgICAgICBmaWx0ZXI/OiAoVCkgPT4gYm9vbGVhbjtcbiAgICAgICAgICB9LCBvcHRzPzogTyk6IE9ic2VydmFibGU8TG9hZFJlc3VsdDxUPj4ge1xuXG4gICAgLy8gSWYgbmVlZCBmdWxsIGVudGl0aWVzLCBidXQgdXNlIGxpZ2h0IGVudGl0aWVzIGluIHRoZSBlbnRpdGllcyBhcnJheVxuICAgIGlmICh0aGlzLl9tYXBUb0xpZ2h0RW50aXR5ICYmIChvcHRzICYmIG9wdHMuZnVsbExvYWQgPT09IHRydWUpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tlbnRpdHktc3RvcmVdIFdBUk46IFdhdGNoaW5nIGZ1bGwgZW50aXRpZXMsIHNwbGl0ZWQgYnkgaWQgaW4gZW50aXR5IHN0b3JlLiBUaGlzIGNhbiBiZSBsb25nISBQbGVhc2UgbWFrZSBzdXJlIHlvdSBuZWVkIGZ1bGwgZW50aXRpZXMgaGVyZS4nKTtcbiAgICAgIHJldHVybiB0aGlzLl9vbkNoYW5nZVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAvLyBBcHBseSBmaWx0ZXIgb24gY2FjaGVcbiAgICAgICAgICBtYXAoKF8pID0+IHRoaXMucmVkdWNlQW5kU29ydCh0aGlzLl9jYWNoZSwgdmFyaWFibGVzKSksXG5cbiAgICAgICAgICAvLyBUaGVuIGNvbnZlcnQgaW50byBmdWxsIGVudGl0aWVzICh1c2luZyBwYXJhbGxlbCBqb2JzIC0gLyFcXCBjYW4gdXNlIGxvdCBvZiBtZW1vcnkpXG4gICAgICAgICAgbWVyZ2VNYXAoKHJlcykgPT4gUHJvbWlzZS5hbGwoKHJlcy5kYXRhIHx8IFtdKVxuICAgICAgICAgICAgLm1hcChlID0+IHRoaXMubG9hZEZ1bGxFbnRpdHkoZS5pZCwgb3B0cykpKS50aGVuKGRhdGEgPT4gKHtcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgIHRvdGFsOiByZXMudG90YWxcbiAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIExvYWQgdXNpbmcgZW50aXRpZXMgYXJyYXlcbiAgICByZXR1cm4gdGhpcy5fb25DaGFuZ2VcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKF8pID0+IHRoaXMucmVkdWNlQW5kU29ydCh0aGlzLl9jYWNoZSwgdmFyaWFibGVzKSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogV0lsbCBhcHBseSBhIGZpbHRlciwgdGhlbiBhIHNvcnQsIHRoZW4gYSBwYWdlIHNsaWNlXG4gICAqXG4gICAqIEBwYXJhbSB2YXJpYWJsZXNcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIGFzeW5jIGxvYWRBbGwodmFyaWFibGVzOiB7XG4gICAgb2Zmc2V0PzogbnVtYmVyO1xuICAgIHNpemU/OiBudW1iZXI7XG4gICAgc29ydEJ5Pzogc3RyaW5nO1xuICAgIHNvcnREaXJlY3Rpb24/OiBzdHJpbmc7XG4gICAgZmlsdGVyPzogKFQpID0+IGJvb2xlYW47XG4gIH0sIG9wdHM/OiBPKTogUHJvbWlzZTxMb2FkUmVzdWx0PFQ+PiB7XG5cbiAgICBjb25zdCByZXMgPSB0aGlzLnJlZHVjZUFuZFNvcnQodGhpcy5fY2FjaGUsIHZhcmlhYmxlcyk7XG5cbiAgICAvLyBJZiBzdG9yZSBieSBJRDogbWFrZSBzdXJlIHRvIGZ1bGwgdGhlIGZ1bGwgZW50aXRpZXNcbiAgICBpZiAodGhpcy5fbWFwVG9MaWdodEVudGl0eSAmJiBpc05vdEVtcHR5QXJyYXkocmVzLmRhdGEpICYmIChvcHRzICYmIG9wdHMuZnVsbExvYWQgPT09IHRydWUpKSB7XG4gICAgICAvLyBMb2FkIGZ1bGwgZW50aXRpZXMsIG9uZSBieSBvbmVcbiAgICAgIHJlcy5kYXRhID0gYXdhaXQgY2hhaW5Qcm9taXNlcygocmVzLmRhdGEgfHwgW10pLm1hcChlID0+ICgpID0+IHRoaXMubG9hZChlLmlkKSkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXMgO1xuICB9XG5cbiAgc2F2ZShlbnRpdHk6IFQsIG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbn0pOiBUIHtcbiAgICBjb25zdCBzdGF0dXMgPSBpc05vdE5pbChlbnRpdHkuaWQpICYmIHRoaXMuX3N0YXR1c0J5SWQuZ2V0KGVudGl0eS5pZCkgfHwge2luZGV4OiB1bmRlZmluZWR9O1xuICAgIGNvbnN0IGlzTmV3ID0gaXNOaWwoc3RhdHVzLmluZGV4KTtcbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGlmIChpc05pbChlbnRpdHkuaWQpKSB7XG4gICAgICAgIGVudGl0eS5pZCA9IHRoaXMubmV4dFZhbHVlKCk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICgrZW50aXR5LmlkIDwgMCAmJiArZW50aXR5LmlkID4gdGhpcy5fc2VxdWVuY2UpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdUcnlpbmcgdG8gc2F2ZSBhIGxvY2FsIGVudGl0eSB3aXRoIGFuIGlkID4gc2VxdWVuY2UuIFdpbGwgcmVwbGFjZSBpZCBieSBzZXF1ZW5jZSBuZXh0IHZhbHVlJyk7XG4gICAgICAgIGVudGl0eS5pZCA9IHRoaXMubmV4dFZhbHVlKCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gT0s6IHVzZSBhIHZhbGlkIGlkIDpcbiAgICAgICAgLy8gLSBpZCA+PSAwIChzaG91bGQgYmUgYSByZW1vdGUgaWQpXG4gICAgICAgIC8vIC0gT1IgPCBzZXF1ZW5jZSwgYW5kIG5vdCBleGlzdHMgaW4gdGhlIGluZGV4IG1hcFxuICAgICAgfVxuXG4gICAgICB0aGlzLl9zdGF0dXNCeUlkLnNldChlbnRpdHkuaWQsIHN0YXR1cyk7XG4gICAgICBzdGF0dXMuaW5kZXggPSB0aGlzLl9jYWNoZS5wdXNoKGVudGl0eSkgLSAxO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuX2NhY2hlW3N0YXR1cy5pbmRleF0gPSBlbnRpdHk7XG4gICAgfVxuXG4gICAgLy8gTWFyayBlbnRpdHkgYXMgZGlydHlcbiAgICBzdGF0dXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLy8gTWFyayBzdG9yYWdlIGFzIGRpcnR5XG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cblxuICBzYXZlQWxsKGVudGl0aWVzOiBUW10sIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IHJlc2V0PzogYm9vbGVhbiB9KTogVFtdIHtcbiAgICBpZiAoaXNFbXB0eUFycmF5KGVudGl0aWVzKSAmJiAoIW9wdHMgfHwgb3B0cy5yZXNldCAhPT0gdHJ1ZSkpIHJldHVybiBlbnRpdGllczsgLy8gU2tpcCAoTm90aGluZyB0byBzYXZlKVxuXG4gICAgbGV0IHJlc3VsdDogVFtdO1xuXG4gICAgY29uc29sZS5pbmZvKGBbZW50aXR5LXN0b3JhZ2VdIFNhdmluZyAke2VudGl0aWVzLmxlbmd0aH0gJHt0aGlzLm5hbWV9KHMpYCk7XG5cbiAgICAvLyBGaXJzdCBzYXZlLCBvciByZXNldCB1c2luZyBnaXZlbiBlbnRpdGllc1xuICAgIGlmIChpc0VtcHR5QXJyYXkodGhpcy5fY2FjaGUpIHx8IChvcHRzICYmIG9wdHMucmVzZXQpKSB7XG4gICAgICB0aGlzLnNldEVudGl0aWVzKGVudGl0aWVzLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IGVudGl0aWVzLm1hcCgoZW50aXR5KSA9PiB0aGlzLnNhdmUoZW50aXR5LCB7ZW1pdEV2ZW50OiBmYWxzZX0pKTtcbiAgICB9XG5cbiAgICAvLyBNYXJrIGFzIGRpcnR5XG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQgfHwgdGhpcy5fY2FjaGUuc2xpY2UoKTtcbiAgfVxuXG4gIGRlbGV0ZShpZDogSUQsIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IFQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHN0YXR1cyA9IGlzTm90TmlsKGlkKSA/IHRoaXMuX3N0YXR1c0J5SWQuZ2V0KGlkKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpbmRleCA9IHN0YXR1cyA/IHN0YXR1cy5pbmRleCA6IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNOaWwoaW5kZXgpKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgZW50aXR5ID0gdGhpcy5fY2FjaGVbaW5kZXhdO1xuICAgIGlmICghZW50aXR5KSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgLy8gUmVtb3ZlIGZyb20gY2FjaGVcbiAgICB0aGlzLl9jYWNoZVtpbmRleF0gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fc3RhdHVzQnlJZC5kZWxldGUoZW50aXR5LmlkKTtcblxuICAgIC8vIFJlbW92ZSBmdWxsIGVudGl0eSwgYnkgaWRcbiAgICBpZiAodGhpcy5pc0J5SWRNb2RlKSB7XG4gICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKHRoaXMuX3N0b3JhZ2VLZXkgKyAnIycgKyBpZCk7XG4gICAgfVxuXG4gICAgLy8gTWFyayBhcyBkaXJ0eVxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIEVtaXQgdXBkYXRlIGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50aXR5IGFzIFQ7XG4gIH1cblxuICBkZWxldGVNYW55KGlkczogSURbXSwgb3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFufSk6IFRbXSB7XG5cbiAgICAvLyBEZWxldGUgYnkgaWQsIGJ1dCBOT1QgZW1pdCBldmVudCBvbiBlYWNoIGRlbGV0aW9uXG4gICAgY29uc3QgZGVsZXRlZEVudGl0aWVzID0gKGlkcyB8fCBbXSlcbiAgICAgIC5tYXAoaWQgPT4gdGhpcy5kZWxldGUoaWQsIHtlbWl0RXZlbnQ6IGZhbHNlfSkpXG4gICAgICAuZmlsdGVyKGlzTm90TmlsKTtcblxuICAgIC8vIE5vIGNoYW5nZXM6IGV4aXRcbiAgICBpZiAoIWRlbGV0ZWRFbnRpdGllcy5sZW5ndGgpIHJldHVybiBbXTtcblxuICAgIC8vIEVtaXQgdXBkYXRlIGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZEVudGl0aWVzO1xuICB9XG5cbiAgcmVzZXQob3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFufSkge1xuICAgIHRoaXMuX2NhY2hlID0gW107XG4gICAgdGhpcy5fc2VxdWVuY2UgPSAwO1xuICAgIHRoaXMuX3N0YXR1c0J5SWQgPSBuZXcgTWFwPElELCBhbnk+KCk7XG5cbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcblxuICAgIC8vIEVtaXQgdXBkYXRlIGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIG9wdHNcbiAgICogIG9wdHMuZm9yY2UgOiBmb3JjZSBhbGwgZW50aXRpZXMgdG8gYmUgcGVyc2lzdCwgYW5kIG5vdCBvbmx5IGlmIGRpcnR5XG4gICAqL1xuICBhc3luYyBwZXJzaXN0KG9wdHM/OiB7IHNraXBJZlByaXN0aW5lPzogYm9vbGVhbiB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBvcHRzID0ge1xuICAgICAgc2tpcElmUHJpc3RpbmU6IHRoaXMucG9saWN5LnNraXBOb25Mb2NhbEVudGl0aWVzLFxuICAgICAgLi4ub3B0c1xuICAgIH07XG5cbiAgICAvLyBTa2lwIGlzIG5vdCBkaXJ0eVxuICAgIGlmIChvcHRzLnNraXBJZlByaXN0aW5lICYmICF0aGlzLl9kaXJ0eSkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhgW2VudGl0eS1zdG9yYWdlXSBQZXJzaXN0aW5nICR7dGhpcy5uYW1lfSBub3QgbmVlZC4gU2tpcGApO1xuICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBDb3B5IHNvbWUgZGF0YSwgQkVGT1JFIHRvIGNhbGwgbWFya0FzUHJpc3RpbmUoKSB0byBhbGxvdyBwYXJhbGxlbCBjaGFuZ2VzXG4gICAgY29uc3QgZGlydHlJbmRleGVzID0gdGhpcy5pc0J5SWRNb2RlICYmIEFycmF5LmZyb20odGhpcy5fc3RhdHVzQnlJZC52YWx1ZXMoKSlcbiAgICAgIC5maWx0ZXIocyA9PiAhb3B0cy5za2lwSWZQcmlzdGluZSB8fCAocyAmJiBzLmRpcnR5KSlcbiAgICAgIC5tYXAocyA9PiBzLmluZGV4KTtcbiAgICBjb25zdCBlbnRpdGllcyA9IHRoaXMuX2NhY2hlLnNsaWNlKCk7IC8vIENvcHkgY2FjaGVkIGVudGl0aWVzXG5cbiAgICAvLyBNYXJrIGFsbCAoZW50aXRpZXMgYW5kIHN0YXR1cykgYXMgcHJpc3RpbmVcbiAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG5cbiAgICAvLyBDb252ZXJ0IGRpcnR5IGVudGl0aWVzIGludG8gbGlnaHQgZW50aXRpZXMgKC8hXFwgQUZURVIgdGhlIHByZXZpb3VzIGNvcHkpXG4gICAgLy8gYW5kIHVwZGF0ZSB0aGUgY2FjaGUgKGJ1dCBOT1QgdGhlICdlbnRpdGllcycgdmFyaWFibGUpXG4gICAgaWYgKGRpcnR5SW5kZXhlcyAmJiB0aGlzLl9tYXBUb0xpZ2h0RW50aXR5KSB7XG4gICAgICBkaXJ0eUluZGV4ZXMuZm9yRWFjaChpbmRleCA9PiB0aGlzLl9jYWNoZVtpbmRleF0gPSB0aGlzLl9tYXBUb0xpZ2h0RW50aXR5KGVudGl0aWVzW2luZGV4XSkpO1xuICAgIH1cblxuICAgIC8vIElmIG5vIGVudGl0eSBmb3VuZFxuICAgIGlmIChpc0VtcHR5QXJyYXkoZW50aXRpZXMpKSB7XG5cbiAgICAgIC8vIENsZWFuIHRoZSBsb2NhbCBzdG9yYWdlXG4gICAgICBhd2FpdCB0aGlzLnN0b3JhZ2UucmVtb3ZlKHRoaXMuX3N0b3JhZ2VLZXkpO1xuICAgIH1cbiAgICBlbHNlIHtcblxuICAgICAgLy8gU2F2ZSBlYWNoIGVudGl0eSBpbnRvIGEgdW5pcXVlIGtleSAoYWR2YW5jZWQgbW9kZSlcbiAgICAgIGlmICh0aGlzLmlzQnlJZE1vZGUpIHtcbiAgICAgICAgLy8gU2F2ZSBpZHNcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldCh0aGlzLnN0b3JhZ2VLZXlCeUlkLCBlbnRpdGllcy5maWx0ZXIoaXNOb3ROaWwpLm1hcChlID0+IGUuaWQpKTtcblxuICAgICAgICAvLyBTYXZlZCBkaXJ0eSBlbnRpdGllc1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBkaXJ0eUluZGV4ZXNcbiAgICAgICAgICAgIC5tYXAoaW5kZXggPT4ge1xuICAgICAgICAgICAgICBjb25zdCBlbnRpdHkgPSBlbnRpdGllc1tpbmRleF07XG4gICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYFtlbnRpdHktc3RvcmFnZV0gUGVyc2lzdGluZyAke3RoaXMubmFtZX0jJHtlbnRpdHkuaWR9Li4uYCk7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2Uuc2V0KHRoaXMuX3N0b3JhZ2VLZXkgKyAnIycgKyBlbnRpdHkuaWQsIGVudGl0eSk7XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgY29uc29sZS5pbmZvKGBbZW50aXR5LXN0b3JhZ2VdIFBlcnNpc3RpbmcgJHtkaXJ0eUluZGV4ZXMubGVuZ3RofS8ke2VudGl0aWVzLmxlbmd0aH0gJHt0aGlzLm5hbWV9KHMpLi4uYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNhdmUgYWxsIGVudGl0aWVzIGluIGEgc2luZ2xlIGtleSAoZGVmYXVsdClcbiAgICAgIGVsc2Uge1xuXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW2VudGl0eS1zdG9yYWdlXSBQZXJzaXN0aW5nICR7ZW50aXRpZXMubGVuZ3RofSAke3RoaXMubmFtZX0ocykuLi5gKTtcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldCh0aGlzLl9zdG9yYWdlS2V5LCBlbnRpdGllcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudGl0aWVzLmxlbmd0aDtcbiAgfVxuXG4gIGFzeW5jIHJlc3RvcmUob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBsZXQgZW50aXRpZXM6IFRbXTtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuc3RvcmFnZS5nZXQodGhpcy5fc3RvcmFnZUtleSksXG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0KHRoaXMuc3RvcmFnZUtleUJ5SWQpXG4gICAgXSk7XG4gICAgY29uc3QgdmFsdWVzID0gcmVzWzBdICYmIEFycmF5LmlzQXJyYXkocmVzWzBdKSA/IHJlc1swXSA6IG51bGw7XG4gICAgY29uc3QgaWRzID0gcmVzWzFdICYmIEFycmF5LmlzQXJyYXkocmVzWzFdKSA/IHJlc1sxXSA6IG51bGw7XG4gICAgbGV0IG1pZ3JhdGlvbiA9IGZhbHNlO1xuICAgIGxldCBvbGRLZXlzVG9DbGVhbjogc3RyaW5nW107XG5cbiAgICAvLyBcIlNwbGl0IGJ5IGlkXCIgbW9kZVxuICAgIGlmICh0aGlzLmlzQnlJZE1vZGUpIHtcbiAgICAgIGlmIChpc05vdE5pbChpZHMpKSB7XG4gICAgICAgIC8vIExvYWQgZW50aXR5IGJ5IGlkIChvbmUgYnkgb25lKVxuICAgICAgICBjb25zdCBzdG9yYWdlS2V5cyA9IGlkcy5tYXAoaWQgPT4gdGhpcy5fc3RvcmFnZUtleSArICcjJyArIGlkKTtcbiAgICAgICAgZW50aXRpZXMgPSBhd2FpdCBjaGFpblByb21pc2VzPFQ+KHN0b3JhZ2VLZXlzLm1hcChrZXkgPT4gKCkgPT4gdGhpcy5zdG9yYWdlLmdldChrZXkpKSk7XG4gICAgICB9XG4gICAgICAvLyBNaWdyYXRlIGZyb20gdGhlIHN0YW5kYXJkIG1vZGVcbiAgICAgIGVsc2UgaWYgKGlzTm90TmlsKHZhbHVlcykpIHtcbiAgICAgICAgZW50aXRpZXMgPSB2YWx1ZXMuZmlsdGVyKGUgPT4gZSAmJiBpc05vdE5pbChlLmlkKSk7XG4gICAgICAgIG1pZ3JhdGlvbiA9IHRydWU7XG4gICAgICAgIG9sZEtleXNUb0NsZWFuID0gW3RoaXMuX3N0b3JhZ2VLZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVsc2UgKGRlZmF1bHQgbW9kZSlcbiAgICBlbHNlIHtcbiAgICAgIGlmIChpc05vdE5pbCh2YWx1ZXMpKSB7XG4gICAgICAgIGVudGl0aWVzID0gdmFsdWVzLmZpbHRlcihlID0+IGUgJiYgaXNOb3ROaWwoZS5pZCkpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNOb3ROaWwoaWRzKSkge1xuICAgICAgICBjb25zdCBzdG9yYWdlS2V5cyA9IGlkcy5tYXAoaWQgPT4gdGhpcy5fc3RvcmFnZUtleSArICcjJyArIGlkKTtcbiAgICAgICAgLy8gTG9hZCBlbnRpdHkgYnkgaWQgKG9uZSBieSBvbmUpXG4gICAgICAgIGVudGl0aWVzID0gYXdhaXQgY2hhaW5Qcm9taXNlczxUPihzdG9yYWdlS2V5cy5tYXAoa2V5ID0+ICgpID0+IHRoaXMuc3RvcmFnZS5nZXQoa2V5KSkpO1xuICAgICAgICBtaWdyYXRpb24gPSB0cnVlO1xuICAgICAgICBvbGRLZXlzVG9DbGVhbiA9IFsuLi5zdG9yYWdlS2V5cywgdGhpcy5zdG9yYWdlS2V5QnlJZF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT0ssIHRoZXJlIGlzIHNvbWV0aGluZyBpbiBzdG9yYWdlLi4uXG4gICAgaWYgKGlzTm90RW1wdHlBcnJheShlbnRpdGllcykpIHtcbiAgICAgIGlmIChlbnRpdGllcy5sZW5ndGggPj0gMTAwMCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYFtlbnRpdHktc3RvcmFnZV0gLSBSZXN0b3JpbmcgJHtlbnRpdGllcy5sZW5ndGh9ICR7dGhpcy5uYW1lfS4gQ2hlY2sgaWYgbm90IHRvbyBtYW55IGVsZW1lbnRzPyFgKTtcbiAgICAgIH1cblxuICAgICAgLy8gTWFwIGVudGl0aWVzIGludG8gbGlnaHQgZWxlbWVudCAoaWYgaWYgbm90IG5lZWQgdG8gcGVyc2lzdCwgYmVjYXVzZSBvZiBtaWdyYXRpb25cbiAgICAgIGlmICh0aGlzLl9tYXBUb0xpZ2h0RW50aXR5ICYmICFtaWdyYXRpb24pIHtcbiAgICAgICAgZW50aXRpZXMgPSBlbnRpdGllcy5tYXAodGhpcy5fbWFwVG9MaWdodEVudGl0eSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZXRFbnRpdGllcyhlbnRpdGllcyB8fCBbXSwgey4uLm9wdHMsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5fZGlydHkgPSBmYWxzZTtcblxuICAgIC8vIEZpbmlzaCB0aGUgbWlncmF0aW9uXG4gICAgaWYgKG1pZ3JhdGlvbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc29sZS53YXJuKGBbZW50aXR5LXN0b3JhZ2VdIC0gTWlncmF0ZSAke3RoaXMubmFtZX0gaW50byB7bW9kZTogJyR7dGhpcy5wb2xpY3kubW9kZX0nfS4uLmApO1xuXG4gICAgICAgIC8vIEZvcmNlIHRvIHBlcnNpc3QsIHVzaW5nIHRoZSBuZXcgbW9kZVxuICAgICAgICBhd2FpdCB0aGlzLnBlcnNpc3Qoe3NraXBJZlByaXN0aW5lOiBmYWxzZSAvKiBmb3JjZSBwZXJzaXN0IHVzaW5nIHRoZSBuZXcgbW9kZSAqLyB9KTtcblxuICAgICAgICAvLyBDbGVhbiBvbGQgc3RvcmFnZSBrZXlzIChvbmUgYnkgb25lKVxuICAgICAgICBpZiAoaXNOb3RFbXB0eUFycmF5KG9sZEtleXNUb0NsZWFuKSkgYXdhaXQgY2hhaW5Qcm9taXNlcyhvbGRLZXlzVG9DbGVhbi5tYXAoa2V5ID0+ICgpID0+IHRoaXMuc3RvcmFnZS5yZW1vdmUoa2V5KSkpO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIHRocm93IHtjb2RlOiBFcnJvckNvZGVzLkVOVElUWV9TVE9SQUdFX01JR1JBVElPTl9GQUlMRUQsIG1lc3NhZ2U6ICdFUlJPUi5FTlRJVFlfU1RPUkFHRV9NSUdSQVRJT05fRkFJTEVEJywgZGV0YWlsczogZXJyfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlLmxlbmd0aDtcbiAgfVxuXG4gIG1hcmtBc0RpcnR5KG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIEVtaXQgdXBkYXRlIGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICBtYXJrQXNQcmlzdGluZShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcblxuICAgIGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdGF0dXNCeUlkLnZhbHVlcygpKSB7XG4gICAgICBpZiAoaXNOb3ROaWwocykpIHtcbiAgICAgICAgcy5kaXJ0eSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJpdmF0ZSBsb2FkQ2FjaGVkRW50aXR5KGlkOiBJRCwgb3B0cz86IEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucyk6IFQge1xuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuX3N0YXR1c0J5SWQuZ2V0KGlkKTtcbiAgICBjb25zdCBpbmRleCA9IHN0YXR1cyAmJiBzdGF0dXMuaW5kZXg7XG4gICAgaWYgKGlzTmlsKGluZGV4KSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gbm90IGV4aXN0c1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHRoaXMuX2NhY2hlW2luZGV4XSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRGdWxsRW50aXR5KGlkOiBJRCwgb3B0cz86IEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucyk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuX3N0YXR1c0J5SWQuZ2V0KGlkKTtcbiAgICBjb25zdCBpbmRleCA9IHN0YXR1cyAmJiBzdGF0dXMuaW5kZXg7XG4gICAgaWYgKGlzTmlsKGluZGV4KSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gbm90IGV4aXN0c1xuXG4gICAgLy8gUmVsb2FkIGZyb20gc3RvcmFnZSwgaWYgbmVlZCAoZS5nLiBzb21lIGF0dHJpYnV0ZXMgaGFzIGJlZW4gZXhjbHVkZWQgaW4gbGlnaHQgZWxlbWVudHMpXG4gICAgaWYgKHN0YXR1cy5kaXJ0eSA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoYFtlbnRpdHktc3RvcmFnZV0gRnVsbCByZWxvYWRpbmcgJHt0aGlzLm5hbWV9IyR7aWR9Li4uYCk7XG4gICAgICBjb25zdCBmdWxsRGF0YSA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQodGhpcy5fc3RvcmFnZUtleSArICcjJyArIGlkKTtcbiAgICAgIGlmIChmdWxsRGF0YSkgcmV0dXJuIGZ1bGxEYXRhO1xuICAgICAgLy8gTm90IGZvdW5kIGJ5IGlkLCBjb250aW51ZSBmcm9tIGNhY2hlICh2ZXJzaW9uIHByaW9yIHRvIDEuNS4zKVxuICAgIH1cblxuICAgIC8vIExvYWQgZnJvbSB0aGUgY2FjaGUsIGlmIGRpcnR5IE9SIGlmIHN0b3JhZ2UgaXMgbm90IHNwbGl0ZWQgYnkgaWRcbiAgICByZXR1cm4gdGhpcy5fY2FjaGVbaW5kZXhdO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRFbnRpdGllcyhlbnRpdGllczogVFtdLCBvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIC8vIEZpbHRlciBub24gbmlsIChhbmQgaWYgbmVlZCBub24gbG9jYWwpIGVudGl0aWVzXG4gICAgZW50aXRpZXMgPSAoZW50aXRpZXMgfHwgW10pXG4gICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpc05vdE5pbChpdGVtKVxuICAgICAgICAgICYmICghdGhpcy5wb2xpY3kuc2tpcE5vbkxvY2FsRW50aXRpZXMgfHwgK2l0ZW0uaWQgPCAwKVxuICAgICAgICApO1xuXG4gICAgdGhpcy5fY2FjaGUgPSBlbnRpdGllcztcblxuICAgIC8vIFVwZGF0ZSB0aGUgc2VxdWVuY2Ugd2l0aCBtaW4oaWQpIG9mIGFsbCB0ZW1wb3JhcnkgaWRzXG4gICAgdGhpcy5fc2VxdWVuY2UgPSB0aGlzLl9jYWNoZS5yZWR1Y2UoKHJlcywgaXRlbSkgPT4gK2l0ZW0uaWQgPCAwID8gTWF0aC5taW4ocmVzLCAraXRlbS5pZCkgOiByZXMsIDApO1xuXG4gICAgdGhpcy5fc3RhdHVzQnlJZC5jbGVhcigpO1xuICAgIHRoaXMuX2NhY2hlLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLl9zdGF0dXNCeUlkLnNldChpdGVtLmlkLCA8RW50aXR5U3RhdHVzPntcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGRpcnR5OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIFdJbGwgYXBwbHkgYSBmaWx0ZXIsIHRoZW4gYSBzb3J0LCB0aGVuIGEgcGFnZSBzbGljZVxuICAgKlxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcGFyYW0gdmFyaWFibGVzXG4gICAqL1xuICBwcml2YXRlIHJlZHVjZUFuZFNvcnQoZGF0YTogVFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD86IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT86IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydEJ5Pzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0RGlyZWN0aW9uPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI/OiAoVCkgPT4gYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pOiBMb2FkUmVzdWx0PFQ+IHtcbiAgICBpZiAoaXNFbXB0eUFycmF5KGRhdGEpKSB7XG4gICAgICByZXR1cm4ge2RhdGE6IFtdLCB0b3RhbDogMH07XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIG5pbCB2YWx1ZXNcbiAgICBkYXRhID0gZGF0YS5maWx0ZXIoaXNOb3ROaWwpO1xuXG4gICAgaWYgKCF2YXJpYWJsZXMpIHtcbiAgICAgIC8vIFJldHVybiBhbGwgKGJ1dCBhcnJheSBoYXMgYmVlbiBmaWx0ZXJlZCwgYW5kIGNvcGllZClcbiAgICAgIHJldHVybiB7ZGF0YSwgdG90YWw6IGRhdGEubGVuZ3RofTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSB0aGUgZmlsdGVyLCBpZiBhbnlcbiAgICBpZiAodmFyaWFibGVzLmZpbHRlcikge1xuICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKHZhcmlhYmxlcy5maWx0ZXIpO1xuICAgIH1cblxuICAgIC8vIENvbXB1dGUgdGhlIHRvdGFsIGxlbmd0aFxuICAgIGNvbnN0IHRvdGFsID0gZGF0YS5sZW5ndGg7XG5cbiAgICAvLyBJZiBwYWdlIHNpemU9MCAoZS5nLiBvbmx5IG5lZWQgdG90YWwpXG4gICAgaWYgKHZhcmlhYmxlcy5zaXplID09PSAwKSByZXR1cm4ge2RhdGE6IFtdLCB0b3RhbH07XG5cbiAgICAvLyBTb3J0IGJ5XG4gICAgaWYgKGRhdGEubGVuZ3RoICYmIHZhcmlhYmxlcy5zb3J0QnkpIHtcbiAgICAgIEVudGl0eVV0aWxzLnNvcnQoZGF0YSwgdmFyaWFibGVzLnNvcnRCeSwgdmFyaWFibGVzLnNvcnREaXJlY3Rpb24pO1xuICAgIH1cblxuICAgIC8vIFNsaWNlIGluIGEgcGFnZSAodXNpbmcgb2Zmc2V0IGFuZCBzaXplKVxuICAgIGlmICh2YXJpYWJsZXMub2Zmc2V0ID4gMCkge1xuXG4gICAgICAvLyBPZmZzZXQgYWZ0ZXIgdGhlIGVuZDogbm8gcmVzdWx0XG4gICAgICBpZiAodmFyaWFibGVzLm9mZnNldCA+PSBkYXRhLmxlbmd0aCB8fCB2YXJpYWJsZXMuc2l6ZSA9PT0gMCkge1xuICAgICAgICBkYXRhID0gW107XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZGF0YSA9ICh2YXJpYWJsZXMuc2l6ZSA+IDAgJiYgKCh2YXJpYWJsZXMub2Zmc2V0ICsgdmFyaWFibGVzLnNpemUpIDwgZGF0YS5sZW5ndGgpKSA/XG4gICAgICAgICAgLy8gU2xpY2UgdXNpbmcgbGltaXQgdG8gc2l6ZVxuICAgICAgICAgIGRhdGEuc2xpY2UodmFyaWFibGVzLm9mZnNldCwgdmFyaWFibGVzLm9mZnNldCArIHZhcmlhYmxlcy5zaXplKSA6XG4gICAgICAgICAgLy8gU2xpY2Ugd2l0aG91dCBsaW1pdFxuICAgICAgICAgIGRhdGEuc2xpY2UodmFyaWFibGVzLm9mZnNldCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgYSBsaW1pdFxuICAgIGVsc2UgaWYgKHZhcmlhYmxlcy5zaXplID4gMCl7XG4gICAgICBkYXRhID0gZGF0YS5zbGljZSgwLCB2YXJpYWJsZXMuc2l6ZSk7XG4gICAgfVxuICAgIC8vIE5vIGxpbWl0OlxuICAgIGVsc2UgaWYgKHZhcmlhYmxlcy5zaXplID09PSAtMSl7XG4gICAgICAvLyBLZWVwIGFsbCBkYXRhXG4gICAgfVxuXG4gICAgcmV0dXJuIHtkYXRhLCB0b3RhbH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUxpZ2h0RW50aXR5TWFwRm4ocG9saWN5OiBFbnRpdHlTdG9yZVR5cGVQb2xpY3k8VD4pOiAoVCkgPT4gVCB7XG4gICAgaWYgKHBvbGljeS5tb2RlICE9PSAnYnktaWQnKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBPbmx5IG5lZWQgZm9yIHRoZSAnYnktaWQnIG1vZGVcbiAgICBpZiAoaXNFbXB0eUFycmF5KHBvbGljeS5saWdodEZpZWxkc0V4Y2x1ZGVzKSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gc2tpcFxuXG4gICAgLy8gQ3JlYXRlIGEgaW1tdXRhYmxlIG1hc2sgb2JqZWN0LCB1c2UgdG8gY2xlYW4gc29tZSBwcm9wZXJ0aWVzXG4gICAgY29uc3QgZXhjbHVkZUF0dHJpYnV0ZXNNYXNrID0gT2JqZWN0LmZyZWV6ZSh0aGlzLnBvbGljeS5saWdodEZpZWxkc0V4Y2x1ZGVzLnJlZHVjZSgocmVzLCBhdHRyKSA9PiB7XG4gICAgICByZXNbYXR0cl0gPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sIDxUPnt9KSk7XG5cbiAgICByZXR1cm4gKGVudGl0eSkgPT4gZW50aXR5ID8gT2JqZWN0LmFzc2lnbig8VD57fSwgZW50aXR5LCBleGNsdWRlQXR0cmlidXRlc01hc2spIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgZW50aXRpZXNTdWJqZWN0LlxuICAgKlxuICAgKiBCZWZvcmUgd2VuZGluZyBpdGVtcywgYSBmaWx0ZXIgaXMgYXBwbHksIHRvIHJlbW92ZSBudWxsIHZhbHVlLlxuICAgKiBUaGlzIGZpbHRlciB3aWxsIGNyZWF0ZSBhIGFycmF5IGNvcHkuXG4gICAqL1xuICBwcml2YXRlIGVtaXRFdmVudCgpIHtcbiAgICB0aGlzLl9vbkNoYW5nZS5uZXh0KHRydWUpO1xuICB9XG59XG4iXX0=
@@ -131,6 +131,7 @@ export class SettingsPage extends AppForm {
131
131
  if (this.saving)
132
132
  return; // Skip
133
133
  event === null || event === void 0 ? void 0 : event.preventDefault();
134
+ event === null || event === void 0 ? void 0 : event.stopPropagation();
134
135
  // Remove all empty controls
135
136
  this.propertiesFormHelper.removeAllEmpty();
136
137
  if (!this.form.valid) {
@@ -283,7 +284,7 @@ export class SettingsPage extends AppForm {
283
284
  SettingsPage.decorators = [
284
285
  { type: Component, args: [{
285
286
  selector: 'page-settings',
286
- template: "<app-toolbar [title]=\"'SETTINGS.TITLE'|translate\" color=\"primary\"\n [hasValidate]=\"form.dirty && !saving\"\n [hasClose]=\"!form.dirty && !saving\"\n (onValidate)=\"save($event)\"\n (onClose)=\"close($event)\">\n\n <ion-buttons slot=\"end\">\n <!-- options menu -->\n <ion-button [matMenuTriggerFor]=\"optionsMenu\" [disabled]=\"saving\">\n <mat-icon slot=\"icon-only\">more_vert</mat-icon>\n </ion-button>\n </ion-buttons>\n</app-toolbar>\n\n<!-- Options menu -->\n<mat-menu #optionsMenu=\"matMenu\">\n <!-- Clear cache -->\n <button mat-menu-item (click)=\"clearCache($event)\">\n <ion-label translate>SETTINGS.BTN_CLEAR_CACHE</ion-label>\n </button>\n\n <!-- Reset -->\n <button mat-menu-item\n [disabled]=\"!dirty\"\n (click)=\"cancel($event)\">\n <ion-label>\n <mat-icon><ion-icon slot=\"start\" name=\"refresh\"></ion-icon></mat-icon>&nbsp;\n <span translate>COMMON.BTN_RESET</span>\n </ion-label>\n </button>\n</mat-menu>\n\n<ion-content>\n\n <form [formGroup]=\"form\" novalidate (ngSubmit)=\"save($event)\" class=\"form-container\">\n\n <ion-grid class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding\">\n\n <!-- left margin -->\n <ion-col size=\"0\" size-lg=\"2\">&nbsp;\n </ion-col>\n\n <ion-col class=\"ion-padding\">\n\n <!-- error -->\n <ion-item *ngIf=\"error\" lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <p [innerHTML]=\"'SETTINGS.DESCRIPTION'|translate\"></p>\n\n <!-- account inheritance (desktop) -->\n <mat-form-field [hidden]=\"!isLogin\" *ngIf=\"!mobile; else accountInheritanceMobile\">\n <input matInput hidden formControlName=\"accountInheritance\" type=\"text\">\n\n <!-- check box (if desktop) -->\n <mat-checkbox\n *ngIf=\"!mobile; else accountInheritanceMobile\"\n (change)=\"setAccountInheritance($event.checked)\"\n [checked]=\"accountInheritance\">\n <span translate>SETTINGS.INHERIT_FROM_ACCOUNT</span>\n </mat-checkbox>\n\n <mat-error *ngIf=\"form.controls.accountInheritance.hasError('required')\" translate>ERROR.FIELD_REQUIRED\n </mat-error>\n </mat-form-field>\n\n <!-- account inheritance (if mobile) -->\n <ng-template #accountInheritanceMobile>\n <mat-form-field [hidden]=\"!isLogin\">\n <input matInput hidden formControlName=\"accountInheritance\" type=\"text\">\n\n <!-- slide toggle -->\n <ion-text translate>SETTINGS.INHERIT_FROM_ACCOUNT</ion-text>\n <mat-slide-toggle matSuffix\n (change)=\"setAccountInheritance($event.checked)\"\n [checked]=\"accountInheritance\">\n\n </mat-slide-toggle>\n <mat-error *ngIf=\"form.controls.accountInheritance.hasError('required')\" translate>ERROR.FIELD_REQUIRED\n </mat-error>\n </mat-form-field>\n </ng-template>\n\n <!-- locale -->\n <mat-form-field>\n <mat-select [placeholder]=\"'SETTINGS.LOCALE'|translate\" formControlName=\"locale\" required>\n <mat-option *ngFor=\"let item of locales\" [value]=\"item.key\">\n {{item.value}}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"form.controls.locale.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n\n <!-- Network entry -->\n <h3>\n <ion-text translate>SETTINGS.NETWORK_DIVIDER</ion-text>\n </h3>\n\n <!-- Peer address -->\n <mat-form-field>\n <input matInput type=\"text\" [placeholder]=\"'SETTINGS.PEER_URL'|translate\" formControlName=\"peerUrl\"\n required>\n\n <button mat-icon-button type=\"button\" matSuffix (click)=\"showSelectPeerModal()\" tabindex=\"-1\"\n [title]=\"'SETTINGS.BTN_CHANGE_PEER'|translate\">\n <mat-icon>search</mat-icon>\n </button>\n\n <mat-error *ngIf=\"form.controls.peerUrl.hasError('required')\"\n translate>ERROR.FIELD_REQUIRED\n </mat-error>\n <mat-error *ngIf=\"form.controls.peerUrl.hasError('peerAlive')\"\n translate>SETTINGS.ERROR.PEER_NOT_REACHABLE\n </mat-error>\n <mat-error *ngIf=\"form.controls.peerUrl.hasError('peerNotCompatible')\"\n translate>SETTINGS.ERROR.PEER_NOT_COMPATIBLE\n </mat-error>\n </mat-form-field>\n\n <!-- Offline mode (if mobile) -->\n <mat-form-field *ngIf=\"mobile\">\n <input matInput hidden formControlName=\"accountInheritance\" type=\"text\">\n\n <!-- slide toggle -->\n <ion-text translate>SETTINGS.OFFLINE_MODE</ion-text>\n <mat-slide-toggle matSuffix\n (change)=\"network.setForceOffline($event.checked)\"\n [checked]=\"network.offline\">\n\n </mat-slide-toggle>\n </mat-form-field>\n\n <!-- Data entry -->\n <h3>\n <ion-text translate>SETTINGS.DATA_ENTRY_DIVIDER</ion-text>\n </h3>\n\n <!-- Usage mode -->\n <mat-form-field>\n <mat-select [placeholder]=\"'SETTINGS.USAGE_MODE'|translate\" formControlName=\"usageMode\"\n required>\n <mat-option *ngFor=\"let item of usageModes\" [value]=\"item\">\n {{'SETTINGS.USAGE_MODES.'+item|translate}}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"form.controls.usageMode.hasError('required')\"\n translate>ERROR.FIELD_REQUIRED\n </mat-error>\n </mat-form-field>\n\n <!-- lat/long format-->\n <mat-form-field>\n <mat-select [placeholder]=\"'SETTINGS.LAT_LONG_FORMAT'|translate\" formControlName=\"latLongFormat\"\n required>\n <mat-option *ngFor=\"let item of latLongFormats\" [value]=\"item\">\n {{'COMMON.LAT_LONG.'+item+'_PLACEHOLDER'|translate}}\n </mat-option>\n </mat-select>\n <mat-error\n *ngIf=\"form.controls.latLongFormat.hasError('required')\"\n translate>ERROR.FIELD_REQUIRED\n </mat-error>\n </mat-form-field>\n\n <!-- fields options -->\n <ion-grid formArrayName=\"properties\" class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding\">\n <ion-col class=\"ion-no-padding ion-align-self-end\" size=\"12\">\n <span class=\"toolbar-spacer\"></span>\n\n <!-- Show more options -->\n <ion-button color=\"light\" *ngIf=\"propertiesForm?.length === 0\"\n [title]=\"'SETTINGS.BTN_SHOW_MORE_HELP'|translate\"\n (click)=\"propertiesFormHelper.add()\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n <mat-icon slot=\"end\">arrow_drop_down</mat-icon>\n </ion-button>\n </ion-col>\n </ion-row>\n\n <!-- Fields options -->\n <ng-container *ngFor=\"let propertyForm of propertiesForm?.controls; let i=index\">\n <ion-row class=\"ion-no-padding\" [formGroupName]=\"i\">\n\n <!-- property key -->\n <ion-col class=\"ion-no-padding\">\n <mat-form-field>\n <mat-select formControlName=\"key\"\n [placeholder]=\" 'SETTINGS.PROPERTY_KEY'|translate\">\n <mat-option *ngFor=\"let item of propertyDefinitions\" [value]=\"item.key\">{{ item.label | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <!-- property value -->\n <ion-col class=\"ion-no-padding\" padding-left>\n <app-form-field *ngIf=\"getPropertyDefinition(i); let definition\"\n floatLabel=\"never\"\n [definition]=\"definition\"\n [formControl]=\"propertyForm.controls.value\"\n [placeholder]=\"'SETTINGS.PROPERTY_VALUE' | translate\"\n [required]=\"true\">\n </app-form-field>\n </ion-col>\n <ion-col size=\"2\" class=\"ion-no-padding\">\n <button type=\"button\" mat-icon-button color=\"light\"\n [disabled]=\"loading\"\n [title]=\"'COMMON.BTN_DELETE'|translate\"\n (click)=\"removePropertyAt(i)\">\n <mat-icon>close</mat-icon>\n </button>\n <button *ngIf=\"propertiesFormHelper.isLast(i)\"\n type=\"button\"\n mat-icon-button\n color=\"light\"\n [disabled]=\"loading\"\n [title]=\"'SETTINGS.BTN_ADD_PROPERTY'|translate\"\n (click)=\"propertiesFormHelper.add()\">\n <mat-icon>add</mat-icon>\n </button>\n </ion-col>\n </ion-row>\n </ng-container>\n </ion-grid>\n </ion-col>\n\n <!-- right margin -->\n <ion-col size=\"0\" size-lg=\"2\">&nbsp;\n </ion-col>\n </ion-row>\n </ion-grid>\n\n\n </form>\n</ion-content>\n\n<ion-footer hidden-xs hidden-sm hidden-mobile>\n <app-form-buttons-bar (onCancel)=\"cancel()\" (onSave)=\"save($event)\" [disabled]=\"!form.dirty || saving\"></app-form-buttons-bar>\n</ion-footer>\n",
287
+ template: "<app-toolbar [title]=\"'SETTINGS.TITLE'|translate\" color=\"primary\"\n [hasValidate]=\"dirty && !saving\"\n [hasClose]=\"!dirty && !saving\"\n (onValidate)=\"save($event)\"\n (onClose)=\"close($event)\">\n\n <ion-buttons slot=\"end\">\n <!-- options menu -->\n <ion-button [matMenuTriggerFor]=\"optionsMenu\" [disabled]=\"saving\">\n <mat-icon slot=\"icon-only\">more_vert</mat-icon>\n </ion-button>\n </ion-buttons>\n</app-toolbar>\n\n<!-- Options menu -->\n<mat-menu #optionsMenu=\"matMenu\">\n <!-- Clear cache -->\n <button mat-menu-item (click)=\"clearCache($event)\">\n <ion-label translate>SETTINGS.BTN_CLEAR_CACHE</ion-label>\n </button>\n\n <!-- Reset -->\n <button mat-menu-item\n [disabled]=\"!dirty\"\n (click)=\"cancel($event)\">\n <ion-label>\n <mat-icon><ion-icon slot=\"start\" name=\"refresh\"></ion-icon></mat-icon>&nbsp;\n <span translate>COMMON.BTN_RESET</span>\n </ion-label>\n </button>\n</mat-menu>\n\n<ion-content>\n\n <form [formGroup]=\"form\" novalidate (ngSubmit)=\"save($event)\" class=\"form-container\">\n\n <ion-grid class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding\">\n\n <!-- left margin -->\n <ion-col size=\"0\" size-lg=\"2\">&nbsp;\n </ion-col>\n\n <ion-col class=\"ion-padding\">\n\n <!-- error -->\n <ion-item *ngIf=\"error\" lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <p [innerHTML]=\"'SETTINGS.DESCRIPTION'|translate\"></p>\n\n <!-- account inheritance (desktop) -->\n <mat-form-field [hidden]=\"!isLogin\" *ngIf=\"!mobile; else accountInheritanceMobile\">\n <input matInput hidden formControlName=\"accountInheritance\" type=\"text\">\n\n <!-- check box (if desktop) -->\n <mat-checkbox\n *ngIf=\"!mobile; else accountInheritanceMobile\"\n (change)=\"setAccountInheritance($event.checked)\"\n [checked]=\"accountInheritance\">\n <span translate>SETTINGS.INHERIT_FROM_ACCOUNT</span>\n </mat-checkbox>\n\n <mat-error *ngIf=\"form.controls.accountInheritance.hasError('required')\" translate>ERROR.FIELD_REQUIRED\n </mat-error>\n </mat-form-field>\n\n <!-- account inheritance (if mobile) -->\n <ng-template #accountInheritanceMobile>\n <mat-form-field [hidden]=\"!isLogin\">\n <input matInput hidden formControlName=\"accountInheritance\" type=\"text\">\n\n <!-- slide toggle -->\n <ion-text translate>SETTINGS.INHERIT_FROM_ACCOUNT</ion-text>\n <mat-slide-toggle matSuffix\n (change)=\"setAccountInheritance($event.checked)\"\n [checked]=\"accountInheritance\">\n\n </mat-slide-toggle>\n <mat-error *ngIf=\"form.controls.accountInheritance.hasError('required')\" translate>ERROR.FIELD_REQUIRED\n </mat-error>\n </mat-form-field>\n </ng-template>\n\n <!-- locale -->\n <mat-form-field>\n <mat-select [placeholder]=\"'SETTINGS.LOCALE'|translate\" formControlName=\"locale\" required>\n <mat-option *ngFor=\"let item of locales\" [value]=\"item.key\">\n {{item.value}}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"form.controls.locale.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n\n <!-- Network entry -->\n <h3>\n <ion-text translate>SETTINGS.NETWORK_DIVIDER</ion-text>\n </h3>\n\n <!-- Peer address -->\n <mat-form-field>\n <input matInput type=\"text\" [placeholder]=\"'SETTINGS.PEER_URL'|translate\" formControlName=\"peerUrl\"\n required>\n\n <button mat-icon-button type=\"button\" matSuffix (click)=\"showSelectPeerModal()\" tabindex=\"-1\"\n [title]=\"'SETTINGS.BTN_CHANGE_PEER'|translate\">\n <mat-icon>search</mat-icon>\n </button>\n\n <mat-error *ngIf=\"form.controls.peerUrl.hasError('required')\"\n translate>ERROR.FIELD_REQUIRED\n </mat-error>\n <mat-error *ngIf=\"form.controls.peerUrl.hasError('peerAlive')\"\n translate>SETTINGS.ERROR.PEER_NOT_REACHABLE\n </mat-error>\n <mat-error *ngIf=\"form.controls.peerUrl.hasError('peerNotCompatible')\"\n translate>SETTINGS.ERROR.PEER_NOT_COMPATIBLE\n </mat-error>\n </mat-form-field>\n\n <!-- Offline mode (if mobile) -->\n <mat-form-field *ngIf=\"mobile\">\n <input matInput hidden formControlName=\"accountInheritance\" type=\"text\">\n\n <!-- slide toggle -->\n <ion-text translate>SETTINGS.OFFLINE_MODE</ion-text>\n <mat-slide-toggle matSuffix\n (change)=\"network.setForceOffline($event.checked)\"\n [checked]=\"network.offline\">\n\n </mat-slide-toggle>\n </mat-form-field>\n\n <!-- Data entry -->\n <h3>\n <ion-text translate>SETTINGS.DATA_ENTRY_DIVIDER</ion-text>\n </h3>\n\n <!-- Usage mode -->\n <mat-form-field>\n <mat-select [placeholder]=\"'SETTINGS.USAGE_MODE'|translate\" formControlName=\"usageMode\"\n required>\n <mat-option *ngFor=\"let item of usageModes\" [value]=\"item\">\n {{'SETTINGS.USAGE_MODES.'+item|translate}}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"form.controls.usageMode.hasError('required')\"\n translate>ERROR.FIELD_REQUIRED\n </mat-error>\n </mat-form-field>\n\n <!-- lat/long format-->\n <mat-form-field>\n <mat-select [placeholder]=\"'SETTINGS.LAT_LONG_FORMAT'|translate\" formControlName=\"latLongFormat\"\n required>\n <mat-option *ngFor=\"let item of latLongFormats\" [value]=\"item\">\n {{'COMMON.LAT_LONG.'+item+'_PLACEHOLDER'|translate}}\n </mat-option>\n </mat-select>\n <mat-error\n *ngIf=\"form.controls.latLongFormat.hasError('required')\"\n translate>ERROR.FIELD_REQUIRED\n </mat-error>\n </mat-form-field>\n\n <!-- fields options -->\n <ion-grid formArrayName=\"properties\" class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding\">\n <ion-col class=\"ion-no-padding ion-align-self-end\" size=\"12\">\n <span class=\"toolbar-spacer\"></span>\n\n <!-- Show more options -->\n <ion-button color=\"light\" *ngIf=\"propertiesForm?.length === 0\"\n [title]=\"'SETTINGS.BTN_SHOW_MORE_HELP'|translate\"\n (click)=\"propertiesFormHelper.add()\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n <mat-icon slot=\"end\">arrow_drop_down</mat-icon>\n </ion-button>\n </ion-col>\n </ion-row>\n\n <!-- Fields options -->\n <ng-container *ngFor=\"let propertyForm of propertiesForm?.controls; let i=index\">\n <ion-row class=\"ion-no-padding\" [formGroupName]=\"i\">\n\n <!-- property key -->\n <ion-col class=\"ion-no-padding\">\n <mat-form-field>\n <mat-select formControlName=\"key\"\n [placeholder]=\" 'SETTINGS.PROPERTY_KEY'|translate\">\n <mat-option *ngFor=\"let item of propertyDefinitions\" [value]=\"item.key\">{{ item.label | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <!-- property value -->\n <ion-col class=\"ion-no-padding\" padding-left>\n <app-form-field *ngIf=\"getPropertyDefinition(i); let definition\"\n floatLabel=\"never\"\n [definition]=\"definition\"\n [formControl]=\"propertyForm.controls.value\"\n [placeholder]=\"'SETTINGS.PROPERTY_VALUE' | translate\"\n [required]=\"true\">\n </app-form-field>\n </ion-col>\n <ion-col size=\"2\" class=\"ion-no-padding\">\n <button type=\"button\" mat-icon-button color=\"light\"\n [disabled]=\"loading\"\n [title]=\"'COMMON.BTN_DELETE'|translate\"\n (click)=\"removePropertyAt(i)\">\n <mat-icon>close</mat-icon>\n </button>\n <button *ngIf=\"propertiesFormHelper.isLast(i)\"\n type=\"button\"\n mat-icon-button\n color=\"light\"\n [disabled]=\"loading\"\n [title]=\"'SETTINGS.BTN_ADD_PROPERTY'|translate\"\n (click)=\"propertiesFormHelper.add()\">\n <mat-icon>add</mat-icon>\n </button>\n </ion-col>\n </ion-row>\n </ng-container>\n </ion-grid>\n </ion-col>\n\n <!-- right margin -->\n <ion-col size=\"0\" size-lg=\"2\">&nbsp;\n </ion-col>\n </ion-row>\n </ion-grid>\n\n\n </form>\n</ion-content>\n\n<ion-footer hidden-xs hidden-sm hidden-mobile>\n <app-form-buttons-bar (onCancel)=\"cancel()\" (onSave)=\"save($event)\" [disabled]=\"!form.dirty || saving\"></app-form-buttons-bar>\n</ion-footer>\n",
287
288
  providers: [
288
289
  { provide: ValidatorService, useExisting: LocalSettingsValidatorService },
289
290
  ],
@@ -304,4 +305,4 @@ SettingsPage.ctorParameters = () => [
304
305
  { type: NetworkService },
305
306
  { type: Array, decorators: [{ type: Inject, args: [APP_LOCALES,] }] }
306
307
  ];
307
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MucGFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXR0aW5ncy9zZXR0aW5ncy5wYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBQ3pILE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxFQUFDLFdBQVcsRUFBeUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDbEQsT0FBTyxFQUFZLFdBQVcsRUFBeUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxFQUFDLFlBQVksRUFBRSxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUM3RixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3RFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRXhFLE9BQU8sRUFBQyxLQUFLLEVB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Q0FBQyxDQUFDO2dCQUMvSSxJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDakQsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUM7YUFDdkU7WUFFRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7S0FBQTtJQUVTLGtCQUFrQjtRQUMxQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFeEUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFUyxZQUFZO1FBQ3BCLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekIsQ0FBQzs7O1lBcFVGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsZUFBZTtnQkFDekIsNm1VQUFpQztnQkFDakMsU0FBUyxFQUFFO29CQUNULEVBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSw2QkFBNkIsRUFBQztpQkFDeEU7Z0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07YUFDaEQ7OztZQTlCc0UsUUFBUTtZQVd2RSxlQUFlO1lBU2YsTUFBTTtZQVZOLDZCQUE2QjtZQU83QixlQUFlO1lBVGYsZ0JBQWdCO1lBSEwsV0FBVztZQUp0QixjQUFjO1lBYWQsb0JBQW9CO1lBZEssaUJBQWlCO1lBWTFDLGNBQWM7d0NBMERqQixNQUFNLFNBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEluamVjdCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWNjb3VudFNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL2FjY291bnQuc2VydmljZSc7XG5pbXBvcnQge0VudGl0eVV0aWxzfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtBUFBfTE9DQUxFUywgTG9jYWxlQ29uZmlnLCBMb2NhbFNldHRpbmdzLCBVc2FnZU1vZGV9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL3NldHRpbmdzLm1vZGVsJztcbmltcG9ydCB7UGVlcn0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvcGVlci5tb2RlbCc7XG5pbXBvcnQge0Zvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7QXBwRm9ybX0gZnJvbSAnLi4vZm9ybS9mb3JtLmNsYXNzJztcbmltcG9ydCB7QXBwRm9ybVV0aWxzLCBGb3JtQXJyYXlIZWxwZXJ9IGZyb20gJy4uL2Zvcm0vZm9ybS51dGlscyc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtWYWxpZGF0b3JTZXJ2aWNlfSBmcm9tICdAZS1pcy9uZ3gtbWF0ZXJpYWwtdGFibGUnO1xuaW1wb3J0IHtMb2NhbFNldHRpbmdzVmFsaWRhdG9yU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvdmFsaWRhdG9yL2xvY2FsLXNldHRpbmdzLnZhbGlkYXRvcic7XG5pbXBvcnQge1BsYXRmb3JtU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvcGxhdGZvcm0uc2VydmljZSc7XG5pbXBvcnQge05ldHdvcmtTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHtpc05pbCwgaXNOaWxPckJsYW5rLCB0b0Jvb2xlYW59IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtMb2NhbFNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQge0Zvcm1GaWVsZERlZmluaXRpb24sIEZvcm1GaWVsZERlZmluaXRpb25NYXB9IGZyb20gJy4uLy4uL3NoYXJlZC9mb3JtL2ZpZWxkLm1vZGVsJztcbmltcG9ydCB7bWVyZ2V9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtBbGVydENvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7QWxlcnRzfSBmcm9tICcuLi8uLi9zaGFyZWQvYWxlcnRzJztcbmltcG9ydCB7UHJvcGVydHl9IGZyb20gJy4uLy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7Q2FuTGVhdmV9IGZyb20gJy4uLy4uL3NoYXJlZC9ndWFyZC9jb21wb25lbnQtZGlydHkuZ3VhcmQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwYWdlLXNldHRpbmdzJyxcbiAgdGVtcGxhdGVVcmw6ICdzZXR0aW5ncy5wYWdlLmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7cHJvdmlkZTogVmFsaWRhdG9yU2VydmljZSwgdXNlRXhpc3Rpbmc6IExvY2FsU2V0dGluZ3NWYWxpZGF0b3JTZXJ2aWNlfSxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgU2V0dGluZ3NQYWdlIGV4dGVuZHMgQXBwRm9ybTxMb2NhbFNldHRpbmdzPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDYW5MZWF2ZSB7XG5cbiAgcHJpdmF0ZSBkYXRhOiBMb2NhbFNldHRpbmdzO1xuXG4gIG1vYmlsZTogYm9vbGVhbjtcbiAgc2F2aW5nID0gZmFsc2U7XG4gIHVzYWdlTW9kZXM6IFVzYWdlTW9kZVtdID0gWydGSUVMRCcsICdERVNLJ107XG5cbiAgcHJvcGVydHlEZWZpbml0aW9uczogRm9ybUZpZWxkRGVmaW5pdGlvbltdO1xuICBwcm9wZXJ0eURlZmluaXRpb25zQnlLZXk6IEZvcm1GaWVsZERlZmluaXRpb25NYXAgPSB7fTtcbiAgcHJvcGVydHlEZWZpbml0aW9uc0J5SW5kZXg6IHsgW2luZGV4OiBudW1iZXJdOiBGb3JtRmllbGREZWZpbml0aW9uIH0gPSB7fTtcbiAgcHJvcGVydGllc0Zvcm1IZWxwZXI6IEZvcm1BcnJheUhlbHBlcjxQcm9wZXJ0eT47XG5cbiAgbGF0TG9uZ0Zvcm1hdHMgPSBbJ0RETU1TUycsICdERE1NJywgJ0REJ107XG5cbiAgZ2V0IGFjY291bnRJbmhlcml0YW5jZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzWydhY2NvdW50SW5oZXJpdGFuY2UnXS52YWx1ZTtcbiAgfVxuXG4gIGdldCBpc0xvZ2luKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFjY291bnRTZXJ2aWNlLmlzTG9naW4oKTtcbiAgfVxuXG4gIGdldCBwcm9wZXJ0aWVzRm9ybSgpOiBGb3JtQXJyYXkge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdwcm9wZXJ0aWVzJykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1TZXJ2aWNlLFxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdG9yU2VydmljZTogTG9jYWxTZXR0aW5nc1ZhbGlkYXRvclNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFsZXJ0Q3RybDogQWxlcnRDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcm90ZWN0ZWQgYWNjb3VudFNlcnZpY2U6IEFjY291bnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBzZXR0aW5nczogTG9jYWxTZXR0aW5nc1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgbmV0d29yazogTmV0d29ya1NlcnZpY2UsXG4gICAgQEluamVjdChBUFBfTE9DQUxFUykgcHVibGljIGxvY2FsZXM6IExvY2FsZUNvbmZpZ1tdXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yLCB2YWxpZGF0b3JTZXJ2aWNlLmdldEZvcm1Hcm91cCgpKTtcblxuICAgIHRoaXMucHJvcGVydGllc0Zvcm1IZWxwZXIgPSBuZXcgRm9ybUFycmF5SGVscGVyPFByb3BlcnR5PihcbiAgICAgIHRoaXMuZm9ybS5nZXQoJ3Byb3BlcnRpZXMnKSBhcyBGb3JtQXJyYXksXG4gICAgICAodmFsdWUpID0+IHRoaXMudmFsaWRhdG9yU2VydmljZS5nZXRQcm9wZXJ0eUZvcm1Hcm91cCh2YWx1ZSksXG4gICAgICAodjEsIHYyKSA9PiAoIXYxICYmICF2MikgfHwgKHYxLmtleSA9PT0gdjIua2V5KSxcbiAgICAgICh2YWx1ZSkgPT4gIGlzTmlsKHZhbHVlKSB8fCAoaXNOaWwodmFsdWUua2V5KSAmJiBpc05pbCh2YWx1ZS52YWx1ZSkpLFxuICAgICAge1xuICAgICAgICBhbGxvd0VtcHR5QXJyYXk6IHRydWVcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tb2JpbGUgPSB0aGlzLnBsYXRmb3JtLm1vYmlsZTtcblxuICAgIC8vIEJ5IGRlZmF1bHQsIGRpc2FibGUgdGhlIGZvcm1cbiAgICB0aGlzLl9lbmFibGUgPSBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAvLyBNYWtlIHN1cmUgcGxhdGZvcm0gaXMgcmVhZHlcbiAgICBhd2FpdCB0aGlzLnBsYXRmb3JtLnJlYWR5KCk7XG5cbiAgICB0aGlzLnByb3BlcnR5RGVmaW5pdGlvbnMgPSB0aGlzLnNldHRpbmdzLm9wdGlvbkRlZnMuc2xpY2UoKTsgLy8gY29weSBvcHRpb25zXG4gICAgdGhpcy5wcm9wZXJ0eURlZmluaXRpb25zLmZvckVhY2gobyA9PiB0aGlzLnByb3BlcnR5RGVmaW5pdGlvbnNCeUtleVtvLmtleV0gPSBvKTsgLy8gZmlsbCBtYXBcblxuICAgIC8vIExvYWQgc2V0dGluZ3NcbiAgICBhd2FpdCB0aGlzLmxvYWQoKTtcblxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICBtZXJnZShcbiAgICAgICAgdGhpcy5hY2NvdW50U2VydmljZS5vbkxvZ2luLFxuICAgICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9nb3V0XG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuc2V0QWNjb3VudEluaGVyaXRhbmNlKHRoaXMuYWNjb3VudEluaGVyaXRhbmNlKSkpO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlEZWZpbml0aW9uKGluZGV4OiBudW1iZXIpOiBGb3JtRmllbGREZWZpbml0aW9uIHtcbiAgICBsZXQgZGVmaW5pdGlvbiA9IHRoaXMucHJvcGVydHlEZWZpbml0aW9uc0J5SW5kZXhbaW5kZXhdO1xuICAgIGlmICghZGVmaW5pdGlvbikge1xuICAgICAgZGVmaW5pdGlvbiA9IHRoaXMudXBkYXRlUHJvcGVydHlEZWZpbml0aW9uKGluZGV4KTtcbiAgICAgIHRoaXMucHJvcGVydHlEZWZpbml0aW9uc0J5SW5kZXhbaW5kZXhdID0gZGVmaW5pdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICB1cGRhdGVQcm9wZXJ0eURlZmluaXRpb24oaW5kZXg6IG51bWJlcik6IEZvcm1GaWVsZERlZmluaXRpb24ge1xuICAgIGNvbnN0IGtleSA9ICh0aGlzLnByb3BlcnRpZXNGb3JtLmF0KGluZGV4KSBhcyBGb3JtR3JvdXApLmNvbnRyb2xzLmtleS52YWx1ZTtcbiAgICBjb25zdCBkZWZpbml0aW9uID0ga2V5ICYmIHRoaXMucHJvcGVydHlEZWZpbml0aW9uc0J5S2V5W2tleV0gfHwgbnVsbDtcbiAgICB0aGlzLnByb3BlcnR5RGVmaW5pdGlvbnNCeUluZGV4W2luZGV4XSA9IGRlZmluaXRpb247IC8vIHVwZGF0ZSBtYXAgYnkgaW5kZXhcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgcmVtb3ZlUHJvcGVydHlBdChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzRm9ybUhlbHBlci5yZW1vdmVBdChpbmRleCk7XG4gICAgdGhpcy5wcm9wZXJ0eURlZmluaXRpb25zQnlJbmRleCA9IHt9OyAvLyBjbGVhciBjYWNoZSBieSBpbmRleFxuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBhc3luYyBsb2FkKCkge1xuXG4gICAgdGhpcy5tYXJrQXNMb2FkaW5nKCk7XG4gICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBMb2FkaW5nIHNldHRpbmdzLi4uJyk7XG5cbiAgICBjb25zdCBkYXRhID0gdGhpcy5zZXR0aW5ncy5zZXR0aW5ncztcblxuICAgIC8vIFNldCBkZWZhdWx0c1xuICAgIGRhdGEuYWNjb3VudEluaGVyaXRhbmNlID0gdG9Cb29sZWFuKGRhdGEuYWNjb3VudEluaGVyaXRhbmNlLCB0cnVlKTtcbiAgICBkYXRhLmxvY2FsZSA9IGRhdGEubG9jYWxlIHx8IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nIHx8IHRoaXMudHJhbnNsYXRlLmRlZmF1bHRMYW5nO1xuICAgIGRhdGEubGF0TG9uZ0Zvcm1hdCA9IGRhdGEubGF0TG9uZ0Zvcm1hdCB8fCAnRERNTVNTJztcbiAgICBkYXRhLnVzYWdlTW9kZSA9IGRhdGEudXNhZ2VNb2RlIHx8ICdERVNLJztcblxuICAgIC8vIFNldCBwZWVyXG4gICAgaWYgKGlzTmlsT3JCbGFuayhkYXRhLnBlZXJVcmwpKSB7XG4gICAgICBhd2FpdCB0aGlzLm5ldHdvcmsucmVhZHkoKTtcbiAgICAgIGNvbnN0IHBlZXIgPSB0aGlzLm5ldHdvcmsucGVlcjtcbiAgICAgIGRhdGEucGVlclVybCA9IHBlZXIgJiYgcGVlci51cmw7XG4gICAgfVxuXG4gICAgLy8gUmVtZW1iZXIgZGF0YVxuICAgIHRoaXMudXBkYXRlVmlldyhkYXRhKTtcbiAgfVxuXG4gIHVwZGF0ZVZpZXcoZGF0YTogTG9jYWxTZXR0aW5ncykge1xuICAgIGlmICghZGF0YSkgcmV0dXJuOyAvL3NraXBcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuXG4gICAgY29uc3QganNvbjogYW55ID0gey4uLmRhdGF9O1xuXG4gICAgLy8gVHJhbnNmb3JtIHByb3BlcnRpZXMgbWFwIGludG8gYXJyYXlcbiAgICBqc29uLnByb3BlcnRpZXMgPSBFbnRpdHlVdGlscy5nZXRNYXBBc0FycmF5KGRhdGEucHJvcGVydGllcyB8fCB7fSk7XG4gICAgdGhpcy5wcm9wZXJ0aWVzRm9ybUhlbHBlci5yZXNpemUoanNvbi5wcm9wZXJ0aWVzLmxlbmd0aCk7XG5cbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShqc29uLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcblxuICAgIHRoaXMuZW5hYmxlKHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG5cbiAgICAvLyBBcHBseSBpbmhlcml0YW5jZVxuICAgIHRoaXMuc2V0QWNjb3VudEluaGVyaXRhbmNlKGRhdGEuYWNjb3VudEluaGVyaXRhbmNlLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuXG4gICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcbiAgICB0aGlzLmVycm9yID0gbnVsbDtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgYXN5bmMgc2F2ZShldmVudD86IFVJRXZlbnQsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5zYXZpbmcpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAvLyBSZW1vdmUgYWxsIGVtcHR5IGNvbnRyb2xzXG4gICAgdGhpcy5wcm9wZXJ0aWVzRm9ybUhlbHBlci5yZW1vdmVBbGxFbXB0eSgpO1xuXG4gICAgaWYgKCF0aGlzLmZvcm0udmFsaWQpIHtcbiAgICAgIGF3YWl0IEFwcEZvcm1VdGlscy53YWl0V2hpbGVQZW5kaW5nKHRoaXMuZm9ybSk7XG5cbiAgICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xuICAgICAgICBBcHBGb3JtVXRpbHMubG9nRm9ybUVycm9ycyh0aGlzLmZvcm0pO1xuICAgICAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBTYXZpbmcgbG9jYWwgc2V0dGluZ3MuLi4nKTtcblxuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdldFZhbHVlKCk7XG5cbiAgICAvLyBDaGVjayBwZWVyIGFsaXZlLCBiZWZvcmUgc2F2aW5nXG4gICAgY29uc3QgcGVlckNoYW5nZWQgPSB0aGlzLmZvcm0uZ2V0KCdwZWVyVXJsJykuZGlydHk7XG5cbiAgICAvLyBDbGVhbiBwYWdlIGhpc3RvcnksIHdoZW4gcGVlciBjaGFuZ2VkXG4gICAgaWYgKHBlZXJDaGFuZ2VkKSBkYXRhLnBhZ2VIaXN0b3J5ID0gW107XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5kaXNhYmxlKCk7XG5cbiAgICAgIGF3YWl0IHRoaXMuc2V0dGluZ3MuYXBwbHkoZGF0YSk7XG4gICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuXG4gICAgICAvLyBJZiBwZWVyIGNoYW5nZWRcbiAgICAgIGlmIChwZWVyQ2hhbmdlZCkge1xuICAgICAgICAvLyBSZXN0YXJ0IHRoZSBuZXR3b3JrXG4gICAgICAgIHRoaXMubmV0d29yay5wZWVyID0gUGVlci5wYXJzZVVybChkYXRhLnBlZXJVcmwpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIHRoaXMuZXJyb3IgPSBlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmVuYWJsZSh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuXG4gICAgICAvLyBBcHBseSBpbmhlcml0YW5jZVxuICAgICAgdGhpcy5zZXRBY2NvdW50SW5oZXJpdGFuY2UoZGF0YS5hY2NvdW50SW5oZXJpdGFuY2UsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG5cbiAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG5cbiAgc2V0QWNjb3VudEluaGVyaXRhbmNlKGVuYWJsZTogYm9vbGVhbiwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgLy8gTWFrZSBzdXJlIHRvIHVwZGF0ZSB0aGUgdmFsdWUgaW4gY29udHJvbFxuICAgIHRoaXMuZm9ybS5jb250cm9sc1snYWNjb3VudEluaGVyaXRhbmNlJ10uc2V0VmFsdWUoZW5hYmxlLCBvcHRzKTtcbiAgICBpZiAodGhpcy5kYXRhLmFjY291bnRJbmhlcml0YW5jZSAhPT0gZW5hYmxlKSB7XG4gICAgICB0aGlzLmZvcm0uY29udHJvbHNbJ2FjY291bnRJbmhlcml0YW5jZSddLm1hcmtBc0RpcnR5KHtvbmx5U2VsZjogZmFsc2V9KTtcbiAgICB9XG5cbiAgICBpZiAoZW5hYmxlKSB7XG4gICAgICBpZiAodGhpcy5pc0xvZ2luKSB7XG4gICAgICAgIC8vIEZvcmNlIHVzaW5nIGFjY291bnQgc2V0dGluZ3NcbiAgICAgICAgY29uc3QgYWNjb3VudCA9IHRoaXMuYWNjb3VudFNlcnZpY2UuYWNjb3VudDtcblxuICAgICAgICAvLyBDb3B5IHZhbHVlc1xuICAgICAgICBpZiAoYWNjb3VudC5zZXR0aW5ncykge1xuICAgICAgICAgIGlmIChhY2NvdW50LnNldHRpbmdzLmxvY2FsZSkgdGhpcy5mb3JtLmdldCgnbG9jYWxlJykuc2V0VmFsdWUoYWNjb3VudC5zZXR0aW5ncy5sb2NhbGUsIG9wdHMpO1xuICAgICAgICAgIGlmIChhY2NvdW50LnNldHRpbmdzLmxhdExvbmdGb3JtYXQpIHRoaXMuZm9ybS5nZXQoJ2xhdExvbmdGb3JtYXQnKS5zZXRWYWx1ZShhY2NvdW50LnNldHRpbmdzLmxhdExvbmdGb3JtYXQsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIERpc2FibGUgZmllbGRzXG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2xvY2FsZScpLmRpc2FibGUob3B0cyk7XG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2xhdExvbmdGb3JtYXQnKS5kaXNhYmxlKG9wdHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRW5hYmxlIGZpZWxkc1xuICAgICAgICB0aGlzLmZvcm0uZ2V0KCdsb2NhbGUnKS5lbmFibGUob3B0cyk7XG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2xhdExvbmdGb3JtYXQnKS5lbmFibGUob3B0cyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlc3RvcmUgcHJldmlvdXMgdmFsdWVzXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdsb2NhbGUnKS5zZXRWYWx1ZSh0aGlzLmRhdGEubG9jYWxlLCBvcHRzKTtcbiAgICAgIHRoaXMuZm9ybS5nZXQoJ2xhdExvbmdGb3JtYXQnKS5zZXRWYWx1ZSh0aGlzLmRhdGEubGF0TG9uZ0Zvcm1hdCwgb3B0cyk7XG5cbiAgICAgIC8vIEVuYWJsZSBmaWVsZHNcbiAgICAgIHRoaXMuZm9ybS5nZXQoJ2xvY2FsZScpLmVuYWJsZShvcHRzKTtcbiAgICAgIHRoaXMuZm9ybS5nZXQoJ2xhdExvbmdGb3JtYXQnKS5lbmFibGUob3B0cyk7XG4gICAgfVxuXG4gICAgLy8gTWFyayBmb3IgY2hlY2ssIGlmIG5lZWRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQpIHtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2hvd1NlbGVjdFBlZXJNb2RhbChvcHRzPzoge1xuICAgIGFsbG93U2VsZWN0RG93blBlZXI/OiBib29sZWFuO1xuICAgIGNhbkNhbmNlbD86IGJvb2xlYW47XG4gIH0pIHtcbiAgICBjb25zdCBwZWVyID0gYXdhaXQgdGhpcy5uZXR3b3JrLnNob3dTZWxlY3RQZWVyTW9kYWwob3B0cyk7XG4gICAgaWYgKHBlZXIgJiYgcGVlci51cmwpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KCdwZWVyVXJsJykgYXMgRm9ybUNvbnRyb2w7XG4gICAgICBjb250cm9sLnNldFZhbHVlKHBlZXIudXJsLCB7ZW1pdEV2ZW50OiB0cnVlLCBvbmx5U2VsZjogZmFsc2V9KTtcbiAgICAgIGNvbnRyb2wubWFya0FzRGlydHkoe29ubHlTZWxmOiBmYWxzZX0pO1xuICAgICAgdGhpcy5tYXJrQXNEaXJ0eSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNhbmNlbChldmVudD86IFVJRXZlbnQpIHtcbiAgICBhd2FpdCB0aGlzLmxvYWQoKTtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlKGV2ZW50PzogVUlFdmVudCkge1xuICAgIGlmICh0aGlzLnNhdmluZykgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuZGlydHkpIHtcbiAgICAgIC8vIEFzayB1c2VyIGNvbmZpcm1hdGlvblxuICAgICAgY29uc3QgY29uZmlybWF0aW9uID0gYXdhaXQgQWxlcnRzLmFza1NhdmVCZWZvcmVMZWF2ZSh0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUpO1xuICAgICAgaWYgKGNvbmZpcm1hdGlvbikge1xuICAgICAgICBhd2FpdCB0aGlzLnNhdmUoZXZlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJhY2sgdG8gaG9tZVxuICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJywgeyByZXBsYWNlVXJsOiB0cnVlIH0pOyAvLyBiYWNrIHRvIGhvbWVcbiAgfVxuXG4gIGFzeW5jIGNsZWFyQ2FjaGUoZXZlbnQ/OiBVSUV2ZW50KSB7XG4gICAgY29uc3QgY29uZmlybSA9IGF3YWl0IEFsZXJ0cy5hc2tBY3Rpb25Db25maXJtYXRpb24odGhpcy5hbGVydEN0cmwsIHRoaXMudHJhbnNsYXRlLCB0cnVlLCBldmVudCk7XG4gICAgaWYgKGNvbmZpcm0pIHtcbiAgICAgIGF3YWl0IHRoaXMubmV0d29yay5jbGVhckNhY2hlKCk7XG4gICAgICB0aGlzLnNldHRpbmdzLnJlbW92ZU9mZmxpbmVGZWF0dXJlcygpO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBmdW5jdGlvbnMgLS0gKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0VmFsdWUoKTogUHJvbWlzZTxMb2NhbFNldHRpbmdzPiB7XG4gICAgY29uc3QganNvbiA9IGF3YWl0IHRoaXMuZ2V0SnNvblZhbHVlVG9TYXZlKCk7XG5cbiAgICAvLyBPdmVycmlkZSBwcm9wZXJ0aWVzIGZyb20gYWNjb3VudFxuICAgIGlmIChqc29uLmFjY291bnRJbmhlcml0YW5jZSAmJiB0aGlzLmlzTG9naW4pIHtcbiAgICAgIGNvbnN0IGFjY291bnQgPSB0aGlzLmFjY291bnRTZXJ2aWNlLmFjY291bnQ7XG4gICAgICBjb25zdCB1c2VyU2V0dGluZ3MgPSBhY2NvdW50ICYmIGFjY291bnQuc2V0dGluZ3M7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbc2V0dGluZ3NdIEFwcGx5aW5nIGFjY291bnQgaW5oZXJpdGFuY2Uge2xvY2FsZTogJyR7dXNlclNldHRpbmdzLmxvY2FsZX0nLCBsYXRMb25nRm9ybWF0OiAnJHt1c2VyU2V0dGluZ3MubGF0TG9uZ0Zvcm1hdH0nfS4uLmApO1xuICAgICAganNvbi5sb2NhbGUgPSB1c2VyU2V0dGluZ3MubG9jYWxlIHx8IGpzb24ubG9jYWxlO1xuICAgICAganNvbi5sYXRMb25nRm9ybWF0ID0gdXNlclNldHRpbmdzLmxhdExvbmdGb3JtYXQgfHwganNvbi5sYXRMb25nRm9ybWF0O1xuICAgIH1cblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEpzb25WYWx1ZVRvU2F2ZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGpzb24gPSB0aGlzLmZvcm0udmFsdWU7XG4gICAganNvbi5wcm9wZXJ0aWVzID0gRW50aXR5VXRpbHMuZ2V0UHJvcGVydHlBcnJheUFzT2JqZWN0KGpzb24ucHJvcGVydGllcyk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGpzb24pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cblxufVxuIl19
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MucGFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXR0aW5ncy9zZXR0aW5ncy5wYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBQ3pILE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxFQUFDLFdBQVcsRUFBeUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDbEQsT0FBTyxFQUFZLFdBQVcsRUFBeUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxFQUFDLFlBQVksRUFBRSxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUM3RixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3RFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRXhFLE9BQU8sRUFBQyxLQUFLLEVB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QUFxRCxZQUFZLENBQUMsTUFBTSxzQkFBc0IsWUFBWSxDQUFDLGFBQWEsT0FBTyxDQUFDLENBQUM7Z0JBQy9JLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUNqRCxJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQzthQUN2RTtZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztLQUFBO0lBRVMsa0JBQWtCO1FBQzFCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV4RSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVTLFlBQVk7UUFDcEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QixDQUFDOzs7WUFyVUYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxlQUFlO2dCQUN6QixtbVVBQWlDO2dCQUNqQyxTQUFTLEVBQUU7b0JBQ1QsRUFBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLDZCQUE2QixFQUFDO2lCQUN4RTtnQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTthQUNoRDs7O1lBOUJzRSxRQUFRO1lBV3ZFLGVBQWU7WUFTZixNQUFNO1lBVk4sNkJBQTZCO1lBTzdCLGVBQWU7WUFUZixnQkFBZ0I7WUFITCxXQUFXO1lBSnRCLGNBQWM7WUFhZCxvQkFBb0I7WUFkSyxpQkFBaUI7WUFZMUMsY0FBYzt3Q0EwRGpCLE1BQU0sU0FBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY2NvdW50U2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7RW50aXR5VXRpbHN9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQge0FQUF9MT0NBTEVTLCBMb2NhbGVDb25maWcsIExvY2FsU2V0dGluZ3MsIFVzYWdlTW9kZX0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvc2V0dGluZ3MubW9kZWwnO1xuaW1wb3J0IHtQZWVyfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9wZWVyLm1vZGVsJztcbmltcG9ydCB7Rm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtBcHBGb3JtfSBmcm9tICcuLi9mb3JtL2Zvcm0uY2xhc3MnO1xuaW1wb3J0IHtBcHBGb3JtVXRpbHMsIEZvcm1BcnJheUhlbHBlcn0gZnJvbSAnLi4vZm9ybS9mb3JtLnV0aWxzJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1ZhbGlkYXRvclNlcnZpY2V9IGZyb20gJ0BlLWlzL25neC1tYXRlcmlhbC10YWJsZSc7XG5pbXBvcnQge0xvY2FsU2V0dGluZ3NWYWxpZGF0b3JTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy92YWxpZGF0b3IvbG9jYWwtc2V0dGluZ3MudmFsaWRhdG9yJztcbmltcG9ydCB7UGxhdGZvcm1TZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7TmV0d29ya1NlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZSc7XG5pbXBvcnQge2lzTmlsLCBpc05pbE9yQmxhbmssIHRvQm9vbGVhbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge0xvY2FsU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7Rm9ybUZpZWxkRGVmaW5pdGlvbiwgRm9ybUZpZWxkRGVmaW5pdGlvbk1hcH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHttZXJnZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0FsZXJ0Q29udHJvbGxlcn0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHtBbGVydHN9IGZyb20gJy4uLy4uL3NoYXJlZC9hbGVydHMnO1xuaW1wb3J0IHtQcm9wZXJ0eX0gZnJvbSAnLi4vLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtDYW5MZWF2ZX0gZnJvbSAnLi4vLi4vc2hhcmVkL2d1YXJkL2NvbXBvbmVudC1kaXJ0eS5ndWFyZCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BhZ2Utc2V0dGluZ3MnLFxuICB0ZW1wbGF0ZVVybDogJ3NldHRpbmdzLnBhZ2UuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtwcm92aWRlOiBWYWxpZGF0b3JTZXJ2aWNlLCB1c2VFeGlzdGluZzogTG9jYWxTZXR0aW5nc1ZhbGlkYXRvclNlcnZpY2V9LFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBTZXR0aW5nc1BhZ2UgZXh0ZW5kcyBBcHBGb3JtPExvY2FsU2V0dGluZ3M+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENhbkxlYXZlIHtcblxuICBwcml2YXRlIGRhdGE6IExvY2FsU2V0dGluZ3M7XG5cbiAgbW9iaWxlOiBib29sZWFuO1xuICBzYXZpbmcgPSBmYWxzZTtcbiAgdXNhZ2VNb2RlczogVXNhZ2VNb2RlW10gPSBbJ0ZJRUxEJywgJ0RFU0snXTtcblxuICBwcm9wZXJ0eURlZmluaXRpb25zOiBGb3JtRmllbGREZWZpbml0aW9uW107XG4gIHByb3BlcnR5RGVmaW5pdGlvbnNCeUtleTogRm9ybUZpZWxkRGVmaW5pdGlvbk1hcCA9IHt9O1xuICBwcm9wZXJ0eURlZmluaXRpb25zQnlJbmRleDogeyBbaW5kZXg6IG51bWJlcl06IEZvcm1GaWVsZERlZmluaXRpb24gfSA9IHt9O1xuICBwcm9wZXJ0aWVzRm9ybUhlbHBlcjogRm9ybUFycmF5SGVscGVyPFByb3BlcnR5PjtcblxuICBsYXRMb25nRm9ybWF0cyA9IFsnRERNTVNTJywgJ0RETU0nLCAnREQnXTtcblxuICBnZXQgYWNjb3VudEluaGVyaXRhbmNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHNbJ2FjY291bnRJbmhlcml0YW5jZSddLnZhbHVlO1xuICB9XG5cbiAgZ2V0IGlzTG9naW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWNjb3VudFNlcnZpY2UuaXNMb2dpbigpO1xuICB9XG5cbiAgZ2V0IHByb3BlcnRpZXNGb3JtKCk6IEZvcm1BcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ3Byb3BlcnRpZXMnKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIHBsYXRmb3JtOiBQbGF0Zm9ybVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxuICAgIHByb3RlY3RlZCB2YWxpZGF0b3JTZXJ2aWNlOiBMb2NhbFNldHRpbmdzVmFsaWRhdG9yU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYWxlcnRDdHJsOiBBbGVydENvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByb3RlY3RlZCBhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHB1YmxpYyBuZXR3b3JrOiBOZXR3b3JrU2VydmljZSxcbiAgICBASW5qZWN0KEFQUF9MT0NBTEVTKSBwdWJsaWMgbG9jYWxlczogTG9jYWxlQ29uZmlnW11cbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IsIHZhbGlkYXRvclNlcnZpY2UuZ2V0Rm9ybUdyb3VwKCkpO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzRm9ybUhlbHBlciA9IG5ldyBGb3JtQXJyYXlIZWxwZXI8UHJvcGVydHk+KFxuICAgICAgdGhpcy5mb3JtLmdldCgncHJvcGVydGllcycpIGFzIEZvcm1BcnJheSxcbiAgICAgICh2YWx1ZSkgPT4gdGhpcy52YWxpZGF0b3JTZXJ2aWNlLmdldFByb3BlcnR5Rm9ybUdyb3VwKHZhbHVlKSxcbiAgICAgICh2MSwgdjIpID0+ICghdjEgJiYgIXYyKSB8fCAodjEua2V5ID09PSB2Mi5rZXkpLFxuICAgICAgKHZhbHVlKSA9PiAgaXNOaWwodmFsdWUpIHx8IChpc05pbCh2YWx1ZS5rZXkpICYmIGlzTmlsKHZhbHVlLnZhbHVlKSksXG4gICAgICB7XG4gICAgICAgIGFsbG93RW1wdHlBcnJheTogdHJ1ZVxuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1vYmlsZSA9IHRoaXMucGxhdGZvcm0ubW9iaWxlO1xuXG4gICAgLy8gQnkgZGVmYXVsdCwgZGlzYWJsZSB0aGUgZm9ybVxuICAgIHRoaXMuX2VuYWJsZSA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIC8vIE1ha2Ugc3VyZSBwbGF0Zm9ybSBpcyByZWFkeVxuICAgIGF3YWl0IHRoaXMucGxhdGZvcm0ucmVhZHkoKTtcblxuICAgIHRoaXMucHJvcGVydHlEZWZpbml0aW9ucyA9IHRoaXMuc2V0dGluZ3Mub3B0aW9uRGVmcy5zbGljZSgpOyAvLyBjb3B5IG9wdGlvbnNcbiAgICB0aGlzLnByb3BlcnR5RGVmaW5pdGlvbnMuZm9yRWFjaChvID0+IHRoaXMucHJvcGVydHlEZWZpbml0aW9uc0J5S2V5W28ua2V5XSA9IG8pOyAvLyBmaWxsIG1hcFxuXG4gICAgLy8gTG9hZCBzZXR0aW5nc1xuICAgIGF3YWl0IHRoaXMubG9hZCgpO1xuXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIG1lcmdlKFxuICAgICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9naW4sXG4gICAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2Uub25Mb2dvdXRcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zZXRBY2NvdW50SW5oZXJpdGFuY2UodGhpcy5hY2NvdW50SW5oZXJpdGFuY2UpKSk7XG4gIH1cblxuICBnZXRQcm9wZXJ0eURlZmluaXRpb24oaW5kZXg6IG51bWJlcik6IEZvcm1GaWVsZERlZmluaXRpb24ge1xuICAgIGxldCBkZWZpbml0aW9uID0gdGhpcy5wcm9wZXJ0eURlZmluaXRpb25zQnlJbmRleFtpbmRleF07XG4gICAgaWYgKCFkZWZpbml0aW9uKSB7XG4gICAgICBkZWZpbml0aW9uID0gdGhpcy51cGRhdGVQcm9wZXJ0eURlZmluaXRpb24oaW5kZXgpO1xuICAgICAgdGhpcy5wcm9wZXJ0eURlZmluaXRpb25zQnlJbmRleFtpbmRleF0gPSBkZWZpbml0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHVwZGF0ZVByb3BlcnR5RGVmaW5pdGlvbihpbmRleDogbnVtYmVyKTogRm9ybUZpZWxkRGVmaW5pdGlvbiB7XG4gICAgY29uc3Qga2V5ID0gKHRoaXMucHJvcGVydGllc0Zvcm0uYXQoaW5kZXgpIGFzIEZvcm1Hcm91cCkuY29udHJvbHMua2V5LnZhbHVlO1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSBrZXkgJiYgdGhpcy5wcm9wZXJ0eURlZmluaXRpb25zQnlLZXlba2V5XSB8fCBudWxsO1xuICAgIHRoaXMucHJvcGVydHlEZWZpbml0aW9uc0J5SW5kZXhbaW5kZXhdID0gZGVmaW5pdGlvbjsgLy8gdXBkYXRlIG1hcCBieSBpbmRleFxuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICByZW1vdmVQcm9wZXJ0eUF0KGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLnByb3BlcnRpZXNGb3JtSGVscGVyLnJlbW92ZUF0KGluZGV4KTtcbiAgICB0aGlzLnByb3BlcnR5RGVmaW5pdGlvbnNCeUluZGV4ID0ge307IC8vIGNsZWFyIGNhY2hlIGJ5IGluZGV4XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWQoKSB7XG5cbiAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcbiAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIExvYWRpbmcgc2V0dGluZ3MuLi4nKTtcblxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNldHRpbmdzLnNldHRpbmdzO1xuXG4gICAgLy8gU2V0IGRlZmF1bHRzXG4gICAgZGF0YS5hY2NvdW50SW5oZXJpdGFuY2UgPSB0b0Jvb2xlYW4oZGF0YS5hY2NvdW50SW5oZXJpdGFuY2UsIHRydWUpO1xuICAgIGRhdGEubG9jYWxlID0gZGF0YS5sb2NhbGUgfHwgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcgfHwgdGhpcy50cmFuc2xhdGUuZGVmYXVsdExhbmc7XG4gICAgZGF0YS5sYXRMb25nRm9ybWF0ID0gZGF0YS5sYXRMb25nRm9ybWF0IHx8ICdERE1NU1MnO1xuICAgIGRhdGEudXNhZ2VNb2RlID0gZGF0YS51c2FnZU1vZGUgfHwgJ0RFU0snO1xuXG4gICAgLy8gU2V0IHBlZXJcbiAgICBpZiAoaXNOaWxPckJsYW5rKGRhdGEucGVlclVybCkpIHtcbiAgICAgIGF3YWl0IHRoaXMubmV0d29yay5yZWFkeSgpO1xuICAgICAgY29uc3QgcGVlciA9IHRoaXMubmV0d29yay5wZWVyO1xuICAgICAgZGF0YS5wZWVyVXJsID0gcGVlciAmJiBwZWVyLnVybDtcbiAgICB9XG5cbiAgICAvLyBSZW1lbWJlciBkYXRhXG4gICAgdGhpcy51cGRhdGVWaWV3KGRhdGEpO1xuICB9XG5cbiAgdXBkYXRlVmlldyhkYXRhOiBMb2NhbFNldHRpbmdzKSB7XG4gICAgaWYgKCFkYXRhKSByZXR1cm47IC8vc2tpcFxuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG5cbiAgICBjb25zdCBqc29uOiBhbnkgPSB7Li4uZGF0YX07XG5cbiAgICAvLyBUcmFuc2Zvcm0gcHJvcGVydGllcyBtYXAgaW50byBhcnJheVxuICAgIGpzb24ucHJvcGVydGllcyA9IEVudGl0eVV0aWxzLmdldE1hcEFzQXJyYXkoZGF0YS5wcm9wZXJ0aWVzIHx8IHt9KTtcbiAgICB0aGlzLnByb3BlcnRpZXNGb3JtSGVscGVyLnJlc2l6ZShqc29uLnByb3BlcnRpZXMubGVuZ3RoKTtcblxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKGpzb24sIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuXG4gICAgdGhpcy5lbmFibGUoe2VtaXRFdmVudDogZmFsc2V9KTtcblxuICAgIC8vIEFwcGx5IGluaGVyaXRhbmNlXG4gICAgdGhpcy5zZXRBY2NvdW50SW5oZXJpdGFuY2UoZGF0YS5hY2NvdW50SW5oZXJpdGFuY2UsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG5cbiAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBhc3luYyBzYXZlKGV2ZW50PzogVUlFdmVudCwgb3B0aW9ucz86IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLnNhdmluZykgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAvLyBSZW1vdmUgYWxsIGVtcHR5IGNvbnRyb2xzXG4gICAgdGhpcy5wcm9wZXJ0aWVzRm9ybUhlbHBlci5yZW1vdmVBbGxFbXB0eSgpO1xuXG4gICAgaWYgKCF0aGlzLmZvcm0udmFsaWQpIHtcbiAgICAgIGF3YWl0IEFwcEZvcm1VdGlscy53YWl0V2hpbGVQZW5kaW5nKHRoaXMuZm9ybSk7XG5cbiAgICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xuICAgICAgICBBcHBGb3JtVXRpbHMubG9nRm9ybUVycm9ycyh0aGlzLmZvcm0pO1xuICAgICAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBTYXZpbmcgbG9jYWwgc2V0dGluZ3MuLi4nKTtcblxuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdldFZhbHVlKCk7XG5cbiAgICAvLyBDaGVjayBwZWVyIGFsaXZlLCBiZWZvcmUgc2F2aW5nXG4gICAgY29uc3QgcGVlckNoYW5nZWQgPSB0aGlzLmZvcm0uZ2V0KCdwZWVyVXJsJykuZGlydHk7XG5cbiAgICAvLyBDbGVhbiBwYWdlIGhpc3RvcnksIHdoZW4gcGVlciBjaGFuZ2VkXG4gICAgaWYgKHBlZXJDaGFuZ2VkKSBkYXRhLnBhZ2VIaXN0b3J5ID0gW107XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5kaXNhYmxlKCk7XG5cbiAgICAgIGF3YWl0IHRoaXMuc2V0dGluZ3MuYXBwbHkoZGF0YSk7XG4gICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuXG4gICAgICAvLyBJZiBwZWVyIGNoYW5nZWRcbiAgICAgIGlmIChwZWVyQ2hhbmdlZCkge1xuICAgICAgICAvLyBSZXN0YXJ0IHRoZSBuZXR3b3JrXG4gICAgICAgIHRoaXMubmV0d29yay5wZWVyID0gUGVlci5wYXJzZVVybChkYXRhLnBlZXJVcmwpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIHRoaXMuZXJyb3IgPSBlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmVuYWJsZSh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuXG4gICAgICAvLyBBcHBseSBpbmhlcml0YW5jZVxuICAgICAgdGhpcy5zZXRBY2NvdW50SW5oZXJpdGFuY2UoZGF0YS5hY2NvdW50SW5oZXJpdGFuY2UsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG5cbiAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG5cbiAgc2V0QWNjb3VudEluaGVyaXRhbmNlKGVuYWJsZTogYm9vbGVhbiwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgLy8gTWFrZSBzdXJlIHRvIHVwZGF0ZSB0aGUgdmFsdWUgaW4gY29udHJvbFxuICAgIHRoaXMuZm9ybS5jb250cm9sc1snYWNjb3VudEluaGVyaXRhbmNlJ10uc2V0VmFsdWUoZW5hYmxlLCBvcHRzKTtcbiAgICBpZiAodGhpcy5kYXRhLmFjY291bnRJbmhlcml0YW5jZSAhPT0gZW5hYmxlKSB7XG4gICAgICB0aGlzLmZvcm0uY29udHJvbHNbJ2FjY291bnRJbmhlcml0YW5jZSddLm1hcmtBc0RpcnR5KHtvbmx5U2VsZjogZmFsc2V9KTtcbiAgICB9XG5cbiAgICBpZiAoZW5hYmxlKSB7XG4gICAgICBpZiAodGhpcy5pc0xvZ2luKSB7XG4gICAgICAgIC8vIEZvcmNlIHVzaW5nIGFjY291bnQgc2V0dGluZ3NcbiAgICAgICAgY29uc3QgYWNjb3VudCA9IHRoaXMuYWNjb3VudFNlcnZpY2UuYWNjb3VudDtcblxuICAgICAgICAvLyBDb3B5IHZhbHVlc1xuICAgICAgICBpZiAoYWNjb3VudC5zZXR0aW5ncykge1xuICAgICAgICAgIGlmIChhY2NvdW50LnNldHRpbmdzLmxvY2FsZSkgdGhpcy5mb3JtLmdldCgnbG9jYWxlJykuc2V0VmFsdWUoYWNjb3VudC5zZXR0aW5ncy5sb2NhbGUsIG9wdHMpO1xuICAgICAgICAgIGlmIChhY2NvdW50LnNldHRpbmdzLmxhdExvbmdGb3JtYXQpIHRoaXMuZm9ybS5nZXQoJ2xhdExvbmdGb3JtYXQnKS5zZXRWYWx1ZShhY2NvdW50LnNldHRpbmdzLmxhdExvbmdGb3JtYXQsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIERpc2FibGUgZmllbGRzXG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2xvY2FsZScpLmRpc2FibGUob3B0cyk7XG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2xhdExvbmdGb3JtYXQnKS5kaXNhYmxlKG9wdHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRW5hYmxlIGZpZWxkc1xuICAgICAgICB0aGlzLmZvcm0uZ2V0KCdsb2NhbGUnKS5lbmFibGUob3B0cyk7XG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2xhdExvbmdGb3JtYXQnKS5lbmFibGUob3B0cyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlc3RvcmUgcHJldmlvdXMgdmFsdWVzXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdsb2NhbGUnKS5zZXRWYWx1ZSh0aGlzLmRhdGEubG9jYWxlLCBvcHRzKTtcbiAgICAgIHRoaXMuZm9ybS5nZXQoJ2xhdExvbmdGb3JtYXQnKS5zZXRWYWx1ZSh0aGlzLmRhdGEubGF0TG9uZ0Zvcm1hdCwgb3B0cyk7XG5cbiAgICAgIC8vIEVuYWJsZSBmaWVsZHNcbiAgICAgIHRoaXMuZm9ybS5nZXQoJ2xvY2FsZScpLmVuYWJsZShvcHRzKTtcbiAgICAgIHRoaXMuZm9ybS5nZXQoJ2xhdExvbmdGb3JtYXQnKS5lbmFibGUob3B0cyk7XG4gICAgfVxuXG4gICAgLy8gTWFyayBmb3IgY2hlY2ssIGlmIG5lZWRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQpIHtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2hvd1NlbGVjdFBlZXJNb2RhbChvcHRzPzoge1xuICAgIGFsbG93U2VsZWN0RG93blBlZXI/OiBib29sZWFuO1xuICAgIGNhbkNhbmNlbD86IGJvb2xlYW47XG4gIH0pIHtcbiAgICBjb25zdCBwZWVyID0gYXdhaXQgdGhpcy5uZXR3b3JrLnNob3dTZWxlY3RQZWVyTW9kYWwob3B0cyk7XG4gICAgaWYgKHBlZXIgJiYgcGVlci51cmwpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KCdwZWVyVXJsJykgYXMgRm9ybUNvbnRyb2w7XG4gICAgICBjb250cm9sLnNldFZhbHVlKHBlZXIudXJsLCB7ZW1pdEV2ZW50OiB0cnVlLCBvbmx5U2VsZjogZmFsc2V9KTtcbiAgICAgIGNvbnRyb2wubWFya0FzRGlydHkoe29ubHlTZWxmOiBmYWxzZX0pO1xuICAgICAgdGhpcy5tYXJrQXNEaXJ0eSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNhbmNlbChldmVudD86IFVJRXZlbnQpIHtcbiAgICBhd2FpdCB0aGlzLmxvYWQoKTtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlKGV2ZW50PzogVUlFdmVudCkge1xuICAgIGlmICh0aGlzLnNhdmluZykgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuZGlydHkpIHtcbiAgICAgIC8vIEFzayB1c2VyIGNvbmZpcm1hdGlvblxuICAgICAgY29uc3QgY29uZmlybWF0aW9uID0gYXdhaXQgQWxlcnRzLmFza1NhdmVCZWZvcmVMZWF2ZSh0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUpO1xuICAgICAgaWYgKGNvbmZpcm1hdGlvbikge1xuICAgICAgICBhd2FpdCB0aGlzLnNhdmUoZXZlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJhY2sgdG8gaG9tZVxuICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJywgeyByZXBsYWNlVXJsOiB0cnVlIH0pOyAvLyBiYWNrIHRvIGhvbWVcbiAgfVxuXG4gIGFzeW5jIGNsZWFyQ2FjaGUoZXZlbnQ/OiBVSUV2ZW50KSB7XG4gICAgY29uc3QgY29uZmlybSA9IGF3YWl0IEFsZXJ0cy5hc2tBY3Rpb25Db25maXJtYXRpb24odGhpcy5hbGVydEN0cmwsIHRoaXMudHJhbnNsYXRlLCB0cnVlLCBldmVudCk7XG4gICAgaWYgKGNvbmZpcm0pIHtcbiAgICAgIGF3YWl0IHRoaXMubmV0d29yay5jbGVhckNhY2hlKCk7XG4gICAgICB0aGlzLnNldHRpbmdzLnJlbW92ZU9mZmxpbmVGZWF0dXJlcygpO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBmdW5jdGlvbnMgLS0gKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0VmFsdWUoKTogUHJvbWlzZTxMb2NhbFNldHRpbmdzPiB7XG4gICAgY29uc3QganNvbiA9IGF3YWl0IHRoaXMuZ2V0SnNvblZhbHVlVG9TYXZlKCk7XG5cbiAgICAvLyBPdmVycmlkZSBwcm9wZXJ0aWVzIGZyb20gYWNjb3VudFxuICAgIGlmIChqc29uLmFjY291bnRJbmhlcml0YW5jZSAmJiB0aGlzLmlzTG9naW4pIHtcbiAgICAgIGNvbnN0IGFjY291bnQgPSB0aGlzLmFjY291bnRTZXJ2aWNlLmFjY291bnQ7XG4gICAgICBjb25zdCB1c2VyU2V0dGluZ3MgPSBhY2NvdW50ICYmIGFjY291bnQuc2V0dGluZ3M7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbc2V0dGluZ3NdIEFwcGx5aW5nIGFjY291bnQgaW5oZXJpdGFuY2Uge2xvY2FsZTogJyR7dXNlclNldHRpbmdzLmxvY2FsZX0nLCBsYXRMb25nRm9ybWF0OiAnJHt1c2VyU2V0dGluZ3MubGF0TG9uZ0Zvcm1hdH0nfS4uLmApO1xuICAgICAganNvbi5sb2NhbGUgPSB1c2VyU2V0dGluZ3MubG9jYWxlIHx8IGpzb24ubG9jYWxlO1xuICAgICAganNvbi5sYXRMb25nRm9ybWF0ID0gdXNlclNldHRpbmdzLmxhdExvbmdGb3JtYXQgfHwganNvbi5sYXRMb25nRm9ybWF0O1xuICAgIH1cblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEpzb25WYWx1ZVRvU2F2ZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGpzb24gPSB0aGlzLmZvcm0udmFsdWU7XG4gICAganNvbi5wcm9wZXJ0aWVzID0gRW50aXR5VXRpbHMuZ2V0UHJvcGVydHlBcnJheUFzT2JqZWN0KGpzb24ucHJvcGVydGllcyk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGpzb24pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cblxufVxuIl19