@tetacom/ng-components 1.0.42 → 1.0.43
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.
- package/component/filter/base/filter-component-base.d.ts +1 -2
- package/component/filter/boolean-filter/boolean-filter.component.d.ts +1 -2
- package/component/filter/date-filter/date-filter.component.d.ts +1 -2
- package/component/filter/filter-host/filter-host.component.d.ts +1 -2
- package/component/filter/list-filter/list-filter.component.d.ts +1 -2
- package/component/filter/numeric-filter/numeric-filter.component.d.ts +1 -2
- package/component/filter/string-filter/string-filter.component.d.ts +1 -2
- package/component/table/base/cell-component-base.d.ts +1 -2
- package/component/table/base/detail-component-base.d.ts +1 -2
- package/component/table/base/head-cell-component-base.d.ts +2 -2
- package/component/table/cell/cell.component.d.ts +1 -2
- package/component/table/cell-host/cell-host.component.d.ts +1 -2
- package/component/table/contract/i-cell-instance.d.ts +1 -2
- package/component/table/contract/public-api.d.ts +0 -1
- package/component/table/contract/table-column.d.ts +0 -16
- package/component/table/default/boolean-cell/boolean-cell.component.d.ts +1 -2
- package/component/table/default/date-cell/date-cell.component.d.ts +1 -2
- package/component/table/default/date-time-cell/date-time-cell.component.d.ts +1 -2
- package/component/table/default/default-head-cell/default-head-cell.component.d.ts +6 -4
- package/component/table/default/list-cell/list-cell.component.d.ts +1 -2
- package/component/table/default/numeric-cell/numeric-cell.component.d.ts +1 -2
- package/component/table/default/string-cell/string-cell.component.d.ts +1 -2
- package/component/table/head-cell/head-cell.component.d.ts +1 -2
- package/component/table/head-cell-dropdown/head-cell-dropdown.component.d.ts +1 -2
- package/component/table/head-cell-host/head-cell-host.component.d.ts +6 -4
- package/component/table/public-api.d.ts +0 -1
- package/component/table/selection-cell/selection-cell.component.d.ts +2 -3
- package/component/table/service/table.service.d.ts +13 -17
- package/component/table/table/table.component.d.ts +12 -18
- package/component/table/table-body/table-body.component.d.ts +11 -17
- package/component/table/table-head/filter-dropdown-tab/filter-dropdown-tab.component.d.ts +1 -2
- package/component/table/table-head/main-dropdown-tab/main-dropdown-tab.component.d.ts +1 -2
- package/component/table/table-head/table-head.component.d.ts +1 -2
- package/component/table/table-head/visibility-dropdown-tab/visibility-dropdown-tab.component.d.ts +1 -2
- package/component/table/table-head-group/table-head-group.component.d.ts +1 -2
- package/component/table/table.module.d.ts +31 -32
- package/esm2020/common/util/array-util.mjs +2 -2
- package/esm2020/component/filter/base/filter-component-base.mjs +1 -1
- package/esm2020/component/filter/boolean-filter/boolean-filter.component.mjs +1 -1
- package/esm2020/component/filter/date-filter/date-filter.component.mjs +1 -1
- package/esm2020/component/filter/filter-host/filter-host.component.mjs +1 -1
- package/esm2020/component/filter/list-filter/list-filter.component.mjs +1 -1
- package/esm2020/component/filter/numeric-filter/numeric-filter.component.mjs +1 -1
- package/esm2020/component/filter/string-filter/string-filter.component.mjs +1 -1
- package/esm2020/component/select/select/select.component.mjs +2 -2
- package/esm2020/component/table/base/cell-component-base.mjs +2 -2
- package/esm2020/component/table/base/detail-component-base.mjs +1 -1
- package/esm2020/component/table/base/head-cell-component-base.mjs +1 -1
- package/esm2020/component/table/cell/cell.component.mjs +1 -1
- package/esm2020/component/table/cell-host/cell-host.component.mjs +1 -1
- package/esm2020/component/table/contract/i-cell-instance.mjs +1 -1
- package/esm2020/component/table/contract/public-api.mjs +1 -2
- package/esm2020/component/table/contract/table-column.mjs +1 -8
- package/esm2020/component/table/default/boolean-cell/boolean-cell.component.mjs +3 -3
- package/esm2020/component/table/default/date-cell/date-cell.component.mjs +4 -4
- package/esm2020/component/table/default/date-time-cell/date-time-cell.component.mjs +4 -4
- package/esm2020/component/table/default/default-head-cell/default-head-cell.component.mjs +11 -2
- package/esm2020/component/table/default/list-cell/list-cell.component.mjs +6 -6
- package/esm2020/component/table/default/numeric-cell/numeric-cell.component.mjs +3 -3
- package/esm2020/component/table/default/string-cell/string-cell.component.mjs +3 -3
- package/esm2020/component/table/head-cell/head-cell.component.mjs +3 -3
- package/esm2020/component/table/head-cell-dropdown/head-cell-dropdown.component.mjs +1 -1
- package/esm2020/component/table/head-cell-host/head-cell-host.component.mjs +14 -2
- package/esm2020/component/table/public-api.mjs +1 -2
- package/esm2020/component/table/selection-cell/selection-cell.component.mjs +1 -1
- package/esm2020/component/table/service/table.service.mjs +10 -12
- package/esm2020/component/table/table/table.component.mjs +18 -15
- package/esm2020/component/table/table-body/table-body.component.mjs +32 -35
- package/esm2020/component/table/table-head/filter-dropdown-tab/filter-dropdown-tab.component.mjs +1 -1
- package/esm2020/component/table/table-head/main-dropdown-tab/main-dropdown-tab.component.mjs +1 -1
- package/esm2020/component/table/table-head/table-head.component.mjs +1 -1
- package/esm2020/component/table/table-head/visibility-dropdown-tab/visibility-dropdown-tab.component.mjs +1 -1
- package/esm2020/component/table/table-head-group/table-head-group.component.mjs +1 -1
- package/esm2020/component/table/table.module.mjs +1 -6
- package/esm2020/directive/scroll-into-view/scroll-into-view.directive.mjs +2 -2
- package/fesm2015/tetacom-ng-components.mjs +112 -159
- package/fesm2015/tetacom-ng-components.mjs.map +1 -1
- package/fesm2020/tetacom-ng-components.mjs +106 -156
- package/fesm2020/tetacom-ng-components.mjs.map +1 -1
- package/package.json +1 -1
- package/style/switch.scss +1 -2
- package/component/table/base/group-row-component-base.d.ts +0 -12
- package/component/table/contract/table-row.d.ts +0 -17
- package/component/table/default/group-row/group-row.component.d.ts +0 -13
- package/esm2020/component/table/base/group-row-component-base.mjs +0 -3
- package/esm2020/component/table/contract/table-row.mjs +0 -40
- package/esm2020/component/table/default/group-row/group-row.component.mjs +0 -20
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, HostListener, Input, Output, ViewChild, } from '@angular/core';
|
|
2
2
|
import { TableService } from '../service/table.service';
|
|
3
|
-
import { GroupRowComponent } from '../default/group-row/group-row.component';
|
|
4
3
|
import { filter, takeWhile } from 'rxjs/operators';
|
|
5
4
|
import { EditType } from '../enum/edit-type.enum';
|
|
6
5
|
import { EditEvent } from '../enum/edit-event.enum';
|
|
@@ -18,8 +17,12 @@ export class TableComponent {
|
|
|
18
17
|
this.data = [];
|
|
19
18
|
this.columns = [];
|
|
20
19
|
this.selectType = SelectType.mouse;
|
|
21
|
-
this.
|
|
22
|
-
|
|
20
|
+
this.trackRow = (index, row) => {
|
|
21
|
+
if (row['id']) {
|
|
22
|
+
return row['id'];
|
|
23
|
+
}
|
|
24
|
+
return index;
|
|
25
|
+
};
|
|
23
26
|
this.editType = EditType.cell;
|
|
24
27
|
this.editEvent = EditEvent.doubleClick;
|
|
25
28
|
this.showHeadCellMenu = true;
|
|
@@ -268,7 +271,9 @@ export class TableComponent {
|
|
|
268
271
|
}
|
|
269
272
|
if (changes.hasOwnProperty('data')) {
|
|
270
273
|
this._svc.setData(this.data);
|
|
271
|
-
this._svc.selectRows(
|
|
274
|
+
this._svc.selectRows(this.data?.filter((row) => {
|
|
275
|
+
return this.selectedRows?.some((selectedRow) => this.trackRow(this._svc.getRowIndex(selectedRow), selectedRow) === this.trackRow(this._svc.getRowIndex(row), row));
|
|
276
|
+
}));
|
|
272
277
|
}
|
|
273
278
|
if (changes.hasOwnProperty('dict')) {
|
|
274
279
|
this._svc.setDict(this.dict);
|
|
@@ -313,6 +318,9 @@ export class TableComponent {
|
|
|
313
318
|
return row && this._elementRef.nativeElement.contains(row);
|
|
314
319
|
}
|
|
315
320
|
getCoordinates(event) {
|
|
321
|
+
if (event.composedPath().indexOf(this._elementRef.nativeElement) < 0) {
|
|
322
|
+
return null;
|
|
323
|
+
}
|
|
316
324
|
const cell = this.getEventCell(event);
|
|
317
325
|
if (cell) {
|
|
318
326
|
const rowIndex = parseInt(cell.getAttribute('data-row'), 10);
|
|
@@ -328,6 +336,9 @@ export class TableComponent {
|
|
|
328
336
|
return null;
|
|
329
337
|
}
|
|
330
338
|
getRow(event) {
|
|
339
|
+
if (event.composedPath().indexOf(this._elementRef.nativeElement) < 0) {
|
|
340
|
+
return null;
|
|
341
|
+
}
|
|
331
342
|
const rowElement = this.getEventRow(event);
|
|
332
343
|
if (rowElement) {
|
|
333
344
|
const rowIndex = parseInt(rowElement.getAttribute('data-row'), 10);
|
|
@@ -339,10 +350,10 @@ export class TableComponent {
|
|
|
339
350
|
}
|
|
340
351
|
}
|
|
341
352
|
TableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: TableComponent, deps: [{ token: i1.TableService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
342
|
-
TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: TableComponent, selector: "teta-table", inputs: { data: "data", columns: "columns", dict: "dict", filterOptions: "filterOptions", state: "state", cookieName: "cookieName", virtual: "virtual", detailComponent: "detailComponent", activeRow: "activeRow", selectedRows: "selectedRows", selectType: "selectType", aggregate: "aggregate",
|
|
353
|
+
TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: TableComponent, selector: "teta-table", inputs: { data: "data", columns: "columns", dict: "dict", filterOptions: "filterOptions", state: "state", cookieName: "cookieName", virtual: "virtual", detailComponent: "detailComponent", activeRow: "activeRow", selectedRows: "selectedRows", selectType: "selectType", aggregate: "aggregate", trackRow: "trackRow", editType: "editType", editEvent: "editEvent", rowEditable: "rowEditable", rowClass: "rowClass", scrollToIndex: "scrollToIndex", showHeadCellMenu: "showHeadCellMenu", contextMenu: "contextMenu", contextMenuOpen: "contextMenuOpen" }, outputs: { contextMenuOpenChange: "contextMenuOpenChange", stateChange: "stateChange", bodyLeft: "bodyLeft", activeRowChange: "activeRowChange", selectedRowsChange: "selectedRowsChange", cellClick: "cellClick", cellDoubleClick: "cellDoubleClick", cellFocus: "cellFocus", cellKeyDown: "cellKeyDown", rowLeft: "rowLeft", rowEditStart: "rowEditStart", rowEditEnd: "rowEditEnd", cellEditStart: "cellEditStart", cellEditEnd: "cellEditEnd", valueChange: "valueChange", tableService: "tableService" }, host: { listeners: { "document:click": "handleClickOutsideAnyRow($event)", "focusin": "focusIn($event)", "dblclick": "dblclick($event)", "keydown": "keydown($event)", "mousedown": "mousedown($event)" }, properties: { "class.table": "this.tableClass" } }, providers: [TableService], viewQueries: [{ propertyName: "menu", first: true, predicate: ["contextMenu"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"column column_auto\">\n <teta-table-head\n [selectType]=\"selectType\"\n [showHeadCellMenu]=\"showHeadCellMenu\"></teta-table-head>\n <div class=\"column column_auto position-relative\">\n <teta-table-body\n [tetaContextMenu]=\"contextMenu\"\n [open]=\"contextMenuOpen\"\n (openChange)=\"setContextMenuOpen($event)\"\n [aggregate]=\"aggregate\"\n [virtual]=\"virtual\"\n [activeRow]=\"activeRow\"\n [selectedRows]=\"selectedRowsList\"\n [additionalComponent]=\"detailComponent\"\n [selectType]=\"selectType\"\n [rowClass]=\"rowClass\"></teta-table-body>\n <div class=\"column column_auto\"\n style=\"position: absolute; top:0; bottom:0;left:0;right:0;\"\n *ngIf=\"!data?.length\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ContextMenuDirective, selector: "[tetaContextMenu]", inputs: ["tetaContextMenu", "autoCloseIgnore"] }, { kind: "component", type: i4.TableHeadComponent, selector: "teta-table-head", inputs: ["selectType", "showHeadCellMenu"] }, { kind: "component", type: i5.TableBodyComponent, selector: "teta-table-body", inputs: ["virtual", "activeRow", "selectedRows", "additionalComponent", "aggregate", "selectType", "rowClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
343
354
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: TableComponent, decorators: [{
|
|
344
355
|
type: Component,
|
|
345
|
-
args: [{ selector: 'teta-table', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableService], template: "<div class=\"column column_auto\">\n <teta-table-head\n [selectType]=\"selectType\"\n [showHeadCellMenu]=\"showHeadCellMenu\"></teta-table-head>\n <div class=\"column column_auto position-relative\">\n <teta-table-body\n [tetaContextMenu]=\"contextMenu\"\n [open]=\"contextMenuOpen\"\n (openChange)=\"setContextMenuOpen($event)\"\n [aggregate]=\"aggregate\"\n [virtual]=\"virtual\"\n [activeRow]=\"activeRow\"\n [selectedRows]=\"selectedRowsList\"\n [additionalComponent]=\"detailComponent\"\n [
|
|
356
|
+
args: [{ selector: 'teta-table', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableService], template: "<div class=\"column column_auto\">\n <teta-table-head\n [selectType]=\"selectType\"\n [showHeadCellMenu]=\"showHeadCellMenu\"></teta-table-head>\n <div class=\"column column_auto position-relative\">\n <teta-table-body\n [tetaContextMenu]=\"contextMenu\"\n [open]=\"contextMenuOpen\"\n (openChange)=\"setContextMenuOpen($event)\"\n [aggregate]=\"aggregate\"\n [virtual]=\"virtual\"\n [activeRow]=\"activeRow\"\n [selectedRows]=\"selectedRowsList\"\n [additionalComponent]=\"detailComponent\"\n [selectType]=\"selectType\"\n [rowClass]=\"rowClass\"></teta-table-body>\n <div class=\"column column_auto\"\n style=\"position: absolute; top:0; bottom:0;left:0;right:0;\"\n *ngIf=\"!data?.length\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n" }]
|
|
346
357
|
}], ctorParameters: function () { return [{ type: i1.TableService }, { type: i0.ElementRef }]; }, propDecorators: { data: [{
|
|
347
358
|
type: Input
|
|
348
359
|
}], columns: [{
|
|
@@ -367,14 +378,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImpor
|
|
|
367
378
|
type: Input
|
|
368
379
|
}], aggregate: [{
|
|
369
380
|
type: Input
|
|
370
|
-
}], grouping: [{
|
|
371
|
-
type: Input
|
|
372
|
-
}], groupRowComponent: [{
|
|
373
|
-
type: Input
|
|
374
|
-
}], openLevels: [{
|
|
375
|
-
type: Input
|
|
376
|
-
}], tree: [{
|
|
377
|
-
type: Input
|
|
378
381
|
}], trackRow: [{
|
|
379
382
|
type: Input
|
|
380
383
|
}], editType: [{
|
|
@@ -447,4 +450,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImpor
|
|
|
447
450
|
type: HostListener,
|
|
448
451
|
args: ['mousedown', ['$event']]
|
|
449
452
|
}] } });
|
|
450
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC90YWJsZS90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBSU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQU90RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDbEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7O0FBWXBELE1BQU0sT0FBTyxjQUFjO0lBa0V6QixZQUFvQixJQUFxQixFQUFVLFdBQXVCO1FBQXRELFNBQUksR0FBSixJQUFJLENBQWlCO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFoRWpFLFNBQUksR0FBUSxFQUFFLENBQUM7UUFDZixZQUFPLEdBQWtCLEVBQUUsQ0FBQztRQWM1QixlQUFVLEdBQWUsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUcxQyxzQkFBaUIsR0FDeEIsaUJBQWlCLENBQUM7UUFHWCxhQUFRLEdBQTZDLENBQUMsS0FBYSxFQUFFLEdBQWdCLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQztRQUNoRyxh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YXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZSxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VGFibGVSb3d9IGZyb20gJy4uL2NvbnRyYWN0L3RhYmxlLXJvdyc7XG5pbXBvcnQge1RhYmxlU2VydmljZX0gZnJvbSAnLi4vc2VydmljZS90YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7VGFibGVDb2x1bW59IGZyb20gJy4uL2NvbnRyYWN0L3RhYmxlLWNvbHVtbic7XG5pbXBvcnQge0ZpbHRlclN0YXRlfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3QvZmlsdGVyLXN0YXRlJztcbmltcG9ydCB7RGV0YWlsQ29tcG9uZW50QmFzZX0gZnJvbSAnLi4vYmFzZS9kZXRhaWwtY29tcG9uZW50LWJhc2UnO1xuaW1wb3J0IHtJQ2VsbEV2ZW50fSBmcm9tICcuLi9jb250cmFjdC9pLWNlbGwtZXZlbnQnO1xuaW1wb3J0IHtJQ2VsbENvb3JkaW5hdGVzfSBmcm9tICcuLi9jb250cmFjdC9pLWNlbGwtY29vcmRpbmF0ZXMnO1xuaW1wb3J0IHtHcm91cFJvd0NvbXBvbmVudEJhc2V9IGZyb20gJy4uL2Jhc2UvZ3JvdXAtcm93LWNvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7R3JvdXBSb3dDb21wb25lbnR9IGZyb20gJy4uL2RlZmF1bHQvZ3JvdXAtcm93L2dyb3VwLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHtmaWx0ZXIsIHRha2VXaGlsZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtFZGl0VHlwZX0gZnJvbSAnLi4vZW51bS9lZGl0LXR5cGUuZW51bSc7XG5pbXBvcnQge0VkaXRFdmVudH0gZnJvbSAnLi4vZW51bS9lZGl0LWV2ZW50LmVudW0nO1xuaW1wb3J0IHtTZWxlY3RUeXBlfSBmcm9tICcuLi9lbnVtL3NlbGVjdC10eXBlLmVudW0nO1xuaW1wb3J0IHtJSWROYW1lfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1pZC1uYW1lJztcbmltcG9ydCB7SURpY3Rpb25hcnl9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWRpY3Rpb25hcnknO1xuaW1wb3J0IHtJQ2VsbEluc3RhbmNlLCBJQ2VsbEluc3RhbmNlRXZlbnR9IGZyb20gJy4uL2NvbnRyYWN0L2ktY2VsbC1pbnN0YW5jZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbVGFibGVTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VD5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgZGF0YTogVFtdID0gW107XG4gIEBJbnB1dCgpIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgQElucHV0KCkgZGljdDogSURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+O1xuICBASW5wdXQoKSBmaWx0ZXJPcHRpb25zOiBJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT47XG5cbiAgQElucHV0KClcbiAgc2V0IHN0YXRlKHN0YXRlOiBGaWx0ZXJTdGF0ZSkge1xuICAgIHRoaXMuX3N0YXRlID0gc3RhdGU7XG4gIH1cblxuICBASW5wdXQoKSBjb29raWVOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHZpcnR1YWw6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRldGFpbENvbXBvbmVudDogVHlwZTxEZXRhaWxDb21wb25lbnRCYXNlPFQ+PjtcbiAgQElucHV0KCkgYWN0aXZlUm93OiBUYWJsZVJvdzxUPjtcbiAgQElucHV0KCkgc2VsZWN0ZWRSb3dzOiBUYWJsZVJvdzxUPltdO1xuICBASW5wdXQoKSBzZWxlY3RUeXBlOiBTZWxlY3RUeXBlID0gU2VsZWN0VHlwZS5tb3VzZTtcbiAgQElucHV0KCkgYWdncmVnYXRlOiBib29sZWFuO1xuICBASW5wdXQoKSBncm91cGluZzogYm9vbGVhbjtcbiAgQElucHV0KCkgZ3JvdXBSb3dDb21wb25lbnQ6IFR5cGU8R3JvdXBSb3dDb21wb25lbnRCYXNlPFQ+PiA9XG4gICAgR3JvdXBSb3dDb21wb25lbnQ7XG4gIEBJbnB1dCgpIG9wZW5MZXZlbHM6IG51bWJlcjtcbiAgQElucHV0KCkgdHJlZTogYm9vbGVhbjtcbiAgQElucHV0KCkgdHJhY2tSb3c6IChpbmRleDogbnVtYmVyLCByb3c6IFRhYmxlUm93PFQ+KSA9PiBhbnkgPSAoaW5kZXg6IG51bWJlciwgcm93OiBUYWJsZVJvdzxUPikgPT4gaW5kZXg7XG4gIEBJbnB1dCgpIGVkaXRUeXBlOiBFZGl0VHlwZSA9IEVkaXRUeXBlLmNlbGw7XG4gIEBJbnB1dCgpIGVkaXRFdmVudDogRWRpdEV2ZW50ID0gRWRpdEV2ZW50LmRvdWJsZUNsaWNrO1xuICBASW5wdXQoKSByb3dFZGl0YWJsZTogYm9vbGVhbiB8ICgocm93OiBUYWJsZVJvdzxUPikgPT4gYm9vbGVhbik7XG4gIEBJbnB1dCgpIHJvd0NsYXNzOiAocm93OiBUYWJsZVJvdzxUPiwgaW5kZXg/OiBudW1iZXIpID0+IHN0cmluZztcblxuICBASW5wdXQoKSBzZXQgc2Nyb2xsVG9JbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3ZjLnNjcm9sbFRvSW5kZXgoaW5kZXgpO1xuICB9XG5cbiAgQElucHV0KCkgc2hvd0hlYWRDZWxsTWVudSA9IHRydWU7XG4gIEBJbnB1dCgpIGNvbnRleHRNZW51OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBjb250ZXh0TWVudU9wZW46IGJvb2xlYW47XG4gIEBPdXRwdXQoKSBjb250ZXh0TWVudU9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHN0YXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RmlsdGVyU3RhdGU+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJTdGF0ZT4oKTtcbiAgQE91dHB1dCgpIGJvZHlMZWZ0ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVJvdzxUPj4oKTtcbiAgQE91dHB1dCgpIGFjdGl2ZVJvd0NoYW5nZTogRXZlbnRFbWl0dGVyPFRhYmxlUm93PFQ+PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNlbGVjdGVkUm93c0NoYW5nZTogRXZlbnRFbWl0dGVyPFRhYmxlUm93PFQ+W10+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjZWxsQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2VFdmVudDxUPj4oKTtcbiAgQE91dHB1dCgpIGNlbGxEb3VibGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZUV2ZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgY2VsbEZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2VsbEluc3RhbmNlRXZlbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBjZWxsS2V5RG93biA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZUV2ZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgcm93TGVmdCA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVSb3c8VD4+KCk7XG4gIEBPdXRwdXQoKSByb3dFZGl0U3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2U8VD4+KCk7XG4gIEBPdXRwdXQoKSByb3dFZGl0RW5kID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVJvdzxUPj4oKTtcbiAgQE91dHB1dCgpIGNlbGxFZGl0U3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2U8VD4+KCk7XG4gIEBPdXRwdXQoKSBjZWxsRWRpdEVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZTxUPj4oKTtcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2VsbEluc3RhbmNlPFQ+PigpO1xuICBAT3V0cHV0KCkgdGFibGVTZXJ2aWNlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVNlcnZpY2U8VD4+KCk7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRleHRNZW51Jywge3N0YXRpYzogdHJ1ZX0pIG1lbnU6IEVsZW1lbnRSZWY7XG4gIEBIb3N0QmluZGluZygnY2xhc3MudGFibGUnKSBwcml2YXRlIHJlYWRvbmx5IHRhYmxlQ2xhc3MgPSB0cnVlO1xuXG4gIHNlbGVjdGVkUm93c0xpc3Q6IFRhYmxlUm93PFQ+W107XG5cbiAgcHJpdmF0ZSBfYWxpdmUgPSB0cnVlO1xuICBwcml2YXRlIF9ib2R5RWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX2hlYWRFbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfc3RhdGU6IEZpbHRlclN0YXRlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3N2YzogVGFibGVTZXJ2aWNlPFQ+LCBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgdGhpcy5fc3ZjLnN0YXRlXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSksXG4gICAgICAgIGZpbHRlcigoc3RhdGUpID0+IHN0YXRlICE9PSB0aGlzLl9zdGF0ZSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHN0YXRlOiBGaWx0ZXJTdGF0ZSkgPT4gdGhpcy5zdGF0ZUNoYW5nZS5uZXh0KHN0YXRlKSk7XG5cbiAgICB0aGlzLl9zdmMuZWRpdENlbGxTdGFydFxuICAgICAgLnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChpdGVtOiBJQ2VsbEV2ZW50KSA9PiB0aGlzLmNlbGxFZGl0U3RhcnQuZW1pdCh0aGlzLl9zdmMuZ2V0Q2VsbEluc3RhbmNlKGl0ZW0pKSk7XG5cbiAgICB0aGlzLl9zdmMuZWRpdENlbGxTdG9wXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW06IElDZWxsQ29vcmRpbmF0ZXMpID0+IHRoaXMuY2VsbEVkaXRFbmQuZW1pdCh0aGlzLl9zdmMuZ2V0Q2VsbEluc3RhbmNlKGl0ZW0pKSk7XG5cbiAgICB0aGlzLl9zdmMuZWRpdFJvd1N0YXJ0XG4gICAgICAucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW06IElDZWxsRXZlbnQpID0+XG4gICAgICAgIHRoaXMucm93RWRpdFN0YXJ0LmVtaXQodGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShpdGVtKSlcbiAgICAgICk7XG5cbiAgICB0aGlzLl9zdmMuZWRpdFJvd1N0b3BcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoaXRlbTogSUNlbGxDb29yZGluYXRlcykgPT5cbiAgICAgICAgdGhpcy5yb3dFZGl0RW5kLmVtaXQodGhpcy5fc3ZjLmdldFJvd0J5SW5kZXgoaXRlbT8ucm93KSlcbiAgICAgICk7XG5cbiAgICB0aGlzLl9zdmMuc2VsZWN0ZWRSb3dzXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW1zOiBUYWJsZVJvdzxUPltdKSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzTGlzdCA9IGl0ZW1zO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5lbWl0KGl0ZW1zKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fc3ZjLmFjdGl2ZVJvd1xuICAgICAgLnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChpdGVtOiBUYWJsZVJvdzxUPikgPT4gdGhpcy5hY3RpdmVSb3dDaGFuZ2UuZW1pdChpdGVtKSk7XG5cbiAgICB0aGlzLl9zdmMudmFsdWVDaGFuZ2VkXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGNvb3JkaW5hdGVzOiBJQ2VsbENvb3JkaW5hdGVzKSA9PiB7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLl9zdmMuZ2V0Q2VsbEluc3RhbmNlKGNvb3JkaW5hdGVzKSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSkgaGFuZGxlQ2xpY2tPdXRzaWRlQW55Um93KFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50XG4gICkge1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gdGhpcy5nZXRDb29yZGluYXRlcyhldmVudCk7XG4gICAgaWYgKGNvb3JkaW5hdGVzKSB7XG4gICAgICB0aGlzLmNlbGxDbGljay5lbWl0KHtcbiAgICAgICAgLi4udGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShjb29yZGluYXRlcyksXG4gICAgICAgIGV2ZW50XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmVkaXRFdmVudCA9PT0gRWRpdEV2ZW50LmNsaWNrKSB7XG4gICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLl9zdmMuY3VycmVudEVkaXRDZWxsICYmIChjb29yZGluYXRlcy5yb3cgIT09IHRoaXMuX3N2Yy5jdXJyZW50RWRpdENlbGwucm93IHx8IGNvb3JkaW5hdGVzLmNvbHVtbiAhPT0gdGhpcy5fc3ZjLmN1cnJlbnRFZGl0Q2VsbC5jb2x1bW4pKSB7XG4gICAgICAgICAgdGhpcy5zdGFydEVkaXRSb3dPckNlbGwobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgcm93ID0gdGhpcy5nZXRSb3coZXZlbnQpO1xuICAgIGlmIChyb3cpIHtcbiAgICAgIGlmIChldmVudC5jdHJsS2V5KSB7XG4gICAgICAgIHRoaXMuX3N2Yy5zZWxlY3RPckRlc2VsZWN0Um93KHJvdyk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgIHRoaXMuX3N2Yy5zZWxlY3RSYW5nZShyb3cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc3ZjLnNlbGVjdFJvd3MoW3Jvd10pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMuZXZlbnRJc09uUm93KGV2ZW50KSAmJiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgaWYgKHRoaXMuZWRpdFR5cGUgPT09IEVkaXRUeXBlLnJvdykge1xuICAgICAgICB0aGlzLl9zdmMuc3RhcnRFZGl0Um93KG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc3ZjLnN0YXJ0RWRpdENlbGwobnVsbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXNpbicsIFsnJGV2ZW50J10pIGZvY3VzSW4oZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gdGhpcy5nZXRDb29yZGluYXRlcyhldmVudCk7XG4gICAgaWYgKGNvb3JkaW5hdGVzKSB7XG4gICAgICB0aGlzLmNlbGxGb2N1cy5lbWl0KHtcbiAgICAgICAgLi4udGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShjb29yZGluYXRlcyksXG4gICAgICAgIGV2ZW50XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmVkaXRFdmVudCA9PT0gRWRpdEV2ZW50LmZvY3VzKSB7XG4gICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkYmxjbGljaycsIFsnJGV2ZW50J10pXG4gIGRibGNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSB0aGlzLmdldENvb3JkaW5hdGVzKGV2ZW50KTtcbiAgICBpZiAoY29vcmRpbmF0ZXMpIHtcbiAgICAgIHRoaXMuY2VsbERvdWJsZUNsaWNrLmVtaXQoe1xuICAgICAgICAuLi50aGlzLl9zdmMuZ2V0Q2VsbEluc3RhbmNlKGNvb3JkaW5hdGVzKSxcbiAgICAgICAgZXZlbnRcbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuZWRpdEV2ZW50ID09PSBFZGl0RXZlbnQuZG91YmxlQ2xpY2spIHtcbiAgICAgICAgdGhpcy5zdGFydEVkaXRSb3dPckNlbGwoY29vcmRpbmF0ZXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBrZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgZXZlbnQuY29kZSA9PT0gJ0tleUEnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5fc3ZjLnNlbGVjdEFsbCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy5fc3ZjLmRlc2VsZWN0QWxsKCk7XG4gICAgICBpZiAodGhpcy5lZGl0VHlwZSA9PT0gRWRpdFR5cGUucm93KSB7XG4gICAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRSb3cobnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zdmMuc3RhcnRFZGl0Q2VsbChudWxsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSB0aGlzLmdldENvb3JkaW5hdGVzKGV2ZW50KTtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICBpZiAodGhpcy5lZGl0VHlwZSA9PT0gRWRpdFR5cGUucm93KSB7XG4gICAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRSb3cobnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5fc3ZjLmN1cnJlbnRFZGl0Q2VsbCkge1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuX3N2Yy5nZXROZXh0Um93Q2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5zdGFydEVkaXRSb3dPckNlbGwoe1xuICAgICAgICAgICAgICByb3c6IHRhcmdldC5yb3csXG4gICAgICAgICAgICAgIGNvbHVtbjogdGFyZ2V0LmNvbHVtbixcbiAgICAgICAgICAgICAgZXZlbnQ6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRDZWxsKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29vcmRpbmF0ZXMpIHtcbiAgICAgIHRoaXMuY2VsbEtleURvd24uZW1pdCh7XG4gICAgICAgIC4uLnRoaXMuX3N2Yy5nZXRDZWxsSW5zdGFuY2UoY29vcmRpbmF0ZXMpLFxuICAgICAgICBldmVudFxuICAgICAgfSk7XG4gICAgICBpZiAoZXZlbnQua2V5ICYmIChldmVudC5rZXkubGVuZ3RoID09PSAxIHx8IGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScpKSB7XG4gICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKHtcbiAgICAgICAgICByb3c6IGNvb3JkaW5hdGVzLnJvdyxcbiAgICAgICAgICBjb2x1bW46IGNvb3JkaW5hdGVzLmNvbHVtbixcbiAgICAgICAgICBldmVudDogZXZlbnRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJyAmJiB0aGlzLl9zdmMuY3VycmVudEVkaXRDZWxsKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGxldCB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0TmV4dEVkaXRhYmxlQ2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIHRhcmdldCA9IHRoaXMuX3N2Yy5nZXRQcmV2aW91c0VkaXRhYmxlQ2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKHtcbiAgICAgICAgICAgIHJvdzogdGFyZ2V0LnJvdyxcbiAgICAgICAgICAgIGNvbHVtbjogdGFyZ2V0LmNvbHVtbixcbiAgICAgICAgICAgIGV2ZW50OiB1bmRlZmluZWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLl9zdmMuY3VycmVudEVkaXRDZWxsKSB7XG4gICAgICAgIGxldCB0YXJnZXQ7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgIHRhcmdldCA9IHRoaXMuX3N2Yy5nZXROZXh0Q2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0UHJldmlvdXNDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0UHJldmlvdXNSb3dDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAgIHRhcmdldCA9IHRoaXMuX3N2Yy5nZXROZXh0Um93Q2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0Q2VsbEVsZW1lbnQodGFyZ2V0KTtcbiAgICAgICAgICBlbGVtZW50Py5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSkgbW91c2Vkb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmJ1dHRvbiA9PT0gMikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdmMucmVzdG9yZVN0YXRlKCk7XG4gICAgdGhpcy5fc3ZjLnJlc3RvcmVIaWRkZW5Db2x1bW5zKCk7XG4gICAgdGhpcy50YWJsZVNlcnZpY2UuZW1pdCh0aGlzLl9zdmMpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2hlYWRFbGVtZW50ID1cbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudGFibGUtaGVhZCcpO1xuICAgIHRoaXMuX2JvZHlFbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnLnRhYmxlLWJvZHktY29udGFpbmVyJ1xuICAgICk7XG4gICAgdGhpcy5fYm9keUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9hbGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2JvZHlFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdlZGl0VHlwZScpKSB7XG4gICAgICB0aGlzLl9zdmMuZWRpdFR5cGUgPSB0aGlzLmVkaXRUeXBlO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnc2VsZWN0VHlwZScpKSB7XG4gICAgICB0aGlzLl9zdmMuc2VsZWN0VHlwZSA9IHRoaXMuc2VsZWN0VHlwZTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3NlbGVjdGVkUm93cycpKSB7XG4gICAgICB0aGlzLl9zdmMuc2VsZWN0Um93cyh0aGlzLnNlbGVjdGVkUm93cyk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdyb3dFZGl0YWJsZScpKSB7XG4gICAgICB0aGlzLl9zdmMucm93RWRpdGFibGUgPSB0aGlzLnJvd0VkaXRhYmxlO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnY29va2llTmFtZScpKSB7XG4gICAgICB0aGlzLl9zdmMuc2V0Q29va2llTmFtZSh0aGlzLmNvb2tpZU5hbWUpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnY29sdW1ucycpKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5zICE9PSBudWxsICYmIHRoaXMuY29sdW1ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3N2Yy5zZXRDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdkYXRhJykpIHtcbiAgICAgIHRoaXMuX3N2Yy5zZXREYXRhKHRoaXMuZGF0YSk7XG4gICAgICB0aGlzLl9zdmMuc2VsZWN0Um93cyhbXSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdkaWN0JykpIHtcbiAgICAgIHRoaXMuX3N2Yy5zZXREaWN0KHRoaXMuZGljdCk7XG4gICAgICB0aGlzLl9zdmMuc2V0RmlsdGVyT3B0aW9ucyh0aGlzLmRpY3QpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnZmlsdGVyT3B0aW9ucycpKSB7XG4gICAgICB0aGlzLl9zdmMuc2V0RmlsdGVyT3B0aW9ucyh0aGlzLmZpbHRlck9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgndHJhY2tSb3cnKSkge1xuICAgICAgdGhpcy5fc3ZjLnRyYWNrUm93ID0gdGhpcy50cmFja1JvdztcbiAgICB9XG4gIH1cblxuICBzZXRDb250ZXh0TWVudU9wZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbnRleHRNZW51T3BlbiA9IHZhbHVlO1xuICAgIHRoaXMuY29udGV4dE1lbnVPcGVuQ2hhbmdlLmVtaXQodGhpcy5jb250ZXh0TWVudU9wZW4pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydEVkaXRSb3dPckNlbGwoY29vcmRpbmF0ZXM6IElDZWxsRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZGl0VHlwZSA9PT0gRWRpdFR5cGUucm93KSB7XG4gICAgICB0aGlzLl9zdmMuc3RhcnRFZGl0Um93KGNvb3JkaW5hdGVzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZWRpdFR5cGUgPT09IEVkaXRUeXBlLmNlbGwpIHtcbiAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEV2ZW50Q2VsbChldmVudDogRXZlbnQpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiBldmVudC5jb21wb3NlZFBhdGgoKS5maW5kKCh0YXJnZXQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICByZXR1cm4gdGFyZ2V0LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICd0ZXRhLWNlbGwnO1xuICAgIH0pIGFzIEhUTUxFbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFdmVudFJvdyhldmVudDogRXZlbnQpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiBldmVudC5jb21wb3NlZFBhdGgoKS5maW5kKCh0YXJnZXQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICByZXR1cm4gdGFyZ2V0Py5nZXRBdHRyaWJ1dGUgJiYgdGFyZ2V0Py5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm93Jyk7XG4gICAgfSkgYXMgSFRNTEVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGdldENlbGxFbGVtZW50KGNvb3JkaW5hdGVzOiBJQ2VsbENvb3JkaW5hdGVzKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBgdGV0YS1jZWxsW2RhdGEtcm93PVwiJHtjb29yZGluYXRlcy5yb3d9XCJdW2RhdGEtY29sdW1uPVwiJHtjb29yZGluYXRlcy5jb2x1bW59XCJdYFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV2ZW50SXNPblJvdyhldmVudDogRXZlbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCByb3cgPSBldmVudC5jb21wb3NlZFBhdGgoKS5maW5kKCh0YXJnZXQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICByZXR1cm4gdGFyZ2V0Py5nZXRBdHRyaWJ1dGUgJiYgdGFyZ2V0Py5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm93Jyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJvdyAmJiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMocm93KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29vcmRpbmF0ZXMoZXZlbnQ6IEV2ZW50KTogSUNlbGxFdmVudCB8IG51bGwge1xuICAgIGNvbnN0IGNlbGwgPSB0aGlzLmdldEV2ZW50Q2VsbChldmVudCk7XG4gICAgaWYgKGNlbGwpIHtcbiAgICAgIGNvbnN0IHJvd0luZGV4ID0gcGFyc2VJbnQoY2VsbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm93JyksIDEwKTtcbiAgICAgIGNvbnN0IGNvbHVtbk5hbWUgPSBjZWxsLmdldEF0dHJpYnV0ZSgnZGF0YS1jb2x1bW4nKTtcbiAgICAgIGlmIChyb3dJbmRleCA+PSAwICYmIGNvbHVtbk5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByb3c6IHJvd0luZGV4LFxuICAgICAgICAgIGNvbHVtbjogY29sdW1uTmFtZSxcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldFJvdyhldmVudDogRXZlbnQpOiBUYWJsZVJvdzxUPiB8IG51bGwge1xuICAgIGNvbnN0IHJvd0VsZW1lbnQgPSB0aGlzLmdldEV2ZW50Um93KGV2ZW50KTtcbiAgICBpZiAocm93RWxlbWVudCkge1xuICAgICAgY29uc3Qgcm93SW5kZXggPSBwYXJzZUludChyb3dFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1yb3cnKSwgMTApO1xuICAgICAgaWYgKHJvd0luZGV4ID49IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N2Yy5nZXRSb3dCeUluZGV4KHJvd0luZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIG9uU2Nyb2xsID0gKCkgPT4ge1xuICAgIHRoaXMuX2hlYWRFbGVtZW50LnNjcm9sbExlZnQgPSB0aGlzLl9ib2R5RWxlbWVudC5zY3JvbGxMZWZ0O1xuICB9O1xuXG4gIC8vIHByaXZhdGUgZ2V0U2VsZWN0ZWRUZXh0KCkge1xuICAvLyAgIGxldCB0ZXh0ID0gJyc7XG4gIC8vICAgaWYgKHR5cGVvZiB3aW5kb3cuZ2V0U2VsZWN0aW9uICE9ICd1bmRlZmluZWQnKSB7XG4gIC8vICAgICB0ZXh0ID0gd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCk7XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiB0ZXh0O1xuICAvLyB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29sdW1uIGNvbHVtbl9hdXRvXCI+XG4gIDx0ZXRhLXRhYmxlLWhlYWRcbiAgICBbc2VsZWN0VHlwZV09XCJzZWxlY3RUeXBlXCJcbiAgICBbc2hvd0hlYWRDZWxsTWVudV09XCJzaG93SGVhZENlbGxNZW51XCI+PC90ZXRhLXRhYmxlLWhlYWQ+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW4gY29sdW1uX2F1dG8gcG9zaXRpb24tcmVsYXRpdmVcIj5cbiAgICA8dGV0YS10YWJsZS1ib2R5XG4gICAgICBbdGV0YUNvbnRleHRNZW51XT1cImNvbnRleHRNZW51XCJcbiAgICAgIFtvcGVuXT1cImNvbnRleHRNZW51T3BlblwiXG4gICAgICAob3BlbkNoYW5nZSk9XCJzZXRDb250ZXh0TWVudU9wZW4oJGV2ZW50KVwiXG4gICAgICBbYWdncmVnYXRlXT1cImFnZ3JlZ2F0ZVwiXG4gICAgICBbdmlydHVhbF09XCJ2aXJ0dWFsXCJcbiAgICAgIFthY3RpdmVSb3ddPVwiYWN0aXZlUm93XCJcbiAgICAgIFtzZWxlY3RlZFJvd3NdPVwic2VsZWN0ZWRSb3dzTGlzdFwiXG4gICAgICBbYWRkaXRpb25hbENvbXBvbmVudF09XCJkZXRhaWxDb21wb25lbnRcIlxuICAgICAgW2dyb3VwaW5nXT1cImdyb3VwaW5nXCJcbiAgICAgIFtncm91cFJvd0NvbXBvbmVudF09XCJncm91cFJvd0NvbXBvbmVudFwiXG4gICAgICBbb3BlbkxldmVsc109XCJvcGVuTGV2ZWxzXCJcbiAgICAgIFtzZWxlY3RUeXBlXT1cInNlbGVjdFR5cGVcIlxuICAgICAgW3Jvd0NsYXNzXT1cInJvd0NsYXNzXCJcbiAgICAgIFt0cmVlXT1cInRyZWVcIj48L3RldGEtdGFibGUtYm9keT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGNvbHVtbl9hdXRvXCJcbiAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB0b3A6MDsgYm90dG9tOjA7bGVmdDowO3JpZ2h0OjA7XCJcbiAgICAgICAgICpuZ0lmPVwiIWRhdGE/Lmxlbmd0aFwiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
453
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC90YWJsZS90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBSU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQU10RCxPQUFPLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDbEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7O0FBWXBELE1BQU0sT0FBTyxjQUFjO0lBa0V6QixZQUFvQixJQUFxQixFQUFVLFdBQXVCO1FBQXRELFNBQUksR0FBSixJQUFJLENBQWlCO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFoRWpFLFNBQUksR0FBUSxFQUFFLENBQUM7UUFDZixZQUFPLEdBQWtCLEVBQUUsQ0FBQztRQWM1QixlQUFVLEdBQWUsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUUxQyxhQUFRLEdBQW1DLENBQUMsS0FBYSxFQUFFLEdBQU0sRUFBRSxFQUFFO1lBQzVFLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNiLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2xCO1lBQ0QsT0FBTyxLQUFLLENBQUM7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QixNQUFNO2dCQUNtQyxJQUFJO3NCQUE3QyxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBQ0ssVUFBVTtzQkFBdEQsV0FBVzt1QkFBQyxhQUFhO2dCQXVEa0Isd0JBQXdCO3NCQUFuRSxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQW9DTCxPQUFPO3NCQUEzQyxZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFjbkMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFlcEMsT0FBTztzQkFETixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFtRkksU0FBUztzQkFBL0MsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBUeXBlLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUYWJsZVNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2UvdGFibGUuc2VydmljZSc7XG5pbXBvcnQge1RhYmxlQ29sdW1ufSBmcm9tICcuLi9jb250cmFjdC90YWJsZS1jb2x1bW4nO1xuaW1wb3J0IHtGaWx0ZXJTdGF0ZX0gZnJvbSAnLi4vLi4vZmlsdGVyL2NvbnRhcmN0L2ZpbHRlci1zdGF0ZSc7XG5pbXBvcnQge0RldGFpbENvbXBvbmVudEJhc2V9IGZyb20gJy4uL2Jhc2UvZGV0YWlsLWNvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7SUNlbGxFdmVudH0gZnJvbSAnLi4vY29udHJhY3QvaS1jZWxsLWV2ZW50JztcbmltcG9ydCB7SUNlbGxDb29yZGluYXRlc30gZnJvbSAnLi4vY29udHJhY3QvaS1jZWxsLWNvb3JkaW5hdGVzJztcbmltcG9ydCB7ZmlsdGVyLCB0YWtlV2hpbGV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7RWRpdFR5cGV9IGZyb20gJy4uL2VudW0vZWRpdC10eXBlLmVudW0nO1xuaW1wb3J0IHtFZGl0RXZlbnR9IGZyb20gJy4uL2VudW0vZWRpdC1ldmVudC5lbnVtJztcbmltcG9ydCB7U2VsZWN0VHlwZX0gZnJvbSAnLi4vZW51bS9zZWxlY3QtdHlwZS5lbnVtJztcbmltcG9ydCB7SUlkTmFtZX0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2NvbnRyYWN0L2ktaWQtbmFtZSc7XG5pbXBvcnQge0lEaWN0aW9uYXJ5fSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1kaWN0aW9uYXJ5JztcbmltcG9ydCB7SUNlbGxJbnN0YW5jZSwgSUNlbGxJbnN0YW5jZUV2ZW50fSBmcm9tICcuLi9jb250cmFjdC9pLWNlbGwtaW5zdGFuY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1RhYmxlU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50PFQ+XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGRhdGE6IFRbXSA9IFtdO1xuICBASW5wdXQoKSBjb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW107XG4gIEBJbnB1dCgpIGRpY3Q6IElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPjtcbiAgQElucHV0KCkgZmlsdGVyT3B0aW9uczogSURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+O1xuXG4gIEBJbnB1dCgpXG4gIHNldCBzdGF0ZShzdGF0ZTogRmlsdGVyU3RhdGUpIHtcbiAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlO1xuICB9XG5cbiAgQElucHV0KCkgY29va2llTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSB2aXJ0dWFsOiBib29sZWFuO1xuICBASW5wdXQoKSBkZXRhaWxDb21wb25lbnQ6IFR5cGU8RGV0YWlsQ29tcG9uZW50QmFzZTxUPj47XG4gIEBJbnB1dCgpIGFjdGl2ZVJvdzogVDtcbiAgQElucHV0KCkgc2VsZWN0ZWRSb3dzOiBUW107XG4gIEBJbnB1dCgpIHNlbGVjdFR5cGU6IFNlbGVjdFR5cGUgPSBTZWxlY3RUeXBlLm1vdXNlO1xuICBASW5wdXQoKSBhZ2dyZWdhdGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHRyYWNrUm93OiAoaW5kZXg6IG51bWJlciwgcm93OiBUKSA9PiBhbnkgPSAoaW5kZXg6IG51bWJlciwgcm93OiBUKSA9PiB7XG4gICAgaWYgKHJvd1snaWQnXSkge1xuICAgICAgcmV0dXJuIHJvd1snaWQnXTtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9O1xuICBASW5wdXQoKSBlZGl0VHlwZTogRWRpdFR5cGUgPSBFZGl0VHlwZS5jZWxsO1xuICBASW5wdXQoKSBlZGl0RXZlbnQ6IEVkaXRFdmVudCA9IEVkaXRFdmVudC5kb3VibGVDbGljaztcbiAgQElucHV0KCkgcm93RWRpdGFibGU6IGJvb2xlYW4gfCAoKHJvdzogVCkgPT4gYm9vbGVhbik7XG4gIEBJbnB1dCgpIHJvd0NsYXNzOiAocm93OiBULCBpbmRleD86IG51bWJlcikgPT4gc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHNldCBzY3JvbGxUb0luZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdmMuc2Nyb2xsVG9JbmRleChpbmRleCk7XG4gIH1cblxuICBASW5wdXQoKSBzaG93SGVhZENlbGxNZW51ID0gdHJ1ZTtcbiAgQElucHV0KCkgY29udGV4dE1lbnU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIGNvbnRleHRNZW51T3BlbjogYm9vbGVhbjtcbiAgQE91dHB1dCgpIGNvbnRleHRNZW51T3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBAT3V0cHV0KClcbiAgc3RhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxGaWx0ZXJTdGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlclN0YXRlPigpO1xuICBAT3V0cHV0KCkgYm9keUxlZnQgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSBhY3RpdmVSb3dDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNlbGVjdGVkUm93c0NoYW5nZTogRXZlbnRFbWl0dGVyPFRbXT4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNlbGxDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZUV2ZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgY2VsbERvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2VsbEluc3RhbmNlRXZlbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBjZWxsRm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2VFdmVudDxUPj4oKTtcbiAgQE91dHB1dCgpIGNlbGxLZXlEb3duID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2VsbEluc3RhbmNlRXZlbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSByb3dMZWZ0ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuICBAT3V0cHV0KCkgcm93RWRpdFN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2VsbEluc3RhbmNlPFQ+PigpO1xuICBAT3V0cHV0KCkgcm93RWRpdEVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcbiAgQE91dHB1dCgpIGNlbGxFZGl0U3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPElDZWxsSW5zdGFuY2U8VD4+KCk7XG4gIEBPdXRwdXQoKSBjZWxsRWRpdEVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUNlbGxJbnN0YW5jZTxUPj4oKTtcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2VsbEluc3RhbmNlPFQ+PigpO1xuICBAT3V0cHV0KCkgdGFibGVTZXJ2aWNlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVNlcnZpY2U8VD4+KCk7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRleHRNZW51Jywge3N0YXRpYzogdHJ1ZX0pIG1lbnU6IEVsZW1lbnRSZWY7XG4gIEBIb3N0QmluZGluZygnY2xhc3MudGFibGUnKSBwcml2YXRlIHJlYWRvbmx5IHRhYmxlQ2xhc3MgPSB0cnVlO1xuXG4gIHNlbGVjdGVkUm93c0xpc3Q6IFRbXTtcblxuICBwcml2YXRlIF9hbGl2ZSA9IHRydWU7XG4gIHByaXZhdGUgX2JvZHlFbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfaGVhZEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9zdGF0ZTogRmlsdGVyU3RhdGU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfc3ZjOiBUYWJsZVNlcnZpY2U8VD4sIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICB0aGlzLl9zdmMuc3RhdGVcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSxcbiAgICAgICAgZmlsdGVyKChzdGF0ZSkgPT4gc3RhdGUgIT09IHRoaXMuX3N0YXRlKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoc3RhdGU6IEZpbHRlclN0YXRlKSA9PiB0aGlzLnN0YXRlQ2hhbmdlLm5leHQoc3RhdGUpKTtcblxuICAgIHRoaXMuX3N2Yy5lZGl0Q2VsbFN0YXJ0XG4gICAgICAucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW06IElDZWxsRXZlbnQpID0+IHRoaXMuY2VsbEVkaXRTdGFydC5lbWl0KHRoaXMuX3N2Yy5nZXRDZWxsSW5zdGFuY2UoaXRlbSkpKTtcblxuICAgIHRoaXMuX3N2Yy5lZGl0Q2VsbFN0b3BcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoaXRlbTogSUNlbGxDb29yZGluYXRlcykgPT4gdGhpcy5jZWxsRWRpdEVuZC5lbWl0KHRoaXMuX3N2Yy5nZXRDZWxsSW5zdGFuY2UoaXRlbSkpKTtcblxuICAgIHRoaXMuX3N2Yy5lZGl0Um93U3RhcnRcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoaXRlbTogSUNlbGxFdmVudCkgPT5cbiAgICAgICAgdGhpcy5yb3dFZGl0U3RhcnQuZW1pdCh0aGlzLl9zdmMuZ2V0Q2VsbEluc3RhbmNlKGl0ZW0pKVxuICAgICAgKTtcblxuICAgIHRoaXMuX3N2Yy5lZGl0Um93U3RvcFxuICAgICAgLnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChpdGVtOiBJQ2VsbENvb3JkaW5hdGVzKSA9PlxuICAgICAgICB0aGlzLnJvd0VkaXRFbmQuZW1pdCh0aGlzLl9zdmMuZ2V0Um93QnlJbmRleChpdGVtPy5yb3cpKVxuICAgICAgKTtcblxuICAgIHRoaXMuX3N2Yy5zZWxlY3RlZFJvd3NcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoaXRlbXM6IFRbXSkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0xpc3QgPSBpdGVtcztcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NDaGFuZ2UuZW1pdChpdGVtcyk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX3N2Yy5hY3RpdmVSb3dcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoaXRlbTogVCkgPT4gdGhpcy5hY3RpdmVSb3dDaGFuZ2UuZW1pdChpdGVtKSk7XG5cbiAgICB0aGlzLl9zdmMudmFsdWVDaGFuZ2VkXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGNvb3JkaW5hdGVzOiBJQ2VsbENvb3JkaW5hdGVzKSA9PiB7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLl9zdmMuZ2V0Q2VsbEluc3RhbmNlKGNvb3JkaW5hdGVzKSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSkgaGFuZGxlQ2xpY2tPdXRzaWRlQW55Um93KFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50XG4gICkge1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gdGhpcy5nZXRDb29yZGluYXRlcyhldmVudCk7XG4gICAgaWYgKGNvb3JkaW5hdGVzKSB7XG4gICAgICB0aGlzLmNlbGxDbGljay5lbWl0KHtcbiAgICAgICAgLi4udGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShjb29yZGluYXRlcyksXG4gICAgICAgIGV2ZW50XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmVkaXRFdmVudCA9PT0gRWRpdEV2ZW50LmNsaWNrKSB7XG4gICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLl9zdmMuY3VycmVudEVkaXRDZWxsICYmIChjb29yZGluYXRlcy5yb3cgIT09IHRoaXMuX3N2Yy5jdXJyZW50RWRpdENlbGwucm93IHx8IGNvb3JkaW5hdGVzLmNvbHVtbiAhPT0gdGhpcy5fc3ZjLmN1cnJlbnRFZGl0Q2VsbC5jb2x1bW4pKSB7XG4gICAgICAgICAgdGhpcy5zdGFydEVkaXRSb3dPckNlbGwobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgcm93ID0gdGhpcy5nZXRSb3coZXZlbnQpO1xuICAgIGlmIChyb3cpIHtcbiAgICAgIGlmIChldmVudC5jdHJsS2V5KSB7XG4gICAgICAgIHRoaXMuX3N2Yy5zZWxlY3RPckRlc2VsZWN0Um93KHJvdyk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgIHRoaXMuX3N2Yy5zZWxlY3RSYW5nZShyb3cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc3ZjLnNlbGVjdFJvd3MoW3Jvd10pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMuZXZlbnRJc09uUm93KGV2ZW50KSAmJiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgaWYgKHRoaXMuZWRpdFR5cGUgPT09IEVkaXRUeXBlLnJvdykge1xuICAgICAgICB0aGlzLl9zdmMuc3RhcnRFZGl0Um93KG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc3ZjLnN0YXJ0RWRpdENlbGwobnVsbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXNpbicsIFsnJGV2ZW50J10pIGZvY3VzSW4oZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gdGhpcy5nZXRDb29yZGluYXRlcyhldmVudCk7XG4gICAgaWYgKGNvb3JkaW5hdGVzKSB7XG4gICAgICB0aGlzLmNlbGxGb2N1cy5lbWl0KHtcbiAgICAgICAgLi4udGhpcy5fc3ZjLmdldENlbGxJbnN0YW5jZShjb29yZGluYXRlcyksXG4gICAgICAgIGV2ZW50XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmVkaXRFdmVudCA9PT0gRWRpdEV2ZW50LmZvY3VzKSB7XG4gICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkYmxjbGljaycsIFsnJGV2ZW50J10pXG4gIGRibGNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSB0aGlzLmdldENvb3JkaW5hdGVzKGV2ZW50KTtcbiAgICBpZiAoY29vcmRpbmF0ZXMpIHtcbiAgICAgIHRoaXMuY2VsbERvdWJsZUNsaWNrLmVtaXQoe1xuICAgICAgICAuLi50aGlzLl9zdmMuZ2V0Q2VsbEluc3RhbmNlKGNvb3JkaW5hdGVzKSxcbiAgICAgICAgZXZlbnRcbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuZWRpdEV2ZW50ID09PSBFZGl0RXZlbnQuZG91YmxlQ2xpY2spIHtcbiAgICAgICAgdGhpcy5zdGFydEVkaXRSb3dPckNlbGwoY29vcmRpbmF0ZXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBrZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgZXZlbnQuY29kZSA9PT0gJ0tleUEnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5fc3ZjLnNlbGVjdEFsbCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy5fc3ZjLmRlc2VsZWN0QWxsKCk7XG4gICAgICBpZiAodGhpcy5lZGl0VHlwZSA9PT0gRWRpdFR5cGUucm93KSB7XG4gICAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRSb3cobnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zdmMuc3RhcnRFZGl0Q2VsbChudWxsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSB0aGlzLmdldENvb3JkaW5hdGVzKGV2ZW50KTtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICBpZiAodGhpcy5lZGl0VHlwZSA9PT0gRWRpdFR5cGUucm93KSB7XG4gICAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRSb3cobnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5fc3ZjLmN1cnJlbnRFZGl0Q2VsbCkge1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuX3N2Yy5nZXROZXh0Um93Q2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5zdGFydEVkaXRSb3dPckNlbGwoe1xuICAgICAgICAgICAgICByb3c6IHRhcmdldC5yb3csXG4gICAgICAgICAgICAgIGNvbHVtbjogdGFyZ2V0LmNvbHVtbixcbiAgICAgICAgICAgICAgZXZlbnQ6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3N2Yy5zdGFydEVkaXRDZWxsKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29vcmRpbmF0ZXMpIHtcbiAgICAgIHRoaXMuY2VsbEtleURvd24uZW1pdCh7XG4gICAgICAgIC4uLnRoaXMuX3N2Yy5nZXRDZWxsSW5zdGFuY2UoY29vcmRpbmF0ZXMpLFxuICAgICAgICBldmVudFxuICAgICAgfSk7XG4gICAgICBpZiAoZXZlbnQua2V5ICYmIChldmVudC5rZXkubGVuZ3RoID09PSAxIHx8IGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScpKSB7XG4gICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKHtcbiAgICAgICAgICByb3c6IGNvb3JkaW5hdGVzLnJvdyxcbiAgICAgICAgICBjb2x1bW46IGNvb3JkaW5hdGVzLmNvbHVtbixcbiAgICAgICAgICBldmVudDogZXZlbnRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJyAmJiB0aGlzLl9zdmMuY3VycmVudEVkaXRDZWxsKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGxldCB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0TmV4dEVkaXRhYmxlQ2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIHRhcmdldCA9IHRoaXMuX3N2Yy5nZXRQcmV2aW91c0VkaXRhYmxlQ2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIHRoaXMuc3RhcnRFZGl0Um93T3JDZWxsKHtcbiAgICAgICAgICAgIHJvdzogdGFyZ2V0LnJvdyxcbiAgICAgICAgICAgIGNvbHVtbjogdGFyZ2V0LmNvbHVtbixcbiAgICAgICAgICAgIGV2ZW50OiB1bmRlZmluZWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLl9zdmMuY3VycmVudEVkaXRDZWxsKSB7XG4gICAgICAgIGxldCB0YXJnZXQ7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgIHRhcmdldCA9IHRoaXMuX3N2Yy5nZXROZXh0Q2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0UHJldmlvdXNDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9zdmMuZ2V0UHJldmlvdXNSb3dDZWxsKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAgIHRhcmdldCA9IHRoaXMuX3N2Yy5nZXROZXh0Um93Q2VsbChjb29yZGluYXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0Q2VsbEVsZW1lbnQodGFyZ2V0KTtcbiAgICAgICAgICBlbGVtZW50Py5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSkgbW91c2Vkb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmJ1dHRvbiA9PT0gMikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdmMucmVzdG9yZVN0YXRlKCk7XG4gICAgdGhpcy5fc3ZjLnJlc3RvcmVIaWRkZW5Db2x1bW5zKCk7XG4gICAgdGhpcy50YWJsZVNlcnZpY2UuZW1pdCh0aGlzLl9zdmMpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2hlYWRFbGVtZW50ID1cbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudGFibGUtaGVhZCcpO1xuICAgIHRoaXMuX2JvZHlFbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnLnRhYmxlLWJvZHktY29udGFpbmVyJ1xuICAgICk7XG4gICAgdGhpcy5fYm9keUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9hbGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2JvZHlFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdlZGl0VHlwZScpKSB7XG4gICAgICB0aGlzLl9zdmMuZWRpdFR5cGUgPSB0aGlzLmVkaXRUeXBlO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnc2VsZWN0VHlwZScpKSB7XG4gICAgICB0aGlzLl9zdmMuc2VsZWN0VHlwZSA9IHRoaXMuc2VsZWN0VHlwZTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3NlbGVjdGVkUm93cycpKSB7XG4gICAgICB0aGlzLl9zdmMuc2VsZWN0Um93cyh0aGlzLnNlbGVjdGVkUm93cyk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdyb3dFZGl0YWJsZScpKSB7XG4gICAgICB0aGlzLl9zdmMucm93RWRpdGFibGUgPSB0aGlzLnJvd0VkaXRhYmxlO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnY29va2llTmFtZScpKSB7XG4gICAgICB0aGlzLl9zdmMuc2V0Q29va2llTmFtZSh0aGlzLmNvb2tpZU5hbWUpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnY29sdW1ucycpKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5zICE9PSBudWxsICYmIHRoaXMuY29sdW1ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3N2Yy5zZXRDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdkYXRhJykpIHtcbiAgICAgIHRoaXMuX3N2Yy5zZXREYXRhKHRoaXMuZGF0YSk7XG4gICAgICB0aGlzLl9zdmMuc2VsZWN0Um93cyh0aGlzLmRhdGE/LmZpbHRlcigocm93KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUm93cz8uc29tZSgoc2VsZWN0ZWRSb3cpID0+XG4gICAgICAgICAgdGhpcy50cmFja1Jvdyh0aGlzLl9zdmMuZ2V0Um93SW5kZXgoc2VsZWN0ZWRSb3cpLCBzZWxlY3RlZFJvdykgPT09IHRoaXMudHJhY2tSb3codGhpcy5fc3ZjLmdldFJvd0luZGV4KHJvdyksIHJvdykpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnZGljdCcpKSB7XG4gICAgICB0aGlzLl9zdmMuc2V0RGljdCh0aGlzLmRpY3QpO1xuICAgICAgdGhpcy5fc3ZjLnNldEZpbHRlck9wdGlvbnModGhpcy5kaWN0KTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2ZpbHRlck9wdGlvbnMnKSkge1xuICAgICAgdGhpcy5fc3ZjLnNldEZpbHRlck9wdGlvbnModGhpcy5maWx0ZXJPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3RyYWNrUm93JykpIHtcbiAgICAgIHRoaXMuX3N2Yy50cmFja1JvdyA9IHRoaXMudHJhY2tSb3c7XG4gICAgfVxuICB9XG5cbiAgc2V0Q29udGV4dE1lbnVPcGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5jb250ZXh0TWVudU9wZW4gPSB2YWx1ZTtcbiAgICB0aGlzLmNvbnRleHRNZW51T3BlbkNoYW5nZS5lbWl0KHRoaXMuY29udGV4dE1lbnVPcGVuKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRFZGl0Um93T3JDZWxsKGNvb3JkaW5hdGVzOiBJQ2VsbEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWRpdFR5cGUgPT09IEVkaXRUeXBlLnJvdykge1xuICAgICAgdGhpcy5fc3ZjLnN0YXJ0RWRpdFJvdyhjb29yZGluYXRlcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmVkaXRUeXBlID09PSBFZGl0VHlwZS5jZWxsKSB7XG4gICAgICB0aGlzLl9zdmMuc3RhcnRFZGl0Q2VsbChjb29yZGluYXRlcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRFdmVudENlbGwoZXZlbnQ6IEV2ZW50KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gZXZlbnQuY29tcG9zZWRQYXRoKCkuZmluZCgodGFyZ2V0OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIHRhcmdldC50YWdOYW1lPy50b0xvd2VyQ2FzZSgpID09PSAndGV0YS1jZWxsJztcbiAgICB9KSBhcyBIVE1MRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXZlbnRSb3coZXZlbnQ6IEV2ZW50KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gZXZlbnQuY29tcG9zZWRQYXRoKCkuZmluZCgodGFyZ2V0OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIHRhcmdldD8uZ2V0QXR0cmlidXRlICYmIHRhcmdldD8uZ2V0QXR0cmlidXRlKCdkYXRhLXJvdycpO1xuICAgIH0pIGFzIEhUTUxFbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDZWxsRWxlbWVudChjb29yZGluYXRlczogSUNlbGxDb29yZGluYXRlcyk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgYHRldGEtY2VsbFtkYXRhLXJvdz1cIiR7Y29vcmRpbmF0ZXMucm93fVwiXVtkYXRhLWNvbHVtbj1cIiR7Y29vcmRpbmF0ZXMuY29sdW1ufVwiXWBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBldmVudElzT25Sb3coZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgY29uc3Qgcm93ID0gZXZlbnQuY29tcG9zZWRQYXRoKCkuZmluZCgodGFyZ2V0OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIHRhcmdldD8uZ2V0QXR0cmlidXRlICYmIHRhcmdldD8uZ2V0QXR0cmlidXRlKCdkYXRhLXJvdycpO1xuICAgIH0pO1xuICAgIHJldHVybiByb3cgJiYgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHJvdyk7XG4gIH1cblxuICBwcml2YXRlIGdldENvb3JkaW5hdGVzKGV2ZW50OiBFdmVudCk6IElDZWxsRXZlbnQgfCBudWxsIHtcbiAgICBpZiAoZXZlbnQuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpIDwgMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGNlbGwgPSB0aGlzLmdldEV2ZW50Q2VsbChldmVudCk7XG4gICAgaWYgKGNlbGwpIHtcbiAgICAgIGNvbnN0IHJvd0luZGV4ID0gcGFyc2VJbnQoY2VsbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm93JyksIDEwKTtcbiAgICAgIGNvbnN0IGNvbHVtbk5hbWUgPSBjZWxsLmdldEF0dHJpYnV0ZSgnZGF0YS1jb2x1bW4nKTtcbiAgICAgIGlmIChyb3dJbmRleCA+PSAwICYmIGNvbHVtbk5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByb3c6IHJvd0luZGV4LFxuICAgICAgICAgIGNvbHVtbjogY29sdW1uTmFtZSxcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldFJvdyhldmVudDogRXZlbnQpOiBUIHwgbnVsbCB7XG4gICAgaWYgKGV2ZW50LmNvbXBvc2VkUGF0aCgpLmluZGV4T2YodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSA8IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCByb3dFbGVtZW50ID0gdGhpcy5nZXRFdmVudFJvdyhldmVudCk7XG4gICAgaWYgKHJvd0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHJvd0luZGV4ID0gcGFyc2VJbnQocm93RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm93JyksIDEwKTtcbiAgICAgIGlmIChyb3dJbmRleCA+PSAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdmMuZ2V0Um93QnlJbmRleChyb3dJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBvblNjcm9sbCA9ICgpID0+IHtcbiAgICB0aGlzLl9oZWFkRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGhpcy5fYm9keUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgfTtcblxuICAvLyBwcml2YXRlIGdldFNlbGVjdGVkVGV4dCgpIHtcbiAgLy8gICBsZXQgdGV4dCA9ICcnO1xuICAvLyAgIGlmICh0eXBlb2Ygd2luZG93LmdldFNlbGVjdGlvbiAhPSAndW5kZWZpbmVkJykge1xuICAvLyAgICAgdGV4dCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpO1xuICAvLyAgIH1cbiAgLy8gICByZXR1cm4gdGV4dDtcbiAgLy8gfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbHVtbiBjb2x1bW5fYXV0b1wiPlxuICA8dGV0YS10YWJsZS1oZWFkXG4gICAgW3NlbGVjdFR5cGVdPVwic2VsZWN0VHlwZVwiXG4gICAgW3Nob3dIZWFkQ2VsbE1lbnVdPVwic2hvd0hlYWRDZWxsTWVudVwiPjwvdGV0YS10YWJsZS1oZWFkPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uIGNvbHVtbl9hdXRvIHBvc2l0aW9uLXJlbGF0aXZlXCI+XG4gICAgPHRldGEtdGFibGUtYm9keVxuICAgICAgW3RldGFDb250ZXh0TWVudV09XCJjb250ZXh0TWVudVwiXG4gICAgICBbb3Blbl09XCJjb250ZXh0TWVudU9wZW5cIlxuICAgICAgKG9wZW5DaGFuZ2UpPVwic2V0Q29udGV4dE1lbnVPcGVuKCRldmVudClcIlxuICAgICAgW2FnZ3JlZ2F0ZV09XCJhZ2dyZWdhdGVcIlxuICAgICAgW3ZpcnR1YWxdPVwidmlydHVhbFwiXG4gICAgICBbYWN0aXZlUm93XT1cImFjdGl2ZVJvd1wiXG4gICAgICBbc2VsZWN0ZWRSb3dzXT1cInNlbGVjdGVkUm93c0xpc3RcIlxuICAgICAgW2FkZGl0aW9uYWxDb21wb25lbnRdPVwiZGV0YWlsQ29tcG9uZW50XCJcbiAgICAgIFtzZWxlY3RUeXBlXT1cInNlbGVjdFR5cGVcIlxuICAgICAgW3Jvd0NsYXNzXT1cInJvd0NsYXNzXCI+PC90ZXRhLXRhYmxlLWJvZHk+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbiBjb2x1bW5fYXV0b1wiXG4gICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOjA7IGJvdHRvbTowO2xlZnQ6MDtyaWdodDowO1wiXG4gICAgICAgICAqbmdJZj1cIiFkYXRhPy5sZW5ndGhcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -15,8 +15,9 @@ import * as i6 from "../cell/cell.component";
|
|
|
15
15
|
import * as i7 from "../selection-cell/selection-cell.component";
|
|
16
16
|
import * as i8 from "../../../pipe/number-pipe/number.pipe";
|
|
17
17
|
export class TableBodyComponent {
|
|
18
|
-
constructor(_svc, _config, _cdr) {
|
|
18
|
+
constructor(_svc, _elementRef, _config, _cdr) {
|
|
19
19
|
this._svc = _svc;
|
|
20
|
+
this._elementRef = _elementRef;
|
|
20
21
|
this._config = _config;
|
|
21
22
|
this._cdr = _cdr;
|
|
22
23
|
this.selectedRows = [];
|
|
@@ -27,17 +28,6 @@ export class TableBodyComponent {
|
|
|
27
28
|
this._columns = [];
|
|
28
29
|
this._alive = true;
|
|
29
30
|
this._hiddenColumns = [];
|
|
30
|
-
this.getData = (index, count, success) => {
|
|
31
|
-
const data = [];
|
|
32
|
-
if (this.data?.length > 0) {
|
|
33
|
-
const start = Math.max(0, index);
|
|
34
|
-
const end = Math.min(index + count - 1, this.data.length - 1);
|
|
35
|
-
for (let i = start; i <= end; i++) {
|
|
36
|
-
data.push(this.data[i]);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return success(data);
|
|
40
|
-
};
|
|
41
31
|
}
|
|
42
32
|
set data(data) {
|
|
43
33
|
this._data = data;
|
|
@@ -61,6 +51,17 @@ export class TableBodyComponent {
|
|
|
61
51
|
setActiveRow(row) {
|
|
62
52
|
this._svc.setActiveRow(row);
|
|
63
53
|
}
|
|
54
|
+
// getData = (index, count, success) => {
|
|
55
|
+
// const data = [];
|
|
56
|
+
// if (this.data?.length > 0) {
|
|
57
|
+
// const start = Math.max(0, index);
|
|
58
|
+
// const end = Math.min(index + count - 1, this.data.length - 1);
|
|
59
|
+
// for (let i = start; i <= end; i++) {
|
|
60
|
+
// data.push(this.data[i]);
|
|
61
|
+
// }
|
|
62
|
+
// }
|
|
63
|
+
// return success(data);
|
|
64
|
+
// };
|
|
64
65
|
ngOnInit() {
|
|
65
66
|
this.locale = this._config.locale;
|
|
66
67
|
combineLatest([this._svc.columns, this._svc.hiddenColumns])
|
|
@@ -81,10 +82,14 @@ export class TableBodyComponent {
|
|
|
81
82
|
this._cdr.markForCheck();
|
|
82
83
|
});
|
|
83
84
|
this._svc.scrollIndex
|
|
84
|
-
.pipe(takeWhile((
|
|
85
|
-
.subscribe(async (
|
|
85
|
+
.pipe(takeWhile(() => this._alive))
|
|
86
|
+
.subscribe(async (index) => {
|
|
86
87
|
if (this.viewport) {
|
|
87
|
-
this.viewport.scrollToIndex(
|
|
88
|
+
this.viewport.scrollToIndex(index, 'auto');
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
const row = this._elementRef.nativeElement.querySelector(`.table-row[data-row="${index}"]`);
|
|
92
|
+
row?.scrollIntoView();
|
|
88
93
|
}
|
|
89
94
|
this._cdr.markForCheck();
|
|
90
95
|
});
|
|
@@ -128,8 +133,8 @@ export class TableBodyComponent {
|
|
|
128
133
|
return '';
|
|
129
134
|
}
|
|
130
135
|
trackRow(index, row) {
|
|
131
|
-
if (row
|
|
132
|
-
return row
|
|
136
|
+
if (row['id']) {
|
|
137
|
+
return row['id'];
|
|
133
138
|
}
|
|
134
139
|
return index;
|
|
135
140
|
}
|
|
@@ -138,27 +143,27 @@ export class TableBodyComponent {
|
|
|
138
143
|
}
|
|
139
144
|
getSum(columnName) {
|
|
140
145
|
return this.data?.reduce((accum, current) => {
|
|
141
|
-
const val = parseFloat(current
|
|
146
|
+
const val = parseFloat(current[columnName]);
|
|
142
147
|
return accum + (isNaN(val) ? 0 : val);
|
|
143
148
|
}, 0);
|
|
144
149
|
}
|
|
145
150
|
getMin(columnName) {
|
|
146
|
-
return this.data?.reduce((accum, current) => accum != null && accum <= current
|
|
151
|
+
return this.data?.reduce((accum, current) => accum != null && accum <= current[columnName]
|
|
147
152
|
? accum
|
|
148
|
-
: current
|
|
153
|
+
: current[columnName], null);
|
|
149
154
|
}
|
|
150
155
|
getMax(columnName) {
|
|
151
|
-
return this.data?.reduce((accum, current) => accum != null && accum >= current
|
|
156
|
+
return this.data?.reduce((accum, current) => accum != null && accum >= current[columnName]
|
|
152
157
|
? accum
|
|
153
|
-
: current
|
|
158
|
+
: current[columnName], null);
|
|
154
159
|
}
|
|
155
160
|
}
|
|
156
|
-
TableBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: TableBodyComponent, deps: [{ token: i1.TableService }, { token: i2.TetaConfigService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
157
|
-
TableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: TableBodyComponent, selector: "teta-table-body", inputs: { virtual: "virtual", activeRow: "activeRow", selectedRows: "selectedRows", additionalComponent: "additionalComponent",
|
|
161
|
+
TableBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: TableBodyComponent, deps: [{ token: i1.TableService }, { token: i0.ElementRef }, { token: i2.TetaConfigService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
162
|
+
TableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: TableBodyComponent, selector: "teta-table-body", inputs: { virtual: "virtual", activeRow: "activeRow", selectedRows: "selectedRows", additionalComponent: "additionalComponent", aggregate: "aggregate", 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]=\"28\">\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 <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 (contextmenu)=\"setActiveRow(row)\"\n [attr.data-row]=\"rowIndex\"\n [class.table-row_odd]=\"rowIndex % 2 === 1\"\n [ngClass]=\"rowClass ? rowClass(row, rowIndex) : ''\"\n [class.table-row_selected]=\"selectedRows && selectedRows.indexOf(row) >= 0\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n [style.zIndex]=\"row === activeRow ? 1 : 'unset'\">\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length\"\n [row]=\"row\"\n style=\"width: 28px;\"></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?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\"\n [row]=\"row\"\n style=\"width: 28px;\"></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?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n</ng-template>\n\n<ng-template #aggTemplate>\n <ng-container *ngIf=\"locale | async as loc\">\n <div class=\"table-row\"\n *ngIf=\"aggregate\"\n [class.table-row_virtual]=\"virtual\"\n [style.flex-grow]=\"virtual ? totalFlex : ''\"\n [style.flex-basis.px]=\"virtual ? totalWidth : ''\"\n [style.min-width.px]=\"virtual ? totalWidth : ''\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\">\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\">\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 [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && 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 [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n </ng-container>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "directive", type: i5.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i5.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i5.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i6.CellComponent, selector: "teta-cell", inputs: ["column", "filterOptions", "dict", "row"] }, { kind: "component", type: i7.SelectionCellComponent, selector: "teta-selection-cell", inputs: ["row"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.NumberPipe, name: "tetaNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
158
163
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: TableBodyComponent, decorators: [{
|
|
159
164
|
type: Component,
|
|
160
|
-
args: [{ selector: 'teta-table-body', changeDetection: ChangeDetectionStrategy.OnPush, template: "<cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n class=\"table-body-container\"\n [itemSize]=\"28\">\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 <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 (contextmenu)=\"setActiveRow(row)\"\n [attr.data-row]=\"rowIndex\"\n [class.table-row_odd]=\"rowIndex % 2 === 1\"\n [ngClass]=\"rowClass ? rowClass(row, rowIndex) : ''\"\n [class.table-row_selected]=\"selectedRows && selectedRows.indexOf(row) >= 0\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <
|
|
161
|
-
}], ctorParameters: function () { return [{ type: i1.TableService }, { type: i2.TetaConfigService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { virtual: [{
|
|
165
|
+
args: [{ selector: 'teta-table-body', changeDetection: ChangeDetectionStrategy.OnPush, template: "<cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n class=\"table-body-container\"\n [itemSize]=\"28\">\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 <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 (contextmenu)=\"setActiveRow(row)\"\n [attr.data-row]=\"rowIndex\"\n [class.table-row_odd]=\"rowIndex % 2 === 1\"\n [ngClass]=\"rowClass ? rowClass(row, rowIndex) : ''\"\n [class.table-row_selected]=\"selectedRows && selectedRows.indexOf(row) >= 0\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n [style.zIndex]=\"row === activeRow ? 1 : 'unset'\">\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length\"\n [row]=\"row\"\n style=\"width: 28px;\"></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?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\"\n [row]=\"row\"\n style=\"width: 28px;\"></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?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n</ng-template>\n\n<ng-template #aggTemplate>\n <ng-container *ngIf=\"locale | async as loc\">\n <div class=\"table-row\"\n *ngIf=\"aggregate\"\n [class.table-row_virtual]=\"virtual\"\n [style.flex-grow]=\"virtual ? totalFlex : ''\"\n [style.flex-basis.px]=\"virtual ? totalWidth : ''\"\n [style.min-width.px]=\"virtual ? totalWidth : ''\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\">\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\">\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 [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && 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 [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n </ng-container>\n</ng-template>\n" }]
|
|
166
|
+
}], ctorParameters: function () { return [{ type: i1.TableService }, { type: i0.ElementRef }, { type: i2.TetaConfigService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { virtual: [{
|
|
162
167
|
type: Input
|
|
163
168
|
}], activeRow: [{
|
|
164
169
|
type: Input
|
|
@@ -166,16 +171,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImpor
|
|
|
166
171
|
type: Input
|
|
167
172
|
}], additionalComponent: [{
|
|
168
173
|
type: Input
|
|
169
|
-
}], tree: [{
|
|
170
|
-
type: Input
|
|
171
174
|
}], aggregate: [{
|
|
172
175
|
type: Input
|
|
173
|
-
}], grouping: [{
|
|
174
|
-
type: Input
|
|
175
|
-
}], groupRowComponent: [{
|
|
176
|
-
type: Input
|
|
177
|
-
}], openLevels: [{
|
|
178
|
-
type: Input
|
|
179
176
|
}], selectType: [{
|
|
180
177
|
type: Input
|
|
181
178
|
}], rowClass: [{
|
|
@@ -187,4 +184,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImpor
|
|
|
187
184
|
type: HostBinding,
|
|
188
185
|
args: ['class.table-body']
|
|
189
186
|
}] } });
|
|
190
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsS0FBSyxFQUlMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQU12QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxhQUFhLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBRzFELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7OztBQVVoRSxNQUFNLE9BQU8sa0JBQWtCO0lBd0Q3QixZQUFvQixJQUFxQixFQUNyQixPQUEwQixFQUMxQixJQUF1QjtRQUZ2QixTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUNyQixZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQUMxQixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQXZEbEMsaUJBQVksR0FBa0IsRUFBRSxDQUFDO1FBWVEsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFXeEUsV0FBTSxHQUFrQixFQUFFLENBQUM7UUFDM0IsYUFBUSxHQUFrQixFQUFFLENBQUM7UUFDN0IsbUJBQWMsR0FBRyxVQUFVLENBQUM7UUFNcEIsYUFBUSxHQUFrQixFQUFFLENB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QyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUM5QixJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7OytHQWhNVSxrQkFBa0I7bUdBQWxCLGtCQUFrQixzZEFhbEIsd0JBQXdCLGdEQzlDckMsbzdLQTRIQTsyRkQzRmEsa0JBQWtCO2tCQU45QixTQUFTOytCQUNFLGlCQUFpQixtQkFHVix1QkFBdUIsQ0FBQyxNQUFNO21LQUd0QyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFZ0QsUUFBUTtzQkFBN0QsU0FBUzt1QkFBQyx3QkFBd0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7Z0JBRUYsY0FBYztzQkFBL0QsV0FBVzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVHlwZSxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VGFibGVSb3d9IGZyb20gJy4uL2NvbnRyYWN0L3RhYmxlLXJvdyc7XG5pbXBvcnQge1RhYmxlQ29sdW1ufSBmcm9tICcuLi9jb250cmFjdC90YWJsZS1jb2x1bW4nO1xuaW1wb3J0IHtHcm91cFJvd0NvbXBvbmVudEJhc2V9IGZyb20gJy4uL2Jhc2UvZ3JvdXAtcm93LWNvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7VGFibGVTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlL3RhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHtEZXRhaWxDb21wb25lbnRCYXNlfSBmcm9tICcuLi9iYXNlL2RldGFpbC1jb21wb25lbnQtYmFzZSc7XG5pbXBvcnQge3Rha2VXaGlsZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtTZWxlY3RUeXBlfSBmcm9tICcuLi9lbnVtL3NlbGVjdC10eXBlLmVudW0nO1xuaW1wb3J0IHtjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7QXJyYXlVdGlsfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdXRpbC9hcnJheS11dGlsJztcbmltcG9ydCB7SURpY3Rpb25hcnl9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWRpY3Rpb25hcnknO1xuaW1wb3J0IHtJSWROYW1lfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1pZC1uYW1lJztcbmltcG9ydCB7QWdncmVnYXRpb25UeXBlfSBmcm9tICcuLi9lbnVtL2FnZ3JlZ2F0aW9uLXR5cGUuZW51bSc7XG5pbXBvcnQge0Nka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQge1RldGFMb2NhbGlzYXRpb259IGZyb20gJy4uLy4uLy4uL2xvY2FsZS90ZXRhLWxvY2FsaXNhdGlvbic7XG5pbXBvcnQge1RldGFDb25maWdTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9sb2NhbGUvdGV0YS1jb25maWcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtdGFibGUtYm9keScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1ib2R5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtYm9keS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVCb2R5Q29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSB2aXJ0dWFsOiBib29sZWFuO1xuICBASW5wdXQoKSBhY3RpdmVSb3c6IFRhYmxlUm93PFQ+O1xuICBASW5wdXQoKSBzZWxlY3RlZFJvd3M6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgQElucHV0KCkgYWRkaXRpb25hbENvbXBvbmVudDogVHlwZTxEZXRhaWxDb21wb25lbnRCYXNlPFQ+PjtcbiAgQElucHV0KCkgdHJlZTogYm9vbGVhbjtcbiAgQElucHV0KCkgYWdncmVnYXRlOiBib29sZWFuO1xuICBASW5wdXQoKSBncm91cGluZzogYm9vbGVhbjtcbiAgQElucHV0KCkgZ3JvdXBSb3dDb21wb25lbnQ6IFR5cGU8R3JvdXBSb3dDb21wb25lbnRCYXNlPFQ+PjtcbiAgQElucHV0KCkgb3BlbkxldmVsczogbnVtYmVyO1xuICBASW5wdXQoKSBzZWxlY3RUeXBlOiBTZWxlY3RUeXBlO1xuICBASW5wdXQoKSByb3dDbGFzczogKHJvdzogVGFibGVSb3c8VD4sIGluZGV4PzogbnVtYmVyKSA9PiBzdHJpbmc7XG5cbiAgQFZpZXdDaGlsZChDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsIHtzdGF0aWM6IGZhbHNlfSkgdmlld3BvcnQ6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRhYmxlLWJvZHknKSBwcml2YXRlIHJlYWRvbmx5IHRhYmxlQm9keUNsYXNzID0gdHJ1ZTtcblxuICBzZXQgZGF0YShkYXRhOiBUYWJsZVJvdzxUPltdKSB7XG4gICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gIH1cblxuICBnZXQgZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIGRpY3Q6IElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPjtcbiAgbG9ja2VkOiBUYWJsZUNvbHVtbltdID0gW107XG4gIHVubG9ja2VkOiBUYWJsZUNvbHVtbltdID0gW107XG4gIHNlbGVjdFR5cGVFbnVtID0gU2VsZWN0VHlwZTtcbiAgbG9ja2VkRmxleDogbnVtYmVyO1xuICBsb2NrZWRXaWR0aDogbnVtYmVyO1xuICB0b3RhbEZsZXg6IG51bWJlcjtcbiAgdG90YWxXaWR0aDogbnVtYmVyO1xuXG4gIHByaXZhdGUgX2NvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgcHJpdmF0ZSBfYWxpdmUgPSB0cnVlO1xuICBwcml2YXRlIF9kYXRhOiBUYWJsZVJvdzxUPltdO1xuICBwcml2YXRlIF9oaWRkZW5Db2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHNldCBjb2x1bW5zKGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pIHtcbiAgICB0aGlzLl9jb2x1bW5zID0gY29sdW1ucztcbiAgICB0aGlzLmxvY2tlZCA9IHRoaXMuX2NvbHVtbnM/LmZpbHRlcigoXykgPT4gXy5sb2NrZWQgPT09IHRydWUpO1xuICAgIHRoaXMudW5sb2NrZWQgPSB0aGlzLl9jb2x1bW5zPy5maWx0ZXIoKF8pID0+IF8ubG9ja2VkID09PSBmYWxzZSk7XG4gICAgY29uc3Qgc3RhcnRXaWR0aCA9IHRoaXMuc2VsZWN0VHlwZSA9PT0gU2VsZWN0VHlwZS5jaGVja0JveCA/IDI4IDogMDtcbiAgICB0aGlzLmxvY2tlZEZsZXggPSB0aGlzLmxvY2tlZC5yZWR1Y2UoKHByZXY6IG51bWJlciwgY3VycjogVGFibGVDb2x1bW4pID0+IHByZXYgKyBjdXJyLmZsZXgsIDApO1xuICAgIHRoaXMubG9ja2VkV2lkdGggPSB0aGlzLmxvY2tlZC5yZWR1Y2UoKHByZXY6IG51bWJlciwgY3VycjogVGFibGVDb2x1bW4pID0+IHByZXYgKyBjdXJyLndpZHRoLCBzdGFydFdpZHRoKTtcbiAgICB0aGlzLnRvdGFsRmxleCA9IHRoaXMuX2NvbHVtbnMucmVkdWNlKChwcmV2OiBudW1iZXIsIGN1cnI6IFRhYmxlQ29sdW1uKSA9PiBwcmV2ICsgY3Vyci5mbGV4LCAwKTtcbiAgICB0aGlzLnRvdGFsV2lkdGggPSB0aGlzLl9jb2x1bW5zLnJlZHVjZSgocHJldjogbnVtYmVyLCBjdXJyOiBUYWJsZUNvbHVtbikgPT4gcHJldiArIGN1cnIud2lkdGgsIHN0YXJ0V2lkdGgpO1xuICB9XG5cbiAgZ2V0IGNvbHVtbnMoKTogVGFibGVDb2x1bW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gIH1cblxuICBsb2NhbGU6IE9ic2VydmFibGU8VGV0YUxvY2FsaXNhdGlvbj47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfc3ZjOiBUYWJsZVNlcnZpY2U8VD4sXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NvbmZpZzogVGV0YUNvbmZpZ1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcblxuICB9XG5cbiAgc2V0QWN0aXZlUm93KHJvdzogVGFibGVSb3c8VD4pIHtcbiAgICB0aGlzLl9zdmMuc2V0QWN0aXZlUm93KHJvdyk7XG4gIH1cblxuICBnZXREYXRhID0gKGluZGV4LCBjb3VudCwgc3VjY2VzcykgPT4ge1xuICAgIGNvbnN0IGRhdGEgPSBbXTtcbiAgICBpZiAodGhpcy5kYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIGluZGV4KTtcbiAgICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKGluZGV4ICsgY291bnQgLSAxLCB0aGlzLmRhdGEubGVuZ3RoIC0gMSk7XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgZGF0YS5wdXNoKHRoaXMuZGF0YVtpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdWNjZXNzKGRhdGEpO1xuICB9O1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9jYWxlID0gdGhpcy5fY29uZmlnLmxvY2FsZTtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9zdmMuY29sdW1ucywgdGhpcy5fc3ZjLmhpZGRlbkNvbHVtbnNdKVxuICAgICAgLnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZXM6IFtUYWJsZUNvbHVtbltdLCBzdHJpbmdbXV0pID0+IHtcbiAgICAgICAgY29uc3QgW2NvbHVtbnMsIGhpZGRlbkNvbHVtbnNdID0gdmFsdWVzO1xuICAgICAgICB0aGlzLl9oaWRkZW5Db2x1bW5zID0gaGlkZGVuQ29sdW1ucztcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gQXJyYXlVdGlsLmZsYXR0ZW4oY29sdW1ucywgJ2NvbHVtbnMnLCB0cnVlKS5maWx0ZXIoXG4gICAgICAgICAgKF8pID0+IHRoaXMuX2hpZGRlbkNvbHVtbnMuaW5kZXhPZihfLm5hbWUpIDwgMFxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX3N2Yy5kaXNwbGF5RGF0YS5waXBlKFxuICAgICAgdGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSlcbiAgICApLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgdGhpcy5kYXRhID0gXztcbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMudmlld3BvcnQ/LmNoZWNrVmlld3BvcnRTaXplKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuZGljdC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMuZGljdCA9IF87XG4gICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuc2Nyb2xsSW5kZXhcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZShhc3luYyAoXykgPT4ge1xuICAgICAgICBpZiAodGhpcy52aWV3cG9ydCkge1xuICAgICAgICAgIHRoaXMudmlld3BvcnQuc2Nyb2xsVG9JbmRleChfLCAnc21vb3RoJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuYWN0aXZlUm93XG4gICAgICAucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKF8pID0+IHtcbiAgICAgICAgdGhpcy5hY3RpdmVSb3cgPSBfO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2FsaXZlID0gZmFsc2U7XG4gIH1cblxuICBnZXRBZ2dyZWdhdGVWYWx1ZShjb2x1bW46IFRhYmxlQ29sdW1uKTogbnVtYmVyIHtcbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLnN1bSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U3VtKGNvbHVtbi5uYW1lKTtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5hdmcpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN1bShjb2x1bW4ubmFtZSkgLyB0aGlzLmRhdGEubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLm1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TWluKGNvbHVtbi5uYW1lKTtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5tYXgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE1heChjb2x1bW4ubmFtZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QWdncmVnYXRlVGV4dChjb2x1bW46IFRhYmxlQ29sdW1uKTogc3RyaW5nIHtcbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLnN1bSkge1xuICAgICAgcmV0dXJuICdzdW0nO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLmF2Zykge1xuICAgICAgcmV0dXJuICdhdmcnO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLm1pbikge1xuICAgICAgcmV0dXJuICdtaW4nO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLm1heCkge1xuICAgICAgcmV0dXJuICdtYXgnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB0cmFja1JvdyhpbmRleDogbnVtYmVyLCByb3c6IFRhYmxlUm93PFQ+KTogYW55IHtcbiAgICBpZiAocm93LmRhdGFbJ2lkJ10pIHtcbiAgICAgIHJldHVybiByb3cuZGF0YVsnaWQnXTtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgdHJhY2tDb2x1bW5zKGluZGV4OiBudW1iZXIsIGNvbHVtbjogVGFibGVDb2x1bW4pOiBhbnkge1xuICAgIHJldHVybiBjb2x1bW4ubmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3VtKGNvbHVtbk5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhPy5yZWR1Y2UoKGFjY3VtLCBjdXJyZW50KSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBwYXJzZUZsb2F0KGN1cnJlbnQuZGF0YVtjb2x1bW5OYW1lXSk7XG4gICAgICByZXR1cm4gYWNjdW0gKyAoaXNOYU4odmFsKSA/IDAgOiB2YWwpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNaW4oY29sdW1uTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmRhdGE/LnJlZHVjZShcbiAgICAgIChhY2N1bSwgY3VycmVudCkgPT5cbiAgICAgICAgYWNjdW0gIT0gbnVsbCAmJiBhY2N1bSA8PSBjdXJyZW50LmRhdGFbY29sdW1uTmFtZV1cbiAgICAgICAgICA/IGFjY3VtXG4gICAgICAgICAgOiBjdXJyZW50LmRhdGFbY29sdW1uTmFtZV0sXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWF4KGNvbHVtbk5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhPy5yZWR1Y2UoXG4gICAgICAoYWNjdW0sIGN1cnJlbnQpID0+XG4gICAgICAgIGFjY3VtICE9IG51bGwgJiYgYWNjdW0gPj0gY3VycmVudC5kYXRhW2NvbHVtbk5hbWVdXG4gICAgICAgICAgPyBhY2N1bVxuICAgICAgICAgIDogY3VycmVudC5kYXRhW2NvbHVtbk5hbWVdLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbn1cbiIsIjxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgKm5nSWY9XCJ2aXJ0dWFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWJsZS1ib2R5LWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtU2l6ZV09XCIyOFwiPlxuICA8bmctY29udGFpbmVyICpjZGtWaXJ0dWFsRm9yPVwibGV0IHJvdyBvZiBkYXRhO3RlbXBsYXRlQ2FjaGVTaXplOiAwOyBsZXQgcm93SW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tSb3c7XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvZHlUZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93LCByb3dJbmRleDogcm93SW5kZXh9XCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG48ZGl2ICpuZ0lmPVwiIXZpcnR1YWxcIlxuICAgICBjbGFzcz1cInRhYmxlLWJvZHktY29udGFpbmVyXCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiBkYXRhOyBsZXQgcm93SW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tSb3c7XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvZHlUZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93LCByb3dJbmRleDogcm93SW5kZXh9XCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWdncmVnYXRlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFnZ1RlbXBsYXRlO1wiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2JvZHlUZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgPGRpdiBjbGFzcz1cInRhYmxlLXJvd1wiXG4gICAgICAgKGNsaWNrKT1cInNldEFjdGl2ZVJvdyhyb3cpXCJcbiAgICAgICAoY29udGV4dG1lbnUpPVwic2V0QWN0aXZlUm93KHJvdylcIlxuICAgICAgIFthdHRyLmRhdGEtcm93XT1cInJvd0luZGV4XCJcbiAgICAgICBbY2xhc3MudGFibGUtcm93X29kZF09XCJyb3dJbmRleCAlIDIgPT09IDFcIlxuICAgICAgIFtuZ0NsYXNzXT1cInJvd0NsYXNzID8gcm93Q2xhc3Mocm93LCByb3dJbmRleCkgOiAnJ1wiXG4gICAgICAgW2NsYXNzLnRhYmxlLXJvd19zZWxlY3RlZF09XCJzZWxlY3RlZFJvd3MgJiYgc2VsZWN0ZWRSb3dzLmluZGV4T2Yocm93KSA+PSAwXCJcbiAgICAgICBbc3R5bGUuZmxleC1ncm93XT1cInRvdGFsRmxleFwiXG4gICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwidG90YWxXaWR0aFwiXG4gICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJ0b3RhbFdpZHRoXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFncm91cGluZ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJvd19sb2NrZWRcIlxuICAgICAgICAgICAqbmdJZj1cImxvY2tlZC5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJsb2NrZWRGbGV4XCJcbiAgICAgICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwibG9ja2VkV2lkdGhcIlxuICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImxvY2tlZFdpZHRoXCJcbiAgICAgICAgICAgW3N0eWxlLnpJbmRleF09XCJyb3cgPT09IGFjdGl2ZVJvdyA/IDEgOiAndW5zZXQnXCI+XG4gICAgICAgIDx0ZXRhLXNlbGVjdGlvbi1jZWxsICpuZ0lmPVwic2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMjhweDtcIj48L3RldGEtc2VsZWN0aW9uLWNlbGw+XG4gICAgICAgIDx0ZXRhLWNlbGxcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGxvY2tlZDsgbGV0IGNvbEluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQ29sdW1ucztcIlxuICAgICAgICAgIFthdHRyLmRhdGEtcm93XT1cInJvd0luZGV4XCJcbiAgICAgICAgICBbYXR0ci5kYXRhLWNvbHVtbl09XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgIFtmaWx0ZXJPcHRpb25zXT1cImRpY3Q/ZGljdFtjb2x1bW4ubmFtZV06W11cIlxuICAgICAgICAgIFtkaWN0XT1cImRpY3RcIlxuICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2VsbENsYXNzXCJcbiAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcbiAgICAgICAgICBbc3R5bGUuZmxleC1ncm93XT1cImNvbHVtbi5mbGV4XCJcbiAgICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICA+PC90ZXRhLWNlbGw+XG4gICAgICA8L2Rpdj5cbiAgICAgIDx0ZXRhLXNlbGVjdGlvbi1jZWxsICpuZ0lmPVwic2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aCA8IDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMjhweDtcIj48L3RldGEtc2VsZWN0aW9uLWNlbGw+XG4gICAgICA8dGV0YS1jZWxsXG4gICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdW5sb2NrZWQ7IGxldCBjb2xJbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0NvbHVtbnM7XCJcbiAgICAgICAgW2F0dHIuZGF0YS1yb3ddPVwicm93SW5kZXhcIlxuICAgICAgICBbYXR0ci5kYXRhLWNvbHVtbl09XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgW2ZpbHRlck9wdGlvbnNdPVwiZGljdD9kaWN0W2NvbHVtbi5uYW1lXTpbXVwiXG4gICAgICAgIFtkaWN0XT1cImRpY3RcIlxuICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5jZWxsQ2xhc3NcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcbiAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJjb2x1bW4uZmxleFwiXG4gICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImNvbHVtbi53aWR0aFwiXG4gICAgICA+PC90ZXRhLWNlbGw+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3VwaW5nXCI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhZ2dUZW1wbGF0ZT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvY2FsZSB8IGFzeW5jIGFzIGxvY1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dcIlxuICAgICAgICAgKm5nSWY9XCJhZ2dyZWdhdGVcIlxuICAgICAgICAgW2NsYXNzLnRhYmxlLXJvd192aXJ0dWFsXT1cInZpcnR1YWxcIlxuICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJ2aXJ0dWFsID8gdG90YWxGbGV4IDogJydcIlxuICAgICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwidmlydHVhbCA/IHRvdGFsV2lkdGggOiAnJ1wiXG4gICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cInZpcnR1YWwgPyB0b3RhbFdpZHRoIDogJydcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dfbG9ja2VkXCJcbiAgICAgICAgICAgKm5nSWY9XCJsb2NrZWQubGVuZ3RoID4gMFwiXG4gICAgICAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwibG9ja2VkRmxleFwiXG4gICAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImxvY2tlZFdpZHRoXCJcbiAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJsb2NrZWRXaWR0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2VsbCBhbGlnbi1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXG4gICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMjhweDtcIj5cbiAgICAgICAgICA8dGV0YS1pY29uIFtuYW1lXT1cIidzdW1Db2xvcidcIj48L3RldGEtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZWxsIGNlbGwtY29tcG9uZW50IGp1c3RpZnktY29udGVudC1lbmRcIlxuICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgbG9ja2VkOyBsZXQgY29sSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tDb2x1bW5zO1wiXG4gICAgICAgICAgICAgW2F0dHIuZGF0YS1jb2x1bW5dPVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5jZWxsQ2xhc3NcIlxuICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxuICAgICAgICAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwiY29sdW1uLmZsZXhcIlxuICAgICAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImNvbHVtbi53aWR0aFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNlbGwtdGV4dCBjZWxsLXRleHRfbnVtZXJpYyBmb250LXRpdGxlLTNcIj5cbiAgICAgICAgICB7e2xvY1tnZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbildfX06XG4gICAgICAgICAge3tnZXRBZ2dyZWdhdGVWYWx1ZShjb2x1bW4pIHwgdGV0YU51bWJlciA6IDJ9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2VsbCBhbGlnbi1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXG4gICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDI4cHg7XCJcbiAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RUeXBlID09PSBzZWxlY3RUeXBlRW51bS5jaGVja0JveCAmJiBsb2NrZWQubGVuZ3RoIDwgMVwiPlxuICAgICAgICA8dGV0YS1pY29uIFtuYW1lXT1cIidzdW1Db2xvcidcIj48L3RldGEtaWNvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNlbGwgY2VsbC1jb21wb25lbnQganVzdGlmeS1jb250ZW50LWVuZFwiXG4gICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdW5sb2NrZWQ7IGxldCBjb2xJbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0NvbHVtbnM7XCJcbiAgICAgICAgICAgW2F0dHIuZGF0YS1jb2x1bW5dPVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2VsbENsYXNzXCJcbiAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXG4gICAgICAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwiY29sdW1uLmZsZXhcIlxuICAgICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJjb2x1bW4ud2lkdGhcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY2VsbC10ZXh0IGNlbGwtdGV4dF9udW1lcmljIGZvbnQtdGl0bGUtM1wiPlxuICAgICAgICB7e2xvY1tnZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbildfX06XG4gICAgICAgIHt7Z2V0QWdncmVnYXRlVmFsdWUoY29sdW1uKSB8IHRldGFOdW1iZXIgOiAyfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsS0FBSyxFQUlMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxhQUFhLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBRzFELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7OztBQVVoRSxNQUFNLE9BQU8sa0JBQWtCO0lBb0Q3QixZQUFvQixJQUFxQixFQUNyQixXQUF1QixFQUN2QixPQUEwQixFQUMxQixJQUF1QjtRQUh2QixTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUNyQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQUMxQixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQXBEbEMsaUJBQVksR0FBUSxFQUFFLENBQUM7UUFRa0IsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFXeEUsV0FBTSxHQUFrQixFQUFFLENBQUM7UUFDM0IsYUFBUSxHQUFrQixFQUFFLENBQUM7UUFDN0IsbUJBQWMs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QkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRWdELFFBQVE7c0JBQTdELFNBQVM7dUJBQUMsd0JBQXdCLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDO2dCQUVGLGNBQWM7c0JBQS9ELFdBQVc7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFR5cGUsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1RhYmxlQ29sdW1ufSBmcm9tICcuLi9jb250cmFjdC90YWJsZS1jb2x1bW4nO1xuaW1wb3J0IHtUYWJsZVNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2UvdGFibGUuc2VydmljZSc7XG5pbXBvcnQge0RldGFpbENvbXBvbmVudEJhc2V9IGZyb20gJy4uL2Jhc2UvZGV0YWlsLWNvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7dGFrZVdoaWxlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1NlbGVjdFR5cGV9IGZyb20gJy4uL2VudW0vc2VsZWN0LXR5cGUuZW51bSc7XG5pbXBvcnQge2NvbWJpbmVMYXRlc3QsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtBcnJheVV0aWx9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi91dGlsL2FycmF5LXV0aWwnO1xuaW1wb3J0IHtJRGljdGlvbmFyeX0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2NvbnRyYWN0L2ktZGljdGlvbmFyeSc7XG5pbXBvcnQge0lJZE5hbWV9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWlkLW5hbWUnO1xuaW1wb3J0IHtBZ2dyZWdhdGlvblR5cGV9IGZyb20gJy4uL2VudW0vYWdncmVnYXRpb24tdHlwZS5lbnVtJztcbmltcG9ydCB7Q2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0fSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7VGV0YUxvY2FsaXNhdGlvbn0gZnJvbSAnLi4vLi4vLi4vbG9jYWxlL3RldGEtbG9jYWxpc2F0aW9uJztcbmltcG9ydCB7VGV0YUNvbmZpZ1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2xvY2FsZS90ZXRhLWNvbmZpZy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGV0YS10YWJsZS1ib2R5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLWJvZHkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1ib2R5LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUJvZHlDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHZpcnR1YWw6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGFjdGl2ZVJvdzogVDtcbiAgQElucHV0KCkgc2VsZWN0ZWRSb3dzOiBUW10gPSBbXTtcbiAgQElucHV0KCkgYWRkaXRpb25hbENvbXBvbmVudDogVHlwZTxEZXRhaWxDb21wb25lbnRCYXNlPFQ+PjtcbiAgQElucHV0KCkgYWdncmVnYXRlOiBib29sZWFuO1xuICBASW5wdXQoKSBzZWxlY3RUeXBlOiBTZWxlY3RUeXBlO1xuICBASW5wdXQoKSByb3dDbGFzczogKHJvdzogVCwgaW5kZXg/OiBudW1iZXIpID0+IHN0cmluZztcblxuICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwge3N0YXRpYzogZmFsc2V9KSB2aWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MudGFibGUtYm9keScpIHByaXZhdGUgcmVhZG9ubHkgdGFibGVCb2R5Q2xhc3MgPSB0cnVlO1xuXG4gIHNldCBkYXRhKGRhdGE6IFRbXSkge1xuICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICB9XG5cbiAgZ2V0IGRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cblxuICBkaWN0OiBJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT47XG4gIGxvY2tlZDogVGFibGVDb2x1bW5bXSA9IFtdO1xuICB1bmxvY2tlZDogVGFibGVDb2x1bW5bXSA9IFtdO1xuICBzZWxlY3RUeXBlRW51bSA9IFNlbGVjdFR5cGU7XG4gIGxvY2tlZEZsZXg6IG51bWJlcjtcbiAgbG9ja2VkV2lkdGg6IG51bWJlcjtcbiAgdG90YWxGbGV4OiBudW1iZXI7XG4gIHRvdGFsV2lkdGg6IG51bWJlcjtcblxuICBwcml2YXRlIF9jb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW107XG4gIHByaXZhdGUgX2FsaXZlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfZGF0YTogVFtdO1xuICBwcml2YXRlIF9oaWRkZW5Db2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHNldCBjb2x1bW5zKGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pIHtcbiAgICB0aGlzLl9jb2x1bW5zID0gY29sdW1ucztcbiAgICB0aGlzLmxvY2tlZCA9IHRoaXMuX2NvbHVtbnM/LmZpbHRlcigoXykgPT4gXy5sb2NrZWQgPT09IHRydWUpO1xuICAgIHRoaXMudW5sb2NrZWQgPSB0aGlzLl9jb2x1bW5zPy5maWx0ZXIoKF8pID0+IF8ubG9ja2VkID09PSBmYWxzZSk7XG4gICAgY29uc3Qgc3RhcnRXaWR0aCA9IHRoaXMuc2VsZWN0VHlwZSA9PT0gU2VsZWN0VHlwZS5jaGVja0JveCA/IDI4IDogMDtcbiAgICB0aGlzLmxvY2tlZEZsZXggPSB0aGlzLmxvY2tlZC5yZWR1Y2UoKHByZXY6IG51bWJlciwgY3VycjogVGFibGVDb2x1bW4pID0+IHByZXYgKyBjdXJyLmZsZXgsIDApO1xuICAgIHRoaXMubG9ja2VkV2lkdGggPSB0aGlzLmxvY2tlZC5yZWR1Y2UoKHByZXY6IG51bWJlciwgY3VycjogVGFibGVDb2x1bW4pID0+IHByZXYgKyBjdXJyLndpZHRoLCBzdGFydFdpZHRoKTtcbiAgICB0aGlzLnRvdGFsRmxleCA9IHRoaXMuX2NvbHVtbnMucmVkdWNlKChwcmV2OiBudW1iZXIsIGN1cnI6IFRhYmxlQ29sdW1uKSA9PiBwcmV2ICsgY3Vyci5mbGV4LCAwKTtcbiAgICB0aGlzLnRvdGFsV2lkdGggPSB0aGlzLl9jb2x1bW5zLnJlZHVjZSgocHJldjogbnVtYmVyLCBjdXJyOiBUYWJsZUNvbHVtbikgPT4gcHJldiArIGN1cnIud2lkdGgsIHN0YXJ0V2lkdGgpO1xuICB9XG5cbiAgZ2V0IGNvbHVtbnMoKTogVGFibGVDb2x1bW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gIH1cblxuICBsb2NhbGU6IE9ic2VydmFibGU8VGV0YUxvY2FsaXNhdGlvbj47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfc3ZjOiBUYWJsZVNlcnZpY2U8VD4sXG4gICAgICAgICAgICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NvbmZpZzogVGV0YUNvbmZpZ1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcblxuICB9XG5cbiAgc2V0QWN0aXZlUm93KHJvdzogVCkge1xuICAgIHRoaXMuX3N2Yy5zZXRBY3RpdmVSb3cocm93KTtcbiAgfVxuXG4gIC8vIGdldERhdGEgPSAoaW5kZXgsIGNvdW50LCBzdWNjZXNzKSA9PiB7XG4gIC8vICAgY29uc3QgZGF0YSA9IFtdO1xuICAvLyAgIGlmICh0aGlzLmRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgLy8gICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgaW5kZXgpO1xuICAvLyAgICAgY29uc3QgZW5kID0gTWF0aC5taW4oaW5kZXggKyBjb3VudCAtIDEsIHRoaXMuZGF0YS5sZW5ndGggLSAxKTtcbiAgLy8gICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xuICAvLyAgICAgICBkYXRhLnB1c2godGhpcy5kYXRhW2ldKTtcbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIHN1Y2Nlc3MoZGF0YSk7XG4gIC8vIH07XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbGUgPSB0aGlzLl9jb25maWcubG9jYWxlO1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX3N2Yy5jb2x1bW5zLCB0aGlzLl9zdmMuaGlkZGVuQ29sdW1uc10pXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlczogW1RhYmxlQ29sdW1uW10sIHN0cmluZ1tdXSkgPT4ge1xuICAgICAgICBjb25zdCBbY29sdW1ucywgaGlkZGVuQ29sdW1uc10gPSB2YWx1ZXM7XG4gICAgICAgIHRoaXMuX2hpZGRlbkNvbHVtbnMgPSBoaWRkZW5Db2x1bW5zO1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSBBcnJheVV0aWwuZmxhdHRlbihjb2x1bW5zLCAnY29sdW1ucycsIHRydWUpLmZpbHRlcihcbiAgICAgICAgICAoXykgPT4gdGhpcy5faGlkZGVuQ29sdW1ucy5pbmRleE9mKF8ubmFtZSkgPCAwXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fc3ZjLmRpc3BsYXlEYXRhLnBpcGUoXG4gICAgICB0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKVxuICAgICkuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICB0aGlzLmRhdGEgPSBfO1xuICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy52aWV3cG9ydD8uY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3N2Yy5kaWN0LnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgdGhpcy5kaWN0ID0gXztcbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3N2Yy5zY3JvbGxJbmRleFxuICAgICAgLnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKGluZGV4KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnZpZXdwb3J0KSB7XG4gICAgICAgICAgdGhpcy52aWV3cG9ydC5zY3JvbGxUb0luZGV4KGluZGV4LCAnYXV0bycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGAudGFibGUtcm93W2RhdGEtcm93PVwiJHtpbmRleH1cIl1gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICByb3c/LnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuYWN0aXZlUm93XG4gICAgICAucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKF8pID0+IHtcbiAgICAgICAgdGhpcy5hY3RpdmVSb3cgPSBfO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2FsaXZlID0gZmFsc2U7XG4gIH1cblxuICBnZXRBZ2dyZWdhdGVWYWx1ZShjb2x1bW46IFRhYmxlQ29sdW1uKTogbnVtYmVyIHtcbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLnN1bSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U3VtKGNvbHVtbi5uYW1lKTtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5hdmcpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN1bShjb2x1bW4ubmFtZSkgLyB0aGlzLmRhdGEubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLm1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TWluKGNvbHVtbi5uYW1lKTtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5tYXgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE1heChjb2x1bW4ubmFtZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QWdncmVnYXRlVGV4dChjb2x1bW46IFRhYmxlQ29sdW1uKTogc3RyaW5nIHtcbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLnN1bSkge1xuICAgICAgcmV0dXJuICdzdW0nO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLmF2Zykge1xuICAgICAgcmV0dXJuICdhdmcnO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLm1pbikge1xuICAgICAgcmV0dXJuICdtaW4nO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLm1heCkge1xuICAgICAgcmV0dXJuICdtYXgnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB0cmFja1JvdyhpbmRleDogbnVtYmVyLCByb3c6IFQpOiBhbnkge1xuICAgIGlmIChyb3dbJ2lkJ10pIHtcbiAgICAgIHJldHVybiByb3dbJ2lkJ107XG4gICAgfVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIHRyYWNrQ29sdW1ucyhpbmRleDogbnVtYmVyLCBjb2x1bW46IFRhYmxlQ29sdW1uKTogYW55IHtcbiAgICByZXR1cm4gY29sdW1uLm5hbWU7XG4gIH1cblxuICBwcml2YXRlIGdldFN1bShjb2x1bW5OYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YT8ucmVkdWNlKChhY2N1bSwgY3VycmVudCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gcGFyc2VGbG9hdChjdXJyZW50W2NvbHVtbk5hbWVdKTtcbiAgICAgIHJldHVybiBhY2N1bSArIChpc05hTih2YWwpID8gMCA6IHZhbCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcml2YXRlIGdldE1pbihjb2x1bW5OYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YT8ucmVkdWNlKFxuICAgICAgKGFjY3VtLCBjdXJyZW50KSA9PlxuICAgICAgICBhY2N1bSAhPSBudWxsICYmIGFjY3VtIDw9IGN1cnJlbnRbY29sdW1uTmFtZV1cbiAgICAgICAgICA/IGFjY3VtXG4gICAgICAgICAgOiBjdXJyZW50W2NvbHVtbk5hbWVdLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldE1heChjb2x1bW5OYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YT8ucmVkdWNlKFxuICAgICAgKGFjY3VtLCBjdXJyZW50KSA9PlxuICAgICAgICBhY2N1bSAhPSBudWxsICYmIGFjY3VtID49IGN1cnJlbnRbY29sdW1uTmFtZV1cbiAgICAgICAgICA/IGFjY3VtXG4gICAgICAgICAgOiBjdXJyZW50W2NvbHVtbk5hbWVdLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbn1cbiIsIjxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgKm5nSWY9XCJ2aXJ0dWFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWJsZS1ib2R5LWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtU2l6ZV09XCIyOFwiPlxuICA8bmctY29udGFpbmVyICpjZGtWaXJ0dWFsRm9yPVwibGV0IHJvdyBvZiBkYXRhO3RlbXBsYXRlQ2FjaGVTaXplOiAwOyBsZXQgcm93SW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tSb3c7XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvZHlUZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93LCByb3dJbmRleDogcm93SW5kZXh9XCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG48ZGl2ICpuZ0lmPVwiIXZpcnR1YWxcIlxuICAgICBjbGFzcz1cInRhYmxlLWJvZHktY29udGFpbmVyXCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiBkYXRhOyBsZXQgcm93SW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tSb3c7XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvZHlUZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93LCByb3dJbmRleDogcm93SW5kZXh9XCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWdncmVnYXRlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFnZ1RlbXBsYXRlO1wiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2JvZHlUZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgPGRpdiBjbGFzcz1cInRhYmxlLXJvd1wiXG4gICAgICAgKGNsaWNrKT1cInNldEFjdGl2ZVJvdyhyb3cpXCJcbiAgICAgICAoY29udGV4dG1lbnUpPVwic2V0QWN0aXZlUm93KHJvdylcIlxuICAgICAgIFthdHRyLmRhdGEtcm93XT1cInJvd0luZGV4XCJcbiAgICAgICBbY2xhc3MudGFibGUtcm93X29kZF09XCJyb3dJbmRleCAlIDIgPT09IDFcIlxuICAgICAgIFtuZ0NsYXNzXT1cInJvd0NsYXNzID8gcm93Q2xhc3Mocm93LCByb3dJbmRleCkgOiAnJ1wiXG4gICAgICAgW2NsYXNzLnRhYmxlLXJvd19zZWxlY3RlZF09XCJzZWxlY3RlZFJvd3MgJiYgc2VsZWN0ZWRSb3dzLmluZGV4T2Yocm93KSA+PSAwXCJcbiAgICAgICBbc3R5bGUuZmxleC1ncm93XT1cInRvdGFsRmxleFwiXG4gICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwidG90YWxXaWR0aFwiXG4gICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJ0b3RhbFdpZHRoXCI+XG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLXJvd19sb2NrZWRcIlxuICAgICAgICAgKm5nSWY9XCJsb2NrZWQubGVuZ3RoID4gMFwiXG4gICAgICAgICBbc3R5bGUuZmxleC1ncm93XT1cImxvY2tlZEZsZXhcIlxuICAgICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwibG9ja2VkV2lkdGhcIlxuICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJsb2NrZWRXaWR0aFwiXG4gICAgICAgICBbc3R5bGUuekluZGV4XT1cInJvdyA9PT0gYWN0aXZlUm93ID8gMSA6ICd1bnNldCdcIj5cbiAgICAgIDx0ZXRhLXNlbGVjdGlvbi1jZWxsICpuZ0lmPVwic2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAyOHB4O1wiPjwvdGV0YS1zZWxlY3Rpb24tY2VsbD5cbiAgICAgIDx0ZXRhLWNlbGxcbiAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBsb2NrZWQ7IGxldCBjb2xJbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0NvbHVtbnM7XCJcbiAgICAgICAgW2F0dHIuZGF0YS1yb3ddPVwicm93SW5kZXhcIlxuICAgICAgICBbYXR0ci5kYXRhLWNvbHVtbl09XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgW2ZpbHRlck9wdGlvbnNdPVwiZGljdD9kaWN0W2NvbHVtbi5uYW1lXTpbXVwiXG4gICAgICAgIFtkaWN0XT1cImRpY3RcIlxuICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5jZWxsQ2xhc3NcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcbiAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJjb2x1bW4uZmxleFwiXG4gICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImNvbHVtbi53aWR0aFwiXG4gICAgICA+PC90ZXRhLWNlbGw+XG4gICAgPC9kaXY+XG4gICAgPHRldGEtc2VsZWN0aW9uLWNlbGwgKm5nSWY9XCJzZWxlY3RUeXBlID09PSBzZWxlY3RUeXBlRW51bS5jaGVja0JveCAmJiBsb2NrZWQubGVuZ3RoIDwgMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDI4cHg7XCI+PC90ZXRhLXNlbGVjdGlvbi1jZWxsPlxuICAgIDx0ZXRhLWNlbGxcbiAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdW5sb2NrZWQ7IGxldCBjb2xJbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0NvbHVtbnM7XCJcbiAgICAgIFthdHRyLmRhdGEtcm93XT1cInJvd0luZGV4XCJcbiAgICAgIFthdHRyLmRhdGEtY29sdW1uXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgIFtmaWx0ZXJPcHRpb25zXT1cImRpY3Q/ZGljdFtjb2x1bW4ubmFtZV06W11cIlxuICAgICAgW2RpY3RdPVwiZGljdFwiXG4gICAgICBbcm93XT1cInJvd1wiXG4gICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2VsbENsYXNzXCJcbiAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxuICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJjb2x1bW4uZmxleFwiXG4gICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJjb2x1bW4ud2lkdGhcIlxuICAgID48L3RldGEtY2VsbD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FnZ1RlbXBsYXRlPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9jYWxlIHwgYXN5bmMgYXMgbG9jXCI+XG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLXJvd1wiXG4gICAgICAgICAqbmdJZj1cImFnZ3JlZ2F0ZVwiXG4gICAgICAgICBbY2xhc3MudGFibGUtcm93X3ZpcnR1YWxdPVwidmlydHVhbFwiXG4gICAgICAgICBbc3R5bGUuZmxleC1ncm93XT1cInZpcnR1YWwgPyB0b3RhbEZsZXggOiAnJ1wiXG4gICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJ2aXJ0dWFsID8gdG90YWxXaWR0aCA6ICcnXCJcbiAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwidmlydHVhbCA/IHRvdGFsV2lkdGggOiAnJ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJvd19sb2NrZWRcIlxuICAgICAgICAgICAqbmdJZj1cImxvY2tlZC5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJsb2NrZWRGbGV4XCJcbiAgICAgICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwibG9ja2VkV2lkdGhcIlxuICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImxvY2tlZFdpZHRoXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZWxsIGFsaWduLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcbiAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAyOHB4O1wiPlxuICAgICAgICAgIDx0ZXRhLWljb24gW25hbWVdPVwiJ3N1bUNvbG9yJ1wiPjwvdGV0YS1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNlbGwgY2VsbC1jb21wb25lbnQganVzdGlmeS1jb250ZW50LWVuZFwiXG4gICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBsb2NrZWQ7IGxldCBjb2xJbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0NvbHVtbnM7XCJcbiAgICAgICAgICAgICBbYXR0ci5kYXRhLWNvbHVtbl09XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmNlbGxDbGFzc1wiXG4gICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXG4gICAgICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJjb2x1bW4uZmxleFwiXG4gICAgICAgICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwiY29sdW1uLndpZHRoXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY2VsbC10ZXh0IGNlbGwtdGV4dF9udW1lcmljIGZvbnQtdGl0bGUtM1wiPlxuICAgICAgICAgIHt7bG9jW2dldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKV19fTpcbiAgICAgICAgICB7e2dldEFnZ3JlZ2F0ZVZhbHVlKGNvbHVtbikgfCB0ZXRhTnVtYmVyIDogMn19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjZWxsIGFsaWduLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcbiAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMjhweDtcIlxuICAgICAgICAgICAqbmdJZj1cInNlbGVjdFR5cGUgPT09IHNlbGVjdFR5cGVFbnVtLmNoZWNrQm94ICYmIGxvY2tlZC5sZW5ndGggPCAxXCI+XG4gICAgICAgIDx0ZXRhLWljb24gW25hbWVdPVwiJ3N1bUNvbG9yJ1wiPjwvdGV0YS1pY29uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2VsbCBjZWxsLWNvbXBvbmVudCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCJcbiAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiB1bmxvY2tlZDsgbGV0IGNvbEluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQ29sdW1ucztcIlxuICAgICAgICAgICBbYXR0ci5kYXRhLWNvbHVtbl09XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5jZWxsQ2xhc3NcIlxuICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcbiAgICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJjb2x1bW4uZmxleFwiXG4gICAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImNvbHVtbi53aWR0aFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjZWxsLXRleHQgY2VsbC10ZXh0X251bWVyaWMgZm9udC10aXRsZS0zXCI+XG4gICAgICAgIHt7bG9jW2dldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKV19fTpcbiAgICAgICAge3tnZXRBZ2dyZWdhdGVWYWx1ZShjb2x1bW4pIHwgdGV0YU51bWJlciA6IDJ9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|