ms-data-grid 0.0.151 → 0.0.153
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/lib/data-grid/data-grid.component.mjs +121 -13
- package/esm2022/lib/services/cell-selection.service.mjs +23 -1
- package/esm2022/lib/services/copy-service.service.mjs +1 -1
- package/fesm2022/ms-data-grid.mjs +142 -12
- package/fesm2022/ms-data-grid.mjs.map +1 -1
- package/lib/data-grid/data-grid.component.d.ts +10 -1
- package/lib/services/cell-selection.service.d.ts +4 -0
- package/package.json +1 -1
|
@@ -17,6 +17,7 @@ export class CellSelectionService {
|
|
|
17
17
|
this.selectionBounds = { top: 0, bottom: 0, left: null, right: null };
|
|
18
18
|
this.ctrlKeyPressed = false;
|
|
19
19
|
this.rowHeight = 44;
|
|
20
|
+
this.dataSet = [];
|
|
20
21
|
}
|
|
21
22
|
startSelection(row, column, subColIndex, event) {
|
|
22
23
|
this.isSelecting = true;
|
|
@@ -173,6 +174,7 @@ export class CellSelectionService {
|
|
|
173
174
|
return this.isBottomBorder(rowIndex, colIndex, subColIndex) && this.isRightBorder(rowIndex, colIndex, subColIndex);
|
|
174
175
|
}
|
|
175
176
|
setActiveCell(rowIndex, colIndex, subColIndex) {
|
|
177
|
+
console.log("Cell Location: ", rowIndex + '' + colIndex);
|
|
176
178
|
const sIndex = subColIndex ?? 0;
|
|
177
179
|
this.activeCell = { rowIndex, colIndex, subColIndex: sIndex, key: `${rowIndex}-${colIndex}-${sIndex}`, field: '' };
|
|
178
180
|
}
|
|
@@ -534,6 +536,26 @@ export class CellSelectionService {
|
|
|
534
536
|
}
|
|
535
537
|
return indices;
|
|
536
538
|
}
|
|
539
|
+
moveActiveCellByRows(steps, direction, shiftKey) {
|
|
540
|
+
if (!this.activeCell)
|
|
541
|
+
return;
|
|
542
|
+
const rowIndex = direction === 'down' ? this.activeCell.rowIndex + steps : this.activeCell.rowIndex - steps;
|
|
543
|
+
const colIndex = this.activeCell.colIndex;
|
|
544
|
+
this.activeCell = { ...this.activeCell, rowIndex: Math.max(0, Math.min(rowIndex, this.dataSet.length - 1)), colIndex };
|
|
545
|
+
}
|
|
546
|
+
moveActiveCellToStart(shiftKey) {
|
|
547
|
+
if (!this.activeCell)
|
|
548
|
+
return;
|
|
549
|
+
this.activeCell = { rowIndex: 1, colIndex: 0, subColIndex: 0, field: this.columns[0].field, key: '0-0-0' };
|
|
550
|
+
}
|
|
551
|
+
moveActiveCellToEnd(shiftKey) {
|
|
552
|
+
if (!this.activeCell)
|
|
553
|
+
return;
|
|
554
|
+
const lastRow = this.dataSet.length;
|
|
555
|
+
const lastCol = this.columns.length - 1;
|
|
556
|
+
const lastSub = this.columns[lastCol]?.children?.length ? this.columns[lastCol].children.length - 1 : 0;
|
|
557
|
+
this.activeCell = { rowIndex: lastRow, colIndex: lastCol, subColIndex: lastSub, field: this.columns[lastCol].field, key: `${lastRow}-${lastCol}-${lastSub}` };
|
|
558
|
+
}
|
|
537
559
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CellSelectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
538
560
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CellSelectionService, providedIn: 'root' }); }
|
|
539
561
|
}
|
|
@@ -541,4 +563,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
541
563
|
type: Injectable,
|
|
542
564
|
args: [{ providedIn: 'root' }]
|
|
543
565
|
}] });
|
|
544
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1zZWxlY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtZ3JpZC9zcmMvbGliL3NlcnZpY2VzL2NlbGwtc2VsZWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFZM0MsTUFBTSxPQUFPLG9CQUFvQjtJQURqQztRQUdFLGtCQUFhLEdBQWMsRUFBRSxDQUFDO1FBQzlCLGlCQUFZLEdBQWdCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEMsbUJBQWMsR0FBbUIsSUFBSSxDQUFDO1FBQ3RDLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGVBQVUsR0FBbUIsSUFBSSxDQUFDO1FBRzFCLG9DQUErQixHQUFRLElBQUksQ0FBQztRQUM1QyxnQkFBVyxHQUFHLEdBQUcsQ0FBQztRQUNsQixpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUUxQixZQUFPLEdBQVUsRUFBRSxDQUFDO1FBQ3BCLHFCQUFnQixHQUEyQixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFFdEQsc0JBQWlCLEdBQXVCLElBQUksQ0FBQztRQUM3Qyx3QkFBbUIsR0FBdUIsSUFBSSxDQUFDO1FBRXhDLG9CQUFlLEdBS2xCLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1FBMFpuRCxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQTZKdkIsY0FBUyxHQUFHLEVBQUUsQ0FBQztLQThEaEI7SUFubkJDLGNBQWMsQ0FBQyxHQUFRLEVBQUUsTUFBVyxFQUFFLFdBQTBCLEVBQUUsS0FBaUI7UUFDakYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7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QUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztRQUV0RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNyRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssT0FBTyxDQUFDLENBQUM7UUFDekUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUV2RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN0RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDM0UsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxRQUFRLEVBQUUsUUFB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QUUsQ0FBQyxFQUFFLEVBQUU7WUFDOUYsK0JBQStCO1lBQy9CLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7Z0JBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM5QztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7K0dBem9CWSxvQkFBb0I7bUhBQXBCLG9CQUFvQixjQURQLE1BQU07OzRGQUNuQixvQkFBb0I7a0JBRGhDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2VsbFBvcyB7XG4gIHJvd0luZGV4OiBudW1iZXI7XG4gIGNvbEluZGV4OiBudW1iZXI7XG4gIHN1YkNvbEluZGV4OiBudW1iZXI7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIGtleTogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIENlbGxTZWxlY3Rpb25TZXJ2aWNlIHtcblxuICBzZWxlY3RlZENlbGxzOiBDZWxsUG9zW10gPSBbXTtcbiAgc2VsZWN0ZWRLZXlzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcbiAgc2VsZWN0aW9uU3RhcnQ6IENlbGxQb3MgfCBudWxsID0gbnVsbDtcbiAgaXNTZWxlY3RpbmcgPSBmYWxzZTtcbiAgYWN0aXZlQ2VsbDogQ2VsbFBvcyB8IG51bGwgPSBudWxsO1xuXG5cbiAgcHJpdmF0ZSBjZWxsU2VsZWN0aW9uQXV0b1Njcm9sbEludGVydmFsOiBhbnkgPSBudWxsO1xuICBwcml2YXRlIHNjcm9sbFNwZWVkID0gMTUwO1xuICBwcml2YXRlIHNjcm9sbE1hcmdpbiA9IDMwO1xuXG4gIGNvbHVtbnM6IGFueVtdID0gW107XG4gIGdldENvbHVtbkJ5SW5kZXg6IChpbmRleDogbnVtYmVyKSA9PiBhbnkgPSAoKSA9PiBudWxsO1xuXG4gIHZlcnRpY2FsQ29udGFpbmVyOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBob3Jpem9udGFsQ29udGFpbmVyOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyBzZWxlY3Rpb25Cb3VuZHM6IHtcbiAgICB0b3A6IG51bWJlcjtcbiAgICBib3R0b206IG51bWJlcjtcbiAgICBsZWZ0OiB7IGNvbEluZGV4OiBudW1iZXI7IHN1YkNvbEluZGV4OiBudW1iZXIgfSB8IG51bGw7XG4gICAgcmlnaHQ6IHsgY29sSW5kZXg6IG51bWJlcjsgc3ViQ29sSW5kZXg6IG51bWJlciB9IHwgbnVsbDtcbiAgfSA9IHsgdG9wOiAwLCBib3R0b206IDAsIGxlZnQ6IG51bGwsIHJpZ2h0OiBudWxsIH07XG5cbiAgc3RhcnRTZWxlY3Rpb24ocm93OiBhbnksIGNvbHVtbjogYW55LCBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmlzU2VsZWN0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLmFjdGl2ZUNlbGwgPSBudWxsO1xuXG4gICAgY29uc3QgckluZGV4ID0gcm93Ll9fdmlydHVhbEluZGV4O1xuICAgIGNvbnN0IGNJbmRleCA9IGNvbHVtbi5pbmRleDtcbiAgICBjb25zdCBzSW5kZXggPSBzdWJDb2xJbmRleCA/PyAwO1xuICAgIGNvbnN0IGtleSA9IGAke3JJbmRleH0tJHtjSW5kZXh9LSR7c0luZGV4fWA7XG5cbiAgICB0aGlzLnNlbGVjdGlvblN0YXJ0ID0geyByb3dJbmRleDogckluZGV4LCBjb2xJbmRleDogY0luZGV4LCBzdWJDb2xJbmRleDogc0luZGV4LCBmaWVsZDogY29sdW1uLmZpZWxkLCBrZXkgfTtcbiAgICB0aGlzLnNlbGVjdGVkQ2VsbHMgPSBbdGhpcy5zZWxlY3Rpb25TdGFydF07XG4gICAgdGhpcy5zZWxlY3RlZEtleXMuY2xlYXIoKTtcbiAgICB0aGlzLnNlbGVjdGVkS2V5cy5hZGQoa2V5KTtcblxuICAgIGNvbnN0IG1vdXNlVXBIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5lbmRTZWxlY3Rpb24oKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBtb3VzZVVwSGFuZGxlcik7XG4gICAgfTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgbW91c2VVcEhhbmRsZXIpO1xuXG4gICAgdGhpcy51cGRhdGVTZWxlY3Rpb25Cb3VuZGFyaWVzKCk7XG4gIH1cblxuICBleHRlbmRTZWxlY3Rpb24ocm93OiBhbnksIGNvbHVtbjogYW55LCBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuaXNTZWxlY3RpbmcgfHwgIXRoaXMuc2VsZWN0aW9uU3RhcnQpIHJldHVybjtcblxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5zZWxlY3Rpb25TdGFydCE7XG4gICAgY29uc3QgclN0YXJ0ID0gc3RhcnQucm93SW5kZXg7XG4gICAgY29uc3QgckVuZCA9IHJvdy5fX3ZpcnR1YWxJbmRleDtcbiAgICBjb25zdCBjU3RhcnQgPSBzdGFydC5jb2xJbmRleDtcbiAgICBjb25zdCBjRW5kID0gY29sdW1uLmluZGV4O1xuICAgIGNvbnN0IHNTdGFydCA9IHN0YXJ0LnN1YkNvbEluZGV4ID8/IDA7XG4gICAgY29uc3Qgc0VuZCA9IHN1YkNvbEluZGV4ID8/IDA7XG5cbiAgICBjb25zdCBtaW5Sb3cgPSBNYXRoLm1pbihyU3RhcnQsIHJFbmQpO1xuICAgIGNvbnN0IG1heFJvdyA9IE1hdGgubWF4KHJTdGFydCwgckVuZCk7XG4gICAgY29uc3QgbWluQ29sID0gTWF0aC5taW4oY1N0YXJ0LCBjRW5kKTtcbiAgICBjb25zdCBtYXhDb2wgPSBNYXRoLm1heChjU3RhcnQsIGNFbmQpO1xuXG4gICAgY29uc3QgbmV3S2V5czogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG4gICAgY29uc3QgbmV3Q2VsbHM6IENlbGxQb3NbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgciA9IG1pblJvdzsgciA8PSBtYXhSb3c7IHIrKykge1xuICAgICAgZm9yIChsZXQgYyA9IG1pbkNvbDsgYyA8PSBtYXhDb2w7IGMrKykge1xuICAgICAgICBjb25zdCBjb2xPYmogPSB0aGlzLmdldENvbHVtbkJ5SW5kZXgoYyk7XG4gICAgICAgIGNvbnN0IHN1YkNvdW50ID0gY29sT2JqPy5jaGlsZHJlbj8ubGVuZ3RoID8/IDE7XG4gICAgICAgIGNvbnN0IHN0YXJ0U3ViID0gKGMgPT09IGNTdGFydCkgPyBzU3RhcnQgOiAwO1xuICAgICAgICBjb25zdCBlbmRTdWIgPSAoYyA9PT0gY0VuZCkgPyBzRW5kIDogc3ViQ291bnQgLSAxO1xuXG4gICAgICAgIGZvciAobGV0IHMgPSBzdGFydFN1YjsgcyA8PSBlbmRTdWI7IHMrKykge1xuICAgICAgICAgIGNvbnN0IGtleSA9IGAke3J9LSR7Y30tJHtzfWA7XG4gICAgICAgICAgbmV3S2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICBuZXdDZWxscy5wdXNoKHsgcm93SW5kZXg6IHIsIGNvbEluZGV4OiBjLCBzdWJDb2xJbmRleDogcywgZmllbGQ6IGNvbE9iaj8uZmllbGQgfHwgJycsIGtleSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRLZXlzID0gbmV3S2V5cztcbiAgICB0aGlzLnNlbGVjdGVkQ2VsbHMgPSBuZXdDZWxscztcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbkJvdW5kYXJpZXMoKTtcblxuICAgIC8vIEF1dG8tc2Nyb2xsXG4gICAgdGhpcy5oYW5kbGVDZWxsQXV0b1Njcm9sbChldmVudCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tIEVORCBTRUxFQ1RJT04gLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBlbmRTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy5pc1NlbGVjdGluZyA9IGZhbHNlO1xuICAgIHRoaXMuc3RvcEF1dG9TY3JvbGwoKTtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbkJvdW5kYXJpZXMoKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0gQVVUTy1TQ1JPTEwgLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBoYW5kbGVDZWxsQXV0b1Njcm9sbChldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmNlbGxTZWxlY3Rpb25BdXRvU2Nyb2xsSW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5jZWxsU2VsZWN0aW9uQXV0b1Njcm9sbEludGVydmFsKTtcbiAgICAgIHRoaXMuY2VsbFNlbGVjdGlvbkF1dG9TY3JvbGxJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICAgIGlmICghdGhpcy5ob3Jpem9udGFsQ29udGFpbmVyIHx8ICF0aGlzLnZlcnRpY2FsQ29udGFpbmVyKSByZXR1cm47XG5cbiAgICBjb25zdCBob3JSZWN0ID0gdGhpcy5ob3Jpem9udGFsQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHZlcnRSZWN0ID0gdGhpcy52ZXJ0aWNhbENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBtb3VzZVggPSBldmVudC5jbGllbnRYO1xuICAgIGNvbnN0IG1vdXNlWSA9IGV2ZW50LmNsaWVudFk7XG5cbiAgICBsZXQgc2Nyb2xsWCA9IDA7XG4gICAgbGV0IHNjcm9sbFkgPSAwO1xuXG4gICAgaWYgKG1vdXNlWCAtIGhvclJlY3QubGVmdCA8IHRoaXMuc2Nyb2xsTWFyZ2luKSBzY3JvbGxYID0gLXRoaXMuc2Nyb2xsU3BlZWQ7XG4gICAgZWxzZSBpZiAoaG9yUmVjdC5yaWdodCAtIG1vdXNlWCA8IHRoaXMuc2Nyb2xsTWFyZ2luKSBzY3JvbGxYID0gdGhpcy5zY3JvbGxTcGVlZDtcblxuICAgIGlmIChtb3VzZVkgLSB2ZXJ0UmVjdC50b3AgPCB0aGlzLnNjcm9sbE1hcmdpbikgc2Nyb2xsWSA9IC10aGlzLnNjcm9sbFNwZWVkO1xuICAgIGVsc2UgaWYgKHZlcnRSZWN0LmJvdHRvbSAtIG1vdXNlWSA8IHRoaXMuc2Nyb2xsTWFyZ2luKSBzY3JvbGxZID0gdGhpcy5zY3JvbGxTcGVlZDtcblxuICAgIGlmIChzY3JvbGxYICE9PSAwIHx8IHNjcm9sbFkgIT09IDApIHtcbiAgICAgIHRoaXMuY2VsbFNlbGVjdGlvbkF1dG9TY3JvbGxJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgaWYgKHNjcm9sbFggIT09IDApIHRoaXMuaG9yaXpvbnRhbENvbnRhaW5lciEuc2Nyb2xsQnkoc2Nyb2xsWCwgMCk7XG4gICAgICAgIGlmIChzY3JvbGxZICE9PSAwKSB0aGlzLnZlcnRpY2FsQ29udGFpbmVyIS5zY3JvbGxCeSgwLCBzY3JvbGxZKTtcbiAgICAgIH0sIDgpO1xuICAgIH1cbiAgfVxuXG4gIHN0b3BBdXRvU2Nyb2xsKCkge1xuICAgIGlmICh0aGlzLmNlbGxTZWxlY3Rpb25BdXRvU2Nyb2xsSW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5jZWxsU2VsZWN0aW9uQXV0b1Njcm9sbEludGVydmFsKTtcbiAgICAgIHRoaXMuY2VsbFNlbGVjdGlvbkF1dG9TY3JvbGxJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLSBIRUxQRVJTIC0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgaXNTZWxlY3RlZChyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleD86IG51bWJlciB8IG51bGwpIHtcbiAgICBjb25zdCBzSW5kZXggPSBzdWJDb2xJbmRleCA/PyAwO1xuICAgIGNvbnN0IGtleSA9IGAke3Jvd0luZGV4fS0ke2NvbEluZGV4fS0ke3NJbmRleH1gO1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkS2V5cy5oYXMoa2V5KTtcbiAgfVxuXG4gIHVwZGF0ZVNlbGVjdGlvbkJvdW5kYXJpZXMoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDZWxscy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uQm91bmRzID0geyB0b3A6IDAsIGJvdHRvbTogMCwgbGVmdDogbnVsbCwgcmlnaHQ6IG51bGwgfTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByb3dJbmRpY2VzID0gdGhpcy5zZWxlY3RlZENlbGxzLm1hcChjID0+IGMucm93SW5kZXgpO1xuICAgIHRoaXMuc2VsZWN0aW9uQm91bmRzLnRvcCA9IE1hdGgubWluKC4uLnJvd0luZGljZXMpO1xuICAgIHRoaXMuc2VsZWN0aW9uQm91bmRzLmJvdHRvbSA9IE1hdGgubWF4KC4uLnJvd0luZGljZXMpO1xuXG4gICAgY29uc3QgbGVmdENvbCA9IE1hdGgubWluKC4uLnRoaXMuc2VsZWN0ZWRDZWxscy5tYXAoYyA9PiBjLmNvbEluZGV4KSk7XG4gICAgY29uc3QgbGVmdENlbGxzID0gdGhpcy5zZWxlY3RlZENlbGxzLmZpbHRlcihjID0+IGMuY29sSW5kZXggPT09IGxlZnRDb2wpO1xuICAgIGNvbnN0IG1pblN1YiA9IE1hdGgubWluKC4uLmxlZnRDZWxscy5tYXAoYyA9PiBjLnN1YkNvbEluZGV4ID8/IDApKTtcbiAgICB0aGlzLnNlbGVjdGlvbkJvdW5kcy5sZWZ0ID0geyBjb2xJbmRleDogbGVmdENvbCwgc3ViQ29sSW5kZXg6IG1pblN1YiB9O1xuXG4gICAgY29uc3QgcmlnaHRDb2wgPSBNYXRoLm1heCguLi50aGlzLnNlbGVjdGVkQ2VsbHMubWFwKGMgPT4gYy5jb2xJbmRleCkpO1xuICAgIGNvbnN0IHJpZ2h0Q2VsbHMgPSB0aGlzLnNlbGVjdGVkQ2VsbHMuZmlsdGVyKGMgPT4gYy5jb2xJbmRleCA9PT0gcmlnaHRDb2wpO1xuICAgIGNvbnN0IG1heFN1YiA9IE1hdGgubWF4KC4uLnJpZ2h0Q2VsbHMubWFwKGMgPT4gYy5zdWJDb2xJbmRleCA/PyAwKSk7XG4gICAgdGhpcy5zZWxlY3Rpb25Cb3VuZHMucmlnaHQgPSB7IGNvbEluZGV4OiByaWdodENvbCwgc3ViQ29sSW5kZXg6IG1heFN1YiB9O1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLSBCT1JERVIgQ0hFQ0tTIC0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgaXNUb3BCb3JkZXIocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg/OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5pc1NlbGVjdGVkKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgpICYmIHJvd0luZGV4ID09PSB0aGlzLnNlbGVjdGlvbkJvdW5kcy50b3A7XG4gIH1cbiAgaXNCb3R0b21Cb3JkZXIocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg/OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5pc1NlbGVjdGVkKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgpICYmIHJvd0luZGV4ID09PSB0aGlzLnNlbGVjdGlvbkJvdW5kcy5ib3R0b207XG4gIH1cbiAgaXNMZWZ0Qm9yZGVyKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4PzogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGlvbkJvdW5kcy5sZWZ0KSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3Qgc0luZGV4ID0gc3ViQ29sSW5kZXggPz8gMDtcbiAgICByZXR1cm4gdGhpcy5pc1NlbGVjdGVkKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgpICYmXG4gICAgICBjb2xJbmRleCA9PT0gdGhpcy5zZWxlY3Rpb25Cb3VuZHMubGVmdC5jb2xJbmRleCAmJlxuICAgICAgc0luZGV4ID09PSB0aGlzLnNlbGVjdGlvbkJvdW5kcy5sZWZ0LnN1YkNvbEluZGV4O1xuICB9XG4gIGlzUmlnaHRCb3JkZXIocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg/OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0aW9uQm91bmRzLnJpZ2h0KSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3Qgc0luZGV4ID0gc3ViQ29sSW5kZXggPz8gMDtcbiAgICByZXR1cm4gdGhpcy5pc1NlbGVjdGVkKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgpICYmXG4gICAgICBjb2xJbmRleCA9PT0gdGhpcy5zZWxlY3Rpb25Cb3VuZHMucmlnaHQuY29sSW5kZXggJiZcbiAgICAgIHNJbmRleCA9PT0gdGhpcy5zZWxlY3Rpb25Cb3VuZHMucmlnaHQuc3ViQ29sSW5kZXg7XG4gIH1cbiAgaXNUb3BMZWZ0Q29ybmVyKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4PzogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNUb3BCb3JkZXIocm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCkgJiYgdGhpcy5pc0xlZnRCb3JkZXIocm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCk7XG4gIH1cbiAgaXNUb3BSaWdodENvcm5lcihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleD86IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmlzVG9wQm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgpICYmIHRoaXMuaXNSaWdodEJvcmRlcihyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4KTtcbiAgfVxuICBpc0JvdHRvbUxlZnRDb3JuZXIocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg/OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5pc0JvdHRvbUJvcmRlcihyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4KSAmJiB0aGlzLmlzTGVmdEJvcmRlcihyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4KTtcbiAgfVxuICBpc0JvdHRvbVJpZ2h0Q29ybmVyKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4PzogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNCb3R0b21Cb3JkZXIocm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCkgJiYgdGhpcy5pc1JpZ2h0Qm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgpO1xuICB9XG5cblxuICBzZXRBY3RpdmVDZWxsKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4PzogbnVtYmVyKSB7XG4gICAgY29uc3Qgc0luZGV4ID0gc3ViQ29sSW5kZXggPz8gMDtcbiAgICB0aGlzLmFjdGl2ZUNlbGwgPSB7IHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXg6IHNJbmRleCwga2V5OiBgJHtyb3dJbmRleH0tJHtjb2xJbmRleH0tJHtzSW5kZXh9YCwgZmllbGQ6ICcnIH07XG4gIH1cblxuICBpc0FjdGl2ZUNlbGwocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg/OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlQ2VsbCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHNJbmRleCA9IHN1YkNvbEluZGV4ID8/IDA7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlQ2VsbC5yb3dJbmRleCA9PT0gcm93SW5kZXggJiYgdGhpcy5hY3RpdmVDZWxsLmNvbEluZGV4ID09PSBjb2xJbmRleCAmJiB0aGlzLmFjdGl2ZUNlbGwuc3ViQ29sSW5kZXggPT09IHNJbmRleDtcbiAgfVxuXG4gIHNlbGVjdEFsbENlbGxzKGRhdGFTZXQ6IGFueVtdLCBjb2x1bW5zOiBhbnlbXSkge1xuICAgIGlmICghZGF0YVNldD8ubGVuZ3RoIHx8ICFjb2x1bW5zPy5sZW5ndGgpIHJldHVybjtcblxuICAgIHRoaXMuc2VsZWN0ZWRDZWxscyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRLZXlzLmNsZWFyKCk7XG4gICAgdGhpcy5zZWxlY3Rpb25TdGFydCA9IG51bGw7XG4gICAgdGhpcy5pc1NlbGVjdGluZyA9IHRydWU7XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiBkYXRhU2V0KSB7XG4gICAgICBjb25zdCBySW5kZXggPSByb3cuX192aXJ0dWFsSW5kZXg7XG4gICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNvbHVtbnMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgY29uc3QgY29sID0gY29sdW1uc1tjXTtcbiAgICAgICAgaWYgKGNvbC5pc192aXNpYmxlID09PSBmYWxzZSkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgZmllbGQgPSBjb2wuZmllbGQgfHwgY29sLm5hbWU7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSAmJiBjb2wuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgY29sLmNoaWxkcmVuLmZvckVhY2goKHN1YkNvbDogYW55LCBzOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGlmIChzdWJDb2wuaXNfdmlzaWJsZSA9PT0gZmFsc2UpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3Qga2V5ID0gYCR7ckluZGV4fS0ke2N9LSR7c31gO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEtleXMuYWRkKGtleSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2VsbHMucHVzaCh7XG4gICAgICAgICAgICAgIHJvd0luZGV4OiBySW5kZXgsXG4gICAgICAgICAgICAgIGNvbEluZGV4OiBjLFxuICAgICAgICAgICAgICBzdWJDb2xJbmRleDogcyxcbiAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gYCR7ckluZGV4fS0ke2N9LTBgO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzLmFkZChrZXkpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDZWxscy5wdXNoKHtcbiAgICAgICAgICAgIHJvd0luZGV4OiBySW5kZXgsXG4gICAgICAgICAgICBjb2xJbmRleDogYyxcbiAgICAgICAgICAgIHN1YkNvbEluZGV4OiAwLFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBrZXlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaXNTZWxlY3RpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGlvblN0YXJ0ID0gdGhpcy5zZWxlY3RlZENlbGxzWzBdID8/IG51bGw7XG4gICAgdGhpcy51cGRhdGVTZWxlY3Rpb25Cb3VuZGFyaWVzKCk7XG4gIH1cblxuXG5cbiAgbW92ZUFjdGl2ZUNlbGwoXG4gICAgZGlyZWN0aW9uOiAndXAnIHwgJ2Rvd24nIHwgJ2xlZnQnIHwgJ3JpZ2h0JyxcbiAgICBzaGlmdEtleTogYm9vbGVhbixcbiAgICBkYXRhU2V0OiBhbnlbXSxcbiAgICBjb2x1bW5zOiBhbnlbXVxuICApIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlQ2VsbCkgcmV0dXJuO1xuXG4gICAgbGV0IHsgcm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCA9IDAgfSA9IHRoaXMuYWN0aXZlQ2VsbDtcbiAgICBjb25zdCBjb2wgPSB0aGlzLmdldENvbHVtbkJ5SW5kZXgoY29sSW5kZXgpO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQWRqdXN0IGZvciAxLWJhc2VkIHZpcnR1YWwgaW5kZXhcbiAgICBjb25zdCBtaW5Sb3cgPSAxOyAgICAgICAgICAgICAgIC8vIGZpcnN0IHJvdyBfX3ZpcnR1YWxJbmRleFxuICAgIGNvbnN0IG1heFJvdyA9IGRhdGFTZXQubGVuZ3RoOyAgLy8gbGFzdCByb3cgX192aXJ0dWFsSW5kZXhcbiAgICBjb25zdCBtYXhDb2wgPSBjb2x1bW5zLmxlbmd0aCAtIDE7XG5cbiAgICAvLyBDb21wdXRlIG5ldyBpbmRpY2VzXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ3VwJzpcbiAgICAgICAgcm93SW5kZXggPSBNYXRoLm1heChtaW5Sb3csIHJvd0luZGV4IC0gMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgIHJvd0luZGV4ID0gTWF0aC5taW4obWF4Um93LCByb3dJbmRleCArIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xlZnQnOiB7XG4gICAgICAgIC8vIDHvuI/ig6MgTW92ZSBpbnNpZGUgc3ViLWNvbHVtbnNcbiAgICAgICAgaWYgKHN1YkNvbEluZGV4ID4gMCkge1xuICAgICAgICAgIHN1YkNvbEluZGV4IC09IDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAy77iP4oOjIEZpbmQgcHJldmlvdXMgdmlzaWJsZSBjb2x1bW5cbiAgICAgICAgY29uc3QgcHJldkNvbCA9IHRoaXMuZmluZFByZXZWaXNpYmxlQ29sKGNvbEluZGV4KTtcbiAgICAgICAgaWYgKHByZXZDb2wgIT09IG51bGwpIHtcbiAgICAgICAgICBjb2xJbmRleCA9IHByZXZDb2w7XG4gICAgICAgICAgY29uc3QgcENvbCA9IHRoaXMuZ2V0Q29sdW1uQnlJbmRleChjb2xJbmRleCk7XG4gICAgICAgICAgc3ViQ29sSW5kZXggPSBwQ29sPy5jaGlsZHJlbj8ubGVuZ3RoXG4gICAgICAgICAgICA/IHBDb2wuY2hpbGRyZW4ubGVuZ3RoIC0gMVxuICAgICAgICAgICAgOiAwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gM++4j+KDoyBTdGFydCBvZiByb3cg4oaSIHByZXZpb3VzIHJvdyBsYXN0IHZpc2libGUgY29sdW1uXG4gICAgICAgIGlmIChyb3dJbmRleCA+IG1pblJvdykge1xuICAgICAgICAgIHJvd0luZGV4IC09IDE7XG4gICAgICAgICAgY29uc3QgbGFzdFZpc2libGUgPSB0aGlzLmZpbmRQcmV2VmlzaWJsZUNvbChtYXhDb2wgKyAxKTtcbiAgICAgICAgICBpZiAobGFzdFZpc2libGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbEluZGV4ID0gbGFzdFZpc2libGU7XG4gICAgICAgICAgICBjb25zdCBsQ29sID0gdGhpcy5nZXRDb2x1bW5CeUluZGV4KGNvbEluZGV4KTtcbiAgICAgICAgICAgIHN1YkNvbEluZGV4ID0gbENvbD8uY2hpbGRyZW4/Lmxlbmd0aFxuICAgICAgICAgICAgICA/IGxDb2wuY2hpbGRyZW4ubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cblxuICAgICAgY2FzZSAncmlnaHQnOiB7XG4gICAgICAgIGNvbnN0IG1heFN1YiA9IGNvbD8uY2hpbGRyZW4/Lmxlbmd0aCA/IGNvbC5jaGlsZHJlbi5sZW5ndGggLSAxIDogMDtcblxuICAgICAgICAvLyAx77iP4oOjIE1vdmUgaW5zaWRlIHN1Yi1jb2x1bW5zXG4gICAgICAgIGlmIChzdWJDb2xJbmRleCA8IG1heFN1Yikge1xuICAgICAgICAgIHN1YkNvbEluZGV4ICs9IDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAy77iP4oOjIEZpbmQgbmV4dCB2aXNpYmxlIGNvbHVtblxuICAgICAgICBjb25zdCBuZXh0Q29sID0gdGhpcy5maW5kTmV4dFZpc2libGVDb2woY29sSW5kZXgsIG1heENvbCk7XG4gICAgICAgIGlmIChuZXh0Q29sICE9PSBudWxsKSB7XG4gICAgICAgICAgY29sSW5kZXggPSBuZXh0Q29sO1xuICAgICAgICAgIHN1YkNvbEluZGV4ID0gMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDPvuI/ig6MgRW5kIG9mIHJvdyDihpIgbmV4dCByb3cgZmlyc3QgdmlzaWJsZSBjb2x1bW5cbiAgICAgICAgaWYgKHJvd0luZGV4IDwgbWF4Um93KSB7XG4gICAgICAgICAgcm93SW5kZXggKz0gMTtcbiAgICAgICAgICBjb25zdCBmaXJzdFZpc2libGUgPSB0aGlzLmZpbmROZXh0VmlzaWJsZUNvbCgtMSwgbWF4Q29sKTtcbiAgICAgICAgICBpZiAoZmlyc3RWaXNpYmxlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb2xJbmRleCA9IGZpcnN0VmlzaWJsZTtcbiAgICAgICAgICAgIHN1YkNvbEluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdWJDb2xJbmRleCA9IHN1YkNvbEluZGV4ID8/IDA7XG5cbiAgICAvLyBTZXQgYWN0aXZlIGNlbGxcbiAgICBjb25zdCBhY3RpdmU6IENlbGxQb3MgPSB7XG4gICAgICByb3dJbmRleCxcbiAgICAgIGNvbEluZGV4LFxuICAgICAgc3ViQ29sSW5kZXgsXG4gICAgICBrZXk6IGAke3Jvd0luZGV4fS0ke2NvbEluZGV4fS0ke3N1YkNvbEluZGV4fWAsXG4gICAgICBmaWVsZDogY29sdW1uc1tjb2xJbmRleF0/LmZpZWxkIHx8ICcnXG4gICAgfTtcbiAgICB0aGlzLnNldEFjdGl2ZUNlbGwocm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCk7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBBbHdheXMgY29weSBhY3RpdmUgY2VsbCBpbnRvIHNlbGVjdGlvbiBpZiBTaGlmdCBub3QgcHJlc3NlZFxuICAgIGlmICghc2hpZnRLZXkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDZWxscyA9IFthY3RpdmVdO1xuICAgICAgdGhpcy5zZWxlY3RlZEtleXMgPSBuZXcgU2V0KFthY3RpdmUua2V5XSk7XG4gICAgICB0aGlzLnNlbGVjdGlvblN0YXJ0ID0geyAuLi5hY3RpdmUgfTtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uQm91bmRhcmllcygpO1xuICAgIH1cblxuICAgIC8vIEV4dGVuZCBzZWxlY3Rpb24gaWYgU2hpZnQgcHJlc3NlZFxuICAgIGlmIChzaGlmdEtleSkge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvblN0YXJ0KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhcnQgPSB7IC4uLnRoaXMuYWN0aXZlQ2VsbCEgfTtcbiAgICAgIH1cblxuICAgICAgLy8g8J+UpSBDVFJMICsgU0hJRlQg4oaSIGV4dGVuZCB0byBlZGdlXG4gICAgICBpZiAodGhpcy5jdHJsS2V5UHJlc3NlZCkge1xuICAgICAgICBjb25zdCBlZGdlQ2VsbCA9IHRoaXMuZ2V0RWRnZUNlbGwoXG4gICAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICAgIGRhdGFTZXQsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICB0aGlzLmFjdGl2ZUNlbGwhXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zZXRBY3RpdmVDZWxsKFxuICAgICAgICAgIGVkZ2VDZWxsLnJvd0luZGV4LFxuICAgICAgICAgIGVkZ2VDZWxsLmNvbEluZGV4LFxuICAgICAgICAgIGVkZ2VDZWxsLnN1YkNvbEluZGV4XG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5leHRlbmRTZWxlY3Rpb25CeUtleWJvYXJkKGVkZ2VDZWxsKTtcblxuICAgICAgICB0aGlzLnNjcm9sbENlbGxJbnRvVmlld0ltbWVkaWF0ZShcbiAgICAgICAgICBlZGdlQ2VsbC5yb3dJbmRleCxcbiAgICAgICAgICBlZGdlQ2VsbC5jb2xJbmRleFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gTm9ybWFsIFNoaWZ0ICsgQXJyb3dcbiAgICAgIHRoaXMuZXh0ZW5kU2VsZWN0aW9uQnlLZXlib2FyZChhY3RpdmUpO1xuICAgIH1cblxuXG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBTY3JvbGwgdG8ga2VlcCBhY3RpdmUgY2VsbCBpbiB2aWV3XG4gICAgY29uc3QgY2VsbCA9IHRoaXMudmVydGljYWxDb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoYFtsb2NhdGlvbj0nJHtyb3dJbmRleH0tJHtjb2xJbmRleH0nXWApIGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICghY2VsbCB8fCAhdGhpcy52ZXJ0aWNhbENvbnRhaW5lciB8fCAhdGhpcy5ob3Jpem9udGFsQ29udGFpbmVyKSByZXR1cm47XG5cbiAgICBjb25zdCB2ZXJ0UmVjdCA9IHRoaXMudmVydGljYWxDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgaG9yUmVjdCA9IHRoaXMuaG9yaXpvbnRhbENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBjZWxsUmVjdCA9IGNlbGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qgc2Nyb2xsTWFyZ2luID0gNTtcblxuICAgIC8vIFZlcnRpY2FsIHNjcm9sbFxuICAgIGlmIChjZWxsUmVjdC5ib3R0b20gPiB2ZXJ0UmVjdC5ib3R0b20pIHtcbiAgICAgIHRoaXMudmVydGljYWxDb250YWluZXIuc2Nyb2xsQnkoeyB0b3A6IGNlbGxSZWN0LmJvdHRvbSAtIHZlcnRSZWN0LmJvdHRvbSArIHNjcm9sbE1hcmdpbiwgYmVoYXZpb3I6ICdhdXRvJyB9KTtcbiAgICB9IGVsc2UgaWYgKGNlbGxSZWN0LnRvcCA8IHZlcnRSZWN0LnRvcCkge1xuICAgICAgdGhpcy52ZXJ0aWNhbENvbnRhaW5lci5zY3JvbGxCeSh7IHRvcDogY2VsbFJlY3QudG9wIC0gdmVydFJlY3QudG9wIC0gc2Nyb2xsTWFyZ2luLCBiZWhhdmlvcjogJ2F1dG8nIH0pO1xuICAgIH1cblxuICAgIC8vIEhvcml6b250YWwgc2Nyb2xsXG4gICAgaWYgKGNlbGxSZWN0LnJpZ2h0ID4gaG9yUmVjdC5yaWdodCkge1xuICAgICAgdGhpcy5ob3Jpem9udGFsQ29udGFpbmVyLnNjcm9sbEJ5KHsgbGVmdDogY2VsbFJlY3QucmlnaHQgLSBob3JSZWN0LnJpZ2h0ICsgc2Nyb2xsTWFyZ2luLCBiZWhhdmlvcjogJ2F1dG8nIH0pO1xuICAgIH0gZWxzZSBpZiAoY2VsbFJlY3QubGVmdCA8IGhvclJlY3QubGVmdCkge1xuICAgICAgdGhpcy5ob3Jpem9udGFsQ29udGFpbmVyLnNjcm9sbEJ5KHsgbGVmdDogY2VsbFJlY3QubGVmdCAtIGhvclJlY3QubGVmdCAtIHNjcm9sbE1hcmdpbiwgYmVoYXZpb3I6ICdhdXRvJyB9KTtcbiAgICB9XG4gIH1cblxuICBjdHJsS2V5UHJlc3NlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgaXNDb2x1bW5WaXNpYmxlKGNvbEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBjb2wgPSB0aGlzLmdldENvbHVtbkJ5SW5kZXgoY29sSW5kZXgpO1xuICAgIGlmICghY29sKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBQYXJlbnQgdmlzaWJsZSBPUiBhbnkgY2hpbGQgdmlzaWJsZVxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbikpIHtcbiAgICAgIHJldHVybiBjb2wuY2hpbGRyZW4uc29tZSgoYzogYW55KSA9PiBjLmlzX3Zpc2libGUgIT09IGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbC5pc192aXNpYmxlICE9PSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZE5leHRWaXNpYmxlQ29sKHN0YXJ0OiBudW1iZXIsIG1heENvbDogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0ICsgMTsgaSA8PSBtYXhDb2w7IGkrKykge1xuICAgICAgaWYgKHRoaXMuaXNDb2x1bW5WaXNpYmxlKGkpKSByZXR1cm4gaTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGZpbmRQcmV2VmlzaWJsZUNvbChzdGFydDogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmICh0aGlzLmlzQ29sdW1uVmlzaWJsZShpKSkgcmV0dXJuIGk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cblxuXG5cbiAgc2Nyb2xsQWN0aXZlQ2VsbEludG9WaWV3KHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMudmVydGljYWxDb250YWluZXIgfHwgIXRoaXMuaG9yaXpvbnRhbENvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgY29uc3Qgcm93RWwgPSB0aGlzLnZlcnRpY2FsQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYFtsb2NhdGlvbj0nJHtyb3dJbmRleH0tJHtjb2xJbmRleH0nXWApIGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICghcm93RWwpIHJldHVybjtcblxuICAgIGNvbnN0IHJvd1JlY3QgPSByb3dFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB2ZXJ0UmVjdCA9IHRoaXMudmVydGljYWxDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgaG9yUmVjdCA9IHRoaXMuaG9yaXpvbnRhbENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIC8vIFZlcnRpY2FsIHNjcm9sbFxuICAgIGlmIChyb3dSZWN0LmJvdHRvbSA+IHZlcnRSZWN0LmJvdHRvbSkge1xuICAgICAgdGhpcy52ZXJ0aWNhbENvbnRhaW5lci5zY3JvbGxCeSh7IHRvcDogcm93UmVjdC5ib3R0b20gLSB2ZXJ0UmVjdC5ib3R0b20gKyA1LCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgfSBlbHNlIGlmIChyb3dSZWN0LnRvcCA8IHZlcnRSZWN0LnRvcCkge1xuICAgICAgdGhpcy52ZXJ0aWNhbENvbnRhaW5lci5zY3JvbGxCeSh7IHRvcDogcm93UmVjdC50b3AgLSB2ZXJ0UmVjdC50b3AgLSA1LCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgfVxuXG4gICAgLy8gSG9yaXpvbnRhbCBzY3JvbGxcbiAgICBpZiAocm93UmVjdC5yaWdodCA+IGhvclJlY3QucmlnaHQpIHtcbiAgICAgIHRoaXMuaG9yaXpvbnRhbENvbnRhaW5lci5zY3JvbGxCeSh7IGxlZnQ6IHJvd1JlY3QucmlnaHQgLSBob3JSZWN0LnJpZ2h0ICsgNSwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgIH0gZWxzZSBpZiAocm93UmVjdC5sZWZ0IDwgaG9yUmVjdC5sZWZ0KSB7XG4gICAgICB0aGlzLmhvcml6b250YWxDb250YWluZXIuc2Nyb2xsQnkoeyBsZWZ0OiByb3dSZWN0LmxlZnQgLSBob3JSZWN0LmxlZnQgLSA1LCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgfVxuICB9XG5cblxuICBleHRlbmRTZWxlY3Rpb25CeUtleWJvYXJkKHRhcmdldDogQ2VsbFBvcykge1xuICAgIGlmICghdGhpcy5zZWxlY3Rpb25TdGFydCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25TdGFydCA9IHsgLi4udGFyZ2V0IH07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgY29uc3QgbWluUm93ID0gTWF0aC5taW4oc3RhcnQucm93SW5kZXgsIHRhcmdldC5yb3dJbmRleCk7XG4gICAgY29uc3QgbWF4Um93ID0gTWF0aC5tYXgoc3RhcnQucm93SW5kZXgsIHRhcmdldC5yb3dJbmRleCk7XG5cbiAgICBjb25zdCBtaW5Db2wgPSBNYXRoLm1pbihzdGFydC5jb2xJbmRleCwgdGFyZ2V0LmNvbEluZGV4KTtcbiAgICBjb25zdCBtYXhDb2wgPSBNYXRoLm1heChzdGFydC5jb2xJbmRleCwgdGFyZ2V0LmNvbEluZGV4KTtcblxuICAgIGNvbnN0IG5ld0tleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBuZXdDZWxsczogQ2VsbFBvc1tdID0gW107XG5cbiAgICBmb3IgKGxldCByID0gbWluUm93OyByIDw9IG1heFJvdzsgcisrKSB7XG4gICAgICBmb3IgKGxldCBjID0gbWluQ29sOyBjIDw9IG1heENvbDsgYysrKSB7XG4gICAgICAgIGNvbnN0IGNvbE9iaiA9IHRoaXMuZ2V0Q29sdW1uQnlJbmRleChjKTtcbiAgICAgICAgaWYgKCFjb2xPYmopIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IHN1YkNvdW50ID0gY29sT2JqLmNoaWxkcmVuPy5sZW5ndGggPz8gMTtcblxuICAgICAgICBjb25zdCBzdGFydFN1YiA9XG4gICAgICAgICAgYyA9PT0gc3RhcnQuY29sSW5kZXggPyBzdGFydC5zdWJDb2xJbmRleCA6IDA7XG4gICAgICAgIGNvbnN0IGVuZFN1YiA9XG4gICAgICAgICAgYyA9PT0gdGFyZ2V0LmNvbEluZGV4ID8gdGFyZ2V0LnN1YkNvbEluZGV4IDogc3ViQ291bnQgLSAxO1xuXG4gICAgICAgIGZvciAobGV0IHMgPSBzdGFydFN1YjsgcyA8PSBlbmRTdWI7IHMrKykge1xuICAgICAgICAgIGNvbnN0IGtleSA9IGAke3J9LSR7Y30tJHtzfWA7XG4gICAgICAgICAgbmV3S2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICBuZXdDZWxscy5wdXNoKHtcbiAgICAgICAgICAgIHJvd0luZGV4OiByLFxuICAgICAgICAgICAgY29sSW5kZXg6IGMsXG4gICAgICAgICAgICBzdWJDb2xJbmRleDogcyxcbiAgICAgICAgICAgIGZpZWxkOiBjb2xPYmouZmllbGQgfHwgJycsXG4gICAgICAgICAgICBrZXlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRLZXlzID0gbmV3S2V5cztcbiAgICB0aGlzLnNlbGVjdGVkQ2VsbHMgPSBuZXdDZWxscztcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbkJvdW5kYXJpZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RWRnZUNlbGwoXG4gICAgZGlyZWN0aW9uOiAndXAnIHwgJ2Rvd24nIHwgJ2xlZnQnIHwgJ3JpZ2h0JyxcbiAgICBkYXRhU2V0OiBhbnlbXSxcbiAgICBjb2x1bW5zOiBhbnlbXSxcbiAgICBmcm9tOiBDZWxsUG9zXG4gICk6IENlbGxQb3Mge1xuICAgIGNvbnN0IG1pblJvdyA9IDE7XG4gICAgY29uc3QgbWF4Um93ID0gZGF0YVNldC5sZW5ndGg7XG4gICAgY29uc3QgbWF4Q29sID0gY29sdW1ucy5sZW5ndGggLSAxO1xuXG4gICAgbGV0IHsgcm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCB9ID0gZnJvbTtcblxuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICd1cCc6XG4gICAgICAgIHJvd0luZGV4ID0gbWluUm93O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgIHJvd0luZGV4ID0gbWF4Um93O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbGVmdCc6IHtcbiAgICAgICAgY29uc3QgZmlyc3RWaXNpYmxlID0gdGhpcy5maW5kTmV4dFZpc2libGVDb2woLTEsIG1heENvbCk7XG4gICAgICAgIGlmIChmaXJzdFZpc2libGUgIT09IG51bGwpIHtcbiAgICAgICAgICBjb2xJbmRleCA9IGZpcnN0VmlzaWJsZTtcbiAgICAgICAgICBjb25zdCBjb2wgPSB0aGlzLmdldENvbHVtbkJ5SW5kZXgoY29sSW5kZXgpO1xuICAgICAgICAgIHN1YkNvbEluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAncmlnaHQnOiB7XG4gICAgICAgIGNvbnN0IGxhc3RWaXNpYmxlID0gdGhpcy5maW5kUHJldlZpc2libGVDb2wobWF4Q29sICsgMSk7XG4gICAgICAgIGlmIChsYXN0VmlzaWJsZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbEluZGV4ID0gbGFzdFZpc2libGU7XG4gICAgICAgICAgY29uc3QgY29sID0gdGhpcy5nZXRDb2x1bW5CeUluZGV4KGNvbEluZGV4KTtcbiAgICAgICAgICBzdWJDb2xJbmRleCA9IGNvbD8uY2hpbGRyZW4/Lmxlbmd0aFxuICAgICAgICAgICAgPyBjb2wuY2hpbGRyZW4ubGVuZ3RoIC0gMVxuICAgICAgICAgICAgOiAwO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByb3dJbmRleCxcbiAgICAgIGNvbEluZGV4LFxuICAgICAgc3ViQ29sSW5kZXgsXG4gICAgICBrZXk6IGAke3Jvd0luZGV4fS0ke2NvbEluZGV4fS0ke3N1YkNvbEluZGV4fWAsXG4gICAgICBmaWVsZDogY29sdW1uc1tjb2xJbmRleF0/LmZpZWxkIHx8ICcnXG4gICAgfTtcbiAgfVxuXG4gIHJvd0hlaWdodCA9IDQ0O1xuICBwcml2YXRlIHNjcm9sbENlbGxJbnRvVmlld0ltbWVkaWF0ZShyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLnZlcnRpY2FsQ29udGFpbmVyIHx8ICF0aGlzLmhvcml6b250YWxDb250YWluZXIpIHJldHVybjtcblxuICAgIGNvbnN0IG1hcmdpbiA9IDY7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBWZXJ0aWNhbCBzY3JvbGxcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCB0YXJnZXRTY3JvbGxUb3AgPSAocm93SW5kZXggLSAxKSAqIHRoaXMucm93SGVpZ2h0O1xuICAgIGNvbnN0IG1heFNjcm9sbFRvcCA9IHRoaXMudmVydGljYWxDb250YWluZXIuc2Nyb2xsSGVpZ2h0IC0gdGhpcy52ZXJ0aWNhbENvbnRhaW5lci5jbGllbnRIZWlnaHQ7XG4gICAgdGhpcy52ZXJ0aWNhbENvbnRhaW5lci5zY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0YXJnZXRTY3JvbGxUb3AsIG1heFNjcm9sbFRvcCkpO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gSG9yaXpvbnRhbCBzY3JvbGxcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBhY3RpdmVDZWxsID0gdGhpcy52ZXJ0aWNhbENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFxuICAgICAgYFtsb2NhdGlvbj0nJHtyb3dJbmRleH0tJHtjb2xJbmRleH0nXWBcbiAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICghYWN0aXZlQ2VsbCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5ob3Jpem9udGFsQ29udGFpbmVyO1xuXG4gICAgLy8gY2VsbCdzIG9mZnNldCByZWxhdGl2ZSB0byBjb250YWluZXJcbiAgICBjb25zdCBjZWxsTGVmdCA9IGFjdGl2ZUNlbGwub2Zmc2V0TGVmdDtcbiAgICBjb25zdCBjZWxsUmlnaHQgPSBjZWxsTGVmdCArIGFjdGl2ZUNlbGwub2Zmc2V0V2lkdGg7XG5cbiAgICBjb25zdCBzY3JvbGxMZWZ0ID0gY29udGFpbmVyLnNjcm9sbExlZnQ7XG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBjb250YWluZXIuY2xpZW50V2lkdGg7XG5cbiAgICBpZiAoY2VsbExlZnQgPCBzY3JvbGxMZWZ0KSB7XG4gICAgICBjb250YWluZXIuc2Nyb2xsTGVmdCA9IGNlbGxMZWZ0IC0gbWFyZ2luO1xuICAgIH0gZWxzZSBpZiAoY2VsbFJpZ2h0ID4gc2Nyb2xsTGVmdCArIGNvbnRhaW5lcldpZHRoKSB7XG4gICAgICBjb250YWluZXIuc2Nyb2xsTGVmdCA9IGNlbGxSaWdodCAtIGNvbnRhaW5lcldpZHRoICsgbWFyZ2luO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNMYXN0Um93KHJvd0luZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMudmVydGljYWxDb250YWluZXIpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgcm93SW5kZXggPT09XG4gICAgICBNYXRoLnJvdW5kKFxuICAgICAgICB0aGlzLnZlcnRpY2FsQ29udGFpbmVyLnNjcm9sbEhlaWdodCAvXG4gICAgICAgICh0aGlzLnZlcnRpY2FsQ29udGFpbmVyLnNjcm9sbEhlaWdodCAvXG4gICAgICAgICAgdGhpcy52ZXJ0aWNhbENvbnRhaW5lci5jaGlsZHJlbi5sZW5ndGgpXG4gICAgICApIHx8IGZhbHNlXG4gICAgKTtcbiAgfVxuXG5nZXQgc2VsZWN0ZWRDb2x1bW5JbmRpY2VzKCk6IG51bWJlcltdIHtcbiAgaWYgKCF0aGlzLnNlbGVjdGlvbkJvdW5kcy5sZWZ0IHx8ICF0aGlzLnNlbGVjdGlvbkJvdW5kcy5yaWdodCkgcmV0dXJuIFtdO1xuXG4gIGNvbnN0IGluZGljZXM6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSB0aGlzLnNlbGVjdGlvbkJvdW5kcy5sZWZ0LmNvbEluZGV4OyBpIDw9IHRoaXMuc2VsZWN0aW9uQm91bmRzLnJpZ2h0LmNvbEluZGV4OyBpKyspIHtcbiAgICAvLyBPbmx5IGluY2x1ZGUgdmlzaWJsZSBjb2x1bW5zXG4gICAgaWYgKHRoaXMuaXNDb2x1bW5WaXNpYmxlKGkpKSBpbmRpY2VzLnB1c2goaSk7XG4gIH1cbiAgcmV0dXJuIGluZGljZXM7XG59XG5cblxuXG59XG4iXX0=
|
|
566
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1zZWxlY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtZ3JpZC9zcmMvbGliL3NlcnZpY2VzL2NlbGwtc2VsZWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFZM0MsTUFBTSxPQUFPLG9CQUFvQjtJQURqQztRQUdFLGtCQUFhLEdBQWMsRUFBRSxDQUFDO1FBQzlCLGlCQUFZLEdBQWdCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEMsbUJBQWMsR0FBbUIsSUFBSSxDQUFDO1FBQ3RDLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGVBQVUsR0FBbUIsSUFBSSxDQUFDO1FBRzFCLG9DQUErQixHQUFRLElBQUksQ0FBQztRQUM1QyxnQkFBVyxHQUFHLEdBQUcsQ0FBQztRQUNsQixpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUUxQixZQUFPLEdBQVUsRUFBRSxDQUFDO1FBQ3BCLHFCQUFnQixHQUEyQixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFFdEQsc0JBQWlCLEdBQXVCLElBQUksQ0FBQztRQUM3Qyx3QkFBbUIsR0FBdUIsSUFBSSxDQUFDO1FBRXhDLG9CQUFlLEdBS2xCLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1FBMlpuRCxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQTZKdkIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQTREakIsWUFBTyxHQUFVLEVBQUUsQ0FBQztLQXNCbkI7SUF4b0JDLGNBQWMsQ0FBQyxHQUFRLEVBQUUsTUFBVyxFQUFFLFdBQTBCLEVBQUUsS0FBaUI7UUFDakYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFB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LElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztRQUV0RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNyRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssT0FBTyxDQUFDLENBQUM7UUFDekUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUV2RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN0RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDM0UsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUMzRSxDQUFDO0lBRUQsd0RBQXdEO0lBQ3hELFdBQVcsQ0FBQyxRQUFnQixFQUFFLFFBQWdCLEVBQUUsV0FBb0I7UUFDbEUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLElBQUksUUFBUSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDO0lBQ25HLENBQUM7SUFDRCxjQUFjLENBQUMsUUFBZ0IsRUFBRSxRQUFnQixFQUFFLFdBQW9CO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxJQUFJLFFBQVEsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQztJQUN0RyxDQUFDO0lBQ0QsWUFBWSxDQUFDLFFBQWdCLEVBQUUsUUFBZ0IsRUFBRSxXQUFvQjtRQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDN0MsTUFBTSxNQUFNLEdBQUcsV0FBVyxJQUFJLENBQUMsQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUM7WUFDckQsUUFBUSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFDL0MsTUFBTSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsYUFBYSxDQUFDLFFBQWdCLEVBQUUsUUFBZ0IsRUFBRSxXQUFvQjtRQUNwRSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDOUMsTUFBTSxNQUFNLEdBQUcsV0FBVyxJQUFJLENBQUMsQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUM7WUFDckQsUUFBUSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVE7WUFDaEQsTUFBTSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsZUFBZSxDQUFDLFFBQWdCLEVBQUUsUUFBZ0IsRUFBRSxXQUFvQjtRQUN0RSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDakgsQ0FBQztJQUNELGdCQUFnQixDQUFDLFFBQWdCLEVBQUUsUUFBZ0IsRUFBRSxXQUFvQjtRQUN2RSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbEgsQ0FBQztJQUNELGtCQUFrQixDQUFDLFFBQWdCLEVBQUUsUUFBZ0IsRUFBRSxXQUFvQjtRQUN6RSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDcEgsQ0FBQztJQUNELG1CQUFtQixDQUFDLFFBQWdCLEVBQUUsUUFBZ0IsRUFBRSxXQUFvQjtRQUMxRSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckgsQ0FBQztJQUdELGFBQWEsQ0FBQyxRQUFnQixFQUFFLFFBQWdCLEVBQUUsV0FBb0I7UUFDcEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sTUFBTSxHQUFHLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFRLElBQUksUUFBUSxJQUFJLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNySCxDQUFDO0lBRUQsWUFBWSxDQUFDLFFBQWdCLEVBQUUsUUFBZ0IsRUFBRSxXQUFvQjtRQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNuQyxNQUFNLE1BQU0sR0FBRyxXQUFXLElBQUksQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsS0FBSyxNQUFNLENBQUM7SUFDbEksQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFjLEVBQUUsT0FBYztRQUMzQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNO1lBQUUsT0FBTztRQUVqRCxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBRXhCLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFO1lBQ3pCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxjQUFjLENBQUM7WUFDbEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3ZDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLEtBQUs7b0JBQUUsU0FBUztnQkFFdkMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUVwQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO29CQUN0RCxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQVcsRUFBRSxDQUFTLEVBQUUsRUFBRTt3QkFDOUMsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLEtBQUs7NEJBQUUsT0FBTzt3QkFFeEMsTUFBTSxHQUFHLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7NEJBQ3RCLFFBQVEsRUFBRSxNQUFNOzRCQUNoQixRQUFRLEVBQUUsQ0FBQzs0QkFDWCxXQUFXLEVBQUUsQ0FBQzs0QkFDZCxLQUFLOzRCQUNMLEdBQUc7eUJBQ0osQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO2lCQUNKO3FCQUFNO29CQUNMLE1BQU0sR0FBRyxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7d0JBQ3RCLFFBQVEsRUFBRSxNQUFNO3dCQUNoQixRQUFRLEVBQUUsQ0FBQzt3QkFDWCxXQUFXLEVBQUUsQ0FBQzt3QkFDZCxLQUFLO3dCQUNMLEdBQUc7cUJBQ0osQ0FBQyxDQUFDO2lCQUNKO2FBQ0Y7U0FDRjtRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDcEQsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUlELGNBQWMsQ0FDWixTQUEyQyxFQUMzQyxRQUFpQixFQUNqQixPQUFjLEVBQ2QsT0FBYztRQUVkLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFFN0IsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDOUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVDLDhCQUE4QjtRQUM5QixtQ0FBbUM7UUFDbkMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQWUsMkJBQTJCO1FBQzNELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBRSwwQkFBMEI7UUFDMUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFbEMsc0JBQXNCO1FBQ3RCLFFBQVEsU0FBUyxFQUFFO1lBQ2pCLEtBQUssSUFBSTtnQkFDUCxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLE1BQU07WUFDUixLQUFLLE1BQU0sQ0FBQyxDQUFDO2dCQUNYLDhCQUE4QjtnQkFDOUIsSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFO29CQUNuQixXQUFXLElBQUksQ0FBQyxDQUFDO29CQUNqQixNQUFNO2lCQUNQO2dCQUVELG1DQUFtQztnQkFDbkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7b0JBQ3BCLFFBQVEsR0FBRyxPQUFPLENBQUM7b0JBQ25CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDN0MsV0FBVyxHQUFHLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTTt3QkFDbEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUM7d0JBQzFCLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ04sTUFBTTtpQkFDUDtnQkFFRCxzREFBc0Q7Z0JBQ3RELElBQUksUUFBUSxHQUFHLE1BQU0sRUFBRTtvQkFDckIsUUFBUSxJQUFJLENBQUMsQ0FBQztvQkFDZCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUN4RCxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUU7d0JBQ3hCLFFBQVEsR0FBRyxXQUFXLENBQUM7d0JBQ3ZCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDN0MsV0FBVyxHQUFHLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTTs0QkFDbEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUM7NEJBQzFCLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ1A7aUJBQ0Y7Z0JBRUQsTUFBTTthQUNQO1lBR0QsS0FBSyxPQUFPLENBQUMsQ0FBQztnQkFDWixNQUFNLE1BQU0sR0FBRyxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRW5FLDhCQUE4QjtnQkFDOUIsSUFBSSxXQUFXLEdBQUcsTUFBTSxFQUFFO29CQUN4QixXQUFXLElBQUksQ0FBQyxDQUFDO29CQUNqQixNQUFNO2lCQUNQO2dCQUVELCtCQUErQjtnQkFDL0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFO29CQUNwQixRQUFRLEdBQUcsT0FBTyxDQUFDO29CQUNuQixXQUFXLEdBQUcsQ0FBQyxDQUFDO29CQUNoQixNQUFNO2lCQUNQO2dCQUVELGlEQUFpRDtnQkFDakQsSUFBSSxRQUFRLEdBQUcsTUFBTSxFQUFFO29CQUNyQixRQUFRLElBQUksQ0FBQyxDQUFDO29CQUNkLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDekQsSUFBSSxZQUFZLEtBQUssSUFBSSxFQUFFO3dCQUN6QixRQUFRLEdBQUcsWUFBWSxDQUFDO3dCQUN4QixXQUFXLEdBQUcsQ0FBQyxDQUFDO3FCQUNqQjtpQkFDRjtnQkFFRCxNQUFNO2FBQ1A7U0FDRjtRQUVELFdBQVcsR0FBRyxXQUFXLElBQUksQ0FBQyxDQUFDO1FBRS9CLGtCQUFrQjtRQUNsQixNQUFNLE1BQU0sR0FBWTtZQUN0QixRQUFRO1lBQ1IsUUFBUTtZQUNSLFdBQVc7WUFDWCxHQUFHLEVBQUUsR0FBRyxRQUFRLElBQUksUUFBUSxJQUFJLFdBQVcsRUFBRTtZQUM3QyxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFO1NBQ3RDLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFcEQsOEJBQThCO1FBQzlCLDhEQUE4RDtRQUM5RCxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztTQUNsQztRQUVELG9DQUFvQztRQUNwQyxJQUFJLFFBQVEsRUFBRTtZQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUN4QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVyxFQUFFLENBQUM7YUFDL0M7WUFFRCxtQ0FBbUM7WUFDbkMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUN2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUMvQixTQUFTLEVBQ1QsT0FBTyxFQUNQLE9BQU8sRUFDUCxJQUFJLENBQUMsVUFBVyxDQUNqQixDQUFDO2dCQUVGLElBQUksQ0FBQyxhQUFhLENBQ2hCLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFFBQVEsQ0FBQyxXQUFXLENBQ3JCLENBQUM7Z0JBRUYsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUV6QyxJQUFJLENBQUMsMkJBQTJCLENBQzlCLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFFBQVEsQ0FBQyxRQUFRLENBQ2xCLENBQUM7Z0JBRUYsT0FBTzthQUNSO1lBRUQsdUJBQXVCO1lBQ3ZCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN4QztRQUlELDhCQUE4QjtRQUM5QixxQ0FBcUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLGFBQWEsQ0FBQyxjQUFjLFFBQVEsSUFBSSxRQUFRLElBQUksQ0FBZ0IsQ0FBQztRQUMxRyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQjtZQUFFLE9BQU87UUFFMUUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDaEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDakUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDOUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBRXZCLGtCQUFrQjtRQUNsQixJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUNyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7U0FDOUc7YUFBTSxJQUFJLFFBQVEsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN0QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsR0FBRyxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7U0FDeEc7UUFFRCxvQkFBb0I7UUFDcEIsSUFBSSxRQUFRLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDbEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEdBQUcsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQzlHO2FBQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDdkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQzVHO0lBQ0gsQ0FBQztJQUlPLGVBQWUsQ0FBQyxRQUFnQjtRQUN0QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUV2QixzQ0FBc0M7UUFDdEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMvQixPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsT0FBTyxHQUFHLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRU8sa0JBQWtCLENBQUMsS0FBYSxFQUFFLE1BQWM7UUFDdEQsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztnQkFBRSxPQUFPLENBQUMsQ0FBQztTQUN2QztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEtBQWE7UUFDdEMsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbkMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztnQkFBRSxPQUFPLENBQUMsQ0FBQztTQUN2QztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUtELHdCQUF3QixDQUFDLFFBQWdCLEVBQUUsUUFBZ0I7UUFDekQsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUI7WUFBRSxPQUFPO1FBRWpFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsY0FBYyxRQUFRLElBQUksUUFBUSxJQUFJLENBQWdCLENBQUM7UUFDMUcsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBRW5CLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzlDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRWpFLGtCQUFrQjtRQUNsQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUNwQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDcEc7YUFBTSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDOUY7UUFFRCxvQkFBb0I7UUFDcEIsSUFBSSxPQUFPLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDakMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQ3BHO2FBQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDdEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQ2xHO0lBQ0gsQ0FBQztJQUdELHlCQUF5QixDQUFDLE1BQWU7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUM7WUFDcEMsT0FBTztTQUNSO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUVsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFekQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXpELE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDbEMsTUFBTSxRQUFRLEdBQWMsRUFBRSxDQUFDO1FBRS9CLEtBQUssSUFBSSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckMsS0FBSyxJQUFJLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLENBQUMsTUFBTTtvQkFBRSxTQUFTO2dCQUV0QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7Z0JBRTlDLE1BQU0sUUFBUSxHQUNaLENBQUMsS0FBSyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9DLE1BQU0sTUFBTSxHQUNWLENBQUMsS0FBSyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUU1RCxLQUFLLElBQUksQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLElBQUksTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUN2QyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2pCLFFBQVEsQ0FBQyxJQUFJLENBQUM7d0JBQ1osUUFBUSxFQUFFLENBQUM7d0JBQ1gsUUFBUSxFQUFFLENBQUM7d0JBQ1gsV0FBVyxFQUFFLENBQUM7d0JBQ2QsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTt3QkFDekIsR0FBRztxQkFDSixDQUFDLENBQUM7aUJBQ0o7YUFDRjtTQUNGO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUM7UUFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUM7UUFDOUIsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVPLFdBQVcsQ0FDakIsU0FBMkMsRUFDM0MsT0FBYyxFQUNkLE9BQWMsRUFDZCxJQUFhO1FBRWIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDOUIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFbEMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBRS9DLFFBQVEsU0FBUyxFQUFFO1lBQ2pCLEtBQUssSUFBSTtnQkFDUCxRQUFRLEdBQUcsTUFBTSxDQUFDO2dCQUNsQixNQUFNO1lBRVIsS0FBSyxNQUFNO2dCQUNULFFBQVEsR0FBRyxNQUFNLENBQUM7Z0JBQ2xCLE1BQU07WUFFUixLQUFLLE1BQU0sQ0FBQyxDQUFDO2dCQUNYLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDekQsSUFBSSxZQUFZLEtBQUssSUFBSSxFQUFFO29CQUN6QixRQUFRLEdBQUcsWUFBWSxDQUFDO29CQUN4QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzVDLFdBQVcsR0FBRyxDQUFDLENBQUM7aUJBQ2pCO2dCQUNELE1BQU07YUFDUDtZQUVELEtBQUssT0FBTyxDQUFDLENBQUM7Z0JBQ1osTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDeEQsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFO29CQUN4QixRQUFRLEdBQUcsV0FBVyxDQUFDO29CQUN2QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzVDLFdBQVcsR0FBRyxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU07d0JBQ2pDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDO3dCQUN6QixDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNQO2dCQUNELE1BQU07YUFDUDtTQUNGO1FBRUQsT0FBTztZQUNMLFFBQVE7WUFDUixRQUFRO1lBQ1IsV0FBVztZQUNYLEdBQUcsRUFBRSxHQUFHLFFBQVEsSUFBSSxRQUFRLElBQUksV0FBVyxFQUFFO1lBQzdDLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7U0FDdEMsQ0FBQztJQUNKLENBQUM7SUFHTywyQkFBMkIsQ0FBQyxRQUFnQixFQUFFLFFBQWdCO1FBQ3BFLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CO1lBQUUsT0FBTztRQUVqRSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFakIsOEJBQThCO1FBQzlCLGtCQUFrQjtRQUNsQiw4QkFBOEI7UUFDOUIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUN4RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUM7UUFDL0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBRXhGLDhCQUE4QjtRQUM5QixvQkFBb0I7UUFDcEIsOEJBQThCO1FBQzlCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQ3JELGNBQWMsUUFBUSxJQUFJLFFBQVEsSUFBSSxDQUN4QixDQUFDO1FBQ2pCLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUV4QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFFM0Msc0NBQXNDO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFDdkMsTUFBTSxTQUFTLEdBQUcsUUFBUSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUM7UUFFcEQsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQztRQUN4QyxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBRTdDLElBQUksUUFBUSxHQUFHLFVBQVUsRUFBRTtZQUN6QixTQUFTLENBQUMsVUFBVSxHQUFHLFFBQVEsR0FBRyxNQUFNLENBQUM7U0FDMUM7YUFBTSxJQUFJLFNBQVMsR0FBRyxVQUFVLEdBQUcsY0FBYyxFQUFFO1lBQ2xELFNBQVMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxHQUFHLGNBQWMsR0FBRyxNQUFNLENBQUM7U0FDNUQ7SUFDSCxDQUFDO0lBRU8sU0FBUyxDQUFDLFFBQWdCO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDMUMsT0FBTyxDQUNMLFFBQVE7WUFDUixJQUFJLENBQUMsS0FBSyxDQUNSLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZO2dCQUNuQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZO29CQUNsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUMxQyxJQUFJLEtBQUssQ0FDWCxDQUFDO0lBQ0osQ0FBQztJQUVILElBQUkscUJBQXFCO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRXpFLE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztRQUM3QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzlGLCtCQUErQjtZQUMvQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO2dCQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBR0Qsb0JBQW9CLENBQUMsS0FBYSxFQUFFLFNBQXdCLEVBQUUsUUFBaUI7UUFDN0UsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUM3QixNQUFNLFFBQVEsR0FBRyxTQUFTLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUM1RyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUMxQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ3pILENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxRQUFpQjtRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzdHLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxRQUFpQjtRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPO1FBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUN4QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sSUFBSSxPQUFPLElBQUksT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUNoSyxDQUFDOytHQS9wQlksb0JBQW9CO21IQUFwQixvQkFBb0IsY0FEUCxNQUFNOzs0RkFDbkIsb0JBQW9CO2tCQURoQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENlbGxQb3Mge1xuICByb3dJbmRleDogbnVtYmVyO1xuICBjb2xJbmRleDogbnVtYmVyO1xuICBzdWJDb2xJbmRleDogbnVtYmVyO1xuICBmaWVsZDogc3RyaW5nO1xuICBrZXk6IHN0cmluZztcbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBDZWxsU2VsZWN0aW9uU2VydmljZSB7XG5cbiAgc2VsZWN0ZWRDZWxsczogQ2VsbFBvc1tdID0gW107XG4gIHNlbGVjdGVkS2V5czogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG4gIHNlbGVjdGlvblN0YXJ0OiBDZWxsUG9zIHwgbnVsbCA9IG51bGw7XG4gIGlzU2VsZWN0aW5nID0gZmFsc2U7XG4gIGFjdGl2ZUNlbGw6IENlbGxQb3MgfCBudWxsID0gbnVsbDtcblxuXG4gIHByaXZhdGUgY2VsbFNlbGVjdGlvbkF1dG9TY3JvbGxJbnRlcnZhbDogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBzY3JvbGxTcGVlZCA9IDE1MDtcbiAgcHJpdmF0ZSBzY3JvbGxNYXJnaW4gPSAzMDtcblxuICBjb2x1bW5zOiBhbnlbXSA9IFtdO1xuICBnZXRDb2x1bW5CeUluZGV4OiAoaW5kZXg6IG51bWJlcikgPT4gYW55ID0gKCkgPT4gbnVsbDtcblxuICB2ZXJ0aWNhbENvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgaG9yaXpvbnRhbENvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgc2VsZWN0aW9uQm91bmRzOiB7XG4gICAgdG9wOiBudW1iZXI7XG4gICAgYm90dG9tOiBudW1iZXI7XG4gICAgbGVmdDogeyBjb2xJbmRleDogbnVtYmVyOyBzdWJDb2xJbmRleDogbnVtYmVyIH0gfCBudWxsO1xuICAgIHJpZ2h0OiB7IGNvbEluZGV4OiBudW1iZXI7IHN1YkNvbEluZGV4OiBudW1iZXIgfSB8IG51bGw7XG4gIH0gPSB7IHRvcDogMCwgYm90dG9tOiAwLCBsZWZ0OiBudWxsLCByaWdodDogbnVsbCB9O1xuXG4gIHN0YXJ0U2VsZWN0aW9uKHJvdzogYW55LCBjb2x1bW46IGFueSwgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsIGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5pc1NlbGVjdGluZyA9IHRydWU7XG4gICAgdGhpcy5hY3RpdmVDZWxsID0gbnVsbDtcblxuICAgIGNvbnN0IHJJbmRleCA9IHJvdy5fX3ZpcnR1YWxJbmRleDtcbiAgICBjb25zdCBjSW5kZXggPSBjb2x1bW4uaW5kZXg7XG4gICAgY29uc3Qgc0luZGV4ID0gc3ViQ29sSW5kZXggPz8gMDtcbiAgICBjb25zdCBrZXkgPSBgJHtySW5kZXh9LSR7Y0luZGV4fS0ke3NJbmRleH1gO1xuXG4gICAgdGhpcy5zZWxlY3Rpb25TdGFydCA9IHsgcm93SW5kZXg6IHJJbmRleCwgY29sSW5kZXg6IGNJbmRleCwgc3ViQ29sSW5kZXg6IHNJbmRleCwgZmllbGQ6IGNvbHVtbi5maWVsZCwga2V5IH07XG4gICAgdGhpcy5zZWxlY3RlZENlbGxzID0gW3RoaXMuc2VsZWN0aW9uU3RhcnRdO1xuICAgIHRoaXMuc2VsZWN0ZWRLZXlzLmNsZWFyKCk7XG4gICAgdGhpcy5zZWxlY3RlZEtleXMuYWRkKGtleSk7XG5cbiAgICBjb25zdCBtb3VzZVVwSGFuZGxlciA9ICgpID0+IHtcbiAgICAgIHRoaXMuZW5kU2VsZWN0aW9uKCk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgbW91c2VVcEhhbmRsZXIpO1xuICAgIH07XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG1vdXNlVXBIYW5kbGVyKTtcblxuICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uQm91bmRhcmllcygpO1xuICB9XG5cbiAgZXh0ZW5kU2VsZWN0aW9uKHJvdzogYW55LCBjb2x1bW46IGFueSwgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsIGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmlzU2VsZWN0aW5nIHx8ICF0aGlzLnNlbGVjdGlvblN0YXJ0KSByZXR1cm47XG5cbiAgICBjb25zdCBzdGFydCA9IHRoaXMuc2VsZWN0aW9uU3RhcnQhO1xuICAgIGNvbnN0IHJTdGFydCA9IHN0YXJ0LnJvd0luZGV4O1xuICAgIGNvbnN0IHJFbmQgPSByb3cuX192aXJ0dWFsSW5kZXg7XG4gICAgY29uc3QgY1N0YXJ0ID0gc3RhcnQuY29sSW5kZXg7XG4gICAgY29uc3QgY0VuZCA9IGNvbHVtbi5pbmRleDtcbiAgICBjb25zdCBzU3RhcnQgPSBzdGFydC5zdWJDb2xJbmRleCA/PyAwO1xuICAgIGNvbnN0IHNFbmQgPSBzdWJDb2xJbmRleCA/PyAwO1xuXG4gICAgY29uc3QgbWluUm93ID0gTWF0aC5taW4oclN0YXJ0LCByRW5kKTtcbiAgICBjb25zdCBtYXhSb3cgPSBNYXRoLm1heChyU3RhcnQsIHJFbmQpO1xuICAgIGNvbnN0IG1pbkNvbCA9IE1hdGgubWluKGNTdGFydCwgY0VuZCk7XG4gICAgY29uc3QgbWF4Q29sID0gTWF0aC5tYXgoY1N0YXJ0LCBjRW5kKTtcblxuICAgIGNvbnN0IG5ld0tleXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuICAgIGNvbnN0IG5ld0NlbGxzOiBDZWxsUG9zW10gPSBbXTtcblxuICAgIGZvciAobGV0IHIgPSBtaW5Sb3c7IHIgPD0gbWF4Um93OyByKyspIHtcbiAgICAgIGZvciAobGV0IGMgPSBtaW5Db2w7IGMgPD0gbWF4Q29sOyBjKyspIHtcbiAgICAgICAgY29uc3QgY29sT2JqID0gdGhpcy5nZXRDb2x1bW5CeUluZGV4KGMpO1xuICAgICAgICBjb25zdCBzdWJDb3VudCA9IGNvbE9iaj8uY2hpbGRyZW4/Lmxlbmd0aCA/PyAxO1xuICAgICAgICBjb25zdCBzdGFydFN1YiA9IChjID09PSBjU3RhcnQpID8gc1N0YXJ0IDogMDtcbiAgICAgICAgY29uc3QgZW5kU3ViID0gKGMgPT09IGNFbmQpID8gc0VuZCA6IHN1YkNvdW50IC0gMTtcblxuICAgICAgICBmb3IgKGxldCBzID0gc3RhcnRTdWI7IHMgPD0gZW5kU3ViOyBzKyspIHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBgJHtyfS0ke2N9LSR7c31gO1xuICAgICAgICAgIG5ld0tleXMuYWRkKGtleSk7XG4gICAgICAgICAgbmV3Q2VsbHMucHVzaCh7IHJvd0luZGV4OiByLCBjb2xJbmRleDogYywgc3ViQ29sSW5kZXg6IHMsIGZpZWxkOiBjb2xPYmo/LmZpZWxkIHx8ICcnLCBrZXkgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkS2V5cyA9IG5ld0tleXM7XG4gICAgdGhpcy5zZWxlY3RlZENlbGxzID0gbmV3Q2VsbHM7XG4gICAgdGhpcy51cGRhdGVTZWxlY3Rpb25Cb3VuZGFyaWVzKCk7XG5cbiAgICAvLyBBdXRvLXNjcm9sbFxuICAgIHRoaXMuaGFuZGxlQ2VsbEF1dG9TY3JvbGwoZXZlbnQpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQgU0VMRUNUSU9OIC0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgZW5kU2VsZWN0aW9uKCkge1xuICAgIHRoaXMuaXNTZWxlY3RpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnN0b3BBdXRvU2Nyb2xsKCk7XG4gICAgdGhpcy51cGRhdGVTZWxlY3Rpb25Cb3VuZGFyaWVzKCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tIEFVVE8tU0NST0xMIC0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgaGFuZGxlQ2VsbEF1dG9TY3JvbGwoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5jZWxsU2VsZWN0aW9uQXV0b1Njcm9sbEludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuY2VsbFNlbGVjdGlvbkF1dG9TY3JvbGxJbnRlcnZhbCk7XG4gICAgICB0aGlzLmNlbGxTZWxlY3Rpb25BdXRvU2Nyb2xsSW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaG9yaXpvbnRhbENvbnRhaW5lciB8fCAhdGhpcy52ZXJ0aWNhbENvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgY29uc3QgaG9yUmVjdCA9IHRoaXMuaG9yaXpvbnRhbENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB2ZXJ0UmVjdCA9IHRoaXMudmVydGljYWxDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgbW91c2VYID0gZXZlbnQuY2xpZW50WDtcbiAgICBjb25zdCBtb3VzZVkgPSBldmVudC5jbGllbnRZO1xuXG4gICAgbGV0IHNjcm9sbFggPSAwO1xuICAgIGxldCBzY3JvbGxZID0gMDtcblxuICAgIGlmIChtb3VzZVggLSBob3JSZWN0LmxlZnQgPCB0aGlzLnNjcm9sbE1hcmdpbikgc2Nyb2xsWCA9IC10aGlzLnNjcm9sbFNwZWVkO1xuICAgIGVsc2UgaWYgKGhvclJlY3QucmlnaHQgLSBtb3VzZVggPCB0aGlzLnNjcm9sbE1hcmdpbikgc2Nyb2xsWCA9IHRoaXMuc2Nyb2xsU3BlZWQ7XG5cbiAgICBpZiAobW91c2VZIC0gdmVydFJlY3QudG9wIDwgdGhpcy5zY3JvbGxNYXJnaW4pIHNjcm9sbFkgPSAtdGhpcy5zY3JvbGxTcGVlZDtcbiAgICBlbHNlIGlmICh2ZXJ0UmVjdC5ib3R0b20gLSBtb3VzZVkgPCB0aGlzLnNjcm9sbE1hcmdpbikgc2Nyb2xsWSA9IHRoaXMuc2Nyb2xsU3BlZWQ7XG5cbiAgICBpZiAoc2Nyb2xsWCAhPT0gMCB8fCBzY3JvbGxZICE9PSAwKSB7XG4gICAgICB0aGlzLmNlbGxTZWxlY3Rpb25BdXRvU2Nyb2xsSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGlmIChzY3JvbGxYICE9PSAwKSB0aGlzLmhvcml6b250YWxDb250YWluZXIhLnNjcm9sbEJ5KHNjcm9sbFgsIDApO1xuICAgICAgICBpZiAoc2Nyb2xsWSAhPT0gMCkgdGhpcy52ZXJ0aWNhbENvbnRhaW5lciEuc2Nyb2xsQnkoMCwgc2Nyb2xsWSk7XG4gICAgICB9LCA4KTtcbiAgICB9XG4gIH1cblxuICBzdG9wQXV0b1Njcm9sbCgpIHtcbiAgICBpZiAodGhpcy5jZWxsU2VsZWN0aW9uQXV0b1Njcm9sbEludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuY2VsbFNlbGVjdGlvbkF1dG9TY3JvbGxJbnRlcnZhbCk7XG4gICAgICB0aGlzLmNlbGxTZWxlY3Rpb25BdXRvU2Nyb2xsSW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0gSEVMUEVSUyAtLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGlzU2VsZWN0ZWQocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg/OiBudW1iZXIgfCBudWxsKSB7XG4gICAgY29uc3Qgc0luZGV4ID0gc3ViQ29sSW5kZXggPz8gMDtcbiAgICBjb25zdCBrZXkgPSBgJHtyb3dJbmRleH0tJHtjb2xJbmRleH0tJHtzSW5kZXh9YDtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEtleXMuaGFzKGtleSk7XG4gIH1cblxuICB1cGRhdGVTZWxlY3Rpb25Cb3VuZGFyaWVzKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkQ2VsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkJvdW5kcyA9IHsgdG9wOiAwLCBib3R0b206IDAsIGxlZnQ6IG51bGwsIHJpZ2h0OiBudWxsIH07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgcm93SW5kaWNlcyA9IHRoaXMuc2VsZWN0ZWRDZWxscy5tYXAoYyA9PiBjLnJvd0luZGV4KTtcbiAgICB0aGlzLnNlbGVjdGlvbkJvdW5kcy50b3AgPSBNYXRoLm1pbiguLi5yb3dJbmRpY2VzKTtcbiAgICB0aGlzLnNlbGVjdGlvbkJvdW5kcy5ib3R0b20gPSBNYXRoLm1heCguLi5yb3dJbmRpY2VzKTtcblxuICAgIGNvbnN0IGxlZnRDb2wgPSBNYXRoLm1pbiguLi50aGlzLnNlbGVjdGVkQ2VsbHMubWFwKGMgPT4gYy5jb2xJbmRleCkpO1xuICAgIGNvbnN0IGxlZnRDZWxscyA9IHRoaXMuc2VsZWN0ZWRDZWxscy5maWx0ZXIoYyA9PiBjLmNvbEluZGV4ID09PSBsZWZ0Q29sKTtcbiAgICBjb25zdCBtaW5TdWIgPSBNYXRoLm1pbiguLi5sZWZ0Q2VsbHMubWFwKGMgPT4gYy5zdWJDb2xJbmRleCA/PyAwKSk7XG4gICAgdGhpcy5zZWxlY3Rpb25Cb3VuZHMubGVmdCA9IHsgY29sSW5kZXg6IGxlZnRDb2wsIHN1YkNvbEluZGV4OiBtaW5TdWIgfTtcblxuICAgIGNvbnN0IHJpZ2h0Q29sID0gTWF0aC5tYXgoLi4udGhpcy5zZWxlY3RlZENlbGxzLm1hcChjID0+IGMuY29sSW5kZXgpKTtcbiAgICBjb25zdCByaWdodENlbGxzID0gdGhpcy5zZWxlY3RlZENlbGxzLmZpbHRlcihjID0+IGMuY29sSW5kZXggPT09IHJpZ2h0Q29sKTtcbiAgICBjb25zdCBtYXhTdWIgPSBNYXRoLm1heCguLi5yaWdodENlbGxzLm1hcChjID0+IGMuc3ViQ29sSW5kZXggPz8gMCkpO1xuICAgIHRoaXMuc2VsZWN0aW9uQm91bmRzLnJpZ2h0ID0geyBjb2xJbmRleDogcmlnaHRDb2wsIHN1YkNvbEluZGV4OiBtYXhTdWIgfTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0gQk9SREVSIENIRUNLUyAtLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGlzVG9wQm9yZGVyKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4PzogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTZWxlY3RlZChyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4KSAmJiByb3dJbmRleCA9PT0gdGhpcy5zZWxlY3Rpb25Cb3VuZHMudG9wO1xuICB9XG4gIGlzQm90dG9tQm9yZGVyKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4PzogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTZWxlY3RlZChyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4KSAmJiByb3dJbmRleCA9PT0gdGhpcy5zZWxlY3Rpb25Cb3VuZHMuYm90dG9tO1xuICB9XG4gIGlzTGVmdEJvcmRlcihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleD86IG51bWJlcikge1xuICAgIGlmICghdGhpcy5zZWxlY3Rpb25Cb3VuZHMubGVmdCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHNJbmRleCA9IHN1YkNvbEluZGV4ID8/IDA7XG4gICAgcmV0dXJuIHRoaXMuaXNTZWxlY3RlZChyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4KSAmJlxuICAgICAgY29sSW5kZXggPT09IHRoaXMuc2VsZWN0aW9uQm91bmRzLmxlZnQuY29sSW5kZXggJiZcbiAgICAgIHNJbmRleCA9PT0gdGhpcy5zZWxlY3Rpb25Cb3VuZHMubGVmdC5zdWJDb2xJbmRleDtcbiAgfVxuICBpc1JpZ2h0Qm9yZGVyKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4PzogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGlvbkJvdW5kcy5yaWdodCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHNJbmRleCA9IHN1YkNvbEluZGV4ID8/IDA7XG4gICAgcmV0dXJuIHRoaXMuaXNTZWxlY3RlZChyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4KSAmJlxuICAgICAgY29sSW5kZXggPT09IHRoaXMuc2VsZWN0aW9uQm91bmRzLnJpZ2h0LmNvbEluZGV4ICYmXG4gICAgICBzSW5kZXggPT09IHRoaXMuc2VsZWN0aW9uQm91bmRzLnJpZ2h0LnN1YkNvbEluZGV4O1xuICB9XG4gIGlzVG9wTGVmdENvcm5lcihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleD86IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmlzVG9wQm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgpICYmIHRoaXMuaXNMZWZ0Qm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgpO1xuICB9XG4gIGlzVG9wUmlnaHRDb3JuZXIocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg/OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5pc1RvcEJvcmRlcihyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4KSAmJiB0aGlzLmlzUmlnaHRCb3JkZXIocm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCk7XG4gIH1cbiAgaXNCb3R0b21MZWZ0Q29ybmVyKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4PzogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNCb3R0b21Cb3JkZXIocm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCkgJiYgdGhpcy5pc0xlZnRCb3JkZXIocm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCk7XG4gIH1cbiAgaXNCb3R0b21SaWdodENvcm5lcihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleD86IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmlzQm90dG9tQm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgpICYmIHRoaXMuaXNSaWdodEJvcmRlcihyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4KTtcbiAgfVxuXG5cbiAgc2V0QWN0aXZlQ2VsbChyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleD86IG51bWJlcikge1xuICAgIGNvbnNvbGUubG9nKFwiQ2VsbCBMb2NhdGlvbjogXCIsIHJvd0luZGV4ICsgJycgKyBjb2xJbmRleCk7XG4gICAgY29uc3Qgc0luZGV4ID0gc3ViQ29sSW5kZXggPz8gMDtcbiAgICB0aGlzLmFjdGl2ZUNlbGwgPSB7IHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXg6IHNJbmRleCwga2V5OiBgJHtyb3dJbmRleH0tJHtjb2xJbmRleH0tJHtzSW5kZXh9YCwgZmllbGQ6ICcnIH07XG4gIH1cblxuICBpc0FjdGl2ZUNlbGwocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg/OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlQ2VsbCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHNJbmRleCA9IHN1YkNvbEluZGV4ID8/IDA7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlQ2VsbC5yb3dJbmRleCA9PT0gcm93SW5kZXggJiYgdGhpcy5hY3RpdmVDZWxsLmNvbEluZGV4ID09PSBjb2xJbmRleCAmJiB0aGlzLmFjdGl2ZUNlbGwuc3ViQ29sSW5kZXggPT09IHNJbmRleDtcbiAgfVxuXG4gIHNlbGVjdEFsbENlbGxzKGRhdGFTZXQ6IGFueVtdLCBjb2x1bW5zOiBhbnlbXSkge1xuICAgIGlmICghZGF0YVNldD8ubGVuZ3RoIHx8ICFjb2x1bW5zPy5sZW5ndGgpIHJldHVybjtcblxuICAgIHRoaXMuc2VsZWN0ZWRDZWxscyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRLZXlzLmNsZWFyKCk7XG4gICAgdGhpcy5zZWxlY3Rpb25TdGFydCA9IG51bGw7XG4gICAgdGhpcy5pc1NlbGVjdGluZyA9IHRydWU7XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiBkYXRhU2V0KSB7XG4gICAgICBjb25zdCBySW5kZXggPSByb3cuX192aXJ0dWFsSW5kZXg7XG4gICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNvbHVtbnMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgY29uc3QgY29sID0gY29sdW1uc1tjXTtcbiAgICAgICAgaWYgKGNvbC5pc192aXNpYmxlID09PSBmYWxzZSkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgZmllbGQgPSBjb2wuZmllbGQgfHwgY29sLm5hbWU7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSAmJiBjb2wuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgY29sLmNoaWxkcmVuLmZvckVhY2goKHN1YkNvbDogYW55LCBzOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGlmIChzdWJDb2wuaXNfdmlzaWJsZSA9PT0gZmFsc2UpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3Qga2V5ID0gYCR7ckluZGV4fS0ke2N9LSR7c31gO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEtleXMuYWRkKGtleSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2VsbHMucHVzaCh7XG4gICAgICAgICAgICAgIHJvd0luZGV4OiBySW5kZXgsXG4gICAgICAgICAgICAgIGNvbEluZGV4OiBjLFxuICAgICAgICAgICAgICBzdWJDb2xJbmRleDogcyxcbiAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gYCR7ckluZGV4fS0ke2N9LTBgO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzLmFkZChrZXkpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDZWxscy5wdXNoKHtcbiAgICAgICAgICAgIHJvd0luZGV4OiBySW5kZXgsXG4gICAgICAgICAgICBjb2xJbmRleDogYyxcbiAgICAgICAgICAgIHN1YkNvbEluZGV4OiAwLFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBrZXlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaXNTZWxlY3RpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGlvblN0YXJ0ID0gdGhpcy5zZWxlY3RlZENlbGxzWzBdID8/IG51bGw7XG4gICAgdGhpcy51cGRhdGVTZWxlY3Rpb25Cb3VuZGFyaWVzKCk7XG4gIH1cblxuXG5cbiAgbW92ZUFjdGl2ZUNlbGwoXG4gICAgZGlyZWN0aW9uOiAndXAnIHwgJ2Rvd24nIHwgJ2xlZnQnIHwgJ3JpZ2h0JyxcbiAgICBzaGlmdEtleTogYm9vbGVhbixcbiAgICBkYXRhU2V0OiBhbnlbXSxcbiAgICBjb2x1bW5zOiBhbnlbXVxuICApIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlQ2VsbCkgcmV0dXJuO1xuXG4gICAgbGV0IHsgcm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCA9IDAgfSA9IHRoaXMuYWN0aXZlQ2VsbDtcbiAgICBjb25zdCBjb2wgPSB0aGlzLmdldENvbHVtbkJ5SW5kZXgoY29sSW5kZXgpO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQWRqdXN0IGZvciAxLWJhc2VkIHZpcnR1YWwgaW5kZXhcbiAgICBjb25zdCBtaW5Sb3cgPSAxOyAgICAgICAgICAgICAgIC8vIGZpcnN0IHJvdyBfX3ZpcnR1YWxJbmRleFxuICAgIGNvbnN0IG1heFJvdyA9IGRhdGFTZXQubGVuZ3RoOyAgLy8gbGFzdCByb3cgX192aXJ0dWFsSW5kZXhcbiAgICBjb25zdCBtYXhDb2wgPSBjb2x1bW5zLmxlbmd0aCAtIDE7XG5cbiAgICAvLyBDb21wdXRlIG5ldyBpbmRpY2VzXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ3VwJzpcbiAgICAgICAgcm93SW5kZXggPSBNYXRoLm1heChtaW5Sb3csIHJvd0luZGV4IC0gMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgIHJvd0luZGV4ID0gTWF0aC5taW4obWF4Um93LCByb3dJbmRleCArIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xlZnQnOiB7XG4gICAgICAgIC8vIDHvuI/ig6MgTW92ZSBpbnNpZGUgc3ViLWNvbHVtbnNcbiAgICAgICAgaWYgKHN1YkNvbEluZGV4ID4gMCkge1xuICAgICAgICAgIHN1YkNvbEluZGV4IC09IDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAy77iP4oOjIEZpbmQgcHJldmlvdXMgdmlzaWJsZSBjb2x1bW5cbiAgICAgICAgY29uc3QgcHJldkNvbCA9IHRoaXMuZmluZFByZXZWaXNpYmxlQ29sKGNvbEluZGV4KTtcbiAgICAgICAgaWYgKHByZXZDb2wgIT09IG51bGwpIHtcbiAgICAgICAgICBjb2xJbmRleCA9IHByZXZDb2w7XG4gICAgICAgICAgY29uc3QgcENvbCA9IHRoaXMuZ2V0Q29sdW1uQnlJbmRleChjb2xJbmRleCk7XG4gICAgICAgICAgc3ViQ29sSW5kZXggPSBwQ29sPy5jaGlsZHJlbj8ubGVuZ3RoXG4gICAgICAgICAgICA/IHBDb2wuY2hpbGRyZW4ubGVuZ3RoIC0gMVxuICAgICAgICAgICAgOiAwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gM++4j+KDoyBTdGFydCBvZiByb3cg4oaSIHByZXZpb3VzIHJvdyBsYXN0IHZpc2libGUgY29sdW1uXG4gICAgICAgIGlmIChyb3dJbmRleCA+IG1pblJvdykge1xuICAgICAgICAgIHJvd0luZGV4IC09IDE7XG4gICAgICAgICAgY29uc3QgbGFzdFZpc2libGUgPSB0aGlzLmZpbmRQcmV2VmlzaWJsZUNvbChtYXhDb2wgKyAxKTtcbiAgICAgICAgICBpZiAobGFzdFZpc2libGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbEluZGV4ID0gbGFzdFZpc2libGU7XG4gICAgICAgICAgICBjb25zdCBsQ29sID0gdGhpcy5nZXRDb2x1bW5CeUluZGV4KGNvbEluZGV4KTtcbiAgICAgICAgICAgIHN1YkNvbEluZGV4ID0gbENvbD8uY2hpbGRyZW4/Lmxlbmd0aFxuICAgICAgICAgICAgICA/IGxDb2wuY2hpbGRyZW4ubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cblxuICAgICAgY2FzZSAncmlnaHQnOiB7XG4gICAgICAgIGNvbnN0IG1heFN1YiA9IGNvbD8uY2hpbGRyZW4/Lmxlbmd0aCA/IGNvbC5jaGlsZHJlbi5sZW5ndGggLSAxIDogMDtcblxuICAgICAgICAvLyAx77iP4oOjIE1vdmUgaW5zaWRlIHN1Yi1jb2x1bW5zXG4gICAgICAgIGlmIChzdWJDb2xJbmRleCA8IG1heFN1Yikge1xuICAgICAgICAgIHN1YkNvbEluZGV4ICs9IDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAy77iP4oOjIEZpbmQgbmV4dCB2aXNpYmxlIGNvbHVtblxuICAgICAgICBjb25zdCBuZXh0Q29sID0gdGhpcy5maW5kTmV4dFZpc2libGVDb2woY29sSW5kZXgsIG1heENvbCk7XG4gICAgICAgIGlmIChuZXh0Q29sICE9PSBudWxsKSB7XG4gICAgICAgICAgY29sSW5kZXggPSBuZXh0Q29sO1xuICAgICAgICAgIHN1YkNvbEluZGV4ID0gMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDPvuI/ig6MgRW5kIG9mIHJvdyDihpIgbmV4dCByb3cgZmlyc3QgdmlzaWJsZSBjb2x1bW5cbiAgICAgICAgaWYgKHJvd0luZGV4IDwgbWF4Um93KSB7XG4gICAgICAgICAgcm93SW5kZXggKz0gMTtcbiAgICAgICAgICBjb25zdCBmaXJzdFZpc2libGUgPSB0aGlzLmZpbmROZXh0VmlzaWJsZUNvbCgtMSwgbWF4Q29sKTtcbiAgICAgICAgICBpZiAoZmlyc3RWaXNpYmxlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb2xJbmRleCA9IGZpcnN0VmlzaWJsZTtcbiAgICAgICAgICAgIHN1YkNvbEluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdWJDb2xJbmRleCA9IHN1YkNvbEluZGV4ID8/IDA7XG5cbiAgICAvLyBTZXQgYWN0aXZlIGNlbGxcbiAgICBjb25zdCBhY3RpdmU6IENlbGxQb3MgPSB7XG4gICAgICByb3dJbmRleCxcbiAgICAgIGNvbEluZGV4LFxuICAgICAgc3ViQ29sSW5kZXgsXG4gICAgICBrZXk6IGAke3Jvd0luZGV4fS0ke2NvbEluZGV4fS0ke3N1YkNvbEluZGV4fWAsXG4gICAgICBmaWVsZDogY29sdW1uc1tjb2xJbmRleF0/LmZpZWxkIHx8ICcnXG4gICAgfTtcbiAgICB0aGlzLnNldEFjdGl2ZUNlbGwocm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCk7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBBbHdheXMgY29weSBhY3RpdmUgY2VsbCBpbnRvIHNlbGVjdGlvbiBpZiBTaGlmdCBub3QgcHJlc3NlZFxuICAgIGlmICghc2hpZnRLZXkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDZWxscyA9IFthY3RpdmVdO1xuICAgICAgdGhpcy5zZWxlY3RlZEtleXMgPSBuZXcgU2V0KFthY3RpdmUua2V5XSk7XG4gICAgICB0aGlzLnNlbGVjdGlvblN0YXJ0ID0geyAuLi5hY3RpdmUgfTtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uQm91bmRhcmllcygpO1xuICAgIH1cblxuICAgIC8vIEV4dGVuZCBzZWxlY3Rpb24gaWYgU2hpZnQgcHJlc3NlZFxuICAgIGlmIChzaGlmdEtleSkge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvblN0YXJ0KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhcnQgPSB7IC4uLnRoaXMuYWN0aXZlQ2VsbCEgfTtcbiAgICAgIH1cblxuICAgICAgLy8g8J+UpSBDVFJMICsgU0hJRlQg4oaSIGV4dGVuZCB0byBlZGdlXG4gICAgICBpZiAodGhpcy5jdHJsS2V5UHJlc3NlZCkge1xuICAgICAgICBjb25zdCBlZGdlQ2VsbCA9IHRoaXMuZ2V0RWRnZUNlbGwoXG4gICAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICAgIGRhdGFTZXQsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICB0aGlzLmFjdGl2ZUNlbGwhXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zZXRBY3RpdmVDZWxsKFxuICAgICAgICAgIGVkZ2VDZWxsLnJvd0luZGV4LFxuICAgICAgICAgIGVkZ2VDZWxsLmNvbEluZGV4LFxuICAgICAgICAgIGVkZ2VDZWxsLnN1YkNvbEluZGV4XG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5leHRlbmRTZWxlY3Rpb25CeUtleWJvYXJkKGVkZ2VDZWxsKTtcblxuICAgICAgICB0aGlzLnNjcm9sbENlbGxJbnRvVmlld0ltbWVkaWF0ZShcbiAgICAgICAgICBlZGdlQ2VsbC5yb3dJbmRleCxcbiAgICAgICAgICBlZGdlQ2VsbC5jb2xJbmRleFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gTm9ybWFsIFNoaWZ0ICsgQXJyb3dcbiAgICAgIHRoaXMuZXh0ZW5kU2VsZWN0aW9uQnlLZXlib2FyZChhY3RpdmUpO1xuICAgIH1cblxuXG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBTY3JvbGwgdG8ga2VlcCBhY3RpdmUgY2VsbCBpbiB2aWV3XG4gICAgY29uc3QgY2VsbCA9IHRoaXMudmVydGljYWxDb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoYFtsb2NhdGlvbj0nJHtyb3dJbmRleH0tJHtjb2xJbmRleH0nXWApIGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICghY2VsbCB8fCAhdGhpcy52ZXJ0aWNhbENvbnRhaW5lciB8fCAhdGhpcy5ob3Jpem9udGFsQ29udGFpbmVyKSByZXR1cm47XG5cbiAgICBjb25zdCB2ZXJ0UmVjdCA9IHRoaXMudmVydGljYWxDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgaG9yUmVjdCA9IHRoaXMuaG9yaXpvbnRhbENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBjZWxsUmVjdCA9IGNlbGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qgc2Nyb2xsTWFyZ2luID0gNTtcblxuICAgIC8vIFZlcnRpY2FsIHNjcm9sbFxuICAgIGlmIChjZWxsUmVjdC5ib3R0b20gPiB2ZXJ0UmVjdC5ib3R0b20pIHtcbiAgICAgIHRoaXMudmVydGljYWxDb250YWluZXIuc2Nyb2xsQnkoeyB0b3A6IGNlbGxSZWN0LmJvdHRvbSAtIHZlcnRSZWN0LmJvdHRvbSArIHNjcm9sbE1hcmdpbiwgYmVoYXZpb3I6ICdhdXRvJyB9KTtcbiAgICB9IGVsc2UgaWYgKGNlbGxSZWN0LnRvcCA8IHZlcnRSZWN0LnRvcCkge1xuICAgICAgdGhpcy52ZXJ0aWNhbENvbnRhaW5lci5zY3JvbGxCeSh7IHRvcDogY2VsbFJlY3QudG9wIC0gdmVydFJlY3QudG9wIC0gc2Nyb2xsTWFyZ2luLCBiZWhhdmlvcjogJ2F1dG8nIH0pO1xuICAgIH1cblxuICAgIC8vIEhvcml6b250YWwgc2Nyb2xsXG4gICAgaWYgKGNlbGxSZWN0LnJpZ2h0ID4gaG9yUmVjdC5yaWdodCkge1xuICAgICAgdGhpcy5ob3Jpem9udGFsQ29udGFpbmVyLnNjcm9sbEJ5KHsgbGVmdDogY2VsbFJlY3QucmlnaHQgLSBob3JSZWN0LnJpZ2h0ICsgc2Nyb2xsTWFyZ2luLCBiZWhhdmlvcjogJ2F1dG8nIH0pO1xuICAgIH0gZWxzZSBpZiAoY2VsbFJlY3QubGVmdCA8IGhvclJlY3QubGVmdCkge1xuICAgICAgdGhpcy5ob3Jpem9udGFsQ29udGFpbmVyLnNjcm9sbEJ5KHsgbGVmdDogY2VsbFJlY3QubGVmdCAtIGhvclJlY3QubGVmdCAtIHNjcm9sbE1hcmdpbiwgYmVoYXZpb3I6ICdhdXRvJyB9KTtcbiAgICB9XG4gIH1cblxuICBjdHJsS2V5UHJlc3NlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgaXNDb2x1bW5WaXNpYmxlKGNvbEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBjb2wgPSB0aGlzLmdldENvbHVtbkJ5SW5kZXgoY29sSW5kZXgpO1xuICAgIGlmICghY29sKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBQYXJlbnQgdmlzaWJsZSBPUiBhbnkgY2hpbGQgdmlzaWJsZVxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbikpIHtcbiAgICAgIHJldHVybiBjb2wuY2hpbGRyZW4uc29tZSgoYzogYW55KSA9PiBjLmlzX3Zpc2libGUgIT09IGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbC5pc192aXNpYmxlICE9PSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZE5leHRWaXNpYmxlQ29sKHN0YXJ0OiBudW1iZXIsIG1heENvbDogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0ICsgMTsgaSA8PSBtYXhDb2w7IGkrKykge1xuICAgICAgaWYgKHRoaXMuaXNDb2x1bW5WaXNpYmxlKGkpKSByZXR1cm4gaTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGZpbmRQcmV2VmlzaWJsZUNvbChzdGFydDogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmICh0aGlzLmlzQ29sdW1uVmlzaWJsZShpKSkgcmV0dXJuIGk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cblxuXG5cbiAgc2Nyb2xsQWN0aXZlQ2VsbEludG9WaWV3KHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMudmVydGljYWxDb250YWluZXIgfHwgIXRoaXMuaG9yaXpvbnRhbENvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgY29uc3Qgcm93RWwgPSB0aGlzLnZlcnRpY2FsQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYFtsb2NhdGlvbj0nJHtyb3dJbmRleH0tJHtjb2xJbmRleH0nXWApIGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICghcm93RWwpIHJldHVybjtcblxuICAgIGNvbnN0IHJvd1JlY3QgPSByb3dFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB2ZXJ0UmVjdCA9IHRoaXMudmVydGljYWxDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgaG9yUmVjdCA9IHRoaXMuaG9yaXpvbnRhbENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIC8vIFZlcnRpY2FsIHNjcm9sbFxuICAgIGlmIChyb3dSZWN0LmJvdHRvbSA+IHZlcnRSZWN0LmJvdHRvbSkge1xuICAgICAgdGhpcy52ZXJ0aWNhbENvbnRhaW5lci5zY3JvbGxCeSh7IHRvcDogcm93UmVjdC5ib3R0b20gLSB2ZXJ0UmVjdC5ib3R0b20gKyA1LCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgfSBlbHNlIGlmIChyb3dSZWN0LnRvcCA8IHZlcnRSZWN0LnRvcCkge1xuICAgICAgdGhpcy52ZXJ0aWNhbENvbnRhaW5lci5zY3JvbGxCeSh7IHRvcDogcm93UmVjdC50b3AgLSB2ZXJ0UmVjdC50b3AgLSA1LCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgfVxuXG4gICAgLy8gSG9yaXpvbnRhbCBzY3JvbGxcbiAgICBpZiAocm93UmVjdC5yaWdodCA+IGhvclJlY3QucmlnaHQpIHtcbiAgICAgIHRoaXMuaG9yaXpvbnRhbENvbnRhaW5lci5zY3JvbGxCeSh7IGxlZnQ6IHJvd1JlY3QucmlnaHQgLSBob3JSZWN0LnJpZ2h0ICsgNSwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgIH0gZWxzZSBpZiAocm93UmVjdC5sZWZ0IDwgaG9yUmVjdC5sZWZ0KSB7XG4gICAgICB0aGlzLmhvcml6b250YWxDb250YWluZXIuc2Nyb2xsQnkoeyBsZWZ0OiByb3dSZWN0LmxlZnQgLSBob3JSZWN0LmxlZnQgLSA1LCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgfVxuICB9XG5cblxuICBleHRlbmRTZWxlY3Rpb25CeUtleWJvYXJkKHRhcmdldDogQ2VsbFBvcykge1xuICAgIGlmICghdGhpcy5zZWxlY3Rpb25TdGFydCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25TdGFydCA9IHsgLi4udGFyZ2V0IH07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgY29uc3QgbWluUm93ID0gTWF0aC5taW4oc3RhcnQucm93SW5kZXgsIHRhcmdldC5yb3dJbmRleCk7XG4gICAgY29uc3QgbWF4Um93ID0gTWF0aC5tYXgoc3RhcnQucm93SW5kZXgsIHRhcmdldC5yb3dJbmRleCk7XG5cbiAgICBjb25zdCBtaW5Db2wgPSBNYXRoLm1pbihzdGFydC5jb2xJbmRleCwgdGFyZ2V0LmNvbEluZGV4KTtcbiAgICBjb25zdCBtYXhDb2wgPSBNYXRoLm1heChzdGFydC5jb2xJbmRleCwgdGFyZ2V0LmNvbEluZGV4KTtcblxuICAgIGNvbnN0IG5ld0tleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBuZXdDZWxsczogQ2VsbFBvc1tdID0gW107XG5cbiAgICBmb3IgKGxldCByID0gbWluUm93OyByIDw9IG1heFJvdzsgcisrKSB7XG4gICAgICBmb3IgKGxldCBjID0gbWluQ29sOyBjIDw9IG1heENvbDsgYysrKSB7XG4gICAgICAgIGNvbnN0IGNvbE9iaiA9IHRoaXMuZ2V0Q29sdW1uQnlJbmRleChjKTtcbiAgICAgICAgaWYgKCFjb2xPYmopIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IHN1YkNvdW50ID0gY29sT2JqLmNoaWxkcmVuPy5sZW5ndGggPz8gMTtcblxuICAgICAgICBjb25zdCBzdGFydFN1YiA9XG4gICAgICAgICAgYyA9PT0gc3RhcnQuY29sSW5kZXggPyBzdGFydC5zdWJDb2xJbmRleCA6IDA7XG4gICAgICAgIGNvbnN0IGVuZFN1YiA9XG4gICAgICAgICAgYyA9PT0gdGFyZ2V0LmNvbEluZGV4ID8gdGFyZ2V0LnN1YkNvbEluZGV4IDogc3ViQ291bnQgLSAxO1xuXG4gICAgICAgIGZvciAobGV0IHMgPSBzdGFydFN1YjsgcyA8PSBlbmRTdWI7IHMrKykge1xuICAgICAgICAgIGNvbnN0IGtleSA9IGAke3J9LSR7Y30tJHtzfWA7XG4gICAgICAgICAgbmV3S2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICBuZXdDZWxscy5wdXNoKHtcbiAgICAgICAgICAgIHJvd0luZGV4OiByLFxuICAgICAgICAgICAgY29sSW5kZXg6IGMsXG4gICAgICAgICAgICBzdWJDb2xJbmRleDogcyxcbiAgICAgICAgICAgIGZpZWxkOiBjb2xPYmouZmllbGQgfHwgJycsXG4gICAgICAgICAgICBrZXlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRLZXlzID0gbmV3S2V5cztcbiAgICB0aGlzLnNlbGVjdGVkQ2VsbHMgPSBuZXdDZWxscztcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbkJvdW5kYXJpZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RWRnZUNlbGwoXG4gICAgZGlyZWN0aW9uOiAndXAnIHwgJ2Rvd24nIHwgJ2xlZnQnIHwgJ3JpZ2h0JyxcbiAgICBkYXRhU2V0OiBhbnlbXSxcbiAgICBjb2x1bW5zOiBhbnlbXSxcbiAgICBmcm9tOiBDZWxsUG9zXG4gICk6IENlbGxQb3Mge1xuICAgIGNvbnN0IG1pblJvdyA9IDE7XG4gICAgY29uc3QgbWF4Um93ID0gZGF0YVNldC5sZW5ndGg7XG4gICAgY29uc3QgbWF4Q29sID0gY29sdW1ucy5sZW5ndGggLSAxO1xuXG4gICAgbGV0IHsgcm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCB9ID0gZnJvbTtcblxuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICd1cCc6XG4gICAgICAgIHJvd0luZGV4ID0gbWluUm93O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgIHJvd0luZGV4ID0gbWF4Um93O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbGVmdCc6IHtcbiAgICAgICAgY29uc3QgZmlyc3RWaXNpYmxlID0gdGhpcy5maW5kTmV4dFZpc2libGVDb2woLTEsIG1heENvbCk7XG4gICAgICAgIGlmIChmaXJzdFZpc2libGUgIT09IG51bGwpIHtcbiAgICAgICAgICBjb2xJbmRleCA9IGZpcnN0VmlzaWJsZTtcbiAgICAgICAgICBjb25zdCBjb2wgPSB0aGlzLmdldENvbHVtbkJ5SW5kZXgoY29sSW5kZXgpO1xuICAgICAgICAgIHN1YkNvbEluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAncmlnaHQnOiB7XG4gICAgICAgIGNvbnN0IGxhc3RWaXNpYmxlID0gdGhpcy5maW5kUHJldlZpc2libGVDb2wobWF4Q29sICsgMSk7XG4gICAgICAgIGlmIChsYXN0VmlzaWJsZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbEluZGV4ID0gbGFzdFZpc2libGU7XG4gICAgICAgICAgY29uc3QgY29sID0gdGhpcy5nZXRDb2x1bW5CeUluZGV4KGNvbEluZGV4KTtcbiAgICAgICAgICBzdWJDb2xJbmRleCA9IGNvbD8uY2hpbGRyZW4/Lmxlbmd0aFxuICAgICAgICAgICAgPyBjb2wuY2hpbGRyZW4ubGVuZ3RoIC0gMVxuICAgICAgICAgICAgOiAwO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByb3dJbmRleCxcbiAgICAgIGNvbEluZGV4LFxuICAgICAgc3ViQ29sSW5kZXgsXG4gICAgICBrZXk6IGAke3Jvd0luZGV4fS0ke2NvbEluZGV4fS0ke3N1YkNvbEluZGV4fWAsXG4gICAgICBmaWVsZDogY29sdW1uc1tjb2xJbmRleF0/LmZpZWxkIHx8ICcnXG4gICAgfTtcbiAgfVxuXG4gIHJvd0hlaWdodCA9IDQ0O1xuICBwcml2YXRlIHNjcm9sbENlbGxJbnRvVmlld0ltbWVkaWF0ZShyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLnZlcnRpY2FsQ29udGFpbmVyIHx8ICF0aGlzLmhvcml6b250YWxDb250YWluZXIpIHJldHVybjtcblxuICAgIGNvbnN0IG1hcmdpbiA9IDY7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBWZXJ0aWNhbCBzY3JvbGxcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCB0YXJnZXRTY3JvbGxUb3AgPSAocm93SW5kZXggLSAxKSAqIHRoaXMucm93SGVpZ2h0O1xuICAgIGNvbnN0IG1heFNjcm9sbFRvcCA9IHRoaXMudmVydGljYWxDb250YWluZXIuc2Nyb2xsSGVpZ2h0IC0gdGhpcy52ZXJ0aWNhbENvbnRhaW5lci5jbGllbnRIZWlnaHQ7XG4gICAgdGhpcy52ZXJ0aWNhbENvbnRhaW5lci5zY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0YXJnZXRTY3JvbGxUb3AsIG1heFNjcm9sbFRvcCkpO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gSG9yaXpvbnRhbCBzY3JvbGxcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBhY3RpdmVDZWxsID0gdGhpcy52ZXJ0aWNhbENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFxuICAgICAgYFtsb2NhdGlvbj0nJHtyb3dJbmRleH0tJHtjb2xJbmRleH0nXWBcbiAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICghYWN0aXZlQ2VsbCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5ob3Jpem9udGFsQ29udGFpbmVyO1xuXG4gICAgLy8gY2VsbCdzIG9mZnNldCByZWxhdGl2ZSB0byBjb250YWluZXJcbiAgICBjb25zdCBjZWxsTGVmdCA9IGFjdGl2ZUNlbGwub2Zmc2V0TGVmdDtcbiAgICBjb25zdCBjZWxsUmlnaHQgPSBjZWxsTGVmdCArIGFjdGl2ZUNlbGwub2Zmc2V0V2lkdGg7XG5cbiAgICBjb25zdCBzY3JvbGxMZWZ0ID0gY29udGFpbmVyLnNjcm9sbExlZnQ7XG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBjb250YWluZXIuY2xpZW50V2lkdGg7XG5cbiAgICBpZiAoY2VsbExlZnQgPCBzY3JvbGxMZWZ0KSB7XG4gICAgICBjb250YWluZXIuc2Nyb2xsTGVmdCA9IGNlbGxMZWZ0IC0gbWFyZ2luO1xuICAgIH0gZWxzZSBpZiAoY2VsbFJpZ2h0ID4gc2Nyb2xsTGVmdCArIGNvbnRhaW5lcldpZHRoKSB7XG4gICAgICBjb250YWluZXIuc2Nyb2xsTGVmdCA9IGNlbGxSaWdodCAtIGNvbnRhaW5lcldpZHRoICsgbWFyZ2luO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNMYXN0Um93KHJvd0luZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMudmVydGljYWxDb250YWluZXIpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgcm93SW5kZXggPT09XG4gICAgICBNYXRoLnJvdW5kKFxuICAgICAgICB0aGlzLnZlcnRpY2FsQ29udGFpbmVyLnNjcm9sbEhlaWdodCAvXG4gICAgICAgICh0aGlzLnZlcnRpY2FsQ29udGFpbmVyLnNjcm9sbEhlaWdodCAvXG4gICAgICAgICAgdGhpcy52ZXJ0aWNhbENvbnRhaW5lci5jaGlsZHJlbi5sZW5ndGgpXG4gICAgICApIHx8IGZhbHNlXG4gICAgKTtcbiAgfVxuXG5nZXQgc2VsZWN0ZWRDb2x1bW5JbmRpY2VzKCk6IG51bWJlcltdIHtcbiAgaWYgKCF0aGlzLnNlbGVjdGlvbkJvdW5kcy5sZWZ0IHx8ICF0aGlzLnNlbGVjdGlvbkJvdW5kcy5yaWdodCkgcmV0dXJuIFtdO1xuXG4gIGNvbnN0IGluZGljZXM6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSB0aGlzLnNlbGVjdGlvbkJvdW5kcy5sZWZ0LmNvbEluZGV4OyBpIDw9IHRoaXMuc2VsZWN0aW9uQm91bmRzLnJpZ2h0LmNvbEluZGV4OyBpKyspIHtcbiAgICAvLyBPbmx5IGluY2x1ZGUgdmlzaWJsZSBjb2x1bW5zXG4gICAgaWYgKHRoaXMuaXNDb2x1bW5WaXNpYmxlKGkpKSBpbmRpY2VzLnB1c2goaSk7XG4gIH1cbiAgcmV0dXJuIGluZGljZXM7XG59XG5cbmRhdGFTZXQ6IGFueVtdID0gW107XG5tb3ZlQWN0aXZlQ2VsbEJ5Um93cyhzdGVwczogbnVtYmVyLCBkaXJlY3Rpb246ICd1cCcgfCAnZG93bicsIHNoaWZ0S2V5OiBib29sZWFuKSB7XG4gIGlmICghdGhpcy5hY3RpdmVDZWxsKSByZXR1cm47XG4gIGNvbnN0IHJvd0luZGV4ID0gZGlyZWN0aW9uID09PSAnZG93bicgPyB0aGlzLmFjdGl2ZUNlbGwucm93SW5kZXggKyBzdGVwcyA6IHRoaXMuYWN0aXZlQ2VsbC5yb3dJbmRleCAtIHN0ZXBzO1xuICBjb25zdCBjb2xJbmRleCA9IHRoaXMuYWN0aXZlQ2VsbC5jb2xJbmRleDtcbiAgdGhpcy5hY3RpdmVDZWxsID0geyAuLi50aGlzLmFjdGl2ZUNlbGwsIHJvd0luZGV4OiBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dJbmRleCwgdGhpcy5kYXRhU2V0Lmxlbmd0aCAtIDEpKSwgY29sSW5kZXggfTtcbn1cblxubW92ZUFjdGl2ZUNlbGxUb1N0YXJ0KHNoaWZ0S2V5OiBib29sZWFuKSB7XG4gIGlmICghdGhpcy5hY3RpdmVDZWxsKSByZXR1cm47XG4gIHRoaXMuYWN0aXZlQ2VsbCA9IHsgcm93SW5kZXg6IDEsIGNvbEluZGV4OiAwLCBzdWJDb2xJbmRleDogMCwgZmllbGQ6IHRoaXMuY29sdW1uc1swXS5maWVsZCwga2V5OiAnMC0wLTAnIH07XG59XG5cbm1vdmVBY3RpdmVDZWxsVG9FbmQoc2hpZnRLZXk6IGJvb2xlYW4pIHtcbiAgaWYgKCF0aGlzLmFjdGl2ZUNlbGwpIHJldHVybjtcbiAgY29uc3QgbGFzdFJvdyA9IHRoaXMuZGF0YVNldC5sZW5ndGg7XG4gIGNvbnN0IGxhc3RDb2wgPSB0aGlzLmNvbHVtbnMubGVuZ3RoIC0gMTtcbiAgY29uc3QgbGFzdFN1YiA9IHRoaXMuY29sdW1uc1tsYXN0Q29sXT8uY2hpbGRyZW4/Lmxlbmd0aCA/IHRoaXMuY29sdW1uc1tsYXN0Q29sXS5jaGlsZHJlbi5sZW5ndGggLSAxIDogMDtcbiAgdGhpcy5hY3RpdmVDZWxsID0geyByb3dJbmRleDogbGFzdFJvdywgY29sSW5kZXg6IGxhc3RDb2wsIHN1YkNvbEluZGV4OiBsYXN0U3ViLCBmaWVsZDogdGhpcy5jb2x1bW5zW2xhc3RDb2xdLmZpZWxkLCBrZXk6IGAke2xhc3RSb3d9LSR7bGFzdENvbH0tJHtsYXN0U3VifWAgfTtcbn1cblxuXG59XG4iXX0=
|
|
@@ -250,4 +250,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
250
250
|
providedIn: 'root'
|
|
251
251
|
}]
|
|
252
252
|
}], ctorParameters: function () { return []; } });
|
|
253
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS1zZXJ2aWNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWdyaWQvc3JjL2xpYi9zZXJ2aWNlcy9jb3B5LXNlcnZpY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sa0JBQWtCO0lBRTdCO1FBaUpGLGVBQVUsR0FBVSxFQUFFLENBQUM7UUFDckIsa0JBQWEsR0FBUyxFQUFFLENBQUE7SUFsSlIsQ0FBQztJQUNqQixzQkFBc0IsQ0FDcEIsT0FBYyxFQUNkLE9BQWMsRUFDZCxrQkFBK0IsRUFDL0IsYUFBb0IsRUFDcEIsY0FBK0M7UUFFL0MsbURBQW1EO1FBQ25ELE1BQU0sVUFBVSxHQUFZLEVBQUUsQ0FBQztRQUMvQixNQUFNLHFCQUFxQixHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FDL0MsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsS0FBSyxNQUFNLENBQUMsQ0FBQztRQUN4RCxJQUFJLGtCQUFrQixJQUFJLGtCQUFrQixDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7WUFDckQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLEtBQUssTUFBTSxNQUFNLElBQUksYUFBYSxFQUFFO2dCQUNsQyxNQUFNLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLEdBQUc7b0JBQUUsU0FBUztnQkFDbkIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFhLEVBQVUsRUFBRTtvQkFDN0MsTUFBTSxNQUFN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LFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUNqRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDWCxDQUFDOytHQXpSVSxrQkFBa0I7bUhBQWxCLGtCQUFrQixjQUZqQixNQUFNOzs0RkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDb3B5U2VydmljZVNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG4gIGdldFNlbGVjdGVkRGF0YUZvckNvcHkoXG4gICAgZGF0YVNldDogYW55W10sXG4gICAgY29sdW1uczogYW55W10sXG4gICAgcm93U2VsZWN0ZWRJbmRleGVzOiBTZXQ8bnVtYmVyPixcbiAgICBzZWxlY3RlZENlbGxzOiBhbnlbXSxcbiAgICBnZXROZXN0ZWRWYWx1ZTogKG9iajogYW55LCBwYXRoOiBzdHJpbmcpID0+IGFueVxuICApOiBhbnlbXVtdIHtcbiAgICAvLyBjb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5pc192aXNpYmxlKTtcbiAgICBjb25zdCBjb3BpZWRSb3dzOiBhbnlbXVtdID0gW107XG4gICAgY29uc3QgZmluZFJvd0J5VmlydHVhbEluZGV4ID0gKHZJbmRleDogbnVtYmVyKSA9PlxuICAgICAgZGF0YVNldC5maW5kKChyOiBhbnkpID0+IHIuX192aXJ0dWFsSW5kZXggPT09IHZJbmRleCk7XG4gICAgaWYgKHJvd1NlbGVjdGVkSW5kZXhlcyAmJiByb3dTZWxlY3RlZEluZGV4ZXMuc2l6ZSA+IDApIHtcbiAgICAgIGNvbnN0IHNvcnRlZEluZGV4ZXMgPSBbLi4ucm93U2VsZWN0ZWRJbmRleGVzXS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgICBmb3IgKGNvbnN0IHZJbmRleCBvZiBzb3J0ZWRJbmRleGVzKSB7XG4gICAgICAgIGNvbnN0IHJvdyA9IGZpbmRSb3dCeVZpcnR1YWxJbmRleCh2SW5kZXgpO1xuICAgICAgICBpZiAoIXJvdykgY29udGludWU7XG4gICAgICAgIGNvbnN0IGV4dHJhY3RWYWx1ZSA9IChmaWVsZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgICAgICBjb25zdCBuZXN0ZWQgPSBnZXROZXN0ZWRWYWx1ZShyb3csIGZpZWxkKTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9XG4gICAgICAgICAgICBuZXN0ZWQ/LnZhbHVlID8/XG4gICAgICAgICAgICBuZXN0ZWQ/Lm5hbWUgPz9cbiAgICAgICAgICAgIG5lc3RlZCA/P1xuICAgICAgICAgICAgJy0nO1xuXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgICAgLm1hcCh2ID0+XG4gICAgICAgICAgICAgICAgdHlwZW9mIHYgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICA/ICh2LmRlcGFydG1lbnROYW1lID8/IHYucm9sZU5hbWUgPz8gJycpXG4gICAgICAgICAgICAgICAgICA6ICh2Py50b1N0cmluZygpID8/ICcnKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5qb2luKCcsICcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWUgPz8gJyc7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG1hcHBlZCA9IGNvbHVtbnMubWFwKGNvbCA9PiB7XG4gICAgICAgICAgaWYgKGNvbC5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbikpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2wuY2hpbGRyZW4ubWFwKChjOiB7IGZpZWxkOiBzdHJpbmcgfSkgPT4gZXh0cmFjdFZhbHVlKGMuZmllbGQpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFtleHRyYWN0VmFsdWUoY29sLmZpZWxkKV07XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByb3dWYWx1ZXMgPSBtYXBwZWQucmVkdWNlPHN0cmluZ1tdPigoYWNjLCBjdXJyKSA9PiBhY2MuY29uY2F0KGN1cnIpLCBbXSk7XG4gICAgICAgIGNvcGllZFJvd3MucHVzaChyb3dWYWx1ZXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2VsZWN0ZWRDZWxscyAmJiBzZWxlY3RlZENlbGxzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHJvd3NNYXAgPSBuZXcgTWFwPG51bWJlciwgYW55W10+KCk7XG4gICAgICBmb3IgKGNvbnN0IGNlbGwgb2Ygc2VsZWN0ZWRDZWxscykge1xuICAgICAgICBjb25zdCByb3cgPSBmaW5kUm93QnlWaXJ0dWFsSW5kZXgoY2VsbC5yb3dJbmRleCk7XG4gICAgICAgIGlmICghcm93KSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgY29sID0gY29sdW1uc1tjZWxsLmNvbEluZGV4XTtcbiAgICAgICAgbGV0IGZpZWxkTmFtZSA9IGNvbD8uZmllbGQ7XG4gICAgICAgIGlmIChjb2w/LmNoaWxkcmVuICYmIGNvbC5jaGlsZHJlbltjZWxsLnN1YkNvbEluZGV4XSkge1xuICAgICAgICAgIGZpZWxkTmFtZSA9IGNvbC5jaGlsZHJlbltjZWxsLnN1YkNvbEluZGV4XS5maWVsZDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdmFsdWUgPSBnZXROZXN0ZWRWYWx1ZShyb3csIGZpZWxkTmFtZSkgfHwgZ2V0TmVzdGVkVmFsdWUocm93LCBmaWVsZE5hbWUpPy5uYW1lIHx8IGdldE5lc3RlZFZhbHVlKHJvdywgZmllbGROYW1lKTtcbiAgICAgICAgaWYodmFsdWUgPT0gdW5kZWZpbmVkIHx8IHZhbHVlID09IG51bGwpIHZhbHVlID0gJy0nO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlXG4gICAgICAgICAgICAubWFwKHYgPT5cbiAgICAgICAgICAgICAgdHlwZW9mIHYgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgPyB2LmRlcGFydG1lbnROYW1lID8/IHYucm9sZU5hbWUgPz8gdi5mdWxsX25hbWUgPz8gJydcbiAgICAgICAgICAgICAgICA6IHY/LnRvU3RyaW5nKCkgPz8gJydcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5qb2luKCcsICcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUgPz8gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyb3dzTWFwLmhhcyhjZWxsLnJvd0luZGV4KSkgcm93c01hcC5zZXQoY2VsbC5yb3dJbmRleCwgW10pO1xuICAgICAgICByb3dzTWFwLmdldChjZWxsLnJvd0luZGV4KSEucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBzb3J0ZWRDZWxscyA9IFsuLi5yb3dzTWFwLmVudHJpZXMoKV1cbiAgICAgICAgLnNvcnQoKFthXSwgW2JdKSA9PiBhIC0gYilcbiAgICAgICAgLm1hcCgoW18sIHZdKSA9PiB2KTtcbiAgICAgIGNvcGllZFJvd3MucHVzaCguLi5zb3J0ZWRDZWxscyk7XG4gICAgfVxuICAgIGlmIChjb3BpZWRSb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3QgYWN0aXZlQ2VsbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hY3RpdmUtY2VsbCcpO1xuICAgICAgaWYgKGFjdGl2ZUNlbGwpIHJldHVybiBbW2FjdGl2ZUNlbGwudGV4dENvbnRlbnQ/LnRyaW0oKSB8fCAnJ11dO1xuICAgIH1cblxuICAgIGNvbnN0IG1heENvbHMgPSBjb3BpZWRSb3dzLnJlZHVjZSgobWF4LCByb3cpID0+IE1hdGgubWF4KG1heCwgcm93Lmxlbmd0aCksIDApO1xuICAgIHJldHVybiBjb3BpZWRSb3dzLm1hcChyb3cgPT4ge1xuICAgICAgY29uc3QgbmV3Um93ID0gWy4uLnJvd107XG4gICAgICB3aGlsZSAobmV3Um93Lmxlbmd0aCA8IG1heENvbHMpIG5ld1Jvdy5wdXNoKCcnKTtcbiAgICAgIHJldHVybiBuZXdSb3c7XG4gICAgfSk7XG4gIH1cblxuXG4gIGNvcHlUb0NsaXBib2FyZChcbiAgc2VsZWN0ZWREYXRhOiBhbnlbXVtdLFxuICBzZWxlY3RvciA9ICcuc2VsZWN0ZWQtY2VsbCwgLmFjdGl2ZS1jZWxsLCAucm93LXNlbGVjdGVkJ1xuKTogdm9pZCB7XG4gIGlmICghc2VsZWN0ZWREYXRhPy5sZW5ndGgpIHJldHVybjtcblxuICBjb25zdCB0ZXh0ID0gc2VsZWN0ZWREYXRhXG4gICAgLm1hcChyb3cgPT4gcm93Lm1hcChjZWxsID0+IChjZWxsID8/ICcnKSkuam9pbignXFx0JykpXG4gICAgLmpvaW4oJ1xcbicpO1xuXG4gIC8vIPCflJAgQ2xpcGJvYXJkIChtdXN0IGJlIHN5bmNocm9ub3VzKVxuICBpZiAoZG9jdW1lbnQuaGFzRm9jdXMoKSAmJiBuYXZpZ2F0b3IuY2xpcGJvYXJkPy53cml0ZVRleHQpIHtcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLmxlZ2FjeUNvcHkodGV4dCk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5sZWdhY3lDb3B5KHRleHQpO1xuICB9XG5cbiAgLy8g4pyoIEZsYXNoIHNlbGVjdGVkIGNlbGxzIChzYWZlIEFGVEVSIGNvcHkpXG4gIHRoaXMuZmxhc2hTZWxlY3RlZENlbGxzKHNlbGVjdG9yKTtcbn1cblxucHJpdmF0ZSBmbGFzaFNlbGVjdGVkQ2VsbHMoc2VsZWN0b3I6IHN0cmluZykge1xuICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KHNlbGVjdG9yKTtcbiAgaWYgKCFlbGVtZW50cy5sZW5ndGgpIHJldHVybjtcblxuICBlbGVtZW50cy5mb3JFYWNoKGVsID0+IGVsLmNsYXNzTGlzdC5hZGQoJ2ZsYXNoLWJnJykpO1xuXG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGVsZW1lbnRzLmZvckVhY2goZWwgPT4gZWwuY2xhc3NMaXN0LnJlbW92ZSgnZmxhc2gtYmcnKSk7XG4gIH0sIDgwMCk7XG59XG5cblxuICBwcml2YXRlIGxlZ2FjeUNvcHkodGV4dDogc3RyaW5nKSB7XG4gICAgY29uc3QgdGV4dGFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgIHRleHRhcmVhLnZhbHVlID0gdGV4dDtcbiAgICB0ZXh0YXJlYS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgdGV4dGFyZWEuc3R5bGUub3BhY2l0eSA9ICcwJztcblxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4dGFyZWEpO1xuICAgIHRleHRhcmVhLmZvY3VzKCk7XG4gICAgdGV4dGFyZWEuc2VsZWN0KCk7XG5cbiAgICB0cnkge1xuICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXh0YXJlYSk7XG4gICAgfVxuICB9XG5cblxuXG51cGRhdGVSb3dzOiBhbnlbXSA9IFtdO1xuICBjdXJyZW50Q29sdW1zIDogYW55ID0gW11cbiAgYXN5bmMgcGFzdGVGcm9tQ2xpcGJvYXJkVGV4dChcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgZGF0YVNldDogYW55W10sXG4gICAgY29sdW1uczogYW55W10sXG4gICAgc3RhcnRSb3dJbmRleDogbnVtYmVyLFxuICAgIHN0YXJ0Q29sSW5kZXg6IG51bWJlcixcbiAgICBzdGFydFN1YkNvbEluZGV4OiBudW1iZXIgPSAwXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKCF0ZXh0KSByZXR1cm4gW107XG4gICAgdGhpcy51cGRhdGVSb3dzID0gW107XG4gICAgY29uc3Qgcm93cyA9IHRleHQuc3BsaXQoL1xccj9cXG4vKS5tYXAociA9PiByLnNwbGl0KCdcXHQnKSk7XG4gICAgY29uc3QgZmxhdHRlbmVkQ29sdW1uczogYW55W10gPSBbXTtcbiAgICBjb2x1bW5zLmZvckVhY2goY29sID0+IHtcbiAgICAgIGlmIChjb2wuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICBjb2wuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IGFueSkgPT4gZmxhdHRlbmVkQ29sdW1ucy5wdXNoKHsgcGFyZW50OiBjb2wsIC4uLmNoaWxkIH0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZsYXR0ZW5lZENvbHVtbnMucHVzaChjb2wpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGxldCBzdGFydEZsYXR0ZW5lZEluZGV4ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXJ0Q29sSW5kZXg7IGkrKykge1xuICAgICAgY29uc3QgY29sID0gY29sdW1uc1tpXTtcbiAgICAgIHN0YXJ0RmxhdHRlbmVkSW5kZXggKz0gY29sLmNoaWxkcmVuPy5sZW5ndGggfHwgMTtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnRDb2wgPSBjb2x1bW5zW3N0YXJ0Q29sSW5kZXhdO1xuICAgIGlmIChzdGFydENvbD8uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgc3RhcnRGbGF0dGVuZWRJbmRleCArPSBNYXRoLm1pbihzdGFydFN1YkNvbEluZGV4LCBzdGFydENvbC5jaGlsZHJlbi5sZW5ndGggLSAxKTtcbiAgICB9XG4gXG4gICAgcm93cy5mb3JFYWNoKChyb3dWYWx1ZXMsIHJPZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldFJvd0luZGV4ID0gc3RhcnRSb3dJbmRleCArIHJPZmZzZXQ7XG4gICAgICBjb25zdCByb3cgPSBkYXRhU2V0LmZpbmQociA9PiByPy5fX3ZpcnR1YWxJbmRleCA9PT0gdGFyZ2V0Um93SW5kZXgpO1xuICAgICAgaWYgKCFyb3cpIHJldHVybjtcbiBcbiAgICAgIHJvd1ZhbHVlcy5mb3JFYWNoKCh2YWx1ZSwgY09mZnNldCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXRJbmRleCA9IHN0YXJ0RmxhdHRlbmVkSW5kZXggKyBjT2Zmc2V0O1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPCAwIHx8IHRhcmdldEluZGV4ID49IGZsYXR0ZW5lZENvbHVtbnMubGVuZ3RoKSByZXR1cm47XG4gXG4gICAgICAgIGNvbnN0IHRhcmdldENvbHVtbiA9IGZsYXR0ZW5lZENvbHVtbnNbdGFyZ2V0SW5kZXhdO1xuICAgICAgICBpZighdGFyZ2V0Q29sdW1uIHx8ICF0YXJnZXRDb2x1bW4uaXNfZWRpdGFibGUpIHJldHVybjtcbiAgICAgICAgIGlmICh0YXJnZXRDb2x1bW4/LnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29sdW1zLnB1c2godGFyZ2V0Q29sdW1uKTtcbiAgICAgICAgICAgIHRoaXMuc2V0TmVzdGVkVmFsdWUocm93LCB0YXJnZXRDb2x1bW4sIHZhbHVlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldENvbHVtbi50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgIGlmICghaXNOYU4obnVtKSAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q29sdW1zLnB1c2godGFyZ2V0Q29sdW1uKTtcbiAgICAgICAgICAgICAgdGhpcy5zZXROZXN0ZWRWYWx1ZShyb3csIHRhcmdldENvbHVtbiwgbnVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiBcbiAgICByZXR1cm4ge3VwZGF0ZVJvd3MgOiB0aGlzLnVwZGF0ZVJvd3MsIGN1cnJlbnRDb2x1bXMgOiB0aGlzLmN1cnJlbnRDb2x1bXN9O1xuICB9XG5cblxuICBzZXROZXN0ZWRWYWx1ZShvYmo6IGFueSwgY29sdW1uOiBhbnksIG9wdGlvbjogYW55LCBjYWxsZWRGcm9tSW5wdXQgPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGUnIHx8IGNvbHVtbi50eXBlID09PSAnaW1hZ2UnKSByZXR1cm47XG4gICAgY29uc3QgcGF0aCA9IGNvbHVtbi5maWVsZDtcbiAgICBpZiAoIXBhdGgpIHJldHVybjtcbiAgICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGxhc3RLZXkgPSBrZXlzLnBvcCgpO1xuICAgIGNvbnN0IHBhcmVudCA9IGtleXMucmVkdWNlKChhY2M6IGFueSwga2V5OiBzdHJpbmcpID0+IChhY2Nba2V5XSA/Pz0ge30pLCBvYmopO1xuICAgIGlmIChwYXJlbnQgJiYgbGFzdEtleSkge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdvYmplY3QnICYmIG9wdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBwYXJlbnRbbGFzdEtleV0gPSB7XG4gICAgICAgICAgaWQ6IG9wdGlvbi5pZCA/PyAxLFxuICAgICAgICAgIHZhbHVlOiBvcHRpb24udmFsdWUgPz8gb3B0aW9uLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50W2xhc3RLZXldID0gb3B0aW9uO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzZW5kT2JqID0ge1xuICAgICAgZGF0YTogeyAuLi5vYmogfSxcbiAgICAgIGV2ZW50VHlwZTogJ29uQ2VsbEVkaXQnLFxuICAgIH07XG4gICAgdGhpcy51cGRhdGVSb3dzLnB1c2gob2JqKTtcbiAgfVxuXG5cbiAgY3V0U2VsZWN0ZWRTZWxlY3RlZERhdGEoXG4gICAgZGF0YVNldDogYW55W10sXG4gICAgcm93U2VsZWN0ZWRJbmRleGVzOiBTZXQ8bnVtYmVyPixcbiAgICBzZWxlY3RlZENlbGxzOiBhbnlbXSxcbiAgICBjb2x1bW5zOiBhbnlbXSxcbiAgICBzZXROZXN0ZWRWYWx1ZTogKG9iajogYW55LCBjb2x1bW46IGFueSwgdmFsdWU6IGFueSkgPT4gdm9pZFxuICApOiBhbnkge1xuICAgIGxldCB1cGRhdGVkRGF0YSA9IFsuLi5kYXRhU2V0XTtcbiAgICBpZiAocm93U2VsZWN0ZWRJbmRleGVzPy5zaXplKSB7XG4gICAgICBjb25zdCBpbmRleGVzID0gWy4uLnJvd1NlbGVjdGVkSW5kZXhlc107XG4gICAgICB1cGRhdGVkRGF0YSA9IHVwZGF0ZWREYXRhLmZpbHRlcihcbiAgICAgICAgKHJvdzogYW55KSA9PiAhaW5kZXhlcy5pbmNsdWRlcyhyb3cuX192aXJ0dWFsSW5kZXgpXG4gICAgICApO1xuICAgICAgLy8gcm93U2VsZWN0ZWRJbmRleGVzLmNsZWFyKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHNlbGVjdGVkQ2VsbHM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy51cGRhdGVSb3dzID0gW107XG4gICAgICBmb3IgKGNvbnN0IGNlbGwgb2Ygc2VsZWN0ZWRDZWxscykge1xuICAgICAgICBjb25zdCByb3cgPSB1cGRhdGVkRGF0YS5maW5kKHIgPT4gci5fX3ZpcnR1YWxJbmRleCA9PT0gY2VsbC5yb3dJbmRleCk7XG4gICAgICAgIGlmICghcm93KSBjb250aW51ZTtcbiAgICAgICAgbGV0IGNvbCA9IGNvbHVtbnNbY2VsbC5jb2xJbmRleF07XG4gICAgICAgIGlmIChjb2w/LmNoaWxkcmVuICYmIGNvbC5jaGlsZHJlbltjZWxsLnN1YkNvbEluZGV4XSkge1xuICAgICAgICAgIGNvbCA9IGNvbC5jaGlsZHJlbltjZWxsLnN1YkNvbEluZGV4XTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldE5lc3RlZFZhbHVlKHJvdywgY29sLCAnJyk7XG4gICAgICB9XG4gICAgICAvLyBzZWxlY3RlZENlbGxzLmxlbmd0aCA9IDA7XG4gICAgfVxuICAgIHJldHVybiB7dXBkYXRlZERhdGE6IHVwZGF0ZWREYXRhLCB1cGRhdGVkUm93czogdGhpcy51cGRhdGVSb3dzfTtcbiAgfVxuXG5cbiAgY3V0V2l0aEFuaW1hdGlvbihcbiAgICBzZWxlY3RlZERhdGE6IGFueVtdW10sXG4gICAgc2VsZWN0b3IgPSAnLnNlbGVjdGVkLWNlbGwsIC5hY3RpdmUtY2VsbCwgLnJvdy1zZWxlY3RlZCdcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFzZWxlY3RlZERhdGEgfHwgc2VsZWN0ZWREYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgdGV4dFRvQ29weSA9IHNlbGVjdGVkRGF0YVxuICAgICAgLm1hcChyb3cgPT4gcm93Lm1hcChjZWxsID0+IChjZWxsID8/ICcnKS50b1N0cmluZygpKS5qb2luKCdcXHQnKSlcbiAgICAgIC5qb2luKCdcXG4nKTtcblxuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHRUb0NvcHkpLmNhdGNoKGVyciA9PiBjb25zb2xlLmVycm9yKGVycikpO1xuXG4gICAgLy8gQXBwbHkgcmVkIGN1dCBhbmltYXRpb25cbiAgICBjb25zdCBzZWxlY3RlZEVscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICAgIHNlbGVjdGVkRWxzLmZvckVhY2goZWwgPT4gZWwuY2xhc3NMaXN0LmFkZCgnY3V0LWZsYXNoLWJnJykpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2VsZWN0ZWRFbHMuZm9yRWFjaChlbCA9PiBlbC5jbGFzc0xpc3QucmVtb3ZlKCdjdXQtZmxhc2gtYmcnKSk7XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuXG59XG4iXX0=
|
|
253
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS1zZXJ2aWNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWdyaWQvc3JjL2xpYi9zZXJ2aWNlcy9jb3B5LXNlcnZpY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sa0JBQWtCO0lBRTdCO1FBaUpGLGVBQVUsR0FBVSxFQUFFLENBQUM7UUFDckIsa0JBQWEsR0FBUyxFQUFFLENBQUE7SUFsSlIsQ0FBQztJQUNqQixzQkFBc0IsQ0FDcEIsT0FBYyxFQUNkLE9BQWMsRUFDZCxrQkFBK0IsRUFDL0IsYUFBb0IsRUFDcEIsY0FBK0M7UUFFL0MsbURBQW1EO1FBQ25ELE1BQU0sVUFBVSxHQUFZLEVBQUUsQ0FBQztRQUMvQixNQUFNLHFCQUFxQixHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FDL0MsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsS0FBSyxNQUFNLENBQUMsQ0FBQztRQUN4RCxJQUFJLGtCQUFrQixJQUFJLGtCQUFrQixDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7WUFDckQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLEtBQUssTUFBTSxNQUFNLElBQUksYUFBYSxFQUFFO2dCQUNsQyxNQUFNLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLEdBQUc7b0JBQUUsU0FBUztnQkFDbkIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFhLEVBQVUsRUFBRTtvQkFDN0MsTUFBTSxNQUFN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LFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUNqRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDWCxDQUFDOytHQXpSVSxrQkFBa0I7bUhBQWxCLGtCQUFrQixjQUZqQixNQUFNOzs0RkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDb3B5U2VydmljZVNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG4gIGdldFNlbGVjdGVkRGF0YUZvckNvcHkoXG4gICAgZGF0YVNldDogYW55W10sXG4gICAgY29sdW1uczogYW55W10sXG4gICAgcm93U2VsZWN0ZWRJbmRleGVzOiBTZXQ8bnVtYmVyPixcbiAgICBzZWxlY3RlZENlbGxzOiBhbnlbXSxcbiAgICBnZXROZXN0ZWRWYWx1ZTogKG9iajogYW55LCBwYXRoOiBzdHJpbmcpID0+IGFueVxuICApOiBhbnlbXVtdIHtcbiAgICAvLyBjb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5pc192aXNpYmxlKTtcbiAgICBjb25zdCBjb3BpZWRSb3dzOiBhbnlbXVtdID0gW107XG4gICAgY29uc3QgZmluZFJvd0J5VmlydHVhbEluZGV4ID0gKHZJbmRleDogbnVtYmVyKSA9PlxuICAgICAgZGF0YVNldC5maW5kKChyOiBhbnkpID0+IHIuX192aXJ0dWFsSW5kZXggPT09IHZJbmRleCk7XG4gICAgaWYgKHJvd1NlbGVjdGVkSW5kZXhlcyAmJiByb3dTZWxlY3RlZEluZGV4ZXMuc2l6ZSA+IDApIHtcbiAgICAgIGNvbnN0IHNvcnRlZEluZGV4ZXMgPSBbLi4ucm93U2VsZWN0ZWRJbmRleGVzXS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgICBmb3IgKGNvbnN0IHZJbmRleCBvZiBzb3J0ZWRJbmRleGVzKSB7XG4gICAgICAgIGNvbnN0IHJvdyA9IGZpbmRSb3dCeVZpcnR1YWxJbmRleCh2SW5kZXgpO1xuICAgICAgICBpZiAoIXJvdykgY29udGludWU7XG4gICAgICAgIGNvbnN0IGV4dHJhY3RWYWx1ZSA9IChmaWVsZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgICAgICBjb25zdCBuZXN0ZWQgPSBnZXROZXN0ZWRWYWx1ZShyb3csIGZpZWxkKTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9XG4gICAgICAgICAgICBuZXN0ZWQ/LnZhbHVlID8/XG4gICAgICAgICAgICBuZXN0ZWQ/Lm5hbWUgPz9cbiAgICAgICAgICAgIG5lc3RlZCA/P1xuICAgICAgICAgICAgJy0nO1xuXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgICAgLm1hcCh2ID0+XG4gICAgICAgICAgICAgICAgdHlwZW9mIHYgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICA/ICh2LmRlcGFydG1lbnROYW1lID8/IHYucm9sZU5hbWUgPz8gJycpXG4gICAgICAgICAgICAgICAgICA6ICh2Py50b1N0cmluZygpID8/ICcnKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5qb2luKCcsICcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWUgPz8gJyc7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG1hcHBlZCA9IGNvbHVtbnMubWFwKGNvbCA9PiB7XG4gICAgICAgICAgaWYgKGNvbC5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbikpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2wuY2hpbGRyZW4ubWFwKChjOiB7IGZpZWxkOiBzdHJpbmcgfSkgPT4gZXh0cmFjdFZhbHVlKGMuZmllbGQpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFtleHRyYWN0VmFsdWUoY29sLmZpZWxkKV07XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByb3dWYWx1ZXMgPSBtYXBwZWQucmVkdWNlPHN0cmluZ1tdPigoYWNjLCBjdXJyKSA9PiBhY2MuY29uY2F0KGN1cnIpLCBbXSk7XG4gICAgICAgIGNvcGllZFJvd3MucHVzaChyb3dWYWx1ZXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2VsZWN0ZWRDZWxscyAmJiBzZWxlY3RlZENlbGxzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHJvd3NNYXAgPSBuZXcgTWFwPG51bWJlciwgYW55W10+KCk7XG4gICAgICBmb3IgKGNvbnN0IGNlbGwgb2Ygc2VsZWN0ZWRDZWxscykge1xuICAgICAgICBjb25zdCByb3cgPSBmaW5kUm93QnlWaXJ0dWFsSW5kZXgoY2VsbC5yb3dJbmRleCk7XG4gICAgICAgIGlmICghcm93KSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgY29sID0gY29sdW1uc1tjZWxsLmNvbEluZGV4XTtcbiAgICAgICAgbGV0IGZpZWxkTmFtZSA9IGNvbD8uZmllbGQ7XG4gICAgICAgIGlmIChjb2w/LmNoaWxkcmVuICYmIGNvbC5jaGlsZHJlbltjZWxsLnN1YkNvbEluZGV4XSkge1xuICAgICAgICAgIGZpZWxkTmFtZSA9IGNvbC5jaGlsZHJlbltjZWxsLnN1YkNvbEluZGV4XS5maWVsZDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdmFsdWUgPSBnZXROZXN0ZWRWYWx1ZShyb3csIGZpZWxkTmFtZSkgfHwgZ2V0TmVzdGVkVmFsdWUocm93LCBmaWVsZE5hbWUpPy5uYW1lIHx8IGdldE5lc3RlZFZhbHVlKHJvdywgZmllbGROYW1lKTtcbiAgICAgICAgaWYodmFsdWUgPT0gdW5kZWZpbmVkIHx8IHZhbHVlID09IG51bGwpIHZhbHVlID0gJy0nO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlXG4gICAgICAgICAgICAubWFwKHYgPT5cbiAgICAgICAgICAgICAgdHlwZW9mIHYgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgPyB2LmRlcGFydG1lbnROYW1lID8/IHYucm9sZU5hbWUgPz8gdi5mdWxsX25hbWUgPz8gJydcbiAgICAgICAgICAgICAgICA6IHY/LnRvU3RyaW5nKCkgPz8gJydcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5qb2luKCcsICcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUgPz8gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyb3dzTWFwLmhhcyhjZWxsLnJvd0luZGV4KSkgcm93c01hcC5zZXQoY2VsbC5yb3dJbmRleCwgW10pO1xuICAgICAgICByb3dzTWFwLmdldChjZWxsLnJvd0luZGV4KSEucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBzb3J0ZWRDZWxscyA9IFsuLi5yb3dzTWFwLmVudHJpZXMoKV1cbiAgICAgICAgLnNvcnQoKFthXSwgW2JdKSA9PiBhIC0gYilcbiAgICAgICAgLm1hcCgoW18sIHZdKSA9PiB2KTtcbiAgICAgIGNvcGllZFJvd3MucHVzaCguLi5zb3J0ZWRDZWxscyk7XG4gICAgfVxuICAgIGlmIChjb3BpZWRSb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3QgYWN0aXZlQ2VsbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hY3RpdmUtY2VsbCcpO1xuICAgICAgaWYgKGFjdGl2ZUNlbGwpIHJldHVybiBbW2FjdGl2ZUNlbGwudGV4dENvbnRlbnQ/LnRyaW0oKSB8fCAnJ11dO1xuICAgIH1cblxuICAgIGNvbnN0IG1heENvbHMgPSBjb3BpZWRSb3dzLnJlZHVjZSgobWF4LCByb3cpID0+IE1hdGgubWF4KG1heCwgcm93Lmxlbmd0aCksIDApO1xuICAgIHJldHVybiBjb3BpZWRSb3dzLm1hcChyb3cgPT4ge1xuICAgICAgY29uc3QgbmV3Um93ID0gWy4uLnJvd107XG4gICAgICB3aGlsZSAobmV3Um93Lmxlbmd0aCA8IG1heENvbHMpIG5ld1Jvdy5wdXNoKCcnKTtcbiAgICAgIHJldHVybiBuZXdSb3c7XG4gICAgfSk7XG4gIH1cblxuXG4gIGNvcHlUb0NsaXBib2FyZChcbiAgICBzZWxlY3RlZERhdGE6IGFueVtdW10sXG4gICAgc2VsZWN0b3IgPSAnLnNlbGVjdGVkLWNlbGwsIC5hY3RpdmUtY2VsbCwgLnJvdy1zZWxlY3RlZCdcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFzZWxlY3RlZERhdGE/Lmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgY29uc3QgdGV4dCA9IHNlbGVjdGVkRGF0YVxuICAgICAgLm1hcChyb3cgPT4gcm93Lm1hcChjZWxsID0+IChjZWxsID8/ICcnKSkuam9pbignXFx0JykpXG4gICAgICAuam9pbignXFxuJyk7XG5cbiAgICAvLyDwn5SQIENsaXBib2FyZCAobXVzdCBiZSBzeW5jaHJvbm91cylcbiAgICBpZiAoZG9jdW1lbnQuaGFzRm9jdXMoKSAmJiBuYXZpZ2F0b3IuY2xpcGJvYXJkPy53cml0ZVRleHQpIHtcbiAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgdGhpcy5sZWdhY3lDb3B5KHRleHQpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVnYWN5Q29weSh0ZXh0KTtcbiAgICB9XG5cbiAgICAvLyDinKggRmxhc2ggc2VsZWN0ZWQgY2VsbHMgKHNhZmUgQUZURVIgY29weSlcbiAgICB0aGlzLmZsYXNoU2VsZWN0ZWRDZWxscyhzZWxlY3Rvcik7XG4gIH1cblxuICBwcml2YXRlIGZsYXNoU2VsZWN0ZWRDZWxscyhzZWxlY3Rvcjogc3RyaW5nKSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PihzZWxlY3Rvcik7XG4gICAgaWYgKCFlbGVtZW50cy5sZW5ndGgpIHJldHVybjtcblxuICAgIGVsZW1lbnRzLmZvckVhY2goZWwgPT4gZWwuY2xhc3NMaXN0LmFkZCgnZmxhc2gtYmcnKSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGVsZW1lbnRzLmZvckVhY2goZWwgPT4gZWwuY2xhc3NMaXN0LnJlbW92ZSgnZmxhc2gtYmcnKSk7XG4gICAgfSwgODAwKTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBsZWdhY3lDb3B5KHRleHQ6IHN0cmluZykge1xuICAgIGNvbnN0IHRleHRhcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICB0ZXh0YXJlYS52YWx1ZSA9IHRleHQ7XG4gICAgdGV4dGFyZWEuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgIHRleHRhcmVhLnN0eWxlLm9wYWNpdHkgPSAnMCc7XG5cbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRleHRhcmVhKTtcbiAgICB0ZXh0YXJlYS5mb2N1cygpO1xuICAgIHRleHRhcmVhLnNlbGVjdCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGV4dGFyZWEpO1xuICAgIH1cbiAgfVxuXG5cblxudXBkYXRlUm93czogYW55W10gPSBbXTtcbiAgY3VycmVudENvbHVtcyA6IGFueSA9IFtdXG4gIGFzeW5jIHBhc3RlRnJvbUNsaXBib2FyZFRleHQoXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIGRhdGFTZXQ6IGFueVtdLFxuICAgIGNvbHVtbnM6IGFueVtdLFxuICAgIHN0YXJ0Um93SW5kZXg6IG51bWJlcixcbiAgICBzdGFydENvbEluZGV4OiBudW1iZXIsXG4gICAgc3RhcnRTdWJDb2xJbmRleDogbnVtYmVyID0gMFxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICghdGV4dCkgcmV0dXJuIFtdO1xuICAgIHRoaXMudXBkYXRlUm93cyA9IFtdO1xuICAgIGNvbnN0IHJvd3MgPSB0ZXh0LnNwbGl0KC9cXHI/XFxuLykubWFwKHIgPT4gci5zcGxpdCgnXFx0JykpO1xuICAgIGNvbnN0IGZsYXR0ZW5lZENvbHVtbnM6IGFueVtdID0gW107XG4gICAgY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICBpZiAoY29sLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgY29sLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBhbnkpID0+IGZsYXR0ZW5lZENvbHVtbnMucHVzaCh7IHBhcmVudDogY29sLCAuLi5jaGlsZCB9KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmbGF0dGVuZWRDb2x1bW5zLnB1c2goY29sKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBsZXQgc3RhcnRGbGF0dGVuZWRJbmRleCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGFydENvbEluZGV4OyBpKyspIHtcbiAgICAgIGNvbnN0IGNvbCA9IGNvbHVtbnNbaV07XG4gICAgICBzdGFydEZsYXR0ZW5lZEluZGV4ICs9IGNvbC5jaGlsZHJlbj8ubGVuZ3RoIHx8IDE7XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0Q29sID0gY29sdW1uc1tzdGFydENvbEluZGV4XTtcbiAgICBpZiAoc3RhcnRDb2w/LmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgIHN0YXJ0RmxhdHRlbmVkSW5kZXggKz0gTWF0aC5taW4oc3RhcnRTdWJDb2xJbmRleCwgc3RhcnRDb2wuY2hpbGRyZW4ubGVuZ3RoIC0gMSk7XG4gICAgfVxuIFxuICAgIHJvd3MuZm9yRWFjaCgocm93VmFsdWVzLCByT2Zmc2V0KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXRSb3dJbmRleCA9IHN0YXJ0Um93SW5kZXggKyByT2Zmc2V0O1xuICAgICAgY29uc3Qgcm93ID0gZGF0YVNldC5maW5kKHIgPT4gcj8uX192aXJ0dWFsSW5kZXggPT09IHRhcmdldFJvd0luZGV4KTtcbiAgICAgIGlmICghcm93KSByZXR1cm47XG4gXG4gICAgICByb3dWYWx1ZXMuZm9yRWFjaCgodmFsdWUsIGNPZmZzZXQpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0SW5kZXggPSBzdGFydEZsYXR0ZW5lZEluZGV4ICsgY09mZnNldDtcbiAgICAgICAgaWYgKHRhcmdldEluZGV4IDwgMCB8fCB0YXJnZXRJbmRleCA+PSBmbGF0dGVuZWRDb2x1bW5zLmxlbmd0aCkgcmV0dXJuO1xuIFxuICAgICAgICBjb25zdCB0YXJnZXRDb2x1bW4gPSBmbGF0dGVuZWRDb2x1bW5zW3RhcmdldEluZGV4XTtcbiAgICAgICAgaWYoIXRhcmdldENvbHVtbiB8fCAhdGFyZ2V0Q29sdW1uLmlzX2VkaXRhYmxlKSByZXR1cm47XG4gICAgICAgICBpZiAodGFyZ2V0Q29sdW1uPy50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRoaXMuY3VycmVudENvbHVtcy5wdXNoKHRhcmdldENvbHVtbik7XG4gICAgICAgICAgICB0aGlzLnNldE5lc3RlZFZhbHVlKHJvdywgdGFyZ2V0Q29sdW1uLCB2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRDb2x1bW4udHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKG51bSkgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudENvbHVtcy5wdXNoKHRhcmdldENvbHVtbik7XG4gICAgICAgICAgICAgIHRoaXMuc2V0TmVzdGVkVmFsdWUocm93LCB0YXJnZXRDb2x1bW4sIG51bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gXG4gICAgcmV0dXJuIHt1cGRhdGVSb3dzIDogdGhpcy51cGRhdGVSb3dzLCBjdXJyZW50Q29sdW1zIDogdGhpcy5jdXJyZW50Q29sdW1zfTtcbiAgfVxuXG5cbiAgc2V0TmVzdGVkVmFsdWUob2JqOiBhbnksIGNvbHVtbjogYW55LCBvcHRpb246IGFueSwgY2FsbGVkRnJvbUlucHV0ID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJyB8fCBjb2x1bW4udHlwZSA9PT0gJ2ltYWdlJykgcmV0dXJuO1xuICAgIGNvbnN0IHBhdGggPSBjb2x1bW4uZmllbGQ7XG4gICAgaWYgKCFwYXRoKSByZXR1cm47XG4gICAgY29uc3Qga2V5cyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICBjb25zdCBsYXN0S2V5ID0ga2V5cy5wb3AoKTtcbiAgICBjb25zdCBwYXJlbnQgPSBrZXlzLnJlZHVjZSgoYWNjOiBhbnksIGtleTogc3RyaW5nKSA9PiAoYWNjW2tleV0gPz89IHt9KSwgb2JqKTtcbiAgICBpZiAocGFyZW50ICYmIGxhc3RLZXkpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JyAmJiBvcHRpb24gIT09IG51bGwpIHtcbiAgICAgICAgcGFyZW50W2xhc3RLZXldID0ge1xuICAgICAgICAgIGlkOiBvcHRpb24uaWQgPz8gMSxcbiAgICAgICAgICB2YWx1ZTogb3B0aW9uLnZhbHVlID8/IG9wdGlvbixcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudFtsYXN0S2V5XSA9IG9wdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc2VuZE9iaiA9IHtcbiAgICAgIGRhdGE6IHsgLi4ub2JqIH0sXG4gICAgICBldmVudFR5cGU6ICdvbkNlbGxFZGl0JyxcbiAgICB9O1xuICAgIHRoaXMudXBkYXRlUm93cy5wdXNoKG9iaik7XG4gIH1cblxuXG4gIGN1dFNlbGVjdGVkU2VsZWN0ZWREYXRhKFxuICAgIGRhdGFTZXQ6IGFueVtdLFxuICAgIHJvd1NlbGVjdGVkSW5kZXhlczogU2V0PG51bWJlcj4sXG4gICAgc2VsZWN0ZWRDZWxsczogYW55W10sXG4gICAgY29sdW1uczogYW55W10sXG4gICAgc2V0TmVzdGVkVmFsdWU6IChvYmo6IGFueSwgY29sdW1uOiBhbnksIHZhbHVlOiBhbnkpID0+IHZvaWRcbiAgKTogYW55IHtcbiAgICBsZXQgdXBkYXRlZERhdGEgPSBbLi4uZGF0YVNldF07XG4gICAgaWYgKHJvd1NlbGVjdGVkSW5kZXhlcz8uc2l6ZSkge1xuICAgICAgY29uc3QgaW5kZXhlcyA9IFsuLi5yb3dTZWxlY3RlZEluZGV4ZXNdO1xuICAgICAgdXBkYXRlZERhdGEgPSB1cGRhdGVkRGF0YS5maWx0ZXIoXG4gICAgICAgIChyb3c6IGFueSkgPT4gIWluZGV4ZXMuaW5jbHVkZXMocm93Ll9fdmlydHVhbEluZGV4KVxuICAgICAgKTtcbiAgICAgIC8vIHJvd1NlbGVjdGVkSW5kZXhlcy5jbGVhcigpO1xuICAgIH1cbiAgICBlbHNlIGlmIChzZWxlY3RlZENlbGxzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudXBkYXRlUm93cyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBjZWxsIG9mIHNlbGVjdGVkQ2VsbHMpIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdXBkYXRlZERhdGEuZmluZChyID0+IHIuX192aXJ0dWFsSW5kZXggPT09IGNlbGwucm93SW5kZXgpO1xuICAgICAgICBpZiAoIXJvdykgY29udGludWU7XG4gICAgICAgIGxldCBjb2wgPSBjb2x1bW5zW2NlbGwuY29sSW5kZXhdO1xuICAgICAgICBpZiAoY29sPy5jaGlsZHJlbiAmJiBjb2wuY2hpbGRyZW5bY2VsbC5zdWJDb2xJbmRleF0pIHtcbiAgICAgICAgICBjb2wgPSBjb2wuY2hpbGRyZW5bY2VsbC5zdWJDb2xJbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXROZXN0ZWRWYWx1ZShyb3csIGNvbCwgJycpO1xuICAgICAgfVxuICAgICAgLy8gc2VsZWN0ZWRDZWxscy5sZW5ndGggPSAwO1xuICAgIH1cbiAgICByZXR1cm4ge3VwZGF0ZWREYXRhOiB1cGRhdGVkRGF0YSwgdXBkYXRlZFJvd3M6IHRoaXMudXBkYXRlUm93c307XG4gIH1cblxuXG4gIGN1dFdpdGhBbmltYXRpb24oXG4gICAgc2VsZWN0ZWREYXRhOiBhbnlbXVtdLFxuICAgIHNlbGVjdG9yID0gJy5zZWxlY3RlZC1jZWxsLCAuYWN0aXZlLWNlbGwsIC5yb3ctc2VsZWN0ZWQnXG4gICk6IHZvaWQge1xuICAgIGlmICghc2VsZWN0ZWREYXRhIHx8IHNlbGVjdGVkRGF0YS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIGNvbnN0IHRleHRUb0NvcHkgPSBzZWxlY3RlZERhdGFcbiAgICAgIC5tYXAocm93ID0+IHJvdy5tYXAoY2VsbCA9PiAoY2VsbCA/PyAnJykudG9TdHJpbmcoKSkuam9pbignXFx0JykpXG4gICAgICAuam9pbignXFxuJyk7XG5cbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0VG9Db3B5KS5jYXRjaChlcnIgPT4gY29uc29sZS5lcnJvcihlcnIpKTtcblxuICAgIC8vIEFwcGx5IHJlZCBjdXQgYW5pbWF0aW9uXG4gICAgY29uc3Qgc2VsZWN0ZWRFbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgICBzZWxlY3RlZEVscy5mb3JFYWNoKGVsID0+IGVsLmNsYXNzTGlzdC5hZGQoJ2N1dC1mbGFzaC1iZycpKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNlbGVjdGVkRWxzLmZvckVhY2goZWwgPT4gZWwuY2xhc3NMaXN0LnJlbW92ZSgnY3V0LWZsYXNoLWJnJykpO1xuICAgIH0sIDEwMDApO1xuICB9XG5cblxufVxuIl19
|