@tetacom/ng-components 1.0.30 → 1.0.31

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.
@@ -15,6 +15,7 @@ export declare class ListCellComponent<T> extends CellComponentBase<T> implement
15
15
  row: TableRow<T>;
16
16
  filterOptions: IIdName<any>[];
17
17
  get value(): string;
18
+ get displayFilterOptions(): IIdName<any>[];
18
19
  input: SelectComponent;
19
20
  verticalAlign: typeof VerticalAlign;
20
21
  constructor(svc: TableService<T>, cdr: ChangeDetectorRef);
@@ -17,7 +17,17 @@ export class ListCellComponent extends CellComponentBase {
17
17
  get value() {
18
18
  return this.getValue();
19
19
  }
20
+ get displayFilterOptions() {
21
+ if (this.column?.parentName?.length > 0) {
22
+ const parentValue = this.row.data[this.column.parentName];
23
+ if (parentValue) {
24
+ return this.filterOptions.filter(_ => _.parentId === parentValue);
25
+ }
26
+ }
27
+ return this.filterOptions;
28
+ }
20
29
  setValue(value) {
30
+ // if(this.c)
21
31
  this.row.data[this.column.name] = value;
22
32
  this.valueChanged();
23
33
  }
@@ -49,10 +59,10 @@ export class ListCellComponent extends CellComponentBase {
49
59
  }
50
60
  }
51
61
  ListCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: ListCellComponent, deps: [{ token: i1.TableService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
52
- ListCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.1", type: ListCellComponent, selector: "teta-list-cell", inputs: { column: "column", row: "row", filterOptions: "filterOptions" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<span [style.display]=\"edit ? 'none' : 'block'\" class=\"cell-text\">\n {{value}}\n</span>\n<teta-select #input\n class=\"row_auto select-table\"\n *ngIf=\"edit\"\n [allowNull]=\"!column.required\"\n [verticalAlign]=\"verticalAlign.auto\"\n [appendToBody]=\"true\"\n [options]=\"filterOptions\"\n [valueRef]=\"'id'\"\n [textRef]=\"'name'\"\n [ngModel]=\"row.data[column.name]\"\n (ngModelChange)=\"setValue($event)\">\n</teta-select>\n", styles: [""], components: [{ type: i2.SelectComponent, selector: "teta-select", inputs: ["multiple", "options", "invalid", "align", "verticalAlign", "autoClose", "autoCloseIgnore", "disabled", "itemSize", "virtual", "icon", "placeholder", "appendToBody", "allowNull", "valueRef", "textRef", "searchRef"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
62
+ ListCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.1", type: ListCellComponent, selector: "teta-list-cell", inputs: { column: "column", row: "row", filterOptions: "filterOptions" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<span [style.display]=\"edit ? 'none' : 'block'\" class=\"cell-text\">\n {{value}}\n</span>\n<teta-select #input\n class=\"row_auto select-table\"\n *ngIf=\"edit\"\n [allowNull]=\"!column.required\"\n [verticalAlign]=\"verticalAlign.auto\"\n [appendToBody]=\"true\"\n [options]=\"displayFilterOptions\"\n [valueRef]=\"'id'\"\n [textRef]=\"'name'\"\n [ngModel]=\"row.data[column.name]\"\n (ngModelChange)=\"setValue($event)\">\n</teta-select>\n", styles: [""], components: [{ type: i2.SelectComponent, selector: "teta-select", inputs: ["multiple", "options", "invalid", "align", "verticalAlign", "autoClose", "autoCloseIgnore", "disabled", "itemSize", "virtual", "icon", "placeholder", "appendToBody", "allowNull", "valueRef", "textRef", "searchRef"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
53
63
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: ListCellComponent, decorators: [{
54
64
  type: Component,
55
- args: [{ selector: 'teta-list-cell', changeDetection: ChangeDetectionStrategy.OnPush, template: "<span [style.display]=\"edit ? 'none' : 'block'\" class=\"cell-text\">\n {{value}}\n</span>\n<teta-select #input\n class=\"row_auto select-table\"\n *ngIf=\"edit\"\n [allowNull]=\"!column.required\"\n [verticalAlign]=\"verticalAlign.auto\"\n [appendToBody]=\"true\"\n [options]=\"filterOptions\"\n [valueRef]=\"'id'\"\n [textRef]=\"'name'\"\n [ngModel]=\"row.data[column.name]\"\n (ngModelChange)=\"setValue($event)\">\n</teta-select>\n", styles: [""] }]
65
+ args: [{ selector: 'teta-list-cell', changeDetection: ChangeDetectionStrategy.OnPush, template: "<span [style.display]=\"edit ? 'none' : 'block'\" class=\"cell-text\">\n {{value}}\n</span>\n<teta-select #input\n class=\"row_auto select-table\"\n *ngIf=\"edit\"\n [allowNull]=\"!column.required\"\n [verticalAlign]=\"verticalAlign.auto\"\n [appendToBody]=\"true\"\n [options]=\"displayFilterOptions\"\n [valueRef]=\"'id'\"\n [textRef]=\"'name'\"\n [ngModel]=\"row.data[column.name]\"\n (ngModelChange)=\"setValue($event)\">\n</teta-select>\n", styles: [""] }]
56
66
  }], ctorParameters: function () { return [{ type: i1.TableService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { column: [{
57
67
  type: Input
58
68
  }], row: [{
@@ -63,4 +73,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
63
73
  type: ViewChild,
64
74
  args: ['input', { static: false }]
65
75
  }] } });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvdGFibGUvZGVmYXVsdC9saXN0LWNlbGwvbGlzdC1jZWxsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvdGFibGUvZGVmYXVsdC9saXN0LWNlbGwvbGlzdC1jZWxsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFJdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFJbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7Ozs7QUFRNUUsTUFBTSxPQUFPLGlCQUNYLFNBQVEsaUJBQW9CO0lBZTVCLFlBQ3FCLEdBQW9CLEVBQ3BCLEdBQXNCO1FBRXpDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFIRyxRQUFHLEdBQUgsR0FBRyxDQUFpQjtRQUNwQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQVp6QixrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFRckQsa0JBQWEsR0FBRyxhQUFhLENBQUM7SUFPOUIsQ0FBQztJQWJELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFhRCxRQUFRLENBQUMsS0FBVTtRQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUN4QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFNBQVMsQ0FBQyxTQUE4QixFQUFFLElBQW9CO1FBQzVELElBQUksU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDL0MsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzFCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNQO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFUSxRQUFRO1FBQ2YsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFTyxRQUFRO1FBQ2QsSUFDRSxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUk7WUFDM0IsSUFBSSxDQUFDLGFBQWEsS0FBSyxTQUFTO1lBQ2hDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxZQUFZLEtBQUssQ0FBQyxFQUN0QztZQUNBLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDbEMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FDMUQsQ0FBQztRQUNGLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ3ZDLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQzs7OEdBNURVLGlCQUFpQjtrR0FBakIsaUJBQWlCLHVQQ3ZCOUIsK2lCQWVBOzJGRFFhLGlCQUFpQjtrQkFON0IsU0FBUzsrQkFDRSxnQkFBZ0IsbUJBR1QsdUJBQXVCLENBQUMsTUFBTTttSUFNN0IsTUFBTTtzQkFBdkIsS0FBSztnQkFDWSxHQUFHO3NCQUFwQixLQUFLO2dCQUNZLGFBQWE7c0JBQTlCLEtBQUs7Z0JBTWlDLEtBQUs7c0JBQTNDLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi9jb250cmFjdC90YWJsZS1jb2x1bW4nO1xuaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tICcuLi8uLi9jb250cmFjdC90YWJsZS1yb3cnO1xuaW1wb3J0IHsgVGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS90YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IENlbGxDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vYmFzZS9jZWxsLWNvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7IFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJSWROYW1lIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tbW9uL2NvbnRyYWN0L2ktaWQtbmFtZSc7XG5pbXBvcnQgeyBJQ2VsbENvb3JkaW5hdGVzIH0gZnJvbSAnLi4vLi4vY29udHJhY3QvaS1jZWxsLWNvb3JkaW5hdGVzJztcbmltcG9ydCB7IFZlcnRpY2FsQWxpZ24gfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vZW51bS92ZXJ0aWNhbC1hbGlnbi5lbnVtJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGV0YS1saXN0LWNlbGwnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC1jZWxsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC1jZWxsLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBMaXN0Q2VsbENvbXBvbmVudDxUPlxuICBleHRlbmRzIENlbGxDb21wb25lbnRCYXNlPFQ+XG4gIGltcGxlbWVudHMgT25Jbml0XG57XG4gIEBJbnB1dCgpIG92ZXJyaWRlIGNvbHVtbjogVGFibGVDb2x1bW47XG4gIEBJbnB1dCgpIG92ZXJyaWRlIHJvdzogVGFibGVSb3c8VD47XG4gIEBJbnB1dCgpIG92ZXJyaWRlIGZpbHRlck9wdGlvbnM6IElJZE5hbWU8YW55PltdID0gW107XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlKCk7XG4gIH1cblxuICBAVmlld0NoaWxkKCdpbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KSBpbnB1dDogU2VsZWN0Q29tcG9uZW50O1xuXG4gIHZlcnRpY2FsQWxpZ24gPSBWZXJ0aWNhbEFsaWduO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBzdmM6IFRhYmxlU2VydmljZTxUPixcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICBzdXBlcihzdmMsIGNkcik7XG4gIH1cblxuICBzZXRWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5yb3cuZGF0YVt0aGlzLmNvbHVtbi5uYW1lXSA9IHZhbHVlO1xuICAgIHRoaXMudmFsdWVDaGFuZ2VkKCk7XG4gIH1cblxuICBzdGFydEVkaXQoaW5pdGlhdG9yOiBJQ2VsbENvb3JkaW5hdGVzPFQ+LCB0eXBlOiAnY2VsbCcgfCAncm93Jyk6IHZvaWQge1xuICAgIGlmIChpbml0aWF0b3I/LmNvbHVtbi5uYW1lID09PSB0aGlzLmNvbHVtbi5uYW1lKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pbnB1dD8uZm9jdXMoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICBzdG9wRWRpdCgpIHtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gIH1cblxuICBwcml2YXRlIGdldFZhbHVlKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucyA9PT0gbnVsbCB8fFxuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zID09PSB1bmRlZmluZWQgfHxcbiAgICAgICEodGhpcy5maWx0ZXJPcHRpb25zIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmZpbHRlck9wdGlvbnMuZmluZChcbiAgICAgIChvcHRpb24pID0+IG9wdGlvbi5pZCA9PT0gdGhpcy5yb3cuZGF0YVt0aGlzLmNvbHVtbi5uYW1lXVxuICAgICk7XG4gICAgaWYgKGl0ZW0gPT09IG51bGwgfHwgaXRlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBpdGVtLm5hbWU7XG4gIH1cbn1cbiIsIjxzcGFuIFtzdHlsZS5kaXNwbGF5XT1cImVkaXQgPyAnbm9uZScgOiAnYmxvY2snXCIgY2xhc3M9XCJjZWxsLXRleHRcIj5cbiAge3t2YWx1ZX19XG48L3NwYW4+XG48dGV0YS1zZWxlY3QgI2lucHV0XG4gICAgICAgICAgICAgY2xhc3M9XCJyb3dfYXV0byBzZWxlY3QtdGFibGVcIlxuICAgICAgICAgICAgICpuZ0lmPVwiZWRpdFwiXG4gICAgICAgICAgICAgW2FsbG93TnVsbF09XCIhY29sdW1uLnJlcXVpcmVkXCJcbiAgICAgICAgICAgICBbdmVydGljYWxBbGlnbl09XCJ2ZXJ0aWNhbEFsaWduLmF1dG9cIlxuICAgICAgICAgICAgIFthcHBlbmRUb0JvZHldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgW29wdGlvbnNdPVwiZmlsdGVyT3B0aW9uc1wiXG4gICAgICAgICAgICAgW3ZhbHVlUmVmXT1cIidpZCdcIlxuICAgICAgICAgICAgIFt0ZXh0UmVmXT1cIiduYW1lJ1wiXG4gICAgICAgICAgICAgW25nTW9kZWxdPVwicm93LmRhdGFbY29sdW1uLm5hbWVdXCJcbiAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRWYWx1ZSgkZXZlbnQpXCI+XG48L3RldGEtc2VsZWN0PlxuIl19
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvdGFibGUvZGVmYXVsdC9saXN0LWNlbGwvbGlzdC1jZWxsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvdGFibGUvZGVmYXVsdC9saXN0LWNlbGwvbGlzdC1jZWxsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFJdkIsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFJakUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDZDQUE2QyxDQUFDOzs7Ozs7QUFRMUUsTUFBTSxPQUFPLGlCQUNYLFNBQVEsaUJBQW9CO0lBd0I1QixZQUNxQixHQUFvQixFQUNwQixHQUFzQjtRQUV6QyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBSEcsUUFBRyxHQUFILEdBQUcsQ0FBaUI7UUFDcEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUF0QnpCLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQWtCckQsa0JBQWEsR0FBRyxhQUFhLENBQUM7SUFPOUIsQ0FBQztJQXZCRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxvQkFBb0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUQsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssV0FBVyxDQUFDLENBQUM7YUFDbkU7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBYUQsUUFBUSxDQUFDLEtBQVU7UUFDakIsYUFBYTtRQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsU0FBUyxDQUFDLFNBQThCLEVBQUUsSUFBb0I7UUFDNUQsSUFBSSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtZQUMvQyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ1A7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVRLFFBQVE7UUFDZixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVPLFFBQVE7UUFDZCxJQUNFLElBQUksQ0FBQyxhQUFhLEtBQUssSUFBSTtZQUMzQixJQUFJLENBQUMsYUFBYSxLQUFLLFNBQVM7WUFDaEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLFlBQVksS0FBSyxDQUFDLEVBQ3RDO1lBQ0EsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNsQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUMxRCxDQUFDO1FBQ0YsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDdkMsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDOzs4R0F0RVUsaUJBQWlCO2tHQUFqQixpQkFBaUIsdVBDdkI5QixzakJBZUE7MkZEUWEsaUJBQWlCO2tCQU43QixTQUFTOytCQUNFLGdCQUFnQixtQkFHVCx1QkFBdUIsQ0FBQyxNQUFNO21JQUs3QixNQUFNO3NCQUF2QixLQUFLO2dCQUNZLEdBQUc7c0JBQXBCLEtBQUs7Z0JBQ1ksYUFBYTtzQkFBOUIsS0FBSztnQkFnQitCLEtBQUs7c0JBQXpDLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUYWJsZUNvbHVtbn0gZnJvbSAnLi4vLi4vY29udHJhY3QvdGFibGUtY29sdW1uJztcbmltcG9ydCB7VGFibGVSb3d9IGZyb20gJy4uLy4uL2NvbnRyYWN0L3RhYmxlLXJvdyc7XG5pbXBvcnQge1RhYmxlU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZS90YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7Q2VsbENvbXBvbmVudEJhc2V9IGZyb20gJy4uLy4uL2Jhc2UvY2VsbC1jb21wb25lbnQtYmFzZSc7XG5pbXBvcnQge1NlbGVjdENvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vc2VsZWN0L3NlbGVjdC9zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7SUlkTmFtZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29tbW9uL2NvbnRyYWN0L2ktaWQtbmFtZSc7XG5pbXBvcnQge0lDZWxsQ29vcmRpbmF0ZXN9IGZyb20gJy4uLy4uL2NvbnRyYWN0L2ktY2VsbC1jb29yZGluYXRlcyc7XG5pbXBvcnQge1ZlcnRpY2FsQWxpZ259IGZyb20gJy4uLy4uLy4uLy4uL2NvbW1vbi9lbnVtL3ZlcnRpY2FsLWFsaWduLmVudW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLWxpc3QtY2VsbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LWNlbGwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9saXN0LWNlbGwuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIExpc3RDZWxsQ29tcG9uZW50PFQ+XG4gIGV4dGVuZHMgQ2VsbENvbXBvbmVudEJhc2U8VD5cbiAgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBvdmVycmlkZSBjb2x1bW46IFRhYmxlQ29sdW1uO1xuICBASW5wdXQoKSBvdmVycmlkZSByb3c6IFRhYmxlUm93PFQ+O1xuICBASW5wdXQoKSBvdmVycmlkZSBmaWx0ZXJPcHRpb25zOiBJSWROYW1lPGFueT5bXSA9IFtdO1xuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgZ2V0IGRpc3BsYXlGaWx0ZXJPcHRpb25zKCk6IElJZE5hbWU8YW55PltdIHtcbiAgICBpZiAodGhpcy5jb2x1bW4/LnBhcmVudE5hbWU/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHBhcmVudFZhbHVlID0gdGhpcy5yb3cuZGF0YVt0aGlzLmNvbHVtbi5wYXJlbnROYW1lXTtcbiAgICAgIGlmIChwYXJlbnRWYWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJPcHRpb25zLmZpbHRlcihfID0+IF8ucGFyZW50SWQgPT09IHBhcmVudFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyT3B0aW9ucztcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0Jywge3N0YXRpYzogZmFsc2V9KSBpbnB1dDogU2VsZWN0Q29tcG9uZW50O1xuXG4gIHZlcnRpY2FsQWxpZ24gPSBWZXJ0aWNhbEFsaWduO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBzdmM6IFRhYmxlU2VydmljZTxUPixcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICBzdXBlcihzdmMsIGNkcik7XG4gIH1cblxuICBzZXRWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgLy8gaWYodGhpcy5jKVxuICAgIHRoaXMucm93LmRhdGFbdGhpcy5jb2x1bW4ubmFtZV0gPSB2YWx1ZTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlZCgpO1xuICB9XG5cbiAgc3RhcnRFZGl0KGluaXRpYXRvcjogSUNlbGxDb29yZGluYXRlczxUPiwgdHlwZTogJ2NlbGwnIHwgJ3JvdycpOiB2b2lkIHtcbiAgICBpZiAoaW5pdGlhdG9yPy5jb2x1bW4ubmFtZSA9PT0gdGhpcy5jb2x1bW4ubmFtZSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaW5wdXQ/LmZvY3VzKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgc3RvcEVkaXQoKSB7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWx1ZSgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZpbHRlck9wdGlvbnMgPT09IG51bGwgfHxcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAhKHRoaXMuZmlsdGVyT3B0aW9ucyBpbnN0YW5jZW9mIEFycmF5KVxuICAgICkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb25zdCBpdGVtID0gdGhpcy5maWx0ZXJPcHRpb25zLmZpbmQoXG4gICAgICAob3B0aW9uKSA9PiBvcHRpb24uaWQgPT09IHRoaXMucm93LmRhdGFbdGhpcy5jb2x1bW4ubmFtZV1cbiAgICApO1xuICAgIGlmIChpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbS5uYW1lO1xuICB9XG59XG4iLCI8c3BhbiBbc3R5bGUuZGlzcGxheV09XCJlZGl0ID8gJ25vbmUnIDogJ2Jsb2NrJ1wiIGNsYXNzPVwiY2VsbC10ZXh0XCI+XG4gIHt7dmFsdWV9fVxuPC9zcGFuPlxuPHRldGEtc2VsZWN0ICNpbnB1dFxuICAgICAgICAgICAgIGNsYXNzPVwicm93X2F1dG8gc2VsZWN0LXRhYmxlXCJcbiAgICAgICAgICAgICAqbmdJZj1cImVkaXRcIlxuICAgICAgICAgICAgIFthbGxvd051bGxdPVwiIWNvbHVtbi5yZXF1aXJlZFwiXG4gICAgICAgICAgICAgW3ZlcnRpY2FsQWxpZ25dPVwidmVydGljYWxBbGlnbi5hdXRvXCJcbiAgICAgICAgICAgICBbYXBwZW5kVG9Cb2R5XT1cInRydWVcIlxuICAgICAgICAgICAgIFtvcHRpb25zXT1cImRpc3BsYXlGaWx0ZXJPcHRpb25zXCJcbiAgICAgICAgICAgICBbdmFsdWVSZWZdPVwiJ2lkJ1wiXG4gICAgICAgICAgICAgW3RleHRSZWZdPVwiJ25hbWUnXCJcbiAgICAgICAgICAgICBbbmdNb2RlbF09XCJyb3cuZGF0YVtjb2x1bW4ubmFtZV1cIlxuICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldFZhbHVlKCRldmVudClcIj5cbjwvdGV0YS1zZWxlY3Q+XG4iXX0=
@@ -280,6 +280,7 @@ export class TableService {
280
280
  startEditRow(cellCoordinates) {
281
281
  if (this._currentEditRow?.row !== cellCoordinates?.row) {
282
282
  if (this._currentEditRow != null) {
283
+ const row = this._displayData.value.indexOf(this._currentEditRow.row);
283
284
  this._editRowStop.next(this._currentEditRow);
284
285
  }
285
286
  if (cellCoordinates === null) {
@@ -431,4 +432,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
431
432
  providedIn: 'root',
432
433
  }]
433
434
  }], ctorParameters: function () { return []; } });
434
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvdGFibGUvc2VydmljZS90YWJsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRS9DLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDL0QsT0FBTyxFQUFDLGVBQWUsRUFBYyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFMUQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFFcEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQzFELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFHcEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDOUQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDOUUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUNqRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDeEUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBRzdELE9B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UyxFQUFFO29CQUMzQyxPQUFPLE1BQU0sQ0FBQztpQkFDZjthQUNGO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxlQUFlLENBQUMsT0FBb0I7UUFDMUMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxVQUFVLENBQUMsR0FBUTtRQUN6QixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsV0FBVyxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxNQUFtQixFQUFFLEtBQWtCO1FBQ2hFLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FDbEMseUJBQXlCLE1BQU0sQ0FBQyxJQUFJLGNBQWMsQ0FDbkQsQ0FBQztRQUNGLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNqQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDckIsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsRUFBRTtnQkFDL0IsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7YUFDN0I7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUMvQixDQUFDOzt5R0F4aEJVLFlBQVk7NkdBQVosWUFBWSxjQUZYLE1BQU07MkZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUYWJsZVJvd30gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtcm93JztcbmltcG9ydCB7SUNlbGxDb29yZGluYXRlc30gZnJvbSAnLi4vY29udHJhY3QvaS1jZWxsLWNvb3JkaW5hdGVzJztcbmltcG9ydCB7VGFibGVDb2x1bW59IGZyb20gJy4uL2NvbnRyYWN0L3RhYmxlLWNvbHVtbic7XG5pbXBvcnQge0ZpbHRlclN0YXRlfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3QvZmlsdGVyLXN0YXRlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q29sdW1uUmVzaXplRXZlbnR9IGZyb20gJy4uL2NvbnRyYWN0L2NvbHVtbi1yZXNpemUtZXZlbnQnO1xuaW1wb3J0IHtDb2x1bW5SZW9yZGVyRXZlbnR9IGZyb20gJy4uL2NvbnRyYWN0L2NvbHVtbi1yZW9yZGVyLWV2ZW50JztcbmltcG9ydCB7U29ydEV2ZW50fSBmcm9tICcuLi9jb250cmFjdC9zb3J0LWV2ZW50JztcbmltcG9ydCB7QXJyYXlVdGlsfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdXRpbC9hcnJheS11dGlsJztcbmltcG9ydCB7U3RhdGVVdGlsfSBmcm9tICcuLi91dGlsL3N0YXRlLXV0aWwnO1xuaW1wb3J0IHtTZWxlY3RUeXBlfSBmcm9tICcuLi9lbnVtL3NlbGVjdC10eXBlLmVudW0nO1xuaW1wb3J0IHtFZGl0VHlwZX0gZnJvbSAnLi4vZW51bS9lZGl0LXR5cGUuZW51bSc7XG5pbXBvcnQge0VkaXRFdmVudH0gZnJvbSAnLi4vZW51bS9lZGl0LWV2ZW50LmVudW0nO1xuaW1wb3J0IHtMaXN0RmlsdGVyVHlwZX0gZnJvbSAnLi4vLi4vZmlsdGVyL2VudW0vbGlzdC1maWx0ZXItdHlwZS5lbnVtJztcbmltcG9ydCB7TGlzdEZpbHRlcn0gZnJvbSAnLi4vLi4vZmlsdGVyL2NvbnRhcmN0L2xpc3QtZmlsdGVyJztcbmltcG9ydCB7RmlsdGVyVHlwZX0gZnJvbSAnLi4vLi4vZmlsdGVyL2VudW0vZmlsdGVyLXR5cGUuZW51bSc7XG5pbXBvcnQge051bWVyaWNGaWx0ZXJWYWx1ZX0gZnJvbSAnLi4vLi4vZmlsdGVyL2NvbnRhcmN0L251bWVyaWMtZmlsdGVyLXZhbHVlJztcbmltcG9ydCB7TnVtZXJpY0ZpbHRlcn0gZnJvbSAnLi4vLi4vZmlsdGVyL2NvbnRhcmN0L251bWVyaWMtZmlsdGVyJztcbmltcG9ydCB7U3RyaW5nRmlsdGVyfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3Qvc3RyaW5nLWZpbHRlcic7XG5pbXBvcnQge0RhdGVGaWx0ZXJWYWx1ZX0gZnJvbSAnLi4vLi4vZmlsdGVyL2NvbnRhcmN0L2RhdGUtZmlsdGVyLXZhbHVlJztcbmltcG9ydCB7RGF0ZUZpbHRlcn0gZnJvbSAnLi4vLi4vZmlsdGVyL2NvbnRhcmN0L2RhdGUtZmlsdGVyJztcbmltcG9ydCB7SURpY3Rpb25hcnl9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWRpY3Rpb25hcnknO1xuaW1wb3J0IHtJSWROYW1lfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1pZC1uYW1lJztcbmltcG9ydCB7RGF0ZVV0aWx9IGZyb20gJy4uLy4uLy4uL3V0aWwvZGF0ZS11dGlsJztcbmltcG9ydCBvYmplY3RIYXNoIGZyb20gJ29iamVjdC1oYXNoJztcbmltcG9ydCB7VGFibGVDb2x1bW5TdG9yZX0gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtY29sdW1uLXN0b3JlJztcbmltcG9ydCB7SUNlbGxWYWx1ZX0gZnJvbSAnLi4vY29udHJhY3QvaS1jZWxsLXZhbHVlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlU2VydmljZTxUPiB7XG4gIGNvbHVtbnM6IE9ic2VydmFibGU8VGFibGVDb2x1bW5bXT47XG4gIGRpc3BsYXlEYXRhOiBPYnNlcnZhYmxlPFRhYmxlUm93PFQ+W10+O1xuICBkaWN0OiBPYnNlcnZhYmxlPElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPj47XG4gIHN0YXRlOiBPYnNlcnZhYmxlPEZpbHRlclN0YXRlPjtcbiAgc2VsZWN0VHlwZTogU2VsZWN0VHlwZTtcbiAgZWRpdFJvd1N0YXJ0OiBPYnNlcnZhYmxlPElDZWxsQ29vcmRpbmF0ZXM8VD4+O1xuICBlZGl0Um93U3RvcDogT2JzZXJ2YWJsZTxJQ2VsbENvb3JkaW5hdGVzPFQ+PjtcblxuICBlZGl0Q2VsbFN0YXJ0OiBPYnNlcnZhYmxlPElDZWxsQ29vcmRpbmF0ZXM8VD4+O1xuICBlZGl0Q2VsbFN0b3A6IE9ic2VydmFibGU8SUNlbGxDb29yZGluYXRlczxUPj47XG4gIHZhbHVlQ2hhbmdlZDogT2JzZXJ2YWJsZTxJQ2VsbENvb3JkaW5hdGVzPFQ+PjtcbiAgdmFsdWVTZXQ6IE9ic2VydmFibGU8SUNlbGxWYWx1ZTxUPj47XG4gIHN0YXRlQ2hhbmdlZDogT2JzZXJ2YWJsZTxGaWx0ZXJTdGF0ZT47XG4gIGZpbHRlckNsZWFyOiBPYnNlcnZhYmxlPFRhYmxlQ29sdW1uPjtcbiAgZ3JvdXBUb2dnbGU6IE9ic2VydmFibGU8VGFibGVSb3c8VD4+O1xuICBzZWxlY3RlZFJvd3M6IE9ic2VydmFibGU8VGFibGVSb3c8VD5bXT47XG4gIGFjdGl2ZVJvdzogT2JzZXJ2YWJsZTxUYWJsZVJvdzxUPj47XG4gIGhpZGRlbkNvbHVtbnM6IE9ic2VydmFibGU8c3RyaW5nW10+O1xuICBzY3JvbGxJbmRleDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuXG4gIGVkaXRUeXBlOiBFZGl0VHlwZTtcbiAgZWRpdEV2ZW50OiBFZGl0RXZlbnQ7XG4gIHJvd0VkaXRhYmxlOiBib29sZWFuIHwgKChyb3c6IFRhYmxlUm93PFQ+KSA9PiBib29sZWFuKTtcbiAgLy8gY2VsbEVkaXRhYmxlOiBib29sZWFuIHwgKChyb3c6IElDZWxsQ29vcmRpbmF0ZXM8VD4pID0+IGJvb2xlYW4pO1xuXG4gIGdldCBkcmFnU291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLl9kcmFnU291cmNlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsQ29sdW1uc0hhc2g6IHN0cmluZztcbiAgcHJpdmF0ZSBpbml0aWFsQ29sdW1uczogVGFibGVDb2x1bW5bXSA9IFtdO1xuICBwcml2YXRlIGRpc3BsYXlDb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW107XG4gIHByaXZhdGUgX2NvbHVtbnM6IEJlaGF2aW9yU3ViamVjdDxUYWJsZUNvbHVtbltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVDb2x1bW5bXT4oW10pO1xuICBwcml2YXRlIGluaXRpYWxEYXRhOiBUYWJsZVJvdzxUPltdID0gW107XG4gIHByaXZhdGUgX2Rpc3BsYXlEYXRhOiBCZWhhdmlvclN1YmplY3Q8VGFibGVSb3c8VD5bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlUm93PFQ+W10+KFtdKTtcbiAgcHJpdmF0ZSBfZGljdDogQmVoYXZpb3JTdWJqZWN0PElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPj4gPVxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8SURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+Pih7fSk7XG4gIHByaXZhdGUgX3N0YXRlOiBCZWhhdmlvclN1YmplY3Q8RmlsdGVyU3RhdGU+ID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PEZpbHRlclN0YXRlPihuZXcgRmlsdGVyU3RhdGUoKSk7XG4gIHByaXZhdGUgX2Nvb2tpZU5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfaGlkZGVuQ29va2llTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9jb2x1bW5zQ29va2llTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9lZGl0Um93U3RhcnQgPSBuZXcgU3ViamVjdDxJQ2VsbENvb3JkaW5hdGVzPFQ+IHwgbnVsbD4oKTtcbiAgcHJpdmF0ZSBfZWRpdFJvd1N0b3AgPSBuZXcgU3ViamVjdDxJQ2VsbENvb3JkaW5hdGVzPFQ+IHwgbnVsbD4oKTtcbiAgcHJpdmF0ZSBfZWRpdENlbGxTdGFydCA9IG5ldyBTdWJqZWN0PElDZWxsQ29vcmRpbmF0ZXM8VD4gfCBudWxsPigpO1xuICBwcml2YXRlIF9lZGl0Q2VsbFN0b3AgPSBuZXcgU3ViamVjdDxJQ2VsbENvb3JkaW5hdGVzPFQ+IHwgbnVsbD4oKTtcbiAgcHJpdmF0ZSBfdmFsdWVDaGFuZ2VkID0gbmV3IFN1YmplY3Q8SUNlbGxDb29yZGluYXRlczxUPiB8IG51bGw+KCk7XG4gIHByaXZhdGUgX3ZhbHVlU2V0ID0gbmV3IFN1YmplY3Q8SUNlbGxWYWx1ZTxUPj4oKTtcbiAgcHJpdmF0ZSBfc3RhdGVDaGFuZ2VkID0gbmV3IFN1YmplY3Q8RmlsdGVyU3RhdGU+KCk7XG4gIHByaXZhdGUgX2ZpbHRlckNsZWFyID0gbmV3IFN1YmplY3Q8VGFibGVDb2x1bW4+KCk7XG4gIHByaXZhdGUgX2RyYWdTb3VyY2U6IFRhYmxlQ29sdW1uO1xuICBwcml2YXRlIF9ncm91cFRvZ2dsZSA9IG5ldyBTdWJqZWN0PFRhYmxlUm93PFQ+PigpO1xuICBwcml2YXRlIF9zZWxlY3RlZFJvd3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlUm93PFQ+W10+KFtdKTtcbiAgcHJpdmF0ZSBfYWN0aXZlUm93ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYWJsZVJvdzxUPj4obnVsbCk7XG4gIHByaXZhdGUgX2hpZGRlbkNvbHVtbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSk7XG4gIHByaXZhdGUgX3Njcm9sbEluZGV4ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuXG4gIHByaXZhdGUgX2N1cnJlbnRFZGl0Um93OiBJQ2VsbENvb3JkaW5hdGVzPFQ+O1xuICBwcml2YXRlIF9jdXJyZW50RWRpdENlbGw6IElDZWxsQ29vcmRpbmF0ZXM8VD47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5fY29sdW1ucy5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmRpc3BsYXlEYXRhID0gdGhpcy5fZGlzcGxheURhdGEuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5kaWN0ID0gdGhpcy5fZGljdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnN0YXRlID0gdGhpcy5fc3RhdGUuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5lZGl0Um93U3RhcnQgPSB0aGlzLl9lZGl0Um93U3RhcnQuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5lZGl0Um93U3RvcCA9IHRoaXMuX2VkaXRSb3dTdG9wLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZWRpdENlbGxTdGFydCA9IHRoaXMuX2VkaXRDZWxsU3RhcnQuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5lZGl0Q2VsbFN0b3AgPSB0aGlzLl9lZGl0Q2VsbFN0b3AuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZWQgPSB0aGlzLl92YWx1ZUNoYW5nZWQuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy52YWx1ZVNldCA9IHRoaXMuX3ZhbHVlU2V0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VkID0gdGhpcy5fc3RhdGVDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZmlsdGVyQ2xlYXIgPSB0aGlzLl9maWx0ZXJDbGVhci5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmdyb3VwVG9nZ2xlID0gdGhpcy5fZ3JvdXBUb2dnbGUuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSB0aGlzLl9zZWxlY3RlZFJvd3MuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5hY3RpdmVSb3cgPSB0aGlzLl9hY3RpdmVSb3cuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5oaWRkZW5Db2x1bW5zID0gdGhpcy5faGlkZGVuQ29sdW1ucy5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnNjcm9sbEluZGV4ID0gdGhpcy5fc2Nyb2xsSW5kZXguYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBzZXREYXRhKGRhdGE6IFRbXSk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbERhdGEgPSBkYXRhPy5tYXAoKF8pID0+IG5ldyBUYWJsZVJvdzxUPihfKSk7XG4gICAgdGhpcy5fZGlzcGxheURhdGEubmV4dCh0aGlzLmluaXRpYWxEYXRhKTtcbiAgfVxuXG4gIHNldERpY3QoZGljdDogSURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+KTogdm9pZCB7XG4gICAgdGhpcy5fZGljdC5uZXh0KGRpY3QpO1xuICB9XG5cbiAgc2V0Q29sdW1ucyhjb2x1bW5zOiBUYWJsZUNvbHVtbltdKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsQ29sdW1ucyA9IGNvbHVtbnMgPyBjb2x1bW5zLm1hcCgoXykgPT4gbmV3IFRhYmxlQ29sdW1uKF8pKSA6IFtdO1xuICAgIHRoaXMuaW5pdGlhbENvbHVtbnNIYXNoID0gb2JqZWN0SGFzaCh0aGlzLmluaXRpYWxDb2x1bW5zLCB7XG4gICAgICBhbGdvcml0aG06ICdzaGExJyxcbiAgICAgIGlnbm9yZVVua25vd246IHRydWUsXG4gICAgICBleGNsdWRlS2V5czoga2V5ID0+IGtleSA9PT0gJ2hlYWREcm9wZG93blRlbXBsYXRlJyxcbiAgICB9KTtcbiAgICBjb25zdCByZXN0b3JlZCA9IHRoaXMucmVzdG9yZUNvbHVtbnMoKTtcblxuICAgIGlmIChyZXN0b3JlZCkge1xuICAgICAgdGhpcy5zZXREaXNwbGF5Q29sdW1ucyhyZXN0b3JlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0RGlzcGxheUNvbHVtbnModGhpcy5pbml0aWFsQ29sdW1ucyk7XG4gICAgfVxuICB9XG5cbiAgcmVzdG9yZURlZmF1bHRDb2x1bW5zKCkge1xuICAgIHRoaXMuc2V0RGlzcGxheUNvbHVtbnModGhpcy5pbml0aWFsQ29sdW1ucyk7XG4gICAgdGhpcy5jbGVhckNvbHVtbnNTdGF0ZSgpO1xuICB9XG5cbiAgdXBkYXRlQ29sdW1ucyhjb2x1bW5zOiBUYWJsZUNvbHVtbltdKTogdm9pZCB7XG4gICAgdGhpcy5zZXREaXNwbGF5Q29sdW1ucyhjb2x1bW5zKTtcbiAgICB0aGlzLnNhdmVDb2x1bW5zU3RhdGUoKTtcbiAgfVxuXG4gIHNhdmVDb2x1bW5zU3RhdGUoKSB7XG4gICAgaWYgKHRoaXMuX2Nvb2tpZU5hbWUpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICB0aGlzLl9jb2x1bW5zQ29va2llTmFtZSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGhhc2g6IHRoaXMuaW5pdGlhbENvbHVtbnNIYXNoLFxuICAgICAgICAgIGNvbHVtbnM6IHRoaXMuZGlzcGxheUNvbHVtbnMubWFwKChfKSA9PiBuZXcgVGFibGVDb2x1bW5TdG9yZShfKSksXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyQ29sdW1uc1N0YXRlKCkge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuX2NvbHVtbnNDb29raWVOYW1lKTtcbiAgfVxuXG4gIHNldERpc3BsYXlDb2x1bW5zKGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXlDb2x1bW5zID0gY29sdW1ucyA/IGNvbHVtbnMubWFwKChfKSA9PiBuZXcgVGFibGVDb2x1bW4oXykpIDogW107XG4gICAgdGhpcy5fY29sdW1ucy5uZXh0KHRoaXMuZGlzcGxheUNvbHVtbnMpO1xuICB9XG5cbiAgcmVzdG9yZUNvbHVtbnMoKSB7XG4gICAgY29uc3Qgc2F2ZWRDb2x1bW5zID0gSlNPTi5wYXJzZShcbiAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuX2NvbHVtbnNDb29raWVOYW1lKVxuICAgICk7XG4gICAgaWYgKHNhdmVkQ29sdW1ucyAmJiBzYXZlZENvbHVtbnMuaGFzaCA9PT0gdGhpcy5pbml0aWFsQ29sdW1uc0hhc2gpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc3RvcmVDb2x1bW5zU3RhdGUoc2F2ZWRDb2x1bW5zLmNvbHVtbnMpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlc3RvcmVDb2x1bW5zU3RhdGUoY29sdW1uczogVGFibGVDb2x1bW5TdG9yZVtdKSB7XG4gICAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2x1bW46IFRhYmxlQ29sdW1uU3RvcmUpID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gQXJyYXlVdGlsLmZpbmRSZWN1cnNpdmUoXG4gICAgICAgIHRoaXMuaW5pdGlhbENvbHVtbnMsXG4gICAgICAgIChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IGNvbHVtbi5uYW1lLFxuICAgICAgICAnY29sdW1ucydcbiAgICAgICk7XG4gICAgICBjb25zdCByZXN1bHRDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4oZm91bmQpO1xuICAgICAgcmVzdWx0Q29sdW1uLndpZHRoID0gY29sdW1uLndpZHRoO1xuICAgICAgcmVzdWx0Q29sdW1uLmZsZXggPSBjb2x1bW4uZmxleDtcbiAgICAgIHJlc3VsdENvbHVtbi5sb2NrZWQgPSBjb2x1bW4ubG9ja2VkO1xuICAgICAgaWYgKGNvbHVtbi5jb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdENvbHVtbi5jb2x1bW5zID0gdGhpcy5yZXN0b3JlQ29sdW1uc1N0YXRlKGNvbHVtbi5jb2x1bW5zKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHRDb2x1bW47XG4gICAgfSk7XG4gIH1cblxuICBzZXRTdGF0ZShzdGF0ZTogRmlsdGVyU3RhdGUpOiB2b2lkIHtcbiAgICBzdGF0ZS5zYXZlKHRoaXMuX2Nvb2tpZU5hbWUpO1xuICAgIHRoaXMuX3N0YXRlLm5leHQoc3RhdGUpO1xuICB9XG5cbiAgc2V0Q29va2llTmFtZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9jb29raWVOYW1lID0gbmFtZTtcbiAgICB0aGlzLl9oaWRkZW5Db29raWVOYW1lID0gYCR7dGhpcy5fY29va2llTmFtZX1faGlkZGVuX2NvbHVtbnNgO1xuICAgIHRoaXMuX2NvbHVtbnNDb29raWVOYW1lID0gYCR7dGhpcy5fY29va2llTmFtZX1fY29sdW1uc2A7XG4gIH1cblxuICByZXN0b3JlU3RhdGUoKTogdm9pZCB7XG4gICAgbGV0IHN0YXRlOiBGaWx0ZXJTdGF0ZTtcbiAgICBpZiAodGhpcy5fY29va2llTmFtZT8ubGVuZ3RoID4gMCAmJiBGaWx0ZXJTdGF0ZS5yZXN0b3JlKHRoaXMuX2Nvb2tpZU5hbWUpKSB7XG4gICAgICBsZXQgbmV3U3RhdGUgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICB0aGlzLl9zdGF0ZS52YWx1ZSxcbiAgICAgICAgRmlsdGVyU3RhdGUucmVzdG9yZSh0aGlzLl9jb29raWVOYW1lKVxuICAgICAgKTtcbiAgICAgIG5ld1N0YXRlID0gRGF0ZVV0aWwuY29udmVydERhdGVTdHJpbmdzVG9EYXRlcyhuZXdTdGF0ZSk7XG4gICAgICBzdGF0ZSA9IG5ldyBGaWx0ZXJTdGF0ZShuZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlID0gbmV3IEZpbHRlclN0YXRlKCk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoc3RhdGUpO1xuICB9XG5cbiAgc2F2ZUhpZGRlbkNvbHVtbnMoaGlkZGVuQ29sdW1uczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLl9oaWRkZW5Db29raWVOYW1lLCBKU09OLnN0cmluZ2lmeShoaWRkZW5Db2x1bW5zKSk7XG4gIH1cblxuICByZXN0b3JlSGlkZGVuQ29sdW1ucygpOiB2b2lkIHtcbiAgICBjb25zdCBoaWRkZW5Db2x1bW5zID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5faGlkZGVuQ29va2llTmFtZSkgfHwgJ1tdJztcbiAgICB0aGlzLl9oaWRkZW5Db2x1bW5zLm5leHQoSlNPTi5wYXJzZShoaWRkZW5Db2x1bW5zKSk7XG4gIH1cblxuICBzb3J0KHNvcnRFdmVudDogU29ydEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHNvcnRFdmVudC5jb2x1bW4uc29ydGFibGUpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoU3RhdGVVdGlsLnNvcnRDb2x1bW4oc29ydEV2ZW50LCB0aGlzLl9zdGF0ZS52YWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyU29ydChjb2x1bW46IFRhYmxlQ29sdW1uKTogdm9pZCB7XG4gICAgdGhpcy5zZXRTdGF0ZShTdGF0ZVV0aWwuY2xlYXJTb3J0KGNvbHVtbiwgdGhpcy5fc3RhdGUudmFsdWUpKTtcbiAgfVxuXG4gIGNsZWFyQWxsU29ydCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldFN0YXRlKFN0YXRlVXRpbC5jbGVhckFsbFNvcnQodGhpcy5fc3RhdGUudmFsdWUpKTtcbiAgfVxuXG4gIGNsZWFyRmlsdGVyKGNvbHVtbjogVGFibGVDb2x1bW4pIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX3N0YXRlLnZhbHVlO1xuICAgIGlmIChjb2x1bW4gIT09IG51bGwgJiYgY29sdW1uICE9PSB1bmRlZmluZWQgJiYgY29sdW1uLmZpbHRlcmFibGUpIHtcbiAgICAgIHN3aXRjaCAoY29sdW1uLmZpbHRlclR5cGUpIHtcbiAgICAgICAgY2FzZSBGaWx0ZXJUeXBlLmRhdGU6XG4gICAgICAgICAgc3RhdGUuYWRkRGF0ZUZpbHRlcihcbiAgICAgICAgICAgIG5ldyBEYXRlRmlsdGVyKHtcbiAgICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmlsdGVyRmllbGQsXG4gICAgICAgICAgICAgIHZhbHVlOiBuZXcgRGF0ZUZpbHRlclZhbHVlKCksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRmlsdGVyVHlwZS5zdHJpbmc6XG4gICAgICAgICAgc3RhdGUuYWRkU3RyaW5nRmlsdGVyKFxuICAgICAgICAgICAgbmV3IFN0cmluZ0ZpbHRlcih7XG4gICAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmZpbHRlckZpZWxkLFxuICAgICAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRmlsdGVyVHlwZS5udW1iZXI6XG4gICAgICAgICAgc3RhdGUuYWRkTnVtZXJpY0ZpbHRlcihcbiAgICAgICAgICAgIG5ldyBOdW1lcmljRmlsdGVyKHtcbiAgICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmlsdGVyRmllbGQsXG4gICAgICAgICAgICAgIHZhbHVlOiBuZXcgTnVtZXJpY0ZpbHRlclZhbHVlKCksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRmlsdGVyVHlwZS5saXN0OlxuICAgICAgICAgIHN0YXRlLmFkZExpc3RGaWx0ZXIoXG4gICAgICAgICAgICBuZXcgTGlzdEZpbHRlcih7XG4gICAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmZpbHRlckZpZWxkLFxuICAgICAgICAgICAgICB2YWx1ZTogW10sXG4gICAgICAgICAgICAgIHR5cGU6IExpc3RGaWx0ZXJUeXBlLk5vbmUsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKG5ldyBGaWx0ZXJTdGF0ZShzdGF0ZSkpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyQWxsRmlsdGVycygpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX3N0YXRlLnZhbHVlO1xuICAgIHN0YXRlLnN0cmluZ0ZpbHRlcnMgPSBbXTtcbiAgICBzdGF0ZS5saXN0RmlsdGVycyA9IFtdO1xuICAgIHN0YXRlLm51bWVyaWNGaWx0ZXJzID0gW107XG4gICAgc3RhdGUuZGF0ZUZpbHRlcnMgPSBbXTtcbiAgICB0aGlzLnNldFN0YXRlKG5ldyBGaWx0ZXJTdGF0ZShzdGF0ZSkpO1xuICB9XG5cbiAgcGluQ29sdW1uKGNvbHVtbjogVGFibGVDb2x1bW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXlDb2x1bW5zLmZvckVhY2goKGNvbDogVGFibGVDb2x1bW4pID0+IHtcbiAgICAgIGlmIChjb2wubmFtZSA9PT0gY29sdW1uLm5hbWUpIHtcbiAgICAgICAgY29sLmxvY2tlZCA9ICFjb2wubG9ja2VkO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlQ29sdW1ucyh0aGlzLmRpc3BsYXlDb2x1bW5zKTtcbiAgfVxuXG4gIGRyYWdTdGFydChjb2x1bW46IFRhYmxlQ29sdW1uKTogdm9pZCB7XG4gICAgdGhpcy5fZHJhZ1NvdXJjZSA9IGNvbHVtbjtcbiAgfVxuXG4gIGxvY2tQcmV2aW91c0NvbHVtbnMoY29sdW1uOiBUYWJsZUNvbHVtbiwgZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCBmbGF0ID0gQXJyYXlVdGlsLmZsYXR0ZW4odGhpcy5kaXNwbGF5Q29sdW1ucywgJ2NvbHVtbnMnLCB0cnVlKS5zb3J0KFxuICAgICAgKGEsIGIpID0+IE51bWJlcihiLmxvY2tlZCkgLSBOdW1iZXIoYS5sb2NrZWQpXG4gICAgKTtcbiAgICBjb25zdCBpbmRleCA9IGZsYXQuaW5kZXhPZihjb2x1bW4pO1xuICAgIGNvbnN0IHByZXZpb3VzID0gZmxhdC5zbGljZSgwLCBpbmRleCkuZmlsdGVyKChfKSA9PiBfLmZsZXggPiAwKTtcbiAgICBpZiAocHJldmlvdXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHRhYmxlRWxlbWVudCA9IHRoaXMuZ2V0VGFibGVFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgcHJldmlvdXMuZm9yRWFjaCgoaXRlbTogVGFibGVDb2x1bW4pID0+IHtcbiAgICAgICAgY29uc3QgaXRlbUNvbCA9IHRhYmxlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgIGB0ZXRhLWhlYWQtY2VsbFtkYXRhLWNvbHVtbj0ke2l0ZW0ubmFtZX1dYFxuICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoaXRlbUNvbCkge1xuICAgICAgICAgIGl0ZW0uZmxleCA9IDA7XG4gICAgICAgICAgaXRlbS53aWR0aCA9IGl0ZW1Db2wuY2xpZW50V2lkdGg7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlc2l6ZUNvbHVtbihldmVudDogQ29sdW1uUmVzaXplRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuY29sdW1uICE9PSBudWxsICYmIGV2ZW50LmNvbHVtbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBldmVudC5jb2x1bW4ud2lkdGggPSBldmVudC5uZXdXaWR0aCA8IDUwID8gNTAgOiBldmVudC5uZXdXaWR0aDtcbiAgICAgIGV2ZW50LmNvbHVtbi5mbGV4ID0gMDtcbiAgICB9XG4gICAgdGhpcy5fY29sdW1ucy5uZXh0KHRoaXMuZGlzcGxheUNvbHVtbnMpO1xuICAgIHRoaXMuc2F2ZUNvbHVtbnNTdGF0ZSgpO1xuICB9XG5cbiAgYXV0b3NpemVDb2x1bW4oY29sdW1uOiBUYWJsZUNvbHVtbiwgdGFyZ2V0OiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IHRhYmxlRWxlbWVudCA9IHRoaXMuZ2V0VGFibGVFbGVtZW50KHRhcmdldCk7XG4gICAgdGhpcy5zZXRDb2x1bW5BdXRvV2lkdGgoY29sdW1uLCB0YWJsZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpO1xuICAgIHRoaXMuX2NvbHVtbnMubmV4dCh0aGlzLmRpc3BsYXlDb2x1bW5zKTtcbiAgICB0aGlzLnNhdmVDb2x1bW5zU3RhdGUoKTtcbiAgfVxuXG4gIGF1dG9zaXplQWxsQ29sdW1ucyh0YXJnZXQ6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgdGFibGVFbGVtZW50ID0gdGhpcy5nZXRUYWJsZUVsZW1lbnQodGFyZ2V0KTtcbiAgICBjb25zdCBmbGF0ID0gQXJyYXlVdGlsLmZsYXR0ZW4odGhpcy5kaXNwbGF5Q29sdW1ucywgJ2NvbHVtbnMnLCB0cnVlKTtcbiAgICBmbGF0LmZvckVhY2goKGNvbCkgPT5cbiAgICAgIHRoaXMuc2V0Q29sdW1uQXV0b1dpZHRoKGNvbCwgdGFibGVFbGVtZW50IGFzIEhUTUxFbGVtZW50KVxuICAgICk7XG4gICAgdGhpcy5fY29sdW1ucy5uZXh0KHRoaXMuZGlzcGxheUNvbHVtbnMpO1xuICAgIHRoaXMuc2F2ZUNvbHVtbnNTdGF0ZSgpO1xuICB9XG5cbiAgcmVvcmRlckNvbHVtbihjb2x1bW46IFRhYmxlQ29sdW1uLCBpbnNlcnRCZWZvcmU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBldmVudCA9IG5ldyBDb2x1bW5SZW9yZGVyRXZlbnQodGhpcy5fZHJhZ1NvdXJjZSwgY29sdW1uKTtcbiAgICBpZiAoZXZlbnQuc291cmNlICE9PSBldmVudC50YXJnZXQpIHtcbiAgICAgIGNvbnN0IHNvdXJjZVBhcmVudCA9IHRoaXMuZmluZFBhcmVudChldmVudC5zb3VyY2UsIHRoaXMuZGlzcGxheUNvbHVtbnMpO1xuICAgICAgY29uc3QgdGFyZ2V0UGFyZW50ID0gdGhpcy5maW5kUGFyZW50KGV2ZW50LnRhcmdldCwgdGhpcy5kaXNwbGF5Q29sdW1ucyk7XG5cbiAgICAgIGlmIChzb3VyY2VQYXJlbnQgJiYgdGFyZ2V0UGFyZW50KSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZUluZGV4ID0gc291cmNlUGFyZW50LmluZGV4T2YoZXZlbnQuc291cmNlKTtcbiAgICAgICAgc291cmNlUGFyZW50LnNwbGljZShzb3VyY2VJbmRleCwgMSk7XG4gICAgICAgIGxldCB0YXJnZXRJbmRleCA9IHRhcmdldFBhcmVudC5pbmRleE9mKGV2ZW50LnRhcmdldCk7XG4gICAgICAgIGlmICghaW5zZXJ0QmVmb3JlKSB7XG4gICAgICAgICAgdGFyZ2V0SW5kZXggPSB0YXJnZXRJbmRleCArIDE7XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0UGFyZW50LnNwbGljZSh0YXJnZXRJbmRleCwgMCwgZXZlbnQuc291cmNlKTtcbiAgICAgICAgZXZlbnQuc291cmNlLmxvY2tlZCA9IGV2ZW50LnRhcmdldC5sb2NrZWQ7XG5cbiAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5zKHRoaXMuZGlzcGxheUNvbHVtbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXJ0RWRpdFJvdyhjZWxsQ29vcmRpbmF0ZXM6IElDZWxsQ29vcmRpbmF0ZXM8VD4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEVkaXRSb3c/LnJvdyAhPT0gY2VsbENvb3JkaW5hdGVzPy5yb3cpIHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50RWRpdFJvdyAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuX2VkaXRSb3dTdG9wLm5leHQodGhpcy5fY3VycmVudEVkaXRSb3cpO1xuICAgICAgfVxuICAgICAgaWYgKGNlbGxDb29yZGluYXRlcyA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9lZGl0Um93U3RhcnQubmV4dChjZWxsQ29vcmRpbmF0ZXMpO1xuICAgICAgICB0aGlzLl9jdXJyZW50RWRpdFJvdyA9IGNlbGxDb29yZGluYXRlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmJvb2xPckZ1bmNDYWxsYmFjazxUYWJsZVJvdzxUPj4odGhpcy5yb3dFZGl0YWJsZSkoXG4gICAgICAgICAgICBjZWxsQ29vcmRpbmF0ZXMucm93XG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLl9lZGl0Um93U3RhcnQubmV4dChjZWxsQ29vcmRpbmF0ZXMpO1xuICAgICAgICAgIHRoaXMuX2N1cnJlbnRFZGl0Um93ID0gY2VsbENvb3JkaW5hdGVzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhcnRFZGl0Q2VsbChjZWxsQ29vcmRpbmF0ZXM6IElDZWxsQ29vcmRpbmF0ZXM8VD4pOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLl9jdXJyZW50RWRpdENlbGw/LmNvbHVtbi5uYW1lICE9PSBjZWxsQ29vcmRpbmF0ZXM/LmNvbHVtbi5uYW1lIHx8XG4gICAgICB0aGlzLl9jdXJyZW50RWRpdENlbGw/LnJvdyAhPT0gY2VsbENvb3JkaW5hdGVzPy5yb3dcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50RWRpdENlbGwgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9lZGl0Q2VsbFN0b3AubmV4dCh0aGlzLl9jdXJyZW50RWRpdENlbGwpO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmJvb2xPckZ1bmNDYWxsYmFjazxJQ2VsbENvb3JkaW5hdGVzPFQ+PihjZWxsQ29vcmRpbmF0ZXMuY29sdW1uLmVkaXRhYmxlKShcbiAgICAgICAgICBjZWxsQ29vcmRpbmF0ZXNcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX2VkaXRDZWxsU3RhcnQubmV4dChjZWxsQ29vcmRpbmF0ZXMpO1xuICAgICAgICB0aGlzLl9jdXJyZW50RWRpdENlbGwgPSBjZWxsQ29vcmRpbmF0ZXM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0QWN0aXZlUm93KHJvdzogVGFibGVSb3c8VD4pOiB2b2lkIHtcbiAgICB0aGlzLl9hY3RpdmVSb3cubmV4dChyb3cpO1xuICB9XG5cbiAgc2VsZWN0Um93cyhyb3dzOiBUYWJsZVJvdzxUPltdKTogdm9pZCB7XG4gICAgdGhpcy5fc2VsZWN0ZWRSb3dzLm5leHQocm93cyk7XG4gIH1cblxuICBzZWxlY3RSb3cocm93OiBUYWJsZVJvdzxUPik6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdFR5cGUgPT09IFNlbGVjdFR5cGUubm9uZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RUeXBlID09PSBTZWxlY3RUeXBlLnNpbmdsZSkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLm5leHQoW3Jvd10pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd3MubmV4dChbLi4udGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlLCByb3ddKTtcbiAgICB9XG4gIH1cblxuICBkZXNlbGVjdFJvdyhyb3c6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0VHlwZSA9PT0gU2VsZWN0VHlwZS5ub25lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdFR5cGUgPT09IFNlbGVjdFR5cGUuc2luZ2xlKSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd3MubmV4dChbXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KFxuICAgICAgICB0aGlzLl9zZWxlY3RlZFJvd3MudmFsdWUuZmlsdGVyKChfKSA9PiBfICE9PSByb3cpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEFsbCgpIHtcbiAgICB0aGlzLl9zZWxlY3RlZFJvd3MubmV4dCh0aGlzLl9kaXNwbGF5RGF0YS52YWx1ZSk7XG4gIH1cblxuICBkZXNlbGVjdEFsbCgpIHtcbiAgICB0aGlzLl9zZWxlY3RlZFJvd3MubmV4dChbXSk7XG4gIH1cblxuICBhbGxSb3dzU2VsZWN0ZWQoKTogYm9vbGVhbiB8IG51bGwge1xuICAgIGlmIChcbiAgICAgIHRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlPy5sZW5ndGggJiZcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy52YWx1ZT8ubGVuZ3RoICYmXG4gICAgICB0aGlzLl9kaXNwbGF5RGF0YS52YWx1ZS5ldmVyeShcbiAgICAgICAgKF8pID0+IHRoaXMuX3NlbGVjdGVkUm93cy52YWx1ZS5pbmRleE9mKF8pID49IDBcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd3MudmFsdWUgPT0gbnVsbCB8fFxuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHNldEhpZGRlbkNvbHVtbnModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5zYXZlSGlkZGVuQ29sdW1ucyh2YWx1ZSk7XG4gICAgdGhpcy5faGlkZGVuQ29sdW1ucy5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGNvbHVtbklzSGlkZGVuKGNvbHVtbjogVGFibGVDb2x1bW4pIHtcbiAgICByZXR1cm4gdGhpcy5faGlkZGVuQ29sdW1ucy52YWx1ZS5pbmRleE9mKGNvbHVtbi5uYW1lKSA+PSAwO1xuICB9XG5cbiAgdG9nZ2xlR3JvdXAocm93OiBUYWJsZVJvdzxUPik6IHZvaWQge1xuICAgIHRoaXMuX2dyb3VwVG9nZ2xlLm5leHQocm93KTtcbiAgfVxuXG4gIGNoYW5nZVZhbHVlKGNvb3JkaW5hdGVzOiBJQ2VsbENvb3JkaW5hdGVzPFQ+KTogdm9pZCB7XG4gICAgdGhpcy5fdmFsdWVDaGFuZ2VkLm5leHQoY29vcmRpbmF0ZXMpO1xuICB9XG5cbiAgc2V0VmFsdWUoY2VsbFZhbHVlOiBJQ2VsbFZhbHVlPFQ+KTogdm9pZCB7XG4gICAgdGhpcy5fdmFsdWVTZXQubmV4dChjZWxsVmFsdWUpO1xuICB9XG5cbiAgZ2V0Um93QnlJbmRleChyb3dJbmRleDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlW3BhcnNlSW50KHJvd0luZGV4LCAxMCldO1xuICB9XG5cbiAgZ2V0Q29sdW1uQnlOYW1lKGNvbHVtbk5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBBcnJheVV0aWwuZmluZFJlY3Vyc2l2ZShcbiAgICAgIHRoaXMuZGlzcGxheUNvbHVtbnMsXG4gICAgICAoaXRlcmFibGVOb2RlKSA9PiBjb2x1bW5OYW1lID09PSBpdGVyYWJsZU5vZGUubmFtZSxcbiAgICAgICdjb2x1bW5zJ1xuICAgICk7XG4gIH1cblxuICBzY3JvbGxUb0luZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLl9zY3JvbGxJbmRleC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX3Njcm9sbEluZGV4Lm5leHQoaW5kZXgpO1xuICB9XG5cbiAgYm9vbE9yRnVuY0NhbGxiYWNrPE0+KHZhcmlhYmxlOiBib29sZWFuIHwgKChyb3c6IE0pID0+IGJvb2xlYW4pKSB7XG4gICAgcmV0dXJuIChhcmdzOiBNKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhcmlhYmxlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRnVuY3Rpb24odmFyaWFibGUpKSB7XG4gICAgICAgIHJldHVybiAodmFyaWFibGUgYXMgKHJvdzogTSkgPT4gYm9vbGVhbikoYXJncyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kUGFyZW50KFxuICAgIGNvbHVtbjogVGFibGVDb2x1bW4sXG4gICAgY29sdW1uczogVGFibGVDb2x1bW5bXVxuICApOiBUYWJsZUNvbHVtbltdIHwgbnVsbCB7XG4gICAgY29uc3QgZm91bmQgPSBjb2x1bW5zLmZpbmQoKHgpID0+IHgubmFtZSA9PT0gY29sdW1uLm5hbWUpO1xuICAgIGlmIChmb3VuZCAhPT0gbnVsbCAmJiBmb3VuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY29sdW1ucztcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjb2x1bW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgY29uc3QgY29sID0gY29sdW1uc1tpXTtcbiAgICAgIGlmIChjb2wuY29sdW1ucyAmJiBjb2wuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5maW5kUGFyZW50KGNvbHVtbiwgY29sLmNvbHVtbnMpO1xuICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsICYmIHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGFibGVFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuY2xvc2VzdCgndGV0YS10YWJsZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0Z1bmN0aW9uKG9iajogYW55KSB7XG4gICAgcmV0dXJuICEhKG9iaiAmJiBvYmo/LmNvbnN0cnVjdG9yICYmIG9iaj8uY2FsbCAmJiBvYmo/LmFwcGx5KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29sdW1uQXV0b1dpZHRoKGNvbHVtbjogVGFibGVDb2x1bW4sIHRhYmxlOiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IGNlbGxzID0gdGFibGUucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGB0ZXRhLWNlbGxbZGF0YS1jb2x1bW49JHtjb2x1bW4ubmFtZX1dIC5jZWxsLXRleHRgXG4gICAgKTtcbiAgICBsZXQgbWF4V2lkdGggPSAwO1xuICAgIGNlbGxzLmZvckVhY2goKGNlbGwpID0+IHtcbiAgICAgIGlmIChjZWxsLnNjcm9sbFdpZHRoID4gbWF4V2lkdGgpIHtcbiAgICAgICAgbWF4V2lkdGggPSBjZWxsLnNjcm9sbFdpZHRoO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbHVtbi5mbGV4ID0gMDtcbiAgICBjb2x1bW4ud2lkdGggPSBtYXhXaWR0aCArIDIwO1xuICB9XG59XG4iXX0=
435
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvdGFibGUvc2VydmljZS90YWJsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRS9DLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDL0QsT0FBTyxFQUFDLGVBQWUsRUFBYyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFMUQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFFcEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQzFELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFHcEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDOUQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDOUUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUNqRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDeEUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBRzdELE9B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fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VGFibGVSb3d9IGZyb20gJy4uL2NvbnRyYWN0L3RhYmxlLXJvdyc7XG5pbXBvcnQge0lDZWxsQ29vcmRpbmF0ZXN9IGZyb20gJy4uL2NvbnRyYWN0L2ktY2VsbC1jb29yZGluYXRlcyc7XG5pbXBvcnQge1RhYmxlQ29sdW1ufSBmcm9tICcuLi9jb250cmFjdC90YWJsZS1jb2x1bW4nO1xuaW1wb3J0IHtGaWx0ZXJTdGF0ZX0gZnJvbSAnLi4vLi4vZmlsdGVyL2NvbnRhcmN0L2ZpbHRlci1zdGF0ZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0NvbHVtblJlc2l6ZUV2ZW50fSBmcm9tICcuLi9jb250cmFjdC9jb2x1bW4tcmVzaXplLWV2ZW50JztcbmltcG9ydCB7Q29sdW1uUmVvcmRlckV2ZW50fSBmcm9tICcuLi9jb250cmFjdC9jb2x1bW4tcmVvcmRlci1ldmVudCc7XG5pbXBvcnQge1NvcnRFdmVudH0gZnJvbSAnLi4vY29udHJhY3Qvc29ydC1ldmVudCc7XG5pbXBvcnQge0FycmF5VXRpbH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3V0aWwvYXJyYXktdXRpbCc7XG5pbXBvcnQge1N0YXRlVXRpbH0gZnJvbSAnLi4vdXRpbC9zdGF0ZS11dGlsJztcbmltcG9ydCB7U2VsZWN0VHlwZX0gZnJvbSAnLi4vZW51bS9zZWxlY3QtdHlwZS5lbnVtJztcbmltcG9ydCB7RWRpdFR5cGV9IGZyb20gJy4uL2VudW0vZWRpdC10eXBlLmVudW0nO1xuaW1wb3J0IHtFZGl0RXZlbnR9IGZyb20gJy4uL2VudW0vZWRpdC1ldmVudC5lbnVtJztcbmltcG9ydCB7TGlzdEZpbHRlclR5cGV9IGZyb20gJy4uLy4uL2ZpbHRlci9lbnVtL2xpc3QtZmlsdGVyLXR5cGUuZW51bSc7XG5pbXBvcnQge0xpc3RGaWx0ZXJ9IGZyb20gJy4uLy4uL2ZpbHRlci9jb250YXJjdC9saXN0LWZpbHRlcic7XG5pbXBvcnQge0ZpbHRlclR5cGV9IGZyb20gJy4uLy4uL2ZpbHRlci9lbnVtL2ZpbHRlci10eXBlLmVudW0nO1xuaW1wb3J0IHtOdW1lcmljRmlsdGVyVmFsdWV9IGZyb20gJy4uLy4uL2ZpbHRlci9jb250YXJjdC9udW1lcmljLWZpbHRlci12YWx1ZSc7XG5pbXBvcnQge051bWVyaWNGaWx0ZXJ9IGZyb20gJy4uLy4uL2ZpbHRlci9jb250YXJjdC9udW1lcmljLWZpbHRlcic7XG5pbXBvcnQge1N0cmluZ0ZpbHRlcn0gZnJvbSAnLi4vLi4vZmlsdGVyL2NvbnRhcmN0L3N0cmluZy1maWx0ZXInO1xuaW1wb3J0IHtEYXRlRmlsdGVyVmFsdWV9IGZyb20gJy4uLy4uL2ZpbHRlci9jb250YXJjdC9kYXRlLWZpbHRlci12YWx1ZSc7XG5pbXBvcnQge0RhdGVGaWx0ZXJ9IGZyb20gJy4uLy4uL2ZpbHRlci9jb250YXJjdC9kYXRlLWZpbHRlcic7XG5pbXBvcnQge0lEaWN0aW9uYXJ5fSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1kaWN0aW9uYXJ5JztcbmltcG9ydCB7SUlkTmFtZX0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2NvbnRyYWN0L2ktaWQtbmFtZSc7XG5pbXBvcnQge0RhdGVVdGlsfSBmcm9tICcuLi8uLi8uLi91dGlsL2RhdGUtdXRpbCc7XG5pbXBvcnQgb2JqZWN0SGFzaCBmcm9tICdvYmplY3QtaGFzaCc7XG5pbXBvcnQge1RhYmxlQ29sdW1uU3RvcmV9IGZyb20gJy4uL2NvbnRyYWN0L3RhYmxlLWNvbHVtbi1zdG9yZSc7XG5pbXBvcnQge0lDZWxsVmFsdWV9IGZyb20gJy4uL2NvbnRyYWN0L2ktY2VsbC12YWx1ZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZVNlcnZpY2U8VD4ge1xuICBjb2x1bW5zOiBPYnNlcnZhYmxlPFRhYmxlQ29sdW1uW10+O1xuICBkaXNwbGF5RGF0YTogT2JzZXJ2YWJsZTxUYWJsZVJvdzxUPltdPjtcbiAgZGljdDogT2JzZXJ2YWJsZTxJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT4+O1xuICBzdGF0ZTogT2JzZXJ2YWJsZTxGaWx0ZXJTdGF0ZT47XG4gIHNlbGVjdFR5cGU6IFNlbGVjdFR5cGU7XG4gIGVkaXRSb3dTdGFydDogT2JzZXJ2YWJsZTxJQ2VsbENvb3JkaW5hdGVzPFQ+PjtcbiAgZWRpdFJvd1N0b3A6IE9ic2VydmFibGU8SUNlbGxDb29yZGluYXRlczxUPj47XG5cbiAgZWRpdENlbGxTdGFydDogT2JzZXJ2YWJsZTxJQ2VsbENvb3JkaW5hdGVzPFQ+PjtcbiAgZWRpdENlbGxTdG9wOiBPYnNlcnZhYmxlPElDZWxsQ29vcmRpbmF0ZXM8VD4+O1xuICB2YWx1ZUNoYW5nZWQ6IE9ic2VydmFibGU8SUNlbGxDb29yZGluYXRlczxUPj47XG4gIHZhbHVlU2V0OiBPYnNlcnZhYmxlPElDZWxsVmFsdWU8VD4+O1xuICBzdGF0ZUNoYW5nZWQ6IE9ic2VydmFibGU8RmlsdGVyU3RhdGU+O1xuICBmaWx0ZXJDbGVhcjogT2JzZXJ2YWJsZTxUYWJsZUNvbHVtbj47XG4gIGdyb3VwVG9nZ2xlOiBPYnNlcnZhYmxlPFRhYmxlUm93PFQ+PjtcbiAgc2VsZWN0ZWRSb3dzOiBPYnNlcnZhYmxlPFRhYmxlUm93PFQ+W10+O1xuICBhY3RpdmVSb3c6IE9ic2VydmFibGU8VGFibGVSb3c8VD4+O1xuICBoaWRkZW5Db2x1bW5zOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcbiAgc2Nyb2xsSW5kZXg6IE9ic2VydmFibGU8bnVtYmVyPjtcblxuICBlZGl0VHlwZTogRWRpdFR5cGU7XG4gIGVkaXRFdmVudDogRWRpdEV2ZW50O1xuICByb3dFZGl0YWJsZTogYm9vbGVhbiB8ICgocm93OiBUYWJsZVJvdzxUPikgPT4gYm9vbGVhbik7XG4gIC8vIGNlbGxFZGl0YWJsZTogYm9vbGVhbiB8ICgocm93OiBJQ2VsbENvb3JkaW5hdGVzPFQ+KSA9PiBib29sZWFuKTtcblxuICBnZXQgZHJhZ1NvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZHJhZ1NvdXJjZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbENvbHVtbnNIYXNoOiBzdHJpbmc7XG4gIHByaXZhdGUgaW5pdGlhbENvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgcHJpdmF0ZSBkaXNwbGF5Q29sdW1uczogVGFibGVDb2x1bW5bXSA9IFtdO1xuICBwcml2YXRlIF9jb2x1bW5zOiBCZWhhdmlvclN1YmplY3Q8VGFibGVDb2x1bW5bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlQ29sdW1uW10+KFtdKTtcbiAgcHJpdmF0ZSBpbml0aWFsRGF0YTogVGFibGVSb3c8VD5bXSA9IFtdO1xuICBwcml2YXRlIF9kaXNwbGF5RGF0YTogQmVoYXZpb3JTdWJqZWN0PFRhYmxlUm93PFQ+W10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYWJsZVJvdzxUPltdPihbXSk7XG4gIHByaXZhdGUgX2RpY3Q6IEJlaGF2aW9yU3ViamVjdDxJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT4+ID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPj4oe30pO1xuICBwcml2YXRlIF9zdGF0ZTogQmVoYXZpb3JTdWJqZWN0PEZpbHRlclN0YXRlPiA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxGaWx0ZXJTdGF0ZT4obmV3IEZpbHRlclN0YXRlKCkpO1xuICBwcml2YXRlIF9jb29raWVOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX2hpZGRlbkNvb2tpZU5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfY29sdW1uc0Nvb2tpZU5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfZWRpdFJvd1N0YXJ0ID0gbmV3IFN1YmplY3Q8SUNlbGxDb29yZGluYXRlczxUPiB8IG51bGw+KCk7XG4gIHByaXZhdGUgX2VkaXRSb3dTdG9wID0gbmV3IFN1YmplY3Q8SUNlbGxDb29yZGluYXRlczxUPiB8IG51bGw+KCk7XG4gIHByaXZhdGUgX2VkaXRDZWxsU3RhcnQgPSBuZXcgU3ViamVjdDxJQ2VsbENvb3JkaW5hdGVzPFQ+IHwgbnVsbD4oKTtcbiAgcHJpdmF0ZSBfZWRpdENlbGxTdG9wID0gbmV3IFN1YmplY3Q8SUNlbGxDb29yZGluYXRlczxUPiB8IG51bGw+KCk7XG4gIHByaXZhdGUgX3ZhbHVlQ2hhbmdlZCA9IG5ldyBTdWJqZWN0PElDZWxsQ29vcmRpbmF0ZXM8VD4gfCBudWxsPigpO1xuICBwcml2YXRlIF92YWx1ZVNldCA9IG5ldyBTdWJqZWN0PElDZWxsVmFsdWU8VD4+KCk7XG4gIHByaXZhdGUgX3N0YXRlQ2hhbmdlZCA9IG5ldyBTdWJqZWN0PEZpbHRlclN0YXRlPigpO1xuICBwcml2YXRlIF9maWx0ZXJDbGVhciA9IG5ldyBTdWJqZWN0PFRhYmxlQ29sdW1uPigpO1xuICBwcml2YXRlIF9kcmFnU291cmNlOiBUYWJsZUNvbHVtbjtcbiAgcHJpdmF0ZSBfZ3JvdXBUb2dnbGUgPSBuZXcgU3ViamVjdDxUYWJsZVJvdzxUPj4oKTtcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRSb3dzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYWJsZVJvdzxUPltdPihbXSk7XG4gIHByaXZhdGUgX2FjdGl2ZVJvdyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVSb3c8VD4+KG51bGwpO1xuICBwcml2YXRlIF9oaWRkZW5Db2x1bW5zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xuICBwcml2YXRlIF9zY3JvbGxJbmRleCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcblxuICBwcml2YXRlIF9jdXJyZW50RWRpdFJvdzogSUNlbGxDb29yZGluYXRlczxUPjtcbiAgcHJpdmF0ZSBfY3VycmVudEVkaXRDZWxsOiBJQ2VsbENvb3JkaW5hdGVzPFQ+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuX2NvbHVtbnMuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5kaXNwbGF5RGF0YSA9IHRoaXMuX2Rpc3BsYXlEYXRhLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZGljdCA9IHRoaXMuX2RpY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuX3N0YXRlLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZWRpdFJvd1N0YXJ0ID0gdGhpcy5fZWRpdFJvd1N0YXJ0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZWRpdFJvd1N0b3AgPSB0aGlzLl9lZGl0Um93U3RvcC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmVkaXRDZWxsU3RhcnQgPSB0aGlzLl9lZGl0Q2VsbFN0YXJ0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZWRpdENlbGxTdG9wID0gdGhpcy5fZWRpdENlbGxTdG9wLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMudmFsdWVDaGFuZ2VkID0gdGhpcy5fdmFsdWVDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMudmFsdWVTZXQgPSB0aGlzLl92YWx1ZVNldC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlZCA9IHRoaXMuX3N0YXRlQ2hhbmdlZC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmZpbHRlckNsZWFyID0gdGhpcy5fZmlsdGVyQ2xlYXIuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5ncm91cFRvZ2dsZSA9IHRoaXMuX2dyb3VwVG9nZ2xlLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gdGhpcy5fc2VsZWN0ZWRSb3dzLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuYWN0aXZlUm93ID0gdGhpcy5fYWN0aXZlUm93LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuaGlkZGVuQ29sdW1ucyA9IHRoaXMuX2hpZGRlbkNvbHVtbnMuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5zY3JvbGxJbmRleCA9IHRoaXMuX3Njcm9sbEluZGV4LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgc2V0RGF0YShkYXRhOiBUW10pOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxEYXRhID0gZGF0YT8ubWFwKChfKSA9PiBuZXcgVGFibGVSb3c8VD4oXykpO1xuICAgIHRoaXMuX2Rpc3BsYXlEYXRhLm5leHQodGhpcy5pbml0aWFsRGF0YSk7XG4gIH1cblxuICBzZXREaWN0KGRpY3Q6IElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPik6IHZvaWQge1xuICAgIHRoaXMuX2RpY3QubmV4dChkaWN0KTtcbiAgfVxuXG4gIHNldENvbHVtbnMoY29sdW1uczogVGFibGVDb2x1bW5bXSk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbENvbHVtbnMgPSBjb2x1bW5zID8gY29sdW1ucy5tYXAoKF8pID0+IG5ldyBUYWJsZUNvbHVtbihfKSkgOiBbXTtcbiAgICB0aGlzLmluaXRpYWxDb2x1bW5zSGFzaCA9IG9iamVjdEhhc2godGhpcy5pbml0aWFsQ29sdW1ucywge1xuICAgICAgYWxnb3JpdGhtOiAnc2hhMScsXG4gICAgICBpZ25vcmVVbmtub3duOiB0cnVlLFxuICAgICAgZXhjbHVkZUtleXM6IGtleSA9PiBrZXkgPT09ICdoZWFkRHJvcGRvd25UZW1wbGF0ZScsXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdG9yZWQgPSB0aGlzLnJlc3RvcmVDb2x1bW5zKCk7XG5cbiAgICBpZiAocmVzdG9yZWQpIHtcbiAgICAgIHRoaXMuc2V0RGlzcGxheUNvbHVtbnMocmVzdG9yZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldERpc3BsYXlDb2x1bW5zKHRoaXMuaW5pdGlhbENvbHVtbnMpO1xuICAgIH1cbiAgfVxuXG4gIHJlc3RvcmVEZWZhdWx0Q29sdW1ucygpIHtcbiAgICB0aGlzLnNldERpc3BsYXlDb2x1bW5zKHRoaXMuaW5pdGlhbENvbHVtbnMpO1xuICAgIHRoaXMuY2xlYXJDb2x1bW5zU3RhdGUoKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbHVtbnMoY29sdW1uczogVGFibGVDb2x1bW5bXSk6IHZvaWQge1xuICAgIHRoaXMuc2V0RGlzcGxheUNvbHVtbnMoY29sdW1ucyk7XG4gICAgdGhpcy5zYXZlQ29sdW1uc1N0YXRlKCk7XG4gIH1cblxuICBzYXZlQ29sdW1uc1N0YXRlKCkge1xuICAgIGlmICh0aGlzLl9jb29raWVOYW1lKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICAgdGhpcy5fY29sdW1uc0Nvb2tpZU5hbWUsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBoYXNoOiB0aGlzLmluaXRpYWxDb2x1bW5zSGFzaCxcbiAgICAgICAgICBjb2x1bW5zOiB0aGlzLmRpc3BsYXlDb2x1bW5zLm1hcCgoXykgPT4gbmV3IFRhYmxlQ29sdW1uU3RvcmUoXykpLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckNvbHVtbnNTdGF0ZSgpIHtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLl9jb2x1bW5zQ29va2llTmFtZSk7XG4gIH1cblxuICBzZXREaXNwbGF5Q29sdW1ucyhjb2x1bW5zOiBUYWJsZUNvbHVtbltdKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwbGF5Q29sdW1ucyA9IGNvbHVtbnMgPyBjb2x1bW5zLm1hcCgoXykgPT4gbmV3IFRhYmxlQ29sdW1uKF8pKSA6IFtdO1xuICAgIHRoaXMuX2NvbHVtbnMubmV4dCh0aGlzLmRpc3BsYXlDb2x1bW5zKTtcbiAgfVxuXG4gIHJlc3RvcmVDb2x1bW5zKCkge1xuICAgIGNvbnN0IHNhdmVkQ29sdW1ucyA9IEpTT04ucGFyc2UoXG4gICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLl9jb2x1bW5zQ29va2llTmFtZSlcbiAgICApO1xuICAgIGlmIChzYXZlZENvbHVtbnMgJiYgc2F2ZWRDb2x1bW5zLmhhc2ggPT09IHRoaXMuaW5pdGlhbENvbHVtbnNIYXNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXN0b3JlQ29sdW1uc1N0YXRlKHNhdmVkQ29sdW1ucy5jb2x1bW5zKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXN0b3JlQ29sdW1uc1N0YXRlKGNvbHVtbnM6IFRhYmxlQ29sdW1uU3RvcmVbXSkge1xuICAgIHJldHVybiBjb2x1bW5zLm1hcCgoY29sdW1uOiBUYWJsZUNvbHVtblN0b3JlKSA9PiB7XG4gICAgICBjb25zdCBmb3VuZCA9IEFycmF5VXRpbC5maW5kUmVjdXJzaXZlKFxuICAgICAgICB0aGlzLmluaXRpYWxDb2x1bW5zLFxuICAgICAgICAoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBjb2x1bW4ubmFtZSxcbiAgICAgICAgJ2NvbHVtbnMnXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzdWx0Q29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKGZvdW5kKTtcbiAgICAgIHJlc3VsdENvbHVtbi53aWR0aCA9IGNvbHVtbi53aWR0aDtcbiAgICAgIHJlc3VsdENvbHVtbi5mbGV4ID0gY29sdW1uLmZsZXg7XG4gICAgICByZXN1bHRDb2x1bW4ubG9ja2VkID0gY29sdW1uLmxvY2tlZDtcbiAgICAgIGlmIChjb2x1bW4uY29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHRDb2x1bW4uY29sdW1ucyA9IHRoaXMucmVzdG9yZUNvbHVtbnNTdGF0ZShjb2x1bW4uY29sdW1ucyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0Q29sdW1uO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0U3RhdGUoc3RhdGU6IEZpbHRlclN0YXRlKTogdm9pZCB7XG4gICAgc3RhdGUuc2F2ZSh0aGlzLl9jb29raWVOYW1lKTtcbiAgICB0aGlzLl9zdGF0ZS5uZXh0KHN0YXRlKTtcbiAgfVxuXG4gIHNldENvb2tpZU5hbWUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fY29va2llTmFtZSA9IG5hbWU7XG4gICAgdGhpcy5faGlkZGVuQ29va2llTmFtZSA9IGAke3RoaXMuX2Nvb2tpZU5hbWV9X2hpZGRlbl9jb2x1bW5zYDtcbiAgICB0aGlzLl9jb2x1bW5zQ29va2llTmFtZSA9IGAke3RoaXMuX2Nvb2tpZU5hbWV9X2NvbHVtbnNgO1xuICB9XG5cbiAgcmVzdG9yZVN0YXRlKCk6IHZvaWQge1xuICAgIGxldCBzdGF0ZTogRmlsdGVyU3RhdGU7XG4gICAgaWYgKHRoaXMuX2Nvb2tpZU5hbWU/Lmxlbmd0aCA+IDAgJiYgRmlsdGVyU3RhdGUucmVzdG9yZSh0aGlzLl9jb29raWVOYW1lKSkge1xuICAgICAgbGV0IG5ld1N0YXRlID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgdGhpcy5fc3RhdGUudmFsdWUsXG4gICAgICAgIEZpbHRlclN0YXRlLnJlc3RvcmUodGhpcy5fY29va2llTmFtZSlcbiAgICAgICk7XG4gICAgICBuZXdTdGF0ZSA9IERhdGVVdGlsLmNvbnZlcnREYXRlU3RyaW5nc1RvRGF0ZXMobmV3U3RhdGUpO1xuICAgICAgc3RhdGUgPSBuZXcgRmlsdGVyU3RhdGUobmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZSA9IG5ldyBGaWx0ZXJTdGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHN0YXRlKTtcbiAgfVxuXG4gIHNhdmVIaWRkZW5Db2x1bW5zKGhpZGRlbkNvbHVtbnM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5faGlkZGVuQ29va2llTmFtZSwgSlNPTi5zdHJpbmdpZnkoaGlkZGVuQ29sdW1ucykpO1xuICB9XG5cbiAgcmVzdG9yZUhpZGRlbkNvbHVtbnMoKTogdm9pZCB7XG4gICAgY29uc3QgaGlkZGVuQ29sdW1ucyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuX2hpZGRlbkNvb2tpZU5hbWUpIHx8ICdbXSc7XG4gICAgdGhpcy5faGlkZGVuQ29sdW1ucy5uZXh0KEpTT04ucGFyc2UoaGlkZGVuQ29sdW1ucykpO1xuICB9XG5cbiAgc29ydChzb3J0RXZlbnQ6IFNvcnRFdmVudCk6IHZvaWQge1xuICAgIGlmIChzb3J0RXZlbnQuY29sdW1uLnNvcnRhYmxlKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKFN0YXRlVXRpbC5zb3J0Q29sdW1uKHNvcnRFdmVudCwgdGhpcy5fc3RhdGUudmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICBjbGVhclNvcnQoY29sdW1uOiBUYWJsZUNvbHVtbik6IHZvaWQge1xuICAgIHRoaXMuc2V0U3RhdGUoU3RhdGVVdGlsLmNsZWFyU29ydChjb2x1bW4sIHRoaXMuX3N0YXRlLnZhbHVlKSk7XG4gIH1cblxuICBjbGVhckFsbFNvcnQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRTdGF0ZShTdGF0ZVV0aWwuY2xlYXJBbGxTb3J0KHRoaXMuX3N0YXRlLnZhbHVlKSk7XG4gIH1cblxuICBjbGVhckZpbHRlcihjb2x1bW46IFRhYmxlQ29sdW1uKSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9zdGF0ZS52YWx1ZTtcbiAgICBpZiAoY29sdW1uICE9PSBudWxsICYmIGNvbHVtbiAhPT0gdW5kZWZpbmVkICYmIGNvbHVtbi5maWx0ZXJhYmxlKSB7XG4gICAgICBzd2l0Y2ggKGNvbHVtbi5maWx0ZXJUeXBlKSB7XG4gICAgICAgIGNhc2UgRmlsdGVyVHlwZS5kYXRlOlxuICAgICAgICAgIHN0YXRlLmFkZERhdGVGaWx0ZXIoXG4gICAgICAgICAgICBuZXcgRGF0ZUZpbHRlcih7XG4gICAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmZpbHRlckZpZWxkLFxuICAgICAgICAgICAgICB2YWx1ZTogbmV3IERhdGVGaWx0ZXJWYWx1ZSgpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEZpbHRlclR5cGUuc3RyaW5nOlxuICAgICAgICAgIHN0YXRlLmFkZFN0cmluZ0ZpbHRlcihcbiAgICAgICAgICAgIG5ldyBTdHJpbmdGaWx0ZXIoe1xuICAgICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWx0ZXJGaWVsZCxcbiAgICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEZpbHRlclR5cGUubnVtYmVyOlxuICAgICAgICAgIHN0YXRlLmFkZE51bWVyaWNGaWx0ZXIoXG4gICAgICAgICAgICBuZXcgTnVtZXJpY0ZpbHRlcih7XG4gICAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmZpbHRlckZpZWxkLFxuICAgICAgICAgICAgICB2YWx1ZTogbmV3IE51bWVyaWNGaWx0ZXJWYWx1ZSgpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEZpbHRlclR5cGUubGlzdDpcbiAgICAgICAgICBzdGF0ZS5hZGRMaXN0RmlsdGVyKFxuICAgICAgICAgICAgbmV3IExpc3RGaWx0ZXIoe1xuICAgICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWx0ZXJGaWVsZCxcbiAgICAgICAgICAgICAgdmFsdWU6IFtdLFxuICAgICAgICAgICAgICB0eXBlOiBMaXN0RmlsdGVyVHlwZS5Ob25lLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZShuZXcgRmlsdGVyU3RhdGUoc3RhdGUpKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckFsbEZpbHRlcnMoKSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9zdGF0ZS52YWx1ZTtcbiAgICBzdGF0ZS5zdHJpbmdGaWx0ZXJzID0gW107XG4gICAgc3RhdGUubGlzdEZpbHRlcnMgPSBbXTtcbiAgICBzdGF0ZS5udW1lcmljRmlsdGVycyA9IFtdO1xuICAgIHN0YXRlLmRhdGVGaWx0ZXJzID0gW107XG4gICAgdGhpcy5zZXRTdGF0ZShuZXcgRmlsdGVyU3RhdGUoc3RhdGUpKTtcbiAgfVxuXG4gIHBpbkNvbHVtbihjb2x1bW46IFRhYmxlQ29sdW1uKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwbGF5Q29sdW1ucy5mb3JFYWNoKChjb2w6IFRhYmxlQ29sdW1uKSA9PiB7XG4gICAgICBpZiAoY29sLm5hbWUgPT09IGNvbHVtbi5uYW1lKSB7XG4gICAgICAgIGNvbC5sb2NrZWQgPSAhY29sLmxvY2tlZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUNvbHVtbnModGhpcy5kaXNwbGF5Q29sdW1ucyk7XG4gIH1cblxuICBkcmFnU3RhcnQoY29sdW1uOiBUYWJsZUNvbHVtbik6IHZvaWQge1xuICAgIHRoaXMuX2RyYWdTb3VyY2UgPSBjb2x1bW47XG4gIH1cblxuICBsb2NrUHJldmlvdXNDb2x1bW5zKGNvbHVtbjogVGFibGVDb2x1bW4sIGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgZmxhdCA9IEFycmF5VXRpbC5mbGF0dGVuKHRoaXMuZGlzcGxheUNvbHVtbnMsICdjb2x1bW5zJywgdHJ1ZSkuc29ydChcbiAgICAgIChhLCBiKSA9PiBOdW1iZXIoYi5sb2NrZWQpIC0gTnVtYmVyKGEubG9ja2VkKVxuICAgICk7XG4gICAgY29uc3QgaW5kZXggPSBmbGF0LmluZGV4T2YoY29sdW1uKTtcbiAgICBjb25zdCBwcmV2aW91cyA9IGZsYXQuc2xpY2UoMCwgaW5kZXgpLmZpbHRlcigoXykgPT4gXy5mbGV4ID4gMCk7XG4gICAgaWYgKHByZXZpb3VzPy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB0YWJsZUVsZW1lbnQgPSB0aGlzLmdldFRhYmxlRWxlbWVudChlbGVtZW50KTtcbiAgICAgIHByZXZpb3VzLmZvckVhY2goKGl0ZW06IFRhYmxlQ29sdW1uKSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1Db2wgPSB0YWJsZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICBgdGV0YS1oZWFkLWNlbGxbZGF0YS1jb2x1bW49JHtpdGVtLm5hbWV9XWBcbiAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKGl0ZW1Db2wpIHtcbiAgICAgICAgICBpdGVtLmZsZXggPSAwO1xuICAgICAgICAgIGl0ZW0ud2lkdGggPSBpdGVtQ29sLmNsaWVudFdpZHRoO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXNpemVDb2x1bW4oZXZlbnQ6IENvbHVtblJlc2l6ZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmNvbHVtbiAhPT0gbnVsbCAmJiBldmVudC5jb2x1bW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgZXZlbnQuY29sdW1uLndpZHRoID0gZXZlbnQubmV3V2lkdGggPCA1MCA/IDUwIDogZXZlbnQubmV3V2lkdGg7XG4gICAgICBldmVudC5jb2x1bW4uZmxleCA9IDA7XG4gICAgfVxuICAgIHRoaXMuX2NvbHVtbnMubmV4dCh0aGlzLmRpc3BsYXlDb2x1bW5zKTtcbiAgICB0aGlzLnNhdmVDb2x1bW5zU3RhdGUoKTtcbiAgfVxuXG4gIGF1dG9zaXplQ29sdW1uKGNvbHVtbjogVGFibGVDb2x1bW4sIHRhcmdldDogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCB0YWJsZUVsZW1lbnQgPSB0aGlzLmdldFRhYmxlRWxlbWVudCh0YXJnZXQpO1xuICAgIHRoaXMuc2V0Q29sdW1uQXV0b1dpZHRoKGNvbHVtbiwgdGFibGVFbGVtZW50IGFzIEhUTUxFbGVtZW50KTtcbiAgICB0aGlzLl9jb2x1bW5zLm5leHQodGhpcy5kaXNwbGF5Q29sdW1ucyk7XG4gICAgdGhpcy5zYXZlQ29sdW1uc1N0YXRlKCk7XG4gIH1cblxuICBhdXRvc2l6ZUFsbENvbHVtbnModGFyZ2V0OiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IHRhYmxlRWxlbWVudCA9IHRoaXMuZ2V0VGFibGVFbGVtZW50KHRhcmdldCk7XG4gICAgY29uc3QgZmxhdCA9IEFycmF5VXRpbC5mbGF0dGVuKHRoaXMuZGlzcGxheUNvbHVtbnMsICdjb2x1bW5zJywgdHJ1ZSk7XG4gICAgZmxhdC5mb3JFYWNoKChjb2wpID0+XG4gICAgICB0aGlzLnNldENvbHVtbkF1dG9XaWR0aChjb2wsIHRhYmxlRWxlbWVudCBhcyBIVE1MRWxlbWVudClcbiAgICApO1xuICAgIHRoaXMuX2NvbHVtbnMubmV4dCh0aGlzLmRpc3BsYXlDb2x1bW5zKTtcbiAgICB0aGlzLnNhdmVDb2x1bW5zU3RhdGUoKTtcbiAgfVxuXG4gIHJlb3JkZXJDb2x1bW4oY29sdW1uOiBUYWJsZUNvbHVtbiwgaW5zZXJ0QmVmb3JlOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgZXZlbnQgPSBuZXcgQ29sdW1uUmVvcmRlckV2ZW50KHRoaXMuX2RyYWdTb3VyY2UsIGNvbHVtbik7XG4gICAgaWYgKGV2ZW50LnNvdXJjZSAhPT0gZXZlbnQudGFyZ2V0KSB7XG4gICAgICBjb25zdCBzb3VyY2VQYXJlbnQgPSB0aGlzLmZpbmRQYXJlbnQoZXZlbnQuc291cmNlLCB0aGlzLmRpc3BsYXlDb2x1bW5zKTtcbiAgICAgIGNvbnN0IHRhcmdldFBhcmVudCA9IHRoaXMuZmluZFBhcmVudChldmVudC50YXJnZXQsIHRoaXMuZGlzcGxheUNvbHVtbnMpO1xuXG4gICAgICBpZiAoc291cmNlUGFyZW50ICYmIHRhcmdldFBhcmVudCkge1xuICAgICAgICBjb25zdCBzb3VyY2VJbmRleCA9IHNvdXJjZVBhcmVudC5pbmRleE9mKGV2ZW50LnNvdXJjZSk7XG4gICAgICAgIHNvdXJjZVBhcmVudC5zcGxpY2Uoc291cmNlSW5kZXgsIDEpO1xuICAgICAgICBsZXQgdGFyZ2V0SW5kZXggPSB0YXJnZXRQYXJlbnQuaW5kZXhPZihldmVudC50YXJnZXQpO1xuICAgICAgICBpZiAoIWluc2VydEJlZm9yZSkge1xuICAgICAgICAgIHRhcmdldEluZGV4ID0gdGFyZ2V0SW5kZXggKyAxO1xuICAgICAgICB9XG4gICAgICAgIHRhcmdldFBhcmVudC5zcGxpY2UodGFyZ2V0SW5kZXgsIDAsIGV2ZW50LnNvdXJjZSk7XG4gICAgICAgIGV2ZW50LnNvdXJjZS5sb2NrZWQgPSBldmVudC50YXJnZXQubG9ja2VkO1xuXG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1ucyh0aGlzLmRpc3BsYXlDb2x1bW5zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGFydEVkaXRSb3coY2VsbENvb3JkaW5hdGVzOiBJQ2VsbENvb3JkaW5hdGVzPFQ+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRFZGl0Um93Py5yb3cgIT09IGNlbGxDb29yZGluYXRlcz8ucm93KSB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudEVkaXRSb3cgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLl9kaXNwbGF5RGF0YS52YWx1ZS5pbmRleE9mKHRoaXMuX2N1cnJlbnRFZGl0Um93LnJvdylcbiAgICAgICAgdGhpcy5fZWRpdFJvd1N0b3AubmV4dCh0aGlzLl9jdXJyZW50RWRpdFJvdyk7XG4gICAgICB9XG4gICAgICBpZiAoY2VsbENvb3JkaW5hdGVzID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX2VkaXRSb3dTdGFydC5uZXh0KGNlbGxDb29yZGluYXRlcyk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRFZGl0Um93ID0gY2VsbENvb3JkaW5hdGVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuYm9vbE9yRnVuY0NhbGxiYWNrPFRhYmxlUm93PFQ+Pih0aGlzLnJvd0VkaXRhYmxlKShcbiAgICAgICAgICAgIGNlbGxDb29yZGluYXRlcy5yb3dcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuX2VkaXRSb3dTdGFydC5uZXh0KGNlbGxDb29yZGluYXRlcyk7XG4gICAgICAgICAgdGhpcy5fY3VycmVudEVkaXRSb3cgPSBjZWxsQ29vcmRpbmF0ZXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGFydEVkaXRDZWxsKGNlbGxDb29yZGluYXRlczogSUNlbGxDb29yZGluYXRlczxUPik6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuX2N1cnJlbnRFZGl0Q2VsbD8uY29sdW1uLm5hbWUgIT09IGNlbGxDb29yZGluYXRlcz8uY29sdW1uLm5hbWUgfHxcbiAgICAgIHRoaXMuX2N1cnJlbnRFZGl0Q2VsbD8ucm93ICE9PSBjZWxsQ29vcmRpbmF0ZXM/LnJvd1xuICAgICkge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnRFZGl0Q2VsbCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuX2VkaXRDZWxsU3RvcC5uZXh0KHRoaXMuX2N1cnJlbnRFZGl0Q2VsbCk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuYm9vbE9yRnVuY0NhbGxiYWNrPElDZWxsQ29vcmRpbmF0ZXM8VD4+KGNlbGxDb29yZGluYXRlcy5jb2x1bW4uZWRpdGFibGUpKFxuICAgICAgICAgIGNlbGxDb29yZGluYXRlc1xuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fZWRpdENlbGxTdGFydC5uZXh0KGNlbGxDb29yZGluYXRlcyk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRFZGl0Q2VsbCA9IGNlbGxDb29yZGluYXRlcztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRBY3RpdmVSb3cocm93OiBUYWJsZVJvdzxUPik6IHZvaWQge1xuICAgIHRoaXMuX2FjdGl2ZVJvdy5uZXh0KHJvdyk7XG4gIH1cblxuICBzZWxlY3RSb3dzKHJvd3M6IFRhYmxlUm93PFQ+W10pOiB2b2lkIHtcbiAgICB0aGlzLl9zZWxlY3RlZFJvd3MubmV4dChyb3dzKTtcbiAgfVxuXG4gIHNlbGVjdFJvdyhyb3c6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0VHlwZSA9PT0gU2VsZWN0VHlwZS5ub25lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdFR5cGUgPT09IFNlbGVjdFR5cGUuc2luZ2xlKSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd3MubmV4dChbcm93XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KFsuLi50aGlzLl9zZWxlY3RlZFJvd3MudmFsdWUsIHJvd10pO1xuICAgIH1cbiAgfVxuXG4gIGRlc2VsZWN0Um93KHJvdzogVGFibGVSb3c8VD4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RUeXBlID09PSBTZWxlY3RUeXBlLm5vbmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0VHlwZSA9PT0gU2VsZWN0VHlwZS5zaW5nbGUpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLm5leHQoXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy52YWx1ZS5maWx0ZXIoKF8pID0+IF8gIT09IHJvdylcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0QWxsKCkge1xuICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KHRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlKTtcbiAgfVxuXG4gIGRlc2VsZWN0QWxsKCkge1xuICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KFtdKTtcbiAgfVxuXG4gIGFsbFJvd3NTZWxlY3RlZCgpOiBib29sZWFuIHwgbnVsbCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5fZGlzcGxheURhdGEudmFsdWU/Lmxlbmd0aCAmJlxuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlPy5sZW5ndGggJiZcbiAgICAgIHRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlLmV2ZXJ5KFxuICAgICAgICAoXykgPT4gdGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlLmluZGV4T2YoXykgPj0gMFxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy52YWx1ZSA9PSBudWxsIHx8XG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd3MudmFsdWUubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc2V0SGlkZGVuQ29sdW1ucyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLnNhdmVIaWRkZW5Db2x1bW5zKHZhbHVlKTtcbiAgICB0aGlzLl9oaWRkZW5Db2x1bW5zLm5leHQodmFsdWUpO1xuICB9XG5cbiAgY29sdW1uSXNIaWRkZW4oY29sdW1uOiBUYWJsZUNvbHVtbikge1xuICAgIHJldHVybiB0aGlzLl9oaWRkZW5Db2x1bW5zLnZhbHVlLmluZGV4T2YoY29sdW1uLm5hbWUpID49IDA7XG4gIH1cblxuICB0b2dnbGVHcm91cChyb3c6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgdGhpcy5fZ3JvdXBUb2dnbGUubmV4dChyb3cpO1xuICB9XG5cbiAgY2hhbmdlVmFsdWUoY29vcmRpbmF0ZXM6IElDZWxsQ29vcmRpbmF0ZXM8VD4pOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZUNoYW5nZWQubmV4dChjb29yZGluYXRlcyk7XG4gIH1cblxuICBzZXRWYWx1ZShjZWxsVmFsdWU6IElDZWxsVmFsdWU8VD4pOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZVNldC5uZXh0KGNlbGxWYWx1ZSk7XG4gIH1cblxuICBnZXRSb3dCeUluZGV4KHJvd0luZGV4OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheURhdGEudmFsdWVbcGFyc2VJbnQocm93SW5kZXgsIDEwKV07XG4gIH1cblxuICBnZXRDb2x1bW5CeU5hbWUoY29sdW1uTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIEFycmF5VXRpbC5maW5kUmVjdXJzaXZlKFxuICAgICAgdGhpcy5kaXNwbGF5Q29sdW1ucyxcbiAgICAgIChpdGVyYWJsZU5vZGUpID0+IGNvbHVtbk5hbWUgPT09IGl0ZXJhYmxlTm9kZS5uYW1lLFxuICAgICAgJ2NvbHVtbnMnXG4gICAgKTtcbiAgfVxuXG4gIHNjcm9sbFRvSW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuX3Njcm9sbEluZGV4Lm5leHQobnVsbCk7XG4gICAgdGhpcy5fc2Nyb2xsSW5kZXgubmV4dChpbmRleCk7XG4gIH1cblxuICBib29sT3JGdW5jQ2FsbGJhY2s8TT4odmFyaWFibGU6IGJvb2xlYW4gfCAoKHJvdzogTSkgPT4gYm9vbGVhbikpIHtcbiAgICByZXR1cm4gKGFyZ3M6IE0pID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFyaWFibGUgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gdmFyaWFibGU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNGdW5jdGlvbih2YXJpYWJsZSkpIHtcbiAgICAgICAgcmV0dXJuICh2YXJpYWJsZSBhcyAocm93OiBNKSA9PiBib29sZWFuKShhcmdzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGZpbmRQYXJlbnQoXG4gICAgY29sdW1uOiBUYWJsZUNvbHVtbixcbiAgICBjb2x1bW5zOiBUYWJsZUNvbHVtbltdXG4gICk6IFRhYmxlQ29sdW1uW10gfCBudWxsIHtcbiAgICBjb25zdCBmb3VuZCA9IGNvbHVtbnMuZmluZCgoeCkgPT4geC5uYW1lID09PSBjb2x1bW4ubmFtZSk7XG4gICAgaWYgKGZvdW5kICE9PSBudWxsICYmIGZvdW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjb2x1bW5zO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IGNvbHVtbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBjb25zdCBjb2wgPSBjb2x1bW5zW2ldO1xuICAgICAgaWYgKGNvbC5jb2x1bW5zICYmIGNvbC5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZpbmRQYXJlbnQoY29sdW1uLCBjb2wuY29sdW1ucyk7XG4gICAgICAgIGlmIChyZXN1bHQgIT09IG51bGwgJiYgcmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUYWJsZUVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudC5jbG9zZXN0KCd0ZXRhLXRhYmxlJyk7XG4gIH1cblxuICBwcml2YXRlIGlzRnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICByZXR1cm4gISEob2JqICYmIG9iaj8uY29uc3RydWN0b3IgJiYgb2JqPy5jYWxsICYmIG9iaj8uYXBwbHkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb2x1bW5BdXRvV2lkdGgoY29sdW1uOiBUYWJsZUNvbHVtbiwgdGFibGU6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgY2VsbHMgPSB0YWJsZS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYHRldGEtY2VsbFtkYXRhLWNvbHVtbj0ke2NvbHVtbi5uYW1lfV0gLmNlbGwtdGV4dGBcbiAgICApO1xuICAgIGxldCBtYXhXaWR0aCA9IDA7XG4gICAgY2VsbHMuZm9yRWFjaCgoY2VsbCkgPT4ge1xuICAgICAgaWYgKGNlbGwuc2Nyb2xsV2lkdGggPiBtYXhXaWR0aCkge1xuICAgICAgICBtYXhXaWR0aCA9IGNlbGwuc2Nyb2xsV2lkdGg7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29sdW1uLmZsZXggPSAwO1xuICAgIGNvbHVtbi53aWR0aCA9IG1heFdpZHRoICsgMjA7XG4gIH1cbn1cbiJdfQ==
@@ -174,10 +174,10 @@ export class TableBodyComponent {
174
174
  }
175
175
  }
176
176
  TableBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: TableBodyComponent, deps: [{ token: i1.TableService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
177
- TableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.1", type: TableBodyComponent, selector: "teta-table-body", inputs: { virtual: "virtual", activeRow: "activeRow", rowHeight: "rowHeight", additionalComponent: "additionalComponent", tree: "tree", aggregate: "aggregate", grouping: "grouping", groupRowComponent: "groupRowComponent", openLevels: "openLevels", selectType: "selectType", rowClass: "rowClass" }, host: { properties: { "class.table-body": "this.tableBodyClass" } }, viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], ngImport: i0, template: "<!--<div #viewport class=\"table-body-container table-body-container-virtual\"-->\n<!-- *ngIf=\"virtual\"-->\n<!-- [style.grid-template-columns]=\"getTemplateColumns()\"-->\n<!-- style=\"height: 100%;\">-->\n<!-- <ng-container-->\n<!-- *uiScroll=\"let row of dataSource; let rowIndex = index; let last = last;\" style=\"display: flex;flex-grow: 1\">-->\n<!-- <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>-->\n<!-- </ng-container>-->\n<!-- <ng-container *ngIf=\"aggregate\">-->\n<!-- <ng-container *ngTemplateOutlet=\"aggTemplate;\"></ng-container>-->\n<!-- </ng-container>-->\n<!--</div>-->\n\n<cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n class=\"table-body-container\"\n [itemSize]=\"24\">\n <ng-container *cdkVirtualFor=\"let row of data;templateCacheSize: 0; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n</cdk-virtual-scroll-viewport>\n\n\n<div *ngIf=\"!virtual\"\n class=\"table-body-container\"\n [style.grid-template-rows]=\"rowHeight + 'px'\"\n [style.grid-auto-rows]=\"rowHeight + 'px'\"\n [style.grid-template-columns]=\"getTemplateColumns()\">\n <ng-container *ngFor=\"let row of data; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"aggregate\">\n <ng-container *ngTemplateOutlet=\"aggTemplate;\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #bodyTemplate let-row=\"row\" let-rowIndex=\"rowIndex\">\n <div class=\"table-row\"\n (click)=\"setActiveRow(row)\"\n [attr.data-row]=\"rowIndex\"\n [ngClass]=\"rowClass ? rowClass(row, rowIndex) : ''\"\n [class.table-row_virtual]=\"virtual\"\n [style.grid-template-columns]=\"virtual ? getTemplateColumns() : ''\"\n [class.table-row_active]=\"row === activeRow || selectedRows.indexOf(row) >= 0\">\n <ng-container *ngIf=\"!grouping\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.grid-template-columns]=\"getLockedGridTemplateColumns(locked)\"\n [style.zIndex]=\"row === activeRow ? 1 : 'unset'\"\n [style.grid-column-end]=\"getSpan()\">\n <teta-selection-cell *ngIf=\"selectType !== selectTypeEnum.none && locked.length\"\n [row]=\"row\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict[column.name]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n ></teta-cell>\n </div>\n <teta-selection-cell *ngIf=\"selectType !== selectTypeEnum.none && locked.length < 1\"\n [row]=\"row\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict[column.name]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n ></teta-cell>\n </ng-container>\n <ng-container *ngIf=\"grouping\">\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #aggTemplate>\n <div class=\"table-row\"\n *ngIf=\"aggregate\"\n [class.table-row_virtual]=\"virtual\"\n [style.grid-template-columns]=\"virtual ? getTemplateColumns() : ''\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.grid-template-columns]=\"getLockedGridTemplateColumns(locked)\"\n [style.grid-column-end]=\"getSpan()\">\n <div class=\"cell align-center justify-content-center\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component justify-content-end\"\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{getAggregateText(column)}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n <div class=\"cell align-center justify-content-center\"\n *ngIf=\"selectType !== selectTypeEnum.none && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component justify-content-end\"\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{getAggregateText(column)}}\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n</ng-template>\n", styles: [""], components: [{ type: i2.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { type: i3.SelectionCellComponent, selector: "teta-selection-cell", inputs: ["row"] }, { type: i4.CellComponent, selector: "teta-cell", inputs: ["column", "filterOptions", "dict", "row"] }, { type: i5.IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { type: i2.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "tetaNumber": i7.NumberPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
177
+ TableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.1", type: TableBodyComponent, selector: "teta-table-body", inputs: { virtual: "virtual", activeRow: "activeRow", rowHeight: "rowHeight", additionalComponent: "additionalComponent", tree: "tree", aggregate: "aggregate", grouping: "grouping", groupRowComponent: "groupRowComponent", openLevels: "openLevels", selectType: "selectType", rowClass: "rowClass" }, host: { properties: { "class.table-body": "this.tableBodyClass" } }, viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], ngImport: i0, template: "<cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n class=\"table-body-container\"\n [itemSize]=\"24\">\n <ng-container *cdkVirtualFor=\"let row of data;templateCacheSize: 0; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n</cdk-virtual-scroll-viewport>\n<div *ngIf=\"!virtual\"\n class=\"table-body-container\"\n [style.grid-template-rows]=\"rowHeight + 'px'\"\n [style.grid-auto-rows]=\"rowHeight + 'px'\"\n [style.grid-template-columns]=\"getTemplateColumns()\">\n <ng-container *ngFor=\"let row of data; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"aggregate\">\n <ng-container *ngTemplateOutlet=\"aggTemplate;\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #bodyTemplate let-row=\"row\" let-rowIndex=\"rowIndex\">\n <div class=\"table-row\"\n (click)=\"setActiveRow(row)\"\n [attr.data-row]=\"rowIndex\"\n [ngClass]=\"rowClass ? rowClass(row, rowIndex) : ''\"\n [class.table-row_virtual]=\"virtual\"\n [style.grid-template-columns]=\"virtual ? getTemplateColumns() : ''\"\n [class.table-row_active]=\"row === activeRow || selectedRows.indexOf(row) >= 0\">\n <ng-container *ngIf=\"!grouping\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.grid-template-columns]=\"getLockedGridTemplateColumns(locked)\"\n [style.zIndex]=\"row === activeRow ? 1 : 'unset'\"\n [style.grid-column-end]=\"getSpan()\">\n <teta-selection-cell *ngIf=\"selectType !== selectTypeEnum.none && locked.length\"\n [row]=\"row\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict[column.name]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n ></teta-cell>\n </div>\n <teta-selection-cell *ngIf=\"selectType !== selectTypeEnum.none && locked.length < 1\"\n [row]=\"row\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict[column.name]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n ></teta-cell>\n </ng-container>\n <ng-container *ngIf=\"grouping\">\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #aggTemplate>\n <div class=\"table-row\"\n *ngIf=\"aggregate\"\n [class.table-row_virtual]=\"virtual\"\n [style.grid-template-columns]=\"virtual ? getTemplateColumns() : ''\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.grid-template-columns]=\"getLockedGridTemplateColumns(locked)\"\n [style.grid-column-end]=\"getSpan()\">\n <div class=\"cell align-center justify-content-center\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component justify-content-end\"\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{getAggregateText(column)}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n <div class=\"cell align-center justify-content-center\"\n *ngIf=\"selectType !== selectTypeEnum.none && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component justify-content-end\"\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{getAggregateText(column)}}\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n</ng-template>\n", styles: [""], components: [{ type: i2.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { type: i3.SelectionCellComponent, selector: "teta-selection-cell", inputs: ["row"] }, { type: i4.CellComponent, selector: "teta-cell", inputs: ["column", "filterOptions", "dict", "row"] }, { type: i5.IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { type: i2.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "tetaNumber": i7.NumberPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
178
178
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: TableBodyComponent, decorators: [{
179
179
  type: Component,
180
- args: [{ selector: 'teta-table-body', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--<div #viewport class=\"table-body-container table-body-container-virtual\"-->\n<!-- *ngIf=\"virtual\"-->\n<!-- [style.grid-template-columns]=\"getTemplateColumns()\"-->\n<!-- style=\"height: 100%;\">-->\n<!-- <ng-container-->\n<!-- *uiScroll=\"let row of dataSource; let rowIndex = index; let last = last;\" style=\"display: flex;flex-grow: 1\">-->\n<!-- <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>-->\n<!-- </ng-container>-->\n<!-- <ng-container *ngIf=\"aggregate\">-->\n<!-- <ng-container *ngTemplateOutlet=\"aggTemplate;\"></ng-container>-->\n<!-- </ng-container>-->\n<!--</div>-->\n\n<cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n class=\"table-body-container\"\n [itemSize]=\"24\">\n <ng-container *cdkVirtualFor=\"let row of data;templateCacheSize: 0; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n</cdk-virtual-scroll-viewport>\n\n\n<div *ngIf=\"!virtual\"\n class=\"table-body-container\"\n [style.grid-template-rows]=\"rowHeight + 'px'\"\n [style.grid-auto-rows]=\"rowHeight + 'px'\"\n [style.grid-template-columns]=\"getTemplateColumns()\">\n <ng-container *ngFor=\"let row of data; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"aggregate\">\n <ng-container *ngTemplateOutlet=\"aggTemplate;\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #bodyTemplate let-row=\"row\" let-rowIndex=\"rowIndex\">\n <div class=\"table-row\"\n (click)=\"setActiveRow(row)\"\n [attr.data-row]=\"rowIndex\"\n [ngClass]=\"rowClass ? rowClass(row, rowIndex) : ''\"\n [class.table-row_virtual]=\"virtual\"\n [style.grid-template-columns]=\"virtual ? getTemplateColumns() : ''\"\n [class.table-row_active]=\"row === activeRow || selectedRows.indexOf(row) >= 0\">\n <ng-container *ngIf=\"!grouping\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.grid-template-columns]=\"getLockedGridTemplateColumns(locked)\"\n [style.zIndex]=\"row === activeRow ? 1 : 'unset'\"\n [style.grid-column-end]=\"getSpan()\">\n <teta-selection-cell *ngIf=\"selectType !== selectTypeEnum.none && locked.length\"\n [row]=\"row\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict[column.name]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n ></teta-cell>\n </div>\n <teta-selection-cell *ngIf=\"selectType !== selectTypeEnum.none && locked.length < 1\"\n [row]=\"row\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict[column.name]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n ></teta-cell>\n </ng-container>\n <ng-container *ngIf=\"grouping\">\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #aggTemplate>\n <div class=\"table-row\"\n *ngIf=\"aggregate\"\n [class.table-row_virtual]=\"virtual\"\n [style.grid-template-columns]=\"virtual ? getTemplateColumns() : ''\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.grid-template-columns]=\"getLockedGridTemplateColumns(locked)\"\n [style.grid-column-end]=\"getSpan()\">\n <div class=\"cell align-center justify-content-center\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component justify-content-end\"\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{getAggregateText(column)}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n <div class=\"cell align-center justify-content-center\"\n *ngIf=\"selectType !== selectTypeEnum.none && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component justify-content-end\"\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{getAggregateText(column)}}\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n</ng-template>\n", styles: [""] }]
180
+ args: [{ selector: 'teta-table-body', changeDetection: ChangeDetectionStrategy.OnPush, template: "<cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n class=\"table-body-container\"\n [itemSize]=\"24\">\n <ng-container *cdkVirtualFor=\"let row of data;templateCacheSize: 0; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n</cdk-virtual-scroll-viewport>\n<div *ngIf=\"!virtual\"\n class=\"table-body-container\"\n [style.grid-template-rows]=\"rowHeight + 'px'\"\n [style.grid-auto-rows]=\"rowHeight + 'px'\"\n [style.grid-template-columns]=\"getTemplateColumns()\">\n <ng-container *ngFor=\"let row of data; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"aggregate\">\n <ng-container *ngTemplateOutlet=\"aggTemplate;\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #bodyTemplate let-row=\"row\" let-rowIndex=\"rowIndex\">\n <div class=\"table-row\"\n (click)=\"setActiveRow(row)\"\n [attr.data-row]=\"rowIndex\"\n [ngClass]=\"rowClass ? rowClass(row, rowIndex) : ''\"\n [class.table-row_virtual]=\"virtual\"\n [style.grid-template-columns]=\"virtual ? getTemplateColumns() : ''\"\n [class.table-row_active]=\"row === activeRow || selectedRows.indexOf(row) >= 0\">\n <ng-container *ngIf=\"!grouping\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.grid-template-columns]=\"getLockedGridTemplateColumns(locked)\"\n [style.zIndex]=\"row === activeRow ? 1 : 'unset'\"\n [style.grid-column-end]=\"getSpan()\">\n <teta-selection-cell *ngIf=\"selectType !== selectTypeEnum.none && locked.length\"\n [row]=\"row\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict[column.name]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n ></teta-cell>\n </div>\n <teta-selection-cell *ngIf=\"selectType !== selectTypeEnum.none && locked.length < 1\"\n [row]=\"row\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict[column.name]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n ></teta-cell>\n </ng-container>\n <ng-container *ngIf=\"grouping\">\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #aggTemplate>\n <div class=\"table-row\"\n *ngIf=\"aggregate\"\n [class.table-row_virtual]=\"virtual\"\n [style.grid-template-columns]=\"virtual ? getTemplateColumns() : ''\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.grid-template-columns]=\"getLockedGridTemplateColumns(locked)\"\n [style.grid-column-end]=\"getSpan()\">\n <div class=\"cell align-center justify-content-center\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component justify-content-end\"\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{getAggregateText(column)}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n <div class=\"cell align-center justify-content-center\"\n *ngIf=\"selectType !== selectTypeEnum.none && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component justify-content-end\"\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{getAggregateText(column)}}\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n</ng-template>\n", styles: [""] }]
181
181
  }], ctorParameters: function () { return [{ type: i1.TableService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { virtual: [{
182
182
  type: Input
183
183
  }], activeRow: [{
@@ -207,4 +207,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
207
207
  type: HostBinding,
208
208
  args: ['class.table-body']
209
209
  }] } });
210
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsS0FBSyxFQUlMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQU12QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUcxRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7OztBQVFoRSxNQUFNLE9BQU8sa0JBQWtCO0lBa0Q3QixZQUFvQixJQUFxQixFQUFVLElBQXVCO1FBQXRELFNBQUksR0FBSixJQUFJLENBQWlCO1FBQVUsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFuQ3hCLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBYXhFLGlCQUFZLEdBQWtCLEVBQUUsQ0FBQztRQUNqQyxXQUFNLEdBQWtCLEVBQUUsQ0FBQztRQUMzQixhQUFRLEdBQWtCLEVBQUUsQ0FBQztRQUU3QixtQkFBYyxHQUFHLFVBQVUsQ0FBQztRQUVwQixhQUFRLEdBQWtCLEVBQUUs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SyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ2hELENBQUMsQ0FBQyxLQUFLO1lBQ1AsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQzlCLElBQUksQ0FDTCxDQUFDO0lBQ0osQ0FBQzs7K0dBcE5VLGtCQUFrQjttR0FBbEIsa0JBQWtCLGdkQWFsQix3QkFBd0IsZ0RDN0NyQyxpMUtBeUhBOzJGRHpGYSxrQkFBa0I7a0JBTjlCLFNBQVM7K0JBQ0UsaUJBQWlCLG1CQUdWLHVCQUF1QixDQUFDLE1BQU07bUlBR3RDLE9BQU87c0JBQWYsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVnRCxRQUFRO3NCQUE3RCxTQUFTO3VCQUFDLHdCQUF3QixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztnQkFFRixjQUFjO3NCQUEvRCxXQUFXO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBUeXBlLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUYWJsZVJvd30gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtcm93JztcbmltcG9ydCB7VGFibGVDb2x1bW59IGZyb20gJy4uL2NvbnRyYWN0L3RhYmxlLWNvbHVtbic7XG5pbXBvcnQge0dyb3VwUm93Q29tcG9uZW50QmFzZX0gZnJvbSAnLi4vYmFzZS9ncm91cC1yb3ctY29tcG9uZW50LWJhc2UnO1xuaW1wb3J0IHtUYWJsZVNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2UvdGFibGUuc2VydmljZSc7XG5pbXBvcnQge0RldGFpbENvbXBvbmVudEJhc2V9IGZyb20gJy4uL2Jhc2UvZGV0YWlsLWNvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7dGFrZVdoaWxlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1RhYmxlVXRpbH0gZnJvbSAnLi4vdXRpbC90YWJsZS11dGlsJztcbmltcG9ydCB7U2VsZWN0VHlwZX0gZnJvbSAnLi4vZW51bS9zZWxlY3QtdHlwZS5lbnVtJztcbmltcG9ydCB7Y29tYmluZUxhdGVzdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0FycmF5VXRpbH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3V0aWwvYXJyYXktdXRpbCc7XG5pbXBvcnQge0lEaWN0aW9uYXJ5fSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1kaWN0aW9uYXJ5JztcbmltcG9ydCB7SUlkTmFtZX0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2NvbnRyYWN0L2ktaWQtbmFtZSc7XG5pbXBvcnQge0FnZ3JlZ2F0aW9uVHlwZX0gZnJvbSAnLi4vZW51bS9hZ2dyZWdhdGlvbi10eXBlLmVudW0nO1xuaW1wb3J0IHtDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnR9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLXRhYmxlLWJvZHknLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtYm9keS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLWJvZHkuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQm9keUNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgdmlydHVhbDogYm9vbGVhbjtcbiAgQElucHV0KCkgYWN0aXZlUm93OiBUYWJsZVJvdzxUPjtcbiAgQElucHV0KCkgcm93SGVpZ2h0OiBudW1iZXI7XG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxDb21wb25lbnQ6IFR5cGU8RGV0YWlsQ29tcG9uZW50QmFzZTxUPj47XG4gIEBJbnB1dCgpIHRyZWU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGFnZ3JlZ2F0ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgZ3JvdXBpbmc6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGdyb3VwUm93Q29tcG9uZW50OiBUeXBlPEdyb3VwUm93Q29tcG9uZW50QmFzZTxUPj47XG4gIEBJbnB1dCgpIG9wZW5MZXZlbHM6IG51bWJlcjtcbiAgQElucHV0KCkgc2VsZWN0VHlwZTogU2VsZWN0VHlwZTtcbiAgQElucHV0KCkgcm93Q2xhc3M6IChyb3c6IFRhYmxlUm93PFQ+LCBpbmRleD86IG51bWJlcikgPT4gc3RyaW5nO1xuXG4gIEBWaWV3Q2hpbGQoQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LCB7c3RhdGljOiBmYWxzZX0pIHZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy50YWJsZS1ib2R5JykgcHJpdmF0ZSByZWFkb25seSB0YWJsZUJvZHlDbGFzcyA9IHRydWU7XG5cbiAgc2V0IGRhdGEoZGF0YTogVGFibGVSb3c8VD5bXSkge1xuICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICB9XG5cbiAgZ2V0IGRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cblxuICBkaWN0OiBJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT47XG5cbiAgZ3JpZFRlbXBsYXRlQ29sdW1uczogc3RyaW5nO1xuICBzZWxlY3RlZFJvd3M6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgbG9ja2VkOiBUYWJsZUNvbHVtbltdID0gW107XG4gIHVubG9ja2VkOiBUYWJsZUNvbHVtbltdID0gW107XG5cbiAgc2VsZWN0VHlwZUVudW0gPSBTZWxlY3RUeXBlO1xuXG4gIHByaXZhdGUgX2NvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgcHJpdmF0ZSBfYWxpdmUgPSB0cnVlO1xuICBwcml2YXRlIF9kYXRhOiBUYWJsZVJvdzxUPltdO1xuICBwcml2YXRlIF9oaWRkZW5Db2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIF9pbmRleDogbnVtYmVyO1xuXG4gIHNldCBjb2x1bW5zKGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pIHtcbiAgICB0aGlzLl9jb2x1bW5zID0gY29sdW1ucztcbiAgICB0aGlzLmxvY2tlZCA9IHRoaXMuX2NvbHVtbnM/LmZpbHRlcigoXykgPT4gXy5sb2NrZWQgPT09IHRydWUpO1xuICAgIHRoaXMudW5sb2NrZWQgPSB0aGlzLl9jb2x1bW5zPy5maWx0ZXIoKF8pID0+IF8ubG9ja2VkID09PSBmYWxzZSk7XG4gIH1cblxuICBnZXQgY29sdW1ucygpOiBUYWJsZUNvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3N2YzogVGFibGVTZXJ2aWNlPFQ+LCBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5fc3ZjLmNvbHVtbnMsIHRoaXMuX3N2Yy5oaWRkZW5Db2x1bW5zXSlcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWVzOiBbVGFibGVDb2x1bW5bXSwgc3RyaW5nW11dKSA9PiB7XG4gICAgICAgIGNvbnN0IFtjb2x1bW5zLCBoaWRkZW5Db2x1bW5zXSA9IHZhbHVlcztcbiAgICAgICAgdGhpcy5faGlkZGVuQ29sdW1ucyA9IGhpZGRlbkNvbHVtbnM7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IEFycmF5VXRpbC5mbGF0dGVuKGNvbHVtbnMsICdjb2x1bW5zJywgdHJ1ZSkuZmlsdGVyKFxuICAgICAgICAgIChfKSA9PiB0aGlzLl9oaWRkZW5Db2x1bW5zLmluZGV4T2YoXy5uYW1lKSA8IDBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5ncmlkVGVtcGxhdGVDb2x1bW5zID0gVGFibGVVdGlsLmdldEdyaWRUZW1wbGF0ZUNvbHVtbnMoXG4gICAgICAgICAgdGhpcy5jb2x1bW5zLnNvcnQoKGEsIGIpID0+IE51bWJlcihiLmxvY2tlZCkgLSBOdW1iZXIoYS5sb2NrZWQpKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX3N2Yy5kaXNwbGF5RGF0YS5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMuZGF0YSA9IF87XG4gICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuZGljdC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMuZGljdCA9IF87XG4gICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuc2Nyb2xsSW5kZXhcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZShhc3luYyAoXykgPT4ge1xuICAgICAgICAvLyBpZiAodGhpcy52aWV3cG9ydCAmJiB0aGlzLmRhdGFTb3VyY2UgJiYgXyAhPT0gbnVsbCkge1xuICAgICAgICAvLyAgIGF3YWl0IHRoaXMuZGF0YVNvdXJjZS5hZGFwdGVyLnJlbGF4KCk7XG4gICAgICAgIC8vICAgYXdhaXQgdGhpcy5kYXRhU291cmNlLmFkYXB0ZXIuZml4KHtcbiAgICAgICAgLy8gICAgIHNjcm9sbFBvc2l0aW9uOiAoXyArIDEpICogMjQsXG4gICAgICAgIC8vICAgfSk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgaWYgKHRoaXMudmlld3BvcnQpIHtcbiAgICAgICAgICB0aGlzLnZpZXdwb3J0LnNjcm9sbFRvSW5kZXgoXywgJ3Ntb290aCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fc3ZjLmFjdGl2ZVJvd1xuICAgICAgLnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChfKSA9PiB7XG4gICAgICAgIHRoaXMuYWN0aXZlUm93ID0gXztcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxuICBzZXRBY3RpdmVSb3cocm93OiBUYWJsZVJvdzxUPikge1xuICAgIHRoaXMuX3N2Yy5zZXRBY3RpdmVSb3cocm93KTtcbiAgfVxuXG4gIGdldERhdGEgPSAoaW5kZXgsIGNvdW50LCBzdWNjZXNzKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IFtdO1xuICAgIGlmICh0aGlzLmRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgaW5kZXgpO1xuICAgICAgY29uc3QgZW5kID0gTWF0aC5taW4oaW5kZXggKyBjb3VudCAtIDEsIHRoaXMuZGF0YS5sZW5ndGggLSAxKTtcbiAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xuICAgICAgICBkYXRhLnB1c2godGhpcy5kYXRhW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN1Y2Nlc3MoZGF0YSk7XG4gIH07XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9hbGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0QWdncmVnYXRlVmFsdWUoY29sdW1uOiBUYWJsZUNvbHVtbik6IG51bWJlciB7XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5zdW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN1bShjb2x1bW4ubmFtZSk7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUuYXZnKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdW0oY29sdW1uLm5hbWUpIC8gdGhpcy5kYXRhLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5taW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE1pbihjb2x1bW4ubmFtZSk7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUubWF4KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRNYXgoY29sdW1uLm5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldEFnZ3JlZ2F0ZVRleHQoY29sdW1uOiBUYWJsZUNvbHVtbik6IHN0cmluZyB7XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5zdW0pIHtcbiAgICAgIHJldHVybiAn0KHRg9C80LzQsD0nO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLmF2Zykge1xuICAgICAgcmV0dXJuICfQodGA0LXQtNC90LXQtT0nO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLm1pbikge1xuICAgICAgcmV0dXJuICfQnNC40L09JztcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5tYXgpIHtcbiAgICAgIHJldHVybiAn0JzQsNC60YE9JztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZ2V0U3BhbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmxvY2tlZD8ubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IHNwYW4gPSB0aGlzLmxvY2tlZC5sZW5ndGg7XG4gICAgICBpZiAodGhpcy5zZWxlY3RUeXBlICE9PSBTZWxlY3RUeXBlLm5vbmUpIHtcbiAgICAgICAgc3BhbiArPSAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGBzcGFuICR7c3Bhbn1gO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldFRlbXBsYXRlQ29sdW1ucygpIHtcbiAgICBsZXQgdGVtcGxhdGUgPSB0aGlzLmdyaWRUZW1wbGF0ZUNvbHVtbnM7XG4gICAgaWYgKHRoaXMuc2VsZWN0VHlwZSAhPT0gU2VsZWN0VHlwZS5ub25lKSB7XG4gICAgICB0ZW1wbGF0ZSA9IGA0OHB4ICR7dGVtcGxhdGV9YDtcbiAgICB9XG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9XG5cbiAgZ2V0TG9ja2VkR3JpZFRlbXBsYXRlQ29sdW1ucyhjb2x1bW5zOiBUYWJsZUNvbHVtbltdKSB7XG4gICAgbGV0IHRlbXBsYXRlID0gVGFibGVVdGlsLmdldEdyaWRUZW1wbGF0ZUNvbHVtbnMoY29sdW1ucyk7XG4gICAgaWYgKHRoaXMuc2VsZWN0VHlwZSAhPT0gU2VsZWN0VHlwZS5ub25lKSB7XG4gICAgICB0ZW1wbGF0ZSA9IGA0OHB4ICR7dGVtcGxhdGV9YDtcbiAgICB9XG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9XG5cbiAgdHJhY2tSb3coaW5kZXg6IG51bWJlciwgcm93OiBUYWJsZVJvdzxUPik6IGFueSB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgdHJhY2tDb2x1bW5zKGluZGV4OiBudW1iZXIsIGNvbHVtbjogVGFibGVDb2x1bW4pOiBhbnkge1xuICAgIHJldHVybiBjb2x1bW4ubmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3VtKGNvbHVtbk5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhPy5yZWR1Y2UoKGFjY3VtLCBjdXJyZW50KSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBwYXJzZUZsb2F0KGN1cnJlbnQuZGF0YVtjb2x1bW5OYW1lXSk7XG4gICAgICByZXR1cm4gYWNjdW0gKyAoaXNOYU4odmFsKSA/IDAgOiB2YWwpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNaW4oY29sdW1uTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmRhdGE/LnJlZHVjZShcbiAgICAgIChhY2N1bSwgY3VycmVudCkgPT5cbiAgICAgICAgYWNjdW0gIT0gbnVsbCAmJiBhY2N1bSA8PSBjdXJyZW50LmRhdGFbY29sdW1uTmFtZV1cbiAgICAgICAgICA/IGFjY3VtXG4gICAgICAgICAgOiBjdXJyZW50LmRhdGFbY29sdW1uTmFtZV0sXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWF4KGNvbHVtbk5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhPy5yZWR1Y2UoXG4gICAgICAoYWNjdW0sIGN1cnJlbnQpID0+XG4gICAgICAgIGFjY3VtICE9IG51bGwgJiYgYWNjdW0gPj0gY3VycmVudC5kYXRhW2NvbHVtbk5hbWVdXG4gICAgICAgICAgPyBhY2N1bVxuICAgICAgICAgIDogY3VycmVudC5kYXRhW2NvbHVtbk5hbWVdLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbn1cbiIsIjwhLS08ZGl2ICN2aWV3cG9ydCBjbGFzcz1cInRhYmxlLWJvZHktY29udGFpbmVyIHRhYmxlLWJvZHktY29udGFpbmVyLXZpcnR1YWxcIi0tPlxuPCEtLSAgICAgKm5nSWY9XCJ2aXJ0dWFsXCItLT5cbjwhLS0gICAgIFtzdHlsZS5ncmlkLXRlbXBsYXRlLWNvbHVtbnNdPVwiZ2V0VGVtcGxhdGVDb2x1bW5zKClcIi0tPlxuPCEtLSAgICAgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7XCI+LS0+XG48IS0tICA8bmctY29udGFpbmVyLS0+XG48IS0tICAgICp1aVNjcm9sbD1cImxldCByb3cgb2YgZGF0YVNvdXJjZTsgbGV0IHJvd0luZGV4ID0gaW5kZXg7IGxldCBsYXN0ID0gbGFzdDtcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7ZmxleC1ncm93OiAxXCI+LS0+XG48IS0tICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib2R5VGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4fVwiPjwvbmctY29udGFpbmVyPi0tPlxuPCEtLSAgPC9uZy1jb250YWluZXI+LS0+XG48IS0tICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWdncmVnYXRlXCI+LS0+XG48IS0tICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZ2dUZW1wbGF0ZTtcIj48L25nLWNvbnRhaW5lcj4tLT5cbjwhLS0gIDwvbmctY29udGFpbmVyPi0tPlxuPCEtLTwvZGl2Pi0tPlxuXG48Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0ICpuZ0lmPVwidmlydHVhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGFibGUtYm9keS1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbVNpemVdPVwiMjRcIj5cbiAgPG5nLWNvbnRhaW5lciAqY2RrVmlydHVhbEZvcj1cImxldCByb3cgb2YgZGF0YTt0ZW1wbGF0ZUNhY2hlU2l6ZTogMDsgbGV0IHJvd0luZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrUm93O1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib2R5VGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4fVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuXG5cbjxkaXYgKm5nSWY9XCIhdmlydHVhbFwiXG4gICAgIGNsYXNzPVwidGFibGUtYm9keS1jb250YWluZXJcIlxuICAgICBbc3R5bGUuZ3JpZC10ZW1wbGF0ZS1yb3dzXT1cInJvd0hlaWdodCArICdweCdcIlxuICAgICBbc3R5bGUuZ3JpZC1hdXRvLXJvd3NdPVwicm93SGVpZ2h0ICsgJ3B4J1wiXG4gICAgIFtzdHlsZS5ncmlkLXRlbXBsYXRlLWNvbHVtbnNdPVwiZ2V0VGVtcGxhdGVDb2x1bW5zKClcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93IG9mIGRhdGE7IGxldCByb3dJbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja1JvdztcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYm9keVRlbXBsYXRlOyBjb250ZXh0OiB7cm93OiByb3csIHJvd0luZGV4OiByb3dJbmRleH1cIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJhZ2dyZWdhdGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWdnVGVtcGxhdGU7XCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjYm9keVRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiPlxuICA8ZGl2IGNsYXNzPVwidGFibGUtcm93XCJcbiAgICAgICAoY2xpY2spPVwic2V0QWN0aXZlUm93KHJvdylcIlxuICAgICAgIFthdHRyLmRhdGEtcm93XT1cInJvd0luZGV4XCJcbiAgICAgICBbbmdDbGFzc109XCJyb3dDbGFzcyA/IHJvd0NsYXNzKHJvdywgcm93SW5kZXgpIDogJydcIlxuICAgICAgIFtjbGFzcy50YWJsZS1yb3dfdmlydHVhbF09XCJ2aXJ0dWFsXCJcbiAgICAgICBbc3R5bGUuZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXT1cInZpcnR1YWwgPyBnZXRUZW1wbGF0ZUNvbHVtbnMoKSA6ICcnXCJcbiAgICAgICBbY2xhc3MudGFibGUtcm93X2FjdGl2ZV09XCJyb3cgPT09IGFjdGl2ZVJvdyB8fCBzZWxlY3RlZFJvd3MuaW5kZXhPZihyb3cpID49IDBcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWdyb3VwaW5nXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcm93X2xvY2tlZFwiXG4gICAgICAgICAgICpuZ0lmPVwibG9ja2VkLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICBbc3R5bGUuZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXT1cImdldExvY2tlZEdyaWRUZW1wbGF0ZUNvbHVtbnMobG9ja2VkKVwiXG4gICAgICAgICAgIFtzdHlsZS56SW5kZXhdPVwicm93ID09PSBhY3RpdmVSb3cgPyAxIDogJ3Vuc2V0J1wiXG4gICAgICAgICAgIFtzdHlsZS5ncmlkLWNvbHVtbi1lbmRdPVwiZ2V0U3BhbigpXCI+XG4gICAgICAgIDx0ZXRhLXNlbGVjdGlvbi1jZWxsICpuZ0lmPVwic2VsZWN0VHlwZSAhPT0gc2VsZWN0VHlwZUVudW0ubm9uZSAmJiBsb2NrZWQubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIj48L3RldGEtc2VsZWN0aW9uLWNlbGw+XG4gICAgICAgIDx0ZXRhLWNlbGxcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGxvY2tlZDsgbGV0IGNvbEluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQ29sdW1ucztcIlxuICAgICAgICAgIFthdHRyLmRhdGEtcm93XT1cInJvd0luZGV4XCJcbiAgICAgICAgICBbYXR0ci5kYXRhLWNvbHVtbl09XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgIFtmaWx0ZXJPcHRpb25zXT1cImRpY3RbY29sdW1uLm5hbWVdXCJcbiAgICAgICAgICBbZGljdF09XCJkaWN0XCJcbiAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmNlbGxDbGFzc1wiXG4gICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXG4gICAgICAgID48L3RldGEtY2VsbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRldGEtc2VsZWN0aW9uLWNlbGwgKm5nSWY9XCJzZWxlY3RUeXBlICE9PSBzZWxlY3RUeXBlRW51bS5ub25lICYmIGxvY2tlZC5sZW5ndGggPCAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCI+PC90ZXRhLXNlbGVjdGlvbi1jZWxsPlxuICAgICAgPHRldGEtY2VsbFxuICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHVubG9ja2VkOyBsZXQgY29sSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tDb2x1bW5zO1wiXG4gICAgICAgIFthdHRyLmRhdGEtcm93XT1cInJvd0luZGV4XCJcbiAgICAgICAgW2F0dHIuZGF0YS1jb2x1bW5dPVwiY29sdW1uLm5hbWVcIlxuICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgIFtmaWx0ZXJPcHRpb25zXT1cImRpY3RbY29sdW1uLm5hbWVdXCJcbiAgICAgICAgW2RpY3RdPVwiZGljdFwiXG4gICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmNlbGxDbGFzc1wiXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxuICAgICAgPjwvdGV0YS1jZWxsPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cGluZ1wiPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYWdnVGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dcIlxuICAgICAgICpuZ0lmPVwiYWdncmVnYXRlXCJcbiAgICAgICBbY2xhc3MudGFibGUtcm93X3ZpcnR1YWxdPVwidmlydHVhbFwiXG4gICAgICAgW3N0eWxlLmdyaWQtdGVtcGxhdGUtY29sdW1uc109XCJ2aXJ0dWFsID8gZ2V0VGVtcGxhdGVDb2x1bW5zKCkgOiAnJ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dfbG9ja2VkXCJcbiAgICAgICAgICpuZ0lmPVwibG9ja2VkLmxlbmd0aCA+IDBcIlxuICAgICAgICAgW3N0eWxlLmdyaWQtdGVtcGxhdGUtY29sdW1uc109XCJnZXRMb2NrZWRHcmlkVGVtcGxhdGVDb2x1bW5zKGxvY2tlZClcIlxuICAgICAgICAgW3N0eWxlLmdyaWQtY29sdW1uLWVuZF09XCJnZXRTcGFuKClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjZWxsIGFsaWduLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgIDx0ZXRhLWljb24gW25hbWVdPVwiJ3N1bUNvbG9yJ1wiPjwvdGV0YS1pY29uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2VsbCBjZWxsLWNvbXBvbmVudCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCJcbiAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBsb2NrZWQ7IGxldCBjb2xJbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0NvbHVtbnM7XCJcbiAgICAgICAgICAgW2F0dHIuZGF0YS1jb2x1bW5dPVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2VsbENsYXNzXCJcbiAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNlbGwtdGV4dCBjZWxsLXRleHRfbnVtZXJpYyBmb250LXRpdGxlLTNcIj5cbiAgICAgICAgICB7e2dldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKX19OlxuICAgICAgICAgIHt7Z2V0QWdncmVnYXRlVmFsdWUoY29sdW1uKSB8IHRldGFOdW1iZXIgOiAyfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNlbGwgYWxpZ24tY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxuICAgICAgICAgKm5nSWY9XCJzZWxlY3RUeXBlICE9PSBzZWxlY3RUeXBlRW51bS5ub25lICYmIGxvY2tlZC5sZW5ndGggPCAxXCI+XG4gICAgICA8dGV0YS1pY29uIFtuYW1lXT1cIidzdW1Db2xvcidcIj48L3RldGEtaWNvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2VsbCBjZWxsLWNvbXBvbmVudCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCJcbiAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdW5sb2NrZWQ7IGxldCBjb2xJbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0NvbHVtbnM7XCJcbiAgICAgICAgIFthdHRyLmRhdGEtY29sdW1uXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5jZWxsQ2xhc3NcIlxuICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjZWxsLXRleHQgY2VsbC10ZXh0X251bWVyaWMgZm9udC10aXRsZS0zXCI+XG4gICAgICAgIHt7Z2V0QWdncmVnYXRlVGV4dChjb2x1bW4pfX1cbiAgICAgICAge3tnZXRBZ2dyZWdhdGVWYWx1ZShjb2x1bW4pIHwgdGV0YU51bWJlciA6IDJ9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsS0FBSyxFQUlMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQU12QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUcxRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7OztBQVFoRSxNQUFNLE9BQU8sa0JBQWtCO0lBa0Q3QixZQUFvQixJQUFxQixFQUFVLElBQXVCO1FBQXRELFNBQUksR0FBSixJQUFJLENBQWlCO1FBQVUsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFuQ3hCLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBYXhFLGlCQUFZLEdBQWtCLEVBQUUsQ0FBQztRQUNqQyxXQUFNLEdBQWtCLEVBQUUsQ0FBQztRQUMzQixhQUFRLEdBQWtCLEVBQUUsQ0FBQztRQUU3QixtQkFBYyxHQUFHLFVBQVUsQ0FBQztRQUVwQixhQUFRLEdBQWtCLEVBQUUs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SyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ2hELENBQUMsQ0FBQyxLQUFLO1lBQ1AsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQzlCLElBQUksQ0FDTCxDQUFDO0lBQ0osQ0FBQzs7K0dBcE5VLGtCQUFrQjttR0FBbEIsa0JBQWtCLGdkQWFsQix3QkFBd0IsZ0RDN0NyQyxzcUpBMEdBOzJGRDFFYSxrQkFBa0I7a0JBTjlCLFNBQVM7K0JBQ0UsaUJBQWlCLG1CQUdWLHVCQUF1QixDQUFDLE1BQU07bUlBR3RDLE9BQU87c0JBQWYsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVnRCxRQUFRO3NCQUE3RCxTQUFTO3VCQUFDLHdCQUF3QixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztnQkFFRixjQUFjO3NCQUEvRCxXQUFXO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBUeXBlLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUYWJsZVJvd30gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtcm93JztcbmltcG9ydCB7VGFibGVDb2x1bW59IGZyb20gJy4uL2NvbnRyYWN0L3RhYmxlLWNvbHVtbic7XG5pbXBvcnQge0dyb3VwUm93Q29tcG9uZW50QmFzZX0gZnJvbSAnLi4vYmFzZS9ncm91cC1yb3ctY29tcG9uZW50LWJhc2UnO1xuaW1wb3J0IHtUYWJsZVNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2UvdGFibGUuc2VydmljZSc7XG5pbXBvcnQge0RldGFpbENvbXBvbmVudEJhc2V9IGZyb20gJy4uL2Jhc2UvZGV0YWlsLWNvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7dGFrZVdoaWxlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1RhYmxlVXRpbH0gZnJvbSAnLi4vdXRpbC90YWJsZS11dGlsJztcbmltcG9ydCB7U2VsZWN0VHlwZX0gZnJvbSAnLi4vZW51bS9zZWxlY3QtdHlwZS5lbnVtJztcbmltcG9ydCB7Y29tYmluZUxhdGVzdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0FycmF5VXRpbH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3V0aWwvYXJyYXktdXRpbCc7XG5pbXBvcnQge0lEaWN0aW9uYXJ5fSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1kaWN0aW9uYXJ5JztcbmltcG9ydCB7SUlkTmFtZX0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2NvbnRyYWN0L2ktaWQtbmFtZSc7XG5pbXBvcnQge0FnZ3JlZ2F0aW9uVHlwZX0gZnJvbSAnLi4vZW51bS9hZ2dyZWdhdGlvbi10eXBlLmVudW0nO1xuaW1wb3J0IHtDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnR9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLXRhYmxlLWJvZHknLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtYm9keS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLWJvZHkuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQm9keUNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgdmlydHVhbDogYm9vbGVhbjtcbiAgQElucHV0KCkgYWN0aXZlUm93OiBUYWJsZVJvdzxUPjtcbiAgQElucHV0KCkgcm93SGVpZ2h0OiBudW1iZXI7XG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxDb21wb25lbnQ6IFR5cGU8RGV0YWlsQ29tcG9uZW50QmFzZTxUPj47XG4gIEBJbnB1dCgpIHRyZWU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGFnZ3JlZ2F0ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgZ3JvdXBpbmc6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGdyb3VwUm93Q29tcG9uZW50OiBUeXBlPEdyb3VwUm93Q29tcG9uZW50QmFzZTxUPj47XG4gIEBJbnB1dCgpIG9wZW5MZXZlbHM6IG51bWJlcjtcbiAgQElucHV0KCkgc2VsZWN0VHlwZTogU2VsZWN0VHlwZTtcbiAgQElucHV0KCkgcm93Q2xhc3M6IChyb3c6IFRhYmxlUm93PFQ+LCBpbmRleD86IG51bWJlcikgPT4gc3RyaW5nO1xuXG4gIEBWaWV3Q2hpbGQoQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LCB7c3RhdGljOiBmYWxzZX0pIHZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy50YWJsZS1ib2R5JykgcHJpdmF0ZSByZWFkb25seSB0YWJsZUJvZHlDbGFzcyA9IHRydWU7XG5cbiAgc2V0IGRhdGEoZGF0YTogVGFibGVSb3c8VD5bXSkge1xuICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICB9XG5cbiAgZ2V0IGRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cblxuICBkaWN0OiBJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT47XG5cbiAgZ3JpZFRlbXBsYXRlQ29sdW1uczogc3RyaW5nO1xuICBzZWxlY3RlZFJvd3M6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgbG9ja2VkOiBUYWJsZUNvbHVtbltdID0gW107XG4gIHVubG9ja2VkOiBUYWJsZUNvbHVtbltdID0gW107XG5cbiAgc2VsZWN0VHlwZUVudW0gPSBTZWxlY3RUeXBlO1xuXG4gIHByaXZhdGUgX2NvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgcHJpdmF0ZSBfYWxpdmUgPSB0cnVlO1xuICBwcml2YXRlIF9kYXRhOiBUYWJsZVJvdzxUPltdO1xuICBwcml2YXRlIF9oaWRkZW5Db2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIF9pbmRleDogbnVtYmVyO1xuXG4gIHNldCBjb2x1bW5zKGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pIHtcbiAgICB0aGlzLl9jb2x1bW5zID0gY29sdW1ucztcbiAgICB0aGlzLmxvY2tlZCA9IHRoaXMuX2NvbHVtbnM/LmZpbHRlcigoXykgPT4gXy5sb2NrZWQgPT09IHRydWUpO1xuICAgIHRoaXMudW5sb2NrZWQgPSB0aGlzLl9jb2x1bW5zPy5maWx0ZXIoKF8pID0+IF8ubG9ja2VkID09PSBmYWxzZSk7XG4gIH1cblxuICBnZXQgY29sdW1ucygpOiBUYWJsZUNvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3N2YzogVGFibGVTZXJ2aWNlPFQ+LCBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5fc3ZjLmNvbHVtbnMsIHRoaXMuX3N2Yy5oaWRkZW5Db2x1bW5zXSlcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWVzOiBbVGFibGVDb2x1bW5bXSwgc3RyaW5nW11dKSA9PiB7XG4gICAgICAgIGNvbnN0IFtjb2x1bW5zLCBoaWRkZW5Db2x1bW5zXSA9IHZhbHVlcztcbiAgICAgICAgdGhpcy5faGlkZGVuQ29sdW1ucyA9IGhpZGRlbkNvbHVtbnM7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IEFycmF5VXRpbC5mbGF0dGVuKGNvbHVtbnMsICdjb2x1bW5zJywgdHJ1ZSkuZmlsdGVyKFxuICAgICAgICAgIChfKSA9PiB0aGlzLl9oaWRkZW5Db2x1bW5zLmluZGV4T2YoXy5uYW1lKSA8IDBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5ncmlkVGVtcGxhdGVDb2x1bW5zID0gVGFibGVVdGlsLmdldEdyaWRUZW1wbGF0ZUNvbHVtbnMoXG4gICAgICAgICAgdGhpcy5jb2x1bW5zLnNvcnQoKGEsIGIpID0+IE51bWJlcihiLmxvY2tlZCkgLSBOdW1iZXIoYS5sb2NrZWQpKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX3N2Yy5kaXNwbGF5RGF0YS5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMuZGF0YSA9IF87XG4gICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuZGljdC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMuZGljdCA9IF87XG4gICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuc2Nyb2xsSW5kZXhcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZShhc3luYyAoXykgPT4ge1xuICAgICAgICAvLyBpZiAodGhpcy52aWV3cG9ydCAmJiB0aGlzLmRhdGFTb3VyY2UgJiYgXyAhPT0gbnVsbCkge1xuICAgICAgICAvLyAgIGF3YWl0IHRoaXMuZGF0YVNvdXJjZS5hZGFwdGVyLnJlbGF4KCk7XG4gICAgICAgIC8vICAgYXdhaXQgdGhpcy5kYXRhU291cmNlLmFkYXB0ZXIuZml4KHtcbiAgICAgICAgLy8gICAgIHNjcm9sbFBvc2l0aW9uOiAoXyArIDEpICogMjQsXG4gICAgICAgIC8vICAgfSk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgaWYgKHRoaXMudmlld3BvcnQpIHtcbiAgICAgICAgICB0aGlzLnZpZXdwb3J0LnNjcm9sbFRvSW5kZXgoXywgJ3Ntb290aCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fc3ZjLmFjdGl2ZVJvd1xuICAgICAgLnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChfKSA9PiB7XG4gICAgICAgIHRoaXMuYWN0aXZlUm93ID0gXztcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxuICBzZXRBY3RpdmVSb3cocm93OiBUYWJsZVJvdzxUPikge1xuICAgIHRoaXMuX3N2Yy5zZXRBY3RpdmVSb3cocm93KTtcbiAgfVxuXG4gIGdldERhdGEgPSAoaW5kZXgsIGNvdW50LCBzdWNjZXNzKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IFtdO1xuICAgIGlmICh0aGlzLmRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgaW5kZXgpO1xuICAgICAgY29uc3QgZW5kID0gTWF0aC5taW4oaW5kZXggKyBjb3VudCAtIDEsIHRoaXMuZGF0YS5sZW5ndGggLSAxKTtcbiAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xuICAgICAgICBkYXRhLnB1c2godGhpcy5kYXRhW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN1Y2Nlc3MoZGF0YSk7XG4gIH07XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9hbGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0QWdncmVnYXRlVmFsdWUoY29sdW1uOiBUYWJsZUNvbHVtbik6IG51bWJlciB7XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5zdW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN1bShjb2x1bW4ubmFtZSk7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUuYXZnKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdW0oY29sdW1uLm5hbWUpIC8gdGhpcy5kYXRhLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5taW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE1pbihjb2x1bW4ubmFtZSk7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUubWF4KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRNYXgoY29sdW1uLm5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldEFnZ3JlZ2F0ZVRleHQoY29sdW1uOiBUYWJsZUNvbHVtbik6IHN0cmluZyB7XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5zdW0pIHtcbiAgICAgIHJldHVybiAn0KHRg9C80LzQsD0nO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLmF2Zykge1xuICAgICAgcmV0dXJuICfQodGA0LXQtNC90LXQtT0nO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLm1pbikge1xuICAgICAgcmV0dXJuICfQnNC40L09JztcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5tYXgpIHtcbiAgICAgIHJldHVybiAn0JzQsNC60YE9JztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZ2V0U3BhbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmxvY2tlZD8ubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IHNwYW4gPSB0aGlzLmxvY2tlZC5sZW5ndGg7XG4gICAgICBpZiAodGhpcy5zZWxlY3RUeXBlICE9PSBTZWxlY3RUeXBlLm5vbmUpIHtcbiAgICAgICAgc3BhbiArPSAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGBzcGFuICR7c3Bhbn1gO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldFRlbXBsYXRlQ29sdW1ucygpIHtcbiAgICBsZXQgdGVtcGxhdGUgPSB0aGlzLmdyaWRUZW1wbGF0ZUNvbHVtbnM7XG4gICAgaWYgKHRoaXMuc2VsZWN0VHlwZSAhPT0gU2VsZWN0VHlwZS5ub25lKSB7XG4gICAgICB0ZW1wbGF0ZSA9IGA0OHB4ICR7dGVtcGxhdGV9YDtcbiAgICB9XG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9XG5cbiAgZ2V0TG9ja2VkR3JpZFRlbXBsYXRlQ29sdW1ucyhjb2x1bW5zOiBUYWJsZUNvbHVtbltdKSB7XG4gICAgbGV0IHRlbXBsYXRlID0gVGFibGVVdGlsLmdldEdyaWRUZW1wbGF0ZUNvbHVtbnMoY29sdW1ucyk7XG4gICAgaWYgKHRoaXMuc2VsZWN0VHlwZSAhPT0gU2VsZWN0VHlwZS5ub25lKSB7XG4gICAgICB0ZW1wbGF0ZSA9IGA0OHB4ICR7dGVtcGxhdGV9YDtcbiAgICB9XG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9XG5cbiAgdHJhY2tSb3coaW5kZXg6IG51bWJlciwgcm93OiBUYWJsZVJvdzxUPik6IGFueSB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgdHJhY2tDb2x1bW5zKGluZGV4OiBudW1iZXIsIGNvbHVtbjogVGFibGVDb2x1bW4pOiBhbnkge1xuICAgIHJldHVybiBjb2x1bW4ubmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3VtKGNvbHVtbk5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhPy5yZWR1Y2UoKGFjY3VtLCBjdXJyZW50KSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBwYXJzZUZsb2F0KGN1cnJlbnQuZGF0YVtjb2x1bW5OYW1lXSk7XG4gICAgICByZXR1cm4gYWNjdW0gKyAoaXNOYU4odmFsKSA/IDAgOiB2YWwpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNaW4oY29sdW1uTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmRhdGE/LnJlZHVjZShcbiAgICAgIChhY2N1bSwgY3VycmVudCkgPT5cbiAgICAgICAgYWNjdW0gIT0gbnVsbCAmJiBhY2N1bSA8PSBjdXJyZW50LmRhdGFbY29sdW1uTmFtZV1cbiAgICAgICAgICA/IGFjY3VtXG4gICAgICAgICAgOiBjdXJyZW50LmRhdGFbY29sdW1uTmFtZV0sXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWF4KGNvbHVtbk5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhPy5yZWR1Y2UoXG4gICAgICAoYWNjdW0sIGN1cnJlbnQpID0+XG4gICAgICAgIGFjY3VtICE9IG51bGwgJiYgYWNjdW0gPj0gY3VycmVudC5kYXRhW2NvbHVtbk5hbWVdXG4gICAgICAgICAgPyBhY2N1bVxuICAgICAgICAgIDogY3VycmVudC5kYXRhW2NvbHVtbk5hbWVdLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbn1cbiIsIjxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgKm5nSWY9XCJ2aXJ0dWFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWJsZS1ib2R5LWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtU2l6ZV09XCIyNFwiPlxuICA8bmctY29udGFpbmVyICpjZGtWaXJ0dWFsRm9yPVwibGV0IHJvdyBvZiBkYXRhO3RlbXBsYXRlQ2FjaGVTaXplOiAwOyBsZXQgcm93SW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tSb3c7XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvZHlUZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93LCByb3dJbmRleDogcm93SW5kZXh9XCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG48ZGl2ICpuZ0lmPVwiIXZpcnR1YWxcIlxuICAgICBjbGFzcz1cInRhYmxlLWJvZHktY29udGFpbmVyXCJcbiAgICAgW3N0eWxlLmdyaWQtdGVtcGxhdGUtcm93c109XCJyb3dIZWlnaHQgKyAncHgnXCJcbiAgICAgW3N0eWxlLmdyaWQtYXV0by1yb3dzXT1cInJvd0hlaWdodCArICdweCdcIlxuICAgICBbc3R5bGUuZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXT1cImdldFRlbXBsYXRlQ29sdW1ucygpXCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiBkYXRhOyBsZXQgcm93SW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tSb3c7XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvZHlUZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93LCByb3dJbmRleDogcm93SW5kZXh9XCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWdncmVnYXRlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFnZ1RlbXBsYXRlO1wiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2JvZHlUZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgPGRpdiBjbGFzcz1cInRhYmxlLXJvd1wiXG4gICAgICAgKGNsaWNrKT1cInNldEFjdGl2ZVJvdyhyb3cpXCJcbiAgICAgICBbYXR0ci5kYXRhLXJvd109XCJyb3dJbmRleFwiXG4gICAgICAgW25nQ2xhc3NdPVwicm93Q2xhc3MgPyByb3dDbGFzcyhyb3csIHJvd0luZGV4KSA6ICcnXCJcbiAgICAgICBbY2xhc3MudGFibGUtcm93X3ZpcnR1YWxdPVwidmlydHVhbFwiXG4gICAgICAgW3N0eWxlLmdyaWQtdGVtcGxhdGUtY29sdW1uc109XCJ2aXJ0dWFsID8gZ2V0VGVtcGxhdGVDb2x1bW5zKCkgOiAnJ1wiXG4gICAgICAgW2NsYXNzLnRhYmxlLXJvd19hY3RpdmVdPVwicm93ID09PSBhY3RpdmVSb3cgfHwgc2VsZWN0ZWRSb3dzLmluZGV4T2Yocm93KSA+PSAwXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFncm91cGluZ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJvd19sb2NrZWRcIlxuICAgICAgICAgICAqbmdJZj1cImxvY2tlZC5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgW3N0eWxlLmdyaWQtdGVtcGxhdGUtY29sdW1uc109XCJnZXRMb2NrZWRHcmlkVGVtcGxhdGVDb2x1bW5zKGxvY2tlZClcIlxuICAgICAgICAgICBbc3R5bGUuekluZGV4XT1cInJvdyA9PT0gYWN0aXZlUm93ID8gMSA6ICd1bnNldCdcIlxuICAgICAgICAgICBbc3R5bGUuZ3JpZC1jb2x1bW4tZW5kXT1cImdldFNwYW4oKVwiPlxuICAgICAgICA8dGV0YS1zZWxlY3Rpb24tY2VsbCAqbmdJZj1cInNlbGVjdFR5cGUgIT09IHNlbGVjdFR5cGVFbnVtLm5vbmUgJiYgbG9ja2VkLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCI+PC90ZXRhLXNlbGVjdGlvbi1jZWxsPlxuICAgICAgICA8dGV0YS1jZWxsXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBsb2NrZWQ7IGxldCBjb2xJbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0NvbHVtbnM7XCJcbiAgICAgICAgICBbYXR0ci5kYXRhLXJvd109XCJyb3dJbmRleFwiXG4gICAgICAgICAgW2F0dHIuZGF0YS1jb2x1bW5dPVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICBbZmlsdGVyT3B0aW9uc109XCJkaWN0W2NvbHVtbi5uYW1lXVwiXG4gICAgICAgICAgW2RpY3RdPVwiZGljdFwiXG4gICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5jZWxsQ2xhc3NcIlxuICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxuICAgICAgICA+PC90ZXRhLWNlbGw+XG4gICAgICA8L2Rpdj5cbiAgICAgIDx0ZXRhLXNlbGVjdGlvbi1jZWxsICpuZ0lmPVwic2VsZWN0VHlwZSAhPT0gc2VsZWN0VHlwZUVudW0ubm9uZSAmJiBsb2NrZWQubGVuZ3RoIDwgMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiPjwvdGV0YS1zZWxlY3Rpb24tY2VsbD5cbiAgICAgIDx0ZXRhLWNlbGxcbiAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiB1bmxvY2tlZDsgbGV0IGNvbEluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQ29sdW1ucztcIlxuICAgICAgICBbYXR0ci5kYXRhLXJvd109XCJyb3dJbmRleFwiXG4gICAgICAgIFthdHRyLmRhdGEtY29sdW1uXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICBbZmlsdGVyT3B0aW9uc109XCJkaWN0W2NvbHVtbi5uYW1lXVwiXG4gICAgICAgIFtkaWN0XT1cImRpY3RcIlxuICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5jZWxsQ2xhc3NcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcbiAgICAgID48L3RldGEtY2VsbD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBpbmdcIj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FnZ1RlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwidGFibGUtcm93XCJcbiAgICAgICAqbmdJZj1cImFnZ3JlZ2F0ZVwiXG4gICAgICAgW2NsYXNzLnRhYmxlLXJvd192aXJ0dWFsXT1cInZpcnR1YWxcIlxuICAgICAgIFtzdHlsZS5ncmlkLXRlbXBsYXRlLWNvbHVtbnNdPVwidmlydHVhbCA/IGdldFRlbXBsYXRlQ29sdW1ucygpIDogJydcIj5cbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtcm93X2xvY2tlZFwiXG4gICAgICAgICAqbmdJZj1cImxvY2tlZC5sZW5ndGggPiAwXCJcbiAgICAgICAgIFtzdHlsZS5ncmlkLXRlbXBsYXRlLWNvbHVtbnNdPVwiZ2V0TG9ja2VkR3JpZFRlbXBsYXRlQ29sdW1ucyhsb2NrZWQpXCJcbiAgICAgICAgIFtzdHlsZS5ncmlkLWNvbHVtbi1lbmRdPVwiZ2V0U3BhbigpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2VsbCBhbGlnbi1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxuICAgICAgICA8dGV0YS1pY29uIFtuYW1lXT1cIidzdW1Db2xvcidcIj48L3RldGEtaWNvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNlbGwgY2VsbC1jb21wb25lbnQganVzdGlmeS1jb250ZW50LWVuZFwiXG4gICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgbG9ja2VkOyBsZXQgY29sSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tDb2x1bW5zO1wiXG4gICAgICAgICAgIFthdHRyLmRhdGEtY29sdW1uXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmNlbGxDbGFzc1wiXG4gICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjZWxsLXRleHQgY2VsbC10ZXh0X251bWVyaWMgZm9udC10aXRsZS0zXCI+XG4gICAgICAgICAge3tnZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbil9fTpcbiAgICAgICAgICB7e2dldEFnZ3JlZ2F0ZVZhbHVlKGNvbHVtbikgfCB0ZXRhTnVtYmVyIDogMn19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjZWxsIGFsaWduLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcbiAgICAgICAgICpuZ0lmPVwic2VsZWN0VHlwZSAhPT0gc2VsZWN0VHlwZUVudW0ubm9uZSAmJiBsb2NrZWQubGVuZ3RoIDwgMVwiPlxuICAgICAgPHRldGEtaWNvbiBbbmFtZV09XCInc3VtQ29sb3InXCI+PC90ZXRhLWljb24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNlbGwgY2VsbC1jb21wb25lbnQganVzdGlmeS1jb250ZW50LWVuZFwiXG4gICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHVubG9ja2VkOyBsZXQgY29sSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tDb2x1bW5zO1wiXG4gICAgICAgICBbYXR0ci5kYXRhLWNvbHVtbl09XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2VsbENsYXNzXCJcbiAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY2VsbC10ZXh0IGNlbGwtdGV4dF9udW1lcmljIGZvbnQtdGl0bGUtM1wiPlxuICAgICAgICB7e2dldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKX19XG4gICAgICAgIHt7Z2V0QWdncmVnYXRlVmFsdWUoY29sdW1uKSB8IHRldGFOdW1iZXIgOiAyfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19