@aquera/ngx-smart-table 0.0.17-patch-0.4 → 0.0.17-patch-0.5

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.
@@ -1,5 +1,4 @@
1
1
  import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, HostListener } from '@angular/core';
2
- import { Cell } from '../../models/cell.class';
3
2
  import { TableState } from '../../models/table-state.class';
4
3
  import { mergeTableConfig } from '../../../models/table-config.interface';
5
4
  import { EditMode } from '../../../models/cell-types';
@@ -282,7 +281,7 @@ export class StTableComponent {
282
281
  const columns = this.getActiveColumns();
283
282
  const oldGrid = this.internalCellGrid;
284
283
  this.internalCellGrid = this.data.map((rowData, rowIndex) => columns.map((column, colIndex) => {
285
- const newCell = new Cell(column, rowData[column.key], rowData, rowIndex);
284
+ const newCell = column.createCell(rowData, rowIndex);
286
285
  const oldCell = oldGrid?.[rowIndex]?.[colIndex];
287
286
  if (oldCell && oldCell.getColumnConfig().key === column.key) {
288
287
  oldCell.setReplacement(newCell);
@@ -1463,4 +1462,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
1463
1462
  type: HostListener,
1464
1463
  args: ['document:click', ['$event']]
1465
1464
  }] } });
1466
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9yZW5kZXJlci9jb21wb25lbnRzL3N0LXRhYmxlL3N0LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvcmVuZGVyZXIvY29tcG9uZW50cy9zdC10YWJsZS9zdC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUErQyxTQUFTLEVBQUUsVUFBVSxFQUFpQixZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEssT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEVBQWUsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV2RixPQUFPLEVBQWtFLFFBQVEsRUFBdUIsTUFBTSw0QkFBNEIsQ0FBQztBQUMzSSxPQUFPLEVBQUUsZUFBZSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUNqRSxPQUFPLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFRekQsTUFBTSxPQUFPLGdCQUFnQjtJQThIM0IsWUFDVSxlQUEyQyxFQUMzQyxNQUErQixFQUMvQixvQkFBMEMsRUFDMUMsVUFBbUM7UUFIbkMsb0JBQWUsR0FBZixlQUFlLENBQTRCO1FBQzNDLFdBQU0sR0FBTixN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Q0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBR0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUdHLFdBQVc7c0JBQXBCLE1BQU07Z0JBR0csU0FBUztzQkFBbEIsTUFBTTtnQkFHRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBR0csYUFBYTtzQkFBdEIsTUFBTTtnQkFHRSxjQUFjO3NCQUF0QixLQUFLO2dCQTJFNkMsY0FBYztzQkFBaEUsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBbytDakQsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgQWZ0ZXJWaWV3SW5pdCwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb2x1bW5Db25maWcgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvY29sdW1uLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2VsbCB9IGZyb20gJy4uLy4uL21vZGVscy9jZWxsLmNsYXNzJztcbmltcG9ydCB7IFRhYmxlU3RhdGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvdGFibGUtc3RhdGUuY2xhc3MnO1xuaW1wb3J0IHsgVGFibGVDb25maWcsIG1lcmdlVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdGFibGUtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBUYWJsZVN0YXRlQ2hhbmdlRXZlbnQsIENvbHVtblJlc2l6ZUV2ZW50LCBDb2x1bW5BZGRFdmVudCwgQ29sdW1uTW92ZUV2ZW50LCBDZWxsRm9jdXNQb3NpdGlvbiwgRGF0YUNoYW5nZUV2ZW50IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLXR5cGVzJztcbmltcG9ydCB7IENlbGxDaGFuZ2VFdmVudCwgQ2VsbFNhdmVFdmVudCwgQ2VsbEVkaXRFdmVudCwgQ2VsbENhbmNlbEV2ZW50LCBFZGl0TW9kZSwgTmF2aWdhdGlvbkRpcmVjdGlvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9jZWxsLXR5cGVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSnNvblNjaGVtYVZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9qc29uLXNjaGVtYS12YWxpZGF0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBTY2hlbWFWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc2NoZW1hLXZhbGlkYXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFZhbGlkYXRpb25Mb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdmFsaWRhdGlvbi1sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBWaXJ0dWFsU2Nyb2xsU2VydmljZSwgVmlydHVhbFNjcm9sbFN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdmlydHVhbC1zY3JvbGwuc2VydmljZSc7XG5pbXBvcnQgeyBSb3dBY3Rpb24sIFJvd0FjdGlvbkNvbnRleHQsIFJvd0FjdGlvbkV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3Jvdy1hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbHVtbkFjdGlvbiwgQ29sdW1uQWN0aW9uQ29udGV4dCwgQ29sdW1uQWN0aW9uRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvY29sdW1uLWFjdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGFibGVaSW5kZXggfSBmcm9tICcuLi8uLi9tb2RlbHMvei1pbmRleC5lbnVtJztcbmltcG9ydCB7IFNvcnREaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvdGFibGUtdHlwZXMnO1xuaW1wb3J0IHsgVGFibGVWYWxpZGF0aW9uU3RhdGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvdGFibGUtdmFsaWRhdGlvbi1zdGF0ZS5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdC10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdC10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N0LXRhYmxlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU3RUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICAvLyBaLUluZGV4IGNvbnN0YW50cyBmb3IgdGVtcGxhdGUgdXNlXG4gIHJlYWRvbmx5IFpJbmRleCA9IFRhYmxlWkluZGV4O1xuICBcbiAgLy8gTkVXOiBQcmltYXJ5IGNvbmZpZ3VyYXRpb24gaW5wdXRcbiAgQElucHV0KCkgdGFibGVDb25maWchOiBUYWJsZUNvbmZpZztcbiAgXG4gIC8vIE5FVzogUmF3IGRhdGEgaW5wdXQgKGFsdGVybmF0aXZlIHRvIGNlbGxHcmlkKVxuICBASW5wdXQoKSBkYXRhPzogYW55W107XG4gIFxuICAvLyBORVc6IE9ic2VydmFibGUvQmVoYXZpb3JTdWJqZWN0IGRhdGEgaW5wdXQgKGZvciByZWFjdGl2ZSBkYXRhIHN0cmVhbXMpXG4gIEBJbnB1dCgpIGRhdGEkPzogT2JzZXJ2YWJsZTxhbnlbXT4gfCBCZWhhdmlvclN1YmplY3Q8YW55W10+O1xuICBcbiAgQElucHV0KCkgdGFibGVTdGF0ZT86IFRhYmxlU3RhdGU7XG4gIFxuICAvLyBERVBSRUNBVEVEOiBVc2UgdGFibGVDb25maWcgaW5zdGVhZFxuICBASW5wdXQoKSBlbmFibGVTb3J0aW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgZW5hYmxlRmlsdGVyaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgXG4gIC8vIE5FVzogU3RhdGUgY2hhbmdlIG91dHB1dFxuICBAT3V0cHV0KCkgc3RhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlU3RhdGVDaGFuZ2VFdmVudD4oKTtcbiAgXG4gIC8vIE5FVzogRGF0YSBjaGFuZ2Ugb3V0cHV0IChmb3IgYXN5bmMgZGF0YSB1cGRhdGVzKVxuICBAT3V0cHV0KCkgZGF0YUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YUNoYW5nZUV2ZW50PigpO1xuICBcbiAgLy8gRVhJU1RJTkc6IENlbGwgYW5kIGNvbHVtbiBldmVudHNcbiAgQE91dHB1dCgpIGNlbGxFZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxDZWxsRWRpdEV2ZW50PigpO1xuICBAT3V0cHV0KCkgY2VsbFNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPENlbGxTYXZlRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjZWxsQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjxDZWxsQ2FuY2VsRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjZWxsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDZWxsQ2hhbmdlRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjb2x1bW5SZXNpemVkID0gbmV3IEV2ZW50RW1pdHRlcjxDb2x1bW5SZXNpemVFdmVudD4oKTtcbiAgQE91dHB1dCgpIGNvbHVtbk1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxDb2x1bW5Nb3ZlRXZlbnQ+KCk7XG4gIFxuICAvLyBORVc6IENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBvdXRwdXRcbiAgQE91dHB1dCgpIGNvbmZpZ1ZhbGlkYXRpb25FcnJvcnMgPSBuZXcgRXZlbnRFbWl0dGVyPFNjaGVtYVZhbGlkYXRpb25FcnJvcltdPigpO1xuICBcbiAgLy8gTkVXOiBDb2x1bW4gbWFuYWdlbWVudCBvdXRwdXRcbiAgQE91dHB1dCgpIGNvbHVtbkFkZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxDb2x1bW5BZGRFdmVudD4oKTtcbiAgXG4gIC8vIE5FVzogUm93IGFjdGlvbiBvdXRwdXRcbiAgQE91dHB1dCgpIHJvd0FjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8Um93QWN0aW9uRXZlbnQ+KCk7XG4gIFxuICAvLyBORVc6IFZhbGlkYXRpb24gc3RhdGUgY2hhbmdlIG91dHB1dFxuICBAT3V0cHV0KCkgdmFsaWRhdGlvblN0YXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVZhbGlkYXRpb25TdGF0ZT4oKTtcbiAgXG4gIC8vIE5FVzogUmVxdWVzdCB0byBhZGQgYSBuZXcgcm93IChlbWl0dGVkIHdoZW4gbmF2aWdhdGluZyBwYXN0IGxhc3Qgcm93IHdpdGggYWRkUm93T25OYXZpZ2F0ZVBhc3RFbmQgZW5hYmxlZClcbiAgQE91dHB1dCgpIHJlcXVlc3RBZGRSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZm9jdXNDb2x1bW4/OiBudW1iZXIgfT4oKTtcbiAgXG4gIC8vIE5FVzogT3B0aW9uYWwgdmFsaWRhdGlvbiBmbGFnXG4gIEBJbnB1dCgpIHZhbGlkYXRlQ29uZmlnOiBib29sZWFuID0gZmFsc2U7XG4gIFxuICAvLyBJbnRlcm5hbCBzdGF0ZVxuICBwcml2YXRlIGludGVybmFsVGFibGVTdGF0ZT86IFRhYmxlU3RhdGU7XG4gIHByaXZhdGUgaW50ZXJuYWxDZWxsR3JpZD86IENlbGw8YW55PltdW107XG4gIHByaXZhdGUgc3RhdGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZm9jdXNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgdmFsaWRhdGlvblN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBkYXRhU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHJlcXVlc3RBZGRSb3dTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgaW50ZXJuYWxEYXRhJDogQmVoYXZpb3JTdWJqZWN0PGFueVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcbiAgcHJpdmF0ZSBwcmV2aW91c0RhdGE6IGFueVtdID0gW107XG4gIG1lcmdlZENvbmZpZyE6IFRhYmxlQ29uZmlnO1xuICBcbiAgLy8gTW9kYWwgc3RhdGVcbiAgcHVibGljIHNob3dDb2x1bW5Nb2RhbDogYm9vbGVhbiA9IGZhbHNlO1xuICBcbiAgLy8gQ2FjaGVkIHZpc2libGUgY29sdW1ucyBhbmQgY2VsbCBncmlkIHRvIHByZXZlbnQgcmUtY3JlYXRpb24gb24gZXZlcnkgY2hhbmdlIGRldGVjdGlvblxuICBwdWJsaWMgdmlzaWJsZUNvbHVtbnM6IENvbHVtbkNvbmZpZzxhbnk+W10gPSBbXTtcbiAgcHVibGljIHZpc2libGVDZWxsR3JpZDogQ2VsbDxhbnk+W11bXSA9IFtdO1xuICBcbiAgLy8gUm93IGFjdGlvbnMgZHJvcGRvd24gc3RhdGVcbiAgcHVibGljIGRyb3Bkb3duU3RhdGU6IHtcbiAgICBpc09wZW46IGJvb2xlYW47XG4gICAgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfTtcbiAgICBjb250ZXh0OiBSb3dBY3Rpb25Db250ZXh0IHwgbnVsbDtcbiAgfSA9IHtcbiAgICBpc09wZW46IGZhbHNlLFxuICAgIHBvc2l0aW9uOiB7IHg6IDAsIHk6IDAgfSxcbiAgICBjb250ZXh0OiBudWxsXG4gIH07XG4gIFxuICBwdWJsaWMgc2tlbGV0b25Db2x1bW5zPzogbnVtYmVyW107XG4gIHB1YmxpYyBza2VsZXRvblJvd3M/OiBudW1iZXJbXTtcblxuICAvLyBDb2x1bW4gbWVudSBkcm9wZG93biBzdGF0ZVxuICBwdWJsaWMgY29sdW1uTWVudVN0YXRlOiB7XG4gICAgaXNPcGVuOiBib29sZWFuO1xuICAgIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH07XG4gICAgY29udGV4dDogQ29sdW1uQWN0aW9uQ29udGV4dCB8IG51bGw7XG4gIH0gPSB7XG4gICAgaXNPcGVuOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogeyB4OiAwLCB5OiAwIH0sXG4gICAgY29udGV4dDogbnVsbFxuICB9O1xuICBcbiAgLy8gVmlydHVhbCBzY3JvbGwgcHJvcGVydGllc1xuICBwcml2YXRlIHNjcm9sbENvbnRhaW5lcj86IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIHNjcm9sbFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSB2aXJ0dWFsU2Nyb2xsU3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxWaXJ0dWFsU2Nyb2xsU3RhdGUgfCBudWxsPihudWxsKTtcbiAgXG4gIC8vIE9ic2VydmFibGUgc3RyZWFtcyBkZXJpdmVkIGZyb20gdmlydHVhbCBzY3JvbGwgc3RhdGVcbiAgcHVibGljIHZpcnR1YWxTY3JvbGxUb3RhbEhlaWdodCQ6IE9ic2VydmFibGU8bnVtYmVyPiA9IHRoaXMudmlydHVhbFNjcm9sbFN0YXRlJC5waXBlKFxuICAgIG1hcChzdGF0ZSA9PiBzdGF0ZT8udG90YWxIZWlnaHQgPz8gMCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICApO1xuICBcbiAgcHVibGljIHZpcnR1YWxTY3JvbGxPZmZzZXRZJDogT2JzZXJ2YWJsZTxudW1iZXI+ID0gdGhpcy52aXJ0dWFsU2Nyb2xsU3RhdGUkLnBpcGUoXG4gICAgbWFwKHN0YXRlID0+IHN0YXRlPy5vZmZzZXRZID8/IDApLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgKTtcblxuICBwdWJsaWMgdmlydHVhbFNjcm9sbE9mZnNldFlOZWckOiBPYnNlcnZhYmxlPG51bWJlcj4gPSB0aGlzLnZpcnR1YWxTY3JvbGxTdGF0ZSQucGlwZShcbiAgICBtYXAoc3RhdGUgPT4gTnVtYmVyKHN0YXRlPy5vZmZzZXRZID8/IDApICogLTEgKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICk7XG4gIFxuICBwdWJsaWMgdmlzaWJsZVJvd3MkOiBPYnNlcnZhYmxlPENlbGw8YW55PltdW10+ID0gdGhpcy52aXJ0dWFsU2Nyb2xsU3RhdGUkLnBpcGUoXG4gICAgbWFwKHN0YXRlID0+IHtcbiAgICAgIGlmICghc3RhdGUpIHJldHVybiB0aGlzLnZpc2libGVDZWxsR3JpZDtcbiAgICAgIGNvbnN0IHsgc3RhcnRJbmRleCwgZW5kSW5kZXggfSA9IHN0YXRlO1xuICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZUNlbGxHcmlkLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICB9KVxuICApO1xuICBcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsVmlld3BvcnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgc2Nyb2xsVmlld3BvcnQ/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2NoZW1hVmFsaWRhdG9yOiBKc29uU2NoZW1hVmFsaWRhdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGxvZ2dlcjogVmFsaWRhdGlvbkxvZ2dlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB2aXJ0dWFsU2Nyb2xsU2VydmljZTogVmlydHVhbFNjcm9sbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFZhbGlkYXRlIHRoYXQgYXQgbGVhc3QgdGFibGVDb25maWcgb3IgY29sdW1ucyBpcyBwcm92aWRlZFxuICAgIGlmICghdGhpcy50YWJsZUNvbmZpZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFaXRoZXIgdGFibGVDb25maWcgb3IgY29sdW1ucyBtdXN0IGJlIHByb3ZpZGVkJyk7XG4gICAgfVxuICAgIFxuICAgIC8vIE1lcmdlIGNvbmZpZyB3aXRoIGRlZmF1bHRzXG4gICAgaWYgKHRoaXMudGFibGVDb25maWcpIHtcbiAgICAgIHRoaXMubWVyZ2VkQ29uZmlnID0gbWVyZ2VUYWJsZUNvbmZpZyh0aGlzLnRhYmxlQ29uZmlnKTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgY29uZmlndXJhdGlvbiBpZiBlbmFibGVkXG4gICAgICBpZiAodGhpcy52YWxpZGF0ZUNvbmZpZykge1xuICAgICAgICB0aGlzLnZhbGlkYXRlQ29uZmlndXJhdGlvbih0aGlzLm1lcmdlZENvbmZpZyk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIENyZWF0ZSBvciB1c2UgVGFibGVTdGF0ZVxuICAgIGlmICghdGhpcy50YWJsZVN0YXRlKSB7XG4gICAgICB0aGlzLmNyZWF0ZUludGVybmFsVGFibGVTdGF0ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdWJzY3JpYmUgdG8gZXh0ZXJuYWwgdGFibGVTdGF0ZSBjaGFuZ2VzXG4gICAgICB0aGlzLnN1YnNjcmliZVRvRXh0ZXJuYWxUYWJsZVN0YXRlKCk7XG4gICAgfVxuICAgIFxuICAgIC8vIFNldHVwIGRhdGEgc291cmNlIChzeW5jIG9yIGFzeW5jKVxuICAgIHRoaXMuc2V0dXBEYXRhU291cmNlKCk7XG4gICAgXG4gICAgLy8gQ2FsY3VsYXRlIHN0aWNreSBvZmZzZXRzXG4gICAgY29uc3Qgcm93TnVtYmVyV2lkdGggPSB0aGlzLm1lcmdlZENvbmZpZy5zaG93Um93TnVtYmVyID8gMzAgOiAwO1xuICAgIGNvbnN0IHNldHRpbmdzQ29sdW1uV2lkdGggPSB0aGlzLmhhc1Jvd0FjdGlvbnMoKSA/IDI4IDogMDsgLy8gU2V0dGluZ3MgY29sdW1uIGlzIH4zMnB4IHdpZGUgd2hlbiB2aXNpYmxlXG4gICAgdGhpcy5nZXRBY3RpdmVUYWJsZVN0YXRlKCkuY2FsY3VsYXRlU3RpY2t5T2Zmc2V0cyhyb3dOdW1iZXJXaWR0aCwgc2V0dGluZ3NDb2x1bW5XaWR0aCk7XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSB2aXNpYmxlIGNvbHVtbnMgYW5kIGNlbGwgZ3JpZFxuICAgIHRoaXMudXBkYXRlVmlzaWJsZURhdGEoKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIHZpcnR1YWwgc2Nyb2xsIGlmIGVuYWJsZWRcbiAgICBpZiAodGhpcy5pc1ZpcnR1YWxTY3JvbGxFbmFibGVkKCkpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVZpcnR1YWxTY3JvbGwoKTtcbiAgICB9XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBrZXlib2FyZCBuYXZpZ2F0aW9uIGlmIGVuYWJsZWRcbiAgICBpZiAodGhpcy5pc0tleWJvYXJkTmF2aWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgdGhpcy5pbml0aWFsaXplS2V5Ym9hcmROYXZpZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgdGhpcy5za2VsZXRvbkNvbHVtbnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLm1lcmdlZENvbmZpZy50YWJsZVNrZWxldG9uPy5jb2x1bW5zID8/IDEwIH0sIChfLCBpKSA9PiBpKTtcbiAgICB0aGlzLnNrZWxldG9uUm93cyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IHRoaXMubWVyZ2VkQ29uZmlnLnRhYmxlU2tlbGV0b24/LnJvd3MgPz8gMTAgfSwgKF8sIGkpID0+IGkpO1xuICB9XG4gIFxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gU2V0dXAgdmlydHVhbCBzY3JvbGwgYWZ0ZXIgdmlldyBpcyByZWFkeVxuICAgIGlmICh0aGlzLmlzVmlydHVhbFNjcm9sbEVuYWJsZWQoKSAmJiB0aGlzLnNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICB0aGlzLnNldHVwVmlydHVhbFNjcm9sbExpc3RlbmVyKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIC8vIFZhbGlkYXRlIGNvbmZpZ3VyYXRpb24gd2hlbiB0YWJsZUNvbmZpZyBjaGFuZ2VzXG4gICAgaWYgKGNoYW5nZXNbJ3RhYmxlQ29uZmlnJ10gJiYgIWNoYW5nZXNbJ3RhYmxlQ29uZmlnJ10uZmlyc3RDaGFuZ2UgJiYgdGhpcy50YWJsZUNvbmZpZykge1xuICAgICAgdGhpcy5tZXJnZWRDb25maWcgPSBtZXJnZVRhYmxlQ29uZmlnKHRoaXMudGFibGVDb25maWcpO1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBjb25maWd1cmF0aW9uIGlmIGVuYWJsZWRcbiAgICAgIGlmICh0aGlzLnZhbGlkYXRlQ29uZmlnKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVDb25maWd1cmF0aW9uKHRoaXMubWVyZ2VkQ29uZmlnKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIGludGVybmFsIHRhYmxlIHN0YXRlIHdpdGggbmV3IGNvbHVtbnMgaWYgdXNpbmcgaW50ZXJuYWwgc3RhdGVcbiAgICAgIGlmICh0aGlzLmludGVybmFsVGFibGVTdGF0ZSkge1xuICAgICAgICB0aGlzLmludGVybmFsVGFibGVTdGF0ZS51cGRhdGVDb2x1bW5zKHRoaXMubWVyZ2VkQ29uZmlnLmNvbHVtbnMpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBVcGRhdGUgdmlzaWJsZSBjb2x1bW5zIGFuZCBjZWxsIGdyaWRcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJsZURhdGEoKTtcbiAgICB9XG4gICAgXG4gICAgLy8gUmVjcmVhdGUgY2VsbCBncmlkIHdoZW4gZGF0YSBjaGFuZ2VzIChvbmx5IGlmIG5vdCB1c2luZyBkYXRhJCBPYnNlcnZhYmxlKVxuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10gJiYgIWNoYW5nZXNbJ2RhdGEnXS5maXJzdENoYW5nZSAmJiB0aGlzLmRhdGEgJiYgIXRoaXMuZGF0YSQpIHtcbiAgICAgIHRoaXMuaGFuZGxlU3luY0RhdGFDaGFuZ2UoY2hhbmdlc1snZGF0YSddLnByZXZpb3VzVmFsdWUgfHwgW10pO1xuICAgIH1cbiAgICBcbiAgICAvLyBIYW5kbGUgZGF0YSQgT2JzZXJ2YWJsZSBpbnB1dCBjaGFuZ2VzXG4gICAgaWYgKGNoYW5nZXNbJ2RhdGEkJ10gJiYgIWNoYW5nZXNbJ2RhdGEkJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMuc2V0dXBEYXRhU291cmNlKCk7XG4gICAgfVxuICAgIFxuICAgIC8vIFJlY3JlYXRlIGNlbGwgZ3JpZCB3aGVuIGNlbGxHcmlkIGNoYW5nZXNcbiAgICBpZiAoY2hhbmdlc1snY2VsbEdyaWQnXSAmJiAhY2hhbmdlc1snY2VsbEdyaWQnXS5maXJzdENoYW5nZSkge1xuICAgICAgLy8gQ2VsbCBncmlkIHdhcyB1cGRhdGVkIGV4dGVybmFsbHksIG5vIG5lZWQgdG8gcmVjcmVhdGVcbiAgICAgIC8vIEp1c3QgcmVjYWxjdWxhdGUgc3RpY2t5IG9mZnNldHMgaWYgbmVlZGVkXG4gICAgICBpZiAodGhpcy5nZXRBY3RpdmVUYWJsZVN0YXRlKCkpIHtcbiAgICAgICAgY29uc3Qgcm93TnVtYmVyV2lkdGggPSB0aGlzLm1lcmdlZENvbmZpZy5zaG93Um93TnVtYmVyID8gMzAgOiAwO1xuICAgICAgICBjb25zdCBzZXR0aW5nc0NvbHVtbldpZHRoID0gdGhpcy5oYXNSb3dBY3Rpb25zKCkgPyAzMiA6IDA7XG4gICAgICAgIHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpLmNhbGN1bGF0ZVN0aWNreU9mZnNldHMocm93TnVtYmVyV2lkdGgsIHNldHRpbmdzQ29sdW1uV2lkdGgpO1xuICAgICAgfVxuICAgICAgLy8gVXBkYXRlIHZpc2libGUgY29sdW1ucyBhbmQgY2VsbCBncmlkXG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVEYXRhKCk7XG4gICAgfVxuICAgIFxuICAgIC8vIEhhbmRsZSB0YWJsZVN0YXRlIGlucHV0IGNoYW5nZXMgKHdoZW4gZXh0ZXJuYWwgc3RhdGUgaXMgcHJvdmlkZWQsIGUuZy4sIGluIHdvcmtib29rKVxuICAgIGlmIChjaGFuZ2VzWyd0YWJsZVN0YXRlJ10gJiYgIWNoYW5nZXNbJ3RhYmxlU3RhdGUnXS5maXJzdENoYW5nZSAmJiB0aGlzLnRhYmxlU3RhdGUpIHtcbiAgICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gYWxsIG9sZCB0YWJsZVN0YXRlIG9ic2VydmFibGVzIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzXG4gICAgICB0aGlzLnN0YXRlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy52YWxpZGF0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5mb2N1c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIFxuICAgICAgLy8gUmVzdWJzY3JpYmUgdG8gbmV3IHRhYmxlU3RhdGUncyBvYnNlcnZhYmxlc1xuICAgICAgdGhpcy5zdWJzY3JpYmVUb0V4dGVybmFsVGFibGVTdGF0ZSgpO1xuICAgICAgXG4gICAgICAvLyBSZWluaXRpYWxpemUga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoIG5ldyB0YWJsZVN0YXRlXG4gICAgICBpZiAodGhpcy5pc0tleWJvYXJkTmF2aWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVLZXlib2FyZE5hdmlnYXRpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gUmVjYWxjdWxhdGUgdmlydHVhbCBzY3JvbGwgd2hlbiBkYXRhIGNoYW5nZXNcbiAgICBpZiAoKGNoYW5nZXNbJ2RhdGEnXSB8fCBjaGFuZ2VzWydjZWxsR3JpZCddKSAmJiAhY2hhbmdlc1snZGF0YSddPy5maXJzdENoYW5nZSkge1xuICAgICAgaWYgKHRoaXMuaXNWaXJ0dWFsU2Nyb2xsRW5hYmxlZCgpKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMudmlydHVhbFNjcm9sbFN0YXRlJC52YWx1ZTtcbiAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSkge1xuICAgICAgICAgIGNvbnN0IG5ld1N0YXRlID0gdGhpcy52aXJ0dWFsU2Nyb2xsU2VydmljZS5jYWxjdWxhdGVWaXNpYmxlUmFuZ2Uoe1xuICAgICAgICAgICAgc2Nyb2xsVG9wOiBjdXJyZW50U3RhdGUuc2Nyb2xsVG9wLFxuICAgICAgICAgICAgdmlld3BvcnRIZWlnaHQ6IHRoaXMuZ2V0VmlydHVhbFNjcm9sbFZpZXdwb3J0SGVpZ2h0KCksXG4gICAgICAgICAgICB0b3RhbEl0ZW1zOiB0aGlzLnZpc2libGVDZWxsR3JpZC5sZW5ndGgsXG4gICAgICAgICAgICBpdGVtU2l6ZTogdGhpcy5nZXRWaXJ0dWFsU2Nyb2xsSXRlbVNpemUoKSxcbiAgICAgICAgICAgIGJ1ZmZlclNpemU6IHRoaXMuZ2V0VmlydHVhbFNjcm9sbEJ1ZmZlclNpemUoKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMudmlydHVhbFNjcm9sbFN0YXRlJC5uZXh0KG5ld1N0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBVcGRhdGUga2V5Ym9hcmQgbmF2aWdhdGlvbiBkaW1lbnNpb25zIGlmIGVuYWJsZWRcbiAgICAgIGlmICh0aGlzLmlzS2V5Ym9hcmROYXZpZ2F0aW9uRW5hYmxlZCgpICYmIChjaGFuZ2VzWydkYXRhJ10gfHwgY2hhbmdlc1snY2VsbEdyaWQnXSkpIHtcbiAgICAgICAgdGhpcy5nZXRBY3RpdmVUYWJsZVN0YXRlKCkuc2V0RGltZW5zaW9ucyhcbiAgICAgICAgICB0aGlzLnZpc2libGVDZWxsR3JpZC5sZW5ndGgsXG4gICAgICAgICAgdGhpcy52aXNpYmxlQ29sdW1ucy5sZW5ndGhcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGludGVybmFsIFRhYmxlU3RhdGUgZnJvbSBjb25maWdcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlSW50ZXJuYWxUYWJsZVN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldEFjdGl2ZUNvbHVtbnMoKTtcbiAgICB0aGlzLmludGVybmFsVGFibGVTdGF0ZSA9IG5ldyBUYWJsZVN0YXRlKGNvbHVtbnMsIHtcbiAgICAgIHBhZ2VTaXplOiB0aGlzLm1lcmdlZENvbmZpZy5wYWdpbmF0aW9uPy5wYWdlU2l6ZSxcbiAgICAgIGluaXRpYWxQYWdlOiB0aGlzLm1lcmdlZENvbmZpZy5pbml0aWFsU3RhdGU/LnBhZ2VcbiAgICB9KTtcbiAgICBcbiAgICAvLyBTZXQgdG90YWwgaXRlbXMgaWYgcHJvdmlkZWQgaW4gY29uZmlnIChmb3Igc2VydmVyLXNpZGUgcGFnaW5hdGlvbilcbiAgICBpZiAodGhpcy5tZXJnZWRDb25maWcucGFnaW5hdGlvbj8udG90YWxJdGVtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmludGVybmFsVGFibGVTdGF0ZS5zZXRUb3RhbEl0ZW1zKHRoaXMubWVyZ2VkQ29uZmlnLnBhZ2luYXRpb24udG90YWxJdGVtcyk7XG4gICAgfVxuICAgIFxuICAgIC8vIEFwcGx5IGluaXRpYWwgc29ydCBpZiBwcm92aWRlZFxuICAgIGlmICh0aGlzLm1lcmdlZENvbmZpZy5pbml0aWFsU3RhdGU/LnNvcnRCeSkge1xuICAgICAgdGhpcy5tZXJnZWRDb25maWcuaW5pdGlhbFN0YXRlLnNvcnRCeS5mb3JFYWNoKHNvcnQgPT4ge1xuICAgICAgICB0aGlzLmludGVybmFsVGFibGVTdGF0ZSEuYWRkU29ydFRvQ29sdW1uKHNvcnQua2V5LCBzb3J0LmRpcmVjdGlvbik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgLy8gQXBwbHkgaW5pdGlhbCBmaWx0ZXJzIGlmIHByb3ZpZGVkXG4gICAgaWYgKHRoaXMubWVyZ2VkQ29uZmlnLmluaXRpYWxTdGF0ZT8uZmlsdGVycykge1xuICAgICAgdGhpcy5tZXJnZWRDb25maWcuaW5pdGlhbFN0YXRlLmZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgICB0aGlzLmludGVybmFsVGFibGVTdGF0ZSEuc2V0RmlsdGVyT25Db2x1bW4oZmlsdGVyLmtleSwgZmlsdGVyLm9wZXJhdG9yLCBmaWx0ZXIudmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIC8vIFN1YnNjcmliZSB0byBpbnRlcm5hbCBzdGF0ZSBjaGFuZ2VzIGFuZCByZS1lbWl0XG4gICAgdGhpcy5zdWJzY3JpYmVUb0ludGVybmFsU3RhdGUoKTtcbiAgICBcbiAgICAvLyBTdWJzY3JpYmUgdG8gdmFsaWRhdGlvbiBzdGF0ZSBjaGFuZ2VzIGFuZCByZS1lbWl0XG4gICAgdGhpcy5zdWJzY3JpYmVUb1ZhbGlkYXRpb25TdGF0ZSgpO1xuICB9XG4gIFxuICBwcml2YXRlIHN1YnNjcmliZVRvVmFsaWRhdGlvblN0YXRlKCkge1xuICAgIGlmICghdGhpcy5pbnRlcm5hbFRhYmxlU3RhdGUpIHJldHVybjtcbiAgICB0aGlzLnZhbGlkYXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLmludGVybmFsVGFibGVTdGF0ZS50YWJsZVZhbGlkYXRpb25TdGF0ZSRcbiAgICAgIC5zdWJzY3JpYmUoc3RhdGUgPT4ge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25TdGF0ZUNoYW5nZS5lbWl0KHN0YXRlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0ludGVybmFsU3RhdGUoKSB7XG4gICAgaWYgKCF0aGlzLmludGVybmFsVGFibGVTdGF0ZSkgcmV0dXJuO1xuICAgIHRoaXMuc3RhdGVTdWJzY3JpcHRpb24gPSB0aGlzLmludGVybmFsVGFibGVTdGF0ZT8uc3RhdGVDaGFuZ2UkXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZS5lbWl0KGV2ZW50KTtcblxuICAgICAgICAvLyBVcGRhdGUgdmlzaWJsZSBjb2x1bW5zIGFuZCBjZWxsIGdyaWQgb24gdmlzaWJpbGl0eSBjaGFuZ2VzXG4gICAgICAgIGlmIChldmVudC50eXBlID09PSAnY29sdW1uLXZpc2liaWxpdHknIHx8IGV2ZW50LnR5cGUgPT09ICdjb2x1bW4tY29uZmlnJykge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZURhdGEoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIGV4dGVybmFsIFRhYmxlU3RhdGUgY2hhbmdlc1xuICAgKi9cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0V4dGVybmFsVGFibGVTdGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGFibGVTdGF0ZSkgcmV0dXJuO1xuICAgIFxuICAgIHRoaXMuc3RhdGVTdWJzY3JpcHRpb24gPSB0aGlzLnRhYmxlU3RhdGUuc3RhdGVDaGFuZ2UkXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgXG4gICAgICAgIC8vIFVwZGF0ZSB2aXNpYmxlIGNvbHVtbnMgYW5kIGNlbGwgZ3JpZCBvbiB2aXNpYmlsaXR5IGNoYW5nZXNcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdjb2x1bW4tdmlzaWJpbGl0eScgfHwgZXZlbnQudHlwZSA9PT0gJ2NvbHVtbi1jb25maWcnKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlRGF0YSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICBcbiAgICAvLyBTdWJzY3JpYmUgdG8gdmFsaWRhdGlvbiBzdGF0ZSBjaGFuZ2VzIGFuZCByZS1lbWl0XG4gICB0aGlzLnN1YnNjcmliZVRvVmFsaWRhdGlvblN0YXRlKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDcmVhdGUgY2VsbCBncmlkIGZyb20gcmF3IGRhdGFcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlQ2VsbEdyaWRGcm9tRGF0YSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGF0YSkgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldEFjdGl2ZUNvbHVtbnMoKTtcbiAgICBjb25zdCBvbGRHcmlkID0gdGhpcy5pbnRlcm5hbENlbGxHcmlkO1xuXG4gICAgdGhpcy5pbnRlcm5hbENlbGxHcmlkID0gdGhpcy5kYXRhLm1hcCgocm93RGF0YSwgcm93SW5kZXgpID0+XG4gICAgICBjb2x1bW5zLm1hcCgoY29sdW1uLCBjb2xJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdDZWxsID0gbmV3IENlbGwoY29sdW1uLCByb3dEYXRhW2NvbHVtbi5rZXldLCByb3dEYXRhLCByb3dJbmRleCk7XG5cbiAgICAgICAgY29uc3Qgb2xkQ2VsbCA9IG9sZEdyaWQ/Lltyb3dJbmRleF0/Lltjb2xJbmRleF07XG4gICAgICAgIGlmIChvbGRDZWxsICYmIG9sZENlbGwuZ2V0Q29sdW1uQ29uZmlnKCkua2V5ID09PSBjb2x1bW4ua2V5KSB7XG4gICAgICAgICAgb2xkQ2VsbC5zZXRSZXBsYWNlbWVudChuZXdDZWxsKTtcbiAgICAgICAgICAvLyBDYXJyeSBvdmVyIHRyYW5zaWVudCBzdGF0ZSAoZS5nLiBsb2FkaW5nKSB0aGF0IHdhcyBzZXQgb24gdGhlIG9sZCBjZWxsXG4gICAgICAgICAgY29uc3Qgb2xkU3RhdGUgPSBvbGRDZWxsLmdldFN0YXRlKCk7XG4gICAgICAgICAgaWYgKG9sZFN0YXRlLmlzTG9hZGluZykge1xuICAgICAgICAgICAgbmV3Q2VsbC5zZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXdDZWxsO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4gIFxuICAvKipcbiAgICogU2V0dXAgZGF0YSBzb3VyY2UgLSBlaXRoZXIgc3luYyBhcnJheSBvciBhc3luYyBPYnNlcnZhYmxlXG4gICAqIEhhbmRsZXMgaW5pdGlhbGl6YXRpb24gYW5kIHN1YnNjcmlwdGlvbiB0byBkYXRhIGNoYW5nZXNcbiAgICovXG4gIHByaXZhdGUgc2V0dXBEYXRhU291cmNlKCk6IHZvaWQge1xuICAgIC8vIFdhcm4gaWYgYm90aCBkYXRhIGFuZCBkYXRhJCBhcmUgcHJvdmlkZWRcbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YSQpIHtcbiAgICAgIGNvbnNvbGUud2FybignU3RUYWJsZUNvbXBvbmVudDogQm90aCBkYXRhIGFuZCBkYXRhJCBpbnB1dHMgYXJlIHByb3ZpZGVkLiBVc2luZyBkYXRhJCAoT2JzZXJ2YWJsZSkgYW5kIGlnbm9yaW5nIGRhdGEgYXJyYXkuJyk7XG4gICAgfVxuICAgIFxuICAgIC8vIENsZWFuIHVwIGV4aXN0aW5nIHN1YnNjcmlwdGlvblxuICAgIHRoaXMuZGF0YVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICBcbiAgICAvLyBQcmlvcml0eTogZGF0YSQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGRhdGFcbiAgICBpZiAodGhpcy5kYXRhJCkge1xuICAgICAgdGhpcy5zdWJzY3JpYmVUb0RhdGFDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgIC8vIEZvciBzeW5jIGRhdGEsIGVtaXQgb25jZSB0aHJvdWdoIGludGVybmFsIG9ic2VydmFibGVcbiAgICAgIHRoaXMucHJldmlvdXNEYXRhID0gW107XG4gICAgICB0aGlzLmludGVybmFsRGF0YSQubmV4dCh0aGlzLmRhdGEpO1xuICAgICAgdGhpcy5zdWJzY3JpYmVUb0RhdGFDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGRhdGEgcHJvdmlkZWQsIGVtaXQgZW1wdHkgYXJyYXlcbiAgICAgIHRoaXMucHJldmlvdXNEYXRhID0gW107XG4gICAgICB0aGlzLmludGVybmFsRGF0YSQubmV4dChbXSk7XG4gICAgICB0aGlzLnN1YnNjcmliZVRvRGF0YUNoYW5nZXMoKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gZGF0YSBjaGFuZ2VzIChlaXRoZXIgZnJvbSBkYXRhJCBpbnB1dCBvciBpbnRlcm5hbCBCZWhhdmlvclN1YmplY3QpXG4gICAqL1xuICBwcml2YXRlIHN1YnNjcmliZVRvRGF0YUNoYW5nZXMoKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YVNvdXJjZSQgPSB0aGlzLmRhdGEkIHx8IHRoaXMuaW50ZXJuYWxEYXRhJC5hc09ic2VydmFibGUoKTtcbiAgICBcbiAgICB0aGlzLmRhdGFTdWJzY3JpcHRpb24gPSBkYXRhU291cmNlJC5zdWJzY3JpYmUobmV3RGF0YSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZURhdGFDaGFuZ2UobmV3RGF0YSk7XG4gICAgfSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgZGF0YSBjaGFuZ2UgZnJvbSBPYnNlcnZhYmxlIGVtaXNzaW9uXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZURhdGFDaGFuZ2UobmV3RGF0YTogYW55W10pOiB2b2lkIHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNvdXJjZTogJ3N5bmMnIHwgJ2FzeW5jJyA9IHRoaXMuZGF0YSQgPyAnYXN5bmMnIDogJ3N5bmMnO1xuICAgIFxuICAgIC8vIEVtaXQgZGF0YSBjaGFuZ2UgZXZlbnRcbiAgICB0aGlzLmRhdGFDaGFuZ2UuZW1pdCh7XG4gICAgICBwcmV2aW91c0RhdGE6IHRoaXMucHJldmlvdXNEYXRhLFxuICAgICAgY3VycmVudERhdGE6IG5ld0RhdGEsXG4gICAgICB0aW1lc3RhbXAsXG4gICAgICBzb3VyY2VcbiAgICB9KTtcbiAgICBcbiAgICAvLyBVcGRhdGUgZGF0YSByZWZlcmVuY2VcbiAgICB0aGlzLmRhdGEgPSBuZXdEYXRhO1xuICAgIHRoaXMucHJldmlvdXNEYXRhID0gWy4uLm5ld0RhdGFdO1xuICAgIFxuICAgIC8vIFJlY3JlYXRlIGNlbGwgZ3JpZFxuICAgIHRoaXMuY3JlYXRlQ2VsbEdyaWRGcm9tRGF0YSgpO1xuICAgIFxuICAgIC8vIFVwZGF0ZSB2aXNpYmxlIGRhdGFcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVEYXRhKCk7XG4gICAgXG4gICAgLy8gUmVjYWxjdWxhdGUgdmlydHVhbCBzY3JvbGwgaWYgZW5hYmxlZFxuICAgIGlmICh0aGlzLmlzVmlydHVhbFNjcm9sbEVuYWJsZWQoKSkge1xuICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gdGhpcy52aXJ0dWFsU2Nyb2xsU3RhdGUkLnZhbHVlO1xuICAgICAgaWYgKGN1cnJlbnRTdGF0ZSkge1xuICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IHRoaXMudmlydHVhbFNjcm9sbFNlcnZpY2UuY2FsY3VsYXRlVmlzaWJsZVJhbmdlKHtcbiAgICAgICAgICBzY3JvbGxUb3A6IGN1cnJlbnRTdGF0ZS5zY3JvbGxUb3AsXG4gICAgICAgICAgdmlld3BvcnRIZWlnaHQ6IHRoaXMuZ2V0VmlydHVhbFNjcm9sbFZpZXdwb3J0SGVpZ2h0KCksXG4gICAgICAgICAgdG90YWxJdGVtczogdGhpcy52aXNpYmxlQ2VsbEdyaWQubGVuZ3RoLFxuICAgICAgICAgIGl0ZW1TaXplOiB0aGlzLmdldFZpcnR1YWxTY3JvbGxJdGVtU2l6ZSgpLFxuICAgICAgICAgIGJ1ZmZlclNpemU6IHRoaXMuZ2V0VmlydHVhbFNjcm9sbEJ1ZmZlclNpemUoKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsU3RhdGUkLm5leHQobmV3U3RhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBVcGRhdGUga2V5Ym9hcmQgbmF2aWdhdGlvbiBkaW1lbnNpb25zIGlmIGVuYWJsZWRcbiAgICBpZiAodGhpcy5pc0tleWJvYXJkTmF2aWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgdGhpcy5nZXRBY3RpdmVUYWJsZVN0YXRlKCkuc2V0RGltZW5zaW9ucyhcbiAgICAgICAgdGhpcy52aXNpYmxlQ2VsbEdyaWQubGVuZ3RoLFxuICAgICAgICB0aGlzLnZpc2libGVDb2x1bW5zLmxlbmd0aFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgc3luYyBkYXRhIGNoYW5nZSAoZnJvbSBASW5wdXQoKSBkYXRhIGNoYW5nZXMpXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVN5bmNEYXRhQ2hhbmdlKHByZXZpb3VzRGF0YTogYW55W10pOiB2b2lkIHtcbiAgICB0aGlzLnByZXZpb3VzRGF0YSA9IHByZXZpb3VzRGF0YTtcbiAgICB0aGlzLmludGVybmFsRGF0YSQubmV4dCh0aGlzLmRhdGEgfHwgW10pO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGFjdGl2ZSBUYWJsZVN0YXRlIChwcm92aWRlZCBvciBpbnRlcm5hbClcbiAgICovXG4gIGdldEFjdGl2ZVRhYmxlU3RhdGUoKTogVGFibGVTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVTdGF0ZSB8fCB0aGlzLmludGVybmFsVGFibGVTdGF0ZSE7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgYWN0aXZlIGNlbGwgZ3JpZCAocHJvdmlkZWQgb3IgaW50ZXJuYWwpXG4gICAqL1xuICBnZXRBY3RpdmVDZWxsR3JpZCgpOiBDZWxsPGFueT5bXVtdIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcm5hbENlbGxHcmlkIHx8IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB2aXNpYmxlIGNlbGwgZ3JpZCAoZmlsdGVyZWQgdG8gb25seSBpbmNsdWRlIHZpc2libGUgY29sdW1ucylcbiAgICovXG4gIGdldFZpc2libGVDZWxsR3JpZCgpOiBDZWxsPGFueT5bXVtdIHtcbiAgICBjb25zdCBhbGxDb2x1bW5zID0gdGhpcy5nZXRBY3RpdmVDb2x1bW5zKCk7XG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSB0aGlzLmdldFZpc2libGVDb2x1bW5zKCk7XG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbktleXMgPSBuZXcgU2V0KHZpc2libGVDb2x1bW5zLm1hcChjb2wgPT4gY29sLmtleSkpO1xuICAgIFxuICAgIC8vIEdldCBjb2x1bW4gaW5kaWNlcyBmb3IgdmlzaWJsZSBjb2x1bW5zXG4gICAgY29uc3QgdmlzaWJsZUluZGljZXMgPSBhbGxDb2x1bW5zXG4gICAgICAubWFwKChjb2wsIGluZGV4KSA9PiB2aXNpYmxlQ29sdW1uS2V5cy5oYXMoY29sLmtleSkgPyBpbmRleCA6IC0xKVxuICAgICAgLmZpbHRlcihpbmRleCA9PiBpbmRleCAhPT0gLTEpO1xuICAgIFxuICAgIGNvbnN0IGZ1bGxHcmlkID0gdGhpcy5nZXRBY3RpdmVDZWxsR3JpZCgpO1xuICAgIHJldHVybiBmdWxsR3JpZC5tYXAocm93ID0+IFxuICAgICAgdmlzaWJsZUluZGljZXMubWFwKGluZGV4ID0+IHJvd1tpbmRleF0pLmZpbHRlcihjZWxsID0+IGNlbGwgIT09IHVuZGVmaW5lZClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgdmlzaWJsZSBjZWxsIGdyaWQgYmFzZWQgb24gY3VycmVudCB2aXNpYmlsaXR5IGFuZCBjb2x1bW4gb3JkZXJcbiAgICogQ2FsbGVkIHdoZW4gZGF0YSwgdmlzaWJpbGl0eSwgb3IgY29sdW1uIG9yZGVyIGNoYW5nZXNcbiAgICogXG4gICAqIFRoaXMgbWV0aG9kIHByb3Blcmx5IGhhbmRsZXMgY29sdW1uIHJlb3JkZXJpbmcgYnkgbWFwcGluZyBjZWxscyBiYXNlZCBvblxuICAgKiBjb2x1bW4ga2V5cyByYXRoZXIgdGhhbiBpbmRpY2VzLCBlbnN1cmluZyBjZWxscyBmb2xsb3cgdGhlaXIgY29sdW1ucy5cbiAgICovXG4gIHByaXZhdGUgdXBkYXRlVmlzaWJsZUNlbGxHcmlkKCk6IHZvaWQge1xuICAgIGNvbnN0IGZ1bGxHcmlkID0gdGhpcy5nZXRBY3RpdmVDZWxsR3JpZCgpO1xuICAgIFxuICAgIC8vIEhhbmRsZSBlbXB0eSBncmlkXG4gICAgaWYgKCFmdWxsR3JpZCB8fCBmdWxsR3JpZC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMudmlzaWJsZUNlbGxHcmlkID0gW107XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIEJ1aWxkIGEgbWFwIG9mIGNvbHVtbktleSDihpIgY2VsbEluZGV4IGZvciB0aGUgY3VycmVudCBncmlkIHN0cnVjdHVyZVxuICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIGZpbmQgY2VsbHMgYnkgY29sdW1uIGtleSByZWdhcmRsZXNzIG9mIHRoZWlyIGN1cnJlbnQgcG9zaXRpb25cbiAgICBjb25zdCBrZXlUb0luZGV4TWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICBmdWxsR3JpZFswXT8uZm9yRWFjaCgoY2VsbCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChjZWxsKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbkNvbmZpZyA9IGNlbGwuZ2V0Q29sdW1uQ29uZmlnKCk7XG4gICAgICAgIGtleVRvSW5kZXhNYXAuc2V0KGNvbHVtbkNvbmZpZy5rZXksIGluZGV4KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvLyBSZW9yZGVyIGNlbGxzIHRvIG1hdGNoIHRoZSB2aXNpYmxlQ29sdW1ucyBvcmRlclxuICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gY29sdW1ucyBhcmUgbW92ZWQsIHRoZSBjZWxsIGRhdGEgZm9sbG93c1xuICAgIHRoaXMudmlzaWJsZUNlbGxHcmlkID0gZnVsbEdyaWQubWFwKHJvdyA9PiB7XG4gICAgICByZXR1cm4gdGhpcy52aXNpYmxlQ29sdW1uc1xuICAgICAgICAubWFwKGNvbCA9PiB7XG4gICAgICAgICAgY29uc3QgY2VsbEluZGV4ID0ga2V5VG9JbmRleE1hcC5nZXQoY29sLmtleSk7XG4gICAgICAgICAgcmV0dXJuIGNlbGxJbmRleCAhPT0gdW5kZWZpbmVkID8gcm93W2NlbGxJbmRleF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKGNlbGwpOiBjZWxsIGlzIENlbGw8YW55PiA9PiBjZWxsICE9PSB1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgdmlzaWJsZSBjb2x1bW5zIGJhc2VkIG9uIGN1cnJlbnQgdmlzaWJpbGl0eVxuICAgKiBDYWxsZWQgb25seSB3aGVuIHZpc2liaWxpdHkgYWN0dWFsbHkgY2hhbmdlc1xuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmxlQ29sdW1ucygpOiB2b2lkIHtcbiAgICBjb25zdCBhbGxDb2x1bW5zID0gdGhpcy5nZXRBY3RpdmVDb2x1bW5zKCk7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IGFsbENvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wudmlzaWJsZSAhPT0gZmFsc2UpO1xuICAgIFxuICAgIC8vIFJlY2FsY3VsYXRlIHN0aWNreSBvZmZzZXRzIGZvciB2aXNpYmxlIGNvbHVtbnMgb25seVxuICAgIHRoaXMucmVjYWxjdWxhdGVWaXNpYmxlU3RpY2t5T2Zmc2V0cyh0aGlzLnZpc2libGVDb2x1bW5zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYm90aCB2aXNpYmxlIGNvbHVtbnMgYW5kIGNlbGwgZ3JpZFxuICAgKiBDYWxsIHRoaXMgd2hlbmV2ZXIgZGF0YSBvciB2aXNpYmlsaXR5IGNoYW5nZXNcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlVmlzaWJsZURhdGEoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlQ29sdW1ucygpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUNlbGxHcmlkKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgYWN0aXZlIGNvbHVtbnMgKGZyb20gY29uZmlnIG9yIGxlZ2FjeSBpbnB1dClcbiAgICovXG4gIGdldEFjdGl2ZUNvbHVtbnMoKTogQ29sdW1uQ29uZmlnPGFueT5bXSB7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VkQ29uZmlnLmNvbHVtbnM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHZpc2libGUgY29sdW1ucyAoZmlsdGVyZWQgYnkgdmlzaWJpbGl0eSBwcm9wZXJ0eSlcbiAgICogQWxzbyByZWNhbGN1bGF0ZXMgc3RpY2t5IG9mZnNldHMgYmFzZWQgb24gdmlzaWJsZSBjb2x1bW5zIG9ubHlcbiAgICovXG4gIGdldFZpc2libGVDb2x1bW5zKCk6IENvbHVtbkNvbmZpZzxhbnk+W10ge1xuICAgIGNvbnN0IGFsbENvbHVtbnMgPSB0aGlzLmdldEFjdGl2ZUNvbHVtbnMoKTtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IGFsbENvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wudmlzaWJsZSAhPT0gZmFsc2UpOyAvLyBEZWZhdWx0IHRvIHRydWUgaWYgbm90IHNldFxuICAgIFxuICAgIC8vIFJlY2FsY3VsYXRlIHN0aWNreSBvZmZzZXRzIGZvciB2aXNpYmxlIGNvbHVtbnMgb25seVxuICAgIHRoaXMucmVjYWxjdWxhdGVWaXNpYmxlU3RpY2t5T2Zmc2V0cyh2aXNpYmxlQ29sdW1ucyk7XG4gICAgXG4gICAgcmV0dXJuIHZpc2libGVDb2x1bW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY2FsY3VsYXRlIHN0aWNreSBvZmZzZXRzIGJhc2VkIG9uIHZpc2libGUgY29sdW1ucyBvbmx5XG4gICAqIFRoaXMgZW5zdXJlcyBjb3JyZWN0IHBvc2l0aW9uaW5nIHdoZW4gY29sdW1ucyBhcmUgaGlkZGVuXG4gICAqL1xuICBwcml2YXRlIHJlY2FsY3VsYXRlVmlzaWJsZVN0aWNreU9mZnNldHModmlzaWJsZUNvbHVtbnM6IENvbHVtbkNvbmZpZzxhbnk+W10pOiB2b2lkIHtcbiAgICAvLyBDYWxjdWxhdGUgbGVmdCBzdGlja3kgb2Zmc2V0c1xuICAgIC8vIEFjY291bnQgZm9yIHJvdyBudW1iZXIgY29sdW1uIHdpZHRoIGlmIHNob3duXG4gICAgbGV0IGxlZnRPZmZzZXQgPSB0aGlzLm1lcmdlZENvbmZpZy5zaG93Um93TnVtYmVyID8gMzAgOiAwO1xuICAgIHZpc2libGVDb2x1bW5zLmZvckVhY2goY29sID0+IHtcbiAgICAgIGlmIChjb2wuc3RpY2t5ID09PSAnbGVmdCcpIHtcbiAgICAgICAgKGNvbCBhcyBhbnkpLnN0aWNreU9mZnNldCA9IGxlZnRPZmZzZXQ7XG4gICAgICAgIGxlZnRPZmZzZXQgKz0gKGNvbC53aWR0aCBhcyBudW1iZXIpIHx8IDEwMDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIENhbGN1bGF0ZSByaWdodCBzdGlja3kgb2Zmc2V0c1xuICAgIGxldCByaWdodE9mZnNldCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IHZpc2libGVDb2x1bW5zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBjb2wgPSB2aXNpYmxlQ29sdW1uc1tpXTtcbiAgICAgIGlmIChjb2wuc3RpY2t5ID09PSAncmlnaHQnKSB7XG4gICAgICAgIChjb2wgYXMgYW55KS5zdGlja3lPZmZzZXQgPSByaWdodE9mZnNldDtcbiAgICAgICAgcmlnaHRPZmZzZXQgKz0gKGNvbC53aWR0aCBhcyBudW1iZXIpIHx8IDEwMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNlbGxDaGFuZ2UoZXZlbnQ6IENlbGxDaGFuZ2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuY2VsbENoYW5nZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uQ29sdW1uUmVzaXplZChldmVudDogQ29sdW1uUmVzaXplRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBSZWNhbGN1bGF0ZSBzdGlja3kgb2Zmc2V0cyBhZnRlciByZXNpemVcbiAgICBjb25zdCByb3dOdW1iZXJXaWR0aCA9IHRoaXMubWVyZ2VkQ29uZmlnLnNob3dSb3dOdW1iZXIgPyAzMCA6IDA7XG4gICAgY29uc3Qgc2V0dGluZ3NDb2x1bW5XaWR0aCA9IHRoaXMuaGFzUm93QWN0aW9ucygpID8gMzIgOiAwO1xuICAgIHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpLmNhbGN1bGF0ZVN0aWNreU9mZnNldHMocm93TnVtYmVyV2lkdGgsIHNldHRpbmdzQ29sdW1uV2lkdGgpO1xuICAgIFxuICAgIC8vIEVtaXQgdG8gcGFyZW50XG4gICAgdGhpcy5jb2x1bW5SZXNpemVkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25Db2x1bW5Nb3ZlZChldmVudDoge2NvbHVtbktleTogc3RyaW5nLCBkaXJlY3Rpb246ICdsZWZ0JyB8ICdyaWdodCd9KTogdm9pZCB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0QWN0aXZlQ29sdW1ucygpO1xuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KGMgPT4gYy5rZXkgPT09IGV2ZW50LmNvbHVtbktleSk7XG4gICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHJldHVybjtcbiAgICBcbiAgICAvLyBDYWxjdWxhdGUgdGFyZ2V0IGluZGV4XG4gICAgY29uc3QgdGFyZ2V0SW5kZXggPSBldmVudC5kaXJlY3Rpb24gPT09ICdsZWZ0JyBcbiAgICAgID8gY3VycmVudEluZGV4IC0gMSBcbiAgICAgIDogY3VycmVudEluZGV4ICsgMTtcbiAgICBcbiAgICAvLyBDaGVjayBib3VuZHNcbiAgICBpZiAodGFyZ2V0SW5kZXggPCAwIHx8IHRhcmdldEluZGV4ID49IGNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIFN3YXAgY29sdW1uc1xuICAgIFtjb2x1bW5zW2N1cnJlbnRJbmRleF0sIGNvbHVtbnNbdGFyZ2V0SW5kZXhdXSA9IFxuICAgIFtjb2x1bW5zW3RhcmdldEluZGV4XSwgY29sdW1uc1tjdXJyZW50SW5kZXhdXTtcbiAgICBcbiAgICAvLyBVcGRhdGUgVGFibGVTdGF0ZSB3aXRoIG5ldyBjb2x1bW4gb3JkZXJcbiAgICB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKS51cGRhdGVDb2x1bW5zKGNvbHVtbnMpO1xuICAgIHRoaXMuY29sdW1uTW92ZWQuZW1pdCh7XG4gICAgICBjb2x1bW5LZXk6IGV2ZW50LmNvbHVtbktleSxcbiAgICAgIGRpcmVjdGlvbjogZXZlbnQuZGlyZWN0aW9uLFxuICAgICAgb2xkSW5kZXg6IGN1cnJlbnRJbmRleCxcbiAgICAgIG5ld0luZGV4OiB0YXJnZXRJbmRleCxcbiAgICAgIGNvbHVtbjogY29sdW1uc1tjdXJyZW50SW5kZXhdXG4gICAgfSk7XG4gICAgLy8gRm9yY2UgdmlydHVhbCBzY3JvbGwgdG8gcmUtcmVuZGVyIGJ5IHJlLWVtaXR0aW5nIGN1cnJlbnQgc3RhdGVcbiAgICAvLyBUaGlzIGVuc3VyZXMgdmlzaWJsZVJvd3MkIHBpY2tzIHVwIHRoZSB1cGRhdGVkIHZpc2libGVDZWxsR3JpZFxuICAgIGlmICh0aGlzLmlzVmlydHVhbFNjcm9sbEVuYWJsZWQoKSkge1xuICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gdGhpcy52aXJ0dWFsU2Nyb2xsU3RhdGUkLnZhbHVlO1xuICAgICAgaWYgKGN1cnJlbnRTdGF0ZSkge1xuICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxTdGF0ZSQubmV4dCh7Li4uY3VycmVudFN0YXRlfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgY29sdW1uIHRvIHBvc2l0aW9uIGp1c3QgYmVmb3JlIHJpZ2h0IHN0aWNreSBjb2x1bW5zICh1c2VkIHdoZW4gcGlubmluZyByaWdodClcbiAgICovXG4gIHByaXZhdGUgbW92ZUNvbHVtblRvRW5kKGNvbHVtbktleTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0QWN0aXZlQ29sdW1ucygpO1xuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KGMgPT4gYy5rZXkgPT09IGNvbHVtbktleSk7XG4gICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHJldHVybjtcbiAgICBcbiAgICAvLyBGaW5kIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgcmlnaHQtc3RpY2t5IGNvbHVtblxuICAgIGNvbnN0IGZpcnN0UmlnaHRTdGlja3lJbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KGMgPT4gYy5zdGlja3kgPT09ICdyaWdodCcpO1xuICAgIFxuICAgIC8vIERldGVybWluZSB0YXJnZXQgaW5kZXg6IGp1c3QgYmVmb3JlIGZpcnN0IHJpZ2h0LXN0aWNreSwgb3IgYXQgZW5kIGlmIG5vbmUgZXhpc3RcbiAgICBjb25zdCB0YXJnZXRJbmRleCA9IGZpcnN0UmlnaHRTdGlja3lJbmRleCAhPT0gLTEgPyBmaXJzdFJpZ2h0U3RpY2t5SW5kZXggOiBjb2x1bW5zLmxlbmd0aDtcbiAgICBcbiAgICAvLyBJZiBhbHJlYWR5IGF0IHRhcmdldCBwb3NpdGlvbiwgbm8gbmVlZCB0byBtb3ZlXG4gICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gdGFyZ2V0SW5kZXggfHwgY3VycmVudEluZGV4ID09PSB0YXJnZXRJbmRleCAtIDEpIHJldHVybjtcbiAgICBcbiAgICAvLyBSZW1vdmUgY29sdW1uIGZyb20gY3VycmVudCBwb3NpdGlvblxuICAgIGNvbnN0IFtjb2x1bW5dID0gY29sdW1ucy5zcGxpY2UoY3VycmVudEluZGV4LCAxKTtcbiAgICBcbiAgICAvLyBBZGp1c3QgdGFyZ2V0IGluZGV4IGlmIHdlIHJlbW92ZWQgYW4gZWxlbWVudCBiZWZvcmUgaXRcbiAgICBjb25zdCBhZGp1c3RlZFRhcmdldEluZGV4ID0gY3VycmVudEluZGV4IDwgdGFyZ2V0SW5kZXggPyB0YXJnZXRJbmRleCAtIDEgOiB0YXJnZXRJbmRleDtcbiAgICBcbiAgICAvLyBJbnNlcnQgYXQgdGFyZ2V0IHBvc2l0aW9uIChiZWZvcmUgZmlyc3QgcmlnaHQtc3RpY2t5IGNvbHVtbiwgb3IgYXQgZW5kKVxuICAgIGNvbHVtbnMuc3BsaWNlKGFkanVzdGVkVGFyZ2V0SW5kZXgsIDAsIGNvbHVtbik7XG4gICAgXG4gICAgLy8gVXBkYXRlIFRhYmxlU3RhdGUgd2l0aCBuZXcgY29sdW1uIG9yZGVyXG4gICAgdGhpcy5nZXRBY3RpdmVUYWJsZVN0YXRlKCkudXBkYXRlQ29sdW1ucyhjb2x1bW5zKTtcbiAgICBcbiAgICAvLyBGb3JjZSB2aXJ0dWFsIHNjcm9sbCB0byByZS1yZW5kZXJcbiAgICBpZiAodGhpcy5pc1ZpcnR1YWxTY3JvbGxFbmFibGVkKCkpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMudmlydHVhbFNjcm9sbFN0YXRlJC52YWx1ZTtcbiAgICAgIGlmIChjdXJyZW50U3RhdGUpIHtcbiAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsU3RhdGUkLm5leHQoey4uLmN1cnJlbnRTdGF0ZX0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VtdWxhdGl2ZSBsZWZ0IG9mZnNldCBmb3IgYSBzdGlja3kgY29sdW1uIG9uIHRoZSBsZWZ0IHNpZGVcbiAgICovXG4gIGdldFN0aWNreUxlZnRPZmZzZXQoY29sdW1uS2V5OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldEFjdGl2ZUNvbHVtbnMoKTtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICBpZiAoY29sLmtleSA9PT0gY29sdW1uS2V5KSBicmVhaztcbiAgICAgIGlmIChjb2wuc3RpY2t5ID09PSAnbGVmdCcpIHtcbiAgICAgICAgb2Zmc2V0ICs9IChjb2wud2lkdGggYXMgbnVtYmVyKSB8fCAxMDA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1bXVsYXRpdmUgcmlnaHQgb2Zmc2V0IGZvciBhIHN0aWNreSBjb2x1bW4gb24gdGhlIHJpZ2h0IHNpZGVcbiAgICovXG4gIGdldFN0aWNreVJpZ2h0T2Zmc2V0KGNvbHVtbktleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRBY3RpdmVDb2x1bW5zKCk7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgY29uc3QgY29sSW5kZXggPSBjb2x1bW5zLmZpbmRJbmRleChjID0+IGMua2V5ID09PSBjb2x1bW5LZXkpO1xuICAgIGZvciAobGV0IGkgPSBjb2xJbmRleCArIDE7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjb2wgPSBjb2x1bW5zW2ldO1xuICAgICAgaWYgKGNvbC5zdGlja3kgPT09ICdyaWdodCcpIHtcbiAgICAgICAgb2Zmc2V0ICs9IChjb2wud2lkdGggYXMgbnVtYmVyKSB8fCAxMDA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvZmZzZXQ7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0b3AgcGFnaW5hdGlvbiBzaG91bGQgYmUgc2hvd25cbiAgICovXG4gIHNob3dUb3BQYWdpbmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1lcmdlZENvbmZpZy5wYWdpbmF0aW9uPy5lbmFibGVkID09IHRydWUgJiZcbiAgICAgICAgICAgdGhpcy5tZXJnZWRDb25maWcucGFnaW5hdGlvbj8uc2hvd1RvcENvbnRyb2xzID09PSB0cnVlO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgYm90dG9tIHBhZ2luYXRpb24gc2hvdWxkIGJlIHNob3duXG4gICAqL1xuICBzaG93Qm90dG9tUGFnaW5hdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tZXJnZWRDb25maWcucGFnaW5hdGlvbj8uZW5hYmxlZCA9PSB0cnVlICYmXG4gICAgICAgICAgICh0aGlzLm1lcmdlZENvbmZpZy5wYWdpbmF0aW9uPy5zaG93Qm90dG9tQ29udHJvbHMgPz8gdHJ1ZSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0YWJsZSBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSBjb25maWcgVGFibGUgY29uZmlndXJhdGlvbiB0byB2YWxpZGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUNvbmZpZ3VyYXRpb24oY29uZmlnOiBUYWJsZUNvbmZpZyk6IHZvaWQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2NoZW1hVmFsaWRhdG9yLnZhbGlkYXRlKGNvbmZpZywgdHJ1ZSwgZmFsc2UpOyAvLyBEaXNhYmxlIGxvZ2dpbmcgaGVyZSwgd2UnbGwgbG9nIG1hbnVhbGx5IHdpdGggY29udGV4dFxuICAgIFxuICAgIGlmICghcmVzdWx0LnZhbGlkICYmIHJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gRW1pdCB2YWxpZGF0aW9uIGVycm9yc1xuICAgICAgdGhpcy5jb25maWdWYWxpZGF0aW9uRXJyb3JzLmVtaXQocmVzdWx0LmVycm9ycyk7XG4gICAgICBcbiAgICAgIC8vIExvZyB2YWxpZGF0aW9uIGVycm9ycyB3aXRoIGNvbnRleHRcbiAgICAgIGNvbnN0IGNvbmZpZ1NuaXBwZXQgPSBKU09OLnN0cmluZ2lmeShjb25maWcsIG51bGwsIDIpLnN1YnN0cmluZygwLCA1MDApOyAvLyBGaXJzdCA1MDAgY2hhcnMgb2YgY29uZmlnXG4gICAgICB0aGlzLmxvZ2dlci5sb2dWYWxpZGF0aW9uRXJyb3JzKHJlc3VsdC5lcnJvcnMsICdyZW5kZXJlcicsIHtcbiAgICAgICAgY29uZmlnU25pcHBldDogY29uZmlnU25pcHBldFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIExvZyB3YXJuaW5ncyB0byBjb25zb2xlIChkb24ndCBicmVhayByZW5kZXJpbmcpXG4gICAgICBjb25zb2xlLndhcm4oJ1NtYXJ0IFRhYmxlOiBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gZXJyb3JzIGRldGVjdGVkOicsIHJlc3VsdC5lcnJvcnMpO1xuICAgICAgcmVzdWx0LmVycm9ycy5mb3JFYWNoKGVycm9yID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKGAgIC0gJHtlcnJvci5maWVsZCB8fCBlcnJvci5wYXRofTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIGFkZCBjb2x1bW4gYnV0dG9uIGNsaWNrXG4gICAqL1xuICBvbkFkZENvbHVtbkNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0NvbHVtbk1vZGFsID0gdHJ1ZTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBjb2x1bW4gY3JlYXRlZCBmcm9tIG1vZGFsXG4gICAqL1xuICBvbkNvbHVtbkNyZWF0ZWQoY29sdW1uOiBDb2x1bW5Db25maWcpOiB2b2lkIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRBY3RpdmVDb2x1bW5zKCk7XG4gICAgY29uc3QgYWRkRXZlbnQ6IENvbHVtbkFkZEV2ZW50ID0ge1xuICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICBpbmRleDogY29sdW1ucy5sZW5ndGgsXG4gICAgICB0b3RhbENvbHVtbnM6IGNvbHVtbnMubGVuZ3RoICsgMVxuICAgIH07XG4gICAgXG4gICAgLy8gRW1pdCB0aGUgbmV3IGNvbHVtbiB0byBwYXJlbnQgY29tcG9uZW50XG4gICAgdGhpcy5jb2x1bW5BZGRlZC5lbWl0KGFkZEV2ZW50KTtcbiAgICBcbiAgICAvLyBDbG9zZSB0aGUgbW9kYWxcbiAgICB0aGlzLnNob3dDb2x1bW5Nb2RhbCA9IGZhbHNlO1xuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIG1vZGFsIGNhbmNlbGxlZFxuICAgKi9cbiAgb25Nb2RhbENhbmNlbGxlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dDb2x1bW5Nb2RhbCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHZpcnR1YWwgc2Nyb2xsIGlzIGVuYWJsZWRcbiAgICovXG4gIGlzVmlydHVhbFNjcm9sbEVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VkQ29uZmlnLmRpc3BsYXk/LnZpcnR1YWxTY3JvbGw/LmVuYWJsZWQgPz8gZmFsc2U7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBjb2x1bW4gaXMgdGhlIGZpcnN0IHN0aWNreS1yaWdodCBjb2x1bW4gKGZvciBzaGFkb3cgc3R5bGluZylcbiAgICovXG4gIGlzRmlyc3RTdGlja3lSaWdodChjb2x1bW5LZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0aWNreVJpZ2h0Q29sdW1ucyA9IHRoaXMudmlzaWJsZUNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuc3RpY2t5ID09PSAncmlnaHQnICYmICFjb2wua2V5LmluY2x1ZGVzKCdzZXR0aW5ncycpKTtcbiAgICByZXR1cm4gc3RpY2t5UmlnaHRDb2x1bW5zLmxlbmd0aCA+IDAgJiYgc3RpY2t5UmlnaHRDb2x1bW5zWzBdLmtleSA9PT0gY29sdW1uS2V5O1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHZpcnR1YWwgc2Nyb2xsIGl0ZW0gc2l6ZVxuICAgKi9cbiAgZ2V0VmlydHVhbFNjcm9sbEl0ZW1TaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VkQ29uZmlnLmRpc3BsYXk/LnZpcnR1YWxTY3JvbGw/Lml0ZW1TaXplID8/IDQ4O1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHZpZXdwb3J0IGhlaWdodFxuICAgKi9cbiAgZ2V0VmlydHVhbFNjcm9sbFZpZXdwb3J0SGVpZ2h0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VkQ29uZmlnLmRpc3BsYXk/LnZpcnR1YWxTY3JvbGw/LnZpZXdwb3J0SGVpZ2h0ID8/IDYwMDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBidWZmZXIgc2l6ZVxuICAgKi9cbiAgZ2V0VmlydHVhbFNjcm9sbEJ1ZmZlclNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5tZXJnZWRDb25maWcuZGlzcGxheT8udmlydHVhbFNjcm9sbD8uYnVmZmVyU2l6ZSA/PyA1O1xuICB9XG4gIFxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB2aXJ0dWFsIHNjcm9sbCBzdGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplVmlydHVhbFNjcm9sbCgpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHRoaXMudmlydHVhbFNjcm9sbFNlcnZpY2UuY2FsY3VsYXRlVmlzaWJsZVJhbmdlKHtcbiAgICAgIHNjcm9sbFRvcDogMCxcbiAgICAgIHZpZXdwb3J0SGVpZ2h0OiB0aGlzLmdldFZpcnR1YWxTY3JvbGxWaWV3cG9ydEhlaWdodCgpLFxuICAgICAgdG90YWxJdGVtczogdGhpcy52aXNpYmxlQ2VsbEdyaWQubGVuZ3RoLFxuICAgICAgaXRlbVNpemU6IHRoaXMuZ2V0VmlydHVhbFNjcm9sbEl0ZW1TaXplKCksXG4gICAgICBidWZmZXJTaXplOiB0aGlzLmdldFZpcnR1YWxTY3JvbGxCdWZmZXJTaXplKClcbiAgICB9KTtcbiAgICBcbiAgICB0aGlzLnZpcnR1YWxTY3JvbGxTdGF0ZSQubmV4dChuZXdTdGF0ZSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTZXR1cCBzY3JvbGwgZXZlbnQgbGlzdGVuZXJcbiAgICovXG4gIHByaXZhdGUgc2V0dXBWaXJ0dWFsU2Nyb2xsTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNjcm9sbFZpZXdwb3J0KSByZXR1cm47XG4gICAgXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuc2Nyb2xsVmlld3BvcnQubmF0aXZlRWxlbWVudDtcbiAgICB0aGlzLnNjcm9sbENvbnRhaW5lciA9IGVsZW1lbnQ7XG4gICAgXG4gICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24gPSB0aGlzLnZpcnR1YWxTY3JvbGxTZXJ2aWNlXG4gICAgICAuY3JlYXRlU2Nyb2xsT2JzZXJ2YWJsZShlbGVtZW50KVxuICAgICAgLnN1YnNjcmliZShzY3JvbGxUb3AgPT4gdGhpcy5vblZpcnR1YWxTY3JvbGwoc2Nyb2xsVG9wKSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgdmlydHVhbCBzY3JvbGwgZXZlbnRcbiAgICovXG4gIHByaXZhdGUgb25WaXJ0dWFsU2Nyb2xsKHNjcm9sbFRvcDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB0aGlzLnZpcnR1YWxTY3JvbGxTZXJ2aWNlLmNhbGN1bGF0ZVZpc2libGVSYW5nZSh7XG4gICAgICBzY3JvbGxUb3AsXG4gICAgICB2aWV3cG9ydEhlaWdodDogdGhpcy5nZXRWaXJ0dWFsU2Nyb2xsVmlld3BvcnRIZWlnaHQoKSxcbiAgICAgIHRvdGFsSXRlbXM6IHRoaXMudmlzaWJsZUNlbGxHcmlkLmxlbmd0aCxcbiAgICAgIGl0ZW1TaXplOiB0aGlzLmdldFZpcnR1YWxTY3JvbGxJdGVtU2l6ZSgpLFxuICAgICAgYnVmZmVyU2l6ZTogdGhpcy5nZXRWaXJ0dWFsU2Nyb2xsQnVmZmVyU2l6ZSgpXG4gICAgfSk7XG4gICAgXG4gICAgdGhpcy52aXJ0dWFsU2Nyb2xsU3RhdGUkLm5leHQobmV3U3RhdGUpO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHJvdyBpbmRleCBmb3IgdHJhY2tpbmdcbiAgICovXG4gIGdldEFic29sdXRlUm93SW5kZXgocmVsYXRpdmVJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLnZpcnR1YWxTY3JvbGxTdGF0ZSQudmFsdWU7XG4gICAgaWYgKCFjdXJyZW50U3RhdGUpIHJldHVybiByZWxhdGl2ZUluZGV4O1xuICAgIHJldHVybiBjdXJyZW50U3RhdGUuc3RhcnRJbmRleCArIHJlbGF0aXZlSW5kZXg7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBUcmFja0J5IGZ1bmN0aW9uIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2VcbiAgICovXG4gIHRyYWNrQnlSb3dJbmRleCA9IChpbmRleDogbnVtYmVyLCByb3c6IENlbGw8YW55PltdKTogbnVtYmVyID0+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRBYnNvbHV0ZVJvd0luZGV4KGluZGV4KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFNjcm9sbCB0byBzcGVjaWZpYyByb3cgcHJvZ3JhbW1hdGljYWxseVxuICAgKi9cbiAgc2Nyb2xsVG9Sb3coaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5zY3JvbGxDb250YWluZXIgfHwgIXRoaXMuaXNWaXJ0dWFsU2Nyb2xsRW5hYmxlZCgpKSByZXR1cm47XG4gICAgXG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gaW5kZXggKiB0aGlzLmdldFZpcnR1YWxTY3JvbGxJdGVtU2l6ZSgpO1xuICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIHJvdyBhY3Rpb25zIGFyZSBlbmFibGVkXG4gICAqL1xuICBoYXNSb3dBY3Rpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLm1lcmdlZENvbmZpZy5mZWF0dXJlcz8ucm93TWFuYWdlbWVudD8uYWN0aW9ucyAmJiBcbiAgICAgICAgICAgICAgdGhpcy5tZXJnZWRDb25maWcuZmVhdHVyZXMucm93TWFuYWdlbWVudC5hY3Rpb25zLmxlbmd0aCA+IDApO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHJvdyBhY3Rpb25zIGZyb20gY29uZmlnXG4gICAqL1xuICBnZXRSb3dBY3Rpb25zKCk6IFJvd0FjdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5tZXJnZWRDb25maWcuZmVhdHVyZXM/LnJvd01hbmFnZW1lbnQ/LmFjdGlvbnMgfHwgW107XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgcm93IGRhdGEgZnJvbSBjZWxsIGdyaWRcbiAgICovXG4gIGdldFJvd0RhdGEocm93SW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgY29uc3QgY2VsbEdyaWQgPSB0aGlzLmdldEFjdGl2ZUNlbGxHcmlkKCk7XG4gICAgaWYgKCFjZWxsR3JpZCB8fCByb3dJbmRleCA8IDAgfHwgcm93SW5kZXggPj0gY2VsbEdyaWQubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgXG4gICAgY29uc3Qgcm93ID0gY2VsbEdyaWRbcm93SW5kZXhdO1xuICAgIGlmICghcm93IHx8IHJvdy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBcbiAgICAvLyBHZXQgcmF3IGRhdGEgZnJvbSBmaXJzdCBjZWxsIChhbGwgY2VsbHMgaW4gYSByb3cgc2hhcmUgdGhlIHNhbWUgcm93RGF0YSlcbiAgICByZXR1cm4gcm93WzBdPy5nZXRSb3dEYXRhKCkgfHwgbnVsbDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIE9wZW4gcm93IGFjdGlvbnMgZHJvcGRvd25cbiAgICovXG4gIG9wZW5Sb3dBY3Rpb25zRHJvcGRvd24oZXZlbnQ6IE1vdXNlRXZlbnQsIHJvd0RhdGE6IGFueSwgcm93SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCByZWN0ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIFxuICAgIC8vIENhbGN1bGF0ZSBwb3NpdGlvbiAoYmVsb3cgdGhlIGJ1dHRvbiBieSBkZWZhdWx0KVxuICAgIGNvbnN0IHBvc2l0aW9uID0ge1xuICAgICAgeDogcmVjdC5sZWZ0LFxuICAgICAgeTogcmVjdC5ib3R0b20gKyA0IC8vIDRweCBnYXBcbiAgICB9O1xuICAgIFxuICAgIC8vIENyZWF0ZSBjb250ZXh0XG4gICAgY29uc3QgY29udGV4dDogUm93QWN0aW9uQ29udGV4dCA9IHtcbiAgICAgIHJvd0RhdGEsXG4gICAgICByb3dJbmRleCxcbiAgICAgIGFjdGlvbnM6IHRoaXMuZ2V0Um93QWN0aW9ucygpXG4gICAgfTtcbiAgICBcbiAgICAvLyBVcGRhdGUgZHJvcGRvd24gc3RhdGVcbiAgICB0aGlzLmRyb3Bkb3duU3RhdGUgPSB7XG4gICAgICBpc09wZW46IHRydWUsXG4gICAgICBwb3NpdGlvbixcbiAgICAgIGNvbnRleHRcbiAgICB9O1xuICAgIFxuICAgIC8vIERpc2FibGUgYm9keSBzY3JvbGxcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgXG4gICAgLy8gSWYgdmlydHVhbCBzY3JvbGwgaXMgZW5hYmxlZCwgYWRkIHNjcm9sbCBsaXN0ZW5lciB0byBjbG9zZSBkcm9wZG93blxuICAgIGlmICh0aGlzLmlzVmlydHVhbFNjcm9sbEVuYWJsZWQoKSAmJiB0aGlzLnNjcm9sbENvbnRhaW5lcikge1xuICAgICAgY29uc3Qgc2Nyb2xsTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2VSb3dBY3Rpb25zRHJvcGRvd24oKTtcbiAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXI/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHNjcm9sbExpc3RlbmVyKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzY3JvbGxMaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIENsb3NlIHJvdyBhY3Rpb25zIGRyb3Bkb3duXG4gICAqL1xuICBjbG9zZVJvd0FjdGlvbnNEcm9wZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLmRyb3Bkb3duU3RhdGUgPSB7XG4gICAgICBpc09wZW46IGZhbHNlLFxuICAgICAgcG9zaXRpb246IHsgeDogMCwgeTogMCB9LFxuICAgICAgY29udGV4dDogbnVsbFxuICAgIH07XG4gICAgXG4gICAgLy8gUmUtZW5hYmxlIGJvZHkgc2Nyb2xsXG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICcnO1xuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIHJvdyBhY3Rpb24gY2xpY2tlZFxuICAgKi9cbiAgb25Sb3dBY3Rpb25DbGlja2VkKGV2ZW50OiBSb3dBY3Rpb25FdmVudCk6IHZvaWQge1xuICAgIC8vIEV4ZWN1dGUgYWN0aW9uIGNhbGxiYWNrIGlmIHByb3ZpZGVkXG4gICAgaWYgKGV2ZW50LmFjdGlvbi5hY3Rpb24pIHtcbiAgICAgIGV2ZW50LmFjdGlvbi5hY3Rpb24oZXZlbnQucm93RGF0YSwgZXZlbnQucm93SW5kZXgpO1xuICAgIH1cbiAgICBcbiAgICAvLyBFbWl0IGV2ZW50IHRvIHBhcmVudFxuICAgIHRoaXMucm93QWN0aW9uLmVtaXQoZXZlbnQpO1xuICAgIFxuICAgIC8vIENsb3NlIGRyb3Bkb3duXG4gICAgdGhpcy5jbG9zZVJvd0FjdGlvbnNEcm9wZG93bigpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBDT0xVTU4gTUVOVSBBQ1RJT05TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogT3BlbiBjb2x1bW4gbWVudSBkcm9wZG93blxuICAgKi9cbiAgb3BlbkNvbHVtbk1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQsIGNvbHVtbjogQ29sdW1uQ29uZmlnPGFueT4sIGNvbHVtbkluZGV4OiBudW1iZXIsIGlzRmlyc3Q6IGJvb2xlYW4sIGlzTGFzdDogYm9vbGVhbik6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgcG9zaXRpb24gKGJlbG93IHRoZSBidXR0b24gYnkgZGVmYXVsdClcbiAgICBjb25zdCBwb3NpdGlvbiA9IHtcbiAgICAgIHg6IHJlY3QubGVmdCxcbiAgICAgIHk6IHJlY3QuYm90dG9tICsgNCAvLyA0cHggZ2FwXG4gICAgfTtcblxuICAgIC8vIENyZWF0ZSBjb250ZXh0XG4gICAgY29uc3QgY29udGV4dDogQ29sdW1uQWN0aW9uQ29udGV4dCA9IHtcbiAgICAgIGNvbHVtbixcbiAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgaXNGaXJzdENvbHVtbjogaXNGaXJzdCxcbiAgICAgIGlzTGFzdENvbHVtbjogaXNMYXN0LFxuICAgICAgdGFibGVTdGF0ZTogdGhpcy5nZXRBY3RpdmVUYWJsZVN0YXRlKCksXG4gICAgICBhY3Rpb25zOiB0aGlzLmdldENvbHVtbkFjdGlvbnMoY29sdW1uLCBjb2x1bW5JbmRleCwgaXNGaXJzdCwgaXNMYXN0KVxuICAgIH07XG5cbiAgICAvLyBVcGRhdGUgY29sdW1uIG1lbnUgc3RhdGVcbiAgICB0aGlzLmNvbHVtbk1lbnVTdGF0ZSA9IHtcbiAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgIHBvc2l0aW9uLFxuICAgICAgY29udGV4dFxuICAgIH07XG5cbiAgICAvLyBEaXNhYmxlIGJvZHkgc2Nyb2xsXG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuXG4gICAgLy8gSWYgdmlydHVhbCBzY3JvbGwgaXMgZW5hYmxlZCwgYWRkIHNjcm9sbCBsaXN0ZW5lciB0byBjbG9zZSBkcm9wZG93blxuICAgIGlmICh0aGlzLmlzVmlydHVhbFNjcm9sbEVuYWJsZWQoKSAmJiB0aGlzLnNjcm9sbENvbnRhaW5lcikge1xuICAgICAgY29uc3Qgc2Nyb2xsTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2VDb2x1bW5NZW51KCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyPy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzY3JvbGxMaXN0ZW5lcik7XG4gICAgICB9O1xuICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc2Nyb2xsTGlzdGVuZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgY29sdW1uIG1lbnUgZHJvcGRvd25cbiAgICovXG4gIGNsb3NlQ29sdW1uTWVudSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbHVtbk1lbnVTdGF0ZSA9IHtcbiAgICAgIGlzT3BlbjogZmFsc2UsXG4gICAgICBwb3NpdGlvbjogeyB4OiAwLCB5OiAwIH0sXG4gICAgICBjb250ZXh0OiBudWxsXG4gICAgfTtcblxuICAgIC8vIFJlLWVuYWJsZSBib2R5IHNjcm9sbFxuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgY29sdW1uIGFjdGlvbiBjbGlja2VkXG4gICAqL1xuICBvbkNvbHVtbkFjdGlvbkNsaWNrZWQoZXZlbnQ6IENvbHVtbkFjdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgLy8gRXhlY3V0ZSBhY3Rpb24gY2FsbGJhY2sgaWYgcHJvdmlkZWRcbiAgICBpZiAoZXZlbnQuYWN0aW9uLmFjdGlvbikge1xuICAgICAgZXZlbnQuYWN0aW9uLmFjdGlvbihldmVudC5jb2x1bW4sIGV2ZW50LmNvbHVtbkluZGV4KTtcbiAgICB9XG5cbiAgICAvLyBEb24ndCBjbG9zZSBtZW51IGlmIGl0J3MgYSBmaWx0ZXIgYWN0aW9uIChmaWx0ZXIgbmVlZHMgbWVudSB0byBzdGF5IG9wZW4pXG4gICAgaWYgKGV2ZW50LmFjdGlvbi5pZCA9PT0gJ2ZpbHRlcicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDbG9zZSBkcm9wZG93biBmb3Igb3RoZXIgYWN0aW9uc1xuICAgIHRoaXMuY2xvc2VDb2x1bW5NZW51KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvbHVtbiBhY3Rpb25zIChidWlsdC1pbiArIGN1c3RvbSlcbiAgICovXG4gIHByaXZhdGUgZ2V0Q29sdW1uQWN0aW9ucyhcbiAgICBjb2x1bW46IENvbHVtbkNvbmZpZzxhbnk+LCBcbiAgICBjb2x1bW5JbmRleDogbnVtYmVyLCBcbiAgICBpc0ZpcnN0OiBib29sZWFuLCBcbiAgICBpc0xhc3Q6IGJvb2xlYW5cbiAgKTogQ29sdW1uQWN0aW9uW10ge1xuICAgIGNvbnN0IGFjdGlvbnM6IENvbHVtbkFjdGlvbltdID0gW107XG4gICAgXG4gICAgLy8gQWRkIGJ1aWx0LWluIGFjdGlvbnMgaWYgZW5hYmxlZCAoZGVmYXVsdDogdHJ1ZSlcbiAgICBjb25zdCBpbmNsdWRlQnVpbHRJbiA9IGNvbHVtbi5pbmNsdWRlQnVpbHRJbkFjdGlvbnMgPz8gdHJ1ZTtcbiAgICBpZiAoaW5jbHVkZUJ1aWx0SW4pIHtcbiAgICAgIGFjdGlvbnMucHVzaCguLi50aGlzLmdldEJ1aWx0SW5Db2x1bW5BY3Rpb25zKGNvbHVtbiwgY29sdW1uSW5kZXgsIGlzRmlyc3QsIGlzTGFzdCkpO1xuICAgIH1cbiAgICBcbiAgICAvLyBBZGQgY3VzdG9tIGNvbHVtbiBhY3Rpb25zIGZyb20gY29uZmlnXG4gICAgaWYgKGNvbHVtbi5jb2x1bW5BY3Rpb25zICYmIGNvbHVtbi5jb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGFjdGlvbnMucHVzaCguLi5jb2x1bW4uY29sdW1uQWN0aW9ucyk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBhY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBidWlsdC1pbiBjb2x1bW4gYWN0aW9ucyAoc29ydCwgZmlsdGVyLCBwaW4sIG1vdmUpXG4gICAqL1xuICBwcml2YXRlIGdldEJ1aWx0SW5Db2x1bW5BY3Rpb25zKFxuICAgIGNvbHVtbjogQ29sdW1uQ29uZmlnPGFueT4sXG4gICAgY29sdW1uSW5kZXg6IG51bWJlcixcbiAgICBpc0ZpcnN0OiBib29sZWFuLFxuICAgIGlzTGFzdDogYm9vbGVhblxuICApOiBDb2x1bW5BY3Rpb25bXSB7XG4gICAgY29uc3QgdGFibGVTdGF0ZSA9IHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpO1xuICAgIGNvbnN0IGFjdGlvbnM6IENvbHVtbkFjdGlvbltdID0gW107XG5cbiAgICAvLyBTb3J0IGFzY2VuZGluZ1xuICAgIGlmIChjb2x1bW4uc29ydGFibGUgIT09IGZhbHNlKSB7XG4gICAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgICBpZDogJ3NvcnQtYXNjJyxcbiAgICAgICAgbGFiZWw6IHRoaXMuZ2V0U29ydExhYmVsKGNvbHVtbiwgJ2FzYycpLFxuICAgICAgICBpY29uOiAn4oaRJyxcbiAgICAgICAgYWN0aW9uOiAoY29sKSA9PiB7XG4gICAgICAgICAgdGFibGVTdGF0ZS5hZGRTb3J0VG9Db2x1bW4oY29sLmtleSwgU29ydERpcmVjdGlvbi5BU0MpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBTb3J0IGRlc2NlbmRpbmdcbiAgICBpZiAoY29sdW1uLnNvcnRhYmxlICE9PSBmYWxzZSkge1xuICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgaWQ6ICdzb3J0LWRlc2MnLFxuICAgICAgICBsYWJlbDogdGhpcy5nZXRTb3J0TGFiZWwoY29sdW1uLCAnZGVzYycpLFxuICAgICAgICBpY29uOiAn4oaTJyxcbiAgICAgICAgYWN0aW9uOiAoY29sKSA9PiB7XG4gICAgICAgICAgdGFibGVTdGF0ZS5hZGRTb3J0VG9Db2x1bW4oY29sLmtleSwgU29ydERpcmVjdGlvbi5ERVNDKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgc29ydCAob25seSBzaG93IGlmIGN1cnJlbnRseSBzb3J0ZWQpXG4gICAgaWYgKGNvbHVtbi5zb3J0YWJsZSAhPT0gZmFsc2UgJiYgY29sdW1uLnNvcnREaXJlY3Rpb24gJiYgY29sdW1uLnNvcnREaXJlY3Rpb24gIT09IFNvcnREaXJlY3Rpb24uTk9ORSkge1xuICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgaWQ6ICdjbGVhci1zb3J0JyxcbiAgICAgICAgbGFiZWw6ICdDbGVhciBTb3J0JyxcbiAgICAgICAgaWNvbjogJ+KclScsXG4gICAgICAgIGFjdGlvbjogKGNvbCkgPT4ge1xuICAgICAgICAgIHRhYmxlU3RhdGUuYWRkU29ydFRvQ29sdW1uKGNvbC5rZXksIFNvcnREaXJlY3Rpb24uTk9ORSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEZpbHRlclxuICAgIGlmIChjb2x1bW4uZmlsdGVyYWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgIGlkOiAnZmlsdGVyJyxcbiAgICAgICAgbGFiZWw6ICdGaWx0ZXInLFxuICAgICAgICBpY29uOiAn4pqRJyxcbiAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgLy8gRmlsdGVyIGFjdGlvbiBoYW5kbGVkIGJ5IGNvbHVtbiBtZW51IGNvbXBvbmVudFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQaW4gTGVmdCAoaWYgbm90IGFscmVhZHkgcGlubmVkKVxuICAgIGlmIChjb2x1bW4ucGlubmFibGUgIT09IGZhbHNlICYmIGNvbHVtbi5zdGlja3kgIT09ICdsZWZ0JyAmJiBjb2x1bW4uc3RpY2t5ICE9PSAncmlnaHQnKSB7XG4gICAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgICBpZDogJ3Bpbi1sZWZ0JyxcbiAgICAgICAgbGFiZWw6ICdQaW4gTGVmdCcsXG4gICAgICAgIGljb246ICfwn5OMJyxcbiAgICAgICAgYWN0aW9uOiAoY29sKSA9PiB7XG4gICAgICAgICAgdGFibGVTdGF0ZS5zZXRTdGlja3lDb2x1bW4oY29sLmtleSwgJ2xlZnQnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUGluIFJpZ2h0IChpZiBub3QgYWxyZWFkeSBwaW5uZWQpXG4gICAgaWYgKGNvbHVtbi5waW5uYWJsZSAhPT0gZmFsc2UgJiYgY29sdW1uLnN0aWNreSAhPT0gJ2xlZnQnICYmIGNvbHVtbi5zdGlja3kgIT09ICdyaWdodCcpIHtcbiAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgIGlkOiAncGluLXJpZ2h0JyxcbiAgICAgICAgbGFiZWw6ICdQaW4gUmlnaHQnLFxuICAgICAgICBpY29uOiAn8J+TjCcsXG4gICAgICAgIGFjdGlvbjogKGNvbCkgPT4ge1xuICAgICAgICAgIHRoaXMubW92ZUNvbHVtblRvRW5kKGNvbC5rZXkpO1xuICAgICAgICAgIHRhYmxlU3RhdGUuc2V0U3RpY2t5Q29sdW1uKGNvbC5rZXksICdyaWdodCcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBVbnBpbiAoaWYgY3VycmVudGx5IHBpbm5lZClcbiAgICBpZiAoY29sdW1uLnBpbm5hYmxlICE9PSBmYWxzZSAmJiAoY29sdW1uLnN0aWNreSA9PT0gJ2xlZnQnIHx8IGNvbHVtbi5zdGlja3kgPT09ICdyaWdodCcpKSB7XG4gICAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgICBpZDogJ3VucGluJyxcbiAgICAgICAgbGFiZWw6ICdVbnBpbicsXG4gICAgICAgIGljb246ICfwn5ONJyxcbiAgICAgICAgYWN0aW9uOiAoY29sKSA9PiB7XG4gICAgICAgICAgdGFibGVTdGF0ZS5zZXRTdGlja3lDb2x1bW4oY29sLmtleSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBNb3ZlIGxlZnQgKG9ubHkgaWYgbW92YWJsZSBhbmQgbm90IHBpbm5lZClcbiAgICBpZiAoIWlzRmlyc3QgJiYgY29sdW1uLm1vdmFibGUgIT09IGZhbHNlICYmICFjb2x1bW4uc3RpY2t5KSB7XG4gICAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgICBpZDogJ21vdmUtbGVmdCcsXG4gICAgICAgIGxhYmVsOiAnTW92ZSBMZWZ0JyxcbiAgICAgICAgaWNvbjogJ+KGkCcsXG4gICAgICAgIGFjdGlvbjogKGNvbCkgPT4ge1xuICAgICAgICAgIHRoaXMub25Db2x1bW5Nb3ZlZCh7XG4gICAgICAgICAgICBjb2x1bW5LZXk6IGNvbC5rZXksXG4gICAgICAgICAgICBkaXJlY3Rpb246ICdsZWZ0J1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBNb3ZlIHJpZ2h0IChvbmx5IGlmIG1vdmFibGUgYW5kIG5vdCBwaW5uZWQpXG4gICAgaWYgKCFpc0xhc3QgJiYgY29sdW1uLm1vdmFibGUgIT09IGZhbHNlICYmICFjb2x1bW4uc3RpY2t5KSB7XG4gICAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgICBpZDogJ21vdmUtcmlnaHQnLFxuICAgICAgICBsYWJlbDogJ01vdmUgUmlnaHQnLFxuICAgICAgICBpY29uOiAn4oaSJyxcbiAgICAgICAgYWN0aW9uOiAoY29sKSA9PiB7XG4gICAgICAgICAgdGhpcy5vbkNvbHVtbk1vdmVkKHtcbiAgICAgICAgICAgIGNvbHVtbktleTogY29sLmtleSxcbiAgICAgICAgICAgIGRpcmVjdGlvbjogJ3JpZ2h0J1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc29ydCBsYWJlbCBiYXNlZCBvbiBjb2x1bW4gZGF0YSB0eXBlXG4gICAqL1xuICBwcml2YXRlIGdldFNvcnRMYWJlbChjb2x1bW46IENvbHVtbkNvbmZpZzxhbnk+LCBkaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXRhVHlwZSA9IGNvbHVtbi5kYXRhVHlwZTtcblxuICAgIGlmIChkYXRhVHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBkaXJlY3Rpb24gPT09ICdhc2MnID8gJ1NvcnQgMOKGkjknIDogJ1NvcnQgOeKGkjAnO1xuICAgIH0gZWxzZSBpZiAoZGF0YVR5cGUgPT09ICdkYXRlJykge1xuICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gJ2FzYycgPyAnU29ydCBPbGRlc3QgRmlyc3QnIDogJ1NvcnQgTmV3ZXN0IEZpcnN0JztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gJ2FzYycgPyAnU29ydCBB4oaSWicgOiAnU29ydCBa4oaSQSc7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBLRVlCT0FSRCBOQVZJR0FUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBrZXlib2FyZCBuYXZpZ2F0aW9uXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVLZXlib2FyZE5hdmlnYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgdGFibGVTdGF0ZSA9IHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpO1xuICAgIFxuICAgIHRhYmxlU3RhdGUuc2V0RGltZW5zaW9ucyhcbiAgICAgIHRoaXMudmlzaWJsZUNlbGxHcmlkLmxlbmd0aCxcbiAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMubGVuZ3RoXG4gICAgKTtcbiAgICBcbiAgICAvLyBTdWJzY3JpYmUgdG8gZm9jdXMgcG9zaXRpb24gY2hhbmdlc1xuICAgIHRoaXMuZm9jdXNTdWJzY3JpcHRpb24gPSB0YWJsZVN0YXRlLmZvY3VzZWRDZWxsUG9zaXRpb24kLnN1YnNjcmliZShwb3NpdGlvbiA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUNlbGxGb2N1c1N0YXRlcyhwb3NpdGlvbik7XG4gICAgfSk7XG4gICAgXG4gICAgLy8gU3Vic2NyaWJlIHRvIHJlcXVlc3QgYWRkIHJvdyBldmVudHMgKHdoZW4gbmF2aWdhdGluZyBwYXN0IGxhc3Qgcm93KVxuICAgIHRoaXMucmVxdWVzdEFkZFJvd1N1YnNjcmlwdGlvbiA9IHRhYmxlU3RhdGUucmVxdWVzdEFkZFJvdyQuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgIHRoaXMucmVxdWVzdEFkZFJvdy5lbWl0KGV2ZW50KTtcbiAgICB9KTtcbiAgICBcbiAgICAvLyBBdXRvLWZvY3VzIGZpcnN0IGNlbGwgdG8gZW5hYmxlIGtleWJvYXJkIG5hdmlnYXRpb25cbiAgICBpZiAodGhpcy52aXNpYmxlQ2VsbEdyaWQubGVuZ3RoID4gMCAmJiB0aGlzLnZpc2libGVDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0YWJsZVN0YXRlLmZvY3VzQ2VsbCgwLCAwKTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFVwZGF0ZSBmb2N1cyBzdGF0ZSBpbiBhbGwgY2VsbHNcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlQ2VsbEZvY3VzU3RhdGVzKHBvc2l0aW9uOiBDZWxsRm9jdXNQb3NpdGlvbiB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudmlzaWJsZUNlbGxHcmlkKSByZXR1cm47XG4gICAgXG4gICAgZm9yIChsZXQgcm93SW5kZXggPSAwOyByb3dJbmRleCA8IHRoaXMudmlzaWJsZUNlbGxHcmlkLmxlbmd0aDsgcm93SW5kZXgrKykge1xuICAgICAgY29uc3Qgcm93ID0gdGhpcy52aXNpYmxlQ2VsbEdyaWRbcm93SW5kZXhdO1xuICAgICAgZm9yIChsZXQgY29sSW5kZXggPSAwOyBjb2xJbmRleCA8IHJvdy5sZW5ndGg7IGNvbEluZGV4KyspIHtcbiAgICAgICAgY29uc3QgY2VsbCA9IHJvd1tjb2xJbmRleF07XG4gICAgICAgIGlmICghY2VsbCkgY29udGludWU7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBzaG91bGRGb2N1cyA9IHBvc2l0aW9uICYmIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24ucm93SW5kZXggPT09IHJvd0luZGV4ICYmIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24uY29sdW1uSW5kZXggPT09IGNvbEluZGV4O1xuICAgICAgICBcbiAgICAgICAgaWYgKHNob3VsZEZvY3VzKSB7XG4gICAgICAgICAgY2VsbC5mb2N1cygpO1xuICAgICAgICAgIC8vIEZvY3VzIHRoZSBhY3R1YWwgRE9NIGVsZW1lbnRcbiAgICAgICAgICB0aGlzLmZvY3VzVGRFbGVtZW50KHJvd0luZGV4LCBjb2xJbmRleCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2VsbC5ibHVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGb2N1cyB0aGUgVEQgZWxlbWVudCBpbiB0aGUgRE9NIGFuZCBzY3JvbGwgaXQgaW50byB2aWV3LFxuICAgKiBhY2NvdW50aW5nIGZvciBzdGlja3kgY29sdW1ucyBvbiBsZWZ0IGFuZCByaWdodFxuICAgKi9cbiAgcHJpdmF0ZSBmb2N1c1RkRWxlbWVudChyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gVXNlIHNldFRpbWVvdXQgdG8gZW5zdXJlIERPTSBoYXMgdXBkYXRlZFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gRG9uJ3Qgc3RlYWwgZm9jdXMgZnJvbSBlZGl0b3JzIC0gaWYgYSBjZWxsIGlzIGJlaW5nIGVkaXRlZCwgXG4gICAgICAvLyB0aGUgZWRpdG9yIHNob3VsZCBrZWVwIGZvY3VzXG4gICAgICBjb25zdCBlZGl0aW5nUG9zaXRpb24gPSB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKS5nZXRFZGl0aW5nUG9zaXRpb24oKTtcbiAgICAgIGlmIChlZGl0aW5nUG9zaXRpb24gJiYgXG4gICAgICAgICAgZWRpdGluZ1Bvc2l0aW9uLnJvd0luZGV4ID09PSByb3dJbmRleCAmJiBcbiAgICAgICAgICBlZGl0aW5nUG9zaXRpb24uY29sdW1uSW5kZXggPT09IGNvbEluZGV4KSB7XG4gICAgICAgIC8vIENlbGwgaXMgYmVpbmcgZWRpdGVkLCBkb24ndCBzdGVhbCBmb2N1cyBmcm9tIHRoZSBlZGl0b3JcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBVc2UgYWJzb2x1dGUgcm93IGluZGV4IGZvciB2aXJ0dWFsIHNjcm9sbCBjb21wYXRpYmlsaXR5XG4gICAgICBjb25zdCBhYnNvbHV0ZVJvd0luZGV4ID0gdGhpcy5nZXRBYnNvbHV0ZVJvd0luZGV4KHJvd0luZGV4KTtcbiAgICAgIC8vIFF1ZXJ5IHdpdGhpbiB0aGlzIGNvbXBvbmVudCdzIGhvc3QgZWxlbWVudCB0byBhdm9pZCBzZWxlY3Rpbmcgcm93cyBmcm9tIG90aGVyIHRhYmxlc1xuICAgICAgY29uc3QgaG9zdEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoIWhvc3RFbGVtZW50KSByZXR1cm47XG4gICAgICBcbiAgICAgIC8vIEZpcnN0LCBlbnN1cmUgdGhlIHRhYmxlIGNvbnRhaW5lciBoYXMgZm9jdXMgZm9yIGtleWJvYXJkIG5hdmlnYXRpb25cbiAgICAgIC8vIFRoZSBrZXlib2FyZCBuYXZpZ2F0aW9uIGRpcmVjdGl2ZSBsaXN0ZW5zIG9uIHRoZSAuc3QtdGFibGUgY29udGFpbmVyXG4gICAgICBjb25zdCB0YWJsZUNvbnRhaW5lciA9IGhvc3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zdC10YWJsZScpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICAgIGlmICh0YWJsZUNvbnRhaW5lciAmJiB0eXBlb2YgdGFibGVDb250YWluZXIuZm9jdXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGFibGVDb250YWluZXIuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCB0ciA9IGhvc3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYHRyW2RhdGEtcm93LWluZGV4PVwiJHthYnNvbHV0ZVJvd0luZGV4fVwiXWApO1xuICAgICAgaWYgKHRyKSB7XG4gICAgICAgIGNvbnN0IGNlbGxzID0gdHIucXVlcnlTZWxlY3RvckFsbCgndGQ6bm90KC5zZXR0aW5ncy1jb2x1bW4pOm5vdCgucm93LW51bWJlci1jZWxsKScpO1xuICAgICAgICBjb25zdCB0YXJnZXRDZWxsID0gY2VsbHNbY29sSW5kZXhdIGFzIEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAodGFyZ2V0Q2VsbCAmJiB0eXBlb2YgdGFyZ2V0Q2VsbC5mb2N1cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRhcmdldENlbGwuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICAgIHRoaXMuc2Nyb2xsQ2VsbEludG9WaWV3KHRhcmdldENlbGwsIGNvbEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNjcm9sbCBhIGNlbGwgaW50byB2aWV3LCBhY2NvdW50aW5nIGZvciBzdGlja3kgY29sdW1uc1xuICAgKi9cbiAgcHJpdmF0ZSBzY3JvbGxDZWxsSW50b1ZpZXcoY2VsbDogSFRNTEVsZW1lbnQsIGNvbEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBGaW5kIHRoZSBzY3JvbGwgY29udGFpbmVyXG4gICAgY29uc3Qgc2Nyb2xsQ29udGFpbmVyID0gdGhpcy5nZXRTY3JvbGxDb250YWluZXJFbGVtZW50KCk7XG4gICAgaWYgKCFzY3JvbGxDb250YWluZXIpIHJldHVybjtcblxuICAgIGNvbnN0IGNlbGxSZWN0ID0gY2VsbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBjb250YWluZXJSZWN0ID0gc2Nyb2xsQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHN0aWNreSBjb2x1bW4gd2lkdGhzXG4gICAgY29uc3QgeyBsZWZ0U3RpY2t5V2lkdGgsIHJpZ2h0U3RpY2t5V2lkdGggfSA9IHRoaXMuY2FsY3VsYXRlU3RpY2t5V2lkdGhzKCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgdmlzaWJsZSBhcmVhIChleGNsdWRpbmcgc3RpY2t5IGNvbHVtbnMpXG4gICAgY29uc3QgdmlzaWJsZUxlZnQgPSBjb250YWluZXJSZWN0LmxlZnQgKyBsZWZ0U3RpY2t5V2lkdGg7XG4gICAgY29uc3QgdmlzaWJsZVJpZ2h0ID0gY29udGFpbmVyUmVjdC5yaWdodCAtIHJpZ2h0U3RpY2t5V2lkdGg7XG4gICAgY29uc3QgdmlzaWJsZVRvcCA9IGNvbnRhaW5lclJlY3QudG9wO1xuICAgIGNvbnN0IHZpc2libGVCb3R0b20gPSBjb250YWluZXJSZWN0LmJvdHRvbTtcblxuICAgIC8vIENoZWNrIGlmIGNvbHVtbiBpcyBzdGlja3kgKGRvbid0IHNjcm9sbCBmb3Igc3RpY2t5IGNvbHVtbnMpXG4gICAgY29uc3QgY29sdW1uID0gdGhpcy52aXNpYmxlQ29sdW1uc1tjb2xJbmRleF07XG4gICAgaWYgKGNvbHVtbj8uc3RpY2t5KSB7XG4gICAgICAvLyBKdXN0IGVuc3VyZSB2ZXJ0aWNhbCB2aXNpYmlsaXR5IGZvciBzdGlja3kgY29sdW1uc1xuICAgICAgaWYgKGNlbGxSZWN0LnRvcCA8IHZpc2libGVUb3ApIHtcbiAgICAgICAgc2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCAtPSAodmlzaWJsZVRvcCAtIGNlbGxSZWN0LnRvcCk7XG4gICAgICB9IGVsc2UgaWYgKGNlbGxSZWN0LmJvdHRvbSA+IHZpc2libGVCb3R0b20pIHtcbiAgICAgICAgc2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCArPSAoY2VsbFJlY3QuYm90dG9tIC0gdmlzaWJsZUJvdHRvbSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgY2VsbCBpcyBhbHJlYWR5IGZ1bGx5IHZpc2libGUgaG9yaXpvbnRhbGx5IChubyBzY3JvbGwgbmVlZGVkKVxuICAgIGNvbnN0IGlzQ2VsbEZ1bGx5VmlzaWJsZUhvcml6b250YWxseSA9IGNlbGxSZWN0LmxlZnQgPj0gdmlzaWJsZUxlZnQgJiYgY2VsbFJlY3QucmlnaHQgPD0gdmlzaWJsZVJpZ2h0O1xuICAgIFxuICAgIC8vIE9ubHkgc2Nyb2xsIGhvcml6b250YWxseSBpZiBjZWxsIGlzIE5PVCBmdWxseSB2aXNpYmxlXG4gICAgaWYgKCFpc0NlbGxGdWxseVZpc2libGVIb3Jpem9udGFsbHkpIHtcbiAgICAgIGlmIChjZWxsUmVjdC5sZWZ0IDwgdmlzaWJsZUxlZnQpIHtcbiAgICAgICAgLy8gQ2VsbCBpcyBoaWRkZW4gYmVoaW5kIGxlZnQgc3RpY2t5IGNvbHVtbnNcbiAgICAgICAgc2Nyb2xsQ29udGFpbmVyLnNjcm9sbExlZnQgLT0gKHZpc2libGVMZWZ0IC0gY2VsbFJlY3QubGVmdCk7XG4gICAgICB9IGVsc2UgaWYgKGNlbGxSZWN0LnJpZ2h0ID4gdmlzaWJsZVJpZ2h0KSB7XG4gICAgICAgIC8vIENlbGwgaXMgaGlkZGVuIGJlaGluZCByaWdodCBzdGlja3kgY29sdW1uc1xuICAgICAgICBzY3JvbGxDb250YWluZXIuc2Nyb2xsTGVmdCArPSAoY2VsbFJlY3QucmlnaHQgLSB2aXNpYmxlUmlnaHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZlcnRpY2FsIHNjcm9sbGluZ1xuICAgIGlmIChjZWxsUmVjdC50b3AgPCB2aXNpYmxlVG9wKSB7XG4gICAgICBzY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wIC09ICh2aXNpYmxlVG9wIC0gY2VsbFJlY3QudG9wKTtcbiAgICB9IGVsc2UgaWYgKGNlbGxSZWN0LmJvdHRvbSA+IHZpc2libGVCb3R0b20pIHtcbiAgICAgIHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgKz0gKGNlbGxSZWN0LmJvdHRvbSAtIHZpc2libGVCb3R0b20pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGwgdG8gYSBzcGVjaWZpYyByb3cgYnkgaW5kZXggYW5kIG9wdGlvbmFsbHkgZm9jdXMgaXRcbiAgICogQHBhcmFtIHJvd0luZGV4IC0gVGhlIGluZGV4IG9mIHRoZSByb3cgdG8gc2Nyb2xsIHRvXG4gICAqIEBwYXJhbSBmb2N1c0ZpcnN0Q2VsbCAtIFdoZXRoZXIgdG8gZm9jdXMgdGhlIGZpcnN0IGVkaXRhYmxlIGNlbGwgKGRlZmF1bHQ6IGZhbHNlKVxuICAgKi9cbiAgcHVibGljIHNjcm9sbFRvUm93QW5kRm9jdXMocm93SW5kZXg6IG51bWJlciwgZm9jdXNGaXJzdENlbGw6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgaG9zdEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoIWhvc3RFbGVtZW50KSByZXR1cm47XG4gICAgICBcbiAgICAgIC8vIEZpbmQgdGhlIHRhcmdldCByb3dcbiAgICAgIGNvbnN0IHJvd3MgPSBob3N0RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCd0Ym9keSB0cicpO1xuICAgICAgY29uc3QgdGFyZ2V0Um93ID0gcm93c1tyb3dJbmRleF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBcbiAgICAgIGlmICh0YXJnZXRSb3cpIHtcbiAgICAgICAgLy8gU2Nyb2xsIHRoZSByb3cgaW50byB2aWV3XG4gICAgICAgIHRhcmdldFJvdy5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICduZWFyZXN0JyB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIE9wdGlvbmFsbHkgZm9jdXMgdGhlIGZpcnN0IGVkaXRhYmxlIGNlbGxcbiAgICAgICAgaWYgKGZvY3VzRmlyc3RDZWxsKSB7XG4gICAgICAgICAgY29uc3QgY2VsbHMgPSB0YXJnZXRSb3cucXVlcnlTZWxlY3RvckFsbCgndGQ6bm90KC5zZXR0aW5ncy1jb2x1bW4pOm5vdCgucm93LW51bWJlci1jZWxsKScpO1xuICAgICAgICAgIGNvbnN0IGZpcnN0Q2VsbCA9IGNlbGxzWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgIGlmIChmaXJzdENlbGwgJiYgdHlwZW9mIGZpcnN0Q2VsbC5mb2N1cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGZpcnN0Q2VsbC5mb2N1cygpO1xuICAgICAgICAgICAgICAvLyBVcGRhdGUgdGFibGUgc3RhdGUgZm9jdXMgcG9zaXRpb25cbiAgICAgICAgICAgICAgaWYgKHRoaXMudGFibGVTdGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGVTdGF0ZS5mb2N1c0NlbGwocm93SW5kZXgsIDApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNjcm9sbCB0byB0aGUgbGFzdCByb3cgaW4gdGhlIHRhYmxlXG4gICAqIEBwYXJhbSBmb2N1c0ZpcnN0Q2VsbCAtIFdoZXRoZXIgdG8gZm9jdXMgdGhlIGZpcnN0IGVkaXRhYmxlIGNlbGwgKGRlZmF1bHQ6IHRydWUpXG4gICAqL1xuICBwdWJsaWMgc2Nyb2xsVG9MYXN0Um93KGZvY3VzRmlyc3RDZWxsOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgIGNvbnN0IHJvd0NvdW50ID0gdGhpcy5kYXRhPy5sZW5ndGggfHwgMDtcbiAgICBpZiAocm93Q291bnQgPiAwKSB7XG4gICAgICB0aGlzLnNjcm9sbFRvUm93QW5kRm9jdXMocm93Q291bnQgLSAxLCBmb2N1c0ZpcnN0Q2VsbCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2Nyb2xsIGNvbnRhaW5lciBlbGVtZW50XG4gICAqL1xuICBwcml2YXRlIGdldFNjcm9sbENvbnRhaW5lckVsZW1lbnQoKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICAvLyBQcmVmZXIgY2FjaGVkIGNvbnRhaW5lciBpZiBhbHJlYWR5IHJlc29sdmVkXG4gICAgaWYgKHRoaXMuc2Nyb2xsQ29udGFpbmVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY3JvbGxDb250YWluZXI7XG4gICAgfVxuICAgIC8vIFZpcnR1YWwgc2Nyb2xsIHVzZXMgc2Nyb2xsVmlld3BvcnRcbiAgICBpZiAodGhpcy5pc1ZpcnR1YWxTY3JvbGxFbmFibGVkKCkgJiYgdGhpcy5zY3JvbGxWaWV3cG9ydD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIgPSB0aGlzLnNjcm9sbFZpZXdwb3J0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICByZXR1cm4gdGhpcy5zY3JvbGxDb250YWluZXI7XG4gICAgfVxuICAgIC8vIFN0YW5kYXJkIG1vZGUgdXNlcyAuc3QtdGFibGUgY29udGFpbmVyIHdpdGhpbiBUSElTIGNvbXBvbmVudCdzIGhvc3QgZWxlbWVudFxuICAgIC8vIFVzZSBlbGVtZW50UmVmIHRvIHF1ZXJ5IHdpdGhpbiB0aGUgY29tcG9uZW50IGluc3RlYWQgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvclxuICAgIC8vIHdoaWNoIHdvdWxkIHJldHVybiB0aGUgZmlyc3QgdGFibGUgb24gdGhlIHBhZ2VcbiAgICBjb25zdCBob3N0RWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoaG9zdEVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHRhYmxlQ29udGFpbmVyID0gaG9zdEVsZW1lbnQucXVlcnlTZWxlY3RvcignLnN0LXRhYmxlJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgICAgaWYgKHRhYmxlQ29udGFpbmVyKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyID0gdGFibGVDb250YWluZXI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNjcm9sbENvbnRhaW5lciB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0b3RhbCB3aWR0aCBvZiBzdGlja3kgY29sdW1ucyBvbiBsZWZ0IGFuZCByaWdodFxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVTdGlja3lXaWR0aHMoKTogeyBsZWZ0U3RpY2t5V2lkdGg6IG51bWJlcjsgcmlnaHRTdGlja3lXaWR0aDogbnVtYmVyIH0ge1xuICAgIGxldCBsZWZ0U3RpY2t5V2lkdGggPSAwO1xuICAgIGxldCByaWdodFN0aWNreVdpZHRoID0gMDtcblxuICAgIC8vIEFjY291bnQgZm9yIHJvdyBudW1iZXIgY29sdW1uIGlmIGVuYWJsZWRcbiAgICBpZiAodGhpcy5tZXJnZWRDb25maWcuc2hvd1Jvd051bWJlcikge1xuICAgICAgbGVmdFN0aWNreVdpZHRoICs9IDMwOyAvLyBSb3cgbnVtYmVyIGNvbHVtbiB3aWR0aFxuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSBmcm9tIGNvbHVtbiBjb25maWdzXG4gICAgZm9yIChjb25zdCBjb2wgb2YgdGhpcy52aXNpYmxlQ29sdW1ucykge1xuICAgICAgaWYgKGNvbC5zdGlja3kgPT09ICdsZWZ0Jykge1xuICAgICAgICBsZWZ0U3RpY2t5V2lkdGggKz0gKGNvbC53aWR0aCBhcyBudW1iZXIpIHx8IDEwMDtcbiAgICAgIH0gZWxzZSBpZiAoY29sLnN0aWNreSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICByaWdodFN0aWNreVdpZHRoICs9IChjb2wud2lkdGggYXMgbnVtYmVyKSB8fCAxMDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWNjb3VudCBmb3Igc2V0dGluZ3MgY29sdW1uIG9ubHkgd2hlbiByb3cgYWN0aW9ucyBhcmUgZW5hYmxlZCAodXNlIGNvbnNpc3RlbnQgd2lkdGgpXG4gICAgY29uc3Qgc2V0dGluZ3NDb2x1bW5XaWR0aCA9IHRoaXMuaGFzUm93QWN0aW9ucygpID8gMzIgOiAwO1xuICAgIHJpZ2h0U3RpY2t5V2lkdGggKz0gc2V0dGluZ3NDb2x1bW5XaWR0aDtcblxuICAgIHJldHVybiB7IGxlZnRTdGlja3lXaWR0aCwgcmlnaHRTdGlja3lXaWR0aCB9O1xuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIGNlbGwgY2xpY2tcbiAgICovXG4gIG9uQ2VsbENsaWNrKHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNLZXlib2FyZE5hdmlnYXRpb25FbmFibGVkKCkpIHJldHVybjtcbiAgICB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKS5mb2N1c0NlbGwocm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBjZWxsIGVudGVyaW5nIGVkaXQgbW9kZVxuICAgKi9cbiAgb25DZWxsRWRpdChldmVudDogQ2VsbEVkaXRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuY2VsbEVkaXQuZW1pdChldmVudCk7XG4gICAgXG4gICAgaWYgKHRoaXMuaXNLZXlib2FyZE5hdmlnYXRpb25FbmFibGVkKCkpIHtcbiAgICAgIGNvbnN0IHJvd0luZGV4ID0gZXZlbnQuY2VsbC5nZXRSb3dJbmRleCgpO1xuICAgICAgY29uc3QgY29sdW1uS2V5ID0gZXZlbnQuY29sdW1uS2V5O1xuICAgICAgY29uc3QgY29sdW1uSW5kZXggPSB0aGlzLnZpc2libGVDb2x1bW5zLmZpbmRJbmRleChjb2wgPT4gY29sLmtleSA9PT0gY29sdW1uS2V5KTtcbiAgICAgIFxuICAgICAgaWYgKHJvd0luZGV4ICE9PSB1bmRlZmluZWQgJiYgY29sdW1uSW5kZXggPj0gMCkge1xuICAgICAgICB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKS5zZXRFZGl0aW5nQ2VsbChyb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBjZWxsIHNhdmVcbiAgICovXG4gIG9uQ2VsbFNhdmUoZXZlbnQ6IENlbGxTYXZlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmNlbGxTYXZlLmVtaXQoZXZlbnQpO1xuICAgIFxuICAgIGlmICh0aGlzLmlzS2V5Ym9hcmROYXZpZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKS5jbGVhckVkaXRpbmdDZWxsKCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIGNlbGwgY2FuY2VsXG4gICAqL1xuICBvbkNlbGxDYW5jZWwoZXZlbnQ6IENlbGxDYW5jZWxFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuY2VsbENhbmNlbC5lbWl0KGV2ZW50KTtcbiAgICBcbiAgICBpZiAodGhpcy5pc0tleWJvYXJkTmF2aWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgdGhpcy5nZXRBY3RpdmVUYWJsZVN0YXRlKCkuY2xlYXJFZGl0aW5nQ2VsbCgpO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBjZWxsIHNhdmUgd2l0aCBuYXZpZ2F0aW9uIChFeGNlbC1saWtlIGJlaGF2aW9yKVxuICAgKi9cbiAgb25DZWxsU2F2ZUFuZE5hdmlnYXRlKGV2ZW50OiB7ZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGRpcmVjdGlvbjogTmF2aWdhdGlvbkRpcmVjdGlvbn0pOiB2b2lkIHtcbiAgICAvLyBOYXZpZ2F0aW9uIGlzIGFscmVhZHkgaGFuZGxlZCBieSB0aGUgZGlyZWN0aXZlIGFmdGVyIHNhdmVcbiAgICAvLyBKdXN0IGVuc3VyZSBlZGl0aW5nIHN0YXRlIGlzIGNsZWFyZWRcbiAgICBpZiAodGhpcy5pc0tleWJvYXJkTmF2aWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgdGhpcy5nZXRBY3RpdmVUYWJsZVN0YXRlKCkuY2xlYXJFZGl0aW5nQ2VsbCgpO1xuICAgICAgLy8gTW92ZSBmb2N1cyBpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdGlvblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpLm1vdmVGb2N1cyhldmVudC5kaXJlY3Rpb24pO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIGZvY3VzIG9uIHRhYmxlIGNvbnRhaW5lciAtIGZvY3VzIGZpcnN0IGNlbGwgaWYgbm8gY2VsbCBpcyBmb2N1c2VkXG4gICAqL1xuICBvblRhYmxlQ29udGFpbmVyRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNLZXlib2FyZE5hdmlnYXRpb25FbmFibGVkKCkpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCB0YWJsZVN0YXRlID0gdGhpcy5nZXRBY3RpdmVUYWJsZVN0YXRlKCk7XG4gICAgY29uc3QgY3VycmVudEZvY3VzID0gdGFibGVTdGF0ZS5nZXRGb2N1c2VkUG9zaXRpb24oKTtcbiAgICBcbiAgICAvLyBJZiBubyBjZWxsIGlzIGZvY3VzZWQsIGZvY3VzIHRoZSBmaXJzdCBjZWxsXG4gICAgaWYgKCFjdXJyZW50Rm9jdXMgJiYgdGhpcy52aXNpYmxlQ2VsbEdyaWQubGVuZ3RoID4gMCAmJiB0aGlzLnZpc2libGVDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRhYmxlU3RhdGUuZm9jdXNDZWxsKDAsIDApO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGtleWJvYXJkIG5hdmlnYXRpb24gaXMgZW5hYmxlZFxuICAgKi9cbiAgaXNLZXlib2FyZE5hdmlnYXRpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1lcmdlZENvbmZpZy5mZWF0dXJlcz8ua2V5Ym9hcmROYXZpZ2F0aW9uPy5lbmFibGVkID8/IGZhbHNlO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IEVkaXRNb2RlIGVudW0gdmFsdWUgZm9yIGNlbGxzXG4gICAqIEZvciBFeGNlbC1saWtlIHRhYmxlcyB3aXRoIGtleWJvYXJkIG5hdmlnYXRpb24sIHVzZSBFTlRFUiBtb2RlXG4gICAqIHdoaWNoIGFsbG93cyBhcnJvdyBrZXkgbmF2aWdhdGlvbiB3aXRob3V0IHRyaWdnZXJpbmcgZWRpdC5cbiAgICogRG91YmxlLWNsaWNrIHdpbGwgc3RpbGwgd29yayB0byBzdGFydCBlZGl0aW5nLlxuICAgKi9cbiAgZ2V0RWRpdE1vZGVGb3JDZWxscygpOiBFZGl0TW9kZSB7XG4gICAgLy8gSWYga2V5Ym9hcmQgbmF2aWdhdGlvbiBpcyBlbmFibGVkLCB1c2UgRU5URVIgbW9kZSBmb3IgRXhjZWwtbGlrZSBiZWhhdmlvclxuICAgIC8vIE90aGVyd2lzZSB1c2UgQ0xJQ0sgbW9kZSBmb3IgaW1tZWRpYXRlIGVkaXRpbmdcbiAgICBpZiAodGhpcy5pc0tleWJvYXJkTmF2aWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIEVkaXRNb2RlLkVOVEVSO1xuICAgIH1cbiAgICByZXR1cm4gRWRpdE1vZGUuQ0xJQ0s7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbGVhciBmb2N1cyB3aGVuIGNsaWNraW5nIG91dHNpZGUgdGFibGVcbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzS2V5Ym9hcmROYXZpZ2F0aW9uRW5hYmxlZCgpKSByZXR1cm47XG4gICAgXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHRhYmxlRWxlbWVudCA9IHRhcmdldC5jbG9zZXN0KCcuc3QtdGFibGUnKTtcbiAgICBcbiAgICAvLyBBbHNvIGNoZWNrIGlmIGNsaWNrIGlzIGluc2lkZSBhIHBvcnRhbCAoZS5nLiwgbmlsZS1zZWxlY3QgZHJvcGRvd24pXG4gICAgLy8gVGhlc2UgYXJlIHJlbmRlcmVkIG91dHNpZGUgdGhlIHRhYmxlIGJ1dCBhcmUgcGFydCBvZiB0aGUgZWRpdGluZyBleHBlcmllbmNlXG4gICAgY29uc3QgcG9ydGFsRWxlbWVudCA9IHRhcmdldC5jbG9zZXN0KCcubmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCcpO1xuICAgIFxuICAgIC8vIENoZWNrIGNvbXBvc2VkUGF0aCBmb3Igc2hhZG93IERPTSBlbGVtZW50cyAoZS5nLiwgbmlsZS1vcHRpb24sIG5pbGUtaW5wdXQgaW5zaWRlIHNoYWRvdyByb290KVxuICAgIGNvbnN0IGNvbXBvc2VkUGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aD8uKCkgfHwgW107XG4gICAgY29uc3QgaXNJbnNpZGVOaWxlRWxlbWVudCA9IGNvbXBvc2VkUGF0aC5zb21lKChlbDogRXZlbnRUYXJnZXQpID0+IHtcbiAgICAgIGlmIChlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBlbC50YWdOYW1lPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAvLyBDaGVjayBmb3IgYW55IG5pbGUtKiBjdXN0b20gZWxlbWVudHMgdXNlZCBpbiBlZGl0b3JzXG4gICAgICAgIHJldHVybiB0YWdOYW1lPy5zdGFydHNXaXRoKCduaWxlLScpIHx8IFxuICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0Py5jb250YWlucygnbmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIFxuICAgIGlmICghdGFibGVFbGVtZW50ICYmICFwb3J0YWxFbGVtZW50ICYmICFpc0luc2lkZU5pbGVFbGVtZW50KSB7XG4gICAgICB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKS5jbGVhckZvY3VzKCk7XG4gICAgICB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKS5jbGVhckVkaXRpbmdDZWxsKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmZvY3VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudmFsaWRhdGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRhdGFTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5yZXF1ZXN0QWRkUm93U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudmlydHVhbFNjcm9sbFN0YXRlJC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuaW50ZXJuYWxEYXRhJC5jb21wbGV0ZSgpO1xuICB9XG4gIFxufVxuXG4iLCI8IS0tIFRvcCBwYWdpbmF0aW9uIGNvbnRyb2xzIC0tPlxuPHN0LXBhZ2luYXRpb24gXG4gICpuZ0lmPVwic2hvd1RvcFBhZ2luYXRpb24oKSAmJiAhKG1lcmdlZENvbmZpZy50YWJsZVNrZWxldG9uPy5lbmFibGVkIHwgYXN5bmMpXCIgXG4gIFt0YWJsZVN0YXRlXT1cImdldEFjdGl2ZVRhYmxlU3RhdGUoKVwiXG4gIFt0YWJsZUNvbmZpZ109XCJtZXJnZWRDb25maWdcIlxuICBwb3NpdGlvbj1cInRvcFwiPlxuPC9zdC1wYWdpbmF0aW9uPlxuXG48ZGl2IGNsYXNzPVwic3QtdGFibGVcIiAqbmdJZj1cIiEobWVyZ2VkQ29uZmlnLnRhYmxlU2tlbGV0b24/LmVuYWJsZWQgfCBhc3luYylcIiBcbiAgW25nQ2xhc3NdPVwie1xuICAgICd2aXJ0dWFsLXNjcm9sbC1lbmFibGVkJzogaXNWaXJ0dWFsU2Nyb2xsRW5hYmxlZCgpLFxuICAgICdrZXlib2FyZC1uYXZpZ2F0aW9uLWVuYWJsZWQnOiBpc0tleWJvYXJkTmF2aWdhdGlvbkVuYWJsZWQoKVxuICB9XCJcbiAgW25nU3R5bGVdPVwie1xuICAgICdtYXgtaGVpZ2h0LnB4JzogIWlzVmlydHVhbFNjcm9sbEVuYWJsZWQoKSA/IG1lcmdlZENvbmZpZy5kaXNwbGF5Py5tYXhIZWlnaHQgOiBudWxsXG4gIH1cIlxuICBzdEtleWJvYXJkTmF2aWdhdGlvblxuICBbdGFibGVTdGF0ZV09XCJnZXRBY3RpdmVUYWJsZVN0YXRlKClcIlxuICBbYWRkUm93T25OYXZpZ2F0ZVBhc3RFbmRdPVwibWVyZ2VkQ29uZmlnLmZlYXR1cmVzPy5rZXlib2FyZE5hdmlnYXRpb24/LmFkZFJvd09uTmF2aWdhdGVQYXN0RW5kIHx8IGZhbHNlXCJcbiAgW2F0dHIudGFiaW5kZXhdPVwiaXNLZXlib2FyZE5hdmlnYXRpb25FbmFibGVkKCkgPyAwIDogLTFcIlxuICAoZm9jdXMpPVwib25UYWJsZUNvbnRhaW5lckZvY3VzKCRldmVudClcIlxuICBbYXR0ci50aXRsZV09XCJpc0tleWJvYXJkTmF2aWdhdGlvbkVuYWJsZWQoKSA/ICdDbGljayBhIGNlbGwgb3IgcHJlc3MgVGFiIHRvIHN0YXJ0IGtleWJvYXJkIG5hdmlnYXRpb24nIDogbnVsbFwiPlxuICA8IS0tIFVuaWZpZWQgVGFibGUgQWN0aW9ucyBNZW51IC0tPlxuXG4gIDwhLS0gVmlydHVhbCBzY3JvbGwgdmlld3BvcnQgd3JhcHBlciAtLT5cbiAgPGRpdiBjbGFzcz1cInN0LXNjcm9sbC12aWV3cG9ydFwiICNzY3JvbGxWaWV3cG9ydCAqbmdJZj1cImlzVmlydHVhbFNjcm9sbEVuYWJsZWQoKVwiXG4gICAgW25nU3R5bGVdPVwieyAnaGVpZ2h0LnB4JzogZ2V0VmlydHVhbFNjcm9sbFZpZXdwb3J0SGVpZ2h0KCkgfVwiPlxuXG4gICAgPCEtLSBTcGFjZXIgdG8gY3JlYXRlIHNjcm9sbGFibGUgYXJlYSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwic3Qtc2Nyb2xsLXNwYWNlclwiIFtuZ1N0eWxlXT1cInsgJ2hlaWdodC5weCc6IHZpcnR1YWxTY3JvbGxUb3RhbEhlaWdodCQgfCBhc3luYyB9XCI+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFRhYmxlIHBvc2l0aW9uZXIgd2l0aCB0cmFuc2Zvcm0gKGluc3RlYWQgb2YgdGJvZHkpIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzdC10YWJsZS1wb3NpdGlvbmVyXCIgW25nU3R5bGVdPVwieyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKCcgKyAodmlydHVhbFNjcm9sbE9mZnNldFkkIHwgYXN5bmMpICsgJ3B4KScgfVwiPlxuICAgICAgPCEtLSBUYWJsZSB3aXRoIG9ubHkgdmlzaWJsZSByb3dzIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlVGVtcGxhdGU7IGNvbnRleHQ6IHsgXG4gICAgICAgIG1vZGU6ICd2aXJ0dWFsJyxcbiAgICAgICAgdGhlYWRTdHlsZTogeyB0b3A6ICh2aXJ0dWFsU2Nyb2xsT2Zmc2V0WU5lZyQgfCBhc3luYykgKyAncHgnIH1cbiAgICAgIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIFxuICA8IS0tIFN0YW5kYXJkIHRhYmxlICh3aGVuIHZpcnR1YWwgc2Nyb2xsIGRpc2FibGVkKSAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1ZpcnR1YWxTY3JvbGxFbmFibGVkKClcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGVUZW1wbGF0ZTsgY29udGV4dDogeyBcbiAgICAgIG1vZGU6ICdzdGFuZGFyZCcsXG4gICAgICB0aGVhZFN0eWxlOiBudWxsXG4gICAgfVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIFNoYXJlZCBDb2x1bW4gTWVudSBEcm9wZG93biAtLT5cbiAgPHN0LWNvbHVtbi1tZW51LWRyb3Bkb3duIFxuICBbaXNPcGVuXT1cImNvbHVtbk1lbnVTdGF0ZS5pc09wZW5cIlxuICBbcG9zaXRpb25dPVwiY29sdW1uTWVudVN0YXRlLnBvc2l0aW9uXCJcbiAgW2NvbnRleHRdPVwiY29sdW1uTWVudVN0YXRlLmNvbnRleHRcIlxuICAoYWN0aW9uQ2xpY2tlZCk9XCJvbkNvbHVtbkFjdGlvbkNsaWNrZWQoJGV2ZW50KVwiXG4gIChjbG9zZWQpPVwiY2xvc2VDb2x1bW5NZW51KClcIj5cbiAgPC9zdC1jb2x1bW4tbWVudS1kcm9wZG93bj5cbjwvZGl2PlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiKG1lcmdlZENvbmZpZy50YWJsZVNrZWxldG9uPy5lbmFibGVkIHwgYXN5bmMpXCI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJza2VsZXRvbkxvYWRlclwiPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjwhLS0gU2hhcmVkIFJvdyBBY3Rpb25zIERyb3Bkb3duIC0tPlxuPHN0LXJvdy1hY3Rpb25zLWRyb3Bkb3duIFtpc09wZW5dPVwiZHJvcGRvd25TdGF0ZS5pc09wZW5cIiBbcG9zaXRpb25dPVwiZHJvcGRvd25TdGF0ZS5wb3NpdGlvblwiXG4gIFtjb250ZXh0XT1cImRyb3Bkb3duU3RhdGUuY29udGV4dFwiIChhY3Rpb25DbGlja2VkKT1cIm9uUm93QWN0aW9uQ2xpY2tlZCgkZXZlbnQpXCIgKGNsb3NlZCk9XCJjbG9zZVJvd0FjdGlvbnNEcm9wZG93bigpXCI+XG48L3N0LXJvdy1hY3Rpb25zLWRyb3Bkb3duPlxuXG5cbjwhLS0gQm90dG9tIHBhZ2luYXRpb24gY29udHJvbHMgLS0+XG48c3QtcGFnaW5hdGlvbiBcbiAgKm5nSWY9XCJzaG93Qm90dG9tUGFnaW5hdGlvbigpICYmICEobWVyZ2VkQ29uZmlnLnRhYmxlU2tlbGV0b24/LmVuYWJsZWQgfCBhc3luYylcIiBcbiAgW3RhYmxlU3RhdGVdPVwiZ2V0QWN0aXZlVGFibGVTdGF0ZSgpXCJcbiAgW3RhYmxlQ29uZmlnXT1cIm1lcmdlZENvbmZpZ1wiXG4gIHBvc2l0aW9uPVwiYm90dG9tXCI+XG48L3N0LXBhZ2luYXRpb24+XG5cblxuICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT5cbiAgPCEtLSBSRVVTQUJMRSBUQUJMRSBURU1QTEFURSAtLT5cbiAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+XG4gIDxuZy10ZW1wbGF0ZSAjdGFibGVUZW1wbGF0ZSBsZXQtbW9kZT1cIm1vZGVcIiBsZXQtdGhlYWRTdHlsZT1cInRoZWFkU3R5bGVcIj5cbiAgICA8dGFibGUgY2xhc3M9XCJzdC10YWJsZS1lbGVtZW50XCI+XG4gICAgICA8IS0tIFRBQkxFIEhFQURFUiAtLT5cbiAgICAgIDx0aGVhZCBbbmdDbGFzc109XCJ7ICdzdGlja3knOiBtZXJnZWRDb25maWcuZGlzcGxheT8uc3RpY2t5SGVhZGVyIH1cIiBbbmdTdHlsZV09XCJ0aGVhZFN0eWxlXCI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8IS0tIFJvdyBOdW1iZXIgSGVhZGVyIC0tPlxuICAgICAgICAgIDx0aCAqbmdJZj1cIm1lcmdlZENvbmZpZy5zaG93Um93TnVtYmVyXCIgY2xhc3M9XCJyb3ctbnVtYmVyLWhlYWRlciBoZWFkZXItY2VsbCBzdGlja3ktbGVmdFwiXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3N0aWNreScsXG4gICAgICAgICAgICAgICAgJ2xlZnQucHgnOiAwLFxuICAgICAgICAgICAgICAgICd6LWluZGV4JzogWkluZGV4LlNUSUNLWV9IRUFERVJfQ0VMTCxcbiAgICAgICAgICAgICAgICAnd2lkdGgucHgnOiAzMFxuICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAjXG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8IS0tIENvbHVtbiBIZWFkZXJzIC0tPlxuICAgICAgICAgIDx0aCBcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdmlzaWJsZUNvbHVtbnM7IGxldCBjb2xJbmRleCA9IGluZGV4OyBsZXQgaXNGaXJzdCA9IGZpcnN0OyBsZXQgaXNMYXN0ID0gbGFzdFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdoZWFkZXItY2VsbCc6IG1vZGUgPT09ICdzdGFuZGFyZCcsXG4gICAgICAgICAgICAgICdzdGlja3ktbGVmdCc6IGNvbHVtbi5zdGlja3kgPT09ICdsZWZ0JyxcbiAgICAgICAgICAgICAgJ3N0aWNreS1yaWdodCc6IGNvbHVtbi5zdGlja3kgPT09ICdyaWdodCcsXG4gICAgICAgICAgICAgICdzdGlja3ktcmlnaHQtZmlyc3QnOiBjb2x1bW4uc3RpY2t5ID09PSAncmlnaHQnICYmIGlzRmlyc3RTdGlja3lSaWdodChjb2x1bW4ua2V5KSxcbiAgICAgICAgICAgICAgJ3Jlc2l6YWJsZSc6IGNvbHVtbi5yZXNpemFibGUgIT09IGZhbHNlXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgcG9zaXRpb246IGNvbHVtbi5zdGlja3kgPyAnc3RpY2t5JyA6IG51bGwsXG4gICAgICAgICAgICAgICdsZWZ0LnB4JzogY29sdW1uLnN0aWNreSA9PT0gJ2xlZnQnID8gKGNvbHVtbi5zdGlja3lPZmZzZXQgfHwgMCkgOiBudWxsLFxuICAgICAgICAgICAgICAncmlnaHQucHgnOiBjb2x1bW4uc3RpY2t5ID09PSAncmlnaHQnID8gKGNvbHVtbi5zdGlja3lPZmZzZXQgfHwgMCkgOiBudWxsLFxuICAgICAgICAgICAgICAnei1pbmRleCc6IGNvbHVtbi5zdGlja3kgPyBaSW5kZXguU1RJQ0tZX0hFQURFUl9DRUxMIDogbnVsbCxcbiAgICAgICAgICAgICAgJ3dpZHRoLnB4JzogY29sdW1uLndpZHRoXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxzdC1oZWFkZXIgXG4gICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgW2NvbHVtbkluZGV4XT1cImNvbEluZGV4XCJcbiAgICAgICAgICAgICAgW2lzRmlyc3RDb2x1bW5dPVwiaXNGaXJzdFwiXG4gICAgICAgICAgICAgIFtpc0xhc3RDb2x1bW5dPVwiaXNMYXN0XCJcbiAgICAgICAgICAgICAgW3RhYmxlU3RhdGVdPVwiZ2V0QWN0aXZlVGFibGVTdGF0ZSgpXCJcbiAgICAgICAgICAgICAgW2VuYWJsZVNvcnRpbmddPVwibWVyZ2VkQ29uZmlnLnNvcnRpbmc/LmVuYWJsZWQgPz8gZW5hYmxlU29ydGluZ1wiXG4gICAgICAgICAgICAgIFtlbmFibGVGaWx0ZXJpbmddPVwibWVyZ2VkQ29uZmlnLmZpbHRlcmluZz8uZW5hYmxlZCA/PyBlbmFibGVGaWx0ZXJpbmdcIlxuICAgICAgICAgICAgICAoY29sdW1uTW92ZWQpPVwib25Db2x1bW5Nb3ZlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG1lbnVDbGljayk9XCJvcGVuQ29sdW1uTWVudSgkZXZlbnQsIGNvbHVtbiwgY29sSW5kZXgsIGlzRmlyc3QsIGlzTGFzdClcIj5cbiAgICAgICAgICAgIDwvc3QtaGVhZGVyPlxuXG4gICAgICAgICAgICA8ZGl2IFxuICAgICAgICAgICAgICBjbGFzcz1cInJlc2l6ZS1oYW5kbGVcIiBcbiAgICAgICAgICAgICAgc3RDb2x1bW5SZXNpemVcbiAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAoY29sdW1uUmVzaXplZCk9XCJvbkNvbHVtblJlc2l6ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLnJlc2l6YWJsZSAhPT0gZmFsc2VcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgXG4gICAgICAgICAgPCEtLSBTZXR0aW5ncyBDb2x1bW4gSGVhZGVyIC0tPlxuICAgICAgICAgIDx0aCBcbiAgICAgICAgICAgIGNsYXNzPVwic2V0dGluZ3MtY29sdW1uIHN0aWNreS1yaWdodFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdoZWFkZXItY2VsbCc6IG1vZGUgPT09ICdzdGFuZGFyZCcgfVwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7ICd6LWluZGV4JzogWkluZGV4LlNUSUNLWV9IRUFERVJfQ0VMTCB9XCI+XG4gICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2ZsZXgtY2VudGVyJzogbW9kZSA9PT0gJ3ZpcnR1YWwnLCAnaGVhZGVyLWNvbnRlbnQnOiBtb2RlID09PSAnc3RhbmRhcmQnIH1cIj5cbiAgICAgICAgICAgICAgPHN0LXRhYmxlLWFjdGlvbnMgXG4gICAgICAgICAgICAgICAgW3RhYmxlU3RhdGVdPVwiZ2V0QWN0aXZlVGFibGVTdGF0ZSgpXCJcbiAgICAgICAgICAgICAgICBbYWxsb3dBZGRDb2x1bW5dPVwibWVyZ2VkQ29uZmlnLmZlYXR1cmVzPy5jb2x1bW5NYW5hZ2VtZW50Py5hbGxvd0FkZCB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKGFkZENvbHVtbkNsaWNrZWQpPVwib25BZGRDb2x1bW5DbGljaygpXCI+XG4gICAgICAgICAgICAgIDwvc3QtdGFibGUtYWN0aW9ucz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuXG4gICAgICA8IS0tIFRBQkxFIEJPRFkgLS0+XG4gICAgICA8dGJvZHk+XG4gICAgICAgIDwhLS0gVmlydHVhbCBTY3JvbGwgUm93cyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGUgPT09ICd2aXJ0dWFsJ1wiPlxuICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIHZpc2libGVSb3dzJCB8IGFzeW5jOyBsZXQgcmVsYXRpdmVJbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5Um93SW5kZXhcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1yb3ctaW5kZXhdPVwiZ2V0QWJzb2x1dGVSb3dJbmRleChyZWxhdGl2ZUluZGV4KVwiPlxuICAgICAgICAgICAgPCEtLSBSb3cgTnVtYmVyIENlbGwgLS0+XG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJtZXJnZWRDb25maWcuc2hvd1Jvd051bWJlclwiIGNsYXNzPVwicm93LW51bWJlci1jZWxsXCIgXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3N0aWNreS1sZWZ0JzogJ2xlZnQnIH1cIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgJ3dpZHRoLnB4JzogMzAsXG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdzdGlja3knLFxuICAgICAgICAgICAgICAgICdsZWZ0LnB4JzogMCxcbiAgICAgICAgICAgICAgICAnei1pbmRleCc6IFpJbmRleC5TVElDS1lfQk9EWV9DRUxMLFxuICAgICAgICAgICAgICAgICdoZWlnaHQucHgnOiBtb2RlID09PSAndmlydHVhbCcgPyBnZXRWaXJ0dWFsU2Nyb2xsSXRlbVNpemUoKSA6IG51bGxcbiAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICB7e2dldEFic29sdXRlUm93SW5kZXgocmVsYXRpdmVJbmRleCkgKyAxfX1cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYm9keUNlbGxUZW1wbGF0ZTsgY29udGV4dDogeyBcbiAgICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICAgIHJvd0luZGV4OiBnZXRBYnNvbHV0ZVJvd0luZGV4KHJlbGF0aXZlSW5kZXgpLFxuICAgICAgICAgICAgICBtb2RlOiAndmlydHVhbCcsXG4gICAgICAgICAgICAgIHJlbGF0aXZlSW5kZXg6IHJlbGF0aXZlSW5kZXhcbiAgICAgICAgICAgIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIFN0YW5kYXJkIFJvd3MgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlID09PSAnc3RhbmRhcmQnXCI+XG4gICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2YgdmlzaWJsZUNlbGxHcmlkOyBsZXQgcm93SW5kZXggPSBpbmRleFwiIFthdHRyLmRhdGEtcm93LWluZGV4XT1cInJvd0luZGV4XCI+XG4gICAgICAgICAgICA8IS0tIFJvdyBOdW1iZXIgQ2VsbCAtLT5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cIm1lcmdlZENvbmZpZy5zaG93Um93TnVtYmVyXCIgY2xhc3M9XCJyb3ctbnVtYmVyLWNlbGxcIiBcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnc3RpY2t5LWxlZnQnOiAnbGVmdCcgfVwiXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAnd2lkdGgucHgnOiAzMCxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3N0aWNreScsXG4gICAgICAgICAgICAgICAgJ2xlZnQucHgnOiAwLFxuICAgICAgICAgICAgICAgICd6LWluZGV4JzogWkluZGV4LlNUSUNLWV9CT0RZX0NFTEwsXG4gICAgICAgICAgICAgICAgJ2hlaWdodC5weCc6IG1vZGUgPT09ICd2aXJ0dWFsJyA/IGdldFZpcnR1YWxTY3JvbGxJdGVtU2l6ZSgpIDogbnVsbFxuICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgIHt7cm93SW5kZXggKyAxfX1cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYm9keUNlbGxUZW1wbGF0ZTsgY29udGV4dDogeyBcbiAgICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgICAgICAgICAgbW9kZTogJ3N0YW5kYXJkJ1xuICAgICAgICAgICAgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+XG4gIDwhLS0gUkVVU0FCTEUgQk9EWSBDRUxMIFRFTVBMQVRFIC0tPlxuICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT5cbiAgPG5nLXRlbXBsYXRlICNib2R5Q2VsbFRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiIGxldC1tb2RlPVwibW9kZVwiIGxldC1yZWxhdGl2ZUluZGV4PVwicmVsYXRpdmVJbmRleFwiPlxuICAgIDwhLS0gRGF0YSBDZWxscyAtLT5cbiAgICA8dGQgXG4gICAgICAqbmdGb3I9XCJsZXQgY2VsbCBvZiByb3c7IGxldCBjb2xJbmRleCA9IGluZGV4XCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ3N0aWNreS1sZWZ0JzogdmlzaWJsZUNvbHVtbnNbY29sSW5kZXhdPy5zdGlja3kgPT09ICdsZWZ0JyxcbiAgICAgICAgJ3N0aWNreS1yaWdodCc6IHZpc2libGVDb2x1bW5zW2NvbEluZGV4XT8uc3RpY2t5ID09PSAncmlnaHQnLFxuICAgICAgICAnc3RpY2t5LXJpZ2h0LWZpcnN0JzogdmlzaWJsZUNvbHVtbnNbY29sSW5kZXhdPy5zdGlja3kgPT09ICdyaWdodCcgJiYgdmlzaWJsZUNvbHVtbnNbY29sSW5kZXhdPy5rZXkgJiYgaXNGaXJzdFN0aWNreVJpZ2h0KHZpc2libGVDb2x1bW5zW2NvbEluZGV4XS5rZXkpLFxuICAgICAgICAnYWxpZ24tY2VudGVyJzogdmlzaWJsZUNvbHVtbnNbY29sSW5kZXhdPy5hbGlnbm1lbnQgPT09ICdjZW50ZXInLFxuICAgICAgICAnYWxpZ24tcmlnaHQnOiB2aXNpYmxlQ29sdW1uc1tjb2xJbmRleF0/LmFsaWdubWVudCA9PT0gJ3JpZ2h0JyxcbiAgICAgICAgJ2NlbGwtZm9jdXNlZCc6IGNlbGwuaXNGb2N1c2VkKClcbiAgICAgIH1cIlxuICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICBwb3NpdGlvbjogdmlzaWJsZUNvbHVtbnNbY29sSW5kZXhdPy5zdGlja3kgPyAnc3RpY2t5JyA6IG51bGwsXG4gICAgICAgICdsZWZ0LnB4JzogdmlzaWJsZUNvbHVtbnNbY29sSW5kZXhdPy5zdGlja3kgPT09ICdsZWZ0JyA/ICh2aXNpYmxlQ29sdW1uc1tjb2xJbmRleF0/LnN0aWNreU9mZnNldCB8fCAwKSA6IG51bGwsXG4gICAgICAgICdyaWdodC5weCc6IHZpc2libGVDb2x1bW5zW2NvbEluZGV4XT8uc3RpY2t5ID09PSAncmlnaHQnID8gKHZpc2libGVDb2x1bW5zW2NvbEluZGV4XT8uc3RpY2t5T2Zmc2V0IHx8IDApIDogbnVsbCxcbiAgICAgICAgJ3otaW5kZXgnOiB2aXNpYmxlQ29sdW1uc1tjb2xJbmRleF0/LnN0aWNreSA/IFpJbmRleC5TVElDS1lfQk9EWV9DRUxMIDogbnVsbCxcbiAgICAgICAgJ3dpZHRoLnB4JzogdmlzaWJsZUNvbHVtbnNbY29sSW5kZXhdPy53aWR0aCxcbiAgICAgICAgJ2hlaWdodC5weCc6IG1vZGUgPT09ICd2aXJ0dWFsJyA/IGdldFZpcnR1YWxTY3JvbGxJdGVtU2l6ZSgpIDogbnVsbFxuICAgICAgfVwiXG4gICAgICAoY2xpY2spPVwiaXNLZXlib2FyZE5hdmlnYXRpb25FbmFibGVkKCkgPyBvbkNlbGxDbGljayhyb3dJbmRleCwgY29sSW5kZXgpIDogbnVsbFwiPlxuICAgICAgXG4gICAgICA8IS0tIFZpcnR1YWwgU2Nyb2xsIENlbGwgLS0+XG4gICAgICA8c3QtY2VsbCBcbiAgICAgICAgKm5nSWY9XCJtb2RlID09PSAndmlydHVhbCdcIlxuICAgICAgICBbY2VsbF09XCJjZWxsXCIgXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cImNlbGwuaXNGb2N1c2VkKCkgPyAwIDogLTFcIiBcbiAgICAgICAgW2VkaXRNb2RlXT1cImdldEVkaXRNb2RlRm9yQ2VsbHMoKVwiXG4gICAgICAgIFt0YWJsZVN0YXRlXT1cImdldEFjdGl2ZVRhYmxlU3RhdGUoKVwiXG4gICAgICAgIFt0YWJsZUNvbmZpZ109XCJtZXJnZWRDb25maWdcIlxuICAgICAgICBbY29sdW1uSW5kZXhdPVwiY29sSW5kZXhcIlxuICAgICAgICAoY2VsbEVkaXQpPVwib25DZWxsRWRpdCgkZXZlbnQpXCIgXG4gICAgICAgIChjZWxsU2F2ZSk9XCJvbkNlbGxTYXZlKCRldmVudClcIlxuICAgICAgICAoY2VsbFNhdmVBbmROYXZpZ2F0ZSk9XCJvbkNlbGxTYXZlQW5kTmF2aWdhdGUoJGV2ZW50KVwiIFxuICAgICAgICAoY2VsbENhbmNlbCk9XCJvbkNlbGxDYW5jZWwoJGV2ZW50KVwiXG4gICAgICAgIChjZWxsQ2hhbmdlKT1cImNlbGxDaGFuZ2UuZW1pdCgkZXZlbnQpXCI+XG4gICAgICA8L3N0LWNlbGw+XG5cbiAgICAgIDwhLS0gU3RhbmRhcmQgQ2VsbCAtLT5cbiAgICAgIDxzdC1jZWxsIFxuICAgICAgICAqbmdJZj1cIm1vZGUgPT09ICdzdGFuZGFyZCdcIlxuICAgICAgICBbY2VsbF09XCJjZWxsXCIgIFxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJjZWxsLmlzRm9jdXNlZCgpID8gMCA6IC0xXCJcbiAgICAgICAgW3RhYmxlU3RhdGVdPVwiZ2V0QWN0aXZlVGFibGVTdGF0ZSgpXCJcbiAgICAgICAgW3RhYmxlQ29uZmlnXT1cIm1lcmdlZENvbmZpZ1wiXG4gICAgICAgIFtjb2x1bW5JbmRleF09XCJjb2xJbmRleFwiXG4gICAgICAgIChjZWxsU2F2ZSk9XCJvbkNlbGxTYXZlKCRldmVudClcIlxuICAgICAgICAoY2VsbENoYW5nZSk9XCJjZWxsQ2hhbmdlLmVtaXQoJGV2ZW50KVwiPlxuICAgICAgPC9zdC1jZWxsPlxuICAgIDwvdGQ+XG4gICAgXG4gICAgPCEtLSBSb3cgQWN0aW9ucyBDZWxsIC0tPlxuICAgIDx0ZCBjbGFzcz1cInNldHRpbmdzLWNvbHVtblwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdoYXMtYWN0aW9ucyc6IGhhc1Jvd0FjdGlvbnMoKVxuICAgICAgfVwiXG4gICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgIHBvc2l0aW9uOiBoYXNSb3dBY3Rpb25zKCkgPyAnc3RpY2t5JyA6IG51bGwsXG4gICAgICAgICdyaWdodC5weCc6IGhhc1Jvd0FjdGlvbnMoKSA/IDAgOiBudWxsLFxuICAgICAgICAnei1pbmRleCc6IGhhc1Jvd0FjdGlvbnMoKSA/IFpJbmRleC5TVElDS1lfQk9EWV9DRUxMIDogbnVsbFxuICAgICAgfVwiPlxuICAgICAgPGJ1dHRvbiBcbiAgICAgICAgKm5nSWY9XCJoYXNSb3dBY3Rpb25zKClcIlxuICAgICAgICBjbGFzcz1cInNldHRpbmdzLXRyaWdnZXJcIlxuICAgICAgICAoY2xpY2spPVwib3BlblJvd0FjdGlvbnNEcm9wZG93bigkZXZlbnQsIGdldFJvd0RhdGEocm93SW5kZXgpLCByb3dJbmRleClcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICAgIGFyaWEtbGFiZWw9XCJSb3cgYWN0aW9uc1wiPlxuICAgICAgICDii69cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvdGQ+XG4gIDwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2tlbGV0b25Mb2FkZXI+XG4gIDxkaXYgY2xhc3M9XCJsaXN0LXJvd1wiICpuZ0lmPVwiKG1lcmdlZENvbmZpZy50YWJsZVNrZWxldG9uPy5lbmFibGVkIHwgYXN5bmMpXCI+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgaSBvZiBza2VsZXRvbkNvbHVtbnNcIiBjbGFzcz1cImxpc3QtY29udGVudFwiPlxuICAgICAgPG5pbGUtc2tlbGV0b24tbG9hZGVyIHZhcmlhbnQ9XCJ0ZXh0XCIgd2lkdGg9XCI5MCVcIiBoZWlnaHQ9XCIxOFwiICpuZ0Zvcj1cImxldCBqIG9mIHNrZWxldG9uUm93c1wiPjwvbmlsZS1za2VsZXRvbi1sb2FkZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
1465
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9yZW5kZXJlci9jb21wb25lbnRzL3N0LXRhYmxlL3N0LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvcmVuZGVyZXIvY29tcG9uZW50cy9zdC10YWJsZS9zdC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUErQyxTQUFTLEVBQUUsVUFBVSxFQUFpQixZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHeEssT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzVELE9BQU8sRUFBZSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXZGLE9BQU8sRUFBa0UsUUFBUSxFQUF1QixNQUFNLDRCQUE0QixDQUFDO0FBQzNJLE9BQU8sRUFBRSxlQUFlLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU8zRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQVF6RCxNQUFNLE9BQU8sZ0JBQWdCO0lBOEgzQixZQUNVLGVBQTJDLEVBQzNDLE1BQStCLEVBQy9CLG9CQUEwQyxFQUMxQyxVQUFtQztRQUhuQyxvQkFBZSxHQUFmLGVBQWUsQ0FBNEI7UUFDM0MsV0FBTSxHQUFOLE1BQU0sQ0FBeUI7UUFDL0IseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtR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L0IsTUFBTTtnQkFHRyxXQUFXO3NCQUFwQixNQUFNO2dCQUdHLFNBQVM7c0JBQWxCLE1BQU07Z0JBR0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUdHLGFBQWE7c0JBQXRCLE1BQU07Z0JBR0UsY0FBYztzQkFBdEIsS0FBSztnQkEyRTZDLGNBQWM7c0JBQWhFLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQW8rQ2pELGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEFmdGVyVmlld0luaXQsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29sdW1uQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NvbHVtbi1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IENlbGwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2VsbC5jbGFzcyc7XG5pbXBvcnQgeyBUYWJsZVN0YXRlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLXN0YXRlLmNsYXNzJztcbmltcG9ydCB7IFRhYmxlQ29uZmlnLCBtZXJnZVRhYmxlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3RhYmxlLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGFibGVTdGF0ZUNoYW5nZUV2ZW50LCBDb2x1bW5SZXNpemVFdmVudCwgQ29sdW1uQWRkRXZlbnQsIENvbHVtbk1vdmVFdmVudCwgQ2VsbEZvY3VzUG9zaXRpb24sIERhdGFDaGFuZ2VFdmVudCB9IGZyb20gJy4uLy4uL21vZGVscy90YWJsZS10eXBlcyc7XG5pbXBvcnQgeyBDZWxsQ2hhbmdlRXZlbnQsIENlbGxTYXZlRXZlbnQsIENlbGxFZGl0RXZlbnQsIENlbGxDYW5jZWxFdmVudCwgRWRpdE1vZGUsIE5hdmlnYXRpb25EaXJlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvY2VsbC10eXBlcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEpzb25TY2hlbWFWYWxpZGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvanNvbi1zY2hlbWEtdmFsaWRhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NoZW1hVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3NjaGVtYS12YWxpZGF0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24tbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmlydHVhbFNjcm9sbFNlcnZpY2UsIFZpcnR1YWxTY3JvbGxTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3ZpcnR1YWwtc2Nyb2xsLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm93QWN0aW9uLCBSb3dBY3Rpb25Db250ZXh0LCBSb3dBY3Rpb25FdmVudCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9yb3ctYWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb2x1bW5BY3Rpb24sIENvbHVtbkFjdGlvbkNvbnRleHQsIENvbHVtbkFjdGlvbkV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NvbHVtbi1hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFRhYmxlWkluZGV4IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3otaW5kZXguZW51bSc7XG5pbXBvcnQgeyBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLXR5cGVzJztcbmltcG9ydCB7IFRhYmxlVmFsaWRhdGlvblN0YXRlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLXZhbGlkYXRpb24tc3RhdGUuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3QtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3QtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdC10YWJsZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFN0VGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgLy8gWi1JbmRleCBjb25zdGFudHMgZm9yIHRlbXBsYXRlIHVzZVxuICByZWFkb25seSBaSW5kZXggPSBUYWJsZVpJbmRleDtcbiAgXG4gIC8vIE5FVzogUHJpbWFyeSBjb25maWd1cmF0aW9uIGlucHV0XG4gIEBJbnB1dCgpIHRhYmxlQ29uZmlnITogVGFibGVDb25maWc7XG4gIFxuICAvLyBORVc6IFJhdyBkYXRhIGlucHV0IChhbHRlcm5hdGl2ZSB0byBjZWxsR3JpZClcbiAgQElucHV0KCkgZGF0YT86IGFueVtdO1xuICBcbiAgLy8gTkVXOiBPYnNlcnZhYmxlL0JlaGF2aW9yU3ViamVjdCBkYXRhIGlucHV0IChmb3IgcmVhY3RpdmUgZGF0YSBzdHJlYW1zKVxuICBASW5wdXQoKSBkYXRhJD86IE9ic2VydmFibGU8YW55W10+IHwgQmVoYXZpb3JTdWJqZWN0PGFueVtdPjtcbiAgXG4gIEBJbnB1dCgpIHRhYmxlU3RhdGU/OiBUYWJsZVN0YXRlO1xuICBcbiAgLy8gREVQUkVDQVRFRDogVXNlIHRhYmxlQ29uZmlnIGluc3RlYWRcbiAgQElucHV0KCkgZW5hYmxlU29ydGluZzogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGVuYWJsZUZpbHRlcmluZzogYm9vbGVhbiA9IHRydWU7XG4gIFxuICAvLyBORVc6IFN0YXRlIGNoYW5nZSBvdXRwdXRcbiAgQE91dHB1dCgpIHN0YXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVN0YXRlQ2hhbmdlRXZlbnQ+KCk7XG4gIFxuICAvLyBORVc6IERhdGEgY2hhbmdlIG91dHB1dCAoZm9yIGFzeW5jIGRhdGEgdXBkYXRlcylcbiAgQE91dHB1dCgpIGRhdGFDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFDaGFuZ2VFdmVudD4oKTtcbiAgXG4gIC8vIEVYSVNUSU5HOiBDZWxsIGFuZCBjb2x1bW4gZXZlbnRzXG4gIEBPdXRwdXQoKSBjZWxsRWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2VsbEVkaXRFdmVudD4oKTtcbiAgQE91dHB1dCgpIGNlbGxTYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxDZWxsU2F2ZUV2ZW50PigpO1xuICBAT3V0cHV0KCkgY2VsbENhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2VsbENhbmNlbEV2ZW50PigpO1xuICBAT3V0cHV0KCkgY2VsbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q2VsbENoYW5nZUV2ZW50PigpO1xuICBAT3V0cHV0KCkgY29sdW1uUmVzaXplZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sdW1uUmVzaXplRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjb2x1bW5Nb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sdW1uTW92ZUV2ZW50PigpO1xuICBcbiAgLy8gTkVXOiBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gb3V0cHV0XG4gIEBPdXRwdXQoKSBjb25maWdWYWxpZGF0aW9uRXJyb3JzID0gbmV3IEV2ZW50RW1pdHRlcjxTY2hlbWFWYWxpZGF0aW9uRXJyb3JbXT4oKTtcbiAgXG4gIC8vIE5FVzogQ29sdW1uIG1hbmFnZW1lbnQgb3V0cHV0XG4gIEBPdXRwdXQoKSBjb2x1bW5BZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sdW1uQWRkRXZlbnQ+KCk7XG4gIFxuICAvLyBORVc6IFJvdyBhY3Rpb24gb3V0cHV0XG4gIEBPdXRwdXQoKSByb3dBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPFJvd0FjdGlvbkV2ZW50PigpO1xuICBcbiAgLy8gTkVXOiBWYWxpZGF0aW9uIHN0YXRlIGNoYW5nZSBvdXRwdXRcbiAgQE91dHB1dCgpIHZhbGlkYXRpb25TdGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVWYWxpZGF0aW9uU3RhdGU+KCk7XG4gIFxuICAvLyBORVc6IFJlcXVlc3QgdG8gYWRkIGEgbmV3IHJvdyAoZW1pdHRlZCB3aGVuIG5hdmlnYXRpbmcgcGFzdCBsYXN0IHJvdyB3aXRoIGFkZFJvd09uTmF2aWdhdGVQYXN0RW5kIGVuYWJsZWQpXG4gIEBPdXRwdXQoKSByZXF1ZXN0QWRkUm93ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGZvY3VzQ29sdW1uPzogbnVtYmVyIH0+KCk7XG4gIFxuICAvLyBORVc6IE9wdGlvbmFsIHZhbGlkYXRpb24gZmxhZ1xuICBASW5wdXQoKSB2YWxpZGF0ZUNvbmZpZzogYm9vbGVhbiA9IGZhbHNlO1xuICBcbiAgLy8gSW50ZXJuYWwgc3RhdGVcbiAgcHJpdmF0ZSBpbnRlcm5hbFRhYmxlU3RhdGU/OiBUYWJsZVN0YXRlO1xuICBwcml2YXRlIGludGVybmFsQ2VsbEdyaWQ/OiBDZWxsPGFueT5bXVtdO1xuICBwcml2YXRlIHN0YXRlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGZvY3VzU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHZhbGlkYXRpb25TdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZGF0YVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSByZXF1ZXN0QWRkUm93U3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGludGVybmFsRGF0YSQ6IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XG4gIHByaXZhdGUgcHJldmlvdXNEYXRhOiBhbnlbXSA9IFtdO1xuICBtZXJnZWRDb25maWchOiBUYWJsZUNvbmZpZztcbiAgXG4gIC8vIE1vZGFsIHN0YXRlXG4gIHB1YmxpYyBzaG93Q29sdW1uTW9kYWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gIC8vIENhY2hlZCB2aXNpYmxlIGNvbHVtbnMgYW5kIGNlbGwgZ3JpZCB0byBwcmV2ZW50IHJlLWNyZWF0aW9uIG9uIGV2ZXJ5IGNoYW5nZSBkZXRlY3Rpb25cbiAgcHVibGljIHZpc2libGVDb2x1bW5zOiBDb2x1bW5Db25maWc8YW55PltdID0gW107XG4gIHB1YmxpYyB2aXNpYmxlQ2VsbEdyaWQ6IENlbGw8YW55PltdW10gPSBbXTtcbiAgXG4gIC8vIFJvdyBhY3Rpb25zIGRyb3Bkb3duIHN0YXRlXG4gIHB1YmxpYyBkcm9wZG93blN0YXRlOiB7XG4gICAgaXNPcGVuOiBib29sZWFuO1xuICAgIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH07XG4gICAgY29udGV4dDogUm93QWN0aW9uQ29udGV4dCB8IG51bGw7XG4gIH0gPSB7XG4gICAgaXNPcGVuOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogeyB4OiAwLCB5OiAwIH0sXG4gICAgY29udGV4dDogbnVsbFxuICB9O1xuICBcbiAgcHVibGljIHNrZWxldG9uQ29sdW1ucz86IG51bWJlcltdO1xuICBwdWJsaWMgc2tlbGV0b25Sb3dzPzogbnVtYmVyW107XG5cbiAgLy8gQ29sdW1uIG1lbnUgZHJvcGRvd24gc3RhdGVcbiAgcHVibGljIGNvbHVtbk1lbnVTdGF0ZToge1xuICAgIGlzT3BlbjogYm9vbGVhbjtcbiAgICBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9O1xuICAgIGNvbnRleHQ6IENvbHVtbkFjdGlvbkNvbnRleHQgfCBudWxsO1xuICB9ID0ge1xuICAgIGlzT3BlbjogZmFsc2UsXG4gICAgcG9zaXRpb246IHsgeDogMCwgeTogMCB9LFxuICAgIGNvbnRleHQ6IG51bGxcbiAgfTtcbiAgXG4gIC8vIFZpcnR1YWwgc2Nyb2xsIHByb3BlcnRpZXNcbiAgcHJpdmF0ZSBzY3JvbGxDb250YWluZXI/OiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBzY3JvbGxTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgdmlydHVhbFNjcm9sbFN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VmlydHVhbFNjcm9sbFN0YXRlIHwgbnVsbD4obnVsbCk7XG4gIFxuICAvLyBPYnNlcnZhYmxlIHN0cmVhbXMgZGVyaXZlZCBmcm9tIHZpcnR1YWwgc2Nyb2xsIHN0YXRlXG4gIHB1YmxpYyB2aXJ0dWFsU2Nyb2xsVG90YWxIZWlnaHQkOiBPYnNlcnZhYmxlPG51bWJlcj4gPSB0aGlzLnZpcnR1YWxTY3JvbGxTdGF0ZSQucGlwZShcbiAgICBtYXAoc3RhdGUgPT4gc3RhdGU/LnRvdGFsSGVpZ2h0ID8/IDApLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgKTtcbiAgXG4gIHB1YmxpYyB2aXJ0dWFsU2Nyb2xsT2Zmc2V0WSQ6IE9ic2VydmFibGU8bnVtYmVyPiA9IHRoaXMudmlydHVhbFNjcm9sbFN0YXRlJC5waXBlKFxuICAgIG1hcChzdGF0ZSA9PiBzdGF0ZT8ub2Zmc2V0WSA/PyAwKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICk7XG5cbiAgcHVibGljIHZpcnR1YWxTY3JvbGxPZmZzZXRZTmVnJDogT2JzZXJ2YWJsZTxudW1iZXI+ID0gdGhpcy52aXJ0dWFsU2Nyb2xsU3RhdGUkLnBpcGUoXG4gICAgbWFwKHN0YXRlID0+IE51bWJlcihzdGF0ZT8ub2Zmc2V0WSA/PyAwKSAqIC0xICksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICApO1xuICBcbiAgcHVibGljIHZpc2libGVSb3dzJDogT2JzZXJ2YWJsZTxDZWxsPGFueT5bXVtdPiA9IHRoaXMudmlydHVhbFNjcm9sbFN0YXRlJC5waXBlKFxuICAgIG1hcChzdGF0ZSA9PiB7XG4gICAgICBpZiAoIXN0YXRlKSByZXR1cm4gdGhpcy52aXNpYmxlQ2VsbEdyaWQ7XG4gICAgICBjb25zdCB7IHN0YXJ0SW5kZXgsIGVuZEluZGV4IH0gPSBzdGF0ZTtcbiAgICAgIHJldHVybiB0aGlzLnZpc2libGVDZWxsR3JpZC5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgfSlcbiAgKTtcbiAgXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbFZpZXdwb3J0JywgeyByZWFkOiBFbGVtZW50UmVmIH0pIHNjcm9sbFZpZXdwb3J0PzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIFxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNjaGVtYVZhbGlkYXRvcjogSnNvblNjaGVtYVZhbGlkYXRvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2dnZXI6IFZhbGlkYXRpb25Mb2dnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdmlydHVhbFNjcm9sbFNlcnZpY2U6IFZpcnR1YWxTY3JvbGxTZXJ2aWNlLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBWYWxpZGF0ZSB0aGF0IGF0IGxlYXN0IHRhYmxlQ29uZmlnIG9yIGNvbHVtbnMgaXMgcHJvdmlkZWRcbiAgICBpZiAoIXRoaXMudGFibGVDb25maWcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRWl0aGVyIHRhYmxlQ29uZmlnIG9yIGNvbHVtbnMgbXVzdCBiZSBwcm92aWRlZCcpO1xuICAgIH1cbiAgICBcbiAgICAvLyBNZXJnZSBjb25maWcgd2l0aCBkZWZhdWx0c1xuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKSB7XG4gICAgICB0aGlzLm1lcmdlZENvbmZpZyA9IG1lcmdlVGFibGVDb25maWcodGhpcy50YWJsZUNvbmZpZyk7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGNvbmZpZ3VyYXRpb24gaWYgZW5hYmxlZFxuICAgICAgaWYgKHRoaXMudmFsaWRhdGVDb25maWcpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUNvbmZpZ3VyYXRpb24odGhpcy5tZXJnZWRDb25maWcpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBDcmVhdGUgb3IgdXNlIFRhYmxlU3RhdGVcbiAgICBpZiAoIXRoaXMudGFibGVTdGF0ZSkge1xuICAgICAgdGhpcy5jcmVhdGVJbnRlcm5hbFRhYmxlU3RhdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3Vic2NyaWJlIHRvIGV4dGVybmFsIHRhYmxlU3RhdGUgY2hhbmdlc1xuICAgICAgdGhpcy5zdWJzY3JpYmVUb0V4dGVybmFsVGFibGVTdGF0ZSgpO1xuICAgIH1cbiAgICBcbiAgICAvLyBTZXR1cCBkYXRhIHNvdXJjZSAoc3luYyBvciBhc3luYylcbiAgICB0aGlzLnNldHVwRGF0YVNvdXJjZSgpO1xuICAgIFxuICAgIC8vIENhbGN1bGF0ZSBzdGlja3kgb2Zmc2V0c1xuICAgIGNvbnN0IHJvd051bWJlcldpZHRoID0gdGhpcy5tZXJnZWRDb25maWcuc2hvd1Jvd051bWJlciA/IDMwIDogMDtcbiAgICBjb25zdCBzZXR0aW5nc0NvbHVtbldpZHRoID0gdGhpcy5oYXNSb3dBY3Rpb25zKCkgPyAyOCA6IDA7IC8vIFNldHRpbmdzIGNvbHVtbiBpcyB+MzJweCB3aWRlIHdoZW4gdmlzaWJsZVxuICAgIHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpLmNhbGN1bGF0ZVN0aWNreU9mZnNldHMocm93TnVtYmVyV2lkdGgsIHNldHRpbmdzQ29sdW1uV2lkdGgpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgdmlzaWJsZSBjb2x1bW5zIGFuZCBjZWxsIGdyaWRcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVEYXRhKCk7XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSB2aXJ0dWFsIHNjcm9sbCBpZiBlbmFibGVkXG4gICAgaWYgKHRoaXMuaXNWaXJ0dWFsU2Nyb2xsRW5hYmxlZCgpKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVWaXJ0dWFsU2Nyb2xsKCk7XG4gICAgfVxuICAgIFxuICAgIC8vIEluaXRpYWxpemUga2V5Ym9hcmQgbmF2aWdhdGlvbiBpZiBlbmFibGVkXG4gICAgaWYgKHRoaXMuaXNLZXlib2FyZE5hdmlnYXRpb25FbmFibGVkKCkpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUtleWJvYXJkTmF2aWdhdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMuc2tlbGV0b25Db2x1bW5zID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogdGhpcy5tZXJnZWRDb25maWcudGFibGVTa2VsZXRvbj8uY29sdW1ucyA/PyAxMCB9LCAoXywgaSkgPT4gaSk7XG4gICAgdGhpcy5za2VsZXRvblJvd3MgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLm1lcmdlZENvbmZpZy50YWJsZVNrZWxldG9uPy5yb3dzID8/IDEwIH0sIChfLCBpKSA9PiBpKTtcbiAgfVxuICBcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIFNldHVwIHZpcnR1YWwgc2Nyb2xsIGFmdGVyIHZpZXcgaXMgcmVhZHlcbiAgICBpZiAodGhpcy5pc1ZpcnR1YWxTY3JvbGxFbmFibGVkKCkgJiYgdGhpcy5zY3JvbGxWaWV3cG9ydCkge1xuICAgICAgdGhpcy5zZXR1cFZpcnR1YWxTY3JvbGxMaXN0ZW5lcigpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvLyBWYWxpZGF0ZSBjb25maWd1cmF0aW9uIHdoZW4gdGFibGVDb25maWcgY2hhbmdlc1xuICAgIGlmIChjaGFuZ2VzWyd0YWJsZUNvbmZpZyddICYmICFjaGFuZ2VzWyd0YWJsZUNvbmZpZyddLmZpcnN0Q2hhbmdlICYmIHRoaXMudGFibGVDb25maWcpIHtcbiAgICAgIHRoaXMubWVyZ2VkQ29uZmlnID0gbWVyZ2VUYWJsZUNvbmZpZyh0aGlzLnRhYmxlQ29uZmlnKTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgY29uZmlndXJhdGlvbiBpZiBlbmFibGVkXG4gICAgICBpZiAodGhpcy52YWxpZGF0ZUNvbmZpZykge1xuICAgICAgICB0aGlzLnZhbGlkYXRlQ29uZmlndXJhdGlvbih0aGlzLm1lcmdlZENvbmZpZyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCB0YWJsZSBzdGF0ZSB3aXRoIG5ldyBjb2x1bW5zIGlmIHVzaW5nIGludGVybmFsIHN0YXRlXG4gICAgICBpZiAodGhpcy5pbnRlcm5hbFRhYmxlU3RhdGUpIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbFRhYmxlU3RhdGUudXBkYXRlQ29sdW1ucyh0aGlzLm1lcmdlZENvbmZpZy5jb2x1bW5zKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIHZpc2libGUgY29sdW1ucyBhbmQgY2VsbCBncmlkXG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVEYXRhKCk7XG4gICAgfVxuICAgIFxuICAgIC8vIFJlY3JlYXRlIGNlbGwgZ3JpZCB3aGVuIGRhdGEgY2hhbmdlcyAob25seSBpZiBub3QgdXNpbmcgZGF0YSQgT2JzZXJ2YWJsZSlcbiAgICBpZiAoY2hhbmdlc1snZGF0YSddICYmICFjaGFuZ2VzWydkYXRhJ10uZmlyc3RDaGFuZ2UgJiYgdGhpcy5kYXRhICYmICF0aGlzLmRhdGEkKSB7XG4gICAgICB0aGlzLmhhbmRsZVN5bmNEYXRhQ2hhbmdlKGNoYW5nZXNbJ2RhdGEnXS5wcmV2aW91c1ZhbHVlIHx8IFtdKTtcbiAgICB9XG4gICAgXG4gICAgLy8gSGFuZGxlIGRhdGEkIE9ic2VydmFibGUgaW5wdXQgY2hhbmdlc1xuICAgIGlmIChjaGFuZ2VzWydkYXRhJCddICYmICFjaGFuZ2VzWydkYXRhJCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLnNldHVwRGF0YVNvdXJjZSgpO1xuICAgIH1cbiAgICBcbiAgICAvLyBSZWNyZWF0ZSBjZWxsIGdyaWQgd2hlbiBjZWxsR3JpZCBjaGFuZ2VzXG4gICAgaWYgKGNoYW5nZXNbJ2NlbGxHcmlkJ10gJiYgIWNoYW5nZXNbJ2NlbGxHcmlkJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIC8vIENlbGwgZ3JpZCB3YXMgdXBkYXRlZCBleHRlcm5hbGx5LCBubyBuZWVkIHRvIHJlY3JlYXRlXG4gICAgICAvLyBKdXN0IHJlY2FsY3VsYXRlIHN0aWNreSBvZmZzZXRzIGlmIG5lZWRlZFxuICAgICAgaWYgKHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpKSB7XG4gICAgICAgIGNvbnN0IHJvd051bWJlcldpZHRoID0gdGhpcy5tZXJnZWRDb25maWcuc2hvd1Jvd051bWJlciA/IDMwIDogMDtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3NDb2x1bW5XaWR0aCA9IHRoaXMuaGFzUm93QWN0aW9ucygpID8gMzIgOiAwO1xuICAgICAgICB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKS5jYWxjdWxhdGVTdGlja3lPZmZzZXRzKHJvd051bWJlcldpZHRoLCBzZXR0aW5nc0NvbHVtbldpZHRoKTtcbiAgICAgIH1cbiAgICAgIC8vIFVwZGF0ZSB2aXNpYmxlIGNvbHVtbnMgYW5kIGNlbGwgZ3JpZFxuICAgICAgdGhpcy51cGRhdGVWaXNpYmxlRGF0YSgpO1xuICAgIH1cbiAgICBcbiAgICAvLyBIYW5kbGUgdGFibGVTdGF0ZSBpbnB1dCBjaGFuZ2VzICh3aGVuIGV4dGVybmFsIHN0YXRlIGlzIHByb3ZpZGVkLCBlLmcuLCBpbiB3b3JrYm9vaylcbiAgICBpZiAoY2hhbmdlc1sndGFibGVTdGF0ZSddICYmICFjaGFuZ2VzWyd0YWJsZVN0YXRlJ10uZmlyc3RDaGFuZ2UgJiYgdGhpcy50YWJsZVN0YXRlKSB7XG4gICAgICAvLyBVbnN1YnNjcmliZSBmcm9tIGFsbCBvbGQgdGFibGVTdGF0ZSBvYnNlcnZhYmxlcyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuICAgICAgdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMudmFsaWRhdGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuZm9jdXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICBcbiAgICAgIC8vIFJlc3Vic2NyaWJlIHRvIG5ldyB0YWJsZVN0YXRlJ3Mgb2JzZXJ2YWJsZXNcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9FeHRlcm5hbFRhYmxlU3RhdGUoKTtcbiAgICAgIFxuICAgICAgLy8gUmVpbml0aWFsaXplIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aCBuZXcgdGFibGVTdGF0ZVxuICAgICAgaWYgKHRoaXMuaXNLZXlib2FyZE5hdmlnYXRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplS2V5Ym9hcmROYXZpZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIFJlY2FsY3VsYXRlIHZpcnR1YWwgc2Nyb2xsIHdoZW4gZGF0YSBjaGFuZ2VzXG4gICAgaWYgKChjaGFuZ2VzWydkYXRhJ10gfHwgY2hhbmdlc1snY2VsbEdyaWQnXSkgJiYgIWNoYW5nZXNbJ2RhdGEnXT8uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGlmICh0aGlzLmlzVmlydHVhbFNjcm9sbEVuYWJsZWQoKSkge1xuICAgICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLnZpcnR1YWxTY3JvbGxTdGF0ZSQudmFsdWU7XG4gICAgICAgIGlmIChjdXJyZW50U3RhdGUpIHtcbiAgICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IHRoaXMudmlydHVhbFNjcm9sbFNlcnZpY2UuY2FsY3VsYXRlVmlzaWJsZVJhbmdlKHtcbiAgICAgICAgICAgIHNjcm9sbFRvcDogY3VycmVudFN0YXRlLnNjcm9sbFRvcCxcbiAgICAgICAgICAgIHZpZXdwb3J0SGVpZ2h0OiB0aGlzLmdldFZpcnR1YWxTY3JvbGxWaWV3cG9ydEhlaWdodCgpLFxuICAgICAgICAgICAgdG90YWxJdGVtczogdGhpcy52aXNpYmxlQ2VsbEdyaWQubGVuZ3RoLFxuICAgICAgICAgICAgaXRlbVNpemU6IHRoaXMuZ2V0VmlydHVhbFNjcm9sbEl0ZW1TaXplKCksXG4gICAgICAgICAgICBidWZmZXJTaXplOiB0aGlzLmdldFZpcnR1YWxTY3JvbGxCdWZmZXJTaXplKClcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxTdGF0ZSQubmV4dChuZXdTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIGtleWJvYXJkIG5hdmlnYXRpb24gZGltZW5zaW9ucyBpZiBlbmFibGVkXG4gICAgICBpZiAodGhpcy5pc0tleWJvYXJkTmF2aWdhdGlvbkVuYWJsZWQoKSAmJiAoY2hhbmdlc1snZGF0YSddIHx8IGNoYW5nZXNbJ2NlbGxHcmlkJ10pKSB7XG4gICAgICAgIHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpLnNldERpbWVuc2lvbnMoXG4gICAgICAgICAgdGhpcy52aXNpYmxlQ2VsbEdyaWQubGVuZ3RoLFxuICAgICAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMubGVuZ3RoXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBpbnRlcm5hbCBUYWJsZVN0YXRlIGZyb20gY29uZmlnXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUludGVybmFsVGFibGVTdGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRBY3RpdmVDb2x1bW5zKCk7XG4gICAgdGhpcy5pbnRlcm5hbFRhYmxlU3RhdGUgPSBuZXcgVGFibGVTdGF0ZShjb2x1bW5zLCB7XG4gICAgICBwYWdlU2l6ZTogdGhpcy5tZXJnZWRDb25maWcucGFnaW5hdGlvbj8ucGFnZVNpemUsXG4gICAgICBpbml0aWFsUGFnZTogdGhpcy5tZXJnZWRDb25maWcuaW5pdGlhbFN0YXRlPy5wYWdlXG4gICAgfSk7XG4gICAgXG4gICAgLy8gU2V0IHRvdGFsIGl0ZW1zIGlmIHByb3ZpZGVkIGluIGNvbmZpZyAoZm9yIHNlcnZlci1zaWRlIHBhZ2luYXRpb24pXG4gICAgaWYgKHRoaXMubWVyZ2VkQ29uZmlnLnBhZ2luYXRpb24/LnRvdGFsSXRlbXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pbnRlcm5hbFRhYmxlU3RhdGUuc2V0VG90YWxJdGVtcyh0aGlzLm1lcmdlZENvbmZpZy5wYWdpbmF0aW9uLnRvdGFsSXRlbXMpO1xuICAgIH1cbiAgICBcbiAgICAvLyBBcHBseSBpbml0aWFsIHNvcnQgaWYgcHJvdmlkZWRcbiAgICBpZiAodGhpcy5tZXJnZWRDb25maWcuaW5pdGlhbFN0YXRlPy5zb3J0QnkpIHtcbiAgICAgIHRoaXMubWVyZ2VkQ29uZmlnLmluaXRpYWxTdGF0ZS5zb3J0QnkuZm9yRWFjaChzb3J0ID0+IHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbFRhYmxlU3RhdGUhLmFkZFNvcnRUb0NvbHVtbihzb3J0LmtleSwgc29ydC5kaXJlY3Rpb24pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIC8vIEFwcGx5IGluaXRpYWwgZmlsdGVycyBpZiBwcm92aWRlZFxuICAgIGlmICh0aGlzLm1lcmdlZENvbmZpZy5pbml0aWFsU3RhdGU/LmZpbHRlcnMpIHtcbiAgICAgIHRoaXMubWVyZ2VkQ29uZmlnLmluaXRpYWxTdGF0ZS5maWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbFRhYmxlU3RhdGUhLnNldEZpbHRlck9uQ29sdW1uKGZpbHRlci5rZXksIGZpbHRlci5vcGVyYXRvciwgZmlsdGVyLnZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICAvLyBTdWJzY3JpYmUgdG8gaW50ZXJuYWwgc3RhdGUgY2hhbmdlcyBhbmQgcmUtZW1pdFxuICAgIHRoaXMuc3Vic2NyaWJlVG9JbnRlcm5hbFN0YXRlKCk7XG4gICAgXG4gICAgLy8gU3Vic2NyaWJlIHRvIHZhbGlkYXRpb24gc3RhdGUgY2hhbmdlcyBhbmQgcmUtZW1pdFxuICAgIHRoaXMuc3Vic2NyaWJlVG9WYWxpZGF0aW9uU3RhdGUoKTtcbiAgfVxuICBcbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb1ZhbGlkYXRpb25TdGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuaW50ZXJuYWxUYWJsZVN0YXRlKSByZXR1cm47XG4gICAgdGhpcy52YWxpZGF0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5pbnRlcm5hbFRhYmxlU3RhdGUudGFibGVWYWxpZGF0aW9uU3RhdGUkXG4gICAgICAuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uU3RhdGVDaGFuZ2UuZW1pdChzdGF0ZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9JbnRlcm5hbFN0YXRlKCkge1xuICAgIGlmICghdGhpcy5pbnRlcm5hbFRhYmxlU3RhdGUpIHJldHVybjtcbiAgICB0aGlzLnN0YXRlU3Vic2NyaXB0aW9uID0gdGhpcy5pbnRlcm5hbFRhYmxlU3RhdGU/LnN0YXRlQ2hhbmdlJFxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2UuZW1pdChldmVudCk7XG5cbiAgICAgICAgLy8gVXBkYXRlIHZpc2libGUgY29sdW1ucyBhbmQgY2VsbCBncmlkIG9uIHZpc2liaWxpdHkgY2hhbmdlc1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2NvbHVtbi12aXNpYmlsaXR5JyB8fCBldmVudC50eXBlID09PSAnY29sdW1uLWNvbmZpZycpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVEYXRhKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBleHRlcm5hbCBUYWJsZVN0YXRlIGNoYW5nZXNcbiAgICovXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9FeHRlcm5hbFRhYmxlU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRhYmxlU3RhdGUpIHJldHVybjtcbiAgICBcbiAgICB0aGlzLnN0YXRlU3Vic2NyaXB0aW9uID0gdGhpcy50YWJsZVN0YXRlLnN0YXRlQ2hhbmdlJFxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgICAgIFxuICAgICAgICAvLyBVcGRhdGUgdmlzaWJsZSBjb2x1bW5zIGFuZCBjZWxsIGdyaWQgb24gdmlzaWJpbGl0eSBjaGFuZ2VzXG4gICAgICAgIGlmIChldmVudC50eXBlID09PSAnY29sdW1uLXZpc2liaWxpdHknIHx8IGV2ZW50LnR5cGUgPT09ICdjb2x1bW4tY29uZmlnJykge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZURhdGEoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgXG4gICAgLy8gU3Vic2NyaWJlIHRvIHZhbGlkYXRpb24gc3RhdGUgY2hhbmdlcyBhbmQgcmUtZW1pdFxuICAgdGhpcy5zdWJzY3JpYmVUb1ZhbGlkYXRpb25TdGF0ZSgpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ3JlYXRlIGNlbGwgZ3JpZCBmcm9tIHJhdyBkYXRhXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUNlbGxHcmlkRnJvbURhdGEoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRhdGEpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRBY3RpdmVDb2x1bW5zKCk7XG4gICAgY29uc3Qgb2xkR3JpZCA9IHRoaXMuaW50ZXJuYWxDZWxsR3JpZDtcblxuICAgIHRoaXMuaW50ZXJuYWxDZWxsR3JpZCA9IHRoaXMuZGF0YS5tYXAoKHJvd0RhdGEsIHJvd0luZGV4KSA9PlxuICAgICAgY29sdW1ucy5tYXAoKGNvbHVtbiwgY29sSW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgbmV3Q2VsbCA9IGNvbHVtbi5jcmVhdGVDZWxsKHJvd0RhdGEsIHJvd0luZGV4KTtcblxuICAgICAgICBjb25zdCBvbGRDZWxsID0gb2xkR3JpZD8uW3Jvd0luZGV4XT8uW2NvbEluZGV4XTtcbiAgICAgICAgaWYgKG9sZENlbGwgJiYgb2xkQ2VsbC5nZXRDb2x1bW5Db25maWcoKS5rZXkgPT09IGNvbHVtbi5rZXkpIHtcbiAgICAgICAgICBvbGRDZWxsLnNldFJlcGxhY2VtZW50KG5ld0NlbGwpO1xuICAgICAgICAgIC8vIENhcnJ5IG92ZXIgdHJhbnNpZW50IHN0YXRlIChlLmcuIGxvYWRpbmcpIHRoYXQgd2FzIHNldCBvbiB0aGUgb2xkIGNlbGxcbiAgICAgICAgICBjb25zdCBvbGRTdGF0ZSA9IG9sZENlbGwuZ2V0U3RhdGUoKTtcbiAgICAgICAgICBpZiAob2xkU3RhdGUuaXNMb2FkaW5nKSB7XG4gICAgICAgICAgICBuZXdDZWxsLnNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld0NlbGw7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTZXR1cCBkYXRhIHNvdXJjZSAtIGVpdGhlciBzeW5jIGFycmF5IG9yIGFzeW5jIE9ic2VydmFibGVcbiAgICogSGFuZGxlcyBpbml0aWFsaXphdGlvbiBhbmQgc3Vic2NyaXB0aW9uIHRvIGRhdGEgY2hhbmdlc1xuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cERhdGFTb3VyY2UoKTogdm9pZCB7XG4gICAgLy8gV2FybiBpZiBib3RoIGRhdGEgYW5kIGRhdGEkIGFyZSBwcm92aWRlZFxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhJCkge1xuICAgICAgY29uc29sZS53YXJuKCdTdFRhYmxlQ29tcG9uZW50OiBCb3RoIGRhdGEgYW5kIGRhdGEkIGlucHV0cyBhcmUgcHJvdmlkZWQuIFVzaW5nIGRhdGEkIChPYnNlcnZhYmxlKSBhbmQgaWdub3JpbmcgZGF0YSBhcnJheS4nKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2xlYW4gdXAgZXhpc3Rpbmcgc3Vic2NyaXB0aW9uXG4gICAgdGhpcy5kYXRhU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIFxuICAgIC8vIFByaW9yaXR5OiBkYXRhJCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgZGF0YVxuICAgIGlmICh0aGlzLmRhdGEkKSB7XG4gICAgICB0aGlzLnN1YnNjcmliZVRvRGF0YUNoYW5nZXMoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgLy8gRm9yIHN5bmMgZGF0YSwgZW1pdCBvbmNlIHRocm91Z2ggaW50ZXJuYWwgb2JzZXJ2YWJsZVxuICAgICAgdGhpcy5wcmV2aW91c0RhdGEgPSBbXTtcbiAgICAgIHRoaXMuaW50ZXJuYWxEYXRhJC5uZXh0KHRoaXMuZGF0YSk7XG4gICAgICB0aGlzLnN1YnNjcmliZVRvRGF0YUNoYW5nZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gZGF0YSBwcm92aWRlZCwgZW1pdCBlbXB0eSBhcnJheVxuICAgICAgdGhpcy5wcmV2aW91c0RhdGEgPSBbXTtcbiAgICAgIHRoaXMuaW50ZXJuYWxEYXRhJC5uZXh0KFtdKTtcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9EYXRhQ2hhbmdlcygpO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBkYXRhIGNoYW5nZXMgKGVpdGhlciBmcm9tIGRhdGEkIGlucHV0IG9yIGludGVybmFsIEJlaGF2aW9yU3ViamVjdClcbiAgICovXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9EYXRhQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhU291cmNlJCA9IHRoaXMuZGF0YSQgfHwgdGhpcy5pbnRlcm5hbERhdGEkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIFxuICAgIHRoaXMuZGF0YVN1YnNjcmlwdGlvbiA9IGRhdGFTb3VyY2UkLnN1YnNjcmliZShuZXdEYXRhID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlRGF0YUNoYW5nZShuZXdEYXRhKTtcbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBkYXRhIGNoYW5nZSBmcm9tIE9ic2VydmFibGUgZW1pc3Npb25cbiAgICovXG4gIHByaXZhdGUgaGFuZGxlRGF0YUNoYW5nZShuZXdEYXRhOiBhbnlbXSk6IHZvaWQge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc291cmNlOiAnc3luYycgfCAnYXN5bmMnID0gdGhpcy5kYXRhJCA/ICdhc3luYycgOiAnc3luYyc7XG4gICAgXG4gICAgLy8gRW1pdCBkYXRhIGNoYW5nZSBldmVudFxuICAgIHRoaXMuZGF0YUNoYW5nZS5lbWl0KHtcbiAgICAgIHByZXZpb3VzRGF0YTogdGhpcy5wcmV2aW91c0RhdGEsXG4gICAgICBjdXJyZW50RGF0YTogbmV3RGF0YSxcbiAgICAgIHRpbWVzdGFtcCxcbiAgICAgIHNvdXJjZVxuICAgIH0pO1xuICAgIFxuICAgIC8vIFVwZGF0ZSBkYXRhIHJlZmVyZW5jZVxuICAgIHRoaXMuZGF0YSA9IG5ld0RhdGE7XG4gICAgdGhpcy5wcmV2aW91c0RhdGEgPSBbLi4ubmV3RGF0YV07XG4gICAgXG4gICAgLy8gUmVjcmVhdGUgY2VsbCBncmlkXG4gICAgdGhpcy5jcmVhdGVDZWxsR3JpZEZyb21EYXRhKCk7XG4gICAgXG4gICAgLy8gVXBkYXRlIHZpc2libGUgZGF0YVxuICAgIHRoaXMudXBkYXRlVmlzaWJsZURhdGEoKTtcbiAgICBcbiAgICAvLyBSZWNhbGN1bGF0ZSB2aXJ0dWFsIHNjcm9sbCBpZiBlbmFibGVkXG4gICAgaWYgKHRoaXMuaXNWaXJ0dWFsU2Nyb2xsRW5hYmxlZCgpKSB7XG4gICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLnZpcnR1YWxTY3JvbGxTdGF0ZSQudmFsdWU7XG4gICAgICBpZiAoY3VycmVudFN0YXRlKSB7XG4gICAgICAgIGNvbnN0IG5ld1N0YXRlID0gdGhpcy52aXJ0dWFsU2Nyb2xsU2VydmljZS5jYWxjdWxhdGVWaXNpYmxlUmFuZ2Uoe1xuICAgICAgICAgIHNjcm9sbFRvcDogY3VycmVudFN0YXRlLnNjcm9sbFRvcCxcbiAgICAgICAgICB2aWV3cG9ydEhlaWdodDogdGhpcy5nZXRWaXJ0dWFsU2Nyb2xsVmlld3BvcnRIZWlnaHQoKSxcbiAgICAgICAgICB0b3RhbEl0ZW1zOiB0aGlzLnZpc2libGVDZWxsR3JpZC5sZW5ndGgsXG4gICAgICAgICAgaXRlbVNpemU6IHRoaXMuZ2V0VmlydHVhbFNjcm9sbEl0ZW1TaXplKCksXG4gICAgICAgICAgYnVmZmVyU2l6ZTogdGhpcy5nZXRWaXJ0dWFsU2Nyb2xsQnVmZmVyU2l6ZSgpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxTdGF0ZSQubmV4dChuZXdTdGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIFVwZGF0ZSBrZXlib2FyZCBuYXZpZ2F0aW9uIGRpbWVuc2lvbnMgaWYgZW5hYmxlZFxuICAgIGlmICh0aGlzLmlzS2V5Ym9hcmROYXZpZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKS5zZXREaW1lbnNpb25zKFxuICAgICAgICB0aGlzLnZpc2libGVDZWxsR3JpZC5sZW5ndGgsXG4gICAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMubGVuZ3RoXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBzeW5jIGRhdGEgY2hhbmdlIChmcm9tIEBJbnB1dCgpIGRhdGEgY2hhbmdlcylcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlU3luY0RhdGFDaGFuZ2UocHJldmlvdXNEYXRhOiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMucHJldmlvdXNEYXRhID0gcHJldmlvdXNEYXRhO1xuICAgIHRoaXMuaW50ZXJuYWxEYXRhJC5uZXh0KHRoaXMuZGF0YSB8fCBbXSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgYWN0aXZlIFRhYmxlU3RhdGUgKHByb3ZpZGVkIG9yIGludGVybmFsKVxuICAgKi9cbiAgZ2V0QWN0aXZlVGFibGVTdGF0ZSgpOiBUYWJsZVN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZVN0YXRlIHx8IHRoaXMuaW50ZXJuYWxUYWJsZVN0YXRlITtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBhY3RpdmUgY2VsbCBncmlkIChwcm92aWRlZCBvciBpbnRlcm5hbClcbiAgICovXG4gIGdldEFjdGl2ZUNlbGxHcmlkKCk6IENlbGw8YW55PltdW10ge1xuICAgIHJldHVybiB0aGlzLmludGVybmFsQ2VsbEdyaWQgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogR2V0IHZpc2libGUgY2VsbCBncmlkIChmaWx0ZXJlZCB0byBvbmx5IGluY2x1ZGUgdmlzaWJsZSBjb2x1bW5zKVxuICAgKi9cbiAgZ2V0VmlzaWJsZUNlbGxHcmlkKCk6IENlbGw8YW55PltdW10ge1xuICAgIGNvbnN0IGFsbENvbHVtbnMgPSB0aGlzLmdldEFjdGl2ZUNvbHVtbnMoKTtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMuZ2V0VmlzaWJsZUNvbHVtbnMoKTtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1uS2V5cyA9IG5ldyBTZXQodmlzaWJsZUNvbHVtbnMubWFwKGNvbCA9PiBjb2wua2V5KSk7XG4gICAgXG4gICAgLy8gR2V0IGNvbHVtbiBpbmRpY2VzIGZvciB2aXNpYmxlIGNvbHVtbnNcbiAgICBjb25zdCB2aXNpYmxlSW5kaWNlcyA9IGFsbENvbHVtbnNcbiAgICAgIC5tYXAoKGNvbCwgaW5kZXgpID0+IHZpc2libGVDb2x1bW5LZXlzLmhhcyhjb2wua2V5KSA/IGluZGV4IDogLTEpXG4gICAgICAuZmlsdGVyKGluZGV4ID0+IGluZGV4ICE9PSAtMSk7XG4gICAgXG4gICAgY29uc3QgZnVsbEdyaWQgPSB0aGlzLmdldEFjdGl2ZUNlbGxHcmlkKCk7XG4gICAgcmV0dXJuIGZ1bGxHcmlkLm1hcChyb3cgPT4gXG4gICAgICB2aXNpYmxlSW5kaWNlcy5tYXAoaW5kZXggPT4gcm93W2luZGV4XSkuZmlsdGVyKGNlbGwgPT4gY2VsbCAhPT0gdW5kZWZpbmVkKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSB2aXNpYmxlIGNlbGwgZ3JpZCBiYXNlZCBvbiBjdXJyZW50IHZpc2liaWxpdHkgYW5kIGNvbHVtbiBvcmRlclxuICAgKiBDYWxsZWQgd2hlbiBkYXRhLCB2aXNpYmlsaXR5LCBvciBjb2x1bW4gb3JkZXIgY2hhbmdlc1xuICAgKiBcbiAgICogVGhpcyBtZXRob2QgcHJvcGVybHkgaGFuZGxlcyBjb2x1bW4gcmVvcmRlcmluZyBieSBtYXBwaW5nIGNlbGxzIGJhc2VkIG9uXG4gICAqIGNvbHVtbiBrZXlzIHJhdGhlciB0aGFuIGluZGljZXMsIGVuc3VyaW5nIGNlbGxzIGZvbGxvdyB0aGVpciBjb2x1bW5zLlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmxlQ2VsbEdyaWQoKTogdm9pZCB7XG4gICAgY29uc3QgZnVsbEdyaWQgPSB0aGlzLmdldEFjdGl2ZUNlbGxHcmlkKCk7XG4gICAgXG4gICAgLy8gSGFuZGxlIGVtcHR5IGdyaWRcbiAgICBpZiAoIWZ1bGxHcmlkIHx8IGZ1bGxHcmlkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy52aXNpYmxlQ2VsbEdyaWQgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gQnVpbGQgYSBtYXAgb2YgY29sdW1uS2V5IOKGkiBjZWxsSW5kZXggZm9yIHRoZSBjdXJyZW50IGdyaWQgc3RydWN0dXJlXG4gICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gZmluZCBjZWxscyBieSBjb2x1bW4ga2V5IHJlZ2FyZGxlc3Mgb2YgdGhlaXIgY3VycmVudCBwb3NpdGlvblxuICAgIGNvbnN0IGtleVRvSW5kZXhNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGZ1bGxHcmlkWzBdPy5mb3JFYWNoKChjZWxsLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGNlbGwpIHtcbiAgICAgICAgY29uc3QgY29sdW1uQ29uZmlnID0gY2VsbC5nZXRDb2x1bW5Db25maWcoKTtcbiAgICAgICAga2V5VG9JbmRleE1hcC5zZXQoY29sdW1uQ29uZmlnLmtleSwgaW5kZXgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8vIFJlb3JkZXIgY2VsbHMgdG8gbWF0Y2ggdGhlIHZpc2libGVDb2x1bW5zIG9yZGVyXG4gICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2hlbiBjb2x1bW5zIGFyZSBtb3ZlZCwgdGhlIGNlbGwgZGF0YSBmb2xsb3dzXG4gICAgdGhpcy52aXNpYmxlQ2VsbEdyaWQgPSBmdWxsR3JpZC5tYXAocm93ID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnZpc2libGVDb2x1bW5zXG4gICAgICAgIC5tYXAoY29sID0+IHtcbiAgICAgICAgICBjb25zdCBjZWxsSW5kZXggPSBrZXlUb0luZGV4TWFwLmdldChjb2wua2V5KTtcbiAgICAgICAgICByZXR1cm4gY2VsbEluZGV4ICE9PSB1bmRlZmluZWQgPyByb3dbY2VsbEluZGV4XSA6IHVuZGVmaW5lZDtcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcigoY2VsbCk6IGNlbGwgaXMgQ2VsbDxhbnk+ID0+IGNlbGwgIT09IHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSB2aXNpYmxlIGNvbHVtbnMgYmFzZWQgb24gY3VycmVudCB2aXNpYmlsaXR5XG4gICAqIENhbGxlZCBvbmx5IHdoZW4gdmlzaWJpbGl0eSBhY3R1YWxseSBjaGFuZ2VzXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVZpc2libGVDb2x1bW5zKCk6IHZvaWQge1xuICAgIGNvbnN0IGFsbENvbHVtbnMgPSB0aGlzLmdldEFjdGl2ZUNvbHVtbnMoKTtcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zID0gYWxsQ29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC52aXNpYmxlICE9PSBmYWxzZSk7XG4gICAgXG4gICAgLy8gUmVjYWxjdWxhdGUgc3RpY2t5IG9mZnNldHMgZm9yIHZpc2libGUgY29sdW1ucyBvbmx5XG4gICAgdGhpcy5yZWNhbGN1bGF0ZVZpc2libGVTdGlja3lPZmZzZXRzKHRoaXMudmlzaWJsZUNvbHVtbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBib3RoIHZpc2libGUgY29sdW1ucyBhbmQgY2VsbCBncmlkXG4gICAqIENhbGwgdGhpcyB3aGVuZXZlciBkYXRhIG9yIHZpc2liaWxpdHkgY2hhbmdlc1xuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmxlRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVDb2x1bW5zKCk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlQ2VsbEdyaWQoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBhY3RpdmUgY29sdW1ucyAoZnJvbSBjb25maWcgb3IgbGVnYWN5IGlucHV0KVxuICAgKi9cbiAgZ2V0QWN0aXZlQ29sdW1ucygpOiBDb2x1bW5Db25maWc8YW55PltdIHtcbiAgICByZXR1cm4gdGhpcy5tZXJnZWRDb25maWcuY29sdW1ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdmlzaWJsZSBjb2x1bW5zIChmaWx0ZXJlZCBieSB2aXNpYmlsaXR5IHByb3BlcnR5KVxuICAgKiBBbHNvIHJlY2FsY3VsYXRlcyBzdGlja3kgb2Zmc2V0cyBiYXNlZCBvbiB2aXNpYmxlIGNvbHVtbnMgb25seVxuICAgKi9cbiAgZ2V0VmlzaWJsZUNvbHVtbnMoKTogQ29sdW1uQ29uZmlnPGFueT5bXSB7XG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuZ2V0QWN0aXZlQ29sdW1ucygpO1xuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gYWxsQ29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC52aXNpYmxlICE9PSBmYWxzZSk7IC8vIERlZmF1bHQgdG8gdHJ1ZSBpZiBub3Qgc2V0XG4gICAgXG4gICAgLy8gUmVjYWxjdWxhdGUgc3RpY2t5IG9mZnNldHMgZm9yIHZpc2libGUgY29sdW1ucyBvbmx5XG4gICAgdGhpcy5yZWNhbGN1bGF0ZVZpc2libGVTdGlja3lPZmZzZXRzKHZpc2libGVDb2x1bW5zKTtcbiAgICBcbiAgICByZXR1cm4gdmlzaWJsZUNvbHVtbnM7XG4gIH1cblxuICAvKipcbiAgICogUmVjYWxjdWxhdGUgc3RpY2t5IG9mZnNldHMgYmFzZWQgb24gdmlzaWJsZSBjb2x1bW5zIG9ubHlcbiAgICogVGhpcyBlbnN1cmVzIGNvcnJlY3QgcG9zaXRpb25pbmcgd2hlbiBjb2x1bW5zIGFyZSBoaWRkZW5cbiAgICovXG4gIHByaXZhdGUgcmVjYWxjdWxhdGVWaXNpYmxlU3RpY2t5T2Zmc2V0cyh2aXNpYmxlQ29sdW1uczogQ29sdW1uQ29uZmlnPGFueT5bXSk6IHZvaWQge1xuICAgIC8vIENhbGN1bGF0ZSBsZWZ0IHN0aWNreSBvZmZzZXRzXG4gICAgLy8gQWNjb3VudCBmb3Igcm93IG51bWJlciBjb2x1bW4gd2lkdGggaWYgc2hvd25cbiAgICBsZXQgbGVmdE9mZnNldCA9IHRoaXMubWVyZ2VkQ29uZmlnLnNob3dSb3dOdW1iZXIgPyAzMCA6IDA7XG4gICAgdmlzaWJsZUNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgaWYgKGNvbC5zdGlja3kgPT09ICdsZWZ0Jykge1xuICAgICAgICAoY29sIGFzIGFueSkuc3RpY2t5T2Zmc2V0ID0gbGVmdE9mZnNldDtcbiAgICAgICAgbGVmdE9mZnNldCArPSAoY29sLndpZHRoIGFzIG51bWJlcikgfHwgMTAwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHJpZ2h0IHN0aWNreSBvZmZzZXRzXG4gICAgbGV0IHJpZ2h0T2Zmc2V0ID0gMDtcbiAgICBmb3IgKGxldCBpID0gdmlzaWJsZUNvbHVtbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGNvbCA9IHZpc2libGVDb2x1bW5zW2ldO1xuICAgICAgaWYgKGNvbC5zdGlja3kgPT09ICdyaWdodCcpIHtcbiAgICAgICAgKGNvbCBhcyBhbnkpLnN0aWNreU9mZnNldCA9IHJpZ2h0T2Zmc2V0O1xuICAgICAgICByaWdodE9mZnNldCArPSAoY29sLndpZHRoIGFzIG51bWJlcikgfHwgMTAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ2VsbENoYW5nZShldmVudDogQ2VsbENoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jZWxsQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25Db2x1bW5SZXNpemVkKGV2ZW50OiBDb2x1bW5SZXNpemVFdmVudCk6IHZvaWQge1xuICAgIC8vIFJlY2FsY3VsYXRlIHN0aWNreSBvZmZzZXRzIGFmdGVyIHJlc2l6ZVxuICAgIGNvbnN0IHJvd051bWJlcldpZHRoID0gdGhpcy5tZXJnZWRDb25maWcuc2hvd1Jvd051bWJlciA/IDMwIDogMDtcbiAgICBjb25zdCBzZXR0aW5nc0NvbHVtbldpZHRoID0gdGhpcy5oYXNSb3dBY3Rpb25zKCkgPyAzMiA6IDA7XG4gICAgdGhpcy5nZXRBY3RpdmVUYWJsZVN0YXRlKCkuY2FsY3VsYXRlU3RpY2t5T2Zmc2V0cyhyb3dOdW1iZXJXaWR0aCwgc2V0dGluZ3NDb2x1bW5XaWR0aCk7XG4gICAgXG4gICAgLy8gRW1pdCB0byBwYXJlbnRcbiAgICB0aGlzLmNvbHVtblJlc2l6ZWQuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkNvbHVtbk1vdmVkKGV2ZW50OiB7Y29sdW1uS2V5OiBzdHJpbmcsIGRpcmVjdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0J30pOiB2b2lkIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRBY3RpdmVDb2x1bW5zKCk7XG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gY29sdW1ucy5maW5kSW5kZXgoYyA9PiBjLmtleSA9PT0gZXZlbnQuY29sdW1uS2V5KTtcbiAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkgcmV0dXJuO1xuICAgIFxuICAgIC8vIENhbGN1bGF0ZSB0YXJnZXQgaW5kZXhcbiAgICBjb25zdCB0YXJnZXRJbmRleCA9IGV2ZW50LmRpcmVjdGlvbiA9PT0gJ2xlZnQnIFxuICAgICAgPyBjdXJyZW50SW5kZXggLSAxIFxuICAgICAgOiBjdXJyZW50SW5kZXggKyAxO1xuICAgIFxuICAgIC8vIENoZWNrIGJvdW5kc1xuICAgIGlmICh0YXJnZXRJbmRleCA8IDAgfHwgdGFyZ2V0SW5kZXggPj0gY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gU3dhcCBjb2x1bW5zXG4gICAgW2NvbHVtbnNbY3VycmVudEluZGV4XSwgY29sdW1uc1t0YXJnZXRJbmRleF1dID0gXG4gICAgW2NvbHVtbnNbdGFyZ2V0SW5kZXhdLCBjb2x1bW5zW2N1cnJlbnRJbmRleF1dO1xuICAgIFxuICAgIC8vIFVwZGF0ZSBUYWJsZVN0YXRlIHdpdGggbmV3IGNvbHVtbiBvcmRlclxuICAgIHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpLnVwZGF0ZUNvbHVtbnMoY29sdW1ucyk7XG4gICAgdGhpcy5jb2x1bW5Nb3ZlZC5lbWl0KHtcbiAgICAgIGNvbHVtbktleTogZXZlbnQuY29sdW1uS2V5LFxuICAgICAgZGlyZWN0aW9uOiBldmVudC5kaXJlY3Rpb24sXG4gICAgICBvbGRJbmRleDogY3VycmVudEluZGV4LFxuICAgICAgbmV3SW5kZXg6IHRhcmdldEluZGV4LFxuICAgICAgY29sdW1uOiBjb2x1bW5zW2N1cnJlbnRJbmRleF1cbiAgICB9KTtcbiAgICAvLyBGb3JjZSB2aXJ0dWFsIHNjcm9sbCB0byByZS1yZW5kZXIgYnkgcmUtZW1pdHRpbmcgY3VycmVudCBzdGF0ZVxuICAgIC8vIFRoaXMgZW5zdXJlcyB2aXNpYmxlUm93cyQgcGlja3MgdXAgdGhlIHVwZGF0ZWQgdmlzaWJsZUNlbGxHcmlkXG4gICAgaWYgKHRoaXMuaXNWaXJ0dWFsU2Nyb2xsRW5hYmxlZCgpKSB7XG4gICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLnZpcnR1YWxTY3JvbGxTdGF0ZSQudmFsdWU7XG4gICAgICBpZiAoY3VycmVudFN0YXRlKSB7XG4gICAgICAgIHRoaXMudmlydHVhbFNjcm9sbFN0YXRlJC5uZXh0KHsuLi5jdXJyZW50U3RhdGV9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW92ZSBjb2x1bW4gdG8gcG9zaXRpb24ganVzdCBiZWZvcmUgcmlnaHQgc3RpY2t5IGNvbHVtbnMgKHVzZWQgd2hlbiBwaW5uaW5nIHJpZ2h0KVxuICAgKi9cbiAgcHJpdmF0ZSBtb3ZlQ29sdW1uVG9FbmQoY29sdW1uS2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRBY3RpdmVDb2x1bW5zKCk7XG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gY29sdW1ucy5maW5kSW5kZXgoYyA9PiBjLmtleSA9PT0gY29sdW1uS2V5KTtcbiAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkgcmV0dXJuO1xuICAgIFxuICAgIC8vIEZpbmQgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCByaWdodC1zdGlja3kgY29sdW1uXG4gICAgY29uc3QgZmlyc3RSaWdodFN0aWNreUluZGV4ID0gY29sdW1ucy5maW5kSW5kZXgoYyA9PiBjLnN0aWNreSA9PT0gJ3JpZ2h0Jyk7XG4gICAgXG4gICAgLy8gRGV0ZXJtaW5lIHRhcmdldCBpbmRleDoganVzdCBiZWZvcmUgZmlyc3QgcmlnaHQtc3RpY2t5LCBvciBhdCBlbmQgaWYgbm9uZSBleGlzdFxuICAgIGNvbnN0IHRhcmdldEluZGV4ID0gZmlyc3RSaWdodFN0aWNreUluZGV4ICE9PSAtMSA/IGZpcnN0UmlnaHRTdGlja3lJbmRleCA6IGNvbHVtbnMubGVuZ3RoO1xuICAgIFxuICAgIC8vIElmIGFscmVhZHkgYXQgdGFyZ2V0IHBvc2l0aW9uLCBubyBuZWVkIHRvIG1vdmVcbiAgICBpZiAoY3VycmVudEluZGV4ID09PSB0YXJnZXRJbmRleCB8fCBjdXJyZW50SW5kZXggPT09IHRhcmdldEluZGV4IC0gMSkgcmV0dXJuO1xuICAgIFxuICAgIC8vIFJlbW92ZSBjb2x1bW4gZnJvbSBjdXJyZW50IHBvc2l0aW9uXG4gICAgY29uc3QgW2NvbHVtbl0gPSBjb2x1bW5zLnNwbGljZShjdXJyZW50SW5kZXgsIDEpO1xuICAgIFxuICAgIC8vIEFkanVzdCB0YXJnZXQgaW5kZXggaWYgd2UgcmVtb3ZlZCBhbiBlbGVtZW50IGJlZm9yZSBpdFxuICAgIGNvbnN0IGFkanVzdGVkVGFyZ2V0SW5kZXggPSBjdXJyZW50SW5kZXggPCB0YXJnZXRJbmRleCA/IHRhcmdldEluZGV4IC0gMSA6IHRhcmdldEluZGV4O1xuICAgIFxuICAgIC8vIEluc2VydCBhdCB0YXJnZXQgcG9zaXRpb24gKGJlZm9yZSBmaXJzdCByaWdodC1zdGlja3kgY29sdW1uLCBvciBhdCBlbmQpXG4gICAgY29sdW1ucy5zcGxpY2UoYWRqdXN0ZWRUYXJnZXRJbmRleCwgMCwgY29sdW1uKTtcbiAgICBcbiAgICAvLyBVcGRhdGUgVGFibGVTdGF0ZSB3aXRoIG5ldyBjb2x1bW4gb3JkZXJcbiAgICB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKS51cGRhdGVDb2x1bW5zKGNvbHVtbnMpO1xuICAgIFxuICAgIC8vIEZvcmNlIHZpcnR1YWwgc2Nyb2xsIHRvIHJlLXJlbmRlclxuICAgIGlmICh0aGlzLmlzVmlydHVhbFNjcm9sbEVuYWJsZWQoKSkge1xuICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gdGhpcy52aXJ0dWFsU2Nyb2xsU3RhdGUkLnZhbHVlO1xuICAgICAgaWYgKGN1cnJlbnRTdGF0ZSkge1xuICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxTdGF0ZSQubmV4dCh7Li4uY3VycmVudFN0YXRlfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdW11bGF0aXZlIGxlZnQgb2Zmc2V0IGZvciBhIHN0aWNreSBjb2x1bW4gb24gdGhlIGxlZnQgc2lkZVxuICAgKi9cbiAgZ2V0U3RpY2t5TGVmdE9mZnNldChjb2x1bW5LZXk6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0QWN0aXZlQ29sdW1ucygpO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHVtbnMpIHtcbiAgICAgIGlmIChjb2wua2V5ID09PSBjb2x1bW5LZXkpIGJyZWFrO1xuICAgICAgaWYgKGNvbC5zdGlja3kgPT09ICdsZWZ0Jykge1xuICAgICAgICBvZmZzZXQgKz0gKGNvbC53aWR0aCBhcyBudW1iZXIpIHx8IDEwMDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VtdWxhdGl2ZSByaWdodCBvZmZzZXQgZm9yIGEgc3RpY2t5IGNvbHVtbiBvbiB0aGUgcmlnaHQgc2lkZVxuICAgKi9cbiAgZ2V0U3RpY2t5UmlnaHRPZmZzZXQoY29sdW1uS2V5OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldEFjdGl2ZUNvbHVtbnMoKTtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBjb25zdCBjb2xJbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KGMgPT4gYy5rZXkgPT09IGNvbHVtbktleSk7XG4gICAgZm9yIChsZXQgaSA9IGNvbEluZGV4ICsgMTsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvbCA9IGNvbHVtbnNbaV07XG4gICAgICBpZiAoY29sLnN0aWNreSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICBvZmZzZXQgKz0gKGNvbC53aWR0aCBhcyBudW1iZXIpIHx8IDEwMDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIHRvcCBwYWdpbmF0aW9uIHNob3VsZCBiZSBzaG93blxuICAgKi9cbiAgc2hvd1RvcFBhZ2luYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VkQ29uZmlnLnBhZ2luYXRpb24/LmVuYWJsZWQgPT0gdHJ1ZSAmJlxuICAgICAgICAgICB0aGlzLm1lcmdlZENvbmZpZy5wYWdpbmF0aW9uPy5zaG93VG9wQ29udHJvbHMgPT09IHRydWU7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBib3R0b20gcGFnaW5hdGlvbiBzaG91bGQgYmUgc2hvd25cbiAgICovXG4gIHNob3dCb3R0b21QYWdpbmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1lcmdlZENvbmZpZy5wYWdpbmF0aW9uPy5lbmFibGVkID09IHRydWUgJiZcbiAgICAgICAgICAgKHRoaXMubWVyZ2VkQ29uZmlnLnBhZ2luYXRpb24/LnNob3dCb3R0b21Db250cm9scyA/PyB0cnVlKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRhYmxlIGNvbmZpZ3VyYXRpb25cbiAgICogQHBhcmFtIGNvbmZpZyBUYWJsZSBjb25maWd1cmF0aW9uIHRvIHZhbGlkYXRlXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlQ29uZmlndXJhdGlvbihjb25maWc6IFRhYmxlQ29uZmlnKTogdm9pZCB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zY2hlbWFWYWxpZGF0b3IudmFsaWRhdGUoY29uZmlnLCB0cnVlLCBmYWxzZSk7IC8vIERpc2FibGUgbG9nZ2luZyBoZXJlLCB3ZSdsbCBsb2cgbWFudWFsbHkgd2l0aCBjb250ZXh0XG4gICAgXG4gICAgaWYgKCFyZXN1bHQudmFsaWQgJiYgcmVzdWx0LmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBFbWl0IHZhbGlkYXRpb24gZXJyb3JzXG4gICAgICB0aGlzLmNvbmZpZ1ZhbGlkYXRpb25FcnJvcnMuZW1pdChyZXN1bHQuZXJyb3JzKTtcbiAgICAgIFxuICAgICAgLy8gTG9nIHZhbGlkYXRpb24gZXJyb3JzIHdpdGggY29udGV4dFxuICAgICAgY29uc3QgY29uZmlnU25pcHBldCA9IEpTT04uc3RyaW5naWZ5KGNvbmZpZywgbnVsbCwgMikuc3Vic3RyaW5nKDAsIDUwMCk7IC8vIEZpcnN0IDUwMCBjaGFycyBvZiBjb25maWdcbiAgICAgIHRoaXMubG9nZ2VyLmxvZ1ZhbGlkYXRpb25FcnJvcnMocmVzdWx0LmVycm9ycywgJ3JlbmRlcmVyJywge1xuICAgICAgICBjb25maWdTbmlwcGV0OiBjb25maWdTbmlwcGV0XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgLy8gTG9nIHdhcm5pbmdzIHRvIGNvbnNvbGUgKGRvbid0IGJyZWFrIHJlbmRlcmluZylcbiAgICAgIGNvbnNvbGUud2FybignU21hcnQgVGFibGU6IENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBlcnJvcnMgZGV0ZWN0ZWQ6JywgcmVzdWx0LmVycm9ycyk7XG4gICAgICByZXN1bHQuZXJyb3JzLmZvckVhY2goZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLndhcm4oYCAgLSAke2Vycm9yLmZpZWxkIHx8IGVycm9yLnBhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgYWRkIGNvbHVtbiBidXR0b24gY2xpY2tcbiAgICovXG4gIG9uQWRkQ29sdW1uQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5zaG93Q29sdW1uTW9kYWwgPSB0cnVlO1xuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIGNvbHVtbiBjcmVhdGVkIGZyb20gbW9kYWxcbiAgICovXG4gIG9uQ29sdW1uQ3JlYXRlZChjb2x1bW46IENvbHVtbkNvbmZpZyk6IHZvaWQge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldEFjdGl2ZUNvbHVtbnMoKTtcbiAgICBjb25zdCBhZGRFdmVudDogQ29sdW1uQWRkRXZlbnQgPSB7XG4gICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgIGluZGV4OiBjb2x1bW5zLmxlbmd0aCxcbiAgICAgIHRvdGFsQ29sdW1uczogY29sdW1ucy5sZW5ndGggKyAxXG4gICAgfTtcbiAgICBcbiAgICAvLyBFbWl0IHRoZSBuZXcgY29sdW1uIHRvIHBhcmVudCBjb21wb25lbnRcbiAgICB0aGlzLmNvbHVtbkFkZGVkLmVtaXQoYWRkRXZlbnQpO1xuICAgIFxuICAgIC8vIENsb3NlIHRoZSBtb2RhbFxuICAgIHRoaXMuc2hvd0NvbHVtbk1vZGFsID0gZmFsc2U7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgbW9kYWwgY2FuY2VsbGVkXG4gICAqL1xuICBvbk1vZGFsQ2FuY2VsbGVkKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0NvbHVtbk1vZGFsID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdmlydHVhbCBzY3JvbGwgaXMgZW5hYmxlZFxuICAgKi9cbiAgaXNWaXJ0dWFsU2Nyb2xsRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tZXJnZWRDb25maWcuZGlzcGxheT8udmlydHVhbFNjcm9sbD8uZW5hYmxlZCA/PyBmYWxzZTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGNvbHVtbiBpcyB0aGUgZmlyc3Qgc3RpY2t5LXJpZ2h0IGNvbHVtbiAoZm9yIHNoYWRvdyBzdHlsaW5nKVxuICAgKi9cbiAgaXNGaXJzdFN0aWNreVJpZ2h0KGNvbHVtbktleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3RpY2t5UmlnaHRDb2x1bW5zID0gdGhpcy52aXNpYmxlQ29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5zdGlja3kgPT09ICdyaWdodCcgJiYgIWNvbC5rZXkuaW5jbHVkZXMoJ3NldHRpbmdzJykpO1xuICAgIHJldHVybiBzdGlja3lSaWdodENvbHVtbnMubGVuZ3RoID4gMCAmJiBzdGlja3lSaWdodENvbHVtbnNbMF0ua2V5ID09PSBjb2x1bW5LZXk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgdmlydHVhbCBzY3JvbGwgaXRlbSBzaXplXG4gICAqL1xuICBnZXRWaXJ0dWFsU2Nyb2xsSXRlbVNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5tZXJnZWRDb25maWcuZGlzcGxheT8udmlydHVhbFNjcm9sbD8uaXRlbVNpemUgPz8gNDg7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgdmlld3BvcnQgaGVpZ2h0XG4gICAqL1xuICBnZXRWaXJ0dWFsU2Nyb2xsVmlld3BvcnRIZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5tZXJnZWRDb25maWcuZGlzcGxheT8udmlydHVhbFNjcm9sbD8udmlld3BvcnRIZWlnaHQgPz8gNjAwO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGJ1ZmZlciBzaXplXG4gICAqL1xuICBnZXRWaXJ0dWFsU2Nyb2xsQnVmZmVyU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm1lcmdlZENvbmZpZy5kaXNwbGF5Py52aXJ0dWFsU2Nyb2xsPy5idWZmZXJTaXplID8/IDU7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHZpcnR1YWwgc2Nyb2xsIHN0YXRlXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVWaXJ0dWFsU2Nyb2xsKCk6IHZvaWQge1xuICAgIGNvbnN0IG5ld1N0YXRlID0gdGhpcy52aXJ0dWFsU2Nyb2xsU2VydmljZS5jYWxjdWxhdGVWaXNpYmxlUmFuZ2Uoe1xuICAgICAgc2Nyb2xsVG9wOiAwLFxuICAgICAgdmlld3BvcnRIZWlnaHQ6IHRoaXMuZ2V0VmlydHVhbFNjcm9sbFZpZXdwb3J0SGVpZ2h0KCksXG4gICAgICB0b3RhbEl0ZW1zOiB0aGlzLnZpc2libGVDZWxsR3JpZC5sZW5ndGgsXG4gICAgICBpdGVtU2l6ZTogdGhpcy5nZXRWaXJ0dWFsU2Nyb2xsSXRlbVNpemUoKSxcbiAgICAgIGJ1ZmZlclNpemU6IHRoaXMuZ2V0VmlydHVhbFNjcm9sbEJ1ZmZlclNpemUoKVxuICAgIH0pO1xuICAgIFxuICAgIHRoaXMudmlydHVhbFNjcm9sbFN0YXRlJC5uZXh0KG5ld1N0YXRlKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFNldHVwIHNjcm9sbCBldmVudCBsaXN0ZW5lclxuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cFZpcnR1YWxTY3JvbGxMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2Nyb2xsVmlld3BvcnQpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5zY3JvbGxWaWV3cG9ydC5uYXRpdmVFbGVtZW50O1xuICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyID0gZWxlbWVudDtcbiAgICBcbiAgICB0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbiA9IHRoaXMudmlydHVhbFNjcm9sbFNlcnZpY2VcbiAgICAgIC5jcmVhdGVTY3JvbGxPYnNlcnZhYmxlKGVsZW1lbnQpXG4gICAgICAuc3Vic2NyaWJlKHNjcm9sbFRvcCA9PiB0aGlzLm9uVmlydHVhbFNjcm9sbChzY3JvbGxUb3ApKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSB2aXJ0dWFsIHNjcm9sbCBldmVudFxuICAgKi9cbiAgcHJpdmF0ZSBvblZpcnR1YWxTY3JvbGwoc2Nyb2xsVG9wOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHRoaXMudmlydHVhbFNjcm9sbFNlcnZpY2UuY2FsY3VsYXRlVmlzaWJsZVJhbmdlKHtcbiAgICAgIHNjcm9sbFRvcCxcbiAgICAgIHZpZXdwb3J0SGVpZ2h0OiB0aGlzLmdldFZpcnR1YWxTY3JvbGxWaWV3cG9ydEhlaWdodCgpLFxuICAgICAgdG90YWxJdGVtczogdGhpcy52aXNpYmxlQ2VsbEdyaWQubGVuZ3RoLFxuICAgICAgaXRlbVNpemU6IHRoaXMuZ2V0VmlydHVhbFNjcm9sbEl0ZW1TaXplKCksXG4gICAgICBidWZmZXJTaXplOiB0aGlzLmdldFZpcnR1YWxTY3JvbGxCdWZmZXJTaXplKClcbiAgICB9KTtcbiAgICBcbiAgICB0aGlzLnZpcnR1YWxTY3JvbGxTdGF0ZSQubmV4dChuZXdTdGF0ZSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgcm93IGluZGV4IGZvciB0cmFja2luZ1xuICAgKi9cbiAgZ2V0QWJzb2x1dGVSb3dJbmRleChyZWxhdGl2ZUluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMudmlydHVhbFNjcm9sbFN0YXRlJC52YWx1ZTtcbiAgICBpZiAoIWN1cnJlbnRTdGF0ZSkgcmV0dXJuIHJlbGF0aXZlSW5kZXg7XG4gICAgcmV0dXJuIGN1cnJlbnRTdGF0ZS5zdGFydEluZGV4ICsgcmVsYXRpdmVJbmRleDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFRyYWNrQnkgZnVuY3Rpb24gZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuICAgKi9cbiAgdHJhY2tCeVJvd0luZGV4ID0gKGluZGV4OiBudW1iZXIsIHJvdzogQ2VsbDxhbnk+W10pOiBudW1iZXIgPT4ge1xuICAgIHJldHVybiB0aGlzLmdldEFic29sdXRlUm93SW5kZXgoaW5kZXgpO1xuICB9XG4gIFxuICAvKipcbiAgICogU2Nyb2xsIHRvIHNwZWNpZmljIHJvdyBwcm9ncmFtbWF0aWNhbGx5XG4gICAqL1xuICBzY3JvbGxUb1JvdyhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNjcm9sbENvbnRhaW5lciB8fCAhdGhpcy5pc1ZpcnR1YWxTY3JvbGxFbmFibGVkKCkpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCBzY3JvbGxUb3AgPSBpbmRleCAqIHRoaXMuZ2V0VmlydHVhbFNjcm9sbEl0ZW1TaXplKCk7XG4gICAgdGhpcy5zY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgcm93IGFjdGlvbnMgYXJlIGVuYWJsZWRcbiAgICovXG4gIGhhc1Jvd0FjdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMubWVyZ2VkQ29uZmlnLmZlYXR1cmVzPy5yb3dNYW5hZ2VtZW50Py5hY3Rpb25zICYmIFxuICAgICAgICAgICAgICB0aGlzLm1lcmdlZENvbmZpZy5mZWF0dXJlcy5yb3dNYW5hZ2VtZW50LmFjdGlvbnMubGVuZ3RoID4gMCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgcm93IGFjdGlvbnMgZnJvbSBjb25maWdcbiAgICovXG4gIGdldFJvd0FjdGlvbnMoKTogUm93QWN0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLm1lcmdlZENvbmZpZy5mZWF0dXJlcz8ucm93TWFuYWdlbWVudD8uYWN0aW9ucyB8fCBbXTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCByb3cgZGF0YSBmcm9tIGNlbGwgZ3JpZFxuICAgKi9cbiAgZ2V0Um93RGF0YShyb3dJbmRleDogbnVtYmVyKTogYW55IHtcbiAgICBjb25zdCBjZWxsR3JpZCA9IHRoaXMuZ2V0QWN0aXZlQ2VsbEdyaWQoKTtcbiAgICBpZiAoIWNlbGxHcmlkIHx8IHJvd0luZGV4IDwgMCB8fCByb3dJbmRleCA+PSBjZWxsR3JpZC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCByb3cgPSBjZWxsR3JpZFtyb3dJbmRleF07XG4gICAgaWYgKCFyb3cgfHwgcm93Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIFxuICAgIC8vIEdldCByYXcgZGF0YSBmcm9tIGZpcnN0IGNlbGwgKGFsbCBjZWxscyBpbiBhIHJvdyBzaGFyZSB0aGUgc2FtZSByb3dEYXRhKVxuICAgIHJldHVybiByb3dbMF0/LmdldFJvd0RhdGEoKSB8fCBudWxsO1xuICB9XG4gIFxuICAvKipcbiAgICogT3BlbiByb3cgYWN0aW9ucyBkcm9wZG93blxuICAgKi9cbiAgb3BlblJvd0FjdGlvbnNEcm9wZG93bihldmVudDogTW91c2VFdmVudCwgcm93RGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgXG4gICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uIChiZWxvdyB0aGUgYnV0dG9uIGJ5IGRlZmF1bHQpXG4gICAgY29uc3QgcG9zaXRpb24gPSB7XG4gICAgICB4OiByZWN0LmxlZnQsXG4gICAgICB5OiByZWN0LmJvdHRvbSArIDQgLy8gNHB4IGdhcFxuICAgIH07XG4gICAgXG4gICAgLy8gQ3JlYXRlIGNvbnRleHRcbiAgICBjb25zdCBjb250ZXh0OiBSb3dBY3Rpb25Db250ZXh0ID0ge1xuICAgICAgcm93RGF0YSxcbiAgICAgIHJvd0luZGV4LFxuICAgICAgYWN0aW9uczogdGhpcy5nZXRSb3dBY3Rpb25zKClcbiAgICB9O1xuICAgIFxuICAgIC8vIFVwZGF0ZSBkcm9wZG93biBzdGF0ZVxuICAgIHRoaXMuZHJvcGRvd25TdGF0ZSA9IHtcbiAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgIHBvc2l0aW9uLFxuICAgICAgY29udGV4dFxuICAgIH07XG4gICAgXG4gICAgLy8gRGlzYWJsZSBib2R5IHNjcm9sbFxuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICBcbiAgICAvLyBJZiB2aXJ0dWFsIHNjcm9sbCBpcyBlbmFibGVkLCBhZGQgc2Nyb2xsIGxpc3RlbmVyIHRvIGNsb3NlIGRyb3Bkb3duXG4gICAgaWYgKHRoaXMuaXNWaXJ0dWFsU2Nyb2xsRW5hYmxlZCgpICYmIHRoaXMuc2Nyb2xsQ29udGFpbmVyKSB7XG4gICAgICBjb25zdCBzY3JvbGxMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZVJvd0FjdGlvbnNEcm9wZG93bigpO1xuICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lcj8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc2Nyb2xsTGlzdGVuZXIpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHNjcm9sbExpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogQ2xvc2Ugcm93IGFjdGlvbnMgZHJvcGRvd25cbiAgICovXG4gIGNsb3NlUm93QWN0aW9uc0Ryb3Bkb3duKCk6IHZvaWQge1xuICAgIHRoaXMuZHJvcGRvd25TdGF0ZSA9IHtcbiAgICAgIGlzT3BlbjogZmFsc2UsXG4gICAgICBwb3NpdGlvbjogeyB4OiAwLCB5OiAwIH0sXG4gICAgICBjb250ZXh0OiBudWxsXG4gICAgfTtcbiAgICBcbiAgICAvLyBSZS1lbmFibGUgYm9keSBzY3JvbGxcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJyc7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgcm93IGFjdGlvbiBjbGlja2VkXG4gICAqL1xuICBvblJvd0FjdGlvbkNsaWNrZWQoZXZlbnQ6IFJvd0FjdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgLy8gRXhlY3V0ZSBhY3Rpb24gY2FsbGJhY2sgaWYgcHJvdmlkZWRcbiAgICBpZiAoZXZlbnQuYWN0aW9uLmFjdGlvbikge1xuICAgICAgZXZlbnQuYWN0aW9uLmFjdGlvbihldmVudC5yb3dEYXRhLCBldmVudC5yb3dJbmRleCk7XG4gICAgfVxuICAgIFxuICAgIC8vIEVtaXQgZXZlbnQgdG8gcGFyZW50XG4gICAgdGhpcy5yb3dBY3Rpb24uZW1pdChldmVudCk7XG4gICAgXG4gICAgLy8gQ2xvc2UgZHJvcGRvd25cbiAgICB0aGlzLmNsb3NlUm93QWN0aW9uc0Ryb3Bkb3duKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIENPTFVNTiBNRU5VIEFDVElPTlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPcGVuIGNvbHVtbiBtZW51IGRyb3Bkb3duXG4gICAqL1xuICBvcGVuQ29sdW1uTWVudShldmVudDogTW91c2VFdmVudCwgY29sdW1uOiBDb2x1bW5Db25maWc8YW55PiwgY29sdW1uSW5kZXg6IG51bWJlciwgaXNGaXJzdDogYm9vbGVhbiwgaXNMYXN0OiBib29sZWFuKTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgcmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIC8vIENhbGN1bGF0ZSBwb3NpdGlvbiAoYmVsb3cgdGhlIGJ1dHRvbiBieSBkZWZhdWx0KVxuICAgIGNvbnN0IHBvc2l0aW9uID0ge1xuICAgICAgeDogcmVjdC5sZWZ0LFxuICAgICAgeTogcmVjdC5ib3R0b20gKyA0IC8vIDRweCBnYXBcbiAgICB9O1xuXG4gICAgLy8gQ3JlYXRlIGNvbnRleHRcbiAgICBjb25zdCBjb250ZXh0OiBDb2x1bW5BY3Rpb25Db250ZXh0ID0ge1xuICAgICAgY29sdW1uLFxuICAgICAgY29sdW1uSW5kZXgsXG4gICAgICBpc0ZpcnN0Q29sdW1uOiBpc0ZpcnN0LFxuICAgICAgaXNMYXN0Q29sdW1uOiBpc0xhc3QsXG4gICAgICB0YWJsZVN0YXRlOiB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKSxcbiAgICAgIGFjdGlvbnM6IHRoaXMuZ2V0Q29sdW1uQWN0aW9ucyhjb2x1bW4sIGNvbHVtbkluZGV4LCBpc0ZpcnN0LCBpc0xhc3QpXG4gICAgfTtcblxuICAgIC8vIFVwZGF0ZSBjb2x1bW4gbWVudSBzdGF0ZVxuICAgIHRoaXMuY29sdW1uTWVudVN0YXRlID0ge1xuICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgcG9zaXRpb24sXG4gICAgICBjb250ZXh0XG4gICAgfTtcblxuICAgIC8vIERpc2FibGUgYm9keSBzY3JvbGxcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG5cbiAgICAvLyBJZiB2aXJ0dWFsIHNjcm9sbCBpcyBlbmFibGVkLCBhZGQgc2Nyb2xsIGxpc3RlbmVyIHRvIGNsb3NlIGRyb3Bkb3duXG4gICAgaWYgKHRoaXMuaXNWaXJ0dWFsU2Nyb2xsRW5hYmxlZCgpICYmIHRoaXMuc2Nyb2xsQ29udGFpbmVyKSB7XG4gICAgICBjb25zdCBzY3JvbGxMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZUNvbHVtbk1lbnUoKTtcbiAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXI/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHNjcm9sbExpc3RlbmVyKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzY3JvbGxMaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSBjb2x1bW4gbWVudSBkcm9wZG93blxuICAgKi9cbiAgY2xvc2VDb2x1bW5NZW51KCk6IHZvaWQge1xuICAgIHRoaXMuY29sdW1uTWVudVN0YXRlID0ge1xuICAgICAgaXNPcGVuOiBmYWxzZSxcbiAgICAgIHBvc2l0aW9uOiB7IHg6IDAsIHk6IDAgfSxcbiAgICAgIGNvbnRleHQ6IG51bGxcbiAgICB9O1xuXG4gICAgLy8gUmUtZW5hYmxlIGJvZHkgc2Nyb2xsXG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjb2x1bW4gYWN0aW9uIGNsaWNrZWRcbiAgICovXG4gIG9uQ29sdW1uQWN0aW9uQ2xpY2tlZChldmVudDogQ29sdW1uQWN0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBFeGVjdXRlIGFjdGlvbiBjYWxsYmFjayBpZiBwcm92aWRlZFxuICAgIGlmIChldmVudC5hY3Rpb24uYWN0aW9uKSB7XG4gICAgICBldmVudC5hY3Rpb24uYWN0aW9uKGV2ZW50LmNvbHVtbiwgZXZlbnQuY29sdW1uSW5kZXgpO1xuICAgIH1cblxuICAgIC8vIERvbid0IGNsb3NlIG1lbnUgaWYgaXQncyBhIGZpbHRlciBhY3Rpb24gKGZpbHRlciBuZWVkcyBtZW51IHRvIHN0YXkgb3BlbilcbiAgICBpZiAoZXZlbnQuYWN0aW9uLmlkID09PSAnZmlsdGVyJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENsb3NlIGRyb3Bkb3duIGZvciBvdGhlciBhY3Rpb25zXG4gICAgdGhpcy5jbG9zZUNvbHVtbk1lbnUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY29sdW1uIGFjdGlvbnMgKGJ1aWx0LWluICsgY3VzdG9tKVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRDb2x1bW5BY3Rpb25zKFxuICAgIGNvbHVtbjogQ29sdW1uQ29uZmlnPGFueT4sIFxuICAgIGNvbHVtbkluZGV4OiBudW1iZXIsIFxuICAgIGlzRmlyc3Q6IGJvb2xlYW4sIFxuICAgIGlzTGFzdDogYm9vbGVhblxuICApOiBDb2x1bW5BY3Rpb25bXSB7XG4gICAgY29uc3QgYWN0aW9uczogQ29sdW1uQWN0aW9uW10gPSBbXTtcbiAgICBcbiAgICAvLyBBZGQgYnVpbHQtaW4gYWN0aW9ucyBpZiBlbmFibGVkIChkZWZhdWx0OiB0cnVlKVxuICAgIGNvbnN0IGluY2x1ZGVCdWlsdEluID0gY29sdW1uLmluY2x1ZGVCdWlsdEluQWN0aW9ucyA/PyB0cnVlO1xuICAgIGlmIChpbmNsdWRlQnVpbHRJbikge1xuICAgICAgYWN0aW9ucy5wdXNoKC4uLnRoaXMuZ2V0QnVpbHRJbkNvbHVtbkFjdGlvbnMoY29sdW1uLCBjb2x1bW5JbmRleCwgaXNGaXJzdCwgaXNMYXN0KSk7XG4gICAgfVxuICAgIFxuICAgIC8vIEFkZCBjdXN0b20gY29sdW1uIGFjdGlvbnMgZnJvbSBjb25maWdcbiAgICBpZiAoY29sdW1uLmNvbHVtbkFjdGlvbnMgJiYgY29sdW1uLmNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgYWN0aW9ucy5wdXNoKC4uLmNvbHVtbi5jb2x1bW5BY3Rpb25zKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGFjdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGJ1aWx0LWluIGNvbHVtbiBhY3Rpb25zIChzb3J0LCBmaWx0ZXIsIHBpbiwgbW92ZSlcbiAgICovXG4gIHByaXZhdGUgZ2V0QnVpbHRJbkNvbHVtbkFjdGlvbnMoXG4gICAgY29sdW1uOiBDb2x1bW5Db25maWc8YW55PixcbiAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgIGlzRmlyc3Q6IGJvb2xlYW4sXG4gICAgaXNMYXN0OiBib29sZWFuXG4gICk6IENvbHVtbkFjdGlvbltdIHtcbiAgICBjb25zdCB0YWJsZVN0YXRlID0gdGhpcy5nZXRBY3RpdmVUYWJsZVN0YXRlKCk7XG4gICAgY29uc3QgYWN0aW9uczogQ29sdW1uQWN0aW9uW10gPSBbXTtcblxuICAgIC8vIFNvcnQgYXNjZW5kaW5nXG4gICAgaWYgKGNvbHVtbi5zb3J0YWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgIGlkOiAnc29ydC1hc2MnLFxuICAgICAgICBsYWJlbDogdGhpcy5nZXRTb3J0TGFiZWwoY29sdW1uLCAnYXNjJyksXG4gICAgICAgIGljb246ICfihpEnLFxuICAgICAgICBhY3Rpb246IChjb2wpID0+IHtcbiAgICAgICAgICB0YWJsZVN0YXRlLmFkZFNvcnRUb0NvbHVtbihjb2wua2V5LCBTb3J0RGlyZWN0aW9uLkFTQyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFNvcnQgZGVzY2VuZGluZ1xuICAgIGlmIChjb2x1bW4uc29ydGFibGUgIT09IGZhbHNlKSB7XG4gICAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgICBpZDogJ3NvcnQtZGVzYycsXG4gICAgICAgIGxhYmVsOiB0aGlzLmdldFNvcnRMYWJlbChjb2x1bW4sICdkZXNjJyksXG4gICAgICAgIGljb246ICfihpMnLFxuICAgICAgICBhY3Rpb246IChjb2wpID0+IHtcbiAgICAgICAgICB0YWJsZVN0YXRlLmFkZFNvcnRUb0NvbHVtbihjb2wua2V5LCBTb3J0RGlyZWN0aW9uLkRFU0MpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBDbGVhciBzb3J0IChvbmx5IHNob3cgaWYgY3VycmVudGx5IHNvcnRlZClcbiAgICBpZiAoY29sdW1uLnNvcnRhYmxlICE9PSBmYWxzZSAmJiBjb2x1bW4uc29ydERpcmVjdGlvbiAmJiBjb2x1bW4uc29ydERpcmVjdGlvbiAhPT0gU29ydERpcmVjdGlvbi5OT05FKSB7XG4gICAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgICBpZDogJ2NsZWFyLXNvcnQnLFxuICAgICAgICBsYWJlbDogJ0NsZWFyIFNvcnQnLFxuICAgICAgICBpY29uOiAn4pyVJyxcbiAgICAgICAgYWN0aW9uOiAoY29sKSA9PiB7XG4gICAgICAgICAgdGFibGVTdGF0ZS5hZGRTb3J0VG9Db2x1bW4oY29sLmtleSwgU29ydERpcmVjdGlvbi5OT05FKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRmlsdGVyXG4gICAgaWYgKGNvbHVtbi5maWx0ZXJhYmxlICE9PSBmYWxzZSkge1xuICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgaWQ6ICdmaWx0ZXInLFxuICAgICAgICBsYWJlbDogJ0ZpbHRlcicsXG4gICAgICAgIGljb246ICfimpEnLFxuICAgICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgICAvLyBGaWx0ZXIgYWN0aW9uIGhhbmRsZWQgYnkgY29sdW1uIG1lbnUgY29tcG9uZW50XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFBpbiBMZWZ0IChpZiBub3QgYWxyZWFkeSBwaW5uZWQpXG4gICAgaWYgKGNvbHVtbi5waW5uYWJsZSAhPT0gZmFsc2UgJiYgY29sdW1uLnN0aWNreSAhPT0gJ2xlZnQnICYmIGNvbHVtbi5zdGlja3kgIT09ICdyaWdodCcpIHtcbiAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgIGlkOiAncGluLWxlZnQnLFxuICAgICAgICBsYWJlbDogJ1BpbiBMZWZ0JyxcbiAgICAgICAgaWNvbjogJ/Cfk4wnLFxuICAgICAgICBhY3Rpb246IChjb2wpID0+IHtcbiAgICAgICAgICB0YWJsZVN0YXRlLnNldFN0aWNreUNvbHVtbihjb2wua2V5LCAnbGVmdCcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQaW4gUmlnaHQgKGlmIG5vdCBhbHJlYWR5IHBpbm5lZClcbiAgICBpZiAoY29sdW1uLnBpbm5hYmxlICE9PSBmYWxzZSAmJiBjb2x1bW4uc3RpY2t5ICE9PSAnbGVmdCcgJiYgY29sdW1uLnN0aWNreSAhPT0gJ3JpZ2h0Jykge1xuICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgaWQ6ICdwaW4tcmlnaHQnLFxuICAgICAgICBsYWJlbDogJ1BpbiBSaWdodCcsXG4gICAgICAgIGljb246ICfwn5OMJyxcbiAgICAgICAgYWN0aW9uOiAoY29sKSA9PiB7XG4gICAgICAgICAgdGhpcy5tb3ZlQ29sdW1uVG9FbmQoY29sLmtleSk7XG4gICAgICAgICAgdGFibGVTdGF0ZS5zZXRTdGlja3lDb2x1bW4oY29sLmtleSwgJ3JpZ2h0Jyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFVucGluIChpZiBjdXJyZW50bHkgcGlubmVkKVxuICAgIGlmIChjb2x1bW4ucGlubmFibGUgIT09IGZhbHNlICYmIChjb2x1bW4uc3RpY2t5ID09PSAnbGVmdCcgfHwgY29sdW1uLnN0aWNreSA9PT0gJ3JpZ2h0JykpIHtcbiAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgIGlkOiAndW5waW4nLFxuICAgICAgICBsYWJlbDogJ1VucGluJyxcbiAgICAgICAgaWNvbjogJ/Cfk40nLFxuICAgICAgICBhY3Rpb246IChjb2wpID0+IHtcbiAgICAgICAgICB0YWJsZVN0YXRlLnNldFN0aWNreUNvbHVtbihjb2wua2V5LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE1vdmUgbGVmdCAob25seSBpZiBtb3ZhYmxlIGFuZCBub3QgcGlubmVkKVxuICAgIGlmICghaXNGaXJzdCAmJiBjb2x1bW4ubW92YWJsZSAhPT0gZmFsc2UgJiYgIWNvbHVtbi5zdGlja3kpIHtcbiAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgIGlkOiAnbW92ZS1sZWZ0JyxcbiAgICAgICAgbGFiZWw6ICdNb3ZlIExlZnQnLFxuICAgICAgICBpY29uOiAn4oaQJyxcbiAgICAgICAgYWN0aW9uOiAoY29sKSA9PiB7XG4gICAgICAgICAgdGhpcy5vbkNvbHVtbk1vdmVkKHtcbiAgICAgICAgICAgIGNvbHVtbktleTogY29sLmtleSxcbiAgICAgICAgICAgIGRpcmVjdGlvbjogJ2xlZnQnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE1vdmUgcmlnaHQgKG9ubHkgaWYgbW92YWJsZSBhbmQgbm90IHBpbm5lZClcbiAgICBpZiAoIWlzTGFzdCAmJiBjb2x1bW4ubW92YWJsZSAhPT0gZmFsc2UgJiYgIWNvbHVtbi5zdGlja3kpIHtcbiAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgIGlkOiAnbW92ZS1yaWdodCcsXG4gICAgICAgIGxhYmVsOiAnTW92ZSBSaWdodCcsXG4gICAgICAgIGljb246ICfihpInLFxuICAgICAgICBhY3Rpb246IChjb2wpID0+IHtcbiAgICAgICAgICB0aGlzLm9uQ29sdW1uTW92ZWQoe1xuICAgICAgICAgICAgY29sdW1uS2V5OiBjb2wua2V5LFxuICAgICAgICAgICAgZGlyZWN0aW9uOiAncmlnaHQnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzb3J0IGxhYmVsIGJhc2VkIG9uIGNvbHVtbiBkYXRhIHR5cGVcbiAgICovXG4gIHByaXZhdGUgZ2V0U29ydExhYmVsKGNvbHVtbjogQ29sdW1uQ29uZmlnPGFueT4sIGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGFUeXBlID0gY29sdW1uLmRhdGFUeXBlO1xuXG4gICAgaWYgKGRhdGFUeXBlID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gJ2FzYycgPyAnU29ydCAw4oaSOScgOiAnU29ydCA54oaSMCc7XG4gICAgfSBlbHNlIGlmIChkYXRhVHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICByZXR1cm4gZGlyZWN0aW9uID09PSAnYXNjJyA/ICdTb3J0IE9sZGVzdCBGaXJzdCcgOiAnU29ydCBOZXdlc3QgRmlyc3QnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGlyZWN0aW9uID09PSAnYXNjJyA/ICdTb3J0IEHihpJaJyA6ICdTb3J0IFrihpJBJztcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEtFWUJPQVJEIE5BVklHQVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGtleWJvYXJkIG5hdmlnYXRpb25cbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUtleWJvYXJkTmF2aWdhdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCB0YWJsZVN0YXRlID0gdGhpcy5nZXRBY3RpdmVUYWJsZVN0YXRlKCk7XG4gICAgXG4gICAgdGFibGVTdGF0ZS5zZXREaW1lbnNpb25zKFxuICAgICAgdGhpcy52aXNpYmxlQ2VsbEdyaWQubGVuZ3RoLFxuICAgICAgdGhpcy52aXNpYmxlQ29sdW1ucy5sZW5ndGhcbiAgICApO1xuICAgIFxuICAgIC8vIFN1YnNjcmliZSB0byBmb2N1cyBwb3NpdGlvbiBjaGFuZ2VzXG4gICAgdGhpcy5mb2N1c1N1YnNjcmlwdGlvbiA9IHRhYmxlU3RhdGUuZm9jdXNlZENlbGxQb3NpdGlvbiQuc3Vic2NyaWJlKHBvc2l0aW9uID0+IHtcbiAgICAgIHRoaXMudXBkYXRlQ2VsbEZvY3VzU3RhdGVzKHBvc2l0aW9uKTtcbiAgICB9KTtcbiAgICBcbiAgICAvLyBTdWJzY3JpYmUgdG8gcmVxdWVzdCBhZGQgcm93IGV2ZW50cyAod2hlbiBuYXZpZ2F0aW5nIHBhc3QgbGFzdCByb3cpXG4gICAgdGhpcy5yZXF1ZXN0QWRkUm93U3Vic2NyaXB0aW9uID0gdGFibGVTdGF0ZS5yZXF1ZXN0QWRkUm93JC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgdGhpcy5yZXF1ZXN0QWRkUm93LmVtaXQoZXZlbnQpO1xuICAgIH0pO1xuICAgIFxuICAgIC8vIEF1dG8tZm9jdXMgZmlyc3QgY2VsbCB0byBlbmFibGUga2V5Ym9hcmQgbmF2aWdhdGlvblxuICAgIGlmICh0aGlzLnZpc2libGVDZWxsR3JpZC5sZW5ndGggPiAwICYmIHRoaXMudmlzaWJsZUNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRhYmxlU3RhdGUuZm9jdXNDZWxsKDAsIDApO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogVXBkYXRlIGZvY3VzIHN0YXRlIGluIGFsbCBjZWxsc1xuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVDZWxsRm9jdXNTdGF0ZXMocG9zaXRpb246IENlbGxGb2N1c1Bvc2l0aW9uIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICghdGhpcy52aXNpYmxlQ2VsbEdyaWQpIHJldHVybjtcbiAgICBcbiAgICBmb3IgKGxldCByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwgdGhpcy52aXNpYmxlQ2VsbEdyaWQubGVuZ3RoOyByb3dJbmRleCsrKSB7XG4gICAgICBjb25zdCByb3cgPSB0aGlzLnZpc2libGVDZWxsR3JpZFtyb3dJbmRleF07XG4gICAgICBmb3IgKGxldCBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgcm93Lmxlbmd0aDsgY29sSW5kZXgrKykge1xuICAgICAgICBjb25zdCBjZWxsID0gcm93W2NvbEluZGV4XTtcbiAgICAgICAgaWYgKCFjZWxsKSBjb250aW51ZTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHNob3VsZEZvY3VzID0gcG9zaXRpb24gJiYgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbi5yb3dJbmRleCA9PT0gcm93SW5kZXggJiYgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbi5jb2x1bW5JbmRleCA9PT0gY29sSW5kZXg7XG4gICAgICAgIFxuICAgICAgICBpZiAoc2hvdWxkRm9jdXMpIHtcbiAgICAgICAgICBjZWxsLmZvY3VzKCk7XG4gICAgICAgICAgLy8gRm9jdXMgdGhlIGFjdHVhbCBET00gZWxlbWVudFxuICAgICAgICAgIHRoaXMuZm9jdXNUZEVsZW1lbnQocm93SW5kZXgsIGNvbEluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjZWxsLmJsdXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEZvY3VzIHRoZSBURCBlbGVtZW50IGluIHRoZSBET00gYW5kIHNjcm9sbCBpdCBpbnRvIHZpZXcsXG4gICAqIGFjY291bnRpbmcgZm9yIHN0aWNreSBjb2x1bW5zIG9uIGxlZnQgYW5kIHJpZ2h0XG4gICAqL1xuICBwcml2YXRlIGZvY3VzVGRFbGVtZW50KHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBVc2Ugc2V0VGltZW91dCB0byBlbnN1cmUgRE9NIGhhcyB1cGRhdGVkXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBEb24ndCBzdGVhbCBmb2N1cyBmcm9tIGVkaXRvcnMgLSBpZiBhIGNlbGwgaXMgYmVpbmcgZWRpdGVkLCBcbiAgICAgIC8vIHRoZSBlZGl0b3Igc2hvdWxkIGtlZXAgZm9jdXNcbiAgICAgIGNvbnN0IGVkaXRpbmdQb3NpdGlvbiA9IHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpLmdldEVkaXRpbmdQb3NpdGlvbigpO1xuICAgICAgaWYgKGVkaXRpbmdQb3NpdGlvbiAmJiBcbiAgICAgICAgICBlZGl0aW5nUG9zaXRpb24ucm93SW5kZXggPT09IHJvd0luZGV4ICYmIFxuICAgICAgICAgIGVkaXRpbmdQb3NpdGlvbi5jb2x1bW5JbmRleCA9PT0gY29sSW5kZXgpIHtcbiAgICAgICAgLy8gQ2VsbCBpcyBiZWluZyBlZGl0ZWQsIGRvbid0IHN0ZWFsIGZvY3VzIGZyb20gdGhlIGVkaXRvclxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFVzZSBhYnNvbHV0ZSByb3cgaW5kZXggZm9yIHZpcnR1YWwgc2Nyb2xsIGNvbXBhdGliaWxpdHlcbiAgICAgIGNvbnN0IGFic29sdXRlUm93SW5kZXggPSB0aGlzLmdldEFic29sdXRlUm93SW5kZXgocm93SW5kZXgpO1xuICAgICAgLy8gUXVlcnkgd2l0aGluIHRoaXMgY29tcG9uZW50J3MgaG9zdCBlbGVtZW50IHRvIGF2b2lkIHNlbGVjdGluZyByb3dzIGZyb20gb3RoZXIgdGFibGVzXG4gICAgICBjb25zdCBob3N0RWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmICghaG9zdEVsZW1lbnQpIHJldHVybjtcbiAgICAgIFxuICAgICAgLy8gRmlyc3QsIGVuc3VyZSB0aGUgdGFibGUgY29udGFpbmVyIGhhcyBmb2N1cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvblxuICAgICAgLy8gVGhlIGtleWJvYXJkIG5hdmlnYXRpb24gZGlyZWN0aXZlIGxpc3RlbnMgb24gdGhlIC5zdC10YWJsZSBjb250YWluZXJcbiAgICAgIGNvbnN0IHRhYmxlQ29udGFpbmVyID0gaG9zdEVsZW1lbnQucXVlcnlTZWxlY3RvcignLnN0LXRhYmxlJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgICAgaWYgKHRhYmxlQ29udGFpbmVyICYmIHR5cGVvZiB0YWJsZUNvbnRhaW5lci5mb2N1cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0YWJsZUNvbnRhaW5lci5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IHRyID0gaG9zdEVsZW1lbnQucXVlcnlTZWxlY3RvcihgdHJbZGF0YS1yb3ctaW5kZXg9XCIke2Fic29sdXRlUm93SW5kZXh9XCJdYCk7XG4gICAgICBpZiAodHIpIHtcbiAgICAgICAgY29uc3QgY2VsbHMgPSB0ci5xdWVyeVNlbGVjdG9yQWxsKCd0ZDpub3QoLnNldHRpbmdzLWNvbHVtbik6bm90KC5yb3ctbnVtYmVyLWNlbGwpJyk7XG4gICAgICAgIGNvbnN0IHRhcmdldENlbGwgPSBjZWxsc1tjb2xJbmRleF0gYXMgSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0YXJnZXRDZWxsICYmIHR5cGVvZiB0YXJnZXRDZWxsLmZvY3VzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGFyZ2V0Q2VsbC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgICAgdGhpcy5zY3JvbGxDZWxsSW50b1ZpZXcodGFyZ2V0Q2VsbCwgY29sSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIGEgY2VsbCBpbnRvIHZpZXcsIGFjY291bnRpbmcgZm9yIHN0aWNreSBjb2x1bW5zXG4gICAqL1xuICBwcml2YXRlIHNjcm9sbENlbGxJbnRvVmlldyhjZWxsOiBIVE1MRWxlbWVudCwgY29sSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIEZpbmQgdGhlIHNjcm9sbCBjb250YWluZXJcbiAgICBjb25zdCBzY3JvbGxDb250YWluZXIgPSB0aGlzLmdldFNjcm9sbENvbnRhaW5lckVsZW1lbnQoKTtcbiAgICBpZiAoIXNjcm9sbENvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgY29uc3QgY2VsbFJlY3QgPSBjZWxsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBzY3JvbGxDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgc3RpY2t5IGNvbHVtbiB3aWR0aHNcbiAgICBjb25zdCB7IGxlZnRTdGlja3lXaWR0aCwgcmlnaHRTdGlja3lXaWR0aCB9ID0gdGhpcy5jYWxjdWxhdGVTdGlja3lXaWR0aHMoKTtcblxuICAgIC8vIENhbGN1bGF0ZSB2aXNpYmxlIGFyZWEgKGV4Y2x1ZGluZyBzdGlja3kgY29sdW1ucylcbiAgICBjb25zdCB2aXNpYmxlTGVmdCA9IGNvbnRhaW5lclJlY3QubGVmdCArIGxlZnRTdGlja3lXaWR0aDtcbiAgICBjb25zdCB2aXNpYmxlUmlnaHQgPSBjb250YWluZXJSZWN0LnJpZ2h0IC0gcmlnaHRTdGlja3lXaWR0aDtcbiAgICBjb25zdCB2aXNpYmxlVG9wID0gY29udGFpbmVyUmVjdC50b3A7XG4gICAgY29uc3QgdmlzaWJsZUJvdHRvbSA9IGNvbnRhaW5lclJlY3QuYm90dG9tO1xuXG4gICAgLy8gQ2hlY2sgaWYgY29sdW1uIGlzIHN0aWNreSAoZG9uJ3Qgc2Nyb2xsIGZvciBzdGlja3kgY29sdW1ucylcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLnZpc2libGVDb2x1bW5zW2NvbEluZGV4XTtcbiAgICBpZiAoY29sdW1uPy5zdGlja3kpIHtcbiAgICAgIC8vIEp1c3QgZW5zdXJlIHZlcnRpY2FsIHZpc2liaWxpdHkgZm9yIHN0aWNreSBjb2x1bW5zXG4gICAgICBpZiAoY2VsbFJlY3QudG9wIDwgdmlzaWJsZVRvcCkge1xuICAgICAgICBzY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wIC09ICh2aXNpYmxlVG9wIC0gY2VsbFJlY3QudG9wKTtcbiAgICAgIH0gZWxzZSBpZiAoY2VsbFJlY3QuYm90dG9tID4gdmlzaWJsZUJvdHRvbSkge1xuICAgICAgICBzY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wICs9IChjZWxsUmVjdC5ib3R0b20gLSB2aXNpYmxlQm90dG9tKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBjZWxsIGlzIGFscmVhZHkgZnVsbHkgdmlzaWJsZSBob3Jpem9udGFsbHkgKG5vIHNjcm9sbCBuZWVkZWQpXG4gICAgY29uc3QgaXNDZWxsRnVsbHlWaXNpYmxlSG9yaXpvbnRhbGx5ID0gY2VsbFJlY3QubGVmdCA+PSB2aXNpYmxlTGVmdCAmJiBjZWxsUmVjdC5yaWdodCA8PSB2aXNpYmxlUmlnaHQ7XG4gICAgXG4gICAgLy8gT25seSBzY3JvbGwgaG9yaXpvbnRhbGx5IGlmIGNlbGwgaXMgTk9UIGZ1bGx5IHZpc2libGVcbiAgICBpZiAoIWlzQ2VsbEZ1bGx5VmlzaWJsZUhvcml6b250YWxseSkge1xuICAgICAgaWYgKGNlbGxSZWN0LmxlZnQgPCB2aXNpYmxlTGVmdCkge1xuICAgICAgICAvLyBDZWxsIGlzIGhpZGRlbiBiZWhpbmQgbGVmdCBzdGlja3kgY29sdW1uc1xuICAgICAgICBzY3JvbGxDb250YWluZXIuc2Nyb2xsTGVmdCAtPSAodmlzaWJsZUxlZnQgLSBjZWxsUmVjdC5sZWZ0KTtcbiAgICAgIH0gZWxzZSBpZiAoY2VsbFJlY3QucmlnaHQgPiB2aXNpYmxlUmlnaHQpIHtcbiAgICAgICAgLy8gQ2VsbCBpcyBoaWRkZW4gYmVoaW5kIHJpZ2h0IHN0aWNreSBjb2x1bW5zXG4gICAgICAgIHNjcm9sbENvbnRhaW5lci5zY3JvbGxMZWZ0ICs9IChjZWxsUmVjdC5yaWdodCAtIHZpc2libGVSaWdodCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmVydGljYWwgc2Nyb2xsaW5nXG4gICAgaWYgKGNlbGxSZWN0LnRvcCA8IHZpc2libGVUb3ApIHtcbiAgICAgIHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgLT0gKHZpc2libGVUb3AgLSBjZWxsUmVjdC50b3ApO1xuICAgIH0gZWxzZSBpZiAoY2VsbFJlY3QuYm90dG9tID4gdmlzaWJsZUJvdHRvbSkge1xuICAgICAgc2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCArPSAoY2VsbFJlY3QuYm90dG9tIC0gdmlzaWJsZUJvdHRvbSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNjcm9sbCB0byBhIHNwZWNpZmljIHJvdyBieSBpbmRleCBhbmQgb3B0aW9uYWxseSBmb2N1cyBpdFxuICAgKiBAcGFyYW0gcm93SW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIHJvdyB0byBzY3JvbGwgdG9cbiAgICogQHBhcmFtIGZvY3VzRmlyc3RDZWxsIC0gV2hldGhlciB0byBmb2N1cyB0aGUgZmlyc3QgZWRpdGFibGUgY2VsbCAoZGVmYXVsdDogZmFsc2UpXG4gICAqL1xuICBwdWJsaWMgc2Nyb2xsVG9Sb3dBbmRGb2N1cyhyb3dJbmRleDogbnVtYmVyLCBmb2N1c0ZpcnN0Q2VsbDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBob3N0RWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmICghaG9zdEVsZW1lbnQpIHJldHVybjtcbiAgICAgIFxuICAgICAgLy8gRmluZCB0aGUgdGFyZ2V0IHJvd1xuICAgICAgY29uc3Qgcm93cyA9IGhvc3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3Rib2R5IHRyJyk7XG4gICAgICBjb25zdCB0YXJnZXRSb3cgPSByb3dzW3Jvd0luZGV4XSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIFxuICAgICAgaWYgKHRhcmdldFJvdykge1xuICAgICAgICAvLyBTY3JvbGwgdGhlIHJvdyBpbnRvIHZpZXdcbiAgICAgICAgdGFyZ2V0Um93LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ25lYXJlc3QnIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gT3B0aW9uYWxseSBmb2N1cyB0aGUgZmlyc3QgZWRpdGFibGUgY2VsbFxuICAgICAgICBpZiAoZm9jdXNGaXJzdENlbGwpIHtcbiAgICAgICAgICBjb25zdCBjZWxscyA9IHRhcmdldFJvdy5xdWVyeVNlbGVjdG9yQWxsKCd0ZDpub3QoLnNldHRpbmdzLWNvbHVtbik6bm90KC5yb3ctbnVtYmVyLWNlbGwpJyk7XG4gICAgICAgICAgY29uc3QgZmlyc3RDZWxsID0gY2VsbHNbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgaWYgKGZpcnN0Q2VsbCAmJiB0eXBlb2YgZmlyc3RDZWxsLmZvY3VzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgZmlyc3RDZWxsLmZvY3VzKCk7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0YWJsZSBzdGF0ZSBmb2N1cyBwb3NpdGlvblxuICAgICAgICAgICAgICBpZiAodGhpcy50YWJsZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZVN0YXRlLmZvY3VzQ2VsbChyb3dJbmRleCwgMCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIHRvIHRoZSBsYXN0IHJvdyBpbiB0aGUgdGFibGVcbiAgICogQHBhcmFtIGZvY3VzRmlyc3RDZWxsIC0gV2hldGhlciB0byBmb2N1cyB0aGUgZmlyc3QgZWRpdGFibGUgY2VsbCAoZGVmYXVsdDogdHJ1ZSlcbiAgICovXG4gIHB1YmxpYyBzY3JvbGxUb0xhc3RSb3coZm9jdXNGaXJzdENlbGw6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgY29uc3Qgcm93Q291bnQgPSB0aGlzLmRhdGE/Lmxlbmd0aCB8fCAwO1xuICAgIGlmIChyb3dDb3VudCA+IDApIHtcbiAgICAgIHRoaXMuc2Nyb2xsVG9Sb3dBbmRGb2N1cyhyb3dDb3VudCAtIDEsIGZvY3VzRmlyc3RDZWxsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzY3JvbGwgY29udGFpbmVyIGVsZW1lbnRcbiAgICovXG4gIHByaXZhdGUgZ2V0U2Nyb2xsQ29udGFpbmVyRWxlbWVudCgpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIC8vIFByZWZlciBjYWNoZWQgY29udGFpbmVyIGlmIGFscmVhZHkgcmVzb2x2ZWRcbiAgICBpZiAodGhpcy5zY3JvbGxDb250YWluZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjcm9sbENvbnRhaW5lcjtcbiAgICB9XG4gICAgLy8gVmlydHVhbCBzY3JvbGwgdXNlcyBzY3JvbGxWaWV3cG9ydFxuICAgIGlmICh0aGlzLmlzVmlydHVhbFNjcm9sbEVuYWJsZWQoKSAmJiB0aGlzLnNjcm9sbFZpZXdwb3J0Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLnNjcm9sbENvbnRhaW5lciA9IHRoaXMuc2Nyb2xsVmlld3BvcnQubmF0aXZlRWxlbWVudDtcbiAgICAgIHJldHVybiB0aGlzLnNjcm9sbENvbnRhaW5lcjtcbiAgICB9XG4gICAgLy8gU3RhbmRhcmQgbW9kZSB1c2VzIC5zdC10YWJsZSBjb250YWluZXIgd2l0aGluIFRISVMgY29tcG9uZW50J3MgaG9zdCBlbGVtZW50XG4gICAgLy8gVXNlIGVsZW1lbnRSZWYgdG8gcXVlcnkgd2l0aGluIHRoZSBjb21wb25lbnQgaW5zdGVhZCBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yXG4gICAgLy8gd2hpY2ggd291bGQgcmV0dXJuIHRoZSBmaXJzdCB0YWJsZSBvbiB0aGUgcGFnZVxuICAgIGNvbnN0IGhvc3RFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmIChob3N0RWxlbWVudCkge1xuICAgICAgY29uc3QgdGFibGVDb250YWluZXIgPSBob3N0RWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc3QtdGFibGUnKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgICBpZiAodGFibGVDb250YWluZXIpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIgPSB0YWJsZUNvbnRhaW5lcjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2Nyb2xsQ29udGFpbmVyIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRvdGFsIHdpZHRoIG9mIHN0aWNreSBjb2x1bW5zIG9uIGxlZnQgYW5kIHJpZ2h0XG4gICAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZVN0aWNreVdpZHRocygpOiB7IGxlZnRTdGlja3lXaWR0aDogbnVtYmVyOyByaWdodFN0aWNreVdpZHRoOiBudW1iZXIgfSB7XG4gICAgbGV0IGxlZnRTdGlja3lXaWR0aCA9IDA7XG4gICAgbGV0IHJpZ2h0U3RpY2t5V2lkdGggPSAwO1xuXG4gICAgLy8gQWNjb3VudCBmb3Igcm93IG51bWJlciBjb2x1bW4gaWYgZW5hYmxlZFxuICAgIGlmICh0aGlzLm1lcmdlZENvbmZpZy5zaG93Um93TnVtYmVyKSB7XG4gICAgICBsZWZ0U3RpY2t5V2lkdGggKz0gMzA7IC8vIFJvdyBudW1iZXIgY29sdW1uIHdpZHRoXG4gICAgfVxuXG4gICAgLy8gQ2FsY3VsYXRlIGZyb20gY29sdW1uIGNvbmZpZ3NcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiB0aGlzLnZpc2libGVDb2x1bW5zKSB7XG4gICAgICBpZiAoY29sLnN0aWNreSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIGxlZnRTdGlja3lXaWR0aCArPSAoY29sLndpZHRoIGFzIG51bWJlcikgfHwgMTAwO1xuICAgICAgfSBlbHNlIGlmIChjb2wuc3RpY2t5ID09PSAncmlnaHQnKSB7XG4gICAgICAgIHJpZ2h0U3RpY2t5V2lkdGggKz0gKGNvbC53aWR0aCBhcyBudW1iZXIpIHx8IDEwMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBY2NvdW50IGZvciBzZXR0aW5ncyBjb2x1bW4gb25seSB3aGVuIHJvdyBhY3Rpb25zIGFyZSBlbmFibGVkICh1c2UgY29uc2lzdGVudCB3aWR0aClcbiAgICBjb25zdCBzZXR0aW5nc0NvbHVtbldpZHRoID0gdGhpcy5oYXNSb3dBY3Rpb25zKCkgPyAzMiA6IDA7XG4gICAgcmlnaHRTdGlja3lXaWR0aCArPSBzZXR0aW5nc0NvbHVtbldpZHRoO1xuXG4gICAgcmV0dXJuIHsgbGVmdFN0aWNreVdpZHRoLCByaWdodFN0aWNreVdpZHRoIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgY2VsbCBjbGlja1xuICAgKi9cbiAgb25DZWxsQ2xpY2socm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0tleWJvYXJkTmF2aWdhdGlvbkVuYWJsZWQoKSkgcmV0dXJuO1xuICAgIHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpLmZvY3VzQ2VsbChyb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIGNlbGwgZW50ZXJpbmcgZWRpdCBtb2RlXG4gICAqL1xuICBvbkNlbGxFZGl0KGV2ZW50OiBDZWxsRWRpdEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jZWxsRWRpdC5lbWl0KGV2ZW50KTtcbiAgICBcbiAgICBpZiAodGhpcy5pc0tleWJvYXJkTmF2aWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgY29uc3Qgcm93SW5kZXggPSBldmVudC5jZWxsLmdldFJvd0luZGV4KCk7XG4gICAgICBjb25zdCBjb2x1bW5LZXkgPSBldmVudC5jb2x1bW5LZXk7XG4gICAgICBjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMudmlzaWJsZUNvbHVtbnMuZmluZEluZGV4KGNvbCA9PiBjb2wua2V5ID09PSBjb2x1bW5LZXkpO1xuICAgICAgXG4gICAgICBpZiAocm93SW5kZXggIT09IHVuZGVmaW5lZCAmJiBjb2x1bW5JbmRleCA+PSAwKSB7XG4gICAgICAgIHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpLnNldEVkaXRpbmdDZWxsKHJvd0luZGV4LCBjb2x1bW5JbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIGNlbGwgc2F2ZVxuICAgKi9cbiAgb25DZWxsU2F2ZShldmVudDogQ2VsbFNhdmVFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuY2VsbFNhdmUuZW1pdChldmVudCk7XG4gICAgXG4gICAgaWYgKHRoaXMuaXNLZXlib2FyZE5hdmlnYXRpb25FbmFibGVkKCkpIHtcbiAgICAgIHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpLmNsZWFyRWRpdGluZ0NlbGwoKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgY2VsbCBjYW5jZWxcbiAgICovXG4gIG9uQ2VsbENhbmNlbChldmVudDogQ2VsbENhbmNlbEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jZWxsQ2FuY2VsLmVtaXQoZXZlbnQpO1xuICAgIFxuICAgIGlmICh0aGlzLmlzS2V5Ym9hcmROYXZpZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKS5jbGVhckVkaXRpbmdDZWxsKCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIGNlbGwgc2F2ZSB3aXRoIG5hdmlnYXRpb24gKEV4Y2VsLWxpa2UgYmVoYXZpb3IpXG4gICAqL1xuICBvbkNlbGxTYXZlQW5kTmF2aWdhdGUoZXZlbnQ6IHtldmVudDogS2V5Ym9hcmRFdmVudCwgZGlyZWN0aW9uOiBOYXZpZ2F0aW9uRGlyZWN0aW9ufSk6IHZvaWQge1xuICAgIC8vIE5hdmlnYXRpb24gaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IHRoZSBkaXJlY3RpdmUgYWZ0ZXIgc2F2ZVxuICAgIC8vIEp1c3QgZW5zdXJlIGVkaXRpbmcgc3RhdGUgaXMgY2xlYXJlZFxuICAgIGlmICh0aGlzLmlzS2V5Ym9hcmROYXZpZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKS5jbGVhckVkaXRpbmdDZWxsKCk7XG4gICAgICAvLyBNb3ZlIGZvY3VzIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0aW9uXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5nZXRBY3RpdmVUYWJsZVN0YXRlKCkubW92ZUZvY3VzKGV2ZW50LmRpcmVjdGlvbik7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgZm9jdXMgb24gdGFibGUgY29udGFpbmVyIC0gZm9jdXMgZmlyc3QgY2VsbCBpZiBubyBjZWxsIGlzIGZvY3VzZWRcbiAgICovXG4gIG9uVGFibGVDb250YWluZXJGb2N1cyhldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0tleWJvYXJkTmF2aWdhdGlvbkVuYWJsZWQoKSkgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IHRhYmxlU3RhdGUgPSB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKTtcbiAgICBjb25zdCBjdXJyZW50Rm9jdXMgPSB0YWJsZVN0YXRlLmdldEZvY3VzZWRQb3NpdGlvbigpO1xuICAgIFxuICAgIC8vIElmIG5vIGNlbGwgaXMgZm9jdXNlZCwgZm9jdXMgdGhlIGZpcnN0IGNlbGxcbiAgICBpZiAoIWN1cnJlbnRGb2N1cyAmJiB0aGlzLnZpc2libGVDZWxsR3JpZC5sZW5ndGggPiAwICYmIHRoaXMudmlzaWJsZUNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGFibGVTdGF0ZS5mb2N1c0NlbGwoMCwgMCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYga2V5Ym9hcmQgbmF2aWdhdGlvbiBpcyBlbmFibGVkXG4gICAqL1xuICBpc0tleWJvYXJkTmF2aWdhdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VkQ29uZmlnLmZlYXR1cmVzPy5rZXlib2FyZE5hdmlnYXRpb24/LmVuYWJsZWQgPz8gZmFsc2U7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgRWRpdE1vZGUgZW51bSB2YWx1ZSBmb3IgY2VsbHNcbiAgICogRm9yIEV4Y2VsLWxpa2UgdGFibGVzIHdpdGgga2V5Ym9hcmQgbmF2aWdhdGlvbiwgdXNlIEVOVEVSIG1vZGVcbiAgICogd2hpY2ggYWxsb3dzIGFycm93IGtleSBuYXZpZ2F0aW9uIHdpdGhvdXQgdHJpZ2dlcmluZyBlZGl0LlxuICAgKiBEb3VibGUtY2xpY2sgd2lsbCBzdGlsbCB3b3JrIHRvIHN0YXJ0IGVkaXRpbmcuXG4gICAqL1xuICBnZXRFZGl0TW9kZUZvckNlbGxzKCk6IEVkaXRNb2RlIHtcbiAgICAvLyBJZiBrZXlib2FyZCBuYXZpZ2F0aW9uIGlzIGVuYWJsZWQsIHVzZSBFTlRFUiBtb2RlIGZvciBFeGNlbC1saWtlIGJlaGF2aW9yXG4gICAgLy8gT3RoZXJ3aXNlIHVzZSBDTElDSyBtb2RlIGZvciBpbW1lZGlhdGUgZWRpdGluZ1xuICAgIGlmICh0aGlzLmlzS2V5Ym9hcmROYXZpZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gRWRpdE1vZGUuRU5URVI7XG4gICAgfVxuICAgIHJldHVybiBFZGl0TW9kZS5DTElDSztcbiAgfVxuICBcbiAgLyoqXG4gICAqIENsZWFyIGZvY3VzIHdoZW4gY2xpY2tpbmcgb3V0c2lkZSB0YWJsZVxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNLZXlib2FyZE5hdmlnYXRpb25FbmFibGVkKCkpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgdGFibGVFbGVtZW50ID0gdGFyZ2V0LmNsb3Nlc3QoJy5zdC10YWJsZScpO1xuICAgIFxuICAgIC8vIEFsc28gY2hlY2sgaWYgY2xpY2sgaXMgaW5zaWRlIGEgcG9ydGFsIChlLmcuLCBuaWxlLXNlbGVjdCBkcm9wZG93bilcbiAgICAvLyBUaGVzZSBhcmUgcmVuZGVyZWQgb3V0c2lkZSB0aGUgdGFibGUgYnV0IGFyZSBwYXJ0IG9mIHRoZSBlZGl0aW5nIGV4cGVyaWVuY2VcbiAgICBjb25zdCBwb3J0YWxFbGVtZW50ID0gdGFyZ2V0LmNsb3Nlc3QoJy5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kJyk7XG4gICAgXG4gICAgLy8gQ2hlY2sgY29tcG9zZWRQYXRoIGZvciBzaGFkb3cgRE9NIGVsZW1lbnRzIChlLmcuLCBuaWxlLW9wdGlvbiwgbmlsZS1pbnB1dCBpbnNpZGUgc2hhZG93IHJvb3QpXG4gICAgY29uc3QgY29tcG9zZWRQYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoPy4oKSB8fCBbXTtcbiAgICBjb25zdCBpc0luc2lkZU5pbGVFbGVtZW50ID0gY29tcG9zZWRQYXRoLnNvbWUoKGVsOiBFdmVudFRhcmdldCkgPT4ge1xuICAgICAgaWYgKGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgdGFnTmFtZSA9IGVsLnRhZ05hbWU/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIC8vIENoZWNrIGZvciBhbnkgbmlsZS0qIGN1c3RvbSBlbGVtZW50cyB1c2VkIGluIGVkaXRvcnNcbiAgICAgICAgcmV0dXJuIHRhZ05hbWU/LnN0YXJ0c1dpdGgoJ25pbGUtJykgfHwgXG4gICAgICAgICAgICAgICBlbC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCduaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gICAgXG4gICAgaWYgKCF0YWJsZUVsZW1lbnQgJiYgIXBvcnRhbEVsZW1lbnQgJiYgIWlzSW5zaWRlTmlsZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpLmNsZWFyRm9jdXMoKTtcbiAgICAgIHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpLmNsZWFyRWRpdGluZ0NlbGwoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZm9jdXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy52YWxpZGF0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZGF0YVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnJlcXVlc3RBZGRSb3dTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy52aXJ0dWFsU2Nyb2xsU3RhdGUkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5pbnRlcm5hbERhdGEkLmNvbXBsZXRlKCk7XG4gIH1cbiAgXG59XG5cbiIsIjwhLS0gVG9wIHBhZ2luYXRpb24gY29udHJvbHMgLS0+XG48c3QtcGFnaW5hdGlvbiBcbiAgKm5nSWY9XCJzaG93VG9wUGFnaW5hdGlvbigpICYmICEobWVyZ2VkQ29uZmlnLnRhYmxlU2tlbGV0b24/LmVuYWJsZWQgfCBhc3luYylcIiBcbiAgW3RhYmxlU3RhdGVdPVwiZ2V0QWN0aXZlVGFibGVTdGF0ZSgpXCJcbiAgW3RhYmxlQ29uZmlnXT1cIm1lcmdlZENvbmZpZ1wiXG4gIHBvc2l0aW9uPVwidG9wXCI+XG48L3N0LXBhZ2luYXRpb24+XG5cbjxkaXYgY2xhc3M9XCJzdC10YWJsZVwiICpuZ0lmPVwiIShtZXJnZWRDb25maWcudGFibGVTa2VsZXRvbj8uZW5hYmxlZCB8IGFzeW5jKVwiIFxuICBbbmdDbGFzc109XCJ7XG4gICAgJ3ZpcnR1YWwtc2Nyb2xsLWVuYWJsZWQnOiBpc1ZpcnR1YWxTY3JvbGxFbmFibGVkKCksXG4gICAgJ2tleWJvYXJkLW5hdmlnYXRpb24tZW5hYmxlZCc6IGlzS2V5Ym9hcmROYXZpZ2F0aW9uRW5hYmxlZCgpXG4gIH1cIlxuICBbbmdTdHlsZV09XCJ7XG4gICAgJ21heC1oZWlnaHQucHgnOiAhaXNWaXJ0dWFsU2Nyb2xsRW5hYmxlZCgpID8gbWVyZ2VkQ29uZmlnLmRpc3BsYXk/Lm1heEhlaWdodCA6IG51bGxcbiAgfVwiXG4gIHN0S2V5Ym9hcmROYXZpZ2F0aW9uXG4gIFt0YWJsZVN0YXRlXT1cImdldEFjdGl2ZVRhYmxlU3RhdGUoKVwiXG4gIFthZGRSb3dPbk5hdmlnYXRlUGFzdEVuZF09XCJtZXJnZWRDb25maWcuZmVhdHVyZXM/LmtleWJvYXJkTmF2aWdhdGlvbj8uYWRkUm93T25OYXZpZ2F0ZVBhc3RFbmQgfHwgZmFsc2VcIlxuICBbYXR0ci50YWJpbmRleF09XCJpc0tleWJvYXJkTmF2aWdhdGlvbkVuYWJsZWQoKSA/IDAgOiAtMVwiXG4gIChmb2N1cyk9XCJvblRhYmxlQ29udGFpbmVyRm9jdXMoJGV2ZW50KVwiXG4gIFthdHRyLnRpdGxlXT1cImlzS2V5Ym9hcmROYXZpZ2F0aW9uRW5hYmxlZCgpID8gJ0NsaWNrIGEgY2VsbCBvciBwcmVzcyBUYWIgdG8gc3RhcnQga2V5Ym9hcmQgbmF2aWdhdGlvbicgOiBudWxsXCI+XG4gIDwhLS0gVW5pZmllZCBUYWJsZSBBY3Rpb25zIE1lbnUgLS0+XG5cbiAgPCEtLSBWaXJ0dWFsIHNjcm9sbCB2aWV3cG9ydCB3cmFwcGVyIC0tPlxuICA8ZGl2IGNsYXNzPVwic3Qtc2Nyb2xsLXZpZXdwb3J0XCIgI3Njcm9sbFZpZXdwb3J0ICpuZ0lmPVwiaXNWaXJ0dWFsU2Nyb2xsRW5hYmxlZCgpXCJcbiAgICBbbmdTdHlsZV09XCJ7ICdoZWlnaHQucHgnOiBnZXRWaXJ0dWFsU2Nyb2xsVmlld3BvcnRIZWlnaHQoKSB9XCI+XG5cbiAgICA8IS0tIFNwYWNlciB0byBjcmVhdGUgc2Nyb2xsYWJsZSBhcmVhIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzdC1zY3JvbGwtc3BhY2VyXCIgW25nU3R5bGVdPVwieyAnaGVpZ2h0LnB4JzogdmlydHVhbFNjcm9sbFRvdGFsSGVpZ2h0JCB8IGFzeW5jIH1cIj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVGFibGUgcG9zaXRpb25lciB3aXRoIHRyYW5zZm9ybSAoaW5zdGVhZCBvZiB0Ym9keSkgLS0+XG4gICAgPGRpdiBjbGFzcz1cInN0LXRhYmxlLXBvc2l0aW9uZXJcIiBbbmdTdHlsZV09XCJ7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoJyArICh2aXJ0dWFsU2Nyb2xsT2Zmc2V0WSQgfCBhc3luYykgKyAncHgpJyB9XCI+XG4gICAgICA8IS0tIFRhYmxlIHdpdGggb25seSB2aXNpYmxlIHJvd3MgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGVUZW1wbGF0ZTsgY29udGV4dDogeyBcbiAgICAgICAgbW9kZTogJ3ZpcnR1YWwnLFxuICAgICAgICB0aGVhZFN0eWxlOiB7IHRvcDogKHZpcnR1YWxTY3JvbGxPZmZzZXRZTmVnJCB8IGFzeW5jKSArICdweCcgfVxuICAgICAgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgXG4gIDwhLS0gU3RhbmRhcmQgdGFibGUgKHdoZW4gdmlydHVhbCBzY3JvbGwgZGlzYWJsZWQpIC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVmlydHVhbFNjcm9sbEVuYWJsZWQoKVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJsZVRlbXBsYXRlOyBjb250ZXh0OiB7IFxuICAgICAgbW9kZTogJ3N0YW5kYXJkJyxcbiAgICAgIHRoZWFkU3R5bGU6IG51bGxcbiAgICB9XCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gU2hhcmVkIENvbHVtbiBNZW51IERyb3Bkb3duIC0tPlxuICA8c3QtY29sdW1uLW1lbnUtZHJvcGRvd24gXG4gIFtpc09wZW5dPVwiY29sdW1uTWVudVN0YXRlLmlzT3BlblwiXG4gIFtwb3NpdGlvbl09XCJjb2x1bW5NZW51U3RhdGUucG9zaXRpb25cIlxuICBbY29udGV4dF09XCJjb2x1bW5NZW51U3RhdGUuY29udGV4dFwiXG4gIChhY3Rpb25DbGlja2VkKT1cIm9uQ29sdW1uQWN0aW9uQ2xpY2tlZCgkZXZlbnQpXCJcbiAgKGNsb3NlZCk9XCJjbG9zZUNvbHVtbk1lbnUoKVwiPlxuICA8L3N0LWNvbHVtbi1tZW51LWRyb3Bkb3duPlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIobWVyZ2VkQ29uZmlnLnRhYmxlU2tlbGV0b24/LmVuYWJsZWQgfCBhc3luYylcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNrZWxldG9uTG9hZGVyXCI+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPCEtLSBTaGFyZWQgUm93IEFjdGlvbnMgRHJvcGRvd24gLS0+XG48c3Qtcm93LWFjdGlvbnMtZHJvcGRvd24gW2lzT3Blbl09XCJkcm9wZG93blN0YXRlLmlzT3BlblwiIFtwb3NpdGlvbl09XCJkcm9wZG93blN0YXRlLnBvc2l0aW9uXCJcbiAgW2NvbnRleHRdPVwiZHJvcGRvd25TdGF0ZS5jb250ZXh0XCIgKGFjdGlvbkNsaWNrZWQpPVwib25Sb3dBY3Rpb25DbGlja2VkKCRldmVudClcIiAoY2xvc2VkKT1cImNsb3NlUm93QWN0aW9uc0Ryb3Bkb3duKClcIj5cbjwvc3Qtcm93LWFjdGlvbnMtZHJvcGRvd24+XG5cblxuPCEtLSBCb3R0b20gcGFnaW5hdGlvbiBjb250cm9scyAtLT5cbjxzdC1wYWdpbmF0aW9uIFxuICAqbmdJZj1cInNob3dCb3R0b21QYWdpbmF0aW9uKCkgJiYgIShtZXJnZWRDb25maWcudGFibGVTa2VsZXRvbj8uZW5hYmxlZCB8IGFzeW5jKVwiIFxuICBbdGFibGVTdGF0ZV09XCJnZXRBY3RpdmVUYWJsZVN0YXRlKClcIlxuICBbdGFibGVDb25maWddPVwibWVyZ2VkQ29uZmlnXCJcbiAgcG9zaXRpb249XCJib3R0b21cIj5cbjwvc3QtcGFnaW5hdGlvbj5cblxuXG4gIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPlxuICA8IS0tIFJFVVNBQkxFIFRBQkxFIFRFTVBMQVRFIC0tPlxuICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT5cbiAgPG5nLXRlbXBsYXRlICN0YWJsZVRlbXBsYXRlIGxldC1tb2RlPVwibW9kZVwiIGxldC10aGVhZFN0eWxlPVwidGhlYWRTdHlsZVwiPlxuICAgIDx0YWJsZSBjbGFzcz1cInN0LXRhYmxlLWVsZW1lbnRcIj5cbiAgICAgIDwhLS0gVEFCTEUgSEVBREVSIC0tPlxuICAgICAgPHRoZWFkIFtuZ0NsYXNzXT1cInsgJ3N0aWNreSc6IG1lcmdlZENvbmZpZy5kaXNwbGF5Py5zdGlja3lIZWFkZXIgfVwiIFtuZ1N0eWxlXT1cInRoZWFkU3R5bGVcIj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDwhLS0gUm93IE51bWJlciBIZWFkZXIgLS0+XG4gICAgICAgICAgPHRoICpuZ0lmPVwibWVyZ2VkQ29uZmlnLnNob3dSb3dOdW1iZXJcIiBjbGFzcz1cInJvdy1udW1iZXItaGVhZGVyIGhlYWRlci1jZWxsIHN0aWNreS1sZWZ0XCJcbiAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnc3RpY2t5JyxcbiAgICAgICAgICAgICAgICAnbGVmdC5weCc6IDAsXG4gICAgICAgICAgICAgICAgJ3otaW5kZXgnOiBaSW5kZXguU1RJQ0tZX0hFQURFUl9DRUxMLFxuICAgICAgICAgICAgICAgICd3aWR0aC5weCc6IDMwXG4gICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICNcbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDwhLS0gQ29sdW1uIEhlYWRlcnMgLS0+XG4gICAgICAgICAgPHRoIFxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiB2aXNpYmxlQ29sdW1uczsgbGV0IGNvbEluZGV4ID0gaW5kZXg7IGxldCBpc0ZpcnN0ID0gZmlyc3Q7IGxldCBpc0xhc3QgPSBsYXN0XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2hlYWRlci1jZWxsJzogbW9kZSA9PT0gJ3N0YW5kYXJkJyxcbiAgICAgICAgICAgICAgJ3N0aWNreS1sZWZ0JzogY29sdW1uLnN0aWNreSA9PT0gJ2xlZnQnLFxuICAgICAgICAgICAgICAnc3RpY2t5LXJpZ2h0JzogY29sdW1uLnN0aWNreSA9PT0gJ3JpZ2h0JyxcbiAgICAgICAgICAgICAgJ3N0aWNreS1yaWdodC1maXJzdCc6IGNvbHVtbi5zdGlja3kgPT09ICdyaWdodCcgJiYgaXNGaXJzdFN0aWNreVJpZ2h0KGNvbHVtbi5rZXkpLFxuICAgICAgICAgICAgICAncmVzaXphYmxlJzogY29sdW1uLnJlc2l6YWJsZSAhPT0gZmFsc2VcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICBwb3NpdGlvbjogY29sdW1uLnN0aWNreSA/ICdzdGlja3knIDogbnVsbCxcbiAgICAgICAgICAgICAgJ2xlZnQucHgnOiBjb2x1bW4uc3RpY2t5ID09PSAnbGVmdCcgPyAoY29sdW1uLnN0aWNreU9mZnNldCB8fCAwKSA6IG51bGwsXG4gICAgICAgICAgICAgICdyaWdodC5weCc6IGNvbHVtbi5zdGlja3kgPT09ICdyaWdodCcgPyAoY29sdW1uLnN0aWNreU9mZnNldCB8fCAwKSA6IG51bGwsXG4gICAgICAgICAgICAgICd6LWluZGV4JzogY29sdW1uLnN0aWNreSA/IFpJbmRleC5TVElDS1lfSEVBREVSX0NFTEwgOiBudWxsLFxuICAgICAgICAgICAgICAnd2lkdGgucHgnOiBjb2x1bW4ud2lkdGhcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPHN0LWhlYWRlciBcbiAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgICBbY29sdW1uSW5kZXhdPVwiY29sSW5kZXhcIlxuICAgICAgICAgICAgICBbaXNGaXJzdENvbHVtbl09XCJpc0ZpcnN0XCJcbiAgICAgICAgICAgICAgW2lzTGFzdENvbHVtbl09XCJpc0xhc3RcIlxuICAgICAgICAgICAgICBbdGFibGVTdGF0ZV09XCJnZXRBY3RpdmVUYWJsZVN0YXRlKClcIlxuICAgICAgICAgICAgICBbZW5hYmxlU29ydGluZ109XCJtZXJnZWRDb25maWcuc29ydGluZz8uZW5hYmxlZCA/PyBlbmFibGVTb3J0aW5nXCJcbiAgICAgICAgICAgICAgW2VuYWJsZUZpbHRlcmluZ109XCJtZXJnZWRDb25maWcuZmlsdGVyaW5nPy5lbmFibGVkID8/IGVuYWJsZUZpbHRlcmluZ1wiXG4gICAgICAgICAgICAgIChjb2x1bW5Nb3ZlZCk9XCJvbkNvbHVtbk1vdmVkKCRldmVudClcIlxuICAgICAgICAgICAgICAobWVudUNsaWNrKT1cIm9wZW5Db2x1bW5NZW51KCRldmVudCwgY29sdW1uLCBjb2xJbmRleCwgaXNGaXJzdCwgaXNMYXN0KVwiPlxuICAgICAgICAgICAgPC9zdC1oZWFkZXI+XG5cbiAgICAgICAgICAgIDxkaXYgXG4gICAgICAgICAgICAgIGNsYXNzPVwicmVzaXplLWhhbmRsZVwiIFxuICAgICAgICAgICAgICBzdENvbHVtblJlc2l6ZVxuICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICAgIChjb2x1bW5SZXNpemVkKT1cIm9uQ29sdW1uUmVzaXplZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4ucmVzaXphYmxlICE9PSBmYWxzZVwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICBcbiAgICAgICAgICA8IS0tIFNldHRpbmdzIENvbHVtbiBIZWFkZXIgLS0+XG4gICAgICAgICAgPHRoIFxuICAgICAgICAgICAgY2xhc3M9XCJzZXR0aW5ncy1jb2x1bW4gc3RpY2t5LXJpZ2h0XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2hlYWRlci1jZWxsJzogbW9kZSA9PT0gJ3N0YW5kYXJkJyB9XCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgJ3otaW5kZXgnOiBaSW5kZXguU1RJQ0tZX0hFQURFUl9DRUxMIH1cIj5cbiAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAnZmxleC1jZW50ZXInOiBtb2RlID09PSAndmlydHVhbCcsICdoZWFkZXItY29udGVudCc6IG1vZGUgPT09ICdzdGFuZGFyZCcgfVwiPlxuICAgICAgICAgICAgICA8c3QtdGFibGUtYWN0aW9ucyBcbiAgICAgICAgICAgICAgICBbdGFibGVTdGF0ZV09XCJnZXRBY3RpdmVUYWJsZVN0YXRlKClcIlxuICAgICAgICAgICAgICAgIFthbGxvd0FkZENvbHVtbl09XCJtZXJnZWRDb25maWcuZmVhdHVyZXM/LmNvbHVtbk1hbmFnZW1lbnQ/LmFsbG93QWRkIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAoYWRkQ29sdW1uQ2xpY2tlZCk9XCJvbkFkZENvbHVtbkNsaWNrKClcIj5cbiAgICAgICAgICAgICAgPC9zdC10YWJsZS1hY3Rpb25zPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG5cbiAgICAgIDwhLS0gVEFCTEUgQk9EWSAtLT5cbiAgICAgIDx0Ym9keT5cbiAgICAgICAgPCEtLSBWaXJ0dWFsIFNjcm9sbCBSb3dzIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ3ZpcnR1YWwnXCI+XG4gICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2YgdmlzaWJsZVJvd3MkIHwgYXN5bmM7IGxldCByZWxhdGl2ZUluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlSb3dJbmRleFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXJvdy1pbmRleF09XCJnZXRBYnNvbHV0ZVJvd0luZGV4KHJlbGF0aXZlSW5kZXgpXCI+XG4gICAgICAgICAgICA8IS0tIFJvdyBOdW1iZXIgQ2VsbCAtLT5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cIm1lcmdlZENvbmZpZy5zaG93Um93TnVtYmVyXCIgY2xhc3M9XCJyb3ctbnVtYmVyLWNlbGxcIiBcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnc3RpY2t5LWxlZnQnOiAnbGVmdCcgfVwiXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAnd2lkdGgucHgnOiAzMCxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3N0aWNreScsXG4gICAgICAgICAgICAgICAgJ2xlZnQucHgnOiAwLFxuICAgICAgICAgICAgICAgICd6LWluZGV4JzogWkluZGV4LlNUSUNLWV9CT0RZX0NFTEwsXG4gICAgICAgICAgICAgICAgJ2hlaWdodC5weCc6IG1vZGUgPT09ICd2aXJ0dWFsJyA/IGdldFZpcnR1YWxTY3JvbGxJdGVtU2l6ZSgpIDogbnVsbFxuICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgIHt7Z2V0QWJzb2x1dGVSb3dJbmRleChyZWxhdGl2ZUluZGV4KSArIDF9fVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib2R5Q2VsbFRlbXBsYXRlOyBjb250ZXh0OiB7IFxuICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgcm93SW5kZXg6IGdldEFic29sdXRlUm93SW5kZXgocmVsYXRpdmVJbmRleCksXG4gICAgICAgICAgICAgIG1vZGU6ICd2aXJ0dWFsJyxcbiAgICAgICAgICAgICAgcmVsYXRpdmVJbmRleDogcmVsYXRpdmVJbmRleFxuICAgICAgICAgICAgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gU3RhbmRhcmQgUm93cyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGUgPT09ICdzdGFuZGFyZCdcIj5cbiAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiB2aXNpYmxlQ2VsbEdyaWQ7IGxldCByb3dJbmRleCA9IGluZGV4XCIgW2F0dHIuZGF0YS1yb3ctaW5kZXhdPVwicm93SW5kZXhcIj5cbiAgICAgICAgICAgIDwhLS0gUm93IE51bWJlciBDZWxsIC0tPlxuICAgICAgICAgICAgPHRkICpuZ0lmPVwibWVyZ2VkQ29uZmlnLnNob3dSb3dOdW1iZXJcIiBjbGFzcz1cInJvdy1udW1iZXItY2VsbFwiIFxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzdGlja3ktbGVmdCc6ICdsZWZ0JyB9XCJcbiAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICd3aWR0aC5weCc6IDMwLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnc3RpY2t5JyxcbiAgICAgICAgICAgICAgICAnbGVmdC5weCc6IDAsXG4gICAgICAgICAgICAgICAgJ3otaW5kZXgnOiBaSW5kZXguU1RJQ0tZX0JPRFlfQ0VMTCxcbiAgICAgICAgICAgICAgICAnaGVpZ2h0LnB4JzogbW9kZSA9PT0gJ3ZpcnR1YWwnID8gZ2V0VmlydHVhbFNjcm9sbEl0ZW1TaXplKCkgOiBudWxsXG4gICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAge3tyb3dJbmRleCArIDF9fVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib2R5Q2VsbFRlbXBsYXRlOyBjb250ZXh0OiB7IFxuICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgcm93SW5kZXg6IHJvd0luZGV4LFxuICAgICAgICAgICAgICBtb2RlOiAnc3RhbmRhcmQnXG4gICAgICAgICAgICB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT5cbiAgPCEtLSBSRVVTQUJMRSBCT0RZIENFTEwgVEVNUExBVEUgLS0+XG4gIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPlxuICA8bmctdGVtcGxhdGUgI2JvZHlDZWxsVGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCIgbGV0LW1vZGU9XCJtb2RlXCIgbGV0LXJlbGF0aXZlSW5kZXg9XCJyZWxhdGl2ZUluZGV4XCI+XG4gICAgPCEtLSBEYXRhIENlbGxzIC0tPlxuICAgIDx0ZCBcbiAgICAgICpuZ0Zvcj1cImxldCBjZWxsIG9mIHJvdzsgbGV0IGNvbEluZGV4ID0gaW5kZXhcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnc3RpY2t5LWxlZnQnOiB2aXNpYmxlQ29sdW1uc1tjb2xJbmRleF0/LnN0aWNreSA9PT0gJ2xlZnQnLFxuICAgICAgICAnc3RpY2t5LXJpZ2h0JzogdmlzaWJsZUNvbHVtbnNbY29sSW5kZXhdPy5zdGlja3kgPT09ICdyaWdodCcsXG4gICAgICAgICdzdGlja3ktcmlnaHQtZmlyc3QnOiB2aXNpYmxlQ29sdW1uc1tjb2xJbmRleF0/LnN0aWNreSA9PT0gJ3JpZ2h0JyAmJiB2aXNpYmxlQ29sdW1uc1tjb2xJbmRleF0/LmtleSAmJiBpc0ZpcnN0U3RpY2t5UmlnaHQodmlzaWJsZUNvbHVtbnNbY29sSW5kZXhdLmtleSksXG4gICAgICAgICdhbGlnbi1jZW50ZXInOiB2aXNpYmxlQ29sdW1uc1tjb2xJbmRleF0/LmFsaWdubWVudCA9PT0gJ2NlbnRlcicsXG4gICAgICAgICdhbGlnbi1yaWdodCc6IHZpc2libGVDb2x1bW5zW2NvbEluZGV4XT8uYWxpZ25tZW50ID09PSAncmlnaHQnLFxuICAgICAgICAnY2VsbC1mb2N1c2VkJzogY2VsbC5pc0ZvY3VzZWQoKVxuICAgICAgfVwiXG4gICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgIHBvc2l0aW9uOiB2aXNpYmxlQ29sdW1uc1tjb2xJbmRleF0/LnN0aWNreSA/ICdzdGlja3knIDogbnVsbCxcbiAgICAgICAgJ2xlZnQucHgnOiB2aXNpYmxlQ29sdW1uc1tjb2xJbmRleF0/LnN0aWNreSA9PT0gJ2xlZnQnID8gKHZpc2libGVDb2x1bW5zW2NvbEluZGV4XT8uc3RpY2t5T2Zmc2V0IHx8IDApIDogbnVsbCxcbiAgICAgICAgJ3JpZ2h0LnB4JzogdmlzaWJsZUNvbHVtbnNbY29sSW5kZXhdPy5zdGlja3kgPT09ICdyaWdodCcgPyAodmlzaWJsZUNvbHVtbnNbY29sSW5kZXhdPy5zdGlja3lPZmZzZXQgfHwgMCkgOiBudWxsLFxuICAgICAgICAnei1pbmRleCc6IHZpc2libGVDb2x1bW5zW2NvbEluZGV4XT8uc3RpY2t5ID8gWkluZGV4LlNUSUNLWV9CT0RZX0NFTEwgOiBudWxsLFxuICAgICAgICAnd2lkdGgucHgnOiB2aXNpYmxlQ29sdW1uc1tjb2xJbmRleF0/LndpZHRoLFxuICAgICAgICAnaGVpZ2h0LnB4JzogbW9kZSA9PT0gJ3ZpcnR1YWwnID8gZ2V0VmlydHVhbFNjcm9sbEl0ZW1TaXplKCkgOiBudWxsXG4gICAgICB9XCJcbiAgICAgIChjbGljayk9XCJpc0tleWJvYXJkTmF2aWdhdGlvbkVuYWJsZWQoKSA/IG9uQ2VsbENsaWNrKHJvd0luZGV4LCBjb2xJbmRleCkgOiBudWxsXCI+XG4gICAgICBcbiAgICAgIDwhLS0gVmlydHVhbCBTY3JvbGwgQ2VsbCAtLT5cbiAgICAgIDxzdC1jZWxsIFxuICAgICAgICAqbmdJZj1cIm1vZGUgPT09ICd2aXJ0dWFsJ1wiXG4gICAgICAgIFtjZWxsXT1cImNlbGxcIiBcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiY2VsbC5pc0ZvY3VzZWQoKSA/IDAgOiAtMVwiIFxuICAgICAgICBbZWRpdE1vZGVdPVwiZ2V0RWRpdE1vZGVGb3JDZWxscygpXCJcbiAgICAgICAgW3RhYmxlU3RhdGVdPVwiZ2V0QWN0aXZlVGFibGVTdGF0ZSgpXCJcbiAgICAgICAgW3RhYmxlQ29uZmlnXT1cIm1lcmdlZENvbmZpZ1wiXG4gICAgICAgIFtjb2x1bW5JbmRleF09XCJjb2xJbmRleFwiXG4gICAgICAgIChjZWxsRWRpdCk9XCJvbkNlbGxFZGl0KCRldmVudClcIiBcbiAgICAgICAgKGNlbGxTYXZlKT1cIm9uQ2VsbFNhdmUoJGV2ZW50KVwiXG4gICAgICAgIChjZWxsU2F2ZUFuZE5hdmlnYXRlKT1cIm9uQ2VsbFNhdmVBbmROYXZpZ2F0ZSgkZXZlbnQpXCIgXG4gICAgICAgIChjZWxsQ2FuY2VsKT1cIm9uQ2VsbENhbmNlbCgkZXZlbnQpXCJcbiAgICAgICAgKGNlbGxDaGFuZ2UpPVwiY2VsbENoYW5nZS5lbWl0KCRldmVudClcIj5cbiAgICAgIDwvc3QtY2VsbD5cblxuICAgICAgPCEtLSBTdGFuZGFyZCBDZWxsIC0tPlxuICAgICAgPHN0LWNlbGwgXG4gICAgICAgICpuZ0lmPVwibW9kZSA9PT0gJ3N0YW5kYXJkJ1wiXG4gICAgICAgIFtjZWxsXT1cImNlbGxcIiAgXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cImNlbGwuaXNGb2N1c2VkKCkgPyAwIDogLTFcIlxuICAgICAgICBbdGFibGVTdGF0ZV09XCJnZXRBY3RpdmVUYWJsZVN0YXRlKClcIlxuICAgICAgICBbdGFibGVDb25maWddPVwibWVyZ2VkQ29uZmlnXCJcbiAgICAgICAgW2NvbHVtbkluZGV4XT1cImNvbEluZGV4XCJcbiAgICAgICAgKGNlbGxTYXZlKT1cIm9uQ2VsbFNhdmUoJGV2ZW50KVwiXG4gICAgICAgIChjZWxsQ2hhbmdlKT1cImNlbGxDaGFuZ2UuZW1pdCgkZXZlbnQpXCI+XG4gICAgICA8L3N0LWNlbGw+XG4gICAgPC90ZD5cbiAgICBcbiAgICA8IS0tIFJvdyBBY3Rpb25zIENlbGwgLS0+XG4gICAgPHRkIGNsYXNzPVwic2V0dGluZ3MtY29sdW1uXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2hhcy1hY3Rpb25zJzogaGFzUm93QWN0aW9ucygpXG4gICAgICB9XCJcbiAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgcG9zaXRpb246IGhhc1Jvd0FjdGlvbnMoKSA/ICdzdGlja3knIDogbnVsbCxcbiAgICAgICAgJ3JpZ2h0LnB4JzogaGFzUm93QWN0aW9ucygpID8gMCA6IG51bGwsXG4gICAgICAgICd6LWluZGV4JzogaGFzUm93QWN0aW9ucygpID8gWkluZGV4LlNUSUNLWV9CT0RZX0NFTEwgOiBudWxsXG4gICAgICB9XCI+XG4gICAgICA8YnV0dG9uIFxuICAgICAgICAqbmdJZj1cImhhc1Jvd0FjdGlvbnMoKVwiXG4gICAgICAgIGNsYXNzPVwic2V0dGluZ3MtdHJpZ2dlclwiXG4gICAgICAgIChjbGljayk9XCJvcGVuUm93QWN0aW9uc0Ryb3Bkb3duKCRldmVudCwgZ2V0Um93RGF0YShyb3dJbmRleCksIHJvd0luZGV4KVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgYXJpYS1sYWJlbD1cIlJvdyBhY3Rpb25zXCI+XG4gICAgICAgIOKLr1xuICAgICAgPC9idXR0b24+XG4gICAgPC90ZD5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNza2VsZXRvbkxvYWRlcj5cbiAgPGRpdiBjbGFzcz1cImxpc3Qtcm93XCIgKm5nSWY9XCIobWVyZ2VkQ29uZmlnLnRhYmxlU2tlbGV0b24/LmVuYWJsZWQgfCBhc3luYylcIj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpIG9mIHNrZWxldG9uQ29sdW1uc1wiIGNsYXNzPVwibGlzdC1jb250ZW50XCI+XG4gICAgICA8bmlsZS1za2VsZXRvbi1sb2FkZXIgdmFyaWFudD1cInRleHRcIiB3aWR0aD1cIjkwJVwiIGhlaWdodD1cIjE4XCIgKm5nRm9yPVwibGV0IGogb2Ygc2tlbGV0b25Sb3dzXCI+PC9uaWxlLXNrZWxldG9uLWxvYWRlcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPiJdfQ==