ontimize-web-ngx 15.8.0 → 15.8.2
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/esm2020/lib/components/input/date-range-legacy/o-daterange-picker.component.mjs +2 -2
- package/esm2020/lib/components/input/radio/o-radio.component.mjs +4 -3
- package/esm2020/lib/components/o-form-data-component.class.mjs +2 -2
- package/esm2020/lib/components/table/extensions/default-o-table.datasource.mjs +4 -2
- package/esm2020/lib/components/table/extensions/dialog/visible-columns/o-table-visible-columns-dialog.component.mjs +33 -5
- package/esm2020/lib/components/table/extensions/header/table-header/o-table-header.component.mjs +6 -4
- package/esm2020/lib/components/table/extensions/header/table-header-column-filter-icon/o-table-header-column-filter-icon.component.mjs +30 -24
- package/esm2020/lib/components/table/extensions/header/table-header-select-all/o-table-header-select-all.component.mjs +2 -2
- package/esm2020/lib/components/table/extensions/o-table-strategy.service.mjs +9 -2
- package/esm2020/lib/components/table/o-table.component.mjs +59 -41
- package/fesm2015/ontimize-web-ngx.mjs +146 -80
- package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
- package/fesm2020/ontimize-web-ngx.mjs +141 -77
- package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
- package/lib/components/input/radio/o-radio.component.d.ts +1 -0
- package/lib/components/table/extensions/header/table-header/o-table-header.component.d.ts +3 -1
- package/lib/components/table/extensions/header/table-header-column-filter-icon/o-table-header-column-filter-icon.component.d.ts +9 -4
- package/lib/components/table/extensions/header/table-header-select-all/o-table-header-select-all.component.d.ts +1 -1
- package/lib/components/table/extensions/o-table-strategy.service.d.ts +2 -0
- package/lib/components/table/o-table.component.d.ts +14 -7
- package/package.json +1 -1
|
@@ -146,7 +146,9 @@ export class DefaultOTableDataSource extends DataSource {
|
|
|
146
146
|
}
|
|
147
147
|
const renderedData = data;
|
|
148
148
|
if (this.table.virtualScrollViewport && !this._paginator) {
|
|
149
|
-
|
|
149
|
+
if (this.table.savedScrollPosition === 0) {
|
|
150
|
+
data = this.getVirtualScrollData(data, new OnRangeChangeVirtualScroll({ start: 0, end: Codes.LIMIT_SCROLLVIRTUAL }));
|
|
151
|
+
}
|
|
150
152
|
}
|
|
151
153
|
const aggregateData = this.getAggregatesData(renderedData);
|
|
152
154
|
this.ngZone.run(() => {
|
|
@@ -782,4 +784,4 @@ export class DefaultOTableDataSource extends DataSource {
|
|
|
782
784
|
return expansionState;
|
|
783
785
|
}
|
|
784
786
|
}
|
|
785
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1vLXRhYmxlLmRhdGFzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9leHRlbnNpb25zL2RlZmF1bHQtby10YWJsZS5kYXRhc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSwwQkFBMEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJekYsT0FBTyxFQUFFLHlCQUF5QixFQUFzQixNQUFNLGlEQUFpRCxDQUFDO0FBQ2hILE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFJakUsTUFBTSxPQUFPLDBCQUEwQjtJQUdyQyxZQUFZLElBQWU7UUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDcEIsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLHVCQUF3QixTQUFRLFVBQWU7SUFHMUQsSUFBSSxJQUFJLEtBQVksT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFxQi9ELElBQUksV0FBVyxL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Q0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7U0FDOUg7YUFBTTtZQUNMLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxHQUFHLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDaEosY0FBYyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO1NBQ2hFO1FBQ0QsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVNvdXJjZSwgTGlzdFJhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgYXN5bmNTY2hlZHVsZXIsIEJlaGF2aW9yU3ViamVjdCwgRU1QVFksIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIG9ic2VydmVPbiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBPVGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLWRhdGFzb3VyY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9UYWJsZU9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL28tdGFibGUtb3B0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvciwgT0NvbHVtblZhbHVlRmlsdGVyIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvdGFibGUvby1jb2x1bW4tdmFsdWUtZmlsdGVyLnR5cGUnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL2NvZGVzJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBPQ29sdW1uIH0gZnJvbSAnLi4vY29sdW1uL28tY29sdW1uLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL28tdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZURhbyB9IGZyb20gJy4vby10YWJsZS5kYW8nO1xuaW1wb3J0IHsgT1RhYmxlR3JvdXBlZFJvdyB9IGZyb20gJy4vcm93L28tdGFibGUtcm93LWdyb3VwLmNsYXNzJztcbmltcG9ydCB7IE9NYXRTb3J0IH0gZnJvbSAnLi9zb3J0L28tbWF0LXNvcnQnO1xuaW1wb3J0IHsgQWdncmVnYXRlRnVuY3Rpb24gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2dyZWdhdGUtZnVuY3Rpb24udHlwZSc7XG5cbmV4cG9ydCBjbGFzcyBPblJhbmdlQ2hhbmdlVmlydHVhbFNjcm9sbCB7XG4gIHB1YmxpYyByYW5nZTogTGlzdFJhbmdlO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IExpc3RSYW5nZSkge1xuICAgIHRoaXMucmFuZ2UgPSBkYXRhO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWZhdWx0T1RhYmxlRGF0YVNvdXJjZSBleHRlbmRzIERhdGFTb3VyY2U8YW55PiBpbXBsZW1lbnRzIE9UYWJsZURhdGFTb3VyY2Uge1xuICBkYXRhVG90YWxzQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4obnVsbCk7XG5cbiAgZ2V0IGRhdGEoKTogYW55W10geyByZXR1cm4gdGhpcy5kYXRhVG90YWxzQ2hhbmdlLnZhbHVlID8/IFtdOyB9XG5cbiAgcHJvdGVjdGVkIF9kYXRhYmFzZTogT1RhYmxlRGFvO1xuICBwcm90ZWN0ZWQgX3BhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuICBwcm90ZWN0ZWQgX3RhYmxlT3B0aW9uczogT1RhYmxlT3B0aW9ucztcbiAgcHJvdGVjdGVkIF9zb3J0OiBPTWF0U29ydDtcblxuICBwcm90ZWN0ZWQgX3ZpcnR1YWxQYWdlQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxPblJhbmdlQ2hhbmdlVmlydHVhbFNjcm9sbD4obmV3IE9uUmFuZ2VDaGFuZ2VWaXJ0dWFsU2Nyb2xsKHsgc3RhcnQ6IDAsIGVuZDogMCB9KSk7XG4gIHByb3RlY3RlZCBfcXVpY2tGaWx0ZXJDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCcnKTtcbiAgcHJvdGVjdGVkIF9jb2x1bW5WYWx1ZUZpbHRlckNoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG4gIHByb3RlY3RlZCBncm91cEJ5Q29sdW1uQ2hhbmdlOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD47XG5cbiAgcHJvdGVjdGVkIGZpbHRlcmVkRGF0YTogYW55W10gPSBbXTtcbiAgcHJvdGVjdGVkIGFnZ3JlZ2F0ZURhdGE6IGFueSA9IHt9O1xuXG4gIG9uUmVuZGVyZWREYXRhQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG5cbiAgcHJvdGVjdGVkIF9yZW5kZXJlZERhdGE6IGFueVtdID0gbnVsbDtcbiAgcmVzdWx0c0xlbmd0aDogbnVtYmVyID0gMDtcblxuICBnZXQgcXVpY2tGaWx0ZXIoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX3F1aWNrRmlsdGVyQ2hhbmdlLnZhbHVlIHx8ICcnOyB9XG4gIHNldCBxdWlja0ZpbHRlcihmaWx0ZXI6IHN0cmluZykge1xuICAgIHRoaXMuX3F1aWNrRmlsdGVyQ2hhbmdlLm5leHQoZmlsdGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgY29sdW1uVmFsdWVGaWx0ZXJzOiBBcnJheTxPQ29sdW1uVmFsdWVGaWx0ZXI+ID0gW107XG4gIHByaXZhdGUgZ3JvdXBlZFJvd1N0YXRlOiBPVGFibGVHcm91cGVkUm93W10gPSBbXTtcbiAgcHJpdmF0ZSBhY3RpdmVBZ2dyZWdhdGVzID0ge307XG4gIHByaXZhdGUgZ3JvdXBlZFJvd3NTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgbGV2ZWxzRXhwYW5zaW9uU3RhdGUgPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmU6IE5nWm9uZTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgdGFibGU6IE9UYWJsZUNvbXBvbmVudCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5uZ1pvbmUgPSB0YWJsZS5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICB0aGlzLl9kYXRhYmFzZSA9IHRhYmxlLmRhb1RhYmxlO1xuICAgIGlmICh0aGlzLl9kYXRhYmFzZSkge1xuICAgICAgdGhpcy5yZXN1bHRzTGVuZ3RoID0gdGhpcy5fZGF0YWJhc2UuZGF0YS5sZW5ndGg7XG4gICAgfVxuICAgIGlmICh0YWJsZS5wYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMuX3BhZ2luYXRvciA9IHRhYmxlLm1hdHBhZ2luYXRvcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50YWJsZS52aXJ0dWFsU2Nyb2xsVmlld3BvcnQpIHtcbiAgICAgIHRoaXMudGFibGUudmlydHVhbFNjcm9sbFZpZXdwb3J0LnJlbmRlcmVkUmFuZ2VTdHJlYW1cbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAodmFsdWU6IExpc3RSYW5nZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdmlydHVhbFBhZ2VDaGFuZ2UubmV4dChuZXcgT25SYW5nZUNoYW5nZVZpcnR1YWxTY3JvbGwodmFsdWUpKTtcbiAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl90YWJsZU9wdGlvbnMgPSB0YWJsZS5vVGFibGVPcHRpb25zO1xuICAgIHRoaXMuX3NvcnQgPSB0YWJsZS5zb3J0O1xuXG4gIH1cblxuICBzb3J0RnVuY3Rpb24oYTogYW55LCBiOiBhbnkpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zb3J0LnNvcnRGdW5jdGlvbihhLCBiKTtcbiAgfVxuXG4gIGdldCByZW5kZXJlZERhdGEoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl9yZW5kZXJlZERhdGE7XG4gIH1cblxuICBzZXQgcmVuZGVyZWREYXRhKGFyZzogYW55W10pIHtcbiAgICB0aGlzLl9yZW5kZXJlZERhdGEgPSBhcmc7XG4gICAgdGhpcy5vblJlbmRlcmVkRGF0YUNoYW5nZS5lbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ29ubmVjdCBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIHRhYmxlIHRvIHJldHJpZXZlIG9uZSBzdHJlYW0gY29udGFpbmluZyB0aGUgZGF0YSB0byByZW5kZXIuXG4gICAqL1xuICBjb25uZWN0KCk6IE9ic2VydmFibGU8YW55W10+IHtcbiAgICBjb25zdCB0YWcgPSAodHlwZTogc3RyaW5nLCBvYnM6IE9ic2VydmFibGU8YW55PikgPT5cbiAgICAgIG9icy5waXBlKG1hcCh2YWx1ZSA9PiAoeyB0eXBlLCB2YWx1ZSB9KSkpO1xuXG4gICAgY29uc3QgZGlzcGxheURhdGFDaGFuZ2VzOiBhbnlbXSA9IFtdO1xuICAgIGRpc3BsYXlEYXRhQ2hhbmdlcy5wdXNoKHRhZygnREFUQUNIQU5HRScsIHRoaXMuX2RhdGFiYXNlLmRhdGFDaGFuZ2UpKTtcblxuXG4gICAgaWYgKCF0aGlzLnRhYmxlLnBhZ2VhYmxlKSB7XG5cblxuICAgICAgaWYgKHRoaXMuX3NvcnQpIHtcbiAgICAgICAgZGlzcGxheURhdGFDaGFuZ2VzLnB1c2godGFnKCdTT1JUQ0hBTkdFJywgdGhpcy5fc29ydC5vU29ydENoYW5nZSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fdGFibGVPcHRpb25zLmZpbHRlcikge1xuICAgICAgICBkaXNwbGF5RGF0YUNoYW5nZXMucHVzaCh0YWcoJ1FVSUNLRklMVEVSQ0hBTkdFJywgdGhpcy5fcXVpY2tGaWx0ZXJDaGFuZ2UpKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fcGFnaW5hdG9yKSB7XG4gICAgICAgIGRpc3BsYXlEYXRhQ2hhbmdlcy5wdXNoKHRhZygnUEFHSU5BVE9SJywgdGhpcy5fcGFnaW5hdG9yLnBhZ2UpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkaXNwbGF5RGF0YUNoYW5nZXMucHVzaCh0YWcoJ0ZJTFRFUkJZQ09MVU1OJywgdGhpcy5fY29sdW1uVmFsdWVGaWx0ZXJDaGFuZ2UpLnBpcGUoZmlsdGVyKGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudC52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KSkpO1xuXG4gICAgaWYgKHRoaXMudGFibGUuZ3JvdXBhYmxlKSB7XG4gICAgICBkaXNwbGF5RGF0YUNoYW5nZXMucHVzaCh0YWcoJ0dST1VQX0JZJywgdGhpcy5ncm91cEJ5Q29sdW1uQ2hhbmdlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBQcm9jZXNzZXMgdGFibGUgZGF0YSByZWFjdGl2ZWx5IHdoZW5ldmVyIGFueSBkaXNwbGF5LXJlbGF0ZWQgZXZlbnQgb2NjdXJzLlxuICAgICogSGFuZGxlczpcbiAgICAqICAtIFZpcnR1YWwgc2Nyb2xsIHJhbmdlIGNoYW5nZXNcbiAgICAqICAtIEZpbHRlcmluZywgc29ydGluZywgZ3JvdXBpbmcsIGNhbGN1bGF0ZWQgY29sdW1uc1xuICAgICogIC0gUGFnaW5hdGlvbiAoY2xpZW50IG9yIHNlcnZlcilcbiAgICAqICAtIEhlYXZ5IGRhdGEgcHJvY2Vzc2luZyBvdXRzaWRlIEFuZ3VsYXIncyB6b25lIGZvciBwZXJmb3JtYW5jZVxuICAgICogIC0gUmV0dXJuaW5nIHByb2Nlc3NlZCBkYXRhIGJhY2sgaW50byBBbmd1bGFyIGZvciBVSSB1cGRhdGVcbiAgICAqXG4gICAgKiBUaGlzIHBpcGVsaW5lIGVuc3VyZXMgb3B0aW1hbCBwZXJmb3JtYW5jZSBieTpcbiAgICAqICAtIFByZXZlbnRpbmcgdW5uZWNlc3NhcnkgY2hhbmdlIGRldGVjdGlvbiBkdXJpbmcgaGVhdnkgb3BlcmF0aW9uc1xuICAgICogIC0gQWxsb3dpbmcgdGhlIGJyb3dzZXIgdG8gcmVuZGVyIGZpcnN0ICh2aWEgc2V0VGltZW91dClcbiAgICAqICAtIFJ1bm5pbmcgZXhwZW5zaXZlIGxvZ2ljIG91dHNpZGUgQW5ndWxhciBab25lXG4gICAgKiAgLSBSZS1lbnRlcmluZyBBbmd1bGFyIFpvbmUgb25seSB3aGVuIFVJIG11c3QgdXBkYXRlXG4gICAgKlxuICAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxhbnlbXT4gRW1pdHMgdGhlIHByb2Nlc3NlZCBkYXRhc2V0IHRvIGJlIHJlbmRlcmVkLlxuICAgICovXG4gICAgLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICAgLy8gU1RSRUFNIDE6ICBNYWluIGRhdGEgc3RyZWFtIChleGVjdXRlZCB3aXRoIGFzeW5jU2NoZWR1bGVyIGZvciBoZWF2eSB0YXNrcylcbiAgICAvLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgICBjb25zdCBtYWluRGF0YVN0cmVhbSA9IG1lcmdlKC4uLmRpc3BsYXlEYXRhQ2hhbmdlcykucGlwZShcbiAgICAgIC8vICBkZWJvdW5jZVRpbWUoNTApLCAvLyBSZWR1Y2UgcsOhZmFnYXMgZGUgZXZlbnRvc1xuICAgICAgLy8gRW5zdXJlcyBoZWF2eSBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQgYXN5bmNocm9ub3VzbHlcbiAgICAgIG9ic2VydmVPbihhc3luY1NjaGVkdWxlciksXG4gICAgICBzd2l0Y2hNYXAoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgbGV0IGRhdGEgPSBPYmplY3QuYXNzaWduKFtdLCB0aGlzLl9kYXRhYmFzZS5kYXRhKTtcblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkgfHwgdGhpcy5yZW5kZXJlZERhdGEgPT09IG51bGwgKSB7XG4gICAgICAgICAgLy8gQcO6biBubyBzZSBoYW4gY2FyZ2FkbyBkYXRvc1xuICAgICAgICAgIHRoaXMucmVuZGVyZWREYXRhID0gW107XG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9XG5cblxuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGF0YU91dHNpZGVBbmd1bGFyKGRhdGEpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICAgLy8gIFNUUkVBTSAyOiBWaXJ0dWFsIHNjcm9sbCBzdHJlYW0gKHN5bmNocm9ub3VzIHdpdGggc2Nyb2xsIGV2ZW50cylcbiAgICAvLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgICBjb25zdCB2aXJ0dWFsU2Nyb2xsU3RyZWFtID0gdGhpcy50YWJsZS52aXJ0dWFsU2Nyb2xsVmlld3BvcnRcbiAgICAgID8gdGhpcy5fdmlydHVhbFBhZ2VDaGFuZ2UucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlZERhdGEgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZWREYXRhICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5yZW5kZXJlZERhdGEpICYmXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVkRGF0YS5sZW5ndGggPiAwO1xuICAgICAgICB9KSxcbiAgICAgICAgLy8gIFNUUkVBTSAyOiBWaXJ0dWFsIHNjcm9sbCBzdHJlYW0gKHN5bmNocm9ub3VzIHdpdGggc2Nyb2xsIGV2ZW50cylcbiAgICAgICAgc3dpdGNoTWFwKCh4OiBPblJhbmdlQ2hhbmdlVmlydHVhbFNjcm9sbCkgPT4ge1xuICAgICAgICAgIHJldHVybiBvZih0aGlzLmdldFZpcnR1YWxTY3JvbGxEYXRhKHRoaXMucmVuZGVyZWREYXRhLCB4KSk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICA6IEVNUFRZOy8vIE5vIHZpcnR1YWwgc2Nyb2xsIOKGkiBubyBzdHJlYW1cblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gQ09NQklORSBib3RoIHN0cmVhbXMgaW50byBvbmUgdW5pZmllZCBvdXRwdXRcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIHJldHVybiBtZXJnZShtYWluRGF0YVN0cmVhbSwgdmlydHVhbFNjcm9sbFN0cmVhbSk7XG4gIH1cbiAgLyoqXG4gKiBQcm9jZXNzZXMgaGVhdnkgZGF0YSBvcGVyYXRpb25zIG91dHNpZGUgQW5ndWxhciBab25lIHRvIGF2b2lkIGJsb2NraW5nIFVJLlxuICogV3JhcHMgb3BlcmF0aW9ucyBpbiBzZXRUaW1lb3V0KDApIHRvIGFsbG93IGJyb3dzZXIgcmVuZGVyaW5nIGJlZm9yZSBwcm9jZXNzaW5nLlxuICovXG4gIHByaXZhdGUgcHJvY2Vzc0RhdGFPdXRzaWRlQW5ndWxhcihkYXRhKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxhbnlbXT4ob2JzZXJ2ZXIgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAvLyBzZXRUaW1lb3V0KDApIGFsbG93cyB0aGUgYnJvd3NlciB0byBwYWludCBza2VsZXRvbi9sb2FkaW5nIHN0YXRlXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGRhdGEgPSB0aGlzLmV4ZWN1dGVEYXRhUHJvY2Vzc2luZyhkYXRhLCBvYnNlcnZlcik7XG4gICAgICAgIH0sIDApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAqIENFTlRSQUxJWkVEIFNUQVRFIFVQREFURVxuICogVXBkYXRlcyBhbGwgdGFibGUgc3RhdGUgcHJvcGVydGllcyBpbiBvbmUgcGxhY2UuXG4gKiBQcmV2ZW50cyBzY2F0dGVyZWQgbW9kaWZpY2F0aW9ucyB0aHJvdWdob3V0IHRoZSBjb2RlLlxuICovXG4gIHByaXZhdGUgdXBkYXRlVGFibGVTdGF0ZShyZW5kZXJlZERhdGE6IGFueVtdLCByZXN1bHRzTGVuZ3RoOiBudW1iZXIsIGFnZ3JlZ2F0ZURhdGE6IGFueSA9IHt9KTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlZERhdGEgPSByZW5kZXJlZERhdGE7XG4gICAgdGhpcy5yZXN1bHRzTGVuZ3RoID0gcmVzdWx0c0xlbmd0aDtcbiAgICB0aGlzLmFnZ3JlZ2F0ZURhdGEgPSBhZ2dyZWdhdGVEYXRhO1xuICB9XG5cbiAgLyoqXG4gKiBFeGVjdXRlcyB0aGUgYWN0dWFsIGRhdGEgcHJvY2Vzc2luZyBwaXBlbGluZS5cbiAqIEhhbmRsZXM6IGNhbGN1bGF0ZWQgY29sdW1ucywgZmlsdGVyaW5nLCBzb3J0aW5nLCBwYWdpbmF0aW9uLCBncm91cGluZywgYWdncmVnYXRlcy5cbiAqIENhdGNoZXMgZXJyb3JzIGFuZCByZXR1cm5zIHRvIEFuZ3VsYXIgWm9uZSBmb3IgVUkgdXBkYXRlcy5cbiAqL1xuICBwcml2YXRlIGV4ZWN1dGVEYXRhUHJvY2Vzc2luZyhkYXRhOiBhbnksIG9ic2VydmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmV4aXN0c0FueUNhbGN1bGF0ZWRDb2x1bW4oKSkge1xuICAgICAgICBkYXRhID0gdGhpcy5nZXRDb2x1bW5DYWxjdWxhdGVkRGF0YShkYXRhKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLnRhYmxlLnBhZ2VhYmxlKSB7XG4gICAgICAgIGRhdGEgPSB0aGlzLmdldENvbHVtblZhbHVlRmlsdGVyRGF0YShkYXRhKTtcbiAgICAgICAgZGF0YSA9IHRoaXMuZ2V0UXVpY2tGaWx0ZXJEYXRhKGRhdGEpO1xuICAgICAgICBkYXRhID0gdGhpcy5nZXRTb3J0ZWREYXRhKGRhdGEpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IE9iamVjdC5hc3NpZ24oW10sIGRhdGEpO1xuXG4gICAgICBsZXQgcmVzdWx0c0xlbmd0aDogbnVtYmVyO1xuICAgICAgaWYgKHRoaXMudGFibGUucGFnZWFibGUpIHtcbiAgICAgICAgY29uc3QgdG90YWxSZWNvcmRzTnVtYmVyID0gdGhpcy50YWJsZS5nZXRUb3RhbFJlY29yZHNOdW1iZXIoKTtcbiAgICAgICAgcmVzdWx0c0xlbmd0aCA9IHRvdGFsUmVjb3Jkc051bWJlciA/PyBkYXRhLmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdHNMZW5ndGggPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgZGF0YSA9IHRoaXMuZ2V0UGFnaW5hdGlvbkRhdGEoZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnRhYmxlLmdyb3VwYWJsZSAmJiAhVXRpbC5pc0FycmF5RW1wdHkodGhpcy50YWJsZS5ncm91cGVkQ29sdW1uc0FycmF5KSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZGF0YSA9IHRoaXMuZ2V0R3JvdXBlZERhdGEoZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbmRlcmVkRGF0YSA9IGRhdGE7XG5cbiAgICAgIGlmICh0aGlzLnRhYmxlLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCAmJiAhdGhpcy5fcGFnaW5hdG9yKSB7XG4gICAgICAgIGRhdGEgPSB0aGlzLmdldFZpcnR1YWxTY3JvbGxEYXRhKGRhdGEsIG5ldyBPblJhbmdlQ2hhbmdlVmlydHVhbFNjcm9sbCh7IHN0YXJ0OiAwLCBlbmQ6IENvZGVzLkxJTUlUX1NDUk9MTFZJUlRVQUwgfSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhZ2dyZWdhdGVEYXRhID0gdGhpcy5nZXRBZ2dyZWdhdGVzRGF0YShyZW5kZXJlZERhdGEpO1xuXG4gICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAvLyAgUmUtZW50ZXIgQW5ndWxhciBab25lIHRvIHVwZGF0ZSBVSVxuICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVUYWJsZVN0YXRlKHJlbmRlcmVkRGF0YSwgcmVzdWx0c0xlbmd0aCwgYWdncmVnYXRlRGF0YSk7XG4gICAgICAgIHRoaXMudGFibGUubG9hZGluZ1NlcnZpY2Uuc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgIHRoaXMudGFibGUuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIG9ic2VydmVyLm5leHQoZGF0YSk7XG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9KTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCfinYwgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBkYXRhOicsIGVycm9yKTtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMudGFibGUubG9hZGluZ1NlcnZpY2Uuc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgIHRoaXMudGFibGUuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGdldEdyb3VwZWREYXRhKGRhdGE6IGFueVtdKSB7XG4gICAgZGF0YSA9IHRoaXMuZ2V0U3ViR3JvdXBzT2ZHcm91cGVkUm93KGRhdGEpO1xuICAgIC8qKiBkYXRhIGNvbnRhaW5zIHJvdyBncm91cCBoZWFkZXJzIChPVGFibGVHcm91cGVkUm93KSBhbmQgdGhlIGRhdGEgYmVsb25naW5nIHRvIGV4cGFuZGVkIGdyb3VwZWQgcm93cyAqL1xuICAgIGRhdGEgPSB0aGlzLmZpbHRlckNvbGxhcHNlZFJvd0dyb3VwKGRhdGEpO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgc3ViZ3JvdXBzIG9mIGdyb3VwZWQgcm93XG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEByZXR1cm5zIHN1Ymdyb3VwcyBvZiBncm91cGVkIHJvd1xuICAgKi9cbiAgZ2V0U3ViR3JvdXBzT2ZHcm91cGVkUm93KGRhdGE6IGFueVtdKTogYW55W10ge1xuICAgIHJldHVybiBkYXRhID0gdGhpcy5nZXRTdWJsZXZlbChkYXRhLCAwKTtcbiAgfVxuXG4gIGdldEFnZ3JlZ2F0ZXNEYXRhKGRhdGE6IGFueVtdKTogYW55IHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIGlmICh0aGlzLl90YWJsZU9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICB0aGlzLl90YWJsZU9wdGlvbnMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IE9Db2x1bW4pID0+IHtcblxuICAgICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgJiYgY29sdW1uLnZpc2libGUpIHtcbiAgICAgICAgY29uc3QgdmFsdWVPclByb21pc2UgPSB0aGlzLmNhbGN1bGF0ZUFnZ3JlZ2F0ZShkYXRhLCBjb2x1bW4uYXR0ciwgY29sdW1uLmFnZ3JlZ2F0ZS5vcGVyYXRvcik7XG5cbiAgICAgICAgaWYgKHZhbHVlT3JQcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgIHZhbHVlT3JQcm9taXNlXG4gICAgICAgICAgICAudGhlbihyZXNvbHZlZFZhbHVlID0+IHtcbiAgICAgICAgICAgICAgb2JqW2NvbHVtbi5hdHRyXSA9IHJlc29sdmVkVmFsdWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiBjb25zb2xlLmVycm9yKGBvLXRhYmxlLWNvbHVtbi1hZ2dyZWdhdGU6IEFzeW5jIGFnZ3JlZ2F0ZSBlcnJvciBpbiBjb2x1bW4gXCIke2NvbHVtbi5hdHRyfVwiIHVzaW5nIGFnZ3JlZ2F0ZSBmdW5jdGlvbiBcIiR7Y29sdW1uLmFnZ3JlZ2F0ZS5vcGVyYXRvcn1cIjpgLCBlcnIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvYmpbY29sdW1uLmF0dHJdID0gdmFsdWVPclByb21pc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdGhhdCBnZXQgdmFsdWUgdGhlIGNvbHVtbnMgY2FsY3VsYXRlZFxuICAgKiBAcGFyYW0gZGF0YSBkYXRhIG9mIHRoZSBkYXRhYmFzZVxuICAgKi9cbiAgZ2V0Q29sdW1uQ2FsY3VsYXRlZERhdGEoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgY2FsY3VsYXRlZENvbHMgPSB0aGlzLl90YWJsZU9wdGlvbnMuY29sdW1ucy5maWx0ZXIoKG9Db2w6IE9Db2x1bW4pID0+IG9Db2wudmlzaWJsZSAmJiBvQ29sLmNhbGN1bGF0ZSAhPT0gdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gZGF0YS5tYXAoKHJvdzogYW55KSA9PiB7XG4gICAgICBjYWxjdWxhdGVkQ29scy5mb3JFYWNoKChvQ29sdW1uOiBPQ29sdW1uKSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBvQ29sdW1uLmNhbGN1bGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB2YWx1ZSA9IHNlbGYudHJhbnNmb3JtRm9ybXVsYShvQ29sdW1uLmNhbGN1bGF0ZSwgcm93KTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb0NvbHVtbi5jYWxjdWxhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YWx1ZSA9IG9Db2x1bW4uY2FsY3VsYXRlKHJvdyk7XG4gICAgICAgIH1cbiAgICAgICAgcm93W29Db2x1bW4uYXR0cl0gPSBpc05hTih2YWx1ZSkgPyAwIDogdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByb3c7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhbnNmb3JtRm9ybXVsYShmb3JtdWxhQXJnLCByb3cpOiBzdHJpbmcge1xuICAgIGxldCBmb3JtdWxhID0gZm9ybXVsYUFyZztcbiAgICAvLyAxLiByZXBsYWNlIGNvbHVtbnMgYnkgdmFsdWVzIG9mIHJvd1xuICAgIGNvbnN0IGNvbHVtbnNBdHRyID0gdGhpcy5fdGFibGVPcHRpb25zLmNvbHVtbnMubWFwKChvQ29sOiBPQ29sdW1uKSA9PiBvQ29sLmF0dHIpO1xuICAgIGNvbHVtbnNBdHRyLmZvckVhY2goKGNvbHVtbjogc3RyaW5nKSA9PiB7XG4gICAgICBmb3JtdWxhID0gZm9ybXVsYS5yZXBsYWNlKGNvbHVtbiwgcm93W2NvbHVtbl0pO1xuICAgIH0pO1xuXG4gICAgbGV0IHJlc3VsdEZvcm11bGEgPSAnJztcbiAgICAvLyAyLiBUcmFuc2Zvcm0gZm9ybXVsYVxuICAgIHRyeSB7XG4gICAgICByZXN1bHRGb3JtdWxhID0gKG5ldyBGdW5jdGlvbigncmV0dXJuICcgKyBmb3JtdWxhKSkoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdPcGVyYXRpb24gZGVmaW5lZCBpbiB0aGUgY2FsY3VsYXRlZCBjb2x1bW4gaXMgaW5jb3JyZWN0ICcpO1xuICAgIH1cbiAgICAvLyAzLiBSZXR1cm4gcmVzdWx0XG4gICAgcmV0dXJuIHJlc3VsdEZvcm11bGE7XG4gIH1cblxuICBnZXRRdWlja0ZpbHRlckRhdGEoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMucXVpY2tGaWx0ZXIpICYmIHRoaXMucXVpY2tGaWx0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlsdGVyRGF0YSA9ICF0aGlzLl90YWJsZU9wdGlvbnMuZmlsdGVyQ2FzZVNlbnNpdGl2ZSA/IHRoaXMucXVpY2tGaWx0ZXIudG9Mb3dlckNhc2UoKSA6IHRoaXMucXVpY2tGaWx0ZXI7XG4gICAgICByZXR1cm4gZGF0YS5maWx0ZXIoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAvLyBHZXR0aW5nIGN1c3RvbSBjb2x1bW5zIGZpbHRlciBjb2x1bW5zIHJlc3VsdFxuICAgICAgICBjb25zdCBwYXNzQ3VzdG9tRmlsdGVyID0gdGhpcy5mdWxmaWxsc0N1c3RvbUZpbHRlckZ1bmN0aW9ucyhmaWx0ZXJEYXRhLCBpdGVtKTtcbiAgICAgICAgLy8gR2V0dGluZyBvdGhlciBzZWFyY2hhYmxlIGNvbHVtbnMgc3RhbmRhcmQgcmVzdWx0XG4gICAgICAgIGNvbnN0IHBhc3NTZWFyY2hTdHJpbmcgPSB0aGlzLmZ1bGZpbGxzUXVpY2tmaWx0ZXIoZmlsdGVyRGF0YSwgaXRlbSk7XG4gICAgICAgIHJldHVybiBwYXNzQ3VzdG9tRmlsdGVyIHx8IHBhc3NTZWFyY2hTdHJpbmc7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICB9XG5cbiAgZ2V0UGFnaW5hdGlvbkRhdGEoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCF0aGlzLl9wYWdpbmF0b3IgfHwgaXNOYU4odGhpcy5fcGFnaW5hdG9yLnBhZ2VTaXplKSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGxldCBzdGFydEluZGV4ID0gaXNOYU4odGhpcy5fcGFnaW5hdG9yLnBhZ2VTaXplKSA/IDAgOiB0aGlzLl9wYWdpbmF0b3IucGFnZUluZGV4ICogdGhpcy5fcGFnaW5hdG9yLnBhZ2VTaXplO1xuICAgIGlmIChkYXRhLmxlbmd0aCA+IDAgJiYgZGF0YS5sZW5ndGggPCBzdGFydEluZGV4KSB7XG4gICAgICBzdGFydEluZGV4ID0gMDtcbiAgICAgIHRoaXMuX3BhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YS5zcGxpY2Uoc3RhcnRJbmRleCwgdGhpcy5fcGFnaW5hdG9yLnBhZ2VTaXplKTtcbiAgfVxuXG4gIGdldFZpcnR1YWxTY3JvbGxEYXRhKGRhdGE6IGFueVtdLCB4OiBPblJhbmdlQ2hhbmdlVmlydHVhbFNjcm9sbCk6IGFueVtdIHtcbiAgICByZXR1cm4gZGF0YS5zbGljZSh4LnJhbmdlLnN0YXJ0LCB4LnJhbmdlLmVuZClcbiAgfVxuXG4gIGRpc2Nvbm5lY3QoKSB7XG4gICAgdGhpcy5kYXRhVG90YWxzQ2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fcXVpY2tGaWx0ZXJDaGFuZ2UuY29tcGxldGUoKTtcbiAgICB0aGlzLl9jb2x1bW5WYWx1ZUZpbHRlckNoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZ3JvdXBCeUNvbHVtbkNoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3ZpcnR1YWxQYWdlQ2hhbmdlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZnVsZmlsbHNDdXN0b21GaWx0ZXJGdW5jdGlvbnMoZmlsdGVyOiBzdHJpbmcsIGl0ZW06IGFueSkge1xuICAgIGNvbnN0IGN1c3RvbUZpbHRlckNvbHMgPSB0aGlzLnRhYmxlLm9UYWJsZU9wdGlvbnMuY29sdW1ucy5maWx0ZXIob0NvbCA9PiBvQ29sLnVzZUN1c3RvbUZpbHRlckZ1bmN0aW9uKCkpO1xuICAgIHJldHVybiBjdXN0b21GaWx0ZXJDb2xzLnNvbWUob0NvbCA9PiBvQ29sLnJlbmRlcmVyLmZpbHRlckZ1bmN0aW9uKGl0ZW1bb0NvbC5hdHRyXSwgaXRlbSwgZmlsdGVyKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZnVsZmlsbHNRdWlja2ZpbHRlcihmaWx0ZXI6IHN0cmluZywgaXRlbTogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuX3RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbHRlcigob0NvbDogT0NvbHVtbikgPT4gb0NvbC51c2VRdWlja2ZpbHRlckZ1bmN0aW9uKCkpO1xuICAgIGxldCBzZWFyY2hTdHIgPSBjb2x1bW5zLm1hcCgob0NvbDogT0NvbHVtbikgPT4gb0NvbC5nZXRGaWx0ZXJWYWx1ZShpdGVtW29Db2wuYXR0cl0sIGl0ZW0pLmpvaW4oJyAnKSkuam9pbignICcpO1xuICAgIGlmICghdGhpcy5fdGFibGVPcHRpb25zLmZpbHRlckNhc2VTZW5zaXRpdmUpIHtcbiAgICAgIHNlYXJjaFN0ciA9IHNlYXJjaFN0ci50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc2VhcmNoU3RyLmluZGV4T2YoZmlsdGVyKSAhPT0gLTE7XG4gIH1cblxuICAvKiogUmV0dXJucyBhIHNvcnRlZCBjb3B5IG9mIHRoZSBkYXRhYmFzZSBkYXRhLiAqL1xuICBwcm90ZWN0ZWQgZ2V0U29ydGVkRGF0YShkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoIXRoaXMuX3NvcnQpIHJldHVybiBkYXRhO1xuICAgIGNvbnN0IHJlbmRlcmVyRGF0YSA9IHRoaXMuZ2V0RGF0YVRvU29ydChkYXRhKTtcbiAgICBjb25zdCBzb3J0ZWREYXRhID0gdGhpcy5fc29ydC5nZXRTb3J0ZWREYXRhKHJlbmRlcmVyRGF0YSk7XG5cbiAgICBjb25zdCB0YWJsZUtleXMgPSB0aGlzLnRhYmxlLmdldEtleXMoKTtcbiAgICBjb25zdCBvcmlnaW5hbERhdGFTb3J0ZWQgPSBbXTtcblxuICAgIHNvcnRlZERhdGEuZm9yRWFjaChzb3J0ZWRFbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IGtleXNWYWx1ZXNJblNvcnREYXRhID0gdGFibGVLZXlzLm1hcChlbGVtZW50ID0+IHNvcnRlZEVsZW1lbnRbZWxlbWVudF0pO1xuXG4gICAgICBsZXQgaSA9IDA7XG4gICAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAgIHdoaWxlIChpIDwgZGF0YS5sZW5ndGggJiYgIWZvdW5kKSB7XG4gICAgICAgIGNvbnN0IGtleXNWYWx1ZXNJbkRhdGEgPSB0YWJsZUtleXMubWFwKGVsZW1lbnQgPT4gZGF0YVtpXVtlbGVtZW50XSk7XG4gICAgICAgIGlmIChVdGlsLmlzQXJyYXlFcXVhbChrZXlzVmFsdWVzSW5Tb3J0RGF0YSwga2V5c1ZhbHVlc0luRGF0YSkpIHtcbiAgICAgICAgICBvcmlnaW5hbERhdGFTb3J0ZWQucHVzaChkYXRhW2ldKTtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBvcmlnaW5hbERhdGFTb3J0ZWQ7XG5cbiAgfVxuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRhdGEgdGhlIHRhYmxlIHN0b3Jlcy4gTm8gZmlsdGVycyBhcmUgYXBwbGllZC5cbiAgICovXG4gIGdldFRhYmxlRGF0YSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFiYXNlLmRhdGE7XG4gIH1cblxuICAvKiogUmV0dXJuIGRhdGEgb2YgdGhlIHZpc2libGUgY29sdW1ucyBvZiB0aGUgdGFibGUgd2l0aG91dCByZW5kZXJpbmcgKi9cbiAgZ2V0Q3VycmVudERhdGEoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLmdldERhdGEoKTtcbiAgfVxuXG4gIGdldEN1cnJlbnRBbGxEYXRhKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGxEYXRhKGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICAvKiogUmV0dXJuIGRhdGEgb2YgdGhlIHZpc2libGUgY29sdW1ucyBvZiB0aGUgdGFibGUgIHJlbmRlcmluZyAqL1xuICBnZXRDdXJyZW50UmVuZGVyZXJEYXRhKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJlZERhdGEodGhpcy5yZW5kZXJlZERhdGEpO1xuICB9XG5cbiAgLyoqIFJldHVybiBhbGwgZGF0YSBvZiB0aGUgdGFibGUgcmVuZGVyaW5nICovXG4gIGdldEFsbFJlbmRlcmVyRGF0YSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsRGF0YSh0cnVlLCB0cnVlKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm4gc3FsIHR5cGVzIG9mIHRoZSBjdXJyZW50IGRhdGEgKi9cbiAgZ2V0IHNxbFR5cGVzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFiYXNlLnNxbFR5cGVzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldERhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyZWREYXRhO1xuICB9XG5cbiAgcHVibGljIGdldFJlbmRlcmVkRGF0YShkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMuX3RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbHRlcihvQ29sID0+IG9Db2wudmlzaWJsZSk7XG4gICAgcmV0dXJuIGRhdGEubWFwKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgdmlzaWJsZUNvbHVtbnMuZm9yRWFjaCgob0NvbDogT0NvbHVtbikgPT4ge1xuICAgICAgICBjb25zdCB1c2VSZW5kZXJlciA9IG9Db2wucmVuZGVyZXIgJiYgb0NvbC5yZW5kZXJlci5nZXRDZWxsRGF0YTtcbiAgICAgICAgb2JqW29Db2wuYXR0cl0gPSB1c2VSZW5kZXJlciA/IG9Db2wucmVuZGVyZXIuZ2V0Q2VsbERhdGEocm93W29Db2wuYXR0cl0sIHJvdykgOiByb3dbb0NvbC5hdHRyXTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0RGF0YVRvU29ydChkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoIXRoaXMuX3NvcnQpIHJldHVybiBkYXRhO1xuICAgIGNvbnN0IHNvcnRDb2x1bW5zID0gdGhpcy5fdGFibGVPcHRpb25zLmNvbHVtbnMuZmlsdGVyKG9Db2wgPT4gb0NvbC52aXNpYmxlICYmIHRoaXMuX3NvcnQuYWN0aXZlQXJyYXkubWFwKHggPT4geC5pZCkuaW5kZXhPZihvQ29sLmF0dHIpID4gLTEpO1xuICAgIGNvbnN0IGV4aXN0Q29sdW1uVG9UcmFzZm9ybVRvU29ydCA9IHNvcnRDb2x1bW5zLmZpbHRlcigob0NvbDogT0NvbHVtbikgPT4gKG9Db2wudHlwZSA9PT0gJ3RyYW5zbGF0ZScgfHwgb0NvbC50eXBlID09PSAnc2VydmljZScpKS5sZW5ndGggPiAwO1xuICAgIGlmICghZXhpc3RDb2x1bW5Ub1RyYXNmb3JtVG9Tb3J0KSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgdGhpcy50YWJsZS5nZXRLZXlzKCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgc29ydENvbHVtbnMucHVzaCh0aGlzLnRhYmxlLmdldE9Db2x1bW4oa2V5KSk7XG4gICAgfSlcblxuICAgIHJldHVybiBkYXRhLm1hcCgocm93KSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgIHNvcnRDb2x1bW5zLmZvckVhY2goKG9Db2w6IE9Db2x1bW4pID0+IHtcbiAgICAgICAgY29uc3QgdXNlUmVuZGVyZXIgPSBvQ29sLnJlbmRlcmVyICYmIChvQ29sLnR5cGUgPT09ICd0cmFuc2xhdGUnIHx8IG9Db2wudHlwZSA9PT0gJ3NlcnZpY2UnKSAmJiBvQ29sLnJlbmRlcmVyLmdldENlbGxEYXRhO1xuICAgICAgICBvYmpbb0NvbC5hdHRyXSA9IHVzZVJlbmRlcmVyID8gb0NvbC5yZW5kZXJlci5nZXRDZWxsRGF0YShyb3dbb0NvbC5hdHRyXSwgcm93KSA6IHJvd1tvQ29sLmF0dHJdO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEFsbERhdGEodXNpbmdSZW5kZXJlcmVycz86IGJvb2xlYW4sIG9ubHlWaXNpYmxlQ29sdW1ucz86IGJvb2xlYW4pIHtcbiAgICBsZXQgdGFibGVDb2x1bW5zID0gdGhpcy5fdGFibGVPcHRpb25zLmNvbHVtbnM7XG4gICAgaWYgKG9ubHlWaXNpYmxlQ29sdW1ucykge1xuICAgICAgdGFibGVDb2x1bW5zID0gdGhpcy5fdGFibGVPcHRpb25zLmNvbHVtbnMuZmlsdGVyKG9Db2wgPT4gb0NvbC52aXNpYmxlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWREYXRhLm1hcCgocm93KSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgIHRhYmxlQ29sdW1ucy5mb3JFYWNoKChvQ29sOiBPQ29sdW1uKSA9PiB7XG4gICAgICAgIGNvbnN0IHVzZVJlbmRlcmVyID0gdXNpbmdSZW5kZXJlcmVycyAmJiBvQ29sLnJlbmRlcmVyICYmIG9Db2wucmVuZGVyZXIuZ2V0Q2VsbERhdGE7XG4gICAgICAgIG9ialtvQ29sLmF0dHJdID0gdXNlUmVuZGVyZXIgPyBvQ29sLnJlbmRlcmVyLmdldENlbGxEYXRhKHJvd1tvQ29sLmF0dHJdLCByb3cpIDogcm93W29Db2wuYXR0cl07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFJlbmRlcmVyc0RhdGEoZGF0YTogYW55W10sIHRhYmxlQ29sdW1uczogT0NvbHVtbltdKTogYW55W10ge1xuICAgIHJldHVybiBkYXRhLm1hcCgocm93KSA9PiB7XG4gICAgICAvLyByZW5kZXIgZWFjaCBjb2x1bW5cbiAgICAgIGNvbnN0IG9iaiA9IE9iamVjdC5hc3NpZ24oe30sIHJvdyk7XG4gICAgICB0YWJsZUNvbHVtbnMuZm9yRWFjaCgob0NvbDogT0NvbHVtbikgPT4ge1xuICAgICAgICBvYmpbb0NvbC5hdHRyXSA9IG9Db2wucmVuZGVyZXIuZ2V0Q2VsbERhdGEocm93W29Db2wuYXR0cl0sIHJvdyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29sdW1uRGF0YShvY29sdW1uOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJlZERhdGEubWFwKChyb3cpID0+IHtcbiAgICAgIC8vIHJlbmRlciBlYWNoIGNvbHVtblxuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICBpZiAob2NvbHVtbikge1xuICAgICAgICBvYmpbb2NvbHVtbl0gPSByb3dbb2NvbHVtbl07XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xuICB9XG5cbiAgaW5pdGlhbGl6ZUNvbHVtbnNGaWx0ZXJzKGZpbHRlcnM6IE9Db2x1bW5WYWx1ZUZpbHRlcltdKSB7XG4gICAgdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMgPSBbXTtcbiAgICBmaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICB9KTtcbiAgICBpZiAoIXRoaXMudGFibGUucGFnZWFibGUgJiYgdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fY29sdW1uVmFsdWVGaWx0ZXJDaGFuZ2UubmV4dCh0aGlzLmNvbHVtblZhbHVlRmlsdGVycyk7XG4gICAgfVxuICB9XG5cbiAgaXNDb2x1bW5WYWx1ZUZpbHRlckFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMubGVuZ3RoICE9PSAwO1xuICB9XG5cbiAgZ2V0Q29sdW1uVmFsdWVGaWx0ZXJzKCk6IE9Db2x1bW5WYWx1ZUZpbHRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnM7XG4gIH1cblxuICBnZXRDb2x1bW5WYWx1ZUZpbHRlckJ5QXR0cihhdHRyOiBzdHJpbmcpOiBPQ29sdW1uVmFsdWVGaWx0ZXIge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblZhbHVlRmlsdGVycy5maW5kKGl0ZW0gPT4gaXRlbS5hdHRyID09PSBhdHRyKTtcbiAgfVxuXG4gIGNsZWFyQ29sdW1uRmlsdGVycyh0cmlnZ2VyOiBib29sZWFuID0gdHJ1ZSwgY29sdW1uc0F0dHI/OiBzdHJpbmdbXSkge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb2x1bW5zQXR0cikpIHtcbiAgICAgIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzID0gdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMuZmlsdGVyKHggPT4gIWNvbHVtbnNBdHRyLmluY2x1ZGVzKHguYXR0cikpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbHVtblZhbHVlRmlsdGVycyA9IFtdO1xuICAgIH1cbiAgICBpZiAodHJpZ2dlcikge1xuICAgICAgdGhpcy5fY29sdW1uVmFsdWVGaWx0ZXJDaGFuZ2UubmV4dCh0aGlzLmNvbHVtblZhbHVlRmlsdGVycyk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJDb2x1bW5GaWx0ZXIoYXR0cjogc3RyaW5nLCB0cmlnZ2VyOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzID0gdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMuZmlsdGVyKHggPT4geC5hdHRyICE9PSBhdHRyKTtcbiAgICBpZiAodHJpZ2dlcikge1xuICAgICAgdGhpcy5fY29sdW1uVmFsdWVGaWx0ZXJDaGFuZ2UubmV4dCh0aGlzLmNvbHVtblZhbHVlRmlsdGVycyk7XG4gICAgfVxuICB9XG5cbiAgYWRkQ29sdW1uRmlsdGVyKGZpbHRlcjogT0NvbHVtblZhbHVlRmlsdGVyKSB7XG4gICAgY29uc3QgZXhpc3RpbmdGaWx0ZXJJbmRleCA9IHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uYXR0ciA9PT0gZmlsdGVyLmF0dHIpO1xuICAgIGlmIChleGlzdGluZ0ZpbHRlckluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzLnNwbGljZShleGlzdGluZ0ZpbHRlckluZGV4LCAxLCBmaWx0ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdmFsaWRGaWx0ZXIgPSBVdGlsLmlzRGVmaW5lZChmaWx0ZXIudmFsdWVzKTtcbiAgICAgIGlmICh2YWxpZEZpbHRlcikge1xuICAgICAgICBzd2l0Y2ggKGZpbHRlci5vcGVyYXRvcikge1xuICAgICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5JTjpcbiAgICAgICAgICAgIHZhbGlkRmlsdGVyID0gZmlsdGVyLnZhbHVlcy5sZW5ndGggPiAwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkJFVFdFRU46XG4gICAgICAgICAgICB2YWxpZEZpbHRlciA9IGZpbHRlci52YWx1ZXMubGVuZ3RoID09PSAyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkVRVUFMOlxuICAgICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5MRVNTX0VRVUFMOlxuICAgICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5NT1JFX0VRVUFMOlxuICAgICAgICAgICAgdmFsaWRGaWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhbGlkRmlsdGVyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbGlkRmlsdGVyKSB7XG4gICAgICAgICAgdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIElmIHRoZSB0YWJsZSBpcyBwYWdpbmF0ZWQsIGZpbHRlciB3aWxsIGJlIGFwcGxpZWQgb24gcmVtb3RlIHF1ZXJ5XG4gICAgaWYgKCF0aGlzLnRhYmxlLnBhZ2VhYmxlKSB7XG4gICAgICB0aGlzLl9jb2x1bW5WYWx1ZUZpbHRlckNoYW5nZS5uZXh0KHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb2x1bW5WYWx1ZUZpbHRlckRhdGEoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgY29uc3QgZmlsdGVyQ29sdW1uID0gdGhpcy50YWJsZS5vVGFibGVPcHRpb25zLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLmF0dHIgPT09IGZpbHRlci5hdHRyKTtcbiAgICAgIGlmIChmaWx0ZXJDb2x1bW4pIHtcbiAgICAgICAgc3dpdGNoIChmaWx0ZXIub3BlcmF0b3IpIHtcbiAgICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuSU46XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZXMgPSAoZmlsdGVyLnZhbHVlcyB8fCBbXSkucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT5cbiAgICAgICAgICAgICAgcHJldmlvdXMuY29uY2F0KGZpbHRlckNvbHVtbi5nZXRGaWx0ZXJWYWx1ZShjdXJyZW50KS5tYXAoZiA9PiBVdGlsLm5vcm1hbGl6ZVN0cmluZyhmKSkpLCBbXSk7XG5cbiAgICAgICAgICAgIGRhdGEgPSBkYXRhLmZpbHRlcigoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChmaWx0ZXJDb2x1bW4ucmVuZGVyZXIgJiYgZmlsdGVyQ29sdW1uLnJlbmRlcmVyLmZpbHRlckZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlckNvbHVtbi5yZW5kZXJlci5maWx0ZXJGdW5jdGlvbihpdGVtW2ZpbHRlci5hdHRyXSwgaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sVmFsdWVzID0gZmlsdGVyQ29sdW1uLmdldEZpbHRlclZhbHVlKGl0ZW1bZmlsdGVyLmF0dHJdLCBpdGVtKS5tYXAoZiA9PiBVdGlsLm5vcm1hbGl6ZVN0cmluZyhmKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlclZhbHVlcy5zb21lKHZhbHVlID0+IGNvbFZhbHVlcy5pbmRleE9mKHZhbHVlKSAhPT0gLTEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5FUVVBTDpcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IFV0aWwubm9ybWFsaXplU3RyaW5nKGZpbHRlci52YWx1ZXMpO1xuICAgICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb2xWYWx1ZXMgPSBmaWx0ZXJDb2x1bW4uZ2V0RmlsdGVyVmFsdWUoaXRlbVtmaWx0ZXIuYXR0cl0sIGl0ZW0pLm1hcChmID0+IFV0aWwubm9ybWFsaXplU3RyaW5nKGYpKTtcbiAgICAgICAgICAgICAgbGV0IHJlZ0V4cDtcbiAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRWYWx1ZS5pbmNsdWRlcygnKicpKSB7XG4gICAgICAgICAgICAgICAgcmVnRXhwID0gbmV3IFJlZ0V4cCgnXicgKyBub3JtYWxpemVkVmFsdWUuc3BsaXQoJyonKS5qb2luKCcuKicpICsgJyQnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gY29sVmFsdWVzLnNvbWUoY29sVmFsdWUgPT4gcmVnRXhwID8gcmVnRXhwLnRlc3QoY29sVmFsdWUpIDogY29sVmFsdWUudG9TdHJpbmcoKS5pbmNsdWRlcyhub3JtYWxpemVkVmFsdWUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkJFVFdFRU46XG4gICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtW2ZpbHRlci5hdHRyXSA+PSBmaWx0ZXIudmFsdWVzWzBdICYmIGl0ZW1bZmlsdGVyLmF0dHJdIDw9IGZpbHRlci52YWx1ZXNbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLk1PUkVfRVFVQUw6XG4gICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtW2ZpbHRlci5hdHRyXSA+PSBmaWx0ZXIudmFsdWVzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5MRVNTX0VRVUFMOlxuICAgICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKGl0ZW0gPT4gaXRlbVtmaWx0ZXIuYXR0cl0gPD0gZmlsdGVyLnZhbHVlcyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgZ2V0QWdncmVnYXRlRGF0YShjb2x1bW46IE9Db2x1bW4pIHtcbiAgICBjb25zdCBvYmogPSB7fTtcbiAgICBsZXQgdG90YWxWYWx1ZSA9ICcnO1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLl90YWJsZU9wdGlvbnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gbmV3IEFycmF5KG9iaik7XG4gICAgfVxuICAgIHRvdGFsVmFsdWUgPSB0aGlzLmFnZ3JlZ2F0ZURhdGFbY29sdW1uLmF0dHJdO1xuICAgIHJldHVybiB0b3RhbFZhbHVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbGN1bGF0ZUFnZ3JlZ2F0ZShkYXRhOiBhbnlbXSwgY29sdW1uQXR0cjogc3RyaW5nLCBvcGVyYXRvcjogc3RyaW5nIHwgQWdncmVnYXRlRnVuY3Rpb24pOiBudW1iZXIgfCBQcm9taXNlPG51bWJlcj4ge1xuICAgIGxldCByZXN1bHRBZ2dyZWdhdGU7XG4gICAgaWYgKHR5cGVvZiBvcGVyYXRvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHN3aXRjaCAob3BlcmF0b3IudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICdjb3VudCc6XG4gICAgICAgICAgcmVzdWx0QWdncmVnYXRlID0gdGhpcy5jb3VudChjb2x1bW5BdHRyLCBkYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbWluJzpcbiAgICAgICAgICByZXN1bHRBZ2dyZWdhdGUgPSB0aGlzLm1pbihjb2x1bW5BdHRyLCBkYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbWF4JzpcbiAgICAgICAgICByZXN1bHRBZ2dyZWdhdGUgPSB0aGlzLm1heChjb2x1bW5BdHRyLCBkYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYXZnJzpcbiAgICAgICAgICByZXN1bHRBZ2dyZWdhdGUgPSB0aGlzLmF2Zyhjb2x1bW5BdHRyLCBkYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXN1bHRBZ2dyZWdhdGUgPSB0aGlzLnN1bShjb2x1bW5BdHRyLCBkYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29sdW1uRGF0YTogYW55W10gPSB0aGlzLmdldENvbHVtbkRhdGEoY29sdW1uQXR0cik7XG4gICAgICBpZiAodHlwZW9mIG9wZXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlc3VsdEFnZ3JlZ2F0ZSA9IG9wZXJhdG9yKGNvbHVtbkRhdGEsIGNvbHVtbkF0dHIsIHRoaXMudGFibGUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0QWdncmVnYXRlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN1bShjb2x1bW4sIGRhdGEpOiBudW1iZXIge1xuICAgIGxldCB2YWx1ZSA9IDA7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIC8vSWYgdGhlIGRhdGEgaXMgZ3JvdXBlZCwgdGhlIHZhbHVlcyDigIvigItvZiB0aGUgc3ViZ3JvdXBzIGluIGxldmVsIDEgYXJlIHN1bW1lZFxuICAgICAgaWYgKGRhdGFbMF0gaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93KSB7XG4gICAgICAgIHRoaXMuZ2V0RGF0YUZyb21GaXJzdExldmVsVGFibGVHcm91cFJvdyhkYXRhKS5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgIHZhbHVlID0geC5nZXRDb2x1bW5BZ2dyZWdhdGVEYXRhKGNvbHVtbikucmVkdWNlKChhY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhY3VtdWxhdG9yICsgKGlzTmFOKGN1cnJlbnRWYWx1ZVtjb2x1bW5dKSA/IDAgOiBjdXJyZW50VmFsdWVbY29sdW1uXSk7XG4gICAgICAgICAgfSwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gZGF0YS5yZWR1Y2UoKGFjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgPT4ge1xuICAgICAgICAgIHJldHVybiBhY3VtdWxhdG9yICsgKGlzTmFOKGN1cnJlbnRWYWx1ZVtjb2x1bW5dKSA/IDAgOiBjdXJyZW50VmFsdWVbY29sdW1uXSk7XG4gICAgICAgIH0sIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICsodmFsdWUpLnRvRml4ZWQoMik7XG4gIH1cblxuICBwcm90ZWN0ZWQgY291bnQoY29sdW1uLCBkYXRhKTogbnVtYmVyIHtcbiAgICBsZXQgdmFsdWUgPSAwO1xuICAgIGlmIChkYXRhKSB7XG4gICAgICAvL0lmIHRoZSBkYXRhIGlzIGdyb3VwZWQsIHRoZSBjb3VudCBpcyBjYWxjdWxhdGVkIGJ5IGFkZGluZyB0aGUgY291bnRzIGZvciBlYWNoIHN1Ymdyb3VwIGluIGxldmVsIDFcbiAgICAgIGlmIChkYXRhWzBdIGluc3RhbmNlb2YgT1RhYmxlR3JvdXBlZFJvdykge1xuICAgICAgICB0aGlzLmdldERhdGFGcm9tRmlyc3RMZXZlbFRhYmxlR3JvdXBSb3coZGF0YSkuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICB2YWx1ZSA9IHguZ2V0Q29sdW1uQWdncmVnYXRlRGF0YShjb2x1bW4pLnJlZHVjZSgoYWN1bXVsYXRvcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFjdW11bGF0b3IgKyAxO1xuICAgICAgICAgIH0sIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IGRhdGEucmVkdWNlKChhY3VtdWxhdG9yKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFjdW11bGF0b3IgKyAxO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGF2Zyhjb2x1bW4sIGRhdGEpOiBudW1iZXIge1xuICAgIGNvbnN0IHRvdGFsU3VtID0gdGhpcy5zdW0oY29sdW1uLCBkYXRhKTtcbiAgICBjb25zdCB0b3RhbENvdW50ID0gdGhpcy5jb3VudChjb2x1bW4sIGRhdGEpO1xuICAgIHJldHVybiArKCh0b3RhbFN1bSA9PT0gMCB8fCB0b3RhbENvdW50ID09PSAwKSA/IDAgOiAodG90YWxTdW0gLyB0b3RhbENvdW50KSkudG9GaXhlZCgyKTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIG1pbihjb2x1bW4sIGRhdGEpOiBudW1iZXIge1xuICAgIGxldCB0ZW1wTWluID0gW107XG4gICAgLy9JZiB0aGUgZGF0YSBpcyBncm91cGVkLCB0aGUgbWluaW11bSBpcyBjYWxjdWxhdGVkIHdpdGggdGhlIG1pbmltdW0gb2YgZWFjaCBzdWJncm91cCBpbiBsZXZlbCAxXG4gICAgaWYgKGRhdGFbMF0gaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93KSB7XG4gICAgICB0ZW1wTWluID0gdGhpcy5nZXREYXRhRnJvbUZpcnN0TGV2ZWxUYWJsZUdyb3VwUm93KGRhdGEpLm1hcCh4ID0+IHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKC4uLnguZ2V0Q29sdW1uQWdncmVnYXRlRGF0YShjb2x1bW4pLm1hcCh4ID0+IHhbY29sdW1uXSkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRlbXBNaW4gPSBkYXRhLm1hcCh4ID0+IHhbY29sdW1uXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbXBNaW4ubGVuZ3RoID4gMCA/IE1hdGgubWluKC4uLnRlbXBNaW4pIDogMDtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXgoY29sdW1uLCBkYXRhKTogbnVtYmVyIHtcbiAgICBsZXQgdGVtcE1heCA9IFtdO1xuICAgIGlmIChkYXRhWzBdIGluc3RhbmNlb2YgT1RhYmxlR3JvdXBlZFJvdykge1xuICAgICAgLy9JZiB0aGUgZGF0YSBhcmUgZ3JvdXBlZCwgdGhlIG1heGltdW0gaXMgY2FsY3VsYXRlZCB3aXRoIHRoZSBtYXhpbXVtIG9mIGVhY2ggc3ViZ3JvdXAgaW4gbGV2ZWwgMVxuICAgICAgdGVtcE1heCA9IHRoaXMuZ2V0RGF0YUZyb21GaXJzdExldmVsVGFibGVHcm91cFJvdyhkYXRhKS5tYXAoeCA9PiB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCguLi54LmdldENvbHVtbkFnZ3JlZ2F0ZURhdGEoY29sdW1uKS5tYXAoeCA9PiB4W2NvbHVtbl0pKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZW1wTWF4ID0gZGF0YS5tYXAoeCA9PiB4W2NvbHVtbl0pO1xuICAgIH1cbiAgICByZXR1cm4gdGVtcE1heC5sZW5ndGggPiAwID8gTWF0aC5tYXgoLi4udGVtcE1heCkgOiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ZpcnN0TGV2ZWxUYWJsZUdyb3VwUm93KHRhYmxlUm93R3JvdXBEYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdGFibGVSb3dHcm91cERhdGEgaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93ICYmIHRhYmxlUm93R3JvdXBEYXRhLmxldmVsID09PSAxO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREYXRhRnJvbUZpcnN0TGV2ZWxUYWJsZUdyb3VwUm93KGRhdGE6IGFueSkge1xuICAgIHJldHVybiBkYXRhLmZpbHRlcih4ID0+IHRoaXMuaXNGaXJzdExldmVsVGFibGVHcm91cFJvdyh4KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZXhpc3RzQW55Q2FsY3VsYXRlZENvbHVtbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGVPcHRpb25zLmNvbHVtbnMuZmluZCgob0NvbDogT0NvbHVtbikgPT4gb0NvbC5jYWxjdWxhdGUgIT09IHVuZGVmaW5lZCkgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHVwZGF0ZVJlbmRlcmVkUm93RGF0YShyb3dEYXRhOiBhbnkpIHtcbiAgICBjb25zdCB0YWJsZUtleXMgPSB0aGlzLnRhYmxlLmdldEtleXMoKTtcbiAgICBjb25zdCByZWNvcmQgPSB0aGlzLnJlbmRlcmVkRGF0YS5maW5kKChkYXRhOiBhbnkpID0+IHtcbiAgICAgIGxldCBmb3VuZCA9IHRydWU7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGFibGVLZXlzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRhYmxlS2V5c1tpXTtcbiAgICAgICAgaWYgKGRhdGFba2V5XSAhPT0gcm93RGF0YVtrZXldKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZvdW5kO1xuICAgIH0pO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChyZWNvcmQpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHJlY29yZCwgcm93RGF0YSk7XG4gICAgfVxuICB9XG5cblxuICBwcml2YXRlIGdldERhdGFJbmZvcm1hdGlvbkJ5R3JvdXAoZGF0YTogYW55W10sIGxldmVsOiBudW1iZXIpIHtcbiAgICBjb25zdCByZWNvcmRIYXNoID0ge307XG4gICAgZGF0YS5mb3JFYWNoKChyb3csIGkpID0+IHtcbiAgICAgIGNvbnN0IGtleXMgPSB7fTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IGxldmVsOyBpKyspIHtcbiAgICAgICAga2V5c1t0aGlzLnRhYmxlLmdyb3VwZWRDb2x1bW5zQXJyYXlbaV1dID0gdGhpcy50YWJsZS5nZXRDb2x1bW5EYXRhQnlBdHRyKHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheVtpXSwgcm93KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY29yZEtleSA9IEpTT04uc3RyaW5naWZ5KGtleXMpO1xuICAgICAgaWYgKHJlY29yZEhhc2guaGFzT3duUHJvcGVydHkocmVjb3JkS2V5KSkge1xuICAgICAgICByZWNvcmRIYXNoW3JlY29yZEtleV0ucHVzaChpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29yZEhhc2hbcmVjb3JkS2V5XSA9IFtpXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVjb3JkSGFzaDtcbiAgfVxuXG4gIHByaXZhdGUgcmVjYWxjdWxhdGVDb2x1bW5BZ2dyZWdhdGUoY29sdW1uQXR0cjogc3RyaW5nLCByb3c6IE9UYWJsZUdyb3VwZWRSb3cpIHtcbiAgICBjb25zdCBhZ2dyZWdhdGVDb25mID0gcm93LmdldEFjdGl2ZUNvbHVtbkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24oY29sdW1uQXR0cik7XG4gICAgY29uc3QgZGF0YSA9IHJvdy5nZXRDb2x1bW5BZ2dyZWdhdGVEYXRhKGNvbHVtbkF0dHIpO1xuICAgIGNvbnN0IHZhbHVlT3JQcm9taXNlID0gdGhpcy5jYWxjdWxhdGVBZ2dyZWdhdGUoZGF0YSwgYWdncmVnYXRlQ29uZi5hdHRyLCBhZ2dyZWdhdGVDb25mLmFnZ3JlZ2F0ZUZ1bmN0aW9uIHx8IGFnZ3JlZ2F0ZUNvbmYuYWdncmVnYXRlKTtcblxuICAgIGlmICh2YWx1ZU9yUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgIHZhbHVlT3JQcm9taXNlXG4gICAgICAgIC50aGVuKHZhbHVlID0+IHtcbiAgICAgICAgICByb3cuc2V0Q29sdW1uQWdncmVnYXRlVmFsdWUoY29sdW1uQXR0ciwgdmFsdWUpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyID0+IGNvbnNvbGUuZXJyb3IoYG8tdGFibGUtY29sdW1uLWFnZ3JlZ2F0ZTogQXN5bmMgYWdncmVnYXRlIGVycm9yIGluIGNvbHVtbiBcIiR7Y29sdW1uQXR0cn1cIiB1c2luZyBhZ2dyZWdhdGUgZnVuY3Rpb24gXCIke2FnZ3JlZ2F0ZUNvbmYuYWdncmVnYXRlRnVuY3Rpb259XCI6YCwgZXJyKSk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgcm93LnNldENvbHVtbkFnZ3JlZ2F0ZVZhbHVlKGNvbHVtbkF0dHIsIHZhbHVlT3JQcm9taXNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFN1YmxldmVsKGRhdGE6IGFueVtdLCBsZXZlbDogbnVtYmVyLCBwYXJlbnQ/OiBPVGFibGVHcm91cGVkUm93KTogYW55W10ge1xuICAgIGlmIChsZXZlbCA+PSB0aGlzLnRhYmxlLmdyb3VwZWRDb2x1bW5zQXJyYXkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgY29uc3QgcmVjb3JkSGFzaCA9IHRoaXMuZ2V0RGF0YUluZm9ybWF0aW9uQnlHcm91cChkYXRhLCBsZXZlbCk7XG5cbiAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgT2JqZWN0LmtleXMocmVjb3JkSGFzaCkuZm9yRWFjaChyZWNvcmRLZXkgPT4ge1xuXG4gICAgICBjb25zdCByb3cgPSBuZXcgT1RhYmxlR3JvdXBlZFJvdyh7XG4gICAgICAgIGNvbHVtbjogdGhpcy50YWJsZS5ncm91cGVkQ29sdW1uc0FycmF5W2xldmVsXSxcbiAgICAgICAga2V5c0FzU3RyaW5nOiByZWNvcmRLZXksXG4gICAgICAgIGxldmVsOiBsZXZlbCArIDEsXG4gICAgICAgIHBhcmVudDogcGFyZW50XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ncm91cGVkUm93c1N1YnNjcmlwdGlvbi5hZGQocm93LmFnZ3JlZ2F0ZUZ1bmN0aW9uQ2hhbmdlLnN1YnNjcmliZShhcmcgPT4ge1xuICAgICAgICBpZiAoYXJnLmNoYW5nZUFsbEdyb3VwZWRSb3dzKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVBZ2dyZWdhdGVzW2FyZy5jb2x1bW5BdHRyXSA9IGFyZy5hY3RpdmVBZ2dyZWdhdGU7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlZERhdGEuZmlsdGVyKHJvdyA9PiByb3cgaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93KS5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICByb3cuc2V0Q29sdW1uQWN0aXZlQWdncmVnYXRlRnVuY3Rpb24oYXJnLmNvbHVtbkF0dHIsIGFyZy5hY3RpdmVBZ2dyZWdhdGUsIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVDb2x1bW5BZ2dyZWdhdGUoYXJnLmNvbHVtbkF0dHIsIHJvdyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZUNvbHVtbkFnZ3JlZ2F0ZShhcmcuY29sdW1uQXR0ciwgYXJnLnJvdyk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IGFmZmVjdGVkSW5kZXhlcyA9IHJlY29yZEhhc2hbcm93LmtleXNBc1N0cmluZ107XG4gICAgICBjb25zdCBncm91cERhdGEgPSBkYXRhLmZpbHRlcigocm93LCBpbmRleCkgPT4gYWZmZWN0ZWRJbmRleGVzLmluY2x1ZGVzKGluZGV4KSk7XG4gICAgICB0aGlzLnRhYmxlLnZpc2libGVDb2xBcnJheS5mb3JFYWNoKChjb2x1bW5BdHRyLCBpKSA9PiB7XG4gICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgcm93LnRpdGxlID0gdGhpcy5nZXRUZXh0R3JvdXBSb3cocm93LCBhZmZlY3RlZEluZGV4ZXMubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1c2VDb2x1bW5BZ2dyZWdhdGUgPSB0aGlzLnRhYmxlLnVzZUNvbHVtbkdyb3VwaW5nQWdncmVnYXRlKGNvbHVtbkF0dHIpO1xuICAgICAgICBpZiAodXNlQ29sdW1uQWdncmVnYXRlKSB7XG4gICAgICAgICAgcm93LmluaXRpYWxpemVDb2x1bW5BZ2dyZWdhdGUoY29sdW1uQXR0ciwgdGhpcy50YWJsZS5nZXRDb2x1bW5Hcm91cGluZ0NvbXBvbmVudChjb2x1bW5BdHRyKSk7XG5cbiAgICAgICAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5hY3RpdmVBZ2dyZWdhdGVzW2NvbHVtbkF0dHJdKSkge1xuICAgICAgICAgICAgcm93LnNldENvbHVtbkFjdGl2ZUFnZ3JlZ2F0ZUZ1bmN0aW9uKGNvbHVtbkF0dHIsIHRoaXMuYWN0aXZlQWdncmVnYXRlc1tjb2x1bW5BdHRyXSwgZmFsc2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyb3cuaGFzQWN0aXZlQWdncmVnYXRlKGNvbHVtbkF0dHIpKSB7XG4gICAgICAgICAgICBjb25zdCBhZ2dyZWdhdGVEYXRhID0gZ3JvdXBEYXRhLm1hcCh4ID0+IHsgY29uc3Qgb2JqID0ge307IG9ialtjb2x1bW5BdHRyXSA9IHhbY29sdW1uQXR0cl07IHJldHVybiBvYmo7IH0pO1xuICAgICAgICAgICAgcm93LnNldENvbHVtbkFnZ3JlZ2F0ZURhdGEoY29sdW1uQXR0ciwgYWdncmVnYXRlRGF0YSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFnZ3JlZ2F0ZUNvbmYgPSByb3cuZ2V0QWN0aXZlQ29sdW1uQWdncmVnYXRlQ29uZmlndXJhdGlvbihjb2x1bW5BdHRyKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlT3JQcm9taXNlID0gdGhpcy5jYWxjdWxhdGVBZ2dyZWdhdGUoXG4gICAgICAgICAgICAgIGFnZ3JlZ2F0ZURhdGEsXG4gICAgICAgICAgICAgIGFnZ3JlZ2F0ZUNvbmYuYXR0cixcbiAgICAgICAgICAgICAgYWdncmVnYXRlQ29uZi5hZ2dyZWdhdGVGdW5jdGlvbiB8fCBhZ2dyZWdhdGVDb25mLmFnZ3JlZ2F0ZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlT3JQcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAvLyBJZiBpdCByZXR1cm5zIGEgUHJvbWlzZSwgd2Ugd2FpdCBmb3IgaXRzIHJlc29sdXRpb24gd2l0aG91dCBibG9ja2luZyBleGVjdXRpb24uXG4gICAgICAgICAgICAgIHZhbHVlT3JQcm9taXNlXG4gICAgICAgICAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgcm93LnNldENvbHVtbkFnZ3JlZ2F0ZVZhbHVlKGNvbHVtbkF0dHIsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gY29uc29sZS5lcnJvcihgby10YWJsZS1jb2x1bW5zLWdyb3VwaW5nLWNvbHVtbjogQXN5bmMgYWdncmVnYXRlIGVycm9yIGluIGNvbHVtbiBcIiR7Y29sdW1uQXR0cn1cIiB1c2luZyBhZ2dyZWdhdGUgZnVuY3Rpb24gXCIke2FnZ3JlZ2F0ZUNvbmYuYWdncmVnYXRlRnVuY3Rpb259XCI6YCwgZXJyKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJZiBpdCdzIGEgc3luY2hyb25vdXMgcmVzdWx0LCB3ZSBhc3NpZ24gaXQgZGlyZWN0bHlcbiAgICAgICAgICAgICAgcm93LnNldENvbHVtbkFnZ3JlZ2F0ZVZhbHVlKGNvbHVtbkF0dHIsIHZhbHVlT3JQcm9taXNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcm93LmV4cGFuZGVkID0gdGhpcy5nZXRFeHBhbnNpb25TdGF0ZShyb3cpO1xuICAgICAgY29uc3Qgc3ViR3JvdXAgPSB0aGlzLmdldFN1YmxldmVsKGdyb3VwRGF0YSwgbGV2ZWwgKyAxLCByb3cpO1xuICAgICAgc3ViR3JvdXAudW5zaGlmdChyb3cpO1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChzdWJHcm91cCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGNvbGxhcHNlZCByb3cgZ3JvdXBcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHJldHVybnMgY29sbGFwc2VkIHJvdyBncm91cFxuICAgKi9cbiAgZmlsdGVyQ29sbGFwc2VkUm93R3JvdXAoZGF0YTogYW55KTogYW55W10ge1xuICAgIHJldHVybiBkYXRhLmZpbHRlcigocm93OiBhbnkpID0+IChyb3cgaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93KSA/IHJvdy52aXNpYmxlIDogdGhpcy5iZWxvbmdzVG9FeHBhbmRlZEdyb3VwZWRSb3coZGF0YSwgcm93KSk7XG4gIH1cblxuICAvKipcbiAgICogQmVsb25ncyB0byBhbiBleHBhbmRlZCBncm91cGVkIHJvd1xuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcGFyYW0gcm93XG4gICAqIEByZXR1cm5zIHRydWUgaWYgdG8gZXhwYW5kZWQgZ3JvdXBlZCByb3dcbiAgICovXG4gIGJlbG9uZ3NUb0V4cGFuZGVkR3JvdXBlZFJvdyhkYXRhOiBhbnksIHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgbGV0IHBhcmVudDogT1RhYmxlR3JvdXBlZFJvdztcbiAgICBsZXQgbWF0Y2ggPSBmYWxzZTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGF0YS5sZW5ndGggJiYgIW1hdGNoOyBpbmRleCsrKSB7XG4gICAgICBpZiAoZGF0YVtpbmRleF0gaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93KSB7XG4gICAgICAgIHBhcmVudCA9IGRhdGFbaW5kZXhdO1xuICAgICAgfSBlbHNlIGlmIChVdGlsLmlzRXF1aXZhbGVudChkYXRhW2luZGV4XSwgcm93KSkge1xuICAgICAgICBtYXRjaCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZChwYXJlbnQpID8gKHBhcmVudC52aXNpYmxlICYmIHBhcmVudC5leHBhbmRlZCkgOiB0cnVlO1xuICB9XG5cbiAgdXBkYXRlR3JvdXBlZENvbHVtbnMoKSB7XG4gICAgdGhpcy50YWJsZS5sb2FkaW5nU2VydmljZS5zZXRMb2FkaW5nKHRydWUpO1xuICAgIHRoaXMuZ3JvdXBCeUNvbHVtbkNoYW5nZS5uZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyBncm91cCBieSBjb2x1bW5cbiAgICogQHBhcmFtIHJvd0dyb3VwXG4gICAqL1xuICB0b2dnbGVHcm91cEJ5Q29sdW1uKHJvd0dyb3VwOiBPVGFibGVHcm91cGVkUm93KSB7XG4gICAgaWYgKHJvd0dyb3VwLmV4cGFuZFNhbWVMZXZlbCh0aGlzLnRhYmxlLmV4cGFuZEdyb3Vwc1NhbWVMZXZlbCkpIHtcbiAgICAgIHRoaXMubGV2ZWxzRXhwYW5zaW9uU3RhdGVbcm93R3JvdXAubGV2ZWxdID0gIXJvd0dyb3VwLmV4cGFuZGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlUm93R3JvdXBlZChyb3dHcm91cCk7XG4gICAgfVxuICAgIHRoaXMuZ3JvdXBCeUNvbHVtbkNoYW5nZS5uZXh0KCk7XG4gIH1cblxuICBzZXRSb3dHcm91cExldmVsRXhwYW5zaW9uKHJvd0dyb3VwOiBPVGFibGVHcm91cGVkUm93LCB2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMubGV2ZWxzRXhwYW5zaW9uU3RhdGVbcm93R3JvdXAubGV2ZWxdID0gdmFsdWU7XG4gICAgdGhpcy5ncm91cEJ5Q29sdW1uQ2hhbmdlLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhdGVSb3dHcm91cGVkKHJvd0dyb3VwOiBPVGFibGVHcm91cGVkUm93KSB7XG4gICAgY29uc3Qgc3RhdGVSb3dHcm91cGVkID0gdGhpcy5ncm91cGVkUm93U3RhdGUuZmluZChyb3cgPT4gcm93R3JvdXAua2V5c0FzU3RyaW5nID09PSByb3cua2V5c0FzU3RyaW5nICYmIEpTT04uc3RyaW5naWZ5KHJvd0dyb3VwLnBhcmVudCkgPT09IEpTT04uc3RyaW5naWZ5KHJvdy5wYXJlbnQpKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoc3RhdGVSb3dHcm91cGVkKSkge1xuICAgICAgc3RhdGVSb3dHcm91cGVkLmV4cGFuZGVkID0gIXN0YXRlUm93R3JvdXBlZC5leHBhbmRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcm93R3JvdXAuZXhwYW5kZWQgPSAhcm93R3JvdXAuZXhwYW5kZWQ7XG4gICAgICB0aGlzLmdyb3VwZWRSb3dTdGF0ZS5wdXNoKHJvd0dyb3VwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFRleHRHcm91cFJvdyhncm91cDogT1RhYmxlR3JvdXBlZFJvdywgdG90YWxDb3VudHM6IG51bWJlcikge1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy50YWJsZS5ncm91cGVkQ29sdW1uc0FycmF5W2dyb3VwLmxldmVsIC0gMV07XG4gICAgbGV0IHZhbHVlID0gSlNPTi5wYXJzZShncm91cC5rZXlzQXNTdHJpbmcpW3RoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheVtncm91cC5sZXZlbCAtIDFdXTtcblxuICAgIGNvbnN0IG9Db2wgPSB0aGlzLnRhYmxlLmdldE9Db2x1bW4oZmllbGQpO1xuXG4gICAgaWYgKCF2YWx1ZSAmJiBVdGlsLmlzRGVmaW5lZChvQ29sLnJlbmRlcmVyKSAmJiAodGhpcy50YWJsZSBhcyBhbnkpLmlzSW5zdGFuY2VPZk9UYWJsZUNlbGxSZW5kZXJlclNlcnZpY2VDb21wb25lbnQob0NvbC5yZW5kZXJlcikpIHtcbiAgICAgIHZhbHVlID0gJyAtICc7XG4gICAgICBpZiAoIXRoaXMudGFibGUub25EYXRhTG9hZGVkQ2VsbFJlbmRlcmVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMudGFibGUub25EYXRhTG9hZGVkQ2VsbFJlbmRlcmVyU3Vic2NyaXB0aW9uID0gKG9Db2wucmVuZGVyZXIgYXMgYW55KS5vbkRhdGFMb2FkZWQuc3Vic2NyaWJlKHggPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlR3JvdXBlZENvbHVtbnMoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAodGhpcy50YWJsZSBhcyBhbnkpLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KG9Db2wudGl0bGUpICsgJzogJyArIHZhbHVlICsgJyAoJyArIHRvdGFsQ291bnRzICsgJyknO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFeHBhbnNpb25TdGF0ZShyb3c6IE9UYWJsZUdyb3VwZWRSb3cpOiBib29sZWFuIHtcbiAgICBsZXQgZXhwYW5zaW9uU3RhdGUgPSAhcGFyZW50IHx8ICF0aGlzLnRhYmxlLmNvbGxhcHNlR3JvdXBlZENvbHVtbnM7XG4gICAgaWYgKHJvdy5leHBhbmRTYW1lTGV2ZWwodGhpcy50YWJsZS5leHBhbmRHcm91cHNTYW1lTGV2ZWwpKSB7XG4gICAgICBleHBhbnNpb25TdGF0ZSA9IHRoaXMubGV2ZWxzRXhwYW5zaW9uU3RhdGUuaGFzT3duUHJvcGVydHkocm93LmxldmVsKSA/IHRoaXMubGV2ZWxzRXhwYW5zaW9uU3RhdGVbcm93LmxldmVsXSA6IGV4cGFuc2lvblN0YXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByb3dHcm91cCA9IHRoaXMuZ3JvdXBlZFJvd1N0YXRlLmZpbmQoeCA9PiB4LmtleXNBc1N0cmluZyA9PT0gcm93LmtleXNBc1N0cmluZyAmJiBKU09OLnN0cmluZ2lmeSh4LnBhcmVudCkgPT09IEpTT04uc3RyaW5naWZ5KHJvdy5wYXJlbnQpKTtcbiAgICAgIGV4cGFuc2lvblN0YXRlID0gcm93R3JvdXAgPyByb3dHcm91cC5leHBhbmRlZCA6IGV4cGFuc2lvblN0YXRlO1xuICAgIH1cbiAgICByZXR1cm4gZXhwYW5zaW9uU3RhdGU7XG4gIH1cbn1cblxuXG5cbiJdfQ==
|
|
787
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1vLXRhYmxlLmRhdGFzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9leHRlbnNpb25zL2RlZmF1bHQtby10YWJsZS5kYXRhc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSwwQkFBMEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJekYsT0FBTyxFQUFFLHlCQUF5QixFQUFzQixNQUFNLGlEQUFpRCxDQUFDO0FBQ2hILE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFJakUsTUFBTSxPQUFPLDBCQUEwQjtJQUdyQyxZQUFZLElBQWU7UUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDcEIsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLHVCQUF3QixTQUFRLFVBQWU7SUFHMUQsSUFBSSxJQUFJLEtBQVksT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFxQi9ELElBQUksV0FBVyxL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ekQsY0FBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7U0FDOUg7YUFBTTtZQUNMLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxHQUFHLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDaEosY0FBYyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO1NBQ2hFO1FBQ0QsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVNvdXJjZSwgTGlzdFJhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgYXN5bmNTY2hlZHVsZXIsIEJlaGF2aW9yU3ViamVjdCwgRU1QVFksIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIG9ic2VydmVPbiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBPVGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLWRhdGFzb3VyY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9UYWJsZU9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL28tdGFibGUtb3B0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvciwgT0NvbHVtblZhbHVlRmlsdGVyIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvdGFibGUvby1jb2x1bW4tdmFsdWUtZmlsdGVyLnR5cGUnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL2NvZGVzJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBPQ29sdW1uIH0gZnJvbSAnLi4vY29sdW1uL28tY29sdW1uLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL28tdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZURhbyB9IGZyb20gJy4vby10YWJsZS5kYW8nO1xuaW1wb3J0IHsgT1RhYmxlR3JvdXBlZFJvdyB9IGZyb20gJy4vcm93L28tdGFibGUtcm93LWdyb3VwLmNsYXNzJztcbmltcG9ydCB7IE9NYXRTb3J0IH0gZnJvbSAnLi9zb3J0L28tbWF0LXNvcnQnO1xuaW1wb3J0IHsgQWdncmVnYXRlRnVuY3Rpb24gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2dyZWdhdGUtZnVuY3Rpb24udHlwZSc7XG5cbmV4cG9ydCBjbGFzcyBPblJhbmdlQ2hhbmdlVmlydHVhbFNjcm9sbCB7XG4gIHB1YmxpYyByYW5nZTogTGlzdFJhbmdlO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IExpc3RSYW5nZSkge1xuICAgIHRoaXMucmFuZ2UgPSBkYXRhO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWZhdWx0T1RhYmxlRGF0YVNvdXJjZSBleHRlbmRzIERhdGFTb3VyY2U8YW55PiBpbXBsZW1lbnRzIE9UYWJsZURhdGFTb3VyY2Uge1xuICBkYXRhVG90YWxzQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4obnVsbCk7XG5cbiAgZ2V0IGRhdGEoKTogYW55W10geyByZXR1cm4gdGhpcy5kYXRhVG90YWxzQ2hhbmdlLnZhbHVlID8/IFtdOyB9XG5cbiAgcHJvdGVjdGVkIF9kYXRhYmFzZTogT1RhYmxlRGFvO1xuICBwcm90ZWN0ZWQgX3BhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuICBwcm90ZWN0ZWQgX3RhYmxlT3B0aW9uczogT1RhYmxlT3B0aW9ucztcbiAgcHJvdGVjdGVkIF9zb3J0OiBPTWF0U29ydDtcblxuICBwcm90ZWN0ZWQgX3ZpcnR1YWxQYWdlQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxPblJhbmdlQ2hhbmdlVmlydHVhbFNjcm9sbD4obmV3IE9uUmFuZ2VDaGFuZ2VWaXJ0dWFsU2Nyb2xsKHsgc3RhcnQ6IDAsIGVuZDogMCB9KSk7XG4gIHByb3RlY3RlZCBfcXVpY2tGaWx0ZXJDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCcnKTtcbiAgcHJvdGVjdGVkIF9jb2x1bW5WYWx1ZUZpbHRlckNoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG4gIHByb3RlY3RlZCBncm91cEJ5Q29sdW1uQ2hhbmdlOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD47XG5cbiAgcHJvdGVjdGVkIGZpbHRlcmVkRGF0YTogYW55W10gPSBbXTtcbiAgcHJvdGVjdGVkIGFnZ3JlZ2F0ZURhdGE6IGFueSA9IHt9O1xuXG4gIG9uUmVuZGVyZWREYXRhQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG5cbiAgcHJvdGVjdGVkIF9yZW5kZXJlZERhdGE6IGFueVtdID0gbnVsbDtcbiAgcmVzdWx0c0xlbmd0aDogbnVtYmVyID0gMDtcblxuICBnZXQgcXVpY2tGaWx0ZXIoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX3F1aWNrRmlsdGVyQ2hhbmdlLnZhbHVlIHx8ICcnOyB9XG4gIHNldCBxdWlja0ZpbHRlcihmaWx0ZXI6IHN0cmluZykge1xuICAgIHRoaXMuX3F1aWNrRmlsdGVyQ2hhbmdlLm5leHQoZmlsdGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgY29sdW1uVmFsdWVGaWx0ZXJzOiBBcnJheTxPQ29sdW1uVmFsdWVGaWx0ZXI+ID0gW107XG4gIHByaXZhdGUgZ3JvdXBlZFJvd1N0YXRlOiBPVGFibGVHcm91cGVkUm93W10gPSBbXTtcbiAgcHJpdmF0ZSBhY3RpdmVBZ2dyZWdhdGVzID0ge307XG4gIHByaXZhdGUgZ3JvdXBlZFJvd3NTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgbGV2ZWxzRXhwYW5zaW9uU3RhdGUgPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmU6IE5nWm9uZTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgdGFibGU6IE9UYWJsZUNvbXBvbmVudCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5uZ1pvbmUgPSB0YWJsZS5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICB0aGlzLl9kYXRhYmFzZSA9IHRhYmxlLmRhb1RhYmxlO1xuICAgIGlmICh0aGlzLl9kYXRhYmFzZSkge1xuICAgICAgdGhpcy5yZXN1bHRzTGVuZ3RoID0gdGhpcy5fZGF0YWJhc2UuZGF0YS5sZW5ndGg7XG4gICAgfVxuICAgIGlmICh0YWJsZS5wYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMuX3BhZ2luYXRvciA9IHRhYmxlLm1hdHBhZ2luYXRvcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50YWJsZS52aXJ0dWFsU2Nyb2xsVmlld3BvcnQpIHtcbiAgICAgIHRoaXMudGFibGUudmlydHVhbFNjcm9sbFZpZXdwb3J0LnJlbmRlcmVkUmFuZ2VTdHJlYW1cbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAodmFsdWU6IExpc3RSYW5nZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdmlydHVhbFBhZ2VDaGFuZ2UubmV4dChuZXcgT25SYW5nZUNoYW5nZVZpcnR1YWxTY3JvbGwodmFsdWUpKTtcbiAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl90YWJsZU9wdGlvbnMgPSB0YWJsZS5vVGFibGVPcHRpb25zO1xuICAgIHRoaXMuX3NvcnQgPSB0YWJsZS5zb3J0O1xuXG4gIH1cblxuICBzb3J0RnVuY3Rpb24oYTogYW55LCBiOiBhbnkpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zb3J0LnNvcnRGdW5jdGlvbihhLCBiKTtcbiAgfVxuXG4gIGdldCByZW5kZXJlZERhdGEoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl9yZW5kZXJlZERhdGE7XG4gIH1cblxuICBzZXQgcmVuZGVyZWREYXRhKGFyZzogYW55W10pIHtcbiAgICB0aGlzLl9yZW5kZXJlZERhdGEgPSBhcmc7XG4gICAgdGhpcy5vblJlbmRlcmVkRGF0YUNoYW5nZS5lbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ29ubmVjdCBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIHRhYmxlIHRvIHJldHJpZXZlIG9uZSBzdHJlYW0gY29udGFpbmluZyB0aGUgZGF0YSB0byByZW5kZXIuXG4gICAqL1xuICBjb25uZWN0KCk6IE9ic2VydmFibGU8YW55W10+IHtcbiAgICBjb25zdCB0YWcgPSAodHlwZTogc3RyaW5nLCBvYnM6IE9ic2VydmFibGU8YW55PikgPT5cbiAgICAgIG9icy5waXBlKG1hcCh2YWx1ZSA9PiAoeyB0eXBlLCB2YWx1ZSB9KSkpO1xuXG4gICAgY29uc3QgZGlzcGxheURhdGFDaGFuZ2VzOiBhbnlbXSA9IFtdO1xuICAgIGRpc3BsYXlEYXRhQ2hhbmdlcy5wdXNoKHRhZygnREFUQUNIQU5HRScsIHRoaXMuX2RhdGFiYXNlLmRhdGFDaGFuZ2UpKTtcblxuXG4gICAgaWYgKCF0aGlzLnRhYmxlLnBhZ2VhYmxlKSB7XG5cblxuICAgICAgaWYgKHRoaXMuX3NvcnQpIHtcbiAgICAgICAgZGlzcGxheURhdGFDaGFuZ2VzLnB1c2godGFnKCdTT1JUQ0hBTkdFJywgdGhpcy5fc29ydC5vU29ydENoYW5nZSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fdGFibGVPcHRpb25zLmZpbHRlcikge1xuICAgICAgICBkaXNwbGF5RGF0YUNoYW5nZXMucHVzaCh0YWcoJ1FVSUNLRklMVEVSQ0hBTkdFJywgdGhpcy5fcXVpY2tGaWx0ZXJDaGFuZ2UpKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fcGFnaW5hdG9yKSB7XG4gICAgICAgIGRpc3BsYXlEYXRhQ2hhbmdlcy5wdXNoKHRhZygnUEFHSU5BVE9SJywgdGhpcy5fcGFnaW5hdG9yLnBhZ2UpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkaXNwbGF5RGF0YUNoYW5nZXMucHVzaCh0YWcoJ0ZJTFRFUkJZQ09MVU1OJywgdGhpcy5fY29sdW1uVmFsdWVGaWx0ZXJDaGFuZ2UpLnBpcGUoZmlsdGVyKGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudC52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KSkpO1xuXG4gICAgaWYgKHRoaXMudGFibGUuZ3JvdXBhYmxlKSB7XG4gICAgICBkaXNwbGF5RGF0YUNoYW5nZXMucHVzaCh0YWcoJ0dST1VQX0JZJywgdGhpcy5ncm91cEJ5Q29sdW1uQ2hhbmdlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBQcm9jZXNzZXMgdGFibGUgZGF0YSByZWFjdGl2ZWx5IHdoZW5ldmVyIGFueSBkaXNwbGF5LXJlbGF0ZWQgZXZlbnQgb2NjdXJzLlxuICAgICogSGFuZGxlczpcbiAgICAqICAtIFZpcnR1YWwgc2Nyb2xsIHJhbmdlIGNoYW5nZXNcbiAgICAqICAtIEZpbHRlcmluZywgc29ydGluZywgZ3JvdXBpbmcsIGNhbGN1bGF0ZWQgY29sdW1uc1xuICAgICogIC0gUGFnaW5hdGlvbiAoY2xpZW50IG9yIHNlcnZlcilcbiAgICAqICAtIEhlYXZ5IGRhdGEgcHJvY2Vzc2luZyBvdXRzaWRlIEFuZ3VsYXIncyB6b25lIGZvciBwZXJmb3JtYW5jZVxuICAgICogIC0gUmV0dXJuaW5nIHByb2Nlc3NlZCBkYXRhIGJhY2sgaW50byBBbmd1bGFyIGZvciBVSSB1cGRhdGVcbiAgICAqXG4gICAgKiBUaGlzIHBpcGVsaW5lIGVuc3VyZXMgb3B0aW1hbCBwZXJmb3JtYW5jZSBieTpcbiAgICAqICAtIFByZXZlbnRpbmcgdW5uZWNlc3NhcnkgY2hhbmdlIGRldGVjdGlvbiBkdXJpbmcgaGVhdnkgb3BlcmF0aW9uc1xuICAgICogIC0gQWxsb3dpbmcgdGhlIGJyb3dzZXIgdG8gcmVuZGVyIGZpcnN0ICh2aWEgc2V0VGltZW91dClcbiAgICAqICAtIFJ1bm5pbmcgZXhwZW5zaXZlIGxvZ2ljIG91dHNpZGUgQW5ndWxhciBab25lXG4gICAgKiAgLSBSZS1lbnRlcmluZyBBbmd1bGFyIFpvbmUgb25seSB3aGVuIFVJIG11c3QgdXBkYXRlXG4gICAgKlxuICAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxhbnlbXT4gRW1pdHMgdGhlIHByb2Nlc3NlZCBkYXRhc2V0IHRvIGJlIHJlbmRlcmVkLlxuICAgICovXG4gICAgLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICAgLy8gU1RSRUFNIDE6ICBNYWluIGRhdGEgc3RyZWFtIChleGVjdXRlZCB3aXRoIGFzeW5jU2NoZWR1bGVyIGZvciBoZWF2eSB0YXNrcylcbiAgICAvLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgICBjb25zdCBtYWluRGF0YVN0cmVhbSA9IG1lcmdlKC4uLmRpc3BsYXlEYXRhQ2hhbmdlcykucGlwZShcbiAgICAgIC8vICBkZWJvdW5jZVRpbWUoNTApLCAvLyBSZWR1Y2UgcsOhZmFnYXMgZGUgZXZlbnRvc1xuICAgICAgLy8gRW5zdXJlcyBoZWF2eSBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQgYXN5bmNocm9ub3VzbHlcbiAgICAgIG9ic2VydmVPbihhc3luY1NjaGVkdWxlciksXG4gICAgICBzd2l0Y2hNYXAoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgbGV0IGRhdGEgPSBPYmplY3QuYXNzaWduKFtdLCB0aGlzLl9kYXRhYmFzZS5kYXRhKTtcblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkgfHwgdGhpcy5yZW5kZXJlZERhdGEgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBObyBkYXRhIGhhcyBiZWVuIGxvYWRlZCB5ZXRcbiAgICAgICAgICB0aGlzLnJlbmRlcmVkRGF0YSA9IFtdO1xuICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGFPdXRzaWRlQW5ndWxhcihkYXRhKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgIC8vICBTVFJFQU0gMjogVmlydHVhbCBzY3JvbGwgc3RyZWFtIChzeW5jaHJvbm91cyB3aXRoIHNjcm9sbCBldmVudHMpXG4gICAgLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICAgY29uc3QgdmlydHVhbFNjcm9sbFN0cmVhbSA9IHRoaXMudGFibGUudmlydHVhbFNjcm9sbFZpZXdwb3J0XG4gICAgICA/IHRoaXMuX3ZpcnR1YWxQYWdlQ2hhbmdlLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZWREYXRhICE9PSBudWxsICYmXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVkRGF0YSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KHRoaXMucmVuZGVyZWREYXRhKSAmJlxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlZERhdGEubGVuZ3RoID4gMDtcbiAgICAgICAgfSksXG4gICAgICAgIC8vICBTVFJFQU0gMjogVmlydHVhbCBzY3JvbGwgc3RyZWFtIChzeW5jaHJvbm91cyB3aXRoIHNjcm9sbCBldmVudHMpXG4gICAgICAgIHN3aXRjaE1hcCgoeDogT25SYW5nZUNoYW5nZVZpcnR1YWxTY3JvbGwpID0+IHtcbiAgICAgICAgICByZXR1cm4gb2YodGhpcy5nZXRWaXJ0dWFsU2Nyb2xsRGF0YSh0aGlzLnJlbmRlcmVkRGF0YSwgeCkpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgOiBFTVBUWTsvLyBObyB2aXJ0dWFsIHNjcm9sbCDihpIgbm8gc3RyZWFtXG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIENPTUJJTkUgYm90aCBzdHJlYW1zIGludG8gb25lIHVuaWZpZWQgb3V0cHV0XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICByZXR1cm4gbWVyZ2UobWFpbkRhdGFTdHJlYW0sIHZpcnR1YWxTY3JvbGxTdHJlYW0pO1xuICB9XG4gIC8qKlxuICogUHJvY2Vzc2VzIGhlYXZ5IGRhdGEgb3BlcmF0aW9ucyBvdXRzaWRlIEFuZ3VsYXIgWm9uZSB0byBhdm9pZCBibG9ja2luZyBVSS5cbiAqIFdyYXBzIG9wZXJhdGlvbnMgaW4gc2V0VGltZW91dCgwKSB0byBhbGxvdyBicm93c2VyIHJlbmRlcmluZyBiZWZvcmUgcHJvY2Vzc2luZy5cbiAqL1xuICBwcml2YXRlIHByb2Nlc3NEYXRhT3V0c2lkZUFuZ3VsYXIoZGF0YSk6IE9ic2VydmFibGU8YW55W10+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8YW55W10+KG9ic2VydmVyID0+IHtcbiAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgLy8gc2V0VGltZW91dCgwKSBhbGxvd3MgdGhlIGJyb3dzZXIgdG8gcGFpbnQgc2tlbGV0b24vbG9hZGluZyBzdGF0ZVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBkYXRhID0gdGhpcy5leGVjdXRlRGF0YVByb2Nlc3NpbmcoZGF0YSwgb2JzZXJ2ZXIpO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gKiBDRU5UUkFMSVpFRCBTVEFURSBVUERBVEVcbiAqIFVwZGF0ZXMgYWxsIHRhYmxlIHN0YXRlIHByb3BlcnRpZXMgaW4gb25lIHBsYWNlLlxuICogUHJldmVudHMgc2NhdHRlcmVkIG1vZGlmaWNhdGlvbnMgdGhyb3VnaG91dCB0aGUgY29kZS5cbiAqL1xuICBwcml2YXRlIHVwZGF0ZVRhYmxlU3RhdGUocmVuZGVyZWREYXRhOiBhbnlbXSwgcmVzdWx0c0xlbmd0aDogbnVtYmVyLCBhZ2dyZWdhdGVEYXRhOiBhbnkgPSB7fSk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZWREYXRhID0gcmVuZGVyZWREYXRhO1xuICAgIHRoaXMucmVzdWx0c0xlbmd0aCA9IHJlc3VsdHNMZW5ndGg7XG4gICAgdGhpcy5hZ2dyZWdhdGVEYXRhID0gYWdncmVnYXRlRGF0YTtcbiAgfVxuXG4gIC8qKlxuICogRXhlY3V0ZXMgdGhlIGFjdHVhbCBkYXRhIHByb2Nlc3NpbmcgcGlwZWxpbmUuXG4gKiBIYW5kbGVzOiBjYWxjdWxhdGVkIGNvbHVtbnMsIGZpbHRlcmluZywgc29ydGluZywgcGFnaW5hdGlvbiwgZ3JvdXBpbmcsIGFnZ3JlZ2F0ZXMuXG4gKiBDYXRjaGVzIGVycm9ycyBhbmQgcmV0dXJucyB0byBBbmd1bGFyIFpvbmUgZm9yIFVJIHVwZGF0ZXMuXG4gKi9cbiAgcHJpdmF0ZSBleGVjdXRlRGF0YVByb2Nlc3NpbmcoZGF0YTogYW55LCBvYnNlcnZlcikge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5leGlzdHNBbnlDYWxjdWxhdGVkQ29sdW1uKCkpIHtcbiAgICAgICAgZGF0YSA9IHRoaXMuZ2V0Q29sdW1uQ2FsY3VsYXRlZERhdGEoZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy50YWJsZS5wYWdlYWJsZSkge1xuICAgICAgICBkYXRhID0gdGhpcy5nZXRDb2x1bW5WYWx1ZUZpbHRlckRhdGEoZGF0YSk7XG4gICAgICAgIGRhdGEgPSB0aGlzLmdldFF1aWNrRmlsdGVyRGF0YShkYXRhKTtcbiAgICAgICAgZGF0YSA9IHRoaXMuZ2V0U29ydGVkRGF0YShkYXRhKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBPYmplY3QuYXNzaWduKFtdLCBkYXRhKTtcblxuICAgICAgbGV0IHJlc3VsdHNMZW5ndGg6IG51bWJlcjtcbiAgICAgIGlmICh0aGlzLnRhYmxlLnBhZ2VhYmxlKSB7XG4gICAgICAgIGNvbnN0IHRvdGFsUmVjb3Jkc051bWJlciA9IHRoaXMudGFibGUuZ2V0VG90YWxSZWNvcmRzTnVtYmVyKCk7XG4gICAgICAgIHJlc3VsdHNMZW5ndGggPSB0b3RhbFJlY29yZHNOdW1iZXIgPz8gZGF0YS5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRzTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgICAgIGRhdGEgPSB0aGlzLmdldFBhZ2luYXRpb25EYXRhKGRhdGEpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy50YWJsZS5ncm91cGFibGUgJiYgIVV0aWwuaXNBcnJheUVtcHR5KHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheSkgJiYgZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRhdGEgPSB0aGlzLmdldEdyb3VwZWREYXRhKGRhdGEpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZW5kZXJlZERhdGEgPSBkYXRhO1xuXG4gICAgICBpZiAodGhpcy50YWJsZS52aXJ0dWFsU2Nyb2xsVmlld3BvcnQgJiYgIXRoaXMuX3BhZ2luYXRvcikge1xuICAgICAgICBpZiAodGhpcy50YWJsZS5zYXZlZFNjcm9sbFBvc2l0aW9uID09PSAwKSB7XG4gICAgICAgICAgZGF0YSA9IHRoaXMuZ2V0VmlydHVhbFNjcm9sbERhdGEoZGF0YSwgbmV3IE9uUmFuZ2VDaGFuZ2VWaXJ0dWFsU2Nyb2xsKHsgc3RhcnQ6IDAsIGVuZDogQ29kZXMuTElNSVRfU0NST0xMVklSVFVBTCB9KSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYWdncmVnYXRlRGF0YSA9IHRoaXMuZ2V0QWdncmVnYXRlc0RhdGEocmVuZGVyZWREYXRhKTtcblxuICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgLy8gIFJlLWVudGVyIEFuZ3VsYXIgWm9uZSB0byB1cGRhdGUgVUlcbiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlVGFibGVTdGF0ZShyZW5kZXJlZERhdGEsIHJlc3VsdHNMZW5ndGgsIGFnZ3JlZ2F0ZURhdGEpO1xuICAgICAgICB0aGlzLnRhYmxlLmxvYWRpbmdTZXJ2aWNlLnNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgICB0aGlzLnRhYmxlLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICBvYnNlcnZlci5uZXh0KGRhdGEpO1xuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgfSk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcign4p2MIEVycm9yIHdoaWxlIHByb2Nlc3NpbmcgZGF0YTonLCBlcnJvcik7XG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnRhYmxlLmxvYWRpbmdTZXJ2aWNlLnNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgICB0aGlzLnRhYmxlLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBnZXRHcm91cGVkRGF0YShkYXRhOiBhbnlbXSkge1xuICAgIGRhdGEgPSB0aGlzLmdldFN1Ykdyb3Vwc09mR3JvdXBlZFJvdyhkYXRhKTtcbiAgICAvKiogZGF0YSBjb250YWlucyByb3cgZ3JvdXAgaGVhZGVycyAoT1RhYmxlR3JvdXBlZFJvdykgYW5kIHRoZSBkYXRhIGJlbG9uZ2luZyB0byBleHBhbmRlZCBncm91cGVkIHJvd3MgKi9cbiAgICBkYXRhID0gdGhpcy5maWx0ZXJDb2xsYXBzZWRSb3dHcm91cChkYXRhKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHN1Ymdyb3VwcyBvZiBncm91cGVkIHJvd1xuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcmV0dXJucyBzdWJncm91cHMgb2YgZ3JvdXBlZCByb3dcbiAgICovXG4gIGdldFN1Ykdyb3Vwc09mR3JvdXBlZFJvdyhkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gZGF0YSA9IHRoaXMuZ2V0U3VibGV2ZWwoZGF0YSwgMCk7XG4gIH1cblxuICBnZXRBZ2dyZWdhdGVzRGF0YShkYXRhOiBhbnlbXSk6IGFueSB7XG4gICAgY29uc3Qgb2JqID0ge307XG5cbiAgICBpZiAodGhpcy5fdGFibGVPcHRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgdGhpcy5fdGFibGVPcHRpb25zLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBPQ29sdW1uKSA9PiB7XG5cbiAgICAgIGlmIChjb2x1bW4uYWdncmVnYXRlICYmIGNvbHVtbi52aXNpYmxlKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlT3JQcm9taXNlID0gdGhpcy5jYWxjdWxhdGVBZ2dyZWdhdGUoZGF0YSwgY29sdW1uLmF0dHIsIGNvbHVtbi5hZ2dyZWdhdGUub3BlcmF0b3IpO1xuXG4gICAgICAgIGlmICh2YWx1ZU9yUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICB2YWx1ZU9yUHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZWRWYWx1ZSA9PiB7XG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uYXR0cl0gPSByZXNvbHZlZFZhbHVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gY29uc29sZS5lcnJvcihgby10YWJsZS1jb2x1bW4tYWdncmVnYXRlOiBBc3luYyBhZ2dyZWdhdGUgZXJyb3IgaW4gY29sdW1uIFwiJHtjb2x1bW4uYXR0cn1cIiB1c2luZyBhZ2dyZWdhdGUgZnVuY3Rpb24gXCIke2NvbHVtbi5hZ2dyZWdhdGUub3BlcmF0b3J9XCI6YCwgZXJyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqW2NvbHVtbi5hdHRyXSA9IHZhbHVlT3JQcm9taXNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRoYXQgZ2V0IHZhbHVlIHRoZSBjb2x1bW5zIGNhbGN1bGF0ZWRcbiAgICogQHBhcmFtIGRhdGEgZGF0YSBvZiB0aGUgZGF0YWJhc2VcbiAgICovXG4gIGdldENvbHVtbkNhbGN1bGF0ZWREYXRhKGRhdGE6IGFueVtdKTogYW55W10ge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGNhbGN1bGF0ZWRDb2xzID0gdGhpcy5fdGFibGVPcHRpb25zLmNvbHVtbnMuZmlsdGVyKChvQ29sOiBPQ29sdW1uKSA9PiBvQ29sLnZpc2libGUgJiYgb0NvbC5jYWxjdWxhdGUgIT09IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIGRhdGEubWFwKChyb3c6IGFueSkgPT4ge1xuICAgICAgY2FsY3VsYXRlZENvbHMuZm9yRWFjaCgob0NvbHVtbjogT0NvbHVtbikgPT4ge1xuICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2Ygb0NvbHVtbi5jYWxjdWxhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdmFsdWUgPSBzZWxmLnRyYW5zZm9ybUZvcm11bGEob0NvbHVtbi5jYWxjdWxhdGUsIHJvdyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9Db2x1bW4uY2FsY3VsYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFsdWUgPSBvQ29sdW1uLmNhbGN1bGF0ZShyb3cpO1xuICAgICAgICB9XG4gICAgICAgIHJvd1tvQ29sdW1uLmF0dHJdID0gaXNOYU4odmFsdWUpID8gMCA6IHZhbHVlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcm93O1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRyYW5zZm9ybUZvcm11bGEoZm9ybXVsYUFyZywgcm93KTogc3RyaW5nIHtcbiAgICBsZXQgZm9ybXVsYSA9IGZvcm11bGFBcmc7XG4gICAgLy8gMS4gcmVwbGFjZSBjb2x1bW5zIGJ5IHZhbHVlcyBvZiByb3dcbiAgICBjb25zdCBjb2x1bW5zQXR0ciA9IHRoaXMuX3RhYmxlT3B0aW9ucy5jb2x1bW5zLm1hcCgob0NvbDogT0NvbHVtbikgPT4gb0NvbC5hdHRyKTtcbiAgICBjb2x1bW5zQXR0ci5mb3JFYWNoKChjb2x1bW46IHN0cmluZykgPT4ge1xuICAgICAgZm9ybXVsYSA9IGZvcm11bGEucmVwbGFjZShjb2x1bW4sIHJvd1tjb2x1bW5dKTtcbiAgICB9KTtcblxuICAgIGxldCByZXN1bHRGb3JtdWxhID0gJyc7XG4gICAgLy8gMi4gVHJhbnNmb3JtIGZvcm11bGFcbiAgICB0cnkge1xuICAgICAgcmVzdWx0Rm9ybXVsYSA9IChuZXcgRnVuY3Rpb24oJ3JldHVybiAnICsgZm9ybXVsYSkpKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignT3BlcmF0aW9uIGRlZmluZWQgaW4gdGhlIGNhbGN1bGF0ZWQgY29sdW1uIGlzIGluY29ycmVjdCAnKTtcbiAgICB9XG4gICAgLy8gMy4gUmV0dXJuIHJlc3VsdFxuICAgIHJldHVybiByZXN1bHRGb3JtdWxhO1xuICB9XG5cbiAgZ2V0UXVpY2tGaWx0ZXJEYXRhKGRhdGE6IGFueVtdKTogYW55W10ge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnF1aWNrRmlsdGVyKSAmJiB0aGlzLnF1aWNrRmlsdGVyLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpbHRlckRhdGEgPSAhdGhpcy5fdGFibGVPcHRpb25zLmZpbHRlckNhc2VTZW5zaXRpdmUgPyB0aGlzLnF1aWNrRmlsdGVyLnRvTG93ZXJDYXNlKCkgOiB0aGlzLnF1aWNrRmlsdGVyO1xuICAgICAgcmV0dXJuIGRhdGEuZmlsdGVyKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgLy8gR2V0dGluZyBjdXN0b20gY29sdW1ucyBmaWx0ZXIgY29sdW1ucyByZXN1bHRcbiAgICAgICAgY29uc3QgcGFzc0N1c3RvbUZpbHRlciA9IHRoaXMuZnVsZmlsbHNDdXN0b21GaWx0ZXJGdW5jdGlvbnMoZmlsdGVyRGF0YSwgaXRlbSk7XG4gICAgICAgIC8vIEdldHRpbmcgb3RoZXIgc2VhcmNoYWJsZSBjb2x1bW5zIHN0YW5kYXJkIHJlc3VsdFxuICAgICAgICBjb25zdCBwYXNzU2VhcmNoU3RyaW5nID0gdGhpcy5mdWxmaWxsc1F1aWNrZmlsdGVyKGZpbHRlckRhdGEsIGl0ZW0pO1xuICAgICAgICByZXR1cm4gcGFzc0N1c3RvbUZpbHRlciB8fCBwYXNzU2VhcmNoU3RyaW5nO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgfVxuXG4gIGdldFBhZ2luYXRpb25EYXRhKGRhdGE6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghdGhpcy5fcGFnaW5hdG9yIHx8IGlzTmFOKHRoaXMuX3BhZ2luYXRvci5wYWdlU2l6ZSkpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBsZXQgc3RhcnRJbmRleCA9IGlzTmFOKHRoaXMuX3BhZ2luYXRvci5wYWdlU2l6ZSkgPyAwIDogdGhpcy5fcGFnaW5hdG9yLnBhZ2VJbmRleCAqIHRoaXMuX3BhZ2luYXRvci5wYWdlU2l6ZTtcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwICYmIGRhdGEubGVuZ3RoIDwgc3RhcnRJbmRleCkge1xuICAgICAgc3RhcnRJbmRleCA9IDA7XG4gICAgICB0aGlzLl9wYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEuc3BsaWNlKHN0YXJ0SW5kZXgsIHRoaXMuX3BhZ2luYXRvci5wYWdlU2l6ZSk7XG4gIH1cblxuICBnZXRWaXJ0dWFsU2Nyb2xsRGF0YShkYXRhOiBhbnlbXSwgeDogT25SYW5nZUNoYW5nZVZpcnR1YWxTY3JvbGwpOiBhbnlbXSB7XG4gICAgcmV0dXJuIGRhdGEuc2xpY2UoeC5yYW5nZS5zdGFydCwgeC5yYW5nZS5lbmQpXG4gIH1cblxuICBkaXNjb25uZWN0KCkge1xuICAgIHRoaXMuZGF0YVRvdGFsc0NoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3F1aWNrRmlsdGVyQ2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fY29sdW1uVmFsdWVGaWx0ZXJDaGFuZ2UuY29tcGxldGUoKTtcbiAgICB0aGlzLmdyb3VwQnlDb2x1bW5DaGFuZ2UuY29tcGxldGUoKTtcbiAgICB0aGlzLl92aXJ0dWFsUGFnZUNoYW5nZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZ1bGZpbGxzQ3VzdG9tRmlsdGVyRnVuY3Rpb25zKGZpbHRlcjogc3RyaW5nLCBpdGVtOiBhbnkpIHtcbiAgICBjb25zdCBjdXN0b21GaWx0ZXJDb2xzID0gdGhpcy50YWJsZS5vVGFibGVPcHRpb25zLmNvbHVtbnMuZmlsdGVyKG9Db2wgPT4gb0NvbC51c2VDdXN0b21GaWx0ZXJGdW5jdGlvbigpKTtcbiAgICByZXR1cm4gY3VzdG9tRmlsdGVyQ29scy5zb21lKG9Db2wgPT4gb0NvbC5yZW5kZXJlci5maWx0ZXJGdW5jdGlvbihpdGVtW29Db2wuYXR0cl0sIGl0ZW0sIGZpbHRlcikpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZ1bGZpbGxzUXVpY2tmaWx0ZXIoZmlsdGVyOiBzdHJpbmcsIGl0ZW06IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLl90YWJsZU9wdGlvbnMuY29sdW1ucy5maWx0ZXIoKG9Db2w6IE9Db2x1bW4pID0+IG9Db2wudXNlUXVpY2tmaWx0ZXJGdW5jdGlvbigpKTtcbiAgICBsZXQgc2VhcmNoU3RyID0gY29sdW1ucy5tYXAoKG9Db2w6IE9Db2x1bW4pID0+IG9Db2wuZ2V0RmlsdGVyVmFsdWUoaXRlbVtvQ29sLmF0dHJdLCBpdGVtKS5qb2luKCcgJykpLmpvaW4oJyAnKTtcbiAgICBpZiAoIXRoaXMuX3RhYmxlT3B0aW9ucy5maWx0ZXJDYXNlU2Vuc2l0aXZlKSB7XG4gICAgICBzZWFyY2hTdHIgPSBzZWFyY2hTdHIudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlYXJjaFN0ci5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgLyoqIFJldHVybnMgYSBzb3J0ZWQgY29weSBvZiB0aGUgZGF0YWJhc2UgZGF0YS4gKi9cbiAgcHJvdGVjdGVkIGdldFNvcnRlZERhdGEoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCF0aGlzLl9zb3J0KSByZXR1cm4gZGF0YTtcbiAgICBjb25zdCByZW5kZXJlckRhdGEgPSB0aGlzLmdldERhdGFUb1NvcnQoZGF0YSk7XG4gICAgY29uc3Qgc29ydGVkRGF0YSA9IHRoaXMuX3NvcnQuZ2V0U29ydGVkRGF0YShyZW5kZXJlckRhdGEpO1xuXG4gICAgY29uc3QgdGFibGVLZXlzID0gdGhpcy50YWJsZS5nZXRLZXlzKCk7XG4gICAgY29uc3Qgb3JpZ2luYWxEYXRhU29ydGVkID0gW107XG5cbiAgICBzb3J0ZWREYXRhLmZvckVhY2goc29ydGVkRWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBrZXlzVmFsdWVzSW5Tb3J0RGF0YSA9IHRhYmxlS2V5cy5tYXAoZWxlbWVudCA9PiBzb3J0ZWRFbGVtZW50W2VsZW1lbnRdKTtcblxuICAgICAgbGV0IGkgPSAwO1xuICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgICB3aGlsZSAoaSA8IGRhdGEubGVuZ3RoICYmICFmb3VuZCkge1xuICAgICAgICBjb25zdCBrZXlzVmFsdWVzSW5EYXRhID0gdGFibGVLZXlzLm1hcChlbGVtZW50ID0+IGRhdGFbaV1bZWxlbWVudF0pO1xuICAgICAgICBpZiAoVXRpbC5pc0FycmF5RXF1YWwoa2V5c1ZhbHVlc0luU29ydERhdGEsIGtleXNWYWx1ZXNJbkRhdGEpKSB7XG4gICAgICAgICAgb3JpZ2luYWxEYXRhU29ydGVkLnB1c2goZGF0YVtpXSk7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gb3JpZ2luYWxEYXRhU29ydGVkO1xuXG4gIH1cblxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBkYXRhIHRoZSB0YWJsZSBzdG9yZXMuIE5vIGZpbHRlcnMgYXJlIGFwcGxpZWQuXG4gICAqL1xuICBnZXRUYWJsZURhdGEoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhYmFzZS5kYXRhO1xuICB9XG5cbiAgLyoqIFJldHVybiBkYXRhIG9mIHRoZSB2aXNpYmxlIGNvbHVtbnMgb2YgdGhlIHRhYmxlIHdpdGhvdXQgcmVuZGVyaW5nICovXG4gIGdldEN1cnJlbnREYXRhKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXREYXRhKCk7XG4gIH1cblxuICBnZXRDdXJyZW50QWxsRGF0YSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsRGF0YShmYWxzZSwgZmFsc2UpO1xuICB9XG5cbiAgLyoqIFJldHVybiBkYXRhIG9mIHRoZSB2aXNpYmxlIGNvbHVtbnMgb2YgdGhlIHRhYmxlICByZW5kZXJpbmcgKi9cbiAgZ2V0Q3VycmVudFJlbmRlcmVyRGF0YSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWREYXRhKHRoaXMucmVuZGVyZWREYXRhKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm4gYWxsIGRhdGEgb2YgdGhlIHRhYmxlIHJlbmRlcmluZyAqL1xuICBnZXRBbGxSZW5kZXJlckRhdGEoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLmdldEFsbERhdGEodHJ1ZSwgdHJ1ZSk7XG4gIH1cblxuICAvKiogUmV0dXJuIHNxbCB0eXBlcyBvZiB0aGUgY3VycmVudCBkYXRhICovXG4gIGdldCBzcWxUeXBlcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhYmFzZS5zcWxUeXBlcztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREYXRhKCkge1xuICAgIHJldHVybiB0aGlzLnJlbmRlcmVkRGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZW5kZXJlZERhdGEoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSB0aGlzLl90YWJsZU9wdGlvbnMuY29sdW1ucy5maWx0ZXIob0NvbCA9PiBvQ29sLnZpc2libGUpO1xuICAgIHJldHVybiBkYXRhLm1hcCgocm93KSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgIHZpc2libGVDb2x1bW5zLmZvckVhY2goKG9Db2w6IE9Db2x1bW4pID0+IHtcbiAgICAgICAgY29uc3QgdXNlUmVuZGVyZXIgPSBvQ29sLnJlbmRlcmVyICYmIG9Db2wucmVuZGVyZXIuZ2V0Q2VsbERhdGE7XG4gICAgICAgIG9ialtvQ29sLmF0dHJdID0gdXNlUmVuZGVyZXIgPyBvQ29sLnJlbmRlcmVyLmdldENlbGxEYXRhKHJvd1tvQ29sLmF0dHJdLCByb3cpIDogcm93W29Db2wuYXR0cl07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldERhdGFUb1NvcnQoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCF0aGlzLl9zb3J0KSByZXR1cm4gZGF0YTtcbiAgICBjb25zdCBzb3J0Q29sdW1ucyA9IHRoaXMuX3RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbHRlcihvQ29sID0+IG9Db2wudmlzaWJsZSAmJiB0aGlzLl9zb3J0LmFjdGl2ZUFycmF5Lm1hcCh4ID0+IHguaWQpLmluZGV4T2Yob0NvbC5hdHRyKSA+IC0xKTtcbiAgICBjb25zdCBleGlzdENvbHVtblRvVHJhc2Zvcm1Ub1NvcnQgPSBzb3J0Q29sdW1ucy5maWx0ZXIoKG9Db2w6IE9Db2x1bW4pID0+IChvQ29sLnR5cGUgPT09ICd0cmFuc2xhdGUnIHx8IG9Db2wudHlwZSA9PT0gJ3NlcnZpY2UnKSkubGVuZ3RoID4gMDtcbiAgICBpZiAoIWV4aXN0Q29sdW1uVG9UcmFzZm9ybVRvU29ydCkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHRoaXMudGFibGUuZ2V0S2V5cygpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIHNvcnRDb2x1bW5zLnB1c2godGhpcy50YWJsZS5nZXRPQ29sdW1uKGtleSkpO1xuICAgIH0pXG5cbiAgICByZXR1cm4gZGF0YS5tYXAoKHJvdykgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICBzb3J0Q29sdW1ucy5mb3JFYWNoKChvQ29sOiBPQ29sdW1uKSA9PiB7XG4gICAgICAgIGNvbnN0IHVzZVJlbmRlcmVyID0gb0NvbC5yZW5kZXJlciAmJiAob0NvbC50eXBlID09PSAndHJhbnNsYXRlJyB8fCBvQ29sLnR5cGUgPT09ICdzZXJ2aWNlJykgJiYgb0NvbC5yZW5kZXJlci5nZXRDZWxsRGF0YTtcbiAgICAgICAgb2JqW29Db2wuYXR0cl0gPSB1c2VSZW5kZXJlciA/IG9Db2wucmVuZGVyZXIuZ2V0Q2VsbERhdGEocm93W29Db2wuYXR0cl0sIHJvdykgOiByb3dbb0NvbC5hdHRyXTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRBbGxEYXRhKHVzaW5nUmVuZGVyZXJlcnM/OiBib29sZWFuLCBvbmx5VmlzaWJsZUNvbHVtbnM/OiBib29sZWFuKSB7XG4gICAgbGV0IHRhYmxlQ29sdW1ucyA9IHRoaXMuX3RhYmxlT3B0aW9ucy5jb2x1bW5zO1xuICAgIGlmIChvbmx5VmlzaWJsZUNvbHVtbnMpIHtcbiAgICAgIHRhYmxlQ29sdW1ucyA9IHRoaXMuX3RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbHRlcihvQ29sID0+IG9Db2wudmlzaWJsZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkRGF0YS5tYXAoKHJvdykgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICB0YWJsZUNvbHVtbnMuZm9yRWFjaCgob0NvbDogT0NvbHVtbikgPT4ge1xuICAgICAgICBjb25zdCB1c2VSZW5kZXJlciA9IHVzaW5nUmVuZGVyZXJlcnMgJiYgb0NvbC5yZW5kZXJlciAmJiBvQ29sLnJlbmRlcmVyLmdldENlbGxEYXRhO1xuICAgICAgICBvYmpbb0NvbC5hdHRyXSA9IHVzZVJlbmRlcmVyID8gb0NvbC5yZW5kZXJlci5nZXRDZWxsRGF0YShyb3dbb0NvbC5hdHRyXSwgcm93KSA6IHJvd1tvQ29sLmF0dHJdO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZW5kZXJlcnNEYXRhKGRhdGE6IGFueVtdLCB0YWJsZUNvbHVtbnM6IE9Db2x1bW5bXSk6IGFueVtdIHtcbiAgICByZXR1cm4gZGF0YS5tYXAoKHJvdykgPT4ge1xuICAgICAgLy8gcmVuZGVyIGVhY2ggY29sdW1uXG4gICAgICBjb25zdCBvYmogPSBPYmplY3QuYXNzaWduKHt9LCByb3cpO1xuICAgICAgdGFibGVDb2x1bW5zLmZvckVhY2goKG9Db2w6IE9Db2x1bW4pID0+IHtcbiAgICAgICAgb2JqW29Db2wuYXR0cl0gPSBvQ29sLnJlbmRlcmVyLmdldENlbGxEYXRhKHJvd1tvQ29sLmF0dHJdLCByb3cpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldENvbHVtbkRhdGEob2NvbHVtbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyZWREYXRhLm1hcCgocm93KSA9PiB7XG4gICAgICAvLyByZW5kZXIgZWFjaCBjb2x1bW5cbiAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgaWYgKG9jb2x1bW4pIHtcbiAgICAgICAgb2JqW29jb2x1bW5dID0gcm93W29jb2x1bW5dO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbiAgfVxuXG4gIGluaXRpYWxpemVDb2x1bW5zRmlsdGVycyhmaWx0ZXJzOiBPQ29sdW1uVmFsdWVGaWx0ZXJbXSkge1xuICAgIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzID0gW107XG4gICAgZmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICB0aGlzLmNvbHVtblZhbHVlRmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgfSk7XG4gICAgaWYgKCF0aGlzLnRhYmxlLnBhZ2VhYmxlICYmIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX2NvbHVtblZhbHVlRmlsdGVyQ2hhbmdlLm5leHQodGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMpO1xuICAgIH1cbiAgfVxuXG4gIGlzQ29sdW1uVmFsdWVGaWx0ZXJBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzLmxlbmd0aCAhPT0gMDtcbiAgfVxuXG4gIGdldENvbHVtblZhbHVlRmlsdGVycygpOiBPQ29sdW1uVmFsdWVGaWx0ZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzO1xuICB9XG5cbiAgZ2V0Q29sdW1uVmFsdWVGaWx0ZXJCeUF0dHIoYXR0cjogc3RyaW5nKTogT0NvbHVtblZhbHVlRmlsdGVyIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMuZmluZChpdGVtID0+IGl0ZW0uYXR0ciA9PT0gYXR0cik7XG4gIH1cblxuICBjbGVhckNvbHVtbkZpbHRlcnModHJpZ2dlcjogYm9vbGVhbiA9IHRydWUsIGNvbHVtbnNBdHRyPzogc3RyaW5nW10pIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29sdW1uc0F0dHIpKSB7XG4gICAgICB0aGlzLmNvbHVtblZhbHVlRmlsdGVycyA9IHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzLmZpbHRlcih4ID0+ICFjb2x1bW5zQXR0ci5pbmNsdWRlcyh4LmF0dHIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMgPSBbXTtcbiAgICB9XG4gICAgaWYgKHRyaWdnZXIpIHtcbiAgICAgIHRoaXMuX2NvbHVtblZhbHVlRmlsdGVyQ2hhbmdlLm5leHQodGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyQ29sdW1uRmlsdGVyKGF0dHI6IHN0cmluZywgdHJpZ2dlcjogYm9vbGVhbiA9IHRydWUpIHtcbiAgICB0aGlzLmNvbHVtblZhbHVlRmlsdGVycyA9IHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzLmZpbHRlcih4ID0+IHguYXR0ciAhPT0gYXR0cik7XG4gICAgaWYgKHRyaWdnZXIpIHtcbiAgICAgIHRoaXMuX2NvbHVtblZhbHVlRmlsdGVyQ2hhbmdlLm5leHQodGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMpO1xuICAgIH1cbiAgfVxuXG4gIGFkZENvbHVtbkZpbHRlcihmaWx0ZXI6IE9Db2x1bW5WYWx1ZUZpbHRlcikge1xuICAgIGNvbnN0IGV4aXN0aW5nRmlsdGVySW5kZXggPSB0aGlzLmNvbHVtblZhbHVlRmlsdGVycy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmF0dHIgPT09IGZpbHRlci5hdHRyKTtcbiAgICBpZiAoZXhpc3RpbmdGaWx0ZXJJbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLmNvbHVtblZhbHVlRmlsdGVycy5zcGxpY2UoZXhpc3RpbmdGaWx0ZXJJbmRleCwgMSwgZmlsdGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHZhbGlkRmlsdGVyID0gVXRpbC5pc0RlZmluZWQoZmlsdGVyLnZhbHVlcyk7XG4gICAgICBpZiAodmFsaWRGaWx0ZXIpIHtcbiAgICAgICAgc3dpdGNoIChmaWx0ZXIub3BlcmF0b3IpIHtcbiAgICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuSU46XG4gICAgICAgICAgICB2YWxpZEZpbHRlciA9IGZpbHRlci52YWx1ZXMubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5CRVRXRUVOOlxuICAgICAgICAgICAgdmFsaWRGaWx0ZXIgPSBmaWx0ZXIudmFsdWVzLmxlbmd0aCA9PT0gMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5FUVVBTDpcbiAgICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuTEVTU19FUVVBTDpcbiAgICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuTU9SRV9FUVVBTDpcbiAgICAgICAgICAgIHZhbGlkRmlsdGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB2YWxpZEZpbHRlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWxpZEZpbHRlcikge1xuICAgICAgICAgIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB0aGUgdGFibGUgaXMgcGFnaW5hdGVkLCBmaWx0ZXIgd2lsbCBiZSBhcHBsaWVkIG9uIHJlbW90ZSBxdWVyeVxuICAgIGlmICghdGhpcy50YWJsZS5wYWdlYWJsZSkge1xuICAgICAgdGhpcy5fY29sdW1uVmFsdWVGaWx0ZXJDaGFuZ2UubmV4dCh0aGlzLmNvbHVtblZhbHVlRmlsdGVycyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29sdW1uVmFsdWVGaWx0ZXJEYXRhKGRhdGE6IGFueVtdKTogYW55W10ge1xuICAgIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlckNvbHVtbiA9IHRoaXMudGFibGUub1RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5hdHRyID09PSBmaWx0ZXIuYXR0cik7XG4gICAgICBpZiAoZmlsdGVyQ29sdW1uKSB7XG4gICAgICAgIHN3aXRjaCAoZmlsdGVyLm9wZXJhdG9yKSB7XG4gICAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLklOOlxuICAgICAgICAgICAgY29uc3QgZmlsdGVyVmFsdWVzID0gKGZpbHRlci52YWx1ZXMgfHwgW10pLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+XG4gICAgICAgICAgICAgIHByZXZpb3VzLmNvbmNhdChmaWx0ZXJDb2x1bW4uZ2V0RmlsdGVyVmFsdWUoY3VycmVudCkubWFwKGYgPT4gVXRpbC5ub3JtYWxpemVTdHJpbmcoZikpKSwgW10pO1xuXG4gICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoZmlsdGVyQ29sdW1uLnJlbmRlcmVyICYmIGZpbHRlckNvbHVtbi5yZW5kZXJlci5maWx0ZXJGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJDb2x1bW4ucmVuZGVyZXIuZmlsdGVyRnVuY3Rpb24oaXRlbVtmaWx0ZXIuYXR0cl0sIGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbFZhbHVlcyA9IGZpbHRlckNvbHVtbi5nZXRGaWx0ZXJWYWx1ZShpdGVtW2ZpbHRlci5hdHRyXSwgaXRlbSkubWFwKGYgPT4gVXRpbC5ub3JtYWxpemVTdHJpbmcoZikpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJWYWx1ZXMuc29tZSh2YWx1ZSA9PiBjb2xWYWx1ZXMuaW5kZXhPZih2YWx1ZSkgIT09IC0xKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuRVFVQUw6XG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSBVdGlsLm5vcm1hbGl6ZVN0cmluZyhmaWx0ZXIudmFsdWVzKTtcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY29sVmFsdWVzID0gZmlsdGVyQ29sdW1uLmdldEZpbHRlclZhbHVlKGl0ZW1bZmlsdGVyLmF0dHJdLCBpdGVtKS5tYXAoZiA9PiBVdGlsLm5vcm1hbGl6ZVN0cmluZyhmKSk7XG4gICAgICAgICAgICAgIGxldCByZWdFeHA7XG4gICAgICAgICAgICAgIGlmIChub3JtYWxpemVkVmFsdWUuaW5jbHVkZXMoJyonKSkge1xuICAgICAgICAgICAgICAgIHJlZ0V4cCA9IG5ldyBSZWdFeHAoJ14nICsgbm9ybWFsaXplZFZhbHVlLnNwbGl0KCcqJykuam9pbignLionKSArICckJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGNvbFZhbHVlcy5zb21lKGNvbFZhbHVlID0+IHJlZ0V4cCA/IHJlZ0V4cC50ZXN0KGNvbFZhbHVlKSA6IGNvbFZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMobm9ybWFsaXplZFZhbHVlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5CRVRXRUVOOlxuICAgICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKGl0ZW0gPT4gaXRlbVtmaWx0ZXIuYXR0cl0gPj0gZmlsdGVyLnZhbHVlc1swXSAmJiBpdGVtW2ZpbHRlci5hdHRyXSA8PSBmaWx0ZXIudmFsdWVzWzFdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5NT1JFX0VRVUFMOlxuICAgICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKGl0ZW0gPT4gaXRlbVtmaWx0ZXIuYXR0cl0gPj0gZmlsdGVyLnZhbHVlcyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuTEVTU19FUVVBTDpcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhLmZpbHRlcihpdGVtID0+IGl0ZW1bZmlsdGVyLmF0dHJdIDw9IGZpbHRlci52YWx1ZXMpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGdldEFnZ3JlZ2F0ZURhdGEoY29sdW1uOiBPQ29sdW1uKSB7XG4gICAgY29uc3Qgb2JqID0ge307XG4gICAgbGV0IHRvdGFsVmFsdWUgPSAnJztcblxuICAgIGlmICh0eXBlb2YgdGhpcy5fdGFibGVPcHRpb25zID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIG5ldyBBcnJheShvYmopO1xuICAgIH1cbiAgICB0b3RhbFZhbHVlID0gdGhpcy5hZ2dyZWdhdGVEYXRhW2NvbHVtbi5hdHRyXTtcbiAgICByZXR1cm4gdG90YWxWYWx1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYWxjdWxhdGVBZ2dyZWdhdGUoZGF0YTogYW55W10sIGNvbHVtbkF0dHI6IHN0cmluZywgb3BlcmF0b3I6IHN0cmluZyB8IEFnZ3JlZ2F0ZUZ1bmN0aW9uKTogbnVtYmVyIHwgUHJvbWlzZTxudW1iZXI+IHtcbiAgICBsZXQgcmVzdWx0QWdncmVnYXRlO1xuICAgIGlmICh0eXBlb2Ygb3BlcmF0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBzd2l0Y2ggKG9wZXJhdG9yLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSAnY291bnQnOlxuICAgICAgICAgIHJlc3VsdEFnZ3JlZ2F0ZSA9IHRoaXMuY291bnQoY29sdW1uQXR0ciwgZGF0YSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21pbic6XG4gICAgICAgICAgcmVzdWx0QWdncmVnYXRlID0gdGhpcy5taW4oY29sdW1uQXR0ciwgZGF0YSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21heCc6XG4gICAgICAgICAgcmVzdWx0QWdncmVnYXRlID0gdGhpcy5tYXgoY29sdW1uQXR0ciwgZGF0YSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F2Zyc6XG4gICAgICAgICAgcmVzdWx0QWdncmVnYXRlID0gdGhpcy5hdmcoY29sdW1uQXR0ciwgZGF0YSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVzdWx0QWdncmVnYXRlID0gdGhpcy5zdW0oY29sdW1uQXR0ciwgZGF0YSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbHVtbkRhdGE6IGFueVtdID0gdGhpcy5nZXRDb2x1bW5EYXRhKGNvbHVtbkF0dHIpO1xuICAgICAgaWYgKHR5cGVvZiBvcGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXN1bHRBZ2dyZWdhdGUgPSBvcGVyYXRvcihjb2x1bW5EYXRhLCBjb2x1bW5BdHRyLCB0aGlzLnRhYmxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdEFnZ3JlZ2F0ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdW0oY29sdW1uLCBkYXRhKTogbnVtYmVyIHtcbiAgICBsZXQgdmFsdWUgPSAwO1xuICAgIGlmIChkYXRhKSB7XG4gICAgICAvL0lmIHRoZSBkYXRhIGlzIGdyb3VwZWQsIHRoZSB2YWx1ZXMg4oCL4oCLb2YgdGhlIHN1Ymdyb3VwcyBpbiBsZXZlbCAxIGFyZSBzdW1tZWRcbiAgICAgIGlmIChkYXRhWzBdIGluc3RhbmNlb2YgT1RhYmxlR3JvdXBlZFJvdykge1xuICAgICAgICB0aGlzLmdldERhdGFGcm9tRmlyc3RMZXZlbFRhYmxlR3JvdXBSb3coZGF0YSkuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICB2YWx1ZSA9IHguZ2V0Q29sdW1uQWdncmVnYXRlRGF0YShjb2x1bW4pLnJlZHVjZSgoYWN1bXVsYXRvciwgY3VycmVudFZhbHVlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYWN1bXVsYXRvciArIChpc05hTihjdXJyZW50VmFsdWVbY29sdW1uXSkgPyAwIDogY3VycmVudFZhbHVlW2NvbHVtbl0pO1xuICAgICAgICAgIH0sIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IGRhdGEucmVkdWNlKChhY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUpID0+IHtcbiAgICAgICAgICByZXR1cm4gYWN1bXVsYXRvciArIChpc05hTihjdXJyZW50VmFsdWVbY29sdW1uXSkgPyAwIDogY3VycmVudFZhbHVlW2NvbHVtbl0pO1xuICAgICAgICB9LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiArKHZhbHVlKS50b0ZpeGVkKDIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvdW50KGNvbHVtbiwgZGF0YSk6IG51bWJlciB7XG4gICAgbGV0IHZhbHVlID0gMDtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgLy9JZiB0aGUgZGF0YSBpcyBncm91cGVkLCB0aGUgY291bnQgaXMgY2FsY3VsYXRlZCBieSBhZGRpbmcgdGhlIGNvdW50cyBmb3IgZWFjaCBzdWJncm91cCBpbiBsZXZlbCAxXG4gICAgICBpZiAoZGF0YVswXSBpbnN0YW5jZW9mIE9UYWJsZUdyb3VwZWRSb3cpIHtcbiAgICAgICAgdGhpcy5nZXREYXRhRnJvbUZpcnN0TGV2ZWxUYWJsZUdyb3VwUm93KGRhdGEpLmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgdmFsdWUgPSB4LmdldENvbHVtbkFnZ3JlZ2F0ZURhdGEoY29sdW1uKS5yZWR1Y2UoKGFjdW11bGF0b3IpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhY3VtdWxhdG9yICsgMTtcbiAgICAgICAgICB9LCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBkYXRhLnJlZHVjZSgoYWN1bXVsYXRvcikgPT4ge1xuICAgICAgICAgIHJldHVybiBhY3VtdWxhdG9yICsgMTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhdmcoY29sdW1uLCBkYXRhKTogbnVtYmVyIHtcbiAgICBjb25zdCB0b3RhbFN1bSA9IHRoaXMuc3VtKGNvbHVtbiwgZGF0YSk7XG4gICAgY29uc3QgdG90YWxDb3VudCA9IHRoaXMuY291bnQoY29sdW1uLCBkYXRhKTtcbiAgICByZXR1cm4gKygodG90YWxTdW0gPT09IDAgfHwgdG90YWxDb3VudCA9PT0gMCkgPyAwIDogKHRvdGFsU3VtIC8gdG90YWxDb3VudCkpLnRvRml4ZWQoMik7XG5cbiAgfVxuXG4gIHByb3RlY3RlZCBtaW4oY29sdW1uLCBkYXRhKTogbnVtYmVyIHtcbiAgICBsZXQgdGVtcE1pbiA9IFtdO1xuICAgIC8vSWYgdGhlIGRhdGEgaXMgZ3JvdXBlZCwgdGhlIG1pbmltdW0gaXMgY2FsY3VsYXRlZCB3aXRoIHRoZSBtaW5pbXVtIG9mIGVhY2ggc3ViZ3JvdXAgaW4gbGV2ZWwgMVxuICAgIGlmIChkYXRhWzBdIGluc3RhbmNlb2YgT1RhYmxlR3JvdXBlZFJvdykge1xuICAgICAgdGVtcE1pbiA9IHRoaXMuZ2V0RGF0YUZyb21GaXJzdExldmVsVGFibGVHcm91cFJvdyhkYXRhKS5tYXAoeCA9PiB7XG4gICAgICAgIHJldHVybiBNYXRoLm1pbiguLi54LmdldENvbHVtbkFnZ3JlZ2F0ZURhdGEoY29sdW1uKS5tYXAoeCA9PiB4W2NvbHVtbl0pKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZW1wTWluID0gZGF0YS5tYXAoeCA9PiB4W2NvbHVtbl0pO1xuICAgIH1cblxuICAgIHJldHVybiB0ZW1wTWluLmxlbmd0aCA+IDAgPyBNYXRoLm1pbiguLi50ZW1wTWluKSA6IDA7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWF4KGNvbHVtbiwgZGF0YSk6IG51bWJlciB7XG4gICAgbGV0IHRlbXBNYXggPSBbXTtcbiAgICBpZiAoZGF0YVswXSBpbnN0YW5jZW9mIE9UYWJsZUdyb3VwZWRSb3cpIHtcbiAgICAgIC8vSWYgdGhlIGRhdGEgYXJlIGdyb3VwZWQsIHRoZSBtYXhpbXVtIGlzIGNhbGN1bGF0ZWQgd2l0aCB0aGUgbWF4aW11bSBvZiBlYWNoIHN1Ymdyb3VwIGluIGxldmVsIDFcbiAgICAgIHRlbXBNYXggPSB0aGlzLmdldERhdGFGcm9tRmlyc3RMZXZlbFRhYmxlR3JvdXBSb3coZGF0YSkubWFwKHggPT4ge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoLi4ueC5nZXRDb2x1bW5BZ2dyZWdhdGVEYXRhKGNvbHVtbikubWFwKHggPT4geFtjb2x1bW5dKSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGVtcE1heCA9IGRhdGEubWFwKHggPT4geFtjb2x1bW5dKTtcbiAgICB9XG4gICAgcmV0dXJuIHRlbXBNYXgubGVuZ3RoID4gMCA/IE1hdGgubWF4KC4uLnRlbXBNYXgpIDogMDtcbiAgfVxuXG4gIHByaXZhdGUgaXNGaXJzdExldmVsVGFibGVHcm91cFJvdyh0YWJsZVJvd0dyb3VwRGF0YTogYW55KSB7XG4gICAgcmV0dXJuIHRhYmxlUm93R3JvdXBEYXRhIGluc3RhbmNlb2YgT1RhYmxlR3JvdXBlZFJvdyAmJiB0YWJsZVJvd0dyb3VwRGF0YS5sZXZlbCA9PT0gMTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF0YUZyb21GaXJzdExldmVsVGFibGVHcm91cFJvdyhkYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoeCA9PiB0aGlzLmlzRmlyc3RMZXZlbFRhYmxlR3JvdXBSb3coeCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGV4aXN0c0FueUNhbGN1bGF0ZWRDb2x1bW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbmQoKG9Db2w6IE9Db2x1bW4pID0+IG9Db2wuY2FsY3VsYXRlICE9PSB1bmRlZmluZWQpICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICB1cGRhdGVSZW5kZXJlZFJvd0RhdGEocm93RGF0YTogYW55KSB7XG4gICAgY29uc3QgdGFibGVLZXlzID0gdGhpcy50YWJsZS5nZXRLZXlzKCk7XG4gICAgY29uc3QgcmVjb3JkID0gdGhpcy5yZW5kZXJlZERhdGEuZmluZCgoZGF0YTogYW55KSA9PiB7XG4gICAgICBsZXQgZm91bmQgPSB0cnVlO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRhYmxlS2V5cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSB0YWJsZUtleXNbaV07XG4gICAgICAgIGlmIChkYXRhW2tleV0gIT09IHJvd0RhdGFba2V5XSkge1xuICAgICAgICAgIGZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3VuZDtcbiAgICB9KTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQocmVjb3JkKSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihyZWNvcmQsIHJvd0RhdGEpO1xuICAgIH1cbiAgfVxuXG5cbiAgcHJpdmF0ZSBnZXREYXRhSW5mb3JtYXRpb25CeUdyb3VwKGRhdGE6IGFueVtdLCBsZXZlbDogbnVtYmVyKSB7XG4gICAgY29uc3QgcmVjb3JkSGFzaCA9IHt9O1xuICAgIGRhdGEuZm9yRWFjaCgocm93LCBpKSA9PiB7XG4gICAgICBjb25zdCBrZXlzID0ge307XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBsZXZlbDsgaSsrKSB7XG4gICAgICAgIGtleXNbdGhpcy50YWJsZS5ncm91cGVkQ29sdW1uc0FycmF5W2ldXSA9IHRoaXMudGFibGUuZ2V0Q29sdW1uRGF0YUJ5QXR0cih0aGlzLnRhYmxlLmdyb3VwZWRDb2x1bW5zQXJyYXlbaV0sIHJvdyk7XG4gICAgICB9XG4gICAgICBjb25zdCByZWNvcmRLZXkgPSBKU09OLnN0cmluZ2lmeShrZXlzKTtcbiAgICAgIGlmIChyZWNvcmRIYXNoLmhhc093blByb3BlcnR5KHJlY29yZEtleSkpIHtcbiAgICAgICAgcmVjb3JkSGFzaFtyZWNvcmRLZXldLnB1c2goaSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWNvcmRIYXNoW3JlY29yZEtleV0gPSBbaV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlY29yZEhhc2g7XG4gIH1cblxuICBwcml2YXRlIHJlY2FsY3VsYXRlQ29sdW1uQWdncmVnYXRlKGNvbHVtbkF0dHI6IHN0cmluZywgcm93OiBPVGFibGVHcm91cGVkUm93KSB7XG4gICAgY29uc3QgYWdncmVnYXRlQ29uZiA9IHJvdy5nZXRBY3RpdmVDb2x1bW5BZ2dyZWdhdGVDb25maWd1cmF0aW9uKGNvbHVtbkF0dHIpO1xuICAgIGNvbnN0IGRhdGEgPSByb3cuZ2V0Q29sdW1uQWdncmVnYXRlRGF0YShjb2x1bW5BdHRyKTtcbiAgICBjb25zdCB2YWx1ZU9yUHJvbWlzZSA9IHRoaXMuY2FsY3VsYXRlQWdncmVnYXRlKGRhdGEsIGFnZ3JlZ2F0ZUNvbmYuYXR0ciwgYWdncmVnYXRlQ29uZi5hZ2dyZWdhdGVGdW5jdGlvbiB8fCBhZ2dyZWdhdGVDb25mLmFnZ3JlZ2F0ZSk7XG5cbiAgICBpZiAodmFsdWVPclByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICB2YWx1ZU9yUHJvbWlzZVxuICAgICAgICAudGhlbih2YWx1ZSA9PiB7XG4gICAgICAgICAgcm93LnNldENvbHVtbkFnZ3JlZ2F0ZVZhbHVlKGNvbHVtbkF0dHIsIHZhbHVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVyciA9PiBjb25zb2xlLmVycm9yKGBvLXRhYmxlLWNvbHVtbi1hZ2dyZWdhdGU6IEFzeW5jIGFnZ3JlZ2F0ZSBlcnJvciBpbiBjb2x1bW4gXCIke2NvbHVtbkF0dHJ9XCIgdXNpbmcgYWdncmVnYXRlIGZ1bmN0aW9uIFwiJHthZ2dyZWdhdGVDb25mLmFnZ3JlZ2F0ZUZ1bmN0aW9ufVwiOmAsIGVycikpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHJvdy5zZXRDb2x1bW5BZ2dyZWdhdGVWYWx1ZShjb2x1bW5BdHRyLCB2YWx1ZU9yUHJvbWlzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdWJsZXZlbChkYXRhOiBhbnlbXSwgbGV2ZWw6IG51bWJlciwgcGFyZW50PzogT1RhYmxlR3JvdXBlZFJvdyk6IGFueVtdIHtcbiAgICBpZiAobGV2ZWwgPj0gdGhpcy50YWJsZS5ncm91cGVkQ29sdW1uc0FycmF5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGNvbnN0IHJlY29yZEhhc2ggPSB0aGlzLmdldERhdGFJbmZvcm1hdGlvbkJ5R3JvdXAoZGF0YSwgbGV2ZWwpO1xuXG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIE9iamVjdC5rZXlzKHJlY29yZEhhc2gpLmZvckVhY2gocmVjb3JkS2V5ID0+IHtcblxuICAgICAgY29uc3Qgcm93ID0gbmV3IE9UYWJsZUdyb3VwZWRSb3coe1xuICAgICAgICBjb2x1bW46IHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheVtsZXZlbF0sXG4gICAgICAgIGtleXNBc1N0cmluZzogcmVjb3JkS2V5LFxuICAgICAgICBsZXZlbDogbGV2ZWwgKyAxLFxuICAgICAgICBwYXJlbnQ6IHBhcmVudFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZ3JvdXBlZFJvd3NTdWJzY3JpcHRpb24uYWRkKHJvdy5hZ2dyZWdhdGVGdW5jdGlvbkNoYW5nZS5zdWJzY3JpYmUoYXJnID0+IHtcbiAgICAgICAgaWYgKGFyZy5jaGFuZ2VBbGxHcm91cGVkUm93cykge1xuICAgICAgICAgIHRoaXMuYWN0aXZlQWdncmVnYXRlc1thcmcuY29sdW1uQXR0cl0gPSBhcmcuYWN0aXZlQWdncmVnYXRlO1xuICAgICAgICAgIHRoaXMucmVuZGVyZWREYXRhLmZpbHRlcihyb3cgPT4gcm93IGluc3RhbmNlb2YgT1RhYmxlR3JvdXBlZFJvdykuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgcm93LnNldENvbHVtbkFjdGl2ZUFnZ3JlZ2F0ZUZ1bmN0aW9uKGFyZy5jb2x1bW5BdHRyLCBhcmcuYWN0aXZlQWdncmVnYXRlLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlQ29sdW1uQWdncmVnYXRlKGFyZy5jb2x1bW5BdHRyLCByb3cpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVDb2x1bW5BZ2dyZWdhdGUoYXJnLmNvbHVtbkF0dHIsIGFyZy5yb3cpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgICBjb25zdCBhZmZlY3RlZEluZGV4ZXMgPSByZWNvcmRIYXNoW3Jvdy5rZXlzQXNTdHJpbmddO1xuICAgICAgY29uc3QgZ3JvdXBEYXRhID0gZGF0YS5maWx0ZXIoKHJvdywgaW5kZXgpID0+IGFmZmVjdGVkSW5kZXhlcy5pbmNsdWRlcyhpbmRleCkpO1xuICAgICAgdGhpcy50YWJsZS52aXNpYmxlQ29sQXJyYXkuZm9yRWFjaCgoY29sdW1uQXR0ciwgaSkgPT4ge1xuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIHJvdy50aXRsZSA9IHRoaXMuZ2V0VGV4dEdyb3VwUm93KHJvdywgYWZmZWN0ZWRJbmRleGVzLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXNlQ29sdW1uQWdncmVnYXRlID0gdGhpcy50YWJsZS51c2VDb2x1bW5Hcm91cGluZ0FnZ3JlZ2F0ZShjb2x1bW5BdHRyKTtcbiAgICAgICAgaWYgKHVzZUNvbHVtbkFnZ3JlZ2F0ZSkge1xuICAgICAgICAgIHJvdy5pbml0aWFsaXplQ29sdW1uQWdncmVnYXRlKGNvbHVtbkF0dHIsIHRoaXMudGFibGUuZ2V0Q29sdW1uR3JvdXBpbmdDb21wb25lbnQoY29sdW1uQXR0cikpO1xuXG4gICAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuYWN0aXZlQWdncmVnYXRlc1tjb2x1bW5BdHRyXSkpIHtcbiAgICAgICAgICAgIHJvdy5zZXRDb2x1bW5BY3RpdmVBZ2dyZWdhdGVGdW5jdGlvbihjb2x1bW5BdHRyLCB0aGlzLmFjdGl2ZUFnZ3JlZ2F0ZXNbY29sdW1uQXR0cl0sIGZhbHNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocm93Lmhhc0FjdGl2ZUFnZ3JlZ2F0ZShjb2x1bW5BdHRyKSkge1xuICAgICAgICAgICAgY29uc3QgYWdncmVnYXRlRGF0YSA9IGdyb3VwRGF0YS5tYXAoeCA9PiB7IGNvbnN0IG9iaiA9IHt9OyBvYmpbY29sdW1uQXR0cl0gPSB4W2NvbHVtbkF0dHJdOyByZXR1cm4gb2JqOyB9KTtcbiAgICAgICAgICAgIHJvdy5zZXRDb2x1bW5BZ2dyZWdhdGVEYXRhKGNvbHVtbkF0dHIsIGFnZ3JlZ2F0ZURhdGEpO1xuXG4gICAgICAgICAgICBjb25zdCBhZ2dyZWdhdGVDb25mID0gcm93LmdldEFjdGl2ZUNvbHVtbkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24oY29sdW1uQXR0cik7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZU9yUHJvbWlzZSA9IHRoaXMuY2FsY3VsYXRlQWdncmVnYXRlKFxuICAgICAgICAgICAgICBhZ2dyZWdhdGVEYXRhLFxuICAgICAgICAgICAgICBhZ2dyZWdhdGVDb25mLmF0dHIsXG4gICAgICAgICAgICAgIGFnZ3JlZ2F0ZUNvbmYuYWdncmVnYXRlRnVuY3Rpb24gfHwgYWdncmVnYXRlQ29uZi5hZ2dyZWdhdGVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZU9yUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgLy8gSWYgaXQgcmV0dXJucyBhIFByb21pc2UsIHdlIHdhaXQgZm9yIGl0cyByZXNvbHV0aW9uIHdpdGhvdXQgYmxvY2tpbmcgZXhlY3V0aW9uLlxuICAgICAgICAgICAgICB2YWx1ZU9yUHJvbWlzZVxuICAgICAgICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgIHJvdy5zZXRDb2x1bW5BZ2dyZWdhdGVWYWx1ZShjb2x1bW5BdHRyLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IGNvbnNvbGUuZXJyb3IoYG8tdGFibGUtY29sdW1ucy1ncm91cGluZy1jb2x1bW46IEFzeW5jIGFnZ3JlZ2F0ZSBlcnJvciBpbiBjb2x1bW4gXCIke2NvbHVtbkF0dHJ9XCIgdXNpbmcgYWdncmVnYXRlIGZ1bmN0aW9uIFwiJHthZ2dyZWdhdGVDb25mLmFnZ3JlZ2F0ZUZ1bmN0aW9ufVwiOmAsIGVycikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gSWYgaXQncyBhIHN5bmNocm9ub3VzIHJlc3VsdCwgd2UgYXNzaWduIGl0IGRpcmVjdGx5XG4gICAgICAgICAgICAgIHJvdy5zZXRDb2x1bW5BZ2dyZWdhdGVWYWx1ZShjb2x1bW5BdHRyLCB2YWx1ZU9yUHJvbWlzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJvdy5leHBhbmRlZCA9IHRoaXMuZ2V0RXhwYW5zaW9uU3RhdGUocm93KTtcbiAgICAgIGNvbnN0IHN1Ykdyb3VwID0gdGhpcy5nZXRTdWJsZXZlbChncm91cERhdGEsIGxldmVsICsgMSwgcm93KTtcbiAgICAgIHN1Ykdyb3VwLnVuc2hpZnQocm93KTtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoc3ViR3JvdXApO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBjb2xsYXBzZWQgcm93IGdyb3VwXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEByZXR1cm5zIGNvbGxhcHNlZCByb3cgZ3JvdXBcbiAgICovXG4gIGZpbHRlckNvbGxhcHNlZFJvd0dyb3VwKGRhdGE6IGFueSk6IGFueVtdIHtcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoKHJvdzogYW55KSA9PiAocm93IGluc3RhbmNlb2YgT1RhYmxlR3JvdXBlZFJvdykgPyByb3cudmlzaWJsZSA6IHRoaXMuYmVsb25nc1RvRXhwYW5kZWRHcm91cGVkUm93KGRhdGEsIHJvdykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJlbG9uZ3MgdG8gYW4gZXhwYW5kZWQgZ3JvdXBlZCByb3dcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHBhcmFtIHJvd1xuICAgKiBAcmV0dXJucyB0cnVlIGlmIHRvIGV4cGFuZGVkIGdyb3VwZWQgcm93XG4gICAqL1xuICBiZWxvbmdzVG9FeHBhbmRlZEdyb3VwZWRSb3coZGF0YTogYW55LCByb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIGxldCBwYXJlbnQ6IE9UYWJsZUdyb3VwZWRSb3c7XG4gICAgbGV0IG1hdGNoID0gZmFsc2U7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRhdGEubGVuZ3RoICYmICFtYXRjaDsgaW5kZXgrKykge1xuICAgICAgaWYgKGRhdGFbaW5kZXhdIGluc3RhbmNlb2YgT1RhYmxlR3JvdXBlZFJvdykge1xuICAgICAgICBwYXJlbnQgPSBkYXRhW2luZGV4XTtcbiAgICAgIH0gZWxzZSBpZiAoVXRpbC5pc0VxdWl2YWxlbnQoZGF0YVtpbmRleF0sIHJvdykpIHtcbiAgICAgICAgbWF0Y2ggPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQocGFyZW50KSA/IChwYXJlbnQudmlzaWJsZSAmJiBwYXJlbnQuZXhwYW5kZWQpIDogdHJ1ZTtcbiAgfVxuXG4gIHVwZGF0ZUdyb3VwZWRDb2x1bW5zKCkge1xuICAgIHRoaXMudGFibGUubG9hZGluZ1NlcnZpY2Uuc2V0TG9hZGluZyh0cnVlKTtcbiAgICB0aGlzLmdyb3VwQnlDb2x1bW5DaGFuZ2UubmV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgZ3JvdXAgYnkgY29sdW1uXG4gICAqIEBwYXJhbSByb3dHcm91cFxuICAgKi9cbiAgdG9nZ2xlR3JvdXBCeUNvbHVtbihyb3dHcm91cDogT1RhYmxlR3JvdXBlZFJvdykge1xuICAgIGlmIChyb3dHcm91cC5leHBhbmRTYW1lTGV2ZWwodGhpcy50YWJsZS5leHBhbmRHcm91cHNTYW1lTGV2ZWwpKSB7XG4gICAgICB0aGlzLmxldmVsc0V4cGFuc2lvblN0YXRlW3Jvd0dyb3VwLmxldmVsXSA9ICFyb3dHcm91cC5leHBhbmRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZVJvd0dyb3VwZWQocm93R3JvdXApO1xuICAgIH1cbiAgICB0aGlzLmdyb3VwQnlDb2x1bW5DaGFuZ2UubmV4dCgpO1xuICB9XG5cbiAgc2V0Um93R3JvdXBMZXZlbEV4cGFuc2lvbihyb3dHcm91cDogT1RhYmxlR3JvdXBlZFJvdywgdmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmxldmVsc0V4cGFuc2lvblN0YXRlW3Jvd0dyb3VwLmxldmVsXSA9IHZhbHVlO1xuICAgIHRoaXMuZ3JvdXBCeUNvbHVtbkNoYW5nZS5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRlUm93R3JvdXBlZChyb3dHcm91cDogT1RhYmxlR3JvdXBlZFJvdykge1xuICAgIGNvbnN0IHN0YXRlUm93R3JvdXBlZCA9IHRoaXMuZ3JvdXBlZFJvd1N0YXRlLmZpbmQocm93ID0+IHJvd0dyb3VwLmtleXNBc1N0cmluZyA9PT0gcm93LmtleXNBc1N0cmluZyAmJiBKU09OLnN0cmluZ2lmeShyb3dHcm91cC5wYXJlbnQpID09PSBKU09OLnN0cmluZ2lmeShyb3cucGFyZW50KSk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHN0YXRlUm93R3JvdXBlZCkpIHtcbiAgICAgIHN0YXRlUm93R3JvdXBlZC5leHBhbmRlZCA9ICFzdGF0ZVJvd0dyb3VwZWQuZXhwYW5kZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvd0dyb3VwLmV4cGFuZGVkID0gIXJvd0dyb3VwLmV4cGFuZGVkO1xuICAgICAgdGhpcy5ncm91cGVkUm93U3RhdGUucHVzaChyb3dHcm91cCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRUZXh0R3JvdXBSb3coZ3JvdXA6IE9UYWJsZUdyb3VwZWRSb3csIHRvdGFsQ291bnRzOiBudW1iZXIpIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheVtncm91cC5sZXZlbCAtIDFdO1xuICAgIGxldCB2YWx1ZSA9IEpTT04ucGFyc2UoZ3JvdXAua2V5c0FzU3RyaW5nKVt0aGlzLnRhYmxlLmdyb3VwZWRDb2x1bW5zQXJyYXlbZ3JvdXAubGV2ZWwgLSAxXV07XG5cbiAgICBjb25zdCBvQ29sID0gdGhpcy50YWJsZS5nZXRPQ29sdW1uKGZpZWxkKTtcblxuICAgIGlmICghdmFsdWUgJiYgVXRpbC5pc0RlZmluZWQob0NvbC5yZW5kZXJlcikgJiYgKHRoaXMudGFibGUgYXMgYW55KS5pc0luc3RhbmNlT2ZPVGFibGVDZWxsUmVuZGVyZXJTZXJ2aWNlQ29tcG9uZW50KG9Db2wucmVuZGVyZXIpKSB7XG4gICAgICB2YWx1ZSA9ICcgLSAnO1xuICAgICAgaWYgKCF0aGlzLnRhYmxlLm9uRGF0YUxvYWRlZENlbGxSZW5kZXJlclN1YnNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnRhYmxlLm9uRGF0YUxvYWRlZENlbGxSZW5kZXJlclN1YnNjcmlwdGlvbiA9IChvQ29sLnJlbmRlcmVyIGFzIGFueSkub25EYXRhTG9hZGVkLnN1YnNjcmliZSh4ID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUdyb3VwZWRDb2x1bW5zKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gKHRoaXMudGFibGUgYXMgYW55KS50cmFuc2xhdGVTZXJ2aWNlLmdldChvQ29sLnRpdGxlKSArICc6ICcgKyB2YWx1ZSArICcgKCcgKyB0b3RhbENvdW50cyArICcpJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXhwYW5zaW9uU3RhdGUocm93OiBPVGFibGVHcm91cGVkUm93KTogYm9vbGVhbiB7XG4gICAgbGV0IGV4cGFuc2lvblN0YXRlID0gIXBhcmVudCB8fCAhdGhpcy50YWJsZS5jb2xsYXBzZUdyb3VwZWRDb2x1bW5zO1xuICAgIGlmIChyb3cuZXhwYW5kU2FtZUxldmVsKHRoaXMudGFibGUuZXhwYW5kR3JvdXBzU2FtZUxldmVsKSkge1xuICAgICAgZXhwYW5zaW9uU3RhdGUgPSB0aGlzLmxldmVsc0V4cGFuc2lvblN0YXRlLmhhc093blByb3BlcnR5KHJvdy5sZXZlbCkgPyB0aGlzLmxldmVsc0V4cGFuc2lvblN0YXRlW3Jvdy5sZXZlbF0gOiBleHBhbnNpb25TdGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgcm93R3JvdXAgPSB0aGlzLmdyb3VwZWRSb3dTdGF0ZS5maW5kKHggPT4geC5rZXlzQXNTdHJpbmcgPT09IHJvdy5rZXlzQXNTdHJpbmcgJiYgSlNPTi5zdHJpbmdpZnkoeC5wYXJlbnQpID09PSBKU09OLnN0cmluZ2lmeShyb3cucGFyZW50KSk7XG4gICAgICBleHBhbnNpb25TdGF0ZSA9IHJvd0dyb3VwID8gcm93R3JvdXAuZXhwYW5kZWQgOiBleHBhbnNpb25TdGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cGFuc2lvblN0YXRlO1xuICB9XG59XG5cblxuXG4iXX0=
|
|
@@ -93,19 +93,47 @@ export class OTableVisibleColumnsDialogComponent {
|
|
|
93
93
|
const newGroupColumns = columnGroupingToRemove.length > 0 ?
|
|
94
94
|
this.table.groupedColumnsArray.filter(col => !columnGroupingToRemove.includes(col)) :
|
|
95
95
|
undefined;
|
|
96
|
+
const columnsOrder = this.getColumnsOrder();
|
|
96
97
|
this.dialogRef.close({
|
|
97
|
-
visibleColArray: this.getVisibleColumns(),
|
|
98
|
-
columnsOrder:
|
|
98
|
+
visibleColArray: this.getVisibleColumns().sort((a, b) => columnsOrder.indexOf(a) - columnsOrder.indexOf(b)),
|
|
99
|
+
columnsOrder: columnsOrder,
|
|
99
100
|
sortColumns: newSortColumns,
|
|
100
101
|
columnValueFiltersToRemove: this.getColumnValueFiltersToRemove(),
|
|
101
102
|
groupColumns: newGroupColumns
|
|
102
103
|
});
|
|
103
104
|
}
|
|
104
105
|
getVisibleColumns() {
|
|
105
|
-
|
|
106
|
+
const nonHidableColumns = Util.parseArray(this.table.nonHidableColumns, true);
|
|
107
|
+
const visibleFromDialog = this.columns
|
|
108
|
+
.filter(col => col.visible)
|
|
109
|
+
.map(col => col.attr);
|
|
110
|
+
const allVisibleAttrs = new Set([...visibleFromDialog, ...nonHidableColumns]);
|
|
111
|
+
return this.table.oTableOptions.columns
|
|
112
|
+
.filter(oCol => allVisibleAttrs.has(oCol.attr))
|
|
113
|
+
.map(oCol => oCol.attr);
|
|
106
114
|
}
|
|
107
115
|
getColumnsOrder() {
|
|
108
|
-
|
|
116
|
+
const originalOrder = this.table.oTableOptions.columns.map(col => col.attr);
|
|
117
|
+
const dialogColumnsOrder = this.columns.map(col => col.attr);
|
|
118
|
+
const columnsNotInDialog = originalOrder.filter(attr => !dialogColumnsOrder.includes(attr));
|
|
119
|
+
const newOrder = [];
|
|
120
|
+
for (const dialogAttr of dialogColumnsOrder) {
|
|
121
|
+
const dialogOriginalPos = originalOrder.indexOf(dialogAttr);
|
|
122
|
+
for (const notInDialogAttr of columnsNotInDialog) {
|
|
123
|
+
const notInDialogOriginalPos = originalOrder.indexOf(notInDialogAttr);
|
|
124
|
+
if (notInDialogOriginalPos < dialogOriginalPos &&
|
|
125
|
+
!newOrder.includes(notInDialogAttr)) {
|
|
126
|
+
newOrder.push(notInDialogAttr);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
newOrder.push(dialogAttr);
|
|
130
|
+
}
|
|
131
|
+
for (const notInDialogAttr of columnsNotInDialog) {
|
|
132
|
+
if (!newOrder.includes(notInDialogAttr)) {
|
|
133
|
+
newOrder.push(notInDialogAttr);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return newOrder;
|
|
109
137
|
}
|
|
110
138
|
getColumnValueFiltersToRemove() {
|
|
111
139
|
return this.columns.filter(col => col.deleteValueFilter).map(col => col.attr);
|
|
@@ -128,4 +156,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
128
156
|
type: Inject,
|
|
129
157
|
args: [MAT_DIALOG_DATA]
|
|
130
158
|
}] }]; } });
|
|
131
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS12aXNpYmxlLWNvbHVtbnMtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvZGlhbG9nL3Zpc2libGUtY29sdW1ucy9vLXRhYmxlLXZpc2libGUtY29sdW1ucy1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvZXh0ZW5zaW9ucy9kaWFsb2cvdmlzaWJsZS1jb2x1bW5zL28tdGFibGUtdmlzaWJsZS1jb2x1bW5zLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEUsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBRVIsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7OztBQXVCaEQsTUFBTSxPQUFPLG1DQUFtQztJQVc5QyxZQUNZLFFBQWtCLEVBQ3JCLFNBQTRELEVBQzFDLElBQVM7UUFGeEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtR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QVYvQyxTQUFTOytCQUNFLGdDQUFnQyxpQkFHM0IsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDSix3Q0FBd0MsRUFBRSxNQUFNO3FCQUNqRDs7MEJBZ0JFLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbmplY3QsXG4gIEluamVjdG9yLFxuICBUeXBlLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7IE9UcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2VydmljZXMvdHJhbnNsYXRlL28tdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlsL2NvZGVzJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBPQ29sdW1uIH0gZnJvbSAnLi4vLi4vLi4vY29sdW1uL28tY29sdW1uLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUJhc2UgfSBmcm9tICcuLi8uLi8uLi9vLXRhYmxlLWJhc2UuY2xhc3MnO1xuXG5leHBvcnQgdHlwZSBDb2x1bW5WaXNpYmlsaXR5Q29uZmlndXJhdGlvbiA9IHtcbiAgYXR0cjogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICB2aXNpYmxlOiBib29sZWFuO1xuICBkZWxldGVWYWx1ZUZpbHRlcj86IGJvb2xlYW47XG4gIGRlbGV0ZVNvcnRDb2x1bW1uPzogYm9vbGVhbjtcbiAgZGVsZXRlR3J1cGluZ0NvbHVtbj86IGJvb2xlYW47XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLXRhYmxlLXZpc2libGUtY29sdW1ucy1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJ28tdGFibGUtdmlzaWJsZS1jb2x1bW5zLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydvLXRhYmxlLXZpc2libGUtY29sdW1ucy1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLm8tdGFibGUtdmlzaWJsZS1jb2x1bW5zLWRpYWxvZ10nOiAndHJ1ZSdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBPVGFibGVWaXNpYmxlQ29sdW1uc0RpYWxvZ0NvbXBvbmVudCB7XG5cbiAgY29sdW1uczogQ29sdW1uVmlzaWJpbGl0eUNvbmZpZ3VyYXRpb25bXSA9IFtdO1xuICByb3dIZWlnaHQ6IHN0cmluZyA9IENvZGVzLkRFRkFVTFRfUk9XX0hFSUdIVDtcbiAgcHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2U7XG4gIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBPVHJhbnNsYXRlU2VydmljZTtcbiAgcHJvdGVjdGVkIGFjdGl2ZUNvbHVtblZhbHVlRmlsdGVyczogc3RyaW5nW10gPSBbXTtcbiAgcHJvdGVjdGVkIGFjdGl2ZVNvcnRDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuICBwcm90ZWN0ZWQgYWN0aXZlR3JvdXBCeUNvbHVtbnM6IHN0cmluZ1tdID0gW107XG4gIHByb3RlY3RlZCB0YWJsZTogT1RhYmxlQmFzZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8T1RhYmxlVmlzaWJsZUNvbHVtbnNEaWFsb2dDb21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBkYXRhOiBhbnlcbiAgKSB7XG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQ8RGlhbG9nU2VydmljZT4oRGlhbG9nU2VydmljZSBhcyBUeXBlPERpYWxvZ1NlcnZpY2U+KTtcbiAgICB0aGlzLmNkID0gdGhpcy5pbmplY3Rvci5nZXQ8Q2hhbmdlRGV0ZWN0b3JSZWY+KENoYW5nZURldGVjdG9yUmVmIGFzIFR5cGU8Q2hhbmdlRGV0ZWN0b3JSZWY+KTtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldDxPVHJhbnNsYXRlU2VydmljZT4oT1RyYW5zbGF0ZVNlcnZpY2UgYXMgVHlwZTxPVHJhbnNsYXRlU2VydmljZT4pO1xuXG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGRhdGEudGFibGUpKSB7XG4gICAgICB0aGlzLnRhYmxlID0gZGF0YS50YWJsZTtcblxuICAgICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy50YWJsZS52aXNpYmxlQ29sdW1ucywgdHJ1ZSk7XG4gICAgICBjb25zdCBub25IaWRhYmxlQ29sdW1ucyA9IFV0aWwucGFyc2VBcnJheSh0aGlzLnRhYmxlLm5vbkhpZGFibGVDb2x1bW5zLCB0cnVlKTtcblxuICAgICAgdGhpcy50YWJsZS5vVGFibGVPcHRpb25zLmNvbHVtbnMuZmlsdGVyKG9Db2wgPT4gKHZpc2libGVDb2x1bW5zLmluZGV4T2Yob0NvbC5hdHRyKSAhPT0gLTEgfHwgb0NvbC5kZWZpbml0aW9uICE9PSB1bmRlZmluZWQpICYmXG4gICAgICAgIG5vbkhpZGFibGVDb2x1bW5zLmluZGV4T2Yob0NvbC5hdHRyKSA9PT0gLTFcbiAgICAgICkuZm9yRWFjaCgob0NvbDogT0NvbHVtbikgPT4ge1xuICAgICAgICB0aGlzLmNvbHVtbnMucHVzaCh7XG4gICAgICAgICAgYXR0cjogb0NvbC5hdHRyLFxuICAgICAgICAgIHRpdGxlOiBvQ29sLnRpdGxlLFxuICAgICAgICAgIHZpc2libGU6IG9Db2wudmlzaWJsZVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJvd0hlaWdodCA9IHRoaXMudGFibGUucm93SGVpZ2h0O1xuICAgICAgdGhpcy5hY3RpdmVDb2x1bW5WYWx1ZUZpbHRlcnMgPSB0aGlzLnRhYmxlLmRhdGFTb3VyY2UuZ2V0Q29sdW1uVmFsdWVGaWx0ZXJzKCkubWFwKGNvbFZhbHVlRmlsdGVyID0+IGNvbFZhbHVlRmlsdGVyLmF0dHIpO1xuICAgICAgdGhpcy5hY3RpdmVTb3J0Q29sdW1ucyA9IHRoaXMudGFibGUuc29ydENvbEFycmF5Lm1hcChjb2wgPT4gY29sLmNvbHVtbk5hbWUpO1xuICAgICAgdGhpcy5hY3RpdmVHcm91cEJ5Q29sdW1ucyA9IHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheTtcbiAgICB9XG4gIH1cblxuICBvbkNsaWNrQ29sdW1uKGNvbDogQ29sdW1uVmlzaWJpbGl0eUNvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVDb2xGaWx0ZXIgPSB0aGlzLmFjdGl2ZUNvbHVtblZhbHVlRmlsdGVycy5pbmNsdWRlcyhjb2wuYXR0cik7XG4gICAgY29uc3QgYWN0aXZlU29ydGluZyA9IHRoaXMuYWN0aXZlU29ydENvbHVtbnMuaW5jbHVkZXMoY29sLmF0dHIpO1xuICAgIGNvbnN0IGFjdGl2ZUdyb3VwaW5nID0gdGhpcy5hY3RpdmVHcm91cEJ5Q29sdW1ucy5pbmNsdWRlcyhjb2wuYXR0cik7XG4gICAgaWYgKGNvbC52aXNpYmxlICYmIChhY3RpdmVDb2xGaWx0ZXIgfHwgYWN0aXZlU29ydGluZyB8fCBhY3RpdmVHcm91cGluZykpIHtcbiAgICAgIGNvbnN0IHdhcm5BcmdzID0gW107XG4gICAgICBpZiAoYWN0aXZlQ29sRmlsdGVyKSB7XG4gICAgICAgIHdhcm5BcmdzLnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCgnVEFCTEUuVklTSUJMRV9DT0xVTU5TX0RJQUxPRy5WQUxVRV9GSUxURVJfV0FSTicpKTtcbiAgICAgIH1cbiAgICAgIGlmIChhY3RpdmVTb3J0aW5nKSB7XG4gICAgICAgIHdhcm5BcmdzLnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCgnVEFCTEUuVklTSUJMRV9DT0xVTU5TX0RJQUxPRy5TT1JUX1dBUk4nKSk7XG4gICAgICB9XG4gICAgICBpZiAoYWN0aXZlR3JvdXBpbmcpIHtcbiAgICAgICAgd2FybkFyZ3MucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdUQUJMRS5WSVNJQkxFX0NPTFVNTlNfRElBTE9HLkdST1VQSU5HX1dBUk4nKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBkaWFsb2dUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCgnVEFCTEUuVklTSUJMRV9DT0xVTU5TX0RJQUxPRy5ISURFX0NPTFVNTl9XQVJOSU5HJywgd2FybkFyZ3MpO1xuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oJ0NPTkZJUk0nLCBkaWFsb2dUZXh0KS50aGVuKHJlcyA9PiB7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICBjb2wuZGVsZXRlVmFsdWVGaWx0ZXIgPSBhY3RpdmVDb2xGaWx0ZXI7XG4gICAgICAgICAgY29sLmRlbGV0ZVNvcnRDb2x1bW1uID0gYWN0aXZlU29ydGluZztcbiAgICAgICAgICBjb2wuZGVsZXRlR3J1cGluZ0NvbHVtbiA9IGFjdGl2ZUdyb3VwaW5nO1xuICAgICAgICAgIGNvbC52aXNpYmxlID0gIWNvbC52aXNpYmxlO1xuICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29sLnZpc2libGUgPSAhY29sLnZpc2libGU7XG4gICAgICBpZiAoY29sLnZpc2libGUpIHtcbiAgICAgICAgY29sLmRlbGV0ZVZhbHVlRmlsdGVyID0gZmFsc2U7XG4gICAgICAgIGNvbC5kZWxldGVTb3J0Q29sdW1tbiA9IGZhbHNlO1xuICAgICAgICBjb2wuZGVsZXRlR3J1cGluZ0NvbHVtbiA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPHN0cmluZ1tdPikge1xuICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmNvbHVtbnMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gIH1cblxuICBjbG9zZURpYWxvZygpIHtcbiAgICBjb25zdCBjb2x1bW5Tb3J0aW5nVG9SZW1vdmUgPSB0aGlzLmdldENvbHVtblNvcnRpbmdUb1JlbW92ZSgpO1xuICAgIGNvbnN0IG5ld1NvcnRDb2x1bW5zID0gY29sdW1uU29ydGluZ1RvUmVtb3ZlLmxlbmd0aCA+IDAgP1xuICAgICAgdGhpcy50YWJsZS5zb3J0Q29sQXJyYXkuZmlsdGVyKGNvbCA9PiAhY29sdW1uU29ydGluZ1RvUmVtb3ZlLmluY2x1ZGVzKGNvbC5jb2x1bW5OYW1lKSkgOlxuICAgICAgdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgY29sdW1uR3JvdXBpbmdUb1JlbW92ZSA9IHRoaXMuZ2V0Q29sdW1uR3JvdXBpbmdUb1JlbW92ZSgpO1xuICAgIGNvbnN0IG5ld0dyb3VwQ29sdW1ucyA9IGNvbHVtbkdyb3VwaW5nVG9SZW1vdmUubGVuZ3RoID4gMCA/XG4gICAgICB0aGlzLnRhYmxlLmdyb3VwZWRDb2x1bW5zQXJyYXkuZmlsdGVyKGNvbCA9PiAhY29sdW1uR3JvdXBpbmdUb1JlbW92ZS5pbmNsdWRlcyhjb2wpKSA6XG4gICAgICB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh7XG4gICAgICB2aXNpYmxlQ29sQXJyYXk6IHRoaXMuZ2V0VmlzaWJsZUNvbHVtbnMoKSxcbiAgICAgIGNvbHVtbnNPcmRlcjogdGhpcy5nZXRDb2x1bW5zT3JkZXIoKSxcbiAgICAgIHNvcnRDb2x1bW5zOiBuZXdTb3J0Q29sdW1ucyxcbiAgICAgIGNvbHVtblZhbHVlRmlsdGVyc1RvUmVtb3ZlOiB0aGlzLmdldENvbHVtblZhbHVlRmlsdGVyc1RvUmVtb3ZlKCksXG4gICAgICBncm91cENvbHVtbnM6IG5ld0dyb3VwQ29sdW1uc1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWaXNpYmxlQ29sdW1ucygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC52aXNpYmxlKS5tYXAoY29sID0+IGNvbC5hdHRyKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29sdW1uc09yZGVyKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLm1hcChjb2wgPT4gY29sLmF0dHIpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5WYWx1ZUZpbHRlcnNUb1JlbW92ZSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5kZWxldGVWYWx1ZUZpbHRlcikubWFwKGNvbCA9PiBjb2wuYXR0cik7XG4gIH1cblxuICBwcml2YXRlIGdldENvbHVtblNvcnRpbmdUb1JlbW92ZSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5kZWxldGVTb3J0Q29sdW1tbikubWFwKGNvbCA9PiBjb2wuYXR0cik7XG4gIH1cblxuICBwcml2YXRlIGdldENvbHVtbkdyb3VwaW5nVG9SZW1vdmUoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuZGVsZXRlR3J1cGluZ0NvbHVtbikubWFwKGNvbCA9PiBjb2wuYXR0cik7XG4gIH1cbn1cbiIsIjxzcGFuIG1hdC1kaWFsb2ctdGl0bGU+e3sgJ1RBQkxFLkJVVFRPTlMuQ09MVklTJyB8IG9UcmFuc2xhdGUgfX08L3NwYW4+XG5cblxuPG1hdC1kaWFsb2ctY29udGVudD5cbiAgPGRpdiBtYXQtc3ViaGVhZGVyPnt7J1RBQkxFLlZJU0lCTEVfQ09MVU1OUy5ERVNDUklQVElPTicgfCBvVHJhbnNsYXRlfX08L2Rpdj5cblxuICA8ZGl2IFtuZ0NsYXNzXT1cInJvd0hlaWdodFwiPlxuICAgIDxtYXQtbGlzdCBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50KVwiPlxuICAgICAgPG1hdC1saXN0LWl0ZW0gKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zXCIgY2RrRHJhZyAoY2xpY2spPVwib25DbGlja0NvbHVtbihjb2x1bW4pXCIgW25nQ2xhc3NdPVwieydjb2x1bW4taGlkZGVuJzohY29sdW1uLnZpc2libGV9XCJcbiAgICAgICAgY2xhc3M9XCJvLWRyYWctbGlzdC1pdGVtLWJveFwiPlxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhGbGV4IGZ4TGF5b3V0QWxpZ249XCJzdHJldGNoIGNlbnRlclwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRMaXN0SXRlbUljb24gc3ZnSWNvbj1cIm9udGltaXplOmRyYWdfaGFuZGxlXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3BhbiBtYXRMaXN0SXRlbUxpbmUgZnhGbGV4Pnt7IChjb2x1bW4udGl0bGUgfHwgY29sdW1uLmF0dHIpIHwgb1RyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJjb2x1bW4udmlzaWJsZVwiIHN2Z0ljb249XCJvbnRpbWl6ZTp2aXNpYmlsaXR5XCIgY29sb3I9XCJwcmltYXJ5XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCIhY29sdW1uLnZpc2libGVcIiBzdmdJY29uPVwib250aW1pemU6dmlzaWJpbGl0eV9vZmZcIj48L21hdC1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICA8L21hdC1saXN0LWl0ZW0+XG4gICAgPC9tYXQtbGlzdD5cbiAgPC9kaXY+XG48L21hdC1kaWFsb2ctY29udGVudD5cblxuPG1hdC1kaWFsb2ctYWN0aW9ucyBmeExheW91dEFsaWduPVwiZW5kIGNlbnRlclwiPlxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtc3Ryb2tlZC1idXR0b24gW21hdC1kaWFsb2ctY2xvc2VdPVwibnVsbFwiIGNsYXNzPVwiby1idXR0b24tZGVmYXVsdCBjYW5jZWxcIiBjYW5jZWw+e3sgJ0NBTkNFTCcgfCBvVHJhbnNsYXRlIH19PC9idXR0b24+XG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1zdHJva2VkLWJ1dHRvbiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiIGNsYXNzPVwiby1idXR0b24tcHJpbWFyeVwiPnt7ICdBQ0NFUFQnIHwgb1RyYW5zbGF0ZSB9fTwvYnV0dG9uPlxuPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG4iXX0=
|
|
159
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS12aXNpYmxlLWNvbHVtbnMtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvZGlhbG9nL3Zpc2libGUtY29sdW1ucy9vLXRhYmxlLXZpc2libGUtY29sdW1ucy1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvZXh0ZW5zaW9ucy9kaWFsb2cvdmlzaWJsZS1jb2x1bW5zL28tdGFibGUtdmlzaWJsZS1jb2x1bW5zLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEUsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBRVIsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7OztBQXVCaEQsTUFBTSxPQUFPLG1DQUFtQztJQVk5QyxZQUNZLFFBQWtCLEVBQ3JCLFNBQTRELEVBQzFDLElBQVM7UUFGeEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtR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LElBQUksQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRU8seUJBQXlCO1FBQy9CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEYsQ0FBQzs7aUlBN0xVLG1DQUFtQyxzRUFlcEMsZUFBZTtxSEFmZCxtQ0FBbUMsZ0pDdENoRCxxNENBMEJBOzRGRFlhLG1DQUFtQztrQkFWL0MsU0FBUzsrQkFDRSxnQ0FBZ0MsaUJBRzNCLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sUUFDekM7d0JBQ0osd0NBQXdDLEVBQUUsTUFBTTtxQkFDakQ7OzBCQWlCRSxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5qZWN0LFxuICBJbmplY3RvcixcbiAgVHlwZSxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBPVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS9vLXRyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB0eXBlIHsgT0NvbHVtbiB9IGZyb20gJy4uLy4uLy4uL2NvbHVtbi9vLWNvbHVtbi5jbGFzcyc7XG5pbXBvcnQgeyBPVGFibGVCYXNlIH0gZnJvbSAnLi4vLi4vLi4vby10YWJsZS1iYXNlLmNsYXNzJztcblxuZXhwb3J0IHR5cGUgQ29sdW1uVmlzaWJpbGl0eUNvbmZpZ3VyYXRpb24gPSB7XG4gIGF0dHI6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgdmlzaWJsZTogYm9vbGVhbjtcbiAgZGVsZXRlVmFsdWVGaWx0ZXI/OiBib29sZWFuO1xuICBkZWxldGVTb3J0Q29sdW1tbj86IGJvb2xlYW47XG4gIGRlbGV0ZUdydXBpbmdDb2x1bW4/OiBib29sZWFuO1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnby10YWJsZS12aXNpYmxlLWNvbHVtbnMtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICdvLXRhYmxlLXZpc2libGUtY29sdW1ucy1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnby10YWJsZS12aXNpYmxlLWNvbHVtbnMtZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5vLXRhYmxlLXZpc2libGUtY29sdW1ucy1kaWFsb2ddJzogJ3RydWUnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgT1RhYmxlVmlzaWJsZUNvbHVtbnNEaWFsb2dDb21wb25lbnQge1xuXG4gIGNvbHVtbnM6IENvbHVtblZpc2liaWxpdHlDb25maWd1cmF0aW9uW10gPSBbXTtcbiAgcm93SGVpZ2h0OiBzdHJpbmcgPSBDb2Rlcy5ERUZBVUxUX1JPV19IRUlHSFQ7XG4gIHByb3RlY3RlZCBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmO1xuICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VydmljZTogT1RyYW5zbGF0ZVNlcnZpY2U7XG4gIHByb3RlY3RlZCBhY3RpdmVDb2x1bW5WYWx1ZUZpbHRlcnM6IHN0cmluZ1tdID0gW107XG4gIHByb3RlY3RlZCBhY3RpdmVTb3J0Q29sdW1uczogc3RyaW5nW10gPSBbXTtcbiAgcHJvdGVjdGVkIGFjdGl2ZUdyb3VwQnlDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuICBwcm90ZWN0ZWQgdGFibGU6IE9UYWJsZUJhc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8T1RhYmxlVmlzaWJsZUNvbHVtbnNEaWFsb2dDb21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBkYXRhOiBhbnlcbiAgKSB7XG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQ8RGlhbG9nU2VydmljZT4oRGlhbG9nU2VydmljZSBhcyBUeXBlPERpYWxvZ1NlcnZpY2U+KTtcbiAgICB0aGlzLmNkID0gdGhpcy5pbmplY3Rvci5nZXQ8Q2hhbmdlRGV0ZWN0b3JSZWY+KENoYW5nZURldGVjdG9yUmVmIGFzIFR5cGU8Q2hhbmdlRGV0ZWN0b3JSZWY+KTtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldDxPVHJhbnNsYXRlU2VydmljZT4oT1RyYW5zbGF0ZVNlcnZpY2UgYXMgVHlwZTxPVHJhbnNsYXRlU2VydmljZT4pO1xuXG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGRhdGEudGFibGUpKSB7XG4gICAgICB0aGlzLnRhYmxlID0gZGF0YS50YWJsZTtcblxuICAgICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy50YWJsZS52aXNpYmxlQ29sdW1ucywgdHJ1ZSk7XG4gICAgICBjb25zdCBub25IaWRhYmxlQ29sdW1ucyA9IFV0aWwucGFyc2VBcnJheSh0aGlzLnRhYmxlLm5vbkhpZGFibGVDb2x1bW5zLCB0cnVlKTtcblxuICAgICAgLy9pZiBpdCBoYXMgbm8gZGVmaW5pdGlvbiBhbmQgaXMgbm90IGluIHZpc2libGUgY29sdW1ucywgaXQgaXMgbm90IHNob3duXG4gICAgICB0aGlzLnRhYmxlLm9UYWJsZU9wdGlvbnMuY29sdW1ucy5maWx0ZXIob0NvbCA9PiAodmlzaWJsZUNvbHVtbnMuaW5kZXhPZihvQ29sLmF0dHIpICE9PSAtMSB8fCBvQ29sLmRlZmluaXRpb24gIT09IHVuZGVmaW5lZCkgJiZcbiAgICAgICAgbm9uSGlkYWJsZUNvbHVtbnMuaW5kZXhPZihvQ29sLmF0dHIpID09PSAtMVxuICAgICAgKS5mb3JFYWNoKChvQ29sOiBPQ29sdW1uKSA9PiB7XG4gICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKHtcbiAgICAgICAgICBhdHRyOiBvQ29sLmF0dHIsXG4gICAgICAgICAgdGl0bGU6IG9Db2wudGl0bGUsXG4gICAgICAgICAgdmlzaWJsZTogb0NvbC52aXNpYmxlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucm93SGVpZ2h0ID0gdGhpcy50YWJsZS5yb3dIZWlnaHQ7XG4gICAgICB0aGlzLmFjdGl2ZUNvbHVtblZhbHVlRmlsdGVycyA9IHRoaXMudGFibGUuZGF0YVNvdXJjZS5nZXRDb2x1bW5WYWx1ZUZpbHRlcnMoKS5tYXAoY29sVmFsdWVGaWx0ZXIgPT4gY29sVmFsdWVGaWx0ZXIuYXR0cik7XG4gICAgICB0aGlzLmFjdGl2ZVNvcnRDb2x1bW5zID0gdGhpcy50YWJsZS5zb3J0Q29sQXJyYXkubWFwKGNvbCA9PiBjb2wuY29sdW1uTmFtZSk7XG4gICAgICB0aGlzLmFjdGl2ZUdyb3VwQnlDb2x1bW5zID0gdGhpcy50YWJsZS5ncm91cGVkQ29sdW1uc0FycmF5O1xuICAgIH1cbiAgfVxuXG4gIG9uQ2xpY2tDb2x1bW4oY29sOiBDb2x1bW5WaXNpYmlsaXR5Q29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZUNvbEZpbHRlciA9IHRoaXMuYWN0aXZlQ29sdW1uVmFsdWVGaWx0ZXJzLmluY2x1ZGVzKGNvbC5hdHRyKTtcbiAgICBjb25zdCBhY3RpdmVTb3J0aW5nID0gdGhpcy5hY3RpdmVTb3J0Q29sdW1ucy5pbmNsdWRlcyhjb2wuYXR0cik7XG4gICAgY29uc3QgYWN0aXZlR3JvdXBpbmcgPSB0aGlzLmFjdGl2ZUdyb3VwQnlDb2x1bW5zLmluY2x1ZGVzKGNvbC5hdHRyKTtcblxuICAgIGlmIChjb2wudmlzaWJsZSAmJiAoYWN0aXZlQ29sRmlsdGVyIHx8IGFjdGl2ZVNvcnRpbmcgfHwgYWN0aXZlR3JvdXBpbmcpKSB7XG4gICAgICBjb25zdCB3YXJuQXJncyA9IFtdO1xuICAgICAgaWYgKGFjdGl2ZUNvbEZpbHRlcikge1xuICAgICAgICB3YXJuQXJncy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQoJ1RBQkxFLlZJU0lCTEVfQ09MVU1OU19ESUFMT0cuVkFMVUVfRklMVEVSX1dBUk4nKSk7XG4gICAgICB9XG4gICAgICBpZiAoYWN0aXZlU29ydGluZykge1xuICAgICAgICB3YXJuQXJncy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQoJ1RBQkxFLlZJU0lCTEVfQ09MVU1OU19ESUFMT0cuU09SVF9XQVJOJykpO1xuICAgICAgfVxuICAgICAgaWYgKGFjdGl2ZUdyb3VwaW5nKSB7XG4gICAgICAgIHdhcm5BcmdzLnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCgnVEFCTEUuVklTSUJMRV9DT0xVTU5TX0RJQUxPRy5HUk9VUElOR19XQVJOJykpO1xuICAgICAgfVxuICAgICAgY29uc3QgZGlhbG9nVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQoJ1RBQkxFLlZJU0lCTEVfQ09MVU1OU19ESUFMT0cuSElERV9DT0xVTU5fV0FSTklORycsIHdhcm5BcmdzKTtcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKCdDT05GSVJNJywgZGlhbG9nVGV4dCkudGhlbihyZXMgPT4ge1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgY29sLmRlbGV0ZVZhbHVlRmlsdGVyID0gYWN0aXZlQ29sRmlsdGVyO1xuICAgICAgICAgIGNvbC5kZWxldGVTb3J0Q29sdW1tbiA9IGFjdGl2ZVNvcnRpbmc7XG4gICAgICAgICAgY29sLmRlbGV0ZUdydXBpbmdDb2x1bW4gPSBhY3RpdmVHcm91cGluZztcbiAgICAgICAgICBjb2wudmlzaWJsZSA9ICFjb2wudmlzaWJsZTtcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbC52aXNpYmxlID0gIWNvbC52aXNpYmxlO1xuICAgICAgaWYgKGNvbC52aXNpYmxlKSB7XG4gICAgICAgIGNvbC5kZWxldGVWYWx1ZUZpbHRlciA9IGZhbHNlO1xuICAgICAgICBjb2wuZGVsZXRlU29ydENvbHVtbW4gPSBmYWxzZTtcbiAgICAgICAgY29sLmRlbGV0ZUdydXBpbmdDb2x1bW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxzdHJpbmdbXT4pIHtcbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5jb2x1bW5zLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICB9XG5cbiAgY2xvc2VEaWFsb2coKSB7XG5cbiAgICBjb25zdCBjb2x1bW5Tb3J0aW5nVG9SZW1vdmUgPSB0aGlzLmdldENvbHVtblNvcnRpbmdUb1JlbW92ZSgpO1xuICAgIGNvbnN0IG5ld1NvcnRDb2x1bW5zID0gY29sdW1uU29ydGluZ1RvUmVtb3ZlLmxlbmd0aCA+IDAgP1xuICAgICAgdGhpcy50YWJsZS5zb3J0Q29sQXJyYXkuZmlsdGVyKGNvbCA9PiAhY29sdW1uU29ydGluZ1RvUmVtb3ZlLmluY2x1ZGVzKGNvbC5jb2x1bW5OYW1lKSkgOlxuICAgICAgdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgY29sdW1uR3JvdXBpbmdUb1JlbW92ZSA9IHRoaXMuZ2V0Q29sdW1uR3JvdXBpbmdUb1JlbW92ZSgpO1xuICAgIGNvbnN0IG5ld0dyb3VwQ29sdW1ucyA9IGNvbHVtbkdyb3VwaW5nVG9SZW1vdmUubGVuZ3RoID4gMCA/XG4gICAgICB0aGlzLnRhYmxlLmdyb3VwZWRDb2x1bW5zQXJyYXkuZmlsdGVyKGNvbCA9PiAhY29sdW1uR3JvdXBpbmdUb1JlbW92ZS5pbmNsdWRlcyhjb2wpKSA6XG4gICAgICB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBjb2x1bW5zT3JkZXIgPSB0aGlzLmdldENvbHVtbnNPcmRlcigpO1xuXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2Uoe1xuICAgICAgdmlzaWJsZUNvbEFycmF5OiB0aGlzLmdldFZpc2libGVDb2x1bW5zKCkuc29ydCgoYSwgYikgPT4gY29sdW1uc09yZGVyLmluZGV4T2YoYSkgLSBjb2x1bW5zT3JkZXIuaW5kZXhPZihiKSksXG4gICAgICBjb2x1bW5zT3JkZXI6IGNvbHVtbnNPcmRlcixcbiAgICAgIHNvcnRDb2x1bW5zOiBuZXdTb3J0Q29sdW1ucyxcbiAgICAgIGNvbHVtblZhbHVlRmlsdGVyc1RvUmVtb3ZlOiB0aGlzLmdldENvbHVtblZhbHVlRmlsdGVyc1RvUmVtb3ZlKCksXG4gICAgICBncm91cENvbHVtbnM6IG5ld0dyb3VwQ29sdW1uc1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZpc2libGUgY29sdW1ucywgaW5jbHVkaW5nIG5vbi1oaWRhYmxlIG9uZXMsXG4gICAqIHByZXNlcnZpbmcgdGhlIG9yZGVyIGRlZmluZWQgaW4gb1RhYmxlT3B0aW9ucy5jb2x1bW5zLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRWaXNpYmxlQ29sdW1ucygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgbm9uSGlkYWJsZUNvbHVtbnMgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy50YWJsZS5ub25IaWRhYmxlQ29sdW1ucywgdHJ1ZSk7XG5cbiAgICAvLyBWaXNpYmxlIGNvbHVtbnMgc2VsZWN0ZWQgaW4gdGhlIGRpYWxvZ1xuICAgIGNvbnN0IHZpc2libGVGcm9tRGlhbG9nID0gdGhpcy5jb2x1bW5zXG4gICAgICAuZmlsdGVyKGNvbCA9PiBjb2wudmlzaWJsZSlcbiAgICAgIC5tYXAoY29sID0+IGNvbC5hdHRyKTtcblxuICAgIC8vIE1lcmdlOiB2aXNpYmxlIGNvbHVtbnMgZnJvbSB0aGUgZGlhbG9nICsgbm9uLWhpZGFibGUgKGFsd2F5cyB2aXNpYmxlKVxuICAgIGNvbnN0IGFsbFZpc2libGVBdHRycyA9IG5ldyBTZXQoWy4uLnZpc2libGVGcm9tRGlhbG9nLCAuLi5ub25IaWRhYmxlQ29sdW1uc10pO1xuXG4gICAgLy8gU29ydCBhY2NvcmRpbmcgdG8gdGhlIHVwZGF0ZWQgb3JkZXIgaW4gb1RhYmxlT3B0aW9ucy5jb2x1bW5zXG4gICAgcmV0dXJuIHRoaXMudGFibGUub1RhYmxlT3B0aW9ucy5jb2x1bW5zXG4gICAgICAuZmlsdGVyKG9Db2wgPT4gYWxsVmlzaWJsZUF0dHJzLmhhcyhvQ29sLmF0dHIpKVxuICAgICAgLm1hcChvQ29sID0+IG9Db2wuYXR0cik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZmluYWwgY29sdW1ucyBvcmRlciwgcHJlc2VydmluZyB0aGUgb3JkZXIgZGVmaW5lZCBpbiB0aGUgZGlhbG9nXG4gICAqIGFuZCBrZWVwaW5nIG5vbi1oaWRhYmxlIGFuZCBoaWRkZW4gY29sdW1ucyBpbiB0aGVpciBvcmlnaW5hbCBwb3NpdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIGdldENvbHVtbnNPcmRlcigpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgb3JpZ2luYWxPcmRlciA9IHRoaXMudGFibGUub1RhYmxlT3B0aW9ucy5jb2x1bW5zLm1hcChjb2wgPT4gY29sLmF0dHIpO1xuXG4gICAgLy8gQ29sdW1ucyBmcm9tIHRoZSBkaWFsb2cgaW4gdGhlaXIgbmV3IG9yZGVyXG4gICAgY29uc3QgZGlhbG9nQ29sdW1uc09yZGVyID0gdGhpcy5jb2x1bW5zLm1hcChjb2wgPT4gY29sLmF0dHIpO1xuXG4gICAgLy8gQ29sdW1ucyBub3QgcHJlc2VudCBpbiB0aGUgZGlhbG9nIChub24taGlkYWJsZSArIGhpZGRlbiBvbmVzKVxuICAgIGNvbnN0IGNvbHVtbnNOb3RJbkRpYWxvZyA9IG9yaWdpbmFsT3JkZXIuZmlsdGVyKGF0dHIgPT5cbiAgICAgICFkaWFsb2dDb2x1bW5zT3JkZXIuaW5jbHVkZXMoYXR0cilcbiAgICApO1xuXG4gICAgLy8gQnVpbGQgdGhlIG5ldyBvcmRlclxuICAgIGNvbnN0IG5ld09yZGVyOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBkaWFsb2dBdHRyIG9mIGRpYWxvZ0NvbHVtbnNPcmRlcikge1xuICAgICAgLy8gQmVmb3JlIGFkZGluZyB0aGlzIGRpYWxvZyBjb2x1bW4sXG4gICAgICAvLyBhZGQgdGhlIGNvbHVtbnMgKG5vbi1oaWRhYmxlIG9yIGhpZGRlbikgdGhhdCB3ZXJlIHBsYWNlZCBiZWZvcmUgaXRcbiAgICAgIC8vIGluIHRoZSBvcmlnaW5hbCBvcmRlclxuICAgICAgY29uc3QgZGlhbG9nT3JpZ2luYWxQb3MgPSBvcmlnaW5hbE9yZGVyLmluZGV4T2YoZGlhbG9nQXR0cik7XG5cbiAgICAgIGZvciAoY29uc3Qgbm90SW5EaWFsb2dBdHRyIG9mIGNvbHVtbnNOb3RJbkRpYWxvZykge1xuICAgICAgICBjb25zdCBub3RJbkRpYWxvZ09yaWdpbmFsUG9zID0gb3JpZ2luYWxPcmRlci5pbmRleE9mKG5vdEluRGlhbG9nQXR0cik7XG5cbiAgICAgICAgLy8gSWYgaXQgd2FzIGJlZm9yZSBhbmQgaGFzIG5vdCBiZWVuIGFkZGVkIHlldFxuICAgICAgICBpZiAoXG4gICAgICAgICAgbm90SW5EaWFsb2dPcmlnaW5hbFBvcyA8IGRpYWxvZ09yaWdpbmFsUG9zICYmXG4gICAgICAgICAgIW5ld09yZGVyLmluY2x1ZGVzKG5vdEluRGlhbG9nQXR0cilcbiAgICAgICAgKSB7XG4gICAgICAgICAgbmV3T3JkZXIucHVzaChub3RJbkRpYWxvZ0F0dHIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCB0aGUgZGlhbG9nIGNvbHVtblxuICAgICAgbmV3T3JkZXIucHVzaChkaWFsb2dBdHRyKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVtYWluaW5nIGNvbHVtbnMgdGhhdCB3ZXJlIHBsYWNlZCBhZnRlciBhbGwgZGlhbG9nIGNvbHVtbnNcbiAgICBmb3IgKGNvbnN0IG5vdEluRGlhbG9nQXR0ciBvZiBjb2x1bW5zTm90SW5EaWFsb2cpIHtcbiAgICAgIGlmICghbmV3T3JkZXIuaW5jbHVkZXMobm90SW5EaWFsb2dBdHRyKSkge1xuICAgICAgICBuZXdPcmRlci5wdXNoKG5vdEluRGlhbG9nQXR0cik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld09yZGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5WYWx1ZUZpbHRlcnNUb1JlbW92ZSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5kZWxldGVWYWx1ZUZpbHRlcikubWFwKGNvbCA9PiBjb2wuYXR0cik7XG4gIH1cblxuICBwcml2YXRlIGdldENvbHVtblNvcnRpbmdUb1JlbW92ZSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5kZWxldGVTb3J0Q29sdW1tbikubWFwKGNvbCA9PiBjb2wuYXR0cik7XG4gIH1cblxuICBwcml2YXRlIGdldENvbHVtbkdyb3VwaW5nVG9SZW1vdmUoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuZGVsZXRlR3J1cGluZ0NvbHVtbikubWFwKGNvbCA9PiBjb2wuYXR0cik7XG4gIH1cbn0iLCI8c3BhbiBtYXQtZGlhbG9nLXRpdGxlPnt7ICdUQUJMRS5CVVRUT05TLkNPTFZJUycgfCBvVHJhbnNsYXRlIH19PC9zcGFuPlxuXG5cbjxtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gIDxkaXYgbWF0LXN1YmhlYWRlcj57eydUQUJMRS5WSVNJQkxFX0NPTFVNTlMuREVTQ1JJUFRJT04nIHwgb1RyYW5zbGF0ZX19PC9kaXY+XG5cbiAgPGRpdiBbbmdDbGFzc109XCJyb3dIZWlnaHRcIj5cbiAgICA8bWF0LWxpc3QgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIj5cbiAgICAgIDxtYXQtbGlzdC1pdGVtICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1wiIGNka0RyYWcgKGNsaWNrKT1cIm9uQ2xpY2tDb2x1bW4oY29sdW1uKVwiIFtuZ0NsYXNzXT1cInsnY29sdW1uLWhpZGRlbic6IWNvbHVtbi52aXNpYmxlfVwiXG4gICAgICAgIGNsYXNzPVwiby1kcmFnLWxpc3QtaXRlbS1ib3hcIj5cbiAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4RmxleCBmeExheW91dEFsaWduPVwic3RyZXRjaCBjZW50ZXJcIj5cbiAgICAgICAgICA8bWF0LWljb24gbWF0TGlzdEl0ZW1JY29uIHN2Z0ljb249XCJvbnRpbWl6ZTpkcmFnX2hhbmRsZVwiPjwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4gbWF0TGlzdEl0ZW1MaW5lIGZ4RmxleD57eyAoY29sdW1uLnRpdGxlIHx8IGNvbHVtbi5hdHRyKSB8IG9UcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiY29sdW1uLnZpc2libGVcIiBzdmdJY29uPVwib250aW1pemU6dmlzaWJpbGl0eVwiIGNvbG9yPVwicHJpbWFyeVwiPjwvbWF0LWljb24+XG4gICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiIWNvbHVtbi52aXNpYmxlXCIgc3ZnSWNvbj1cIm9udGltaXplOnZpc2liaWxpdHlfb2ZmXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgPC9tYXQtbGlzdC1pdGVtPlxuICAgIDwvbWF0LWxpc3Q+XG4gIDwvZGl2PlxuPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG5cbjxtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj1cImVuZCBjZW50ZXJcIj5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LXN0cm9rZWQtYnV0dG9uIFttYXQtZGlhbG9nLWNsb3NlXT1cIm51bGxcIiBjbGFzcz1cIm8tYnV0dG9uLWRlZmF1bHQgY2FuY2VsXCIgY2FuY2VsPnt7ICdDQU5DRUwnIHwgb1RyYW5zbGF0ZSB9fTwvYnV0dG9uPlxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIiBjbGFzcz1cIm8tYnV0dG9uLXByaW1hcnlcIj57eyAnQUNDRVBUJyB8IG9UcmFuc2xhdGUgfX08L2J1dHRvbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuIl19
|