@sumaris-net/ngx-components 18.23.54 → 18.23.55-beta.1
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/esm2022/src/app/core/table/testing/table2.testing.mjs +3 -3
- package/esm2022/src/app/shared/directives/cell-selection/cell-identifier.directive.mjs +9 -2
- package/esm2022/src/app/shared/directives/cell-selection/cell-selection.service.mjs +17 -4
- package/fesm2022/sumaris-net.ngx-components.mjs +25 -6
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/shared/directives/cell-selection/cell-identifier.directive.d.ts +1 -0
- package/src/app/shared/directives/cell-selection/cell-selection.service.d.ts +2 -0
- package/src/app/shared/inputs.d.ts +1 -1
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { DestroyRef, Directive, inject, input } from '@angular/core';
|
|
2
2
|
import { APP_CELL_SELECTION_SERVICE_TOKEN } from './cell-selection.service';
|
|
3
3
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
|
+
import { filter } from 'rxjs/operators';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
export class CellIdentifierDirective {
|
|
6
7
|
cellId = input.required({ alias: 'appCellId' });
|
|
8
|
+
isInitialized = false;
|
|
7
9
|
isCellSelected = false;
|
|
8
10
|
isDragging = false;
|
|
9
11
|
service = inject(APP_CELL_SELECTION_SERVICE_TOKEN);
|
|
@@ -11,13 +13,18 @@ export class CellIdentifierDirective {
|
|
|
11
13
|
ngOnInit() {
|
|
12
14
|
// Listen to service selection changes and emit
|
|
13
15
|
this.service.selectionChangeSubject
|
|
14
|
-
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
16
|
+
.pipe(filter(() => this.isInitialized), takeUntilDestroyed(this.destroyRef))
|
|
15
17
|
.subscribe(() => (this.isCellSelected = this.service.isCellSelected(this.cellId())));
|
|
18
|
+
this.isInitialized = true;
|
|
16
19
|
}
|
|
17
20
|
async handleMouseDown(event) {
|
|
21
|
+
if (!this.isInitialized)
|
|
22
|
+
return;
|
|
18
23
|
await this.service.handleCellMouseDown(event, this.cellId());
|
|
19
24
|
}
|
|
20
25
|
async handleMouseEnter(event) {
|
|
26
|
+
if (!this.isInitialized)
|
|
27
|
+
return;
|
|
21
28
|
await this.service.handleCellMouseEnter(event, this.cellId());
|
|
22
29
|
}
|
|
23
30
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CellIdentifierDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
@@ -38,4 +45,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
38
45
|
},
|
|
39
46
|
}]
|
|
40
47
|
}] });
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1pZGVudGlmaWVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL2RpcmVjdGl2ZXMvY2VsbC1zZWxlY3Rpb24vY2VsbC1pZGVudGlmaWVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBVyxNQUFNLDBCQUEwQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFjeEMsTUFBTSxPQUFPLHVCQUF1QjtJQUNsQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBSSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBRTNDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDcEIsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUN2QixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRVosT0FBTyxHQUFHLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQ25ELFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFakQsUUFBUTtRQUNOLCtDQUErQztRQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQjthQUNoQyxJQUFJLENBQ0gsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDaEMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUNwQzthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFUyxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQWlCO1FBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFDaEMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRVMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQWlCO1FBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFDaEMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNoRSxDQUFDO3dHQTdCVSx1QkFBdUI7NEZBQXZCLHVCQUF1Qjs7NEZBQXZCLHVCQUF1QjtrQkFabkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLElBQUksRUFBRTt3QkFDSixhQUFhLEVBQUUseUJBQXlCO3dCQUN4QyxjQUFjLEVBQUUsMEJBQTBCO3dCQUMxQyx1QkFBdUIsRUFBRSxnQkFBZ0I7d0JBQ3pDLHVCQUF1QixFQUFFLFlBQVk7d0JBQ3JDLG9CQUFvQixFQUFFLGdCQUFnQjt3QkFDdEMseUJBQXlCLEVBQUUscUJBQXFCO3FCQUNqRDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc3Ryb3lSZWYsIERpcmVjdGl2ZSwgaW5qZWN0LCBpbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBUFBfQ0VMTF9TRUxFQ1RJT05fU0VSVklDRV9UT0tFTiwgSUNlbGxJZCB9IGZyb20gJy4vY2VsbC1zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1thcHBDZWxsSWRdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaG9zdDoge1xuICAgICcobW91c2Vkb3duKSc6ICdoYW5kbGVNb3VzZURvd24oJGV2ZW50KScsXG4gICAgJyhtb3VzZWVudGVyKSc6ICdoYW5kbGVNb3VzZUVudGVyKCRldmVudCknLFxuICAgICdbY2xhc3MuY2VsbC1zZWxlY3RlZF0nOiAnaXNDZWxsU2VsZWN0ZWQnLFxuICAgICdbY2xhc3MuY2VsbC1kcmFnZ2luZ10nOiAnaXNEcmFnZ2luZycsXG4gICAgJ1thdHRyLmRhdGEtcm93LWlkXSc6ICdjZWxsSWQoKS5yb3dJZCcsXG4gICAgJ1thdHRyLmRhdGEtY29sdW1uLW5hbWVdJzogJ2NlbGxJZCgpLmNvbHVtbk5hbWUnLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBDZWxsSWRlbnRpZmllckRpcmVjdGl2ZTxDIGV4dGVuZHMgSUNlbGxJZCA9IElDZWxsSWQ+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY2VsbElkID0gaW5wdXQucmVxdWlyZWQ8Qz4oeyBhbGlhczogJ2FwcENlbGxJZCcgfSk7XG5cbiAgcHJpdmF0ZSBpc0luaXRpYWxpemVkID0gZmFsc2U7XG4gIHByb3RlY3RlZCBpc0NlbGxTZWxlY3RlZCA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgaXNEcmFnZ2luZyA9IGZhbHNlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VydmljZSA9IGluamVjdChBUFBfQ0VMTF9TRUxFQ1RJT05fU0VSVklDRV9UT0tFTik7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBMaXN0ZW4gdG8gc2VydmljZSBzZWxlY3Rpb24gY2hhbmdlcyBhbmQgZW1pdFxuICAgIHRoaXMuc2VydmljZS5zZWxlY3Rpb25DaGFuZ2VTdWJqZWN0XG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuaXNJbml0aWFsaXplZCksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+ICh0aGlzLmlzQ2VsbFNlbGVjdGVkID0gdGhpcy5zZXJ2aWNlLmlzQ2VsbFNlbGVjdGVkKHRoaXMuY2VsbElkKCkpKSk7XG4gICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVNb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkgcmV0dXJuO1xuICAgIGF3YWl0IHRoaXMuc2VydmljZS5oYW5kbGVDZWxsTW91c2VEb3duKGV2ZW50LCB0aGlzLmNlbGxJZCgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVNb3VzZUVudGVyKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHJldHVybjtcbiAgICBhd2FpdCB0aGlzLnNlcnZpY2UuaGFuZGxlQ2VsbE1vdXNlRW50ZXIoZXZlbnQsIHRoaXMuY2VsbElkKCkpO1xuICB9XG59XG4iXX0=
|
|
@@ -17,6 +17,8 @@ export class CellSelectionService {
|
|
|
17
17
|
_selectedCells = [];
|
|
18
18
|
selectionStartCell = null;
|
|
19
19
|
isSelecting = false;
|
|
20
|
+
currentRangeColumnFirstIndex = -1;
|
|
21
|
+
currentRangeColumnLastIndex = -1;
|
|
20
22
|
// Drag state
|
|
21
23
|
draggedCells = [];
|
|
22
24
|
dragStartCell = null;
|
|
@@ -59,6 +61,11 @@ export class CellSelectionService {
|
|
|
59
61
|
this.selectionRightClickSubject.next(event);
|
|
60
62
|
return;
|
|
61
63
|
}
|
|
64
|
+
// Prevent selection if cell's column is not selectable
|
|
65
|
+
if (!this.selectableColumns.includes(cellId.columnName)) {
|
|
66
|
+
this.emitSelection([], false, false);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
62
69
|
const isCtrlKey = event.ctrlKey || event.metaKey;
|
|
63
70
|
const isShiftKey = event.shiftKey;
|
|
64
71
|
if (!isShiftKey && !isCtrlKey) {
|
|
@@ -93,6 +100,8 @@ export class CellSelectionService {
|
|
|
93
100
|
startSelection(cellId) {
|
|
94
101
|
this.selectionStartCell = cellId;
|
|
95
102
|
this.isSelecting = true;
|
|
103
|
+
this.currentRangeColumnFirstIndex = -1;
|
|
104
|
+
this.currentRangeColumnLastIndex = -1;
|
|
96
105
|
this.emitSelection([cellId], false, false);
|
|
97
106
|
}
|
|
98
107
|
startDragSelection(cellId) {
|
|
@@ -133,6 +142,8 @@ export class CellSelectionService {
|
|
|
133
142
|
}
|
|
134
143
|
calculateRangeCells(endCell) {
|
|
135
144
|
if (isEmptyArray(this.selectedCells)) {
|
|
145
|
+
this.currentRangeColumnFirstIndex = -1;
|
|
146
|
+
this.currentRangeColumnLastIndex = -1;
|
|
136
147
|
return [endCell];
|
|
137
148
|
}
|
|
138
149
|
const lastSelectedCell = this.findFirstSelectedCell(this.selectedCells);
|
|
@@ -144,11 +155,13 @@ export class CellSelectionService {
|
|
|
144
155
|
const lastRowId = Math.max(startCell.rowId, endCell.rowId);
|
|
145
156
|
const startColumnIndex = this.selectableColumns.indexOf(startCell.columnName);
|
|
146
157
|
const endColumnIndex = this.selectableColumns.indexOf(endCell.columnName);
|
|
147
|
-
|
|
148
|
-
|
|
158
|
+
if (endColumnIndex !== -1) {
|
|
159
|
+
this.currentRangeColumnFirstIndex = Math.min(startColumnIndex, endColumnIndex);
|
|
160
|
+
this.currentRangeColumnLastIndex = Math.max(startColumnIndex, endColumnIndex);
|
|
161
|
+
}
|
|
149
162
|
// Iterate columns and rows
|
|
150
163
|
const rangeCells = [];
|
|
151
|
-
for (let i =
|
|
164
|
+
for (let i = this.currentRangeColumnFirstIndex; i <= this.currentRangeColumnLastIndex; i++) {
|
|
152
165
|
const columnName = this.selectableColumns[i];
|
|
153
166
|
for (let rowId = firstRowId; rowId <= lastRowId; rowId++) {
|
|
154
167
|
rangeCells.push(this.new({ rowId: rowId, columnName: columnName }));
|
|
@@ -183,4 +196,4 @@ export class CellSelectionService {
|
|
|
183
196
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CellSelectionService, decorators: [{
|
|
184
197
|
type: Injectable
|
|
185
198
|
}], ctorParameters: () => [] });
|
|
186
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1zZWxlY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL2RpcmVjdGl2ZXMvY2VsbC1zZWxlY3Rpb24vY2VsbC1zZWxlY3Rpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRy9DLE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLElBQUksY0FBYyxDQUF1QixzQkFBc0IsQ0FBQyxDQUFDO0FBQ2pILE1BQU0sQ0FBQyxNQUFNLHVDQUF1QyxHQUFHLElBQUksY0FBYyxDQUFrQyw0QkFBNEIsQ0FBQyxDQUFDO0FBa0J6STs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixnQkFBZ0I7SUFDaEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyx1Q0FBdUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLGlCQUFpQixHQUFhLEVBQUUsQ0FBQztJQUVqQyxrQkFBa0I7SUFDVixjQUFjLEdBQVEsRUFBRSxDQUFDO0lBQ3pCLGtCQUFrQixHQUFhLElBQUksQ0FBQztJQUNwQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBRTVCLGFBQWE7SUFDYixZQUFZLEdBQVEsRUFBRSxDQUFDO0lBQ2YsYUFBYSxHQUFhLElBQUksQ0FBQztJQUMvQixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRTNCLGNBQWM7SUFDTCxzQkFBc0IsR0FBRyxJQUFJLE9BQU8sRUFBeUIsQ0FBQztJQUM5RCwwQkFBMEIsR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO0lBRWhFLHNCQUFzQjtJQUNM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SSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUMxRixDQUFDO0lBQ0osQ0FBQztJQUVPLGdCQUFnQixDQUFDLGFBQWtCLEVBQUUsS0FBYSxFQUFFLFdBQW1CO1FBQzdFLHlDQUF5QztRQUN6QyxPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUgsQ0FBQzt3R0E5TVUsb0JBQW9COzRHQUFwQixvQkFBb0I7OzRGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc0VtcHR5QXJyYXkgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRXF1YWxzRm4gfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBBUFBfQ0VMTF9TRUxFQ1RJT05fU0VSVklDRV9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDZWxsU2VsZWN0aW9uU2VydmljZT4oJ0NlbGxTZWxlY3Rpb25TZXJ2aWNlJyk7XG5leHBvcnQgY29uc3QgQVBQX0NFTExfU0VMRUNUSU9OX1NFUlZJQ0VfQ09ORklHX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPENlbGxTZWxlY3Rpb25TZXJ2aWNlQ29uZmlnPGFueT4+KCdDZWxsU2VsZWN0aW9uU2VydmljZUNvbmZpZycpO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDZWxsSWQge1xuICByb3dJZDogbnVtYmVyO1xuICBjb2x1bW5OYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2VsbFNlbGVjdGlvbkV2ZW50PEMgZXh0ZW5kcyBJQ2VsbElkPiB7XG4gIHNlbGVjdGVkQ2VsbHM6IENbXTtcbiAgaXNSYW5nZVNlbGVjdGlvbjogYm9vbGVhbjtcbiAgaXNUb2dnbGVTZWxlY3Rpb246IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2VsbFNlbGVjdGlvblNlcnZpY2VDb25maWc8QyBleHRlbmRzIElDZWxsSWQ+IHtcbiAgZXF1YWxzOiBFcXVhbHNGbjxDPjtcbiAgbmV3OiAoY2VsbElkOiBJQ2VsbElkKSA9PiBDO1xufVxuXG4vKipcbiAqIFNlcnZpY2UgdG8gbWFuYWdlIGNlbGwgc2VsZWN0aW9uIHN0YXRlIGFjcm9zcyBtdWx0aXBsZSBkaXJlY3RpdmUgaW5zdGFuY2VzLlxuICogVGhpcyBzZXJ2aWNlIHNob3VsZCBiZSBwcm92aWRlZCBhdCB0aGUgY29tcG9uZW50IGxldmVsIChub3Qgcm9vdCkgdG8gZW5zdXJlXG4gKiBwcm9wZXIgaXNvbGF0aW9uIGJldHdlZW4gZGlmZmVyZW50IHRhYmxlIGluc3RhbmNlcy5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENlbGxTZWxlY3Rpb25TZXJ2aWNlPEMgZXh0ZW5kcyBJQ2VsbElkID0gSUNlbGxJZD4ge1xuICAvLyBDb25maWd1cmF0aW9uXG4gIGNvbmZpZyA9IGluamVjdChBUFBfQ0VMTF9TRUxFQ1RJT05fU0VSVklDRV9DT05GSUdfVE9LRU4sIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHNlbGVjdGFibGVDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIFNlbGVjdGlvbiBzdGF0ZVxuICBwcml2YXRlIF9zZWxlY3RlZENlbGxzOiBDW10gPSBbXTtcbiAgcHJpdmF0ZSBzZWxlY3Rpb25TdGFydENlbGw6IEMgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpc1NlbGVjdGluZyA9IGZhbHNlO1xuXG4gIC8vIERyYWcgc3RhdGVcbiAgZHJhZ2dlZENlbGxzOiBDW10gPSBbXTtcbiAgcHJpdmF0ZSBkcmFnU3RhcnRDZWxsOiBDIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgaXNEcmFnZ2luZyA9IGZhbHNlO1xuXG4gIC8vIE9ic2VydmFibGVzXG4gIHJlYWRvbmx5IHNlbGVjdGlvbkNoYW5nZVN1YmplY3QgPSBuZXcgU3ViamVjdDxDZWxsU2VsZWN0aW9uRXZlbnQ8Qz4+KCk7XG4gIHJlYWRvbmx5IHNlbGVjdGlvblJpZ2h0Q2xpY2tTdWJqZWN0ID0gbmV3IFN1YmplY3Q8TW91c2VFdmVudD4oKTtcblxuICAvLyBPdmVycmlkYWJsZSBtZXRob2RzXG4gIHByaXZhdGUgcmVhZG9ubHkgX2VxdWFsczogRXF1YWxzRm48Qz47XG4gIHByaXZhdGUgcmVhZG9ubHkgX25ldzogKGNlbGxJZDogSUNlbGxJZCkgPT4gQztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9lcXVhbHMgPSB0aGlzLmNvbmZpZz8uZXF1YWxzO1xuICAgIHRoaXMuX25ldyA9IHRoaXMuY29uZmlnPy5uZXc7XG4gIH1cblxuICAvLyBPdmVycmlkZSBtZXRob2RcbiAgZXF1YWxzKGNlbGwxOiBDLCBjZWxsMjogQyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9lcXVhbHMgPyB0aGlzLl9lcXVhbHMoY2VsbDEsIGNlbGwyKSA6IGNlbGwxPy5yb3dJZCA9PT0gY2VsbDI/LnJvd0lkICYmIGNlbGwxPy5jb2x1bW5OYW1lID09PSBjZWxsMj8uY29sdW1uTmFtZTtcbiAgfVxuXG4gIC8vIE92ZXJyaWRlIG1ldGhvZFxuICBuZXcoY2VsbElkOiBJQ2VsbElkKTogQyB7XG4gICAgcmV0dXJuIHRoaXMuX25ldyA/IHRoaXMuX25ldyhjZWxsSWQpIDogKGNlbGxJZCBhcyBDKTtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZENlbGxzKCk6IENbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkQ2VsbHM7XG4gIH1cblxuICBzZXQgc2VsZWN0ZWRDZWxscyh2YWx1ZTogQ1tdKSB7XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uKHZhbHVlLCBmYWxzZSwgZmFsc2UpO1xuICB9XG5cbiAgaXNDZWxsU2VsZWN0ZWQoY2VsbElkOiBDKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDZWxscy5zb21lKChzZWxlY3RlZENlbGwpID0+IHRoaXMuZXF1YWxzKHNlbGVjdGVkQ2VsbCwgY2VsbElkKSk7XG4gIH1cblxuICBpc0NlbGxEcmFnZ2VkKGNlbGxJZDogQyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRyYWdnZWRDZWxscy5zb21lKChzZWxlY3RlZENlbGwpID0+IHRoaXMuZXF1YWxzKHNlbGVjdGVkQ2VsbCwgY2VsbElkKSk7XG4gIH1cblxuICAvLyBDb3JlIHNlbGVjdGlvbiBsb2dpYyAobW92ZWQgZnJvbSBDZWxsSWRlbnRpZmllckRpcmVjdGl2ZSlcbiAgYXN5bmMgaGFuZGxlQ2VsbE1vdXNlRG93bihldmVudDogTW91c2VFdmVudCwgY2VsbElkOiBDKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmIChldmVudC5idXR0b24gPT09IDIpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25SaWdodENsaWNrU3ViamVjdC5uZXh0KGV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc0N0cmxLZXkgPSBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXk7XG4gICAgY29uc3QgaXNTaGlmdEtleSA9IGV2ZW50LnNoaWZ0S2V5O1xuXG4gICAgaWYgKCFpc1NoaWZ0S2V5ICYmICFpc0N0cmxLZXkpIHtcbiAgICAgIHRoaXMuc3RhcnRTZWxlY3Rpb24oY2VsbElkKTtcbiAgICAgIC8vIHRoaXMuc3RhcnREcmFnU2VsZWN0aW9uKGNlbGxJZCk7XG4gICAgfSBlbHNlIGlmIChpc0N0cmxLZXkpIHtcbiAgICAgIHRoaXMudG9nZ2xlQ2VsbFNlbGVjdGlvbihjZWxsSWQpO1xuICAgIH0gZWxzZSBpZiAoaXNTaGlmdEtleSkge1xuICAgICAgdGhpcy5zZWxlY3RSYW5nZShjZWxsSWQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGhhbmRsZUNlbGxNb3VzZUVudGVyKGV2ZW50OiBNb3VzZUV2ZW50LCBjZWxsSWQ6IEMpIHtcbiAgICAvLyBUT0RPIGNoZWNrIGlmIG5leHQgY2VsbCBjYW4gYmUgc2VsZWN0ZWRcblxuICAgIGlmICh0aGlzLmlzU2VsZWN0aW5nICYmIHRoaXMuc2VsZWN0aW9uU3RhcnRDZWxsKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbihjZWxsSWQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0RyYWdnaW5nICYmIHRoaXMuZHJhZ1N0YXJ0Q2VsbCkge1xuICAgICAgdGhpcy51cGRhdGVEcmFnZ2VkQ2VsbHMoY2VsbElkKTtcbiAgICB9XG4gIH1cblxuICBlbmRNb3VzZU1vdmUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNTZWxlY3RpbmcpIHtcbiAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb25TdGF0ZSgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0RyYWdnaW5nKSB7XG4gICAgICB0aGlzLnJlc2V0RHJhZ1N0YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUHJpdmF0ZSBoZWxwZXIgbWV0aG9kc1xuICBwcml2YXRlIHN0YXJ0U2VsZWN0aW9uKGNlbGxJZDogQyk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uU3RhcnRDZWxsID0gY2VsbElkO1xuICAgIHRoaXMuaXNTZWxlY3RpbmcgPSB0cnVlO1xuICAgIHRoaXMuZW1pdFNlbGVjdGlvbihbY2VsbElkXSwgZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnREcmFnU2VsZWN0aW9uKGNlbGxJZDogQyk6IHZvaWQge1xuICAgIHRoaXMuZHJhZ1N0YXJ0Q2VsbCA9IGNlbGxJZDtcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgIHRoaXMuZHJhZ2dlZENlbGxzID0gW2NlbGxJZF07XG4gICAgLy8gdGhpcy5lbWl0U2VsZWN0aW9uKFtjZWxsSWRdLCBmYWxzZSwgZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGVDZWxsU2VsZWN0aW9uKGNlbGxJZDogQyk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRDZWxscyA9IFsuLi50aGlzLnNlbGVjdGVkQ2VsbHNdO1xuICAgIGNvbnN0IGNlbGxJbmRleCA9IGN1cnJlbnRDZWxscy5maW5kSW5kZXgoKGMpID0+IHRoaXMuZXF1YWxzKGMsIGNlbGxJZCkpO1xuXG4gICAgaWYgKGNlbGxJbmRleCA+PSAwKSB7XG4gICAgICBjdXJyZW50Q2VsbHMuc3BsaWNlKGNlbGxJbmRleCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRDZWxscy5wdXNoKGNlbGxJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uKGN1cnJlbnRDZWxscywgZmFsc2UsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RSYW5nZShlbmRDZWxsOiBDKTogdm9pZCB7XG4gICAgY29uc3QgcmFuZ2VDZWxscyA9IHRoaXMuY2FsY3VsYXRlUmFuZ2VDZWxscyhlbmRDZWxsKTtcbiAgICB0aGlzLmVtaXRTZWxlY3Rpb24ocmFuZ2VDZWxscywgdHJ1ZSwgZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWxlY3Rpb24oY3VycmVudENlbGw6IEMpOiB2b2lkIHtcbiAgICBjb25zdCByYW5nZUNlbGxzID0gdGhpcy5jYWxjdWxhdGVSYW5nZUJldHdlZW5DZWxscyh0aGlzLnNlbGVjdGlvblN0YXJ0Q2VsbCwgY3VycmVudENlbGwpO1xuICAgIHRoaXMuZW1pdFNlbGVjdGlvbihyYW5nZUNlbGxzLCB0cnVlLCBmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURyYWdnZWRDZWxscyhjdXJyZW50Q2VsbDogQyk6IHZvaWQge1xuICAgIC8vIHRoaXMuZHJhZ2dlZENlbGxzLnNldChyYW5nZUNlbGxzKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFNlbGVjdGlvbihjZWxsczogQ1tdLCBpc1JhbmdlOiBib29sZWFuLCBpc1RvZ2dsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX3NlbGVjdGVkQ2VsbHMgPSBjZWxscztcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZVN1YmplY3QubmV4dCh7XG4gICAgICBzZWxlY3RlZENlbGxzOiBjZWxscyxcbiAgICAgIGlzUmFuZ2VTZWxlY3Rpb246IGlzUmFuZ2UsXG4gICAgICBpc1RvZ2dsZVNlbGVjdGlvbjogaXNUb2dnbGUsXG4gICAgfSk7XG4gIH1cblxuICBjYWxjdWxhdGVSYW5nZUNlbGxzKGVuZENlbGw6IEMpOiBDW10ge1xuICAgIGlmIChpc0VtcHR5QXJyYXkodGhpcy5zZWxlY3RlZENlbGxzKSkge1xuICAgICAgcmV0dXJuIFtlbmRDZWxsXTtcbiAgICB9XG5cbiAgICBjb25zdCBsYXN0U2VsZWN0ZWRDZWxsID0gdGhpcy5maW5kRmlyc3RTZWxlY3RlZENlbGwodGhpcy5zZWxlY3RlZENlbGxzKTtcbiAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVSYW5nZUJldHdlZW5DZWxscyhsYXN0U2VsZWN0ZWRDZWxsLCBlbmRDZWxsKTtcbiAgfVxuXG4gIGNhbGN1bGF0ZVJhbmdlQmV0d2VlbkNlbGxzKHN0YXJ0Q2VsbDogQywgZW5kQ2VsbDogQyk6IENbXSB7XG4gICAgLy8gR2V0IGZpcnN0IGNlbGwgY29vcmRpbmF0ZXMsIHRoZW4gYWRkIHRoaXMgY2VsbCBhcyBhIHJhbmdlXG4gICAgY29uc3QgZmlyc3RSb3dJZCA9IE1hdGgubWluKHN0YXJ0Q2VsbC5yb3dJZCwgZW5kQ2VsbC5yb3dJZCk7XG4gICAgY29uc3QgbGFzdFJvd0lkID0gTWF0aC5tYXgoc3RhcnRDZWxsLnJvd0lkLCBlbmRDZWxsLnJvd0lkKTtcbiAgICBjb25zdCBzdGFydENvbHVtbkluZGV4ID0gdGhpcy5zZWxlY3RhYmxlQ29sdW1ucy5pbmRleE9mKHN0YXJ0Q2VsbC5jb2x1bW5OYW1lKTtcbiAgICBjb25zdCBlbmRDb2x1bW5JbmRleCA9IHRoaXMuc2VsZWN0YWJsZUNvbHVtbnMuaW5kZXhPZihlbmRDZWxsLmNvbHVtbk5hbWUpO1xuICAgIGNvbnN0IGZpcnN0Q29sdW1uSW5kZXggPSBNYXRoLm1pbihzdGFydENvbHVtbkluZGV4LCBlbmRDb2x1bW5JbmRleCk7XG4gICAgY29uc3QgbGFzdENvbHVtbkluZGV4ID0gTWF0aC5tYXgoc3RhcnRDb2x1bW5JbmRleCwgZW5kQ29sdW1uSW5kZXgpO1xuICAgIC8vIEl0ZXJhdGUgY29sdW1ucyBhbmQgcm93c1xuICAgIGNvbnN0IHJhbmdlQ2VsbHM6IENbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSBmaXJzdENvbHVtbkluZGV4OyBpIDw9IGxhc3RDb2x1bW5JbmRleDsgaSsrKSB7XG4gICAgICBjb25zdCBjb2x1bW5OYW1lID0gdGhpcy5zZWxlY3RhYmxlQ29sdW1uc1tpXTtcbiAgICAgIGZvciAobGV0IHJvd0lkID0gZmlyc3RSb3dJZDsgcm93SWQgPD0gbGFzdFJvd0lkOyByb3dJZCsrKSB7XG4gICAgICAgIHJhbmdlQ2VsbHMucHVzaCh0aGlzLm5ldyh7IHJvd0lkOiByb3dJZCwgY29sdW1uTmFtZTogY29sdW1uTmFtZSB9KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhbmdlQ2VsbHM7XG4gIH1cblxuICByZXNldFNlbGVjdGlvblN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uU3RhcnRDZWxsID0gbnVsbDtcbiAgICB0aGlzLmlzU2VsZWN0aW5nID0gZmFsc2U7XG4gIH1cblxuICByZXNldERyYWdTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRyYWdTdGFydENlbGwgPSBudWxsO1xuICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgIHRoaXMuZHJhZ2dlZENlbGxzID0gW107XG4gIH1cblxuICBwcml2YXRlIGZpbmRGaXJzdFNlbGVjdGVkQ2VsbChzZWxlY3RlZENlbGxzOiBDW10pOiBDIHtcbiAgICAvLyBGaW5kIHRoZSBjZWxsIHdpdGggdGhlIGxvd2VzdCByb3dJZCBhbmQgY29sdW1uSW5kZXhcbiAgICByZXR1cm4gdGhpcy5maW5kU2VsZWN0ZWRDZWxsKFxuICAgICAgc2VsZWN0ZWRDZWxscyxcbiAgICAgIE1hdGgubWluKC4uLnNlbGVjdGVkQ2VsbHMubWFwKChjZWxsKSA9PiBjZWxsLnJvd0lkKSksXG4gICAgICBNYXRoLm1pbiguLi5zZWxlY3RlZENlbGxzLm1hcCgoY2VsbCkgPT4gdGhpcy5zZWxlY3RhYmxlQ29sdW1ucy5pbmRleE9mKGNlbGwuY29sdW1uTmFtZSkpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRMYXN0U2VsZWN0ZWRDZWxsKHNlbGVjdGVkQ2VsbHM6IENbXSk6IEMge1xuICAgIC8vIEZpbmQgdGhlIGNlbGwgd2l0aCB0aGUgbG93ZXN0IHJvd0lkIGFuZCBjb2x1bW5JbmRleFxuICAgIHJldHVybiB0aGlzLmZpbmRTZWxlY3RlZENlbGwoXG4gICAgICBzZWxlY3RlZENlbGxzLFxuICAgICAgTWF0aC5tYXgoLi4uc2VsZWN0ZWRDZWxscy5tYXAoKGNlbGwpID0+IGNlbGwucm93SWQpKSxcbiAgICAgIE1hdGgubWF4KC4uLnNlbGVjdGVkQ2VsbHMubWFwKChjZWxsKSA9PiB0aGlzLnNlbGVjdGFibGVDb2x1bW5zLmluZGV4T2YoY2VsbC5jb2x1bW5OYW1lKSkpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZFNlbGVjdGVkQ2VsbChzZWxlY3RlZENlbGxzOiBDW10sIHJvd0lkOiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIpOiBDIHtcbiAgICAvLyBGaW5kIHRoZSBjZWxsIHdpdGggdGhlIGN1cnJlbnQgaW5kZXhlc1xuICAgIHJldHVybiBzZWxlY3RlZENlbGxzLmZpbHRlcigoY2VsbCkgPT4gY2VsbC5yb3dJZCA9PT0gcm93SWQgJiYgY2VsbC5jb2x1bW5OYW1lID09PSB0aGlzLnNlbGVjdGFibGVDb2x1bW5zW2NvbHVtbkluZGV4XSlbMF07XG4gIH1cbn1cbiJdfQ==
|
|
199
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1zZWxlY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL2RpcmVjdGl2ZXMvY2VsbC1zZWxlY3Rpb24vY2VsbC1zZWxlY3Rpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRy9DLE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLElBQUksY0FBYyxDQUF1QixzQkFBc0IsQ0FBQyxDQUFDO0FBQ2pILE1BQU0sQ0FBQyxNQUFNLHVDQUF1QyxHQUFHLElBQUksY0FBYyxDQUFrQyw0QkFBNEIsQ0FBQyxDQUFDO0FBa0J6STs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixnQkFBZ0I7SUFDaEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyx1Q0FBdUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLGlCQUFpQixHQUFhLEVBQUUsQ0FBQztJQUVqQyxrQkFBa0I7SUFDVixjQUFjLEdBQVEsRUFBRSxDQUFDO0lBQ3pCLGtCQUFrQixHQUFhLElBQUksQ0FBQztJQUNwQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLDRCQUE0QixHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLDJCQUEyQixHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRXpDLGFBQWE7SUFDYixZQUFZLEdBQVEsRUFBRSxDQUFDO0lBQ2YsYUFBYSxHQUFhLElBQUksQ0FBQztJQUMvQixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRTNCLGNBQWM7SUFDTCxzQkFBc0IsR0FBRyxJQUFJLE9BQU8s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amVjdGFibGUsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc0VtcHR5QXJyYXkgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRXF1YWxzRm4gfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBBUFBfQ0VMTF9TRUxFQ1RJT05fU0VSVklDRV9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDZWxsU2VsZWN0aW9uU2VydmljZT4oJ0NlbGxTZWxlY3Rpb25TZXJ2aWNlJyk7XG5leHBvcnQgY29uc3QgQVBQX0NFTExfU0VMRUNUSU9OX1NFUlZJQ0VfQ09ORklHX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPENlbGxTZWxlY3Rpb25TZXJ2aWNlQ29uZmlnPGFueT4+KCdDZWxsU2VsZWN0aW9uU2VydmljZUNvbmZpZycpO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDZWxsSWQge1xuICByb3dJZDogbnVtYmVyO1xuICBjb2x1bW5OYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2VsbFNlbGVjdGlvbkV2ZW50PEMgZXh0ZW5kcyBJQ2VsbElkPiB7XG4gIHNlbGVjdGVkQ2VsbHM6IENbXTtcbiAgaXNSYW5nZVNlbGVjdGlvbjogYm9vbGVhbjtcbiAgaXNUb2dnbGVTZWxlY3Rpb246IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2VsbFNlbGVjdGlvblNlcnZpY2VDb25maWc8QyBleHRlbmRzIElDZWxsSWQ+IHtcbiAgZXF1YWxzOiBFcXVhbHNGbjxDPjtcbiAgbmV3OiAoY2VsbElkOiBJQ2VsbElkKSA9PiBDO1xufVxuXG4vKipcbiAqIFNlcnZpY2UgdG8gbWFuYWdlIGNlbGwgc2VsZWN0aW9uIHN0YXRlIGFjcm9zcyBtdWx0aXBsZSBkaXJlY3RpdmUgaW5zdGFuY2VzLlxuICogVGhpcyBzZXJ2aWNlIHNob3VsZCBiZSBwcm92aWRlZCBhdCB0aGUgY29tcG9uZW50IGxldmVsIChub3Qgcm9vdCkgdG8gZW5zdXJlXG4gKiBwcm9wZXIgaXNvbGF0aW9uIGJldHdlZW4gZGlmZmVyZW50IHRhYmxlIGluc3RhbmNlcy5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENlbGxTZWxlY3Rpb25TZXJ2aWNlPEMgZXh0ZW5kcyBJQ2VsbElkID0gSUNlbGxJZD4ge1xuICAvLyBDb25maWd1cmF0aW9uXG4gIGNvbmZpZyA9IGluamVjdChBUFBfQ0VMTF9TRUxFQ1RJT05fU0VSVklDRV9DT05GSUdfVE9LRU4sIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHNlbGVjdGFibGVDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIFNlbGVjdGlvbiBzdGF0ZVxuICBwcml2YXRlIF9zZWxlY3RlZENlbGxzOiBDW10gPSBbXTtcbiAgcHJpdmF0ZSBzZWxlY3Rpb25TdGFydENlbGw6IEMgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpc1NlbGVjdGluZyA9IGZhbHNlO1xuICBwcml2YXRlIGN1cnJlbnRSYW5nZUNvbHVtbkZpcnN0SW5kZXggPSAtMTtcbiAgcHJpdmF0ZSBjdXJyZW50UmFuZ2VDb2x1bW5MYXN0SW5kZXggPSAtMTtcblxuICAvLyBEcmFnIHN0YXRlXG4gIGRyYWdnZWRDZWxsczogQ1tdID0gW107XG4gIHByaXZhdGUgZHJhZ1N0YXJ0Q2VsbDogQyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGlzRHJhZ2dpbmcgPSBmYWxzZTtcblxuICAvLyBPYnNlcnZhYmxlc1xuICByZWFkb25seSBzZWxlY3Rpb25DaGFuZ2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Q2VsbFNlbGVjdGlvbkV2ZW50PEM+PigpO1xuICByZWFkb25seSBzZWxlY3Rpb25SaWdodENsaWNrU3ViamVjdCA9IG5ldyBTdWJqZWN0PE1vdXNlRXZlbnQ+KCk7XG5cbiAgLy8gT3ZlcnJpZGFibGUgbWV0aG9kc1xuICBwcml2YXRlIHJlYWRvbmx5IF9lcXVhbHM6IEVxdWFsc0ZuPEM+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9uZXc6IChjZWxsSWQ6IElDZWxsSWQpID0+IEM7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fZXF1YWxzID0gdGhpcy5jb25maWc/LmVxdWFscztcbiAgICB0aGlzLl9uZXcgPSB0aGlzLmNvbmZpZz8ubmV3O1xuICB9XG5cbiAgLy8gT3ZlcnJpZGUgbWV0aG9kXG4gIGVxdWFscyhjZWxsMTogQywgY2VsbDI6IEMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZXF1YWxzID8gdGhpcy5fZXF1YWxzKGNlbGwxLCBjZWxsMikgOiBjZWxsMT8ucm93SWQgPT09IGNlbGwyPy5yb3dJZCAmJiBjZWxsMT8uY29sdW1uTmFtZSA9PT0gY2VsbDI/LmNvbHVtbk5hbWU7XG4gIH1cblxuICAvLyBPdmVycmlkZSBtZXRob2RcbiAgbmV3KGNlbGxJZDogSUNlbGxJZCk6IEMge1xuICAgIHJldHVybiB0aGlzLl9uZXcgPyB0aGlzLl9uZXcoY2VsbElkKSA6IChjZWxsSWQgYXMgQyk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRDZWxscygpOiBDW10ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZENlbGxzO1xuICB9XG5cbiAgc2V0IHNlbGVjdGVkQ2VsbHModmFsdWU6IENbXSkge1xuICAgIHRoaXMuZW1pdFNlbGVjdGlvbih2YWx1ZSwgZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIGlzQ2VsbFNlbGVjdGVkKGNlbGxJZDogQyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkQ2VsbHMuc29tZSgoc2VsZWN0ZWRDZWxsKSA9PiB0aGlzLmVxdWFscyhzZWxlY3RlZENlbGwsIGNlbGxJZCkpO1xuICB9XG5cbiAgaXNDZWxsRHJhZ2dlZChjZWxsSWQ6IEMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kcmFnZ2VkQ2VsbHMuc29tZSgoc2VsZWN0ZWRDZWxsKSA9PiB0aGlzLmVxdWFscyhzZWxlY3RlZENlbGwsIGNlbGxJZCkpO1xuICB9XG5cbiAgLy8gQ29yZSBzZWxlY3Rpb24gbG9naWMgKG1vdmVkIGZyb20gQ2VsbElkZW50aWZpZXJEaXJlY3RpdmUpXG4gIGFzeW5jIGhhbmRsZUNlbGxNb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQsIGNlbGxJZDogQykge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAoZXZlbnQuYnV0dG9uID09PSAyKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uUmlnaHRDbGlja1N1YmplY3QubmV4dChldmVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUHJldmVudCBzZWxlY3Rpb24gaWYgY2VsbCdzIGNvbHVtbiBpcyBub3Qgc2VsZWN0YWJsZVxuICAgIGlmICghdGhpcy5zZWxlY3RhYmxlQ29sdW1ucy5pbmNsdWRlcyhjZWxsSWQuY29sdW1uTmFtZSkpIHtcbiAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbihbXSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc0N0cmxLZXkgPSBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXk7XG4gICAgY29uc3QgaXNTaGlmdEtleSA9IGV2ZW50LnNoaWZ0S2V5O1xuXG4gICAgaWYgKCFpc1NoaWZ0S2V5ICYmICFpc0N0cmxLZXkpIHtcbiAgICAgIHRoaXMuc3RhcnRTZWxlY3Rpb24oY2VsbElkKTtcbiAgICAgIC8vIHRoaXMuc3RhcnREcmFnU2VsZWN0aW9uKGNlbGxJZCk7XG4gICAgfSBlbHNlIGlmIChpc0N0cmxLZXkpIHtcbiAgICAgIHRoaXMudG9nZ2xlQ2VsbFNlbGVjdGlvbihjZWxsSWQpO1xuICAgIH0gZWxzZSBpZiAoaXNTaGlmdEtleSkge1xuICAgICAgdGhpcy5zZWxlY3RSYW5nZShjZWxsSWQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGhhbmRsZUNlbGxNb3VzZUVudGVyKGV2ZW50OiBNb3VzZUV2ZW50LCBjZWxsSWQ6IEMpIHtcbiAgICAvLyBUT0RPIGNoZWNrIGlmIG5leHQgY2VsbCBjYW4gYmUgc2VsZWN0ZWRcblxuICAgIGlmICh0aGlzLmlzU2VsZWN0aW5nICYmIHRoaXMuc2VsZWN0aW9uU3RhcnRDZWxsKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbihjZWxsSWQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0RyYWdnaW5nICYmIHRoaXMuZHJhZ1N0YXJ0Q2VsbCkge1xuICAgICAgdGhpcy51cGRhdGVEcmFnZ2VkQ2VsbHMoY2VsbElkKTtcbiAgICB9XG4gIH1cblxuICBlbmRNb3VzZU1vdmUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNTZWxlY3RpbmcpIHtcbiAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb25TdGF0ZSgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0RyYWdnaW5nKSB7XG4gICAgICB0aGlzLnJlc2V0RHJhZ1N0YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUHJpdmF0ZSBoZWxwZXIgbWV0aG9kc1xuICBwcml2YXRlIHN0YXJ0U2VsZWN0aW9uKGNlbGxJZDogQyk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uU3RhcnRDZWxsID0gY2VsbElkO1xuICAgIHRoaXMuaXNTZWxlY3RpbmcgPSB0cnVlO1xuICAgIHRoaXMuY3VycmVudFJhbmdlQ29sdW1uRmlyc3RJbmRleCA9IC0xO1xuICAgIHRoaXMuY3VycmVudFJhbmdlQ29sdW1uTGFzdEluZGV4ID0gLTE7XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uKFtjZWxsSWRdLCBmYWxzZSwgZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydERyYWdTZWxlY3Rpb24oY2VsbElkOiBDKTogdm9pZCB7XG4gICAgdGhpcy5kcmFnU3RhcnRDZWxsID0gY2VsbElkO1xuICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XG4gICAgdGhpcy5kcmFnZ2VkQ2VsbHMgPSBbY2VsbElkXTtcbiAgICAvLyB0aGlzLmVtaXRTZWxlY3Rpb24oW2NlbGxJZF0sIGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZUNlbGxTZWxlY3Rpb24oY2VsbElkOiBDKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudENlbGxzID0gWy4uLnRoaXMuc2VsZWN0ZWRDZWxsc107XG4gICAgY29uc3QgY2VsbEluZGV4ID0gY3VycmVudENlbGxzLmZpbmRJbmRleCgoYykgPT4gdGhpcy5lcXVhbHMoYywgY2VsbElkKSk7XG5cbiAgICBpZiAoY2VsbEluZGV4ID49IDApIHtcbiAgICAgIGN1cnJlbnRDZWxscy5zcGxpY2UoY2VsbEluZGV4LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudENlbGxzLnB1c2goY2VsbElkKTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRTZWxlY3Rpb24oY3VycmVudENlbGxzLCBmYWxzZSwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdFJhbmdlKGVuZENlbGw6IEMpOiB2b2lkIHtcbiAgICBjb25zdCByYW5nZUNlbGxzID0gdGhpcy5jYWxjdWxhdGVSYW5nZUNlbGxzKGVuZENlbGwpO1xuICAgIHRoaXMuZW1pdFNlbGVjdGlvbihyYW5nZUNlbGxzLCB0cnVlLCBmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGlvbihjdXJyZW50Q2VsbDogQyk6IHZvaWQge1xuICAgIGNvbnN0IHJhbmdlQ2VsbHMgPSB0aGlzLmNhbGN1bGF0ZVJhbmdlQmV0d2VlbkNlbGxzKHRoaXMuc2VsZWN0aW9uU3RhcnRDZWxsLCBjdXJyZW50Q2VsbCk7XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uKHJhbmdlQ2VsbHMsIHRydWUsIGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRHJhZ2dlZENlbGxzKGN1cnJlbnRDZWxsOiBDKTogdm9pZCB7XG4gICAgLy8gdGhpcy5kcmFnZ2VkQ2VsbHMuc2V0KHJhbmdlQ2VsbHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U2VsZWN0aW9uKGNlbGxzOiBDW10sIGlzUmFuZ2U6IGJvb2xlYW4sIGlzVG9nZ2xlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fc2VsZWN0ZWRDZWxscyA9IGNlbGxzO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlU3ViamVjdC5uZXh0KHtcbiAgICAgIHNlbGVjdGVkQ2VsbHM6IGNlbGxzLFxuICAgICAgaXNSYW5nZVNlbGVjdGlvbjogaXNSYW5nZSxcbiAgICAgIGlzVG9nZ2xlU2VsZWN0aW9uOiBpc1RvZ2dsZSxcbiAgICB9KTtcbiAgfVxuXG4gIGNhbGN1bGF0ZVJhbmdlQ2VsbHMoZW5kQ2VsbDogQyk6IENbXSB7XG4gICAgaWYgKGlzRW1wdHlBcnJheSh0aGlzLnNlbGVjdGVkQ2VsbHMpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRSYW5nZUNvbHVtbkZpcnN0SW5kZXggPSAtMTtcbiAgICAgIHRoaXMuY3VycmVudFJhbmdlQ29sdW1uTGFzdEluZGV4ID0gLTE7XG4gICAgICByZXR1cm4gW2VuZENlbGxdO1xuICAgIH1cblxuICAgIGNvbnN0IGxhc3RTZWxlY3RlZENlbGwgPSB0aGlzLmZpbmRGaXJzdFNlbGVjdGVkQ2VsbCh0aGlzLnNlbGVjdGVkQ2VsbHMpO1xuICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZVJhbmdlQmV0d2VlbkNlbGxzKGxhc3RTZWxlY3RlZENlbGwsIGVuZENlbGwpO1xuICB9XG5cbiAgY2FsY3VsYXRlUmFuZ2VCZXR3ZWVuQ2VsbHMoc3RhcnRDZWxsOiBDLCBlbmRDZWxsOiBDKTogQ1tdIHtcbiAgICAvLyBHZXQgZmlyc3QgY2VsbCBjb29yZGluYXRlcywgdGhlbiBhZGQgdGhpcyBjZWxsIGFzIGEgcmFuZ2VcbiAgICBjb25zdCBmaXJzdFJvd0lkID0gTWF0aC5taW4oc3RhcnRDZWxsLnJvd0lkLCBlbmRDZWxsLnJvd0lkKTtcbiAgICBjb25zdCBsYXN0Um93SWQgPSBNYXRoLm1heChzdGFydENlbGwucm93SWQsIGVuZENlbGwucm93SWQpO1xuICAgIGNvbnN0IHN0YXJ0Q29sdW1uSW5kZXggPSB0aGlzLnNlbGVjdGFibGVDb2x1bW5zLmluZGV4T2Yoc3RhcnRDZWxsLmNvbHVtbk5hbWUpO1xuICAgIGNvbnN0IGVuZENvbHVtbkluZGV4ID0gdGhpcy5zZWxlY3RhYmxlQ29sdW1ucy5pbmRleE9mKGVuZENlbGwuY29sdW1uTmFtZSk7XG4gICAgaWYgKGVuZENvbHVtbkluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5jdXJyZW50UmFuZ2VDb2x1bW5GaXJzdEluZGV4ID0gTWF0aC5taW4oc3RhcnRDb2x1bW5JbmRleCwgZW5kQ29sdW1uSW5kZXgpO1xuICAgICAgdGhpcy5jdXJyZW50UmFuZ2VDb2x1bW5MYXN0SW5kZXggPSBNYXRoLm1heChzdGFydENvbHVtbkluZGV4LCBlbmRDb2x1bW5JbmRleCk7XG4gICAgfVxuICAgIC8vIEl0ZXJhdGUgY29sdW1ucyBhbmQgcm93c1xuICAgIGNvbnN0IHJhbmdlQ2VsbHM6IENbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSB0aGlzLmN1cnJlbnRSYW5nZUNvbHVtbkZpcnN0SW5kZXg7IGkgPD0gdGhpcy5jdXJyZW50UmFuZ2VDb2x1bW5MYXN0SW5kZXg7IGkrKykge1xuICAgICAgY29uc3QgY29sdW1uTmFtZSA9IHRoaXMuc2VsZWN0YWJsZUNvbHVtbnNbaV07XG4gICAgICBmb3IgKGxldCByb3dJZCA9IGZpcnN0Um93SWQ7IHJvd0lkIDw9IGxhc3RSb3dJZDsgcm93SWQrKykge1xuICAgICAgICByYW5nZUNlbGxzLnB1c2godGhpcy5uZXcoeyByb3dJZDogcm93SWQsIGNvbHVtbk5hbWU6IGNvbHVtbk5hbWUgfSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByYW5nZUNlbGxzO1xuICB9XG5cbiAgcmVzZXRTZWxlY3Rpb25TdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGlvblN0YXJ0Q2VsbCA9IG51bGw7XG4gICAgdGhpcy5pc1NlbGVjdGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcmVzZXREcmFnU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5kcmFnU3RhcnRDZWxsID0gbnVsbDtcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmRyYWdnZWRDZWxscyA9IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kRmlyc3RTZWxlY3RlZENlbGwoc2VsZWN0ZWRDZWxsczogQ1tdKTogQyB7XG4gICAgLy8gRmluZCB0aGUgY2VsbCB3aXRoIHRoZSBsb3dlc3Qgcm93SWQgYW5kIGNvbHVtbkluZGV4XG4gICAgcmV0dXJuIHRoaXMuZmluZFNlbGVjdGVkQ2VsbChcbiAgICAgIHNlbGVjdGVkQ2VsbHMsXG4gICAgICBNYXRoLm1pbiguLi5zZWxlY3RlZENlbGxzLm1hcCgoY2VsbCkgPT4gY2VsbC5yb3dJZCkpLFxuICAgICAgTWF0aC5taW4oLi4uc2VsZWN0ZWRDZWxscy5tYXAoKGNlbGwpID0+IHRoaXMuc2VsZWN0YWJsZUNvbHVtbnMuaW5kZXhPZihjZWxsLmNvbHVtbk5hbWUpKSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kTGFzdFNlbGVjdGVkQ2VsbChzZWxlY3RlZENlbGxzOiBDW10pOiBDIHtcbiAgICAvLyBGaW5kIHRoZSBjZWxsIHdpdGggdGhlIGxvd2VzdCByb3dJZCBhbmQgY29sdW1uSW5kZXhcbiAgICByZXR1cm4gdGhpcy5maW5kU2VsZWN0ZWRDZWxsKFxuICAgICAgc2VsZWN0ZWRDZWxscyxcbiAgICAgIE1hdGgubWF4KC4uLnNlbGVjdGVkQ2VsbHMubWFwKChjZWxsKSA9PiBjZWxsLnJvd0lkKSksXG4gICAgICBNYXRoLm1heCguLi5zZWxlY3RlZENlbGxzLm1hcCgoY2VsbCkgPT4gdGhpcy5zZWxlY3RhYmxlQ29sdW1ucy5pbmRleE9mKGNlbGwuY29sdW1uTmFtZSkpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRTZWxlY3RlZENlbGwoc2VsZWN0ZWRDZWxsczogQ1tdLCByb3dJZDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKTogQyB7XG4gICAgLy8gRmluZCB0aGUgY2VsbCB3aXRoIHRoZSBjdXJyZW50IGluZGV4ZXNcbiAgICByZXR1cm4gc2VsZWN0ZWRDZWxscy5maWx0ZXIoKGNlbGwpID0+IGNlbGwucm93SWQgPT09IHJvd0lkICYmIGNlbGwuY29sdW1uTmFtZSA9PT0gdGhpcy5zZWxlY3RhYmxlQ29sdW1uc1tjb2x1bW5JbmRleF0pWzBdO1xuICB9XG59XG4iXX0=
|