@aquera/ngx-smart-table 0.0.12-alpha → 0.0.14-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/editors/nile-select-editor.mjs +143 -21
- package/esm2020/lib/renderer/components/st-cell/st-cell.component.mjs +2 -2
- package/esm2020/lib/renderer/components/st-table/st-table.component.mjs +44 -1
- package/esm2020/lib/renderer/components/st-workbook/st-workbook.component.mjs +30 -4
- package/fesm2015/aquera-ngx-smart-table.mjs +217 -25
- package/fesm2015/aquera-ngx-smart-table.mjs.map +1 -1
- package/fesm2020/aquera-ngx-smart-table.mjs +214 -24
- package/fesm2020/aquera-ngx-smart-table.mjs.map +1 -1
- package/lib/editors/nile-select-editor.d.ts +7 -0
- package/lib/renderer/components/st-table/st-table.component.d.ts +11 -0
- package/lib/renderer/components/st-workbook/st-workbook.component.d.ts +16 -0
- package/package.json +1 -1
|
@@ -1172,6 +1172,49 @@ export class StTableComponent {
|
|
|
1172
1172
|
scrollContainer.scrollTop += (cellRect.bottom - visibleBottom);
|
|
1173
1173
|
}
|
|
1174
1174
|
}
|
|
1175
|
+
/**
|
|
1176
|
+
* Scroll to a specific row by index and optionally focus it
|
|
1177
|
+
* @param rowIndex - The index of the row to scroll to
|
|
1178
|
+
* @param focusFirstCell - Whether to focus the first editable cell (default: false)
|
|
1179
|
+
*/
|
|
1180
|
+
scrollToRowAndFocus(rowIndex, focusFirstCell = false) {
|
|
1181
|
+
setTimeout(() => {
|
|
1182
|
+
const hostElement = this.elementRef?.nativeElement;
|
|
1183
|
+
if (!hostElement)
|
|
1184
|
+
return;
|
|
1185
|
+
// Find the target row
|
|
1186
|
+
const rows = hostElement.querySelectorAll('tbody tr');
|
|
1187
|
+
const targetRow = rows[rowIndex];
|
|
1188
|
+
if (targetRow) {
|
|
1189
|
+
// Scroll the row into view
|
|
1190
|
+
targetRow.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
|
1191
|
+
// Optionally focus the first editable cell
|
|
1192
|
+
if (focusFirstCell) {
|
|
1193
|
+
const cells = targetRow.querySelectorAll('td:not(.settings-column):not(.row-number-cell)');
|
|
1194
|
+
const firstCell = cells[0];
|
|
1195
|
+
if (firstCell && typeof firstCell.focus === 'function') {
|
|
1196
|
+
setTimeout(() => {
|
|
1197
|
+
firstCell.focus();
|
|
1198
|
+
// Update table state focus position
|
|
1199
|
+
if (this.tableState) {
|
|
1200
|
+
this.tableState.focusCell(rowIndex, 0);
|
|
1201
|
+
}
|
|
1202
|
+
}, 100);
|
|
1203
|
+
}
|
|
1204
|
+
}
|
|
1205
|
+
}
|
|
1206
|
+
}, 0);
|
|
1207
|
+
}
|
|
1208
|
+
/**
|
|
1209
|
+
* Scroll to the last row in the table
|
|
1210
|
+
* @param focusFirstCell - Whether to focus the first editable cell (default: true)
|
|
1211
|
+
*/
|
|
1212
|
+
scrollToLastRow(focusFirstCell = true) {
|
|
1213
|
+
const rowCount = this.data?.length || 0;
|
|
1214
|
+
if (rowCount > 0) {
|
|
1215
|
+
this.scrollToRowAndFocus(rowCount - 1, focusFirstCell);
|
|
1216
|
+
}
|
|
1217
|
+
}
|
|
1175
1218
|
/**
|
|
1176
1219
|
* Get the scroll container element
|
|
1177
1220
|
*/
|
|
@@ -1384,4 +1427,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
1384
1427
|
type: HostListener,
|
|
1385
1428
|
args: ['document:click', ['$event']]
|
|
1386
1429
|
}] } });
|
|
1387
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9yZW5kZXJlci9jb21wb25lbnRzL3N0LXRhYmxlL3N0LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvcmVuZGVyZXIvY29tcG9uZW50cy9zdC10YWJsZS9zdC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUErQyxTQUFTLEVBQUUsVUFBVSxFQUFpQixZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEssT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEVBQWUsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV2RixPQUFPLEVBQWtFLFFBQVEsRUFBdUIsTUFBTSw0QkFBNEIsQ0FBQztBQUMzSSxPQUFPLEVBQUUsZUFBZSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUNqRSxPQUFPLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFRekQsTUFBTSxPQUFPLGdCQUFnQjtJQThIM0IsWUFDVSxlQUEyQyxFQUMzQyxNQUErQixFQUMvQixvQkFBMEMsRUFDMUMsVUFBbUM7UUFIbkMsb0JBQWUsR0FBZixlQUFlLENBQTRCO1FBQzNDLFdBQU0sR0FBTixN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QUNyQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEMsQ0FBQzs7NkdBOWlEVSxnQkFBZ0I7aUdBQWhCLGdCQUFnQiw4eUJBNEhVLFVBQVUsa0RDcEpqRCxrOVhBOFJjOzJGRHRRRCxnQkFBZ0I7a0JBTDVCLFNBQVM7K0JBQ0UsVUFBVTttTkFTWCxXQUFXO3NCQUFuQixLQUFLO2dCQUdHLElBQUk7c0JBQVosS0FBSztnQkFHRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR0ksV0FBVztzQkFBcEIsTUFBTTtnQkFHRyxVQUFVO3NCQUFuQixNQUFNO2dCQUdHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUdHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFHRyxXQUFXO3NCQUFwQixNQUFNO2dCQUdHLFNBQVM7c0JBQWxCLE1BQU07Z0JBR0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUdHLGFBQWE7c0JBQXRCLE1BQU07Z0JBR0UsY0FBYztzQkFBdEIsS0FBSztnQkEyRTZDLGNBQWM7c0JBQWhFLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQTY1Q2pELGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEFmdGVyVmlld0luaXQsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29sdW1uQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NvbHVtbi1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IENlbGwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2VsbC5jbGFzcyc7XG5pbXBvcnQgeyBUYWJsZVN0YXRlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLXN0YXRlLmNsYXNzJztcbmltcG9ydCB7IFRhYmxlQ29uZmlnLCBtZXJnZVRhYmxlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3RhYmxlLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGFibGVTdGF0ZUNoYW5nZUV2ZW50LCBDb2x1bW5SZXNpemVFdmVudCwgQ29sdW1uQWRkRXZlbnQsIENvbHVtbk1vdmVFdmVudCwgQ2VsbEZvY3VzUG9zaXRpb24sIERhdGFDaGFuZ2VFdmVudCB9IGZyb20gJy4uLy4uL21vZGVscy90YWJsZS10eXBlcyc7XG5pbXBvcnQgeyBDZWxsQ2hhbmdlRXZlbnQsIENlbGxTYXZlRXZlbnQsIENlbGxFZGl0RXZlbnQsIENlbGxDYW5jZWxFdmVudCwgRWRpdE1vZGUsIE5hdmlnYXRpb25EaXJlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvY2VsbC10eXBlcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEpzb25TY2hlbWFWYWxpZGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvanNvbi1zY2hlbWEtdmFsaWRhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NoZW1hVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3NjaGVtYS12YWxpZGF0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24tbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmlydHVhbFNjcm9sbFNlcnZpY2UsIFZpcnR1YWxTY3JvbGxTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3ZpcnR1YWwtc2Nyb2xsLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm93QWN0aW9uLCBSb3dBY3Rpb25Db250ZXh0LCBSb3dBY3Rpb25FdmVudCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9yb3ctYWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb2x1bW5BY3Rpb24sIENvbHVtbkFjdGlvbkNvbnRleHQsIENvbHVtbkFjdGlvbkV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NvbHVtbi1hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFRhYmxlWkluZGV4IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3otaW5kZXguZW51bSc7XG5pbXBvcnQgeyBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLXR5cGVzJztcbmltcG9ydCB7IFRhYmxlVmFsaWRhdGlvblN0YXRlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLXZhbGlkYXRpb24tc3RhdGUuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3QtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3QtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdC10YWJsZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFN0VGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgLy8gWi1JbmRleCBjb25zdGFudHMgZm9yIHRlbXBsYXRlIHVzZVxuICByZWFkb25seSBaSW5kZXggPSBUYWJsZVpJbmRleDtcbiAgXG4gIC8vIE5FVzogUHJpbWFyeSBjb25maWd1cmF0aW9uIGlucHV0XG4gIEBJbnB1dCgpIHRhYmxlQ29uZmlnITogVGFibGVDb25maWc7XG4gIFxuICAvLyBORVc6IFJhdyBkYXRhIGlucHV0IChhbHRlcm5hdGl2ZSB0byBjZWxsR3JpZClcbiAgQElucHV0KCkgZGF0YT86IGFueVtdO1xuICBcbiAgLy8gTkVXOiBPYnNlcnZhYmxlL0JlaGF2aW9yU3ViamVjdCBkYXRhIGlucHV0IChmb3IgcmVhY3RpdmUgZGF0YSBzdHJlYW1zKVxuICBASW5wdXQoKSBkYXRhJD86IE9ic2VydmFibGU8YW55W10+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/LnN0YXRlQ2hhbmdlJFxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2UuZW1pdChldmVudCk7XG5cbiAgICAgICAgLy8gVXBkYXRlIHZpc2libGUgY29sdW1ucyBhbmQgY2VsbCBncmlkIG9uIHZpc2liaWxpdHkgY2hhbmdlc1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2NvbHVtbi12aXNpYmlsaXR5JyB8fCBldmVudC50eXBlID09PSAnY29sdW1uLWNvbmZpZycpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVEYXRhKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBleHRlcm5hbCBUYWJsZVN0YXRlIGNoYW5nZXNcbiAgICovXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9FeHRlcm5hbFRhYmxlU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRhYmxlU3RhdGUpIHJldHVybjtcbiAgICBcbiAgICB0aGlzLnN0YXRlU3Vic2NyaXB0aW9uID0gdGhpcy50YWJsZVN0YXRlLnN0YXRlQ2hhbmdlJFxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgICAgIFxuICAgICAgICAvLyBVcGRhdGUgdmlzaWJsZSBjb2x1bW5zIGFuZCBjZWxsIGdyaWQgb24gdmlzaWJpbGl0eSBjaGFuZ2VzXG4gICAgICAgIGlmIChldmVudC50eXBlID09PSAnY29sdW1uLXZpc2liaWxpdHknIHx8IGV2ZW50LnR5cGUgPT09ICdjb2x1bW4tY29uZmlnJykge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZURhdGEoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgXG4gICAgLy8gU3Vic2NyaWJlIHRvIHZhbGlkYXRpb24gc3RhdGUgY2hhbmdlcyBhbmQgcmUtZW1pdFxuICAgdGhpcy5zdWJzY3JpYmVUb1ZhbGlkYXRpb25TdGF0ZSgpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ3JlYXRlIGNlbGwgZ3JpZCBmcm9tIHJhdyBkYXRhXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUNlbGxHcmlkRnJvbURhdGEoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRhdGEpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRBY3RpdmVDb2x1bW5zKCk7XG4gICAgdGhpcy5pbnRlcm5hbENlbGxHcmlkID0gdGhpcy5kYXRhLm1hcCgocm93RGF0YSwgcm93SW5kZXgpID0+XG4gICAgICBjb2x1bW5zLm1hcChjb2x1bW4gPT4gXG4gICAgICAgIG5ldyBDZWxsKGNvbHVtbiwgcm93RGF0YVtjb2x1bW4ua2V5XSwgcm93RGF0YSwgcm93SW5kZXgpXG4gICAgICApXG4gICAgKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFNldHVwIGRhdGEgc291cmNlIC0gZWl0aGVyIHN5bmMgYXJyYXkgb3IgYXN5bmMgT2JzZXJ2YWJsZVxuICAgKiBIYW5kbGVzIGluaXRpYWxpemF0aW9uIGFuZCBzdWJzY3JpcHRpb24gdG8gZGF0YSBjaGFuZ2VzXG4gICAqL1xuICBwcml2YXRlIHNldHVwRGF0YVNvdXJjZSgpOiB2b2lkIHtcbiAgICAvLyBXYXJuIGlmIGJvdGggZGF0YSBhbmQgZGF0YSQgYXJlIHByb3ZpZGVkXG4gICAgaWYgKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEkKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1N0VGFibGVDb21wb25lbnQ6IEJvdGggZGF0YSBhbmQgZGF0YSQgaW5wdXRzIGFyZSBwcm92aWRlZC4gVXNpbmcgZGF0YSQgKE9ic2VydmFibGUpIGFuZCBpZ25vcmluZyBkYXRhIGFycmF5LicpO1xuICAgIH1cbiAgICBcbiAgICAvLyBDbGVhbiB1cCBleGlzdGluZyBzdWJzY3JpcHRpb25cbiAgICB0aGlzLmRhdGFTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgXG4gICAgLy8gUHJpb3JpdHk6IGRhdGEkIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBkYXRhXG4gICAgaWYgKHRoaXMuZGF0YSQpIHtcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9EYXRhQ2hhbmdlcygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAvLyBGb3Igc3luYyBkYXRhLCBlbWl0IG9uY2UgdGhyb3VnaCBpbnRlcm5hbCBvYnNlcnZhYmxlXG4gICAgICB0aGlzLnByZXZpb3VzRGF0YSA9IFtdO1xuICAgICAgdGhpcy5pbnRlcm5hbERhdGEkLm5leHQodGhpcy5kYXRhKTtcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9EYXRhQ2hhbmdlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBkYXRhIHByb3ZpZGVkLCBlbWl0IGVtcHR5IGFycmF5XG4gICAgICB0aGlzLnByZXZpb3VzRGF0YSA9IFtdO1xuICAgICAgdGhpcy5pbnRlcm5hbERhdGEkLm5leHQoW10pO1xuICAgICAgdGhpcy5zdWJzY3JpYmVUb0RhdGFDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIGRhdGEgY2hhbmdlcyAoZWl0aGVyIGZyb20gZGF0YSQgaW5wdXQgb3IgaW50ZXJuYWwgQmVoYXZpb3JTdWJqZWN0KVxuICAgKi9cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0RhdGFDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGFTb3VyY2UkID0gdGhpcy5kYXRhJCB8fCB0aGlzLmludGVybmFsRGF0YSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgXG4gICAgdGhpcy5kYXRhU3Vic2NyaXB0aW9uID0gZGF0YVNvdXJjZSQuc3Vic2NyaWJlKG5ld0RhdGEgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVEYXRhQ2hhbmdlKG5ld0RhdGEpO1xuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIGRhdGEgY2hhbmdlIGZyb20gT2JzZXJ2YWJsZSBlbWlzc2lvblxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVEYXRhQ2hhbmdlKG5ld0RhdGE6IGFueVtdKTogdm9pZCB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzb3VyY2U6ICdzeW5jJyB8ICdhc3luYycgPSB0aGlzLmRhdGEkID8gJ2FzeW5jJyA6ICdzeW5jJztcbiAgICBcbiAgICAvLyBFbWl0IGRhdGEgY2hhbmdlIGV2ZW50XG4gICAgdGhpcy5kYXRhQ2hhbmdlLmVtaXQoe1xuICAgICAgcHJldmlvdXNEYXRhOiB0aGlzLnByZXZpb3VzRGF0YSxcbiAgICAgIGN1cnJlbnREYXRhOiBuZXdEYXRhLFxuICAgICAgdGltZXN0YW1wLFxuICAgICAgc291cmNlXG4gICAgfSk7XG4gICAgXG4gICAgLy8gVXBkYXRlIGRhdGEgcmVmZXJlbmNlXG4gICAgdGhpcy5kYXRhID0gbmV3RGF0YTtcbiAgICB0aGlzLnByZXZpb3VzRGF0YSA9IFsuLi5uZXdEYXRhXTtcbiAgICBcbiAgICAvLyBSZWNyZWF0ZSBjZWxsIGdyaWRcbiAgICB0aGlzLmNyZWF0ZUNlbGxHcmlkRnJvbURhdGEoKTtcbiAgICBcbiAgICAvLyBVcGRhdGUgdmlzaWJsZSBkYXRhXG4gICAgdGhpcy51cGRhdGVWaXNpYmxlRGF0YSgpO1xuICAgIFxuICAgIC8vIFJlY2FsY3VsYXRlIHZpcnR1YWwgc2Nyb2xsIGlmIGVuYWJsZWRcbiAgICBpZiAodGhpcy5pc1ZpcnR1YWxTY3JvbGxFbmFibGVkKCkpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMudmlydHVhbFNjcm9sbFN0YXRlJC52YWx1ZTtcbiAgICAgIGlmIChjdXJyZW50U3RhdGUpIHtcbiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB0aGlzLnZpcnR1YWxTY3JvbGxTZXJ2aWNlLmNhbGN1bGF0ZVZpc2libGVSYW5nZSh7XG4gICAgICAgICAgc2Nyb2xsVG9wOiBjdXJyZW50U3RhdGUuc2Nyb2xsVG9wLFxuICAgICAgICAgIHZpZXdwb3J0SGVpZ2h0OiB0aGlzLmdldFZpcnR1YWxTY3JvbGxWaWV3cG9ydEhlaWdodCgpLFxuICAgICAgICAgIHRvdGFsSXRlbXM6IHRoaXMudmlzaWJsZUNlbGxHcmlkLmxlbmd0aCxcbiAgICAgICAgICBpdGVtU2l6ZTogdGhpcy5nZXRWaXJ0dWFsU2Nyb2xsSXRlbVNpemUoKSxcbiAgICAgICAgICBidWZmZXJTaXplOiB0aGlzLmdldFZpcnR1YWxTY3JvbGxCdWZmZXJTaXplKClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudmlydHVhbFNjcm9sbFN0YXRlJC5uZXh0KG5ld1N0YXRlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gVXBkYXRlIGtleWJvYXJkIG5hdmlnYXRpb24gZGltZW5zaW9ucyBpZiBlbmFibGVkXG4gICAgaWYgKHRoaXMuaXNLZXlib2FyZE5hdmlnYXRpb25FbmFibGVkKCkpIHtcbiAgICAgIHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpLnNldERpbWVuc2lvbnMoXG4gICAgICAgIHRoaXMudmlzaWJsZUNlbGxHcmlkLmxlbmd0aCxcbiAgICAgICAgdGhpcy52aXNpYmxlQ29sdW1ucy5sZW5ndGhcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIHN5bmMgZGF0YSBjaGFuZ2UgKGZyb20gQElucHV0KCkgZGF0YSBjaGFuZ2VzKVxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVTeW5jRGF0YUNoYW5nZShwcmV2aW91c0RhdGE6IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy5wcmV2aW91c0RhdGEgPSBwcmV2aW91c0RhdGE7XG4gICAgdGhpcy5pbnRlcm5hbERhdGEkLm5leHQodGhpcy5kYXRhIHx8IFtdKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBhY3RpdmUgVGFibGVTdGF0ZSAocHJvdmlkZWQgb3IgaW50ZXJuYWwpXG4gICAqL1xuICBnZXRBY3RpdmVUYWJsZVN0YXRlKCk6IFRhYmxlU3RhdGUge1xuICAgIHJldHVybiB0aGlzLnRhYmxlU3RhdGUgfHwgdGhpcy5pbnRlcm5hbFRhYmxlU3RhdGUhO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGFjdGl2ZSBjZWxsIGdyaWQgKHByb3ZpZGVkIG9yIGludGVybmFsKVxuICAgKi9cbiAgZ2V0QWN0aXZlQ2VsbEdyaWQoKTogQ2VsbDxhbnk+W11bXSB7XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxDZWxsR3JpZCB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdmlzaWJsZSBjZWxsIGdyaWQgKGZpbHRlcmVkIHRvIG9ubHkgaW5jbHVkZSB2aXNpYmxlIGNvbHVtbnMpXG4gICAqL1xuICBnZXRWaXNpYmxlQ2VsbEdyaWQoKTogQ2VsbDxhbnk+W11bXSB7XG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuZ2V0QWN0aXZlQ29sdW1ucygpO1xuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gdGhpcy5nZXRWaXNpYmxlQ29sdW1ucygpO1xuICAgIGNvbnN0IHZpc2libGVDb2x1bW5LZXlzID0gbmV3IFNldCh2aXNpYmxlQ29sdW1ucy5tYXAoY29sID0+IGNvbC5rZXkpKTtcbiAgICBcbiAgICAvLyBHZXQgY29sdW1uIGluZGljZXMgZm9yIHZpc2libGUgY29sdW1uc1xuICAgIGNvbnN0IHZpc2libGVJbmRpY2VzID0gYWxsQ29sdW1uc1xuICAgICAgLm1hcCgoY29sLCBpbmRleCkgPT4gdmlzaWJsZUNvbHVtbktleXMuaGFzKGNvbC5rZXkpID8gaW5kZXggOiAtMSlcbiAgICAgIC5maWx0ZXIoaW5kZXggPT4gaW5kZXggIT09IC0xKTtcbiAgICBcbiAgICBjb25zdCBmdWxsR3JpZCA9IHRoaXMuZ2V0QWN0aXZlQ2VsbEdyaWQoKTtcbiAgICByZXR1cm4gZnVsbEdyaWQubWFwKHJvdyA9PiBcbiAgICAgIHZpc2libGVJbmRpY2VzLm1hcChpbmRleCA9PiByb3dbaW5kZXhdKS5maWx0ZXIoY2VsbCA9PiBjZWxsICE9PSB1bmRlZmluZWQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHZpc2libGUgY2VsbCBncmlkIGJhc2VkIG9uIGN1cnJlbnQgdmlzaWJpbGl0eSBhbmQgY29sdW1uIG9yZGVyXG4gICAqIENhbGxlZCB3aGVuIGRhdGEsIHZpc2liaWxpdHksIG9yIGNvbHVtbiBvcmRlciBjaGFuZ2VzXG4gICAqIFxuICAgKiBUaGlzIG1ldGhvZCBwcm9wZXJseSBoYW5kbGVzIGNvbHVtbiByZW9yZGVyaW5nIGJ5IG1hcHBpbmcgY2VsbHMgYmFzZWQgb25cbiAgICogY29sdW1uIGtleXMgcmF0aGVyIHRoYW4gaW5kaWNlcywgZW5zdXJpbmcgY2VsbHMgZm9sbG93IHRoZWlyIGNvbHVtbnMuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVZpc2libGVDZWxsR3JpZCgpOiB2b2lkIHtcbiAgICBjb25zdCBmdWxsR3JpZCA9IHRoaXMuZ2V0QWN0aXZlQ2VsbEdyaWQoKTtcbiAgICBcbiAgICAvLyBIYW5kbGUgZW1wdHkgZ3JpZFxuICAgIGlmICghZnVsbEdyaWQgfHwgZnVsbEdyaWQubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnZpc2libGVDZWxsR3JpZCA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBCdWlsZCBhIG1hcCBvZiBjb2x1bW5LZXkg4oaSIGNlbGxJbmRleCBmb3IgdGhlIGN1cnJlbnQgZ3JpZCBzdHJ1Y3R1cmVcbiAgICAvLyBUaGlzIGFsbG93cyB1cyB0byBmaW5kIGNlbGxzIGJ5IGNvbHVtbiBrZXkgcmVnYXJkbGVzcyBvZiB0aGVpciBjdXJyZW50IHBvc2l0aW9uXG4gICAgY29uc3Qga2V5VG9JbmRleE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgZnVsbEdyaWRbMF0/LmZvckVhY2goKGNlbGwsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoY2VsbCkge1xuICAgICAgICBjb25zdCBjb2x1bW5Db25maWcgPSBjZWxsLmdldENvbHVtbkNvbmZpZygpO1xuICAgICAgICBrZXlUb0luZGV4TWFwLnNldChjb2x1bW5Db25maWcua2V5LCBpbmRleCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLy8gUmVvcmRlciBjZWxscyB0byBtYXRjaCB0aGUgdmlzaWJsZUNvbHVtbnMgb3JkZXJcbiAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIGNvbHVtbnMgYXJlIG1vdmVkLCB0aGUgY2VsbCBkYXRhIGZvbGxvd3NcbiAgICB0aGlzLnZpc2libGVDZWxsR3JpZCA9IGZ1bGxHcmlkLm1hcChyb3cgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnNcbiAgICAgICAgLm1hcChjb2wgPT4ge1xuICAgICAgICAgIGNvbnN0IGNlbGxJbmRleCA9IGtleVRvSW5kZXhNYXAuZ2V0KGNvbC5rZXkpO1xuICAgICAgICAgIHJldHVybiBjZWxsSW5kZXggIT09IHVuZGVmaW5lZCA/IHJvd1tjZWxsSW5kZXhdIDogdW5kZWZpbmVkO1xuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKChjZWxsKTogY2VsbCBpcyBDZWxsPGFueT4gPT4gY2VsbCAhPT0gdW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHZpc2libGUgY29sdW1ucyBiYXNlZCBvbiBjdXJyZW50IHZpc2liaWxpdHlcbiAgICogQ2FsbGVkIG9ubHkgd2hlbiB2aXNpYmlsaXR5IGFjdHVhbGx5IGNoYW5nZXNcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlVmlzaWJsZUNvbHVtbnMoKTogdm9pZCB7XG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuZ2V0QWN0aXZlQ29sdW1ucygpO1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbnMgPSBhbGxDb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLnZpc2libGUgIT09IGZhbHNlKTtcbiAgICBcbiAgICAvLyBSZWNhbGN1bGF0ZSBzdGlja3kgb2Zmc2V0cyBmb3IgdmlzaWJsZSBjb2x1bW5zIG9ubHlcbiAgICB0aGlzLnJlY2FsY3VsYXRlVmlzaWJsZVN0aWNreU9mZnNldHModGhpcy52aXNpYmxlQ29sdW1ucyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGJvdGggdmlzaWJsZSBjb2x1bW5zIGFuZCBjZWxsIGdyaWRcbiAgICogQ2FsbCB0aGlzIHdoZW5ldmVyIGRhdGEgb3IgdmlzaWJpbGl0eSBjaGFuZ2VzXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVZpc2libGVEYXRhKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUNvbHVtbnMoKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVDZWxsR3JpZCgpO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGFjdGl2ZSBjb2x1bW5zIChmcm9tIGNvbmZpZyBvciBsZWdhY3kgaW5wdXQpXG4gICAqL1xuICBnZXRBY3RpdmVDb2x1bW5zKCk6IENvbHVtbkNvbmZpZzxhbnk+W10ge1xuICAgIHJldHVybiB0aGlzLm1lcmdlZENvbmZpZy5jb2x1bW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB2aXNpYmxlIGNvbHVtbnMgKGZpbHRlcmVkIGJ5IHZpc2liaWxpdHkgcHJvcGVydHkpXG4gICAqIEFsc28gcmVjYWxjdWxhdGVzIHN0aWNreSBvZmZzZXRzIGJhc2VkIG9uIHZpc2libGUgY29sdW1ucyBvbmx5XG4gICAqL1xuICBnZXRWaXNpYmxlQ29sdW1ucygpOiBDb2x1bW5Db25maWc8YW55PltdIHtcbiAgICBjb25zdCBhbGxDb2x1bW5zID0gdGhpcy5nZXRBY3RpdmVDb2x1bW5zKCk7XG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSBhbGxDb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLnZpc2libGUgIT09IGZhbHNlKTsgLy8gRGVmYXVsdCB0byB0cnVlIGlmIG5vdCBzZXRcbiAgICBcbiAgICAvLyBSZWNhbGN1bGF0ZSBzdGlja3kgb2Zmc2V0cyBmb3IgdmlzaWJsZSBjb2x1bW5zIG9ubHlcbiAgICB0aGlzLnJlY2FsY3VsYXRlVmlzaWJsZVN0aWNreU9mZnNldHModmlzaWJsZUNvbHVtbnMpO1xuICAgIFxuICAgIHJldHVybiB2aXNpYmxlQ29sdW1ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNhbGN1bGF0ZSBzdGlja3kgb2Zmc2V0cyBiYXNlZCBvbiB2aXNpYmxlIGNvbHVtbnMgb25seVxuICAgKiBUaGlzIGVuc3VyZXMgY29ycmVjdCBwb3NpdGlvbmluZyB3aGVuIGNvbHVtbnMgYXJlIGhpZGRlblxuICAgKi9cbiAgcHJpdmF0ZSByZWNhbGN1bGF0ZVZpc2libGVTdGlja3lPZmZzZXRzKHZpc2libGVDb2x1bW5zOiBDb2x1bW5Db25maWc8YW55PltdKTogdm9pZCB7XG4gICAgLy8gQ2FsY3VsYXRlIGxlZnQgc3RpY2t5IG9mZnNldHNcbiAgICAvLyBBY2NvdW50IGZvciByb3cgbnVtYmVyIGNvbHVtbiB3aWR0aCBpZiBzaG93blxuICAgIGxldCBsZWZ0T2Zmc2V0ID0gdGhpcy5tZXJnZWRDb25maWcuc2hvd1Jvd051bWJlciA/IDMwIDogMDtcbiAgICB2aXNpYmxlQ29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICBpZiAoY29sLnN0aWNreSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIChjb2wgYXMgYW55KS5zdGlja3lPZmZzZXQgPSBsZWZ0T2Zmc2V0O1xuICAgICAgICBsZWZ0T2Zmc2V0ICs9IChjb2wud2lkdGggYXMgbnVtYmVyKSB8fCAxMDA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDYWxjdWxhdGUgcmlnaHQgc3RpY2t5IG9mZnNldHNcbiAgICBsZXQgcmlnaHRPZmZzZXQgPSAwO1xuICAgIGZvciAobGV0IGkgPSB2aXNpYmxlQ29sdW1ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgY29sID0gdmlzaWJsZUNvbHVtbnNbaV07XG4gICAgICBpZiAoY29sLnN0aWNreSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAoY29sIGFzIGFueSkuc3RpY2t5T2Zmc2V0ID0gcmlnaHRPZmZzZXQ7XG4gICAgICAgIHJpZ2h0T2Zmc2V0ICs9IChjb2wud2lkdGggYXMgbnVtYmVyKSB8fCAxMDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25DZWxsQ2hhbmdlKGV2ZW50OiBDZWxsQ2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmNlbGxDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkNvbHVtblJlc2l6ZWQoZXZlbnQ6IENvbHVtblJlc2l6ZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gUmVjYWxjdWxhdGUgc3RpY2t5IG9mZnNldHMgYWZ0ZXIgcmVzaXplXG4gICAgY29uc3Qgcm93TnVtYmVyV2lkdGggPSB0aGlzLm1lcmdlZENvbmZpZy5zaG93Um93TnVtYmVyID8gMzAgOiAwO1xuICAgIGNvbnN0IHNldHRpbmdzQ29sdW1uV2lkdGggPSB0aGlzLmhhc1Jvd0FjdGlvbnMoKSA/IDMyIDogMDtcbiAgICB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKS5jYWxjdWxhdGVTdGlja3lPZmZzZXRzKHJvd051bWJlcldpZHRoLCBzZXR0aW5nc0NvbHVtbldpZHRoKTtcbiAgICBcbiAgICAvLyBFbWl0IHRvIHBhcmVudFxuICAgIHRoaXMuY29sdW1uUmVzaXplZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uQ29sdW1uTW92ZWQoZXZlbnQ6IHtjb2x1bW5LZXk6IHN0cmluZywgZGlyZWN0aW9uOiAnbGVmdCcgfCAncmlnaHQnfSk6IHZvaWQge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldEFjdGl2ZUNvbHVtbnMoKTtcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSBjb2x1bW5zLmZpbmRJbmRleChjID0+IGMua2V5ID09PSBldmVudC5jb2x1bW5LZXkpO1xuICAgIGlmIChjdXJyZW50SW5kZXggPT09IC0xKSByZXR1cm47XG4gICAgXG4gICAgLy8gQ2FsY3VsYXRlIHRhcmdldCBpbmRleFxuICAgIGNvbnN0IHRhcmdldEluZGV4ID0gZXZlbnQuZGlyZWN0aW9uID09PSAnbGVmdCcgXG4gICAgICA/IGN1cnJlbnRJbmRleCAtIDEgXG4gICAgICA6IGN1cnJlbnRJbmRleCArIDE7XG4gICAgXG4gICAgLy8gQ2hlY2sgYm91bmRzXG4gICAgaWYgKHRhcmdldEluZGV4IDwgMCB8fCB0YXJnZXRJbmRleCA+PSBjb2x1bW5zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBTd2FwIGNvbHVtbnNcbiAgICBbY29sdW1uc1tjdXJyZW50SW5kZXhdLCBjb2x1bW5zW3RhcmdldEluZGV4XV0gPSBcbiAgICBbY29sdW1uc1t0YXJnZXRJbmRleF0sIGNvbHVtbnNbY3VycmVudEluZGV4XV07XG4gICAgXG4gICAgLy8gVXBkYXRlIFRhYmxlU3RhdGUgd2l0aCBuZXcgY29sdW1uIG9yZGVyXG4gICAgdGhpcy5nZXRBY3RpdmVUYWJsZVN0YXRlKCkudXBkYXRlQ29sdW1ucyhjb2x1bW5zKTtcbiAgICB0aGlzLmNvbHVtbk1vdmVkLmVtaXQoe1xuICAgICAgY29sdW1uS2V5OiBldmVudC5jb2x1bW5LZXksXG4gICAgICBkaXJlY3Rpb246IGV2ZW50LmRpcmVjdGlvbixcbiAgICAgIG9sZEluZGV4OiBjdXJyZW50SW5kZXgsXG4gICAgICBuZXdJbmRleDogdGFyZ2V0SW5kZXgsXG4gICAgICBjb2x1bW46IGNvbHVtbnNbY3VycmVudEluZGV4XVxuICAgIH0pO1xuICAgIC8vIEZvcmNlIHZpcnR1YWwgc2Nyb2xsIHRvIHJlLXJlbmRlciBieSByZS1lbWl0dGluZyBjdXJyZW50IHN0YXRlXG4gICAgLy8gVGhpcyBlbnN1cmVzIHZpc2libGVSb3dzJCBwaWNrcyB1cCB0aGUgdXBkYXRlZCB2aXNpYmxlQ2VsbEdyaWRcbiAgICBpZiAodGhpcy5pc1ZpcnR1YWxTY3JvbGxFbmFibGVkKCkpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMudmlydHVhbFNjcm9sbFN0YXRlJC52YWx1ZTtcbiAgICAgIGlmIChjdXJyZW50U3RhdGUpIHtcbiAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsU3RhdGUkLm5leHQoey4uLmN1cnJlbnRTdGF0ZX0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIGNvbHVtbiB0byBwb3NpdGlvbiBqdXN0IGJlZm9yZSByaWdodCBzdGlja3kgY29sdW1ucyAodXNlZCB3aGVuIHBpbm5pbmcgcmlnaHQpXG4gICAqL1xuICBwcml2YXRlIG1vdmVDb2x1bW5Ub0VuZChjb2x1bW5LZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldEFjdGl2ZUNvbHVtbnMoKTtcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSBjb2x1bW5zLmZpbmRJbmRleChjID0+IGMua2V5ID09PSBjb2x1bW5LZXkpO1xuICAgIGlmIChjdXJyZW50SW5kZXggPT09IC0xKSByZXR1cm47XG4gICAgXG4gICAgLy8gRmluZCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHJpZ2h0LXN0aWNreSBjb2x1bW5cbiAgICBjb25zdCBmaXJzdFJpZ2h0U3RpY2t5SW5kZXggPSBjb2x1bW5zLmZpbmRJbmRleChjID0+IGMuc3RpY2t5ID09PSAncmlnaHQnKTtcbiAgICBcbiAgICAvLyBEZXRlcm1pbmUgdGFyZ2V0IGluZGV4OiBqdXN0IGJlZm9yZSBmaXJzdCByaWdodC1zdGlja3ksIG9yIGF0IGVuZCBpZiBub25lIGV4aXN0XG4gICAgY29uc3QgdGFyZ2V0SW5kZXggPSBmaXJzdFJpZ2h0U3RpY2t5SW5kZXggIT09IC0xID8gZmlyc3RSaWdodFN0aWNreUluZGV4IDogY29sdW1ucy5sZW5ndGg7XG4gICAgXG4gICAgLy8gSWYgYWxyZWFkeSBhdCB0YXJnZXQgcG9zaXRpb24sIG5vIG5lZWQgdG8gbW92ZVxuICAgIGlmIChjdXJyZW50SW5kZXggPT09IHRhcmdldEluZGV4IHx8IGN1cnJlbnRJbmRleCA9PT0gdGFyZ2V0SW5kZXggLSAxKSByZXR1cm47XG4gICAgXG4gICAgLy8gUmVtb3ZlIGNvbHVtbiBmcm9tIGN1cnJlbnQgcG9zaXRpb25cbiAgICBjb25zdCBbY29sdW1uXSA9IGNvbHVtbnMuc3BsaWNlKGN1cnJlbnRJbmRleCwgMSk7XG4gICAgXG4gICAgLy8gQWRqdXN0IHRhcmdldCBpbmRleCBpZiB3ZSByZW1vdmVkIGFuIGVsZW1lbnQgYmVmb3JlIGl0XG4gICAgY29uc3QgYWRqdXN0ZWRUYXJnZXRJbmRleCA9IGN1cnJlbnRJbmRleCA8IHRhcmdldEluZGV4ID8gdGFyZ2V0SW5kZXggLSAxIDogdGFyZ2V0SW5kZXg7XG4gICAgXG4gICAgLy8gSW5zZXJ0IGF0IHRhcmdldCBwb3NpdGlvbiAoYmVmb3JlIGZpcnN0IHJpZ2h0LXN0aWNreSBjb2x1bW4sIG9yIGF0IGVuZClcbiAgICBjb2x1bW5zLnNwbGljZShhZGp1c3RlZFRhcmdldEluZGV4LCAwLCBjb2x1bW4pO1xuICAgIFxuICAgIC8vIFVwZGF0ZSBUYWJsZVN0YXRlIHdpdGggbmV3IGNvbHVtbiBvcmRlclxuICAgIHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpLnVwZGF0ZUNvbHVtbnMoY29sdW1ucyk7XG4gICAgXG4gICAgLy8gRm9yY2UgdmlydHVhbCBzY3JvbGwgdG8gcmUtcmVuZGVyXG4gICAgaWYgKHRoaXMuaXNWaXJ0dWFsU2Nyb2xsRW5hYmxlZCgpKSB7XG4gICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLnZpcnR1YWxTY3JvbGxTdGF0ZSQudmFsdWU7XG4gICAgICBpZiAoY3VycmVudFN0YXRlKSB7XG4gICAgICAgIHRoaXMudmlydHVhbFNjcm9sbFN0YXRlJC5uZXh0KHsuLi5jdXJyZW50U3RhdGV9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1bXVsYXRpdmUgbGVmdCBvZmZzZXQgZm9yIGEgc3RpY2t5IGNvbHVtbiBvbiB0aGUgbGVmdCBzaWRlXG4gICAqL1xuICBnZXRTdGlja3lMZWZ0T2Zmc2V0KGNvbHVtbktleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRBY3RpdmVDb2x1bW5zKCk7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xuICAgICAgaWYgKGNvbC5rZXkgPT09IGNvbHVtbktleSkgYnJlYWs7XG4gICAgICBpZiAoY29sLnN0aWNreSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIG9mZnNldCArPSAoY29sLndpZHRoIGFzIG51bWJlcikgfHwgMTAwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdW11bGF0aXZlIHJpZ2h0IG9mZnNldCBmb3IgYSBzdGlja3kgY29sdW1uIG9uIHRoZSByaWdodCBzaWRlXG4gICAqL1xuICBnZXRTdGlja3lSaWdodE9mZnNldChjb2x1bW5LZXk6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0QWN0aXZlQ29sdW1ucygpO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGNvbnN0IGNvbEluZGV4ID0gY29sdW1ucy5maW5kSW5kZXgoYyA9PiBjLmtleSA9PT0gY29sdW1uS2V5KTtcbiAgICBmb3IgKGxldCBpID0gY29sSW5kZXggKyAxOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY29sID0gY29sdW1uc1tpXTtcbiAgICAgIGlmIChjb2wuc3RpY2t5ID09PSAncmlnaHQnKSB7XG4gICAgICAgIG9mZnNldCArPSAoY29sLndpZHRoIGFzIG51bWJlcikgfHwgMTAwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgdG9wIHBhZ2luYXRpb24gc2hvdWxkIGJlIHNob3duXG4gICAqL1xuICBzaG93VG9wUGFnaW5hdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tZXJnZWRDb25maWcucGFnaW5hdGlvbj8uZW5hYmxlZCA9PSB0cnVlICYmXG4gICAgICAgICAgIHRoaXMubWVyZ2VkQ29uZmlnLnBhZ2luYXRpb24/LnNob3dUb3BDb250cm9scyA9PT0gdHJ1ZTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGJvdHRvbSBwYWdpbmF0aW9uIHNob3VsZCBiZSBzaG93blxuICAgKi9cbiAgc2hvd0JvdHRvbVBhZ2luYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VkQ29uZmlnLnBhZ2luYXRpb24/LmVuYWJsZWQgPT0gdHJ1ZSAmJlxuICAgICAgICAgICAodGhpcy5tZXJnZWRDb25maWcucGFnaW5hdGlvbj8uc2hvd0JvdHRvbUNvbnRyb2xzID8/IHRydWUpO1xuICB9XG4gIFxuICAvKipcbiAgICogVmFsaWRhdGUgdGFibGUgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0gY29uZmlnIFRhYmxlIGNvbmZpZ3VyYXRpb24gdG8gdmFsaWRhdGVcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVDb25maWd1cmF0aW9uKGNvbmZpZzogVGFibGVDb25maWcpOiB2b2lkIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnNjaGVtYVZhbGlkYXRvci52YWxpZGF0ZShjb25maWcsIHRydWUsIGZhbHNlKTsgLy8gRGlzYWJsZSBsb2dnaW5nIGhlcmUsIHdlJ2xsIGxvZyBtYW51YWxseSB3aXRoIGNvbnRleHRcbiAgICBcbiAgICBpZiAoIXJlc3VsdC52YWxpZCAmJiByZXN1bHQuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIEVtaXQgdmFsaWRhdGlvbiBlcnJvcnNcbiAgICAgIHRoaXMuY29uZmlnVmFsaWRhdGlvbkVycm9ycy5lbWl0KHJlc3VsdC5lcnJvcnMpO1xuICAgICAgXG4gICAgICAvLyBMb2cgdmFsaWRhdGlvbiBlcnJvcnMgd2l0aCBjb250ZXh0XG4gICAgICBjb25zdCBjb25maWdTbmlwcGV0ID0gSlNPTi5zdHJpbmdpZnkoY29uZmlnLCBudWxsLCAyKS5zdWJzdHJpbmcoMCwgNTAwKTsgLy8gRmlyc3QgNTAwIGNoYXJzIG9mIGNvbmZpZ1xuICAgICAgdGhpcy5sb2dnZXIubG9nVmFsaWRhdGlvbkVycm9ycyhyZXN1bHQuZXJyb3JzLCAncmVuZGVyZXInLCB7XG4gICAgICAgIGNvbmZpZ1NuaXBwZXQ6IGNvbmZpZ1NuaXBwZXRcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBMb2cgd2FybmluZ3MgdG8gY29uc29sZSAoZG9uJ3QgYnJlYWsgcmVuZGVyaW5nKVxuICAgICAgY29uc29sZS53YXJuKCdTbWFydCBUYWJsZTogQ29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGVycm9ycyBkZXRlY3RlZDonLCByZXN1bHQuZXJyb3JzKTtcbiAgICAgIHJlc3VsdC5lcnJvcnMuZm9yRWFjaChlcnJvciA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybihgICAtICR7ZXJyb3IuZmllbGQgfHwgZXJyb3IucGF0aH06ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBhZGQgY29sdW1uIGJ1dHRvbiBjbGlja1xuICAgKi9cbiAgb25BZGRDb2x1bW5DbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dDb2x1bW5Nb2RhbCA9IHRydWU7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgY29sdW1uIGNyZWF0ZWQgZnJvbSBtb2RhbFxuICAgKi9cbiAgb25Db2x1bW5DcmVhdGVkKGNvbHVtbjogQ29sdW1uQ29uZmlnKTogdm9pZCB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0QWN0aXZlQ29sdW1ucygpO1xuICAgIGNvbnN0IGFkZEV2ZW50OiBDb2x1bW5BZGRFdmVudCA9IHtcbiAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgaW5kZXg6IGNvbHVtbnMubGVuZ3RoLFxuICAgICAgdG90YWxDb2x1bW5zOiBjb2x1bW5zLmxlbmd0aCArIDFcbiAgICB9O1xuICAgIFxuICAgIC8vIEVtaXQgdGhlIG5ldyBjb2x1bW4gdG8gcGFyZW50IGNvbXBvbmVudFxuICAgIHRoaXMuY29sdW1uQWRkZWQuZW1pdChhZGRFdmVudCk7XG4gICAgXG4gICAgLy8gQ2xvc2UgdGhlIG1vZGFsXG4gICAgdGhpcy5zaG93Q29sdW1uTW9kYWwgPSBmYWxzZTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBtb2RhbCBjYW5jZWxsZWRcbiAgICovXG4gIG9uTW9kYWxDYW5jZWxsZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93Q29sdW1uTW9kYWwgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB2aXJ0dWFsIHNjcm9sbCBpcyBlbmFibGVkXG4gICAqL1xuICBpc1ZpcnR1YWxTY3JvbGxFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1lcmdlZENvbmZpZy5kaXNwbGF5Py52aXJ0dWFsU2Nyb2xsPy5lbmFibGVkID8/IGZhbHNlO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgY29sdW1uIGlzIHRoZSBmaXJzdCBzdGlja3ktcmlnaHQgY29sdW1uIChmb3Igc2hhZG93IHN0eWxpbmcpXG4gICAqL1xuICBpc0ZpcnN0U3RpY2t5UmlnaHQoY29sdW1uS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdGlja3lSaWdodENvbHVtbnMgPSB0aGlzLnZpc2libGVDb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLnN0aWNreSA9PT0gJ3JpZ2h0JyAmJiAhY29sLmtleS5pbmNsdWRlcygnc2V0dGluZ3MnKSk7XG4gICAgcmV0dXJuIHN0aWNreVJpZ2h0Q29sdW1ucy5sZW5ndGggPiAwICYmIHN0aWNreVJpZ2h0Q29sdW1uc1swXS5rZXkgPT09IGNvbHVtbktleTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCB2aXJ0dWFsIHNjcm9sbCBpdGVtIHNpemVcbiAgICovXG4gIGdldFZpcnR1YWxTY3JvbGxJdGVtU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm1lcmdlZENvbmZpZy5kaXNwbGF5Py52aXJ0dWFsU2Nyb2xsPy5pdGVtU2l6ZSA/PyA0ODtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCB2aWV3cG9ydCBoZWlnaHRcbiAgICovXG4gIGdldFZpcnR1YWxTY3JvbGxWaWV3cG9ydEhlaWdodCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm1lcmdlZENvbmZpZy5kaXNwbGF5Py52aXJ0dWFsU2Nyb2xsPy52aWV3cG9ydEhlaWdodCA/PyA2MDA7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgYnVmZmVyIHNpemVcbiAgICovXG4gIGdldFZpcnR1YWxTY3JvbGxCdWZmZXJTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VkQ29uZmlnLmRpc3BsYXk/LnZpcnR1YWxTY3JvbGw/LmJ1ZmZlclNpemUgPz8gNTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdmlydHVhbCBzY3JvbGwgc3RhdGVcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVZpcnR1YWxTY3JvbGwoKTogdm9pZCB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB0aGlzLnZpcnR1YWxTY3JvbGxTZXJ2aWNlLmNhbGN1bGF0ZVZpc2libGVSYW5nZSh7XG4gICAgICBzY3JvbGxUb3A6IDAsXG4gICAgICB2aWV3cG9ydEhlaWdodDogdGhpcy5nZXRWaXJ0dWFsU2Nyb2xsVmlld3BvcnRIZWlnaHQoKSxcbiAgICAgIHRvdGFsSXRlbXM6IHRoaXMudmlzaWJsZUNlbGxHcmlkLmxlbmd0aCxcbiAgICAgIGl0ZW1TaXplOiB0aGlzLmdldFZpcnR1YWxTY3JvbGxJdGVtU2l6ZSgpLFxuICAgICAgYnVmZmVyU2l6ZTogdGhpcy5nZXRWaXJ0dWFsU2Nyb2xsQnVmZmVyU2l6ZSgpXG4gICAgfSk7XG4gICAgXG4gICAgdGhpcy52aXJ0dWFsU2Nyb2xsU3RhdGUkLm5leHQobmV3U3RhdGUpO1xuICB9XG4gIFxuICAvKipcbiAgICogU2V0dXAgc2Nyb2xsIGV2ZW50IGxpc3RlbmVyXG4gICAqL1xuICBwcml2YXRlIHNldHVwVmlydHVhbFNjcm9sbExpc3RlbmVyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zY3JvbGxWaWV3cG9ydCkgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnNjcm9sbFZpZXdwb3J0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgdGhpcy5zY3JvbGxDb250YWluZXIgPSBlbGVtZW50O1xuICAgIFxuICAgIHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uID0gdGhpcy52aXJ0dWFsU2Nyb2xsU2VydmljZVxuICAgICAgLmNyZWF0ZVNjcm9sbE9ic2VydmFibGUoZWxlbWVudClcbiAgICAgIC5zdWJzY3JpYmUoc2Nyb2xsVG9wID0+IHRoaXMub25WaXJ0dWFsU2Nyb2xsKHNjcm9sbFRvcCkpO1xuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIHZpcnR1YWwgc2Nyb2xsIGV2ZW50XG4gICAqL1xuICBwcml2YXRlIG9uVmlydHVhbFNjcm9sbChzY3JvbGxUb3A6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5ld1N0YXRlID0gdGhpcy52aXJ0dWFsU2Nyb2xsU2VydmljZS5jYWxjdWxhdGVWaXNpYmxlUmFuZ2Uoe1xuICAgICAgc2Nyb2xsVG9wLFxuICAgICAgdmlld3BvcnRIZWlnaHQ6IHRoaXMuZ2V0VmlydHVhbFNjcm9sbFZpZXdwb3J0SGVpZ2h0KCksXG4gICAgICB0b3RhbEl0ZW1zOiB0aGlzLnZpc2libGVDZWxsR3JpZC5sZW5ndGgsXG4gICAgICBpdGVtU2l6ZTogdGhpcy5nZXRWaXJ0dWFsU2Nyb2xsSXRlbVNpemUoKSxcbiAgICAgIGJ1ZmZlclNpemU6IHRoaXMuZ2V0VmlydHVhbFNjcm9sbEJ1ZmZlclNpemUoKVxuICAgIH0pO1xuICAgIFxuICAgIHRoaXMudmlydHVhbFNjcm9sbFN0YXRlJC5uZXh0KG5ld1N0YXRlKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCByb3cgaW5kZXggZm9yIHRyYWNraW5nXG4gICAqL1xuICBnZXRBYnNvbHV0ZVJvd0luZGV4KHJlbGF0aXZlSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgY3VycmVudFN0YXRlID0gdGhpcy52aXJ0dWFsU2Nyb2xsU3RhdGUkLnZhbHVlO1xuICAgIGlmICghY3VycmVudFN0YXRlKSByZXR1cm4gcmVsYXRpdmVJbmRleDtcbiAgICByZXR1cm4gY3VycmVudFN0YXRlLnN0YXJ0SW5kZXggKyByZWxhdGl2ZUluZGV4O1xuICB9XG4gIFxuICAvKipcbiAgICogVHJhY2tCeSBmdW5jdGlvbiBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlXG4gICAqL1xuICB0cmFja0J5Um93SW5kZXggPSAoaW5kZXg6IG51bWJlciwgcm93OiBDZWxsPGFueT5bXSk6IG51bWJlciA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWJzb2x1dGVSb3dJbmRleChpbmRleCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTY3JvbGwgdG8gc3BlY2lmaWMgcm93IHByb2dyYW1tYXRpY2FsbHlcbiAgICovXG4gIHNjcm9sbFRvUm93KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2Nyb2xsQ29udGFpbmVyIHx8ICF0aGlzLmlzVmlydHVhbFNjcm9sbEVuYWJsZWQoKSkgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IHNjcm9sbFRvcCA9IGluZGV4ICogdGhpcy5nZXRWaXJ0dWFsU2Nyb2xsSXRlbVNpemUoKTtcbiAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiByb3cgYWN0aW9ucyBhcmUgZW5hYmxlZFxuICAgKi9cbiAgaGFzUm93QWN0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5tZXJnZWRDb25maWcuZmVhdHVyZXM/LnJvd01hbmFnZW1lbnQ/LmFjdGlvbnMgJiYgXG4gICAgICAgICAgICAgIHRoaXMubWVyZ2VkQ29uZmlnLmZlYXR1cmVzLnJvd01hbmFnZW1lbnQuYWN0aW9ucy5sZW5ndGggPiAwKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCByb3cgYWN0aW9ucyBmcm9tIGNvbmZpZ1xuICAgKi9cbiAgZ2V0Um93QWN0aW9ucygpOiBSb3dBY3Rpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VkQ29uZmlnLmZlYXR1cmVzPy5yb3dNYW5hZ2VtZW50Py5hY3Rpb25zIHx8IFtdO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHJvdyBkYXRhIGZyb20gY2VsbCBncmlkXG4gICAqL1xuICBnZXRSb3dEYXRhKHJvd0luZGV4OiBudW1iZXIpOiBhbnkge1xuICAgIGNvbnN0IGNlbGxHcmlkID0gdGhpcy5nZXRBY3RpdmVDZWxsR3JpZCgpO1xuICAgIGlmICghY2VsbEdyaWQgfHwgcm93SW5kZXggPCAwIHx8IHJvd0luZGV4ID49IGNlbGxHcmlkLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHJvdyA9IGNlbGxHcmlkW3Jvd0luZGV4XTtcbiAgICBpZiAoIXJvdyB8fCByb3cubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgXG4gICAgLy8gR2V0IHJhdyBkYXRhIGZyb20gZmlyc3QgY2VsbCAoYWxsIGNlbGxzIGluIGEgcm93IHNoYXJlIHRoZSBzYW1lIHJvd0RhdGEpXG4gICAgcmV0dXJuIHJvd1swXT8uZ2V0Um93RGF0YSgpIHx8IG51bGw7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBPcGVuIHJvdyBhY3Rpb25zIGRyb3Bkb3duXG4gICAqL1xuICBvcGVuUm93QWN0aW9uc0Ryb3Bkb3duKGV2ZW50OiBNb3VzZUV2ZW50LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIFxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgcmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBcbiAgICAvLyBDYWxjdWxhdGUgcG9zaXRpb24gKGJlbG93IHRoZSBidXR0b24gYnkgZGVmYXVsdClcbiAgICBjb25zdCBwb3NpdGlvbiA9IHtcbiAgICAgIHg6IHJlY3QubGVmdCxcbiAgICAgIHk6IHJlY3QuYm90dG9tICsgNCAvLyA0cHggZ2FwXG4gICAgfTtcbiAgICBcbiAgICAvLyBDcmVhdGUgY29udGV4dFxuICAgIGNvbnN0IGNvbnRleHQ6IFJvd0FjdGlvbkNvbnRleHQgPSB7XG4gICAgICByb3dEYXRhLFxuICAgICAgcm93SW5kZXgsXG4gICAgICBhY3Rpb25zOiB0aGlzLmdldFJvd0FjdGlvbnMoKVxuICAgIH07XG4gICAgXG4gICAgLy8gVXBkYXRlIGRyb3Bkb3duIHN0YXRlXG4gICAgdGhpcy5kcm9wZG93blN0YXRlID0ge1xuICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgcG9zaXRpb24sXG4gICAgICBjb250ZXh0XG4gICAgfTtcbiAgICBcbiAgICAvLyBEaXNhYmxlIGJvZHkgc2Nyb2xsXG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgIFxuICAgIC8vIElmIHZpcnR1YWwgc2Nyb2xsIGlzIGVuYWJsZWQsIGFkZCBzY3JvbGwgbGlzdGVuZXIgdG8gY2xvc2UgZHJvcGRvd25cbiAgICBpZiAodGhpcy5pc1ZpcnR1YWxTY3JvbGxFbmFibGVkKCkgJiYgdGhpcy5zY3JvbGxDb250YWluZXIpIHtcbiAgICAgIGNvbnN0IHNjcm9sbExpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlUm93QWN0aW9uc0Ryb3Bkb3duKCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyPy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzY3JvbGxMaXN0ZW5lcik7XG4gICAgICB9O1xuICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc2Nyb2xsTGlzdGVuZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbG9zZSByb3cgYWN0aW9ucyBkcm9wZG93blxuICAgKi9cbiAgY2xvc2VSb3dBY3Rpb25zRHJvcGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5kcm9wZG93blN0YXRlID0ge1xuICAgICAgaXNPcGVuOiBmYWxzZSxcbiAgICAgIHBvc2l0aW9uOiB7IHg6IDAsIHk6IDAgfSxcbiAgICAgIGNvbnRleHQ6IG51bGxcbiAgICB9O1xuICAgIFxuICAgIC8vIFJlLWVuYWJsZSBib2R5IHNjcm9sbFxuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnJztcbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSByb3cgYWN0aW9uIGNsaWNrZWRcbiAgICovXG4gIG9uUm93QWN0aW9uQ2xpY2tlZChldmVudDogUm93QWN0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBFeGVjdXRlIGFjdGlvbiBjYWxsYmFjayBpZiBwcm92aWRlZFxuICAgIGlmIChldmVudC5hY3Rpb24uYWN0aW9uKSB7XG4gICAgICBldmVudC5hY3Rpb24uYWN0aW9uKGV2ZW50LnJvd0RhdGEsIGV2ZW50LnJvd0luZGV4KTtcbiAgICB9XG4gICAgXG4gICAgLy8gRW1pdCBldmVudCB0byBwYXJlbnRcbiAgICB0aGlzLnJvd0FjdGlvbi5lbWl0KGV2ZW50KTtcbiAgICBcbiAgICAvLyBDbG9zZSBkcm9wZG93blxuICAgIHRoaXMuY2xvc2VSb3dBY3Rpb25zRHJvcGRvd24oKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQ09MVU1OIE1FTlUgQUNUSU9OU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE9wZW4gY29sdW1uIG1lbnUgZHJvcGRvd25cbiAgICovXG4gIG9wZW5Db2x1bW5NZW51KGV2ZW50OiBNb3VzZUV2ZW50LCBjb2x1bW46IENvbHVtbkNvbmZpZzxhbnk+LCBjb2x1bW5JbmRleDogbnVtYmVyLCBpc0ZpcnN0OiBib29sZWFuLCBpc0xhc3Q6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCByZWN0ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uIChiZWxvdyB0aGUgYnV0dG9uIGJ5IGRlZmF1bHQpXG4gICAgY29uc3QgcG9zaXRpb24gPSB7XG4gICAgICB4OiByZWN0LmxlZnQsXG4gICAgICB5OiByZWN0LmJvdHRvbSArIDQgLy8gNHB4IGdhcFxuICAgIH07XG5cbiAgICAvLyBDcmVhdGUgY29udGV4dFxuICAgIGNvbnN0IGNvbnRleHQ6IENvbHVtbkFjdGlvbkNvbnRleHQgPSB7XG4gICAgICBjb2x1bW4sXG4gICAgICBjb2x1bW5JbmRleCxcbiAgICAgIGlzRmlyc3RDb2x1bW46IGlzRmlyc3QsXG4gICAgICBpc0xhc3RDb2x1bW46IGlzTGFzdCxcbiAgICAgIHRhYmxlU3RhdGU6IHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpLFxuICAgICAgYWN0aW9uczogdGhpcy5nZXRDb2x1bW5BY3Rpb25zKGNvbHVtbiwgY29sdW1uSW5kZXgsIGlzRmlyc3QsIGlzTGFzdClcbiAgICB9O1xuXG4gICAgLy8gVXBkYXRlIGNvbHVtbiBtZW51IHN0YXRlXG4gICAgdGhpcy5jb2x1bW5NZW51U3RhdGUgPSB7XG4gICAgICBpc09wZW46IHRydWUsXG4gICAgICBwb3NpdGlvbixcbiAgICAgIGNvbnRleHRcbiAgICB9O1xuXG4gICAgLy8gRGlzYWJsZSBib2R5IHNjcm9sbFxuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcblxuICAgIC8vIElmIHZpcnR1YWwgc2Nyb2xsIGlzIGVuYWJsZWQsIGFkZCBzY3JvbGwgbGlzdGVuZXIgdG8gY2xvc2UgZHJvcGRvd25cbiAgICBpZiAodGhpcy5pc1ZpcnR1YWxTY3JvbGxFbmFibGVkKCkgJiYgdGhpcy5zY3JvbGxDb250YWluZXIpIHtcbiAgICAgIGNvbnN0IHNjcm9sbExpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlQ29sdW1uTWVudSgpO1xuICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lcj8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc2Nyb2xsTGlzdGVuZXIpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHNjcm9sbExpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIGNvbHVtbiBtZW51IGRyb3Bkb3duXG4gICAqL1xuICBjbG9zZUNvbHVtbk1lbnUoKTogdm9pZCB7XG4gICAgdGhpcy5jb2x1bW5NZW51U3RhdGUgPSB7XG4gICAgICBpc09wZW46IGZhbHNlLFxuICAgICAgcG9zaXRpb246IHsgeDogMCwgeTogMCB9LFxuICAgICAgY29udGV4dDogbnVsbFxuICAgIH07XG5cbiAgICAvLyBSZS1lbmFibGUgYm9keSBzY3JvbGxcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJyc7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGNvbHVtbiBhY3Rpb24gY2xpY2tlZFxuICAgKi9cbiAgb25Db2x1bW5BY3Rpb25DbGlja2VkKGV2ZW50OiBDb2x1bW5BY3Rpb25FdmVudCk6IHZvaWQge1xuICAgIC8vIEV4ZWN1dGUgYWN0aW9uIGNhbGxiYWNrIGlmIHByb3ZpZGVkXG4gICAgaWYgKGV2ZW50LmFjdGlvbi5hY3Rpb24pIHtcbiAgICAgIGV2ZW50LmFjdGlvbi5hY3Rpb24oZXZlbnQuY29sdW1uLCBldmVudC5jb2x1bW5JbmRleCk7XG4gICAgfVxuXG4gICAgLy8gRG9uJ3QgY2xvc2UgbWVudSBpZiBpdCdzIGEgZmlsdGVyIGFjdGlvbiAoZmlsdGVyIG5lZWRzIG1lbnUgdG8gc3RheSBvcGVuKVxuICAgIGlmIChldmVudC5hY3Rpb24uaWQgPT09ICdmaWx0ZXInKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgZHJvcGRvd24gZm9yIG90aGVyIGFjdGlvbnNcbiAgICB0aGlzLmNsb3NlQ29sdW1uTWVudSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb2x1bW4gYWN0aW9ucyAoYnVpbHQtaW4gKyBjdXN0b20pXG4gICAqL1xuICBwcml2YXRlIGdldENvbHVtbkFjdGlvbnMoXG4gICAgY29sdW1uOiBDb2x1bW5Db25maWc8YW55PiwgXG4gICAgY29sdW1uSW5kZXg6IG51bWJlciwgXG4gICAgaXNGaXJzdDogYm9vbGVhbiwgXG4gICAgaXNMYXN0OiBib29sZWFuXG4gICk6IENvbHVtbkFjdGlvbltdIHtcbiAgICBjb25zdCBhY3Rpb25zOiBDb2x1bW5BY3Rpb25bXSA9IFtdO1xuICAgIFxuICAgIC8vIEFkZCBidWlsdC1pbiBhY3Rpb25zIGlmIGVuYWJsZWQgKGRlZmF1bHQ6IHRydWUpXG4gICAgY29uc3QgaW5jbHVkZUJ1aWx0SW4gPSBjb2x1bW4uaW5jbHVkZUJ1aWx0SW5BY3Rpb25zID8/IHRydWU7XG4gICAgaWYgKGluY2x1ZGVCdWlsdEluKSB7XG4gICAgICBhY3Rpb25zLnB1c2goLi4udGhpcy5nZXRCdWlsdEluQ29sdW1uQWN0aW9ucyhjb2x1bW4sIGNvbHVtbkluZGV4LCBpc0ZpcnN0LCBpc0xhc3QpKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQWRkIGN1c3RvbSBjb2x1bW4gYWN0aW9ucyBmcm9tIGNvbmZpZ1xuICAgIGlmIChjb2x1bW4uY29sdW1uQWN0aW9ucyAmJiBjb2x1bW4uY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBhY3Rpb25zLnB1c2goLi4uY29sdW1uLmNvbHVtbkFjdGlvbnMpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gYWN0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYnVpbHQtaW4gY29sdW1uIGFjdGlvbnMgKHNvcnQsIGZpbHRlciwgcGluLCBtb3ZlKVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRCdWlsdEluQ29sdW1uQWN0aW9ucyhcbiAgICBjb2x1bW46IENvbHVtbkNvbmZpZzxhbnk+LFxuICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgaXNGaXJzdDogYm9vbGVhbixcbiAgICBpc0xhc3Q6IGJvb2xlYW5cbiAgKTogQ29sdW1uQWN0aW9uW10ge1xuICAgIGNvbnN0IHRhYmxlU3RhdGUgPSB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKTtcbiAgICBjb25zdCBhY3Rpb25zOiBDb2x1bW5BY3Rpb25bXSA9IFtdO1xuXG4gICAgLy8gU29ydCBhc2NlbmRpbmdcbiAgICBpZiAoY29sdW1uLnNvcnRhYmxlICE9PSBmYWxzZSkge1xuICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgaWQ6ICdzb3J0LWFzYycsXG4gICAgICAgIGxhYmVsOiB0aGlzLmdldFNvcnRMYWJlbChjb2x1bW4sICdhc2MnKSxcbiAgICAgICAgaWNvbjogJ+KGkScsXG4gICAgICAgIGFjdGlvbjogKGNvbCkgPT4ge1xuICAgICAgICAgIHRhYmxlU3RhdGUuYWRkU29ydFRvQ29sdW1uKGNvbC5rZXksIFNvcnREaXJlY3Rpb24uQVNDKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gU29ydCBkZXNjZW5kaW5nXG4gICAgaWYgKGNvbHVtbi5zb3J0YWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgIGlkOiAnc29ydC1kZXNjJyxcbiAgICAgICAgbGFiZWw6IHRoaXMuZ2V0U29ydExhYmVsKGNvbHVtbiwgJ2Rlc2MnKSxcbiAgICAgICAgaWNvbjogJ+KGkycsXG4gICAgICAgIGFjdGlvbjogKGNvbCkgPT4ge1xuICAgICAgICAgIHRhYmxlU3RhdGUuYWRkU29ydFRvQ29sdW1uKGNvbC5rZXksIFNvcnREaXJlY3Rpb24uREVTQyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENsZWFyIHNvcnQgKG9ubHkgc2hvdyBpZiBjdXJyZW50bHkgc29ydGVkKVxuICAgIGlmIChjb2x1bW4uc29ydGFibGUgIT09IGZhbHNlICYmIGNvbHVtbi5zb3J0RGlyZWN0aW9uICYmIGNvbHVtbi5zb3J0RGlyZWN0aW9uICE9PSBTb3J0RGlyZWN0aW9uLk5PTkUpIHtcbiAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgIGlkOiAnY2xlYXItc29ydCcsXG4gICAgICAgIGxhYmVsOiAnQ2xlYXIgU29ydCcsXG4gICAgICAgIGljb246ICfinJUnLFxuICAgICAgICBhY3Rpb246IChjb2wpID0+IHtcbiAgICAgICAgICB0YWJsZVN0YXRlLmFkZFNvcnRUb0NvbHVtbihjb2wua2V5LCBTb3J0RGlyZWN0aW9uLk5PTkUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBGaWx0ZXJcbiAgICBpZiAoY29sdW1uLmZpbHRlcmFibGUgIT09IGZhbHNlKSB7XG4gICAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgICBpZDogJ2ZpbHRlcicsXG4gICAgICAgIGxhYmVsOiAnRmlsdGVyJyxcbiAgICAgICAgaWNvbjogJ+KakScsXG4gICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgIC8vIEZpbHRlciBhY3Rpb24gaGFuZGxlZCBieSBjb2x1bW4gbWVudSBjb21wb25lbnRcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUGluIExlZnQgKGlmIG5vdCBhbHJlYWR5IHBpbm5lZClcbiAgICBpZiAoY29sdW1uLnBpbm5hYmxlICE9PSBmYWxzZSAmJiBjb2x1bW4uc3RpY2t5ICE9PSAnbGVmdCcgJiYgY29sdW1uLnN0aWNreSAhPT0gJ3JpZ2h0Jykge1xuICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgaWQ6ICdwaW4tbGVmdCcsXG4gICAgICAgIGxhYmVsOiAnUGluIExlZnQnLFxuICAgICAgICBpY29uOiAn8J+TjCcsXG4gICAgICAgIGFjdGlvbjogKGNvbCkgPT4ge1xuICAgICAgICAgIHRhYmxlU3RhdGUuc2V0U3RpY2t5Q29sdW1uKGNvbC5rZXksICdsZWZ0Jyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFBpbiBSaWdodCAoaWYgbm90IGFscmVhZHkgcGlubmVkKVxuICAgIGlmIChjb2x1bW4ucGlubmFibGUgIT09IGZhbHNlICYmIGNvbHVtbi5zdGlja3kgIT09ICdsZWZ0JyAmJiBjb2x1bW4uc3RpY2t5ICE9PSAncmlnaHQnKSB7XG4gICAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgICBpZDogJ3Bpbi1yaWdodCcsXG4gICAgICAgIGxhYmVsOiAnUGluIFJpZ2h0JyxcbiAgICAgICAgaWNvbjogJ/Cfk4wnLFxuICAgICAgICBhY3Rpb246IChjb2wpID0+IHtcbiAgICAgICAgICB0aGlzLm1vdmVDb2x1bW5Ub0VuZChjb2wua2V5KTtcbiAgICAgICAgICB0YWJsZVN0YXRlLnNldFN0aWNreUNvbHVtbihjb2wua2V5LCAncmlnaHQnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVW5waW4gKGlmIGN1cnJlbnRseSBwaW5uZWQpXG4gICAgaWYgKGNvbHVtbi5waW5uYWJsZSAhPT0gZmFsc2UgJiYgKGNvbHVtbi5zdGlja3kgPT09ICdsZWZ0JyB8fCBjb2x1bW4uc3RpY2t5ID09PSAncmlnaHQnKSkge1xuICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgaWQ6ICd1bnBpbicsXG4gICAgICAgIGxhYmVsOiAnVW5waW4nLFxuICAgICAgICBpY29uOiAn8J+TjScsXG4gICAgICAgIGFjdGlvbjogKGNvbCkgPT4ge1xuICAgICAgICAgIHRhYmxlU3RhdGUuc2V0U3RpY2t5Q29sdW1uKGNvbC5rZXksIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gTW92ZSBsZWZ0IChvbmx5IGlmIG1vdmFibGUgYW5kIG5vdCBwaW5uZWQpXG4gICAgaWYgKCFpc0ZpcnN0ICYmIGNvbHVtbi5tb3ZhYmxlICE9PSBmYWxzZSAmJiAhY29sdW1uLnN0aWNreSkge1xuICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgaWQ6ICdtb3ZlLWxlZnQnLFxuICAgICAgICBsYWJlbDogJ01vdmUgTGVmdCcsXG4gICAgICAgIGljb246ICfihpAnLFxuICAgICAgICBhY3Rpb246IChjb2wpID0+IHtcbiAgICAgICAgICB0aGlzLm9uQ29sdW1uTW92ZWQoe1xuICAgICAgICAgICAgY29sdW1uS2V5OiBjb2wua2V5LFxuICAgICAgICAgICAgZGlyZWN0aW9uOiAnbGVmdCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gTW92ZSByaWdodCAob25seSBpZiBtb3ZhYmxlIGFuZCBub3QgcGlubmVkKVxuICAgIGlmICghaXNMYXN0ICYmIGNvbHVtbi5tb3ZhYmxlICE9PSBmYWxzZSAmJiAhY29sdW1uLnN0aWNreSkge1xuICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgaWQ6ICdtb3ZlLXJpZ2h0JyxcbiAgICAgICAgbGFiZWw6ICdNb3ZlIFJpZ2h0JyxcbiAgICAgICAgaWNvbjogJ+KGkicsXG4gICAgICAgIGFjdGlvbjogKGNvbCkgPT4ge1xuICAgICAgICAgIHRoaXMub25Db2x1bW5Nb3ZlZCh7XG4gICAgICAgICAgICBjb2x1bW5LZXk6IGNvbC5rZXksXG4gICAgICAgICAgICBkaXJlY3Rpb246ICdyaWdodCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNvcnQgbGFiZWwgYmFzZWQgb24gY29sdW1uIGRhdGEgdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTb3J0TGFiZWwoY29sdW1uOiBDb2x1bW5Db25maWc8YW55PiwgZGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF0YVR5cGUgPSBjb2x1bW4uZGF0YVR5cGU7XG5cbiAgICBpZiAoZGF0YVR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZGlyZWN0aW9uID09PSAnYXNjJyA/ICdTb3J0IDDihpI5JyA6ICdTb3J0IDnihpIwJztcbiAgICB9IGVsc2UgaWYgKGRhdGFUeXBlID09PSAnZGF0ZScpIHtcbiAgICAgIHJldHVybiBkaXJlY3Rpb24gPT09ICdhc2MnID8gJ1NvcnQgT2xkZXN0IEZpcnN0JyA6ICdTb3J0IE5ld2VzdCBGaXJzdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkaXJlY3Rpb24gPT09ICdhc2MnID8gJ1NvcnQgQeKGklonIDogJ1NvcnQgWuKGkkEnO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gS0VZQk9BUkQgTkFWSUdBVElPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUga2V5Ym9hcmQgbmF2aWdhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplS2V5Ym9hcmROYXZpZ2F0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHRhYmxlU3RhdGUgPSB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKTtcbiAgICBcbiAgICB0YWJsZVN0YXRlLnNldERpbWVuc2lvbnMoXG4gICAgICB0aGlzLnZpc2libGVDZWxsR3JpZC5sZW5ndGgsXG4gICAgICB0aGlzLnZpc2libGVDb2x1bW5zLmxlbmd0aFxuICAgICk7XG4gICAgXG4gICAgLy8gU3Vic2NyaWJlIHRvIGZvY3VzIHBvc2l0aW9uIGNoYW5nZXNcbiAgICB0aGlzLmZvY3VzU3Vic2NyaXB0aW9uID0gdGFibGVTdGF0ZS5mb2N1c2VkQ2VsbFBvc2l0aW9uJC5zdWJzY3JpYmUocG9zaXRpb24gPT4ge1xuICAgICAgdGhpcy51cGRhdGVDZWxsRm9jdXNTdGF0ZXMocG9zaXRpb24pO1xuICAgIH0pO1xuICAgIFxuICAgIC8vIFN1YnNjcmliZSB0byByZXF1ZXN0IGFkZCByb3cgZXZlbnRzICh3aGVuIG5hdmlnYXRpbmcgcGFzdCBsYXN0IHJvdylcbiAgICB0aGlzLnJlcXVlc3RBZGRSb3dTdWJzY3JpcHRpb24gPSB0YWJsZVN0YXRlLnJlcXVlc3RBZGRSb3ckLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICB0aGlzLnJlcXVlc3RBZGRSb3cuZW1pdChldmVudCk7XG4gICAgfSk7XG4gICAgXG4gICAgLy8gQXV0by1mb2N1cyBmaXJzdCBjZWxsIHRvIGVuYWJsZSBrZXlib2FyZCBuYXZpZ2F0aW9uXG4gICAgaWYgKHRoaXMudmlzaWJsZUNlbGxHcmlkLmxlbmd0aCA+IDAgJiYgdGhpcy52aXNpYmxlQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGFibGVTdGF0ZS5mb2N1c0NlbGwoMCwgMCk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBVcGRhdGUgZm9jdXMgc3RhdGUgaW4gYWxsIGNlbGxzXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUNlbGxGb2N1c1N0YXRlcyhwb3NpdGlvbjogQ2VsbEZvY3VzUG9zaXRpb24gfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnZpc2libGVDZWxsR3JpZCkgcmV0dXJuO1xuICAgIFxuICAgIGZvciAobGV0IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCB0aGlzLnZpc2libGVDZWxsR3JpZC5sZW5ndGg7IHJvd0luZGV4KyspIHtcbiAgICAgIGNvbnN0IHJvdyA9IHRoaXMudmlzaWJsZUNlbGxHcmlkW3Jvd0luZGV4XTtcbiAgICAgIGZvciAobGV0IGNvbEluZGV4ID0gMDsgY29sSW5kZXggPCByb3cubGVuZ3RoOyBjb2xJbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IGNlbGwgPSByb3dbY29sSW5kZXhdO1xuICAgICAgICBpZiAoIWNlbGwpIGNvbnRpbnVlO1xuICAgICAgICBcbiAgICAgICAgY29uc3Qgc2hvdWxkRm9jdXMgPSBwb3NpdGlvbiAmJiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLnJvd0luZGV4ID09PSByb3dJbmRleCAmJiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLmNvbHVtbkluZGV4ID09PSBjb2xJbmRleDtcbiAgICAgICAgXG4gICAgICAgIGlmIChzaG91bGRGb2N1cykge1xuICAgICAgICAgIGNlbGwuZm9jdXMoKTtcbiAgICAgICAgICAvLyBGb2N1cyB0aGUgYWN0dWFsIERPTSBlbGVtZW50XG4gICAgICAgICAgdGhpcy5mb2N1c1RkRWxlbWVudChyb3dJbmRleCwgY29sSW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNlbGwuYmx1cigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogRm9jdXMgdGhlIFREIGVsZW1lbnQgaW4gdGhlIERPTSBhbmQgc2Nyb2xsIGl0IGludG8gdmlldyxcbiAgICogYWNjb3VudGluZyBmb3Igc3RpY2t5IGNvbHVtbnMgb24gbGVmdCBhbmQgcmlnaHRcbiAgICovXG4gIHByaXZhdGUgZm9jdXNUZEVsZW1lbnQocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIFVzZSBzZXRUaW1lb3V0IHRvIGVuc3VyZSBET00gaGFzIHVwZGF0ZWRcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIFVzZSBhYnNvbHV0ZSByb3cgaW5kZXggZm9yIHZpcnR1YWwgc2Nyb2xsIGNvbXBhdGliaWxpdHlcbiAgICAgIGNvbnN0IGFic29sdXRlUm93SW5kZXggPSB0aGlzLmdldEFic29sdXRlUm93SW5kZXgocm93SW5kZXgpO1xuICAgICAgLy8gUXVlcnkgd2l0aGluIHRoaXMgY29tcG9uZW50J3MgaG9zdCBlbGVtZW50IHRvIGF2b2lkIHNlbGVjdGluZyByb3dzIGZyb20gb3RoZXIgdGFibGVzXG4gICAgICBjb25zdCBob3N0RWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmICghaG9zdEVsZW1lbnQpIHJldHVybjtcbiAgICAgIFxuICAgICAgLy8gRmlyc3QsIGVuc3VyZSB0aGUgdGFibGUgY29udGFpbmVyIGhhcyBmb2N1cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvblxuICAgICAgLy8gVGhlIGtleWJvYXJkIG5hdmlnYXRpb24gZGlyZWN0aXZlIGxpc3RlbnMgb24gdGhlIC5zdC10YWJsZSBjb250YWluZXJcbiAgICAgIGNvbnN0IHRhYmxlQ29udGFpbmVyID0gaG9zdEVsZW1lbnQucXVlcnlTZWxlY3RvcignLnN0LXRhYmxlJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgICAgaWYgKHRhYmxlQ29udGFpbmVyICYmIHR5cGVvZiB0YWJsZUNvbnRhaW5lci5mb2N1cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0YWJsZUNvbnRhaW5lci5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IHRyID0gaG9zdEVsZW1lbnQucXVlcnlTZWxlY3RvcihgdHJbZGF0YS1yb3ctaW5kZXg9XCIke2Fic29sdXRlUm93SW5kZXh9XCJdYCk7XG4gICAgICBpZiAodHIpIHtcbiAgICAgICAgY29uc3QgY2VsbHMgPSB0ci5xdWVyeVNlbGVjdG9yQWxsKCd0ZDpub3QoLnNldHRpbmdzLWNvbHVtbik6bm90KC5yb3ctbnVtYmVyLWNlbGwpJyk7XG4gICAgICAgIGNvbnN0IHRhcmdldENlbGwgPSBjZWxsc1tjb2xJbmRleF0gYXMgSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0YXJnZXRDZWxsICYmIHR5cGVvZiB0YXJnZXRDZWxsLmZvY3VzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGFyZ2V0Q2VsbC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgICAgdGhpcy5zY3JvbGxDZWxsSW50b1ZpZXcodGFyZ2V0Q2VsbCwgY29sSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIGEgY2VsbCBpbnRvIHZpZXcsIGFjY291bnRpbmcgZm9yIHN0aWNreSBjb2x1bW5zXG4gICAqL1xuICBwcml2YXRlIHNjcm9sbENlbGxJbnRvVmlldyhjZWxsOiBIVE1MRWxlbWVudCwgY29sSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIEZpbmQgdGhlIHNjcm9sbCBjb250YWluZXJcbiAgICBjb25zdCBzY3JvbGxDb250YWluZXIgPSB0aGlzLmdldFNjcm9sbENvbnRhaW5lckVsZW1lbnQoKTtcbiAgICBpZiAoIXNjcm9sbENvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgY29uc3QgY2VsbFJlY3QgPSBjZWxsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBzY3JvbGxDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgc3RpY2t5IGNvbHVtbiB3aWR0aHNcbiAgICBjb25zdCB7IGxlZnRTdGlja3lXaWR0aCwgcmlnaHRTdGlja3lXaWR0aCB9ID0gdGhpcy5jYWxjdWxhdGVTdGlja3lXaWR0aHMoKTtcblxuICAgIC8vIENhbGN1bGF0ZSB2aXNpYmxlIGFyZWEgKGV4Y2x1ZGluZyBzdGlja3kgY29sdW1ucylcbiAgICBjb25zdCB2aXNpYmxlTGVmdCA9IGNvbnRhaW5lclJlY3QubGVmdCArIGxlZnRTdGlja3lXaWR0aDtcbiAgICBjb25zdCB2aXNpYmxlUmlnaHQgPSBjb250YWluZXJSZWN0LnJpZ2h0IC0gcmlnaHRTdGlja3lXaWR0aDtcbiAgICBjb25zdCB2aXNpYmxlVG9wID0gY29udGFpbmVyUmVjdC50b3A7XG4gICAgY29uc3QgdmlzaWJsZUJvdHRvbSA9IGNvbnRhaW5lclJlY3QuYm90dG9tO1xuXG4gICAgLy8gQ2hlY2sgaWYgY29sdW1uIGlzIHN0aWNreSAoZG9uJ3Qgc2Nyb2xsIGZvciBzdGlja3kgY29sdW1ucylcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLnZpc2libGVDb2x1bW5zW2NvbEluZGV4XTtcbiAgICBpZiAoY29sdW1uPy5zdGlja3kpIHtcbiAgICAgIC8vIEp1c3QgZW5zdXJlIHZlcnRpY2FsIHZpc2liaWxpdHkgZm9yIHN0aWNreSBjb2x1bW5zXG4gICAgICBpZiAoY2VsbFJlY3QudG9wIDwgdmlzaWJsZVRvcCkge1xuICAgICAgICBzY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wIC09ICh2aXNpYmxlVG9wIC0gY2VsbFJlY3QudG9wKTtcbiAgICAgIH0gZWxzZSBpZiAoY2VsbFJlY3QuYm90dG9tID4gdmlzaWJsZUJvdHRvbSkge1xuICAgICAgICBzY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wICs9IChjZWxsUmVjdC5ib3R0b20gLSB2aXNpYmxlQm90dG9tKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBjZWxsIGlzIGFscmVhZHkgZnVsbHkgdmlzaWJsZSBob3Jpem9udGFsbHkgKG5vIHNjcm9sbCBuZWVkZWQpXG4gICAgY29uc3QgaXNDZWxsRnVsbHlWaXNpYmxlSG9yaXpvbnRhbGx5ID0gY2VsbFJlY3QubGVmdCA+PSB2aXNpYmxlTGVmdCAmJiBjZWxsUmVjdC5yaWdodCA8PSB2aXNpYmxlUmlnaHQ7XG4gICAgXG4gICAgLy8gT25seSBzY3JvbGwgaG9yaXpvbnRhbGx5IGlmIGNlbGwgaXMgTk9UIGZ1bGx5IHZpc2libGVcbiAgICBpZiAoIWlzQ2VsbEZ1bGx5VmlzaWJsZUhvcml6b250YWxseSkge1xuICAgICAgaWYgKGNlbGxSZWN0LmxlZnQgPCB2aXNpYmxlTGVmdCkge1xuICAgICAgICAvLyBDZWxsIGlzIGhpZGRlbiBiZWhpbmQgbGVmdCBzdGlja3kgY29sdW1uc1xuICAgICAgICBzY3JvbGxDb250YWluZXIuc2Nyb2xsTGVmdCAtPSAodmlzaWJsZUxlZnQgLSBjZWxsUmVjdC5sZWZ0KTtcbiAgICAgIH0gZWxzZSBpZiAoY2VsbFJlY3QucmlnaHQgPiB2aXNpYmxlUmlnaHQpIHtcbiAgICAgICAgLy8gQ2VsbCBpcyBoaWRkZW4gYmVoaW5kIHJpZ2h0IHN0aWNreSBjb2x1bW5zXG4gICAgICAgIHNjcm9sbENvbnRhaW5lci5zY3JvbGxMZWZ0ICs9IChjZWxsUmVjdC5yaWdodCAtIHZpc2libGVSaWdodCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmVydGljYWwgc2Nyb2xsaW5nXG4gICAgaWYgKGNlbGxSZWN0LnRvcCA8IHZpc2libGVUb3ApIHtcbiAgICAgIHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgLT0gKHZpc2libGVUb3AgLSBjZWxsUmVjdC50b3ApO1xuICAgIH0gZWxzZSBpZiAoY2VsbFJlY3QuYm90dG9tID4gdmlzaWJsZUJvdHRvbSkge1xuICAgICAgc2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCArPSAoY2VsbFJlY3QuYm90dG9tIC0gdmlzaWJsZUJvdHRvbSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2Nyb2xsIGNvbnRhaW5lciBlbGVtZW50XG4gICAqL1xuICBwcml2YXRlIGdldFNjcm9sbENvbnRhaW5lckVsZW1lbnQoKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICAvLyBQcmVmZXIgY2FjaGVkIGNvbnRhaW5lciBpZiBhbHJlYWR5IHJlc29sdmVkXG4gICAgaWYgKHRoaXMuc2Nyb2xsQ29udGFpbmVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY3JvbGxDb250YWluZXI7XG4gICAgfVxuICAgIC8vIFZpcnR1YWwgc2Nyb2xsIHVzZXMgc2Nyb2xsVmlld3BvcnRcbiAgICBpZiAodGhpcy5pc1ZpcnR1YWxTY3JvbGxFbmFibGVkKCkgJiYgdGhpcy5zY3JvbGxWaWV3cG9ydD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIgPSB0aGlzLnNjcm9sbFZpZXdwb3J0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICByZXR1cm4gdGhpcy5zY3JvbGxDb250YWluZXI7XG4gICAgfVxuICAgIC8vIFN0YW5kYXJkIG1vZGUgdXNlcyAuc3QtdGFibGUgY29udGFpbmVyIHdpdGhpbiBUSElTIGNvbXBvbmVudCdzIGhvc3QgZWxlbWVudFxuICAgIC8vIFVzZSBlbGVtZW50UmVmIHRvIHF1ZXJ5IHdpdGhpbiB0aGUgY29tcG9uZW50IGluc3RlYWQgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvclxuICAgIC8vIHdoaWNoIHdvdWxkIHJldHVybiB0aGUgZmlyc3QgdGFibGUgb24gdGhlIHBhZ2VcbiAgICBjb25zdCBob3N0RWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoaG9zdEVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHRhYmxlQ29udGFpbmVyID0gaG9zdEVsZW1lbnQucXVlcnlTZWxlY3RvcignLnN0LXRhYmxlJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgICAgaWYgKHRhYmxlQ29udGFpbmVyKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyID0gdGFibGVDb250YWluZXI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNjcm9sbENvbnRhaW5lciB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0b3RhbCB3aWR0aCBvZiBzdGlja3kgY29sdW1ucyBvbiBsZWZ0IGFuZCByaWdodFxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVTdGlja3lXaWR0aHMoKTogeyBsZWZ0U3RpY2t5V2lkdGg6IG51bWJlcjsgcmlnaHRTdGlja3lXaWR0aDogbnVtYmVyIH0ge1xuICAgIGxldCBsZWZ0U3RpY2t5V2lkdGggPSAwO1xuICAgIGxldCByaWdodFN0aWNreVdpZHRoID0gMDtcblxuICAgIC8vIEFjY291bnQgZm9yIHJvdyBudW1iZXIgY29sdW1uIGlmIGVuYWJsZWRcbiAgICBpZiAodGhpcy5tZXJnZWRDb25maWcuc2hvd1Jvd051bWJlcikge1xuICAgICAgbGVmdFN0aWNreVdpZHRoICs9IDMwOyAvLyBSb3cgbnVtYmVyIGNvbHVtbiB3aWR0aFxuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSBmcm9tIGNvbHVtbiBjb25maWdzXG4gICAgZm9yIChjb25zdCBjb2wgb2YgdGhpcy52aXNpYmxlQ29sdW1ucykge1xuICAgICAgaWYgKGNvbC5zdGlja3kgPT09ICdsZWZ0Jykge1xuICAgICAgICBsZWZ0U3RpY2t5V2lkdGggKz0gKGNvbC53aWR0aCBhcyBudW1iZXIpIHx8IDEwMDtcbiAgICAgIH0gZWxzZSBpZiAoY29sLnN0aWNreSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICByaWdodFN0aWNreVdpZHRoICs9IChjb2wud2lkdGggYXMgbnVtYmVyKSB8fCAxMDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWNjb3VudCBmb3Igc2V0dGluZ3MgY29sdW1uIG9ubHkgd2hlbiByb3cgYWN0aW9ucyBhcmUgZW5hYmxlZCAodXNlIGNvbnNpc3RlbnQgd2lkdGgpXG4gICAgY29uc3Qgc2V0dGluZ3NDb2x1bW5XaWR0aCA9IHRoaXMuaGFzUm93QWN0aW9ucygpID8gMzIgOiAwO1xuICAgIHJpZ2h0U3RpY2t5V2lkdGggKz0gc2V0dGluZ3NDb2x1bW5XaWR0aDtcblxuICAgIHJldHVybiB7IGxlZnRTdGlja3lXaWR0aCwgcmlnaHRTdGlja3lXaWR0aCB9O1xuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIGNlbGwgY2xpY2tcbiAgICovXG4gIG9uQ2VsbENsaWNrKHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNLZXlib2FyZE5hdmlnYXRpb25FbmFibGVkKCkpIHJldHVybjtcbiAgICB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKS5mb2N1c0NlbGwocm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBjZWxsIGVudGVyaW5nIGVkaXQgbW9kZVxuICAgKi9cbiAgb25DZWxsRWRpdChldmVudDogQ2VsbEVkaXRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuY2VsbEVkaXQuZW1pdChldmVudCk7XG4gICAgXG4gICAgaWYgKHRoaXMuaXNLZXlib2FyZE5hdmlnYXRpb25FbmFibGVkKCkpIHtcbiAgICAgIGNvbnN0IHJvd0luZGV4ID0gZXZlbnQuY2VsbC5nZXRSb3dJbmRleCgpO1xuICAgICAgY29uc3QgY29sdW1uS2V5ID0gZXZlbnQuY29sdW1uS2V5O1xuICAgICAgY29uc3QgY29sdW1uSW5kZXggPSB0aGlzLnZpc2libGVDb2x1bW5zLmZpbmRJbmRleChjb2wgPT4gY29sLmtleSA9PT0gY29sdW1uS2V5KTtcbiAgICAgIFxuICAgICAgaWYgKHJvd0luZGV4ICE9PSB1bmRlZmluZWQgJiYgY29sdW1uSW5kZXggPj0gMCkge1xuICAgICAgICB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKS5zZXRFZGl0aW5nQ2VsbChyb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBjZWxsIHNhdmVcbiAgICovXG4gIG9uQ2VsbFNhdmUoZXZlbnQ6IENlbGxTYXZlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmNlbGxTYXZlLmVtaXQoZXZlbnQpO1xuICAgIFxuICAgIGlmICh0aGlzLmlzS2V5Ym9hcmROYXZpZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKS5jbGVhckVkaXRpbmdDZWxsKCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIGNlbGwgY2FuY2VsXG4gICAqL1xuICBvbkNlbGxDYW5jZWwoZXZlbnQ6IENlbGxDYW5jZWxFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuY2VsbENhbmNlbC5lbWl0KGV2ZW50KTtcbiAgICBcbiAgICBpZiAodGhpcy5pc0tleWJvYXJkTmF2aWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgdGhpcy5nZXRBY3RpdmVUYWJsZVN0YXRlKCkuY2xlYXJFZGl0aW5nQ2VsbCgpO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBjZWxsIHNhdmUgd2l0aCBuYXZpZ2F0aW9uIChFeGNlbC1saWtlIGJlaGF2aW9yKVxuICAgKi9cbiAgb25DZWxsU2F2ZUFuZE5hdmlnYXRlKGV2ZW50OiB7ZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGRpcmVjdGlvbjogTmF2aWdhdGlvbkRpcmVjdGlvbn0pOiB2b2lkIHtcbiAgICAvLyBOYXZpZ2F0aW9uIGlzIGFscmVhZHkgaGFuZGxlZCBieSB0aGUgZGlyZWN0aXZlIGFmdGVyIHNhdmVcbiAgICAvLyBKdXN0IGVuc3VyZSBlZGl0aW5nIHN0YXRlIGlzIGNsZWFyZWRcbiAgICBpZiAodGhpcy5pc0tleWJvYXJkTmF2aWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgdGhpcy5nZXRBY3RpdmVUYWJsZVN0YXRlKCkuY2xlYXJFZGl0aW5nQ2VsbCgpO1xuICAgICAgLy8gTW92ZSBmb2N1cyBpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdGlvblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpLm1vdmVGb2N1cyhldmVudC5kaXJlY3Rpb24pO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIGZvY3VzIG9uIHRhYmxlIGNvbnRhaW5lciAtIGZvY3VzIGZpcnN0IGNlbGwgaWYgbm8gY2VsbCBpcyBmb2N1c2VkXG4gICAqL1xuICBvblRhYmxlQ29udGFpbmVyRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNLZXlib2FyZE5hdmlnYXRpb25FbmFibGVkKCkpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCB0YWJsZVN0YXRlID0gdGhpcy5nZXRBY3RpdmVUYWJsZVN0YXRlKCk7XG4gICAgY29uc3QgY3VycmVudEZvY3VzID0gdGFibGVTdGF0ZS5nZXRGb2N1c2VkUG9zaXRpb24oKTtcbiAgICBcbiAgICAvLyBJZiBubyBjZWxsIGlzIGZvY3VzZWQsIGZvY3VzIHRoZSBmaXJzdCBjZWxsXG4gICAgaWYgKCFjdXJyZW50Rm9jdXMgJiYgdGhpcy52aXNpYmxlQ2VsbEdyaWQubGVuZ3RoID4gMCAmJiB0aGlzLnZpc2libGVDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRhYmxlU3RhdGUuZm9jdXNDZWxsKDAsIDApO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGtleWJvYXJkIG5hdmlnYXRpb24gaXMgZW5hYmxlZFxuICAgKi9cbiAgaXNLZXlib2FyZE5hdmlnYXRpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1lcmdlZENvbmZpZy5mZWF0dXJlcz8ua2V5Ym9hcmROYXZpZ2F0aW9uPy5lbmFibGVkID8/IGZhbHNlO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IEVkaXRNb2RlIGVudW0gdmFsdWUgZm9yIGNlbGxzXG4gICAqIEZvciBFeGNlbC1saWtlIHRhYmxlcyB3aXRoIGtleWJvYXJkIG5hdmlnYXRpb24sIHVzZSBFTlRFUiBtb2RlXG4gICAqIHdoaWNoIGFsbG93cyBhcnJvdyBrZXkgbmF2aWdhdGlvbiB3aXRob3V0IHRyaWdnZXJpbmcgZWRpdC5cbiAgICogRG91YmxlLWNsaWNrIHdpbGwgc3RpbGwgd29yayB0byBzdGFydCBlZGl0aW5nLlxuICAgKi9cbiAgZ2V0RWRpdE1vZGVGb3JDZWxscygpOiBFZGl0TW9kZSB7XG4gICAgLy8gSWYga2V5Ym9hcmQgbmF2aWdhdGlvbiBpcyBlbmFibGVkLCB1c2UgRU5URVIgbW9kZSBmb3IgRXhjZWwtbGlrZSBiZWhhdmlvclxuICAgIC8vIE90aGVyd2lzZSB1c2UgQ0xJQ0sgbW9kZSBmb3IgaW1tZWRpYXRlIGVkaXRpbmdcbiAgICBpZiAodGhpcy5pc0tleWJvYXJkTmF2aWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIEVkaXRNb2RlLkVOVEVSO1xuICAgIH1cbiAgICByZXR1cm4gRWRpdE1vZGUuQ0xJQ0s7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbGVhciBmb2N1cyB3aGVuIGNsaWNraW5nIG91dHNpZGUgdGFibGVcbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzS2V5Ym9hcmROYXZpZ2F0aW9uRW5hYmxlZCgpKSByZXR1cm47XG4gICAgXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHRhYmxlRWxlbWVudCA9IHRhcmdldC5jbG9zZXN0KCcuc3QtdGFibGUnKTtcbiAgICBcbiAgICBpZiAoIXRhYmxlRWxlbWVudCkge1xuICAgICAgdGhpcy5nZXRBY3RpdmVUYWJsZVN0YXRlKCkuY2xlYXJGb2N1cygpO1xuICAgICAgdGhpcy5nZXRBY3RpdmVUYWJsZVN0YXRlKCkuY2xlYXJFZGl0aW5nQ2VsbCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5mb2N1c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnZhbGlkYXRpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5kYXRhU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucmVxdWVzdEFkZFJvd1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnZpcnR1YWxTY3JvbGxTdGF0ZSQuY29tcGxldGUoKTtcbiAgICB0aGlzLmludGVybmFsRGF0YSQuY29tcGxldGUoKTtcbiAgfVxuICBcbn1cblxuIiwiPCEtLSBUb3AgcGFnaW5hdGlvbiBjb250cm9scyAtLT5cbjxzdC1wYWdpbmF0aW9uIFxuICAqbmdJZj1cInNob3dUb3BQYWdpbmF0aW9uKCkgJiYgIShtZXJnZWRDb25maWcudGFibGVTa2VsZXRvbj8uZW5hYmxlZCB8IGFzeW5jKVwiIFxuICBbdGFibGVTdGF0ZV09XCJnZXRBY3RpdmVUYWJsZVN0YXRlKClcIlxuICBbdGFibGVDb25maWddPVwibWVyZ2VkQ29uZmlnXCJcbiAgcG9zaXRpb249XCJ0b3BcIj5cbjwvc3QtcGFnaW5hdGlvbj5cblxuPGRpdiBjbGFzcz1cInN0LXRhYmxlXCIgKm5nSWY9XCIhKG1lcmdlZENvbmZpZy50YWJsZVNrZWxldG9uPy5lbmFibGVkIHwgYXN5bmMpXCIgXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAndmlydHVhbC1zY3JvbGwtZW5hYmxlZCc6IGlzVmlydHVhbFNjcm9sbEVuYWJsZWQoKSxcbiAgICAna2V5Ym9hcmQtbmF2aWdhdGlvbi1lbmFibGVkJzogaXNLZXlib2FyZE5hdmlnYXRpb25FbmFibGVkKClcbiAgfVwiXG4gIFtuZ1N0eWxlXT1cIntcbiAgICAnbWF4LWhlaWdodC5weCc6ICFpc1ZpcnR1YWxTY3JvbGxFbmFibGVkKCkgPyBtZXJnZWRDb25maWcuZGlzcGxheT8ubWF4SGVpZ2h0IDogbnVsbFxuICB9XCJcbiAgc3RLZXlib2FyZE5hdmlnYXRpb25cbiAgW3RhYmxlU3RhdGVdPVwiZ2V0QWN0aXZlVGFibGVTdGF0ZSgpXCJcbiAgW2FkZFJvd09uTmF2aWdhdGVQYXN0RW5kXT1cIm1lcmdlZENvbmZpZy5mZWF0dXJlcz8ua2V5Ym9hcmROYXZpZ2F0aW9uPy5hZGRSb3dPbk5hdmlnYXRlUGFzdEVuZCB8fCBmYWxzZVwiXG4gIFthdHRyLnRhYmluZGV4XT1cImlzS2V5Ym9hcmROYXZpZ2F0aW9uRW5hYmxlZCgpID8gMCA6IC0xXCJcbiAgKGZvY3VzKT1cIm9uVGFibGVDb250YWluZXJGb2N1cygkZXZlbnQpXCJcbiAgW2F0dHIudGl0bGVdPVwiaXNLZXlib2FyZE5hdmlnYXRpb25FbmFibGVkKCkgPyAnQ2xpY2sgYSBjZWxsIG9yIHByZXNzIFRhYiB0byBzdGFydCBrZXlib2FyZCBuYXZpZ2F0aW9uJyA6IG51bGxcIj5cbiAgPCEtLSBVbmlmaWVkIFRhYmxlIEFjdGlvbnMgTWVudSAtLT5cblxuICA8IS0tIFZpcnR1YWwgc2Nyb2xsIHZpZXdwb3J0IHdyYXBwZXIgLS0+XG4gIDxkaXYgY2xhc3M9XCJzdC1zY3JvbGwtdmlld3BvcnRcIiAjc2Nyb2xsVmlld3BvcnQgKm5nSWY9XCJpc1ZpcnR1YWxTY3JvbGxFbmFibGVkKClcIlxuICAgIFtuZ1N0eWxlXT1cInsgJ2hlaWdodC5weCc6IGdldFZpcnR1YWxTY3JvbGxWaWV3cG9ydEhlaWdodCgpIH1cIj5cblxuICAgIDwhLS0gU3BhY2VyIHRvIGNyZWF0ZSBzY3JvbGxhYmxlIGFyZWEgLS0+XG4gICAgPGRpdiBjbGFzcz1cInN0LXNjcm9sbC1zcGFjZXJcIiBbbmdTdHlsZV09XCJ7ICdoZWlnaHQucHgnOiB2aXJ0dWFsU2Nyb2xsVG90YWxIZWlnaHQkIHwgYXN5bmMgfVwiPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBUYWJsZSBwb3NpdGlvbmVyIHdpdGggdHJhbnNmb3JtIChpbnN0ZWFkIG9mIHRib2R5KSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwic3QtdGFibGUtcG9zaXRpb25lclwiIFtuZ1N0eWxlXT1cInsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgnICsgKHZpcnR1YWxTY3JvbGxPZmZzZXRZJCB8IGFzeW5jKSArICdweCknIH1cIj5cbiAgICAgIDwhLS0gVGFibGUgd2l0aCBvbmx5IHZpc2libGUgcm93cyAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJsZVRlbXBsYXRlOyBjb250ZXh0OiB7IFxuICAgICAgICBtb2RlOiAndmlydHVhbCcsXG4gICAgICAgIHRoZWFkU3R5bGU6IHsgdG9wOiAodmlydHVhbFNjcm9sbE9mZnNldFlOZWckIHwgYXN5bmMpICsgJ3B4JyB9XG4gICAgICB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICBcbiAgPCEtLSBTdGFuZGFyZCB0YWJsZSAod2hlbiB2aXJ0dWFsIHNjcm9sbCBkaXNhYmxlZCkgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNWaXJ0dWFsU2Nyb2xsRW5hYmxlZCgpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlVGVtcGxhdGU7IGNvbnRleHQ6IHsgXG4gICAgICBtb2RlOiAnc3RhbmRhcmQnLFxuICAgICAgdGhlYWRTdHlsZTogbnVsbFxuICAgIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBTaGFyZWQgQ29sdW1uIE1lbnUgRHJvcGRvd24gLS0+XG4gIDxzdC1jb2x1bW4tbWVudS1kcm9wZG93biBcbiAgW2lzT3Blbl09XCJjb2x1bW5NZW51U3RhdGUuaXNPcGVuXCJcbiAgW3Bvc2l0aW9uXT1cImNvbHVtbk1lbnVTdGF0ZS5wb3NpdGlvblwiXG4gIFtjb250ZXh0XT1cImNvbHVtbk1lbnVTdGF0ZS5jb250ZXh0XCJcbiAgKGFjdGlvbkNsaWNrZWQpPVwib25Db2x1bW5BY3Rpb25DbGlja2VkKCRldmVudClcIlxuICAoY2xvc2VkKT1cImNsb3NlQ29sdW1uTWVudSgpXCI+XG4gIDwvc3QtY29sdW1uLW1lbnUtZHJvcGRvd24+XG48L2Rpdj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIihtZXJnZWRDb25maWcudGFibGVTa2VsZXRvbj8uZW5hYmxlZCB8IGFzeW5jKVwiPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2tlbGV0b25Mb2FkZXJcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48IS0tIFNoYXJlZCBSb3cgQWN0aW9ucyBEcm9wZG93biAtLT5cbjxzdC1yb3ctYWN0aW9ucy1kcm9wZG93biBbaXNPcGVuXT1cImRyb3Bkb3duU3RhdGUuaXNPcGVuXCIgW3Bvc2l0aW9uXT1cImRyb3Bkb3duU3RhdGUucG9zaXRpb25cIlxuICBbY29udGV4dF09XCJkcm9wZG93blN0YXRlLmNvbnRleHRcIiAoYWN0aW9uQ2xpY2tlZCk9XCJvblJvd0FjdGlvbkNsaWNrZWQoJGV2ZW50KVwiIChjbG9zZWQpPVwiY2xvc2VSb3dBY3Rpb25zRHJvcGRvd24oKVwiPlxuPC9zdC1yb3ctYWN0aW9ucy1kcm9wZG93bj5cblxuXG48IS0tIEJvdHRvbSBwYWdpbmF0aW9uIGNvbnRyb2xzIC0tPlxuPHN0LXBhZ2luYXRpb24gXG4gICpuZ0lmPVwic2hvd0JvdHRvbVBhZ2luYXRpb24oKSAmJiAhKG1lcmdlZENvbmZpZy50YWJsZVNrZWxldG9uPy5lbmFibGVkIHwgYXN5bmMpXCIgXG4gIFt0YWJsZVN0YXRlXT1cImdldEFjdGl2ZVRhYmxlU3RhdGUoKVwiXG4gIFt0YWJsZUNvbmZpZ109XCJtZXJnZWRDb25maWdcIlxuICBwb3NpdGlvbj1cImJvdHRvbVwiPlxuPC9zdC1wYWdpbmF0aW9uPlxuXG5cbiAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+XG4gIDwhLS0gUkVVU0FCTEUgVEFCTEUgVEVNUExBVEUgLS0+XG4gIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPlxuICA8bmctdGVtcGxhdGUgI3RhYmxlVGVtcGxhdGUgbGV0LW1vZGU9XCJtb2RlXCIgbGV0LXRoZWFkU3R5bGU9XCJ0aGVhZFN0eWxlXCI+XG4gICAgPHRhYmxlIGNsYXNzPVwic3QtdGFibGUtZWxlbWVudFwiPlxuICAgICAgPCEtLSBUQUJMRSBIRUFERVIgLS0+XG4gICAgICA8dGhlYWQgW25nQ2xhc3NdPVwieyAnc3RpY2t5JzogbWVyZ2VkQ29uZmlnLmRpc3BsYXk/LnN0aWNreUhlYWRlciB9XCIgW25nU3R5bGVdPVwidGhlYWRTdHlsZVwiPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPCEtLSBSb3cgTnVtYmVyIEhlYWRlciAtLT5cbiAgICAgICAgICA8dGggKm5nSWY9XCJtZXJnZWRDb25maWcuc2hvd1Jvd051bWJlclwiIGNsYXNzPVwicm93LW51bWJlci1oZWFkZXIgaGVhZGVyLWNlbGwgc3RpY2t5LWxlZnRcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdzdGlja3knLFxuICAgICAgICAgICAgICAgICdsZWZ0LnB4JzogMCxcbiAgICAgICAgICAgICAgICAnei1pbmRleCc6IFpJbmRleC5TVElDS1lfSEVBREVSX0NFTEwsXG4gICAgICAgICAgICAgICAgJ3dpZHRoLnB4JzogMzBcbiAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgI1xuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPCEtLSBDb2x1bW4gSGVhZGVycyAtLT5cbiAgICAgICAgICA8dGggXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHZpc2libGVDb2x1bW5zOyBsZXQgY29sSW5kZXggPSBpbmRleDsgbGV0IGlzRmlyc3QgPSBmaXJzdDsgbGV0IGlzTGFzdCA9IGxhc3RcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnaGVhZGVyLWNlbGwnOiBtb2RlID09PSAnc3RhbmRhcmQnLFxuICAgICAgICAgICAgICAnc3RpY2t5LWxlZnQnOiBjb2x1bW4uc3RpY2t5ID09PSAnbGVmdCcsXG4gICAgICAgICAgICAgICdzdGlja3ktcmlnaHQnOiBjb2x1bW4uc3RpY2t5ID09PSAncmlnaHQnLFxuICAgICAgICAgICAgICAnc3RpY2t5LXJpZ2h0LWZpcnN0JzogY29sdW1uLnN0aWNreSA9PT0gJ3JpZ2h0JyAmJiBpc0ZpcnN0U3RpY2t5UmlnaHQoY29sdW1uLmtleSksXG4gICAgICAgICAgICAgICdyZXNpemFibGUnOiBjb2x1bW4ucmVzaXphYmxlICE9PSBmYWxzZVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBjb2x1bW4uc3RpY2t5ID8gJ3N0aWNreScgOiBudWxsLFxuICAgICAgICAgICAgICAnbGVmdC5weCc6IGNvbHVtbi5zdGlja3kgPT09ICdsZWZ0JyA/IChjb2x1bW4uc3RpY2t5T2Zmc2V0IHx8IDApIDogbnVsbCxcbiAgICAgICAgICAgICAgJ3JpZ2h0LnB4JzogY29sdW1uLnN0aWNreSA9PT0gJ3JpZ2h0JyA/IChjb2x1bW4uc3RpY2t5T2Zmc2V0IHx8IDApIDogbnVsbCxcbiAgICAgICAgICAgICAgJ3otaW5kZXgnOiBjb2x1bW4uc3RpY2t5ID8gWkluZGV4LlNUSUNLWV9IRUFERVJfQ0VMTCA6IG51bGwsXG4gICAgICAgICAgICAgICd3aWR0aC5weCc6IGNvbHVtbi53aWR0aFxuICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8c3QtaGVhZGVyIFxuICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICAgIFtjb2x1bW5JbmRleF09XCJjb2xJbmRleFwiXG4gICAgICAgICAgICAgIFtpc0ZpcnN0Q29sdW1uXT1cImlzRmlyc3RcIlxuICAgICAgICAgICAgICBbaXNMYXN0Q29sdW1uXT1cImlzTGFzdFwiXG4gICAgICAgICAgICAgIFt0YWJsZVN0YXRlXT1cImdldEFjdGl2ZVRhYmxlU3RhdGUoKVwiXG4gICAgICAgICAgICAgIFtlbmFibGVTb3J0aW5nXT1cIm1lcmdlZENvbmZpZy5zb3J0aW5nPy5lbmFibGVkID8/IGVuYWJsZVNvcnRpbmdcIlxuICAgICAgICAgICAgICBbZW5hYmxlRmlsdGVyaW5nXT1cIm1lcmdlZENvbmZpZy5maWx0ZXJpbmc/LmVuYWJsZWQgPz8gZW5hYmxlRmlsdGVyaW5nXCJcbiAgICAgICAgICAgICAgKGNvbHVtbk1vdmVkKT1cIm9uQ29sdW1uTW92ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChtZW51Q2xpY2spPVwib3BlbkNvbHVtbk1lbnUoJGV2ZW50LCBjb2x1bW4sIGNvbEluZGV4LCBpc0ZpcnN0LCBpc0xhc3QpXCI+XG4gICAgICAgICAgICA8L3N0LWhlYWRlcj5cblxuICAgICAgICAgICAgPGRpdiBcbiAgICAgICAgICAgICAgY2xhc3M9XCJyZXNpemUtaGFuZGxlXCIgXG4gICAgICAgICAgICAgIHN0Q29sdW1uUmVzaXplXG4gICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgKGNvbHVtblJlc2l6ZWQpPVwib25Db2x1bW5SZXNpemVkKCRldmVudClcIlxuICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi5yZXNpemFibGUgIT09IGZhbHNlXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIFxuICAgICAgICAgIDwhLS0gU2V0dGluZ3MgQ29sdW1uIEhlYWRlciAtLT5cbiAgICAgICAgICA8dGggXG4gICAgICAgICAgICBjbGFzcz1cInNldHRpbmdzLWNvbHVtbiBzdGlja3ktcmlnaHRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaGVhZGVyLWNlbGwnOiBtb2RlID09PSAnc3RhbmRhcmQnIH1cIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnei1pbmRleCc6IFpJbmRleC5TVElDS1lfSEVBREVSX0NFTEwgfVwiPlxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdmbGV4LWNlbnRlcic6IG1vZGUgPT09ICd2aXJ0dWFsJywgJ2hlYWRlci1jb250ZW50JzogbW9kZSA9PT0gJ3N0YW5kYXJkJyB9XCI+XG4gICAgICAgICAgICAgIDxzdC10YWJsZS1hY3Rpb25zIFxuICAgICAgICAgICAgICAgIFt0YWJsZVN0YXRlXT1cImdldEFjdGl2ZVRhYmxlU3RhdGUoKVwiXG4gICAgICAgICAgICAgICAgW2FsbG93QWRkQ29sdW1uXT1cIm1lcmdlZENvbmZpZy5mZWF0dXJlcz8uY29sdW1uTWFuYWdlbWVudD8uYWxsb3dBZGQgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgIChhZGRDb2x1bW5DbGlja2VkKT1cIm9uQWRkQ29sdW1uQ2xpY2soKVwiPlxuICAgICAgICAgICAgICA8L3N0LXRhYmxlLWFjdGlvbnM+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cblxuICAgICAgPCEtLSBUQUJMRSBCT0RZIC0tPlxuICAgICAgPHRib2R5PlxuICAgICAgICA8IS0tIFZpcnR1YWwgU2Nyb2xsIFJvd3MgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlID09PSAndmlydHVhbCdcIj5cbiAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiB2aXNpYmxlUm93cyQgfCBhc3luYzsgbGV0IHJlbGF0aXZlSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVJvd0luZGV4XCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtcm93LWluZGV4XT1cImdldEFic29sdXRlUm93SW5kZXgocmVsYXRpdmVJbmRleClcIj5cbiAgICAgICAgICAgIDwhLS0gUm93IE51bWJlciBDZWxsIC0tPlxuICAgICAgICAgICAgPHRkICpuZ0lmPVwibWVyZ2VkQ29uZmlnLnNob3dSb3dOdW1iZXJcIiBjbGFzcz1cInJvdy1udW1iZXItY2VsbFwiIFxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzdGlja3ktbGVmdCc6ICdsZWZ0JyB9XCJcbiAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICd3aWR0aC5weCc6IDMwLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnc3RpY2t5JyxcbiAgICAgICAgICAgICAgICAnbGVmdC5weCc6IDAsXG4gICAgICAgICAgICAgICAgJ3otaW5kZXgnOiBaSW5kZXguU1RJQ0tZX0JPRFlfQ0VMTCxcbiAgICAgICAgICAgICAgICAnaGVpZ2h0LnB4JzogbW9kZSA9PT0gJ3ZpcnR1YWwnID8gZ2V0VmlydHVhbFNjcm9sbEl0ZW1TaXplKCkgOiBudWxsXG4gICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAge3tnZXRBYnNvbHV0ZVJvd0luZGV4KHJlbGF0aXZlSW5kZXgpICsgMX19XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvZHlDZWxsVGVtcGxhdGU7IGNvbnRleHQ6IHsgXG4gICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICByb3dJbmRleDogZ2V0QWJzb2x1dGVSb3dJbmRleChyZWxhdGl2ZUluZGV4KSxcbiAgICAgICAgICAgICAgbW9kZTogJ3ZpcnR1YWwnLFxuICAgICAgICAgICAgICByZWxhdGl2ZUluZGV4OiByZWxhdGl2ZUluZGV4XG4gICAgICAgICAgICB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBTdGFuZGFyZCBSb3dzIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ3N0YW5kYXJkJ1wiPlxuICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIHZpc2libGVDZWxsR3JpZDsgbGV0IHJvd0luZGV4ID0gaW5kZXhcIiBbYXR0ci5kYXRhLXJvdy1pbmRleF09XCJyb3dJbmRleFwiPlxuICAgICAgICAgICAgPCEtLSBSb3cgTnVtYmVyIENlbGwgLS0+XG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJtZXJnZWRDb25maWcuc2hvd1Jvd051bWJlclwiIGNsYXNzPVwicm93LW51bWJlci1jZWxsXCIgXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3N0aWNreS1sZWZ0JzogJ2xlZnQnIH1cIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgJ3dpZHRoLnB4JzogMzAsXG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdzdGlja3knLFxuICAgICAgICAgICAgICAgICdsZWZ0LnB4JzogMCxcbiAgICAgICAgICAgICAgICAnei1pbmRleCc6IFpJbmRleC5TVElDS1lfQk9EWV9DRUxMLFxuICAgICAgICAgICAgICAgICdoZWlnaHQucHgnOiBtb2RlID09PSAndmlydHVhbCcgPyBnZXRWaXJ0dWFsU2Nyb2xsSXRlbVNpemUoKSA6IG51bGxcbiAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICB7e3Jvd0luZGV4ICsgMX19XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvZHlDZWxsVGVtcGxhdGU7IGNvbnRleHQ6IHsgXG4gICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICByb3dJbmRleDogcm93SW5kZXgsXG4gICAgICAgICAgICAgIG1vZGU6ICdzdGFuZGFyZCdcbiAgICAgICAgICAgIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPlxuICA8IS0tIFJFVVNBQkxFIEJPRFkgQ0VMTCBURU1QTEFURSAtLT5cbiAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+XG4gIDxuZy10ZW1wbGF0ZSAjYm9keUNlbGxUZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIiBsZXQtbW9kZT1cIm1vZGVcIiBsZXQtcmVsYXRpdmVJbmRleD1cInJlbGF0aXZlSW5kZXhcIj5cbiAgICA8IS0tIERhdGEgQ2VsbHMgLS0+XG4gICAgPHRkIFxuICAgICAgKm5nRm9yPVwibGV0IGNlbGwgb2Ygcm93OyBsZXQgY29sSW5kZXggPSBpbmRleFwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdzdGlja3ktbGVmdCc6IHZpc2libGVDb2x1bW5zW2NvbEluZGV4XT8uc3RpY2t5ID09PSAnbGVmdCcsXG4gICAgICAgICdzdGlja3ktcmlnaHQnOiB2aXNpYmxlQ29sdW1uc1tjb2xJbmRleF0/LnN0aWNreSA9PT0gJ3JpZ2h0JyxcbiAgICAgICAgJ3N0aWNreS1yaWdodC1maXJzdCc6IHZpc2libGVDb2x1bW5zW2NvbEluZGV4XT8uc3RpY2t5ID09PSAncmlnaHQnICYmIHZpc2libGVDb2x1bW5zW2NvbEluZGV4XT8ua2V5ICYmIGlzRmlyc3RTdGlja3lSaWdodCh2aXNpYmxlQ29sdW1uc1tjb2xJbmRleF0ua2V5KSxcbiAgICAgICAgJ2FsaWduLWNlbnRlcic6IHZpc2libGVDb2x1bW5zW2NvbEluZGV4XT8uYWxpZ25tZW50ID09PSAnY2VudGVyJyxcbiAgICAgICAgJ2FsaWduLXJpZ2h0JzogdmlzaWJsZUNvbHVtbnNbY29sSW5kZXhdPy5hbGlnbm1lbnQgPT09ICdyaWdodCcsXG4gICAgICAgICdjZWxsLWZvY3VzZWQnOiBjZWxsLmlzRm9jdXNlZCgpXG4gICAgICB9XCJcbiAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgcG9zaXRpb246IHZpc2libGVDb2x1bW5zW2NvbEluZGV4XT8uc3RpY2t5ID8gJ3N0aWNreScgOiBudWxsLFxuICAgICAgICAnbGVmdC5weCc6IHZpc2libGVDb2x1bW5zW2NvbEluZGV4XT8uc3RpY2t5ID09PSAnbGVmdCcgPyAodmlzaWJsZUNvbHVtbnNbY29sSW5kZXhdPy5zdGlja3lPZmZzZXQgfHwgMCkgOiBudWxsLFxuICAgICAgICAncmlnaHQucHgnOiB2aXNpYmxlQ29sdW1uc1tjb2xJbmRleF0/LnN0aWNreSA9PT0gJ3JpZ2h0JyA/ICh2aXNpYmxlQ29sdW1uc1tjb2xJbmRleF0/LnN0aWNreU9mZnNldCB8fCAwKSA6IG51bGwsXG4gICAgICAgICd6LWluZGV4JzogdmlzaWJsZUNvbHVtbnNbY29sSW5kZXhdPy5zdGlja3kgPyBaSW5kZXguU1RJQ0tZX0JPRFlfQ0VMTCA6IG51bGwsXG4gICAgICAgICd3aWR0aC5weCc6IHZpc2libGVDb2x1bW5zW2NvbEluZGV4XT8ud2lkdGgsXG4gICAgICAgICdoZWlnaHQucHgnOiBtb2RlID09PSAndmlydHVhbCcgPyBnZXRWaXJ0dWFsU2Nyb2xsSXRlbVNpemUoKSA6IG51bGxcbiAgICAgIH1cIlxuICAgICAgKGNsaWNrKT1cImlzS2V5Ym9hcmROYXZpZ2F0aW9uRW5hYmxlZCgpID8gb25DZWxsQ2xpY2socm93SW5kZXgsIGNvbEluZGV4KSA6IG51bGxcIj5cbiAgICAgIFxuICAgICAgPCEtLSBWaXJ0dWFsIFNjcm9sbCBDZWxsIC0tPlxuICAgICAgPHN0LWNlbGwgXG4gICAgICAgICpuZ0lmPVwibW9kZSA9PT0gJ3ZpcnR1YWwnXCJcbiAgICAgICAgW2NlbGxdPVwiY2VsbFwiIFxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJjZWxsLmlzRm9jdXNlZCgpID8gMCA6IC0xXCIgXG4gICAgICAgIFtlZGl0TW9kZV09XCJnZXRFZGl0TW9kZUZvckNlbGxzKClcIlxuICAgICAgICBbdGFibGVTdGF0ZV09XCJnZXRBY3RpdmVUYWJsZVN0YXRlKClcIlxuICAgICAgICBbdGFibGVDb25maWddPVwibWVyZ2VkQ29uZmlnXCJcbiAgICAgICAgW2NvbHVtbkluZGV4XT1cImNvbEluZGV4XCJcbiAgICAgICAgKGNlbGxFZGl0KT1cIm9uQ2VsbEVkaXQoJGV2ZW50KVwiIFxuICAgICAgICAoY2VsbFNhdmUpPVwib25DZWxsU2F2ZSgkZXZlbnQpXCJcbiAgICAgICAgKGNlbGxTYXZlQW5kTmF2aWdhdGUpPVwib25DZWxsU2F2ZUFuZE5hdmlnYXRlKCRldmVudClcIiBcbiAgICAgICAgKGNlbGxDYW5jZWwpPVwib25DZWxsQ2FuY2VsKCRldmVudClcIlxuICAgICAgICAoY2VsbENoYW5nZSk9XCJjZWxsQ2hhbmdlLmVtaXQoJGV2ZW50KVwiPlxuICAgICAgPC9zdC1jZWxsPlxuXG4gICAgICA8IS0tIFN0YW5kYXJkIENlbGwgLS0+XG4gICAgICA8c3QtY2VsbCBcbiAgICAgICAgKm5nSWY9XCJtb2RlID09PSAnc3RhbmRhcmQnXCJcbiAgICAgICAgW2NlbGxdPVwiY2VsbFwiICBcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiY2VsbC5pc0ZvY3VzZWQoKSA/IDAgOiAtMVwiXG4gICAgICAgIFt0YWJsZVN0YXRlXT1cImdldEFjdGl2ZVRhYmxlU3RhdGUoKVwiXG4gICAgICAgIFt0YWJsZUNvbmZpZ109XCJtZXJnZWRDb25maWdcIlxuICAgICAgICBbY29sdW1uSW5kZXhdPVwiY29sSW5kZXhcIlxuICAgICAgICAoY2VsbFNhdmUpPVwib25DZWxsU2F2ZSgkZXZlbnQpXCJcbiAgICAgICAgKGNlbGxDaGFuZ2UpPVwiY2VsbENoYW5nZS5lbWl0KCRldmVudClcIj5cbiAgICAgIDwvc3QtY2VsbD5cbiAgICA8L3RkPlxuICAgIFxuICAgIDwhLS0gUm93IEFjdGlvbnMgQ2VsbCAtLT5cbiAgICA8dGQgY2xhc3M9XCJzZXR0aW5ncy1jb2x1bW5cIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnaGFzLWFjdGlvbnMnOiBoYXNSb3dBY3Rpb25zKClcbiAgICAgIH1cIlxuICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICBwb3NpdGlvbjogaGFzUm93QWN0aW9ucygpID8gJ3N0aWNreScgOiBudWxsLFxuICAgICAgICAncmlnaHQucHgnOiBoYXNSb3dBY3Rpb25zKCkgPyAwIDogbnVsbCxcbiAgICAgICAgJ3otaW5kZXgnOiBoYXNSb3dBY3Rpb25zKCkgPyBaSW5kZXguU1RJQ0tZX0JPRFlfQ0VMTCA6IG51bGxcbiAgICAgIH1cIj5cbiAgICAgIDxidXR0b24gXG4gICAgICAgICpuZ0lmPVwiaGFzUm93QWN0aW9ucygpXCJcbiAgICAgICAgY2xhc3M9XCJzZXR0aW5ncy10cmlnZ2VyXCJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5Sb3dBY3Rpb25zRHJvcGRvd24oJGV2ZW50LCBnZXRSb3dEYXRhKHJvd0luZGV4KSwgcm93SW5kZXgpXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICBhcmlhLWxhYmVsPVwiUm93IGFjdGlvbnNcIj5cbiAgICAgICAg4ouvXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L3RkPlxuICA8L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3NrZWxldG9uTG9hZGVyPlxuICA8ZGl2IGNsYXNzPVwibGlzdC1yb3dcIiAqbmdJZj1cIihtZXJnZWRDb25maWcudGFibGVTa2VsZXRvbj8uZW5hYmxlZCB8IGFzeW5jKVwiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGkgb2Ygc2tlbGV0b25Db2x1bW5zXCIgY2xhc3M9XCJsaXN0LWNvbnRlbnRcIj5cbiAgICAgIDxuaWxlLXNrZWxldG9uLWxvYWRlciB2YXJpYW50PVwidGV4dFwiIHdpZHRoPVwiOTAlXCIgaGVpZ2h0PVwiMThcIiAqbmdGb3I9XCJsZXQgaiBvZiBza2VsZXRvblJvd3NcIj48L25pbGUtc2tlbGV0b24tbG9hZGVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+Il19
|
|
1430
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9yZW5kZXJlci9jb21wb25lbnRzL3N0LXRhYmxlL3N0LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvcmVuZGVyZXIvY29tcG9uZW50cy9zdC10YWJsZS9zdC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUErQyxTQUFTLEVBQUUsVUFBVSxFQUFpQixZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEssT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEVBQWUsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV2RixPQUFPLEVBQWtFLFFBQVEsRUFBdUIsTUFBTSw0QkFBNEIsQ0FBQztBQUMzSSxPQUFPLEVBQUUsZUFBZSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUNqRSxPQUFPLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFRekQsTUFBTSxPQUFPLGdCQUFnQjtJQThIM0IsWUFDVSxlQUEyQyxFQUMzQyxNQUErQixFQUMvQixvQkFBMEMsRUFDMUMsVUFBbUM7UUFIbkMsb0JBQWUsR0FBZixlQUFlLENBQTRCO1FBQzNDLFdBQU0sR0FBTixN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LEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQTQ4Q2pELGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEFmdGVyVmlld0luaXQsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29sdW1uQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NvbHVtbi1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IENlbGwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2VsbC5jbGFzcyc7XG5pbXBvcnQgeyBUYWJsZVN0YXRlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLXN0YXRlLmNsYXNzJztcbmltcG9ydCB7IFRhYmxlQ29uZmlnLCBtZXJnZVRhYmxlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3RhYmxlLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGFibGVTdGF0ZUNoYW5nZUV2ZW50LCBDb2x1bW5SZXNpemVFdmVudCwgQ29sdW1uQWRkRXZlbnQsIENvbHVtbk1vdmVFdmVudCwgQ2VsbEZvY3VzUG9zaXRpb24sIERhdGFDaGFuZ2VFdmVudCB9IGZyb20gJy4uLy4uL21vZGVscy90YWJsZS10eXBlcyc7XG5pbXBvcnQgeyBDZWxsQ2hhbmdlRXZlbnQsIENlbGxTYXZlRXZlbnQsIENlbGxFZGl0RXZlbnQsIENlbGxDYW5jZWxFdmVudCwgRWRpdE1vZGUsIE5hdmlnYXRpb25EaXJlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvY2VsbC10eXBlcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEpzb25TY2hlbWFWYWxpZGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvanNvbi1zY2hlbWEtdmFsaWRhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NoZW1hVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3NjaGVtYS12YWxpZGF0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24tbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmlydHVhbFNjcm9sbFNlcnZpY2UsIFZpcnR1YWxTY3JvbGxTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3ZpcnR1YWwtc2Nyb2xsLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm93QWN0aW9uLCBSb3dBY3Rpb25Db250ZXh0LCBSb3dBY3Rpb25FdmVudCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9yb3ctYWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb2x1bW5BY3Rpb24sIENvbHVtbkFjdGlvbkNvbnRleHQsIENvbHVtbkFjdGlvbkV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NvbHVtbi1hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFRhYmxlWkluZGV4IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3otaW5kZXguZW51bSc7XG5pbXBvcnQgeyBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLXR5cGVzJztcbmltcG9ydCB7IFRhYmxlVmFsaWRhdGlvblN0YXRlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLXZhbGlkYXRpb24tc3RhdGUuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3QtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3QtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdC10YWJsZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFN0VGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgLy8gWi1JbmRleCBjb25zdGFudHMgZm9yIHRlbXBsYXRlIHVzZVxuICByZWFkb25seSBaSW5kZXggPSBUYWJsZVpJbmRleDtcbiAgXG4gIC8vIE5FVzogUHJpbWFyeSBjb25maWd1cmF0aW9uIGlucHV0XG4gIEBJbnB1dCgpIHRhYmxlQ29uZmlnITogVGFibGVDb25maWc7XG4gIFxuICAvLyBORVc6IFJhdyBkYXRhIGlucHV0IChhbHRlcm5hdGl2ZSB0byBjZWxsR3JpZClcbiAgQElucHV0KCkgZGF0YT86IGFueVtdO1xuICBcbiAgLy8gTkVXOiBPYnNlcnZhYmxlL0JlaGF2aW9yU3ViamVjdCBkYXRhIGlucHV0IChmb3IgcmVhY3RpdmUgZGF0YSBzdHJlYW1zKVxuICBASW5wdXQoKSBkYXRhJD86IE9ic2VydmFibGU8YW55W10+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/LnN0YXRlQ2hhbmdlJFxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2UuZW1pdChldmVudCk7XG5cbiAgICAgICAgLy8gVXBkYXRlIHZpc2libGUgY29sdW1ucyBhbmQgY2VsbCBncmlkIG9uIHZpc2liaWxpdHkgY2hhbmdlc1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2NvbHVtbi12aXNpYmlsaXR5JyB8fCBldmVudC50eXBlID09PSAnY29sdW1uLWNvbmZpZycpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVEYXRhKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBleHRlcm5hbCBUYWJsZVN0YXRlIGNoYW5nZXNcbiAgICovXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9FeHRlcm5hbFRhYmxlU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRhYmxlU3RhdGUpIHJldHVybjtcbiAgICBcbiAgICB0aGlzLnN0YXRlU3Vic2NyaXB0aW9uID0gdGhpcy50YWJsZVN0YXRlLnN0YXRlQ2hhbmdlJFxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgICAgIFxuICAgICAgICAvLyBVcGRhdGUgdmlzaWJsZSBjb2x1bW5zIGFuZCBjZWxsIGdyaWQgb24gdmlzaWJpbGl0eSBjaGFuZ2VzXG4gICAgICAgIGlmIChldmVudC50eXBlID09PSAnY29sdW1uLXZpc2liaWxpdHknIHx8IGV2ZW50LnR5cGUgPT09ICdjb2x1bW4tY29uZmlnJykge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZURhdGEoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgXG4gICAgLy8gU3Vic2NyaWJlIHRvIHZhbGlkYXRpb24gc3RhdGUgY2hhbmdlcyBhbmQgcmUtZW1pdFxuICAgdGhpcy5zdWJzY3JpYmVUb1ZhbGlkYXRpb25TdGF0ZSgpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ3JlYXRlIGNlbGwgZ3JpZCBmcm9tIHJhdyBkYXRhXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUNlbGxHcmlkRnJvbURhdGEoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRhdGEpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRBY3RpdmVDb2x1bW5zKCk7XG4gICAgdGhpcy5pbnRlcm5hbENlbGxHcmlkID0gdGhpcy5kYXRhLm1hcCgocm93RGF0YSwgcm93SW5kZXgpID0+XG4gICAgICBjb2x1bW5zLm1hcChjb2x1bW4gPT4gXG4gICAgICAgIG5ldyBDZWxsKGNvbHVtbiwgcm93RGF0YVtjb2x1bW4ua2V5XSwgcm93RGF0YSwgcm93SW5kZXgpXG4gICAgICApXG4gICAgKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFNldHVwIGRhdGEgc291cmNlIC0gZWl0aGVyIHN5bmMgYXJyYXkgb3IgYXN5bmMgT2JzZXJ2YWJsZVxuICAgKiBIYW5kbGVzIGluaXRpYWxpemF0aW9uIGFuZCBzdWJzY3JpcHRpb24gdG8gZGF0YSBjaGFuZ2VzXG4gICAqL1xuICBwcml2YXRlIHNldHVwRGF0YVNvdXJjZSgpOiB2b2lkIHtcbiAgICAvLyBXYXJuIGlmIGJvdGggZGF0YSBhbmQgZGF0YSQgYXJlIHByb3ZpZGVkXG4gICAgaWYgKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEkKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1N0VGFibGVDb21wb25lbnQ6IEJvdGggZGF0YSBhbmQgZGF0YSQgaW5wdXRzIGFyZSBwcm92aWRlZC4gVXNpbmcgZGF0YSQgKE9ic2VydmFibGUpIGFuZCBpZ25vcmluZyBkYXRhIGFycmF5LicpO1xuICAgIH1cbiAgICBcbiAgICAvLyBDbGVhbiB1cCBleGlzdGluZyBzdWJzY3JpcHRpb25cbiAgICB0aGlzLmRhdGFTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgXG4gICAgLy8gUHJpb3JpdHk6IGRhdGEkIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBkYXRhXG4gICAgaWYgKHRoaXMuZGF0YSQpIHtcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9EYXRhQ2hhbmdlcygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAvLyBGb3Igc3luYyBkYXRhLCBlbWl0IG9uY2UgdGhyb3VnaCBpbnRlcm5hbCBvYnNlcnZhYmxlXG4gICAgICB0aGlzLnByZXZpb3VzRGF0YSA9IFtdO1xuICAgICAgdGhpcy5pbnRlcm5hbERhdGEkLm5leHQodGhpcy5kYXRhKTtcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9EYXRhQ2hhbmdlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBkYXRhIHByb3ZpZGVkLCBlbWl0IGVtcHR5IGFycmF5XG4gICAgICB0aGlzLnByZXZpb3VzRGF0YSA9IFtdO1xuICAgICAgdGhpcy5pbnRlcm5hbERhdGEkLm5leHQoW10pO1xuICAgICAgdGhpcy5zdWJzY3JpYmVUb0RhdGFDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIGRhdGEgY2hhbmdlcyAoZWl0aGVyIGZyb20gZGF0YSQgaW5wdXQgb3IgaW50ZXJuYWwgQmVoYXZpb3JTdWJqZWN0KVxuICAgKi9cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0RhdGFDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGFTb3VyY2UkID0gdGhpcy5kYXRhJCB8fCB0aGlzLmludGVybmFsRGF0YSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgXG4gICAgdGhpcy5kYXRhU3Vic2NyaXB0aW9uID0gZGF0YVNvdXJjZSQuc3Vic2NyaWJlKG5ld0RhdGEgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVEYXRhQ2hhbmdlKG5ld0RhdGEpO1xuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIGRhdGEgY2hhbmdlIGZyb20gT2JzZXJ2YWJsZSBlbWlzc2lvblxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVEYXRhQ2hhbmdlKG5ld0RhdGE6IGFueVtdKTogdm9pZCB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzb3VyY2U6ICdzeW5jJyB8ICdhc3luYycgPSB0aGlzLmRhdGEkID8gJ2FzeW5jJyA6ICdzeW5jJztcbiAgICBcbiAgICAvLyBFbWl0IGRhdGEgY2hhbmdlIGV2ZW50XG4gICAgdGhpcy5kYXRhQ2hhbmdlLmVtaXQoe1xuICAgICAgcHJldmlvdXNEYXRhOiB0aGlzLnByZXZpb3VzRGF0YSxcbiAgICAgIGN1cnJlbnREYXRhOiBuZXdEYXRhLFxuICAgICAgdGltZXN0YW1wLFxuICAgICAgc291cmNlXG4gICAgfSk7XG4gICAgXG4gICAgLy8gVXBkYXRlIGRhdGEgcmVmZXJlbmNlXG4gICAgdGhpcy5kYXRhID0gbmV3RGF0YTtcbiAgICB0aGlzLnByZXZpb3VzRGF0YSA9IFsuLi5uZXdEYXRhXTtcbiAgICBcbiAgICAvLyBSZWNyZWF0ZSBjZWxsIGdyaWRcbiAgICB0aGlzLmNyZWF0ZUNlbGxHcmlkRnJvbURhdGEoKTtcbiAgICBcbiAgICAvLyBVcGRhdGUgdmlzaWJsZSBkYXRhXG4gICAgdGhpcy51cGRhdGVWaXNpYmxlRGF0YSgpO1xuICAgIFxuICAgIC8vIFJlY2FsY3VsYXRlIHZpcnR1YWwgc2Nyb2xsIGlmIGVuYWJsZWRcbiAgICBpZiAodGhpcy5pc1ZpcnR1YWxTY3JvbGxFbmFibGVkKCkpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMudmlydHVhbFNjcm9sbFN0YXRlJC52YWx1ZTtcbiAgICAgIGlmIChjdXJyZW50U3RhdGUpIHtcbiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB0aGlzLnZpcnR1YWxTY3JvbGxTZXJ2aWNlLmNhbGN1bGF0ZVZpc2libGVSYW5nZSh7XG4gICAgICAgICAgc2Nyb2xsVG9wOiBjdXJyZW50U3RhdGUuc2Nyb2xsVG9wLFxuICAgICAgICAgIHZpZXdwb3J0SGVpZ2h0OiB0aGlzLmdldFZpcnR1YWxTY3JvbGxWaWV3cG9ydEhlaWdodCgpLFxuICAgICAgICAgIHRvdGFsSXRlbXM6IHRoaXMudmlzaWJsZUNlbGxHcmlkLmxlbmd0aCxcbiAgICAgICAgICBpdGVtU2l6ZTogdGhpcy5nZXRWaXJ0dWFsU2Nyb2xsSXRlbVNpemUoKSxcbiAgICAgICAgICBidWZmZXJTaXplOiB0aGlzLmdldFZpcnR1YWxTY3JvbGxCdWZmZXJTaXplKClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudmlydHVhbFNjcm9sbFN0YXRlJC5uZXh0KG5ld1N0YXRlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gVXBkYXRlIGtleWJvYXJkIG5hdmlnYXRpb24gZGltZW5zaW9ucyBpZiBlbmFibGVkXG4gICAgaWYgKHRoaXMuaXNLZXlib2FyZE5hdmlnYXRpb25FbmFibGVkKCkpIHtcbiAgICAgIHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpLnNldERpbWVuc2lvbnMoXG4gICAgICAgIHRoaXMudmlzaWJsZUNlbGxHcmlkLmxlbmd0aCxcbiAgICAgICAgdGhpcy52aXNpYmxlQ29sdW1ucy5sZW5ndGhcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIHN5bmMgZGF0YSBjaGFuZ2UgKGZyb20gQElucHV0KCkgZGF0YSBjaGFuZ2VzKVxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVTeW5jRGF0YUNoYW5nZShwcmV2aW91c0RhdGE6IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy5wcmV2aW91c0RhdGEgPSBwcmV2aW91c0RhdGE7XG4gICAgdGhpcy5pbnRlcm5hbERhdGEkLm5leHQodGhpcy5kYXRhIHx8IFtdKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBhY3RpdmUgVGFibGVTdGF0ZSAocHJvdmlkZWQgb3IgaW50ZXJuYWwpXG4gICAqL1xuICBnZXRBY3RpdmVUYWJsZVN0YXRlKCk6IFRhYmxlU3RhdGUge1xuICAgIHJldHVybiB0aGlzLnRhYmxlU3RhdGUgfHwgdGhpcy5pbnRlcm5hbFRhYmxlU3RhdGUhO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGFjdGl2ZSBjZWxsIGdyaWQgKHByb3ZpZGVkIG9yIGludGVybmFsKVxuICAgKi9cbiAgZ2V0QWN0aXZlQ2VsbEdyaWQoKTogQ2VsbDxhbnk+W11bXSB7XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxDZWxsR3JpZCB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdmlzaWJsZSBjZWxsIGdyaWQgKGZpbHRlcmVkIHRvIG9ubHkgaW5jbHVkZSB2aXNpYmxlIGNvbHVtbnMpXG4gICAqL1xuICBnZXRWaXNpYmxlQ2VsbEdyaWQoKTogQ2VsbDxhbnk+W11bXSB7XG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuZ2V0QWN0aXZlQ29sdW1ucygpO1xuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gdGhpcy5nZXRWaXNpYmxlQ29sdW1ucygpO1xuICAgIGNvbnN0IHZpc2libGVDb2x1bW5LZXlzID0gbmV3IFNldCh2aXNpYmxlQ29sdW1ucy5tYXAoY29sID0+IGNvbC5rZXkpKTtcbiAgICBcbiAgICAvLyBHZXQgY29sdW1uIGluZGljZXMgZm9yIHZpc2libGUgY29sdW1uc1xuICAgIGNvbnN0IHZpc2libGVJbmRpY2VzID0gYWxsQ29sdW1uc1xuICAgICAgLm1hcCgoY29sLCBpbmRleCkgPT4gdmlzaWJsZUNvbHVtbktleXMuaGFzKGNvbC5rZXkpID8gaW5kZXggOiAtMSlcbiAgICAgIC5maWx0ZXIoaW5kZXggPT4gaW5kZXggIT09IC0xKTtcbiAgICBcbiAgICBjb25zdCBmdWxsR3JpZCA9IHRoaXMuZ2V0QWN0aXZlQ2VsbEdyaWQoKTtcbiAgICByZXR1cm4gZnVsbEdyaWQubWFwKHJvdyA9PiBcbiAgICAgIHZpc2libGVJbmRpY2VzLm1hcChpbmRleCA9PiByb3dbaW5kZXhdKS5maWx0ZXIoY2VsbCA9PiBjZWxsICE9PSB1bmRlZmluZWQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHZpc2libGUgY2VsbCBncmlkIGJhc2VkIG9uIGN1cnJlbnQgdmlzaWJpbGl0eSBhbmQgY29sdW1uIG9yZGVyXG4gICAqIENhbGxlZCB3aGVuIGRhdGEsIHZpc2liaWxpdHksIG9yIGNvbHVtbiBvcmRlciBjaGFuZ2VzXG4gICAqIFxuICAgKiBUaGlzIG1ldGhvZCBwcm9wZXJseSBoYW5kbGVzIGNvbHVtbiByZW9yZGVyaW5nIGJ5IG1hcHBpbmcgY2VsbHMgYmFzZWQgb25cbiAgICogY29sdW1uIGtleXMgcmF0aGVyIHRoYW4gaW5kaWNlcywgZW5zdXJpbmcgY2VsbHMgZm9sbG93IHRoZWlyIGNvbHVtbnMuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVZpc2libGVDZWxsR3JpZCgpOiB2b2lkIHtcbiAgICBjb25zdCBmdWxsR3JpZCA9IHRoaXMuZ2V0QWN0aXZlQ2VsbEdyaWQoKTtcbiAgICBcbiAgICAvLyBIYW5kbGUgZW1wdHkgZ3JpZFxuICAgIGlmICghZnVsbEdyaWQgfHwgZnVsbEdyaWQubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnZpc2libGVDZWxsR3JpZCA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBCdWlsZCBhIG1hcCBvZiBjb2x1bW5LZXkg4oaSIGNlbGxJbmRleCBmb3IgdGhlIGN1cnJlbnQgZ3JpZCBzdHJ1Y3R1cmVcbiAgICAvLyBUaGlzIGFsbG93cyB1cyB0byBmaW5kIGNlbGxzIGJ5IGNvbHVtbiBrZXkgcmVnYXJkbGVzcyBvZiB0aGVpciBjdXJyZW50IHBvc2l0aW9uXG4gICAgY29uc3Qga2V5VG9JbmRleE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgZnVsbEdyaWRbMF0/LmZvckVhY2goKGNlbGwsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoY2VsbCkge1xuICAgICAgICBjb25zdCBjb2x1bW5Db25maWcgPSBjZWxsLmdldENvbHVtbkNvbmZpZygpO1xuICAgICAgICBrZXlUb0luZGV4TWFwLnNldChjb2x1bW5Db25maWcua2V5LCBpbmRleCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLy8gUmVvcmRlciBjZWxscyB0byBtYXRjaCB0aGUgdmlzaWJsZUNvbHVtbnMgb3JkZXJcbiAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIGNvbHVtbnMgYXJlIG1vdmVkLCB0aGUgY2VsbCBkYXRhIGZvbGxvd3NcbiAgICB0aGlzLnZpc2libGVDZWxsR3JpZCA9IGZ1bGxHcmlkLm1hcChyb3cgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnNcbiAgICAgICAgLm1hcChjb2wgPT4ge1xuICAgICAgICAgIGNvbnN0IGNlbGxJbmRleCA9IGtleVRvSW5kZXhNYXAuZ2V0KGNvbC5rZXkpO1xuICAgICAgICAgIHJldHVybiBjZWxsSW5kZXggIT09IHVuZGVmaW5lZCA/IHJvd1tjZWxsSW5kZXhdIDogdW5kZWZpbmVkO1xuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKChjZWxsKTogY2VsbCBpcyBDZWxsPGFueT4gPT4gY2VsbCAhPT0gdW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHZpc2libGUgY29sdW1ucyBiYXNlZCBvbiBjdXJyZW50IHZpc2liaWxpdHlcbiAgICogQ2FsbGVkIG9ubHkgd2hlbiB2aXNpYmlsaXR5IGFjdHVhbGx5IGNoYW5nZXNcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlVmlzaWJsZUNvbHVtbnMoKTogdm9pZCB7XG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuZ2V0QWN0aXZlQ29sdW1ucygpO1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbnMgPSBhbGxDb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLnZpc2libGUgIT09IGZhbHNlKTtcbiAgICBcbiAgICAvLyBSZWNhbGN1bGF0ZSBzdGlja3kgb2Zmc2V0cyBmb3IgdmlzaWJsZSBjb2x1bW5zIG9ubHlcbiAgICB0aGlzLnJlY2FsY3VsYXRlVmlzaWJsZVN0aWNreU9mZnNldHModGhpcy52aXNpYmxlQ29sdW1ucyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGJvdGggdmlzaWJsZSBjb2x1bW5zIGFuZCBjZWxsIGdyaWRcbiAgICogQ2FsbCB0aGlzIHdoZW5ldmVyIGRhdGEgb3IgdmlzaWJpbGl0eSBjaGFuZ2VzXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVZpc2libGVEYXRhKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUNvbHVtbnMoKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVDZWxsR3JpZCgpO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGFjdGl2ZSBjb2x1bW5zIChmcm9tIGNvbmZpZyBvciBsZWdhY3kgaW5wdXQpXG4gICAqL1xuICBnZXRBY3RpdmVDb2x1bW5zKCk6IENvbHVtbkNvbmZpZzxhbnk+W10ge1xuICAgIHJldHVybiB0aGlzLm1lcmdlZENvbmZpZy5jb2x1bW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB2aXNpYmxlIGNvbHVtbnMgKGZpbHRlcmVkIGJ5IHZpc2liaWxpdHkgcHJvcGVydHkpXG4gICAqIEFsc28gcmVjYWxjdWxhdGVzIHN0aWNreSBvZmZzZXRzIGJhc2VkIG9uIHZpc2libGUgY29sdW1ucyBvbmx5XG4gICAqL1xuICBnZXRWaXNpYmxlQ29sdW1ucygpOiBDb2x1bW5Db25maWc8YW55PltdIHtcbiAgICBjb25zdCBhbGxDb2x1bW5zID0gdGhpcy5nZXRBY3RpdmVDb2x1bW5zKCk7XG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSBhbGxDb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLnZpc2libGUgIT09IGZhbHNlKTsgLy8gRGVmYXVsdCB0byB0cnVlIGlmIG5vdCBzZXRcbiAgICBcbiAgICAvLyBSZWNhbGN1bGF0ZSBzdGlja3kgb2Zmc2V0cyBmb3IgdmlzaWJsZSBjb2x1bW5zIG9ubHlcbiAgICB0aGlzLnJlY2FsY3VsYXRlVmlzaWJsZVN0aWNreU9mZnNldHModmlzaWJsZUNvbHVtbnMpO1xuICAgIFxuICAgIHJldHVybiB2aXNpYmxlQ29sdW1ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNhbGN1bGF0ZSBzdGlja3kgb2Zmc2V0cyBiYXNlZCBvbiB2aXNpYmxlIGNvbHVtbnMgb25seVxuICAgKiBUaGlzIGVuc3VyZXMgY29ycmVjdCBwb3NpdGlvbmluZyB3aGVuIGNvbHVtbnMgYXJlIGhpZGRlblxuICAgKi9cbiAgcHJpdmF0ZSByZWNhbGN1bGF0ZVZpc2libGVTdGlja3lPZmZzZXRzKHZpc2libGVDb2x1bW5zOiBDb2x1bW5Db25maWc8YW55PltdKTogdm9pZCB7XG4gICAgLy8gQ2FsY3VsYXRlIGxlZnQgc3RpY2t5IG9mZnNldHNcbiAgICAvLyBBY2NvdW50IGZvciByb3cgbnVtYmVyIGNvbHVtbiB3aWR0aCBpZiBzaG93blxuICAgIGxldCBsZWZ0T2Zmc2V0ID0gdGhpcy5tZXJnZWRDb25maWcuc2hvd1Jvd051bWJlciA/IDMwIDogMDtcbiAgICB2aXNpYmxlQ29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICBpZiAoY29sLnN0aWNreSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIChjb2wgYXMgYW55KS5zdGlja3lPZmZzZXQgPSBsZWZ0T2Zmc2V0O1xuICAgICAgICBsZWZ0T2Zmc2V0ICs9IChjb2wud2lkdGggYXMgbnVtYmVyKSB8fCAxMDA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDYWxjdWxhdGUgcmlnaHQgc3RpY2t5IG9mZnNldHNcbiAgICBsZXQgcmlnaHRPZmZzZXQgPSAwO1xuICAgIGZvciAobGV0IGkgPSB2aXNpYmxlQ29sdW1ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgY29sID0gdmlzaWJsZUNvbHVtbnNbaV07XG4gICAgICBpZiAoY29sLnN0aWNreSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAoY29sIGFzIGFueSkuc3RpY2t5T2Zmc2V0ID0gcmlnaHRPZmZzZXQ7XG4gICAgICAgIHJpZ2h0T2Zmc2V0ICs9IChjb2wud2lkdGggYXMgbnVtYmVyKSB8fCAxMDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25DZWxsQ2hhbmdlKGV2ZW50OiBDZWxsQ2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmNlbGxDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkNvbHVtblJlc2l6ZWQoZXZlbnQ6IENvbHVtblJlc2l6ZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gUmVjYWxjdWxhdGUgc3RpY2t5IG9mZnNldHMgYWZ0ZXIgcmVzaXplXG4gICAgY29uc3Qgcm93TnVtYmVyV2lkdGggPSB0aGlzLm1lcmdlZENvbmZpZy5zaG93Um93TnVtYmVyID8gMzAgOiAwO1xuICAgIGNvbnN0IHNldHRpbmdzQ29sdW1uV2lkdGggPSB0aGlzLmhhc1Jvd0FjdGlvbnMoKSA/IDMyIDogMDtcbiAgICB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKS5jYWxjdWxhdGVTdGlja3lPZmZzZXRzKHJvd051bWJlcldpZHRoLCBzZXR0aW5nc0NvbHVtbldpZHRoKTtcbiAgICBcbiAgICAvLyBFbWl0IHRvIHBhcmVudFxuICAgIHRoaXMuY29sdW1uUmVzaXplZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uQ29sdW1uTW92ZWQoZXZlbnQ6IHtjb2x1bW5LZXk6IHN0cmluZywgZGlyZWN0aW9uOiAnbGVmdCcgfCAncmlnaHQnfSk6IHZvaWQge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldEFjdGl2ZUNvbHVtbnMoKTtcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSBjb2x1bW5zLmZpbmRJbmRleChjID0+IGMua2V5ID09PSBldmVudC5jb2x1bW5LZXkpO1xuICAgIGlmIChjdXJyZW50SW5kZXggPT09IC0xKSByZXR1cm47XG4gICAgXG4gICAgLy8gQ2FsY3VsYXRlIHRhcmdldCBpbmRleFxuICAgIGNvbnN0IHRhcmdldEluZGV4ID0gZXZlbnQuZGlyZWN0aW9uID09PSAnbGVmdCcgXG4gICAgICA/IGN1cnJlbnRJbmRleCAtIDEgXG4gICAgICA6IGN1cnJlbnRJbmRleCArIDE7XG4gICAgXG4gICAgLy8gQ2hlY2sgYm91bmRzXG4gICAgaWYgKHRhcmdldEluZGV4IDwgMCB8fCB0YXJnZXRJbmRleCA+PSBjb2x1bW5zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBTd2FwIGNvbHVtbnNcbiAgICBbY29sdW1uc1tjdXJyZW50SW5kZXhdLCBjb2x1bW5zW3RhcmdldEluZGV4XV0gPSBcbiAgICBbY29sdW1uc1t0YXJnZXRJbmRleF0sIGNvbHVtbnNbY3VycmVudEluZGV4XV07XG4gICAgXG4gICAgLy8gVXBkYXRlIFRhYmxlU3RhdGUgd2l0aCBuZXcgY29sdW1uIG9yZGVyXG4gICAgdGhpcy5nZXRBY3RpdmVUYWJsZVN0YXRlKCkudXBkYXRlQ29sdW1ucyhjb2x1bW5zKTtcbiAgICB0aGlzLmNvbHVtbk1vdmVkLmVtaXQoe1xuICAgICAgY29sdW1uS2V5OiBldmVudC5jb2x1bW5LZXksXG4gICAgICBkaXJlY3Rpb246IGV2ZW50LmRpcmVjdGlvbixcbiAgICAgIG9sZEluZGV4OiBjdXJyZW50SW5kZXgsXG4gICAgICBuZXdJbmRleDogdGFyZ2V0SW5kZXgsXG4gICAgICBjb2x1bW46IGNvbHVtbnNbY3VycmVudEluZGV4XVxuICAgIH0pO1xuICAgIC8vIEZvcmNlIHZpcnR1YWwgc2Nyb2xsIHRvIHJlLXJlbmRlciBieSByZS1lbWl0dGluZyBjdXJyZW50IHN0YXRlXG4gICAgLy8gVGhpcyBlbnN1cmVzIHZpc2libGVSb3dzJCBwaWNrcyB1cCB0aGUgdXBkYXRlZCB2aXNpYmxlQ2VsbEdyaWRcbiAgICBpZiAodGhpcy5pc1ZpcnR1YWxTY3JvbGxFbmFibGVkKCkpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMudmlydHVhbFNjcm9sbFN0YXRlJC52YWx1ZTtcbiAgICAgIGlmIChjdXJyZW50U3RhdGUpIHtcbiAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsU3RhdGUkLm5leHQoey4uLmN1cnJlbnRTdGF0ZX0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIGNvbHVtbiB0byBwb3NpdGlvbiBqdXN0IGJlZm9yZSByaWdodCBzdGlja3kgY29sdW1ucyAodXNlZCB3aGVuIHBpbm5pbmcgcmlnaHQpXG4gICAqL1xuICBwcml2YXRlIG1vdmVDb2x1bW5Ub0VuZChjb2x1bW5LZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldEFjdGl2ZUNvbHVtbnMoKTtcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSBjb2x1bW5zLmZpbmRJbmRleChjID0+IGMua2V5ID09PSBjb2x1bW5LZXkpO1xuICAgIGlmIChjdXJyZW50SW5kZXggPT09IC0xKSByZXR1cm47XG4gICAgXG4gICAgLy8gRmluZCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHJpZ2h0LXN0aWNreSBjb2x1bW5cbiAgICBjb25zdCBmaXJzdFJpZ2h0U3RpY2t5SW5kZXggPSBjb2x1bW5zLmZpbmRJbmRleChjID0+IGMuc3RpY2t5ID09PSAncmlnaHQnKTtcbiAgICBcbiAgICAvLyBEZXRlcm1pbmUgdGFyZ2V0IGluZGV4OiBqdXN0IGJlZm9yZSBmaXJzdCByaWdodC1zdGlja3ksIG9yIGF0IGVuZCBpZiBub25lIGV4aXN0XG4gICAgY29uc3QgdGFyZ2V0SW5kZXggPSBmaXJzdFJpZ2h0U3RpY2t5SW5kZXggIT09IC0xID8gZmlyc3RSaWdodFN0aWNreUluZGV4IDogY29sdW1ucy5sZW5ndGg7XG4gICAgXG4gICAgLy8gSWYgYWxyZWFkeSBhdCB0YXJnZXQgcG9zaXRpb24sIG5vIG5lZWQgdG8gbW92ZVxuICAgIGlmIChjdXJyZW50SW5kZXggPT09IHRhcmdldEluZGV4IHx8IGN1cnJlbnRJbmRleCA9PT0gdGFyZ2V0SW5kZXggLSAxKSByZXR1cm47XG4gICAgXG4gICAgLy8gUmVtb3ZlIGNvbHVtbiBmcm9tIGN1cnJlbnQgcG9zaXRpb25cbiAgICBjb25zdCBbY29sdW1uXSA9IGNvbHVtbnMuc3BsaWNlKGN1cnJlbnRJbmRleCwgMSk7XG4gICAgXG4gICAgLy8gQWRqdXN0IHRhcmdldCBpbmRleCBpZiB3ZSByZW1vdmVkIGFuIGVsZW1lbnQgYmVmb3JlIGl0XG4gICAgY29uc3QgYWRqdXN0ZWRUYXJnZXRJbmRleCA9IGN1cnJlbnRJbmRleCA8IHRhcmdldEluZGV4ID8gdGFyZ2V0SW5kZXggLSAxIDogdGFyZ2V0SW5kZXg7XG4gICAgXG4gICAgLy8gSW5zZXJ0IGF0IHRhcmdldCBwb3NpdGlvbiAoYmVmb3JlIGZpcnN0IHJpZ2h0LXN0aWNreSBjb2x1bW4sIG9yIGF0IGVuZClcbiAgICBjb2x1bW5zLnNwbGljZShhZGp1c3RlZFRhcmdldEluZGV4LCAwLCBjb2x1bW4pO1xuICAgIFxuICAgIC8vIFVwZGF0ZSBUYWJsZVN0YXRlIHdpdGggbmV3IGNvbHVtbiBvcmRlclxuICAgIHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpLnVwZGF0ZUNvbHVtbnMoY29sdW1ucyk7XG4gICAgXG4gICAgLy8gRm9yY2UgdmlydHVhbCBzY3JvbGwgdG8gcmUtcmVuZGVyXG4gICAgaWYgKHRoaXMuaXNWaXJ0dWFsU2Nyb2xsRW5hYmxlZCgpKSB7XG4gICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLnZpcnR1YWxTY3JvbGxTdGF0ZSQudmFsdWU7XG4gICAgICBpZiAoY3VycmVudFN0YXRlKSB7XG4gICAgICAgIHRoaXMudmlydHVhbFNjcm9sbFN0YXRlJC5uZXh0KHsuLi5jdXJyZW50U3RhdGV9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1bXVsYXRpdmUgbGVmdCBvZmZzZXQgZm9yIGEgc3RpY2t5IGNvbHVtbiBvbiB0aGUgbGVmdCBzaWRlXG4gICAqL1xuICBnZXRTdGlja3lMZWZ0T2Zmc2V0KGNvbHVtbktleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRBY3RpdmVDb2x1bW5zKCk7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xuICAgICAgaWYgKGNvbC5rZXkgPT09IGNvbHVtbktleSkgYnJlYWs7XG4gICAgICBpZiAoY29sLnN0aWNreSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIG9mZnNldCArPSAoY29sLndpZHRoIGFzIG51bWJlcikgfHwgMTAwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdW11bGF0aXZlIHJpZ2h0IG9mZnNldCBmb3IgYSBzdGlja3kgY29sdW1uIG9uIHRoZSByaWdodCBzaWRlXG4gICAqL1xuICBnZXRTdGlja3lSaWdodE9mZnNldChjb2x1bW5LZXk6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0QWN0aXZlQ29sdW1ucygpO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGNvbnN0IGNvbEluZGV4ID0gY29sdW1ucy5maW5kSW5kZXgoYyA9PiBjLmtleSA9PT0gY29sdW1uS2V5KTtcbiAgICBmb3IgKGxldCBpID0gY29sSW5kZXggKyAxOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY29sID0gY29sdW1uc1tpXTtcbiAgICAgIGlmIChjb2wuc3RpY2t5ID09PSAncmlnaHQnKSB7XG4gICAgICAgIG9mZnNldCArPSAoY29sLndpZHRoIGFzIG51bWJlcikgfHwgMTAwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgdG9wIHBhZ2luYXRpb24gc2hvdWxkIGJlIHNob3duXG4gICAqL1xuICBzaG93VG9wUGFnaW5hdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tZXJnZWRDb25maWcucGFnaW5hdGlvbj8uZW5hYmxlZCA9PSB0cnVlICYmXG4gICAgICAgICAgIHRoaXMubWVyZ2VkQ29uZmlnLnBhZ2luYXRpb24/LnNob3dUb3BDb250cm9scyA9PT0gdHJ1ZTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGJvdHRvbSBwYWdpbmF0aW9uIHNob3VsZCBiZSBzaG93blxuICAgKi9cbiAgc2hvd0JvdHRvbVBhZ2luYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VkQ29uZmlnLnBhZ2luYXRpb24/LmVuYWJsZWQgPT0gdHJ1ZSAmJlxuICAgICAgICAgICAodGhpcy5tZXJnZWRDb25maWcucGFnaW5hdGlvbj8uc2hvd0JvdHRvbUNvbnRyb2xzID8/IHRydWUpO1xuICB9XG4gIFxuICAvKipcbiAgICogVmFsaWRhdGUgdGFibGUgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0gY29uZmlnIFRhYmxlIGNvbmZpZ3VyYXRpb24gdG8gdmFsaWRhdGVcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVDb25maWd1cmF0aW9uKGNvbmZpZzogVGFibGVDb25maWcpOiB2b2lkIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnNjaGVtYVZhbGlkYXRvci52YWxpZGF0ZShjb25maWcsIHRydWUsIGZhbHNlKTsgLy8gRGlzYWJsZSBsb2dnaW5nIGhlcmUsIHdlJ2xsIGxvZyBtYW51YWxseSB3aXRoIGNvbnRleHRcbiAgICBcbiAgICBpZiAoIXJlc3VsdC52YWxpZCAmJiByZXN1bHQuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIEVtaXQgdmFsaWRhdGlvbiBlcnJvcnNcbiAgICAgIHRoaXMuY29uZmlnVmFsaWRhdGlvbkVycm9ycy5lbWl0KHJlc3VsdC5lcnJvcnMpO1xuICAgICAgXG4gICAgICAvLyBMb2cgdmFsaWRhdGlvbiBlcnJvcnMgd2l0aCBjb250ZXh0XG4gICAgICBjb25zdCBjb25maWdTbmlwcGV0ID0gSlNPTi5zdHJpbmdpZnkoY29uZmlnLCBudWxsLCAyKS5zdWJzdHJpbmcoMCwgNTAwKTsgLy8gRmlyc3QgNTAwIGNoYXJzIG9mIGNvbmZpZ1xuICAgICAgdGhpcy5sb2dnZXIubG9nVmFsaWRhdGlvbkVycm9ycyhyZXN1bHQuZXJyb3JzLCAncmVuZGVyZXInLCB7XG4gICAgICAgIGNvbmZpZ1NuaXBwZXQ6IGNvbmZpZ1NuaXBwZXRcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBMb2cgd2FybmluZ3MgdG8gY29uc29sZSAoZG9uJ3QgYnJlYWsgcmVuZGVyaW5nKVxuICAgICAgY29uc29sZS53YXJuKCdTbWFydCBUYWJsZTogQ29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGVycm9ycyBkZXRlY3RlZDonLCByZXN1bHQuZXJyb3JzKTtcbiAgICAgIHJlc3VsdC5lcnJvcnMuZm9yRWFjaChlcnJvciA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybihgICAtICR7ZXJyb3IuZmllbGQgfHwgZXJyb3IucGF0aH06ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBhZGQgY29sdW1uIGJ1dHRvbiBjbGlja1xuICAgKi9cbiAgb25BZGRDb2x1bW5DbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dDb2x1bW5Nb2RhbCA9IHRydWU7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgY29sdW1uIGNyZWF0ZWQgZnJvbSBtb2RhbFxuICAgKi9cbiAgb25Db2x1bW5DcmVhdGVkKGNvbHVtbjogQ29sdW1uQ29uZmlnKTogdm9pZCB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0QWN0aXZlQ29sdW1ucygpO1xuICAgIGNvbnN0IGFkZEV2ZW50OiBDb2x1bW5BZGRFdmVudCA9IHtcbiAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgaW5kZXg6IGNvbHVtbnMubGVuZ3RoLFxuICAgICAgdG90YWxDb2x1bW5zOiBjb2x1bW5zLmxlbmd0aCArIDFcbiAgICB9O1xuICAgIFxuICAgIC8vIEVtaXQgdGhlIG5ldyBjb2x1bW4gdG8gcGFyZW50IGNvbXBvbmVudFxuICAgIHRoaXMuY29sdW1uQWRkZWQuZW1pdChhZGRFdmVudCk7XG4gICAgXG4gICAgLy8gQ2xvc2UgdGhlIG1vZGFsXG4gICAgdGhpcy5zaG93Q29sdW1uTW9kYWwgPSBmYWxzZTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBtb2RhbCBjYW5jZWxsZWRcbiAgICovXG4gIG9uTW9kYWxDYW5jZWxsZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93Q29sdW1uTW9kYWwgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB2aXJ0dWFsIHNjcm9sbCBpcyBlbmFibGVkXG4gICAqL1xuICBpc1ZpcnR1YWxTY3JvbGxFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1lcmdlZENvbmZpZy5kaXNwbGF5Py52aXJ0dWFsU2Nyb2xsPy5lbmFibGVkID8/IGZhbHNlO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgY29sdW1uIGlzIHRoZSBmaXJzdCBzdGlja3ktcmlnaHQgY29sdW1uIChmb3Igc2hhZG93IHN0eWxpbmcpXG4gICAqL1xuICBpc0ZpcnN0U3RpY2t5UmlnaHQoY29sdW1uS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdGlja3lSaWdodENvbHVtbnMgPSB0aGlzLnZpc2libGVDb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLnN0aWNreSA9PT0gJ3JpZ2h0JyAmJiAhY29sLmtleS5pbmNsdWRlcygnc2V0dGluZ3MnKSk7XG4gICAgcmV0dXJuIHN0aWNreVJpZ2h0Q29sdW1ucy5sZW5ndGggPiAwICYmIHN0aWNreVJpZ2h0Q29sdW1uc1swXS5rZXkgPT09IGNvbHVtbktleTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCB2aXJ0dWFsIHNjcm9sbCBpdGVtIHNpemVcbiAgICovXG4gIGdldFZpcnR1YWxTY3JvbGxJdGVtU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm1lcmdlZENvbmZpZy5kaXNwbGF5Py52aXJ0dWFsU2Nyb2xsPy5pdGVtU2l6ZSA/PyA0ODtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCB2aWV3cG9ydCBoZWlnaHRcbiAgICovXG4gIGdldFZpcnR1YWxTY3JvbGxWaWV3cG9ydEhlaWdodCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm1lcmdlZENvbmZpZy5kaXNwbGF5Py52aXJ0dWFsU2Nyb2xsPy52aWV3cG9ydEhlaWdodCA/PyA2MDA7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgYnVmZmVyIHNpemVcbiAgICovXG4gIGdldFZpcnR1YWxTY3JvbGxCdWZmZXJTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VkQ29uZmlnLmRpc3BsYXk/LnZpcnR1YWxTY3JvbGw/LmJ1ZmZlclNpemUgPz8gNTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdmlydHVhbCBzY3JvbGwgc3RhdGVcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVZpcnR1YWxTY3JvbGwoKTogdm9pZCB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB0aGlzLnZpcnR1YWxTY3JvbGxTZXJ2aWNlLmNhbGN1bGF0ZVZpc2libGVSYW5nZSh7XG4gICAgICBzY3JvbGxUb3A6IDAsXG4gICAgICB2aWV3cG9ydEhlaWdodDogdGhpcy5nZXRWaXJ0dWFsU2Nyb2xsVmlld3BvcnRIZWlnaHQoKSxcbiAgICAgIHRvdGFsSXRlbXM6IHRoaXMudmlzaWJsZUNlbGxHcmlkLmxlbmd0aCxcbiAgICAgIGl0ZW1TaXplOiB0aGlzLmdldFZpcnR1YWxTY3JvbGxJdGVtU2l6ZSgpLFxuICAgICAgYnVmZmVyU2l6ZTogdGhpcy5nZXRWaXJ0dWFsU2Nyb2xsQnVmZmVyU2l6ZSgpXG4gICAgfSk7XG4gICAgXG4gICAgdGhpcy52aXJ0dWFsU2Nyb2xsU3RhdGUkLm5leHQobmV3U3RhdGUpO1xuICB9XG4gIFxuICAvKipcbiAgICogU2V0dXAgc2Nyb2xsIGV2ZW50IGxpc3RlbmVyXG4gICAqL1xuICBwcml2YXRlIHNldHVwVmlydHVhbFNjcm9sbExpc3RlbmVyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zY3JvbGxWaWV3cG9ydCkgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnNjcm9sbFZpZXdwb3J0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgdGhpcy5zY3JvbGxDb250YWluZXIgPSBlbGVtZW50O1xuICAgIFxuICAgIHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uID0gdGhpcy52aXJ0dWFsU2Nyb2xsU2VydmljZVxuICAgICAgLmNyZWF0ZVNjcm9sbE9ic2VydmFibGUoZWxlbWVudClcbiAgICAgIC5zdWJzY3JpYmUoc2Nyb2xsVG9wID0+IHRoaXMub25WaXJ0dWFsU2Nyb2xsKHNjcm9sbFRvcCkpO1xuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIHZpcnR1YWwgc2Nyb2xsIGV2ZW50XG4gICAqL1xuICBwcml2YXRlIG9uVmlydHVhbFNjcm9sbChzY3JvbGxUb3A6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5ld1N0YXRlID0gdGhpcy52aXJ0dWFsU2Nyb2xsU2VydmljZS5jYWxjdWxhdGVWaXNpYmxlUmFuZ2Uoe1xuICAgICAgc2Nyb2xsVG9wLFxuICAgICAgdmlld3BvcnRIZWlnaHQ6IHRoaXMuZ2V0VmlydHVhbFNjcm9sbFZpZXdwb3J0SGVpZ2h0KCksXG4gICAgICB0b3RhbEl0ZW1zOiB0aGlzLnZpc2libGVDZWxsR3JpZC5sZW5ndGgsXG4gICAgICBpdGVtU2l6ZTogdGhpcy5nZXRWaXJ0dWFsU2Nyb2xsSXRlbVNpemUoKSxcbiAgICAgIGJ1ZmZlclNpemU6IHRoaXMuZ2V0VmlydHVhbFNjcm9sbEJ1ZmZlclNpemUoKVxuICAgIH0pO1xuICAgIFxuICAgIHRoaXMudmlydHVhbFNjcm9sbFN0YXRlJC5uZXh0KG5ld1N0YXRlKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCByb3cgaW5kZXggZm9yIHRyYWNraW5nXG4gICAqL1xuICBnZXRBYnNvbHV0ZVJvd0luZGV4KHJlbGF0aXZlSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgY3VycmVudFN0YXRlID0gdGhpcy52aXJ0dWFsU2Nyb2xsU3RhdGUkLnZhbHVlO1xuICAgIGlmICghY3VycmVudFN0YXRlKSByZXR1cm4gcmVsYXRpdmVJbmRleDtcbiAgICByZXR1cm4gY3VycmVudFN0YXRlLnN0YXJ0SW5kZXggKyByZWxhdGl2ZUluZGV4O1xuICB9XG4gIFxuICAvKipcbiAgICogVHJhY2tCeSBmdW5jdGlvbiBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlXG4gICAqL1xuICB0cmFja0J5Um93SW5kZXggPSAoaW5kZXg6IG51bWJlciwgcm93OiBDZWxsPGFueT5bXSk6IG51bWJlciA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWJzb2x1dGVSb3dJbmRleChpbmRleCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTY3JvbGwgdG8gc3BlY2lmaWMgcm93IHByb2dyYW1tYXRpY2FsbHlcbiAgICovXG4gIHNjcm9sbFRvUm93KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2Nyb2xsQ29udGFpbmVyIHx8ICF0aGlzLmlzVmlydHVhbFNjcm9sbEVuYWJsZWQoKSkgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IHNjcm9sbFRvcCA9IGluZGV4ICogdGhpcy5nZXRWaXJ0dWFsU2Nyb2xsSXRlbVNpemUoKTtcbiAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiByb3cgYWN0aW9ucyBhcmUgZW5hYmxlZFxuICAgKi9cbiAgaGFzUm93QWN0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5tZXJnZWRDb25maWcuZmVhdHVyZXM/LnJvd01hbmFnZW1lbnQ/LmFjdGlvbnMgJiYgXG4gICAgICAgICAgICAgIHRoaXMubWVyZ2VkQ29uZmlnLmZlYXR1cmVzLnJvd01hbmFnZW1lbnQuYWN0aW9ucy5sZW5ndGggPiAwKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCByb3cgYWN0aW9ucyBmcm9tIGNvbmZpZ1xuICAgKi9cbiAgZ2V0Um93QWN0aW9ucygpOiBSb3dBY3Rpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VkQ29uZmlnLmZlYXR1cmVzPy5yb3dNYW5hZ2VtZW50Py5hY3Rpb25zIHx8IFtdO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHJvdyBkYXRhIGZyb20gY2VsbCBncmlkXG4gICAqL1xuICBnZXRSb3dEYXRhKHJvd0luZGV4OiBudW1iZXIpOiBhbnkge1xuICAgIGNvbnN0IGNlbGxHcmlkID0gdGhpcy5nZXRBY3RpdmVDZWxsR3JpZCgpO1xuICAgIGlmICghY2VsbEdyaWQgfHwgcm93SW5kZXggPCAwIHx8IHJvd0luZGV4ID49IGNlbGxHcmlkLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHJvdyA9IGNlbGxHcmlkW3Jvd0luZGV4XTtcbiAgICBpZiAoIXJvdyB8fCByb3cubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgXG4gICAgLy8gR2V0IHJhdyBkYXRhIGZyb20gZmlyc3QgY2VsbCAoYWxsIGNlbGxzIGluIGEgcm93IHNoYXJlIHRoZSBzYW1lIHJvd0RhdGEpXG4gICAgcmV0dXJuIHJvd1swXT8uZ2V0Um93RGF0YSgpIHx8IG51bGw7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBPcGVuIHJvdyBhY3Rpb25zIGRyb3Bkb3duXG4gICAqL1xuICBvcGVuUm93QWN0aW9uc0Ryb3Bkb3duKGV2ZW50OiBNb3VzZUV2ZW50LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIFxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgcmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBcbiAgICAvLyBDYWxjdWxhdGUgcG9zaXRpb24gKGJlbG93IHRoZSBidXR0b24gYnkgZGVmYXVsdClcbiAgICBjb25zdCBwb3NpdGlvbiA9IHtcbiAgICAgIHg6IHJlY3QubGVmdCxcbiAgICAgIHk6IHJlY3QuYm90dG9tICsgNCAvLyA0cHggZ2FwXG4gICAgfTtcbiAgICBcbiAgICAvLyBDcmVhdGUgY29udGV4dFxuICAgIGNvbnN0IGNvbnRleHQ6IFJvd0FjdGlvbkNvbnRleHQgPSB7XG4gICAgICByb3dEYXRhLFxuICAgICAgcm93SW5kZXgsXG4gICAgICBhY3Rpb25zOiB0aGlzLmdldFJvd0FjdGlvbnMoKVxuICAgIH07XG4gICAgXG4gICAgLy8gVXBkYXRlIGRyb3Bkb3duIHN0YXRlXG4gICAgdGhpcy5kcm9wZG93blN0YXRlID0ge1xuICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgcG9zaXRpb24sXG4gICAgICBjb250ZXh0XG4gICAgfTtcbiAgICBcbiAgICAvLyBEaXNhYmxlIGJvZHkgc2Nyb2xsXG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgIFxuICAgIC8vIElmIHZpcnR1YWwgc2Nyb2xsIGlzIGVuYWJsZWQsIGFkZCBzY3JvbGwgbGlzdGVuZXIgdG8gY2xvc2UgZHJvcGRvd25cbiAgICBpZiAodGhpcy5pc1ZpcnR1YWxTY3JvbGxFbmFibGVkKCkgJiYgdGhpcy5zY3JvbGxDb250YWluZXIpIHtcbiAgICAgIGNvbnN0IHNjcm9sbExpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlUm93QWN0aW9uc0Ryb3Bkb3duKCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyPy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzY3JvbGxMaXN0ZW5lcik7XG4gICAgICB9O1xuICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc2Nyb2xsTGlzdGVuZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbG9zZSByb3cgYWN0aW9ucyBkcm9wZG93blxuICAgKi9cbiAgY2xvc2VSb3dBY3Rpb25zRHJvcGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5kcm9wZG93blN0YXRlID0ge1xuICAgICAgaXNPcGVuOiBmYWxzZSxcbiAgICAgIHBvc2l0aW9uOiB7IHg6IDAsIHk6IDAgfSxcbiAgICAgIGNvbnRleHQ6IG51bGxcbiAgICB9O1xuICAgIFxuICAgIC8vIFJlLWVuYWJsZSBib2R5IHNjcm9sbFxuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnJztcbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSByb3cgYWN0aW9uIGNsaWNrZWRcbiAgICovXG4gIG9uUm93QWN0aW9uQ2xpY2tlZChldmVudDogUm93QWN0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBFeGVjdXRlIGFjdGlvbiBjYWxsYmFjayBpZiBwcm92aWRlZFxuICAgIGlmIChldmVudC5hY3Rpb24uYWN0aW9uKSB7XG4gICAgICBldmVudC5hY3Rpb24uYWN0aW9uKGV2ZW50LnJvd0RhdGEsIGV2ZW50LnJvd0luZGV4KTtcbiAgICB9XG4gICAgXG4gICAgLy8gRW1pdCBldmVudCB0byBwYXJlbnRcbiAgICB0aGlzLnJvd0FjdGlvbi5lbWl0KGV2ZW50KTtcbiAgICBcbiAgICAvLyBDbG9zZSBkcm9wZG93blxuICAgIHRoaXMuY2xvc2VSb3dBY3Rpb25zRHJvcGRvd24oKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQ09MVU1OIE1FTlUgQUNUSU9OU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE9wZW4gY29sdW1uIG1lbnUgZHJvcGRvd25cbiAgICovXG4gIG9wZW5Db2x1bW5NZW51KGV2ZW50OiBNb3VzZUV2ZW50LCBjb2x1bW46IENvbHVtbkNvbmZpZzxhbnk+LCBjb2x1bW5JbmRleDogbnVtYmVyLCBpc0ZpcnN0OiBib29sZWFuLCBpc0xhc3Q6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCByZWN0ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uIChiZWxvdyB0aGUgYnV0dG9uIGJ5IGRlZmF1bHQpXG4gICAgY29uc3QgcG9zaXRpb24gPSB7XG4gICAgICB4OiByZWN0LmxlZnQsXG4gICAgICB5OiByZWN0LmJvdHRvbSArIDQgLy8gNHB4IGdhcFxuICAgIH07XG5cbiAgICAvLyBDcmVhdGUgY29udGV4dFxuICAgIGNvbnN0IGNvbnRleHQ6IENvbHVtbkFjdGlvbkNvbnRleHQgPSB7XG4gICAgICBjb2x1bW4sXG4gICAgICBjb2x1bW5JbmRleCxcbiAgICAgIGlzRmlyc3RDb2x1bW46IGlzRmlyc3QsXG4gICAgICBpc0xhc3RDb2x1bW46IGlzTGFzdCxcbiAgICAgIHRhYmxlU3RhdGU6IHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpLFxuICAgICAgYWN0aW9uczogdGhpcy5nZXRDb2x1bW5BY3Rpb25zKGNvbHVtbiwgY29sdW1uSW5kZXgsIGlzRmlyc3QsIGlzTGFzdClcbiAgICB9O1xuXG4gICAgLy8gVXBkYXRlIGNvbHVtbiBtZW51IHN0YXRlXG4gICAgdGhpcy5jb2x1bW5NZW51U3RhdGUgPSB7XG4gICAgICBpc09wZW46IHRydWUsXG4gICAgICBwb3NpdGlvbixcbiAgICAgIGNvbnRleHRcbiAgICB9O1xuXG4gICAgLy8gRGlzYWJsZSBib2R5IHNjcm9sbFxuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcblxuICAgIC8vIElmIHZpcnR1YWwgc2Nyb2xsIGlzIGVuYWJsZWQsIGFkZCBzY3JvbGwgbGlzdGVuZXIgdG8gY2xvc2UgZHJvcGRvd25cbiAgICBpZiAodGhpcy5pc1ZpcnR1YWxTY3JvbGxFbmFibGVkKCkgJiYgdGhpcy5zY3JvbGxDb250YWluZXIpIHtcbiAgICAgIGNvbnN0IHNjcm9sbExpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlQ29sdW1uTWVudSgpO1xuICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lcj8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc2Nyb2xsTGlzdGVuZXIpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHNjcm9sbExpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIGNvbHVtbiBtZW51IGRyb3Bkb3duXG4gICAqL1xuICBjbG9zZUNvbHVtbk1lbnUoKTogdm9pZCB7XG4gICAgdGhpcy5jb2x1bW5NZW51U3RhdGUgPSB7XG4gICAgICBpc09wZW46IGZhbHNlLFxuICAgICAgcG9zaXRpb246IHsgeDogMCwgeTogMCB9LFxuICAgICAgY29udGV4dDogbnVsbFxuICAgIH07XG5cbiAgICAvLyBSZS1lbmFibGUgYm9keSBzY3JvbGxcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJyc7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGNvbHVtbiBhY3Rpb24gY2xpY2tlZFxuICAgKi9cbiAgb25Db2x1bW5BY3Rpb25DbGlja2VkKGV2ZW50OiBDb2x1bW5BY3Rpb25FdmVudCk6IHZvaWQge1xuICAgIC8vIEV4ZWN1dGUgYWN0aW9uIGNhbGxiYWNrIGlmIHByb3ZpZGVkXG4gICAgaWYgKGV2ZW50LmFjdGlvbi5hY3Rpb24pIHtcbiAgICAgIGV2ZW50LmFjdGlvbi5hY3Rpb24oZXZlbnQuY29sdW1uLCBldmVudC5jb2x1bW5JbmRleCk7XG4gICAgfVxuXG4gICAgLy8gRG9uJ3QgY2xvc2UgbWVudSBpZiBpdCdzIGEgZmlsdGVyIGFjdGlvbiAoZmlsdGVyIG5lZWRzIG1lbnUgdG8gc3RheSBvcGVuKVxuICAgIGlmIChldmVudC5hY3Rpb24uaWQgPT09ICdmaWx0ZXInKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgZHJvcGRvd24gZm9yIG90aGVyIGFjdGlvbnNcbiAgICB0aGlzLmNsb3NlQ29sdW1uTWVudSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb2x1bW4gYWN0aW9ucyAoYnVpbHQtaW4gKyBjdXN0b20pXG4gICAqL1xuICBwcml2YXRlIGdldENvbHVtbkFjdGlvbnMoXG4gICAgY29sdW1uOiBDb2x1bW5Db25maWc8YW55PiwgXG4gICAgY29sdW1uSW5kZXg6IG51bWJlciwgXG4gICAgaXNGaXJzdDogYm9vbGVhbiwgXG4gICAgaXNMYXN0OiBib29sZWFuXG4gICk6IENvbHVtbkFjdGlvbltdIHtcbiAgICBjb25zdCBhY3Rpb25zOiBDb2x1bW5BY3Rpb25bXSA9IFtdO1xuICAgIFxuICAgIC8vIEFkZCBidWlsdC1pbiBhY3Rpb25zIGlmIGVuYWJsZWQgKGRlZmF1bHQ6IHRydWUpXG4gICAgY29uc3QgaW5jbHVkZUJ1aWx0SW4gPSBjb2x1bW4uaW5jbHVkZUJ1aWx0SW5BY3Rpb25zID8/IHRydWU7XG4gICAgaWYgKGluY2x1ZGVCdWlsdEluKSB7XG4gICAgICBhY3Rpb25zLnB1c2goLi4udGhpcy5nZXRCdWlsdEluQ29sdW1uQWN0aW9ucyhjb2x1bW4sIGNvbHVtbkluZGV4LCBpc0ZpcnN0LCBpc0xhc3QpKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQWRkIGN1c3RvbSBjb2x1bW4gYWN0aW9ucyBmcm9tIGNvbmZpZ1xuICAgIGlmIChjb2x1bW4uY29sdW1uQWN0aW9ucyAmJiBjb2x1bW4uY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBhY3Rpb25zLnB1c2goLi4uY29sdW1uLmNvbHVtbkFjdGlvbnMpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gYWN0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYnVpbHQtaW4gY29sdW1uIGFjdGlvbnMgKHNvcnQsIGZpbHRlciwgcGluLCBtb3ZlKVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRCdWlsdEluQ29sdW1uQWN0aW9ucyhcbiAgICBjb2x1bW46IENvbHVtbkNvbmZpZzxhbnk+LFxuICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgaXNGaXJzdDogYm9vbGVhbixcbiAgICBpc0xhc3Q6IGJvb2xlYW5cbiAgKTogQ29sdW1uQWN0aW9uW10ge1xuICAgIGNvbnN0IHRhYmxlU3RhdGUgPSB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKTtcbiAgICBjb25zdCBhY3Rpb25zOiBDb2x1bW5BY3Rpb25bXSA9IFtdO1xuXG4gICAgLy8gU29ydCBhc2NlbmRpbmdcbiAgICBpZiAoY29sdW1uLnNvcnRhYmxlICE9PSBmYWxzZSkge1xuICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgaWQ6ICdzb3J0LWFzYycsXG4gICAgICAgIGxhYmVsOiB0aGlzLmdldFNvcnRMYWJlbChjb2x1bW4sICdhc2MnKSxcbiAgICAgICAgaWNvbjogJ+KGkScsXG4gICAgICAgIGFjdGlvbjogKGNvbCkgPT4ge1xuICAgICAgICAgIHRhYmxlU3RhdGUuYWRkU29ydFRvQ29sdW1uKGNvbC5rZXksIFNvcnREaXJlY3Rpb24uQVNDKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gU29ydCBkZXNjZW5kaW5nXG4gICAgaWYgKGNvbHVtbi5zb3J0YWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgIGlkOiAnc29ydC1kZXNjJyxcbiAgICAgICAgbGFiZWw6IHRoaXMuZ2V0U29ydExhYmVsKGNvbHVtbiwgJ2Rlc2MnKSxcbiAgICAgICAgaWNvbjogJ+KGkycsXG4gICAgICAgIGFjdGlvbjogKGNvbCkgPT4ge1xuICAgICAgICAgIHRhYmxlU3RhdGUuYWRkU29ydFRvQ29sdW1uKGNvbC5rZXksIFNvcnREaXJlY3Rpb24uREVTQyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENsZWFyIHNvcnQgKG9ubHkgc2hvdyBpZiBjdXJyZW50bHkgc29ydGVkKVxuICAgIGlmIChjb2x1bW4uc29ydGFibGUgIT09IGZhbHNlICYmIGNvbHVtbi5zb3J0RGlyZWN0aW9uICYmIGNvbHVtbi5zb3J0RGlyZWN0aW9uICE9PSBTb3J0RGlyZWN0aW9uLk5PTkUpIHtcbiAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgIGlkOiAnY2xlYXItc29ydCcsXG4gICAgICAgIGxhYmVsOiAnQ2xlYXIgU29ydCcsXG4gICAgICAgIGljb246ICfinJUnLFxuICAgICAgICBhY3Rpb246IChjb2wpID0+IHtcbiAgICAgICAgICB0YWJsZVN0YXRlLmFkZFNvcnRUb0NvbHVtbihjb2wua2V5LCBTb3J0RGlyZWN0aW9uLk5PTkUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBGaWx0ZXJcbiAgICBpZiAoY29sdW1uLmZpbHRlcmFibGUgIT09IGZhbHNlKSB7XG4gICAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgICBpZDogJ2ZpbHRlcicsXG4gICAgICAgIGxhYmVsOiAnRmlsdGVyJyxcbiAgICAgICAgaWNvbjogJ+KakScsXG4gICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgIC8vIEZpbHRlciBhY3Rpb24gaGFuZGxlZCBieSBjb2x1bW4gbWVudSBjb21wb25lbnRcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUGluIExlZnQgKGlmIG5vdCBhbHJlYWR5IHBpbm5lZClcbiAgICBpZiAoY29sdW1uLnBpbm5hYmxlICE9PSBmYWxzZSAmJiBjb2x1bW4uc3RpY2t5ICE9PSAnbGVmdCcgJiYgY29sdW1uLnN0aWNreSAhPT0gJ3JpZ2h0Jykge1xuICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgaWQ6ICdwaW4tbGVmdCcsXG4gICAgICAgIGxhYmVsOiAnUGluIExlZnQnLFxuICAgICAgICBpY29uOiAn8J+TjCcsXG4gICAgICAgIGFjdGlvbjogKGNvbCkgPT4ge1xuICAgICAgICAgIHRhYmxlU3RhdGUuc2V0U3RpY2t5Q29sdW1uKGNvbC5rZXksICdsZWZ0Jyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFBpbiBSaWdodCAoaWYgbm90IGFscmVhZHkgcGlubmVkKVxuICAgIGlmIChjb2x1bW4ucGlubmFibGUgIT09IGZhbHNlICYmIGNvbHVtbi5zdGlja3kgIT09ICdsZWZ0JyAmJiBjb2x1bW4uc3RpY2t5ICE9PSAncmlnaHQnKSB7XG4gICAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgICBpZDogJ3Bpbi1yaWdodCcsXG4gICAgICAgIGxhYmVsOiAnUGluIFJpZ2h0JyxcbiAgICAgICAgaWNvbjogJ/Cfk4wnLFxuICAgICAgICBhY3Rpb246IChjb2wpID0+IHtcbiAgICAgICAgICB0aGlzLm1vdmVDb2x1bW5Ub0VuZChjb2wua2V5KTtcbiAgICAgICAgICB0YWJsZVN0YXRlLnNldFN0aWNreUNvbHVtbihjb2wua2V5LCAncmlnaHQnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVW5waW4gKGlmIGN1cnJlbnRseSBwaW5uZWQpXG4gICAgaWYgKGNvbHVtbi5waW5uYWJsZSAhPT0gZmFsc2UgJiYgKGNvbHVtbi5zdGlja3kgPT09ICdsZWZ0JyB8fCBjb2x1bW4uc3RpY2t5ID09PSAncmlnaHQnKSkge1xuICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgaWQ6ICd1bnBpbicsXG4gICAgICAgIGxhYmVsOiAnVW5waW4nLFxuICAgICAgICBpY29uOiAn8J+TjScsXG4gICAgICAgIGFjdGlvbjogKGNvbCkgPT4ge1xuICAgICAgICAgIHRhYmxlU3RhdGUuc2V0U3RpY2t5Q29sdW1uKGNvbC5rZXksIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gTW92ZSBsZWZ0IChvbmx5IGlmIG1vdmFibGUgYW5kIG5vdCBwaW5uZWQpXG4gICAgaWYgKCFpc0ZpcnN0ICYmIGNvbHVtbi5tb3ZhYmxlICE9PSBmYWxzZSAmJiAhY29sdW1uLnN0aWNreSkge1xuICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgaWQ6ICdtb3ZlLWxlZnQnLFxuICAgICAgICBsYWJlbDogJ01vdmUgTGVmdCcsXG4gICAgICAgIGljb246ICfihpAnLFxuICAgICAgICBhY3Rpb246IChjb2wpID0+IHtcbiAgICAgICAgICB0aGlzLm9uQ29sdW1uTW92ZWQoe1xuICAgICAgICAgICAgY29sdW1uS2V5OiBjb2wua2V5LFxuICAgICAgICAgICAgZGlyZWN0aW9uOiAnbGVmdCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gTW92ZSByaWdodCAob25seSBpZiBtb3ZhYmxlIGFuZCBub3QgcGlubmVkKVxuICAgIGlmICghaXNMYXN0ICYmIGNvbHVtbi5tb3ZhYmxlICE9PSBmYWxzZSAmJiAhY29sdW1uLnN0aWNreSkge1xuICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgaWQ6ICdtb3ZlLXJpZ2h0JyxcbiAgICAgICAgbGFiZWw6ICdNb3ZlIFJpZ2h0JyxcbiAgICAgICAgaWNvbjogJ+KGkicsXG4gICAgICAgIGFjdGlvbjogKGNvbCkgPT4ge1xuICAgICAgICAgIHRoaXMub25Db2x1bW5Nb3ZlZCh7XG4gICAgICAgICAgICBjb2x1bW5LZXk6IGNvbC5rZXksXG4gICAgICAgICAgICBkaXJlY3Rpb246ICdyaWdodCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNvcnQgbGFiZWwgYmFzZWQgb24gY29sdW1uIGRhdGEgdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTb3J0TGFiZWwoY29sdW1uOiBDb2x1bW5Db25maWc8YW55PiwgZGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF0YVR5cGUgPSBjb2x1bW4uZGF0YVR5cGU7XG5cbiAgICBpZiAoZGF0YVR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZGlyZWN0aW9uID09PSAnYXNjJyA/ICdTb3J0IDDihpI5JyA6ICdTb3J0IDnihpIwJztcbiAgICB9IGVsc2UgaWYgKGRhdGFUeXBlID09PSAnZGF0ZScpIHtcbiAgICAgIHJldHVybiBkaXJlY3Rpb24gPT09ICdhc2MnID8gJ1NvcnQgT2xkZXN0IEZpcnN0JyA6ICdTb3J0IE5ld2VzdCBGaXJzdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkaXJlY3Rpb24gPT09ICdhc2MnID8gJ1NvcnQgQeKGklonIDogJ1NvcnQgWuKGkkEnO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gS0VZQk9BUkQgTkFWSUdBVElPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUga2V5Ym9hcmQgbmF2aWdhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplS2V5Ym9hcmROYXZpZ2F0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHRhYmxlU3RhdGUgPSB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKTtcbiAgICBcbiAgICB0YWJsZVN0YXRlLnNldERpbWVuc2lvbnMoXG4gICAgICB0aGlzLnZpc2libGVDZWxsR3JpZC5sZW5ndGgsXG4gICAgICB0aGlzLnZpc2libGVDb2x1bW5zLmxlbmd0aFxuICAgICk7XG4gICAgXG4gICAgLy8gU3Vic2NyaWJlIHRvIGZvY3VzIHBvc2l0aW9uIGNoYW5nZXNcbiAgICB0aGlzLmZvY3VzU3Vic2NyaXB0aW9uID0gdGFibGVTdGF0ZS5mb2N1c2VkQ2VsbFBvc2l0aW9uJC5zdWJzY3JpYmUocG9zaXRpb24gPT4ge1xuICAgICAgdGhpcy51cGRhdGVDZWxsRm9jdXNTdGF0ZXMocG9zaXRpb24pO1xuICAgIH0pO1xuICAgIFxuICAgIC8vIFN1YnNjcmliZSB0byByZXF1ZXN0IGFkZCByb3cgZXZlbnRzICh3aGVuIG5hdmlnYXRpbmcgcGFzdCBsYXN0IHJvdylcbiAgICB0aGlzLnJlcXVlc3RBZGRSb3dTdWJzY3JpcHRpb24gPSB0YWJsZVN0YXRlLnJlcXVlc3RBZGRSb3ckLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICB0aGlzLnJlcXVlc3RBZGRSb3cuZW1pdChldmVudCk7XG4gICAgfSk7XG4gICAgXG4gICAgLy8gQXV0by1mb2N1cyBmaXJzdCBjZWxsIHRvIGVuYWJsZSBrZXlib2FyZCBuYXZpZ2F0aW9uXG4gICAgaWYgKHRoaXMudmlzaWJsZUNlbGxHcmlkLmxlbmd0aCA+IDAgJiYgdGhpcy52aXNpYmxlQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGFibGVTdGF0ZS5mb2N1c0NlbGwoMCwgMCk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBVcGRhdGUgZm9jdXMgc3RhdGUgaW4gYWxsIGNlbGxzXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUNlbGxGb2N1c1N0YXRlcyhwb3NpdGlvbjogQ2VsbEZvY3VzUG9zaXRpb24gfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnZpc2libGVDZWxsR3JpZCkgcmV0dXJuO1xuICAgIFxuICAgIGZvciAobGV0IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCB0aGlzLnZpc2libGVDZWxsR3JpZC5sZW5ndGg7IHJvd0luZGV4KyspIHtcbiAgICAgIGNvbnN0IHJvdyA9IHRoaXMudmlzaWJsZUNlbGxHcmlkW3Jvd0luZGV4XTtcbiAgICAgIGZvciAobGV0IGNvbEluZGV4ID0gMDsgY29sSW5kZXggPCByb3cubGVuZ3RoOyBjb2xJbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IGNlbGwgPSByb3dbY29sSW5kZXhdO1xuICAgICAgICBpZiAoIWNlbGwpIGNvbnRpbnVlO1xuICAgICAgICBcbiAgICAgICAgY29uc3Qgc2hvdWxkRm9jdXMgPSBwb3NpdGlvbiAmJiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLnJvd0luZGV4ID09PSByb3dJbmRleCAmJiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLmNvbHVtbkluZGV4ID09PSBjb2xJbmRleDtcbiAgICAgICAgXG4gICAgICAgIGlmIChzaG91bGRGb2N1cykge1xuICAgICAgICAgIGNlbGwuZm9jdXMoKTtcbiAgICAgICAgICAvLyBGb2N1cyB0aGUgYWN0dWFsIERPTSBlbGVtZW50XG4gICAgICAgICAgdGhpcy5mb2N1c1RkRWxlbWVudChyb3dJbmRleCwgY29sSW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNlbGwuYmx1cigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogRm9jdXMgdGhlIFREIGVsZW1lbnQgaW4gdGhlIERPTSBhbmQgc2Nyb2xsIGl0IGludG8gdmlldyxcbiAgICogYWNjb3VudGluZyBmb3Igc3RpY2t5IGNvbHVtbnMgb24gbGVmdCBhbmQgcmlnaHRcbiAgICovXG4gIHByaXZhdGUgZm9jdXNUZEVsZW1lbnQocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIFVzZSBzZXRUaW1lb3V0IHRvIGVuc3VyZSBET00gaGFzIHVwZGF0ZWRcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIFVzZSBhYnNvbHV0ZSByb3cgaW5kZXggZm9yIHZpcnR1YWwgc2Nyb2xsIGNvbXBhdGliaWxpdHlcbiAgICAgIGNvbnN0IGFic29sdXRlUm93SW5kZXggPSB0aGlzLmdldEFic29sdXRlUm93SW5kZXgocm93SW5kZXgpO1xuICAgICAgLy8gUXVlcnkgd2l0aGluIHRoaXMgY29tcG9uZW50J3MgaG9zdCBlbGVtZW50IHRvIGF2b2lkIHNlbGVjdGluZyByb3dzIGZyb20gb3RoZXIgdGFibGVzXG4gICAgICBjb25zdCBob3N0RWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmICghaG9zdEVsZW1lbnQpIHJldHVybjtcbiAgICAgIFxuICAgICAgLy8gRmlyc3QsIGVuc3VyZSB0aGUgdGFibGUgY29udGFpbmVyIGhhcyBmb2N1cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvblxuICAgICAgLy8gVGhlIGtleWJvYXJkIG5hdmlnYXRpb24gZGlyZWN0aXZlIGxpc3RlbnMgb24gdGhlIC5zdC10YWJsZSBjb250YWluZXJcbiAgICAgIGNvbnN0IHRhYmxlQ29udGFpbmVyID0gaG9zdEVsZW1lbnQucXVlcnlTZWxlY3RvcignLnN0LXRhYmxlJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgICAgaWYgKHRhYmxlQ29udGFpbmVyICYmIHR5cGVvZiB0YWJsZUNvbnRhaW5lci5mb2N1cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0YWJsZUNvbnRhaW5lci5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IHRyID0gaG9zdEVsZW1lbnQucXVlcnlTZWxlY3RvcihgdHJbZGF0YS1yb3ctaW5kZXg9XCIke2Fic29sdXRlUm93SW5kZXh9XCJdYCk7XG4gICAgICBpZiAodHIpIHtcbiAgICAgICAgY29uc3QgY2VsbHMgPSB0ci5xdWVyeVNlbGVjdG9yQWxsKCd0ZDpub3QoLnNldHRpbmdzLWNvbHVtbik6bm90KC5yb3ctbnVtYmVyLWNlbGwpJyk7XG4gICAgICAgIGNvbnN0IHRhcmdldENlbGwgPSBjZWxsc1tjb2xJbmRleF0gYXMgSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0YXJnZXRDZWxsICYmIHR5cGVvZiB0YXJnZXRDZWxsLmZvY3VzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGFyZ2V0Q2VsbC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgICAgdGhpcy5zY3JvbGxDZWxsSW50b1ZpZXcodGFyZ2V0Q2VsbCwgY29sSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIGEgY2VsbCBpbnRvIHZpZXcsIGFjY291bnRpbmcgZm9yIHN0aWNreSBjb2x1bW5zXG4gICAqL1xuICBwcml2YXRlIHNjcm9sbENlbGxJbnRvVmlldyhjZWxsOiBIVE1MRWxlbWVudCwgY29sSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIEZpbmQgdGhlIHNjcm9sbCBjb250YWluZXJcbiAgICBjb25zdCBzY3JvbGxDb250YWluZXIgPSB0aGlzLmdldFNjcm9sbENvbnRhaW5lckVsZW1lbnQoKTtcbiAgICBpZiAoIXNjcm9sbENvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgY29uc3QgY2VsbFJlY3QgPSBjZWxsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBzY3JvbGxDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgc3RpY2t5IGNvbHVtbiB3aWR0aHNcbiAgICBjb25zdCB7IGxlZnRTdGlja3lXaWR0aCwgcmlnaHRTdGlja3lXaWR0aCB9ID0gdGhpcy5jYWxjdWxhdGVTdGlja3lXaWR0aHMoKTtcblxuICAgIC8vIENhbGN1bGF0ZSB2aXNpYmxlIGFyZWEgKGV4Y2x1ZGluZyBzdGlja3kgY29sdW1ucylcbiAgICBjb25zdCB2aXNpYmxlTGVmdCA9IGNvbnRhaW5lclJlY3QubGVmdCArIGxlZnRTdGlja3lXaWR0aDtcbiAgICBjb25zdCB2aXNpYmxlUmlnaHQgPSBjb250YWluZXJSZWN0LnJpZ2h0IC0gcmlnaHRTdGlja3lXaWR0aDtcbiAgICBjb25zdCB2aXNpYmxlVG9wID0gY29udGFpbmVyUmVjdC50b3A7XG4gICAgY29uc3QgdmlzaWJsZUJvdHRvbSA9IGNvbnRhaW5lclJlY3QuYm90dG9tO1xuXG4gICAgLy8gQ2hlY2sgaWYgY29sdW1uIGlzIHN0aWNreSAoZG9uJ3Qgc2Nyb2xsIGZvciBzdGlja3kgY29sdW1ucylcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLnZpc2libGVDb2x1bW5zW2NvbEluZGV4XTtcbiAgICBpZiAoY29sdW1uPy5zdGlja3kpIHtcbiAgICAgIC8vIEp1c3QgZW5zdXJlIHZlcnRpY2FsIHZpc2liaWxpdHkgZm9yIHN0aWNreSBjb2x1bW5zXG4gICAgICBpZiAoY2VsbFJlY3QudG9wIDwgdmlzaWJsZVRvcCkge1xuICAgICAgICBzY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wIC09ICh2aXNpYmxlVG9wIC0gY2VsbFJlY3QudG9wKTtcbiAgICAgIH0gZWxzZSBpZiAoY2VsbFJlY3QuYm90dG9tID4gdmlzaWJsZUJvdHRvbSkge1xuICAgICAgICBzY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wICs9IChjZWxsUmVjdC5ib3R0b20gLSB2aXNpYmxlQm90dG9tKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBjZWxsIGlzIGFscmVhZHkgZnVsbHkgdmlzaWJsZSBob3Jpem9udGFsbHkgKG5vIHNjcm9sbCBuZWVkZWQpXG4gICAgY29uc3QgaXNDZWxsRnVsbHlWaXNpYmxlSG9yaXpvbnRhbGx5ID0gY2VsbFJlY3QubGVmdCA+PSB2aXNpYmxlTGVmdCAmJiBjZWxsUmVjdC5yaWdodCA8PSB2aXNpYmxlUmlnaHQ7XG4gICAgXG4gICAgLy8gT25seSBzY3JvbGwgaG9yaXpvbnRhbGx5IGlmIGNlbGwgaXMgTk9UIGZ1bGx5IHZpc2libGVcbiAgICBpZiAoIWlzQ2VsbEZ1bGx5VmlzaWJsZUhvcml6b250YWxseSkge1xuICAgICAgaWYgKGNlbGxSZWN0LmxlZnQgPCB2aXNpYmxlTGVmdCkge1xuICAgICAgICAvLyBDZWxsIGlzIGhpZGRlbiBiZWhpbmQgbGVmdCBzdGlja3kgY29sdW1uc1xuICAgICAgICBzY3JvbGxDb250YWluZXIuc2Nyb2xsTGVmdCAtPSAodmlzaWJsZUxlZnQgLSBjZWxsUmVjdC5sZWZ0KTtcbiAgICAgIH0gZWxzZSBpZiAoY2VsbFJlY3QucmlnaHQgPiB2aXNpYmxlUmlnaHQpIHtcbiAgICAgICAgLy8gQ2VsbCBpcyBoaWRkZW4gYmVoaW5kIHJpZ2h0IHN0aWNreSBjb2x1bW5zXG4gICAgICAgIHNjcm9sbENvbnRhaW5lci5zY3JvbGxMZWZ0ICs9IChjZWxsUmVjdC5yaWdodCAtIHZpc2libGVSaWdodCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmVydGljYWwgc2Nyb2xsaW5nXG4gICAgaWYgKGNlbGxSZWN0LnRvcCA8IHZpc2libGVUb3ApIHtcbiAgICAgIHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgLT0gKHZpc2libGVUb3AgLSBjZWxsUmVjdC50b3ApO1xuICAgIH0gZWxzZSBpZiAoY2VsbFJlY3QuYm90dG9tID4gdmlzaWJsZUJvdHRvbSkge1xuICAgICAgc2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCArPSAoY2VsbFJlY3QuYm90dG9tIC0gdmlzaWJsZUJvdHRvbSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNjcm9sbCB0byBhIHNwZWNpZmljIHJvdyBieSBpbmRleCBhbmQgb3B0aW9uYWxseSBmb2N1cyBpdFxuICAgKiBAcGFyYW0gcm93SW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIHJvdyB0byBzY3JvbGwgdG9cbiAgICogQHBhcmFtIGZvY3VzRmlyc3RDZWxsIC0gV2hldGhlciB0byBmb2N1cyB0aGUgZmlyc3QgZWRpdGFibGUgY2VsbCAoZGVmYXVsdDogZmFsc2UpXG4gICAqL1xuICBwdWJsaWMgc2Nyb2xsVG9Sb3dBbmRGb2N1cyhyb3dJbmRleDogbnVtYmVyLCBmb2N1c0ZpcnN0Q2VsbDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBob3N0RWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmICghaG9zdEVsZW1lbnQpIHJldHVybjtcbiAgICAgIFxuICAgICAgLy8gRmluZCB0aGUgdGFyZ2V0IHJvd1xuICAgICAgY29uc3Qgcm93cyA9IGhvc3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3Rib2R5IHRyJyk7XG4gICAgICBjb25zdCB0YXJnZXRSb3cgPSByb3dzW3Jvd0luZGV4XSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIFxuICAgICAgaWYgKHRhcmdldFJvdykge1xuICAgICAgICAvLyBTY3JvbGwgdGhlIHJvdyBpbnRvIHZpZXdcbiAgICAgICAgdGFyZ2V0Um93LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ25lYXJlc3QnIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gT3B0aW9uYWxseSBmb2N1cyB0aGUgZmlyc3QgZWRpdGFibGUgY2VsbFxuICAgICAgICBpZiAoZm9jdXNGaXJzdENlbGwpIHtcbiAgICAgICAgICBjb25zdCBjZWxscyA9IHRhcmdldFJvdy5xdWVyeVNlbGVjdG9yQWxsKCd0ZDpub3QoLnNldHRpbmdzLWNvbHVtbik6bm90KC5yb3ctbnVtYmVyLWNlbGwpJyk7XG4gICAgICAgICAgY29uc3QgZmlyc3RDZWxsID0gY2VsbHNbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgaWYgKGZpcnN0Q2VsbCAmJiB0eXBlb2YgZmlyc3RDZWxsLmZvY3VzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgZmlyc3RDZWxsLmZvY3VzKCk7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0YWJsZSBzdGF0ZSBmb2N1cyBwb3NpdGlvblxuICAgICAgICAgICAgICBpZiAodGhpcy50YWJsZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZVN0YXRlLmZvY3VzQ2VsbChyb3dJbmRleCwgMCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIHRvIHRoZSBsYXN0IHJvdyBpbiB0aGUgdGFibGVcbiAgICogQHBhcmFtIGZvY3VzRmlyc3RDZWxsIC0gV2hldGhlciB0byBmb2N1cyB0aGUgZmlyc3QgZWRpdGFibGUgY2VsbCAoZGVmYXVsdDogdHJ1ZSlcbiAgICovXG4gIHB1YmxpYyBzY3JvbGxUb0xhc3RSb3coZm9jdXNGaXJzdENlbGw6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgY29uc3Qgcm93Q291bnQgPSB0aGlzLmRhdGE/Lmxlbmd0aCB8fCAwO1xuICAgIGlmIChyb3dDb3VudCA+IDApIHtcbiAgICAgIHRoaXMuc2Nyb2xsVG9Sb3dBbmRGb2N1cyhyb3dDb3VudCAtIDEsIGZvY3VzRmlyc3RDZWxsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzY3JvbGwgY29udGFpbmVyIGVsZW1lbnRcbiAgICovXG4gIHByaXZhdGUgZ2V0U2Nyb2xsQ29udGFpbmVyRWxlbWVudCgpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIC8vIFByZWZlciBjYWNoZWQgY29udGFpbmVyIGlmIGFscmVhZHkgcmVzb2x2ZWRcbiAgICBpZiAodGhpcy5zY3JvbGxDb250YWluZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjcm9sbENvbnRhaW5lcjtcbiAgICB9XG4gICAgLy8gVmlydHVhbCBzY3JvbGwgdXNlcyBzY3JvbGxWaWV3cG9ydFxuICAgIGlmICh0aGlzLmlzVmlydHVhbFNjcm9sbEVuYWJsZWQoKSAmJiB0aGlzLnNjcm9sbFZpZXdwb3J0Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLnNjcm9sbENvbnRhaW5lciA9IHRoaXMuc2Nyb2xsVmlld3BvcnQubmF0aXZlRWxlbWVudDtcbiAgICAgIHJldHVybiB0aGlzLnNjcm9sbENvbnRhaW5lcjtcbiAgICB9XG4gICAgLy8gU3RhbmRhcmQgbW9kZSB1c2VzIC5zdC10YWJsZSBjb250YWluZXIgd2l0aGluIFRISVMgY29tcG9uZW50J3MgaG9zdCBlbGVtZW50XG4gICAgLy8gVXNlIGVsZW1lbnRSZWYgdG8gcXVlcnkgd2l0aGluIHRoZSBjb21wb25lbnQgaW5zdGVhZCBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yXG4gICAgLy8gd2hpY2ggd291bGQgcmV0dXJuIHRoZSBmaXJzdCB0YWJsZSBvbiB0aGUgcGFnZVxuICAgIGNvbnN0IGhvc3RFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmIChob3N0RWxlbWVudCkge1xuICAgICAgY29uc3QgdGFibGVDb250YWluZXIgPSBob3N0RWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc3QtdGFibGUnKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgICBpZiAodGFibGVDb250YWluZXIpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIgPSB0YWJsZUNvbnRhaW5lcjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2Nyb2xsQ29udGFpbmVyIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRvdGFsIHdpZHRoIG9mIHN0aWNreSBjb2x1bW5zIG9uIGxlZnQgYW5kIHJpZ2h0XG4gICAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZVN0aWNreVdpZHRocygpOiB7IGxlZnRTdGlja3lXaWR0aDogbnVtYmVyOyByaWdodFN0aWNreVdpZHRoOiBudW1iZXIgfSB7XG4gICAgbGV0IGxlZnRTdGlja3lXaWR0aCA9IDA7XG4gICAgbGV0IHJpZ2h0U3RpY2t5V2lkdGggPSAwO1xuXG4gICAgLy8gQWNjb3VudCBmb3Igcm93IG51bWJlciBjb2x1bW4gaWYgZW5hYmxlZFxuICAgIGlmICh0aGlzLm1lcmdlZENvbmZpZy5zaG93Um93TnVtYmVyKSB7XG4gICAgICBsZWZ0U3RpY2t5V2lkdGggKz0gMzA7IC8vIFJvdyBudW1iZXIgY29sdW1uIHdpZHRoXG4gICAgfVxuXG4gICAgLy8gQ2FsY3VsYXRlIGZyb20gY29sdW1uIGNvbmZpZ3NcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiB0aGlzLnZpc2libGVDb2x1bW5zKSB7XG4gICAgICBpZiAoY29sLnN0aWNreSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIGxlZnRTdGlja3lXaWR0aCArPSAoY29sLndpZHRoIGFzIG51bWJlcikgfHwgMTAwO1xuICAgICAgfSBlbHNlIGlmIChjb2wuc3RpY2t5ID09PSAncmlnaHQnKSB7XG4gICAgICAgIHJpZ2h0U3RpY2t5V2lkdGggKz0gKGNvbC53aWR0aCBhcyBudW1iZXIpIHx8IDEwMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBY2NvdW50IGZvciBzZXR0aW5ncyBjb2x1bW4gb25seSB3aGVuIHJvdyBhY3Rpb25zIGFyZSBlbmFibGVkICh1c2UgY29uc2lzdGVudCB3aWR0aClcbiAgICBjb25zdCBzZXR0aW5nc0NvbHVtbldpZHRoID0gdGhpcy5oYXNSb3dBY3Rpb25zKCkgPyAzMiA6IDA7XG4gICAgcmlnaHRTdGlja3lXaWR0aCArPSBzZXR0aW5nc0NvbHVtbldpZHRoO1xuXG4gICAgcmV0dXJuIHsgbGVmdFN0aWNreVdpZHRoLCByaWdodFN0aWNreVdpZHRoIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgY2VsbCBjbGlja1xuICAgKi9cbiAgb25DZWxsQ2xpY2socm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0tleWJvYXJkTmF2aWdhdGlvbkVuYWJsZWQoKSkgcmV0dXJuO1xuICAgIHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpLmZvY3VzQ2VsbChyb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIGNlbGwgZW50ZXJpbmcgZWRpdCBtb2RlXG4gICAqL1xuICBvbkNlbGxFZGl0KGV2ZW50OiBDZWxsRWRpdEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jZWxsRWRpdC5lbWl0KGV2ZW50KTtcbiAgICBcbiAgICBpZiAodGhpcy5pc0tleWJvYXJkTmF2aWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgY29uc3Qgcm93SW5kZXggPSBldmVudC5jZWxsLmdldFJvd0luZGV4KCk7XG4gICAgICBjb25zdCBjb2x1bW5LZXkgPSBldmVudC5jb2x1bW5LZXk7XG4gICAgICBjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMudmlzaWJsZUNvbHVtbnMuZmluZEluZGV4KGNvbCA9PiBjb2wua2V5ID09PSBjb2x1bW5LZXkpO1xuICAgICAgXG4gICAgICBpZiAocm93SW5kZXggIT09IHVuZGVmaW5lZCAmJiBjb2x1bW5JbmRleCA+PSAwKSB7XG4gICAgICAgIHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpLnNldEVkaXRpbmdDZWxsKHJvd0luZGV4LCBjb2x1bW5JbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIGNlbGwgc2F2ZVxuICAgKi9cbiAgb25DZWxsU2F2ZShldmVudDogQ2VsbFNhdmVFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuY2VsbFNhdmUuZW1pdChldmVudCk7XG4gICAgXG4gICAgaWYgKHRoaXMuaXNLZXlib2FyZE5hdmlnYXRpb25FbmFibGVkKCkpIHtcbiAgICAgIHRoaXMuZ2V0QWN0aXZlVGFibGVTdGF0ZSgpLmNsZWFyRWRpdGluZ0NlbGwoKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgY2VsbCBjYW5jZWxcbiAgICovXG4gIG9uQ2VsbENhbmNlbChldmVudDogQ2VsbENhbmNlbEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jZWxsQ2FuY2VsLmVtaXQoZXZlbnQpO1xuICAgIFxuICAgIGlmICh0aGlzLmlzS2V5Ym9hcmROYXZpZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKS5jbGVhckVkaXRpbmdDZWxsKCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIGNlbGwgc2F2ZSB3aXRoIG5hdmlnYXRpb24gKEV4Y2VsLWxpa2UgYmVoYXZpb3IpXG4gICAqL1xuICBvbkNlbGxTYXZlQW5kTmF2aWdhdGUoZXZlbnQ6IHtldmVudDogS2V5Ym9hcmRFdmVudCwgZGlyZWN0aW9uOiBOYXZpZ2F0aW9uRGlyZWN0aW9ufSk6IHZvaWQge1xuICAgIC8vIE5hdmlnYXRpb24gaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IHRoZSBkaXJlY3RpdmUgYWZ0ZXIgc2F2ZVxuICAgIC8vIEp1c3QgZW5zdXJlIGVkaXRpbmcgc3RhdGUgaXMgY2xlYXJlZFxuICAgIGlmICh0aGlzLmlzS2V5Ym9hcmROYXZpZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKS5jbGVhckVkaXRpbmdDZWxsKCk7XG4gICAgICAvLyBNb3ZlIGZvY3VzIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0aW9uXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5nZXRBY3RpdmVUYWJsZVN0YXRlKCkubW92ZUZvY3VzKGV2ZW50LmRpcmVjdGlvbik7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgZm9jdXMgb24gdGFibGUgY29udGFpbmVyIC0gZm9jdXMgZmlyc3QgY2VsbCBpZiBubyBjZWxsIGlzIGZvY3VzZWRcbiAgICovXG4gIG9uVGFibGVDb250YWluZXJGb2N1cyhldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0tleWJvYXJkTmF2aWdhdGlvbkVuYWJsZWQoKSkgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IHRhYmxlU3RhdGUgPSB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKTtcbiAgICBjb25zdCBjdXJyZW50Rm9jdXMgPSB0YWJsZVN0YXRlLmdldEZvY3VzZWRQb3NpdGlvbigpO1xuICAgIFxuICAgIC8vIElmIG5vIGNlbGwgaXMgZm9jdXNlZCwgZm9jdXMgdGhlIGZpcnN0IGNlbGxcbiAgICBpZiAoIWN1cnJlbnRGb2N1cyAmJiB0aGlzLnZpc2libGVDZWxsR3JpZC5sZW5ndGggPiAwICYmIHRoaXMudmlzaWJsZUNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGFibGVTdGF0ZS5mb2N1c0NlbGwoMCwgMCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYga2V5Ym9hcmQgbmF2aWdhdGlvbiBpcyBlbmFibGVkXG4gICAqL1xuICBpc0tleWJvYXJkTmF2aWdhdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VkQ29uZmlnLmZlYXR1cmVzPy5rZXlib2FyZE5hdmlnYXRpb24/LmVuYWJsZWQgPz8gZmFsc2U7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgRWRpdE1vZGUgZW51bSB2YWx1ZSBmb3IgY2VsbHNcbiAgICogRm9yIEV4Y2VsLWxpa2UgdGFibGVzIHdpdGgga2V5Ym9hcmQgbmF2aWdhdGlvbiwgdXNlIEVOVEVSIG1vZGVcbiAgICogd2hpY2ggYWxsb3dzIGFycm93IGtleSBuYXZpZ2F0aW9uIHdpdGhvdXQgdHJpZ2dlcmluZyBlZGl0LlxuICAgKiBEb3VibGUtY2xpY2sgd2lsbCBzdGlsbCB3b3JrIHRvIHN0YXJ0IGVkaXRpbmcuXG4gICAqL1xuICBnZXRFZGl0TW9kZUZvckNlbGxzKCk6IEVkaXRNb2RlIHtcbiAgICAvLyBJZiBrZXlib2FyZCBuYXZpZ2F0aW9uIGlzIGVuYWJsZWQsIHVzZSBFTlRFUiBtb2RlIGZvciBFeGNlbC1saWtlIGJlaGF2aW9yXG4gICAgLy8gT3RoZXJ3aXNlIHVzZSBDTElDSyBtb2RlIGZvciBpbW1lZGlhdGUgZWRpdGluZ1xuICAgIGlmICh0aGlzLmlzS2V5Ym9hcmROYXZpZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gRWRpdE1vZGUuRU5URVI7XG4gICAgfVxuICAgIHJldHVybiBFZGl0TW9kZS5DTElDSztcbiAgfVxuICBcbiAgLyoqXG4gICAqIENsZWFyIGZvY3VzIHdoZW4gY2xpY2tpbmcgb3V0c2lkZSB0YWJsZVxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNLZXlib2FyZE5hdmlnYXRpb25FbmFibGVkKCkpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgdGFibGVFbGVtZW50ID0gdGFyZ2V0LmNsb3Nlc3QoJy5zdC10YWJsZScpO1xuICAgIFxuICAgIGlmICghdGFibGVFbGVtZW50KSB7XG4gICAgICB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKS5jbGVhckZvY3VzKCk7XG4gICAgICB0aGlzLmdldEFjdGl2ZVRhYmxlU3RhdGUoKS5jbGVhckVkaXRpbmdDZWxsKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmZvY3VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudmFsaWRhdGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRhdGFTdWJzY3JpcHRpb24/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=
|