@progressio_resources/gravity-design-system 3.4.4 → 3.4.5

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.
@@ -13,8 +13,12 @@ import * as i8 from "../gravity-link/gravity-link.component";
13
13
  import * as i9 from "../gravity-dropdown-label/gravity-dropdown-label.component";
14
14
  import * as i10 from "../gravity-currency-display-v2/gravity-currency-display-v2.component";
15
15
  export class GravityDropdownListComponent {
16
- get dropdownState() { return this.dropdownOpened; }
17
- set dropdownState(value) { this.dropdownOpened = value; }
16
+ get dropdownState() {
17
+ return this.dropdownOpened;
18
+ }
19
+ set dropdownState(value) {
20
+ this.dropdownOpened = value;
21
+ }
18
22
  set watch(searchInput) {
19
23
  if (searchInput) {
20
24
  searchInput.nativeElement.focus({ preventScroll: true });
@@ -261,23 +265,34 @@ export class GravityDropdownListComponent {
261
265
  filterItems() {
262
266
  const search = this.searchText?.toLowerCase();
263
267
  this.openChildrenMap.clear();
268
+ if (!search) {
269
+ this.availableOptions = JSON.parse(JSON.stringify(this.items));
270
+ return;
271
+ }
264
272
  const filterRecursive = (items) => {
265
- return items
266
- .filter(item => {
273
+ const result = [];
274
+ items.forEach(item => {
275
+ const hasChildren = !!item.children?.length;
267
276
  const label = this.config ? item[this.config.label] : item;
268
277
  const match = label?.toString().toLowerCase().includes(search);
269
- if (item.children) {
270
- const childMatches = filterRecursive(item.children);
271
- if (childMatches.length > 0) {
272
- this.openChildrenMap.set(item, true);
273
- }
274
- return match || childMatches.length > 0;
278
+ let filteredChildren = [];
279
+ if (hasChildren) {
280
+ filteredChildren = filterRecursive(item.children);
275
281
  }
276
- if (match) {
277
- this.openParents(item, this.items);
282
+ const includeItem = hasChildren ? filteredChildren.length > 0 : match;
283
+ if (includeItem) {
284
+ const newItem = { ...item };
285
+ if (filteredChildren.length > 0) {
286
+ newItem.children = filteredChildren;
287
+ this.openChildrenMap.set(newItem, true);
288
+ }
289
+ else {
290
+ delete newItem.children;
291
+ }
292
+ result.push(newItem);
278
293
  }
279
- return match;
280
294
  });
295
+ return result;
281
296
  };
282
297
  this.availableOptions = filterRecursive(this.items);
283
298
  }
@@ -404,7 +419,7 @@ export class GravityDropdownListComponent {
404
419
  }
405
420
  clearSearch() {
406
421
  this.searchText = '';
407
- this.availableOptions = this.items;
422
+ this.availableOptions = JSON.parse(JSON.stringify(this.items));
408
423
  }
409
424
  preventTypingWhenLocked(event, input) {
410
425
  const isLocked = !this.dropdownOpened || !this.items;
@@ -475,4 +490,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
475
490
  type: HostListener,
476
491
  args: ['document:click', ['$event']]
477
492
  }] } });
478
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3Jhdml0eS1kcm9wZG93bi1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyYXZpdHktZGVzaWduLXN5c3RlbS9zcmMvbGliL2NvbXBvbmVudHMvZ3Jhdml0eS1kcm9wZG93bi1saXN0L2dyYXZpdHktZHJvcGRvd24tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncmF2aXR5LWRlc2lnbi1zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL2dyYXZpdHktZHJvcGRvd24tbGlzdC9ncmF2aXR5LWRyb3Bkb3duLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQzVFLE9BQU8sRUFBQyxTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUErQixTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7OztBQVFsSixNQUFNLE9BQU8sNEJBQTRCO0lBeUJ2QyxJQUNJLGFBQWEsS0FBYyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQzVELElBQUksYUFBYSxDQUFDLEtBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFLbEUsSUFDSSxLQUFLLENBQUMsV0FBeUM7UUFDakQsSUFBSSxXQUFXLEVBQUU7WUFDZixXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1NBQ3hEO0lBQ0gsQ0FBQztJQUFBLENBQUM7SUFVRixZQUE2QixZQUEwQixFQUFVLEtBQWlCO1FBQXJELGlCQUFZLEdBQVosWUFBWSxD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SUFBSTtzQkFBbkIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBR0YsYUFBYTtzQkFEaEIsS0FBSztnQkFJSSxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ29CLHFCQUFxQjtzQkFBL0MsTUFBTTt1QkFBQyxVQUFVO2dCQUdkLEtBQUs7c0JBRFIsU0FBUzt1QkFBQyxhQUFhO2dCQW9Sb0IsZUFBZTtzQkFBMUQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RmlsdGVyQnlQaXBlfSBmcm9tIFwiLi9maWx0ZXItYnkucGlwZVwiO1xuaW1wb3J0IHtHcmF2aXR5SWNvbkNvbXBvbmVudH0gZnJvbSBcIi4uL2dyYXZpdHktaWNvbi9ncmF2aXR5LWljb24uY29tcG9uZW50XCI7XG5pbXBvcnQge0NvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkNoYW5nZXMsIE91dHB1dCwgU2ltcGxlQ2hhbmdlLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdncmF2aXR5LWRyb3Bkb3duLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ3Jhdml0eS1kcm9wZG93bi1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ3Jhdml0eS1kcm9wZG93bi1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW0ZpbHRlckJ5UGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgR3Jhdml0eURyb3Bkb3duTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIC8vIENvbXBvbmVudCBmZWF0dXJlc1xuICBASW5wdXQoKSBwdWJsaWMgbGFiZWw6IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIGljb25MZWZ0OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyBpdGVtczogQXJyYXk8YW55PjtcbiAgQElucHV0KCkgcHVibGljIGN5cHJlc3NUYWc6IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyBzdXBwb3J0VGV4dDogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgaGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGNsZWFyYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBtdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGN1cnJlbnRMYW5nOiBzdHJpbmcgPSAnZW4nO1xuICBASW5wdXQoKSBwdWJsaWMgaXNDdXJyZW5jeTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgaXNEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgaXNSZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tVmFsdWVzOiBBcnJheTxhbnk+IHwgYW55O1xuICBASW5wdXQoKSBwdWJsaWMgY29uZmlnPzogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nOyB9O1xuXG4gIC8vIEFwcGVhcmFuY2Ugc2V0dGluZ3NcbiAgQElucHV0KCkgcHVibGljIGxhYmVsU2l6ZTogJ3NtJyB8ICdtZCcgfCAnbGcnID0gJ3NtJztcbiAgQElucHV0KCkgcHVibGljIHNpemU6ICdzbScgfCAnbWQnIHwgJ2xnJyB8ICd4bCcgPSAnbWQnO1xuICBASW5wdXQoKSBwdWJsaWMgaW5wdXRUeXBlOiAnZmllbGQnIHwgJ2xhYmVsJyA9ICdmaWVsZCc7XG4gIEBJbnB1dCgpIHB1YmxpYyB3aWR0aDogJ3Nob3J0JyB8ICdtZWRpdW0nIHwgJ2Z1bGwnIHwgJ2ZpdCcgPSAnc2hvcnQnO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBkcm9wZG93blN0YXRlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5kcm9wZG93bk9wZW5lZDsgfVxuICBzZXQgZHJvcGRvd25TdGF0ZSh2YWx1ZTogYm9vbGVhbikgeyB0aGlzLmRyb3Bkb3duT3BlbmVkID0gdmFsdWU7IH1cblxuICBAT3V0cHV0KCkgZHJvcGRvd25TdGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgncmVzcG9uc2UnKSBwdWJsaWMgc2VsZWN0ZWRJdGVtc1Jlc3BvbnNlOiBFdmVudEVtaXR0ZXI8YW55W10gfCBhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaElucHV0JylcbiAgc2V0IHdhdGNoKHNlYXJjaElucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+KSB7XG4gICAgaWYgKHNlYXJjaElucHV0KSB7XG4gICAgICBzZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiB0cnVlfSk7XG4gICAgfVxuICB9O1xuXG4gIHB1YmxpYyBzZWFyY2hUZXh0OiBzdHJpbmcgPSAnJztcbiAgcHVibGljIHNlbGVjdGVkSXRlbXM6IGFueVtdID0gW107XG4gIHB1YmxpYyBpc29Db25maWc6IHN0cmluZyA9ICdpc28nO1xuICBwdWJsaWMgYXZhaWxhYmxlT3B0aW9uczogYW55W10gPSBbXTtcbiAgcHVibGljIGRyb3Bkb3duT3BlbmVkOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBvcGVuQ2hpbGRyZW5NYXAgPSBuZXcgTWFwPGFueSwgYm9vbGVhbj4oKTtcbiAgcHVibGljIG5ldHdvcmtDb25maWc6IHsgbGFiZWw6IHN0cmluZzsgaXNvOiBzdHJpbmc7IGlkOiBudW1iZXI7IH0gPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZmlsdGVyQnlQaXBlOiBGaWx0ZXJCeVBpcGUsIHByaXZhdGUgX2VyZWY6IEVsZW1lbnRSZWYpIHsgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snaXRlbXMnXT8uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLmF2YWlsYWJsZU9wdGlvbnMgPSB0aGlzLml0ZW1zO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWydjdXN0b21WYWx1ZXMnXSkge1xuICAgICAgY29uc3QgY2hhbmdlSXRlbTogU2ltcGxlQ2hhbmdlID0gY2hhbmdlc1snY3VzdG9tVmFsdWVzJ107XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBjaGFuZ2VJdGVtPy5jdXJyZW50VmFsdWU7XG5cbiAgICAgIGNvbnN0IGZpbmRPcHRpb25SZWN1cnNpdmVseSA9IChpdGVtczogYW55W10sIHZhbHVlOiBhbnkpOiBhbnkgfCBudWxsID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgY29uc3QgaXRlbVZhbHVlID0gdGhpcy5jb25maWcgPyBpdGVtW3RoaXMuY29uZmlnLnZhbHVlXSA6IGl0ZW07XG4gICAgICAgICAgaWYgKGl0ZW1WYWx1ZSA9PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kQ2hpbGQgPSBmaW5kT3B0aW9uUmVjdXJzaXZlbHkoaXRlbS5jaGlsZHJlbiwgdmFsdWUpO1xuICAgICAgICAgICAgaWYgKGZvdW5kQ2hpbGQpIHJldHVybiBmb3VuZENoaWxkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpKSB7XG4gICAgICAgIGN1cnJlbnRWYWx1ZS5mb3JFYWNoKCh2YWw6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZvdW5kID0gZmluZE9wdGlvblJlY3Vyc2l2ZWx5KHRoaXMuaXRlbXMsIHZhbCk7XG4gICAgICAgICAgaWYgKGZvdW5kICYmICF0aGlzLnNlbGVjdGVkSXRlbXMuaW5jbHVkZXMoZm91bmQpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChmb3VuZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFZhbHVlICE9IG51bGwgJiYgY3VycmVudFZhbHVlICE9PSAnJykge1xuICAgICAgICBjb25zdCBmb3VuZCA9IGZpbmRPcHRpb25SZWN1cnNpdmVseSh0aGlzLml0ZW1zLCBjdXJyZW50VmFsdWUpO1xuICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbZm91bmRdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFjdXJyZW50VmFsdWUgJiYgIWNoYW5nZUl0ZW0uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTdGF0dXMoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKSB7XG4gICAgICByZXR1cm4gJ2Rpc2FibGVkJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNSZWFkb25seSkge1xuICAgICAgcmV0dXJuICdyZWFkb25seSc7XG4gICAgfSBlbHNlIGlmICh0aGlzLmhhc0Vycm9yKSB7XG4gICAgICByZXR1cm4gJ2Vycm9yJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuZHJvcGRvd25PcGVuZWQpIHtcbiAgICAgIHJldHVybiAnb3Blbic7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuICdzZWxlY3RlZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnYWN0aXZlJztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNJY29uTGVmdE5ldygpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pY29uTGVmdCkge1xuICAgICAgcmV0dXJuIEdyYXZpdHlJY29uQ29tcG9uZW50LmlzTmV3SWNvbih0aGlzLmljb25MZWZ0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlRHJvcGRvd24oKTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5uZXR3b3JrQ29uZmlnID0gbnVsbDtcblxuICAgIGlmICghdGhpcy5pc0Rpc2FibGVkICYmICF0aGlzLmlzUmVhZG9ubHkpIHtcbiAgICAgIHRoaXMuZHJvcGRvd25PcGVuZWQgPSAhdGhpcy5kcm9wZG93bk9wZW5lZDtcbiAgICAgIHRoaXMuZHJvcGRvd25TdGF0ZUNoYW5nZS5lbWl0KHRoaXMuZHJvcGRvd25PcGVuZWQpO1xuXG4gICAgICBpZiAoIXRoaXMuZHJvcGRvd25PcGVuZWQpIHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXNSZXNwb25zZS5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXNbMF0pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc1Jlc3BvbnNlLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1zWzBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlT3B0aW9ucyA9IHRoaXMuaXRlbXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXM/LmZvckVhY2goc2VsID0+IHtcbiAgICAgICAgICB0aGlzLml0ZW1zPy5mb3JFYWNoKHBhcmVudCA9PiB7XG4gICAgICAgICAgICBpZiAocGFyZW50LmNoaWxkcmVuPy5pbmNsdWRlcyhzZWwpKSB7XG4gICAgICAgICAgICAgIHRoaXMub3BlbkNoaWxkcmVuTWFwLnNldChwYXJlbnQsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0SXRlbShpdGVtVG9BZGQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGlzUGFyZW50ID0gISFpdGVtVG9BZGQuY2hpbGRyZW47XG5cbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuY2hlY2tJZlNlbGVjdGVkKGl0ZW1Ub0FkZCk7XG5cbiAgICAgIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoaSA9PlxuICAgICAgICAgICh0aGlzLmNvbmZpZyA/IGlbdGhpcy5jb25maWcudmFsdWVdIDogaSkgIT09XG4gICAgICAgICAgKHRoaXMuY29uZmlnID8gaXRlbVRvQWRkW3RoaXMuY29uZmlnLnZhbHVlXSA6IGl0ZW1Ub0FkZClcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoaXNQYXJlbnQpIHtcbiAgICAgICAgICBpdGVtVG9BZGQuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKGkgPT4gaSAhPT0gY2hpbGQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChwYXJlbnQgPT4ge1xuICAgICAgICAgICAgaWYgKHBhcmVudC5jaGlsZHJlbj8uaW5jbHVkZXMoaXRlbVRvQWRkKSkge1xuICAgICAgICAgICAgICBjb25zdCBhbnlTZWxlY3RlZCA9IHBhcmVudC5jaGlsZHJlbi5zb21lKGNoaWxkID0+IHRoaXMuY2hlY2tJZlNlbGVjdGVkKGNoaWxkKSk7XG4gICAgICAgICAgICAgIGNvbnN0IGFsbFNlbGVjdGVkID0gcGFyZW50LmNoaWxkcmVuLmV2ZXJ5KGNoaWxkID0+IHRoaXMuY2hlY2tJZlNlbGVjdGVkKGNoaWxkKSk7XG4gICAgICAgICAgICAgIGlmICghYW55U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKGkgPT4gaSAhPT0gcGFyZW50KTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbGxTZWxlY3RlZCAmJiAhdGhpcy5jaGVja0lmU2VsZWN0ZWQocGFyZW50KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKHBhcmVudCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtVG9BZGQpO1xuXG4gICAgICAgIGlmIChpc1BhcmVudCkge1xuICAgICAgICAgIGl0ZW1Ub0FkZC5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmU2VsZWN0ZWQoY2hpbGQpKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2gocGFyZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChwYXJlbnQuY2hpbGRyZW4/LmluY2x1ZGVzKGl0ZW1Ub0FkZCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYWxsU2VsZWN0ZWQgPSBwYXJlbnQuY2hpbGRyZW4uZXZlcnkoY2hpbGQgPT4gdGhpcy5jaGVja0lmU2VsZWN0ZWQoY2hpbGQpKTtcbiAgICAgICAgICAgICAgaWYgKGFsbFNlbGVjdGVkICYmICF0aGlzLmNoZWNrSWZTZWxlY3RlZChwYXJlbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2gocGFyZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtpdGVtVG9BZGRdO1xuICAgICAgdGhpcy50b2dnbGVEcm9wZG93bigpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc1BhcnRpYWxseVNlbGVjdGVkKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghaXRlbS5jaGlsZHJlbj8ubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBzZWxlY3RlZENoaWxkcmVuID0gaXRlbS5jaGlsZHJlbi5maWx0ZXIoY2hpbGQgPT4gdGhpcy5jaGVja0lmU2VsZWN0ZWQoY2hpbGQpKTtcbiAgICByZXR1cm4gc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGggPiAwICYmIHNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoIDwgaXRlbS5jaGlsZHJlbi5sZW5ndGg7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tJZlNlbGVjdGVkKGl0ZW0/OiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBnZXRWYWx1ZSA9IChlbDogYW55KSA9PiB0aGlzLmNvbmZpZyA/IGVsW3RoaXMuY29uZmlnLnZhbHVlXSA6IGVsO1xuXG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMuc29tZShzZWxlY3RlZCA9PiBnZXRWYWx1ZShzZWxlY3RlZCkgPT09IGdldFZhbHVlKGl0ZW0pKTtcbiAgICB9XG5cbiAgICBjb25zdCBmbGF0dGVuID0gdGhpcy5mbGF0dGVuSXRlbXModGhpcy5hdmFpbGFibGVPcHRpb25zKTtcbiAgICByZXR1cm4gZmxhdHRlbi5sZW5ndGggPiAwICYmIGZsYXR0ZW4uZXZlcnkob3B0aW9uID0+XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuc29tZShzZWxlY3RlZCA9PiBnZXRWYWx1ZShzZWxlY3RlZCkgPT09IGdldFZhbHVlKG9wdGlvbikpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RBbGxJdGVtcyhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGZsYXR0ZW4gPSB0aGlzLmZsYXR0ZW5JdGVtcyh0aGlzLmF2YWlsYWJsZU9wdGlvbnMpO1xuICAgIGNvbnN0IGdldFZhbHVlID0gKGVsOiBhbnkpID0+IHRoaXMuY29uZmlnID8gZWxbdGhpcy5jb25maWcudmFsdWVdIDogZWw7XG5cbiAgICBjb25zdCBhbGxTZWxlY3RlZCA9IGZsYXR0ZW4uZXZlcnkob3B0aW9uID0+XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuc29tZShzZWxlY3RlZCA9PiBnZXRWYWx1ZShzZWxlY3RlZCkgPT09IGdldFZhbHVlKG9wdGlvbikpXG4gICAgKTtcblxuICAgIGlmIChhbGxTZWxlY3RlZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihzZWxlY3RlZCA9PlxuICAgICAgICAhZmxhdHRlbi5zb21lKG9wdGlvbiA9PiBnZXRWYWx1ZShzZWxlY3RlZCkgPT09IGdldFZhbHVlKG9wdGlvbikpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBmbGF0dGVuLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkSXRlbXMuc29tZShzZWxlY3RlZCA9PiBnZXRWYWx1ZShzZWxlY3RlZCkgPT09IGdldFZhbHVlKG9wdGlvbikpKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2gob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmbGF0dGVuSXRlbXMoaXRlbXM6IGFueVtdKTogYW55W10ge1xuICAgIHJldHVybiBpdGVtcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgYWNjLnB1c2goaXRlbSk7XG4gICAgICBpZiAoaXRlbS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgIGFjYy5wdXNoKC4uLnRoaXMuZmxhdHRlbkl0ZW1zKGl0ZW0uY2hpbGRyZW4pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgcHVibGljIGNsZWFyU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc1Jlc3BvbnNlLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zUmVzcG9uc2UuZW1pdChudWxsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9wZW5QYXJlbnRzKGl0ZW06IGFueSwgaXRlbXM6IGFueVtdKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBwYXJlbnQgb2YgaXRlbXMpIHtcbiAgICAgIGlmIChwYXJlbnQuY2hpbGRyZW4/LmluY2x1ZGVzKGl0ZW0pKSB7XG4gICAgICAgIHRoaXMub3BlbkNoaWxkcmVuTWFwLnNldChwYXJlbnQsIHRydWUpO1xuICAgICAgICB0aGlzLm9wZW5QYXJlbnRzKHBhcmVudCwgdGhpcy5pdGVtcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmIChwYXJlbnQuY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy5vcGVuUGFyZW50cyhpdGVtLCBwYXJlbnQuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmaWx0ZXJJdGVtcygpOiB2b2lkIHtcbiAgICBjb25zdCBzZWFyY2ggPSB0aGlzLnNlYXJjaFRleHQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5vcGVuQ2hpbGRyZW5NYXAuY2xlYXIoKTtcblxuICAgIGNvbnN0IGZpbHRlclJlY3Vyc2l2ZSA9IChpdGVtczogYW55W10pOiBhbnlbXSA9PiB7XG4gICAgICByZXR1cm4gaXRlbXNcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuY29uZmlnID8gaXRlbVt0aGlzLmNvbmZpZy5sYWJlbF0gOiBpdGVtO1xuICAgICAgICAgIGNvbnN0IG1hdGNoID0gbGFiZWw/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpO1xuXG4gICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTWF0Y2hlcyA9IGZpbHRlclJlY3Vyc2l2ZShpdGVtLmNoaWxkcmVuKTtcbiAgICAgICAgICAgIGlmIChjaGlsZE1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB0aGlzLm9wZW5DaGlsZHJlbk1hcC5zZXQoaXRlbSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2ggfHwgY2hpbGRNYXRjaGVzLmxlbmd0aCA+IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5QYXJlbnRzKGl0ZW0sIHRoaXMuaXRlbXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuYXZhaWxhYmxlT3B0aW9ucyA9IGZpbHRlclJlY3Vyc2l2ZSh0aGlzLml0ZW1zKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSkgb25Eb2N1bWVudENsaWNrKCRldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9lcmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoJGV2ZW50LnRhcmdldCkgJiYgdGhpcy5kcm9wZG93bk9wZW5lZCkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zUmVzcG9uc2UuZW1pdCh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtc1swXSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc1Jlc3BvbnNlLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1zWzBdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcbiAgICAgIHRoaXMuZHJvcGRvd25PcGVuZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuYXZhaWxhYmxlT3B0aW9ucyA9IHRoaXMuaXRlbXM7XG4gICAgICB0aGlzLmRyb3Bkb3duU3RhdGVDaGFuZ2UuZW1pdCh0aGlzLmRyb3Bkb3duT3BlbmVkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VycmVuY3lJY29uU2l6ZShzaXplOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHNpemUpIHtcbiAgICAgIGNhc2UgJ3NtJzpcbiAgICAgICAgcmV0dXJuICdzbS0xNic7XG4gICAgICBjYXNlICdsZyc6XG4gICAgICAgIHJldHVybiAnbGctMzInO1xuICAgICAgY2FzZSAneGwnOlxuICAgICAgICByZXR1cm4gJ3hsLTQwJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnbWQtMjQnO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTcGFjaW5nQ2xhc3Moc2l6ZTogc3RyaW5nKSB7XG4gICAgc3dpdGNoIChzaXplKSB7XG4gICAgICBjYXNlICdzbSc6XG4gICAgICAgIHJldHVybiAnZ3Jhdml0eS1tYXJnaW4tcmlnaHQteHhzJztcbiAgICAgIGNhc2UgJ21kJzpcbiAgICAgICAgcmV0dXJuICdncmF2aXR5LW1hcmdpbi1yaWdodC14cyc7XG4gICAgICBjYXNlICdsZyc6XG4gICAgICAgIHJldHVybiAnZ3Jhdml0eS1tYXJnaW4tcmlnaHQtc20nO1xuICAgICAgY2FzZSAneGwnOlxuICAgICAgICByZXR1cm4gJ2dyYXZpdHktbWFyZ2luLXJpZ2h0LW1kJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0TXVsdGlsZXZlbFNwYWNpbmdDbGFzcyhzaXplOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHNpemUpIHtcbiAgICAgIGNhc2UgJ3NtJzpcbiAgICAgICAgcmV0dXJuICdncmF2aXR5LW1hcmdpbi1yaWdodC1tZCc7XG4gICAgICBjYXNlICdtZCc6XG4gICAgICAgIHJldHVybiAnZ3Jhdml0eS1tYXJnaW4tcmlnaHQtbGcnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRMYWJlbFRleHQoKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmcgPSAnJztcbiAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5sYWJlbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcbiAgICAgICAgbGV0IGRpc3BsYXlWYWx1ZSA9IHRoaXMuY29uZmlnID8gaXRlbVt0aGlzLmNvbmZpZy5sYWJlbF0gOiBpdGVtO1xuICAgICAgICBsZXQgc2VwYXJhdG9yID0gaSAhPT0gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCAtIDEgPyAnLCcgOiAnJztcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgZGlzcGxheVZhbHVlICsgc2VwYXJhdG9yO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgaXNDaGlsZHJlbk9wZW4oaXRlbTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3BlbkNoaWxkcmVuTWFwLmdldChpdGVtKSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVDaGlsZHJlbihpdGVtOiBhbnksIGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMub3BlbkNoaWxkcmVuTWFwLmdldChpdGVtKSB8fCBmYWxzZTtcbiAgICB0aGlzLm9wZW5DaGlsZHJlbk1hcC5zZXQoaXRlbSwgIWN1cnJlbnQpO1xuICB9XG5cbiAgcHVibGljIGdldERpc3BsYXlWYWx1ZShjaGlsZDogYW55LCBjb25maWc/OiB7IGxhYmVsOiBzdHJpbmcgfSk6IHN0cmluZyB7XG4gICAgaWYgKGNvbmZpZz8ubGFiZWwgJiYgdHlwZW9mIGNoaWxkID09PSAnb2JqZWN0JyAmJiBjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNoaWxkW2NvbmZpZy5sYWJlbF0gPz8gJyc7XG4gICAgfVxuICAgIHJldHVybiBjaGlsZCA/PyAnJztcbiAgfVxuXG4gIHB1YmxpYyBpbnB1dERpc3BsYXlWYWx1ZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZEl0ZW1zPy5sZW5ndGgpIHJldHVybiAnJztcblxuICAgIGNvbnN0IGdldFZhbHVlID0gKGl0ZW06IGFueSkgPT4gdGhpcy5jb25maWcgPyBpdGVtW3RoaXMuY29uZmlnLnZhbHVlXSA6IGl0ZW07XG5cbiAgICBjb25zdCBnZXRMYWJlbCA9IChpdGVtOiBhbnkpOiBzdHJpbmcgPT4ge1xuICAgICAgY29uc3QgYmFzZUxhYmVsID0gdGhpcy5pc0N1cnJlbmN5ID8gaXRlbVt0aGlzLmlzb0NvbmZpZ10gOiB0aGlzLmNvbmZpZyA/IGl0ZW1bdGhpcy5jb25maWcubGFiZWxdIDogaXRlbTtcblxuICAgICAgaWYgKCF0aGlzLm11bHRpcGxlICYmIGl0ZW0ubmV0d29yaz8uY29kZSAmJiAoaXRlbS5uZXR3b3JrX2lkICE9PSBpdGVtLmN1cnJlbmN5X2lkIHx8IGl0ZW0uY2hpbGRyZW4gfHwgaXRlbS5pc19FUkMyMCkpIHtcbiAgICAgICAgICB0aGlzLm5ldHdvcmtDb25maWcgPSB7bGFiZWw6IGJhc2VMYWJlbCwgaXNvOiBpdGVtLm5ldHdvcms/LmNvZGUsIGlkOiBpdGVtLm5ldHdvcmtfaWQgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYmFzZUxhYmVsO1xuICAgIH07XG5cbiAgICBpZiAoIXRoaXMuaXRlbXM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcy5tYXAoZ2V0TGFiZWwpLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBwYXJlbnQgb2YgdGhpcy5pdGVtcykge1xuICAgICAgaWYgKHBhcmVudC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGFsbENoaWxkcmVuU2VsZWN0ZWQgPSBwYXJlbnQuY2hpbGRyZW4uZXZlcnkoY2hpbGQgPT5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5zb21lKHNlbCA9PiBnZXRWYWx1ZShzZWwpID09PSBnZXRWYWx1ZShjaGlsZCkpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGFsbENoaWxkcmVuU2VsZWN0ZWQpIHtcbiAgICAgICAgICBsYWJlbHMucHVzaChnZXRMYWJlbChwYXJlbnQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHBhcmVudC5jaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcy5zb21lKHNlbCA9PiBnZXRWYWx1ZShzZWwpID09PSBnZXRWYWx1ZShjaGlsZCkpKSB7XG4gICAgICAgICAgICAgIGxhYmVscy5wdXNoKGdldExhYmVsKGNoaWxkKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcy5zb21lKHNlbCA9PiBnZXRWYWx1ZShzZWwpID09PSBnZXRWYWx1ZShwYXJlbnQpKSkge1xuICAgICAgICBsYWJlbHMucHVzaChnZXRMYWJlbChwYXJlbnQpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50cnVuY2F0ZShsYWJlbHMpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cnVuY2F0ZShsYWJlbHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICBjb25zdCBtYXhJdGVtcyA9IHRoaXMud2lkdGggPT09ICdzaG9ydCcgPyAzIDogdGhpcy53aWR0aCA9PT0gJ21lZGl1bScgPyA2IDogMTI7XG4gICAgaWYgKGxhYmVscy5sZW5ndGggPD0gbWF4SXRlbXMpIHJldHVybiBsYWJlbHMuam9pbignLCAnKTtcbiAgICByZXR1cm4gbGFiZWxzLnNsaWNlKDAsIG1heEl0ZW1zKS5qb2luKCcsICcpICsgJy4uLic7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJTZWFyY2goKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gICAgdGhpcy5hdmFpbGFibGVPcHRpb25zID0gdGhpcy5pdGVtcztcbiAgfVxuXG4gIHB1YmxpYyBwcmV2ZW50VHlwaW5nV2hlbkxvY2tlZChldmVudDogS2V5Ym9hcmRFdmVudCwgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpIHtcbiAgICBjb25zdCBpc0xvY2tlZCA9ICF0aGlzLmRyb3Bkb3duT3BlbmVkIHx8ICF0aGlzLml0ZW1zO1xuXG4gICAgaWYgKGlzTG9ja2VkKSB7XG4gICAgICBpZiAoZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSB8fCBldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnIHx8IGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cblxuICAgICAgaW5wdXQuYmx1cigpO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImlucHV0VHlwZSA9PT0gJ2ZpZWxkJ1wiPlxuICA8bGFiZWwgY2xhc3M9XCJoci1sYWJlbCBzbS1ib2xkIHt7Z2V0U3RhdHVzKCl9fVwiICpuZ0lmPVwibGFiZWxcIj5cbiAgICB7eyBsYWJlbCB9fSA8c3BhbiAqbmdJZj1cInJlcXVpcmVkIHx8IGhhc0Vycm9yXCI+Kjwvc3Bhbj5cbiAgPC9sYWJlbD5cbjwvbmctY29udGFpbmVyPlxuXG48ZGl2IGNsYXNzPVwiZ3Jhdml0eS1pbnB1dC1maWVsZCB7e2lucHV0VHlwZX19LXt7bGFiZWxTaXplfX0ge3tzaXplfX0ge3t3aWR0aH19LXdpZHRoIHt7Z2V0U3RhdHVzKCl9fVwiXG4gICAgIFthdHRyLmRhdGEtY3ldPVwiY3lwcmVzc1RhZ1wiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigpO1wiPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbnB1dFR5cGUgPT09ICdmaWVsZCdcIj5cbiAgICA8Z3Jhdml0eS1pY29uIGNsYXNzPVwibGVmdFwiIFtpY29uTmFtZV09XCJpY29uTGVmdFwiIFtpY29uU2l6ZV09XCJpc0ljb25MZWZ0TmV3KCkgPyAnbWQtMTYnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIihpY29uTGVmdCAmJiAhZHJvcGRvd25PcGVuZWQpIHx8IChpY29uTGVmdCAmJiAhaXRlbXMpXCI+PC9ncmF2aXR5LWljb24+XG5cbiAgICA8Z3Jhdml0eS1pY29uIGNsYXNzPVwic2VhcmNoLWljb25cIiBbaWNvbk5hbWVdPVwiJ3NlYXJjaCdcIiBbaWNvblNpemVdPVwiJ3NtLTEyJ1wiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIihkcm9wZG93bk9wZW5lZCAmJiBpdGVtcylcIj48L2dyYXZpdHktaWNvbj5cblxuICAgIDxkaXYgKm5nSWY9XCIhZHJvcGRvd25PcGVuZWQgJiYgbmV0d29ya0NvbmZpZ1wiIGNsYXNzPVwibmV0d29yay1waWxsXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImhyLWxhYmVsIHt7c2l6ZX19LXJlZ3VsYXJcIj57e25ldHdvcmtDb25maWcubGFiZWx9fTwvc3Bhbj5cbiAgICAgIDxncmF2aXR5LW5ldHdvcmstcGlsbCBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiIFtuZXR3b3JrXT1cIntpc286IG5ldHdvcmtDb25maWcuaXNvLCBpZDogbmV0d29ya0NvbmZpZy5pZH1cIj48L2dyYXZpdHktbmV0d29yay1waWxsPlxuICAgIDwvZGl2PlxuXG4gICAgPGlucHV0ICpuZ0lmPVwiIW5ldHdvcmtDb25maWcgfHwgZHJvcGRvd25PcGVuZWRcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICBjbGFzcz1cImhyLWxhYmVsIHt7c2l6ZX19LXJlZ3VsYXIge3tnZXRTdGF0dXMoKX19XCJcbiAgICAgICAgICAgKGZvY3VzKT1cInNlYXJjaFRleHQgPSAnJ1wiIFtjbGFzcy5sb2NrZWRdPVwiIWRyb3Bkb3duT3BlbmVkIHx8ICFpdGVtc1wiXG4gICAgICAgICAgIChrZXlkb3duKT1cInByZXZlbnRUeXBpbmdXaGVuTG9ja2VkKCRldmVudCwgc2VhcmNoSW5wdXQpXCJcbiAgICAgICAgICAgKGlucHV0KT1cImZpbHRlckl0ZW1zKCk7IGRyb3Bkb3duT3BlbmVkID0gdHJ1ZVwiXG4gICAgICAgICAgIFthdHRyLmRhdGEtY3ldPVwiY3lwcmVzc1RhZyArICdfc2VhcmNoX2lucHV0J1wiXG4gICAgICAgICAgICNzZWFyY2hJbnB1dFxuICAgICAgICAgICBbbmdNb2RlbF09XCIoZHJvcGRvd25PcGVuZWQgJiYgaXRlbXMpID8gc2VhcmNoVGV4dCA6IGlucHV0RGlzcGxheVZhbHVlKClcIlxuICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWFyY2hUZXh0ID0gJGV2ZW50XCJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyhkcm9wZG93bk9wZW5lZCAmJiBpdGVtcykgPyAoY3VycmVudExhbmcgPT0gJ2VzJyA/ICdCdXNjYXInIDogJ1NlYXJjaCBpbnB1dCcpIDogKHBsYWNlaG9sZGVyID8gcGxhY2Vob2xkZXIgOiBsYWJlbCl9fVwiPlxuXG4gICAgPGdyYXZpdHktaWNvbiBjbGFzcz1cInJpZ2h0XCIgW2ljb25OYW1lXT1cImRyb3Bkb3duT3BlbmVkID8gJ2Fycm93LXVwJzogJ2Fycm93LWRvd24nXCJcbiAgICAgICAgICAgICAgICAgIFtpY29uU2l6ZV09XCInbWQtMTYnXCIgKm5nSWY9XCIhaXNSZWFkb25seSAmJiBzZWFyY2hUZXh0Lmxlbmd0aCA9PSAwXCI+PC9ncmF2aXR5LWljb24+XG5cbiAgICA8Z3Jhdml0eS1pY29uIGNsYXNzPVwicmlnaHRcIiBbaWNvbk5hbWVdPVwiJ3Vuc3VjY2VzcydcIiAoY2xpY2spPVwiY2xlYXJTZWFyY2goKVwiXG4gICAgICAgICAgICAgICAgICBbaWNvblNpemVdPVwiJ21kLTE2J1wiICpuZ0lmPVwiZHJvcGRvd25PcGVuZWQgJiYgc2VhcmNoVGV4dC5sZW5ndGggPiAwXCI+PC9ncmF2aXR5LWljb24+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbnB1dFR5cGUgPT09ICdsYWJlbCdcIj5cbiAgICA8Z3Jhdml0eS1kcm9wZG93bi1sYWJlbCAob25DbGlja0xhYmVsKT1cInRvZ2dsZURyb3Bkb3duKClcIiBbbGFiZWxdPVwiZ2V0TGFiZWxUZXh0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaXplXT1cImxhYmVsU2l6ZVwiIFtpc09wZW5dPVwiZHJvcGRvd25PcGVuZWRcIj5cbiAgICA8L2dyYXZpdHktZHJvcGRvd24tbGFiZWw+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1wYW5lbCB7e2dldFN0YXR1cygpfX1cIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgKm5nSWY9XCJpdGVtcyAmJiBkcm9wZG93bk9wZW5lZFwiXG4gICAgICAgW2F0dHIuZGF0YS1jeV09XCJjeXByZXNzVGFnICsgJ19wYW5lbCdcIj5cbiAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWlucHV0XCIgKm5nSWY9XCJpbnB1dFR5cGUgPT09ICdsYWJlbCdcIj5cbiAgICAgIDxncmF2aXR5LWljb24gY2xhc3M9XCJzZWFyY2gtaWNvblwiIFtpY29uTmFtZV09XCInc2VhcmNoJ1wiIFtpY29uU2l6ZV09XCInc20tMTInXCI+PC9ncmF2aXR5LWljb24+XG4gICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJoci1sYWJlbCB7e3NpemV9fS1yZWd1bGFyXCIgKGlucHV0KT1cImZpbHRlckl0ZW1zKClcIlxuICAgICAgICAgICAgIFthdHRyLmRhdGEtY3ldPVwiY3lwcmVzc1RhZyArICdfc2VhcmNoX2lucHV0J1wiICNzZWFyY2hJbnB1dFxuICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiIHBsYWNlaG9sZGVyPVwie3tjdXJyZW50TGFuZyA9PSAnZXMnID8gJ0J1c2NhcicgOiAnU2VhcmNoIGlucHV0J319XCI+XG4gICAgICA8Z3Jhdml0eS1pY29uIGNsYXNzPVwicG9pbnRlciByZXNldC1pY29uXCIgKGNsaWNrKT1cInNlYXJjaFRleHQgPSAnJzsgZmlsdGVySXRlbXMoKVwiIFtpY29uTmFtZV09XCIndW5zdWNjZXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpY29uU2l6ZV09XCInc20tMTInXCIgKm5nSWY9XCJzZWFyY2hUZXh0Py5sZW5ndGggPiAwXCI+PC9ncmF2aXR5LWljb24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LWFsbFwiICpuZ0lmPVwibXVsdGlwbGUgJiYgYXZhaWxhYmxlT3B0aW9ucy5sZW5ndGggIT0gMFwiPlxuICAgICAgPGdyYXZpdHktY2hlY2tib3ggW25nQ2xhc3NdPVwiZ2V0U3BhY2luZ0NsYXNzKHNpemUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RBbGxJdGVtcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImNoZWNrSWZTZWxlY3RlZCgpXCI+PC9ncmF2aXR5LWNoZWNrYm94PlxuICAgICAgPHAgY2xhc3M9XCJoci1sYWJlbCB7e3NpemV9fS1yZWd1bGFyXCI+e3sgY3VycmVudExhbmcgPT0gJ2VzJyA/ICdTZWxlY2Npb25hciB0b2RvJyA6ICdTZWxlY3QgYWxsJyB9fTwvcD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJpdGVtcy1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpdGVtc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb250YWluZXJcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhdmFpbGFibGVPcHRpb25zXCJcbiAgICAgICAgICAgICBbYXR0ci5kYXRhLWN5XT1cImlzQ3VycmVuY3kgPyAnY3VycmVuY3lfb3B0aW9uXycgKyBpdGVtLmN1cnJlbmN5X2lkIDogJydcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaHItbGFiZWwgaXRlbSB7e3NpemV9fS1yZWd1bGFyIHBvaW50ZXJcIlxuICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImNoZWNrSWZTZWxlY3RlZChpdGVtKVwiXG4gICAgICAgICAgICAgICBbY2xhc3MucGFydGlhbF09XCJpc1BhcnRpYWxseVNlbGVjdGVkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJpdGVtLmNoaWxkcmVuPy5sZW5ndGggPyBtdWx0aXBsZSA/IHNlbGVjdEl0ZW0oaXRlbSkgOiB0b2dnbGVDaGlsZHJlbihpdGVtLCAkZXZlbnQpIDogc2VsZWN0SXRlbShpdGVtKVwiPlxuXG4gICAgICAgICAgICA8Z3Jhdml0eS1jaGVja2JveCAqbmdJZj1cIm11bHRpcGxlXCIgW25nQ2xhc3NdPVwiZ2V0U3BhY2luZ0NsYXNzKHNpemUpXCJcbiAgICAgICAgICAgICAgW2lzUGFydGlhbF09XCJpc1BhcnRpYWxseVNlbGVjdGVkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiY2hlY2tJZlNlbGVjdGVkKGl0ZW0pXCI+XG4gICAgICAgICAgICA8L2dyYXZpdHktY2hlY2tib3g+XG5cbiAgICAgICAgICAgIDxncmF2aXR5LWN1cnJlbmN5LWRpc3BsYXktdjIgKm5nSWY9XCJpc0N1cnJlbmN5XCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRTcGFjaW5nQ2xhc3Moc2l6ZSlcIlxuICAgICAgICAgICAgICAgIFt0eXBlXT1cIml0ZW0udHlwZSA9PT0gJ0ZJQVQnID8gJ2ZpYXQtc2hvcnQnIDogJ3Nob3J0LWhyeidcIlxuICAgICAgICAgICAgICAgIFtjdXJyZW5jeV09XCJ7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5X25hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVuY3lfaWQ6IGl0ZW0uY3VycmVuY3lfaWQsIGN1cnJlbmN5X2lzbzogaXRlbS5pc28sXG4gICAgICAgICAgICAgICAgICAgIG5ldHdvcmtfaWQ6IGl0ZW0ubmV0d29yaz8uaWQsIG5ldHdvcmtfaXNvOiBpdGVtLm5ldHdvcms/LmNvZGUsXG4gICAgICAgICAgICAgICAgICAgIHBpbGxfdHlwZTogY2hlY2tJZlNlbGVjdGVkKGl0ZW0pID8gJ3NlY29uZGFyeScgOiAncHJpbWFyeSd9XCIgPlxuICAgICAgICAgICAgPC9ncmF2aXR5LWN1cnJlbmN5LWRpc3BsYXktdjI+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNDdXJyZW5jeVwiIFtuZ0NsYXNzXT1cImdldFNwYWNpbmdDbGFzcyhzaXplKVwiPnt7IGdldERpc3BsYXlWYWx1ZShpdGVtLCBjb25maWcpIH19PC9kaXY+XG5cbiAgICAgICAgICAgIDxncmF2aXR5LWljb24gc3R5bGU9XCJtYXJnaW4tbGVmdDogYXV0b1wiIChjbGljayk9XCJ0b2dnbGVDaGlsZHJlbihpdGVtLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25OYW1lXT1cImlzQ2hpbGRyZW5PcGVuKGl0ZW0pID8gJ2Fycm93LXVwJyA6ICdhcnJvdy1kb3duJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uU2l6ZV09XCInbWQtMTYnXCIgKm5nSWY9XCJpdGVtLmNoaWxkcmVuPy5sZW5ndGhcIj48L2dyYXZpdHktaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWNoaWxkcmVuXCIgKm5nSWY9XCJpdGVtLmNoaWxkcmVuPy5sZW5ndGggJiYgaXNDaGlsZHJlbk9wZW4oaXRlbSlcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoaWxkIG9mIGl0ZW0uY2hpbGRyZW5cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhyLWxhYmVsIGl0ZW0ge3tzaXplfX0tcmVndWxhciBwb2ludGVyXCIgW25nQ2xhc3NdPVwieydtdWx0aXBsZScgOiBtdWx0aXBsZX1cIlxuICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJjaGVja0lmU2VsZWN0ZWQoY2hpbGQpXCJcbiAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SXRlbShjaGlsZClcIj5cbiAgICAgICAgICAgICAgICA8Z3Jhdml0eS1jaGVja2JveCAqbmdJZj1cIm11bHRpcGxlXCIgW25nQ2xhc3NdPVwiZ2V0TXVsdGlsZXZlbFNwYWNpbmdDbGFzcyhzaXplKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiY2hlY2tJZlNlbGVjdGVkKGNoaWxkKVwiPjwvZ3Jhdml0eS1jaGVja2JveD5cbiAgICAgICAgICAgICAgICA8Z3Jhdml0eS1jdXJyZW5jeSAqbmdJZj1cImlzQ3VycmVuY3lcIiBbbmdDbGFzc109XCJnZXRTcGFjaW5nQ2xhc3Moc2l6ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaXplXT1cImdldEN1cnJlbmN5SWNvblNpemUoc2l6ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXJyZW5jeV09XCJ7Y3VycmVuY3lfaWQ6IGNoaWxkLmN1cnJlbmN5X2lkfVwiPjwvZ3Jhdml0eS1jdXJyZW5jeT5cbiAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImdldFNwYWNpbmdDbGFzcyhzaXplKVwiPnt7IGdldERpc3BsYXlWYWx1ZShjaGlsZCwgY29uZmlnKSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxncmF2aXR5LW5ldHdvcmstcGlsbCAqbmdJZj1cImlzQ3VycmVuY3lcIiBbdHlwZV09XCJjaGVja0lmU2VsZWN0ZWQoY2hpbGQpID8gJ3NlY29uZGFyeScgOiAncHJpbWFyeSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmV0d29ya109XCJ7IGlzbzogY2hpbGQubmV0d29yaz8uY29kZSwgaWQ6IGNoaWxkLm5ldHdvcms/LmlkIH1cIj48L2dyYXZpdHktbmV0d29yay1waWxsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY29udGFpbmVyXCIgKm5nSWY9XCJhdmFpbGFibGVPcHRpb25zLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoci1sYWJlbCBpdGVtIHt7c2l6ZX19LWJvbGQgbm8tcmVzdWx0c1wiPlxuICAgICAgICAgICAge3sgY3VycmVudExhbmcgPT0gJ2VzJyA/ICdTaW4gcmVzdWx0YWRvcyBlbmNvbnRyYWRvcycgOiAnTm8gcmVzdWx0cyBmb3VuZC4nIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZm9vdGVyXCIgKm5nSWY9XCJzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgJiYgYXZhaWxhYmxlT3B0aW9ucy5sZW5ndGggIT09IDBcIlxuICAgICAgICAgW2NsYXNzLm5vdC1jbGVhcmFibGVdPVwiIWNsZWFyYWJsZVwiPlxuICAgICAgPGdyYXZpdHktbGluayAqbmdJZj1cImNsZWFyYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclNlbGVjdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZvbnRDbGFzc109XCInaHItbGFiZWwgc20tcmVndWxhcidcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWN5XT1cImN5cHJlc3NUYWcgKyAnX2NsZWFyJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtsaW5rVGV4dF09XCJjdXJyZW50TGFuZyA9PSAnZXMnID8gJ0xpbXBpYXInIDogJ0NsZWFyIHNlbGVjdGlvbidcIj5cbiAgICAgIDwvZ3Jhdml0eS1saW5rPlxuXG4gICAgICA8Z3Jhdml0eS1saW5rICpuZ0lmPVwiYXZhaWxhYmxlT3B0aW9ucy5sZW5ndGggIT0gMFwiXG4gICAgICAgICAgICAgICAgICAgIFtmb250Q2xhc3NdPVwiJ2hyLWxhYmVsIHNtLWJvbGQnXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jeV09XCJjeXByZXNzVGFnICsgJ19hcHBseSdcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyB0b2dnbGVEcm9wZG93bigpXCJcbiAgICAgICAgICAgICAgICAgICAgW2xpbmtUZXh0XT1cImN1cnJlbnRMYW5nID09ICdlcycgPyAnQXBsaWNhcicgOiAnQXBwbHknXCI+XG4gICAgICA8L2dyYXZpdHktbGluaz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZm9vdGVyIG5vLXJlc3VsdHNcIiAqbmdJZj1cImF2YWlsYWJsZU9wdGlvbnMubGVuZ3RoID09PSAwXCIgW2NsYXNzLm5vdC1jbGVhcmFibGVdPVwiIWNsZWFyYWJsZVwiPlxuICAgICAgPGdyYXZpdHktbGluayAqbmdJZj1cImNsZWFyYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZvbnRDbGFzc109XCInaHItbGFiZWwgc20tcmVndWxhcidcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWN5XT1cImN5cHJlc3NUYWcgKyAnX2NsZWFyX3NlYXJjaCdcIlxuICAgICAgICAgICAgICAgICAgICBbbGlua1RleHRdPVwiY3VycmVudExhbmcgPT0gJ2VzJyA/ICdMaW1waWFyIGLDunNxdWVkYScgOiAnQ2xlYXIgc2VhcmNoJ1wiPlxuICAgICAgPC9ncmF2aXR5LWxpbms+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxzZWN0aW9uIGNsYXNzPVwiZXh0ZXJuYWwtY29udGVudFwiICpuZ0lmPVwiIWl0ZW1zICYmIGRyb3Bkb3duT3BlbmVkXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9zZWN0aW9uPlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJpbnB1dFR5cGUgPT09ICdmaWVsZCdcIj5cbiAgPHAgY2xhc3M9XCJoci1sYWJlbCBzbS1yZWd1bGFyIHN1cHBvcnRpbmctdGV4dCB7e2dldFN0YXR1cygpfX0ge3tzaXplfX1cIiAqbmdJZj1cInN1cHBvcnRUZXh0XCI+XG4gICAge3sgc3VwcG9ydFRleHQgfX1cbiAgPC9wPlxuICA8cCBjbGFzcz1cImhyLWxhYmVsIHNtLXJlZ3VsYXIgc3VwcG9ydGluZy10ZXh0IHt7Z2V0U3RhdHVzKCl9fSB7e3NpemV9fVwiXG4gICAgICpuZ0lmPVwiIXN1cHBvcnRUZXh0ICYmIGdldFN0YXR1cygpID09ICdhY3RpdmUnICYmIHNlbGVjdGVkSXRlbXMubGVuZ3RoID09IDAgJiYgcmVxdWlyZWRcIj5cbiAgICB7eyBjdXJyZW50TGFuZyA9PSAnZXMnID8gJ1JlcXVlcmlkbycgOiAnUmVxdWlyZWQnIH19XG4gIDwvcD5cbjwvbmctY29udGFpbmVyPiJdfQ==
493
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3Jhdml0eS1kcm9wZG93bi1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyYXZpdHktZGVzaWduLXN5c3RlbS9zcmMvbGliL2NvbXBvbmVudHMvZ3Jhdml0eS1kcm9wZG93bi1saXN0L2dyYXZpdHktZHJvcGRvd24tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncmF2aXR5LWRlc2lnbi1zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL2dyYXZpdHktZHJvcGRvd24tbGlzdC9ncmF2aXR5LWRyb3Bkb3duLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQzVFLE9BQU8sRUFBQyxTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUErQixTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7OztBQVFsSixNQUFNLE9BQU8sNEJBQTRCO0lBeUJ2QyxJQUNJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksYUFBYSxDQUFDLEtBQWM7UUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUtELElBQ0ksS0FBSyxDQUFDLFdBQXlDO1FBQ2pELElBQUksV0FBVyxFQUFFO1lBQ2YsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBQyxhQUFhLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztTQUN4RDtJQUNILENBQUM7SUFBQSxDQUFDO0lBVUYsWUFBNkIsWUFBMEIsRUFBVSxLQUFpQjtRQUFyRCxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUFVLFVBQUssR0FBTCxLQUFLLENBQVk7UUE1Q2xFLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsY0FBUyxHQUFZLElBQUksQ0FBQztRQUMxQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsZ0JBQVcsR0FBVyxJQUFJLENBQUM7UUFDM0IsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFJNUMsc0JBQXNCO1FBQ04sY0FBUyxHQUF1QixJQUFJLENBQUM7UUFDckMsU0FBSSxHQUE4QixJQUFJLENBQUM7UUFDdkMsY0FBUyxHQUFzQixPQUFPLENBQUM7UUFDdkMsVUFBSyxHQUF3QyxPQUFPLENBQUM7UUFXM0Qsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUNqQywwQkFBcUIsR0FBOEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQVMxRixlQUFVLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBQzFCLGNBQVMsR0FBVyxLQUFLLENBQUM7UUFDMUIscUJBQWdCLEdBQVUsRUFBRSxDQUFDO1FBQzdCLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLG9CQUFlLEdBQUcsSUFBSSxHQUFHLEVBQWdCLENBQUM7UUFDMUMsa0JBQWEsR0FBZ0QsSUFBSSxDQUFDO0lBR3pFLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsWUFBWSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ3BDO1FBRUQsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDM0IsTUFBTSxVQUFVLEdBQWlCLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN6RCxNQUFNLFlBQVksR0FBRyxVQUFVLEVBQUUsWUFBWSxDQUFDO1lBRTlDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxLQUFZLEVBQUUsS0FBVSxFQUFjLEVBQUU7Z0JBQ3JFLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO29CQUN4QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUMvRCxJQUFJLFNBQVMsSUFBSSxLQUFLLEVBQUU7d0JBQ3RCLE9BQU8sSUFBSSxDQUFDO3FCQUNiO29CQUVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTt3QkFDakIsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQzt3QkFDL0QsSUFBSSxVQUFVOzRCQUFFLE9BQU8sVUFBVSxDQUFDO3FCQUNuQztpQkFDRjtnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUMsQ0FBQztZQUVGLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1lBRXhCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDL0IsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNoQyxNQUFNLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNyRCxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO3dCQUNoRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDaEM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtpQkFBTSxJQUFJLFlBQVksSUFBSSxJQUFJLElBQUksWUFBWSxLQUFLLEVBQUUsRUFBRTtnQkFDdEQsTUFBTSxLQUFLLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDOUQsSUFBSSxLQUFLLEVBQUU7b0JBQ1QsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUM5QjthQUNGO2lCQUFNLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFO2dCQUNuRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDdkI7U0FDRjtJQUNILENBQUM7SUFFTSxTQUFTO1FBQ2QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLE9BQU8sVUFBVSxDQUFDO1NBQ25CO2FBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQzFCLE9BQU8sVUFBVSxDQUFDO1NBQ25CO2FBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3hCLE9BQU8sT0FBTyxDQUFDO1NBQ2hCO2FBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQzlCLE9BQU8sTUFBTSxDQUFDO1NBQ2Y7YUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN4QyxPQUFPLFVBQVUsQ0FBQztTQUNuQjthQUFNO1lBQ0wsT0FBTyxRQUFRLENBQUM7U0FDakI7SUFDSCxDQUFDO0lBRU0sYUFBYTtRQUNsQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsT0FBTyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3REO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sY0FBYztRQUNuQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFFMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQzNDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBRW5ELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUN4QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ2pCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUNsQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztxQkFDckQ7aUJBQ0Y7cUJBQU07b0JBQ0wsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUN6QixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDeEQ7aUJBQ0Y7Z0JBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQ3BDO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNoQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTt3QkFDM0IsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTs0QkFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO3lCQUN4QztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7SUFDSCxDQUFDO0lBRU0sVUFBVSxDQUFDLFNBQWM7UUFDOUIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFFdEMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFbkQsSUFBSSxVQUFVLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUNqRCxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3hDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUN6RCxDQUFDO2dCQUVGLElBQUksUUFBUSxFQUFFO29CQUNaLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO3dCQUNqQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO29CQUNuRSxDQUFDLENBQUMsQ0FBQztpQkFDSjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTt3QkFDMUIsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTs0QkFDeEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7NEJBQy9FLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOzRCQUNoRixJQUFJLENBQUMsV0FBVyxFQUFFO2dDQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDOzZCQUNuRTtpQ0FBTSxJQUFJLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0NBQ3ZELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDOzZCQUNqQzt5QkFDRjtvQkFDSCxDQUFDLENBQUMsQ0FBQztpQkFDSjthQUVGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUVuQyxJQUFJLFFBQVEsRUFBRTtvQkFDWixTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTt3QkFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUU7NEJBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3lCQUNoQztvQkFDSCxDQUFDLENBQUMsQ0FBQztpQkFDSjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTt3QkFDMUIsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTs0QkFDeEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7NEJBQ2hGLElBQUksV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQ0FDaEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7NkJBQ2pDO3lCQUNGO29CQUNILENBQUMsQ0FBQyxDQUFDO2lCQUNKO2FBQ0Y7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2QjtJQUNILENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxJQUFTO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU07WUFBRSxPQUFPLEtBQUssQ0FBQztRQUV6QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDdkYsQ0FBQztJQUVNLGVBQWUsQ0FBQyxJQUFVO1FBQy9CLE1BQU0sUUFBUSxHQUFHLENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRXZFLElBQUksSUFBSSxFQUFFO1lBQ1IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUNuRjtRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDekQsT0FBTyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQ2xELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUM3RSxDQUFDO0lBQ0osQ0FBQztJQUVNLGNBQWMsQ0FBQyxLQUFpQjtRQUNyQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN6RCxNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUV2RSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUM3RSxDQUFDO1FBRUYsSUFBSSxXQUFXLEVBQUU7WUFDZixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQ3hELENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDakUsQ0FBQztTQUNIO2FBQU07WUFDTCxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7b0JBQ2pGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNqQztZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQVk7UUFDL0IsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ2hDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDZixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFO2dCQUN6QixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzthQUMvQztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVNLGNBQWM7UUFDbkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFFeEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3JEO2FBQU07WUFDTCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztJQUVPLFdBQVcsQ0FBQyxJQUFTLEVBQUUsS0FBWTtRQUN6QyxLQUFLLE1BQU0sTUFBTSxJQUFJLEtBQUssRUFBRTtZQUMxQixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckMsTUFBTTthQUNQO2lCQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3pDO1NBQ0Y7SUFDSCxDQUFDO0lBRU0sV0FBVztRQUNoQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFN0IsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDL0QsT0FBTztTQUNSO1FBRUQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxLQUFZLEVBQVMsRUFBRTtZQUM5QyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFFbEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbkIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO2dCQUM1QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUMzRCxNQUFNLEtBQUssR0FBRyxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUUvRCxJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxXQUFXLEVBQUU7b0JBQ2YsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDbkQ7Z0JBRUQsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBRXRFLElBQUksV0FBVyxFQUFFO29CQUNmLE1BQU0sT0FBTyxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUMvQixPQUFPLENBQUMsUUFBUSxHQUFHLGdCQUFnQixDQUFDO3dCQUNwQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7cUJBQ3pDO3lCQUFNO3dCQUNMLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQztxQkFDekI7b0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDdEI7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFMkMsZUFBZSxDQUFDLE1BQW9CO1FBQzlFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDNUUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNqQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNyRDtpQkFBTTtnQkFDTCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3pCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN4RDthQUNGO1lBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDNUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDbkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDcEQ7SUFDSCxDQUFDO0lBRU0sbUJBQW1CLENBQUMsSUFBWTtRQUNyQyxRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssSUFBSTtnQkFDUCxPQUFPLE9BQU8sQ0FBQztZQUNqQixLQUFLLElBQUk7Z0JBQ1AsT0FBTyxPQUFPLENBQUM7WUFDakIsS0FBSyxJQUFJO2dCQUNQLE9BQU8sT0FBTyxDQUFDO1lBQ2pCO2dCQUNFLE9BQU8sT0FBTyxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQztJQUVNLGVBQWUsQ0FBQyxJQUFZO1FBQ2pDLFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxJQUFJO2dCQUNQLE9BQU8sMEJBQTBCLENBQUM7WUFDcEMsS0FBSyxJQUFJO2dCQUNQLE9BQU8seUJBQXlCLENBQUM7WUFDbkMsS0FBSyxJQUFJO2dCQUNQLE9BQU8seUJBQXlCLENBQUM7WUFDbkMsS0FBSyxJQUFJO2dCQUNQLE9BQU8seUJBQXlCLENBQUM7WUFDbkM7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7U0FDYjtJQUNILENBQUM7SUFFTSx5QkFBeUIsQ0FBQyxJQUFZO1FBQzNDLFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxJQUFJO2dCQUNQLE9BQU8seUJBQXlCLENBQUM7WUFDbkMsS0FBSyxJQUFJO2dCQUNQLE9BQU8seUJBQXlCLENBQUM7WUFDbkM7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7U0FDYjtJQUNILENBQUM7SUFFTSxZQUFZO1FBQ2pCLElBQUksTUFBTSxHQUFXLEVBQUUsQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNuQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUNyQjthQUFNO1lBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JDLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hFLElBQUksU0FBUyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMvRCxNQUFNLEdBQUcsTUFBTSxHQUFHLFlBQVksR0FBRyxTQUFTLENBQUM7WUFDN0MsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxjQUFjLENBQUMsSUFBUztRQUM3QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQztJQUNqRCxDQUFDO0lBRU0sY0FBYyxDQUFDLElBQVMsRUFBRSxLQUFpQjtRQUNoRCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDO1FBQ3hELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTSxlQUFlLENBQUMsS0FBVSxFQUFFLE1BQTBCO1FBQzNELElBQUksTUFBTSxFQUFFLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtZQUNoRSxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2xDO1FBQ0QsT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxpQkFBaUI7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRTNDLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRTdFLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBUyxFQUFVLEVBQUU7WUFDckMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUV4RyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDcEgsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFDLENBQUE7YUFDdEY7WUFFRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7WUFDdkIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEQ7UUFFRCxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7UUFFNUIsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQy9CLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUU7Z0JBQzNCLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDeEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ2xFLENBQUM7Z0JBRUYsSUFBSSxtQkFBbUIsRUFBRTtvQkFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztpQkFDL0I7cUJBQU07b0JBQ0wsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFO3dCQUNuQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFOzRCQUNyRSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3lCQUM5QjtxQkFDRjtpQkFDRjthQUNGO2lCQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7Z0JBQzdFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFDL0I7U0FDRjtRQUVELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU8sUUFBUSxDQUFDLE1BQWdCO1FBQy9CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMvRSxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksUUFBUTtZQUFFLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDdEQsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU0sdUJBQXVCLENBQUMsS0FBb0IsRUFBRSxLQUF1QjtRQUMxRSxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBRXJELElBQUksUUFBUSxFQUFFO1lBQ1osSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxXQUFXLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUU7Z0JBQ2pGLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN4QjtZQUVELEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNkO0lBQ0gsQ0FBQzsrR0EvZFUsNEJBQTRCO21HQUE1Qiw0QkFBNEIsd3NCQUY1QixDQUFDLFlBQVksQ0FBQyxxSkNSM0IsNjNSQThKZTs7NEZEcEpGLDRCQUE0QjtrQkFOeEMsU0FBUzsrQkFDRSx1QkFBdUIsYUFHdEIsQ0FBQyxZQUFZLENBQUM7NEhBSVQsS0FBSztzQkFBcEIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxXQUFXO3NCQUExQixLQUFLO2dCQUNVLFdBQVc7c0JBQTFCLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxXQUFXO3NCQUExQixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSztnQkFHVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxLQUFLO3NCQUFwQixLQUFLO2dCQUdGLGFBQWE7c0JBRGhCLEtBQUs7Z0JBU0ksbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNvQixxQkFBcUI7c0JBQS9DLE1BQU07dUJBQUMsVUFBVTtnQkFHZCxLQUFLO3NCQURSLFNBQVM7dUJBQUMsYUFBYTtnQkFrU29CLGVBQWU7c0JBQTFELFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0ZpbHRlckJ5UGlwZX0gZnJvbSBcIi4vZmlsdGVyLWJ5LnBpcGVcIjtcbmltcG9ydCB7R3Jhdml0eUljb25Db21wb25lbnR9IGZyb20gXCIuLi9ncmF2aXR5LWljb24vZ3Jhdml0eS1pY29uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZSwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ3Jhdml0eS1kcm9wZG93bi1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyYXZpdHktZHJvcGRvd24tbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dyYXZpdHktZHJvcGRvd24tbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtGaWx0ZXJCeVBpcGVdXG59KVxuZXhwb3J0IGNsYXNzIEdyYXZpdHlEcm9wZG93bkxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAvLyBDb21wb25lbnQgZmVhdHVyZXNcbiAgQElucHV0KCkgcHVibGljIGxhYmVsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyBpY29uTGVmdDogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgaXRlbXM6IEFycmF5PGFueT47XG4gIEBJbnB1dCgpIHB1YmxpYyBjeXByZXNzVGFnOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgc3VwcG9ydFRleHQ6IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIGhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBjbGVhcmFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBjdXJyZW50TGFuZzogc3RyaW5nID0gJ2VuJztcbiAgQElucHV0KCkgcHVibGljIGlzQ3VycmVuY3k6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGlzUmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGN1c3RvbVZhbHVlczogQXJyYXk8YW55PiB8IGFueTtcbiAgQElucHV0KCkgcHVibGljIGNvbmZpZz86IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZzsgfTtcblxuICAvLyBBcHBlYXJhbmNlIHNldHRpbmdzXG4gIEBJbnB1dCgpIHB1YmxpYyBsYWJlbFNpemU6ICdzbScgfCAnbWQnIHwgJ2xnJyA9ICdzbSc7XG4gIEBJbnB1dCgpIHB1YmxpYyBzaXplOiAnc20nIHwgJ21kJyB8ICdsZycgfCAneGwnID0gJ21kJztcbiAgQElucHV0KCkgcHVibGljIGlucHV0VHlwZTogJ2ZpZWxkJyB8ICdsYWJlbCcgPSAnZmllbGQnO1xuICBASW5wdXQoKSBwdWJsaWMgd2lkdGg6ICdzaG9ydCcgfCAnbWVkaXVtJyB8ICdmdWxsJyB8ICdmaXQnID0gJ3Nob3J0JztcblxuICBASW5wdXQoKVxuICBnZXQgZHJvcGRvd25TdGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kcm9wZG93bk9wZW5lZDtcbiAgfVxuXG4gIHNldCBkcm9wZG93blN0YXRlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5kcm9wZG93bk9wZW5lZCA9IHZhbHVlO1xuICB9XG5cbiAgQE91dHB1dCgpIGRyb3Bkb3duU3RhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoJ3Jlc3BvbnNlJykgcHVibGljIHNlbGVjdGVkSXRlbXNSZXNwb25zZTogRXZlbnRFbWl0dGVyPGFueVtdIHwgYW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAVmlld0NoaWxkKCdzZWFyY2hJbnB1dCcpXG4gIHNldCB3YXRjaChzZWFyY2hJbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pikge1xuICAgIGlmIChzZWFyY2hJbnB1dCkge1xuICAgICAgc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cyh7cHJldmVudFNjcm9sbDogdHJ1ZX0pO1xuICAgIH1cbiAgfTtcblxuICBwdWJsaWMgc2VhcmNoVGV4dDogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgaXNvQ29uZmlnOiBzdHJpbmcgPSAnaXNvJztcbiAgcHVibGljIGF2YWlsYWJsZU9wdGlvbnM6IGFueVtdID0gW107XG4gIHB1YmxpYyBkcm9wZG93bk9wZW5lZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgb3BlbkNoaWxkcmVuTWFwID0gbmV3IE1hcDxhbnksIGJvb2xlYW4+KCk7XG4gIHB1YmxpYyBuZXR3b3JrQ29uZmlnOiB7IGxhYmVsOiBzdHJpbmc7IGlzbzogc3RyaW5nOyBpZDogbnVtYmVyOyB9ID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGZpbHRlckJ5UGlwZTogRmlsdGVyQnlQaXBlLCBwcml2YXRlIF9lcmVmOiBFbGVtZW50UmVmKSB7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ2l0ZW1zJ10/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5hdmFpbGFibGVPcHRpb25zID0gdGhpcy5pdGVtcztcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snY3VzdG9tVmFsdWVzJ10pIHtcbiAgICAgIGNvbnN0IGNoYW5nZUl0ZW06IFNpbXBsZUNoYW5nZSA9IGNoYW5nZXNbJ2N1c3RvbVZhbHVlcyddO1xuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gY2hhbmdlSXRlbT8uY3VycmVudFZhbHVlO1xuXG4gICAgICBjb25zdCBmaW5kT3B0aW9uUmVjdXJzaXZlbHkgPSAoaXRlbXM6IGFueVtdLCB2YWx1ZTogYW55KTogYW55IHwgbnVsbCA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IHRoaXMuY29uZmlnID8gaXRlbVt0aGlzLmNvbmZpZy52YWx1ZV0gOiBpdGVtO1xuICAgICAgICAgIGlmIChpdGVtVmFsdWUgPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZENoaWxkID0gZmluZE9wdGlvblJlY3Vyc2l2ZWx5KGl0ZW0uY2hpbGRyZW4sIHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChmb3VuZENoaWxkKSByZXR1cm4gZm91bmRDaGlsZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSkge1xuICAgICAgICBjdXJyZW50VmFsdWUuZm9yRWFjaCgodmFsOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBmb3VuZCA9IGZpbmRPcHRpb25SZWN1cnNpdmVseSh0aGlzLml0ZW1zLCB2YWwpO1xuICAgICAgICAgIGlmIChmb3VuZCAmJiAhdGhpcy5zZWxlY3RlZEl0ZW1zLmluY2x1ZGVzKGZvdW5kKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goZm91bmQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRWYWx1ZSAhPSBudWxsICYmIGN1cnJlbnRWYWx1ZSAhPT0gJycpIHtcbiAgICAgICAgY29uc3QgZm91bmQgPSBmaW5kT3B0aW9uUmVjdXJzaXZlbHkodGhpcy5pdGVtcywgY3VycmVudFZhbHVlKTtcbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW2ZvdW5kXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghY3VycmVudFZhbHVlICYmICFjaGFuZ2VJdGVtLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0U3RhdHVzKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkge1xuICAgICAgcmV0dXJuICdkaXNhYmxlZCc7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzUmVhZG9ubHkpIHtcbiAgICAgIHJldHVybiAncmVhZG9ubHknO1xuICAgIH0gZWxzZSBpZiAodGhpcy5oYXNFcnJvcikge1xuICAgICAgcmV0dXJuICdlcnJvcic7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRyb3Bkb3duT3BlbmVkKSB7XG4gICAgICByZXR1cm4gJ29wZW4nO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiAnc2VsZWN0ZWQnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ2FjdGl2ZSc7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzSWNvbkxlZnROZXcoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaWNvbkxlZnQpIHtcbiAgICAgIHJldHVybiBHcmF2aXR5SWNvbkNvbXBvbmVudC5pc05ld0ljb24odGhpcy5pY29uTGVmdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZURyb3Bkb3duKCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMubmV0d29ya0NvbmZpZyA9IG51bGw7XG5cbiAgICBpZiAoIXRoaXMuaXNEaXNhYmxlZCAmJiAhdGhpcy5pc1JlYWRvbmx5KSB7XG4gICAgICB0aGlzLmRyb3Bkb3duT3BlbmVkID0gIXRoaXMuZHJvcGRvd25PcGVuZWQ7XG4gICAgICB0aGlzLmRyb3Bkb3duU3RhdGVDaGFuZ2UuZW1pdCh0aGlzLmRyb3Bkb3duT3BlbmVkKTtcblxuICAgICAgaWYgKCF0aGlzLmRyb3Bkb3duT3BlbmVkKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zUmVzcG9uc2UuZW1pdCh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1zWzBdKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXNSZXNwb25zZS5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtc1swXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF2YWlsYWJsZU9wdGlvbnMgPSB0aGlzLml0ZW1zO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zPy5mb3JFYWNoKHNlbCA9PiB7XG4gICAgICAgICAgdGhpcy5pdGVtcz8uZm9yRWFjaChwYXJlbnQgPT4ge1xuICAgICAgICAgICAgaWYgKHBhcmVudC5jaGlsZHJlbj8uaW5jbHVkZXMoc2VsKSkge1xuICAgICAgICAgICAgICB0aGlzLm9wZW5DaGlsZHJlbk1hcC5zZXQocGFyZW50LCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNlbGVjdEl0ZW0oaXRlbVRvQWRkOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBpc1BhcmVudCA9ICEhaXRlbVRvQWRkLmNoaWxkcmVuO1xuXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLmNoZWNrSWZTZWxlY3RlZChpdGVtVG9BZGQpO1xuXG4gICAgICBpZiAoaXNTZWxlY3RlZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKGkgPT5cbiAgICAgICAgICAodGhpcy5jb25maWcgPyBpW3RoaXMuY29uZmlnLnZhbHVlXSA6IGkpICE9PVxuICAgICAgICAgICh0aGlzLmNvbmZpZyA/IGl0ZW1Ub0FkZFt0aGlzLmNvbmZpZy52YWx1ZV0gOiBpdGVtVG9BZGQpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGlzUGFyZW50KSB7XG4gICAgICAgICAgaXRlbVRvQWRkLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihpID0+IGkgIT09IGNoaWxkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2gocGFyZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChwYXJlbnQuY2hpbGRyZW4/LmluY2x1ZGVzKGl0ZW1Ub0FkZCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYW55U2VsZWN0ZWQgPSBwYXJlbnQuY2hpbGRyZW4uc29tZShjaGlsZCA9PiB0aGlzLmNoZWNrSWZTZWxlY3RlZChjaGlsZCkpO1xuICAgICAgICAgICAgICBjb25zdCBhbGxTZWxlY3RlZCA9IHBhcmVudC5jaGlsZHJlbi5ldmVyeShjaGlsZCA9PiB0aGlzLmNoZWNrSWZTZWxlY3RlZChjaGlsZCkpO1xuICAgICAgICAgICAgICBpZiAoIWFueVNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihpID0+IGkgIT09IHBhcmVudCk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWxsU2VsZWN0ZWQgJiYgIXRoaXMuY2hlY2tJZlNlbGVjdGVkKHBhcmVudCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChwYXJlbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goaXRlbVRvQWRkKTtcblxuICAgICAgICBpZiAoaXNQYXJlbnQpIHtcbiAgICAgICAgICBpdGVtVG9BZGQuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlNlbGVjdGVkKGNoaWxkKSkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKHBhcmVudCA9PiB7XG4gICAgICAgICAgICBpZiAocGFyZW50LmNoaWxkcmVuPy5pbmNsdWRlcyhpdGVtVG9BZGQpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFsbFNlbGVjdGVkID0gcGFyZW50LmNoaWxkcmVuLmV2ZXJ5KGNoaWxkID0+IHRoaXMuY2hlY2tJZlNlbGVjdGVkKGNoaWxkKSk7XG4gICAgICAgICAgICAgIGlmIChhbGxTZWxlY3RlZCAmJiAhdGhpcy5jaGVja0lmU2VsZWN0ZWQocGFyZW50KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKHBhcmVudCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbaXRlbVRvQWRkXTtcbiAgICAgIHRoaXMudG9nZ2xlRHJvcGRvd24oKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNQYXJ0aWFsbHlTZWxlY3RlZChpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIWl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWRDaGlsZHJlbiA9IGl0ZW0uY2hpbGRyZW4uZmlsdGVyKGNoaWxkID0+IHRoaXMuY2hlY2tJZlNlbGVjdGVkKGNoaWxkKSk7XG4gICAgcmV0dXJuIHNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoID4gMCAmJiBzZWxlY3RlZENoaWxkcmVuLmxlbmd0aCA8IGl0ZW0uY2hpbGRyZW4ubGVuZ3RoO1xuICB9XG5cbiAgcHVibGljIGNoZWNrSWZTZWxlY3RlZChpdGVtPzogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgZ2V0VmFsdWUgPSAoZWw6IGFueSkgPT4gdGhpcy5jb25maWcgPyBlbFt0aGlzLmNvbmZpZy52YWx1ZV0gOiBlbDtcblxuICAgIGlmIChpdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zLnNvbWUoc2VsZWN0ZWQgPT4gZ2V0VmFsdWUoc2VsZWN0ZWQpID09PSBnZXRWYWx1ZShpdGVtKSk7XG4gICAgfVxuXG4gICAgY29uc3QgZmxhdHRlbiA9IHRoaXMuZmxhdHRlbkl0ZW1zKHRoaXMuYXZhaWxhYmxlT3B0aW9ucyk7XG4gICAgcmV0dXJuIGZsYXR0ZW4ubGVuZ3RoID4gMCAmJiBmbGF0dGVuLmV2ZXJ5KG9wdGlvbiA9PlxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnNvbWUoc2VsZWN0ZWQgPT4gZ2V0VmFsdWUoc2VsZWN0ZWQpID09PSBnZXRWYWx1ZShvcHRpb24pKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0QWxsSXRlbXMoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBmbGF0dGVuID0gdGhpcy5mbGF0dGVuSXRlbXModGhpcy5hdmFpbGFibGVPcHRpb25zKTtcbiAgICBjb25zdCBnZXRWYWx1ZSA9IChlbDogYW55KSA9PiB0aGlzLmNvbmZpZyA/IGVsW3RoaXMuY29uZmlnLnZhbHVlXSA6IGVsO1xuXG4gICAgY29uc3QgYWxsU2VsZWN0ZWQgPSBmbGF0dGVuLmV2ZXJ5KG9wdGlvbiA9PlxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnNvbWUoc2VsZWN0ZWQgPT4gZ2V0VmFsdWUoc2VsZWN0ZWQpID09PSBnZXRWYWx1ZShvcHRpb24pKVxuICAgICk7XG5cbiAgICBpZiAoYWxsU2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoc2VsZWN0ZWQgPT5cbiAgICAgICAgIWZsYXR0ZW4uc29tZShvcHRpb24gPT4gZ2V0VmFsdWUoc2VsZWN0ZWQpID09PSBnZXRWYWx1ZShvcHRpb24pKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxhdHRlbi5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEl0ZW1zLnNvbWUoc2VsZWN0ZWQgPT4gZ2V0VmFsdWUoc2VsZWN0ZWQpID09PSBnZXRWYWx1ZShvcHRpb24pKSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmxhdHRlbkl0ZW1zKGl0ZW1zOiBhbnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gaXRlbXMucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgIGFjYy5wdXNoKGl0ZW0pO1xuICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICBhY2MucHVzaCguLi50aGlzLmZsYXR0ZW5JdGVtcyhpdGVtLmNoaWxkcmVuKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcblxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXNSZXNwb25zZS5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc1Jlc3BvbnNlLmVtaXQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvcGVuUGFyZW50cyhpdGVtOiBhbnksIGl0ZW1zOiBhbnlbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgcGFyZW50IG9mIGl0ZW1zKSB7XG4gICAgICBpZiAocGFyZW50LmNoaWxkcmVuPy5pbmNsdWRlcyhpdGVtKSkge1xuICAgICAgICB0aGlzLm9wZW5DaGlsZHJlbk1hcC5zZXQocGFyZW50LCB0cnVlKTtcbiAgICAgICAgdGhpcy5vcGVuUGFyZW50cyhwYXJlbnQsIHRoaXMuaXRlbXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAocGFyZW50LmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMub3BlblBhcmVudHMoaXRlbSwgcGFyZW50LmNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmlsdGVySXRlbXMoKTogdm9pZCB7XG4gICAgY29uc3Qgc2VhcmNoID0gdGhpcy5zZWFyY2hUZXh0Py50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMub3BlbkNoaWxkcmVuTWFwLmNsZWFyKCk7XG5cbiAgICBpZiAoIXNlYXJjaCkge1xuICAgICAgdGhpcy5hdmFpbGFibGVPcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLml0ZW1zKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyUmVjdXJzaXZlID0gKGl0ZW1zOiBhbnlbXSk6IGFueVtdID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBoYXNDaGlsZHJlbiA9ICEhaXRlbS5jaGlsZHJlbj8ubGVuZ3RoO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuY29uZmlnID8gaXRlbVt0aGlzLmNvbmZpZy5sYWJlbF0gOiBpdGVtO1xuICAgICAgICBjb25zdCBtYXRjaCA9IGxhYmVsPy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoKTtcblxuICAgICAgICBsZXQgZmlsdGVyZWRDaGlsZHJlbiA9IFtdO1xuICAgICAgICBpZiAoaGFzQ2hpbGRyZW4pIHtcbiAgICAgICAgICBmaWx0ZXJlZENoaWxkcmVuID0gZmlsdGVyUmVjdXJzaXZlKGl0ZW0uY2hpbGRyZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5jbHVkZUl0ZW0gPSBoYXNDaGlsZHJlbiA/IGZpbHRlcmVkQ2hpbGRyZW4ubGVuZ3RoID4gMCA6IG1hdGNoO1xuXG4gICAgICAgIGlmIChpbmNsdWRlSXRlbSkge1xuICAgICAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7IC4uLml0ZW0gfTtcbiAgICAgICAgICBpZiAoZmlsdGVyZWRDaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBuZXdJdGVtLmNoaWxkcmVuID0gZmlsdGVyZWRDaGlsZHJlbjtcbiAgICAgICAgICAgIHRoaXMub3BlbkNoaWxkcmVuTWFwLnNldChuZXdJdGVtLCB0cnVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIG5ld0l0ZW0uY2hpbGRyZW47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdC5wdXNoKG5ld0l0ZW0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgdGhpcy5hdmFpbGFibGVPcHRpb25zID0gZmlsdGVyUmVjdXJzaXZlKHRoaXMuaXRlbXMpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKSBvbkRvY3VtZW50Q2xpY2soJGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2VyZWYubmF0aXZlRWxlbWVudC5jb250YWlucygkZXZlbnQudGFyZ2V0KSAmJiB0aGlzLmRyb3Bkb3duT3BlbmVkKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXNSZXNwb25zZS5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1zWzBdKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zUmVzcG9uc2UuZW1pdCh0aGlzLnNlbGVjdGVkSXRlbXNbMF0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgdGhpcy5kcm9wZG93bk9wZW5lZCA9IGZhbHNlO1xuICAgICAgdGhpcy5hdmFpbGFibGVPcHRpb25zID0gdGhpcy5pdGVtcztcbiAgICAgIHRoaXMuZHJvcGRvd25TdGF0ZUNoYW5nZS5lbWl0KHRoaXMuZHJvcGRvd25PcGVuZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRDdXJyZW5jeUljb25TaXplKHNpemU6IHN0cmluZykge1xuICAgIHN3aXRjaCAoc2l6ZSkge1xuICAgICAgY2FzZSAnc20nOlxuICAgICAgICByZXR1cm4gJ3NtLTE2JztcbiAgICAgIGNhc2UgJ2xnJzpcbiAgICAgICAgcmV0dXJuICdsZy0zMic7XG4gICAgICBjYXNlICd4bCc6XG4gICAgICAgIHJldHVybiAneGwtNDAnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdtZC0yNCc7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFNwYWNpbmdDbGFzcyhzaXplOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHNpemUpIHtcbiAgICAgIGNhc2UgJ3NtJzpcbiAgICAgICAgcmV0dXJuICdncmF2aXR5LW1hcmdpbi1yaWdodC14eHMnO1xuICAgICAgY2FzZSAnbWQnOlxuICAgICAgICByZXR1cm4gJ2dyYXZpdHktbWFyZ2luLXJpZ2h0LXhzJztcbiAgICAgIGNhc2UgJ2xnJzpcbiAgICAgICAgcmV0dXJuICdncmF2aXR5LW1hcmdpbi1yaWdodC1zbSc7XG4gICAgICBjYXNlICd4bCc6XG4gICAgICAgIHJldHVybiAnZ3Jhdml0eS1tYXJnaW4tcmlnaHQtbWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRNdWx0aWxldmVsU3BhY2luZ0NsYXNzKHNpemU6IHN0cmluZykge1xuICAgIHN3aXRjaCAoc2l6ZSkge1xuICAgICAgY2FzZSAnc20nOlxuICAgICAgICByZXR1cm4gJ2dyYXZpdHktbWFyZ2luLXJpZ2h0LW1kJztcbiAgICAgIGNhc2UgJ21kJzpcbiAgICAgICAgcmV0dXJuICdncmF2aXR5LW1hcmdpbi1yaWdodC1sZyc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldExhYmVsVGV4dCgpOiBzdHJpbmcge1xuICAgIGxldCByZXN1bHQ6IHN0cmluZyA9ICcnO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLmxhYmVsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICBsZXQgZGlzcGxheVZhbHVlID0gdGhpcy5jb25maWcgPyBpdGVtW3RoaXMuY29uZmlnLmxhYmVsXSA6IGl0ZW07XG4gICAgICAgIGxldCBzZXBhcmF0b3IgPSBpICE9PSB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoIC0gMSA/ICcsJyA6ICcnO1xuICAgICAgICByZXN1bHQgPSByZXN1bHQgKyBkaXNwbGF5VmFsdWUgKyBzZXBhcmF0b3I7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBpc0NoaWxkcmVuT3BlbihpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vcGVuQ2hpbGRyZW5NYXAuZ2V0KGl0ZW0pID09PSB0cnVlO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUNoaWxkcmVuKGl0ZW06IGFueSwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5vcGVuQ2hpbGRyZW5NYXAuZ2V0KGl0ZW0pIHx8IGZhbHNlO1xuICAgIHRoaXMub3BlbkNoaWxkcmVuTWFwLnNldChpdGVtLCAhY3VycmVudCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGlzcGxheVZhbHVlKGNoaWxkOiBhbnksIGNvbmZpZz86IHsgbGFiZWw6IHN0cmluZyB9KTogc3RyaW5nIHtcbiAgICBpZiAoY29uZmlnPy5sYWJlbCAmJiB0eXBlb2YgY2hpbGQgPT09ICdvYmplY3QnICYmIGNoaWxkICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gY2hpbGRbY29uZmlnLmxhYmVsXSA/PyAnJztcbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkID8/ICcnO1xuICB9XG5cbiAgcHVibGljIGlucHV0RGlzcGxheVZhbHVlKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkSXRlbXM/Lmxlbmd0aCkgcmV0dXJuICcnO1xuXG4gICAgY29uc3QgZ2V0VmFsdWUgPSAoaXRlbTogYW55KSA9PiB0aGlzLmNvbmZpZyA/IGl0ZW1bdGhpcy5jb25maWcudmFsdWVdIDogaXRlbTtcblxuICAgIGNvbnN0IGdldExhYmVsID0gKGl0ZW06IGFueSk6IHN0cmluZyA9PiB7XG4gICAgICBjb25zdCBiYXNlTGFiZWwgPSB0aGlzLmlzQ3VycmVuY3kgPyBpdGVtW3RoaXMuaXNvQ29uZmlnXSA6IHRoaXMuY29uZmlnID8gaXRlbVt0aGlzLmNvbmZpZy5sYWJlbF0gOiBpdGVtO1xuXG4gICAgICBpZiAoIXRoaXMubXVsdGlwbGUgJiYgaXRlbS5uZXR3b3JrPy5jb2RlICYmIChpdGVtLm5ldHdvcmtfaWQgIT09IGl0ZW0uY3VycmVuY3lfaWQgfHwgaXRlbS5jaGlsZHJlbiB8fCBpdGVtLmlzX0VSQzIwKSkge1xuICAgICAgICB0aGlzLm5ldHdvcmtDb25maWcgPSB7bGFiZWw6IGJhc2VMYWJlbCwgaXNvOiBpdGVtLm5ldHdvcms/LmNvZGUsIGlkOiBpdGVtLm5ldHdvcmtfaWR9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBiYXNlTGFiZWw7XG4gICAgfTtcblxuICAgIGlmICghdGhpcy5pdGVtcz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zLm1hcChnZXRMYWJlbCkuam9pbignLCAnKTtcbiAgICB9XG5cbiAgICBjb25zdCBsYWJlbHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHBhcmVudCBvZiB0aGlzLml0ZW1zKSB7XG4gICAgICBpZiAocGFyZW50LmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYWxsQ2hpbGRyZW5TZWxlY3RlZCA9IHBhcmVudC5jaGlsZHJlbi5ldmVyeShjaGlsZCA9PlxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5zb21lKHNlbCA9PiBnZXRWYWx1ZShzZWwpID09PSBnZXRWYWx1ZShjaGlsZCkpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGFsbENoaWxkcmVuU2VsZWN0ZWQpIHtcbiAgICAgICAgICBsYWJlbHMucHVzaChnZXRMYWJlbChwYXJlbnQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHBhcmVudC5jaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcy5zb21lKHNlbCA9PiBnZXRWYWx1ZShzZWwpID09PSBnZXRWYWx1ZShjaGlsZCkpKSB7XG4gICAgICAgICAgICAgIGxhYmVscy5wdXNoKGdldExhYmVsKGNoaWxkKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcy5zb21lKHNlbCA9PiBnZXRWYWx1ZShzZWwpID09PSBnZXRWYWx1ZShwYXJlbnQpKSkge1xuICAgICAgICBsYWJlbHMucHVzaChnZXRMYWJlbChwYXJlbnQpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50cnVuY2F0ZShsYWJlbHMpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cnVuY2F0ZShsYWJlbHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICBjb25zdCBtYXhJdGVtcyA9IHRoaXMud2lkdGggPT09ICdzaG9ydCcgPyAzIDogdGhpcy53aWR0aCA9PT0gJ21lZGl1bScgPyA2IDogMTI7XG4gICAgaWYgKGxhYmVscy5sZW5ndGggPD0gbWF4SXRlbXMpIHJldHVybiBsYWJlbHMuam9pbignLCAnKTtcbiAgICByZXR1cm4gbGFiZWxzLnNsaWNlKDAsIG1heEl0ZW1zKS5qb2luKCcsICcpICsgJy4uLic7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJTZWFyY2goKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gICAgdGhpcy5hdmFpbGFibGVPcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLml0ZW1zKSk7XG4gIH1cblxuICBwdWJsaWMgcHJldmVudFR5cGluZ1doZW5Mb2NrZWQoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGlucHV0OiBIVE1MSW5wdXRFbGVtZW50KSB7XG4gICAgY29uc3QgaXNMb2NrZWQgPSAhdGhpcy5kcm9wZG93bk9wZW5lZCB8fCAhdGhpcy5pdGVtcztcblxuICAgIGlmIChpc0xvY2tlZCkge1xuICAgICAgaWYgKGV2ZW50LmtleS5sZW5ndGggPT09IDEgfHwgZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyB8fCBldmVudC5rZXkgPT09ICdEZWxldGUnKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGlucHV0LmJsdXIoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJpbnB1dFR5cGUgPT09ICdmaWVsZCdcIj5cbiAgPGxhYmVsIGNsYXNzPVwiaHItbGFiZWwgc20tYm9sZCB7e2dldFN0YXR1cygpfX1cIiAqbmdJZj1cImxhYmVsXCI+XG4gICAge3sgbGFiZWwgfX0gPHNwYW4gKm5nSWY9XCJyZXF1aXJlZCB8fCBoYXNFcnJvclwiPio8L3NwYW4+XG4gIDwvbGFiZWw+XG48L25nLWNvbnRhaW5lcj5cblxuPGRpdiBjbGFzcz1cImdyYXZpdHktaW5wdXQtZmllbGQge3tpbnB1dFR5cGV9fS17e2xhYmVsU2l6ZX19IHt7c2l6ZX19IHt7d2lkdGh9fS13aWR0aCB7e2dldFN0YXR1cygpfX1cIlxuICAgICBbYXR0ci5kYXRhLWN5XT1cImN5cHJlc3NUYWdcIiAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oKTtcIj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW5wdXRUeXBlID09PSAnZmllbGQnXCI+XG4gICAgPGdyYXZpdHktaWNvbiBjbGFzcz1cImxlZnRcIiBbaWNvbk5hbWVdPVwiaWNvbkxlZnRcIiBbaWNvblNpemVdPVwiaXNJY29uTGVmdE5ldygpID8gJ21kLTE2JyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIoaWNvbkxlZnQgJiYgIWRyb3Bkb3duT3BlbmVkKSB8fCAoaWNvbkxlZnQgJiYgIWl0ZW1zKVwiPjwvZ3Jhdml0eS1pY29uPlxuXG4gICAgPGdyYXZpdHktaWNvbiBjbGFzcz1cInNlYXJjaC1pY29uXCIgW2ljb25OYW1lXT1cIidzZWFyY2gnXCIgW2ljb25TaXplXT1cIidzbS0xMidcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIoZHJvcGRvd25PcGVuZWQgJiYgaXRlbXMpXCI+PC9ncmF2aXR5LWljb24+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiIWRyb3Bkb3duT3BlbmVkICYmIG5ldHdvcmtDb25maWdcIiBjbGFzcz1cIm5ldHdvcmstcGlsbFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJoci1sYWJlbCB7e3NpemV9fS1yZWd1bGFyXCI+e3tuZXR3b3JrQ29uZmlnLmxhYmVsfX08L3NwYW4+XG4gICAgICA8Z3Jhdml0eS1uZXR3b3JrLXBpbGwgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIiBbbmV0d29ya109XCJ7aXNvOiBuZXR3b3JrQ29uZmlnLmlzbywgaWQ6IG5ldHdvcmtDb25maWcuaWR9XCI+PC9ncmF2aXR5LW5ldHdvcmstcGlsbD5cbiAgICA8L2Rpdj5cblxuICAgIDxpbnB1dCAqbmdJZj1cIiFuZXR3b3JrQ29uZmlnIHx8IGRyb3Bkb3duT3BlbmVkXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgY2xhc3M9XCJoci1sYWJlbCB7e3NpemV9fS1yZWd1bGFyIHt7Z2V0U3RhdHVzKCl9fVwiXG4gICAgICAgICAgIChmb2N1cyk9XCJzZWFyY2hUZXh0ID0gJydcIiBbY2xhc3MubG9ja2VkXT1cIiFkcm9wZG93bk9wZW5lZCB8fCAhaXRlbXNcIlxuICAgICAgICAgICAoa2V5ZG93bik9XCJwcmV2ZW50VHlwaW5nV2hlbkxvY2tlZCgkZXZlbnQsIHNlYXJjaElucHV0KVwiXG4gICAgICAgICAgIChpbnB1dCk9XCJmaWx0ZXJJdGVtcygpOyBkcm9wZG93bk9wZW5lZCA9IHRydWVcIlxuICAgICAgICAgICBbYXR0ci5kYXRhLWN5XT1cImN5cHJlc3NUYWcgKyAnX3NlYXJjaF9pbnB1dCdcIlxuICAgICAgICAgICAjc2VhcmNoSW5wdXRcbiAgICAgICAgICAgW25nTW9kZWxdPVwiKGRyb3Bkb3duT3BlbmVkICYmIGl0ZW1zKSA/IHNlYXJjaFRleHQgOiBpbnB1dERpc3BsYXlWYWx1ZSgpXCJcbiAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VhcmNoVGV4dCA9ICRldmVudFwiXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3soZHJvcGRvd25PcGVuZWQgJiYgaXRlbXMpID8gKGN1cnJlbnRMYW5nID09ICdlcycgPyAnQnVzY2FyJyA6ICdTZWFyY2ggaW5wdXQnKSA6IChwbGFjZWhvbGRlciA/IHBsYWNlaG9sZGVyIDogbGFiZWwpfX1cIj5cblxuICAgIDxncmF2aXR5LWljb24gY2xhc3M9XCJyaWdodFwiIFtpY29uTmFtZV09XCJkcm9wZG93bk9wZW5lZCA/ICdhcnJvdy11cCc6ICdhcnJvdy1kb3duJ1wiXG4gICAgICAgICAgICAgICAgICBbaWNvblNpemVdPVwiJ21kLTE2J1wiICpuZ0lmPVwiIWlzUmVhZG9ubHkgJiYgc2VhcmNoVGV4dC5sZW5ndGggPT0gMFwiPjwvZ3Jhdml0eS1pY29uPlxuXG4gICAgPGdyYXZpdHktaWNvbiBjbGFzcz1cInJpZ2h0XCIgW2ljb25OYW1lXT1cIid1bnN1Y2Nlc3MnXCIgKGNsaWNrKT1cImNsZWFyU2VhcmNoKClcIlxuICAgICAgICAgICAgICAgICAgW2ljb25TaXplXT1cIidtZC0xNidcIiAqbmdJZj1cImRyb3Bkb3duT3BlbmVkICYmIHNlYXJjaFRleHQubGVuZ3RoID4gMFwiPjwvZ3Jhdml0eS1pY29uPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW5wdXRUeXBlID09PSAnbGFiZWwnXCI+XG4gICAgPGdyYXZpdHktZHJvcGRvd24tbGFiZWwgKG9uQ2xpY2tMYWJlbCk9XCJ0b2dnbGVEcm9wZG93bigpXCIgW2xhYmVsXT1cImdldExhYmVsVGV4dCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCJsYWJlbFNpemVcIiBbaXNPcGVuXT1cImRyb3Bkb3duT3BlbmVkXCI+XG4gICAgPC9ncmF2aXR5LWRyb3Bkb3duLWxhYmVsPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tcGFuZWwge3tnZXRTdGF0dXMoKX19XCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiICpuZ0lmPVwiaXRlbXMgJiYgZHJvcGRvd25PcGVuZWRcIlxuICAgICAgIFthdHRyLmRhdGEtY3ldPVwiY3lwcmVzc1RhZyArICdfcGFuZWwnXCI+XG4gICAgPGRpdiBjbGFzcz1cInNlYXJjaC1pbnB1dFwiICpuZ0lmPVwiaW5wdXRUeXBlID09PSAnbGFiZWwnXCI+XG4gICAgICA8Z3Jhdml0eS1pY29uIGNsYXNzPVwic2VhcmNoLWljb25cIiBbaWNvbk5hbWVdPVwiJ3NlYXJjaCdcIiBbaWNvblNpemVdPVwiJ3NtLTEyJ1wiPjwvZ3Jhdml0eS1pY29uPlxuICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIGNsYXNzPVwiaHItbGFiZWwge3tzaXplfX0tcmVndWxhclwiIChpbnB1dCk9XCJmaWx0ZXJJdGVtcygpXCJcbiAgICAgICAgICAgICBbYXR0ci5kYXRhLWN5XT1cImN5cHJlc3NUYWcgKyAnX3NlYXJjaF9pbnB1dCdcIiAjc2VhcmNoSW5wdXRcbiAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIiBwbGFjZWhvbGRlcj1cInt7Y3VycmVudExhbmcgPT0gJ2VzJyA/ICdCdXNjYXInIDogJ1NlYXJjaCBpbnB1dCd9fVwiPlxuICAgICAgPGdyYXZpdHktaWNvbiBjbGFzcz1cInBvaW50ZXIgcmVzZXQtaWNvblwiIChjbGljayk9XCJzZWFyY2hUZXh0ID0gJyc7IGZpbHRlckl0ZW1zKClcIiBbaWNvbk5hbWVdPVwiJ3Vuc3VjY2VzcydcIlxuICAgICAgICAgICAgICAgICAgICBbaWNvblNpemVdPVwiJ3NtLTEyJ1wiICpuZ0lmPVwic2VhcmNoVGV4dD8ubGVuZ3RoID4gMFwiPjwvZ3Jhdml0eS1pY29uPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInNlbGVjdC1hbGxcIiAqbmdJZj1cIm11bHRpcGxlICYmIGF2YWlsYWJsZU9wdGlvbnMubGVuZ3RoICE9IDBcIj5cbiAgICAgIDxncmF2aXR5LWNoZWNrYm94IFtuZ0NsYXNzXT1cImdldFNwYWNpbmdDbGFzcyhzaXplKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0QWxsSXRlbXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJjaGVja0lmU2VsZWN0ZWQoKVwiPjwvZ3Jhdml0eS1jaGVja2JveD5cbiAgICAgIDxwIGNsYXNzPVwiaHItbGFiZWwge3tzaXplfX0tcmVndWxhclwiPnt7IGN1cnJlbnRMYW5nID09ICdlcycgPyAnU2VsZWNjaW9uYXIgdG9kbycgOiAnU2VsZWN0IGFsbCcgfX08L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaXRlbXMtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiaXRlbXNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY29udGFpbmVyXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYXZhaWxhYmxlT3B0aW9uc1wiXG4gICAgICAgICAgICAgW2F0dHIuZGF0YS1jeV09XCJpc0N1cnJlbmN5ID8gJ2N1cnJlbmN5X29wdGlvbl8nICsgaXRlbS5jdXJyZW5jeV9pZCA6ICcnXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhyLWxhYmVsIGl0ZW0ge3tzaXplfX0tcmVndWxhciBwb2ludGVyXCJcbiAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJjaGVja0lmU2VsZWN0ZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAgW2NsYXNzLnBhcnRpYWxdPVwiaXNQYXJ0aWFsbHlTZWxlY3RlZChpdGVtKVwiXG4gICAgICAgICAgICAgICAoY2xpY2spPVwiaXRlbS5jaGlsZHJlbj8ubGVuZ3RoID8gbXVsdGlwbGUgPyBzZWxlY3RJdGVtKGl0ZW0pIDogdG9nZ2xlQ2hpbGRyZW4oaXRlbSwgJGV2ZW50KSA6IHNlbGVjdEl0ZW0oaXRlbSlcIj5cblxuICAgICAgICAgICAgPGdyYXZpdHktY2hlY2tib3ggKm5nSWY9XCJtdWx0aXBsZVwiIFtuZ0NsYXNzXT1cImdldFNwYWNpbmdDbGFzcyhzaXplKVwiXG4gICAgICAgICAgICAgIFtpc1BhcnRpYWxdPVwiaXNQYXJ0aWFsbHlTZWxlY3RlZChpdGVtKVwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImNoZWNrSWZTZWxlY3RlZChpdGVtKVwiPlxuICAgICAgICAgICAgPC9ncmF2aXR5LWNoZWNrYm94PlxuXG4gICAgICAgICAgICA8Z3Jhdml0eS1jdXJyZW5jeS1kaXNwbGF5LXYyICpuZ0lmPVwiaXNDdXJyZW5jeVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0U3BhY2luZ0NsYXNzKHNpemUpXCJcbiAgICAgICAgICAgICAgICBbdHlwZV09XCJpdGVtLnR5cGUgPT09ICdGSUFUJyA/ICdmaWF0LXNob3J0JyA6ICdzaG9ydC1ocnonXCJcbiAgICAgICAgICAgICAgICBbY3VycmVuY3ldPVwie1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeV9uYW1lOiBpdGVtLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5X2lkOiBpdGVtLmN1cnJlbmN5X2lkLCBjdXJyZW5jeV9pc286IGl0ZW0uaXNvLFxuICAgICAgICAgICAgICAgICAgICBuZXR3b3JrX2lkOiBpdGVtLm5ldHdvcms/LmlkLCBuZXR3b3JrX2lzbzogaXRlbS5uZXR3b3JrPy5jb2RlLFxuICAgICAgICAgICAgICAgICAgICBwaWxsX3R5cGU6IGNoZWNrSWZTZWxlY3RlZChpdGVtKSA/ICdzZWNvbmRhcnknIDogJ3ByaW1hcnknfVwiID5cbiAgICAgICAgICAgIDwvZ3Jhdml0eS1jdXJyZW5jeS1kaXNwbGF5LXYyPlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzQ3VycmVuY3lcIiBbbmdDbGFzc109XCJnZXRTcGFjaW5nQ2xhc3Moc2l6ZSlcIj57eyBnZXREaXNwbGF5VmFsdWUoaXRlbSwgY29uZmlnKSB9fTwvZGl2PlxuXG4gICAgICAgICAgICA8Z3Jhdml0eS1pY29uIHN0eWxlPVwibWFyZ2luLWxlZnQ6IGF1dG9cIiAoY2xpY2spPVwidG9nZ2xlQ2hpbGRyZW4oaXRlbSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uTmFtZV09XCJpc0NoaWxkcmVuT3BlbihpdGVtKSA/ICdhcnJvdy11cCcgOiAnYXJyb3ctZG93bidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvblNpemVdPVwiJ21kLTE2J1wiICpuZ0lmPVwiaXRlbS5jaGlsZHJlbj8ubGVuZ3RoXCI+PC9ncmF2aXR5LWljb24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jaGlsZHJlblwiICpuZ0lmPVwiaXRlbS5jaGlsZHJlbj8ubGVuZ3RoICYmIGlzQ2hpbGRyZW5PcGVuKGl0ZW0pXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjaGlsZCBvZiBpdGVtLmNoaWxkcmVuXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoci1sYWJlbCBpdGVtIHt7c2l6ZX19LXJlZ3VsYXIgcG9pbnRlclwiIFtuZ0NsYXNzXT1cInsnbXVsdGlwbGUnIDogbXVsdGlwbGV9XCJcbiAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiY2hlY2tJZlNlbGVjdGVkKGNoaWxkKVwiXG4gICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEl0ZW0oY2hpbGQpXCI+XG4gICAgICAgICAgICAgICAgPGdyYXZpdHktY2hlY2tib3ggKm5nSWY9XCJtdWx0aXBsZVwiIFtuZ0NsYXNzXT1cImdldE11bHRpbGV2ZWxTcGFjaW5nQ2xhc3Moc2l6ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImNoZWNrSWZTZWxlY3RlZChjaGlsZClcIj48L2dyYXZpdHktY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgPGdyYXZpdHktY3VycmVuY3kgKm5nSWY9XCJpc0N1cnJlbmN5XCIgW25nQ2xhc3NdPVwiZ2V0U3BhY2luZ0NsYXNzKHNpemUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCJnZXRDdXJyZW5jeUljb25TaXplKHNpemUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VycmVuY3ldPVwie2N1cnJlbmN5X2lkOiBjaGlsZC5jdXJyZW5jeV9pZH1cIj48L2dyYXZpdHktY3VycmVuY3k+XG4gICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJnZXRTcGFjaW5nQ2xhc3Moc2l6ZSlcIj57eyBnZXREaXNwbGF5VmFsdWUoY2hpbGQsIGNvbmZpZykgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8Z3Jhdml0eS1uZXR3b3JrLXBpbGwgKm5nSWY9XCJpc0N1cnJlbmN5XCIgW3R5cGVdPVwiY2hlY2tJZlNlbGVjdGVkKGNoaWxkKSA/ICdzZWNvbmRhcnknIDogJ3ByaW1hcnknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25ldHdvcmtdPVwieyBpc286IGNoaWxkLm5ldHdvcms/LmNvZGUsIGlkOiBjaGlsZC5uZXR3b3JrPy5pZCB9XCI+PC9ncmF2aXR5LW5ldHdvcmstcGlsbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWNvbnRhaW5lclwiICpuZ0lmPVwiYXZhaWxhYmxlT3B0aW9ucy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaHItbGFiZWwgaXRlbSB7e3NpemV9fS1ib2xkIG5vLXJlc3VsdHNcIj5cbiAgICAgICAgICAgIHt7IGN1cnJlbnRMYW5nID09ICdlcycgPyAnU2luIHJlc3VsdGFkb3MgZW5jb250cmFkb3MnIDogJ05vIHJlc3VsdHMgZm91bmQuJyB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWZvb3RlclwiICpuZ0lmPVwic2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwICYmIGF2YWlsYWJsZU9wdGlvbnMubGVuZ3RoICE9PSAwXCJcbiAgICAgICAgIFtjbGFzcy5ub3QtY2xlYXJhYmxlXT1cIiFjbGVhcmFibGVcIj5cbiAgICAgIDxncmF2aXR5LWxpbmsgKm5nSWY9XCJjbGVhcmFibGVcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJTZWxlY3Rpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgIFtmb250Q2xhc3NdPVwiJ2hyLWxhYmVsIHNtLXJlZ3VsYXInXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jeV09XCJjeXByZXNzVGFnICsgJ19jbGVhcidcIlxuICAgICAgICAgICAgICAgICAgICBbbGlua1RleHRdPVwiY3VycmVudExhbmcgPT0gJ2VzJyA/ICdMaW1waWFyJyA6ICdDbGVhciBzZWxlY3Rpb24nXCI+XG4gICAgICA8L2dyYXZpdHktbGluaz5cblxuICAgICAgPGdyYXZpdHktbGluayAqbmdJZj1cImF2YWlsYWJsZU9wdGlvbnMubGVuZ3RoICE9IDBcIlxuICAgICAgICAgICAgICAgICAgICBbZm9udENsYXNzXT1cIidoci1sYWJlbCBzbS1ib2xkJ1wiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtY3ldPVwiY3lwcmVzc1RhZyArICdfYXBwbHknXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgdG9nZ2xlRHJvcGRvd24oKVwiXG4gICAgICAgICAgICAgICAgICAgIFtsaW5rVGV4dF09XCJjdXJyZW50TGFuZyA9PSAnZXMnID8gJ0FwbGljYXInIDogJ0FwcGx5J1wiPlxuICAgICAgPC9ncmF2aXR5LWxpbms+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWZvb3RlciBuby1yZXN1bHRzXCIgKm5nSWY9XCJhdmFpbGFibGVPcHRpb25zLmxlbmd0aCA9PT0gMFwiIFtjbGFzcy5ub3QtY2xlYXJhYmxlXT1cIiFjbGVhcmFibGVcIj5cbiAgICAgIDxncmF2aXR5LWxpbmsgKm5nSWY9XCJjbGVhcmFibGVcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJTZWFyY2goKVwiXG4gICAgICAgICAgICAgICAgICAgIFtmb250Q2xhc3NdPVwiJ2hyLWxhYmVsIHNtLXJlZ3VsYXInXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jeV09XCJjeXByZXNzVGFnICsgJ19jbGVhcl9zZWFyY2gnXCJcbiAgICAgICAgICAgICAgICAgICAgW2xpbmtUZXh0XT1cImN1cnJlbnRMYW5nID09ICdlcycgPyAnTGltcGlhciBiw7pzcXVlZGEnIDogJ0NsZWFyIHNlYXJjaCdcIj5cbiAgICAgIDwvZ3Jhdml0eS1saW5rPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8c2VjdGlvbiBjbGFzcz1cImV4dGVybmFsLWNvbnRlbnRcIiAqbmdJZj1cIiFpdGVtcyAmJiBkcm9wZG93bk9wZW5lZFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiaW5wdXRUeXBlID09PSAnZmllbGQnXCI+XG4gIDxwIGNsYXNzPVwiaHItbGFiZWwgc20tcmVndWxhciBzdXBwb3J0aW5nLXRleHQge3tnZXRTdGF0dXMoKX19IHt7c2l6ZX19XCIgKm5nSWY9XCJzdXBwb3J0VGV4dFwiPlxuICAgIHt7IHN1cHBvcnRUZXh0IH19XG4gIDwvcD5cbiAgPHAgY2xhc3M9XCJoci1sYWJlbCBzbS1yZWd1bGFyIHN1cHBvcnRpbmctdGV4dCB7e2dldFN0YXR1cygpfX0ge3tzaXplfX1cIlxuICAgICAqbmdJZj1cIiFzdXBwb3J0VGV4dCAmJiBnZXRTdGF0dXMoKSA9PSAnYWN0aXZlJyAmJiBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PSAwICYmIHJlcXVpcmVkXCI+XG4gICAge3sgY3VycmVudExhbmcgPT0gJ2VzJyA/ICdSZXF1ZXJpZG8nIDogJ1JlcXVpcmVkJyB9fVxuICA8L3A+XG48L25nLWNvbnRhaW5lcj4iXX0=
@@ -416,8 +416,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
416
416
  }] } });
417
417
 
418
418
  class GravityDropdownListComponent {
419
- get dropdownState() { return this.dropdownOpened; }
420
- set dropdownState(value) { this.dropdownOpened = value; }
419
+ get dropdownState() {
420
+ return this.dropdownOpened;
421
+ }
422
+ set dropdownState(value) {
423
+ this.dropdownOpened = value;
424
+ }
421
425
  set watch(searchInput) {
422
426
  if (searchInput) {
423
427
  searchInput.nativeElement.focus({ preventScroll: true });
@@ -664,23 +668,34 @@ class GravityDropdownListComponent {
664
668
  filterItems() {
665
669
  const search = this.searchText?.toLowerCase();
666
670
  this.openChildrenMap.clear();
671
+ if (!search) {
672
+ this.availableOptions = JSON.parse(JSON.stringify(this.items));
673
+ return;
674
+ }
667
675
  const filterRecursive = (items) => {
668
- return items
669
- .filter(item => {
676
+ const result = [];
677
+ items.forEach(item => {
678
+ const hasChildren = !!item.children?.length;
670
679
  const label = this.config ? item[this.config.label] : item;
671
680
  const match = label?.toString().toLowerCase().includes(search);
672
- if (item.children) {
673
- const childMatches = filterRecursive(item.children);
674
- if (childMatches.length > 0) {
675
- this.openChildrenMap.set(item, true);
676
- }
677
- return match || childMatches.length > 0;
681
+ let filteredChildren = [];
682
+ if (hasChildren) {
683
+ filteredChildren = filterRecursive(item.children);
678
684
  }
679
- if (match) {
680
- this.openParents(item, this.items);
685
+ const includeItem = hasChildren ? filteredChildren.length > 0 : match;
686
+ if (includeItem) {
687
+ const newItem = { ...item };
688
+ if (filteredChildren.length > 0) {
689
+ newItem.children = filteredChildren;
690
+ this.openChildrenMap.set(newItem, true);
691
+ }
692
+ else {
693
+ delete newItem.children;
694
+ }
695
+ result.push(newItem);
681
696
  }
682
- return match;
683
697
  });
698
+ return result;
684
699
  };
685
700
  this.availableOptions = filterRecursive(this.items);
686
701
  }
@@ -807,7 +822,7 @@ class GravityDropdownListComponent {
807
822
  }
808
823
  clearSearch() {
809
824
  this.searchText = '';
810
- this.availableOptions = this.items;
825
+ this.availableOptions = JSON.parse(JSON.stringify(this.items));
811
826
  }
812
827
  preventTypingWhenLocked(event, input) {
813
828
  const isLocked = !this.dropdownOpened || !this.items;